[
  {
    "path": ".editorconfig",
    "content": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# editorconfig.org\n\nroot = true\n\n[*]\n\n# Change these settings to your own preference\nindent_style = space\nindent_size = 2\n\n# We recommend you to keep these unchanged\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: mailcow\ncustom: [\"https://www.servercow.de/mailcow?lang=en#sal\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Bug_report.yml",
    "content": "name: 🐞 Bug Report\ndescription: Report a reproducible bug for mailcow. (NOT to be used for support questions.)\nlabels: [\"bug\"]\nbody:\n  - type: checkboxes\n    attributes:\n      label: Contribution guidelines\n      description: Please read the contribution guidelines before proceeding.\n      options:\n      - label: I've read the [contribution guidelines](https://github.com/mailcow/mailcow-dockerized/blob/master/CONTRIBUTING.md) and wholeheartedly agree\n        required: true\n  - type: checkboxes\n    attributes:\n      label: Checklist prior issue creation\n      description: Prior to creating the issue...\n      options:\n      - label: I understand that failure to follow below instructions may cause this issue to be closed.\n        required: true\n      - label: I understand that vague, incomplete or inaccurate information may cause this issue to be closed.\n        required: true\n      - label: I understand that this form is intended solely for reporting software bugs and not for support-related inquiries.\n        required: true\n      - label: I understand that all responses are voluntary and community-driven, and do not constitute commercial support.\n        required: true\n      - label: I confirm that I have reviewed previous [issues](https://github.com/mailcow/mailcow-dockerized/issues) to ensure this matter has not already been addressed.\n        required: true\n      - label: I confirm that my environment meets all [prerequisite requirements](https://docs.mailcow.email/getstarted/prerequisite-system/) as specified in the official documentation.\n        required: true\n  - type: textarea\n    attributes:\n      label: Description\n      description: Please provide a brief description of the bug. If applicable, add screenshots to help explain your problem. (Very useful for bugs in mailcow UI.)\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"Steps to reproduce:\"\n      description: \"Please describe the steps to reproduce the bug. Screenshots can be added, if helpful.\"\n      placeholder: |-\n        1. ...\n        2. ...\n        3. ...\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"Logs:\"\n      description: \"Please take a look at the [official documentation](https://docs.mailcow.email/troubleshooting/debug-logs/) and post the last few lines of logs, when the error occurs. For example, docker container logs of affected containers. This will be automatically formatted into code, so no need for backticks.\"\n      render: plain text\n    validations:\n      required: true\n  - type: markdown\n    attributes:\n      value: |\n        ## System information\n        In this stage we would kindly ask you to attach general system information about your setup.\n  - type: dropdown\n    attributes:\n      label: \"Which branch are you using?\"\n      description: \"#### Run: `git rev-parse --abbrev-ref HEAD`\"\n      multiple: false\n      options:\n        - master (stable)\n        - staging\n        - nightly\n    validations:\n      required: true\n  - type: dropdown\n    attributes:\n      label: \"Which architecture are you using?\"\n      description: \"#### Run: `uname -m`\"\n      multiple: false\n      options:\n        - x86_64\n        - ARM64 (aarch64)\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"Operating System:\"\n      description: \"#### Run: `lsb_release -ds`\"\n      placeholder: \"e.g. Ubuntu 22.04 LTS\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"Server/VM specifications:\"\n      placeholder: \"Memory, CPU Cores\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"Is Apparmor, SELinux or similar active?\"\n      placeholder: \"yes/no\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"Virtualization technology:\"\n      description: \"LXC and OpenVZ are not supported!\"\n      placeholder: \"KVM, VMware ESXi, Xen, etc\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"Docker version:\"\n      description: \"#### Run: `docker version`\"\n      placeholder: \"20.10.21\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"docker-compose version or docker compose version:\"\n      description: \"#### Run: `docker-compose version` or `docker compose version`\"\n      placeholder: \"v2.12.2\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"mailcow version:\"\n      description: \"#### Run: ```git describe --tags `git rev-list --tags --max-count=1` ```\"\n      placeholder: \"2022-08x\"\n    validations:\n      required: true\n  - type: input\n    attributes:\n      label: \"Reverse proxy:\"\n      placeholder: \"e.g. nginx/Traefik, or none\"\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"Logs of git diff:\"\n      description: \"#### Output of `git diff origin/master`, any other changes to the code? Sanitize if needed. If so, **please post them**:\"\n      render: plain text\n    validations:\n      required: false\n  - type: textarea\n    attributes:\n      label: \"Logs of iptables -L -vn:\"\n      description: \"#### Output of `iptables -L -vn`\"\n      render: plain text\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"Logs of ip6tables -L -vn:\"\n      description: \"#### Output of `ip6tables -L -vn`\"\n      render: plain text\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"Logs of iptables -L -vn -t nat:\"\n      description: \"#### Output of `iptables -L -vn -t nat`\"\n      render: plain text\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"Logs of ip6tables -L -vn -t nat:\"\n      description: \"#### Output of `ip6tables -L -vn -t nat`\"\n      render: plain text\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: \"DNS check:\"\n      description: \"#### Output of `docker exec -it $(docker ps -qf name=acme-mailcow) dig +short stackoverflow.com @172.22.1.254` (set the IP accordingly, if you changed the internal mailcow network)\"\n      render: plain text\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/Feature_request.yml",
    "content": "name: 💡 Feature Request\ndescription: Suggest an idea for mailcow.\nlabels: [\"enhancement\"]\nbody:\n  - type: textarea\n    attributes:\n      label: Summary\n      description: Please describe your idea in a reasonable amount of detail.\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Motivation\n      description: Please describe how your idea would benefit you and other users.\n    validations:\n      required: true\n  - type: textarea\n    attributes:\n      label: Additional context\n      description: Add any other context or screenshots about the feature request.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: ❓ Community-driven support (Free)\n    url: https://docs.mailcow.email/#community-support-and-chat\n    about: Please use the community forum for questions or assistance\n  - name: 🔥 Premium Support (Paid)\n    url: https://www.servercow.de/mailcow?lang=en#support\n    about: Buy a support subscription for any critical issues and get assisted by the mailcow Team. See conditions!\n  - name: 🚨 Report a security vulnerability\n    url: \"mailto:info@servercow.de?subject=mailcow: dockerized Security Vulnerability\"\n    about: Please give us appropriate time to verify, respond and fix before disclosure.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/pr_to_nighty_template.yml",
    "content": "## :file_folder:  Modified files\n<!-- Diff files - START -->\n<!-- Diff files - END -->"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!-- _Please make sure to review and check all of these items, otherwise we might refuse your PR:_ -->\n\n## Contribution Guidelines\n\n* [ ] I've read the [contribution guidelines](https://github.com/mailcow/mailcow-dockerized/blob/master/CONTRIBUTING.md) and wholeheartedly agree them\n\n<!-- _NOTE: this tickbox is needed to fullfil on order to get your PR reviewed._ -->\n\n## What does this PR include?\n\n### Short Description\n\n<!-- Please write a short description, what your PR does here. -->\n\n###  Affected Containers\n\n<!-- Please list all affected Docker containers here, which you commited changes to -->\n\n<!--\n\nPlease list them like this:\n\n- container1\n- container2\n- container3\netc.\n\n-->\n\n## Did you run tests?\n\n### What did you tested?\n\n<!-- Please write shortly, what you've tested (which components etc.). -->\n\n### What were the final results? (Awaited, got)\n\n<!-- Please write shortly, what your final tests results were. What did you awaited? Was the outcome the awaited one? -->"
  },
  {
    "path": ".github/renovate.json",
    "content": "{\n  \"enabled\": true,\n  \"timezone\": \"Europe/Berlin\",\n  \"dependencyDashboard\": true,\n  \"dependencyDashboardTitle\": \"Renovate Dashboard\",\n  \"commitBody\": \"Signed-off-by: milkmaker <milkmaker@mailcow.de>\",\n  \"rebaseWhen\": \"auto\",\n  \"labels\": [\"renovate\"],\n  \"assignees\": [\n    \"@magiccc\"\n  ],\n  \"baseBranches\": [\"staging\"],\n  \"enabledManagers\": [\"github-actions\", \"regex\", \"docker-compose\"],\n  \"ignorePaths\": [\n    \"data\\/web\\/inc\\/lib\\/vendor\\/**\"\n  ],\n  \"regexManagers\": [\n    {\n      \"fileMatch\": [\"(^|/)Dockerfile[^/]*$\"],\n      \"matchStrings\": [\n        \"#\\\\srenovate:\\\\sdatasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?( extractVersion=(?<extractVersion>.*?))?\\\\s(ENV|ARG) .*?_VERSION=(?<currentValue>.*)\\\\s\"\n       ]\n    }\n  ]\n}\n"
  },
  {
    "path": ".github/workflows/check_if_support_labeled.yml",
    "content": "name: Check if labeled support, if so send message and close issue\non:\n  issues:\n    types:\n      - labeled\njobs:\n  add-comment:\n    if: github.event.label.name == 'support'\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n    steps:\n      - name: Add comment\n        run: gh issue comment \"$NUMBER\" --body \"$BODY\"\n        env:\n          GH_TOKEN: ${{ secrets.SUPPORTISSUES_ACTION_PAT }}\n          GH_REPO: ${{ github.repository }}\n          NUMBER: ${{ github.event.issue.number }}\n          BODY: |\n              **THIS IS A AUTOMATED MESSAGE!**\n\n              It seems your issue is not a bug.\n              Therefore we highly advise you to get support!\n              \n              You can get support either by:\n              - ordering a paid [support contract at Servercow](https://www.servercow.de/mailcow?lang=en#support/) (Directly from the developers) or\n              - using the [community forum](https://community.mailcow.email) (**Based on volunteers! NO guaranteed answer**) or\n              - using the [Telegram support channel](https://t.me/mailcow) (**Based on volunteers! NO guaranteed answer**)\n\n              This issue will be closed. If you think your reported issue is not a support case feel free to comment above and if so the issue will reopened.\n\n      - name: Close issue\n        env:\n          GH_TOKEN: ${{ secrets.SUPPORTISSUES_ACTION_PAT }}\n          GH_REPO: ${{ github.repository }}\n          NUMBER: ${{ github.event.issue.number }}\n        run: gh issue close \"$NUMBER\" -r \"not planned\""
  },
  {
    "path": ".github/workflows/check_prs_if_on_staging.yml",
    "content": "name: Check PRs if on staging\non:\n    pull_request_target:\n      types: [opened, edited]\npermissions: {}\n\njobs:\n  is_not_staging:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.base.ref != 'staging' #check if the target branch is not staging\n    steps:\n      - name: Send message\n        uses: thollander/actions-comment-pull-request@v3.0.1\n        with:\n          github-token: ${{ secrets.CHECKIFPRISSTAGING_ACTION_PAT }}\n          message: |\n                   Thanks for contributing!\n\n                   I noticed that you didn't select `staging` as your base branch. Please change the base branch to `staging`.\n                   See the attached picture on how to change the base branch to `staging`:\n\n                   ![check_prs_if_on_staging.png](https://raw.githubusercontent.com/mailcow/mailcow-dockerized/master/.github/workflows/assets/check_prs_if_on_staging.png)\n\n      - name: Fail #we want to see failed checks in the PR\n        if: ${{ success() }} #set exit code to 1 even if commenting somehow failed\n        run: exit 1\n\n  is_staging:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.base.ref == 'staging' #check if the target branch is staging\n    steps:\n      - name: Success\n        run: exit 0\n"
  },
  {
    "path": ".github/workflows/close_old_issues_and_prs.yml",
    "content": "name: 'Close stale issues and PRs'\non:\n  schedule:\n    # Once every day at midnight UTC\n    - cron: \"0 0 * * *\"\n  workflow_dispatch: # Allow to run workflow manually\n  issue_comment: # Run workflow on comments\n\njobs:\n  stale:\n    runs-on: ubuntu-latest\n    permissions:\n      issues: write\n      pull-requests: write\n    steps:\n      - name: Mark/Close Stale Issues and Pull Requests 🗑️\n        uses: actions/stale@v10.2.0\n        with:\n          repo-token: ${{ secrets.STALE_ACTION_PAT }}\n          days-before-stale: 60\n          days-before-close: 7\n          stale-issue-message: >\n            This issue has been automatically marked as stale because it has not had\n            recent activity. It will be closed if no further activity occurs.\n          stale-pr-message: >\n            This pull request has been automatically marked as stale because it has not had\n            recent activity. It will be closed if no further activity occurs.\n          exempt-issue-labels: \"pinned,security,enhancement,investigating,neverstale\"\n          exempt-pr-labels: \"pinned,security,enhancement,investigating,neverstale\"\n          stale-issue-label: \"stale\"\n          stale-pr-label: \"stale\"\n          exempt-draft-pr: \"true\"\n          close-issue-reason: \"not_planned\"\n          operations-per-run: \"250\"\n          ascending: \"true\"\n          #DRY-RUN\n          debug-only: \"false\"\n"
  },
  {
    "path": ".github/workflows/image_builds.yml",
    "content": "name: Build mailcow Docker Images\n\non:\n  push:\n    branches: [ \"master\", \"staging\" ]\n  workflow_dispatch:\n\npermissions:\n  contents: read # to fetch code (actions/checkout)\n\njobs:\n  docker_image_builds:\n    strategy:\n      matrix:\n        images:\n          - \"acme-mailcow\"\n          - \"clamd-mailcow\"\n          - \"dockerapi-mailcow\"\n          - \"dovecot-mailcow\"\n          - \"netfilter-mailcow\"\n          - \"olefy-mailcow\"\n          - \"php-fpm-mailcow\"\n          - \"postfix-mailcow\"\n          - \"rspamd-mailcow\"\n          - \"sogo-mailcow\"\n          - \"unbound-mailcow\"\n          - \"watchdog-mailcow\"\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Setup Docker\n        run: |\n          curl -sSL https://get.docker.com/ | CHANNEL=stable sudo sh\n          sudo service docker start\n      - name: Prepair Image Builds\n        run: |\n          cp helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml docker-compose.override.yml\n      - name: Build Docker Images\n        run: |\n          docker compose build ${image}\n        env:\n          image: ${{ matrix.images }}\n"
  },
  {
    "path": ".github/workflows/pr_to_nightly.yml",
    "content": "name: Create PR to merge to nightly from staging\non:\n  push:\n    branches:\n      - staging\njobs:\n  action-pull-request:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout repository\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - name: Run the Action\n        uses: devops-infra/action-pull-request@v1.0.2\n        with:\n          github_token: ${{ secrets.PRTONIGHTLY_ACTION_PAT }}\n          title: Automatic PR to nightly from ${{ github.event.repository.updated_at}}\n          assignee: DerLinkman\n          source_branch: staging\n          target_branch: nightly\n          reviewer: DerLinkman\n          label: upstream\n          template: .github/ISSUE_TEMPLATE/pr_to_nighty_template.yml\n          get_diff: true\n"
  },
  {
    "path": ".github/workflows/rebuild_backup_image.yml",
    "content": "name: Build mailcow backup image\n\non:\n  schedule:\n    # At 00:00 on Sunday\n    - cron: \"0 0 * * 0\"\n  workflow_dispatch: # Allow to run workflow manually\n\njobs:\n  docker_image_build:\n    runs-on: ubuntu-latest\n    permissions:\n      packages: write\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Set up QEMU\n        uses: docker/setup-qemu-action@v4\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@v4\n\n      - name: Login to GHCR\n        if: github.event_name != 'pull_request'\n        uses: docker/login-action@v4\n        with:\n          registry: ghcr.io\n          username: ${{ github.repository_owner }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Build and push\n        uses: docker/build-push-action@v7\n        with:\n          context: .\n          platforms: linux/amd64,linux/arm64\n          file: data/Dockerfiles/backup/Dockerfile\n          push: true\n          tags: ghcr.io/mailcow/backup:latest"
  },
  {
    "path": ".github/workflows/update_postscreen_access_list.yml",
    "content": "name: Update postscreen_access.cidr\n\non:\n  schedule:\n    # Monthly\n    - cron: \"0 0 1 * *\"\n  workflow_dispatch: # Allow to run workflow manually\n\npermissions:\n  contents: read # to fetch code (actions/checkout)\n  \n  \njobs:\n  Update-postscreen_access_cidr:\n   runs-on: ubuntu-latest\n   steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n\n    - name: Generate postscreen_access.cidr\n      run: |\n          bash helper-scripts/update_postscreen_whitelist.sh\n\n    - name: Create Pull Request\n      uses: peter-evans/create-pull-request@v8\n      with:\n        token: ${{ secrets.mailcow_action_Update_postscreen_access_cidr_pat }}\n        commit-message: update postscreen_access.cidr\n        committer: milkmaker <milkmaker@mailcow.de>\n        author: milkmaker <milkmaker@mailcow.de>\n        signoff: false\n        branch: update/postscreen_access.cidr\n        base: staging\n        delete-branch: true\n        add-paths: |\n          data/conf/postfix/postscreen_access.cidr\n        title: '[Postfix] update postscreen_access.cidr'\n        body: |\n          This PR updates the postscreen_access.cidr using GitHub Actions and [helper-scripts/update_postscreen_whitelist.sh](https://github.com/mailcow/mailcow-dockerized/blob/master/helper-scripts/update_postscreen_whitelist.sh)"
  },
  {
    "path": ".gitignore",
    "content": "!data/conf/nginx/dynmaps.conf\n!data/conf/nginx/meta_exporter.conf\n!data/conf/nginx/site.conf\n!/**/.gitkeep\n*.iml\n.idea\n.vscode/*\ndata/assets/ssl-example/*\ndata/assets/ssl/*\ndata/conf/borgmatic/\ndata/conf/clamav/whitelist.ign2\ndata/conf/dovecot/acl_anyone\ndata/conf/dovecot/dovecot-master.passwd\ndata/conf/dovecot/dovecot-master.userdb\ndata/conf/dovecot/extra.conf\ndata/conf/dovecot/mail_replica.conf\ndata/conf/dovecot/global_sieve_*\ndata/conf/dovecot/last_login\ndata/conf/dovecot/lua\ndata/conf/dovecot/mail_plugins*\ndata/conf/dovecot/shared_namespace.conf\ndata/conf/dovecot/sni.conf\ndata/conf/dovecot/sogo-sso.conf\ndata/conf/dovecot/sogo_trusted_ip.conf\ndata/conf/dovecot/sql\ndata/conf/dovecot/conf.d/fts.conf\ndata/conf/nextcloud-*.bak\ndata/conf/nginx/*.active\ndata/conf/nginx/*.bak\ndata/conf/nginx/*.conf\ndata/conf/nginx/*.custom\ndata/conf/phpfpm/sogo-sso/sogo-sso.pass\ndata/conf/portainer/\ndata/conf/postfix/allow_mailcow_local.regexp\ndata/conf/postfix/custom_postscreen_whitelist.cidr\ndata/conf/postfix/custom_transport.pcre\ndata/conf/postfix/extra.cf\ndata/conf/postfix/sni.map\ndata/conf/postfix/sni.map.db\ndata/conf/postfix/sql\ndata/conf/postfix/dns_blocklists.cf\ndata/conf/postfix/dnsbl_reply.map\ndata/conf/rspamd/custom/*\ndata/conf/rspamd/local.d/*\ndata/conf/rspamd/override.d/*\ndata/conf/sogo/custom-theme.js\ndata/conf/sogo/plist_ldap\ndata/conf/sogo/plist_ldap.sh\ndata/conf/sogo/sieve.creds\ndata/conf/sogo/cron.creds\ndata/conf/sogo/custom-fulllogo.svg\ndata/conf/sogo/custom-shortlogo.svg\ndata/conf/sogo/custom-fulllogo.png\ndata/conf/acme/dns-01.conf\ndata/gitea/\ndata/gogs/\ndata/hooks/dovecot/*\ndata/hooks/phpfpm/*\ndata/hooks/postfix/*\ndata/hooks/rspamd/*\ndata/hooks/sogo/*\ndata/hooks/unbound/*\ndata/web/templates/cache/*\n!data/web/templates/cache/.gitkeep\ndata/web/.well-known/acme-challenge\ndata/web/css/build/0081-custom-mailcow.css\ndata/web/inc/vars.local.inc.php\ndata/web/inc/app_info.inc.php\ndata/web/nextcloud*/\ndata/web/rc*/\ndocker-compose.override.yml\nmailcow.conf\nmailcow.conf_backup\nrebuild-images.sh\nrefresh_images.sh\nupdate_diffs/\ncreate_cold_standby.sh\n!data/conf/nginx/mailcow_auth.conf\ndata/conf/postfix/postfix-tlspol"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment include:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, documentation edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at info@servercow.de. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]\n\n[homepage]: http://contributor-covenant.org\n[version]: http://contributor-covenant.org/version/1/4/\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contribution Guidelines\n**_Last modified on 12th November 2025_**\n\nFirst of all, thank you for wanting to provide a bugfix or a new feature for the mailcow community, it's because of your help that the project can continue to grow!\n\nAs we want to keep mailcow's development structured we setup these Guidelines which helps you to create your issue/pull request accordingly.\n\n**PLEASE NOTE, THAT WE WILL CLOSE ISSUES/PULL REQUESTS IF THEY DON'T FULFILL OUR WRITTEN GUIDELINES WRITTEN INSIDE THIS DOCUMENT**. So please check this guidelines before you propose a Issue/Pull Request.\n\n## Topics\n\n- [Pull Requests](#pull-requests)\n- [Issue Reporting](#issue-reporting)\n    - [Guidelines](#issue-reporting-guidelines)\n    - [Issue Report Guide](#issue-report-guide)\n\n## Pull Requests\n**_Last modified on 15th August 2024_**\n\nHowever, please note the following regarding pull requests:\n\n1. **ALWAYS** create your PR using the staging branch of your locally cloned mailcow instance, as the pull request will end up in said staging branch of mailcow once approved. Ideally, you should simply create a new branch for your pull request that is named after the type of your PR (e.g. `feat/` for function updates or `fix/` for bug fixes) and the actual content (e.g. `sogo-6.0.0` for an update from SOGo to version 6 or `html-escape` for a fix that includes escaping HTML in mailcow).\n2. **ALWAYS** report/request issues/features in the english language, even though mailcow is a german based company. This is done to allow other GitHub users to reply to your issues/requests too which did not speak german or other languages besides english.\n3. Please **keep** this pull request branch **clean** and free of commits that have nothing to do with the changes you have made (e.g. commits from other users from other branches). *If you make changes to the `update.sh` script or other scripts that trigger a commit, there is usually a developer mode for clean working in this case.*\n4. **Test your changes before you commit them as a pull request.** <ins>If possible</ins>, write a small **test log** or demonstrate the functionality with a **screenshot or GIF**. *We will of course also test your pull request ourselves, but proof from you will save us the question of whether you have tested your own changes yourself.*\n5. **Please use** the pull request template we provide once creating a pull request. *HINT: During editing you encounter comments which looks like: `<!-- CONTENT -->`. These can be removed or kept, as they will not rendered later on GitHub! Please only create actual content without the said comments.* \n6. Please **ALWAYS** create the actual pull request against the staging branch and **NEVER** directly against the master branch. *If you forget to do this, our moobot will remind you to switch the branch to staging.*\n7. Wait for a merge commit: It may happen that we do not accept your pull request immediately or sometimes not at all for various reasons. Please do not be disappointed if this is the case. We always endeavor to incorporate any meaningful changes from the community into the mailcow project.\n8. If you are planning larger and therefore more complex pull requests, it would be advisable to first announce this in a separate issue and then start implementing it after the idea has been accepted in order to avoid unnecessary frustration and effort!\n9. If your PR requires a Docker image rebuild (changes to Dockerfiles or files in data/Dockerfiles/), update the image tag in docker-compose.yml. Use the base-image versioning (e.g. ghcr.io/mailcow/sogo:5.12.4 → :5.12.5 for version bumps; append a letter for patch fixes, e.g. :5.12.4a). Follow this scheme.\n\n---\n\n## Issue Reporting\n**_Last modified on 12th November 2025_**\n\nIf you plan to report a issue within mailcow please read and understand the following rules:\n\n### Security disclosures / Security-related fixes\n- Security vulnerabilities and security fixes must always be reported confidentially first to the contact address specified in SECURITY.md before they are integrated, published, or publicly disclosed in issues/PRs. Please wait for a response from the specified contact to ensure coordinated and responsible disclosure.\n\n### Issue Reporting Guidelines\n\n1. **ONLY** use the issue tracker for bug reports or improvement requests and NOT for support questions. For support questions you can either contact the [mailcow community on Telegram](https://docs.mailcow.email/#community-support-and-chat) or the mailcow team directly in exchange for a [support fee](https://docs.mailcow.email/#commercial-support).\n2. **ONLY** report an error if you have the **necessary know-how (at least the basics)** for the administration of an e-mail server and the usage of Docker. mailcow is a complex and fully-fledged e-mail server including groupware components on a Docker basement and it requires a bit of technical know-how for debugging and operating.\n3. **ALWAYS** report/request issues/features in the english language, even though mailcow is a german based company. This is done to allow other GitHub users to reply to your issues/requests too which did not speak german or other languages besides english.\n4. **ONLY** report bugs that are contained in the latest mailcow release series. *The definition of the latest release series includes the last major patch (e.g. 2023-12) and all minor patches (revisions) below it (e.g. 2023-12a, b, c etc.).* New issue reports published starting from January 1, 2024 must meet this criterion, as versions below the latest releases are no longer supported by us.\n5. When reporting a problem, please be as detailed as possible and include even the smallest changes to your mailcow installation. Simply fill out the corresponding bug report form in detail and accurately to minimize possible questions.\n6. **Before you open an issue/feature request**, please first check whether a similar request already exists in the mailcow tracker on GitHub. If so, please include yourself in this request.\n7. When you create a issue/feature request: Please note that the creation does <ins>**not guarantee an instant implementation or fix by the mailcow team or the community**</ins>.\n8. Please **ALWAYS** anonymize any sensitive information in your bug report or feature request before submitting it.\n\n### Issue Report Guide\n1. Read your logs; follow them to see what the reason for your problem is.\n2. Follow the leads given to you in your logfiles and start investigating.\n3. Restarting the troubled service or the whole stack to see if the problem persists.\n4. Read the [documentation](https://docs.mailcow.email/) of the troubled service and search its bugtracker for your problem.\n5. Search our [issues](https://github.com/mailcow/mailcow-dockerized/issues) for your problem.\n6. [Create an issue](https://github.com/mailcow/mailcow-dockerized/issues/new/choose) over at our GitHub repository if you think your problem might be a bug or a missing feature you badly need. But please make sure, that you include **all the logs** and a full description to your problem.\n7. Ask your questions in our community-driven [support channels](https://docs.mailcow.email/#community-support-and-chat).\n\n## When creating an issue/feature request or a pull request, you will be asked to confirm these guidelines.\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {one line to give the program's name and a brief idea of what it does.}\n    Copyright (C) {year}  {name of author}\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    {project}  Copyright (C) {year}  {fullname}\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<http://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<http://www.gnu.org/philosophy/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "# mailcow: dockerized - 🐮 + 🐋 = 💕\n\n[![Translation status](https://translate.mailcow.email/widgets/mailcow-dockerized/-/translation/svg-badge.svg)](https://translate.mailcow.email/engage/mailcow-dockerized/)\n[![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/mailcow_email.svg?style=social&label=Follow%20%40mailcow_email)](https://twitter.com/mailcow_email)\n![Mastodon Follow](https://img.shields.io/mastodon/follow/109388212176073348?domain=https%3A%2F%2Fmailcow.social&label=Follow%20%40doncow%40mailcow.social&link=https%3A%2F%2Fmailcow.social%2F%40doncow)\n\n\n## Want to support mailcow?\n\nPlease [consider a support contract with Servercow](https://www.servercow.de/mailcow?lang=en#support) to support further development. _We_ support _you_ while _you_ support _us_. :)\n\nYou can also [get a SAL](https://www.servercow.de/mailcow?lang=en#sal) which is a one-time payment with no liabilities or returning fees.\n\nOr just spread the word: moo.\n\n## Many thanks to our GitHub Sponsors ❤️\nA big thank you to everyone supporting us on GitHub Sponsors—your contributions mean the world to us! Special thanks to the following amazing supporters:\n\n### 100$/Month Sponsors\n  <a href=\"https://www.colba.net/\" target=_blank><img\n    src=\"https://avatars.githubusercontent.com/u/204464723\" height=\"58\"\n  /></a>\n  <a href=\"https://www.maehdros.com/\" target=_blank><img\n    src=\"https://avatars.githubusercontent.com/u/173894712\" height=\"58\"\n  /></a>\n\n### 50$/Month Sponsors\n  <a href=\"https://github.com/vnukhr\" target=_blank><img\n    src=\"https://avatars.githubusercontent.com/u/7805987?s=52&v=4\" height=\"58\"\n  /></a>\n\n## Info, documentation and support\n\nPlease see [the official documentation](https://docs.mailcow.email/) for installation and support instructions. 🐄\n\n🐛 **If you found a critical security issue, please mail us to [info at servercow.de](mailto:info@servercow.de).**\n\n## Cowmunity\n\n[mailcow community](https://community.mailcow.email)\n\n[Telegram mailcow channel](https://telegram.me/mailcow)\n\n[Telegram mailcow Off-Topic channel](https://t.me/mailcowOfftopic)\n\n[Official 𝕏 (Twitter) Account](https://twitter.com/mailcow_email)\n\n[Official Mastodon Account](https://mailcow.social/@doncow)\n\nTelegram desktop clients are available for [multiple platforms](https://desktop.telegram.org). You can search the groups history for keywords.\n\n## Misc\n\n**Important**: mailcow makes use of various open-source software. Please assure you agree with their license before using mailcow.\nAny part of mailcow itself is released under **GNU General Public License, Version 3**.\n\nmailcow is a registered word mark of The Infrastructure Company GmbH, Parkstr. 42, 47877 Willich, Germany.\n\nThe project is managed and maintained by The Infrastructure Company GmbH.\n\nOriginated from @andryyy (André)\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policies and Procedures\n\nThis document outlines security procedures and general policies for the _mailcow: dockerized_ project as found on [mailcow-dockerized](https://github.com/mailcow/mailcow-dockerized).\n\n  * [Reporting a Vulnerability](#reporting-a-vulnerability)\n  * [Disclosure Policy](#disclosure-policy)\n  * [Comments on this Policy](#comments-on-this-policy)\n\n## Reporting a Vulnerability \n\nThe mailcow team and community take all security vulnerabilities\nseriously. Thank you for improving the security of our open source \nsoftware. We appreciate your efforts and responsible disclosure and will\nmake every effort to acknowledge your contributions.\n\nReport security vulnerabilities by emailing the mailcow team at:\n    \n    info at servercow.de\n\nmailcow team will acknowledge your email as soon as possible, and will\nsend a more detailed response afterwards indicating the next steps in \nhandling your report. After the initial reply to your report, the mailcow\nteam will endeavor to keep you informed of the progress towards a fix and\nfull announcement, and may ask for additional information or guidance.\n\nReport security vulnerabilities in third-party modules to the person or \nteam maintaining the module.\n\n## Disclosure Policy\n\nWhen the mailcow team receives a security bug report, they will assign it\nto a primary handler. This person will coordinate the fix and release\nprocess, involving the following steps:\n\n  * Confirm the problem and determine the affected versions.\n  * Audit code to find any potential similar problems.\n  * Prepare fixes for all releases still under maintenance.\n\n## Comments on this Policy\n\nIf you have suggestions on how this process could be improved please submit a\npull request.\n"
  },
  {
    "path": "_modules/scripts/core.sh",
    "content": "#!/usr/bin/env bash\n# _modules/scripts/core.sh\n# THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!\n# DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!\n\n# ANSI color for red errors\nRED='\\e[31m'\nGREEN='\\e[32m'\nYELLOW='\\e[33m'\nBLUE='\\e[34m'\nMAGENTA='\\e[35m'\nLIGHT_RED='\\e[91m'\nLIGHT_GREEN='\\e[92m'\nNC='\\e[0m'\n\ncaller=\"${BASH_SOURCE[1]##*/}\"\n\nget_installed_tools(){\n    for bin in openssl curl docker git awk sha1sum grep cut jq; do\n        if [[ -z $(command -v ${bin}) ]]; then\n          echo \"Error: Cannot find command '${bin}'. Cannot proceed.\"\n          echo \"Solution: Please review system requirements and install requirements. Then, re-run the script.\"\n          echo \"See System Requirements: https://docs.mailcow.email/getstarted/install/\"\n          echo \"Exiting...\"\n          exit 1\n        fi\n    done\n\n    if grep --help 2>&1 | head -n 1 | grep -q -i \"busybox\"; then echo -e \"${LIGHT_RED}BusyBox grep detected, please install gnu grep, \\\"apk add --no-cache --upgrade grep\\\"${NC}\"; exit 1; fi\n    # This will also cover sort\n    if cp --help 2>&1 | head -n 1 | grep -q -i \"busybox\"; then echo -e \"${LIGHT_RED}BusyBox cp detected, please install coreutils, \\\"apk add --no-cache --upgrade coreutils\\\"${NC}\"; exit 1; fi\n    if sed --help 2>&1 | head -n 1 | grep -q -i \"busybox\"; then echo -e \"${LIGHT_RED}BusyBox sed detected, please install gnu sed, \\\"apk add --no-cache --upgrade sed\\\"${NC}\"; exit 1; fi\n}\n\nget_docker_version(){\n    # Check Docker Version (need at least 24.X)\n    docker_version=$(docker version --format '{{.Server.Version}}' | cut -d '.' -f 1)\n}\n\nget_compose_type(){\n  if docker compose > /dev/null 2>&1; then\n    if docker compose version --short | grep -e \"^[2-9]\\.\" -e \"^v[2-9]\\.\" -e \"^[1-9][0-9]\\.\" -e \"^v[1-9][0-9]\\.\" > /dev/null 2>&1; then\n      COMPOSE_VERSION=native\n      COMPOSE_COMMAND=\"docker compose\"\n      if [[ \"$caller\" == \"update.sh\" ]]; then\n        sed -i 's/^DOCKER_COMPOSE_VERSION=.*/DOCKER_COMPOSE_VERSION=native/' \"$SCRIPT_DIR/mailcow.conf\"\n      fi\n      echo -e \"\\e[33mFound Docker Compose Plugin (native).\\e[0m\"\n      echo -e \"\\e[33mSetting the DOCKER_COMPOSE_VERSION Variable to native\\e[0m\"\n      sleep 2\n      echo -e \"\\e[33mNotice: You'll have to update this Compose Version via your Package Manager manually!\\e[0m\"\n    else\n      echo -e \"\\e[31mCannot find Docker Compose with a Version Higher than 2.X.X.\\e[0m\"\n      echo -e \"\\e[31mPlease update/install it manually regarding to this doc site: https://docs.mailcow.email/install/\\e[0m\"\n      exit 1\n    fi\n  elif docker-compose > /dev/null 2>&1; then\n  if ! [[ $(alias docker-compose 2> /dev/null) ]] ; then\n    if docker-compose version --short | grep -e \"^[2-9]\\.\" -e \"^[1-9][0-9]\\.\" > /dev/null 2>&1; then\n      COMPOSE_VERSION=standalone\n      COMPOSE_COMMAND=\"docker-compose\"\n      if [[ \"$caller\" == \"update.sh\" ]]; then\n        sed -i 's/^DOCKER_COMPOSE_VERSION=.*/DOCKER_COMPOSE_VERSION=standalone/' \"$SCRIPT_DIR/mailcow.conf\"\n      fi\n      echo -e \"\\e[33mFound Docker Compose Standalone.\\e[0m\"\n      echo -e \"\\e[33mSetting the DOCKER_COMPOSE_VERSION Variable to standalone\\e[0m\"\n      sleep 2\n      echo -e \"\\e[33mNotice: For an automatic update of docker-compose please use the update_compose.sh scripts located at the helper-scripts folder.\\e[0m\"\n    else\n      echo -e \"\\e[31mCannot find Docker Compose with a Version Higher than 2.X.X.\\e[0m\"\n      echo -e \"\\e[31mPlease update/install manually regarding to this doc site: https://docs.mailcow.email/install/\\e[0m\"\n      exit 1\n    fi\n  fi\n  else\n    echo -e \"\\e[31mCannot find Docker Compose.\\e[0m\"\n    echo -e \"\\e[31mPlease install it regarding to this doc site: https://docs.mailcow.email/install/\\e[0m\"\n    exit 1\n  fi\n}\n\ndetect_bad_asn() {\n  echo -e \"\\e[33mDetecting if your IP is listed on Spamhaus Bad ASN List...\\e[0m\"\n  response=$(curl --connect-timeout 15 --max-time 30 -s -o /dev/null -w \"%{http_code}\" \"https://asn-check.mailcow.email\")\n  if [ \"$response\" -eq 503 ]; then\n    if [ -z \"$SPAMHAUS_DQS_KEY\" ]; then\n      echo -e \"\\e[33mYour server's public IP uses an AS that is blocked by Spamhaus to use their DNS public blocklists for Postfix.\\e[0m\"\n      echo -e \"\\e[33mmailcow did not detected a value for the variable SPAMHAUS_DQS_KEY inside mailcow.conf!\\e[0m\"\n      sleep 2\n      echo \"\"\n      echo -e \"\\e[33mTo use the Spamhaus DNS Blocklists again, you will need to create a FREE account for their Data Query Service (DQS) at: https://www.spamhaus.com/free-trial/sign-up-for-a-free-data-query-service-account\\e[0m\"\n      echo -e \"\\e[33mOnce done, enter your DQS API key in mailcow.conf and mailcow will do the rest for you!\\e[0m\"\n      echo \"\"\n      sleep 2\n    else\n      echo -e \"\\e[33mYour server's public IP uses an AS that is blocked by Spamhaus to use their DNS public blocklists for Postfix.\\e[0m\"\n      echo -e \"\\e[32mmailcow detected a Value for the variable SPAMHAUS_DQS_KEY inside mailcow.conf. Postfix will use DQS with the given API key...\\e[0m\"\n    fi\n  elif [ \"$response\" -eq 200 ]; then\n    echo -e \"\\e[33mCheck completed! Your IP is \\e[32mclean\\e[0m\"\n  elif [ \"$response\" -eq 429 ]; then\n    echo -e \"\\e[33mCheck completed! \\e[31mYour IP seems to be rate limited on the ASN Check service... please try again later!\\e[0m\"\n  else\n    echo -e \"\\e[31mCheck failed! \\e[0mMaybe a DNS or Network problem?\\e[0m\"\n  fi\n}\n\ncheck_online_status() {\n  CHECK_ONLINE_DOMAINS=('https://github.com' 'https://hub.docker.com')\n  for domain in \"${CHECK_ONLINE_DOMAINS[@]}\"; do\n    if timeout 6 curl --head --silent --output /dev/null ${domain}; then\n      return 0\n    fi\n  done\n  return 1\n}\n\nprefetch_images() {\n  [[ -z ${BRANCH} ]] && { echo -e \"\\e[33m\\nUnknown branch...\\e[0m\"; exit 1; }\n  git fetch origin #${BRANCH}\n  while read image; do\n    RET_C=0\n    until docker pull \"${image}\"; do\n      RET_C=$((RET_C + 1))\n      echo -e \"\\e[33m\\nError pulling $image, retrying...\\e[0m\"\n      [ ${RET_C} -gt 3 ] && { echo -e \"\\e[31m\\nToo many failed retries, exiting\\e[0m\"; exit 1; }\n      sleep 1\n    done\n  done < <(git show \"origin/${BRANCH}:docker-compose.yml\" | grep \"image:\" | awk '{ gsub(\"image:\",\"\", $3); print $2 }')\n}\n\ndocker_garbage() {\n  SCRIPT_DIR=\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )/../..\" && pwd )\"\n  IMGS_TO_DELETE=()\n\n  declare -A IMAGES_INFO\n  COMPOSE_IMAGES=($(grep -oP \"image: \\K(ghcr\\.io/)?mailcow.+\" \"${SCRIPT_DIR}/docker-compose.yml\"))\n\n  for existing_image in $(docker images --format \"{{.ID}}:{{.Repository}}:{{.Tag}}\" | grep -E '(mailcow/|ghcr\\.io/mailcow/)'); do\n      ID=$(echo \"$existing_image\" | cut -d ':' -f 1)\n      REPOSITORY=$(echo \"$existing_image\" | cut -d ':' -f 2)\n      TAG=$(echo \"$existing_image\" | cut -d ':' -f 3)\n\n      if [[ \"$REPOSITORY\" == \"mailcow/backup\" || \"$REPOSITORY\" == \"ghcr.io/mailcow/backup\" ]]; then\n          if [[ \"$TAG\" != \"<none>\" ]]; then\n              continue\n          fi\n      fi\n\n      if [[ \" ${COMPOSE_IMAGES[@]} \" =~ \" ${REPOSITORY}:${TAG} \" ]]; then\n          continue\n      else\n          IMGS_TO_DELETE+=(\"$ID\")\n          IMAGES_INFO[\"$ID\"]=\"$REPOSITORY:$TAG\"\n      fi\n  done\n\n  if [[ ! -z ${IMGS_TO_DELETE[*]} ]]; then\n      echo \"The following unused mailcow images were found:\"\n      for id in \"${IMGS_TO_DELETE[@]}\"; do\n          echo \"    ${IMAGES_INFO[$id]} ($id)\"\n      done\n\n      if [ -z \"$FORCE\" ]; then\n          read -r -p \"Do you want to delete them to free up some space? [y/N] \" response\n          if [[ \"$response\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n              docker rmi ${IMGS_TO_DELETE[*]}\n          else\n              echo \"OK, skipped.\"\n          fi\n      else\n          echo \"Running in forced mode! Force removing old mailcow images...\"\n          docker rmi ${IMGS_TO_DELETE[*]}\n      fi\n      echo -e \"\\e[32mFurther cleanup...\\e[0m\"\n      echo \"If you want to cleanup further garbage collected by Docker, please make sure all containers are up and running before cleaning your system by executing \\\"docker system prune\\\"\"\n  fi\n}\n\nin_array() {\n  local e match=\"$1\"\n  shift\n  for e; do [[ \"$e\" == \"$match\" ]] && return 0; done\n  return 1\n}\n\ndetect_major_update() {\n  if [ ${BRANCH} == \"master\" ]; then\n    # Array with major versions\n    # Add major versions here\n    MAJOR_VERSIONS=(\n      \"2025-02\"\n      \"2025-03\"\n      \"2025-09\"\n    )\n\n    current_version=\"\"\n    if [[ -f \"${SCRIPT_DIR}/data/web/inc/app_info.inc.php\" ]]; then\n      current_version=$(grep 'MAILCOW_GIT_VERSION' ${SCRIPT_DIR}/data/web/inc/app_info.inc.php | sed -E 's/.*MAILCOW_GIT_VERSION=\"([^\"]+)\".*/\\1/')\n    fi\n    if [[ -z \"$current_version\" ]]; then\n      return 1\n    fi\n    release_url=\"https://github.com/mailcow/mailcow-dockerized/releases/tag\"\n\n    updates_to_apply=()\n\n    for version in \"${MAJOR_VERSIONS[@]}\"; do\n      if [[ \"$current_version\" < \"$version\" ]]; then\n        updates_to_apply+=(\"$version\")\n      fi\n    done\n\n    if [[ ${#updates_to_apply[@]} -gt 0 ]]; then\n      echo -e \"\\e[33m\\nMAJOR UPDATES to be applied:\\e[0m\"\n      for update in \"${updates_to_apply[@]}\"; do\n        echo \"$update - $release_url/$update\"\n      done\n\n      echo -e \"\\nPlease read the release notes before proceeding.\"\n      read -p \"Do you want to proceed with the update? [y/n] \" response\n      if [[ \"${response}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n        echo \"Proceeding with the update...\"\n      else\n        echo \"Update canceled. Exiting.\"\n        exit 1\n      fi\n    fi\n  fi\n}\n"
  },
  {
    "path": "_modules/scripts/ipv6_controller.sh",
    "content": "#!/usr/bin/env bash\n# _modules/scripts/ipv6_controller.sh\n# THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!\n# DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!\n\n# 1) Check if the host supports IPv6\nget_ipv6_support() {\n  # ---- helper: probe external IPv6 connectivity without DNS ----\n  _probe_ipv6_connectivity() {\n    # Use literal, always-on IPv6 echo responders (no DNS required)\n    local PROBE_IPS=(\"2001:4860:4860::8888\" \"2606:4700:4700::1111\")\n    local ip rc=1\n\n    for ip in \"${PROBE_IPS[@]}\"; do\n      if command -v ping6 &>/dev/null; then\n        ping6 -c1 -W2 \"$ip\" &>/dev/null || ping6 -c1 -w2 \"$ip\" &>/dev/null\n        rc=$?\n      elif command -v ping &>/dev/null; then\n        ping -6 -c1 -W2 \"$ip\" &>/dev/null || ping -6 -c1 -w2 \"$ip\" &>/dev/null\n        rc=$?\n      else\n        rc=1\n      fi\n      [[ $rc -eq 0 ]] && return 0\n    done\n    return 1\n  }\n\n  if [[ ! -f /proc/net/if_inet6 ]] || grep -qs '^1' /proc/sys/net/ipv6/conf/all/disable_ipv6 2>/dev/null; then\n    DETECTED_IPV6=false\n    echo -e \"${YELLOW}IPv6 not detected on host – ${LIGHT_RED}IPv6 is administratively disabled${YELLOW}.${NC}\"\n    return\n  fi\n\n  if ip -6 route show default 2>/dev/null | grep -qE '^default'; then\n    echo -e \"${YELLOW}Default IPv6 route found – testing external IPv6 connectivity...${NC}\"\n    if _probe_ipv6_connectivity; then\n      DETECTED_IPV6=true\n      echo -e \"IPv6 detected on host – ${LIGHT_GREEN}leaving IPv6 support enabled${YELLOW}.${NC}\"\n    else\n      DETECTED_IPV6=false\n      echo -e \"${YELLOW}Default IPv6 route present but external IPv6 connectivity failed – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}\"\n    fi\n    return\n  fi\n\n  if ip -6 addr show scope global 2>/dev/null | grep -q 'inet6'; then\n    DETECTED_IPV6=false\n    echo -e \"${YELLOW}Global IPv6 address present but no default route – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}\"\n    return\n  fi\n\n  if ip -6 addr show scope link 2>/dev/null | grep -q 'inet6'; then\n    echo -e \"${YELLOW}Only link-local IPv6 addresses found – testing external IPv6 connectivity...${NC}\"\n    if _probe_ipv6_connectivity; then\n      DETECTED_IPV6=true\n      echo -e \"External IPv6 connectivity available – ${LIGHT_GREEN}leaving IPv6 support enabled${YELLOW}.${NC}\"\n    else\n      DETECTED_IPV6=false\n      echo -e \"${YELLOW}Only link-local IPv6 present and no external connectivity – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}\"\n    fi\n    return\n  fi\n\n  DETECTED_IPV6=false\n  echo -e \"${YELLOW}IPv6 not detected on host – ${LIGHT_RED}disabling IPv6 support${YELLOW}.${NC}\"\n}\n\n# 2) Ensure Docker daemon.json has (or create) the required IPv6 settings\ndocker_daemon_edit(){\n  DOCKER_DAEMON_CONFIG=\"/etc/docker/daemon.json\"\n  DOCKER_MAJOR=$(docker version --format '{{.Server.Version}}' 2>/dev/null | cut -d. -f1)\n  MISSING=()\n\n  _has_kv() { grep -Eq \"\\\"$1\\\"[[:space:]]*:[[:space:]]*$2\" \"$DOCKER_DAEMON_CONFIG\" 2>/dev/null; }\n\n  if [[ -f \"$DOCKER_DAEMON_CONFIG\" ]]; then\n\n    # reject empty or whitespace-only file immediately\n    if [[ ! -s \"$DOCKER_DAEMON_CONFIG\" ]] || ! grep -Eq '[{}]' \"$DOCKER_DAEMON_CONFIG\"; then\n      echo -e \"${RED}ERROR: $DOCKER_DAEMON_CONFIG exists but is empty or contains no JSON braces – please initialize it with valid JSON (e.g. {}).${NC}\"\n      exit 1\n    fi\n\n    # Validate JSON if jq is present\n    if command -v jq &>/dev/null && ! jq empty \"$DOCKER_DAEMON_CONFIG\" &>/dev/null; then\n      echo -e \"${RED}ERROR: Invalid JSON in $DOCKER_DAEMON_CONFIG – please correct manually.${NC}\"\n      exit 1\n    fi\n\n    # Gather missing keys\n    ! _has_kv ipv6 true && MISSING+=(\"ipv6: true\")\n\n    # For Docker < 28, keep requiring fixed-cidr-v6 (default bridge needs it on old engines)\n    if [[ -n \"$DOCKER_MAJOR\" && \"$DOCKER_MAJOR\" -lt 28 ]]; then\n      ! grep -Eq '\"fixed-cidr-v6\"[[:space:]]*:[[:space:]]*\".+\"' \"$DOCKER_DAEMON_CONFIG\" \\\n                                && MISSING+=('fixed-cidr-v6: \"fd00:dead:beef:c0::/80\"')\n    fi\n\n    # For Docker < 27, ip6tables needed and was tied to experimental in older releases\n    if [[ -n \"$DOCKER_MAJOR\" && \"$DOCKER_MAJOR\" -lt 27 ]]; then\n      _has_kv ipv6 true && ! _has_kv ip6tables true && MISSING+=(\"ip6tables: true\")\n      ! _has_kv experimental true && MISSING+=(\"experimental: true\")\n    fi\n\n    # Fix if needed\n    if ((${#MISSING[@]}>0)); then\n      echo -e \"${MAGENTA}Your daemon.json is missing: ${YELLOW}${MISSING[*]}${NC}\"\n      if [[ -n \"$FORCE\" ]]; then\n        ans=Y\n      else\n        read -p \"Would you like to update $DOCKER_DAEMON_CONFIG now? [Y/n] \" ans\n        ans=${ans:-Y}\n      fi\n\n      if [[ $ans =~ ^[Yy]$ ]]; then\n        cp \"$DOCKER_DAEMON_CONFIG\" \"${DOCKER_DAEMON_CONFIG}.bak\"\n        if command -v jq &>/dev/null; then\n          TMP=$(mktemp)\n          # Base filter: ensure ipv6 = true\n          JQ_FILTER='.ipv6 = true'\n\n          # Add fixed-cidr-v6 only for Docker < 28\n          if [[ -n \"$DOCKER_MAJOR\" && \"$DOCKER_MAJOR\" -lt 28 ]]; then\n            JQ_FILTER+=' | .[\"fixed-cidr-v6\"] = (.[\"fixed-cidr-v6\"] // \"fd00:dead:beef:c0::/80\")'\n          fi\n\n          # Add ip6tables/experimental only for Docker < 27\n          if [[ -n \"$DOCKER_MAJOR\" && \"$DOCKER_MAJOR\" -lt 27 ]]; then\n            JQ_FILTER+=' | .ip6tables = true | .experimental = true'\n          fi\n\n          jq \"$JQ_FILTER\" \"$DOCKER_DAEMON_CONFIG\" >\"$TMP\" && mv \"$TMP\" \"$DOCKER_DAEMON_CONFIG\"\n          echo -e \"${LIGHT_GREEN}daemon.json updated. Restarting Docker...${NC}\"\n          (command -v systemctl &>/dev/null && systemctl restart docker) || service docker restart\n          echo -e \"${YELLOW}Docker restarted.${NC}\"\n        else\n          echo -e \"${RED}Please install jq or manually update daemon.json and restart Docker.${NC}\"\n          exit 1\n        fi\n      else\n        echo -e \"${YELLOW}User declined Docker update – please insert these changes manually:${NC}\"\n        echo \"${MISSING[*]}\"\n        exit 1\n      fi\n    fi\n\n  else\n    # Create new daemon.json if missing\n    if [[ -n \"$FORCE\" ]]; then\n      ans=Y\n    else\n      read -p \"$DOCKER_DAEMON_CONFIG not found. Create it with IPv6 settings? [Y/n] \" ans\n      ans=${ans:-Y}\n    fi\n\n    if [[ $ans =~ ^[Yy]$ ]]; then\n      mkdir -p \"$(dirname \"$DOCKER_DAEMON_CONFIG\")\"\n      if [[ -n \"$DOCKER_MAJOR\" && \"$DOCKER_MAJOR\" -lt 27 ]]; then\n        cat > \"$DOCKER_DAEMON_CONFIG\" <<EOF\n{\n  \"ipv6\": true,\n  \"fixed-cidr-v6\": \"fd00:dead:beef:c0::/80\",\n  \"ip6tables\": true,\n  \"experimental\": true\n}\nEOF\n      elif [[ -n \"$DOCKER_MAJOR\" && \"$DOCKER_MAJOR\" -lt 28 ]]; then\n        cat > \"$DOCKER_DAEMON_CONFIG\" <<EOF\n{\n  \"ipv6\": true,\n  \"fixed-cidr-v6\": \"fd00:dead:beef:c0::/80\"\n}\nEOF\n      else\n        # Docker 28+: ipv6 works without fixed-cidr-v6\n        cat > \"$DOCKER_DAEMON_CONFIG\" <<EOF\n{\n  \"ipv6\": true\n}\nEOF\n      fi\n      echo -e \"${GREEN}Created $DOCKER_DAEMON_CONFIG with IPv6 settings.${NC}\"\n      echo \"Restarting Docker...\"\n      (command -v systemctl &>/dev/null && systemctl restart docker) || service docker restart\n      echo \"Docker restarted.\"\n    else\n      echo \"User declined to create daemon.json – please manually merge the docker daemon with these configs:\"\n      echo \"${MISSING[*]}\"\n      exit 1\n    fi\n  fi\n}\n\n# 3) Main wrapper for generate_config.sh and update.sh\nconfigure_ipv6() {\n  # detect manual override if mailcow.conf is present\n  if [[ -n \"$MAILCOW_CONF\" && -f \"$MAILCOW_CONF\" ]] && grep -q '^ENABLE_IPV6=' \"$MAILCOW_CONF\"; then\n    MANUAL_SETTING=$(grep '^ENABLE_IPV6=' \"$MAILCOW_CONF\" | cut -d= -f2)\n  elif [[ -z \"$MAILCOW_CONF\" ]] && [[ -n \"${ENABLE_IPV6:-}\" ]]; then\n    MANUAL_SETTING=\"$ENABLE_IPV6\"\n  else\n    MANUAL_SETTING=\"\"\n  fi\n\n  get_ipv6_support\n\n  # if user manually set it, check for mismatch\n  if [[ \"$DETECTED_IPV6\" != \"true\" ]]; then\n    if [[ -n \"$MAILCOW_CONF\" && -f \"$MAILCOW_CONF\" ]]; then\n      if grep -q '^ENABLE_IPV6=' \"$MAILCOW_CONF\"; then\n        sed -i 's/^ENABLE_IPV6=.*/ENABLE_IPV6=false/' \"$MAILCOW_CONF\"\n      else\n        echo \"ENABLE_IPV6=false\" >> \"$MAILCOW_CONF\"\n      fi\n    else\n      export IPV6_BOOL=false\n    fi\n    echo \"Skipping Docker IPv6 configuration because host does not support IPv6.\"\n    echo \"Make sure to check if your docker daemon.json does not include \\\"enable_ipv6\\\": true if you do not want IPv6.\"\n    echo \"IPv6 configuration complete: ENABLE_IPV6=false\"\n    sleep 2\n    return\n  fi\n\n  docker_daemon_edit\n\n  if [[ -n \"$MAILCOW_CONF\" && -f \"$MAILCOW_CONF\" ]]; then\n    if grep -q '^ENABLE_IPV6=' \"$MAILCOW_CONF\"; then\n      sed -i 's/^ENABLE_IPV6=.*/ENABLE_IPV6=true/' \"$MAILCOW_CONF\"\n    else\n      echo \"ENABLE_IPV6=true\" >> \"$MAILCOW_CONF\"\n    fi\n  else\n    export IPV6_BOOL=true\n  fi\n\n  echo \"IPv6 configuration complete: ENABLE_IPV6=true\"\n}"
  },
  {
    "path": "_modules/scripts/migrate_options.sh",
    "content": "#!/usr/bin/env bash\n# _modules/scripts/migrate_options.sh\n# THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!\n# DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!\n\nmigrate_config_options() {\n\n  sed -i --follow-symlinks '$a\\' mailcow.conf\n\n  KEYS=(\n    SOLR_HEAP\n    SKIP_SOLR\n    SOLR_PORT\n    FLATCURVE_EXPERIMENTAL\n    DISABLE_IPv6\n    ACME_CONTACT\n  )\n\n  for key in \"${KEYS[@]}\"; do\n    if grep -q \"${key}\" mailcow.conf; then\n      case \"${key}\" in\n        SOLR_HEAP)\n          echo \"Removing ${key} in mailcow.conf\"\n          sed -i '/# Solr heap size in MB\\b/d' mailcow.conf\n          sed -i '/# Solr is a prone to run\\b/d' mailcow.conf\n          sed -i '/SOLR_HEAP\\b/d' mailcow.conf\n          ;;\n        SKIP_SOLR)\n          echo \"Removing ${key} in mailcow.conf\"\n          sed -i '/\\bSkip Solr on low-memory\\b/d' mailcow.conf\n          sed -i '/\\bSolr is disabled by default\\b/d' mailcow.conf\n          sed -i '/\\bDisable Solr or\\b/d' mailcow.conf\n          sed -i '/\\bSKIP_SOLR\\b/d' mailcow.conf\n          ;;\n        SOLR_PORT)\n          echo \"Removing ${key} in mailcow.conf\"\n          sed -i '/\\bSOLR_PORT\\b/d' mailcow.conf\n          ;;\n        FLATCURVE_EXPERIMENTAL)\n          echo \"Removing ${key} in mailcow.conf\"\n          sed -i '/\\bFLATCURVE_EXPERIMENTAL\\b/d' mailcow.conf\n          ;;\n        DISABLE_IPv6)\n          echo \"Migrating ${key} to ENABLE_IPv6 in mailcow.conf\"\n          local old=$(grep '^DISABLE_IPv6=' \"mailcow.conf\" | cut -d'=' -f2)\n          local new\n          if [[ \"$old\" == \"y\" ]]; then\n            new=\"false\"\n          else\n            new=\"true\"\n          fi\n          sed -i '/^DISABLE_IPv6=/d' \"mailcow.conf\"\n          echo \"ENABLE_IPV6=$new\" >> \"mailcow.conf\"\n          ;;\n        ACME_CONTACT)\n          echo \"Deleting obsoleted ${key} in mailcow.conf\"\n          sed -i '/^# Lets Encrypt registration contact information/d' mailcow.conf\n          sed -i '/^# Optional: Leave empty for none/d' mailcow.conf\n          sed -i '/^# This value is only used on first order!/d' mailcow.conf\n          sed -i '/^# Setting it at a later point will require the following steps:/d' mailcow.conf\n          sed -i '/^# https:\\/\\/docs.mailcow.email\\/troubleshooting\\/debug-reset_tls\\//d' mailcow.conf\n          sed -i '/^ACME_CONTACT=.*/d' mailcow.conf\n          sed -i '/^#ACME_CONTACT=.*/d' mailcow.conf\n          ;;\n      esac\n    fi\n  done\n\n  solr_volume=$(docker volume ls -qf name=^${COMPOSE_PROJECT_NAME}_solr-vol-1)\n  if [[ -n $solr_volume ]]; then\n    echo -e \"\\e[34mSolr has been replaced within mailcow since 2025-01.\\nThe volume $solr_volume is unused.\\e[0m\"\n    sleep 1\n    if [ ! \"$FORCE\" ]; then\n      read -r -p \"Remove $solr_volume? [y/N] \" response\n      if [[ \"$response\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n        echo -e \"\\e[33mRemoving $solr_volume...\\e[0m\"\n        docker volume rm $solr_volume || echo -e \"\\e[31mFailed to remove. Remove it manually!\\e[0m\"\n        echo -e \"\\e[32mSuccessfully removed $solr_volume!\\e[0m\"\n      else\n        echo -e \"Not removing $solr_volume. Run \\`docker volume rm $solr_volume\\` manually if needed.\"\n      fi\n    else\n      echo -e \"\\e[33mForce removing $solr_volume...\\e[0m\"\n      docker volume rm $solr_volume || echo -e \"\\e[31mFailed to remove. Remove it manually!\\e[0m\"\n      echo -e \"\\e[32mSuccessfully removed $solr_volume!\\e[0m\"\n    fi\n  fi\n\n  # Delete old fts.conf before forced switch to flatcurve to ensure update is working properly\n  FTS_CONF_PATH=\"${SCRIPT_DIR}/data/conf/dovecot/conf.d/fts.conf\"\n  if [[ -f \"$FTS_CONF_PATH\" ]]; then\n    if grep -q \"Autogenerated by mailcow\" \"$FTS_CONF_PATH\"; then\n      rm -rf $FTS_CONF_PATH\n    fi\n  fi\n}"
  },
  {
    "path": "_modules/scripts/new_options.sh",
    "content": "#!/usr/bin/env bash\n# _modules/scripts/new_options.sh\n# THIS SCRIPT IS DESIGNED TO BE RUNNING BY MAILCOW SCRIPTS ONLY!\n# DO NOT, AGAIN, NOT TRY TO RUN THIS SCRIPT STANDALONE!!!!!!\n\nadapt_new_options() {\n\n  CONFIG_ARRAY=(\n  \"AUTODISCOVER_SAN\"\n  \"SKIP_LETS_ENCRYPT\"\n  \"SKIP_SOGO\"\n  \"USE_WATCHDOG\"\n  \"WATCHDOG_NOTIFY_EMAIL\"\n  \"WATCHDOG_NOTIFY_WEBHOOK\"\n  \"WATCHDOG_NOTIFY_WEBHOOK_BODY\"\n  \"WATCHDOG_NOTIFY_BAN\"\n  \"WATCHDOG_NOTIFY_START\"\n  \"WATCHDOG_EXTERNAL_CHECKS\"\n  \"WATCHDOG_SUBJECT\"\n  \"SKIP_CLAMD\"\n  \"SKIP_OLEFY\"\n  \"SKIP_IP_CHECK\"\n  \"ADDITIONAL_SAN\"\n  \"DOVEADM_PORT\"\n  \"IPV4_NETWORK\"\n  \"IPV6_NETWORK\"\n  \"LOG_LINES\"\n  \"SNAT_TO_SOURCE\"\n  \"SNAT6_TO_SOURCE\"\n  \"COMPOSE_PROJECT_NAME\"\n  \"DOCKER_COMPOSE_VERSION\"\n  \"SQL_PORT\"\n  \"API_KEY\"\n  \"API_KEY_READ_ONLY\"\n  \"API_ALLOW_FROM\"\n  \"MAILDIR_GC_TIME\"\n  \"MAILDIR_SUB\"\n  \"ACL_ANYONE\"\n  \"FTS_HEAP\"\n  \"FTS_PROCS\"\n  \"SKIP_FTS\"\n  \"ENABLE_SSL_SNI\"\n  \"ALLOW_ADMIN_EMAIL_LOGIN\"\n  \"SKIP_HTTP_VERIFICATION\"\n  \"SOGO_EXPIRE_SESSION\"\n  \"SOGO_URL_ENCRYPTION_KEY\"\n  \"REDIS_PORT\"\n  \"REDISPASS\"\n  \"DOVECOT_MASTER_USER\"\n  \"DOVECOT_MASTER_PASS\"\n  \"MAILCOW_PASS_SCHEME\"\n  \"ADDITIONAL_SERVER_NAMES\"\n  \"WATCHDOG_VERBOSE\"\n  \"WEBAUTHN_ONLY_TRUSTED_VENDORS\"\n  \"SPAMHAUS_DQS_KEY\"\n  \"SKIP_UNBOUND_HEALTHCHECK\"\n  \"DISABLE_NETFILTER_ISOLATION_RULE\"\n  \"HTTP_REDIRECT\"\n  \"ENABLE_IPV6\"\n  \"ACME_DNS_CHALLENGE\"\n  \"ACME_DNS_PROVIDER\"\n  \"ACME_ACCOUNT_EMAIL\"\n  )\n\n  sed -i --follow-symlinks '$a\\' mailcow.conf\n  for option in ${CONFIG_ARRAY[@]}; do\n    if grep -q \"^#\\?${option}=\" mailcow.conf; then\n      continue\n    fi\n\n    echo \"Adding new option \\\"${option}\\\" to mailcow.conf\"\n\n    case \"${option}\" in\n        AUTODISCOVER_SAN)\n            echo '# Obtain certificates for autodiscover.* and autoconfig.* domains.' >> mailcow.conf\n            echo '# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.' >> mailcow.conf\n            echo '# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs' >> mailcow.conf\n            echo '# between services. So acme-mailcow obtains for maildomains and all web-things get handled' >> mailcow.conf\n            echo '# in the reverse proxy.' >> mailcow.conf\n            echo 'AUTODISCOVER_SAN=y' >> mailcow.conf\n            ;;\n\n        DOCKER_COMPOSE_VERSION)\n            echo \"# Used Docker Compose version\" >> mailcow.conf\n            echo \"# Switch here between native (compose plugin) and standalone\" >> mailcow.conf\n            echo \"# For more informations take a look at the mailcow docs regarding the configuration options.\" >> mailcow.conf\n            echo \"# Normally this should be untouched but if you decided to use either of those you can switch it manually here.\" >> mailcow.conf\n            echo \"# Please be aware that at least one of those variants should be installed on your machine or mailcow will fail.\" >> mailcow.conf\n            echo \"\" >> mailcow.conf\n            echo \"DOCKER_COMPOSE_VERSION=${DOCKER_COMPOSE_VERSION}\" >> mailcow.conf\n            ;;\n\n        DOVEADM_PORT)\n            echo \"DOVEADM_PORT=127.0.0.1:19991\" >> mailcow.conf\n            ;;\n\n        LOG_LINES)\n            echo '# Max log lines per service to keep in Redis logs' >> mailcow.conf\n            echo \"LOG_LINES=9999\" >> mailcow.conf\n            ;;\n        IPV4_NETWORK)\n            echo '# Internal IPv4 /24 subnet, format n.n.n. (expands to n.n.n.0/24)' >> mailcow.conf\n            echo \"IPV4_NETWORK=172.22.1\" >> mailcow.conf\n            ;;\n        IPV6_NETWORK)\n            echo '# Internal IPv6 subnet in fc00::/7' >> mailcow.conf\n            echo \"IPV6_NETWORK=fd4d:6169:6c63:6f77::/64\" >> mailcow.conf\n            ;;\n        SQL_PORT)\n            echo '# Bind SQL to 127.0.0.1 on port 13306' >> mailcow.conf\n            echo \"SQL_PORT=127.0.0.1:13306\" >> mailcow.conf\n            ;;\n        API_KEY)\n            echo '# Create or override API key for web UI' >> mailcow.conf\n            echo \"#API_KEY=\" >> mailcow.conf\n            ;;\n        API_KEY_READ_ONLY)\n            echo '# Create or override read-only API key for web UI' >> mailcow.conf\n            echo \"#API_KEY_READ_ONLY=\" >> mailcow.conf\n            ;;\n        API_ALLOW_FROM)\n            echo '# Must be set for API_KEY to be active' >> mailcow.conf\n            echo '# IPs only, no networks (networks can be set via UI)' >> mailcow.conf\n            echo \"#API_ALLOW_FROM=\" >> mailcow.conf\n            ;;\n        SNAT_TO_SOURCE)\n            echo '# Use this IPv4 for outgoing connections (SNAT)' >> mailcow.conf\n            echo \"#SNAT_TO_SOURCE=\" >> mailcow.conf\n            ;;\n        SNAT6_TO_SOURCE)\n            echo '# Use this IPv6 for outgoing connections (SNAT)' >> mailcow.conf\n            echo \"#SNAT6_TO_SOURCE=\" >> mailcow.conf\n            ;;\n        MAILDIR_GC_TIME)\n            echo '# Garbage collector cleanup' >> mailcow.conf\n            echo '# Deleted domains and mailboxes are moved to /var/vmail/_garbage/timestamp_sanitizedstring' >> mailcow.conf\n            echo '# How long should objects remain in the garbage until they are being deleted? (value in minutes)' >> mailcow.conf\n            echo '# Check interval is hourly' >> mailcow.conf\n            echo 'MAILDIR_GC_TIME=1440' >> mailcow.conf\n            ;;\n        ACL_ANYONE)\n            echo '# Set this to \"allow\" to enable the anyone pseudo user. Disabled by default.' >> mailcow.conf\n            echo '# When enabled, ACL can be created, that apply to \"All authenticated users\"' >> mailcow.conf\n            echo '# This should probably only be activated on mail hosts, that are used exclusively by one organisation.' >> mailcow.conf\n            echo '# Otherwise a user might share data with too many other users.' >> mailcow.conf\n            echo 'ACL_ANYONE=disallow' >> mailcow.conf\n            ;;\n        FTS_HEAP)\n            echo '# Dovecot Indexing (FTS) Process maximum heap size in MB, there is no recommendation, please see Dovecot docs.' >> mailcow.conf\n            echo '# Flatcurve is used as FTS Engine. It is supposed to be pretty efficient in CPU and RAM consumption.' >> mailcow.conf\n            echo '# Please always monitor your Resource consumption!' >> mailcow.conf\n            echo \"FTS_HEAP=128\" >> mailcow.conf\n            ;;\n        SKIP_FTS)\n            echo '# Skip FTS (Fulltext Search) for Dovecot on low-memory, low-threaded systems or if you simply want to disable it.' >> mailcow.conf\n            echo \"# Dovecot inside mailcow use Flatcurve as FTS Backend.\" >> mailcow.conf\n            echo \"SKIP_FTS=y\" >> mailcow.conf\n            ;;\n        FTS_PROCS)\n            echo '# Controls how many processes the Dovecot indexing process can spawn at max.' >> mailcow.conf\n            echo '# Too many indexing processes can use a lot of CPU and Disk I/O' >> mailcow.conf\n            echo '# Please visit: https://doc.dovecot.org/configuration_manual/service_configuration/#indexer-worker for more informations' >> mailcow.conf\n            echo \"FTS_PROCS=1\" >> mailcow.conf\n            ;;\n        ENABLE_SSL_SNI)\n            echo '# Create seperate certificates for all domains - y/n' >> mailcow.conf\n            echo '# this will allow adding more than 100 domains, but some email clients will not be able to connect with alternative hostnames' >> mailcow.conf\n            echo '# see https://wiki.dovecot.org/SSL/SNIClientSupport' >> mailcow.conf\n            echo \"ENABLE_SSL_SNI=n\" >> mailcow.conf\n            ;;\n        SKIP_SOGO)\n            echo '# Skip SOGo: Will disable SOGo integration and therefore webmail, DAV protocols and ActiveSync support (experimental, unsupported, not fully implemented) - y/n' >> mailcow.conf\n            echo \"SKIP_SOGO=n\" >> mailcow.conf\n            ;;\n        MAILDIR_SUB)\n            echo '# MAILDIR_SUB defines a path in a users virtual home to keep the maildir in. Leave empty for updated setups.' >> mailcow.conf\n            echo \"#MAILDIR_SUB=Maildir\" >> mailcow.conf\n            echo \"MAILDIR_SUB=\" >> mailcow.conf\n            ;;\n        WATCHDOG_NOTIFY_WEBHOOK)\n            echo '# Send notifications to a webhook URL that receives a POST request with the content type \"application/json\".' >> mailcow.conf\n            echo '# You can use this to send notifications to services like Discord, Slack and others.' >> mailcow.conf\n            echo '#WATCHDOG_NOTIFY_WEBHOOK=https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' >> mailcow.conf\n            ;;\n        WATCHDOG_NOTIFY_WEBHOOK_BODY)\n            echo '# JSON body included in the webhook POST request. Needs to be in single quotes.' >> mailcow.conf\n            echo '# Following variables are available: SUBJECT, BODY' >> mailcow.conf\n            WEBHOOK_BODY='{\"username\": \"mailcow Watchdog\", \"content\": \"**${SUBJECT}**\\n${BODY}\"}'\n            echo \"#WATCHDOG_NOTIFY_WEBHOOK_BODY='${WEBHOOK_BODY}'\" >> mailcow.conf\n            ;;\n        WATCHDOG_NOTIFY_BAN)\n            echo '# Notify about banned IP. Includes whois lookup.' >> mailcow.conf\n            echo \"WATCHDOG_NOTIFY_BAN=y\" >> mailcow.conf\n            ;;\n        WATCHDOG_NOTIFY_START)\n            echo '# Send a notification when the watchdog is started.' >> mailcow.conf\n            echo \"WATCHDOG_NOTIFY_START=y\" >> mailcow.conf\n            ;;\n        WATCHDOG_SUBJECT)\n            echo '# Subject for watchdog mails. Defaults to \"Watchdog ALERT\" followed by the error message.' >> mailcow.conf\n            echo \"#WATCHDOG_SUBJECT=\" >> mailcow.conf\n            ;;\n        WATCHDOG_EXTERNAL_CHECKS)\n            echo '# Checks if mailcow is an open relay. Requires a SAL. More checks will follow.' >> mailcow.conf\n            echo '# No data is collected. Opt-in and anonymous.' >> mailcow.conf\n            echo '# Will only work with unmodified mailcow setups.' >> mailcow.conf\n            echo \"WATCHDOG_EXTERNAL_CHECKS=n\" >> mailcow.conf\n            ;;\n        SOGO_EXPIRE_SESSION)\n            echo '# SOGo session timeout in minutes' >> mailcow.conf\n            echo \"SOGO_EXPIRE_SESSION=480\" >> mailcow.conf\n            ;;\n        REDIS_PORT)\n            echo \"REDIS_PORT=127.0.0.1:7654\" >> mailcow.conf\n            ;;\n        DOVECOT_MASTER_USER)\n            echo '# DOVECOT_MASTER_USER and _PASS must _both_ be provided. No special chars.' >> mailcow.conf\n            echo '# Empty by default to auto-generate master user and password on start.' >> mailcow.conf\n            echo '# User expands to DOVECOT_MASTER_USER@mailcow.local' >> mailcow.conf\n            echo '# LEAVE EMPTY IF UNSURE' >> mailcow.conf\n            echo \"DOVECOT_MASTER_USER=\" >> mailcow.conf\n            ;;\n        DOVECOT_MASTER_PASS)\n            echo '# LEAVE EMPTY IF UNSURE' >> mailcow.conf\n            echo \"DOVECOT_MASTER_PASS=\" >> mailcow.conf\n            ;;\n        MAILCOW_PASS_SCHEME)\n            echo '# Password hash algorithm' >> mailcow.conf\n            echo '# Only certain password hash algorithm are supported. For a fully list of supported schemes,' >> mailcow.conf\n            echo '# see https://docs.mailcow.email/models/model-passwd/' >> mailcow.conf\n            echo \"MAILCOW_PASS_SCHEME=BLF-CRYPT\" >> mailcow.conf\n            ;;\n        ADDITIONAL_SERVER_NAMES)\n            echo '# Additional server names for mailcow UI' >> mailcow.conf\n            echo '#' >> mailcow.conf\n            echo '# Specify alternative addresses for the mailcow UI to respond to' >> mailcow.conf\n            echo '# This is useful when you set mail.* as ADDITIONAL_SAN and want to make sure mail.maildomain.com will always point to the mailcow UI.' >> mailcow.conf\n            echo '# If the server name does not match a known site, Nginx decides by best-guess and may redirect users to the wrong web root.' >> mailcow.conf\n            echo '# You can understand this as server_name directive in Nginx.' >> mailcow.conf\n            echo '# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f' >> mailcow.conf\n            echo 'ADDITIONAL_SERVER_NAMES=' >> mailcow.conf\n            ;;\n        WEBAUTHN_ONLY_TRUSTED_VENDORS)\n            echo \"# WebAuthn device manufacturer verification\" >> mailcow.conf\n            echo '# After setting WEBAUTHN_ONLY_TRUSTED_VENDORS=y only devices from trusted manufacturers are allowed' >> mailcow.conf\n            echo '# root certificates can be placed for validation under mailcow-dockerized/data/web/inc/lib/WebAuthn/rootCertificates' >> mailcow.conf\n            echo 'WEBAUTHN_ONLY_TRUSTED_VENDORS=n' >> mailcow.conf\n            ;;\n        SPAMHAUS_DQS_KEY)\n            echo \"# Spamhaus Data Query Service Key\" >> mailcow.conf\n            echo '# Optional: Leave empty for none' >> mailcow.conf\n            echo '# Enter your key here if you are using a blocked ASN (OVH, AWS, Cloudflare e.g) for the unregistered Spamhaus Blocklist.' >> mailcow.conf\n            echo '# If empty, it will completely disable Spamhaus blocklists if it detects that you are running on a server using a blocked AS.' >> mailcow.conf\n            echo '# Otherwise it will work as usual.' >> mailcow.conf\n            echo 'SPAMHAUS_DQS_KEY=' >> mailcow.conf\n            ;;\n        WATCHDOG_VERBOSE)\n            echo '# Enable watchdog verbose logging' >> mailcow.conf\n            echo 'WATCHDOG_VERBOSE=n' >> mailcow.conf\n            ;;\n        SKIP_UNBOUND_HEALTHCHECK)\n            echo '# Skip Unbound (DNS Resolver) Healthchecks (NOT Recommended!) - y/n' >> mailcow.conf\n            echo 'SKIP_UNBOUND_HEALTHCHECK=n' >> mailcow.conf\n            ;;\n        DISABLE_NETFILTER_ISOLATION_RULE)\n            echo '# Prevent netfilter from setting an iptables/nftables rule to isolate the mailcow docker network - y/n' >> mailcow.conf\n            echo '# CAUTION: Disabling this may expose container ports to other neighbors on the same subnet, even if the ports are bound to localhost' >> mailcow.conf\n            echo 'DISABLE_NETFILTER_ISOLATION_RULE=n' >> mailcow.conf\n            ;;\n        HTTP_REDIRECT)\n            echo '# Redirect HTTP connections to HTTPS - y/n' >> mailcow.conf\n            echo 'HTTP_REDIRECT=n' >> mailcow.conf\n            ;;\n        ENABLE_IPV6)\n            echo '# IPv6 Controller Section' >> mailcow.conf\n            echo '# This variable controls the usage of IPv6 within mailcow.' >> mailcow.conf\n            echo '# Can either be true or false | Defaults to true' >> mailcow.conf\n            echo '# WARNING: MAKE SURE TO PROPERLY CONFIGURE IPv6 ON YOUR HOST FIRST BEFORE ENABLING THIS AS FAULTY CONFIGURATIONS CAN LEAD TO OPEN RELAYS!' >> mailcow.conf\n            echo '# A COMPLETE DOCKER STACK REBUILD (compose down && compose up -d) IS NEEDED TO APPLY THIS.' >> mailcow.conf\n            echo ENABLE_IPV6=${IPV6_BOOL} >> mailcow.conf\n            ;;\n        SKIP_CLAMD)\n            echo '# Skip ClamAV (clamd-mailcow) anti-virus (Rspamd will auto-detect a missing ClamAV container) - y/n' >> mailcow.conf\n            echo 'SKIP_CLAMD=n' >> mailcow.conf\n            ;;\n        SKIP_OLEFY)\n            echo '# Skip Olefy (olefy-mailcow) anti-virus for Office documents (Rspamd will auto-detect a missing Olefy container) - y/n' >> mailcow.conf\n            echo 'SKIP_OLEFY=n' >> mailcow.conf\n            ;;\n        REDISPASS)\n            echo \"REDISPASS=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 28)\" >> mailcow.conf\n            ;;\n        SOGO_URL_ENCRYPTION_KEY)\n            echo '# SOGo URL encryption key (exactly 16 characters, limited to A–Z, a–z, 0–9)' >> mailcow.conf\n            echo '# This key is used to encrypt email addresses within SOGo URLs' >> mailcow.conf\n            echo \"SOGO_URL_ENCRYPTION_KEY=$(LC_ALL=C </dev/urandom tr -dc A-Za-z0-9 2>/dev/null | head -c 16)\" >> mailcow.conf\n            ;;\n        ACME_DNS_CHALLENGE)\n            echo '# Enable DNS-01 challenge for ACME (acme-mailcow) - y/n' >> mailcow.conf\n            echo '# This requires you to set ACME_DNS_PROVIDER and ACME_ACCOUNT_EMAIL below' >> mailcow.conf\n            echo 'ACME_DNS_CHALLENGE=n' >> mailcow.conf\n            ;;\n        ACME_DNS_PROVIDER)\n            echo '# DNS provider for DNS-01 challenge (e.g. dns_cf, dns_azure, dns_gd, etc.)' >> mailcow.conf\n            echo '# See the dns-01 provider documentation for more information.' >> mailcow.conf\n            echo 'ACME_DNS_PROVIDER=dns_xxx' >> mailcow.conf\n            ;;\n        ACME_ACCOUNT_EMAIL)\n            echo '# Account email for ACME DNS-01 challenge registration' >> mailcow.conf\n            echo 'ACME_ACCOUNT_EMAIL=me@example.com' >> mailcow.conf\n            ;;\n        *)\n            echo \"${option}=\" >> mailcow.conf\n            ;;\n    esac\n  done\n}"
  },
  {
    "path": "data/Dockerfiles/acme/Dockerfile",
    "content": "FROM alpine:3.23\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nRUN apk upgrade --no-cache \\\n  && apk add --update --no-cache \\\n  bash \\\n  curl \\\n  openssl \\\n  bind-tools \\\n  jq \\\n  mariadb-client \\\n  redis \\\n  tini \\\n  tzdata \\\n  python3 \\\n  acme-tiny \\\n  git \\\n  socat \\\n  && git clone --depth 1 https://github.com/acmesh-official/acme.sh.git /opt/acme.sh \\\n  && chmod +x /opt/acme.sh/acme.sh \\\n  && mkdir -p /var/lib/acme/acme-sh\n\nENV ACME_SH_BIN=/opt/acme.sh/acme.sh \\\n    ACME_SH_HOME=/opt/acme.sh \\\n    ACME_SH_CONFIG_HOME=/var/lib/acme/acme-sh\n\nCOPY acme.sh /srv/acme.sh\nCOPY functions.sh /srv/functions.sh\nCOPY obtain-certificate.sh /srv/obtain-certificate.sh\nCOPY obtain-certificate-dns.sh /srv/obtain-certificate-dns.sh\nCOPY load-dns-config.sh /srv/load-dns-config.sh\nCOPY reload-configurations.sh /srv/reload-configurations.sh\nCOPY expand6.sh /srv/expand6.sh\n\nRUN chmod +x /srv/*.sh\n\nCMD [\"/sbin/tini\", \"-g\", \"--\", \"/srv/acme.sh\"]\n"
  },
  {
    "path": "data/Dockerfiles/acme/acme.sh",
    "content": "#!/bin/bash\nset -o pipefail\nexec 5>&1\n\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  export REDIS_CMDLINE=\"redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning\"\nelse\n  export REDIS_CMDLINE=\"redis-cli -h redis -p 6379 -a ${REDISPASS} --no-auth-warning\"\nfi\n\nuntil [[ $(${REDIS_CMDLINE} PING) == \"PONG\" ]]; do\n  echo \"Waiting for Redis...\"\n  sleep 2\ndone\n\n# Create DNS-01 configuration template if it doesn't exist\nif [[ ! -f /etc/acme/dns-01.conf ]]; then\n  mkdir -p /etc/acme\n  cat > /etc/acme/dns-01.conf <<'EOF'\n# Add here your DNS-01 challenge configuration\n# For more information, visit the acme.sh documentation:\n# https://github.com/acmesh-official/acme.sh/wiki/dnsapi\nEOF\n  echo \"Created DNS-01 configuration template at /etc/acme/dns-01.conf\"\nfi\n\nsource /srv/functions.sh\n# Thanks to https://github.com/cvmiller -> https://github.com/cvmiller/expand6\nsource /srv/expand6.sh\n\n# Skipping IP check when we like to live dangerously\nif [[ \"${SKIP_IP_CHECK}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  SKIP_IP_CHECK=y\nfi\n\n# Skipping HTTP check when we like to live dangerously\nif [[ \"${SKIP_HTTP_VERIFICATION}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  SKIP_HTTP_VERIFICATION=y\nfi\n\n# Request certificate for MAILCOW_HOSTNAME only\nif [[ \"${ONLY_MAILCOW_HOSTNAME}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  ONLY_MAILCOW_HOSTNAME=y\nfi\n\nif [[ \"${AUTODISCOVER_SAN}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  AUTODISCOVER_SAN=y\nfi\n\n# Request individual certificate for every domain\nif [[ \"${ENABLE_SSL_SNI}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  ENABLE_SSL_SNI=y\nfi\n\nif [[ \"${ACME_DNS_CHALLENGE}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  ACME_DNS_CHALLENGE=y\nfi\n\nif [[ \"${SKIP_LETS_ENCRYPT}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  log_f \"SKIP_LETS_ENCRYPT=y, skipping Let's Encrypt...\"\n  sleep 365d\n  exec $(readlink -f \"$0\")\nfi\n\nlog_f \"Waiting for Docker API...\"\nuntil ping dockerapi -c1 > /dev/null; do\n  sleep 1\ndone\nlog_f \"Docker API OK\"\n\nlog_f \"Waiting for Postfix...\"\nuntil ping postfix -c1 > /dev/null; do\n  sleep 1\ndone\nlog_f \"Postfix OK\"\n\nlog_f \"Waiting for Dovecot...\"\nuntil ping dovecot -c1 > /dev/null; do\n  sleep 1\ndone\nlog_f \"Dovecot OK\"\n\nACME_BASE=/var/lib/acme\nSSL_EXAMPLE=/var/lib/ssl-example\n\nmkdir -p ${ACME_BASE}/acme\n\n# Migrate\n[[ -f ${ACME_BASE}/acme/private/privkey.pem ]] && mv ${ACME_BASE}/acme/private/privkey.pem ${ACME_BASE}/acme/key.pem\n[[ -f ${ACME_BASE}/acme/private/account.key ]] && mv ${ACME_BASE}/acme/private/account.key ${ACME_BASE}/acme/account.pem\nif [[ -f ${ACME_BASE}/acme/key.pem && -f ${ACME_BASE}/acme/cert.pem ]]; then\n  if verify_hash_match ${ACME_BASE}/acme/cert.pem ${ACME_BASE}/acme/key.pem; then\n    log_f \"Migrating to SNI folder structure...\"\n    CERT_DOMAIN=($(openssl x509 -noout -text -in ${ACME_BASE}/acme/cert.pem | grep \"Subject:\" | sed -e 's/\\(Subject:\\)\\|\\(CN = \\)\\|\\(CN=\\)//g' | sed -e 's/^[[:space:]]*//'))\n    CERT_DOMAINS=(${CERT_DOMAIN} $(openssl x509 -noout -text -in ${ACME_BASE}/acme/cert.pem | grep \"DNS:\" | sed -e 's/\\(DNS:\\)\\|,//g' | sed \"s/${CERT_DOMAIN}//\" | sed -e 's/^[[:space:]]*//'))\n    mkdir -p ${ACME_BASE}/${CERT_DOMAIN}\n    mv ${ACME_BASE}/acme/cert.pem ${ACME_BASE}/${CERT_DOMAIN}/cert.pem\n    # key is only copied, not moved, because it is used by all other requests too\n    cp ${ACME_BASE}/acme/key.pem ${ACME_BASE}/${CERT_DOMAIN}/key.pem\n    chmod 600 ${ACME_BASE}/${CERT_DOMAIN}/key.pem\n    echo -n ${CERT_DOMAINS[*]} > ${ACME_BASE}/${CERT_DOMAIN}/domains\n    mv ${ACME_BASE}/acme/acme.csr ${ACME_BASE}/${CERT_DOMAIN}/acme.csr\n    log_f \"OK\" no_date\n  fi\nfi\n\n[[ ! -f ${ACME_BASE}/dhparams.pem ]] && cp ${SSL_EXAMPLE}/dhparams.pem ${ACME_BASE}/dhparams.pem\n\nif [[ -f ${ACME_BASE}/cert.pem ]] && [[ -f ${ACME_BASE}/key.pem ]] && [[ $(stat -c%s ${ACME_BASE}/cert.pem) != 0 ]]; then\n  ISSUER=$(openssl x509 -in ${ACME_BASE}/cert.pem -noout -issuer)\n  if [[ ${ISSUER} != *\"Let's Encrypt\"* && ${ISSUER} != *\"mailcow\"* && ${ISSUER} != *\"Fake LE Intermediate\"* ]]; then\n    log_f \"Found certificate with issuer other than mailcow snake-oil CA and Let's Encrypt, skipping ACME client...\"\n    sleep 3650d\n    exec $(readlink -f \"$0\")\n  fi\nelse\n  if [[ -f ${ACME_BASE}/${MAILCOW_HOSTNAME}/cert.pem ]] && [[ -f ${ACME_BASE}/${MAILCOW_HOSTNAME}/key.pem ]] && verify_hash_match ${ACME_BASE}/${MAILCOW_HOSTNAME}/cert.pem ${ACME_BASE}/${MAILCOW_HOSTNAME}/key.pem; then\n    log_f \"Restoring previous acme certificate and restarting script...\"\n    cp ${ACME_BASE}/${MAILCOW_HOSTNAME}/cert.pem ${ACME_BASE}/cert.pem\n    cp ${ACME_BASE}/${MAILCOW_HOSTNAME}/key.pem ${ACME_BASE}/key.pem\n    # Restarting with env var set to trigger a restart,\n    exec env TRIGGER_RESTART=1 $(readlink -f \"$0\")\n  else\n    log_f \"Restoring mailcow snake-oil certificates and restarting script...\"\n    cp ${SSL_EXAMPLE}/cert.pem ${ACME_BASE}/cert.pem\n    cp ${SSL_EXAMPLE}/key.pem ${ACME_BASE}/key.pem\n    exec env TRIGGER_RESTART=1 $(readlink -f \"$0\")\n  fi\nfi\n\nchmod 600 ${ACME_BASE}/key.pem\n\nlog_f \"Waiting for database...\"\nwhile ! /usr/bin/mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent > /dev/null; do\n  sleep 2\ndone\nlog_f \"Database OK\"\n\nlog_f \"Waiting for Nginx...\"\nuntil $(curl --output /dev/null --silent --head --fail http://nginx.${COMPOSE_PROJECT_NAME}_mailcow-network:8081); do\n  sleep 2\ndone\nlog_f \"Nginx OK\"\n\nlog_f \"Waiting for resolver...\"\nuntil dig letsencrypt.org +time=3 +tries=1 @unbound > /dev/null; do\n  sleep 2\ndone\nlog_f \"Resolver OK\"\n\n# Waiting for domain table\nlog_f \"Waiting for domain table...\"\nwhile [[ -z ${DOMAIN_TABLE} ]]; do\n  curl --silent http://nginx.${COMPOSE_PROJECT_NAME}_mailcow-network/ >/dev/null 2>&1\n  DOMAIN_TABLE=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SHOW TABLES LIKE 'domain'\" -Bs)\n  [[ -z ${DOMAIN_TABLE} ]] && sleep 10\ndone\nlog_f \"OK\" no_date\n\nlog_f \"Initializing, please wait...\"\n\nwhile true; do\n  POSTFIX_CERT_SERIAL=\"$(echo | openssl s_client -connect postfix:25 -starttls smtp 2>/dev/null | openssl x509 -inform pem -noout -serial | cut -d \"=\" -f 2)\"\n  DOVECOT_CERT_SERIAL=\"$(echo | openssl s_client -connect dovecot:143 -starttls imap 2>/dev/null | openssl x509 -inform pem -noout -serial | cut -d \"=\" -f 2)\"\n  POSTFIX_CERT_SERIAL_NEW=\"$(echo | openssl s_client -connect postfix:25 -starttls smtp 2>/dev/null | openssl x509 -inform pem -noout -serial | cut -d \"=\" -f 2)\"\n  DOVECOT_CERT_SERIAL_NEW=\"$(echo | openssl s_client -connect dovecot:143 -starttls imap 2>/dev/null | openssl x509 -inform pem -noout -serial | cut -d \"=\" -f 2)\"\n  # Re-using previous acme-mailcow account and domain keys\n  if [[ ! -f ${ACME_BASE}/acme/key.pem ]]; then\n    log_f \"Generating missing domain private rsa key...\"\n    openssl genrsa 4096 > ${ACME_BASE}/acme/key.pem\n  else\n    log_f \"Using existing domain rsa key ${ACME_BASE}/acme/key.pem\"\n  fi\n  if [[ ! -f ${ACME_BASE}/acme/account.pem ]]; then\n    log_f \"Generating missing Lets Encrypt account key...\"\n    openssl genrsa 4096 > ${ACME_BASE}/acme/account.pem\n  else\n    log_f \"Using existing Lets Encrypt account key ${ACME_BASE}/acme/account.pem\"\n  fi\n\n  chmod 600 ${ACME_BASE}/acme/key.pem\n  chmod 600 ${ACME_BASE}/acme/account.pem\n\n  unset EXISTING_CERTS\n  declare -a EXISTING_CERTS\n  for cert_dir in ${ACME_BASE}/*/ ; do\n    if [[ ! -f ${cert_dir}domains ]] || [[ ! -f ${cert_dir}cert.pem ]] || [[ ! -f ${cert_dir}key.pem ]]; then\n      continue\n    fi\n    EXISTING_CERTS+=(\"$(basename ${cert_dir})\")\n  done\n\n  # Cleaning up and init validation arrays\n  unset SQL_DOMAIN_ARR\n  unset VALIDATED_CONFIG_DOMAINS\n  unset ADDITIONAL_VALIDATED_SAN\n  unset ADDITIONAL_WC_ARR\n  unset ADDITIONAL_SAN_ARR\n  unset CERT_ERRORS\n  unset CERT_CHANGED\n  unset CERT_AMOUNT_CHANGED\n  unset VALIDATED_CERTIFICATES\n  CERT_ERRORS=0\n  CERT_CHANGED=0\n  CERT_AMOUNT_CHANGED=0\n  declare -a SQL_DOMAIN_ARR\n  declare -a VALIDATED_CONFIG_DOMAINS\n  declare -a ADDITIONAL_VALIDATED_SAN\n  declare -a ADDITIONAL_WC_ARR\n  declare -a ADDITIONAL_SAN_ARR\n  declare -a VALIDATED_CERTIFICATES\n  IFS=',' read -r -a TMP_ARR <<< \"${ADDITIONAL_SAN}\"\n  for i in \"${TMP_ARR[@]}\" ; do\n    if [[ \"$i\" =~ \\.\\*$ ]]; then\n      ADDITIONAL_WC_ARR+=(${i::-2})\n    else\n      ADDITIONAL_SAN_ARR+=($i)\n    fi\n  done\n\n  if [[ ${AUTODISCOVER_SAN} == \"y\" ]]; then\n  # Fetch certs for autoconfig and autodiscover subdomains\n  ADDITIONAL_WC_ARR+=('autodiscover' 'autoconfig' 'mta-sts')\n  fi\n\n  if [[ ${SKIP_IP_CHECK} != \"y\" ]]; then\n  # Start IP detection\n  log_f \"Detecting IP addresses...\"\n  IPV4=$(get_ipv4)\n  IPV6=$(get_ipv6)\n  log_f \"OK: ${IPV4}, ${IPV6:-\"0000:0000:0000:0000:0000:0000:0000:0000\"}\"\n  fi\n\n  #########################################\n  # IP and webroot challenge verification #\n  SQL_DOMAINS=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT domain FROM domain WHERE backupmx=0 and active=1\" -Bs)\n  if [[ ! $? -eq 0 ]]; then\n    log_f \"Failed to read SQL domains, retrying in 1 minute...\"\n    sleep 1m\n    exec $(readlink -f \"$0\")\n  fi\n  while read domains; do\n    if [[ -z \"${domains}\" ]]; then\n      # ignore empty lines\n      continue\n    fi\n    SQL_DOMAIN_ARR+=(\"${domains}\")\n  done <<< \"${SQL_DOMAINS}\"\n\n  if [[ ${ONLY_MAILCOW_HOSTNAME} != \"y\" ]]; then\n  for SQL_DOMAIN in \"${SQL_DOMAIN_ARR[@]}\"; do\n    unset VALIDATED_CONFIG_DOMAINS_SUBDOMAINS\n    declare -a VALIDATED_CONFIG_DOMAINS_SUBDOMAINS\n    for SUBDOMAIN in \"${ADDITIONAL_WC_ARR[@]}\"; do\n      FULL_SUBDOMAIN=\"${SUBDOMAIN}.${SQL_DOMAIN}\"\n\n      # Skip if subdomain matches MAILCOW_HOSTNAME\n      if [[ \"${FULL_SUBDOMAIN}\" == \"${MAILCOW_HOSTNAME}\" ]]; then\n        continue\n      fi\n      # Skip if subdomain is covered by a wildcard in ADDITIONAL_SAN\n      if is_covered_by_wildcard \"${FULL_SUBDOMAIN}\"; then\n        log_f \"Subdomain '${FULL_SUBDOMAIN}' is covered by wildcard - skipping explicit subdomain\"\n        continue\n      fi\n      # Validate and add subdomain\n      if check_domain \"${FULL_SUBDOMAIN}\"; then\n        VALIDATED_CONFIG_DOMAINS_SUBDOMAINS+=(\"${FULL_SUBDOMAIN}\")\n      fi\n    done\n    VALIDATED_CONFIG_DOMAINS+=(\"${VALIDATED_CONFIG_DOMAINS_SUBDOMAINS[*]}\")\n  done\n\n  # Fetch alias domains where target domain has MTA-STS enabled\n  if [[ ${AUTODISCOVER_SAN} == \"y\" ]]; then\n    SQL_ALIAS_DOMAINS=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT ad.alias_domain FROM alias_domain ad INNER JOIN mta_sts m ON ad.target_domain = m.domain WHERE ad.active = 1 AND m.active = 1\" -Bs)\n    if [[ $? -eq 0 ]]; then\n      while read alias_domain; do\n        if [[ -z \"${alias_domain}\" ]]; then\n          # ignore empty lines\n          continue\n        fi\n        # Only add mta-sts subdomain for alias domains\n        if [[ \"mta-sts.${alias_domain}\" != \"${MAILCOW_HOSTNAME}\" ]]; then\n          # Skip if mta-sts subdomain is covered by a wildcard\n          if is_covered_by_wildcard \"mta-sts.${alias_domain}\"; then\n            log_f \"Alias domain mta-sts subdomain 'mta-sts.${alias_domain}' is covered by wildcard - skipping\"\n          elif check_domain \"mta-sts.${alias_domain}\"; then\n            VALIDATED_CONFIG_DOMAINS+=(\"mta-sts.${alias_domain}\")\n          fi\n        fi\n      done <<< \"${SQL_ALIAS_DOMAINS}\"\n    fi\n  fi\n  fi\n\n  if check_domain ${MAILCOW_HOSTNAME}; then\n    VALIDATED_MAILCOW_HOSTNAME=\"${MAILCOW_HOSTNAME}\"\n  fi\n\n  if [[ ${ONLY_MAILCOW_HOSTNAME} != \"y\" ]]; then\n  for SAN in \"${ADDITIONAL_SAN_ARR[@]}\"; do\n    # Skip on CAA errors for SAN\n    SAN_PARENT_DOMAIN=$(echo ${SAN} | cut -d. -f2-)\n    SAN_CAAS=( $(dig CAA ${SAN_PARENT_DOMAIN} +short | sed -n 's/\\d issue \"\\(.*\\)\"/\\1/p') )\n    if [[ ! -z ${SAN_CAAS} ]]; then\n      if [[ ${SAN_CAAS[@]} =~ \"letsencrypt.org\" ]]; then\n        log_f \"Validated CAA for parent domain ${SAN_PARENT_DOMAIN} of ${SAN}\"\n      else\n        log_f \"Skipping ACME validation for ${SAN}: Lets Encrypt disallowed for ${SAN} by CAA record\"\n        continue\n      fi\n    fi\n    if [[ ${SAN} == ${MAILCOW_HOSTNAME} ]]; then\n      continue\n    fi\n    if check_domain ${SAN}; then\n      ADDITIONAL_VALIDATED_SAN+=(\"${SAN}\")\n    fi\n  done\n  fi\n\n  # Check if MAILCOW_HOSTNAME is covered by a wildcard in ADDITIONAL_SAN\n  MAILCOW_HOSTNAME_COVERED=0\n  if [[ ! -z ${VALIDATED_MAILCOW_HOSTNAME} ]]; then\n    if is_covered_by_wildcard \"${VALIDATED_MAILCOW_HOSTNAME}\"; then\n      MAILCOW_PARENT_DOMAIN=$(echo ${VALIDATED_MAILCOW_HOSTNAME} | cut -d. -f2-)\n      log_f \"MAILCOW_HOSTNAME '${VALIDATED_MAILCOW_HOSTNAME}' is covered by wildcard '*.${MAILCOW_PARENT_DOMAIN}' - skipping explicit hostname\"\n      MAILCOW_HOSTNAME_COVERED=1\n    fi\n  fi\n\n  # Unique domains for server certificate\n  if [[ ${ENABLE_SSL_SNI} == \"y\" ]]; then\n    # create certificate for server name and fqdn SANs only\n    if [[ ${MAILCOW_HOSTNAME_COVERED} == \"1\" ]]; then\n      SERVER_SAN_VALIDATED=($(echo ${ADDITIONAL_VALIDATED_SAN[*]} | xargs -n1 | sort -u | xargs))\n    else\n      SERVER_SAN_VALIDATED=(${VALIDATED_MAILCOW_HOSTNAME} $(echo ${ADDITIONAL_VALIDATED_SAN[*]} | xargs -n1 | sort -u | xargs))\n    fi\n  else\n    # create certificate for all domains, including all subdomains from other domains [*]\n    if [[ ${MAILCOW_HOSTNAME_COVERED} == \"1\" ]]; then\n      SERVER_SAN_VALIDATED=($(echo ${VALIDATED_CONFIG_DOMAINS[*]} ${ADDITIONAL_VALIDATED_SAN[*]} | xargs -n1 | sort -u | xargs))\n    else\n      SERVER_SAN_VALIDATED=(${VALIDATED_MAILCOW_HOSTNAME} $(echo ${VALIDATED_CONFIG_DOMAINS[*]} ${ADDITIONAL_VALIDATED_SAN[*]} | xargs -n1 | sort -u | xargs))\n    fi\n  fi\n  if [[ ! -z ${SERVER_SAN_VALIDATED[*]} ]]; then\n    CERT_NAME=${SERVER_SAN_VALIDATED[0]}\n    VALIDATED_CERTIFICATES+=(\"${CERT_NAME}\")\n\n    # obtain server certificate if required\n    DOMAINS=${SERVER_SAN_VALIDATED[@]} /srv/obtain-certificate.sh rsa\n    RETURN=\"$?\"\n    if [[ \"$RETURN\" == \"0\" ]]; then # 0 = cert created successfully\n      CERT_AMOUNT_CHANGED=1\n      CERT_CHANGED=1\n    elif [[ \"$RETURN\" == \"1\" ]]; then # 1 = cert renewed successfully\n      CERT_CHANGED=1\n    elif [[ \"$RETURN\" == \"2\" ]]; then # 2 = cert not due for renewal\n      :\n    else\n      CERT_ERRORS=1\n    fi\n    # copy hostname certificate to default/server certificate\n    # do not a key when cert is missing, this can lead to a mismatch of cert/key\n    if [[ -f ${ACME_BASE}/${CERT_NAME}/cert.pem ]]; then\n      cp ${ACME_BASE}/${CERT_NAME}/cert.pem ${ACME_BASE}/cert.pem\n      cp ${ACME_BASE}/${CERT_NAME}/key.pem ${ACME_BASE}/key.pem\n    fi\n  fi\n\n  # individual certificates for SNI [@]\n  if [[ ${ENABLE_SSL_SNI} == \"y\" ]]; then\n  for VALIDATED_DOMAINS in \"${VALIDATED_CONFIG_DOMAINS[@]}\"; do\n    VALIDATED_DOMAINS_ARR=(${VALIDATED_DOMAINS})\n\n    unset VALIDATED_DOMAINS_SORTED\n    declare -a VALIDATED_DOMAINS_SORTED\n    VALIDATED_DOMAINS_SORTED=(${VALIDATED_DOMAINS_ARR[0]} $(echo ${VALIDATED_DOMAINS_ARR[@]:1} | xargs -n1 | sort -u | xargs))\n\n    # remove all domain names that are already inside the server certificate (SERVER_SAN_VALIDATED)\n    for domain in \"${SERVER_SAN_VALIDATED[@]}\"; do\n      for i in \"${!VALIDATED_DOMAINS_SORTED[@]}\"; do\n        if [[ ${VALIDATED_DOMAINS_SORTED[i]} = $domain ]]; then\n          unset 'VALIDATED_DOMAINS_SORTED[i]'\n        fi\n      done\n    done\n\n    if [[ ! -z ${VALIDATED_DOMAINS_SORTED[*]} ]]; then\n      CERT_NAME=${VALIDATED_DOMAINS_SORTED[0]}\n      VALIDATED_CERTIFICATES+=(\"${CERT_NAME}\")\n      # obtain certificate if required\n      DOMAINS=${VALIDATED_DOMAINS_SORTED[@]} /srv/obtain-certificate.sh rsa\n      RETURN=\"$?\"\n      if [[ \"$RETURN\" == \"0\" ]]; then # 0 = cert created successfully\n        CERT_AMOUNT_CHANGED=1\n        CERT_CHANGED=1\n      elif [[ \"$RETURN\" == \"1\" ]]; then # 1 = cert renewed successfully\n        CERT_CHANGED=1\n      elif [[ \"$RETURN\" == \"2\" ]]; then # 2 = cert not due for renewal\n        :\n      else\n        CERT_ERRORS=1\n      fi\n    fi\n  done\n  fi\n\n  if [[ -z ${VALIDATED_CERTIFICATES[*]} ]]; then\n    log_f \"Cannot validate any hostnames, skipping Let's Encrypt for 1 hour.\"\n    log_f \"Use SKIP_LETS_ENCRYPT=y in mailcow.conf to skip it permanently.\"\n    ${REDIS_CMDLINE} SET ACME_FAIL_TIME \"$(date +%s)\"\n    sleep 1h\n    exec $(readlink -f \"$0\")\n  fi\n\n  # find orphaned certificates if no errors occurred\n  if [[ \"${CERT_ERRORS}\" == \"0\" ]]; then\n    for EXISTING_CERT in \"${EXISTING_CERTS[@]}\"; do\n      if [[ ! \"`printf '_%s_\\n' \"${VALIDATED_CERTIFICATES[@]}\"`\" == *\"_${EXISTING_CERT}_\"* ]]; then\n        DATE=$(date +%Y-%m-%d_%H_%M_%S)\n        log_f \"Found orphaned certificate: ${EXISTING_CERT} - archiving it at ${ACME_BASE}/backups/${EXISTING_CERT}/\"\n        BACKUP_DIR=${ACME_BASE}/backups/${EXISTING_CERT}/${DATE}\n        # archive rsa cert and any other files\n        mkdir -p ${ACME_BASE}/backups/${EXISTING_CERT}\n        mv ${ACME_BASE}/${EXISTING_CERT} ${BACKUP_DIR}\n        CERT_CHANGED=1\n        CERT_AMOUNT_CHANGED=1\n      fi\n    done\n  fi\n\n  # reload on new or changed certificates\n  if [[ \"${CERT_CHANGED}\" == \"1\" ]]; then\n    rm -f \"${ACME_BASE}/force_renew\" 2> /dev/null\n    RELOAD_LOOP_C=1\n    while [[ \"${POSTFIX_CERT_SERIAL}\" == \"${POSTFIX_CERT_SERIAL_NEW}\" ]] || [[ \"${DOVECOT_CERT_SERIAL}\" == \"${DOVECOT_CERT_SERIAL_NEW}\" ]] || [[ ${#POSTFIX_CERT_SERIAL_NEW} -ne 36 ]] || [[ ${#DOVECOT_CERT_SERIAL_NEW} -ne 36 ]]; do\n      log_f \"Reloading or restarting services... (${RELOAD_LOOP_C})\"\n      RELOAD_LOOP_C=$((RELOAD_LOOP_C + 1))\n      CERT_AMOUNT_CHANGED=${CERT_AMOUNT_CHANGED} /srv/reload-configurations.sh\n      log_f \"Waiting for containers to settle...\"\n      sleep 10\n      until nc -z dovecot 143; do\n        sleep 1\n      done\n      until nc -z postfix 25; do\n        sleep 1\n      done\n      POSTFIX_CERT_SERIAL_NEW=\"$(echo | openssl s_client -connect postfix:25 -starttls smtp 2>/dev/null | openssl x509 -inform pem -noout -serial | cut -d \"=\" -f 2)\"\n      DOVECOT_CERT_SERIAL_NEW=\"$(echo | openssl s_client -connect dovecot:143 -starttls imap 2>/dev/null | openssl x509 -inform pem -noout -serial | cut -d \"=\" -f 2)\"\n      if [[ ${RELOAD_LOOP_C} -gt 3 ]]; then\n        log_f \"Some services do return old end dates, something went wrong!\"\n        ${REDIS_CMDLINE} SET ACME_FAIL_TIME \"$(date +%s)\"\n        break;\n      fi\n    done\n  fi\n\n  case \"$CERT_ERRORS\" in\n    0) # all successful\n      if [[ \"${CERT_CHANGED}\" == \"1\" ]]; then\n        if [[ \"${CERT_AMOUNT_CHANGED}\" == \"1\" ]]; then\n          log_f \"Certificates successfully requested and renewed where required, sleeping one day\"\n        else\n          log_f \"Certificates were successfully renewed where required, sleeping for another day.\"\n        fi\n      else\n        log_f \"Certificates were successfully validated, no changes or renewals required, sleeping for another day.\"\n      fi\n      sleep 1d\n      ;;\n    *) # non-zero\n      log_f \"Some errors occurred, retrying in 30 minutes...\"\n      ${REDIS_CMDLINE} SET ACME_FAIL_TIME \"$(date +%s)\"\n      sleep 30m\n      exec $(readlink -f \"$0\")\n      ;;\n  esac\n\ndone\n"
  },
  {
    "path": "data/Dockerfiles/acme/expand6.sh",
    "content": "#!/bin/bash\n\n##################################################################################\n#\n#  Copyright (C) 2017 Craig Miller\n#\n#  See the file \"LICENSE\" for information on usage and redistribution\n#  of this file, and for a DISCLAIMER OF ALL WARRANTIES.\n#  Distributed under GPLv2 License\n#\n##################################################################################\n\n\n# IPv6 Address Expansion functions\n#\n# by Craig Miller   19 Feb 2017\n#\n# 16 Nov 2017 v0.93 - added CLI functionality\n\n\nVERSION=0.93\n\nempty_addr=\"0000:0000:0000:0000:0000:0000:0000:0000\"\nempty_addr_len=${#empty_addr}\n\nfunction usage {\n               echo \" $0 - expand compressed IPv6 addresss \"\n         echo \" e.g. $0 2001:db8:1:12:123::456 \"\n         echo \" \"\n         echo \" -t  self test\"\n         echo \" \"\n         echo \" By Craig Miller - Version: $VERSION\"\n         exit 1\n           }\n\nif [ \"$1\" == \"-h\" ]; then\n  #call help\n  usage\nfi\n\n#\n# Expands IPv6 quibble to 4 digits with leading zeros e.g. db8 -> 0db8\n#\n# Returns string with expanded quibble\n\nfunction expand_quibble() {\n  addr=$1\n  # create array of quibbles\n  addr_array=(${addr//:/ })\n  addr_array_len=${#addr_array[@]}\n  # step thru quibbles\n  for ((i=0; i< $addr_array_len ; i++ ))\n  do\n    quibble=${addr_array[$i]}\n    quibble_len=${#quibble}\n    case $quibble_len in\n      1) quibble=\"000$quibble\";;\n      2) quibble=\"00$quibble\";;\n      3) quibble=\"0$quibble\";;\n    esac\n    addr_array[$i]=$quibble \n  done\n  # reconstruct addr from quibbles\n  return_str=${addr_array[*]}\n  return_str=\"${return_str// /:}\"\n  echo $return_str\n}\n\n#\n# Expands IPv6 address :: format to full zeros\n#\n# Returns string with expanded address\n\nfunction expand() {\n  if [[ $1 == *\"::\"* ]]; then\n    # check for leading zeros on front_addr\n    if [[ $1 == \"::\"* ]]; then\n      front_addr=0\n    else\n      front_addr=$(echo $1 | sed -r 's;([^ ]+)::.*;\\1;') \n    fi\n    # check for trailing zeros on back_addr\n    if [[ $1 == *\"::\" ]]; then\n      back_addr=0\n    else\n      back_addr=$(echo $1 | sed -r 's;.*::([^ ]+);\\1;') \n    fi\n    front_addr=$(expand_quibble $front_addr)\n    back_addr=$(expand_quibble $back_addr)\n    \n    new_addr=$empty_addr\n    front_addr_len=${#front_addr}\n    back_addr_len=${#back_addr}\n    # calculate fill needed\n    num_zeros=$(($empty_addr_len - $front_addr_len - $back_addr_len - 1))\n\n    #fill_str=${empty_addr[0]:0:$num_zeros}\n    new_addr=\"$front_addr:${empty_addr[0]:0:$num_zeros}$back_addr\"\n    \n    # return expanded address\n    echo $new_addr\n  else\n    # return input with expandd quibbles\n    expand_quibble $1\n  fi\n}\n\n# self test - call with '-t' parameter\nif [ \"$1\" == \"-t\" ]; then\n  # add address examples to test\n  expand fd11::1d70:cf84:18ef:d056\n  expand 2a01::1\n  expand fe80::f203:8cff:fe3f:f041\n  expand 2001:db8:123::5\n  expand 2001:470:ebbd:0:f203:8cff:fe3f:f041\n  # special cases\n  expand ::1\n  expand fd32:197d:3022:1101::\n  exit 1\nfi\n\n# allow script to be sourced (with no arguements)\nif [[ $1 != \"\" ]]; then\n  # validate input is an IPv6 address\n  if [[ $1 == *\":\"* ]]; then\n    expand $1\n  else\n    echo \"ERROR: unregcognized IPv6 address $1\"\n    exit 1\n  fi\nfi\n"
  },
  {
    "path": "data/Dockerfiles/acme/functions.sh",
    "content": "#!/bin/bash\n\nlog_f() {\n  if [[ ${2} == \"no_nl\" ]]; then\n    echo -n \"$(date) - ${1}\"\n  elif [[ ${2} == \"no_date\" ]]; then\n    echo \"${1}\"\n  elif [[ ${2} != \"redis_only\" ]]; then\n    echo \"$(date) - ${1}\"\n  fi\n  if [[ ${3} == \"b64\" ]]; then\n    ${REDIS_CMDLINE} LPUSH ACME_LOG \"{\\\"time\\\":\\\"$(date +%s)\\\",\\\"message\\\":\\\"base64,$(printf '%s' \"${MAILCOW_HOSTNAME} - ${1}\")\\\"}\" > /dev/null\n  else\n    ${REDIS_CMDLINE} LPUSH ACME_LOG \"{\\\"time\\\":\\\"$(date +%s)\\\",\\\"message\\\":\\\"$(printf '%s' \"${MAILCOW_HOSTNAME} - ${1}\" | \\\n      tr '%&;$\"[]{}-\\r\\n' ' ')\\\"}\" > /dev/null\n  fi\n}\n\nverify_email(){\n  regex=\"^(([A-Za-z0-9]+((\\.|\\-|\\_|\\+)?[A-Za-z0-9]?)*[A-Za-z0-9]+)|[A-Za-z0-9]+)@(([A-Za-z0-9]+)+((\\.|\\-|\\_)?([A-Za-z0-9]+)+)*)+\\.([A-Za-z]{2,})+$\"\n  if [[ $1 =~ ${regex} ]]; then\n    return 0\n  else\n    return 1\n  fi\n}\n\nverify_hash_match(){\n  CERT_HASH=$(openssl x509 -in \"${1}\" -noout -pubkey | openssl md5)\n  KEY_HASH=$(openssl pkey -in \"${2}\" -pubout | openssl md5)\n  if [[ ${CERT_HASH} != ${KEY_HASH} ]]; then\n    log_f \"Certificate and key hashes do not match!\"\n    return 1\n  else\n    log_f \"Verified hashes.\"\n    return 0\n  fi\n}\n\nget_ipv4(){\n  local IPV4=\n  local IPV4_SRCS=\n  local TRY=\n  IPV4_SRCS[0]=\"ip4.mailcow.email\"\n  IPV4_SRCS[1]=\"ip4.nevondo.com\"\n  until [[ ! -z ${IPV4} ]] || [[ ${TRY} -ge 10 ]]; do\n    IPV4=$(curl --connect-timeout 3 -m 10 -L4s ${IPV4_SRCS[$RANDOM % ${#IPV4_SRCS[@]} ]} | grep -E \"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$\")\n    [[ ! -z ${TRY} ]] && sleep 1\n    TRY=$((TRY+1))\n  done\n  echo ${IPV4}\n}\n\nget_ipv6(){\n  local IPV6=\n  local IPV6_SRCS=\n  local TRY=\n  IPV6_SRCS[0]=\"ip6.mailcow.email\"\n  IPV6_SRCS[1]=\"ip6.nevondo.com\"\n  until [[ ! -z ${IPV6} ]] || [[ ${TRY} -ge 10 ]]; do\n    IPV6=$(curl --connect-timeout 3 -m 10 -L6s ${IPV6_SRCS[$RANDOM % ${#IPV6_SRCS[@]} ]} | grep \"^\\([0-9a-fA-F]\\{0,4\\}:\\)\\{1,7\\}[0-9a-fA-F]\\{0,4\\}$\")\n    [[ ! -z ${TRY} ]] && sleep 1\n    TRY=$((TRY+1))\n  done\n  echo ${IPV6}\n}\n\ncheck_domain(){\n    DOMAIN=$1\n    A_DOMAIN=$(dig A ${DOMAIN} +short | tail -n 1)\n    AAAA_DOMAIN=$(dig AAAA ${DOMAIN} +short | tail -n 1)\n    # Hard-fail on CAA errors for MAILCOW_HOSTNAME\n    PARENT_DOMAIN=$(echo ${DOMAIN} | cut -d. -f2-)\n    CAAS=( $(dig CAA ${PARENT_DOMAIN} +short | sed -n 's/\\d issue \"\\(.*\\)\"/\\1/p') )\n    if [[ ! -z ${CAAS} ]]; then\n      if [[ ${CAAS[@]} =~ \"letsencrypt.org\" ]]; then\n        log_f \"Validated CAA for parent domain ${PARENT_DOMAIN}\"\n      else\n        log_f \"Lets Encrypt disallowed for ${PARENT_DOMAIN} by CAA record\"\n        return 1\n      fi\n    fi\n\n    if [[ ${ACME_DNS_CHALLENGE} == \"y\" ]]; then\n      log_f \"ACME_DNS_CHALLENGE=y - skipping IP and HTTP validation for ${DOMAIN}\"\n      return 0\n    fi\n    # Check if CNAME without v6 enabled target\n    if [[ ! -z ${AAAA_DOMAIN} ]] && [[ -z $(echo ${AAAA_DOMAIN} | grep \"^\\([0-9a-fA-F]\\{0,4\\}:\\)\\{1,7\\}[0-9a-fA-F]\\{0,4\\}$\") ]]; then\n      AAAA_DOMAIN=\n    fi\n    if [[ ! -z ${AAAA_DOMAIN} ]]; then\n      log_f \"Found AAAA record for ${DOMAIN}: ${AAAA_DOMAIN} - skipping A record check\"\n      if [[ $(expand ${IPV6:-\"0000:0000:0000:0000:0000:0000:0000:0000\"}) == $(expand ${AAAA_DOMAIN}) ]] || [[ ${SKIP_IP_CHECK} == \"y\" ]] || [[ ${SNAT6_TO_SOURCE} != \"n\" ]]; then\n        if verify_challenge_path \"${DOMAIN}\" 6; then\n          log_f \"Confirmed AAAA record with IP $(expand ${AAAA_DOMAIN})\"\n          return 0\n        else\n          log_f \"Confirmed AAAA record with IP $(expand ${AAAA_DOMAIN}), but HTTP validation failed\"\n        fi\n      else\n        log_f \"Cannot match your IP $(expand ${IPV6:-\"0000:0000:0000:0000:0000:0000:0000:0000\"}) against hostname ${DOMAIN} (DNS returned $(expand ${AAAA_DOMAIN}))\"\n      fi\n    elif [[ ! -z ${A_DOMAIN} ]]; then\n      log_f \"Found A record for ${DOMAIN}: ${A_DOMAIN}\"\n      if [[ ${IPV4:-ERR} == ${A_DOMAIN} ]] || [[ ${SKIP_IP_CHECK} == \"y\" ]] || [[ ${SNAT_TO_SOURCE} != \"n\" ]]; then\n        if verify_challenge_path \"${DOMAIN}\" 4; then\n          log_f \"Confirmed A record ${A_DOMAIN}\"\n          return 0\n        else\n          log_f \"Confirmed A record with IP ${A_DOMAIN}, but HTTP validation failed\"\n        fi\n      else\n        log_f \"Cannot match your IP ${IPV4} against hostname ${DOMAIN} (DNS returned ${A_DOMAIN})\"\n      fi\n    else\n      log_f \"No A or AAAA record found for hostname ${DOMAIN}\"\n    fi\n    return 1\n}\n\nverify_challenge_path(){\n  if [[ ${SKIP_HTTP_VERIFICATION} == \"y\" ]]; then\n    echo '(skipping check, returning 0)'\n    return 0\n  fi\n  # verify_challenge_path URL 4|6\n  RANDOM_N=${RANDOM}${RANDOM}${RANDOM}\n  echo ${RANDOM_N} > /var/www/acme/${RANDOM_N}\n  if [[ \"$(curl --insecure -${2} -L http://${1}/.well-known/acme-challenge/${RANDOM_N} --silent)\" == \"${RANDOM_N}\"  ]]; then\n    rm /var/www/acme/${RANDOM_N}\n    return 0\n  else\n    rm /var/www/acme/${RANDOM_N}\n    return 1\n  fi\n}\n\n# Check if a domain is covered by a wildcard (*.example.com) in ADDITIONAL_SAN\n# Usage: is_covered_by_wildcard \"subdomain.example.com\"\n# Returns: 0 if covered, 1 if not covered\n# Note: Only returns 0 (covered) when DNS-01 challenge is enabled,\n#       as wildcards cannot be validated with HTTP-01 challenge\nis_covered_by_wildcard() {\n  local DOMAIN=$1\n\n  # Only skip if DNS challenge is enabled (wildcards require DNS-01)\n  if [[ ${ACME_DNS_CHALLENGE} != \"y\" ]]; then\n    return 1\n  fi\n\n  # Return early if no ADDITIONAL_SAN is set\n  if [[ -z ${ADDITIONAL_SAN} ]]; then\n    return 1\n  fi\n\n  # Extract parent domain (e.g., mail.example.com -> example.com)\n  local PARENT_DOMAIN=$(echo ${DOMAIN} | cut -d. -f2-)\n\n  # Check if ADDITIONAL_SAN contains a wildcard for this parent domain\n  if [[ \"${ADDITIONAL_SAN}\" == *\"*.${PARENT_DOMAIN}\"* ]]; then\n    return 0  # Covered by wildcard\n  fi\n\n  return 1  # Not covered\n}\n"
  },
  {
    "path": "data/Dockerfiles/acme/load-dns-config.sh",
    "content": "#!/bin/bash\n\nSCRIPT_SOURCE=\"${BASH_SOURCE[0]:-${0}}\"\nif [[ \"${SCRIPT_SOURCE}\" == \"${0}\" ]]; then\n  __dns_loader_standalone=1\nelse\n  __dns_loader_standalone=0\nfi\n\nCONFIG_PATH=\"${ACME_DNS_CONFIG_FILE:-/etc/acme/dns-01.conf}\"\n\nif [[ ! -f \"${CONFIG_PATH}\" ]]; then\n  if [[ $__dns_loader_standalone -eq 1 ]]; then\n    exit 0\n  else\n    return 0\n  fi\nfi\n\nsource /srv/functions.sh\n\nlog_f \"Loading DNS-01 configuration from ${CONFIG_PATH}\"\n\nLINE_NO=0\nwhile IFS= read -r line || [[ -n \"${line}\" ]]; do\n  LINE_NO=$((LINE_NO+1))\n  line=\"${line%$'\\r'}\"\n  line_trimmed=\"$(printf '%s' \"${line}\" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')\"\n  [[ -z \"${line_trimmed}\" ]] && continue\n  [[ \"${line_trimmed:0:1}\" == \"#\" ]] && continue\n  if [[ \"${line_trimmed}\" != *=* ]]; then\n    log_f \"Skipping invalid DNS config line ${LINE_NO} (missing key=value)\"\n    continue\n  fi\n  KEY=\"${line_trimmed%%=*}\"\n  VALUE=\"${line_trimmed#*=}\"\n  KEY=\"$(printf '%s' \"${KEY}\" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')\"\n  VALUE=\"$(printf '%s' \"${VALUE}\" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')\"\n  if [[ -z \"${KEY}\" ]]; then\n    log_f \"Skipping invalid DNS config line ${LINE_NO} (empty key)\"\n    continue\n  fi\n  if [[ \"${VALUE}\" =~ ^\\\".*\\\"$ ]]; then\n    VALUE=\"${VALUE:1:-1}\"\n  elif [[ \"${VALUE}\" =~ ^\\'.*\\'$ ]]; then\n    VALUE=\"${VALUE:1:-1}\"\n  fi\n  export \"${KEY}\"=\"${VALUE}\"\n  log_f \"Exported DNS config key ${KEY}\"\n\ndone < \"${CONFIG_PATH}\"\n\nif [[ $__dns_loader_standalone -eq 1 ]]; then\n  exit 0\nelse\n  return 0\nfi\n"
  },
  {
    "path": "data/Dockerfiles/acme/obtain-certificate-dns.sh",
    "content": "#!/bin/bash\n\n# Return values / exit codes\n# 0 = cert created successfully\n# 1 = cert renewed successfully\n# 2 = cert not due for renewal\n# * = errors\n\nsource /srv/functions.sh\n\nCERT_DOMAINS=(${DOMAINS[@]})\nCERT_DOMAIN=${CERT_DOMAINS[0]}\nACME_BASE=/var/lib/acme\n\n# Load optional DNS provider secrets from /etc/acme/dns-01.conf\nif [[ -f /srv/load-dns-config.sh ]]; then\n  source /srv/load-dns-config.sh\n  if declare -F log_f >/dev/null; then\n    log_f \"ACME_DNS_CHALLENGE is enabled, DNS provider secrets loaded\"\n  fi\nfi\n\nTYPE=${1}\nPREFIX=\"\"\n# only support rsa certificates for now\nif [[ \"${TYPE}\" != \"rsa\" ]]; then\n  log_f \"Unknown certificate type '${TYPE}' requested\"\n  exit 5\nfi\n\nif [[ -z \"${ACME_DNS_PROVIDER}\" ]]; then\n  log_f \"ACME_DNS_PROVIDER is required when ACME_DNS_CHALLENGE is enabled\"\n  exit 6\nfi\n\nDOMAINS_FILE=${ACME_BASE}/${CERT_DOMAIN}/domains\nCERT=${ACME_BASE}/${CERT_DOMAIN}/${PREFIX}cert.pem\nSHARED_KEY=${ACME_BASE}/acme/${PREFIX}key.pem  # must already exist\nKEY=${ACME_BASE}/${CERT_DOMAIN}/${PREFIX}key.pem\nCSR=${ACME_BASE}/${CERT_DOMAIN}/${PREFIX}acme.csr\n\nif [[ -z ${CERT_DOMAINS[*]} ]]; then\n  log_f \"Missing CERT_DOMAINS to obtain a certificate\"\n  exit 3\nfi\n\nif [[ \"${LE_STAGING}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  if [[ ! -z \"${DIRECTORY_URL}\" ]]; then\n    log_f \"Cannot use DIRECTORY_URL with LE_STAGING=y - ignoring DIRECTORY_URL\"\n  fi\n  log_f \"Using Let's Encrypt staging servers\"\n  ACME_SH_SERVER_ARGS=(\"--staging\")\nelif [[ ! -z \"${DIRECTORY_URL}\" ]]; then\n  log_f \"Using custom directory URL ${DIRECTORY_URL}\"\n  ACME_SH_SERVER_ARGS=(\"--server\" \"${DIRECTORY_URL}\")\nelse\n  log_f \"Using Let's Encrypt production servers\"\n  ACME_SH_SERVER_ARGS=(\"--server\" \"letsencrypt\")\nfi\n\nif [[ -f ${DOMAINS_FILE} && \"$(cat ${DOMAINS_FILE})\" ==  \"${CERT_DOMAINS[*]}\" ]]; then\n  if [[ ! -f ${CERT} || ! -f \"${KEY}\" || -f \"${ACME_BASE}/force_renew\" ]]; then\n    log_f \"Certificate ${CERT} doesn't exist yet or forced renewal - start obtaining\"\n  elif ! openssl x509 -checkend 2592000 -noout -in ${CERT} > /dev/null; then\n    log_f \"Certificate ${CERT} is due for renewal (< 30 days) - start renewing\"\n  else\n    log_f \"Certificate ${CERT} validation done, neither changed nor due for renewal.\"\n    exit 2\n  fi\nelse\n  log_f \"Certificate ${CERT} missing or changed domains '${CERT_DOMAINS[*]}' - start obtaining\"\nfi\n\n# Make backup\nif [[ -f ${CERT} ]]; then\n  DATE=$(date +%Y-%m-%d_%H_%M_%S)\n  BACKUP_DIR=${ACME_BASE}/backups/${CERT_DOMAIN}/${PREFIX}${DATE}\n  log_f \"Creating backups in ${BACKUP_DIR} ...\"\n  mkdir -p ${BACKUP_DIR}/\n  [[ -f ${DOMAINS_FILE} ]] && cp ${DOMAINS_FILE} ${BACKUP_DIR}/\n  [[ -f ${CERT} ]] && cp ${CERT} ${BACKUP_DIR}/\n  [[ -f ${KEY} ]] && cp ${KEY} ${BACKUP_DIR}/\n  [[ -f ${CSR} ]] && cp ${CSR} ${BACKUP_DIR}/\nfi\n\nmkdir -p ${ACME_BASE}/${CERT_DOMAIN}\nif [[ ! -f ${KEY} ]]; then\n  log_f \"Copying shared private key for this certificate...\"\n  cp ${SHARED_KEY} ${KEY}\n  chmod 600 ${KEY}\nfi\n\n# Generating CSR to keep layout parity with HTTP challenge flow\nprintf \"[SAN]\\nsubjectAltName=\" > /tmp/_SAN\nprintf \"DNS:%s,\" \"${CERT_DOMAINS[@]}\" >> /tmp/_SAN\nsed -i '$s/,$//' /tmp/_SAN\nopenssl req -new -sha256 -key ${KEY} -subj \"/\" -reqexts SAN -config <(cat \"$(openssl version -d | sed 's/.*\\\"\\(.*\\)\\\"/\\1/g')/openssl.cnf\" /tmp/_SAN) > ${CSR}\n\nlog_f \"Checking resolver...\"\nuntil dig letsencrypt.org +time=3 +tries=1 @unbound > /dev/null; do\n  sleep 2\ndone\nlog_f \"Resolver OK\"\n\nACME_SH_BIN_PATH=${ACME_SH_BIN:-/opt/acme.sh/acme.sh}\nACME_SH_WORK_HOME=${ACME_SH_CONFIG_HOME:-/var/lib/acme/acme-sh}\nmkdir -p ${ACME_SH_WORK_HOME}\n\nif [[ ! -x ${ACME_SH_BIN_PATH} ]]; then\n  log_f \"acme.sh binary not found at ${ACME_SH_BIN_PATH}\"\n  exit 7\nfi\n\nif [[ ! -f ${ACME_SH_WORK_HOME}/account.conf ]]; then\n  if [[ -z \"${ACME_ACCOUNT_EMAIL}\" ]]; then\n    log_f \"ACME_ACCOUNT_EMAIL is required to register a new acme.sh account\"\n    exit 8\n  fi\n  log_f \"Registering acme.sh account for ${ACME_ACCOUNT_EMAIL}\"\n  REGISTER_CMD=(\"${ACME_SH_BIN_PATH}\" \"--home\" \"${ACME_SH_WORK_HOME}\" \"--config-home\" \"${ACME_SH_WORK_HOME}\" \"--cert-home\" \"${ACME_SH_WORK_HOME}\" \"--register-account\" \"-m\" \"${ACME_ACCOUNT_EMAIL}\")\n  REGISTER_CMD+=(\"${ACME_SH_SERVER_ARGS[@]}\")\n  REGISTER_RESPONSE=$(\"${REGISTER_CMD[@]}\" 2>&1)\n  if [[ $? -ne 0 ]]; then\n    log_f \"Failed to register acme.sh account: ${REGISTER_RESPONSE}\"\n    exit 9\n  fi\nfi\n\nTMP_CERT=$(mktemp /tmp/acme-cert.XXXXXX)\nTMP_FULLCHAIN=$(mktemp /tmp/acme-fullchain.XXXXXX)\n\nACME_CMD=(\"${ACME_SH_BIN_PATH}\" \"--home\" \"${ACME_SH_WORK_HOME}\" \"--config-home\" \"${ACME_SH_WORK_HOME}\" \"--cert-home\" \"${ACME_SH_WORK_HOME}\")\nACME_CMD+=(\"${ACME_SH_SERVER_ARGS[@]}\")\nACME_CMD+=(\"--issue\" \"--dns\" \"${ACME_DNS_PROVIDER}\" \"--key-file\" \"${KEY}\" \"--cert-file\" \"${TMP_CERT}\" \"--fullchain-file\" \"${TMP_FULLCHAIN}\" \"--force\")\nfor domain in \"${CERT_DOMAINS[@]}\"; do\n  ACME_CMD+=(\"-d\" \"${domain}\")\ndone\n\nlog_f \"Using command ${ACME_CMD[*]}\"\nif [[ -n \"${ACME_DNS_PROVIDER}\" ]]; then\n  log_f \"DNS provider: ${ACME_DNS_PROVIDER}\"\nfi\nif compgen -A variable | grep -Eq \"^DNS_|^ACME_\"; then\n  LOG_KEYS=$(env | grep -E \"^(DNS_|ACME_)\" | cut -d= -f1 | tr '\\n' ' ')\n  log_f \"Available DNS/ACME env keys: ${LOG_KEYS}\" redis_only\nfi\nACME_RESPONSE=$(\"${ACME_CMD[@]}\" 2>&1 | tee /dev/fd/5; exit ${PIPESTATUS[0]})\nSUCCESS=\"$?\"\nACME_RESPONSE_B64=$(echo \"${ACME_RESPONSE}\" | openssl enc -e -A -base64)\nlog_f \"${ACME_RESPONSE_B64}\" redis_only b64\n\ncase \"$SUCCESS\" in\n  0)\n    log_f \"Deploying certificate ${CERT}...\"\n    if verify_hash_match ${TMP_FULLCHAIN} ${KEY}; then\n      RETURN=0\n      if [[ -f ${CERT} ]]; then\n        RETURN=1\n      fi\n      mv -f ${TMP_FULLCHAIN} ${CERT}\n      rm -f ${TMP_CERT}\n      echo -n ${CERT_DOMAINS[*]} > ${DOMAINS_FILE}\n      log_f \"Certificate successfully obtained via DNS challenge\"\n      exit ${RETURN}\n    else\n      log_f \"Certificate was requested, but key and certificate hashes do not match\"\n      rm -f ${TMP_CERT} ${TMP_FULLCHAIN}\n      exit 4\n    fi\n    ;;\n  *)\n    log_f \"Failed to obtain certificate ${CERT} for domains '${CERT_DOMAINS[*]}' via DNS challenge\"\n    redis-cli -h redis -a ${REDISPASS} --no-auth-warning SET ACME_FAIL_TIME \"$(date +%s)\"\n    rm -f ${TMP_CERT} ${TMP_FULLCHAIN}\n    exit 100${SUCCESS}\n    ;;\nesac\n"
  },
  {
    "path": "data/Dockerfiles/acme/obtain-certificate.sh",
    "content": "#!/bin/bash\n\n# Return values / exit codes\n# 0 = cert created successfully\n# 1 = cert renewed successfully\n# 2 = cert not due for renewal\n# * = errors\n\n\nsource /srv/functions.sh\n\nCERT_DOMAINS=(${DOMAINS[@]})\nCERT_DOMAIN=${CERT_DOMAINS[0]}\nACME_BASE=/var/lib/acme\n\nTYPE=${1}\nPREFIX=\"\"\n# only support rsa certificates for now\nif [[ \"${TYPE}\" != \"rsa\" ]]; then\n  log_f \"Unknown certificate type '${TYPE}' requested\"\n  exit 5\nfi\n\nif [[ \"${ACME_DNS_CHALLENGE}\" == \"y\" ]]; then\n  exec /srv/obtain-certificate-dns.sh \"$@\"\nfi\nDOMAINS_FILE=${ACME_BASE}/${CERT_DOMAIN}/domains\nCERT=${ACME_BASE}/${CERT_DOMAIN}/${PREFIX}cert.pem\nSHARED_KEY=${ACME_BASE}/acme/${PREFIX}key.pem  # must already exist\nKEY=${ACME_BASE}/${CERT_DOMAIN}/${PREFIX}key.pem\nCSR=${ACME_BASE}/${CERT_DOMAIN}/${PREFIX}acme.csr\n\nif [[ -z ${CERT_DOMAINS[*]} ]]; then\n  log_f \"Missing CERT_DOMAINS to obtain a certificate\"\n  exit 3\nfi\n\nif [[ \"${LE_STAGING}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  if [[ ! -z \"${DIRECTORY_URL}\" ]]; then\n    log_f \"Cannot use DIRECTORY_URL with LE_STAGING=y - ignoring DIRECTORY_URL\"\n  fi\n  log_f \"Using Let's Encrypt staging servers\"\n  DIRECTORY_URL='--directory-url https://acme-staging-v02.api.letsencrypt.org/directory'\nelif [[ ! -z \"${DIRECTORY_URL}\" ]]; then\n  log_f \"Using custom directory URL ${DIRECTORY_URL}\"\n  DIRECTORY_URL=\"--directory-url ${DIRECTORY_URL}\"\nfi\n\nif [[ -f ${DOMAINS_FILE} && \"$(cat ${DOMAINS_FILE})\" ==  \"${CERT_DOMAINS[*]}\" ]]; then\n  if [[ ! -f ${CERT} || ! -f \"${KEY}\" || -f \"${ACME_BASE}/force_renew\" ]]; then\n    log_f \"Certificate ${CERT} doesn't exist yet or forced renewal - start obtaining\"\n  # Certificate exists and did not change but could be due for renewal (30 days)\n  elif ! openssl x509 -checkend 2592000 -noout -in ${CERT} > /dev/null; then\n    log_f \"Certificate ${CERT} is due for renewal (< 30 days) - start renewing\"\n  else\n    log_f \"Certificate ${CERT} validation done, neither changed nor due for renewal.\"\n    exit 2\n  fi\nelse\n  log_f \"Certificate ${CERT} missing or changed domains '${CERT_DOMAINS[*]}' - start obtaining\"\nfi\n\n\n# Make backup\nif [[ -f ${CERT} ]]; then\n  DATE=$(date +%Y-%m-%d_%H_%M_%S)\n  BACKUP_DIR=${ACME_BASE}/backups/${CERT_DOMAIN}/${PREFIX}${DATE}\n  log_f \"Creating backups in ${BACKUP_DIR} ...\"\n  mkdir -p ${BACKUP_DIR}/\n  [[ -f ${DOMAINS_FILE} ]] && cp ${DOMAINS_FILE} ${BACKUP_DIR}/\n  [[ -f ${CERT} ]] && cp ${CERT} ${BACKUP_DIR}/\n  [[ -f ${KEY} ]] && cp ${KEY} ${BACKUP_DIR}/\n  [[ -f ${CSR} ]] && cp ${CSR} ${BACKUP_DIR}/\nfi\n\nmkdir -p ${ACME_BASE}/${CERT_DOMAIN}\nif [[ ! -f ${KEY} ]]; then\n  log_f \"Copying shared private key for this certificate...\"\n  cp ${SHARED_KEY} ${KEY}\n  chmod 600 ${KEY}\nfi\n\n# Generating CSR\nprintf \"[SAN]\\nsubjectAltName=\" > /tmp/_SAN\nprintf \"DNS:%s,\" \"${CERT_DOMAINS[@]}\" >> /tmp/_SAN\nsed -i '$s/,$//' /tmp/_SAN\nopenssl req -new -sha256 -key ${KEY} -subj \"/\" -reqexts SAN -config <(cat \"$(openssl version -d | sed 's/.*\"\\(.*\\)\"/\\1/g')/openssl.cnf\" /tmp/_SAN) > ${CSR}\n\n# acme-tiny writes info to stderr and ceritifcate to stdout\n# The redirects will do the following:\n# - redirect stdout to temp certificate file\n# - redirect acme-tiny stderr to stdout (logs to variable ACME_RESPONSE)\n# - tee stderr to get live output and log to dockerd\n\nlog_f \"Checking resolver...\"\nuntil dig letsencrypt.org +time=3 +tries=1 @unbound > /dev/null; do\n  sleep 2\ndone\nlog_f \"Resolver OK\"\nlog_f \"Using command acme-tiny ${DIRECTORY_URL} --account-key ${ACME_BASE}/acme/account.pem --disable-check --csr ${CSR} --acme-dir /var/www/acme/\"\nACME_RESPONSE=$(acme-tiny ${DIRECTORY_URL} \\\n  --account-key ${ACME_BASE}/acme/account.pem \\\n  --disable-check \\\n  --csr ${CSR} \\\n  --acme-dir /var/www/acme/ 2>&1 > /tmp/_cert.pem | tee /dev/fd/5; exit ${PIPESTATUS[0]})\nSUCCESS=\"$?\"\nACME_RESPONSE_B64=$(echo \"${ACME_RESPONSE}\" | openssl enc -e -A -base64)\nlog_f \"${ACME_RESPONSE_B64}\" redis_only b64\ncase \"$SUCCESS\" in\n  0) # cert requested\n    log_f \"Deploying certificate ${CERT}...\"\n    # Deploy the new certificate and key\n    # Moving temp cert to {domain} folder\n    if verify_hash_match /tmp/_cert.pem ${KEY}; then\n      RETURN=0  # certificate created\n      if [[ -f ${CERT} ]]; then\n        RETURN=1  # certificate renewed\n      fi\n      mv -f /tmp/_cert.pem ${CERT}\n      echo -n ${CERT_DOMAINS[*]} > ${DOMAINS_FILE}\n      rm /var/www/acme/* 2> /dev/null\n      log_f \"Certificate successfully obtained\"\n      exit ${RETURN}\n    else\n      log_f \"Certificate was successfully requested, but key and certificate have non-matching hashes, ignoring certificate\"\n      exit 4\n    fi\n    ;;\n  *) # non-zero is non-fun\n    log_f \"Failed to obtain certificate ${CERT} for domains '${CERT_DOMAINS[*]}'\"\n    redis-cli -h redis -a ${REDISPASS} --no-auth-warning SET ACME_FAIL_TIME \"$(date +%s)\"\n    exit 100${SUCCESS}\n    ;;\nesac\n"
  },
  {
    "path": "data/Dockerfiles/acme/reload-configurations.sh",
    "content": "#!/bin/bash\n\n# Reading container IDs\n# Wrapping as array to ensure trimmed content when calling $NGINX etc.\nNGINX=($(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" | jq -rc \"select( .name | tostring | contains(\\\"nginx-mailcow\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\" | tr \"\\n\" \" \"))\nDOVECOT=($(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" | jq -rc \"select( .name | tostring | contains(\\\"dovecot-mailcow\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\" | tr \"\\n\" \" \"))\nPOSTFIX=($(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" | jq -rc \"select( .name | tostring | contains(\\\"postfix-mailcow\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\" | tr \"\\n\" \" \"))\n\nreload_nginx(){\n  echo \"Reloading Nginx...\"\n  NGINX_RELOAD_RET=$(curl -X POST --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${NGINX}/exec -d '{\"cmd\":\"reload\", \"task\":\"nginx\"}' --silent -H 'Content-type: application/json' | jq -r .type)\n  [[ ${NGINX_RELOAD_RET} != 'success' ]] && { echo \"Could not reload Nginx, restarting container...\"; restart_container ${NGINX} ; }\n}\n\nreload_dovecot(){\n  echo \"Reloading Dovecot...\"\n  DOVECOT_RELOAD_RET=$(curl -X POST --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${DOVECOT}/exec -d '{\"cmd\":\"reload\", \"task\":\"dovecot\"}' --silent -H 'Content-type: application/json' | jq -r .type)\n  [[ ${DOVECOT_RELOAD_RET} != 'success' ]] && { echo \"Could not reload Dovecot, restarting container...\"; restart_container ${DOVECOT} ; }\n}\n\nreload_postfix(){\n  echo \"Reloading Postfix...\"\n  POSTFIX_RELOAD_RET=$(curl -X POST --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${POSTFIX}/exec -d '{\"cmd\":\"reload\", \"task\":\"postfix\"}' --silent -H 'Content-type: application/json' | jq -r .type)\n  [[ ${POSTFIX_RELOAD_RET} != 'success' ]] && { echo \"Could not reload Postfix, restarting container...\"; restart_container ${POSTFIX} ; }\n}\n\nrestart_container(){\n  for container in $*; do\n    echo \"Restarting ${container}...\"\n    C_REST_OUT=$(curl -X POST --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${container}/restart --silent | jq -r '.msg')\n    echo \"${C_REST_OUT}\"\n  done\n}\n\nif [[ \"${CERT_AMOUNT_CHANGED}\" == \"1\" ]]; then\n  restart_container ${NGINX}\n  restart_container ${DOVECOT}\n  restart_container ${POSTFIX}\nelse\n  reload_nginx\n  #reload_dovecot\n  restart_container ${DOVECOT}\n  #reload_postfix\n  restart_container ${POSTFIX}\nfi\n"
  },
  {
    "path": "data/Dockerfiles/backup/Dockerfile",
    "content": "FROM debian:trixie-slim\n\nRUN apt update && apt install pigz zstd -y --no-install-recommends"
  },
  {
    "path": "data/Dockerfiles/clamd/Dockerfile",
    "content": "FROM alpine:3.21 AS builder\n\nWORKDIR /src\nENV CLAMD_VERSION=1.4.2\n\nRUN apk upgrade --no-cache \\\n  && apk add --update --no-cache \\\n    g++ \\\n    gcc \\\n    gdb \\\n    make \\\n    cmake \\\n    py3-pytest \\\n    python3 \\\n    valgrind \\\n    bzip2-dev \\\n    check-dev \\\n    curl-dev \\\n    json-c-dev \\\n    libmilter-dev \\\n    libxml2-dev \\\n    linux-headers \\\n    ncurses-dev \\\n    openssl-dev \\\n    pcre2-dev \\\n    zlib-dev \\\n    cargo \\\n    rust\n\nRUN wget -P /src https://www.clamav.net/downloads/production/clamav-${CLAMD_VERSION}.tar.gz \\\n  && tar xzfv /src/clamav-${CLAMD_VERSION}.tar.gz \\\n  && cd /src/clamav-${CLAMD_VERSION} \\\n  && cmake . \\\n  -D CMAKE_BUILD_TYPE=\"Release\"                                                       \\\n  -D CMAKE_INSTALL_PREFIX=\"/usr\"                                                      \\\n  -D CMAKE_INSTALL_LIBDIR=\"/usr/lib\"                                                  \\\n  -D APP_CONFIG_DIRECTORY=\"/etc/clamav\"                                               \\\n  -D DATABASE_DIRECTORY=\"/var/lib/clamav\"                                             \\\n  -D ENABLE_CLAMONACC=OFF                                                             \\\n  -D ENABLE_EXAMPLES=OFF                                                              \\\n  -D ENABLE_MILTER=ON                                                                 \\\n  -D ENABLE_MAN_PAGES=OFF                                                             \\\n  -D ENABLE_STATIC_LIB=OFF                                                            \\\n  -D ENABLE_JSON_SHARED=ON                                                            \\ \n  && cmake --build . \\\n  && make DESTDIR=\"/clamav\" -j$(($(nproc) - 1)) install \\\n  && rm -r \"/clamav/usr/lib/pkgconfig/\" \\\n  && sed -e \"s|^\\(Example\\)|\\# \\1|\" \\\n    -e \"s|.*\\(LocalSocket\\) .*|\\1 /tmp/clamd.sock|\" \\\n    -e \"s|.*\\(TCPSocket\\) .*|\\1 3310|\" \\\n    -e \"s|.*\\(TCPAddr\\) .*|#\\1 0.0.0.0|\" \\\n    -e \"s|.*\\(User\\) .*|\\1 clamav|\" \\\n    -e \"s|^\\#\\(LogFile\\) .*|\\1 /var/log/clamav/clamd.log|\" \\\n    -e \"s|^\\#\\(LogTime\\).*|\\1 yes|\" \\\n    \"/clamav/etc/clamav/clamd.conf.sample\" > \"/clamav/etc/clamav/clamd.conf\" \\\n  && sed -e \"s|^\\(Example\\)|\\# \\1|\" \\\n    -e \"s|.*\\(DatabaseOwner\\) .*|\\1 clamav|\" \\\n    -e \"s|^\\#\\(UpdateLogFile\\) .*|\\1 /var/log/clamav/freshclam.log|\" \\\n    -e \"s|^\\#\\(NotifyClamd\\).*|\\1 /etc/clamav/clamd.conf|\" \\\n    -e \"s|^\\#\\(ScriptedUpdates\\).*|\\1 yes|\" \\\n    \"/clamav/etc/clamav/freshclam.conf.sample\" > \"/clamav/etc/clamav/freshclam.conf\" \\\n  && sed -e \"s|^\\(Example\\)|\\# \\1|\" \\\n  -e \"s|.*\\(MilterSocket\\) .*|\\1 inet:7357|\" \\\n  -e \"s|.*\\(User\\) .*|\\1 clamav|\" \\\n  -e \"s|^\\#\\(LogFile\\) .*|\\1 /var/log/clamav/milter.log|\" \\\n  -e \"s|^\\#\\(LogTime\\).*|\\1 yes|\" \\\n  -e \"s|.*\\(\\ClamdSocket\\) .*|\\1 unix:/tmp/clamd.sock|\" \\\n  \"/clamav/etc/clamav/clamav-milter.conf.sample\" > \"/clamav/etc/clamav/clamav-milter.conf\" || exit 1\n\n\nFROM alpine:3.21\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nRUN apk upgrade --no-cache \\\n  && apk add --update --no-cache \\\n    tzdata \\\n    rsync \\\n    bind-tools \\\n    bash \\\n    tini \\\n    json-c \\\n    libbz2 \\\n    libcurl \\\n    libmilter \\\n    libxml2 \\\n    ncurses-libs \\\n    pcre2 \\\n    zlib \\\n    libgcc \\\n  && addgroup -S \"clamav\" && \\\n    adduser -D -G \"clamav\" -h \"/var/lib/clamav\" -s \"/bin/false\" -S \"clamav\" && \\\n    install -d -m 755 -g \"clamav\" -o \"clamav\" \"/var/log/clamav\" && \\\n    chown -R clamav:clamav /var/lib/clamav\n\nCOPY --from=builder \"/clamav\" \"/\"\n\n# init\nCOPY clamd.sh /clamd.sh\nRUN chmod +x /sbin/tini\n\n# healthcheck\nCOPY healthcheck.sh /healthcheck.sh\nCOPY clamdcheck.sh /usr/local/bin\nRUN chmod +x /healthcheck.sh\nRUN chmod +x /usr/local/bin/clamdcheck.sh\nHEALTHCHECK --start-period=6m CMD \"/healthcheck.sh\"\n\nENTRYPOINT []\nCMD [\"/sbin/tini\", \"-g\", \"--\", \"/clamd.sh\"]"
  },
  {
    "path": "data/Dockerfiles/clamd/clamd.sh",
    "content": "#!/bin/bash\n\nif [[ \"${SKIP_CLAMD}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  echo \"SKIP_CLAMD=y, skipping ClamAV...\"\n  sleep 365d\n  exit 0\nfi\n\n# Cleaning up garbage\necho \"Cleaning up tmp files...\"\nrm -rf /var/lib/clamav/tmp.*\n\n# Prepare whitelist\n\nmkdir -p /run/clamav /var/lib/clamav\n\nif [[ -s /etc/clamav/whitelist.ign2 ]]; then\n  echo \"Copying non-empty whitelist.ign2 to /var/lib/clamav/whitelist.ign2\"\n  cp /etc/clamav/whitelist.ign2 /var/lib/clamav/whitelist.ign2\nfi\n\nif [[ ! -f /var/lib/clamav/whitelist.ign2 ]]; then\n  echo \"Creating /var/lib/clamav/whitelist.ign2\"\n  cat <<EOF > /var/lib/clamav/whitelist.ign2\n# Please restart ClamAV after changing signatures\nExample-Signature.Ignore-1\nPUA.Win.Trojan.EmbeddedPDF-1\nPUA.Pdf.Trojan.EmbeddedJavaScript-1\nPUA.Pdf.Trojan.OpenActionObjectwithJavascript-1\nEOF\nfi\n\nchown clamav:clamav -R /var/lib/clamav /run/clamav\n\nchmod 755 /var/lib/clamav\nchmod 644 -R /var/lib/clamav/*\nchmod 750 /run/clamav\n\nstat /var/lib/clamav/whitelist.ign2\ndos2unix /var/lib/clamav/whitelist.ign2\nsed -i '/^\\s*$/d' /var/lib/clamav/whitelist.ign2\n# Copying to /etc/clamav to expose file as-is to administrator\ncp -p /var/lib/clamav/whitelist.ign2 /etc/clamav/whitelist.ign2\n\n\nBACKGROUND_TASKS=()\n\necho \"Running freshclam...\"\nfreshclam\n\n(\nwhile true; do\n  sleep 12600\n  freshclam\ndone\n) &\nBACKGROUND_TASKS+=($!)\n\n(\nwhile true; do\n  sleep 10m\n  SANE_MIRRORS=\"$(dig +ignore +short rsync.sanesecurity.net)\"\n  for sane_mirror in ${SANE_MIRRORS}; do\n    CE=\n    rsync -avp --chown=clamav:clamav --chmod=Du=rwx,Dgo=rx,Fu=rw,Fog=r --timeout=5 rsync://${sane_mirror}/sanesecurity/ \\\n      --include 'blurl.ndb' \\\n      --include 'junk.ndb' \\\n      --include 'jurlbl.ndb' \\\n      --include 'jurbla.ndb' \\\n      --include 'phishtank.ndb' \\\n      --include 'phish.ndb' \\\n      --include 'spamimg.hdb' \\\n      --include 'scam.ndb' \\\n      --include 'rogue.hdb' \\\n      --include 'sanesecurity.ftm' \\\n      --include 'sigwhitelist.ign2' \\\n      --exclude='*' /var/lib/clamav/\n    CE=$?\n    chmod 755 /var/lib/clamav/\n    if [ ${CE} -eq 0 ]; then\n      while [ ! -z \"$(pidof freshclam)\" ]; do\n        echo \"Freshclam is active, waiting...\"\n        sleep 5\n      done\n      echo RELOAD | nc clamd-mailcow 3310\n      break\n    fi\n  done\n  sleep 12h\ndone\n) &\nBACKGROUND_TASKS+=($!)\n\necho \"$(clamd -V) is starting... please wait a moment.\"\nnice -n10 clamd &\nBACKGROUND_TASKS+=($!)\n\nwhile true; do\n  for bg_task in ${BACKGROUND_TASKS[*]}; do\n    if ! kill -0 ${bg_task} 1>&2; then\n      echo \"Worker ${bg_task} died, stopping container waiting for respawn...\"\n      kill -TERM 1\n    fi\n    sleep 10\n  done\ndone\n"
  },
  {
    "path": "data/Dockerfiles/clamd/clamdcheck.sh",
    "content": "#!/bin/sh\n\nset -eu\n\nif [ \"${CLAMAV_NO_CLAMD:-}\" != \"false\" ]; then\n\tif [ \"$(echo \"PING\" | nc localhost 3310)\" != \"PONG\" ]; then\n\t\techo \"ERROR: Unable to contact server\"\n\t\texit 1\n\tfi\n\n\techo \"Clamd is up\"\nfi\n\nexit 0\n"
  },
  {
    "path": "data/Dockerfiles/clamd/healthcheck.sh",
    "content": "#!/bin/bash\n\nif [[ \"${SKIP_CLAMD}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  echo \"SKIP_CLAMD=y, skipping ClamAV...\"\n  exit 0\nfi\n\n# run clamd healthcheck\n/usr/local/bin/clamdcheck.sh\n"
  },
  {
    "path": "data/Dockerfiles/dockerapi/Dockerfile",
    "content": "FROM alpine:3.23\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nARG PIP_BREAK_SYSTEM_PACKAGES=1\nWORKDIR /app\n\nRUN apk add --update --no-cache python3 \\\n  py3-pip \\\n  openssl \\\n  tzdata \\\n  py3-psutil \\\n  py3-redis \\\n  py3-async-timeout \\\n&& pip3 install --upgrade pip \\\n  fastapi \\\n  uvicorn \\\n  aiodocker \\\n  docker\nRUN mkdir /app/modules\n\nCOPY docker-entrypoint.sh /app/\nCOPY main.py /app/main.py\nCOPY modules/ /app/modules/\n\nENTRYPOINT [\"/bin/sh\", \"/app/docker-entrypoint.sh\"]\nCMD [\"python\", \"main.py\"]"
  },
  {
    "path": "data/Dockerfiles/dockerapi/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\n`openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \\\n  -keyout /app/dockerapi_key.pem \\\n  -out /app/dockerapi_cert.pem \\\n  -subj /CN=dockerapi/O=mailcow \\\n  -addext subjectAltName=DNS:dockerapi`\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/dockerapi/main.py",
    "content": "import os\nimport sys\nimport uvicorn\nimport json\nimport uuid\nimport async_timeout\nimport asyncio\nimport aiodocker\nimport docker\nimport logging\nfrom logging.config import dictConfig\nfrom fastapi import FastAPI, Response, Request\nfrom modules.DockerApi import DockerApi\nfrom redis import asyncio as aioredis\nfrom contextlib import asynccontextmanager\n\ndockerapi = None\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n  global dockerapi\n\n  # Initialize a custom logger\n  logger = logging.getLogger(\"dockerapi\")\n  logger.setLevel(logging.INFO)\n  # Configure the logger to output logs to the terminal\n  handler = logging.StreamHandler()\n  handler.setLevel(logging.INFO)\n  formatter = logging.Formatter(\"%(levelname)s:     %(message)s\")\n  handler.setFormatter(formatter)\n  logger.addHandler(handler)\n\n  logger.info(\"Init APP\")\n\n  # Init redis client\n  if os.environ['REDIS_SLAVEOF_IP'] != \"\":\n    redis_client = redis = await aioredis.from_url(f\"redis://{os.environ['REDIS_SLAVEOF_IP']}:{os.environ['REDIS_SLAVEOF_PORT']}/0\", password=os.environ['REDISPASS'])\n  else:\n    redis_client = redis = await aioredis.from_url(\"redis://redis-mailcow:6379/0\", password=os.environ['REDISPASS'])\n\n  # Init docker clients\n  sync_docker_client = docker.DockerClient(base_url='unix://var/run/docker.sock', version='auto')\n  async_docker_client = aiodocker.Docker(url='unix:///var/run/docker.sock')\n\n  dockerapi = DockerApi(redis_client, sync_docker_client, async_docker_client, logger)\n\n  logger.info(\"Subscribe to redis channel\")\n  # Subscribe to redis channel\n  dockerapi.pubsub = redis.pubsub()\n  await dockerapi.pubsub.subscribe(\"MC_CHANNEL\")\n  asyncio.create_task(handle_pubsub_messages(dockerapi.pubsub))\n\n\n  yield\n\n  # Close docker connections\n  dockerapi.sync_docker_client.close()\n  await dockerapi.async_docker_client.close()\n\n  # Close redis\n  await dockerapi.pubsub.unsubscribe(\"MC_CHANNEL\")\n  await dockerapi.redis_client.close()\n\napp = FastAPI(lifespan=lifespan)\n\n# Define Routes\n@app.get(\"/host/stats\")\nasync def get_host_update_stats():\n  global dockerapi\n\n  if dockerapi.host_stats_isUpdating == False:\n    asyncio.create_task(dockerapi.get_host_stats())\n    dockerapi.host_stats_isUpdating = True\n\n  while True:\n    if await dockerapi.redis_client.exists('host_stats'):\n      break\n    await asyncio.sleep(1.5)\n\n  stats = json.loads(await dockerapi.redis_client.get('host_stats'))\n  return Response(content=json.dumps(stats, indent=4), media_type=\"application/json\")\n\n@app.get(\"/containers/{container_id}/json\")\nasync def get_container(container_id : str):\n  global dockerapi\n\n  if container_id and container_id.isalnum():\n    try:\n      for container in (await dockerapi.async_docker_client.containers.list()):\n        if container._id == container_id:\n          container_info = await container.show()\n          return Response(content=json.dumps(container_info, indent=4), media_type=\"application/json\")\n\n      res = {\n        \"type\": \"danger\",\n        \"msg\": \"no container found\"\n      }\n      return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n    except Exception as e:\n      res = {\n        \"type\": \"danger\",\n        \"msg\": str(e)\n      }\n      return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  else:\n    res = {\n      \"type\": \"danger\",\n      \"msg\": \"no or invalid id defined\"\n    }\n    return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n\n@app.get(\"/containers/json\")\nasync def get_containers(all: bool = False):\n  global dockerapi\n\n  containers = {}\n  try:\n    for container in (await dockerapi.async_docker_client.containers.list(all=all)):\n      container_info = await container.show()\n      containers.update({container_info['Id']: container_info})\n    return Response(content=json.dumps(containers, indent=4), media_type=\"application/json\")\n  except Exception as e:\n    res = {\n      \"type\": \"danger\",\n      \"msg\": str(e)\n    }\n    return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n\n@app.post(\"/containers/{container_id}/{post_action}\")\nasync def post_containers(container_id : str, post_action : str, request: Request):\n  global dockerapi\n\n  try:\n    request_json = await request.json()\n  except Exception as err:\n    request_json = {}\n\n  if container_id and container_id.isalnum() and post_action:\n    try:\n      \"\"\"Dispatch container_post api call\"\"\"\n      if post_action == 'exec':\n        if not request_json or not 'cmd' in request_json:\n          res = {\n            \"type\": \"danger\",\n            \"msg\": \"cmd is missing\"\n          }\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n        if not request_json or not 'task' in request_json:\n          res = {\n            \"type\": \"danger\",\n            \"msg\": \"task is missing\"\n          }\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n\n        api_call_method_name = '__'.join(['container_post', str(post_action), str(request_json['cmd']), str(request_json['task']) ])\n      else:\n        api_call_method_name = '__'.join(['container_post', str(post_action) ])\n\n      api_call_method = getattr(dockerapi, api_call_method_name, lambda container_id: Response(content=json.dumps({'type': 'danger', 'msg':'container_post - unknown api call' }, indent=4), media_type=\"application/json\"))\n\n      dockerapi.logger.info(\"api call: %s, container_id: %s\" % (api_call_method_name, container_id))\n      return api_call_method(request_json, container_id=container_id)\n    except Exception as e:\n      dockerapi.logger.error(\"error - container_post: %s\" % str(e))\n      res = {\n        \"type\": \"danger\",\n        \"msg\": str(e)\n      }\n      return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n\n  else:\n    res = {\n      \"type\": \"danger\",\n      \"msg\": \"invalid container id or missing action\"\n    }\n    return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n\n@app.post(\"/container/{container_id}/stats/update\")\nasync def post_container_update_stats(container_id : str):\n  global dockerapi\n\n  # start update task for container if no task is running\n  if container_id not in dockerapi.containerIds_to_update:\n    asyncio.create_task(dockerapi.get_container_stats(container_id))\n    dockerapi.containerIds_to_update.append(container_id)\n\n  while True:\n    if await dockerapi.redis_client.exists(container_id + '_stats'):\n      break\n    await asyncio.sleep(1.5)\n\n  stats = json.loads(await dockerapi.redis_client.get(container_id + '_stats'))\n  return Response(content=json.dumps(stats, indent=4), media_type=\"application/json\")\n\n\n# PubSub Handler\nasync def handle_pubsub_messages(channel: aioredis.client.PubSub):\n  global dockerapi\n\n  while True:\n    try:\n      async with async_timeout.timeout(60):\n        message = await channel.get_message(ignore_subscribe_messages=True, timeout=30)\n        if message is not None:\n          # Parse message\n          data_json = json.loads(message['data'].decode('utf-8'))\n          dockerapi.logger.info(f\"PubSub Received - {json.dumps(data_json)}\")\n\n          # Handle api_call\n          if 'api_call' in data_json:\n            # api_call: container_post\n            if data_json['api_call'] == \"container_post\":\n              if 'post_action' in data_json and 'container_name' in data_json:\n                try:\n                  \"\"\"Dispatch container_post api call\"\"\"\n                  request_json = {}\n                  if data_json['post_action'] == 'exec':\n                    if 'request' in data_json:\n                      request_json = data_json['request']\n                      if 'cmd' in request_json:\n                        if 'task' in request_json:\n                          api_call_method_name = '__'.join(['container_post', str(data_json['post_action']), str(request_json['cmd']), str(request_json['task']) ])\n                        else:\n                          dockerapi.logger.error(\"api call: task missing\")\n                      else:\n                        dockerapi.logger.error(\"api call: cmd missing\")\n                    else:\n                      dockerapi.logger.error(\"api call: request missing\")\n                  else:\n                    api_call_method_name = '__'.join(['container_post', str(data_json['post_action'])])\n\n                  if api_call_method_name:\n                    api_call_method = getattr(dockerapi, api_call_method_name)\n                    if api_call_method:\n                      dockerapi.logger.info(\"api call: %s, container_name: %s\" % (api_call_method_name, data_json['container_name']))\n                      api_call_method(request_json, container_name=data_json['container_name'])\n                    else:\n                      dockerapi.logger.error(\"api call not found: %s, container_name: %s\" % (api_call_method_name, data_json['container_name']))\n                except Exception as e:\n                  dockerapi.logger.error(\"container_post: %s\" % str(e))\n              else:\n                dockerapi.logger.error(\"api call: missing container_name, post_action or request\")\n            else:\n              dockerapi.logger.error(\"Unknown PubSub received - %s\" % json.dumps(data_json))\n          else:\n            dockerapi.logger.error(\"Unknown PubSub received - %s\" % json.dumps(data_json))\n\n        await asyncio.sleep(0.0)\n    except asyncio.TimeoutError:\n      pass\n\nif __name__ == '__main__':\n  uvicorn.run(\n    app,\n    host=\"0.0.0.0\",\n    port=443,\n    ssl_certfile=\"/app/dockerapi_cert.pem\",\n    ssl_keyfile=\"/app/dockerapi_key.pem\",\n    log_level=\"info\",\n    loop=\"none\"\n  )\n"
  },
  {
    "path": "data/Dockerfiles/dockerapi/modules/DockerApi.py",
    "content": "import psutil\nimport sys\nimport os\nimport re\nimport time\nimport json\nimport asyncio\nimport platform\nfrom datetime import datetime\nfrom fastapi import FastAPI, Response, Request\n\nclass DockerApi:\n  def __init__(self, redis_client, sync_docker_client, async_docker_client, logger):\n    self.redis_client = redis_client\n    self.sync_docker_client = sync_docker_client\n    self.async_docker_client = async_docker_client\n    self.logger = logger\n\n    self.host_stats_isUpdating = False\n    self.containerIds_to_update = []\n\n  # api call: container_post - post_action: stop\n  def container_post__stop(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(all=True, filters=filters):\n      container.stop()\n\n    res = { 'type': 'success', 'msg': 'command completed successfully'}\n    return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: start\n  def container_post__start(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(all=True, filters=filters):\n      container.start()\n\n    res = { 'type': 'success', 'msg': 'command completed successfully'}\n    return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: restart\n  def container_post__restart(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(all=True, filters=filters):\n      container.restart()\n\n    res = { 'type': 'success', 'msg': 'command completed successfully'}\n    return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: top\n  def container_post__top(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(all=True, filters=filters):\n      res = { 'type': 'success', 'msg': container.top()}\n      return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: stats\n  def container_post__stats(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(all=True, filters=filters):\n      for stat in container.stats(decode=True, stream=True):\n        res = { 'type': 'success', 'msg': stat}\n        return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: mailq - task: delete\n  def container_post__exec__mailq__delete(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'items' in request_json:\n      r = re.compile(\"^[0-9a-fA-F]+$\")\n      filtered_qids = filter(r.match, request_json['items'])\n      if filtered_qids:\n        flagged_qids = ['-d %s' % i for i in filtered_qids]\n        sanitized_string = str(' '.join(flagged_qids))\n        for container in self.sync_docker_client.containers.list(filters=filters):\n          postsuper_r = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/postsuper \" + sanitized_string])\n          return self.exec_run_handler('generic', postsuper_r)\n  # api call: container_post - post_action: exec - cmd: mailq - task: hold\n  def container_post__exec__mailq__hold(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'items' in request_json:\n      r = re.compile(\"^[0-9a-fA-F]+$\")\n      filtered_qids = filter(r.match, request_json['items'])\n      if filtered_qids:\n        flagged_qids = ['-h %s' % i for i in filtered_qids]\n        sanitized_string = str(' '.join(flagged_qids))\n        for container in self.sync_docker_client.containers.list(filters=filters):\n          postsuper_r = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/postsuper \" + sanitized_string])\n          return self.exec_run_handler('generic', postsuper_r)\n  # api call: container_post - post_action: exec - cmd: mailq - task: cat\n  def container_post__exec__mailq__cat(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'items' in request_json:\n      r = re.compile(\"^[0-9a-fA-F]+$\")\n      filtered_qids = filter(r.match, request_json['items'])\n      if filtered_qids:\n        sanitized_string = str(' '.join(filtered_qids))\n\n        for container in self.sync_docker_client.containers.list(filters=filters):\n          postcat_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/postcat -q \" + sanitized_string], user='postfix')\n        if not postcat_return:\n          postcat_return = 'err: invalid'\n        return self.exec_run_handler('utf8_text_only', postcat_return)\n  # api call: container_post - post_action: exec - cmd: mailq - task: unhold\n  def container_post__exec__mailq__unhold(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'items' in request_json:\n      r = re.compile(\"^[0-9a-fA-F]+$\")\n      filtered_qids = filter(r.match, request_json['items'])\n      if filtered_qids:\n        flagged_qids = ['-H %s' % i for i in filtered_qids]\n        sanitized_string = str(' '.join(flagged_qids))\n        for container in self.sync_docker_client.containers.list(filters=filters):\n          postsuper_r = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/postsuper \" + sanitized_string])\n          return self.exec_run_handler('generic', postsuper_r)\n  # api call: container_post - post_action: exec - cmd: mailq - task: deliver\n  def container_post__exec__mailq__deliver(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'items' in request_json:\n      r = re.compile(\"^[0-9a-fA-F]+$\")\n      filtered_qids = filter(r.match, request_json['items'])\n      if filtered_qids:\n        flagged_qids = ['-i %s' % i for i in filtered_qids]\n        for container in self.sync_docker_client.containers.list(filters=filters):\n          for i in flagged_qids:\n            postqueue_r = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/postqueue \" + i], user='postfix')\n            # todo: check each exit code\n          res = { 'type': 'success', 'msg': 'Scheduled immediate delivery'}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: mailq - task: list\n  def container_post__exec__mailq__list(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      mailq_return = container.exec_run([\"/usr/sbin/postqueue\", \"-j\"], user='postfix')\n      return self.exec_run_handler('utf8_text_only', mailq_return)\n  # api call: container_post - post_action: exec - cmd: mailq - task: flush\n  def container_post__exec__mailq__flush(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      postqueue_r = container.exec_run([\"/usr/sbin/postqueue\", \"-f\"], user='postfix')\n      return self.exec_run_handler('generic', postqueue_r)\n  # api call: container_post - post_action: exec - cmd: mailq - task: super_delete\n  def container_post__exec__mailq__super_delete(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      postsuper_r = container.exec_run([\"/usr/sbin/postsuper\", \"-d\", \"ALL\"])\n      return self.exec_run_handler('generic', postsuper_r)\n  # api call: container_post - post_action: exec - cmd: system - task: fts_rescan\n  def container_post__exec__system__fts_rescan(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'username' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        rescan_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/bin/doveadm fts rescan -u '\" + request_json['username'].replace(\"'\", \"'\\\\''\") + \"'\"], user='vmail')\n        if rescan_return.exit_code == 0:\n          res = { 'type': 'success', 'msg': 'fts_rescan: rescan triggered'}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n        else:\n          res = { 'type': 'warning', 'msg': 'fts_rescan error'}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n    if 'all' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        rescan_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/bin/doveadm fts rescan -A\"], user='vmail')\n        if rescan_return.exit_code == 0:\n          res = { 'type': 'success', 'msg': 'fts_rescan: rescan triggered'}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n        else:\n          res = { 'type': 'warning', 'msg': 'fts_rescan error'}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: system - task: df\n  def container_post__exec__system__df(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'dir' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        df_return = container.exec_run([\"/bin/bash\", \"-c\", \"/bin/df -H '\" + request_json['dir'].replace(\"'\", \"'\\\\''\") + \"' | /usr/bin/tail -n1 | /usr/bin/tr -s [:blank:] | /usr/bin/tr ' ' ','\"], user='nobody')\n        if df_return.exit_code == 0:\n          return df_return.output.decode('utf-8').rstrip()\n        else:\n          return \"0,0,0,0,0,0\"\n  # api call: container_post - post_action: exec - cmd: system - task: mysql_upgrade\n  def container_post__exec__system__mysql_upgrade(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      sql_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/bin/mysql_upgrade -uroot -p'\" + os.environ['DBROOT'].replace(\"'\", \"'\\\\''\") + \"'\\n\"], user='mysql')\n      if sql_return.exit_code == 0:\n        matched = False\n        for line in sql_return.output.decode('utf-8').split(\"\\n\"):\n          if 'is already upgraded to' in line:\n            matched = True\n        if matched:\n          res = { 'type': 'success', 'msg':'mysql_upgrade: already upgraded', 'text': sql_return.output.decode('utf-8')}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n        else:\n          container.restart()\n          res = { 'type': 'warning', 'msg':'mysql_upgrade: upgrade was applied', 'text': sql_return.output.decode('utf-8')}\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n      else:\n        res = { 'type': 'error', 'msg': 'mysql_upgrade: error running command', 'text': sql_return.output.decode('utf-8')}\n        return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: system - task: mysql_tzinfo_to_sql\n  def container_post__exec__system__mysql_tzinfo_to_sql(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      sql_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/bin/mysql_tzinfo_to_sql /usr/share/zoneinfo | /bin/sed 's/Local time zone must be set--see zic manual page/FCTY/' | /usr/bin/mysql -uroot -p'\" + os.environ['DBROOT'].replace(\"'\", \"'\\\\''\") + \"' mysql \\n\"], user='mysql')\n      if sql_return.exit_code == 0:\n        res = { 'type': 'info', 'msg': 'mysql_tzinfo_to_sql: command completed successfully', 'text': sql_return.output.decode('utf-8')}\n        return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n      else:\n        res = { 'type': 'error', 'msg': 'mysql_tzinfo_to_sql: error running command', 'text': sql_return.output.decode('utf-8')}\n        return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: reload - task: dovecot\n  def container_post__exec__reload__dovecot(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      reload_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/dovecot reload\"])\n      return self.exec_run_handler('generic', reload_return)\n  # api call: container_post - post_action: exec - cmd: reload - task: postfix\n  def container_post__exec__reload__postfix(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      reload_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/sbin/postfix reload\"])\n      return self.exec_run_handler('generic', reload_return)\n  # api call: container_post - post_action: exec - cmd: reload - task: nginx\n  def container_post__exec__reload__nginx(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      reload_return = container.exec_run([\"/bin/sh\", \"-c\", \"/usr/sbin/nginx -s reload\"])\n      return self.exec_run_handler('generic', reload_return)\n  # api call: container_post - post_action: exec - cmd: sieve - task: list\n  def container_post__exec__sieve__list(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'username' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        sieve_return = container.exec_run([\"/bin/bash\", \"-c\", \"/usr/bin/doveadm sieve list -u '\" + request_json['username'].replace(\"'\", \"'\\\\''\") + \"'\"])\n        return self.exec_run_handler('utf8_text_only', sieve_return)\n  # api call: container_post - post_action: exec - cmd: sieve - task: print\n  def container_post__exec__sieve__print(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'username' in request_json and 'script_name' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        cmd = [\"/bin/bash\", \"-c\", \"/usr/bin/doveadm sieve get -u '\" + request_json['username'].replace(\"'\", \"'\\\\''\") + \"' '\" + request_json['script_name'].replace(\"'\", \"'\\\\''\") + \"'\"]\n        sieve_return = container.exec_run(cmd)\n        return self.exec_run_handler('utf8_text_only', sieve_return)\n  # api call: container_post - post_action: exec - cmd: maildir - task: cleanup\n  def container_post__exec__maildir__cleanup(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'maildir' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        sane_name = re.sub(r'\\W+', '', request_json['maildir'])\n        vmail_name = request_json['maildir'].replace(\"'\", \"'\\\\''\")\n        cmd_vmail = \"if [[ -d '/var/vmail/\" + vmail_name + \"' ]]; then /bin/mv '/var/vmail/\" + vmail_name + \"' '/var/vmail/_garbage/\" + str(int(time.time())) + \"_\" + sane_name + \"'; fi\"\n        index_name = request_json['maildir'].split(\"/\")\n        if len(index_name) > 1:\n          index_name = index_name[1].replace(\"'\", \"'\\\\''\") + \"@\" + index_name[0].replace(\"'\", \"'\\\\''\")\n          cmd_vmail_index = \"if [[ -d '/var/vmail_index/\" + index_name + \"' ]]; then /bin/mv '/var/vmail_index/\" + index_name + \"' '/var/vmail/_garbage/\" + str(int(time.time())) + \"_\" + sane_name + \"_index'; fi\"\n          cmd = [\"/bin/bash\", \"-c\", cmd_vmail + \" && \" + cmd_vmail_index]\n        else:\n          cmd = [\"/bin/bash\", \"-c\", cmd_vmail]\n        maildir_cleanup = container.exec_run(cmd, user='vmail')\n        return self.exec_run_handler('generic', maildir_cleanup)\n  # api call: container_post - post_action: exec - cmd: maildir - task: move\n  def container_post__exec__maildir__move(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'old_maildir' in request_json and 'new_maildir' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        vmail_name = request_json['old_maildir'].replace(\"'\", \"'\\\\''\")\n        new_vmail_name = request_json['new_maildir'].replace(\"'\", \"'\\\\''\")\n        cmd_vmail = f\"if [[ -d '/var/vmail/{vmail_name}' ]]; then /bin/mv '/var/vmail/{vmail_name}' '/var/vmail/{new_vmail_name}'; fi\"\n\n        index_name = request_json['old_maildir'].split(\"/\")\n        new_index_name = request_json['new_maildir'].split(\"/\")\n        if len(index_name) > 1 and len(new_index_name) > 1:\n          index_name = index_name[1].replace(\"'\", \"'\\\\''\") + \"@\" + index_name[0].replace(\"'\", \"'\\\\''\")\n          new_index_name = new_index_name[1].replace(\"'\", \"'\\\\''\") + \"@\" + new_index_name[0].replace(\"'\", \"'\\\\''\")\n          cmd_vmail_index = f\"if [[ -d '/var/vmail_index/{index_name}' ]]; then /bin/mv '/var/vmail_index/{index_name}' '/var/vmail_index/{new_index_name}_index'; fi\"\n          cmd = [\"/bin/bash\", \"-c\", cmd_vmail + \" && \" + cmd_vmail_index]\n        else:\n          cmd = [\"/bin/bash\", \"-c\", cmd_vmail]\n        maildir_move = container.exec_run(cmd, user='vmail')\n        return self.exec_run_handler('generic', maildir_move)\n  # api call: container_post - post_action: exec - cmd: rspamd - task: worker_password\n  def container_post__exec__rspamd__worker_password(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'raw' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        cmd = \"/usr/bin/rspamadm pw -e -p '\" + request_json['raw'].replace(\"'\", \"'\\\\''\") + \"' 2> /dev/null\"\n        cmd_response = self.exec_cmd_container(container, cmd, user=\"_rspamd\")\n\n        matched = False\n        for line in cmd_response.split(\"\\n\"):\n          if '$2$' in line:\n            hash = line.strip()\n            hash_out = re.search(r'\\$2\\$.+$', hash).group(0)\n            rspamd_passphrase_hash = re.sub(r'[^0-9a-zA-Z\\$]+', '', hash_out.rstrip())\n            rspamd_password_filename = \"/etc/rspamd/override.d/worker-controller-password.inc\"\n            cmd = '''/bin/echo 'enable_password = \"%s\";' > %s && cat %s''' % (rspamd_passphrase_hash, rspamd_password_filename, rspamd_password_filename)\n            cmd_response = self.exec_cmd_container(container, cmd, user=\"_rspamd\")\n            if rspamd_passphrase_hash.startswith(\"$2$\") and rspamd_passphrase_hash in cmd_response:\n              container.restart()\n              matched = True\n        if matched:\n          res = { 'type': 'success', 'msg': 'command completed successfully' }\n          self.logger.info('success changing Rspamd password')\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n        else:\n          self.logger.error('failed changing Rspamd password')\n          res = { 'type': 'danger', 'msg': 'command did not complete' }\n          return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: sogo - task: rename\n  def container_post__exec__sogo__rename_user(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    if 'old_username' in request_json and 'new_username' in request_json:\n      for container in self.sync_docker_client.containers.list(filters=filters):\n        old_username = request_json['old_username'].replace(\"'\", \"'\\\\''\")\n        new_username = request_json['new_username'].replace(\"'\", \"'\\\\''\")\n\n        sogo_return = container.exec_run([\"/bin/bash\", \"-c\", f\"sogo-tool rename-user '{old_username}' '{new_username}'\"], user='sogo')\n        return self.exec_run_handler('generic', sogo_return)\n  # api call: container_post - post_action: exec - cmd: doveadm - task: get_acl\n  def container_post__exec__doveadm__get_acl(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      id = request_json['id'].replace(\"'\", \"'\\\\''\")\n\n      shared_folders = container.exec_run([\"/bin/bash\", \"-c\", f\"doveadm mailbox list -u '{id}'\"])\n      shared_folders = shared_folders.output.decode('utf-8')\n      shared_folders = shared_folders.splitlines()\n\n      formatted_acls = []\n      mailbox_seen = []\n      for shared_folder in shared_folders:\n        if \"Shared\" not in shared_folder:\n          mailbox = shared_folder.replace(\"'\", \"'\\\\''\")\n          if mailbox in mailbox_seen:\n            continue\n\n          acls = container.exec_run([\"/bin/bash\", \"-c\", f\"doveadm acl get -u '{id}' '{mailbox}'\"])\n          acls = acls.output.decode('utf-8').strip().splitlines()\n          if len(acls) >= 2:\n            for acl in acls[1:]:\n              user_id, rights = acl.split(maxsplit=1)\n              user_id = user_id.split('=')[1]\n              mailbox_seen.append(mailbox)\n              formatted_acls.append({ 'user': id, 'id': user_id, 'mailbox': mailbox, 'rights': rights.split() })\n        elif \"Shared\" in shared_folder and \"/\" in shared_folder:\n          shared_folder = shared_folder.split(\"/\")\n          if len(shared_folder) < 3:\n            continue\n\n          user = shared_folder[1].replace(\"'\", \"'\\\\''\")\n          mailbox = '/'.join(shared_folder[2:]).replace(\"'\", \"'\\\\''\")\n          if mailbox in mailbox_seen:\n            continue\n\n          acls = container.exec_run([\"/bin/bash\", \"-c\", f\"doveadm acl get -u '{user}' '{mailbox}'\"])\n          acls = acls.output.decode('utf-8').strip().splitlines()\n          if len(acls) >= 2:\n            for acl in acls[1:]:\n              user_id, rights = acl.split(maxsplit=1)\n              user_id = user_id.split('=')[1].replace(\"'\", \"'\\\\''\")\n              if user_id == id and mailbox not in mailbox_seen:\n                mailbox_seen.append(mailbox)\n                formatted_acls.append({ 'user': user, 'id': id, 'mailbox': mailbox, 'rights': rights.split() })\n\n      return Response(content=json.dumps(formatted_acls, indent=4), media_type=\"application/json\")\n  # api call: container_post - post_action: exec - cmd: doveadm - task: delete_acl\n  def container_post__exec__doveadm__delete_acl(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      user = request_json['user'].replace(\"'\", \"'\\\\''\")\n      mailbox = request_json['mailbox'].replace(\"'\", \"'\\\\''\")\n      id = request_json['id'].replace(\"'\", \"'\\\\''\")\n\n      if user and mailbox and id:\n        acl_delete_return = container.exec_run([\"/bin/bash\", \"-c\", f\"doveadm acl delete -u '{user}' '{mailbox}' 'user={id}'\"])\n        return self.exec_run_handler('generic', acl_delete_return)\n  # api call: container_post - post_action: exec - cmd: doveadm - task: set_acl\n  def container_post__exec__doveadm__set_acl(self, request_json, **kwargs):\n    if 'container_id' in kwargs:\n      filters = {\"id\": kwargs['container_id']}\n    elif 'container_name' in kwargs:\n      filters = {\"name\": kwargs['container_name']}\n\n    for container in self.sync_docker_client.containers.list(filters=filters):\n      user = request_json['user'].replace(\"'\", \"'\\\\''\")\n      mailbox = request_json['mailbox'].replace(\"'\", \"'\\\\''\")\n      id = request_json['id'].replace(\"'\", \"'\\\\''\")\n      rights = \"\"\n\n      available_rights = [\n        \"admin\",\n        \"create\",\n        \"delete\",\n        \"expunge\",\n        \"insert\",\n        \"lookup\",\n        \"post\",\n        \"read\",\n        \"write\",\n        \"write-deleted\",\n        \"write-seen\"\n      ]\n      for right in request_json['rights']:\n        right = right.replace(\"'\", \"'\\\\''\").lower()\n        if right in available_rights:\n          rights += right + \" \"\n\n      if user and mailbox and id and rights:\n        acl_set_return = container.exec_run([\"/bin/bash\", \"-c\", f\"doveadm acl set -u '{user}' '{mailbox}' 'user={id}' {rights}\"])\n        return self.exec_run_handler('generic', acl_set_return)\n\n\n  # Collect host stats\n  async def get_host_stats(self, wait=5):\n    try:\n      system_time = datetime.now()\n      host_stats = {\n        \"cpu\": {\n          \"cores\": psutil.cpu_count(),\n          \"usage\": psutil.cpu_percent()\n        },\n        \"memory\": {\n          \"total\": psutil.virtual_memory().total,\n          \"usage\": psutil.virtual_memory().percent,\n          \"swap\": psutil.swap_memory()\n        },\n        \"uptime\": time.time() - psutil.boot_time(),\n        \"system_time\": system_time.strftime(\"%d.%m.%Y %H:%M:%S\"),\n        \"architecture\": platform.machine()\n      }\n\n      await self.redis_client.set('host_stats', json.dumps(host_stats), ex=10)\n    except Exception as e:\n      res = {\n        \"type\": \"danger\",\n        \"msg\": str(e)\n      }\n\n    await asyncio.sleep(wait)\n    self.host_stats_isUpdating = False\n  # Collect container stats\n  async def get_container_stats(self, container_id, wait=5, stop=False):\n    if container_id and container_id.isalnum():\n      try:\n        for container in (await self.async_docker_client.containers.list()):\n          if container._id == container_id:\n            res = await container.stats(stream=False)\n\n            if await self.redis_client.exists(container_id + '_stats'):\n              stats = json.loads(await self.redis_client.get(container_id + '_stats'))\n            else:\n              stats = []\n            stats.append(res[0])\n            if len(stats) > 3:\n              del stats[0]\n            await self.redis_client.set(container_id + '_stats', json.dumps(stats), ex=60)\n      except Exception as e:\n        res = {\n          \"type\": \"danger\",\n          \"msg\": str(e)\n        }\n    else:\n      res = {\n        \"type\": \"danger\",\n        \"msg\": \"no or invalid id defined\"\n      }\n\n    await asyncio.sleep(wait)\n    if stop == True:\n      # update task was called second time, stop\n      self.containerIds_to_update.remove(container_id)\n    else:\n      # call update task a second time\n      await self.get_container_stats(container_id, wait=0, stop=True)\n\n  def exec_cmd_container(self, container, cmd, user, timeout=2, shell_cmd=\"/bin/bash\"):\n    def recv_socket_data(c_socket, timeout):\n      c_socket.setblocking(0)\n      total_data=[]\n      data=''\n      begin=time.time()\n      while True:\n        if total_data and time.time()-begin > timeout:\n          break\n        elif time.time()-begin > timeout*2:\n          break\n        try:\n          data = c_socket.recv(8192)\n          if data:\n            total_data.append(data.decode('utf-8'))\n            #change the beginning time for measurement\n            begin=time.time()\n          else:\n            #sleep for sometime to indicate a gap\n            time.sleep(0.1)\n            break\n        except:\n          pass\n      return ''.join(total_data)\n\n    try :\n      socket = container.exec_run([shell_cmd], stdin=True, socket=True, user=user).output._sock\n      if not cmd.endswith(\"\\n\"):\n        cmd = cmd + \"\\n\"\n      socket.send(cmd.encode('utf-8'))\n      data = recv_socket_data(socket, timeout)\n      socket.close()\n      return data\n    except Exception as e:\n      self.logger.error(\"error - exec_cmd_container: %s\" % str(e))\n      traceback.print_exc(file=sys.stdout)\n\n  def exec_run_handler(self, type, output):\n    if type == 'generic':\n      if output.exit_code == 0:\n        res = { 'type': 'success', 'msg': 'command completed successfully' }\n        return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n      else:\n        res = { 'type': 'danger', 'msg': 'command failed: ' + output.output.decode('utf-8') }\n        return Response(content=json.dumps(res, indent=4), media_type=\"application/json\")\n    if type == 'utf8_text_only':\n      return Response(content=output.output.decode('utf-8'), media_type=\"text/plain\")\n"
  },
  {
    "path": "data/Dockerfiles/dockerapi/modules/__init__.py",
    "content": ""
  },
  {
    "path": "data/Dockerfiles/dovecot/Dockerfile",
    "content": "FROM alpine:3.21\n\nLABEL maintainer=\"The Infrastructure Company GmbH <info@servercow.de>\"\n\n# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$\nARG GOSU_VERSION=1.19\n\nENV LANG=C.UTF-8\nENV LC_ALL=C.UTF-8\n\n# Add groups and users before installing Dovecot to not break compatibility\nRUN addgroup -g 5000 vmail \\\n  && addgroup -g 401 dovecot \\\n  && addgroup -g 402 dovenull \\\n  && sed -i \"s/999/99/\" /etc/group \\\n  && addgroup -g 999 sogo \\\n  && addgroup nobody sogo \\\n  && adduser -D -u 5000 -G vmail -h /var/vmail vmail \\\n  && adduser -D -G dovecot -u 401 -h /dev/null -s /sbin/nologin dovecot \\\n  && adduser -D -G dovenull -u 402 -h /dev/null -s /sbin/nologin dovenull \\\n  && apk add --no-cache --update \\\n  bash \\\n  bind-tools \\\n  findutils \\\n  envsubst \\\n  ca-certificates \\\n  curl \\\n  coreutils \\\n  jq \\\n  lua \\\n  lua-cjson \\\n  lua-socket \\\n  lua-sql-mysql \\\n  lua5.3-sql-mysql \\\n  icu-data-full \\\n  mariadb-connector-c \\\n  lua-sec \\\n  mariadb-dev \\\n  glib-dev \\\n  gcompat \\\n  mariadb-client \\\n  perl \\\n  perl-dev \\\n  perl-ntlm \\\n  perl-cgi \\\n  perl-crypt-openssl-rsa \\\n  perl-utils \\\n  perl-crypt-ssleay \\\n  perl-data-uniqid \\\n  perl-dbd-mysql \\\n  perl-dbi \\\n  perl-digest-hmac \\\n  perl-dist-checkconflicts \\\n  perl-encode-imaputf7 \\\n  perl-file-copy-recursive \\\n  perl-file-tail \\\n  perl-io-socket-inet6 \\\n  perl-io-gzip \\\n  perl-io-socket-ssl \\\n  perl-io-tee \\\n  perl-ipc-run \\\n  perl-json-webtoken \\\n  perl-mail-imapclient \\\n  perl-module-implementation \\\n  perl-module-scandeps \\\n  perl-net-ssleay \\\n  perl-package-stash \\\n  perl-package-stash-xs \\\n  perl-par-packer \\\n  perl-parse-recdescent \\\n  perl-lockfile-simple \\\n  libproc2 \\\n  perl-readonly \\\n  perl-regexp-common \\\n  perl-sys-meminfo \\\n  perl-term-readkey \\\n  perl-test-deep \\\n  perl-test-fatal \\\n  perl-test-mockobject \\\n  perl-test-mock-guard \\\n  perl-test-pod \\\n  perl-test-requires \\\n  perl-test-simple \\\n  perl-test-warn \\\n  perl-try-tiny \\\n  perl-unicode-string \\\n  perl-proc-processtable \\\n  perl-app-cpanminus \\\n  procps \\\n  python3 \\\n  py3-mysqlclient \\\n  py3-html2text \\\n  py3-jinja2 \\\n  py3-redis \\\n  redis \\\n  syslog-ng \\\n  syslog-ng-redis \\\n  syslog-ng-json \\\n  supervisor \\\n  tzdata \\\n  wget \\\n  dovecot \\\n  dovecot-dev \\\n  dovecot-lmtpd \\\n  dovecot-lua \\\n  dovecot-ldap \\\n  dovecot-mysql \\\n  dovecot-sql \\\n  dovecot-submissiond \\\n  dovecot-pigeonhole-plugin \\\n  dovecot-pop3d \\\n  dovecot-fts-flatcurve \\\n  && arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \\\n  && wget -O /usr/local/bin/gosu \"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$arch\" \\\n  && chmod +x /usr/local/bin/gosu \\\n  && gosu nobody true\n\nCOPY trim_logs.sh /usr/local/bin/trim_logs.sh\nCOPY clean_q_aged.sh /usr/local/bin/clean_q_aged.sh\nCOPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf\nCOPY syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng-redis_slave.conf\nCOPY imapsync /usr/local/bin/imapsync\nCOPY imapsync_runner.pl /usr/local/bin/imapsync_runner.pl\nCOPY report-spam.sieve /usr/lib/dovecot/sieve/report-spam.sieve\nCOPY report-ham.sieve /usr/lib/dovecot/sieve/report-ham.sieve\nCOPY rspamd-pipe-ham /usr/lib/dovecot/sieve/rspamd-pipe-ham\nCOPY rspamd-pipe-spam /usr/lib/dovecot/sieve/rspamd-pipe-spam\nCOPY sa-rules.sh /usr/local/bin/sa-rules.sh\nCOPY maildir_gc.sh /usr/local/bin/maildir_gc.sh\nCOPY docker-entrypoint.sh /\nCOPY supervisord.conf /etc/supervisor/supervisord.conf\nCOPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh\nCOPY quarantine_notify.py /usr/local/bin/quarantine_notify.py\nCOPY quota_notify.py /usr/local/bin/quota_notify.py\nCOPY repl_health.sh /usr/local/bin/repl_health.sh\nCOPY optimize-fts.sh /usr/local/bin/optimize-fts.sh\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\nCMD [\"/usr/bin/supervisord\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/clean_q_aged.sh",
    "content": "#!/bin/bash\n\nsource /source_env.sh\n\nMAX_AGE=$(redis-cli --raw -h redis-mailcow -a ${REDISPASS} --no-auth-warning GET Q_MAX_AGE)\n\nif [[ -z ${MAX_AGE} ]]; then\n  echo \"Max age for quarantine items not defined\"\n  exit 1\nfi\n\nNUM_REGEXP='^[0-9]+$'\nif ! [[ ${MAX_AGE} =~ ${NUM_REGEXP} ]] ; then\n  echo \"Max age for quarantine items invalid\"\n  exit 1\nfi\n\nTO_DELETE=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT COUNT(id) FROM quarantine WHERE created < NOW() - INTERVAL ${MAX_AGE//[!0-9]/} DAY\" -BN)\nmariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"DELETE FROM quarantine WHERE created < NOW() - INTERVAL ${MAX_AGE//[!0-9]/} DAY\"\necho \"Deleted ${TO_DELETE} items from quarantine table (max age is ${MAX_AGE//[!0-9]/} days)\"\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/docker-entrypoint.sh",
    "content": "#!/bin/bash\nset -e\n\n# Wait for MySQL to warm-up\nwhile ! mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do\n  echo \"Waiting for database to come up...\"\n  sleep 2\ndone\n\nuntil dig +short mailcow.email > /dev/null; do\n  echo \"Waiting for DNS...\"\n  sleep 1\ndone\n\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  REDIS_CMDLINE=\"redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning\"\nelse\n  REDIS_CMDLINE=\"redis-cli -h redis -p 6379 -a ${REDISPASS} --no-auth-warning\"\nfi\n\nuntil [[ $(${REDIS_CMDLINE} PING) == \"PONG\" ]]; do\n  echo \"Waiting for Redis...\"\n  sleep 2\ndone\n\n${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null\n\n# Create missing directories\n[[ ! -d /etc/dovecot/sql/ ]] && mkdir -p /etc/dovecot/sql/\n[[ ! -d /etc/dovecot/auth/ ]] && mkdir -p /etc/dovecot/auth/\n[[ ! -d /etc/dovecot/conf.d/ ]] && mkdir -p /etc/dovecot/conf.d/\n[[ ! -d /var/vmail/_garbage ]] && mkdir -p /var/vmail/_garbage\n[[ ! -d /var/vmail/sieve ]] && mkdir -p /var/vmail/sieve\n[[ ! -d /etc/sogo ]] && mkdir -p /etc/sogo\n[[ ! -d /var/volatile ]] && mkdir -p /var/volatile\n\n# Set Dovecot sql config parameters, escape \" in db password\nDBPASS=$(echo ${DBPASS} | sed 's/\"/\\\\\"/g')\n\n# Create quota dict for Dovecot\nif [[ \"${MASTER}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  QUOTA_TABLE=quota2\nelse\n  QUOTA_TABLE=quota2replica\nfi\ncat <<EOF > /etc/dovecot/sql/dovecot-dict-sql-quota.conf\n# Autogenerated by mailcow\nconnect = \"host=/var/run/mysqld/mysqld.sock dbname=${DBNAME} user=${DBUSER} password=${DBPASS}\"\nmap {\n  pattern = priv/quota/storage\n  table = ${QUOTA_TABLE}\n  username_field = username\n  value_field = bytes\n}\nmap {\n  pattern = priv/quota/messages\n  table = ${QUOTA_TABLE}\n  username_field = username\n  value_field = messages\n}\nEOF\n\n# Create dict used for sieve pre and postfilters\ncat <<EOF > /etc/dovecot/sql/dovecot-dict-sql-sieve_before.conf\n# Autogenerated by mailcow\nconnect = \"host=/var/run/mysqld/mysqld.sock dbname=${DBNAME} user=${DBUSER} password=${DBPASS}\"\nmap {\n  pattern = priv/sieve/name/\\$script_name\n  table = sieve_before\n  username_field = username\n  value_field = id\n  fields {\n    script_name = \\$script_name\n  }\n}\nmap {\n  pattern = priv/sieve/data/\\$id\n  table = sieve_before\n  username_field = username\n  value_field = script_data\n  fields {\n    id = \\$id\n  }\n}\nEOF\n\ncat <<EOF > /etc/dovecot/sql/dovecot-dict-sql-sieve_after.conf\n# Autogenerated by mailcow\nconnect = \"host=/var/run/mysqld/mysqld.sock dbname=${DBNAME} user=${DBUSER} password=${DBPASS}\"\nmap {\n  pattern = priv/sieve/name/\\$script_name\n  table = sieve_after\n  username_field = username\n  value_field = id\n  fields {\n    script_name = \\$script_name\n  }\n}\nmap {\n  pattern = priv/sieve/data/\\$id\n  table = sieve_after\n  username_field = username\n  value_field = script_data\n  fields {\n    id = \\$id\n  }\n}\nEOF\n\necho -n ${ACL_ANYONE} > /etc/dovecot/acl_anyone\n\nif [[ \"${SKIP_FTS}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\necho -e \"\\e[33mDetecting SKIP_FTS=y... not enabling Flatcurve (FTS) then...\\e[0m\"\necho -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify listescape replication lazy_expunge' > /etc/dovecot/mail_plugins\necho -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify listescape replication mail_log' > /etc/dovecot/mail_plugins_imap\necho -n 'quota sieve acl zlib mail_crypt mail_crypt_acl notify listescape replication' > /etc/dovecot/mail_plugins_lmtp\nelse\necho -e \"\\e[32mDetecting SKIP_FTS=n... enabling Flatcurve (FTS)\\e[0m\"\necho -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify fts fts_flatcurve listescape replication lazy_expunge' > /etc/dovecot/mail_plugins\necho -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify mail_log fts fts_flatcurve listescape replication' > /etc/dovecot/mail_plugins_imap\necho -n 'quota sieve acl zlib mail_crypt mail_crypt_acl fts fts_flatcurve notify listescape replication' > /etc/dovecot/mail_plugins_lmtp\nfi\nchmod 644 /etc/dovecot/mail_plugins /etc/dovecot/mail_plugins_imap /etc/dovecot/mail_plugins_lmtp /templates/quarantine.tpl\n\ncat <<EOF > /etc/dovecot/sql/dovecot-dict-sql-userdb.conf\n# Autogenerated by mailcow\ndriver = mysql\nconnect = \"host=/var/run/mysqld/mysqld.sock dbname=${DBNAME} user=${DBUSER} password=${DBPASS}\"\nuser_query = SELECT CONCAT(JSON_UNQUOTE(JSON_VALUE(attributes, '$.mailbox_format')), mailbox_path_prefix, '%d/%n/${MAILDIR_SUB}:VOLATILEDIR=/var/volatile/%u:INDEX=/var/vmail_index/%u') AS mail, '%s' AS protocol, 5000 AS uid, 5000 AS gid, concat('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND (active = '1' OR active = '2')\niterate_query = SELECT username FROM mailbox WHERE active = '1' OR active = '2';\nEOF\n\n\n# Migrate old sieve_after file\n[[ -f /etc/dovecot/sieve_after ]] && mv /etc/dovecot/sieve_after /etc/dovecot/global_sieve_after\n# Create global sieve scripts\ncat /etc/dovecot/global_sieve_after > /var/vmail/sieve/global_sieve_after.sieve\ncat /etc/dovecot/global_sieve_before > /var/vmail/sieve/global_sieve_before.sieve\n\n# Check permissions of vmail/index/garbage directories.\n# Do not do this every start-up, it may take a very long time. So we use a stat check here.\nif [[ $(stat -c %U /var/vmail/) != \"vmail\" ]] ; then chown -R vmail:vmail /var/vmail ; fi\nif [[ $(stat -c %U /var/vmail/_garbage) != \"vmail\" ]] ; then chown -R vmail:vmail /var/vmail/_garbage ; fi\nif [[ $(stat -c %U /var/vmail_index) != \"vmail\" ]] ; then chown -R vmail:vmail /var/vmail_index ; fi\n\n# Cleanup random user maildirs\nrm -rf /var/vmail/mailcow.local/*\n# Cleanup PIDs\n[[ -f /tmp/quarantine_notify.pid ]] && rm /tmp/quarantine_notify.pid\n\n# create sni configuration\necho \"\" > /etc/dovecot/sni.conf\nfor cert_dir in /etc/ssl/mail/*/ ; do\n  if [[ ! -f ${cert_dir}domains ]] || [[ ! -f ${cert_dir}cert.pem ]] || [[ ! -f ${cert_dir}key.pem ]]; then\n    continue\n  fi\n  domains=($(cat ${cert_dir}domains))\n  for domain in ${domains[@]}; do\n    echo 'local_name '${domain}' {' >> /etc/dovecot/sni.conf;\n    echo '  ssl_cert = <'${cert_dir}'cert.pem' >> /etc/dovecot/sni.conf;\n    echo '  ssl_key = <'${cert_dir}'key.pem' >> /etc/dovecot/sni.conf;\n    echo '}' >> /etc/dovecot/sni.conf;\n  done\ndone\n\n# Create random master for SOGo sieve features\nRAND_USER=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 16 | head -n 1)\nRAND_PASS=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 24 | head -n 1)\n\nif [[ ! -z ${DOVECOT_MASTER_USER} ]] && [[ ! -z ${DOVECOT_MASTER_PASS} ]]; then\n  RAND_USER=${DOVECOT_MASTER_USER}\n  RAND_PASS=${DOVECOT_MASTER_PASS}\nfi\necho ${RAND_USER}@mailcow.local:{SHA1}$(echo -n ${RAND_PASS} | sha1sum | awk '{print $1}'):::::: > /etc/dovecot/dovecot-master.passwd\necho ${RAND_USER}@mailcow.local::5000:5000:::: > /etc/dovecot/dovecot-master.userdb\necho ${RAND_USER}@mailcow.local:${RAND_PASS} > /etc/sogo/sieve.creds\n\nif [[ -z ${MAILDIR_SUB} ]]; then\n  MAILDIR_SUB_SHARED=\nelse\n  MAILDIR_SUB_SHARED=/${MAILDIR_SUB}\nfi\ncat <<EOF > /etc/dovecot/shared_namespace.conf\n# Autogenerated by mailcow\nnamespace {\n    type = shared\n    separator = /\n    prefix = Shared/%%u/\n    location = maildir:%%h${MAILDIR_SUB_SHARED}:INDEX=~${MAILDIR_SUB_SHARED}/Shared/%%u\n    subscriptions = no\n    list = children\n}\nEOF\n\n\ncat <<EOF > /etc/dovecot/sogo_trusted_ip.conf\n# Autogenerated by mailcow\nremote ${IPV4_NETWORK}.248 {\n  disable_plaintext_auth = no\n}\nEOF\n\n# Create random master Password for SOGo SSO\nRAND_PASS=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 32 | head -n 1)\necho -n ${RAND_PASS} > /etc/phpfpm/sogo-sso.pass\ncat <<EOF > /etc/dovecot/sogo-sso.conf\n# Autogenerated by mailcow\npassdb {\n  driver = static\n  args = allow_nets=${IPV4_NETWORK}.248/32 password={plain}${RAND_PASS}\n}\nEOF\n\n# Creating additional creds file for SOGo notify crons (calendars, etc) (dummy user, sso password)\necho -n ${RAND_USER}@mailcow.local:${RAND_PASS} > /etc/sogo/cron.creds\n\nif [[ \"${MASTER}\" =~ ^([nN][oO]|[nN])+$ ]]; then\n  # Toggling MASTER will result in a rebuild of containers, so the quota script will be recreated\n  cat <<'EOF' > /usr/local/bin/quota_notify.py\n#!/usr/bin/python3\nimport sys\nsys.exit()\nEOF\nfi\n\n# Set mail_replica for HA setups\nif [[ -n ${MAILCOW_REPLICA_IP} && -n ${DOVEADM_REPLICA_PORT} ]]; then\n  cat <<EOF > /etc/dovecot/mail_replica.conf\n# Autogenerated by mailcow\nmail_replica = tcp:${MAILCOW_REPLICA_IP}:${DOVEADM_REPLICA_PORT}\nEOF\nfi\n\n# Setting variables for indexer-worker inside fts.conf automatically according to mailcow.conf settings\nif [[ \"${SKIP_FTS}\" =~ ^([nN][oO]|[nN])+$ ]]; then\n  echo -e \"\\e[94mConfiguring FTS Settings...\\e[0m\"\n  echo -e \"\\e[94mSetting FTS Memory Limit (per process) to ${FTS_HEAP} MB\\e[0m\"\n  sed -i \"s/vsz_limit\\s*=\\s*[0-9]*\\s*MB*/vsz_limit=${FTS_HEAP} MB/\" /etc/dovecot/conf.d/fts.conf\n  echo -e \"\\e[94mSetting FTS Process Limit to ${FTS_PROCS}\\e[0m\"\n  sed -i \"s/process_limit\\s*=\\s*[0-9]*/process_limit=${FTS_PROCS}/\" /etc/dovecot/conf.d/fts.conf\nfi\n\n# 401 is user dovecot\nif [[ ! -s /mail_crypt/ecprivkey.pem || ! -s /mail_crypt/ecpubkey.pem ]]; then\n\topenssl ecparam -name prime256v1 -genkey | openssl pkey -out /mail_crypt/ecprivkey.pem\n\topenssl pkey -in /mail_crypt/ecprivkey.pem -pubout -out /mail_crypt/ecpubkey.pem\n\tchown 401 /mail_crypt/ecprivkey.pem /mail_crypt/ecpubkey.pem\nelse\n\tchown 401 /mail_crypt/ecprivkey.pem /mail_crypt/ecpubkey.pem\nfi\n\n# Fix OpenSSL 3.X TLS1.0, 1.1 support (https://community.mailcow.email/d/4062-hi-all/20)\nif grep -qE 'ssl_min_protocol\\s*=\\s*(TLSv1|TLSv1\\.1)\\s*$' /etc/dovecot/dovecot.conf /etc/dovecot/extra.conf; then\n    sed -i '/\\[openssl_init\\]/a ssl_conf = ssl_configuration' /etc/ssl/openssl.cnf\n\n    echo \"[ssl_configuration]\" >> /etc/ssl/openssl.cnf\n    echo \"system_default = tls_system_default\" >> /etc/ssl/openssl.cnf\n    echo \"[tls_system_default]\" >> /etc/ssl/openssl.cnf\n    echo \"MinProtocol = TLSv1\" >> /etc/ssl/openssl.cnf\n    echo \"CipherString = DEFAULT@SECLEVEL=0\" >> /etc/ssl/openssl.cnf\nfi\n\n# Compile sieve scripts\nsievec /var/vmail/sieve/global_sieve_before.sieve\nsievec /var/vmail/sieve/global_sieve_after.sieve\nsievec /usr/lib/dovecot/sieve/report-spam.sieve\nsievec /usr/lib/dovecot/sieve/report-ham.sieve\n\n# Fix permissions\nchown root:root /etc/dovecot/sql/*.conf\nchown root:dovecot /etc/dovecot/sql/dovecot-dict-sql-sieve* /etc/dovecot/sql/dovecot-dict-sql-quota* /etc/dovecot/auth/passwd-verify.lua\nchmod 640 /etc/dovecot/sql/*.conf /etc/dovecot/auth/passwd-verify.lua\nchown -R vmail:vmail /var/vmail/sieve\nchown -R vmail:vmail /var/volatile\nchown -R vmail:vmail /var/vmail_index\nadduser vmail tty\nchmod g+rw /dev/console\nchown root:tty /dev/console\nchmod +x /usr/lib/dovecot/sieve/rspamd-pipe-ham \\\n  /usr/lib/dovecot/sieve/rspamd-pipe-spam \\\n  /usr/local/bin/imapsync_runner.pl \\\n  /usr/local/bin/imapsync \\\n  /usr/local/bin/trim_logs.sh \\\n  /usr/local/bin/sa-rules.sh \\\n  /usr/local/bin/clean_q_aged.sh \\\n  /usr/local/bin/maildir_gc.sh \\\n  /usr/local/sbin/stop-supervisor.sh \\\n  /usr/local/bin/quota_notify.py \\\n  /usr/local/bin/repl_health.sh \\\n  /usr/local/bin/optimize-fts.sh\n\n# Prepare environment file for cronjobs\nprintenv | sed 's/^\\(.*\\)$/export \\1/g' > /source_env.sh\n\n# Clean old PID if any\n[[ -f /var/run/dovecot/master.pid ]] && rm /var/run/dovecot/master.pid\n\n# Clean stopped imapsync jobs\nrm -f /tmp/imapsync_busy.lock\nIMAPSYNC_TABLE=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SHOW TABLES LIKE 'imapsync'\" -Bs)\n[[ ! -z ${IMAPSYNC_TABLE} ]] && mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"UPDATE imapsync SET is_running='0'\"\n\n# Envsubst maildir_gc\necho \"$(envsubst < /usr/local/bin/maildir_gc.sh)\" > /usr/local/bin/maildir_gc.sh\n\n# GUID generation\nwhile [[ ${VERSIONS_OK} != 'OK' ]]; do\n  if [[ ! -z $(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -B -e \"SELECT 'OK' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = \\\"${DBNAME}\\\" AND TABLE_NAME = 'versions'\") ]]; then\n    VERSIONS_OK=OK\n  else\n    echo \"Waiting for versions table to be created...\"\n    sleep 3\n  fi\ndone\nPUBKEY_MCRYPT=$(doveconf -P 2> /dev/null | grep -i mail_crypt_global_public_key | cut -d '<' -f2)\nif [ -f ${PUBKEY_MCRYPT} ]; then\n  GUID=$(cat <(echo ${MAILCOW_HOSTNAME}) /mail_crypt/ecpubkey.pem | sha256sum | cut -d ' ' -f1 | tr -cd \"[a-fA-F0-9.:/] \")\n  if [ ${#GUID} -eq 64 ]; then\n    mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF\nREPLACE INTO versions (application, version) VALUES (\"GUID\", \"${GUID}\");\nEOF\n  else\n    mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF\nREPLACE INTO versions (application, version) VALUES (\"GUID\", \"INVALID\");\nEOF\n  fi\nfi\n\n# Collect SA rules once now\n/usr/local/bin/sa-rules.sh\n\n# Run hooks\nfor file in /hooks/*; do\n  if [ -x \"${file}\" ]; then\n    echo \"Running hook ${file}\"\n    \"${file}\"\n  fi\ndone\n\n# For some strange, unknown and stupid reason, Dovecot may run into a race condition, when this file is not touched before it is read by dovecot/auth\n# May be related to something inside Docker, I seriously don't know\ntouch /etc/dovecot/auth/passwd-verify.lua\n\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  cp /etc/syslog-ng/syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng.conf\nfi\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/imapsync",
    "content": "#!/usr/bin/env perl\n\n# $Id: imapsync,v 2.178 2022/01/12 21:28:37 gilles Exp gilles $\n# structure\n# pod documentation\n# use pragmas\n# main program\n# global variables initialization\n# get_options(  ) ;\n# default values\n# folder loop\n# subroutines\n# sub usage\n\n\n# pod documentation\n\n=pod\n\n=head1 NAME\n\nimapsync - Email IMAP tool for syncing, copying, migrating\nand archiving email mailboxes between two imap servers, one way,\nand without duplicates.\n\n=head1 VERSION\n\nThis documentation refers to Imapsync $Revision: 2.178 $\n\n=head1 USAGE\n\n To synchronize the source imap account\n   \"test1\" on server \"test1.lamiral.info\" with password \"secret1\"\n to the destination imap account\n   \"test2\" on server \"test2.lamiral.info\" with password \"secret2\"\n do:\n\n  imapsync \\\n   --host1 test1.lamiral.info --user1 test1 --password1 secret1 \\\n   --host2 test2.lamiral.info --user2 test2 --password2 secret2\n\n=head1 DESCRIPTION\n\nWe sometimes need to transfer mailboxes from one imap server to\none another.\n\nImapsync command is a tool allowing incremental and\nrecursive imap transfers from one mailbox to another.\nIf you don't understand the previous sentence, it's normal,\nit's pedantic computer-oriented jargon.\n\nAll folders are transferred, recursively, meaning\nthe whole folder hierarchy is taken, all messages in them,\nand all message flags (\\Seen \\Answered \\Flagged etc.)\nare synced too.\n\nImapsync reduces the amount of data transferred by not transferring\na given message if it already resides on the destination side.\nMessages that are on the destination side but not on the\nsource side stay as they are. See the --delete2\noption to have strict sync and delete them.\n\nHow imapsync know a message is already on both sides?\nSame specific headers and the transfer is done only once.\nBy default, the identification headers are\n\"Message-Id:\" and \"Received:\" lines\nbut this choice can be changed with the --useheader option,\nmost often a duplicate problem is solved by using\n--useheader \"Message-Id\"\n\n\nAll flags are preserved, unread messages will stay unread,\nread ones will stay read, deleted will stay deleted.\nIn the IMAP protocol, a deleted message is not really deleted,\nit is marked \\Deleted and can be undelete. Real destruction\ncomes with the EXPUNGE or UIDEXPUNGE IMAP commands.\n\nYou can abort the transfer at any time and restart it later,\nimapsync works well with bad connections and interruptions,\nby design. On a terminal hit Ctr-c twice within two seconds\nto abort the program. Hit Ctr-c just once makes\nimapsync reconnect to both imap servers.\n\nHow do you know the sync is finished and well done?\nWhen imapsync ends by itself it mentions it with lines like those:\n\n  Exiting with return value 0 (EX_OK: successful termination) 0/50 nb_errors/max_errors PID 301\n  Removing pidfile /tmp/imapsync.pid\n  Log file is LOG_imapsync/2020_11_17_15_59_22_761_test1_test2.txt ( to change it, use --logfile filepath ; or use --nolog to turn off logging )\n\nIf you don't have those lines it means that either the sync process is still\nrunning (or eventually hanging indefinitely) or that it ended without\na whisper, a strong kill -9 on Linux for example.\n\nIf you have those final lines then it means the sync process is properly\nfinished. It may have encountered problems though.\n\nA good synchronization is mentioned by some lines above the last ones, especially\nthose three lines:\n\n  The sync looks good, all 1745 identified messages in host1 are on host2.\n  There is no unidentified message on host1.\n  Detected 0 errors\n\n\nA classical scenario is synchronizing a mailbox B from another mailbox A\nwhere you just want to keep a strict copy of A in B. Strict meaning\nall messages in A will be in B but no more.\n\nFor this, option --delete2 can be used, it deletes messages in the host2\nfolder B that are not in the host1 folder A. If you also need to destroy\nhost2 folders that are not in host1 then use --delete2folders. See also\n--delete2foldersonly and --delete2foldersbutnot to set up exceptions\non folders to destroy. INBOX will never be destroyed, it's a mandatory\nfolder in IMAP so imapsync doesn't even try to remove it.\n\nA different scenario is to delete the messages from the source mailbox\nafter a successful transfer, it can be a good feature when migrating\nmailboxes since messages will be only on one side. The source account\nwill only have messages that are not on the destination yet, ie,\nmessages that arrived after a sync or that failed to be transferred.\n\nIn that case, use the --delete1 option. Option --delete1 implies also\nthe option --expunge1 so all messages marked deleted on host1 will be\ndeleted. In IMAP protocol deleting a message does not delete it,\nit marks it with the flag \\Deleted, allowing an undelete. Expunging\na folder removes, definitively, all the messages marked as \\Deleted\nin this folder.\n\nYou can also decide to remove empty folders once all of their messages\nhave been transferred. Add --delete1emptyfolders to obtain this\nbehavior.\n\n\nImapsync is not adequate for maintaining two active imap accounts\nin synchronization when the user plays independently on both sides.\nUse offlineimap (written by John Goerzen) or mbsync (written by\nMichael R. Elkins) for a 2 ways synchronization.\n\n\n=head1 OPTIONS\n\n usage: imapsync [options]\n\nThe standard options are the six values forming the credentials.\nThree values on each side are needed in order to login into the IMAP\nservers. These six values are a hostname, a username, and a password, two times.\n\nConventions used in the following descriptions of the options:\n\n str means string\n int means integer number\n flo means float number\n reg means regular expression\n cmd means command\n\n --dry               : Makes imapsync doing nothing for real; it just print what\n                       would be done without --dry.\n\n=head2 OPTIONS/credentials\n\n\n --host1        str  : Source or \"from\" imap server.\n --port1        int  : Port to connect on host1.\n                       Optional since default ports are the\n                       well known ports imap/143 or imaps/993.\n --user1        str  : User to login on host1.\n --password1    str  : Password of user1.\n\n --host2        str  : \"destination\" imap server.\n --port2        int  : Port to connect on host2. Optional\n --user2        str  : User to login on host2.\n --password2    str  : Password of user2.\n\n --showpasswords     : Shows passwords on output instead of \"MASKED\".\n                       Useful to restart a complete run by just reading\n                       the command line used in the log,\n                       or to debug passwords.\n                       It's not a secure practice at all!\n\n --passfile1    str  : Password file for the user1. It must contain the\n                       password on the first line. This option avoids showing\n                       the password on the command line like --password1 does.\n --passfile2    str  : Password file for the user2.\n\nYou can also pass the passwords in the environment variables\nIMAPSYNC_PASSWORD1 and IMAPSYNC_PASSWORD2. If you don't pass\nthe user1 password via --password1 nor --passfile1 nor $IMAPSYNC_PASSWORD1\nthen imapsync will prompt to enter the password on the terminal.\nSame thing for user2 password.\n\n=head2 OPTIONS/encryption\n\n --nossl1            : Do not use a SSL connection on host1.\n --ssl1              : Use a SSL connection on host1. On by default if possible.\n\n --nossl2            : Do not use a SSL connection on host2.\n --ssl2              : Use a SSL connection on host2. On by default if possible.\n\n --notls1            : Do not use a TLS connection on host1.\n --tls1              : Use a TLS connection on host1. On by default if possible.\n\n --notls2            : Do not use a TLS connection on host2.\n --tls2              : Use a TLS connection on host2. On by default if possible.\n\n --debugssl     int  : SSL debug mode from 0 to 4.\n\n --sslargs1     str  : Pass any ssl parameter for host1 ssl or tls connection. Example:\n                       --sslargs1 SSL_verify_mode=1 --sslargs1 SSL_version=SSLv3\n                       See all possibilities in the new() method of IO::Socket::SSL\n                       http://search.cpan.org/perldoc?IO::Socket::SSL#Description_Of_Methods\n --sslargs2     str  : Pass any ssl parameter for host2 ssl or tls connection.\n                       See --sslargs1\n\n\n=head2 OPTIONS/authentication\n\n --authmech1    str  : Auth mechanism to use with host1:\n                       PLAIN, LOGIN, CRAM-MD5 etc. Use UPPERCASE.\n --authmech2    str  : Auth mechanism to use with host2. See --authmech1\n\n --authuser1    str  : User to auth with on host1 (admin user).\n                       Avoid using --authmech1 SOMETHING with --authuser1.\n --authuser2    str  : User to auth with on host2 (admin user).\n --proxyauth1        : Use proxyauth on host1. Requires --authuser1.\n                       Required by Sun/iPlanet/Netscape IMAP servers to\n                       be able to use an administrative user.\n --proxyauth2        : Use proxyauth on host2. Requires --authuser2.\n\n --authmd51          : Use MD5 authentication for host1.\n --authmd52          : Use MD5 authentication for host2.\n --domain1      str  : Domain on host1 (NTLM authentication).\n --domain2      str  : Domain on host2 (NTLM authentication).\n\n --oauthaccesstoken1 str : The access token to authenticate with OAUTH2.\n                       It will be combined with the --user1 value to form the\n                       string to pass with XOAUTH2 authentication.\n                       The password given by --password1 or --passfile1\n                       is ignored.\n                       Instead of the access token itself, the value can be a\n                       file containing the access token on the first line.\n                       If the value is a file, imapsync reads its first line\n                       and take this line as the access token. The advantage\n                       of the file is that if the access token changes then\n                       imapsync can read it again when it needs to reconnect\n                       during a run.\n\n\n --oauthaccesstoken2 str : same thing as --oauthaccesstoken1\n\n --oauthdirect1 str  : The direct string to pass with XOAUTH2 authentication.\n                       The password given by --password1 or --passfile1 and\n                       the user given by --user1 are ignored.\n\n --oauthdirect2 str  : same thing as oauthdirect1\n\n\n=head2 OPTIONS/folders\n\n\n --folder       str  : Sync this folder.\n --folder       str  : and this one, etc.\n --folderrec    str  : Sync this folder recursively.\n --folderrec    str  : and this one, etc.\n\n --folderfirst  str  : Sync this folder first. Ex. --folderfirst \"INBOX\"\n --folderfirst  str  : then this one, etc.\n --folderlast   str  : Sync this folder last. --folderlast \"[Gmail]/All Mail\"\n --folderlast   str  : then this one, etc.\n\n --nomixfolders      : Do not merge folders when host1 is case-sensitive\n                       while host2 is not (like Exchange). Only the first\n                       similar folder is synced (example: with folders\n                       \"Sent\", \"SENT\" and \"sent\"\n                       on host1 only \"Sent\" will be synced to host2).\n\n --skipemptyfolders  : Empty host1 folders are not created on host2.\n\n --include      reg  : Sync folders matching this regular expression\n --include      reg  : or this one, etc.\n                       If both --include --exclude options are used, then\n                       include is done before.\n --exclude      reg  : Skips folders matching this regular expression\n                       Several folders to avoid:\n                        --exclude 'fold1|fold2|f3' skips fold1, fold2 and f3.\n --exclude      reg  : or this one, etc.\n\n --automap           : guesses folders mapping, for folders well known as\n                       \"Sent\", \"Junk\", \"Drafts\", \"All\", \"Archive\", \"Flagged\".\n\n --f1f2    str1=str2 : Force folder str1 to be synced to str2,\n                       --f1f2 overrides --automap and --regextrans2.\n                       Use several --f1f2 options to map several folders.\n                       Option --f1f2 is a one to one only folder mapping,\n                       str1 and str2 have to be full path folder names.\n\n --subfolder2   str  : Syncs the whole host1 folders hierarchy under the\n                       host2 folder named str.\n                       It does it internally by adding three\n                       --regextrans2 options before all others.\n                       Add --debug to see what's really going on.\n\n --subfolder1   str  : Syncs the host1 folders hierarchy which is under folder\n                       str to the root hierarchy of host2.\n                       It's the couterpart of a sync done by --subfolder2\n                       when doing it in the reverse order.\n                       Backup/Restore scenario:\n                       Use --subfolder2 str for a backup to the folder str\n                       on host2. Then use --subfolder1 str for restoring\n                       from the folder str, after inverting\n                       host1/host2 user1/user2 values.\n\n\n --subscribed        : Transfers subscribed folders.\n --subscribe         : Subscribe to the folders transferred on the\n                       host2 that are subscribed on host1. On by default.\n --subscribeall      : Subscribe to the folders transferred on the\n                       host2 even if they are not subscribed on host1.\n\n --prefix1      str  : Remove prefix str to all destination folders,\n                       usually \"INBOX.\" or \"INBOX/\" or an empty string \"\".\n                       imapsync guesses the prefix if host1 imap server\n                       does not have NAMESPACE capability. So this option\n                       should not be used most of the time.\n --prefix2      str  : Add prefix to all host2 folders. See --prefix1\n\n --sep1         str  : Host1 separator. This option should not be used\n                       most of the time.\n                       Imapsync gets the separator from the server itself,\n                       by using NAMESPACE, or it tries to guess it\n                       from the folders listing (it counts\n                       characters / . \\\\ \\ in folder names and choose the\n                       more frequent, or finally / if nothing is found.\n --sep2         str  : Host2 separator. See --sep1\n\n --regextrans2  reg  : Apply the whole regex to each destination folders.\n --regextrans2  reg  : and this one. etc.\n                       When you play with the --regextrans2 option, first\n                       add also the safe options --dry --justfolders\n                       Then, when happy, remove --dry for a run, then\n                       remove --justfolders for the next ones.\n                       Have in mind that --regextrans2 is applied after\n                       the automatic prefix and separator inversion.\n                       For examples see:\n                       https://imapsync.lamiral.info/FAQ.d/FAQ.Folders_Mapping.txt\n\n=head2 OPTIONS/folders sizes\n\n --nofoldersizes     : Do not calculate the size of each folder at the\n                       beginning of the sync. Default is to calculate them.\n --nofoldersizesatend: Do not calculate the size of each folder at the\n                       end of the sync. Default is to calculate them.\n --justfoldersizes   : Exit after having printed the initial folder sizes.\n\n\n=head2 OPTIONS/tmp\n\n\n --tmpdir       str  : Where to store temporary files and subdirectories.\n                       Will be created if it doesn't exist.\n                       Default is system specific, Unix is /tmp but\n                       /tmp is often too small and deleted at reboot.\n                       --tmpdir /var/tmp should be better.\n\n --pidfile      str  : The file where imapsync pid is written,\n                       it can be dirname/filename complete path.\n                       The default name is imapsync.pid in tmpdir.\n\n --pidfilelocking    : Abort if pidfile already exists. Useful to avoid\n                       concurrent transfers on the same mailbox.\n\n\n=head2 OPTIONS/log\n\n --nolog             : Turn off logging on file\n --logfile      str  : Change the default log filename (can be dirname/filename).\n --logdir       str  : Change the default log directory. Default is LOG_imapsync/\n\nThe default logfile name is for example\n\n LOG_imapsync/2019_12_22_23_57_59_532_user1_user2.txt\n\nwhere:\n\n 2019_12_22_23_57_59_532 is nearly the date of the start\n YYYY_MM_DD_HH_MM_SS_mmm\n year_month_day_hour_minute_seconde_millisecond\n\nand user1 user2 are the --user1 --user2 values.\n\n=head2 OPTIONS/messages\n\n --skipmess     reg  : Skips messages matching the regex.\n                       Example: 'm/[\\x80-\\xff]/' # to avoid 8bits messages.\n                       --skipmess is applied before --regexmess\n --skipmess     reg  : or this one, etc.\n\n --skipcrossduplicates : Avoid copying messages that are already copied\n                         in another folder, good from Gmail to XYZ when\n                         XYZ is not also Gmail.\n                         Activated with --gmail1 unless --noskipcrossduplicates\n\n --debugcrossduplicates : Prints which messages (UIDs) are skipped with\n                          --skipcrossduplicates and in what other folders\n                          they are.\n\n --pipemess     cmd  : Apply this cmd command to each message content\n                       before the copy.\n --pipemess     cmd  : and this one, etc.\n                       With several --pipemess, the output of each cmd\n                       command (STDOUT) is given to the input (STDIN)\n                       of the next command.\n                       For example,\n                       --pipemess cmd1 --pipemess cmd2 --pipemess cmd3\n                       is like a Unix pipe:\n                       \"cat message | cmd1 | cmd2 | cmd3\"\n\n --disarmreadreceipts : Disarms read receipts (host2 Exchange issue)\n\n --regexmess    reg  : Apply the whole regex to each message before transfer.\n                       Example: 's/\\000/ /g' # to replace null characters\n                       by spaces.\n --regexmess    reg  : and this one, etc.\n\n --truncmess    int  : truncates messages when their size exceed the int\n                       value, specified in bytes. Good to sync too big\n                       messages or to \"suppress\" attachments.\n                       Have in mind that this way, messages become\n                       uncoherent somehow.\n\n=head2 OPTIONS/labels\n\nGmail present labels as folders in imap. Imapsync can accelerate the sync\nby syncing X-GM-LABELS, it will avoid to transfer messages when they are\nalready on host2 in another folder.\n\n\n --synclabels        : Syncs also Gmail labels when a message is copied to host2.\n                       Activated by default with --gmail1 --gmail2 unless\n                       --nosynclabels is added.\n\n --resynclabels      : Resyncs Gmail labels when a message is already on host2.\n                       Activated by default with --gmail1 --gmail2 unless\n                       --noresynclabels is added.\n\nFor Gmail syncs, see also:\nhttps://imapsync.lamiral.info/FAQ.d/FAQ.Gmail.txt\n\n=head2 OPTIONS/flags\n\n If you encounter flag problems see also:\n https://imapsync.lamiral.info/FAQ.d/FAQ.Flags.txt\n\n --regexflag    reg  : Apply the whole regex to each flags list.\n                       Example: 's/\"Junk\"//g' # to remove \"Junk\" flag.\n --regexflag    reg  : then this one, etc.\n\n --resyncflags       : Resync flags for already transferred messages.\n                       On by default.\n --noresyncflags     : Do not resync flags for already transferred messages.\n                       May be useful when a user has already started to play\n                       with its host2 account.\n\n --filterbuggyflags  : Filter flags known to be buggy and generators of errors\n                       \"BAD Invalid system flag\" or \"NO APPEND Invalid flag list\".\n\n=head2 OPTIONS/deletions\n\n --delete1           : Deletes messages on host1 server after a successful\n                       transfer. Option --delete1 has the following behavior:\n                       it marks messages as deleted with the IMAP flag\n                       \\Deleted, then messages are really deleted with an\n                       EXPUNGE IMAP command. If expunging after each message\n                       slows down too much the sync then use\n                       --noexpungeaftereach to speed up, expunging will then be\n                       done only twice per folder, one at the beginning and\n                       one at the end of a folder sync.\n\n --expunge1          : Expunge messages on host1 just before syncing a folder.\n                       Expunge is done per folder.\n                       Expunge aims is to really delete messages marked deleted.\n                       An expunge is also done after each message copied\n                       if option --delete1 is set (unless --noexpungeaftereach).\n\n --noexpunge1        : Do not expunge messages on host1.\n\n --delete1emptyfolders : Deletes empty folders on host1, INBOX excepted.\n                         Useful with --delete1 since what remains on host1\n                         is only what failed to be synced.\n\n --delete2           : Delete messages in the host2 account that are not in\n                       the host1 account. Useful for backup or pre-sync.\n                       --delete2 implies --uidexpunge2\n\n --delete2duplicates : Deletes messages in host2 that are duplicates in host2.\n                       Works only without --useuid since duplicates are\n                       detected with an header part of each message.\n                       NB: --delete2duplicates is far less violent than --delete2\n                       since it removes only duplicates.\n\n --delete2folders    : Delete folders in host2 that are not in host1.\n                       For safety, first try it like this, it is safe:\n                       --delete2folders --dry --justfolders --nofoldersizes\n                       and see what folders will be deleted.\n\n --delete2foldersonly   reg : Delete only folders matching the regex reg.\n                              Example: --delete2foldersonly \"/^Junk$|^INBOX.Junk$/\"\n                              This option activates --delete2folders\n\n --delete2foldersbutnot reg : Do not delete folders matching the regex rex.\n                              Example: --delete2foldersbutnot \"/Tasks$|Contacts$|Foo$/\"\n                              This option activates --delete2folders\n\n --noexpunge2        : Do not expunge messages on host2.\n --nouidexpunge2     : Do not uidexpunge messages on the host2 account\n                       that are not on the host1 account.\n\n\n=head2 OPTIONS/dates\n\n If you encounter problems with dates, see also:\n https://imapsync.lamiral.info/FAQ.d/FAQ.Dates.txt\n\n --syncinternaldates : Sets the internal dates on host2 as the same as host1.\n                       Turned on by default. Internal date is the date\n                       a message arrived on a host (Unix mtime usually).\n --idatefromheader   : Sets the internal dates on host2 as same as the\n                       ones in \"Date:\" headers.\n\n\n\n=head2 OPTIONS/message selection\n\n --maxsize      int  : Skip messages larger  (or equal) than  int  bytes\n --minsize      int  : Skip messages smaller (or equal) than  int  bytes\n\n --maxage       int  : Skip messages older than  int days.\n                       final stats (skipped) don't count older messages\n                       see also --minage\n --minage       int  : Skip messages newer than  int  days.\n                       final stats (skipped) don't count newer messages\n                       You can do (+ zone are the messages selected):\n                       past|----maxage+++++++++++++++>now\n                       past|+++++++++++++++minage---->now\n                       past|----maxage+++++minage---->now (intersection)\n                       past|++++minage-----maxage++++>now (union)\n\n --search       str  : Selects only messages returned by this IMAP SEARCH\n                       command. Applied on both sides.\n                       For a complete set of what can be search see\n                       https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Selection.txt\n\n --search1      str  : Same as --search but for selecting host1 messages only.\n --search2      str  : Same as --search but for selecting host2 messages only.\n                       So --search CRIT equals --search1 CRIT --search2 CRIT\n\n --noabletosearch    : Makes --minage and --maxage options use the internal\n                       dates given by a FETCH imap command instead of the\n                       \"Date:\" header. Internal date is the arrival date\n                       in the mailbox.\n                       --noabletosearch equals --noabletosearch1 --noabletosearch2\n\n --noabletosearch1   : Like --noabletosearch but for host1 only.\n --noabletosearch2   : Like --noabletosearch but for host2 only.\n\n --maxlinelength int : skip messages with a line length longer than  int  bytes.\n                       RFC 2822 says it must be no more than 1000 bytes but\n                       real life servers and email clients do more.\n\n\n --useheader    str  : Use this header to compare messages on both sides.\n                       Example: \"Message-Id\" or \"Received\" or \"Date\".\n --useheader    str    and this one, etc.\n\n --syncduplicates    : Sync also duplicates. Off by default.\n\n --usecache          : Use cache to speed up next syncs. Off by default.\n --nousecache        : Do not use cache. Caveat: --useuid --nousecache creates\n                       duplicates on multiple runs.\n\n --useuid            : Use UIDs instead of headers as a criterion to recognize\n                       messages. Option --usecache is then implied unless\n                       --nousecache is used.\n\n\n=head2 OPTIONS/miscellaneous\n\n --syncacls          : Synchronizes acls (Access Control Lists).\n                       Acls in IMAP are not standardized, be careful\n                       since one acl code on one side may signify something\n                       else on the other one.\n --nosyncacls        : Does not synchronize acls. This is the default.\n\n --addheader         : When a message has no headers to be identified,\n                       --addheader adds a \"Message-Id\" header,\n                       like \"Message-Id: 12345@imapsync\", where 12345\n                       is the imap UID of the message on the host1 folder.\n                       Useful to sync folders \"Sent\" or \"Draft\".\n\n\n=head2 OPTIONS/debugging\n\n --debug             : Debug mode.\n --debugfolders      : Debug mode for the folders part only.\n --debugcontent      : Debug content of the messages transferred. Huge output.\n --debugflags        : Debug mode for flags.\n --debugimap1        : IMAP debug mode for host1. Very verbose.\n --debugimap2        : IMAP debug mode for host2. Very verbose.\n --debugimap         : IMAP debug mode for host1 and host2. Twice very verbose.\n --debugmemory       : Debug mode showing memory consumption after each copy.\n\n --errorsmax     int : Exit when int number of errors is reached. Default is 50.\n\n --tests             : Run local non-regression tests. Exit code 0 means all ok.\n --testslive         : Run a live test with test1.lamiral.info imap server.\n                       Useful to check the basics. Needs internet connection.\n --testslive6        : Run a live test with ks6ipv6.lamiral.info imap server.\n                       Useful to check the ipv6 connectivity. Needs internet.\n\n\n=head2 OPTIONS/specific\n\n  --gmail1           : sets --host1 to Gmail and other options. See FAQ.Gmail.txt\n  --gmail2           : sets --host2 to Gmail and other options. See FAQ.Gmail.txt\n\n  --office1          : sets --host1 to Office365 and other options. See FAQ.Office365.txt\n  --office2          : sets --host2 to Office365 and other options. See FAQ.Office365.txt\n\n  --exchange1        : sets options for Exchange. See FAQ.Exchange.txt\n  --exchange2        : sets options for Exchange. See FAQ.Exchange.txt\n\n  --domino1          : sets options for Domino. See FAQ.Domino.txt\n  --domino2          : sets options for Domino. See FAQ.Domino.txt\n\n\n=head2 OPTIONS/behavior\n\n --timeout1     flo  : Connection timeout in seconds for host1.\n                       Default is 120 and 0 means no timeout at all.\n --timeout2     flo  : Connection timeout in seconds for host2.\n                       Default is 120 and 0 means no timeout at all.\n\n                       Caveat, under CGI context, you may encounter a timeout\n                       from the webserver, killing imapsync and the imap connexions.\n                       See the document INSTALL.OnlineUI.txt and search\n                       for \"Timeout\" for how to deal with this issue.\n\n --keepalive1        : https://metacpan.org/pod/Mail::IMAPClient#Keepalive\n                       Some firewalls and network gears like to timeout connections\n                       prematurely if the connection sits idle.\n                       This option enables SO_KEEPALIVE on the host1 socket.\n                       --keepalive1 is on by default since imapsync release 2.169\n                       Use --nokeepalive1 to disable it.\n\n --keepalive2        : Same as --keepalive2 but for host2.\n                       Use --nokeepalive2 to disable it.\n\n --maxmessagespersecond flo : limits the average number of messages\n                              transferred per second.\n\n --maxbytespersecond int : limits the average transfer rate per second.\n --maxbytesafter     int : starts --maxbytespersecond limitation only after\n                           --maxbytesafter amount of data transferred.\n\n --maxsleep      flo : do not sleep more than int seconds.\n                       On by default, 2 seconds max, like --maxsleep 2\n\n --abort             : terminates a previous call still running.\n                       It uses the pidfile to know what process to abort.\n\n --exitwhenover int  : Stop syncing and exits when int total bytes\n                       transferred is reached.\n\n --version           : Print only the software version.\n --noreleasecheck    : Do not check for any new imapsync release.\n --releasecheck      : Check for new imapsync release.\n                       it's an http request to\n                       http://imapsync.lamiral.info/prj/imapsync/VERSION\n\n --noid              : Do not send/receive IMAP \"ID\" command to imap servers.\n\n --justconnect       : Just connect to both servers and print useful\n                       information. Need only --host1 and --host2 options.\n                       Obsolete since \"imapsync --host1 imaphost\" alone\n                       implies --justconnect\n\n --justlogin         : Just login to both host1 and host2 with users\n                       credentials, then exit.\n\n --justfolders       : Do only things about folders (ignore messages).\n\n --help              : print this help.\n\n Example: to synchronize imap account \"test1\" on \"test1.lamiral.info\"\n                     to  imap account \"test2\" on \"test2.lamiral.info\"\n                     with test1 password \"secret1\"\n                     and  test2 password \"secret2\"\n\n imapsync \\\n    --host1 test1.lamiral.info --user1 test1 --password1 secret1 \\\n    --host2 test2.lamiral.info --user2 test2 --password2 secret2\n\n\n=cut\n# comment\n\n=pod\n\n\n\n=head1 SECURITY\n\nYou can use --passfile1  instead of --password1 to mention the\npassword since it is safer. With --password1 option, on Linux,\nany user on your host can see the password by using the 'ps auxwwww'\ncommand. Using a variable (like IMAPSYNC_PASSWORD1) is also\ndangerous because of the 'ps auxwwwwe' command. So, saving\nthe password in a well protected file (600 or rw-------) is\nthe best solution.\n\nImapsync activates ssl or tls encryption by default, if possible.\n\nWhat detailed behavior is under this \"if possible\"?\n\nImapsync activates ssl if the well known port imaps port (993) is open\non the imap servers. If the imaps port is closed then it open a\nnormal (clear) connection on port 143 but it looks for TLS support\nin the CAPABILITY list of the servers. If TLS is supported\nthen imapsync goes to encryption with STARTTLS.\n\nIf the automatic ssl and the tls detections fail then imapsync will\nnot protect against sniffing activities on the network, especially\nfor passwords.\n\nIf you want to force ssl or tls just use --ssl1 --ssl2 or --tls1 --tls2\n\nSee also the document FAQ.Security.txt in the FAQ.d/ directory\nor at https://imapsync.lamiral.info/FAQ.d/FAQ.Security.txt\n\n=head1 EXIT STATUS\n\nImapsync will exit with a 0 status (return code) if everything went good.\nOtherwise, it exits with a non-zero status. That's classical Unix behavior.\nHere is the list of the exit code values (an integer between 0 and 255).\nIn Bourne Shells, this exit code value can be retrieved within the variable\nvalue \"$?\" if you read it just after the imapsync call.\n\nThe names reflect their meaning:\n\n=for comment\negrep '^Readonly my.*\\$EX' imapsync | egrep -o 'EX.*' | sed 's_^_     _'\n\n     EX_OK          => 0  ; #/* successful termination */\n     EX_USAGE       => 64 ; #/* command line usage error */\n     EX_NOINPUT     => 66 ; #/* cannot open input */\n     EX_UNAVAILABLE => 69 ; #/* service unavailable */\n     EX_SOFTWARE    => 70 ; #/* internal software error */\n     EXIT_CATCH_ALL              =>   1 ; # Any other error\n     EXIT_BY_SIGNAL              =>   6 ; # Should be 128+n where n is the sig_num\n     EXIT_BY_FILE                =>   7 ;\n     EXIT_PID_FILE_ERROR         =>   8 ;\n     EXIT_CONNECTION_FAILURE     =>  10 ;\n     EXIT_TLS_FAILURE            =>  12 ;\n     EXIT_AUTHENTICATION_FAILURE =>  16 ;\n     EXIT_SUBFOLDER1_NO_EXISTS   =>  21 ;\n     EXIT_WITH_ERRORS            => 111 ;\n     EXIT_WITH_ERRORS_MAX        => 112 ;\n     EXIT_OVERQUOTA              => 113 ;\n     EXIT_ERR_APPEND             => 114 ;\n     EXIT_ERR_FETCH              => 115 ;\n     EXIT_ERR_CREATE             => 116 ;\n     EXIT_ERR_SELECT             => 117 ;\n     EXIT_TRANSFER_EXCEEDED      => 118 ;\n     EXIT_ERR_APPEND_VIRUS       => 119 ;\n     EXIT_TESTS_FAILED           => 254 ; # Like Test::More API\n     EXIT_CONNECTION_FAILURE_HOST1     =>  101 ;\n     EXIT_CONNECTION_FAILURE_HOST2     =>  102 ;\n     EXIT_AUTHENTICATION_FAILURE_USER1 =>  161 ;\n     EXIT_AUTHENTICATION_FAILURE_USER2 =>  162 ;\n\n\n=head1 LICENSE AND COPYRIGHT\n\nImapsync is free, open, public but not always gratis software\ncover by the NOLIMIT Public License, now called NLPL.\nSee the LICENSE file included in the distribution or just read this\nsimple sentence as it IS the licence text:\n\n \"No limits to do anything with this work and this license.\"\n\nIn case it is not long enough, I repeat:\n\n \"No limits to do anything with this work and this license.\"\n\nLook at https://imapsync.lamiral.info/LICENSE\n\n=head1 AUTHOR\n\nGilles LAMIRAL <gilles@lamiral.info>\n\nGood feedback is always welcome.\nBad feedback is very often welcome.\n\nGilles LAMIRAL earns his living by writing, installing,\nconfiguring and sometimes teaching free, open and often gratis\nsoftware. Imapsync used to be \"always gratis\" but now it is\nonly \"often gratis\" because imapsync is sold by its author,\nyour servitor, a good way to maintain and support free open public\nsoftware tools over decades.\n\n=head1 BUGS AND LIMITATIONS\n\nSee https://imapsync.lamiral.info/FAQ.d/FAQ.Reporting_Bugs.txt\n\n=head1 IMAP SERVERS supported\n\nSee https://imapsync.lamiral.info/S/imapservers.shtml\n\n=head1 HUGE MIGRATION\n\nIf you have many mailboxes to migrate think about a little\nshell program. Write a file called file.txt (for example)\ncontaining users and passwords.\nThe separator used in this example is ';'\n\nThe file.txt file contains:\n\nuser001_1;password001_1;user001_2;password001_2\nuser002_1;password002_1;user002_2;password002_2\nuser003_1;password003_1;user003_2;password003_2\nuser004_1;password004_1;user004_2;password004_2\nuser005_1;password005_1;user005_2;password005_2\n...\n\nOn Unix the shell program can be:\n\n { while IFS=';' read  u1 p1 u2 p2; do\n        imapsync --host1 imap.side1.org --user1 \"$u1\" --password1 \"$p1\" \\\n                 --host2 imap.side2.org --user2 \"$u2\" --password2 \"$p2\" ...\n done ; } < file.txt\n\nOn Windows the batch program can be:\n\n  FOR /F \"tokens=1,2,3,4 delims=; eol=#\" %%G IN (file.txt) DO imapsync ^\n  --host1 imap.side1.org --user1 %%G --password1 %%H ^\n  --host2 imap.side2.org --user2 %%I --password2 %%J ...\n\nThe ... have to be replaced by nothing or any imapsync option.\nWelcome in shell or batch programming !\n\nYou will find already written scripts at\nhttps://imapsync.lamiral.info/examples/\n\n=head1 INSTALL\n\n Imapsync works under any Unix with Perl.\n\n Imapsync works under most Windows (2000, XP, Vista, Seven, Eight, Ten\n and all Server releases 2000, 2003, 2008 and R2, 2012 and R2, 2016)\n as a standalone binary software called imapsync.exe,\n usually launched from a batch file in order to avoid always typing\n the options. There is also a 32bit binary called imapsync_32bit.exe\n\n Imapsync works under OS X as a standalone binary\n software called imapsync_bin_Darwin\n\n Purchase latest imapsync at\n https://imapsync.lamiral.info/\n\n You'll receive a link to a compressed tarball called imapsync-x.xx.tgz\n where x.xx is the version number. Untar the tarball where\n you want (on Unix):\n\n  tar xzvf  imapsync-x.xx.tgz\n\n Go into the directory imapsync-x.xx and read the INSTALL file.\n As mentioned at https://imapsync.lamiral.info/#install\n the INSTALL file can also be found at\n https://imapsync.lamiral.info/INSTALL.d/INSTALL.ANY.txt\n It is now split in several files for each system\n https://imapsync.lamiral.info/INSTALL.d/\n\n=head1 CONFIGURATION\n\nThere is no specific configuration file for imapsync,\neverything is specified by the command line parameters\nand the default behavior.\n\n\n=head1 HACKING\n\nFeel free to hack imapsync as the NOLIMIT license permits it.\n\n\n=head1 SIMILAR SOFTWARE\n\n  See also https://imapsync.lamiral.info/S/external.shtml\n  for a better up to date list.\n\nList verified on Friday July 1, 2021.\n\n imapsync: https://github.com/imapsync/imapsync (this is an imapsync copy, sometimes delayed, with --noreleasecheck by default since release 1.592, 2014/05/22)\n imap_tools: https://web.archive.org/web/20161228145952/http://www.athensfbc.com/imap_tools/. The imap_tools code is now at https://github.com/andrewnimmo/rick-sanders-imap-tools\n imaputils: https://github.com/mtsatsenko/imaputils (very old imap_tools fork)\n Doveadm-Sync: https://wiki2.dovecot.org/Tools/Doveadm/Sync ( Dovecot sync tool )\n davmail: http://davmail.sourceforge.net/\n offlineimap: http://offlineimap.org/\n fdm: https://github.com/nicm/fdm\n mbsync: http://isync.sourceforge.net/\n mailsync: http://mailsync.sourceforge.net/\n mailutil: https://www.washington.edu/imap/ part of the UW IMAP toolkit. (well, seems abandoned now)\n imaprepl: https://bl0rg.net/software/ http://freecode.com/projects/imap-repl/\n imapcopy (Pascal): http://www.ardiehl.de/imapcopy/\n imapcopy (Java): https://code.google.com/archive/p/imapcopy/\n imapsize: http://www.broobles.com/imapsize/\n migrationtool: http://sourceforge.net/projects/migrationtool/\n imapmigrate: http://sourceforge.net/projects/cyrus-utils/\n larch: https://github.com/rgrove/larch (derived from wonko_imapsync, good at Gmail)\n wonko_imapsync: http://wonko.com/article/554 (superseded by larch)\n pop2imap: http://www.linux-france.org/prj/pop2imap/ (I wrote that too)\n exchange-away: http://exchange-away.sourceforge.net/\n SyncBackPro: http://www.2brightsparks.com/syncback/sbpro.html\n ImapSyncClient: https://github.com/ridaamirini/ImapSyncClient\n MailStore: https://www.mailstore.com/en/products/mailstore-home/\n mnIMAPSync: https://github.com/manusa/mnIMAPSync\n imap-upload: http://imap-upload.sourceforge.net/ (A tool for uploading a local mbox file to IMAP4 server)\n imapbackup: https://github.com/rcarmo/imapbackup (A Python script for incremental backups of IMAP mailboxes)\n BitRecover email-backup 99 USD, 299 USD https://www.bitrecover.com/email-backup/.\n ImportExportTools: https://addons.thunderbird.net/en-us/thunderbird/addon/importexporttools/ ImportExportTools for Mozilla Thunderbird by Paolo Kaosmos. ImportExportTools does not do IMAP.\n rximapmail: https://sourceforge.net/projects/rximapmail/\n CodeTwo: https://www.codetwo.com/ but CodeTwo does imap source to Office365 only.\n\n=head1 HISTORY\n\nI initially wrote imapsync in July 2001 because an enterprise,\ncalled BaSystemes, paid me to install a new imap server\nwithout losing huge old mailboxes located in a far\naway remote imap server, accessible by an\noften broken low-bandwidth ISDN link.\n\nI had to verify every mailbox was well transferred, all folders, all messages,\nwithout wasting bandwidth or creating duplicates upon resyncs. The imapsync\ndesign was made with the beautiful rsync command in mind.\n\nImapsync started its life as a patch of the copy_folder.pl\nscript. The script copy_folder.pl comes from the Mail-IMAPClient-2.1.3 perl\nmodule tarball source (more precisely in the examples/ directory of the\nMail-IMAPClient tarball).\n\nSo many changes happened since then that I wonder\nif it remains any lines of the original\ncopy_folder.pl in imapsync source code.\n\n\n=cut\n\n\n# use pragmas\n#\n\nuse strict ;\nuse warnings ;\nuse Carp ;\nuse Cwd ;\nuse Compress::Zlib ;\nuse Data::Dumper ;\nuse Digest::HMAC_SHA1 qw( hmac_sha1 hmac_sha1_hex ) ;\nuse Digest::MD5  qw( md5 md5_hex md5_base64 ) ;\nuse Encode ;\nuse Encode::IMAPUTF7 ;\nuse English qw( -no_match_vars ) ;\nuse Errno qw(EAGAIN EPIPE ECONNRESET) ;\nuse Fcntl ;\nuse File::Basename ;\nuse File::Copy::Recursive ;\nuse File::Glob qw( :glob ) ;\nuse File::Path qw( mkpath rmtree ) ;\nuse File::Spec ;\nuse File::stat ;\nuse Getopt::Long (  ) ;\nuse IO::File ;\nuse IO::Socket qw( :crlf SOL_SOCKET SO_KEEPALIVE ) ;\nuse IO::Socket::INET6 ;\nuse IO::Socket::SSL ;\nuse IO::Tee ;\nuse IPC::Open3 'open3' ;\n#use locale ;\nuse Mail::IMAPClient 3.30 ;\nuse MIME::Base64 ;\nuse Pod::Usage qw(pod2usage) ;\nuse POSIX qw( uname SIGALRM :sys_wait_h ) ;\nuse Sys::Hostname ;\nuse Term::ReadKey ;\nuse Test::More ;\nuse Time::HiRes qw( time sleep ) ;\nuse Time::Local ;\nuse Unicode::String ;\nuse Readonly ;\nuse Sys::MemInfo ;\nuse Regexp::Common ;\nuse Text::ParseWords ; # for quotewords()\nuse File::Tail ;\n\n\n\nlocal $OUTPUT_AUTOFLUSH = 1 ;\n\n# constants\n\n# Let us do like sysexits.h\n# /usr/include/sysexits.h\n# and https://www.tldp.org/LDP/abs/html/exitcodes.html\n\n# Should avoid 2 126 127 128..128+64=192 255\n# Should use   0 1 3..125 193..254\n\nReadonly my $EX_OK          => 0  ; #/* successful termination */\nReadonly my $EX_USAGE       => 64 ; #/* command line usage error */\n#Readonly my $EX_DATAERR     => 65 ; #/* data format error */\nReadonly my $EX_NOINPUT     => 66 ; #/* cannot open input */\n#Readonly my $EX_NOUSER      => 67 ; #/* addressee unknown */\n#Readonly my $EX_NOHOST      => 68 ; #/* host name unknown */\nReadonly my $EX_UNAVAILABLE => 69 ; #/* service unavailable */\nReadonly my $EX_SOFTWARE    => 70 ; #/* internal software error */\n#Readonly my $EX_OSERR       => 71 ; #/* system error (e.g., can't fork) */\n#Readonly my $EX_OSFILE      => 72 ; #/* critical OS file missing */\n#Readonly my $EX_CANTCREAT   => 73 ; #/* can't create (user) output file */\n#Readonly my $EX_IOERR       => 74 ; #/* input/output error */\n#Readonly my $EX_TEMPFAIL    => 75 ; #/* temp failure; user is invited to retry */\n#Readonly my $EX_PROTOCOL    => 76 ; #/* remote error in protocol */\n#Readonly my $EX_NOPERM      => 77 ; #/* permission denied */\n#Readonly my $EX_CONFIG      => 78 ; #/* configuration error */\n\n# Mine\nReadonly my $EXIT_CATCH_ALL              =>   1 ; # Any other error\nReadonly my $EXIT_BY_SIGNAL              =>   6 ; # Should be 128+n where n is the sig_num\nReadonly my $EXIT_BY_FILE                =>   7 ;\nReadonly my $EXIT_PID_FILE_ERROR         =>   8 ;\nReadonly my $EXIT_CONNECTION_FAILURE     =>  10 ;\nReadonly my $EXIT_TLS_FAILURE            =>  12 ;\nReadonly my $EXIT_AUTHENTICATION_FAILURE =>  16 ;\nReadonly my $EXIT_SUBFOLDER1_NO_EXISTS   =>  21 ;\nReadonly my $EXIT_WITH_ERRORS            => 111 ;\nReadonly my $EXIT_WITH_ERRORS_MAX        => 112 ;\nReadonly my $EXIT_OVERQUOTA              => 113 ;\nReadonly my $EXIT_ERR_APPEND             => 114 ;\nReadonly my $EXIT_ERR_FETCH              => 115 ;\nReadonly my $EXIT_ERR_CREATE             => 116 ;\nReadonly my $EXIT_ERR_SELECT             => 117 ;\nReadonly my $EXIT_TRANSFER_EXCEEDED      => 118 ;\n\nReadonly my $EXIT_ERR_APPEND_VIRUS       => 119 ;\nReadonly my $EXIT_ERR_FLAGS              => 120 ;\n\nReadonly my $EXIT_TESTS_FAILED           => 254 ; # Like Test::More API\n\nReadonly my $EXIT_CONNECTION_FAILURE_HOST1     =>  101 ;\nReadonly my $EXIT_CONNECTION_FAILURE_HOST2     =>  102 ;\nReadonly my $EXIT_AUTHENTICATION_FAILURE_USER1 =>  161 ;\nReadonly my $EXIT_AUTHENTICATION_FAILURE_USER2 =>  162 ;\n\n\nReadonly my %EXIT_TXT => (\n        $EX_OK                       => 'EX_OK: successful termination',\n        $EX_USAGE                    => 'EX_USAGE: command line usage error',\n        $EX_NOINPUT                  => 'EX_NOINPUT: cannot open input',\n        $EX_UNAVAILABLE              => 'EX_UNAVAILABLE: service unavailable',\n        $EX_SOFTWARE                 => 'EX_SOFTWARE: internal software error',\n\n        $EXIT_CATCH_ALL              => 'EXIT_CATCH_ALL',\n        $EXIT_BY_SIGNAL              => 'EXIT_BY_SIGNAL',\n        $EXIT_BY_FILE                => 'EXIT_BY_FILE',\n        $EXIT_PID_FILE_ERROR         => 'EXIT_PID_FILE_ERROR' ,\n        $EXIT_CONNECTION_FAILURE     => 'EXIT_CONNECTION_FAILURE',\n        $EXIT_TLS_FAILURE            => 'EXIT_TLS_FAILURE',\n        $EXIT_AUTHENTICATION_FAILURE => 'EXIT_AUTHENTICATION_FAILURE',\n        $EXIT_SUBFOLDER1_NO_EXISTS   => 'EXIT_SUBFOLDER1_NO_EXISTS',\n        $EXIT_WITH_ERRORS            => 'EXIT_WITH_ERRORS',\n        $EXIT_WITH_ERRORS_MAX        => 'EXIT_WITH_ERRORS_MAX',\n        $EXIT_OVERQUOTA              => 'EXIT_OVERQUOTA',\n        $EXIT_ERR_APPEND             => 'EXIT_ERR_APPEND',\n        $EXIT_ERR_APPEND_VIRUS       => 'EXIT_ERR_APPEND_VIRUS',\n        $EXIT_ERR_FETCH              => 'EXIT_ERR_FETCH',\n        $EXIT_ERR_FLAGS              => 'EXIT_ERR_FLAGS',\n        $EXIT_ERR_CREATE             => 'EXIT_ERR_CREATE',\n        $EXIT_ERR_SELECT             => 'EXIT_ERR_SELECT',\n        $EXIT_TESTS_FAILED           => 'EXIT_TESTS_FAILED',\n        $EXIT_TRANSFER_EXCEEDED      => 'EXIT_TRANSFER_EXCEEDED',\n        $EXIT_CONNECTION_FAILURE_HOST1 => 'EXIT_CONNECTION_FAILURE_HOST1',\n        $EXIT_CONNECTION_FAILURE_HOST2 => 'EXIT_CONNECTION_FAILURE_HOST2',\n        $EXIT_AUTHENTICATION_FAILURE_USER1 => 'EXIT_AUTHENTICATION_FAILURE_USER1',\n        $EXIT_AUTHENTICATION_FAILURE_USER2 => 'EXIT_AUTHENTICATION_FAILURE_USER2',\n) ;\n\n\nReadonly my %EXIT_VALUE_OF_ERR_TYPE => (\n        ERR_APPEND_SIZE  => $EXIT_ERR_APPEND,\n        ERR_OVERQUOTA    => $EXIT_OVERQUOTA,\n        ERR_APPEND       => $EXIT_ERR_APPEND,\n        ERR_APPEND_VIRUS => $EXIT_ERR_APPEND_VIRUS,\n        ERR_CREATE       => $EXIT_ERR_CREATE,\n        ERR_SELECT       => $EXIT_ERR_SELECT,\n        ERR_Host1_FETCH  => $EXIT_ERR_FETCH,\n        ERR_FLAGS        => $EXIT_ERR_FLAGS,\n        ERR_UNCLASSIFIED => $EXIT_WITH_ERRORS,\n        ERR_NOTHING_REPORTED  => $EXIT_WITH_ERRORS,\n        ERR_TRANSFER_EXCEEDED => $EXIT_TRANSFER_EXCEEDED,\n        ERR_CONNECTION_FAILURE_HOST1 => $EXIT_CONNECTION_FAILURE_HOST1,\n        ERR_CONNECTION_FAILURE_HOST2 => $EXIT_CONNECTION_FAILURE_HOST2,\n        ERR_AUTHENTICATION_FAILURE_USER1 => $EXIT_AUTHENTICATION_FAILURE_USER1,\n        ERR_AUTHENTICATION_FAILURE_USER2 => $EXIT_AUTHENTICATION_FAILURE_USER2,\n        ERR_EXIT_TLS_FAILURE             => $EXIT_TLS_FAILURE,\n) ;\n\n\n\nReadonly my %COMMENT_OF_ERR_TYPE => (\n        ERR_APPEND_SIZE                  => \\&comment_err_append_size,\n        ERR_OVERQUOTA                    => \\&comment_err_overquota,\n        ERR_APPEND                       => \\&comment_err_blank,\n        ERR_APPEND_VIRUS                 => \\&comment_err_blank,\n        ERR_CREATE                       => \\&comment_err_blank,\n        ERR_SELECT                       => \\&comment_err_blank,\n        ERR_Host1_FETCH                  => \\&comment_err_blank,\n        ERR_FLAGS                        => \\&comment_err_flags,\n        ERR_UNCLASSIFIED                 => \\&comment_err_blank,\n        ERR_NOTHING_REPORTED             => \\&comment_err_blank,\n        ERR_TRANSFER_EXCEEDED            => \\&comment_err_transfer_exceeded,\n        ERR_CONNECTION_FAILURE_HOST1     => \\&comment_err_connection_failure_host1,\n        ERR_CONNECTION_FAILURE_HOST2     => \\&comment_err_connection_failure_host2,\n        ERR_AUTHENTICATION_FAILURE_USER1 => \\&comment_err_authentication_failure_host1,\n        ERR_AUTHENTICATION_FAILURE_USER2 => \\&comment_err_authentication_failure_host2,\n        ERR_EXIT_TLS_FAILURE             => \\&comment_err_blank,\n) ;\n\n\nsub comment_err_blank\n{\n        return '' ;\n}\n\n\nsub comment_err_append_size\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = \"The destination server refuses too big messages. Use --truncmess option. Read https://imapsync.lamiral.info/FAQ.d/FAQ.Messages_Too_Big.txt\" ;\n        return $comment ;\n}\n\n\nsub comment_err_authentication_failure_host1\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = \"Check the credentials for $mysync->{ user1 }.\" ;\n        return $comment ;\n}\n\nsub comment_err_authentication_failure_host2\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = \"Check the credentials for $mysync->{ user2 }.\" ;\n        return $comment ;\n}\n\n\nsub comment_err_connection_failure_host1\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = \"Check that host1 $mysync->{ host1 } on port $mysync->{ port1 } is the right IMAP server to be contacted for your mailbox.\" ;\n        return $comment ;\n}\n\nsub comment_err_connection_failure_host2\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = \"Check that host1 $mysync->{ host2 } on port $mysync->{ port2 } is the right IMAP server to be contacted for your mailbox.\" ;\n        return $comment ;\n}\n\nsub comment_err_overquota\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = 'The destination mailbox is 100% full, get free space on it and then resume the sync.' ;\n        return $comment ;\n}\n\n\nsub comment_err_transfer_exceeded\n{\n        my $mysync = shift @ARG ;\n\n        my $size_limit_human = bytes_display_string_dec( $mysync->{ exitwhenover } ) ;\n        my $comment = \"The maximum transfer size for a single sync is reached ( over $size_limit_human ). Relaunch the sync to sync more.\" ;\n        return $comment ;\n}\n\nsub comment_err_flags\n{\n        my $mysync = shift @ARG ;\n\n        my $comment = 'Many STORE errors with FLAGS. Retry with the option --noresyncflags' ;\n        return $comment ;\n}\n\n\n\nReadonly my $DEFAULT_LOGDIR => 'LOG_imapsync' ;\n\nReadonly my $ERRORS_MAX     =>  50 ; # exit after 50 errors.\nReadonly my $ERRORS_MAX_CGI =>  20 ; # exit after 20 errors in CGI context.\n\n\n\nReadonly my $INTERVAL_TO_EXIT => 2 ; # interval max to exit instead of reconnect\n\nReadonly my $SPLIT        => 100 ; # By default, 100 at a time, not more.\nReadonly my $SPLIT_FACTOR =>  10 ; # init_imap() calls Maxcommandlength( $SPLIT_FACTOR * $split )\n                                   # which means default Maxcommandlength is 10*100 = 1000 characters ;\n\nReadonly my $IMAP_PORT     => 143 ; # Well know port for IMAP\nReadonly my $IMAP_SSL_PORT => 993 ; # Well know port for IMAP over SSL\n\nReadonly my $LAST => -1 ;\nReadonly my $MINUS_ONE => -1 ;\nReadonly my $MINUS_TWO => -2 ;\n\nReadonly my $RELEASE_NUMBER_EXAMPLE_1 => '1.351' ;\nReadonly my $RELEASE_NUMBER_EXAMPLE_2 => 42.4242 ;\n\nReadonly my $TCP_PING_TIMEOUT => 5 ;\nReadonly my $DEFAULT_TIMEOUT => 120 ;\nReadonly my $DEFAULT_NB_RECONNECT_PER_IMAP_COMMAND => 3 ;\n\nReadonly my $DEFAULT_BUFFER_SIZE => 4096 ;\n\nReadonly my $MAX_SLEEP => 2 ; # 2 seconds max for limiting too long sleeps from --maxbytespersecond and --maxmessagespersecond\n\nReadonly my $DEFAULT_EXPIRATION_TIME_OAUTH2_PK12 => 3600 ;\n\nReadonly my $PERMISSION_FILTER => 7777 ;\n\nReadonly my $KIBI => 1024 ;\n\nReadonly my $NUMBER_10 => 10 ;\nReadonly my $NUMBER_42 => 42 ;\nReadonly my $NUMBER_100 => 100 ;\nReadonly my $NUMBER_200 => 200 ;\nReadonly my $NUMBER_300 => 300 ;\nReadonly my $NUMBER_123456 => 123_456 ;\nReadonly my $NUMBER_654321 => 654_321 ;\n\nReadonly my $NUMBER_20_000 => 20_000 ;\n\nReadonly my $QUOTA_PERCENT_LIMIT => 90 ;\n\nReadonly my $NUMBER_104_857_600 => 104_857_600 ;\n\nReadonly my $SIZE_MAX_STR => 64 ;\n\nReadonly my $NB_SECONDS_IN_A_DAY => 86_400 ;\n\nReadonly my $STD_CHAR_PER_LINE => 80 ;\n\nReadonly my $TRUE  => 1 ;\nReadonly my $FALSE => 0 ;\n\nReadonly my $LAST_RESSORT_SEPARATOR => q{/} ;\n\nReadonly my $CGI_TMPDIR_TOP => '/var/tmp/imapsync_cgi' ;\nReadonly my $CGI_HASHFILE   => '/var/tmp/imapsync_hash' ;\nReadonly my $UMASK_PARANO   => '0077' ;\n\nReadonly my $STR_use_releasecheck => q{Check if a new imapsync release is available by adding --releasecheck} ;\n\nReadonly my $GMAIL_MAXSIZE => 35_651_584 ;\n\nReadonly my $FORCE => 1 ;\n\n# if ( 'MSWin32' eq $OSNAME )\n# if ( 'darwin' eq $OSNAME )\n# if ( 'linux' eq $OSNAME )\n\n\n\n# global variables\n# Currently working to finish with only $sync, $acc1, $acc2\n# Not finished yet...\n\nmy(\n        $sync, $acc1, $acc2,\n        $debugflags,\n        $debuglist, $debugdev, $debugmaxlinelength, $debugcgi,\n        @include, @exclude, @folderrec,\n        @folderfirst, @folderlast,\n        @h1_folders_all, %h1_folders_all,\n        @h2_folders_all, %h2_folders_all,\n        @h2_folders_from_1_wanted, %h2_folders_from_1_all,\n        %requested_folder,\n        $h1_folders_wanted_nb, $h1_folders_wanted_ct,\n        @h2_folders_not_in_1,\n        %h1_subscribed_folder, %h2_subscribed_folder,\n        %h2_folders_from_1_wanted,\n        %h2_folders_from_1_several,\n        $prefix1, $prefix2,\n        @regexmess, @skipmess, @pipemess, $pipemesscheck,\n        $syncflagsaftercopy,\n        $syncinternaldates,\n        $idatefromheader,\n        $minsize, $maxage, $minage,\n        $search,\n        @useheader, %useheader,\n        $skipsize, $allowsizemismatch, $buffersize,\n        $authmd5, $authmd51, $authmd52,\n        $subscribed, $subscribe, $subscribeall,\n        $help,\n        $nb_msg_skipped_dry_mode,\n        $h2_nb_msg_noheader,\n        $h1_bytes_processed,\n        $h1_nb_msg_end, $h1_bytes_end,\n        $h2_nb_msg_end, $h2_bytes_end,\n        $timestart_int,\n        $uid1, $uid2,\n        $split1, $split2,\n        $modulesversion,\n        $delete2folders, $delete2foldersonly, $delete2foldersbutnot,\n        $usecache, $debugcache, $cacheaftercopy,\n        $wholeheaderifneeded, %h1_msgs_copy_by_uid, $useuid, $h2_uidguess,\n        $checkmessageexists,\n        $messageidnodomain,\n        $fixInboxINBOX,\n        $maxlinelength, $maxlinelengthcmd,\n        $minmaxlinelength,\n        $fixcolonbug,\n        $create_folder_old,\n        $skipcrossduplicates, $debugcrossduplicates,\n        $disarmreadreceipts,\n        $mixfolders,\n        $fetch_hash_set,\n        $cgidir,\n        %month_abrev,\n        $SSL_VERIFY_POLICY,\n) ;\n\nsingle_sync( $sync, $acc1, $acc2 );\n\n\n\nsub single_sync\n{\n\n# main program\n# global variables initialization\n\n# I'm currently removing all global variables except $sync $acc1 $acc2\n# passing each of them under\n# $sync->{variable_name}\n# or $acc1->{variable_name}\n# or $acc1->{variable_name}\n\n#\n$acc1 = {} ;\n$acc2 = {} ;\n$sync->{ acc1 } = $acc1 ;\n$sync->{ acc2 } = $acc2 ;\n\n$acc1->{ Side } = 'Host1' ;\n$acc2->{ Side } = 'Host2' ;\n$acc1->{ N } = '1' ;\n$acc2->{ N } = '2' ;\n\n$sync->{timestart} = time ; # Is a float because of use Time::HiRres\n\n$sync->{rcs} = q{$Id: imapsync,v 2.178 2022/01/12 21:28:37 gilles Exp gilles $} ;\n\n$sync->{ memory_consumption_at_start } = memory_consumption(  ) || 0 ;\n\n\n\nmy @loadavg = loadavg(  ) ;\n\n$sync->{ cpu_number } = cpu_number(  ) ;\n$sync->{ loaddelay } = load_and_delay( $sync->{ cpu_number }, @loadavg ) ;\n$sync->{ loaddelay } = 0 ;\n\n$sync->{ loadavg } = join( q{ }, $loadavg[ 0 ] )\n                   . \" on $sync->{cpu_number} cores and \"\n                   . ram_memory_info(  ) ;\n\n\n\n$sync->{ total_bytes_transferred } = 0 ;\n$sync->{ total_bytes_skipped } = 0 ;\n$sync->{ nb_msg_transferred } = 0 ;\n$sync->{ nb_msg_skipped } = $nb_msg_skipped_dry_mode = 0 ;\n\n$sync->{ acc1 }->{ nb_msg_deleted } = 0 ;\n$sync->{ acc2 }->{ nb_msg_deleted } = 0 ;\n\n$sync->{ acc1 }->{ nb_msg_duplicate } = 0 ;\n$sync->{ acc2 }->{ nb_msg_duplicate } = 0 ;\n\n$sync->{ h1_nb_msg_noheader } = 0 ;\n$h2_nb_msg_noheader = 0 ;\n\n\n$sync->{ h1_nb_msg_start }  = 0 ;\n$sync->{ h1_bytes_start }   = 0 ;\n$sync->{ h2_nb_msg_start }  = 0 ;\n$sync->{ h2_bytes_start }   = 0 ;\n$sync->{ h1_nb_msg_processed } = $h1_bytes_processed = 0 ;\n\n$sync->{ h2_nb_msg_crossdup } = 0 ;\n\n#$h1_nb_msg_end = $h1_bytes_end = 0 ;\n#$h2_nb_msg_end = $h2_bytes_end = 0 ;\n\n$sync->{ nb_errors } = 0;\n$sync->{ biggest_message_transferred } = 0;\n\n%month_abrev = (\n   Jan => '00',\n   Feb => '01',\n   Mar => '02',\n   Apr => '03',\n   May => '04',\n   Jun => '05',\n   Jul => '06',\n   Aug => '07',\n   Sep => '08',\n   Oct => '09',\n   Nov => '10',\n   Dec => '11',\n);\n\n\n\n# Just create a CGI object if under cgi context only.\n# Needed for the get_options() call\ncgibegin( $sync ) ;\n\n# In cgi context, printing must start by the header so we delay other prints by using output() storage\nmy $options_good = get_options( $sync, @ARGV ) ;\n# Is it the first myprint?\ncgibuildheader( $sync ) ;\ndocker_context( $sync ) ;\n\nprint_output_if_needed( $sync ) ;\n\n\noutput_reset_with( $sync ) ;\n\n# don't go on if options are not all known.\nif ( ! defined $options_good ) { exit $EX_USAGE ; }\n\n# If you want releasecheck not to be done by default (like the github maintainer),\n# then just uncomment the first \"$sync->{releasecheck} =\" line, the line ending with \"0 ;\",\n# the second line (ending with \"1 ;\") can then stay active or be commented,\n# the result will be the same: no releasecheck by default (because 0 is then the defined value).\n\n#$sync->{releasecheck} = defined  $sync->{releasecheck}  ? $sync->{releasecheck} : 0 ;\n$sync->{releasecheck} = defined  $sync->{releasecheck}  ? $sync->{releasecheck} : 1 ;\n\n# just the version\nif ( $sync->{ version } ) {\n        myprint( imapsync_version( $sync ), \"\\n\" ) ;\n        return 0 ;\n}\n\n#$sync->{debugenv} = 1 ;\n$sync->{debugenv} and printenv( $sync ) ; # if option --debugenv\nload_modules(  ) ;\n\n# after_get_options call usage and exit if --help or options were not well got\nafter_get_options( $sync, $options_good ) ;\n\n#local $ENV{TZ} = 'GMT' if ( under_cgi_context( $sync ) and 'MSWin32' ne $OSNAME ) ;\n#output( $sync, localtime(time) . \" \" . gmtime(time) . \"\\n\" ) ;\n\n# Under CGI environment, fix caveat emptor potential issues\ncgisetcontext( $sync ) ;\n\nget_options_extra( $sync ) ;\n\n# --gmail --gmail --exchange --office etc.\neasyany( $sync ) ;\n\n$sync->{ sanitize } = defined $sync->{ sanitize } ? $sync->{ sanitize } : 1 ;\nsanitize( $sync ) ;\n\n$sync->{ tmpdir } ||= File::Spec->tmpdir(  ) ;\n\n# Unit tests\nmy $unittestssuite = unittestssuite( $sync ) ;\n\n\nif ( condition_to_leave_after_tests( $sync ) )\n{\n        return $unittestssuite ;\n}\n\n# init live varaiables\n\nif ( $sync->{ testslive } )\n{\n        testslive_init( $sync ) ;\n}\n\nif ( $sync->{ testslive6 } )\n{\n        testslive6_init( $sync ) ;\n}\n\ndefine_pidfile( $sync ) ;\nif ( $sync->{ abortbyfile } ) { $sync->{ abort } = 1 ; }\n\ninstall_signals( $sync ) ;\n\n$sync->{ log }        = defined $sync->{ log }        ? $sync->{ log }        :  1 ;\n$sync->{ errorsdump } = defined $sync->{ errorsdump } ? $sync->{ errorsdump } :  1 ;\n$sync->{ errorsmax }  = defined $sync->{ errorsmax }  ? $sync->{ errorsmax }  : $ERRORS_MAX ;\n\n# log and output\nbinmode STDOUT, \":encoding(UTF-8)\" ;\n\n\nif ( $sync->{ log } ) {\n        setlogfile( $sync ) ;\n        teelaunch( $sync ) ;\n        # now $sync->{tee} is a filehandle to STDOUT and the logfile\n}\n\n#binmode STDERR, \":encoding(UTF-8)\" ;\n# STDERR goes to the same place: LOG and STDOUT (if logging is on)\n# Useful only for --debugssl\n$sync->{tee} and local *STDERR = *${$sync->{tee}}{IO} ;\n\n\n\n$timestart_int = int( $sync->{timestart} ) ;\n$sync->{timebefore} = $sync->{timestart} ;\n\n\n$sync->{ timestart_str } = localtimez( $sync->{timestart} ) ;\n\n# The prints in the log starts here\n\nmyprint( localhost_info( $sync ), \"\\n\" ) ;\nmyprint( \"Transfer started at $sync->{ timestart_str }\\n\" ) ;\nmyprint( \"PID is $PROCESS_ID my PPID is \", mygetppid(  ), \"\\n\" ) ;\nannouncelogfile( $sync ) ;\nmyprint( \"Load is \" . ( join( q{ }, loadavg(  ) ) || 'unknown' ), \" on $sync->{cpu_number} cores\\n\" ) ;\n#myprintf( \"Memory consumption so far: %.1f MiB\\n\", memory_consumption(  ) / $KIBI / $KIBI ) ;\nmyprint( 'Current directory is ' . getcwd(  ) . \"\\n\" ) ;\nmyprint( 'Real user id is ' . getpwuid_any_os( $REAL_USER_ID ) . \" (uid $REAL_USER_ID)\\n\" ) ;\nmyprint( 'Effective user id is ' . getpwuid_any_os( $EFFECTIVE_USER_ID ). \" (euid $EFFECTIVE_USER_ID)\\n\" ) ;\n\n$modulesversion = defined  $modulesversion  ? $modulesversion : 1 ;\n\n$sync->{ warn_release } = ( $sync->{ releasecheck } ) ? check_last_release(  ) : $STR_use_releasecheck ;\n\n\n$wholeheaderifneeded  = defined  $wholeheaderifneeded   ? $wholeheaderifneeded  : 1;\n\n# Activate --usecache if --useuid is set and there is no --nousecache\n$usecache = 1 if ( $useuid and ( ! defined  $usecache   ) ) ;\n$cacheaftercopy = 1 if ( $usecache and ( ! defined  $cacheaftercopy  ) ) ;\n\n\n\n\n$sync->{ checkfoldersexist } = defined $sync->{ checkfoldersexist } ? $sync->{ checkfoldersexist } : 1 ;\n$checkmessageexists = defined  $checkmessageexists  ? $checkmessageexists : 0 ;\n$sync->{ expungeaftereach }   = defined  $sync->{ expungeaftereach }  ? $sync->{ expungeaftereach } : 1 ;\n\n# abletosearch is on by default\n$sync->{abletosearch}    = defined  $sync->{abletosearch}   ? $sync->{abletosearch} : 1 ;\n$sync->{abletosearch1}   = defined  $sync->{abletosearch1}  ? $sync->{abletosearch1} : $sync->{abletosearch} ;\n$sync->{abletosearch2}   = defined  $sync->{abletosearch2}  ? $sync->{abletosearch2} : $sync->{abletosearch} ;\n$checkmessageexists      = 0 if ( not $sync->{abletosearch1} ) ;\n\n\n$sync->{ trylogin } = defined $sync->{ trylogin } ? $sync->{ trylogin } : 1 ;\n$sync->{showpasswords}   = defined  $sync->{showpasswords}  ? $sync->{showpasswords} : 0 ;\n$sync->{ fixslash2 }     = defined  $sync->{ fixslash2 }  ? $sync->{ fixslash2 } : 1 ;\n$fixInboxINBOX      = defined  $fixInboxINBOX  ? $fixInboxINBOX : 1 ;\n$create_folder_old  = defined  $create_folder_old  ? $create_folder_old : 0 ;\n$mixfolders         = defined  $mixfolders  ? $mixfolders : 1 ;\n$sync->{automap}    = defined  $sync->{automap}  ? $sync->{automap} : 0 ;\n\n$sync->{ delete2duplicates } = 1 if ( $sync->{ delete2 } and ( ! defined  $sync->{ delete2duplicates }  ) ) ;\n\n$sync->{maxmessagespersecond} = defined  $sync->{maxmessagespersecond}  ? $sync->{maxmessagespersecond} : 0 ;\n$sync->{maxbytespersecond}    = defined  $sync->{maxbytespersecond}     ? $sync->{maxbytespersecond}    : 0 ;\n\n$sync->{sslcheck} = defined $sync->{sslcheck} ? $sync->{sslcheck} : 1 ;\n\nmyprint( banner_imapsync( $sync, @ARGV ) ) ;\n\nmyprint( \"Temp directory is $sync->{ tmpdir } ( to change it use --tmpdir dirpath )\\n\" ) ;\n\nmyprint( output( $sync ) ) ;\noutput_reset_with( $sync ) ;\n\ndo_valid_directory( $sync->{ tmpdir } ) || croak \"Error creating tmpdir $sync->{ tmpdir } : $OS_ERROR\" ;\n\nremove_pidfile_not_running( $sync->{ pidfile } ) ;\n\n# if another imapsync is running then tail -f its logfile and exit\n# useful in cgi context\nif ( $sync->{ tail } and tail( $sync ) )\n{\n        exit_clean( $sync, $EX_OK, \"Tail -f finished. Now finishing myself processus $PROCESS_ID\\n\" ) ;\n        exit $EX_OK ;\n}\n\nif ( ! write_pidfile( $sync ) ) {\n        myprint( \"Exiting with return value $EXIT_PID_FILE_ERROR ($EXIT_TXT{$EXIT_PID_FILE_ERROR}) $sync->{nb_errors}/$sync->{errorsmax} nb_errors/max_errors PID $PROCESS_ID\\n\" ) ;\n        exit $EXIT_PID_FILE_ERROR ;\n}\n\n\n# New place for abort\n# abort before simulong in order to be able to abort a simulong sync\nif ( $sync->{ abort } )\n{\n        abort( $sync ) ;\n        # well, the abort job is done, because even when not succeeded\n        # in aborting another run, this run has to end without doing any\n        # thing else\n\n        exit $EX_OK ;\n}\n\n# simulong is just a loop printing some lines for xx seconds with option \"--simulong xx\".\nsimulong( $sync ) ;\n\n\n\n# New place for cgiload 2019_03_03\n# because I want to log it\n# Can break here if load is too heavy\n# Have in mind the CGI header has already a 503 Service Unavailable\ncgiload( $sync ) ;\n\n\n$fixcolonbug = defined  $fixcolonbug  ? $fixcolonbug : 1 ;\n\nif ( $usecache and $fixcolonbug ) { tmpdir_fix_colon_bug( $sync ) } ;\n\n$modulesversion and myprint( \"Modules version list ( use --no-modulesversion to turn off printing this Perl modules list ):\\n\", modulesversion(), \"\\n\" ) ;\n\n\ncheck_lib_version( $sync ) or\n  croak \"imapsync needs perl lib Mail::IMAPClient release 3.30 or superior.\\n\";\n\n\n\nif ( $sync->{ justbanner } )\n{\n        myprint( \"Exiting because of --justbanner\\n\" ) ;\n        exit_clean( $sync, $EX_OK ) ;\n}\n\n# turn on RFC standard flags correction like \\SEEN -> \\Seen\n$sync->{ flagscase } = defined  $sync->{ flagscase }  ? $sync->{ flagscase } : 1 ;\n\n# Use PERMANENTFLAGS if available\n$sync->{ filterflags } = defined  $sync->{ filterflags }  ? $sync->{ filterflags } : 1 ;\n\nfilterbuggyflags( $sync ) ;\n\n\n# sync flags just after an APPEND, some servers ignore the flags given in the APPEND\n# like MailEnable IMAP server.\n# Off by default since it takes time.\n$syncflagsaftercopy = defined  $syncflagsaftercopy   ? $syncflagsaftercopy : 0 ;\n\n# update flags on host2 for already transferred messages\n$sync->{resyncflags} = defined  $sync->{resyncflags} ? $sync->{resyncflags} : 1 ;\nif ( $sync->{resyncflags} ) {\n        myprint( \"Info: will resync flags for already transferred messages. Use --noresyncflags to not resync flags.\\n\" ) ;\n}else{\n        myprint( \"Info: will not resync flags for already transferred messages. Use --resyncflags to resync flags.\\n\" ) ;\n}\n\n\nsslcheck( $sync ) ;\n#print Data::Dumper->Dump( [ \\$sync ] ) ;\n\n$split1 ||= $SPLIT ;\n$split2 ||= $SPLIT ;\n\n#$sync->{host1} || missing_option( $sync, '--host1' ) ;\n$sync->{host1} = sanitize_host( $sync->{host1} ) ;\n$sync->{port1} ||= ( $sync->{ssl1} ) ? $IMAP_SSL_PORT : $IMAP_PORT ;\n\n#$sync->{host2} || missing_option( $sync, '--host2' ) ;\n$sync->{host2} = sanitize_host( $sync->{host2} ) ;\n$sync->{port2} ||= ( $sync->{ssl2} ) ? $IMAP_SSL_PORT : $IMAP_PORT ;\n\n\n$acc1->{ debugimap } = $acc2->{ debugimap } = 1 if ( $sync->{ debugimap } ) ;\n# Set on debug mode if one of the imap dialogs are in debug.\n# imap dialog without the debug mode is scary and useless.\n$sync->{ debug } = 1 if ( $acc1->{ debugimap } or $acc2->{ debugimap } ) ;\n\n# By default, don't take size to compare\n$skipsize = (defined $skipsize) ? $skipsize : 1;\n\n$uid1 = defined $uid1 ? $uid1 : 1;\n$uid2 = defined $uid2 ? $uid2 : 1;\n\n$subscribe = defined $subscribe ? $subscribe : 1;\n\n# Allow size mismatch by default\n$allowsizemismatch = defined $allowsizemismatch ? $allowsizemismatch : 1;\n\n\nif ( defined  $delete2foldersbutnot  or defined  $delete2foldersonly  ) {\n\t$delete2folders = 1 ;\n}\n\n\nmy %SSL_VERIFY_STR ;\n\nReadonly $SSL_VERIFY_POLICY => IO::Socket::SSL::SSL_VERIFY_NONE(  ) ;\nReadonly %SSL_VERIFY_STR => (\n\tIO::Socket::SSL::SSL_VERIFY_NONE(  ) => 'SSL_VERIFY_NONE, ie, do not check the certificate server.' ,\n\tIO::Socket::SSL::SSL_VERIFY_PEER(  ) => 'SSL_VERIFY_PEER, ie, check the certificate server' ,\n) ;\n\n$IO::Socket::SSL::DEBUG = defined( $sync->{debugssl} ) ? $sync->{debugssl} : 1 ;\n\n\nif ( $sync->{ssl1} or $sync->{ssl2} or $sync->{tls1} or $sync->{tls2}) {\n        myprint( \"SSL debug mode level is --debugssl $IO::Socket::SSL::DEBUG (can be set from 0 meaning no debug to 4 meaning max debug)\\n\" ) ;\n}\n\nif ( $sync->{ssl1} ) {\n        myprint( qq{Host1: SSL default mode is like --sslargs1 \"SSL_verify_mode=$SSL_VERIFY_POLICY\", meaning for host1 $SSL_VERIFY_STR{$SSL_VERIFY_POLICY}\\n} ) ;\n        myprint( 'Host1: Use --sslargs1 SSL_verify_mode=' . IO::Socket::SSL::SSL_VERIFY_PEER(  ) . \" to have $SSL_VERIFY_STR{IO::Socket::SSL::SSL_VERIFY_PEER(  )} of host1\\n\" ) ;\n        # $sync->{ acc1 }->{sslargs}->{SSL_verify_mode}\n}\n\nif ( $sync->{ssl2} ) {\n        myprint( qq{Host2: SSL default mode is like --sslargs2 \"SSL_verify_mode=$SSL_VERIFY_POLICY\", meaning for host2 $SSL_VERIFY_STR{$SSL_VERIFY_POLICY}\\n} ) ;\n        myprint( 'Host2: Use --sslargs2 SSL_verify_mode=' . IO::Socket::SSL::SSL_VERIFY_PEER(  ) . \" to have $SSL_VERIFY_STR{IO::Socket::SSL::SSL_VERIFY_PEER(  )} of host2\\n\" ) ;\n}\n\n# ID on by default since 1.832\n$sync->{id} = defined  $sync->{id}  ? $sync->{id} : 1 ;\n\nif ( $sync->{justconnect}\n        or not $sync->{user1}\n        or not $sync->{user2}\n        or not $sync->{host1}\n        or not $sync->{host2}\n        )\n{\n        my $justconnect = justconnect( $sync ) ;\n\n        myprint( debugmemory( $sync, \" after justconnect() call\" ) ) ;\n        exit_clean( $sync, $EX_OK,\n                \"Exiting after a justconnect on host(s): $justconnect\\n\"\n        ) ;\n}\n\n\n#$sync->{user1} || missing_option( $sync, '--user1' ) ;\n#$sync->{user2} || missing_option( $sync, '--user2' ) ;\n\n$syncinternaldates = defined $syncinternaldates ? $syncinternaldates : 1;\n\n# Turn on expunge if there is not explicit option --noexpunge1 and option\n# --delete1 is given.\n# Done because --delete1 --noexpunge1 is very dangerous on the second run:\n# the Deleted flag is then synced to all previously transferred messages.\n# So --delete1 implies --expunge1 is a better usability default behavior.\nif ( $sync->{ delete1 } ) {\n        if ( ! defined  $sync->{ expunge1 }  ) {\n                myprint( \"Info: turning on --expunge1 because --delete1 --noexpunge1 is very dangerous on the second run.\\n\" ) ;\n                $sync->{ expunge1 } = 1 ;\n        }\n                myprint( \"Info: if expunging after each message slows down too much the sync then use --noexpungeaftereach to speed up\\n\" ) ;\n}\n\nif ( $sync->{ uidexpunge2 } and not Mail::IMAPClient->can( 'uidexpunge' ) ) {\n        myprint( \"Failure: uidexpunge not supported (IMAPClient release < 3.17), use nothing or --expunge2 instead\\n\" ) ;\n        $sync->{nb_errors}++ ;\n        exit_clean( $sync, $EX_SOFTWARE ) ;\n}\n\nif ( ( $sync->{ delete2 } or $sync->{ delete2duplicates } ) and not defined  $sync->{ uidexpunge2 }  ) {\n        if ( Mail::IMAPClient->can( 'uidexpunge' ) ) {\n                myprint( \"Info: will act as --uidexpunge2\\n\" ) ;\n                $sync->{ uidexpunge2 } = 1 ;\n        }elsif ( not defined  $sync->{ expunge2 }  ) {\n                 myprint( \"Info: will act as --expunge2 (no uidexpunge support)\\n\" ) ;\n                $sync->{ expunge2 } = 1 ;\n        }\n}\n\nif ( $sync->{ delete1 } and $sync->{ delete2 } ) {\n        myprint( \"Warning: using --delete1 and --delete2 together is almost always a bad idea. \"\n                . \"You should probably launch two runs, the first with --delete2 for a strict sync, \"\n                . \"then the second with --delete1 to remove messages from the source account. \"\n                . \"Exiting imapsync.\\n\" ) ;\n        $sync->{ nb_errors }++ ;\n        exit_clean( $sync, $EX_USAGE ) ;\n}\n\nif ( $idatefromheader ) {\n        myprint( 'Turned ON idatefromheader, ',\n              \"will set the internal dates on host2 from the 'Date:' header line.\\n\" ) ;\n        $syncinternaldates = 0 ;\n}\n\nif ( $syncinternaldates ) {\n        myprint( 'Info: turned ON syncinternaldates, ',\n              \"will set the internal dates (arrival dates) on host2 same as host1.\\n\" ) ;\n}else{\n        myprint( \"Info: turned OFF syncinternaldates\\n\" ) ;\n}\n\nif ( defined $authmd5 and $authmd5 ) {\n        $authmd51 = 1 ;\n        $authmd52 = 1 ;\n}\n\nif ( defined $authmd51 and $authmd51 ) {\n        $acc1->{ authmech } ||= 'CRAM-MD5' ;\n}\nelse{\n        $acc1->{ authmech } ||= $acc1->{ authuser } ? 'PLAIN' : 'LOGIN' ;\n}\n\nif ( defined $authmd52 and $authmd52 ) {\n        $acc2->{ authmech } ||= 'CRAM-MD5';\n}\nelse{\n        $acc2->{ authmech } ||= $acc2->{ authuser } ? 'PLAIN' : 'LOGIN';\n}\n\n$acc1->{ authmech } = uc $acc1->{ authmech } ;\n$acc2->{ authmech } = uc $acc2->{ authmech } ;\n\nif ( defined $acc1->{ proxyauth } && !$acc1->{ authuser } )\n{\n        missing_option( $sync, 'With --proxyauth1, --authuser1' ) ;\n}\n\nif ( defined $acc2->{ proxyauth } && !$acc2->{ authuser } )\n{\n        missing_option( $sync, 'With --proxyauth2, --authuser2' ) ;\n}\n\nmyprint( \"Host1: will try to use $acc1->{ authmech } authentication on host1\\n\") ;\nmyprint( \"Host2: will try to use $acc2->{ authmech } authentication on host2\\n\") ;\n\n$sync->{ timeout } = defined  $sync->{ timeout }  ?$sync->{ timeout } : $DEFAULT_TIMEOUT ;\n\n$sync->{ acc1 }->{timeout} = defined  $sync->{ acc1 }->{timeout}  ? $sync->{ acc1 }->{timeout} : $sync->{ timeout } ;\nmyprint( \"Host1: imap connection timeout is $sync->{ acc1 }->{timeout} seconds\\n\") ;\n$sync->{ acc2 }->{timeout} = defined  $sync->{ acc2 }->{timeout}  ? $sync->{ acc2 }->{timeout} : $sync->{ timeout } ;\nmyprint( \"Host2: imap connection timeout is $sync->{ acc2 }->{timeout} seconds\\n\" ) ;\n\n\nkeepalive1( $sync ) ;\nkeepalive2( $sync ) ;\n\n\nif ( under_cgi_context( $sync ) )\n{\n        myprint( \"Under CGI context, a timeout can occur from the webserver, see https://imapsync.lamiral.info/INSTALL.d/INSTALL.OnlineUI.txt\\n\" ) ;\n}\n\n$sync->{ syncacls } = defined  $sync->{ syncacls } ? $sync->{ syncacls } : 0 ;\n\n# No folders sizes at the beginning if --justfolders, unless really wanted.\nif (\n        $sync->{ justfolders }\n        and not defined $sync->{ foldersizes }\n        and not $sync->{ justfoldersizes } )\n{\n        $sync->{ foldersizes } = 0 ;\n        $sync->{ foldersizesatend } = 1 ;\n}\n\n$sync->{ foldersizes }       = ( defined  $sync->{ foldersizes } )      ? $sync->{ foldersizes }      : 1 ;\n$sync->{ foldersizesatend }  = ( defined  $sync->{ foldersizesatend } ) ? $sync->{ foldersizesatend } : $sync->{ foldersizes } ;\n\n#$sync->{ checknoabletosearch } = ( defined  $sync->{ checknoabletosearch } ) ? $sync->{ checknoabletosearch } : 1 ;\nset_checknoabletosearch( $sync ) ;\n\n\n$acc1->{ fastio } = defined  $acc1->{ fastio }  ? $acc1->{ fastio } : 0 ;\n$acc2->{ fastio } = defined  $acc2->{ fastio }  ? $acc2->{ fastio } : 0 ;\n\n\n$acc1->{ reconnectretry } = defined  $acc1->{ reconnectretry }  ? $acc1->{ reconnectretry } : $DEFAULT_NB_RECONNECT_PER_IMAP_COMMAND ;\n$acc2->{ reconnectretry } = defined  $acc2->{ reconnectretry }  ? $acc2->{ reconnectretry } : $DEFAULT_NB_RECONNECT_PER_IMAP_COMMAND ;\n\n# IMAP compression on by default\n#$acc1->{ compress } = defined  $acc1->{ compress }  ? $acc1->{ compress } : 0 ;\n#$acc2->{ compress } = defined  $acc2->{ compress }  ? $acc2->{ compress } : 0 ;\n\n\n\nif ( ! @useheader ) { @useheader = qw( Message-Id Received )  ; }\n\n# Make a hash %useheader of each --useheader 'key' in uppercase\nfor ( @useheader ) { $sync->{useheader}->{ uc  $_  } = undef } ;\n\n#myprint( Data::Dumper->Dump( [ \\%useheader ] )  ) ;\n#exit ;\n\nmyprint( \"Host1: IMAP server [$sync->{host1}] port [$sync->{port1}] user [$sync->{user1}]\\n\" ) ;\nmyprint( \"Host2: IMAP server [$sync->{host2}] port [$sync->{port2}] user [$sync->{user2}]\\n\" ) ;\n\nget_password1( $sync ) ;\nget_password2( $sync ) ;\n\n# --dry1 make imapsync not fetching messages from host1, it is on when --dry is on.\n# Use --dry --nodry1 to make imapsync fetching messages from host1,\n# It is useful when debugging transformation options like --pipemess or --regexmess\n$sync->{dry1} = defined $sync->{dry1} ? $sync->{dry1} : $sync->{dry} ;\n\n$sync->{dry_message} = q{} ;\nif( $sync->{dry} ) {\n        $sync->{dry_message} = \"\\t(not really since --dry mode)\" ;\n}\n\n$sync->{ search1 } ||= $search if ( $search ) ;\n$sync->{ search2 } ||= $search if ( $search ) ;\n\nif ( $disarmreadreceipts )\n{\n        push @regexmess, q{s{\\A((?:[^\\n]+\\r\\n)+|)(^Disposition-Notification-To:[^\\n]*\\n)(\\r?\\n|.*\\n\\r?\\n)}{$1X-$2$3}ims} ;\n}\n\n$pipemesscheck = ( defined  $pipemesscheck  ) ? $pipemesscheck : 1 ;\n\nif ( @pipemess and $pipemesscheck ) {\n        myprint( 'Checking each --pipemess command, '\n                . join( q{, }, @pipemess )\n                . \", with an space string. ( Can avoid this check with --nopipemesscheck )\\n\" ) ;\n        my $string = pipemess( q{ }, @pipemess ) ;\n        # string undef means something was bad.\n        if ( not ( defined  $string  ) ) {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EX_USAGE,\n                        \"Error: one of --pipemess command is bad, check it\\n\"\n                ) ;\n        }\n        myprint( \"Ok with each --pipemess @pipemess\\n\"  ) ;\n}\n\nif ( $maxlinelengthcmd ) {\n        myprint( \"Checking --maxlinelengthcmd command,\n                $maxlinelengthcmd, with an space string.\\n\"\n        ) ;\n        my $string = pipemess( q{ }, $maxlinelengthcmd ) ;\n        # string undef means something was bad.\n        if ( not ( defined  $string  ) ) {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EX_USAGE,\n                \"Error: --maxlinelengthcmd command is bad, check it\\n\"\n                ) ;\n        }\n        myprint( \"Ok with --maxlinelengthcmd $maxlinelengthcmd\\n\"  ) ;\n}\n\nif ( @regexmess ) {\n        my $string = regexmess( q{ } ) ;\n        myprint( \"Checking each --regexmess command with an space string.\\n\"  ) ;\n        # string undef means one of the eval regex was bad.\n        if ( not ( defined  $string  ) ) {\n                #errors_incr( $sync, 'Warning: one of --regexmess option may be bad, check them' ) ;\n                exit_clean( $sync, $EX_USAGE,\n                        \"Error: one of --regexmess option is bad, check it\\n\"\n                ) ;\n        }\n        myprint( \"Ok with each --regexmess\\n\"  ) ;\n}\n\nif ( @skipmess ) {\n        myprint( \"Checking each --skipmess command with an space string.\\n\"  ) ;\n        my $match = skipmess( q{ } ) ;\n        # match undef means one of the eval regex was bad.\n        if ( not ( defined  $match  ) ) {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EX_USAGE,\n                        \"Error: one of --skipmess option is bad, check it\\n\"\n                ) ;\n        }\n        myprint( \"Ok with each --skipmess\\n\"  ) ;\n}\n\nif ( $sync->{ regexflag } ) {\n        myprint( \"Checking each --regexflag command with an space string.\\n\"  ) ;\n        my $string = regexflags( $sync, q{ } ) ;\n        # string undef means one of the eval regex was bad.\n        if ( not ( defined  $string  ) ) {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EX_USAGE,\n                        \"Error: one of --regexflag option is bad, check it\\n\"\n                ) ;\n        }\n        myprint( \"Ok with each --regexflag\\n\"  ) ;\n}\n\n$sync->{imap1} = login_imap( $sync->{host1}, $sync->{port1}, $sync->{user1}, $sync->{password1},\n                   $sync->{ssl1}, $sync->{tls1},\n                   $uid1, $split1, $sync->{ acc1 }, $sync ) ;\n\n$sync->{imap2} = login_imap( $sync->{host2}, $sync->{port2}, $sync->{user2}, $sync->{password2},\n                 $sync->{ssl2}, $sync->{tls2},\n                 $uid2, $split2, $sync->{ acc2 }, $sync ) ;\n\n\n$sync->{ debug } and $sync->{imap1} and myprint( 'Host1 Buffer I/O: ', $sync->{imap1}->Buffer(), \"\\n\" ) ;\n$sync->{ debug } and $sync->{imap2} and myprint( 'Host2 Buffer I/O: ', $sync->{imap2}->Buffer(), \"\\n\" ) ;\n\n\nif ( ! $sync->{imap1} || ! $sync->{imap2} )\n{\n        exit_most_errors( $sync ) ;\n}\n\n\nmyprint( \"Host1: state Authenticated\\n\" ) ;\nmyprint( \"Host2: state Authenticated\\n\" ) ;\n\nmyprint( 'Host1 capability once authenticated: ', join(q{ }, @{ $sync->{imap1}->capability() || [] }), \"\\n\" ) ;\n\n#myprint( Data::Dumper->Dump( [ $sync->{imap1} ] )  ) ;\n#myprint( \"imap4rev1: \" . $sync->{imap1}->imap4rev1() . \"\\n\" ) ;\n\nmyprint( 'Host2 capability once authenticated: ', join(q{ }, @{ $sync->{imap2}->capability() || [] }), \"\\n\" ) ;\n\nimap_id_stuff( $sync ) ;\n\n#quota( $sync, $sync->{imap1}, 'h1' ) ; # quota on host1 is useless and pollute host2 output.\nquota( $sync, $sync->{imap2}, 'h2' )  ;\n\nmaxsize_setting( $sync ) ;\n\nacc_compress_imap( $acc1 ) ;\nacc_compress_imap( $acc2 ) ;\n\nif ( $sync->{ justlogin } ) {\n        $sync->{imap1}->logout(  ) ;\n        $sync->{imap2}->logout(  ) ;\n        exit_clean( $sync, $EX_OK, \"Exiting because of --justlogin\\n\" ) ;\n}\n\n\n#\n# Folder stuff\n#\n\n$h1_folders_wanted_nb = 0 ; # counter of folders to be done.\n$h1_folders_wanted_ct = 0 ; # counter of folders done.\n\n# All folders on host1 and host2\n\n@h1_folders_all = sort $sync->{imap1}->folders(  ) ;\n@h2_folders_all = sort $sync->{imap2}->folders(  ) ;\n\nmyprint( 'Host1: found ', scalar  @h1_folders_all , \" folders.\\n\"  ) ;\nmyprint( 'Host2: found ', scalar  @h2_folders_all , \" folders.\\n\"  ) ;\n\nforeach my $f ( @h1_folders_all )\n{\n        $h1_folders_all{ $f } = 1\n}\n\nforeach my $f ( @h2_folders_all )\n{\n        $h2_folders_all{ $f } = 1 ;\n        $sync->{h2_folders_all_UPPER}{ uc  $f  } = 1 ;\n}\n\n$sync->{h1_folders_all} = \\%h1_folders_all ;\n$sync->{h2_folders_all} = \\%h2_folders_all ;\n\n\nprivate_folders_separators_and_prefixes(  ) ;\n\n\n# Make a hash of subscribed folders in both servers.\n\nfor ( $sync->{imap1}->subscribed(  ) ) { $h1_subscribed_folder{ $_ } = 1 } ;\nfor ( $sync->{imap2}->subscribed(  ) ) { $h2_subscribed_folder{ $_ } = 1 } ;\n\n\nif ( defined $sync->{ subfolder1 } ) {\n        subfolder1( $sync ) ;\n}\n\n\n\n\nif ( defined  $sync->{ subfolder2 } ) {\n        subfolder2(  $sync ) ;\n}\n\nif ( $fixInboxINBOX and ( my $reg = fix_Inbox_INBOX_mapping( \\%h1_folders_all, \\%h2_folders_all ) ) ) {\n        push @{ $sync->{ regextrans2 } }, $reg ;\n}\n\n\n\nif ( ( $sync->{ folder } and scalar @{ $sync->{ folder } } )\n     or $subscribed\n     or scalar @folderrec )\n{\n        # folders given by option --folder\n        if ( $sync->{ folder } and scalar @{ $sync->{ folder } } ) {\n                add_to_requested_folders( @{ $sync->{ folder } } ) ;\n        }\n\n        # option --subscribed\n        if ( $subscribed ) {\n                add_to_requested_folders( keys  %h1_subscribed_folder  ) ;\n        }\n\n        # option --folderrec\n        if ( scalar @folderrec ) {\n                foreach my $folderrec ( @folderrec ) {\n                        add_to_requested_folders( $sync->{imap1}->folders( $folderrec ) ) ;\n                }\n        }\n}\nelse\n{\n        # no include, no folder/subscribed/folderrec options => all folders\n        if ( not scalar @include ) {\n                myprint( \"Including all folders found by default. Use --subscribed or --folder or --folderrec or --include to select specific folders. Use --exclude to unselect specific folders.\\n\"  ) ;\n                add_to_requested_folders( @h1_folders_all ) ;\n        }\n}\n\n\n# consider (optional) includes and excludes\nif ( scalar  @include  ) {\n        foreach my $include ( @include ) {\n                # No, do not add /x after the regex, never.\n                # Users would kill you!\n                my @included_folders = grep { /$include/ } @h1_folders_all ;\n                add_to_requested_folders( @included_folders ) ;\n                myprint( \"Including folders matching pattern $include\\n\" . jux_utf8_list( @included_folders )  . \"\\n\"  ) ;\n        }\n}\n\nif ( scalar  @exclude  ) {\n        foreach my $exclude ( @exclude ) {\n                my @requested_folder = sort keys %requested_folder ;\n                # No, do not add /x after the regex, never.\n                # Users would kill you!\n                my @excluded_folders = grep { /$exclude/ } @requested_folder ;\n                remove_from_requested_folders( @excluded_folders ) ;\n                myprint( \"Excluding folders matching pattern $exclude\\n\" . jux_utf8_list( @excluded_folders ) . \"\\n\"  ) ;\n        }\n}\n\n\n# sort before is not very powerful\n# it adds --folderfirst and --folderlast even if they don't exist on host1\n#@h1_folders_wanted = sort_requested_folders(  ) ;\n$sync->{h1_folders_wanted} = [ sort_requested_folders(  ) ] ;\n\n# Remove no selectable folders\n\n\nif ( $sync->{ checkfoldersexist } ) {\n        my @h1_folders_wanted_exist ;\n        myprint( \"Host1: Checking wanted folders exist. Use --nocheckfoldersexist to avoid this check (shared of public namespace targeted).\\n\"  ) ;\n        foreach my $folder ( @{ $sync->{h1_folders_wanted} } ) {\n                ( $sync->{ debug } or $sync->{debugfolders} ) and myprint( \"Checking $folder exists on host1\\n\"  ) ;\n                if ( ! exists  $h1_folders_all{ $folder }  ) {\n                        myprint( \"Host1: warning! ignoring folder $folder because it is not in host1 whole folders list.\\n\" ) ;\n                        next ;\n                }else{\n                        push  @h1_folders_wanted_exist, $folder  ;\n                }\n        }\n        @{ $sync->{h1_folders_wanted} } = @h1_folders_wanted_exist ;\n}else{\n        myprint( \"Host1: Not checking that wanted folders exist. Remove --nocheckfoldersexist to get this check.\\n\"  ) ;\n}\n\nsetcheckselectable( $sync ) ;\n\ncheckselectable( $sync ) ;\n\n\n\n# Bugfix OpenFind folders named like \"kk \\*123\" are in fact \"kk *123\" (no \\)\n#foreach my $folder ( @{ $sync->{ h1_folders_wanted } } )\n#{\n#        $folder =~ s{ \\\\\\*}{ *}g ;\n#}\n\n\n# this hack is because LWP post does not pass well a hash in the $form parameter\n# but it does pass well an array\n%{ $sync->{f1f2h} } = split_around_equal( @{ $sync->{f1f2} } ) ;\n\nautomap( $sync ) ;\n\n\nforeach my $h1_fold ( @{ $sync->{h1_folders_wanted} } ) {\n        my $h2_fold ;\n        $h2_fold = imap2_folder_name( $sync, $h1_fold ) ;\n        $h2_folders_from_1_wanted{ $h2_fold }++ ;\n        if ( 1 < $h2_folders_from_1_wanted{ $h2_fold } ) {\n                $h2_folders_from_1_several{ $h2_fold }++ ;\n        }\n}\n\n@h2_folders_from_1_wanted = sort keys %h2_folders_from_1_wanted;\n\n\nforeach my $h1_fold ( @h1_folders_all ) {\n        my $h2_fold ;\n        $h2_fold = imap2_folder_name( $sync, $h1_fold ) ;\n        $h2_folders_from_1_all{ $h2_fold }++ ;\n        # Follows a fix to avoid deleting folder $sync->{ subfolder2 }\n        # because it usually does not exist on host1.\n        if ( $sync->{ subfolder2 } )\n        {\n                $h2_folders_from_1_all{ $sync->{ h2_prefix } . $sync->{ subfolder2 } }++ ;\n                $h2_folders_from_1_all{ $sync->{ subfolder2 } }++ ;\n        }\n}\n\n\n\nmyprint( << 'END_LISTING'  ) ;\n\n++++ Listing folders\nAll foldernames are presented between brackets like [X] where X is the foldername.\nWhen a foldername contains non-ASCII characters it is presented in the form\n[X] = [Y] where\nX is the imap foldername you have to use in command line options and\nY is the utf8 output just printed for convenience, to recognize it.\n\nEND_LISTING\n\nmyprint(\n  \"Host1: folders list (first the raw imap format then the [X] = [Y]):\\n\",\n  $sync->{imap1}->list(  ),\n  \"\\n\",\n  jux_utf8_list( @h1_folders_all ),\n  \"\\n\",\n  \"Host2: folders list (first the raw imap format then the [X] = [Y]):\\n\",\n  $sync->{imap2}->list(  ),\n  \"\\n\",\n  jux_utf8_list( @h2_folders_all ),\n  \"\\n\",\n  q{}\n) ;\n\nif ( $subscribed ) {\n        myprint(\n                'Host1 subscribed folders list: ',\n                jux_utf8_list( sort keys  %h1_subscribed_folder  ), \"\\n\",\n        ) ;\n}\n\n\n\n@h2_folders_not_in_1 = list_folders_in_2_not_in_1(  ) ;\n\nif ( @h2_folders_not_in_1 ) {\n        myprint( \"Folders in host2 not in host1:\\n\",\n        jux_utf8_list( @h2_folders_not_in_1 ), \"\\n\" ) ;\n}\n\n\nif ( keys %{ $sync->{f1f2auto} } ) {\n        myprint( \"Folders mapping from --automap feature (use --f1f2 to override any mapping):\\n\"  ) ;\n        foreach my $h1_fold ( keys %{ $sync->{f1f2auto} } ) {\n                my $h2_fold = $sync->{f1f2auto}{$h1_fold} ;\n                myprintf( \"%-40s -> %-40s\\n\",\n                       jux_utf8( $h1_fold ), jux_utf8( $h2_fold ) ) ;\n        }\n        myprint( \"\\n\"  ) ;\n}\n\nif ( keys %{ $sync->{f1f2h} } ) {\n        myprint( \"Folders mapping from --f1f2 options, it overrides --automap:\\n\"  ) ;\n        foreach my $h1_fold ( keys %{ $sync->{f1f2h} } ) {\n                my $h2_fold = $sync->{f1f2h}{$h1_fold} ;\n                my $warn = q{} ;\n                if ( not exists  $h1_folders_all{ $h1_fold }  ) {\n                        $warn = \"BUT $h1_fold does NOT exist on host1!\" ;\n                }\n                myprintf( \"%-40s -> %-40s %s\\n\",\n                       jux_utf8( $h1_fold ), jux_utf8( $h2_fold ), $warn ) ;\n        }\n        myprint( \"\\n\"  ) ;\n}\n\nexit_clean( $sync, $EX_OK, \"Exiting because of --justfolderlists\\n\" ) if ( $sync->{ justfolderlists } ) ;\nexit_clean( $sync, $EX_OK, \"Exiting because of --justautomap\\n\" ) if ( $sync->{ justautomap } ) ;\n\ndebugsleep( $sync ) ;\n\nif ( $sync->{ skipemptyfolders } )\n{\n        myprint( \"Host1: will not syncing empty folders on host1. Use --noskipemptyfolders to create them anyway on host2\\n\") ;\n}\n\nif ( $sync->{ checknoabletosearch } )\n{\n        myprint( \"Checking SEARCH ALL works on both accounts. To avoid that check, use --nochecknoabletosearch\\n\" ) ;\n        my $check1 = checknoabletosearch( $sync, $sync->{ imap1 }, 'INBOX', 'Host1' ) ;\n        my $check2 = checknoabletosearch( $sync, $sync->{ imap2 }, 'INBOX', 'Host2' ) ;\n        if ( $check1 or $check2 )\n        {\n                myprint( \"At least one account can not SEARCH ALL. So acting like --noabletosearch\\n\" ) ;\n                $sync->{abletosearch}  = 0 ;\n                $sync->{abletosearch1} = 0 ;\n                $sync->{abletosearch2} = 0 ;\n        }\n        else\n        {\n                myprint( \"Good! SEARCH ALL works on both accounts.\\n\" ) ;\n        }\n}\n\n\n\nif ( $sync->{ foldersizes } ) {\n\n        foldersizes_at_the_beggining( $sync ) ;\n        #foldersizes_at_the_beggining_old( $sync ) ;\n}\n\n\n\nif ( $sync->{ justfoldersizes } )\n{\n        exit_clean( $sync, $EX_OK, \"Exiting because of --justfoldersizes\\n\" ) ;\n}\n\n$sync->{can_do_stats} = 1 ;\n\nif ( $sync->{ delete1emptyfolders } ) {\n        delete1emptyfolders( $sync ) ;\n}\n\ndelete_folders_in_2_not_in_1(  ) if $delete2folders ;\n\n# folder loop\n$h1_folders_wanted_nb = scalar  @{ $sync->{h1_folders_wanted} }  ;\n\nmyprint( \"++++ Looping on each one of $h1_folders_wanted_nb folders to sync\\n\" ) ;\n\n$sync->{begin_transfer_time} = time ;\n\nmy %uid_candidate_for_deletion ;\nmy %uid_candidate_no_deletion ;\n\n$sync->{ h2_folders_of_md5 } = {  } ;\n\n\nFOLDER: foreach my $h1_fold ( @{ $sync->{h1_folders_wanted} } )\n{\n        $sync->{ h1_current_folder } = $h1_fold ;\n        eta_print( $sync ) ;\n        abortifneeded( $sync ) ;\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        my $h2_fold = imap2_folder_name( $sync, $h1_fold ) ;\n        $sync->{ h2_current_folder } = $h2_fold ;\n\n        $h1_folders_wanted_ct++ ;\n        myprintf( \"Folder %7s %-35s -> %-35s\\n\", \"$h1_folders_wanted_ct/$h1_folders_wanted_nb\",\n                jux_utf8( $h1_fold ), jux_utf8( $h2_fold ) ) ;\n        myprint( debugmemory( $sync, \" at folder loop\" ) ) ;\n\n        # host1 can not be fetched read only, select is needed because of expunge.\n        select_folder( $sync, $sync->{imap1}, $h1_fold, 'Host1' ) or next FOLDER ;\n\n        debugsleep( $sync ) ;\n\n        my $h1_msgs_all_hash_ref ;\n        my @h1_msgs ;\n        my $h1_msgs_nb ;\n        my $h1_msgs_nb_from_select ;\n\n        $h1_msgs_nb_from_select = count_from_select( $sync->{imap1}->History ) ;\n        myprint( \"Host1: folder [$h1_fold] has $h1_msgs_nb_from_select messages in total (mentioned by SELECT)\\n\" ) ;\n\n        if ( $sync->{ skipemptyfolders } and 0 == $h1_msgs_nb_from_select ) {\n                myprint( \"Host1: skipping empty host1 folder [$h1_fold]\\n\"  ) ;\n                next FOLDER ;\n        }\n\n        # Code added from https://github.com/imapsync/imapsync/issues/95\n        # Thanks jh1995\n        # Goal: do not create folder if --search or --max/minage return 0 message.\n        # even if there are messages by SELECT (no not real empty, empty for the user point of vue).\n        if ( $sync->{ skipemptyfolders } or $sync->{ dry } )\n        {\n                $h1_msgs_all_hash_ref = {  } ;\n                @h1_msgs = select_msgs( $sync->{imap1}, $h1_msgs_all_hash_ref, $sync->{ search1 }, $sync->{abletosearch1}, $h1_fold ) ;\n\n                $h1_msgs_nb = scalar( @h1_msgs ) ;\n                if ( 0 == $h1_msgs_nb and $sync->{ skipemptyfolders } ) {\n                        myprint( \"Host1: skipping empty host1 folder [$h1_fold] (0 message found by SEARCH)\\n\"  ) ;\n                        next FOLDER ;\n                }\n        }\n\n        if ( ! exists  $h2_folders_all{ $h2_fold }  ) {\n                # In --dry mode I could count the messages to be transfered instead of 0\n                # Messages transferred : 0 (could be 0 without dry mode)\n                if ( ! create_folder( $sync, $sync->{imap2}, $h2_fold, $h1_fold ) )\n                {\n                        if ( $sync->{ dry } )\n                        {\n                                $nb_msg_skipped_dry_mode += $h1_msgs_nb ;\n                        }\n                        next FOLDER ;\n                }\n        }\n\n        acls_sync( $sync, $h1_fold, $h2_fold ) ;\n\n        # Sometimes the folder on host2 is listed (it exists) but is\n        # not selectable but becomes selectable by a create (Gmail)\n        select_folder( $sync, $sync->{imap2}, $h2_fold, 'Host2' )\n        or ( create_folder( $sync, $sync->{imap2}, $h2_fold, $h1_fold )\n             and select_folder( $sync, $sync->{imap2}, $h2_fold, 'Host2' ) )\n        or next FOLDER ;\n        my @select_results = $sync->{imap2}->Results(  ) ;\n\n        my $h2_fold_nb_messages = count_from_select( @select_results ) ;\n        myprint( \"Host2: folder [$h2_fold] has $h2_fold_nb_messages messages in total (mentioned by SELECT)\\n\" ) ;\n\n        my $permanentflags2 = permanentflags( $sync, @select_results ) ;\n        myprint( \"Host2: folder [$h2_fold] permanentflags: $permanentflags2\\n\"  ) ;\n\n        if ( $sync->{ expunge1 } )\n        {\n                myprint( \"Host1: Expunging $h1_fold $sync->{dry_message}\\n\"  ) ;\n                if ( ! $sync->{dry} )\n                {\n                        $sync->{imap1}->expunge(  ) ;\n                }\n        }\n\n        if ( ( ( $subscribe and exists $h1_subscribed_folder{ $h1_fold } ) or $subscribeall )\n             and not exists  $h2_subscribed_folder{ $h2_fold }  )\n        {\n                myprint( \"Host2: Subscribing to folder $h2_fold\\n\"  ) ;\n                if ( ! $sync->{dry} ) { $sync->{imap2}->subscribe( $h2_fold ) } ;\n        }\n\n        next FOLDER if ( $sync->{ justfolders } ) ;\n\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n\n        if ( ! defined $h1_msgs_nb )\n        {\n                $h1_msgs_all_hash_ref = {  } ;\n                @h1_msgs = select_msgs( $sync->{imap1}, $h1_msgs_all_hash_ref, $sync->{ search1 }, $sync->{abletosearch1}, $h1_fold );\n                $h1_msgs_nb = scalar @h1_msgs  ;\n        }else{\n                # select_msgs already done.\n        }\n\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        myprint( \"Host1: folder [$h1_fold] considering $h1_msgs_nb messages\\n\"  ) ;\n        ( $sync->{ debug } or $debuglist ) and myprint( \"Host1: folder [$h1_fold] considering $h1_msgs_nb messages, LIST gives: @h1_msgs\\n\" ) ;\n        $sync->{ debug } and myprint( \"Host1: selecting messages of folder [$h1_fold] took \", timenext( $sync ), \" s\\n\" ) ;\n\n        my $h2_msgs_all_hash_ref = {  } ;\n        my @h2_msgs = select_msgs( $sync->{imap2}, $h2_msgs_all_hash_ref, $sync->{ search2 }, $sync->{abletosearch2}, $h2_fold ) ;\n\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        my $h2_msgs_nb = scalar  @h2_msgs  ;\n\n        myprint( \"Host2: folder [$h2_fold] considering $h2_msgs_nb messages\\n\" ) ;\n        ( $sync->{ debug } or $debuglist ) and myprint( \"Host2: folder [$h2_fold] considering $h2_msgs_nb messages, LIST gives: @h2_msgs\\n\" ) ;\n        $sync->{ debug } and myprint( \"Host2: selecting messages of folder [$h2_fold] took \", timenext( $sync ), \" s\\n\" ) ;\n\n        my $cache_base = \"$sync->{ tmpdir }/imapsync_cache/\" ;\n        my $cache_dir = cache_folder( $cache_base,\n                \"$sync->{host1}/$sync->{user1}/$sync->{host2}/$sync->{user2}\", $h1_fold, $h2_fold ) ;\n        my ( $cache_1_2_ref, $cache_2_1_ref ) = ( {}, {} ) ;\n\n        my $h1_uidvalidity = $sync->{imap1}->uidvalidity(  ) || q{} ;\n        my $h2_uidvalidity = $sync->{imap2}->uidvalidity(  ) || q{} ;\n\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        if ( $usecache ) {\n                myprint( \"Local cache directory: $cache_dir ( \" . length( $cache_dir  )  . \" characters long )\\n\"  ) ;\n                mkpath( \"$cache_dir\" ) ;\n                ( $cache_1_2_ref, $cache_2_1_ref )\n                = get_cache( $cache_dir, \\@h1_msgs, \\@h2_msgs, $h1_msgs_all_hash_ref, $h2_msgs_all_hash_ref ) ;\n                myprint( 'CACHE h1 h2: ', scalar  keys %{ $cache_1_2_ref } , \" files\\n\"  ) ;\n                $sync->{ debug } and myprint( '[',\n                    map ( { \"$_->$cache_1_2_ref->{$_} \" } keys %{ $cache_1_2_ref } ), \" ]\\n\" ) ;\n        }\n\n        my %h1_hash = (  ) ;\n        my %h2_hash = (  ) ;\n\n        my ( %h1_msgs, %h2_msgs ) ;\n        @h1_msgs{ @h1_msgs } = (  ) ;\n        @h2_msgs{ @h2_msgs } = (  ) ;\n\n        my @h1_msgs_in_cache = sort { $a <=> $b } keys %{ $cache_1_2_ref } ;\n        my @h2_msgs_in_cache = sort { $a <=> $b } keys %{ $cache_2_1_ref } ;\n\n        my ( %h1_msgs_not_in_cache, %h2_msgs_not_in_cache ) ;\n        %h1_msgs_not_in_cache = %h1_msgs ;\n        %h2_msgs_not_in_cache = %h2_msgs ;\n        delete @h1_msgs_not_in_cache{ @h1_msgs_in_cache } ;\n        delete @h2_msgs_not_in_cache{ @h2_msgs_in_cache } ;\n\n        my @h1_msgs_not_in_cache = sort { $a <=> $b } keys %h1_msgs_not_in_cache ;\n        #myprint( \"h1_msgs_not_in_cache: [@h1_msgs_not_in_cache]\\n\"  ) ;\n        my @h2_msgs_not_in_cache = sort { $a <=> $b } keys %h2_msgs_not_in_cache ;\n\n        my @h2_msgs_delete2_not_in_cache = () ;\n        %h1_msgs_copy_by_uid = (  ) ;\n\n        if ( $useuid ) {\n                # use uid so we have to avoid getting header\n                @h1_msgs_copy_by_uid{ @h1_msgs_not_in_cache } = (  ) ;\n                @h2_msgs_delete2_not_in_cache = @h2_msgs_not_in_cache if $usecache ;\n                @h1_msgs_not_in_cache = (  ) ;\n                @h2_msgs_not_in_cache = (  ) ;\n\n                #myprint( \"delete2: @h2_msgs_delete2_not_in_cache\\n\" ) ;\n        }\n\n        $sync->{ debug } and myprint( \"Host1: parsing headers of folder [$h1_fold]\\n\" ) ;\n\n        my ($h1_heads_ref, $h1_fir_ref) = ({}, {});\n        $h1_heads_ref = $sync->{imap1}->parse_headers([@h1_msgs_not_in_cache], @useheader) if (@h1_msgs_not_in_cache);\n        $sync->{ debug } and myprint( \"Host1: parsing headers of folder [$h1_fold] took \", timenext( $sync ), \" s\\n\" ) ;\n\n        @{ $h1_fir_ref }{@h1_msgs} = ( undef ) ;\n\n        $sync->{ debug } and myprint( \"Host1: getting flags idate and sizes of folder [$h1_fold]\\n\"  ) ;\n\n        my @h1_common_fetch_param = ( 'FLAGS', 'INTERNALDATE', 'RFC822.SIZE' ) ;\n        if ( $sync->{ synclabels } or $sync->{ resynclabels } ) { push @h1_common_fetch_param, 'X-GM-LABELS' ; }\n\n        if ( $sync->{abletosearch1} )\n        {\n                $h1_fir_ref = $sync->{imap1}->fetch_hash( \\@h1_msgs, @h1_common_fetch_param, $h1_fir_ref )\n                if ( @h1_msgs ) ;\n        }\n        else\n        {\n                my $fetch_hash_uids = $fetch_hash_set || \"1:*\" ;\n                $h1_fir_ref = $sync->{imap1}->fetch_hash( $fetch_hash_uids, @h1_common_fetch_param, $h1_fir_ref )\n                if ( @h1_msgs ) ;\n        }\n\n        $sync->{ debug } and myprint( \"Host1: getting flags idate and sizes of folder [$h1_fold] took \", timenext( $sync ), \" s\\n\"  ) ;\n        if ( ! $h1_fir_ref )\n        {\n                my $error = join( q{}, \"Host1: folder $h1_fold : Could not fetch_hash \",\n                        scalar @h1_msgs, ' msgs: ', $sync->{imap1}->LastError || q{}, \"\\n\" ) ;\n                errors_incr( $sync, $error ) ;\n                next FOLDER ;\n        }\n\n        my @h1_msgs_duplicate;\n        foreach my $m ( @h1_msgs_not_in_cache )\n        {\n                my $rc = parse_header_msg( $sync, $sync->{imap1}, $m, $h1_heads_ref, $h1_fir_ref, 'Host1', \\%h1_hash ) ;\n                if ( ! defined $rc )\n                {\n                        my $h1_size = $h1_fir_ref->{$m}->{'RFC822.SIZE'} || 0;\n                        myprint( \"Host1: $h1_fold/$m size $h1_size ignored (no wanted headers so we ignore this message. To solve this: use --addheader)\\n\"  ) ;\n                        $sync->{ total_bytes_skipped } += $h1_size ;\n                        $sync->{ nb_msg_skipped } += 1 ;\n                        $sync->{ h1_nb_msg_noheader }  +=1 ;\n                        $sync->{ h1_nb_msg_processed } +=1 ;\n                } elsif( 0 == $rc )\n                {\n                        # duplicate\n                        push @h1_msgs_duplicate, $m;\n                        # duplicate, same id same size?\n                        my $h1_size = $h1_fir_ref->{$m}->{'RFC822.SIZE'} || 0;\n\n                        $sync->{ acc1 }->{ nb_msg_duplicate } += 1;\n                        if ( ! $sync->{ syncduplicates } ) {\n                                $sync->{ nb_msg_skipped } += 1 ;\n                                $sync->{ h1_nb_msg_processed } +=1 ;\n                        }\n                }\n        }\n\n\n        my $h1_msgs_duplicate_nb = scalar  @h1_msgs_duplicate  ;\n\n        myprint( \"Host1: folder [$h1_fold] selected $h1_msgs_nb messages, duplicates $h1_msgs_duplicate_nb\\n\" ) ;\n\n        $sync->{ debug } and myprint( 'Host1: whole time parsing headers took ', timenext( $sync ), \" s\\n\"  ) ;\n\n\n\n        # Getting headers and metada can be so long that host2 might be disconnected here\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n\n        $sync->{ debug } and myprint( \"Host2: parsing headers of folder [$h2_fold]\\n\" ) ;\n\n        my ($h2_heads_ref, $h2_fir_ref) = ( {}, {} );\n        $h2_heads_ref =   $sync->{imap2}->parse_headers([@h2_msgs_not_in_cache], @useheader) if (@h2_msgs_not_in_cache);\n        $sync->{ debug } and myprint( \"Host2: parsing headers of folder [$h2_fold] took \", timenext( $sync ), \" s\\n\"  ) ;\n\n        $sync->{ debug } and myprint( \"Host2: getting flags idate and sizes of folder [$h2_fold]\\n\"  ) ;\n        @{ $h2_fir_ref }{@h2_msgs} = (  ); # fetch_hash can select by uid with last arg as ref\n\n\n        my @h2_common_fetch_param = ( 'FLAGS', 'INTERNALDATE', 'RFC822.SIZE' ) ;\n        if ( $sync->{ synclabels } or $sync->{ resynclabels } ) { push @h2_common_fetch_param, 'X-GM-LABELS' ; }\n\n        if ( $sync->{abletosearch2} and scalar( @h2_msgs ) ) {\n                $h2_fir_ref = $sync->{imap2}->fetch_hash( \\@h2_msgs, @h2_common_fetch_param, $h2_fir_ref) ;\n        }else{\n                my $fetch_hash_uids = $fetch_hash_set || \"1:*\" ;\n                $h2_fir_ref = $sync->{imap2}->fetch_hash( $fetch_hash_uids, @h2_common_fetch_param, $h2_fir_ref )\n                if ( @h2_msgs ) ;\n        }\n\n        $sync->{ debug } and myprint( \"Host2: getting flags idate and sizes of folder [$h2_fold] took \", timenext( $sync ), \" s\\n\"  ) ;\n\n        my @h2_msgs_duplicate;\n        foreach my $m (@h2_msgs_not_in_cache) {\n                my $rc = parse_header_msg( $sync, $sync->{imap2}, $m, $h2_heads_ref, $h2_fir_ref, 'Host2', \\%h2_hash ) ;\n                my $h2_size = $h2_fir_ref->{$m}->{'RFC822.SIZE'} || 0 ;\n                if (! defined  $rc  ) {\n                        myprint( \"Host2: $h2_fold/$m size $h2_size ignored (no wanted headers so we ignore this message)\\n\"  ) ;\n                        $h2_nb_msg_noheader += 1 ;\n                } elsif( 0 == $rc ) {\n                        # duplicate\n                        $sync->{ acc2 }->{ nb_msg_duplicate } += 1 ;\n                        push  @h2_msgs_duplicate, $m  ;\n                }\n        }\n\n        # %h2_folders_of_md5\n        foreach my $md5 (  keys  %h2_hash  ) {\n                $sync->{ h2_folders_of_md5 }->{ $md5 }->{ $h2_fold } ++ ;\n        }\n        # %h1_folders_of_md5\n        foreach my $md5 (  keys  %h1_hash  ) {\n                $sync->{ h1_folders_of_md5 }->{ $md5 }->{ $h2_fold } ++ ;\n        }\n\n\n        my $h2_msgs_duplicate_nb = scalar  @h2_msgs_duplicate  ;\n\n        myprint( \"Host2: folder [$h2_fold] selected $h2_msgs_nb messages, duplicates $h2_msgs_duplicate_nb\\n\" ) ;\n\n        $sync->{ debug } and myprint( 'Host2 whole time parsing headers took ', timenext( $sync ), \" s\\n\"  ) ;\n\n        $sync->{ debug } and myprint( \"++++ Verifying [$h1_fold] -> [$h2_fold]\\n\" ) ;\n        # messages in host1 that are not in host2\n\n        my @h1_hash_keys_sorted_by_uid\n          = sort {$h1_hash{$a}{'m'} <=> $h1_hash{$b}{'m'}} keys %h1_hash;\n\n        #myprint( map { $h1_hash{$_}{'m'} . q{ }} @h1_hash_keys_sorted_by_uid ) ;\n\n        my @h2_hash_keys_sorted_by_uid\n          = sort {$h2_hash{$a}{'m'} <=> $h2_hash{$b}{'m'}} keys %h2_hash;\n\n        # Deletions on account2.\n\n        if( $sync->{ delete2duplicates } and not exists  $h2_folders_from_1_several{ $h2_fold }  ) {\n                my @h2_expunge ;\n\n                foreach my $h2_msg ( @h2_msgs_duplicate ) {\n                        myprint( \"Host2: msg $h2_fold/$h2_msg marked \\\\Deleted [duplicate] on host2 $sync->{dry_message}\\n\"  ) ;\n                        push  @h2_expunge, $h2_msg  if $sync->{ uidexpunge2 } ;\n                        if ( ! $sync->{ dry } ) {\n                                $sync->{ imap2 }->delete_message( $h2_msg ) ;\n                                $sync->{ acc2 }->{ nb_msg_deleted } += 1 ;\n                        }\n                }\n                my $cnt = scalar @h2_expunge ;\n                if( @h2_expunge and not $sync->{ expunge2 } ) {\n                        myprint( \"Host2: UidExpunging $cnt message(s) in folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                        $sync->{imap2}->uidexpunge( \\@h2_expunge ) if ! $sync->{dry} ;\n                }\n                if ( $sync->{ expunge2 } ){\n                        myprint( \"Host2: Expunging folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                        $sync->{imap2}->expunge(  ) if ! $sync->{dry} ;\n                }\n        }\n\n        if( $sync->{ delete2 } and not exists  $h2_folders_from_1_several{ $h2_fold }  ) {\n                # No host1 folders f1a f1b ... going all to same f2 (via --regextrans2)\n                my @h2_expunge;\n                foreach my $m_id (@h2_hash_keys_sorted_by_uid) {\n                        #myprint( \"$m_id \" ) ;\n                        if ( ! exists $h1_hash{$m_id} ) {\n                                my $h2_msg  = $h2_hash{$m_id}{'m'};\n                                my $h2_flags  = $h2_hash{$m_id}{'F'} || q{};\n                                my $isdel  = $h2_flags =~ /\\B\\\\Deleted\\b/x ? 1 : 0;\n                                myprint( \"Host2: msg $h2_fold/$h2_msg marked \\\\Deleted on host2 [$m_id] $sync->{dry_message}\\n\" )\n                                  if ! $isdel;\n                                push @h2_expunge, $h2_msg if $sync->{ uidexpunge2 };\n                                if ( ! ( $sync->{ dry } or $isdel ) ) {\n                                        $sync->{ imap2 }->delete_message( $h2_msg );\n                                        $sync->{ acc2 }->{ nb_msg_deleted } += 1;\n                                }\n                        }\n                }\n                foreach my $h2_msg ( @h2_msgs_delete2_not_in_cache ) {\n                        myprint( \"Host2: msg $h2_fold/$h2_msg marked \\\\Deleted [not in cache] on host2 $sync->{dry_message}\\n\" ) ;\n                        push @h2_expunge, $h2_msg if $sync->{ uidexpunge2 };\n                        if ( ! $sync->{dry} ) {\n                                $sync->{ imap2 }->delete_message( $h2_msg );\n                                $sync->{ acc2 }->{ nb_msg_deleted } += 1;\n                        }\n                }\n                my $cnt = scalar @h2_expunge ;\n\n                if( @h2_expunge and not $sync->{ expunge2 } ) {\n                        myprint( \"Host2: UidExpunging $cnt message(s) in folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                        $sync->{imap2}->uidexpunge( \\@h2_expunge ) if ! $sync->{dry} ;\n                }\n                if ( $sync->{ expunge2 } ) {\n                        myprint( \"Host2: Expunging folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                        $sync->{imap2}->expunge(  ) if ! $sync->{dry} ;\n                }\n        }\n\n        if( $sync->{ delete2 } and exists  $h2_folders_from_1_several{ $h2_fold }  ) {\n                myprint( \"Host2: folder $h2_fold $h2_folders_from_1_several{ $h2_fold } folders left to sync there\\n\"  ) ;\n                my @h2_expunge;\n                foreach my $m_id ( @h2_hash_keys_sorted_by_uid ) {\n                        my $h2_msg  = $h2_hash{ $m_id }{ 'm' } ;\n                        if ( ! exists  $h1_hash{ $m_id }  ) {\n                                my $h2_flags  = $h2_hash{ $m_id }{ 'F' } || q{} ;\n                                my $isdel  = $h2_flags =~ /\\B\\\\Deleted\\b/x ? 1 : 0 ;\n                                if ( ! $isdel ) {\n                                        $sync->{ debug } and myprint( \"Host2: msg $h2_fold/$h2_msg candidate for deletion [$m_id]\\n\"  ) ;\n                                        $uid_candidate_for_deletion{ $h2_fold }{ $h2_msg }++ ;\n                                }\n                        }else{\n                                $sync->{ debug } and myprint( \"Host2: msg $h2_fold/$h2_msg will cancel deletion [$m_id]\\n\"  ) ;\n                                $uid_candidate_no_deletion{ $h2_fold }{ $h2_msg }++ ;\n                        }\n                }\n                foreach my $h2_msg ( @h2_msgs_delete2_not_in_cache ) {\n                        myprint( \"Host2: msg $h2_fold/$h2_msg candidate for deletion [not in cache]\\n\" ) ;\n                        $uid_candidate_for_deletion{ $h2_fold }{ $h2_msg }++ ;\n                }\n\n                foreach my $h2_msg ( @h2_msgs_in_cache ) {\n                        myprint( \"Host2: msg $h2_fold/$h2_msg will cancel deletion [in cache]\\n\" ) ;\n                        $uid_candidate_no_deletion{ $h2_fold }{ $h2_msg }++ ;\n                }\n\n\n                if ( 0 == $h2_folders_from_1_several{ $h2_fold } ) {\n                        # last host1 folder going to $h2_fold\n                        myprint( \"Last host1 folder going to $h2_fold\\n\"  ) ;\n                        foreach my $h2_msg ( keys %{ $uid_candidate_for_deletion{ $h2_fold } } ) {\n                                $sync->{ debug } and myprint( \"Host2: msg $h2_fold/$h2_msg candidate for deletion\\n\"  ) ;\n                                if ( exists  $uid_candidate_no_deletion{ $h2_fold }{ $h2_msg }  ) {\n                                        $sync->{ debug } and myprint( \"Host2: msg $h2_fold/$h2_msg canceled deletion\\n\"  ) ;\n                                }else{\n                                        myprint( \"Host2: msg $h2_fold/$h2_msg marked \\\\Deleted $sync->{dry_message}\\n\" ) ;\n                                        push  @h2_expunge, $h2_msg  if $sync->{ uidexpunge2 } ;\n                                        if ( ! $sync->{ dry}  ) {\n                                                $sync->{ imap2 }->delete_message( $h2_msg ) ;\n                                                $sync->{ acc2 }->{ nb_msg_deleted } += 1 ;\n                                        }\n                                }\n                        }\n                }\n\n                my $cnt = scalar @h2_expunge ;\n                if( @h2_expunge and not $sync->{ expunge2 } ) {\n                        myprint( \"Host2: UidExpunging $cnt message(s) in folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                        $sync->{imap2}->uidexpunge( \\@h2_expunge ) if ! $sync->{dry} ;\n                }\n                if ( $sync->{ expunge2 } ) {\n                        myprint( \"Host2: Expunging host2 folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                        $sync->{imap2}->expunge(  ) if ! $sync->{dry} ;\n                }\n\n                $h2_folders_from_1_several{ $h2_fold }-- ;\n        }\n\n        my $h2_uidnext = $sync->{imap2}->uidnext( $h2_fold ) ;\n        $sync->{ debug } and myprint( \"Host2: uidnext is $h2_uidnext\\n\"  ) ;\n        $h2_uidguess = $h2_uidnext ;\n\n\t# Getting host2 headers, metada and delete2 stuff can be so long that host1 might be disconnected here\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        my @h1_msgs_to_delete ;\n        MESS: foreach my $m_id (@h1_hash_keys_sorted_by_uid) {\n                abortifneeded( $sync ) ;\n\t\tif ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n                #myprint( \"h1_nb_msg_processed: $sync->{ h1_nb_msg_processed }\\n\"  ) ;\n                my $h1_size  = $h1_hash{$m_id}{'s'};\n                my $h1_msg   = $h1_hash{$m_id}{'m'};\n                my $h1_idate = $h1_hash{$m_id}{'D'};\n\n                #my $labels = labels( $sync->{imap1}, $h1_msg ) ;\n                #print \"LABELS: $labels\\n\" ;\n\n                if ( ( not exists  $h2_hash{ $m_id }  )\n                        and ( not ( exists $sync->{ h2_folders_of_md5 }->{ $m_id } )\n                              or not $skipcrossduplicates ) )\n                {\n                        # copy\n                        my $h2_msg = copy_message( $sync, $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) ;\n                        if ( $h2_msg and $sync->{ delete1 } and not $sync->{ expungeaftereach } ) {\n                                # not  expunged\n                                push @h1_msgs_to_delete, $h1_msg ;\n                        }\n\n                        # A bug here with imapsync 1.920, fixed in 1.921\n                        # Added $h2_msg in the condition. Errors of APPEND were not counted as missing messages on host2!\n                        if ( $h2_msg and not $sync->{ dry } )\n                        {\n                                $sync->{ h2_folders_of_md5 }->{ $m_id }->{ $h2_fold } ++ ;\n                        }\n\n                        #\n                        if( $sync->{ delete2 } and ( exists $h2_folders_from_1_several{ $h2_fold } ) and $h2_msg ) {\n                                myprint( \"Host2: msg $h2_fold/$h2_msg will cancel deletion [fresh copy] on host2\\n\"  ) ;\n                                $uid_candidate_no_deletion{ $h2_fold }{ $h2_msg }++ ;\n                        }\n\n                        if ( total_bytes_max_reached( $sync ) ) {\n                                # Still a bug when using --delete1 --noexpungeaftereach\n                                # same thing below on all total_bytes_max_reached!\n                                last FOLDER ;\n                        }\n                        next MESS;\n                }\n                else\n                {\n                        # already on host2\n                        if ( exists  $h2_hash{ $m_id }  )\n                        {\n                                my $h2_msg   = $h2_hash{$m_id}{'m'} ;\n                                $sync->{ debug } and myprint( \"Host1: found that msg $h1_fold/$h1_msg equals Host2 $h2_fold/$h2_msg\\n\"  ) ;\n                                if ( $usecache )\n                                {\n                                        $debugcache and myprint( \"touch $cache_dir/${h1_msg}_$h2_msg\\n\"  ) ;\n                                        touch( \"$cache_dir/${h1_msg}_$h2_msg\" )\n                                        or croak( \"Couldn't touch $cache_dir/${h1_msg}_$h2_msg\" ) ;\n                                }\n                        }\n                        elsif( exists  $sync->{ h2_folders_of_md5 }->{ $m_id }  )\n                        {\n                                my @folders_dup = keys  %{ $sync->{ h2_folders_of_md5 }->{ $m_id } }  ;\n                                ( $sync->{ debug } or $debugcrossduplicates ) and myprint( \"Host1: found that msg $h1_fold/$h1_msg is also in Host2 folders @folders_dup\\n\"  ) ;\n                                $sync->{ h2_nb_msg_crossdup } +=1 ;\n                        }\n                        $sync->{ total_bytes_skipped } += $h1_size ;\n                        $sync->{ nb_msg_skipped } += 1 ;\n                        $sync->{ h1_nb_msg_processed } +=1 ;\n                }\n\n                if ( exists  $h2_hash{ $m_id }  ) {\n                        #$debug and myprint( \"MESSAGE $m_id\\n\" ) ;\n                        my $h2_msg  = $h2_hash{$m_id}{'m'};\n                        if ( $sync->{resyncflags} ) {\n                                sync_flags_fir( $sync, $h1_fold, $h1_msg, $h2_fold, $h2_msg, $permanentflags2, $h1_fir_ref, $h2_fir_ref ) ;\n                        }\n                        # Good\n                        my $h2_size = $h2_hash{$m_id}{'s'};\n                        $sync->{ debug } and myprint(\n                        \"Host1: size msg $h1_fold/$h1_msg = $h1_size <> $h2_size = Host2 $h2_fold/$h2_msg\\n\" ) ;\n\n                        if ( $sync->{ resynclabels } )\n                        {\n                                resynclabels( $sync, $h1_msg, $h2_msg, $h1_fir_ref, $h2_fir_ref, $h1_fold )\n                        }\n                }\n\n                if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n                if ( $sync->{ delete1 } ) {\n                        push @h1_msgs_to_delete, $h1_msg ;\n                }\n        }\n        # END MESS: loop\n\n        # @h1_msgs_in_cache are already synced too.\n        delete_message_on_host1( $sync, $h1_fold, $sync->{ expunge1 }, @h1_msgs_to_delete, @h1_msgs_in_cache ) ;\n\n\tif ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        # MESS_IN_CACHE:\n        if ( ! $sync->{ delete1 } )\n        {\n                foreach my $h1_msg ( @h1_msgs_in_cache )\n                {\n                        my $h2_msg = $cache_1_2_ref->{ $h1_msg } ;\n                        $debugcache and myprint( \"cache messages update flags $h1_msg->$h2_msg\\n\" ) ;\n                        if ( $sync->{resyncflags} )\n                        {\n                                sync_flags_fir( $sync, $h1_fold, $h1_msg, $h2_fold, $h2_msg, $permanentflags2, $h1_fir_ref, $h2_fir_ref ) ;\n                        }\n                        my $h1_size = $h1_fir_ref->{ $h1_msg }->{ 'RFC822.SIZE' } || 0 ;\n                        $sync->{ total_bytes_skipped } += $h1_size;\n                        $sync->{ nb_msg_skipped } += 1;\n                        $sync->{ h1_nb_msg_processed } +=1 ;\n                }\n        }\n\n        if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n        @h1_msgs_to_delete = (  ) ;\n        #myprint( \"Messages by uid: \", map { \"$_ \" } keys %h1_msgs_copy_by_uid, \"\\n\"  ) ;\n        # MESS_BY_UID:\n        foreach my $h1_msg ( sort { $a <=> $b } keys %h1_msgs_copy_by_uid )\n        {\n                abortifneeded( $sync ) ;\n                $sync->{ debug } and myprint( \"Copy by uid $h1_fold/$h1_msg\\n\"  ) ;\n                if ( ! reconnect_12_if_needed( $sync ) ) { last FOLDER ; }\n\n                my $h2_msg = copy_message( $sync, $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) ;\n                if( $sync->{ delete2 } and exists  $h2_folders_from_1_several{ $h2_fold }  and $h2_msg ) {\n                        myprint( \"Host2: msg $h2_fold/$h2_msg will cancel deletion [fresh copy] on host2\\n\"  ) ;\n                        $uid_candidate_no_deletion{ $h2_fold }{ $h2_msg }++ ;\n                }\n                last FOLDER if total_bytes_max_reached( $sync ) ;\n        }\n\n        if ( $sync->{ expunge1 } ){\n                myprint( \"Host1: Expunging folder $h1_fold $sync->{dry_message}\\n\"  ) ;\n                if ( ! $sync->{dry} ) { $sync->{imap1}->expunge(  ) } ;\n        }\n        if ( $sync->{ expunge2 } ){\n                myprint( \"Host2: Expunging folder $h2_fold $sync->{dry_message}\\n\"  ) ;\n                if ( ! $sync->{dry} ) { $sync->{imap2}->expunge(  ) } ;\n        }\n        $sync->{ debug } and myprint( 'Time: ', timenext( $sync ), \" s\\n\"  ) ;\n}\n\neta_print( $sync ) ;\n\nmyprint( \"++++ End looping on each folder\\n\"  ) ;\n\nif ( $sync->{ delete1 } and $sync->{ delete1emptyfolders } ) {\n\tdelete1emptyfolders( $sync ) ;\n}\n\n( $sync->{ debug } or $sync->{debugfolders} ) and myprint( 'Time: ', timenext( $sync ), \" s\\n\"  ) ;\n\n\nif ( $sync->{ foldersizesatend } ) {\n        myprint( << 'END_SIZE'  ) ;\n\nFolders sizes after the synchronization.\nYou can remove this foldersizes listing by using  \"--nofoldersizesatend\"\nEND_SIZE\n\n        foldersizesatend( $sync ) ;\n}\n\n#$sync->{imap1}->State( 0 ); # Unconnected\nif ( ! lost_connection( $sync, $sync->{imap1}, \"for host1 [$sync->{host1}]\" ) ) { $sync->{imap1}->logout(  )  ; }\nif ( ! lost_connection( $sync, $sync->{imap2}, \"for host2 [$sync->{host2}]\" ) ) { $sync->{imap2}->logout(  )  ; }\n\ndo_and_print_stats( $sync ) ;\n\n\nif ( $sync->{ nb_errors } )\n{\n        myprint( errors_listing( $sync ) ) ;\n}\n\n\nif ( $sync->{ testslive } or $sync->{ testslive6 } )\n{\n        tests_live_result( $sync->{ nb_errors } ) ;\n}\n\n\nif ( $sync->{ nb_errors } )\n{\n        my $exit_value = exit_value( $sync, $sync->{ most_common_error } ) ;\n        exit_clean( $sync, $exit_value ) ;\n}\nelse\n{\n        exit_clean( $sync, $EX_OK ) ;\n}\n\nreturn ;\n}\n\n# END of sub single_sync\n\n\n# subroutines\nsub myprint\n{\n        #print @ARG ;\n        print { $sync->{ tee } || \\*STDOUT } @ARG ;\n        return ;\n}\n\nsub myprintf\n{\n        printf { $sync->{ tee } || \\*STDOUT } @ARG ;\n        return ;\n}\n\nsub mysprintf\n{\n        my( $format, @list ) = @ARG ;\n        return sprintf $format, @list ;\n}\n\nsub output_start\n{\n\tmy $mysync = shift @ARG ;\n\n\tif ( not $mysync ) { return ; }\n\n\tmy @output = @ARG ;\n\t$mysync->{ output } = join( q{}, @output ) . ( $mysync->{ output } || q{} ) ;\n\treturn $mysync->{ output } ;\n}\n\n\nsub tests_output_start\n{\n\tnote( 'Entering tests_output_start()' ) ;\n\n\tmy $mysync = { } ;\n\n\tis( undef, output_start(  ), 'output_start: no args => undef' ) ;\n\tis( q{}, output_start( $mysync ), 'output_start: one arg => \"\"' ) ;\n\tis( 'rrrr', output_start( $mysync, 'rrrr' ), 'output_start: rrrr => rrrr' ) ;\n\tis( 'aaaarrrr', output_start( $mysync, 'aaaa' ), 'output_start: aaaa => aaaarrrr' ) ;\n\tis( \"\\naaaarrrr\", output_start( $mysync, \"\\n\" ), 'output_start: \\n => \\naaaarrrr' ) ;\n\tis( \"ABC\\naaaarrrr\", output_start( $mysync, 'A', 'B', 'C' ), 'output_start: A B C => ABC\\naaaarrrr' ) ;\n\n\tnote( 'Leaving  tests_output_start()' ) ;\n\treturn ;\n}\n\nsub tests_output\n{\n\tnote( 'Entering tests_output()' ) ;\n\n\tmy $mysync = { } ;\n\n\tis( undef, output(  ), 'output: no args => undef' ) ;\n\tis( q{}, output( $mysync ), 'output: one arg => \"\"' ) ;\n\tis( 'rrrr', output( $mysync, 'rrrr' ), 'output: rrrr => rrrr' ) ;\n\tis( 'rrrraaaa', output( $mysync, 'aaaa' ), 'output: aaaa => rrrraaaa' ) ;\n\tis( \"rrrraaaa\\n\", output( $mysync, \"\\n\" ), 'output: \\n => rrrraaaa\\n' ) ;\n\tis( \"rrrraaaa\\nABC\", output( $mysync, 'A', 'B', 'C' ), 'output: A B C => rrrraaaaABC\\n' ) ;\n\n\tnote( 'Leaving  tests_output()' ) ;\n\treturn ;\n}\n\nsub output\n{\n\tmy $mysync = shift @ARG ;\n\n\tif ( not $mysync ) { return ; }\n\n\tmy @output = @ARG ;\n\t$mysync->{ output } .= join( q{}, @output ) ;\n\treturn $mysync->{ output } ;\n}\n\n\n\nsub tests_output_reset_with\n{\n\tnote( 'Entering tests_output_reset_with()' ) ;\n\n\tmy $mysync = { } ;\n\n\tis( undef,  output_reset_with(  ), 'output_reset_with: no args => undef' ) ;\n\tis( q{},    output_reset_with( $mysync ), 'output_reset_with: one arg => \"\"' ) ;\n\tis( 'rrrr', output_reset_with( $mysync, 'rrrr' ), 'output_reset_with: rrrr => rrrr' ) ;\n\tis( 'aaaa', output_reset_with( $mysync, 'aaaa' ), 'output_reset_with: aaaa => aaaa' ) ;\n\tis( \"\\n\",   output_reset_with( $mysync, \"\\n\" ), 'output_reset_with: \\n => \\n' ) ;\n\n\tnote( 'Leaving  tests_output_reset_with()' ) ;\n\treturn ;\n}\n\nsub output_reset_with\n{\n\tmy $mysync = shift @ARG ;\n\n\tif ( not $mysync ) { return ; }\n\n\tmy @output = @ARG ;\n\t$mysync->{ output } = join( q{}, @output ) ;\n\treturn $mysync->{ output } ;\n}\n\n\nsub tests_print_output_if_needed\n{\n        note( 'Entering tests_print_output_if_needed()' ) ;\n\n        is( undef, print_output_if_needed(  ),  'print_output_if_needed: no args => undef' ) ;\n        my $mysync = {  } ;\n        is( q{}, print_output_if_needed( $mysync ),  'print_output_if_needed: undef => undef' ) ;\n\n        output( $mysync, \"Hello\\n\" ) ;\n        is( \"Hello\\n\", print_output_if_needed( $mysync ),  'print_output_if_needed: Hello => Hello' ) ;\n\n        $mysync->{ dockercontext } = 1 ;\n        is( \"Hello\\n\", print_output_if_needed( $mysync ),  'print_output_if_needed: dockercontext + Hello => Hello' ) ;\n\n        $mysync->{ version } = 1 ;\n        is( q{}, print_output_if_needed( $mysync ),  'print_output_if_needed: dockercontext + Hello + --version => \"\"' ) ;\n\n        $mysync->{ dockercontext } = 0 ;\n        is( \"Hello\\n\", print_output_if_needed( $mysync ),  'print_output_if_needed: Hello + --version => Hello' ) ;\n\n        note( 'Leaving  tests_print_output_if_needed()' ) ;\n        return ;\n}\n\n\nsub print_output_if_needed\n{\n\n        my $mysync = shift @ARG ;\n        if ( ! defined $mysync ) { return ; }\n        my $output = output( $mysync ) ;\n\n        if ( $mysync->{ version } && under_docker_context( $mysync ) )\n        {\n                return q{} ;\n        }\n        else\n        {\n                myprint( $output ) ;\n                return $output ;\n        }\n\n}\n\n\n\nsub define_pidfile\n{\n        my $mysync = shift @ARG ;\n\n        $mysync->{ pidfilelocking } = defined $mysync->{ pidfilelocking }  ? $mysync->{ pidfilelocking } : 0 ;\n\n        my $host1 = $mysync->{ host1 } || q{} ;\n        my $user1 = $mysync->{ user1 } || q{} ;\n        my $host2 = $mysync->{ host2 } || q{} ;\n        my $user2 = $mysync->{ user2 } || q{} ;\n\n        my $account1_filtered = filter_forbidden_characters( slash_to_underscore( $host1 . '_' . $user1 ) ) || q{} ;\n        my $account2_filtered = filter_forbidden_characters( slash_to_underscore( $host2 . '_' . $user2 ) ) || q{} ;\n\n        my $pidfile_basename ;\n\n        if ( $ENV{ 'NET_SERVER_SOFTWARE' } and ( $ENV{ 'NET_SERVER_SOFTWARE' } =~ /Net::Server::HTTP/ ) )\n        {\n                # under local webserver\n                $pidfile_basename = 'imapsync' . '_' . $account1_filtered . '_' . $account2_filtered . '.pid' ;\n        }\n        else\n        {\n                $pidfile_basename = 'imapsync.pid' ;\n        }\n\n        $mysync->{ pidfile } =  defined  $mysync->{ pidfile }  ? $mysync-> { pidfile } : $mysync->{ tmpdir } . \"/$pidfile_basename\" ;\n        $mysync->{ abortfile } = abortfile( $mysync, $PROCESS_ID ) ;\n        return ;\n}\n\nsub abortfile\n{\n        my $mysync = shift @ARG ;\n        my $pid    = shift @ARG ;\n\n        my $abortfile ;\n        if ( $mysync->{ abort } )\n        {\n                $abortfile = $mysync->{ pidfile } . \"abort$pid\" ;\n        }\n        else\n        {\n                $abortfile = $mysync->{ pidfile } . \"abort$PROCESS_ID\" ;\n        }\n        return $abortfile ;\n}\n\nsub tests_kill_zero\n{\n        note( 'Entering tests_kill_zero()' ) ;\n\n\n\n        SKIP: {\n        if ( 'MSWin32' eq $OSNAME ) { skip( 'Tests tests_kill_zero avoided on Windows', 8 ) ; }\n\n\n        is( 1, kill( 'ZERO', $PROCESS_ID ), \"kill ZERO : myself $PROCESS_ID => 1\" ) ;\n        is( 2, kill( 'ZERO', $PROCESS_ID, $PROCESS_ID ), \"kill ZERO : myself $PROCESS_ID $PROCESS_ID => 2\" ) ;\n\n        if ( (-e '/.dockerenv' ) or ( 0 == $EFFECTIVE_USER_ID) )\n        {\n                is( 1, kill( 'ZERO', 1 ), \"kill ZERO : pid 1 => 1 (docker context or root)\" ) ;\n                is( 2, kill( 'ZERO', $PROCESS_ID, 1 ), \"kill ZERO : myself + pid 1, $PROCESS_ID 1 => 2 (docker context or root)\" ) ;\n        }\n        else\n        {\n                is( 0, kill( 'ZERO', 1 ), \"kill ZERO : pid 1 => 0 (non root)\" ) ;\n                is( 1, kill( 'ZERO', $PROCESS_ID, 1 ), \"kill ZERO : myself + pid 1, $PROCESS_ID 1 => 1 (one is non root)\" ) ;\n\n        }\n\n\n        my $pid_1 = fork(  ) ;\n        if ( $pid_1 )\n        {\n                # parent\n        }\n        else\n        {\n                # child\n                sleep 3 ;\n                exit ;\n        }\n\n        my $pid_2 ;\n        $pid_2 = fork(  ) ;\n        if ( $pid_2 )\n        {\n                # I am the parent\n                ok( defined( $pid_2 ), \"kill_zero: initial fork ok. I am the parent $PROCESS_ID\" ) ;\n                ok( $pid_2 , \"kill_zero: initial fork ok, child pid is $pid_2\" ) ;\n                is( 3, kill( 'ZERO', $PROCESS_ID, $pid_2, $pid_1 ), \"kill ZERO : myself $PROCESS_ID and child $pid_2 and brother $pid_1 => 3\" ) ;\n\n                is( $pid_2, waitpid( $pid_2, 0 ),  \"kill_zero: child $pid_2 no more there => waitpid return $pid_2\" ) ;\n        }\n        else\n        {\n                # I am the child\n                note( 'This one fails under Windows, kill ZERO returns 0 instead of 2' ) ;\n                is( 2, kill( 'ZERO', $PROCESS_ID, $pid_1 ), \"kill ZERO : myself child $PROCESS_ID brother $pid_1 => 2\" ) ;\n                myprint( \"I am the child pid $PROCESS_ID, Exiting\\n\" ) ;\n                exit ;\n        }\n        wait(  ) ;\n\n        # End of SKIP block\n        }\n\n        note( 'Leaving  tests_kill_zero()' ) ;\n        return ;\n}\n\n\n\n\nsub tests_killpid_by_parent\n{\n        note( 'Entering tests_killpid_by_parent()' ) ;\n\n        SKIP: {\n        if ( 'MSWin32' eq $OSNAME ) { skip( 'Tests tests_killpid_by_parent avoided on Windows', 7 ) ; }\n\n        is( undef, killpid(  ),  'killpid: no args => undef' ) ;\n        note( \"killpid: trying to kill myself pid $PROCESS_ID, hope I will not succeed\" ) ;\n        is( undef, killpid( $PROCESS_ID ),  'killpid: myself => undef' ) ;\n\n        local $SIG{'QUIT'} = sub { myprint \"GOT SIG QUIT! I am PID $PROCESS_ID. Exiting\\n\" ; exit ; } ;\n\n        my $pid ;\n        $pid = fork(  ) ;\n        if ( $pid )\n        {\n                # I am the parent\n                ok( defined( $pid ), \"killpid: initial fork ok. I am the parent $PROCESS_ID\" ) ;\n                ok( $pid , \"killpid: initial fork ok, child pid is $pid\" ) ;\n\n                is( 2, kill( 'ZERO', $PROCESS_ID, $pid ), \"kill ZERO : myself $PROCESS_ID and child $pid => 2\" ) ;\n                is( 1, killpid( $pid ),  \"killpid: child $pid killed => 1\" ) ;\n                is( -1, waitpid( $pid, 0 ),  \"killpid: child $pid no more there => waitpid return -1\" ) ;\n        }\n        else\n        {\n                # I am the child\n                myprint( \"I am the child pid $PROCESS_ID, sleeping 1 + 3 seconds then kill myself\\n\" ) ;\n                sleep 1 ;\n                myprint( \"I am the child pid $PROCESS_ID, slept 1 second, should be killed by my parent now, PPID \" . mygetppid(  ) . \"\\n\" ) ;\n                sleep 3 ;\n                # this test should not be run. If it happens => failure.\n                ok( 0 == 1, \"killpid: child pid $PROCESS_ID not dead => failure\" ) ;\n                myprint( \"I am the child pid $PROCESS_ID, killing myself failure... Exiting\\n\" ) ;\n                exit ;\n        }\n\n        # End of SKIP block\n        }\n        note( 'Leaving  tests_killpid_by_parent()' ) ;\n        return ;\n}\n\nsub tests_killpid_by_brother\n{\n        note( 'Entering tests_killpid_by_brother()' ) ;\n\n\n        SKIP: {\n        if ( 'MSWin32' eq $OSNAME ) { skip( 'Tests tests_killpid_by_brother avoided on Windows', 2 ) ; }\n\n        local $SIG{'QUIT'} = sub { myprint \"GOT SIG QUIT! I am PID $PROCESS_ID. Exiting\\n\" ; exit ; } ;\n\n        my $pid_parent = $PROCESS_ID ;\n        myprint( \"I am the parent pid $pid_parent\\n\" ) ;\n        my $pid_1 = fork(  ) ;\n        if ( $pid_1 )\n        {\n                # parent\n        }\n        else\n        {\n                # child\n                #while ( 1 ) {  } ;\n                sleep 2 ;\n                sleep 2 ;\n                # this test should not be run. If it happens => failure.\n                # Well under Windows this always fails, shit!\n                ok( 0 == 1 or ( 'MSWin32' eq $OSNAME ) , \"killpid: child pid $PROCESS_ID killing by brother but not dead => failure\" ) ;\n                myprint( \"I am the child pid $PROCESS_ID, killing by brother failed... Exiting\\n\" ) ;\n                exit ;\n        }\n\n        my $pid_2 ;\n        $pid_2 = fork(  ) ;\n        if ( $pid_2 )\n        {\n                # parent\n        }\n        else\n        {\n                # I am the child\n                myprint( \"I am the child pid $PROCESS_ID, my brother has pid $pid_1\\n\" ) ;\n                is( 1, killpid( $pid_1 ),  \"killpid: brother $pid_1 killed => 1\" ) ;\n                sleep 2 ;\n                exit ;\n        }\n\n        #sleep 1 ;\n        is( $pid_1, waitpid( $pid_1, 0), \"I am the parent $PROCESS_ID waitpid _1( $pid_1 )\" ) ;\n        is( $pid_2, waitpid( $pid_2, 0 ), \"I am the parent $PROCESS_ID waitpid _2( $pid_2 )\" ) ;\n\n\n        # End of SKIP block\n        }\n\n        note( 'Leaving  tests_killpid_by_brother()' ) ;\n        return ;\n}\n\n\nsub killpid\n{\n        my $pidtokill = shift ;\n\n        if ( ! $pidtokill ) {\n                myprint( \"No process to kill.\\n\" ) ;\n                return ;\n        }\n\n        if ( $PROCESS_ID == $pidtokill ) {\n                myprint( \"I will not kill myself pid $PROCESS_ID via killpid. Sractch it!\\n\" ) ;\n                return ;\n        }\n\n\n        # First ask for suicide\n        if ( kill( 'ZERO', $pidtokill ) or ( 'MSWin32' eq $OSNAME ) ) {\n                myprint( \"Sending signal QUIT to PID $pidtokill \\n\" ) ;\n                kill 'QUIT', $pidtokill ;\n                sleep 3 ;\n                waitpid( $pidtokill, WNOHANG) ;\n        }else{\n                myprint( \"Can not send signal kill ZERO to PID $pidtokill.\\n\" ) ;\n                return ;\n        }\n\n        #while ( waitpid( $pidtokill, WNOHANG) > 0 ) {  } ;\n\n\t# Then murder\n\tif ( kill( 'ZERO', $pidtokill ) or ( 'MSWin32' eq $OSNAME ) ) {\n\t\tmyprint( \"Sending signal KILL to PID $pidtokill \\n\" ) ;\n\t\tkill 'KILL', $pidtokill ;\n\t\tsleep 1 ;\n                waitpid( $pidtokill, WNOHANG) ;\n\t}else{\n\t\tmyprint( \"Process PID $pidtokill ended.\\n\" ) ;\n\t\treturn 1;\n\t}\n\t# Well ...\n\tif ( kill( 'ZERO', $pidtokill ) or ( 'xMSWin32' eq $OSNAME ) ) {\n\t\tmyprint( \"Process PID $pidtokill seems still there. Can not do much.\\n\" ) ;\n\t\treturn ;\n\t}else{\n\t\tmyprint( \"Process PID $pidtokill ended.\\n\" ) ;\n\t\treturn 1;\n\t}\n\n        return ;\n}\n\nsub tests_abort\n{\n        note( 'Entering tests_abort()' ) ;\n        # Well, the abort behavior is tested by test.sh\n        is( undef, abort(  ),  'abort: no args => undef' ) ;\n        note( 'Leaving  tests_abort()' ) ;\n        return ;\n}\n\n\n\n\nsub abort\n{\n        my $mysync = shift @ARG ;\n\n        myprint( \"In abort\\n\" ) ;\n        if ( not $mysync ) { return ; }\n\n        if ( ! -r $mysync->{pidfile} ) {\n                myprint( \"In abort: Can not read pidfile $mysync->{pidfile}\\n\" ) ;\n                return ;\n        }\n        my $pidtokill = firstline( $mysync->{pidfile} ) ;\n        if ( ! $pidtokill ) {\n                myprint( \"In abort: No process to abort in $mysync->{pidfile}\\n\" ) ;\n                return ;\n        }\n\n        if ( ! match_a_pid_number( $pidtokill ) )\n        {\n                myprint( \"In abort: pid $pidtokill in $mysync->{pidfile} is not a pid number\\n\" ) ;\n                return ;\n        }\n\n\n        if ( $mysync->{abortbyfile} )\n        {\n                abortbyfile( $mysync, $pidtokill ) ;\n        }\n        else\n        {\n                killpid( $pidtokill ) ;\n        }\n        return ;\n}\n\nsub abortbyfile\n{\n        my $mysync    = shift @ARG ;\n        my $pidtokill = shift @ARG ;\n\n        my $abortfile = abortfile( $mysync, $pidtokill ) ;\n        myprint( \"touching $abortfile\\n\" ) ;\n        touch( $abortfile ) ;\n        return ;\n}\n\n\nsub tests_under_docker_context\n{\n        note( 'Entering tests_under_docker_context()' ) ;\n\n        is( undef, under_docker_context(  ),  'under_docker_context: no args => undef' ) ;\n\n        my $mysync = {  } ;\n        $mysync->{ dockercontext } = 1 ;\n        is( 1, under_docker_context( $mysync ),  'under_docker_context: --dockercontext => 1' ) ;\n        $mysync->{ dockercontext } = 0 ;\n        is( 0, under_docker_context( $mysync ),  'under_docker_context: --nodockercontext => 0' ) ;\n\n        $mysync = {  } ;\n        # Is not it a stupid test?\n        if ( under_docker_context( $mysync ) )\n        {\n                is( 1, under_docker_context( $mysync ),  'under_docker_context: docker context => 1' ) ;\n        }\n        else\n        {\n                is( 0, under_docker_context( $mysync ),  'under_docker_context: not docker context => 0' ) ;\n        }\n\n        note( 'Leaving  tests_under_docker_context()' ) ;\n        return ;\n}\n\n\nsub under_docker_context\n{\n        my $mysync = shift ;\n\n        if ( ! defined $mysync ) { return ; }\n\n        if ( defined $mysync->{ dockercontext } )\n        {\n                return( $mysync->{ dockercontext } ) ;\n        }\n\n        if ( -e '/.dockerenv' )\n        {\n                return 1 ;\n        }\n        else\n        {\n                return 0 ;\n        }\n\n        return ;\n}\n\n\nsub docker_context\n{\n        my $mysync = shift ;\n\n        if ( ! under_docker_context( $mysync ) )\n        {\n                return ;\n        }\n\n        output( $mysync, \"Docker context detected with the file /.dockerenv\\n\" ) ;\n        # No pidfile by default\n\n        $mysync->{ pidfile } = defined( $mysync->{ pidfile } ) ? $mysync->{ pidfile } : q{} ;\n        # No log by default\n        if ( defined( $mysync->{ log } ) )\n        {\n                output( $mysync, \"Logging in Docker context. Be sure you added access to it with a mount or similar. See https://docs.docker.com/storage/volumes/\\n\" ) ;\n        }\n        else\n        {\n                output( $mysync, \"No log by default in Docker context. Use --log to trigger logging to the logfile.\\n\" ) ;\n                $mysync->{ log } = 0 ;\n        }\n\n        # In case something is written relatively to .\n        my $tmp_dir = \"/var/tmp/uid_$EFFECTIVE_USER_ID\" ;\n        mkpath( $tmp_dir ) ; # silly? No. it is for imapsync --version being ok.\n        do_valid_directory( $tmp_dir ) ;\n        output( $mysync, \"Changing current directory to $tmp_dir\\n\" ) ;\n        chdir $tmp_dir ;\n\n        return ;\n}\n\nsub cgibegin\n{\n\tmy $mysync = shift ;\n\tif ( ! under_cgi_context( $mysync ) ) { return ; }\n\trequire CGI ;\n\tCGI->import( qw( -no_debug -utf8 ) ) ;\n\trequire CGI::Carp ;\n\tCGI::Carp->import( qw( fatalsToBrowser ) ) ;\n\t$mysync->{cgi} = CGI->new( ) ;\n\treturn ;\n}\n\nsub tests_under_cgi_context\n{\n\tnote( 'Entering tests_under_cgi_context()' ) ;\n\n\t# $ENV{SERVER_SOFTWARE} = 'under imapsync' ;\n\tdo {\n\t\t# Not in cgi context\n\t\tdelete local $ENV{SERVER_SOFTWARE} ;\n\t\tis( undef, under_cgi_context(  ), 'under_cgi_context: SERVER_SOFTWARE unset => not in cgi context' ) ;\n\t} ;\n\tdo {\n\t\t# In cgi context\n\t\tlocal $ENV{SERVER_SOFTWARE} = 'under imapsync' ;\n\t\tis( 1, under_cgi_context(  ), 'under_cgi_context: SERVER_SOFTWARE set => in cgi context' ) ;\n\t} ;\n\tdo {\n\t\t# Not in cgi context\n\t\tdelete local $ENV{SERVER_SOFTWARE} ;\n\t\tis( undef, under_cgi_context(  ), 'under_cgi_context: SERVER_SOFTWARE unset => not in cgi context' ) ;\n\t} ;\n\tdo {\n\t\t# In cgi context\n\t\tlocal $ENV{SERVER_SOFTWARE} = 'under imapsync' ;\n\t\tis( 1, under_cgi_context(  ), 'under_cgi_context: SERVER_SOFTWARE set => in cgi context' ) ;\n\t} ;\n\tnote( 'Leaving  tests_under_cgi_context()' ) ;\n\treturn ;\n}\n\n\nsub under_cgi_context\n{\n        my $mysync = shift ;\n        # Under cgi context\n        if ( $ENV{SERVER_SOFTWARE} ) {\n                return 1 ;\n        }\n        # Not in cgi context\n        return ;\n}\n\nsub cgibuildheader\n{\n\tmy $mysync = shift ;\n\tif ( ! under_cgi_context( $mysync ) ) { return ; }\n\n\tmy $imapsync_runs = $mysync->{cgi}->cookie( 'imapsync_runs' ) || 0 ;\n\tmy $cookie = $mysync->{cgi}->cookie(\n\t\t\t-name => 'imapsync_runs',\n\t\t\t-value => 1 + $imapsync_runs,\n\t\t\t-expires => '+20y',\n\t\t\t-path    => '/cgi-bin/imapsync',\n\t\t) ;\n\tmy $httpheader ;\n\tif ( $mysync->{ abort } ) {\n\t\t$httpheader = $mysync->{cgi}->header(\n\t\t\t-type   => 'text/plain; charset=UTF-8',\n\t\t\t-status => '200 OK to abort syncing IMAP boxes' . \". Here is \" . hostname(),\n\t\t) ;\n\t}elsif( $mysync->{ loaddelay } ) {\n# https://tools.ietf.org/html/rfc2616#section-10.5.4\n# 503 Service Unavailable\n# The server is currently unable to handle the request due to a temporary overloading or maintenance of the server.\n\t\t$httpheader = $mysync->{cgi}->header(\n\t\t\t-type   => 'text/plain; charset=UTF-8',\n\t\t\t-status => '503 Service Unavailable' . \". Be back in $mysync->{ loaddelay } min. Load on \" . hostname() . \" is $mysync->{ loadavg }\",\n\t\t) ;\n\t}else{\n\t\t$httpheader = $mysync->{cgi}->header(\n\t\t-type   => 'text/plain; charset=UTF-8',\n\t\t-status => '200 OK to sync IMAP boxes' . \". Load on \" . hostname() . \" is $mysync->{ loadavg }\",\n\t\t-cookie => $cookie,\n\t\t) ;\n\t}\n\toutput_start( $mysync, $httpheader ) ;\n\n\treturn ;\n}\n\nsub cgiload\n{\n        # Exit on heavy load in CGI context\n        my $mysync = shift ;\n        if ( ! under_cgi_context( $mysync ) ) { return ; }\n        if ( $mysync->{ abort } ) { return ; } # keep going to abort since some ressources will be free soon\n        if ( $mysync->{ loaddelay } )\n        {\n                $mysync->{nb_errors}++ ;\n                exit_clean( $mysync, $EX_UNAVAILABLE,\n                        \"Server is on heavy load. Be back in $mysync->{ loaddelay } min. Load is $mysync->{ loadavg }\\n\"\n                ) ;\n        }\n        return ;\n}\n\nsub tests_set_umask\n{\n\tnote( 'Entering tests_set_umask()' ) ;\n\n\tmy $save_umask = umask ;\n\n\tmy $mysync = {} ;\n\tif ( 'MSWin32' eq $OSNAME ) {\n\t\tis( undef, set_umask( $mysync ), \"set_umask: set failure to $UMASK_PARANO on MSWin32\" ) ;\n\t}else{\n\t\tis( 1, set_umask( $mysync ), \"set_umask: set to $UMASK_PARANO\" ) ;\n\t}\n\n\tumask $save_umask ;\n\tnote( 'Leaving  tests_set_umask()' ) ;\n\treturn ;\n}\n\nsub set_umask\n{\n\tmy $mysync = shift ;\n\tmy $previous_umask = umask_str(  ) ;\n\tmy $new_umask = umask_str( $UMASK_PARANO ) ;\n\toutput( $mysync, \"Umask set with $new_umask (was $previous_umask)\\n\" ) ;\n\tif ( $new_umask eq $UMASK_PARANO ) {\n\t\treturn 1 ;\n\t}\n\treturn ;\n}\n\nsub tests_umask_str\n{\n\tnote( 'Entering tests_umask_str()' ) ;\n\n\tmy $save_umask = umask ;\n\n\tis( umask_str(  ), umask_str(  ),  'umask_str: no parameters => idopotent' ) ;\n\tis( my $save_umask_str = umask_str(  ), umask_str(  ),  'umask_str: no parameters => idopotent + save' ) ;\n\tis( '0000', umask_str(    q{ } ),  'umask_str:  q{ } => 0000' ) ;\n\tis( '0000', umask_str(     q{} ),  'umask_str:   q{} => 0000' ) ;\n\tis( '0000', umask_str(  '0000' ),  'umask_str:  0000 => 0000' ) ;\n\tis( '0000', umask_str(     '0' ),  'umask_str:     0 => 0000' ) ;\n\tis( '0200', umask_str(  '0200' ),  'umask_str:  0200 => 0200' ) ;\n\tis( '0400', umask_str(  '0400' ),  'umask_str:  0400 => 0400' ) ;\n\tis( '0600', umask_str(  '0600' ),  'umask_str:  0600 => 0600' ) ;\n\n\tSKIP: {\n\tif ( 'MSWin32' eq $OSNAME ) { skip( 'Tests success only for Unix', 6 ) ; }\n\tis( '0100', umask_str(  '0100' ),  'umask_str:  0100 => 0100' ) ;\n\tis( '0001', umask_str(  '0001' ),  'umask_str:  0001 => 0001' ) ;\n\tis( '0777', umask_str(  '0777' ),  'umask_str:  0777 => 0777' ) ;\n\tis( '0777', umask_str( '00777' ),  'umask_str: 00777 => 0777' ) ;\n\tis( '0777', umask_str( ' 777 ' ),  'umask_str:  777  => 0777' ) ;\n\tis( \"$UMASK_PARANO\", umask_str( $UMASK_PARANO ),   \"umask_str: UMASK_PARANO $UMASK_PARANO => $UMASK_PARANO\" ) ;\n\t}\n\n\tis( $save_umask_str, umask_str( $save_umask_str ),  'umask_str: restore with str' ) ;\n\tis( $save_umask, umask, 'umask_str: umask is restored, controlled by direct umask' ) ;\n\tis( $save_umask, umask $save_umask, 'umask_str: umask is restored by direct umask' ) ;\n\tis( $save_umask, umask, 'umask_str: umask initial controlled by direct umask' ) ;\n\n\tnote( 'Leaving  tests_umask_str()' ) ;\n\treturn ;\n}\n\nsub umask_str\n{\n\tmy $value = shift ;\n\n\tif ( defined $value ) {\n\t\tumask oct( $value ) ;\n\t}\n\tmy $current = umask ;\n\n\treturn( sprintf( '%#04o', $current ) ) ;\n}\n\nsub tests_umask\n{\n\tnote( 'Entering tests_umask()' ) ;\n\n\tmy $save_umask ;\n\tis( umask, umask, 'umask: umask is umask' ) ;\n\tis( $save_umask = umask, umask, \"umask: umask is umask again + save it: $save_umask\" ) ;\n\tis( $save_umask, umask oct(0000), 'umask: umask 0000' ) ;\n\tis( oct(0000), umask, 'umask: umask is now 0000' ) ;\n\tis( oct(0000), umask oct(777), 'umask: umask 0777 call, previous 0000' ) ;\n\n\tSKIP: {\n\tif ( 'MSWin32' eq $OSNAME ) { skip( 'Tests success only for Unix', 2 ) ; }\n\tis( oct(777), umask, 'umask: umask is now  0777' ) ;\n\tis( oct(777), umask $save_umask, \"umask: umask $save_umask restore inital value, previous 0777\" ) ;\n\t}\n\n\tok( defined umask $save_umask, \"umask: umask $save_umask restore inital value, previous defined\" ) ;\n\tis( $save_umask, umask, 'umask: umask is umask restored' ) ;\n\tnote( 'Leaving  tests_umask()' ) ;\n\n\treturn ;\n}\n\nsub buggyflagsregex\n{\n        # From /X analyse\n        # cut -d: -f1 Error_112_all_syncs.txt   | xargs egrep -oih 'Invalid system flag [^( ]+'  | sort | uniq -c | sort -g\n        my @buggyflagsregex = ( 's/\\\\\\\\RECEIPTCHECKED|\\\\\\\\Indexed|\\\\\\\\X-EON-HAS-ATTACHMENT|\\\\\\\\UNSEEN|\\\\\\\\ATTACHED|\\\\\\\\X-HAS-ATTACH|\\\\\\\\FORWARDED|\\\\\\\\FORWARD|\\\\\\\\X-FORWARDED|\\\\\\\\\\$FORWARDED|\\\\\\\\PRIORITY|\\\\\\\\READRCPT//g' ) ;\n        return( @buggyflagsregex ) ;\n}\n\nsub cgisetcontext\n{\n        my $mysync = shift ;\n        if ( ! under_cgi_context( $mysync ) ) { return ; }\n\n        output( $mysync, \"Under cgi context\\n\" ) ;\n\n\n        set_umask( $mysync ) ;\n\n        # Remove all content in unsafe evaled options\n        @{ $mysync->{ regextrans2 } } = (  ) ;\n\n        @{ $mysync->{ regexflag } } = buggyflagsregex(  ) ;\n\n        @regexmess   = (  ) ;\n        @skipmess    = (  ) ;\n        @pipemess    = (  ) ;\n        $delete2foldersonly   = undef ;\n        $delete2foldersbutnot = undef ;\n        $maxlinelengthcmd     = undef ;\n\n        # Set safe default values (I hope...)\n\n\n        #$mysync->{pidfile} =  'imapsync.pid' ;\n        $mysync->{ pidfilelocking } = 1 ;\n        $mysync->{ errorsmax } = $ERRORS_MAX_CGI ;\n        $modulesversion = 0 ;\n        $mysync->{ releasecheck } = defined  $mysync->{ releasecheck }  ? $mysync->{ releasecheck } : 1 ;\n        $usecache = 0 ;\n        $mysync->{ showpasswords } = 0 ;\n        $mysync->{ acc1 }->{ debugimap } = 0 ;\n        $mysync->{ acc2 }->{ debugimap } = 0 ;\n\n        $mysync->{ acc1 }->{ reconnectretry } = $DEFAULT_NB_RECONNECT_PER_IMAP_COMMAND ;\n        $mysync->{ acc2 }->{ reconnectretry } = $DEFAULT_NB_RECONNECT_PER_IMAP_COMMAND ;\n\n        $pipemesscheck = 0 ;\n\n        $mysync->{ hashfile } = $CGI_HASHFILE ;\n        my $hashsynclocal = hashsynclocal( $mysync ) || die \"Can not get hashsynclocal. Exiting\\n\" ;\n\n        if ( $ENV{ 'NET_SERVER_SOFTWARE' } and ( $ENV{ 'NET_SERVER_SOFTWARE' } =~ /Net::Server::HTTP/ ) )\n        {\n                # under local webserver\n                $cgidir = q{.} ;\n        }\n        else\n        {\n                $cgidir = $CGI_TMPDIR_TOP . '/' . $hashsynclocal ;\n        }\n        -d $cgidir or mkpath $cgidir or die \"Can not create $cgidir: $OS_ERROR\\n\" ;\n        $mysync->{ tmpdir } = $cgidir ;\n        $mysync->{ logdir } = '' ;\n\n        chdir  $cgidir or die \"Can not cd to $cgidir: $OS_ERROR\\n\" ;\n        cgioutputenvcontext( $mysync ) ;\n        $mysync->{ debug } and output( $mysync, 'Current directory is ' . getcwd(  ) . \"\\n\" ) ;\n        $mysync->{ debug } and output( $mysync, 'Real user id is ' . getpwuid_any_os( $REAL_USER_ID ) . \" (uid $REAL_USER_ID)\\n\" ) ;\n        $mysync->{ debug } and output( $mysync, 'Effective user id is ' . getpwuid_any_os( $EFFECTIVE_USER_ID ). \" (euid $EFFECTIVE_USER_ID)\\n\" ) ;\n\n        $mysync->{ skipemptyfolders } = defined  $mysync->{ skipemptyfolders }  ? $mysync->{ skipemptyfolders } : 1 ;\n\n        # Out of memory with messages over 1 GB ?\n        $mysync->{ maxsize } = defined  $mysync->{ maxsize }  ? $mysync->{ maxsize } : 1_000_000_000 ;\n\n        # tail -f behaviour on by default\n        $mysync->{ tail } = defined  $mysync->{ tail }  ? $mysync->{ tail } : 1 ;\n\n        # not sure it's for good\n        @useheader = qw( Message-Id Received ) ;\n\n        # addheader on by default\n        $mysync->{ addheader } = defined  $mysync->{ addheader }  ? $mysync->{ addheader } : 1 ;\n\n        # sync duplicates by default in cgi context\n        $mysync->{ syncduplicates } = defined  $mysync->{ syncduplicates }  ? $mysync->{ syncduplicates } : 1 ;\n\n        # log the logfile name by default in cgi context\n        $mysync->{ loglogfile } = defined  $mysync->{ loglogfile }  ? $mysync->{ loglogfile } : 1 ;\n        return ;\n}\n\nsub cgioutputenvcontext\n{\n\tmy $mysync = shift @ARG ;\n\n\tfor my $envvar ( qw( REMOTE_ADDR REMOTE_HOST HTTP_REFERER HTTP_USER_AGENT SERVER_SOFTWARE SERVER_PORT HTTP_COOKIE ) ) {\n\n\t\tmy $envval = $ENV{ $envvar } || q{} ;\n\t\tif ( $envval ) { output( $mysync, \"$envvar is $envval\\n\" ) } ;\n\t}\n\n\treturn ;\n}\n\nsub announcelogfile\n{\n        my $mysync = shift ;\n\n        if ( $mysync->{ log } )\n        {\n                myprint( \"Log file is $mysync->{ logfile } ( to change it, use --logfile path ; or use --nolog to turn off logging )\\n\" ) ;\n                loglogfile( $mysync ) ;\n        }\n        else\n        {\n                myprint( \"No log file because of option --nolog\\n\" ) ;\n        }\n        return ;\n}\n\n\nsub loglogfile\n{\n        my $mysync = shift ;\n        if ( ! $mysync->{ loglogfile } ) { return ; }\n        if ( ! $mysync->{ log        } ) { return ; }\n\n        my $cwd = getcwd(  ) ;\n        my $absolutelogfilepath ;\n        # Fixme: add case when the logfile name is already absolute\n        $absolutelogfilepath = \"$cwd/$mysync->{ logfile }\" ;\n        my $loglogfilename = '../list_all_logs_auto.txt' ;\n        myprint( \"Writing log file name $absolutelogfilepath to $loglogfilename\\n\" ) ;\n        if ( open( my $fh, '>>', $loglogfilename ) )\n        {\n                print $fh \"$absolutelogfilepath\\n\" ;\n                close $fh ;\n        }\n        else\n        {\n                myprint( \"Could not open loglogfile $loglogfilename $!\\n\" ) ;\n        }\n        return ;\n}\n\n\nsub checkselectable\n{\n        my $mysync = shift ;\n\n        if ( $mysync->{ checkselectable } ) {\n                my @h1_folders_wanted_selectable ;\n                myprint( \"Host1: Checking wanted folders are selectable. Use --nocheckselectable to avoid this check.\\n\"  ) ;\n                foreach my $folder ( @{ $mysync->{ h1_folders_wanted } } )\n                {\n                        ( $mysync->{ debug } or $mysync->{ debugfolders } ) and myprint( \"Checking $folder is selectable on host1\\n\"  ) ;\n                        # It does an imap command  LIST \"\" $folder and then search for no \\Noselect\n                        if ( ! $mysync->{ imap1 }->selectable( $folder ) )\n                        {\n                                myprint( \"Host1: warning! ignoring folder $folder because it is not selectable\\n\" ) ;\n                        }else\n                        {\n                                push  @h1_folders_wanted_selectable, $folder  ;\n                        }\n                }\n                @{ $mysync->{ h1_folders_wanted } } = @h1_folders_wanted_selectable ;\n                ( $mysync->{ debug } or $mysync->{ debugfolders } )\n                        and myprint( 'Host1: checking folders took ', timenext( $mysync ), \" s\\n\"  ) ;\n        }\n        else\n        {\n                myprint( \"Host1: Not checking that wanted folders are selectable. Use --checkselectable to force this check.\\n\"  ) ;\n        }\n        return ;\n}\n\nsub setcheckselectable\n{\n        my $mysync = shift ;\n\n        my $h1_folders_wanted_nb = scalar @{ $mysync->{ h1_folders_wanted } } ;\n        # 152 because 98% of host1 accounts have less than 152 folders on /X service.\n        # command to get this value:\n        #     datamash_file_op_index G_Host1_Nb_folders.txt  perc:98 4  %16.1f\n        if ( ! defined $mysync->{ checkselectable } )\n        {\n                if ( 152 >= $h1_folders_wanted_nb )\n                {\n                        $mysync->{ checkselectable } = 1 ;\n                }else{\n                        myprint( \"Host1: Not checking that $h1_folders_wanted_nb wanted folders are selectable. Use --checkselectable to force this check.\\n\"  ) ;\n                        $mysync->{ checkselectable } = 0 ;\n                }\n        }\n        return ;\n}\n\n\n\nsub debugsleep\n{\n        my $mysync = shift @ARG ;\n        if ( defined $mysync->{debugsleep} ) {\n                myprint( \"Info: sleeping $mysync->{debugsleep}s\\n\" ) ;\n                sleep $mysync->{debugsleep} ;\n        }\n        return ;\n}\n\nsub tests_foldersize\n{\n        note( 'Entering tests_foldersize()' ) ;\n\n        is( undef, foldersize(  ),  'foldersize: no args => undef' ) ;\n\n\n        #is_deeply( {}, {}, 'foldersize: a hash is a hash' ) ;\n        #is_deeply( [], [], 'foldersize: an array is an array' ) ;\n        note( 'Leaving  tests_foldersize()' ) ;\n        return ;\n}\n\n\n\n# Globals:\n# $fetch_hash_set\n#\nsub foldersize\n{\n        # size of one folder\n        my ( $mysync, $side, $imap, $search_cmd, $abletosearch, $folder ) = @ARG ;\n\n        if ( ! all_defined( $mysync, $side, $imap, $folder ) )\n        {\n                return ;\n        }\n\n        # FTGate is RFC buggy with EXAMINE it does not act as SELECT\n        #if ( ! $imap->examine( $folder ) ) {\n        if ( ! $imap->select( $folder ) ) {\n                my $error = join q{},\n                        \"$side Folder $folder: Could not select: \",\n                        $imap->LastError,  \"\\n\"  ;\n                errors_incr( $mysync, $error ) ;\n                return ;\n        }\n\n        if ( $imap->IsUnconnected(  ) )\n        {\n                return ;\n        }\n\n        my $hash_ref = { } ;\n        my @msgs = select_msgs( $imap, undef, $search_cmd, $abletosearch, $folder ) ;\n        my $nb_msgs = scalar  @msgs  ;\n        my $biggest_in_folder = 0 ;\n        @{ $hash_ref }{ @msgs } = ( undef ) if @msgs ;\n\n\n        my $stot = 0 ;\n\n        if ( $imap->IsUnconnected(  ) )\n        {\n                return ;\n        }\n\n        if ( $nb_msgs > 0 and @msgs ) {\n                if ( $abletosearch ) {\n                        if ( ! $imap->fetch_hash( \\@msgs, 'RFC822.SIZE', $hash_ref) ) {\n                                my $error = \"$side failure with fetch_hash: $EVAL_ERROR\\n\" ;\n                                errors_incr( $mysync, $error ) ;\n                                return ;\n                        }\n                }\n                else\n                {\n                        my $fetch_hash_uids = $fetch_hash_set || \"1:*\" ;\n                        if ( ! $imap->fetch_hash( $fetch_hash_uids, 'RFC822.SIZE', $hash_ref ) ) {\n                                my $error = \"$side failure with fetch_hash: $EVAL_ERROR\\n\" ;\n                                errors_incr( $mysync, $error ) ;\n                                return ;\n                        }\n                }\n                for ( keys %{ $hash_ref } ) {\n                        my $size =  $hash_ref->{ $_ }->{ 'RFC822.SIZE' } ;\n                        if ( defined $size )\n                        {\n                                $stot += $size ;\n                                $biggest_in_folder =  max( $biggest_in_folder, $size ) ;\n                        }\n                }\n        }\n        return( $stot, $nb_msgs, $biggest_in_folder ) ;\n\n}\n\n\n# The old subroutine that performed just one side at a time.\n# Still here for a while, until confident with sub foldersize_diff_compute()\nsub foldersizes\n{\n        my ( $mysync, $side, $imap, $search_cmd, $abletosearch, @folders ) = @_ ;\n        my $total_size = 0 ;\n        my $total_nb = 0 ;\n        my $biggest_in_all = 0 ;\n\n        my $nb_folders = scalar  @folders  ;\n        my $ct_folders = 0 ; # folder counter.\n        myprint( \"++++ Calculating sizes of $nb_folders folders on $side\\n\"  ) ;\n        foreach my $folder ( @folders )     {\n                my $stot = 0 ;\n                my $nb_msgs = 0 ;\n                my $biggest_in_folder = 0 ;\n\n                $ct_folders++ ;\n                myprintf( \"$side folder %7s %-35s\", \"$ct_folders/$nb_folders\", jux_utf8( $folder ) ) ;\n                if ( 'Host2' eq $side and not exists  $mysync->{h2_folders_all_UPPER}{ uc  $folder  }  ) {\n                        myprint( \" does not exist yet\\n\") ;\n                        next ;\n                }\n                if ( 'Host1' eq $side and not exists  $h1_folders_all{ $folder }  ) {\n                        myprint( \" does not exist\\n\" ) ;\n                        next ;\n                }\n\n                last if $imap->IsUnconnected(  ) ;\n\n                ( $stot, $nb_msgs, $biggest_in_folder ) = foldersize( $mysync, $side, $imap, $search_cmd, $abletosearch, $folder ) ;\n\n                myprintf( ' Size: %9s', $stot ) ;\n                myprintf( ' Messages: %5s', $nb_msgs ) ;\n                myprintf( \" Biggest: %9s\\n\", $biggest_in_folder ) ;\n                $total_size += $stot ;\n                $total_nb += $nb_msgs ;\n                $biggest_in_all =  max( $biggest_in_all, $biggest_in_folder ) ;\n        }\n        myprintf( \"%s Nb folders:           %11s folders\\n\",    $side, $nb_folders ) ;\n        myprintf( \"%s Nb messages:          %11s messages\\n\",   $side, $total_nb ) ;\n        myprintf( \"%s Total size:           %11s bytes (%s)\\n\", $side, $total_size, bytes_display_string_bin( $total_size ) ) ;\n        myprintf( \"%s Biggest message:      %11s bytes (%s)\\n\", $side, $biggest_in_all, bytes_display_string_bin( $biggest_in_all ) ) ;\n        myprintf( \"%s Time spent on sizing: %11.1f seconds\\n\",  $side, timenext( $mysync ) ) ;\n        return( $total_nb, $total_size ) ;\n}\n\n\nsub foldersize_diff_present\n{\n        my $mysync = shift ;\n        my $folder1 = shift ;\n        my $folder2 = shift ;\n        my $counter_str = shift ;\n        my $force = shift ;\n\n        my $values1_str ;\n        my $values2_str ;\n\n        if ( ! defined $mysync->{ folder1 }->{ $folder1 }->{ size } || $force )\n        {\n                foldersize_diff_compute( $mysync, $folder1, $folder2, $force ) ;\n        }\n\n        # again, but this time it means no availaible data.\n        if ( defined $mysync->{ folder1 }->{ $folder1 }->{ size } )\n        {\n                $values1_str = sprintf( \"Size: %9s Messages: %5s Biggest: %9s\\n\",\n                        $mysync->{ folder1 }->{ $folder1 }->{ size },\n                        $mysync->{ folder1 }->{ $folder1 }->{ nb_msgs },\n                        $mysync->{ folder1 }->{ $folder1 }->{ biggest },\n                ) ;\n        }\n        else\n        {\n                $values1_str = \" does not exist\\n\" ;\n        }\n\n        if ( defined $mysync->{ folder2 }->{ $folder2 }->{ size } )\n        {\n                $values2_str = sprintf( \"Size: %9s Messages: %5s Biggest: %9s\\n\",\n                        $mysync->{ folder2 }->{ $folder2 }->{ size },\n                        $mysync->{ folder2 }->{ $folder2 }->{ nb_msgs },\n                        $mysync->{ folder2 }->{ $folder2 }->{ biggest },\n                ) ;\n        }\n        else\n        {\n                $values2_str = \" does not exist yet\\n\" ;\n        }\n\n        myprintf( \"Host1 folder %7s %-35s %s\",\n                \"$counter_str\",\n                jux_utf8( $folder1 ),\n                $values1_str\n        ) ;\n\n        myprintf( \"Host2 folder %7s %-35s %s\",\n                \"$counter_str\",\n                jux_utf8( $folder2 ),\n                $values2_str\n        ) ;\n\n        myprintf( \"Host2-Host1  %7s %-35s       %9s           %5s          %9s\\n\\n\",\n                \"\",\n                \"\",\n                $mysync->{ folder1 }->{ $folder1 }->{ size_diff },\n                $mysync->{ folder1 }->{ $folder1 }->{ nb_msgs_diff },\n                $mysync->{ folder1 }->{ $folder1 }->{ biggest_diff },\n\n        ) ;\n\n\n\n\n        return ;\n}\n\nsub foldersize_diff_compute\n{\n        my $mysync  = shift ;\n        my $folder1 = shift ;\n        my $folder2 = shift ;\n        my $force   = shift ;\n\n\n\n        my ( $size_1, $nb_msgs_1, $biggest_1 ) ;\n        # memoization\n        if (\n                exists $h1_folders_all{ $folder1 }\n                &&\n                (\n                        ! defined $mysync->{ folder1 }->{ $folder1 }->{ size }\n                        || $force\n                )\n        )\n        {\n                #myprint( \"foldersize folder1 $h1_folders_all{ $folder1 }\\n\" ) ;\n                ( $size_1, $nb_msgs_1, $biggest_1 ) =\n                        foldersize( $mysync,\n                                'Host1',\n                                $mysync->{ imap1 },\n                                $mysync->{ search1 },\n                                $mysync->{ abletosearch1 },\n                                $folder1\n                        ) ;\n                $mysync->{ folder1 }->{ $folder1 }->{ size }    = $size_1 ;\n                $mysync->{ folder1 }->{ $folder1 }->{ nb_msgs } = $nb_msgs_1 ;\n                $mysync->{ folder1 }->{ $folder1 }->{ biggest } = $biggest_1 ;\n        }\n        else\n        {\n                $size_1    = $mysync->{ folder1 }->{ $folder1 }->{ size } ;\n                $nb_msgs_1 = $mysync->{ folder1 }->{ $folder1 }->{ nb_msgs } ;\n                $biggest_1 = $mysync->{ folder1 }->{ $folder1 }->{ biggest } ;\n\n        }\n\n\n        my ( $size_2, $nb_msgs_2, $biggest_2 ) ;\n        if (\n                exists  $mysync->{ h2_folders_all_UPPER }{ uc $folder2 }\n                &&\n                (\n                        ! defined $mysync->{ folder2 }->{ $folder2 }->{ size }\n                        || $force\n                )\n        )\n        {\n                #myprint( \"foldersize folder2\\n\" ) ;\n                ( $size_2, $nb_msgs_2, $biggest_2 ) =\n                        foldersize( $mysync,\n                                'Host2',\n                                $mysync->{ imap2 },\n                                $mysync->{ search2 },\n                                $mysync->{ abletosearch2 },\n                                $folder2\n                        ) ;\n\n                $mysync->{ folder2 }->{ $folder2 }->{ size }    = $size_2    ;\n                $mysync->{ folder2 }->{ $folder2 }->{ nb_msgs } = $nb_msgs_2 ;\n                $mysync->{ folder2 }->{ $folder2 }->{ biggest } = $biggest_2 ;\n        }\n        else\n        {\n                $size_2    = $mysync->{ folder2 }->{ $folder2 }->{ size } ;\n                $nb_msgs_2 = $mysync->{ folder2 }->{ $folder2 }->{ nb_msgs } ;\n                $biggest_2 = $mysync->{ folder2 }->{ $folder2 }->{ biggest } ;\n\n        }\n\n\n        my $size_diff    = diff( $size_2, $size_1 ) ;\n        my $nb_msgs_diff = diff( $nb_msgs_2, $nb_msgs_1 ) ;\n        my $biggest_diff = diff( $biggest_2, $biggest_1 ) ;\n\n        $mysync->{ folder1 }->{ $folder1 }->{ size_diff }    = $size_diff ;\n        $mysync->{ folder1 }->{ $folder1 }->{ nb_msgs_diff } = $nb_msgs_diff ;\n        $mysync->{ folder1 }->{ $folder1 }->{ biggest_diff } = $biggest_diff ;\n\n        # It's redundant but easier to access later\n        $mysync->{ folder2 }->{ $folder2 }->{ size_diff }    = $size_diff ;\n        $mysync->{ folder2 }->{ $folder2 }->{ nb_msgs_diff } = $nb_msgs_diff ;\n        $mysync->{ folder2 }->{ $folder2 }->{ biggest_diff } = $biggest_diff ;\n\n        return ;\n}\n\nsub diff\n{\n        my $x = shift ;\n        my $y = shift ;\n\n        $x ||= 0 ;\n        $y ||= 0 ;\n\n        return $x - $y ;\n}\n\nsub add\n{\n        my $x = shift ;\n        my $y = shift ;\n\n        $x ||= 0 ;\n        $y ||= 0 ;\n\n        return $x + $y ;\n}\n\nsub tests_checknoabletosearch\n{\n        note( 'Entering checknoabletosearch()' ) ;\n\n        is( undef, checknoabletosearch(  ),  'checknoabletosearch: no args => undef' ) ;\n\n        note( 'Leaving  checknoabletosearch()' ) ;\n        return ;\n}\n\n\n\n\nsub checknoabletosearch\n{\n        # call example: checknoabletosearch( $sync, $sync->{ imap1 }, 'INBOX', 'Host1' ) ;\n        # output:\n        # * undef if something is not ok to decide\n        # * 1 if SEARCH ALL failed\n\n        my( $mysync, $imap, $folder, $HostX ) = @ARG ;\n\n        if ( ! all_defined( $mysync, $imap, $folder, $HostX ) )\n        {\n                return ;\n        }\n\n        myprint( \"$HostX: checking if SEARCH ALL works on $folder\\n\" ) ;\n        if ( ! select_folder( $mysync, $imap, $folder, $HostX ) )\n        {\n                myprint( \"$HostX: can not SELECT folder [$folder]\\n\" ) ;\n                return ;\n        }\n        my $count_from_select = count_from_select( $imap->History ) ;\n        myprint( \"$HostX: folder [$folder] has $count_from_select messages mentioned by SELECT\\n\" ) ;\n\n        my $msgs_all = $imap->messages(  ) ;\n        if ( ! $msgs_all )\n        {\n                myprint( \"$HostX: can not SEARCH ALL folder [$folder]\\n\" ) ;\n                myprint( \"$HostX: \", $imap->LastError(), \"\\n\" ) ;\n                return 1 ;\n        }\n\n        my $count_from_search_all = scalar( @{ $msgs_all } ) ;\n        myprint( \"$HostX: folder [$folder] has $count_from_search_all messages found by SEARCH ALL\\n\" ) ;\n\n        if ( $count_from_select == $count_from_search_all )\n        {\n                myprint( \"$HostX: folder [$folder] has the same messages count ($count_from_select) by SELECT and SEARCH ALL\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"$HostX: Warning, folder [$folder] has not the same count by SELECT ($count_from_select) and SEARCH ALL ($count_from_search_all)\\n\" )  ;\n                return 1 ;\n        }\n\n        return ;\n}\n\n\nsub foldersizes_diff_list\n{\n        my $mysync = shift ;\n        my $force  = shift ;\n\n        my @folders = @{ $mysync->{h1_folders_wanted} } ;\n        my $nb_folders = scalar  @folders  ;\n        my $ct_folders = 0 ; # folder counter.\n\n        foreach my $folder1 ( @folders )\n        {\n                $ct_folders++ ;\n                my $counter_str = \"$ct_folders/$nb_folders\" ;\n                my $folder2 = imap2_folder_name( $mysync, $folder1 ) ;\n                foldersize_diff_present( $mysync, $folder1, $folder2, $counter_str, $force ) ;\n        }\n\n        return ;\n}\n\nsub foldersizes_total\n{\n        my $mysync = shift ;\n\n        my @folders_1 = @{ $mysync->{h1_folders_wanted} } ;\n        my @folders_2 = @h2_folders_from_1_wanted ;\n\n        my $nb_folders_1 = scalar( @folders_1 ) ;\n        my $nb_folders_2 = scalar( @folders_2 ) ;\n\n        my ( $total_size_1, $total_nb_1, $biggest_in_all_1 ) = ( 0, 0, 0 ) ;\n        my ( $total_size_2, $total_nb_2, $biggest_in_all_2 ) = ( 0, 0, 0 ) ;\n\n        foreach my $folder1 ( @folders_1 )\n        {\n                $total_size_1     = add( $total_size_1,      $mysync->{ folder1 }->{ $folder1 }->{ size } ) ;\n                $total_nb_1       = add( $total_nb_1,        $mysync->{ folder1 }->{ $folder1 }->{ nb_msgs } ) ;\n                $biggest_in_all_1 = max( $biggest_in_all_1 , $mysync->{ folder1 }->{ $folder1 }->{ biggest } ) ;\n        }\n\n        foreach my $folder2 ( @folders_2 )\n        {\n                $total_size_2     = add( $total_size_2,      $mysync->{ folder2 }->{ $folder2 }->{ size } ) ;\n                $total_nb_2       = add( $total_nb_2,        $mysync->{ folder2 }->{ $folder2 }->{ nb_msgs } ) ;\n                $biggest_in_all_2 = max( $biggest_in_all_2 , $mysync->{ folder2 }->{ $folder2 }->{ biggest } ) ;\n\n        }\n\n        myprintf( \"Host1 Nb folders:           %11s folders\\n\",    $nb_folders_1 ) ;\n        myprintf( \"Host2 Nb folders:           %11s folders\\n\",    $nb_folders_2 ) ;\n        myprint( \"\\n\" ) ;\n        myprintf( \"Host1 Nb messages:          %11s messages\\n\",   $total_nb_1 ) ;\n        myprintf( \"Host2 Nb messages:          %11s messages\\n\",   $total_nb_2 ) ;\n        myprint( \"\\n\" ) ;\n        myprintf( \"Host1 Total size:           %11s bytes (%s)\\n\", $total_size_1, bytes_display_string_bin( $total_size_1 ) ) ;\n        myprintf( \"Host2 Total size:           %11s bytes (%s)\\n\", $total_size_2, bytes_display_string_bin( $total_size_2 ) ) ;\n        myprint( \"\\n\" ) ;\n        myprintf( \"Host1 Biggest message:      %11s bytes (%s)\\n\", $biggest_in_all_1, bytes_display_string_bin( $biggest_in_all_1 ) ) ;\n        myprintf( \"Host2 Biggest message:      %11s bytes (%s)\\n\", $biggest_in_all_2, bytes_display_string_bin( $biggest_in_all_2 ) ) ;\n        myprint( \"\\n\" ) ;\n        myprintf( \"Time spent on sizing: %11.1f seconds\\n\", timenext( $mysync ) ) ;\n\n        my @total_1_2 = ( $total_nb_1, $total_size_1, $total_nb_2, $total_size_2 ) ;\n        return @total_1_2 ;\n}\n\nsub foldersizesatend_old\n{\n        my $mysync = shift ;\n        timenext( $mysync ) ;\n        return if ( $mysync->{imap1}->IsUnconnected(  ) ) ;\n        return if ( $mysync->{imap2}->IsUnconnected(  ) ) ;\n        # Get all folders on host2 again since new were created\n        @h2_folders_all = sort $mysync->{imap2}->folders();\n        for ( @h2_folders_all ) {\n                $h2_folders_all{ $_ } = 1 ;\n                $mysync->{h2_folders_all_UPPER}{ uc  $_  } = 1 ;\n        } ;\n        ( $h1_nb_msg_end, $h1_bytes_end ) = foldersizes( $mysync, 'Host1', $mysync->{imap1}, $mysync->{ search1 }, $mysync->{abletosearch1}, @{ $mysync->{h1_folders_wanted} } ) ;\n        ( $h2_nb_msg_end, $h2_bytes_end ) = foldersizes( $mysync, 'Host2', $mysync->{imap2}, $mysync->{ search2 }, $mysync->{abletosearch2}, @h2_folders_from_1_wanted ) ;\n        if ( not all_defined( $h1_nb_msg_end, $h1_bytes_end, $h2_nb_msg_end, $h2_bytes_end ) ) {\n                my $error = \"Failure getting foldersizes, final differences will not be calculated\\n\" ;\n                errors_incr( $mysync, $error ) ;\n        }\n        return ;\n}\n\nsub foldersizesatend\n{\n        my $mysync = shift ;\n        timenext( $mysync ) ;\n        return if ( $mysync->{imap1}->IsUnconnected(  ) ) ;\n        return if ( $mysync->{imap2}->IsUnconnected(  ) ) ;\n        # Get all folders on host2 again since new were created\n        @h2_folders_all = sort $mysync->{imap2}->folders();\n        for ( @h2_folders_all ) {\n                $h2_folders_all{ $_ } = 1 ;\n                $mysync->{h2_folders_all_UPPER}{ uc  $_  } = 1 ;\n        } ;\n\n\n        foldersizes_diff_list( $mysync, $FORCE ) ;\n\n        ( $h1_nb_msg_end, $h1_bytes_end, $h2_nb_msg_end, $h2_bytes_end )\n        = foldersizes_total( $mysync ) ;\n\n\n        if ( not all_defined( $h1_nb_msg_end, $h1_bytes_end, $h2_nb_msg_end, $h2_bytes_end ) ) {\n                my $error = \"Failure getting foldersizes, final differences will not be calculated\\n\" ;\n                errors_incr( $mysync, $error ) ;\n        }\n        return ;\n}\n\n\nsub foldersizes_at_the_beggining\n{\n        my $mysync = shift ;\n\n        myprint( << 'END_SIZE'  ) ;\n\nFolders sizes before the synchronization.\nYou can remove foldersizes listings by using \"--nofoldersizes\" and \"--nofoldersizesatend\"\nbut then you will also lose the ETA (Estimation Time of Arrival) given after each message copy.\nEND_SIZE\n\n        foldersizes_diff_list( $mysync ) ;\n\n        ( $mysync->{ h1_nb_msg_start }, $mysync->{ h1_bytes_start },\n          $mysync->{ h2_nb_msg_start }, $mysync->{ h2_bytes_start } )\n        = foldersizes_total( $mysync ) ;\n\n\n        if ( not all_defined(\n                $mysync->{ h1_nb_msg_start },\n                $mysync->{ h1_bytes_start },\n                $mysync->{ h2_nb_msg_start },\n                $mysync->{ h2_bytes_start } ) )\n        {\n                my $error = \"Failure getting foldersizes, ETA and final diff will not be displayed\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                $mysync->{ foldersizes } = 0 ;\n                $mysync->{ foldersizesatend } = 0 ;\n                return ;\n        }\n\n        my $h2_bytes_limit = $mysync->{ acc2 }->{quota_limit_bytes} || 0 ;\n        if ( $h2_bytes_limit and ( $h2_bytes_limit < $mysync->{ h1_bytes_start } ) )\n        {\n                my $quota_percent = mysprintf( '%.0f', $NUMBER_100 * $mysync->{ h1_bytes_start } / $h2_bytes_limit ) ;\n                my $error = \"Host2: Quota limit will be exceeded! Over $quota_percent % ( $mysync->{ h1_bytes_start } bytes / $h2_bytes_limit bytes )\\n\" ;\n                errors_incr( $mysync, $error ) ;\n        }\n        return ;\n}\n\n\n# Globals:\n# @h2_folders_from_1_wanted\n\nsub foldersizes_at_the_beggining_old\n{\n        my $mysync = shift ;\n\n        myprint( << 'END_SIZE'  ) ;\n\nFolders sizes before the synchronization.\nYou can remove foldersizes listings by using \"--nofoldersizes\" and \"--nofoldersizesatend\"\nbut then you will also lose the ETA (Estimation Time of Arrival) given after each message copy.\nEND_SIZE\n\n        ( $mysync->{ h1_nb_msg_start }, $mysync->{ h1_bytes_start } ) =\n                foldersizes( $mysync, 'Host1', $mysync->{imap1}, $mysync->{ search1 },\n                $mysync->{abletosearch1}, @{ $mysync->{h1_folders_wanted} } ) ;\n        ( $mysync->{ h2_nb_msg_start }, $mysync->{ h2_bytes_start } )             =\n                foldersizes( $mysync, 'Host2', $mysync->{imap2}, $mysync->{ search2 },\n                $mysync->{abletosearch2}, @h2_folders_from_1_wanted ) ;\n\n        if ( not all_defined( $mysync->{ h1_nb_msg_start },\n                $mysync->{ h1_bytes_start }, $mysync->{ h2_nb_msg_start }, $mysync->{ h2_bytes_start } ) )\n        {\n                my $error = \"Failure getting foldersizes, ETA and final diff will not be displayed\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                $mysync->{ foldersizes } = 0 ;\n                $mysync->{ foldersizesatend } = 0 ;\n                return ;\n        }\n\n        my $h2_bytes_limit = $mysync->{ acc2 }->{quota_limit_bytes} || 0 ;\n        if ( $h2_bytes_limit and ( $h2_bytes_limit < $mysync->{ h1_bytes_start } ) )\n        {\n                my $quota_percent = mysprintf( '%.0f', $NUMBER_100 * $mysync->{ h1_bytes_start } / $h2_bytes_limit ) ;\n                my $error = \"Host2: Quota limit will be exceeded! Over $quota_percent % ( $mysync->{ h1_bytes_start } bytes / $h2_bytes_limit bytes )\\n\" ;\n                errors_incr( $mysync, $error ) ;\n        }\n        return ;\n}\n\n\nsub tests_total_bytes_max_reached\n{\n        note( 'Entering tests_total_bytes_max_reached()' ) ;\n\n        is( undef, total_bytes_max_reached(  ),  'total_bytes_max_reached: no args => undef' ) ;\n\n        my $mysync = {} ;\n        is( undef, total_bytes_max_reached( $mysync ),  'total_bytes_max_reached: no exitwhenover => undef' ) ;\n\n        $mysync->{ exitwhenover } = 300 ;\n        is( undef, total_bytes_max_reached( $mysync ),  'total_bytes_max_reached: exitwhenover 300 but no total_bytes_transferred => undef' ) ;\n\n        $mysync->{ total_bytes_transferred } = 200 ;\n        is( undef, total_bytes_max_reached( $mysync ),  'total_bytes_max_reached: exitwhenover 300 but total_bytes_transferred 200 => undef' ) ;\n\n        $mysync->{ total_bytes_transferred } = 400 ;\n        is( 1, total_bytes_max_reached( $mysync ),  'total_bytes_max_reached: exitwhenover 300 but total_bytes_transferred 400 => 1' ) ;\n\n\n\n        note( 'Leaving  tests_total_bytes_max_reached()' ) ;\n        return ;\n}\n\n\nsub total_bytes_max_reached\n{\n        my $mysync = shift ;\n\n        if ( ! defined $mysync ) { return ; }\n\n        if ( ! $mysync->{ exitwhenover } )\n        {\n                return ;\n        }\n\n        if ( ! $mysync->{ total_bytes_transferred } )\n        {\n                return ;\n        }\n\n        if ( $mysync->{ total_bytes_transferred } >= $mysync->{ exitwhenover } )\n        {\n                my $error = \"Maximum bytes transferred reached, $mysync->{total_bytes_transferred} >= $mysync->{ exitwhenover }, ending sync\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                return( 1 ) ;\n        }\n        return ;\n}\n\n\nsub tests_mock_capability\n{\n        note( 'Entering tests_mock_capability()' ) ;\n\n        my $myimap ;\n        ok( $myimap = mock_capability(  ),\n            'mock_capability: (1) no args => a Test::MockObject'\n        ) ;\n        ok( $myimap->isa( 'Test::MockObject' ),\n            'mock_capability: (2) no args => a Test::MockObject'\n        ) ;\n\n        is( undef, $myimap->capability(  ),\n            'mock_capability: (3) no args => capability undef'\n        ) ;\n\n        ok( mock_capability( $myimap ),\n            'mock_capability: (1) one arg  => MockObject'\n        ) ;\n\n        is( undef, $myimap->capability(  ),\n            'mock_capability: (2) one arg OO style => capability undef'\n        ) ;\n\n        ok( mock_capability( $myimap, $NUMBER_123456 ),\n            'mock_capability: (1) two args 123456 => capability 123456'\n        ) ;\n\n        is( $NUMBER_123456, $myimap->capability(  ),\n            'mock_capability: (2) two args 123456 => capability 123456'\n        ) ;\n\n        ok( mock_capability( $myimap, 'ABCD' ),\n            'mock_capability: (1) two args ABCD => capability ABCD'\n        ) ;\n        is( 'ABCD', $myimap->capability(  ),\n            'mock_capability: (2) two args ABCD => capability ABCD'\n        ) ;\n\n        ok( mock_capability( $myimap, [ 'ABCD' ] ),\n            'mock_capability: (1) two args [ ABCD ] => capability [ ABCD ]'\n        ) ;\n        is_deeply( [ 'ABCD' ], $myimap->capability(  ),\n            'mock_capability: (2) two args [ ABCD ] => capability [ ABCD ]'\n        ) ;\n\n        ok( mock_capability( $myimap, [ 'ABC', 'DEF' ] ),\n            'mock_capability: (1) two args [ ABC, DEF ] => capability [ ABC, DEF ]'\n        ) ;\n        is_deeply( [ 'ABC', 'DEF' ], $myimap->capability(  ),\n            'mock_capability: (2) two args [ ABC, DEF ] => capability capability [ ABC, DEF ]'\n        ) ;\n\n        ok( mock_capability( $myimap, 'ABC', 'DEF' ),\n            'mock_capability: (1) two args ABC, DEF => capability [ ABC, DEF ]'\n        ) ;\n        is_deeply( [ 'ABC', 'DEF' ], [ $myimap->capability(  ) ],\n            'mock_capability: (2) two args ABC, DEF => capability capability [ ABC, DEF ]'\n        ) ;\n\n        ok( mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=123456' ),\n            'mock_capability: (1) two args IMAP4rev1, APPENDLIMIT=123456 => capability [ IMAP4rev1, APPENDLIMIT=123456 ]'\n        ) ;\n        is_deeply( [ 'IMAP4rev1', 'APPENDLIMIT=123456' ], [ $myimap->capability(  ) ],\n            'mock_capability: (2) two args IMAP4rev1, APPENDLIMIT=123456 => capability capability [ IMAP4rev1, APPENDLIMIT=123456 ]'\n        ) ;\n\n        note( 'Leaving  tests_mock_capability()' ) ;\n        return ;\n}\n\nsub sig_install_toggle_sleep\n{\n        my $mysync = shift ;\n        if ( 'MSWin32' ne $OSNAME ) {\n                #myprint( \"sig_install( $mysync, \\&toggle_sleep, 'USR1' )\\n\" ) ;\n                sig_install( $mysync, 'toggle_sleep', 'USR1' ) ;\n        }\n        #myprint( \"Leaving sig_install_toggle_sleep\\n\" ) ;\n        return ;\n}\n\n\nsub mock_capability\n{\n        my $myimap = shift ;\n        my @has_capability_value = @ARG ;\n        my ( $has_capability_value ) = @has_capability_value ;\n\n        if ( ! $myimap )\n        {\n                require_ok( \"Test::MockObject\" ) ;\n                $myimap = Test::MockObject->new(  ) ;\n        }\n\n        $myimap->mock(\n                'capability',\n                sub { return  wantarray ?\n                                @has_capability_value\n                                : $has_capability_value ;\n                }\n        ) ;\n\n        return $myimap ;\n}\n\n\nsub tests_capability_of\n{\n        note( 'Entering tests_capability_of()' ) ;\n\n        is( undef, capability_of(  ),\n            'capability_of: no args => undef' ) ;\n\n        my $myimap ;\n        is( undef, capability_of( $myimap ),\n            'capability_of: undef => undef' ) ;\n\n\n        $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=123456' ) ;\n\n        is( undef, capability_of( $myimap, 'CACA' ),\n            'capability_of: two args unknown capability => undef' ) ;\n\n\n        is( $NUMBER_123456, capability_of( $myimap, 'APPENDLIMIT' ),\n            'capability_of: two args APPENDLIMIT 123456 => 123456 yeah!' ) ;\n\n        note( 'Leaving  tests_capability_of()' ) ;\n        return ;\n}\n\n\nsub capability_of\n{\n        my $imap = shift || return ;\n        my $capability_keyword = shift || return ;\n\n        my @capability = $imap->capability ;\n\n        if ( ! @capability ) { return ; }\n        my $capability_value = search_in_array( $capability_keyword, @capability ) ;\n\n        return $capability_value ;\n}\n\n\nsub tests_search_in_array\n{\n        note( 'Entering tests_search_in_array()' ) ;\n\n        is( undef, search_in_array( 'KA' ),\n                'search_in_array: no array => undef ' ) ;\n\n        is( 'VA', search_in_array( 'KA', ( 'KA=VA' ) ),\n                'search_in_array: KA KA=VA => VA ' ) ;\n\n        is( 'VA', search_in_array( 'KA', ( 'KA=VA', 'KB=VB' ) ),\n                'search_in_array: KA KA=VA KB=VB => VA ' ) ;\n\n        is( 'VB', search_in_array( 'KB', ( 'KA=VA', 'KB=VB' ) ),\n                'search_in_array: KA=VA KB=VB => VB ' ) ;\n\n        note( 'Leaving  tests_search_in_array()' ) ;\n        return ;\n}\n\nsub search_in_array\n{\n        my ( $key, @array ) = @ARG ;\n\n        foreach my $item ( @array )\n        {\n\n        if ( $item =~ /([^=]+)=(.*)/ )\n                {\n                        if ( $1 eq $key )\n                        {\n                                return $2 ;\n                        }\n                }\n        }\n\n        return ;\n}\n\n\n\n\nsub tests_appendlimit_from_capability\n{\n        note( 'Entering tests_appendlimit_from_capability()' ) ;\n\n        is( undef, appendlimit_from_capability(  ),\n            'appendlimit_from_capability: no args => undef'\n        ) ;\n\n        my $myimap ;\n        is( undef, appendlimit_from_capability( $myimap ),\n            'appendlimit_from_capability: undef arg => undef'\n        ) ;\n\n\n        $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=123456' ) ;\n\n        # Normal behavior\n        is( $NUMBER_123456, appendlimit_from_capability( $myimap ),\n            'appendlimit_from_capability: APPENDLIMIT=123456 => 123456'\n        ) ;\n\n        # Not a number\n        $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=ABC' ) ;\n\n        is( undef, appendlimit_from_capability( $myimap ),\n            'appendlimit_from_capability: not a number => undef'\n        ) ;\n\n        note( 'Leaving  tests_appendlimit_from_capability()' ) ;\n        return ;\n}\n\n\nsub appendlimit_from_capability\n{\n        my $myimap = shift ;\n        if ( ! $myimap )\n        {\n                myprint( \"Warn: no imap with call to appendlimit_from_capability\\n\" ) ;\n                return ;\n        }\n\n        #myprint( Data::Dumper->Dump( [ \\$myimap ] )  ) ;\n        my $appendlimit = capability_of( $myimap, 'APPENDLIMIT' ) ;\n        #myprint( \"has_capability APPENDLIMIT $appendlimit\\n\" ) ;\n        if ( is_integer( $appendlimit ) )\n        {\n                return $appendlimit ;\n        }\n        return ;\n}\n\n\nsub tests_appendlimit\n{\n        note( 'Entering tests_appendlimit()' ) ;\n\n        is( undef, appendlimit(  ),\n            'appendlimit: no args => undef'\n        ) ;\n\n        my $mysync = {  } ;\n\n        is( undef, appendlimit( $mysync ),\n            'appendlimit: no imap2 => undef'\n        ) ;\n\n        my $myimap ;\n        $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=123456' ) ;\n\n        $mysync->{ imap2 } = $myimap ;\n\n        is( 123456, appendlimit( $mysync ),\n            'appendlimit: imap2 with APPENDLIMIT=123456 => 123456'\n        ) ;\n\n        note( 'Leaving  tests_appendlimit()' ) ;\n        return ;\n}\n\nsub appendlimit\n{\n        my $mysync = shift || return ;\n        my $myimap = $mysync->{ imap2 } ;\n\n        my $appendlimit = appendlimit_from_capability( $myimap ) ;\n        if ( defined $appendlimit )\n        {\n                myprint( \"Host2: found APPENDLIMIT=$appendlimit in CAPABILITY (use --appendlimit xxxx to override this automatic setting)\\n\" ) ;\n                return $appendlimit ;\n        }\n        return ;\n\n}\n\n\nsub  tests_maxsize_setting\n{\n        note( 'Entering tests_maxsize_setting()' ) ;\n\n        is( undef, maxsize_setting(  ),\n           'maxsize_setting: no args => undef'\n        ) ;\n\n        my $mysync ;\n\n        is( undef, maxsize_setting( $mysync  ),\n           'maxsize_setting: undef arg => undef'\n        ) ;\n\n        $mysync = {  } ;\n        $mysync->{ maxsize } = $NUMBER_123456 ;\n\n        #  --maxsize alone\n        is( $NUMBER_123456, maxsize_setting( $mysync ),\n                'maxsize_setting: --maxsize 123456 alone => 123456'\n        ) ;\n\n\n        $mysync = {  } ;\n        my $myimap ;\n\n        $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=654321' ) ;\n        $mysync->{ imap2 } = $myimap ;\n\n        # APPENDLIMIT alone\n        is( $NUMBER_654321, maxsize_setting( $mysync ),\n                'maxsize_setting: APPENDLIMIT 654321 alone => 654321'\n        ) ;\n\n        is( $NUMBER_654321, $mysync->{ maxsize },\n                'maxsize_setting: APPENDLIMIT 654321 alone => maxsize 654321'\n        ) ;\n\n        # APPENDLIMIT with --appendlimit => --appendlimit wins\n        $mysync->{ appendlimit } = $NUMBER_123456 ;\n\n        is( $NUMBER_123456, maxsize_setting( $mysync ),\n                'maxsize_setting: APPENDLIMIT 654321 + --appendlimit 123456 => 123456'\n        ) ;\n\n        is( $NUMBER_123456, $mysync->{ maxsize },\n                'maxsize_setting: APPENDLIMIT 654321 + --appendlimit 123456 => maxsize 123456'\n        ) ;\n\n        # Fresh\n        $mysync = {  } ;\n        $mysync->{ imap2 } = $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=654321' ) ;\n\n        # Case: \"APPENDLIMIT >= --maxsize\" => maxsize.\n        $mysync->{ maxsize } = $NUMBER_123456 ;\n\n        is( $NUMBER_123456, maxsize_setting( $mysync ),\n                'maxsize_setting: APPENDLIMIT 654321 --maxsize 123456 => 123456'\n        ) ;\n\n        # Case: \"APPENDLIMIT < --maxsize\" => APPENDLIMIT.\n\n\n        # Fresh\n        $mysync = {  } ;\n        $mysync->{ imap2 } = $myimap = mock_capability( $myimap, 'IMAP4rev1', 'APPENDLIMIT=123456' ) ;\n        $mysync->{ maxsize } = $NUMBER_654321 ;\n\n        is( $NUMBER_123456, maxsize_setting( $mysync ),\n                'maxsize_setting: APPENDLIMIT 123456 --maxsize 654321  => 123456 '\n        ) ;\n\n        # Now --truncmess stuff\n\n        note( 'Leaving  tests_maxsize_setting()' ) ;\n\n        return ;\n}\n\n# Three variables to take account of\n# appendlimit (given by --appendlimit or CAPABILITY...)\n# maxsize\n# truncmess\n\nsub maxsize_setting\n{\n        my $mysync = shift || return ;\n\n        if ( defined $mysync->{ appendlimit } )\n        {\n                myprint( \"Host2: Getting appendlimit from --appendlimit $mysync->{ appendlimit }\\n\" ) ;\n        }\n        else\n        {\n                $mysync->{ appendlimit } = appendlimit( $mysync ) ;\n        }\n\n\n        if ( all_defined( $mysync->{ appendlimit },  $mysync->{ maxsize } ) )\n        {\n                my $min_maxsize_appendlimit = min( $mysync->{ maxsize }, $mysync->{ appendlimit } ) ;\n                myprint( \"Host2: Setting maxsize to $min_maxsize_appendlimit (min of --maxsize $mysync->{ maxsize } and appendlimit $mysync->{ appendlimit }\\n\" ) ;\n                $mysync->{ maxsize } = $min_maxsize_appendlimit ;\n                return $mysync->{ maxsize } ;\n        }\n        elsif ( defined $mysync->{ appendlimit } )\n        {\n                myprint( \"Host2: Setting maxsize to appendlimit $mysync->{ appendlimit }\\n\" ) ;\n                $mysync->{ maxsize } = $mysync->{ appendlimit } ;\n                return $mysync->{ maxsize } ;\n        }elsif ( defined $mysync->{ maxsize } )\n        {\n                return $mysync->{ maxsize } ;\n        }else\n        {\n                return ;\n        }\n}\n\n\n\n\nsub all_defined\n{\n        if ( not @ARG ) {\n                return 0 ;\n        }\n        foreach my $elem ( @ARG ) {\n                if ( not defined $elem ) {\n                        return 0 ;\n                }\n        }\n        return 1 ;\n}\n\nsub tests_all_defined\n{\n\tnote( 'Entering tests_all_defined()' ) ;\n\n        is( 0, all_defined(  ),             'all_defined: no param  => 0' ) ;\n        is( 0, all_defined( () ),           'all_defined: void list => 0' ) ;\n        is( 0, all_defined( undef ),        'all_defined: undef     => 0' ) ;\n        is( 0, all_defined( undef, undef ), 'all_defined: undef     => 0' ) ;\n        is( 0, all_defined( 1, undef ),     'all_defined: 1 undef   => 0' ) ;\n        is( 0, all_defined( undef, 1 ),     'all_defined: undef 1   => 0' ) ;\n        is( 1, all_defined( 1, 1 ),         'all_defined: 1 1   => 1' ) ;\n        is( 1, all_defined( (1, 1) ),       'all_defined: (1 1) => 1' ) ;\n\n\tnote( 'Leaving  tests_all_defined()' ) ;\n        return ;\n}\n\n\nsub tests_hashsynclocal\n{\n\tnote( 'Entering tests_hashsynclocal()' ) ;\n\n\tmy $mysync = {\n\t\thost1 => q{},\n\t\tuser1 => q{},\n\t\tpassword1 => q{},\n\t\thost2 => q{},\n\t\tuser2 => q{},\n\t\tpassword2 => q{},\n\t} ;\n\n\tis( undef, hashsynclocal( $mysync ), 'hashsynclocal: no hashfile name' ) ;\n\n\t$mysync->{ hashfile } = q{} ;\n\tis( undef, hashsynclocal( $mysync ), 'hashsynclocal: empty hashfile name' ) ;\n\n\t$mysync->{ hashfile } = './noexist/rrr' ;\n\tis( undef, hashsynclocal( $mysync ), 'hashsynclocal: no exists hashfile dir' ) ;\n\n\tSKIP: {\n\t\tif ( 'MSWin32' eq $OSNAME or '0' eq $EFFECTIVE_USER_ID ) { skip( 'Tests only for non-root Unix', 1 ) ; }\n\t\t$mysync->{ hashfile } = '/rrr' ;\n\t\tis( undef, hashsynclocal( $mysync ), 'hashsynclocal: permission denied' ) ;\n\t}\n\tok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'hashsynclocal: mkpath W/tmp/tests/' ) ;\n\t$mysync->{ hashfile } = 'W/tmp/tests/imapsync_hash' ;\n\n\tok( ! -e 'W/tmp/tests/imapsync_hash' || unlink 'W/tmp/tests/imapsync_hash', 'hashsynclocal: unlink W/tmp/tests/imapsync_hash' ) ;\n\tok( ! -e 'W/tmp/tests/imapsync_hash', 'hashsynclocal: verify there is no W/tmp/tests/imapsync_hash' ) ;\n\tis( 'ecdeb4ede672794d173da4e08c52b8ee19b7d252', hashsynclocal( $mysync, 'mukksyhpmbixkxkpjlqivmlqsulpictj' ), 'hashsynclocal: creating/reading W/tmp/tests/imapsync_hash' ) ;\n\t# A second time now\n\tis( 'ecdeb4ede672794d173da4e08c52b8ee19b7d252', hashsynclocal( $mysync ), 'hashsynclocal: reading W/tmp/tests/imapsync_hash second time => same' ) ;\n\n\tnote( 'Leaving  tests_hashsynclocal()' ) ;\n\treturn ;\n}\n\nsub hashsynclocal\n{\n\tmy $mysync = shift ;\n\tmy $hashkey = shift ; # Optional, only there for tests\n\tmy $hashfile = $mysync->{ hashfile } ;\n\t$hashfile = createhashfileifneeded( $hashfile, $hashkey ) ;\n\tif ( ! $hashfile ) {\n\t\treturn ;\n\t}\n\t$hashkey = firstline( $hashfile ) ;\n\tif ( ! $hashkey ) {\n\t\tmyprint( \"No hashkey!\\n\" ) ;\n\t\treturn ;\n\t}\n\tmy $hashsynclocal = hashsync( $mysync, $hashkey ) ;\n\treturn( $hashsynclocal ) ;\n\n}\n\nsub tests_hashsync\n{\n        note( 'Entering tests_hashsync()' ) ;\n\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hashsync(  ), 'hashsync: no args' ) ;\n\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hashsync( {}, q{} ), 'hashsync: empty args' ) ;\n        my $mysync ;\n        $mysync->{ host1 } = 'zzz' ;\n        is( 'e86a28a3611c1e7bbaf8057cd00ae122781a11fe', hashsync( $mysync, q{} ), 'hashsync: host1 zzz => ' ) ;\n        is( '6a7b451ac99eab1531ad8e6cd544b32420c552ac', hashsync( $mysync, q{A} ), 'hashsync: host1 zzz => ' ) ;\n        $mysync->{ host2 } = 'zzz' ;\n        is( '15959573e4a86763253a7aedb1a2b0c60d133dc2', hashsync( $mysync, q{} ), 'hashsync: + host2 zzz => ' ) ;\n        is( 'b8d4ab541b209c75928528020ca28ee43488bd8f', hashsync( $mysync, 'A' ), 'hashsync: + hashkey A => ' ) ;\n\n        $mysync = undef ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hashsync( $mysync, q{} ), 'hashsync: undef $mysync' ) ;\n        $mysync->{ password1 } = 'abcd' ;\n        is( 'afa29ab8534495251ac8346a985717c54bc49c26', hashsync( $mysync, q{} ), 'hashsync: password1: abcd' ) ;\n\n        # A user reported a massive failure on /X (Thomas V. 21/04/2020 Ã  21:41 Subject: Error)\n        # \"Wide character in subroutine entry at /usr/local/lib/perl5/site_perl/Digest/HMAC.pm\"\n        # I can reproduce it now\n\n\n        # The eval is there to avoid a complete crash\n        # this one is fatal so it is commented\n        # is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', 1 / 0 , 'hashsync: 1 / 0 fatal' ) ;\n\n        my $eval ;\n        # this one is not fatal\n        is( undef, $eval = eval { 1 / 0 } , 'hashsync: 1/0 not fatal' ) ;\n        # this one neither\n        $mysync->{ password1 } = 'Ã–' ;\n        is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', $eval = eval { hashsync( $mysync, q{} ) } , 'hashsync: password1: Ã– with eval' ) ;\n\n        $mysync->{ password1 } = 'Ã–' ;\n        is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', hashsync( $mysync, q{} ), 'hashsync: password1: Ã– without eval' ) ;\n\n        $mysync->{ password1 } = qq{\\x{00D6}} ;\n        is( 'bb5bfb461e79ecd3dbc6ade2aabb52d22fa8be1a', $eval = eval { hashsync( $mysync, q{} ) }, 'hashsync: password1: \\x{00D6}' ) ; #\n\n        print qq{1 00D6:Ã–\\n} ;\n        print encode_utf8( qq{2 00D6:Ã–\\n} ) ;\n        print qq{3 00D6:\\x{00D6}\\n} ;\n        print encode_utf8( qq{4 00D6:\\x{00D6}\\n} ) ;\n\n\n        print              qq{5 6536:æ”¶\\n} ;\n        print encode_utf8( qq{6 6536:æ”¶\\n} ) ;\n        # the next one prints \"Wide character in print at ./imapsync line xxxx\"\n        print              qq{7 6536:\\x{6536}\\n} ;\n        print encode_utf8( qq{8 6536:\\x{6536}\\n} ) ;\n\n        $mysync->{ password1 } = qq{æ”¶} ;\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hashsync( $mysync, q{} ), 'hashsync: password1: æ”¶' ) ;\n\n        $mysync->{ password1 } = qq{\\x{6536}} ;\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', $eval = eval{ hashsync( $mysync, q{} ) }, 'hashsync: password1: \\x{6536} with eval' ) ;\n\n        # No side effect.\n        $mysync->{ password1 } = 'abcd' ;\n        is( 'afa29ab8534495251ac8346a985717c54bc49c26', hashsync( $mysync, q{} ), 'hashsync: password1: abcd again' ) ;\n\n        note( 'Leaving  tests_hashsync()' ) ;\n        return ;\n}\n\nsub hashsync\n{\n\tmy $mysync  = shift ;\n\tmy $hashkey = shift ;\n\n\tmy $mystring = join( q{},\n\t\t$mysync->{ host1 }     || q{},\n\t\t$mysync->{ user1 }     || q{},\n\t\t$mysync->{ password1 } || q{},\n\t\t$mysync->{ host2 }     || q{},\n\t\t$mysync->{ user2 }     || q{},\n\t\t$mysync->{ password2 } || q{},\n\t) ;\n        #my $hashsync = hmac_sha1_hex( $mystring, $hashkey ) ;\n\tmy $hashsync = hmac_sha1_hex_robust( $mystring, $hashkey ) ;\n\t#myprint( \"$hashsync\\n\" ) ;\n\treturn( $hashsync ) ;\n}\n\n\nsub tests_hmac_sha1_hex\n{\n        note( 'Entering tests_hmac_sha1_hex()' ) ;\n\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex(  ),               'hmac_sha1_hex: no args              => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex( '' ),             'hmac_sha1_hex: empty string         => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex( '', '' ),         'hmac_sha1_hex: empty strings        => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex( '', '', 'caca' ), 'hmac_sha1_hex: empty strings + caca => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n\n        # Good\n        is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', hmac_sha1_hex( 'Ã–' ),                        'hmac_sha1_hex: Ã–                    => f1a3f3dac3f137fd658027c11678b895f773ce55' ) ;\n        is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', hmac_sha1_hex( encode_utf8(qq{\\x{00D6}}) ),  'hmac_sha1_hex: encode_utf8 \\x{00D6} => f1a3f3dac3f137fd658027c11678b895f773ce55' ) ;\n        # Bad\n        is( 'fe8dc3b9ba3e8850bb4a7b070b2279e911003af2', hmac_sha1_hex( encode_utf8( 'Ã–' ) ),         'hmac_sha1_hex: encode_utf8 Ã–        => fe8dc3b9ba3e8850bb4a7b070b2279e911003af2' ) ;\n        is( 'bb5bfb461e79ecd3dbc6ade2aabb52d22fa8be1a', hmac_sha1_hex( qq{\\x{00D6}} ),               'hmac_sha1_hex: qq{\\x{00D6}}         => bb5bfb461e79ecd3dbc6ade2aabb52d22fa8be1a' ) ;\n\n        # Good\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex( 'A' ),                       'hmac_sha1_hex: A                     => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex( encode_utf8(qq{\\x{0041}}) ), 'hmac_sha1_hex: encode_utf8 \\x{0041}  => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex( encode_utf8( 'A' ) ),        'hmac_sha1_hex: encode_utf8 A         => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex( qq{\\x{0041}} ),              'hmac_sha1_hex: \\x{0041}              => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n\n        # Good\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex( 'A', 'B' ),                       'hmac_sha1_hex: A                    B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex( encode_utf8(qq{\\x{0041}}), 'B' ), 'hmac_sha1_hex: encode_utf8 \\x{0041} B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex( encode_utf8( 'A' ), 'B' ),        'hmac_sha1_hex: encode_utf8 A        B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex( qq{\\x{0041}}, 'B' ),              'hmac_sha1_hex: \\x{0041}             B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n\n        # http://unicode.scarfboy.com/?s=U%2B6536\n        # Good\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hmac_sha1_hex( 'æ”¶' ),                      'hmac_sha1_hex: æ”¶                    => 4199f02773d1cd5599b1a8f2d024bdceb8b48e0b' ) ;\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hmac_sha1_hex( encode_utf8(qq{\\x{6536}}) ), 'hmac_sha1_hex: encode_utf8 \\x{6536}  => 4199f02773d1cd5599b1a8f2d024bdceb8b48e0b' ) ;\n        # Bad\n        is( 'e82217119628ad03e659cc89671d05ea4cee7238', hmac_sha1_hex( encode_utf8( 'æ”¶' ) ),        'hmac_sha1_hex: encode_utf8 æ”¶       => e82217119628ad03e659cc89671d05ea4cee7238' ) ;\n        # Very very bad, perl dies...\n        #is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hmac_sha1_hex( qq{\\x{6536}} ),              'hmac_sha1_hex: \\x{6536}             => 4199f02773d1cd5599b1a8f2d024bdceb8b48e0b' ) ;\n        # Ok but well, bad indeed\n        is( undef, my $eval = eval{ hmac_sha1_hex( qq{\\x{6536}} ) },                                            'hmac_sha1_hex: \\x{6536}             => undef' ) ;\n\n\n        note( 'Leaving  tests_hmac_sha1_hex()' ) ;\n        return ;\n}\n\nsub tests_hmac_sha1_hex_robust\n{\n        note( 'Entering tests_hmac_sha1_hex_robust()' ) ;\n\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex_robust(  ),  'hmac_sha1_hex_robust: no args => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex_robust( '' ),  'hmac_sha1_hex_robust: empty string  => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex_robust( '', '' ),  'hmac_sha1_hex_robust: empty strings  => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n        is( 'fbdb1d1b18aa6c08324b7d64b71fb76370690e1d', hmac_sha1_hex_robust( '', '', 'caca' ),  'hmac_sha1_hex_robust: empty strings + caca => fbdb1d1b18aa6c08324b7d64b71fb76370690e1d' ) ;\n\n        # Good\n        is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', hmac_sha1_hex_robust( 'Ã–' ),  'hmac_sha1_hex_robust: Ã–  => f1a3f3dac3f137fd658027c11678b895f773ce55' ) ;\n        is( 'f1a3f3dac3f137fd658027c11678b895f773ce55', hmac_sha1_hex_robust( encode_utf8(qq{\\x{00D6}}) ),  'hmac_sha1_hex_robust: encode_utf8 \\x{00D6}  => f1a3f3dac3f137fd658027c11678b895f773ce55' ) ;\n        # Bad\n        is( 'fe8dc3b9ba3e8850bb4a7b070b2279e911003af2', hmac_sha1_hex_robust( encode_utf8( 'Ã–' ) ),  'hmac_sha1_hex_robust: encode_utf8 Ã–  => fe8dc3b9ba3e8850bb4a7b070b2279e911003af2' ) ;\n        is( 'bb5bfb461e79ecd3dbc6ade2aabb52d22fa8be1a', hmac_sha1_hex_robust( qq{\\x{00D6}} ),  'hmac_sha1_hex_robust: qq{\\x{00D6}}  => bb5bfb461e79ecd3dbc6ade2aabb52d22fa8be1a' ) ;\n\n        # Good\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex_robust( 'A' ),  'hmac_sha1_hex_robust: A  => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex_robust( encode_utf8(qq{\\x{0041}}) ),  'hmac_sha1_hex_robust: encode_utf8 \\x{0041}  => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex_robust( encode_utf8( 'A' ) ),  'hmac_sha1_hex_robust: encode_utf8 A  => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n        is( 'a6fda2a6acdd74630b20aac0c68716048ecd0333', hmac_sha1_hex_robust( qq{\\x{0041}} ),  'hmac_sha1_hex_robust: \\x{0041}  => a6fda2a6acdd74630b20aac0c68716048ecd0333' ) ;\n\n        # Good\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex_robust( 'A', 'B' ),                       'hmac_sha1_hex_robust: A                    B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex_robust( encode_utf8(qq{\\x{0041}}), 'B' ), 'hmac_sha1_hex_robust: encode_utf8 \\x{0041} B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex_robust( encode_utf8( 'A' ), 'B' ),        'hmac_sha1_hex_robust: encode_utf8 A        B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n        is( '36c54f255b575a2db58921d116b37c8af94c08cd', hmac_sha1_hex_robust( qq{\\x{0041}}, 'B' ),              'hmac_sha1_hex_robust: \\x{0041}             B => 36c54f255b575a2db58921d116b37c8af94c08cd' ) ;\n\n        # http://unicode.scarfboy.com/?s=U%2B6536\n        # Good\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hmac_sha1_hex_robust( 'æ”¶' ),                      'hmac_sha1_hex_robust: æ”¶                   => 4199f02773d1cd5599b1a8f2d024bdceb8b48e0b' ) ;\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hmac_sha1_hex_robust( encode_utf8(qq{\\x{6536}}) ), 'hmac_sha1_hex_robust: encode_utf8 \\x{6536} => 4199f02773d1cd5599b1a8f2d024bdceb8b48e0b' ) ;\n        # Bad\n        is( 'e82217119628ad03e659cc89671d05ea4cee7238', hmac_sha1_hex_robust( encode_utf8( 'æ”¶' ) ),       'hmac_sha1_hex_robust: encode_utf8 æ”¶       => e82217119628ad03e659cc89671d05ea4cee7238' ) ;\n        # Good\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', hmac_sha1_hex_robust( qq{\\x{6536}} ),              'hmac_sha1_hex_robust: \\x{6536}             => 4199f02773d1cd5599b1a8f2d024bdceb8b48e0b' ) ;\n        # Good again\n        is( '4199f02773d1cd5599b1a8f2d024bdceb8b48e0b', my $eval = eval{ hmac_sha1_hex_robust( qq{\\x{6536}} ) },      'hmac_sha1_hex_robust: \\x{6536}             => undef' ) ;\n\n        note( 'Leaving  tests_hmac_sha1_hex_robust()' ) ;\n        return ;\n}\n\n\nsub hmac_sha1_hex_robust\n{\n        my $string = shift ;\n        my $val ;\n        if ( defined( $val = eval{ hmac_sha1_hex( $string, @ARG ) } ) )\n        {\n                return $val ;\n        }\n        elsif( defined( $val = eval{ hmac_sha1_hex( encode_utf8( $string ), @ARG ) } ) )\n        {\n                return $val ;\n        }\n        else\n        {\n                return ;\n        }\n}\n\nsub tests_createhashfileifneeded\n{\n\tnote( 'Entering tests_createhashfileifneeded()' ) ;\n\n\tis( undef, createhashfileifneeded(  ), 'createhashfileifneeded: no parameters => undef' ) ;\n\n\tnote( 'Leaving  tests_createhashfileifneeded()' ) ;\n\treturn ;\n}\n\nsub createhashfileifneeded\n{\n\tmy $hashfile = shift ;\n\tmy $hashkey  = shift || rand32(  ) ;\n\n\t# no name\n\tif ( ! $hashfile ) {\n\t\treturn ;\n\t}\n\t# already there\n\tif ( -e -r $hashfile ) {\n\t\treturn $hashfile ;\n\t}\n\t# not creatable\n\tif ( ! -w dirname( $hashfile ) ) {\n\t\treturn ;\n\t}\n\t# creatable\n\topen my $FILE_HANDLE, '>', $hashfile\n                or do {\n                        myprint( \"Could not open $hashfile for writing. Check permissions or disk space.\"  ) ;\n                return ;\n        } ;\n        myprint( \"Writing random hashkey in $hashfile, once for all times\\n\"  ) ;\n        print $FILE_HANDLE $hashkey ;\n        close $FILE_HANDLE ;\n\t# Should be there now\n\tif ( -e -r $hashfile ) {\n\t\treturn $hashfile ;\n\t}\n\t# unknown failure\n\treturn ;\n}\n\nsub tests_rand32\n{\n\tnote( 'Entering tests_rand32()' ) ;\n\n\tmy $string = rand32(  ) ;\n\tmyprint( \"$string\\n\" ) ;\n\tis( 32, length( $string ),    'rand32: 32 characters long' ) ;\n\tis( 32, length( rand32(  ) ), 'rand32: 32 characters long, another one' ) ;\n\n\tnote( 'Leaving  tests_rand32()' ) ;\n\treturn ;\n}\n\nsub rand32\n{\n\tmy @chars = ( \"a\"..\"z\" ) ;\n\tmy $string;\n\t$string .= $chars[rand @chars] for 1..32 ;\n\treturn $string ;\n}\n\nsub imap_id_stuff\n{\n        my $mysync = shift ;\n\n        if ( not $mysync->{id} ) { return ; } ;\n\n        $mysync->{h1_imap_id} = imap_id( $mysync, $mysync->{imap1}, 'Host1' ) ;\n        #myprint( 'Host1: ' . $mysync->{h1_imap_id}  ) ;\n        $mysync->{h2_imap_id} = imap_id( $mysync, $mysync->{imap2}, 'Host2' ) ;\n        #myprint( 'Host2: ' . $mysync->{h2_imap_id}  ) ;\n\n        return ;\n}\n\nsub imap_id\n{\n        my ( $mysync, $imap, $Side ) = @_ ;\n\n        if ( not $mysync->{id} ) { return q{} ; } ;\n\n        $Side ||= q{} ;\n        my $imap_id_response = q{} ;\n\n        if ( not $imap->has_capability( 'ID' ) ) {\n                 $imap_id_response = 'No ID capability' ;\n                 myprint( \"$Side: No ID capability\\n\"  ) ;\n        }else{\n                my $id_inp = imapsync_id( $mysync, { side => lc $Side } ) ;\n                myprint( \"\\n$Side: found ID capability. Sending/receiving ID, presented in raw IMAP for now.\\n\"\n                . \"In order to avoid sending/receiving ID, use option --noid\\n\" ) ;\n                my $debug_before = $imap->Debug(  ) ;\n                $imap->Debug( 1 ) ;\n                my $id_out = $imap->tag_and_run( 'ID ' . $id_inp ) ;\n                #my $id_out = $imap->tag_and_run( 'ID NIL' ) ;\n                myprint( \"\\n\" ) ;\n                $imap->Debug( $debug_before ) ;\n                #$imap_id_response = Data::Dumper->Dump( [ $id_out ], [ 'IMAP_ID' ] ) ;\n        }\n        return( $imap_id_response ) ;\n}\n\nsub imapsync_id\n{\n        my $mysync = shift ;\n        my $overhashref = shift ;\n        # See http://tools.ietf.org/html/rfc2971.html\n\n        my $imapsync_id = { } ;\n\n        my $imapsync_id_lamiral = {\n                name          => 'imapsync',\n                version       => imapsync_version( $mysync ),\n                os            => $OSNAME,\n                vendor        => 'Gilles LAMIRAL',\n                'support-url' => 'https://imapsync.lamiral.info/',\n                # Example of date-time:  19-Sep-2015 08:56:07\n                date          => date_from_rcs( q{$Date: 2022/01/12 21:28:37 $ } ),\n        } ;\n\n        my $imapsync_id_github  = {\n                name          => 'imapsync',\n                version       => imapsync_version( $mysync ),\n                os            => $OSNAME,\n                vendor        => 'github',\n                'support-url' => 'https://github.com/imapsync/imapsync',\n                date          => date_from_rcs( q{$Date: 2022/01/12 21:28:37 $ } ),\n        } ;\n\n        $imapsync_id = $imapsync_id_lamiral ;\n        #$imapsync_id = $imapsync_id_github ;\n        my %mix = ( %{ $imapsync_id }, %{ $overhashref } ) ;\n        my $imapsync_id_str = format_for_imap_arg( \\%mix ) ;\n        #myprint( \"$imapsync_id_str\\n\"  ) ;\n        return( $imapsync_id_str ) ;\n}\n\nsub tests_imapsync_id\n{\n\tnote( 'Entering tests_imapsync_id()' ) ;\n\n        my $mysync ;\n        ok( '(\"name\" \"imapsync\" \"version\" \"111\" \"os\" \"beurk\" \"vendor\" \"Gilles LAMIRAL\" \"support-url\" \"https://imapsync.lamiral.info/\" \"date\" \"22-12-1968\" \"side\" \"host1\")'\n                eq imapsync_id( $mysync,\n                        {\n                        version => 111,\n                        os => 'beurk',\n                        date => '22-12-1968',\n                        side => 'host1'\n                        }\n                ),\n                'tests_imapsync_id override'\n        ) ;\n\n\tnote( 'Leaving  tests_imapsync_id()' ) ;\n        return ;\n}\n\nsub format_for_imap_arg\n{\n        my $ref = shift ;\n\n        my $string = q{} ;\n        my %terms = %{ $ref } ;\n        my @terms = (  ) ;\n        if ( not ( %terms ) ) { return( 'NIL' ) } ;\n        # sort like in RFC then add extra key/values\n        foreach my $key ( qw( name version os os-version vendor support-url address date command arguments environment) ) {\n                if ( $terms{ $key } ) {\n                        push  @terms, $key, $terms{ $key }  ;\n                        delete $terms{ $key } ;\n                }\n        }\n        push  @terms, %terms  ;\n        $string = '(' . ( join q{ }, map { '\"' . $_ . '\"' } @terms )  . ')' ;\n        return( $string ) ;\n}\n\n\n\nsub tests_format_for_imap_arg\n{\n\tnote( 'Entering tests_format_for_imap_arg()' ) ;\n\n        ok( 'NIL' eq format_for_imap_arg( { } ), 'format_for_imap_arg empty hash ref' ) ;\n        ok( '(\"name\" \"toto\")' eq format_for_imap_arg( { name => 'toto' } ), 'format_for_imap_arg { name => toto }' ) ;\n        ok( '(\"name\" \"toto\" \"key\" \"val\")' eq format_for_imap_arg( { name => 'toto', key => 'val' } ), 'format_for_imap_arg 2 x key val' ) ;\n\n\tnote( 'Leaving  tests_format_for_imap_arg()' ) ;\n        return ;\n}\n\nsub quota\n{\n        my ( $mysync, $imap, $side ) = @_ ;\n\n\tmy %side = (\n\t\th1 => 'Host1',\n\t\th2 => 'Host2',\n\t) ;\n        my $Side = $side{ $side } ;\n        my $debug_before = $imap->Debug(  ) ;\n        $imap->Debug( 1 ) ;\n        if ( not $imap->has_capability( 'QUOTA' ) )\n        {\n                myprint( \"$Side: No QUOTA capability found, skipping it.\\n\"  ) ;\n                $imap->Debug( $debug_before ) ;\n                return ;\n        } ;\n        myprint( \"\\n$Side: QUOTA capability found, presented in raw IMAP on next lines\\n\"  ) ;\n        my $getquotaroot = $imap->getquotaroot( 'INBOX' ) ;\n        # Gmail INBOX quotaroot is \"\" but with it Mail::IMAPClient does a literal GETQUOTA {2} \\n \"\"\n        #$imap->quota( 'ROOT' ) ;\n        #$imap->quota( '\"\"' ) ;\n        myprint( \"\\n\"  ) ;\n        $imap->Debug( $debug_before ) ;\n        my $quota_limit_bytes   = quota_extract_storage_limit_in_bytes( $mysync, $getquotaroot ) ;\n        my $quota_current_bytes = quota_extract_storage_current_in_bytes( $mysync, $getquotaroot ) ;\n        $mysync->{$side}->{quota_limit_bytes}   = $quota_limit_bytes ;\n        $mysync->{$side}->{quota_current_bytes} = $quota_current_bytes ;\n        my $quota_percent ;\n        if ( $quota_limit_bytes > 0 ) {\n                $quota_percent = mysprintf( '%.2f', $NUMBER_100 * $quota_current_bytes / $quota_limit_bytes ) ;\n        }else{\n                $quota_percent = 0 ;\n        }\n        myprint( \"$Side: Quota current storage is $quota_current_bytes bytes. Limit is $quota_limit_bytes bytes. So $quota_percent % full\\n\"  ) ;\n        if ( $QUOTA_PERCENT_LIMIT < $quota_percent ) {\n                my $error = \"$Side: $quota_percent % full: it is time to find a bigger place! ( $quota_current_bytes bytes / $quota_limit_bytes bytes )\\n\" ;\n                errors_incr( $mysync, $error ) ;\n        }\n        return ;\n}\n\nsub tests_quota_extract_storage_limit_in_bytes\n{\n        note( 'Entering tests_quota_extract_storage_limit_in_bytes()' ) ;\n\n        my $mysync = {} ;\n        my $imap_output = [\n        '* QUOTAROOT \"INBOX\" \"Storage quota\" \"Messages quota\"',\n        '* QUOTA \"Storage quota\" (STORAGE 1 104857600)',\n        '* QUOTA \"Messages quota\" (MESSAGE 2 100000)',\n        '5 OK Getquotaroot completed.'\n        ] ;\n        ok( $NUMBER_104_857_600 * $KIBI == quota_extract_storage_limit_in_bytes( $mysync, $imap_output ), 'quota_extract_storage_limit_in_bytes ') ;\n\n        note( 'Leaving  tests_quota_extract_storage_limit_in_bytes()' ) ;\n        return ;\n}\n\nsub quota_extract_storage_limit_in_bytes\n{\n        my $mysync = shift ;\n        my $imap_output = shift ;\n\n        my $limit_kb ;\n        $limit_kb = ( map { /.*\\(\\s*STORAGE\\s+\\d+\\s+(\\d+)\\s*\\)/x ? $1 : () } @{ $imap_output } )[0] ;\n        $limit_kb ||= 0 ;\n        $mysync->{ debug } and myprint( \"storage_limit_kb = $limit_kb\\n\"  ) ;\n        return( $KIBI * $limit_kb ) ;\n}\n\n\nsub tests_quota_extract_storage_current_in_bytes\n{\n\tnote( 'Entering tests_quota_extract_storage_current_in_bytes()' ) ;\n\n        my $mysync = {} ;\n        my $imap_output = [\n        '* QUOTAROOT \"INBOX\" \"Storage quota\" \"Messages quota\"',\n        '* QUOTA \"Storage quota\" (STORAGE 1 104857600)',\n        '* QUOTA \"Messages quota\" (MESSAGE 2 100000)',\n        '5 OK Getquotaroot completed.'\n        ] ;\n        ok( 1*$KIBI == quota_extract_storage_current_in_bytes( $mysync, $imap_output ), 'quota_extract_storage_current_in_bytes: 1 => 1024 ') ;\n\n\tnote( 'Leaving  tests_quota_extract_storage_current_in_bytes()' ) ;\n        return ;\n}\n\nsub quota_extract_storage_current_in_bytes\n{\n        my $mysync = shift ;\n        my $imap_output = shift ;\n\n        my $current_kb ;\n        $current_kb = ( map { /.*\\(\\s*STORAGE\\s+(\\d+)\\s+\\d+\\s*\\)/x ? $1 : () } @{ $imap_output } )[0] ;\n        $current_kb ||= 0 ;\n        $mysync->{ debug } and myprint( \"storage_current_kb = $current_kb\\n\"  ) ;\n        return( $KIBI * $current_kb ) ;\n\n}\n\n\nsub automap\n{\n        my ( $mysync ) = @_ ;\n\n        if ( $mysync->{automap} ) {\n                myprint( \"Turned on automapping folders ( use --noautomap to turn off automapping )\\n\"  ) ;\n        }else{\n                myprint( \"Turned off automapping folders ( use --automap to turn on automapping )\\n\"  ) ;\n                return ;\n        }\n\n        $mysync->{h1_special} = special_from_folders_hash( $mysync, $mysync->{imap1}, 'Host1' ) ;\n        $mysync->{h2_special} = special_from_folders_hash( $mysync, $mysync->{imap2}, 'Host2' ) ;\n\n        build_possible_special( $mysync ) ;\n        build_guess_special( $mysync ) ;\n        build_automap( $mysync ) ;\n\n        return ;\n}\n\n\n\n\nsub build_guess_special\n{\n        my ( $mysync ) = shift ;\n\n        foreach my $h1_fold ( sort keys  %{ $mysync->{h1_folders_all} }  ) {\n                my $special = guess_special( $h1_fold, $mysync->{possible_special}, $mysync->{h1_prefix} ) ;\n                if ( $special ) {\n                        $mysync->{h1_special_guessed}{$h1_fold} = $special ;\n                        my $already_guessed = $mysync->{h1_special_guessed}{$special} ;\n                        if ( $already_guessed ) {\n                                myprint( \"Host1: $h1_fold not $special because set to $already_guessed\\n\"  ) ;\n                        }else{\n                                $mysync->{h1_special_guessed}{$special} = $h1_fold ;\n                        }\n                }\n        }\n        foreach my $h2_fold ( sort keys  %{ $mysync->{h2_folders_all} }  ) {\n                my $special = guess_special( $h2_fold, $mysync->{possible_special}, $mysync->{h2_prefix} ) ;\n                if ( $special ) {\n                        $mysync->{h2_special_guessed}{$h2_fold} = $special ;\n                        my $already_guessed = $mysync->{h2_special_guessed}{$special} ;\n                        if ( $already_guessed ) {\n                                myprint( \"Host2: $h2_fold not $special because set to $already_guessed\\n\"  ) ;\n                        }else{\n                                $mysync->{h2_special_guessed}{$special} = $h2_fold ;\n                        }\n                }\n        }\n        return ;\n}\n\nsub guess_special\n{\n        my( $folder, $possible_special_ref, $prefix ) = @_ ;\n\n        my $folder_no_prefix = $folder ;\n        $folder_no_prefix =~ s/\\Q${prefix}\\E//xms ;\n        #$debug and myprint( \"folder_no_prefix: $folder_no_prefix\\n\"  ) ;\n\n        my $guess_special = $possible_special_ref->{ $folder }\n                || $possible_special_ref->{ $folder_no_prefix }\n                || q{} ;\n\n        return( $guess_special ) ;\n}\n\nsub tests_guess_special\n{\n\tnote( 'Entering tests_guess_special()' ) ;\n\n        my $possible_special_ref = build_possible_special( my $mysync ) ;\n        ok( '\\Sent' eq guess_special( 'Sent', $possible_special_ref, q{} ) ,'guess_special: Sent => \\Sent' ) ;\n        ok( q{} eq guess_special( 'Blabla', $possible_special_ref, q{} ) ,'guess_special: Blabla => q{}' ) ;\n        ok( '\\Sent' eq guess_special( 'INBOX.Sent', $possible_special_ref, 'INBOX.' ) ,'guess_special: INBOX.Sent => \\Sent' ) ;\n        ok( '\\Sent' eq guess_special( 'IN BOX.Sent', $possible_special_ref, 'IN BOX.' ) ,'guess_special: IN BOX.Sent => \\Sent' ) ;\n\n\tnote( 'Leaving  tests_guess_special()' ) ;\n        return ;\n}\n\nsub build_automap\n{\n        my $mysync = shift ;\n\t$mysync->{ debug } and myprint( \"Entering build_automap\\n\" ) ;\n        foreach my $h1_fold ( @{ $mysync->{h1_folders_wanted} } ) {\n                my $h2_fold ;\n                my $h1_special = $mysync->{h1_special}{$h1_fold} ;\n                my $h1_special_guessed = $mysync->{h1_special_guessed}{$h1_fold} ;\n\n                # Case 1: special on both sides.\n                if ( $h1_special\n                     and exists  $mysync->{h2_special}{$h1_special}  ) {\n                        $h2_fold = $mysync->{h2_special}{$h1_special} ;\n                        $mysync->{f1f2auto}{ $h1_fold } = $h2_fold ;\n                        next ;\n                }\n                # Case 2: special on host1, not on host2\n                if ( $h1_special\n                     and ( not exists  $mysync->{h2_special}{$h1_special}  )\n                     and ( exists  $mysync->{h2_special_guessed}{$h1_special}  )\n                   ) {\n                        # special_guessed on host2\n                        $h2_fold = $mysync->{h2_special_guessed}{$h1_special} ;\n                        $mysync->{f1f2auto}{ $h1_fold } = $h2_fold ;\n                        next ;\n                }\n                # Case 3: no special on host1, special on host2\n                if ( ( not $h1_special )\n                     and ( $h1_special_guessed )\n                     and ( exists  $mysync->{h2_special}{$h1_special_guessed}  )\n                ) {\n                        $h2_fold = $mysync->{h2_special}{$h1_special_guessed} ;\n                        $mysync->{f1f2auto}{ $h1_fold } = $h2_fold ;\n                        next ;\n                }\n                # Case 4: no special on both sides.\n                if ( ( not $h1_special )\n                     and ( $h1_special_guessed )\n                     and ( not exists  $mysync->{h2_special}{$h1_special_guessed}  )\n                     and ( exists  $mysync->{h2_special_guessed}{$h1_special_guessed}  )\n                ) {\n                        $h2_fold = $mysync->{h2_special_guessed}{$h1_special_guessed} ;\n                        $mysync->{f1f2auto}{ $h1_fold } = $h2_fold ;\n                        next ;\n                }\n        }\n        return( $mysync->{f1f2auto} ) ;\n}\n\n# I will not add what there is at:\n# http://stackoverflow.com/questions/2185391/localized-gmail-imap-folders/2185548#2185548\n# because it works well without\nsub build_possible_special\n{\n        my $mysync = shift ;\n        my $possible_special = { } ;\n        # All|Archive|Drafts|Flagged|Junk|Sent|Trash\n\n        $possible_special->{'\\All'}     = [ 'All', 'All Messages', '&BBIEQQQ1-' ] ;\n        $possible_special->{'\\Archive'} = [ 'Archive', 'Archives', '&BBAEQARFBDgEMg-' ] ;\n        $possible_special->{'\\Drafts'}  = [ 'Drafts', 'DRAFTS', '&BCcENQRABD0EPgQyBDgEOgQ4-', 'Szkice', 'Wersje robocze' ] ;\n        $possible_special->{'\\Flagged'} = [ 'Flagged', 'Starred', '&BB8EPgQ8BDUERwQ1BD0EPQRLBDU-' ] ;\n        $possible_special->{'\\Junk'}    = [ 'Junk', 'junk', 'Spam', 'SPAM', '&BCEEPwQwBDw-',\n                                            'Potwierdzony spam', 'Wiadomo&AVs-ci-&AVs-mieci',\n                                            'Junk E-Mail', 'Junk Email'] ;\n        $possible_special->{'\\Sent'}    = [ 'Sent', 'Sent Messages', 'Sent Items',\n                                            'Gesendete Elemente', 'Gesendete Objekte',\n                                            '&AMk-l&AOk-ments envoy&AOk-s', 'E&AwE-le&AwE-ments envoye&AwE-s', 'Envoy&AOk-', 'Objets envoy&AOk-s',\n                                            'Elementos enviados',\n                                            '&kAFP4W4IMH8wojCkMMYw4A-',\n                                            '&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-',\n                                            'Elementy wys&AUI-ane'] ;\n        $possible_special->{'\\Trash'}   = [ 'Trash', 'TRASH',\n                                            '&BCMENAQwBDsENQQ9BD0ESwQ1-', '&BBoEPgRABDcEOAQ9BDA-',\n                                            'Kosz',\n                                            'Deleted Items', 'Deleted Messages' ] ;\n\n\n        foreach my $special ( qw( \\All \\Archive \\Drafts \\Flagged \\Junk \\Sent \\Trash ) ){\n                foreach my $possible_folder ( @{ $possible_special->{$special} } ) {\n                        $possible_special->{ $possible_folder } = $special ;\n                } ;\n        }\n        $mysync->{possible_special} = $possible_special ;\n        $mysync->{ debug } and myprint( Data::Dumper->Dump( [ $possible_special ], [ 'possible_special' ] )  ) ;\n        return( $possible_special ) ;\n}\n\nsub tests_special_from_folders_hash\n{\n\tnote( 'Entering tests_special_from_folders_hash()' ) ;\n\n        my $mysync = {} ;\n        require_ok( \"Test::MockObject\" ) ;\n        my $imapT = Test::MockObject->new(  ) ;\n\n        is( undef, special_from_folders_hash(  ), 'special_from_folders_hash: no args' ) ;\n        is( undef, special_from_folders_hash( $mysync ), 'special_from_folders_hash: undef args' ) ;\n        is_deeply( {}, special_from_folders_hash( $mysync, $imapT ), 'special_from_folders_hash: $imap void' ) ;\n\n        $imapT->mock( 'folders_hash', sub { return( [ { name => 'Sent', attrs => [ '\\Sent' ] } ] ) } ) ;\n\n        is_deeply( { Sent => '\\Sent', '\\Sent' => 'Sent' },\n                special_from_folders_hash( $mysync, $imapT ), 'special_from_folders_hash: $imap \\Sent' ) ;\n\n\tnote( 'Leaving  tests_special_from_folders_hash()' ) ;\n        return(  ) ;\n}\n\nsub special_from_folders_hash\n{\n        my ( $mysync, $imap, $side ) = @_ ;\n        my %special = (  ) ;\n\n        if ( ! defined $imap  ) { return ; }\n        $side = defined $side ? $side : 'Host?' ;\n\n        if ( ! $imap->can( 'folders_hash' ) ) {\n                my $error =  \"$side: To have automagic rfc6154 folder mapping, upgrade Mail::IMAPClient >= 3.34\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                return( \\%special ) ; # empty hash ref\n        }\n        my $folders_hash = $imap->folders_hash(  ) ;\n        foreach my $fhash (@{ $folders_hash } ) {\n                        my @special =  grep { /\\\\(?:All|Archive|Drafts|Flagged|Junk|Sent|Trash)/x } @{ $fhash->{attrs} }  ;\n                        if ( @special ) {\n                                my $special = $special[0] ; # keep first one. Could be not very good.\n                                if ( exists  $special{ $special }  ) {\n                                        myprintf( \"%s: special %-20s = %s already assigned to %s\\n\",\n                                                $side, $fhash->{name}, join( q{ }, @special ), $special{ $special } ) ;\n                                }else{\n                                        myprintf( \"%s: special %-20s = %s\\n\",\n                                                $side, $fhash->{name}, join( q{ }, @special ) ) ;\n                                        $special{ $special } = $fhash->{name} ;\n                                        $special{ $fhash->{name} } = $special ; # double entry value => key\n                                }\n                        }\n                }\n        myprint( \"\\n\" ) if ( %special ) ;\n        return( \\%special ) ;\n}\n\n\nsub tests_errors_log\n{\n        note( 'Entering tests_errors_log()' ) ;\n        is( undef, errors_log(  ), 'errors_log: no args => undef' ) ;\n        my $mysync = {} ;\n        is( undef, errors_log( $mysync ), 'errors_log: empty => undef' ) ;\n        is_deeply( [ 'aieaie' ], [ errors_log( $mysync, 'aieaie' ) ], 'errors_log: aieaie => aieaie' ) ;\n        # cumulative\n        is_deeply( [ 'aieaie' ], [ errors_log( $mysync ) ], 'errors_log: nothing more => aieaie' ) ;\n        is_deeply( [ 'aieaie', 'ouille' ], [ errors_log( $mysync, 'ouille' ) ], 'errors_log: ouille => aieaie ouille' ) ;\n        is_deeply( [ 'aieaie', 'ouille' ], [ errors_log( $mysync ) ], 'errors_log: nothing more => aieaie ouille' ) ;\n        note( 'Leaving  tests_errors_log()' ) ;\n        return ;\n}\n\nsub errors_log\n{\n        my ( $mysync, @error ) = @ARG ;\n\n        if ( ! $mysync->{errors_log} ) {\n                $mysync->{errors_log} = [] ;\n        }\n\n        if ( @error ) {\n                push  @{ $mysync->{errors_log} }, join( q{}, @error  ) ;\n        }\n        if ( @{ $mysync->{errors_log} } ) {\n                return @{ $mysync->{errors_log} } ;\n        }\n        else {\n                return ;\n        }\n}\n\n\n\nsub tests_comment_of_error_type\n{\n        note( 'Entering tests_comment_of_error_type()' ) ;\n\n        is( undef, comment_of_error_type(  ),  'comment_of_error_type: no args => undef' ) ;\n\n        my $mysync = {  } ;\n        is( undef, comment_of_error_type( $mysync ),  'comment_of_error_type: undef => undef' ) ;\n\n        is( \"\", comment_of_error_type( $mysync, '' ),  'comment_of_error_type: \"\" => \"\"' ) ;\n        is( \"\", comment_of_error_type( $mysync, 'blabla' ),  'comment_of_error_type: blabla => \"\"' ) ;\n\n        is( \"\", comment_of_error_type( $mysync, 'ERR_UNCLASSIFIED' ),  'comment_of_error_type: ERR_UNCLASSIFIED => \"\"' ) ;\n\n        like( comment_of_error_type( $mysync, 'ERR_OVERQUOTA' ), qr{100% full},  'comment_of_error_type: ERR_OVERQUOTA => matches 100% full' ) ;\n\n\n\n        note( 'Leaving  tests_comment_of_error_type()' ) ;\n        return ;\n}\n\nsub comment_of_error_type\n{\n        my $mysync     = shift @ARG ;\n        my $error_type = shift @ARG ;\n\n        if ( ! defined $mysync ) { return ; }\n        if ( ! defined $error_type ) { return ; }\n\n        my $comment ;\n\n        if ( exists( $COMMENT_OF_ERR_TYPE{ $error_type } ) )\n        {\n                $comment = $COMMENT_OF_ERR_TYPE{ $error_type }->( $mysync ) ;\n        }\n        else\n        {\n                $comment = \"\" ;\n        }\n        return $comment ;\n}\n\n\n\nsub tests_error_type\n{\n        note( 'Entering tests_error_type()' ) ;\n\n        is( 'ERR_NOTHING_REPORTED', error_type(  ),    'error_type: no args => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_NOTHING_REPORTED', error_type( '' ),  'error_type: empty string => ERR_NOTHING_REPORTED' ) ;\n\n        is( 'ERR_UNCLASSIFIED', error_type( 'ERR_UNCLASSIFIED' ),  'error_type: ERR_UNCLASSIFIED => ERR_UNCLASSIFIED' ) ;\n        is( 'ERR_UNCLASSIFIED', error_type( 'aie' ),  'error_type: aie => ERR_UNCLASSIFIED' ) ;\n        is( 'ERR_UNCLASSIFIED', error_type( 'ouille' ),  'error_type: ouille => ERR_UNCLASSIFIED' ) ;\n\n        is( 'ERR_Host1_FETCH', error_type( 'Message xxx could not be fetched: blabla' ),\n                'error_type: could not be fetched => ERR_Host1_FETCH'\n        ) ;\n\n        is( 'ERR_APPEND_SIZE',\n                error_type( 'could not append message xxx: BAD maximum message size exceeded' ),\n                'error_type: could not append message xxx: BAD maximum message size exceeded => ERR_APPEND_SIZE'\n        ) ;\n\n        is( 'ERR_OVERQUOTA',\n                error_type( 'Quota limit will be exceeded' ),\n                'error_type: Quota limit will be exceeded => ERR_OVERQUOTA'\n        ) ;\n\n        is( 'ERR_APPEND', error_type( 'could not append' ),  'error_type: could not append => ERR_APPEND' ) ;\n\n        is( 'ERR_CREATE',\n                error_type( 'Could not create folder' ),\n                'error_type: Could not create folder => ERR_CREATE'\n        ) ;\n\n        is( 'ERR_SELECT',\n                error_type( 'Could not select: blabla' ),\n                'error_type: Could not select: blabla => ERR_SELECT'\n        ) ;\n\n\n        #\n        #Maximum bytes transferred reached, 423 >= 100, ending sync\n        is( 'ERR_TRANSFER_EXCEEDED',\n                error_type( 'Maximum bytes transferred reached, blabla' ),\n                'error_type: Maximum bytes transferred reached, blabla => ERR_TRANSFER_EXCEEDED'\n        ) ;\n\n        #\n        is( 'ERR_CONNECTION_FAILURE_HOST1',\n                error_type( 'Host1 failure: can not open imap connection on host1 [badhostkaka] with user [tata]: Unable to connect to badhostkaka:  Invalid argument' ),\n                'error_type: can not open imap connection on host1 => ERR_CONNECTION_FAILURE_HOST1'\n        ) ;\n\n        is( 'ERR_CONNECTION_FAILURE_HOST2',\n                error_type( 'Host2 failure: can not open imap connection on host2 [badhostkiki] with user [titi]: Unable to connect to badhostkiki:  Invalid argument' ),\n                'error_type: can not open imap connection on host2 => ERR_CONNECTION_FAILURE_HOST2'\n        ) ;\n\n        is( 'ERR_APPEND_VIRUS',\n                error_type( 'could not append ( Subject:[For Your Consideration], Date:[\"29-Nov-2016 03:21:10 -0800\"], Size:[5505], Flags:[\\Seen] ) to folder INBOX: 275 NO Message refused because it contains a virus' ),\n                'error_type: could not append ... virus => ERR_APPEND_VIRUS'\n        ) ;\n\n\n        is( 'ERR_FLAGS',\n                error_type( 'Host2: flags msg INBOX/957910 could not add flags [PasGlop \\PasGlopRe]: 33 NO Error in IMAP command received by server.' ),\n                'error_type: could not add flags => ERR_FLAGS'\n        ) ;\n\n\n        note( 'Leaving  tests_error_type()' ) ;\n        return ;\n}\n\n\n\n# Could be implemented with https://metacpan.org/pod/Tie::RegexpHash\n# with just a hash of error regexes as keys and types as values.\n\nsub error_type\n{\n        my $error = shift ;\n\n        if ( ! defined $error ) { return 'ERR_NOTHING_REPORTED' ; }\n        if ( ! $error ) { return 'ERR_NOTHING_REPORTED' ; }\n\n        #\n        if ( $error =~ m{Host1 failure: Error login on} ) { return 'ERR_AUTHENTICATION_FAILURE_USER1' } ;\n        if ( $error =~ m{Host2 failure: Error login on} ) { return 'ERR_AUTHENTICATION_FAILURE_USER2' } ;\n\n        if ( $error =~ m{Host. failure: Can not go to tls encryption on host.} ) { return 'ERR_EXIT_TLS_FAILURE' } ;\n        #\n\n        if ( $error =~ m{could not be fetched:} ) { return 'ERR_Host1_FETCH' } ;\n\n        # could not append .*BAD maximum message size exceeded\n        # could not append.*Maximum size of appendable message has been exceeded\n        if ( $error =~ m{could not append .*BAD maximum message size exceeded} )\n                { return 'ERR_APPEND_SIZE' ; } ;\n\n        if ( $error =~ m{could not append.*Maximum size of appendable message has been exceeded} )\n                { return 'ERR_APPEND_SIZE' ; } ;\n\n        # Could not create folder *[OVERQUOTA] Not enough disk quota\n        # could not append .*[OVERQUOTA] Not enough disk quota\n        # could not append .*[OVERQUOTA] Mailbox is full / Blocks limit exceeded / Inode limit exceeded\n        if ( $error =~ m{OVERQUOTA} ) { return 'ERR_OVERQUOTA' ; } ;\n        if ( $error =~ m{Quota limit will be exceeded} ) { return 'ERR_OVERQUOTA' ; } ;\n        if ( $error =~ m{full: it is time to find a bigger place} ) { return 'ERR_OVERQUOTA' ; } ;\n\n        # could not append ... to folder INBOX: 276 NO Message refused because it contains a virus\n        if ( $error =~ m{could not append.*virus} )\n                { return 'ERR_APPEND_VIRUS' ; } ;\n\n        # could not append .*Write failed 'Broken pipe'\n        # could not append .*timeout waiting .* for data from server\n        # could not append .*BAD Invalid Arguments: Unable to parse message\n        # could not append .*BAD Command Argument Error. 11\n        # could not append .*NO header limit reached\n        if ( $error =~ m{could not append} ) { return 'ERR_APPEND' ; } ;\n\n        # could not add flags\n        if ( $error =~ m{could not add flags} ) { return 'ERR_FLAGS' ; } ;\n\n\n        # Could not create folder .*Invalid mailbox name\n        if ( $error =~ m{Could not create folder} ) { return 'ERR_CREATE' ; } ;\n\n\n        # Could not select:.*NO [NOPERM] Permission denied\n        # Could not select:.*NO Mailbox doesn't exist\n        # Could not select:.*NO [SERVERBUG] Internal error occurred.\n        # Could not select:.*[CANNOT] Mailbox isn't a valid mbox file\n        if ( $error =~ m{Could not select:} ) { return 'ERR_SELECT' ; } ;\n\n        #Maximum bytes transferred reached, 423 >= 100, ending sync\n        if ( $error =~ m{Maximum bytes transferred reached} ) { return 'ERR_TRANSFER_EXCEEDED' ; } ;\n\n        if ( $error =~ m{can not open imap connection on host1} ) { return 'ERR_CONNECTION_FAILURE_HOST1' ; } ;\n        if ( $error =~ m{can not open imap connection on host2} ) { return 'ERR_CONNECTION_FAILURE_HOST2' ; } ;\n\n        # Default is ERR_UNCLASSIFIED\n        return 'ERR_UNCLASSIFIED' ;\n\n}\n\nsub tests_errorclassify\n{\n        note( 'Entering tests_errorclassify()' ) ;\n\n        is( undef, errorclassify(  ),  'errorclassify: no args => undef' ) ;\n\n        is_deeply( { 'ERR_UNCLASSIFIED' => 1 }, errorclassify( 'aie' ), 'errorclassify: aie => { ERR_UNCLASSIFIED => 1 }' ) ;\n        is_deeply( { 'ERR_UNCLASSIFIED' => 2 }, errorclassify( 'aie', 'ouille' ), 'errorclassify: aie ouille => { ERR_UNCLASSIFIED => 2 }' ) ;\n        is_deeply( { 'ERR_UNCLASSIFIED' => 2, 'ERR_NOTHING_REPORTED' => 1 }, errorclassify( 'aie', 'ouille', '' ), 'errorclassify: aie ouille \"\" => { ERR_UNCLASSIFIED => 2 }' ) ;\n        is_deeply( { 'ERR_UNCLASSIFIED' => 3 }, errorclassify( 'aie', 'ouille', 'aie' ), 'errorclassify: aie ouille aie => { ERR_UNCLASSIFIED => 3 }' ) ;\n        is_deeply( { 'ERR_UNCLASSIFIED' => 1, 'ERR_OVERQUOTA' => 2 }, errorclassify( 'aie', 'OVERQUOTA pipi', 'OVERQUOTA caca' ), 'errorclassify: aie OVERQUOTA OVERQUOTA' ) ;\n        is_deeply( { 'ERR_NOTHING_REPORTED' => 1 }, errorclassify( '' ), 'errorclassify: \"\" => { ERR_NOTHING_REPORTED => 1 }' ) ;\n        is_deeply( { 'ERR_NOTHING_REPORTED' => 2 }, errorclassify( '', '' ), 'errorclassify: \"\", \"\" => { ERR_NOTHING_REPORTED => 1 }' ) ;\n\n        note( 'Leaving  tests_errorclassify()' ) ;\n        return ;\n}\n\n\n\nsub errorclassify\n{\n        my @errors = @ARG ;\n\n        if ( ! @errors ) { return ; } ;\n\n        my $error_type_count = { } ;\n        foreach my $error ( @errors )\n        {\n                my $error_type = error_type( $error ) ;\n                $error_type_count->{ $error_type }++ ;\n        }\n\n        return $error_type_count ;\n}\n\nsub tests_most_common_error\n{\n        note( 'Entering tests_most_common_error()' ) ;\n\n        is( 'ERR_NOTHING_REPORTED', most_common_error(  ),  'most_common_error: no args => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_NOTHING_REPORTED', most_common_error( {} ),  'most_common_error: empty hash ref => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_NOTHING_REPORTED', most_common_error( 'blabla' ),  'most_common_error: not a hash ref => ERR_NOTHING_REPORTED' ) ;\n\n        is( 'ERR_FOO', most_common_error( { ERR_FOO => 1 } ),  'most_common_error: { ERR_FOO => 1 } => ERR_FOO' ) ;\n        is( 'ERR_BAR', most_common_error( { ERR_FOO => 1, ERR_BAR => 2 } ),  'most_common_error: { ERR_FOO => 1, ERR_BAR => 2 } => ERR_BAR' ) ;\n        is( 'ERR_FOO', most_common_error( { ERR_FOO => 2, ERR_BAR => 1 } ),  'most_common_error: { ERR_FOO => 2, ERR_BAR => 1 } => ERR_FOO' ) ;\n        # exaequo => first lexical wins. ERR_BAR <= ERR_FOO\n        is( 'ERR_BAR', most_common_error( { ERR_FOO => 2, ERR_BAR => 2 } ),  'most_common_error: { ERR_FOO => 2, ERR_BAR => 2 } => ERR_BAR' ) ;\n\n        is( 'A', most_common_error( { A => 5, B => 5, C => 5 } ),  'most_common_error: { A => 5, B => 5, C => 5 } => A' ) ;\n        is( 'B', most_common_error( { A => 5, B => 6, C => 6 } ),  'most_common_error: { A => 5, B => 6, C => 6 } => B' ) ;\n        is( 'C', most_common_error( { A => 5, B => 5, C => 7 } ),  'most_common_error: { A => 5, B => 5, C => 7 } => C' ) ;\n        is( 'C', most_common_error( { A => 5, B => 6, C => 7 } ),  'most_common_error: { A => 5, B => 5, C => 7 } => C' ) ;\n\n        note( 'Leaving  tests_most_common_error()' ) ;\n        return ;\n}\n\n\n\nsub most_common_error\n{\n        my $errors_counted_ref = shift ;\n\n        if ( ! defined $errors_counted_ref ) { return 'ERR_NOTHING_REPORTED' ; }\n\n        if ( 'HASH' ne ref $errors_counted_ref ) { return 'ERR_NOTHING_REPORTED' ; }\n\n        # empty hash\n        if ( !%{ $errors_counted_ref } ) { return 'ERR_NOTHING_REPORTED' ; }\n\n        # non empty hash\n\t\t# in case of equality the winner error is the first in alphabetic order\n        my $most_common_error = ( sort\n        {\n                $errors_counted_ref->{$b} <=> $errors_counted_ref->{$a}\n                || $a cmp $b\n        } keys %{$errors_counted_ref} )[0] ;\n\n        return $most_common_error ;\n\n}\n\n\n\nsub tests_errorsanalyse\n{\n        note( 'Entering tests_errorsanalyse()' ) ;\n\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse(  ),  'errorsanalyse: no args => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse( (  ) ),  'errorsanalyse: empty list => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_UNCLASSIFIED', errorsanalyse( 'aie' ),  'errorsanalyse: aie => ERR_UNCLASSIFIED' ) ;\n\n        # in case of equality, empty wins\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse( 'aie', '' ),  'errorsanalyse: aie => ERR_UNCLASSIFIED' ) ;\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse( '', 'aie' ),  'errorsanalyse: aie => ERR_UNCLASSIFIED' ) ;\n\n\n        is( 'ERR_UNCLASSIFIED', errorsanalyse( 'aie', 'ouille' ),  'errorsanalyse: aie, ouille => ERR_UNCLASSIFIED' ) ;\n        is( 'ERR_UNCLASSIFIED', errorsanalyse( 'aie', 'ouille', '' ),  'errorsanalyse: aie, ouille, \"\" => ERR_UNCLASSIFIED' ) ;\n        is( 'ERR_UNCLASSIFIED', errorsanalyse( '', 'aie', 'ouille' ),  'errorsanalyse: aie, ouille, \"\" => ERR_UNCLASSIFIED' ) ;\n\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse( '' ),  'errorsanalyse: \"\" => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse( ( '' ) ),  'errorsanalyse: ( \"\" ) => ERR_NOTHING_REPORTED' ) ;\n        is( 'ERR_NOTHING_REPORTED', errorsanalyse( ( '', '' ) ),  'errorsanalyse: ( \"\", \"\" ) => ERR_NOTHING_REPORTED' ) ;\n\n        note( 'Leaving  tests_errorsanalyse()' ) ;\n        return ;\n}\n\n\n\nsub errorsanalyse\n{\n        my @errors = @ARG ;\n        my $errors_types_counted = errorclassify( @errors ) ;\n\n        my $most_common_error = most_common_error( $errors_types_counted ) ;\n\n        return $most_common_error ;\n}\n\n\n\nsub tests_errorsdump\n{\n        note( 'Entering tests_errorsdump()' ) ;\n\n        is( undef, errorsdump(  ),  'errorsdump: no args => undef' ) ;\n        is( undef, errorsdump( (  ) ),  'errorsdump: empty list => undef' ) ;\n        is( \"Err 1/1: \", errorsdump( '' ),  'errorsdump: one empty string => \"Err 1/1: \"' ) ;\n        is( \"Err 1/1: aieaieaie\", errorsdump( 'aieaieaie' ),  'errorsdump: aieaieaie => \"Err 1/1: aieaieaie\"' ) ;\n        is( \"Err 1/2: Aie Err 2/2: Ouille\", errorsdump( 'Aie ', 'Ouille' ),  'errorsdump: Aie Ouille => \"Err 1/2: Aie Err 2/2: Ouille\"' ) ;\n        note( 'Leaving  tests_errorsdump()' ) ;\n        return ;\n}\n\n\nsub errorsdump\n{\n        if ( ! @ARG ) { return ; }\n\n        my @errors_log = @ARG ;\n        my $nb_errors = @errors_log ;\n        my $error_num = 0 ;\n        my $errors_list = q{} ;\n        if ( @errors_log ) {\n                foreach my $error ( @errors_log )\n                {\n                        $error_num++ ;\n                        $errors_list .= \"Err $error_num/$nb_errors: $error\" ;\n                }\n        }\n        return( $errors_list ) ;\n}\n\n\n\nsub errors_listing\n{\n        my $mysync = shift ;\n        $mysync->{ most_common_error } = errorsanalyse( errors_log( $mysync ) ) ;\n\n        my $errors_listing = '' ;\n\n        if ( $mysync->{ errorsdump }  )\n        {\n                $errors_listing = join( '',\n                \"++++ Listing $mysync->{nb_errors} errors encountered during the sync ( avoid this listing with --noerrorsdump ).\\n\",\n                errorsdump( errors_log( $mysync ) ),\n                ) ;\n        }\n\n        $errors_listing .= join( '',\n                \"The most frequent error is $mysync->{ most_common_error }. \",\n                comment_of_error_type( $mysync, $mysync->{ most_common_error } ),\n                \"\\n\",\n        ) ;\n\n        return $errors_listing ;\n}\n\n\nsub errors_incr\n{\n        my ( $mysync, @error ) = @ARG ;\n        $mysync->{ nb_errors }++ ;\n\n        if ( @error ) {\n                errors_log( $mysync, @error ) ;\n                myprint( @error ) ;\n        }\n\n        $mysync->{ errorsmax } ||= $ERRORS_MAX ;\n\n\n        if ( $mysync->{ nb_errors } >= $mysync->{ errorsmax } )\n        {\n                myprint( errorsmax_msg( $mysync ) ) ;\n                myprint( errors_listing( $mysync ) ) ;\n\n                if ( $mysync->{ errorsdump } )\n                {\n                        # again since errorsdump(  ) can be very verbose and masquerade previous warning\n                        myprint( errorsmax_msg( $mysync ) ) ;\n                }\n                my $exit_value = exit_value( $mysync, $mysync->{ most_common_error } ) ;\n                exit_clean( $mysync, $exit_value ) ;\n        }\n        return ;\n}\n\n\n\nsub errorsmax_msg\n{\n        my $mysync = shift @ARG ;\n        my $msg = \"Maximum number of errors $mysync->{errorsmax} reached \"\n        . \"( you can change $mysync->{errorsmax} to any value, for example 100 with --errorsmax 100 ). \"\n        . \"Exiting.\\n\" ;\n        return $msg ;\n}\n\n\n\n\nsub tests_live_result\n{\n        note( 'Entering tests_live_result()' ) ;\n\n        my $nb_errors = shift ;\n        if ( $nb_errors  ) {\n                myprint( \"Live tests failed with $nb_errors errors\\n\"  ) ;\n        } else {\n                myprint( \"Live tests ended successfully\\n\"  ) ;\n        }\n        note( 'Leaving  tests_live_result()' ) ;\n        return ;\n}\n\n\nsub size_filtered_flag\n{\n        my $mysync = shift ;\n        my $h1_size = shift ;\n\n        if ( defined $mysync->{ maxsize } and $h1_size >= $mysync->{ maxsize } ) {\n                return( 1 ) ;\n        }\n        if ( defined $minsize and $h1_size <= $minsize ) {\n                return( 1 ) ;\n        }\n        return( 0 ) ;\n}\n\nsub sync_flags_fir\n{\n        my ( $mysync, $h1_fold, $h1_msg, $h2_fold, $h2_msg, $permanentflags2, $h1_fir_ref, $h2_fir_ref ) = @_ ;\n\n        if ( not defined  $h1_msg  ) { return } ;\n        if ( not defined  $h2_msg  ) { return } ;\n\n        my $h1_size = $h1_fir_ref->{$h1_msg}->{'RFC822.SIZE'} ;\n        return if size_filtered_flag( $mysync, $h1_size ) ;\n\n        # used cached flag values for efficiency\n        my $h1_flags = $h1_fir_ref->{ $h1_msg }->{ 'FLAGS' } || q{} ;\n        my $h2_flags = $h2_fir_ref->{ $h2_msg }->{ 'FLAGS' } || q{} ;\n\n        sync_flags( $mysync, $h1_fold, $h1_msg, $h1_flags, $h2_fold, $h2_msg, $h2_flags, $permanentflags2 ) ;\n\n        return ;\n}\n\nsub sync_flags_after_copy\n{\n        # Activated with option --syncflagsaftercopy\n        my( $mysync, $h1_fold, $h1_msg, $h1_flags, $h2_fold, $h2_msg, $permanentflags2 ) = @_ ;\n\n        if ( my @h2_flags = $mysync->{imap2}->flags( $h2_msg ) ) {\n                my $h2_flags = \"@h2_flags\" ;\n                ( $mysync->{ debug } or $debugflags ) and myprint( \"Host2: msg $h2_fold/$h2_msg flags before sync flags after copy ( $h2_flags )\\n\"  ) ;\n                sync_flags( $mysync, $h1_fold, $h1_msg, $h1_flags, $h2_fold, $h2_msg, $h2_flags, $permanentflags2 ) ;\n        }else{\n                myprint( \"Host2: msg $h2_fold/$h2_msg could not get its flags for sync flags after copy\\n\"  ) ;\n        }\n        return ;\n}\n\n# Globals\n# $debug\n# $debugflags\n# $permanentflags2\n\n\nsub sync_flags\n{\n        my( $mysync, $h1_fold, $h1_msg, $h1_flags, $h2_fold, $h2_msg, $h2_flags, $permanentflags2 ) = @_ ;\n\n        ( $mysync->{ debug } or $debugflags ) and\n        myprint( \"Host1: flags init msg $h1_fold/$h1_msg flags( $h1_flags ) Host2 msg $h2_fold/$h2_msg flags( $h2_flags )\\n\"  ) ;\n\n        $h1_flags = flags_for_host2( $mysync, $h1_flags, $permanentflags2 ) ;\n\n        $h2_flags = flagscase( $h2_flags ) ;\n\n        ( $mysync->{ debug } or $debugflags ) and\n        myprint( \"Host1: flags filt msg $h1_fold/$h1_msg flags( $h1_flags ) Host2 msg $h2_fold/$h2_msg flags( $h2_flags )\\n\"  ) ;\n\n\n        # compare flags - set flags if there a difference\n        my @h1_flags = sort split(q{ }, $h1_flags );\n        my @h2_flags = sort split(q{ }, $h2_flags );\n        my $diff = compare_lists( \\@h1_flags, \\@h2_flags );\n\n        $diff and ( $mysync->{ debug } or $debugflags )\n              and myprint( \"Host2: flags msg $h2_fold/$h2_msg replacing h2 flags( $h2_flags ) with h1 flags( $h1_flags )\\n\" ) ;\n\n        # This sets flags exactly. So flags can be removed with this.\n        # When you remove a \\Seen flag on host1 you want it\n        # to be removed on host2. Just add flags is not what\n        # we need most of the time, so no + like in \"+FLAGS.SILENT\".\n\n        if ( not $mysync->{dry} and $diff and not $mysync->{imap2}->store( $h2_msg, \"FLAGS.SILENT (@h1_flags)\" ) ) {\n                my $error_msg = join q{}, \"Host2: flags msg $h2_fold/$h2_msg could not add flags [@h1_flags]: \",\n                  $mysync->{imap2}->LastError || q{}, \"\\n\" ;\n                errors_incr( $mysync, $error_msg ) ;\n        }\n\n        return ;\n}\n\n\n\nsub _filter\n{\n        my $mysync = shift ;\n        my $str = shift or return q{} ;\n        my $sz  = $SIZE_MAX_STR ;\n        my $len = length $str ;\n        if ( not $mysync->{ debug } and $len > $sz*2 ) {\n                my $beg = substr $str, 0, $sz ;\n                my $end = substr $str, -$sz, $sz ;\n                $str = $beg . '...' . $end ;\n        }\n        $str =~ s/\\012?\\015$//x ;\n        return \"(len=$len) \" . $str ;\n}\n\n\n\nsub lost_connection\n{\n        my( $mysync, $imap, $error_message ) = @_;\n        if ( $imap->IsUnconnected(  ) ) {\n                $mysync->{nb_errors}++ ;\n                my $lcomm = $imap->LastIMAPCommand || q{} ;\n\n                my $einfo = imap_last_error( $imap ) ;\n\n                # if string is long try reduce to a more reasonable size\n                $lcomm = _filter( $mysync, $lcomm ) ;\n                $einfo = _filter( $mysync, $einfo ) ;\n                myprint( \"Failure: last command: $lcomm\\n\") if ( $mysync->{ debug } && $lcomm) ;\n                myprint( \"Failure: lost connection $error_message: \", $einfo, \"\\n\") ;\n                return( 1 ) ;\n        }\n        else{\n                return( 0 ) ;\n        }\n}\n\nsub imap_last_error\n{\n        my $imap = shift ;\n        my $einfo = $imap->LastError || @{$imap->History}[$LAST] || q{} ;\n        chomp( $einfo ) ;\n        return( $einfo ) ;\n}\n\nsub tests_max\n{\n\tnote( 'Entering tests_max()' ) ;\n\n        is( 0, max( 0 ),  'max 0 => 0' ) ;\n        is( 1, max( 1 ),  'max 1 => 1' ) ;\n        is( $MINUS_ONE, max( $MINUS_ONE ), 'max -1 => -1') ;\n        is( undef, max(  ), 'max no arg => undef' ) ;\n        is( undef, max( undef ), 'undef => undef' ) ;\n        is( undef, max( undef, undef ), 'undef, undef => undef' ) ;\n\n        is( $NUMBER_100, max( 1, $NUMBER_100 ), 'max 1 100 => 100' ) ;\n        is( $NUMBER_100, max( $NUMBER_100, 1 ), 'max 100 1 => 100' ) ;\n        is( $NUMBER_100, max( $NUMBER_100, $NUMBER_42, 1 ), 'max 100 42 1 => 100' ) ;\n        is( $NUMBER_100, max( $NUMBER_100, '42', 1 ), 'max 100 42 1 => 100' ) ;\n        is( $NUMBER_100, max( '100', '42', 1 ), 'max 100 42 1 => 100' ) ;\n        is( $NUMBER_100, max( $NUMBER_100, 'haha', 1 ), 'max 100 haha 1 => 100') ;\n        is( $NUMBER_100, max( 'bb', $NUMBER_100, 'haha' ), 'max bb 100 haha => 100') ;\n        is( $MINUS_ONE, max( q{}, $MINUS_ONE, 'haha' ), 'max \"\" -1 haha => -1') ;\n        is( $MINUS_ONE, max( q{}, $MINUS_ONE, $MINUS_TWO ), 'max \"\" -1 -2 => -1') ;\n        is( $MINUS_ONE, max( 'haha', $MINUS_ONE, $MINUS_TWO ), 'max haha -1 -2 => -1') ;\n\tis( 1, max( $MINUS_ONE, 1 ), 'max -1 1 => 1') ;\n\tis( 1, max( undef, 1 ), 'max undef 1 => 1' ) ;\n\tis( 0, max( undef, 0 ), 'max undef 0 => 0' ) ;\n        is( 'haha', max( 'haha' ), 'max haha => haha') ;\n        is( 'bb', max( 'aa', 'bb' ), 'max aa bb => bb') ;\n        is( 'bb', max( 'bb', 'aa' ), 'max bb aa => bb') ;\n        is( 'bb', max( 'bb', 'aa', 'bb' ), 'max bb aa bb => bb') ;\n\tnote( 'Leaving  tests_max()' ) ;\n        return ;\n}\n\nsub max\n{\n        my @list = @_ ;\n        return( undef ) if ( 0 == scalar  @list  ) ;\n\n        my( @numbers, @notnumbers ) ;\n        foreach my $item ( @list )\n        {\n                if ( is_number( $item ) )\n                {\n                        push @numbers, $item ;\n                }\n                elsif ( defined $item )\n                {\n                        push @notnumbers, $item ;\n                }\n        }\n\n        my @sorted ;\n\n        if ( @numbers )\n        {\n                @sorted = sort { $a <=> $b } @numbers ;\n        }\n        elsif ( @notnumbers )\n        {\n                @sorted = sort { $a cmp $b } @notnumbers ;\n        }\n        else\n        {\n                return ;\n        }\n\n        return( pop @sorted ) ;\n}\n\nsub tests_is_number\n{\n        note( 'Entering tests_is_number()' ) ;\n\n        is( undef, is_number( ),    'is_number: no args => undef ' ) ;\n        is( undef, is_number( undef ),    'is_number: undef => undef ' ) ;\n        ok( is_number( 1 ),    'is_number:  1 => 1' ) ;\n        ok( is_number( 1.1 ),  'is_number:  1.1 => 1' ) ;\n        ok( is_number( 0 ),    'is_number:  0 => 1' ) ;\n        ok( is_number( -1 ),   'is_number: -1 => 1' ) ;\n        ok( ! is_number( 1.1.1 ),   'is_number: 1.1.1 => no' ) ;\n        ok( ! is_number( q{} ),     'is_number:   q{} => no' ) ;\n        ok( ! is_number( 'haha' ),  'is_number:  haha => no' ) ;\n        ok( ! is_number( '0haha' ), 'is_number: 0haha => no' ) ;\n        ok( ! is_number( '2haha' ), 'is_number: 2haha => no' ) ;\n        ok( ! is_number( 'haha2' ), 'is_number: haha2 => no' ) ;\n\n        note( 'Leaving  tests_is_number()' ) ;\n        return ;\n}\n\n\n\nsub is_number\n{\n        my $item = shift ;\n\n        if ( ! defined $item ) { return ; }\n\n        if ( $item =~ /\\A$RE{num}{real}\\Z/ ) {\n                return 1 ;\n        }\n        return ;\n}\n\nsub tests_min\n{\n\tnote( 'Entering tests_min()' ) ;\n\n        is( 0, min( 0 ),  'min 0 => 0' ) ;\n        is( 1, min( 1 ),  'min 1 => 1' ) ;\n        is( $MINUS_ONE, min( $MINUS_ONE ), 'min -1 => -1' ) ;\n        is( undef, min(  ), 'min no arg => undef' ) ;\n        is( 1, min( 1, $NUMBER_100 ), 'min 1 100 => 1' ) ;\n        is( 1, min( $NUMBER_100, 1 ), 'min 100 1 => 1' ) ;\n        is( 1, min( $NUMBER_100, $NUMBER_42, 1 ), 'min 100 42 1 => 1' ) ;\n        is( 1, min( $NUMBER_100, '42', 1 ), 'min 100 42 1 => 1' ) ;\n        is( 1, min( '100', '42', 1 ), 'min 100 42 1 => 1' ) ;\n        is( 1, min( $NUMBER_100, 'haha', 1 ), 'min 100 haha 1 => 1') ;\n\tis( $MINUS_ONE, min( $MINUS_ONE, 1 ), 'min -1 1 => -1') ;\n\n\tis( 1, min( undef, 1 ), 'min undef 1 => 1' ) ;\n\tis( 0, min( undef, 0 ), 'min undef 0 => 0' ) ;\n\tis( 1, min( undef, 1 ), 'min undef 1 => 1' ) ;\n\tis( 0, min( undef, 2, 0, 1 ), 'min undef, 2, 0, 1 => 0' ) ;\n\n        is( 'haha', min( 'haha' ), 'min haha => haha') ;\n        is( 'aa', min( 'aa', 'bb' ), 'min aa bb => aa') ;\n        is( 'aa', min( 'bb', 'aa' ), 'min bb aa bb => aa') ;\n        is( 'aa', min( 'bb', 'aa', 'bb' ), 'min bb aa bb => aa') ;\n\n\tnote( 'Leaving  tests_min()' ) ;\n        return ;\n}\n\n\nsub min\n{\n        my @list = @_ ;\n        return( undef ) if ( 0 == scalar  @list  ) ;\n\n        my( @numbers, @notnumbers ) ;\n        foreach my $item ( @list ) {\n                if ( is_number( $item ) ) {\n                        push @numbers, $item ;\n                }else{\n                        push @notnumbers, $item ;\n                }\n        }\n\n        my @sorted ;\n        if ( @numbers ) {\n                @sorted = sort { $a <=> $b } @numbers ;\n        }elsif( @notnumbers ) {\n                @sorted = sort { $a cmp $b } @notnumbers ;\n        }else{\n                return ;\n        }\n\n        return( shift @sorted ) ;\n}\n\n\nsub check_lib_version\n{\n        my $mysync = shift ;\n        $mysync->{ debug } and myprint( \"IMAPClient $Mail::IMAPClient::VERSION\\n\"  ) ;\n        if ( '2.2.9' eq $Mail::IMAPClient::VERSION ) {\n                myprint( \"imapsync no longer supports Mail::IMAPClient 2.2.9, upgrade it\\n\"  ) ;\n                return 0 ;\n        }\n        else{\n                # 3.x.x is no longer buggy with imapsync.\n                # 3.30 or currently superior is imposed in the Perl \"use Mail::IMAPClient line\".\n                return 1 ;\n        }\n        return ;\n}\n\nsub module_version_str\n{\n        my( $module_name, $module_version ) = @_ ;\n        my $str = mysprintf( \"%-20s %s\\n\", $module_name, $module_version ) ;\n        return( $str ) ;\n}\n\nsub modulesversion\n{\n\n        my @list_version;\n\n        my %modulesversion = (\n                'Authen::NTLM'          => sub { $Authen::NTLM::VERSION },\n                'CGI'                   => sub { $CGI::VERSION },\n                'Compress::Zlib'        => sub { $Compress::Zlib::VERSION },\n                'Crypt::OpenSSL::RSA'   => sub { $Crypt::OpenSSL::RSA::VERSION },\n                'Data::Uniqid'          => sub { $Data::Uniqid::VERSION },\n                'Digest::HMAC_MD5'      => sub { $Digest::HMAC_MD5::VERSION },\n                'Digest::HMAC_SHA1'     => sub { $Digest::HMAC_SHA1::VERSION },\n                'Digest::MD5'           => sub { $Digest::MD5::VERSION },\n                'Encode'                => sub { $Encode::VERSION },\n                'Encode::IMAPUTF7'      => sub { $Encode::IMAPUTF7::VERSION },\n                'File::Copy::Recursive' => sub { $File::Copy::Recursive::VERSION },\n                'File::Spec'            => sub { $File::Spec::VERSION },\n                'Getopt::Long'          => sub { $Getopt::Long::VERSION },\n                'HTML::Entities'        => sub { $HTML::Entities::VERSION },\n                'IO::Socket'            => sub { $IO::Socket::VERSION },\n                'IO::Socket::INET'      => sub { $IO::Socket::INET::VERSION },\n                'IO::Socket::INET6'     => sub { $IO::Socket::INET6::VERSION },\n                'IO::Socket::IP'        => sub { $IO::Socket::IP::VERSION },\n                'IO::Socket::SSL'       => sub { $IO::Socket::SSL::VERSION },\n                'IO::Tee'               => sub { $IO::Tee::VERSION },\n                'JSON'                  => sub { $JSON::VERSION },\n                'JSON::WebToken'        => sub { $JSON::WebToken::VERSION },\n                'LWP'                   => sub { $LWP::VERSION },\n                'Mail::IMAPClient'      => sub { $Mail::IMAPClient::VERSION },\n                'MIME::Base64'          => sub { $MIME::Base64::VERSION },\n                'Net::Ping'             => sub { $Net::Ping::VERSION },\n                'Net::SSLeay'           => sub { $Net::SSLeay::VERSION },\n                'Term::ReadKey'         => sub { $Term::ReadKey::VERSION },\n                'Test::MockObject'      => sub { $Test::MockObject::VERSION },\n                'Time::HiRes'           => sub { $Time::HiRes::VERSION },\n                'Unicode::String'       => sub { $Unicode::String::VERSION },\n                'URI::Escape'           => sub { $URI::Escape::VERSION },\n                #'Lalala'                => sub { $Lalala::VERSION },\n        ) ;\n\n        foreach my $module_name ( sort keys %modulesversion ) {\n                # trick from http://www.perlmonks.org/?node_id=152122\n                my $file_name = $module_name . '.pm' ;\n                $file_name =~s,::,/,xmgs; # Foo::Bar::Baz => Foo/Bar/Baz.pm\n                my $v ;\n                eval {\n                        require $file_name ;\n                        $v = defined $modulesversion{ $module_name } ? $modulesversion{ $module_name }->() : q{?} ;\n                } or $v = q{Not installed} ;\n\n                push  @list_version, module_version_str( $module_name, $v )  ;\n        }\n        return( @list_version ) ;\n}\n\n\nsub tests_command_line_nopassword\n{\n        note( 'Entering tests_command_line_nopassword()' ) ;\n\n        ok( q{} eq command_line_nopassword(), 'command_line_nopassword void' );\n        my $mysync = {} ;\n        ok( '--blabla' eq command_line_nopassword( $mysync, '--blabla' ), 'command_line_nopassword --blabla' );\n        #myprint( command_line_nopassword((qw{ --password1 secret1 })), \"\\n\" ) ;\n        ok( '--password1 MASKED' eq command_line_nopassword( $mysync, qw{ --password1 secret1}), 'command_line_nopassword --password1' );\n        ok( '--blabla --password1 MASKED --blibli'\n        eq command_line_nopassword( $mysync, qw{ --blabla --password1 secret1 --blibli } ), 'command_line_nopassword --password1 --blibli' );\n        $mysync->{showpasswords} = 1 ;\n        ok( q{} eq command_line_nopassword(), 'command_line_nopassword void' );\n        ok( '--blabla' eq command_line_nopassword( $mysync, '--blabla'), 'command_line_nopassword --blabla' );\n        #myprint( command_line_nopassword((qw{ --password1 secret1 })), \"\\n\" ) ;\n        ok( '--password1 secret1' eq command_line_nopassword( $mysync, qw{ --password1 secret1} ), 'command_line_nopassword --password1' );\n        ok( '--blabla --password1 secret1 --blibli'\n        eq command_line_nopassword( $mysync, qw{ --blabla --password1 secret1 --blibli } ), 'command_line_nopassword --password1 --blibli' );\n\n\tnote( 'Leaving  tests_command_line_nopassword()' ) ;\n        return ;\n}\n\n# Construct a command line copy with passwords replaced by MASKED.\nsub command_line_nopassword\n{\n        my $mysync = shift @ARG ;\n        my @argv = @ARG ;\n        my @argv_nopassword ;\n\n        if ( $mysync->{ cmdcgi } ) {\n                @argv_nopassword = mask_password_value( @{ $mysync->{ cmdcgi } } ) ;\n                return( \"@argv_nopassword\" ) ;\n        }\n\n        if ( $mysync->{showpasswords} )\n        {\n                return( \"@argv\" ) ;\n        }\n\n        @argv_nopassword = mask_password_value( @argv ) ;\n        return(\"@argv_nopassword\") ;\n}\n\nsub mask_password_value\n{\n        my @argv = @ARG ;\n        my @argv_nopassword ;\n        while ( @argv ) {\n                my $arg = shift @argv ; # option name or value\n                if ( $arg =~ m/-password[12]/x ) {\n                        shift @argv ; # password value\n                        push  @argv_nopassword, $arg, 'MASKED'  ; # option name and fake value\n                }else{\n                        push  @argv_nopassword, $arg ; # same option or value\n                }\n        }\n        return @argv_nopassword ;\n}\n\n\nsub tests_get_stdin_masked\n{\n        note( 'Entering tests_get_stdin_masked()' ) ;\n\n        is( q{}, get_stdin_masked(  ), 'get_stdin_masked: no args' ) ;\n        is( q{}, get_stdin_masked( 'Please ENTER: ' ), 'get_stdin_masked: ENTER' ) ;\n\n        note( 'Leaving  tests_get_stdin_masked()' ) ;\n        return ;\n}\n\n#######################################################\n# The issue is that prompt() does not prompt the prompt\n# when the program is used like\n# { sleep 2 ; echo blablabla ; } | ./imapsync ...--host1 lo --user1 tata --host2 lo --user2 titi\n\n# use IO::Prompter ;\nsub get_stdin_masked\n{\n        my $prompt = shift || 'Say something: ' ;\n        local @ARGV = () ;\n        my $input = prompt(\n                -prompt => $prompt,\n                -echo => '*',\n        ) ;\n        #myprint( \"You said: $input\\n\" ) ;\n        return $input ;\n}\n\nsub ask_for_password_new\n{\n        my $prompt = shift ;\n        my $password = get_stdin_masked( $prompt ) ;\n        return $password ;\n}\n#########################################################\n\n\nsub ask_for_password\n{\n        my $prompt = shift ;\n        myprint( $prompt  ) ;\n        Term::ReadKey::ReadMode( 2 ) ;\n        ## no critic (InputOutput::ProhibitExplicitStdin)\n        my $password = <STDIN> ;\n        chomp $password ;\n        myprint( \"\\nGot it\\n\" ) ;\n        Term::ReadKey::ReadMode( 0 ) ;\n        return $password ;\n}\n\n# Have to refactor get_password1() get_password2()\n# to have only get_password() and two calls\nsub get_password1\n{\n\n\tmy $mysync = shift ;\n\n\t$mysync->{ password1 }\n\t|| $mysync->{ passfile1 }\n\t|| 'PREAUTH'  eq $mysync->{ acc1 }->{ authmech }\n\t|| 'EXTERNAL' eq $mysync->{ acc1 }->{ authmech }\n\t|| $ENV{IMAPSYNC_PASSWORD1}\n\t|| do\n        {\n                myprint( << 'FIN_PASSFILE'  ) ;\n\nIf you are afraid of giving password on the command line arguments, you can put the\npassword of user1 in a file named file1 and use \"--passfile1 file1\" instead of typing it.\nThen give this file restrictive permissions with the command \"chmod 600 file1\".\nAn other solution is to set the environment variable IMAPSYNC_PASSWORD1\nFIN_PASSFILE\n                my $user = $mysync->{ acc1 }->{ authuser } || $mysync->{ user1 } ;\n                my $host = $mysync->{ host1 } ;\n                my $prompt = \"What's the password for $user\" . ' at ' . \"$host? (not visible while you type, then enter RETURN) \" ;\n                $mysync->{password1} = ask_for_password( $prompt ) ;\n        } ;\n\n\tif ( defined  $mysync->{ passfile1 }  ) {\n\t\tif ( ! -e -r $mysync->{ passfile1 } ) {\n\t\t\tmyprint( \"Failure: file from parameter --passfile1 $mysync->{ passfile1 } does not exist or is not readable\\n\" ) ;\n                        $mysync->{nb_errors}++ ;\n\t\t\texit_clean( $mysync, $EX_NOINPUT ) ;\n\t\t}\n\t\t# passfile1 readable\n\t\t$mysync->{password1} = firstline ( $mysync->{ passfile1 } ) ;\n\t\treturn ;\n\t}\n\tif ( $ENV{IMAPSYNC_PASSWORD1} ) {\n\t\t$mysync->{password1} = $ENV{IMAPSYNC_PASSWORD1} ;\n\t\treturn ;\n\t}\n\treturn ;\n}\n\nsub get_password2\n{\n\n\tmy $mysync = shift ;\n\n\t$mysync->{password2}\n\t|| $mysync->{ passfile2 }\n\t|| 'PREAUTH'  eq $mysync->{ acc2 }->{ authmech }\n\t|| 'EXTERNAL' eq $mysync->{ acc2 }->{ authmech }\n\t|| $ENV{IMAPSYNC_PASSWORD2}\n\t|| do\n        {\n                myprint( << 'FIN_PASSFILE'  ) ;\n\nIf you are afraid of giving password on the command line arguments, you can put the\npassword of user2 in a file named file2 and use \"--passfile2 file2\" instead of typing it.\nThen give this file restrictive permissions with the command \"chmod 600 file2\".\nAn other solution is to set the environment variable IMAPSYNC_PASSWORD2\nFIN_PASSFILE\n                my $user = $mysync->{ acc2 }->{ authuser } || $mysync->{ user2 } ;\n                my $host =  $mysync->{ host2 } ;\n                my $prompt = \"What's the password for $user\" . ' at ' . \"$host? (not visible while you type, then enter RETURN) \" ;\n                $mysync->{password2} = ask_for_password( $prompt ) ;\n        } ;\n\n\n\tif ( defined  $mysync->{ passfile2 }  ) {\n\t\tif ( ! -e -r $mysync->{ passfile2 } ) {\n\t\t\tmyprint( \"Failure: file from parameter --passfile2 $mysync->{ passfile2 } does not exist or is not readable\\n\" ) ;\n                        $mysync->{nb_errors}++ ;\n\t\t\texit_clean( $mysync, $EX_NOINPUT ) ;\n\t\t}\n\t\t# passfile2 readable\n\t\t$mysync->{password2} = firstline ( $mysync->{ passfile2 } ) ;\n\t\treturn ;\n\t}\n\tif ( $ENV{IMAPSYNC_PASSWORD2} ) {\n\t\t$mysync->{password2} = $ENV{IMAPSYNC_PASSWORD2} ;\n\t\treturn ;\n\t}\n\treturn ;\n}\n\n\n\n\nsub remove_tmp_files\n{\n        my $mysync = shift or return ;\n        $mysync->{pidfile} or return ;\n\n        if ( -e $mysync->{pidfile} ) {\n                myprint( \"Removing pidfile $mysync->{pidfile}\\n\" ) ;\n                unlink $mysync->{pidfile} ;\n        }\n        if ( -e $mysync->{abortfile} ) {\n                myprint( \"Removing pidfile $mysync->{abortfile}\\n\" ) ;\n                unlink $mysync->{abortfile} ;\n        }\n        return ;\n}\n\nsub cleanup_before_exit\n{\n        my $mysync = shift ;\n\n        remove_tmp_files( $mysync ) ;\n\n        if ( $mysync->{imap1} and $mysync->{imap1}->IsConnected() )\n        {\n                myprint( \"Disconnecting from host1 $mysync->{ host1 } user1 $mysync->{ user1 }\\n\" ) ;\n                $mysync->{imap1}->logout(  ) ;\n        }\n\n        if ( $mysync->{imap2} and $mysync->{imap2}->IsConnected() )\n        {\n                myprint( \"Disconnecting from host2 $mysync->{ host2 } user2 $mysync->{ user2 }\\n\" ) ;\n                $mysync->{imap2}->logout(  ) ;\n        }\n\n        if ( $mysync->{log} ) {\n                myprint( \"Log file is $mysync->{logfile} ( to change it, use --logfile filepath ; or use --nolog to turn off logging )\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"No log file because of option --nolog\\n\" ) ;\n        }\n\n        if ( $mysync->{log} and $mysync->{logfile_handle} ) {\n                #print( \"Closing $mysync->{ logfile }\\n\" ) ;\n                teefinish( $mysync ) ;\n        }\n\n        return ;\n}\n\n\nsub tests_exit_value\n{\n        note( 'Entering tests_exit_value()' ) ;\n\n        is( $EXIT_CATCH_ALL, exit_value(  ),  'exit_value: no args => EXIT_CATCH_ALL' ) ;\n\n        my $mysync = {  } ;\n        is( $EXIT_CATCH_ALL, exit_value( $mysync ),  'exit_value: undef => EXIT_CATCH_ALL' ) ;\n\n        is( $EXIT_CATCH_ALL, exit_value( $mysync, 'Blabla_unknown' ),  'exit_value: Blabla => EXIT_CATCH_ALL' ) ;\n        is( $EXIT_CATCH_ALL, exit_value( $mysync, '' ),                'exit_value: empty  => EXIT_CATCH_ALL' ) ;\n\n\n        is( $EXIT_OVERQUOTA,         exit_value( $mysync, 'ERR_OVERQUOTA' ),         'exit_value: ERR_OVERQUOTA => EXIT_OVERQUOTA' ) ;\n        is( $EXIT_TRANSFER_EXCEEDED, exit_value( $mysync, 'ERR_TRANSFER_EXCEEDED' ), 'exit_value: ERR_TRANSFER_EXCEEDED => EXIT_TRANSFER_EXCEEDED' ) ;\n\n        note( 'Leaving  tests_exit_value()' ) ;\n        return ;\n}\n\nsub exit_value\n{\n        my $mysync = shift @ARG ;\n        my $most_common_error = shift @ARG ;\n\n        if ( ! defined $most_common_error ) { return $EXIT_CATCH_ALL ; }\n        my $exit_value = $EXIT_VALUE_OF_ERR_TYPE{ $most_common_error } || $EXIT_CATCH_ALL ;\n\n        return $exit_value ;\n}\n\n\n\nsub exit_most_errors\n{\n        my $mysync = shift @ARG ;\n\n        myprint( errors_listing( $mysync ) ) ;\n        my $exit_value = exit_value( $mysync, $mysync->{ most_common_error } ) ;\n        exit_clean( $mysync, $exit_value ) ;\n        return ;\n}\n\nsub exit_clean\n{\n        my $mysync = shift @ARG ;\n        my $status = shift @ARG ;\n        my @messages = @ARG ;\n        if ( @messages )\n        {\n                myprint( @messages ) ;\n        }\n        myprint( \"Exiting with return value $status ($EXIT_TXT{$status}) $mysync->{nb_errors}/$mysync->{errorsmax} nb_errors/max_errors PID $PROCESS_ID\\n\" ) ;\n        cleanup_before_exit( $mysync ) ;\n\n        exit $status ;\n}\n\nsub missing_option\n{\n        my $mysync = shift ;\n        my $option  = shift ;\n        $mysync->{nb_errors}++ ;\n        exit_clean( $mysync, $EX_USAGE, \"$option option is mandatory, for help run $PROGRAM_NAME --help\\n\" ) ;\n        return ;\n}\n\n\nsub catch_ignore\n{\n        my $mysync = shift ;\n        my $signame = shift ;\n\n        my $sigcounter = ++$mysync->{ sigcounter }{ $signame } ;\n        myprint( \"\\nGot a signal $signame (my PID is $PROCESS_ID my PPID is \", getppid(  ),\n                 \"). Received $sigcounter $signame signals so far. Thanks!\\n\" ) ;\n        do_and_print_stats( $mysync ) ;\n        return ;\n}\n\n\n\nsub catch_exit\n{\n        my $mysync = shift ;\n        my $signame = shift || q{} ;\n        if ( $signame ) {\n                myprint( \"\\nGot a signal $signame (my PID is $PROCESS_ID my PPID is \", getppid(  ),\n                         \"). Asked to terminate\\n\" ) ;\n                if ( $mysync->{can_do_stats} ) {\n                        do_and_print_stats( $mysync ) ;\n                        myprint( \"Ended by a signal $signame (my PID is $PROCESS_ID my PPID is \",\n                        getppid(  ), \"). I am asked to terminate immediately.\\n\" ) ;\n                }\n                myprint( \"You should resynchronize those accounts by running a sync again,\\n\",\n                         \"since some messages and entire folders might still be missing on host2.\\n\"\n                ) ;\n                ## no critic (RequireLocalizedPunctuationVars)\n                # Well, restore default action does not work well\n                $SIG{ $signame }  = 'DEFAULT'; # restore default action\n                #$SIG{ 'TERM' }    = 'DEFAULT'; # restore default action\n                # kill myself with $signame\n                # https://www.cons.org/cracauer/sigint.html\n                myprint( \"Killing myself with signal $signame\\n\" ) ;\n                #cleanup_before_exit( $mysync ) ;\n                kill( $signame, $PROCESS_ID ) ;\n                #kill( 'TERM', $PROCESS_ID ) ;\n                #sleep 1 ;\n                #while ( 1 ) {  } ;\n                $mysync->{nb_errors}++ ;\n                exit_clean( $mysync, $EXIT_BY_SIGNAL,\n                        \"Still there after killing myself with signal $signame...\\n\"\n                ) ;\n        }\n        else\n        {\n                $mysync->{nb_errors}++ ;\n                exit_clean( $mysync, $EXIT_BY_SIGNAL, \"Exiting in catch_exit with no signal...\\n\" ) ;\n        }\n        return ;\n}\n\n\nsub catch_print\n{\n        my $mysync = shift ;\n        my $signame = shift ;\n\n        my $sigcounter = ++$mysync->{ sigcounter }{ $signame } ;\n        myprint( \"\\nGot a signal $signame (my PID is $PROCESS_ID my PPID is \", getppid(  ),\n                 \"). Received $sigcounter $signame signals so far. Thanks!\\n\" ) ;\n        return ;\n}\n\nsub here_twice\n{\n        my $mysync = shift ;\n        my $now = time ;\n        my $previous = $mysync->{lastcatch} || 0 ;\n        $mysync->{lastcatch} = $now ;\n\n        if ( $INTERVAL_TO_EXIT >= $now - $previous ) {\n                return $TRUE ;\n        }else{\n                return $FALSE ;\n        }\n}\n\n\nsub catch_reconnect\n{\n        my $mysync = shift ;\n        my $signame = shift ;\n        if ( here_twice( $mysync ) ) {\n                myprint( \"Got two signals $signame within $INTERVAL_TO_EXIT seconds. Exiting...\\n\" ) ;\n                catch_exit( $mysync, $signame ) ;\n        }else{\n                myprint( \"\\nGot a signal $signame (my PID is $PROCESS_ID my PPID is \", getppid(  ), \")\\n\",\n                        \"Hit 2 ctr-c within 2 seconds to exit the program\\n\",\n                        \"Hit only 1 ctr-c to reconnect to both imap servers\\n\",\n                ) ;\n                myprint( \"For now only one signal $signame within $INTERVAL_TO_EXIT seconds.\\n\" ) ;\n\n                if ( ! defined $mysync->{imap1} ) { return ; }\n                if ( ! defined $mysync->{imap2} ) { return ; }\n\n                myprint( \"Info: reconnecting to host1 imap server $mysync->{host1}\\n\" ) ;\n                $mysync->{imap1}->State( Mail::IMAPClient::Unconnected ) ;\n                $mysync->{imap1}->{IMAPSYNC_RECONNECT_COUNT} += 1 ;\n                if ( $mysync->{imap1}->reconnect(  ) )\n                {\n                        myprint( \"Info: reconnected to host1 imap server $mysync->{host1}\\n\" ) ;\n                }\n                else\n                {\n                        $mysync->{nb_errors}++ ;\n                        exit_clean( $mysync, $EXIT_CONNECTION_FAILURE ) ;\n                }\n                myprint( \"Info: reconnecting to host2 imap server\\n\" ) ;\n                $mysync->{imap2}->State( Mail::IMAPClient::Unconnected ) ;\n                $mysync->{imap2}->{IMAPSYNC_RECONNECT_COUNT} += 1 ;\n                if ( $mysync->{imap2}->reconnect(  ) )\n                {\n                        myprint( \"Info: reconnected to host2 imap server $mysync->{host2}\\n\" ) ;\n                }\n                else\n                {\n                        $mysync->{nb_errors}++ ;\n                        exit_clean( $mysync, $EXIT_CONNECTION_FAILURE ) ;\n                }\n                myprint( \"Info: reconnected to both imap servers\\n\" ) ;\n        }\n        return ;\n}\n\nsub install_signals\n{\n        my $mysync = shift ;\n\n        if ( under_docker_context( $mysync ) )\n        {\n                # output( $mysync, \"Under docker context so leaving signals as they are\\n\" ) ;\n                output( $mysync, \"Under docker context so installing only signals to exit\\n\" ) ;\n                @{ $mysync->{ sigexit } } = ( defined( $mysync->{ sigexit } ) ) ? @{ $mysync->{ sigexit } } : ( 'INT', 'QUIT', 'TERM' ) ;\n                sig_install( $mysync, 'catch_exit', @{ $mysync->{ sigexit } } ) ;\n        }\n        else\n        {\n                # Unix signals\n                @{ $mysync->{ sigexit } }      = ( defined( $mysync->{ sigexit } ) )      ? @{ $mysync->{ sigexit } }      : ( 'QUIT', 'TERM' ) ;\n                @{ $mysync->{ sigreconnect } } = ( defined( $mysync->{ sigreconnect } ) ) ? @{ $mysync->{ sigreconnect } } : ( 'INT' ) ;\n                @{ $mysync->{ sigprint } }     = ( defined( $mysync->{ sigprint } ) )     ? @{ $mysync->{ sigprint } }     : ( 'HUP' ) ;\n                @{ $mysync->{ sigignore } }    = ( defined( $mysync->{ sigignore } ) )    ? @{ $mysync->{ sigignore } }    : ( ) ;\n\n                #local %SIG = %SIG ;\n                sig_install( $mysync, 'catch_exit',      @{ $mysync->{ sigexit      } } ) ;\n                sig_install( $mysync, 'catch_reconnect', @{ $mysync->{ sigreconnect } } ) ;\n                sig_install( $mysync, 'catch_print',     @{ $mysync->{ sigprint     } } ) ;\n                # --sigignore can override sigexit, sigreconnect and sigprint (for the same signals only)\n                sig_install( $mysync, 'catch_ignore',    @{ $mysync->{ sigignore }  } ) ;\n\n                # remove/add sleeping mechanism when receiving USR1 signal (except on Win32)\n                sig_install_toggle_sleep( $mysync ) ;\n        }\n\n        return ;\n}\n\n\n\nsub tests_reconnect_12_if_needed\n{\n\tnote( 'Entering tests_reconnect_12_if_needed()' ) ;\n\n\tmy $mysync ;\n\n\t$mysync->{imap1} = Mail::IMAPClient->new(  ) ;\n\t$mysync->{imap2} = Mail::IMAPClient->new(  ) ;\n\t$mysync->{imap1}->Server( 'test1.lamiral.info' ) ;\n\t$mysync->{imap2}->Server( 'test2.lamiral.info' ) ;\n\tis( 2, reconnect_12_if_needed( $mysync ), 'reconnect_12_if_needed: test1&test2 .lamiral.info => 1' ) ;\n\tis( 1, $mysync->{imap1}->{IMAPSYNC_RECONNECT_COUNT}, 'reconnect_12_if_needed: test1.lamiral.info IMAPSYNC_RECONNECT_COUNT => 1' ) ;\n\tis( 1, $mysync->{imap2}->{IMAPSYNC_RECONNECT_COUNT}, 'reconnect_12_if_needed: test2.lamiral.info IMAPSYNC_RECONNECT_COUNT => 1' ) ;\n\n\tnote( 'Leaving  tests_reconnect_12_if_needed()' ) ;\n\treturn ;\n}\n\nsub reconnect_12_if_needed\n{\n        my $mysync = shift ;\n\t#return 2 ;\n\tif ( ! reconnect_if_needed( $mysync->{imap1} ) ) {\n\t\treturn ;\n\t}\n\tif ( ! reconnect_if_needed( $mysync->{imap2} ) ) {\n\t\treturn ;\n\t}\n\t# both were good\n\treturn 2 ;\n}\n\n\nsub tests_reconnect_if_needed\n{\n\tnote( 'Entering tests_reconnect_if_needed()' ) ;\n\n\n\tmy $myimap ;\n\n\tis( undef, reconnect_if_needed( ), 'reconnect_if_needed: no args => undef' ) ;\n\tis( undef, reconnect_if_needed( $myimap ), 'reconnect_if_needed: undef arg => undef' ) ;\n\n\t$myimap = Mail::IMAPClient->new(  ) ;\n        $myimap->Debug( 1 ) ;\n\tis( undef, reconnect_if_needed( $myimap ), 'reconnect_if_needed: empty new Mail::IMAPClient => undef' ) ;\n\t$myimap->Server( 'test.lamiral.info' ) ;\n\tis( 1, reconnect_if_needed( $myimap ), 'reconnect_if_needed: test.lamiral.info => 1' ) ;\n\tis( 1, $myimap->{IMAPSYNC_RECONNECT_COUNT}, 'reconnect_if_needed: test.lamiral.info IMAPSYNC_RECONNECT_COUNT => 1' ) ;\n\n\tnote( 'Leaving  tests_reconnect_if_needed()' ) ;\n\treturn ;\n}\n\nsub reconnect_if_needed\n{\n\t# return undef upon failure.\n\t# return 1 upon connection success, with or without reconnection.\n\n        my $imap = shift ;\n\n\tif ( ! defined $imap ) { return ; }\n\tif ( ! $imap->Server(  ) ) { return ; }\n\n\tif ( $imap->IsUnconnected(  ) ) {\n\t\t$imap->{IMAPSYNC_RECONNECT_COUNT} += 1 ;\n\t\tif ( $imap->reconnect( ) )  {\n\t\t\treturn 1 ;\n\t\t}\n\t}else{\n\t\treturn 1 ;\n\t}\n\n\t# A last forced one\n\t$imap->State( Mail::IMAPClient::Unconnected ) ;\n\t$imap->reconnect(  ) ;\n\t$imap->{IMAPSYNC_RECONNECT_COUNT} += 1 ;\n\tif ( $imap->noop ) {\n\t\t# NOOP is ok\n\t\treturn 1 ;\n\t}\n\n\treturn ;\n}\n\n\nsub justconnect\n{\n        my $mysync = shift ;\n        my $justconnect1 = justconnect1( $sync ) ;\n        my $justconnect2 = justconnect2( $sync ) ;\n        return \"$justconnect1 $justconnect2\";\n}\n\nsub justconnect1\n{\n        my $mysync = shift ;\n        if ( $mysync->{host1} )\n        {\n                myprint( \"Host1: Will just connect to $mysync->{host1} without login\\n\" ) ;\n                $mysync->{imap1} = connect_imap(\n                        $mysync->{host1}, $mysync->{port1},\n                        $mysync->{ssl1}, $mysync->{tls1},\n                        $mysync->{ acc1 } ) ;\n\n                imap_id( $mysync, $mysync->{imap1}, $mysync->{ acc1 }->{ Side } ) ;\n                $mysync->{imap1}->logout(  ) ;\n                return $mysync->{host1} ;\n        }\n\n        return q{} ;\n}\n\nsub justconnect2\n{\n        my $mysync = shift ;\n        if ( $mysync->{host2} )\n        {\n                myprint( \"Host2: Will just connect to $mysync->{host2} without login\\n\" ) ;\n                $mysync->{imap2} = connect_imap(\n                        $mysync->{host2}, $mysync->{port2},\n                        $mysync->{ssl2}, $mysync->{tls2},\n                        $mysync->{ acc2 } ) ;\n\n                imap_id( $mysync, $mysync->{imap2}, $mysync->{ acc2 }->{ Side } ) ;\n                $mysync->{imap2}->logout(  ) ;\n                return $mysync->{host2} ;\n        }\n\n        return q{} ;\n}\n\nsub skip_macosx\n{\n        #return ;\n        # hostname is sometimes \"macosx.polarhome.com\" sometimes \"macosx\"\n        return( ( ( 'macosx.polarhome.com' eq hostname(  ) ) || ( 'macosx' eq hostname(  ) ) )\n                && ( 'darwin' eq $OSNAME ) ) ;\n}\n\nsub skip_macosx_binary\n{\n        #return ;\n        return( skip_macosx(  ) && ( $PROGRAM_NAME =~ m{imapsync_bin_Darwin} ) ) ;\n}\n\n\n\nsub tests_mailimapclient_connect\n{\n        note( 'Entering tests_mailimapclient_connect()' ) ;\n\n        my $imap ;\n        # ipv4\n        ok( $imap = Mail::IMAPClient->new(  ), 'mailimapclient_connect ipv4: new' ) ;\n        is( 'Mail::IMAPClient', ref( $imap ), 'mailimapclient_connect ipv4: ref is Mail::IMAPClient' ) ;\n\n        # Mail::IMAPClient 3.40 die on this... So we skip it, thanks to \"mature\" IO::Socket::IP\n        # Mail::IMAPClient 3.42 is ok so this test is back.\n        is( undef, $imap->connect(  ), 'mailimapclient_connect ipv4: connect with no server => failure' ) ;\n\n\n        is( 'test.lamiral.info', $imap->Server( 'test.lamiral.info' ), 'mailimapclient_connect ipv4: setting Server(test.lamiral.info)' ) ;\n        is( 1, $imap->Debug( 1 ), 'mailimapclient_connect ipv4: setting Debug( 1 )' ) ;\n        is( 143, $imap->Port( 143 ), 'mailimapclient_connect ipv4: setting Port( 143 )' ) ;\n        is( 10, $imap->Timeout( 10 ), 'mailimapclient_connect ipv4: setting Timeout( 10 )' ) ;\n        like( ref( $imap->connect(  ) ), qr/IO::Socket::INET|IO::Socket::IP/, 'mailimapclient_connect ipv4: connect to test.lamiral.info' ) ;\n        like( $imap->logout( ), qr/Mail::IMAPClient/, 'mailimapclient_connect ipv4: logout' ) ;\n        is( undef, undef $imap, 'mailimapclient_connect ipv4: free variable' ) ;\n\n        # ipv4 + ssl\n        ok( $imap = Mail::IMAPClient->new(  ), 'mailimapclient_connect ipv4 + ssl: new' ) ;\n        is( 'test.lamiral.info', $imap->Server( 'test.lamiral.info' ), 'mailimapclient_connect ipv4 + ssl: setting Server(test.lamiral.info)' ) ;\n        is( 1, $imap->Debug( 1 ), 'mailimapclient_connect ipv4 + ssl: setting Debug( 1 )' ) ;\n        ok( $imap->Ssl( [ SSL_verify_mode => SSL_VERIFY_NONE, SSL_cipher_list => 'DEFAULT:!DH' ] ), 'mailimapclient_connect ipv4 + ssl: setting Ssl( SSL_VERIFY_NONE )' ) ;\n        is( 993, $imap->Port( 993 ), 'mailimapclient_connect ipv4 + ssl: setting Port( 993 )' ) ;\n        like( ref( $imap->connect(  ) ), qr/IO::Socket::SSL/, 'mailimapclient_connect ipv4 + ssl: connect to test.lamiral.info' ) ;\n        like( $imap->logout( ), qr/Mail::IMAPClient/, 'mailimapclient_connect ipv4 + ssl: logout in ssl does not cause failure' ) ;\n        is( undef, undef $imap, 'mailimapclient_connect ipv4 + ssl: free variable' ) ;\n\n        # ipv6 + ssl\n\n        ok( $imap = Mail::IMAPClient->new(  ), 'mailimapclient_connect ipv6 + ssl: new' ) ;\n        is( 'petiteipv6.lamiral.info', $imap->Server( 'petiteipv6.lamiral.info' ), 'mailimapclient_connect ipv6 + ssl: setting Server petiteipv6.lamiral.info' ) ;\n        is( 10, $imap->Timeout( 10 ), 'mailimapclient_connect ipv6: setting Timeout( 10 )' ) ;\n        ok( $imap->Ssl( [ SSL_verify_mode => SSL_VERIFY_NONE, SSL_cipher_list => 'DEFAULT:!DH' ] ), 'mailimapclient_connect ipv6 + ssl: setting Ssl( SSL_VERIFY_NONE )' ) ;\n        is( 993, $imap->Port( 993 ), 'mailimapclient_connect ipv6 + ssl: setting Port( 993 )' ) ;\n        SKIP: {\n        if (\n                'CUILLERE' eq hostname()\n                or\n                skip_macosx()\n                or\n                -e '/.dockerenv'\n                or\n                'pcHPDV7-HP' eq hostname()\n                )\n        {\n                skip( 'Tests avoided on CUILLERE/pcHPDV7-HP/macosx.polarhome.com/docker cannot do ipv6', 4 ) ;\n        }\n\n        is( 1, $imap->Debug( 1 ), 'mailimapclient_connect ipv4 + ssl: setting Debug( 1 )' ) ;\n\n        # It sounds stupid but it avoids failures on the next test about $imap->connect\n        is( '2a01:e34:ecde:70d0:223:54ff:fec2:36d7', resolv( 'petiteipv6.lamiral.info' ), 'resolv: petiteipv6.lamiral.info => 2a01:e34:ecde:70d0:223:54ff:fec2:36d7' ) ;\n\n        like( ref( $imap->connect(  ) ), qr/IO::Socket::SSL/, 'mailimapclient_connect ipv6 + ssl: connect to petiteipv6.lamiral.info' ) ;\n        # This one is ok on petite, not on ks2, do not know why, so commented.\n        like( ref( $imap->logout(  ) ), qr/Mail::IMAPClient/, 'mailimapclient_connect ipv6 + ssl: logout in ssl is ok on petiteipv6.lamiral.info' ) ;\n        }\n\n        is( undef, undef $imap, 'mailimapclient_connect ipv6 + ssl: free variable' ) ;\n\n\n        note( 'Leaving  tests_mailimapclient_connect()' ) ;\n        return ;\n}\n\n\nsub tests_mailimapclient_connect_bug\n{\n        note( 'Entering tests_mailimapclient_connect_bug()' ) ;\n\n        my $imap ;\n\n        # ipv6\n        ok( $imap = Mail::IMAPClient->new(  ), 'mailimapclient_connect_bug ipv6: new' ) ;\n        is( 'ks6ipv6.lamiral.info', $imap->Server( 'ks6ipv6.lamiral.info' ), 'mailimapclient_connect_bug ipv6: setting Server(ks6ipv6.lamiral.info)' ) ;\n        is( 143, $imap->Port( 143 ), 'mailimapclient_connect_bug ipv6: setting Port( 993 )' ) ;\n\n        SKIP: {\n                if (\n                        'CUILLERE' eq hostname()\n                or\n                        skip_macosx()\n                or\n                        -e '/.dockerenv'\n                or\n                'pcHPDV7-HP' eq hostname()\n                )\n                {\n                        skip( 'Tests avoided on CUILLERE/pcHPDV7-HP/macosx.polarhome.com/docker cannot do ipv6', 1 ) ;\n                }\n                like( ref( $imap->connect(  ) ), qr/IO::Socket::INET/, 'mailimapclient_connect_bug ipv6: connect to ks6ipv6.lamiral.info' )\n                or diag( 'mailimapclient_connect_bug ipv6: ', $imap->LastError(  ), $!,  ) ;\n        }\n        #is( $imap->logout( ), undef, 'mailimapclient_connect_bug ipv6: logout in ssl causes failure' ) ;\n        is( undef, undef $imap, 'mailimapclient_connect_bug ipv6: free variable' ) ;\n\n        note( 'Leaving  tests_mailimapclient_connect_bug()' ) ;\n        return ;\n}\n\n\n\nsub tests_connect_socket\n{\n        note( 'Entering tests_connect_socket()' ) ;\n\n\tis( undef, connect_socket(  ), 'connect_socket: no args' ) ;\n\n        my $socket ;\n        my $imap ;\n        SKIP: {\n                if (\n                        'CUILLERE' eq hostname()\n                or\n                        skip_macosx()\n                or\n                        -e '/.dockerenv'\n                or\n                        'pcHPDV7-HP' eq hostname()\n                )\n                {\n                        skip( 'Tests avoided on CUILLERE/pcHPDV7-HP/macosx.polarhome.com/docker cannot do ipv6', 2 ) ;\n                }\n\n                $socket = IO::Socket::INET6->new(\n                        PeerAddr => 'ks6ipv6.lamiral.info',\n                        PeerPort => 143,\n                ) ;\n\n\n                ok( $imap = connect_socket( $socket ), 'connect_socket: ks6ipv6.lamiral.info port 143 IO::Socket::INET6' ) ;\n                #$imap->Debug( 1 ) ;\n                # myprint( $imap->capability(  ) ) ;\n                if ( $imap ) {\n                        $imap->logout(  ) ;\n                }\n\n                $IO::Socket::SSL::DEBUG = 4 ;\n                $socket = IO::Socket::SSL->new(\n                        PeerHost => 'ks6ipv6.lamiral.info',\n                        PeerPort => 993,\n                        SSL_verify_mode => SSL_VERIFY_NONE,\n                        SSL_cipher_list => 'DEFAULT:!DH',\n                ) ;\n                # myprint( $socket ) ;\n                ok( $imap = connect_socket( $socket ), 'connect_socket: ks6ipv6.lamiral.info port 993 IO::Socket::SSL' ) ;\n                #$imap->Debug( 1 ) ;\n                # myprint( $imap->capability(  ) ) ;\n                # $socket->close(  ) ;\n                if ( $imap ) {\n                        $socket->close(  ) ;\n                }\n                #$socket->close(SSL_no_shutdown => 1) ;\n                #$imap->logout(  ) ;\n                #myprint( \"\\n\" ) ;\n                #$imap->logout(  ) ;\n        }\n        note( 'Leaving  tests_connect_socket()' ) ;\n        return ;\n}\n\nsub connect_socket\n{\n\tmy( $socket ) = @ARG ;\n\n\tif ( ! defined $socket ) { return ; }\n\n\tmy $host = $socket->peerhost(  ) ;\n\tmy $port = $socket->peerport(  ) ;\n\t#print \"socket->peerhost: \", $socket->peerhost(  ), \"\\n\" ;\n\t#print \"socket->peerport: \", $socket->peerport(  ), \"\\n\" ;\n\tmy $imap = Mail::IMAPClient->new(  ) ;\n\t$imap->Socket( $socket ) ;\n\tmy $banner = $imap->Results()->[0] ;\n\t#myprint( \"banner: $banner\"  ) ;\n\treturn $imap ;\n}\n\n\nsub tests_probe_imapssl\n{\n        note( 'Entering tests_probe_imapssl()' ) ;\n\n        is( undef, probe_imapssl(  ),          'probe_imapssl: no args => undef' ) ;\n        is( undef, probe_imapssl( 'unknown' ), 'probe_imapssl: unknown => undef' ) ;\n\n        note( \"hostname is: \", hostname() ) ;\n        SKIP: {\n                if (\n                        'CUILLERE' eq hostname()\n                or\n                        skip_macosx()\n                or\n                        -e '/.dockerenv'\n                or\n                        'pcHPDV7-HP' eq hostname()\n                )\n                {\n                        skip( 'Tests avoided on CUILLERE or pcHPDV7-HP or Mac or docker: cannot do ipv6', 0 ) ;\n                }\n                # fed up with this one\n                #like( probe_imapssl( 'ks6ipv6.lamiral.info' ), qr/^\\* OK/, 'probe_imapssl: ks6ipv6.lamiral.info matches \"* OK\"' ) ;\n        } ;\n\n\n        # It sounds stupid but it avoids failures on the next test about $imap->connect\n        ok( resolv( 'imap.gmail.com' ), 'resolv: imap.gmail.com => something' ) ;\n        like( probe_imapssl( 'imap.gmail.com' ),       qr/^\\* OK/, 'probe_imapssl: imap.gmail.com matches \"* OK\"' ) ;\n\n        like( probe_imapssl( 'test1.lamiral.info' ),   qr/^\\* OK/, 'probe_imapssl: test1.lamiral.info matches \"* OK\"' ) ;\n\n        note( 'Leaving  tests_probe_imapssl()' ) ;\n        return ;\n}\n\n\nsub probe_imapssl\n{\n        my $host = shift ;\n\n        if ( ! $host ) { return ; }\n        $sync->{ debug } and $IO::Socket::SSL::DEBUG = 4 ;\n  \tmy $socket = IO::Socket::SSL->new(\n\t\tPeerHost => $host,\n\t\tPeerPort => $IMAP_SSL_PORT,\n                SSL_verifycn_scheme => 'imap',\n                SSL_verify_mode => $SSL_VERIFY_POLICY,\n                SSL_cipher_list => 'DEFAULT:!DH',\n\t) ;\n        if ( ! $socket ) { return ; }\n        $sync->{ debug } and print \"socket: $socket\\n\" ;\n\n        my $banner ;\n        $socket->sysread( $banner, 65_536 ) ;\n        $sync->{ debug } and print \"banner: $banner\" ;\n        $socket->close(  ) ;\n        return $banner ;\n\n}\n\nsub connect_imap\n{\n        my( $host, $port, $ssl, $tls, $acc ) = @_ ;\n        my $imap = Mail::IMAPClient->new(  ) ;\n\n        if ( $ssl ) { set_ssl( $imap, $acc ) }\n        $imap->Server( $host ) ;\n        $imap->Port( $port ) ;\n        $imap->Debug( $acc->{ debugimap } ) ;\n        $imap->Timeout( $acc->{ timeout } ) ;\n\n        #$imap->Keepalive( $acc->{ keepalive } ) ;\n\n\n        my $side = lc $acc->{ Side } ;\n\n        myprint( \"$acc->{ Side }: connecting on $side [$host] port [$port]\\n\"  ) ;\n\n        if ( ! $imap->connect(  ) )\n        {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EXIT_CONNECTION_FAILURE,\n                        \"$acc->{ Side }: Can not open imap connection on [$host]: \",\n                        $imap->LastError,\n                        \" $OS_ERROR\\n\"\n                ) ;\n        }\n        myprint( \"$acc->{ Side } IP address: \", $imap->Socket->peerhost(), \"\\n\"  ) ;\n\n        my $banner = $imap->Results()->[0] ;\n\n        myprint( \"$acc->{ Side } banner: $banner\"  ) ;\n        myprint( \"$acc->{ Side } capability: \", join(q{ }, @{ $imap->capability() || [] }), \"\\n\" ) ;\n\n        if ( $tls ) {\n                set_tls( $imap, $acc ) ;\n                if ( ! $imap->starttls(  ) )\n                {\n                        $sync->{nb_errors}++ ;\n                        exit_clean( $sync, $EXIT_TLS_FAILURE,\n                                \"$acc->{ Side }: Can not go to tls encryption on $side [$host]:\",\n                                $imap->LastError, \"\\n\"\n                        ) ;\n                }\n                myprint( \"$acc->{ Side }: Socket successfully converted to SSL\\n\"  ) ;\n        }\n        return( $imap ) ;\n}\n\nsub tests_compress_ssl\n{\n        note( 'Entering tests_compress_ssl()' ) ;\n\n        SKIP: {\n        if ( skip_macosx(  ) )\n        {\n                skip( 'Tests avoided on host polarhome macosx, no clue \"ssl3_get_server_certificate:certificate verify failed\"', 12 ) ;\n        }\n        else\n        {\n        my $myimap ;\n        my $acc = {} ;\n        $acc->{ Side }      =  'HostK' ;\n        $acc->{ authmech }  = 'LOGIN' ;\n        $acc->{ debugimap } = 1 ;\n        $acc->{ compress }  = 1 ;\n        $acc->{ N }  = 'K' ;\n\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 993, 'test1', 'secret1',\n                1, undef,\n                1, 100, $acc, {},\n                ),  'acc_compress_imap: test1.lamiral.info test1 ssl' ) ;\n        ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'acc_compress_imap: test1.lamiral.info test1 ssl IsAuthenticated' ) ;\n\n\n        is( $acc->{ imap }, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info ok\" ) ;\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info 2nd nok\" ) ;\n\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 143, 'test1', 'secret1',\n                0, undef,\n                1, 100, $acc, {},\n                ),  'acc_compress_imap: test1.lamiral.info test1 tls' ) ;\n        ok( $myimap && $myimap->IsAuthenticated( ), 'acc_compress_imap: test1.lamiral.info test1 tls IsAuthenticated' ) ;\n\n        is( $acc->{ imap }, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info tls ok\" ) ;\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info tls 2nd nok\" ) ;\n\n        # Third, no compression\n        $acc->{ compress }  = 0 ;\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 993, 'test1', 'secret1',\n                1, undef,\n                1, 100, $acc, {},\n                ),  'acc_compress_imap: test1.lamiral.info test1 ssl' ) ;\n        ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'acc_compress_imap: test1.lamiral.info test1 ssl IsAuthenticated' ) ;\n\n\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info off ok\" ) ;\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info 2nd off ok\" ) ;\n\n        }\n        }\n        note( 'Leaving  tests_compress_ssl()' ) ;\n        return ;\n}\n\nsub tests_compress\n{\n        note( 'Entering tests_compress()' ) ;\n\n        my $myimap ;\n        my $acc = {} ;\n        $acc->{ Side }      =  'HostK' ;\n        $acc->{ authmech }  = 'LOGIN' ;\n        $acc->{ debugimap } = 1 ;\n        $acc->{ compress }  = 1 ;\n        $acc->{ N }  = 'K' ;\n\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 143, 'test1', 'secret1',\n                0, 0,\n                1, 100, $acc, {},\n                ),  'acc_compress_imap: test1.lamiral.info test1' ) ;\n        ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'acc_compress_imap: test1.lamiral.info test1 IsAuthenticated' ) ;\n\n\n        is( $acc->{ imap }, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info ok\" ) ;\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info 2nd nok\" ) ;\n\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 143, 'test1', 'secret1',\n                0, 0,\n                1, 100, $acc, {},\n                ),  'acc_compress_imap: test1.lamiral.info test1 tls' ) ;\n        ok( $myimap && $myimap->IsAuthenticated( ), 'acc_compress_imap: test1.lamiral.info test1 tls IsAuthenticated' ) ;\n\n        is( $acc->{ imap }, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info tls ok\" ) ;\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info tls 2nd nok\" ) ;\n\n        # Third, no compression\n        $acc->{ compress }  = 0 ;\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 143, 'test1', 'secret1',\n                0, 0,\n                1, 100, $acc, {},\n                ),  'acc_compress_imap: test1.lamiral.info test1 ssl' ) ;\n        ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'acc_compress_imap: test1.lamiral.info test1 ssl IsAuthenticated' ) ;\n\n\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info off ok\" ) ;\n        is( undef, acc_compress_imap( $acc ), \"acc_compress_imap: test1.lamiral.info 2nd off ok\" ) ;\n\n        note( 'Leaving  tests_compress()' ) ;\n        return ;\n}\n\n\nsub acc_compress_imap\n{\n        my $acc = shift ;\n\n        if ( ! defined( $acc ) ) { return ; }\n\n        my $ret ;\n        my $imap = $acc->{ imap } ;\n        if ( ! defined $imap ) { return ; }\n\n        if ( $imap && $acc->{ compress } )\n        {\n                myprint( \"$acc->{ Side }: Trying to turn imap compression on. Use --nocompress\" . $acc->{ N } . \" to avoid compression on \" . lc( $acc->{ Side } ) . \"\\n\" ) ;\n                if ( $ret = $imap->compress() )\n                {\n                        myprint( \"$acc->{ Side }: Compression is on now\\n\" ) ;\n                }\n                else\n                {\n                        myprint( \"$acc->{ Side }: Failed to turn compression on\\n\" ) ;\n                }\n        }\n        else\n        {\n                myprint( \"$acc->{ Side }: Compression is off. Use --compress\" . $acc->{ N } . \" to allow compression on \" . lc( $acc->{ Side } ) . \"\\n\" ) ;\n        }\n        # $ret is $acc->{ imap } on success, undef on failure or when there is nothing to do.\n        return $ret ;\n}\n\nsub tests_login_imap\n{\n        note( 'Entering tests_login_imap()' ) ;\n\n        is( undef, login_imap(  ),  'login_imap: no args => undef' ) ;\n\n        SKIP: {\n        if ( skip_macosx(  ) )\n        {\n                skip( 'Tests avoided only on binary on host polarhome macosx, no clue \"ssl3_get_server_certificate:certificate verify failed\"', 15 ) ;\n        }\n        else{\n\n        my $myimap ;\n        my $acc = {} ;\n        $acc->{ Side }     =  'HostK' ;\n        $acc->{ authmech } = 'LOGIN' ;\n        #$IO::Socket::SSL::DEBUG = 4 ;\n        # Each month (trimester?):\n        # echo | openssl s_client -crlf -connect test1.lamiral.info:993\n        # ...\n        # certificate has expired\n        # Fix: ssh root@test1.lamiral.info 'apt update && apt upgrade && /etc/init.d/dovecot restart'\n        #\n        # or\n        # echo | openssl s_client -crlf -connect test1.lamiral.info:993\n        # ...\n        # Verify return code: 9 (certificate is not yet valid)\n        # Fix: /etc/init.d/openntpd restart\n        # 2021_09_04 done\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 993, 'test1', 'secret1',\n                1, undef,\n                1, 100, $acc, {},\n                ),  'login_imap: test1.lamiral.info test1 ssl' ) ;\n        ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'login_imap: test1.lamiral.info test1 ssl IsAuthenticated' ) ;\n\n        is( $myimap, $acc->{ imap }, \"login_imap: acc->{ imap } ok test1 ssl\") ;\n\n        ok(\n                $myimap = login_imap( 'test1.lamiral.info', 143, 'test1', 'secret1',\n                0, undef,\n                1, 100, $acc, {},\n                ),  'login_imap: test1.lamiral.info test1 tls' ) ;\n        ok( $myimap && $myimap->IsAuthenticated( ), 'login_imap: test1.lamiral.info test1 tls IsAuthenticated' ) ;\n        is( $myimap, $acc->{ imap }, \"login_imap: acc->{ imap } ok test1 tls\") ;\n\n        #$IO::Socket::SSL::DEBUG = 4 ;\n        $acc->{sslargs} = { SSL_version => 'SSLv2' } ;\n        # SSLv2 not supported\n        is(\n                undef, $myimap = login_imap( 'test1.lamiral.info', 143, 'test1', 'secret1',\n                0, undef,\n                1, 100, $acc, {},\n                ),  'login_imap: test1.lamiral.info test1 tls SSLv2 not supported' ) ;\n#SSL_verify_mode => 1\n#SSL_version => 'TLSv1_1'\n        is( undef, $acc->{ imap }, \"login_imap: acc->{ imap } test1 tls error => undef\") ;\n\n\n        # I have left ? exit_clean to be replaced by errors_incr( $mysync, 'error message' )\n        # 1 in login_imap()\n\n\n        my $mysync = {} ;\n        $acc = {} ;\n        $acc->{ Side } =  'Host2' ;\n        $acc->{ authmech } = 'LOGIN' ;\n        is(\n                undef, login_imap( 'noresol.lamiral.info', 143, 'test1', 'secret1',\n                0, undef,\n                1, 100, $acc,  $mysync,\n                ),  'login_imap: noresol.lamiral.info undef' ) ;\n\n        is( 'ERR_CONNECTION_FAILURE_HOST2', errorsanalyse( errors_log( $mysync ) ), 'login_imap: Host2 noresol.lamiral.info => ERR_CONNECTION_FAILURE_HOST2' ) ;\n        is( undef, $acc->{ imap }, \"login_imap: acc->{ imap } noresol error => undef\") ;\n\n        # authentication failure for user2\n        $mysync = {} ;\n        is(\n                undef, login_imap( 'test1.lamiral.info', 143, 'test1', 'Ce crÃ©tin',\n                0, undef,\n                1, 100, $acc,  $mysync,\n                ),  'login_imap: user2 bad passord => undef' ) ;\n\n        is( 'ERR_AUTHENTICATION_FAILURE_USER2', errorsanalyse( errors_log( $mysync ) ), 'login_imap: Host2 bad password => ERR_AUTHENTICATION_FAILURE_USER2' ) ;\n\n        # authentication failure for user1\n        $mysync = {} ;\n        $acc = {} ;\n        $acc->{ Side } =  'Host1' ;\n        $acc->{ authmech } = 'LOGIN' ;\n        is(\n                undef, login_imap( 'test1.lamiral.info', 143, 'test1', 'Ce crÃ©tin',\n                0, undef,\n                1, 100, $acc,  $mysync,\n                ),  'login_imap: user1 bad passord => undef' ) ;\n\n        is( 'ERR_AUTHENTICATION_FAILURE_USER1', errorsanalyse( errors_log( $mysync ) ), 'login_imap: Host1 bad password => ERR_AUTHENTICATION_FAILURE_USER1' ) ;\n\n        }\n        }\n\n        note( 'Leaving  tests_login_imap()' ) ;\n        return ;\n}\n\nsub oauthgenerateaccess\n{\n        if ( \"petite\" eq hostname() )\n        {\n                myprint( \"oauthgenerateaccess\\n\" ) ;\n                my @output = backtick( 'cd oauth2 && pwd && ./generate_gmail_token imapsync.gl0@gmail.com' ) ;\n                myprint( @output ) ;\n        }\n        return ;\n}\n\nsub tests_login_imap_oauth\n{\n        note( 'Entering tests_login_imap_oauth()' ) ;\n\n        oauthgenerateaccess() ;\n\n        SKIP: {\n        if ( skip_macosx_binary(  ) )\n        {\n                skip( 'Tests avoided only on binary on host polarhome macosx, no clue \"ssl3_get_server_certificate:certificate verify failed\"', 6 ) ;\n        }\n        else\n        {\n\n        my $mysync ;\n        my $acc ;\n        # oauthdirect authentication failure for user2\n        $mysync = {} ;\n        $acc  = {} ;\n        $acc->{ oauthdirect } = 'caca2' ;\n        $acc->{ debugimap } = 1 ;\n        $mysync->{ showpasswords } = 1 ;\n        $acc->{ Side } =  'Host2' ;\n        $acc->{ authmech } = 'QQQ' ;\n        is(\n                undef, login_imap( 'imap.gmail.com', 993, 'test1', 'Ce crÃ©tin',\n                1, undef,\n                1, 100, $acc,  $mysync,\n                ),  'login_imap: user2 bad oauthdirect => undef' ) ;\n\n        is( 'ERR_AUTHENTICATION_FAILURE_USER2', errorsanalyse( errors_log( $mysync ) ), 'login_imap: Host2 bad oauthdirect => ERR_AUTHENTICATION_FAILURE_USER2' ) ;\n\n        # oauthdirect authentication failure for user1\n        $mysync = {} ;\n        $acc  = {} ;\n        $acc->{ Side } =  'Host1' ;\n        $acc->{ oauthdirect } = 'caca1' ;\n        $acc->{ debugimap } = 1 ;\n        $mysync->{ showpasswords } = 1 ;\n        $acc->{ authmech } = 'QQQ' ;\n        is(\n                undef, login_imap( 'imap.gmail.com', 993, 'test1', 'Ce crÃ©tin',\n                1, undef,\n                1, 100, $acc,  $mysync,\n                ),  'login_imap: user1 bad oauthdirect => undef' ) ;\n\n        is( 'ERR_AUTHENTICATION_FAILURE_USER1', errorsanalyse( errors_log( $mysync ) ), 'login_imap: Host1 bad oauthdirect => ERR_AUTHENTICATION_FAILURE_USER1' ) ;\n\n        # oauthdirect authentication failure for user1\n        $mysync = {} ;\n        $acc  = {} ;\n        $acc->{ Side } =  'Host1' ;\n        $acc->{ oauthdirect } = '' ;\n        $acc->{ debugimap } = 1 ;\n        $mysync->{ showpasswords } = 1 ;\n        $acc->{ authmech } = 'QQQ' ;\n        is(\n                undef, login_imap( 'imap.gmail.com', 993, 'test1', 'Ce crÃ©tin',\n                1, undef,\n                1, 100, $acc,  $mysync,\n                ),  'login_imap: user1 bad oauthdirect => undef' ) ;\n\n        is( 'ERR_AUTHENTICATION_FAILURE_USER1', errorsanalyse( errors_log( $mysync ) ), 'login_imap: Host1 no oauthdirect value => ERR_AUTHENTICATION_FAILURE_USER1' ) ;\n\n        }\n        }\n\n        # oauthdirect authentication success for user1\n        SKIP: {\n                if ( ! -r 'oauth2/D_oauth2_oauthdirect_imapsync.gl0@gmail.com.txt' )\n                {\n                        skip( 'oauthdirect: no oauthdirect file', 6  ) ;\n                }\n                my $myimap ;\n                my $mysync = {} ;\n                my $acc  = {} ;\n                $acc->{ Side } =  'Host1' ;\n                $acc->{ oauthdirect } = 'oauth2/D_oauth2_oauthdirect_imapsync.gl0@gmail.com.txt' ;\n                $acc->{ debugimap } = 1 ;\n                $mysync->{ showpasswords } = 1 ;\n                $acc->{ authmech } = 'QQQ' ;\n                isa_ok(\n                        $myimap = login_imap( 'imap.gmail.com', 993, 'user_useless', 'password_useless',\n                        1, undef,\n                        1, 100, $acc,  $mysync,\n                        ), 'Mail::IMAPClient', 'login_imap: user1 good oauthdirect => Mail::IMAPClient' ) ;\n\n                ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'login_imap: gmail oauth2 oauthdirect IsAuthenticated' ) ;\n\n                ok( defined( $myimap ) && $myimap->logout( ), 'login_imap: gmail oauth2 oauthdirect logout' ) ;\n                ok( defined( $myimap ) && ! $myimap->IsAuthenticated( ), 'login_imap: gmail oauth2 oauthdirect not IsAuthenticated after logout' ) ;\n                ok( defined( $myimap ) && $myimap->reconnect( ), 'login_imap: gmail oauth2 oauthdirect reconnect ok' ) ;\n                ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'login_imap: gmail oauth2 oauthdirect IsAuthenticated after reconnect' ) ;\n        }\n\n\n\n        # oauthaccesstoken authentication success for user1\n        SKIP: {\n                if ( ! -r 'oauth2/D_oauth2_access_token_imapsync.gl0@gmail.com.txt' )\n                {\n                        skip( 'oauthaccesstoken: no access_token file', 6  ) ;\n                }\n                my $myimap ;\n                my $mysync = {} ;\n                my $acc  = {} ;\n                $acc->{ Side } =  'Host1' ;\n                $acc->{ oauthaccesstoken } = 'oauth2/D_oauth2_access_token_imapsync.gl0@gmail.com.txt' ;\n                $acc->{ debugimap } = 1 ;\n                $mysync->{ showpasswords } = 1 ;\n                $acc->{ authmech } = 'QQQ' ;\n                isa_ok(\n                        $myimap = login_imap( 'imap.gmail.com', 993, 'imapsync.gl0@gmail.com', 'password_useless',\n                        1, undef,\n                        1, 100, $acc,  $mysync,\n                        ), 'Mail::IMAPClient', 'login_imap: user1 good oauthaccesstoken => Mail::IMAPClient' ) ;\n\n                ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'login_imap: gmail oauth2 oauthaccesstoken IsAuthenticated' ) ;\n\n                ok( defined( $myimap ) && $myimap->logout( ), 'login_imap: gmail oauth2 oauthaccesstoken logout' ) ;\n                ok( defined( $myimap ) && ! $myimap->IsAuthenticated( ), 'login_imap: gmail oauth2 oauthaccesstoken not IsAuthenticated after logout' ) ;\n                ok( defined( $myimap ) && $myimap->reconnect( ), 'login_imap: gmail oauth2 oauthaccesstoken reconnect ok' ) ;\n                ok( defined( $myimap ) && $myimap->IsAuthenticated( ), 'login_imap: gmail oauth2 oauthaccesstoken IsAuthenticated after reconnect' ) ;\n        }\n\n\n        note( 'Leaving  tests_login_imap_oauth()' ) ;\n        return ;\n}\n\n\n\nsub login_imap\n{\n        my @allargs = @_ ;\n        my(\n                $host, $port, $user, $password,\n                $ssl, $tls,\n                $uid, $split, $acc, $mysync ) = @allargs ;\n\n        $acc->{ imap } = undef ;\n\n        if ( ! all_defined( $host, $port, $user, $acc->{ Side } ) )\n        {\n                return ;\n        }\n\n        my $side = lc $acc->{ Side } ;\n        myprint( \"$acc->{ Side }: connecting and login on $side [$host] port [$port] with user [$user]\\n\"  ) ;\n\n        my $imap = init_imap( @allargs ) ;\n\n        if ( ! $imap->connect() )\n        {\n                my $error = \"$acc->{ Side } failure: can not open imap connection on $side [$host] with user [$user]: \"\n                            . $imap->LastError . \" $OS_ERROR\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                return ;\n        }\n        myprint( \"$acc->{ Side } IP address: \", $imap->Socket->peerhost(), \"\\n\"  ) ;\n        my $banner = $imap->Results()->[0] ;\n\n        myprint( \"$acc->{ Side } banner: $banner\"  ) ;\n\tmyprint( \"$acc->{ Side } capability before authentication: \", join(q{ }, @{ $imap->capability() || [] }), \"\\n\" ) ;\n\n\tif ( (! $ssl) and (! defined $tls ) and $imap->has_capability( 'STARTTLS' ) ) {\n\t\tmyprint( \"$acc->{ Side }: going to ssl because STARTTLS is in CAPABILITY. Use --notls1 or --notls2 to avoid that behavior\\n\" ) ;\n\t\t$tls = 1 ;\n\t}\n\n\n        #myprint( Data::Dumper->Dump( [ @allargs ] )  ) ;\n        if ( $tls ) {\n                set_tls( $imap, $acc ) ;\n\n                if ( ! $imap->starttls(  ) )\n                {\n                        my $error = \"$acc->{ Side } failure: Can not go to tls encryption on $side [$host]: \"\n                            . $imap->LastError . \"\\n\" ;\n\n                        errors_incr( $mysync, $error ) ;\n                        return ;\n                }\n                myprint( \"$acc->{ Side }: Socket successfully converted to SSL\\n\"  ) ;\n        }\n\n        if ( $acc->{ authmech } eq 'PREAUTH' ) {\n                if ( $imap->IsAuthenticated( ) ) {\n                        $imap->Socket ;\n                        myprintf(\"%s: Assuming PREAUTH for %s\\n\", $acc->{ Side }, $imap->Server ) ;\n                }else{\n                        $mysync->{nb_errors}++ ;\n                        exit_clean(\n                                $mysync, $EXIT_AUTHENTICATION_FAILURE,\n                                \"$acc->{ Side } failure: error login on $side [$host] with user [$user] auth [PREAUTH]\\n\"\n                        ) ;\n                }\n        }\n\n\n\n        if ( authenticate_imap( $imap, @allargs ) )\n        {\n                myprint( \"$acc->{ Side }: success login on [$host] with user [$user] auth [$acc->{ authmech }] or [LOGIN]\\n\"  ) ;\n                $acc->{ imap } = $imap ;\n                return( $imap ) ;\n        }\n        else\n        {\n                # The errors are already printed\n                myprint( \"$acc->{ Side }: failed login on [$host] with user [$user] auth [$acc->{ authmech }]\\n\"  ) ;\n                return ;\n        }\n}\n\n\n\nsub init_imap\n{\n        my(\n           $host, $port, $user, $password,\n           $ssl, $tls,\n           $uid, $split, $acc, $mysync ) = @_ ;\n\n        my ( $imap ) ;\n\n        $imap = Mail::IMAPClient->new() ;\n\n        if ( $mysync->{ tee } )\n        {\n                # Well, it does not change anything, does it?\n                # It does when suppressing the hack with *STDERR\n                $imap->Debug_fh( $mysync->{ tee } ) ;\n        }\n\n        if ( $ssl ) { set_ssl( $imap, $acc ) }\n        if ( $tls ) {  } # can not do set_tls() here because connect() will directly do a STARTTLS\n        $imap->Clear( 1 ) ;\n        $imap->Server( $host ) ;\n        $imap->Port( $port ) ;\n        $imap->Fast_io( $acc->{ fastio } ) ;\n        $imap->Buffer( $buffersize || $DEFAULT_BUFFER_SIZE ) ;\n        $imap->Uid( $uid ) ;\n\n        $imap->Peek( 1 ) ;\n        $imap->Debug( $acc->{ debugimap } ) ;\n        if ( $mysync->{ showpasswords } ) {\n                $imap->Showcredentials( 1 ) ;\n        }\n\n        if ( defined( $acc->{ timeout } ) )\n        {\n                $imap->Timeout( $acc->{ timeout } ) ;\n        }\n\n        if ( defined $acc->{ keepalive } )\n        {\n                $imap->Keepalive( $acc->{ keepalive } ) ;\n        }\n\n        if ( defined $acc->{ reconnectretry } )\n        {\n                $imap->Reconnectretry( $acc->{ reconnectretry } ) ;\n        }\n\n        $imap->{IMAPSYNC_RECONNECT_COUNT} = 0 ;\n        $imap->Ignoresizeerrors( $allowsizemismatch ) ;\n        $split and $imap->Maxcommandlength( $SPLIT_FACTOR * $split ) ;\n\n\n        return( $imap ) ;\n\n}\n\nsub authenticate_imap\n{\n        my( $imap,\n           $host, $port, $user, $password,\n           $ssl, $tls,\n           $uid, $split, $acc, $mysync ) = @_ ;\n\n        check_capability( $imap, $acc->{ authmech }, $acc->{ Side } ) ;\n        $imap->User( $user ) ;\n\n        if ( defined $acc->{ domain } )\n        {\n                $imap->Domain( $acc->{ domain } ) ;\n                $mysync->{ debug } and myprint( \"Domain: $acc->{ domain }\\n\" ) ;\n        }\n\n        $imap->Authuser( $acc->{ authuser } ) ;\n        $imap->Password( $password ) ;\n\n        if ( 'X-MASTERAUTH' eq $acc->{ authmech } )\n        {\n                xmasterauth( $imap ) ;\n                return 1 ;\n        }\n\n\n        if ( defined $acc->{ oauthdirect } )\n        {\n                $acc->{ authmech } = 'XOAUTH2 direct' ;\n                return( oauthdirect( $mysync, $acc, $imap, $host, $user ) ) ;\n        }\n\n\n        if ( defined $acc->{ oauthaccesstoken } )\n        {\n                $acc->{ authmech } = 'XOAUTH2 accesstoken' ;\n                return( oauthaccesstoken( $mysync, $acc, $imap, $host, $user ) ) ;\n        }\n\n\n\n\n        if ( $acc->{ proxyauth } ) {\n                $imap->Authmechanism(q{}) ;\n                $imap->User( $acc->{ authuser } ) ;\n        } else {\n                $imap->Authmechanism( $acc->{ authmech } ) unless ( $acc->{ authmech } eq 'LOGIN'  or $acc->{ authmech } eq 'PREAUTH' ) ;\n        }\n\n        $imap->Authcallback(\\&xoauth2) if ( 'XOAUTH2' eq $acc->{ authmech } ) ;\n        $imap->Authcallback(\\&plainauth) if ( ( 'PLAIN' eq $acc->{ authmech } ) or ( 'EXTERNAL' eq $acc->{ authmech } )  ) ;\n\n\n        unless ( $acc->{ authmech } eq 'PREAUTH' or $imap->login( ) ) {\n                my $info  = \"$acc->{ Side } failure: Error login on [$host] with user [$user] auth\" ;\n                my $einfo = imap_last_error( $imap ) ;\n                my $error = \"$info [$acc->{ authmech }]: $einfo\\n\" ;\n\n\n                if ( ( $acc->{ authmech } eq 'LOGIN' ) or $imap->IsUnconnected(  ) or $acc->{ authuser } ) {\n                        $acc->{ authuser } ||= \"\" ;\n                        myprint( \"$acc->{ Side } info: authmech [$acc->{ authmech }] user [$user] authuser [$acc->{ authuser }] IsUnconnected [\", $imap->IsUnconnected(  ), \"]\\n\" ) ;\n                        errors_incr( $mysync, $error ) ;\n                        return ;\n                }else{\n                        errors_incr( $mysync, $error ) ;\n                }\n\n                # It is not secure to try plain text LOGIN when another authmech failed\n                # but I do it anyway. This behavior is optional as option --notrylogin will skip it.\n                if ( $mysync->{ trylogin } )\n                {\n                        myprint( \"$acc->{ Side } info: trying LOGIN Auth mechanism on [$host] with user [$user]. Use option --notrylogin to avoid this second chance to login via LOGIN auth\\n\"  ) ;\n                        $imap->Authmechanism(q{}) ;\n                        if ( ! $imap->login(  ) )\n                        {\n                                failure_login( $mysync, $acc, 'LOGIN', $imap, $host, $user ) ;\n                                return ;\n                        }\n                        else\n                        {\n                                myprint( \"$acc->{ Side }: success login on [$host] with user [$user] auth [LOGIN] after [$acc->{ authmech }] failure\\n\"  ) ;\n                        }\n                }\n                else\n                {\n                        myprint( \"$acc->{ Side } info: not trying LOGIN Auth mechanism on [$host] with user [$user]. Use option --trylogin to have this second chance to login via LOGIN auth\\n\"  ) ;\n                        return ;\n                }\n        }\n\n        if ( $acc->{ proxyauth } ) {\n                if ( ! $imap->proxyauth( $user ) ) {\n                        failure_proxyauth( $mysync, $acc, $acc->{ authmech }, $imap, $host, $user ) ;\n                        return ;\n                }\n        }\n\n        return 1;\n}\n\n\nsub failure_login\n{\n        my( $mysync, $acc, $authmech, $imap, $host, $user ) = @ARG ;\n        my $info  = \"$acc->{ Side } failure: Error login on [$host] with user [$user] auth\" ;\n        my $einfo = imap_last_error( $imap ) ;\n        my $error = \"$info [$authmech]: $einfo\\n\" ;\n        errors_incr( $mysync, $error ) ;\n        return ;\n}\n\n# failure_login and failure_proxyauth function are similar but\n# variable $error so no factoring\nsub failure_proxyauth\n{\n        my( $mysync, $acc, $authmech, $imap, $host, $user ) = @ARG ;\n        my $info  = \"$acc->{ Side } failure: Error login on [$host] with user [$user] auth\" ;\n        my $einfo = imap_last_error( $imap ) ;\n        my $error = \"$info [$authmech] using proxy-login as [$acc->{ authuser }]: $einfo\\n\" ;\n        errors_incr( $mysync, $error ) ;\n        return ;\n}\n\n\n\n\nsub oauthdirect\n{\n        my( $mysync, $acc, $imap, $host, $user ) = @_ ;\n\n        my $oauthdirect_str ;\n        if ( -f -r $acc->{ oauthdirect } )\n        {\n                $oauthdirect_str = firstline( $acc->{ oauthdirect } ) ;\n        }\n        else\n        {\n                $oauthdirect_str = $acc->{ oauthdirect } || 'Please define oauthdirect value' ;\n        }\n\n        $imap->Authmechanism( 'XOAUTH2' ) ;\n        $imap->Authcallback( sub { return $oauthdirect_str } ) ;\n\n        #if ( $imap->authenticate('XOAUTH2', sub { return $oauthdirect_str } ) )\n        if ( $imap->login(  ) )\n        {\n                return 1 ;\n        }\n        else\n        {\n                failure_login( $mysync, $acc, $acc->{ authmech }, $imap, $host, $user ) ;\n                return ;\n        }\n        return ;\n}\n\n\n\n\nsub oauthaccesstoken\n{\n        my( $mysync, $acc, $imap, $host, $user ) = @_ ;\n\n        my $oauthaccesstoken_str ;\n        if ( -f -r $acc->{ oauthaccesstoken } )\n        {\n                $oauthaccesstoken_str = firstline( $acc->{ oauthaccesstoken } ) ;\n        }\n        else\n        {\n                $oauthaccesstoken_str = $acc->{ oauthaccesstoken } || 'Please define oauthaccesstoken value' ;\n        }\n\n        my $oauth_string = \"user=\" . $user . \"\\x01auth=Bearer \".  $oauthaccesstoken_str . \"\\x01\\x01\" ;\n        #myprint \"oauth_string: $oauth_string\\n\" ;\n\n        my $oauth_string_base64 = encode_base64( $oauth_string , '' ) ;\n        #myprint \"oauth_string_base64: $oauth_string_base64\\n\" ;\n\n        my $oauthdirect_str = $oauth_string_base64 ;\n\n        $imap->Authmechanism( 'XOAUTH2' ) ;\n        $imap->Authcallback( sub { return $oauthdirect_str } ) ;\n\n        #if ( $imap->authenticate('XOAUTH2', sub { return $oauthdirect_str } ) )\n        if ( $imap->login(  ) )\n        {\n                return 1 ;\n        }\n        else\n        {\n                failure_login( $mysync, $acc, $acc->{ authmech }, $imap, $host, $user ) ;\n                return ;\n        }\n        return ;\n}\n\n\n\n\nsub check_capability\n{\n\n        my( $imap, $authmech, $Side ) = @_ ;\n\n\n        if ( $imap->has_capability( \"AUTH=$authmech\" )\n                or $imap->has_capability( $authmech ) )\n        {\n                myprintf(\"%s: %s says it has CAPABILITY for AUTHENTICATE %s\\n\",\n                        $Side, $imap->Server, $authmech) ;\n                return ;\n        }\n\n        if ( $authmech eq 'LOGIN' )\n        {\n                # Well, the warning is so common and useless that I prefer to remove it\n                # No more \"... says it has NO CAPABILITY for AUTHENTICATE LOGIN\"\n                return ;\n        }\n\n\n        myprintf( \"%s: %s says it has NO CAPABILITY for AUTHENTICATE %s\\n\",\n                $Side, $imap->Server, $authmech ) ;\n\n        if ( $authmech eq 'PLAIN' )\n        {\n                myprint( \"$Side: frequently PLAIN is only supported with SSL, try --ssl or --tls options\\n\" ) ;\n        }\n\n        return ;\n}\n\nsub set_ssl\n{\n        my ( $imap, $acc ) = @_ ;\n        # SSL_version can be\n        #    SSLv3 SSLv2 SSLv23 SSLv23:!SSLv2 (last one is the default in IO-Socket-SSL-1.953)\n        #\n\n        my $sslargs_hash = $acc->{sslargs} ;\n\n        my $sslargs_default = {\n                SSL_verify_mode => $SSL_VERIFY_POLICY,\n                SSL_verifycn_scheme => 'imap',\n\t\tSSL_cipher_list => 'DEFAULT:!DH',\n        } ;\n\n        # initiate with default values\n        my %sslargs_mix = %{ $sslargs_default } ;\n        # now override with passed values\n        @sslargs_mix{ keys %{ $sslargs_hash } } = values %{ $sslargs_hash } ;\n        # remove keys with undef values\n        foreach my $key ( keys %sslargs_mix ) {\n                delete $sslargs_mix{ $key } if ( not defined  $sslargs_mix{ $key }  ) ;\n        }\n        # back to an ARRAY\n        my @sslargs_mix = %sslargs_mix ;\n        #myprint( Data::Dumper->Dump( [ $sslargs_hash, $sslargs_default, \\%sslargs_mix, \\@sslargs_mix ] )  ) ;\n        $imap->Ssl( \\@sslargs_mix ) ;\n        return ;\n}\n\nsub set_tls\n{\n        my ( $imap, $acc ) = @_ ;\n\n        my $sslargs_hash = $acc->{sslargs} ;\n\n        my $sslargs_default = {\n                SSL_verify_mode => $SSL_VERIFY_POLICY,\n                SSL_cipher_list => 'DEFAULT:!DH',\n        } ;\n        #myprint( Data::Dumper->Dump( [ $acc, $sslargs_hash, $sslargs_default ] )  ) ;\n\n        # initiate with default values\n        my %sslargs_mix = %{ $sslargs_default } ;\n        # now override with passed values\n        @sslargs_mix{ keys %{ $sslargs_hash } } = values %{ $sslargs_hash } ;\n        # remove keys with undef values\n        foreach my $key ( keys %sslargs_mix ) {\n                delete $sslargs_mix{ $key } if ( not defined  $sslargs_mix{ $key } ) ;\n        }\n        # back to an ARRAY\n        my @sslargs_mix = %sslargs_mix ;\n\n        $imap->Starttls( \\@sslargs_mix ) ;\n        return ;\n}\n\n\n\nsub plainauth\n{\n        my $code = shift;\n        my $imap = shift;\n\n        my $string = mysprintf(\"%s\\x00%s\\x00%s\", $imap->User,\n                            defined $imap->Authuser ? $imap->Authuser : \"\", $imap->Password);\n        return encode_base64(\"$string\", q{});\n}\n\n# Copy from https://github.com/imapsync/imapsync/pull/25/files\n# Changes \"use\" pragmas to \"require\".\n# The openssl system call shall be replaced by pure Perl and\n# https://metacpan.org/pod/Crypt::OpenSSL::PKCS12\n\n# Now the Joaquin Lopez code:\n#\n# Used this as an example: https://gist.github.com/gsainio/6322375\n#\n# And this as a reference: https://developers.google.com/accounts/docs/OAuth2ServiceAccount\n# (note there is an http/rest tab, where the real info is hidden away... went on a witch hunt\n# until I noticed that...)\n#\n# This is targeted at gmail to maintain compatibility after google's oauth1 service is deactivated\n# on May 5th, 2015: https://developers.google.com/gmail/oauth_protocol\n# If there are other oauth2 implementations out there, this would need to be modified to be\n# compatible\n#\n# This is a good guide on setting up the google api/apps side of the equation:\n# http://www.limilabs.com/blog/oauth2-gmail-imap-service-account\n#\n# 2016/05/27: Updated to support oauth/key data in the .json files Google now defaults to\n# when creating gmail service accounts. They're easier to work with since they neither\n# requiring decrypting nor specifying the oauth2 client id separately.\n#\n# If the password arg ends in .json, it will assume this new json method, otherwise it\n# will fallback to the \"oauth client id;.p12\" format it was previously using.\nsub xoauth2\n{\n        require JSON::WebToken ;\n        require LWP::UserAgent ;\n        require HTML::Entities ;\n        require JSON ;\n        require JSON::WebToken::Crypt::RSA ;\n        require Crypt::OpenSSL::PKCS12;\n        require Crypt::OpenSSL::RSA ;\n        require Encode::Byte ;\n        require IO::Socket::SSL ;\n\n        my $code = shift;\n        my $imap = shift;\n\n        my ($iss,$key);\n\n        if( $imap->Password =~ /^(.*\\.json)$/x )\n        {\n                my $json = JSON->new( ) ;\n                my $filename = $1;\n                $sync->{ debug } and myprint( \"XOAUTH2 json file: $filename\\n\" ) ;\n                my $FILE ;\n                if ( ! open( $FILE, '<', $filename ) )\n                {\n                        $sync->{nb_errors}++ ;\n                        exit_clean( $sync, $EXIT_AUTHENTICATION_FAILURE,\n                                \"error [$filename]: $OS_ERROR\\n\"\n                        ) ;\n                }\n                my $jsonfile = $json->decode( join q{}, <$FILE> ) ;\n                close $FILE ;\n\n                $iss = $jsonfile->{client_id};\n                $key = $jsonfile->{private_key};\n                $sync->{ debug } and myprint( \"Service account: $iss\\n\");\n                $sync->{ debug } and myprint( \"Private key:\\n$key\\n\");\n        }\n        else\n        {\n            # Get iss (service account address), keyfile name, and keypassword if necessary\n            ( $iss, my $keyfile, my $keypass ) = $imap->Password =~ /([\\-\\d\\w\\@\\.]+);([a-zA-Z0-9 \\_\\-\\.\\/]+);?(.*)?/x ;\n\n            # Assume key password is google default if not provided\n            $keypass = 'notasecret' if not $keypass;\n\n            $sync->{ debug } and myprint( \"Service account: $iss\\nKey file: $keyfile\\nKey password: $keypass\\n\");\n\n            # Get private key from p12 file\n            my $pkcs12 = Crypt::OpenSSL::PKCS12->new_from_file($keyfile);\n            $key = $pkcs12->private_key($keypass);\n\n            $sync->{ debug } and myprint( \"Private key:\\n$key\\n\");\n        }\n\n        # Create jwt of oauth2 request\n        my $time = time ;\n        my $jwt = JSON::WebToken->encode( {\n        'iss' => $iss, # service account\n        'scope' => 'https://mail.google.com/',\n        'aud' => 'https://www.googleapis.com/oauth2/v3/token',\n        'exp' => $time + $DEFAULT_EXPIRATION_TIME_OAUTH2_PK12,\n        'iat' => $time,\n        'prn' => $imap->User # user to auth as\n        },\n        $key, 'RS256', {'typ' => 'JWT'} ); # Crypt::OpenSSL::RSA needed here.\n\n        # Post oauth2 request\n        my $ua = LWP::UserAgent->new(  ) ;\n        $ua->env_proxy(  ) ;\n\n        my $response = $ua->post('https://www.googleapis.com/oauth2/v3/token',\n        { grant_type => HTML::Entities::encode_entities('urn:ietf:params:oauth:grant-type:jwt-bearer'),\n        assertion => $jwt } ) ;\n\n        unless( $response->is_success(  ) ) {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EXIT_AUTHENTICATION_FAILURE,\n                        $response->code, \"\\n\", $response->content, \"\\n\"\n                ) ;\n        }else{\n                $sync->{ debug } and myprint( $response->content  ) ;\n        }\n\n        # access_token in response is what we need\n        my $data = JSON::decode_json( $response->content ) ;\n\n        # format as oauth2 auth data\n        my $xoauth2_string = encode_base64( 'user=' . $imap->User . \"\\1auth=Bearer \" . $data->{access_token} . \"\\1\\1\", q{} ) ;\n\n        $sync->{ debug } and myprint( \"XOAUTH2 String: $xoauth2_string\\n\");\n        return($xoauth2_string);\n}\n\n\n\n\nsub xmasterauth\n{\n        # This is Kerio auth admin\n        # This code comes from\n        # https://github.com/imapsync/imapsync/pull/53/files\n\n        my $imap = shift ;\n\n        my $user     = $imap->User(  ) ;\n        my $password = $imap->Password(  ) ;\n        my $authmech = 'X-MASTERAUTH' ;\n\n        my @challenge = $imap->tag_and_run( $authmech, \"+\" ) ;\n        if ( not defined $challenge[0] )\n        {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EXIT_AUTHENTICATION_FAILURE,\n                        \"Failure authenticate with $authmech: \",\n                        $imap->LastError, \"\\n\"\n                ) ;\n                return ; # hahaha!\n        }\n        $sync->{ debug } and myprint( \"X-MASTERAUTH challenge: [@challenge]\\n\" ) ;\n\n        $challenge[1] =~ s/^\\+ |^\\s+|\\s+$//g ;\n        if ( ! $imap->_imap_command( { addcrlf => 1, addtag => 0, tag => $imap->Count }, md5_hex( $challenge[1] . $password ) ) )\n        {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EXIT_AUTHENTICATION_FAILURE,\n                        \"Failure authenticate with $authmech: \",\n                        $imap->LastError, \"\\n\"\n                ) ;\n        }\n\n        if ( ! $imap->tag_and_run( 'X-SETUSER ' . $user ) )\n        {\n                $sync->{nb_errors}++ ;\n                exit_clean( $sync, $EXIT_AUTHENTICATION_FAILURE,\n                        \"Failure authenticate with $authmech: \",\n                        \"X-SETUSER \", $imap->LastError, \"\\n\"\n                ) ;\n        }\n\n        $imap->State( Mail::IMAPClient::Authenticated ) ;\n        # I comment this state because \"Selected\" state is usually done by SELECT or EXAMINE imap commands\n        # $imap->State( Mail::IMAPClient::Selected ) ;\n\n        return ;\n}\n\nsub keepalive1\n{\n        my $mysync = shift ;\n\n        $mysync->{ acc1 }->{ keepalive } = defined  $mysync->{ acc1 }->{ keepalive }  ? $mysync->{ acc1 }->{ keepalive } : 1 ;\n\n        if ( $mysync->{ acc1 }->{ keepalive } )\n        {\n                myprint( \"Host1: imap connection keepalive is on on host1. Use --nokeepalive1 to disable it.\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"Host1: imap connection keepalive is off on host1. Use --keepalive1 to enable it.\\n\" ) ;\n        }\n}\n\nsub keepalive2\n{\n        my $mysync = shift ;\n\n        $mysync->{ acc2 }->{ keepalive } = defined  $mysync->{ acc2 }->{ keepalive }  ? $mysync->{ acc2 }->{ keepalive } : 1 ;\n\n        if ( $mysync->{ acc2 }->{ keepalive } )\n        {\n                myprint( \"Host2: imap connection keepalive is on on host2. Use --nokeepalive2 to disable it.\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"Host2: imap connection keepalive is off on host2. Use --keepalive2 to enable it.\\n\" ) ;\n        }\n}\n\n\n\nsub banner_imapsync\n{\n        my $mysync = shift @ARG ;\n        my @argv = @ARG ;\n\n        my $banner_imapsync = join q{},\n                q{$RCSfile: imapsync,v $ },\n                q{$Revision: 2.178 $ },\n                q{$Date: 2022/01/12 21:28:37 $ },\n                \"\\n\",\n                \"Command line used, run by $EXECUTABLE_NAME:\\n\",\n                \"$PROGRAM_NAME \", command_line_nopassword( $mysync, @argv ), \"\\n\" ;\n\n        return( $banner_imapsync ) ;\n}\n\nsub tests_do_valid_directory\n{\n        note( 'Entering tests_do_valid_directory()' ) ;\n\n        is( 1, do_valid_directory( '.'), 'do_valid_directory: . good' ) ;\n        is( 1, do_valid_directory( './W/tmp/tests/valid/sub'), 'do_valid_directory: ./W/tmp/tests/valid/sub good' ) ;\n\n        Readonly my $NB_UNIX_tests_do_valid_directory_non_root => 2 ;\n        diag( \"OSNAME=$OSNAME EFFECTIVE_USER_ID=$EFFECTIVE_USER_ID\" ) ;\n\n        SKIP: {\n                skip( 'Tests only for non roor user', $NB_UNIX_tests_do_valid_directory_non_root ) if ( '0' eq $EFFECTIVE_USER_ID ) ;\n                diag( 'The \"Error / is not writable\" is on purpose' ) ;\n                ok( 0 == do_valid_directory( '/'), 'do_valid_directory: / bad' ) ;\n                diag( 'The \"Error permission denied\" on /noway is on purpose' ) ;\n                ok( 0 == do_valid_directory( '/noway'), 'do_valid_directory: /noway bad' ) ;\n        }\n\n\n        note( 'Leaving  tests_do_valid_directory()' ) ;\n        return ;\n}\n\nsub do_valid_directory\n{\n        my $dir = shift @ARG ;\n\n        # all good => return ok.\n        return( 1 ) if ( -d $dir and -r _ and -w _ ) ;\n\n        # exist but bad\n        if ( -e $dir and not -d _ ) {\n                myprint( \"Error: $dir exists but is not a directory\\n\"  ) ;\n                return( 0 ) ;\n        }\n        if ( -e $dir and not -w _ ) {\n                my $sb = stat $dir ;\n                myprintf( \"Error: directory %s is not writable for user %s, permissions are %04o and owner is %s ( uid %s )\\n\",\n                         $dir, getpwuid_any_os( $EFFECTIVE_USER_ID ), ($sb->mode & oct($PERMISSION_FILTER) ), getpwuid_any_os( $sb->uid ), $sb->uid(  ) ) ;\n                return( 0 ) ;\n        }\n        # Trying to create it\n        myprint( \"Creating directory $dir (current directory is \" . getcwd(  ) . \")\\n\"  ) ;\n        if ( ! eval { mkpath( $dir ) } ) {\n                myprint( \"$EVAL_ERROR\" ) if ( $EVAL_ERROR )  ;\n        }\n        return( 1 ) if ( -d $dir and -r _ and -w _ ) ;\n        return( 0 ) ;\n}\n\n\nsub tests_match_a_pid_number\n{\n        note( 'Entering tests_match_a_pid_number()' ) ;\n\n        is( undef, match_a_pid_number(  ), 'match_a_pid_number: no args => undef' ) ;\n        is( undef, match_a_pid_number( q{} ), 'match_a_pid_number: \"\" => undef' ) ;\n        is( undef, match_a_pid_number( 'lalala' ), 'match_a_pid_number: lalala => undef' ) ;\n        is( 1, match_a_pid_number( 1 ), 'match_a_pid_number: 1 => 1' ) ;\n        is( 1, match_a_pid_number( 123 ), 'match_a_pid_number: 123 => 1' ) ;\n        is( 1, match_a_pid_number( -123 ), 'match_a_pid_number: -123 => 1' ) ;\n        is( 1, match_a_pid_number( '123' ), 'match_a_pid_number: \"123\" => 1' ) ;\n        is( 1, match_a_pid_number( '-123' ), 'match_a_pid_number: \"-123\" => 1' ) ;\n        is( undef, match_a_pid_number( 'a123' ), 'match_a_pid_number: a123 => undef' ) ;\n        is( undef, match_a_pid_number( '-a123' ), 'match_a_pid_number: -a123 => undef' ) ;\n        is( 1, match_a_pid_number( 99999 ), 'match_a_pid_number: 99999 => 1' ) ;\n        is( 1, match_a_pid_number( -99999 ), 'match_a_pid_number: -99999 => 1' ) ;\n        is( undef, match_a_pid_number( 0 ), 'match_a_pid_number: 0 => undef' ) ;\n        is( 1, match_a_pid_number( 100000 ), 'match_a_pid_number: 100000 => 1' ) ;\n        is( 1, match_a_pid_number( 123456 ), 'match_a_pid_number: 123456 => 1' ) ;\n        is( undef, match_a_pid_number( '-0' ), 'match_a_pid_number: \"-0\" => undef' ) ;\n        is( 1, match_a_pid_number( -100000 ), 'match_a_pid_number: -100000 => 1' ) ;\n        is( 1, match_a_pid_number( -123456 ), 'match_a_pid_number: -123456 => 1' ) ;\n        is( 1, match_a_pid_number( 2**22 ), 'match_a_pid_number: 2**22 => 1' ) ;\n        is( undef, match_a_pid_number( 2**22 + 1 ),  'match_a_pid_number: 2**22 + 1 => undef' ) ;\n        is( undef, match_a_pid_number( 4194304 + 1 ), 'match_a_pid_number: 2**22 + 1 = 4194305 => undef' ) ;\n\n        note( 'Leaving  tests_match_a_pid_number()' ) ;\n        return ;\n}\n\nsub match_a_pid_number\n{\n        my $pid = shift @ARG ;\n        if ( ! defined $pid ) { return ; }\n        #print \"$pid\\n\" ;\n        if ( ! match( $pid, '^-?\\d+$' ) ) { return ; }\n        #print \"$pid\\n\" ;\n        # can be negative on Windows\n        #if ( 0 > $pid ) { return ; }\n        #if ( 65535 < $pid ) { return ; }\n        if ( 2**22 < abs( $pid ) ) { return ; }\n        if ( 0 == abs( $pid ) ) { return ; }\n        return 1 ;\n}\n\nsub tests_remove_pidfile_not_running\n{\n        note( 'Entering tests_remove_pidfile_not_running()' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'remove_pidfile_not_running: mkpath W/tmp/tests/' ) ;\n        is( undef, remove_pidfile_not_running(  ), 'remove_pidfile_not_running: no args => undef' ) ;\n        is( undef, remove_pidfile_not_running( './W' ), 'remove_pidfile_not_running: a dir => undef' ) ;\n        is( undef, remove_pidfile_not_running( 'noexists' ), 'remove_pidfile_not_running: noexists => undef' ) ;\n        is( 1, touch( 'W/tmp/tests/empty.pid' ), 'remove_pidfile_not_running: prepa empty W/tmp/tests/empty.pid' ) ;\n        is( undef, remove_pidfile_not_running( 'W/tmp/tests/empty.pid' ), 'remove_pidfile_not_running: W/tmp/tests/empty.pid => undef' ) ;\n        is( 'lalala', string_to_file( 'lalala', 'W/tmp/tests/lalala.pid' ), 'remove_pidfile_not_running: prepa W/tmp/tests/lalala.pid' ) ;\n        is( undef, remove_pidfile_not_running( 'W/tmp/tests/lalala.pid' ), 'remove_pidfile_not_running: W/tmp/tests/lalala.pid => undef' ) ;\n        is( '55555', string_to_file( '55555', 'W/tmp/tests/notrunning.pid' ), 'remove_pidfile_not_running: prepa W/tmp/tests/notrunning.pid' ) ;\n        is( 1, remove_pidfile_not_running( 'W/tmp/tests/notrunning.pid' ), 'remove_pidfile_not_running: W/tmp/tests/notrunning.pid => 1' ) ;\n        is( $PROCESS_ID, string_to_file( $PROCESS_ID, 'W/tmp/tests/running.pid' ), 'remove_pidfile_not_running: prepa W/tmp/tests/running.pid' ) ;\n        is( undef, remove_pidfile_not_running( 'W/tmp/tests/running.pid' ), 'remove_pidfile_not_running: W/tmp/tests/running.pid => undef' ) ;\n\n        note( 'Leaving  tests_remove_pidfile_not_running()' ) ;\n        return ;\n}\n\nsub remove_pidfile_not_running\n{\n        #\n        my $pid_filename = shift @ARG ;\n\n        #myprint( \"In remove_pidfile_not_running $pid_filename\\n\" ) ;\n        if ( ! $pid_filename )    { myprint( \"No variable pid_filename\\n\" ) ; return } ;\n        if ( ! -e $pid_filename )\n        {\n                myprint( \"File $pid_filename does not exist\\n\" ) ;\n                return ;\n        }\n        #myprint( \"Still In remove_pidfile_not_running $pid_filename\\n\" ) ;\n\n        if ( ! -f $pid_filename ) { myprint( \"File $pid_filename is not a file\\n\" ) ; return } ;\n\n        my $pid = firstline( $pid_filename ) ;\n        if ( ! match_a_pid_number( $pid ) ) { myprint( \"In remove_pidfile_not_running: pid $pid in $pid_filename is not a pid number\\n\" ) ; return } ;\n        # can't kill myself => do nothing\n        if ( ! kill 'ZERO', $PROCESS_ID  ) { myprint( \"Can not kill ZERO myself $PROCESS_ID\\n\" ) ; return } ;\n\n        # can't kill ZERO the pid => it is gone or own by another user => remove pidfile\n        if ( ! kill 'ZERO', $pid ) {\n                myprint( \"Removing old $pid_filename since its PID $pid is not running anymore (oo-killed?)\\n\" ) ;\n                if ( unlink $pid_filename ) {\n                        myprint( \"Removed old $pid_filename\\n\" ) ;\n                        return 1 ;\n                }else{\n                        myprint( \"Could not remove old $pid_filename because $!\\n\" ) ;\n                        return ;\n                }\n        }\n        myprint( \"Another imapsync process $pid is running as says pidfile $pid_filename\\n\" ) ;\n        return ;\n}\n\n\nsub tests_tail\n{\n        note( 'Entering tests_tail()' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'tail: mkpath W/tmp/tests/' ) ;\n        ok( ( ! -e 'W/tmp/tests/tail.pid' || unlink 'W/tmp/tests/tail.pid' ), 'tail: unlink W/tmp/tests/tail.pid' ) ;\n        ok( ( ! -e 'W/tmp/tests/tail.txt' || unlink 'W/tmp/tests/tail.txt' ), 'tail: unlink W/tmp/tests/tail.txt' ) ;\n\n        is( undef, tail(  ),  'tail: no args => undef' ) ;\n        my $mysync ;\n        is( undef, tail( $mysync ),  'tail: no pidfile => undef' ) ;\n\n        $mysync->{pidfile} = 'W/tmp/tests/tail.pid' ;\n        is( undef, tail( $mysync ),  'tail: no pidfilelocking => undef' ) ;\n\n        $mysync->{pidfilelocking} = 1 ;\n        is( undef, tail( $mysync ),  'tail: pidfile no exists => undef' ) ;\n\n\n        my $pidandlog = \"33333\\nW/tmp/tests/tail.txt\\n\" ;\n        is( $pidandlog, string_to_file( $pidandlog, $mysync->{pidfile} ), 'tail: put pid 33333 and tail.txt in pidfile' ) ;\n        is( undef, tail( $mysync ), 'tail: logfile to tail no exists => undef' ) ;\n\n        my $tailcontent = \"L1\\nL2\\nL3\\nL4\\nL5\\n\" ;\n        is( $tailcontent, string_to_file( $tailcontent, 'W/tmp/tests/tail.txt' ),\n            'tail: put L1\\nL2\\nL3\\nL4\\nL5\\n in W/tmp/tests/tail.txt' ) ;\n\n        is( undef, tail( $mysync ),  'tail: fake pid in pidfile + tail off => 1' ) ;\n\n        $mysync->{ tail } = 1 ;\n        is( 1, tail( $mysync ),  'tail: fake pid in pidfile + tail on=> 1' ) ;\n\n        # put my own pid, won't do tail\n        $pidandlog = \"$PROCESS_ID\\nW/tmp/tests/tail.txt\\n\" ;\n        is( $pidandlog, string_to_file( $pidandlog, $mysync->{pidfile} ),  'tail: put my own PID in pidfile' ) ;\n        is( undef, tail( $mysync ),  'tail: my own pid in pidfile => undef' ) ;\n\n        note( 'Leaving  tests_tail()' ) ;\n        return ;\n}\n\n\n\nsub tail\n{\n        # return undef on failures\n        # return 1 on success\n\n        my $mysync = shift ;\n\n        # no tail when aborting!\n        if ( $mysync->{ abort } ) { return ; }\n\n        my $pidfile = $mysync->{pidfile} ;\n        my $lock    = $mysync->{pidfilelocking} ;\n        my $tail    = $mysync->{tail} ;\n\n        if ( ! $pidfile ) { return ; }\n        if ( ! $lock )    { return ; }\n        if ( ! $tail )    { return ; }\n\n        if ( ! -e $pidfile ) { return ; }\n\n        my $pidtotail = firstline( $pidfile ) ;\n        if ( ! $pidtotail ) { return ; }\n\n\n\n        # It should not happen but who knows...\n        if ( $pidtotail eq $PROCESS_ID ) { return ; }\n\n\n        my $filetotail = secondline( $pidfile ) ;\n        if ( ! $filetotail ) { return ; }\n\n        if ( ! -r $filetotail )\n        {\n                #myprint( \"Error: can not read $filetotail\\n\" ) ;\n                return ;\n        }\n\n        myprint( \"Doing a tail -f on $filetotail for processus pid $pidtotail until it is finished.\\n\" ) ;\n        my $file = File::Tail->new(\n                name        => $filetotail,\n                nowait      => 1,\n                interval    => 1,\n                tail        => 1,\n                adjustafter => 2\n        );\n\n        my $moretimes = 200 ;\n        # print one line at least\n        my $line = $file->read ;\n        myprint( $line ) ;\n        while ( isrunning( $pidtotail, \\$moretimes )  and defined( $line = $file->read ) )\n        {\n                myprint( $line );\n                sleep( 0.02 ) ;\n        }\n\n        return 1 ;\n}\n\nsub isrunning\n{\n        my $pidtocheck    = shift ;\n        my $moretimes_ref = shift ;\n\n        if ( kill 'ZERO', $pidtocheck )\n        {\n                #myprint( \"$pidtocheck running\\n\" ) ;\n                return 1 ;\n        }\n        elsif ( $$moretimes_ref >= 0 )\n        {\n                # continue to consider it running\n                $$moretimes_ref-- ;\n                return 1 ;\n        }\n        else\n        {\n                myprint( \"Tailed processus $pidtocheck ended\\n\" ) ;\n                return ;\n        }\n}\n\nsub tests_write_pidfile\n{\n        note( 'Entering tests_write_pidfile()' ) ;\n\n        my $mysync ;\n\n        is( 1, write_pidfile(  ), 'write_pidfile: no args => 1' ) ;\n\n        # no pidfile => ok\n        $mysync->{pidfile} = q{} ;\n        is( 1, write_pidfile( $mysync ), 'write_pidfile: no pidfile => undef' ) ;\n\n        # The pidfile path is bad => failure\n        $mysync->{pidfile} = '/no/no/no.pid' ;\n        is( undef, write_pidfile( $mysync ), 'write_pidfile: no permission for /no/no/no.pid, no lock => undef' ) ;\n\n        $mysync->{pidfilelocking} = 1 ;\n        is( undef, write_pidfile( $mysync ), 'write_pidfile: no permission for /no/no/no.pid + lock => undef' ) ;\n\n        $mysync->{pidfile} = 'W/tmp/tests/test.pid' ;\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'write_pidfile: mkpath W/tmp/tests/' ) ;\n        is( 1, touch( $mysync->{pidfile} ), 'write_pidfile: lock prepa' ) ;\n\n        $mysync->{pidfilelocking} = 0 ;\n        is( 1, write_pidfile( $mysync ), 'write_pidfile: W/tmp/tests/test.pid + no lock => 1' ) ;\n        is( $PROCESS_ID, firstline( 'W/tmp/tests/test.pid' ), \"write_pidfile: W/tmp/tests/test.pid contains $PROCESS_ID\" ) ;\n        is( q{}, secondline( 'W/tmp/tests/test.pid' ), \"write_pidfile: W/tmp/tests/test.pid contains no second line\" ) ;\n\n        $mysync->{pidfilelocking} = 1 ;\n        is( undef, write_pidfile( $mysync ), 'write_pidfile: W/tmp/tests/test.pid + lock => undef' ) ;\n\n\n        $mysync->{pidfilelocking} = 0 ;\n        $mysync->{ logfile } = 'rrrr.txt' ;\n        is( 1, write_pidfile( $mysync ), 'write_pidfile: W/tmp/tests/test.pid + no lock + logfile => 1' ) ;\n        is( $PROCESS_ID, firstline( 'W/tmp/tests/test.pid' ),  \"write_pidfile: + no lock + logfile W/tmp/tests/test.pid contains $PROCESS_ID\" ) ;\n        is( q{rrrr.txt}, secondline( 'W/tmp/tests/test.pid' ), \"write_pidfile: + no lock + logfile W/tmp/tests/test.pid contains rrrr.txt\" ) ;\n\n\n        note( 'Leaving  tests_write_pidfile()' ) ;\n        return ;\n}\n\n\n\nsub write_pidfile\n{\n        # returns undef if something is considered fatal\n        # returns 1 otherwise\n\n        #myprint( \"In write_pidfile\\n\" ) ;\n        if ( ! @ARG ) { return 1 ; }\n\n        my $mysync = shift @ARG ;\n\n        # Do not write the pid file if the current process goal is to abort the process designed by the pid file\n        if ( $mysync->{ abort } ) { return 1 ; }\n\n        #\n        my $pid_filename = $mysync->{ pidfile } ;\n        my $lock         = $mysync->{ pidfilelocking } ;\n\n        if ( ! $pid_filename )\n        {\n                myprint( \"PID file is unset ( to set it, use --pidfile filepath ; to avoid it use --pidfile \\\"\\\" )\\n\" ) ;\n                return( 1 ) ;\n        }\n\n        myprint( \"PID file is $pid_filename ( to change it, use --pidfile filepath ; to avoid it use --pidfile \\\"\\\" )\\n\" ) ;\n        if ( -e $pid_filename and $lock ) {\n                myprint( \"$pid_filename already exists, another imapsync may be curently running. Aborting imapsync.\\n\"  ) ;\n                return ;\n\n        }\n\n        if ( -e $pid_filename ) {\n                myprint( \"$pid_filename already exists, overwriting it ( use --pidfilelocking to avoid concurrent runs )\\n\"  ) ;\n        }\n\n        my $pid_string = \"$PROCESS_ID\\n\" ;\n        my $pid_message = \"Writing my PID $PROCESS_ID in $pid_filename\\n\" ;\n\n        if ( $mysync->{ logfile } )\n        {\n                $pid_string  .= \"$mysync->{ logfile }\\n\" ;\n                $pid_message .= \"Writing also my logfile name in $pid_filename : $mysync->{ logfile }\\n\" ;\n        }\n\n        if ( open my $FILE_HANDLE, '>', $pid_filename ) {\n                myprint( $pid_message ) ;\n                print $FILE_HANDLE $pid_string ;\n                close $FILE_HANDLE ;\n                return( 1 ) ;\n        }\n        else\n        {\n                myprint( \"Could not open $pid_filename for writing. Check permissions or disk space: $OS_ERROR\\n\"  ) ;\n                return ;\n        }\n}\n\n\nsub fix_Inbox_INBOX_mapping\n{\n        my( $h1_all, $h2_all ) = @_ ;\n\n        my $regex = q{} ;\n        SWITCH: {\n                if ( exists  $h1_all->{INBOX}  and exists  $h2_all->{INBOX}  ) { $regex = q{} ; last SWITCH ; } ;\n                if ( exists  $h1_all->{Inbox}  and exists  $h2_all->{Inbox}  ) { $regex = q{} ; last SWITCH ; } ;\n                if ( exists  $h1_all->{INBOX}  and exists  $h2_all->{Inbox}  ) { $regex = q{s/^INBOX$/Inbox/x} ; last SWITCH ; } ;\n                if ( exists  $h1_all->{Inbox}  and exists  $h2_all->{INBOX}  ) { $regex = q{s/^Inbox$/INBOX/x} ; last SWITCH ; } ;\n        } ;\n        return( $regex ) ;\n}\n\nsub tests_fix_Inbox_INBOX_mapping\n{\n\tnote( 'Entering tests_fix_Inbox_INBOX_mapping()' ) ;\n\n\n        my( $h1_all, $h2_all ) ;\n\n        $h1_all = { 'INBOX' => q{} } ;\n        $h2_all = { 'INBOX' => q{} } ;\n        ok( q{} eq fix_Inbox_INBOX_mapping( $h1_all, $h2_all ), 'fix_Inbox_INBOX_mapping: INBOX INBOX' ) ;\n\n        $h1_all = { 'Inbox' => q{} } ;\n        $h2_all = { 'Inbox' => q{} } ;\n        ok( q{} eq fix_Inbox_INBOX_mapping( $h1_all, $h2_all ), 'fix_Inbox_INBOX_mapping: Inbox Inbox' ) ;\n\n        $h1_all = { 'INBOX' => q{} } ;\n        $h2_all = { 'Inbox' => q{} } ;\n        ok( q{s/^INBOX$/Inbox/x} eq fix_Inbox_INBOX_mapping( $h1_all, $h2_all ), 'fix_Inbox_INBOX_mapping: INBOX Inbox' ) ;\n\n        $h1_all = { 'Inbox' => q{} } ;\n        $h2_all = { 'INBOX' => q{} } ;\n        ok( q{s/^Inbox$/INBOX/x} eq fix_Inbox_INBOX_mapping( $h1_all, $h2_all ), 'fix_Inbox_INBOX_mapping: Inbox INBOX' ) ;\n\n        $h1_all = { 'INBOX' => q{} } ;\n        $h2_all = { 'rrrrr' => q{} } ;\n        ok( q{} eq fix_Inbox_INBOX_mapping( $h1_all, $h2_all ), 'fix_Inbox_INBOX_mapping: INBOX rrrrrr' ) ;\n\n        $h1_all = { 'rrrrr' => q{} } ;\n        $h2_all = { 'Inbox' => q{} } ;\n        ok( q{} eq fix_Inbox_INBOX_mapping( $h1_all, $h2_all ), 'fix_Inbox_INBOX_mapping: rrrrr Inbox' ) ;\n\n\tnote( 'Leaving  tests_fix_Inbox_INBOX_mapping()' ) ;\n        return ;\n}\n\n\nsub jux_utf8_list\n{\n        my @s_inp = @_ ;\n        my $s_out = q{} ;\n        foreach my $s ( @s_inp ) {\n                $s_out .= jux_utf8( $s ) . \"\\n\" ;\n        }\n        return( $s_out ) ;\n}\n\nsub tests_jux_utf8_list\n{\n        note( 'Entering tests_jux_utf8_list()' ) ;\n\n        use utf8 ;\n        is( q{}, jux_utf8_list(  ), 'jux_utf8_list: void' ) ;\n        is( \"[]\\n\", jux_utf8_list( q{} ), 'jux_utf8_list: empty string' ) ;\n        is( \"[INBOX]\\n\", jux_utf8_list( 'INBOX' ), 'jux_utf8_list: INBOX' ) ;\n        is( \"[&ANY-] = [Ã–]\\n\", jux_utf8_list( '&ANY-' ), 'jux_utf8_list: [&ANY-] = [Ã–]' ) ;\n\n        note( 'Leaving  tests_jux_utf8_list()' ) ;\n        return( 0 ) ;\n}\n\n# editing utf8 can be tricky without an utf8 editor\nsub tests_jux_utf8_old\n{\n        note( 'Entering tests_jux_utf8_old()' ) ;\n\n        no utf8 ;\n\n        is( '[]', jux_utf8_old( q{} ), 'jux_utf8_old: void => []' ) ;\n        is( '[INBOX]', jux_utf8_old( 'INBOX'), 'jux_utf8_old: INBOX => [INBOX]' ) ;\n        is( '[&ZTZO9nux-] = [æ”¶ä»¶ç®±]', jux_utf8_old( '&ZTZO9nux-'), 'jux_utf8_old: => [&ZTZO9nux-] = [æ”¶ä»¶ç®±]' ) ;\n        is( '[&ANY-] = [Ã–]', jux_utf8_old( '&ANY-'), 'jux_utf8_old: &ANY- => [&ANY-] = [Ã–]' ) ;\n        #     +BD8EQAQ1BDQEOwQ+BDM- SHOULD stay as is!\n        is( '[+BD8EQAQ1BDQEOwQ+BDM-] = [Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð³]', jux_utf8_old( '+BD8EQAQ1BDQEOwQ+BDM-' ), 'jux_utf8_old: => [+BD8EQAQ1BDQEOwQ+BDM-] = [Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð³]' ) ;\n        is( '[&BB8EQAQ+BDUEOgRC-] = [ÐŸÑ€Ð¾ÐµÐºÑ‚]', jux_utf8_old( '&BB8EQAQ+BDUEOgRC-' ),    'jux_utf8_old: => [&BB8EQAQ+BDUEOgRC-] = [ÐŸÑ€Ð¾ÐµÐºÑ‚]' ) ;\n\n        note( 'Leaving  tests_jux_utf8_old()' ) ;\n        return ;\n}\n\nsub jux_utf8_old\n{\n        # juxtapose utf8 at the right if different\n        my ( $s_utf7 ) =  shift ;\n        my ( $s_utf8 ) =  imap_utf7_decode_old( $s_utf7 ) ;\n\n        if ( $s_utf7 eq $s_utf8 ) {\n                #myprint( \"[$s_utf7]\\n\"  ) ;\n                return( \"[$s_utf7]\" ) ;\n        }else{\n                #myprint( \"[$s_utf7] = [$s_utf8]\\n\"  ) ;\n                return( \"[$s_utf7] = [$s_utf8]\" ) ;\n        }\n}\n\n# Copied from http://cpansearch.perl.org/src/FABPOT/Unicode-IMAPUtf7-2.01/lib/Unicode/IMAPUtf7.pm\n# and then fixed with\n# https://rt.cpan.org/Public/Bug/Display.html?id=11172\nsub imap_utf7_decode_old\n{\n        my ( $s ) = shift ;\n\n        # Algorithm\n        # On remplace , par / dans les BASE 64 (, entre & et -)\n        # On remplace les &, non suivi d'un - par +\n        # On remplace les &- par &\n        $s =~ s/&([^,&\\-]*),([^,\\-&]*)\\-/&$1\\/$2\\-/xg ;\n        $s =~ s/&(?!\\-)/\\+/xg ;\n        $s =~ s/&\\-/&/xg ;\n        return( Unicode::String::utf7( $s )->utf8 ) ;\n}\n\n\n\n\n\nsub tests_jux_utf8\n{\n        note( 'Entering tests_jux_utf8()' ) ;\n        #no utf8 ;\n        use utf8 ;\n\n        #binmode STDOUT, \":encoding(UTF-8)\" ;\n        binmode STDERR, \":encoding(UTF-8)\" ;\n\n        # This test is because the binary can fail on it, a PAR.pm issue.\n        # The failure was with the underlying Encode::IMAPUTF7 module line 66 release 1.05\n        # Was solved by including Encode in imapsync and using \"pp -x\".\n        ok( find_encoding( \"UTF-16BE\"), 'jux_utf8: Encode::find_encoding: UTF-16BE' ) ;\n\n        #\n        is( '[]', jux_utf8( q{} ), 'jux_utf8: void => []' ) ;\n        is( '[INBOX]', jux_utf8( 'INBOX'), 'jux_utf8: INBOX => [INBOX]' ) ;\n        is( '[&ANY-] = [Ã–]', jux_utf8( '&ANY-'), 'jux_utf8: &ANY- => [&ANY-] = [Ã–]' ) ;\n        #     +BD8EQAQ1BDQEOwQ+BDM- must stay as is\n        is( '[+BD8EQAQ1BDQEOwQ+BDM-]', jux_utf8( '+BD8EQAQ1BDQEOwQ+BDM-' ), 'jux_utf8: => [+BD8EQAQ1BDQEOwQ+BDM-] = [+BD8EQAQ1BDQEOwQ+BDM-]' ) ;\n        is( '[&BB8EQAQ+BDUEOgRC-] = [ÐŸÑ€Ð¾ÐµÐºÑ‚]', jux_utf8( '&BB8EQAQ+BDUEOgRC-' ),    'jux_utf8: => [&BB8EQAQ+BDUEOgRC-] = [ÐŸÑ€Ð¾ÐµÐºÑ‚]' ) ;\n\n        is( '[R&AOk-ponses 1200+1201+1202] = [RÃ©ponses 1200+1201+1202]', jux_utf8( q{R&AOk-ponses 1200+1201+1202} ), 'jux_utf8: [R&AOk-ponses 1200+1201+1202] = [RÃ©ponses 1200+1201+1202]' ) ;\n        my $str = Encode::IMAPUTF7::encode(\"IMAP-UTF-7\", 'RÃ©ponses 1200+1201+1202' ) ;\n        is( '[R&AOk-ponses 1200+1201+1202] = [RÃ©ponses 1200+1201+1202]', jux_utf8( $str ), \"jux_utf8: [$str] = [RÃ©ponses 1200+1201+1202]\" ) ;\n\n        is( '[INBOX.&AOkA4ADnAPk-&-*] = [INBOX.Ã©Ã Ã§Ã¹&*]', jux_utf8( 'INBOX.&AOkA4ADnAPk-&-*' ), \"jux_utf8: [INBOX.&AOkA4ADnAPk-&-*] = [INBOX.Ã©Ã Ã§Ã¹&*]\" ) ;\n\n        is( '[&ZTZO9nux-] = [æ”¶ä»¶ç®±]', jux_utf8( '&ZTZO9nux-'), 'jux_utf8: => [&ZTZO9nux-] = [æ”¶ä»¶ç®±]' ) ;\n        #\n        #\n        is( '[!Old Emails]', jux_utf8( '!Old Emails'), 'jux_utf8: !Old Emails => [!Old Emails]' ) ;\n        is( '[2006 Budget & Fcst]', jux_utf8( '2006 Budget & Fcst'), 'jux_utf8: 2006 Budget & Fcst => [2006 Budget & Fcst]' ) ;\n        note( 'Leaving  tests_jux_utf8()' ) ;\n        return ;\n}\n\nsub jux_utf8\n{\n        #use utf8 ;\n        # juxtapose utf8 at the right if different\n        my ( $s_utf7 ) =  shift ;\n        my ( $s_utf8 ) =  imap_utf7_decode( $s_utf7 ) ;\n\n        if ( $s_utf7 eq $s_utf8 ) {\n                #myprint( \"[$s_utf7]\\n\"  ) ;\n                return( \"[$s_utf7]\" ) ;\n        }else{\n                #myprint( \"[$s_utf7] = [$s_utf8]\\n\"  ) ;\n                return( \"[$s_utf7] = [$s_utf8]\" ) ;\n        }\n}\n\nsub imap_utf7_decode\n{\n        #use utf8 ;\n        my ( $s ) = shift ;\n        return( Encode::IMAPUTF7::decode(\"IMAP-UTF-7\", $s ) ) ;\n}\n\nsub imap_utf7_encode\n{\n        #use utf8 ;\n        my ( $s ) = shift ;\n        return( Encode::IMAPUTF7::encode(\"IMAP-UTF-7\", $s ) ) ;\n}\n\n\n\nsub imap_utf7_encode_old\n{\n        my ( $s ) = @_ ;\n\n        $s = Unicode::String::utf8( $s )->utf7 ;\n\n        $s =~ s/\\+([^\\/&\\-]*)\\/([^\\/\\-&]*)\\-/\\+$1,$2\\-/xg ;\n        $s =~ s/&/&\\-/xg ;\n        $s =~ s/\\+([^+\\-]+)?\\-/&$1\\-/xg ;\n        return( $s ) ;\n}\n\n\n\n\nsub select_folder\n{\n        my ( $mysync, $imap, $folder, $hostside ) = @_ ;\n        if ( ! $imap->select( $folder ) ) {\n                my $error = join q{},\n                        \"$hostside folder $folder: Could not select: \",\n                        $imap->LastError,  \"\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                return( 0 ) ;\n        }else{\n                # ok select succeeded\n                return( 1 ) ;\n        }\n}\n\nsub examine_folder\n{\n        my ( $mysync, $imap, $folder, $hostside ) = @_ ;\n        if ( ! $imap->examine( $folder ) ) {\n                my $error = join q{},\n                        \"$hostside folder $folder: Could not examine: \",\n                        $imap->LastError,  \"\\n\" ;\n                errors_incr( $mysync, $error ) ;\n                return( 0 ) ;\n        }else{\n                # ok select succeeded\n                return( 1 ) ;\n        }\n}\n\n\nsub count_from_select\n{\n        my @lines = @ARG ;\n        my $count ;\n        foreach my $line ( @lines ) {\n                #myprint( \"line = [$line]\\n\"  ) ;\n                if ( $line =~ m/^\\*\\s+(\\d+)\\s+EXISTS/x ) {\n                        $count = $1 ;\n                        return( $count ) ;\n                }\n        }\n        return( undef ) ;\n}\n\n\n\nsub create_folder_old\n{\n        my $mysync = shift @ARG ;\n        my( $imap, $h2_fold, $h1_fold ) = @ARG ;\n\n        myprint( \"Creating (old way) folder [$h2_fold] on host2\\n\" ) ;\n        if ( ( 'INBOX' eq uc  $h2_fold )\n         and ( $imap->exists( $h2_fold ) ) ) {\n                myprint( \"Folder [$h2_fold] already exists\\n\"  ) ;\n                return( 1 ) ;\n        }\n        if ( ! $mysync->{dry} ){\n                if ( ! $imap->create( $h2_fold ) ) {\n                        my $error = join q{},\n                                \"Could not create folder [$h2_fold] from [$h1_fold]: \",\n                                $imap->LastError(  ), \"\\n\" ;\n                        errors_incr( $mysync, $error ) ;\n                        # success if folder exists (\"already exists\" error)\n                        return( 1 ) if $imap->exists( $h2_fold ) ;\n                        # failure since create failed\n                        return( 0 ) ;\n                }else{\n                        #create succeeded\n                        myprint( \"Created ( the old way ) folder [$h2_fold] on host2\\n\"  ) ;\n                        return( 1 ) ;\n                }\n        }else{\n                # dry mode, no folder so many imap will fail, assuming failure\n                myprint( \"Created ( the old way ) folder [$h2_fold] on host2 $mysync->{dry_message}\\n\"  ) ;\n                return( 0 ) ;\n        }\n}\n\n\nsub create_folder\n{\n        my $mysync = shift @ARG ;\n        my( $myimap2 , $h2_fold , $h1_fold ) = @ARG ;\n        my( @parts , $parent ) ;\n\n        if ( $myimap2->IsUnconnected(  ) ) {\n                myprint( \"Host2: Unconnected state\\n\"  ) ;\n                return( 0 ) ;\n        }\n\n        if ( $create_folder_old ) {\n                return( create_folder_old( $mysync, $myimap2 , $h2_fold , $h1_fold ) ) ;\n        }\n\n        # $imap->exists() calls $imap->status() that does an IMAP STATUS folder\n        myprint( \"Creating folder [$h2_fold] on host2\\n\"  ) ;\n        if ( ( 'INBOX' eq uc  $h2_fold  )\n         and ( $myimap2->exists( $h2_fold ) ) ) {\n                myprint( \"Folder [$h2_fold] already exists\\n\"  ) ;\n                return( 1 ) ;\n        }\n\n        if ( $mixfolders and $myimap2->exists( $h2_fold ) ) {\n                myprint( \"Folder [$h2_fold] already exists (--nomixfolders is not set)\\n\"  ) ;\n                return( 1 ) ;\n        }\n\n\n        if ( ( not $mixfolders ) and ( $myimap2->exists( $h2_fold ) ) ) {\n                myprint( \"Folder [$h2_fold] already exists and --nomixfolders is set\\n\"  ) ;\n                return( 0 ) ;\n        }\n\n        @parts = split /\\Q$mysync->{ h2_sep }\\E/x, $h2_fold ;\n        pop @parts ;\n        $parent = join $mysync->{ h2_sep }, @parts ;\n        $parent =~ s/^\\s+|\\s+$//xg ;\n        if ( ( $parent ne q{} ) and ( ! $myimap2->exists( $parent ) ) ) {\n                create_folder( $mysync, $myimap2 , $parent , $h1_fold ) ;\n        }\n\n        if ( ! $mysync->{dry} ) {\n                if ( ! $myimap2->create( $h2_fold ) ) {\n                        my $error = join q{},\n                                \"Could not create folder [$h2_fold] from [$h1_fold]: \" ,\n                                $myimap2->LastError(  ), \"\\n\" ;\n                        errors_incr( $mysync, $error ) ;\n                        # success if folder exists (\"already exists\" error) or selectable\n                        if ( $myimap2->exists( $h2_fold ) or select_folder( $mysync, $myimap2, $h2_fold, 'Host2' ) )\n                        {\n                                return( 1 ) ;\n                        }\n                        # failure since create failed + not exist + not selectable\n                        return( 0 ) ;\n                }else{\n                        #create succeeded\n                        myprint( \"Created folder [$h2_fold] on host2\\n\"  ) ;\n                        return( 1 ) ;\n                }\n        }else{\n                # dry mode, no folder so many imap will fail, assuming failure\n                myprint( \"Created folder [$h2_fold] on host2 $mysync->{dry_message}\\n\"  ) ;\n                if ( ! $mysync->{ justfolders } ) {\n                        myprint( \"Since --dry mode is on and folder [$h2_fold] on host2 does not exist yet, syncing messages will not be simulated.\\n\"\n                        . \"To simulate message syncing, use --justfolders without --dry to first create the missing folders then rerun the --dry sync.\\n\" ) ;\n                        # The messages that could be transferred are counted and the number is given at the end.\n                }\n                return( 0 ) ;\n        }\n}\n\n\n\nsub tests_folder_routines\n{\n\tnote( 'Entering tests_folder_routines()' ) ;\n\n        ok( !is_requested_folder('folder_foo'), 'is_requested_folder folder_foo 1'               );\n        ok(  add_to_requested_folders('folder_foo'), 'add_to_requested_folders folder_foo'       );\n        ok(  is_requested_folder('folder_foo'), 'is_requested_folder folder_foo 2'               );\n        ok( !is_requested_folder('folder_NO_EXIST'), 'is_requested_folder folder_NO_EXIST'       );\n\n        is_deeply( [ 'folder_foo' ], [ remove_from_requested_folders( 'folder_foo' ) ], 'removed folder_foo => folder_foo' ) ;\n        ok( !is_requested_folder('folder_foo'), 'is_requested_folder folder_foo 3'               );\n        my @f ;\n        ok(  @f = add_to_requested_folders('folder_bar', 'folder_toto'), \"add result: @f\"        );\n        ok(  is_requested_folder('folder_bar'), 'is_requested_folder 4'                          );\n        ok(  is_requested_folder('folder_toto'), 'is_requested_folder 5'                         );\n        ok(  remove_from_requested_folders('folder_toto'), 'remove_from_requested_folders: '       );\n        ok( !is_requested_folder('folder_toto'), 'is_requested_folder 6'                         );\n\n        is_deeply( [ 'folder_bar' ], [ remove_from_requested_folders('folder_bar') ], 'remove_from_requested_folders: empty' ) ;\n\n        ok( 0 == compare_lists( [ sort_requested_folders(  ) ], [] ), 'sort_requested_folders: all empty' ) ;\n        ok(  add_to_requested_folders( 'A_99', 'M_55', 'Z_11' ), 'add_to_requested_folders M_55 Z_11'       );\n        ok( 0 == compare_lists( [ sort_requested_folders(  ) ], [ 'A_99', 'M_55', 'Z_11' ] ), 'sort_requested_folders: middle' ) ;\n\n\n        @folderfirst = ( 'Z_11' ) ;\n\n        ok( 0 == compare_lists( [ sort_requested_folders(  ) ], [ 'Z_11', 'A_99', 'M_55' ] ), 'sort_requested_folders: first+middle' ) ;\n\n        is_deeply( [ 'Z_11', 'A_99', 'M_55' ], [ sort_requested_folders(  ) ], 'sort_requested_folders: first+middle is_deeply' ) ;\n\n        @folderlast = ( 'A_99' ) ;\n        ok( 0 == compare_lists( [ sort_requested_folders(  ) ], [ 'Z_11', 'M_55', 'A_99' ] ), 'sort_requested_folders: first+middle+last 1' ) ;\n\n        ok(  add_to_requested_folders('M_55', 'M_44',), 'add_to_requested_folders M_55 M_44'       ) ;\n\n        ok( 0 == compare_lists( [ sort_requested_folders(  ) ], [ 'Z_11', 'M_44', 'M_55', 'A_99'] ), 'sort_requested_folders: first+middle+last 2' ) ;\n\n\n        ok(  add_to_requested_folders('A_88', 'Z_22',), 'add_to_requested_folders A_88 Z_22'       ) ;\n        @folderfirst = qw( Z_22  Z_11 ) ;\n        @folderlast  = qw( A_99  A_88 ) ;\n        ok( 0 == compare_lists( [ sort_requested_folders(  ) ], [  'Z_22', 'Z_11', 'M_44', 'M_55', 'A_99', 'A_88' ] ), 'sort_requested_folders: first+middle+last 3' ) ;\n        undef @folderfirst ;\n        undef @folderlast ;\n\n\tnote( 'Leaving  tests_folder_routines()' ) ;\n        return ;\n}\n\n\nsub sort_requested_folders\n{\n        my @requested_folders_sorted = () ;\n\n        $sync->{ debug } and myprint \"folderfirst: @folderfirst\\n\" ;\n        my @folderfirst_requested = remove_from_requested_folders( @folderfirst ) ;\n        #myprint \"folderfirst_requested: @folderfirst_requested\\n\" ;\n\n        my @folderlast_requested  = remove_from_requested_folders( @folderlast ) ;\n\n        my @middle = sort keys %requested_folder ;\n\n        @requested_folders_sorted = ( @folderfirst_requested, @middle, @folderlast_requested ) ;\n        $sync->{ debug } and myprint \"requested_folders_sorted: @requested_folders_sorted\\n\" ;\n        add_to_requested_folders( @requested_folders_sorted ) ;\n\n        return( @requested_folders_sorted ) ;\n}\n\nsub is_requested_folder\n{\n        my ( $folder ) = @_;\n\n        return( defined $requested_folder{ $folder } ) ;\n}\n\n\nsub add_to_requested_folders\n{\n        my @wanted_folders = @_ ;\n\n        foreach my $folder ( @wanted_folders ) {\n                ++$requested_folder{ $folder } ;\n        }\n        return( keys  %requested_folder  ) ;\n}\n\nsub tests_remove_from_requested_folders\n{\n        note( 'Entering tests_remove_from_requested_folders()' ) ;\n\n        is( undef, undef,  'remove_from_requested_folders: undef is undef' ) ;\n        is_deeply( [], [ remove_from_requested_folders(  ) ], 'remove_from_requested_folders: no args' ) ;\n        %requested_folder = (\n                'F1' => 1,\n        ) ;\n        is_deeply( [], [ remove_from_requested_folders(  ) ], 'remove_from_requested_folders: remove nothing among F1 => nothing' ) ;\n        is_deeply( [], [ remove_from_requested_folders( 'Fno' ) ], 'remove_from_requested_folders: remove Fno among F1 => nothing' ) ;\n        is_deeply( [ 'F1' ], [ remove_from_requested_folders( 'F1' ) ], 'remove_from_requested_folders: remove F1 among F1 => F1' ) ;\n        is_deeply( { }, { %requested_folder }, 'remove_from_requested_folders: remove F1 among F1 => %requested_folder emptied' ) ;\n\n        %requested_folder = (\n                'F1' => 1,\n                'F2' => 1,\n        ) ;\n        is_deeply( [], [ remove_from_requested_folders(  ) ], 'remove_from_requested_folders: remove nothing among F1 F2 => nothing' ) ;\n        is_deeply( [], [ remove_from_requested_folders( 'Fno' ) ], 'remove_from_requested_folders: remove Fno among F1 F2 => nothing' ) ;\n        is_deeply( [ 'F1' ], [ remove_from_requested_folders( 'F1' ) ], 'remove_from_requested_folders: remove F1 among F1 F2 => F1' ) ;\n        is_deeply( { 'F2' => 1 }, { %requested_folder }, 'remove_from_requested_folders: remove F1 among F1 F2 => %requested_folder F2' ) ;\n\n        is_deeply( [], [ remove_from_requested_folders( 'F1' ) ], 'remove_from_requested_folders: remove F1 among F2 => nothing' ) ;\n        is_deeply( [ 'F2' ], [ remove_from_requested_folders( 'F1', 'F2' ) ], 'remove_from_requested_folders: remove F1 F2 among F2 => F2' ) ;\n        is_deeply( {}, { %requested_folder }, 'remove_from_requested_folders: remove F1 among F1 F2 => %requested_folder F2' ) ;\n\n        %requested_folder = (\n                'F1' => 1,\n                'F2' => 1,\n                'F3' => 1,\n        ) ;\n        is_deeply( [ 'F1', 'F2' ], [ remove_from_requested_folders( 'F1', 'F2' ) ], 'remove_from_requested_folders: remove F1 F2 among F1 F2 F3 => F1 F2' ) ;\n        is_deeply( { 'F3' => 1 }, { %requested_folder }, 'remove_from_requested_folders: remove F1 F2 among F1 F2 F3 => %requested_folder F3' ) ;\n\n        undef %requested_folder ;\n\n        note( 'Leaving  tests_remove_from_requested_folders()' ) ;\n        return ;\n}\n\n\nsub remove_from_requested_folders\n{\n        my @unwanted_folders = @_ ;\n\n        my @removed_folders = () ;\n        foreach my $folder ( @unwanted_folders ) {\n                if ( exists $requested_folder{ $folder } )\n                {\n                        delete $requested_folder{ $folder } ;\n                        push @removed_folders, $folder ;\n                }\n        }\n        return( @removed_folders ) ;\n}\n\nsub compare_lists\n{\n        my ($list_1_ref, $list_2_ref) = @_;\n\n        return($MINUS_ONE) if ((not defined $list_1_ref) and defined $list_2_ref);\n        return(0)  if ((not defined $list_1_ref) and not defined $list_2_ref); # end if no list\n        return(1)  if (not defined $list_2_ref); # end if only one list\n\n        if (not ref $list_1_ref ) {$list_1_ref = [$list_1_ref]};\n        if (not ref $list_2_ref ) {$list_2_ref = [$list_2_ref]};\n\n\n        my $last_used_indice = $MINUS_ONE;\n\n\n        ELEMENT:\n        foreach my $indice ( 0 .. $#{ $list_1_ref } ) {\n                $last_used_indice = $indice ;\n\n                # End of list_2\n                return 1 if ($indice > $#{ $list_2_ref } ) ;\n\n                my $element_list_1 = $list_1_ref->[$indice] ;\n                my $element_list_2 = $list_2_ref->[$indice] ;\n                my $balance = $element_list_1 cmp $element_list_2 ;\n                next ELEMENT if ($balance == 0) ;\n                return $balance ;\n        }\n        # each element equal until last indice of list_1\n        return $MINUS_ONE if ($last_used_indice < $#{ $list_2_ref } ) ;\n\n        # same size, each element equal\n        return 0 ;\n}\n\nsub tests_compare_lists\n{\n\tnote( 'Entering tests_compare_lists()' ) ;\n\n        my $empty_list_ref = [];\n\n        ok( 0 == compare_lists()               , 'compare_lists, no args');\n        ok( 0 == compare_lists(undef)          , 'compare_lists, undef = nothing');\n        ok( 0 == compare_lists(undef, undef)   , 'compare_lists, undef = undef');\n        ok($MINUS_ONE == compare_lists(undef , [])     , 'compare_lists, undef < []');\n        ok($MINUS_ONE == compare_lists(undef , [1])    , 'compare_lists, undef < [1]');\n        ok($MINUS_ONE == compare_lists(undef , [0])    , 'compare_lists, undef < [0]');\n        ok(+1 == compare_lists([])             , 'compare_lists, [] > nothing');\n        ok(+1 == compare_lists([], undef)      , 'compare_lists, [] > undef');\n        ok( 0 == compare_lists([] , [])        , 'compare_lists, [] = []');\n\n        ok($MINUS_ONE == compare_lists([] , [1])        , 'compare_lists, [] < [1]');\n        ok(+1 == compare_lists([1] , [])        , 'compare_lists, [1] > []');\n\n\n        ok( 0 == compare_lists( [1],  1 )          , 'compare_lists, [1] =  1 ') ;\n        ok( 0 == compare_lists( 1 , [1] )          , 'compare_lists,  1  = [1]') ;\n        ok( 0 == compare_lists( 1 ,  1 )          , 'compare_lists,  1  =  1 ') ;\n        ok( $MINUS_ONE == compare_lists( 0 ,  1 )          , 'compare_lists,  0  <  1 ') ;\n        ok( $MINUS_ONE == compare_lists( $MINUS_ONE ,  0 )          , 'compare_lists, -1  <  0 ') ;\n        ok( $MINUS_ONE == compare_lists( 1 ,  2 )          , 'compare_lists,  1  <  2 ') ;\n        ok( +1 == compare_lists( 2 ,  1 )          , 'compare_lists,  2  >  1 ') ;\n\n\n        ok( 0 == compare_lists([1,2], [1,2])   , 'compare_lists,  [1,2] = [1,2]' ) ;\n        ok($MINUS_ONE == compare_lists([1], [1,2])     , 'compare_lists,    [1] < [1,2]' ) ;\n        ok(+1 == compare_lists([2], [1,2])     , 'compare_lists,    [2] > [1,2]' ) ;\n        ok($MINUS_ONE == compare_lists([1], [1,1])     , 'compare_lists,    [1] < [1,1]' ) ;\n        ok(+1 == compare_lists([1, 1], [1])    , 'compare_lists, [1, 1] >   [1]' ) ;\n        ok( 0 == compare_lists([1 .. $NUMBER_20_000] , [1 .. $NUMBER_20_000])\n                                               , 'compare_lists, [1..20_000] = [1..20_000]' ) ;\n        ok($MINUS_ONE == compare_lists([1], [2])       , 'compare_lists, [1] < [2]') ;\n        ok( 0 == compare_lists([2], [2])       , 'compare_lists, [0] = [2]') ;\n        ok(+1 == compare_lists([2], [1])       , 'compare_lists, [2] > [1]') ;\n\n        ok($MINUS_ONE == compare_lists(['a'],  ['b'])   , 'compare_lists, [\"a\"] < [\"b\"]') ;\n        ok( 0 == compare_lists(['a'],  ['a'])   , 'compare_lists, [\"a\"] = [\"a\"]') ;\n        ok( 0 == compare_lists(['ab'], ['ab']) , 'compare_lists, [\"ab\"] = [\"ab\"]') ;\n        ok(+1 == compare_lists(['b'],  ['a'])   , 'compare_lists, [\"b\"] > [\"a\"]') ;\n        ok($MINUS_ONE == compare_lists(['a'],  ['aa'])  , 'compare_lists, [\"a\"] < [\"aa\"]') ;\n        ok($MINUS_ONE == compare_lists(['a'],  ['a', 'a']), 'compare_lists, [\"a\"] < [\"a\", \"a\"]') ;\n        ok( 0 == compare_lists([split q{ }, 'a b' ], ['a', 'b']), 'compare_lists, split') ;\n        ok( 0 == compare_lists([sort split q{ }, 'b a' ], ['a', 'b']), 'compare_lists, sort split') ;\n\n\tnote( 'Leaving  tests_compare_lists()' ) ;\n        return ;\n}\n\n\nsub guess_prefix\n{\n        my @foldernames = @_ ;\n\n        my $prefix_guessed = q{} ;\n        foreach my $folder ( @foldernames ) {\n                next if ( $folder =~ m{^INBOX$}xi ) ; # no guessing from INBOX\n                if ( $folder !~ m{^INBOX}xi ) {\n                        $prefix_guessed = q{} ; # prefix empty guessed\n                        last ;\n                }\n                if ( $folder =~ m{^(INBOX(?:\\.|\\/))}xi ) {\n                        $prefix_guessed = $1 ;  # prefix Inbox/ or INBOX. guessed\n                }\n        }\n        return( $prefix_guessed ) ;\n}\n\nsub tests_guess_prefix\n{\n\tnote( 'Entering tests_guess_prefix()' ) ;\n\n        is( guess_prefix(  ), q{}, 'guess_prefix: no args => empty string' ) ;\n        is( q{} , guess_prefix( 'INBOX' ), 'guess_prefix: INBOX alone' ) ;\n        is( q{} , guess_prefix( 'Inbox' ), 'guess_prefix: Inbox alone' ) ;\n        is( q{} , guess_prefix( 'INBOX' ), 'guess_prefix: INBOX alone' ) ;\n        is( 'INBOX/' , guess_prefix( 'INBOX', 'INBOX/Junk' ), 'guess_prefix: INBOX INBOX/Junk' ) ;\n        is( 'INBOX.' , guess_prefix( 'INBOX', 'INBOX.Junk' ), 'guess_prefix: INBOX INBOX.Junk' ) ;\n        is( 'Inbox/' , guess_prefix( 'Inbox', 'Inbox/Junk' ), 'guess_prefix: Inbox Inbox/Junk' ) ;\n        is( 'Inbox.' , guess_prefix( 'Inbox', 'Inbox.Junk' ), 'guess_prefix: Inbox Inbox.Junk' ) ;\n        is( 'INBOX/' , guess_prefix( 'INBOX', 'INBOX/Junk', 'INBOX/rrr' ), 'guess_prefix: INBOX INBOX/Junk INBOX/rrr' ) ;\n        is( q{} , guess_prefix( 'INBOX', 'INBOX/Junk', 'INBOX/rrr', 'zzz' ), 'guess_prefix: INBOX INBOX/Junk INBOX/rrr zzz' ) ;\n        is( q{} , guess_prefix( 'INBOX', 'Junk' ), 'guess_prefix: INBOX Junk' ) ;\n        is( q{} , guess_prefix( 'INBOX', 'Junk' ), 'guess_prefix: INBOX Junk' ) ;\n\n\tnote( 'Leaving  tests_guess_prefix()' ) ;\n        return ;\n}\n\nsub get_prefix\n{\n        my( $imap, $prefix_in, $prefix_opt, $Side, $folders_ref ) = @_ ;\n        my( $prefix_out, $prefix_guessed ) ;\n\n        ( $sync->{ debug } or $sync->{debugfolders} ) and myprint( \"$Side: Getting prefix\\n\"  ) ;\n        $prefix_guessed = guess_prefix( @{ $folders_ref } ) ;\n        myprint( \"$Side: guessing prefix from folder listing: [$prefix_guessed]\\n\"  ) ;\n        ( $sync->{ debug } or $sync->{debugfolders} ) and myprint( \"$Side: Calling namespace capability\\n\"  ) ;\n        if ( $imap->has_capability( 'namespace' ) ) {\n                my $r_namespace = $imap->namespace(  ) ;\n                $prefix_out = $r_namespace->[0][0][0] ;\n                myprint( \"$Side: prefix given by NAMESPACE: [$prefix_out]\\n\"  ) ;\n                if ( defined  $prefix_in  ) {\n                        myprint( \"$Side: but using [$prefix_in] given by $prefix_opt\\n\"  ) ;\n                        $prefix_out = $prefix_in ;\n                        return( $prefix_out ) ;\n                }else{\n                        # all good\n                        return( $prefix_out ) ;\n                }\n        }\n        else{\n                if ( defined  $prefix_in  ) {\n                        myprint( \"$Side: using [$prefix_in] given by $prefix_opt\\n\"  ) ;\n                        $prefix_out = $prefix_in ;\n                        return( $prefix_out ) ;\n                }else{\n                        myprint(\n                          \"$Side: No NAMESPACE capability so using guessed prefix [$prefix_guessed]\\n\",\n                          help_to_guess_prefix( $imap, $prefix_opt ) ) ;\n                        return( $prefix_guessed ) ;\n                }\n        }\n        return ;\n}\n\n\nsub guess_separator\n{\n        my @foldernames = @_ ;\n\n        #return( undef ) unless ( @foldernames ) ;\n\n        my $sep_guessed ;\n        my %counter ;\n        foreach my $folder ( @foldernames ) {\n                $counter{'/'}++  while ( $folder =~ m{/}xg ) ;  # count /\n                $counter{'.'}++  while ( $folder =~ m{\\.}xg ) ; # count .\n                $counter{'\\\\\\\\'}++ while ( $folder =~ m{(\\\\){2}}xg ) ; # count \\\\\n                $counter{'\\\\'}++ while ( $folder =~ m{[^\\\\](\\\\){1}(?=[^\\\\])}xg ) ; # count \\\n        }\n        my @race_sorted = sort { $counter{ $b } <=> $counter{ $a } } keys  %counter  ;\n        $sync->{ debug } and myprint( \"@foldernames\\n@race_sorted\\n\", %counter, \"\\n\"  ) ;\n        $sep_guessed = shift @race_sorted || $LAST_RESSORT_SEPARATOR ; # / when nothing found.\n        return( $sep_guessed ) ;\n}\n\nsub tests_guess_separator\n{\n\tnote( 'Entering tests_guess_separator()' ) ;\n\n        ok( '/' eq  guess_separator(  ), 'guess_separator: no args' ) ;\n        ok( '/' eq guess_separator( 'abcd' ), 'guess_separator: abcd' ) ;\n        ok( '/' eq guess_separator( 'a/b/c.d' ), 'guess_separator: a/b/c.d' ) ;\n        ok( '.' eq guess_separator( 'a.b/c.d' ), 'guess_separator: a.b/c.d' ) ;\n        ok( '\\\\\\\\' eq guess_separator( 'a\\\\\\\\b\\\\\\\\c.c\\\\\\\\d/e/f' ), 'guess_separator: a\\\\\\\\b\\\\\\\\c.c\\\\\\\\d/e/f' ) ;\n        ok( '\\\\' eq guess_separator( 'a\\\\b\\\\c.c\\\\d/e/f' ), 'guess_separator: a\\\\b\\\\c.c\\\\d/e/f' ) ;\n        ok( '\\\\' eq guess_separator( 'a\\\\b' ), 'guess_separator: a\\\\b' ) ;\n        ok( '\\\\' eq guess_separator( 'a\\\\b\\\\c' ), 'guess_separator: a\\\\b\\\\c' ) ;\n\n\tnote( 'Leaving  tests_guess_separator()' ) ;\n        return ;\n}\n\nsub get_separator\n{\n        my( $imap, $sep_in, $sep_opt, $Side, $folders_ref ) = @_ ;\n        my( $sep_out, $sep_guessed ) ;\n\n        ( $sync->{ debug } or $sync->{debugfolders} ) and myprint( \"$Side: Getting separator\\n\"  ) ;\n        $sep_guessed = guess_separator( @{ $folders_ref } ) ;\n        myprint( \"$Side: guessing separator from folder listing: [$sep_guessed]\\n\"  ) ;\n\n        ( $sync->{ debug } or $sync->{debugfolders} ) and myprint( \"$Side: calling namespace capability\\n\"  ) ;\n        if ( $imap->has_capability( 'namespace' ) )\n        {\n                $sep_out = $imap->separator(  ) ;\n                if ( defined  $sep_out  ) {\n                        myprint( \"$Side: separator given by NAMESPACE: [$sep_out]\\n\"  ) ;\n                        if ( defined  $sep_in  ) {\n                                myprint( \"$Side: but using [$sep_in] given by $sep_opt\\n\"  ) ;\n                                $sep_out = $sep_in ;\n                                return( $sep_out ) ;\n                        }else{\n                                return( $sep_out ) ;\n                        }\n                }else{\n                        if ( defined  $sep_in  ) {\n                                myprint( \"$Side: NAMESPACE request failed but using [$sep_in] given by $sep_opt\\n\"  ) ;\n                                $sep_out = $sep_in ;\n                                return( $sep_out ) ;\n                        }else{\n                                myprint(\n                                \"$Side: NAMESPACE request failed so using guessed separator [$sep_guessed]\\n\",\n                                help_to_guess_sep( $imap, $sep_opt ) ) ;\n                                return( $sep_guessed ) ;\n                        }\n                }\n        }\n        else\n        {\n                if ( defined  $sep_in  ) {\n                        myprint( \"$Side: No NAMESPACE capability but using [$sep_in] given by $sep_opt\\n\"  ) ;\n                        $sep_out = $sep_in ;\n                        return( $sep_out ) ;\n                }else{\n                        myprint(\n                        \"$Side: No NAMESPACE capability, so using guessed separator [$sep_guessed]\\n\",\n                        help_to_guess_sep( $imap, $sep_opt ) ) ;\n                        return( $sep_guessed ) ;\n                }\n        }\n        return ;\n}\n\nsub help_to_guess_sep\n{\n        my( $imap, $sep_opt ) = @_ ;\n\n        my $help_to_guess_sep = \"You can set the separator character with the $sep_opt option,\\n\"\n        . \"the complete listing of folders may help you to find it\\n\"\n        . folders_list_to_help( $imap ) ;\n\n        return( $help_to_guess_sep ) ;\n}\n\nsub help_to_guess_prefix\n{\n        my( $imap, $prefix_opt ) = @_ ;\n\n        my $help_to_guess_prefix = \"You can set the prefix namespace with the $prefix_opt option,\\n\"\n        . \"the folowing listing of folders may help you to find it:\\n\"\n        . folders_list_to_help( $imap ) ;\n\n        return( $help_to_guess_prefix ) ;\n}\n\n\nsub folders_list_to_help\n{\n        my( $imap ) = shift ;\n\n        my @folders = $imap->folders ;\n        my $listing = join q{}, map { \"[$_]\\n\" } @folders ;\n        return( $listing ) ;\n}\n\n# Globals are $sync @h1_folders_all @h2_folders_all $prefix1 $prefix2\nsub private_folders_separators_and_prefixes\n{\n# what are the private folders separators and prefixes for each server ?\n\n        ( $sync->{ debug } or $sync->{debugfolders} ) and myprint( \"Getting separators\\n\"  ) ;\n        $sync->{ h1_sep } = get_separator( $sync->{imap1}, $sync->{ sep1 }, '--sep1', 'Host1', \\@h1_folders_all ) ;\n        $sync->{ h2_sep } = get_separator( $sync->{imap2}, $sync->{ sep2 }, '--sep2', 'Host2', \\@h2_folders_all ) ;\n\n\n        $sync->{ h1_prefix } = get_prefix( $sync->{imap1}, $prefix1, '--prefix1', 'Host1', \\@h1_folders_all ) ;\n        $sync->{ h2_prefix } = get_prefix( $sync->{imap2}, $prefix2, '--prefix2', 'Host2', \\@h2_folders_all ) ;\n\n        myprint( \"Host1: separator and prefix: [$sync->{ h1_sep }][$sync->{ h1_prefix }]\\n\"  ) ;\n        myprint( \"Host2: separator and prefix: [$sync->{ h2_sep }][$sync->{ h2_prefix }]\\n\"  ) ;\n        return ;\n}\n\n\nsub subfolder1\n{\n        my $mysync = shift ;\n        my $subfolder1 = sanitize_subfolder( $mysync->{ subfolder1 } ) ;\n\n        if ( $subfolder1 )\n        {\n                # turns off automap\n                myprint( \"Turning off automapping folders because of --subfolder1\\n\"  ) ;\n                $mysync->{ automap } = undef ;\n                myprint( \"Sanitizing subfolder1: [$mysync->{ subfolder1 }] => [$subfolder1]\\n\" ) ;\n                $mysync->{ subfolder1 } = $subfolder1 ;\n                if ( ! add_subfolder1_to_folderrec( $mysync ) )\n                {\n                        $mysync->{nb_errors}++ ;\n                        exit_clean( $mysync, $EXIT_SUBFOLDER1_NO_EXISTS, \"subfolder1 $subfolder1 does not exist\\n\" ) ;\n                }\n        }\n        else\n        {\n                $mysync->{ subfolder1 } = undef ;\n        }\n\n        return ;\n}\n\nsub subfolder2\n{\n        my $mysync = shift ;\n        my $subfolder2 = sanitize_subfolder( $mysync->{ subfolder2 } ) ;\n        if ( $subfolder2 )\n        {\n                # turns off automap\n                myprint( \"Turning off automapping folders because of --subfolder2\\n\"  ) ;\n                $mysync->{ automap } = undef ;\n                myprint( \"Sanitizing subfolder2: [$mysync->{ subfolder2 }] => [$subfolder2]\\n\" ) ;\n                $mysync->{ subfolder2 } = $subfolder2 ;\n                set_regextrans2_for_subfolder2( $mysync ) ;\n        }\n        else\n        {\n                $mysync->{ subfolder2 } = undef ;\n        }\n\n        return ;\n}\n\nsub tests_sanitize_subfolder\n{\n        note( 'Entering tests_sanitize_subfolder()' ) ;\n\n        is( undef, sanitize_subfolder(  ),  'sanitize_subfolder: no args => undef' ) ;\n        is( undef, sanitize_subfolder( q{} ),  'sanitize_subfolder: empty => undef' ) ;\n        is( undef, sanitize_subfolder( ' ' ),  'sanitize_subfolder: blank => undef' ) ;\n        is( undef, sanitize_subfolder( '  ' ),  'sanitize_subfolder: blanks => undef' ) ;\n        is( 'abcd', sanitize_subfolder( 'abcd' ),  'sanitize_subfolder: abcd => abcd' ) ;\n        is( 'ab cd', sanitize_subfolder( ' ab cd ' ),  'sanitize_subfolder: \" ab cd \" => \"ab cd\"' ) ;\n        is( 'abcd', sanitize_subfolder( q{a&~b#\\\\c[]=d;} ),  'sanitize_subfolder: \"a&~b#\\\\c[]=d;\" => \"abcd\"' ) ;\n        is( 'aA.b-_ 8c/dD', sanitize_subfolder( 'aA.b-_ 8c/dD' ),  'sanitize_subfolder: aA.b-_ 8c/dD => aA.b-_ 8c/dD' ) ;\n        note( 'Leaving  tests_sanitize_subfolder()' ) ;\n        return ;\n}\n\n\nsub sanitize_subfolder\n{\n        my $subfolder = shift ;\n\n        if ( ! $subfolder )\n        {\n                return ;\n        }\n        # Remove edging blanks\n        $subfolder =~ s,^ +| +$,,g ;\n        # Keep only abcd...ABCD...0123... and -_./\n        $subfolder =~ tr,-_a-zA-Z0-9./ ,,cd ;\n\n        # A blank subfolder is not a subfolder\n        if ( ! $subfolder )\n        {\n                return ;\n        }\n        else\n        {\n                return $subfolder ;\n        }\n}\n\nsub tests_sanitize_host\n{\n        note( 'Entering tests_sanitize_host()' ) ;\n\n        is( undef, sanitize_host(  ),  'sanitize_host: no args => undef' ) ;\n        is( '', sanitize_host( '' ),  'sanitize_host: empty => empty' ) ;\n        is( 'imap.example.org', sanitize_host( 'imap.example.org' ),         'sanitize_host: imap.example.org => imap.example.org' ) ;\n        is( 'imap.example.org', sanitize_host( ' imap.example.org' ),        'sanitize_host: imap.example.org 1 => imap.example.org' ) ;\n        is( 'imap.example.org', sanitize_host( 'imap.example.org ' ),        'sanitize_host: imap.example.org 2 => imap.example.org' ) ;\n        is( 'imap.example.org', sanitize_host( 'imap.exam  ple.org' ),       'sanitize_host: imap.example.org 3 => imap.example.org' ) ;\n        is( 'imap.example.org', sanitize_host( '  imap.exam  ple.org   ' ),  'sanitize_host: imap.example.org 4 => imap.example.org' ) ;\n        is( 'imap.example.org', sanitize_host( 'imap.exa/mple.org/' ),        'sanitize_host: imap.example.org/  => imap.example.org' ) ;\n\n        note( 'Leaving  tests_sanitize_host()' ) ;\n        return ;\n}\n\n\nsub sanitize_host\n{\n        my $host = shift ;\n        if ( ! defined $host ) { return ; }\n\n        $host =~ tr{ /}{}d ;\n        return $host ;\n}\n\n\nsub tests_add_subfolder1_to_folderrec\n{\n        note( 'Entering tests_add_subfolder1_to_folderrec()' ) ;\n\n        is( undef, add_subfolder1_to_folderrec(  ),  'add_subfolder1_to_folderrec: undef => undef' ) ;\n        is_deeply( [], [ add_subfolder1_to_folderrec(  ) ], 'add_subfolder1_to_folderrec: no args => empty array' ) ;\n        @folderrec = () ;\n        my $mysync = {} ;\n        is_deeply( [  ], [ add_subfolder1_to_folderrec( $mysync ) ], 'add_subfolder1_to_folderrec: empty => empty array' ) ;\n        is_deeply( [  ], [ @folderrec ], 'add_subfolder1_to_folderrec: empty => empty folderrec' ) ;\n        $mysync->{ subfolder1 } = 'SUBI' ;\n        $h1_folders_all{ 'SUBI' } = 1 ;\n        $mysync->{ h1_prefix } = 'INBOX/' ;\n        is_deeply( [ 'SUBI' ], [ add_subfolder1_to_folderrec( $mysync ) ], 'add_subfolder1_to_folderrec: SUBI => SUBI' ) ;\n        is_deeply( [ 'SUBI' ], [ @folderrec ], 'add_subfolder1_to_folderrec: SUBI => folderrec SUBI ' ) ;\n\n        @folderrec = () ;\n        $mysync->{ subfolder1 } = 'SUBO' ;\n        is_deeply( [  ], [ add_subfolder1_to_folderrec( $mysync ) ], 'add_subfolder1_to_folderrec: SUBO no exists => empty array' ) ;\n        is_deeply( [  ], [ @folderrec ], 'add_subfolder1_to_folderrec: SUBO no exists => empty folderrec' ) ;\n        $h1_folders_all{ 'INBOX/SUBO' } = 1 ;\n        is_deeply( [ 'INBOX/SUBO' ], [ add_subfolder1_to_folderrec( $mysync ) ], 'add_subfolder1_to_folderrec: SUBO + INBOX/SUBO exists => INBOX/SUBO' ) ;\n        is_deeply( [ 'INBOX/SUBO' ], [ @folderrec ], 'add_subfolder1_to_folderrec: SUBO + INBOX/SUBO exists => INBOX/SUBO folderrec' ) ;\n\n        note( 'Leaving  tests_add_subfolder1_to_folderrec()' ) ;\n        return ;\n}\n\n\nsub add_subfolder1_to_folderrec\n{\n        my $mysync = shift ;\n        if ( ! $mysync || ! $mysync->{ subfolder1 } )\n        {\n                return ;\n        }\n\n        my $subfolder1 = $mysync->{ subfolder1 } ;\n        my $subfolder1_extended = $mysync->{ h1_prefix } . $subfolder1 ;\n\n        if ( exists  $h1_folders_all{ $subfolder1 }  )\n        {\n                myprint( qq{Acting like --folderrec \"$subfolder1\"\\n} ) ;\n                push @folderrec, $subfolder1 ;\n        }\n        elsif ( exists  $h1_folders_all{ $subfolder1_extended } )\n        {\n                myprint( qq{Acting like --folderrec \"$subfolder1_extended\"\\n} ) ;\n                push @folderrec, $subfolder1_extended ;\n        }\n        else\n        {\n                myprint( qq{Nor folder \"$subfolder1\" nor \"$subfolder1_extended\" exists on host1\\n} ) ;\n        }\n        return @folderrec ;\n}\n\nsub set_regextrans2_for_subfolder2\n{\n        my $mysync = shift ;\n\n\n        unshift @{ $mysync->{ regextrans2 } },\n                q(s,^$mysync->{ h2_prefix }(.*),$mysync->{ h2_prefix }$mysync->{ subfolder2 }$mysync->{ h2_sep }$1,),\n                q(s,^INBOX$,$mysync->{ h2_prefix }$mysync->{ subfolder2 }$mysync->{ h2_sep }INBOX,),\n                q(s,^($mysync->{ h2_prefix }){2},$mysync->{ h2_prefix },);\n\n        #myprint( \"@{ $mysync->{ regextrans2 } }\\n\" ) ;\n        return ;\n}\n\n\n\n# Looks like no globals here\n\nsub tests_imap2_folder_name\n{\n        note( 'Entering tests_imap2_folder_name()' ) ;\n\n        my $mysync = {} ;\n        $mysync->{ h1_prefix } = q{} ;\n        $mysync->{ h2_prefix } = q{} ;\n        $mysync->{ h1_sep } = '/';\n        $mysync->{ h2_sep } = '.';\n\n        $mysync->{ debug } and myprint( <<\"EOS\"\nprefix1: [$mysync->{ h1_prefix }]\nprefix2: [$mysync->{ h2_prefix }]\nsep1:    [$sync->{ h1_sep }]\nsep2:    [$sync->{ h2_sep }]\nEOS\n) ;\n\n        $mysync->{ fixslash2 } = 0 ;\n        is( q{INBOX}, imap2_folder_name( $mysync, q{} ), 'imap2_folder_name: empty string' ) ;\n        is( 'blabla', imap2_folder_name( $mysync, 'blabla' ), 'imap2_folder_name: blabla' ) ;\n        is('spam.spam', imap2_folder_name( $mysync, 'spam/spam' ), 'imap2_folder_name: spam/spam' ) ;\n\n        is( 'spam/spam', imap2_folder_name( $mysync, 'spam.spam' ), 'imap2_folder_name: spam.spam') ;\n        is( 'spam.spam/spam', imap2_folder_name( $mysync, 'spam/spam.spam' ), 'imap2_folder_name: spam/spam.spam' ) ;\n        is( 's pam.spam/sp  am', imap2_folder_name( $mysync, 's pam/spam.sp  am' ), 'imap2_folder_name: s pam/spam.sp  am' ) ;\n\n        $mysync->{f1f2h}{ 'auto' } = 'moto' ;\n        is( 'moto', imap2_folder_name( $mysync, 'auto' ), 'imap2_folder_name: auto' ) ;\n        $mysync->{f1f2h}{ 'auto/auto' } = 'moto x 2' ;\n        is( 'moto x 2', imap2_folder_name( $mysync, 'auto/auto' ), 'imap2_folder_name: auto/auto' ) ;\n\n        @{ $mysync->{ regextrans2 } } = ( 's,/,X,g' ) ;\n        is( q{INBOX}, imap2_folder_name( $mysync, q{} ), 'imap2_folder_name: empty string [s,/,X,g]' ) ;\n        is( 'blabla', imap2_folder_name( $mysync, 'blabla' ), 'imap2_folder_name: blabla [s,/,X,g]' ) ;\n        is('spam.spam', imap2_folder_name( $mysync, 'spam/spam'), 'imap2_folder_name: spam/spam [s,/,X,g]');\n        is('spamXspam', imap2_folder_name( $mysync, 'spam.spam'), 'imap2_folder_name: spam.spam [s,/,X,g]');\n        is('spam.spamXspam', imap2_folder_name( $mysync, 'spam/spam.spam'), 'imap2_folder_name: spam/spam.spam [s,/,X,g]');\n\n        @{ $mysync->{ regextrans2 } } = ( 's, ,_,g' ) ;\n        is('blabla', imap2_folder_name( $mysync, 'blabla'), 'imap2_folder_name: blabla [s, ,_,g]');\n        is('bla_bla', imap2_folder_name( $mysync, 'bla bla'), 'imap2_folder_name: blabla [s, ,_,g]');\n\n        @{ $mysync->{ regextrans2 } } = ( q{s,(.*),\\U$1,} ) ;\n        is( 'BLABLA', imap2_folder_name( $mysync, 'blabla' ), q{imap2_folder_name: blabla [s,\\U(.*)\\E,$1,]} ) ;\n\n        $mysync->{ fixslash2 } = 1 ;\n        @{ $mysync->{ regextrans2 } } = (  ) ;\n        is(q{INBOX}, imap2_folder_name( $mysync, q{}), 'imap2_folder_name: empty string');\n        is('blabla', imap2_folder_name( $mysync, 'blabla'), 'imap2_folder_name: blabla');\n        is('spam.spam', imap2_folder_name( $mysync, 'spam/spam'), 'imap2_folder_name: spam/spam -> spam.spam');\n        is('spam_spam', imap2_folder_name( $mysync, 'spam.spam'), 'imap2_folder_name: spam.spam -> spam_spam');\n        is('spam.spam_spam', imap2_folder_name( $mysync, 'spam/spam.spam'), 'imap2_folder_name: spam/spam.spam -> spam.spam_spam');\n        is('s pam.spam_spa  m', imap2_folder_name( $mysync, 's pam/spam.spa  m'), 'imap2_folder_name: s pam/spam.spa m -> s pam.spam_spa  m');\n\n        $mysync->{ h1_sep } = '.';\n        $mysync->{ h2_sep } = '/';\n        is( q{INBOX}, imap2_folder_name( $mysync, q{}), 'imap2_folder_name: empty string');\n        is('blabla', imap2_folder_name( $mysync, 'blabla'), 'imap2_folder_name: blabla');\n        is('spam.spam', imap2_folder_name( $mysync, 'spam/spam'), 'imap2_folder_name: spam/spam -> spam.spam');\n        is('spam/spam', imap2_folder_name( $mysync, 'spam.spam'), 'imap2_folder_name: spam.spam -> spam/spam');\n        is('spam.spam/spam', imap2_folder_name( $mysync, 'spam/spam.spam'), 'imap2_folder_name: spam/spam.spam -> spam.spam/spam');\n\n\n\n        $mysync->{ fixslash2 } = 0 ;\n        $mysync->{ h1_prefix } = q{ };\n\n        is( 'spam.spam/spam', imap2_folder_name( $mysync, 'spam/spam.spam' ), 'imap2_folder_name: spam/spam.spam -> spam.spam/spam' ) ;\n        is( 'spam.spam/spam', imap2_folder_name( $mysync, ' spam/spam.spam' ), 'imap2_folder_name:  spam/spam.spam -> spam.spam/spam' ) ;\n\n        $mysync->{ h1_sep } = '.' ;\n        $mysync->{ h2_sep } = '/' ;\n        $mysync->{ h1_prefix } = 'INBOX.' ;\n        $mysync->{ h2_prefix } = q{} ;\n        @{ $mysync->{ regextrans2 } } = ( q{s,(.*),\\U$1,} ) ;\n        is( 'BLABLA', imap2_folder_name( $mysync, 'blabla' ), 'imap2_folder_name: blabla' ) ;\n        is( 'TEST/TEST/TEST/TEST', imap2_folder_name( $mysync, 'INBOX.TEST.test.Test.tesT' ), 'imap2_folder_name: INBOX.TEST.test.Test.tesT' ) ;\n        @{ $mysync->{ regextrans2 } } = ( q{s,(.*),\\L$1,} ) ;\n        is( 'test/test/test/test', imap2_folder_name( $mysync, 'INBOX.TEST.test.Test.tesT' ), 'imap2_folder_name: INBOX.TEST.test.Test.tesT' ) ;\n\n        # INBOX\n        $mysync = {} ;\n        $mysync->{ h1_prefix } = q{Pf1.} ;\n        $mysync->{ h2_prefix } = q{Pf2/} ;\n        $mysync->{ h1_sep } = '.';\n        $mysync->{ h2_sep } = '/';\n\n        #\n        #$mysync->{ debug } = 1 ;\n        is( 'Pf2/F1/F2/F3', imap2_folder_name( $mysync, 'F1.F2.F3' ), 'imap2_folder_name: F1.F2.F3 -> Pf2/F1/F2/F3' ) ;\n        is( 'Pf2/F1/INBOX', imap2_folder_name( $mysync, 'F1.INBOX' ), 'imap2_folder_name: F1.INBOX -> Pf2/F1/INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'INBOX' ), 'imap2_folder_name: INBOX -> INBOX' ) ;\n\n        is( 'Pf2/F1/F2/F3', imap2_folder_name( $mysync, 'Pf1.F1.F2.F3' ), 'imap2_folder_name: Pf1.F1.F2.F3 -> Pf2/F1/F2/F3' ) ;\n        is( 'Pf2/F1/INBOX', imap2_folder_name( $mysync, 'Pf1.F1.INBOX' ), 'imap2_folder_name: Pf1.F1.INBOX -> Pf2/F1/INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.INBOX' ), 'imap2_folder_name: Pf1.INBOX -> INBOX' ) ; # not Pf2/INBOX: Yes I can!\n\n\n\n        # subfolder2\n        $mysync = {} ;\n        $mysync->{ h1_prefix } = q{} ;\n        $mysync->{ h2_prefix } = q{} ;\n        $mysync->{ h1_sep } = '/';\n        $mysync->{ h2_sep } = '.';\n\n\n        set_regextrans2_for_subfolder2( $mysync ) ;\n        $mysync->{ subfolder2 } = 'S1.S2' ;\n        is( 'S1.S2.F1.F2.F3', imap2_folder_name( $mysync, 'F1/F2/F3' ), 'imap2_folder_name: F1/F2/F3 -> S1.S2.F1.F2.F3' ) ;\n        is( 'S1.S2.INBOX', imap2_folder_name( $mysync, 'INBOX' ), 'imap2_folder_name: F1/F2/F3 -> S1.S2.INBOX' ) ;\n\n        $mysync = {} ;\n        $mysync->{ h1_prefix } = q{Pf1/} ;\n        $mysync->{ h2_prefix } = q{Pf2.} ;\n        $mysync->{ h1_sep } = '/';\n        $mysync->{ h2_sep } = '.';\n        #$mysync->{ debug } = 1 ;\n\n        set_regextrans2_for_subfolder2( $mysync ) ;\n        $mysync->{ subfolder2 } = 'Pf2.S1.S2' ;\n        is( 'Pf2.S1.S2.F1.F2.F3', imap2_folder_name( $mysync, 'F1/F2/F3' ),     'imap2_folder_name: F1/F2/F3 -> Pf2.S1.S2.F1.F2.F3' ) ;\n        is( 'Pf2.S1.S2.INBOX',    imap2_folder_name( $mysync, 'INBOX' ),        'imap2_folder_name: INBOX -> Pf2.S1.S2.INBOX' ) ;\n        is( 'Pf2.S1.S2.F1.F2.F3', imap2_folder_name( $mysync, 'Pf1/F1/F2/F3' ), 'imap2_folder_name: F1/F2/F3 -> Pf2.S1.S2.F1.F2.F3' ) ;\n        is( 'Pf2.S1.S2.INBOX',    imap2_folder_name( $mysync, 'Pf1/INBOX' ),    'imap2_folder_name: INBOX -> Pf2.S1.S2.INBOX' ) ;\n\n        # subfolder1\n        # scenario as the reverse of the previous tests, separators point of vue\n        $mysync = {} ;\n        $mysync->{ h1_prefix } = q{Pf1.} ;\n        $mysync->{ h2_prefix } = q{Pf2/} ;\n        $mysync->{ h1_sep } = '.';\n        $mysync->{ h2_sep } = '/';\n        #$mysync->{ debug } = 1 ;\n\n        $mysync->{ subfolder1 } = 'S1.S2' ;\n        is( 'Pf2/F1/F2/F3', imap2_folder_name( $mysync, 'S1.S2.F1.F2.F3' ), 'imap2_folder_name: S1.S2.F1.F2.F3 -> Pf2/F1/F2/F3' ) ;\n        is( 'Pf2/F1/F2/F3', imap2_folder_name( $mysync, 'Pf1.S1.S2.F1.F2.F3' ), 'imap2_folder_name: Pf1.S1.S2.F1.F2.F3 -> Pf2/F1/F2/F3' ) ;\n\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1.S2.INBOX' ), 'imap2_folder_name: S1.S2.INBOX -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1.S2' ),  'imap2_folder_name: S1.S2 -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1.S2.' ), 'imap2_folder_name: S1.S2. -> INBOX' ) ;\n\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.S1.S2.INBOX' ), 'imap2_folder_name: Pf1.S1.S2.INBOX -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.S1.S2' ),  'imap2_folder_name: Pf1.S1.S2 -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.S1.S2.' ), 'imap2_folder_name: Pf1.S1.S2. -> INBOX' ) ;\n\n\n        $mysync->{ subfolder1 } = 'S1.S2.' ;\n        is( 'Pf2/F1/F2/F3', imap2_folder_name( $mysync, 'S1.S2.F1.F2.F3' ), 'imap2_folder_name: S1.S2.F1.F2.F3 -> Pf2/F1/F2/F3' ) ;\n        is( 'Pf2/F1/F2/F3', imap2_folder_name( $mysync, 'Pf1.S1.S2.F1.F2.F3' ), 'imap2_folder_name: Pf1.S1.S2.F1.F2.F3 -> Pf2/F1/F2/F3' ) ;\n\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1.S2.INBOX' ), 'imap2_folder_name: S1.S2.INBOX -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1.S2' ),  'imap2_folder_name: S1.S2 -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1.S2.' ), 'imap2_folder_name: S1.S2. -> INBOX' ) ;\n\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.S1.S2.INBOX' ), 'imap2_folder_name: Pf1.S1.S2.INBOX -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.S1.S2' ),  'imap2_folder_name: Pf1.S1.S2 -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'Pf1.S1.S2.' ), 'imap2_folder_name: Pf1.S1.S2. -> INBOX' ) ;\n\n\n        # subfolder1\n        # scenario as Gmail\n        $mysync = {} ;\n        $mysync->{ h1_prefix } = q{} ;\n        $mysync->{ h2_prefix } = q{} ;\n        $mysync->{ h1_sep } = '/';\n        $mysync->{ h2_sep } = '/';\n        #$mysync->{ debug } = 1 ;\n\n        $mysync->{ subfolder1 } = 'S1/S2' ;\n        is( 'F1/F2/F3', imap2_folder_name( $mysync, 'S1/S2/F1/F2/F3' ), 'imap2_folder_name: S1/S2/F1/F2/F3 -> F1/F2/F3' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1/S2/INBOX' ), 'imap2_folder_name: S1/S2/INBOX -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1/S2' ),  'imap2_folder_name: S1/S2 -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1/S2/' ), 'imap2_folder_name: S1/S2/ -> INBOX' ) ;\n\n        $mysync->{ subfolder1 } = 'S1/S2/' ;\n        is( 'F1/F2/F3', imap2_folder_name( $mysync, 'S1/S2/F1/F2/F3' ), 'imap2_folder_name: S1/S2/F1/F2/F3 -> F1/F2/F3' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1/S2/INBOX' ), 'imap2_folder_name: S1/S2/INBOX -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1/S2' ),  'imap2_folder_name: S1/S2 -> INBOX' ) ;\n        is( 'INBOX', imap2_folder_name( $mysync, 'S1/S2/' ), 'imap2_folder_name: S1/S2/ -> INBOX' ) ;\n\n\n        note( 'Leaving  tests_imap2_folder_name()' ) ;\n        return ;\n}\n\n\n# Global variables to remove:\n# None?\n\n\nsub imap2_folder_name\n{\n        my $mysync = shift ;\n        my ( $h1_fold ) = shift ;\n        my ( $h2_fold ) ;\n        if ( $mysync->{f1f2h}{ $h1_fold } ) {\n                $h2_fold = $mysync->{f1f2h}{ $h1_fold } ;\n                ( $mysync->{ debug } or $mysync->{debugfolders} ) and myprint( \"f1f2 [$h1_fold] -> [$h2_fold]\\n\"  ) ;\n                return( $h2_fold ) ;\n        }\n        if ( $mysync->{f1f2auto}{ $h1_fold } ) {\n                $h2_fold = $mysync->{f1f2auto}{ $h1_fold } ;\n                ( $mysync->{ debug } or $mysync->{debugfolders} ) and myprint( \"automap [$h1_fold] -> [$h2_fold]\\n\"  ) ;\n                return( $h2_fold ) ;\n        }\n\n        if ( $mysync->{ subfolder1 } )\n        {\n                my $esc_h1_sep = \"\\\\\" . $mysync->{ h1_sep } ;\n                # case where subfolder1 has the sep1 at the end, then remove it\n                my $part_to_removed = remove_last_char_if_is( $mysync->{ subfolder1 }, $mysync->{ h1_sep } ) ;\n                # remove the subfolder1 part and the sep1 if present after\n                $h1_fold =~ s{$part_to_removed($esc_h1_sep)?}{} ;\n                #myprint( \"h1_fold=$h1_fold\\n\" ) ;\n        }\n\n        if ( ( q{} eq $h1_fold ) or ( $mysync->{ h1_prefix } eq $h1_fold ) )\n        {\n                $h1_fold = 'INBOX' ;\n        }\n\n        $h2_fold = prefix_seperator_invertion( $mysync, $h1_fold ) ;\n        $h2_fold = regextrans2( $mysync, $h2_fold ) ;\n        return( $h2_fold ) ;\n}\n\n\nsub tests_remove_last_char_if_is\n{\n        note( 'Entering tests_remove_last_char_if_is()' ) ;\n\n        is( undef, remove_last_char_if_is(  ),  'remove_last_char_if_is: no args => undef' ) ;\n        is( q{}, remove_last_char_if_is( q{} ),  'remove_last_char_if_is: empty => empty' ) ;\n        is( q{}, remove_last_char_if_is( q{}, 'Z' ),  'remove_last_char_if_is: empty Z => empty' ) ;\n        is( q{}, remove_last_char_if_is( 'Z', 'Z' ),  'remove_last_char_if_is: Z Z => empty' ) ;\n        is( 'abc', remove_last_char_if_is( 'abcZ', 'Z' ),  'remove_last_char_if_is: abcZ Z => abc' ) ;\n        is( 'abcY', remove_last_char_if_is( 'abcY', 'Z' ),  'remove_last_char_if_is: abcY Z => abcY' ) ;\n        note( 'Leaving  tests_remove_last_char_if_is()' ) ;\n        return ;\n}\n\n\n\n\nsub remove_last_char_if_is\n{\n        my $string = shift ;\n        my $char   = shift ;\n\n        if ( ! defined $string )\n        {\n                return ;\n        }\n\n        if ( ! defined $char )\n        {\n                return $string ;\n        }\n\n        my $last_char = substr $string, -1 ;\n        if ( $char eq $last_char )\n        {\n                chop $string ;\n                return $string ;\n        }\n        else\n        {\n                return $string ;\n        }\n}\n\nsub tests_prefix_seperator_invertion\n{\n        note( 'Entering tests_prefix_seperator_invertion()' ) ;\n\n        is( undef, prefix_seperator_invertion(  ),                     'prefix_seperator_invertion: no args => undef' ) ;\n        is( q{}, prefix_seperator_invertion( undef, q{} ),             'prefix_seperator_invertion: empty string => empty string' ) ;\n        is( 'lalala', prefix_seperator_invertion( undef, 'lalala' ),   'prefix_seperator_invertion: lalala => lalala' ) ;\n        is( 'lal/ala', prefix_seperator_invertion( undef, 'lal/ala' ), 'prefix_seperator_invertion: lal/ala => lal/ala' ) ;\n        is( 'lal.ala', prefix_seperator_invertion( undef, 'lal.ala' ), 'prefix_seperator_invertion: lal.ala => lal.ala' ) ;\n        is( '////', prefix_seperator_invertion( undef, '////' ),       'prefix_seperator_invertion: //// => ////' ) ;\n        is( '.....', prefix_seperator_invertion( undef, '.....' ),     'prefix_seperator_invertion: ..... => .....' ) ;\n\n        my $mysync  = {\n                h1_prefix => q{},\n                h2_prefix => q{},\n                h1_sep    => '/',\n                h2_sep    => '/',\n        } ;\n\n        is( q{}, prefix_seperator_invertion( $mysync, q{} ),             'prefix_seperator_invertion: $mysync empty string => empty string' ) ;\n        is( 'lalala', prefix_seperator_invertion( $mysync, 'lalala' ),   'prefix_seperator_invertion: $mysync lalala => lalala' ) ;\n        is( 'lal/ala', prefix_seperator_invertion( $mysync, 'lal/ala' ), 'prefix_seperator_invertion: $mysync lal/ala => lal/ala' ) ;\n        is( 'lal.ala', prefix_seperator_invertion( $mysync, 'lal.ala' ), 'prefix_seperator_invertion: $mysync lal.ala => lal.ala' ) ;\n        is( '////', prefix_seperator_invertion( $mysync, '////' ),       'prefix_seperator_invertion: $mysync //// => ////' ) ;\n        is( '.....', prefix_seperator_invertion( $mysync, '.....' ),     'prefix_seperator_invertion: $mysync ..... => .....' ) ;\n\n        $mysync  = {\n                h1_prefix => 'PPP',\n                h2_prefix => 'QQQ',\n                h1_sep    => 's',\n                h2_sep    => 't',\n        } ;\n\n        is( q{QQQ}, prefix_seperator_invertion( $mysync, q{} ),           'prefix_seperator_invertion: PPPQQQst empty string => QQQ' ) ;\n        is( 'QQQlalala', prefix_seperator_invertion( $mysync, 'lalala' ), 'prefix_seperator_invertion: PPPQQQst lalala => QQQlalala' ) ;\n        is( 'QQQlal/ala', prefix_seperator_invertion( $mysync, 'lal/ala' ),  'prefix_seperator_invertion: PPPQQQst lal/ala => QQQlal/ala' ) ;\n        is( 'QQQlal.ala', prefix_seperator_invertion( $mysync, 'lal.ala' ),  'prefix_seperator_invertion: PPPQQQst lal.ala => QQQlal.ala' ) ;\n        is( 'QQQ////', prefix_seperator_invertion( $mysync, '////' ),        'prefix_seperator_invertion: PPPQQQst //// => QQQ////' ) ;\n        is( 'QQQ.....', prefix_seperator_invertion( $mysync, '.....' ),      'prefix_seperator_invertion: PPPQQQst ..... => QQQ.....' ) ;\n\n        is( 'QQQPlalala', prefix_seperator_invertion( $mysync, 'PPPPlalala' ),   'prefix_seperator_invertion: PPPQQQst PPPPlalala => QQQPlalala' ) ;\n        is( 'QQQ', prefix_seperator_invertion( $mysync, 'PPP' ),                 'prefix_seperator_invertion: PPPQQQst PPP => QQQ' ) ;\n        is( 'QQQttt', prefix_seperator_invertion( $mysync, 'sss' ),              'prefix_seperator_invertion: PPPQQQst sss => QQQttt' ) ;\n        is( 'QQQt', prefix_seperator_invertion( $mysync, 's' ),                  'prefix_seperator_invertion: PPPQQQst s => QQQt' ) ;\n        is( 'QQQtAAAtBBB', prefix_seperator_invertion( $mysync, 'PPPsAAAsBBB' ), 'prefix_seperator_invertion: PPPQQQst PPPsAAAsBBB => QQQtAAAtBBB' ) ;\n\n        note( 'Leaving  tests_prefix_seperator_invertion()' ) ;\n        return ;\n}\n\n# Global variables to remove:\n\n\nsub prefix_seperator_invertion\n{\n        my $mysync  = shift ;\n        my $h1_fold = shift ;\n        my $h2_fold ;\n\n        if ( not defined $h1_fold ) { return ; }\n\n        my $my_h1_prefix =  $mysync->{ h1_prefix } || q{} ;\n        my $my_h2_prefix =  $mysync->{ h2_prefix } || q{} ;\n        my $my_h1_sep    = $mysync->{ h1_sep } || '/' ;\n        my $my_h2_sep    = $mysync->{ h2_sep } || '/' ;\n\n        # first we remove the prefix\n        $h1_fold =~ s/^\\Q$my_h1_prefix\\E//x ;\n        ( $mysync->{ debug } or $mysync->{debugfolders} ) and myprint( \"removed host1 prefix: [$h1_fold]\\n\"  ) ;\n        $h2_fold = separator_invert( $mysync, $h1_fold, $my_h1_sep, $my_h2_sep ) ;\n        ( $mysync->{ debug } or $mysync->{debugfolders} ) and myprint( \"inverted separators: [$h2_fold]\\n\"  ) ;\n\n        # Adding the prefix supplied by namespace or the --prefix2 option\n        # except for INBOX or Inbox\n        if ( $h2_fold !~ m/^INBOX$/xi )\n        {\n                $h2_fold = $my_h2_prefix . $h2_fold ;\n        }\n\n        ( $mysync->{ debug } or $mysync->{debugfolders} ) and myprint( \"added host2 prefix: [$h2_fold]\\n\"  ) ;\n        return( $h2_fold ) ;\n}\n\nsub tests_separator_invert\n{\n\tnote( 'Entering tests_separator_invert()' ) ;\n\n        my $mysync = {} ;\n        $mysync->{ fixslash2 } = 0 ;\n        ok( not( defined separator_invert(  )  ), 'separator_invert: no args' ) ;\n        ok( not( defined separator_invert( q{} ) ), 'separator_invert: not enough args' ) ;\n        ok( not( defined separator_invert( q{}, q{} ) ), 'separator_invert: not enough args' ) ;\n\n        ok( q{} eq separator_invert( $mysync, q{}, q{}, q{} ), 'separator_invert: 3 empty strings' ) ;\n        ok( 'lalala' eq separator_invert( $mysync, 'lalala', q{}, q{} ), 'separator_invert: empty separator' ) ;\n        ok( 'lalala' eq separator_invert( $mysync, 'lalala', '/', '/' ), 'separator_invert: same separator /' ) ;\n        ok( 'lal/ala' eq separator_invert( $mysync, 'lal/ala', '/', '/' ), 'separator_invert: same separator / 2' ) ;\n        ok( 'lal.ala' eq separator_invert( $mysync, 'lal/ala', '/', '.' ), 'separator_invert: separators /.' ) ;\n        ok( 'lal/ala' eq separator_invert( $mysync, 'lal.ala', '.', '/' ), 'separator_invert: separators ./' ) ;\n        ok( 'la.l/ala' eq separator_invert( $mysync, 'la/l.ala', '.', '/' ), 'separator_invert: separators ./' ) ;\n\n        ok( 'l/al.ala' eq separator_invert( $mysync, 'l.al/ala', '/', '.' ), 'separator_invert: separators /.' ) ;\n        $mysync->{ fixslash2 } = 1 ;\n        ok( 'l_al.ala' eq separator_invert( $mysync, 'l.al/ala', '/', '.' ), 'separator_invert: separators /.' ) ;\n\n\tnote( 'Leaving  tests_separator_invert()' ) ;\n        return ;\n}\n\n# Global variables to remove:\n#\nsub separator_invert\n{\n        my( $mysync, $h1_fold, $h1_separator, $h2_separator ) = @_ ;\n\n        return( undef ) if ( not all_defined( $mysync, $h1_fold, $h1_separator, $h2_separator ) ) ;\n        # The separator we hope we'll never encounter: 00000000 == 0x00\n        my $o_sep = \"\\000\" ;\n\n        my $h2_fold = $h1_fold ;\n        $h2_fold =~ s,\\Q$h2_separator,$o_sep,xg ;\n        $h2_fold =~ s,\\Q$h1_separator,$h2_separator,xg ;\n        $h2_fold =~ s,\\Q$o_sep,$h1_separator,xg ;\n        $h2_fold =~ s,/,_,xg if( $mysync->{ fixslash2 } and '/' ne $h2_separator and '/' eq $h1_separator ) ;\n        return( $h2_fold ) ;\n}\n\n\nsub regextrans2\n{\n        my( $mysync, $h2_fold ) = @_ ;\n        # Transforming the folder name by the --regextrans2 option(s)\n        foreach my $regextrans2 ( @{ $mysync->{ regextrans2 } } ) {\n                my $h2_fold_before = $h2_fold ;\n                my $ret = eval \"\\$h2_fold =~ $regextrans2 ; 1 \" ;\n                ( $mysync->{ debug } or $mysync->{debugfolders} ) and myprint( \"[$h2_fold_before] -> [$h2_fold] using regextrans2 [$regextrans2]\\n\"  ) ;\n                if ( not ( defined  $ret  ) or $EVAL_ERROR ) {\n                        $mysync->{nb_errors}++ ;\n                        exit_clean( $mysync, $EX_USAGE,\n                                \"error: eval regextrans2 '$regextrans2': $EVAL_ERROR\\n\"\n                        ) ;\n                }\n        }\n        return( $h2_fold ) ;\n}\n\n\nsub tests_decompose_regex\n{\n\tnote( 'Entering tests_decompose_regex()' ) ;\n\n        ok( 1, 'decompose_regex 1' ) ;\n        ok( 0 == compare_lists( [ q{}, q{} ], [ decompose_regex( q{} ) ] ), 'decompose_regex empty string' ) ;\n        ok( 0 == compare_lists( [ '.*', 'lala' ], [ decompose_regex( 's/.*/lala/' ) ] ), 'decompose_regex s/.*/lala/' ) ;\n\n\tnote( 'Leaving  tests_decompose_regex()' ) ;\n        return ;\n}\n\nsub decompose_regex\n{\n        my $regex = shift ;\n        my( $left_part, $right_part ) ;\n\n        ( $left_part, $right_part ) = $regex =~ m{^s/((?:[^/]|\\\\/)+)/((?:[^/]|\\\\/)+)/}x;\n        return( q{}, q{} ) if not $left_part ;\n        return( $left_part, $right_part ) ;\n}\n\n\n\nsub tests_timenext\n{\n        note( 'Entering tests_timenext()' ) ;\n\n        is( undef, timenext(  ),  'timenext: no args => undef' ) ;\n        my $mysync ;\n        is( undef, timenext( $mysync ),  'timenext: undef => undef' ) ;\n        $mysync = {} ;\n        ok( time - timenext( $mysync ) <= 1e-02,  'timenext: defined first time => ~ time' ) ;\n        ok( timenext( $mysync ) <= 1e-02,  'timenext: second time => less than 1e-02' ) ;\n        ok( timenext( $mysync ) <= 1e-02,  'timenext: third time => less than 1e-02' ) ;\n\n        note( 'Leaving  tests_timenext()' ) ;\n        return ;\n}\n\n\nsub timenext\n{\n        my $mysync = shift ;\n\n        if ( ! defined $mysync )\n        {\n                return ;\n        }\n        my ( $timenow, $timediff ) ;\n\n        $mysync->{ timebefore } ||= 0; # epoch...\n        $timenow    = time ;\n        $timediff   = $timenow - $mysync->{ timebefore } ;\n        $mysync->{ timebefore } = $timenow ;\n        # myprint( \"timenext: $timediff\\n\" ) ;\n        return( $timediff ) ;\n}\n\n\nsub tests_timesince\n{\n        note( 'Entering tests_timesince()' ) ;\n\n        ok( timesince( time - 1 ) - 1 <= 1e-02,  'timesince: time - 1 => <= 1 + 1e-02'  ) ;\n        ok( timesince( time )    <= 1e-02,     'timesince: time => <= 1e-02'  ) ;\n        ok( timesince(  ) - time <= 1e-02,  'timesince: no args => <= time + 1e-02'  ) ;\n        note( 'Leaving  tests_timesince()' ) ;\n        return ;\n}\n\n\n\nsub timesince\n{\n        my $timeinit = shift || 0 ;\n        my ( $timenow, $timediff ) ;\n        $timenow    = time ;\n        $timediff   = $timenow - $timeinit ;\n        # Often used in a division so no 0 but a nano seconde.\n        return( max( $timediff, min( 1e-09, $timediff ) ) ) ;\n}\n\n\n\n\nsub tests_regexflags\n{\n        note( 'Entering tests_regexflags()' ) ;\n\n        my $mysync = {} ;\n\n        ok( q{} eq regexflags( $mysync, q{} ), 'regexflags, null string q{}' ) ;\n        ok( q{\\Seen NonJunk $Spam} eq regexflags( $mysync, q{\\Seen NonJunk $Spam} ), q{regexflags, nothing to do} ) ;\n\n        @{ $mysync->{ regexflag } } = ('I am BAD' ) ;\n        ok( not ( defined regexflags( $mysync, q{} ) ), 'regexflags, bad regex' ) ;\n\n        @{ $mysync->{ regexflag } } = ( 's/NonJunk//g' ) ;\n        ok( q{\\Seen  $Spam} eq regexflags( $mysync, q{\\Seen NonJunk $Spam} ), q{regexflags, remove NonJunk: 's/NonJunk//g'} ) ;\n        @{ $mysync->{ regexflag } } = ( q{s/\\$Spam//g} ) ;\n        ok( q{\\Seen NonJunk } eq regexflags( $mysync, q{\\Seen NonJunk $Spam} ), q{regexflags, remove $Spam: 's/\\$Spam//g'} ) ;\n\n        @{ $mysync->{ regexflag } } = ( 's/\\\\\\\\Seen//g' ) ;\n\n        ok( q{ NonJunk $Spam} eq regexflags( $mysync, q{\\Seen NonJunk $Spam} ), q{regexflags, remove \\Seen: 's/\\\\\\\\\\\\\\\\Seen//g'} ) ;\n\n        @{ $mysync->{ regexflag } } = ( 's/(\\s|^)[^\\\\\\\\]\\w+//g' ) ;\n        ok( q{\\Seen \\Middle \\End}   eq regexflags( $mysync, q{\\Seen NonJunk \\Middle $Spam \\End} ), q{regexflags: only \\word among \\Seen NonJunk \\Middle $Spam \\End} ) ;\n        ok( q{ \\Seen \\Middle \\End1} eq regexflags( $mysync, q{Begin \\Seen NonJunk \\Middle $Spam \\End1 End} ),\n                     q{regexflags: only \\word among Begin \\Seen NonJunk \\Middle $Spam \\End1 End} ) ;\n\n        @{ $mysync->{ regexflag } } = ( q{s/.*?(Keep1|Keep2|Keep3)/$1 /g} ) ;\n        ok( 'Keep1 Keep2  ReB' eq regexflags( $mysync, 'ReA Keep1 REM Keep2 ReB' ), 'Keep only regex' ) ;\n\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'REM REM Keep1 Keep2' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'Keep1 REM REM Keep2' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'REM Keep1 REM REM  Keep2' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'Keep1 Keep2' ), 'Keep only regex' ) ;\n        ok( 'Keep1 ' eq regexflags( $mysync, 'REM Keep1' ), 'Keep only regex' ) ;\n\n        @{ $mysync->{ regexflag } } = ( q{s/(Keep1|Keep2|Keep3) (?!(Keep1|Keep2|Keep3)).*/$1 /g} ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'Keep1 Keep2 ReB' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'Keep1 Keep2 REM REM  REM' ), 'Keep only regex' ) ;\n        ok( 'Keep2 ' eq regexflags( $mysync, 'Keep2 REM REM  REM' ), 'Keep only regex' ) ;\n\n\n        @{ $mysync->{ regexflag } } = ( q{s/.*?(Keep1|Keep2|Keep3)/$1 /g},\n           's/(Keep1|Keep2|Keep3) (?!(Keep1|Keep2|Keep3)).*/$1 /g' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'REM Keep1 REM Keep2 REM' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'Keep1 REM Keep2 REM' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'REM Keep1 Keep2 REM' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 ' eq regexflags( $mysync, 'REM Keep1 REM Keep2' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep2 Keep3 ' eq regexflags( $mysync, 'REM Keep1 REM Keep2 REM REM Keep3 REM' ), 'Keep only regex' ) ;\n        ok( 'Keep1 ' eq regexflags( $mysync, 'REM  REM Keep1 REM REM REM ' ), 'Keep only regex' ) ;\n        ok( 'Keep1 Keep3 ' eq regexflags( $mysync, 'RE1 Keep1 RE2 Keep3 RE3 RE4 RE5 ' ), 'Keep only regex' ) ;\n\n        @{ $mysync->{ regexflag } } = ( 's/(.*)/$1 jrdH8u/' ) ;\n        ok('REM  REM  REM REM REM jrdH8u' eq regexflags( $mysync, 'REM  REM  REM REM REM' ), q{Add jrdH8u 's/(.*)/\\$1 jrdH8u/'} ) ;\n        @{ $mysync->{ regexflag } } = ('s/jrdH8u *//' );\n        ok('REM  REM  REM REM REM ' eq regexflags( $mysync, 'REM  REM  REM REM REM jrdH8u' ), q{Remove jrdH8u s/jrdH8u *//} ) ;\n\n        @{ $mysync->{ regexflag } } = (\n        's/.*?(?:(\\\\\\\\(?:Answered|Flagged|Deleted|Seen|Draft)\\s?)|$)/defined($1)?$1:q()/eg'\n        );\n\n        ok( '\\\\Deleted \\\\Answered '\n        eq regexflags( $mysync, 'Blabla \\$Junk \\\\Deleted machin \\\\Answered truc' ),\n        'Keep only regex: Exchange case (Phil)' ) ;\n\n        ok( q{} eq regexflags( $mysync, q{} ), 'Keep only regex: Exchange case, null string (Phil)' ) ;\n\n        ok( q{}\n        eq regexflags( $mysync, 'Blabla $Junk  machin  truc' ),\n        'Keep only regex: Exchange case, no accepted flags (Phil)' ) ;\n\n        ok('\\\\Deleted \\\\Answered \\\\Draft \\\\Flagged '\n        eq regexflags( $mysync, '\\\\Deleted    \\\\Answered  \\\\Draft \\\\Flagged ' ),\n        'Keep only regex: Exchange case (Phil)' ) ;\n\n        @{ $mysync->{ regexflag } } = ( 's/\\\\\\\\Flagged//g' ) ;\n\n        is('\\Deleted \\Answered \\Draft  ',\n        regexflags( $mysync, '\\\\Deleted \\\\Answered \\\\Draft \\\\Flagged ' ),\n        'regexflags: remove \\Flagged 1' ) ;\n\n        is('\\\\Deleted  \\\\Answered \\\\Draft',\n        regexflags( $mysync, '\\\\Deleted \\\\Flagged \\\\Answered \\\\Draft' ),\n        'regexflags: remove \\Flagged 2' ) ;\n\n        # I didn't understand why it gives \\F\n        # https://perldoc.perl.org/perlrebackslash.html\n        # \\F                Foldcase till \\E.  Not in [].\n        # https://perldoc.perl.org/functions/fc.html\n\n        # \\F Not available in old Perl so I comment the test\n\n        # @{ $mysync->{ regexflag } } = ( 's/\\\\Flagged/X/g' ) ;\n        #is('\\Deleted FX \\Answered \\FX \\Draft \\FX',\n        #regexflags( '\\Deleted Flagged \\Answered \\Flagged \\Draft \\Flagged' ),\n        # 'regexflags: remove \\Flagged 3 mistery...' ) ;\n\n        $mysync->{ regexflag } = [  ] ;\n        $mysync->{ filterbuggyflags } = 1 ;\n        filterbuggyflags( $mysync ) ;\n\n        is( '\\Deleted \\Answered  \\Draft  \\Flagged',\n        regexflags( $mysync, '\\\\Deleted \\\\Answered \\\\RECEIPTCHECKED \\\\Draft \\\\Indexed \\\\Flagged' ),\n        'regexflags: remove famous /X 1' ) ;\n\n        is( '\\\\Deleted  \\\\Flagged \\\\Answered  \\\\Draft',\n        regexflags( $mysync, '\\\\Deleted \\\\RECEIPTCHECKED \\\\Flagged \\\\Answered \\\\Indexed \\\\Draft' ),\n        'regexflags: remove famous /X 2' ) ;\n\n        is( '\\ ', '\\\\ ',  'regexflags: \\ is \\\\ ' ) ;\n        is( '\\\\ ', '\\\\ ', 'regexflags: \\\\ is \\\\ ' ) ;\n        is( '\\\\ \\ ', '\\ \\\\ ', 'regexflags: \\\\ \\ is \\ \\\\ ' ) ;\n        note( 'Leaving  tests_regexflags()' ) ;\n        return ;\n}\n\nsub regexflags\n{\n        my $mysync = shift ;\n        my $flags = shift ;\n\n        foreach my $regexflag ( @{ $mysync->{ regexflag } } )\n        {\n                my $flags_orig = $flags ;\n                $debugflags and myprint( \"eval \\$flags =~ $regexflag\\n\"  ) ;\n                my $ret = eval \"\\$flags =~ $regexflag ; 1 \" ;\n                $debugflags and myprint( \"regexflag $regexflag [$flags_orig] -> [$flags]\\n\"  ) ;\n                if( not ( defined $ret ) or $EVAL_ERROR ) {\n                        myprint( \"Error: eval regexflag '$regexflag': $EVAL_ERROR\\n\"  ) ;\n                        return( undef ) ;\n                }\n        }\n        return( $flags ) ;\n}\n\n\nsub filterbuggyflags\n{\n        my $mysync = shift ;\n        if ( $mysync->{ filterbuggyflags } )\n        {\n                unshift @{ $mysync->{ regexflag } }, buggyflagsregex(  ) ;\n        }\n        return ;\n}\n\n\nsub tests_remove_doublequotes_if_any\n{\n        note( 'Entering tests_remove_doublequotes_if_any()' ) ;\n        # the number of tests is stupid here\n        is( undef, remove_doublequotes_if_any(  ),  'remove_doublequotes_if_any: no args => undef' ) ;\n        is( q{}, remove_doublequotes_if_any( q{} ),  'remove_doublequotes_if_any: empty string => empty string' ) ;\n        is( q{}, remove_doublequotes_if_any( q{\"\"} ),  'remove_doublequotes_if_any: double-quotes => empty string' ) ;\n        is( q{}, remove_doublequotes_if_any( q{\"\"\"} ),  'remove_doublequotes_if_any: double-quotes => empty string' ) ;\n        is( q{}, remove_doublequotes_if_any( q{\"\"\"} ),  'remove_doublequotes_if_any: double-quotes => empty string' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{\"toto\"} ),   'remove_doublequotes_if_any: \"toto\"   => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{toto} ),     'remove_doublequotes_if_any: toto     => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{to\"to} ),    'remove_doublequotes_if_any: to\"to    => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{toto\"} ),    'remove_doublequotes_if_any: toto\"    => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{\"toto} ),    'remove_doublequotes_if_any: \"toto    => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{\"to\"to} ),   'remove_doublequotes_if_any: \"to\"to   => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{to\"to\"} ),   'remove_doublequotes_if_any: to\"to\"   => toto' ) ;\n\n        is( q{toto}, remove_doublequotes_if_any( q{to\\\"to} ),   'remove_doublequotes_if_any: to\\\"to   => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{toto\\\"} ),   'remove_doublequotes_if_any: toto\\\"   => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{\\\"toto} ),   'remove_doublequotes_if_any: \\\"toto   => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{\\\"to\\\"to} ), 'remove_doublequotes_if_any: \\\"to\\\"to => toto' ) ;\n        is( q{toto}, remove_doublequotes_if_any( q{to\\\"to\\\"} ), 'remove_doublequotes_if_any: to\\\"to\"  => toto' ) ;\n\n\n        note( 'Leaving  tests_remove_doublequotes_if_any()' ) ;\n        return ;\n}\n\n\n\nsub remove_doublequotes_if_any\n{\n        my $string = shift ;\n\n        if ( ! defined $string ) { return ; }\n        $string =~ s/\\\\\\\"//g ;\n        $string =~ tr/\"//d ;\n        return $string ;\n}\n\n\n# No globals here\nsub acls_sync\n{\n# https://tools.ietf.org/html/rfc4314\n# Standard Rights:\n# https://tools.ietf.org/html/rfc4314#section-2.1\n\n        my( $mysync, $h1_fold, $h2_fold ) = @_ ;\n        if ( $mysync->{ syncacls } ) {\n                my $h1_hash = $mysync->{imap1}->getacl($h1_fold)\n                  or myprint( \"Host1: Could not getacl for $h1_fold: $EVAL_ERROR\\n\" ) ;\n                my $h2_hash = $mysync->{imap2}->getacl($h2_fold)\n                  or myprint( \"Host2: Could not getacl for $h2_fold: $EVAL_ERROR\\n\" ) ;\n\n                my %users = map { ($_, 1) } ( keys  %{ $h1_hash} , keys %{ $h2_hash }  ) ;\n                foreach my $user (sort keys %users ) {\n                        my $h1_acl = remove_doublequotes_if_any( $h1_hash->{$user} ) || '' ;\n                        my $h2_acl = remove_doublequotes_if_any( $h2_hash->{$user} ) || '' ;\n                        myprint( \"Host1: user $user has acl [$h1_acl] on host1\\n\" ) ;\n                        myprint( \"Host2: user $user has acl [$h2_acl] on host2\\n\" ) ;\n                        # removes surrounding double-quotes if any\n                        my $user_no_quotes = remove_doublequotes_if_any( $user ) ;\n\n                        if (       $h1_hash->{$user}\n                                && $h2_hash->{$user}\n                                && $h1_hash->{$user} eq $h2_hash->{$user} )\n                        {\n                                myprint( \"Host2: user $user_no_quotes has already the same acl, no need to set it.\\n\" ) ;\n                                next ;\n                        }\n                        myprint( \"Host2: setting acl for folder $h2_fold user $user_no_quotes acl $h1_acl $mysync->{dry_message}\\n\" ) ;\n                        unless ( $mysync->{dry} ) {\n                                $mysync->{imap2}->setacl( $h2_fold, $user_no_quotes, $h1_acl )\n                                  or myprint( \"Could not set acl for user $user_no_quotes on host2: $EVAL_ERROR\\n\" ) ;\n                        }\n                }\n        }\n        return ;\n}\n\n\nsub tests_permanentflags\n{\n\tnote( 'Entering tests_permanentflags()' ) ;\n\n        my $mysync = { } ;\n        ok( q{} eq permanentflags( $mysync, ' * OK [PERMANENTFLAGS (\\* \\Draft \\Answered)] Limited' ),\n           'permanentflags \\*' ) ;\n\n        ok( '\\Draft \\Answered' eq permanentflags( $mysync, ' * OK [PERMANENTFLAGS (\\Draft \\Answered)] Limited' ),\n           'permanentflags \\Draft \\Answered' ) ;\n\n        ok( '\\Draft \\Answered'\n           eq permanentflags( $mysync, 'Blabla',\n                             ' * OK [PERMANENTFLAGS (\\Draft \\Answered)] Limited',\n                             'Blabla' ),\n           'permanentflags \\Draft \\Answered'\n        ) ;\n\n        ok( q{} eq permanentflags( $mysync, 'Blabla' ), 'permanentflags nothing' ) ;\n\n\tnote( 'Leaving  tests_permanentflags()' ) ;\n        return ;\n}\n\nsub permanentflags\n{\n        my $mysync = shift ;\n\n        my @lines  = @_ ;\n\n        foreach my $line (@lines) {\n                if ( $line =~ m{\\[PERMANENTFLAGS\\s\\(([^)]+?)\\)\\]}x ) {\n                        ( $debugflags or $sync->{ debug } ) and myprint( \"permanentflags: $line\"  ) ;\n                        my $permanentflags = $1 ;\n                        if ( $permanentflags =~ m{\\\\\\*}x )\n                        {\n                                $permanentflags = q{} ;\n                        }\n                        return( $permanentflags ) ;\n                } ;\n        }\n        return( q{} ) ;\n}\n\nsub tests_flags_filter\n{\n\tnote( 'Entering tests_flags_filter()' ) ;\n\n        ok( '\\Seen' eq flags_filter('\\Seen', '\\Draft \\Seen \\Answered'), 'flags_filter ' );\n        ok( q{} eq flags_filter('\\Seen', '\\Draft  \\Answered'), 'flags_filter ' );\n        ok( '\\Seen' eq flags_filter('\\Seen', '\\Seen'), 'flags_filter ' );\n        ok( '\\Seen' eq flags_filter('\\Seen', ' \\Seen '), 'flags_filter ' );\n        ok( '\\Seen \\Draft'\n           eq flags_filter('\\Seen \\Draft', '\\Draft \\Seen \\Answered'), 'flags_filter ' );\n        ok( '\\Seen \\Draft'\n           eq flags_filter('\\Seen \\Draft', ' \\Draft \\Seen \\Answered '), 'flags_filter ' );\n\n\tnote( 'Leaving  tests_flags_filter()' ) ;\n\treturn ;\n}\n\nsub flags_filter\n{\n        my( $flags, $allowed_flags ) = @_ ;\n\n        my @flags = split  /\\s+/x, $flags ;\n        my %allowed_flags = map { $_ => 1 } split q{ }, $allowed_flags ;\n        my @flags_out     = map { exists $allowed_flags{$_} ? $_ : () } @flags ;\n\n        my $flags_out = join q{ }, @flags_out ;\n\n        return( $flags_out ) ;\n}\n\nsub tests_flagscase\n{\n\tnote( 'Entering tests_flagscase()' ) ;\n\n        ok( '\\Seen' eq flagscase( '\\Seen' ), 'flagscase: \\Seen -> \\Seen' ) ;\n        ok( '\\Seen' eq flagscase( '\\SEEN' ), 'flagscase: \\SEEN -> \\Seen' ) ;\n\n        ok( '\\Seen \\Draft' eq flagscase( '\\SEEN \\DRAFT' ), 'flagscase: \\SEEN \\DRAFT -> \\Seen \\Draft' ) ;\n        ok( '\\Draft \\Seen' eq flagscase( '\\DRAFT \\SEEN' ), 'flagscase: \\DRAFT \\SEEN -> \\Draft \\Seen' ) ;\n\n        ok( '\\Draft LALA \\Seen' eq flagscase( '\\DRAFT  LALA \\SEEN' ), 'flagscase: \\DRAFT  LALA \\SEEN -> \\Draft LALA \\Seen' ) ;\n        ok( '\\Draft lala \\Seen' eq flagscase( '\\DRAFT  lala \\SEEN' ), 'flagscase: \\DRAFT  lala \\SEEN -> \\Draft lala \\Seen' ) ;\n\n\tnote( 'Leaving  tests_flagscase()' ) ;\n        return ;\n}\n\nsub flagscase\n{\n        my $flags = shift ;\n\n        my @flags = split /\\s+/x, $flags ;\n        my %rfc_flags = map { $_ => 1 } split q{ }, '\\Answered \\Flagged \\Deleted \\Seen \\Draft' ;\n        my @flags_out = map { exists $rfc_flags{ ucsecond( lc $_ ) } ? ucsecond( lc $_ ) : $_ } @flags ;\n\n        my $flags_out = join q{ }, @flags_out ;\n\n        return( $flags_out ) ;\n}\n\n\n\nsub tests_flags_for_host2\n{\n        note( 'Entering tests_flags_for_host2()' ) ;\n\n        is( undef, flags_for_host2(  ),  'flags_for_host2: no args => undef' ) ;\n\n        my $mysync ;\n        is( undef, flags_for_host2( $mysync ),  'flags_for_host2: undef => undef' ) ;\n\n        $mysync = { } ;\n        is( undef, flags_for_host2( $mysync ),  'flags_for_host2: nothing => undef' ) ;\n\n        is( q{}, flags_for_host2( $mysync, '' ),  'flags_for_host2: no flags => empty string' ) ;\n\n        is( q{}, flags_for_host2( $mysync, '\\Recent' ),  'flags_for_host2: \\Recent => empty string' ) ;\n\n        is( q{\\Seen}, flags_for_host2( $mysync, '\\Recent \\Seen' ),  'flags_for_host2: \\Recent \\Seen => \\Seen' ) ;\n\n        is( q{\\Deleted \\Seen}, flags_for_host2( $mysync, '\\Deleted \\Recent \\Seen' ),  'flags_for_host2: \\Deleted \\Recent \\Seen => \\Deleted \\Seen' ) ;\n\n        $mysync->{ flagscase } = 0 ;\n        is( q{\\DELETED \\Seen}, flags_for_host2( $mysync, '\\DELETED \\Seen' ),  'flags_for_host2: flagscase = 0 \\DELETED \\Seen => \\DELETED \\Seen' ) ;\n\n        $mysync->{ flagscase } = 1 ;\n        is( q{\\Deleted \\Seen}, flags_for_host2( $mysync, '\\DELETED \\Seen' ),  'flags_for_host2: flagscase = 1 \\DELETED \\Seen => \\Deleted \\Seen' ) ;\n\n        $mysync->{ filterflags } = 0 ;\n        is( q{\\Seen \\Blabla}, flags_for_host2( $mysync, '\\Seen \\Blabla', '\\Seen \\Junk' ),  'flags_for_host2: filterflags = 0 \\Seen \\Blabla among \\Seen \\Junk  => \\Seen \\Blabla' ) ;\n\n        $mysync->{ filterflags } = 1 ;\n        is( q{\\Seen}, flags_for_host2( $mysync, '\\Seen \\Blabla', '\\Seen \\Junk' ),  'flags_for_host2: filterflags = 1 \\Seen \\Blabla among \\Seen \\Junk  => \\Seen' ) ;\n\n        $mysync->{ filterflags } = 1 ;\n        is( q{\\Seen \\Blabla}, flags_for_host2( $mysync, '\\Seen \\Blabla', '' ),  'flags_for_host2: filterflags = 1 \\Seen \\Blabla among \"\" => \\Seen \\Blabla' ) ;\n\n\n        note( 'Leaving  tests_flags_for_host2()' ) ;\n        return ;\n}\n\n\n\n\nsub flags_for_host2\n{\n        my $mysync = shift ;\n        my $h1_flags = shift ;\n        my $permanentflags2 = shift ;\n\n        if ( ! all_defined( $mysync, $h1_flags ) ) { return ; } ;\n\n        # RFC 2060: This flag can not be altered by any client\n        $h1_flags =~ s@\\\\Recent\\s?@@xgi ;\n\n        my $h1_flags_re ;\n        if ( $mysync->{ regexflag } and defined( $h1_flags_re = regexflags( $mysync, $h1_flags ) ) ) {\n                $h1_flags = $h1_flags_re ;\n        }\n\n        if ( $mysync->{ flagscase } )\n        {\n                $h1_flags = flagscase( $h1_flags ) ;\n        }\n\n        if ( $permanentflags2 and $mysync->{ filterflags } )\n        {\n                $h1_flags = flags_filter( $h1_flags, $permanentflags2 ) ;\n        }\n\n        return( $h1_flags ) ;\n}\n\n\n\nsub ucsecond\n{\n        my $string = shift ;\n        my $output ;\n\n        return( $string )  if ( 1 >= length $string ) ;\n\n        $output = ( substr( $string, 0, 1) ) . ( uc substr $string, 1, 1 ) . ( substr $string, 2 ) ;\n        #myprint( \"UUU $string -> $output\\n\"  ) ;\n        return( $output ) ;\n}\n\n\nsub tests_ucsecond\n{\n\tnote( 'Entering tests_ucsecond()' ) ;\n\n        ok( 'aBcde' eq ucsecond( 'abcde' ), 'ucsecond: abcde -> aBcde' ) ;\n        ok( 'ABCDE' eq ucsecond( 'ABCDE' ), 'ucsecond: ABCDE -> ABCDE'  ) ;\n        ok( 'ABCDE' eq ucsecond( 'AbCDE' ), 'ucsecond: AbCDE -> ABCDE'  ) ;\n        ok( 'ABCde' eq ucsecond( 'AbCde' ), 'ucsecond: AbCde -> ABCde'  ) ;\n        ok( 'A'     eq ucsecond( 'A' ),     'ucsecond: A  -> A'  ) ;\n        ok( 'AB'    eq ucsecond( 'Ab' ),    'ucsecond: Ab -> AB' ) ;\n        ok( '\\B'    eq ucsecond( '\\b' ),    'ucsecond: \\b -> \\B' ) ;\n        ok( '\\Bcde' eq ucsecond( '\\bcde' ), 'ucsecond: \\bcde -> \\Bcde' ) ;\n\n\tnote( 'Leaving  tests_ucsecond()' ) ;\n        return ;\n}\n\n\nsub select_msgs\n{\n        my ( $imap, $msgs_all_hash_ref, $search_cmd, $abletosearch, $folder ) = @_ ;\n        my ( @msgs ) ;\n\n        if ( $abletosearch ) {\n                @msgs = select_msgs_by_search( $imap, $msgs_all_hash_ref, $search_cmd, $folder ) ;\n        }else{\n                @msgs = select_msgs_by_fetch( $imap, $msgs_all_hash_ref, $search_cmd, $folder ) ;\n        }\n        return(  @msgs ) ;\n\n}\n\nsub select_msgs_by_search\n{\n        my ( $imap, $msgs_all_hash_ref, $search_cmd, $folder ) = @_ ;\n        my ( @msgs, @msgs_all ) ;\n\n        # Need to have the whole list in msgs_all_hash_ref\n        # without calling messages() several times.\n        # Need all messages list to avoid deleting useful cache part\n        # in case of --search or --minage or --maxage\n\n        if ( ( defined  $msgs_all_hash_ref  and $usecache )\n        or ( not defined  $maxage  and not defined  $minage  and not defined  $search_cmd  )\n        ) {\n\n                $debugdev and myprint( \"Calling messages()\\n\"  ) ;\n                @msgs_all = $imap->messages(  ) ;\n\n                return if ( $#msgs_all == 0 && !defined  $msgs_all[0]  ) ;\n\n                if ( defined  $msgs_all_hash_ref  ) {\n                        @{ $msgs_all_hash_ref }{ @msgs_all } =  () ;\n                }\n                # return all messages\n                if ( not defined  $maxage  and not defined  $minage  and not defined  $search_cmd  ) {\n                        return( @msgs_all ) ;\n                }\n        }\n\n        if ( defined  $search_cmd  ) {\n                @msgs = $imap->search( $search_cmd ) ;\n                return( @msgs ) ;\n        }\n\n        # we are here only if $maxage or $minage is defined\n        @msgs = select_msgs_by_age( $imap ) ;\n        return( @msgs );\n}\n\n\nsub select_msgs_by_fetch\n{\n        my ( $imap, $msgs_all_hash_ref, $search_cmd, $folder ) = @_ ;\n        my ( @msgs, @msgs_all, %fetch ) ;\n\n        # Need to have the whole list in msgs_all_hash_ref\n        # without calling messages() several times.\n        # Need all messages list to avoid deleting useful cache part\n        # in case of --search or --minage or --maxage\n\n\n        $debugdev and myprint( \"Calling fetch_hash()\\n\"  ) ;\n        my $fetch_hash_uids = $fetch_hash_set || \"1:*\" ;\n        %fetch = %{$imap->fetch_hash( $fetch_hash_uids, 'INTERNALDATE' ) } ;\n\n        @msgs_all = sort { $a <=> $b } keys  %fetch  ;\n        $debugdev and myprint( \"Done fetch_hash()\\n\"  ) ;\n\n        return if ( $#msgs_all == 0 && !defined  $msgs_all[0]  ) ;\n\n        if ( defined  $msgs_all_hash_ref  ) {\n                 @{ $msgs_all_hash_ref }{ @msgs_all } =  () ;\n        }\n        # return all messages\n        if ( not defined  $maxage  and not defined  $minage  and not defined  $search_cmd  ) {\n                return( @msgs_all ) ;\n        }\n\n        if ( defined  $search_cmd  ) {\n                myprint( \"Warning: strange to see --search with --noabletosearch, an error can happen\\n\"  ) ;\n                @msgs = $imap->search( $search_cmd ) ;\n                return( @msgs ) ;\n        }\n\n        # we are here only if $maxage or $minage is defined\n        my( @max, @min, $maxage_epoch, $minage_epoch ) ;\n        if ( defined  $maxage  ) { $maxage_epoch = $timestart_int - $NB_SECONDS_IN_A_DAY * $maxage ; }\n        if ( defined  $minage  ) { $minage_epoch = $timestart_int - $NB_SECONDS_IN_A_DAY * $minage ; }\n        foreach my $msg ( @msgs_all ) {\n                my $idate = $fetch{ $msg }->{'INTERNALDATE'} ;\n                #myprint( \"$idate\\n\"  ) ;\n                if ( defined  $maxage  and ( epoch( $idate ) >= $maxage_epoch ) ) {\n                        push  @max, $msg  ;\n                }\n                if ( defined  $minage  and ( epoch( $idate ) <= $minage_epoch ) ) {\n                        push  @min, $msg  ;\n                }\n        }\n        @msgs = msgs_from_maxmin( \\@max, \\@min ) ;\n        return( @msgs ) ;\n}\n\nsub select_msgs_by_age\n{\n        my( $imap ) = @_ ;\n\n        my( @max, @min, @msgs, @inter, @union ) ;\n\n        if ( defined  $maxage  ) {\n                @max = $imap->sentsince( $timestart_int - $NB_SECONDS_IN_A_DAY * $maxage ) ;\n        }\n        if ( defined  $minage  ) {\n                @min = $imap->sentbefore( $timestart_int - $NB_SECONDS_IN_A_DAY * $minage ) ;\n        }\n\n        @msgs = msgs_from_maxmin( \\@max, \\@min ) ;\n        return( @msgs ) ;\n}\n\nsub msgs_from_maxmin\n{\n        my( $max_ref, $min_ref ) = @_ ;\n        my( @max, @min, @msgs, @inter, @union ) ;\n\n        @max = @{ $max_ref } ;\n        @min = @{ $min_ref } ;\n\n        SWITCH: {\n                if ( not ( defined $minage or defined $maxage ) )\n                {\n                        return ;\n                }\n                unless( defined  $minage  ) { @msgs = @max ; last SWITCH } ;\n                unless( defined  $maxage  ) { @msgs = @min ; last SWITCH } ;\n                my ( %union, %inter ) ;\n                foreach my $m ( @min, @max ) { $union{ $m }++ && $inter{ $m }++ }\n                @inter = sort { $a <=> $b } keys  %inter  ;\n                @union = sort { $a <=> $b } keys  %union  ;\n                # normal case\n                if ( $minage <= $maxage )  { @msgs = @inter ; last SWITCH } ;\n                # just exclude messages between\n                if ( $minage > $maxage )  { @msgs = @union ; last SWITCH } ;\n\n        }\n        return( @msgs ) ;\n}\n\nsub tests_msgs_from_maxmin\n{\n        note( 'Entering tests_msgs_from_maxmin()' ) ;\n\n\n        my @msgs ;\n\n        # no maxage nor minage\n        @msgs = msgs_from_maxmin( [ '1', '2' ], [ '2', '3' ] ) ;\n        is_deeply( [  ], \\@msgs , 'msgs_from_maxmin: no maxage nor minage => empty result' ) ;\n\n        # maxage alone\n        $maxage = $NUMBER_200 ;\n        @msgs = msgs_from_maxmin( [ '1', '2' ], [ '2', '3' ] ) ;\n        is_deeply( [ '1', '2' ], \\@msgs , 'msgs_from_maxmin: maxage++' ) ;\n\n        # maxage > minage -> intersection\n        $minage = $NUMBER_100 ;\n        @msgs = msgs_from_maxmin( [ '1', '2' ], [ '2', '3' ] ) ;\n        is_deeply( [ '2' ], \\@msgs , 'msgs_from_maxmin:  -maxage++minage-' ) ;\n\n        # maxage < minage -> union\n        $minage = $NUMBER_300 ;\n        @msgs = msgs_from_maxmin( [ '1', '2' ], [ '2', '3' ] ) ;\n        is_deeply( [ '1', '2', '3' ], \\@msgs, 'msgs_from_maxmin:  ++maxage-minage++' ) ;\n\n\n        # minage alone\n        $maxage = undef ;\n        @msgs = msgs_from_maxmin( [ '1', '2' ], [ '2', '3' ] ) ;\n        is_deeply( [ '2', '3' ], \\@msgs, 'msgs_from_maxmin:  ++minage-' ) ;\n\n\n        note( 'Leaving  tests_msgs_from_maxmin()' ) ;\n        return ;\n}\n\nsub tests_info_date_from_uid\n{\n        note( 'Entering tests_info_date_from_uid()' ) ;\n        note( 'Leaving  tests_info_date_from_uid()' ) ;\n\n        return ;\n}\n\nsub info_date_from_uid\n{\n\n        #my $first_uid   = $msgs_all[ 0 ] ;\n        #my $first_idate = $fetch{ $first_uid }->{'INTERNALDATE'} ;\n        #my $first_epoch = epoch( $first_idate ) ;\n        #my $first_days  = ( $timestart_int - $first_epoch ) / $NB_SECONDS_IN_A_DAY ;\n        #myprint( \"\\nOldest msg has UID $first_uid INTERNALDATE $first_idate EPOCH $first_epoch DAYS AGO $first_days\\n\" ) ;\n}\n\n\nsub lastuid\n{\n        my $imap   = shift ;\n        my $folder = shift ;\n        my $lastuid_guess  = shift ;\n        my $lastuid ;\n\n        # rfc3501: The only reliable way to identify recent messages is to\n        #          look at message flags to see which have the \\Recent flag\n        #          set, or to do a SEARCH RECENT.\n        # SEARCH RECENT doesn't work this way on courrier.\n\n        my @recent_messages ;\n        # SEARCH RECENT for each transfer can be expensive with a big folder\n        # Call commented for now\n        #@recent_messages = $imap->recent(  ) ;\n        #myprint( \"Recent: @recent_messages\\n\" ) ;\n\n        my $max_recent ;\n        $max_recent = max( @recent_messages ) ;\n\n        if ( defined  $max_recent  and ($lastuid_guess <= $max_recent ) ) {\n                $lastuid = $max_recent ;\n        }else{\n                $lastuid = $lastuid_guess\n        }\n        return( $lastuid ) ;\n}\n\nsub size_filtered\n{\n        my( $h1_size, $h1_msg, $h1_fold, $h2_fold  ) = @_ ;\n\n        $h1_size = 0 if ( ! $h1_size ) ; # null if empty or undef\n        if ( defined $sync->{ maxsize } and $h1_size > $sync->{ maxsize } ) {\n                myprint( \"msg $h1_fold/$h1_msg skipped ($h1_size exceeds maxsize limit $sync->{ maxsize } bytes)\\n\" ) ;\n                $sync->{ total_bytes_skipped } += $h1_size;\n                $sync->{ nb_msg_skipped } += 1;\n                return( 1 ) ;\n        }\n        if ( defined $minsize and $h1_size <= $minsize ) {\n                myprint( \"msg $h1_fold/$h1_msg skipped ($h1_size smaller than minsize $minsize bytes)\\n\" ) ;\n                $sync->{ total_bytes_skipped } += $h1_size;\n                $sync->{ nb_msg_skipped } += 1;\n                return( 1 ) ;\n        }\n        return( 0 ) ;\n}\n\nsub message_exists\n{\n        my( $imap, $msg ) = @_ ;\n        return( 1 ) if not $imap->Uid(  ) ;\n\n        my $search_uid ;\n        ( $search_uid ) = $imap->search( \"UID $msg\" ) ;\n        #myprint( \"$search ? $msg\\n\"  ) ;\n        return( 1 ) if ( $search_uid eq $msg ) ;\n        return( 0 ) ;\n}\n\n\n# Globals\n# $sync->{ total_bytes_skipped }\n# $sync->{ nb_msg_skipped }\n# $mysync->{ h1_nb_msg_processed }\nsub stats_update_skip_message\n{\n        my $mysync  = shift ; # to be used\n        my $h1_size = shift ;\n\n        $mysync->{ total_bytes_skipped } += $h1_size ;\n        $mysync->{ nb_msg_skipped } += 1 ;\n        $mysync->{ h1_nb_msg_processed } +=1 ;\n        return ;\n}\n\nsub copy_message\n{\n        # copy\n\n        my ( $mysync, $h1_msg, $h1_fold, $h2_fold, $h1_fir_ref, $permanentflags2, $cache_dir ) = @_ ;\n        ( $mysync->{ debug } or $mysync->{dry} )\n                and myprint( \"msg $h1_fold/$h1_msg copying to $h2_fold $mysync->{dry_message} \" . eta( $mysync ) . \"\\n\" ) ;\n\n        if ( $mysync->{dry1} )\n        {\n                $mysync->{ h1_nb_msg_processed } +=1 ;\n                $nb_msg_skipped_dry_mode += 1 ;\n                return ;\n        }\n\n        my $h1_size  = $h1_fir_ref->{$h1_msg}->{'RFC822.SIZE'}  || 0 ;\n        my $h1_flags = $h1_fir_ref->{$h1_msg}->{'FLAGS'}        || q{} ;\n        my $h1_idate = $h1_fir_ref->{$h1_msg}->{'INTERNALDATE'} || q{} ;\n\n\n        if ( size_filtered( $h1_size, $h1_msg, $h1_fold, $h2_fold  ) ) {\n                $mysync->{ h1_nb_msg_processed } +=1 ;\n                return ;\n        }\n\n        debugsleep( $mysync ) ;\n        myprint( \"- msg $h1_fold/$h1_msg S[$h1_size] F[$h1_flags] I[$h1_idate] has RFC822.SIZE null!\\n\" ) if ( ! $h1_size )   ;\n\n        if ( $checkmessageexists and not message_exists( $mysync->{imap1}, $h1_msg ) ) {\n                stats_update_skip_message( $mysync, $h1_size ) ;\n                return ;\n        }\n        myprint( debugmemory( $mysync, \" at C1\" ) ) ;\n\n        my ( $string, $string_len ) ;\n        ( $string_len ) = message_for_host2( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, \\$string ) ;\n\n        myprint( debugmemory( $mysync, \" at C2\" ) ) ;\n\n        # not defined or empty $string\n        if ( ( not $string ) or ( not $string_len ) ) {\n                myprint( \"- msg $h1_fold/$h1_msg skipped.\\n\"  ) ;\n                stats_update_skip_message( $mysync, $h1_size ) ;\n                return ;\n        }\n\n        # Lines too long (or not enough) => do no copy or fix\n        if ( ( defined $maxlinelength ) or ( defined $minmaxlinelength ) ) {\n                $string = linelengthstuff( $string, $h1_fold, $h1_msg, $string_len, $h1_size, $h1_flags, $h1_idate ) ;\n                if ( not defined  $string  ) {\n                        stats_update_skip_message( $mysync, $h1_size ) ;\n                        return ;\n                }\n        }\n\n        my $h1_date = date_for_host2( $h1_msg, $h1_idate ) ;\n\n        ( $mysync->{ debug } or $debugflags ) and\n        myprint( \"Host1: flags init msg $h1_fold/$h1_msg date [$h1_date] flags [$h1_flags] size [$h1_size]\\n\"  ) ;\n\n        $h1_flags = flags_for_host2( $mysync, $h1_flags, $permanentflags2 ) ;\n\n        ( $mysync->{ debug } or $debugflags ) and\n        myprint( \"Host1: flags filt msg $h1_fold/$h1_msg date [$h1_date] flags [$h1_flags] size [$h1_size]\\n\"  ) ;\n\n        $h1_date = undef if ( $h1_date eq q{} ) ;\n\n        my $new_id = append_message_on_host2( $mysync, \\$string, $h1_fold, $h1_msg, $string_len, $h2_fold, $h1_size, $h1_flags, $h1_date, $cache_dir ) ;\n\n\n\n        if ( $new_id and $syncflagsaftercopy ) {\n                sync_flags_after_copy( $mysync, $h1_fold, $h1_msg, $h1_flags, $h2_fold, $new_id, $permanentflags2 ) ;\n        }\n\n        myprint( debugmemory( $mysync, \" at C3\" ) ) ;\n\n        return $new_id ;\n}\n\n\n\nsub linelengthstuff\n{\n        my( $string, $h1_fold, $h1_msg, $string_len, $h1_size, $h1_flags, $h1_idate  ) = @_ ;\n        my $maxlinelength_string = max_line_length( $string ) ;\n        $debugmaxlinelength and myprint( \"msg $h1_fold/$h1_msg maxlinelength: $maxlinelength_string\\n\"  ) ;\n\n        if ( ( defined $minmaxlinelength )  and ( $maxlinelength_string <= $minmaxlinelength ) ) {\n                my $subject = subject( $string ) ;\n                $debugdev and myprint( \"- msg $h1_fold/$h1_msg skipped S[$h1_size] F[$h1_flags] I[$h1_idate] \"\n                        . \"(Subject:[$subject]) (max line length under minmaxlinelength $minmaxlinelength bytes)\\n\" ) ;\n                return ;\n        }\n\n        if ( ( defined $maxlinelength )  and ( $maxlinelength_string > $maxlinelength ) ) {\n                my $subject = subject( $string ) ;\n                if ( $maxlinelengthcmd ) {\n                        $string = pipemess( $string, $maxlinelengthcmd ) ;\n                        # string undef means something was bad.\n                        if ( not ( defined  $string  ) ) {\n                                myprint( \"- msg $h1_fold/$h1_msg {$string_len} S[$h1_size] F[$h1_flags] I[$h1_idate] \"\n                                      . \"(Subject:[$subject]) could not be successfully transformed by --maxlinelengthcmd option\\n\" ) ;\n                                return ;\n                        }else{\n                                return $string ;\n                        }\n                }\n                myprint( \"- msg $h1_fold/$h1_msg skipped S[$h1_size] F[$h1_flags] I[$h1_idate] \"\n                      . \"(Subject:[$subject]) (line length exceeds maxlinelength $maxlinelength bytes)\\n\" ) ;\n                return ;\n        }\n        return $string ;\n}\n\n\nsub message_for_host2\n{\n\n# global variable list:\n# @skipmess\n# @regexmess\n# @pipemess\n# $debugcontent\n# $debug\n#\n# API current\n#\n# at failure:\n#   * return nothing ( will then be undef or () )\n#   * $string_ref content is undef or empty\n# at success:\n#   * return string length ($string_ref content length)\n#   * $string_ref content filled with message\n\n# API future\n#\n#\n        my ( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ) = @_ ;\n\n        # abort when missing a parameter\n        if ( ( ! $mysync ) or  ( ! $h1_msg ) or ( ! $h1_fold ) or ( ! defined $h1_size )\n             or ( ! defined $h1_flags) or ( ! defined $h1_idate )\n             or ( ! $h1_fir_ref) or ( ! $string_ref ) )\n        {\n                return ;\n        }\n\n        myprint( debugmemory( $mysync, \" at M1\" ) ) ;\n\n\n        my $string_ok = $mysync->{imap1}->message_to_file( $string_ref, $h1_msg ) ;\n\n        myprint( debugmemory( $mysync, \" at M2\" ) ) ;\n\n        my $string_len = length_ref( $string_ref  ) ;\n\n\n        unless ( defined  $string_ok  and $string_len ) {\n                # undef or 0 length\n                my $error = join q{},\n                        \"- msg $h1_fold/$h1_msg {$string_len} S[$h1_size] F[$h1_flags] I[$h1_idate] could not be fetched: \",\n                        $mysync->{imap1}->LastError || q{}, \"\\n\"  ;\n                errors_incr( $mysync, $error ) ;\n                $mysync->{ h1_nb_msg_processed } +=1 ;\n                return ;\n        }\n\n        if ( @skipmess ) {\n                my $match = skipmess( ${ $string_ref } ) ;\n                # string undef means the eval regex was bad.\n                if ( not ( defined  $match  ) ) {\n                        myprint(\n                        \"- msg $h1_fold/$h1_msg {$string_len} S[$h1_size] F[$h1_flags] I[$h1_idate]\"\n                        . \" could not be skipped by --skipmess option, bad regex\\n\" ) ;\n                        return ;\n                }\n                if ( $match ) {\n                        my $subject = subject( ${ $string_ref } ) ;\n                        myprint( \"- msg $h1_fold/$h1_msg {$string_len} S[$h1_size] F[$h1_flags] I[$h1_idate]\"\n                            . \" (Subject:[$subject]) skipped by --skipmess\\n\" ) ;\n                        return ;\n                }\n        }\n\n        if ( @regexmess ) {\n                ${ $string_ref } = regexmess( ${ $string_ref } ) ;\n                # string undef means the eval regex was bad.\n                if ( not ( defined  ${ $string_ref }  ) ) {\n                        myprint(\n                        \"- msg $h1_fold/$h1_msg {$string_len} S[$h1_size] F[$h1_flags] I[$h1_idate]\"\n                        . \" could not be transformed by --regexmess\\n\" ) ;\n                        return ;\n                }\n        }\n\n        if ( @pipemess ) {\n                ${ $string_ref } = pipemess( ${ $string_ref }, @pipemess ) ;\n                # string undef means something was bad.\n                if ( not ( defined  ${ $string_ref }  ) ) {\n                        myprint(\n                        \"- msg $h1_fold/$h1_msg {$string_len} S[$h1_size] F[$h1_flags] I[$h1_idate]\"\n                        . \" could not be successfully transformed by --pipemess option\\n\" ) ;\n                        return ;\n                }\n        }\n\n        if ( $mysync->{addheader} and defined $h1_fir_ref->{$h1_msg}->{'NO_HEADER'} ) {\n                my $header = add_header( $h1_msg ) ;\n                $mysync->{ debug } and myprint( \"msg $h1_fold/$h1_msg adding custom header [$header]\\n\"  ) ;\n                ${ $string_ref } = $header . \"\\r\\n\" . ${ $string_ref } ;\n        }\n\n        if ( ( defined $mysync->{ truncmess } ) and is_integer( $mysync->{ truncmess } ) )\n        {\n                ${ $string_ref } = truncmess( ${ $string_ref }, $mysync->{ truncmess } ) ;\n        }\n\n        $string_len = length_ref( $string_ref  ) ;\n\n        $mysync->{ debugcontent } and myprint( debugcontent( $mysync, $string_ref ) ) ;\n\n        myprint( debugmemory( $mysync, \" at M3\" ) ) ;\n\n        return $string_len ;\n}\n\nsub tests_debugcontent\n{\n        note( 'Entering tests_debugcontent()' ) ;\n\n        is( undef, debugcontent(  ),  'debugcontent: no args => undef' ) ;\n        my $mysync = {  } ;\n        is( undef, debugcontent( $mysync ),  'debugcontent: undef => undef' ) ;\n        is( undef, debugcontent( $mysync, 'mm' ),  'debugcontent: undef, mm => undef' ) ;\n        #my $string_ref = \\'zztop' ;\n        my $string = '================================================================================\nF message content begin next line (2 characters long)\nmm\nF message content ended on previous line\n================================================================================\n' ;\n        is( $string, debugcontent( $mysync, \\'mm' ),  'debugcontent: undef, mm => mm' ) ;\n\n        note( 'Leaving  tests_debugcontent()' ) ;\n        return ;\n}\n\nsub debugcontent\n{\n        my $mysync = shift @ARG ;\n        if ( ! defined $mysync ) { return ; }\n\n        my $string_ref = shift @ARG ;\n        if ( ! defined $string_ref ) { return ; }\n        if ( 'SCALAR' ne ref( $string_ref ) ) { return ; }\n\n        my $string_len = length_ref( $string_ref  ) ;\n\n        my $string = join( '',\n                q{=} x $STD_CHAR_PER_LINE, \"\\n\",\n                \"F message content begin next line ($string_len characters long)\\n\",\n                ${ $string_ref },\n                \"\\nF message content ended on previous line\\n\", q{=} x $STD_CHAR_PER_LINE, \"\\n\",\n        ) ;\n\n        return $string ;\n}\n\n\n\n\n\nsub tests_truncmess\n{\n        note( 'Entering tests_truncmess()' ) ;\n\n        is( undef, truncmess(  ),  'truncmess: no args => undef' ) ;\n        is( 'abc', truncmess( 'abc' ),  'truncmess: abc => abc' ) ;\n        is( 'ab', truncmess( 'abc', 2 ),  'truncmess: abc 2 => ab' ) ;\n        is( 'abc', truncmess( 'abc', 3 ),  'truncmess: abc 3 => abc' ) ;\n        is( 'abc', truncmess( 'abc', 4 ),  'truncmess: abc 4 => abc' ) ;\n        is( '12345', truncmess( \"123456789\\n\", 5 ),  'truncmess: \"123456789\\n\", 5 => 12345' ) ;\n        is( \"123456789\\n\" x 5000, truncmess( \"123456789\\n\" x 100000, 50000 ),  'truncmess: \"123456789\\n\" x 100000, 50000 => \"123456789\\n\" x 5000' ) ;\n        note( 'Leaving  tests_truncmess()' ) ;\n        return ;\n}\n\nsub truncmess\n{\n        my $string = shift ;\n        my $length = shift ;\n\n        if ( not defined $string ) { return ; }\n        if ( not defined $length ) { return $string ; }\n\n        $string = substr $string, 0,  $length ;\n        return $string ;\n}\n\nsub tests_message_for_host2\n{\n\tnote( 'Entering tests_message_for_host2()' ) ;\n\n\n        my ( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ) ;\n\n        is( undef, message_for_host2(  ), q{message_for_host2: no args} ) ;\n        is( undef, message_for_host2( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ), q{message_for_host2: undef args} ) ;\n\n        require_ok( \"Test::MockObject\" ) ;\n        my $imapT = Test::MockObject->new(  ) ;\n        $mysync->{imap1} = $imapT ;\n        my $string ;\n\n        $h1_msg = 1 ;\n        $h1_fold = 'FoldFoo';\n        $h1_size =  9 ;\n        $h1_flags = q{} ;\n        $h1_idate = '10-Jul-2015 09:00:00 +0200' ;\n        $h1_fir_ref = {} ;\n        $string_ref = \\$string ;\n        $imapT->mock( 'message_to_file',\n                sub {\n                        my ( $imap, $mystring_ref, $msg ) = @_ ;\n                        ${$mystring_ref} = 'blablabla' ;\n                        return length ${$mystring_ref} ;\n                }\n        ) ;\n        is( 9, message_for_host2( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ),\n        q{message_for_host2: msg 1 == \"blablabla\", length} ) ;\n        is( 'blablabla', $string, q{message_for_host2: msg 1 == \"blablabla\", value} ) ;\n\n        # so far so good\n        # now the --pipemess stuff\n\n        SKIP: {\n                Readonly my $NB_WIN_tests_message_for_host2 => 0 ;\n                skip( 'Not on MSWin32', $NB_WIN_tests_message_for_host2 ) if ('MSWin32' ne $OSNAME) ;\n                # Windows\n                # \"type\" command does not accept redirection of STDIN with <\n                # \"sort\" does\n\n        } ;\n\n        SKIP: {\n                Readonly my $NB_UNX_tests_message_for_host2 => 6 ;\n                skip( 'Not on Unix', $NB_UNX_tests_message_for_host2 ) if ('MSWin32' eq $OSNAME) ;\n                # Unix\n\n                # no change by cat\n                @pipemess = ( 'cat' ) ;\n                is( 9, message_for_host2( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ),\n                q{message_for_host2: --pipemess 'cat', length} ) ;\n                is( 'blablabla', $string, q{message_for_host2: --pipemess 'cat', value} ) ;\n\n\n                # failure by false\n                @pipemess = ( 'false' ) ;\n                is( undef, message_for_host2( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ),\n                q{message_for_host2: --pipemess 'false', length} ) ;\n                is( undef, $string, q{message_for_host2: --pipemess 'false', value} ) ;\n\n                # failure by true since no output\n                @pipemess = ( 'true' ) ;\n                is( undef, message_for_host2( $mysync, $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref, $string_ref ),\n                q{message_for_host2: --pipemess 'true', length} ) ;\n                is( undef, $string, q{message_for_host2: --pipemess 'true', value} ) ;\n        }\n\n        note( 'Leaving  tests_message_for_host2()' ) ;\n        return ;\n}\n\nsub tests_labels_remove_subfolder1\n{\n        note( 'Entering tests_labels_remove_subfolder1()' ) ;\n        is( undef, labels_remove_subfolder1(  ), 'labels_remove_subfolder1: no parameters => undef' ) ;\n        is( 'Blabla', labels_remove_subfolder1( 'Blabla' ), 'labels_remove_subfolder1: one parameter Blabla => Blabla' ) ;\n        is( 'Blan blue', labels_remove_subfolder1( 'Blan blue' ), 'labels_remove_subfolder1: one parameter Blan blue => Blan blue' ) ;\n        is( '\\Bla \"Blan blan\" Blabla', labels_remove_subfolder1( '\\Bla \"Blan blan\" Blabla' ),\n                'labels_remove_subfolder1: one parameter \\Bla \"Blan blan\" Blabla => \\Bla \"Blan blan\" Blabla' ) ;\n\n        is( 'Bla', labels_remove_subfolder1( 'Subf/Bla', 'Subf' ), 'labels_remove_subfolder1: Subf/Bla Subf => \"Bla\"' ) ;\n\n\n        is( '\"\\\\\\\\Bla\"', labels_remove_subfolder1( '\"\\\\\\\\Bla\"', 'Subf' ), 'labels_remove_subfolder1: \"\\\\\\\\Bla\" Subf => \"\\\\\\\\Bla\"' ) ;\n\n        is( 'Bla Kii', labels_remove_subfolder1( 'Subf/Bla Subf/Kii', 'Subf' ),\n                'labels_remove_subfolder1: Subf/Bla Subf/Kii, Subf => \"Bla\" \"Kii\"' ) ;\n\n        is( '\"\\\\\\\\Bla\" Kii', labels_remove_subfolder1( '\"\\\\\\\\Bla\" Subf/Kii', 'Subf' ),\n                'labels_remove_subfolder1: \"\\\\\\\\Bla\" Subf/Kii Subf => \"\\\\\\\\Bla\" Kii' ) ;\n\n        is( '\"Blan blan\"', labels_remove_subfolder1( '\"Subf/Blan blan\"', 'Subf' ),\n                'labels_remove_subfolder1: \"Subf/Blan blan\" Subf => \"Blan blan\"' ) ;\n\n        is( '\"\\\\\\\\Loo\" \"Blan blan\" Kii', labels_remove_subfolder1( '\"\\\\\\\\Loo\" \"Subf/Blan blan\" Subf/Kii', 'Subf' ),\n                'labels_remove_subfolder1: \"\\\\\\\\Loo\" \"Subf/Blan blan\" Subf/Kii + Subf => \"\\\\\\\\Loo\" \"Blan blan\" Kii' ) ;\n\n        is( '\"\\\\\\\\Inbox\"', labels_remove_subfolder1( 'Subf/INBOX', 'Subf' ),\n                'labels_remove_subfolder1: Subf/INBOX + Subf => \"\\\\\\\\Inbox\"' ) ;\n\n        is( '\"\\\\\\\\Loo\" \"Blan blan\" Kii \"\\\\\\\\Inbox\"', labels_remove_subfolder1( '\"\\\\\\\\Loo\" \"Subf/Blan blan\" Subf/Kii Subf/INBOX', 'Subf' ),\n                'labels_remove_subfolder1: \"\\\\\\\\Loo\" \"Subf/Blan blan\" Subf/Kii Subf/INBOX + Subf => \"\\\\\\\\Loo\" \"Blan blan\" Kii \"\\\\\\\\Inbox\"' ) ;\n\n\n        note( 'Leaving  tests_labels_remove_subfolder1()' ) ;\n        return ;\n}\n\n\n\nsub labels_remove_subfolder1\n{\n        my $labels = shift ;\n        my $subfolder1 = shift ;\n\n        if ( not defined $labels ) { return ; }\n        if ( not defined $subfolder1  ) { return $labels ; }\n\n        my @labels = quotewords('\\s+', 1, $labels ) ;\n        #myprint( \"@labels\\n\" ) ;\n        my @labels_subfolder2 ;\n\n        foreach my $label ( @labels )\n        {\n                if ( $label =~ m{zzzzzzzzzz} )\n                {\n                        # \\Seen \\Deleted ... stay the same\n                        push @labels_subfolder2, $label ;\n                }\n                else\n                {\n                        # Remove surrounding quotes if any, to add them again in case of space\n                        $label = join( q{}, quotewords('\\s+', 0, $label ) ) ;\n                        $label =~ s{$subfolder1/?}{} ;\n                        if ( 'INBOX' eq $label )\n                        {\n                                push @labels_subfolder2, q{\"\\\\\\\\Inbox\"} ;\n                        }\n                        elsif ( $label =~ m{\\\\} )\n                        {\n                                push @labels_subfolder2, qq{\"\\\\$label\"} ;\n                        }\n                        elsif ( $label =~ m{ } )\n                        {\n                                push @labels_subfolder2, qq{\"$label\"} ;\n                        }\n                        else\n                        {\n                                push @labels_subfolder2, $label ;\n                        }\n                }\n        }\n\n        my $labels_subfolder2 = join( ' ', sort uniq( @labels_subfolder2 ) ) ;\n\n        return $labels_subfolder2 ;\n}\n\nsub tests_labels_remove_special\n{\n        note( 'Entering tests_labels_remove_special()' ) ;\n\n        is( undef, labels_remove_special(  ), 'labels_remove_special: no parameters => undef' ) ;\n        is( q{}, labels_remove_special( q{} ), 'labels_remove_special: empty string => empty string' ) ;\n        is( q{}, labels_remove_special( '\"\\\\\\\\Inbox\"' ), 'labels_remove_special:\"\\\\\\\\Inbox\" => empty string' ) ;\n        is( q{}, labels_remove_special( '\"\\\\\\\\Inbox\" \"\\\\\\\\Starred\"' ), 'labels_remove_special:\"\\\\\\\\Inbox\" \"\\\\\\\\Starred\" => empty string' ) ;\n        is( 'Bar Foo', labels_remove_special( 'Foo Bar' ), 'labels_remove_special:Foo Bar => Bar Foo' ) ;\n        is( 'Bar Foo', labels_remove_special( 'Foo Bar \"\\\\\\\\Inbox\"' ), 'labels_remove_special:Foo Bar \"\\\\\\\\Inbox\" => Bar Foo' ) ;\n        note( 'Leaving  tests_labels_remove_special()' ) ;\n        return ;\n}\n\n\n\n\nsub labels_remove_special\n{\n        my $labels = shift ;\n\n        if ( not defined $labels ) { return ; }\n\n        my @labels = quotewords('\\s+', 1, $labels ) ;\n        myprint( \"labels before remove_non_folded: @labels\\n\" ) ;\n        my @labels_remove_special ;\n\n        foreach my $label ( @labels )\n        {\n                if ( $label =~ m{^\\\"\\\\\\\\} )\n                {\n                        # not kept\n                }\n                else\n                {\n                        push @labels_remove_special, $label ;\n                }\n        }\n\n        my $labels_remove_special = join( ' ', sort @labels_remove_special ) ;\n\n        return $labels_remove_special ;\n}\n\n\nsub tests_labels_add_subfolder2\n{\n        note( 'Entering tests_labels_add_subfolder2()' ) ;\n        is( undef, labels_add_subfolder2(  ), 'labels_add_subfolder2: no parameters => undef' ) ;\n        is( 'Blabla', labels_add_subfolder2( 'Blabla' ), 'labels_add_subfolder2: one parameter Blabla => Blabla' ) ;\n        is( 'Blan blue', labels_add_subfolder2( 'Blan blue' ), 'labels_add_subfolder2: one parameter Blan blue => Blan blue' ) ;\n        is( '\\Bla \"Blan blan\" Blabla', labels_add_subfolder2( '\\Bla \"Blan blan\" Blabla' ),\n                'labels_add_subfolder2: one parameter \\Bla \"Blan blan\" Blabla => \\Bla \"Blan blan\" Blabla' ) ;\n\n        is( 'Subf/Bla', labels_add_subfolder2( 'Bla', 'Subf' ), 'labels_add_subfolder2: Bla Subf => \"Subf/Bla\"' ) ;\n\n\n        is( 'Subf/\\Bla', labels_add_subfolder2( '\\\\\\\\Bla', 'Subf' ), 'labels_add_subfolder2: \\Bla Subf => \\Bla' ) ;\n\n        is( 'Subf/Bla Subf/Kii', labels_add_subfolder2( 'Bla Kii', 'Subf' ),\n                'labels_add_subfolder2: Bla Kii Subf => \"Subf/Bla\" \"Subf/Kii\"' ) ;\n\n        is( 'Subf/Kii Subf/\\Bla', labels_add_subfolder2( '\\\\\\\\Bla Kii', 'Subf' ),\n                'labels_add_subfolder2: \\Bla Kii Subf => \\Bla Subf/Kii' ) ;\n\n        is( '\"Subf/Blan blan\"', labels_add_subfolder2( '\"Blan blan\"', 'Subf' ),\n                'labels_add_subfolder2: \"Blan blan\" Subf => \"Subf/Blan blan\"' ) ;\n\n        is( '\"Subf/Blan blan\" Subf/Kii Subf/\\Loo', labels_add_subfolder2( '\\\\\\\\Loo \"Blan blan\" Kii', 'Subf' ),\n                'labels_add_subfolder2: \\Loo \"Blan blan\" Kii + Subf => \"Subf/Blan blan\" Subf/Kii Subf/\\Loo' ) ;\n\n        # \"\\\\Inbox\" is special, add to subfolder INBOX also because Gmail will but ...\n        is( '\"Subf/\\\\\\\\Inbox\" Subf/INBOX', labels_add_subfolder2( '\"\\\\\\\\Inbox\"', 'Subf' ),\n                'labels_add_subfolder2: \"\\\\\\\\Inbox\" Subf => \"Subf/\\\\\\\\Inbox\" Subf/INBOX' ) ;\n\n        # but not with INBOX folder\n        is( '\"Subf/\\\\\\\\Inbox\"', labels_add_subfolder2( '\"\\\\\\\\Inbox\"', 'Subf', 'INBOX' ),\n                'labels_add_subfolder2: \"\\\\\\\\Inbox\" Subf INBOX => \"Subf/\\\\\\\\Inbox\"' ) ;\n\n        # two times => one time\n        is( '\"Subf/\\\\\\\\Inbox\" Subf/INBOX', labels_add_subfolder2( '\"\\\\\\\\Inbox\" \"\\\\\\\\Inbox\"', 'Subf' ),\n                'labels_add_subfolder2: \"\\\\\\\\Inbox\" \"\\\\\\\\Inbox\" Subf => \"Subf/\\\\\\\\Inbox\"' ) ;\n\n        is( '\"Subf/\\\\\\\\Starred\"', labels_add_subfolder2( '\"\\\\\\\\Starred\"', 'Subf' ),\n                'labels_add_subfolder2: \"\\\\\\\\Starred\" Subf => \"Subf/\\\\\\\\Starred\"' ) ;\n\n        note( 'Leaving  tests_labels_add_subfolder2()' ) ;\n        return ;\n}\n\nsub labels_add_subfolder2\n{\n        my $labels = shift ;\n        my $subfolder2 = shift ;\n        my $h1_folder = shift || q{} ;\n\n        if ( not defined $labels ) { return ; }\n        if ( not defined $subfolder2  ) { return $labels ; }\n\n        # Isn't it messy?\n        if ( 'INBOX' eq $h1_folder )\n        {\n                $labels .= ' \"\\\\\\\\Inbox\"' ;\n        }\n\n        my @labels = uniq( quotewords('\\s+', 1, $labels ) ) ;\n        myprint( \"labels before subfolder2: @labels\\n\" ) ;\n        my @labels_subfolder2 ;\n\n\n        foreach my $label ( @labels )\n        {\n                # Isn't it more messy?\n                if ( ( q{\"\\\\\\\\Inbox\"} eq $label ) and ( 'INBOX' ne $h1_folder ) )\n                {\n                        if ( $subfolder2 =~ m{ } )\n                        {\n                                push @labels_subfolder2, qq{\"$subfolder2/INBOX\"} ;\n                        }\n                        else\n                        {\n                                push @labels_subfolder2, \"$subfolder2/INBOX\" ;\n                        }\n                }\n                if ( $label =~ m{^\\\"\\\\\\\\} )\n                {\n                        # \\Seen \\Deleted ... stay the same\n                        #push @labels_subfolder2, $label ;\n                        # Remove surrounding quotes if any, to add them again\n                        $label = join( q{}, quotewords('\\s+', 0, $label ) ) ;\n                        push @labels_subfolder2, qq{\"$subfolder2/\\\\$label\"} ;\n\n                }\n                else\n                {\n                        # Remove surrounding quotes if any, to add them again in case of space\n                        $label = join( q{}, quotewords('\\s+', 0, $label ) ) ;\n                        if ( $label =~ m{ } )\n                        {\n                                push @labels_subfolder2, qq{\"$subfolder2/$label\"} ;\n                        }\n                        else\n                        {\n                                push @labels_subfolder2, \"$subfolder2/$label\" ;\n                        }\n                }\n        }\n\n        my $labels_subfolder2 = join( ' ', sort @labels_subfolder2 ) ;\n\n        return $labels_subfolder2 ;\n}\n\nsub tests_labels\n{\n        note( 'Entering tests_labels()' ) ;\n\n        is( undef, labels(  ),      'labels: no parameters => undef' ) ;\n        is( undef, labels( undef ), 'labels: undef => undef' ) ;\n        require_ok( \"Test::MockObject\" ) ;\n        my $myimap = Test::MockObject->new(  ) ;\n\n        $myimap->mock( 'fetch_hash',\n                sub {\n                        return(\n                                { '1' => {\n                                        'X-GM-LABELS' => '\\Seen Blabla'\n                                        }\n                                }\n                        ) ;\n                }\n        ) ;\n        $myimap->mock( 'Debug'   , sub { } ) ;\n        $myimap->mock( 'Unescape', sub { return Mail::IMAPClient::Unescape( @_ ) } ) ; # real one\n\n        is( undef, labels( $myimap ), 'labels: one parameter => undef' ) ;\n        is( '\\Seen Blabla', labels( $myimap, '1' ), 'labels: $mysync UID_1 => \\Seen Blabla' ) ;\n\n        note( 'Leaving  tests_labels()' ) ;\n        return ;\n}\n\nsub labels\n{\n        my ( $myimap, $uid ) = @ARG ;\n\n        if ( not all_defined( $myimap, $uid ) ) {\n                return ;\n        }\n\n        my $hash = $myimap->fetch_hash( [ $uid ], 'X-GM-LABELS' ) ;\n\n        my $labels = $hash->{ $uid }->{ 'X-GM-LABELS' } ;\n        #$labels = $myimap->Unescape( $labels ) ;\n        return $labels ;\n}\n\nsub tests_synclabels\n{\n        note( 'Entering tests_synclabels()' ) ;\n\n        is( undef, synclabels(  ), 'synclabels: no parameters => undef' ) ;\n        is( undef, synclabels( undef ), 'synclabels: undef => undef' ) ;\n        my $mysync ;\n        is( undef, synclabels( $mysync ), 'synclabels: var undef => undef' ) ;\n\n        require_ok( \"Test::MockObject\" ) ;\n        $mysync = {} ;\n\n        my $myimap1 = Test::MockObject->new(  ) ;\n        $myimap1->mock( 'fetch_hash',\n                sub {\n                        return(\n                                { '1' => {\n                                        'X-GM-LABELS' => '\\Seen Blabla'\n                                        }\n                                }\n                        ) ;\n                }\n        ) ;\n        $myimap1->mock( 'Debug',    sub { } ) ;\n        $myimap1->mock( 'Unescape', sub { return Mail::IMAPClient::Unescape( @_ ) } ) ; # real one\n\n        my $myimap2 = Test::MockObject->new(  ) ;\n\n        $myimap2->mock( 'store',\n                sub {\n                        return 1 ;\n                }\n        ) ;\n\n\n        $mysync->{imap1} = $myimap1 ;\n        $mysync->{imap2} = $myimap2 ;\n\n        is( undef, synclabels( $mysync ), 'synclabels: fresh $mysync => undef' ) ;\n\n        is( undef, synclabels( $mysync, '1' ),  'synclabels: $mysync UID_1 alone => undef' )  ;\n        is( 1,     synclabels( $mysync, '1', '2' ), 'synclabels: $mysync UID_1 UID_2 => 1' ) ;\n\n        note( 'Leaving  tests_synclabels()' ) ;\n        return ;\n}\n\n\nsub synclabels\n{\n        my( $mysync, $uid1, $uid2 ) = @ARG ;\n\n        if ( not all_defined( $mysync, $uid1, $uid2 ) ) {\n                return ;\n        }\n        my $myimap1 = $mysync->{ 'imap1' } || return ;\n        my $myimap2 = $mysync->{ 'imap2' } || return ;\n\n        $mysync->{debuglabels} and $myimap1->Debug( 1 ) ;\n        my $labels1 = labels( $myimap1, $uid1 ) ;\n        $mysync->{debuglabels} and $myimap1->Debug( 0 ) ;\n        $mysync->{debuglabels} and myprint( \"Host1 labels: $labels1\\n\" ) ;\n\n\n\n        if ( $mysync->{ subfolder1 } and $labels1 )\n        {\n                $labels1 = labels_remove_subfolder1( $labels1, $mysync->{ subfolder1 } ) ;\n                $mysync->{debuglabels} and myprint( \"Host1 labels with subfolder1: $labels1\\n\" ) ;\n        }\n\n        if ( $mysync->{ subfolder2 } and $labels1 )\n        {\n                $labels1 = labels_add_subfolder2( $labels1, $mysync->{ subfolder2 } ) ;\n                $mysync->{debuglabels} and myprint( \"Host1 labels with subfolder2: $labels1\\n\" ) ;\n        }\n\n        my $store ;\n        if ( $labels1 and not $mysync->{ dry } )\n        {\n                $mysync->{ debuglabels } and $myimap2->Debug( 1 ) ;\n                $store = $myimap2->store( $uid2, \"X-GM-LABELS ($labels1)\" ) ;\n                $mysync->{ debuglabels } and $myimap2->Debug( 0 ) ;\n        }\n        return $store ;\n}\n\n\nsub tests_resynclabels\n{\n        note( 'Entering tests_resynclabels()' ) ;\n\n        is( undef, resynclabels(  ), 'resynclabels: no parameters => undef' ) ;\n        is( undef, resynclabels( undef ), 'resynclabels: undef => undef' ) ;\n        my $mysync ;\n        is( undef, resynclabels( $mysync ), 'resynclabels: var undef => undef' ) ;\n\n        my ( $h1_fir_ref, $h2_fir_ref ) ;\n\n        $mysync->{ debuglabels } = 1 ;\n        $h1_fir_ref->{ 11 }->{ 'X-GM-LABELS' } = '\\Seen Baa Kii' ;\n        $h2_fir_ref->{ 22 }->{ 'X-GM-LABELS' } = '\\Seen Baa Kii' ;\n\n        # labels are equal\n        is( 1,     resynclabels( $mysync, 11, 22, $h1_fir_ref, $h2_fir_ref ),\n                'resynclabels: $mysync UID_1 UID_2 labels are equal => 1' ) ;\n\n        # labels are different\n        $h2_fir_ref->{ 22 }->{ 'X-GM-LABELS' } = '\\Seen Zuu' ;\n        require_ok( \"Test::MockObject\" ) ;\n        my $myimap2 = Test::MockObject->new(  ) ;\n        $myimap2->mock( 'store',\n                sub {\n                        return 1 ;\n                }\n        ) ;\n        $myimap2->mock( 'Debug',    sub { } ) ;\n        $mysync->{imap2} = $myimap2 ;\n\n        is( 1,     resynclabels( $mysync, 11, 22, $h1_fir_ref, $h2_fir_ref ),\n                'resynclabels: $mysync UID_1 UID_2 labels are not equal => store => 1' ) ;\n\n        note( 'Leaving  tests_resynclabels()' ) ;\n        return ;\n}\n\n\n\nsub resynclabels\n{\n        my( $mysync, $uid1, $uid2, $h1_fir_ref, $h2_fir_ref, $h1_folder ) = @ARG ;\n\n        if ( not all_defined( $mysync, $uid1, $uid2, $h1_fir_ref, $h2_fir_ref ) ) {\n                return ;\n        }\n\n        my $labels1 = $h1_fir_ref->{ $uid1 }->{ 'X-GM-LABELS' } || q{} ;\n        my $labels2 = $h2_fir_ref->{ $uid2 }->{ 'X-GM-LABELS' } || q{} ;\n\n        if ( $mysync->{ subfolder1 } and $labels1 )\n        {\n                $labels1 = labels_remove_subfolder1( $labels1, $mysync->{ subfolder1 } ) ;\n        }\n\n        if ( $mysync->{ subfolder2 } and $labels1 )\n        {\n                $labels1 = labels_add_subfolder2( $labels1, $mysync->{ subfolder2 }, $h1_folder ) ;\n                $labels2 = labels_remove_special( $labels2 ) ;\n        }\n        $mysync->{ debuglabels } and myprint( \"Host1 labels fixed: $labels1\\n\" ) ;\n        $mysync->{ debuglabels } and myprint( \"Host2 labels      : $labels2\\n\" ) ;\n\n        my $store ;\n        if ( $labels1 eq $labels2 )\n        {\n                # no sync needed\n                $mysync->{ debuglabels } and myprint( \"Labels are already equal\\n\" ) ;\n                return 1 ;\n        }\n        elsif ( not $mysync->{ dry } )\n        {\n                # sync needed\n                $mysync->{debuglabels} and $mysync->{imap2}->Debug( 1 ) ;\n                $store = $mysync->{imap2}->store( $uid2, \"X-GM-LABELS ($labels1)\" ) ;\n                $mysync->{debuglabels} and $mysync->{imap2}->Debug( 0 ) ;\n        }\n\n        return $store ;\n}\n\nsub tests_uniq\n{\n        note( 'Entering tests_uniq()' ) ;\n\n        is( 0, uniq(  ),  'uniq: undef => 0' ) ;\n        is_deeply( [ 'one' ], [ uniq( 'one' ) ],  'uniq: one => one' ) ;\n        is_deeply( [ 'one' ], [ uniq( 'one', 'one' ) ],  'uniq: one one => one' ) ;\n        is_deeply( [ 'one', 'two' ], [ uniq( 'one', 'one', 'two', 'one', 'two' ) ],  'uniq: one one two one two => one two' ) ;\n        note( 'Leaving  tests_uniq()' ) ;\n        return ;\n}\n\nsub uniq\n{\n        my @list = @ARG ;\n        my %seen = (  ) ;\n        my @uniq = (  ) ;\n        foreach my $item ( @list ) {\n        if ( ! $seen{ $item } ) {\n                $seen{ $item } = 1 ;\n        push( @uniq, $item ) ;\n                }\n        }\n        return @uniq ;\n}\n\n\nsub length_ref\n{\n        my $string_ref = shift ;\n        my $string_len = defined  ${ $string_ref }  ? length( ${ $string_ref } ) : q{} ; # length or empty string\n        return $string_len ;\n}\n\nsub tests_length_ref\n{\n\tnote( 'Entering tests_length_ref()' ) ;\n\n        my $notdefined ;\n        is( q{}, length_ref( \\$notdefined ), q{length_ref: value not defined} ) ;\n        my $notref ;\n        is( q{}, length_ref( $notref ), q{length_ref: param not a ref} ) ;\n\n        my $lala = 'lala' ;\n        is( 4, length_ref( \\$lala ), q{length_ref: lala length == 4} ) ;\n        is( 4, length_ref( \\'lili' ), q{length_ref: lili length == 4} ) ;\n\n\tnote( 'Leaving  tests_length_ref()' ) ;\n        return ;\n}\n\nsub date_for_host2\n{\n        my( $h1_msg, $h1_idate ) = @_ ;\n\n        my $h1_date = q{} ;\n\n        if ( $syncinternaldates ) {\n                $h1_date = $h1_idate ;\n                $sync->{ debug } and myprint( \"internal date from host1: [$h1_date]\\n\"  ) ;\n                $h1_date = good_date( $h1_date ) ;\n                $sync->{ debug } and myprint( \"internal date from host1: [$h1_date] (fixed)\\n\"  ) ;\n        }\n\n        if ( $idatefromheader ) {\n                $h1_date = $sync->{imap1}->get_header( $h1_msg, 'Date' ) ;\n                $sync->{ debug } and myprint( \"header date from host1: [$h1_date]\\n\"  ) ;\n                $h1_date = good_date( $h1_date ) ;\n                $sync->{ debug } and myprint( \"header date from host1: [$h1_date] (fixed)\\n\"  ) ;\n        }\n\n        return( $h1_date ) ;\n}\n\n\nsub subject\n{\n        my $string = shift ;\n        my $subject = q{} ;\n\n        my $header = extract_header( $string ) ;\n\n        if( $header =~ m/^Subject:[ \\t]*([^\\n\\r]*)\\r?$/msx ) {\n                #myprint( \"MMM[$1]\\n\"  ) ;\n                $subject = $1 ;\n        }\n        return( $subject ) ;\n}\n\nsub tests_subject\n{\n        note( 'Entering tests_subject()' ) ;\n\n        ok( q{} eq subject( q{} ), 'subject: null') ;\n        is( '', subject( 'Subject:' ), 'Subject:') ;\n        is( '', subject( \"Subject:\\r\\n\" ), 'Subject:\\r\\n') ;\n        ok( 'toto le hero' eq subject( 'Subject: toto le hero' ), 'Subject: toto le hero') ;\n        ok( 'toto le hero' eq subject( 'Subject:toto le hero' ), 'Subject:toto le hero') ;\n        ok( 'toto le hero' eq subject( \"Subject:toto le hero\\r\\n\" ), 'Subject: toto le hero\\r\\n') ;\n\n        my $MESS ;\n        $MESS = <<'EOF';\nFrom: lalala\nSubject: toto le hero\nDate: zzzzzz\n\nBoogie boogie\nEOF\n        ok( 'toto le hero' eq subject( $MESS ), 'subject: toto le hero 2') ;\n\n        $MESS = <<'EOF';\nSubject: toto le hero\nFrom: lalala\nDate: zzzzzz\n\nBoogie boogie\nEOF\n        ok( 'toto le hero' eq subject( $MESS ), 'subject: toto le hero 3') ;\n\n\n        $MESS = <<'EOF';\nFrom: lalala\nSubject: cuicui\nDate: zzzzzz\n\nSubject: toto le hero\nEOF\n        ok( 'cuicui' eq subject( $MESS ), 'subject: cuicui') ;\n\n        $MESS = <<'EOF';\nFrom: lalala\nDate: zzzzzz\n\nSubject: toto le hero\nEOF\n        ok( q{} eq subject( $MESS ), 'subject: null but body could') ;\n\n\n        $MESS = <<'EOF';\nFrom: lalala\nSubject:\nDate: zzzzzz\n\nSubject: toto le hero\nEOF\n        is( '', subject( $MESS ), 'Subject:') ;\n\n\n\n\tnote( 'Leaving  tests_subject()' ) ;\n        return ;\n}\n\n\n# GlobVar\n# $h2_uidguess\n# ...\n#\n#\nsub append_message_on_host2\n{\n        my( $mysync, $string_ref, $h1_fold, $h1_msg, $string_len, $h2_fold, $h1_size, $h1_flags, $h1_date, $cache_dir ) = @_ ;\n        myprint( debugmemory( $mysync, \" at A1\" ) ) ;\n\n        my $new_id ;\n        if ( ! $mysync->{dry} ) {\n                $new_id = $mysync->{imap2}->append_string( $h2_fold, ${ $string_ref }, $h1_flags, $h1_date ) ;\n                myprint( debugmemory( $mysync, \" at A2\" ) ) ;\n                if ( ! defined $new_id ){\n                        my $subject = subject( ${ $string_ref } ) ;\n                        my $error_imap = $mysync->{imap2}->LastError || q{} ;\n                        my $error = \"- msg $h1_fold/$h1_msg {$string_len} could not append ( Subject:[$subject], Date:[$h1_date], Size:[$h1_size], Flags:[$h1_flags] ) to folder $h2_fold: $error_imap\\n\" ;\n                        errors_incr( $mysync, $error ) ;\n                        $mysync->{ h1_nb_msg_processed } +=1 ;\n                        return ;\n                }\n                else{\n                        # good\n                        # $new_id is an id if the IMAP server has the\n                        # UIDPLUS capability else just a ref\n                        if ( $new_id !~ m{^\\d+$}x ) {\n                                $new_id = lastuid( $mysync->{imap2}, $h2_fold, $h2_uidguess ) ;\n                        }\n                        if ( $mysync->{ synclabels } ) { synclabels( $mysync, $h1_msg, $new_id ) }\n                        $h2_uidguess += 1 ;\n                        $mysync->{ total_bytes_transferred } += $string_len ;\n                        $mysync->{ nb_msg_transferred } += 1 ;\n                        $mysync->{ h1_nb_msg_processed } +=1 ;\n                        $mysync->{ biggest_message_transferred } = max( $string_len, $mysync->{ biggest_message_transferred } ) ;\n\n                        my $time_spent = timesince( $mysync->{begin_transfer_time} ) ;\n                        my $rate = bytes_display_string_bin( $mysync->{total_bytes_transferred} / $time_spent ) ;\n                        my $eta = eta( $mysync ) ;\n                        my $amount_transferred = bytes_display_string_bin( $mysync->{total_bytes_transferred} ) ;\n                        myprintf( \"msg %s/%-19s copied to %s/%-10s %.2f msgs/s  %s/s %s copied %s\\n\",\n                        $h1_fold, \"$h1_msg {$string_len}\", $h2_fold, $new_id, $mysync->{nb_msg_transferred}/$time_spent, $rate,\n                        $amount_transferred,\n                        $eta );\n                        sleep_if_needed( $mysync ) ;\n                        if ( $usecache and $cacheaftercopy and $new_id =~ m{^\\d+$}x ) {\n                                $debugcache and myprint( \"touch $cache_dir/${h1_msg}_$new_id\\n\"  ) ;\n                                touch( \"$cache_dir/${h1_msg}_$new_id\" )\n                                or croak( \"Couldn't touch $cache_dir/${h1_msg}_$new_id\" ) ;\n                        }\n                        if ( $mysync->{ delete1 } ) {\n                                delete_message_on_host1( $mysync, $h1_fold, $mysync->{ expungeaftereach }, $h1_msg ) ;\n                        }\n                        #myprint( \"PRESS ENTER\" ) and my $a = <> ;\n\n                        return( $new_id ) ;\n                }\n        }\n        else{\n                $nb_msg_skipped_dry_mode += 1 ;\n                $mysync->{ h1_nb_msg_processed } += 1 ;\n        }\n\n        return ;\n}\n\n\nsub tests_sleep_if_needed\n{\n\tnote( 'Entering tests_sleep_if_needed()' ) ;\n\n\tis( undef, sleep_if_needed(  ), 'sleep_if_needed: no args => undef' ) ;\n\tmy $mysync ;\n\tis( undef, sleep_if_needed( $mysync ), 'sleep_if_needed: arg undef => undef' ) ;\n\n\t$mysync->{maxbytespersecond} = 1000 ;\n\tis( 0, sleep_if_needed( $mysync ), 'sleep_if_needed: maxbytespersecond only => no sleep => 0' ) ;\n\t$mysync->{begin_transfer_time} = time ; # now\n\tis( 0, sleep_if_needed( $mysync ), 'sleep_if_needed: begin_transfer_time now => no sleep => 0' ) ;\n\t$mysync->{begin_transfer_time} = time - 2 ; # 2 s before\n\tis( 0, sleep_if_needed( $mysync ), 'sleep_if_needed: total_bytes_transferred == 0 => no sleep => 0' ) ;\n\n\t$mysync->{total_bytes_transferred} = 2200 ;\n\t$mysync->{begin_transfer_time} = time - 2 ; # 2 s before\n\tis( '0.20', sleep_if_needed( $mysync ), 'sleep_if_needed: total_bytes_transferred == 2200 since 2s => sleep 0.2s' ) ;\n\tis( '0',  sleep_if_needed( $mysync ),   'sleep_if_needed: total_bytes_transferred == 2200 since 2+2 == 4s => no sleep' ) ;\n\n\t$mysync->{maxsleep} = 0.1 ;\n\t$mysync->{begin_transfer_time} = time - 2 ; # 2 s before again\n\tis( '0.10', sleep_if_needed( $mysync ), 'sleep_if_needed: total_bytes_transferred == 4000 since 2s but maxsleep 0.1s => sleep 0.1s' ) ;\n\n\t$mysync->{maxbytesafter} = 4000 ;\n\t$mysync->{begin_transfer_time} = time - 2 ; # 2 s before again\n\tis( 0, sleep_if_needed( $mysync ), 'sleep_if_needed: maxbytesafter == total_bytes_transferred => no sleep => 0' ) ;\n\n\tnote( 'Leaving  tests_sleep_if_needed()' ) ;\n\treturn ;\n}\n\n\nsub sleep_if_needed\n{\n        my( $mysync ) = shift ;\n\n        if ( ! $mysync ) {\n                return ;\n        }\n        # No need to go further if there is no limit set\n        if (\n                not (\n                        $mysync->{maxmessagespersecond}\n                        or $mysync->{maxbytespersecond}\n                )\n        ) {\n                return ;\n        }\n\n\t$mysync->{maxsleep} = defined $mysync->{maxsleep} ? $mysync->{maxsleep} : $MAX_SLEEP ;\n        # Must be positive\n        $mysync->{maxsleep} = max( 0, $mysync->{maxsleep} ) ;\n\n\tmy $time_spent = timesince( $mysync->{begin_transfer_time} ) ;\n        my $sleep_max_messages = sleep_max_messages( $mysync->{nb_msg_transferred}, $time_spent, $mysync->{maxmessagespersecond} ) ;\n\n\tmy $maxbytesafter = $mysync->{maxbytesafter} || 0 ;\n\tmy $total_bytes_transferred = $mysync->{total_bytes_transferred} || 0 ;\n\tmy $total_bytes_to_consider = $total_bytes_transferred - $maxbytesafter ;\n\n\t#myprint( \"maxbytesafter:$maxbytesafter\\n\" ) ;\n\t#myprint( \"total_bytes_to_consider:$total_bytes_to_consider\\n\" ) ;\n\n        my $sleep_max_bytes = sleep_max_bytes( $total_bytes_to_consider, $time_spent, $mysync->{maxbytespersecond}  ) ;\n        my $sleep_max = min( $mysync->{maxsleep}, max( $sleep_max_messages, $sleep_max_bytes ) ) ;\n\t$sleep_max = mysprintf( \"%.2f\", $sleep_max ) ; # round with 2 decimals.\n        if ( $sleep_max > 0 ) {\n                myprint( \"sleeping $sleep_max s\\n\" ) ;\n                sleep $sleep_max ;\n\t\t# Slept\n\t\treturn $sleep_max ;\n        }\n\t# No sleep\n        return 0 ;\n}\n\nsub sleep_max_messages\n{\n        # how long we have to sleep to go under max_messages_per_second\n        my( $nb_msg_transferred, $time_spent, $maxmessagespersecond ) = @_ ;\n        if ( ( not defined  $maxmessagespersecond  ) or $maxmessagespersecond <= 0 ) { return( 0 ) } ;\n        my $sleep = ( $nb_msg_transferred / $maxmessagespersecond ) - $time_spent ;\n        # the sleep must be positive\n        return( max( 0, $sleep ) ) ;\n}\n\n\nsub tests_sleep_max_messages\n{\n\tnote( 'Entering tests_sleep_max_messages()' ) ;\n\n        ok( 0 == sleep_max_messages( 4, 2, undef ),  'sleep_max_messages: maxmessagespersecond = undef') ;\n        ok( 0 == sleep_max_messages( 4, 2, 0 ),  'sleep_max_messages: maxmessagespersecond = 0') ;\n        ok( 0 == sleep_max_messages( 4, 2, $MINUS_ONE ), 'sleep_max_messages: maxmessagespersecond = -1') ;\n        ok( 0 == sleep_max_messages( 4, 2, 2 ),  'sleep_max_messages: maxmessagespersecond = 2 max reached') ;\n        ok( 2 == sleep_max_messages( 8, 2, 2 ),  'sleep_max_messages: maxmessagespersecond = 2 max over') ;\n        ok( 0 == sleep_max_messages( 2, 2, 2 ),  'sleep_max_messages: maxmessagespersecond = 2 max not reached') ;\n\n\tnote( 'Leaving  tests_sleep_max_messages()' ) ;\n        return ;\n}\n\n\nsub sleep_max_bytes\n{\n        # how long we have to sleep to go under max_bytes_per_second\n        my( $total_bytes_to_consider, $time_spent, $maxbytespersecond ) = @_ ;\n\t$total_bytes_to_consider ||= 0 ;\n\t$time_spent ||= 0 ;\n\n        if ( ( not defined  $maxbytespersecond  ) or $maxbytespersecond <= 0 ) { return( 0 ) } ;\n\t#myprint( \"total_bytes_to_consider:$total_bytes_to_consider\\n\" ) ;\n        my $sleep = ( $total_bytes_to_consider / $maxbytespersecond ) - $time_spent ;\n        # the sleep must be positive\n        return( max( 0, $sleep ) ) ;\n}\n\n\nsub tests_sleep_max_bytes\n{\n        note( 'Entering tests_sleep_max_bytes()' ) ;\n\n        ok( 0 == sleep_max_bytes( 4000, 2, undef ),  'sleep_max_bytes: maxbytespersecond == undef => sleep 0' ) ;\n        ok( 0 == sleep_max_bytes( 4000, 2, 0 ),  'sleep_max_bytes: maxbytespersecond = 0 => sleep 0') ;\n        ok( 0 == sleep_max_bytes( 4000, 2, $MINUS_ONE ), 'sleep_max_bytes: maxbytespersecond = -1 => sleep 0') ;\n        ok( 0 == sleep_max_bytes( 4000, 2, 2000 ),  'sleep_max_bytes: maxbytespersecond = 2k max reached sharp => sleep 0') ;\n        ok( 2 == sleep_max_bytes( 8000, 2, 2000 ),  'sleep_max_bytes: maxbytespersecond = 2k max over => sleep a little') ;\n        ok( 0 == sleep_max_bytes( -8000, 2, 2000 ), 'sleep_max_bytes: maxbytespersecond = 2k max not reached => sleep 0') ;\n        ok( 0 == sleep_max_bytes( 2000, 2, 2000 ),  'sleep_max_bytes: maxbytespersecond = 2k max not reached => sleep 0') ;\n        ok( 0 == sleep_max_bytes( -2000, 2, 1000 ), 'sleep_max_bytes: maxbytespersecond = 1k max not reached => sleep 0') ;\n\n        note( 'Leaving  tests_sleep_max_bytes()' ) ;\n        return ;\n}\n\n\nsub delete_message_on_host1\n{\n        my( $mysync, $h1_fold, $expunge, @h1_msg ) = @_ ;\n        if ( ! $mysync->{ delete1 } ) { return ; }\n        if ( ! @h1_msg ) { return ; }\n        delete_messages_on_any(\n                $mysync,\n                $mysync->{ acc1 },\n                $mysync->{ imap1 },\n                \"Host1: $h1_fold\",\n                $expunge,\n                $split1,\n                @h1_msg ) ;\n        return ;\n}\n\nsub tests_operators_and_exclam_precedence\n{\n        note( 'Entering tests_operators_and_exclam_precedence()' ) ;\n\n        is(  1, ! 0, 'tests_operators_and_exclam_precedence: ! 0 => 1' ) ;\n        is( \"\", ! 1, 'tests_operators_and_exclam_precedence: ! 1 => \"\"' ) ;\n        is(  1, not( 0 ), 'tests_operators_and_exclam_precedence: not( 0 ) => 1' ) ;\n        is( \"\", not( 1 ), 'tests_operators_and_exclam_precedence: not( 1 ) => \"\"' ) ;\n\n        # I wrote those tests to avoid perlcrit \"Mixed high and low-precedence booleans\"\n        # and change sub delete_messages_on_any() but got 4 more warnings... So now commented.\n\n        #is(  0, ( ! 0 and 0 ), 'tests_operators_and_exclam_precedence: ! 0 and 0 ) =>  0' ) ;\n        #is(  1, ( ! 0 and 1 ), 'tests_operators_and_exclam_precedence: ! 0 and 1 ) =>  1' ) ;\n        #is( \"\", ( ! 1 and 0 ), 'tests_operators_and_exclam_precedence: ! 1 and 0 ) => \"\"' ) ;\n        #is( \"\", ( ! 1 and 1 ), 'tests_operators_and_exclam_precedence: ! 1 and 1 ) => \"\"' ) ;\n\n        is(  0, ( ! 0 && 0 ), 'tests_operators_and_exclam_precedence: ! 0 && 0 ) =>  0' ) ;\n        is(  1, ( ! 0 && 1 ), 'tests_operators_and_exclam_precedence: ! 0 && 1 ) =>  1' ) ;\n        is( \"\", ( ! 1 && 0 ), 'tests_operators_and_exclam_precedence: ! 1 && 0 ) => \"\"' ) ;\n        is( \"\", ( ! 1 && 1 ), 'tests_operators_and_exclam_precedence: ! 1 && 1 ) => \"\"' ) ;\n\n        is(  2, ( ! 0 && 2 ), 'tests_operators_and_exclam_precedence: ! 0 && 2 ) =>  1' ) ;\n\n        note( 'Leaving  tests_operators_and_exclam_precedence()' ) ;\n        return ;\n}\n\n\nsub delete_messages_on_any\n{\n        # $acc is not used yet,\n        #\n        my( $mysync, $acc, $imap, $hostX_folder, $expunge, $split, @messages  ) = @_ ;\n        my $expunge_message = q{} ;\n\n        my $dry_message = $mysync->{ dry_message } ;\n        $expunge_message = 'and expunged' if ( $expunge ) ;\n        # \"Host1: msg \"\n\n        # $imap->Debug( 1 ) ;\n\n        my @messages_to_mark_deleted = @messages ;\n        while ( my @messages_part = splice @messages_to_mark_deleted, 0, $split )\n        {\n                foreach my $message ( @messages_part )\n                {\n                        myprint( \"$hostX_folder/$message marking deleted $expunge_message $dry_message\\n\"  ) ;\n                }\n                if ( ! $mysync->{dry} && @messages_part )\n                {\n                        my $nb_deleted = $imap->delete_message( $imap->Range( @messages_part ) ) ;\n                        if ( defined $nb_deleted )\n                        {\n                                # $nb_deleted is not accurate\n                                $acc->{ nb_msg_deleted } += scalar @messages_part ;\n                        }\n                        else\n                        {\n                                my $error_imap = $imap->LastError || q{} ;\n                                my $error = join( q{}, \"$hostX_folder folder, could not delete \",\n                                        scalar @messages_part, ' messages: ', $error_imap, \"\\n\" ) ;\n                                errors_incr( $mysync, $error ) ;\n                        }\n                }\n        }\n\n        if ( $expunge ) {\n                uidexpunge_or_expunge( $mysync, $imap, @messages ) ;\n        }\n\n        #$imap->Debug( 0 ) ;\n\n        return ;\n}\n\n\nsub tests_uidexpunge_or_expunge\n{\n        note( 'Entering tests_uidexpunge_or_expunge()' ) ;\n\n\n        is( undef, uidexpunge_or_expunge(  ), 'uidexpunge_or_expunge: no args => undef' ) ;\n        my $mysync ;\n        is( undef, uidexpunge_or_expunge( $mysync ), 'uidexpunge_or_expunge: undef args => undef' ) ;\n        $mysync = {} ;\n        is( undef, uidexpunge_or_expunge( $mysync ), 'uidexpunge_or_expunge: arg empty => undef' ) ;\n        my $imap ;\n        is( undef, uidexpunge_or_expunge( $mysync, $imap ), 'uidexpunge_or_expunge: undef Mail-IMAPClient instance => undef' ) ;\n\n        require_ok( \"Test::MockObject\" ) ;\n        $imap = Test::MockObject->new(  ) ;\n        is( undef, uidexpunge_or_expunge( $mysync, $imap ), 'uidexpunge_or_expunge: no message (1) to uidexpunge => undef' ) ;\n\n        my @messages = (  ) ;\n        is( undef, uidexpunge_or_expunge( $mysync, $imap, @messages ), 'uidexpunge_or_expunge: no message (2) to uidexpunge => undef' ) ;\n\n        @messages = ( '2', '1' ) ;\n        $imap->mock( 'uidexpunge', sub { return ; } ) ;\n        $imap->mock( 'expunge',    sub { return ; } ) ;\n        is( undef, uidexpunge_or_expunge( $mysync, $imap, @messages ), 'uidexpunge_or_expunge: uidexpunge failure => expunge failure => undef' ) ;\n\n        $imap->mock( 'expunge',    sub { return 1 ; } ) ;\n        is( 1, uidexpunge_or_expunge( $mysync, $imap, @messages ), 'uidexpunge_or_expunge: uidexpunge failure => expunge ok => 1' ) ;\n\n        $imap->mock( 'uidexpunge',    sub { return 1 ; } ) ;\n        is( 1, uidexpunge_or_expunge( $mysync, $imap, @messages ), 'uidexpunge_or_expunge: messages to uidexpunge ok => 1' ) ;\n\n        note( 'Leaving  tests_uidexpunge_or_expunge()' ) ;\n        return ;\n}\n\nsub uidexpunge_or_expunge\n{\n        my $mysync = shift ;\n        my $imap = shift ;\n        my @messages = @ARG ;\n\n        if ( ! $imap ) { return ; } ;\n        if ( ! @messages ) { return ; } ;\n\n        # Doing uidexpunge\n        my @uidexpunge_result = $imap->uidexpunge( @messages ) ;\n        if ( @uidexpunge_result ) {\n                return 1 ;\n        }\n        # Failure so doing expunge\n        my $expunge_result = $imap->expunge(  ) ;\n        if ( $expunge_result ) {\n                return 1 ;\n        }\n        # bad trip\n        return ;\n}\n\nsub eta_print\n{\n        my $mysync = shift ;\n        if ( my $eta = eta( $mysync ) )\n        {\n                myprint( \"$eta\\n\" ) ;\n        }\n        return ;\n}\n\nsub tests_eta\n{\n        note( 'Entering tests_eta()' ) ;\n\n        is( q{}, eta(  ),      'eta: no args => \"\"' ) ;\n        is( q{}, eta( undef ),  'eta: undef => \"\"' ) ;\n        my $mysync = {} ;\n        # No foldersizes\n        is( q{}, eta( $mysync ),  'eta: No foldersizes => \"\"' ) ;\n\n        $mysync->{ foldersizes } = 1 ;\n\n        $mysync->{ begin_transfer_time } = time ; # Now\n        $mysync->{ h1_nb_msg_processed } = 0 ;\n\n        is( \"ETA: \" . localtimez( time ) . \"  0 s  0/0 msgs left\",\n                eta( $mysync ),\n                'eta: no args => ETA: \"Now\"  0 s  0/0 msgs left' ) ;\n\n        $mysync->{ h1_nb_msg_processed } = 1 ;\n        $mysync->{ h1_nb_msg_start }     = 2 ;\n        is( \"ETA: \" . localtimez( time ) . \"  0 s  1/2 msgs left\",\n                eta( $mysync ),\n                'eta: 1, 1, 2 => ETA: \"Now\"  0 s  1/2 msgs left' ) ;\n\n        note( 'Leaving  tests_eta()' ) ;\n        return ;\n}\n\n\nsub eta\n{\n        my( $mysync ) = shift ;\n\n        if ( ! $mysync )\n        {\n                return q{} ;\n        }\n\n        return( q{} ) if not $mysync->{ foldersizes } ;\n\n        my $h1_nb_msg_start    = $mysync->{ h1_nb_msg_start } ;\n        my $h1_nb_processed    = $mysync->{ h1_nb_msg_processed } ;\n        my $nb_msg_transferred = ( $mysync->{dry} ) ? $mysync->{ h1_nb_msg_processed } : $mysync->{ nb_msg_transferred } ;\n        my $time_spent = timesince( $mysync->{ begin_transfer_time } ) ;\n        $h1_nb_processed ||= 0 ;\n        $h1_nb_msg_start ||= 0 ;\n        $time_spent      ||= 0 ;\n\n        my $time_remaining = time_remaining( $time_spent, $h1_nb_processed, $h1_nb_msg_start, $nb_msg_transferred ) ;\n        $mysync->{ debug } and myprint( \"time_spent: $time_spent time_remaining: $time_remaining\\n\" ) ;\n        my $nb_msg_remaining = $h1_nb_msg_start - $h1_nb_processed ;\n        my $eta_date = localtimez( time + $time_remaining ) ;\n        return( mysprintf( 'ETA: %s  %1.0f s  %s/%s msgs left',\n                $eta_date, $time_remaining, $nb_msg_remaining, $h1_nb_msg_start ) ) ;\n}\n\n\n\n\nsub time_remaining\n{\n\n        my( $my_time_spent, $h1_nb_processed, $h1_nb_msg_start, $nb_transferred ) = @_ ;\n\n        $nb_transferred  ||= 1 ; # At least one is done (no division by zero)\n        $h1_nb_processed ||= 0 ;\n        $h1_nb_msg_start ||= $h1_nb_processed ;\n        $my_time_spent   ||= 0 ;\n\n        my $time_remaining = ( $my_time_spent / $nb_transferred ) * ( $h1_nb_msg_start - $h1_nb_processed ) ;\n        return( $time_remaining ) ;\n}\n\n\nsub tests_time_remaining\n{\n        note( 'Entering tests_time_remaining()' ) ;\n\n        # time_spent, nb_processed, nb_to_do_total, nb_transferred\n        is( 0, time_remaining(  ), 'time_remaining: no args -> 0'   ) ;\n        is( 0, time_remaining( 0, 0,  0, 0 ), 'time_remaining: 0, 0, 0, 0 -> 0'   ) ;\n        is( 1, time_remaining( 1, 1,  2, 1 ), 'time_remaining: 1, 1, 2, 1 -> 1' ) ;\n        is( 1, time_remaining( 9, 9, 10, 9 ), 'time_remaining: 9, 9, 10, 9 -> 1' ) ;\n        is( 9, time_remaining( 1, 1, 10, 1 ), 'time_remaining: 1, 1, 10, 1 -> 9' ) ;\n        is( 5, time_remaining( 5, 5, 10, 5 ), 'time_remaining: 5, 5, 10, 5 -> 5' ) ;\n        is( 25, time_remaining( 5, 5, 10, 0 ), 'time_remaining: 5, 5, 10, 0 -> ( 5 / 1 ) * ( 10 - 5) = 25' ) ;\n        is( 25, time_remaining( 5, 5, 10, 1 ), 'time_remaining: 5, 5, 10, 1 -> ( 5 / 1 ) * ( 10 - 5) = 25' ) ;\n\n        note( 'Leaving  tests_time_remaining()' ) ;\n        return ;\n}\n\n\nsub cache_map\n{\n        my ( $cache_files_ref, $h1_msgs_ref, $h2_msgs_ref ) = @_;\n        my ( %map1_2, %map2_1, %done2 ) ;\n\n        my $h1_msgs_hash_ref = {  } ;\n        my $h2_msgs_hash_ref = {  } ;\n\n        @{ $h1_msgs_hash_ref }{ @{ $h1_msgs_ref } } = (  ) ;\n        @{ $h2_msgs_hash_ref }{ @{ $h2_msgs_ref } } = (  ) ;\n\n        foreach my $file ( sort @{ $cache_files_ref } ) {\n                $debugcache and myprint( \"C12: $file\\n\"  ) ;\n                ( $uid1, $uid2 ) = match_a_cache_file( $file ) ;\n\n                if (  exists( $h1_msgs_hash_ref->{ defined  $uid1  ? $uid1 : q{} } )\n                  and exists( $h2_msgs_hash_ref->{ defined  $uid2  ? $uid2 : q{} } ) ) {\n                        # keep only the greatest uid2\n                        # 130_2301 and\n                        # 130_231  => keep only 130 -> 2301\n\n                        # keep only the greatest uid1\n                        # 1601_260 and\n                        #  161_260 => keep only 1601 -> 260\n                        my $max_uid2 = max( $uid2, $map1_2{ $uid1 } || $MINUS_ONE ) ;\n                        if ( exists $done2{ $max_uid2 } ) {\n                                if ( $done2{ $max_uid2 } < $uid1 )  {\n                                        $map1_2{ $uid1 } = $max_uid2 ;\n                                        delete $map1_2{ $done2{ $max_uid2 } } ;\n                                        $done2{ $max_uid2 } = $uid1 ;\n                                }\n                        }else{\n                                $map1_2{ $uid1 } = $max_uid2 ;\n                                $done2{ $max_uid2 } = $uid1 ;\n                        }\n                };\n\n        }\n        %map2_1 = reverse %map1_2 ;\n        return( \\%map1_2, \\%map2_1) ;\n}\n\nsub tests_cache_map\n{\n\tnote( 'Entering tests_cache_map()' ) ;\n\n        #$debugcache = 1 ;\n        my @cache_files = qw (\n        100_200\n        101_201\n        120_220\n        142_242\n        143_243\n        177_277\n        177_278\n        177_279\n        155_255\n        180_280\n        181_280\n        182_280\n        130_231\n        130_2301\n        161_260\n        1601_260\n        ) ;\n\n        my $msgs_1 = [120, 142, 143, 144, 161, 1601,           177,      182, 130 ];\n        my $msgs_2 = [     242, 243,       260,      299, 377, 279, 255, 280, 231, 2301 ];\n\n        my( $c12, $c21 ) ;\n        ok( ( $c12, $c21 ) = cache_map( \\@cache_files, $msgs_1, $msgs_2 ), 'cache_map: 02' );\n        my $a1 = [ sort { $a <=> $b } keys %{ $c12 } ] ;\n        my $a2 = [ sort { $a <=> $b } keys %{ $c21 } ] ;\n        ok( 0 == compare_lists( [ 130, 142, 143,      177, 182, 1601      ], $a1 ), 'cache_map: 03' );\n        ok( 0 == compare_lists( [      242, 243, 260, 279, 280,      2301 ], $a2 ), 'cache_map: 04' );\n        ok( ! $c12->{161},        'cache_map: ! 161 ->  260' );\n        ok( 260  == $c12->{1601}, 'cache_map:  1601 ->  260' );\n        ok( 2301 == $c12->{130},  'cache_map:   130 -> 2301' );\n        #myprint( $c12->{1601}, \"\\n\" ) ;\n\n\tnote( 'Leaving  tests_cache_map()' ) ;\n        return ;\n\n}\n\nsub cache_dir_fix\n{\n        my $cache_dir = shift ;\n        $cache_dir =~ s/([;<>\\*\\|`&\\$!#\\(\\)\\[\\]\\{\\}:'\"\\\\])/\\\\$1/xg ;\n        #myprint( \"cache_dir_fix: $cache_dir\\n\"  ) ;\n        return( $cache_dir ) ;\n}\n\nsub tests_cache_dir_fix\n{\n\tnote( 'Entering tests_cache_dir_fix()' ) ;\n\n        ok( 'lalala' eq  cache_dir_fix('lalala'),  'cache_dir_fix: lalala -> lalala' );\n        ok( 'ii\\\\\\\\ii' eq  cache_dir_fix('ii\\ii'), 'cache_dir_fix: ii\\ii -> ii\\\\\\\\ii' );\n        ok( 'ii@ii' eq  cache_dir_fix('ii@ii'),  'cache_dir_fix: ii@ii -> ii@ii' );\n        ok( 'ii@ii\\\\:ii' eq  cache_dir_fix('ii@ii:ii'), 'cache_dir_fix: ii@ii:ii -> ii@ii\\\\:ii' );\n        ok( 'i\\\\\\\\i\\\\\\\\ii' eq  cache_dir_fix('i\\i\\ii'), 'cache_dir_fix: i\\i\\ii -> i\\\\\\\\i\\\\\\\\ii' );\n        ok( 'i\\\\\\\\ii' eq  cache_dir_fix('i\\\\ii'), 'cache_dir_fix: i\\\\ii -> i\\\\\\\\\\\\\\\\ii' );\n        ok( '\\\\\\\\ ' eq  cache_dir_fix('\\\\ '), 'cache_dir_fix: \\\\  -> \\\\\\\\\\ ' );\n        ok( '\\\\\\\\ ' eq  cache_dir_fix('\\ '), 'cache_dir_fix: \\  -> \\\\\\\\\\ ' );\n        ok( '\\[bracket\\]' eq  cache_dir_fix('[bracket]'), 'cache_dir_fix: [bracket] -> \\[bracket\\]' );\n\n\tnote( 'Leaving  tests_cache_dir_fix()' ) ;\n        return ;\n}\n\nsub cache_dir_fix_win\n{\n        my $cache_dir = shift ;\n        $cache_dir =~ s/(\\[|\\])/[$1]/xg ;\n        #myprint( \"cache_dir_fix_win: $cache_dir\\n\"  ) ;\n        return( $cache_dir ) ;\n}\n\nsub tests_cache_dir_fix_win\n{\n\tnote( 'Entering tests_cache_dir_fix_win()' ) ;\n\n        ok( 'lalala' eq  cache_dir_fix_win('lalala'),  'cache_dir_fix_win: lalala -> lalala' );\n        ok( '[[]bracket[]]' eq  cache_dir_fix_win('[bracket]'), 'cache_dir_fix_win: [bracket] -> [[]bracket[]]' );\n\n\tnote( 'Leaving  tests_cache_dir_fix_win()' ) ;\n        return ;\n}\n\n\n\n\nsub get_cache\n{\n        my ( $cache_dir, $h1_msgs_ref, $h2_msgs_ref, $h1_msgs_all_hash_ref, $h2_msgs_all_hash_ref ) = @_;\n\n        $debugcache and myprint( \"Entering get_cache\\n\" ) ;\n\n        -d $cache_dir or return( undef ); # exit if cache directory doesn't exist\n        $debugcache and myprint( \"cache_dir : $cache_dir\\n\" ) ;\n\n\n        if ( 'MSWin32' ne $OSNAME ) {\n                $cache_dir = cache_dir_fix( $cache_dir ) ;\n        }else{\n                $cache_dir = cache_dir_fix_win( $cache_dir ) ;\n        }\n\n        $debugcache and myprint( \"cache_dir_fix: $cache_dir\\n\"  ) ;\n\n        my @cache_files = bsd_glob( \"$cache_dir/*\" ) ;\n        #$debugcache and myprint( \"cache_files: [@cache_files]\\n\"  ) ;\n\n        $debugcache and myprint( 'cache_files: ', scalar  @cache_files , \" files found\\n\" ) ;\n\n        my( $cache_1_2_ref, $cache_2_1_ref )\n          = cache_map( \\@cache_files, $h1_msgs_ref, $h2_msgs_ref ) ;\n\n        clean_cache( \\@cache_files, $cache_1_2_ref, $h1_msgs_all_hash_ref, $h2_msgs_all_hash_ref ) ;\n\n        $debugcache and myprint( \"Exiting get_cache\\n\" ) ;\n        return( $cache_1_2_ref, $cache_2_1_ref ) ;\n}\n\n\nsub tests_get_cache\n{\n\tnote( 'Entering tests_get_cache()' ) ;\n\n        ok( not( get_cache('/cache_no_exist') ), 'get_cache: /cache_no_exist' );\n        ok( ( not -d 'W/tmp/cache/F1/F2' or rmtree( 'W/tmp/cache/F1/F2' ) ), 'get_cache: rmtree W/tmp/cache/F1/F2' ) ;\n        ok( mkpath( 'W/tmp/cache/F1/F2' ), 'get_cache: mkpath W/tmp/cache/F1/F2' ) ;\n\n        my @test_files_cache = ( qw(\n        W/tmp/cache/F1/F2/100_200\n        W/tmp/cache/F1/F2/101_201\n        W/tmp/cache/F1/F2/120_220\n        W/tmp/cache/F1/F2/142_242\n        W/tmp/cache/F1/F2/143_243\n        W/tmp/cache/F1/F2/177_277\n        W/tmp/cache/F1/F2/177_377\n        W/tmp/cache/F1/F2/177_777\n        W/tmp/cache/F1/F2/155_255\n        ) ) ;\n        ok( touch( @test_files_cache ), 'get_cache: touch W/tmp/cache/F1/F2/...' ) ;\n\n\n        # on cache: 100_200 101_201 142_242 143_243 177_277 177_377 177_777 155_255\n        # on live:\n        my $msgs_1 = [120, 142, 143, 144,          177      ];\n        my $msgs_2 = [     242, 243,     299, 377, 777, 255 ];\n\n        my $msgs_all_1 = { 120 => 0, 142 => 0, 143 => 0, 144 => 0, 177 => 0 } ;\n        my $msgs_all_2 = { 242 => 0, 243 => 0, 299 => 0, 377 => 0, 777 => 0, 255 => 0 } ;\n\n        my( $c12, $c21 ) ;\n        ok( ( $c12, $c21 ) = get_cache( 'W/tmp/cache/F1/F2', $msgs_1, $msgs_2, $msgs_all_1, $msgs_all_2 ), 'get_cache: 02' );\n        my $a1 = [ sort { $a <=> $b } keys %{ $c12 } ] ;\n        my $a2 = [ sort { $a <=> $b } keys %{ $c21 } ] ;\n        ok( 0 == compare_lists( [ 142, 143, 177 ], $a1 ), 'get_cache: 03' );\n        ok( 0 == compare_lists( [ 242, 243, 777 ], $a2 ), 'get_cache: 04' );\n        ok( -f 'W/tmp/cache/F1/F2/142_242', 'get_cache: file kept 142_242');\n        ok( -f 'W/tmp/cache/F1/F2/142_242', 'get_cache: file kept 143_243');\n        ok( ! -f 'W/tmp/cache/F1/F2/100_200', 'get_cache: file removed 100_200');\n        ok( ! -f 'W/tmp/cache/F1/F2/101_201', 'get_cache: file removed 101_201');\n\n        # test clean_cache executed\n        $maxage = 2 ;\n        ok( touch(@test_files_cache), 'get_cache: touch W/tmp/cache/F1/F2/...' ) ;\n        ok( ( $c12, $c21 ) = get_cache('W/tmp/cache/F1/F2', $msgs_1, $msgs_2, $msgs_all_1, $msgs_all_2 ), 'get_cache: 02' );\n        ok( -f 'W/tmp/cache/F1/F2/142_242', 'get_cache: file kept 142_242');\n        ok( -f 'W/tmp/cache/F1/F2/142_242', 'get_cache: file kept 143_243');\n        ok( ! -f 'W/tmp/cache/F1/F2/100_200', 'get_cache: file NOT removed 100_200');\n        ok( ! -f 'W/tmp/cache/F1/F2/101_201', 'get_cache: file NOT removed 101_201');\n\n\n        # strange files\n        #$debugcache = 1 ;\n        $maxage = undef ;\n        ok( ( not -d 'W/tmp/cache/rr\\uee' or rmtree( 'W/tmp/cache/rr\\uee' )), 'get_cache: rmtree W/tmp/cache/rr\\uee' ) ;\n        ok( mkpath( 'W/tmp/cache/rr\\uee' ), 'get_cache: mkpath W/tmp/cache/rr\\uee' ) ;\n\n        @test_files_cache = ( qw(\n        W/tmp/cache/rr\\uee/100_200\n        W/tmp/cache/rr\\uee/101_201\n        W/tmp/cache/rr\\uee/120_220\n        W/tmp/cache/rr\\uee/142_242\n        W/tmp/cache/rr\\uee/143_243\n        W/tmp/cache/rr\\uee/177_277\n        W/tmp/cache/rr\\uee/177_377\n        W/tmp/cache/rr\\uee/177_777\n        W/tmp/cache/rr\\uee/155_255\n        ) ) ;\n        ok( touch(@test_files_cache), 'get_cache: touch strange W/tmp/cache/...' ) ;\n\n        # on cache: 100_200 101_201 142_242 143_243 177_277 177_377 177_777 155_255\n        # on live:\n        $msgs_1 = [120, 142, 143, 144,          177      ] ;\n        $msgs_2 = [     242, 243,     299, 377, 777, 255 ] ;\n\n        $msgs_all_1 = { 120 => q{}, 142 => q{}, 143 => q{}, 144 => q{}, 177 => q{} } ;\n        $msgs_all_2 = { 242 => q{}, 243 => q{}, 299 => q{}, 377 => q{}, 777 => q{}, 255 => q{} } ;\n\n        ok( ( $c12, $c21 ) = get_cache('W/tmp/cache/rr\\uee', $msgs_1, $msgs_2, $msgs_all_1, $msgs_all_2), 'get_cache: strange path 02' );\n        $a1 = [ sort { $a <=> $b } keys %{ $c12 } ] ;\n        $a2 = [ sort { $a <=> $b } keys %{ $c21 } ] ;\n        ok( 0 == compare_lists( [ 142, 143, 177 ], $a1 ), 'get_cache: strange path 03' );\n        ok( 0 == compare_lists( [ 242, 243, 777 ], $a2 ), 'get_cache: strange path 04' );\n        ok( -f 'W/tmp/cache/rr\\uee/142_242', 'get_cache: strange path file kept 142_242');\n        ok( -f 'W/tmp/cache/rr\\uee/142_242', 'get_cache: strange path file kept 143_243');\n        ok( ! -f 'W/tmp/cache/rr\\uee/100_200', 'get_cache: strange path file removed 100_200');\n        ok( ! -f 'W/tmp/cache/rr\\uee/101_201', 'get_cache: strange path file removed 101_201');\n\n\tnote( 'Leaving  tests_get_cache()' ) ;\n        return ;\n}\n\nsub match_a_cache_file\n{\n        my $file = shift ;\n        my ( $cache_uid1, $cache_uid2 ) ;\n\n        return( ( undef, undef ) ) if ( ! $file ) ;\n        if ( $file =~ m{(?:^|/)(\\d+)_(\\d+)$}x ) {\n                $cache_uid1 = $1 ;\n                $cache_uid2 = $2 ;\n        }\n        return( $cache_uid1, $cache_uid2 ) ;\n}\n\nsub tests_match_a_cache_file\n{\n\tnote( 'Entering tests_match_a_cache_file()' ) ;\n\n        my ( $tuid1, $tuid2 ) ;\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file(  ), 'match_a_cache_file: no arg' ) ;\n        ok( ! defined  $tuid1 , 'match_a_cache_file: no arg 1' ) ;\n        ok( ! defined  $tuid2 , 'match_a_cache_file: no arg 2' ) ;\n\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file( q{} ), 'match_a_cache_file: empty arg' ) ;\n        ok( ! defined  $tuid1 , 'match_a_cache_file: empty arg 1' ) ;\n        ok( ! defined  $tuid2 , 'match_a_cache_file: empty arg 2' ) ;\n\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file( '000_000' ), 'match_a_cache_file: 000_000' ) ;\n        ok( '000' eq $tuid1, 'match_a_cache_file: 000_000 1' ) ;\n        ok( '000' eq $tuid2, 'match_a_cache_file: 000_000 2' ) ;\n\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file( '123_456' ), 'match_a_cache_file: 123_456' ) ;\n        ok( '123' eq $tuid1, 'match_a_cache_file: 123_456 1' ) ;\n        ok( '456' eq $tuid2, 'match_a_cache_file: 123_456 2' ) ;\n\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file( '/tmp/truc/123_456' ), 'match_a_cache_file: /tmp/truc/123_456' ) ;\n        ok( '123' eq $tuid1, 'match_a_cache_file: /tmp/truc/123_456 1' ) ;\n        ok( '456' eq $tuid2, 'match_a_cache_file: /tmp/truc/123_456 2' ) ;\n\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file( '/lala123_456' ), 'match_a_cache_file: NO /lala123_456' ) ;\n        ok( ! $tuid1, 'match_a_cache_file: /lala123_456 1' ) ;\n        ok( ! $tuid2, 'match_a_cache_file: /lala123_456 2' ) ;\n\n        ok( ( $tuid1, $tuid2 ) = match_a_cache_file( 'la123_456' ), 'match_a_cache_file: NO la123_456' ) ;\n        ok( ! $tuid1, 'match_a_cache_file: la123_456 1' ) ;\n        ok( ! $tuid2, 'match_a_cache_file: la123_456 2' ) ;\n\n\tnote( 'Leaving  tests_match_a_cache_file()' ) ;\n        return ;\n}\n\nsub clean_cache\n{\n        my ( $cache_files_ref, $cache_1_2_ref, $h1_msgs_all_hash_ref, $h2_msgs_all_hash_ref )  = @_ ;\n\n        $debugcache and myprint( \"Entering clean_cache\\n\" ) ;\n\n        $debugcache and myprint( map { \"$_ -> \" . $cache_1_2_ref->{ $_ } . \"\\n\" } keys %{ $cache_1_2_ref }  ) ;\n        foreach my $file ( @{ $cache_files_ref } ) {\n                $debugcache and myprint( \"$file\\n\"  ) ;\n                my ( $cache_uid1, $cache_uid2 ) = match_a_cache_file( $file ) ;\n                $debugcache and myprint( \"u1: $cache_uid1 u2: $cache_uid2 c12: \", $cache_1_2_ref->{ $cache_uid1 } || q{}, \"\\n\") ;\n#                 or ( ! exists( $cache_1_2_ref->{ $cache_uid1 } ) )\n#                 or ( ! ( $cache_uid2 == $cache_1_2_ref->{ $cache_uid1 } ) )\n                if ( ( not defined  $cache_uid1  )\n                  or ( not defined  $cache_uid2  )\n                  or ( not exists  $h1_msgs_all_hash_ref->{ $cache_uid1 }  )\n                  or ( not exists  $h2_msgs_all_hash_ref->{ $cache_uid2 }  )\n                ) {\n                        $debugcache and myprint( \"remove $file\\n\"  ) ;\n                        unlink $file or myprint( \"$OS_ERROR\"  ) ;\n                }\n        }\n\n        $debugcache and myprint( \"Exiting clean_cache\\n\" ) ;\n        return( 1 ) ;\n}\n\nsub tests_clean_cache\n{\n\tnote( 'Entering tests_clean_cache()' ) ;\n\n        ok( ( not -d  'W/tmp/cache/G1/G2' or rmtree( 'W/tmp/cache/G1/G2' )), 'clean_cache: rmtree W/tmp/cache/G1/G2' ) ;\n        ok( mkpath( 'W/tmp/cache/G1/G2' ), 'clean_cache: mkpath W/tmp/cache/G1/G2' ) ;\n\n        my @test_files_cache = ( qw(\n        W/tmp/cache/G1/G2/100_200\n        W/tmp/cache/G1/G2/101_201\n        W/tmp/cache/G1/G2/120_220\n        W/tmp/cache/G1/G2/142_242\n        W/tmp/cache/G1/G2/143_243\n        W/tmp/cache/G1/G2/177_277\n        W/tmp/cache/G1/G2/177_377\n        W/tmp/cache/G1/G2/177_777\n        W/tmp/cache/G1/G2/155_255\n        ) ) ;\n        ok( touch(@test_files_cache), 'clean_cache: touch W/tmp/cache/G1/G2/...' ) ;\n\n        ok( -f 'W/tmp/cache/G1/G2/100_200', 'clean_cache: 100_200 before' );\n        ok( -f 'W/tmp/cache/G1/G2/142_242', 'clean_cache: 142_242 before' );\n        ok( -f 'W/tmp/cache/G1/G2/177_277', 'clean_cache: 177_277 before' );\n        ok( -f 'W/tmp/cache/G1/G2/177_377', 'clean_cache: 177_377 before' );\n        ok( -f 'W/tmp/cache/G1/G2/177_777', 'clean_cache: 177_777 before' );\n        ok( -f 'W/tmp/cache/G1/G2/155_255', 'clean_cache: 155_255 before' );\n\n        my $cache = {\n                142 => 242,\n                177 => 777,\n        } ;\n\n        my $all_1 = {\n                142 => q{},\n                177 => q{},\n        } ;\n\n        my $all_2 = {\n                200 => q{},\n                242 => q{},\n                777 => q{},\n        } ;\n        ok( clean_cache( \\@test_files_cache, $cache, $all_1, $all_2 ), 'clean_cache: ' ) ;\n\n        ok( ! -f 'W/tmp/cache/G1/G2/100_200', 'clean_cache: 100_200 after' );\n        ok(   -f 'W/tmp/cache/G1/G2/142_242', 'clean_cache: 142_242 after' );\n        ok( ! -f 'W/tmp/cache/G1/G2/177_277', 'clean_cache: 177_277 after' );\n        ok( ! -f 'W/tmp/cache/G1/G2/177_377', 'clean_cache: 177_377 after' );\n        ok(   -f 'W/tmp/cache/G1/G2/177_777', 'clean_cache: 177_777 after' );\n        ok( ! -f 'W/tmp/cache/G1/G2/155_255', 'clean_cache: 155_255 after' );\n\n\tnote( 'Leaving  tests_clean_cache()' ) ;\n        return ;\n}\n\nsub tests_clean_cache_2\n{\n\tnote( 'Entering tests_clean_cache_2()' ) ;\n\n        ok( ( not -d  'W/tmp/cache/G1/G2' or rmtree( 'W/tmp/cache/G1/G2' )), 'clean_cache_2: rmtree W/tmp/cache/G1/G2' ) ;\n        ok( mkpath( 'W/tmp/cache/G1/G2' ), 'clean_cache_2: mkpath W/tmp/cache/G1/G2' ) ;\n\n        my @test_files_cache = ( qw(\n        W/tmp/cache/G1/G2/100_200\n        W/tmp/cache/G1/G2/101_201\n        W/tmp/cache/G1/G2/120_220\n        W/tmp/cache/G1/G2/142_242\n        W/tmp/cache/G1/G2/143_243\n        W/tmp/cache/G1/G2/177_277\n        W/tmp/cache/G1/G2/177_377\n        W/tmp/cache/G1/G2/177_777\n        W/tmp/cache/G1/G2/155_255\n        ) ) ;\n        ok( touch(@test_files_cache), 'clean_cache_2: touch W/tmp/cache/G1/G2/...' ) ;\n\n        ok( -f 'W/tmp/cache/G1/G2/100_200', 'clean_cache_2: 100_200 before' );\n        ok( -f 'W/tmp/cache/G1/G2/142_242', 'clean_cache_2: 142_242 before' );\n        ok( -f 'W/tmp/cache/G1/G2/177_277', 'clean_cache_2: 177_277 before' );\n        ok( -f 'W/tmp/cache/G1/G2/177_377', 'clean_cache_2: 177_377 before' );\n        ok( -f 'W/tmp/cache/G1/G2/177_777', 'clean_cache_2: 177_777 before' );\n        ok( -f 'W/tmp/cache/G1/G2/155_255', 'clean_cache_2: 155_255 before' );\n\n        my $cache = {\n                142 => 242,\n                177 => 777,\n        } ;\n\n        my $all_1 = {\n                $NUMBER_100 => q{},\n                142 => q{},\n                177 => q{},\n        } ;\n\n        my $all_2 = {\n                200 => q{},\n                242 => q{},\n                777 => q{},\n        } ;\n\n\n\n        ok( clean_cache( \\@test_files_cache, $cache, $all_1, $all_2 ), 'clean_cache_2: ' ) ;\n\n        ok(   -f 'W/tmp/cache/G1/G2/100_200', 'clean_cache_2: 100_200 after' );\n        ok(   -f 'W/tmp/cache/G1/G2/142_242', 'clean_cache_2: 142_242 after' );\n        ok( ! -f 'W/tmp/cache/G1/G2/177_277', 'clean_cache_2: 177_277 after' );\n        ok( ! -f 'W/tmp/cache/G1/G2/177_377', 'clean_cache_2: 177_377 after' );\n        ok(   -f 'W/tmp/cache/G1/G2/177_777', 'clean_cache_2: 177_777 after' );\n        ok( ! -f 'W/tmp/cache/G1/G2/155_255', 'clean_cache_2: 155_255 after' );\n\n\tnote( 'Leaving  tests_clean_cache_2()' ) ;\n        return ;\n}\n\n\n\nsub tests_mkpath\n{\n\tnote( 'Entering tests_mkpath()' ) ;\n\n\tok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' )), 'mkpath: mkpath W/tmp/tests/' ) ;\n\n        SKIP: {\n                skip( 'Tests only for Unix', 10   ) if ( 'MSWin32' eq $OSNAME ) ;\n                my $long_path_unix = '123456789/' x 30 ;\n                ok( ( -d \"W/tmp/tests/long/$long_path_unix\" or mkpath( \"W/tmp/tests/long/$long_path_unix\" ) ), 'mkpath: mkpath 300 char' ) ;\n\t\tok( -d \"W/tmp/tests/long/$long_path_unix\", 'mkpath: mkpath > 300 char verified' ) ;\n                ok( ( -d \"W/tmp/tests/long/$long_path_unix\" and rmtree( 'W/tmp/tests/long/' ) ), 'mkpath: rmtree 300 char' ) ;\n\t\tok( ! -d \"W/tmp/tests/long/$long_path_unix\", 'mkpath: rmtree 300 char verified' ) ;\n\n\t\tok( ( -d 'W/tmp/tests/trailing_dots...' or  mkpath( 'W/tmp/tests/trailing_dots...' ) ), 'mkpath: mkpath trailing_dots...' ) ;\n\t\tok( -d 'W/tmp/tests/trailing_dots...', 'mkpath: mkpath trailing_dots... verified' ) ;\n\t\tok( ( -d 'W/tmp/tests/trailing_dots...' and rmtree( 'W/tmp/tests/trailing_dots...' ) ), 'mkpath: rmtree trailing_dots...' ) ;\n\t\tok( ! -d 'W/tmp/tests/trailing_dots...', 'mkpath: rmtree trailing_dots... verified' ) ;\n\n\t\teval { ok( 1 / 0, 'mkpath: divide by 0' ) ; } or ok( 1, 'mkpath: can not divide by 0' ) ;\n\t\tok( 1, 'mkpath: still alive' ) ;\n        } ;\n\n        SKIP: {\n                skip( 'Tests only for MSWin32', 13  ) if ( 'MSWin32' ne $OSNAME ) ;\n                my $long_path_2_prefix =  \".\\\\imapsync_tests\" || '\\\\\\?\\\\E:\\\\TEMP\\\\imapsync_tests'  ;\n                myprint( \"long_path_2_prefix: $long_path_2_prefix\\n\"  ) ;\n\n                my $long_path_100   = $long_path_2_prefix . '\\\\' . '123456789\\\\' x 10 . 'END' ;\n                my $long_path_300 = $long_path_2_prefix . '\\\\' . '123456789\\\\' x 30 . 'END' ;\n\n                #myprint( \"$long_path_100\\n\"  ) ;\n\n                ok( ( -d $long_path_2_prefix or mkpath( $long_path_2_prefix ) ), 'mkpath: -d mkpath small path' ) ;\n                ok( ( -d $long_path_2_prefix ), 'mkpath: -d mkpath small path done' ) ;\n                ok( ( -d $long_path_100        or mkpath( $long_path_100 ) ),        'mkpath: mkpath > 100 char' ) ;\n                ok( ( -d $long_path_100 ), 'mkpath: -d mkpath > 200 char done' ) ;\n                ok( ( -d $long_path_2_prefix and rmtree( $long_path_2_prefix ) ), 'mkpath: rmtree > 100 char' ) ;\n                ok( (! -d $long_path_2_prefix ), 'mkpath: ! -d rmtree done' ) ;\n\n                # Without the eval the following mkpath 300 just kill the whole process without a whisper\n                #myprint( \"$long_path_300\\n\"  ) ;\n                eval { ok( ( -d $long_path_300 or mkpath( $long_path_300 ) ),  'mkpath: create a path with 300 characters' ) ; }\n\t\t\tor ok( 1, 'mkpath: can not create a path with 300 characters' ) ;\n                ok( ( ( ! -d $long_path_300 ) or -d $long_path_300 and rmtree( $long_path_300 ) ), 'mkpath: rmtree the 300 character path' ) ;\n\t\tok( 1, 'mkpath: still alive' ) ;\n\n\t\tok( ( -d 'W/tmp/tests/trailing_dots...' or  mkpath( 'W/tmp/tests/trailing_dots...' ) ), 'mkpath: mkpath trailing_dots...' ) ;\n\t\tok( -d 'W/tmp/tests/trailing_dots...', 'mkpath: mkpath trailing_dots... verified' ) ;\n\t\tok( ( -d 'W/tmp/tests/trailing_dots...' and rmtree( 'W/tmp/tests/trailing_dots...' ) ), 'mkpath: rmtree trailing_dots...' ) ;\n\t\tok( ! -d 'W/tmp/tests/trailing_dots...', 'mkpath: rmtree trailing_dots... verified' ) ;\n\n\n        } ;\n\n\tnote( 'Leaving  tests_mkpath()' ) ;\n\t# Keep this because of the eval used by the caller (failed badly?)\n        return 1 ;\n}\n\nsub tests_touch\n{\n\tnote( 'Entering tests_touch()' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' )), 'touch: mkpath W/tmp/tests/' ) ;\n        ok( 1 == touch( 'W/tmp/tests/lala'), 'touch: W/tmp/tests/lala') ;\n        ok( 1 == touch( 'W/tmp/tests/\\y'), 'touch: W/tmp/tests/\\y') ;\n        ok( 0 == touch( '/no/no/no/aaa'), 'touch: not /aaa') ;\n        ok( 1 == touch( 'W/tmp/tests/lili', 'W/tmp/tests/lolo'), 'touch: 2 files') ;\n        ok( 0 == touch( 'W/tmp/tests/\\y', '/no/no/aaa'), 'touch: 2 files, 1 fails' ) ;\n\n\tnote( 'Leaving  tests_touch()' ) ;\n        return ;\n}\n\n\nsub touch\n{\n        my @files = @_ ;\n        my $failures = 0 ;\n\n        foreach my $file ( @files ) {\n                my  $fh = IO::File->new ;\n                if ( $fh->open(\">> $file\" ) ) {\n                        $fh->close ;\n                }else{\n                        myprint( \"Could not open file $file in write/append mode\\n\"  ) ;\n                        $failures++ ;\n                }\n        }\n        return( ! $failures );\n}\n\n\n\nsub tests_tmpdir_has_colon_bug\n{\n\tnote( 'Entering tests_tmpdir_has_colon_bug()' ) ;\n\n        ok( 0 == tmpdir_has_colon_bug( q{} ),        'tmpdir_has_colon_bug: ' ) ;\n        ok( 0 == tmpdir_has_colon_bug( '/tmp' ),    'tmpdir_has_colon_bug: /tmp' ) ;\n        ok( 1 == tmpdir_has_colon_bug( 'C:' ),      'tmpdir_has_colon_bug: C:' ) ;\n        ok( 1 == tmpdir_has_colon_bug( 'C:\\temp' ), 'tmpdir_has_colon_bug: C:\\temp' ) ;\n\n\tnote( 'Leaving  tests_tmpdir_has_colon_bug()' ) ;\n        return ;\n}\n\nsub tmpdir_has_colon_bug\n{\n        my $path = shift ;\n\n        my $path_filtered = filter_forbidden_characters( $path ) ;\n        if ( $path_filtered ne $path ) {\n                ( -d $path_filtered ) and myprint( \"Path $path was previously mistakely changed to $path_filtered\\n\"  ) ;\n                return( 1 ) ;\n        }\n        return( 0 ) ;\n}\n\nsub tmpdir_fix_colon_bug\n{\n        my $mysync = shift ;\n        my $err = 0 ;\n        if ( not (-d $mysync->{ tmpdir } and -r _ and -w _) ) {\n                myprint( \"tmpdir $mysync->{ tmpdir } is not valid\\n\"  ) ;\n                return( 0 ) ;\n        }\n        my $cachedir_new = \"$mysync->{ tmpdir }/imapsync_cache\" ;\n\n        if ( not tmpdir_has_colon_bug( $cachedir_new ) ) { return( 0 ) } ;\n\n        # check if old cache directory already exists\n        my $cachedir_old = filter_forbidden_characters( $cachedir_new ) ;\n        if ( not ( -d $cachedir_old ) ) {\n                myprint( \"Old cache directory $cachedir_new no exists, nothing to do\\n\"  ) ;\n                return( 1 ) ;\n        }\n        # check if new cache directory already exists\n        if ( -d $cachedir_new ) {\n                myprint( \"New fixed cache directory $cachedir_new already exists, not moving the old one $cachedir_old. Fix this manually.\\n\"  ) ;\n                return( 0 ) ;\n        }else{\n                # move the old one to the new place\n                myprint( \"Moving $cachedir_old to $cachedir_new Do not interrupt this task.\\n\"  ) ;\n                File::Copy::Recursive::rmove( $cachedir_old, $cachedir_new )\n                or do {\n                        myprint( \"Could not move $cachedir_old to $cachedir_new\\n\"  ) ;\n                        $err++ ;\n                } ;\n                # check it succeeded\n                if ( -d $cachedir_new and -r _ and -w _ ) {\n                        myprint( \"New fixed cache directory $cachedir_new ok\\n\"  ) ;\n                }else{\n                        myprint( \"New fixed cache directory $cachedir_new does not exist\\n\"  ) ;\n                        $err++ ;\n                }\n                if ( -d $cachedir_old ) {\n                        myprint( \"Old cache directory $cachedir_old still exists\\n\"  ) ;\n                        $err++ ;\n                }else{\n                        myprint( \"Old cache directory $cachedir_old successfully moved\\n\"  ) ;\n                }\n        }\n        return( not $err ) ;\n}\n\n\nsub tests_cache_folder\n{\n\tnote( 'Entering tests_cache_folder()' ) ;\n\n        ok( '/path/fold1/fold2' eq cache_folder( q{}, '/path', 'fold1', 'fold2'), 'cache_folder: /path, fold1, fold2 -> /path/fold1/fold2' ) ;\n        ok( '/pa_th/fold1/fold2' eq cache_folder( q{}, '/pa*th', 'fold1', 'fold2'), 'cache_folder: /pa*th, fold1, fold2 -> /path/fold1/fold2' ) ;\n        ok( '/_p_a__th/fol_d1/fold2' eq cache_folder( q{}, '/>p<a|*th', 'fol*d1', 'fold2'), 'cache_folder: />p<a|*th, fol*d1, fold2 -> /path/fol_d1/fold2' ) ;\n\n        ok( 'D:/path/fold1/fold2' eq cache_folder( 'D:', '/path', 'fold1', 'fold2'), 'cache_folder: /path, fold1, fold2 -> /path/fold1/fold2' ) ;\n        ok( 'D:/pa_th/fold1/fold2' eq cache_folder( 'D:', '/pa*th', 'fold1', 'fold2'), 'cache_folder: /pa*th, fold1, fold2 -> /path/fold1/fold2' ) ;\n        ok( 'D:/_p_a__th/fol_d1/fold2' eq cache_folder( 'D:', '/>p<a|*th', 'fol*d1', 'fold2'), 'cache_folder: />p<a|*th, fol*d1, fold2 -> /path/fol_d1/fold2' ) ;\n        ok( '//' eq cache_folder( q{}, q{}, q{}, q{}), 'cache_folder:  -> //' ) ;\n        ok( '//_______' eq cache_folder( q{}, q{}, q{}, '*|?:\"<>'), 'cache_folder: *|?:\"<> -> //_______' ) ;\n\n\tnote( 'Leaving  tests_cache_folder()' ) ;\n        return ;\n}\n\nsub cache_folder\n{\n        my( $cache_base, $cache_dir, $h1_fold, $h2_fold ) = @_ ;\n\n        my $sep_1 = $sync->{ h1_sep } || '/';\n        my $sep_2 = $sync->{ h2_sep } || '/';\n\n        #myprint( \"$cache_dir h1_fold $h1_fold sep1 $sep_1 h2_fold $h2_fold sep2 $sep_2\\n\" ) ;\n        $h1_fold = convert_sep_to_slash( $h1_fold, $sep_1 ) ;\n        $h2_fold = convert_sep_to_slash( $h2_fold, $sep_2 ) ;\n\n        my $cache_folder = \"$cache_base\" . filter_forbidden_characters( \"$cache_dir/$h1_fold/$h2_fold\" ) ;\n        #myprint( \"cache_folder [$cache_folder]\\n\"  ) ;\n        return( $cache_folder ) ;\n}\n\nsub tests_filter_forbidden_characters\n{\n        note( 'Entering tests_filter_forbidden_characters()' ) ;\n\n        is( undef , filter_forbidden_characters(  ), 'filter_forbidden_characters: no args -> undef' ) ;\n\n        is( 'a_b' , filter_forbidden_characters( 'a_b' ), 'filter_forbidden_characters: a_b -> a_b' ) ;\n        is( 'a_b' , filter_forbidden_characters( 'a*b' ), 'filter_forbidden_characters: a*b -> a_b' ) ;\n        is( 'a_b' , filter_forbidden_characters( 'a|b' ), 'filter_forbidden_characters: a|b -> a_b' ) ;\n        is( 'a_b' , filter_forbidden_characters( 'a?b' ), 'filter_forbidden_characters: a?b -> a_b' ) ;\n        is( 'a________b', filter_forbidden_characters( q{a*|?:\"<>'b} ), q{filter_forbidden_characters: a*|?:\"<>'b -> a________b} ) ;\n\n\n        is( 'a_b_' , filter_forbidden_characters( 'a b ' ), 'filter_forbidden_characters: \"a b \" -> \"a_b_\"' ) ;\n\n\n        is( 'a_b' , filter_forbidden_characters( \"a\\tb\" ), 'filter_forbidden_characters: a\\tb -> a_b' ) ;\n        is( \"a_b\" , filter_forbidden_characters( \"a\\rb\" ), 'filter_forbidden_characters: a\\rb -> a_b' ) ;\n        is( \"a_b\" , filter_forbidden_characters( \"a\\nb\" ), 'filter_forbidden_characters: a\\nb -> a_b' ) ;\n        is( \"a_b\" , filter_forbidden_characters( \"a\\\\b\" ), 'filter_forbidden_characters: a\\b -> a_b' ) ;\n\n        is( 'a-b' , filter_forbidden_characters( 'a-b' ), 'filter_forbidden_characters: a-b -> a-b' ) ;\n        is( 'a__-__-__-__-__b' , filter_forbidden_characters( 'aÃ©-Ã¨-Ã -Ã§-Ã–b' ), 'filter_forbidden_characters: aÃ©-Ã¨-Ã -Ã§-Ã–b -> a__-__-__-__-__b' ) ;\n\n        is( 'abcdABCDwxyzWXYZ012789' , filter_forbidden_characters( 'abcdABCDwxyzWXYZ012789' ),\n                'filter_forbidden_characters: abcdABCDwxyzWXYZ012789 -> abcdABCDwxyzWXYZ012789' ) ;\n\n\n        note( 'Leaving  tests_filter_forbidden_characters()' ) ;\n        return ;\n}\n\nsub filter_forbidden_characters\n{\n        my $string = shift ;\n\n        if ( ! defined $string ) { return ; }\n\n        $string =~ s{[\\Q*|?:\"<>' \\E\\t\\r\\n\\\\]}{_}xg ;\n        # replace all non-ascii and control characters by _\n        $string =~ s/[[:^ascii:][:cntrl:]]/_/xg ;\n\n        #myprint( \"[$string]\\n\"  ) ;\n        return( $string ) ;\n}\n\nsub tests_convert_sep_to_slash\n{\n\tnote( 'Entering tests_convert_sep_to_slash()' ) ;\n\n\n        ok(q{} eq convert_sep_to_slash(q{}, '/'), 'convert_sep_to_slash: no folder');\n        ok('INBOX' eq convert_sep_to_slash('INBOX', '/'), 'convert_sep_to_slash: INBOX');\n        ok('INBOX/foo' eq convert_sep_to_slash('INBOX/foo', '/'), 'convert_sep_to_slash: INBOX/foo');\n        ok('INBOX/foo' eq convert_sep_to_slash('INBOX_foo', '_'), 'convert_sep_to_slash: INBOX_foo');\n        ok('INBOX/foo/zob' eq convert_sep_to_slash('INBOX_foo_zob', '_'), 'convert_sep_to_slash: INBOX_foo_zob');\n        ok('INBOX/foo' eq convert_sep_to_slash('INBOX.foo', '.'), 'convert_sep_to_slash: INBOX.foo');\n        ok('INBOX/foo/hi' eq convert_sep_to_slash('INBOX.foo.hi', '.'), 'convert_sep_to_slash: INBOX.foo.hi');\n\n\tnote( 'Leaving  tests_convert_sep_to_slash()' ) ;\n        return ;\n}\n\nsub convert_sep_to_slash\n{\n        my ( $folder, $sep ) = @_ ;\n\n        $folder =~ s{\\Q$sep\\E}{/}xg ;\n        return( $folder ) ;\n}\n\n\nsub tests_regexmess\n{\n        note( 'Entering tests_regexmess()' ) ;\n\n        ok( 'blabla' eq regexmess( 'blabla' ), 'regexmess: no regexmess, nothing to do' ) ;\n\n        @regexmess = ( 'lalala' ) ;\n        ok( not( defined regexmess( 'popopo' ) ), 'regexmess: bad regex lalala' ) ;\n\n        @regexmess = ( 's/p/Z/g' ) ;\n        ok( 'ZoZoZo' eq regexmess( 'popopo' ), 'regexmess: s/p/Z/g' ) ;\n\n        @regexmess = ( 's{c}{C}gxms' ) ;\n        ok(\"H1: abC\\nH2: Cde\\n\\nBody abC\"\n                   eq regexmess( \"H1: abc\\nH2: cde\\n\\nBody abc\"),\n           'regexmess: c->C');\n\n        @regexmess = ( 's{\\AFrom\\ }{From:}gxms' ) ;\n        ok(          q{}\n        eq regexmess(q{}),\n        'regexmess: From mbox 1 add colon blank');\n\n        ok(          'From:<tartanpion@machin.truc>'\n        eq regexmess('From <tartanpion@machin.truc>'),\n        'regexmess: From mbox 2 add colo');\n\n        ok(          \"\\n\" . 'From <tartanpion@machin.truc>'\n        eq regexmess(\"\\n\" . 'From <tartanpion@machin.truc>'),\n        'regexmess: From mbox 3 add colo') ;\n\n        ok(          \"From: zzz\\n\" . 'From <tartanpion@machin.truc>'\n        eq regexmess(\"From  zzz\\n\" . 'From <tartanpion@machin.truc>'),\n        'regexmess: From mbox 4 add colo') ;\n\n        @regexmess = ( 's{\\AFrom\\ [^\\n]*(\\n)?}{}gxms' ) ;\n        ok(          q{}\n        eq regexmess(q{}),\n        'regexmess: From mbox 1 remove, blank');\n\n        ok(          q{}\n        eq regexmess('From <tartanpion@machin.truc>'),\n        'regexmess: From mbox 2 remove');\n\n        ok(          \"\\n\" . 'From <tartanpion@machin.truc>'\n        eq regexmess(\"\\n\" . 'From <tartanpion@machin.truc>'),\n        'regexmess: From mbox 3 remove');\n\n        #myprint( \"[\", regexmess(\"From zzz\\n\" . 'From <tartanpion@machin.truc>'), \"]\" ) ;\n        ok(          q{}            . 'From <tartanpion@machin.truc>'\n        eq regexmess(\"From  zzz\\n\" . 'From <tartanpion@machin.truc>'),\n        'regexmess: From mbox 4 remove');\n\n\n        is(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        , regexmess(\n<<'EOM'\nFrom  zzz\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        ), 'regexmess: From mbox 5 remove');\n\n\n@regexmess = ( 's{\\A((?:[^\\n]+\\n)+|)^Disposition-Notification-To:[^\\n]*\\n(\\r?\\n|.*\\n\\r?\\n)}{$1$2}xms' ) ; # SUPER SUPER BEST!\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        ),\n        'regexmess: 1 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nHello,\nBye.\nEOM\n        ),\n        'regexmess: 2 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        ),\n        'regexmess: 3 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        ),\n        'regexmess: 4 Delete header Disposition-Notification-To:');\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        ),\n        'regexmess: 5 Delete header Disposition-Notification-To:');\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        ),\n        'regexmess: 6 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        ),\n        'regexmess: 7 Delete header Disposition-Notification-To:');\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n),\n        'regexmess: 8 Delete header Disposition-Notification-To:');\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nBye.\nEOM\n        ),\n        'regexmess: 9 Delete header Disposition-Notification-To:');\n\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\n\nBye.\nEOM\n        ),\n        'regexmess: 10 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n),\n        'regexmess: 11 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        ),\n        'regexmess: 12 Delete header Disposition-Notification-To:');\n\n\n        @regexmess = ( 's{\\A(.*?(?! ^$))^Disposition-Notification-To:(.*?)$}{$1X-Disposition-Notification-To:$2}igxms' ) ; # BAD!\n        @regexmess = ( 's{\\A((?:[^\\n]+\\n)+|)(^Disposition-Notification-To:[^\\n]*\\n)(\\r?\\n|.*\\n\\r?\\n)}{$1X-$2$3}ims' ) ;\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        ),\n        'regexmess: 13 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nX-Disposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nBye.\nEOM\n        ),\n        'regexmess: 14 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nX-Disposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nBye.\nEOM\n        ),\n        'regexmess: 15 Delete header Disposition-Notification-To:');\n\n\n        ok(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nX-Disposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nHello,\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\n\nHello,\n\nBye.\nEOM\n        ),\n        'regexmess: 16 Delete header Disposition-Notification-To:');\n\n        ok(\n<<'EOM'\nX-Disposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nBye.\nEOM\n        eq regexmess(\n<<'EOM'\nDisposition-Notification-To: Gilles LAMIRAL <gilles@lamiral.info>\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nBye.\nEOM\n),\n        'regexmess: 17 Delete header Disposition-Notification-To:');\n\n        @regexmess = ( 's/.{11}\\K.*//gs' ) ;\n        is( \"0123456789\\n\", regexmess( \"0123456789\\n\" x 100 ), 'regexmess: truncate whole message after 11 characters' ) ;\n        is( \"0123456789\\n\", regexmess( \"0123456789\\n\" x 100_000 ), 'regexmess: truncate whole message after 11 characters ~ 1MB' ) ;\n\n        @regexmess = ( 's/.{10000}\\K.*//gs' ) ;\n        is( \"123456789\\n\" x 1000, regexmess( \"123456789\\n\" x 100_000 ), 'regexmess: truncate whole message after 10000 characters ~ 1MB' ) ;\n\n        @regexmess = ( 's/^(X-Ham-Report.*?\\n)^X-/X-/sm' ) ;\n\n        is(\n<<'EOM'\nX-Spam-Score: -1\nX-Spam-Bar: /\nX-Spam-Flag: NO\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nBye.\nEOM\n,\n        regexmess(\n<<'EOM'\nX-Spam-Score: -1\nX-Spam-Bar: /\nX-Ham-Report: =?utf-8?Q?Spam_detection_software=2C_running?=\n        =?utf-8?Q?_on_the_system_=22ohp-ag006.int200?=\n_has_NOT_identified_thi?=\n        =?utf-8?Q?s_incoming_email_as_spam.__The_o?=\n_message_has_been_attac?=\n        =?utf-8?Q?hed_to_this_so_you_can_view_it_o?=\n___________________________?=\n        =?utf-8?Q?__author's_domain\nX-Spam-Flag: NO\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\n\nBye.\nEOM\n        ),\n        'regexmess: Delete header X-Ham-Report:');\n\n\n# regex to play with Date: from the FAQ\n#@regexmess = 's{\\A(.*?(?! ^$))^Date:(.*?)$}{$1Date:$2\\nX-Date:$2}gxms'\n\n\n# Change 8bit characters in whole email to X characters\n        @regexmess = ( 's{[\\x80-\\xff]}{X}gxms' ) ;\n        is( 'X-8bit: kaka 1 XX kiki', regexmess('X-8bit: kaka 1 Â¤ kiki'), 'regexmess: 1 Change 8bit characters in whole email to X characters');\n\n# Same change but using tr\n        @regexmess = ( 'tr [\\x80-\\xff] [X]' ) ;\n        is( 'X-8bit: kaka 1 XXXX kiki', regexmess('X-8bit: kaka 1 Â¤Â£ kiki'), 'regexmess: 2 Change 8bit characters in whole email to X characters, using tr');\n\n\n\n# Add a final \\r\\n if missing\n        @regexmess = ( 's{(?<![\\n])\\z}{\\r\\n}gxms' ) ;\n        is( \"\\r\\n\", regexmess(\"\"),       'regexmess: 1. Add a final \\r\\n if missing. Missing' ) ;\n        is( \"abc\\r\\n\", regexmess(\"abc\"), 'regexmess: 2. Add a final \\r\\n if missing. Missing' ) ;\n        is( \"abc\\ndef\\r\\n\", regexmess(\"abc\\ndef\"), 'regexmess: 3. Add a final \\r\\n if missing. Missing' ) ;\n        is( \"abc\\r\\ndef\\r\\n\", regexmess(\"abc\\r\\ndef\"), 'regexmess: 3. Add a final \\r\\n if missing. Missing' ) ;\n\n        is( \"\\r\\n\", regexmess(\"\\r\\n\"),   'regexmess: 3. Add a final \\r\\n if missing. Not missing' ) ;\n        is( \"abc\\n\", regexmess(\"abc\\n\"), 'regexmess: 4. Add a final \\r\\n if missing. Not missing' ) ;\n        is( \"abc\\r\\n\", regexmess(\"abc\\r\\n\"), 'regexmess: 4. Add a final \\r\\n if missing. Not missing' ) ;\n        is( \"abc\\ndef\\n\", regexmess(\"abc\\ndef\\n\"), 'regexmess: 4. Add a final \\r\\n if missing. Not missing' ) ;\n        is( \"abc\\r\\ndef\\r\\n\", regexmess(\"abc\\r\\ndef\\r\\n\"), 'regexmess: 4. Add a final \\r\\n if missing. Not missing' ) ;\n\n# Remove the fucking buggy X-Spam-Report: a bad header on several lines that can even begin without a space!\n\n        @regexmess = ( 's{X-Spam-Report:.*?\\n(^[^\\n]+:|^\\r?\\n)}{$1}xms' ) ;\n        # Damien regexes:\n        #@regexmess = ( 's{X-Spam-Report:.*?\\n(^[a-zA-Z0-9\\-]+:)}{$1}xms' ) ;\n        #@regexmess = ( 's{X-Spam-Report:.*?\\n(^[a-zA-Z0-9\\-]+:|^\\r?\\n)}{$1}xms' ) ;\n\n        is(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nLaSuite: super\n\nHello,\nBye.\nEOM\n        , regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nX-Spam-Report: caca\ncaca\n  caca\ncaca\nLaSuite: super\n\nHello,\nBye.\nEOM\n        ), 'regexmess: 1 remove buggy X-Spam-Report: across several lines, not the final header');\n\n\n        is(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nLaSuite: super\nLaSuite2: super 2\n\nHello,\nBye.\nEOM\n        , regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nX-Spam-Report: caca\ncaca\n  caca\ncaca\nLaSuite: super\nLaSuite2: super 2\n\nHello,\nBye.\nEOM\n        ), 'regexmess: 2 remove buggy X-Spam-Report: across several lines, not the final header');\n\n\n        is(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nLaSuite: super\nLaSuite2: super 2\n\nHello,\nBye.\nEOM\n        , regexmess(\n<<'EOM'\nX-Spam-Report: caca\ncaca\n  caca\ncaca\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nLaSuite: super\nLaSuite2: super 2\n\nHello,\nBye.\nEOM\n        ), 'regexmess: 3 remove buggy X-Spam-Report: across several lines, first header');\n\n\n\n\n        is(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        , regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nX-Spam-Report: caca\ncaca\n  caca\ncaca\n\nHello,\nBye.\nEOM\n        ), 'regexmess: 4 remove buggy X-Spam-Report: across several lines, final header');\n\n\n        is(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        , regexmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello,\nBye.\nEOM\n        ), 'regexmess: 5 remove buggy X-Spam-Report: not there at all');\n\n\n        is(\n<<\"EOM\"\nDate: Sat, 10 Jul 2010 05:34:45 -0700\\r\nFrom:<tartanpion>\\r\nLaSuite: super\\r\nLaSuite2: super 2\\r\n\\r\nHello,\\r\nBye.\\r\nEOM\n        , regexmess(\n<<\"EOM\"\nX-Spam-Report: caca\\r\ncaca\\r\n  caca\\r\ncaca\\r\nDate: Sat, 10 Jul 2010 05:34:45 -0700\\r\nFrom:<tartanpion>\\r\nLaSuite: super\\r\nLaSuite2: super 2\\r\n\\r\nHello,\\r\nBye.\\r\nEOM\n        ), 'regexmess: 6 remove buggy X-Spam-Report: across several lines, first header, with \\r');\n\n\n        is(\n<<\"EOM\"\nDate: Sat, 10 Jul 2010 05:34:45 -0700\\r\nFrom:<tartanpion>\\r\nLaSuite: super\\r\nLaSuite2: super 2\\r\n\\r\nHello,\\r\nBye.\\r\nEOM\n        , regexmess(\n<<\"EOM\"\nDate: Sat, 10 Jul 2010 05:34:45 -0700\\r\nFrom:<tartanpion>\\r\nX-Spam-Report: caca\\r\ncaca\\r\n  caca\\r\ncaca\\r\nLaSuite: super\\r\nLaSuite2: super 2\\r\n\\r\nHello,\\r\nBye.\\r\nEOM\n        ), 'regexmess: 7 remove buggy X-Spam-Report: across several lines, middle header, with \\r');\n\n\n        is(\n<<\"EOM\"\nDate: Sat, 10 Jul 2010 05:34:45 -0700\\r\nFrom:<tartanpion>\\r\n\\r\nHello,\\r\nBye.\\r\nEOM\n        , regexmess(\n<<\"EOM\"\nDate: Sat, 10 Jul 2010 05:34:45 -0700\\r\nFrom:<tartanpion>\\r\nX-Spam-Report: caca\\r\ncaca\\r\n  caca\\r\ncaca\\r\n\\r\nHello,\\r\nBye.\\r\nEOM\n        ), 'regexmess: 8 remove buggy X-Spam-Report: across several lines, final header, with \\r');\n\n\n        undef @regexmess ;\n        note( 'Leaving  tests_regexmess()' ) ;\n        return ;\n}\n\nsub regexmess\n{\n        my ( $string ) = @_ ;\n        foreach my $regexmess ( @regexmess ) {\n                $sync->{ debug } and myprint( \"eval \\$string =~ $regexmess\\n\" ) ;\n                my $ret = eval \"\\$string =~ $regexmess ; 1\" ;\n                #myprint( \"eval [$ret]\\n\" ) ;\n                if ( ( not $ret ) or $EVAL_ERROR ) {\n                        myprint( \"Error: eval regexmess '$regexmess': $EVAL_ERROR\" ) ;\n                        return( undef ) ;\n                }\n        }\n        $sync->{ debug } and myprint( \"$string\\n\" ) ;\n        return( $string ) ;\n}\n\n\nsub tests_skipmess\n{\n\tnote( 'Entering tests_skipmess()' ) ;\n\n        ok( not( defined skipmess( 'blabla' ) ), 'skipmess, no skipmess, no skip' ) ;\n\n        @skipmess = ('[') ;\n        ok( not( defined skipmess( 'popopo' ) ), 'skipmess, bad regex [' ) ;\n\n        @skipmess = ('lalala') ;\n        ok( not( defined skipmess( 'popopo' ) ), 'skipmess, bad regex lalala' ) ;\n\n        @skipmess = ('/popopo/') ;\n        ok( 1 == skipmess( 'popopo' ), 'skipmess, popopo match regex /popopo/' ) ;\n\n        @skipmess = ('/popopo/') ;\n        ok( 0 == skipmess( 'rrrrrr' ), 'skipmess, rrrrrr does not match regex /popopo/' ) ;\n\n        @skipmess = ('m{^$}') ;\n        ok( 1 == skipmess( q{} ),    'skipmess: empty string yes' ) ;\n        ok( 0 == skipmess( 'Hi!' ), 'skipmess: empty string no' ) ;\n\n        @skipmess = ('m{i}') ;\n        ok( 1 == skipmess( 'Hi!' ),  'skipmess: i string yes' ) ;\n        ok( 0 == skipmess( 'Bye!' ), 'skipmess: i string no' ) ;\n\n        @skipmess = ('m{[\\x80-\\xff]}') ;\n        ok( 0 == skipmess( 'Hi!' ),  'skipmess: i 8bit no' ) ;\n        ok( 1 == skipmess( \"\\xff\" ), 'skipmess: \\xff 8bit yes' ) ;\n\n        @skipmess = ('m{A}', 'm{B}') ;\n        ok( 0 == skipmess( 'Hi!' ),  'skipmess: A or B no' ) ;\n        ok( 0 == skipmess( 'lala' ), 'skipmess: A or B no' ) ;\n        ok( 0 == skipmess( \"\\xff\" ), 'skipmess: A or B no' ) ;\n        ok( 1 == skipmess( 'AB' ),   'skipmess: A or B yes' ) ;\n        ok( 1 == skipmess( 'BA' ),   'skipmess: A or B yes' ) ;\n        ok( 1 == skipmess( 'AA' ),   'skipmess: A or B yes' ) ;\n        ok( 1 == skipmess( 'Ok Bye' ), 'skipmess: A or B yes' ) ;\n\n\n        @skipmess = ( 'm#\\A((?:[^\\n]+\\n)+|)^Content-Type: Message/Partial;[^\\n]*\\n(?:\\n|.*\\n\\n)#ism' ) ; # SUPER BEST!\n\n\n\n        ok( 1 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nContent-Type: Message/Partial; blabla\nFrom:<tartanpion@machin.truc>\n\nHello!\nBye.\nEOM\n),\n    'skipmess: 1 match Content-Type: Message/Partial' ) ;\n\n        ok( 0 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello!\nBye.\nEOM\n),\n    'skipmess: 2 not match Content-Type: Message/Partial' ) ;\n\n\n        ok( 1 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\nContent-Type: Message/Partial; blabla\n\nHello!\nBye.\nEOM\n),\n    'skipmess: 3 match Content-Type: Message/Partial' ) ;\n\n        ok( 0 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello!\nContent-Type: Message/Partial; blabla\nBye.\nEOM\n),\n    'skipmess: 4 not match Content-Type: Message/Partial' ) ;\n\n\n        ok( 0 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom:<tartanpion@machin.truc>\n\nHello!\nContent-Type: Message/Partial; blabla\n\nBye.\nEOM\n),\n    'skipmess: 5 not match Content-Type: Message/Partial' ) ;\n\n\n        ok( 1 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nContent-Type: Message/Partial; blabla\nFrom:<tartanpion@machin.truc>\n\nHello!\n\nContent-Type: Message/Partial; blabla\n\nBye.\nEOM\n),\n    'skipmess: 6 match Content-Type: Message/Partial' ) ;\n\n        ok( 1 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nContent-Type: Message/Partial;\nFrom:<tartanpion@machin.truc>\n\nHello!\nBye.\nEOM\n),\n    'skipmess: 7 match Content-Type: Message/Partial' ) ;\n\n        ok( 1 == skipmess(\n<<'EOM'\nDate: Wed, 2 Jul 2014 02:26:40 +0000\nMIME-Version: 1.0\nContent-Type: message/partial;\n        id=\"TAN_U_P<1404267997.00007489ed17>\";\n        number=3;\n        total=3\n\n6HQ6Hh3CdXj77qEGixerQ6zHx0OnQ/Cf5On4W0Y6vtU2crABZQtD46Hx1EOh8dDz4+OnTr1G\n\n\nHello!\nBye.\nEOM\n),\n    'skipmess: 8 match Content-Type: Message/Partial' ) ;\n\n\nok( 1 == skipmess(\n<<'EOM'\nReturn-Path: <gilles@lamiral.info>\nReceived: by lamiral.info (Postfix, from userid 1000)\n        id 21EB12443BF; Mon,  2 Mar 2015 15:38:35 +0100 (CET)\nSubject: test: aethaecohngiexao\nTo: <tata@petite.lamiral.info>\nX-Mailer: mail (GNU Mailutils 2.2)\nMessage-Id: <20150302143835.21EB12443BF@lamiral.info>\nContent-Type: message/partial;\n        id=\"TAN_U_P<1404267997.00007489ed17>\";\n        number=3;\n        total=3\nDate: Mon,  2 Mar 2015 15:38:34 +0100 (CET)\nFrom: gilles@lamiral.info (Gilles LAMIRAL)\n\ntest: aethaecohngiexao\nEOM\n),\n    'skipmess: 9 match Content-Type: Message/Partial' ) ;\n\nok( 1 == skipmess(\n<<'EOM'\nDate: Mon,  2 Mar 2015 15:38:34 +0100 (CET)\nFrom: gilles@lamiral.info (Gilles LAMIRAL)\nContent-Type: message/partial;\n        id=\"TAN_U_P<1404267997.00007489ed17>\";\n        number=3;\n        total=3\n\ntest: aethaecohngiexao\nEOM\n. \"lalala\\n\" x 3_000_000\n),\n    'skipmess: 10 match Content-Type: Message/Partial' ) ;\n\nok( 0 == skipmess(\n<<'EOM'\nDate: Mon,  2 Mar 2015 15:38:34 +0100 (CET)\nFrom: gilles@lamiral.info (Gilles LAMIRAL)\n\ntest: aethaecohngiexao\nEOM\n. \"lalala\\n\" x 3_000_000\n),\n    'skipmess: 11 match Content-Type: Message/Partial' ) ;\n\n\nok( 0 == skipmess(\n<<\"EOM\"\nFrom: fff\\r\nTo: fff\\r\nSubject: Testing imapsync --skipmess\\r\nDate: Mon, 22 Aug 2011 08:40:20 +0800\\r\nMime-Version: 1.0\\r\nContent-Type: text/plain; charset=iso-8859-1\\r\nContent-Transfer-Encoding: 7bit\\r\n\\r\nEOM\n. qq{!#\"d%&'()*+,-./0123456789:;<=>?\\@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefg\\r\\n } x 32_730\n),\n    'skipmess: 12 not match Content-Type: Message/Partial' ) ;\n        # Complex regular subexpression recursion limit (32766) exceeded with more lines\n        # exit;\n\n\n        undef @skipmess ;\n        note( 'Leaving  tests_skipmess()' ) ;\n        return ;\n}\n\n\nsub tests_skipmess_neg\n{\n        note( 'Entering tests_skipmess_neg()' ) ;\n\n\n        @skipmess = ('m{i}') ;\n        ok( 1 == skipmess( 'Hi!' ), 'skipmess: i string yes' ) ;\n        ok( 0 == skipmess( 'Ho!' ), 'skipmess: i string no' ) ;\n\n        @skipmess = ('m{\\A(?!.*i)}') ;\n        ok( 0 == skipmess( 'Hi!' ), 'skipmess: not i string no' ) ;\n        ok( 1 == skipmess( 'Ho!' ), 'skipmess: not i string yes' ) ;\n\n\n        @skipmess = ('m{\\A(?!.*^From:[^\\n]*tartanpion\\@machin\\.truc)}xms') ;\n\n        ok( 0 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom: <tartanpion@machin.truc>\n\nBye.\nEOM\n),\n    'skipmess: 1 not From tartanpion@machin.truc' ) ;\n\nok( 1 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom: <kikiki@machin.truc>\n\nBye.\nEOM\n),\n    'skipmess: 2 not From tartanpion@machin.truc' ) ;\n\n\n\n\n        ok( 0 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom: <tartanpion@machin.truc>\n\n  From: <tartanpion@machin.truc>\nBye.\nEOM\n),\n    'skipmess: 3 not From tartanpion@machin.truc' ) ;\n\nok( 1 == skipmess(\n<<'EOM'\nDate: Sat, 10 Jul 2010 05:34:45 -0700\nFrom: <kikiki@machin.truc>\n\n  From: <tartanpion@machin.truc>\nBye.\nEOM\n),\n    'skipmess: 4 not From tartanpion@machin.truc' ) ;\n\n\n\n\n        undef @skipmess ;\n        note( 'Leaving  tests_skipmess_neg()' ) ;\n        return ;\n}\n\n\nsub skipmess\n{\n        my ( $string ) = @_ ;\n        my $match ;\n        #myprint( \"$string\\n\" ) ;\n        foreach my $skipmess ( @skipmess ) {\n                $sync->{ debug } and myprint( \"eval \\$match = \\$string =~ $skipmess\\n\" ) ;\n                my $ret = eval \"\\$match = \\$string =~ $skipmess ; 1\" ;\n                #myprint( \"eval [$ret]\\n\" ) ;\n                $sync->{ debug } and myprint( \"match [$match]\\n\" ) ;\n                if ( ( not $ret ) or $EVAL_ERROR ) {\n                        myprint( \"Error: eval skipmess '$skipmess': $EVAL_ERROR\" ) ;\n                        return( undef ) ;\n                }\n                return( $match ) if ( $match ) ;\n        }\n        return( $match ) ;\n}\n\n\n\n\nsub tests_bytes_display_string_bin\n{\n\tnote( 'Entering tests_bytes_display_string_bin()' ) ;\n\n        is(    'NA', bytes_display_string_bin(       ), 'bytes_display_string_bin: no args => NA' ) ;\n        is(    'NA', bytes_display_string_bin( undef ), 'bytes_display_string_bin: undef   => NA' ) ;\n        is(    'NA', bytes_display_string_bin( 'blabla' ), 'bytes_display_string_bin: blabla   => NA' ) ;\n\n        is(    '0.000 KiB', bytes_display_string_bin(       0 ), 'bytes_display_string_bin:       0 => 0.000 KiB' ) ;\n        is(    '0.001 KiB', bytes_display_string_bin(       1 ), 'bytes_display_string_bin:       1 => 0.001 KiB' ) ;\n        is(    '0.010 KiB', bytes_display_string_bin(      10 ), 'bytes_display_string_bin:      10 => 0.010 KiB' ) ;\n        is(    '0.976 KiB', bytes_display_string_bin(     999 ), 'bytes_display_string_bin:     999 => 0.976 KiB' ) ;\n        note(  bytes_display_string_bin( 999 ) ) ;\n\n        is(    '0.999 KiB', bytes_display_string_bin(    1023 ), 'bytes_display_string_bin:     1023 => 0.999 KiB' ) ;\n        note(  bytes_display_string_bin( 1023 ) ) ;\n        is(    '1.000 KiB', bytes_display_string_bin(    1024 ), 'bytes_display_string_bin:     1024 => 1.000 KiB' ) ;\n        note(  bytes_display_string_bin( 1024 ) ) ;\n        is(    '1.001 KiB', bytes_display_string_bin(    1025 ), 'bytes_display_string_bin:     1025 => 1.001 KiB' ) ;\n\n        is(    '9.999 KiB', bytes_display_string_bin(    10_239 ), 'bytes_display_string_bin:     10_239 => 9.999 KiB' ) ;\n        note(  bytes_display_string_bin( 10_239 ) ) ;\n\n        is(    '10.000 KiB', bytes_display_string_bin(    10_240 ), 'bytes_display_string_bin:     10_240 => 10.000 KiB' ) ;\n        note(  bytes_display_string_bin( 10_240 ) ) ;\n\n        is(    '999.999 KiB', bytes_display_string_bin(    1_023_999 ), 'bytes_display_string_bin:     1_023_999 => 999.999 KiB' ) ;\n        note(  bytes_display_string_bin( 1_023_999 ) ) ;\n\n        is(    '0.977 MiB', bytes_display_string_bin(    1_024_000 ), 'bytes_display_string_bin:     1_024_000 => 0.977 MiB' ) ;\n        note(  bytes_display_string_bin( 1_024_000 ) ) ;\n\n        is(    '0.999 MiB', bytes_display_string_bin(    1_047_527 ), 'bytes_display_string_bin:     1_047_527 => 0.999 MiB' ) ;\n        note(  bytes_display_string_bin( 1_047_527 ) ) ;\n\n        is(    '0.999 MiB', bytes_display_string_bin(    1_048_051 ), 'bytes_display_string_bin:     1_048_051 => 0.999 MiB' ) ;\n        note(  bytes_display_string_bin( 1_048_051 ) ) ;\n\n        is(    '1.000 MiB', bytes_display_string_bin(    1_048_052 ), 'bytes_display_string_bin:     1_048_052 => 1.000 MiB' ) ;\n        note(  bytes_display_string_bin( 1_048_052 ) ) ;\n\n        is(    '1.000 MiB', bytes_display_string_bin( 1_048_575 ), 'bytes_display_string_bin: 1_048_575 => 1.000 MiB' ) ;\n        is(    '1.000 MiB', bytes_display_string_bin( 1_048_576 ), 'bytes_display_string_bin: 1_048_576 => 1.000 MiB' ) ;\n\n        is(    '1.000 GiB', bytes_display_string_bin( 1_073_741_823 ), 'bytes_display_string_bin: 1_073_741_823 => 1.000 GiB' ) ;\n        is(    '1.000 GiB', bytes_display_string_bin( 1_073_741_824 ), 'bytes_display_string_bin: 1_073_741_824 => 1.000 GiB' ) ;\n\n\n        is(    '1.000 TiB', bytes_display_string_bin( 1_099_511_627_775 ), 'bytes_display_string_bin: 1_099_511_627_775 => 1.000 TiB' ) ;\n        is(    '1.000 TiB', bytes_display_string_bin( 1_099_511_627_776 ), 'bytes_display_string_bin: 1_099_511_627_776 => 1.000 TiB' ) ;\n\n        is(    '1.000 PiB', bytes_display_string_bin( 1_125_899_906_842_623 ), 'bytes_display_string_bin: 1_125_899_906_842_623 => 1.000 PiB' ) ;\n        is(    '1.000 PiB', bytes_display_string_bin( 1_125_899_906_842_624 ), 'bytes_display_string_bin: 1_125_899_906_842_624 => 1.000 PiB' ) ;\n\n        is( '1024.000 PiB', bytes_display_string_bin( 1_152_921_504_606_846_975 ), 'bytes_display_string_bin: 1_152_921_504_606_846_975 => 1024.000 PiB' ) ;\n        is( '1024.000 PiB', bytes_display_string_bin( 1_152_921_504_606_846_976 ), 'bytes_display_string_bin: 1_152_921_504_606_846_976 => 1024.000 PiB' ) ;\n\n        is( '1048576.000 PiB', bytes_display_string_bin( 1_180_591_620_717_411_303_424 ), 'bytes_display_string_bin: 1_180_591_620_717_411_303_424 => 1048576.000 PiB' ) ;\n        note(  bytes_display_string_bin( 1_180_591_620_717_411_303_424 ) ) ;\n        note(  bytes_display_string_bin( 3_000_000_000 ) ) ;\n\tnote( 'Leaving  tests_bytes_display_string_bin()' ) ;\n\n        return ;\n}\n\nsub bytes_display_string_bin\n{\n        my ( $bytes ) = @_ ;\n\n        my $readable_value = q{} ;\n\n        if ( ! defined( $bytes ) ) {\n                return( 'NA' ) ;\n        }\n\n        if ( not match_number( $bytes ) ) {\n                return( 'NA' ) ;\n        }\n\n\n\n        SWITCH: {\n                if ( abs( $bytes ) < ( 1000 * $KIBI ) ) {\n                        $readable_value = mysprintf( '%.3f KiB', $bytes / $KIBI) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 1000 * $KIBI * $KIBI ) ) {\n                        $readable_value = mysprintf( '%.3f MiB', $bytes / ($KIBI * $KIBI) ) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 1000 * $KIBI * $KIBI * $KIBI) ) {\n                        $readable_value = mysprintf( '%.3f GiB', $bytes / ($KIBI * $KIBI * $KIBI) ) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 1000 * $KIBI * $KIBI * $KIBI * $KIBI) ) {\n                        $readable_value = mysprintf( '%.3f TiB', $bytes / ($KIBI * $KIBI * $KIBI * $KIBI) ) ;\n                        last SWITCH ;\n                } else {\n                        $readable_value = mysprintf( '%.3f PiB', $bytes / ($KIBI * $KIBI * $KIBI * $KIBI * $KIBI) ) ;\n                }\n                # if you have exabytes (EiB) of email to transfer, you have too much email!\n        }\n        #myprint( \"$bytes = $readable_value\\n\" ) ;\n        return( $readable_value ) ;\n}\n\nsub tests_bytes_display_string_dec\n{\n\tnote( 'Entering tests_bytes_display_string_dec()' ) ;\n\n        is(    'NA', bytes_display_string_dec(       ), 'bytes_display_string_dec: no args => NA' ) ;\n        is(    'NA', bytes_display_string_dec( undef ), 'bytes_display_string_dec: undef   => NA' ) ;\n        is(    'NA', bytes_display_string_dec( 'blabla' ), 'bytes_display_string_dec: blabla   => NA' ) ;\n\n        is(    '0 bytes', bytes_display_string_dec(       0 ),   'bytes_display_string_dec: 0 => 0 bytes' ) ;\n        is(    '1 bytes', bytes_display_string_dec(       1 ),   'bytes_display_string_dec: 1 => 1 bytes' ) ;\n        is(    '10 bytes', bytes_display_string_dec(      10 ),  'bytes_display_string_dec: 10 => 10 bytes' ) ;\n        is(    '999 bytes', bytes_display_string_dec(     999 ), 'bytes_display_string_dec: 999 => 999 bytes' ) ;\n\n        is(    '1.000 KB', bytes_display_string_dec(    1000 ), 'bytes_display_string_dec: 1000 => 1.000 KB' ) ;\n        is(    '1.001 KB', bytes_display_string_dec(    1001 ), 'bytes_display_string_dec: 1000 => 1.1001 KB' ) ;\n\n        is(    '999.999 KB', bytes_display_string_dec(     999_999 ), 'bytes_display_string_dec: 999_999 => 999.999 KB' ) ;\n\n        is(    '1.000 MB', bytes_display_string_dec( 1_000_000 ), 'bytes_display_string_dec: 1_000_000 => 1.000 MB' ) ;\n        is(    '1.000 MB', bytes_display_string_dec( 1_000_500 ), 'bytes_display_string_dec: 1_000_500 => 1.000 MB' ) ;\n        is(    '1.001 MB', bytes_display_string_dec( 1_000_501 ), 'bytes_display_string_dec: 1_000_501 => 1.001 MB' ) ;\n        is(  '999.999 MB', bytes_display_string_dec( 999_999_000 ), 'bytes_display_string_dec: 999_999_000 => 999.999 MB' ) ;\n        is(  '999.999 MB', bytes_display_string_dec( 999_999_499 ), 'bytes_display_string_dec: 999_999_499 => 999.999 MB' ) ;\n        is(    '1.000 GB', bytes_display_string_dec( 999_999_500 ), 'bytes_display_string_dec: 999_999_500 => 1.000 GB' ) ;\n\n        is(    '1.000 GB', bytes_display_string_dec( 1_000_000_000 ), 'bytes_display_string_dec: 1_000_000_000 => 1.000 GB' ) ;\n        is(    '1.000 GB', bytes_display_string_dec( 1_000_500_000 ), 'bytes_display_string_dec: 1_000_500_000 => 1.000 GB' ) ;\n        is(    '1.001 GB', bytes_display_string_dec( 1_000_500_001 ), 'bytes_display_string_dec: 1_000_501_000 => 1.001 GB' ) ;\n        is(  '999.999 GB', bytes_display_string_dec( 999_999_000_000 ), 'bytes_display_string_dec: 999_999_000_000 => 999.999 GB' ) ;\n        is(  '999.999 GB', bytes_display_string_dec( 999_999_499_999 ), 'bytes_display_string_dec: 999_999_499_999 => 999.999 GB' ) ;\n        is(    '1.000 TB', bytes_display_string_dec( 999_999_500_000 ), 'bytes_display_string_dec: 999_999_500_000 => 1.000 TB' ) ;\n\n        is(    '1.000 TB', bytes_display_string_dec( 1_000_000_000_000 ), 'bytes_display_string_dec: 1_000_000_000_000 => 1.000 TB' ) ;\n        is(    '1.000 TB', bytes_display_string_dec( 1_000_500_000_000 ), 'bytes_display_string_dec: 1_000_500_000_000 => 1.000 TB' ) ;\n        is(    '1.001 TB', bytes_display_string_dec( 1_000_500_000_001 ), 'bytes_display_string_dec: 1_000_500_000_000 => 1.000 TB' ) ;\n        is(  '999.999 TB', bytes_display_string_dec( 999_999_000_000_000 ), 'bytes_display_string_dec: 999_999_000_000_000 => 999.999 TB' ) ;\n        is(  '999.999 TB', bytes_display_string_dec( 999_999_499_999_999 ), 'bytes_display_string_dec: 999_999_499_999_999 => 999.999 TB' ) ;\n        is(    '1.000 PB', bytes_display_string_dec( 999_999_500_000_000 ), 'bytes_display_string_dec: 999_999_500_000_000 => 1.000 PB' ) ;\n\n        is(    '3.000 GB', bytes_display_string_dec( 3_000_000_000 ), 'bytes_display_string_dec: 3_000_000_000 => 3.000 GB' ) ;\n\n\tnote( 'Leaving  tests_bytes_display_string_dec()' ) ;\n        return ;\n}\n\nsub bytes_display_string_dec\n{\n        my ( $bytes ) = @_ ;\n\n        my $readable_value = q{} ;\n\n        if ( ! defined( $bytes ) ) {\n                return( 'NA' ) ;\n        }\n\n        if ( not match_number( $bytes ) ) {\n                return( 'NA' ) ;\n        }\n\n        SWITCH: {\n                if ( abs( $bytes ) < ( 1000 ) ) {\n                        $readable_value = mysprintf( '%.0f bytes', $bytes ) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 1000**2 ) ) {\n                        $readable_value = mysprintf( '%.3f KB', $bytes / 1000 ) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 999_999_500 ) ) {\n                        $readable_value = mysprintf( '%.3f MB', $bytes / ( 1000**2 ) ) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 999_999_500_000 ) ) {\n                        $readable_value = mysprintf( '%.3f GB', $bytes / ( 1000**3 ) ) ;\n                        last SWITCH ;\n                }\n                if ( abs( $bytes ) < ( 999_999_500_000_000 ) ) {\n                        $readable_value = mysprintf( '%.3f TB', $bytes / ( 1000**4 ) ) ;\n                        last SWITCH ;\n                } else {\n                        $readable_value = mysprintf( '%.3f PB', $bytes / ( 1000**5 ) ) ;\n                }\n                # if you have exabytes (EiB) of email to transfer, you have too much email!\n        }\n        #myprint( \"$bytes = $readable_value\\n\" ) ;\n\n        return( $readable_value ) ;\n}\n\n\nsub tests_useheader_suggestion\n{\n        note( 'Entering tests_useheader_suggestion()' ) ;\n\n        is( undef, useheader_suggestion(  ), 'useheader_suggestion: no args => undef' ) ;\n        my $mysync = {} ;\n\n        $mysync->{ h1_nb_msg_noheader } = 0 ;\n        is( q{}, useheader_suggestion( $mysync ), 'useheader_suggestion: h1_nb_msg_noheader count null => no suggestion' ) ;\n        $mysync->{ h1_nb_msg_noheader } = 2 ;\n        is( q{in order to sync those 2 unidentified messages, add option --addheader}, useheader_suggestion( $mysync ),\n        'useheader_suggestion: h1_nb_msg_noheader count 2 => suggestion of --addheader' ) ;\n\n        note( 'Leaving  tests_useheader_suggestion()' ) ;\n        return ;\n}\n\nsub useheader_suggestion\n{\n        my $mysync = shift ;\n        if ( ! defined $mysync->{ h1_nb_msg_noheader } )\n        {\n                return ;\n        }\n        elsif ( 1 <= $mysync->{ h1_nb_msg_noheader } )\n        {\n                return qq{in order to sync those $mysync->{ h1_nb_msg_noheader } unidentified messages, add option --addheader} ;\n        }\n        else\n        {\n                return q{} ;\n        }\n        return ;\n}\n\nsub do_and_print_stats\n{\n        my $mysync = shift ;\n\n        if ( ! $mysync->{can_do_stats} ) {\n                return ;\n        }\n\n        my $timeend = time ;\n        my $timediff = $timeend - $mysync->{timestart} ;\n\n        my $timeend_str   = localtimez( $timeend ) ;\n\n        my $cpu_time = cpu_time( $mysync ) ;\n        my $cpu_percent = cpu_percent( $mysync, $cpu_time, $timediff ) ;\n        my $cpu_percent_global = cpu_percent_global( $mysync, $cpu_percent ) ;\n\n        my $memory_consumption_at_end = memory_consumption(  ) || 0 ;\n        my $memory_consumption_at_start = $mysync->{ memory_consumption_at_start } || 0 ;\n        my $memory_ratio = ( $mysync->{ biggest_message_transferred } ) ?\n                mysprintf( '%.1f', $memory_consumption_at_end / $mysync->{ biggest_message_transferred } ) : 'NA' ;\n\n        # my $useheader_suggestion = useheader_suggestion( $mysync ) ;\n        myprint(  \"++++ Statistics\\n\" ) ;\n        myprint(  \"Transfer started on                     : $mysync->{ timestart_str }\\n\" ) ;\n        myprint(  \"Transfer ended on                       : $timeend_str\\n\" ) ;\n        myprintf( \"Transfer time                           : %.1f sec\\n\", $timediff ) ;\n        myprint(  \"Folders synced                          : $h1_folders_wanted_ct/$h1_folders_wanted_nb synced\\n\" ) ;\n        myprint(  \"Messages transferred                    : $mysync->{ nb_msg_transferred } \" ) ;\n        myprint(  \"(could be $nb_msg_skipped_dry_mode without dry mode)\" ) if ( $mysync->{dry} ) ;\n        myprint(  \"\\n\" ) ;\n        myprint(  \"Messages skipped                        : $mysync->{ nb_msg_skipped }\\n\" ) ;\n        myprint(  \"Messages found duplicate on host1       : $mysync->{ acc1 }->{ nb_msg_duplicate }\\n\" ) ;\n        myprint(  \"Messages found duplicate on host2       : $mysync->{ acc2 }->{ nb_msg_duplicate }\\n\" ) ;\n        myprint(  \"Messages found crossduplicate on host2  : $mysync->{ h2_nb_msg_crossdup }\\n\" ) ;\n        myprint(  \"Messages void (noheader) on host1       : $mysync->{ h1_nb_msg_noheader }  \", useheader_suggestion( $mysync ), \"\\n\" ) ;\n        myprint(  \"Messages void (noheader) on host2       : $h2_nb_msg_noheader\\n\" ) ;\n        nb_messages_in_1_not_in_2( $mysync ) ;\n        nb_messages_in_2_not_in_1( $mysync ) ;\n        myprintf( \"Messages found in host1 not in host2    : %s messages\\n\", $mysync->{ nb_messages_in_1_not_in_2 } ) ;\n        myprintf( \"Messages found in host2 not in host1    : %s messages\\n\", $mysync->{ nb_messages_in_2_not_in_1 } ) ;\n        myprint(  \"Messages deleted on host1               : $mysync->{ acc1 }->{ nb_msg_deleted }\\n\" ) ;\n        myprint(  \"Messages deleted on host2               : $mysync->{ acc2 }->{ nb_msg_deleted }\\n\" ) ;\n        myprintf( \"Total bytes transferred                 : %s (%s)\\n\",\n                $mysync->{total_bytes_transferred},\n                bytes_display_string_bin( $mysync->{total_bytes_transferred} ) ) ;\n        myprintf( \"Total bytes skipped                     : %s (%s)\\n\",\n                $mysync->{ total_bytes_skipped },\n                bytes_display_string_bin( $mysync->{ total_bytes_skipped } ) ) ;\n        $timediff ||= 1 ; # No division per 0\n        myprintf(\"Message rate                            : %.1f messages/s\\n\", $mysync->{nb_msg_transferred} / $timediff ) ;\n        myprintf(\"Average bandwidth rate                  : %.1f KiB/s\\n\", $mysync->{total_bytes_transferred} / $KIBI / $timediff ) ;\n        myprint( \"Reconnections to host1                  : $mysync->{imap1}->{IMAPSYNC_RECONNECT_COUNT}\\n\" ) ;\n        myprint( \"Reconnections to host2                  : $mysync->{imap2}->{IMAPSYNC_RECONNECT_COUNT}\\n\" ) ;\n        myprintf(\"Memory consumption at the end           : %.1f MiB (started with %.1f MiB)\\n\",\n                 $memory_consumption_at_end / $KIBI / $KIBI,\n                 $memory_consumption_at_start / $KIBI / $KIBI ) ;\n        myprint( \"Load end is                             : \" . ( join( q{ }, loadavg(  ) ) || 'unknown' ), \" on $mysync->{cpu_number} cores\\n\" ) ;\n        myprint( \"CPU time and %cpu                       : $cpu_time sec $cpu_percent %cpu $cpu_percent_global %allcpus\\n\" ) ;\n        myprintf(\"Biggest message transferred             : %s bytes (%s)\\n\",\n                $mysync->{ biggest_message_transferred },\n                bytes_display_string_bin( $mysync->{ biggest_message_transferred } ) ) ;\n        myprint(  \"Memory/biggest message ratio            : $memory_ratio\\n\" ) ;\n        if ( $mysync->{ foldersizesatend } and $mysync->{ foldersizes } ) {\n\n\n        my $nb_msg_start_diff = diff_or_NA( $mysync->{ h2_nb_msg_start }, $mysync->{ h1_nb_msg_start } ) ;\n        my $bytes_start_diff  = diff_or_NA( $mysync->{ h2_bytes_start },  $mysync->{ h1_bytes_start }  ) ;\n\n        myprintf(\"Start difference host2 - host1          : %s messages, %s bytes (%s)\\n\", $nb_msg_start_diff,\n                                                        $bytes_start_diff,\n                                                        bytes_display_string_bin( $bytes_start_diff ) ) ;\n\n        my $nb_msg_end_diff = diff_or_NA( $h2_nb_msg_end, $h1_nb_msg_end ) ;\n        my $bytes_end_diff  = diff_or_NA( $h2_bytes_end,  $h1_bytes_end  ) ;\n\n        myprintf(\"Final difference host2 - host1          : %s messages, %s bytes (%s)\\n\", $nb_msg_end_diff,\n                                                        $bytes_end_diff,\n                                                        bytes_display_string_bin( $bytes_end_diff ) ) ;\n        }\n\n        comment_on_final_diff_in_1_not_in_2( $mysync ) ;\n        comment_on_final_diff_in_2_not_in_1( $mysync ) ;\n        myprint( \"Detected $mysync->{nb_errors} errors\\n\\n\" ) ;\n\n        myprint(  $mysync->{ warn_release }, \"\\n\" ) ;\n        myprint(  homepage(  ), \"\\n\" ) ;\n        return ;\n}\n\nsub diff_or_NA\n{\n        my( $n1, $n2 ) = @ARG ;\n\n        if ( not defined $n1 or not defined $n2 ) {\n                return 'NA' ;\n        }\n\n        if ( not match_number( $n1 )\n          or not match_number( $n2 ) ) {\n                 return 'NA' ;\n        }\n\n        return( $n1 - $n2 ) ;\n}\n\nsub match_number\n{\n        my $n = shift @ARG ;\n\n        if ( not defined $n ) {\n                return 0 ;\n        }\n        if ( $n =~  /[0-9]+\\.?[0-9]?/x ) {\n                return 1 ;\n        }\n        else {\n                return 0 ;\n        }\n}\n\n\nsub tests_match_number\n{\n\tnote( 'Entering tests_match_number()' ) ;\n\n\n        is( 0, match_number(   ),        'match_number: no parameters => 0' ) ;\n        is( 0, match_number( undef ),    'match_number:         undef => 0' ) ;\n        is( 0, match_number( 'blabla' ), 'match_number:        blabla => 0' ) ;\n        is( 1, match_number( 0 ),        'match_number:             0 => 1' ) ;\n        is( 1, match_number( 1 ),        'match_number:             1 => 1' ) ;\n        is( 1, match_number( 1.0 ),      'match_number:           1.0 => 1' ) ;\n        is( 1, match_number( 0.0 ),      'match_number:           0.0 => 1' ) ;\n\n\tnote( 'Leaving  tests_match_number()' ) ;\n        return ;\n}\n\n\n\nsub tests_diff_or_NA\n{\n\tnote( 'Entering tests_diff_or_NA()' ) ;\n\n\n        is( 'NA', diff_or_NA(  ),             'diff_or_NA: no parameters => NA' ) ;\n        is( 'NA', diff_or_NA( undef ),        'diff_or_NA: undef         => NA' ) ;\n        is( 'NA', diff_or_NA( undef, undef ), 'diff_or_NA: undef  undef  => NA' ) ;\n        is( 'NA', diff_or_NA( undef, 1 ),     'diff_or_NA: undef  1      => NA' ) ;\n        is( 'NA', diff_or_NA( 1, undef ),     'diff_or_NA: 1      undef  => NA' ) ;\n        is( 'NA', diff_or_NA( 'blabla', 1 ),  'diff_or_NA: blabla 1      => NA' ) ;\n        is( 'NA', diff_or_NA( 1, 'blabla' ),  'diff_or_NA: 1      blabla => NA' ) ;\n        is( 0, diff_or_NA( 1, 1 ),            'diff_or_NA: 1      1      =>  0' ) ;\n        is( 1, diff_or_NA( 1, 0 ),            'diff_or_NA: 1      0      =>  1' ) ;\n        is( -1, diff_or_NA( 0, 1 ),           'diff_or_NA: 0      1      => -1' ) ;\n        is( 0, diff_or_NA( 1.0, 1 ),          'diff_or_NA: 1.0    1      =>  0' ) ;\n        is( 1, diff_or_NA( 1.0, 0 ),          'diff_or_NA: 1.0    0      =>  1' ) ;\n        is( -1, diff_or_NA( 0, 1.0 ),         'diff_or_NA: 0      1.0    => -1' ) ;\n\n\tnote( 'Leaving  tests_diff_or_NA()' ) ;\n        return ;\n}\n\nsub homepage\n{\n        return( 'Homepage: https://imapsync.lamiral.info/' ) ;\n}\n\n\nsub load_modules\n{\n        if ( $sync->{ssl1}\n\t  or $sync->{ssl2}\n\t  or $sync->{tls1}\n\t  or $sync->{tls2}) {\n                if ( $sync->{inet4} ) {\n                        IO::Socket::SSL->import( 'inet4' ) ;\n                }\n                if ( $sync->{inet6} ) {\n                        IO::Socket::SSL->import( 'inet6' ) ;\n                }\n        }\n        return ;\n}\n\n\n# Globals: $skipsize $wholeheaderifneeded\nsub parse_header_msg\n{\n        my ( $mysync, $imap, $m_uid, $s_heads, $s_fir, $side, $s_hash ) = @_ ;\n\n        my $head = $s_heads->{$m_uid} ;\n        my $headnum =  scalar keys  %{ $head }   ;\n        $mysync->{ debug } and myprint( \"$side: uid $m_uid number of headers, pass one: \", $headnum, \"\\n\" ) ;\n\n        if ( ( ! $headnum ) and ( $wholeheaderifneeded ) ){\n                $mysync->{ debug } and myprint( \"$side: uid $m_uid no header by parse_headers so taking whole header with BODY.PEEK[HEADER]\\n\" ) ;\n                $imap->fetch($m_uid, 'BODY.PEEK[HEADER]' ) ;\n                my $whole_header = $imap->_transaction_literals ;\n\n                #myprint( $whole_header ) ;\n                $head = decompose_header( $whole_header ) ;\n\n                $headnum =  scalar  keys  %{ $head }   ;\n                $mysync->{ debug } and myprint( \"$side: uid $m_uid number of headers, pass two: \", $headnum, \"\\n\" ) ;\n        }\n\n        #myprint( Data::Dumper->Dump( [ $head, \\%useheader ] )  ) ;\n\n        my $headstr = header_construct( $mysync, $head, $side, $m_uid ) ;\n\n        if ( ( ! $headstr ) and ( $mysync->{addheader} ) and ( $side eq 'Host1' ) ) {\n                my $header = add_header( $m_uid ) ;\n                $mysync->{ debug } and myprint( \"$side: uid $m_uid no header found so adding our own [$header]\\n\" ) ;\n                $headstr .= uc  $header  ;\n                $s_fir->{$m_uid}->{NO_HEADER} = 1;\n        }\n\n        return if ( ! $headstr ) ;\n\n        my $size  = $s_fir->{$m_uid}->{'RFC822.SIZE'} ;\n        my $flags = $s_fir->{$m_uid}->{'FLAGS'} ;\n        my $idate = $s_fir->{$m_uid}->{'INTERNALDATE'} ;\n        $size = length $headstr  unless ( $size ) ;\n        my $m_md5 = md5_base64( $headstr ) ;\n\n        my $key ;\n        if ( $skipsize ) {\n                $key = \"$m_md5\";\n        }\n        else {\n                $key = \"$m_md5:$size\";\n        }\n\n        if ( exists $s_hash->{\"$key\"} )\n        {\n                # 0 return code is used to identify duplicate message hash\n                my $dup_ref = $s_hash->{\"$key\"}->{'U'} ;\n                my $num = scalar( @{ $dup_ref } ) ;\n                push( @{ $dup_ref }, $m_uid ) ;\n                my $keydup = \"$key#$num\" ;\n                $mysync->{ debug } and myprint( \"$side: uid $m_uid sig $keydup size $size idate $idate dup @{ $dup_ref }\\n\" ) ;\n                if ( $mysync->{ syncduplicates } )\n                {\n                        $s_hash->{\"$keydup\"}{'5'} = $m_md5 ;\n                        $s_hash->{\"$keydup\"}{'s'} = $size ;\n                        $s_hash->{\"$keydup\"}{'D'} = $idate ;\n                        $s_hash->{\"$keydup\"}{'F'} = $flags ;\n                        $s_hash->{\"$keydup\"}{'m'} = $m_uid ;\n                }\n                return 0 ;\n        }\n        else\n        {\n                $s_hash->{\"$key\"}{'5'} = $m_md5 ;\n                $s_hash->{\"$key\"}{'s'} = $size ;\n                $s_hash->{\"$key\"}{'D'} = $idate ;\n                $s_hash->{\"$key\"}{'F'} = $flags ;\n                $s_hash->{\"$key\"}{'m'} = $m_uid ;\n                $s_hash->{\"$key\"}{'U'} = [ $m_uid ] ; # ? or [  ] ?\n                $mysync->{ debug } and myprint( \"$side: uid $m_uid sig $key size $size idate $idate\\n\" ) ;\n                return( 1 ) ;\n        }\n\n        # we should not be here\n        return ;\n}\n\nsub tests_header_construct\n{\n        note( 'Entering tests_header_construct()' ) ;\n\n        is( undef, header_construct(  ),  'header_construct: no args => undef' ) ;\n        my $mysync = {} ;\n        my $head = {\n                'key1' => [ 'val1_key1' ]\n        } ;\n        is( undef, header_construct( $mysync, $head, 'Host1', '1' ),  'header_construct: key1 val1_key1 no useheader => undef' ) ;\n\n        $mysync->{useheader}->{ 'KEY1'  } = 1 ;\n        is( 'KEY1: VAL1_KEY1', header_construct( $mysync, $head, 'Host1', '1' ),  'header_construct: key1 val1_key1 => KEY1: VAL1_KEY1' ) ;\n\n\n\n        $head = {\n                'key1' => [ 'val1_key1', 'val3_key1', 'val2_key1' ]\n        } ;\n        is( 'KEY1: VAL1_KEY1KEY1: VAL2_KEY1KEY1: VAL3_KEY1', header_construct( $mysync, $head, 'Host1', '1' ),\n        'header_construct: key1 val1_key1 val3_key1 val2_key1                => KEY1: VAL1_KEY1KEY1: VAL2_KEY1KEY1: VAL3_KEY1' ) ;\n\n        $head = {\n                'key1' => [ 'val1_key1', 'val3_key1', ' val2_key1' ]\n        } ;\n        is( 'KEY1: VAL1_KEY1KEY1: VAL2_KEY1KEY1: VAL3_KEY1', header_construct( $mysync, $head, 'Host1', '1' ),\n        'header_construct: key1 val1_key1 val3_key1  val2_key1               => KEY1: VAL1_KEY1KEY1: VAL2_KEY1KEY1: VAL3_KEY1' ) ;\n\n        $mysync->{useheader}->{ 'ALL'  } = 1 ;\n\n        is( 'KEY1: VAL1_KEY1KEY1: VAL2_KEY1KEY1: VAL3_KEY1', header_construct( $mysync, $head, 'Host1', '1' ),\n        'header_construct: key1 val1_key1 val3_key1  val2_key1 useheader ALL => KEY1: VAL1_KEY1KEY1: VAL2_KEY1KEY1: VAL3_KEY1' ) ;\n\n        $mysync->{skipheader} = 'key1' ;\n        is( undef, header_construct( $mysync, $head, 'Host1', '1' ),\n        'header_construct: key1 val1_key1 val3_key1  val2_key1 useheader ALL => undef' ) ;\n\n        $head = {\n                'key1' => [ 'val1_key1', 'val3_key1', ' val2_key1' ],\n                'key2' => [ 'val1_key2', 'val3_key2', ' val2_key2' ]\n        } ;\n        is( 'KEY2: VAL1_KEY2KEY2: VAL2_KEY2KEY2: VAL3_KEY2', header_construct( $mysync, $head, 'Host1', '1' ),\n        'header_construct: ... useheader ALL skipheader key1 => KEY2: VAL1_KEY2KEY2: VAL2_KEY2KEY2: VAL3_KEY2' ) ;\n\n\n        note( 'Leaving  tests_header_construct()' ) ;\n        return ;\n}\n\n\n# No global in header_construct\nsub header_construct\n{\n        my( $mysync, $head, $side, $m_uid ) = @_ ;\n\n        my @headstr ;\n        foreach my $h ( sort keys  %{ $head }  ) {\n                next if ( not ( exists $mysync->{useheader}->{ uc  $h  } )\n                      and ( not exists $mysync->{useheader}->{ 'ALL' } )\n                ) ;\n                foreach my $val ( @{$head->{$h}} ) {\n\n                        my $H = header_line_normalize( $h, $val ) ;\n\n                        # show stuff in debug mode\n                        $mysync->{ debug } and myprint( \"$side uid $m_uid header [$H]\", \"\\n\" ) ;\n\n                        if ( $mysync->{skipheader} and $H =~ m/$mysync->{skipheader}/xi) {\n                                $mysync->{ debug } and myprint( \"$side uid $m_uid skipping header [$H]\\n\" ) ;\n                                next ;\n                        }\n                        push @headstr, $H ;\n                }\n        }\n        my $headstr = join( '', sort @headstr ) || undef ;\n        return( $headstr ) ;\n}\n\n\nsub header_line_normalize\n{\n        my( $header_key,  $header_val ) = @_ ;\n\n        # no 8-bit data in headers !\n        $header_val =~ s/[\\x80-\\xff]/X/xog;\n\n        # change tabulations to space (Gmail bug on with \"Received:\" on multilines)\n        $header_val =~ s/\\t/\\ /xgo ;\n\n        # remove the first blanks ( dbmail bug? )\n        $header_val =~ s/^\\s*//xo;\n\n        # remove the last blanks ( Gmail bug )\n        $header_val =~ s/\\s*$//xo;\n\n        # remove successive blanks ( Mailenable does it )\n        $header_val =~ s/\\s+/ /xgo;\n\n        # remove Message-Id value domain part ( Mailenable changes it )\n        if ( ( $messageidnodomain ) and ( 'MESSAGE-ID' eq uc  $header_key  ) ) { $header_val =~ s/^([^@]+).*$/$1/xo ; }\n\n        # and uppercase header line\n        # (dbmail and dovecot)\n\n        my $header_line = uc \"$header_key: $header_val\" ;\n\n        return( $header_line ) ;\n}\n\nsub tests_header_line_normalize\n{\n\tnote( 'Entering tests_header_line_normalize()' ) ;\n\n\n        ok( ': ' eq header_line_normalize( q{}, q{} ), 'header_line_normalize: empty args' ) ;\n        ok( 'HHH: VVV' eq header_line_normalize( 'hhh', 'vvv' ), 'header_line_normalize: hhh vvv ' ) ;\n        ok( 'HHH: VVV' eq header_line_normalize( 'hhh', '  vvv' ), 'header_line_normalize: remove first blancs' ) ;\n        ok( 'HHH: AA BB CCC D' eq header_line_normalize( 'hhh', 'aa  bb   ccc d' ), 'header_line_normalize: remove succesive blanks' ) ;\n        ok( 'HHH: AA BB CCC' eq header_line_normalize( 'hhh', 'aa  bb   ccc   ' ), 'header_line_normalize: remove last blanks' ) ;\n        ok( 'HHH: VVV XX YY' eq header_line_normalize( 'hhh', \"vvv\\t\\txx\\tyy\" ), 'header_line_normalize: tabs' ) ;\n        ok( 'HHH: XABX' eq header_line_normalize( 'hhh', \"\\x80AB\\xff\" ), 'header_line_normalize: 8bit' ) ;\n\n\tnote( 'Leaving  tests_header_line_normalize()' ) ;\n        return ;\n}\n\n\nsub tests_firstline\n{\n        note( 'Entering tests_firstline()' ) ;\n\n        is( q{}, firstline( 'W/tmp/tests/noexist.txt' ), 'firstline: getting empty string from inexisting W/tmp/tests/noexist.txt' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'firstline: mkpath W/tmp/tests/' ) ;\n\n        is( \"blabla\\n\" , string_to_file( \"blabla\\n\", 'W/tmp/tests/firstline.txt' ), 'firstline: put blabla in W/tmp/tests/firstline.txt' ) ;\n        is( 'blabla' , firstline( 'W/tmp/tests/firstline.txt' ), 'firstline: get blabla from W/tmp/tests/firstline.txt' ) ;\n\n        is( q{} , string_to_file( q{}, 'W/tmp/tests/firstline2.txt' ), 'firstline: put empty string in W/tmp/tests/firstline2.txt' ) ;\n        is( q{} , firstline( 'W/tmp/tests/firstline2.txt' ), 'firstline: get empty string from W/tmp/tests/firstline2.txt' ) ;\n\n        is( \"\\n\" , string_to_file( \"\\n\", 'W/tmp/tests/firstline3.txt' ), 'firstline: put CR in W/tmp/tests/firstline3.txt' ) ;\n        is( q{} , firstline( 'W/tmp/tests/firstline3.txt' ), 'firstline: get empty string from W/tmp/tests/firstline3.txt' ) ;\n\n        is( \"blabla\\nTiti\\n\" , string_to_file( \"blabla\\nTiti\\n\", 'W/tmp/tests/firstline4.txt' ), 'firstline: put blabla\\nTiti\\n in W/tmp/tests/firstline4.txt' ) ;\n        is( 'blabla' , firstline( 'W/tmp/tests/firstline4.txt' ), 'firstline: get blabla from W/tmp/tests/firstline4.txt' ) ;\n\n        note( 'Leaving  tests_firstline()' ) ;\n        return ;\n}\n\nsub firstline\n{\n        # extract the first line of a file (without \\n)\n        # return empty string if error or empty string\n\n        my $file = shift ;\n        my $line ;\n\n        $line = nthline( $file, 1 ) ;\n        return $line ;\n}\n\n\n\nsub tests_secondline\n{\n        note( 'Entering tests_secondline()' ) ;\n\n        is( q{}, secondline( 'W/tmp/tests/noexist.txt' ), 'secondline: getting empty string from inexisting W/tmp/tests/noexist.txt' ) ;\n        is( q{}, secondline( 'W/tmp/tests/noexist.txt', 2 ), 'secondline: 2nd getting empty string from inexisting W/tmp/tests/noexist.txt' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'secondline: mkpath W/tmp/tests/' ) ;\n\n        is( \"L1\\nL2\\nL3\\nL4\\n\" , string_to_file( \"L1\\nL2\\nL3\\nL4\\n\", 'W/tmp/tests/secondline.txt' ), 'secondline: put L1\\nL2\\nL3\\nL4\\n in W/tmp/tests/secondline.txt' ) ;\n        is( 'L2' , secondline( 'W/tmp/tests/secondline.txt' ), 'secondline: get L2 from W/tmp/tests/secondline.txt' ) ;\n\n\n        note( 'Leaving  tests_secondline()' ) ;\n        return ;\n}\n\n\nsub secondline\n{\n        # extract the second line of a file (without \\n)\n        # return empty string if error or empty string\n\n        my $file = shift ;\n        my $line ;\n\n        $line = nthline( $file, 2 ) ;\n        return $line ;\n}\n\n\n\n\nsub tests_nthline\n{\n        note( 'Entering tests_nthline()' ) ;\n\n        is( q{}, nthline( 'W/tmp/tests/noexist.txt' ), 'nthline: getting empty string from inexisting W/tmp/tests/noexist.txt' ) ;\n        is( q{}, nthline( 'W/tmp/tests/noexist.txt', 2 ), 'nthline: 2nd getting empty string from inexisting W/tmp/tests/noexist.txt' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'nthline: mkpath W/tmp/tests/' ) ;\n        is( \"L1\\nL2\\nL3\\nL4\\n\" , string_to_file( \"L1\\nL2\\nL3\\nL4\\n\", 'W/tmp/tests/nthline.txt' ), 'nthline: put L1\\nL2\\nL3\\nL4\\n in W/tmp/tests/nthline.txt' ) ;\n        is( 'L3' , nthline( 'W/tmp/tests/nthline.txt', 3 ), 'nthline: get L3 from W/tmp/tests/nthline.txt' ) ;\n\n\n        note( 'Leaving  tests_nthline()' ) ;\n        return ;\n}\n\n\nsub nthline\n{\n        # extract the nth line of a file (without \\n)\n        # return empty string if error or empty string\n\n        my $file = shift ;\n        my $num  = shift ;\n\n        if ( ! all_defined( $file, $num ) ) { return q{} ; }\n\n        my $line ;\n\n        $line = ( file_to_array( $file ) )[$num - 1] ;\n        if ( ! defined $line )\n        {\n                return q{} ;\n        }\n        else\n        {\n                chomp $line ;\n                return $line ;\n        }\n}\n\nsub tests_file_to_array\n{\n        note( 'Entering tests_file_to_array()' ) ;\n\n        is( undef, file_to_array(  ),           'file_to_array: no args => undef' ) ;\n\tis( undef, file_to_array( '/noexist' ), 'file_to_array: /noexist => undef' ) ;\n\tis( undef, file_to_array( '/' ),        'file_to_array: reading a directory => undef' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'file_to_array: mkpath W/tmp/tests/' ) ;\n        is( \"L1\\nL2\\nL3\\nL4\\n\" , string_to_file( \"L1\\nL2\\nL3\\nL4\\n\", 'W/tmp/tests/file_to_array.txt' ), 'file_to_array: put L1\\nL2\\nL3\\nL4\\n in W/tmp/tests/file_to_array.txt' ) ;\n        is_deeply( [ \"L1\\n\", \"L2\\n\", \"L3\\n\", \"L4\\n\" ] , [ file_to_array( 'W/tmp/tests/file_to_array.txt' ) ], 'file_to_array: get back L1\\n L2\\n L3\\n L4\\n from W/tmp/tests/file_to_array.txt' ) ;\n\n        note( 'Leaving  tests_file_to_array()' ) ;\n        return ;\n}\n\nsub file_to_array\n{\n\n        my( $file ) = shift ;\n\tif ( ! $file )    { return ; }\n\tif ( ! -e $file ) { return ; }\n\tif ( ! -f $file ) { return ; }\n\tif ( ! -r $file ) { return ; }\n\n        my @string ;\n\n        if ( open my $FILE, '<', $file )\n        {\n                @string = <$FILE> ;\n                close $FILE ;\n                return( @string ) ;\n        }\n        else\n        {\n\t\tmyprint( \"Error reading file $file : $OS_ERROR\\n\" ) ;\n\t\treturn ;\n\t}\n}\n\n\nsub tests_file_to_string\n{\n\tnote( 'Entering tests_file_to_string()' ) ;\n\n\tis( undef, file_to_string(  ), 'file_to_string: no args => undef' ) ;\n\tis( undef, file_to_string( '/noexist' ), 'file_to_string: /noexist => undef' ) ;\n\tis( undef, file_to_string( '/' ), 'file_to_string: reading a directory => undef' ) ;\n\tok( file_to_string( $PROGRAM_NAME ), 'file_to_string: reading myself' ) ;\n\n        ok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'file_to_string: mkpath W/tmp/tests/' ) ;\n\n\tis( 'lilili', string_to_file( 'lilili', 'W/tmp/tests/canbewritten' ), 'file_to_string: string_to_file filling W/tmp/tests/canbewritten with lilili' ) ;\n\tis( 'lilili', file_to_string( 'W/tmp/tests/canbewritten' ), 'file_to_string: reading W/tmp/tests/canbewritten is lilili' ) ;\n\n\tis( q{}, string_to_file( q{}, 'W/tmp/tests/empty' ), 'file_to_string: string_to_file filling W/tmp/tests/empty with empty string' ) ;\n\tis( q{}, file_to_string( 'W/tmp/tests/empty' ), 'file_to_string: reading W/tmp/tests/empty is empty' ) ;\n\n\tnote( 'Leaving  tests_file_to_string()' ) ;\n\treturn ;\n}\n\nsub file_to_string\n{\n        my  $file  = shift ;\n\tif ( ! $file ) { return ; }\n\tif ( ! -e $file ) { return ; }\n\tif ( ! -f $file ) { return ; }\n\tif ( ! -r $file ) { return ; }\n\n        return( join q{}, file_to_array( $file ) ) ;\n}\n\n\nsub tests_string_to_file\n{\n\tnote( 'Entering tests_string_to_file()' ) ;\n\n\tis( undef, string_to_file(  ),         'string_to_file: no args => undef' ) ;\n\tis( undef, string_to_file( 'lalala' ), 'string_to_file: one arg => undef' ) ;\n\tis( undef, string_to_file( 'lalala', '.' ), 'string_to_file: writing a directory => undef' ) ;\n\tok( (-d 'W/tmp/tests/' or  mkpath( 'W/tmp/tests/' ) ), 'string_to_file: mkpath W/tmp/tests/' ) ;\n\tis( 'lalala', string_to_file( 'lalala', 'W/tmp/tests/canbewritten' ), 'string_to_file: W/tmp/tests/canbewritten with lalala' ) ;\n\tis( q{}, string_to_file( q{}, 'W/tmp/tests/empty' ), 'string_to_file: W/tmp/tests/empty with empty string' ) ;\n\n\tSKIP: {\n                Readonly my $NB_UNX_tests_string_to_file => 1 ;\n                skip( 'Not on Unix non-root', $NB_UNX_tests_string_to_file ) if ('MSWin32' eq $OSNAME or '0' eq $EFFECTIVE_USER_ID ) ;\n\t\tis( undef, string_to_file( 'lalala', '/cantouch' ), 'string_to_file: /cantouch denied => undef' ) ;\n\t}\n\n\tnote( 'Leaving  tests_string_to_file()' ) ;\n\treturn ;\n}\n\nsub string_to_file\n{\n        my( $string, $file ) = @_ ;\n\tif( ! defined $string ) { return ; }\n\tif( ! defined $file )   { return ; }\n\n\tif ( ! -e $file && ! -w dirname( $file ) ) {\n\t\tmyprint( \"string_to_file: directory of $file is not writable\\n\" ) ;\n\t\treturn ;\n\t}\n\n        if ( ! sysopen( FILE, $file, O_WRONLY|O_TRUNC|O_CREAT, 0600) ) {\n\t\tmyprint( \"string_to_file: failure writing to $file with error: $OS_ERROR\\n\" ) ;\n\t\treturn ;\n\t}\n        print FILE $string ;\n        close FILE ;\n        return $string ;\n}\n\n0 and <<'MULTILINE_COMMENT' ;\nThis is a multiline comment.\nBased on David Carter discussion, to do:\n* Call parameters stay the same.\n* Now always \"return( $string, $error )\". Descriptions below.\nOK * Still    capture STDOUT via \"1> $output_tmpfile\" to finish in $string and \"return( $string, $error )\"\nOK * Now also capture STDERR via \"2> $error_tmpfile\"  to finish in $error  and \"return( $string, $error )\"\nOK * in case of CHILD_ERROR, return( undef, $error )\n  and print $error, with folder/UID/maybeSubject context,\n  on console and at the end with the final error listing. Count this as a sync error.\n* in case of good command, take final $string as is, unless void. In case $error with value then print it.\n* in case of good command and final $string empty, consider it like CHILD_ERROR =>\n  return( undef, $error ) and print $error, with folder/UID/maybeSubject context,\n  on console and at the end with the final error listing. Count this as a sync error.\nMULTILINE_COMMENT\n# End of multiline comment.\n\nsub pipemess\n{\n        my ( $string, @commands ) = @_ ;\n        my $error = q{} ;\n        foreach my $command ( @commands ) {\n                my $input_tmpfile  = \"$sync->{ tmpdir }/imapsync_tmp_file.$PROCESS_ID.inp.txt\" ;\n                my $output_tmpfile = \"$sync->{ tmpdir }/imapsync_tmp_file.$PROCESS_ID.out.txt\" ;\n                my $error_tmpfile  = \"$sync->{ tmpdir }/imapsync_tmp_file.$PROCESS_ID.err.txt\" ;\n                string_to_file( $string, $input_tmpfile  ) ;\n                ` $command < $input_tmpfile 1> $output_tmpfile 2> $error_tmpfile ` ;\n                my $is_command_ko = $CHILD_ERROR ;\n                my $error_cmd = file_to_string( $error_tmpfile ) ;\n                chomp( $error_cmd ) ;\n                $string = file_to_string( $output_tmpfile ) ;\n                my $string_len = length( $string ) ;\n                unlink $input_tmpfile, $output_tmpfile, $error_tmpfile ;\n\n                if ( $is_command_ko or ( ! $string_len ) ) {\n                        my $cmd_exit_value = $CHILD_ERROR >> 8 ;\n                        my $cmd_end_signal = $CHILD_ERROR & 127 ;\n                        my $signal_log = ( $cmd_end_signal ) ? \" signal $cmd_end_signal and\" : q{} ;\n                        my $error_log = qq{Failure: --pipemess command \"$command\" ended with$signal_log \"$string_len\" characters exit value \"$cmd_exit_value\" and STDERR \"$error_cmd\"\\n} ;\n                        myprint( $error_log ) ;\n                        if ( wantarray ) {\n                                return @{ [ undef, $error_log ] }\n                        }else{\n                                return ;\n                        }\n                }\n                if ( $error_cmd ) {\n                        $error .= qq{STDERR of --pipemess \"$command\": $error_cmd\\n} ;\n                        myprint(  qq{STDERR of --pipemess \"$command\": $error_cmd\\n} ) ;\n                }\n        }\n        #myprint( \"[$string]\\n\" ) ;\n        if ( wantarray ) {\n                return ( $string, $error ) ;\n        }else{\n                return $string ;\n        }\n}\n\n\n\nsub tests_pipemess\n{\n\tnote( 'Entering tests_pipemess()' ) ;\n\n\n        SKIP: {\n                Readonly my $NB_WIN_tests_pipemess => 3 ;\n                skip( 'Not on MSWin32', $NB_WIN_tests_pipemess ) if ('MSWin32' ne $OSNAME) ;\n                # Windows\n                # \"type\" command does not accept redirection of STDIN with <\n                # \"sort\" does\n                ok( \"nochange\\n\" eq pipemess( 'nochange', 'sort' ), 'pipemess: nearly no change by sort' ) ;\n                ok( \"nochange2\\n\" eq pipemess( 'nochange2', qw( sort sort ) ), 'pipemess: nearly no change by sort,sort' ) ;\n                # command not found\n                #diag( 'Warning and failure about cacaprout are on purpose' ) ;\n                ok( ! defined( pipemess( q{}, 'cacaprout' ) ), 'pipemess: command not found' ) ;\n\n        } ;\n\n        my ( $stringT, $errorT ) ;\n\n        SKIP: {\n                Readonly my $NB_UNX_tests_pipemess => 25 ;\n                skip( 'Not on Unix', $NB_UNX_tests_pipemess ) if ('MSWin32' eq $OSNAME) ;\n                # Unix\n                ok( 'nochange' eq pipemess( 'nochange', 'cat' ), 'pipemess: no change by cat' ) ;\n\n                ok( 'nochange2' eq pipemess( 'nochange2', 'cat', 'cat' ), 'pipemess: no change by cat,cat' ) ;\n\n                ok( \"     1\\tnumberize\\n\" eq pipemess( \"numberize\\n\", 'cat -n' ), 'pipemess: numberize by cat -n' ) ;\n                ok( \"     1\\tnumberize\\n     2\\tnumberize\\n\" eq pipemess( \"numberize\\nnumberize\\n\", 'cat -n' ), 'pipemess: numberize by cat -n' ) ;\n\n                ok( \"A\\nB\\nC\\n\" eq pipemess( \"A\\nC\\nB\\n\", 'sort' ), 'pipemess: sort' ) ;\n\n                # command not found\n                #diag( 'Warning and failure about cacaprout are on purpose' ) ;\n                is( undef, pipemess( q{}, 'cacaprout' ), 'pipemess: command not found' ) ;\n\n                # success with true but no output at all\n                is( undef, pipemess( q{blabla}, 'true' ), 'pipemess: true but no output' ) ;\n\n                # failure with false and no output at all\n                is( undef, pipemess( q{blabla}, 'false' ), 'pipemess: false and no output' ) ;\n\n                # Failure since pipemess is not a real pipe, so first cat wait for standard input\n                is( q{blabla}, pipemess( q{blabla}, '( cat|cat ) ' ), 'pipemess: ok by ( cat|cat )' ) ;\n\n\n                ( $stringT, $errorT ) = pipemess( 'nochange', 'cat' ) ;\n                is( $stringT, 'nochange', 'pipemess: list context, no change by cat, string' ) ;\n                is( $errorT, q{}, 'pipemess: list context, no change by cat, no error' ) ;\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', 'true' ) ;\n                is( $stringT, undef, 'pipemess: list context, true but no output, string' ) ;\n                like( $errorT, qr{\\QFailure: --pipemess command \"true\" ended with \"0\" characters exit value \"0\" and STDERR \"\"\\E}xm, 'pipemess: list context, true but no output, error' ) ;\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', 'false' ) ;\n                is( $stringT, undef, 'pipemess: list context, false and no output, string' ) ;\n                like( $errorT, qr{\\QFailure: --pipemess command \"false\" ended with \"0\" characters exit value \"1\" and STDERR \"\"\\E}xm,\n\t\t'pipemess: list context, false and no output, error' ) ;\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', '/bin/echo -n blablabla' ) ;\n                is( $stringT, q{blablabla}, 'pipemess: list context, \"echo -n blablabla\", string' ) ;\n                is( $errorT, q{},  'pipemess: list context, \"echo blablabla\", error' ) ;\n\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', '( echo -n blablabla 3>&1 1>&2 2>&3 )' ) ;\n                is( $stringT, undef, 'pipemess: list context, \"no output STDERR blablabla\", string' ) ;\n                like( $errorT,  qr{blablabla\"}xm, 'pipemess: list context, \"no output STDERR blablabla\", error' ) ;\n\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', '( echo -n blablabla 3>&1 1>&2 2>&3 )', 'false' ) ;\n                is( $stringT, undef, 'pipemess: list context, \"no output STDERR blablabla then false\", string' ) ;\n                like( $errorT,  qr{blablabla\"}xm, 'pipemess: list context, \"no output STDERR blablabla then false\", error' ) ;\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', 'false', '( echo -n blablabla 3>&1 1>&2 2>&3 )' ) ;\n                is( $stringT, undef, 'pipemess: list context, \"false then STDERR blablabla\", string' ) ;\n                like( $errorT,  qr{\\QFailure: --pipemess command \"false\" ended with \"0\" characters exit value \"1\" and STDERR \"\"\\E}xm,\n\t\t'pipemess: list context, \"false then STDERR blablabla\", error' ) ;\n\n                ( $stringT, $errorT ) = pipemess( 'dontcare', '( echo rrrrr ; echo -n error_blablabla 3>&1 1>&2 2>&3 )' ) ;\n                like( $stringT, qr{rrrrr}xm, 'pipemess: list context, \"STDOUT rrrrr STDERR error_blablabla\", string' ) ;\n                like( $errorT,  qr{STDERR.*error_blablabla}xm,  'pipemess: list context, \"STDOUT rrrrr STDERR error_blablabla\", error' ) ;\n\n        }\n\n        ( $stringT, $errorT ) = pipemess( 'dontcare', 'cacaprout' ) ;\n        is( $stringT, undef, 'pipemess: list context, cacaprout not found, string' ) ;\n        like( $errorT, qr{\\QFailure: --pipemess command \"cacaprout\" ended with \"0\" characters exit value\\E}xm,\n\t'pipemess: list context, cacaprout not found, error' ) ;\n\n\tnote( 'Leaving  tests_pipemess()' ) ;\n        return ;\n}\n\n\n\nsub tests_is_a_release_number\n{\n\tnote( 'Entering tests_is_a_release_number()' ) ;\n\n        is( undef, is_a_release_number(  ), 'is_a_release_number: no args => undef' ) ;\n        ok( is_a_release_number( $RELEASE_NUMBER_EXAMPLE_1 ), 'is_a_release_number 1.351' ) ;\n        ok( is_a_release_number( $RELEASE_NUMBER_EXAMPLE_2 ), 'is_a_release_number 42.4242' ) ;\n        ok( is_a_release_number( imapsync_version( $sync ) ), 'is_a_release_number imapsync_version(  )' ) ;\n        ok( ! is_a_release_number( 'blabla' ), '! is_a_release_number blabla' ) ;\n\n\tnote( 'Leaving  tests_is_a_release_number()' ) ;\n        return ;\n}\n\nsub is_a_release_number\n{\n        my $number = shift ;\n        if ( ! defined $number ) { return ; }\n        return( $number =~ m{^\\d+\\.\\d+$}xo ) ;\n}\n\n\n\nsub imapsync_version_public\n{\n\n        my $local_version = imapsync_version( $sync ) ;\n        my $imapsync_basename = imapsync_basename(  ) ;\n        my $context = imapsync_context(  ) ;\n        my $agent_info = \"$OSNAME system, perl \"\n                . mysprintf( '%vd', $PERL_VERSION)\n                . \", Mail::IMAPClient $Mail::IMAPClient::VERSION\"\n                . \" $imapsync_basename\"\n                . \" $context\" ;\n        my $sock = IO::Socket::INET->new(\n                PeerAddr => 'imapsync.lamiral.info',\n                PeerPort => 80,\n                Proto    => 'tcp',\n                ) ;\n        return( 'unknown' ) if not $sock ;\n        print $sock\n                \"GET /prj/imapsync/VERSION HTTP/1.0\\r\\n\",\n                \"User-Agent: imapsync/$local_version ($agent_info)\\r\\n\",\n                \"Host: ks.lamiral.info\\r\\n\\r\\n\" ;\n        my @line = <$sock> ;\n        close $sock ;\n        my $last_release = $line[$LAST] ;\n        chomp $last_release ;\n        return( $last_release ) ;\n}\n\nsub not_long_imapsync_version_public\n{\n        #myprint( \"Entering not_long_imapsync_version_public\\n\" ) ;\n\n\tmy $fake = shift ;\n\tif ( $fake ) { return $fake }\n\n        my $val ;\n\n        # Doesn't work with gethostbyname (see perlipc)\n        #local $SIG{ALRM} = sub { die \"alarm\\n\" } ;\n\n        if ('MSWin32' eq $OSNAME) {\n                local $SIG{ALRM} = sub { die \"alarm\\n\" } ;\n        }else{\n\n                POSIX::sigaction(SIGALRM,\n                         POSIX::SigAction->new(sub { croak 'alarm' } ) )\n                        or myprint( \"Error setting SIGALRM handler: $OS_ERROR\\n\" ) ;\n        }\n\n        my $ret = eval {\n                alarm 3 ;\n                {\n                        $val = imapsync_version_public(  ) ;\n                        #sleep 4 ;\n                        #myprint( \"End of imapsync_version_public\\n\" ) ;\n                }\n                alarm 0 ;\n                1 ;\n        } ;\n        #myprint( \"eval [$ret]\\n\" ) ;\n        if ( ( not $ret ) or $EVAL_ERROR ) {\n                #myprint( \"$EVAL_ERROR\" ) ;\n                if ($EVAL_ERROR =~ /alarm/) {\n                # timed out\n                        return('timeout') ;\n                }else{\n                        alarm 0 ;\n                        return( 'unknown' ) ; # propagate unexpected errors\n                }\n        }else {\n        # Good!\n                return( $val ) ;\n        }\n}\n\nsub tests_not_long_imapsync_version_public\n{\n\tnote( 'Entering tests_not_long_imapsync_version_public()' ) ;\n\n\n\tis( 1, is_a_release_number( not_long_imapsync_version_public(  ) ),\n\t\t'not_long_imapsync_version_public: public release is a number' ) ;\n\n\tnote( 'Leaving  tests_not_long_imapsync_version_public()' ) ;\n\treturn ;\n}\n\nsub check_last_release\n{\n\tmy $fake = shift ;\n        my $public_release = not_long_imapsync_version_public( $fake ) ;\n        $sync->{ debug } and myprint( \"check_last_release: [$public_release]\\n\" ) ;\n        my $inline_help_when_on = '( Use --noreleasecheck to avoid this release check. )' ;\n\n        if ( $public_release eq 'unknown' ) {\n                return( 'Imapsync public release is unknown.' . $inline_help_when_on ) ;\n        }\n\n        if ( $public_release eq 'timeout' ) {\n                return( 'Imapsync public release is unknown (timeout).' . $inline_help_when_on )  ;\n        }\n\n        if ( ! is_a_release_number( $public_release ) ) {\n                return( \"Imapsync public release is unknown ($public_release).\" . $inline_help_when_on ) ;\n        }\n\n        my $imapsync_here  = imapsync_version( $sync ) ;\n\n        if ( $public_release > $imapsync_here ) {\n                return( 'This imapsync is not up to date. ' . \"( local $imapsync_here < official $public_release )\" . $inline_help_when_on ) ;\n        }else{\n                return( 'This imapsync is up to date. ' . \"( local $imapsync_here >= official $public_release )\" . $inline_help_when_on ) ;\n        }\n\n\treturn( 'really unknown' ) ; # Should never arrive here\n}\n\nsub tests_check_last_release\n{\n\tnote( 'Entering tests_check_last_release()' ) ;\n\n\tdiag( check_last_release( 1.1 ) ) ;\n        # \\Q \\E here to avoid putting \\ before each space\n\tlike( check_last_release( 1.1 ), qr/\\Qis up to date\\E/mxs, 'check_last_release: up to date' ) ;\n\tlike( check_last_release( 1.1 ), qr/1\\.1/mxs, 'check_last_release: up to date, include number' ) ;\n\tdiag( check_last_release( 999.999 ) ) ;\n\tlike( check_last_release( 999.999 ), qr/\\Qnot up to date\\E/mxs, 'check_last_release: not up to date' ) ;\n\tlike( check_last_release( 999.999 ), qr/999\\.999/mxs, 'check_last_release: not up to date, include number' ) ;\n\tlike( check_last_release( 'unknown' ), qr/\\QImapsync public release is unknown\\E/mxs,           'check_last_release: unknown' ) ;\n\tlike( check_last_release( 'timeout' ), qr/\\QImapsync public release is unknown (timeout)\\E/mxs, 'check_last_release: timeout' ) ;\n\tlike( check_last_release( 'lalala' ),  qr/\\QImapsync public release is unknown (lalala)\\E/mxs,  'check_last_release: lalala' ) ;\n\tdiag( check_last_release(  ) ) ;\n\n\tnote( 'Leaving  tests_check_last_release()' ) ;\n\treturn ;\n}\n\nsub tests_imapsync_context\n{\n        note( 'Entering tests_imapsync_context()' ) ;\n\n        like( imapsync_context(  ), qr/^CGI|^Docker|^DockerCGI|^Standard/, 'imapsync_context: CGI or Docker or DockerCGI or Standard' ) ;\n        note( 'Leaving  tests_imapsync_context()' ) ;\n        return ;\n}\n\nsub imapsync_context\n{\n        my $mysync = shift ;\n\n        my $context = q{} ;\n\n        if ( under_docker_context( $mysync ) && under_cgi_context( $mysync ) )\n        {\n                $context = 'DockerCGI' ;\n        }\n        elsif ( under_docker_context( $mysync ) )\n        {\n                $context = 'Docker' ;\n        }\n        elsif ( under_cgi_context( $mysync ) )\n        {\n                $context = 'CGI' ;\n        }\n        else\n        {\n                $context = 'Standard' ;\n        }\n\n        return $context ;\n\n}\n\nsub imapsync_version\n{\n        my $mysync = shift ;\n        my $rcs = $mysync->{rcs} ;\n        my $version ;\n\n        $version = version_from_rcs( $rcs ) ;\n        return( $version ) ;\n}\n\n\nsub tests_version_from_rcs\n{\n\tnote( 'Entering tests_version_from_rcs()' ) ;\n\n\tis( undef, version_from_rcs(  ), 'version_from_rcs: no args => undef' ) ;\n\tis( 1.831, version_from_rcs( q{imapsync,v 1.831 2017/08/27} ), 'version_from_rcs: imapsync,v 1.831 2017/08/27 => 1.831' ) ;\n\tis( 'UNKNOWN', version_from_rcs( 1.831 ), 'version_from_rcs:  1.831  => UNKNOWN' ) ;\n\n\tnote( 'Leaving  tests_version_from_rcs()' ) ;\n\treturn ;\n}\n\n\nsub version_from_rcs\n{\n\n        my $rcs = shift ;\n        if ( ! $rcs ) { return ; }\n\n        my $version = 'UNKNOWN' ;\n\n        if ( $rcs =~ m{,v\\s+(\\d+\\.\\d+)}mxso ) {\n                $version = $1\n        }\n\n        return( $version ) ;\n}\n\n\nsub tests_imapsync_basename\n{\n\tnote( 'Entering tests_imapsync_basename()' ) ;\n\n        ok( imapsync_basename() =~ m/imapsync/, 'imapsync_basename: match imapsync');\n        ok( 'blabla'   ne imapsync_basename(), 'imapsync_basename: do not equal blabla');\n\n\tnote( 'Leaving  tests_imapsync_basename()' ) ;\n        return ;\n}\n\nsub imapsync_basename\n{\n\n        return basename( $PROGRAM_NAME ) ;\n\n}\n\n\nsub localhost_info\n{\n        my $mysync = shift ;\n        my( $infos ) = join( q{},\n                \"Here is imapsync \", imapsync_version( $mysync ),\n                \" on host \" . hostname(),\n                \", a $OSNAME system with \",\n                ram_memory_info(  ),\n                \"\\n\",\n                'with Perl ',\n                mysprintf( '%vd ', $PERL_VERSION),\n                \"and Mail::IMAPClient $Mail::IMAPClient::VERSION\",\n             ) ;\n        return( $infos ) ;\n}\n\nsub tests_cpu_number\n{\n\tnote( 'Entering tests_cpu_number()' ) ;\n\n        is( 1, is_integer( cpu_number(  ) ), \"cpu_number: is_integer\" ) ;\n\tok( 1 <= cpu_number(  ), \"cpu_number: 1 or more\" ) ;\n        is( 1, cpu_number( 1 ), \"cpu_number: 1 => 1\" ) ;\n        is( 1, cpu_number( $MINUS_ONE ), \"cpu_number: -1 => 1\" ) ;\n        is( 1, cpu_number( 'lalala' ), \"cpu_number: lalala => 1\" ) ;\n        is( $NUMBER_42, cpu_number( $NUMBER_42 ), \"cpu_number: $NUMBER_42 => $NUMBER_42\" ) ;\n\n        note( \"cpu_number = \" . cpu_number(  ) . \"\\n\" ) ;\n        note( \"hostname   = \" . hostname(  ) . \"\\n\" ) ;\n        SKIP: {\n                if ( ! ( 'i005' eq hostname() ) )\n                {\n                        skip( 'cpu_number on host != i005 (FreeBSD)', 1  ) ;\n                }\n                is( 4, cpu_number(  ), \"cpu_number: on i005 (FreeBSD) => 4\" ) ;\n        } ;\n\n        SKIP: {\n                if ( ! ( 'petite' eq hostname() ) )\n                {\n                        skip( 'cpu_number on host != petite (Linux)', 1  ) ;\n                }\n                is( 2, cpu_number(  ), \"cpu_number: on petite (Linux) => 2\" ) ;\n        } ;\n\n        SKIP: {\n                if ( ! ( skip_macosx(  ) ) )\n                {\n                        skip( 'cpu_number on host != polarhome macosx (Darwin MacOS X 10.7.5 Lion)', 1  ) ;\n                }\n                is( 2, cpu_number(  ), \"cpu_number: on polarhome macosx (Darwin MacOS X 10.7.5 Lion) => 2\" ) ;\n        } ;\n\n        SKIP: {\n                if ( ! ( 'pcHPDV7-HP' eq hostname() ) )\n                {\n                        skip( 'cpu_number on host != pcHPDV7-HP (Windows 7, 64bits)', 1  ) ;\n                }\n                is( 2, cpu_number(  ), \"cpu_number: on pcHPDV7-HP (Windows 7, 64bits) => 2\" ) ;\n        } ;\n\n        SKIP: {\n                if ( ! ( 'CUILLERE' eq hostname() ) )\n                {\n                        skip( 'cpu_number on host != CUILLERE (Windows XP, 32bits)', 1  ) ;\n                }\n                is( 1, cpu_number(  ), \"cpu_number: on CUILLERE (Windows XP, 32bits) => 1\" ) ;\n        } ;\n\n\n        note( 'Leaving  tests_cpu_number()' ) ;\n\treturn ;\n}\n\n\nsub cpu_number {\n\n        my $cpu_number_forced = shift ;\n\t# Well, here 1 is better than 0 or undef\n\tmy $cpu_number = 1 ; # Default value, erased if better found\n\n        my @cpuinfo ;\n\tif ( $ENV{\"NUMBER_OF_PROCESSORS\"} )\n        {\n\t\t# might be under a Windows system\n\t\t$cpu_number = $ENV{\"NUMBER_OF_PROCESSORS\"} ;\n\t\t#myprint( \"Number of processors found by env var NUMBER_OF_PROCESSORS: $cpu_number\\n\" ) ;\n\t}\n\n        if ( 'darwin' eq $OSNAME )\n        {\n\t\t$cpu_number = backtick( \"sysctl -n hw.ncpu\" ) ;\n\t\tchomp( $cpu_number ) ;\n                #myprint( \"Number of processors found by cmd 'sysctl -n hw.ncpu': $cpu_number\\n\" ) ;\n\t}\n\n        if ( 'freebsd' eq $OSNAME )\n        {\n\t\t$cpu_number = backtick( \"sysctl -n kern.smp.cpus\" ) ;\n\t\tchomp( $cpu_number ) ;\n                #myprint( \"Number of processors found by cmd 'sysctl -n kern.smp.cpus': $cpu_number\\n\" ) ;\n\t}\n\n        if ( 'linux' eq $OSNAME && -e '/proc/cpuinfo' )\n        {\n\t\t@cpuinfo = file_to_array( '/proc/cpuinfo' ) ;\n                $cpu_number = grep { /^processor/mxs } @cpuinfo ;\n                #myprint( \"Number of processors found via /proc/cpuinfo: $cpu_number\\n\" ) ;\n\t}\n\n        if ( defined $cpu_number_forced )\n        {\n                $cpu_number = $cpu_number_forced ;\n        }\n\n\treturn( integer_or_1( $cpu_number ) ) ;\n}\n\nsub tests_integer_or_1\n{\n        note( 'Entering tests_integer_or_1()' ) ;\n\n        is( 1, integer_or_1(  ), 'integer_or_1: no args => 1' ) ;\n        is( 1, integer_or_1( undef ), 'integer_or_1: undef => 1' ) ;\n        is( $NUMBER_10, integer_or_1( $NUMBER_10 ), 'integer_or_1: 10 => 10' ) ;\n        is( 1, integer_or_1( q{} ), 'integer_or_1: empty string => 1' ) ;\n        is( 1, integer_or_1( 'lalala' ), 'integer_or_1: lalala => 1' ) ;\n\n        note( 'Leaving  tests_integer_or_1()' ) ;\n        return ;\n}\n\nsub integer_or_1\n{\n        my $number = shift ;\n        if ( is_integer( $number  ) ) {\n                return $number ;\n        }\n        # else\n        return 1 ;\n}\n\nsub tests_is_integer\n{\n\tnote( 'Entering tests_is_integer()' ) ;\n\n        is( undef, is_integer(  ), 'is_integer: no args => undef ' ) ;\n        ok( is_integer( 1 ), 'is_integer: 1 => yes ') ;\n        ok( is_integer( $NUMBER_42 ), 'is_integer: 42 => yes ') ;\n        ok( is_integer( \"$NUMBER_42\" ), 'is_integer: \"$NUMBER_42\" => yes ') ;\n        ok( is_integer( '42' ), 'is_integer: \"42\" => yes ') ;\n        ok( is_integer( $NUMBER_104_857_600 ), 'is_integer: 104_857_600 => yes') ;\n        ok( is_integer( \"$NUMBER_104_857_600\" ), 'is_integer: \"$NUMBER_104_857_600\" => yes') ;\n        ok( is_integer( '104857600' ), 'is_integer: 104857600 => yes') ;\n        ok( ! is_integer( 'blabla' ), 'is_integer: blabla => no' ) ;\n        ok( ! is_integer( q{} ), 'is_integer: empty string => no' ) ;\n\n\tnote( 'Leaving  tests_is_integer()' ) ;\n        return ;\n}\n\nsub is_integer\n{\n        my $number = shift ;\n        if ( ! defined $number ) { return ; }\n        return( $number =~ m{^\\d+$}xo ) ;\n}\n\n\n\n\nsub tests_loadavg\n{\n\tnote( 'Entering tests_loadavg()' ) ;\n\n\tSKIP: {\n\t\tskip( 'Tests for darwin', 3 ) if ('darwin' ne $OSNAME) ;\n\t\tis( undef, loadavg( '/noexist' ), 'loadavg: /noexist => undef' ) ;\n\t\tis_deeply(\n\t\t\t[ '0.11', '0.22', '0.33' ],\n\t\t\t[ loadavg( 'vm.loadavg: { 0.11 0.22 0.33 }' ) ],\n\t\t\t'loadavg:  \"vm.loadavg: { 0.11 0.22 0.33 }\" => 0.11 0.22 0.33'\n\t\t) ;\n                note( join( \" \", \"loadavg:\", loadavg(  ) ) ) ;\n\t\tis( 3, scalar( my @loadavg = loadavg(  ) ), 'loadavg: 3 values' ) ;\n\t} ;\n\n\tSKIP: {\n\t\tskip( 'Tests for linux', 3 ) if ('linux' ne $OSNAME) ;\n\t\tis( undef, loadavg( '/noexist' ), 'loadavg: /noexist => undef' ) ;\n\t\tok( loadavg( ), 'loadavg: no args' ) ;\n\n\t\tis_deeply( [ '0.39', '0.30', '0.37', '1/602' ],\n\t\t[ loadavg( '0.39 0.30 0.37 1/602 6073' ) ],\n\t\t'loadavg 0.39 0.30 0.37 1/602 6073 => [0.39, 0.30, 0.37, 1/602]' ) ;\n\t} ;\n\n\tSKIP: {\n\t\tskip( 'Tests for Windows', 1 ) if ('MSWin32' ne $OSNAME) ;\n\t\tis_deeply( [ 0 ],\n\t\t[ loadavg( ) ],\n\t\t'loadavg on MSWin32 => 0' ) ;\n\t} ;\n\n\tnote( 'Leaving  tests_loadavg()' ) ;\n\treturn ;\n}\n\n\nsub loadavg\n{\n\tif ( 'linux' eq $OSNAME ) {\n\t\treturn ( loadavg_linux( @ARG ) ) ;\n\t}\n\tif ( 'freebsd' eq $OSNAME ) {\n\t\treturn ( loadavg_freebsd( @ARG ) ) ;\n\t}\n\tif ( 'darwin' eq $OSNAME ) {\n\t\treturn ( loadavg_darwin( @ARG ) ) ;\n\t}\n\tif ( 'MSWin32' eq $OSNAME ) {\n\t\treturn ( loadavg_windows( @ARG ) ) ;\n\t}\n\treturn( 'unknown' ) ;\n}\n\nsub loadavg_linux\n{\n\tmy $line = shift ;\n\n\tif ( ! $line ) {\n                $line = firstline( '/proc/loadavg'  ) or return ;\n\t}\n\n\tmy ( $avg_1_min, $avg_5_min, $avg_15_min, $current_runs ) = split /\\s/mxs, $line ;\n\tif ( all_defined( $avg_1_min, $avg_5_min, $avg_15_min ) ) {\n\t\t$sync->{ debug } and myprint( \"System load: $avg_1_min $avg_5_min $avg_15_min $current_runs\\n\" ) ;\n\t\treturn ( $avg_1_min, $avg_5_min, $avg_15_min, $current_runs ) ;\n\t}\n\treturn ;\n}\n\nsub loadavg_freebsd\n{\n\tmy $file = shift ;\n\t# Example of output of command \"sysctl vm.loadavg\":\n\t# vm.loadavg: { 0.15 0.08 0.08 }\n\tmy $loadavg ;\n\n\tif ( ! defined $file ) {\n\t\teval {\n\t\t\t$loadavg = `/sbin/sysctl vm.loadavg` ;\n\t\t\t#myprint( \"LOADAVG FREEBSD: $loadavg\\n\" ) ;\n\t\t} ;\n\t\tif ( $EVAL_ERROR ) { myprint( \"[$EVAL_ERROR]\\n\" ) ; return ; }\n\t}else{\n\t\t$loadavg = firstline( $file ) or return ;\n\t}\n\n\tmy ( $avg_1_min, $avg_5_min, $avg_15_min )\n\t= $loadavg =~ /vm\\.loadavg\\s*[:=]\\s*\\{?\\s*(\\d+\\.?\\d*)\\s+(\\d+\\.?\\d*)\\s+(\\d+\\.?\\d*)/mxs ;\n\t$sync->{ debug } and myprint( \"System load: $avg_1_min $avg_5_min $avg_15_min\\n\" ) ;\n\treturn ( $avg_1_min, $avg_5_min, $avg_15_min ) ;\n}\n\nsub loadavg_darwin\n{\n\tmy $line = shift ;\n\t# Example of output of command \"sysctl vm.loadavg\":\n\t# vm.loadavg: { 0.15 0.08 0.08 }\n\tmy $loadavg ;\n\n\tif ( ! defined $line ) {\n\t\teval {\n\t\t\t# $loadavg = `/usr/sbin/sysctl vm.loadavg` ;\n\t\t\t$loadavg = `LANG= /usr/sbin/sysctl vm.loadavg` ;\n\t\t\t#myprint( \"LOADAVG DARWIN: $loadavg\\n\" ) ;\n\t\t} ;\n\t\tif ( $EVAL_ERROR ) { myprint( \"[$EVAL_ERROR]\\n\" ) ; return ; }\n\t}else{\n\t\t$loadavg = $line ;\n\t}\n\n\tmy ( $avg_1_min, $avg_5_min, $avg_15_min )\n\t= $loadavg =~ /vm\\.loadavg\\s*[:=]\\s*\\{?\\s*(\\d+\\.?\\d*)\\s+(\\d+\\.?\\d*)\\s+(\\d+\\.?\\d*)/mxs ;\n\t#$sync->{ debug } and myprint( \"System load: $avg_1_min $avg_5_min $avg_15_min\\n\" ) ;\n\treturn ( $avg_1_min, $avg_5_min, $avg_15_min ) ;\n}\n\nsub loadavg_windows\n{\n\tmy $file = shift ;\n\t# Example of output of command \"wmic cpu get loadpercentage\":\n\t# LoadPercentage\n        # 12\n\tmy $loadavg ;\n\n\tif ( ! defined $file ) {\n\t\teval {\n\t\t\t#$loadavg = `CMD wmic cpu get loadpercentage` ;\n\t\t\t$loadavg = \"LoadPercentage\\n0\\n\" ;\n\t\t\t#myprint( \"LOADAVG WIN: $loadavg\\n\" ) ;\n\t\t} ;\n\t\tif ( $EVAL_ERROR ) { myprint( \"[$EVAL_ERROR]\\n\" ) ; return ; }\n\t}else{\n\t\t$loadavg = file_to_string( $file ) or return ;\n\t\t#myprint( \"$loadavg\" ) ;\n\t}\n\t$loadavg =~ /LoadPercentage\\n(\\d+)/xms ;\n\tmy $num = $1 ;\n\t$num /= 100 ;\n\n\t$sync->{ debug } and myprint( \"System load: $num\\n\" ) ;\n\treturn ( $num ) ;\n}\n\n\n\n\n\n\nsub tests_load_and_delay\n{\n\tnote( 'Entering tests_load_and_delay()' ) ;\n\n\tis( undef, load_and_delay(  ), 'load_and_delay: no args => undef ' ) ;\n\tis( undef, load_and_delay( 1 ), 'load_and_delay: not 4 args => undef ' ) ;\n\tis( undef, load_and_delay( 0, 1, 1, 1 ), 'load_and_delay: division per 0 => undef ' ) ;\n\n#       ( $cpu_num, $avg_1_min, $avg_5_min, $avg_15_min )\n\n        is(  0, load_and_delay( 1, 1, 1, 1 ), 'load_and_delay: one core, loads are all 1 => ok ' ) ;\n        is(  0, load_and_delay( 1, 1, 1, 1, 'lalala' ), 'load_and_delay: five arguments is ok' ) ;\n        is(  0, load_and_delay( 2, 2, 2, 2 ), 'load_and_delay: two core, loads are all 2 => ok ' ) ;\n        is(  0, load_and_delay( 2, 2, 4, 5 ), 'load_and_delay: two core, load1m     is 2 => ok ' ) ;\n\n\n        is(  0, load_and_delay( 1, 0, 0, 0 ),       'load_and_delay: one core, load1m=0 load5m=0 load15m=0 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 0, 0, 2 ),       'load_and_delay: one core, load1m=0 load5m=0 load15m=2 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 0, 2, 0 ),       'load_and_delay: one core, load1m=0 load5m=2 load15m=0 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 0, 2, 2 ),       'load_and_delay: one core, load1m=0 load5m=2 load15m=2 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 0, 3, 3 ),       'load_and_delay: one core, load1m=0 load5m=3 load15m=3 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 0, 4, 4 ),       'load_and_delay: one core, load1m=0 load5m=3 load15m=3 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 2, 0, 0 ),       'load_and_delay: one core, load1m=2 load5m=0 load15m=0 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 2, 0, 2 ),       'load_and_delay: one core, load1m=2 load5m=0 load15m=2 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 2, 2, 0 ),       'load_and_delay: one core, load1m=2 load5m=2 load15m=0 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 2, 2, 2 ),       'load_and_delay: one core, load1m=2   load5m=2   load15m=2   => 0 ' ) ;\n        is(  0, load_and_delay( 1, 2.9, 2.9, 2.9 ), 'load_and_delay: one core, load1m=2.9 load5m=2.9 load15m=2.9 => 0 ' ) ;\n\n        is(  0, load_and_delay( 1, 3, 0, 0 ),       'load_and_delay: one core, load1m=3 load5m=0   load15m=0   => 0 ' ) ;\n        is(  0, load_and_delay( 1, 3, 2.9, 2.9 ),   'load_and_delay: one core, load1m=3 load5m=2.9 load15m=2.9 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 3, 3, 2.9 ),     'load_and_delay: one core, load1m=3 load5m=3   load15m=2.9 => 0 ' ) ;\n        is(  0, load_and_delay( 1, 3, 3, 3 ),       'load_and_delay: one core, load1m=3 load5m=3   load15m=3   => 0 ' ) ;\n\n        is(  1, load_and_delay( 1, 6, 0, 0 ),       'load_and_delay: one core, load1m=3 load5m=0   load15m=0   => 1 ' ) ;\n        is(  1, load_and_delay( 1, 6, 5.9, 5.9 ),   'load_and_delay: one core, load1m=3 load5m=2.9 load15m=2.9 => 1 ' ) ;\n        is(  5, load_and_delay( 1, 6, 6, 5.9 ),     'load_and_delay: one core, load1m=3 load5m=3   load15m=2.9 => 5 ' ) ;\n        is(  15, load_and_delay( 1, 6, 6, 6 ),      'load_and_delay: one core, load1m=3 load5m=3   load15m=3 => 15 ' ) ;\n\n\n\n        note( 'Leaving  tests_load_and_delay()' ) ;\n        return ;\n}\n\nsub load_and_delay\n{\n\t# Basically return 0 if load is not heavy, ie <= 1 per processor\n\n        # Not enough arguments\n\tif ( 4 > scalar @ARG ) { return ; }\n\n\tmy ( $cpu_num, $avg_1_min, $avg_5_min, $avg_15_min ) = @ARG ;\n\n\tif ( 0 == $cpu_num ) { return ; }\n\n\t# Let divide by number of cores\n\t( $avg_1_min, $avg_5_min, $avg_15_min ) = map { $_ / $cpu_num } ( $avg_1_min, $avg_5_min, $avg_15_min ) ;\n\t# One of avg ok => ok, for now it is a OR\n\tif ( $avg_1_min < 6 ) { return 0 ; }\n\tif ( $avg_5_min < 6 ) { return 1 ; } # Retry in 1 minute\n\tif ( $avg_15_min < 6 ) { return 5 ; } # Retry in 5 minutes\n\treturn 15 ; # Retry in 15 minutes\n}\n\n\nsub tests_cpu_time\n{\n        note( 'Entering tests_cpu_time()' ) ;\n\n        ok( is_number( cpu_time(  ) ),  'cpu_time: no args => a number' ) ;\n\n        my $mysync = {  } ;\n        $mysync->{ debug } = 1 ;\n        ok( is_number( cpu_time( $mysync ) ),  'cpu_time: {} => a number' ) ;\n\n        note( 'Leaving  tests_cpu_time()' ) ;\n        return ;\n}\n\nsub cpu_time\n{\n        my $mysync = shift ;\n\n        my @cpu_times = times ;\n        if ( ! @cpu_times ) { return ; }\n\n        my $cpu_time = 0 ;\n        # last element is the sum of all elements\n        $cpu_time = ( map { $cpu_time += $_ } @cpu_times )[ -1 ] ;\n        my $cpu_time_round = mysprintf( '%.2f', $cpu_time ) ;\n        $mysync->{ debug } and myprint( join(' + ', @cpu_times), \" = $cpu_time ~ $cpu_time_round\\n\" ) ;\n        return $cpu_time ;\n}\n\n\nsub tests_cpu_percent\n{\n        note( 'Entering tests_cpu_percent()' ) ;\n\n        is( '0.0',  cpu_percent(  ),  'cpu_percent: no args => 0.0' ) ;\n        my $mysync = {  } ;\n        $mysync->{ debug } = 1 ;\n        is( '0.0', cpu_percent( $mysync ),   'cpu_percent: {} => 0.0' ) ;\n        is( '0.0', cpu_percent( $mysync, 0 ),     'cpu_percent: {} 0 => 0.0' ) ;\n        is( '300.0', cpu_percent( $mysync, 3 ),     'cpu_percent: {} 3 => 300.0' ) ;\n        is( '30.0', cpu_percent( $mysync, 3, 10 ), 'cpu_percent: {} 3 10 => 30.0' ) ;\n        is( '0.0', cpu_percent( $mysync, 0, 10 ), 'cpu_percent: {} 0 10 => 0.0' ) ;\n\n        note( 'Leaving  tests_cpu_percent()' ) ;\n        return ;\n}\n\nsub cpu_percent\n{\n        my $mysync   = shift ;\n        my $cpu_time = shift || 0 ;\n        my $timediff = shift || 1 ; # no division by 0\n\n        if ( $cpu_time > $timediff )\n        {\n                myprint( \"Strange: cpu_time $cpu_time > timediff $timediff\\n\" ) ;\n        }\n        my $cpu_percent = 0 ;\n        $cpu_percent = mysprintf( '%.1f', 100 * $cpu_time / $timediff ) ;\n        $mysync->{ debug } and myprint( \"cpu_percent: $cpu_percent \\n\" ) ;\n\n        return $cpu_percent ;\n\n}\n\nsub tests_cpu_percent_global\n{\n        note( 'Entering tests_cpu_percent_global()' ) ;\n\n        is( '0.0',  cpu_percent_global(  ),  'cpu_percent_global: no args => 0' ) ;\n        my $mysync = {  } ;\n        $mysync->{ debug } = 1 ;\n        is( '0.0',  cpu_percent_global( $mysync      ),     'cpu_percent_global: {} => 0' ) ;\n        is( '0.0',  cpu_percent_global( $mysync,   0 ),  'cpu_percent_global: {} 0 => 0' ) ;\n\n        SKIP: {\n                if ( ! ( 'i005' eq hostname() ) )\n                {\n                        skip( 'cpu_percent_global on host != i005', 1  ) ;\n                }\n                is( '25.0', cpu_percent_global( $mysync, 100 ), 'cpu_percent_global: {} 100 => 25 on host i005' ) ;\n        } ;\n\n        SKIP: {\n                if ( ! ( 'petite' eq hostname() ) )\n                {\n                        skip( 'cpu_percent_global on host != petite', 1  ) ;\n                }\n                is( '50.0', cpu_percent_global( $mysync, 100 ), 'cpu_percent_global: {} 100 => 50 on host petite' ) ;\n        } ;\n\n        note( 'Leaving  tests_cpu_percent_global()' ) ;\n        return ;\n}\n\nsub cpu_percent_global\n{\n        my $mysync      = shift ;\n        my $cpu_percent = shift || 0 ;\n\n        my $cpu_number = cpu_number(  ) ;\n\n        my $cpu_percent_global ;\n        $cpu_percent_global = mysprintf( '%.1f', $cpu_percent / $cpu_number ) ;\n        $mysync->{ debug } and myprint( \"cpu_percent_global: $cpu_percent_global \\n\" ) ;\n\n        return( $cpu_percent_global ) ;\n}\n\n\nsub ram_memory_info\n{\n        # In GigaBytes so division by 1024 * 1024 * 1024\n\t#\n\treturn(\n\t\tsprintf( \"%.1f/%.1f free GiB of RAM\",\n                Sys::MemInfo::get(\"freemem\") / ( $KIBI ** 3 ),\n                Sys::MemInfo::get(\"totalmem\") / ( $KIBI ** 3 ),\n                )\n\t) ;\n}\n\n\n\nsub tests_memory_stress\n{\n        note( 'Entering tests_memory_stress()' ) ;\n\n        is( undef, memory_stress(  ), 'memory_stress: => undef' ) ;\n\n        note( 'Leaving  tests_memory_stress()' ) ;\n        return ;\n}\n\nsub memory_stress\n{\n        my $total_ram_in_MB = Sys::MemInfo::get(\"totalmem\") / ( $KIBI * $KIBI ) ;\n        my $i = 1 ;\n\n        myprintf(\"Stress memory consumption before: %.1f MiB\\n\", memory_consumption(  ) / $KIBI / $KIBI ) ;\n        while ( $i < $total_ram_in_MB / 1.7 ) { $a .= \"A\" x 1000_000; $i++ } ;\n        myprintf(\"Stress memory consumption after: %.1f MiB\\n\", memory_consumption(  ) / $KIBI / $KIBI ) ;\n        return ;\n}\n\nsub tests_memory_consumption\n{\n\tnote( 'Entering tests_memory_consumption()' ) ;\n\n        note(  \"memory_consumption: \" . memory_consumption() . \" bytes aka \" . bytes_display_string_dec( memory_consumption() ) ) ;\n        like( memory_consumption(  ),  qr{\\d+}xms,'memory_consumption no args') ;\n        like( memory_consumption( 1 ), qr{\\d+}xms,'memory_consumption 1') ;\n        like( memory_consumption( $PROCESS_ID ), qr{\\d+}xms,\"memory_consumption_of_pids $PROCESS_ID\") ;\n\n        like( memory_consumption_ratio(), qr{\\d+}xms,   'memory_consumption_ratio' ) ;\n        like( memory_consumption_ratio(1), qr{\\d+}xms,  'memory_consumption_ratio 1' ) ;\n        like( memory_consumption_ratio(10), qr{\\d+}xms, 'memory_consumption_ratio 10' ) ;\n\n\n\tnote( 'Leaving  tests_memory_consumption()' ) ;\n        return ;\n}\n\nsub memory_consumption\n{\n        # memory consumed by imapsync until now in bytes\n        return( ( memory_consumption_of_pids(  ) )[0] );\n}\n\nsub debugmemory\n{\n        my $mysync = shift ;\n        if ( ! $mysync->{debugmemory} ) { return q{} ; }\n\n        my $precision = shift ;\n        return( mysprintf( \"Memory consumption$precision: %.1f MiB\\n\", memory_consumption(  ) / $KIBI / $KIBI ) ) ;\n}\n\nsub memory_consumption_of_pids\n{\n\n        my @pid = @_;\n        @pid = ( @pid ) ? @pid : ( $PROCESS_ID ) ;\n\n        $sync->{ debug } and myprint( \"memory_consumption_of_pids PIDs: @pid\\n\" ) ;\n        my @val ;\n        if ( ( 'MSWin32' eq $OSNAME ) or ( 'cygwin' eq $OSNAME ) ) {\n                @val = memory_consumption_of_pids_win32( @pid ) ;\n        }\n        elsif ( 'darwin' eq $OSNAME )\n        {\n                @val = memory_consumption_of_pids_mac( @pid ) ;\n        }\n        else\n        {\n                # Unix\n                my @ps = qx{ ps -o vsz -p @pid } ;\n                shift @ps ; # First line is column name \"VSZ\"\n                chomp @ps ;\n                # convert to octets\n\n                @val = map { $_ * $KIBI } @ps ;\n        }\n        return( @val ) ;\n}\n\n\nsub memory_consumption_of_pids_mac\n{\n        my @pid = @_ ;\n        # Use IPC::Open3 from perlcrit -3\n        # But it stalls on Darwin, I don't understand why!\n        #my @ps = backtick( \"ps -o rss -p @pid\" ) ;\n        #myprint( \"ps: @ps\" ) ;\n        my @ps = qx{ ps -o rss -p @pid } ;\n        shift @ps ; # First line is column name \"RSS\"\n        chomp @ps ;\n        my @val = map { $_ * $KIBI } @ps ;\n        return( @val ) ;\n}\n\nsub memory_consumption_of_pids_win32\n{\n        # Windows\n        my @PID = @_;\n        my %PID;\n        # hash of pids as key values\n        map { $PID{$_}++ } @PID;\n\n        # Does not work but should work reading the tasklist documentation\n        #@ps = qx{ tasklist /FI \"PID eq @PID\" };\n\n        my @ps = qx{ tasklist /NH /FO CSV } ;\n        #my @ps = backtick( 'tasklist /NH /FO CSV' ) ;\n        #myprint( \"-\" x $STD_CHAR_PER_LINE, \"\\n\", @ps, \"-\" x $STD_CHAR_PER_LINE, \"\\n\" ) ;\n        my @val;\n        foreach my $line (@ps) {\n                my($name, $pid, $mem) = (split ',', $line )[0,1,4];\n                next if (! $pid);\n                #myprint( \"[$name][$pid][$mem]\" ) ;\n                if ($PID{remove_qq($pid)}) {\n                        #myprint( \"MATCH !\\n\" ) ;\n                        chomp $mem ;\n                        $mem = remove_qq($mem);\n                        $mem = remove_Ko($mem);\n                        $mem = remove_not_num($mem);\n                        #myprint( \"[$mem]\\n\" ) ;\n                        push @val, $mem * $KIBI;\n                }\n        }\n        return(@val);\n}\n\n\nsub tests_backtick\n{\n\tnote( 'Entering tests_backtick()' ) ;\n\n\tis( undef, backtick( ), 'backtick: no args' ) ;\n\tis( undef, backtick( q{} ), 'backtick: empty command' ) ;\n\n        SKIP: {\n                skip( 'test for MSWin32', 5 ) if ('MSWin32' ne $OSNAME) ;\n                my @output ;\n                @output = backtick( 'echo Hello World!' ) ;\n                # Add \\r on Windows.\n                ok( \"Hello World!\\r\\n\" eq $output[0], 'backtick: echo Hello World!' ) ;\n                $sync->{ debug } and myprint( \"[@output]\" ) ;\n                @output = backtick( 'echo Hello & echo World!' ) ;\n                ok( \"Hello \\r\\n\" eq $output[0], 'backtick: echo Hello & echo World! line 1' ) ;\n                ok( \"World!\\r\\n\" eq $output[1], 'backtick: echo Hello & echo World! line 2' ) ;\n                $sync->{ debug } and myprint( \"[@output][$output[0]][$output[1]]\" ) ;\n\t\t# Scalar context\n\t\tok( \"Hello World!\\r\\n\" eq backtick( 'echo Hello World!' ),\n\t\t'backtick: echo Hello World! scalar' ) ;\n\t\tok( \"Hello \\r\\nWorld!\\r\\n\" eq backtick( 'echo Hello & echo World!' ),\n\t\t'backtick: echo Hello & echo World! scalar 2 lines' ) ;\n        } ;\n        SKIP: {\n                skip( 'test for Unix', 7 ) if ('MSWin32' eq $OSNAME) ;\n\t\tis( undef, backtick( 'aaaarrrg' ), 'backtick: aaaarrrg command not found' ) ;\n\t\t# Array context\n                my @output ;\n                @output = backtick( 'echo Hello World!' ) ;\n                ok( \"Hello World!\\n\" eq $output[0], 'backtick: echo Hello World!' ) ;\n                $sync->{ debug } and myprint( \"[@output]\" ) ;\n                @output = backtick( \"echo Hello\\necho World!\" ) ;\n                ok( \"Hello\\n\" eq $output[0], 'backtick: echo Hello; echo World! line 1' ) ;\n                ok( \"World!\\n\" eq $output[1], 'backtick: echo Hello; echo World! line 2' ) ;\n                $sync->{ debug } and myprint( \"[@output]\" ) ;\n\t\t# Scalar context\n\t\tok( \"Hello World!\\n\" eq backtick( 'echo Hello World!' ),\n\t\t'backtick: echo Hello World! scalar' ) ;\n\t\tok( \"Hello\\nWorld!\\n\" eq backtick( \"echo Hello\\necho World!\" ),\n\t\t'backtick: echo Hello; echo World! scalar 2 lines' ) ;\n\t\t# Return error positive value, that's ok\n\t\tis( undef, backtick( 'false' ), 'backtick: false returns no output' ) ;\n                my $mem = backtick( \"ps -o vsz -p $PROCESS_ID\" ) ;\n                $sync->{ debug } and myprint( \"MEM=$mem\\n\" ) ;\n\n        }\n\n\tnote( 'Leaving  tests_backtick()' ) ;\n        return ;\n}\n\n\nsub backtick\n{\n        my $command = shift ;\n\n\tif ( ! $command ) { return ; }\n\n        my ( $writer, $reader, $err ) ;\n        my @output ;\n        my $pid ;\n\tmy $eval = eval {\n\t\t$pid = IPC::Open3::open3( $writer, $reader, $err, $command ) ;\n\t} ;\n        if ( $EVAL_ERROR  ) {\n                myprint( $EVAL_ERROR ) ;\n                return ;\n        }\n        if ( ! $eval  ) { return ; }\n\tif ( ! $pid  )  { return ; }\n\twaitpid( $pid, 0 ) ;\n        @output = <$reader>;  # Output here\n\t#\n        #my @errors = <$err>;    #Errors here, instead of the console\n\tif ( not @output ) { return ; }\n        #myprint( @output  ) ;\n\n\tif ( $output[0] =~ /\\Qopen3: exec of $command failed\\E/mxs ) { return ; }\n\tif ( wantarray ) {\n\t\treturn( @output ) ;\n\t} else {\n\t\treturn( join( q{}, @output) ) ;\n\t}\n}\n\n\n\nsub tests_check_binary_embed_all_dyn_libs\n{\n        note( 'Entering tests_check_binary_embed_all_dyn_libs()' ) ;\n\n        is( 1, check_binary_embed_all_dyn_libs(  ),  'check_binary_embed_all_dyn_libs: no args => 1' ) ;\n\n        note( 'Leaving  tests_check_binary_embed_all_dyn_libs()' ) ;\n\n        return ;\n}\n\n\nsub check_binary_embed_all_dyn_libs\n{\n        my @search_dyn_lib_locale = search_dyn_lib_locale(  ) ;\n\n        if ( @search_dyn_lib_locale )\n        {\n                myprint( \"Found myself $PROGRAM_NAME pid $PROCESS_ID using locale dynamic libraries that seems out of myself:\\n\" ) ;\n                myprint( @search_dyn_lib_locale ) ;\n                if ( $PROGRAM_NAME =~ m{imapsync_bin_Darwin} )\n                {\n                        return 0 ;\n                }\n                elsif ( $PROGRAM_NAME =~ m{imapsync.*\\.exe} )\n                {\n                        return 0 ;\n                }\n                else\n                {\n                        # is always ok for non binary\n                        return 1 ;\n                }\n        }\n        else\n        {\n                # Found only embedded dynamic lib\n                myprint( \"Found only embedded dynamic lib. Good!\\n\" ) ;\n                return 1 ;\n        }\n}\n\nsub search_dyn_lib_locale\n{\n        if ( 'darwin' eq $OSNAME )\n        {\n                return search_dyn_lib_locale_darwin(  ) ;\n        }\n        if ( 'linux' eq $OSNAME )\n        {\n                return search_dyn_lib_locale_linux(  ) ;\n        }\n        if ( 'MSWin32' eq $OSNAME )\n        {\n                return search_dyn_lib_locale_MSWin32(  ) ;\n        }\n\n}\n\nsub search_dyn_lib_locale_darwin\n{\n        my $command = qq{ lsof -p $PROCESS_ID | grep ' REG ' | grep .dylib | grep -v '/par-' } ;\n        myprint( \"Search non embeded dynamic libs with the command: $command\\n\" ) ;\n        return backtick( $command ) ;\n}\n\nsub search_dyn_lib_locale_linux\n{\n        my $command = qq{ lsof -p $PROCESS_ID | grep ' REG ' | grep -v '/tmp/par-' | grep '\\.so' } ;\n        myprint( \"Search non embeded dynamic libs with the command: $command\\n\" ) ;\n        return backtick( $command ) ;\n}\n\nsub search_dyn_lib_locale_MSWin32\n{\n        my $command = qq{ Listdlls.exe $PROCESS_ID|findstr Strawberry } ;\n        # $command = qq{ Listdlls.exe $PROCESS_ID|findstr Strawberry } ;\n        myprint( \"Search non embeded dynamic libs with the command: $command\\n\" ) ;\n        return qx( $command ) ;\n}\n\n\n\nsub remove_not_num\n{\n\n        my $string = shift ;\n        $string =~ tr/0-9//cd ;\n        #myprint( \"tr [$string]\\n\" ) ;\n        return( $string ) ;\n}\n\nsub tests_remove_not_num\n{\n\tnote( 'Entering tests_remove_not_num()' ) ;\n\n        ok( '123' eq remove_not_num( 123 ), 'remove_not_num( 123 )' ) ;\n        ok( '123' eq remove_not_num( '123' ), q{remove_not_num( '123' )} ) ;\n        ok( '123' eq remove_not_num( '12 3' ), q{remove_not_num( '12 3' )} ) ;\n        ok( '123' eq remove_not_num( 'a 12 3 Ko' ), q{remove_not_num( 'a 12 3 Ko' )} ) ;\n\n\tnote( 'Leaving  tests_remove_not_num()' ) ;\n        return ;\n}\n\nsub remove_Ko\n{\n        my $string = shift;\n        if ($string =~ /^(.*)\\sKo$/xo) {\n                return($1);\n        }else{\n                return($string);\n        }\n}\n\nsub remove_qq\n{\n        my $string = shift;\n        if ($string =~ /^\"(.*)\"$/xo) {\n                return($1);\n        }else{\n                return($string);\n        }\n}\n\nsub memory_consumption_ratio\n{\n\n        my ($base) = @_;\n        $base ||= 1;\n        my $consu = memory_consumption();\n        return($consu / $base);\n}\n\n\nsub date_from_rcs\n{\n        my $d = shift ;\n\n        my %num2mon = qw( 01 Jan 02 Feb 03 Mar 04 Apr 05 May 06 Jun 07 Jul 08 Aug 09 Sep 10 Oct 11 Nov 12 Dec ) ;\n        if ($d =~ m{(\\d{4})/(\\d{2})/(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})}xo ) {\n                # Handles the following format\n                # 2015/07/10 11:05:59 -- Generated by RCS Date tag.\n                #myprint( \"$d\\n\" ) ;\n                #myprint( \"header: [$1][$2][$3][$4][$5][$6]\\n\" ) ;\n                my ($year, $month, $day, $hour, $min, $sec) = ($1,$2,$3,$4,$5,$6) ;\n                $month = $num2mon{$month} ;\n                $d = \"$day-$month-$year $hour:$min:$sec +0000\" ;\n                #myprint( \"$d\\n\" ) ;\n        }\n        return( $d ) ;\n}\n\nsub tests_date_from_rcs\n{\n\tnote( 'Entering tests_date_from_rcs()' ) ;\n\n        ok('19-Sep-2015 16:11:07 +0000'\n        eq date_from_rcs('Date: 2015/09/19 16:11:07 '), 'date_from_rcs from RCS date' ) ;\n\n\tnote( 'Leaving  tests_date_from_rcs()' ) ;\n        return ;\n}\n\nsub good_date\n{\n        # two incoming formats:\n        # header    Tue, 24 Aug 2010 16:00:00 +0200\n        # internal       24-Aug-2010 16:00:00 +0200\n\n        # outgoing format: internal date format\n        #   24-Aug-2010 16:00:00 +0200\n\n    my $d = shift ;\n    return(q{}) if not defined $d;\n\n        SWITCH: {\n        if ( $d =~ m{(\\d?)(\\d-...-\\d{4})(\\s\\d{2}:\\d{2}:\\d{2})(\\s(?:\\+|-)\\d{4})?}xo ) {\n                #myprint( \"internal: [$1][$2][$3][$4]\\n\" ) ;\n                my ($day_1, $date_rest, $hour, $zone) = ($1,$2,$3,$4) ;\n                $day_1 = '0' if ($day_1 eq q{}) ;\n                $zone  = ' +0000'  if not defined $zone ;\n                $d = $day_1 . $date_rest . $hour . $zone ;\n                last SWITCH ;\n        }\n\n        if ($d =~ m{(?:\\w{3,},\\s)?(\\d{1,2}),?\\s+(\\w{3,})\\s+(\\d{2,4})\\s+(\\d{1,2})(?::|\\.)(\\d{1,2})(?:(?::|\\.)(\\d{1,2}))?\\s*((?:\\+|-)\\d{4})?}xo ) {\n                # Handles any combination of following formats\n                # Tue, 24 Aug 2010 16:00:00 +0200 -- Standard\n                # 24 Aug 2010 16:00:00 +0200 -- Missing Day of Week\n                # Tue, 24 Aug 97 16:00:00 +0200 -- Two digit year\n                # Tue, 24 Aug 1997 16.00.00 +0200 -- Periods instead of colons\n                # Tue, 24 Aug 1997  16:00:00 +0200 -- Extra whitespace between year and hour\n                # Tue, 24 Aug 1997 6:5:2 +0200 -- Single digit hour, min, or second\n                # Tue, 24, Aug 1997 16:00:00 +0200 -- Extra comma\n\n                #myprint( \"header: [$1][$2][$3][$4][$5][$6][$7][$8]\\n\" ) ;\n                my ($day, $month, $year, $hour, $min, $sec, $zone) = ($1,$2,$3,$4,$5,$6,$7,$8);\n                $year = '19' . $year if length($year) == 2 && $year =~ m/^[789]/xo;\n                $year = '20' . $year if length($year) == 2;\n\n                $month = substr $month, 0, 3 if length($month) > 4;\n                $day  = mysprintf( '%02d', $day);\n                $hour = mysprintf( '%02d', $hour);\n                $min  = mysprintf( '%02d', $min);\n                $sec  = '00' if not defined  $sec  ;\n                $sec  = mysprintf( '%02d', $sec ) ;\n                $zone = '+0000' if not defined  $zone  ;\n                $d    = \"$day-$month-$year $hour:$min:$sec $zone\" ;\n                last SWITCH ;\n        }\n\n        if ($d =~ m{(?:.{3})\\s(...)\\s+(\\d{1,2})\\s(\\d{1,2}):(\\d{1,2}):(\\d{1,2})\\s(?:\\w{3})?\\s?(\\d{4})}xo ) {\n                # Handles any combination of following formats\n                # Sun Aug 20 11:55:09 2006\n                # Wed Jan 24 11:58:38 MST 2007\n                # Wed Jan  2 08:40:57 2008\n\n                #myprint( \"header: [$1][$2][$3][$4][$5][$6]\\n\" ) ;\n                my ($month, $day, $hour, $min, $sec, $year) = ($1,$2,$3,$4,$5,$6);\n                $day  = mysprintf( '%02d', $day  ) ;\n                $hour = mysprintf( '%02d', $hour ) ;\n                $min  = mysprintf( '%02d', $min  ) ;\n                $sec  = mysprintf( '%02d', $sec  ) ;\n                $d    = \"$day-$month-$year $hour:$min:$sec +0000\" ;\n                last SWITCH ;\n        }\n        my %num2mon = qw( 01 Jan 02 Feb 03 Mar 04 Apr 05 May 06 Jun 07 Jul 08 Aug 09 Sep 10 Oct 11 Nov 12 Dec ) ;\n\n        if ($d =~ m{(\\d{4})/(\\d{2})/(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})}xo ) {\n                # Handles the following format\n                # 2015/07/10 11:05:59 -- Generated by RCS Date tag.\n                #myprint( \"$d\\n\" ) ;\n                #myprint( \"header: [$1][$2][$3][$4][$5][$6]\\n\" ) ;\n                my ($year, $month, $day, $hour, $min, $sec) = ($1,$2,$3,$4,$5,$6) ;\n                $month = $num2mon{$month} ;\n                $d = \"$day-$month-$year $hour:$min:$sec +0000\" ;\n                #myprint( \"$d\\n\" ) ;\n                last SWITCH ;\n        }\n\n        if ($d =~ m{(\\d{2})/(\\d{2})/(\\d{2})\\s(\\d{2}):(\\d{2}):(\\d{2})}xo ) {\n                # Handles the following format\n                # 02/06/09 22:18:08 -- Generated by AVTECH TemPageR devices\n\n                #myprint( \"header: [$1][$2][$3][$4][$5][$6]\\n\" ) ;\n                my ($month, $day, $year, $hour, $min, $sec) = ($1,$2,$3,$4,$5,$6);\n                $year = '20' . $year;\n                $month = $num2mon{$month};\n                $d = \"$day-$month-$year $hour:$min:$sec +0000\";\n                last SWITCH ;\n        }\n\n        if ($d =~ m{\\w{6,},\\s(\\w{3})\\w+\\s+(\\d{1,2}),\\s(\\d{4})\\s(\\d{2}):(\\d{2})\\s(AM|PM)}xo ) {\n                # Handles the following format\n                # Saturday, December 14, 2002 05:00 PM - KBtoys.com order confirmations\n\n                my ($month, $day, $year, $hour, $min, $apm) = ($1,$2,$3,$4,$5,$6);\n\n                $hour += 12 if $apm eq 'PM' ;\n                $day = mysprintf( '%02d', $day ) ;\n                $d = \"$day-$month-$year $hour:$min:00 +0000\" ;\n                last SWITCH ;\n        }\n\n        if ($d =~ m{(\\w{3})\\s(\\d{1,2})\\s(\\d{4})\\s(\\d{2}):(\\d{2}):(\\d{2})\\s((?:\\+|-)\\d{4})}xo ) {\n                # Handles the following format\n                # Saturday, December 14, 2002 05:00 PM - jr.com order confirmations\n\n                my ($month, $day, $year, $hour, $min, $sec, $zone) = ($1,$2,$3,$4,$5,$6,$7);\n\n                $day = mysprintf( '%02d', $day ) ;\n                $d = \"$day-$month-$year $hour:$min:$sec $zone\";\n                last SWITCH ;\n        }\n\n        if ($d =~ m{(\\d{1,2})-(\\w{3})-(\\d{4})}xo ) {\n                # Handles the following format\n                # 21-Jun-2001 - register.com domain transfer email circa 2001\n\n                my ($day, $month, $year) = ($1,$2,$3);\n                $day = mysprintf( '%02d', $day);\n                $d = \"$day-$month-$year 11:11:11 +0000\";\n                last SWITCH ;\n        }\n\n        # unknown or unmatch => return same string\n        return($d);\n    }\n\n    $d = qq(\"$d\") ;\n    return( $d ) ;\n}\n\n\nsub tests_good_date\n{\n\tnote( 'Entering tests_good_date()' ) ;\n\n        ok(q{} eq good_date(), 'good_date no arg');\n        ok('\"24-Aug-2010 16:00:00 +0200\"' eq good_date('24-Aug-2010 16:00:00 +0200'), 'good_date internal 2digit zone');\n        ok('\"24-Aug-2010 16:00:00 +0000\"' eq good_date('24-Aug-2010 16:00:00'), 'good_date internal 2digit no zone');\n        ok('\"01-Sep-2010 16:00:00 +0200\"' eq good_date( '1-Sep-2010 16:00:00 +0200'), 'good_date internal SP 1digit');\n        ok('\"24-Aug-2010 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 2010 16:00:00 +0200'), 'good_date header 2digit zone');\n        ok('\"01-Sep-2010 16:00:00 +0000\"' eq good_date('Wed, 1 Sep 2010 16:00:00'), 'good_date header SP 1digit zone');\n        ok('\"01-Sep-2010 16:00:00 +0200\"' eq good_date('Wed, 1 Sep 2010 16:00:00 +0200'), 'good_date header SP 1digit zone');\n        ok('\"01-Sep-2010 16:00:00 +0200\"' eq good_date('Wed, 1 Sep 2010 16:00:00 +0200 (CEST)'), 'good_date header SP 1digit zone');\n        ok('\"06-Feb-2009 22:18:08 +0000\"' eq good_date('02/06/09 22:18:08'), 'good_date header TemPageR');\n        ok('\"02-Jan-2008 08:40:57 +0000\"' eq good_date('Wed Jan  2 08:40:57 2008'), 'good_date header dice.com support 1digit day');\n        ok('\"20-Aug-2006 11:55:09 +0000\"' eq good_date('Sun Aug 20 11:55:09 2006'), 'good_date header dice.com support 2digit day');\n        ok('\"24-Jan-2007 11:58:38 +0000\"' eq good_date('Wed Jan 24 11:58:38 MST 2007'), 'good_date header status-now.com');\n        ok('\"24-Aug-2010 16:00:00 +0200\"' eq good_date('24 Aug 2010 16:00:00 +0200'), 'good_date header missing date of week');\n        ok('\"24-Aug-2067 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 67 16:00:00 +0200'), 'good_date header 2digit year');\n        ok('\"24-Aug-1977 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 77 16:00:00 +0200'), 'good_date header 2digit year');\n        ok('\"24-Aug-1987 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 87 16:00:00 +0200'), 'good_date header 2digit year');\n        ok('\"24-Aug-1997 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 97 16:00:00 +0200'), 'good_date header 2digit year');\n        ok('\"24-Aug-2004 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 04 16:00:00 +0200'), 'good_date header 2digit year');\n        ok('\"24-Aug-1997 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 1997 16.00.00 +0200'), 'good_date header period time sep');\n        ok('\"24-Aug-1997 16:00:00 +0200\"' eq good_date('Tue, 24 Aug 1997 16:00:00 +0200'), 'good_date header extra white space type1');\n        ok('\"24-Aug-1997 05:06:02 +0200\"' eq good_date('Tue, 24 Aug 1997 5:6:2 +0200'), 'good_date header 1digit time vals');\n        ok('\"24-Aug-1997 05:06:02 +0200\"' eq good_date('Tue, 24, Aug 1997 05:06:02 +0200'), 'good_date header extra commas');\n        ok('\"01-Oct-2003 12:45:24 +0000\"' eq good_date('Wednesday, 01 October 2003 12:45:24 CDT'), 'good_date header no abbrev');\n        ok('\"11-Jan-2005 17:58:27 -0500\"' eq good_date('Tue,  11 Jan 2005 17:58:27 -0500'), 'good_date extra white space');\n        ok('\"18-Dec-2002 15:07:00 +0000\"' eq good_date('Wednesday, December 18, 2002 03:07 PM'), 'good_date kbtoys.com orders');\n        ok('\"16-Dec-2004 02:01:49 -0500\"' eq good_date('Dec 16 2004 02:01:49 -0500'), 'good_date jr.com orders');\n        ok('\"21-Jun-2001 11:11:11 +0000\"' eq good_date('21-Jun-2001'), 'good_date register.com domain transfer');\n        ok('\"18-Nov-2012 18:34:38 +0100\"' eq good_date('Sun, 18 Nov 2012 18:34:38 +0100'), 'good_date pop2imap bug (WesteuropÃ¤ische Normalzeit)');\n        ok('\"19-Sep-2015 16:11:07 +0000\"' eq good_date('Date: 2015/09/19 16:11:07 '), 'good_date from RCS date' ) ;\n\n\tnote( 'Leaving  tests_good_date()' ) ;\n        return ;\n}\n\n\nsub tests_list_keys_in_2_not_in_1\n{\n\tnote( 'Entering tests_list_keys_in_2_not_in_1()' ) ;\n\n\n        my @list;\n        ok( ! list_keys_in_2_not_in_1( {}, {}), 'list_keys_in_2_not_in_1: {} {}');\n        ok( 0 == compare_lists( [], [ list_keys_in_2_not_in_1( {}, {} ) ] ), 'list_keys_in_2_not_in_1: {} {}');\n        ok( 0 == compare_lists( ['a','b'], [ list_keys_in_2_not_in_1( {}, {'a' => 1, 'b' => 1}) ]), 'list_keys_in_2_not_in_1: {} {a, b}');\n        ok( 0 == compare_lists( ['b'],     [ list_keys_in_2_not_in_1( {'a' => 1}, {'a' => 1, 'b' => 1}) ]), 'list_keys_in_2_not_in_1: {a} {a, b}');\n        ok( 0 == compare_lists( [],        [ list_keys_in_2_not_in_1( {'a' => 1, 'b' => 1}, {'a' => 1, 'b' => 1}) ]), 'list_keys_in_2_not_in_1: {a, b} {a, b}');\n        ok( 0 == compare_lists( [],        [ list_keys_in_2_not_in_1( {'a' => 1, 'b' => 1, 'c' => 1}, {'a' => 1, 'b' => 1}) ]), 'list_keys_in_2_not_in_1: {a, b, c} {a, b}');\n        ok( 0 == compare_lists( ['b'],     [ list_keys_in_2_not_in_1( {'a' => 1, 'c' => 1}, {'a' => 1, 'b' => 1}) ]), 'list_keys_in_2_not_in_1: {a, b, c} {a, b}');\n\n\tnote( 'Leaving  tests_list_keys_in_2_not_in_1()' ) ;\n        return ;\n}\n\nsub list_keys_in_2_not_in_1\n{\n        my $hash_1_ref = shift;\n        my $hash_2_ref = shift;\n        my @list;\n\n        foreach my $key ( sort keys %{ $hash_2_ref } ) {\n                #$sync->{ debug } and print \"$key\\n\" ;\n                if ( exists $hash_1_ref->{$key} )\n                {\n                        next ;\n                }\n                #$sync->{ debug } and print \"list_keys_in_2_not_in_1: $key\\n\" ;\n                push @list, $key ;\n        }\n        #$sync->{ debug } and print \"@list\\n\" ;\n        return( @list ) ;\n}\n\n\nsub list_folders_in_2_not_in_1\n{\n\n        my ( @h2_folders_not_in_h1, %h2_folders_not_in_h1 ) ;\n        @h2_folders_not_in_h1 = list_keys_in_2_not_in_1( \\%h1_folders_all, \\%h2_folders_all ) ;\n        map { $h2_folders_not_in_h1{$_} = 1} @h2_folders_not_in_h1 ;\n        @h2_folders_not_in_h1 = list_keys_in_2_not_in_1( \\%h2_folders_from_1_all, \\%h2_folders_not_in_h1 ) ;\n        #$sync->{ debug } and print \"h2_folders_not_in_h1: @h2_folders_not_in_h1\\n\" ;\n        return( reverse @h2_folders_not_in_h1 ) ;\n}\n\nsub tests_nb_messages_in_2_not_in_1\n{\n        note( 'Entering tests_stats_across_folders()' ) ;\n        is( undef, nb_messages_in_2_not_in_1(  ), 'nb_messages_in_2_not_in_1: no args => undef' ) ;\n\n        my $mysync->{ h1_folders_of_md5 }->{ 'some_id_01' }->{ 'some_folder_01' } = 1 ;\n        is( 0, nb_messages_in_2_not_in_1( $mysync ), 'nb_messages_in_2_not_in_1: no messages in 2 => 0' ) ;\n\n        $mysync->{ h1_folders_of_md5 }->{ 'some_id_in_1_and_2' }->{ 'some_folder_01' } = 2 ;\n        $mysync->{ h2_folders_of_md5 }->{ 'some_id_in_1_and_2' }->{ 'some_folder_02' } = 4 ;\n\n        is( 0, nb_messages_in_2_not_in_1( $mysync ), 'nb_messages_in_2_not_in_1: a common message => 0' ) ;\n\n        $mysync->{ h2_folders_of_md5 }->{ 'some_id_in_2_not_in_1' }->{ 'some_folder_02' } = 1 ;\n        is( 1, nb_messages_in_2_not_in_1( $mysync ), 'nb_messages_in_2_not_in_1: one message in_2_not_in_1 => 1' ) ;\n\n        $mysync->{ h2_folders_of_md5 }->{ 'some_other_id_in_2_not_in_1' }->{ 'some_folder_02' } = 3 ;\n        is( 2, nb_messages_in_2_not_in_1( $mysync ), 'nb_messages_in_2_not_in_1: two messages in_2_not_in_1 => 2' ) ;\n\n        note( 'Leaving  tests_stats_across_folders()' ) ;\n        return ;\n}\n\nsub nb_messages_in_2_not_in_1\n{\n        my $mysync = shift ;\n        if ( not defined $mysync ) { return ; }\n\n        $mysync->{ nb_messages_in_2_not_in_1 } = scalar(\n                list_keys_in_2_not_in_1(\n                        $mysync->{ h1_folders_of_md5 },\n                        $mysync->{ h2_folders_of_md5 } ) ) ;\n\n        return $mysync->{ nb_messages_in_2_not_in_1 } ;\n}\n\n\nsub nb_messages_in_1_not_in_2\n{\n        my $mysync = shift ;\n        if ( not defined $mysync ) { return ; }\n\n        $mysync->{ nb_messages_in_1_not_in_2 }  = scalar(\n                list_keys_in_2_not_in_1(\n                        $mysync->{ h2_folders_of_md5 },\n                        $mysync->{ h1_folders_of_md5 } ) ) ;\n\n        return $mysync->{ nb_messages_in_1_not_in_2 }  ;\n}\n\n\n\nsub comment_on_final_diff_in_1_not_in_2\n{\n        my $mysync = shift ;\n\n        if ( not defined $mysync\n             or $mysync->{ justfolders }\n             or $mysync->{ useuid }\n        )\n        {\n                return ;\n        }\n\n        my $nb_identified_h1_messages = scalar( keys %{ $mysync->{ h1_folders_of_md5 } } ) ;\n        my $nb_identified_h2_messages = scalar( keys %{ $mysync->{ h2_folders_of_md5 } } ) ;\n        $mysync->{ debug } and myprint( \"nb_keys h1_folders_of_md5 $nb_identified_h1_messages\\n\" ) ;\n        $mysync->{ debug } and myprint( \"nb_keys h2_folders_of_md5 $nb_identified_h2_messages\\n\" ) ;\n\n        if ( 0 == $nb_identified_h1_messages ) { return ; }\n\n        # Calculate if not yet done\n        if ( not defined $mysync->{ nb_messages_in_1_not_in_2 } )\n        {\n                nb_messages_in_1_not_in_2( $mysync ) ;\n        }\n\n\n        if ( 0 == $mysync->{ nb_messages_in_1_not_in_2 } )\n        {\n                myprint( \"The sync looks good, all \",\n                $nb_identified_h1_messages,\n                \" identified messages in host1 are on host2.\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"The sync is not finished, there are \",\n                $mysync->{ nb_messages_in_1_not_in_2 },\n                \" among \",\n                $nb_identified_h1_messages,\n                \" identified messages in host1 that are not on host2.\\n\" ) ;\n        }\n\n\n        if ( 1 <= $mysync->{ h1_nb_msg_noheader } )\n        {\n                myprint( \"There are \",\n                $mysync->{ h1_nb_msg_noheader },\n                \" unidentified messages (usually Sent or Draft messages).\",\n                \" To sync them add option --addheader\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"There is no unidentified message on host1.\\n\" ) ;\n        }\n\n        return ;\n}\n\nsub comment_on_final_diff_in_2_not_in_1\n{\n        my $mysync = shift ;\n\n        if ( not defined $mysync\n             or $mysync->{ justfolders }\n             or $mysync->{ useuid }\n        )\n        {\n                return ;\n        }\n\n        my $nb_identified_h2_messages = scalar( keys %{ $mysync->{ h2_folders_of_md5 } } ) ;\n        # Calculate if not done yet\n        if ( not defined $mysync->{ nb_messages_in_2_not_in_1 } )\n        {\n                nb_messages_in_2_not_in_1( $mysync ) ;\n        }\n\n        if ( 0 == $mysync->{ nb_messages_in_2_not_in_1 } )\n        {\n                myprint( \"The sync is strict, all \",\n                        $nb_identified_h2_messages,\n                        \" identified messages in host2 are on host1.\\n\" ) ;\n        }\n        else\n        {\n                myprint( \"The sync is not strict, there are \",\n                        $mysync->{ nb_messages_in_2_not_in_1 },\n                        \" among \",\n                        $nb_identified_h2_messages,\n                        \" identified messages in host2 that are not on host1.\",\n                        \" Use --delete2 and sync again to delete them and have a strict sync.\\n\"\n                ) ;\n        }\n        return ;\n}\n\n\nsub tests_match\n{\n        note( 'Entering tests_match()' ) ;\n\n        # undef serie\n        is( undef, match(  ), 'match: no args => undef' ) ;\n        is( undef, match( 'lalala' ), 'match: one args => undef' ) ;\n\n        # This one gives 0 under a binary made by pp\n        # but 1 under \"normal\" Perl interpreter. So a PAR bug?\n        #is( 1, match( q{}, q{} ),                'match: q{}      =~ q{}      => 1' ) ;\n\n        is( 'lalala', match( 'lalala', 'lalala' ),      'match: lalala   =~ lalala => lalala' ) ;\n        is( 'lalala', match( 'lalala', '^lalala' ),     'match: lalala   =~ ^lalala  => lalala' ) ;\n        is( 'lalala', match( 'lalala',  'lalala$' ),    'match: lalala   =~ lalala$  => lalala' ) ;\n        is( 'lalala', match( 'lalala', '^lalala$' ),    'match: lalala   =~ ^lalala$ => lalala' ) ;\n        is( '_lalala_', match( '_lalala_', 'lalala' ),    'match: _lalala_ =~ lalala   => _lalala_' ) ;\n        is( 'lalala', match( 'lalala', '.*' ),          'match: lalala   =~ .*       => lalala' ) ;\n        is( 'lalala', match( 'lalala', '.' ),           'match: lalala   =~ .        => lalala' ) ;\n        is( '/lalala/', match( '/lalala/', '/lalala/' ),  'match: /lalala/ =~ /lalala/ => /lalala/' ) ;\n\n        is( 0, match( 'foo', 's/foo/bar/g' ),  'match: foo =~ s/foo/bar/g => 0' ) ;\n        is( 's/foo/bar/g', match( 's/foo/bar/g', 's/foo/bar/g' ),  'match: s/foo/bar/g =~ s/foo/bar/g => s/foo/bar/g' ) ;\n\n\n        is( 0, match( 'lalala', 'ooo' ),         'match: lalala   =~ ooo      => 0' ) ;\n        is( 0, match( 'lalala', 'lal_ala' ),     'match: lalala   =~ lal_ala  => 0' ) ;\n        is( 0, match( 'lalala', '\\.' ),          'match: lalala   =~ \\.       => 0' ) ;\n        is( 0, match( 'lalalaX', '^lalala$' ),   'match: lalalaX  =~ ^lalala$ => 0' ) ;\n        is( 0, match( 'lalala', '/lalala/' ),    'match: lalala   =~ /lalala/ => 0' ) ;\n\n\tis( 'LALALA', match( 'LALALA', '(?i:lalala)' ),           'match: LALALA   =~ (?i:lalala) => 1' ) ;\n\n\tis( undef, match( 'LALALA', '(?{`ls /`})' ),       'match: LALALA   =~ (?{`ls /`})       => undef' ) ;\n\tis( undef, match( 'LALALA', '(?{print \"CACA\"})' ), 'match: LALALA   =~ (?{print \"CACA\"}) => undef' ) ;\n\tis( undef, match( 'CACA', '(??{print \"CACA\"})' ),  'match: CACA     =~ (??{print \"CACA\"}) => undef' ) ;\n\n\tnote( 'Leaving  tests_match()' ) ;\n\n\treturn ;\n}\n\nsub match\n{\n\tmy( $var, $regex ) = @ARG ;\n\n\t# undef cases\n\tif ( ( ! defined $var ) or ( ! defined $regex ) ) { return ; }\n\n\t# normal cases\n\tif ( eval { $var =~ qr{$regex} } ) {\n\t\treturn $var ;\n\t}elsif ( $EVAL_ERROR ) {\n\t\tmyprint( \"Fatal regex $regex\\n\" ) ;\n\t\treturn ;\n\t} else {\n\t\treturn 0 ;\n\t}\n\treturn ;\n}\n\n\nsub tests_notmatch\n{\n\tnote( 'Entering tests_notmatch()' ) ;\n\n\t# undef serie\n\tis( undef, notmatch(  ), 'notmatch: no args => undef' ) ;\n\tis( undef, notmatch( 'lalala' ), 'notmatch: one args => undef' ) ;\n\n\tis( 1, notmatch( 'lalala', '/lalala/' ),   'notmatch: lalala   !~ /lalala/ => 1' ) ;\n\tis( 0, notmatch( '/lalala/', '/lalala/' ), 'notmatch: /lalala/ !~ /lalala/ => 0' ) ;\n\tis( 1, notmatch( 'lalala', '/ooo/' ),      'notmatch: lalala   !~ /ooo/    => 1' ) ;\n\n\t# This one gives 1 under a binary made by pp\n\t# but 0 under \"normal\" Perl interpreter. So a PAR bug, same in tests_match .\n\t#is( 0, notmatch( q{}, q{} ),             'notmatch: q{}      !~ q{}      => 0' ) ;\n\n\tis( 0, notmatch( 'lalala', 'lalala' ),   'notmatch: lalala   !~ lalala   => 0' ) ;\n\tis( 0, notmatch( 'lalala', '^lalala' ),  'notmatch: lalala   !~ ^lalala  => 0' ) ;\n\tis( 0, notmatch( 'lalala',  'lalala$' ), 'notmatch: lalala   !~ lalala$  => 0' ) ;\n\tis( 0, notmatch( 'lalala', '^lalala$' ), 'notmatch: lalala   !~ ^lalala$ => 0' ) ;\n\tis( 0, notmatch( '_lalala_', 'lalala' ), 'notmatch: _lalala_ !~ lalala   => 0' ) ;\n\tis( 0, notmatch( 'lalala', '.*' ),       'notmatch: lalala   !~ .*       => 0' ) ;\n\tis( 0, notmatch( 'lalala', '.' ),        'notmatch: lalala   !~ .        => 0' ) ;\n\n\n\tis( 1, notmatch( 'lalala', 'ooo' ), 'notmatch: does not match regex => 1' ) ;\n\tis( 1, notmatch( 'lalala', 'lal_ala' ), 'notmatch: does not match regex => 1' ) ;\n\tis( 1, notmatch( 'lalala', '\\.' ), 'notmatch: matches regex => 0' ) ;\n\tis( 1, notmatch( 'lalalaX', '^lalala$' ), 'notmatch: does not match regex => 1' ) ;\n\n\tnote( 'Leaving  tests_notmatch()' ) ;\n\n\treturn ;\n}\n\nsub notmatch\n{\n\tmy( $var, $regex ) = @ARG ;\n\n\t# undef cases\n\tif ( ( ! defined $var ) or ( ! defined $regex ) ) { return ; }\n\n\t# normal cases\n\tif ( eval { $var !~ $regex } ) {\n\t\treturn 1 ;\n\t}elsif ( $EVAL_ERROR ) {\n\t\tmyprint( \"Fatal regex $regex\\n\" ) ;\n\t\treturn ;\n\t}else{\n\t\treturn 0 ;\n\t}\n\treturn ;\n}\n\n\nsub delete_folders_in_2_not_in_1\n{\n\n        foreach my $folder ( @h2_folders_not_in_1 ) {\n                if ( defined  $delete2foldersonly  and eval \"\\$folder !~ $delete2foldersonly\" ) {\n                        myprint( \"Not deleting $folder because of --delete2foldersonly $delete2foldersonly\\n\" ) ;\n                        next ;\n                }\n                if ( defined  $delete2foldersbutnot  and eval \"\\$folder =~ $delete2foldersbutnot\" ) {\n                        myprint( \"Not deleting $folder because of --delete2foldersbutnot $delete2foldersbutnot\\n\" ) ;\n                        next ;\n                }\n                my $res = $sync->{dry} ; # always success in dry mode!\n                $sync->{imap2}->unsubscribe( $folder ) if ( ! $sync->{dry} ) ;\n                $res = $sync->{imap2}->delete( $folder ) if ( ! $sync->{dry} ) ;\n                if ( $res ) {\n                        myprint( \"Deleted $folder\", \"$sync->{dry_message}\", \"\\n\" ) ;\n                }else{\n                        myprint( \"Deleting $folder failed\", \"\\n\" ) ;\n                }\n        }\n        return ;\n}\n\nsub delete_folder\n{\n        my ( $mysync, $imap, $folder, $Side ) = @_ ;\n        if ( ! $mysync )   { return ; }\n        if ( ! $imap )   { return ; }\n        if ( ! $folder ) { return ; }\n        $Side ||= 'HostX' ;\n\n        my $res = $mysync->{dry} ; # always success in dry mode!\n        if ( ! $mysync->{dry} ) {\n                $imap->unsubscribe( $folder ) ;\n                $res = $imap->delete( $folder ) ;\n        }\n        if ( $res ) {\n                myprint( \"$Side deleted $folder\", $mysync->{dry_message}, \"\\n\" ) ;\n                return 1 ;\n        }else{\n                myprint( \"$Side deleting $folder failed\", \"\\n\" ) ;\n                return ;\n        }\n}\n\nsub delete1emptyfolders\n{\n        my $mysync = shift ;\n        if ( ! $mysync ) { return ; } # abort if no parameter\n        if ( ! $mysync->{delete1emptyfolders} ) { return ; } # abort if --delete1emptyfolders off\n        my $imap = $mysync->{imap1} ;\n        if ( ! $imap ) { return ; } # abort if no imap\n        if ( $imap->IsUnconnected(  ) ) { return ; } # abort if disconnected\n\n        my %folders_kept ;\n        myprint( qq{Host1 deleting empty folders\\n} ) ;\n        foreach my $folder ( reverse sort @{ $mysync->{h1_folders_wanted} } ) {\n                my $parenthood = $imap->is_parent( $folder ) ;\n                if ( defined $parenthood and $parenthood ) {\n                        myprint( \"Host1: folder $folder has subfolders\\n\" ) ;\n                        $folders_kept{ $folder }++ ;\n                        next ;\n                }\n                my $nb_messages_select = examine_folder_and_count( $mysync, $imap, $folder, 'Host1' ) ;\n                if ( ! defined $nb_messages_select ) { next ; } # Select failed => Neither continue nor keep this folder }\n                my $nb_messages_search = scalar( @{ $imap->messages(  ) } ) ;\n                if ( 0 != $nb_messages_select and 0 != $nb_messages_search ) {\n                        myprint( \"Host1: folder $folder has messages: $nb_messages_search (search) $nb_messages_select (select)\\n\" ) ;\n                        $folders_kept{ $folder }++ ;\n                        next ;\n                }\n                if ( 0 != $nb_messages_select + $nb_messages_search ) {\n                        myprint( \"Host1: folder $folder odd messages count: $nb_messages_search (search) $nb_messages_select (select)\\n\" ) ;\n                        $folders_kept{ $folder }++ ;\n                        next ;\n                }\n                # Here we must have 0 messages by messages() aka \"SEARCH ALL\" and also \"EXAMINE\"\n                if ( uc $folder eq 'INBOX' ) {\n                        myprint( \"Host1: Not deleting $folder\\n\" ) ;\n                        $folders_kept{ $folder }++ ;\n                        next ;\n                }\n                myprint( \"Host1: deleting empty folder $folder\\n\" ) ;\n                # can not delete a SELECTed or EXAMINEd folder so closing it\n                # could changed be SELECT INBOX\n                $imap->close(  ) ; # close after examine does not expunge; anyway expunging an empty folder...\n                if ( delete_folder( $mysync, $imap, $folder, 'Host1' ) ) {\n                        next ; # Deleted, good!\n                }else{\n                        $folders_kept{ $folder }++ ;\n                        next ; # Not deleted, bad!\n                }\n        }\n        remove_deleted_folders_from_wanted_list( $mysync, %folders_kept ) ;\n        myprint( qq{Host1 ended deleting empty folders\\n} ) ;\n        return ;\n}\n\nsub remove_deleted_folders_from_wanted_list\n{\n        my ( $mysync, %folders_kept ) = @ARG ;\n\n        my @h1_folders_wanted_init = @{ $mysync->{h1_folders_wanted} } ;\n        my @h1_folders_wanted_last ;\n        foreach my $folder ( @h1_folders_wanted_init ) {\n                if ( $folders_kept{ $folder } ) {\n                        push @h1_folders_wanted_last, $folder ;\n                }\n        }\n        @{ $mysync->{h1_folders_wanted} } = @h1_folders_wanted_last ;\n        return ;\n}\n\n\nsub examine_folder_and_count\n{\n        my ( $mysync, $imap, $folder, $Side ) = @_ ;\n        $Side ||= 'HostX' ;\n\n        if ( ! examine_folder( $mysync, $imap, $folder, $Side ) ) {\n                return ;\n        }\n        my $nb_messages_select = count_from_select( $imap->History ) ;\n        return $nb_messages_select ;\n}\n\n\nsub tests_delete1emptyfolders\n{\n\tnote( 'Entering tests_delete1emptyfolders()' ) ;\n\n\n        is( undef, delete1emptyfolders(  ), q{delete1emptyfolders: undef} ) ;\n        my $syncT ;\n        is( undef, delete1emptyfolders( $syncT ), q{delete1emptyfolders: undef 2} ) ;\n        my $imapT ;\n        $syncT->{imap1} = $imapT ;\n        is( undef, delete1emptyfolders( $syncT ), q{delete1emptyfolders: undef imap} ) ;\n\n        require_ok( \"Test::MockObject\" ) ;\n        $imapT = Test::MockObject->new(  ) ;\n        $syncT->{imap1} = $imapT ;\n\n        $imapT->set_true( 'IsUnconnected' ) ;\n        is( undef, delete1emptyfolders( $syncT ), q{delete1emptyfolders: Unconnected imap} ) ;\n\n        # Now connected tests\n        $imapT->set_false( 'IsUnconnected' ) ;\n        $imapT->mock( 'LastError', sub { q{LastError mocked} } ) ;\n\n        $syncT->{delete1emptyfolders} = 0 ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [ qw{ INBOX DELME1 DELME2 } ],\n                q{tests_delete1emptyfolders: --delete1emptyfolders OFF}\n        ) ;\n\n        # All are parents => no deletion at all\n        $imapT->set_true( 'is_parent' ) ;\n        $syncT->{delete1emptyfolders} = 1 ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [ qw{ INBOX DELME1 DELME2 } ],\n                q{tests_delete1emptyfolders: --delete1emptyfolders ON}\n        ) ;\n\n        # No parents but examine false for all => skip all\n        $imapT->set_false( 'is_parent', 'examine' ) ;\n\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [  ],\n                q{tests_delete1emptyfolders: EXAMINE fails}\n        ) ;\n\n        # examine ok for all but History bad => skip all\n        $imapT->set_true( 'examine' ) ;\n        $imapT->mock( 'History', sub { ( q{History badly mocked} ) } ) ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [  ],\n                q{tests_delete1emptyfolders: examine ok but History badly mocked so count messages fails}\n        ) ;\n\n        # History good but some messages EXISTS == messages() => no deletion\n        $imapT->mock( 'History', sub { ( q{* 2 EXISTS} ) } ) ;\n        $imapT->mock( 'messages', sub { [ qw{ UID_1 UID_2 } ] } ) ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [ qw{ INBOX DELME1 DELME2 } ],\n                q{tests_delete1emptyfolders: History EXAMINE ok, several messages}\n        ) ;\n\n        # 0 EXISTS but != messages() => no deletion\n        $imapT->mock( 'History', sub { ( q{* 0 EXISTS} ) } ) ;\n        $imapT->mock( 'messages', sub { [ qw{ UID_1 UID_2 } ] } ) ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [ qw{ INBOX DELME1 DELME2 } ],\n                q{tests_delete1emptyfolders: 0 EXISTS but 2 by messages()}\n        ) ;\n\n        # 1 EXISTS but != 0 == messages() => no deletion\n        $imapT->mock( 'History', sub { ( q{* 1 EXISTS} ) } ) ;\n        $imapT->mock( 'messages', sub { [ ] } ) ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [ qw{ INBOX DELME1 DELME2 } ],\n                q{tests_delete1emptyfolders: 1 EXISTS but 0 by messages()}\n        ) ;\n\n        # 0 EXISTS and 0 == messages() => deletion except INBOX\n        $imapT->mock( 'History', sub { ( q{* 0 EXISTS} ) } ) ;\n        $imapT->mock( 'messages', sub { [ ] } ) ;\n        $imapT->set_true( qw{ delete close unsubscribe } ) ;\n        $syncT->{dry_message} = q{ (not really since in a mocked test)} ;\n        tests_delete1emptyfolders_unit(\n                $syncT,\n                [ qw{ INBOX DELME1 DELME2 } ],\n                [ qw{ INBOX } ],\n                q{tests_delete1emptyfolders: 0 EXISTS 0 by messages() delete folders, keep INBOX}\n        ) ;\n\n\tnote( 'Leaving  tests_delete1emptyfolders()' ) ;\n        return ;\n}\n\nsub tests_delete1emptyfolders_unit\n{\n\tnote( 'Entering tests_delete1emptyfolders_unit()' ) ;\n\n        my $syncT  = shift ;\n        my $folders1wanted_init_ref = shift ;\n        my $folders1wanted_after_ref = shift ;\n        my $comment = shift || q{delete1emptyfolders:} ;\n\n        my @folders1wanted_init  = @{ $folders1wanted_init_ref } ;\n        my @folders1wanted_after = @{ $folders1wanted_after_ref } ;\n\n        @{ $syncT->{h1_folders_wanted} } = @folders1wanted_init ;\n\n        is_deeply( $syncT->{h1_folders_wanted}, \\@folders1wanted_init, qq{$comment, init check} ) ;\n        delete1emptyfolders( $syncT ) ;\n        is_deeply( $syncT->{h1_folders_wanted}, \\@folders1wanted_after, qq{$comment, after check} ) ;\n\n\tnote( 'Leaving  tests_delete1emptyfolders_unit()' ) ;\n        return ;\n}\n\nsub extract_header\n{\n        my $string = shift ;\n\n        my ( $header ) = split  /\\n\\n/x, $string ;\n        if ( ! $header ) { return( q{} ) ; }\n        #myprint( \"[$header]\\n\" ) ;\n        return( $header ) ;\n}\n\nsub tests_extract_header\n{\n\tnote( 'Entering tests_extract_header()' ) ;\n\nmy $h = <<'EOM';\nMessage-Id: <20100428101817.A66CB162474E@plume.est.belle>\nDate: Wed, 28 Apr 2010 12:18:17 +0200 (CEST)\nFrom: gilles@louloutte.dyndns.org (Gilles LAMIRAL)\nEOM\nchomp $h ;\nok( $h eq extract_header(\n<<'EOM'\nMessage-Id: <20100428101817.A66CB162474E@plume.est.belle>\nDate: Wed, 28 Apr 2010 12:18:17 +0200 (CEST)\nFrom: gilles@louloutte.dyndns.org (Gilles LAMIRAL)\n\nbody\nlalala\nEOM\n), 'extract_header: 1') ;\n\n\n\n\tnote( 'Leaving  tests_extract_header()' ) ;\n        return ;\n}\n\nsub decompose_header{\n        my $string = shift ;\n\n        # a hash, for a keyword header KEY value are list of strings [VAL1, VAL1_other, etc]\n        # Think of multiple \"Received:\" header lines.\n        my $header = {  } ;\n\n        my ($key, $val ) ;\n        my @line = split /\\n|\\r\\n/x, $string ;\n        foreach my $line ( @line ) {\n                #myprint( \"DDD $line\\n\" ) ;\n                # End of header\n                last if ( $line =~ m{^$}xo ) ;\n                # Key: value\n                if ( $line =~ m/(^[^:]+):\\s(.*)/xo ) {\n                        $key = $1 ;\n                        $val = $2 ;\n                        $debugdev and myprint( \"DDD KV [$key] [$val]\\n\" ) ;\n                        push  @{ $header->{ $key } }, $val  ;\n                # blanc and value => value from previous line continues\n                }elsif( $line =~ m/^(\\s+)(.*)/xo ) {\n                        $val = $2 ;\n                        $debugdev and myprint( \"DDD V [$val]\\n\" ) ;\n                        @{ $header->{ $key } }[ $LAST ] .= \" $val\" if $key ;\n                # dirty line?\n                }else{\n                        next ;\n                }\n        }\n\n        #myprint( Data::Dumper->Dump( [ $header ] )  ) ;\n\n        return( $header ) ;\n}\n\n\nsub tests_decompose_header{\n\tnote( 'Entering tests_decompose_header()' ) ;\n\n\n        my $header_dec ;\n\n        $header_dec = decompose_header(\n<<'EOH'\nKEY_1: VAL_1\nKEY_2: VAL_2\n  VAL_2_+\n        VAL_2_++\nKEY_3: VAL_3\nKEY_1: VAL_1_other\nKEY_4: VAL_4\n        VAL_4_+\nKEY_5 BLANC:  VAL_5\n\nKEY_6_BAD_BODY: VAL_6\nEOH\n        ) ;\n\n        ok( 'VAL_3'\n        eq $header_dec->{ 'KEY_3' }[0], 'decompose_header: VAL_3' ) ;\n\n        ok( 'VAL_1'\n        eq $header_dec->{ 'KEY_1' }[0], 'decompose_header: VAL_1' ) ;\n\n        ok( 'VAL_1_other'\n        eq $header_dec->{ 'KEY_1' }[1], 'decompose_header: VAL_1_other' ) ;\n\n        ok( 'VAL_2 VAL_2_+ VAL_2_++'\n        eq $header_dec->{ 'KEY_2' }[0], 'decompose_header: VAL_2 VAL_2_+ VAL_2_++' ) ;\n\n        ok( 'VAL_4 VAL_4_+'\n        eq $header_dec->{ 'KEY_4' }[0], 'decompose_header: VAL_4 VAL_4_+' ) ;\n\n        ok( ' VAL_5'\n        eq $header_dec->{ 'KEY_5 BLANC' }[0], 'decompose_header: KEY_5 BLANC' ) ;\n\n        ok( not( defined  $header_dec->{ 'KEY_6_BAD_BODY' }[0]  ), 'decompose_header: KEY_6_BAD_BODY' ) ;\n\n\n        $header_dec = decompose_header(\n<<'EOH'\nMessage-Id: <20100428101817.A66CB162474E@plume.est.belle>\nDate: Wed, 28 Apr 2010 12:18:17 +0200 (CEST)\nFrom: gilles@louloutte.dyndns.org (Gilles LAMIRAL)\nEOH\n        ) ;\n\n        ok( '<20100428101817.A66CB162474E@plume.est.belle>'\n        eq $header_dec->{ 'Message-Id' }[0], 'decompose_header: 1' ) ;\n\n        $header_dec = decompose_header(\n<<'EOH'\nReturn-Path: <gilles@louloutte.dyndns.org>\nReceived: by plume.est.belle (Postfix, from userid 1000)\n        id 120A71624742; Wed, 28 Apr 2010 01:46:40 +0200 (CEST)\nSubject: test:eekahceishukohpe\nEOH\n) ;\n        ok(\n'by plume.est.belle (Postfix, from userid 1000) id 120A71624742; Wed, 28 Apr 2010 01:46:40 +0200 (CEST)'\n        eq $header_dec->{ 'Received' }[0], 'decompose_header: 2' ) ;\n\n        $header_dec = decompose_header(\n<<'EOH'\nReceived: from plume (localhost [127.0.0.1])\n        by plume.est.belle (Postfix) with ESMTP id C6EB73F6C9\n        for <gilles@localhost>; Mon, 26 Nov 2007 10:39:06 +0100 (CET)\nReceived: from plume [192.168.68.7]\n        by plume with POP3 (fetchmail-6.3.6)\n        for <gilles@localhost> (single-drop); Mon, 26 Nov 2007 10:39:06 +0100 (CET)\nEOH\n        ) ;\n        ok(\n        'from plume (localhost [127.0.0.1]) by plume.est.belle (Postfix) with ESMTP id C6EB73F6C9 for <gilles@localhost>; Mon, 26 Nov 2007 10:39:06 +0100 (CET)'\n        eq $header_dec->{ 'Received' }[0], 'decompose_header: 3' ) ;\n        ok(\n        'from plume [192.168.68.7] by plume with POP3 (fetchmail-6.3.6) for <gilles@localhost> (single-drop); Mon, 26 Nov 2007 10:39:06 +0100 (CET)'\n        eq $header_dec->{ 'Received' }[1], 'decompose_header: 3' ) ;\n\n# Bad header beginning with a blank character\n        $header_dec = decompose_header(\n<<'EOH'\n KEY_1: VAL_1\nKEY_2: VAL_2\n  VAL_2_+\n        VAL_2_++\nKEY_3: VAL_3\nKEY_1: VAL_1_other\nEOH\n        ) ;\n\n        ok( 'VAL_3'\n        eq $header_dec->{ 'KEY_3' }[0], 'decompose_header: Bad header VAL_3' ) ;\n\n        ok( 'VAL_1_other'\n        eq $header_dec->{ 'KEY_1' }[0], 'decompose_header: Bad header VAL_1_other' ) ;\n\n        ok( 'VAL_2 VAL_2_+ VAL_2_++'\n        eq $header_dec->{ 'KEY_2' }[0], 'decompose_header: Bad header VAL_2 VAL_2_+ VAL_2_++' ) ;\n\n\tnote( 'Leaving  tests_decompose_header()' ) ;\n        return ;\n}\n\nsub tests_epoch\n{\n\tnote( 'Entering tests_epoch()' ) ;\n\n        ok( '1282658400' eq epoch( '24-Aug-2010 16:00:00 +0200' ), 'epoch 24-Aug-2010 16:00:00 +0200 -> 1282658400' ) ;\n        ok( '1282658400' eq epoch( '24-Aug-2010 14:00:00 +0000' ), 'epoch 24-Aug-2010 14:00:00 +0000 -> 1282658400' ) ;\n        ok( '1282658400' eq epoch( '24-Aug-2010 12:00:00 -0200' ), 'epoch 24-Aug-2010 12:00:00 -0200 -> 1282658400' ) ;\n        ok( '1282658400' eq epoch( '24-Aug-2010 16:01:00 +0201' ), 'epoch 24-Aug-2010 16:01:00 +0201 -> 1282658400' ) ;\n        ok( '1282658400' eq epoch( '24-Aug-2010 14:01:00 +0001' ), 'epoch 24-Aug-2010 14:01:00 +0001 -> 1282658400' ) ;\n\n        ok( '1280671200' eq epoch( '1-Aug-2010 16:00:00 +0200' ), 'epoch 1-Aug-2010 16:00:00 +0200 -> 1280671200' ) ;\n        ok( '1280671200' eq epoch( '1-Aug-2010 14:00:00 +0000' ), 'epoch 1-Aug-2010 14:00:00 +0000 -> 1280671200' ) ;\n        ok( '1280671200' eq epoch( '1-Aug-2010 12:00:00 -0200' ), 'epoch 1-Aug-2010 12:00:00 -0200 -> 1280671200' ) ;\n        ok( '1280671200' eq epoch( '1-Aug-2010 16:01:00 +0201' ), 'epoch 1-Aug-2010 16:01:00 +0201 -> 1280671200' ) ;\n        ok( '1280671200' eq epoch( '1-Aug-2010 14:01:00 +0001' ), 'epoch 1-Aug-2010 14:01:00 +0001 -> 1280671200' ) ;\n\n        is( '1280671200', epoch( '1-Aug-2010 14:01:00 +0001' ), 'epoch 1-Aug-2010 14:01:00 +0001 -> 1280671200' ) ;\n        is( '946684800', epoch( '00-Jan-0000 00:00:00 +0000' ), 'epoch 1-Aug-2010 14:01:00 +0001 -> 1280671200' ) ;\n\n\tnote( 'Leaving  tests_epoch()' ) ;\n        return ;\n}\n\nsub epoch\n{\n        # incoming format:\n        # internal date 24-Aug-2010 16:00:00 +0200\n\n        # outgoing format: epoch\n\n\n        my $d = shift ;\n        return(q{}) if not defined $d;\n\n        my ( $mday, $month, $year, $hour, $min, $sec, $sign, $zone_h, $zone_m ) ;\n        my $time ;\n\n        if ( $d =~ m{(\\d{1,2})-([A-Z][a-z]{2})-(\\d{4})\\s(\\d{2}):(\\d{2}):(\\d{2})\\s((?:\\+|-))(\\d{2})(\\d{2})}xo ) {\n                #myprint( \"internal: [$1][$2][$3][$4][$5][$6][$7][$8][$9]\\n\" ) ;\n                ( $mday, $month, $year, $hour, $min, $sec, $sign, $zone_h, $zone_m )\n                =  ( $1,   $2,     $3,    $4,    $5,  $6,    $7,     $8,     $9 ) ;\n                #myprint( \"( $mday, $month, $year, $hour, $min, $sec, $sign, $zone_h, $zone_m )\\n\" ) ;\n\n                $sign = +1 if ( '+' eq $sign ) ;\n                $sign = $MINUS_ONE if ( '-' eq $sign ) ;\n\n                if ( 0 == $mday ) {\n                        myprint( \"buggy day in $d. Fixed to 01\\n\" ) ;\n                        $mday = '01' ;\n                }\n                $time = timegm( $sec, $min, $hour, $mday, $month_abrev{$month}, $year )\n                        - $sign * ( 3600 * $zone_h + 60 * $zone_m ) ;\n\n                #myprint( \"$time \", scalar localtime($time), \"\\n\");\n        }\n        return( $time ) ;\n}\n\nsub tests_add_header\n{\n\tnote( 'Entering tests_add_header()' ) ;\n\n        ok( 'Message-Id: <mistake@imapsync>' eq add_header(), 'add_header no arg' ) ;\n        ok( 'Message-Id: <123456789@imapsync>' eq add_header( '123456789' ), 'add_header 123456789' ) ;\n\n\tnote( 'Leaving  tests_add_header()' ) ;\n        return ;\n}\n\nsub add_header\n{\n        my $header_uid = shift || 'mistake' ;\n        my $header_Message_Id = 'Message-Id: <' . $header_uid . '@imapsync>' ;\n        return( $header_Message_Id ) ;\n}\n\n\n\n\nsub tests_max_line_length\n{\n\tnote( 'Entering tests_max_line_length()' ) ;\n\n        ok( 0 == max_line_length( q{} ), 'max_line_length: 0 == null string' ) ;\n        ok( 1 == max_line_length( \"\\n\" ), 'max_line_length: 1 == \\n' ) ;\n        ok( 1 == max_line_length( \"\\n\\n\" ), 'max_line_length: 1 == \\n\\n' ) ;\n        ok( 1 == max_line_length( \"\\n\" x 500 ), 'max_line_length: 1 == 500 \\n' ) ;\n        ok( 1 == max_line_length( 'a' ), 'max_line_length: 1 == a' ) ;\n        ok( 2 == max_line_length( \"a\\na\" ), 'max_line_length: 2 == a\\na' ) ;\n        ok( 2 == max_line_length( \"a\\na\\n\" ), 'max_line_length: 2 == a\\na\\n' ) ;\n        ok( 3 == max_line_length( \"a\\nab\\n\" ), 'max_line_length: 3 == a\\nab\\n' ) ;\n        ok( 3 == max_line_length( \"a\\nab\\n\" x 1_000 ), 'max_line_length: 3 == 1_000 a\\nab\\n' ) ;\n        ok( 3 == max_line_length( \"a\\nab\\nabc\" ), 'max_line_length: 3 == a\\nab\\nabc' ) ;\n\n        ok( 4 == max_line_length( \"a\\nab\\nabc\\n\" ), 'max_line_length: 4 == a\\nab\\nabc\\n' ) ;\n        ok( 5 == max_line_length( \"a\\nabcd\\nabc\\n\" ), 'max_line_length: 5 == a\\nabcd\\nabc\\n' ) ;\n        ok( 5 == max_line_length( \"a\\nabcd\\nabc\\n\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\" ), 'max_line_length: 5 == a\\nabcd\\nabc\\n\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd\\nabcd' ) ;\n\n\tnote( 'Leaving  tests_max_line_length()' ) ;\n        return ;\n}\n\nsub max_line_length\n{\n        my $string = shift ;\n        my $max = 0 ;\n\n        while ( $string =~ m/([^\\n]*\\n?)/msxg ) {\n                $max = max( $max, length $1 ) ;\n        }\n        return( $max ) ;\n}\n\nsub set_checknoabletosearch\n{\n        my $mysync = shift @ARG ;\n        if ( defined  $mysync->{ checknoabletosearch } )\n        {\n                        return ;\n        }\n        elsif ( $mysync->{ justfolders } )\n        {\n                $mysync->{ checknoabletosearch } = 0 ;\n        }\n        else\n        {\n                $mysync->{ checknoabletosearch } = 1 ;\n        }\n        return ;\n}\n\n\nsub tests_setlogfile\n{\n\tnote( 'Entering tests_setlogfile()' ) ;\n\n\tmy $mysync = {} ;\n        $mysync->{logdir}  = 'vallogdir' ;\n        $mysync->{logfile} = 'vallogfile.txt' ;\n        is( 'vallogdir/vallogfile.txt', setlogfile( $mysync ),\n                'setlogfile: logdir vallogdir, logfile vallogfile.txt, vallogdir/vallogfile.txt' ) ;\n\n\tSKIP: {\n\tskip( 'Too hard to have a well known timezone on Windows', 9 ) if ( 'MSWin32' eq $OSNAME ) ;\n\n        local $ENV{TZ} = 'GMT' ;\n\n\t$mysync = {\n                timestart => 2,\n\t} ;\n\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_02_000__.txt\", setlogfile( $mysync ),\n                \"setlogfile: default is like $DEFAULT_LOGDIR/1970_01_01_00_00_02_000__.txt\" ) ;\n\n        $mysync = {\n                timestart => 2,\n                user1     => 'user1',\n                user2     => 'user2',\n                abort     => 1,\n        } ;\n\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2_abort.txt\", setlogfile( $mysync ),\n                \"setlogfile: default is like $DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2_abort.txt\" ) ;\n\n        $mysync = {\n                timestart => 2,\n                user1     => 'user1',\n                user2     => 'user2',\n                remote    => 'zzz',\n        } ;\n\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2_remote.txt\", setlogfile( $mysync ),\n                \"setlogfile: default is like $DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2_remote.txt\" ) ;\n\n        $mysync = {\n                timestart => 2,\n                user1     => 'user1',\n                user2     => 'user2',\n                remote    => 'zzz',\n                abort     => 1,\n        } ;\n\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2_remote_abort.txt\", setlogfile( $mysync ),\n                \"setlogfile: default is like $DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2_remote_abort.txt\" ) ;\n\n\n        $mysync = {\n                timestart => 2,\n                user1     => 'user1',\n                user2     => 'user2',\n        } ;\n\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2.txt\", setlogfile( $mysync ),\n                \"setlogfile: default is like $DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2.txt\" ) ;\n\n        $mysync->{logdir}  = undef ;\n        $mysync->{logfile} = undef ;\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2.txt\", setlogfile( $mysync ),\n                \"setlogfile: logdir undef, $DEFAULT_LOGDIR/1970_01_01_00_00_02_000_user1_user2.txt\" ) ;\n\n        $mysync->{logdir} = q{} ;\n        $mysync->{logfile} = undef ;\n        is( '1970_01_01_00_00_02_000_user1_user2.txt', setlogfile( $mysync ),\n                'setlogfile: logdir empty, 1970_01_01_00_00_02_000_user1_user2.txt' ) ;\n\n        $mysync->{logdir} = 'vallogdir' ;\n        $mysync->{logfile} = undef ;\n        is( 'vallogdir/1970_01_01_00_00_02_000_user1_user2.txt', setlogfile( $mysync ),\n                'setlogfile: logdir vallogdir, vallogdir/1970_01_01_00_00_02_000_user1_user2.txt' ) ;\n\n        $mysync = {\n                user1     => 'us/er1a*|?:\"<>b',\n                user2     => 'u/ser2a*|?:\"<>b',\n        } ;\n\n        is( \"$DEFAULT_LOGDIR/1970_01_01_00_00_00_000_us_er1a_______b_u_ser2a_______b.txt\", setlogfile( $mysync ),\n                \"setlogfile: logdir undef, $DEFAULT_LOGDIR/1970_01_01_00_00_00_000_us_er1a_______b_u_ser2a_______b.txt\" ) ;\n\n\n\n\t} ;\n\n\tnote( 'Leaving  tests_setlogfile()' ) ;\n        return ;\n}\n\nsub setlogfile\n{\n        my( $mysync ) = shift ;\n\n        # When aborting another process the log file name finishes with \"_abort.txt\"\n        my $abort_suffix = ( $mysync->{ abort } ) ? '_abort' : q{} ;\n\n        # When acting as a proxy the log file name finishes with \"_remote.txt\"\n        # proxy mode is not done in imapsync, it is done by proximapsync\n        my $remote_suffix = ( $mysync->{ remote } ) ? '_remote' : q{} ;\n\n        my $suffix = (\n                filter_forbidden_characters( slash_to_underscore( $mysync->{ user1 } ) ) || q{} )\n                . '_'\n                . ( filter_forbidden_characters( slash_to_underscore( $mysync->{ user2 } ) ) || q{} )\n                . $remote_suffix . $abort_suffix ;\n\n        $mysync->{ logdir }  = defined $mysync->{ logdir }  ? $mysync->{ logdir }  : $DEFAULT_LOGDIR ;\n\n        $mysync->{ logfile } = defined $mysync->{ logfile }\n                ? \"$mysync->{ logdir }/$mysync->{ logfile }\"\n                : logfile( $mysync->{ timestart }, $suffix, $mysync->{ logdir } ) ;\n\n        return( $mysync->{ logfile } ) ;\n}\n\nsub tests_logfile\n{\n\tnote( 'Entering tests_logfile()' ) ;\n\n        SKIP: {\n                # Too hard to have a well known timezone on Windows\n                skip( 'Too hard to have a well known timezone on Windows', 10 ) if ( 'MSWin32' eq $OSNAME ) ;\n\n                local $ENV{TZ} = 'GMT' ;\n                {\n                        POSIX::tzset unless ('MSWin32' eq $OSNAME) ;\n                        is( '1970_01_01_00_00_00_000.txt', logfile(  ),           'logfile: no args    => 1970_01_01_00_00_00.txt' ) ;\n                        is( '1970_01_01_00_00_00_000.txt', logfile( 0 ),          'logfile: 0          => 1970_01_01_00_00_00.txt' ) ;\n                        is( '1970_01_01_00_01_01_000.txt', logfile( 61 ),         'logfile: 0          => 1970_01_01_00_01_01.txt' ) ;\n                        is( '1970_01_01_00_01_01_234.txt', logfile( 61.234 ),     'logfile: 0          => 1970_01_01_00_01_01.txt' ) ;\n                        is( '2010_08_24_14_00_00_000.txt', logfile( 1_282_658_400 ), 'logfile: 1_282_658_400 => 2010_08_24_14_00_00.txt' ) ;\n                        is( '2010_08_24_14_01_01_000.txt', logfile( 1_282_658_461 ), 'logfile: 1_282_658_461 => 2010_08_24_14_01_01.txt' ) ;\n                        is( '2010_08_24_14_01_01_000_poupinette.txt', logfile( 1_282_658_461, 'poupinette' ), 'logfile: 1_282_658_461 poupinette => 2010_08_24_14_01_01_poupinette.txt' ) ;\n                        is( '2010_08_24_14_01_01_000_removeblanks.txt', logfile( 1_282_658_461, '   remove blanks  ' ), 'logfile: 1_282_658_461   remove blanks   => 2010_08_24_14_01_01_000_removeblanks' ) ;\n\n                        is( '2010_08_24_14_01_01_234_poup.txt', logfile( 1_282_658_461.2347, 'poup' ),\n                            'logfile: 1_282_658_461.2347 poup => 2010_08_24_14_01_01_234_poup.txt' ) ;\n\n                        is( 'dirdir/2010_08_24_14_01_01_234_poup.txt', logfile( 1_282_658_461.2347, 'poup', 'dirdir' ),\n                            'logfile: 1_282_658_461.2347 poup dirdir => dirdir/2010_08_24_14_01_01_234_poup.txt' ) ;\n\n\n\n                }\n                POSIX::tzset unless ('MSWin32' eq $OSNAME) ;\n        } ;\n\n\tnote( 'Leaving  tests_logfile()' ) ;\n        return ;\n}\n\n\nsub logfile\n{\n        my ( $time, $suffix, $dir ) = @_ ;\n\n        $time   ||= 0 ;\n        $suffix ||= q{} ;\n\t$suffix =~ tr/ //ds ;\n        my $sep_suffix = ( $suffix ) ? '_' : q{} ;\n        $dir    ||= q{} ;\n        my $sep_dir = ( $dir ) ? '/' : q{} ;\n\n        my $date_str = POSIX::strftime( '%Y_%m_%d_%H_%M_%S', localtime $time ) ;\n\t# Because of ab tests or web accesses, more than one sync withing one second is possible\n\t# so we add also milliseconds\n\t$date_str .= sprintf \"_%03d\", ($time - int( $time ) ) * 1000 ; # without rounding\n        my $logfile = \"${dir}${sep_dir}${date_str}${sep_suffix}${suffix}.txt\" ;\n        return( $logfile ) ;\n}\n\n\nsub tests_localtimez\n{\n        note( 'Entering tests_localtimez()' ) ;\n\n        SKIP: {\n                # Too hard to have a well known timezone on Windows\n                skip( 'Too hard to have a well known timezone on Windows', 1 ) if ( 'MSWin32' eq $OSNAME ) ;\n                local $ENV{TZ} = 'GMT' ;\n                like( localtimez( 0 ), qr'1970-01-01 00:00:00 \\+0000 (GMT|UTC)', 'localtimez: 0 => match 1970-01-01 00:00:00 +0000 GMT' ) ;\n        }\n\n        is( localtimez( ), localtimez( time ), 'localtimez: undef => equals currrent' ) ;\n        note( 'Leaving  tests_localtimez()' ) ;\n        return ;\n}\n\n\n\nsub localtimez\n{\n        my $time = shift ;\n\n        $time = defined( $time ) ? $time : time ;\n\n        my $datetimestr = POSIX::strftime( '%A %e %B %Y-%m-%d %H:%M:%S %z %Z', localtime( $time ) ) ;\n\n        #myprint( \"$datetimestr\\n\" ) ;\n        return $datetimestr ;\n}\n\n\n\n\nsub tests_slash_to_underscore\n{\n\tnote( 'Entering tests_slash_to_underscore()' ) ;\n\n\tis( undef, slash_to_underscore(  ), 'slash_to_underscore: no parameters => undef' ) ;\n\tis( '_', slash_to_underscore( '/' ), 'slash_to_underscore: / => _' ) ;\n\tis( '_abc_def_', slash_to_underscore( '/abc/def/' ), 'slash_to_underscore: /abc/def/ => _abc_def_' ) ;\n\tnote( 'Leaving  tests_slash_to_underscore()' ) ;\n\treturn ;\n}\n\nsub slash_to_underscore\n{\n\tmy $string = shift ;\n\n\tif ( ! defined $string ) { return ; }\n\n\t$string =~ tr{/}{_} ;\n\n\treturn(  $string ) ;\n}\n\n\n\n\nsub tests_million_folders_baby_2\n{\n\tnote( 'Entering tests_million_folders_baby_2()' ) ;\n\n        my %long ;\n        @long{ 1 .. 900_000 } = (1) x 900_000 ;\n        #myprint( %long, \"\\n\" ) ;\n        my $pasglop = 0 ;\n        foreach my $elem (  1 .. 900_000 ) {\n                #$debug and myprint( \"$elem \" ) ;\n                if ( not exists  $long{ $elem }  ) {\n                        $pasglop++ ;\n                }\n        }\n        ok( 0 == $pasglop, 'tests_million_folders_baby_2: search among 900_000' ) ;\n        # myprint( \"$pasglop\\n\" ) ;\n\n\tnote( 'Leaving  tests_million_folders_baby_2()' ) ;\n        return ;\n}\n\n\n\nsub tests_always_fail\n{\n\tnote( 'Entering tests_always_fail()' ) ;\n\n        is( 0, 1, 'always_fail: 0 is 1' ) ;\n\n\tnote( 'Leaving  tests_always_fail()' ) ;\n        return ;\n}\n\n\nsub tests_logfileprepa\n{\n        note( 'Entering tests_logfileprepa()' ) ;\n\n        is( undef, logfileprepa(  ), 'logfileprepa: no args => undef' ) ;\n        my $logfile = 'W/tmp/tests/tests_logfileprepa.txt' ;\n        is( 1, logfileprepa( $logfile ), 'logfileprepa: W/tmp/tests/tests_logfileprepa.txt => 1' ) ;\n\n        note( 'Leaving  tests_logfileprepa()' ) ;\n        return ;\n}\n\nsub logfileprepa\n{\n        my $logfile = shift ;\n\n        if ( ! defined( $logfile ) )\n        {\n                return ;\n        }else\n        {\n                #myprint( \"[$logfile]\\n\" ) ;\n                my $dirname = dirname( $logfile ) ;\n                do_valid_directory( $dirname ) || return( 0 ) ;\n                return( 1 ) ;\n        }\n}\n\n\nsub tests_teelaunch\n{\n        note( 'Entering tests_teelaunch()' ) ;\n\n        is( undef, teelaunch(  ), 'teelaunch: no args => undef' ) ;\n        my $mysync = {} ;\n        is( undef, teelaunch( $mysync ), 'teelaunch: arg empty {} => undef' ) ;\n        $mysync->{logfile} = q{} ;\n        is( undef, teelaunch( $mysync ), 'teelaunch: logfile empty string => undef' ) ;\n\n        # First time, learning IO::Tee intrasics\n        $mysync->{logfile} = 'W/tmp/tests/tests_teelaunch.txt' ;\n        isa_ok( my $tee = teelaunch( $mysync ), 'IO::Tee' , 'teelaunch: logfile W/tmp/tests/tests_teelaunch.txt' ) ;\n        is( 1, print( $tee \"Hi!\\n\" ), 'teelaunch: write Hi!') ;\n        is( \"Hi!\\n\", file_to_string( 'W/tmp/tests/tests_teelaunch.txt' ), 'teelaunch: reading W/tmp/tests/tests_teelaunch.txt is Hi!\\n' ) ;\n        is( 1, print( $tee \"Hoo\\n\" ), 'teelaunch: write Hoo') ;\n        is( \"Hi!\\nHoo\\n\", file_to_string( 'W/tmp/tests/tests_teelaunch.txt' ), 'teelaunch: reading W/tmp/tests/tests_teelaunch.txt is Hi!\\nHoo\\n' ) ;\n\n        # closing so tee won't be happy\n        close $mysync->{logfile_handle} ;\n        is( undef, print( $tee \"Argh1\\n\" ), 'teelaunch: write Argh1') ;\n        is( undef, print( $tee \"Argh2\\n\" ), 'teelaunch: write Argh2') ;\n        # write not done\n        is( \"Hi!\\nHoo\\n\", file_to_string( 'W/tmp/tests/tests_teelaunch.txt' ), 'teelaunch: reading W/tmp/tests/tests_teelaunch.txt is still Hi!\\nHoo\\n' ) ;\n        print join( ' ', $tee->handles ), \"\\n\";\n        is( 2, scalar $tee->handles, 'teelaunch: 2 handles') ;\n        shift @{*{$tee}};\n        print join(' ', $tee->handles), \"\\n\" ;\n        is( 1, scalar $tee->handles, 'teelaunch: 1 handle') ;\n        is( 1, print( $tee \"Argh3\\n\" ), 'teelaunch: write Argh3 yeah') ;\n\n        shift @{*{$tee}};\n        # will not print anything now\n        is( 0, scalar $tee->handles, 'teelaunch: 0 handle') ;\n        is( 1, print( $tee \"Argh 4\\n\" ), 'teelaunch: write Argh4 no') ;\n\n        # Second time, lesson learnt IO::Tee\n        $mysync->{logfile} = 'W/tmp/tests/tests_teelaunch2.txt' ;\n        isa_ok( $tee = teelaunch( $mysync ), 'IO::Tee' , 'teelaunch: logfile W/tmp/tests/tests_teelaunch2.txt' ) ;\n        is( 1, print( $tee \"Hi!\\n\" ), 'teelaunch: write Hi!') ;\n        is( \"Hi!\\n\", file_to_string( 'W/tmp/tests/tests_teelaunch2.txt' ), 'teelaunch: reading W/tmp/tests/tests_teelaunch2.txt is Hi!\\n' ) ;\n        is( 1, print( $tee \"Hoo\\n\" ), 'teelaunch: write Hoo') ;\n        is( \"Hi!\\nHoo\\n\", file_to_string( 'W/tmp/tests/tests_teelaunch2.txt' ), 'teelaunch: reading W/tmp/tests/tests_teelaunch2.txt is Hi!\\nHoo\\n' ) ;\n\n        is( 1, teefinish( $mysync ), 'teefinish: return 1') ;\n        is( 1, print( $tee \"Argh1\\n\" ), 'teelaunch: write Argh1') ;\n        is( 1, print( $tee \"Argh2\\n\" ), 'teelaunch: write Argh2') ;\n        is( \"Hi!\\nHoo\\n\", file_to_string( 'W/tmp/tests/tests_teelaunch2.txt' ), 'teelaunch: reading W/tmp/tests/tests_teelaunch2.txt is still Hi!\\nHoo\\n' ) ;\n        is( 1, teefinish( $mysync ), 'teefinish: still return 1') ;\n\n        note( 'Leaving  tests_teelaunch()' ) ;\n        return ;\n}\n\nsub teelaunch\n{\n        my $mysync = shift ;\n\n        if ( ! defined( $mysync ) )\n        {\n                return ;\n        }\n\n        my $logfile = $mysync->{logfile} ;\n\n        if ( ! $logfile )\n        {\n                return ;\n        }\n\n        logfileprepa( $logfile ) || croak \"Error no valid directory to write log file $logfile : $OS_ERROR\" ;\n\n        # This is a log file opened during the whole sync\n        ## no critic (InputOutput::RequireBriefOpen)\n        open my $logfile_handle, '>', $logfile\n          or croak( \"Can not open $logfile for write: $OS_ERROR\" ) ;\n        binmode $logfile_handle, \":encoding(UTF-8)\" ;\n        my $tee = IO::Tee->new( $logfile_handle, \\*STDOUT ) ;\n        $tee->autoflush( 1 ) ;\n        $mysync->{logfile_handle} = $logfile_handle ;\n        $mysync->{tee} = $tee ;\n        return $tee ;\n}\n\nsub teefinish\n{\n        my $mysync = shift ;\n\n        if ( ! defined( $mysync ) ) { return ; }\n\n        my $tee = $mysync->{tee} ;\n\n        if ( ! defined( $tee ) ) { return ; }\n\n        if ( 2 == scalar $tee->handles )\n        {\n                shift @{*{$tee}};\n        }\n        else\n        {\n                # nothing\n        }\n        return scalar $tee->handles ;\n}\n\n\nsub getpwuid_any_os\n{\n        my $uid = shift ;\n\n        return( scalar  getlogin ) if ( 'MSWin32' eq $OSNAME ) ; # Windows system\n        return( scalar  getpwuid $uid ) ; # Unix system\n\n\n}\n\n\n\nsub abortifneeded\n{\n        my $mysync = shift ;\n        if ( -e $mysync->{ abortfile } )\n        {\n                myprint( \"Asked to terminate by file $mysync->{ abortfile }\\n\" ) ;\n                do_and_print_stats( $mysync ) ;\n                myprint( \"You should resynchronize those accounts by running a sync again,\\n\",\n                         \"since some messages and entire folders might still be missing on host2.\\n\"\n                ) ;\n                exit_clean( $mysync, $EXIT_BY_FILE ) ;\n                return ;\n        }\n        else\n        {\n                return ;\n        }\n}\n\nsub simulong\n{\n        my $mysync = shift ;\n\n        my $max_seconds = $mysync->{ simulong } ;\n\n        if ( ! $max_seconds ) { return ; }\n\n\tmy $division = 5 ;\n\tmy $last_count = int( $division * $max_seconds ) ;\n        $mysync->{ debug } and myprint \"last_count $last_count = int( division $division * max_seconds $max_seconds)\\n\" ;\n\tforeach my $i ( 1 .. ( $last_count ) ) {\n                myprint( \"Are you still here ETA: \" . ( $last_count - $i ) . \"/$last_count msgs left\\n\" ) ;\n                #this one is for testing huge page behavior\n\t\t#myprint( \"Are you still here ETA: \" . ($last_count - $i) . \"/$last_count  msgs left\\n\" . ( \"Ah\" x 40 . \"\\n\") x 4000 ) ;\n\t\tsleep( 1 / $division ) ;\n                abortifneeded( $mysync ) ;\n\t}\n\n\treturn ;\n}\n\n\n\nsub printenv\n{\n        myprint( \"Environment variables listing:\\n\",\n\t\t( map { \"$_ => $ENV{$_}\\n\" } sort keys %ENV),\n\t\t\"Environment variables listing end\\n\"  ) ;\n\treturn ;\n}\n\n\nsub unittestssuite\n{\n        my $mysync = shift ;\n        if ( ! ( $mysync->{ tests }  or $mysync->{ testsdebug } or $mysync->{ testsunit } ) ) {\n                return ;\n        }\n\n        my $test_builder = Test::More->builder ;\n        tests( $mysync ) ;\n        testsdebug( $mysync ) ;\n        testunitsession( $mysync ) ;\n\n        my @summary = $test_builder->summary() ;\n        my @details = $test_builder->details() ;\n        my $nb_tests_run = scalar( @summary ) ;\n        my $nb_tests_expected = $test_builder->expected_tests() ;\n        my $nb_tests_failed = count_0s( @summary ) ;\n        my $tests_failed = report_failures( @details ) ;\n        if ( $nb_tests_failed or ( $nb_tests_run != $nb_tests_expected ) ) {\n                #$test_builder->reset(  ) ;\n                myprint( \"Summary of tests: failed $nb_tests_failed tests, run $nb_tests_run tests, expected to run $nb_tests_expected tests.\\n\",\n                \"List of failed tests:\\n\", $tests_failed ) ;\n                return $EXIT_TESTS_FAILED ;\n        }\n\n        cleanup_mess_from_tests(  ) ;\n\n        return 0 ;\n}\n\nsub cleanup_mess_from_tests\n{\n        undef @pipemess ;\n        return ;\n}\n\nsub after_get_options\n{\n        my $mysync = shift ;\n\tmy $numopt = shift ;\n\n\n        # exit with --help option or no option at all\n        $mysync->{ debug } and myprint( \"numopt:$numopt\\n\" ) ;\n\n        if ( $help or not $numopt ) {\n                myprint( usage( $mysync ) ) ;\n                exit ;\n        }\n\n        return ;\n}\n\nsub tests_remove_edging_blanks\n{\n        note( 'Entering tests_remove_edging_blanks()' ) ;\n\n        is( undef, remove_edging_blanks(  ),  'remove_edging_blanks: no args => undef' ) ;\n        is( 'abcd', remove_edging_blanks( 'abcd' ),  'remove_edging_blanks: abcd => abcd' ) ;\n        is( 'ab cd', remove_edging_blanks( ' ab cd ' ),  'remove_edging_blanks: \" ab cd \" => \"ab cd\"' ) ;\n\n        note( 'Leaving  tests_remove_edging_blanks()' ) ;\n        return ;\n}\n\n\n\nsub remove_edging_blanks\n{\n        my $string = shift ;\n        if ( ! defined $string )\n        {\n                return ;\n        }\n        $string =~ s,^ +| +$,,g ;\n        return $string ;\n}\n\n\nsub tests_sanitize\n{\n        note( 'Entering tests_remove_edging_blanks()' ) ;\n\n        is( undef, sanitize(  ),  'sanitize: no args => undef' ) ;\n        my $mysync = {} ;\n\n        $mysync->{ host1 } = ' example.com ' ;\n        $mysync->{ user1 } = ' to to ' ;\n        $mysync->{ password1 } = ' sex is good! ' ;\n        is( undef, sanitize( $mysync ),  'sanitize: => undef' ) ;\n        is( 'example.com', $mysync->{ host1 },        'sanitize: host1     \" example.com \"  => \"example.com\"' ) ;\n        is( 'to to', $mysync->{ user1 },             'sanitize: user1     \"  to to  \"      => \"to to\"' ) ;\n        is( 'sex is good!', $mysync->{ password1 },  'sanitize: password1 \" sex is good! \" => \"sex is good!\"' ) ;\n        note( 'Leaving  tests_remove_edging_blanks()' ) ;\n        return ;\n}\n\n\nsub sanitize\n{\n        my $mysync = shift ;\n        if ( ! defined $mysync )\n        {\n                return ;\n        }\n\n        foreach my $parameter ( qw( host1 host2 user1 user2 password1 password2 ) )\n        {\n                $mysync->{ $parameter } = remove_edging_blanks( $mysync->{ $parameter } ) ;\n        }\n        return ;\n}\n\nsub easyany\n{\n\tmy $mysync = shift ;\n\n\t# Gmail\n\tif ( $mysync->{gmail1} and $mysync->{gmail2} ) {\n\t\t$mysync->{ debug } and myprint( \"gmail1 gmail2\\n\") ;\n\t\tgmail12( $mysync ) ;\n\t\treturn ;\n\t}\n\tif ( $mysync->{gmail1}  ) {\n\t\t$mysync->{ debug } and myprint( \"gmail1\\n\" ) ;\n\t\tgmail1( $mysync ) ;\n\t}\n\tif ( $mysync->{gmail2} ) {\n\t\t$mysync->{ debug } and myprint( \"gmail2\\n\" ) ;\n\t\tgmail2( $mysync ) ;\n\t}\n\t# Office 365\n\tif ( $mysync->{office1} ) {\n\t\toffice1( $mysync ) ;\n\t}\n\n\tif ( $mysync->{office2} ) {\n\t\toffice2( $mysync ) ;\n\t}\n\n\t# Exchange\n\tif ( $mysync->{exchange1} ) {\n\t\texchange1( $mysync ) ;\n\t}\n\n\tif ( $mysync->{exchange2} ) {\n\t\texchange2( $mysync ) ;\n\t}\n\n\n\t# Domino\n\tif ( $mysync->{domino1} ) {\n\t\tdomino1( $mysync ) ;\n\t}\n\n\tif ( $mysync->{domino2} ) {\n\t\tdomino2( $mysync ) ;\n\t}\n\n\treturn ;\n}\n\n# From and for https://imapsync.lamiral.info/FAQ.d/FAQ.Gmail.txt\nsub gmail12\n{\n\tmy $mysync = shift ;\n\t# Gmail at host1 and host2\n\t$mysync->{host1} ||= 'imap.gmail.com' ;\n\t$mysync->{ssl1} = ( defined $mysync->{ssl1} ) ? $mysync->{ssl1} : 1 ;\n\t$mysync->{host2} ||= 'imap.gmail.com' ;\n\t$mysync->{ssl2} = ( defined $mysync->{ssl2} ) ? $mysync->{ssl2} : 1 ;\n\t$mysync->{maxbytespersecond} ||= 20_000 ; # should be less than 10_000 when computed from Gmail documentation\n\t$mysync->{maxbytesafter} ||= 1_000_000_000 ; # In fact it is documented as half: 500_000_000\n\t$mysync->{automap}   = ( defined $mysync->{automap} )  ? $mysync->{automap} : 1 ;\n\t$mysync->{maxsleep}  = ( defined $mysync->{maxsleep} ) ? $mysync->{maxsleep} : $MAX_SLEEP ; ;\n\t$skipcrossduplicates = ( defined $skipcrossduplicates ) ? $skipcrossduplicates : 0 ;\n        $mysync->{ synclabels  }   = ( defined $mysync->{ synclabels } )  ? $mysync->{ synclabels } : 1 ;\n        $mysync->{ resynclabels }   = ( defined $mysync->{ resynclabels } )  ? $mysync->{ resynclabels } : 1 ;\n        push @useheader, 'X-Gmail-Received', 'Message-Id' ;\n\tpush @exclude, '\\[Gmail\\]$' ;\n        push @folderlast, '[Gmail]/All Mail' ;\n\treturn ;\n}\n\n\nsub gmail1\n{\n\tmy $mysync = shift ;\n\t# Gmail at host2\n\t$mysync->{host1} ||= 'imap.gmail.com' ;\n\t$mysync->{ssl1} = ( defined $mysync->{ssl1} ) ? $mysync->{ssl1} : 1 ;\n\t$mysync->{maxbytespersecond} ||= 40_000 ;     # should be 30_000 computed from by Gmail documentation\n\t$mysync->{maxbytesafter} ||= 3_000_000_000 ;  #\n\t$mysync->{automap}   = ( defined $mysync->{automap} ) ? $mysync->{automap} : 1 ;\n\t$mysync->{maxsleep}  = ( defined $mysync->{maxsleep} ) ? $mysync->{maxsleep} : $MAX_SLEEP ; ;\n\t$skipcrossduplicates = ( defined $skipcrossduplicates ) ? $skipcrossduplicates : 1 ;\n\n\tpush @useheader, 'X-Gmail-Received', 'Message-Id' ;\n\tpush @{ $mysync->{ regextrans2 } }, 's,\\[Gmail\\].,,' ;\n        push @folderlast, '[Gmail]/All Mail' ;\n\treturn ;\n}\n\nsub gmail2\n{\n\tmy $mysync = shift ;\n\t# Gmail at host2\n\t$mysync->{ host2 } ||= 'imap.gmail.com' ;\n\t$mysync->{ ssl2 } = ( defined $mysync->{ ssl2 } ) ? $mysync->{ ssl2 } : 1 ;\n\t$mysync->{ maxbytespersecond } ||= 20_000 ;     # should be less than 10_000 computed from by Gmail documentation\n\t$mysync->{ maxbytesafter } ||= 1_000_000_000 ;  # In fact it is documented as half: 500_000_000\n\n\t$mysync->{ automap } = ( defined $mysync->{ automap } ) ? $mysync->{ automap } : 1 ;\n\t#$skipcrossduplicates = ( defined $skipcrossduplicates ) ? $skipcrossduplicates : 1 ;\n\t$mysync->{ expunge1 }  = ( defined $mysync->{ expunge1 } )  ? $mysync->{ expunge1 }  : 1 ;\n\t$mysync->{ addheader } = ( defined $mysync->{ addheader } ) ? $mysync->{ addheader } : 1 ;\n\t$mysync->{ maxsleep }  = ( defined $mysync->{ maxsleep } )  ? $mysync->{ maxsleep } : $MAX_SLEEP ; ;\n\n        #$mysync->{ maxsize }  = ( defined $mysync->{ maxsize } )  ? $mysync->{ maxsize } : $GMAIL_MAXSIZE ;\n\n        if ( ! $mysync->{ noexclude } ) {\n                push @exclude, '\\[Gmail\\]$' ;\n        }\n        push @useheader, 'Message-Id' ;\n        push @{ $mysync->{ regextrans2 } }, 's,\\[Gmail\\].,,' ;\n\n        # push @{ $mysync->{ regextrans2 } }, 's/[ ]+/_/g' ; # is now replaced\n        # by the two more specific following regexes,\n        # they remove just the beginning and trailing blanks, not all.\n        push @{ $mysync->{ regextrans2 } }, 's,^ +| +$,,g' ;\n        push @{ $mysync->{ regextrans2 } }, 's,/ +| +/,/,g' ;\n        #\n\tpush @{ $mysync->{ regextrans2 } }, q{s/['\\\\^\"]/_/g} ; # Verified this\n        push @folderlast, '[Gmail]/All Mail' ;\n\treturn ;\n}\n\n\n# From https://imapsync.lamiral.info/FAQ.d/FAQ.Exchange.txt\nsub office1\n{\n        # Office 365 at host1\n        my $mysync = shift ;\n\n        output( $mysync, q{Option --office1 is like: --host1 outlook.office365.com --ssl1 --exclude \"^Files$\"} . \"\\n\" ) ;\n        output( $mysync, \"Option --office1 (cont) : unless overrided with --host1 otherhost --nossl1 --noexclude\\n\" ) ;\n        $mysync->{host1} ||= 'outlook.office365.com' ;\n        $mysync->{ssl1} = ( defined $mysync->{ssl1} ) ? $mysync->{ssl1} : 1 ;\n        if ( ! $mysync->{noexclude} ) {\n                push @exclude, '^Files$' ;\n        }\n        return ;\n}\n\n\nsub office2\n{\n        # Office 365 at host2\n        my $mysync = shift ;\n        output( $mysync, qq{Option --office2 is like: --host2 outlook.office365.com --ssl2 --maxsize 45_000_000 --maxmessagespersecond 4\\n} ) ;\n        output( $mysync, qq{Option --office2 (cont) : --disarmreadreceipts --regexmess \"wrap 10500\" --f1f2 \"Files=Files_renamed_by_imapsync\"\\n} ) ;\n        output( $mysync, qq{Option --office2 (cont) : unless overrided with --host2 otherhost --nossl2 ... --nodisarmreadreceipts --noregexmess\\n} ) ;\n        output( $mysync, qq{Option --office2 (cont) : and --nof1f2 to avoid Files folder renamed to Files_renamed_by_imapsync\\n} ) ;\n        $mysync->{host2} ||= 'outlook.office365.com' ;\n        $mysync->{ssl2} = ( defined $mysync->{ssl2} ) ? $mysync->{ssl2} : 1 ;\n        $mysync->{ maxsize } ||= 45_000_000 ;\n        $mysync->{maxmessagespersecond} ||= 4 ;\n        #push @{ $mysync->{ regexflag } }, 's/\\\\\\\\Flagged//g' ; # No problem without! tested 2018_09_10\n        $disarmreadreceipts = ( defined $disarmreadreceipts ) ? $disarmreadreceipts : 1 ;\n        # I dislike double negation but here is one\n        if ( ! $mysync->{noregexmess} )\n        {\n                push @regexmess, 's,(.{10239}),$1\\r\\n,g' ;\n        }\n        # and another...\n        if ( ! $mysync->{nof1f2} )\n        {\n                push @{ $mysync->{f1f2} }, 'Files=Files_renamed_by_imapsync' ;\n        }\n        return ;\n}\n\nsub exchange1\n{\n        # Exchange 2010/2013 at host1\n        my $mysync = shift ;\n        output( $mysync, \"Option --exchange1 does nothing (except printing this line...)\\n\" ) ;\n        # Well nothing to do so far\n        return ;\n}\n\nsub exchange2\n{\n        # Exchange 2010/2013 at host2\n        my $mysync = shift ;\n        output( $mysync, \"Option --exchange2 is like: --maxsize 10_000_000 --maxmessagespersecond 4 --disarmreadreceipts\\n\" ) ;\n        output( $mysync, \"Option --exchange2 (cont) : --regexflag del Flagged --regexmess wrap 10500\\n\" ) ;\n        output( $mysync, \"Option --exchange2 (cont) : unless overrided with --maxsize xxx --nodisarmreadreceipts --noregexflag --noregexmess\\n\" ) ;\n        $mysync->{ maxsize } ||= 10_000_000 ;\n        $mysync->{maxmessagespersecond} ||= 4 ;\n        $disarmreadreceipts = ( defined $disarmreadreceipts ) ? $disarmreadreceipts : 1 ;\n        # I dislike double negation but here are two\n        if ( ! $mysync->{noregexflag} ) {\n                push @{ $mysync->{ regexflag } }, 's/\\\\\\\\Flagged//g' ;\n        }\n        if ( ! $mysync->{noregexmess} ) {\n                push @regexmess, 's,(.{10239}),$1\\r\\n,g' ;\n        }\n        return ;\n}\n\nsub domino1\n{\n\t# Domino at host1\n\tmy $mysync = shift ;\n\n\t$mysync->{ sep1 }    = q{\\\\} ;\n\t$prefix1 = q{} ;\n\t$messageidnodomain = ( defined $messageidnodomain ) ? $messageidnodomain : 1 ;\n\treturn ;\n}\n\nsub domino2\n{\n\t# Domino at host1\n\tmy $mysync = shift ;\n\n\t$mysync->{ sep2 }    = q{\\\\} ;\n\t$prefix2 = q{} ;\n\t$messageidnodomain = ( defined $messageidnodomain ) ? $messageidnodomain : 1 ;\n\tpush @{ $mysync->{ regextrans2 } }, 's,^Inbox\\\\\\\\(.*),$1,i' ;\n\treturn ;\n}\n\n\nsub tests_resolv\n{\n\tnote( 'Entering tests_resolv()' ) ;\n\n\t# is( , resolv(  ), 'resolv:  => ' ) ;\n\tis( undef, resolv(  ), 'resolv: no args => undef' ) ;\n\tis( undef, resolv( q{} ), 'resolv: empty string => undef' ) ;\n\tis( undef, resolv( 'hostnotexist' ), 'resolv: hostnotexist => undef' ) ;\n\tis( '127.0.0.1', resolv( '127.0.0.1' ), 'resolv: 127.0.0.1 => 127.0.0.1' ) ;\n\tis( '127.0.0.1', resolv( 'localhost' ), 'resolv: localhost => 127.0.0.1' ) ;\n\tis( '2001:41d0:2:84e0::1', resolv( 'imapsync.lamiral.info' ), 'resolv: imapsync.lamiral.info => 2001:41d0:2:84e0::1' ) ;\n\n\t# ip6-localhost ( in /etc/hosts )\n\tis( '::1', resolv( 'ip6-localhost' ), 'resolv: ip6-localhost => ::1' ) ;\n\tis( '::1', resolv( '::1' ), 'resolv: ::1 => ::1' ) ;\n\t# ks2ipv6 now has CNAME ks6ipv6\n\tis( '2001:41d0:8:d8b6::1', resolv( '2001:41d0:8:d8b6::1' ),  'resolv:  2001:41d0:8:d8b6::1 => 2001:41d0:8:d8b6::1' ) ;\n\tis( '2001:41d0:8:9951::1', resolv( 'ks6ipv6.lamiral.info' ), 'resolv: ks6ipv6.lamiral.info => 2001:41d0:8:9951::1' ) ;\n\t# ks6\n\tis( '2001:41d0:8:9951::1', resolv( '2001:41d0:8:9951::1' ),  'resolv:  2001:41d0:8:9951::1 => 2001:41d0:8:9951::1' ) ;\n\tis( '2001:41d0:8:9951::1', resolv( 'ks6ipv6.lamiral.info' ), 'resolv: ks6ipv6.lamiral.info => 2001:41d0:8:9951::1' ) ;\n\t# ks3\n\tis( '2001:41d0:8:bebd::1', resolv( '2001:41d0:8:bebd::1' ),  'resolv:  2001:41d0:8:bebd::1 => 2001:41d0:8:bebd::1' ) ;\n\tis( '2001:41d0:8:bebd::1', resolv( 'ks3ipv6.lamiral.info' ), 'resolv: ks3ipv6.lamiral.info => 2001:41d0:8:bebd::1' ) ;\n\n\n\tnote( 'Leaving  tests_resolv()' ) ;\n        return ;\n}\n\n\n\nsub resolv\n{\n\tmy $host = shift @ARG ;\n\n\tif ( ! $host ) { return ; }\n        my $addr ;\n\tif ( defined &Socket::getaddrinfo ) {\n\t\t$addr = resolv_with_getaddrinfo( $host ) ;\n\t\treturn( $addr ) ;\n\t}\n\n\n\n        my $iaddr = inet_aton( $host ) ;\n        if ( ! $iaddr ) { return ; }\n        $addr = inet_ntoa( $iaddr ) ;\n\n\treturn $addr ;\n}\n\nsub resolv_with_getaddrinfo\n{\n\tmy $host = shift @ARG ;\n\n        $sync->{ debug } and myprint( \"Entering resolv_with_getaddrinfo( $host )\\n\" ) ;\n\tif ( ! $host ) { return ; }\n\n\tmy ( $err_getaddrinfo, @res ) = Socket::getaddrinfo( $host, \"\", { socktype => Socket::SOCK_RAW } ) ;\n\tif (  $err_getaddrinfo ) {\n\t\tmyprint( \"Cannot getaddrinfo of $host: $err_getaddrinfo\\n\" ) ;\n\t\treturn ;\n\t}\n\n\tmy @addr ;\n\twhile( my $ai = shift @res ) {\n\t\tmy ( $err_getnameinfo, $ipaddr ) = Socket::getnameinfo( $ai->{addr}, Socket::NI_NUMERICHOST(), Socket::NIx_NOSERV() ) ;\n\t\tif ( $err_getnameinfo ) {\n\t\t\tmyprint( \"Cannot getnameinfo of $host: $err_getnameinfo\\n\" ) ;\n\t\t\treturn ;\n\t\t}else{\n                        $sync->{ debug } and myprint( \"$host => $ipaddr\\n\" ) ;\n                        push @addr, $ipaddr ;\n                        my $reverse ;\n                        ( $err_getnameinfo, $reverse ) = Socket::getnameinfo( $ai->{addr}, 0, Socket::NIx_NOSERV() ) ;\n                        $sync->{ debug } and myprint( \"$host => $ipaddr => $reverse\\n\" ) ;\n                }\n                $sync->{ debug } and myprint( \"$host => $ipaddr\\n\" ) ;\n\n\t}\n        $sync->{ debug } and myprint( \"Leaving resolv_with_getaddrinfo( $host => $addr[0])\\n\" ) ;\n        return $addr[0] ;\n}\n\nsub tests_resolvrev\n{\n\tnote( 'Entering tests_resolvrev()' ) ;\n\n\t# is( , resolvrev(  ), 'resolvrev:  => ' ) ;\n\tis( undef, resolvrev(  ), 'resolvrev: no args => undef' ) ;\n\tis( undef, resolvrev( q{} ), 'resolvrev: empty string => undef' ) ;\n\tis( undef, resolvrev( 'hostnotexist' ), 'resolvrev: hostnotexist => undef' ) ;\n\tis( 'localhost', resolvrev( '127.0.0.1' ), 'resolvrev: 127.0.0.1 => localhost' ) ;\n\tis( 'localhost', resolvrev( 'localhost' ), 'resolvrev: localhost => localhost' ) ;\n\tis( 'ks.lamiral.info', resolvrev( 'imapsync.lamiral.info' ), 'resolvrev: imapsync.lamiral.info => ks.lamiral.info' ) ;\n\n\t# ip6-localhost ( in /etc/hosts )\n\tis( 'ip6-localhost', resolvrev( 'ip6-localhost' ), 'resolvrev: ip6-localhost => ip6-localhost' ) ;\n\tis( 'ip6-localhost', resolvrev( '::1' ), 'resolvrev: ::1 => ip6-localhost' ) ;\n\t# ks2\n\tis( 'ks6ipv6.lamiral.info', resolvrev( '2001:41d0:8:d8b6::1' ),  'resolvrev:  2001:41d0:8:d8b6::1 => ks6ipv6.lamiral.info' ) ;\n\tis( 'ks6ipv6.lamiral.info', resolvrev( 'ks6ipv6.lamiral.info' ), 'resolvrev: ks6ipv6.lamiral.info => ks6ipv6.lamiral.info' ) ;\n\t# ks3\n\tis( 'ks3ipv6.lamiral.info', resolvrev( '2001:41d0:8:bebd::1' ),  'resolvrev:  2001:41d0:8:bebd::1 => ks3ipv6.lamiral.info' ) ;\n\tis( 'ks3ipv6.lamiral.info', resolvrev( 'ks3ipv6.lamiral.info' ), 'resolvrev: ks3ipv6.lamiral.info => ks3ipv6.lamiral.info' ) ;\n\n\n\tnote( 'Leaving  tests_resolvrev()' ) ;\n        return ;\n}\n\nsub resolvrev\n{\n\tmy $host = shift @ARG ;\n\n\tif ( ! $host ) { return ; }\n\n\tif ( defined &Socket::getaddrinfo ) {\n\t\tmy $name = resolvrev_with_getaddrinfo( $host ) ;\n\t\treturn( $name ) ;\n\t}\n\n\treturn ;\n}\n\nsub resolvrev_with_getaddrinfo\n{\n\tmy $host = shift @ARG ;\n\n\tif ( ! $host ) { return ; }\n\n\tmy ( $err, @res ) = Socket::getaddrinfo( $host, \"\", { socktype => Socket::SOCK_RAW } ) ;\n\tif (  $err ) {\n\t\tmyprint( \"Cannot getaddrinfo of $host: $err\\n\" ) ;\n\t\treturn ;\n\t}\n\n\tmy @name ;\n\twhile( my $ai = shift @res ) {\n\t\tmy ( $err, $reverse ) = Socket::getnameinfo( $ai->{addr}, 0, Socket::NIx_NOSERV() ) ;\n\t\tif ( $err ) {\n\t\t\tmyprint( \"Cannot getnameinfo of $host: $err\\n\" ) ;\n\t\t\treturn ;\n\t\t}\n\t\t$sync->{ debug } and myprint( \"$host => $reverse\\n\" ) ;\n\t\tpush @name, $reverse ;\n\t}\n\n    return $name[0] ;\n}\n\n\n\nsub tests_imapsping\n{\n\tnote( 'Entering tests_imapsping()' ) ;\n\n\tis( undef, imapsping(  ), 'imapsping: no args => undef' ) ;\n\tis( undef, imapsping( 'hostnotexist' ), 'imapsping: hostnotexist => undef' ) ;\n\tis( 1, imapsping( 'imapsync.lamiral.info' ), 'imapsping: imapsync.lamiral.info => 1' ) ;\n        is( 1, imapsping( 'ks6ipv6.lamiral.info' ), 'imapsping: ks6ipv6.lamiral.info => 1' ) ;\n\tnote( 'Leaving  tests_imapsping()' ) ;\n\treturn ;\n}\n\nsub imapsping\n{\n\tmy $host = shift ;\n\treturn tcpping( $host, $IMAP_SSL_PORT ) ;\n}\n\nsub tests_tcpping\n{\n\tnote( 'Entering tests_tcpping()' ) ;\n\n\tis( undef, tcpping(  ), 'tcpping: no args => undef' ) ;\n\tis( undef, tcpping( 'hostnotexist' ), 'tcpping: one arg => undef' ) ;\n\tis( undef, tcpping( undef, 888 ), 'tcpping: arg undef, port => undef' ) ;\n\tis( undef, tcpping( 'hostnotexist', 993 ), 'tcpping: hostnotexist 993 => undef' ) ;\n\tis( undef, tcpping( 'hostnotexist', 888 ), 'tcpping: hostnotexist 888 => undef' ) ;\n\tis( 1, tcpping( 'imapsync.lamiral.info', 993 ), 'tcpping: imapsync.lamiral.info 993 => 1' ) ;\n\tis( 0, tcpping( 'imapsync.lamiral.info', 888 ), 'tcpping: imapsync.lamiral.info 888 => 0' ) ;\n\tis( 1, tcpping( '5.135.158.182', 993 ), 'tcpping: 5.135.158.182 993 => 1' ) ;\n\tis( 0, tcpping( '5.135.158.182', 888 ), 'tcpping: 5.135.158.182 888 => 0' ) ;\n\n\t# Net::Ping supports ipv6 only after release 1.50\n\t# http://cpansearch.perl.org/src/RURBAN/Net-Ping-2.59/Changes\n\t# Anyway I plan to avoid Net-Ping for that too long standing feature\n\t# Net-Ping is integrated in Perl itself, who knows ipv6 for a long time\n\tis( 1, tcpping( '2001:41d0:8:d8b6::1', 993 ), 'tcpping: 2001:41d0:8:d8b6::1 993 => 1' ) ;\n\tis( 0, tcpping( '2001:41d0:8:d8b6::1', 888 ), 'tcpping: 2001:41d0:8:d8b6::1 888 => 0' ) ;\n\n\tnote( 'Leaving  tests_tcpping()' ) ;\n\treturn ;\n}\n\nsub tcpping\n{\n\tif ( 2 != scalar( @ARG ) ) {\n\t\treturn ;\n\t}\n\tmy ( $host, $port ) = @ARG ;\n\tif ( ! $host ) { return ; }\n\tif ( ! $port ) { return ; }\n\n\tmy $mytimeout = $TCP_PING_TIMEOUT ;\n        require Net::Ping ;\n\t#my $p = Net::Ping->new( 'tcp' ) ;\n\tmy $p = Net::Ping->new(  ) ;\n\t$p->{port_num} = $port ;\n\t$p->service_check( 1 ) ;\n\t$p->hires( 1 ) ;\n\tmy ($ping_ok, $rtt, $ip ) = $p->ping( $host, $mytimeout ) ;\n\tif ( ! defined $ping_ok ) { return ; }\n\tmy $rtt_approx = sprintf( \"%.3f\", $rtt ) ;\n\t$sync->{ debug } and myprint( \"Host $host timeout $mytimeout port $port ok $ping_ok ip $ip acked in $rtt_approx s\\n\" ) ;\n\t$p->close(  ) ;\n\tif( $ping_ok ) {\n\t\treturn 1 ;\n\t}else{\n\t\treturn 0 ;\n\t}\n}\n\nsub tests_sslcheck\n{\n\tnote( 'Entering tests_sslcheck()' ) ;\n\n\tmy $mysync ;\n\n\tis( undef, sslcheck( $mysync ), 'sslcheck: no sslcheck => undef' ) ;\n\n\t$mysync = {\n\t\tsslcheck => 1,\n\t} ;\n\n\tis( 0, sslcheck( $mysync ), 'sslcheck: no host => 0' ) ;\n\n\t$mysync = {\n\t\tsslcheck => 1,\n\t\thost1 => 'test1.lamiral.info',\n\t\ttls1 => 1,\n\t} ;\n\n\tis( 0, sslcheck( $mysync ), 'sslcheck: tls1 => 0' ) ;\n\n\t$mysync = {\n\t\tsslcheck => 1,\n\t\thost1 => 'test1.lamiral.info',\n\t} ;\n\n\n\tis( 1, sslcheck( $mysync ), 'sslcheck: test1.lamiral.info => 1' ) ;\n\tis( 1, $mysync->{ssl1}, 'sslcheck: test1.lamiral.info => ssl1 1' ) ;\n\n\t$mysync->{sslcheck} = 0 ;\n\tis( undef, sslcheck( $mysync ), 'sslcheck: sslcheck off => undef' ) ;\n\n\t$mysync = {\n\t\tsslcheck => 1,\n\t\thost1 => 'test1.lamiral.info',\n                host2 => 'test2.lamiral.info',\n\t} ;\n\n        is( 2, sslcheck( $mysync ), 'sslcheck: test1.lamiral.info + test2.lamiral.info => 2' ) ;\n\n\t$mysync = {\n\t\tsslcheck => 1,\n\t\thost1 => 'test1.lamiral.info',\n                host2 => 'test2.lamiral.info',\n                tls1  => 1,\n\t} ;\n\n        is( 1, sslcheck( $mysync ), 'sslcheck: test1.lamiral.info + test2.lamiral.info + tls1 => 1' ) ;\n\n\tnote( 'Leaving  tests_sslcheck()' ) ;\n\treturn ;\n}\n\nsub sslcheck\n{\n\tmy $mysync = shift ;\n\n\tif ( ! $mysync->{sslcheck} ) {\n\t\treturn ;\n\t}\n\tmy $nb_on = 0 ;\n\t$mysync->{ debug } and myprint( \"sslcheck\\n\" ) ;\n\tif (\n\t\t( ! defined $mysync->{port1} )\n\t\tand\n\t\t( ! defined $mysync->{tls1} )\n\t\tand\n\t\t( ! defined $mysync->{ssl1} )\n\t\tand\n\t\t( defined $mysync->{host1} )\n\t) {\n                myprint( \"Host1: probing ssl on port $IMAP_SSL_PORT ( use --nosslcheck to avoid this ssl probe ) \\n\" ) ;\n                if (  probe_imapssl( $mysync->{host1} ) ) {\n                        $mysync->{ssl1} = 1 ;\n                        myprint( \"Host1: sslcheck detected open ssl port $IMAP_SSL_PORT so turning ssl on (use --nossl1 --notls1 to turn off SSL and TLS wizardry)\\n\" ) ;\n                        $nb_on++ ;\n                }else{\n                        myprint( \"Host1: sslcheck did not detected open ssl port $IMAP_SSL_PORT. Will use standard $IMAP_PORT port.\\n\" ) ;\n                }\n\t}\n\n\tif (\n\t\t( ! defined $mysync->{port2} )\n\t\tand\n\t\t( ! defined $mysync->{tls2} )\n\t\tand\n\t\t( ! defined $mysync->{ssl2} )\n\t\tand\n\t\t( defined $mysync->{host2} )\n\t) {\n                myprint( \"Host2: probing ssl on port $IMAP_SSL_PORT ( use --nosslcheck to avoid this ssl probe ) \\n\" ) ;\n                if (  probe_imapssl( $mysync->{host2} ) ) {\n                        $mysync->{ssl2} = 1 ;\n                        myprint( \"Host2: sslcheck detected open ssl port $IMAP_SSL_PORT so turning ssl on (use --nossl2 --notls2 to turn off SSL and TLS wizardry)\\n\" ) ;\n                        $nb_on++ ;\n                }else{\n                        myprint( \"Host2: sslcheck did not detected open ssl port $IMAP_SSL_PORT. Will use standard $IMAP_PORT port.\\n\" ) ;\n                }\n\t}\n\treturn $nb_on ;\n}\n\n\nsub testslive_init\n{\n        my $mysync = shift ;\n        $mysync->{host1}     ||= 'test1.lamiral.info' ;\n        $mysync->{user1}     ||= 'test1' ;\n        $mysync->{password1} ||= 'secret1' ;\n        $mysync->{host2}     ||= 'test2.lamiral.info' ;\n        $mysync->{user2}     ||= 'test2' ;\n        $mysync->{password2} ||= 'secret2' ;\n        return ;\n}\n\nsub testslive6_init\n{\n        my $mysync = shift ;\n        $mysync->{host1}     ||= 'ks6ipv6.lamiral.info' ;\n        $mysync->{user1}     ||= 'test1' ;\n        $mysync->{password1} ||= 'secret1' ;\n        $mysync->{host2}     ||= 'ks6ipv6.lamiral.info' ;\n        $mysync->{user2}     ||= 'test2' ;\n        $mysync->{password2} ||= 'secret2' ;\n        return ;\n}\n\n\nsub tests_backslash_caret\n{\n        note( 'Entering tests_backslash_caret()' ) ;\n\n        is( \"lalala\", backslash_caret( \"lalala\" ), 'backslash_caret: lalala => lalala' ) ;\n        is( \"lalala\\n\", backslash_caret( \"lalala\\n\" ), 'backslash_caret: lalala => lalala 2nd' ) ;\n        is( '^', backslash_caret( '\\\\' ), 'backslash_caret: \\\\ => ^' ) ;\n        is( \"^\\n\", backslash_caret( \"\\\\\\n\" ), 'backslash_caret: \\\\ => ^' ) ;\n        is( \"\\\\lalala\", backslash_caret( \"\\\\lalala\" ), 'backslash_caret: \\\\lalala => \\\\lalala' ) ;\n        is( \"\\\\lal\\\\ala\", backslash_caret( \"\\\\lal\\\\ala\" ), 'backslash_caret: \\\\lal\\\\ala => \\\\lal\\\\ala' ) ;\n        is( \"\\\\lalala\\n\", backslash_caret( \"\\\\lalala\\n\" ), 'backslash_caret: \\\\lalala => \\\\lalala 2nd' ) ;\n        is( \"lalala^\\n\", backslash_caret( \"lalala\\\\\\n\" ), 'backslash_caret: lalala\\\\\\n => lalala^\\n' ) ;\n        is( \"lalala^\\nlalala^\\n\", backslash_caret( \"lalala\\\\\\nlalala\\\\\\n\" ), 'backslash_caret: lalala\\\\\\nlalala\\\\\\n => lalala^\\nlalala^\\n' ) ;\n        is( \"lal\\\\ala^\\nlalala^\\n\", backslash_caret( \"lal\\\\ala\\\\\\nlalala\\\\\\n\" ), 'backslash_caret: lal\\\\ala\\\\\\nlalala\\\\\\n => lal\\\\ala^\\nlalala^\\n' ) ;\n\n        note( 'Leaving  tests_backslash_caret()' ) ;\n        return ;\n}\n\nsub backslash_caret\n{\n        my $string = shift ;\n\n        $string =~ s{\\\\ $ }{^}gxms ;\n\n        return $string ;\n}\n\nsub tests_split_around_equal\n{\n        note( 'Entering tests_split_around_equal()' ) ;\n\n        is( undef, split_around_equal(  ), 'split_around_equal: no args => undef' ) ;\n        is_deeply( { toto => 'titi' }, { split_around_equal( 'toto=titi' ) }, 'split_around_equal: toto=titi => toto => titi' ) ;\n        is_deeply( { A => 'B', C => 'D' }, { split_around_equal( 'A=B=C=D' ) }, 'split_around_equal: toto=titi => toto => titi' ) ;\n        is_deeply( { A => 'B', C => 'D' }, { split_around_equal( 'A=B', 'C=D' ) }, 'split_around_equal: A=B C=D => A => B, C=>D' ) ;\n\n        note( 'Leaving  tests_split_around_equal()' ) ;\n\treturn ;\n}\n\nsub split_around_equal\n{\n        if ( ! @ARG ) { return ; } ;\n        return map { split /=/mxs, $_ } @ARG ;\n\n}\n\n\n\nsub tests_sig_install\n{\n        note( 'Entering tests_sig_install()' ) ;\n\n        my $mysync ;\n        is( undef, sig_install(  ), 'sig_install: no args => undef' ) ;\n        is( undef, sig_install( $mysync ), 'sig_install: arg undef => undef' ) ;\n        $mysync = {  } ;\n        is( undef, sig_install( $mysync ), 'sig_install: empty hash => undef' ) ;\n\n        SKIP: {\n        Readonly my $SKIP_15 => 15 ;\n\tif ( 'MSWin32' eq $OSNAME ) { skip( 'Tests only for Unix', $SKIP_15 ) ; }\n        # Default to ignore USR1 USR2 in case future install fails\n        local $SIG{ USR1 } = local $SIG{ USR2 } = sub {  } ;\n        kill( 'USR1', $PROCESS_ID ) ;\n\n        $mysync->{ debugsig } = 1 ;\n        # Assign USR1 to call sub tototo\n        # Surely a better value than undef should be returned when doing real signal stuff\n        is( undef, sig_install( $mysync, 'tototo', 'USR1' ), 'sig_install: USR1 tototo' ) ;\n\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'sig_install: kill USR1 myself 1' ) ;\n        is( 1, $mysync->{ tototo_calls },   'sig_install: tototo call nb 1' ) ;\n\n        #return ;\n        # Assign USR2 to call sub tototo\n        is( undef, sig_install( $mysync, 'tototo', 'USR2' ), 'sig_install: USR2 tototo' ) ;\n\n        is( 1, kill( 'USR2', $PROCESS_ID ), 'sig_install: kill USR2 myself 1' ) ;\n        is( 2, $mysync->{ tototo_calls }, 'sig_install: tototo call nb 2' ) ;\n\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'sig_install: kill USR1 myself 2' ) ;\n        is( 3, $mysync->{ tototo_calls }, 'sig_install: tototo call nb 3' ) ;\n\n\n        local $SIG{ USR1 } = local $SIG{ USR2 } = sub {  } ;\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'sig_install: kill USR1 myself 3' ) ;\n        is( 3, $mysync->{ tototo_calls }, 'sig_install: tototo call still nb 3' ) ;\n\n        # Assign USR1 + USR2 to call sub tototo\n        is( undef, sig_install( $mysync, 'tototo', 'USR1', 'USR2' ), 'sig_install: USR1 USR2 tototo' ) ;\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'sig_install: kill USR1 myself 4' ) ;\n        is( 4, $mysync->{ tototo_calls }, 'sig_install: tototo call now nb 4' ) ;\n\n        is( 1, kill( 'USR2', $PROCESS_ID ), 'sig_install: kill USR1 myself 2' ) ;\n        is( 5, $mysync->{ tototo_calls },  'sig_install: tototo call now nb 5' ) ;\n        }\n\n\n        note( 'Leaving  tests_sig_install()' ) ;\n        return ;\n}\n\n\n#\nsub sig_install\n{\n        my $mysync = shift ;\n        if ( ! $mysync ) { return ; }\n        my $mysubname = shift ;\n        if ( ! $mysubname ) { return ; }\n\n        if ( ! @ARG ) { return ; }\n\n        my @signals = @ARG ;\n\n        my $mysub = \\&$mysubname ;\n        #$mysync->{ debugsig } = 1 ;\n        $mysync->{ debugsig } and myprint( \"In sig_install with sub $mysubname and signal @ARG\\n\" ) ;\n\n        my $subsignal = sub {\n                my $signame = shift ;\n                $mysync->{ debugsig } and myprint( \"In subsignal with $signame and $mysubname\\n\" ) ;\n                &$mysub( $mysync, $signame ) ;\n        } ;\n\n        foreach my $signal ( @signals ) {\n                $mysync->{ debugsig } and myprint(  \"Installing signal $signal to call sub $mysubname\\n\") ;\n                output( $mysync, \"kill -$signal $PROCESS_ID # special behavior: call to sub $mysubname\\n\" ) ;\n                ## no critic (RequireLocalizedPunctuationVars)\n                $SIG{ $signal } = $subsignal ;\n        }\n        return ;\n}\n\n\nsub tototo\n{\n        my $mysync = shift ;\n        myprint(\"In tototo with @ARG\\n\" ) ;\n        $mysync->{ tototo_calls } += 1 ;\n        return ;\n}\n\nsub mygetppid\n{\n        if ( 'MSWin32' eq $OSNAME ) {\n                return( 'unknown under MSWin32 (too complicated)'  ) ;\n        } else {\n                # Unix\n                return( getppid(  ) ) ;\n        }\n}\n\n\nsub tests_toggle_sleep\n{\n        note( 'Entering tests_toggle_sleep()' ) ;\n\n        is( undef, toggle_sleep(  ),  'toggle_sleep: no args => undef' ) ;\n        my $mysync ;\n        is( undef, toggle_sleep( $mysync ),  'toggle_sleep: undef => undef' ) ;\n        $mysync = {  } ;\n        is( undef, toggle_sleep( $mysync ),  'toggle_sleep: no maxsleep => undef' ) ;\n\n        $mysync->{maxsleep} = 3 ;\n        is( 0, toggle_sleep( $mysync ),  'toggle_sleep: 3 => 0' ) ;\n\n        is( $MAX_SLEEP, toggle_sleep( $mysync ),  \"toggle_sleep: 0          => $MAX_SLEEP\" ) ;\n        is( 0,          toggle_sleep( $mysync ),  \"toggle_sleep: $MAX_SLEEP => 0\" ) ;\n        is( $MAX_SLEEP, toggle_sleep( $mysync ),  \"toggle_sleep: 0          => $MAX_SLEEP\" ) ;\n        is( 0,          toggle_sleep( $mysync ),  \"toggle_sleep: $MAX_SLEEP => 0\" ) ;\n\n        SKIP: {\n        Readonly my $SKIP_9 => 9 ;\n\tif ( 'MSWin32' eq $OSNAME ) { skip( 'Tests only for Unix', $SKIP_9 ) ; }\n        # Default to ignore USR1 USR2 in case future install fails\n        local $SIG{ USR1 } = sub {  } ;\n        kill( 'USR1', $PROCESS_ID ) ;\n\n        $mysync->{ debugsig } = 1 ;\n        # Assign USR1 to call sub toggle_sleep\n        is( undef, sig_install( $mysync, \\&toggle_sleep, 'USR1' ), 'toggle_sleep: install USR1 toggle_sleep' ) ;\n\n\n        $mysync->{maxsleep} = 4 ;\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'toggle_sleep: kill USR1 myself' ) ;\n        is( 0, $mysync->{ maxsleep },   'toggle_sleep: toggle_sleep called => sleeps are 0s' ) ;\n\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'toggle_sleep: kill USR1 myself again' ) ;\n        is( $MAX_SLEEP, $mysync->{ maxsleep },   \"toggle_sleep: toggle_sleep called => sleeps are ${MAX_SLEEP}s\" ) ;\n\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'toggle_sleep: kill USR1 myself' ) ;\n        is( 0, $mysync->{ maxsleep },   'toggle_sleep: toggle_sleep called => sleeps are 0s' ) ;\n\n        is( 1, kill( 'USR1', $PROCESS_ID ), 'toggle_sleep: kill USR1 myself again' ) ;\n        is( $MAX_SLEEP, $mysync->{ maxsleep },   \"toggle_sleep: toggle_sleep called => sleeps are ${MAX_SLEEP}s\" ) ;\n        }\n\n        note( 'Leaving  tests_toggle_sleep()' ) ;\n\treturn ;\n}\n\n\nsub toggle_sleep\n{\n        my $mysync = shift ;\n\n        myprint(\"In toggle_sleep with @ARG\\n\" ) ;\n\n        if ( !defined( $mysync ) ) { return ; }\n        if ( !defined( $mysync->{maxsleep} ) ) { return ; }\n\n        $mysync->{ maxsleep } = max( 0, $MAX_SLEEP - $mysync->{maxsleep} ) ;\n        myprint(\"Resetting maxsleep to \", $mysync->{maxsleep}, \"s\\n\" ) ;\n        return $mysync->{maxsleep} ;\n}\n\nsub mypod2usage\n{\n        my $fh_pod2usage = shift ;\n\n        pod2usage(\n                -exitval   => 'NOEXIT',\n                -noperldoc => 1,\n                -verbose => 99,\n                -sections => [ qw(NAME VERSION USAGE OPTIONS) ],\n                -indent => 1,\n                -loose => 1,\n                -output => $fh_pod2usage,\n        ) ;\n\n        return ;\n}\n\nsub usage\n{\n\tmy $mysync = shift ;\n\n        if ( ! defined $mysync ) { return ; }\n\n        my $usage = q{} ;\n        my $usage_from_pod ;\n        my $usage_footer = usage_footer( $mysync ) ;\n\n        # pod2usage writes on a filehandle only and I want a variable\n        open my $fh_pod2usage, \">\", \\$usage_from_pod\n                or do { warn $OS_ERROR ; return ; } ;\n        mypod2usage( $fh_pod2usage ) ;\n        close $fh_pod2usage ;\n\n        if ( 'MSWin32' eq $OSNAME ) {\n                $usage_from_pod = backslash_caret( $usage_from_pod ) ;\n        }\n        $usage = join( q{}, $usage_from_pod, $usage_footer ) ;\n\n        return( $usage ) ;\n}\n\nsub tests_usage\n{\n        note( 'Entering tests_usage()' ) ;\n\n        my $usage ;\n        like( $usage = usage( $sync ), qr/Name:/, 'usage: contains Name:' ) ;\n        myprint( $usage ) ;\n        like( $usage, qr/Version:/, 'usage: contains Version:' ) ;\n        like( $usage, qr/Usage:/, 'usage: contains Usage:' ) ;\n        like( $usage, qr/imapsync/, 'usage: contains imapsync' ) ;\n\n        is( undef, usage(  ), 'usage: no args => undef' ) ;\n\n        note( 'Leaving  tests_usage()' ) ;\n        return ;\n}\n\n\nsub usage_footer\n{\n\tmy $mysync = shift ;\n\n        my $footer = q{} ;\n\n        my $localhost_info = localhost_info( $mysync ) ;\n        my $rcs = $mysync->{rcs} ;\n        my $homepage = homepage(  ) ;\n\n        my $imapsync_release = $STR_use_releasecheck  ;\n\n        if ( $mysync->{releasecheck} ) {\n                $imapsync_release = check_last_release(  )  ;\n        }\n\n        $footer = qq{$localhost_info\n$rcs\n$imapsync_release\n$homepage\n} ;\n        return( $footer ) ;\n}\n\n\n\nsub usage_complete\n{\n        # Unused, I guess this function could be deleted\n        my $usage = <<'EOF' ;\n--skipheader   reg     : Don't take into account header keyword\n                         matching  reg    ex: --skipheader 'X.*'\n\n--skipsize             : Don't take message size into account to compare\n                         messages on both sides. On by default.\n                         Use --no-skipsize for using size comparaison.\n--allowsizemismatch    : allow RFC822.SIZE != fetched msg size\n                         consider also --skipsize to avoid duplicate messages\n                         when running syncs more than one time per mailbox\n\n--reconnectretry1  int : reconnect to host1 if connection is lost up to\n                          int  times per imap command (default is 3)\n--reconnectretry2  int : same as --reconnectretry1 but for host2\n--split1      int      : split the requests in several parts on host1.\n                          int  is the number of messages handled per request.\n                         default is like --split1 100.\n--split2      int      : same thing on host2.\n--nofixInboxINBOX      : Don't fix Inbox INBOX mapping.\nEOF\n        return( $usage ) ;\n}\n\n\n\n\nsub setvalfromcgikey\n{\n        my ( $mysync, $mycgi, $key, $val ) = @ARG ;\n\n        my $badthings = 0 ;\n\n\n        my ( $name, $type, $struct ) ;\n        if ( $key !~ m/^([\\w\\d\\|]+)([=:][isf])?([\\+!\\@\\%])?$/mxs )\n        {\n                $badthings++ ;\n                next ;    # Unknown item\n        }\n        else\n        {\n                $name   = [ split '|', $1, 1 ]->[0] ; # option name ab|cd|ef => keep only ab\n                $type   = $2 ; # = or : followed by i or s or f\n                $struct = $3 ; # + or ! or @ or %\n        }\n\n        if ( ( $struct || q{} ) eq '+' )\n        {\n                ${$val} = $mycgi->param( $name ) ;    # \"Incremental\" integer\n        }\n        elsif ( $type )\n        {\n                my @values = $mycgi->multi_param( $name ) ;\n\n                #myprint( \"type[$type]values[@values]\\$struct[\", $struct || q{}, \"]val[$val]ref(val)[\", ref($val), \"]\\n\" ) ;\n                if ( ( $struct || q{} ) eq '%' or ref( $val ) eq 'HASH' )\n                {\n                        setvalfromhash( $val, $type, @values ) ;\n                }\n                else\n                {\n                        setvalfromlist( $mysync, $val, $name, $type, $struct, @values ) ;\n                }\n        }\n        else\n        {\n                setvalfromcheckbox( $mysync, $mycgi, $key, $name, $val ) ;\n        }\n\n        return $badthings ;\n}\n\nsub setvalfromlist\n{\n        my ( $mysync, $val, $name, $type, $struct, @values ) = @ARG ;\n        if ( $type =~ m/i$/mxs )\n        {\n                @values = map { q{} ne $_ ? int $_ : undef } @values ;\n        }\n        elsif ( $type =~ m/f$/mxs )\n        {\n                @values = map { 0 + $_ } @values ;\n        }\n\n        if ( ( $struct || q{} ) eq '@' )\n        {\n                @{ ${$val} } = @values ;\n                my @option = map { +( \"--$name\", \"$_\" ) } @values ;\n                push @{ $mysync->{ cmdcgi } }, @option ;\n        }\n        elsif ( ref( $val ) eq 'ARRAY' )\n        {\n                @{$val} = @values ;\n        }\n        elsif ( my $value = $values[0] )\n        {\n                ${$val} = $value ;\n                push @{ $mysync->{ cmdcgi } }, \"--$name\", $value ;\n        }\n        else\n        {\n        }\n\n        return ;\n}\nsub setvalfromhash\n{\n        my ( $val, $type, @values ) = @ARG ;\n\n        my %values = map { split /=/mxs, $_ } @values ;\n\n        if ( $type =~ m/i$/mxs )\n        {\n                foreach my $k ( keys %values )\n                {\n                        $values{$k} = int $values{$k} ;\n                }\n        }\n        elsif ( $type =~ m/f$/mxs )\n        {\n                foreach my $k ( keys %values ) {\n                        $values{$k} = 0 + $values{$k};\n                }\n        }\n\n        if ( 'REF' eq ref $val )\n        {\n                %{ ${$val} } = %values ;\n        }\n        else\n        {\n                %{$val} = %values ;\n        }\n\n        return ;\n}\n\n\nsub setvalfromcheckbox\n{\n        my ( $mysync, $mycgi, $key, $name, $val ) = @ARG ;\n\n        # Checkbox\n        # --noname is set by name=0 or name=\n        my $value = $mycgi->param( $name ) ;\n        if ( defined $value )\n        {\n                ${$val} = $value ;\n                if ( $value )\n                {\n                        push @{ $mysync->{ cmdcgi } }, \"--$name\" ;\n                }\n                else\n                {\n                        push @{ $mysync->{ cmdcgi } }, \"--no$name\" ;\n                }\n        }\n        else\n        {\n                ${$val} = undef ;\n        }\n        return ;\n}\n\nsub myGetOptions\n{\n\n        # Started as a copy of Luke Ross Getopt::Long::CGI\n        # https://metacpan.org/release/Getopt-Long-CGI\n        # So this sub function is under the same license as Getopt-Long-CGI Luke Ross wants it,\n        # which was Perl 5.6 or later licenses at the date of the copy.\n        # It also applies for the sub functions called from this one.\n\n        my $mysync        = shift @ARG ;\n        my $arguments_ref = shift @ARG ;\n        my %options       = @ARG ;\n\n        my $mycgi = $mysync->{cgi} ;\n\n        if ( not under_cgi_context() ) {\n\n                # Not CGI - pass upstream for normal command line handling\n                return Getopt::Long::GetOptionsFromArray( $arguments_ref, %options ) ;\n        }\n\n        # We must be in CGI context now\n        if ( ! defined( $mycgi ) ) { return ; }\n\n        my $badthings = 0 ;\n        foreach my $key ( sort keys %options ) {\n                my $val = $options{$key} ;\n\n                $badthings += setvalfromcgikey( $mysync, $mycgi, $key, $val ) ;\n\n        }\n\n        if ( $badthings ) {\n                return ;    # undef or ()\n        }\n        else {\n                return ( 1 ) ;\n        }\n}\n\n\n\nsub tests_get_options_extra\n{\n        note( 'Entering tests_get_options_extra()' ) ;\n\n        is( undef, get_options_extra(  ),  'get_options_extra: no args => undef' ) ;\n\n        my $mysync = {  } ;\n        is( undef, get_options_extra( $mysync ),  'get_options_extra: undef => undef' ) ;\n\n        my $cwd_save = getcwd(  ) ;\n\n        ok( (-d 'W/tmp/tests/options_extra/' or  mkpath( 'W/tmp/tests/options_extra/' )), 'get_options_extra: mkpath W/tmp/tests/options_extra/' ) ;\n\n        chdir 'W/tmp/tests/options_extra/' ;\n\n        is( '--debugimap1', string_to_file( '--debugimap1', 'options_extra.txt' ), 'get_options_extra: string_to_file filling options_extra.txt with --debugimap1' ) ;\n\n        is( '--debugimap1', file_to_string( 'options_extra.txt' ), 'get_options_extra: reading options_extra.txt is --debugimap1' ) ;\n\n        is( '', get_options_extra( $mysync ),  'get_options_extra:  --debugimap1 in options_extra.txt => nothing left, empty string return' ) ;\n\n        is( 1, $mysync->{ acc1 }->{ debugimap }, 'get_options_extra: --debugimap1 in options_extra.txt => ok, acc1->debugimap = 1' ) ;\n\n        is( '--tls1 proutcaca', string_to_file( '--tls1 proutcaca', 'options_extra.txt' ), 'get_options_extra: string_to_file filling options_extra.txt with --tls1 proutcaca' ) ;\n\n        is( 'proutcaca', get_options_extra( $mysync ),  'get_options_extra:  --tls1 proutcaca in options_extra.txt => proutcaca left, proutcaca return' ) ;\n\n        chdir $cwd_save ;\n\n        note( 'Leaving  tests_get_options_extra()' ) ;\n        return ;\n}\n\nsub get_options_extra\n{\n        my $mysync = shift @ARG ;\n\n        if ( ! defined $mysync ) { return ; }\n\n        if ( -f -r 'options_extra.txt' )\n        {\n                my $cwd = getcwd(  ) ;\n                my $string = firstline( 'options_extra.txt' ) ;\n                my $rest = get_options_from_string( $mysync, $string ) ;\n                output( $mysync, \"Reading extra options from file options_extra.txt (cwd: $cwd) : $string\\n\" ) ;\n                return $rest ;\n        }\n        else\n        {\n                return ;\n        }\n}\n\n\nsub tests_get_options_from_string\n{\n        note( 'Entering tests_get_options_from_string()' ) ;\n\n        is( undef, get_options_from_string(  ),  'get_options_from_string: no args => undef' ) ;\n        my $mysync = {  } ;\n        is( undef, get_options_from_string( $mysync ),  'get_options_from_string: undef => undef' ) ;\n\n        is( '', get_options_from_string( $mysync, '--debugimap1' ),\n        'get_options_from_string: --debugimap1 => ok, nothing left, empty string return' ) ;\n        is( 1, $mysync->{ acc1 }->{ debugimap }, 'get_options_from_string: --debugimap1 => ok, acc1->debugimap = 1' ) ;\n\n        $mysync = {  } ; # reset\n        is( 'caca', get_options_from_string( $mysync, '--debugimap1 caca' ),\n        'get_options_from_string: --debugimap1 caca => ok, caca left, caca return' ) ;\n        is( 1, $mysync->{ acc1 }->{ debugimap }, 'get_options_from_string: --debugimap1 => ok, acc1->debugimap = 1' ) ;\n\n        is( 'popo roro', get_options_from_string( $mysync, '--debugimap2 popo roro' ),\n        'get_options_from_string: --debugimap1 popo roro => ok, popo roro left, popo roro return' ) ;\n        is( 1, $mysync->{ acc2 }->{ debugimap }, 'get_options_from_string: --debugimap2 popo roro => ok, acc2->debugimap = 1' ) ;\n        is( 1, $mysync->{ acc1 }->{ debugimap }, 'get_options_from_string: acc1->debugimap = 1 still' ) ;\n\n        is( '', get_options_from_string( $mysync, '--nodebugimap1 --debugflags --errorsmax 2' ),\n        'get_options_from_string: --nodebugimap1 --debugflags --errorsmax 2 => ok, empty string return' ) ;\n\n        is( 0, $mysync->{ acc1 }->{ debugimap }, 'get_options_from_string: acc1->debugimap = 0 now' ) ;\n        is( 1, $debugflags, 'get_options_from_string: debugflags = 1 now' ) ;\n        is( 2, $mysync->{ errorsmax }, 'get_options_from_string: mysync->errorsmax = 2 now' ) ;\n\n        is( '', get_options_from_string( $mysync, '--folder \"IN BOX\" --folder JOE' ),\n        'get_options_from_string: --folder \"IN BOX\" --folder JOE => ok, empty string return' ) ;\n\n        is_deeply( [ 'IN BOX', 'JOE' ], [@{$mysync->{ folder  }}], 'get_options_from_string: \"IN BOX\" \"JOE\"' ) ;\n\n        is( '', get_options_from_string( $mysync, '--debugflags --koko' ),\n        'get_options_from_string: --debugflags --koko => ok, empty string return, with \"Unknown option: koko\" on STDERR' ) ;\n\n        note( 'Leaving  tests_get_options_from_string()' ) ;\n        return ;\n}\n\nsub get_options_from_string\n{\n        my $mysync = shift @ARG ;\n        my $mystring = shift @ARG ;\n\n        if ( ! defined $mystring ) { return ; }\n\n        my ( $ret, $args ) = Getopt::Long::GetOptionsFromString( $mystring,\n        'debugimap!'    => \\$mysync->{ debugimap },\n        'debugimap1!'   => \\$mysync->{ acc1 }->{ debugimap },\n        'debugimap2!'   => \\$mysync->{ acc2 }->{ debugimap },\n        'debugflags!'   => \\$debugflags,\n        'debugsleep=f'  => \\$mysync->{ debugsleep },\n        'errorsmax=i'   => \\$mysync->{ errorsmax },\n        'folder=s@'     => \\$mysync->{ folder  },\n        'timeout=f'     => \\$mysync->{ timeout },\n        'timeout1=f'    => \\$mysync->{ acc1 }->{ timeout },\n        'timeout2=f'    => \\$mysync->{ acc2 }->{ timeout },\n        'keepalive1!'   => \\$mysync->{ acc1 }->{ keepalive },\n        'keepalive2!'   => \\$mysync->{ acc2 }->{ keepalive },\n        'reconnectretry1=i' => \\$mysync->{ acc1 }->{ reconnectretry },\n        'reconnectretry2=i' => \\$mysync->{ acc2 }->{ reconnectretry },\n        'ssl1!'            => \\$mysync->{ ssl1 },\n        'ssl2!'            => \\$mysync->{ ssl2 },\n        'tls1!'            => \\$mysync->{ tls1 },\n        'tls2!'            => \\$mysync->{ tls2 },\n        'compress1!'       => \\$mysync->{ acc1 }->{ compress },\n        'compress2!'       => \\$mysync->{ acc2 }->{ compress },\n        ) ;\n        my $left = join( ' ', @$args ) ;\n        return $left ;\n}\n\n\n\n\n\n\nsub tests_get_options_cgi_context\n{\n\tnote( 'Entering tests_get_options_cgi_context()' ) ;\n\n\n# Temporary, have to think harder about testing CGI context in command line --tests\n\t# API:\n\t# * input arguments: two ways, command line or CGI\n\t#    * the program arguments\n\t#    * QUERY_STRING env variable\n\t# * return\n\t#   * QUERY_STRING length\n\n\t# CGI context\n\tlocal $ENV{SERVER_SOFTWARE} = 'Votre serviteur' ;\n\n\t# Real full test\n\t# = 'host1=test1.lamiral.info&user1=test1&password1=secret1&host2=test2.lamiral.info&user2=test2&password2=secret2&debugenv=on'\n\tmy $mysync ;\n\tis( undef, get_options( $mysync ), 'get_options cgi context: no CGI module => undef' ) ;\n\n        # skip all next tests if the CGI module is not available\n\n        SKIP: {\n                if ( ! eval { require CGI ; }  ) {\n                        skip( \"CGI Perl module is not installed\", 19 ) ;\n                }\n\n                CGI->import( qw( -no_debug  -utf8 ) ) ;\n\n\tis( undef, get_options( $mysync ), 'get_options cgi context: no CGI param => undef' ) ;\n\t# Testing boolean\n\t$mysync->{cgi} = CGI->new( 'version=on&debugenv=on' ) ;\n\tlocal $ENV{'QUERY_STRING'} = 'version=on&debugenv=on' ;\n\tis( 22,   get_options( $mysync ), 'get_options cgi context: QUERY_STRING => 22' ) ;\n\tis(  'on',   $mysync->{ version },        'get_options cgi context: --version => on' ) ;\n\t# debugenv is not allowed in cgi context\n\tis(  undef,   $mysync->{debugenv},        'get_options cgi context: $mysync->{debugenv} => undef' ) ;\n\n\t# QUERY_STRING in this test is only for return value of get_options\n\t# Have to think harder, GET/POST context, is this return value a good thing?\n\tlocal $ENV{'QUERY_STRING'} = 'host1=test1.lamiral.info&user1=test1' ;\n\t$mysync->{cgi} = CGI->new( 'host1=test1.lamiral.info&user1=test1' ) ;\n\tis( 36,      get_options( $mysync,  ), 'get_options cgi context: QUERY_STRING => 36' ) ;\n\tis( 'test1',  $mysync->{user1},    'get_options cgi context: $mysync->{user1} => test1' ) ;\n        #local $ENV{'QUERY_STRING'} = undef ;\n\n\t# Testing s@ as ref\n\t$mysync->{cgi} = CGI->new( 'folder=fd1' ) ;\n\tget_options( $mysync ) ;\n\tis_deeply( [ 'fd1' ],  $mysync->{ folder },    'get_options cgi context: $mysync->{ folder } => fd1' ) ;\n\t$mysync->{cgi} = CGI->new( 'folder=fd1&folder=fd2' ) ;\n\tget_options( $mysync ) ;\n\tis_deeply( [ 'fd1', 'fd2' ], $mysync->{ folder },    'get_options cgi context: $mysync->{ folder } => fd1, fd2' ) ;\n\n\t# Testing %\n\t$mysync->{cgi} = CGI->new( 'f1f2h=s1=d1&f1f2h=s2=d2&f1f2h=s3=d3' ) ;\n\tget_options( $mysync ) ;\n\n\tis_deeply( { 's1' => 'd1', 's2' => 'd2', 's3' => 'd3' },\n\t$mysync->{f1f2h}, 'get_options cgi context: f1f2h => s1=d1 s2=d2 s3=d3' ) ;\n\n\t# Testing boolean ! with --noxxx, doesnot work\n\t$mysync->{cgi} = CGI->new( 'nodry=on' ) ;\n        get_options( $mysync ) ;\n\tis( undef,  $mysync->{dry},    'get_options cgi context: --nodry => $mysync->{dry} => undef' ) ;\n\n\t$mysync->{cgi} = CGI->new( 'host1=example.com' ) ;\n        get_options( $mysync ) ;\n\tis( 'example.com',  $mysync->{host1},    'get_options cgi context: --host1=example.com => $mysync->{host1} => example.com' ) ;\n\n        #myprint( Data::Dumper->Dump( [ $mysync ] )  ) ;\n\t$mysync->{cgi} = CGI->new( 'simulong=' ) ;\n        get_options( $mysync ) ;\n\tis( undef,  $mysync->{simulong},    'get_options cgi context: --simulong= => $mysync->{simulong} => undef' ) ;\n\n\t$mysync->{cgi} = CGI->new( 'simulong' ) ;\n        get_options( $mysync ) ;\n\tis( undef,  $mysync->{simulong},    'get_options cgi context: --simulong => $mysync->{simulong} => undef' ) ;\n\n\t$mysync->{cgi} = CGI->new( 'simulong=4' ) ;\n        get_options( $mysync ) ;\n\tis( 4,  $mysync->{simulong},    'get_options cgi context: --simulong=4 => $mysync->{simulong} => 4' ) ;\n        is( undef,  $mysync->{ folder },    'get_options cgi context: --simulong=4 => $mysync->{ folder } => undef' ) ;\n        #myprint( Data::Dumper->Dump( [ $mysync ] )  ) ;\n\n        $mysync ={} ;\n        $mysync->{cgi} = CGI->new( 'testslive=on' ) ;\n        get_options( $mysync ) ;\n        is( 'on',  $mysync->{ testslive },    'get_options cgi context: --testslive=on => testslive => on' ) ;\n        #myprint( Data::Dumper->Dump( [ $mysync ] )  ) ;\n\n                $mysync ={} ;\n                $mysync->{cgi} = CGI->new( 'log=0' ) ;\n                get_options( $mysync ) ;\n                is( 0,  $mysync->{ log },    'get_options cgi context: --log=0 => log => 0' ) ;\n                #myprint( Data::Dumper->Dump( [ $mysync ] )  ) ;\n\n\n        # What is this fucked up indentation?\n        }\n\n\n\tnote( 'Leaving  tests_get_options_cgi_context()' ) ;\n\treturn ;\n}\n\n\n\nsub get_options_cgi\n{\n        # In CGI context arguments are not in @ARGV but in QUERY_STRING variable (with GET).\n\tmy $mysync = shift @ARG ;\n\t$mysync->{cgi} || return ;\n\tmy @arguments = @ARG ;\n\t# final 0 is used to print usage when no option is given\n        my $numopt = length $ENV{'QUERY_STRING'} || 1 ;\n\t$mysync->{f1f2h} = {} ;\n        my $opt_ret = myGetOptions(\n\t$mysync,\n\t\\@arguments,\n        'abort'            => \\$mysync->{ abort },\n        'abortbyfile'      => \\$mysync->{ abortbyfile },\n        'host1=s'          => \\$mysync->{ host1 },\n        'host2=s'          => \\$mysync->{ host2 },\n        'user1=s'          => \\$mysync->{ user1 },\n        'user2=s'          => \\$mysync->{ user2 },\n        'password1=s'      => \\$mysync->{ password1 },\n        'password2=s'      => \\$mysync->{ password2 },\n        'dry!'             => \\$mysync->{ dry },\n        'dry1!'            => \\$mysync->{ dry1 },\n        'version'          => \\$mysync->{ version },\n        'ssl1!'            => \\$mysync->{ ssl1 },\n        'ssl2!'            => \\$mysync->{ ssl2 },\n        'tls1!'            => \\$mysync->{ tls1 },\n        'tls2!'            => \\$mysync->{ tls2 },\n        'compress1!'       => \\$mysync->{ acc1 }->{ compress },\n        'compress2!'       => \\$mysync->{ acc2 }->{ compress },\n        'justbanner!'      => \\$mysync->{ justbanner },\n        'justlogin!'       => \\$mysync->{ justlogin },\n        'justconnect!'     => \\$mysync->{ justconnect },\n        'addheader!'       => \\$mysync->{ addheader },\n        'automap!'         => \\$mysync->{ automap },\n        'justautomap!'     => \\$mysync->{ justautomap },\n\t'gmail1'           => \\$mysync->{ gmail1 },\n\t'gmail2'           => \\$mysync->{ gmail2 },\n\t'office1'          => \\$mysync->{ office1 },\n\t'office2'          => \\$mysync->{ office2 },\n\t'exchange1'        => \\$mysync->{ exchange1 },\n\t'exchange2'        => \\$mysync->{ exchange2 },\n\t'domino1'          => \\$mysync->{ domino1 },\n\t'domino2'          => \\$mysync->{ domino2 },\n        'f1f2=s@'          => \\$mysync->{ f1f2 },\n        'f1f2h=s%'         => \\$mysync->{ f1f2h },\n        'folder=s@'        => \\$mysync->{ folder  },\n        'testslive!'       => \\$mysync->{ testslive },\n        'testslive6!'      => \\$mysync->{ testslive6 },\n        'releasecheck!'    => \\$mysync->{ releasecheck },\n        'simulong=f'       => \\$mysync->{ simulong },\n        'debugsleep=f'     => \\$mysync->{ debugsleep },\n        'subfolder1=s'     => \\$mysync->{ subfolder1 },\n        'subfolder2=s'     => \\$mysync->{ subfolder2 },\n        'justfolders!'     => \\$mysync->{ justfolders },\n        'justfoldersizes!' => \\$mysync->{ justfoldersizes },\n        'delete1!'         => \\$mysync->{ delete1 },\n        'delete2!'         => \\$mysync->{ delete2 },\n        'delete2duplicates!'  => \\$mysync->{ delete2duplicates },\n        'tail!'            => \\$mysync->{ tail },\n        'tmphash=s'        => \\$mysync->{ tmphash },\n        'exitwhenover=i'   => \\$mysync->{ exitwhenover },\n        'syncduplicates!'  => \\$mysync->{ syncduplicates },\n        'log!'             => \\$mysync->{ log },\n        'loglogfile!'      => \\$mysync->{ loglogfile },\n\n\n# f1f2h=s% could be removed but\n# tests_get_options_cgi() should be split before\n# with a sub tests_myGetOptions()\n        ) ;\n\n        $mysync->{ debug } and output( $mysync, \"get options: [$opt_ret][$numopt]\\n\" ) ;\n\n\tif ( ! $opt_ret ) {\n\t\treturn ;\n\t}\n\treturn $numopt ;\n}\n\nsub get_options_cmd\n{\n        my $mysync = shift @ARG ;\n        my @arguments = @ARG ;\n        my $mycgi = $mysync->{cgi} ;\n        # final 0 is used to print usage when no option is given on command line\n        my $numopt = scalar  @arguments || 0 ;\n        my $argv   = join \"\\x00\", @arguments ;\n\n        if ( $argv =~ m/-delete\\x002/x ) {\n                output( $mysync, \"May be you mean --delete2 instead of --delete 2\\n\" ) ;\n                return ;\n        }\n        $mysync->{f1f2h} = {} ;\n        my $opt_ret = myGetOptions(\n        $mysync,\n        \\@arguments,\n        'debug!'        => \\$mysync->{ debug },\n        'debuglist!'    => \\$debuglist,\n        'debugcontent!' => \\$mysync->{ debugcontent },\n        'debugsleep=f'  => \\$mysync->{ debugsleep },\n        'debugflags!'   => \\$debugflags,\n        'debugimap!'    => \\$mysync->{ debugimap },\n        'debugimap1!'   => \\$mysync->{ acc1 }->{ debugimap },\n        'debugimap2!'   => \\$mysync->{ acc2 }->{ debugimap },\n        'debugdev!'     => \\$debugdev,\n        'debugmemory!'  => \\$mysync->{debugmemory},\n        'debugfolders!' => \\$mysync->{debugfolders},\n        'debugssl=i'    => \\$mysync->{debugssl},\n        'debugcgi!'     => \\$debugcgi,\n        'debugenv!'     => \\$mysync->{debugenv},\n        'debugsig!'     => \\$mysync->{debugsig},\n        'debuglabels!'  => \\$mysync->{debuglabels},\n\n        'simulong=f'    => \\$mysync->{simulong},\n        'abort'         => \\$mysync->{abort},\n        'abortbyfile'   => \\$mysync->{abortbyfile},\n\n        'host1=s'       => \\$mysync->{ host1 },\n        'host2=s'       => \\$mysync->{ host2 },\n        'port1=i'       => \\$mysync->{ port1 },\n        'port2=i'       => \\$mysync->{ port2 },\n        'inet4|ipv4'    => \\$mysync->{ inet4 },\n        'inet6|ipv6'    => \\$mysync->{ inet6 },\n        'user1=s'     => \\$mysync->{ user1 },\n        'user2=s'     => \\$mysync->{ user2 },\n        'gmail1'      => \\$mysync->{gmail1},\n        'gmail2'      => \\$mysync->{gmail2},\n        'office1'     => \\$mysync->{office1},\n        'office2'     => \\$mysync->{office2},\n        'exchange1'   => \\$mysync->{exchange1},\n        'exchange2'   => \\$mysync->{exchange2},\n        'domino1'     => \\$mysync->{domino1},\n        'domino2'     => \\$mysync->{domino2},\n        'domain1=s'   => \\$mysync->{ acc1 }->{ domain },\n        'domain2=s'   => \\$mysync->{ acc2 }->{ domain },\n        'password1=s' => \\$mysync->{password1},\n        'password2=s' => \\$mysync->{password2},\n        'passfile1=s' => \\$mysync->{ passfile1 },\n        'passfile2=s' => \\$mysync->{ passfile2 },\n        'authmd5!'    => \\$authmd5,\n        'authmd51!'   => \\$authmd51,\n        'authmd52!'   => \\$authmd52,\n\n        'trylogin!'   => \\$mysync->{ trylogin },\n\n        'oauthdirect1=s' => \\$mysync->{ acc1 }->{ oauthdirect },\n        'oauthdirect2=s' => \\$mysync->{ acc2 }->{ oauthdirect },\n\n        'oauthaccesstoken1=s' => \\$mysync->{ acc1 }->{ oauthaccesstoken },\n        'oauthaccesstoken2=s' => \\$mysync->{ acc2 }->{ oauthaccesstoken },\n\n        'sep1=s'      => \\$mysync->{ sep1 },\n        'sep2=s'      => \\$mysync->{ sep2 },\n        'sanitize!'         => \\$mysync->{ sanitize },\n        'folder=s@'         => \\$mysync->{ folder },\n        'folderrec=s'       => \\@folderrec,\n        'include=s'         => \\@include,\n        'exclude=s'         => \\@exclude,\n        'noexclude'         => \\$mysync->{noexclude},\n        'folderfirst=s'     => \\@folderfirst,\n        'folderlast=s'      => \\@folderlast,\n        'prefix1=s'         => \\$prefix1,\n        'prefix2=s'         => \\$prefix2,\n        'subfolder1=s'      => \\$mysync->{ subfolder1 },\n        'subfolder2=s'      => \\$mysync->{ subfolder2 },\n        'fixslash2!'        => \\$mysync->{ fixslash2 },\n        'fixInboxINBOX!'    => \\$fixInboxINBOX,\n        'regextrans2=s@'    => \\$mysync->{ regextrans2 },\n        'mixfolders!'       => \\$mixfolders,\n        'skipemptyfolders!' => \\$mysync->{ skipemptyfolders },\n        'regexmess=s'       => \\@regexmess,\n        'noregexmess'       => \\$mysync->{noregexmess},\n        'skipmess=s'        => \\@skipmess,\n        'pipemess=s'        => \\@pipemess,\n        'pipemesscheck!'    => \\$pipemesscheck,\n        'disarmreadreceipts!' => \\$disarmreadreceipts,\n        'regexflag=s@'        => \\$mysync->{ regexflag },\n        'noregexflag'         => \\$mysync->{ noregexflag },\n        'filterflags!'        => \\$mysync->{ filterflags },\n        'filterbuggyflags!'   => \\$mysync->{ filterbuggyflags },\n        'flagscase!'          => \\$mysync->{ flagscase },\n        'syncflagsaftercopy!' => \\$syncflagsaftercopy,\n        'resyncflags!'        => \\$mysync->{ resyncflags },\n        'synclabels!'         => \\$mysync->{ synclabels },\n        'resynclabels!'       => \\$mysync->{ resynclabels },\n        'delete|delete1!'     => \\$mysync->{ delete1 },\n        'delete2!'            => \\$mysync->{ delete2 },\n        'delete2duplicates!'  => \\$mysync->{ delete2duplicates },\n        'delete2folders!'     => \\$delete2folders,\n        'delete2foldersonly=s'   => \\$delete2foldersonly,\n        'delete2foldersbutnot=s' => \\$delete2foldersbutnot,\n        'syncinternaldates!' => \\$syncinternaldates,\n        'idatefromheader!'   => \\$idatefromheader,\n        'syncacls!'          => \\$mysync->{ syncacls },\n        'maxsize=i'       => \\$mysync->{ maxsize },\n        'appendlimit=i'   => \\$mysync->{ appendlimit },\n        'truncmess=i'     => \\$mysync->{ truncmess },\n        'minsize=i'       => \\$minsize,\n        'maxage=f'        => \\$maxage,\n        'minage=f'        => \\$minage,\n        'search=s'        => \\$search,\n        'search1=s'       => \\$mysync->{ search1 },\n        'search2=s'       => \\$mysync->{ search2 },\n        'foldersizes!'      => \\$mysync->{ foldersizes },\n        'foldersizesatend!' => \\$mysync->{ foldersizesatend },\n        'dry!'              => \\$mysync->{dry},\n        'dry1!'             => \\$mysync->{dry1},\n        'expunge1|expunge!' => \\$mysync->{ expunge1 },\n        'expunge2!'         => \\$mysync->{ expunge2 },\n        'uidexpunge2!'      => \\$mysync->{ uidexpunge2 },\n        'subscribed'  => \\$subscribed,\n        'subscribe!'  => \\$subscribe,\n        'subscribeall|subscribe_all!'  => \\$subscribeall,\n        'justbanner!' => \\$mysync->{ justbanner },\n        'justfolders!'=> \\$mysync->{ justfolders },\n        'justfoldersizes!' => \\$mysync->{ justfoldersizes },\n        'version'     => \\$mysync->{version},\n        'help'        => \\$help,\n        'timeout=f'   =>  \\$mysync->{timeout},\n        'timeout1=f'   => \\$mysync->{ acc1 }->{timeout},\n        'timeout2=f'   => \\$mysync->{ acc2 }->{timeout},\n        'skipheader=s' => \\$mysync->{ skipheader },\n        'useheader=s' => \\@useheader,\n        'wholeheaderifneeded!'   => \\$wholeheaderifneeded,\n        'messageidnodomain!' => \\$messageidnodomain,\n        'skipsize!'   => \\$skipsize,\n        'allowsizemismatch!' => \\$allowsizemismatch,\n        'fastio1!'     => \\$mysync->{ acc1 }->{ fastio },\n        'fastio2!'     => \\$mysync->{ acc2 }->{ fastio },\n        'sslcheck!'    => \\$mysync->{sslcheck},\n        'ssl1!'        => \\$mysync->{ssl1},\n        'ssl2!'        => \\$mysync->{ssl2},\n        'ssl1_ssl_version=s' => \\$mysync->{ acc1 }->{sslargs}->{SSL_version},\n        'ssl2_ssl_version=s' => \\$mysync->{ acc2 }->{sslargs}->{SSL_version},\n        'sslargs1=s%'        => \\$mysync->{ acc1 }->{sslargs},\n        'sslargs2=s%'        => \\$mysync->{ acc2 }->{sslargs},\n        'tls1!'        => \\$mysync->{tls1},\n        'tls2!'        => \\$mysync->{tls2},\n        'uid1!'        => \\$uid1,\n        'uid2!'        => \\$uid2,\n        'authmech1=s' => \\$mysync->{ acc1 }->{ authmech },\n        'authmech2=s' => \\$mysync->{ acc2 }->{ authmech },\n        'authuser1=s' => \\$mysync->{ acc1 }->{ authuser },\n        'authuser2=s' => \\$mysync->{ acc2 }->{ authuser },\n        'proxyauth1'  => \\$mysync->{ acc1 }->{ proxyauth },\n        'proxyauth2'  => \\$mysync->{ acc2 }->{ proxyauth },\n        'compress1!'  => \\$mysync->{ acc1 }->{ compress },\n        'compress2!'  => \\$mysync->{ acc2 }->{ compress },\n        'keepalive1!'  => \\$mysync->{ acc1 }->{ keepalive },\n        'keepalive2!'  => \\$mysync->{ acc2 }->{ keepalive },\n        'split1=i'    => \\$split1,\n        'split2=i'    => \\$split2,\n        'buffersize=i' => \\$buffersize,\n        'reconnectretry1=i' => \\$mysync->{ acc1 }->{ reconnectretry },\n        'reconnectretry2=i' => \\$mysync->{ acc2 }->{ reconnectretry },\n        'tests!'          => \\$mysync->{ tests },\n        'testsdebug|tests_debug!' => \\$mysync->{ testsdebug },\n        'testsunit=s@'    => \\$mysync->{testsunit},\n        'testslive!'      => \\$mysync->{testslive},\n        'testslive6!'     => \\$mysync->{testslive6},\n        'justlogin!'      => \\$mysync->{justlogin},\n        'justconnect!'    => \\$mysync->{justconnect},\n        'tmpdir=s'        => \\$mysync->{ tmpdir },\n        'pidfile=s'       => \\$mysync->{pidfile},\n        'pidfilelocking!' => \\$mysync->{pidfilelocking},\n        'sigexit=s@'      => \\$mysync->{ sigexit },\n        'sigreconnect=s@' => \\$mysync->{ sigreconnect },\n        'sigignore=s@'    => \\$mysync->{ sigignore },\n        'releasecheck!'   => \\$mysync->{releasecheck},\n        'modulesversion|modules_version!' => \\$modulesversion,\n        'usecache!'    => \\$usecache,\n        'cacheaftercopy!' => \\$cacheaftercopy,\n        'debugcache!' => \\$debugcache,\n        'useuid!'     => \\$useuid,\n        'addheader!'  => \\$mysync->{addheader},\n        'exitwhenover=i' => \\$mysync->{ exitwhenover },\n        'checkselectable!' => \\$mysync->{ checkselectable },\n        'checkfoldersexist!' => \\$mysync->{ checkfoldersexist },\n        'checkmessageexists!' => \\$checkmessageexists,\n        'expungeaftereach!' => \\$mysync->{ expungeaftereach },\n        'abletosearch!'  => \\$mysync->{abletosearch},\n        'abletosearch1!' => \\$mysync->{abletosearch1},\n        'abletosearch2!' => \\$mysync->{abletosearch2},\n        'showpasswords!' => \\$mysync->{showpasswords},\n        'maxlinelength=i'        => \\$maxlinelength,\n        'maxlinelengthcmd=s'     => \\$maxlinelengthcmd,\n        'minmaxlinelength=i'     => \\$minmaxlinelength,\n        'debugmaxlinelength!'    => \\$debugmaxlinelength,\n        'fixcolonbug!'           => \\$fixcolonbug,\n        'create_folder_old!'     => \\$create_folder_old,\n        'maxmessagespersecond=f' => \\$mysync->{maxmessagespersecond},\n        'maxbytespersecond=i'    => \\$mysync->{maxbytespersecond},\n        'maxbytesafter=i'        => \\$mysync->{maxbytesafter},\n        'maxsleep=f'             => \\$mysync->{maxsleep},\n        'skipcrossduplicates!'   => \\$skipcrossduplicates,\n        'debugcrossduplicates!'  => \\$debugcrossduplicates,\n        'log!'                   => \\$mysync->{log},\n        'tail!'                  => \\$mysync->{tail},\n        'logfile=s'        => \\$mysync->{logfile},\n        'logdir=s'         => \\$mysync->{logdir},\n        'errorsmax=i'      => \\$mysync->{errorsmax},\n        'errorsdump!'      => \\$mysync->{ errorsdump },\n        'fetch_hash_set=s' => \\$fetch_hash_set,\n        'automap!'         => \\$mysync->{automap},\n        'justautomap!'     => \\$mysync->{justautomap},\n        'id!'              => \\$mysync->{id},\n        'f1f2=s@'          => \\$mysync->{f1f2},\n        'nof1f2'           => \\$mysync->{nof1f2},\n        'f1f2h=s%'         => \\$mysync->{f1f2h},\n        'justfolderlists!' => \\$mysync->{justfolderlists},\n        'delete1emptyfolders'   => \\$mysync->{delete1emptyfolders},\n        'checknoabletosearch!' => \\$mysync->{checknoabletosearch},\n        'syncduplicates!'  => \\$mysync->{ syncduplicates },\n        'dockercontext!'   => \\$mysync->{ dockercontext },\n\n\n        ) ;\n        #myprint( Data::Dumper->Dump( [ $mysync ] )  ) ;\n        $mysync->{ debug } and output( $mysync, \"get options: [$opt_ret][$numopt]\\n\" ) ;\n        my $numopt_after = scalar @arguments ;\n        #myprint( \"get options: [$opt_ret][$numopt][$numopt_after]\\n\" ) ;\n\n        # The $arguments[0] test is just because parallel adds \"\" when it is\n        # used with {=7=} in sync_parallel_unix.sh\n        if ( $numopt_after and $arguments[0] ) {\n                myprint(\n                        \"Found \", scalar( @arguments ), \" extra arguments : [@arguments]\\n\",\n                        \"It usually means a quoting issue in the command line \",\n                        \"or some misspelling options.\\n\",\n                ) ;\n                return ;\n        }\n        if ( ! $opt_ret ) {\n                return ;\n        }\n        return $numopt ;\n}\n\n\n\nsub tests_get_options\n{\n\tnote( 'Entering tests_get_options()' ) ;\n\n\t# CAVEAT: still setting global variables, be careful\n\t# with tests, the context increases! $debug stays on for example.\n\t# API:\n\t# * input arguments: two ways, command line or CGI\n\t#    * the program arguments\n\t#    * QUERY_STRING env variable\n\t# * return\n\t#   * undef if bad things happened like\n\t#     * options not known\n\t#     * --delete 2 input\n\t#   * number of arguments or QUERY_STRING length\n\tmy $mysync = {  } ;\n\tis( undef, get_options( $mysync, qw( --noexist ) ),                   'get_options: --noexist  => undef' ) ;\n        is( undef, $mysync->{ noexist },  'get_options: --noexist  => undef' ) ;\n        $mysync = {  } ;\n\tis( undef, get_options( $mysync, qw( --lalala --noexist --version ) ), 'get_options: --lalala --noexist --version  => undef' ) ;\n        is( 1,     $mysync->{ version }, 'get_options: --version => 1' ) ;\n        is( undef, $mysync->{ noexist },  'get_options: --noexist  => undef' ) ;\n        $mysync = {  } ;\n\tis( 1,     get_options( $mysync, qw( --delete2 ) ), 'get_options: --delete2 => 1' ) ;\n        is( 1, $mysync->{ delete2 },  'get_options: --delete2 => var delete2 = 1' ) ;\n        $mysync = {  } ;\n\tis( undef, get_options( $mysync, qw( --delete 2 ) ), 'get_options: --delete 2 => var undef' ) ;\n        is( undef, $mysync->{ delete1 },  'get_options: --delete 2 => var still undef ; good!' ) ;\n        $mysync = {  } ;\n\tis( undef, get_options( $mysync, \"--delete  2\" ), 'get_options: --delete  2 => undef' ) ;\n\n\tis( 1,     get_options( $mysync, \"--version\" ), 'get_options: --version => 1' ) ;\n\tis( 1,     get_options( $mysync, \"--help\" ), 'get_options: --help => 1' ) ;\n\n\tis( undef, get_options( $mysync, qw( --noexist --version ) ), 'get_options: --debug --noexist --version  => undef' ) ;\n\tis( 1,     get_options( $mysync, qw( --version ) ), 'get_options: --version => 1' ) ;\n\tis( undef, get_options( $mysync, qw( extra ) ), 'get_options: extra => undef' ) ;\n\tis( undef, get_options( $mysync, qw( extra1 --version extra2 ) ), 'get_options: extra1 --version extra2 => undef' ) ;\n\n        $mysync = {  } ;\n        is( 2, get_options( $mysync, qw( --host1 HOST_01) ), 'get_options: --host1 HOST_01 => 1' ) ;\n        is( 'HOST_01',  $mysync->{ host1 }, 'get_options: --host1 HOST_01 => HOST_01' ) ;\n        #myprint( Data::Dumper->Dump( [ $mysync ] )  ) ;\n\n\tnote( 'Leaving  tests_get_options()' ) ;\n\treturn ;\n}\n\n\n\nsub get_options\n{\n\tmy $mysync = shift @ARG ;\n\tmy @arguments = @ARG ;\n        #myprint( \"1 mysync: \", Data::Dumper->Dump( [ $mysync ] ) ) ;\n        my $ret ;\n\tif ( under_cgi_context(  ) ) {\n\t\t# CGI context\n\t\t$ret = get_options_cgi( $mysync, @arguments )  ;\n\t}else{\n\t\t# Command line context ;\n\t\t$ret = get_options_cmd( $mysync, @arguments )  ;\n\t} ;\n        #myprint( \"2 mysync: \", Data::Dumper->Dump( [ $mysync ] ) ) ;\n\n        foreach my $key ( sort keys %{ $mysync } ) {\n                if ( ! defined $mysync->{$key} ) {\n                        delete $mysync->{$key} ;\n                        next ;\n                }\n                if ( 'ARRAY' eq ref( $mysync->{$key} )\n                     and 0 == scalar( @{ $mysync->{$key} } ) ) {\n                        delete $mysync->{$key} ;\n                }\n        }\n\treturn $ret ;\n}\n\n\nsub tests_infos\n{\n        note( 'Entering tests_infos()' ) ;\n        note( \"OSNAME=$OSNAME\" ) ;\n        note( \"hostname=\". hostname() ) ;\n        note( \"cwd=\" . getcwd(  ) ) ;\n        note( \"PROGRAM_NAME=$PROGRAM_NAME\" ) ;\n        my $stat = stat(\"$PROGRAM_NAME\") ;\n        my $perms = sprintf( \"%04o\\n\", $stat->mode & oct($PERMISSION_FILTER) ) ;\n        note( \"permissions=$perms\" ) ;\n        note( \"PROCESS_ID=$PROCESS_ID\" ) ;\n        note( \"REAL_USER_ID=$REAL_USER_ID\" ) ;\n        note( \"EFFECTIVE_USER_ID=$EFFECTIVE_USER_ID\" ) ;\n        note( \"context: \" . imapsync_context( $sync ) ) ;\n        note( \"memory_consumption: \" . memory_consumption() . \" bytes aka \" . bytes_display_string_dec( memory_consumption() ) ) ;\n        cpu_number\n        note( \"cpu_number: \" . cpu_number() ) ;\n        note( $sync->{rcs} ) ;\n\n        note( 'Leaving  tests_infos()' ) ;\n        return ;\n}\n\n\n\nsub condition_to_leave_after_tests\n{\n        my $mysync = shift ;\n        if ( $mysync->{ testslive } or $mysync->{ testslive6 } )\n        {\n                return 0 ;\n        }\n\n        if ( $mysync->{ tests }\n          or $mysync->{ testsdebug }\n          or $mysync->{ testsunit }\n        )\n        {\n                return 1 ;\n        }\n}\n\n\nsub testunitsession\n{\n\tmy $mysync = shift ;\n\n\tif ( ! $mysync ) { return ; }\n\tif ( ! $mysync->{ testsunit } ) { return ; }\n\n\tmy @functions = @{ $mysync->{ testsunit } } ;\n\n\tif ( ! @functions ) { return ; }\n\n\tSKIP: {\n\t\tif ( ! @functions ) { skip 'No test in normal run' ; }\n\t\ttestsunit( @functions ) ;\n                done_testing(  ) ;\n\t}\n\treturn ;\n}\n\nsub tests_count_0s\n{\n\tnote( 'Entering tests_count_zeros()' ) ;\n\tis( 0, count_0s(  ), 'count_0s: no parameters => 0' ) ;\n\tis( 1, count_0s( 0 ), 'count_0s: 0 => 1' ) ;\n\tis( 0, count_0s( 1 ), 'count_0s: 1 => 0' ) ;\n\tis( 1, count_0s( 1, 0, 1 ), 'count_0s: 1, 0, 1 => 1' ) ;\n\tis( 2, count_0s( 1, 0, 1, 0 ), 'count_0s: 1, 0, 1, 0 => 2' ) ;\n\tnote( 'Leaving  tests_count_zeros()' ) ;\n\treturn ;\n}\nsub count_0s\n{\n\tmy @array = @ARG ;\n\n\tif ( ! @array ) { return 0 ; }\n\tmy $nb_zeros = 0 ;\n\tmap { $_ == 0 and $nb_zeros += 1 } @array ;\n\treturn $nb_zeros ;\n}\n\nsub tests_report_failures\n{\n        note( 'Entering tests_report_failures()' ) ;\n\n\tis( undef, report_failures(  ), 'report_failures: no parameters => undef' ) ;\n\tis( \"nb 1 - first\\n\", report_failures( ({'ok' => 0, name => 'first'}) ), 'report_failures: \"first\" failed => nb 1 - first' ) ;\n\tis( q{}, report_failures( ( {'ok' => 1, name => 'first'} ) ), 'report_failures: \"first\" success =>' ) ;\n\tis( \"nb 2 - second\\n\", report_failures( ( {'ok' => 1, name => 'second'}, {'ok' => 0, name => 'second'} ) ), 'report_failures: \"second\" failed => nb 2 - second' ) ;\n\tis( \"nb 1 - first\\nnb 2 - second\\n\", report_failures( ( {'ok' => 0, name => 'first'}, {'ok' => 0, name => 'second'} ) ), 'report_failures: both failed => nb 1 - first nb 2 - second' ) ;\n\tnote( 'Leaving  tests_report_failures()' ) ;\n\treturn ;\n}\n\nsub report_failures\n{\n\tmy @details = @ARG ;\n\n\tif ( ! @details ) { return ; }\n\n\tmy $counter = 1 ;\n\tmy $report  = q{} ;\n\tforeach my $details ( @details ) {\n\t\tif ( ! $details->{ 'ok' } ) {\n\t\t\tmy $name = $details->{ 'name' } || 'NONAME' ;\n\t\t\t$report .= \"nb $counter - $name\\n\" ;\n\t\t}\n\t\t$counter += 1 ;\n\t}\n\treturn $report ;\n\n}\n\nsub tests_true\n{\n\tnote( 'Entering tests_true()' ) ;\n\n\tis( 1, 1, 'true: 1 is 1' ) ;\n\tnote( 'Leaving  tests_true()' ) ;\n\treturn ;\n}\n\nsub tests_testsunit\n{\n\tnote( 'Entering tests_testunit()' ) ;\n\n\tis( undef, testsunit(  ), 'testsunit: no parameters => undef' ) ;\n\tis( undef, testsunit( undef ), 'testsunit: an undef parameter => undef' ) ;\n\tis( undef, testsunit( q{} ), 'testsunit: an empty parameter => undef' ) ;\n\tis( undef, testsunit( 'idonotexist' ), 'testsunit: a do not exist function as parameter => undef' ) ;\n\tis( undef, testsunit( 'tests_true' ), 'testsunit: tests_true => undef' ) ;\n\tnote( 'Leaving  tests_testunit()' ) ;\n\treturn ;\n}\n\nsub testsunit\n{\n\tmy @functions = @ARG ;\n\n\tif ( ! @functions ) { #\n                myprint( \"testsunit warning: no argument given\\n\" ) ;\n                return ;\n        }\n\n\tforeach my $function ( @functions ) {\n\t\tif ( ! $function ) {\n                        myprint( \"testsunit warning: argument is empty\\n\" ) ;\n                        next ;\n                }\n\t\tif ( ! exists &$function ) {\n                        myprint( \"testsunit warning: function $function does not exist\\n\" ) ;\n                        next ;\n                }\n\t\tif ( ! defined &$function ) {\n                        myprint( \"testsunit warning: function $function is not defined\\n\" ) ;\n                        next ;\n                }\n\t\tmy $function_ref = \\&{ $function } ;\n\t\t&$function_ref() ;\n\t}\n\treturn ;\n}\n\nsub testsdebug\n{\n        # Now a little obsolete since there is\n        # imapsync ... --testsunit \"anyfunction\"\n        my $mysync = shift ;\n        if ( ! $mysync->{ testsdebug } ) { return ; }\n        SKIP: {\n                if ( ! $mysync->{ testsdebug } ) {\n                        skip 'No test in normal run' ;\n                }\n\n                note( 'Entering testsdebug()' ) ;\n                #ok( ( ( not -d 'W/tmp/tests' ) or rmtree( 'W/tmp/tests/' ) ), 'testsdebug: rmtree W/tmp/tests' ) ;\n                #tests_check_binary_embed_all_dyn_libs(  ) ;\n                #tests_killpid_by_parent(  ) ;\n                #tests_killpid_by_brother(  ) ;\n                #tests_kill_zero(  ) ;\n                #tests_connect_socket(  ) ;\n                #tests_probe_imapssl(  ) ;\n                #tests_cpu_number(  ) ;\n                #tests_mailimapclient_connect(  ) ;\n\t\t\t\ttests_loadavg(  ) ;\n                #tests_always_fail(  ) ;\n\n                note( 'Leaving  testsdebug()' ) ;\n                done_testing(  ) ;\n        }\n        return ;\n}\n\n\nsub tests\n{\n        my $mysync = shift ;\n        if ( ! $mysync->{ tests } ) { return ; }\n\n        SKIP: {\n                skip 'No test in normal run' if ( ! $mysync->{ tests } ) ;\n                note( 'Entering tests()' ) ;\n                tests_folder_routines(  ) ;\n                tests_compare_lists(  ) ;\n                tests_regexmess(  ) ;\n                tests_skipmess(  ) ;\n                tests_regexflags(  );\n                tests_ucsecond(  ) ;\n                tests_permanentflags();\n                tests_flags_filter(  ) ;\n                tests_separator_invert(  ) ;\n                tests_imap2_folder_name(  ) ;\n                tests_command_line_nopassword(  ) ;\n                tests_good_date(  ) ;\n                tests_max(  ) ;\n                tests_remove_not_num();\n                tests_memory_consumption( ) ;\n                tests_is_a_release_number();\n                tests_imapsync_basename();\n                tests_list_keys_in_2_not_in_1();\n                tests_convert_sep_to_slash(  ) ;\n                tests_match_a_cache_file(  ) ;\n                tests_cache_map(  ) ;\n                tests_get_cache(  ) ;\n                tests_clean_cache(  ) ;\n                tests_clean_cache_2(  ) ;\n                tests_touch(  ) ;\n                tests_flagscase(  ) ;\n                tests_mkpath(  ) ;\n                tests_extract_header(  ) ;\n                tests_decompose_header(  ) ;\n                tests_epoch(  ) ;\n                tests_add_header(  ) ;\n                tests_cache_dir_fix(  ) ;\n                tests_cache_dir_fix_win(  ) ;\n                tests_filter_forbidden_characters(  ) ;\n                tests_cache_folder(  ) ;\n                tests_time_remaining(  ) ;\n                tests_decompose_regex(  ) ;\n                tests_backtick(  ) ;\n                tests_bytes_display_string_bin(  ) ;\n                tests_bytes_display_string_dec(  ) ;\n                tests_header_line_normalize(  ) ;\n                tests_fix_Inbox_INBOX_mapping(  ) ;\n                tests_max_line_length(  ) ;\n                tests_subject(  ) ;\n                tests_msgs_from_maxmin(  ) ;\n                tests_tmpdir_has_colon_bug(  ) ;\n                tests_sleep_max_messages(  ) ;\n                tests_sleep_max_bytes(  ) ;\n                tests_logfile(  ) ;\n                tests_setlogfile(  ) ;\n                tests_jux_utf8_old(  ) ;\n                tests_jux_utf8(  ) ;\n                tests_pipemess(  ) ;\n                tests_jux_utf8_list(  ) ;\n                tests_guess_prefix(  ) ;\n                tests_guess_separator(  ) ;\n                tests_format_for_imap_arg(  ) ;\n                tests_imapsync_id(  ) ;\n                tests_date_from_rcs(  ) ;\n                tests_quota_extract_storage_limit_in_bytes(  ) ;\n                tests_quota_extract_storage_current_in_bytes(  ) ;\n                tests_guess_special(  ) ;\n                tests_do_valid_directory(  ) ;\n                tests_delete1emptyfolders(  ) ;\n                tests_message_for_host2(  ) ;\n                tests_length_ref(  ) ;\n                tests_firstline(  ) ;\n                tests_diff_or_NA(  ) ;\n                tests_match_number(  ) ;\n                tests_all_defined(  ) ;\n                tests_special_from_folders_hash(  ) ;\n\t\ttests_notmatch(  ) ;\n\t\ttests_match(  ) ;\n\t\ttests_get_options(  ) ;\n\t\ttests_get_options_cgi_context(  ) ;\n\t\ttests_rand32(  ) ;\n\t\ttests_hashsynclocal(  ) ;\n\t\ttests_hashsync(  ) ;\n\t\ttests_output(  ) ;\n\t\ttests_output_reset_with(  ) ;\n\t\ttests_output_start(  ) ;\n\t\ttests_check_last_release(  ) ;\n\t\ttests_loadavg(  ) ;\n\t\ttests_cpu_number(  ) ;\n\t\ttests_load_and_delay(  ) ;\n\t\t#tests_imapsping(  ) ;\n\t\t#tests_tcpping(  ) ;\n\t\ttests_sslcheck(  ) ;\n\t\ttests_not_long_imapsync_version_public(  ) ;\n\t\ttests_reconnect_if_needed(  ) ;\n\t\ttests_reconnect_12_if_needed(  ) ;\n\t\ttests_sleep_if_needed(  ) ;\n\t\ttests_string_to_file(  ) ;\n\t\ttests_file_to_string(  ) ;\n\t\ttests_under_cgi_context(  ) ;\n\t\ttests_umask(  ) ;\n\t\ttests_umask_str(  ) ;\n\t\ttests_set_umask(  ) ;\n\t\ttests_createhashfileifneeded(  ) ;\n\t\ttests_slash_to_underscore(  ) ;\n\t\ttests_testsunit(  ) ;\n\t\ttests_count_0s(  ) ;\n\t\ttests_report_failures(  ) ;\n\t\ttests_min(  ) ;\n\t\t#tests_connect_socket(  ) ;\n\t\t#tests_resolvrev(  ) ;\n                tests_usage(  ) ;\n                tests_version_from_rcs(  ) ;\n                tests_backslash_caret(  ) ;\n                #tests_mailimapclient_connect_bug(  ) ; # it fails with Mail-IMAPClient <= 3.39\n                tests_write_pidfile(  ) ;\n                tests_remove_pidfile_not_running(  ) ;\n                tests_match_a_pid_number(  ) ;\n                tests_prefix_seperator_invertion(  ) ;\n                tests_is_integer(  ) ;\n                tests_integer_or_1(  ) ;\n                tests_is_number(  ) ;\n                tests_sig_install(  ) ;\n                tests_template(  ) ;\n                tests_split_around_equal(  ) ;\n                tests_toggle_sleep(  ) ;\n                tests_labels(  ) ;\n                tests_synclabels(  ) ;\n                tests_uidexpunge_or_expunge(  ) ;\n                tests_appendlimit_from_capability(  ) ;\n                tests_maxsize_setting(  ) ;\n                tests_mock_capability(  ) ;\n                tests_appendlimit(  ) ;\n                tests_capability_of(  ) ;\n                tests_search_in_array(  ) ;\n                tests_operators_and_exclam_precedence(  ) ;\n                tests_teelaunch(  ) ;\n                tests_logfileprepa(  ) ;\n                tests_useheader_suggestion(  ) ;\n                tests_nb_messages_in_2_not_in_1(  ) ;\n                tests_labels_add_subfolder2(  ) ;\n                tests_labels_remove_subfolder1(  ) ;\n                tests_resynclabels(  ) ;\n                tests_labels_remove_special(  ) ;\n                tests_uniq(  ) ;\n                tests_remove_from_requested_folders(  ) ;\n                tests_errors_log(  ) ;\n                tests_add_subfolder1_to_folderrec(  ) ;\n                tests_sanitize_subfolder(  ) ;\n                tests_remove_edging_blanks(  ) ;\n                tests_sanitize(  ) ;\n                tests_remove_last_char_if_is(  ) ;\n                tests_check_binary_embed_all_dyn_libs(  ) ;\n                tests_nthline(  ) ;\n                tests_secondline(  ) ;\n                tests_tail(  ) ;\n                tests_truncmess(  ) ;\n                tests_eta(  ) ;\n                tests_timesince(  ) ;\n                tests_timenext(  ) ;\n                tests_foldersize(  ) ;\n                tests_imapsync_context(  ) ;\n                tests_abort(  ) ;\n                tests_probe_imapssl(  ) ;\n                tests_mailimapclient_connect(  ) ;\n                tests_checknoabletosearch(  ) ;\n                tests_errorsdump(  ) ;\n                tests_errorsanalyse(  ) ;\n                tests_most_common_error(  ) ;\n                tests_errorclassify(  ) ;\n                tests_error_type(  ) ;\n                tests_sanitize_host(  ) ;\n                tests_hmac_sha1_hex(  ) ;\n                tests_total_bytes_max_reached(  ) ;\n                tests_header_construct(  ) ;\n                tests_remove_doublequotes_if_any(  ) ;\n                tests_login_imap(  ) ;\n                tests_login_imap_oauth(  ) ;\n                tests_skipmess_neg(  ) ;\n                tests_localtimez(  ) ;\n                tests_file_to_array(  ) ;\n                tests_cpu_time(  ) ;\n                tests_cpu_percent(  ) ;\n                tests_cpu_percent_global(  ) ;\n                tests_flags_for_host2(  ) ;\n                tests_under_docker_context(  ) ;\n                tests_exit_value(  ) ;\n                tests_comment_of_error_type(  ) ;\n                tests_debugcontent(  ) ;\n                tests_compress_ssl(  ) ;\n                tests_compress(  ) ;\n                tests_get_options_extra(  ) ;\n                tests_get_options_from_string(  ) ;\n                tests_infos(  ) ;\n                #tests_resolv(  ) ;\n\n                # Those three are for later use, when webserver will be inside imapsync\n                # or will be deleted them if I abandon the project.\n                #tests_killpid_by_parent(  ) ;\n                #tests_killpid_by_brother(  ) ;\n                #tests_kill_zero(  ) ;\n\n                #tests_always_fail(  ) ;\n                done_testing( 1860 ) ;\n                note( 'Leaving  tests()' ) ;\n        }\n        return ;\n}\n\nsub tests_template\n{\n        note( 'Entering tests_template()' ) ;\n\n        is( undef, template(  ),  'template: no args => undef' ) ;\n        my $mysync = {  } ;\n        is( undef, template( $mysync ),  'template: undef => undef' ) ;\n        is_deeply( {}, {}, 'template: a hash is a hash' ) ;\n        is_deeply( [], [], 'template: an array is an array' ) ;\n\n        note( 'Leaving  tests_template()' ) ;\n        return ;\n}\n\nsub template\n{\n        my $mysync = shift @ARG ;\n\n        return ;\n}\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/imapsync_runner.pl",
    "content": "#!/usr/bin/perl\n\nuse DBI;\nuse LockFile::Simple qw(lock trylock unlock);\nuse Proc::ProcessTable;\nuse Data::Dumper qw(Dumper);\nuse IPC::Run 'run';\nuse File::Temp;\nuse Try::Tiny;\nuse sigtrap 'handler' => \\&sig_handler, qw(INT TERM KILL QUIT);\n\nsub trim { my $s = shift; $s =~ s/^\\s+|\\s+$//g; return $s };\nmy $t = Proc::ProcessTable->new;\nmy $imapsync_running = grep { $_->{cmndline} =~ /imapsync\\s/i } @{$t->table};\nif ($imapsync_running ge 1)\n{\n  print \"imapsync is active, exiting...\";\n  exit;\n}\n\nsub qqw($) {\n  my @params = ();\n  my @values = split(/(?=--)/, $_[0]);\n  foreach my $val (@values) {\n    my @tmpparam = split(/ /, $val, 2);\n    foreach my $tmpval (@tmpparam) {\n        if ($tmpval ne '') {\n          push @params, $tmpval;\n        }\n    }\n  }\n  foreach my $val (@params) {\n    $val=trim($val);\n  }\n  return @params;\n}\n\n$run_dir=\"/tmp\";\n$dsn = 'DBI:mysql:database=' . $ENV{'DBNAME'} . ';mysql_socket=/var/run/mysqld/mysqld.sock';\n$lock_file = $run_dir . \"/imapsync_busy\";\n$lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1);\n$lockmgr->lock($lock_file) || die \"can't lock ${lock_file}\";\n$dbh = DBI->connect($dsn, $ENV{'DBUSER'}, $ENV{'DBPASS'}, {\n  mysql_auto_reconnect => 1,\n  mysql_enable_utf8mb4 => 1\n});\n$dbh->do(\"UPDATE imapsync SET is_running = 0\");\n\nsub sig_handler {\n  # Send die to force exception in \"run\"\n  die \"sig_handler received signal, preparing to exit...\\n\";\n};\n\nopen my $file, '<', \"/etc/sogo/sieve.creds\"; \nmy $creds = <$file>; \nclose $file;\nmy ($master_user, $master_pass) = split /:/, $creds;\nmy $sth = $dbh->prepare(\"SELECT id,\n  user1,\n  user2,\n  host1,\n  authmech1,\n  password1,\n  exclude,\n  port1,\n  enc1,\n  delete2duplicates,\n  maxage,\n  subfolder2,\n  delete1,\n  delete2,\n  automap,\n  skipcrossduplicates,\n  maxbytespersecond,\n  custom_params,\n  subscribeall,\n  timeout1,\n  timeout2,\n  dry\n    FROM imapsync\n      WHERE active = 1\n        AND is_running = 0\n        AND (\n          UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(last_run) > mins_interval * 60\n          OR\n          last_run IS NULL)\n  ORDER BY last_run\");\n\n$sth->execute();\nmy $row;\n\nwhile ($row = $sth->fetchrow_arrayref()) {\n\n  $id                  = @$row[0];\n  $user1               = @$row[1];\n  $user2               = @$row[2];\n  $host1               = @$row[3];\n  $authmech1           = @$row[4];\n  $password1           = @$row[5];\n  $exclude             = @$row[6];\n  $port1               = @$row[7];\n  $enc1                = @$row[8];\n  $delete2duplicates   = @$row[9];\n  $maxage              = @$row[10];\n  $subfolder2          = @$row[11];\n  $delete1             = @$row[12];\n  $delete2             = @$row[13];\n  $automap             = @$row[14];\n  $skipcrossduplicates = @$row[15];\n  $maxbytespersecond   = @$row[16];\n  $custom_params       = @$row[17];\n  $subscribeall        = @$row[18];\n  $timeout1            = @$row[19];\n  $timeout2            = @$row[20];\n  $dry                 = @$row[21];\n\n  if ($enc1 eq \"TLS\") { $enc1 = \"--tls1\"; } elsif ($enc1 eq \"SSL\") { $enc1 = \"--ssl1\"; } else { undef $enc1; }\n\n  my $template = $run_dir . '/imapsync.XXXXXXX';\n  my $passfile1 = File::Temp->new(TEMPLATE => $template);\n  my $passfile2 = File::Temp->new(TEMPLATE => $template);\n  \n  binmode( $passfile1, \":utf8\" );\n  \n  print $passfile1 \"$password1\\n\";\n  print $passfile2 trim($master_pass) . \"\\n\";\n\n  my @custom_params_a = qqw($custom_params);\n  my $custom_params_ref = \\@custom_params_a;\n\n  my $generated_cmds = [ \"/usr/local/bin/imapsync\",\n  \"--tmpdir\", \"/tmp\",\n  \"--nofoldersizes\",\n  \"--addheader\",\n  ($timeout1 le \"0\" ? () : ('--timeout1', $timeout1)),\n  ($timeout2 le \"0\" ? () : ('--timeout2', $timeout2)),\n  ($exclude eq \"\" ? () : (\"--exclude\", $exclude)),\n  ($subfolder2 eq \"\" ? () : ('--subfolder2', $subfolder2)),\n  ($maxage eq \"0\" ? () : ('--maxage', $maxage)),\n  ($maxbytespersecond eq \"0\" ? () : ('--maxbytespersecond', $maxbytespersecond)),\n  ($delete2duplicates ne \"1\" ? () : ('--delete2duplicates')),\n  ($subscribeall  ne \"1\" ? () : ('--subscribeall')),\n  ($delete1 ne \"1\" ? () : ('--delete')),\n  ($delete2 ne \"1\" ? () : ('--delete2')),\n  ($automap ne \"1\" ? () : ('--automap')),\n  ($skipcrossduplicates ne \"1\" ? () : ('--skipcrossduplicates')),\n  (!defined($enc1) ? () : ($enc1)),\n  \"--host1\", $host1,\n  \"--user1\", $user1,\n  \"--passfile1\", $passfile1->filename,\n  \"--port1\", $port1,\n  \"--host2\", \"localhost\",\n  \"--user2\", $user2 . '*' . trim($master_user),\n  \"--passfile2\", $passfile2->filename,\n  ($dry eq \"1\" ? ('--dry') : ()),\n  '--no-modulesversion',\n  '--noreleasecheck'];\n\n  try {\n    $is_running = $dbh->prepare(\"UPDATE imapsync SET is_running = 1, success = NULL, exit_status = NULL WHERE id = ?\");\n    $is_running->bind_param( 1, ${id} );\n    $is_running->execute();\n\n    run [@$generated_cmds, @$custom_params_ref], '&>', \\my $stdout;\n\n    # check exit code and status\n    ($exit_code, $exit_status) = ($stdout =~ m/Exiting\\swith\\sreturn\\svalue\\s(\\d+)\\s\\(([^:)]+)/);\n\n    $success = 0;\n    if (defined $exit_code && $exit_code == 0) {\n      $success = 1;\n    }\n\n    $update = $dbh->prepare(\"UPDATE imapsync SET returned_text = ?, success = ?, exit_status = ? WHERE id = ?\");\n    $update->bind_param( 1, ${stdout} );\n    $update->bind_param( 2, ${success} );\n    $update->bind_param( 3, ${exit_status} );\n    $update->bind_param( 4, ${id} );\n    $update->execute();\n  } catch {\n    $update = $dbh->prepare(\"UPDATE imapsync SET returned_text = 'Could not start or finish imapsync', success = 0 WHERE id = ?\");\n    $update->bind_param( 1, ${id} );\n    $update->execute();\n  } finally {\n    $update = $dbh->prepare(\"UPDATE imapsync SET last_run = NOW(), is_running = 0 WHERE id = ?\");\n    $update->bind_param( 1, ${id} );\n    $update->execute();\n  };\n\n\n}\n\n$sth->finish();\n$dbh->disconnect();\n\n$lockmgr->unlock($lock_file);\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/maildir_gc.sh",
    "content": "#!/bin/bash\n[ -d /var/vmail/_garbage/ ] && /usr/bin/find /var/vmail/_garbage/ -mindepth 1 -maxdepth 1 -type d -cmin +${MAILDIR_GC_TIME} -exec rm -r {} \\;\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/optimize-fts.sh",
    "content": "#!/bin/bash\n\nif [[ \"${SKIP_FTS}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n    exit 0\nelse\n    doveadm fts optimize -A\nfi\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/quarantine_notify.py",
    "content": "#!/usr/bin/python3\n\nimport smtplib\nimport os\nimport sys\nimport MySQLdb\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.text import MIMEText\nfrom email.utils import COMMASPACE, formatdate\nimport jinja2\nfrom jinja2 import TemplateError\nfrom jinja2.sandbox import SandboxedEnvironment\nimport json\nimport redis\nimport time\nimport html2text\nimport socket\n\npid = str(os.getpid())\npidfile = \"/tmp/quarantine_notify.pid\"\n\nif os.path.isfile(pidfile):\n  print(\"%s already exists, exiting\" % (pidfile))\n  sys.exit()\n\npid = str(os.getpid())\nf = open(pidfile, 'w')\nf.write(pid)\nf.close()\n\ntry:\n\n  while True:\n    try:\n      r = redis.StrictRedis(host='redis', decode_responses=True, port=6379, db=0, password=os.environ['REDISPASS'])\n      r.ping()\n    except Exception as ex:\n      print('%s - trying again...'  % (ex))\n      time.sleep(3)\n    else:\n      break\n\n  time_now = int(time.time())\n  mailcow_hostname = os.environ.get('MAILCOW_HOSTNAME')\n\n  max_score = float(r.get('Q_MAX_SCORE') or \"9999.0\")\n  if max_score == \"\":\n    max_score = 9999.0\n\n  def query_mysql(query, headers = True, update = False):\n    while True:\n      try:\n        cnx = MySQLdb.connect(user=os.environ.get('DBUSER'), password=os.environ.get('DBPASS'), database=os.environ.get('DBNAME'), charset=\"utf8mb4\", collation=\"utf8mb4_general_ci\")\n      except Exception as ex:\n        print('%s - trying again...'  % (ex))\n        time.sleep(3)\n      else:\n        break\n    cur = cnx.cursor()\n    cur.execute(query)\n    if not update:\n      result = []\n      columns = tuple( [d[0] for d in cur.description] )\n      for row in cur:\n        if headers:\n          result.append(dict(list(zip(columns, row))))\n        else:\n          result.append(row)\n      cur.close()\n      cnx.close()\n      return result\n    else:\n      cnx.commit()\n      cur.close()\n      cnx.close()\n\n  def notify_rcpt(rcpt, msg_count, quarantine_acl, category):\n    if category == \"add_header\": category = \"add header\"\n    meta_query = query_mysql('SELECT `qhash`, id, subject, score, sender, created, action FROM quarantine WHERE notified = 0 AND rcpt = \"%s\" AND score < %f AND (action = \"%s\" OR \"all\" = \"%s\")' % (rcpt, max_score, category, category))\n    print(\"%s: %d of %d messages qualify for notification\" % (rcpt, len(meta_query), msg_count))\n    if len(meta_query) == 0:\n      return\n    msg_count = len(meta_query)\n    env = SandboxedEnvironment()\n    if r.get('Q_HTML'):\n        try:\n            template = env.from_string(r.get('Q_HTML'))\n        except Exception:\n            print(\"Error: Cannot parse quarantine template, falling back to default template.\")\n            with open('/templates/quarantine.tpl') as file_:\n                template = env.from_string(file_.read())\n    else:\n        with open('/templates/quarantine.tpl') as file_:\n            template = env.from_string(file_.read())\n    try:\n        html = template.render(meta=meta_query, username=rcpt, counter=msg_count, hostname=mailcow_hostname, quarantine_acl=quarantine_acl)\n    except (jinja2.exceptions.SecurityError, TemplateError) as ex:\n        print(f\"SecurityError or TemplateError in template rendering: {ex}\")\n        return\n    text = html2text.html2text(html)\n    count = 0\n    while count < 15:\n      count += 1\n      try:\n        server = smtplib.SMTP('postfix', 590, 'quarantine')\n        server.ehlo()\n        msg = MIMEMultipart('alternative')\n        msg_from = r.get('Q_SENDER') or \"quarantine@localhost\"\n        # Remove non-ascii chars from field\n        msg['From'] = ''.join([i if ord(i) < 128 else '' for i in msg_from])\n        msg['Subject'] = r.get('Q_SUBJ') or \"Spam Quarantine Notification\"\n        msg['Date'] = formatdate(localtime = True)\n        text_part = MIMEText(text, 'plain', 'utf-8')\n        html_part = MIMEText(html, 'html', 'utf-8')\n        msg.attach(text_part)\n        msg.attach(html_part)\n        msg['To'] = str(rcpt)\n        bcc = r.get('Q_BCC') or \"\"\n        redirect = r.get('Q_REDIRECT') or \"\"\n        text = msg.as_string()\n        if bcc == '':\n          if redirect == '':\n            server.sendmail(msg['From'], str(rcpt), text)\n          else:\n            server.sendmail(msg['From'], str(redirect), text)\n        else:\n          if redirect == '':\n            server.sendmail(msg['From'], [str(rcpt)] + [str(bcc)], text)\n          else:\n            server.sendmail(msg['From'], [str(redirect)] + [str(bcc)], text)\n        server.quit()\n        for res in meta_query:\n         query_mysql('UPDATE quarantine SET notified = 1 WHERE id = \"%d\"' % (res['id']), update = True)\n        r.hset('Q_LAST_NOTIFIED', record['rcpt'], time_now)\n        break\n      except Exception as ex:\n        server.quit()\n        print('%s'  % (ex))\n        time.sleep(3)\n\n  records = query_mysql('SELECT IFNULL(user_acl.quarantine, 0) AS quarantine_acl, count(id) AS counter, rcpt FROM quarantine LEFT OUTER JOIN user_acl ON user_acl.username = rcpt WHERE notified = 0 AND score < %f AND rcpt in (SELECT username FROM mailbox) GROUP BY rcpt' % (max_score))\n\n  for record in records:\n    attrs = ''\n    attrs_json = ''\n    time_trans = {\n      \"hourly\": 3600,\n      \"daily\": 86400,\n      \"weekly\": 604800\n    }\n    try:\n      last_notification = int(r.hget('Q_LAST_NOTIFIED', record['rcpt']))\n      if last_notification > time_now:\n        print('Last notification is > time now, assuming never')\n        last_notification = 0\n    except Exception as ex:\n      print('Could not determine last notification for %s, assuming never' % (record['rcpt']))\n      last_notification = 0\n    attrs_json = query_mysql('SELECT attributes FROM mailbox WHERE username = \"%s\"' % (record['rcpt']))\n    attrs = attrs_json[0]['attributes']\n    if isinstance(attrs, str):\n      # if attr is str then just load it\n      attrs = json.loads(attrs)\n    else:\n      # if it's bytes then decode and load it\n      attrs = json.loads(attrs.decode('utf-8'))\n    if attrs['quarantine_notification'] not in ('hourly', 'daily', 'weekly'):\n      continue\n    if last_notification == 0 or (last_notification + time_trans[attrs['quarantine_notification']]) <= time_now:\n      print(\"Notifying %s: Considering %d new items in quarantine (policy: %s)\" % (record['rcpt'], record['counter'], attrs['quarantine_notification']))\n      notify_rcpt(record['rcpt'], record['counter'], record['quarantine_acl'], attrs['quarantine_category'])\n\nfinally:\n  os.unlink(pidfile)\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/quota_notify.py",
    "content": "#!/usr/bin/python3\n\nimport smtplib\nimport os\nfrom email.mime.multipart import MIMEMultipart\nfrom email.mime.text import MIMEText\nfrom email.utils import COMMASPACE, formatdate\nimport jinja2\nfrom jinja2.sandbox import SandboxedEnvironment\nimport redis\nimport time\nimport json\nimport sys\nimport html2text\nfrom subprocess import Popen, PIPE, STDOUT\n\nif len(sys.argv) > 2:\n  percent = int(sys.argv[1])\n  username = str(sys.argv[2])\nelse:\n  print(\"Args missing\")\n  sys.exit(1)\n\nwhile True:\n  try:\n    r = redis.StrictRedis(host='redis', decode_responses=True, port=6379, db=0, username='quota_notify', password='')\n    r.ping()\n  except Exception as ex:\n    print('%s - trying again...'  % (ex))\n    time.sleep(3)\n  else:\n    break\n\nif r.get('QW_HTML'):\n  try:\n    env = SandboxedEnvironment()\n    template = env.from_string(r.get('QW_HTML'))\n  except Exception:\n    print(\"Error: Cannot parse quota template, falling back to default template.\")\n    with open('/templates/quota.tpl') as file_:\n      env = SandboxedEnvironment()\n      template = env.from_string(file_.read())\nelse:\n  with open('/templates/quota.tpl') as file_:\n    env = SandboxedEnvironment()\n    template = env.from_string(file_.read())\n\ntry:\n  html = template.render(username=username, percent=percent)\nexcept (jinja2.exceptions.SecurityError, jinja2.TemplateError) as ex:\n  print(f\"SecurityError or TemplateError in template rendering: {ex}\")\n  sys.exit(1)\n\ntext = html2text.html2text(html)\n\ntry:\n  msg = MIMEMultipart('alternative')\n  msg['From'] = r.get('QW_SENDER') or \"quota-warning@localhost\"\n  msg['Subject'] = r.get('QW_SUBJ') or \"Quota warning\"\n  msg['Date'] = formatdate(localtime = True)\n  text_part = MIMEText(text, 'plain', 'utf-8')\n  html_part = MIMEText(html, 'html', 'utf-8')\n  msg.attach(text_part)\n  msg.attach(html_part)\n  msg['To'] = username\n  p = Popen(['/usr/libexec/dovecot/dovecot-lda', '-d', username, '-o', '\"plugin/quota=maildir:User quota:noenforcing\"'], stdout=PIPE, stdin=PIPE, stderr=STDOUT)\n  p.communicate(input=bytes(msg.as_string(), 'utf-8'))\n\n  domain = username.split(\"@\")[-1]\n  if domain and r.hget('QW_BCC', domain):\n    bcc_data = json.loads(r.hget('QW_BCC', domain))\n    bcc_rcpts = bcc_data['bcc_rcpts']\n    if bcc_data['active'] == 1:\n      for rcpt in bcc_rcpts:\n        msg = MIMEMultipart('alternative')\n        msg['From'] = username\n        subject = r.get('QW_SUBJ') or \"Quota warning\"\n        msg['Subject'] = subject + ' (' + username + ')'\n        msg['Date'] = formatdate(localtime = True)\n        text_part = MIMEText(text, 'plain', 'utf-8')\n        html_part = MIMEText(html, 'html', 'utf-8')\n        msg.attach(text_part)\n        msg.attach(html_part)\n        msg['To'] = rcpt\n        server = smtplib.SMTP('postfix', 588, 'quotanotification')\n        server.ehlo()\n        server.sendmail(msg['From'], str(rcpt), msg.as_string())\n        server.quit()\n\nexcept Exception as ex:\n  print('Failed to send quota notification: %s' % (ex))\n  sys.exit(1)\n\ntry:\n  sys.stdout.close()\nexcept:\n  pass\n\ntry:\n  sys.stderr.close()\nexcept:\n  pass\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/repl_health.sh",
    "content": "#!/bin/bash\n\nsource /source_env.sh\n\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  REDIS_CMDLINE=\"redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning\"\nelse\n  REDIS_CMDLINE=\"redis-cli -h redis -p 6379 -a ${REDISPASS} --no-auth-warning\"\nfi\n\n# Is replication active?\n# grep on file is less expensive than doveconf\nif [ -n ${MAILCOW_REPLICA_IP} ]; then\n  ${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null\n  exit\nfi\n\nFAILED_SYNCS=$(doveadm replicator status | grep \"Waiting 'failed' requests\" | grep -oE '[0-9]+')\n\n# Set amount of failed jobs as DOVECOT_REPL_HEALTH\n# 1 failed job for mailcow.local is expected and healthy\nif [[ \"${FAILED_SYNCS}\" != 0 ]] && [[ \"${FAILED_SYNCS}\" != 1 ]]; then\n  printf \"Dovecot replicator has %d failed jobs\\n\" \"${FAILED_SYNCS}\"\n  ${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH \"${FAILED_SYNCS}\" > /dev/null\nelse\n  ${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null\nfi\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/report-ham.sieve",
    "content": "require [\"vnd.dovecot.pipe\", \"copy\", \"imapsieve\", \"environment\", \"variables\"];\n\nif environment :matches \"imap.mailbox\" \"*\" {\n  set \"mailbox\" \"${1}\";\n}\n\nif string \"${mailbox}\" \"Trash\" {\n  stop;\n}\n\npipe :copy \"rspamd-pipe-ham\";\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/report-spam.sieve",
    "content": "require [\"vnd.dovecot.pipe\", \"copy\"];\n\npipe :copy \"rspamd-pipe-spam\";\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/rspamd-pipe-ham",
    "content": "#!/bin/bash\nFILE=/tmp/mail$$\ncat > $FILE\ntrap \"/bin/rm -f $FILE\" 0 1 2 3 13 15\n\ncat ${FILE} | /usr/bin/curl -H \"Flag: 11\" -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/fuzzydel\ncat ${FILE} | /usr/bin/curl -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/learnham\ncat ${FILE} | /usr/bin/curl -H \"Flag: 13\" -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/fuzzyadd\n\nexit 0\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/rspamd-pipe-spam",
    "content": "#!/bin/bash\nFILE=/tmp/mail$$\ncat > $FILE\ntrap \"/bin/rm -f $FILE\" 0 1 2 3 13 15\n\ncat ${FILE} | /usr/bin/curl -H \"Flag: 13\" -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/fuzzydel\ncat ${FILE} | /usr/bin/curl -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/learnspam\ncat ${FILE} | /usr/bin/curl -H \"Flag: 11\" -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/fuzzyadd\n\nexit 0\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/sa-rules.sh",
    "content": "#!/bin/bash\n\n# Create temp directories\n[[ ! -d /tmp/sa-rules-heinlein ]] && mkdir -p /tmp/sa-rules-heinlein\n\n# Hash current SA rules\nif [[ ! -f /etc/rspamd/custom/sa-rules ]]; then\n  HASH_SA_RULES=0\nelse\n  HASH_SA_RULES=$(cat /etc/rspamd/custom/sa-rules | md5sum | cut -d' ' -f1)\nfi\n\n# Deploy\nif curl --connect-timeout 15 --retry 5 --max-time 30 https://www.spamassassin.heinlein-support.de/$(dig txt 1.4.3.spamassassin.heinlein-support.de +short | tr -d '\"' | tr -dc '0-9').tar.gz --output /tmp/sa-rules-heinlein.tar.gz; then\n  if gzip -t /tmp/sa-rules-heinlein.tar.gz; then\n    tar xfvz /tmp/sa-rules-heinlein.tar.gz -C /tmp/sa-rules-heinlein\n    cat /tmp/sa-rules-heinlein/*cf > /etc/rspamd/custom/sa-rules\n  fi\nelse\n  echo \"Failed to download SA rules. Exiting.\"\n  exit 0 # Must be 0 otherwise dovecot would not start at all\nfi\n\nsed -i -e 's/\\([^\\\\]\\)\\$\\([^\\/]\\)/\\1\\\\$\\2/g' /etc/rspamd/custom/sa-rules\n\nif [[ \"$(cat /etc/rspamd/custom/sa-rules | md5sum | cut -d' ' -f1)\" != \"${HASH_SA_RULES}\" ]]; then\n  CONTAINER_NAME=rspamd-mailcow\n  CONTAINER_ID=$(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | \\\n    jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" | \\\n    jq -rc \"select( .name | tostring | contains(\\\"${CONTAINER_NAME}\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\")\n  if [[ ! -z ${CONTAINER_ID} ]]; then\n    curl --silent --insecure -XPOST --connect-timeout 15 --max-time 120 https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/restart\n  fi\nfi\n\n# Cleanup\nrm -rf /tmp/sa-rules-heinlein /tmp/sa-rules-heinlein.tar.gz\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/stop-supervisor.sh",
    "content": "#!/bin/bash\n\nprintf \"READY\\n\";\n\nwhile read line; do\n  echo \"Processing Event: $line\" >&2;\n  kill -3 $(cat \"/var/run/supervisord.pid\")\ndone < /dev/stdin\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/supervisord.conf",
    "content": "[supervisord]\r\nnodaemon=true\r\nuser=root\r\npidfile=/var/run/supervisord.pid\r\n\r\n[program:syslog-ng]\r\ncommand=/usr/sbin/syslog-ng --foreground --no-caps\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\nautostart=true\r\n\r\n[program:dovecot]\r\ncommand=/usr/sbin/dovecot -F\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\nautorestart=true\r\n\r\n[eventlistener:processes]\r\ncommand=/usr/local/sbin/stop-supervisor.sh\r\nevents=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL\r\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/syslog-ng-redis_slave.conf",
    "content": "@version: 4.5\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats(freq(0));\n  keep_timestamp(no);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_dgram {\n  unix-dgram(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis1\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"DOVECOT_MAILLOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\ndestination d_redis_f2b_channel {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis2\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"PUBLISH\" \"F2B_CHANNEL\" \"$(sanitize $MESSAGE)\")\n  );\n};\nfilter f_mail { facility(mail); };\nfilter f_replica {\n  not match(\"User has no mail_replica in userdb\" value(\"MESSAGE\"));\n  not match(\"Error: sync: Unknown user in remote\" value(\"MESSAGE\"));\n};\nfilter f_dovecot_auth_try {\n  not match(\"- trying the next passdb\" value(\"MESSAGE\")) and\n  not match(\"- trying the next userdb\" value(\"MESSAGE\"));\n};\nlog {\n  source(s_dgram);\n  filter(f_dovecot_auth_try);\n  filter(f_replica);\n  destination(d_stdout);\n  filter(f_mail);\n  destination(d_redis_ui_log);\n  destination(d_redis_f2b_channel);\n};\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/syslog-ng.conf",
    "content": "@version: 4.5\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats(freq(0));\n  keep_timestamp(no);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_dgram {\n  unix-dgram(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis1\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"DOVECOT_MAILLOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\ndestination d_redis_f2b_channel {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis2\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"PUBLISH\" \"F2B_CHANNEL\" \"$(sanitize $MESSAGE)\")\n  );\n};\nfilter f_mail { facility(mail); };\nfilter f_replica {\n  not match(\"User has no mail_replica in userdb\" value(\"MESSAGE\"));\n  not match(\"Error: sync: Unknown user in remote\" value(\"MESSAGE\"));\n};\nfilter f_dovecot_auth_try {\n  not match(\"- trying the next passdb\" value(\"MESSAGE\")) and\n  not match(\"- trying the next userdb\" value(\"MESSAGE\"));\n};\nlog {\n  source(s_dgram);\n  filter(f_dovecot_auth_try);\n  filter(f_replica);\n  destination(d_stdout);\n  filter(f_mail);\n  destination(d_redis_ui_log);\n  destination(d_redis_f2b_channel);\n};\n"
  },
  {
    "path": "data/Dockerfiles/dovecot/trim_logs.sh",
    "content": "#!/bin/bash\ncatch_non_zero() {\n  CMD=${1}\n  ${CMD} > /dev/null\n  EC=$?\n  if [ ${EC} -ne 0 ]; then\n    echo \"Command ${CMD} failed to execute, exit code was ${EC}\"\n  fi\n}\nsource /source_env.sh\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  REDIS_CMDLINE=\"redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning\"\nelse\n  REDIS_CMDLINE=\"redis-cli -h redis -p 6379 -a ${REDISPASS} --no-auth-warning\"\nfi\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM ACME_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM POSTFIX_MAILLOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM DOVECOT_MAILLOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM SOGO_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM NETFILTER_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM AUTODISCOVER_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM API_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM RL_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM WATCHDOG_LOG 0 ${LOG_LINES}\"\ncatch_non_zero \"${REDIS_CMDLINE} LTRIM CRON_LOG 0 ${LOG_LINES}\"\n"
  },
  {
    "path": "data/Dockerfiles/netfilter/Dockerfile",
    "content": "FROM alpine:3.23\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nWORKDIR /app\n\nARG PIP_BREAK_SYSTEM_PACKAGES=1\nENV XTABLES_LIBDIR /usr/lib/xtables\nENV PYTHON_IPTABLES_XTABLES_VERSION 12\nENV IPTABLES_LIBDIR /usr/lib\n\nRUN apk add --virtual .build-deps \\\n  gcc \\\n  python3-dev \\\n  libffi-dev \\\n  openssl-dev \\\n&& apk add -U python3 \\\n  iptables \\\n  iptables-dev \\\n  ip6tables \\\n  xtables-addons \\\n  nftables \\\n  tzdata \\\n  py3-pip \\\n  py3-nftables \\\n  musl-dev \\\n&& pip3 install --ignore-installed --upgrade pip \\\n  jsonschema \\\n  python-iptables \\\n  redis \\\n  ipaddress \\\n  dnspython \\\n&& apk del .build-deps\n\n#  && pip3 install --upgrade pip python-iptables==0.13.0 redis ipaddress dnspython \\\n\nCOPY modules /app/modules\nCOPY main.py /app/\nCOPY ./docker-entrypoint.sh /app/\n\nRUN chmod +x /app/docker-entrypoint.sh\n\nCMD [\"/bin/sh\", \"-c\", \"/app/docker-entrypoint.sh\"]\n"
  },
  {
    "path": "data/Dockerfiles/netfilter/docker-entrypoint.sh",
    "content": "#!/bin/sh\n\nbackend=nftables\n\nnft list table ip filter &>/dev/null\nnftables_found=$?\n\niptables -L -n &>/dev/null\niptables_found=$?\n\nif [ $nftables_found -lt $iptables_found ]; then\n  backend=nftables\nfi\n\nif [ $nftables_found -gt $iptables_found ]; then\n  backend=iptables\nfi\n\nif [ $nftables_found -eq 0 ] && [ $nftables_found -eq $iptables_found ]; then\n  nftables_lines=$(nft list ruleset | wc -l)\n  iptables_lines=$(iptables-save | wc -l)\n  if [ $nftables_lines -gt $iptables_lines ]; then\n    backend=nftables\n  else\n    backend=iptables\n  fi\nfi\n\nexec python -u /app/main.py $backend\n"
  },
  {
    "path": "data/Dockerfiles/netfilter/main.py",
    "content": "#!/usr/bin/env python3\r\n\r\nDEBUG = False\r\n\r\nimport re\r\nimport os\r\nimport sys\r\nimport time\r\nimport atexit\r\nimport signal\r\nimport ipaddress\r\nfrom collections import Counter\r\nfrom random import randint\r\nfrom threading import Thread\r\nfrom threading import Lock\r\nimport redis\r\nimport json\r\nimport dns.resolver\r\nimport dns.exception\r\nimport uuid\r\nfrom modules.Logger import Logger\r\nfrom modules.IPTables import IPTables\r\nfrom modules.NFTables import NFTables\r\n\r\ndef logdebug(msg):\r\n  if DEBUG:\r\n    logger.logInfo(\"DEBUG: %s\" % msg)\r\n\r\n# Globals\r\nWHITELIST = []\r\nBLACKLIST = []\r\nbans = {}\r\nquit_now = False\r\nexit_code = 0\r\nlock = Lock()\r\nchain_name = \"MAILCOW\"\r\nr = None\r\npubsub = None\r\nclear_before_quit = False\r\n\r\ndef refreshF2boptions():\r\n  global f2boptions\r\n  global quit_now\r\n  global exit_code\r\n  f2boptions = {}\r\n\r\n  if not r.get('F2B_OPTIONS'):\r\n    f2boptions['ban_time'] = r.get('F2B_BAN_TIME')\r\n    f2boptions['max_ban_time'] = r.get('F2B_MAX_BAN_TIME')\r\n    f2boptions['ban_time_increment'] = r.get('F2B_BAN_TIME_INCREMENT')\r\n    f2boptions['max_attempts'] = r.get('F2B_MAX_ATTEMPTS')\r\n    f2boptions['retry_window'] = r.get('F2B_RETRY_WINDOW')\r\n    f2boptions['netban_ipv4'] = r.get('F2B_NETBAN_IPV4')\r\n    f2boptions['netban_ipv6'] = r.get('F2B_NETBAN_IPV6')\r\n  else:\r\n    try:\r\n      f2boptions = json.loads(r.get('F2B_OPTIONS'))\r\n    except ValueError as e:\r\n      logger.logCrit(\r\n        'Error loading F2B options: F2B_OPTIONS is not json. Exception: %s' % e)\r\n      quit_now = True\r\n      exit_code = 2\r\n\r\n  verifyF2boptions(f2boptions)\r\n  r.set('F2B_OPTIONS', json.dumps(f2boptions, ensure_ascii=False))\r\n\r\ndef verifyF2boptions(f2boptions):\r\n  verifyF2boption(f2boptions, 'ban_time', 1800)\r\n  verifyF2boption(f2boptions, 'max_ban_time', 10000)\r\n  verifyF2boption(f2boptions, 'ban_time_increment', True)\r\n  verifyF2boption(f2boptions, 'max_attempts', 10)\r\n  verifyF2boption(f2boptions, 'retry_window', 600)\r\n  verifyF2boption(f2boptions, 'netban_ipv4', 32)\r\n  verifyF2boption(f2boptions, 'netban_ipv6', 128)\r\n  verifyF2boption(f2boptions, 'banlist_id', str(uuid.uuid4()))\r\n  verifyF2boption(f2boptions, 'manage_external', 0)\r\n\r\ndef verifyF2boption(f2boptions, f2boption, f2bdefault):\r\n  f2boptions[f2boption] = f2boptions[f2boption] if f2boption in f2boptions and f2boptions[f2boption] is not None else f2bdefault\r\n\r\ndef refreshF2bregex():\r\n  global f2bregex\r\n  global quit_now\r\n  global exit_code\r\n  if not r.get('F2B_REGEX'):\r\n    f2bregex = {}\r\n    f2bregex[1] = r'mailcow UI: Invalid password for .+ by ([0-9a-f\\.:]+)'\r\n    f2bregex[2] = r'Rspamd UI: Invalid password by ([0-9a-f\\.:]+)'\r\n    f2bregex[3] = r'warning: .*\\[([0-9a-f\\.:]+)\\]: SASL .+ authentication failed: (?!.*Connection lost to authentication server).+'\r\n    f2bregex[4] = r'warning: non-SMTP command from .*\\[([0-9a-f\\.:]+)]:.+'\r\n    f2bregex[5] = r'NOQUEUE: reject: RCPT from \\[([0-9a-f\\.:]+)].+Protocol error.+'\r\n    f2bregex[6] = r'\\w+\\([^,]+,([0-9a-f\\.:]+),<[^>]+>\\): Password mismatch \\(SHA1 of given password: [a-f0-9]+\\)'\r\n    f2bregex[7] = r'\\w+\\([^,]+,([0-9a-f\\.:]+),<[^>]+>\\): unknown user \\(SHA1 of given password: [a-f0-9]+\\)'\r\n    f2bregex[8] = r'SOGo.+ Login from \\'([0-9a-f\\.:]+)\\' for user .+ might not have worked'\r\n    f2bregex[9] = r'([0-9a-f\\.:]+) \\\"GET \\/SOGo\\/.* HTTP.+\\\" 403 .+'\r\n    r.set('F2B_REGEX', json.dumps(f2bregex, ensure_ascii=False))\r\n  else:\r\n    try:\r\n      f2bregex = {}\r\n      f2bregex = json.loads(r.get('F2B_REGEX'))\r\n    except ValueError:\r\n      logger.logCrit('Error loading F2B options: F2B_REGEX is not json')\r\n      quit_now = True\r\n      exit_code = 2\r\n\r\ndef get_ip(address):\r\n  ip = ipaddress.ip_address(address)\r\n  if type(ip) is ipaddress.IPv6Address and ip.ipv4_mapped:\r\n    ip = ip.ipv4_mapped\r\n  if ip.is_private or ip.is_loopback:\r\n    return False\r\n\r\n  return ip\r\n\r\ndef ban(address):\r\n  global f2boptions\r\n  global lock\r\n  logdebug(\"ban() called with address=%s\" % address)\r\n  refreshF2boptions()\r\n  MAX_ATTEMPTS = int(f2boptions['max_attempts'])\r\n  RETRY_WINDOW = int(f2boptions['retry_window'])\r\n  NETBAN_IPV4 = '/' + str(f2boptions['netban_ipv4'])\r\n  NETBAN_IPV6 = '/' + str(f2boptions['netban_ipv6'])\r\n\r\n  ip = get_ip(address)\r\n  if not ip:\r\n    logdebug(\"No valid IP -- skipping ban()\")\r\n    return\r\n  address = str(ip)\r\n  self_network = ipaddress.ip_network(address)\r\n\r\n  with lock:\r\n    temp_whitelist = set(WHITELIST)\r\n    logdebug(\"Checking if %s overlaps with any WHITELIST entries\" % self_network)\r\n    if temp_whitelist:\r\n      for wl_key in temp_whitelist:\r\n        wl_net = ipaddress.ip_network(wl_key, False)\r\n        logdebug(\"Checking overlap between %s and %s\" % (self_network, wl_net))\r\n        if wl_net.overlaps(self_network):\r\n          logger.logInfo(\r\n            'Address %s is allowlisted by rule %s' % (self_network, wl_net))\r\n          return\r\n\r\n  net = ipaddress.ip_network(\r\n    (address + (NETBAN_IPV4 if type(ip) is ipaddress.IPv4Address else NETBAN_IPV6)), strict=False)\r\n  net = str(net)\r\n  logdebug(\"Ban net: %s\" % net)\r\n\r\n  if not net in bans:\r\n    bans[net] = {'attempts': 0, 'last_attempt': 0, 'ban_counter': 0}\r\n    logdebug(\"Initing new ban counter for %s\" % net)\r\n\r\n  current_attempt = time.time()\r\n  logdebug(\"Current attempt ts=%s, previous: %s, retry_window: %s\" %\r\n           (current_attempt, bans[net]['last_attempt'], RETRY_WINDOW))\r\n  if current_attempt - bans[net]['last_attempt'] > RETRY_WINDOW:\r\n    bans[net]['attempts'] = 0\r\n    logdebug(\"Ban counter for %s reset as window expired\" % net)\r\n\r\n  bans[net]['attempts'] += 1\r\n  bans[net]['last_attempt'] = current_attempt\r\n  logdebug(\"%s attempts now %d\" % (net, bans[net]['attempts']))\r\n\r\n  if bans[net]['attempts'] >= MAX_ATTEMPTS:\r\n    cur_time = int(round(time.time()))\r\n    NET_BAN_TIME = calcNetBanTime(bans[net]['ban_counter'])\r\n    logger.logCrit('Banning %s for %d minutes' % (net, NET_BAN_TIME / 60 ))\r\n    if type(ip) is ipaddress.IPv4Address and int(f2boptions['manage_external']) != 1:\r\n      with lock:\r\n        logdebug(\"Calling tables.banIPv4(%s)\" % net)\r\n        tables.banIPv4(net)\r\n    elif int(f2boptions['manage_external']) != 1:\r\n      with lock:\r\n        logdebug(\"Calling tables.banIPv6(%s)\" % net)\r\n        tables.banIPv6(net)\r\n\r\n    logdebug(\"Updating F2B_ACTIVE_BANS[%s]=%d\" %\r\n              (net, cur_time + NET_BAN_TIME))\r\n    r.hset('F2B_ACTIVE_BANS', '%s' % net, cur_time + NET_BAN_TIME)\r\n  else:\r\n    logger.logWarn('%d more attempts in the next %d seconds until %s is banned' % (\r\n      MAX_ATTEMPTS - bans[net]['attempts'], RETRY_WINDOW, net))\r\n\r\ndef unban(net):\r\n  global lock\r\n  logdebug(\"Calling unban() with net=%s\" % net)\r\n  if not net in bans:\r\n    logger.logInfo(\r\n      '%s is not banned, skipping unban and deleting from queue (if any)' % net)\r\n    r.hdel('F2B_QUEUE_UNBAN', '%s' % net)\r\n    return\r\n  logger.logInfo('Unbanning %s' % net)\r\n  if type(ipaddress.ip_network(net)) is ipaddress.IPv4Network:\r\n    with lock:\r\n      logdebug(\"Calling tables.unbanIPv4(%s)\" % net)\r\n      tables.unbanIPv4(net)\r\n  else:\r\n    with lock:\r\n      logdebug(\"Calling tables.unbanIPv6(%s)\" % net)\r\n      tables.unbanIPv6(net)\r\n  r.hdel('F2B_ACTIVE_BANS', '%s' % net)\r\n  r.hdel('F2B_QUEUE_UNBAN', '%s' % net)\r\n  if net in bans:\r\n    logdebug(\"Unban for %s, setting attempts=0, ban_counter+=1\" % net)\r\n    bans[net]['attempts'] = 0\r\n    bans[net]['ban_counter'] += 1\r\n\r\ndef permBan(net, unban=False):\r\n  global f2boptions\r\n  global lock\r\n\r\n  is_unbanned = False\r\n  is_banned = False\r\n  if type(ipaddress.ip_network(net, strict=False)) is ipaddress.IPv4Network:\r\n    with lock:\r\n      if unban:\r\n        is_unbanned = tables.unbanIPv4(net)\r\n      elif int(f2boptions['manage_external']) != 1:\r\n        is_banned = tables.banIPv4(net)\r\n  else:\r\n    with lock:\r\n      if unban:\r\n        is_unbanned = tables.unbanIPv6(net)\r\n      elif int(f2boptions['manage_external']) != 1:\r\n        is_banned = tables.banIPv6(net)\r\n\r\n\r\n  if is_unbanned:\r\n    r.hdel('F2B_PERM_BANS', '%s' % net)\r\n    logger.logCrit('Removed host/network %s from denylist' % net)\r\n  elif is_banned:\r\n    r.hset('F2B_PERM_BANS', '%s' % net, int(round(time.time())))\r\n    logger.logCrit('Added host/network %s to denylist' % net)\r\n\r\ndef clear():\r\n  global lock\r\n  logger.logInfo('Clearing all bans')\r\n  for net in bans.copy():\r\n    logdebug(\"Unbanning net: %s\" % net)\r\n    unban(net)\r\n  with lock:\r\n    logdebug(\"Clearing IPv4/IPv6 table\")\r\n    tables.clearIPv4Table()\r\n    tables.clearIPv6Table()\r\n    try:\r\n      if r is not None:\r\n        r.delete('F2B_ACTIVE_BANS')\r\n        r.delete('F2B_PERM_BANS')\r\n    except Exception as ex:\r\n      logger.logWarn('Error clearing redis keys F2B_ACTIVE_BANS and F2B_PERM_BANS: %s' % ex)\r\n\r\ndef watch():\r\n  global pubsub\r\n  global quit_now\r\n  global exit_code\r\n\r\n  logger.logInfo('Watching Redis channel F2B_CHANNEL')\r\n  pubsub.subscribe('F2B_CHANNEL')\r\n\r\n  while not quit_now:\r\n    try:\r\n      for item in pubsub.listen():\r\n        refreshF2bregex()\r\n        for rule_id, rule_regex in f2bregex.items():\r\n          if item['data'] and item['type'] == 'message':\r\n            try:\r\n              result = re.search(rule_regex, item['data'])\r\n            except re.error:\r\n              result = False\r\n            if result:\r\n              addr = result.group(1)\r\n              ip = ipaddress.ip_address(addr)\r\n              if ip.is_private or ip.is_loopback:\r\n                continue\r\n              logger.logWarn('%s matched rule id %s (%s)' % (addr, rule_id, item['data']))\r\n              ban(addr)\r\n    except Exception as ex:\r\n      logger.logWarn('Error reading log line from pubsub: %s' % ex)\r\n      pubsub = None\r\n      quit_now = True\r\n      exit_code = 2\r\n\r\ndef snat4(snat_target):\r\n  global lock\r\n  global quit_now\r\n\r\n  while not quit_now:\r\n    time.sleep(10)\r\n    with lock:\r\n      tables.snat4(snat_target, os.getenv('IPV4_NETWORK', '172.22.1') + '.0/24')\r\n\r\ndef snat6(snat_target):\r\n  global lock\r\n  global quit_now\r\n\r\n  while not quit_now:\r\n    time.sleep(10)\r\n    with lock:\r\n      tables.snat6(snat_target, os.getenv('IPV6_NETWORK', 'fd4d:6169:6c63:6f77::/64'))\r\n\r\ndef autopurge():\r\n  global f2boptions\r\n  logdebug(\"autopurge thread started\")\r\n  while not quit_now:\r\n    logdebug(\"autopurge tick\")\r\n    time.sleep(10)\r\n    refreshF2boptions()\r\n    MAX_ATTEMPTS = int(f2boptions['max_attempts'])\r\n    QUEUE_UNBAN = r.hgetall('F2B_QUEUE_UNBAN')\r\n    logdebug(\"QUEUE_UNBAN: %s\" % QUEUE_UNBAN)\r\n    if QUEUE_UNBAN:\r\n      for net in QUEUE_UNBAN:\r\n        logdebug(\"Autopurge: unbanning queued net: %s\" % net)\r\n        unban(str(net))\r\n    # Only check expiry for actively banned IPs:\r\n    active_bans = r.hgetall('F2B_ACTIVE_BANS')\r\n    now = time.time()\r\n    for net_str, expire_str in active_bans.items():\r\n      logdebug(\"Checking ban expiry for (actively banned): %s\" % net_str)\r\n      # Defensive: always process if timer missing or expired\r\n      try:\r\n        expire = float(expire_str)\r\n      except Exception:\r\n        logdebug(\"Invalid expire time for %s; unbanning\" % net_str)\r\n        unban(net_str)\r\n        continue\r\n      time_left = expire - now\r\n      logdebug(\"Time left for %s: %.1f seconds\" % (net_str, time_left))\r\n      if time_left <= 0:\r\n        logdebug(\"Ban expired for %s\" % net_str)\r\n        unban(net_str)\r\n\r\ndef mailcowChainOrder():\r\n  global lock\r\n  global quit_now\r\n  global exit_code\r\n  while not quit_now:\r\n    time.sleep(10)\r\n    with lock:\r\n      quit_now, exit_code = tables.checkIPv4ChainOrder()\r\n      if quit_now: return\r\n      quit_now, exit_code = tables.checkIPv6ChainOrder()\r\n\r\ndef calcNetBanTime(ban_counter):\r\n  global f2boptions\r\n\r\n  BAN_TIME = int(f2boptions['ban_time'])\r\n  MAX_BAN_TIME = int(f2boptions['max_ban_time'])\r\n  BAN_TIME_INCREMENT = bool(f2boptions['ban_time_increment'])\r\n  NET_BAN_TIME = BAN_TIME if not BAN_TIME_INCREMENT else BAN_TIME * 2 ** ban_counter\r\n  NET_BAN_TIME = max([BAN_TIME, min([NET_BAN_TIME, MAX_BAN_TIME])])\r\n  return NET_BAN_TIME\r\n\r\ndef isIpNetwork(address):\r\n  try:\r\n    ipaddress.ip_network(address, False)\r\n  except ValueError:\r\n    return False\r\n  return True\r\n\r\ndef genNetworkList(list):\r\n  resolver = dns.resolver.Resolver()\r\n  hostnames = []\r\n  networks = []\r\n  for key in list:\r\n    if isIpNetwork(key):\r\n      networks.append(key)\r\n    else:\r\n      hostnames.append(key)\r\n  for hostname in hostnames:\r\n    hostname_ips = []\r\n    for rdtype in ['A', 'AAAA']:\r\n      try:\r\n        answer = resolver.resolve(qname=hostname, rdtype=rdtype, lifetime=3)\r\n      except dns.exception.Timeout:\r\n        logger.logInfo('Hostname %s timedout on resolve' % hostname)\r\n        break\r\n      except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer):\r\n        continue\r\n      except dns.exception.DNSException as dnsexception:\r\n        logger.logInfo('%s' % dnsexception)\r\n        continue\r\n      for rdata in answer:\r\n        hostname_ips.append(rdata.to_text())\r\n    networks.extend(hostname_ips)\r\n  return set(networks)\r\n\r\ndef whitelistUpdate():\r\n  global lock\r\n  global quit_now\r\n  global WHITELIST\r\n  while not quit_now:\r\n    start_time = time.time()\r\n    list = r.hgetall('F2B_WHITELIST')\r\n    new_whitelist = []\r\n    if list:\r\n      new_whitelist = genNetworkList(list)\r\n    with lock:\r\n      if Counter(new_whitelist) != Counter(WHITELIST):\r\n        WHITELIST = new_whitelist\r\n        logger.logInfo('Allowlist was changed, it has %s entries' % len(WHITELIST))\r\n    time.sleep(60.0 - ((time.time() - start_time) % 60.0))\r\n\r\ndef blacklistUpdate():\r\n  global quit_now\r\n  global BLACKLIST\r\n  while not quit_now:\r\n    start_time = time.time()\r\n    list = r.hgetall('F2B_BLACKLIST')\r\n    new_blacklist = []\r\n    if list:\r\n      new_blacklist = genNetworkList(list)\r\n    if Counter(new_blacklist) != Counter(BLACKLIST):\r\n      addban = set(new_blacklist).difference(BLACKLIST)\r\n      delban = set(BLACKLIST).difference(new_blacklist)\r\n      BLACKLIST = new_blacklist\r\n      logger.logInfo('Denylist was changed, it has %s entries' % len(BLACKLIST))\r\n      if addban:\r\n        for net in addban:\r\n          permBan(net=net)\r\n      if delban:\r\n        for net in delban:\r\n          permBan(net=net, unban=True)\r\n    time.sleep(60.0 - ((time.time() - start_time) % 60.0))\r\n\r\ndef sigterm_quit(signum, frame):\r\n  global clear_before_quit\r\n  logdebug(\"SIGTERM received, setting clear_before_quit to True and exiting\")\r\n  clear_before_quit = True\r\n  sys.exit(exit_code)\r\n\r\ndef before_quit():\r\n  logdebug(\"before_quit called, clear_before_quit=%s\" % clear_before_quit)\r\n  if clear_before_quit:\r\n    clear()\r\n  if pubsub is not None:\r\n    pubsub.unsubscribe()\r\n\r\nif __name__ == '__main__':\r\n  logger = Logger()\r\n  logdebug(\"Sys.argv: %s\" % sys.argv)\r\n  atexit.register(before_quit)\r\n  signal.signal(signal.SIGTERM, sigterm_quit)\r\n\r\n  backend = sys.argv[1]\r\n  logdebug(\"Backend: %s\" % backend)\r\n  if backend == \"nftables\":\r\n    logger.logInfo('Using NFTables backend')\r\n    tables = NFTables(chain_name, logger)\r\n  else:\r\n    logger.logInfo('Using IPTables backend')\r\n    logger.logWarn(\r\n        \"DEPRECATION: iptables-legacy is deprecated and will be removed in future releases. \"\r\n        \"Please switch to nftables on your host to ensure complete compatibility.\"\r\n    )\r\n    time.sleep(5)\r\n    tables = IPTables(chain_name, logger)\r\n\r\n  clear()\r\n  logger.logInfo(\"Initializing mailcow netfilter chain\")\r\n  tables.initChainIPv4()\r\n  tables.initChainIPv6()\r\n\r\n  if os.getenv(\"DISABLE_NETFILTER_ISOLATION_RULE\", \"\").lower() in (\"y\", \"yes\"):\r\n    logger.logInfo(f\"Skipping {chain_name} isolation\")\r\n  else:\r\n    logger.logInfo(f\"Setting {chain_name} isolation\")\r\n    tables.create_mailcow_isolation_rule(\"br-mailcow\", [3306, 6379, 8983, 12345], os.getenv(\"MAILCOW_REPLICA_IP\"))\r\n\r\n  # connect to redis\r\n  while True:\r\n    try:\r\n      redis_slaveof_ip = os.getenv('REDIS_SLAVEOF_IP', '')\r\n      redis_slaveof_port = os.getenv('REDIS_SLAVEOF_PORT', '')\r\n      logdebug(\r\n        \"Connecting redis (SLAVEOF_IP:%s, PORT:%s)\" % (redis_slaveof_ip, redis_slaveof_port))\r\n      if \"\".__eq__(redis_slaveof_ip):\r\n        r = redis.StrictRedis(\r\n          host=os.getenv('IPV4_NETWORK', '172.22.1') + '.249', decode_responses=True, port=6379, db=0, password=os.environ['REDISPASS'])\r\n      else:\r\n        r = redis.StrictRedis(\r\n          host=redis_slaveof_ip, decode_responses=True, port=redis_slaveof_port, db=0, password=os.environ['REDISPASS'])\r\n      r.ping()\r\n      pubsub = r.pubsub()\r\n    except Exception as ex:\r\n      logdebug(\r\n        'Redis connection failed: %s - trying again in 3 seconds' % (ex))\r\n      time.sleep(3)\r\n    else:\r\n      break\r\n  logger.set_redis(r)\r\n  logdebug(\"Redis connection established, setting up F2B keys\")\r\n\r\n  if r.exists('F2B_LOG'):\r\n    logdebug(\"Renaming F2B_LOG to NETFILTER_LOG\")\r\n    r.rename('F2B_LOG', 'NETFILTER_LOG')\r\n  r.delete('F2B_ACTIVE_BANS')\r\n  r.delete('F2B_PERM_BANS')\r\n\r\n  refreshF2boptions()\r\n\r\n  watch_thread = Thread(target=watch)\r\n  watch_thread.daemon = True\r\n  watch_thread.start()\r\n\r\n  if os.getenv('SNAT_TO_SOURCE') and os.getenv('SNAT_TO_SOURCE') != 'n':\r\n    try:\r\n      snat_ip = os.getenv('SNAT_TO_SOURCE')\r\n      snat_ipo = ipaddress.ip_address(snat_ip)\r\n      if type(snat_ipo) is ipaddress.IPv4Address:\r\n        snat4_thread = Thread(target=snat4, args=(snat_ip,))\r\n        snat4_thread.daemon = True\r\n        snat4_thread.start()\r\n    except ValueError:\r\n      print(os.getenv('SNAT_TO_SOURCE') + ' is not a valid IPv4 address')\r\n\r\n  if os.getenv('SNAT6_TO_SOURCE') and os.getenv('SNAT6_TO_SOURCE') != 'n':\r\n    try:\r\n      snat_ip = os.getenv('SNAT6_TO_SOURCE')\r\n      snat_ipo = ipaddress.ip_address(snat_ip)\r\n      if type(snat_ipo) is ipaddress.IPv6Address:\r\n        snat6_thread = Thread(target=snat6,args=(snat_ip,))\r\n        snat6_thread.daemon = True\r\n        snat6_thread.start()\r\n    except ValueError:\r\n      print(os.getenv('SNAT6_TO_SOURCE') + ' is not a valid IPv6 address')\r\n\r\n  autopurge_thread = Thread(target=autopurge)\r\n  autopurge_thread.daemon = True\r\n  autopurge_thread.start()\r\n\r\n  mailcowchainwatch_thread = Thread(target=mailcowChainOrder)\r\n  mailcowchainwatch_thread.daemon = True\r\n  mailcowchainwatch_thread.start()\r\n\r\n  blacklistupdate_thread = Thread(target=blacklistUpdate)\r\n  blacklistupdate_thread.daemon = True\r\n  blacklistupdate_thread.start()\r\n\r\n  whitelistupdate_thread = Thread(target=whitelistUpdate)\r\n  whitelistupdate_thread.daemon = True\r\n  whitelistupdate_thread.start()\r\n\r\n  while not quit_now:\r\n    time.sleep(0.5)\r\n\r\n  logdebug(\"Exiting with code %s\" % exit_code)\r\n  sys.exit(exit_code)"
  },
  {
    "path": "data/Dockerfiles/netfilter/modules/IPTables.py",
    "content": "import iptc\nimport time\nimport os\n\nclass IPTables:\n  def __init__(self, chain_name, logger):\n    self.chain_name = chain_name\n    self.logger = logger\n\n  def initChainIPv4(self):\n    if not iptc.Chain(iptc.Table(iptc.Table.FILTER), self.chain_name) in iptc.Table(iptc.Table.FILTER).chains:\n      iptc.Table(iptc.Table.FILTER).create_chain(self.chain_name)\n    for c in ['FORWARD', 'INPUT']:\n      chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), c)\n      rule = iptc.Rule()\n      rule.src = '0.0.0.0/0'\n      rule.dst = '0.0.0.0/0'\n      target = iptc.Target(rule, self.chain_name)\n      rule.target = target\n      if rule not in chain.rules:\n        chain.insert_rule(rule)\n\n  def initChainIPv6(self):\n    if not iptc.Chain(iptc.Table6(iptc.Table6.FILTER), self.chain_name) in iptc.Table6(iptc.Table6.FILTER).chains:\n      iptc.Table6(iptc.Table6.FILTER).create_chain(self.chain_name)\n    for c in ['FORWARD', 'INPUT']:\n      chain = iptc.Chain(iptc.Table6(iptc.Table6.FILTER), c)\n      rule = iptc.Rule6()\n      rule.src = '::/0'\n      rule.dst = '::/0'\n      target = iptc.Target(rule, self.chain_name)\n      rule.target = target\n      if rule not in chain.rules:\n        chain.insert_rule(rule)\n\n  def checkIPv4ChainOrder(self):\n    filter_table = iptc.Table(iptc.Table.FILTER)\n    filter_table.refresh()\n    return self.checkChainOrder(filter_table)\n\n  def checkIPv6ChainOrder(self):\n    filter_table = iptc.Table6(iptc.Table6.FILTER)\n    filter_table.refresh()\n    return self.checkChainOrder(filter_table)\n\n  def checkChainOrder(self, filter_table):\n    err = False\n    exit_code = None\n\n    forward_chain = iptc.Chain(filter_table, 'FORWARD')\n    input_chain = iptc.Chain(filter_table, 'INPUT')\n    for chain in [forward_chain, input_chain]:\n      target_found = False\n      for position, item in enumerate(chain.rules):\n        if item.target.name == self.chain_name:\n          target_found = True\n          if position > 2:\n            self.logger.logCrit('Error in %s chain: %s target not found, restarting container' % (chain.name, self.chain_name))\n            err = True\n            exit_code = 2\n      if not target_found:\n        self.logger.logCrit('Error in %s chain: %s target not found, restarting container' % (chain.name, self.chain_name))\n        err = True\n        exit_code = 2\n\n    return err, exit_code\n\n  def clearIPv4Table(self):\n    self.clearTable(iptc.Table(iptc.Table.FILTER))\n\n  def clearIPv6Table(self):\n    self.clearTable(iptc.Table6(iptc.Table6.FILTER))\n\n  def clearTable(self, filter_table):\n    filter_table.autocommit = False\n    forward_chain = iptc.Chain(filter_table, \"FORWARD\")\n    input_chain = iptc.Chain(filter_table, \"INPUT\")\n    mailcow_chain = iptc.Chain(filter_table, self.chain_name)\n    if mailcow_chain in filter_table.chains:\n      for rule in mailcow_chain.rules:\n        mailcow_chain.delete_rule(rule)\n      for rule in forward_chain.rules:\n        if rule.target.name == self.chain_name:\n          forward_chain.delete_rule(rule)\n      for rule in input_chain.rules:\n        if rule.target.name == self.chain_name:\n          input_chain.delete_rule(rule)\n      filter_table.delete_chain(self.chain_name)\n    filter_table.commit()\n    filter_table.refresh()\n    filter_table.autocommit = True\n\n  def banIPv4(self, source):\n    chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), self.chain_name)\n    rule = iptc.Rule()\n    rule.src = source\n    target = iptc.Target(rule, \"REJECT\")\n    rule.target = target\n    if rule in chain.rules:\n      return False\n    chain.insert_rule(rule)\n    return True\n\n  def banIPv6(self, source):\n    chain = iptc.Chain(iptc.Table6(iptc.Table6.FILTER), self.chain_name)\n    rule = iptc.Rule6()\n    rule.src = source\n    target = iptc.Target(rule, \"REJECT\")\n    rule.target = target\n    if rule in chain.rules:\n      return False\n    chain.insert_rule(rule)\n    return True\n\n  def unbanIPv4(self, source):\n    chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), self.chain_name)\n    rule = iptc.Rule()\n    rule.src = source\n    target = iptc.Target(rule, \"REJECT\")\n    rule.target = target\n    if rule not in chain.rules: \n      return False\n    chain.delete_rule(rule)\n    return True\n\n  def unbanIPv6(self, source):\n    chain = iptc.Chain(iptc.Table6(iptc.Table6.FILTER), self.chain_name)\n    rule = iptc.Rule6()\n    rule.src = source\n    target = iptc.Target(rule, \"REJECT\")\n    rule.target = target\n    if rule not in chain.rules:\n      return False\n    chain.delete_rule(rule)\n    return True\n\n  def snat4(self, snat_target, source):\n    try:\n      table = iptc.Table('nat')\n      table.refresh()\n      chain = iptc.Chain(table, 'POSTROUTING')\n      table.autocommit = False\n      new_rule = self.getSnat4Rule(snat_target, source)\n\n      if not chain.rules:\n        # if there are no rules in the chain, insert the new rule directly\n        self.logger.logInfo(f'Added POSTROUTING rule for source network {new_rule.src} to SNAT target {snat_target}')\n        chain.insert_rule(new_rule)\n      else:\n        for position, rule in enumerate(chain.rules):\n          if not hasattr(rule.target, 'parameter'):\n              continue\n          match = all((\n            new_rule.get_src() == rule.get_src(),\n            new_rule.get_dst() == rule.get_dst(),\n            new_rule.target.parameters == rule.target.parameters,\n            new_rule.target.name == rule.target.name\n          ))\n          if position == 0:\n            if not match:\n              self.logger.logInfo(f'Added POSTROUTING rule for source network {new_rule.src} to SNAT target {snat_target}')\n              chain.insert_rule(new_rule)\n          else:\n            if match:\n              self.logger.logInfo(f'Remove rule for source network {new_rule.src} to SNAT target {snat_target} from POSTROUTING chain at position {position}')\n              chain.delete_rule(rule)\n\n      table.commit()\n      table.autocommit = True\n      return True\n    except:\n      self.logger.logCrit('Error running SNAT4, retrying...')\n      return False\n\n  def snat6(self, snat_target, source):\n    try:\n      table = iptc.Table6('nat')\n      table.refresh()\n      chain = iptc.Chain(table, 'POSTROUTING')\n      table.autocommit = False\n      new_rule = self.getSnat6Rule(snat_target, source)\n\n      if new_rule not in chain.rules:\n        self.logger.logInfo('Added POSTROUTING rule for source network %s to SNAT target %s' % (new_rule.src, snat_target))\n        chain.insert_rule(new_rule)\n      else:\n        for position, item in enumerate(chain.rules):\n          if item == new_rule:\n            if position != 0:\n              chain.delete_rule(new_rule)\n    \n      table.commit()\n      table.autocommit = True\n    except:\n      self.logger.logCrit('Error running SNAT6, retrying...')\n\n\n  def getSnat4Rule(self, snat_target, source):\n    rule = iptc.Rule()\n    rule.src = source\n    rule.dst = '!' + rule.src\n    target = rule.create_target(\"SNAT\")\n    target.to_source = snat_target\n    match = rule.create_match(\"comment\")\n    match.comment = f'{int(round(time.time()))}'\n    return rule\n\n  def getSnat6Rule(self, snat_target, source):\n    rule = iptc.Rule6()\n    rule.src = source\n    rule.dst = '!' + rule.src\n    target = rule.create_target(\"SNAT\")\n    target.to_source = snat_target\n    return rule\n\n  def create_mailcow_isolation_rule(self, _interface:str, _dports:list, _allow:str = \"\"):\n    try:\n      chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), self.chain_name)\n\n      # insert mailcow isolation rule\n      rule = iptc.Rule()\n      rule.in_interface = f'!{_interface}'\n      rule.out_interface = _interface\n      rule.protocol = 'tcp'\n      rule.create_target(\"DROP\")\n      match = rule.create_match(\"multiport\")\n      match.dports = ','.join(map(str, _dports))\n\n      if rule in chain.rules:\n        chain.delete_rule(rule)\n      chain.insert_rule(rule, position=0)\n\n      # insert mailcow isolation exception rule\n      if _allow != \"\":\n        rule = iptc.Rule()\n        rule.src = _allow\n        rule.in_interface = f'!{_interface}'\n        rule.out_interface = _interface\n        rule.protocol = 'tcp'\n        rule.create_target(\"ACCEPT\")\n        match = rule.create_match(\"multiport\")\n        match.dports = ','.join(map(str, _dports))\n\n        if rule in chain.rules:\n          chain.delete_rule(rule)\n        chain.insert_rule(rule, position=0)\n\n\n      return True\n    except Exception as e:\n      self.logger.logCrit(f\"Error adding {self.chain_name} isolation: {e}\")\n      return False"
  },
  {
    "path": "data/Dockerfiles/netfilter/modules/Logger.py",
    "content": "import time\nimport json\nimport datetime\n\nclass Logger:\n  def __init__(self):\n    self.r = None\n\n  def set_redis(self, redis):\n    self.r = redis\n\n  def _format_timestamp(self):\n    # Local time with milliseconds\n    return datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n\n  def log(self, priority, message):\n    # build redis-friendly dict\n    tolog = {\n      'time': int(round(time.time())),  # keep raw timestamp for Redis\n      'priority': priority,\n      'message': message\n    }\n\n    # print human-readable message with timestamp\n    ts = self._format_timestamp()\n    print(f\"{ts} {priority.upper()}: {message}\", flush=True)\n\n    # also push JSON to Redis if connected\n    if self.r is not None:\n      try:\n        self.r.lpush('NETFILTER_LOG', json.dumps(tolog, ensure_ascii=False))\n      except Exception as ex:\n        print(f'{ts} WARN: Failed logging to redis: {ex}', flush=True)\n\n  def logWarn(self, message):\n    self.log('warn', message)\n\n  def logCrit(self, message):\n    self.log('crit', message)\n\n  def logInfo(self, message):\n    self.log('info', message)"
  },
  {
    "path": "data/Dockerfiles/netfilter/modules/NFTables.py",
    "content": "import nftables\nimport ipaddress\nimport os\n\nclass NFTables:\n  def __init__(self, chain_name, logger):\n    self.chain_name = chain_name\n    self.logger = logger\n\n    self.nft = nftables.Nftables()\n    self.nft.set_json_output(True)\n    self.nft.set_handle_output(True)\n    self.nft_chain_names = {'ip': {'filter': {'input': '', 'forward': ''}, 'nat': {'postrouting': ''} },\n                            'ip6': {'filter': {'input': '', 'forward': ''}, 'nat': {'postrouting': ''} } }\n\n    self.search_current_chains()\n\n  def initChainIPv4(self):\n    self.insert_mailcow_chains(\"ip\")\n\n  def initChainIPv6(self):\n    self.insert_mailcow_chains(\"ip6\")\n\n  def checkIPv4ChainOrder(self):\n    return self.checkChainOrder(\"ip\")\n\n  def checkIPv6ChainOrder(self):\n    return self.checkChainOrder(\"ip6\")\n\n  def checkChainOrder(self, filter_table):\n    err = False\n    exit_code = None\n\n    for chain in ['input', 'forward']:\n      chain_position = self.check_mailcow_chains(filter_table, chain)\n      if chain_position is None: continue\n\n      if chain_position is False:\n        self.logger.logCrit(f'MAILCOW target not found in {filter_table} {chain} table, restarting container to fix it...')\n        err = True\n        exit_code = 2\n\n      if chain_position > 0:\n        chain_position += 1\n        self.logger.logCrit(f'MAILCOW target is in position {chain_position} in the {filter_table} {chain} table, restarting container to fix it...')\n        err = True\n        exit_code = 2\n\n    return err, exit_code\n\n  def clearIPv4Table(self):\n    self.clearTable(\"ip\")\n\n  def clearIPv6Table(self):\n    self.clearTable(\"ip6\")\n\n  def clearTable(self, _family):\n    is_empty_dict = True\n    json_command = self.get_base_dict()\n    chain_handle = self.get_chain_handle(_family, \"filter\", self.chain_name)\n    # if no handle, the chain doesn't exists\n    if chain_handle is not None:\n      is_empty_dict = False\n      # flush chain\n      mailcow_chain = {'family': _family, 'table': 'filter', 'name': self.chain_name}\n      flush_chain = {'flush': {'chain': mailcow_chain}}\n      json_command[\"nftables\"].append(flush_chain)\n\n    # remove rule in forward chain\n    # remove rule in input chain\n    chains_family = [self.nft_chain_names[_family]['filter']['input'],\n                    self.nft_chain_names[_family]['filter']['forward'] ]\n\n    for chain_base in chains_family:\n      if not chain_base: continue\n\n      rules_handle = self.get_rules_handle(_family, \"filter\", chain_base)\n      if rules_handle is not None:\n        for r_handle in rules_handle:\n          is_empty_dict = False\n          mailcow_rule = {'family':_family,\n                          'table': 'filter',\n                          'chain': chain_base,\n                          'handle': r_handle }\n          delete_rules = {'delete': {'rule': mailcow_rule} }\n          json_command[\"nftables\"].append(delete_rules)\n\n    # remove chain\n    # after delete all rules referencing this chain\n    if chain_handle is not None:\n      mc_chain_handle = {'family':_family,\n                        'table': 'filter',\n                        'name': self.chain_name,\n                        'handle': chain_handle }\n      delete_chain = {'delete': {'chain': mc_chain_handle} }\n      json_command[\"nftables\"].append(delete_chain)\n\n    if is_empty_dict == False:\n      if self.nft_exec_dict(json_command):\n        self.logger.logInfo(f\"Clear completed: {_family}\")\n\n  def banIPv4(self, source):\n    ban_dict = self.get_ban_ip_dict(source, \"ip\")\n    return self.nft_exec_dict(ban_dict)\n\n  def banIPv6(self, source):\n    ban_dict = self.get_ban_ip_dict(source, \"ip6\")\n    return self.nft_exec_dict(ban_dict)\n\n  def unbanIPv4(self, source):\n    unban_dict = self.get_unban_ip_dict(source, \"ip\")\n    if not unban_dict:\n      return False\n    return self.nft_exec_dict(unban_dict)\n\n  def unbanIPv6(self, source):\n    unban_dict = self.get_unban_ip_dict(source, \"ip6\")\n    if not unban_dict:\n      return False\n    return self.nft_exec_dict(unban_dict)\n\n  def snat4(self, snat_target, source):\n    self.snat_rule(\"ip\", snat_target, source)\n\n  def snat6(self, snat_target, source):\n    self.snat_rule(\"ip6\", snat_target, source)\n\n\n  def nft_exec_dict(self, query: dict):\n    if not query: return False\n\n    rc, output, error = self.nft.json_cmd(query)\n    if rc != 0:\n      #self.logger.logCrit(f\"Nftables Error: {error}\")\n      return False\n\n    # Prevent returning False or empty string on commands that do not produce output\n    if rc == 0 and len(output) == 0:\n      return True\n\n    return output\n\n  def get_base_dict(self):\n    return {'nftables': [{ 'metainfo': { 'json_schema_version': 1} } ] }\n\n  def search_current_chains(self):\n    nft_chain_priority = {'ip': {'filter': {'input': None, 'forward': None}, 'nat': {'postrouting': None} },\n                      'ip6': {'filter': {'input': None, 'forward': None}, 'nat': {'postrouting': None} } }\n\n    # Command: 'nft list chains'\n    _list = {'list' : {'chains': 'null'} }\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n    kernel_ruleset = self.nft_exec_dict(command)\n    if kernel_ruleset:\n      for _object in kernel_ruleset['nftables']:\n        chain = _object.get(\"chain\")\n        if not chain: continue\n\n        _family = chain['family']\n        _table = chain['table']\n        _hook = chain.get(\"hook\")\n        _priority = chain.get(\"prio\")\n        _name = chain['name']\n\n        if _family not in self.nft_chain_names: continue\n        if _table not in self.nft_chain_names[_family]: continue\n        if _hook not in self.nft_chain_names[_family][_table]: continue\n        if _priority is None: continue\n\n        _saved_priority = nft_chain_priority[_family][_table][_hook]\n        if _saved_priority is None or _priority < _saved_priority:\n          # at this point, we know the chain has:\n          # hook and priority set\n          # and it has the lowest priority\n          nft_chain_priority[_family][_table][_hook] = _priority\n          self.nft_chain_names[_family][_table][_hook] = _name\n\n  def search_for_chain(self, kernel_ruleset: dict, chain_name: str):\n    found = False\n    for _object in kernel_ruleset[\"nftables\"]:\n      chain = _object.get(\"chain\")\n      if not chain:\n        continue\n      ch_name = chain.get(\"name\")\n      if ch_name == chain_name:\n        found = True\n        break\n    return found\n\n  def get_chain_dict(self, _family: str, _name: str):\n    # nft (add | create) chain [<family>] <table> <name> \n    _chain_opts = {'family': _family, 'table': 'filter', 'name': _name  }\n    _add = {'add': {'chain': _chain_opts} }\n    final_chain = self.get_base_dict()\n    final_chain[\"nftables\"].append(_add)\n    return final_chain\n\n  def get_mailcow_jump_rule_dict(self, _family: str, _chain: str):\n    _jump_rule = self.get_base_dict()\n    _expr_opt=[]\n    _expr_counter = {'family': _family, 'table': 'filter', 'packets': 0, 'bytes': 0}\n    _counter_dict = {'counter': _expr_counter}\n    _expr_opt.append(_counter_dict)\n\n    _jump_opts = {'jump': {'target': self.chain_name} }\n\n    _expr_opt.append(_jump_opts)\n\n    _rule_params = {'family': _family,\n                    'table': 'filter',\n                    'chain': _chain,\n                    'expr': _expr_opt,\n                    'comment': \"mailcow\" }\n\n    _add_rule = {'insert': {'rule': _rule_params} }\n\n    _jump_rule[\"nftables\"].append(_add_rule)\n\n    return _jump_rule\n\n  def insert_mailcow_chains(self, _family: str):\n    nft_input_chain = self.nft_chain_names[_family]['filter']['input']\n    nft_forward_chain = self.nft_chain_names[_family]['filter']['forward']\n    # Command: 'nft list table <family> filter'\n    _table_opts = {'family': _family, 'name': 'filter'}\n    _list = {'list': {'table': _table_opts} }\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n    kernel_ruleset = self.nft_exec_dict(command)\n    if kernel_ruleset:\n      # chain\n      if not self.search_for_chain(kernel_ruleset, self.chain_name):\n        cadena = self.get_chain_dict(_family, self.chain_name)\n        if self.nft_exec_dict(cadena):\n          self.logger.logInfo(f\"MAILCOW {_family} chain created successfully.\")\n\n      input_jump_found, forward_jump_found = False, False\n\n      for _object in kernel_ruleset[\"nftables\"]:\n        if not _object.get(\"rule\"):\n          continue\n\n        rule = _object[\"rule\"]\n        if nft_input_chain and rule[\"chain\"] == nft_input_chain:\n          if rule.get(\"comment\") and rule[\"comment\"] == \"mailcow\":\n            input_jump_found = True\n        if nft_forward_chain and rule[\"chain\"] == nft_forward_chain:\n          if rule.get(\"comment\") and rule[\"comment\"] == \"mailcow\":\n            forward_jump_found = True\n\n      if not input_jump_found:\n        command = self.get_mailcow_jump_rule_dict(_family, nft_input_chain)\n        self.nft_exec_dict(command)\n\n      if not forward_jump_found:\n        command = self.get_mailcow_jump_rule_dict(_family, nft_forward_chain)\n        self.nft_exec_dict(command)\n\n  def delete_nat_rule(self, _family:str, _chain: str, _handle:str):\n    delete_command = self.get_base_dict()\n    _rule_opts = {'family': _family,\n                  'table': 'nat',\n                  'chain': _chain,\n                  'handle': _handle  }\n    _delete = {'delete': {'rule': _rule_opts} }\n    delete_command[\"nftables\"].append(_delete)\n\n    return self.nft_exec_dict(delete_command)\n\n  def delete_filter_rule(self, _family:str, _chain: str, _handle:str):\n    delete_command = self.get_base_dict()\n    _rule_opts = {'family': _family,\n                  'table': 'filter',\n                  'chain': _chain,\n                  'handle': _handle  }\n    _delete = {'delete': {'rule': _rule_opts} }\n    delete_command[\"nftables\"].append(_delete)\n\n    return self.nft_exec_dict(delete_command)\n\n  def snat_rule(self, _family: str, snat_target: str, source_address: str):\n    chain_name = self.nft_chain_names[_family]['nat']['postrouting']\n\n    # no postrouting chain, may occur if docker has ipv6 disabled.\n    if not chain_name: return\n\n    # Command: nft list chain <family> nat <chain_name>\n    _chain_opts = {'family': _family, 'table': 'nat', 'name': chain_name}\n    _list = {'list':{'chain': _chain_opts} }\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n    kernel_ruleset = self.nft_exec_dict(command)\n    if not kernel_ruleset:\n      return\n\n    rule_position = 0\n    rule_handle = None\n    rule_found = False\n    for _object in kernel_ruleset[\"nftables\"]:\n      if not _object.get(\"rule\"):\n        continue\n\n      rule = _object[\"rule\"]\n      if not rule.get(\"comment\") or not rule[\"comment\"] == \"mailcow\":\n        rule_position +=1\n        continue\n\n      rule_found = True\n      rule_handle = rule[\"handle\"]\n      break\n\n    dest_net = ipaddress.ip_network(source_address, strict=False)\n    target_net = ipaddress.ip_network(snat_target, strict=False)\n\n    if rule_found:\n      saddr_ip = rule[\"expr\"][0][\"match\"][\"right\"][\"prefix\"][\"addr\"]\n      saddr_len = int(rule[\"expr\"][0][\"match\"][\"right\"][\"prefix\"][\"len\"])\n\n      daddr_ip = rule[\"expr\"][1][\"match\"][\"right\"][\"prefix\"][\"addr\"]\n      daddr_len = int(rule[\"expr\"][1][\"match\"][\"right\"][\"prefix\"][\"len\"])\n\n      target_ip = rule[\"expr\"][3][\"snat\"][\"addr\"]\n\n      saddr_net = ipaddress.ip_network(saddr_ip + '/' + str(saddr_len), strict=False)\n      daddr_net = ipaddress.ip_network(daddr_ip + '/' + str(daddr_len), strict=False)\n      current_target_net = ipaddress.ip_network(target_ip, strict=False)\n\n      match = all((\n                dest_net == saddr_net,\n                dest_net == daddr_net,\n                target_net == current_target_net\n              ))\n      try:\n        if rule_position == 0:\n          if not match:\n            # Position 0 , it is a mailcow rule , but it does not have the same parameters\n            if self.delete_nat_rule(_family, chain_name, rule_handle):\n              self.logger.logInfo(f'Remove rule for source network {saddr_net} to SNAT target {target_net} from {_family} nat {chain_name} chain, rule does not match configured parameters')\n        else:\n          # Position > 0 and is mailcow rule\n          if self.delete_nat_rule(_family, chain_name, rule_handle):\n            self.logger.logInfo(f'Remove rule for source network {saddr_net} to SNAT target {target_net} from {_family} nat {chain_name} chain, rule is at position {rule_position}')\n      except:\n          self.logger.logCrit(f\"Error running SNAT on {_family}, retrying...\" )\n    else:\n      # rule not found\n      json_command = self.get_base_dict()\n      try:\n        snat_dict = {'snat': {'addr': str(target_net.network_address)} }\n\n        expr_counter = {'family': _family, 'table': 'nat', 'packets': 0, 'bytes': 0}\n        counter_dict = {'counter': expr_counter}\n\n        prefix_dict = {'prefix': {'addr': str(dest_net.network_address), 'len': int(dest_net.prefixlen)} }\n        payload_dict = {'payload': {'protocol': _family, 'field': \"saddr\"} }\n        match_dict1 = {'match': {'op': '==', 'left': payload_dict, 'right': prefix_dict} }\n\n        payload_dict2 = {'payload': {'protocol': _family, 'field': \"daddr\"} }\n        match_dict2 = {'match': {'op': '!=', 'left': payload_dict2, 'right': prefix_dict } }\n        expr_list = [\n                    match_dict1,\n                    match_dict2,\n                    counter_dict,\n                    snat_dict\n                    ]\n        rule_fields = {'family': _family,\n                        'table': 'nat',\n                        'chain': chain_name,\n                        'comment': \"mailcow\",\n                        'expr': expr_list }\n\n        insert_dict = {'insert': {'rule': rule_fields} }\n        json_command[\"nftables\"].append(insert_dict)\n        if self.nft_exec_dict(json_command):\n          self.logger.logInfo(f'Added {_family} nat {chain_name} rule for source network {dest_net} to {target_net}')\n      except:\n        self.logger.logCrit(f\"Error running SNAT on {_family}, retrying...\")\n\n  def get_chain_handle(self, _family: str, _table: str, chain_name: str):\n    chain_handle = None\n    # Command: 'nft list chains {family}'\n    _list = {'list': {'chains': {'family': _family} } }\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n    kernel_ruleset = self.nft_exec_dict(command)\n    if kernel_ruleset:\n      for _object in kernel_ruleset[\"nftables\"]:\n        if not _object.get(\"chain\"):\n          continue\n        chain = _object[\"chain\"]\n        if chain[\"family\"] == _family and chain[\"table\"] == _table and chain[\"name\"] == chain_name:\n          chain_handle = chain[\"handle\"]\n          break\n    return chain_handle\n\n  def get_rules_handle(self, _family: str, _table: str, chain_name: str, _comment_filter = \"mailcow\"):\n    rule_handle = []\n    # Command: 'nft list chain {family} {table} {chain_name}'\n    _chain_opts = {'family': _family, 'table': _table, 'name': chain_name}\n    _list = {'list': {'chain': _chain_opts} }\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n\n    kernel_ruleset = self.nft_exec_dict(command)\n    if kernel_ruleset:\n      for _object in kernel_ruleset[\"nftables\"]:\n        if not _object.get(\"rule\"):\n          continue\n\n        rule = _object[\"rule\"]\n        if rule[\"family\"] == _family and rule[\"table\"] == _table and rule[\"chain\"] == chain_name:\n          if rule.get(\"comment\") and rule[\"comment\"] == _comment_filter:\n            rule_handle.append(rule[\"handle\"])\n    return rule_handle\n\n  def get_ban_ip_dict(self, ipaddr: str, _family: str):\n    json_command = self.get_base_dict()\n\n    expr_opt = []\n    ipaddr_net = ipaddress.ip_network(ipaddr, strict=False)\n    right_dict = {'prefix': {'addr': str(ipaddr_net.network_address), 'len': int(ipaddr_net.prefixlen) } }\n\n    left_dict = {'payload': {'protocol': _family, 'field': 'saddr'} }\n    match_dict = {'op': '==', 'left': left_dict, 'right': right_dict }\n    expr_opt.append({'match': match_dict})\n\n    counter_dict = {'counter': {'family': _family, 'table': \"filter\", 'packets': 0, 'bytes': 0} }\n    expr_opt.append(counter_dict)\n\n    expr_opt.append({'drop': \"null\"})\n\n    rule_dict = {'family': _family, 'table': \"filter\", 'chain': self.chain_name, 'expr': expr_opt}\n\n    base_dict = {'insert': {'rule': rule_dict} }\n    json_command[\"nftables\"].append(base_dict)\n\n    return json_command\n\n  def get_unban_ip_dict(self, ipaddr:str, _family: str):\n    json_command = self.get_base_dict()\n    # Command: 'nft list chain {s_family} filter  MAILCOW'\n    _chain_opts = {'family': _family, 'table': 'filter', 'name': self.chain_name}\n    _list = {'list': {'chain': _chain_opts} }\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n    kernel_ruleset = self.nft_exec_dict(command)\n    rule_handle = None\n    if kernel_ruleset:\n      for _object in kernel_ruleset[\"nftables\"]:\n        if not _object.get(\"rule\"):\n          continue\n\n        rule = _object[\"rule\"][\"expr\"][0][\"match\"]\n        if not \"payload\" in rule[\"left\"]:\n          continue\n        left_opt = rule[\"left\"][\"payload\"]\n        if not left_opt[\"protocol\"] == _family:\n          continue\n        if not left_opt[\"field\"] ==\"saddr\":\n          continue\n\n        # ip currently banned\n        rule_right = rule[\"right\"]\n        if isinstance(rule_right, dict):\n          current_rule_ip = rule_right[\"prefix\"][\"addr\"] + '/' + str(rule_right[\"prefix\"][\"len\"])\n        else:\n          current_rule_ip = rule_right\n        current_rule_net = ipaddress.ip_network(current_rule_ip)\n\n        # ip to ban\n        candidate_net = ipaddress.ip_network(ipaddr, strict=False)\n\n        if current_rule_net == candidate_net:\n          rule_handle = _object[\"rule\"][\"handle\"]\n          break\n\n      if rule_handle is not None:\n        mailcow_rule = {'family': _family, 'table': 'filter', 'chain': self.chain_name, 'handle': rule_handle}\n        delete_rule = {'delete': {'rule': mailcow_rule} }\n        json_command[\"nftables\"].append(delete_rule)\n      else:\n        return False\n\n    return json_command\n\n  def check_mailcow_chains(self, family: str, chain: str):\n    position = 0\n    rule_found = False\n    chain_name = self.nft_chain_names[family]['filter'][chain]\n\n    if not chain_name: return None\n\n    _chain_opts = {'family': family, 'table': 'filter', 'name': chain_name}\n    _list = {'list': {'chain': _chain_opts}}\n    command = self.get_base_dict()\n    command['nftables'].append(_list)\n    kernel_ruleset = self.nft_exec_dict(command)\n    if kernel_ruleset:\n      for _object in kernel_ruleset[\"nftables\"]:\n        if not _object.get(\"rule\"):\n          continue\n        rule = _object[\"rule\"]\n        if rule.get(\"comment\") and rule[\"comment\"] == \"mailcow\":\n          rule_found = True\n          break\n\n        position+=1\n\n    return position if rule_found else False\n\n  def create_mailcow_isolation_rule(self, _interface:str, _dports:list, _allow:str = \"\"):\n    family = \"ip\"\n    table = \"filter\"\n    comment_filter_drop = \"mailcow isolation\"\n    comment_filter_allow = \"mailcow isolation allow\"\n    json_command = self.get_base_dict()\n\n    # Delete old mailcow isolation rules\n    handles = self.get_rules_handle(family, table, self.chain_name, comment_filter_drop)\n    for handle in handles:\n      self.delete_filter_rule(family, self.chain_name, handle)\n    handles = self.get_rules_handle(family, table, self.chain_name, comment_filter_allow)\n    for handle in handles:\n      self.delete_filter_rule(family, self.chain_name, handle)\n\n    # insert mailcow isolation rule\n    _match_dict_drop = [\n      {\n        \"match\": {\n          \"op\": \"!=\",\n          \"left\": {\n            \"meta\": {\n              \"key\": \"iifname\"\n            }\n          },\n          \"right\": _interface\n        }\n      },\n      {\n        \"match\": {\n          \"op\": \"==\",\n          \"left\": {\n            \"meta\": {\n              \"key\": \"oifname\"\n            }\n          },\n          \"right\": _interface\n        }\n      },\n      {\n        \"match\": {\n          \"op\": \"==\",\n          \"left\": {\n            \"payload\": {\n              \"protocol\": \"tcp\",\n              \"field\": \"dport\"\n            }\n          },\n          \"right\": {\n            \"set\": _dports\n          }\n        }\n      },\n      {\n        \"counter\": {\n          \"packets\": 0,\n          \"bytes\": 0\n        }\n      },\n      {\n        \"drop\": None\n      }\n    ]\n    rule_drop = { \"insert\": { \"rule\": {\n      \"family\": family,\n      \"table\": table,\n      \"chain\": self.chain_name,\n      \"comment\": comment_filter_drop,\n      \"expr\": _match_dict_drop\n    }}}\n    json_command[\"nftables\"].append(rule_drop)\n\n    # insert mailcow isolation allow rule\n    if _allow != \"\":\n      _match_dict_allow = [\n        {\n          \"match\": {\n            \"op\": \"==\",\n            \"left\": {\n              \"payload\": {\n                \"protocol\": \"ip\",\n                \"field\": \"saddr\"\n              }\n            },\n            \"right\": _allow\n          }\n        },\n        {\n          \"match\": {\n            \"op\": \"!=\",\n            \"left\": {\n              \"meta\": {\n                \"key\": \"iifname\"\n              }\n            },\n            \"right\": _interface\n          }\n        },\n        {\n          \"match\": {\n            \"op\": \"==\",\n            \"left\": {\n              \"meta\": {\n                \"key\": \"oifname\"\n              }\n            },\n            \"right\": _interface\n          }\n        },\n        {\n          \"match\": {\n            \"op\": \"==\",\n            \"left\": {\n              \"payload\": {\n                \"protocol\": \"tcp\",\n                \"field\": \"dport\"\n              }\n            },\n            \"right\": {\n              \"set\": _dports\n            }\n          }\n        },\n        {\n          \"counter\": {\n            \"packets\": 0,\n            \"bytes\": 0\n          }\n        },\n        {\n          \"accept\": None\n        }\n      ]\n      rule_allow = { \"insert\": { \"rule\": {\n        \"family\": family,\n        \"table\": table,\n        \"chain\": self.chain_name,\n        \"comment\": comment_filter_allow,\n        \"expr\": _match_dict_allow\n      }}}\n      json_command[\"nftables\"].append(rule_allow)\n\n    success = self.nft_exec_dict(json_command)\n    if success == False:\n      self.logger.logCrit(f\"Error adding {self.chain_name} isolation\")\n      return False\n\n    return True"
  },
  {
    "path": "data/Dockerfiles/netfilter/modules/__init__.py",
    "content": ""
  },
  {
    "path": "data/Dockerfiles/nginx/Dockerfile",
    "content": "FROM nginx:alpine\nLABEL maintainer \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nENV PIP_BREAK_SYSTEM_PACKAGES=1\n\nRUN apk add --no-cache nginx \\\n  python3 \\\n  py3-pip && \\\n  pip install --upgrade pip && \\\n  pip install Jinja2\n\nRUN mkdir -p /etc/nginx/includes\n\nCOPY ./bootstrap.py /\nCOPY ./docker-entrypoint.sh /\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n"
  },
  {
    "path": "data/Dockerfiles/nginx/bootstrap.py",
    "content": "import os\nimport subprocess\nfrom jinja2 import Environment, FileSystemLoader\n\ndef includes_conf(env, template_vars):\n  server_name = \"server_name.active\"\n  listen_plain = \"listen_plain.active\"\n  listen_ssl = \"listen_ssl.active\"\n\n  server_name_config = f\"server_name {template_vars['MAILCOW_HOSTNAME']} autodiscover.* autoconfig.* {' '.join(template_vars['ADDITIONAL_SERVER_NAMES'])};\"\n  listen_plain_config = f\"listen {template_vars['HTTP_PORT']};\"\n  listen_ssl_config = f\"listen {template_vars['HTTPS_PORT']};\"\n  if template_vars['ENABLE_IPV6']:\n    listen_plain_config += f\"\\nlisten [::]:{template_vars['HTTP_PORT']};\"\n    listen_ssl_config += f\"\\nlisten [::]:{template_vars['HTTPS_PORT']} ssl;\"\n  listen_ssl_config += \"\\nhttp2 on;\"\n\n  with open(f\"/etc/nginx/conf.d/{server_name}\", \"w\") as f:\n    f.write(server_name_config)\n\n  with open(f\"/etc/nginx/conf.d/{listen_plain}\", \"w\") as f:\n    f.write(listen_plain_config)\n\n  with open(f\"/etc/nginx/conf.d/{listen_ssl}\", \"w\") as f:\n    f.write(listen_ssl_config)\n\ndef sites_default_conf(env, template_vars):\n  config_name = \"sites-default.conf\"\n  template = env.get_template(f\"{config_name}.j2\")\n  config = template.render(template_vars)\n\n  with open(f\"/etc/nginx/includes/{config_name}\", \"w\") as f:\n    f.write(config)\n\ndef nginx_conf(env, template_vars):\n  config_name = \"nginx.conf\"\n  template = env.get_template(f\"{config_name}.j2\")\n  config = template.render(template_vars)\n\n  with open(f\"/etc/nginx/{config_name}\", \"w\") as f:\n    f.write(config)\n\ndef prepare_template_vars():\n  ipv4_network = os.getenv(\"IPV4_NETWORK\", \"172.22.1\")\n  additional_server_names = os.getenv(\"ADDITIONAL_SERVER_NAMES\", \"\")\n  trusted_proxies = os.getenv(\"TRUSTED_PROXIES\", \"\")\n\n  template_vars = {\n    'IPV4_NETWORK': ipv4_network,\n    'TRUSTED_PROXIES': [item.strip() for item in trusted_proxies.split(\",\") if item.strip()],\n    'SKIP_RSPAMD': os.getenv(\"SKIP_RSPAMD\", \"n\").lower() in (\"y\", \"yes\"),\n    'SKIP_SOGO': os.getenv(\"SKIP_SOGO\", \"n\").lower() in (\"y\", \"yes\"),\n    'NGINX_USE_PROXY_PROTOCOL': os.getenv(\"NGINX_USE_PROXY_PROTOCOL\", \"n\").lower() in (\"y\", \"yes\"),\n    'MAILCOW_HOSTNAME': os.getenv(\"MAILCOW_HOSTNAME\", \"\"),\n    'ADDITIONAL_SERVER_NAMES': [item.strip() for item in additional_server_names.split(\",\") if item.strip()],\n    'HTTP_PORT': os.getenv(\"HTTP_PORT\", \"80\"),\n    'HTTPS_PORT': os.getenv(\"HTTPS_PORT\", \"443\"),\n    'SOGOHOST': os.getenv(\"SOGOHOST\", ipv4_network + \".248\"),\n    'RSPAMDHOST': os.getenv(\"RSPAMDHOST\", \"rspamd-mailcow\"),\n    'PHPFPMHOST': os.getenv(\"PHPFPMHOST\", \"php-fpm-mailcow\"),\n    'ENABLE_IPV6': os.getenv(\"ENABLE_IPV6\", \"true\").lower() != \"false\",\n    'HTTP_REDIRECT': os.getenv(\"HTTP_REDIRECT\", \"n\").lower() in (\"y\", \"yes\"),\n  }\n\n  ssl_dir = '/etc/ssl/mail/'\n  template_vars['valid_cert_dirs'] = []\n  for d in os.listdir(ssl_dir):\n    full_path = os.path.join(ssl_dir, d)\n    if not os.path.isdir(full_path):\n      continue\n\n    cert_path = os.path.join(full_path, 'cert.pem')\n    key_path = os.path.join(full_path, 'key.pem')\n    domains_path = os.path.join(full_path, 'domains')\n\n    if os.path.isfile(cert_path) and os.path.isfile(key_path) and os.path.isfile(domains_path):\n      with open(domains_path, 'r') as file:\n        domains = file.read().strip()\n      domains_list = domains.split()\n      if domains_list and template_vars[\"MAILCOW_HOSTNAME\"] not in domains_list:\n        template_vars['valid_cert_dirs'].append({\n          'cert_path': full_path + '/',\n          'domains': domains\n        })\n\n  return template_vars\n\ndef main():\n  env = Environment(loader=FileSystemLoader('./etc/nginx/conf.d/templates'))\n\n  # Render config\n  print(\"Render config\")\n  template_vars = prepare_template_vars()\n  sites_default_conf(env, template_vars)\n  nginx_conf(env, template_vars)\n  includes_conf(env, template_vars)\n\n\nif __name__ == \"__main__\":\n  main()\n"
  },
  {
    "path": "data/Dockerfiles/nginx/docker-entrypoint.sh",
    "content": "#!/bin/sh\n\nPHPFPMHOST=${PHPFPMHOST:-\"php-fpm-mailcow\"}\nSOGOHOST=${SOGOHOST:-\"$IPV4_NETWORK.248\"}\nRSPAMDHOST=${RSPAMDHOST:-\"rspamd-mailcow\"}\n\nuntil ping ${PHPFPMHOST} -c1 > /dev/null; do\n  echo \"Waiting for PHP...\"\n  sleep 1\ndone\nif ! printf \"%s\\n\" \"${SKIP_SOGO}\" | grep -E '^([yY][eE][sS]|[yY])+$' >/dev/null; then\n  until ping ${SOGOHOST} -c1 > /dev/null; do\n    echo \"Waiting for SOGo...\"\n    sleep 1\n  done\nfi\nif ! printf \"%s\\n\" \"${SKIP_RSPAMD}\" | grep -E '^([yY][eE][sS]|[yY])+$' >/dev/null; then\n  until ping ${RSPAMDHOST} -c1 > /dev/null; do\n    echo \"Waiting for Rspamd...\"\n    sleep 1\n  done\nfi\n\npython3 /bootstrap.py\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/olefy/Dockerfile",
    "content": "FROM alpine:3.21\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nARG PIP_BREAK_SYSTEM_PACKAGES=1\nWORKDIR /app\n\n#RUN addgroup -S olefy && adduser -S olefy -G olefy \\\nRUN apk add --virtual .build-deps gcc musl-dev python3-dev libffi-dev openssl-dev cargo \\\n  && apk add --update --no-cache python3 py3-pip openssl tzdata libmagic \\\n  && pip3 install --upgrade pip \\\n  && pip3 install --upgrade asyncio python-magic \\\n  && pip3 install --upgrade https://github.com/decalage2/oletools/archive/master.zip \\\n  && apk del .build-deps\n#  && sed -i 's/template_injection_detected = True/template_injection_detected = False/g' /usr/lib/python3.9/site-packages/oletools/olevba.py\n\nADD olefy.py /app/\n\nRUN chown -R nobody:nobody /app /tmp\n\nUSER nobody\n\nCMD [\"python3\", \"-u\", \"/app/olefy.py\"]\n"
  },
  {
    "path": "data/Dockerfiles/olefy/olefy.py",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n# Copyright (c) 2020, Dennis Kalbhen <d.kalbhen@heinlein-support.de>\n# Copyright (c) 2020, Carsten Rosenberg <c.rosenberg@heinlein-support.de>\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n###\n#\n#  olefy is a little helper socket to use oletools with rspamd. (https://rspamd.com)\n#  Please find updates and issues here: https://github.com/HeinleinSupport/olefy\n#\n###\n\nfrom subprocess import Popen, PIPE\nimport sys\nimport os\nimport logging\nimport asyncio\nimport time\nimport magic\nimport re\n\nskip_olefy = os.getenv('SKIP_OLEFY', '')\n\nif skip_olefy.lower() in ['yes', 'y']:\n    print(\"SKIP_OLEFY=y, skipping Olefy...\")\n    time.sleep(365 * 24 * 60 * 60)\n    sys.exit(0)\n\n# merge variables from /etc/olefy.conf and the defaults\nolefy_listen_addr_string = os.getenv('OLEFY_BINDADDRESS', '127.0.0.1,::1')\nolefy_listen_port = int(os.getenv('OLEFY_BINDPORT', '10050'))\nolefy_tmp_dir = os.getenv('OLEFY_TMPDIR', '/tmp')\nolefy_python_path = os.getenv('OLEFY_PYTHON_PATH', '/usr/bin/python3')\nolefy_olevba_path = os.getenv('OLEFY_OLEVBA_PATH', '/usr/local/bin/olevba3')\n# 10:DEBUG, 20:INFO, 30:WARNING, 40:ERROR, 50:CRITICAL\nolefy_loglvl = int(os.getenv('OLEFY_LOGLVL', 20))\nolefy_min_length = int(os.getenv('OLEFY_MINLENGTH', 500))\nolefy_del_tmp = int(os.getenv('OLEFY_DEL_TMP', 1))\nolefy_del_tmp_failed = int(os.getenv('OLEFY_DEL_TMP_FAILED', 1))\n\n# internal used variables\nrequest_time = '0000000000.000000'\nolefy_protocol = 'OLEFY'\nolefy_ping = 'PING'\nolefy_protocol_sep = '\\n\\n'\nolefy_headers = {}\n\n# init logging\nlogger = logging.getLogger('olefy')\nlogging.basicConfig(stream=sys.stdout, level=olefy_loglvl, format='olefy %(levelname)s %(funcName)s %(message)s')\n\nlogger.debug('olefy listen address string: {} (type {})'.format(olefy_listen_addr_string, type(olefy_listen_addr_string)))\n\nif not olefy_listen_addr_string:\n    olefy_listen_addr = \"\"\nelse:\n    addr_re = re.compile('[\\[\" \\]]')\n    olefy_listen_addr = addr_re.sub('', olefy_listen_addr_string.replace(\"'\", \"\")).split(',')\n\n# log runtime variables\nlogger.info('olefy listen address: {} (type: {})'.format(olefy_listen_addr, type(olefy_listen_addr)))\nlogger.info('olefy listen port: {}'.format(olefy_listen_port))\nlogger.info('olefy tmp dir: {}'.format(olefy_tmp_dir))\nlogger.info('olefy python path: {}'.format(olefy_python_path))\nlogger.info('olefy olvba path: {}'.format(olefy_olevba_path))\nlogger.info('olefy log level: {}'.format(olefy_loglvl))\nlogger.info('olefy min file length: {}'.format(olefy_min_length))\nlogger.info('olefy delete tmp file: {}'.format(olefy_del_tmp))\nlogger.info('olefy delete tmp file when failed: {}'.format(olefy_del_tmp_failed))\n\nif not os.path.isfile(olefy_python_path):\n    logger.critical('python path not found: {}'.format(olefy_python_path))\n    exit(1)\nif not os.path.isfile(olefy_olevba_path):\n    logger.critical('olevba path not found: {}'.format(olefy_olevba_path))\n    exit(1)\n\n# olefy protocol function\ndef protocol_split( olefy_line ):\n    header_lines = olefy_line.split('\\n')\n    for line in header_lines:\n        if line == 'OLEFY/1.0':\n            olefy_headers['olefy'] = line\n        elif line != '':\n            kv = line.split(': ')\n            if kv[0] != '' and kv[1] != '':\n                olefy_headers[kv[0]] = kv[1]\n    logger.debug('olefy_headers: {}'.format(olefy_headers))\n\n# calling oletools\ndef oletools( stream, tmp_file_name, lid ):\n    if olefy_min_length > stream.__len__():\n        logger.error('{} {} bytes (Not Scanning! File smaller than {!r})'.format(lid, stream.__len__(), olefy_min_length))\n        out = b'[ { \"error\": \"File too small\" } ]'\n    else:\n        tmp_file = open(tmp_file_name, 'wb')\n        tmp_file.write(stream)\n        tmp_file.close()\n\n        file_magic = magic.Magic(mime=True, uncompress=True)\n        file_mime = file_magic.from_file(tmp_file_name)\n        logger.info('{} {} (libmagic output)'.format(lid, file_mime))\n\n        # do the olefy\n        cmd_tmp = Popen([olefy_python_path, olefy_olevba_path, '-a', '-j' , '-l', 'error', tmp_file_name], stdout=PIPE, stderr=PIPE)\n        out, err = cmd_tmp.communicate()\n        out = bytes(out.decode('utf-8', 'ignore').replace('  ', ' ').replace('\\t', '').replace('\\n', '').replace('XLMMacroDeobfuscator: pywin32 is not installed (only is required if you want to use MS Excel)', ''), encoding=\"utf-8\")\n        failed = False\n        if out.__len__() < 30:\n            logger.error('{} olevba returned <30 chars - rc: {!r}, response: {!r}, error: {!r}'.format(lid,cmd_tmp.returncode,\n                out.decode('utf-8', 'ignore'), err.decode('utf-8', 'ignore')))\n            out = b'[ { \"error\": \"Unhandled error - too short olevba response\" } ]'\n            failed = True\n        elif err.__len__() > 10 and cmd_tmp.returncode == 9:\n            logger.error(\"{} olevba stderr >10 chars - rc: {!r}, response: {!r}\".format(lid, cmd_tmp.returncode, err.decode(\"utf-8\", \"ignore\")))\n            out = b'[ { \"error\": \"Decrypt failed\" } ]'\n            failed = True\n        elif err.__len__() > 10 and cmd_tmp.returncode > 9:\n            logger.error('{} olevba stderr >10 chars - rc: {!r}, response: {!r}'.format(lid, cmd_tmp.returncode, err.decode('utf-8', 'ignore')))\n            out = b'[ { \"error\": \"Unhandled oletools error\" } ]'\n            failed = True\n        elif cmd_tmp.returncode != 0:\n            logger.error('{} olevba exited with code {!r}; err: {!r}'.format(lid, cmd_tmp.returncode, err.decode('utf-8', 'ignore')))\n            failed = True\n\n        if failed and olefy_del_tmp_failed == 0:\n            logger.debug('{} {} FAILED: not deleting tmp file'.format(lid, tmp_file_name))\n        elif olefy_del_tmp == 1:\n            logger.debug('{} {} deleting tmp file'.format(lid, tmp_file_name))\n            os.remove(tmp_file_name)\n\n    logger.debug('{} response: {}'.format(lid, out.decode('utf-8', 'ignore')))\n    return out + b'\\t\\n\\n\\t'\n\n# Asyncio data handling, default AIO-Functions\nclass AIO(asyncio.Protocol):\n    def __init__(self):\n        self.extra = bytearray()\n\n    def connection_made(self, transport):\n        global request_time\n        peer = transport.get_extra_info('peername')\n        logger.debug('{} new connection was made'.format(peer))\n        self.transport = transport\n        request_time = str(time.time())\n\n    def data_received(self, request, msgid=1):\n        peer = self.transport.get_extra_info('peername')\n        logger.debug('{} data received from new connection'.format(peer))\n        self.extra.extend(request)\n\n    def eof_received(self):\n        peer = self.transport.get_extra_info('peername')\n        olefy_protocol_err = False\n        proto_ck = self.extra[0:2000].decode('utf-8', 'ignore')\n\n        headers = proto_ck[0:proto_ck.find(olefy_protocol_sep)]\n\n        if olefy_protocol == headers[0:5]:\n            self.extra = bytearray(self.extra[len(headers)+2:len(self.extra)])\n            protocol_split(headers)\n        else:\n            olefy_protocol_err = True\n\n        if olefy_ping == headers[0:4]:\n            is_ping = True\n        else:\n            is_ping = False\n            rspamd_id = olefy_headers['Rspamd-ID'][:6] or ''\n            lid = 'Rspamd-ID' in olefy_headers and '<'+rspamd_id+'>'\n            tmp_file_name = olefy_tmp_dir+'/'+request_time+'.'+str(peer[1])+'.'+rspamd_id\n            logger.debug('{} {} choosen as tmp filename'.format(lid, tmp_file_name))\n\n        if not is_ping or olefy_loglvl == 10:\n            logger.info('{} {} bytes (stream size)'.format(lid, self.extra.__len__()))\n\n        if olefy_ping == headers[0:4]:\n            logger.debug('{} PING request'.format(peer))\n            out = b'PONG'\n        elif olefy_protocol_err == True or olefy_headers['olefy'] != 'OLEFY/1.0':\n            logger.error('{} Protocol ERROR: no OLEFY/1.0 found'.format(lid))\n            out = b'[ { \"error\": \"Protocol error\" } ]'\n        elif 'Method' in olefy_headers:\n            if olefy_headers['Method'] == 'oletools':\n                out = oletools(self.extra, tmp_file_name, lid)\n        else:\n            logger.error('Protocol ERROR: Method header not found')\n            out = b'[ { \"error\": \"Protocol error: Method header not found\" } ]'\n\n        self.transport.write(out)\n        if not is_ping or olefy_loglvl == 10:\n            logger.info('{} {} response send: {!r}'.format(lid, peer, out))\n        self.transport.close()\n\n\n# start the listeners\nloop = asyncio.get_event_loop()\n# each client connection will create a new protocol instance\ncoro = loop.create_server(AIO, olefy_listen_addr, olefy_listen_port)\nserver = loop.run_until_complete(coro)\nfor sockets in server.sockets:\n    logger.info('serving on {}'.format(sockets.getsockname()))\n\n# XXX serve requests until KeyboardInterrupt, not needed for production\ntry:\n    loop.run_forever()\nexcept KeyboardInterrupt:\n    pass\n\n# graceful shutdown/reload\nserver.close()\nloop.run_until_complete(server.wait_closed())\nloop.close()\nlogger.info('stopped serving')\n"
  },
  {
    "path": "data/Dockerfiles/phpfpm/Dockerfile",
    "content": "FROM php:8.2-fpm-alpine3.21\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\n# renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$\nARG APCU_PECL_VERSION=5.1.28\n# renovate: datasource=github-tags depName=Imagick/imagick versioning=semver-coerced extractVersion=(?<version>.*)$\nARG IMAGICK_PECL_VERSION=3.8.1\n# renovate: datasource=github-tags depName=php/pecl-mail-mailparse versioning=semver-coerced extractVersion=^v(?<version>.*)$\nARG MAILPARSE_PECL_VERSION=3.1.9\n# renovate: datasource=github-tags depName=php-memcached-dev/php-memcached versioning=semver-coerced extractVersion=^v(?<version>.*)$\nARG MEMCACHED_PECL_VERSION=3.4.0\n# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=(?<version>.*)$\nARG REDIS_PECL_VERSION=6.3.0\n# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=(?<version>.*)$\nARG COMPOSER_VERSION=2.9.5\n\nRUN apk add -U --no-cache autoconf \\\n  aspell-dev \\\n  aspell-libs \\\n  bash \\\n  c-client \\\n  cyrus-sasl-dev \\\n  freetype \\\n  freetype-dev \\\n  g++ \\\n  git \\\n  gettext \\\n  gettext-dev \\\n  gmp-dev \\\n  gnupg \\\n  icu-dev \\\n  icu-libs \\\n  imagemagick \\\n  imagemagick-dev \\\n  imap-dev \\\n  jq \\\n  libavif \\\n  libavif-dev \\\n  libjpeg-turbo \\\n  libjpeg-turbo-dev \\\n  libmemcached \\\n  libmemcached-dev \\\n  libpng \\\n  libpng-dev \\\n  libressl \\\n  libressl-dev \\\n  librsvg \\\n  libtool \\\n  libwebp-dev \\\n  libxml2-dev \\\n  libxpm \\\n  libxpm-dev \\\n  libzip \\\n  libzip-dev \\\n  linux-headers \\\n  make \\\n  mysql-client \\\n  openldap-dev \\\n  pcre-dev \\\n  re2c \\\n  redis \\\n  samba-client \\\n  zlib-dev \\\n  tzdata \\\n  && pecl install APCu-${APCU_PECL_VERSION} \\\n  && pecl install imagick-${IMAGICK_PECL_VERSION} \\\n  && pecl install mailparse-${MAILPARSE_PECL_VERSION} \\\n  && pecl install memcached-${MEMCACHED_PECL_VERSION} \\\n  && pecl install redis-${REDIS_PECL_VERSION} \\\n  && docker-php-ext-enable apcu imagick memcached mailparse redis \\\n  && pecl clear-cache \\\n  && docker-php-ext-configure intl \\\n  && docker-php-ext-configure exif \\\n  && docker-php-ext-configure gd --with-freetype=/usr/include/ \\  \n    --with-jpeg=/usr/include/ \\\n    --with-webp \\\n    --with-xpm \\\n    --with-avif \\\n  && docker-php-ext-install -j 4 exif gd gettext intl ldap opcache pcntl pdo pdo_mysql pspell soap sockets zip bcmath gmp \\\n  && docker-php-ext-configure imap --with-imap --with-imap-ssl \\\n  && docker-php-ext-install -j 4 imap \\\n  && curl --silent --show-error https://getcomposer.org/installer | php -- --version=${COMPOSER_VERSION} \\\n  && mv composer.phar /usr/local/bin/composer \\\n  && chmod +x /usr/local/bin/composer \\\n  && apk del --purge autoconf \\\n    aspell-dev \\\n    cyrus-sasl-dev \\\n    freetype-dev \\\n    g++ \\\n    gettext-dev \\\n    icu-dev \\\n    imagemagick-dev \\\n    imap-dev \\\n    libavif-dev \\\n    libjpeg-turbo-dev \\\n    libmemcached-dev \\\n    libpng-dev \\\n    libressl-dev \\\n    libwebp-dev \\\n    libxml2-dev \\\n    libxpm-dev \\\n    libzip-dev \\\n    linux-headers \\\n    make \\\n    openldap-dev \\\n    pcre-dev \\\n    zlib-dev\n\nCOPY ./docker-entrypoint.sh /\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\n\nCMD [\"php-fpm\"]\n"
  },
  {
    "path": "data/Dockerfiles/phpfpm/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\nfunction array_by_comma { local IFS=\",\"; echo \"$*\"; }\n\n# Wait for containers\nwhile ! mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do\n  echo \"Waiting for SQL...\"\n  sleep 2\ndone\n\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  REDIS_HOST=$REDIS_SLAVEOF_IP\n  REDIS_PORT=$REDIS_SLAVEOF_PORT\nelse\n  REDIS_HOST=\"redis\"\n  REDIS_PORT=\"6379\"\nfi\nREDIS_CMDLINE=\"redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT} -a ${REDISPASS} --no-auth-warning\"\n\nuntil [[ $(${REDIS_CMDLINE} PING) == \"PONG\" ]]; do\n  echo \"Waiting for Redis...\"\n  sleep 2\ndone\n\n# Set redis session store\necho -n '\nsession.save_handler = redis\nsession.save_path = \"tcp://'${REDIS_HOST}':'${REDIS_PORT}'?auth='${REDISPASS}'\"\n' > /usr/local/etc/php/conf.d/session_store.ini\n\n# Check mysql_upgrade (master and slave)\nCONTAINER_ID=\nuntil [[ ! -z \"${CONTAINER_ID}\" ]] && [[ \"${CONTAINER_ID}\" =~ ^[[:alnum:]]*$ ]]; do\n  CONTAINER_ID=$(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" 2> /dev/null | jq -rc \"select( .name | tostring | contains(\\\"mysql-mailcow\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\" 2> /dev/null)\n  echo \"Could not get mysql-mailcow container id... trying again\"\n  sleep 2\ndone\necho \"MySQL @ ${CONTAINER_ID}\"\nSQL_LOOP_C=0\nSQL_CHANGED=0\nuntil [[ ${SQL_UPGRADE_STATUS} == 'success' ]]; do\n  if [ ${SQL_LOOP_C} -gt 4 ]; then\n    echo \"Tried to upgrade MySQL and failed, giving up after ${SQL_LOOP_C} retries and starting container (oops, not good)\"\n    break\n  fi\n  SQL_FULL_UPGRADE_RETURN=$(curl --silent --insecure -XPOST https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/exec -d '{\"cmd\":\"system\", \"task\":\"mysql_upgrade\"}' --silent -H 'Content-type: application/json')\n  SQL_UPGRADE_STATUS=$(echo ${SQL_FULL_UPGRADE_RETURN} | jq -r .type)\n  SQL_LOOP_C=$((SQL_LOOP_C+1))\n  echo \"SQL upgrade iteration #${SQL_LOOP_C}\"\n  if [[ ${SQL_UPGRADE_STATUS} == 'warning' ]]; then\n    SQL_CHANGED=1\n    echo \"MySQL applied an upgrade, debug output:\"\n    echo ${SQL_FULL_UPGRADE_RETURN}\n    sleep 3\n    while ! mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do\n      echo \"Waiting for SQL to return, please wait\"\n      sleep 2\n    done\n    continue\n  elif [[ ${SQL_UPGRADE_STATUS} == 'success' ]]; then\n    echo \"MySQL is up-to-date - debug output:\"\n    echo ${SQL_FULL_UPGRADE_RETURN}\n  else\n    echo \"No valid reponse for mysql_upgrade was received, debug output:\"\n    echo ${SQL_FULL_UPGRADE_RETURN}\n  fi\ndone\n\n# doing post-installation stuff, if SQL was upgraded (master and slave)\nif [ ${SQL_CHANGED} -eq 1 ]; then\n  POSTFIX=$(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" 2> /dev/null | jq -rc \"select( .name | tostring | contains(\\\"postfix-mailcow\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\" 2> /dev/null)\n  if [[ -z \"${POSTFIX}\" ]] || ! [[ \"${POSTFIX}\" =~ ^[[:alnum:]]*$ ]]; then\n    echo \"Could not determine Postfix container ID, skipping Postfix restart.\"\n  else\n    echo \"Restarting Postfix\"\n    curl -X POST --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${POSTFIX}/restart | jq -r '.msg'\n    echo \"Sleeping 5 seconds...\"\n    sleep 5\n  fi\nfi\n\n# Check mysql tz import (master and slave)\nTZ_CHECK=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT CONVERT_TZ('2019-11-02 23:33:00','Europe/Berlin','UTC') AS time;\" -BN 2> /dev/null)\nif [[ -z ${TZ_CHECK} ]] || [[ \"${TZ_CHECK}\" == \"NULL\" ]]; then\n  SQL_FULL_TZINFO_IMPORT_RETURN=$(curl --silent --insecure -XPOST https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/exec -d '{\"cmd\":\"system\", \"task\":\"mysql_tzinfo_to_sql\"}' --silent -H 'Content-type: application/json')\n  echo \"MySQL mysql_tzinfo_to_sql - debug output:\"\n  echo ${SQL_FULL_TZINFO_IMPORT_RETURN}\nfi\n\nif [[ \"${MASTER}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  echo \"We are master, preparing...\"\n  # Set a default release format\n  if [[ -z $(${REDIS_CMDLINE} --raw GET Q_RELEASE_FORMAT) ]]; then\n    ${REDIS_CMDLINE} --raw SET Q_RELEASE_FORMAT raw\n  fi\n\n  # Set max age of q items - if unset\n  if [[ -z $(${REDIS_CMDLINE} --raw GET Q_MAX_AGE) ]]; then\n    ${REDIS_CMDLINE} --raw SET Q_MAX_AGE 365\n  fi\n\n  # Set default password policy - if unset\n  if [[ -z $(${REDIS_CMDLINE} --raw HGET PASSWD_POLICY length) ]]; then\n    ${REDIS_CMDLINE} --raw HSET PASSWD_POLICY length 6\n    ${REDIS_CMDLINE} --raw HSET PASSWD_POLICY chars 0\n    ${REDIS_CMDLINE} --raw HSET PASSWD_POLICY special_chars 0\n    ${REDIS_CMDLINE} --raw HSET PASSWD_POLICY lowerupper 0\n    ${REDIS_CMDLINE} --raw HSET PASSWD_POLICY numbers 0\n  fi\n\n  # Trigger db init\n  echo \"Running DB init...\"\n  php -c /usr/local/etc/php -f /web/inc/init_db.inc.php\n\n  # Recreating domain map\n  echo \"Rebuilding domain map in Redis...\"\n  declare -a DOMAIN_ARR\n    ${REDIS_CMDLINE} DEL DOMAIN_MAP > /dev/null\n  while read line\n  do\n    DOMAIN_ARR+=(\"$line\")\n  done < <(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT domain FROM domain\" -Bs)\n  while read line\n  do\n    DOMAIN_ARR+=(\"$line\")\n  done < <(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT alias_domain FROM alias_domain\" -Bs)\n\n  if [[ ! -z ${DOMAIN_ARR} ]]; then\n  for domain in \"${DOMAIN_ARR[@]}\"; do\n    ${REDIS_CMDLINE} HSET DOMAIN_MAP ${domain} 1 > /dev/null\n  done\n  fi\n\n  # Set API options if env vars are not empty\n  if [[ ${API_ALLOW_FROM} != \"invalid\" ]] && [[ ! -z ${API_ALLOW_FROM} ]]; then\n    IFS=',' read -r -a API_ALLOW_FROM_ARR <<< \"${API_ALLOW_FROM}\"\n    declare -a VALIDATED_API_ALLOW_FROM_ARR\n    REGEX_IP6='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}(/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$'\n    REGEX_IP4='^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+(/([0-9]|[1-2][0-9]|3[0-2]))?$'\n    for IP in \"${API_ALLOW_FROM_ARR[@]}\"; do\n      if [[ ${IP} =~ ${REGEX_IP6} ]] || [[ ${IP} =~ ${REGEX_IP4} ]]; then\n        VALIDATED_API_ALLOW_FROM_ARR+=(\"${IP}\")\n      fi\n    done\n    VALIDATED_IPS=$(array_by_comma ${VALIDATED_API_ALLOW_FROM_ARR[*]})\n    if [[ ! -z ${VALIDATED_IPS} ]]; then\n      if [[ ${API_KEY} != \"invalid\" ]] && [[ ! -z ${API_KEY} ]]; then\n        mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF\nDELETE FROM api WHERE access = 'rw';\nINSERT INTO api (api_key, active, allow_from, access) VALUES (\"${API_KEY}\", \"1\", \"${VALIDATED_IPS}\", \"rw\");\nEOF\n      fi\n      if [[ ${API_KEY_READ_ONLY} != \"invalid\" ]] && [[ ! -z ${API_KEY_READ_ONLY} ]]; then\n        mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF\nDELETE FROM api WHERE access = 'ro';\nINSERT INTO api (api_key, active, allow_from, access) VALUES (\"${API_KEY_READ_ONLY}\", \"1\", \"${VALIDATED_IPS}\", \"ro\");\nEOF\n      fi\n    fi\n  fi\n\n  # Create events (master only, STATUS for event on slave will be SLAVESIDE_DISABLED)\n  mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF\nDROP EVENT IF EXISTS clean_spamalias;\nDELIMITER //\nCREATE EVENT clean_spamalias\nON SCHEDULE EVERY 1 DAY DO\nBEGIN\n  DELETE FROM spamalias WHERE validity < UNIX_TIMESTAMP() AND permanent = 0;\nEND;\n//\nDELIMITER ;\nDROP EVENT IF EXISTS clean_oauth2;\nDELIMITER //\nCREATE EVENT clean_oauth2\nON SCHEDULE EVERY 1 DAY DO\nBEGIN\n  DELETE FROM oauth_refresh_tokens WHERE expires < NOW();\n  DELETE FROM oauth_access_tokens WHERE expires < NOW();\n  DELETE FROM oauth_authorization_codes WHERE expires < NOW();\nEND;\n//\nDELIMITER ;\nDROP EVENT IF EXISTS clean_sasl_log;\nDELIMITER //\nCREATE EVENT clean_sasl_log\nON SCHEDULE EVERY 1 DAY DO\nBEGIN\n  DELETE sasl_log.* FROM sasl_log\n    LEFT JOIN (\n      SELECT username, service, MAX(datetime) AS lastdate\n      FROM sasl_log\n      GROUP BY username, service\n    ) AS last ON sasl_log.username = last.username AND sasl_log.service = last.service\n    WHERE datetime < DATE_SUB(NOW(), INTERVAL 31 DAY) AND datetime < lastdate;\n  DELETE FROM sasl_log\n    WHERE username NOT IN (SELECT username FROM mailbox) AND\n    datetime < DATE_SUB(NOW(), INTERVAL 31 DAY);\nEND;\n//\nDELIMITER ;\nEOF\nfi\n\n# Create dummy for custom overrides of mailcow style\n[[ ! -f /web/css/build/0081-custom-mailcow.css ]] && echo '/* Autogenerated by mailcow */' > /web/css/build/0081-custom-mailcow.css\n\n# Fix permissions for global filters\nchown -R 82:82 /global_sieve/*\n\n# Fix permissions on twig cache folder\nchown -R 82:82 /web/templates/cache\n# Clear cache\nfind /web/templates/cache/* -not -name '.gitkeep' -delete\n\n# Run hooks\nfor file in /hooks/*; do\n  if [ -x \"${file}\" ]; then\n    echo \"Running hook ${file}\"\n    \"${file}\"\n  fi\ndone\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/postfix/Dockerfile",
    "content": "FROM debian:bookworm-slim\n\nLABEL maintainer=\"The Infrastructure Company GmbH <info@servercow.de>\"\n\nARG DEBIAN_FRONTEND=noninteractive\nENV LC_ALL=C\n\nRUN dpkg-divert --local --rename --add /sbin/initctl \\\n\t&& ln -sf /bin/true /sbin/initctl \\\n\t&& dpkg-divert --local --rename --add /usr/bin/ischroot \\\n\t&& ln -sf /bin/true /usr/bin/ischroot\n\n# Add groups and users before installing Postfix to not break compatibility\nRUN groupadd -g 102 postfix \\\n  && groupadd -g 103 postdrop \\\n  && useradd -g postfix -u 101 -d /var/spool/postfix -s /usr/sbin/nologin postfix \\\n  && apt-get update && apt-get install -y --no-install-recommends \\\n\tca-certificates \\\n\tcurl \\\n\tdirmngr \\\n  \tdnsutils \\\n\tgnupg \\\n\tlibsasl2-modules \\\n  \tmariadb-client \\\n\tperl \\\n\tpostfix \\\n\tpostfix-mysql \\\n\tpostfix-pcre \\\n\tredis-tools \\\n\tsasl2-bin \\\n\tsudo \\\n\tsupervisor \\\n\tsyslog-ng \\\n\tsyslog-ng-core \\\n\tsyslog-ng-mod-redis \\\n  \ttzdata \\\n\t&& rm -rf /var/lib/apt/lists/* \\\n\t&& touch /etc/default/locale \\\n  && printf '#!/bin/bash\\n/usr/sbin/postconf -c /opt/postfix/conf \"$@\"' > /usr/local/sbin/postconf \\\n  && chmod +x /usr/local/sbin/postconf\n\nCOPY supervisord.conf /etc/supervisor/supervisord.conf\nCOPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf\nCOPY syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng-redis_slave.conf\nCOPY postfix.sh /opt/postfix.sh\nCOPY rspamd-pipe-ham /usr/local/bin/rspamd-pipe-ham\nCOPY rspamd-pipe-spam /usr/local/bin/rspamd-pipe-spam\nCOPY whitelist_forwardinghosts.sh /usr/local/bin/whitelist_forwardinghosts.sh\nCOPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh\nCOPY docker-entrypoint.sh /docker-entrypoint.sh\n\nRUN chmod +x /opt/postfix.sh \\\n  /usr/local/bin/rspamd-pipe-ham \\\n  /usr/local/bin/rspamd-pipe-spam \\\n  /usr/local/bin/whitelist_forwardinghosts.sh \\\n  /usr/local/sbin/stop-supervisor.sh\nRUN rm -rf /tmp/* /var/tmp/*\n\nEXPOSE 588\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\n\nCMD [\"/usr/bin/supervisord\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n"
  },
  {
    "path": "data/Dockerfiles/postfix/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\n# Run hooks\nfor file in /hooks/*; do\n  if [ -x \"${file}\" ]; then\n    echo \"Running hook ${file}\"\n    \"${file}\"\n  fi\ndone\n\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  cp /etc/syslog-ng/syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng.conf\nfi\n\n# Fix OpenSSL 3.X TLS1.0, 1.1 support (https://community.mailcow.email/d/4062-hi-all/20)\nif grep -qE '\\!SSLv2|\\!SSLv3|>=TLSv1(\\.[0-1])?$' /opt/postfix/conf/main.cf /opt/postfix/conf/extra.cf; then\n    sed -i '/\\[openssl_init\\]/a ssl_conf = ssl_configuration' /etc/ssl/openssl.cnf\n\n    echo \"[ssl_configuration]\" >> /etc/ssl/openssl.cnf\n    echo \"system_default = tls_system_default\" >> /etc/ssl/openssl.cnf\n    echo \"[tls_system_default]\" >> /etc/ssl/openssl.cnf\n    echo \"MinProtocol = TLSv1\" >> /etc/ssl/openssl.cnf\n    echo \"CipherString = DEFAULT@SECLEVEL=0\" >> /etc/ssl/openssl.cnf\nfi  \n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/postfix/postfix.sh",
    "content": "#!/bin/bash\n\ntrap \"postfix stop\" EXIT\n\n[[ ! -d /opt/postfix/conf/sql/ ]] && mkdir -p /opt/postfix/conf/sql/\n\n# Wait for MySQL to warm-up\nwhile ! mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do\n  echo \"Waiting for database to come up...\"\n  sleep 2\ndone\n\nuntil dig +short mailcow.email > /dev/null; do\n  echo \"Waiting for DNS...\"\n  sleep 1\ndone\n\ncat <<EOF > /etc/aliases\n# Autogenerated by mailcow\nnull: /dev/null\nwatchdog: /dev/null\nham: \"|/usr/local/bin/rspamd-pipe-ham\"\nspam: \"|/usr/local/bin/rspamd-pipe-spam\"\nEOF\nnewaliases;\n\n# create sni configuration\nif [[ \"${SKIP_LETS_ENCRYPT}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  echo -n \"\" > /opt/postfix/conf/sni.map\nelse\n  echo -n \"\" > /opt/postfix/conf/sni.map;\n  for cert_dir in /etc/ssl/mail/*/ ; do\n    if [[ ! -f ${cert_dir}domains ]] || [[ ! -f ${cert_dir}cert.pem ]] || [[ ! -f ${cert_dir}key.pem ]]; then\n      continue;\n    fi\n    IFS=\" \" read -r -a domains <<< \"$(cat \"${cert_dir}domains\")\"\n    for domain in \"${domains[@]}\"; do\n      echo -n \"${domain} ${cert_dir}key.pem ${cert_dir}cert.pem\" >> /opt/postfix/conf/sni.map;\n      echo \"\" >> /opt/postfix/conf/sni.map;\n    done\n  done\nfi\npostmap -F hash:/opt/postfix/conf/sni.map;\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_relay_ne.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT IF(EXISTS(SELECT address, domain FROM alias\n      WHERE address = '%s'\n        AND domain IN (\n          SELECT domain FROM domain\n            WHERE backupmx = '1'\n              AND relay_all_recipients = '1'\n              AND relay_unknown_only = '1')\n\n      ), 'lmtp:inet:dovecot:24', NULL) AS 'transport'\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_relay_recipient_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT DISTINCT\n  CASE WHEN '%d' IN (\n    SELECT domain FROM domain\n      WHERE relay_all_recipients=1\n        AND domain='%d'\n        AND backupmx=1\n  )\n  THEN '%s' ELSE (\n    SELECT goto FROM alias WHERE address='%s' AND active='1'\n  )\n  END AS result;\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_tls_policy_override_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT CONCAT(policy, ' ', parameters) AS tls_policy FROM tls_policy_override WHERE active = '1' AND dest = '%s'\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_tls_enforce_in_policy.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT IF(EXISTS(\n  SELECT 'TLS_ACTIVE' FROM alias\n    LEFT OUTER JOIN mailbox ON mailbox.username = alias.goto\n      WHERE (address='%s'\n        OR address IN (\n          SELECT CONCAT('%u', '@', target_domain) FROM alias_domain\n            WHERE alias_domain='%d'\n        )\n      ) AND JSON_UNQUOTE(JSON_VALUE(attributes, '$.tls_enforce_in')) = '1' AND mailbox.active = '1'\n  ), 'reject_plaintext_session', NULL) AS 'tls_enforce_in';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_sender_dependent_default_transport_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT GROUP_CONCAT(transport SEPARATOR '') AS transport_maps\n  FROM (\n    SELECT IF(EXISTS(SELECT 'smtp_type' FROM alias\n      LEFT OUTER JOIN mailbox ON mailbox.username = alias.goto\n        WHERE (address = '%s'\n          OR address IN (\n            SELECT CONCAT('%u', '@', target_domain) FROM alias_domain\n              WHERE alias_domain = '%d'\n          )\n        )\n        AND JSON_UNQUOTE(JSON_VALUE(attributes, '$.tls_enforce_out')) = '1'\n        AND mailbox.active = '1'\n    ), 'smtp_enforced_tls:', 'smtp:') AS 'transport'\n    UNION ALL\n    SELECT COALESCE(\n      (SELECT hostname FROM relayhosts\n      LEFT OUTER JOIN mailbox ON JSON_UNQUOTE(JSON_VALUE(mailbox.attributes, '$.relayhost')) = relayhosts.id\n        WHERE relayhosts.active = '1'\n          AND (\n            mailbox.username IN (SELECT alias.goto from alias\n              JOIN mailbox ON mailbox.username = alias.goto\n                WHERE alias.active = '1'\n                  AND alias.address = '%s'\n                  AND alias.address NOT LIKE '@%%'\n            )\n          )\n      ),\n      (SELECT hostname FROM relayhosts\n      LEFT OUTER JOIN domain ON domain.relayhost = relayhosts.id\n        WHERE relayhosts.active = '1'\n          AND (domain.domain = '%d'\n            OR domain.domain IN (\n              SELECT target_domain FROM alias_domain\n                WHERE alias_domain = '%d'\n            )\n          )\n      )\n    )\n  ) AS transport_view;\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_transport_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT CONCAT('smtp_via_transport_maps:', nexthop) AS transport FROM transports\n  WHERE active = '1'\n  AND destination = '%s';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_resource_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT 'null@localhost' FROM mailbox\n  WHERE kind REGEXP 'location|thing|group' AND username = '%s';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_sasl_passwd_maps_sender_dependent.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT CONCAT_WS(':', username, password) AS auth_data FROM relayhosts\n  WHERE id IN (\n    SELECT COALESCE(\n      (SELECT id FROM relayhosts\n      LEFT OUTER JOIN domain ON domain.relayhost = relayhosts.id\n      WHERE relayhosts.active = '1'\n        AND (domain.domain = '%d'\n          OR domain.domain IN (\n            SELECT target_domain FROM alias_domain\n            WHERE alias_domain = '%d'\n          )\n        )\n      ),\n      (SELECT id FROM relayhosts\n      LEFT OUTER JOIN mailbox ON JSON_UNQUOTE(JSON_VALUE(mailbox.attributes, '$.relayhost')) = relayhosts.id\n      WHERE relayhosts.active = '1'\n        AND (\n          mailbox.username IN (\n            SELECT alias.goto from alias\n              JOIN mailbox ON mailbox.username = alias.goto\n                WHERE alias.active = '1'\n                  AND alias.address = '%s'\n                  AND alias.address NOT LIKE '@%%'\n          )\n        )\n      )\n    )\n  )\n  AND active = '1'\n  AND username != '';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_sasl_passwd_maps_transport_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT CONCAT_WS(':', username, password) AS auth_data FROM transports\n  WHERE nexthop = '%s'\n  AND active = '1'\n  AND username != ''\n  LIMIT 1;\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_alias_domain_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT username FROM mailbox, alias_domain\n  WHERE alias_domain.alias_domain = '%d'\n    AND mailbox.username = CONCAT('%u', '@', alias_domain.target_domain)\n    AND (mailbox.active = '1' OR mailbox.active = '2')\n    AND alias_domain.active='1'\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_alias_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT goto FROM alias\n  WHERE address='%s'\n    AND (active='1' OR active='2');\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_recipient_bcc_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT bcc_dest FROM bcc_maps\n  WHERE local_dest='%s'\n    AND type='rcpt'\n    AND active='1';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_sender_bcc_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT bcc_dest FROM bcc_maps\n  WHERE local_dest='%s'\n    AND type='sender'\n    AND active='1';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT new_dest FROM recipient_maps\n  WHERE old_dest='%s'\n    AND active='1';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_domains_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT alias_domain from alias_domain WHERE alias_domain='%s' AND active='1'\n  UNION\n  SELECT domain FROM domain\n    WHERE domain='%s'\n      AND active = '1'\n      AND backupmx = '0'\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_mailbox_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT CONCAT(JSON_UNQUOTE(JSON_VALUE(attributes, '$.mailbox_format')), mailbox_path_prefix, '%d/%u/') FROM mailbox WHERE username='%s' AND (active = '1' OR active = '2')\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_relay_domain_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '1' AND active = '1'\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_sender_acl.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\n# First select queries domain and alias_domain to determine if domains are active.\nquery = SELECT goto FROM alias\n  WHERE id IN (\n      SELECT COALESCE (\n        (\n          SELECT id FROM alias\n            WHERE address='%s'\n            AND (active='1' OR active='2')\n            AND sender_allowed='1'\n        ), (\n          SELECT id FROM alias\n            WHERE address='@%d'\n            AND (active='1' OR active='2')\n            AND sender_allowed='1'\n        )\n      )\n    )\n    AND active='1'\n    AND sender_allowed='1'\n    AND (domain IN\n      (SELECT domain FROM domain\n        WHERE domain='%d'\n          AND active='1')\n      OR domain in (\n        SELECT alias_domain FROM alias_domain\n          WHERE alias_domain='%d'\n            AND active='1'\n      )\n    )\n  UNION\n  SELECT logged_in_as FROM sender_acl\n    WHERE send_as='@%d'\n      OR send_as='%s'\n      OR send_as='*'\n      OR send_as IN (\n        SELECT CONCAT('@',target_domain) FROM alias_domain\n          WHERE alias_domain = '%d')\n      OR send_as IN (\n        SELECT CONCAT('%u','@',target_domain) FROM alias_domain\n          WHERE alias_domain = '%d')\n      AND logged_in_as NOT IN (\n        SELECT goto FROM alias\n          WHERE address='%s')\n  UNION\n  SELECT username FROM mailbox, alias_domain\n    WHERE alias_domain.alias_domain = '%d'\n      AND mailbox.username = CONCAT('%u','@',alias_domain.target_domain)\n      AND (mailbox.active = '1' OR mailbox.active ='2')\n      AND alias_domain.active='1';\nEOF\n\n# MX based routing\ncat <<EOF > /opt/postfix/conf/sql/mysql_mbr_access_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT CONCAT('FILTER smtp_via_transport_maps:', nexthop) as transport FROM transports\n  WHERE '%s' REGEXP destination\n    AND active='1'\n    AND is_mx_based='1';\nEOF\n\ncat <<EOF > /opt/postfix/conf/sql/mysql_virtual_spamalias_maps.cf\n# Autogenerated by mailcow\nuser = ${DBUSER}\npassword = ${DBPASS}\nhosts = unix:/var/run/mysqld/mysqld.sock\ndbname = ${DBNAME}\nquery = SELECT goto FROM spamalias\n  WHERE address='%s'\n    AND (validity >= UNIX_TIMESTAMP() OR permanent != 0)\nEOF\n\nif [ ! -f /opt/postfix/conf/dns_blocklists.cf ]; then\n  cat <<EOF > /opt/postfix/conf/dns_blocklists.cf\n# This file can be edited.\n# Delete this file and restart postfix container to revert any changes.\npostscreen_dnsbl_sites = wl.mailspike.net=127.0.0.[18;19;20]*-2\n  hostkarma.junkemailfilter.com=127.0.0.1*-2\n  list.dnswl.org=127.0.[0..255].0*-2\n  list.dnswl.org=127.0.[0..255].1*-4\n  list.dnswl.org=127.0.[0..255].2*-6\n  list.dnswl.org=127.0.[0..255].3*-8\n  bl.spamcop.net*2\n  bl.suomispam.net*2\n  hostkarma.junkemailfilter.com=127.0.0.2*3\n  hostkarma.junkemailfilter.com=127.0.0.4*2\n  hostkarma.junkemailfilter.com=127.0.1.2*1\n  backscatter.spameatingmonkey.net*2\n  bl.ipv6.spameatingmonkey.net*2\n  bl.spameatingmonkey.net*2\n  b.barracudacentral.org=127.0.0.2*7\n  bl.mailspike.net=127.0.0.2*5\n  bl.mailspike.net=127.0.0.[10;11;12]*4\nEOF\nfi\n\n# Remove discontinued DNSBLs from existing dns_blocklists.cf\nsed -i '/ix\\.dnsbl\\.manitu\\.net\\*2/d' /opt/postfix/conf/dns_blocklists.cf # Nixspam\n\nDNSBL_CONFIG=$(grep -v '^#' /opt/postfix/conf/dns_blocklists.cf | grep '\\S')\n\nif [ ! -z \"$DNSBL_CONFIG\" ]; then\n  echo -e \"\\e[33mChecking if ASN for your IP is listed for Spamhaus Bad ASN List...\\e[0m\"\n  if [ -n \"$SPAMHAUS_DQS_KEY\" ]; then\n    echo -e \"\\e[32mDetected SPAMHAUS_DQS_KEY variable from mailcow.conf...\\e[0m\"\n    echo -e \"\\e[33mUsing DQS Blocklists from Spamhaus!\\e[0m\"\n    SPAMHAUS_DNSBL_CONFIG=$(cat <<EOF\n  ${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net=127.0.0.[4..7]*6\n  ${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net=127.0.0.[10;11]*8\n  ${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net=127.0.0.3*4\n  ${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net=127.0.0.2*3\npostscreen_dnsbl_reply_map = texthash:/opt/postfix/conf/dnsbl_reply.map\nEOF\n\n  cat <<EOF > /opt/postfix/conf/dnsbl_reply.map\n# Autogenerated by mailcow, using Spamhaus DQS reply domains\n${SPAMHAUS_DQS_KEY}.sbl.dq.spamhaus.net     sbl.spamhaus.org\n${SPAMHAUS_DQS_KEY}.xbl.dq.spamhaus.net     xbl.spamhaus.org\n${SPAMHAUS_DQS_KEY}.pbl.dq.spamhaus.net     pbl.spamhaus.org\n${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net     zen.spamhaus.org\n${SPAMHAUS_DQS_KEY}.dbl.dq.spamhaus.net     dbl.spamhaus.org\n${SPAMHAUS_DQS_KEY}.zrd.dq.spamhaus.net     zrd.spamhaus.org\nEOF\n    )\n  else\n    if [ -f \"/opt/postfix/conf/dnsbl_reply.map\" ]; then\n      rm /opt/postfix/conf/dnsbl_reply.map\n    fi\n    response=$(curl --connect-timeout 15 --max-time 30 -s -o /dev/null -w \"%{http_code}\" \"https://asn-check.mailcow.email\")\n    if [ \"$response\" -eq 503 ]; then\n      echo -e \"\\e[31mThe AS of your IP is listed as a banned AS from Spamhaus!\\e[0m\"\n      echo -e \"\\e[33mNo SPAMHAUS_DQS_KEY found... Skipping Spamhaus blocklists entirely!\\e[0m\"\n      SPAMHAUS_DNSBL_CONFIG=\"\"\n    elif [ \"$response\" -eq 200 ]; then\n      echo -e \"\\e[32mThe AS of your IP is NOT listed as a banned AS from Spamhaus!\\e[0m\"\n      echo -e \"\\e[33mUsing the open Spamhaus blocklists.\\e[0m\"\n      SPAMHAUS_DNSBL_CONFIG=$(cat <<EOF\n  zen.spamhaus.org=127.0.0.[10;11]*8\n  zen.spamhaus.org=127.0.0.[4..7]*6\n  zen.spamhaus.org=127.0.0.3*4\n  zen.spamhaus.org=127.0.0.2*3\nEOF\n      )\n\n    else\n      echo -e \"\\e[31mWe couldn't determine your AS... (maybe DNS/Network issue?) Response Code: $response\\e[0m\"\n      echo -e \"\\e[33mDeactivating Spamhaus DNS Blocklists to be on the safe site!\\e[0m\"\n      SPAMHAUS_DNSBL_CONFIG=\"\"\n    fi\n  fi\nfi\n\n# Reset main.cf\nsed -i '/Overrides/q' /opt/postfix/conf/main.cf\necho >> /opt/postfix/conf/main.cf\n# Append postscreen dnsbl sites to main.cf\nif [ ! -z \"$DNSBL_CONFIG\" ]; then\n  echo -e \"${DNSBL_CONFIG}\\n${SPAMHAUS_DNSBL_CONFIG}\" >> /opt/postfix/conf/main.cf\nfi\n# Append user overrides\necho -e \"\\n# User Overrides\" >> /opt/postfix/conf/main.cf\ntouch /opt/postfix/conf/extra.cf\nsed -i '/\\$myhostname/! { /myhostname/d }' /opt/postfix/conf/extra.cf\necho -e \"myhostname = ${MAILCOW_HOSTNAME}\\n$(cat /opt/postfix/conf/extra.cf)\" > /opt/postfix/conf/extra.cf\ncat /opt/postfix/conf/extra.cf >> /opt/postfix/conf/main.cf\n\nif [ ! -f /opt/postfix/conf/custom_transport.pcre ]; then\n  echo \"Creating dummy custom_transport.pcre\"\n  touch /opt/postfix/conf/custom_transport.pcre\nfi\n\nif [[ ! -f /opt/postfix/conf/custom_postscreen_whitelist.cidr ]]; then\n  echo \"Creating dummy custom_postscreen_whitelist.cidr\"\n  cat <<EOF > /opt/postfix/conf/custom_postscreen_whitelist.cidr\n# Autogenerated by mailcow\n# Rules are evaluated in the order as specified.\n# Blacklist 192.168.* except 192.168.0.1.\n# 192.168.0.1          permit\n# 192.168.0.0/16       reject\nEOF\nfi\n\n# Fix Postfix permissions\nchown -R root:postfix /opt/postfix/conf/sql/ /opt/postfix/conf/custom_transport.pcre\nchmod 640 /opt/postfix/conf/sql/*.cf /opt/postfix/conf/custom_transport.pcre\nchgrp -R postdrop /var/spool/postfix/public\nchgrp -R postdrop /var/spool/postfix/maildrop\npostfix set-permissions\n\n# Checking if there is a leftover of a crashed postfix container before starting a new one\nif [ -e /var/spool/postfix/pid/master.pid ]; then\n  rm -rf /var/spool/postfix/pid/master.pid\nfi\n\n# Check Postfix configuration\npostconf -c /opt/postfix/conf > /dev/null\n\nif [[ $? != 0 ]]; then\n  echo \"Postfix configuration error, refusing to start.\"\n  exit 1\nelse\n  postfix -c /opt/postfix/conf start\n  sleep 126144000\nfi\n"
  },
  {
    "path": "data/Dockerfiles/postfix/rspamd-pipe-ham",
    "content": "#!/bin/bash\nFILE=/tmp/mail$$\ncat > $FILE\ntrap \"/bin/rm -f $FILE\" 0 1 2 3 13 15\n\ncat ${FILE} | /usr/bin/curl -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd/learnham\ncat ${FILE} | /usr/bin/curl -H \"Flag: 13\" -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd/fuzzyadd\n\nexit 0\n"
  },
  {
    "path": "data/Dockerfiles/postfix/rspamd-pipe-spam",
    "content": "#!/bin/bash\nFILE=/tmp/mail$$\ncat > $FILE\ntrap \"/bin/rm -f $FILE\" 0 1 2 3 13 15\n\ncat ${FILE} | /usr/bin/curl -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd/learnspam\ncat ${FILE} | /usr/bin/curl -H \"Flag: 11\" -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd/fuzzyadd\n\nexit 0\n"
  },
  {
    "path": "data/Dockerfiles/postfix/stop-supervisor.sh",
    "content": "#!/bin/bash\n\nprintf \"READY\\n\";\n\nwhile read line; do\n  echo \"Processing Event: $line\" >&2;\n  kill -3 $(cat \"/var/run/supervisord.pid\")\ndone < /dev/stdin\n"
  },
  {
    "path": "data/Dockerfiles/postfix/supervisord.conf",
    "content": "[supervisord]\npidfile=/var/run/supervisord.pid\nnodaemon=true\nuser=root\n\n[program:syslog-ng]\ncommand=/usr/sbin/syslog-ng --foreground  --no-caps\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nautostart=true\n\n[program:postfix]\ncommand=/opt/postfix.sh\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nautorestart=true\nstartsecs=10\n\n[eventlistener:processes]\ncommand=/usr/local/sbin/stop-supervisor.sh\nevents=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL\n"
  },
  {
    "path": "data/Dockerfiles/postfix/syslog-ng-redis_slave.conf",
    "content": "@version: 3.38\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  dns_cache(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats_freq(0);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_src {\n  unix-stream(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis1\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"POSTFIX_MAILLOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\ndestination d_redis_f2b_channel {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis2\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"PUBLISH\" \"F2B_CHANNEL\" \"$(sanitize $MESSAGE)\")\n  );\n};\nfilter f_mail { facility(mail); };\n# start\n# overriding warnings are still displayed when the entrypoint runs its initial check\n# warnings logged by postfix-mailcow to syslog are hidden to reduce repeating msgs\n# Some other warnings are ignored\nfilter f_ignore {\n  not match(\"overriding earlier entry\" value(\"MESSAGE\"));\n  not match(\"TLS SNI from checks.mailcow.email\" value(\"MESSAGE\"));\n  not match(\"no SASL support\" value(\"MESSAGE\"));\n  not facility (local0, local1, local2, local3, local4, local5, local6, local7);\n};\n# end\nlog {\n  source(s_src);\n  filter(f_ignore);\n  destination(d_stdout);\n  filter(f_mail);\n  destination(d_redis_ui_log);\n  destination(d_redis_f2b_channel);\n};\n"
  },
  {
    "path": "data/Dockerfiles/postfix/syslog-ng.conf",
    "content": "@version: 3.38\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  dns_cache(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats_freq(0);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_src {\n  unix-stream(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis1\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"POSTFIX_MAILLOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\ndestination d_redis_f2b_channel {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis2\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"PUBLISH\" \"F2B_CHANNEL\" \"$(sanitize $MESSAGE)\")\n  );\n};\nfilter f_mail { facility(mail); };\n# start\n# overriding warnings are still displayed when the entrypoint runs its initial check\n# warnings logged by postfix-mailcow to syslog are hidden to reduce repeating msgs\n# Some other warnings are ignored\nfilter f_ignore {\n  not match(\"overriding earlier entry\" value(\"MESSAGE\"));\n  not match(\"TLS SNI from checks.mailcow.email\" value(\"MESSAGE\"));\n  not match(\"no SASL support\" value(\"MESSAGE\"));\n  not facility (local0, local1, local2, local3, local4, local5, local6, local7);\n};\n# end\nlog {\n  source(s_src);\n  filter(f_ignore);\n  destination(d_stdout);\n  filter(f_mail);\n  destination(d_redis_ui_log);\n  destination(d_redis_f2b_channel);\n};\n"
  },
  {
    "path": "data/Dockerfiles/postfix/whitelist_forwardinghosts.sh",
    "content": "#!/bin/bash\n\nwhile read QUERY; do\n\tQUERY=($QUERY)\n\tif [ \"${QUERY[0]}\" != \"get\" ]; then\n\t\techo \"500 dunno\"\n\t\tcontinue\n\tfi\n\tresult=$(curl -s http://nginx:8081/forwardinghosts.php?host=${QUERY[1]})\n\tlogger -t whitelist_forwardinghosts -p mail.info \"Look up ${QUERY[1]} on whitelist, result $result\"\n\techo ${result}\ndone\n"
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/Dockerfile",
    "content": "FROM golang:1.25-bookworm AS builder\nWORKDIR /src\n\nENV CGO_ENABLED=0 \\\n    GO111MODULE=on \\\n\t\tNOOPT=1 \\\n    VERSION=1.8.22\n\nRUN git clone --branch v${VERSION} https://github.com/Zuplu/postfix-tlspol && \\\n    cd /src/postfix-tlspol && \\\n    scripts/build.sh build-only\n\n\nFROM debian:bookworm-slim\nLABEL maintainer=\"The Infrastructure Company GmbH <info@servercow.de>\"\n\nARG DEBIAN_FRONTEND=noninteractive\nENV LC_ALL=C\n\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n\tca-certificates \\\n\tdirmngr \\\n  \tdnsutils \\\n\tiputils-ping \\\n\tsudo \\\n\tsupervisor \\\n\tredis-tools \\\n\tsyslog-ng \\\n\tsyslog-ng-core \\\n\tsyslog-ng-mod-redis \\\n  \ttzdata \\\n\t&& rm -rf /var/lib/apt/lists/* \\\n\t&& touch /etc/default/locale\n\nCOPY supervisord.conf /etc/supervisor/supervisord.conf\nCOPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf\nCOPY syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng-redis_slave.conf\nCOPY postfix-tlspol.sh /opt/postfix-tlspol.sh\nCOPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh\nCOPY docker-entrypoint.sh /docker-entrypoint.sh\nCOPY --from=builder /src/postfix-tlspol/build/postfix-tlspol /usr/local/bin/postfix-tlspol\n\nRUN chmod +x /opt/postfix-tlspol.sh \\\n  /usr/local/sbin/stop-supervisor.sh \\\n  /docker-entrypoint.sh\nRUN rm -rf /tmp/* /var/tmp/*\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\n\nCMD [\"/usr/bin/supervisord\", \"-c\", \"/etc/supervisor/supervisord.conf\"]"
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  cp /etc/syslog-ng/syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng.conf\nfi\n\nexec \"$@\""
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/postfix-tlspol.sh",
    "content": "#!/bin/bash\n\nLOGLVL=info\n\nif [ ${DEV_MODE} != \"n\" ]; then\n  echo -e \"\\e[31mEnabling debug mode\\e[0m\"\n  set -x\n  LOGLVL=debug\nfi\n\n[[ ! -d /etc/postfix-tlspol ]] && mkdir -p /etc/postfix-tlspol\n[[ ! -d /var/lib/postfix-tlspol ]] && mkdir -p /var/lib/postfix-tlspol\n\nuntil dig +short mailcow.email > /dev/null; do\n  echo \"Waiting for DNS...\"\n  sleep 1\ndone\n\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  export REDIS_CMDLINE=\"redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning\"\nelse\n  export REDIS_CMDLINE=\"redis-cli -h redis -p 6379 -a ${REDISPASS} --no-auth-warning\"\nfi\n\nuntil [[ $(${REDIS_CMDLINE} PING) == \"PONG\" ]]; do\n  echo \"Waiting for Redis...\"\n  sleep 2\ndone\n\necho \"Waiting for Postfix...\"\nuntil ping postfix -c1 > /dev/null; do\n  sleep 1\ndone\necho \"Postfix OK\"\n\ncat <<EOF > /etc/postfix-tlspol/config.yaml\nserver:\n  address: 0.0.0.0:8642\n\n  log-level: ${LOGLVL}\n\n  prefetch: true\n\n  cache-file: /var/lib/postfix-tlspol/cache.db\n\ndns:\n  # must support DNSSEC\n  address: 127.0.0.11:53\nEOF\n\n/usr/local/bin/postfix-tlspol -config /etc/postfix-tlspol/config.yaml"
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/stop-supervisor.sh",
    "content": "#!/bin/bash\n\nprintf \"READY\\n\";\n\nwhile read line; do\n  echo \"Processing Event: $line\" >&2;\n  kill -3 $(cat \"/var/run/supervisord.pid\")\ndone < /dev/stdin\n"
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/supervisord.conf",
    "content": "[supervisord]\npidfile=/var/run/supervisord.pid\nnodaemon=true\nuser=root\n\n[program:syslog-ng]\ncommand=/usr/sbin/syslog-ng --foreground  --no-caps\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nautostart=true\n\n[program:postfix-tlspol]\nstartsecs=10\nautorestart=true\ncommand=/opt/postfix-tlspol.sh\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\n\n[eventlistener:processes]\ncommand=/usr/local/sbin/stop-supervisor.sh\nevents=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL"
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/syslog-ng-redis_slave.conf",
    "content": "@version: 3.38\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  dns_cache(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats_freq(0);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_src {\n  unix-stream(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis1\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"POSTFIX_MAILLOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\nfilter f_mail { facility(mail); };\n# start\n# overriding warnings are still displayed when the entrypoint runs its initial check\n# warnings logged by postfix-mailcow to syslog are hidden to reduce repeating msgs\n# Some other warnings are ignored\nfilter f_ignore {\n  not match(\"overriding earlier entry\" value(\"MESSAGE\"));\n  not match(\"TLS SNI from checks.mailcow.email\" value(\"MESSAGE\"));\n  not match(\"no SASL support\" value(\"MESSAGE\"));\n  not facility (local0, local1, local2, local3, local4, local5, local6, local7);\n};\n# end\nlog {\n  source(s_src);\n  filter(f_ignore);\n  destination(d_stdout);\n  filter(f_mail);\n  destination(d_redis_ui_log);\n};\n"
  },
  {
    "path": "data/Dockerfiles/postfix-tlspol/syslog-ng.conf",
    "content": "@version: 3.38\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  dns_cache(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats_freq(0);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_src {\n  unix-stream(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis1\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"POSTFIX_MAILLOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\nfilter f_mail { facility(mail); };\n# start\n# overriding warnings are still displayed when the entrypoint runs its initial check\n# warnings logged by postfix-mailcow to syslog are hidden to reduce repeating msgs\n# Some other warnings are ignored\nfilter f_ignore {\n  not match(\"overriding earlier entry\" value(\"MESSAGE\"));\n  not match(\"TLS SNI from checks.mailcow.email\" value(\"MESSAGE\"));\n  not match(\"no SASL support\" value(\"MESSAGE\"));\n  not facility (local0, local1, local2, local3, local4, local5, local6, local7);\n};\n# end\nlog {\n  source(s_src);\n  filter(f_ignore);\n  destination(d_stdout);\n  filter(f_mail);\n  destination(d_redis_ui_log);\n};\n"
  },
  {
    "path": "data/Dockerfiles/rspamd/Dockerfile",
    "content": "FROM debian:trixie-slim\nLABEL maintainer=\"The Infrastructure Company GmbH <info@servercow.de>\"\n\nARG DEBIAN_FRONTEND=noninteractive\nARG RSPAMD_VER=rspamd_3.14.3-1~236eb65\nARG CODENAME=trixie\nENV LC_ALL=C\n\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n  tzdata \\\n  ca-certificates \\\n  gnupg2 \\\n  apt-transport-https \\\n  dnsutils \\\n  netcat-traditional \\\n  wget \\\n  redis-tools \\\n  procps \\\n  nano \\\n  lua-cjson \\\n  && arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \\\n  && wget -P /tmp https://rspamd.com/apt-stable/pool/main/r/rspamd/${RSPAMD_VER}~${CODENAME}_${arch}.deb\\\n  && apt install -y /tmp/${RSPAMD_VER}~${CODENAME}_${arch}.deb \\\n  && rm -rf /var/lib/apt/lists/* /tmp/*\\\n  && apt-get autoremove --purge \\\n  && apt-get clean \\\n  && mkdir -p /run/rspamd \\\n  && chown _rspamd:_rspamd /run/rspamd \\\n  && echo 'alias ll=\"ls -la --color\"' >> ~/.bashrc \\\n  && sed -i 's/#analysis_keyword_table > 0/analysis_cat_table.macro_exist == \"M\"/g' /usr/share/rspamd/lualib/lua_scanners/oletools.lua\n\nCOPY settings.conf /etc/rspamd/settings.conf\nCOPY set_worker_password.sh /set_worker_password.sh\nCOPY docker-entrypoint.sh /docker-entrypoint.sh\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\n\nSTOPSIGNAL SIGTERM\n\nCMD [\"/usr/bin/rspamd\", \"-f\", \"-u\", \"_rspamd\", \"-g\", \"_rspamd\"]\n"
  },
  {
    "path": "data/Dockerfiles/rspamd/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\nuntil nc phpfpm 9001 -z; do\n  echo \"Waiting for PHP on port 9001...\"\n  sleep 3\ndone\n\nuntil nc phpfpm 9002 -z; do\n  echo \"Waiting for PHP on port 9002...\"\n  sleep 3\ndone\n\nmkdir -p /etc/rspamd/plugins.d \\\n  /etc/rspamd/custom\n\ntouch /etc/rspamd/rspamd.conf.local \\\n  /etc/rspamd/rspamd.conf.override\n\nchmod 755 /var/lib/rspamd\n\n\n[[ ! -f /etc/rspamd/override.d/worker-controller-password.inc ]] && echo '# Autogenerated by mailcow' > /etc/rspamd/override.d/worker-controller-password.inc\n\necho ${IPV4_NETWORK}.0/24 > /etc/rspamd/custom/mailcow_networks.map\necho ${IPV6_NETWORK} >> /etc/rspamd/custom/mailcow_networks.map\n\nDOVECOT_V4=\nDOVECOT_V6=\nuntil [[ ! -z ${DOVECOT_V4} ]]; do\n  DOVECOT_V4=$(dig a dovecot +short)\n  DOVECOT_V6=$(dig aaaa dovecot +short)\n  [[ ! -z ${DOVECOT_V4} ]] && break;\n  echo \"Waiting for Dovecot...\"\n  sleep 3\ndone\necho ${DOVECOT_V4}/32 > /etc/rspamd/custom/dovecot_trusted.map\nif [[ ! -z ${DOVECOT_V6} ]]; then\n  echo ${DOVECOT_V6}/128 >> /etc/rspamd/custom/dovecot_trusted.map\nfi\n\nRSPAMD_V4=\nRSPAMD_V6=\nuntil [[ ! -z ${RSPAMD_V4} ]]; do\n  RSPAMD_V4=$(dig a rspamd +short)\n  RSPAMD_V6=$(dig aaaa rspamd +short)\n  [[ ! -z ${RSPAMD_V4} ]] && break;\n  echo \"Waiting for Rspamd...\"\n  sleep 3\ndone\necho ${RSPAMD_V4}/32 > /etc/rspamd/custom/rspamd_trusted.map\nif [[ ! -z ${RSPAMD_V6} ]]; then\n  echo ${RSPAMD_V6}/128 >> /etc/rspamd/custom/rspamd_trusted.map\nfi\n\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  cat <<EOF > /etc/rspamd/local.d/redis.conf\nread_servers = \"redis:6379\";\nwrite_servers = \"${REDIS_SLAVEOF_IP}:${REDIS_SLAVEOF_PORT}\";\npassword = \"${REDISPASS}\";\ntimeout = 10;\nEOF\n  until [[ $(redis-cli -h redis-mailcow -a ${REDISPASS} --no-auth-warning PING) == \"PONG\" ]]; do\n    echo \"Waiting for Redis @redis-mailcow...\"\n    sleep 2\n  done\n  until [[ $(redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning PING) == \"PONG\" ]]; do\n    echo \"Waiting for Redis @${REDIS_SLAVEOF_IP}...\"\n    sleep 2\n  done\n  redis-cli -h redis-mailcow -a ${REDISPASS} --no-auth-warning SLAVEOF ${REDIS_SLAVEOF_IP} ${REDIS_SLAVEOF_PORT}\nelse\n  cat <<EOF > /etc/rspamd/local.d/redis.conf\nservers = \"redis:6379\";\npassword = \"${REDISPASS}\";\ntimeout = 10;\nEOF\n  until [[ $(redis-cli -h redis-mailcow -a ${REDISPASS} --no-auth-warning PING) == \"PONG\" ]]; do\n    echo \"Waiting for Redis slave...\"\n    sleep 2\n  done\n  redis-cli -h redis-mailcow -a ${REDISPASS} --no-auth-warning SLAVEOF NO ONE\nfi\n\nif [[ \"${SKIP_OLEFY}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  if [[ -f /etc/rspamd/local.d/external_services.conf ]]; then\n    rm /etc/rspamd/local.d/external_services.conf\n  fi\nelse\n  if [[ ! -f /etc/rspamd/local.d/external_services.conf ]]; then\n    cat <<EOF > /etc/rspamd/local.d/external_services.conf\noletools {\n  # default olefy settings\n  servers = \"olefy:10055\";\n  # needs to be set explicitly for Rspamd < 1.9.5\n  scan_mime_parts = true;\n  # mime-part regex matching in content-type or filename\n  # block all macros\n  extended = true;\n  max_size = 3145728;\n  timeout = 20.0;\n  retransmits = 1;\n}\nEOF\n  fi\nfi\n\n# Provide additional lua modules\nln -s /usr/lib/$(uname -m)-linux-gnu/liblua5.1-cjson.so.0.0.0 /usr/lib/rspamd/cjson.so\n\nchown -R _rspamd:_rspamd /var/lib/rspamd \\\n  /etc/rspamd/local.d \\\n  /etc/rspamd/override.d \\\n  /etc/rspamd/rspamd.conf.local \\\n  /etc/rspamd/rspamd.conf.override \\\n  /etc/rspamd/plugins.d\n\n# Fix missing default global maps, if any\n# These exists in mailcow UI and should not be removed\ntouch /etc/rspamd/custom/global_mime_from_blacklist.map \\\n  /etc/rspamd/custom/global_rcpt_blacklist.map \\\n  /etc/rspamd/custom/global_smtp_from_blacklist.map \\\n  /etc/rspamd/custom/global_mime_from_whitelist.map \\\n  /etc/rspamd/custom/global_rcpt_whitelist.map \\\n  /etc/rspamd/custom/global_smtp_from_whitelist.map \\\n  /etc/rspamd/custom/bad_languages.map \\\n  /etc/rspamd/custom/sa-rules \\\n  /etc/rspamd/custom/dovecot_trusted.map \\\n  /etc/rspamd/custom/rspamd_trusted.map \\\n  /etc/rspamd/custom/mailcow_networks.map \\\n  /etc/rspamd/custom/ip_wl.map \\\n  /etc/rspamd/custom/fishy_tlds.map \\\n  /etc/rspamd/custom/bad_words.map \\\n  /etc/rspamd/custom/bad_asn.map \\\n  /etc/rspamd/custom/bad_words_de.map \\\n  /etc/rspamd/custom/bulk_header.map \\\n  /etc/rspamd/custom/bad_header.map\n\n# www-data (82) group needs to write to these files\nchown _rspamd:_rspamd /etc/rspamd/custom/\nchmod 0755 /etc/rspamd/custom/.\nchown -R 82:82 /etc/rspamd/custom/*\nchmod 644 -R /etc/rspamd/custom/*\n\n# Run hooks\nfor file in /hooks/*; do\n  if [ -x \"${file}\" ]; then\n    echo \"Running hook ${file}\"\n    \"${file}\"\n  fi\ndone\n\n# If DQS KEY is set in mailcow.conf add Spamhaus DQS RBLs\nif [[ ! -z ${SPAMHAUS_DQS_KEY} ]]; then\n    cat <<EOF > /etc/rspamd/custom/dqs-rbl.conf\n  # Autogenerated by mailcow. DO NOT TOUCH!\n    spamhaus {\n        rbl = \"${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net\";\n        from = false;\n    }\n    spamhaus_from {\n        from = true;\n        received = false;\n        rbl = \"${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net\";\n        returncodes {\n          SPAMHAUS_ZEN = [ \"127.0.0.2\", \"127.0.0.3\", \"127.0.0.4\", \"127.0.0.5\", \"127.0.0.6\", \"127.0.0.7\", \"127.0.0.9\", \"127.0.0.10\", \"127.0.0.11\" ];\n        }\n    }\n    spamhaus_authbl_received {\n        # Check if the sender client is listed in AuthBL (AuthBL is *not* part of ZEN)\n        rbl = \"${SPAMHAUS_DQS_KEY}.authbl.dq.spamhaus.net\";\n        from = false;\n        received = true;\n        ipv6 = true;\n        returncodes {\n          SH_AUTHBL_RECEIVED = \"127.0.0.20\"\n        }\n    }\n    spamhaus_dbl {\n        # Add checks on the HELO string\n        rbl = \"${SPAMHAUS_DQS_KEY}.dbl.dq.spamhaus.net\";\n        helo = true;\n        rdns = true;\n        dkim = true;\n        disable_monitoring = true;\n        returncodes {\n            RBL_DBL_SPAM = \"127.0.1.2\";\n            RBL_DBL_PHISH = \"127.0.1.4\";\n            RBL_DBL_MALWARE = \"127.0.1.5\";\n            RBL_DBL_BOTNET = \"127.0.1.6\";\n            RBL_DBL_ABUSED_SPAM = \"127.0.1.102\";\n            RBL_DBL_ABUSED_PHISH = \"127.0.1.104\";\n            RBL_DBL_ABUSED_MALWARE = \"127.0.1.105\";\n            RBL_DBL_ABUSED_BOTNET = \"127.0.1.106\";\n            RBL_DBL_DONT_QUERY_IPS = \"127.0.1.255\";\n        }\n    }\n    spamhaus_dbl_fullurls {\n        ignore_defaults = true;\n        no_ip = true;\n        rbl = \"${SPAMHAUS_DQS_KEY}.dbl.dq.spamhaus.net\";\n        selector = 'urls:get_host'\n        disable_monitoring = true;\n        returncodes {\n            DBLABUSED_SPAM_FULLURLS = \"127.0.1.102\";\n            DBLABUSED_PHISH_FULLURLS = \"127.0.1.104\";\n            DBLABUSED_MALWARE_FULLURLS = \"127.0.1.105\";\n            DBLABUSED_BOTNET_FULLURLS = \"127.0.1.106\";\n        }\n    }\n    spamhaus_zrd {\n        # Add checks on the HELO string also for DQS\n        rbl = \"${SPAMHAUS_DQS_KEY}.zrd.dq.spamhaus.net\";\n        helo = true;\n        rdns = true;\n        dkim = true;\n        disable_monitoring = true;\n        returncodes {\n            RBL_ZRD_VERY_FRESH_DOMAIN = [\"127.0.2.2\", \"127.0.2.3\", \"127.0.2.4\"];\n            RBL_ZRD_FRESH_DOMAIN = [\n              \"127.0.2.5\", \"127.0.2.6\", \"127.0.2.7\", \"127.0.2.8\", \"127.0.2.9\", \"127.0.2.10\", \"127.0.2.11\", \"127.0.2.12\", \"127.0.2.13\", \"127.0.2.14\", \"127.0.2.15\", \"127.0.2.16\", \"127.0.2.17\", \"127.0.2.18\", \"127.0.2.19\", \"127.0.2.20\", \"127.0.2.21\", \"127.0.2.22\", \"127.0.2.23\", \"127.0.2.24\"\n            ];\n            RBL_ZRD_DONT_QUERY_IPS = \"127.0.2.255\";\n        }\n    }\n    \"SPAMHAUS_ZEN_URIBL\" {\n      enabled = true;\n      rbl = \"${SPAMHAUS_DQS_KEY}.zen.dq.spamhaus.net\";\n      resolve_ip = true;\n      checks = ['urls'];\n      replyto = true;\n      emails = true;\n      ipv4 = true;\n      ipv6 = true;\n      emails_domainonly = true;\n      returncodes {\n        URIBL_SBL = \"127.0.0.2\";\n        URIBL_SBL_CSS = \"127.0.0.3\";\n        URIBL_XBL = [\"127.0.0.4\", \"127.0.0.5\", \"127.0.0.6\", \"127.0.0.7\"];\n        URIBL_PBL = [\"127.0.0.10\", \"127.0.0.11\"];\n        URIBL_DROP = \"127.0.0.9\";\n      }\n    }\n    SH_EMAIL_DBL {\n      ignore_defaults = true;\n      replyto = true;\n      emails_domainonly = true;\n      disable_monitoring = true;\n      rbl = \"${SPAMHAUS_DQS_KEY}.dbl.dq.spamhaus.net\";\n      returncodes = {\n        SH_EMAIL_DBL = [\n          \"127.0.1.2\",\n          \"127.0.1.4\",\n          \"127.0.1.5\",\n          \"127.0.1.6\"\n        ];\n        SH_EMAIL_DBL_ABUSED = [\n          \"127.0.1.102\",\n          \"127.0.1.104\",\n          \"127.0.1.105\",\n          \"127.0.1.106\"\n        ];\n        SH_EMAIL_DBL_DONT_QUERY_IPS = [ \"127.0.1.255\" ];\n      }\n    }\n    SH_EMAIL_ZRD {\n      ignore_defaults = true;\n      replyto = true;\n      emails_domainonly = true;\n      disable_monitoring = true;\n      rbl = \"${SPAMHAUS_DQS_KEY}.zrd.dq.spamhaus.net\";\n      returncodes = {\n        SH_EMAIL_ZRD_VERY_FRESH_DOMAIN = [\"127.0.2.2\", \"127.0.2.3\", \"127.0.2.4\"];\n        SH_EMAIL_ZRD_FRESH_DOMAIN = [\n          \"127.0.2.5\", \"127.0.2.6\", \"127.0.2.7\", \"127.0.2.8\", \"127.0.2.9\", \"127.0.2.10\", \"127.0.2.11\", \"127.0.2.12\", \"127.0.2.13\", \"127.0.2.14\", \"127.0.2.15\", \"127.0.2.16\", \"127.0.2.17\", \"127.0.2.18\", \"127.0.2.19\", \"127.0.2.20\", \"127.0.2.21\", \"127.0.2.22\", \"127.0.2.23\", \"127.0.2.24\"\n        ];\n        SH_EMAIL_ZRD_DONT_QUERY_IPS = [ \"127.0.2.255\" ];\n      }\n    }\n    \"DBL\" {\n        # override the defaults for DBL defined in modules.d/rbl.conf\n        rbl = \"${SPAMHAUS_DQS_KEY}.dbl.dq.spamhaus.net\";\n        disable_monitoring = true;\n    }\n    \"ZRD\" {\n        ignore_defaults = true;\n        rbl = \"${SPAMHAUS_DQS_KEY}.zrd.dq.spamhaus.net\";\n        no_ip = true;\n        dkim = true;\n        emails = true;\n        emails_domainonly = true;\n        urls = true;\n        returncodes = {\n            ZRD_VERY_FRESH_DOMAIN = [\"127.0.2.2\", \"127.0.2.3\", \"127.0.2.4\"];\n            ZRD_FRESH_DOMAIN = [\"127.0.2.5\", \"127.0.2.6\", \"127.0.2.7\", \"127.0.2.8\", \"127.0.2.9\", \"127.0.2.10\", \"127.0.2.11\", \"127.0.2.12\", \"127.0.2.13\", \"127.0.2.14\", \"127.0.2.15\", \"127.0.2.16\", \"127.0.2.17\", \"127.0.2.18\", \"127.0.2.19\", \"127.0.2.20\", \"127.0.2.21\", \"127.0.2.22\", \"127.0.2.23\", \"127.0.2.24\"];\n        }\n    }\n    spamhaus_sbl_url {\n        ignore_defaults = true\n        rbl = \"${SPAMHAUS_DQS_KEY}.sbl.dq.spamhaus.net\";\n        checks = ['urls'];\n        disable_monitoring = true;\n        returncodes {\n            SPAMHAUS_SBL_URL = \"127.0.0.2\";\n        }\n    }\n\n    SH_HBL_EMAIL {\n      ignore_defaults = true;\n      rbl = \"_email.${SPAMHAUS_DQS_KEY}.hbl.dq.spamhaus.net\";\n      emails_domainonly = false;\n      selector = \"from('smtp').lower;from('mime').lower\";\n      ignore_whitelist = true;\n      checks = ['emails', 'replyto'];\n      hash = \"sha1\";\n      returncodes = {\n        SH_HBL_EMAIL = [\n          \"127.0.3.2\"\n        ];\n      }\n    }\n\n    spamhaus_dqs_hbl {\n      symbol = \"HBL_FILE_UNKNOWN\";\n      rbl = \"_file.${SPAMHAUS_DQS_KEY}.hbl.dq.spamhaus.net.\";\n      selector = \"attachments('rbase32', 'sha256')\";\n      ignore_whitelist = true;\n      ignore_defaults = true;\n      returncodes {\n        SH_HBL_FILE_MALICIOUS = \"127.0.3.10\";\n        SH_HBL_FILE_SUSPICIOUS = \"127.0.3.15\";\n      }\n    }\nEOF\nelse\n  rm -rf /etc/rspamd/custom/dqs-rbl.conf\nfi\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/rspamd/sa_trivial_convert.lua",
    "content": "local fun = require \"fun\"\nlocal rspamd_logger = require \"rspamd_logger\"\nlocal util = require \"rspamd_util\"\nlocal lua_util = require \"lua_util\"\nlocal rspamd_regexp = require \"rspamd_regexp\"\nlocal ucl = require \"ucl\"\n\nlocal complicated = {}\nlocal rules = {}\nlocal scores = {}\n\nlocal function words_to_re(words, start)\n  return table.concat(fun.totable(fun.drop_n(start, words)), \" \");\nend\n\nlocal function split(str, delim)\n  local result = {}\n\n  if not delim then\n    delim = '[^%s]+'\n  end\n\n  for token in string.gmatch(str, delim) do\n    table.insert(result, token)\n  end\n\n  return result\nend\n\nlocal function handle_header_def(hline, cur_rule)\n  --Now check for modifiers inside header's name\n  local hdrs = split(hline, '[^|]+')\n  local hdr_params = {}\n  local cur_param = {}\n  -- Check if an re is an ordinary re\n  local ordinary = true\n\n  for _,h in ipairs(hdrs) do\n    if h == 'ALL' or h == 'ALL:raw' then\n      ordinary = false\n    else\n      local args = split(h, '[^:]+')\n      cur_param['strong'] = false\n      cur_param['raw'] = false\n      cur_param['header'] = args[1]\n\n      if args[2] then\n        -- We have some ops that are required for the header, so it's not ordinary\n        ordinary = false\n      end\n\n      fun.each(function(func)\n          if func == 'addr' then\n            cur_param['function'] = function(str)\n              local addr_parsed = util.parse_addr(str)\n              local ret = {}\n              if addr_parsed then\n                for _,elt in ipairs(addr_parsed) do\n                  if elt['addr'] then\n                    table.insert(ret, elt['addr'])\n                  end\n                end\n              end\n\n              return ret\n            end\n          elseif func == 'name' then\n            cur_param['function'] = function(str)\n              local addr_parsed = util.parse_addr(str)\n              local ret = {}\n              if addr_parsed then\n                for _,elt in ipairs(addr_parsed) do\n                  if elt['name'] then\n                    table.insert(ret, elt['name'])\n                  end\n                end\n              end\n\n              return ret\n            end\n          elseif func == 'raw' then\n            cur_param['raw'] = true\n          elseif func == 'case' then\n            cur_param['strong'] = true\n          else\n            rspamd_logger.warnx(rspamd_config, 'Function %1 is not supported in %2',\n              func, cur_rule['symbol'])\n          end\n        end, fun.tail(args))\n\n        -- Some header rules require splitting to check of multiple headers\n        if cur_param['header'] == 'MESSAGEID' then\n          -- Special case for spamassassin\n          ordinary = false\n        elseif cur_param['header'] == 'ToCc' then\n          ordinary = false\n        else\n          table.insert(hdr_params, cur_param)\n        end\n    end\n\n    cur_rule['ordinary'] = ordinary and (not (#hdr_params > 1))\n    cur_rule['header'] = hdr_params\n  end\nend\n\nlocal function process_sa_conf(f)\n  local cur_rule = {}\n  local valid_rule = false\n\n  local function insert_cur_rule()\n   if not rules[cur_rule.type] then\n     rules[cur_rule.type] = {}\n   end\n\n   local target = rules[cur_rule.type]\n\n   if cur_rule.type == 'header' then\n     if not cur_rule.header[1].header then\n      rspamd_logger.errx(rspamd_config, 'bad rule definition: %1', cur_rule)\n      return\n     end\n     if not target[cur_rule.header[1].header] then\n       target[cur_rule.header[1].header] = {}\n     end\n     target = target[cur_rule.header[1].header]\n   end\n\n   if not cur_rule['symbol'] then\n     rspamd_logger.errx(rspamd_config, 'bad rule definition: %1', cur_rule)\n     return\n   end\n   target[cur_rule['symbol']] = cur_rule\n   cur_rule = {}\n   valid_rule = false\n  end\n\n  local function parse_score(words)\n    if #words == 3 then\n      -- score rule <x>\n      return tonumber(words[3])\n    elseif #words == 6 then\n      -- score rule <x1> <x2> <x3> <x4>\n      -- we assume here that bayes and network are enabled and select <x4>\n      return tonumber(words[6])\n    else\n      rspamd_logger.errx(rspamd_config, 'invalid score for %1', words[2])\n    end\n\n    return 0\n  end\n\n  local skip_to_endif = false\n  local if_nested = 0\n  for l in f:lines() do\n    (function ()\n    l = lua_util.rspamd_str_trim(l)\n    -- Replace bla=~/re/ with bla =~ /re/ (#2372)\n    l = l:gsub('([^%s])%s*([=!]~)%s*([^%s])', '%1 %2 %3')\n\n    if string.len(l) == 0 or string.sub(l, 1, 1) == '#' then\n      return\n    end\n\n    -- Unbalanced if/endif\n    if if_nested < 0 then if_nested = 0 end\n    if skip_to_endif then\n      if string.match(l, '^endif') then\n        if_nested = if_nested - 1\n\n        if if_nested == 0 then\n          skip_to_endif = false\n        end\n      elseif string.match(l, '^if') then\n        if_nested = if_nested + 1\n      elseif string.match(l, '^else') then\n        -- Else counterpart for if\n        skip_to_endif = false\n      end\n      table.insert(complicated, l)\n      return\n    else\n      if string.match(l, '^ifplugin') then\n        skip_to_endif = true\n        if_nested = if_nested + 1\n        table.insert(complicated, l)\n      elseif string.match(l, '^if !plugin%(') then\n         skip_to_endif = true\n         if_nested = if_nested + 1\n        table.insert(complicated, l)\n      elseif string.match(l, '^if') then\n        -- Unknown if\n        skip_to_endif = true\n        if_nested = if_nested + 1\n        table.insert(complicated, l)\n      elseif string.match(l, '^else') then\n        -- Else counterpart for if\n        skip_to_endif = true\n        table.insert(complicated, l)\n      elseif string.match(l, '^endif') then\n        if_nested = if_nested - 1\n        table.insert(complicated, l)\n      end\n    end\n\n    -- Skip comments\n    local words = fun.totable(fun.take_while(\n      function(w) return string.sub(w, 1, 1) ~= '#' end,\n      fun.filter(function(w)\n          return w ~= \"\" end,\n      fun.iter(split(l)))))\n\n    if words[1] == \"header\" then\n      -- header SYMBOL Header ~= /regexp/\n      if valid_rule then\n        insert_cur_rule()\n      end\n      if words[4] and (words[4] == '=~' or words[4] == '!~') then\n        cur_rule['type'] = 'header'\n        cur_rule['symbol'] = words[2]\n\n        if words[4] == '!~' then\n          table.insert(complicated, l)\n          return\n        end\n\n        cur_rule['re_expr'] = words_to_re(words, 4)\n        local unset_comp = string.find(cur_rule['re_expr'], '%s+%[if%-unset:')\n        if unset_comp then\n          table.insert(complicated, l)\n          return\n        end\n\n        cur_rule['re'] = rspamd_regexp.create(cur_rule['re_expr'])\n\n        if not cur_rule['re'] then\n          rspamd_logger.warnx(rspamd_config, \"Cannot parse regexp '%1' for %2\",\n            cur_rule['re_expr'], cur_rule['symbol'])\n          table.insert(complicated, l)\n          return\n        else\n          handle_header_def(words[3], cur_rule)\n          if not cur_rule['ordinary'] then\n            table.insert(complicated, l)\n            return\n          end\n        end\n\n        valid_rule = true\n      else\n        table.insert(complicated, l)\n        return\n      end\n    elseif words[1] == \"body\" then\n      -- body SYMBOL /regexp/\n      if valid_rule then\n        insert_cur_rule()\n      end\n\n      cur_rule['symbol'] = words[2]\n      if words[3] and (string.sub(words[3], 1, 1) == '/'\n          or string.sub(words[3], 1, 1) == 'm') then\n        cur_rule['type'] = 'sabody'\n        cur_rule['re_expr'] = words_to_re(words, 2)\n        cur_rule['re'] = rspamd_regexp.create(cur_rule['re_expr'])\n        if cur_rule['re'] then\n\n          valid_rule = true\n        end\n      else\n        -- might be function\n        table.insert(complicated, l)\n        return\n      end\n    elseif words[1] == \"rawbody\" then\n      -- body SYMBOL /regexp/\n      if valid_rule then\n        insert_cur_rule()\n      end\n\n      cur_rule['symbol'] = words[2]\n      if words[3] and (string.sub(words[3], 1, 1) == '/'\n          or string.sub(words[3], 1, 1) == 'm') then\n        cur_rule['type'] = 'sarawbody'\n        cur_rule['re_expr'] = words_to_re(words, 2)\n        cur_rule['re'] = rspamd_regexp.create(cur_rule['re_expr'])\n        if cur_rule['re'] then\n          valid_rule = true\n        end\n      else\n        table.insert(complicated, l)\n        return\n      end\n    elseif words[1] == \"full\" then\n      -- body SYMBOL /regexp/\n      if valid_rule then\n        insert_cur_rule()\n      end\n\n      cur_rule['symbol'] = words[2]\n\n      if words[3] and (string.sub(words[3], 1, 1) == '/'\n          or string.sub(words[3], 1, 1) == 'm') then\n        cur_rule['type'] = 'message'\n        cur_rule['re_expr'] = words_to_re(words, 2)\n        cur_rule['re'] = rspamd_regexp.create(cur_rule['re_expr'])\n        cur_rule['raw'] = true\n        if cur_rule['re'] then\n          valid_rule = true\n        end\n      else\n        table.insert(complicated, l)\n        return\n      end\n    elseif words[1] == \"uri\" then\n      -- uri SYMBOL /regexp/\n      if valid_rule then\n        insert_cur_rule()\n      end\n      cur_rule['type'] = 'uri'\n      cur_rule['symbol'] = words[2]\n      cur_rule['re_expr'] = words_to_re(words, 2)\n      cur_rule['re'] = rspamd_regexp.create(cur_rule['re_expr'])\n      if cur_rule['re'] and cur_rule['symbol'] then\n        valid_rule = true\n      else\n        table.insert(complicated, l)\n        return\n      end\n    elseif words[1] == \"meta\" then\n      -- meta SYMBOL expression\n      if valid_rule then\n        insert_cur_rule()\n      end\n      table.insert(complicated, l)\n      return\n    elseif words[1] == \"describe\" and valid_rule then\n      cur_rule['description'] = words_to_re(words, 2)\n    elseif words[1] == \"score\" then\n      scores[words[2]] = parse_score(words)\n    else\n      table.insert(complicated, l)\n      return\n    end\n    end)()\n  end\n  if valid_rule then\n    insert_cur_rule()\n  end\nend\n\nfor _,matched in ipairs(arg) do\n  local f = io.open(matched, \"r\")\n  if f then\n    rspamd_logger.messagex(rspamd_config, 'loading SA rules from %s', matched)\n    process_sa_conf(f)\n  else\n    rspamd_logger.errx(rspamd_config, \"cannot open %1\", matched)\n  end\nend\n\nlocal multimap_conf = {}\n\nlocal function handle_rule(what, syms, hdr)\n  local mtype\n  local filter\n  local fname\n  local header\n  local sym = what:upper()\n  if what == 'sabody' then\n    mtype = 'content'\n    fname = 'body_re.map'\n    filter = 'oneline'\n  elseif what == 'sarawbody' then\n    fname = 'raw_body_re.map'\n    mtype = 'content'\n    filter = 'rawtext'\n  elseif what == 'full' then\n    fname = 'full_re.map'\n    mtype = 'content'\n    filter = 'full'\n  elseif what == 'uri' then\n    fname = 'uri_re.map'\n    mtype = 'url'\n    filter = 'full'\n  elseif what == 'header' then\n    fname = ('hdr_' .. hdr .. '_re.map'):lower()\n    mtype = 'header'\n    header = hdr\n    sym = sym .. '_' .. hdr:upper()\n  else\n    rspamd_logger.errx('unknown type: %s', what)\n    return\n  end\n  local conf = {\n    type = mtype,\n    filter = filter,\n    symbol = 'SA_MAP_AUTO_' .. sym,\n    regexp = true,\n    map = fname,\n    header = header,\n    symbols = {}\n  }\n  local re_file = io.open(fname, 'w')\n\n  for k,r in pairs(syms) do\n    local score = 0.0\n    if scores[k] then\n      score = scores[k]\n    end\n    re_file:write(string.format('/%s/ %s:%f\\n', tostring(r.re), k, score))\n    table.insert(conf.symbols, k)\n  end\n\n  re_file:close()\n\n  multimap_conf[sym:lower()] = conf\n  rspamd_logger.messagex('stored %s regexp in %s', sym:lower(), fname)\nend\n\nfor k,v in pairs(rules) do\n  if k == 'header' then\n    for h,r in pairs(v) do\n      handle_rule(k, r, h)\n    end\n  else\n    handle_rule(k, v)\n  end\nend\n\nlocal out = ucl.to_format(multimap_conf, 'ucl')\nlocal mmap_conf = io.open('auto_multimap.conf', 'w')\nmmap_conf:write(out)\nmmap_conf:close()\nrspamd_logger.messagex('stored multimap conf in %s', 'auto_multimap.conf')\n\nlocal sa_remain = io.open('auto_sa.conf', 'w')\nfun.each(function(l) \n  sa_remain:write(l)\n  sa_remain:write('\\n')\nend, fun.filter(function(l) return not string.match(l, '^%s+$') end, complicated))\nsa_remain:close()\nrspamd_logger.messagex('stored sa remains conf in %s', 'auto_sa.conf')\n"
  },
  {
    "path": "data/Dockerfiles/rspamd/set_worker_password.sh",
    "content": "#!/bin/bash\n\npassword_file='/etc/rspamd/override.d/worker-controller-password.inc'\npassword_hash=`/usr/bin/rspamadm pw -e -p $1`\n\necho 'enable_password = \"'$password_hash'\";' > $password_file\n\nif grep -q \"$password_hash\" \"$password_file\"; then\n    echo \"OK\"\nelse\n    echo \"ERROR\"\nfi"
  },
  {
    "path": "data/Dockerfiles/rspamd/settings.conf",
    "content": "settings = \"http://nginx:8081/settings.php\";\n"
  },
  {
    "path": "data/Dockerfiles/sogo/Dockerfile",
    "content": "# SOGo built from source to enable security patch application\n# Repository: https://github.com/Alinto/sogo\n# Version: SOGo-5.12.4\n#\n# Applied security patches:\n# -\n#\n# To add new patches, modify SOGO_SECURITY_PATCHES ARG below with space-separated commit hashes\n\nFROM debian:bookworm\n\nLABEL maintainer=\"The Infrastructure Company GmbH <info@servercow.de>\"\n\nARG DEBIAN_FRONTEND=noninteractive\nARG SOGO_VERSION=SOGo-5.12.5\nARG SOPE_VERSION=SOPE-5.12.5\n# Security patches to apply (space-separated commit hashes)\nARG SOGO_SECURITY_PATCHES=\"\"\n# renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$\nARG GOSU_VERSION=1.19\nENV LC_ALL=C\n\n# Install dependencies, build SOPE and SOGo, then clean up (all in one layer to minimize image size)\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n    # Build dependencies\n    git \\\n    build-essential \\\n    gobjc \\\n    pkg-config \\\n    gnustep-make \\\n    gnustep-base-runtime \\\n    libgnustep-base-dev \\\n    libxml2-dev \\\n    libldap2-dev \\\n    libssl-dev \\\n    zlib1g-dev \\\n    libpq-dev \\\n    libmariadb-dev-compat \\\n    libmemcached-dev \\\n    libsodium-dev \\\n    libcurl4-openssl-dev \\\n    libzip-dev \\\n    libytnef0-dev \\\n    libwbxml2-dev \\\n    curl \\\n    ca-certificates \\\n    # Runtime dependencies\n    apt-transport-https \\\n    gettext \\\n    gnupg \\\n    mariadb-client \\\n    rsync \\\n    supervisor \\\n    syslog-ng \\\n    syslog-ng-core \\\n    syslog-ng-mod-redis \\\n    dirmngr \\\n    netcat-traditional \\\n    psmisc \\\n    wget \\\n    patch \\\n    libobjc4 \\\n    libxml2 \\\n    libldap-2.5-0 \\\n    libssl3 \\\n    zlib1g \\\n    libmariadb3 \\\n    libmemcached11 \\\n    libsodium23 \\\n    libcurl4 \\\n    libzip4 \\\n    libytnef0 \\\n    libwbxml2-1 \\\n  # Download gosu\n  && dpkgArch=\"$(dpkg --print-architecture | awk -F- '{ print $NF }')\" \\\n  && wget -O /usr/local/bin/gosu \"https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch\" \\\n  && chmod +x /usr/local/bin/gosu \\\n  && gosu nobody true \\\n  # Build SOPE\n  && git clone --depth 1 --branch ${SOPE_VERSION} https://github.com/Alinto/sope.git /tmp/sope \\\n  && cd /tmp/sope \\\n  && rm -rf .git \\\n  && . /usr/share/GNUstep/Makefiles/GNUstep.sh \\\n  && ./configure --prefix=/usr --disable-debug --disable-strip \\\n  && make -j$(nproc) \\\n  && make install \\\n  && cd / \\\n  && rm -rf /tmp/sope \\\n  # Build SOGo with security patches\n  && git clone --depth 1 --branch ${SOGO_VERSION} https://github.com/Alinto/sogo.git /tmp/sogo \\\n  && cd /tmp/sogo \\\n  && git config user.email \"builder@mailcow.local\" \\\n  && git config user.name \"SOGo Builder\" \\\n  && for patch in ${SOGO_SECURITY_PATCHES}; do \\\n       echo \"Applying security patch: ${patch}\"; \\\n       git fetch origin ${patch} && git cherry-pick ${patch}; \\\n     done \\\n  && rm -rf .git \\\n  && . /usr/share/GNUstep/Makefiles/GNUstep.sh \\\n  && ./configure --disable-debug --disable-strip \\\n  && make -j$(nproc) \\\n  && make install \\\n  && cd /tmp/sogo/ActiveSync \\\n  && . /usr/share/GNUstep/Makefiles/GNUstep.sh \\\n  && make -j$(nproc) install \\\n  && cd / \\\n  && rm -rf /tmp/sogo \\\n  # Strip binaries\n  && strip --strip-unneeded /usr/local/sbin/sogod 2>/dev/null || true \\\n  && strip --strip-unneeded /usr/local/sbin/sogo-tool 2>/dev/null || true \\\n  && strip --strip-unneeded /usr/local/sbin/sogo-ealarms-notify 2>/dev/null || true \\\n  && strip --strip-unneeded /usr/local/sbin/sogo-slapd-sockd 2>/dev/null || true \\\n  # Remove build dependencies and clean up\n  && apt-get purge -y --auto-remove \\\n    git \\\n    build-essential \\\n    gobjc \\\n    gnustep-make \\\n    libgnustep-base-dev \\\n    libxml2-dev \\\n    libldap2-dev \\\n    libssl-dev \\\n    zlib1g-dev \\\n    libpq-dev \\\n    libmariadb-dev-compat \\\n    libmemcached-dev \\\n    libsodium-dev \\\n    libcurl4-openssl-dev \\\n    libzip-dev \\\n    libytnef0-dev \\\n    curl \\\n  && apt-get autoremove -y \\\n  && apt-get clean \\\n  && rm -rf /var/lib/apt/lists/* \\\n  && rm -rf /usr/share/doc/* \\\n  && rm -rf /usr/share/man/* \\\n  && rm -rf /var/cache/debconf/* \\\n  && rm -rf /tmp/* \\\n  && rm -rf /root/.cache \\\n  && find /usr/local/lib -name '*.a' -delete \\\n  && find /usr/lib -name '*.a' -delete \\\n  && mkdir -p /usr/share/doc/sogo \\\n  && touch /usr/share/doc/sogo/empty.sh \\\n  && touch /etc/default/locale\n\n# Configure library paths\nRUN echo \"/usr/lib64\" > /etc/ld.so.conf.d/sogo.conf \\\n  && echo \"/usr/local/lib/sogo\" >> /etc/ld.so.conf.d/sogo.conf \\\n  && echo \"/usr/local/lib/GNUstep/Frameworks/SOGo.framework/Versions/5/sogo\" >> /etc/ld.so.conf.d/sogo.conf \\\n  && ldconfig\n\n# Create sogo user and group\nRUN groupadd -r -g 999 sogo \\\n  && useradd -r -u 999 -g sogo -d /var/lib/sogo -s /bin/bash -c \"SOGo Daemon\" sogo \\\n  && mkdir -p /var/lib/sogo /var/run/sogo /var/log/sogo /var/spool/sogo \\\n  && chown -R sogo:sogo /var/lib/sogo /var/run/sogo /var/log/sogo /var/spool/sogo\n\n# Create symlinks for SOGo binaries\nRUN ln -s /usr/local/sbin/sogod /usr/sbin/sogod \\\n  && ln -s /usr/local/sbin/sogo-tool /usr/sbin/sogo-tool \\\n  && ln -s /usr/local/sbin/sogo-ealarms-notify /usr/sbin/sogo-ealarms-notify \\\n  && ln -s /usr/local/sbin/sogo-slapd-sockd /usr/sbin/sogo-slapd-sockd\n\n# Copy configuration files and scripts\nCOPY ./bootstrap-sogo.sh /bootstrap-sogo.sh\nCOPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf\nCOPY syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng-redis_slave.conf\nCOPY supervisord.conf /etc/supervisor/supervisord.conf\nCOPY acl.diff /acl.diff\nCOPY navMailcowBtns.diff /navMailcowBtns.diff\nCOPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh\nCOPY docker-entrypoint.sh /\n\nRUN chmod +x /bootstrap-sogo.sh \\\n  /usr/local/sbin/stop-supervisor.sh\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\n\nCMD [\"/usr/bin/supervisord\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n"
  },
  {
    "path": "data/Dockerfiles/sogo/acl.diff",
    "content": "--- /usr/local/lib/GNUstep/SOGo/Templates/UIxAclEditor.wox    2018-08-17 18:29:57.987504204 +0200\n+++ /usr/local/lib/GNUstep/SOGo/Templates/UIxAclEditor.wox    2018-08-17 18:29:35.918291298 +0200\n@@ -46,7 +46,7 @@\n           </md-item-template>\n         </md-autocomplete>\n       </div>\n-      <md-card ng-repeat=\"user in acl.users | orderBy:['userClass', 'cn']\"\n+      <md-card ng-repeat=\"user in acl.users | filter:{ userClass: 'normal' } | orderBy:['cn']\"\n                class=\"sg-collapsed\"\n                ng-class=\"{ 'sg-expanded': user.uid == acl.selectedUid }\">\n         <a class=\"md-flex md-button\" ng-click=\"acl.selectUser(user, $event)\">\n"
  },
  {
    "path": "data/Dockerfiles/sogo/bootstrap-sogo.sh",
    "content": "#!/bin/bash\n\n# Wait for MySQL to warm-up\nwhile ! mariadb-admin status --ssl=false --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do\n  echo \"Waiting for database to come up...\"\n  sleep 2\ndone\n\n# Wait until port becomes free and send sig\nuntil ! nc -z sogo-mailcow 20000;\ndo\n  killall -TERM sogod\n  sleep 3\ndone\n\n# Wait for updated schema\nDBV_NOW=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT version FROM versions WHERE application = 'db_schema';\" -BN)\nDBV_NEW=$(grep -oE '\\$db_version = .*;' init_db.inc.php | sed 's/$db_version = //g;s/;//g' | cut -d \\\" -f2)\nwhile [[ \"${DBV_NOW}\" != \"${DBV_NEW}\" ]]; do\n  echo \"Waiting for schema update...\"\n  DBV_NOW=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT version FROM versions WHERE application = 'db_schema';\" -BN)\n  DBV_NEW=$(grep -oE '\\$db_version = .*;' init_db.inc.php | sed 's/$db_version = //g;s/;//g' | cut -d \\\" -f2)\n  sleep 5\ndone\necho \"DB schema is ${DBV_NOW}\"\n\nif [[ \"${MASTER}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"DROP TRIGGER IF EXISTS sogo_update_password\"\nfi\n\n# cat /dev/urandom seems to hang here occasionally and is not recommended anyway, better use openssl\nRAND_PASS=$(openssl rand -base64 16 | tr -dc _A-Z-a-z-0-9)\n\n# Generate plist header with timezone data\nmkdir -p /var/lib/sogo/GNUstep/Defaults/\ncat <<EOF > /var/lib/sogo/GNUstep/Defaults/sogod.plist\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//GNUstep//DTD plist 0.9//EN\" \"http://www.gnustep.org/plist-0_9.xml\">\n<plist version=\"0.9\">\n<dict>\n    <key>OCSAclURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_acl</string>\n    <key>SOGoIMAPServer</key>\n    <string>imap://${IPV4_NETWORK}.250:143/?TLS=YES&amp;tlsVerifyMode=none</string>\n    <key>SOGoSieveServer</key>\n    <string>sieve://${IPV4_NETWORK}.250:4190/?TLS=YES&amp;tlsVerifyMode=none</string>\n    <key>SOGoSMTPServer</key>\n    <string>smtp://${IPV4_NETWORK}.253:588/?TLS=YES&amp;tlsVerifyMode=none</string>\n    <key>SOGoTrustProxyAuthentication</key>\n    <string>YES</string>\n    <key>SOGoEncryptionKey</key>\n    <string>${RAND_PASS}</string>\n    <key>OCSAdminURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_admin</string>\n    <key>OCSCacheFolderURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_cache_folder</string>\n    <key>OCSEMailAlarmsFolderURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_alarms_folder</string>\n    <key>OCSFolderInfoURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_folder_info</string>\n    <key>OCSSessionsFolderURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_sessions_folder</string>\n    <key>OCSStoreURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_store</string>\n    <key>SOGoProfileURL</key>\n    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/sogo_user_profile</string>\n    <key>SOGoTimeZone</key>\n    <string>${TZ}</string>\n    <key>domains</key>\n    <dict>\nEOF\n\n# Generate multi-domain setup\nwhile read -r line gal\n  do\n  echo \"        <key>${line}</key>\n        <dict>\n            <key>SOGoMailDomain</key>\n            <string>${line}</string>\n            <key>SOGoUserSources</key>\n            <array>\n                <dict>\n                    <key>MailFieldNames</key>\n                    <array>\n                        <string>aliases</string>\n                        <string>ad_aliases</string>\n                        <string>ext_acl</string>\n                    </array>\n                    <key>KindFieldName</key>\n                    <string>kind</string>\n                    <key>DomainFieldName</key>\n                    <string>domain</string>\n                    <key>MultipleBookingsFieldName</key>\n                    <string>multiple_bookings</string>\n                    <key>listRequiresDot</key>\n                    <string>NO</string>\n                    <key>canAuthenticate</key>\n                    <string>YES</string>\n                    <key>displayName</key>\n                    <string>GAL ${line}</string>\n                    <key>id</key>\n                    <string>${line}</string>\n                    <key>isAddressBook</key>\n                    <string>${gal}</string>\n                    <key>type</key>\n                    <string>sql</string>\n                    <key>userPasswordAlgorithm</key>\n                    <string>${MAILCOW_PASS_SCHEME}</string>\n                    <key>prependPasswordScheme</key>\n                    <string>YES</string>\n                    <key>viewURL</key>\n                    <string>mysql://${DBUSER}:${DBPASS}@%2Fvar%2Frun%2Fmysqld%2Fmysqld.sock/${DBNAME}/_sogo_static_view</string>\n                </dict>\" >> /var/lib/sogo/GNUstep/Defaults/sogod.plist\n  # Generate alternative LDAP authentication dict, when SQL authentication fails\n  # This will nevertheless read attributes from LDAP\n  /etc/sogo/plist_ldap.sh ${line} ${gal} >> /var/lib/sogo/GNUstep/Defaults/sogod.plist\n  echo \"            </array>\n        </dict>\" >> /var/lib/sogo/GNUstep/Defaults/sogod.plist\ndone < <(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT domain, CASE gal WHEN '1' THEN 'YES' ELSE 'NO' END AS gal FROM domain;\" -B -N)\n\n# Generate footer\necho '    </dict>\n</dict>\n</plist>' >> /var/lib/sogo/GNUstep/Defaults/sogod.plist\n\n# Fix permissions\nchown sogo:sogo -R /var/lib/sogo/\nchmod 600 /var/lib/sogo/GNUstep/Defaults/sogod.plist\n\n# Patch ACLs\n#if [[ ${ACL_ANYONE} == 'allow' ]]; then\n#  #enable any or authenticated targets for ACL\n#  if patch -R -sfN --dry-run /usr/local/lib/GNUstep/SOGo/Templates/UIxAclEditor.wox < /acl.diff > /dev/null; then\n#    patch -R /usr/local/lib/GNUstep/SOGo/Templates/UIxAclEditor.wox < /acl.diff;\n#  fi\n#else\n#  #disable any or authenticated targets for ACL\n#  if patch -sfN --dry-run /usr/local/lib/GNUstep/SOGo/Templates/UIxAclEditor.wox < /acl.diff > /dev/null; then\n#    patch /usr/local/lib/GNUstep/SOGo/Templates/UIxAclEditor.wox < /acl.diff;\n#  fi\n#fi\n\n# Apply custom UI patch (reverse patch to ADD buttons)\nif patch -R -sfN --dry-run /usr/local/lib/GNUstep/SOGo/Templates/UIxTopnavToolbar.wox < /navMailcowBtns.diff > /dev/null; then\n  echo \"Applying navMailcowBtns patch (reverse to add buttons)...\"\n  patch -R /usr/local/lib/GNUstep/SOGo/Templates/UIxTopnavToolbar.wox < /navMailcowBtns.diff;\nelse\n  echo \"navMailcowBtns patch already applied or cannot be applied\"\nfi\n\n# Rename custom logo, if any\n[[ -f /etc/sogo/sogo-full.svg ]] && mv /etc/sogo/sogo-full.svg /etc/sogo/custom-fulllogo.svg\n\n# Rsync web content\necho \"Syncing web content with named volume\"\nrsync -a /usr/local/lib/GNUstep/SOGo/. /sogo_web/\n\n# Chown backup path\nchown -R sogo:sogo /sogo_backup\n\nexec gosu sogo /usr/sbin/sogod\n"
  },
  {
    "path": "data/Dockerfiles/sogo/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\nif [[ \"${SKIP_SOGO}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  echo \"SKIP_SOGO=y, skipping SOGo...\"\n  sleep 365d\n  exit 0\nfi\n\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  cp /etc/syslog-ng/syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng.conf\nfi\n\necho \"$TZ\" > /etc/timezone\n\n# Run hooks\nfor file in /hooks/*; do\n  if [ -x \"${file}\" ]; then\n    echo \"Running hook ${file}\"\n    \"${file}\"\n  fi\ndone\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/sogo/navMailcowBtns.diff",
    "content": "60,65d58\n<                var:ng-click=\"navButtonClick\"\n<                ng-href=\"/user\">\n<       <md-icon>build</md-icon>\n<       <md-tooltip>mailcow <var:string label:value=\"Preferences\"/></md-tooltip>\n<     </md-button>\n<     <md-button class=\"md-icon-button\"\n83c76\n<                onclick=\"mc_logout();\"\n---\n>                ng-show=\"::activeUser.path.logoff.length\"\n85c78\n<                ng-href=\"#\">\n---\n>                ng-href=\"{{::activeUser.path.logoff}}\">\n"
  },
  {
    "path": "data/Dockerfiles/sogo/stop-supervisor.sh",
    "content": "#!/bin/bash\n\nprintf \"READY\\n\";\n\nwhile read line; do\n  echo \"Processing Event: $line\" >&2;\n  kill -3 $(cat \"/var/run/supervisord.pid\")\ndone < /dev/stdin\n"
  },
  {
    "path": "data/Dockerfiles/sogo/supervisord.conf",
    "content": "[supervisord]\nnodaemon=true\nuser=root\n\n[program:syslog-ng]\ncommand=/usr/sbin/syslog-ng --foreground  --no-caps\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\nautostart=true\npriority=1\n\n[program:bootstrap-sogo]\ncommand=/bootstrap-sogo.sh\nstdout_logfile=/dev/stdout\nstdout_logfile_maxbytes=0\nstderr_logfile=/dev/stderr\nstderr_logfile_maxbytes=0\npriority=2\nstartretries=10\nautorestart=true\nstopwaitsecs=120\n\n[eventlistener:processes]\ncommand=/usr/local/sbin/stop-supervisor.sh\nevents=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL\n"
  },
  {
    "path": "data/Dockerfiles/sogo/syslog-ng-redis_slave.conf",
    "content": "@version: 3.38\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats_freq(0);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_src {\n  unix-stream(\"/dev/log\");\n  internal();\n};\nsource s_sogo {\n  pipe(\"/dev/sogo_log\" owner(sogo) group(sogo));\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis1\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"SOGO_LOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\ndestination d_redis_f2b_channel {\n  redis(\n    host(\"`REDIS_SLAVEOF_IP`\")\n    persist-name(\"redis2\")\n    port(`REDIS_SLAVEOF_PORT`)\n    auth(\"`REDISPASS`\")\n    command(\"PUBLISH\" \"F2B_CHANNEL\" \"$(sanitize $MESSAGE)\")\n  );\n};\nlog {\n  source(s_sogo);\n  destination(d_redis_ui_log);\n  destination(d_redis_f2b_channel);\n};\nlog {\n  source(s_sogo);\n  source(s_src);\n  destination(d_stdout);\n};\n"
  },
  {
    "path": "data/Dockerfiles/sogo/syslog-ng.conf",
    "content": "@version: 3.38\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats_freq(0);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_src {\n  unix-stream(\"/dev/log\");\n  internal();\n};\nsource s_sogo {\n  pipe(\"/dev/sogo_log\" owner(sogo) group(sogo));\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\ndestination d_redis_ui_log {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis1\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"LPUSH\" \"SOGO_LOG\" \"$(format-json time=\\\"$S_UNIXTIME\\\" priority=\\\"$PRIORITY\\\" program=\\\"$PROGRAM\\\" message=\\\"$MESSAGE\\\")\\n\")\n  );\n};\ndestination d_redis_f2b_channel {\n  redis(\n    host(\"redis-mailcow\")\n    persist-name(\"redis2\")\n    port(6379)\n    auth(\"`REDISPASS`\")\n    command(\"PUBLISH\" \"F2B_CHANNEL\" \"$(sanitize $MESSAGE)\")\n  );\n};\nlog {\n  source(s_sogo);\n  destination(d_redis_ui_log);\n  destination(d_redis_f2b_channel);\n};\nlog {\n  source(s_sogo);\n  source(s_src);\n  destination(d_stdout);\n};\n"
  },
  {
    "path": "data/Dockerfiles/unbound/Dockerfile",
    "content": "FROM alpine:3.23\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\nRUN apk add --update --no-cache \\\n\tcurl \\\n\tbind-tools \\\n\tcoreutils \\\n\tunbound \\\n\tbash \\\n\topenssl \\\n\tdrill \\\n\ttzdata \\\n\tsyslog-ng \\\n\tsupervisor \\\n\t&& curl -o /etc/unbound/root.hints https://www.internic.net/domain/named.cache \\\n\t&& chown root:unbound /etc/unbound \\\n    && adduser unbound tty \\\n\t&& chmod 775 /etc/unbound\n\nEXPOSE 53/udp 53/tcp\n\nCOPY docker-entrypoint.sh /docker-entrypoint.sh\n\n# healthcheck (dig, ping)\nCOPY healthcheck.sh /healthcheck.sh\nCOPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf\nCOPY supervisord.conf /etc/supervisor/supervisord.conf\nCOPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh\n\nRUN chmod +x /healthcheck.sh\nHEALTHCHECK --interval=30s --timeout=10s \\\n  CMD sh -c '[ -f /tmp/healthcheck_status ] && [ \"$(cat /tmp/healthcheck_status)\" -eq 0 ] || exit 1'\n\nENTRYPOINT [\"/docker-entrypoint.sh\"]\nCMD [\"/usr/bin/supervisord\", \"-c\", \"/etc/supervisor/supervisord.conf\"]\n"
  },
  {
    "path": "data/Dockerfiles/unbound/docker-entrypoint.sh",
    "content": "#!/bin/bash\n\necho \"Setting console permissions...\"\nchown root:tty /dev/console\nchmod g+rw /dev/console\necho \"Receiving anchor key...\"\n/usr/sbin/unbound-anchor -a /etc/unbound/trusted-key.key\necho \"Receiving root hints...\"\ncurl -#o /etc/unbound/root.hints https://www.internic.net/domain/named.cache\n/usr/sbin/unbound-control-setup\n\n# Run hooks\nfor file in /hooks/*; do\n  if [ -x \"${file}\" ]; then\n    echo \"Running hook ${file}\"\n    \"${file}\"\n  fi\ndone\n\nexec \"$@\"\n"
  },
  {
    "path": "data/Dockerfiles/unbound/healthcheck.sh",
    "content": "#!/bin/bash\n\nSTATUS_FILE=\"/tmp/healthcheck_status\"\nRUNS=0\n\n# Declare log function for logfile to stdout\nfunction log_to_stdout() {\necho \"$(date +\"%Y-%m-%d %H:%M:%S\"): $1\"\n}\n\n# General Ping function to check general pingability\nfunction check_ping() {\ndeclare -a ipstoping=(\"1.1.1.1\" \"8.8.8.8\" \"9.9.9.9\")\nlocal fail_tolerance=1\nlocal failures=0\n\nfor ip in \"${ipstoping[@]}\" ; do\n    success=false\n    for ((i=1; i<=3; i++)); do\n        ping -q -c 3 -w 5 \"$ip\" > /dev/null\n        if [ $? -eq 0 ]; then\n            success=true\n            break\n        else\n            log_to_stdout \"Healthcheck: Failed to ping $ip on attempt $i. Trying again...\"\n        fi\n    done\n    \n    if [ \"$success\" = false ]; then\n        log_to_stdout \"Healthcheck: Couldn't ping $ip after 3 attempts. Marking this IP as failed.\"\n        ((failures++))\n    fi\ndone\n\nif [ $failures -gt $fail_tolerance ]; then\n    log_to_stdout \"Healthcheck: Too many ping failures ($fail_tolerance failures allowed, you got $failures failures), marking Healthcheck as unhealthy...\"\n    return 1\nfi\n\nreturn 0\n\n}\n\n# General DNS Resolve Check against Unbound Resolver himself\nfunction check_dns() {\ndeclare -a domains=(\"fuzzy.mailcow.email\" \"github.com\" \"hub.docker.com\")\nlocal fail_tolerance=1\nlocal failures=0\n\nfor domain in \"${domains[@]}\" ; do\n    success=false\n    for ((i=1; i<=3; i++)); do\n        dig_output=$(dig +short +timeout=2 +tries=1 \"$domain\" @127.0.0.1 2>/dev/null)\n        dig_rc=$?\n\n        if [ $dig_rc -ne 0 ] || [ -z \"$dig_output\" ]; then\n            log_to_stdout \"Healthcheck: DNS Resolution Failed on attempt $i for $domain! Trying again...\"\n        else\n            success=true\n            break\n        fi\n    done\n    \n    if [ \"$success\" = false ]; then\n        log_to_stdout \"Healthcheck: DNS Resolution not possible after 3 attempts for $domain... Gave up!\"\n        ((failures++))\n    fi\ndone\n\nif [ $failures -gt $fail_tolerance ]; then\n    log_to_stdout \"Healthcheck: Too many DNS failures ($fail_tolerance failures allowed, you got $failures failures), marking Healthcheck as unhealthy...\"\n    return 1\nfi\n\nreturn 0\n}\n\nwhile true; do\n\n    if [[ ${SKIP_UNBOUND_HEALTHCHECK} == \"y\" ]]; then\n    log_to_stdout \"Healthcheck: ALL CHECKS WERE SKIPPED! Unbound is healthy!\"\n    echo \"0\" > $STATUS_FILE\n    sleep 365d\n    fi\n\n    # run checks, if check is not returning 0 (return value if check is ok), healthcheck will exit with 1 (marked in docker as unhealthy)\n    check_ping\n    PING_STATUS=$?\n\n    check_dns\n    DNS_STATUS=$?\n\n    if [ $PING_STATUS -ne 0 ] || [ $DNS_STATUS -ne 0 ]; then\n        echo \"1\" > $STATUS_FILE\n\n    else\n        echo \"0\" > $STATUS_FILE\n    fi\n\n    sleep 30\n\ndone"
  },
  {
    "path": "data/Dockerfiles/unbound/stop-supervisor.sh",
    "content": "#!/bin/bash\n\nprintf \"READY\\n\";\n\nwhile read line; do\n  echo \"Processing Event: $line\" >&2;\n  kill -3 $(cat \"/var/run/supervisord.pid\")\ndone < /dev/stdin\n\nrm -rf /tmp/healthcheck_status"
  },
  {
    "path": "data/Dockerfiles/unbound/supervisord.conf",
    "content": "[supervisord]\r\nnodaemon=true\r\nuser=root\r\npidfile=/var/run/supervisord.pid\r\n\r\n[program:syslog-ng]\r\ncommand=/usr/sbin/syslog-ng --foreground --no-caps\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\nautostart=true\r\n\r\n[program:unbound]\r\ncommand=/usr/sbin/unbound\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\nautorestart=true\r\n\r\n[program:unbound-healthcheck]\r\ncommand=/bin/bash /healthcheck.sh\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\nautorestart=true\r\n\r\n[eventlistener:processes]\r\ncommand=/usr/local/sbin/stop-supervisor.sh\r\nevents=PROCESS_STATE_STOPPED, PROCESS_STATE_EXITED, PROCESS_STATE_FATAL\r\n"
  },
  {
    "path": "data/Dockerfiles/unbound/syslog-ng.conf",
    "content": "@version: 4.5\n@include \"scl.conf\"\noptions {\n  chain_hostnames(off);\n  flush_lines(0);\n  use_dns(no);\n  use_fqdn(no);\n  owner(\"root\"); group(\"adm\"); perm(0640);\n  stats(freq(0));\n  keep_timestamp(no);\n  bad_hostname(\"^gconfd$\");\n};\nsource s_dgram {\n  unix-dgram(\"/dev/log\");\n  internal();\n};\ndestination d_stdout { pipe(\"/dev/stdout\"); };\nlog {\n  source(s_dgram);\n  destination(d_stdout);\n};\n"
  },
  {
    "path": "data/Dockerfiles/watchdog/Dockerfile",
    "content": "FROM alpine:3.23\n\nLABEL maintainer = \"The Infrastructure Company GmbH <info@servercow.de>\"\n\n# Installation\nRUN apk add --update \\\n  && apk add --no-cache nagios-plugins-smtp \\\n  nagios-plugins-tcp \\\n  nagios-plugins-http \\\n  nagios-plugins-ping \\\n  mariadb-client \\\n  curl \\\n  bash \\\n  coreutils \\\n  jq \\\n  fcgi \\\n  openssl \\\n  nagios-plugins-mysql \\\n  nagios-plugins-disk \\\n  bind-tools \\\n  redis \\\n  perl \\\n  perl-net-dns \\\n  perl-io-socket-ssl \\\n  perl-io-socket-inet6 \\\n  perl-socket \\\n  perl-socket6 \\\n  perl-mime-lite \\\n  perl-term-readkey \\\n  tini \\\n  tzdata \\\n  whois \\\n  && curl https://raw.githubusercontent.com/mludvig/smtp-cli/v3.10/smtp-cli -o /smtp-cli \\\n  && chmod +x smtp-cli \\\n  && mkdir /usr/lib/mailcow\n\nCOPY watchdog.sh /watchdog.sh\nCOPY check_mysql_slavestatus.sh /usr/lib/nagios/plugins/check_mysql_slavestatus.sh\nCOPY check_dns.sh /usr/lib/mailcow/check_dns.sh\nCOPY client.cnf /etc/my.cnf.d/client.cnf\n\nCMD [\"/watchdog.sh\"]\n"
  },
  {
    "path": "data/Dockerfiles/watchdog/check_dns.sh",
    "content": "#!/bin/sh\n\nwhile getopts \"H:s:\" opt; do\n  case \"$opt\" in\n    H) HOST=\"$OPTARG\" ;;\n    s) SERVER=\"$OPTARG\" ;;\n    *) echo \"Usage: $0 -H host -s server\"; exit 3 ;;\n  esac\ndone\n\nif [ -z \"$SERVER\" ]; then\n  echo \"No DNS Server provided\"\n  exit 3\nfi\n\nif [ -z \"$HOST\" ]; then\n  echo \"No host to test provided\"\n  exit 3\nfi\n\n# run dig and measure the time it takes to run\nSTART_TIME=$(perl -MTime::HiRes -e 'print Time::HiRes::time')\ndig_output=$(dig +short +timeout=2 +tries=1 \"$HOST\" @\"$SERVER\" 2>/dev/null)\ndig_rc=$?\nEND_TIME=$(perl -MTime::HiRes -e 'print Time::HiRes::time')\ndig_output_ips=$(echo \"$dig_output\" | grep -E '^[0-9.]+$' | sort | paste -sd ',' -)\nELAPSED_TIME=$(perl -e \"printf('%.3f', $END_TIME - $START_TIME)\")\n\n# validate and perform nagios like output and exit codes\nif [ $dig_rc -ne 0 ] || [ -z \"$dig_output\" ]; then\n  echo \"Domain $HOST was not found by the server\"\n  exit 2\nelif [ $dig_rc -eq 0 ]; then\n  echo \"DNS OK: $ELAPSED_TIME seconds response time. $HOST returns $dig_output_ips\"\n  exit 0\nelse\n  echo \"Unknown error\"\n  exit 3\nfi\n"
  },
  {
    "path": "data/Dockerfiles/watchdog/check_mysql_slavestatus.sh",
    "content": "#!/bin/bash\n#########################################################################\n# Script:       check_mysql_slavestatus.sh                              #\n# Author:       Claudio Kuenzler www.claudiokuenzler.com                #\n# Purpose:      Monitor MySQL Replication status with Nagios            #\n# Description:  Connects to given MySQL hosts and checks for running    #\n#               SLAVE state and delivers additional info                #\n# Original:     This script is a modified version of                    #\n#               check mysql slave sql running written by dhirajt        #\n# Thanks to:    Victor Balada Diaz for his ideas added on 20080930      #\n#               Soren Klintrup for stuff added on 20081015              #\n#               Marc Feret for Slave_IO_Running check 20111227          #\n#               Peter Lecki for his mods added on 20120803              #\n#               Serge Victor for his mods added on 20131223             #\n#               Omri Bahumi for his fix added on 20131230               #\n#               Marc Falzon for his option mods added on 20190822       #\n#               Andreas Pfeiffer for adding socket option on 20190822   #\n# History:                                                              #\n# 2008041700 Original Script modified                                   #\n# 2008041701 Added additional info if status OK                         #\n# 2008041702 Added usage of script with params -H -u -p                 #\n# 2008041703 Added bindir variable for multiple platforms               #\n# 2008041704 Added help because mankind needs help                      #\n# 2008093000 Using /bin/sh instead of /bin/bash                         #\n# 2008093001 Added port for MySQL server                                #\n# 2008093002 Added mysqldir if mysql binary is elsewhere                #\n# 2008101501 Changed bindir/mysqldir to use PATH                        #\n# 2008101501 Use $() instead of `` to avoid forks                       #\n# 2008101501 Use ${} for variables to prevent problems                  #\n# 2008101501 Check if required commands exist                           #\n# 2008101501 Check if mysql connection works                            #\n# 2008101501 Exit with unknown status at script end                     #\n# 2008101501 Also display help if no option is given                    #\n# 2008101501 Add warning/critical check to delay                        #\n# 2011062200 Add perfdata                                               #\n# 2011122700 Checking Slave_IO_Running                                  #\n# 2012080300 Changed to use only one mysql query                        #\n# 2012080301 Added warn and crit delay as optional args                 #\n# 2012080302 Added standard -h option for syntax help                   #\n# 2012080303 Added check for mandatory options passed in                #\n# 2012080304 Added error output from mysql                              #\n# 2012080305 Changed from 'cut' to 'awk' (eliminate ws)                 #\n# 2012111600 Do not show password in error output                       #\n# 2013042800 Changed PATH to use existing PATH, too                     #\n# 2013050800 Bugfix in PATH export                                      #\n# 2013092700 Bugfix in PATH export                                      #\n# 2013092701 Bugfix in getopts                                          #\n# 2013101600 Rewrite of threshold logic and handling                    #\n# 2013101601 Optical clean up                                           #\n# 2013101602 Rewrite help output                                        #\n# 2013101700 Handle Slave IO in 'Connecting' state                      #\n# 2013101701 Minor changes in output, handling UNKNOWN situations now   #\n# 2013101702 Exit CRITICAL when Slave IO in Connecting state            #\n# 2013123000 Slave_SQL_Running also matched Slave_SQL_Running_State     #\n# 2015011600 Added 'moving' check to catch possible connection issues   #\n# 2015011900 Use its own threshold for replication moving check         #\n# 2019082200 Add support for mysql option file                          #\n# 2019082201 Improve password security (remove from mysql cli)          #\n# 2019082202 Added socket parameter (-S)                                #\n# 2019082203 Use default port 3306, makes -P optional                   #\n# 2019082204 Fix moving subcheck, improve documentation                 #\n#########################################################################\n# Usage: ./check_mysql_slavestatus.sh (-o file|(-H dbhost [-P port]|-S socket) -u dbuser -p dbpass) [-s connection] [-w integer] [-c integer] [-m integer]\n#########################################################################\nhelp=\"\\ncheck_mysql_slavestatus.sh (c) 2008-2019 GNU GPLv2 licence\nUsage: $0 (-o file|(-H dbhost [-P port]|-S socket) -u username -p password) [-s connection] [-w integer] [-c integer] [-m]\\n\nOptions:\\n-o Path to option file containing connection settings (e.g. /home/nagios/.my.cnf). Note: If this option is used, -H, -u, -p parameters will become optional\\n-H Hostname or IP of slave server\\n-P MySQL Port of slave server (optional, defaults to 3306)\\n-u Username of DB-user\\n-p Password of DB-user\\n-S database socket\\n-s Connection name (optional, with multi-source replication)\\n-w Replication delay in seconds for Warning status (optional)\\n-c Replication delay in seconds for Critical status (optional)\\n-m Threshold in seconds since when replication did not move (compares the slaves log position)\\n\nAttention: The DB-user you type in must have CLIENT REPLICATION rights on the DB-server. Example:\\n\\tGRANT REPLICATION CLIENT on *.* TO 'nagios'@'%' IDENTIFIED BY 'secret';\"\n\nSTATE_OK=0              # define the exit code if status is OK\nSTATE_WARNING=1         # define the exit code if status is Warning (not really used)\nSTATE_CRITICAL=2        # define the exit code if status is Critical\nSTATE_UNKNOWN=3         # define the exit code if status is Unknown\nexport PATH=$PATH:/usr/local/bin:/usr/bin:/bin # Set path\ncrit=\"No\"               # what is the answer of MySQL Slave_SQL_Running for a Critical status?\nok=\"Yes\"                # what is the answer of MySQL Slave_SQL_Running for an OK status?\nport=\"-P 3306\"          # on which tcp port is the target MySQL slave listening?\n\nfor cmd in mysql awk grep expr [\ndo\n if ! `which ${cmd} &>/dev/null`\n then\n  echo \"UNKNOWN: This script requires the command '${cmd}' but it does not exist; please check if command exists and PATH is correct\"\n  exit ${STATE_UNKNOWN}\n fi\ndone\n\n# Check for people who need help\n#########################################################################\nif [ \"${1}\" = \"--help\" -o \"${#}\" = \"0\" ];\n        then\n        echo -e \"${help}\";\n        exit 1;\nfi\n\n# Important given variables for the DB-Connect\n#########################################################################\nwhile getopts \"H:P:u:p:S:s:w:c:o:m:h\" Input;\ndo\n        case ${Input} in\n        H)      host=\"-h ${OPTARG}\";slavetarget=${OPTARG};;\n        P)      port=\"-P ${OPTARG}\";;\n        u)      user=\"-u ${OPTARG}\";;\n        p)      password=\"${OPTARG}\"; export MYSQL_PWD=\"${OPTARG}\";;\n        S)      socket=\"-S ${OPTARG}\";;\n        s)      connection=\\\"${OPTARG}\\\";;\n        w)      warn_delay=${OPTARG};;\n        c)      crit_delay=${OPTARG};;\n        o)      optfile=\"--defaults-extra-file=${OPTARG}\";;\n        m)      moving=${OPTARG};;\n        h)      echo -e \"${help}\"; exit 1;;\n        \\?)     echo \"Wrong option given. Check help (-h, --help) for usage.\"\n                exit 1\n                ;;\n        esac\ndone\n\n# Check if we can write to tmp\n#########################################################################\ntest -w /tmp && tmpfile=\"/tmp/mysql_slave_${slavetarget}_pos.txt\"\n\n# Connect to the DB server and check for informations\n#########################################################################\n# Check whether all required arguments were passed in (either option file or full connection settings)\nif [[ -z \"${optfile}\" && -z \"${host}\" && -z \"${socket}\" ]]; then\n  echo -e \"Missing required parameter(s)\"; exit ${STATE_UNKNOWN}\nelif [[ -n \"${host}\" && (-z \"${user}\" || -z \"${password}\") ]]; then\n  echo -e \"Missing required parameter(s)\"; exit ${STATE_UNKNOWN}\nelif [[ -n \"${socket}\" && (-z \"${user}\" || -z \"${password}\") ]]; then\n  echo -e \"Missing required parameter(s)\"; exit ${STATE_UNKNOWN}\nfi\n\n# Connect to the DB server and store output in vars\nif [[ -n $socket ]]; then\n  ConnectionResult=$(mariadb --skip-ssl ${optfile} ${socket} ${user} -e \"show slave ${connection} status\\G\" 2>&1)\nelse\n  ConnectionResult=$(mariadb --skip-ssl ${optfile} ${host} ${port} ${user} -e \"show slave ${connection} status\\G\" 2>&1)\nfi\n\nif [ -z \"`echo \"${ConnectionResult}\" |grep Slave_IO_State`\" ]; then\n        echo -e \"CRITICAL: Unable to connect to server\"\n        exit ${STATE_CRITICAL}\nfi\ncheck=`echo \"${ConnectionResult}\" |grep Slave_SQL_Running: | awk '{print $2}'`\ncheckio=`echo \"${ConnectionResult}\" |grep Slave_IO_Running: | awk '{print $2}'`\nmasterinfo=`echo \"${ConnectionResult}\" |grep  Master_Host: | awk '{print $2}'`\ndelayinfo=`echo \"${ConnectionResult}\" |grep Seconds_Behind_Master: | awk '{print $2}'`\nreadpos=`echo \"${ConnectionResult}\" |grep Read_Master_Log_Pos: | awk '{print $2}'`\nexecpos=`echo \"${ConnectionResult}\" |grep Exec_Master_Log_Pos: | awk '{print $2}'`\n\n# Output of different exit states\n#########################################################################\nif [ ${check} = \"NULL\" ]; then\necho \"CRITICAL: Slave_SQL_Running is answering NULL\"; exit ${STATE_CRITICAL};\nfi\n\nif [ ${check} = ${crit} ]; then\necho \"CRITICAL: ${host}:${port} Slave_SQL_Running: ${check}\"; exit ${STATE_CRITICAL};\nfi\n\nif [ ${checkio} = ${crit} ]; then\necho \"CRITICAL: ${host} Slave_IO_Running: ${checkio}\"; exit ${STATE_CRITICAL};\nfi\n\nif [ ${checkio} = \"Connecting\" ]; then\necho \"CRITICAL: ${host} Slave_IO_Running: ${checkio}\"; exit ${STATE_CRITICAL};\nfi\n\nif [ ${check} = ${ok} ] && [ ${checkio} = ${ok} ]; then\n # Delay thresholds are set\n if [[ -n ${warn_delay} ]] && [[ -n ${crit_delay} ]]; then\n  if ! [[ ${warn_delay} -gt 0 ]]; then echo \"Warning threshold must be a valid integer greater than 0\"; exit $STATE_UNKNOWN; fi\n  if ! [[ ${crit_delay} -gt 0 ]]; then echo \"Warning threshold must be a valid integer greater than 0\"; exit $STATE_UNKNOWN; fi\n  if [[ -z ${warn_delay} ]] || [[ -z ${crit_delay} ]]; then echo \"Both warning and critical thresholds must be set\"; exit $STATE_UNKNOWN; fi\n  if [[ ${warn_delay} -gt ${crit_delay} ]]; then echo \"Warning threshold cannot be greater than critical\"; exit $STATE_UNKNOWN; fi\n\n  if [[ ${delayinfo} -ge ${crit_delay} ]]\n  then echo \"CRITICAL: Slave is ${delayinfo} seconds behind Master | delay=${delayinfo}s\"; exit ${STATE_CRITICAL}\n  elif [[ ${delayinfo} -ge ${warn_delay} ]]\n  then echo \"WARNING: Slave is ${delayinfo} seconds behind Master | delay=${delayinfo}s\"; exit ${STATE_WARNING}\n  else\n    # Everything looks OK here but now let us check if the replication is moving\n    if [[ -n ${moving} ]] && [[ -n ${tmpfile} ]] && [[ $readpos -eq $execpos ]]\n    then\n      #echo \"Debug: Read pos is $readpos - Exec pos is $execpos\"\n      # Check if tmp file exists\n      curtime=`date +%s`\n      if [[ -w $tmpfile ]]\n      then\n        tmpfiletime=`date +%s -r $tmpfile`\n        if [[ `expr $curtime - $tmpfiletime` -gt ${moving} ]]\n        then\n          exectmp=`cat $tmpfile`\n          #echo \"Debug: Exec pos in tmpfile is $exectmp\"\n          if [[ $exectmp -eq $execpos ]]\n          then\n            # The value read from the tmp file and from db are the same. Replication hasnt moved!\n            echo \"WARNING: Slave replication has not moved in ${moving} seconds. Manual check required.\"; exit ${STATE_WARNING}\n          else\n            # Replication has moved since the tmp file was written. Delete tmp file and output OK.\n            rm $tmpfile\n            echo \"OK: Slave SQL running: ${check} Slave IO running: ${checkio} / master: ${masterinfo} / slave is ${delayinfo} seconds behind master | delay=${delayinfo}s\"; exit ${STATE_OK};\n          fi\n        else\n          echo \"OK: Slave SQL running: ${check} Slave IO running: ${checkio} / master: ${masterinfo} / slave is ${delayinfo} seconds behind master | delay=${delayinfo}s\"; exit ${STATE_OK};\n        fi\n      else\n        echo \"$execpos\" > $tmpfile\n        echo \"OK: Slave SQL running: ${check} Slave IO running: ${checkio} / master: ${masterinfo} / slave is ${delayinfo} seconds behind master | delay=${delayinfo}s\"; exit ${STATE_OK};\n      fi\n    else # Everything OK (no additional moving check)\n      echo \"OK: Slave SQL running: ${check} Slave IO running: ${checkio} / master: ${masterinfo} / slave is ${delayinfo} seconds behind master | delay=${delayinfo}s\"; exit ${STATE_OK};\n    fi\n  fi\n else\n # Without delay thresholds\n echo \"OK: Slave SQL running: ${check} Slave IO running: ${checkio} / master: ${masterinfo} / slave is ${delayinfo} seconds behind master | delay=${delayinfo}s\"\n exit ${STATE_OK};\n fi\nfi\n\necho \"UNKNOWN: should never reach this part (Slave_SQL_Running is ${check}, Slave_IO_Running is ${checkio})\"\nexit ${STATE_UNKNOWN}\n"
  },
  {
    "path": "data/Dockerfiles/watchdog/client.cnf",
    "content": "[client]\nssl = false\nssl-verify-server-cert = false\n"
  },
  {
    "path": "data/Dockerfiles/watchdog/watchdog.sh",
    "content": "#!/bin/bash\n\nif [ \"${DEV_MODE}\" != \"n\" ]; then\n  echo -e \"\\e[31mEnabled Debug Mode\\e[0m\"\n  set -x\nfi\n\ntrap \"exit\" INT TERM\ntrap \"kill 0\" EXIT\n\n# Prepare\nBACKGROUND_TASKS=()\necho \"Waiting for containers to settle...\"\nfor i in {30..1}; do\n  echo \"${i}\"\n  sleep 1\ndone\n\nif [[ \"${USE_WATCHDOG}\" =~ ^([nN][oO]|[nN])+$ ]]; then\n  echo -e \"$(date) - USE_WATCHDOG=n, skipping watchdog...\"\n  sleep 365d\n  exec $(readlink -f \"$0\")\nfi\n\nif [[ \"${WATCHDOG_VERBOSE}\" =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  SMTP_VERBOSE=\"--verbose\"\n  CURL_VERBOSE=\"--verbose\"\n  set -xv\nelse\n  SMTP_VERBOSE=\"\"\n  CURL_VERBOSE=\"\"\n  exec 2>/dev/null\nfi\n\n# Checks pipe their corresponding container name in this pipe\nif [[ ! -p /tmp/com_pipe ]]; then\n  mkfifo /tmp/com_pipe\nfi\n\n# Wait for containers\nwhile ! mariadb-admin status --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do\n  echo \"Waiting for SQL...\"\n  sleep 2\ndone\n\n# Do not attempt to write to slave\nif [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then\n  REDIS_CMDLINE=\"redis-cli -h ${REDIS_SLAVEOF_IP} -p ${REDIS_SLAVEOF_PORT} -a ${REDISPASS} --no-auth-warning\"\nelse\n  REDIS_CMDLINE=\"redis-cli -h redis -p 6379 -a ${REDISPASS} --no-auth-warning\"\nfi\n\nuntil [[ $(${REDIS_CMDLINE} PING) == \"PONG\" ]]; do\n  echo \"Waiting for Redis...\"\n  sleep 2\ndone\n\n${REDIS_CMDLINE} DEL F2B_RES > /dev/null\n\n# Common functions\nget_ipv6(){\n  local IPV6=\n  local IPV6_SRCS=\n  local TRY=\n  IPV6_SRCS[0]=\"ip6.mailcow.email\"\n  IPV6_SRCS[1]=\"ip6.nevondo.com\"\n  until [[ ! -z ${IPV6} ]] || [[ ${TRY} -ge 10 ]]; do\n    IPV6=$(curl --connect-timeout 3 -m 10 -L6s ${IPV6_SRCS[$RANDOM % ${#IPV6_SRCS[@]} ]} | grep \"^\\([0-9a-fA-F]\\{0,4\\}:\\)\\{1,7\\}[0-9a-fA-F]\\{0,4\\}$\")\n    [[ ! -z ${TRY} ]] && sleep 1\n    TRY=$((TRY+1))\n  done\n  echo ${IPV6}\n}\n\narray_diff() {\n  # https://stackoverflow.com/questions/2312762, Alex Offshore\n  eval local ARR1=\\(\\\"\\${$2[@]}\\\"\\)\n  eval local ARR2=\\(\\\"\\${$3[@]}\\\"\\)\n  local IFS=$'\\n'\n  mapfile -t $1 < <(comm -23 <(echo \"${ARR1[*]}\" | sort) <(echo \"${ARR2[*]}\" | sort))\n}\n\nprogress() {\n  SERVICE=${1}\n  TOTAL=${2}\n  CURRENT=${3}\n  DIFF=${4}\n  [[ -z ${DIFF} ]] && DIFF=0\n  [[ -z ${TOTAL} || -z ${CURRENT} ]] && return\n  [[ ${CURRENT} -gt ${TOTAL} ]] && return\n  [[ ${CURRENT} -lt 0 ]] && CURRENT=0\n  PERCENT=$(( 200 * ${CURRENT} / ${TOTAL} % 2 + 100 * ${CURRENT} / ${TOTAL} ))\n  ${REDIS_CMDLINE} LPUSH WATCHDOG_LOG \"{\\\"time\\\":\\\"$(date +%s)\\\",\\\"service\\\":\\\"${SERVICE}\\\",\\\"lvl\\\":\\\"${PERCENT}\\\",\\\"hpnow\\\":\\\"${CURRENT}\\\",\\\"hptotal\\\":\\\"${TOTAL}\\\",\\\"hpdiff\\\":\\\"${DIFF}\\\"}\" > /dev/null\n  log_msg \"${SERVICE} health level: ${PERCENT}% (${CURRENT}/${TOTAL}), health trend: ${DIFF}\" no_redis\n  # Return 10 to indicate a dead service\n  [ ${CURRENT} -le 0 ] && return 10\n}\n\nlog_msg() {\n  if [[ ${2} != \"no_redis\" ]]; then\n    ${REDIS_CMDLINE} LPUSH WATCHDOG_LOG \"{\\\"time\\\":\\\"$(date +%s)\\\",\\\"message\\\":\\\"$(printf '%s' \"${1}\" | \\\n      tr '\\r\\n%&;$\"_[]{}-' ' ')\\\"}\" > /dev/null\n  fi\n  echo $(date) $(printf '%s\\n' \"${1}\")\n}\n\nfunction notify_error() {\n  # Check if one of the notification options is enabled\n  [[ -z ${WATCHDOG_NOTIFY_EMAIL} ]] && [[ -z ${WATCHDOG_NOTIFY_WEBHOOK} ]] && return 0\n  THROTTLE=\n  [[ -z ${1} ]] && return 1\n  # If exists, body will be the content of \"/tmp/${1}\", even if ${2} is set\n  [[ -z ${2} ]] && BODY=\"Service was restarted on $(date), please check your mailcow installation.\" || BODY=\"$(date) - ${2}\"\n  # If exists, mail will be throttled by argument in seconds\n  [[ ! -z ${3} ]] && THROTTLE=${3}\n  if [[ ! -z ${THROTTLE} ]]; then\n    TTL_LEFT=\"$(${REDIS_CMDLINE} TTL THROTTLE_${1} 2> /dev/null)\"\n    if [[ \"${TTL_LEFT}\" == \"-2\" ]]; then\n      # Delay key not found, setting a delay key now\n      ${REDIS_CMDLINE} SET THROTTLE_${1} 1 EX ${THROTTLE}\n    else\n      log_msg \"Not sending notification email now, blocked for ${TTL_LEFT} seconds...\"\n      return 1\n    fi\n  fi\n  WATCHDOG_NOTIFY_EMAIL=$(echo \"${WATCHDOG_NOTIFY_EMAIL}\" | sed 's/\"//;s|\"$||')\n  # Some exceptions for subject and body formats\n  if [[ ${1} == \"fail2ban\" ]]; then\n    SUBJECT=\"${BODY}\"\n    BODY=\"Please see netfilter-mailcow for more details and triggered rules.\"\n  else\n    SUBJECT=\"${WATCHDOG_SUBJECT}: ${1}\"\n  fi\n\n  # Send mail notification if enabled\n  if [[ ! -z ${WATCHDOG_NOTIFY_EMAIL} ]]; then\n    IFS=',' read -r -a MAIL_RCPTS <<< \"${WATCHDOG_NOTIFY_EMAIL}\"\n    for rcpt in \"${MAIL_RCPTS[@]}\"; do\n      RCPT_DOMAIN=\n      RCPT_MX=\n      RCPT_DOMAIN=$(echo ${rcpt} | awk -F @ {'print $NF'})\n      CHECK_FOR_VALID_MX=$(dig +short ${RCPT_DOMAIN} mx)\n      if [[ -z ${CHECK_FOR_VALID_MX} ]]; then\n        log_msg \"Cannot determine MX for ${rcpt}, skipping email notification...\"\n        return 1\n      fi\n      [ -f \"/tmp/${1}\" ] && BODY=\"/tmp/${1}\"\n      timeout 10s ./smtp-cli --missing-modules-ok \\\n        \"${SMTP_VERBOSE}\" \\\n        --charset=UTF-8 \\\n        --subject=\"${SUBJECT}\" \\\n        --body-plain=\"${BODY}\" \\\n        --add-header=\"X-Priority: 1\" \\\n        --to=${rcpt} \\\n        --from=\"watchdog@${MAILCOW_HOSTNAME}\" \\\n        --hello-host=${MAILCOW_HOSTNAME} \\\n        --ipv4\n      if [[ $? -eq 1 ]]; then # exit code 1 is fine\n        log_msg \"Sent notification email to ${rcpt}\"\n      else\n        if [[ \"${SMTP_VERBOSE}\" == \"\" ]]; then\n          log_msg \"Error while sending notification email to ${rcpt}. You can enable verbose logging by setting 'WATCHDOG_VERBOSE=y' in mailcow.conf.\"\n        else\n          log_msg \"Error while sending notification email to ${rcpt}.\"\n        fi\n      fi\n    done\n  fi\n\n  # Send webhook notification if enabled\n  if [[ ! -z ${WATCHDOG_NOTIFY_WEBHOOK} ]]; then\n    if [[ -z ${WATCHDOG_NOTIFY_WEBHOOK_BODY} ]]; then\n      log_msg \"No webhook body set, skipping webhook notification...\"\n      return 1\n    fi\n\n    # Escape subject and body (https://stackoverflow.com/a/2705678)\n    ESCAPED_SUBJECT=$(echo ${SUBJECT} | sed -e 's/[\\/&]/\\\\&/g')\n    ESCAPED_BODY=$(echo ${BODY} | sed -e 's/[\\/&]/\\\\&/g')\n\n    # Replace subject and body placeholders\n    WEBHOOK_BODY=$(echo ${WATCHDOG_NOTIFY_WEBHOOK_BODY} | sed -e \"s/\\$SUBJECT\\|\\${SUBJECT}/$ESCAPED_SUBJECT/g\" -e \"s/\\$BODY\\|\\${BODY}/$ESCAPED_BODY/g\")\n\n    # POST to webhook\n    curl -X POST -H \"Content-Type: application/json\" ${CURL_VERBOSE} -d \"${WEBHOOK_BODY}\" ${WATCHDOG_NOTIFY_WEBHOOK}\n\n    log_msg \"Sent notification using webhook\"\n  fi\n}\n\nget_container_ip() {\n  # ${1} is container\n  CONTAINER_ID=()\n  CONTAINER_IPS=()\n  CONTAINER_IP=\n  LOOP_C=1\n  until [[ ${CONTAINER_IP} =~ ^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$ ]] || [[ ${LOOP_C} -gt 5 ]]; do\n    if [ ${IP_BY_DOCKER_API} -eq 0 ]; then\n      CONTAINER_IP=$(dig a \"${1}\" +short)\n    else\n      sleep 0.5\n      # get long container id for exact match\n      CONTAINER_ID=($(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" | jq -rc \"select( .name | tostring == \\\"${1}\\\") | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\"))\n      # returned id can have multiple elements (if scaled), shuffle for random test\n      CONTAINER_ID=($(printf \"%s\\n\" \"${CONTAINER_ID[@]}\" | shuf))\n      if [[ ! -z ${CONTAINER_ID} ]]; then\n        for matched_container in \"${CONTAINER_ID[@]}\"; do\n          CONTAINER_IPS=($(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${matched_container}/json | jq -r '.NetworkSettings.Networks[].IPAddress'))\n          for ip_match in \"${CONTAINER_IPS[@]}\"; do\n            # grep will do nothing if one of these vars is empty\n            [[ -z ${ip_match} ]] && continue\n            [[ -z ${IPV4_NETWORK} ]] && continue\n            # only return ips that are part of our network\n            if ! grep -q ${IPV4_NETWORK} <(echo ${ip_match}); then\n              continue\n            else\n              CONTAINER_IP=${ip_match}\n              break\n            fi\n          done\n          [[ ! -z ${CONTAINER_IP} ]] && break\n        done\n      fi\n    fi\n    LOOP_C=$((LOOP_C + 1))\n  done\n  [[ ${LOOP_C} -gt 5 ]] && echo 240.0.0.0 || echo ${CONTAINER_IP}\n}\n\n# One-time check\nif grep -qi \"$(echo ${IPV6_NETWORK} | cut -d: -f1-3)\" <<< \"$(ip a s)\"; then\n  if [[ -z \"$(get_ipv6)\" ]]; then\n    notify_error \"ipv6-config\" \"enable_ipv6 is true in docker-compose.yml, but an IPv6 link could not be established. Please verify your IPv6 connection.\"\n  fi\nfi\n\nexternal_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${EXTERNAL_CHECKS_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  GUID=$(mariadb --skip-ssl -u${DBUSER} -p${DBPASS} ${DBNAME} -e \"SELECT version FROM versions WHERE application = 'GUID'\" -BN)\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    err_c_cur=${err_count}\n    CHECK_REPONSE=\"$(curl --connect-timeout 3 -m 10 -4 -s https://checks.mailcow.email -X POST -dguid=${GUID} 2> /dev/null)\"\n    if [[ ! -z \"${CHECK_REPONSE}\" ]] && [[ \"$(echo ${CHECK_REPONSE} | jq -r .response)\" == \"critical\" ]]; then\n      echo ${CHECK_REPONSE} | jq -r .out > /tmp/external_checks\n      err_count=$(( ${err_count} + 1 ))\n    fi\n    CHECK_REPONSE6=\"$(curl --connect-timeout 3 -m 10 -6 -s https://checks.mailcow.email -X POST -dguid=${GUID} 2> /dev/null)\"\n    if [[ ! -z \"${CHECK_REPONSE6}\" ]] && [[ \"$(echo ${CHECK_REPONSE6} | jq -r .response)\" == \"critical\" ]]; then\n      echo ${CHECK_REPONSE} | jq -r .out > /tmp/external_checks\n      err_count=$(( ${err_count} + 1 ))\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"External checks\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 60\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 20 ) + 1800 ))\n    fi\n  done\n  return 1\n}\n\nnginx_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${NGINX_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/nginx-mailcow; echo \"$(tail -50 /tmp/nginx-mailcow)\" > /tmp/nginx-mailcow\n    host_ip=$(get_container_ip nginx-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_http -4 -H ${host_ip} -u / -p 8081 2>> /tmp/nginx-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Nginx\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nunbound_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${UNBOUND_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/unbound-mailcow; echo \"$(tail -50 /tmp/unbound-mailcow)\" > /tmp/unbound-mailcow\n    host_ip=$(get_container_ip unbound-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/mailcow/check_dns.sh -s ${host_ip} -H stackoverflow.com 2>> /tmp/unbound-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    DNSSEC=$(dig com +dnssec | egrep 'flags:.+ad')\n    if [[ -z ${DNSSEC} ]]; then\n      echo \"DNSSEC failure\" 2>> /tmp/unbound-mailcow 1>&2\n      err_count=$(( ${err_count} + 1))\n    else\n      echo \"DNSSEC check succeeded\" 2>> /tmp/unbound-mailcow 1>&2\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Unbound\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nredis_checks() {\n  # A check for the local redis container\n  err_count=0\n  diff_c=0\n  THRESHOLD=${REDIS_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/redis-mailcow; echo \"$(tail -50 /tmp/redis-mailcow)\" > /tmp/redis-mailcow\n    host_ip=$(get_container_ip redis-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_tcp -4 -H redis-mailcow -p 6379 -E -s \"AUTH ${REDISPASS}\\nPING\\n\" -q \"QUIT\" -e \"PONG\" 2>> /tmp/redis-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Redis\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nmysql_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${MYSQL_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/mysql-mailcow; echo \"$(tail -50 /tmp/mysql-mailcow)\" > /tmp/mysql-mailcow\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_mysql -f /etc/my.cnf.d/client.cnf -s /var/run/mysqld/mysqld.sock -u ${DBUSER} -p ${DBPASS} -d ${DBNAME} 2>> /tmp/mysql-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_mysql_query -f /etc/my.cnf.d/client.cnf -s /var/run/mysqld/mysqld.sock -u ${DBUSER} -p ${DBPASS} -d ${DBNAME} -q \"SELECT COUNT(*) FROM information_schema.tables\" 2>> /tmp/mysql-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"MySQL/MariaDB\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nmysql_repl_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${MYSQL_REPLICATION_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/mysql_repl_checks; echo \"$(tail -50 /tmp/mysql_repl_checks)\" > /tmp/mysql_repl_checks\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_mysql_slavestatus.sh -o /etc/my.cnf.d/client.cnf -S /var/run/mysqld/mysqld.sock -u root -p ${DBROOT} 2>> /tmp/mysql_repl_checks 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"MySQL/MariaDB replication\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 60\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nsogo_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${SOGO_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/sogo-mailcow; echo \"$(tail -50 /tmp/sogo-mailcow)\" > /tmp/sogo-mailcow\n    host_ip=$(get_container_ip sogo-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_http -4 -H ${host_ip} -u /SOGo.index/ -p 20000 2>> /tmp/sogo-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"SOGo\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\npostfix_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${POSTFIX_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/postfix-mailcow; echo \"$(tail -50 /tmp/postfix-mailcow)\" > /tmp/postfix-mailcow\n    host_ip=$(get_container_ip postfix-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_smtp -4 -H ${host_ip} -p 589 -f \"watchdog@invalid\" -C \"RCPT TO:watchdog@localhost\" -C DATA -C . -R 250 2>> /tmp/postfix-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_smtp -4 -H ${host_ip} -p 589 -S 2>> /tmp/postfix-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Postfix\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\npostfix-tlspol_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${POSTFIX_TLSPOL_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/postfix-tlspol-mailcow; echo \"$(tail -50 /tmp/postfix-tlspol-mailcow)\" > /tmp/postfix-tlspol-mailcow\n    host_ip=$(get_container_ip postfix-tlspol-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_tcp -4 -H ${host_ip} -p 8642 2>> /tmp/postfix-tlspol-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Postfix TLS Policy companion\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nclamd_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${CLAMD_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/clamd-mailcow; echo \"$(tail -50 /tmp/clamd-mailcow)\" > /tmp/clamd-mailcow\n    host_ip=$(get_container_ip clamd-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_clamd -4 -H ${host_ip} 2>> /tmp/clamd-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Clamd\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 120 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\ndovecot_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${DOVECOT_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/dovecot-mailcow; echo \"$(tail -50 /tmp/dovecot-mailcow)\" > /tmp/dovecot-mailcow\n    host_ip=$(get_container_ip dovecot-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_smtp -4 -H ${host_ip} -p 24 -f \"watchdog@invalid\" -C \"RCPT TO:<watchdog@invalid>\" -L -R \"User doesn't exist\" 2>> /tmp/dovecot-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_imap -4 -H ${host_ip} -p 993 -S -e \"OK \" 2>> /tmp/dovecot-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_imap -4 -H ${host_ip} -p 143 -e \"OK \" 2>> /tmp/dovecot-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_tcp -4 -H ${host_ip} -p 10001 -e \"VERSION\" 2>> /tmp/dovecot-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_tcp -4 -H ${host_ip} -p 4190 -e \"Dovecot ready\" 2>> /tmp/dovecot-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Dovecot\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\ndovecot_repl_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${DOVECOT_REPL_THRESHOLD}\n  D_REPL_STATUS=$(redis-cli -h redis -a ${REDISPASS} --no-auth-warning -r GET DOVECOT_REPL_HEALTH)\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    err_c_cur=${err_count}\n    D_REPL_STATUS=$(redis-cli --raw -h redis -a ${REDISPASS} --no-auth-warning GET DOVECOT_REPL_HEALTH)\n    if [[ \"${D_REPL_STATUS}\" != \"1\" ]]; then\n      err_count=$(( ${err_count} + 1 ))\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Dovecot replication\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 60\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\ncert_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=7\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/certcheck; echo \"$(tail -50 /tmp/certcheck)\" > /tmp/certcheck\n    host_ip_postfix=$(get_container_ip postfix)\n    host_ip_dovecot=$(get_container_ip dovecot)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_smtp -H ${host_ip_postfix} -p 589 -4 -S -D 7 2>> /tmp/certcheck 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_imap -H ${host_ip_dovecot} -p 993 -4 -S -D 7 2>> /tmp/certcheck 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Primary certificate expiry check\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    # Always sleep 5 minutes, mail notifications are limited\n    sleep 300\n  done\n  return 1\n}\n\nphpfpm_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${PHPFPM_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/php-fpm-mailcow; echo \"$(tail -50 /tmp/php-fpm-mailcow)\" > /tmp/php-fpm-mailcow\n    host_ip=$(get_container_ip php-fpm-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_tcp -H ${host_ip} -p 9001 2>> /tmp/php-fpm-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    /usr/lib/nagios/plugins/check_tcp -H ${host_ip} -p 9002 2>> /tmp/php-fpm-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"PHP-FPM\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nratelimit_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${RATELIMIT_THRESHOLD}\n  RL_LOG_STATUS=$(redis-cli -h redis -a ${REDISPASS} --no-auth-warning LRANGE RL_LOG 0 0 | jq .qid)\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    err_c_cur=${err_count}\n    RL_LOG_STATUS_PREV=${RL_LOG_STATUS}\n    RL_LOG_STATUS=$(redis-cli -h redis -a ${REDISPASS} --no-auth-warning LRANGE RL_LOG 0 0 | jq .qid)\n    if [[ ${RL_LOG_STATUS_PREV} != ${RL_LOG_STATUS} ]]; then\n      err_count=$(( ${err_count} + 1 ))\n      echo 'Last 10 applied ratelimits (may overlap with previous reports).' > /tmp/ratelimit\n      echo 'Full ratelimit buckets can be emptied by deleting the ratelimit hash from within mailcow UI (see /debug -> Protocols -> Ratelimit):' >> /tmp/ratelimit\n      echo >> /tmp/ratelimit\n      redis-cli --raw -h redis -a ${REDISPASS} --no-auth-warning LRANGE RL_LOG 0 10 | jq . >> /tmp/ratelimit\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Ratelimit\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nmailq_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${MAILQ_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/mail_queue_status; echo \"$(tail -50 /tmp/mail_queue_status)\" > /tmp/mail_queue_status\n    MAILQ_LOG_STATUS=$(find /var/spool/postfix/deferred -type f | wc -l)\n    echo \"Mail queue contains ${MAILQ_LOG_STATUS} items (critical limit is ${MAILQ_CRIT}) at $(date)\" >> /tmp/mail_queue_status\n    err_c_cur=${err_count}\n    if [ ${MAILQ_LOG_STATUS} -ge ${MAILQ_CRIT} ]; then\n      err_count=$(( ${err_count} + 1 ))\n      echo \"Mail queue contains ${MAILQ_LOG_STATUS} items (critical limit is ${MAILQ_CRIT}) at $(date)\" >> /tmp/mail_queue_status\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Mail queue\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 60\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nfail2ban_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${FAIL2BAN_THRESHOLD}\n  F2B_LOG_STATUS=($(${REDIS_CMDLINE} --raw HKEYS F2B_ACTIVE_BANS))\n  F2B_RES=\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    err_c_cur=${err_count}\n    F2B_LOG_STATUS_PREV=(${F2B_LOG_STATUS[@]})\n    F2B_LOG_STATUS=($(${REDIS_CMDLINE} --raw HKEYS F2B_ACTIVE_BANS))\n    array_diff F2B_RES F2B_LOG_STATUS F2B_LOG_STATUS_PREV\n    if [[ ! -z \"${F2B_RES}\" ]]; then\n      err_count=$(( ${err_count} + 1 ))\n      echo -n \"${F2B_RES[@]}\" | tr -cd \"[a-fA-F0-9.:/] \" | timeout 3s ${REDIS_CMDLINE} -x SET F2B_RES > /dev/null\n      if [ $? -ne 0 ]; then\n         ${REDIS_CMDLINE} -x DEL F2B_RES\n      fi\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Fail2ban\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nacme_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${ACME_THRESHOLD}\n  ACME_LOG_STATUS=$(redis-cli -h redis -a ${REDISPASS} --no-auth-warning GET ACME_FAIL_TIME)\n  if [[ -z \"${ACME_LOG_STATUS}\" ]]; then\n    ${REDIS_CMDLINE} SET ACME_FAIL_TIME 0\n    ACME_LOG_STATUS=0\n  fi\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    err_c_cur=${err_count}\n    ACME_LOG_STATUS_PREV=${ACME_LOG_STATUS}\n    ACME_LC=0\n    until [[ ! -z ${ACME_LOG_STATUS} ]] || [ ${ACME_LC} -ge 3 ]; do\n      ACME_LOG_STATUS=$(redis-cli -h redis -a ${REDISPASS} --no-auth-warning GET ACME_FAIL_TIME 2> /dev/null)\n      sleep 3\n      ACME_LC=$((ACME_LC+1))\n    done\n    if [[ ${ACME_LOG_STATUS_PREV} != ${ACME_LOG_STATUS} ]]; then\n      err_count=$(( ${err_count} + 1 ))\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"ACME\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nrspamd_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${RSPAMD_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/rspamd-mailcow; echo \"$(tail -50 /tmp/rspamd-mailcow)\" > /tmp/rspamd-mailcow\n    host_ip=$(get_container_ip rspamd-mailcow)\n    err_c_cur=${err_count}\n    SCORE=$(echo 'To: null@localhost\nFrom: watchdog@localhost\n\nEmpty\n' | usr/bin/curl --max-time 10 -s --data-binary @- --unix-socket /var/lib/rspamd/rspamd.sock http://rspamd.${COMPOSE_PROJECT_NAME}_mailcow-network/scan | jq -rc .default.required_score | sed 's/\\..*//' )\n    if [[ ${SCORE} -ne 9999 ]]; then\n      echo \"Rspamd settings check failed, score returned: ${SCORE}\" 2>> /tmp/rspamd-mailcow 1>&2\n      err_count=$(( ${err_count} + 1))\n    else\n      echo \"Rspamd settings check succeeded, score returned: ${SCORE}\" 2>> /tmp/rspamd-mailcow 1>&2\n    fi\n    # A dirty hack until a PING PONG event is implemented to worker proxy\n    # We expect an empty response, not a timeout\n    if [ \"$(curl -s --max-time 10 ${host_ip}:9900 2> /dev/null ; echo $?)\" == \"28\" ]; then\n      echo \"Milter check failed\" 2>> /tmp/rspamd-mailcow 1>&2; err_count=$(( ${err_count} + 1 ));\n    else\n      echo \"Milter check succeeded\" 2>> /tmp/rspamd-mailcow 1>&2\n    fi\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Rspamd\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\nolefy_checks() {\n  err_count=0\n  diff_c=0\n  THRESHOLD=${OLEFY_THRESHOLD}\n  # Reduce error count by 2 after restarting an unhealthy container\n  trap \"[ ${err_count} -gt 1 ] && err_count=$(( ${err_count} - 2 ))\" USR1\n  while [ ${err_count} -lt ${THRESHOLD} ]; do\n    touch /tmp/olefy-mailcow; echo \"$(tail -50 /tmp/olefy-mailcow)\" > /tmp/olefy-mailcow\n    host_ip=$(get_container_ip olefy-mailcow)\n    err_c_cur=${err_count}\n    /usr/lib/nagios/plugins/check_tcp -4 -H ${host_ip} -p 10055 -s \"PING\\n\" 2>> /tmp/olefy-mailcow 1>&2; err_count=$(( ${err_count} + $? ))\n    [ ${err_c_cur} -eq ${err_count} ] && [ ! $((${err_count} - 1)) -lt 0 ] && err_count=$((${err_count} - 1)) diff_c=1\n    [ ${err_c_cur} -ne ${err_count} ] && diff_c=$(( ${err_c_cur} - ${err_count} ))\n    progress \"Olefy\" ${THRESHOLD} $(( ${THRESHOLD} - ${err_count} )) ${diff_c}\n    if [[ $? == 10 ]]; then\n      diff_c=0\n      sleep 1\n    else\n      diff_c=0\n      sleep $(( ( RANDOM % 60 ) + 20 ))\n    fi\n  done\n  return 1\n}\n\n# Notify about start\nif [[ ${WATCHDOG_NOTIFY_START} =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n  notify_error \"watchdog-mailcow\" \"Watchdog started monitoring mailcow.\"\nfi\n\n# Create watchdog agents\n\n(\nwhile true; do\n  if ! nginx_checks; then\n    log_msg \"Nginx hit error limit\"\n    echo nginx-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned nginx_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\nif [[ ${WATCHDOG_EXTERNAL_CHECKS} =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n(\nwhile true; do\n  if ! external_checks; then\n    log_msg \"External checks hit error limit\"\n    echo external_checks > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned external_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\nfi\n\nif [[ ${WATCHDOG_MYSQL_REPLICATION_CHECKS} =~ ^([yY][eE][sS]|[yY])+$ ]]; then\n(\nwhile true; do\n  if ! mysql_repl_checks; then\n    log_msg \"MySQL replication check hit error limit\"\n    echo mysql_repl_checks > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned mysql_repl_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\nfi\n\n(\nwhile true; do\n  if ! mysql_checks; then\n    log_msg \"MySQL hit error limit\"\n    echo mysql-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned mysql_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! redis_checks; then\n    log_msg \"Local Redis hit error limit\"\n    echo redis-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned redis_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! phpfpm_checks; then\n    log_msg \"PHP-FPM hit error limit\"\n    echo php-fpm-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned phpfpm_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\nif [[ \"${SKIP_SOGO}\" =~ ^([nN][oO]|[nN])+$ ]]; then\n(\nwhile true; do\n  if ! sogo_checks; then\n    log_msg \"SOGo hit error limit\"\n    echo sogo-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned sogo_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\nfi\n\nif [ ${CHECK_UNBOUND} -eq 1 ]; then\n(\nwhile true; do\n  if ! unbound_checks; then\n    log_msg \"Unbound hit error limit\"\n    echo unbound-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned unbound_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\nfi\n\nif [[ \"${SKIP_CLAMD}\" =~ ^([nN][oO]|[nN])+$ ]]; then\n(\nwhile true; do\n  if ! clamd_checks; then\n    log_msg \"Clamd hit error limit\"\n    echo clamd-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned clamd_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\nfi\n\n(\nwhile true; do\n  if ! postfix_checks; then\n    log_msg \"Postfix hit error limit\"\n    echo postfix-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned postfix_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! mailq_checks; then\n    log_msg \"Mail queue hit error limit\"\n    echo mail_queue_status > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned mailq_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! postfix-tlspol_checks; then\n    log_msg \"Postfix TLS Policy hit error limit\"\n    echo postfix-tlspol-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned postfix-tlspol_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! dovecot_checks; then\n    log_msg \"Dovecot hit error limit\"\n    echo dovecot-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned dovecot_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! dovecot_repl_checks; then\n    log_msg \"Dovecot hit error limit\"\n    echo dovecot_repl_checks > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned dovecot_repl_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! rspamd_checks; then\n    log_msg \"Rspamd hit error limit\"\n    echo rspamd-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned rspamd_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! ratelimit_checks; then\n    log_msg \"Ratelimit hit error limit\"\n    echo ratelimit > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned ratelimit_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! fail2ban_checks; then\n    log_msg \"Fail2ban hit error limit\"\n    echo fail2ban > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned fail2ban_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n(\nwhile true; do\n  if ! cert_checks; then\n    log_msg \"Cert check hit error limit\"\n    echo certcheck > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned cert_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\nif [[ \"${SKIP_OLEFY}\" =~ ^([nN][oO]|[nN])+$ ]]; then\n(\nwhile true; do\n  if ! olefy_checks; then\n    log_msg \"Olefy hit error limit\"\n    echo olefy-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned olefy_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\nfi\n\n(\nwhile true; do\n  if ! acme_checks; then\n    log_msg \"ACME client hit error limit\"\n    echo acme-mailcow > /tmp/com_pipe\n  fi\ndone\n) &\nPID=$!\necho \"Spawned acme_checks with PID ${PID}\"\nBACKGROUND_TASKS+=(${PID})\n\n# Monitor watchdog agents, stop script when agents fails and wait for respawn by Docker (restart:always:n)\n(\nwhile true; do\n  for bg_task in ${BACKGROUND_TASKS[*]}; do\n    if ! kill -0 ${bg_task} 1>&2; then\n      log_msg \"Worker ${bg_task} died, stopping watchdog and waiting for respawn...\"\n      kill -TERM 1\n    fi\n    sleep 10\n  done\ndone\n) &\n\n# Monitor dockerapi\n(\nwhile true; do\n  while nc -z dockerapi 443; do\n    sleep 3\n  done\n  log_msg \"Cannot find dockerapi-mailcow, waiting to recover...\"\n  kill -STOP ${BACKGROUND_TASKS[*]}\n  until nc -z dockerapi 443; do\n    sleep 3\n  done\n  kill -CONT ${BACKGROUND_TASKS[*]}\n  kill -USR1 ${BACKGROUND_TASKS[*]}\ndone\n) &\n\n# Actions when threshold limit is reached\nwhile true; do\n  CONTAINER_ID=\n  HAS_INITDB=\n  read com_pipe_answer </tmp/com_pipe\n  if [ -s \"/tmp/${com_pipe_answer}\" ]; then\n    cat \"/tmp/${com_pipe_answer}\"\n  fi\n  if [[ ${com_pipe_answer} == \"ratelimit\" ]]; then\n    log_msg \"At least one ratelimit was applied\"\n    notify_error \"${com_pipe_answer}\"\n  elif [[ ${com_pipe_answer} == \"mail_queue_status\" ]]; then\n    log_msg \"Mail queue status is critical\"\n    notify_error \"${com_pipe_answer}\"\n  elif [[ ${com_pipe_answer} == \"external_checks\" ]]; then\n    log_msg \"Your mailcow is an open relay!\"\n    # Define $2 to override message text, else print service was restarted at ...\n    notify_error \"${com_pipe_answer}\" \"Please stop mailcow now and check your network configuration!\"\n  elif [[ ${com_pipe_answer} == \"mysql_repl_checks\" ]]; then\n    log_msg \"MySQL replication is not working properly\"\n    # Define $2 to override message text, else print service was restarted at ...\n    # Once mail per 10 minutes\n    notify_error \"${com_pipe_answer}\" \"Please check the SQL replication status\" 600\n  elif [[ ${com_pipe_answer} == \"dovecot_repl_checks\" ]]; then\n    log_msg \"Dovecot replication is not working properly\"\n    # Define $2 to override message text, else print service was restarted at ...\n    # Once mail per 10 minutes\n    notify_error \"${com_pipe_answer}\" \"Please check the Dovecot replicator status\" 600\n  elif [[ ${com_pipe_answer} == \"certcheck\" ]]; then\n    log_msg \"Certificates are about to expire\"\n    # Define $2 to override message text, else print service was restarted at ...\n    # Only mail once a day\n    notify_error \"${com_pipe_answer}\" \"Please renew your certificate\" 86400\n  elif [[ ${com_pipe_answer} == \"acme-mailcow\" ]]; then\n    log_msg \"acme-mailcow did not complete successfully\"\n    # Define $2 to override message text, else print service was restarted at ...\n    notify_error \"${com_pipe_answer}\" \"Please check acme-mailcow for further information.\"\n  elif [[ ${com_pipe_answer} == \"fail2ban\" ]]; then\n    F2B_RES=($(timeout 4s ${REDIS_CMDLINE} --raw GET F2B_RES 2> /dev/null))\n    if [[ ! -z \"${F2B_RES}\" ]]; then\n      ${REDIS_CMDLINE} DEL F2B_RES > /dev/null\n      host=\n      for host in \"${F2B_RES[@]}\"; do\n        log_msg \"Banned ${host}\"\n        rm /tmp/fail2ban 2> /dev/null\n        timeout 2s whois \"${host}\" > /tmp/fail2ban\n        [[ ${WATCHDOG_NOTIFY_BAN} =~ ^([yY][eE][sS]|[yY])+$ ]] && notify_error \"${com_pipe_answer}\" \"IP ban: ${host}\"\n      done\n    fi\n  elif [[ ${com_pipe_answer} =~ .+-mailcow ]]; then\n    kill -STOP ${BACKGROUND_TASKS[*]}\n    sleep 10\n    CONTAINER_ID=$(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/json | jq -r \".[] | {name: .Config.Labels[\\\"com.docker.compose.service\\\"], project: .Config.Labels[\\\"com.docker.compose.project\\\"], id: .Id}\" | jq -rc \"select( .name | tostring | contains(\\\"${com_pipe_answer}\\\")) | select( .project | tostring | contains(\\\"${COMPOSE_PROJECT_NAME,,}\\\")) | .id\")\n    if [[ ! -z ${CONTAINER_ID} ]]; then\n      if [[ \"${com_pipe_answer}\" == \"php-fpm-mailcow\" ]]; then\n        HAS_INITDB=$(curl --silent --insecure -XPOST https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/top | jq '.msg.Processes[] | contains([\"php -c /usr/local/etc/php -f /web/inc/init_db.inc.php\"])' | grep true)\n      fi\n      S_RUNNING=$(($(date +%s) - $(curl --silent --insecure https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/json | jq .State.StartedAt | xargs -n1 date +%s -d)))\n      if [ ${S_RUNNING} -lt 360 ]; then\n        log_msg \"Container is running for less than 360 seconds, skipping action...\"\n      elif [[ ! -z ${HAS_INITDB} ]]; then\n        log_msg \"Database is being initialized by php-fpm-mailcow, not restarting but delaying checks for a minute...\"\n        sleep 60\n      else\n        log_msg \"Sending restart command to ${CONTAINER_ID}...\"\n        curl --silent --insecure -XPOST https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/restart\n        notify_error \"${com_pipe_answer}\"\n        log_msg \"Wait for restarted container to settle and continue watching...\"\n        sleep 35\n      fi\n    fi\n    kill -CONT ${BACKGROUND_TASKS[*]}\n    sleep 1\n    kill -USR1 ${BACKGROUND_TASKS[*]}\n  fi\ndone\n\n"
  },
  {
    "path": "data/assets/mysql/docker-entrypoint.sh",
    "content": "#!/bin/bash\nset -eo pipefail\nshopt -s nullglob\n\nopenssl req -x509 -sha256 -newkey rsa:2048 -keyout /var/lib/mysql/sql.key -out /var/lib/mysql/sql.crt -days 3650 -nodes -subj '/CN=mysql'\n\n# if command starts with an option, prepend mysqld\nif [ \"${1:0:1}\" = '-' ]; then\n\tset -- mysqld \"$@\"\nfi\n\n# skip setup if they want an option that stops mysqld\nwantHelp=\nfor arg; do\n\tcase \"$arg\" in\n\t\t-'?'|--help|--print-defaults|-V|--version)\n\t\t\twantHelp=1\n\t\t\tbreak\n\t\t\t;;\n\tesac\ndone\n\n# usage: file_env VAR [DEFAULT]\n#    ie: file_env 'XYZ_DB_PASSWORD' 'example'\n# (will allow for \"$XYZ_DB_PASSWORD_FILE\" to fill in the value of\n#  \"$XYZ_DB_PASSWORD\" from a file, especially for Docker's secrets feature)\nfile_env() {\n\tlocal var=\"$1\"\n\tlocal fileVar=\"${var}_FILE\"\n\tlocal def=\"${2:-}\"\n\tif [ \"${!var:-}\" ] && [ \"${!fileVar:-}\" ]; then\n\t\techo >&2 \"error: both $var and $fileVar are set (but are exclusive)\"\n\t\texit 1\n\tfi\n\tlocal val=\"$def\"\n\tif [ \"${!var:-}\" ]; then\n\t\tval=\"${!var}\"\n\telif [ \"${!fileVar:-}\" ]; then\n\t\tval=\"$(< \"${!fileVar}\")\"\n\tfi\n\texport \"$var\"=\"$val\"\n\tunset \"$fileVar\"\n}\n\n_check_config() {\n\ttoRun=( \"$@\" --verbose --help --log-bin-index=\"$(mktemp -u)\" )\n\tif ! errors=\"$(\"${toRun[@]}\" 2>&1 >/dev/null)\"; then\n\t\tcat >&2 <<-EOM\n\n\t\t\tERROR: mysqld failed while attempting to check config\n\t\t\tcommand was: \"${toRun[*]}\"\n\n\t\t\t$errors\n\t\tEOM\n\t\texit 1\n\tfi\n}\n\n# Fetch value from server config\n# We use mysqld --verbose --help instead of my_print_defaults because the\n# latter only show values present in config files, and not server defaults\n_get_config() {\n\tlocal conf=\"$1\"; shift\n\t\"$@\" --verbose --help --log-bin-index=\"$(mktemp -u)\" 2>/dev/null | awk '$1 == \"'\"$conf\"'\" { print $2; exit }'\n}\n\n# allow the container to be started with `--user`\nif [ \"$1\" = 'mysqld' -a -z \"$wantHelp\" -a \"$(id -u)\" = '0' ]; then\n\t_check_config \"$@\"\n\tDATADIR=\"$(_get_config 'datadir' \"$@\")\"\n\tmkdir -p \"$DATADIR\"\n\tchown -R mysql:mysql \"$DATADIR\"\n\texec gosu mysql \"$BASH_SOURCE\" \"$@\"\nfi\n\nif [ \"$1\" = 'mysqld' -a -z \"$wantHelp\" ]; then\n\t# still need to check config, container may have started with --user\n\t_check_config \"$@\"\n\t# Get config\n\tDATADIR=\"$(_get_config 'datadir' \"$@\")\"\n\n\tif [ ! -d \"$DATADIR/mysql\" ]; then\n\t\tfile_env 'MYSQL_ROOT_PASSWORD'\n\t\tif [ -z \"$MYSQL_ROOT_PASSWORD\" -a -z \"$MYSQL_ALLOW_EMPTY_PASSWORD\" -a -z \"$MYSQL_RANDOM_ROOT_PASSWORD\" ]; then\n\t\t\techo >&2 'error: database is uninitialized and password option is not specified '\n\t\t\techo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'\n\t\t\texit 1\n\t\tfi\n\n\t\tmkdir -p \"$DATADIR\"\n\n\t\techo 'Initializing database'\n\t\t# \"Other options are passed to mysqld.\" (so we pass all \"mysqld\" arguments directly here)\n\t\tmysql_install_db --datadir=\"$DATADIR\" --rpm \"${@:2}\"\n\t\techo 'Database initialized'\n\n\t\tSOCKET=\"$(_get_config 'socket' \"$@\")\"\n\t\t\"$@\" --skip-networking --socket=\"${SOCKET}\" &\n\t\tpid=\"$!\"\n\n\t\tmysql=( mysql --protocol=socket -uroot -hlocalhost --socket=\"${SOCKET}\" )\n\n\t\tfor i in {30..0}; do\n\t\t\tif echo 'SELECT 1' | \"${mysql[@]}\" &> /dev/null; then\n\t\t\t\tbreak\n\t\t\tfi\n\t\t\techo 'MySQL init process in progress...'\n\t\t\tsleep 1\n\t\tdone\n\t\tif [ \"$i\" = 0 ]; then\n\t\t\techo >&2 'MySQL init process failed.'\n\t\t\texit 1\n\t\tfi\n\n\t\tif [ -z \"$MYSQL_INITDB_SKIP_TZINFO\" ]; then\n\t\t\t# sed is for https://bugs.mysql.com/bug.php?id=20545\n\t\t\tmysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | \"${mysql[@]}\" mysql\n\t\tfi\n\n\t\tif [ ! -z \"$MYSQL_RANDOM_ROOT_PASSWORD\" ]; then\n\t\t\texport MYSQL_ROOT_PASSWORD=\"$(pwgen -1 32)\"\n\t\t\techo \"GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD\"\n\t\tfi\n\n\t\trootCreate=\n\t\t# default root to listen for connections from anywhere\n\t\tfile_env 'MYSQL_ROOT_HOST' '%'\n\t\tif [ ! -z \"$MYSQL_ROOT_HOST\" -a \"$MYSQL_ROOT_HOST\" != 'localhost' ]; then\n\t\t\t# no, we don't care if read finds a terminating character in this heredoc\n\t\t\t# https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151\n\t\t\tread -r -d '' rootCreate <<-EOSQL || true\n\t\t\t\tCREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;\n\t\t\t\tGRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;\n\t\t\tEOSQL\n\t\tfi\n\n\t\t\"${mysql[@]}\" <<-EOSQL\n\t\t\t-- What's done in this file shouldn't be replicated\n\t\t\t--  or products like mysql-fabric won't work\n\t\t\tSET @@SESSION.SQL_LOG_BIN=0;\n\n\t\t\tDELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost') ;\n\t\t\tSET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}') ;\n\t\t\tGRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION ;\n\t\t\t${rootCreate}\n\t\t\tDROP DATABASE IF EXISTS test ;\n\t\t\tFLUSH PRIVILEGES ;\n\t\tEOSQL\n\n\t\tif [ ! -z \"$MYSQL_ROOT_PASSWORD\" ]; then\n\t\t\tmysql+=( -p\"${MYSQL_ROOT_PASSWORD}\" )\n\t\tfi\n\n\t\tfile_env 'MYSQL_DATABASE'\n\t\tif [ \"$MYSQL_DATABASE\" ]; then\n\t\t\techo \"CREATE DATABASE IF NOT EXISTS \\`$MYSQL_DATABASE\\` ;\" | \"${mysql[@]}\"\n\t\t\tmysql+=( \"$MYSQL_DATABASE\" )\n\t\tfi\n\n\t\tfile_env 'MYSQL_USER'\n\t\tfile_env 'MYSQL_PASSWORD'\n\t\tif [ \"$MYSQL_USER\" -a \"$MYSQL_PASSWORD\" ]; then\n\t\t\techo \"CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;\" | \"${mysql[@]}\"\n\n\t\t\tif [ \"$MYSQL_DATABASE\" ]; then\n\t\t\t\techo \"GRANT ALL ON \\`$MYSQL_DATABASE\\`.* TO '$MYSQL_USER'@'%' ;\" | \"${mysql[@]}\"\n\t\t\tfi\n\t\tfi\n\n\t\techo\n\t\tfor f in /docker-entrypoint-initdb.d/*; do\n\t\t\tcase \"$f\" in\n\t\t\t\t*.sh)     echo \"$0: running $f\"; . \"$f\" ;;\n\t\t\t\t*.sql)    echo \"$0: running $f\"; \"${mysql[@]}\" < \"$f\"; echo ;;\n\t\t\t\t*.sql.gz) echo \"$0: running $f\"; gunzip -c \"$f\" | \"${mysql[@]}\"; echo ;;\n\t\t\t\t*)        echo \"$0: ignoring $f\" ;;\n\t\t\tesac\n\t\t\techo\n\t\tdone\n\n\t\tif ! kill -s TERM \"$pid\" || ! wait \"$pid\"; then\n\t\t\techo >&2 'MySQL init process failed.'\n\t\t\texit 1\n\t\tfi\n\n\t\techo\n\t\techo 'MySQL init process done. Ready for start up.'\n\t\techo\n\tfi\nfi\n\nexec \"$@\"\n"
  },
  {
    "path": "data/assets/passwd/generate_passwords.sh",
    "content": "#!/bin/bash\n\necho DBPASS=$(openssl rand -base64 32 | tr -dc _A-Z-a-z-0-9)\necho DBROOT=$(openssl rand -base64 32 | tr -dc _A-Z-a-z-0-9)\n"
  },
  {
    "path": "data/assets/templates/pw_reset_html.tpl",
    "content": "<html>\n  <head>\n  <meta name=\"x-apple-disable-message-reformatting\" />\n  <style>\n  body {\n    font-family: Helvetica, Arial, Sans-Serif;\n  }\n  /* mobile devices */\n  @media all and (max-width: 480px) {\n    .mob {\n      display: none;\n    }    \n  }\n  </style>\n  </head>\n  <body>\nHello {{username2}},<br><br>\n\nSomebody requested a new password for the {{hostname}} account associated with {{username}}.<br>\n<small>Date of the password reset request: {{date}}</small><br><br>\n\nYou can reset your password by clicking the link below:<br>\n<a href=\"{{link}}\">{{link}}</a><br><br>\n\nThe link will be valid for the next {{token_lifetime}} minutes.<br><br>\n\nIf you did not request a new password, please ignore this email.<br>\n  </body>\n</html>\n"
  },
  {
    "path": "data/assets/templates/pw_reset_text.tpl",
    "content": "Hello {{username2}},\n\nSomebody requested a new password for the {{hostname}} account associated with {{username}}.\nDate of the password reset request: {{date}}\n\nYou can reset your password by clicking the link below:\n{{link}}\n\nThe link will be valid for the next {{token_lifetime}} minutes.\n\nIf you did not request a new password, please ignore this email.\n"
  },
  {
    "path": "data/assets/templates/quarantine.tpl",
    "content": "<html>\n  <head>\n  <meta name=\"x-apple-disable-message-reformatting\" />\n  <style>\n  body {\n    font-family: Helvetica, Arial, Sans-Serif;\n  }\n  table {\n    border-collapse: collapse;\n    width: 100%;\n    margin-bottom: 20px;\n  }\n  th, td {\n    padding: 8px;\n    text-align: left;\n    border-bottom: 1px solid #ddd;\n    vertical-align: top;\n  }\n  td.fixed {\n    white-space: nowrap;\n  }\n  th {\n    background-color: #56B04C;\n    color: white;\n  }\n  tr:nth-child(even) {\n    background-color: #f2f2f2;\n  }\n  /* mobile devices */\n  @media all and (max-width: 480px) {\n    .mob {\n    display: none;\n    }    \n  }\n  </style>\n  </head>\n  <body>\n    <p>Hi {{username}}!<br>\n    {% if counter == 1 %}\n    There is 1 new message waiting in quarantine:<br>\n    {% else %}\n    There are {{counter}} new messages waiting in quarantine:<br>\n    {% endif %}\n    <table>\n    <tr><th>Subject</th><th>Sender</th><th class=\"mob\">Score</th><th class=\"mob\">Action</th><th class=\"mob\">Arrived on</th>{% if quarantine_acl == 1 %}<th>Actions</th>{% endif %}</tr>\n    {% for line in meta|reverse %}\n    <tr>\n    <td>{{ line.subject|e }}</td>\n    <td>{{ line.sender|e }}</td>\n    <td class=\"mob\">{{ line.score }}</td>\n    {% if line.action == \"reject\" %}\n      <td class=\"mob\">Rejected</td>\n    {% else %}\n      <td class=\"mob\">Sent to Junk folder</td>\n    {% endif %}\n    <td class=\"mob\">{{ line.created }}</td>\n    {% if quarantine_acl == 1 %}\n      {% if line.action == \"reject\" %}\n        <td class=\"fixed\"><a href=\"https://{{ hostname }}/qhandler/release/{{ line.qhash }}\">Release to inbox</a> | <a href=\"https://{{ hostname }}/qhandler/delete/{{ line.qhash }}\">delete</a></td>\n      {% else %}\n        <td class=\"fixed\"><a href=\"https://{{ hostname }}/qhandler/release/{{ line.qhash }}\">Send copy to inbox</a> | <a href=\"https://{{ hostname }}/qhandler/delete/{{ line.qhash }}\">delete</a></td>\n      {% endif %}\n    {% endif %}\n    </tr>\n    {% endfor %}\n    </table>\n    </p>\n  </body>\n</html>\n"
  },
  {
    "path": "data/assets/templates/quota.tpl",
    "content": "<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n        <style>\n            body {\n            font-family: Calibri, Arial, Verdana;\n            }\n            table {\n            border: 0;\n            border-collapse: collapse;\n            <!--[if mso]>\n            border-spacing: 0px;\n            table-layout: fixed;\n            <![endif]-->\n            }\n            tr {\n            display: flex;\n            }\n            #progressbar {\n            color: #000;\n            background-color: #f1f1f1;\n            width: 100%;\n            }\n            {% if (percent >= 95) %}\n            #progressbar {\n            color: #fff;\n            background-color: #FF0000;\n            text-align: center;\n            width: {{percent}}%;\n            }\n            {% elif (percent < 95) and (percent >= 80) %}\n            #progressbar {\n            color: #fff;\n            background-color: #FF8C00;\n            text-align: center;\n            width: {{percent}}%;\n            }\n            {% else %}\n            #progressbar {\n            color: #fff;\n            background-color: #00B000;\n            text-align: center;\n            width: {{percent}}%;\n            }\n            {% endif %}\n            #graybar {\n            background-color: #D8D8D8;\n            width: {{100 - percent}}%;\n            }\n            a:link, a:visited {\n            color: #858585;\n            text-decoration: none;\n            }\n            a:hover, a:active {\n            color: #4a81bf;\n            }\n        </style>\n    </head>\n    <body>\n        <table>\n            <tr>\n                <td colspan=\"2\">\n                    Hi {{username}}!<br /><br />\n                    Your mailbox is now {{percent}}% full, please consider deleting old messages to still be able to receive new mails in the future.<br /><br />\n                </td>\n            </tr>\n            <tr>\n                <td id=\"progressbar\">{{percent}}%</td>\n                <td id=\"graybar\"></td>\n            </tr>\n        </table>\n    </body>\n</html>\n"
  },
  {
    "path": "data/conf/acme/.gitkeep",
    "content": ""
  },
  {
    "path": "data/conf/clamav/clamd.conf",
    "content": "#Debug true\n#LogFile /dev/null\nLogTime yes\nLogClean yes\nExtendedDetectionInfo yes\nPidFile /run/clamav/clamd.pid\nOfficialDatabaseOnly no\nLocalSocket /run/clamav/clamd.sock\nTCPSocket 3310\nStreamMaxLength 25M\nMaxThreads 10\nReadTimeout 10\nCommandReadTimeout 3\nSendBufTimeout 200\nMaxQueue 80\nIdleTimeout 20\nSelfCheck 3600\nUser clamav\nForeground yes\nDetectPUA yes\n# See https://github.com/vrtadmin/clamav-faq/blob/master/faq/faq-pua.md\n#ExcludePUA NetTool\n#ExcludePUA PWTool\n#IncludePUA Spy\n#IncludePUA Scanner\n#IncludePUA RAT\nHeuristicAlerts yes\nScanOLE2 yes\nAlertOLE2Macros no\nScanPDF yes\nScanSWF yes\nScanXMLDOCS yes\nScanHWP3 yes\nScanMail yes\nPhishingSignatures no\nPhishingScanURLs no\nHeuristicScanPrecedence yes\nScanHTML yes\nScanArchive yes\nMaxScanSize 50M\nMaxFileSize 25M\nMaxRecursion 5\nMaxFiles 200\nBytecode yes\nBytecodeSecurity TrustSigned\nBytecodeTimeout 1000\nConcurrentDatabaseReload no\n"
  },
  {
    "path": "data/conf/clamav/freshclam.conf",
    "content": "#UpdateLogFile /dev/console\nLogTime yes\nPidFile /run/clamav/freshclam.pid\nDatabaseOwner clamav\nDNSDatabaseInfo current.cvd.clamav.net\nDatabaseMirror db.uk.clamav.net\nDatabaseMirror db.nl.clamav.net\nDatabaseMirror db.fr.clamav.net\nDatabaseMirror db.ch.clamav.net\nMaxAttempts 4\nScriptedUpdates yes\nChecks 6\nNotifyClamd /etc/clamav/clamd.conf\nForeground yes\nConnectTimeout 20\nReceiveTimeout 20\nTestDatabases yes\nBytecode yes\n\n"
  },
  {
    "path": "data/conf/dovecot/auth/mailcowauth.php",
    "content": "<?php\nini_set('error_reporting', 0);\nheader('Content-Type: application/json');\n\n$post = trim(file_get_contents('php://input'));\nif ($post) {\n  $post = json_decode($post, true);\n}\n\n\n$return = array(\"success\" => false);\nif(!isset($post['username']) || !isset($post['password']) || !isset($post['real_rip'])){\n  error_log(\"MAILCOWAUTH: Bad Request\");\n  http_response_code(400); // Bad Request\n  echo json_encode($return);\n  exit();\n}\n\nrequire_once('../../../web/inc/vars.inc.php');\nif (file_exists('../../../web/inc/vars.local.inc.php')) {\n  include_once('../../../web/inc/vars.local.inc.php');\n}\nrequire_once '../../../web/inc/lib/vendor/autoload.php';\n\n\n// Init Redis\n$redis = new Redis();\ntry {\n  if (!empty(getenv('REDIS_SLAVEOF_IP'))) {\n    $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));\n  }\n  else {\n    $redis->connect('redis-mailcow', 6379);\n  }\n  $redis->auth(getenv(\"REDISPASS\"));\n}\ncatch (Exception $e) {\n  error_log(\"MAILCOWAUTH: \" . $e . PHP_EOL);\n  http_response_code(500); // Internal Server Error\n  echo json_encode($return);\n  exit;\n}\n\n// Init database\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\n$opt = [\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n    PDO::ATTR_EMULATE_PREPARES   => false,\n];\ntry {\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\n}\ncatch (PDOException $e) {\n  error_log(\"MAILCOWAUTH: \" . $e . PHP_EOL);\n  http_response_code(500); // Internal Server Error\n  echo json_encode($return);\n  exit;\n}\n\n// Load core functions first\nrequire_once 'functions.inc.php';\nrequire_once 'functions.auth.inc.php';\nrequire_once 'sessions.inc.php';\nrequire_once 'functions.mailbox.inc.php';\nrequire_once 'functions.ratelimit.inc.php';\nrequire_once 'functions.acl.inc.php';\n\n\n$isSOGoRequest = $post['real_rip'] == getenv('IPV4_NETWORK') . '.248';\n$result = false;\nif ($isSOGoRequest) {\n  // This is a SOGo Auth request. First check for SSO password.\n  $sogo_sso_pass = file_get_contents(\"/etc/sogo-sso/sogo-sso.pass\");\n  if ($sogo_sso_pass === $post['password']){\n    error_log('MAILCOWAUTH: SOGo SSO auth for user ' . $post['username']);\n    set_sasl_log($post['username'], $post['real_rip'], \"SOGO\");\n    $result = true;\n  }\n}\nif ($result === false){\n  // If it's a SOGo Request, don't check for protocol access\n  if ($isSOGoRequest) {\n    $service = 'SOGO';\n    $post['service'] = 'NONE';\n  } else {\n    $service = $post['service'];\n  }\n\n  $result = apppass_login($post['username'], $post['password'], array(\n    'service' => $post['service'],\n    'is_internal' => true,\n    'remote_addr' => $post['real_rip']\n  ));\n  if ($result) {\n    error_log('MAILCOWAUTH: App auth for user ' . $post['username'] . \" with service \" . $service . \" from IP \" . $post['real_rip']);\n    set_sasl_log($post['username'], $post['real_rip'], $service);\n  }\n}\nif ($result === false){\n  // Init Identity Provider\n  $iam_provider = identity_provider('init');\n  $iam_settings = identity_provider('get');\n  $result = user_login($post['username'], $post['password'], array('is_internal' => true, 'service' => $post['service']));\n  if ($result) {\n    error_log('MAILCOWAUTH: User auth for user ' . $post['username'] . \" with service \" . $post['service'] . \" from IP \" . $post['real_rip']);\n    set_sasl_log($post['username'], $post['real_rip'], $post['service']);\n  }\n}\n\nif ($result) {\n  http_response_code(200); // OK\n  $return['success'] = true;\n} else {\n  error_log(\"MAILCOWAUTH: Login failed for user \" . $post['username'] . \" with service \" . $post['service'] . \" from IP \" . $post['real_rip']);\n  http_response_code(401); // Unauthorized\n}\n\n\necho json_encode($return);\nsession_destroy();\nexit;\n"
  },
  {
    "path": "data/conf/dovecot/auth/passwd-verify.lua",
    "content": "function auth_password_verify(request, password)\n  if request.domain == nil then\n    return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, \"No such user\"\n  end\n\n  local json = require \"cjson\"\n  local ltn12 = require \"ltn12\"\n  local https = require \"ssl.https\"\n  https.TIMEOUT = 30\n\n  local req = {\n    username = request.user,\n    password = password,\n    real_rip = request.real_rip,\n    service = request.service\n  }\n  local req_json = json.encode(req)\n  local res = {}\n\n  local b, c = https.request {\n    method = \"POST\",\n    url = \"https://nginx:9082\",\n    source = ltn12.source.string(req_json),\n    headers = {\n      [\"content-type\"] = \"application/json\",\n      [\"content-length\"] = tostring(#req_json)\n    },\n    sink = ltn12.sink.table(res),\n    insecure = true\n  }\n\n  -- Returning PASSDB_RESULT_PASSWORD_MISMATCH will reset the user's auth cache entry.\n  -- Returning PASSDB_RESULT_INTERNAL_FAILURE keeps the existing cache entry,\n  -- even if the TTL has expired. Useful to avoid cache eviction during backend issues.\n  if c ~= 200 and c ~= 401 then\n    dovecot.i_info(\"HTTP request failed with \" .. c .. \" for user \" .. request.user)\n    return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, \"Upstream error\"\n  end\n\n  local response_str = table.concat(res)\n  local is_response_valid, response_json = pcall(json.decode, response_str)\n\n  if not is_response_valid then\n    dovecot.i_info(\"Invalid JSON received: \" .. response_str)\n    return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, \"Invalid response format\"\n  end\n\n  if response_json.success == true then\n    return dovecot.auth.PASSDB_RESULT_OK, \"\"\n  end\n\n  return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, \"Failed to authenticate\"\nend\n\nfunction auth_passdb_lookup(req)\n   return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, \"\"\nend\n"
  },
  {
    "path": "data/conf/dovecot/dovecot.conf",
    "content": "# --------------------------------------------------------------------------\n# Please create a file \"extra.conf\" for persistent overrides to dovecot.conf\n# --------------------------------------------------------------------------\n# LDAP example:\n#passdb {\n#  args = /etc/dovecot/ldap/passdb.conf\n#  driver = ldap\n#}\n\nauth_mechanisms = plain login\n#mail_debug = yes\n#auth_debug = yes\n#log_debug = category=fts-flatcurve # Activate Logging for Flatcurve FTS Searchings\nlog_path = syslog\ndisable_plaintext_auth = yes\n# Uncomment on NFS share\n#mmap_disable = yes\n#mail_fsync = always\n#mail_nfs_index = yes\n#mail_nfs_storage = yes\nlogin_log_format_elements = \"user=<%u> method=%m rip=%r lip=%l mpid=%e %c %k\"\nmail_home = /var/vmail/%d/%n\nmail_location = maildir:~/\nmail_plugins = </etc/dovecot/mail_plugins\nmail_attachment_fs = crypt:set_prefix=mail_crypt_global:posix:\nmail_attachment_dir = /var/attachments\nmail_attachment_min_size = 128k\n# Significantly speeds up very large mailboxes, but is only safe to enable if\n# you do not manually modify the files in the `cur` directories in\n# mailcowdockerized_vmail-vol-1.\n# https://docs.mailcow.email/manual-guides/Dovecot/u_e-dovecot-performance/\nmaildir_very_dirty_syncs = yes\n\n# Dovecot 2.2\n#ssl_protocols = !SSLv3\n# Dovecot 2.3\nssl_min_protocol = TLSv1.2\n\nssl_prefer_server_ciphers = yes\nssl_cipher_list = ALL:!ADH:!LOW:!SSLv2:!SSLv3:!EXP:!aNULL:!eNULL:!3DES:!MD5:!PSK:!DSS:!RC4:!SEED:!IDEA:+HIGH:+MEDIUM\n\n# Default in Dovecot 2.3\nssl_options = no_compression no_ticket\n\n# New in Dovecot 2.3\nssl_dh = </etc/ssl/mail/dhparams.pem\n# Dovecot 2.2\n#ssl_dh_parameters_length = 2048\nlog_timestamp = \"%Y-%m-%d %H:%M:%S \"\nrecipient_delimiter = +\nauth_master_user_separator = *\nmail_shared_explicit_inbox = yes\nmail_prefetch_count = 30\npassdb {\n  driver = lua\n  args = file=/etc/dovecot/auth/passwd-verify.lua blocking=yes cache_key=%s:%u:%w\n  result_success = return-ok\n  result_failure = continue\n  result_internalfail = continue\n}\n# try a master passwd\npassdb {\n  driver = passwd-file\n  args = /etc/dovecot/dovecot-master.passwd\n  master = yes\n  skip = authenticated\n}\n# check for regular password - if empty (e.g. force-passwd-reset), previous pass=yes passdbs also fail\n# a return of the following passdb is mandatory\npassdb {\n  driver = lua\n  args = file=/etc/dovecot/auth/passwd-verify.lua blocking=yes\n}\n# Set doveadm_password=your-secret-password in data/conf/dovecot/extra.conf (create if missing)\nservice doveadm {\n  inet_listener {\n    port = 12345\n  }\n  vsz_limit=2048 MB\n}\n!include /etc/dovecot/dovecot.folders.conf\nprotocols = imap sieve lmtp pop3\nservice dict {\n  unix_listener dict {\n    mode = 0660\n    user = vmail\n    group = vmail\n  }\n}\nservice log {\n  user = dovenull\n}\nservice config {\n  unix_listener config {\n    user = root\n    group = vmail\n    mode = 0660\n  }\n}\nservice auth {\n  inet_listener auth-inet {\n    port = 10001\n  }\n  unix_listener auth-master {\n    mode = 0600\n    user = vmail\n  }\n  unix_listener auth-userdb {\n    mode = 0600\n    user = vmail\n  }\n  vsz_limit = 2G\n}\nservice managesieve-login {\n  inet_listener sieve {\n    port = 4190\n  }\n  inet_listener sieve_haproxy {\n    port = 14190\n    haproxy = yes\n  }\n  service_count = 1\n  process_min_avail = 2\n  vsz_limit = 1G\n}\nservice imap-login {\n  service_count = 1\n  process_min_avail = 2\n  process_limit = 10000\n  vsz_limit = 1G\n  user = dovenull\n  inet_listener imap_haproxy {\n    port = 10143\n    haproxy = yes\n  }\n  inet_listener imaps_haproxy {\n    port = 10993\n    ssl = yes\n    haproxy = yes\n  }\n}\nservice pop3-login {\n  service_count = 1\n  process_min_avail = 1\n  vsz_limit = 1G\n  inet_listener pop3_haproxy {\n    port = 10110\n    haproxy = yes\n  }\n  inet_listener pop3s_haproxy {\n    port = 10995\n    ssl = yes\n    haproxy = yes\n  }\n}\nservice imap {\n  executable = imap\n  user = vmail\n  vsz_limit = 1G\n}\nservice managesieve {\n  process_limit = 256\n}\nservice lmtp {\n  inet_listener lmtp-inet {\n    port = 24\n  }\n  user = vmail\n}\nlisten = *,[::]\nssl_cert = </etc/ssl/mail/cert.pem\nssl_key = </etc/ssl/mail/key.pem\nuserdb {\n  driver = passwd-file\n  args = /etc/dovecot/dovecot-master.userdb\n}\nuserdb {\n  args = /etc/dovecot/sql/dovecot-dict-sql-userdb.conf\n  driver = sql\n  skip = found\n}\nprotocol imap {\n  mail_plugins = </etc/dovecot/mail_plugins_imap\n  imap_metadata = yes\n}\nmail_attribute_dict = file:%h/dovecot-attributes\nprotocol lmtp {\n  mail_plugins = </etc/dovecot/mail_plugins_lmtp\n  auth_socket_path = /var/run/dovecot/auth-master\n}\nprotocol sieve {\n  managesieve_logout_format = bytes=%i/%o\n}\nplugin {\n  # Allow \"any\" or \"authenticated\" to be used in ACLs\n  acl_anyone = </etc/dovecot/acl_anyone\n  acl_shared_dict = file:/var/vmail/shared-mailboxes.db\n  acl = vfile\n  acl_user = %u\n  quota = dict:Userquota::proxy::sqlquota\n  quota_rule2 = Trash:storage=+100%%\n  sieve = /var/vmail/sieve/%u.sieve\n  sieve_plugins = sieve_imapsieve sieve_extprograms\n  sieve_vacation_send_from_recipient = yes\n  sieve_redirect_envelope_from = recipient\n  # From elsewhere to Spam folder\n  imapsieve_mailbox1_name = Junk\n  imapsieve_mailbox1_causes = COPY\n  imapsieve_mailbox1_before = file:/usr/lib/dovecot/sieve/report-spam.sieve\n  # END\n  # From Spam folder to elsewhere\n  imapsieve_mailbox2_name = *\n  imapsieve_mailbox2_from = Junk\n  imapsieve_mailbox2_causes = COPY\n  imapsieve_mailbox2_before = file:/usr/lib/dovecot/sieve/report-ham.sieve\n  # END\n  master_user = %u\n  quota_warning = storage=95%% quota-warning 95 %u\n  quota_warning2 = storage=80%% quota-warning 80 %u\n  sieve_pipe_bin_dir = /usr/lib/dovecot/sieve\n  sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.execute\n  sieve_extensions = +notify +imapflags +vacation-seconds +editheader\n  sieve_max_script_size = 1M\n  sieve_max_redirects = 100\n  sieve_max_actions = 101\n  sieve_quota_max_scripts = 0\n  sieve_quota_max_storage = 0\n  listescape_char = \"\\\\\"\n  sieve_vacation_min_period = 5s\n  sieve_vacation_max_period = 0\n  sieve_vacation_default_period = 60s\n  sieve_before = /var/vmail/sieve/global_sieve_before.sieve\n  sieve_before2 = dict:proxy::sieve_before;name=active;bindir=/var/vmail/sieve_before_bindir\n  sieve_after = dict:proxy::sieve_after;name=active;bindir=/var/vmail/sieve_after_bindir\n  sieve_after2 = /var/vmail/sieve/global_sieve_after.sieve\n  sieve_duplicate_default_period = 1m\n  sieve_duplicate_max_period = 7d\n\n  # -- Global keys\n  mail_crypt_global_private_key = </mail_crypt/ecprivkey.pem\n  mail_crypt_global_public_key = </mail_crypt/ecpubkey.pem\n  mail_crypt_save_version = 2\n\n  # Enable compression while saving, lz4 Dovecot v2.3.17+\n  zlib_save = lz4\n\n  mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename\n  mail_log_fields = uid box msgid size\n  mail_log_cached_only = yes\n\n  # Try set mail_replica\n  !include_try /etc/dovecot/mail_replica.conf\n}\nservice quota-warning {\n  executable = script /usr/local/bin/quota_notify.py\n  # use some unprivileged user for executing the quota warnings\n  user = vmail\n  unix_listener quota-warning {\n    user = vmail\n  }\n}\ndict {\n  sqlquota = mysql:/etc/dovecot/sql/dovecot-dict-sql-quota.conf\n  sieve_after = mysql:/etc/dovecot/sql/dovecot-dict-sql-sieve_after.conf\n  sieve_before = mysql:/etc/dovecot/sql/dovecot-dict-sql-sieve_before.conf\n}\nremote 127.0.0.1 {\n  disable_plaintext_auth = no\n}\nsubmission_host = postfix:588\nmail_max_userip_connections = 500\nservice stats {\n  unix_listener stats-writer {\n    mode = 0660\n    user = vmail\n  }\n}\nimap_max_line_length = 2 M\nauth_cache_verify_password_with_worker = yes\nauth_cache_negative_ttl = 60s\nauth_cache_ttl = 300s\nauth_cache_size = 10M\nauth_verbose_passwords = sha1:6\nservice replicator {\n  process_min_avail = 1\n}\nservice aggregator {\n  fifo_listener replication-notify-fifo {\n    user = vmail\n  }\n  unix_listener replication-notify {\n    user = vmail\n  }\n}\nservice replicator {\n  unix_listener replicator-doveadm {\n    mode = 0666\n  }\n}\nreplication_max_conns = 10\ndoveadm_port = 12345\nreplication_dsync_parameters = -d -l 30 -U -n INBOX\n# <Includes>\n!include_try /etc/dovecot/sni.conf\n!include_try /etc/dovecot/sogo_trusted_ip.conf\n!include_try /etc/dovecot/extra.conf\n!include_try /etc/dovecot/shared_namespace.conf\n!include_try /etc/dovecot/conf.d/fts.conf\n# </Includes>\ndefault_client_limit = 10400\ndefault_vsz_limit = 1024 M\n"
  },
  {
    "path": "data/conf/dovecot/dovecot.folders.conf",
    "content": "namespace inbox {\r\n  inbox = yes\r\n  location =\r\n  separator = /\r\n  mailbox \"Trash\" {\r\n    auto = subscribe\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Deleted Messages\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Deleted Items\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Rubbish\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Gelöschte Objekte\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Gelöschte Elemente\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Papierkorb\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Itens Excluidos\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Itens Excluídos\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Lixeira\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Prullenbak\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Odstránené položky\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Koš\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Verwijderde items\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Удаленные\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Удаленные элементы\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Корзина\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Видалені\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Видалені елементи\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Кошик\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"废件箱\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"已删除消息\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"已删除邮件\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Archive\" {\r\n    auto = subscribe\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Archiv\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Archives\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Arquivo\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Arquivos\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Archief\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Archív\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Archivovať\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"归档\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Архив\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Архів\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Sent\" {\r\n    auto = subscribe\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Sent Messages\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Sent Items\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"已发送\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"已发送消息\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"已发送邮件\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Отправленные\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Отправленные элементы\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Надіслані\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Надіслані елементи\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Gesendet\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Gesendete Objekte\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Gesendete Elemente\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Itens Enviados\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Enviados\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Verzonden items\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Verzonden\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Odoslaná pošta\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Odoslané\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Drafts\" {\r\n    auto = subscribe\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Entwürfe\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Rascunhos\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Concepten\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Koncepty\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"草稿\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"草稿箱\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Черновики\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Чернетки\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Junk\" {\r\n    auto = subscribe\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Junk-E-Mail\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Junk E-Mail\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Spam\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Lixo Eletrônico\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Nevyžiadaná pošta\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Infikované položky\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Ongewenste e-mail\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"垃圾\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"垃圾箱\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Нежелательная почта\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Спам\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Небажана пошта\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Koncepty\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Nevyžádaná pošta\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Odstraněná pošta\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Odeslaná pošta\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Skräp\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Borttagna Meddelanden\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Arkiv\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Arkeverat\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Skickat\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Skickade Meddelanden\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Utkast\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Skraldespand\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Slettet mails\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Arkiv\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Arkiveret mails\" {\r\n    special_use = \\Archive\r\n  }\r\n  mailbox \"Sendt\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Sendte mails\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Udkast\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Kladde\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Πρόχειρα\" {\r\n    special_use = \\Drafts\r\n  }\r\n  mailbox \"Απεσταλμένα\" {\r\n    special_use = \\Sent\r\n  }\r\n  mailbox \"Κάδος απορριμάτων\" {\r\n    special_use = \\Trash\r\n  }\r\n  mailbox \"Ανεπιθύμητα\" {\r\n    special_use = \\Junk\r\n  }\r\n  mailbox \"Αρχειοθετημένα\" {\r\n    special_use = \\Archive\r\n  }\r\n  prefix =\r\n}\r\n"
  },
  {
    "path": "data/conf/dovecot/ldap/passdb.conf",
    "content": "#hosts = 1.2.3.4\n#dn = cn=admin,dc=example,dc=local\n#dnpass = password\n#ldap_version = 3\n#base = ou=People,dc=example,dc=local\n#auth_bind = no\n#pass_filter = (&(objectClass=posixAccount)(mail=%u))\n#pass_attrs = mail=user,userPassword=password\n#default_pass_scheme = SSHA\n"
  },
  {
    "path": "data/conf/mysql/my.cnf",
    "content": "[mysqld]\ncharacter-set-client-handshake = FALSE\ncharacter-set-server           = utf8mb4\ncollation-server               = utf8mb4_general_ci\n#innodb_file_per_table          = TRUE\n#innodb_file_format             = barracuda\n#innodb_large_prefix            = TRUE\n#sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\nmax_allowed_packet      = 192M\nmax-connections         = 550\nkey_buffer_size         = 0\nread_buffer_size        = 192K\nsort_buffer_size        = 2M\ninnodb_buffer_pool_size = 24M\nread_rnd_buffer_size    = 256K\ntmp_table_size          = 24M\nperformance_schema      = 0\ninnodb-strict-mode      = 0\nthread_cache_size       = 8\nquery_cache_type        = 0\nquery_cache_size        = 0\nmax_heap_table_size     = 48M\nthread_stack            = 256K\nskip-host-cache\nskip-name-resolve\nlog-warnings            = 0\nevent_scheduler         = 1\ninteractive_timeout     = 3610\nwait_timeout            = 3610\n\n[client]\ndefault-character-set = utf8mb4\n\n[mysql]\ndefault-character-set = utf8mb4\n"
  },
  {
    "path": "data/conf/nginx/templates/nginx.conf.j2",
    "content": "user  nginx;\nworker_processes  auto;\n\nerror_log  /var/log/nginx/error.log notice;\npid        /var/run/nginx.pid;\n\n\nevents {\n    worker_connections  1024;\n}\n\n\nhttp {\n    include /etc/nginx/mime.types;\n    default_type  application/octet-stream;\n    server_tokens off;\n\n    log_format  main  '$remote_addr - $remote_user [$time_local] \"$request\" '\n                      '$status $body_bytes_sent \"$http_referer\" '\n                      '\"$http_user_agent\" \"$http_x_forwarded_for\"';\n\n    access_log  /var/log/nginx/access.log  main;\n\n    sendfile        on;\n    #tcp_nopush     on;\n\n    keepalive_timeout  65;\n\n    #gzip  on;\n\n    # map-size.conf:\n    map_hash_max_size 256;\n    map_hash_bucket_size 256;\n\n    # site.conf:\n    proxy_cache_path /tmp levels=1:2 keys_zone=sogo:10m inactive=24h  max_size=1g;\n    server_names_hash_max_size 512;\n    server_names_hash_bucket_size 128;\n\n    map $http_x_forwarded_proto $client_req_scheme {\n        default $scheme;\n        https https;\n    }\n\n    {% if HTTP_REDIRECT %}\n    # HTTP to HTTPS redirect\n    server {\n        root /web;\n        listen {{ HTTP_PORT }} default_server;\n        listen [::]:{{ HTTP_PORT }} default_server;\n\n        server_name {{ MAILCOW_HOSTNAME }} autodiscover.* autoconfig.* mta-sts.* {{ ADDITIONAL_SERVER_NAMES | join(' ') }};\n\n        if ( $request_uri ~* \"%0A|%0D\" ) { return 403; }\n        location ^~ /.well-known/acme-challenge/ {\n            allow all;\n            default_type \"text/plain\";\n        }\n        location ^~ /.well-known/mta-sts.txt {\n            allow all;\n            fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n            fastcgi_pass {{ PHPFPMHOST }}:9002;\n            include /etc/nginx/fastcgi_params;\n            fastcgi_param SCRIPT_FILENAME $document_root/mta-sts.php;\n            fastcgi_param PATH_INFO $fastcgi_path_info;\n        }\n        location / {\n            return 301 https://$host$uri$is_args$args;\n        }\n    }\n    {%endif%}\n\n    # Default Server Name\n    server {\n        listen 127.0.0.1:65510; # sogo-auth verify internal\n\n        {% if not HTTP_REDIRECT %}\n        listen {{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};\n        {%endif%}\n        listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;\n\n        {% if ENABLE_IPV6 %}\n        {% if not HTTP_REDIRECT %}\n        listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};\n        {%endif%}\n        listen [::]:{{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;\n        {%endif%}\n\n        http2 on;\n\n        ssl_certificate /etc/ssl/mail/cert.pem;\n        ssl_certificate_key /etc/ssl/mail/key.pem;\n\n        server_name {{ MAILCOW_HOSTNAME }} autodiscover.* autoconfig.* mta-sts.*;\n\n        include /etc/nginx/includes/sites-default.conf;\n    }\n\n    # Additional Server Names\n    {% for SERVER_NAME in ADDITIONAL_SERVER_NAMES %}\n    server {\n        listen 127.0.0.1:65510; # sogo-auth verify internal\n\n        {% if not HTTP_REDIRECT %}\n        listen {{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};\n        {%endif%}\n        listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;\n\n        {% if ENABLE_IPV6 %}\n        {% if not HTTP_REDIRECT %}\n        listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};\n        {%endif%}\n        listen [::]:{{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;\n        {%endif%}\n\n        http2 on;\n\n        ssl_certificate /etc/ssl/mail/cert.pem;\n        ssl_certificate_key /etc/ssl/mail/key.pem;\n\n        server_name {{ SERVER_NAME }};\n\n        include /etc/nginx/includes/sites-default.conf;\n    }\n    {% endfor %}\n\n    # rspamd dynmaps:\n    server {\n        listen 8081;\n        {% if ENABLE_IPV6 %}\n        listen [::]:8081;\n        {%endif%}\n        index index.php index.html;\n        server_name _;\n        error_log  /var/log/nginx/error.log;\n        access_log /var/log/nginx/access.log;\n        root /dynmaps;\n\n        location ~ \\.php$ {\n            try_files $uri =404;\n            fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n            fastcgi_pass {{ PHPFPMHOST }}:9001;\n            fastcgi_index index.php;\n            include fastcgi_params;\n            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n            fastcgi_param PATH_INFO $fastcgi_path_info;\n        }\n    }\n\n    # rspamd meta_exporter:\n    server {\n        listen 9081;\n        index index.php index.html;\n        server_name _;\n        error_log  /var/log/nginx/error.log;\n        access_log /var/log/nginx/access.log;\n        root /meta_exporter;\n        client_max_body_size 10M;\n        location ~ \\.php$ {\n            client_max_body_size 10M;\n            try_files $uri =404;\n            fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n            fastcgi_pass {{ PHPFPMHOST }}:9001;\n            fastcgi_index pipe.php;\n            include fastcgi_params;\n            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n            fastcgi_param PATH_INFO $fastcgi_path_info;\n        }\n    }\n\n    server {\n        listen 9082 ssl http2;\n\n        ssl_certificate /etc/ssl/mail/cert.pem;\n        ssl_certificate_key /etc/ssl/mail/key.pem;\n\n        index mailcowauth.php;\n        server_name _;\n        error_log  /var/log/nginx/error.log;\n        access_log /var/log/nginx/access.log;\n        root /mailcowauth;\n        client_max_body_size 10M;\n        location ~ \\.php$ {\n            client_max_body_size 10M;\n            try_files $uri =404;\n            fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n            fastcgi_pass phpfpm:9001;\n            include fastcgi_params;\n            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n            fastcgi_param PATH_INFO $fastcgi_path_info;\n        }\n    }\n\n    include /etc/nginx/conf.d/*.conf;\n\n    {% for cert in valid_cert_dirs %}\n    server {\n        {% if not HTTP_REDIRECT %}\n        listen {{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};\n        {%endif%}\n        listen {{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;\n\n        {% if ENABLE_IPV6 %}\n        {% if not HTTP_REDIRECT %}\n        listen [::]:{{ HTTP_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%};\n        {%endif%}\n        listen [::]:{{ HTTPS_PORT }}{% if NGINX_USE_PROXY_PROTOCOL %} proxy_protocol{%endif%} ssl;\n        {%endif%}\n\n        http2 on;\n\n        ssl_certificate {{ cert.cert_path }}cert.pem;\n        ssl_certificate_key {{ cert.cert_path }}key.pem;\n\n        server_name {{ cert.domains }};\n\n        include /etc/nginx/includes/sites-default.conf;\n    }\n    {% endfor %}\n}\n"
  },
  {
    "path": "data/conf/nginx/templates/sites-default.conf.j2",
    "content": "include /etc/nginx/mime.types;\ncharset utf-8;\noverride_charset on;\n\nserver_tokens off;\n\nssl_protocols TLSv1.2 TLSv1.3;\nssl_prefer_server_ciphers on;\nssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;\nssl_ecdh_curve X25519:X448:secp384r1:secp256k1;\nssl_session_cache shared:SSL:50m;\nssl_session_timeout 1d;\nssl_session_tickets off;\n\nadd_header Strict-Transport-Security \"max-age=15768000;\";\nadd_header X-Content-Type-Options nosniff;\nadd_header X-Robots-Tag none;\nadd_header X-Download-Options noopen;\nadd_header X-Frame-Options \"SAMEORIGIN\" always;\nadd_header X-Permitted-Cross-Domain-Policies none;\nadd_header Referrer-Policy strict-origin;\n\nindex index.php index.html;\n\nclient_max_body_size 0;\n\ngzip on;\ngzip_disable \"msie6\";\n\ngzip_vary on;\ngzip_proxied off;\ngzip_comp_level 6;\ngzip_buffers 16 8k;\ngzip_http_version 1.1;\ngzip_min_length 256;\ngzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;\n\nlocation ~ ^/(fonts|js|css|img)/ {\n    expires max;\n    add_header Cache-Control public;\n}\n\nerror_log  /var/log/nginx/error.log;\naccess_log /var/log/nginx/access.log;\nfastcgi_hide_header X-Powered-By;\nabsolute_redirect off;\nroot /web;\n\n# If behind reverse proxy, forwards the correct IP\nset_real_ip_from 10.0.0.0/8;\nset_real_ip_from 172.16.0.0/12;\nset_real_ip_from 192.168.0.0/16;\nset_real_ip_from fc00::/7;\n{% for TRUSTED_PROXY in TRUSTED_PROXIES %}\nset_real_ip_from {{ TRUSTED_PROXY }};\n{% endfor %}\n{% if not NGINX_USE_PROXY_PROTOCOL %}\nreal_ip_header X-Forwarded-For;\n{% else %}\nreal_ip_header proxy_protocol;\n{% endif %}\nreal_ip_recursive on;\n\n\nlocation @strip-ext {\n    rewrite ^(.*)$ $1.php last;\n}\n\nlocation ^~ /inc/lib/ {\n    deny all;\n    return 403;\n}\n\nlocation ^~ /.well-known/acme-challenge/ {\n    allow all;\n    default_type \"text/plain\";\n}\nlocation ^~ /.well-known/mta-sts.txt {\n    allow all;\n    fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n    fastcgi_pass {{ PHPFPMHOST }}:9002;\n    include /etc/nginx/fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root/mta-sts.php;\n    fastcgi_param PATH_INFO $fastcgi_path_info;\n}\n\nrewrite ^/.well-known/caldav$ /SOGo/dav/ permanent;\nrewrite ^/.well-known/carddav$ /SOGo/dav/ permanent;\n\n\nlocation / {\n    try_files $uri $uri/ @strip-ext;\n}\n\nlocation /qhandler {\n    rewrite ^/qhandler/(.*)/(.*) /qhandler.php?action=$1&hash=$2;\n}\n\nlocation /edit {\n    rewrite ^/edit/(.*)/(.*) /edit.php?$1=$2;\n}\n\nlocation ~ ^/api/v1/(.*)$ {\n    try_files $uri $uri/ /json_api.php?query=$1&$args;\n}\n\nlocation ~ ^/cache/(.*)$ {\n    try_files $uri $uri/ /resource.php?file=$1;\n}\n\nlocation ~ \\.php$ {\n    try_files $uri =404;\n    fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n    fastcgi_pass {{ PHPFPMHOST }}:9002;\n    fastcgi_index index.php;\n    include /etc/nginx/fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    fastcgi_param PATH_INFO $fastcgi_path_info;\n    fastcgi_read_timeout 3600;\n    fastcgi_send_timeout 3600;\n}\n\nlocation ~* ^/Autodiscover/Autodiscover.xml {\n    fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n    fastcgi_pass {{ PHPFPMHOST }}:9002;\n    include /etc/nginx/fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    try_files /autodiscover.php =404;\n}\n\nlocation ~* ^/Autodiscover/Autodiscover.json {\n    fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n    fastcgi_pass {{ PHPFPMHOST }}:9002;\n    include /etc/nginx/fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    try_files /autodiscover-json.php =404;\n}\n\nlocation ~ /(?:m|M)ail/(?:c|C)onfig-v1.1.xml {\n    fastcgi_split_path_info ^(.+\\.php)(/.+)$;\n    fastcgi_pass {{ PHPFPMHOST }}:9002;\n    include /etc/nginx/fastcgi_params;\n    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n    try_files /autoconfig.php =404;\n}\n\n{% if not SKIP_RSPAMD %}\nlocation /rspamd/ {\n    location /rspamd/auth {\n      # proxy_pass is not inherited\n      proxy_pass       http://{{ RSPAMDHOST }}:11334/auth;\n      proxy_intercept_errors on;\n      proxy_set_header Host      $http_host;\n      proxy_set_header X-Forwarded-For {% if not NGINX_USE_PROXY_PROTOCOL %}$proxy_add_x_forwarded_for{% else %}$proxy_protocol_addr{%endif%};\n      proxy_set_header X-Real-IP {% if not NGINX_USE_PROXY_PROTOCOL %}$remote_addr{% else %}$proxy_protocol_addr{%endif%};\n      proxy_redirect off;\n      error_page 401 /_rspamderror.php;\n    }\n\n    proxy_pass       http://{{ RSPAMDHOST }}:11334/;\n    proxy_set_header Host      $http_host;\n    proxy_set_header X-Forwarded-For {% if not NGINX_USE_PROXY_PROTOCOL %}$proxy_add_x_forwarded_for{% else %}$proxy_protocol_addr{%endif%};\n    proxy_set_header X-Real-IP {% if not NGINX_USE_PROXY_PROTOCOL %}$remote_addr{% else %}$proxy_protocol_addr{%endif%};\n    proxy_redirect off;\n}\n{% endif %}\n\n{% if not SKIP_SOGO %}\nlocation ^~ /principals {\n    return 301 /SOGo/dav;\n}\n\nlocation /sogo-auth-verify {\n    internal;\n    proxy_set_header  X-Original-URI $request_uri;\n    proxy_set_header  X-Real-IP $remote_addr;\n    proxy_set_header  Host $http_host;\n    proxy_set_header  Content-Length \"\";\n    proxy_pass        http://127.0.0.1:65510/sogo-auth;\n    proxy_pass_request_body off;\n}\n\nlocation ^~ /Microsoft-Server-ActiveSync {\n    auth_request /sogo-auth-verify;\n    auth_request_set $user $upstream_http_x_user;\n    auth_request_set $auth $upstream_http_x_auth;\n    auth_request_set $auth_type $upstream_http_x_auth_type;\n    proxy_set_header x-webobjects-remote-user \"$user\";\n    proxy_set_header Authorization \"$auth\";\n    proxy_set_header x-webobjects-auth-type \"$auth_type\";\n\n    proxy_pass http://{{ SOGOHOST }}:20000/SOGo/Microsoft-Server-ActiveSync;\n\n    proxy_set_header X-Forwarded-For {% if not NGINX_USE_PROXY_PROTOCOL %}$proxy_add_x_forwarded_for{% else %}$proxy_protocol_addr{%endif%};\n    proxy_set_header X-Real-IP {% if not NGINX_USE_PROXY_PROTOCOL %}$remote_addr{% else %}$proxy_protocol_addr{%endif%};\n    proxy_connect_timeout 75;\n    proxy_send_timeout 3600;\n    proxy_read_timeout 3600;\n    proxy_buffer_size 128k;\n    proxy_buffers 64 512k;\n    proxy_busy_buffers_size 512k;\n    proxy_set_header Host $http_host;\n    client_body_buffer_size 512k;\n    client_max_body_size 0;\n}\n\nlocation ^~ /SOGo {\n    location ~* ^/SOGo/so/.*\\.(xml|js|html|xhtml)$ {\n        auth_request /sogo-auth-verify;\n        auth_request_set $user $upstream_http_x_user;\n        auth_request_set $auth $upstream_http_x_auth;\n        auth_request_set $auth_type $upstream_http_x_auth_type;\n        proxy_set_header x-webobjects-remote-user \"$user\";\n        proxy_set_header Authorization \"$auth\";\n        proxy_set_header x-webobjects-auth-type \"$auth_type\";\n\n        proxy_pass http://{{ SOGOHOST }}:20000;\n\n        proxy_set_header X-Forwarded-For {% if not NGINX_USE_PROXY_PROTOCOL %}$proxy_add_x_forwarded_for{% else %}$proxy_protocol_addr{%endif%};\n        proxy_set_header X-Real-IP {% if not NGINX_USE_PROXY_PROTOCOL %}$remote_addr{% else %}$proxy_protocol_addr{%endif%};\n        proxy_set_header Host $http_host;\n        proxy_set_header x-webobjects-server-protocol HTTP/1.0;\n        proxy_set_header x-webobjects-remote-host $remote_addr;\n        proxy_set_header x-webobjects-server-name $server_name;\n        proxy_set_header x-webobjects-server-url $client_req_scheme://$http_host;\n        proxy_set_header x-webobjects-server-port $server_port;\n        proxy_hide_header Content-Type;\n        add_header Content-Type text/plain;\n        break;\n    }\n    auth_request /sogo-auth-verify;\n    auth_request_set $user $upstream_http_x_user;\n    auth_request_set $auth $upstream_http_x_auth;\n    auth_request_set $auth_type $upstream_http_x_auth_type;\n    proxy_set_header x-webobjects-remote-user \"$user\";\n    proxy_set_header Authorization \"$auth\";\n    proxy_set_header x-webobjects-auth-type \"$auth_type\";\n\n    proxy_pass http://{{ SOGOHOST }}:20000;\n\n    proxy_set_header X-Forwarded-For {% if not NGINX_USE_PROXY_PROTOCOL %}$proxy_add_x_forwarded_for{% else %}$proxy_protocol_addr{%endif%};\n    proxy_set_header X-Real-IP {% if not NGINX_USE_PROXY_PROTOCOL %}$remote_addr{% else %}$proxy_protocol_addr{%endif%};\n    proxy_set_header Host $http_host;\n    proxy_set_header x-webobjects-server-protocol HTTP/1.0;\n    proxy_set_header x-webobjects-remote-host $remote_addr;\n    proxy_set_header x-webobjects-server-name $server_name;\n    proxy_set_header x-webobjects-server-url $client_req_scheme://$http_host;\n    proxy_set_header x-webobjects-server-port $server_port;\n    proxy_buffer_size 128k;\n    proxy_buffers 64 512k;\n    proxy_busy_buffers_size 512k;\n    proxy_send_timeout 3600;\n    proxy_read_timeout 3600;\n    client_body_buffer_size 128k;\n    client_max_body_size 0;\n    break;\n}\n\nlocation ~* /sogo$ {\n    return 301 $client_req_scheme://$http_host/SOGo;\n}\n\nlocation /SOGo.woa/WebServerResources/ {\n    alias /usr/local/lib/GNUstep/SOGo/WebServerResources/;\n}\n\nlocation /.woa/WebServerResources/ {\n    alias /usr/local/lib/GNUstep/SOGo/WebServerResources/;\n}\n\nlocation /SOGo/WebServerResources/ {\n    alias /usr/local/lib/GNUstep/SOGo/WebServerResources/;\n}\n\nlocation (^/SOGo/so/ControlPanel/Products/[^/]*UI/Resources/.*\\.(jpg|png|gif|css|js)$) {\n    alias /usr/local/lib/GNUstep/SOGo/$1.SOGo/Resources/$2;\n}\n{% endif %}\n\n\ninclude /etc/nginx/conf.d/site.*.custom;\n\nerror_page 502 @awaitingupstream;\n\nlocation @awaitingupstream {\n    rewrite ^(.*)$ /_status.502.html break;\n}\n\nlocation ~* \\.php$ {\n    return 404;\n}\nlocation ~* \\.twig$ {\n    return 404;\n}\n"
  },
  {
    "path": "data/conf/phpfpm/crons/keycloak-sync.php",
    "content": "<?php\n\nrequire_once(__DIR__ . '/../web/inc/vars.inc.php');\nif (file_exists(__DIR__ . '/../web/inc/vars.local.inc.php')) {\n  include_once(__DIR__ . '/../web/inc/vars.local.inc.php');\n}\nrequire_once __DIR__ . '/../web/inc/lib/vendor/autoload.php';\n\n// Init database\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\n$opt = [\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n    PDO::ATTR_EMULATE_PREPARES   => false,\n];\ntry {\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\n}\ncatch (PDOException $e) {\n  logMsg(\"err\", $e->getMessage());\n  session_destroy();\n  exit;\n}\n\n// Init Redis\n$redis = new Redis();\ntry {\n  if (!empty(getenv('REDIS_SLAVEOF_IP'))) {\n    $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));\n  }\n  else {\n    $redis->connect('redis-mailcow', 6379);\n  }\n  $redis->auth(getenv(\"REDISPASS\"));\n}\ncatch (Exception $e) {\n  echo \"Exiting: \" . $e->getMessage();\n  session_destroy();\n  exit;\n}\n\nfunction logMsg($priority, $message, $task = \"Keycloak Sync\") {\n  global $redis;\n\n  $finalMsg = array(\n    \"time\" => time(),\n    \"priority\" => $priority,\n    \"task\" => $task,\n    \"message\" => $message\n  );\n  $redis->lPush('CRON_LOG', json_encode($finalMsg));\n}\n\n// Load core functions first\nrequire_once __DIR__ . '/../web/inc/functions.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.auth.inc.php';\nrequire_once __DIR__ . '/../web/inc/sessions.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.mailbox.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.ratelimit.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.acl.inc.php';\n\n$_SESSION['mailcow_cc_username'] = \"admin\";\n$_SESSION['mailcow_cc_role'] = \"admin\";\n$_SESSION['acl']['tls_policy'] = \"1\";\n$_SESSION['acl']['quarantine_notification'] = \"1\";\n$_SESSION['acl']['quarantine_category'] = \"1\";\n$_SESSION['acl']['ratelimit'] = \"1\";\n$_SESSION['acl']['sogo_access'] = \"1\";\n$_SESSION['acl']['protocol_access'] = \"1\";\n$_SESSION['acl']['mailbox_relayhost'] = \"1\";\n$_SESSION['acl']['unlimited_quota'] = \"1\";\n\n$iam_settings = identity_provider('get');\nif ($iam_settings['authsource'] != \"keycloak\" || (intval($iam_settings['periodic_sync']) != 1 && intval($iam_settings['import_users']) != 1)) {\n  session_destroy();\n  exit;\n}\n\n// Set pagination variables\n$start = 0;\n$max = 100;\n\n// lock sync if already running\n$lock_file = '/tmp/iam-sync.lock';\nif (file_exists($lock_file)) {\n  $lock_file_parts = explode(\"\\n\", file_get_contents($lock_file));\n  $pid = $lock_file_parts[0];\n  if (count($lock_file_parts) > 1){\n    $last_execution = $lock_file_parts[1];\n    $elapsed_time = (time() - $last_execution) / 60;\n    if ($elapsed_time < intval($iam_settings['sync_interval'])) {\n      logMsg(\"warning\", \"Sync not ready (\".number_format((float)$elapsed_time, 2, '.', '').\"min / \".$iam_settings['sync_interval'].\"min)\");\n      session_destroy();\n      exit;\n    }\n  }\n\n  if (posix_kill($pid, 0)) {\n    logMsg(\"warning\", \"Sync is already running\");\n    session_destroy();\n    exit;\n  } else {\n    unlink($lock_file);\n  }\n}\n$lock_file_handle = fopen($lock_file, 'w');\nfwrite($lock_file_handle, getmypid());\nfclose($lock_file_handle);\n\n// Init Keycloak Provider\n$iam_provider = identity_provider('init');\n\n// Loop until all users have been retrieved\nwhile (true) {\n  // Get admin access token\n  $admin_token = identity_provider(\"get-keycloak-admin-token\");\n\n  // Make the API request to retrieve the users\n  $url = \"{$iam_settings['server_url']}/admin/realms/{$iam_settings['realm']}/users?first=$start&max=$max\";\n  $ch = curl_init();\n  curl_setopt($ch, CURLOPT_URL, $url);\n  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n  curl_setopt($ch, CURLOPT_HTTPHEADER, [\n    \"Content-Type: application/json\",\n    \"Authorization: Bearer \" . $admin_token\n  ]);\n  $response = curl_exec($ch);\n  $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n  curl_close($ch);\n\n  if ($code != 200){\n    logMsg(\"err\", \"Received HTTP {$code}\");\n    session_destroy();\n    exit;\n  }\n  try {\n    $response = json_decode($response, true);\n  } catch (Exception $e) {\n    logMsg(\"err\", $e->getMessage());\n    break;\n  }\n  if (!is_array($response)){\n    logMsg(\"err\", \"Received malformed response from keycloak api\");\n    break;\n  }\n  if (count($response) == 0) {\n    break;\n  }\n\n  // Process the batch of users\n  foreach ($response as $user) {\n    if (empty($user['email'])){\n      logMsg(\"warning\", \"No email address in keycloak found for user \" . $user['name']);\n      continue;\n    }\n\n    // try get mailbox user\n    $stmt = $pdo->prepare(\"SELECT\n      mailbox.*,\n      domain.active AS d_active\n      FROM `mailbox`\n      INNER JOIN domain on mailbox.domain = domain.domain\n      WHERE `kind` NOT REGEXP 'location|thing|group'\n        AND `username` = :user\");\n    $stmt->execute(array(':user' => $user['email']));\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\n\n    // check if matching attribute mapping exists\n    $user_template = $user['attributes']['mailcow_template'][0];\n    $mapper_key = array_search($user_template, $iam_settings['mappers']);\n\n    $_SESSION['access_all_exception'] = '1';\n    if (!$row && intval($iam_settings['import_users']) == 1){\n      if ($mapper_key === false){\n        if (!empty($iam_settings['default_template'])) {\n          $mbox_template = $iam_settings['default_template'];\n          logMsg(\"warning\", \"Using default template for user \" . $user['email']);\n        } else {\n          logMsg(\"warning\", \"No matching attribute mapping found for user \" . $user['email']);\n          continue;\n        }\n      } else {\n        $mbox_template = $iam_settings['templates'][$mapper_key];\n      }\n      // mailbox user does not exist, create...\n      logMsg(\"info\", \"Creating user \" . $user['email']);\n      $create_res = mailbox('add', 'mailbox_from_template', array(\n        'domain' => explode('@', $user['email'])[1],\n        'local_part' => explode('@', $user['email'])[0],\n        'name' => $user['firstName'] . \" \" . $user['lastName'],\n        'authsource' => 'keycloak',\n        'template' => $mbox_template\n      ));\n      if (!$create_res){\n        logMsg(\"err\", \"Could not create user \" . $user['email']);\n        continue;\n      }\n    } else if ($row && intval($iam_settings['periodic_sync']) == 1 && $row['authsource'] == \"keycloak\") {\n      if ($mapper_key === false){\n        logMsg(\"warning\", \"No matching attribute mapping found for user \" . $user['email']);\n        continue;\n      }\n      $mbox_template = $iam_settings['templates'][$mapper_key];\n      // mailbox user does exist, sync attribtues...\n      logMsg(\"info\", \"Syncing attributes for user \" . $user['email']);\n      mailbox('edit', 'mailbox_from_template', array(\n        'username' => $user['email'],\n        'name' => $user['firstName'] . \" \" . $user['lastName'],\n        'template' => $mbox_template\n      ));\n    } else {\n      // skip mailbox user\n      logMsg(\"info\", \"Skipping user \" . $user['email']);\n    }\n    $_SESSION['access_all_exception'] = '0';\n\n    sleep(0.025);\n  }\n\n  // Update the pagination variables for the next batch\n  $start += $max;\n  sleep(1);\n}\n\nlogMsg(\"info\", \"DONE!\");\n// add last execution time to lock file\n$lock_file_handle = fopen($lock_file, 'w');\nfwrite($lock_file_handle, getmypid() . \"\\n\" . time());\nfclose($lock_file_handle);\nsession_destroy();\n"
  },
  {
    "path": "data/conf/phpfpm/crons/ldap-sync.php",
    "content": "<?php\n\nrequire_once(__DIR__ . '/../web/inc/vars.inc.php');\nif (file_exists(__DIR__ . '/../web/inc/vars.local.inc.php')) {\n  include_once(__DIR__ . '/../web/inc/vars.local.inc.php');\n}\nrequire_once __DIR__ . '/../web/inc/lib/vendor/autoload.php';\n\n// Init database\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\n$opt = [\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n    PDO::ATTR_EMULATE_PREPARES   => false,\n];\ntry {\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\n}\ncatch (PDOException $e) {\n  logMsg(\"err\", $e->getMessage());\n  session_destroy();\n  exit;\n}\n\n// Init Redis\n$redis = new Redis();\ntry {\n  if (!empty(getenv('REDIS_SLAVEOF_IP'))) {\n    $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));\n  }\n  else {\n    $redis->connect('redis-mailcow', 6379);\n  }\n  $redis->auth(getenv(\"REDISPASS\"));\n}\ncatch (Exception $e) {\n  echo \"Exiting: \" . $e->getMessage();\n  session_destroy();\n  exit;\n}\n\nfunction logMsg($priority, $message, $task = \"LDAP Sync\") {\n  global $redis;\n\n  $finalMsg = array(\n    \"time\" => time(),\n    \"priority\" => $priority,\n    \"task\" => $task,\n    \"message\" => $message\n  );\n  $redis->lPush('CRON_LOG', json_encode($finalMsg));\n}\n\n// Load core functions first\nrequire_once __DIR__ . '/../web/inc/functions.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.auth.inc.php';\nrequire_once __DIR__ . '/../web/inc/sessions.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.mailbox.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.ratelimit.inc.php';\nrequire_once __DIR__ . '/../web/inc/functions.acl.inc.php';\n\n$_SESSION['mailcow_cc_username'] = \"admin\";\n$_SESSION['mailcow_cc_role'] = \"admin\";\n$_SESSION['acl']['tls_policy'] = \"1\";\n$_SESSION['acl']['quarantine_notification'] = \"1\";\n$_SESSION['acl']['quarantine_category'] = \"1\";\n$_SESSION['acl']['ratelimit'] = \"1\";\n$_SESSION['acl']['sogo_access'] = \"1\";\n$_SESSION['acl']['protocol_access'] = \"1\";\n$_SESSION['acl']['mailbox_relayhost'] = \"1\";\n$_SESSION['acl']['unlimited_quota'] = \"1\";\n\n$iam_settings = identity_provider('get');\nif ($iam_settings['authsource'] != \"ldap\" || (intval($iam_settings['periodic_sync']) != 1 && intval($iam_settings['import_users']) != 1)) {\n  session_destroy();\n  exit;\n}\n\n// Set pagination variables\n$start = 0;\n$max = 100;\n\n// lock sync if already running\n$lock_file = '/tmp/iam-sync.lock';\nif (file_exists($lock_file)) {\n  $lock_file_parts = explode(\"\\n\", file_get_contents($lock_file));\n  $pid = $lock_file_parts[0];\n  if (count($lock_file_parts) > 1){\n    $last_execution = $lock_file_parts[1];\n    $elapsed_time = (time() - $last_execution) / 60;\n    if ($elapsed_time < intval($iam_settings['sync_interval'])) {\n      logMsg(\"warning\", \"Sync not ready (\".number_format((float)$elapsed_time, 2, '.', '').\"min / \".$iam_settings['sync_interval'].\"min)\");\n      session_destroy();\n      exit;\n    }\n  }\n\n  if (posix_kill($pid, 0)) {\n    logMsg(\"warning\", \"Sync is already running\");\n    session_destroy();\n    exit;\n  } else {\n    unlink($lock_file);\n  }\n}\n$lock_file_handle = fopen($lock_file, 'w');\nfwrite($lock_file_handle, getmypid());\nfclose($lock_file_handle);\n\n// Init Provider\n$iam_provider = identity_provider('init');\n\n// Get ldap users\n$ldap_query = $iam_provider->query();\nif (!empty($iam_settings['filter'])) {\n  $ldap_query = $ldap_query->rawFilter($iam_settings['filter']);\n}\n$response = $ldap_query->where($iam_settings['username_field'], \"*\")\n  ->where($iam_settings['attribute_field'], \"*\")\n  ->select([$iam_settings['username_field'], $iam_settings['attribute_field'], 'displayname'])\n  ->paginate($max);\n\n// Process the users\nforeach ($response as $user) {\n  // try get mailbox user\n  $stmt = $pdo->prepare(\"SELECT\n    mailbox.*,\n    domain.active AS d_active\n    FROM `mailbox`\n    INNER JOIN domain on mailbox.domain = domain.domain\n    WHERE `kind` NOT REGEXP 'location|thing|group'\n      AND `username` = :user\");\n  $stmt->execute(array(':user' => $user[$iam_settings['username_field']][0]));\n  $row = $stmt->fetch(PDO::FETCH_ASSOC);\n\n  // check if matching attribute mapping exists\n  $user_template = $user[$iam_settings['attribute_field']][0];\n  $mapper_key = array_search($user_template, $iam_settings['mappers']);\n\n  if (empty($user[$iam_settings['username_field']][0])){\n    logMsg(\"warning\", \"Skipping user \" . $user['displayname'][0] . \" due to empty LDAP \". $iam_settings['username_field'] . \" property.\");\n    continue;\n  }\n\n  $_SESSION['access_all_exception'] = '1';\n  if (!$row && intval($iam_settings['import_users']) == 1){\n    if ($mapper_key === false){\n      if (!empty($iam_settings['default_template'])) {\n        $mbox_template = $iam_settings['default_template'];\n      } else {\n        logMsg(\"warning\", \"No matching attribute mapping found for user \" . $user[$iam_settings['username_field']][0]);\n        continue;\n      }\n    } else {\n      $mbox_template = $iam_settings['templates'][$mapper_key];\n    }\n    // mailbox user does not exist, create...\n    logMsg(\"info\", \"Creating user \" .  $user[$iam_settings['username_field']][0]);\n    $create_res = mailbox('add', 'mailbox_from_template', array(\n      'domain' => explode('@',  $user[$iam_settings['username_field']][0])[1],\n      'local_part' => explode('@',  $user[$iam_settings['username_field']][0])[0],\n      'name' => $user['displayname'][0],\n      'authsource' => 'ldap',\n      'template' => $mbox_template\n    ));\n    if (!$create_res){\n      logMsg(\"err\", \"Could not create user \" . $user[$iam_settings['username_field']][0]);\n      continue;\n    }\n  } else if ($row && intval($iam_settings['periodic_sync']) == 1 && $row['authsource'] == \"ldap\") {\n    if ($mapper_key === false){\n      logMsg(\"warning\", \"No matching attribute mapping found for user \" . $user[$iam_settings['username_field']][0]);\n      continue;\n    }\n    $mbox_template = $iam_settings['templates'][$mapper_key];\n    // mailbox user does exist, sync attribtues...\n    logMsg(\"info\", \"Syncing attributes for user \" . $user[$iam_settings['username_field']][0]);\n    mailbox('edit', 'mailbox_from_template', array(\n      'username' =>  $user[$iam_settings['username_field']][0],\n      'name' => $user['displayname'][0],\n      'template' => $mbox_template\n    ));\n  } else {\n    // skip mailbox user\n    logMsg(\"info\", \"Skipping user \" .  $user[$iam_settings['username_field']][0]);\n  }\n  $_SESSION['access_all_exception'] = '0';\n\n  sleep(0.025);\n}\n\nlogMsg(\"info\", \"DONE!\");\n// add last execution time to lock file\n$lock_file_handle = fopen($lock_file, 'w');\nfwrite($lock_file_handle, getmypid() . \"\\n\" . time());\nfclose($lock_file_handle);\nsession_destroy();\n"
  },
  {
    "path": "data/conf/phpfpm/php-conf.d/opcache-recommended.ini",
    "content": "; NOTE: Restart phpfpm on ANY manual changes to PHP files!\n\n; opcache\nopcache.enable=1\nopcache.enable_cli=1\nopcache.interned_strings_buffer=16\nopcache.max_accelerated_files=10000\nopcache.memory_consumption=128\nopcache.save_comments=1\nopcache.validate_timestamps=0\n\n; JIT\n; Disabled for now due to some PHP segmentation faults observed\n; in certain environments. Possibly some PHP or PHP extension bug.\nopcache.jit=disable\nopcache.jit_buffer_size=0\n"
  },
  {
    "path": "data/conf/phpfpm/php-conf.d/other.ini",
    "content": "max_execution_time = 3600\nmax_input_time = 3600\nmemory_limit = 512M\n"
  },
  {
    "path": "data/conf/phpfpm/php-conf.d/upload.ini",
    "content": "file_uploads = On\nupload_max_filesize = 64M\npost_max_size = 64M\n"
  },
  {
    "path": "data/conf/phpfpm/php-fpm.d/pools.conf",
    "content": "[system-worker]\nuser = www-data\ngroup = www-data\npm = dynamic\npm.max_children = 15\npm.start_servers = 2\npm.min_spare_servers = 2\npm.max_spare_servers = 4\nlisten = [::]:9001\naccess.log = /proc/self/fd/2\nclear_env = no\ncatch_workers_output = yes\nphp_admin_value[memory_limit] = 256M\nphp_admin_value[disable_functions] = show_source, highlight_file, apache_child_terminate, apache_get_modules, apache_note, apache_setenv, virtual, dl, disk_total_space, posix_getpwnam, posix_getpwuid, posix_mkfifo, posix_mknod, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_nice, openlog, syslog, pfsockopen, system, shell_exec, passthru, popen, proc_open, exec, ini_alter, pcntl_exec, proc_close, proc_get_status, proc_terminate, symlink\n\n[web-worker]\nuser = www-data\ngroup = www-data\npm = dynamic\npm.max_children = 50\npm.start_servers = 10\npm.min_spare_servers = 10\npm.max_spare_servers = 15\nlisten = [::]:9002\naccess.log = /proc/self/fd/2\nclear_env = no\ncatch_workers_output = yes\nphp_admin_value[memory_limit] = 512M\nphp_admin_value[disable_functions] = show_source, highlight_file, apache_child_terminate, apache_get_modules, apache_note, apache_setenv, virtual, dl, disk_total_space, posix_getpwnam, posix_getpwuid, posix_mkfifo, posix_mknod, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_nice, openlog, syslog, pfsockopen, system, shell_exec, passthru, popen, proc_open, exec, ini_alter, pcntl_exec, proc_close, proc_get_status, proc_terminate, symlink\n"
  },
  {
    "path": "data/conf/phpfpm/sogo-sso/.gitkeep",
    "content": ""
  },
  {
    "path": "data/conf/postfix/anonymize_headers.pcre",
    "content": "if /^\\s*Received:.*Authenticated sender.*\\(Postcow\\)/\n#/^Received: from .*? \\([\\w-.]* \\[.*?\\]\\)\\s+\\(Authenticated sender: (.+)\\)\\s+by.+\\(Postcow\\) with (E?SMTPS?A?) id ([A-F0-9]+).+;.*?/\n/^Received: from .*? \\([\\w\\-.]* \\[.*?\\]\\)(.*|\\n.*)\\(Authenticated sender: (.+)\\)\\s+by.+\\(Postcow\\) with (.*)/\n  REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with $3\nendif\nif /^\\s*Received: from.* \\(.*dovecot-mailcow.*mailcow-network.*\\).*\\(Postcow\\)/\n/^Received: from.* (.*|\\n.*)\\((.+) (.+)\\)\\s+by (.+) \\(Postcow\\) with (.*)/\n  REPLACE Received: from sieve (sieve $3) by $4 (Postcow) with $5\nendif\nif /^\\s*Received: from.* \\(.*rspamd-mailcow.*mailcow-network.*\\).*\\(Postcow\\)/\n/^Received: from.* (.*|\\n.*)\\((.+) (.+)\\)\\s+by (.+) \\(Postcow\\) with (.*)/\n  REPLACE Received: from rspamd (rspamd $3) by $4 (Postcow) with $5\nendif\n/^\\s*X-Enigmail/        IGNORE\n# Not removing Mailer by default, might be signed\n#/^\\s*X-Mailer/          IGNORE\n/^\\s*X-Originating-IP/  IGNORE\n/^\\s*X-Forward/         IGNORE\n# Not removing UA by default, might be signed\n#/^\\s*User-Agent/        IGNORE\n"
  },
  {
    "path": "data/conf/postfix/local_transport",
    "content": "/watchdog@localhost$/   watchdog_discard:\n/localhost$/  local:\n"
  },
  {
    "path": "data/conf/postfix/main.cf",
    "content": "# --------------------------------------------------------------------------\n# Please create a file \"extra.cf\" for persistent overrides to main.cf\n# --------------------------------------------------------------------------\nbiff = no\nappend_dot_mydomain = no\nsmtpd_tls_cert_file = /etc/ssl/mail/cert.pem\nsmtpd_tls_key_file = /etc/ssl/mail/key.pem\ntls_server_sni_maps = hash:/opt/postfix/conf/sni.map\nsmtpd_tls_received_header = yes\nsmtp_tls_session_cache_database = btree:${data_directory}/smtp_scache\nsmtpd_relay_restrictions = permit_mynetworks,\n  permit_sasl_authenticated,\n  defer_unauth_destination\nsmtpd_forbid_bare_newline = yes\n# alias maps are auto-generated in postfix.sh on startup\nalias_maps = hash:/etc/aliases\nalias_database = hash:/etc/aliases\nrelayhost =\nmynetworks_style = subnet\nmailbox_size_limit = 0\nrecipient_delimiter = +\ninet_interfaces = all\ninet_protocols = all\nbounce_queue_lifetime = 1d\nbroken_sasl_auth_clients = yes\ndisable_vrfy_command = yes\nmaximal_backoff_time = 1800s\nmaximal_queue_lifetime = 5d\ndelay_warning_time = 4h\nmessage_size_limit = 104857600\nmilter_default_action = tempfail\nmilter_protocol = 6\nminimal_backoff_time = 300s\nplaintext_reject_code = 550\npostscreen_access_list = permit_mynetworks,\n  cidr:/opt/postfix/conf/custom_postscreen_whitelist.cidr,\n  cidr:/opt/postfix/conf/postscreen_access.cidr,\n  tcp:127.0.0.1:10027\npostscreen_bare_newline_enable = no\npostscreen_blacklist_action = drop\npostscreen_cache_cleanup_interval = 24h\npostscreen_cache_map = proxy:btree:$data_directory/postscreen_cache\npostscreen_dnsbl_action = enforce\npostscreen_dnsbl_threshold = 6\npostscreen_dnsbl_ttl = 5m\npostscreen_greet_action = enforce\npostscreen_greet_banner = $smtpd_banner\npostscreen_greet_ttl = 2d\npostscreen_greet_wait = 3s\npostscreen_non_smtp_command_enable = no\npostscreen_pipelining_enable = no\nproxy_read_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_sasl_passwd_maps_transport_maps.cf,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_mbr_access_maps.cf,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_tls_enforce_in_policy.cf,\n  $sender_dependent_default_transport_maps,\n  $smtp_tls_policy_maps,\n  $local_recipient_maps,\n  $mydestination,\n  $virtual_alias_maps,\n  $virtual_alias_domains,\n  $virtual_mailbox_maps,\n  $virtual_mailbox_domains,\n  $relay_recipient_maps,\n  $relay_domains,\n  $canonical_maps,\n  $sender_canonical_maps,\n  $sender_bcc_maps,\n  $recipient_bcc_maps,\n  $recipient_canonical_maps,\n  $relocated_maps,\n  $transport_maps,\n  $mynetworks,\n  $smtpd_sender_login_maps,\n  $smtp_sasl_password_maps\nqueue_run_delay = 300s\nrelay_domains = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_relay_domain_maps.cf\nrelay_recipient_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_relay_recipient_maps.cf\nsender_dependent_default_transport_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_sender_dependent_default_transport_maps.cf\nsmtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt\nsmtp_tls_cert_file = /etc/ssl/mail/cert.pem\nsmtp_tls_key_file = /etc/ssl/mail/key.pem\nsmtp_tls_loglevel = 1\nsmtp_dns_support_level = dnssec\nsmtp_tls_security_level = dane\nsmtpd_data_restrictions = reject_unauth_pipelining, permit\nsmtpd_delay_reject = yes\nsmtpd_error_sleep_time = 10s\nsmtpd_forbid_bare_newline = yes\nsmtpd_hard_error_limit = ${stress?1}${stress:5}\nsmtpd_helo_required = yes\nsmtpd_proxy_timeout = 600s\nsmtpd_recipient_restrictions = check_recipient_mx_access proxy:mysql:/opt/postfix/conf/sql/mysql_mbr_access_maps.cf,\n  permit_sasl_authenticated,\n  permit_mynetworks,\n  check_recipient_access proxy:mysql:/opt/postfix/conf/sql/mysql_tls_enforce_in_policy.cf,\n  reject_invalid_helo_hostname,\n  reject_unauth_destination\nsmtpd_sasl_auth_enable = yes\nsmtpd_sasl_authenticated_header = yes\nsmtpd_sasl_path = inet:dovecot:10001\nsmtpd_sasl_type = dovecot\nsmtpd_sender_login_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_sender_acl.cf\nsmtpd_sender_restrictions = reject_authenticated_sender_login_mismatch,\n  permit_mynetworks,\n  permit_sasl_authenticated,\n  reject_unlisted_sender,\n  reject_unknown_sender_domain\nsmtpd_soft_error_limit = 3\nsmtpd_tls_auth_only = yes\nsmtpd_tls_dh1024_param_file = /etc/ssl/mail/dhparams.pem\nsmtpd_tls_eecdh_grade = auto\nsmtpd_tls_exclude_ciphers = ECDHE-RSA-RC4-SHA, RC4, aNULL, DES-CBC3-SHA, ECDHE-RSA-DES-CBC3-SHA, EDH-RSA-DES-CBC3-SHA\nsmtpd_tls_loglevel = 1\n\n# Mandatory protocols and ciphers are used when a connections is enforced to use TLS\n# Does _not_ apply to enforced incoming TLS settings per mailbox\nsmtp_tls_mandatory_protocols = >=TLSv1.2\nlmtp_tls_mandatory_protocols = >=TLSv1.2\nsmtpd_tls_mandatory_protocols = >=TLSv1.2\nsmtpd_tls_mandatory_ciphers = high\n\nsmtp_tls_protocols = >=TLSv1.2\nlmtp_tls_protocols = >=TLSv1.2\nsmtpd_tls_protocols = >=TLSv1.2\n\nsmtpd_tls_security_level = may\ntls_preempt_cipherlist = yes\ntls_ssl_options = NO_COMPRESSION, NO_RENEGOTIATION\nvirtual_alias_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_alias_maps.cf,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_resource_maps.cf,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_spamalias_maps.cf,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_alias_domain_maps.cf\nvirtual_gid_maps = static:5000\nvirtual_mailbox_base = /var/vmail/\nvirtual_mailbox_domains = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_domains_maps.cf\n# -- moved to rspamd on 2021-06-01\n#recipient_bcc_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_bcc_maps.cf\n#sender_bcc_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_sender_bcc_maps.cf\nrecipient_canonical_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_recipient_canonical_maps.cf\nrecipient_canonical_classes = envelope_recipient\nvirtual_mailbox_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_virtual_mailbox_maps.cf\nvirtual_minimum_uid = 104\nvirtual_transport = lmtp:inet:dovecot:24\nvirtual_uid_maps = static:5000\nsmtpd_milters = inet:rspamd:9900\nnon_smtpd_milters = inet:rspamd:9900\nmilter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}\nmydestination = localhost.localdomain, localhost\nsmtp_address_preference = any\nsmtp_sender_dependent_authentication = yes\nsmtp_sasl_auth_enable = yes\nsmtp_sasl_password_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_sasl_passwd_maps_sender_dependent.cf\nsmtp_sasl_security_options =\nsmtp_sasl_mechanism_filter = plain, login\nsmtp_tls_policy_maps = proxy:mysql:/opt/postfix/conf/sql/mysql_tls_policy_override_maps.cf socketmap:inet:postfix-tlspol:8642:QUERY\nsmtp_header_checks = pcre:/opt/postfix/conf/anonymize_headers.pcre\nmail_name = Postcow\n# local_transport map catches local destinations and prevents routing local dests when the next map would route \"*\"\n# Use custom_transport.pcre for custom transports\ntransport_maps = pcre:/opt/postfix/conf/custom_transport.pcre,\n  pcre:/opt/postfix/conf/local_transport,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_relay_ne.cf,\n  proxy:mysql:/opt/postfix/conf/sql/mysql_transport_maps.cf\nsmtp_sasl_auth_soft_bounce = no\npostscreen_discard_ehlo_keywords = chunking, silent-discard, smtputf8, dsn\nsmtpd_discard_ehlo_keywords = chunking, silent-discard, smtputf8\ncompatibility_level = 3.7\n# Define protocols for SMTPS and submission service\nsubmission_smtpd_tls_mandatory_protocols = >=TLSv1.2\nsmtps_smtpd_tls_mandatory_protocols = >=TLSv1.2\nparent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,qmqpd_authorized_clients\n# This Option is added to correctly set the X-Original-To Header when mails are send to lmtp (dovecot)\nlmtp_destination_recipient_limit=1\n\n# DO NOT EDIT ANYTHING BELOW #\n# Overrides #\n"
  },
  {
    "path": "data/conf/postfix/master.cf",
    "content": "# inter-mx with postscreen on 25/tcp\nsmtp       inet  n       -       n       -       1       postscreen\n10025      inet  n       -       n       -       1       postscreen\n  -o postscreen_upstream_proxy_protocol=haproxy\n  -o syslog_name=haproxy\nsmtpd      pass  -       -       n       -       -       smtpd\n  -o smtpd_sasl_auth_enable=no\n  -o smtpd_sender_restrictions=permit_mynetworks,reject_unlisted_sender,reject_unknown_sender_domain\n\n# smtpd tls-wrapped (smtps) on 465/tcp\n# TLS protocol can be modified by setting smtps_smtpd_tls_mandatory_protocols in extra.cf\nsmtps    inet  n       -       n       -       -       smtpd\n  -o smtpd_tls_wrappermode=yes\n  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject\n  -o smtpd_tls_mandatory_protocols=$smtps_smtpd_tls_mandatory_protocols\n  -o tls_preempt_cipherlist=yes\n  -o cleanup_service_name=smtp_sender_cleanup\n  -o syslog_name=postfix/smtps\n10465    inet  n       -       n       -       -       smtpd\n  -o smtpd_upstream_proxy_protocol=haproxy\n  -o smtpd_tls_wrappermode=yes\n  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject\n  -o smtpd_tls_mandatory_protocols=$smtps_smtpd_tls_mandatory_protocols\n  -o tls_preempt_cipherlist=yes\n  -o cleanup_service_name=smtp_sender_cleanup\n  -o syslog_name=postfix/smtps-haproxy\n\n# smtpd with starttls on 587/tcp\n# TLS protocol can be modified by setting submission_smtpd_tls_mandatory_protocols in extra.cf\nsubmission inet n       -       n       -       -       smtpd\n  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject\n  -o smtpd_enforce_tls=yes\n  -o smtpd_tls_security_level=encrypt\n  -o smtpd_tls_mandatory_protocols=$submission_smtpd_tls_mandatory_protocols\n  -o tls_preempt_cipherlist=yes\n  -o cleanup_service_name=smtp_sender_cleanup\n  -o syslog_name=postfix/submission\n10587      inet n       -       n       -       -       smtpd\n  -o smtpd_upstream_proxy_protocol=haproxy\n  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject\n  -o smtpd_enforce_tls=yes\n  -o smtpd_tls_security_level=encrypt\n  -o smtpd_tls_mandatory_protocols=$submission_smtpd_tls_mandatory_protocols\n  -o tls_preempt_cipherlist=yes\n  -o cleanup_service_name=smtp_sender_cleanup\n  -o syslog_name=postfix/submission-haproxy\n\n# used by SOGo\n# smtpd_sender_restrictions should match main.cf, but with check_sasl_access prepended for login-as-mailbox-user function\n588 inet n      -       n       -       -       smtpd\n  -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject\n  -o smtpd_tls_auth_only=no\n  -o smtpd_sender_restrictions=check_sasl_access,regexp:/opt/postfix/conf/allow_mailcow_local.regexp,reject_authenticated_sender_login_mismatch,permit_mynetworks,permit_sasl_authenticated,reject_unlisted_sender,reject_unknown_sender_domain\n  -o cleanup_service_name=smtp_sender_cleanup\n  -o syslog_name=postfix/sogo\n\n# used to reinject quarantine mails\n590 inet n      -       n       -       -       smtpd\n  -o smtpd_helo_restrictions=\n  -o smtpd_client_restrictions=permit_mynetworks,reject\n  -o smtpd_tls_auth_only=no\n  -o smtpd_milters=\n  -o non_smtpd_milters=\n  -o syslog_name=postfix/quarantine\n\n# used to send bcc mails\n591 inet n      -       n       -       -       smtpd\n  -o smtpd_helo_restrictions=\n  -o smtpd_client_restrictions=permit_mynetworks,reject\n  -o smtpd_tls_auth_only=no\n  -o smtpd_milters=\n  -o non_smtpd_milters=\n  -o syslog_name=postfix/bcc\n\n# enforced smtp connector\nsmtp_enforced_tls      unix  -       -       n       -       -       smtp\n  -o smtp_tls_security_level=encrypt\n  -o syslog_name=enforced-tls-smtp\n  -o smtp_delivery_status_filter=pcre:/opt/postfix/conf/smtp_dsn_filter\n\n# smtp connector used, when a transport map matched\n# this helps to have different sasl maps than we have with sender dependent transport maps\nsmtp_via_transport_maps      unix  -       -       n       -       -       smtp\n  -o smtp_sasl_password_maps=proxy:mysql:/opt/postfix/conf/sql/mysql_sasl_passwd_maps_transport_maps.cf\n\ntlsproxy   unix  -       -       n       -       0       tlsproxy\ndnsblog    unix  -       -       n       -       0       dnsblog\npickup     fifo  n       -       n       60      1       pickup\ncleanup    unix  n       -       n       -       0       cleanup\nqmgr       fifo  n       -       n       300     1       qmgr\ntlsmgr     unix  -       -       n       1000?   1       tlsmgr\nrewrite    unix  -       -       n       -       -       trivial-rewrite\nbounce     unix  -       -       n       -       0       bounce\ndefer      unix  -       -       n       -       0       bounce\ntrace      unix  -       -       n       -       0       bounce\nverify     unix  -       -       n       -       1       verify\nflush      unix  n       -       n       1000?   0       flush\nproxymap   unix  -       -       n       -       -       proxymap\nproxywrite unix  -       -       n       -       1       proxymap\nsmtp       unix  -       -       n       -       -       smtp\nrelay      unix  -       -       n       -       -       smtp\nshowq      unix  n       -       n       -       -       showq\nerror      unix  -       -       n       -       -       error\nretry      unix  -       -       n       -       -       error\ndiscard    unix  -       -       n       -       -       discard\nlocal      unix  -       n       n       -       -       local\nvirtual    unix  -       n       n       -       -       virtual\nlmtp       unix  -       -       n       -       -       lmtp flags=O\nanvil      unix  -       -       n       -       1       anvil\nscache     unix  -       -       n       -       1       scache\nmaildrop   unix  -       n       n       -       -       pipe flags=DRhu\n    user=vmail argv=/usr/bin/maildrop -d ${recipient}\n\n# used to anonymize sender IP\nsmtp_sender_cleanup unix n - y - 0 cleanup\n  -o header_checks=$smtp_header_checks\n\n# start whitelist_fwd\n127.0.0.1:10027 inet n n n - 0 spawn user=nobody argv=/usr/local/bin/whitelist_forwardinghosts.sh\n# end whitelist_fwd\n\n# start watchdog-specific\n# logs to local7 (hidden)\n589 inet n      -       n       -       -       smtpd\n  -o smtpd_client_restrictions=permit_mynetworks,reject\n  -o syslog_name=watchdog\n  -o syslog_facility=local7\n  -o smtpd_milters=\n  -o cleanup_service_name=watchdog_cleanup\n  -o non_smtpd_milters=\nwatchdog_cleanup unix  n       -       n       -       0       cleanup\n  -o syslog_name=watchdog\n  -o syslog_facility=local7\n  -o queue_service_name=watchdog_qmgr\nwatchdog_qmgr fifo  n       -       n       300     1       qmgr\n  -o syslog_facility=local7\n  -o syslog_name=watchdog\n  -o rewrite_service_name=watchdog_rewrite\nwatchdog_rewrite    unix  -       -       n       -       -       trivial-rewrite\n   -o syslog_facility=local7\n   -o syslog_name=watchdog\n   -o local_transport=watchdog_discard\nwatchdog_discard    unix  -       -       n       -       -       discard\n   -o syslog_facility=local7\n   -o syslog_name=watchdog\n# end watchdog-specific\n"
  },
  {
    "path": "data/conf/postfix/postscreen_access.cidr",
    "content": "# Whitelist generated by Postwhite v3.4 on Sun Mar  1 00:29:01 UTC 2026\n# https://github.com/stevejenkins/postwhite/\n# 2174 total rules\n2a00:1450:4000::/36\tpermit\n2a01:111:f400::/48\tpermit\n2a01:111:f403:2800::/53\tpermit\n2a01:111:f403:8000::/51\tpermit\n2a01:111:f403::/49\tpermit\n2a01:111:f403:c000::/51\tpermit\n2a01:111:f403:d000::/53\tpermit\n2a01:111:f403:f000::/52\tpermit\n2a01:238:20a:202:5370::1\tpermit\n2a01:238:20a:202:5372::1\tpermit\n2a01:238:20a:202:5373::1\tpermit\n2a01:238:400:101:53::1\tpermit\n2a01:238:400:102:53::1\tpermit\n2a01:238:400:103:53::1\tpermit\n2a01:238:400:301:53::1\tpermit\n2a01:238:400:302:53::1\tpermit\n2a01:238:400:303:53::1\tpermit\n2a01:238:400:470:53::1\tpermit\n2a01:238:400:471:53::1\tpermit\n2a01:238:400:472:53::1\tpermit\n2a01:b747:3000:200::/56\tpermit\n2a01:b747:3001:200::/56\tpermit\n2a01:b747:3002:200::/56\tpermit\n2a01:b747:3003:200::/56\tpermit\n2a01:b747:3004:200::/56\tpermit\n2a01:b747:3005:200::/56\tpermit\n2a01:b747:3006:200::/56\tpermit\n2a02:a60:0:5::/64\tpermit\n2a0f:f640::/56\tpermit\n2c0f:fb50:4000::/36\tpermit\n2.207.151.53\tpermit\n2.207.217.30\tpermit\n3.64.237.68\tpermit\n3.65.3.180\tpermit\n3.70.123.177\tpermit\n3.72.182.33\tpermit\n3.74.81.189\tpermit\n3.74.125.228\tpermit\n3.75.33.185\tpermit\n3.93.157.0/24\tpermit\n3.94.40.108\tpermit\n3.121.107.214\tpermit\n3.129.120.190\tpermit\n3.210.190.0/24\tpermit\n3.211.80.218\tpermit\n3.216.221.67\tpermit\n3.221.209.22\tpermit\n8.20.114.31\tpermit\n8.25.194.0/23\tpermit\n8.25.196.0/23\tpermit\n8.36.116.0/24\tpermit\n8.39.54.0/23\tpermit\n8.39.54.250/31\tpermit\n8.39.144.0/24\tpermit\n8.40.222.0/23\tpermit\n8.40.222.250/31\tpermit\n12.130.86.238\tpermit\n13.107.213.51\tpermit\n13.107.246.51\tpermit\n13.108.16.0/20\tpermit\n13.110.208.0/21\tpermit\n13.110.209.0/24\tpermit\n13.110.216.0/22\tpermit\n13.110.224.0/20\tpermit\n13.111.0.0/16\tpermit\n13.111.191.0/24\tpermit\n13.216.7.111\tpermit\n13.216.54.180\tpermit\n13.247.164.219\tpermit\n15.200.21.50\tpermit\n15.200.44.248\tpermit\n15.200.201.185\tpermit\n17.41.0.0/16\tpermit\n17.57.155.0/24\tpermit\n17.57.156.0/24\tpermit\n17.58.0.0/16\tpermit\n17.142.0.0/15\tpermit\n18.97.0.8/30\tpermit\n18.97.1.184/29\tpermit\n18.97.2.64/26\tpermit\n18.156.89.250\tpermit\n18.156.205.64\tpermit\n18.157.70.148\tpermit\n18.157.114.255\tpermit\n18.157.243.190\tpermit\n18.158.153.154\tpermit\n18.194.95.56\tpermit\n18.197.217.180\tpermit\n18.198.96.88\tpermit\n18.199.210.3\tpermit\n18.207.52.234\tpermit\n18.208.124.128/25\tpermit\n18.216.232.154\tpermit\n18.235.27.253\tpermit\n18.236.40.242\tpermit\n20.51.6.32/30\tpermit\n20.52.52.2\tpermit\n20.52.128.133\tpermit\n20.59.80.4/30\tpermit\n20.63.210.192/28\tpermit\n20.69.8.108/30\tpermit\n20.83.222.104/30\tpermit\n20.88.157.184/30\tpermit\n20.94.180.64/28\tpermit\n20.97.34.220/30\tpermit\n20.98.148.156/30\tpermit\n20.98.194.68/30\tpermit\n20.105.209.76/30\tpermit\n20.107.239.64/30\tpermit\n20.118.139.208/30\tpermit\n20.141.10.196\tpermit\n20.185.214.0/27\tpermit\n20.185.214.32/27\tpermit\n20.185.214.64/27\tpermit\n23.103.224.0/19\tpermit\n23.249.208.0/20\tpermit\n23.251.224.0/19\tpermit\n23.253.141.0/24\tpermit\n23.253.182.0/23\tpermit\n23.253.182.103\tpermit\n23.253.183.145\tpermit\n23.253.183.146\tpermit\n23.253.183.147\tpermit\n23.253.183.148\tpermit\n23.253.183.150\tpermit\n24.110.64.0/18\tpermit\n27.123.204.128/30\tpermit\n27.123.204.132/31\tpermit\n27.123.204.148/30\tpermit\n27.123.204.152\tpermit\n27.123.204.168/30\tpermit\n27.123.204.172\tpermit\n27.123.204.188/30\tpermit\n27.123.204.192\tpermit\n27.123.206.50/31\tpermit\n27.123.206.56/29\tpermit\n27.123.206.76/30\tpermit\n27.123.206.80/28\tpermit\n31.47.251.17\tpermit\n31.186.239.0/24\tpermit\n34.2.64.0/22\tpermit\n34.2.68.0/23\tpermit\n34.2.70.0/23\tpermit\n34.2.71.64/26\tpermit\n34.2.72.0/22\tpermit\n34.2.75.0/26\tpermit\n34.2.78.0/23\tpermit\n34.2.80.0/23\tpermit\n34.2.82.0/23\tpermit\n34.2.84.0/24\tpermit\n34.2.84.64/26\tpermit\n34.2.85.0/24\tpermit\n34.2.85.64/26\tpermit\n34.2.86.0/23\tpermit\n34.2.88.0/23\tpermit\n34.2.90.0/23\tpermit\n34.2.92.0/23\tpermit\n34.2.94.0/23\tpermit\n34.70.158.162\tpermit\n34.74.74.140\tpermit\n34.83.159.189\tpermit\n34.141.160.224\tpermit\n34.193.58.168\tpermit\n34.195.217.107\tpermit\n34.197.10.50\tpermit\n34.197.254.9\tpermit\n34.198.94.229\tpermit\n34.198.218.121\tpermit\n34.212.163.75\tpermit\n34.215.104.144\tpermit\n34.218.115.239\tpermit\n34.225.212.172\tpermit\n34.241.242.183\tpermit\n35.83.148.184\tpermit\n35.155.198.111\tpermit\n35.158.23.94\tpermit\n35.161.32.253\tpermit\n35.162.73.231\tpermit\n35.167.93.243\tpermit\n35.174.145.124\tpermit\n35.176.132.251\tpermit\n35.205.92.9\tpermit\n35.228.216.85\tpermit\n35.242.169.159\tpermit\n37.188.97.188\tpermit\n37.218.248.47\tpermit\n37.218.249.47\tpermit\n37.218.251.62\tpermit\n39.156.163.64/29\tpermit\n40.92.0.0/15\tpermit\n40.92.0.0/16\tpermit\n40.107.0.0/16\tpermit\n40.112.65.63\tpermit\n40.233.64.216\tpermit\n40.233.83.78\tpermit\n40.233.88.28\tpermit\n43.239.212.33\tpermit\n44.206.138.57\tpermit\n44.210.169.44\tpermit\n44.217.45.156\tpermit\n44.236.56.93\tpermit\n44.238.220.251\tpermit\n44.245.243.92\tpermit\n44.246.1.125\tpermit\n44.246.68.102\tpermit\n44.246.77.92\tpermit\n45.14.148.0/22\tpermit\n45.143.132.0/24\tpermit\n45.143.133.0/24\tpermit\n45.143.134.0/24\tpermit\n45.143.135.0/24\tpermit\n46.226.48.0/21\tpermit\n46.228.36.37\tpermit\n46.228.36.38/31\tpermit\n46.228.36.212/30\tpermit\n46.228.36.216/31\tpermit\n46.228.37.1\tpermit\n46.228.37.2\tpermit\n46.228.37.3\tpermit\n46.228.37.4\tpermit\n46.228.37.5\tpermit\n46.228.37.6/31\tpermit\n46.228.37.8/31\tpermit\n46.228.37.10/31\tpermit\n46.228.37.12/30\tpermit\n46.228.37.16/30\tpermit\n46.228.37.20/30\tpermit\n46.228.37.24/30\tpermit\n46.228.37.28/31\tpermit\n46.228.37.30/31\tpermit\n46.228.37.32/29\tpermit\n46.228.37.40/29\tpermit\n46.228.37.48/31\tpermit\n46.228.37.50/31\tpermit\n46.228.37.52/30\tpermit\n46.228.37.56/31\tpermit\n46.228.38.33\tpermit\n46.228.38.34/31\tpermit\n46.228.38.36/31\tpermit\n46.228.38.38\tpermit\n46.228.38.53\tpermit\n46.228.38.54/31\tpermit\n46.228.38.56/31\tpermit\n46.228.38.58\tpermit\n46.228.38.101\tpermit\n46.228.38.102/31\tpermit\n46.228.38.128/28\tpermit\n46.228.38.144/29\tpermit\n46.228.38.152/31\tpermit\n46.228.38.154\tpermit\n46.228.39.64/27\tpermit\n46.228.39.96/30\tpermit\n46.228.39.100/30\tpermit\n46.228.39.104/29\tpermit\n46.228.39.112/31\tpermit\n46.243.88.174\tpermit\n46.243.88.175\tpermit\n46.243.88.176\tpermit\n46.243.88.177\tpermit\n46.243.95.179\tpermit\n46.243.95.180\tpermit\n50.16.246.183\tpermit\n50.18.45.249\tpermit\n50.18.121.236\tpermit\n50.18.121.248\tpermit\n50.18.123.221\tpermit\n50.18.124.70\tpermit\n50.18.125.97\tpermit\n50.18.125.237\tpermit\n50.18.126.162\tpermit\n50.31.32.0/19\tpermit\n50.31.36.205\tpermit\n50.56.130.220\tpermit\n50.56.130.221\tpermit\n50.56.130.222\tpermit\n50.112.246.219\tpermit\n52.1.14.157\tpermit\n52.5.230.59\tpermit\n52.6.74.205\tpermit\n52.12.53.23\tpermit\n52.13.214.179\tpermit\n52.26.1.71\tpermit\n52.27.5.72\tpermit\n52.27.28.47\tpermit\n52.28.63.81\tpermit\n52.28.197.132\tpermit\n52.34.181.151\tpermit\n52.35.192.45\tpermit\n52.36.138.31\tpermit\n52.37.142.146\tpermit\n52.42.203.116\tpermit\n52.50.24.208\tpermit\n52.57.120.243\tpermit\n52.58.216.183\tpermit\n52.59.143.3\tpermit\n52.60.41.5\tpermit\n52.60.115.116\tpermit\n52.61.91.9\tpermit\n52.71.0.205\tpermit\n52.94.124.0/28\tpermit\n52.95.48.152/29\tpermit\n52.95.49.88/29\tpermit\n52.100.0.0/15\tpermit\n52.102.0.0/16\tpermit\n52.103.0.0/17\tpermit\n52.119.213.144/28\tpermit\n52.185.106.240/28\tpermit\n52.200.59.0/24\tpermit\n52.207.191.216\tpermit\n52.222.62.51\tpermit\n52.222.73.83\tpermit\n52.222.73.120\tpermit\n52.222.75.85\tpermit\n52.222.89.228\tpermit\n52.234.172.96/28\tpermit\n52.235.253.128\tpermit\n52.236.28.240/28\tpermit\n54.90.148.255\tpermit\n54.165.19.38\tpermit\n54.174.52.0/24\tpermit\n54.174.57.0/24\tpermit\n54.174.59.0/24\tpermit\n54.174.60.0/23\tpermit\n54.174.63.0/24\tpermit\n54.186.193.102\tpermit\n54.191.223.56\tpermit\n54.211.126.101\tpermit\n54.213.20.246\tpermit\n54.214.39.184\tpermit\n54.240.0.0/18\tpermit\n54.240.64.0/18\tpermit\n54.241.16.209\tpermit\n54.244.54.130\tpermit\n54.244.242.0/24\tpermit\n54.255.61.23\tpermit\n56.124.6.228\tpermit\n57.103.64.0/18\tpermit\n57.129.93.249\tpermit\n62.13.128.0/24\tpermit\n62.13.129.128/25\tpermit\n62.13.136.0/21\tpermit\n62.13.144.0/21\tpermit\n62.13.152.0/21\tpermit\n62.17.146.128/26\tpermit\n62.201.172.0/27\tpermit\n62.201.172.32/27\tpermit\n62.253.227.114\tpermit\n63.80.14.0/23\tpermit\n63.128.21.0/24\tpermit\n63.143.57.128/25\tpermit\n63.143.59.128/25\tpermit\n63.176.194.123\tpermit\n63.178.132.221\tpermit\n63.178.143.178\tpermit\n64.18.0.0/20\tpermit\n64.20.241.45\tpermit\n64.69.212.0/24\tpermit\n64.71.149.160/28\tpermit\n64.79.155.0/24\tpermit\n64.79.155.192\tpermit\n64.79.155.193\tpermit\n64.79.155.205\tpermit\n64.79.155.206\tpermit\n64.127.115.252\tpermit\n64.132.88.0/23\tpermit\n64.132.92.0/24\tpermit\n64.181.194.190\tpermit\n64.207.219.7\tpermit\n64.207.219.8\tpermit\n64.207.219.9\tpermit\n64.207.219.10\tpermit\n64.207.219.11\tpermit\n64.207.219.12\tpermit\n64.207.219.13\tpermit\n64.207.219.14\tpermit\n64.207.219.15\tpermit\n64.207.219.71\tpermit\n64.207.219.72\tpermit\n64.207.219.73\tpermit\n64.207.219.74\tpermit\n64.207.219.75\tpermit\n64.207.219.76\tpermit\n64.207.219.77\tpermit\n64.207.219.78\tpermit\n64.207.219.79\tpermit\n64.207.219.135\tpermit\n64.207.219.136\tpermit\n64.207.219.137\tpermit\n64.207.219.138\tpermit\n64.207.219.139\tpermit\n64.207.219.140\tpermit\n64.207.219.141\tpermit\n64.207.219.142\tpermit\n64.207.219.143\tpermit\n64.233.160.0/19\tpermit\n65.52.80.137\tpermit\n65.55.29.77\tpermit\n65.55.42.224/28\tpermit\n65.110.161.77\tpermit\n65.123.29.213\tpermit\n65.123.29.220\tpermit\n65.154.166.0/24\tpermit\n65.212.180.36\tpermit\n66.102.0.0/20\tpermit\n66.119.150.192/26\tpermit\n66.163.184.0/24\tpermit\n66.163.185.0/24\tpermit\n66.163.186.0/24\tpermit\n66.163.187.0/24\tpermit\n66.163.188.0/24\tpermit\n66.163.189.0/24\tpermit\n66.163.190.0/24\tpermit\n66.163.191.0/24\tpermit\n66.170.126.97\tpermit\n66.196.80.112/28\tpermit\n66.196.80.144/29\tpermit\n66.196.80.193\tpermit\n66.196.81.104/29\tpermit\n66.196.81.112/29\tpermit\n66.196.81.120\tpermit\n66.196.81.125\tpermit\n66.196.81.126/31\tpermit\n66.196.81.128/28\tpermit\n66.196.81.144/29\tpermit\n66.196.81.152/31\tpermit\n66.196.81.154\tpermit\n66.196.81.225\tpermit\n66.196.81.226/31\tpermit\n66.196.81.228/30\tpermit\n66.196.81.232/31\tpermit\n66.196.81.234\tpermit\n66.211.170.88/29\tpermit\n66.211.184.0/23\tpermit\n66.218.74.64/30\tpermit\n66.218.74.68/31\tpermit\n66.218.75.112/30\tpermit\n66.218.75.116/31\tpermit\n66.218.75.144/31\tpermit\n66.218.75.146\tpermit\n66.218.75.152\tpermit\n66.218.75.192/30\tpermit\n66.218.75.196/31\tpermit\n66.218.75.203\tpermit\n66.218.75.212/30\tpermit\n66.218.75.216/31\tpermit\n66.218.75.223\tpermit\n66.218.75.232/30\tpermit\n66.218.75.236/31\tpermit\n66.218.75.243\tpermit\n66.218.75.252/31\tpermit\n66.218.75.254\tpermit\n66.220.144.128/25\tpermit\n66.220.155.0/24\tpermit\n66.220.157.0/25\tpermit\n66.231.80.0/20\tpermit\n66.240.227.0/24\tpermit\n66.249.80.0/20\tpermit\n67.23.31.6\tpermit\n67.72.99.26\tpermit\n67.195.22.113\tpermit\n67.195.22.116/30\tpermit\n67.195.23.144/30\tpermit\n67.195.23.148\tpermit\n67.195.60.45\tpermit\n67.195.60.46/31\tpermit\n67.195.60.48/31\tpermit\n67.195.60.50\tpermit\n67.195.60.146\tpermit\n67.195.60.155\tpermit\n67.195.60.156\tpermit\n67.195.87.64\tpermit\n67.195.87.81\tpermit\n67.195.87.82/31\tpermit\n67.195.87.84/31\tpermit\n67.195.87.86\tpermit\n67.195.87.128\tpermit\n67.195.87.145\tpermit\n67.195.87.146/31\tpermit\n67.195.87.192\tpermit\n67.195.87.209\tpermit\n67.195.87.210/31\tpermit\n67.195.124.137\tpermit\n67.195.124.139\tpermit\n67.195.124.141\tpermit\n67.195.124.143\tpermit\n67.195.124.145\tpermit\n67.195.124.147\tpermit\n67.219.240.0/20\tpermit\n67.221.168.65\tpermit\n67.228.2.24/30\tpermit\n67.228.21.184/29\tpermit\n67.228.37.4/30\tpermit\n67.231.145.42\tpermit\n67.231.153.30\tpermit\n68.142.230.64/31\tpermit\n68.142.230.69\tpermit\n68.142.230.70/31\tpermit\n68.142.230.72/30\tpermit\n68.142.230.76/31\tpermit\n68.142.230.78\tpermit\n68.232.140.138\tpermit\n68.232.157.143\tpermit\n68.232.192.0/20\tpermit\n69.63.178.128/25\tpermit\n69.63.181.0/24\tpermit\n69.63.184.0/25\tpermit\n69.65.42.195\tpermit\n69.65.49.192/29\tpermit\n69.72.32.0/20\tpermit\n69.72.40.93\tpermit\n69.72.40.94/31\tpermit\n69.72.40.96/30\tpermit\n69.72.47.205\tpermit\n69.147.84.227\tpermit\n69.162.98.0/24\tpermit\n69.169.224.0/20\tpermit\n69.171.232.0/24\tpermit\n69.171.244.0/23\tpermit\n70.42.149.35\tpermit\n72.3.185.0/24\tpermit\n72.14.192.0/18\tpermit\n72.21.192.0/19\tpermit\n72.21.217.142\tpermit\n72.30.234.152/29\tpermit\n72.30.236.160/30\tpermit\n72.30.236.164/31\tpermit\n72.30.236.180/30\tpermit\n72.30.236.184/31\tpermit\n72.30.236.208/30\tpermit\n72.30.236.212/31\tpermit\n72.30.236.224/30\tpermit\n72.30.236.228/31\tpermit\n72.30.236.244/30\tpermit\n72.30.236.248/31\tpermit\n72.30.237.32/30\tpermit\n72.30.237.36/31\tpermit\n72.30.237.52/30\tpermit\n72.30.237.56/31\tpermit\n72.30.237.80/31\tpermit\n72.30.237.96/30\tpermit\n72.30.237.100/31\tpermit\n72.30.237.116/30\tpermit\n72.30.237.120/31\tpermit\n72.30.237.144/30\tpermit\n72.30.237.148/31\tpermit\n72.30.237.160/30\tpermit\n72.30.237.164/31\tpermit\n72.30.237.180/30\tpermit\n72.30.237.184/31\tpermit\n72.30.237.204/30\tpermit\n72.30.238.116/30\tpermit\n72.30.238.120/31\tpermit\n72.30.238.128\tpermit\n72.30.238.133\tpermit\n72.30.238.168/30\tpermit\n72.30.238.172/31\tpermit\n72.30.238.188/30\tpermit\n72.30.238.192\tpermit\n72.30.238.197\tpermit\n72.30.238.224/31\tpermit\n72.30.238.240/30\tpermit\n72.30.238.244/31\tpermit\n72.30.239.5\tpermit\n72.30.239.37\tpermit\n72.30.239.38/31\tpermit\n72.30.239.40/31\tpermit\n72.30.239.42\tpermit\n72.30.239.57\tpermit\n72.30.239.64\tpermit\n72.30.239.69\tpermit\n72.30.239.89\tpermit\n72.30.239.90/31\tpermit\n72.30.239.92/31\tpermit\n72.30.239.94\tpermit\n72.30.239.128\tpermit\n72.30.239.198\tpermit\n72.30.239.224/30\tpermit\n72.30.239.228/31\tpermit\n72.30.239.244/30\tpermit\n72.30.239.248/31\tpermit\n72.32.154.0/24\tpermit\n72.32.217.0/24\tpermit\n72.32.243.0/24\tpermit\n72.52.72.32/28\tpermit\n74.6.128.0/24\tpermit\n74.6.129.0/24\tpermit\n74.6.130.0/24\tpermit\n74.6.131.0/24\tpermit\n74.6.132.0/24\tpermit\n74.6.133.0/24\tpermit\n74.6.134.0/24\tpermit\n74.6.135.0/24\tpermit\n74.63.212.0/24\tpermit\n74.63.234.75\tpermit\n74.63.236.0/24\tpermit\n74.86.113.28/30\tpermit\n74.86.129.240/30\tpermit\n74.86.131.208/30\tpermit\n74.86.132.208/30\tpermit\n74.86.160.160/30\tpermit\n74.86.164.188/30\tpermit\n74.86.171.192/30\tpermit\n74.86.195.28/30\tpermit\n74.86.207.36/30\tpermit\n74.86.226.216/30\tpermit\n74.86.236.240/30\tpermit\n74.86.241.250/31\tpermit\n74.112.67.243\tpermit\n74.125.0.0/16\tpermit\n74.208.4.200\tpermit\n74.208.4.201\tpermit\n74.208.4.220\tpermit\n74.208.4.221\tpermit\n74.209.250.0/24\tpermit\n76.223.128.0/19\tpermit\n76.223.176.0/20\tpermit\n77.238.176.0/24\tpermit\n77.238.177.0/24\tpermit\n77.238.178.0/24\tpermit\n77.238.179.0/24\tpermit\n77.238.189.21\tpermit\n77.238.189.23\tpermit\n77.238.189.35\tpermit\n77.238.189.39\tpermit\n77.238.189.58/31\tpermit\n77.238.189.60/30\tpermit\n77.238.189.64/29\tpermit\n77.238.189.76/31\tpermit\n77.238.189.128/30\tpermit\n77.238.189.132/31\tpermit\n77.238.189.137\tpermit\n77.238.189.138/31\tpermit\n77.238.189.140/31\tpermit\n77.238.189.142\tpermit\n77.238.189.146/31\tpermit\n77.238.189.148/30\tpermit\n79.135.106.0/24\tpermit\n79.135.107.0/24\tpermit\n81.169.146.243\tpermit\n81.169.146.245\tpermit\n81.169.146.246\tpermit\n81.223.46.0/27\tpermit\n82.165.159.2\tpermit\n82.165.159.3\tpermit\n82.165.159.4\tpermit\n82.165.159.12\tpermit\n82.165.159.13\tpermit\n82.165.159.14\tpermit\n82.165.159.34\tpermit\n82.165.159.35\tpermit\n82.165.159.40\tpermit\n82.165.159.41\tpermit\n82.165.159.42\tpermit\n82.165.159.45\tpermit\n82.165.159.130\tpermit\n82.165.159.131\tpermit\n85.9.206.169\tpermit\n85.9.210.45\tpermit\n85.158.136.0/21\tpermit\n85.215.255.39\tpermit\n85.215.255.40\tpermit\n85.215.255.41\tpermit\n85.215.255.45\tpermit\n85.215.255.46\tpermit\n85.215.255.47\tpermit\n85.215.255.48\tpermit\n85.215.255.49\tpermit\n86.61.88.25\tpermit\n87.238.80.0/21\tpermit\n87.248.103.12\tpermit\n87.248.103.21\tpermit\n87.248.103.23\tpermit\n87.248.103.27\tpermit\n87.248.103.29\tpermit\n87.248.103.36\tpermit\n87.248.103.42/31\tpermit\n87.248.103.44\tpermit\n87.248.103.64\tpermit\n87.248.103.76\tpermit\n87.248.103.83\tpermit\n87.248.103.92/31\tpermit\n87.248.103.94\tpermit\n87.248.103.107\tpermit\n87.248.103.113\tpermit\n87.248.103.122\tpermit\n87.248.110.0/24\tpermit\n87.248.117.30\tpermit\n87.248.117.65\tpermit\n87.248.117.67\tpermit\n87.248.117.70\tpermit\n87.248.117.73\tpermit\n87.248.117.74\tpermit\n87.248.117.86\tpermit\n87.248.117.97\tpermit\n87.248.117.98\tpermit\n87.248.117.104\tpermit\n87.248.117.119\tpermit\n87.248.117.124\tpermit\n87.248.117.185\tpermit\n87.248.117.196\tpermit\n87.248.117.198\tpermit\n87.248.117.201\tpermit\n87.248.117.202\tpermit\n87.248.117.205\tpermit\n87.253.232.0/21\tpermit\n89.22.108.0/24\tpermit\n91.198.2.177\tpermit\n91.198.2.217\tpermit\n91.198.2.222\tpermit\n91.211.240.0/22\tpermit\n94.236.119.0/26\tpermit\n95.131.104.0/21\tpermit\n95.217.114.154\tpermit\n96.43.144.0/20\tpermit\n96.43.144.64/28\tpermit\n96.43.144.64/31\tpermit\n96.43.148.64/28\tpermit\n96.43.148.64/31\tpermit\n96.43.151.64/28\tpermit\n98.97.248.0/21\tpermit\n98.136.44.181\tpermit\n98.136.44.182/31\tpermit\n98.136.44.184\tpermit\n98.136.164.36/31\tpermit\n98.136.164.64/29\tpermit\n98.136.164.72/30\tpermit\n98.136.164.76/31\tpermit\n98.136.164.78\tpermit\n98.136.172.32/30\tpermit\n98.136.172.36/31\tpermit\n98.136.185.29\tpermit\n98.136.185.42/31\tpermit\n98.136.185.46\tpermit\n98.136.185.115\tpermit\n98.136.214.28/30\tpermit\n98.136.214.97\tpermit\n98.136.214.98/31\tpermit\n98.136.214.100\tpermit\n98.136.214.116/30\tpermit\n98.136.214.120/31\tpermit\n98.136.214.157\tpermit\n98.136.214.158/31\tpermit\n98.136.214.160/31\tpermit\n98.136.214.162\tpermit\n98.136.214.190/31\tpermit\n98.136.214.192/30\tpermit\n98.136.214.238/31\tpermit\n98.136.214.255\tpermit\n98.136.215.0/31\tpermit\n98.136.215.2\tpermit\n98.136.215.3\tpermit\n98.136.215.4/31\tpermit\n98.136.215.6\tpermit\n98.136.215.114/31\tpermit\n98.136.215.116/31\tpermit\n98.136.215.118\tpermit\n98.136.215.136/30\tpermit\n98.136.215.148/30\tpermit\n98.136.215.152/31\tpermit\n98.136.215.179\tpermit\n98.136.215.180/30\tpermit\n98.136.215.184\tpermit\n98.136.215.208/30\tpermit\n98.136.215.212/31\tpermit\n98.136.217.1\tpermit\n98.136.217.2\tpermit\n98.136.217.3\tpermit\n98.136.217.4/30\tpermit\n98.136.217.8/31\tpermit\n98.136.217.10/31\tpermit\n98.136.217.12/30\tpermit\n98.136.217.16/30\tpermit\n98.136.217.20/30\tpermit\n98.136.218.39\tpermit\n98.136.218.40/29\tpermit\n98.136.218.48/28\tpermit\n98.136.218.67\tpermit\n98.136.218.68/30\tpermit\n98.136.218.72/30\tpermit\n98.137.12.48/30\tpermit\n98.137.12.52/31\tpermit\n98.137.12.54\tpermit\n98.137.12.177\tpermit\n98.137.12.178/31\tpermit\n98.137.12.180/31\tpermit\n98.137.12.182\tpermit\n98.137.12.192/27\tpermit\n98.137.12.224/28\tpermit\n98.137.12.240/29\tpermit\n98.137.12.248/30\tpermit\n98.137.12.252/31\tpermit\n98.137.12.254\tpermit\n98.137.13.81\tpermit\n98.137.13.82\tpermit\n98.137.13.87\tpermit\n98.137.13.88\tpermit\n98.137.13.91\tpermit\n98.137.13.92\tpermit\n98.137.13.97\tpermit\n98.137.13.98\tpermit\n98.137.13.101\tpermit\n98.137.13.102\tpermit\n98.137.13.107\tpermit\n98.137.13.108\tpermit\n98.137.13.111\tpermit\n98.137.13.112\tpermit\n98.137.13.117\tpermit\n98.137.13.118\tpermit\n98.137.13.121\tpermit\n98.137.13.122\tpermit\n98.137.13.127\tpermit\n98.137.13.128\tpermit\n98.137.13.131\tpermit\n98.137.13.132\tpermit\n98.137.13.137\tpermit\n98.137.13.138\tpermit\n98.137.64.0/24\tpermit\n98.137.65.0/24\tpermit\n98.137.66.0/24\tpermit\n98.137.67.0/24\tpermit\n98.137.68.0/24\tpermit\n98.137.69.0/24\tpermit\n98.137.70.0/24\tpermit\n98.137.71.0/24\tpermit\n98.137.176.58/31\tpermit\n98.137.177.247\tpermit\n98.138.31.128/30\tpermit\n98.138.31.132/31\tpermit\n98.138.31.192/30\tpermit\n98.138.31.196/31\tpermit\n98.138.31.202/31\tpermit\n98.138.31.204/30\tpermit\n98.138.31.232/30\tpermit\n98.138.31.236/31\tpermit\n98.138.82.208/30\tpermit\n98.138.82.212/31\tpermit\n98.138.83.176/31\tpermit\n98.138.83.179\tpermit\n98.138.83.180/31\tpermit\n98.138.84.37\tpermit\n98.138.84.38/31\tpermit\n98.138.84.40/29\tpermit\n98.138.85.128/30\tpermit\n98.138.85.132/31\tpermit\n98.138.85.148/30\tpermit\n98.138.85.152/31\tpermit\n98.138.85.168/30\tpermit\n98.138.85.172/31\tpermit\n98.138.85.188/30\tpermit\n98.138.85.192/31\tpermit\n98.138.85.208/30\tpermit\n98.138.85.212/31\tpermit\n98.138.85.228/30\tpermit\n98.138.85.232/31\tpermit\n98.138.85.248/30\tpermit\n98.138.85.252/31\tpermit\n98.138.86.69\tpermit\n98.138.86.156/31\tpermit\n98.138.86.192/30\tpermit\n98.138.86.196/31\tpermit\n98.138.87.1\tpermit\n98.138.87.2/31\tpermit\n98.138.87.4/31\tpermit\n98.138.87.6\tpermit\n98.138.87.7\tpermit\n98.138.87.8/31\tpermit\n98.138.87.10/31\tpermit\n98.138.87.12\tpermit\n98.138.87.16/30\tpermit\n98.138.87.64/30\tpermit\n98.138.87.68/31\tpermit\n98.138.87.73\tpermit\n98.138.87.74/31\tpermit\n98.138.87.76/31\tpermit\n98.138.87.78\tpermit\n98.138.87.144/30\tpermit\n98.138.87.148/31\tpermit\n98.138.87.192/30\tpermit\n98.138.87.196/31\tpermit\n98.138.88.105\tpermit\n98.138.88.106\tpermit\n98.138.88.128/30\tpermit\n98.138.88.132/31\tpermit\n98.138.88.148/30\tpermit\n98.138.88.152/31\tpermit\n98.138.88.232/29\tpermit\n98.138.89.160/28\tpermit\n98.138.89.192/29\tpermit\n98.138.89.232/31\tpermit\n98.138.89.234\tpermit\n98.138.89.240\tpermit\n98.138.89.244/31\tpermit\n98.138.89.246\tpermit\n98.138.89.248/30\tpermit\n98.138.89.252/31\tpermit\n98.138.89.254\tpermit\n98.138.90.64/28\tpermit\n98.138.90.80/29\tpermit\n98.138.90.88/30\tpermit\n98.138.90.92/31\tpermit\n98.138.90.95\tpermit\n98.138.90.96/30\tpermit\n98.138.90.100\tpermit\n98.138.90.104/30\tpermit\n98.138.90.108/31\tpermit\n98.138.90.113\tpermit\n98.138.90.114/31\tpermit\n98.138.90.116/31\tpermit\n98.138.90.118\tpermit\n98.138.90.122/31\tpermit\n98.138.90.124/30\tpermit\n98.138.90.131\tpermit\n98.138.90.132/30\tpermit\n98.138.90.136\tpermit\n98.138.91.1\tpermit\n98.138.91.2/31\tpermit\n98.138.91.4/31\tpermit\n98.138.91.6\tpermit\n98.138.100.220/30\tpermit\n98.138.100.224/30\tpermit\n98.138.100.228/31\tpermit\n98.138.101.160/28\tpermit\n98.138.101.176/29\tpermit\n98.138.104.96/30\tpermit\n98.138.104.100\tpermit\n98.138.104.112/30\tpermit\n98.138.104.116\tpermit\n98.138.120.36/30\tpermit\n98.138.120.48/28\tpermit\n98.138.197.46/31\tpermit\n98.138.197.48/30\tpermit\n98.138.197.169\tpermit\n98.138.197.176\tpermit\n98.138.197.180\tpermit\n98.138.198.52/31\tpermit\n98.138.198.54\tpermit\n98.138.198.56\tpermit\n98.138.198.61\tpermit\n98.138.198.190/31\tpermit\n98.138.198.239\tpermit\n98.138.199.6\tpermit\n98.138.199.9\tpermit\n98.138.199.48\tpermit\n98.138.199.83\tpermit\n98.138.199.84\tpermit\n98.138.199.86/31\tpermit\n98.138.199.94\tpermit\n98.138.199.116\tpermit\n98.138.199.208/30\tpermit\n98.138.199.212/31\tpermit\n98.138.199.218/31\tpermit\n98.138.199.220/30\tpermit\n98.138.199.236\tpermit\n98.138.206.67\tpermit\n98.138.206.73\tpermit\n98.138.206.143\tpermit\n98.138.206.167\tpermit\n98.138.206.169\tpermit\n98.138.206.173\tpermit\n98.138.207.9\tpermit\n98.138.207.10/31\tpermit\n98.138.207.12/31\tpermit\n98.138.207.14\tpermit\n98.138.210.39\tpermit\n98.138.210.64/30\tpermit\n98.138.210.68/31\tpermit\n98.138.210.74/31\tpermit\n98.138.210.76/30\tpermit\n98.138.210.84\tpermit\n98.138.210.86\tpermit\n98.138.210.89\tpermit\n98.138.210.93\tpermit\n98.138.210.94\tpermit\n98.138.210.96\tpermit\n98.138.210.98\tpermit\n98.138.210.101\tpermit\n98.138.210.111\tpermit\n98.138.210.115\tpermit\n98.138.210.122\tpermit\n98.138.210.136\tpermit\n98.138.210.146\tpermit\n98.138.210.148\tpermit\n98.138.210.155\tpermit\n98.138.210.158/31\tpermit\n98.138.210.166\tpermit\n98.138.210.169\tpermit\n98.138.210.175\tpermit\n98.138.210.177\tpermit\n98.138.210.181\tpermit\n98.138.210.182/31\tpermit\n98.138.210.187\tpermit\n98.138.210.189\tpermit\n98.138.210.201\tpermit\n98.138.210.203\tpermit\n98.138.210.210\tpermit\n98.138.210.240/30\tpermit\n98.138.210.244/31\tpermit\n98.138.211.122/31\tpermit\n98.138.211.124/30\tpermit\n98.138.211.128/30\tpermit\n98.138.211.132/31\tpermit\n98.138.211.148/30\tpermit\n98.138.211.152/31\tpermit\n98.138.211.216/30\tpermit\n98.138.211.220/31\tpermit\n98.138.213.128/30\tpermit\n98.138.213.132/31\tpermit\n98.138.213.138/31\tpermit\n98.138.213.140/30\tpermit\n98.138.213.148/30\tpermit\n98.138.213.152/31\tpermit\n98.138.213.158/31\tpermit\n98.138.213.160/30\tpermit\n98.138.213.168/30\tpermit\n98.138.213.172/31\tpermit\n98.138.213.237\tpermit\n98.138.213.238/31\tpermit\n98.138.213.240/31\tpermit\n98.138.213.242\tpermit\n98.138.215.12/30\tpermit\n98.138.215.16/28\tpermit\n98.138.217.216/30\tpermit\n98.138.217.220/31\tpermit\n98.138.226.30/31\tpermit\n98.138.226.56/29\tpermit\n98.138.226.64/30\tpermit\n98.138.226.68/31\tpermit\n98.138.226.74/31\tpermit\n98.138.226.76/30\tpermit\n98.138.226.84/30\tpermit\n98.138.226.88/31\tpermit\n98.138.226.124/30\tpermit\n98.138.226.128/30\tpermit\n98.138.226.132/31\tpermit\n98.138.226.160/29\tpermit\n98.138.226.168/31\tpermit\n98.138.226.240/30\tpermit\n98.138.226.244\tpermit\n98.138.227.32/30\tpermit\n98.138.227.36/31\tpermit\n98.138.227.56/30\tpermit\n98.138.227.60/31\tpermit\n98.138.227.80/30\tpermit\n98.138.227.84/31\tpermit\n98.138.227.104/30\tpermit\n98.138.227.108/31\tpermit\n98.138.227.128/30\tpermit\n98.138.227.132/31\tpermit\n98.138.229.24/29\tpermit\n98.138.229.32/31\tpermit\n98.138.229.122/31\tpermit\n98.138.229.138/31\tpermit\n98.138.229.154/31\tpermit\n98.138.229.170/31\tpermit\n98.139.164.96/30\tpermit\n98.139.164.100/30\tpermit\n98.139.164.104/29\tpermit\n98.139.164.112/30\tpermit\n98.139.172.112/30\tpermit\n98.139.172.116/31\tpermit\n98.139.175.65\tpermit\n98.139.175.66/31\tpermit\n98.139.175.68/30\tpermit\n98.139.175.72/29\tpermit\n98.139.175.80/29\tpermit\n98.139.175.88/30\tpermit\n98.139.175.92/31\tpermit\n98.139.175.94\tpermit\n98.139.210.112/30\tpermit\n98.139.210.128/30\tpermit\n98.139.210.132/31\tpermit\n98.139.210.138/31\tpermit\n98.139.210.140/30\tpermit\n98.139.210.148/30\tpermit\n98.139.210.152/31\tpermit\n98.139.210.170/31\tpermit\n98.139.210.172/30\tpermit\n98.139.210.180/30\tpermit\n98.139.210.184/31\tpermit\n98.139.210.190/31\tpermit\n98.139.210.192/30\tpermit\n98.139.210.196/31\tpermit\n98.139.210.202/31\tpermit\n98.139.210.204/30\tpermit\n98.139.211.160/30\tpermit\n98.139.211.192/28\tpermit\n98.139.212.160/28\tpermit\n98.139.212.176/29\tpermit\n98.139.212.184/30\tpermit\n98.139.212.188/31\tpermit\n98.139.212.192/27\tpermit\n98.139.212.224/28\tpermit\n98.139.212.240/29\tpermit\n98.139.212.248/30\tpermit\n98.139.213.8/31\tpermit\n98.139.213.10/31\tpermit\n98.139.213.12/30\tpermit\n98.139.214.155\tpermit\n98.139.214.156/30\tpermit\n98.139.214.221\tpermit\n98.139.215.228/31\tpermit\n98.139.215.230\tpermit\n98.139.215.248/30\tpermit\n98.139.215.252/31\tpermit\n98.139.215.254\tpermit\n98.139.218.53\tpermit\n98.139.218.61\tpermit\n98.139.218.63\tpermit\n98.139.219.128\tpermit\n98.139.219.138\tpermit\n98.139.219.159\tpermit\n98.139.219.177\tpermit\n98.139.219.184\tpermit\n98.139.219.193\tpermit\n98.139.219.194\tpermit\n98.139.219.196\tpermit\n98.139.219.203\tpermit\n98.139.219.209\tpermit\n98.139.219.215\tpermit\n98.139.219.216/31\tpermit\n98.139.219.231\tpermit\n98.139.220.43\tpermit\n98.139.220.50\tpermit\n98.139.220.57\tpermit\n98.139.220.63\tpermit\n98.139.220.71\tpermit\n98.139.220.73\tpermit\n98.139.220.85\tpermit\n98.139.220.96\tpermit\n98.139.220.100\tpermit\n98.139.220.103\tpermit\n98.139.220.104\tpermit\n98.139.220.106/31\tpermit\n98.139.220.110/31\tpermit\n98.139.220.112/31\tpermit\n98.139.220.144\tpermit\n98.139.220.152\tpermit\n98.139.220.157\tpermit\n98.139.220.158\tpermit\n98.139.220.163\tpermit\n98.139.220.164\tpermit\n98.139.220.170\tpermit\n98.139.220.182\tpermit\n98.139.220.187\tpermit\n98.139.220.189\tpermit\n98.139.220.193\tpermit\n98.139.220.198\tpermit\n98.139.220.203\tpermit\n98.139.220.208/31\tpermit\n98.139.220.212\tpermit\n98.139.220.214/31\tpermit\n98.139.220.219\tpermit\n98.139.220.223\tpermit\n98.139.220.232\tpermit\n98.139.220.238\tpermit\n98.139.220.243\tpermit\n98.139.220.245\tpermit\n98.139.220.253\tpermit\n98.139.221.43\tpermit\n98.139.221.60/30\tpermit\n98.139.221.156/30\tpermit\n98.139.221.232/30\tpermit\n98.139.221.236/31\tpermit\n98.139.221.250\tpermit\n98.139.244.47\tpermit\n98.139.244.49\tpermit\n98.139.244.50/31\tpermit\n98.139.244.52/30\tpermit\n98.139.244.57\tpermit\n98.139.244.58/31\tpermit\n98.139.244.60/31\tpermit\n98.139.244.62\tpermit\n98.139.244.132\tpermit\n98.139.244.141\tpermit\n98.139.244.142/31\tpermit\n98.139.244.144/31\tpermit\n98.139.244.146\tpermit\n98.139.244.152\tpermit\n98.139.244.161\tpermit\n98.139.244.162/31\tpermit\n98.139.244.164/31\tpermit\n98.139.244.166\tpermit\n98.139.244.172\tpermit\n98.139.244.181\tpermit\n98.139.244.182/31\tpermit\n98.139.244.184/31\tpermit\n98.139.244.186\tpermit\n98.139.244.192\tpermit\n98.139.244.201\tpermit\n98.139.244.202/31\tpermit\n98.139.244.204/31\tpermit\n98.139.244.206\tpermit\n98.139.244.212\tpermit\n98.139.244.221\tpermit\n98.139.244.222/31\tpermit\n98.139.244.224/31\tpermit\n98.139.244.226\tpermit\n98.139.244.232\tpermit\n98.139.245.176/30\tpermit\n98.139.245.180/31\tpermit\n98.139.245.208/30\tpermit\n98.139.245.212/31\tpermit\n99.78.197.208/28\tpermit\n103.9.96.0/22\tpermit\n103.28.42.0/24\tpermit\n103.84.217.15\tpermit\n103.84.217.238\tpermit\n103.89.75.238\tpermit\n103.151.192.0/23\tpermit\n103.168.172.128/27\tpermit\n103.237.104.0/22\tpermit\n104.43.243.237\tpermit\n104.44.112.128/25\tpermit\n104.47.0.0/17\tpermit\n104.130.96.0/28\tpermit\n104.130.122.0/23\tpermit\n106.10.144.64/27\tpermit\n106.10.144.100/31\tpermit\n106.10.144.103\tpermit\n106.10.144.112/28\tpermit\n106.10.144.128\tpermit\n106.10.144.133\tpermit\n106.10.144.138\tpermit\n106.10.144.143\tpermit\n106.10.144.148\tpermit\n106.10.144.153\tpermit\n106.10.144.158\tpermit\n106.10.144.163\tpermit\n106.10.144.168\tpermit\n106.10.145.33\tpermit\n106.10.145.34/31\tpermit\n106.10.145.160/31\tpermit\n106.10.145.162\tpermit\n106.10.145.192/30\tpermit\n106.10.145.196/31\tpermit\n106.10.145.224/30\tpermit\n106.10.145.228/31\tpermit\n106.10.146.48/30\tpermit\n106.10.146.52/31\tpermit\n106.10.146.224/30\tpermit\n106.10.146.228/31\tpermit\n106.10.148.48/30\tpermit\n106.10.148.52/31\tpermit\n106.10.148.68/30\tpermit\n106.10.148.80/28\tpermit\n106.10.148.100/30\tpermit\n106.10.148.124/31\tpermit\n106.10.148.252/31\tpermit\n106.10.148.254\tpermit\n106.10.149.28/31\tpermit\n106.10.149.30\tpermit\n106.10.149.160/30\tpermit\n106.10.149.164/31\tpermit\n106.10.150.23\tpermit\n106.10.150.24/30\tpermit\n106.10.150.28/31\tpermit\n106.10.150.32/30\tpermit\n106.10.150.36/31\tpermit\n106.10.150.52/30\tpermit\n106.10.150.56/31\tpermit\n106.10.150.72/30\tpermit\n106.10.150.76/31\tpermit\n106.10.150.92/30\tpermit\n106.10.150.96/31\tpermit\n106.10.150.112/30\tpermit\n106.10.150.116/31\tpermit\n106.10.150.132/30\tpermit\n106.10.150.136/31\tpermit\n106.10.150.172/30\tpermit\n106.10.151.15\tpermit\n106.10.151.16/31\tpermit\n106.10.151.18\tpermit\n106.10.151.19\tpermit\n106.10.151.20\tpermit\n106.10.151.21\tpermit\n106.10.151.22/31\tpermit\n106.10.151.24/31\tpermit\n106.10.151.26/31\tpermit\n106.10.151.28/30\tpermit\n106.10.151.122/31\tpermit\n106.10.151.138/31\tpermit\n106.10.151.154/31\tpermit\n106.10.151.170/31\tpermit\n106.10.151.186/31\tpermit\n106.10.151.202/31\tpermit\n106.10.151.218/31\tpermit\n106.10.151.234/31\tpermit\n106.10.151.239\tpermit\n106.10.151.250/31\tpermit\n106.10.151.252/31\tpermit\n106.10.151.254\tpermit\n106.10.167.72\tpermit\n106.10.167.128/27\tpermit\n106.10.167.160/28\tpermit\n106.10.167.176/31\tpermit\n106.10.167.244/31\tpermit\n106.10.167.246\tpermit\n106.10.169.16/30\tpermit\n106.10.169.20\tpermit\n106.10.169.21\tpermit\n106.10.169.208/31\tpermit\n106.10.169.210/31\tpermit\n106.10.169.233\tpermit\n106.10.169.234/31\tpermit\n106.10.169.236/31\tpermit\n106.10.169.238\tpermit\n106.10.169.253\tpermit\n106.10.169.254\tpermit\n106.10.174.118/31\tpermit\n106.10.174.120/30\tpermit\n106.10.174.154/31\tpermit\n106.10.174.156/30\tpermit\n106.10.176.32/29\tpermit\n106.10.176.48\tpermit\n106.10.176.112\tpermit\n106.10.176.128/29\tpermit\n106.10.176.136\tpermit\n106.10.176.255\tpermit\n106.10.177.0\tpermit\n106.10.177.108/30\tpermit\n106.10.177.128/30\tpermit\n106.10.177.184/30\tpermit\n106.10.177.188/31\tpermit\n106.10.177.217\tpermit\n106.10.177.218/31\tpermit\n106.10.177.220/31\tpermit\n106.10.177.222\tpermit\n106.10.196.43\tpermit\n106.10.196.44/30\tpermit\n106.10.196.48\tpermit\n106.10.240.0/24\tpermit\n106.10.241.0/24\tpermit\n106.10.242.0/24\tpermit\n106.10.243.0/24\tpermit\n106.10.244.0/24\tpermit\n106.39.212.64/29\tpermit\n106.50.16.0/28\tpermit\n107.20.18.111\tpermit\n107.20.210.250\tpermit\n107.22.191.150\tpermit\n108.174.0.0/24\tpermit\n108.174.0.215\tpermit\n108.174.3.0/24\tpermit\n108.174.3.215\tpermit\n108.174.6.0/24\tpermit\n108.174.6.215\tpermit\n108.175.18.45\tpermit\n108.175.30.45\tpermit\n108.179.144.0/20\tpermit\n109.224.244.0/24\tpermit\n109.237.142.0/24\tpermit\n112.19.199.64/29\tpermit\n112.19.242.64/29\tpermit\n116.214.12.47\tpermit\n116.214.12.48/31\tpermit\n116.214.12.56/31\tpermit\n116.214.12.58\tpermit\n116.214.12.73\tpermit\n116.214.12.74/31\tpermit\n116.214.12.76/31\tpermit\n116.214.12.78\tpermit\n116.214.12.93\tpermit\n116.214.12.94/31\tpermit\n116.214.12.96/31\tpermit\n116.214.12.98\tpermit\n117.120.16.0/21\tpermit\n119.42.242.52/31\tpermit\n119.42.242.156\tpermit\n121.244.91.48\tpermit\n121.244.91.52\tpermit\n122.15.156.182\tpermit\n123.126.78.64/29\tpermit\n124.108.96.24/31\tpermit\n124.108.96.28/31\tpermit\n124.108.96.70/31\tpermit\n124.108.96.72/31\tpermit\n128.17.0.0/20\tpermit\n128.17.64.0/20\tpermit\n128.17.128.0/20\tpermit\n128.17.192.0/20\tpermit\n128.127.70.0/26\tpermit\n128.245.0.0/20\tpermit\n128.245.64.0/20\tpermit\n128.245.176.0/20\tpermit\n128.245.240.0/24\tpermit\n128.245.241.0/24\tpermit\n128.245.242.0/24\tpermit\n128.245.242.16\tpermit\n128.245.242.17\tpermit\n128.245.242.18\tpermit\n128.245.243.0/24\tpermit\n128.245.244.0/24\tpermit\n128.245.245.0/24\tpermit\n128.245.246.0/24\tpermit\n128.245.247.0/24\tpermit\n128.245.248.0/21\tpermit\n129.41.77.70\tpermit\n129.41.169.249\tpermit\n129.77.16.0/20\tpermit\n129.80.5.164\tpermit\n129.80.64.36\tpermit\n129.80.67.121\tpermit\n129.80.145.156\tpermit\n129.145.74.12\tpermit\n129.146.88.28\tpermit\n129.146.147.105\tpermit\n129.146.236.58\tpermit\n129.151.67.221\tpermit\n129.153.62.216\tpermit\n129.153.104.71\tpermit\n129.153.168.146\tpermit\n129.153.190.200\tpermit\n129.153.194.228\tpermit\n129.154.255.129\tpermit\n129.158.56.255\tpermit\n129.158.62.153\tpermit\n129.159.22.159\tpermit\n129.159.87.137\tpermit\n129.213.195.191\tpermit\n130.61.9.72\tpermit\n130.162.39.83\tpermit\n130.248.172.0/24\tpermit\n130.248.173.0/24\tpermit\n131.253.30.0/24\tpermit\n131.253.121.0/26\tpermit\n132.145.13.209\tpermit\n132.226.26.225\tpermit\n132.226.49.32\tpermit\n132.226.56.24\tpermit\n134.128.64.0/19\tpermit\n134.128.96.0/19\tpermit\n134.170.27.8\tpermit\n134.170.113.0/26\tpermit\n134.170.141.64/26\tpermit\n134.170.143.0/24\tpermit\n134.170.174.0/24\tpermit\n135.84.80.0/24\tpermit\n135.84.81.0/24\tpermit\n135.84.82.0/24\tpermit\n135.84.83.0/24\tpermit\n135.84.216.0/22\tpermit\n136.143.160.0/24\tpermit\n136.143.161.0/24\tpermit\n136.143.162.0/24\tpermit\n136.143.176.0/24\tpermit\n136.143.177.0/24\tpermit\n136.143.178.49\tpermit\n136.143.182.0/23\tpermit\n136.143.184.0/24\tpermit\n136.143.188.0/24\tpermit\n136.143.190.0/23\tpermit\n136.146.128.0/20\tpermit\n136.147.128.0/20\tpermit\n136.147.135.0/24\tpermit\n136.147.176.0/20\tpermit\n136.147.176.0/24\tpermit\n136.147.182.0/24\tpermit\n136.147.224.0/20\tpermit\n136.179.50.206\tpermit\n139.60.152.0/22\tpermit\n139.138.35.44\tpermit\n139.138.46.121\tpermit\n139.138.46.176\tpermit\n139.138.46.219\tpermit\n139.138.57.55\tpermit\n139.138.58.119\tpermit\n139.167.79.86\tpermit\n139.180.17.0/24\tpermit\n140.238.148.191\tpermit\n141.148.55.217\tpermit\n141.148.91.244\tpermit\n141.148.159.229\tpermit\n141.193.32.0/23\tpermit\n141.193.184.32/27\tpermit\n141.193.184.64/26\tpermit\n141.193.184.128/25\tpermit\n141.193.185.32/27\tpermit\n141.193.185.64/26\tpermit\n141.193.185.128/25\tpermit\n143.47.120.152\tpermit\n143.55.224.0/21\tpermit\n143.55.232.0/22\tpermit\n143.55.236.0/22\tpermit\n143.244.80.0/20\tpermit\n144.24.6.140\tpermit\n144.34.8.247\tpermit\n144.34.9.247\tpermit\n144.34.32.247\tpermit\n144.34.33.247\tpermit\n144.178.36.0/24\tpermit\n144.178.38.0/24\tpermit\n145.253.228.160/29\tpermit\n145.253.239.128/29\tpermit\n146.20.14.104\tpermit\n146.20.14.105\tpermit\n146.20.14.106\tpermit\n146.20.14.107\tpermit\n146.20.112.0/26\tpermit\n146.20.113.0/24\tpermit\n146.20.191.0/24\tpermit\n146.20.215.0/24\tpermit\n146.20.215.182\tpermit\n146.88.28.0/24\tpermit\n146.148.116.76\tpermit\n147.154.32.0/25\tpermit\n147.243.1.47\tpermit\n147.243.1.48\tpermit\n147.243.1.153\tpermit\n147.243.128.24\tpermit\n147.243.128.26\tpermit\n148.105.0.0/16\tpermit\n148.105.8.0/21\tpermit\n149.72.0.0/16\tpermit\n149.72.234.184\tpermit\n149.72.248.236\tpermit\n149.97.173.180\tpermit\n150.136.21.199\tpermit\n150.230.98.160\tpermit\n151.145.38.14\tpermit\n152.67.105.195\tpermit\n152.69.200.236\tpermit\n152.70.155.126\tpermit\n155.248.208.51\tpermit\n155.248.220.138\tpermit\n155.248.234.149\tpermit\n155.248.237.141\tpermit\n157.56.120.128/26\tpermit\n157.58.30.128/25\tpermit\n157.58.196.96/29\tpermit\n157.58.249.3\tpermit\n157.151.208.65\tpermit\n157.255.1.64/29\tpermit\n158.101.211.207\tpermit\n158.247.16.0/20\tpermit\n159.92.154.0/24\tpermit\n159.92.155.0/24\tpermit\n159.92.157.0/24\tpermit\n159.92.157.16\tpermit\n159.92.157.17\tpermit\n159.92.157.18\tpermit\n159.92.158.0/24\tpermit\n159.92.159.0/24\tpermit\n159.92.160.0/24\tpermit\n159.92.161.0/24\tpermit\n159.92.162.0/24\tpermit\n159.92.163.0/24\tpermit\n159.92.164.0/22\tpermit\n159.92.168.0/21\tpermit\n159.112.240.0/20\tpermit\n159.112.242.162\tpermit\n159.135.132.128/25\tpermit\n159.135.140.80/29\tpermit\n159.135.224.0/20\tpermit\n159.135.228.10\tpermit\n159.183.0.0/16\tpermit\n159.183.14.233\tpermit\n159.183.68.71\tpermit\n159.183.79.38\tpermit\n159.183.121.182\tpermit\n159.183.129.172\tpermit\n160.1.62.192\tpermit\n161.38.192.0/20\tpermit\n161.38.204.0/22\tpermit\n161.71.32.0/19\tpermit\n161.71.64.0/20\tpermit\n162.88.4.0/23\tpermit\n162.88.8.0/24\tpermit\n162.88.24.0/24\tpermit\n162.88.25.0/24\tpermit\n162.88.36.0/24\tpermit\n162.247.216.0/22\tpermit\n163.47.180.0/22\tpermit\n163.114.130.16\tpermit\n163.114.132.120\tpermit\n163.114.134.16\tpermit\n163.114.135.16\tpermit\n163.116.128.0/17\tpermit\n163.192.116.87\tpermit\n163.192.125.176\tpermit\n163.192.196.146\tpermit\n163.192.204.161\tpermit\n164.152.23.32\tpermit\n164.152.25.241\tpermit\n164.177.132.168/30\tpermit\n165.173.128.0/24\tpermit\n165.173.180.1\tpermit\n165.173.180.250/31\tpermit\n165.173.182.250/31\tpermit\n166.78.68.0/22\tpermit\n166.78.68.221\tpermit\n166.78.69.169\tpermit\n166.78.69.170\tpermit\n166.78.71.131\tpermit\n167.89.0.0/17\tpermit\n167.89.46.159\tpermit\n167.89.54.103\tpermit\n167.89.60.95\tpermit\n167.89.64.9\tpermit\n167.89.65.0\tpermit\n167.89.65.53\tpermit\n167.89.65.100\tpermit\n167.89.74.233\tpermit\n167.89.75.33\tpermit\n167.89.75.126\tpermit\n167.89.75.136\tpermit\n167.89.75.164\tpermit\n167.89.101.2\tpermit\n167.89.101.192/28\tpermit\n167.220.67.232/29\tpermit\n168.138.5.36\tpermit\n168.138.73.51\tpermit\n168.138.77.31\tpermit\n168.138.237.153\tpermit\n168.245.0.0/17\tpermit\n168.245.12.252\tpermit\n168.245.46.9\tpermit\n168.245.127.231\tpermit\n169.148.129.0/24\tpermit\n169.148.131.0/24\tpermit\n169.148.138.0/24\tpermit\n169.148.142.10\tpermit\n169.148.142.33\tpermit\n169.148.144.0/25\tpermit\n169.148.144.10\tpermit\n169.148.146.0/23\tpermit\n169.148.175.3\tpermit\n169.148.179.3\tpermit\n169.148.188.0/24\tpermit\n169.148.188.182\tpermit\n170.9.232.254\tpermit\n170.10.128.0/24\tpermit\n170.10.129.0/24\tpermit\n170.10.132.56/29\tpermit\n170.10.132.64/29\tpermit\n170.10.133.0/24\tpermit\n173.0.84.0/29\tpermit\n173.0.84.224/27\tpermit\n173.0.94.244/30\tpermit\n173.194.0.0/16\tpermit\n173.203.79.182\tpermit\n173.203.81.39\tpermit\n173.224.161.128/25\tpermit\n173.224.165.0/26\tpermit\n174.36.84.8/29\tpermit\n174.36.84.16/29\tpermit\n174.36.84.32/29\tpermit\n174.36.84.144/29\tpermit\n174.36.84.240/29\tpermit\n174.36.85.248/30\tpermit\n174.36.114.128/30\tpermit\n174.36.114.140/30\tpermit\n174.36.114.148/30\tpermit\n174.36.114.152/29\tpermit\n174.37.67.28/30\tpermit\n175.41.215.51\tpermit\n176.32.105.0/24\tpermit\n176.32.127.0/24\tpermit\n178.236.10.128/26\tpermit\n182.50.76.0/22\tpermit\n182.50.78.64/28\tpermit\n183.240.219.64/29\tpermit\n185.4.120.0/22\tpermit\n185.11.255.144\tpermit\n185.12.80.0/22\tpermit\n185.28.196.0/22\tpermit\n185.58.84.93\tpermit\n185.70.40.0/24\tpermit\n185.70.41.0/24\tpermit\n185.70.43.0/24\tpermit\n185.80.93.204\tpermit\n185.80.93.227\tpermit\n185.80.95.31\tpermit\n185.90.20.0/22\tpermit\n185.138.56.128/25\tpermit\n185.189.236.0/22\tpermit\n185.211.120.0/22\tpermit\n185.233.188.68\tpermit\n185.233.188.75\tpermit\n185.233.188.84\tpermit\n185.233.188.160\tpermit\n185.233.188.176\tpermit\n185.233.188.247\tpermit\n185.233.189.44\tpermit\n185.233.189.98\tpermit\n185.233.189.122\tpermit\n185.233.189.228\tpermit\n185.250.236.0/22\tpermit\n185.250.239.148\tpermit\n185.250.239.168\tpermit\n185.250.239.190\tpermit\n188.125.68.132\tpermit\n188.125.68.152/31\tpermit\n188.125.68.156\tpermit\n188.125.68.163\tpermit\n188.125.68.172/31\tpermit\n188.125.68.176\tpermit\n188.125.68.179\tpermit\n188.125.68.184\tpermit\n188.125.68.186\tpermit\n188.125.68.192\tpermit\n188.125.69.105\tpermit\n188.125.69.110\tpermit\n188.125.69.112\tpermit\n188.125.69.120\tpermit\n188.125.69.126\tpermit\n188.125.69.131\tpermit\n188.125.69.132/31\tpermit\n188.125.69.137\tpermit\n188.125.69.139\tpermit\n188.125.69.144/30\tpermit\n188.125.69.148/31\tpermit\n188.125.83.88/30\tpermit\n188.125.83.92/31\tpermit\n188.125.83.96/30\tpermit\n188.125.83.100/31\tpermit\n188.125.83.116/30\tpermit\n188.125.83.120/31\tpermit\n188.125.83.140/30\tpermit\n188.125.83.144/31\tpermit\n188.125.83.160/30\tpermit\n188.125.83.164/31\tpermit\n188.125.84.32/30\tpermit\n188.125.84.36\tpermit\n188.125.84.122/31\tpermit\n188.125.84.124/30\tpermit\n188.125.84.244/30\tpermit\n188.125.84.248/31\tpermit\n188.125.85.116/30\tpermit\n188.125.85.120/31\tpermit\n188.125.85.130/31\tpermit\n188.125.85.132/30\tpermit\n188.125.85.202/31\tpermit\n188.125.85.204/31\tpermit\n188.125.85.206\tpermit\n188.125.85.233\tpermit\n188.125.85.234/31\tpermit\n188.125.85.236/31\tpermit\n188.125.85.238\tpermit\n188.165.51.139\tpermit\n188.172.128.0/20\tpermit\n192.0.64.0/18\tpermit\n192.18.139.154\tpermit\n192.18.145.36\tpermit\n192.18.152.58\tpermit\n192.28.128.0/18\tpermit\n192.29.103.128/25\tpermit\n192.30.252.0/22\tpermit\n192.161.144.0/20\tpermit\n192.162.87.0/24\tpermit\n192.237.158.0/23\tpermit\n192.237.159.42\tpermit\n192.237.159.43\tpermit\n192.254.112.0/20\tpermit\n192.254.112.60\tpermit\n192.254.112.98/31\tpermit\n192.254.113.10\tpermit\n192.254.113.101\tpermit\n192.254.114.176\tpermit\n193.109.254.0/23\tpermit\n193.122.128.100\tpermit\n193.123.56.63\tpermit\n193.142.157.15\tpermit\n193.142.157.125\tpermit\n193.142.157.158\tpermit\n193.142.157.191\tpermit\n193.142.157.198\tpermit\n194.19.134.0/25\tpermit\n194.25.134.16/28\tpermit\n194.25.134.80/28\tpermit\n194.64.234.129\tpermit\n194.97.196.0/24\tpermit\n194.97.196.3\tpermit\n194.97.196.4\tpermit\n194.97.196.11\tpermit\n194.97.196.12\tpermit\n194.97.204.0/24\tpermit\n194.97.204.3\tpermit\n194.97.204.4\tpermit\n194.97.204.11\tpermit\n194.97.204.12\tpermit\n194.97.212.0/24\tpermit\n194.97.212.3\tpermit\n194.97.212.4\tpermit\n194.97.212.11\tpermit\n194.97.212.12\tpermit\n194.106.220.0/23\tpermit\n194.113.24.0/22\tpermit\n194.113.42.0/26\tpermit\n194.154.193.192/27\tpermit\n195.4.92.0/23\tpermit\n195.54.172.0/23\tpermit\n195.234.109.226\tpermit\n195.245.230.0/23\tpermit\n198.2.128.0/18\tpermit\n198.21.0.0/21\tpermit\n198.37.144.0/20\tpermit\n198.37.152.186\tpermit\n198.61.254.0/23\tpermit\n198.61.254.21\tpermit\n198.61.254.231\tpermit\n198.178.234.57\tpermit\n198.202.211.1\tpermit\n198.244.48.0/20\tpermit\n198.244.56.107\tpermit\n198.244.56.108\tpermit\n198.244.56.109\tpermit\n198.244.56.111\tpermit\n198.244.56.112\tpermit\n198.244.56.113\tpermit\n198.244.56.114\tpermit\n198.244.56.115\tpermit\n198.244.59.30\tpermit\n198.244.59.33\tpermit\n198.244.59.35\tpermit\n198.244.60.0/22\tpermit\n198.245.80.0/20\tpermit\n198.245.81.0/24\tpermit\n199.15.212.0/22\tpermit\n199.15.213.187\tpermit\n199.15.226.37\tpermit\n199.16.156.0/22\tpermit\n199.33.145.1\tpermit\n199.33.145.32\tpermit\n199.34.22.36\tpermit\n199.59.148.0/22\tpermit\n199.67.80.2\tpermit\n199.67.80.20\tpermit\n199.67.82.2\tpermit\n199.67.82.20\tpermit\n199.67.84.0/24\tpermit\n199.67.86.0/24\tpermit\n199.67.88.0/24\tpermit\n199.67.90.0/24\tpermit\n199.101.161.130\tpermit\n199.101.162.0/25\tpermit\n199.122.120.0/21\tpermit\n199.122.123.0/24\tpermit\n199.127.232.0/22\tpermit\n199.255.192.0/22\tpermit\n202.12.124.128/27\tpermit\n202.129.242.0/23\tpermit\n202.165.102.47\tpermit\n202.177.148.100\tpermit\n202.177.148.110\tpermit\n203.32.4.25\tpermit\n203.55.21.0/24\tpermit\n203.81.17.0/24\tpermit\n203.122.32.250\tpermit\n203.145.57.160/27\tpermit\n203.188.194.32\tpermit\n203.188.194.151\tpermit\n203.188.194.203\tpermit\n203.188.194.204\tpermit\n203.188.194.213\tpermit\n203.188.194.251\tpermit\n203.188.195.240/30\tpermit\n203.188.195.244/31\tpermit\n203.188.197.193\tpermit\n203.188.197.194/31\tpermit\n203.188.197.196/30\tpermit\n203.188.197.209\tpermit\n203.188.197.210/31\tpermit\n203.188.197.212/30\tpermit\n203.188.197.216/29\tpermit\n203.188.197.232/29\tpermit\n203.188.197.240/29\tpermit\n203.188.200.56/31\tpermit\n203.188.200.58\tpermit\n203.188.200.60/30\tpermit\n203.188.200.83\tpermit\n203.188.200.100/31\tpermit\n203.188.200.102\tpermit\n203.188.200.108/31\tpermit\n203.188.200.160/31\tpermit\n203.188.200.208/30\tpermit\n203.188.200.212/31\tpermit\n203.188.201.12/30\tpermit\n203.209.230.75\tpermit\n203.209.230.76/31\tpermit\n204.11.168.0/21\tpermit\n204.13.11.48/29\tpermit\n204.14.232.0/21\tpermit\n204.14.232.64/28\tpermit\n204.14.234.64/28\tpermit\n204.75.142.0/24\tpermit\n204.92.114.187\tpermit\n204.92.114.203\tpermit\n204.92.114.204/31\tpermit\n204.141.32.0/23\tpermit\n204.141.42.0/23\tpermit\n204.216.164.202\tpermit\n204.220.160.0/21\tpermit\n204.220.168.0/21\tpermit\n204.220.176.0/20\tpermit\n204.220.181.105\tpermit\n204.232.168.0/24\tpermit\n205.139.110.0/24\tpermit\n205.201.128.0/20\tpermit\n205.201.137.229\tpermit\n205.207.104.0/22\tpermit\n205.220.167.17\tpermit\n205.220.167.98\tpermit\n205.220.179.17\tpermit\n205.220.179.98\tpermit\n205.251.233.32\tpermit\n205.251.233.36\tpermit\n206.25.247.143\tpermit\n206.25.247.155\tpermit\n206.55.144.0/20\tpermit\n206.165.246.80/29\tpermit\n206.191.224.0/19\tpermit\n206.246.157.1\tpermit\n207.46.22.35\tpermit\n207.46.50.72\tpermit\n207.46.50.82\tpermit\n207.46.52.71\tpermit\n207.46.52.79\tpermit\n207.67.38.0/24\tpermit\n207.67.98.192/27\tpermit\n207.97.204.96/29\tpermit\n207.126.144.0/20\tpermit\n207.171.160.0/19\tpermit\n207.211.30.64/26\tpermit\n207.211.30.128/25\tpermit\n207.211.31.0/25\tpermit\n207.211.41.113\tpermit\n207.218.90.0/24\tpermit\n207.218.90.122\tpermit\n207.250.68.0/24\tpermit\n208.40.232.70\tpermit\n208.43.21.28/30\tpermit\n208.43.21.64/29\tpermit\n208.43.21.72/30\tpermit\n208.64.132.0/22\tpermit\n208.71.40.63\tpermit\n208.71.40.64/31\tpermit\n208.71.40.174/31\tpermit\n208.71.40.185\tpermit\n208.71.40.186/31\tpermit\n208.71.40.202/31\tpermit\n208.71.40.204/31\tpermit\n208.71.40.219\tpermit\n208.71.41.21\tpermit\n208.71.41.22/31\tpermit\n208.71.41.24/31\tpermit\n208.71.41.42/31\tpermit\n208.71.41.64/30\tpermit\n208.71.41.68/31\tpermit\n208.71.41.171\tpermit\n208.71.41.172/31\tpermit\n208.71.41.188/30\tpermit\n208.71.41.192/31\tpermit\n208.71.42.190/31\tpermit\n208.71.42.192/28\tpermit\n208.71.42.208/30\tpermit\n208.71.42.212/31\tpermit\n208.71.42.214\tpermit\n208.72.249.240/29\tpermit\n208.75.120.0/22\tpermit\n208.76.62.0/24\tpermit\n208.76.63.0/24\tpermit\n208.82.237.96/29\tpermit\n208.82.237.104/31\tpermit\n208.82.238.96/29\tpermit\n208.82.238.104/31\tpermit\n208.85.50.137\tpermit\n208.117.48.0/20\tpermit\n208.185.229.45\tpermit\n208.201.241.163\tpermit\n209.43.22.0/28\tpermit\n209.46.117.168\tpermit\n209.46.117.179\tpermit\n209.61.151.0/24\tpermit\n209.61.151.236\tpermit\n209.61.151.249\tpermit\n209.61.151.251\tpermit\n209.67.98.46\tpermit\n209.67.98.59\tpermit\n209.85.128.0/17\tpermit\n212.82.96.32/27\tpermit\n212.82.96.64/29\tpermit\n212.82.98.32/29\tpermit\n212.82.98.64/27\tpermit\n212.82.98.96/30\tpermit\n212.82.98.100/30\tpermit\n212.82.98.104/29\tpermit\n212.82.98.112/29\tpermit\n212.82.98.120/30\tpermit\n212.82.98.144/28\tpermit\n212.82.105.240/30\tpermit\n212.82.108.112/29\tpermit\n212.82.108.120/30\tpermit\n212.82.108.124/31\tpermit\n212.82.108.126\tpermit\n212.82.108.132/30\tpermit\n212.82.108.136/30\tpermit\n212.82.108.208/30\tpermit\n212.82.108.212/31\tpermit\n212.82.108.224/30\tpermit\n212.82.108.232/29\tpermit\n212.82.108.240/29\tpermit\n212.82.108.248/30\tpermit\n212.82.108.252/31\tpermit\n212.82.108.254\tpermit\n212.82.109.128/31\tpermit\n212.82.109.132\tpermit\n212.82.111.131\tpermit\n212.82.111.133\tpermit\n212.82.111.135\tpermit\n212.82.111.137\tpermit\n212.82.111.139\tpermit\n212.82.111.141\tpermit\n212.82.111.225\tpermit\n212.82.111.226/31\tpermit\n212.82.111.228/31\tpermit\n212.82.111.230\tpermit\n212.123.28.40\tpermit\n212.227.15.3\tpermit\n212.227.15.4\tpermit\n212.227.15.5\tpermit\n212.227.15.6\tpermit\n212.227.15.7\tpermit\n212.227.15.8\tpermit\n212.227.15.14\tpermit\n212.227.15.15\tpermit\n212.227.15.18\tpermit\n212.227.15.19\tpermit\n212.227.15.25\tpermit\n212.227.15.26\tpermit\n212.227.15.29\tpermit\n212.227.15.44\tpermit\n212.227.15.45\tpermit\n212.227.15.46\tpermit\n212.227.15.47\tpermit\n212.227.15.50\tpermit\n212.227.15.52\tpermit\n212.227.15.53\tpermit\n212.227.15.54\tpermit\n212.227.15.55\tpermit\n212.227.17.1\tpermit\n212.227.17.2\tpermit\n212.227.17.7\tpermit\n212.227.17.11\tpermit\n212.227.17.12\tpermit\n212.227.17.16\tpermit\n212.227.17.17\tpermit\n212.227.17.18\tpermit\n212.227.17.19\tpermit\n212.227.17.20\tpermit\n212.227.17.21\tpermit\n212.227.17.22\tpermit\n212.227.17.26\tpermit\n212.227.17.27\tpermit\n212.227.17.28\tpermit\n212.227.17.29\tpermit\n212.227.126.206\tpermit\n212.227.126.207\tpermit\n212.227.126.208\tpermit\n212.227.126.209\tpermit\n212.227.126.220\tpermit\n212.227.126.221\tpermit\n212.227.126.222\tpermit\n212.227.126.223\tpermit\n212.227.126.224\tpermit\n212.227.126.225\tpermit\n212.227.126.226\tpermit\n212.227.126.227\tpermit\n213.199.128.139\tpermit\n213.199.128.145\tpermit\n213.199.138.181\tpermit\n213.199.138.191\tpermit\n216.17.150.242\tpermit\n216.17.150.251\tpermit\n216.24.224.0/20\tpermit\n216.27.86.152/31\tpermit\n216.39.60.154/31\tpermit\n216.39.60.156/30\tpermit\n216.39.60.160/30\tpermit\n216.39.60.164\tpermit\n216.39.60.192/28\tpermit\n216.39.60.208/29\tpermit\n216.39.60.216\tpermit\n216.39.60.218\tpermit\n216.39.60.230/31\tpermit\n216.39.60.232/29\tpermit\n216.39.60.240/29\tpermit\n216.39.60.248/30\tpermit\n216.39.60.252/31\tpermit\n216.39.60.254\tpermit\n216.39.61.170\tpermit\n216.39.61.175\tpermit\n216.39.61.238/31\tpermit\n216.39.62.32/28\tpermit\n216.39.62.48/29\tpermit\n216.39.62.56/30\tpermit\n216.39.62.60/31\tpermit\n216.39.62.136/29\tpermit\n216.39.62.144/31\tpermit\n216.66.217.240/29\tpermit\n216.71.138.33\tpermit\n216.71.152.207\tpermit\n216.71.154.29\tpermit\n216.71.155.89\tpermit\n216.74.162.13\tpermit\n216.74.162.14\tpermit\n216.82.240.0/20\tpermit\n216.98.158.0/24\tpermit\n216.99.5.67\tpermit\n216.99.5.68\tpermit\n216.109.114.32/27\tpermit\n216.109.114.64/29\tpermit\n216.113.162.65\tpermit\n216.113.163.65\tpermit\n216.128.126.97\tpermit\n216.136.162.65\tpermit\n216.136.162.120/29\tpermit\n216.136.168.80/28\tpermit\n216.139.64.0/19\tpermit\n216.145.221.0/24\tpermit\n216.146.32.0/24\tpermit\n216.146.33.0/24\tpermit\n216.198.0.0/18\tpermit\n216.203.30.55\tpermit\n216.203.33.178/31\tpermit\n216.205.24.0/24\tpermit\n216.221.160.0/19\tpermit\n216.239.32.0/19\tpermit\n217.72.192.77\tpermit\n217.72.192.78\tpermit\n217.77.141.52\tpermit\n217.77.141.59\tpermit\n217.175.194.0/24\tpermit\n222.73.195.64/29\tpermit\n223.165.113.0/24\tpermit\n223.165.115.0/24\tpermit\n223.165.118.0/23\tpermit\n223.165.120.0/23\tpermit\n2001:0868:0100:0600::/64\tpermit\n2001:4860:4000::/36\tpermit\n2001:748:100:40::2:0/112\tpermit\n2001:748:400:1300::3\tpermit\n2001:748:400:1300::4\tpermit\n2001:748:400:1301::0/64\tpermit\n2001:748:400:1301::3\tpermit\n2001:748:400:1301::4\tpermit\n2001:748:400:2300::3\tpermit\n2001:748:400:2300::4\tpermit\n2001:748:400:2301::0/64\tpermit\n2001:748:400:2301::3\tpermit\n2001:748:400:2301::4\tpermit\n2001:748:400:3300::3\tpermit\n2001:748:400:3300::4\tpermit\n2001:748:400:3301::0/64\tpermit\n2001:748:400:3301::3\tpermit\n2001:748:400:3301::4\tpermit\n2404:6800:4000::/36\tpermit\n2607:13c0:0001:0000:0000:0000:0000:7000/116\tpermit\n2607:13c0:0002:0000:0000:0000:0000:1000/116\tpermit\n2607:13c0:0004:0000:0000:0000:0000:0000/116\tpermit\n2607:f8b0:4000::/36\tpermit\n2620:109:c003:104::/64\tpermit\n2620:109:c003:104::215\tpermit\n2620:109:c006:104::/64\tpermit\n2620:109:c006:104::215\tpermit\n2620:109:c00d:104::/64\tpermit\n2620:10d:c090:400::8:1\tpermit\n2620:10d:c091:400::8:1\tpermit\n2620:10d:c09b:400::8:1\tpermit\n2620:10d:c09c:400::8:1\tpermit\n2620:119:50c0:207::/64\tpermit\n2620:119:50c0:207::215\tpermit\n2620:1ec:46::51\tpermit\n2620:1ec:bdf::51\tpermit\n2800:3f0:4000::/36\tpermit\n49.12.4.251 permit # checks.mailcow.email\n2a01:4f8:c17:7906::10 permit # checks.mailcow.email\n"
  },
  {
    "path": "data/conf/postfix/smtp_dsn_filter",
    "content": "/^4(\\.\\d+\\.\\d+ TLS is required, but host \\S+ refused to start TLS: .+)/\n        5$1\n/^4(\\.\\d+\\.\\d+ TLS is required, but was not offered by host .+)/\n        5$1\n/^4.7.5(.*)/\n        5.7.5$1\n"
  },
  {
    "path": "data/conf/redis/redis-conf.sh",
    "content": "#!/bin/sh\n\ncat <<EOF > /redis.conf\nrequirepass $REDISPASS\nuser quota_notify on nopass ~QW_* -@all +get +hget +ping\nEOF\n\nif [ -n \"$REDISMASTERPASS\" ]; then\n  echo \"masterauth $REDISMASTERPASS\" >> /redis.conf\nfi\n\nexec redis-server /redis.conf\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/aliasexp.php",
    "content": "<?php\r\n// File size is limited by Nginx site to 10M\r\n// To speed things up, we do not include prerequisites\r\nheader('Content-Type: text/plain');\r\nrequire_once \"vars.inc.php\";\r\n// Do not show errors, we log to using error_log\r\nini_set('error_reporting', 0);\r\n// Init database\r\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\r\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\r\n$opt = [\r\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\r\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\r\n    PDO::ATTR_EMULATE_PREPARES   => false,\r\n];\r\ntry {\r\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\r\n}\r\ncatch (PDOException $e) {\r\n  error_log(\"ALIASEXP: \" . $e . PHP_EOL);\r\n  http_response_code(501);\r\n  exit;\r\n}\r\n\r\n// Init Redis\r\n$redis = new Redis();\r\n$redis->connect('redis-mailcow', 6379);\r\n$redis->auth(getenv(\"REDISPASS\"));\r\n\r\nfunction parse_email($email) {\r\n  if(!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;\r\n  $a = strrpos($email, '@');\r\n  return array('local' => substr($email, 0, $a), 'domain' => substr(substr($email, $a), 1));\r\n}\r\nif (!function_exists('getallheaders'))  {\r\n  function getallheaders() {\r\n    if (!is_array($_SERVER)) {\r\n      return array();\r\n    }\r\n    $headers = array();\r\n    foreach ($_SERVER as $name => $value) {\r\n      if (substr($name, 0, 5) == 'HTTP_') {\r\n        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;\r\n      }\r\n    }\r\n    return $headers;\r\n  }\r\n}\r\n\r\n// Read headers\r\n$headers = getallheaders();\r\n// Get rcpt\r\n$rcpt = $headers['Rcpt'];\r\n// Remove tag\r\n$rcpt = preg_replace('/^(.*?)\\+.*(@.*)$/', '$1$2', $rcpt);\r\n// Parse email address\r\n$parsed_rcpt = parse_email($rcpt);\r\n// Create array of final mailboxes\r\n$rcpt_final_mailboxes = array();\r\n\r\n// Skip if not a mailcow handled domain\r\ntry {\r\n  if (!$redis->hGet('DOMAIN_MAP', $parsed_rcpt['domain'])) {\r\n    exit;\r\n  }\r\n}\r\ncatch (RedisException $e) {\r\n  error_log(\"ALIASEXP: \" . $e . PHP_EOL);\r\n  http_response_code(504);\r\n  exit;\r\n}\r\n\r\n// Always assume rcpt is not a final mailbox but an alias for a mailbox or further aliases\r\n//\r\n//             rcpt\r\n//              |\r\n// mailbox <-- goto ---> alias1, alias2, mailbox2\r\n//                          |       |\r\n//                      mailbox3    |\r\n//                                  |\r\n//                               alias3 ---> mailbox4\r\n//\r\ntry {\r\n  $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :rcpt AND `active` = '1'\");\r\n  $stmt->execute(array(\r\n    ':rcpt' => $rcpt\r\n  ));\r\n  $gotos = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n  if (empty($gotos)) {\r\n    $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :rcpt AND `active` = '1'\");\r\n    $stmt->execute(array(\r\n      ':rcpt' => '@' . $parsed_rcpt['domain']\r\n    ));\r\n    $gotos = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n  }\r\n  if (empty($gotos)) {\r\n    $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :rcpt AND `active` = '1'\");\r\n    $stmt->execute(array(':rcpt' => $parsed_rcpt['domain']));\r\n    $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];\r\n    if ($goto_branch) {\r\n      $gotos = $parsed_rcpt['local'] . '@' . $goto_branch;\r\n    }\r\n  }\r\n  $gotos_array = explode(',', $gotos);\r\n\r\n  $loop_c = 0;\r\n\r\n  while (count($gotos_array) != 0 && $loop_c <= 20) {\r\n\r\n    // Loop through all found gotos\r\n    foreach ($gotos_array as $index => &$goto) {\r\n      error_log(\"ALIAS EXPANDER: http pipe: query \" . $goto . \" as username from mailbox\" . PHP_EOL);\r\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `username` = :goto AND (`active`= '1' OR `active`= '2');\");\r\n      $stmt->execute(array(':goto' => $goto));\r\n      $username = $stmt->fetch(PDO::FETCH_ASSOC)['username'];\r\n      if (!empty($username)) {\r\n        error_log(\"ALIAS EXPANDER: http pipe: mailbox found: \" . $username . PHP_EOL);\r\n        // Current goto is a mailbox, save to rcpt_final_mailboxes if not a duplicate\r\n        if (!in_array($username, $rcpt_final_mailboxes)) {\r\n          $rcpt_final_mailboxes[] = $username;\r\n        }\r\n      }\r\n      else {\r\n        $parsed_goto = parse_email($goto);\r\n        if (!$redis->hGet('DOMAIN_MAP', $parsed_goto['domain'])) {\r\n          error_log(\"ALIAS EXPANDER:\" . $goto . \" is not a mailcow handled mailbox or alias address\" . PHP_EOL);\r\n        }\r\n        else {\r\n          $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :goto AND `active` = '1'\");\r\n          $stmt->execute(array(':goto' => $goto));\r\n          $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n          if ($goto_branch) {\r\n            error_log(\"ALIAS EXPANDER: http pipe: goto address \" . $goto . \" is an alias branch for \" . $goto_branch . PHP_EOL);\r\n            $goto_branch_array = explode(',', $goto_branch);\r\n          } else {\r\n            $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` = '1'\");\r\n            $stmt->execute(array(':domain' => $parsed_goto['domain']));\r\n            $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];\r\n            if ($goto_branch) {\r\n              error_log(\"ALIAS EXPANDER: http pipe: goto domain \" . $parsed_goto['domain'] . \" is a domain alias branch for \" . $goto_branch . PHP_EOL);\r\n              $goto_branch_array = array($parsed_goto['local'] . '@' . $goto_branch);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      // goto item was processed, unset\r\n      unset($gotos_array[$index]);\r\n    }\r\n\r\n    // Merge goto branch array derived from previous loop (if any), filter duplicates and unset goto branch array\r\n    if (!empty($goto_branch_array)) {\r\n      $gotos_array = array_unique(array_merge($gotos_array, $goto_branch_array));\r\n      unset($goto_branch_array);\r\n    }\r\n\r\n    // Reindex array\r\n    $gotos_array = array_values($gotos_array);\r\n\r\n    // Force exit if loop cannot be solved\r\n    // Postfix does not allow for alias loops, so this should never happen.\r\n    $loop_c++;\r\n    error_log(\"ALIAS EXPANDER: http pipe: goto array count on loop #\". $loop_c . \" is \" . count($gotos_array) . PHP_EOL);\r\n  }\r\n}\r\ncatch (PDOException $e) {\r\n  error_log(\"ALIAS EXPANDER: \" . $e->getMessage() . PHP_EOL);\r\n  http_response_code(502);\r\n  exit;\r\n}\r\n\r\n// Does also return the mailbox name if question == answer (query == mailbox)\r\nif (count($rcpt_final_mailboxes) == 1) {\r\n  error_log(\"ALIASEXP: direct alias \" . $rcpt . \" expanded to \" . $rcpt_final_mailboxes[0] . PHP_EOL);\r\n  echo trim($rcpt_final_mailboxes[0]);\r\n}\r\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/bcc.php",
    "content": "<?php\r\n// File size is limited by Nginx site to 10M\r\n// To speed things up, we do not include prerequisites\r\nheader('Content-Type: text/plain');\r\nrequire_once \"vars.inc.php\";\r\n// Do not show errors, we log to using error_log\r\nini_set('error_reporting', 0);\r\n// Init database\r\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\r\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\r\n$opt = [\r\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\r\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\r\n    PDO::ATTR_EMULATE_PREPARES   => false,\r\n];\r\ntry {\r\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\r\n}\r\ncatch (PDOException $e) {\r\n  error_log(\"BCC MAP SQL ERROR: \" . $e . PHP_EOL);\r\n  http_response_code(501);\r\n  exit;\r\n}\r\n\r\nfunction parse_email($email) {\r\n  if(!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;\r\n  $a = strrpos($email, '@');\r\n  return array('local' => substr($email, 0, $a), 'domain' => substr(substr($email, $a), 1));\r\n}\r\nif (!function_exists('getallheaders'))  {\r\n  function getallheaders() {\r\n    if (!is_array($_SERVER)) {\r\n      return array();\r\n    }\r\n    $headers = array();\r\n    foreach ($_SERVER as $name => $value) {\r\n      if (substr($name, 0, 5) == 'HTTP_') {\r\n        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;\r\n      }\r\n    }\r\n    return $headers;\r\n  }\r\n}\r\n\r\n// Read headers\r\n$headers = getallheaders();\r\n// Get rcpt\r\n$rcpt = $headers['Rcpt'];\r\n// Get from\r\n$from = $headers['From'];\r\n// Remove tags\r\n$rcpt = preg_replace('/^(.*?)\\+.*(@.*)$/', '$1$2', $rcpt);\r\n$from = preg_replace('/^(.*?)\\+.*(@.*)$/', '$1$2', $from);\r\n\r\ntry {\r\n  if (!empty($rcpt)) {\r\n    $stmt = $pdo->prepare(\"SELECT `bcc_dest` FROM `bcc_maps` WHERE `type` = 'rcpt' AND `local_dest` = :local_dest AND `active` = '1'\");\r\n    $stmt->execute(array(\r\n      ':local_dest' => $rcpt\r\n    ));\r\n    $bcc_dest = $stmt->fetch(PDO::FETCH_ASSOC)['bcc_dest'];\r\n    if (!empty($bcc_dest) && filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {\r\n      error_log(\"BCC MAP: returning \". $bcc_dest . \" for \" . $rcpt . PHP_EOL);\r\n      http_response_code(201);\r\n      echo trim($bcc_dest);\r\n      exit;\r\n    }\r\n  }\r\n  if (!empty($from)) {\r\n    $stmt = $pdo->prepare(\"SELECT `bcc_dest` FROM `bcc_maps` WHERE `type` = 'sender' AND `local_dest` = :local_dest AND `active` = '1'\");\r\n    $stmt->execute(array(\r\n      ':local_dest' => $from\r\n    ));\r\n    $bcc_dest = $stmt->fetch(PDO::FETCH_ASSOC)['bcc_dest'];\r\n    if (!empty($bcc_dest) && filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {\r\n      error_log(\"BCC MAP: returning \". $bcc_dest . \" for \" . $from . PHP_EOL);\r\n      http_response_code(201);\r\n      echo trim($bcc_dest);\r\n      exit;\r\n    }\r\n  }\r\n}\r\ncatch (PDOException $e) {\r\n  error_log(\"BCC MAP SQL ERROR: \" . $e->getMessage() . PHP_EOL);\r\n  http_response_code(502);\r\n  exit;\r\n}\r\n\r\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/footer.php",
    "content": "<?php\n// File size is limited by Nginx site to 10M\n// To speed things up, we do not include prerequisites\nheader('Content-Type: text/plain');\nrequire_once \"vars.inc.php\";\n// Do not show errors, we log to using error_log\nini_set('error_reporting', 0);\n// Init database\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\n$opt = [\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n    PDO::ATTR_EMULATE_PREPARES   => false,\n];\ntry {\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\n}\ncatch (PDOException $e) {\n  error_log(\"FOOTER: \" . $e . PHP_EOL);\n  http_response_code(501);\n  exit;\n}\n\nif (!function_exists('getallheaders'))  {\n  function getallheaders() {\n    if (!is_array($_SERVER)) {\n      return array();\n    }\n    $headers = array();\n    foreach ($_SERVER as $name => $value) {\n      if (substr($name, 0, 5) == 'HTTP_') {\n        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;\n      }\n    }\n    return $headers;\n  }\n}\n\n// Read headers\n$headers = getallheaders();\n// Get Domain\n$domain = $headers['Domain'];\n// Get Username\n$username = $headers['Username'];\n// Get From\n$from = $headers['From'];\n// define empty footer\n$empty_footer = json_encode(array(\n  'html' => '',\n  'plain' => '',\n  'skip_replies' => 0,\n  'vars' => array()\n));\n\nerror_log(\"FOOTER: checking for domain \" . $domain . \", user \" . $username . \" and address \" . $from . PHP_EOL);\n\ntry {\n  // try get $target_domain if $domain is an alias_domain\n  $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` \n    WHERE `alias_domain` = :alias_domain\");\n  $stmt->execute(array(\n    ':alias_domain' => $domain\n  ));\n  $alias_domain = $stmt->fetch(PDO::FETCH_ASSOC);\n  if (!$alias_domain) {\n    $target_domain = $domain;\n  } else {\n    $target_domain = $alias_domain['target_domain'];\n  }\n\n  // get footer associated with the domain\n  $stmt = $pdo->prepare(\"SELECT `plain`, `html`, `mbox_exclude`, `alias_domain_exclude`, `skip_replies` FROM `domain_wide_footer` \n    WHERE `domain` = :domain\");\n  $stmt->execute(array(\n    ':domain' => $target_domain\n  ));\n  $footer = $stmt->fetch(PDO::FETCH_ASSOC);\n\n  // check if the sender is excluded\n  if (in_array($from, json_decode($footer['mbox_exclude']))){\n    $footer = false;\n  }\n  if (in_array($domain, json_decode($footer['alias_domain_exclude']))){\n    $footer = false;\n  }\n  if (empty($footer)){\n    echo $empty_footer;\n    exit;\n  }\n  error_log(\"FOOTER: \" . json_encode($footer) . PHP_EOL);\n\n  // footer will be applied\n  // get custom mailbox attributes to insert into the footer\n  $stmt = $pdo->prepare(\"SELECT `custom_attributes` FROM `mailbox` WHERE `username` = :username\");\n  $stmt->execute(array(\n    ':username' => $username\n  ));\n  $custom_attributes = $stmt->fetch(PDO::FETCH_ASSOC)['custom_attributes'];\n  if (empty($custom_attributes)){\n    $custom_attributes = (object)array();\n  }\n}\ncatch (Exception $e) {\n  error_log(\"FOOTER: \" . $e->getMessage() . PHP_EOL);\n  http_response_code(502);\n  exit;\n}\n\n\n// return footer\n$footer[\"vars\"] = $custom_attributes;\necho json_encode($footer);\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/forwardinghosts.php",
    "content": "<?php\nheader('Content-Type: text/plain');\nini_set('error_reporting', 0);\n\n$redis = new Redis();\n$redis->connect('redis-mailcow', 6379);\n$redis->auth(getenv(\"REDISPASS\"));\n\nfunction in_net($addr, $net) {\n  $net = explode('/', $net);\n  if (count($net) > 1) {\n    $mask = $net[1];\n  }\n  $net = inet_pton($net[0]);\n  $addr = inet_pton($addr);\n  $length = strlen($net); // 4 for IPv4, 16 for IPv6\n  if (strlen($net) != strlen($addr)) {\n    return false;\n  }\n  if (!isset($mask)) {\n    $mask = $length * 8;\n  }\n  $addr_bin = '';\n  $net_bin = '';\n  for ($i = 0; $i < $length; ++$i) {\n    $addr_bin .= str_pad(decbin(ord(substr($addr, $i, $i+1))), 8, '0', STR_PAD_LEFT);\n    $net_bin .= str_pad(decbin(ord(substr($net, $i, $i+1))), 8, '0', STR_PAD_LEFT);\n  }\n  return substr($addr_bin, 0, $mask) == substr($net_bin, 0, $mask);\n}\n\nif (isset($_GET['host'])) {\n  try {\n    foreach ($redis->hGetAll('WHITELISTED_FWD_HOST') as $host => $source) {\n      if (in_net($_GET['host'], $host)) {\n        echo '200 PERMIT';\n        exit;\n      }\n    }\n    echo '200 DUNNO';\n  }\n  catch (RedisException $e) {\n    echo '200 DUNNO';\n    exit;\n  }\n} else {\n  try {\n    echo '240.240.240.240' . PHP_EOL;\n    foreach ($redis->hGetAll('WHITELISTED_FWD_HOST') as $host => $source) {\n      echo $host . PHP_EOL;\n    }\n  }\n  catch (RedisException $e) {\n    echo '240.240.240.240' . PHP_EOL;\n    exit;\n  }\n}\n?>\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/index.html",
    "content": "<html>\n</html>\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/sasl_logs.php",
    "content": "<?php\n// PoC\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/settings.php",
    "content": "<?php\r\n/*\r\nThe match section performs AND operation on different matches: for example, if you have from and rcpt in the same rule,\r\nthen the rule matches only when from AND rcpt match. For similar matches, the OR rule applies: if you have multiple rcpt matches,\r\nthen any of these will trigger the rule. If a rule is triggered then no more rules are matched.\r\n*/\r\nheader('Content-Type: text/plain');\r\nrequire_once \"vars.inc.php\";\r\n// Getting headers sent by the client.\r\nini_set('error_reporting', 0);\r\n\r\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\r\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\r\n$opt = [\r\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\r\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\r\n    PDO::ATTR_EMULATE_PREPARES   => false,\r\n];\r\ntry {\r\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\r\n  $stmt = $pdo->query(\"SELECT '1' FROM `filterconf`\");\r\n}\r\ncatch (PDOException $e) {\r\n  echo 'settings { }';\r\n  exit;\r\n}\r\n\r\n// Check if db changed and return header\r\n$stmt = $pdo->prepare(\"SELECT GREATEST(COALESCE(MAX(UNIX_TIMESTAMP(UPDATE_TIME)), 1), COALESCE(MAX(UNIX_TIMESTAMP(CREATE_TIME)), 1)) AS `db_update_time` FROM `information_schema`.`tables`\r\n  WHERE (`TABLE_NAME` = 'filterconf' OR `TABLE_NAME` = 'settingsmap' OR `TABLE_NAME` = 'sogo_quick_contact' OR `TABLE_NAME` = 'alias')\r\n    AND TABLE_SCHEMA = :dbname;\");\r\n$stmt->execute(array(\r\n  ':dbname' => $database_name\r\n));\r\n$db_update_time = $stmt->fetch(PDO::FETCH_ASSOC)['db_update_time'];\r\nif (empty($db_update_time)) {\r\n  $db_update_time = 1572048000;\r\n}\r\nif (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $db_update_time)) {\r\n  header('Last-Modified: '.gmdate('D, d M Y H:i:s', $db_update_time).' GMT', true, 304);\r\n  exit;\r\n} else {\r\n  header('Last-Modified: '.gmdate('D, d M Y H:i:s', $db_update_time).' GMT', true, 200);\r\n}\r\n\r\nfunction parse_email($email) {\r\n  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;\r\n  $a = strrpos($email, '@');\r\n  return array('local' => substr($email, 0, $a), 'domain' => substr($email, $a));\r\n}\r\n\r\nfunction normalize_email($email) {\r\n  $email = strtolower(str_replace('/', '\\/', $email));\r\n  $gm = \"@gmail.com\";\r\n  if (substr_compare($email, $gm, -strlen($gm)) == 0) {\r\n    $email = explode('@', $email);\r\n    $email[0] = str_replace('.', '', $email[0]);\r\n    $email = implode('@', $email);\r\n  }\r\n  $gm_alt = \"@googlemail.com\";\r\n  if (substr_compare($email, $gm_alt, -strlen($gm_alt)) == 0) {\r\n    $email = explode('@', $email);\r\n    $email[0] = str_replace('.', '', $email[0]);\r\n    $email[1] = str_replace('@', '', $gm);\r\n    $email = implode('@', $email);\r\n  }\r\n  if (str_contains($email, \"+\")) {\r\n    $email = explode('@', $email);\r\n    $user = explode('+', $email[0]);\r\n    $email[0] = $user[0];\r\n    $email = implode('@', $email);\r\n  }\r\n  return $email;\r\n}\r\n\r\nfunction wl_by_sogo() {\r\n  global $pdo;\r\n  $rcpt = array();\r\n  $stmt = $pdo->query(\"SELECT DISTINCT(`sogo_folder_info`.`c_path2`) AS `user`, GROUP_CONCAT(`sogo_quick_contact`.`c_mail`) AS `contacts` FROM `sogo_folder_info`\r\n    INNER JOIN `sogo_quick_contact` ON `sogo_quick_contact`.`c_folder_id` = `sogo_folder_info`.`c_folder_id`\r\n      GROUP BY `c_path2`\");\r\n  $sogo_contacts = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($sogo_contacts)) {\r\n    foreach (explode(',', $row['contacts']) as $contact) {\r\n      if (!filter_var($contact, FILTER_VALIDATE_EMAIL)) {\r\n        continue;\r\n      }\r\n      // Explicit from, no mime_from, no regex - envelope must match\r\n      // mailcow white and blacklists also cover mime_from\r\n      $rcpt[$row['user']][] = normalize_email($contact);\r\n    }\r\n  }\r\n  return $rcpt;\r\n}\r\n\r\nfunction ucl_rcpts($object, $type) {\r\n  global $pdo;\r\n  $rcpt = array();\r\n  if ($type == 'mailbox') {\r\n    // Standard aliases\r\n    $stmt = $pdo->prepare(\"SELECT `address` FROM `alias`\r\n      WHERE `goto` = :object_goto\r\n        AND `address` NOT LIKE '@%'\");\r\n    $stmt->execute(array(\r\n      ':object_goto' => $object\r\n    ));\r\n    $standard_aliases = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    while ($row = array_shift($standard_aliases)) {\r\n      $local = parse_email($row['address'])['local'];\r\n      $domain = parse_email($row['address'])['domain'];\r\n      if (!empty($local) && !empty($domain)) {\r\n        $rcpt[] = '/^' . str_replace('/', '\\/', $local) . '[+].*' . str_replace('/', '\\/', $domain) . '$/i';\r\n      }\r\n      $rcpt[] = str_replace('/', '\\/', $row['address']);\r\n    }\r\n    // Aliases by alias domains\r\n    $stmt = $pdo->prepare(\"SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias` FROM `mailbox`\r\n      LEFT OUTER JOIN `alias_domain` ON `mailbox`.`domain` = `alias_domain`.`target_domain`\r\n      WHERE `mailbox`.`username` = :object\");\r\n    $stmt->execute(array(\r\n      ':object' => $object\r\n    ));\r\n    $by_domain_aliases = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    array_filter($by_domain_aliases);\r\n    while ($row = array_shift($by_domain_aliases)) {\r\n      if (!empty($row['alias'])) {\r\n        $local = parse_email($row['alias'])['local'];\r\n        $domain = parse_email($row['alias'])['domain'];\r\n        if (!empty($local) && !empty($domain)) {\r\n          $rcpt[] = '/^' . str_replace('/', '\\/', $local) . '[+].*' . str_replace('/', '\\/', $domain) . '$/i';\r\n        }\r\n        $rcpt[] = str_replace('/', '\\/', $row['alias']);\r\n      }\r\n    }\r\n  }\r\n  elseif ($type == 'domain') {\r\n    // Domain self\r\n    $rcpt[] = '/.*@' . $object . '/i';\r\n    $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain`\r\n      WHERE `target_domain` = :object\");\r\n    $stmt->execute(array(':object' => $object));\r\n    $alias_domains = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    array_filter($alias_domains);\r\n    while ($row = array_shift($alias_domains)) {\r\n      $rcpt[] = '/.*@' . $row['alias_domain'] . '/i';\r\n    }\r\n  }\r\n  return $rcpt;\r\n}\r\n?>\r\nsettings {\r\n  watchdog {\r\n    priority = 10;\r\n    rcpt_mime = \"/null@localhost/i\";\r\n    from_mime = \"/watchdog@localhost/i\";\r\n    apply \"default\" {\r\n      symbols_disabled = [\"HISTORY_SAVE\", \"ARC\", \"ARC_SIGNED\", \"DKIM\", \"DKIM_SIGNED\", \"CLAM_VIRUS\"];\r\n      want_spam = yes;\r\n      actions {\r\n        reject = 9999.0;\r\n        greylist = 9998.0;\r\n        \"add header\" = 9997.0;\r\n      }\r\n\r\n    }\r\n  }\r\n<?php\r\n\r\n/*\r\n// Start custom scores for users\r\n*/\r\n\r\n$stmt = $pdo->query(\"SELECT DISTINCT `object` FROM `filterconf` WHERE `option` = 'highspamlevel' OR `option` = 'lowspamlevel'\");\r\n$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\nwhile ($row = array_shift($rows)) {\r\n  $username_sane = preg_replace(\"/[^a-zA-Z0-9]+/\", \"\", $row['object']);\r\n?>\r\n  score_<?=$username_sane;?> {\r\n    priority = 4;\r\n<?php\r\n  foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT `option`, `value` FROM `filterconf`\r\n    WHERE (`option` = 'highspamlevel' OR `option` = 'lowspamlevel')\r\n      AND `object`= :object\");\r\n  $stmt->execute(array(':object' => $row['object']));\r\n  $spamscore = $stmt->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP);\r\n?>\r\n    apply \"default\" {\r\n      actions {\r\n        reject = <?=$spamscore['highspamlevel'][0];?>;\r\n        greylist = <?=$spamscore['lowspamlevel'][0] - 1;?>;\r\n        \"add header\" = <?=$spamscore['lowspamlevel'][0];?>;\r\n      }\r\n    }\r\n  }\r\n<?php\r\n}\r\n\r\n/*\r\n// Start SOGo contacts whitelist\r\n// Priority 4, lower than a domain whitelist (5) and lower than a mailbox whitelist (6)\r\n*/\r\n\r\nforeach (wl_by_sogo() as $user => $contacts) {\r\n  $username_sane = preg_replace(\"/[^a-zA-Z0-9]+/\", \"\", $user);\r\n?>\r\n  whitelist_sogo_<?=$username_sane;?> {\r\n<?php\r\n  foreach ($contacts as $contact) {\r\n?>\r\n    from = <?=json_encode($contact, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n  }\r\n?>\r\n    priority = 4;\r\n<?php\r\n    foreach (ucl_rcpts($user, 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n?>\r\n    apply \"default\" {\r\n      SOGO_CONTACT = -99.0;\r\n    }\r\n    symbols [\r\n      \"SOGO_CONTACT\"\r\n    ]\r\n  }\r\n<?php\r\n}\r\n\r\n/*\r\n// Start whitelist\r\n*/\r\n\r\n$stmt = $pdo->query(\"SELECT DISTINCT `object` FROM `filterconf` WHERE `option` = 'whitelist_from'\");\r\n$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\nwhile ($row = array_shift($rows)) {\r\n  $username_sane = preg_replace(\"/[^a-zA-Z0-9]+/\", \"\", $row['object']);\r\n?>\r\n  whitelist_<?=$username_sane;?> {\r\n<?php\r\n  $list_items = array();\r\n  $stmt = $pdo->prepare(\"SELECT `value` FROM `filterconf`\r\n    WHERE `object`= :object\r\n      AND `option` = 'whitelist_from'\");\r\n  $stmt->execute(array(':object' => $row['object']));\r\n  $list_items = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  foreach ($list_items as $item) {\r\n?>\r\n    from = \"/<?='^' . str_replace('\\*', '.*', preg_quote($item['value'], '/')) . '$' ;?>/i\";\r\n<?php\r\n  }\r\n  if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) {\r\n?>\r\n    priority = 5;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n  else {\r\n?>\r\n    priority = 6;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n?>\r\n    apply \"default\" {\r\n      MAILCOW_WHITE = -999.0;\r\n    }\r\n    symbols [\r\n      \"MAILCOW_WHITE\"\r\n    ]\r\n  }\r\n  whitelist_mime_<?=$username_sane;?> {\r\n<?php\r\n  foreach ($list_items as $item) {\r\n?>\r\n    from_mime = \"/<?='^' . str_replace('\\*', '.*', preg_quote($item['value'], '/')) . '$' ;?>/i\";\r\n<?php\r\n  }\r\n  if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) {\r\n?>\r\n    priority = 5;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n  else {\r\n?>\r\n    priority = 6;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n?>\r\n    apply \"default\" {\r\n      MAILCOW_WHITE = -999.0;\r\n    }\r\n    symbols [\r\n      \"MAILCOW_WHITE\"\r\n    ]\r\n  }\r\n<?php\r\n}\r\n\r\n/*\r\n// Start blacklist\r\n*/\r\n\r\n$stmt = $pdo->query(\"SELECT DISTINCT `object` FROM `filterconf` WHERE `option` = 'blacklist_from'\");\r\n$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\nwhile ($row = array_shift($rows)) {\r\n  $username_sane = preg_replace(\"/[^a-zA-Z0-9]+/\", \"\", $row['object']);\r\n?>\r\n  blacklist_<?=$username_sane;?> {\r\n<?php\r\n  $list_items = array();\r\n  $stmt = $pdo->prepare(\"SELECT `value` FROM `filterconf`\r\n    WHERE `object`= :object\r\n      AND `option` = 'blacklist_from'\");\r\n  $stmt->execute(array(':object' => $row['object']));\r\n  $list_items = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  foreach ($list_items as $item) {\r\n?>\r\n    from = \"/<?='^' . str_replace('\\*', '.*', preg_quote($item['value'], '/')) . '$' ;?>/i\";\r\n<?php\r\n  }\r\n  if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) {\r\n?>\r\n    priority = 5;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n  else {\r\n?>\r\n    priority = 6;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n?>\r\n    apply \"default\" {\r\n      MAILCOW_BLACK = 999.0;\r\n    }\r\n    symbols [\r\n      \"MAILCOW_BLACK\"\r\n    ]\r\n  }\r\n  blacklist_header_<?=$username_sane;?> {\r\n<?php\r\n  foreach ($list_items as $item) {\r\n?>\r\n    from_mime = \"/<?='^' . str_replace('\\*', '.*', preg_quote($item['value'], '/')) . '$' ;?>/i\";\r\n<?php\r\n  }\r\n  if (!filter_var(trim($row['object']), FILTER_VALIDATE_EMAIL)) {\r\n?>\r\n    priority = 5;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n  else {\r\n?>\r\n    priority = 6;\r\n<?php\r\n    foreach (ucl_rcpts($row['object'], strpos($row['object'], '@') === FALSE ? 'domain' : 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n    }\r\n  }\r\n?>\r\n    apply \"default\" {\r\n      MAILCOW_BLACK = 999.0;\r\n    }\r\n    symbols [\r\n      \"MAILCOW_BLACK\"\r\n    ]\r\n  }\r\n<?php\r\n}\r\n\r\n/*\r\n// Start traps\r\n*/\r\n\r\n?>\r\n  ham_trap {\r\n<?php\r\n  foreach (ucl_rcpts('ham@localhost', 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n  }\r\n?>\r\n    priority = 9;\r\n    apply \"default\" {\r\n      symbols_enabled = [\"HISTORY_SAVE\"];\r\n    }\r\n    symbols [\r\n      \"HAM_TRAP\"\r\n    ]\r\n  }\r\n\r\n  spam_trap {\r\n<?php\r\n  foreach (ucl_rcpts('spam@localhost', 'mailbox') as $rcpt) {\r\n?>\r\n    rcpt = <?=json_encode($rcpt, JSON_UNESCAPED_SLASHES);?>;\r\n<?php\r\n  }\r\n?>\r\n    priority = 9;\r\n    apply \"default\" {\r\n      symbols_enabled = [\"HISTORY_SAVE\"];\r\n    }\r\n    symbols [\r\n      \"SPAM_TRAP\"\r\n    ]\r\n  }\r\n<?php\r\n// Start additional content\r\n\r\n$stmt = $pdo->query(\"SELECT `id`, `content` FROM `settingsmap` WHERE `active` = '1'\");\r\n$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\nwhile ($row = array_shift($rows)) {\r\n  $username_sane = preg_replace(\"/[^a-zA-Z0-9]+/\", \"\", $row['id']);\r\n?>\r\n  additional_settings_<?=intval($row['id']);?> {\r\n<?php\r\n    $content = preg_split('/\\r\\n|\\r|\\n/', $row['content']);\r\n    foreach ($content as $line) {\r\n      echo '    ' . $line . PHP_EOL;\r\n    }\r\n?>\r\n  }\r\n<?php\r\n}\r\n?>\r\n\r\n<?php\r\n// Start internal aliases\r\n\r\n$stmt = $pdo->query(\"SELECT `id`, `address`, `domain` FROM `alias` WHERE `active` = '1' AND `internal` = '1'\");\r\n$aliases = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\nwhile ($alias = array_shift($aliases)) {\r\n  // build allowed_domains regex and add target domain and alias domains\r\n  $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain` WHERE `active` = '1' AND `target_domain` = :target_domain\");\r\n  $stmt->execute(array(':target_domain' => $alias['domain']));\r\n  $allowed_domains = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  $allowed_domains = array_map(function($item) {\r\n    return str_replace('.', '\\.', $item['alias_domain']);\r\n  }, $allowed_domains);\r\n  $allowed_domains[] = str_replace('.', '\\.', $alias['domain']);\r\n  $allowed_domains = implode('|', $allowed_domains);\r\n?>\r\n  internal_alias_<?=$alias['id'];?> {\r\n    priority = 10;\r\n    rcpt = \"<?=$alias['address'];?>\";\r\n    from = \"/^((?!.*@(<?=$allowed_domains;?>)).)*$/\";\r\n    apply \"default\" {\r\n      MAILCOW_INTERNAL_ALIAS = 9999.0;\r\n    }\r\n    symbols [\r\n      \"MAILCOW_INTERNAL_ALIAS\"\r\n    ]\r\n  }\r\n<?php\r\n}\r\n?>\r\n\r\n}\r\n"
  },
  {
    "path": "data/conf/rspamd/dynmaps/vars.inc.php",
    "content": "<?php\nrequire_once('../../../web/inc/vars.inc.php');\nif (file_exists('../../../web/inc/vars.local.inc.php')) {\n  include_once('../../../web/inc/vars.local.inc.php');\n}\n?>\n"
  },
  {
    "path": "data/conf/rspamd/lua/ratelimit.lua",
    "content": "local custom_keywords = {}\n\ncustom_keywords.mailcow = function(task)\n  local rspamd_logger = require \"rspamd_logger\"\n  local dyn_rl_symbol = task:get_symbol(\"DYN_RL\")\n  if dyn_rl_symbol then\n    local rl_value = dyn_rl_symbol[1].options[1]\n    local rl_object = dyn_rl_symbol[1].options[2]\n    if rl_value and rl_object then\n      rspamd_logger.infox(rspamd_config, \"DYN_RL symbol has value %s for object %s, returning %s...\", rl_value, rl_object, \"rs_dynrl_\" .. rl_object)\n      return \"rs_dynrl_\" .. rl_object, rl_value\n    end\n  end\nend\n\nreturn custom_keywords\n"
  },
  {
    "path": "data/conf/rspamd/lua/rspamd.local.lua",
    "content": "rspamd_config.MAILCOW_AUTH = {\n\tcallback = function(task)\n\t\tlocal uname = task:get_user()\n\t\tif uname then\n\t\t\treturn 1\n\t\tend\n\tend\n}\n\nlocal monitoring_hosts = rspamd_config:add_map{\n  url = \"/etc/rspamd/custom/monitoring_nolog.map\",\n  description = \"Monitoring hosts\",\n  type = \"regexp\"\n}\n\nrspamd_config:register_symbol({\n  name = 'SMTP_ACCESS',\n  type = 'postfilter',\n  callback = function(task)\n    local util = require(\"rspamd_util\")\n    local rspamd_logger = require \"rspamd_logger\"\n    local rspamd_ip = require 'rspamd_ip'\n    local uname = task:get_user()\n    local limited_access = task:get_symbol(\"SMTP_LIMITED_ACCESS\")\n\n    if not uname then\n      return false\n    end\n\n    if not limited_access then\n      return false\n    end\n\n    local hash_key = 'SMTP_ALLOW_NETS_' .. uname\n\n    local redis_params = rspamd_parse_redis_server('smtp_access')\n    local ip = task:get_from_ip()\n\n    if ip == nil or not ip:is_valid() then\n      return false\n    end\n\n    local from_ip_string = tostring(ip)\n    smtp_access_table = {from_ip_string}\n\n    local maxbits = 128\n    local minbits = 32\n    if ip:get_version() == 4 then\n        maxbits = 32\n        minbits = 8\n    end\n    for i=maxbits,minbits,-1 do\n      local nip = ip:apply_mask(i):to_string() .. \"/\" .. i\n      table.insert(smtp_access_table, nip)\n    end\n    local function smtp_access_cb(err, data)\n      if err then\n        rspamd_logger.infox(rspamd_config, \"smtp_access query request for ip %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\")\", ip, data, err)\n        return false\n      else\n        rspamd_logger.infox(rspamd_config, \"checking ip %s for smtp_access in %s\", from_ip_string, hash_key)\n        for k,v in pairs(data) do\n          if (v and v ~= userdata and v == '1') then\n            rspamd_logger.infox(rspamd_config, \"found ip in smtp_access map\")\n            task:insert_result(true, 'SMTP_ACCESS', 0.0, from_ip_string)\n            return true\n          end\n        end\n        rspamd_logger.infox(rspamd_config, \"couldnt find ip in smtp_access map\")\n        task:insert_result(true, 'SMTP_ACCESS', 999.0, from_ip_string)\n        return true\n      end\n    end\n    table.insert(smtp_access_table, 1, hash_key)\n    local redis_ret_user = rspamd_redis_make_request(task,\n      redis_params, -- connect params\n      hash_key, -- hash key\n      false, -- is write\n      smtp_access_cb, --callback\n      'HMGET', -- command\n      smtp_access_table -- arguments\n    )\n    if not redis_ret_user then\n      rspamd_logger.infox(rspamd_config, \"cannot check smtp_access redis map\")\n    end\n  end,\n  priority = 10\n})\n\nrspamd_config:register_symbol({\n  name = 'POSTMASTER_HANDLER',\n  type = 'prefilter',\n  callback = function(task)\n  local rcpts = task:get_recipients('smtp')\n  local rspamd_logger = require \"rspamd_logger\"\n  local lua_util = require \"lua_util\"\n  local from = task:get_from(1)\n\n  -- not applying to mails with more than one rcpt to avoid bypassing filters by addressing postmaster\n  if rcpts and #rcpts == 1 then\n    for _,rcpt in ipairs(rcpts) do\n      local rcpt_split = rspamd_str_split(rcpt['addr'], '@')\n      if #rcpt_split == 2 then\n        if rcpt_split[1] == 'postmaster' then\n          task:set_pre_result('accept', 'whitelisting postmaster smtp rcpt', 'postmaster')\n          return\n        end\n      end\n    end\n  end\n\n  if from then\n    for _,fr in ipairs(from) do\n      local fr_split = rspamd_str_split(fr['addr'], '@')\n      if #fr_split == 2 then\n        if fr_split[1] == 'postmaster' and task:get_user() then\n          -- no whitelist, keep signatures\n          task:insert_result(true, 'POSTMASTER_FROM', -2500.0)\n          return\n        end\n      end\n    end\n  end\n\n  end,\n  priority = 10\n})\n\nrspamd_config:register_symbol({\n  name = 'KEEP_SPAM',\n  type = 'prefilter',\n  callback = function(task)\n    local util = require(\"rspamd_util\")\n    local rspamd_logger = require \"rspamd_logger\"\n    local rspamd_ip = require 'rspamd_ip'\n    local uname = task:get_user()\n\n    if uname then\n      return false\n    end\n\n    local redis_params = rspamd_parse_redis_server('keep_spam')\n    local ip = task:get_from_ip()\n\n    if ip == nil or not ip:is_valid() then\n      return false\n    end\n\n    -- Helper function to parse IPv6 into 8 segments\n    local function ipv6_to_segments(ip_str)\n      -- Remove zone identifier if present (e.g., %eth0)\n      ip_str = ip_str:gsub(\"%%.*$\", \"\")\n      \n      local segments = {}\n      \n      -- Handle :: compression\n      if ip_str:find('::') then\n        local before, after = ip_str:match('^(.*)::(.*)$')\n        before = before or ''\n        after = after or ''\n        \n        local before_parts = {}\n        local after_parts = {}\n        \n        if before ~= '' then\n          for seg in before:gmatch('[^:]+') do\n            table.insert(before_parts, tonumber(seg, 16) or 0)\n          end\n        end\n        \n        if after ~= '' then\n          for seg in after:gmatch('[^:]+') do\n            table.insert(after_parts, tonumber(seg, 16) or 0)\n          end\n        end\n        \n        -- Add before segments\n        for _, seg in ipairs(before_parts) do\n          table.insert(segments, seg)\n        end\n        \n        -- Add compressed zeros\n        local zeros_needed = 8 - #before_parts - #after_parts\n        for i = 1, zeros_needed do\n          table.insert(segments, 0)\n        end\n        \n        -- Add after segments\n        for _, seg in ipairs(after_parts) do\n          table.insert(segments, seg)\n        end\n      else\n        -- No compression\n        for seg in ip_str:gmatch('[^:]+') do\n          table.insert(segments, tonumber(seg, 16) or 0)\n        end\n      end\n      \n      -- Ensure we have exactly 8 segments\n      while #segments < 8 do\n        table.insert(segments, 0)\n      end\n      \n      return segments\n    end\n\n    -- Generate all common IPv6 notations\n    local function get_ipv6_variants(ip_str)\n      local variants = {}\n      local seen = {}\n      \n      local function add_variant(v)\n        if v and not seen[v] then\n          table.insert(variants, v)\n          seen[v] = true\n        end\n      end\n      \n      -- For IPv4, just return the original\n      if not ip_str:find(':') then\n        add_variant(ip_str)\n        return variants\n      end\n      \n      local segments = ipv6_to_segments(ip_str)\n      \n      -- 1. Fully expanded form (all zeros shown as 0000)\n      local expanded_parts = {}\n      for _, seg in ipairs(segments) do\n        table.insert(expanded_parts, string.format('%04x', seg))\n      end\n      add_variant(table.concat(expanded_parts, ':'))\n      \n      -- 2. Standard form (no leading zeros, but all segments present)\n      local standard_parts = {}\n      for _, seg in ipairs(segments) do\n        table.insert(standard_parts, string.format('%x', seg))\n      end\n      add_variant(table.concat(standard_parts, ':'))\n      \n      -- 3. Find all possible :: compressions\n      -- RFC 5952: compress the longest run of consecutive zeros\n      -- But we need to check all possibilities since Redis might have any form\n      \n      -- Find all zero runs\n      local zero_runs = {}\n      local in_run = false\n      local run_start = 0\n      local run_length = 0\n      \n      for i = 1, 8 do\n        if segments[i] == 0 then\n          if not in_run then\n            in_run = true\n            run_start = i\n            run_length = 1\n          else\n            run_length = run_length + 1\n          end\n        else\n          if in_run then\n            if run_length >= 1 then  -- Allow single zero compression too\n              table.insert(zero_runs, {start = run_start, length = run_length})\n            end\n            in_run = false\n          end\n        end\n      end\n      \n      -- Don't forget the last run\n      if in_run and run_length >= 1 then\n        table.insert(zero_runs, {start = run_start, length = run_length})\n      end\n      \n      -- Generate variant for each zero run compression\n      for _, run in ipairs(zero_runs) do\n        local parts = {}\n        \n        -- Before compression\n        for i = 1, run.start - 1 do\n          table.insert(parts, string.format('%x', segments[i]))\n        end\n        \n        -- The compression\n        if run.start == 1 then\n          table.insert(parts, '')\n          table.insert(parts, '')\n        elseif run.start + run.length - 1 == 8 then\n          table.insert(parts, '')\n          table.insert(parts, '')\n        else\n          table.insert(parts, '')\n        end\n        \n        -- After compression\n        for i = run.start + run.length, 8 do\n          table.insert(parts, string.format('%x', segments[i]))\n        end\n        \n        local compressed = table.concat(parts, ':'):gsub('::+', '::')\n        add_variant(compressed)\n      end\n      \n      return variants\n    end\n\n    local from_ip_string = tostring(ip)\n    local ip_check_table = {}\n    \n    -- Add all variants of the exact IP\n    for _, variant in ipairs(get_ipv6_variants(from_ip_string)) do\n      table.insert(ip_check_table, variant)\n    end\n\n    local maxbits = 128\n    local minbits = 32\n    if ip:get_version() == 4 then\n        maxbits = 32\n        minbits = 8\n    end\n    \n    -- Add all CIDR notations with variants\n    for i=maxbits,minbits,-1 do\n      local masked_ip = ip:apply_mask(i)\n      local cidr_base = masked_ip:to_string()\n      \n      for _, variant in ipairs(get_ipv6_variants(cidr_base)) do\n        local cidr = variant .. \"/\" .. i\n        table.insert(ip_check_table, cidr)\n      end\n    end\n    \n    local function keep_spam_cb(err, data)\n      if err then\n        rspamd_logger.infox(rspamd_config, \"keep_spam query request for ip %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\")\", ip, data, err)\n        return false\n      else\n        for k,v in pairs(data) do\n          if (v and v ~= userdata and v == '1') then\n            rspamd_logger.infox(rspamd_config, \"found ip %s (checked as: %s) in keep_spam map, setting pre-result accept\", from_ip_string, ip_check_table[k])\n            task:set_pre_result('accept', 'ip matched with forward hosts', 'keep_spam')\n            task:set_flag('no_stat')\n            return\n          end\n        end\n      end\n    end\n    \n    table.insert(ip_check_table, 1, 'KEEP_SPAM')\n    local redis_ret_user = rspamd_redis_make_request(task,\n      redis_params, -- connect params\n      'KEEP_SPAM', -- hash key\n      false, -- is write\n      keep_spam_cb, --callback\n      'HMGET', -- command\n      ip_check_table -- arguments\n    )\n    if not redis_ret_user then\n      rspamd_logger.infox(rspamd_config, \"cannot check keep_spam redis map\")\n    end\n  end,\n  priority = 19\n})\n\nrspamd_config:register_symbol({\n  name = 'TLS_HEADER',\n  type = 'postfilter',\n  callback = function(task)\n    local rspamd_logger = require \"rspamd_logger\"\n    local tls_tag = task:get_request_header('TLS-Version')\n    if type(tls_tag) == 'nil' then\n      task:set_milter_reply({\n        add_headers = {['X-Last-TLS-Session-Version'] = 'None'}\n      })\n    else\n      task:set_milter_reply({\n        add_headers = {['X-Last-TLS-Session-Version'] = tostring(tls_tag)}\n      })\n    end\n  end,\n  priority = 12\n})\n\nrspamd_config:register_symbol({\n  name = 'TAG_MOO',\n  type = 'postfilter',\n  flags = 'ignore_passthrough',\n  callback = function(task)\n    local util = require(\"rspamd_util\")\n    local rspamd_logger = require \"rspamd_logger\"\n    local redis_params = rspamd_parse_redis_server('taghandler')\n    local rspamd_http = require \"rspamd_http\"\n    local rcpts = task:get_recipients('smtp')\n    local lua_util = require \"lua_util\"\n    local tagged_rcpt = task:get_symbol(\"TAGGED_RCPT\")\n\n    local function remove_moo_tag()\n      local moo_tag_header = task:get_header('X-Moo-Tag', false)\n      if moo_tag_header then\n        task:set_milter_reply({\n          remove_headers = {['X-Moo-Tag'] = 0},\n        })\n      end\n      return true\n    end\n\n    -- Check if we have exactly one recipient\n    if not (rcpts and #rcpts == 1) then\n      rspamd_logger.infox(\"TAG_MOO: not exactly one rcpt (%s), removing moo tag\", rcpts and #rcpts or 0)\n      remove_moo_tag()\n      return\n    end\n\n    local rcpt_addr = rcpts[1]['addr']\n    local rcpt_user = rcpts[1]['user']\n    local rcpt_domain = rcpts[1]['domain']\n\n    -- Check if recipient has a tag (contains '+')\n    local tag = nil\n    if tagged_rcpt ~= nil then\n      tag = tagged_rcpt\n      rspamd_logger.infox(\"TAG_MOO: found tag in recipient: %s (base: %s, tag: %s)\", rcpt_addr, base_user, tag)\n    end\n\n    if not tag then\n      rspamd_logger.infox(\"TAG_MOO: no tag found in recipient %s, removing moo tag\", rcpt_addr)\n      remove_moo_tag()\n      return\n    end\n\n    -- Optional: Check if domain is a mailcow domain\n    -- When KEEP_SPAM is active, RCPT_MAILCOW_DOMAIN might not be set\n    -- If the mail is being delivered, we can assume it's valid\n    local mailcow_domain = task:get_symbol(\"RCPT_MAILCOW_DOMAIN\")\n    if not mailcow_domain then\n      rspamd_logger.infox(\"TAG_MOO: RCPT_MAILCOW_DOMAIN not set (possibly due to pre-result), proceeding anyway for domain %s\", rcpt_domain)\n    end\n\n    local action = task:get_metric_action('default')\n    rspamd_logger.infox(\"TAG_MOO: metric action: %s\", action)\n\n    -- Check if we have a pre-result (e.g., from KEEP_SPAM or POSTMASTER_HANDLER)\n    local allow_processing = false\n    \n    if task.has_pre_result then\n      local has_pre, pre_action = task:has_pre_result()\n      if has_pre then\n        rspamd_logger.infox(\"TAG_MOO: pre-result detected: %s\", tostring(pre_action))\n        if pre_action == 'accept' then\n          allow_processing = true\n          rspamd_logger.infox(\"TAG_MOO: pre-result is accept, will process\")\n        end\n      end\n    end\n\n    -- Allow processing for mild actions or when we have pre-result accept\n    if not allow_processing and action ~= 'no action' and action ~= 'greylist' then\n      rspamd_logger.infox(\"TAG_MOO: skipping tag handler for action: %s\", action)\n      remove_moo_tag()\n      return true\n    end\n\n    rspamd_logger.infox(\"TAG_MOO: processing allowed\")\n\n    local function http_callback(err_message, code, body, headers)\n      if body ~= nil and body ~= \"\" then\n        rspamd_logger.infox(rspamd_config, \"TAG_MOO: expanding rcpt to \\\"%s\\\"\", body)\n\n        local function tag_callback_subject(err, data)\n          if err or type(data) ~= 'string' or data == '' then\n            rspamd_logger.infox(rspamd_config, \"TAG_MOO: subject tag handler rcpt %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\") - trying subfolder tag handler...\", body, data, err)\n\n            local function tag_callback_subfolder(err, data)\n              if err or type(data) ~= 'string' or data == '' then\n                rspamd_logger.infox(rspamd_config, \"TAG_MOO: subfolder tag handler for rcpt %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\")\", body, data, err)\n                remove_moo_tag()\n              else\n                rspamd_logger.infox(\"TAG_MOO: User wants subfolder tag, adding X-Moo-Tag header\")\n                task:set_milter_reply({\n                  add_headers = {['X-Moo-Tag'] = 'YES'}\n                })\n              end\n            end\n\n            local redis_ret_subfolder = rspamd_redis_make_request(task,\n              redis_params, -- connect params\n              body, -- hash key\n              false, -- is write\n              tag_callback_subfolder, --callback\n              'HGET', -- command\n              {'RCPT_WANTS_SUBFOLDER_TAG', body} -- arguments\n            )\n            if not redis_ret_subfolder then\n              rspamd_logger.infox(rspamd_config, \"TAG_MOO: cannot make request to load tag handler for rcpt\")\n              remove_moo_tag()\n            end\n\n          else\n            rspamd_logger.infox(\"TAG_MOO: user wants subject modified for tagged mail\")\n            local sbj = task:get_header('Subject') or ''\n            local tag_value = tag[1] and tag[1].options and tag[1].options[1] or ''\n            new_sbj = '=?UTF-8?B?' .. tostring(util.encode_base64('[' .. tag_value .. '] ' .. sbj)) .. '?='\n            task:set_milter_reply({\n              remove_headers = {\n                ['Subject'] = 1,\n                ['X-Moo-Tag'] = 0\n              },\n              add_headers = {['Subject'] = new_sbj}\n            })\n          end\n        end\n\n        local redis_ret_subject = rspamd_redis_make_request(task,\n          redis_params, -- connect params\n          body, -- hash key\n          false, -- is write\n          tag_callback_subject, --callback\n          'HGET', -- command\n          {'RCPT_WANTS_SUBJECT_TAG', body} -- arguments\n        )\n        if not redis_ret_subject then\n          rspamd_logger.infox(rspamd_config, \"TAG_MOO: cannot make request to load tag handler for rcpt\")\n          remove_moo_tag()\n        end\n      else\n        rspamd_logger.infox(\"TAG_MOO: alias expansion returned empty body\")\n        remove_moo_tag()\n      end\n    end\n\n    local rcpt_split = rspamd_str_split(rcpt_addr, '@')\n    if #rcpt_split == 2 then\n      if rcpt_split[1]:match('^postmaster') then\n        rspamd_logger.infox(rspamd_config, \"TAG_MOO: not expanding postmaster alias\")\n        remove_moo_tag()\n      else\n        rspamd_logger.infox(\"TAG_MOO: requesting alias expansion for %s\", rcpt_addr)\n        rspamd_http.request({\n          task=task,\n          url='http://nginx:8081/aliasexp.php',\n          body='',\n          callback=http_callback,\n          headers={Rcpt=rcpt_addr},\n        })\n      end\n    else\n      rspamd_logger.infox(\"TAG_MOO: invalid rcpt format\")\n      remove_moo_tag()\n    end\n  end,\n  priority = 19\n})\n\nrspamd_config:register_symbol({\n  name = 'BCC',\n  type = 'postfilter',\n  flags = 'ignore_passthrough',\n  callback = function(task)\n    local util = require(\"rspamd_util\")\n    local rspamd_http = require \"rspamd_http\"\n    local rspamd_logger = require \"rspamd_logger\"\n\n    local from_table = {}\n    local rcpt_table = {}\n\n    if task:has_symbol('ENCRYPTED_CHAT') then\n      return -- stop\n    end\n\n    local send_mail = function(task, bcc_dest)\n      local lua_smtp = require \"lua_smtp\"\n      local function sendmail_cb(ret, err)\n        if not ret then\n          rspamd_logger.errx(task, 'BCC SMTP ERROR: %s', err)\n        else\n          rspamd_logger.infox(rspamd_config, \"BCC SMTP SUCCESS TO %s\", bcc_dest)\n        end\n      end\n      if not bcc_dest then\n        return -- stop\n      end\n      -- dot stuff content before sending\n      local email_content = tostring(task:get_content())\n      email_content = string.gsub(email_content, \"\\r\\n%.\", \"\\r\\n..\")\n      -- send mail\n      local from_smtp = task:get_from('smtp')\n      local from_addr = (from_smtp and from_smtp[1] and from_smtp[1].addr) or 'mailer-daemon@localhost'\n      lua_smtp.sendmail({\n        task = task,\n        host = os.getenv(\"IPV4_NETWORK\") .. '.253',\n        port = 591,\n        from = from_addr,\n        recipients = bcc_dest,\n        helo = 'bcc',\n        timeout = 20,\n      }, email_content, sendmail_cb)\n    end\n\n    -- determine from\n    local from = task:get_from('smtp')\n    if from then\n      for _, a in ipairs(from) do\n        table.insert(from_table, a['addr']) -- add this rcpt to table\n        table.insert(from_table, '@' .. a['domain']) -- add this rcpts domain to table\n      end\n    else\n      return -- stop\n    end\n\n    -- determine rcpts\n    local rcpts = task:get_recipients('smtp')\n    if rcpts then\n      for _, a in ipairs(rcpts) do\n        table.insert(rcpt_table, a['addr']) -- add this rcpt to table\n        table.insert(rcpt_table, '@' .. a['domain']) -- add this rcpts domain to table\n      end\n    else\n      return -- stop\n    end\n\n    local action = task:get_metric_action('default')\n    rspamd_logger.infox(\"BCC: metric action: %s\", action)\n\n    -- Check for pre-result accept (e.g., from KEEP_SPAM)\n    local allow_bcc = false\n    if task.has_pre_result then\n      local has_pre, pre_action = task:has_pre_result()\n      if has_pre and pre_action == 'accept' then\n        allow_bcc = true\n        rspamd_logger.infox(\"BCC: pre-result accept detected, will send BCC\")\n      end\n    end\n\n    -- Allow BCC for mild actions or when we have pre-result accept\n    if not allow_bcc and action ~= 'no action' and action ~= 'add header' and action ~= 'rewrite subject' then\n      rspamd_logger.infox(\"BCC: skipping for action: %s\", action)\n      return\n    end\n\n    local function rcpt_callback(err_message, code, body, headers)\n      if err_message == nil and code == 201 and body ~= nil then\n        rspamd_logger.infox(\"BCC: sending BCC to %s for rcpt match\", body)\n        send_mail(task, body)\n      end\n    end\n\n    local function from_callback(err_message, code, body, headers)\n      if err_message == nil and code == 201 and body ~= nil then\n        rspamd_logger.infox(\"BCC: sending BCC to %s for from match\", body)\n        send_mail(task, body)\n      end\n    end\n\n    if rcpt_table then\n      for _,e in ipairs(rcpt_table) do\n        rspamd_logger.infox(rspamd_config, \"BCC: checking bcc for rcpt address %s\", e)\n        rspamd_http.request({\n          task=task,\n          url='http://nginx:8081/bcc.php',\n          body='',\n          callback=rcpt_callback,\n          headers={Rcpt=e}\n        })\n      end\n    end\n\n    if from_table then\n      for _,e in ipairs(from_table) do\n        rspamd_logger.infox(rspamd_config, \"BCC: checking bcc for from address %s\", e)\n        rspamd_http.request({\n          task=task,\n          url='http://nginx:8081/bcc.php',\n          body='',\n          callback=from_callback,\n          headers={From=e}\n        })\n      end\n    end\n\n    -- Don't return true to avoid symbol being logged\n  end,\n  priority = 20\n})\n\nrspamd_config:register_symbol({\n  name = 'DYN_RL_CHECK',\n  type = 'prefilter',\n  callback = function(task)\n    local util = require(\"rspamd_util\")\n    local redis_params = rspamd_parse_redis_server('dyn_rl')\n    local rspamd_logger = require \"rspamd_logger\"\n    local envfrom = task:get_from(1)\n    local envrcpt = task:get_recipients(1) or {}\n    local uname = task:get_user()\n    if not envfrom or not uname then\n      return false\n    end\n\n    local uname = uname:lower()\n\n    if #envrcpt == 1 and envrcpt[1].addr:lower() == uname then\n      return false\n    end\n\n    local env_from_domain = envfrom[1].domain:lower() -- get smtp from domain in lower case\n\n    local function redis_cb_user(err, data)\n\n      if err or type(data) ~= 'string' then\n        rspamd_logger.infox(rspamd_config, \"dynamic ratelimit request for user %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\") - trying dynamic ratelimit for domain...\", uname, data, err)\n\n        local function redis_key_cb_domain(err, data)\n          if err or type(data) ~= 'string' then\n            rspamd_logger.infox(rspamd_config, \"dynamic ratelimit request for domain %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\")\", env_from_domain, data, err)\n          else\n            rspamd_logger.infox(rspamd_config, \"found dynamic ratelimit in redis for domain %s with value %s\", env_from_domain, data)\n            task:insert_result('DYN_RL', 0.0, data, env_from_domain)\n          end\n        end\n\n        local redis_ret_domain = rspamd_redis_make_request(task,\n          redis_params, -- connect params\n          env_from_domain, -- hash key\n          false, -- is write\n          redis_key_cb_domain, --callback\n          'HGET', -- command\n          {'RL_VALUE', env_from_domain} -- arguments\n        )\n        if not redis_ret_domain then\n          rspamd_logger.infox(rspamd_config, \"cannot make request to load ratelimit for domain\")\n        end\n      else\n        rspamd_logger.infox(rspamd_config, \"found dynamic ratelimit in redis for user %s with value %s\", uname, data)\n        task:insert_result('DYN_RL', 0.0, data, uname)\n      end\n\n    end\n\n    local redis_ret_user = rspamd_redis_make_request(task,\n      redis_params, -- connect params\n      uname, -- hash key\n      false, -- is write\n      redis_cb_user, --callback\n      'HGET', -- command\n      {'RL_VALUE', uname} -- arguments\n    )\n    if not redis_ret_user then\n      rspamd_logger.infox(rspamd_config, \"cannot make request to load ratelimit for user\")\n    end\n    return true\n  end,\n  flags = 'empty',\n  priority = 20\n})\n\nrspamd_config:register_symbol({\n  name = 'NO_LOG_STAT',\n  type = 'postfilter',\n  callback = function(task)\n    local from = task:get_header('From')\n    if from and (monitoring_hosts:get_key(from) or from == \"watchdog@localhost\") then\n      task:set_flag('no_log')\n      task:set_flag('no_stat')\n    end\n  end\n})\n\nrspamd_config:register_symbol({\n  name = 'MOO_FOOTER',\n  type = 'prefilter',\n  callback = function(task)\n    local cjson = require \"cjson\"\n    local lua_mime = require \"lua_mime\"\n    local lua_util = require \"lua_util\"\n    local rspamd_logger = require \"rspamd_logger\"\n    local rspamd_http = require \"rspamd_http\"\n    local envfrom = task:get_from(1)\n    local uname = task:get_user()\n    if not envfrom or not uname then\n      return false\n    end\n    local uname = uname:lower()\n    local env_from_domain = envfrom[1].domain:lower()\n    local env_from_addr = envfrom[1].addr:lower()\n\n    -- determine newline type\n    local function newline(task)\n      local t = task:get_newlines_type()\n\n      if t == 'cr' then\n        return '\\r'\n      elseif t == 'lf' then\n        return '\\n'\n      end\n\n      return '\\r\\n'\n    end\n    -- retrieve footer\n    local function footer_cb(err_message, code, data, headers)\n      if err or type(data) ~= 'string' then\n        rspamd_logger.infox(rspamd_config, \"domain wide footer request for user %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\")\", uname, data, err)\n      else\n\n        -- parse json string\n        local footer = cjson.decode(data)\n        if not footer then\n          rspamd_logger.infox(rspamd_config, \"parsing domain wide footer for user %s returned invalid or empty data (\\\"%s\\\") or error (\\\"%s\\\")\", uname, data, err)\n        else\n          if footer and type(footer) == \"table\" and (footer.html and footer.html ~= \"\" or footer.plain and footer.plain ~= \"\")  then\n            rspamd_logger.infox(rspamd_config, \"found domain wide footer for user %s: html=%s, plain=%s, vars=%s\", uname, footer.html, footer.plain, footer.vars)\n\n            if footer.skip_replies ~= 0 then\n              in_reply_to = task:get_header_raw('in-reply-to')\n              if in_reply_to then\n                rspamd_logger.infox(rspamd_config, \"mail is a reply - skip footer\")\n                return\n              end\n            end\n\n            local envfrom_mime = task:get_from(2)\n            local from_name = \"\"\n            if envfrom_mime and envfrom_mime[1].name then\n              from_name = envfrom_mime[1].name\n            elseif envfrom and envfrom[1].name then\n              from_name = envfrom[1].name\n            end\n\n            -- default replacements\n            local replacements = {\n              auth_user = uname,\n              from_user = envfrom[1].user,\n              from_name = from_name,\n              from_addr = envfrom[1].addr,\n              from_domain = envfrom[1].domain:lower()\n            }\n            -- add custom mailbox attributes\n            if footer.vars and type(footer.vars) == \"string\" then\n              local footer_vars = cjson.decode(footer.vars)\n\n              if type(footer_vars) == \"table\" then\n                for key, value in pairs(footer_vars) do\n                  replacements[key] = value\n                end\n              end\n            end\n            if footer.html and footer.html ~= \"\" then\n              footer.html = lua_util.jinja_template(footer.html, replacements, true)\n            end\n            if footer.plain and footer.plain ~= \"\" then\n              footer.plain = lua_util.jinja_template(footer.plain, replacements, true)\n            end\n\n            -- add footer\n            local out = {}\n            local rewrite = lua_mime.add_text_footer(task, footer.html, footer.plain) or {}\n\n            local seen_cte\n            local newline_s = newline(task)\n\n            local function rewrite_ct_cb(name, hdr)\n              if rewrite.need_rewrite_ct then\n                if name:lower() == 'content-type' then\n                  -- include boundary if present\n                  local boundary_part = rewrite.new_ct.boundary and\n                    string.format('; boundary=\"%s\"', rewrite.new_ct.boundary) or ''\n                  local nct = string.format('%s: %s/%s; charset=utf-8%s',\n                      'Content-Type', rewrite.new_ct.type, rewrite.new_ct.subtype, boundary_part)\n                  out[#out + 1] = nct\n                  -- update Content-Type header (include boundary if present)\n                  task:set_milter_reply({\n                    remove_headers = {['Content-Type'] = 0},\n                  })\n                  task:set_milter_reply({\n                    add_headers = {['Content-Type'] = string.format('%s/%s; charset=utf-8%s',\n                      rewrite.new_ct.type, rewrite.new_ct.subtype, boundary_part)}\n                  })\n                  return\n                elseif name:lower() == 'content-transfer-encoding' then\n                  out[#out + 1] = string.format('%s: %s',\n                      'Content-Transfer-Encoding', 'quoted-printable')\n                  -- update Content-Transfer-Encoding header\n                  task:set_milter_reply({\n                    remove_headers = {['Content-Transfer-Encoding'] = 0},\n                  })\n                  task:set_milter_reply({\n                    add_headers = {['Content-Transfer-Encoding'] = 'quoted-printable'}\n                  })\n                  seen_cte = true\n                  return\n                end\n              end\n              out[#out + 1] = hdr.raw:gsub('\\r?\\n?$', '')\n            end\n\n            task:headers_foreach(rewrite_ct_cb, {full = true})\n\n            if not seen_cte and rewrite.need_rewrite_ct then\n              out[#out + 1] = string.format('%s: %s', 'Content-Transfer-Encoding', 'quoted-printable')\n            end\n\n            -- End of headers\n            out[#out + 1] = newline_s\n\n            if rewrite.out then\n              for _,o in ipairs(rewrite.out) do\n                out[#out + 1] = o\n              end\n            else\n              out[#out + 1] = task:get_rawbody()\n            end\n            local out_parts = {}\n            for _,o in ipairs(out) do\n              if type(o) ~= 'table' then\n                out_parts[#out_parts + 1] = o\n                out_parts[#out_parts + 1] = newline_s\n              else\n                local removePrefix = \"--\\x0D\\x0AContent-Type\"\n                if string.lower(string.sub(tostring(o[1]), 1, string.len(removePrefix))) == string.lower(removePrefix) then\n                  o[1] = string.sub(tostring(o[1]), string.len(\"--\\x0D\\x0A\") + 1)\n                end\n                out_parts[#out_parts + 1] = o[1]\n                if o[2] then\n                  out_parts[#out_parts + 1] = newline_s\n                end\n              end\n            end\n            task:set_message(out_parts)\n          else\n            rspamd_logger.infox(rspamd_config, \"domain wide footer request for user %s returned invalid or empty data (\\\"%s\\\")\", uname, data)\n          end\n        end\n      end\n    end\n\n    -- fetch footer\n    rspamd_http.request({\n      task=task,\n      url='http://nginx:8081/footer.php',\n      body='',\n      callback=footer_cb,\n      headers={Domain=env_from_domain,Username=uname,From=env_from_addr},\n    })\n\n    return true\n  end,\n  priority = 1\n})\n"
  },
  {
    "path": "data/conf/rspamd/meta_exporter/pipe.php",
    "content": "<?php\r\n// File size is limited by Nginx site to 10M\r\n// To speed things up, we do not include prerequisites\r\nheader('Content-Type: text/plain');\r\nrequire_once \"vars.inc.php\";\r\n// Do not show errors, we log to using error_log\r\nini_set('error_reporting', 0);\r\n// Init database\r\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\r\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\r\n$opt = [\r\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\r\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\r\n    PDO::ATTR_EMULATE_PREPARES   => false,\r\n];\r\ntry {\r\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\r\n}\r\ncatch (PDOException $e) {\r\n  error_log(\"QUARANTINE: \" . $e . PHP_EOL);\r\n  http_response_code(501);\r\n  exit;\r\n}\r\n// Init Redis\r\n$redis = new Redis();\r\n$redis->connect('redis-mailcow', 6379);\r\n$redis->auth(getenv(\"REDISPASS\"));\r\n\r\n// Functions\r\nfunction parse_email($email) {\r\n  if(!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;\r\n  $a = strrpos($email, '@');\r\n  return array('local' => substr($email, 0, $a), 'domain' => substr(substr($email, $a), 1));\r\n}\r\nif (!function_exists('getallheaders'))  {\r\n  function getallheaders() {\r\n    if (!is_array($_SERVER)) {\r\n      return array();\r\n    }\r\n    $headers = array();\r\n    foreach ($_SERVER as $name => $value) {\r\n      if (substr($name, 0, 5) == 'HTTP_') {\r\n        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;\r\n      }\r\n    }\r\n    return $headers;\r\n  }\r\n}\r\n\r\n$raw_data_content = file_get_contents('php://input');\r\n$raw_data = mb_convert_encoding($raw_data_content, 'HTML-ENTITIES', \"UTF-8\");\r\n$headers = getallheaders();\r\n\r\n$qid      = $headers['X-Rspamd-Qid'];\r\n$fuzzy    = $headers['X-Rspamd-Fuzzy'];\r\n$subject  = iconv_mime_decode($headers['X-Rspamd-Subject']);\r\n$score    = $headers['X-Rspamd-Score'];\r\n$rcpts    = $headers['X-Rspamd-Rcpt'];\r\n$user     = $headers['X-Rspamd-User'];\r\n$ip       = $headers['X-Rspamd-Ip'];\r\n$action   = $headers['X-Rspamd-Action'];\r\n$sender   = $headers['X-Rspamd-From'];\r\n$symbols  = $headers['X-Rspamd-Symbols'];\r\n\r\n$raw_size = (int)$_SERVER['CONTENT_LENGTH'];\r\n\r\nif (empty($sender)) {\r\n  error_log(\"QUARANTINE: Unknown sender, assuming empty-env-from@localhost\" . PHP_EOL);\r\n  $sender = 'empty-env-from@localhost';\r\n}\r\n\r\nif ($fuzzy == 'unknown') {\r\n  $fuzzy = '[]';\r\n}\r\n\r\ntry {\r\n  $max_size = (int)$redis->Get('Q_MAX_SIZE');\r\n  if (($max_size * 1048576) < $raw_size) {\r\n    error_log(sprintf(\"QUARANTINE: Message too large: %d b exceeds %d b\", $raw_size, ($max_size * 1048576)) . PHP_EOL);\r\n    http_response_code(505);\r\n    exit;\r\n  }\r\n  if ($exclude_domains = $redis->Get('Q_EXCLUDE_DOMAINS')) {\r\n    $exclude_domains = json_decode($exclude_domains, true);\r\n  }\r\n  $retention_size = (int)$redis->Get('Q_RETENTION_SIZE');\r\n}\r\ncatch (RedisException $e) {\r\n  error_log(\"QUARANTINE: \" . $e . PHP_EOL);\r\n  http_response_code(504);\r\n  exit;\r\n}\r\n\r\n$rcpt_final_mailboxes = array();\r\n\r\n// Loop through all rcpts\r\nforeach (json_decode($rcpts, true) as $rcpt) {\r\n  // Remove tag\r\n  $rcpt = preg_replace('/^(.*?)\\+.*(@.*)$/', '$1$2', $rcpt);\r\n\r\n  // Break rcpt into local part and domain part\r\n  $parsed_rcpt = parse_email($rcpt);\r\n\r\n  // Skip if not a mailcow handled domain\r\n  try {\r\n    if (!$redis->hGet('DOMAIN_MAP', $parsed_rcpt['domain'])) {\r\n      continue;\r\n    }\r\n  }\r\n  catch (RedisException $e) {\r\n    error_log(\"QUARANTINE: \" . $e . PHP_EOL);\r\n    http_response_code(504);\r\n    exit;\r\n  }\r\n\r\n  // Skip if domain is excluded\r\n  if (in_array($parsed_rcpt['domain'], $exclude_domains)) {\r\n    error_log(sprintf(\"QUARANTINE: Skipped domain %s\", $parsed_rcpt['domain']) . PHP_EOL);\r\n    continue;\r\n  }\r\n\r\n  // Always assume rcpt is not a final mailbox but an alias for a mailbox or further aliases\r\n  //\r\n  //             rcpt\r\n  //              |\r\n  // mailbox <-- goto ---> alias1, alias2, mailbox2\r\n  //                          |       |\r\n  //                      mailbox3    |\r\n  //                                  |\r\n  //                               alias3 ---> mailbox4\r\n  //\r\n  try {\r\n    $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :rcpt AND `active` = '1'\");\r\n    $stmt->execute(array(\r\n      ':rcpt' => $rcpt\r\n    ));\r\n    $gotos = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n    if (empty($gotos)) {\r\n      $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :rcpt AND `active` = '1'\");\r\n      $stmt->execute(array(\r\n        ':rcpt' => '@' . $parsed_rcpt['domain']\r\n      ));\r\n      $gotos = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n    }\r\n    if (empty($gotos)) {\r\n      $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :rcpt AND `active` = '1'\");\r\n      $stmt->execute(array(':rcpt' => $parsed_rcpt['domain']));\r\n      $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];\r\n      if ($goto_branch) {\r\n        $gotos = $parsed_rcpt['local'] . '@' . $goto_branch;\r\n      }\r\n    }\r\n    $gotos_array = explode(',', $gotos);\r\n\r\n    $loop_c = 0;\r\n\r\n    while (count($gotos_array) != 0 && $loop_c <= 20) {\r\n\r\n      // Loop through all found gotos\r\n      foreach ($gotos_array as $index => &$goto) {\r\n        error_log(\"RCPT RESOVLER: http pipe: query \" . $goto . \" as username from mailbox\" . PHP_EOL);\r\n        $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `username` = :goto AND (`active`= '1' OR `active`= '2');\");\r\n        $stmt->execute(array(':goto' => $goto));\r\n        $username = $stmt->fetch(PDO::FETCH_ASSOC)['username'];\r\n        if (!empty($username)) {\r\n          error_log(\"RCPT RESOVLER: http pipe: mailbox found: \" . $username . PHP_EOL);\r\n          // Current goto is a mailbox, save to rcpt_final_mailboxes if not a duplicate\r\n          if (!in_array($username, $rcpt_final_mailboxes)) {\r\n            $rcpt_final_mailboxes[] = $username;\r\n          }\r\n        }\r\n        else {\r\n          $parsed_goto = parse_email($goto);\r\n          if (!$redis->hGet('DOMAIN_MAP', $parsed_goto['domain'])) {\r\n            error_log(\"RCPT RESOVLER:\" . $goto . \" is not a mailcow handled mailbox or alias address\" . PHP_EOL);\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :goto AND `active` = '1'\");\r\n            $stmt->execute(array(':goto' => $goto));\r\n            $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n            if ($goto_branch) {\r\n              error_log(\"RCPT RESOVLER: http pipe: goto address \" . $goto . \" is an alias branch for \" . $goto_branch . PHP_EOL);\r\n              $goto_branch_array = explode(',', $goto_branch);\r\n            } else {\r\n              $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` = '1'\");\r\n              $stmt->execute(array(':domain' => $parsed_goto['domain']));\r\n              $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];\r\n              if ($goto_branch) {\r\n                error_log(\"RCPT RESOVLER: http pipe: goto domain \" . $parsed_goto['domain'] . \" is a domain alias branch for \" . $goto_branch . PHP_EOL);\r\n                $goto_branch_array = array($parsed_goto['local'] . '@' . $goto_branch);\r\n              }\r\n            }\r\n          }\r\n        }\r\n        // goto item was processed, unset\r\n        unset($gotos_array[$index]);\r\n      }\r\n\r\n      // Merge goto branch array derived from previous loop (if any), filter duplicates and unset goto branch array\r\n      if (!empty($goto_branch_array)) {\r\n        $gotos_array = array_unique(array_merge($gotos_array, $goto_branch_array));\r\n        unset($goto_branch_array);\r\n      }\r\n\r\n      // Reindex array\r\n      $gotos_array = array_values($gotos_array);\r\n\r\n      // Force exit if loop cannot be solved\r\n      // Postfix does not allow for alias loops, so this should never happen.\r\n      $loop_c++;\r\n      error_log(\"RCPT RESOVLER: http pipe: goto array count on loop #\". $loop_c . \" is \" . count($gotos_array) . PHP_EOL);\r\n    }\r\n  }\r\n  catch (PDOException $e) {\r\n    error_log(\"RCPT RESOVLER: \" . $e->getMessage() . PHP_EOL);\r\n    http_response_code(502);\r\n    exit;\r\n  }\r\n}\r\n\r\nforeach ($rcpt_final_mailboxes as $rcpt_final) {\r\n  error_log(\"QUARANTINE: quarantine pipe: processing quarantine message for rcpt \" . $rcpt_final . PHP_EOL);\r\n  try {\r\n    $stmt = $pdo->prepare(\"INSERT INTO `quarantine` (`qid`, `subject`, `score`, `sender`, `rcpt`, `symbols`, `user`, `ip`, `msg`, `action`, `fuzzy_hashes`)\r\n      VALUES (:qid, :subject, :score, :sender, :rcpt, :symbols, :user, :ip, :msg, :action, :fuzzy_hashes)\");\r\n    $stmt->execute(array(\r\n      ':qid' => $qid,\r\n      ':subject' => $subject,\r\n      ':score' => $score,\r\n      ':sender' => $sender,\r\n      ':rcpt' => $rcpt_final,\r\n      ':symbols' => $symbols,\r\n      ':user' => $user,\r\n      ':ip' => $ip,\r\n      ':msg' => $raw_data,\r\n      ':action' => $action,\r\n      ':fuzzy_hashes' => $fuzzy\r\n    ));\r\n    $lastId = $pdo->lastInsertId();\r\n    $stmt_update = $pdo->prepare(\"UPDATE `quarantine` SET `qhash` = SHA2(CONCAT(`id`, `qid`), 256) WHERE `id` = :id\");\r\n    $stmt_update->execute(array(':id' => $lastId));\r\n    $stmt = $pdo->prepare('DELETE FROM `quarantine` WHERE `rcpt` = :rcpt AND `id` NOT IN (\r\n      SELECT `id`\r\n      FROM (\r\n        SELECT `id`\r\n        FROM `quarantine`\r\n        WHERE `rcpt` = :rcpt2\r\n        ORDER BY id DESC\r\n        LIMIT :retention_size\r\n      ) x\r\n    );');\r\n    $stmt->execute(array(\r\n      ':rcpt' => $rcpt_final,\r\n      ':rcpt2' => $rcpt_final,\r\n      ':retention_size' => $retention_size\r\n    ));\r\n  }\r\n  catch (PDOException $e) {\r\n    error_log(\"QUARANTINE: \" . $e->getMessage() . PHP_EOL);\r\n    http_response_code(503);\r\n    exit;\r\n  }\r\n}\r\n\r\n"
  },
  {
    "path": "data/conf/rspamd/meta_exporter/pipe_rl.php",
    "content": "<?php\r\n// File size is limited by Nginx site to 10M\r\n// To speed things up, we do not include prerequisites\r\nheader('Content-Type: text/plain');\r\nrequire_once \"vars.inc.php\";\r\n// Do not show errors, we log to using error_log\r\nini_set('error_reporting', 0);\r\n// Init Redis\r\n$redis = new Redis();\r\ntry {\r\n  if (!empty(getenv('REDIS_SLAVEOF_IP'))) {\r\n    $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));\r\n  }\r\n  else {\r\n    $redis->connect('redis-mailcow', 6379);\r\n  }\r\n  $redis->auth(getenv(\"REDISPASS\"));\r\n}\r\ncatch (Exception $e) {\r\n  exit;\r\n}\r\n\r\n$raw_data_content = file_get_contents('php://input');\r\n$raw_data_decoded = json_decode($raw_data_content, true);\r\n\r\n$data['time'] = time();\r\n$data['rcpt'] = implode(', ', $raw_data_decoded['rcpt']);\r\n$data['from'] = $raw_data_decoded['from'];\r\n$data['user'] = $raw_data_decoded['user'];\r\n$symbol_rl_key = array_search('RATELIMITED', array_column($raw_data_decoded['symbols'], 'name'));\r\n$data['rl_info'] = implode($raw_data_decoded['symbols'][$symbol_rl_key]['options']);\r\npreg_match('/(.+)\\((.+)\\)/i', $data['rl_info'], $rl_matches);\r\nif (!empty($rl_matches[1]) && !empty($rl_matches[2])) {\r\n  $data['rl_name'] = $rl_matches[1];\r\n  $data['rl_hash'] = $rl_matches[2];\r\n}\r\nelse {\r\n  $data['rl_name'] = 'err';\r\n  $data['rl_hash'] = 'err';\r\n}\r\n$data['qid'] = $raw_data_decoded['qid'];\r\n$data['ip'] = $raw_data_decoded['ip'];\r\n$data['message_id'] = $raw_data_decoded['message_id'];\r\n$data['header_subject'] = implode(' ', $raw_data_decoded['header_subject']);\r\n$data['header_from'] = implode(', ', $raw_data_decoded['header_from']);\r\n\r\n$redis->lpush('RL_LOG', json_encode($data));\r\nexit;\r\n\r\n"
  },
  {
    "path": "data/conf/rspamd/meta_exporter/pushover.php",
    "content": "<?php\r\n// File size is limited by Nginx site to 10M\r\n// To speed things up, we do not include prerequisites\r\nheader('Content-Type: text/plain');\r\nrequire_once \"vars.inc.php\";\r\n// Do not show errors, we log to using error_log\r\nini_set('error_reporting', 0);\r\n// Init database\r\n//$dsn = $database_type . ':host=' . $database_host . ';dbname=' . $database_name;\r\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\r\n$opt = [\r\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\r\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\r\n    PDO::ATTR_EMULATE_PREPARES   => false,\r\n];\r\ntry {\r\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\r\n}\r\ncatch (PDOException $e) {\r\n  error_log(\"NOTIFY: \" . $e . PHP_EOL);\r\n  http_response_code(501);\r\n  exit;\r\n}\r\n// Init Redis\r\n$redis = new Redis();\r\n$redis->connect('redis-mailcow', 6379);\r\n$redis->auth(getenv(\"REDISPASS\"));\r\n\r\n// Functions\r\nfunction parse_email($email) {\r\n  if(!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;\r\n  $a = strrpos($email, '@');\r\n  return array('local' => substr($email, 0, $a), 'domain' => substr(substr($email, $a), 1));\r\n}\r\nif (!function_exists('getallheaders'))  {\r\n  function getallheaders() {\r\n    if (!is_array($_SERVER)) {\r\n      return array();\r\n    }\r\n    $headers = array();\r\n    foreach ($_SERVER as $name => $value) {\r\n      if (substr($name, 0, 5) == 'HTTP_') {\r\n        $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;\r\n      }\r\n    }\r\n    return $headers;\r\n  }\r\n}\r\n\r\n$headers = getallheaders();\r\n$json_body = json_decode(file_get_contents('php://input'));\r\n\r\n$qid      = $headers['X-Rspamd-Qid'];\r\n$rcpts    = $headers['X-Rspamd-Rcpt'];\r\n$sender   = $headers['X-Rspamd-From'];\r\n$ip       = $headers['X-Rspamd-Ip'];\r\n$subject  = iconv_mime_decode($headers['X-Rspamd-Subject']);\r\n$messageid= $json_body->message_id;\r\n$priority = 0;\r\n\r\n$symbols_array = json_decode($headers['X-Rspamd-Symbols'], true);\r\nif (is_array($symbols_array)) {\r\n  foreach ($symbols_array as $symbol) {\r\n    if ($symbol['name'] == 'HAS_X_PRIO_ONE') {\r\n      $priority = 1;\r\n      break;\r\n    }\r\n  }\r\n}\r\n\r\n$sender_address = $json_body->header_from[0];\r\n$sender_name = '-';\r\nif (preg_match('/(?<name>.*?)<(?<address>.*?)>/i', $sender_address, $matches)) {\r\n\t$sender_address = $matches['address'];\r\n  $sender_name =  trim($matches['name'], '\"\\' ');\r\n}\r\n\r\n$to_address = $json_body->header_to[0];\r\n$to_name = '-';\r\nif (preg_match('/(?<name>.*?)<(?<address>.*?)>/i', $to_address, $matches)) {\r\n\t$to_address = $matches['address'];\r\n  $to_name =  trim($matches['name'], '\"\\' ');\r\n}\r\n\r\n$rcpt_final_mailboxes = array();\r\n\r\n// Loop through all rcpts\r\nforeach (json_decode($rcpts, true) as $rcpt) {\r\n  // Remove tag\r\n  $rcpt = preg_replace('/^(.*?)\\+.*(@.*)$/', '$1$2', $rcpt);\r\n\r\n  // Break rcpt into local part and domain part\r\n  $parsed_rcpt = parse_email($rcpt);\r\n\r\n  // Skip if not a mailcow handled domain\r\n  try {\r\n    if (!$redis->hGet('DOMAIN_MAP', $parsed_rcpt['domain'])) {\r\n      continue;\r\n    }\r\n  }\r\n  catch (RedisException $e) {\r\n    error_log(\"NOTIFY: \" . $e . PHP_EOL);\r\n    http_response_code(504);\r\n    exit;\r\n  }\r\n\r\n  // Always assume rcpt is not a final mailbox but an alias for a mailbox or further aliases\r\n  //\r\n  //             rcpt\r\n  //              |\r\n  // mailbox <-- goto ---> alias1, alias2, mailbox2\r\n  //                          |       |\r\n  //                      mailbox3    |\r\n  //                                  |\r\n  //                               alias3 ---> mailbox4\r\n  //\r\n  try {\r\n    $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :rcpt AND `active` = '1'\");\r\n    $stmt->execute(array(\r\n      ':rcpt' => $rcpt\r\n    ));\r\n    $gotos = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n    if (empty($gotos)) {\r\n      $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :rcpt AND `active` = '1'\");\r\n      $stmt->execute(array(\r\n        ':rcpt' => '@' . $parsed_rcpt['domain']\r\n      ));\r\n      $gotos = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n    }\r\n    if (empty($gotos)) {\r\n      $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :rcpt AND `active` = '1'\");\r\n      $stmt->execute(array(':rcpt' => $parsed_rcpt['domain']));\r\n      $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];\r\n      if ($goto_branch) {\r\n        $gotos = $parsed_rcpt['local'] . '@' . $goto_branch;\r\n      }\r\n    }\r\n    $gotos_array = explode(',', $gotos);\r\n\r\n    $loop_c = 0;\r\n\r\n    while (count($gotos_array) != 0 && $loop_c <= 20) {\r\n\r\n      // Loop through all found gotos\r\n      foreach ($gotos_array as $index => &$goto) {\r\n        error_log(\"RCPT RESOVLER: http pipe: query \" . $goto . \" as username from mailbox\" . PHP_EOL);\r\n        $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `username` = :goto AND (`active`= '1' OR `active`= '2');\");\r\n        $stmt->execute(array(':goto' => $goto));\r\n        $username = $stmt->fetch(PDO::FETCH_ASSOC)['username'];\r\n        if (!empty($username)) {\r\n          error_log(\"RCPT RESOVLER: http pipe: mailbox found: \" . $username . PHP_EOL);\r\n          // Current goto is a mailbox, save to rcpt_final_mailboxes if not a duplicate\r\n          if (!in_array($username, $rcpt_final_mailboxes)) {\r\n            $rcpt_final_mailboxes[] = $username;\r\n          }\r\n        }\r\n        else {\r\n          $parsed_goto = parse_email($goto);\r\n          if (!$redis->hGet('DOMAIN_MAP', $parsed_goto['domain'])) {\r\n            error_log(\"RCPT RESOVLER:\" . $goto . \" is not a mailcow handled mailbox or alias address\" . PHP_EOL);\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT `goto` FROM `alias` WHERE `address` = :goto AND `active` = '1'\");\r\n            $stmt->execute(array(':goto' => $goto));\r\n            $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n            if ($goto_branch) {\r\n              error_log(\"RCPT RESOVLER: http pipe: goto address \" . $goto . \" is an alias branch for \" . $goto_branch . PHP_EOL);\r\n              $goto_branch_array = explode(',', $goto_branch);\r\n            } else {\r\n              $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain AND `active` = '1'\");\r\n              $stmt->execute(array(':domain' => $parsed_goto['domain']));\r\n              $goto_branch = $stmt->fetch(PDO::FETCH_ASSOC)['target_domain'];\r\n              if ($goto_branch) {\r\n                error_log(\"RCPT RESOVLER: http pipe: goto domain \" . $parsed_goto['domain'] . \" is a domain alias branch for \" . $goto_branch . PHP_EOL);\r\n                $goto_branch_array = array($parsed_goto['local'] . '@' . $goto_branch);\r\n              }\r\n            }\r\n          }\r\n        }\r\n        // goto item was processed, unset\r\n        unset($gotos_array[$index]);\r\n      }\r\n\r\n      // Merge goto branch array derived from previous loop (if any), filter duplicates and unset goto branch array\r\n      if (!empty($goto_branch_array)) {\r\n        $gotos_array = array_unique(array_merge($gotos_array, $goto_branch_array));\r\n        unset($goto_branch_array);\r\n      }\r\n\r\n      // Reindex array\r\n      $gotos_array = array_values($gotos_array);\r\n\r\n      // Force exit if loop cannot be solved\r\n      // Postfix does not allow for alias loops, so this should never happen.\r\n      $loop_c++;\r\n      error_log(\"RCPT RESOVLER: http pipe: goto array count on loop #\". $loop_c . \" is \" . count($gotos_array) . PHP_EOL);\r\n    }\r\n  }\r\n  catch (PDOException $e) {\r\n    error_log(\"RCPT RESOVLER: \" . $e->getMessage() . PHP_EOL);\r\n    http_response_code(502);\r\n    exit;\r\n  }\r\n}\r\n\r\n\r\nforeach ($rcpt_final_mailboxes as $rcpt_final) {\r\n  error_log(\"NOTIFY: pushover pipe: processing pushover message for rcpt \" . $rcpt_final . PHP_EOL);\r\n  $stmt = $pdo->prepare(\"SELECT * FROM `pushover`\r\n    WHERE `username` = :username AND `active` = '1'\");\r\n  $stmt->execute(array(\r\n    ':username' => $rcpt_final\r\n  ));\r\n  $api_data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n  if (isset($api_data['key']) && isset($api_data['token'])) {\r\n    $title = (!empty($api_data['title'])) ? $api_data['title'] : 'Mail';\r\n    $text = (!empty($api_data['text'])) ? $api_data['text'] : 'You\\'ve got mail 📧';\r\n    $attributes = json_decode($api_data['attributes'], true);\r\n    $senders = explode(',', $api_data['senders']);\r\n    $senders = array_filter($senders);\r\n    $senders_regex = $api_data['senders_regex'];\r\n    $sender_validated = false;\r\n    if (empty($senders) && empty($senders_regex)) {\r\n      $sender_validated = true;\r\n    }\r\n    else {\r\n      if (!empty($senders)) {\r\n        if (in_array($sender, $senders)) {\r\n          $sender_validated = true;\r\n        }\r\n      }\r\n      if (!empty($senders_regex) && $sender_validated !== true) {\r\n        if (preg_match($senders_regex, $sender)) {\r\n          $sender_validated = true;\r\n        }\r\n      }\r\n    }\r\n    if ($sender_validated === false) {\r\n      error_log(\"NOTIFY: pushover pipe: skipping unwanted sender \" . $sender);\r\n      continue;\r\n    }\r\n    if ($attributes['only_x_prio'] == \"1\" && $priority == 0) {\r\n      error_log(\"NOTIFY: pushover pipe: mail has no X-Priority: 1 header, skipping\");\r\n      continue;\r\n    }\r\n    $post_fields = array(\r\n      \"token\" => $api_data['token'],\r\n      \"user\" => $api_data['key'],\r\n      \"title\" => sprintf(\"%s\", str_replace(\r\n        array('{SUBJECT}', '{SENDER}', '{SENDER_NAME}', '{SENDER_ADDRESS}', '{TO_NAME}', '{TO_ADDRESS}', '{MSG_ID}'),\r\n        array($subject, $sender, $sender_name, $sender_address, $to_name, $to_address, $messageid), $title)\r\n      ),\r\n      \"priority\" => $priority,\r\n      \"message\" => sprintf(\"%s\", str_replace(\r\n        array('{SUBJECT}', '{SENDER}', '{SENDER_NAME}', '{SENDER_ADDRESS}', '{TO_NAME}', '{TO_ADDRESS}', '{MSG_ID}', '\\n'),\r\n        array($subject, $sender, $sender_name, $sender_address, $to_name, $to_address, $messageid, PHP_EOL), $text)\r\n      ),\r\n      \"sound\" => $attributes['sound'] ?? \"pushover\"\r\n    );\r\n    if ($attributes['evaluate_x_prio'] == \"1\" && $priority == 1) {\r\n      $post_fields['expire'] = 600;\r\n      $post_fields['retry'] = 120;\r\n      $post_fields['priority'] = 2;\r\n    }\r\n    curl_setopt_array($ch = curl_init(), array(\r\n      CURLOPT_URL => \"https://api.pushover.net/1/messages.json\",\r\n      CURLOPT_POSTFIELDS => $post_fields,\r\n      CURLOPT_SAFE_UPLOAD => true,\r\n      CURLOPT_RETURNTRANSFER => true,\r\n    ));\r\n    $result = curl_exec($ch);\r\n    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\r\n    curl_close($ch);\r\n    error_log(\"NOTIFY: result: \" . $httpcode . PHP_EOL);\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/conf/rspamd/meta_exporter/vars.inc.php",
    "content": "<?php\nrequire_once('../../../web/inc/vars.inc.php');\nif (file_exists('../../../web/inc/vars.local.inc.php')) {\n  include_once('../../../web/inc/vars.local.inc.php');\n}\n?>\n"
  },
  {
    "path": "data/conf/rspamd/plugins.d/README.md",
    "content": "This is where you should copy any rspamd custom module\n"
  },
  {
    "path": "data/conf/rspamd/rspamd.conf.local",
    "content": "# rspamd.conf.local\n"
  },
  {
    "path": "data/conf/rspamd/rspamd.conf.override",
    "content": "# rspamd.conf.override\n\n"
  },
  {
    "path": "data/conf/sogo/custom-sogo.js",
    "content": "// redirect to mailcow login form\ndocument.addEventListener('DOMContentLoaded', function () {\n    var loginForm = document.forms.namedItem(\"loginForm\");\n    if (loginForm) {\n        window.location.href = '/user';\n    }\n});\n// logout function\nfunction mc_logout() {\n    fetch(\"/\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded\"\n        },\n        body: \"logout=1\"\n    }).then(() => window.location.href = '/');\n}\n\n// Custom SOGo JS\n\n// Change the visible font-size in the editor, this does not change the font of a html message by default\nCKEDITOR.addCss(\"body {font-size: 16px !important}\");\n\n// Enable scayt by default\n//CKEDITOR.config.scayt_autoStartup = true;\n\n"
  },
  {
    "path": "data/conf/sogo/sogo.conf",
    "content": "{\n    SOGoCalendarDefaultRoles = (\n        PublicViewer,\n        ConfidentialDAndTViewer,\n        PrivateDAndTViewer\n    );\n\n    WOWorkersCount = \"20\";\n    SOGoACLsSendEMailNotifications = YES;\n    SOGoAppointmentSendEMailNotifications = YES;\n    SOGoDraftsFolderName = \"Drafts\";\n    SOGoJunkFolderName= \"Junk\";\n    SOGoMailDomain = \"sogo.local\";\n    SOGoEnableEMailAlarms = YES;\n    SOGoMailHideInlineAttachments = YES;\n    SOGoFoldersSendEMailNotifications = YES;\n    SOGoForwardEnabled = YES;\n\n    // Added with SOGo 5.12 - Allows users to cleanup there maildirectories by deleting mails oder than X\n    SOGoEnableMailCleaning = YES;\n\n    // Fixes \"MODIFICATION_FAILED\" error (HTTP 412) in Clients when accepting invitations from external services\n    SOGoDisableOrganizerEventCheck = YES;\n\n    // Option to set Users as admin to globally manage calendar permissions etc. Disabled by default\n    // SOGoSuperUsernames = (\"moo@example.com\");\n\n    SOGoUIAdditionalJSFiles = (\n      js/theme.js,\n      js/custom-sogo.js\n    );\n\n    SOGoEnablePublicAccess = YES;\n\n    // Multi-domain setup\n    // Domains are isolated, you can define visibility options here.\n    // Example:\n\n    // SOGoDomainsVisibility = (\n    //  (domain1.tld, domain5.tld),\n    //  (domain3.tld, domain2.tld)\n    // );\n\n    // self-signed is not trusted anymore\n    WOPort = \"0.0.0.0:20000\";\n    SOGoMemcachedHost = \"memcached\";\n\n    SOGoLanguage = English;\n    SOGoMailAuxiliaryUserAccountsEnabled = YES;\n    // SOGoCreateIdentitiesDisabled = NO;\n    SOGoMailCustomFromEnabled = YES;\n    SOGoMailingMechanism = smtp;\n    SOGoSMTPAuthenticationType = plain;\n\n    SxVMemLimit = 384;\n\n    SOGoMaximumPingInterval = 3540;\n\n    SOGoInternalSyncInterval = 45;\n    SOGoMaximumSyncInterval = 3540;\n\n    // 100 seems to break some Android clients\n    //SOGoMaximumSyncWindowSize = 99;\n    // This should do the trick for Outlook 2016\n    SOGoMaximumSyncResponseSize = 512;\n\n    WOWatchDogRequestTimeout = 30;\n    WOListenQueueSize = 16;\n    WONoDetach = YES;\n\n    SOGoIMAPAclConformsToIMAPExt = Yes;\n    SOGoPageTitle = \"SOGo Groupware\";\n    SOGoFirstDayOfWeek = \"1\";\n\n    SOGoSieveFolderEncoding = \"UTF-8\";\n    SOGoPasswordChangeEnabled = NO;\n    SOGoSentFolderName = \"Sent\";\n    SOGoMailShowSubscribedFoldersOnly = NO;\n    NGImap4ConnectionStringSeparator = \"/\";\n    SOGoSieveScriptsEnabled = YES;\n    SOGoTrashFolderName = \"Trash\";\n    SOGoVacationEnabled = YES;\n\n    SOGoCacheCleanupInterval = 900;\n    SOGoMaximumFailedLoginCount = 10;\n    SOGoMaximumFailedLoginInterval = 900;\n    SOGoFailedLoginBlockInterval = 900;\n\n    // Enable SOGo URL Description for GDPR compliance, this may cause some issues with calendars and contacts. Also uncomment the encryption key below to use it.\n    //SOGoURLEncryptionEnabled = NO;\n\n    // Set a 16 character encryption key for SOGo URL Description, change this to your own value\n    //SOGoURLPathEncryptionKey = \"SOGoSuperSecret0\";\n\n    GCSChannelCollectionTimer = 60;\n    GCSChannelExpireAge = 60;\n\n    MySQL4Encoding = \"utf8mb4\";\n  //SOGoDebugRequests = YES;\n  //SoDebugBaseURL = YES;\n  //ImapDebugEnabled = YES;\n  //SOGoEASDebugEnabled = YES;\n  SOGoEASSearchInBody = YES;\n  //LDAPDebugEnabled = YES;\n  //PGDebugEnabled = YES;\n  //MySQL4DebugEnabled = YES;\n  //SOGoUIxDebugEnabled = YES;\n  //WODontZipResponse = YES;\n    WOLogFile = \"/dev/sogo_log\";\n}\n"
  },
  {
    "path": "data/conf/unbound/unbound.conf",
    "content": "server:\n  verbosity: 1\n  interface: 0.0.0.0\n  interface: ::0\n  logfile: /dev/console\n  do-ip4: yes\n  do-ip6: yes\n  do-udp: yes\n  do-tcp: yes\n  do-daemonize: no\n  #access-control: 0.0.0.0/0 allow\n  access-control: 10.0.0.0/8 allow\n  access-control: 172.16.0.0/12 allow\n  access-control: 192.168.0.0/16 allow\n  access-control: fc00::/7 allow\n  access-control: fe80::/10 allow\n  #access-control: ::0/0 allow\n  directory: \"/etc/unbound\"\n  username: unbound\n  auto-trust-anchor-file: trusted-key.key\n  #private-address: 10.0.0.0/8\n  #private-address: 172.16.0.0/12\n  #private-address: 192.168.0.0/16\n  #private-address: 169.254.0.0/16\n  #private-address: fc00::/7\n  #private-address: fe80::/10\n  # cache-min-ttl needs to be less or equal to cache-max-negative-ttl\n  cache-min-ttl: 5\n  cache-max-negative-ttl: 60\n  root-hints: \"/etc/unbound/root.hints\"\n  hide-identity: yes\n  hide-version: yes\n  max-udp-size: 4096\n  msg-buffer-size: 65552\n  unwanted-reply-threshold: 10000\n  ipsecmod-enabled: no\n\nremote-control:\n  control-enable: yes\n  control-interface: 127.0.0.1\n  control-port: 8953\n  server-key-file: \"/etc/unbound/unbound_server.key\"\n  server-cert-file: \"/etc/unbound/unbound_server.pem\"\n  control-key-file: \"/etc/unbound/unbound_control.key\"\n  control-cert-file: \"/etc/unbound/unbound_control.pem\"\n"
  },
  {
    "path": "data/hooks/README.md",
    "content": "Place executable scripts in each directory to run a hook at the end of a docker-entrypoint.sh script.\n\nOnly images with a docker-entrypoint are covered.\n"
  },
  {
    "path": "data/web/_rspamderror.php",
    "content": "<?php\n$redis = new Redis();\ntry {\n  if (!empty(getenv('REDIS_SLAVEOF_IP'))) {\n    $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));\n  }\n  else {\n    $redis->connect('redis-mailcow', 6379);\n  }\n  $redis->auth(getenv(\"REDISPASS\"));\n}\ncatch (Exception $e) {\n  exit;\n}\nheader('Content-Type: application/json');\necho '{\"error\":\"Unauthorized\"}';\nerror_log(\"Rspamd UI: Invalid password by \" . $_SERVER['REMOTE_ADDR']);\n$redis->publish(\"F2B_CHANNEL\", \"Rspamd UI: Invalid password by \" . $_SERVER['REMOTE_ADDR']);\n"
  },
  {
    "path": "data/web/_status.502.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Preparing</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  </head>\n  <body style='background-color:#fff;color:#333;width: 60%;margin: 0 auto;text-align:left;font-family: Verdana, \"Lucida Sans Unicode\", sans-serif'>\n    <h1 style=\"color:#333;font-size:48px\">What is happening?</h1>\n    <p style=\"color:green;font-weight:bold;\">Please do not stop the stack while we are initializing the database or do other preparations.</p>\n    <p style=\"font-size:small\"><b>What is happening?</b> - Nginx cannot connect to an upstream server or other services are not ready yet.<br>\n    This is fine if mailcow was just\n    installed or updated and can take a few minutes to complete.<br>\n    Please check the logs or contact support if the error persists.</p>\n    <h2>Quick debugging</h2>\n    <p>Check Nginx and PHP logs:</p>\n    <pre>docker compose logs --tail=200 php-fpm-mailcow nginx-mailcow</pre>\n    <p>Make sure your SQL credentials in mailcow.conf (a link to .env) do fit your initialized SQL volume. If you see an access denied, you might have the wrong mailcow.conf:</p>\n    <pre>source mailcow.conf ; docker compose exec mysql-mailcow mysql -u${DBUSER} -p${DBPASS} ${DBNAME}</pre>\n    <p>In case of a previous failed installation, create a backup of your existing data, followed by removing all volumes and starting over (<b>NEVER</b> do this with a production system, it will remove <b>ALL</b> data):</p>\n    <pre>BACKUP_LOCATION=/tmp/ ./helper-scripts/backup_and_restore.sh backup all</pre>\n    <pre>docker compose down --volumes ; docker compose up -d</pre>\n    <p>Make sure your timezone is correct. Use \"America/New_York\" for example, do not use spaces. Check <a href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\">here</a> for a list.</p>\n    <br>Click to learn more about <a style=\"color:red;text-decoration:none;\" href=\"https://docs.mailcow.email/#get-support\" target=\"_blank\">getting support.</a>\n  </body>\n</html>\n"
  },
  {
    "path": "data/web/admin/dashboard.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';\n\nprotect_route(['admin']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n$clamd_status = (preg_match(\"/^([yY][eE][sS]|[yY])+$/\", $_ENV[\"SKIP_CLAMD\"])) ? false : true;\n$olefy_status = (preg_match(\"/^([yY][eE][sS]|[yY])+$/\", $_ENV[\"SKIP_OLEFY\"])) ? false : true;\n\n\nif (!isset($_SESSION['gal']) && $license_cache = $redis->Get('LICENSE_STATUS_CACHE')) {\n  $_SESSION['gal'] = json_decode($license_cache, true);\n}\n\n$js_minifier->add('/web/js/site/dashboard.js');\n\n// vmail df\n$exec_fields = array('cmd' => 'system', 'task' => 'df', 'dir' => '/var/vmail');\n$vmail_df = explode(',', (string)json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true));\n\n// containers\n$containers_info = (array) docker('info');\nif ($clamd_status === false) unset($containers_info['clamd-mailcow']);\nif ($olefy_status === false) unset($containers_info['olefy-mailcow']);\nksort($containers_info);\n$containers = array();\nforeach ($containers_info as $container => $container_info) {\n  if (!isset($container_info['State']) || !is_array($container_info['State']) || !isset($container_info['State']['StartedAt'])){\n    continue;\n  }\n  date_default_timezone_set('UTC');\n  $StartedAt = date_parse($container_info['State']['StartedAt']);\n  if ($StartedAt['hour'] !== false) {\n    $date = new \\DateTime();\n    $date->setTimestamp(mktime(\n      $StartedAt['hour'],\n      $StartedAt['minute'],\n      $StartedAt['second'],\n      $StartedAt['month'],\n      $StartedAt['day'],\n      $StartedAt['year']));\n    try {\n      $user_tz = new DateTimeZone(getenv('TZ'));\n      $date->setTimezone($user_tz);\n      $container_info['State']['StartedAtHR'] = $date->format('r');\n    } catch(Exception $e) {\n      $container_info['State']['StartedAtHR'] = '?';\n    }\n  }\n  else {\n    $container_info['State']['StartedAtHR'] = '?';\n  }\n  $containers[$container] = $container_info;\n}\n\n// get mailcow data\n$hostname = getenv('MAILCOW_HOSTNAME');\n$timezone = getenv('TZ');\n\n$template = 'dashboard.twig';\n$template_data = [\n  'log_lines' => getenv('LOG_LINES'),\n  'vmail_df' => $vmail_df,\n  'hostname' => $hostname,\n  'timezone' => $timezone,\n  'gal' => @$_SESSION['gal'],\n  'license_guid' => license('guid'),\n  'clamd_status' => $clamd_status,\n  'olefy_status' => $olefy_status,\n  'containers' => $containers,\n  'ip_check' => customize('get', 'ip_check'),\n  'lang_admin' => json_encode($lang['admin']),\n  'lang_debug' => json_encode($lang['debug']),\n  'lang_datatables' => json_encode($lang['datatables']),\n];\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n\n\n"
  },
  {
    "path": "data/web/admin/index.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';\n\nif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'admin') {\n  // Only redirect to dashboard if NO pending actions\n  if (empty($_SESSION['pending_tfa_setup']) && empty($_SESSION['pending_pw_update'])) {\n    header('Location: /admin/dashboard');\n    exit();\n  }\n}\nelseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'domainadmin') {\n  header('Location: /domainadmin/mailbox');\n  exit();\n}\nelseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'user') {\n  header('Location: /user');\n  exit();\n}\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n$_SESSION['index_query_string'] = $_SERVER['QUERY_STRING'];\n\n\n$template = 'admin_index.twig';\n$template_data = [\n  'login_delay' => @$_SESSION['ldelay'],\n  'custom_login' => customize('get', 'custom_login'),\n];\n\n$js_minifier->add('/web/js/site/index.js');\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/admin/mailbox.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';\n\nprotect_route(['admin']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] .  '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n\n\n\n$js_minifier->add('/web/js/site/mailbox.js');\n$js_minifier->add('/web/js/presets/sieveMailbox.js');\n$js_minifier->add('/web/js/site/pwgen.js');\n\n$role = \"admin\";\n$is_dual = (!empty($_SESSION[\"dual-login\"][\"username\"])) ? 'true' : 'false';\n$allow_admin_email_login = (preg_match(\"/^([yY][eE][sS]|[yY])+$/\", $_ENV[\"ALLOW_ADMIN_EMAIL_LOGIN\"])) ? 'true' : 'false';\n\n// domains\n$domains = mailbox('get', 'domains');\n\n// mailboxes\n$mailboxes = [];\nforeach ($domains as $domain) {\n  foreach (mailbox('get', 'mailboxes', $domain) as $mailbox) {\n    $mailboxes[] = $mailbox;\n  }\n}\n\n$template = 'mailbox.twig';\n$template_data = [\n  'acl' => $_SESSION['acl'],\n  'acl_json' => json_encode($_SESSION['acl']),\n  'role' => $role,\n  'is_dual' => $is_dual,\n  'allow_admin_email_login' => $allow_admin_email_login,\n  'global_filters' => mailbox('get', 'global_filter_details'),\n  'domains' => $domains,\n  'mailboxes' => $mailboxes,\n  'lang_mailbox' => json_encode($lang['mailbox']),\n  'lang_rl' => json_encode($lang['ratelimit']),\n  'lang_edit' => json_encode($lang['edit']),\n  'lang_datatables' => json_encode($lang['datatables']),\n];\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/admin/queue.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';\n\nprotect_route(['admin']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n$js_minifier->add('/web/js/site/queue.js');\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n\n$role = \"admin\";\n\n$template = 'queue.twig';\n$template_data = [\n  'acl' => $_SESSION['acl'],\n  'acl_json' => json_encode($_SESSION['acl']),\n  'role' => $role,\n  'lang_admin' => json_encode($lang['admin']),\n  'lang_queue' => json_encode($lang['queue']),\n  'lang_datatables' => json_encode($lang['datatables'])\n];\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/admin/system.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.admin.inc.php';\n\nprotect_route(['admin']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n$tfa_data = get_tfa();\n$fido2_data = fido2(array(\"action\" => \"get_friendly_names\"));\n\n$js_minifier->add('/web/js/site/admin.js');\n$js_minifier->add('/web/js/presets/rspamd.js');\n$js_minifier->add('/web/js/site/pwgen.js');\n\n// all domains\n$domains = mailbox('get', 'domains');\n$all_domains =  array_merge($domains, mailbox('get', 'alias_domains'));\n\n// mailboxes\n$mailboxes = [];\nforeach ($all_domains as $domain) {\n  foreach (mailbox('get', 'mailboxes', $domain) as $mailbox) {\n    $mailboxes[] = $mailbox;\n  }\n}\n$mailboxes = array_filter($mailboxes);\n\n// DKIM domains\n$dkim_domains = [];\n$dkim_domains_with_keys = [];\nforeach($domains as $domain) {\n  $dkim_domains[$domain] = ['dkim' => null, 'alias_domains' => []];\n  if (!empty($dkim = dkim('details', $domain))) {\n    $dkim_domains_with_keys[] = $domain;\n    if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] !== true) {\n      $dkim['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');\n    }\n    $dkim_domains[$domain]['dkim'] = $dkim;\n  }\n\n  // get alias domains\n  foreach (mailbox('get', 'alias_domains', $domain) as $alias_domain) {\n    $dkim_domains[$domain]['alias_domains'][$alias_domain] = ['dkim' => null];\n    if (!empty($dkim = dkim('details', $alias_domain))) {\n      $dkim_domains_with_keys[] = $alias_domain;\n      if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] !== true) {\n        $dkim['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');\n      }\n      $dkim_domains[$domain]['alias_domains'][$alias_domain]['dkim'] = $dkim;\n    }\n  }\n}\n$dkim_blind_domains = [];\nforeach(dkim('blind') as $blind) {\n  $dkim_blind_domains[$blind] = ['dkim' => null];\n  if (!empty($dkim = dkim('details', $blind))) {\n    $dkim_domains_with_keys[] = $blind;\n    if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] !== true) {\n      $dkim['privkey'] = base64_encode('Please set $SHOW_DKIM_PRIV_KEYS to true to show DKIM private keys.');\n    }\n    $dkim_blind_domains[$blind]['dkim'] = $dkim;\n  }\n}\n\n// rsettings\n$rsettings = array_map(function ($rsetting){\n  $rsetting['details'] = rsettings('details', $rsetting['id']);\n  return $rsetting;\n}, rsettings('get'));\n\n// rspamd regex maps\n$rspamd_regex_maps = [];\nforeach ($RSPAMD_MAPS['regex'] as $rspamd_regex_desc => $rspamd_regex_map) {\n  $rspamd_regex_maps[$rspamd_regex_desc] = [\n    'map' => $rspamd_regex_map,\n    'data' => file_get_contents('/rspamd_custom_maps/' . $rspamd_regex_map)\n  ];\n}\n\n// cors settings\n$cors_settings = cors('get');\n$cors_settings['allowed_origins'] = str_replace(\", \", \"\\n\", $cors_settings['allowed_origins']);\n$cors_settings['allowed_methods'] = explode(\", \", $cors_settings['allowed_methods']);\n\n$f2b_data = fail2ban('get');\n// mbox templates\n$mbox_templates = mailbox('get', 'mailbox_templates');\n\n$template = 'admin.twig';\n$template_data = [\n  'tfa_data' => $tfa_data,\n  'tfa_id' => @$_SESSION['tfa_id'],\n  'fido2_cid' => @$_SESSION['fido2_cid'],\n  'fido2_data' => $fido2_data,\n  'api' => [\n    'ro' => admin_api('ro', 'get'),\n    'rw' => admin_api('rw', 'get'),\n  ],\n  'dkim_domains' => $dkim_domains,\n  'dkim_domains_with_keys' => $dkim_domains_with_keys,\n  'dkim_blind_domains' => $dkim_blind_domains,\n  'domains' => $domains,\n  'all_domains' => $all_domains,\n  'mailboxes' => $mailboxes,\n  'f2b_data' => $f2b_data,\n  'f2b_banlist_url' => getBaseUrl() . \"/f2b-banlist?id=\" . $f2b_data['banlist_id'],\n  'q_data' => quarantine('settings'),\n  'qn_data' => quota_notification('get'),\n  'pw_reset_data' => reset_password('get_notification'),\n  'rsettings_map' => file_get_contents('http://nginx:8081/settings.php'),\n  'rsettings' => $rsettings,\n  'rspamd_regex_maps' => $rspamd_regex_maps,\n  'logo_specs' => customize('get', 'main_logo_specs'),\n  'logo_dark_specs' => customize('get', 'main_logo_dark_specs'),\n  'ip_check' => customize('get', 'ip_check'),\n  'custom_login' => customize('get', 'custom_login'),\n  'password_complexity' => password_complexity('get'),\n  'show_rspamd_global_filters' => @$_SESSION['show_rspamd_global_filters'],\n  'cors_settings' => $cors_settings,\n  'is_https' => isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on',\n  'iam_settings' => $iam_settings,\n  'mbox_templates' => $mbox_templates,\n  'lang_admin' => json_encode($lang['admin']),\n  'lang_datatables' => json_encode($lang['datatables'])\n];\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/api/index.css",
    "content": "html {\n    box-sizing: border-box;\n    overflow: -moz-scrollbars-vertical;\n    overflow-y: scroll;\n}\n\n*,\n*:before,\n*:after {\n    box-sizing: inherit;\n}\n\nbody {\n    margin: 0;\n    background: #fafafa;\n}\n"
  },
  {
    "path": "data/web/api/index.html",
    "content": "<!-- HTML for static distribution bundle build -->\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <title>Swagger UI</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"./swagger-ui.css\" />\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"index.css\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"./favicon-32x32.png\" sizes=\"32x32\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"./favicon-16x16.png\" sizes=\"16x16\" />\n  </head>\n\n  <body>\n    <div id=\"swagger-ui\"></div>\n    <script src=\"./swagger-ui-bundle.js\" charset=\"UTF-8\"> </script>\n    <script src=\"./swagger-ui-standalone-preset.js\" charset=\"UTF-8\"> </script>\n    <script src=\"./swagger-initializer.js\" charset=\"UTF-8\"> </script>\n  </body>\n</html>\n"
  },
  {
    "path": "data/web/api/oauth2-redirect.html",
    "content": "<!doctype html>\n<html lang=\"en-US\">\n<head>\n    <title>Swagger UI: OAuth2 Redirect</title>\n</head>\n<body>\n<script>\n    'use strict';\n    function run () {\n        var oauth2 = window.opener.swaggerUIRedirectOauth2;\n        var sentState = oauth2.state;\n        var redirectUrl = oauth2.redirectUrl;\n        var isValid, qp, arr;\n\n        if (/code|token|error/.test(window.location.hash)) {\n            qp = window.location.hash.substring(1).replace('?', '&');\n        } else {\n            qp = location.search.substring(1);\n        }\n\n        arr = qp.split(\"&\");\n        arr.forEach(function (v,i,_arr) { _arr[i] = '\"' + v.replace('=', '\":\"') + '\"';});\n        qp = qp ? JSON.parse('{' + arr.join() + '}',\n                function (key, value) {\n                    return key === \"\" ? value : decodeURIComponent(value);\n                }\n        ) : {};\n\n        isValid = qp.state === sentState;\n\n        if ((\n          oauth2.auth.schema.get(\"flow\") === \"accessCode\" ||\n          oauth2.auth.schema.get(\"flow\") === \"authorizationCode\" ||\n          oauth2.auth.schema.get(\"flow\") === \"authorization_code\"\n        ) && !oauth2.auth.code) {\n            if (!isValid) {\n                oauth2.errCb({\n                    authId: oauth2.auth.name,\n                    source: \"auth\",\n                    level: \"warning\",\n                    message: \"Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server.\"\n                });\n            }\n\n            if (qp.code) {\n                delete oauth2.state;\n                oauth2.auth.code = qp.code;\n                oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl});\n            } else {\n                let oauthErrorMsg;\n                if (qp.error) {\n                    oauthErrorMsg = \"[\"+qp.error+\"]: \" +\n                        (qp.error_description ? qp.error_description+ \". \" : \"no accessCode received from the server. \") +\n                        (qp.error_uri ? \"More info: \"+qp.error_uri : \"\");\n                }\n\n                oauth2.errCb({\n                    authId: oauth2.auth.name,\n                    source: \"auth\",\n                    level: \"error\",\n                    message: oauthErrorMsg || \"[Authorization failed]: no accessCode received from the server.\"\n                });\n            }\n        } else {\n            oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl});\n        }\n        window.close();\n    }\n\n    if (document.readyState !== 'loading') {\n        run();\n    } else {\n        document.addEventListener('DOMContentLoaded', function () {\n            run();\n        });\n    }\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "data/web/api/openapi.yaml",
    "content": "openapi: 3.1.0\ninfo:\n  description: >-\n    mailcow is complete e-mailing solution with advanced antispam, antivirus,\n    nice UI and API.\n\n\n    In order to use this API you have to create a API key and add your IP\n    address to the whitelist of allowed IPs this can be done by logging into the\n    Mailcow UI using your admin account, then go to Configuration > Access >\n    Edit administrator details > API. There you will find a collapsed API menu.\n\n\n    There are two types of API keys\n      - The read only key can only be used for all get endpoints\n      - The read write key can be used for all endpoints\n\n  title: mailcow API\n  version: \"1.0.0\"\n\nservers:\n  - url: /\n\ncomponents:\n  securitySchemes:\n    ApiKeyAuth:\n      type: apiKey\n      in: header\n      name: X-API-Key\n  responses:\n    Unauthorized:\n      description: Unauthorized\n      content:\n        application/json:\n          schema:\n            type: object\n            properties:\n              type:\n                type: string\n                example: error\n              msg:\n                type: string\n                example: authentication failed\n            required:\n              - type\n              - msg\n\nsecurity:\n  - ApiKeyAuth: []\n\npaths:\n  /api/v1/add/alias:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - add\n                        - alias\n                        - active: \"1\"\n                          address: alias@domain.tld\n                          goto: destination@domain.tld\n                        - null\n                      msg:\n                        - alias_added\n                        - alias@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Aliases\n      description: >-\n        You may create your own mailbox alias using this action. It takes a JSON\n        object containing a domain informations.\n\n        Only one `goto*` option can be used, for ex. if you want learn as spam,\n        then send just `goto_spam = 1` in request body.\n      operationId: Create alias\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                address: alias@domain.tld\n                goto: destination@domain.tld\n              properties:\n                active:\n                  description: is alias active or not\n                  type: boolean\n                address:\n                  description: 'alias address, for catchall use \"@domain.tld\"'\n                  type: string\n                goto:\n                  description: \"destination address, comma separated\"\n                  type: string\n                goto_ham:\n                  description: learn as ham\n                  type: boolean\n                goto_null:\n                  description: silently ignore\n                  type: boolean\n                goto_spam:\n                  description: learn as spam\n                  type: boolean\n                sogo_visible:\n                  description: toggle visibility as selectable sender in SOGo\n                  type: boolean\n              type: object\n      summary: Create alias\n  /api/v1/add/time_limited_alias:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - add\n                        - time_limited_alias\n                        - address: info@domain.tld\n                          domain: domain.tld\n                        - null\n                      msg:\n                        - mailbox_modified\n                        - info@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Aliases\n      description: >-\n        You may create a time limited alias using this action. It takes a JSON\n        object containing a domain and mailbox informations.\n        Mailcow will generate a random alias.\n      operationId: Create time limited alias\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                username: info@domain.tld\n                domain: domain.tld\n              properties:\n                username:\n                  description: 'the mailbox an alias should be created for'\n                  type: string\n                domain:\n                  description: \"the domain\"\n                  type: string\n              type: object\n      summary: Create time limited alias\n  /api/v1/add/app-passwd:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - app_passwd\n                        - add\n                        - active: \"1\"\n                          username: info@domain.tld\n                          app_name: wordpress\n                          app_passwd: keyleudecticidechothistishownsan31\n                          app_passwd2: keyleudecticidechothistishownsan31\n                          protocols:\n                            - imap_access\n                            - dav_access\n                            - smtp_access\n                            - eas_access\n                            - pop3_access\n                            - sieve_access\n                      msg: app_passwd_added\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - App Passwords\n      description: >-\n        Using this endpoint you can create a new app password for a specific\n        mailbox.\n      operationId: Create App Password\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                username: info@domain.tld\n                app_name: wordpress\n                app_passwd: keyleudecticidechothistishownsan31\n                app_passwd2: keyleudecticidechothistishownsan31\n                protocols:\n                  - imap_access\n                  - dav_access\n                  - smtp_access\n                  - eas_access\n                  - pop3_access\n                  - sieve_access\n              properties:\n                active:\n                  description: is alias active or not\n                  type: boolean\n                username:\n                  description: mailbox for which the app password should be created\n                  type: string\n                app_name:\n                  description: name of your app password\n                  type: string\n                app_passwd:\n                  description: your app password\n                  type: string\n                app_passwd2:\n                  description: your app password\n                  type: string\n              type: object\n      summary: Create App Password\n  /api/v1/add/bcc:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - bcc\n                        - add\n                        - active: \"1\"\n                          bcc_dest: bcc@awesomecow.tld\n                          local_dest: mailcow.tld\n                          type: sender\n                        - null\n                      msg: bcc_saved\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Address Rewriting\n      description: >-\n        Using this endpoint you can create a BCC map to forward all mails via a\n        bcc for a given domain.\n      operationId: Create BCC Map\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                bcc_dest: bcc@awesomecow.tld\n                local_dest: mailcow.tld\n                type: sender\n              properties:\n                active:\n                  description: 1 for a active user account 0 for a disabled user account\n                  type: number\n                bcc_dest:\n                  description: the email address where all mails should be send to\n                  type: string\n                local_dest:\n                  description: the domain which emails should be forwarded\n                  type: string\n                type:\n                  description: the type of bcc map can be `sender` or `rcpt`\n                  enum: [sender, rcpt]\n                  type: string\n              type: object\n      summary: Create BCC Map\n  /api/v1/add/dkim:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - dkim\n                        - add\n                        - dkim_selector: dkim\n                          domains: hanspeterlol.de\n                          key_size: \"2048\"\n                      msg:\n                        - dkim_added\n                        - hanspeterlol.de\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - DKIM\n      description: Using this endpoint you can generate new DKIM keys.\n      operationId: Generate DKIM Key\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                dkim_selector: dkim\n                domains: mailcow.tld\n                key_size: \"2048\"\n              properties:\n                dkim_selector:\n                  description: the DKIM selector default dkim\n                  type: string\n                domains:\n                  description: a list of domains for which a dkim key should be generated\n                  type: string\n                key_size:\n                  description: the key size (1024, 2048, 3072 or 4096)\n                  type: number\n              type: object\n      summary: Generate DKIM Key\n  /api/v1/add/dkim_duplicate:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - dkim\n                        - duplicate\n                        - from_domain: mailcow.tld\n                          to_domain: awesomecow.tld\n                      msg:\n                        - dkim_duplicated\n                        - mailcow.tld\n                        - awesomecow.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - DKIM\n      description: Using this endpoint you can duplicate the DKIM Key of one domain.\n      operationId: Duplicate DKIM Key\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                from_domain: mailcow.tld\n                to_domain: awesomecow.tld\n              properties:\n                fron_domain:\n                  description: the domain where the dkim key should be copied from\n                  type: string\n                to_domain:\n                  description: the domain where the dkim key should be copied to\n                  type: string\n              type: object\n      summary: Duplicate DKIM Key\n  /api/v1/add/domain:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - ratelimit\n                        - edit\n                        - domain\n                        - object: domain.tld\n                          rl_frame: s\n                          rl_value: \"10\"\n                      msg:\n                        - rl_saved\n                        - domain.tld\n                      type: success\n                    - log:\n                        - mailbox\n                        - add\n                        - domain\n                        - active: \"1\"\n                          aliases: \"400\"\n                          restart_sogo: \"1\"\n                          backupmx: \"0\"\n                          defquota: \"3072\"\n                          description: some decsription\n                          domain: domain.tld\n                          mailboxes: \"10\"\n                          maxquota: \"10240\"\n                          quota: \"10240\"\n                          relay_all_recipients: \"0\"\n                          rl_frame: s\n                          rl_value: \"10\"\n                          tags: [\"tag1\", \"tag2\"]\n                        - null\n                      msg:\n                        - domain_added\n                        - domain.tld\n                      type: success\n              schema:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    log:\n                      description: contains request object\n                      items: {}\n                      type: array\n                    msg:\n                      items: {}\n                      type: array\n                    type:\n                      enum:\n                        - success\n                        - danger\n                        - error\n                      type: string\n          description: OK\n          headers: {}\n      tags:\n        - Domains\n      description: >-\n        You may create your own domain using this action. It takes a JSON object\n        containing a domain informations.\n      operationId: Create domain\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                aliases: \"400\"\n                backupmx: \"0\"\n                defquota: \"3072\"\n                description: some decsription\n                domain: domain.tld\n                mailboxes: \"10\"\n                maxquota: \"10240\"\n                quota: \"10240\"\n                relay_all_recipients: \"0\"\n                rl_frame: s\n                rl_value: \"10\"\n                restart_sogo: \"10\"\n                tags: [\"tag1\", \"tag2\"]\n              properties:\n                active:\n                  description: is domain active or not\n                  type: boolean\n                aliases:\n                  description: limit count of aliases associated with this domain\n                  type: number\n                backupmx:\n                  description: relay domain or not\n                  type: boolean\n                defquota:\n                  description: predefined mailbox quota in `add mailbox` form\n                  type: number\n                description:\n                  description: Description of domain\n                  type: string\n                domain:\n                  description: Fully qualified domain name\n                  type: string\n                gal:\n                  description: >-\n                    is domain global address list active or not, it enables\n                    shared contacts accross domain in SOGo webmail\n                  type: boolean\n                mailboxes:\n                  description: limit count of mailboxes associated with this domain\n                  type: number\n                maxquota:\n                  description: maximum quota per mailbox\n                  type: number\n                quota:\n                  description: maximum quota for this domain (for all mailboxes in sum)\n                  type: number\n                restart_sogo:\n                  description: restart SOGo to activate the domain in SOGo\n                  type: number\n                relay_all_recipients:\n                  description: >-\n                    if not, them you have to create \"dummy\" mailbox for each\n                    address to relay\n                  type: boolean\n                relay_unknown_only:\n                  description: Relay non-existing mailboxes only. Existing mailboxes will be delivered locally.\n                  type: boolean\n                rl_frame:\n                  enum:\n                    - s\n                    - m\n                    - h\n                    - d\n                  type: string\n                rl_value:\n                  description: rate limit value\n                  type: number\n                tags:\n                  description: tags for this Domain\n                  type: array\n                  items:\n                    type: string\n              type: object\n      summary: Create domain\n  /api/v1/add/domain-admin:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - domain_admin\n                        - add\n                        - active: \"1\"\n                          domains: mailcow.tld\n                          password: \"*\"\n                          password2: \"*\"\n                          username: testadmin\n                      msg:\n                        - domain_admin_added\n                        - testadmin\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domain admin\n      description: >-\n        Using this endpoint you can create a new Domain Admin user. This user\n        has full control over a domain, and can create new mailboxes and\n        aliases.\n      operationId: Create Domain Admin user\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                domains: mailcow.tld\n                password: supersecurepw\n                password2: supersecurepw\n                username: testadmin\n              properties:\n                active:\n                  description: 1 for a active user account 0 for a disabled user account\n                  type: number\n                domains:\n                  description: the domains the user should be a admin of\n                  type: string\n                password:\n                  description: domain admin user password\n                  type: string\n                password2:\n                  description: domain admin user password\n                  type: string\n                username:\n                  description: the username for the admin user\n                  type: string\n              type: object\n      summary: Create Domain Admin user\n  /api/v1/add/sso/domain-admin:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    token: \"591F6D-5C3DD2-7455CD-DAF1C1-AA4FCC\"\n          description: OK\n          headers: { }\n      tags:\n        - Single Sign-On\n      description: >-\n        Using this endpoint you can issue a token for Domain Admin user. This token can be used for\n        autologin Domain Admin user by using query_string var sso_token={token}. Token expiration time is 30s\n      operationId: Issue Domain Admin SSO token\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                username: testadmin\n              properties:\n                username:\n                  description: the username for the admin user\n                  type: object\n              type: object\n      summary: Issue Domain Admin SSO token\n  /api/v1/edit/da-acl:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: success\n                      log:\n                        - acl\n                        - edit\n                        - testadmin\n                        - username:\n                            - testadmin\n                          da_acl:\n                            - syncjobs\n                            - quarantine\n                            - login_as\n                            - sogo_access\n                            - app_passwds\n                            - bcc_maps\n                            - pushover\n                            - filters\n                            - ratelimit\n                            - spam_policy\n                            - extend_sender_acl\n                            - unlimited_quota\n                            - protocol_access\n                            - smtp_ip_access\n                            - alias_domains\n                            - domain_desc\n                      msg:\n                        - acl_saved\n                        - testadmin\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domain admin\n      description: >-\n        Using this endpoint you can edit the ACLs of a Domain Admin user. This user\n        has full control over a domain, and can create new mailboxes and\n        aliases.\n      operationId: Edit Domain Admin ACL\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                items:\n                  - testadmin\n                attr:\n                  da_acl:\n                    - syncjobs\n                    - quarantine\n                    - login_as\n                    - sogo_access\n                    - app_passwds\n                    - bcc_maps\n                    - pushover\n                    - filters\n                    - ratelimit\n                    - spam_policy\n                    - extend_sender_acl\n                    - unlimited_quota\n                    - protocol_access\n                    - smtp_ip_access\n                    - alias_domains\n                    - domain_desc\n              properties:\n                items:\n                  description: contains the domain admin username you want to edit\n                  type: object\n                attr:\n                  properties:\n                    da_acl:\n                      description: contains the list of acl names that are active for this user\n                      type: object\n                  type: object\n      summary: Edit Domain Admin ACL\n  /api/v1/edit/domain-admin:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: success\n                      log:\n                        - domain_admin\n                        - edit\n                        - username: testadmin\n                          active: [\"0\",\"1\"]\n                          username_new: testadmin\n                          domains: [\"domain.tld\"]\n                          password: \"*\"\n                          password2: \"*\"\n                      msg:\n                        - domain_admin_modified\n                        - testadmin\n              schema:\n                properties:\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domain admin\n      description: >-\n        Using this endpoint you can edit a existing Domain Admin user. This user\n        has full control over a domain, and can create new mailboxes and\n        aliases.\n      operationId: Edit Domain Admin user\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                items:\n                  - testadmin\n                attr:\n                  active:\n                    - '0'\n                    - '1'\n                  username_new: testadmin\n                  domains: [\"domain.tld\"]\n                  password: supersecurepassword\n                  password2: supersecurepassword\n              properties:\n                attr:\n                  properties:\n                    active:\n                      description: is the domain admin active or not\n                      type: boolean\n                    username_new:\n                      description: the username of the domain admin, change this to change the username\n                      type: string\n                    domains:\n                      description: a list of all domains managed by this domain admin\n                      type: array\n                      items:\n                        type: string\n                    password:\n                      description: the new domain admin user password\n                      type: string\n                    password2:\n                      description: the new domain admin user password for confirmation\n                      type: string\n                  type: object\n                items:\n                  description: contains the domain admin username you want to edit\n                  type: object\n      summary: Edit Domain Admin user\n  /api/v1/add/domain-policy:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - policy\n                        - add\n                        - domain\n                        - domain: domain.tld\n                          object_from: \"*@baddomain.tld\"\n                          object_list: bl\n                      msg:\n                        - domain_modified\n                        - domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domain antispam policies\n      description: >-\n        You may create your own domain policy using this action. It takes a JSON\n        object containing a domain informations.\n      operationId: Create domain policy\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                domain: domain.tld\n                object_from: \"*@baddomain.tld\"\n                object_list: bl\n              properties:\n                domain:\n                  description: domain name to which policy is associated to\n                  type: string\n                object_from:\n                  description: exact address or use wildcard to match whole domain\n                  type: string\n                object_list:\n                  enum:\n                    - wl\n                    - bl\n                  type: string\n              type: object\n      summary: Create domain policy\n  /api/v1/add/fwdhost:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - fwdhost\n                        - add\n                        - filter_spam: \"0\"\n                          hostname: hosted.mailcow.de\n                      msg:\n                        - forwarding_host_added\n                        - \"5.1.76.202, 2a00:f820:417::202\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Fordwarding Hosts\n      description: >-\n        Add a new Forwarding host to mailcow. You can chose to enable or disable\n        spam filtering of incoming emails by specifing `filter_spam` 0 =\n        inactive, 1 = active.\n      operationId: Add Forward Host\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                filter_spam: \"0\"\n                hostname: hosted.mailcow.de\n              properties:\n                filter_spam:\n                  description: \"1 to enable spam filter, 0 to disable spam filter\"\n                  type: number\n                hostname:\n                  description: contains the hostname you want to add\n                  type: string\n              type: object\n      summary: Add Forward Host\n  /api/v1/add/mailbox:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - add\n                        - mailbox\n                        - active: \"1\"\n                          domain: domain.tld\n                          local_part: info\n                          name: Full name\n                          password: \"*\"\n                          password2: \"*\"\n                          quota: \"3072\"\n                          force_pw_update: \"1\"\n                          tls_enforce_in: \"1\"\n                          tls_enforce_out: \"1\"\n                          tags: [\"tag1\", \"tag2\"]\n                        - null\n                      msg:\n                        - mailbox_added\n                        - info@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: >-\n        You may create your own mailbox using this action. It takes a JSON\n        object containing a domain informations.\n      operationId: Create mailbox\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                domain: domain.tld\n                local_part: info\n                name: Full name\n                authsource: mailcow\n                password: atedismonsin\n                password2: atedismonsin\n                quota: \"3072\"\n                force_pw_update: \"1\"\n                tls_enforce_in: \"1\"\n                tls_enforce_out: \"1\"\n                tags: [\"tag1\", \"tag2\"]\n              properties:\n                active:\n                  description: is mailbox active or not\n                  type: boolean\n                domain:\n                  description: domain name\n                  type: string\n                local_part:\n                  description: left part of email address\n                  type: string\n                name:\n                  description: Full name of the mailbox user\n                  type: string\n                authsource:\n                  description: Specifies the authentication source for the mailbox.\n                  type: string\n                  enum: [mailcow, ldap, keycloak, generic-oidc]\n                  default: mailcow\n                password2:\n                  description: mailbox password for confirmation\n                  type: string\n                password:\n                  description: mailbox password when using `mailcow` as the authentication source.\n                  type: string\n                quota:\n                  description: mailbox quota\n                  type: number\n                force_pw_update:\n                  description: forces the user to update its password on first login\n                  type: boolean\n                tls_enforce_in:\n                  description: force inbound email tls encryption\n                  type: boolean\n                tls_enforce_out:\n                  description: force oubound tmail tls encryption\n                  type: boolean\n              type: object\n      summary: Create mailbox\n\n  /api/v1/add/oauth2-client:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - oauth2\n                        - add\n                        - client\n                        - redirect_uri: \"https://mailcow.tld\"\n                      msg: Added client access\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - oAuth Clients\n      description: Using this endpoint you can create a oAuth clients.\n      operationId: Create oAuth Client\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                redirect_uri: \"https://mailcow.tld\"\n              properties:\n                redirect_uri:\n                  description: the uri where you should be redirected after oAuth\n                  type: string\n              type: object\n      summary: Create oAuth Client\n  /api/v1/add/recipient_map:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - recipient_map\n                        - add\n                        - active: \"1\"\n                          recipient_map_new: target@mailcow.tld\n                          recipient_map_old: recipient@mailcow.tld\n                        - null\n                      msg:\n                        - recipient_map_entry_saved\n                        - recipient@mailcow.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Address Rewriting\n      description: >-\n        Using this endpoint you can create a recipient map to forward all mails\n        from one email address to another.\n      operationId: Create Recipient Map\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                recipient_map_new: target@mailcow.tld\n                recipient_map_old: recipient@mailcow.tld\n              properties:\n                active:\n                  description: 1 for a active user account 0 for a disabled user account\n                  type: number\n                recipient_map_new:\n                  description: the email address that should receive the forwarded emails\n                  type: string\n                recipient_map_old:\n                  description: the email address which emails should be forwarded\n                  type: string\n              type: object\n      summary: Create Recipient Map\n  /api/v1/add/relayhost:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - relayhost\n                        - add\n                        - hostname: \"mailcow.tld:25\"\n                          password: supersecurepassword\n                          username: testuser\n                      msg:\n                        - relayhost_added\n                        - \"\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Routing\n      description: Using this endpoint you can create Sender-Dependent Transports.\n      operationId: Create Sender-Dependent Transports\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                hostname: \"mailcow.tld:25\"\n                password: supersecurepassword\n                username: testuser\n              properties:\n                hostname:\n                  description: the hostname of the smtp server with port\n                  type: string\n                password:\n                  description: the password for the smtp user\n                  type: string\n                username:\n                  description: the username used to authenticate\n                  type: string\n              type: object\n      summary: Create Sender-Dependent Transports\n  /api/v1/add/resource:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - add\n                        - resource\n                        - active: \"1\"\n                          description: test\n                          domain: mailcow.tld\n                          kind: location\n                          multiple_bookings: \"0\"\n                          multiple_bookings_custom: \"\"\n                          multiple_bookings_select: \"0\"\n                        - null\n                      msg:\n                        - resource_added\n                        - mailcow.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Resources\n      description: Using this endpoint you can create Resources.\n      operationId: Create Resources\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                description: test\n                domain: mailcow.tld\n                kind: location\n                multiple_bookings: \"0\"\n                multiple_bookings_custom: \"\"\n                multiple_bookings_select: \"0\"\n              properties:\n                active:\n                  description: 1 for a active transport map 0 for a disabled transport map\n                  type: number\n                description:\n                  description: a description of the resource\n                  type: string\n                domain:\n                  description: the domain for which the resource should be\n                  type: string\n                kind:\n                  description: the kind of recouse\n                  enum:\n                    - location\n                    - group\n                    - thing\n                  type: string\n                multiple_bookings:\n                  enum:\n                    - \"-1\"\n                    - \"1\"\n                    - custom\n                  type: string\n                multiple_bookings_custom:\n                  description: always empty\n                  type: number\n                multiple_bookings_select:\n                  enum:\n                    - \"-1\"\n                    - \"1\"\n                    - custom\n                  type: string\n              type: object\n      summary: Create Resources\n  /api/v1/add/syncjob:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - add\n                        - syncjob\n                        - active: \"1\"\n                          automap: \"1\"\n                          custom_params: \"\"\n                          delete1: \"0\"\n                          delete2: \"0\"\n                          delete2duplicates: \"1\"\n                          enc1: SSL\n                          exclude: (?i)spam|(?i)junk\n                          host1: imap.server.tld\n                          maxage: \"0\"\n                          maxbytespersecond: \"0\"\n                          mins_interval: \"20\"\n                          password1: supersecret\n                          port1: 993\n                          skipcrossduplicates: \"0\"\n                          subfolder2: External\n                          subscribeall: \"1\"\n                          timeout1: \"600\"\n                          timeout2: \"600\"\n                          user1: username\n                          username: mailbox@domain.tld\n                        - null\n                      msg:\n                        - mailbox_modified\n                        - mailbox@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Sync jobs\n      description: >-\n        You can create new sync job using this action. It takes a JSON object\n        containing a domain informations.\n      operationId: Create sync job\n      summary: Create sync job\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                username: lisa@mailcow.tld\n                host1: mail.mailcow.tld\n                port1: \"143\"\n                user1: demo@mailcow.tld\n                password1: supersecretpw\n                enc1: TLS\n                mins_interval: \"20\"\n                subfolder2: \"/SyncIntoSubfolder\"\n                maxage: \"0\"\n                maxbytespersecond: \"0\"\n                timeout1: \"600\"\n                timeout2: \"600\"\n                exclude: \"(?i)spam|(?i)junk\"\n                custom_params: \"--dry\"\n                delete2duplicates: \"1\"\n                delete1: \"1\"\n                delete2: \"0\"\n                automap: \"1\"\n                skipcrossduplicates: \"0\"\n                subscribeall: \"0\"\n                active: \"1\"\n              properties:\n                parameters:\n                  description: your local mailcow mailbox\n                  type: string\n                host1:\n                  description: the smtp server where mails should be synced from\n                  type: string\n                port1:\n                  description: the smtp port of the target mail server\n                  type: string\n                user1:\n                  description: the username of the mailbox\n                  type: string\n                password:\n                  description: the password of the mailbox\n                  type: string\n                enc1:\n                  description: the encryption method used to connect to the mailserver\n                  type: string\n                mins_internal:\n                  description: the interval in which messages should be syned\n                  type: number\n                subfolder2:\n                  description: sync into subfolder on destination (empty = do not use subfolder)\n                  type: string\n                maxage:\n                  description: only sync messages up to this age in days\n                  type: number\n                maxbytespersecond:\n                  description: max speed transfer limit for the sync\n                  type: number\n                timeout1:\n                  description: timeout for connection to remote host\n                  type: number\n                timeout2:\n                  description: timeout for connection to local host\n                  type: number\n                exclude:\n                  description: exclude objects (regex)\n                  type: string\n                custom_params:\n                  description: custom parameters\n                  type: string\n                delete2duplicates:\n                  description: delete duplicates on destination (--delete2duplicates)\n                  type: boolean\n                delete1:\n                  description: delete from source when completed (--delete1)\n                  type: boolean\n                delete2:\n                  description: delete messages on destination that are not on source (--delete2)\n                  type: boolean\n                automap:\n                  description: try to automap folders (\"Sent items\", \"Sent\" => \"Sent\" etc.) (--automap)\n                  type: boolean\n                skipcrossduplicates:\n                  description: skip duplicate messages across folders (first come, first serve) (--skipcrossduplicates)\n                  type: boolean\n                subscribeall:\n                  description: subscribe all folders (--subscribeall)\n                  type: boolean\n                active:\n                  description: enables or disables the sync job\n                  type: boolean\n              type: object\n  /api/v1/add/tls-policy-map:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - tls_policy_maps\n                        - add\n                        - parameters: \"\"\n                          active: \"1\"\n                          dest: mailcow.tld\n                          policy: encrypt\n                        - null\n                      msg:\n                        - tls_policy_map_entry_saved\n                        - mailcow.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Outgoing TLS Policy Map Overrides\n      description: Using this endpoint you can create a TLS policy map override.\n      operationId: Create TLS Policy Map\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                parameters: \"\"\n                active: \"1\"\n                dest: mailcow.tld\n                policy: encrypt\n              properties:\n                parameters:\n                  description: >-\n                    custom parameters you find out more about them\n                    [here](http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps)\n                  type: string\n                active:\n                  description: 1 for a active user account 0 for a disabled user account\n                  type: number\n                dest:\n                  description: the target domain or email address\n                  type: string\n                policy:\n                  description: the policy\n                  enum:\n                    - none\n                    - may\n                    - encrypt\n                    - dane\n                    - \"'dane\"\n                    - fingerprint\n                    - verify\n                    - secure\n                  type: string\n              type: object\n      summary: Create TLS Policy Map\n  /api/v1/add/transport:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - transport\n                        - add\n                        - active: \"1\"\n                          destination: example2.org\n                          nexthop: \"host:25\"\n                          password: supersecurepw\n                          username: testuser\n                      msg:\n                        - relayhost_added\n                        - \"\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Routing\n      description: Using this endpoint you can create Sender-Dependent Transports.\n      operationId: Create Transport Maps\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                active: \"1\"\n                destination: example.org\n                nexthop: \"host:25\"\n                password: supersecurepw\n                username: testuser\n              properties:\n                active:\n                  description: 1 for a active transport map 0 for a disabled transport map\n                  type: number\n                destination:\n                  type: string\n                nexthop:\n                  type: string\n                password:\n                  description: the password for the smtp user\n                  type: string\n                username:\n                  description: the username used to authenticate\n                  type: string\n              type: object\n      summary: Create Transport Maps\n  /api/v1/delete/alias:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - delete\n                        - alias\n                        - id:\n                            - \"6\"\n                            - \"9\"\n                        - null\n                      msg:\n                        - alias_removed\n                        - alias@domain.tld\n                      type: success\n                    - log:\n                        - mailbox\n                        - delete\n                        - alias\n                        - id:\n                            - \"6\"\n                            - \"9\"\n                        - null\n                      msg:\n                        - alias_removed\n                        - alias2@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Aliases\n      description: You can delete one or more aliases.\n      operationId: Delete alias\n      requestBody:\n        content:\n          application/json:\n            schema:\n              items:\n                example: \"6\"\n                type: string\n              type: array\n      summary: Delete alias\n  /api/v1/delete/app-passwd:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - app_passwd\n                        - delete\n                        - id:\n                            - \"2\"\n                      msg:\n                        - app_passwd_removed\n                        - \"2\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - App Passwords\n      description: Using this endpoint you can delete a single app password.\n      operationId: Delete App Password\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"1\"\n              properties:\n                items:\n                  description: contains list of app passwords you want to delete\n                  type: object\n              type: object\n      summary: Delete App Password\n  /api/v1/delete/bcc:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - bcc\n                        - delete\n                        - id:\n                            - \"4\"\n                        - null\n                      msg:\n                        - bcc_deleted\n                        - \"4\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Address Rewriting\n      description: >-\n        Using this endpoint you can delete a BCC map, for this you have to know\n        its ID. You can get the ID using the GET method.\n      operationId: Delete BCC Map\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"3\"\n              properties:\n                items:\n                  description: contains list of bcc maps you want to delete\n                  type: object\n              type: object\n      summary: Delete BCC Map\n  /api/v1/delete/dkim:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - dkim\n                        - delete\n                        - domains:\n                            - mailcow.tld\n                      msg:\n                        - dkim_removed\n                        - mailcow.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - DKIM\n      description: Using this endpoint a existing DKIM Key can be deleted\n      operationId: Delete DKIM Key\n      requestBody:\n        content:\n          application/json:\n            schema:\n              items:\n                example:\n                  - mailcow.tld\n                type: string\n              type: array\n      summary: Delete DKIM Key\n  /api/v1/delete/domain:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - delete\n                        - domain\n                        - domain:\n                            - domain.tld\n                            - domain2.tld\n                        - null\n                      msg:\n                        - domain_removed\n                        - domain.tld\n                      type: success\n                    - log:\n                        - mailbox\n                        - delete\n                        - domain\n                        - domain:\n                            - domain.tld\n                            - domain2.tld\n                        - null\n                      msg:\n                        - domain_removed\n                        - domain2.tld\n                      type: success\n              schema:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    log:\n                      description: contains request object\n                      items: {}\n                      type: array\n                    msg:\n                      items: {}\n                      type: array\n                    type:\n                      enum:\n                        - success\n                        - danger\n                        - error\n                      type: string\n          description: OK\n          headers: {}\n      tags:\n        - Domains\n      description: You can delete one or more domains.\n      operationId: Delete domain\n      requestBody:\n        content:\n          application/json:\n            schema:\n              type: object\n              example:\n                - domain.tld\n                - domain2.tld\n              properties:\n                items:\n                  type: array\n                  items:\n                    type: string\n      summary: Delete domain\n  /api/v1/delete/domain-admin:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - domain_admin\n                        - delete\n                        - username:\n                            - testadmin\n                      msg:\n                        - domain_admin_removed\n                        - testadmin\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domain admin\n      description: Using this endpoint a existing Domain Admin user can be deleted.\n      operationId: Delete Domain Admin\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - testadmin\n              properties:\n                items:\n                  description: contains list of usernames of the users you want to delete\n                  type: object\n              type: object\n      summary: Delete Domain Admin\n  /api/v1/delete/domain-policy:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - policy\n                        - delete\n                        - domain\n                        - prefid:\n                            - \"1\"\n                            - \"2\"\n                      msg:\n                        - item_deleted\n                        - \"1\"\n                      type: success\n                    - log:\n                        - policy\n                        - delete\n                        - domain\n                        - prefid:\n                            - \"1\"\n                            - \"2\"\n                      msg:\n                        - item_deleted\n                        - \"2\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domain antispam policies\n      description: You can delete one o more domain policies.\n      operationId: Delete domain policy\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"1\"\n                - \"2\"\n              properties:\n                items:\n                  description: contains list of domain policys you want to delete\n                  type: object\n              type: object\n      summary: Delete domain policy\n  /api/v1/delete/fwdhost:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - fwdhost\n                        - delete\n                        - forwardinghost:\n                            - 5.1.76.202\n                            - \"2a00:f820:417::202\"\n                      msg:\n                        - forwarding_host_removed\n                        - 5.1.76.202\n                      type: success\n                    - log:\n                        - fwdhost\n                        - delete\n                        - forwardinghost:\n                            - 5.1.76.202\n                            - \"2a00:f820:417::202\"\n                      msg:\n                        - forwarding_host_removed\n                        - \"2a00:f820:417::202\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Fordwarding Hosts\n      description: >-\n        Using this endpoint you can delete a forwarding host, in order to do so\n        you need to know the IP of the host.\n      operationId: Delete Forward Host\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - 5.1.76.202\n                - \"2a00:f820:417::202\"\n              properties:\n                ip:\n                  description: contains the ip of the fowarding host you want to delete\n                  type: string\n              type: object\n      summary: Delete Forward Host\n  /api/v1/delete/mailbox:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - delete\n                        - mailbox\n                        - username:\n                            - info@domain.tld\n                            - sales@domain.tld\n                        - null\n                      msg:\n                        - mailbox_removed\n                        - info@domain.tld\n                      type: success\n                    - log:\n                        - mailbox\n                        - delete\n                        - mailbox\n                        - username:\n                            - info@domain.tld\n                            - sales@domain.tld\n                        - null\n                      msg:\n                        - mailbox_removed\n                        - sales@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: You can delete one or more mailboxes.\n      operationId: Delete mailbox\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - info@domain.tld\n                - sales@domain.tld\n              properties:\n                items:\n                  description: contains list of mailboxes you want to delete\n                  type: object\n              type: object\n      summary: Delete mailbox\n  /api/v1/delete/mailq:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    msg: Task completed\n                    type: success\n          description: OK\n          headers: {}\n      tags:\n        - Queue Manager\n      description: >-\n        Using this API you can delete the current mail queue. This will delete\n        all mails in it.\n\n        This API uses the command: `postsuper -d`\n      operationId: Delete Queue\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                action: super_delete\n              properties:\n                action:\n                  description: use super_delete to delete the mail queue\n                  type: string\n              type: object\n      summary: Delete Queue\n  /api/v1/delete/oauth2-client:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - oauth2\n                        - delete\n                        - client\n                        - id:\n                            - \"1\"\n                      msg:\n                        - items_deleted\n                        - \"1\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - oAuth Clients\n      description: >-\n        Using this endpoint you can delete a oAuth client, for this you have to\n        know its ID. You can get the ID using the GET method.\n      operationId: Delete oAuth Client\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"3\"\n              properties:\n                items:\n                  description: contains list of oAuth clients you want to delete\n                  type: object\n              type: object\n      summary: Delete oAuth Client\n  /api/v1/delete/qitem:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - quarantine\n                        - delete\n                        - id:\n                            - \"33\"\n                      msg:\n                        - item_deleted\n                        - \"33\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Quarantine\n      description: >-\n        Using this endpoint you can delete a email from quarantine, for this you\n        have to know its ID. You can get the ID using the GET method.\n      operationId: Delete mails in Quarantine\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"33\"\n              properties:\n                items:\n                  description: contains list of emails you want to delete\n                  type: object\n              type: object\n      summary: Delete mails in Quarantine\n  /api/v1/edit/qitem:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                release:\n                  value:\n                    - log:\n                        - quarantine\n                        - edit\n                        - id:\n                            - \"33\"\n                          action: release\n                      msg:\n                        - item_released\n                        - \"33\"\n                      type: success\n                learnham:\n                  value:\n                    - log:\n                        - quarantine\n                        - edit\n                        - id:\n                            - \"34\"\n                          action: learnham\n                      msg:\n                        - item_learned\n                        - \"34\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Quarantine\n      description: >-\n        Using this endpoint you can perform actions on quarantine items. It is possible to release\n        emails from quarantine into to the inbox, or learn them as ham to improve Rspamd filtering.\n        You must provide the quarantine item IDs. You can get the IDs using the GET method.      \n      operationId: Edit mails in Quarantine\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                items:\n                  - \"33\"\n                  - \"34\"\n                attr:\n                  action: release\n              properties:\n                items:\n                  description: contains list of quarantine item IDs to release or learn as ham\n                  type: object\n                attr:\n                  description: attributes for the action\n                  type: object\n                  properties:\n                    action:\n                      type: string\n                      enum:\n                        - release\n                        - learnham\n                      description: \"release - return email to inbox; learnham - learn as ham to improve filtering\"\n              type: object\n      summary: Edit mails in Quarantine\n  /api/v1/delete/recipient_map:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - recipient_map\n                        - delete\n                        - id:\n                            - \"1\"\n                        - null\n                      msg:\n                        - recipient_map_entry_deleted\n                        - \"1\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Address Rewriting\n      description: >-\n        Using this endpoint you can delete a recipient map, for this you have to\n        know its ID. You can get the ID using the GET method.\n      operationId: Delete Recipient Map\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"1\"\n              properties:\n                items:\n                  description: contains list of recipient maps you want to delete\n                  type: object\n              type: object\n      summary: Delete Recipient Map\n  /api/v1/delete/relayhost:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - relayhost\n                        - delete\n                        - id:\n                            - \"1\"\n                      msg:\n                        - relayhost_removed\n                        - \"1\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Routing\n      description: >-\n        Using this endpoint you can delete a Sender-Dependent Transport, for\n        this you have to know its ID. You can get the ID using the GET method.\n      operationId: Delete Sender-Dependent Transports\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"1\"\n              properties:\n                items:\n                  description: >-\n                    contains list of Sender-Dependent Transport you want to\n                    delete\n                  type: object\n              type: object\n      summary: Delete Sender-Dependent Transports\n  /api/v1/delete/resource:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - delete\n                        - resource\n                        - name:\n                            - test@mailcow.tld\n                        - null\n                      msg:\n                        - resource_removed\n                        - test@mailcow.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Resources\n      description: >-\n        Using this endpoint you can delete a Resources, for this you have to\n        know its ID. You can get the ID using the GET method.\n      operationId: Delete Resources\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - test@mailcow.tld\n              properties:\n                items:\n                  description: contains list of Resources you want to delete\n                  type: object\n              type: object\n      summary: Delete Resources\n  /api/v1/delete/syncjob:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    log:\n                      - entity\n                      - action\n                      - object\n                    msg:\n                      - message\n                      - entity name\n                    type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Sync jobs\n      description: You can delete one or more sync jobs.\n      operationId: Delete sync job\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"6\"\n                - \"9\"\n              properties:\n                items:\n                  description: contains list of aliases you want to delete\n                  type: object\n              type: object\n      summary: Delete sync job\n  /api/v1/delete/tls-policy-map:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - tls_policy_maps\n                        - delete\n                        - id:\n                            - \"1\"\n                        - null\n                      msg:\n                        - tls_policy_map_entry_deleted\n                        - \"1\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Outgoing TLS Policy Map Overrides\n      description: >-\n        Using this endpoint you can delete a TLS Policy Map, for this you have\n        to know its ID. You can get the ID using the GET method.\n      operationId: Delete TLS Policy Map\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"3\"\n              properties:\n                items:\n                  description: contains list of tls policy maps you want to delete\n                  type: object\n              type: object\n      summary: Delete TLS Policy Map\n  /api/v1/delete/transport:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - transport\n                        - delete\n                        - id:\n                            - \"1\"\n                      msg:\n                        - relayhost_removed\n                        - \"1\"\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Routing\n      description: >-\n        Using this endpoint you can delete a Transport Maps, for this you have\n        to know its ID. You can get the ID using the GET method.\n      operationId: Delete Transport Maps\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - \"1\"\n              properties:\n                items:\n                  description: contains list of transport maps you want to delete\n                  type: object\n              type: object\n      summary: Delete Transport Maps\n  \"/api/v1/delete/mailbox/tag/{mailbox}\":\n    post:\n      parameters:\n        - description: name of mailbox\n          in: path\n          name: mailbox\n          example: info@domain.tld\n          required: true\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - delete\n                        - tags_mailbox\n                        - tags:\n                          - tag1\n                          - tag2\n                          mailbox: info@domain.tld\n                        - null\n                      msg:\n                        - mailbox_modified\n                        - info@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: You can delete one or more mailbox tags.\n      operationId: Delete mailbox tags\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - tag1\n                - tag2\n              properties:\n                items:\n                  description: contains list of mailboxes you want to delete\n                  type: object\n              type: object\n      summary: Delete mailbox tags\n  \"/api/v1/delete/domain/tag/{domain}\":\n    post:\n      parameters:\n        - description: name of domain\n          in: path\n          name: domain\n          example: domain.tld\n          required: true\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - delete\n                        - tags_domain\n                        - tags:\n                          - tag1\n                          - tag2\n                          domain: domain.tld\n                        - null\n                      msg:\n                        - domain_modified\n                        - domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domains\n      description: You can delete one or more domain tags.\n      operationId: Delete domain tags\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - tag1\n                - tag2\n              properties:\n                items:\n                  description: contains list of domains you want to delete\n                  type: object\n              type: object\n      summary: Delete domain tags\n  /api/v1/edit/alias:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - edit\n                        - alias\n                        - active: \"1\"\n                          address: alias@domain.tld\n                          goto: destination@domain.tld\n                          id:\n                            - \"6\"\n                          private_comment: private comment\n                          public_comment: public comment\n                        - null\n                      msg:\n                        - alias_modified\n                        - alias@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Aliases\n      description: >-\n        You can update one or more aliases per request. You can also send just\n        attributes you want to change\n      operationId: Update alias\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  active: \"1\"\n                  address: alias@domain.tld\n                  goto: destination@domain.tld\n                  private_comment: private comment\n                  public_comment: public comment\n                items: [\"6\"]\n              properties:\n                attr:\n                  properties:\n                    active:\n                      description: is alias active or not\n                      type: boolean\n                    address:\n                      description: 'alias address, for catchall use \"@domain.tld\"'\n                      type: string\n                    goto:\n                      description: \"destination address, comma separated\"\n                      type: string\n                    goto_ham:\n                      description: learn as ham\n                      type: boolean\n                    goto_null:\n                      description: silently ignore\n                      type: boolean\n                    goto_spam:\n                      description: learn as spam\n                      type: boolean\n                    private_comment:\n                      type: string\n                    public_comment:\n                      type: string\n                    sogo_visible:\n                      description: toggle visibility as selectable sender in SOGo\n                      type: boolean\n                  type: object\n                items:\n                  description: contains list of aliases you want update\n                  type: object\n              type: object\n      summary: Update alias\n  /api/v1/edit/domain:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              schema:\n                type: array\n                items:\n                  type: object\n                  properties:\n                    log:\n                      type: array\n                      description: contains request object\n                      items: {}\n                    msg:\n                      type: array\n                      items: {}\n                    type:\n                      enum:\n                        - success\n                        - danger\n                        - error\n                      type: string\n          description: OK\n          headers: {}\n      tags:\n        - Domains\n      description: >-\n        You can update one or more domains per request. You can also send just\n        attributes you want to change.\n\n        Example: You can add domain names to items list and in attr object just\n        include `\"active\": \"0\"` to deactivate domains.\n      operationId: Update domain\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  active: \"1\"\n                  aliases: \"400\"\n                  backupmx: \"1\"\n                  defquota: \"3072\"\n                  description: domain description\n                  gal: \"1\"\n                  mailboxes: \"10\"\n                  maxquota: \"10240\"\n                  quota: \"10240\"\n                  relay_all_recipients: \"0\"\n                  relayhost: \"2\"\n                  tags: [\"tag3\", \"tag4\"]\n                items: domain.tld\n              properties:\n                attr:\n                  properties:\n                    active:\n                      description: is domain active or not\n                      type: boolean\n                    aliases:\n                      description: limit count of aliases associated with this domain\n                      type: number\n                    backupmx:\n                      description: relay domain or not\n                      type: boolean\n                    defquota:\n                      description: predefined mailbox quota in `add mailbox` form\n                      type: number\n                    description:\n                      description: Description of domain\n                      type: string\n                    gal:\n                      description: >-\n                        is domain global address list active or not, it enables\n                        shared contacts accross domain in SOGo webmail\n                      type: boolean\n                    mailboxes:\n                      description: limit count of mailboxes associated with this domain\n                      type: number\n                    maxquota:\n                      description: maximum quota per mailbox\n                      type: number\n                    quota:\n                      description: maximum quota for this domain (for all mailboxes in sum)\n                      type: number\n                    relay_all_recipients:\n                      description: >-\n                        if not, them you have to create \"dummy\" mailbox for each\n                        address to relay\n                      type: boolean\n                    relay_unknown_only:\n                      description: Relay non-existing mailboxes only. Existing mailboxes will be delivered locally.\n                      type: boolean\n                    relayhost:\n                      description: id of relayhost\n                      type: number\n                    rl_frame:\n                      enum:\n                        - s\n                        - m\n                        - h\n                        - d\n                      type: string\n                    rl_value:\n                      description: rate limit value\n                      type: number\n                    tags:\n                      description: tags for this Domain\n                      type: array\n                      items:\n                        type: string\n                  type: object\n                items:\n                  description: contains list of domain names you want update\n                  type: array\n                  items:\n                    type: string\n              type: object\n      summary: Update domain\n  /api/v1/edit/domain/footer:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                  - log:\n                      - mailbox\n                      - edit\n                      - domain_wide_footer\n                      - domains:\n                          - mailcow.tld\n                        html: \"<br>foo {= foo =}\"\n                        plain: \"<foo {= foo =}\"\n                        mbox_exclude:\n                          - moo@mailcow.tld\n                      - null\n                    msg:\n                      - domain_footer_modified\n                      - mailcow.tld\n                    type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Domains\n      description: >-\n        You can update the footer of one or more domains per request.\n      operationId: Update domain wide footer\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  html: \"<br>foo {= foo =}\"\n                  plain: \"foo {= foo =}\"\n                  mbox_exclude:\n                    - moo@mailcow.tld\n                items: mailcow.tld\n              properties:\n                attr:\n                  properties:\n                    html:\n                      description: Footer text in HTML format\n                      type: string\n                    plain:\n                      description: Footer text in PLAIN text format\n                      type: string\n                    mbox_exclude:\n                      description: Array of mailboxes to exclude from domain wide footer\n                      type: object\n                  type: object\n                items:\n                  description: contains a list of domain names where you want to update the footer\n                  type: array\n                  items:\n                    type: string\n              type: object\n      summary: Update domain wide footer\n  /api/v1/edit/fail2ban:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            \"*/*\":\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Fail2Ban\n      description: >-\n        Using this endpoint you can edit the Fail2Ban config and black or\n        whitelist new ips.\n      operationId: Edit Fail2Ban\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  ban_time: \"86400\"\n                  ban_time_increment: \"1\"\n                  blacklist: \"10.100.6.5/32,10.100.8.4/32\"\n                  max_attempts: \"5\"\n                  max_ban_time: \"86400\"\n                  netban_ipv4: \"24\"\n                  netban_ipv6: \"64\"\n                  retry_window: \"600\"\n                  whitelist: mailcow.tld\n                items: none\n              properties:\n                attr:\n                  description: array containing the fail2ban settings\n                  properties:\n                    backlist:\n                      description: the backlisted ips or hostnames separated by comma\n                      type: string\n                    ban_time:\n                      description: the time an ip should be banned\n                      type: number\n                    ban_time_increment:\n                      description: if the time of the ban should increase each time\n                      type: boolean\n                    max_attempts:\n                      description: the maximum numbe of wrong logins before a ip is banned\n                      type: number\n                    max_ban_time:\n                      description: the maximum time an ip should be banned\n                      type: number\n                    netban_ipv4:\n                      description: the networks mask to ban for ipv4\n                      type: number\n                    netban_ipv6:\n                      description: the networks mask to ban for ipv6\n                      type: number\n                    retry_window:\n                      description: >-\n                        the maximum time in which a ip as to login with false\n                        credentials to be banned\n                      type: number\n                    whitelist:\n                      description: whitelisted ips or hostnames sepereated by comma\n                      type: string\n                  type: object\n                items:\n                  description: has to be none\n              type: object\n      summary: Edit Fail2Ban\n  /api/v1/edit/mailbox:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - mailbox\n                        - edit\n                        - mailbox\n                        - active: \"1\"\n                          force_pw_update: \"0\"\n                          name: Full name\n                          password: \"*\"\n                          password2: \"*\"\n                          quota: \"3072\"\n                          sender_acl:\n                            - default\n                            - info@domain2.tld\n                            - domain3.tld\n                            - \"*\"\n                          sogo_access: \"1\"\n                          username:\n                            - info@domain.tld\n                          tags: [\"tag3\", \"tag4\"]\n                        - null\n                      msg:\n                        - mailbox_modified\n                        - info@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: >-\n        You can update one or more mailboxes per request. You can also send just\n        attributes you want to change\n      operationId: Update mailbox\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  active: \"1\"\n                  force_pw_update: \"0\"\n                  name: Full name\n                  authsource: mailcow\n                  password: \"\"\n                  password2: \"\"\n                  quota: \"3072\"\n                  sender_acl:\n                    - default\n                    - info@domain2.tld\n                    - domain3.tld\n                    - \"*\"\n                  sogo_access: \"1\"\n                  tags: [\"tag3\", \"tag4\"]\n                items:\n                  - info@domain.tld\n              properties:\n                attr:\n                  properties:\n                    active:\n                      description: is mailbox active or not\n                      type: boolean\n                    force_pw_update:\n                      description: force user to change password on next login\n                      type: boolean\n                    name:\n                      description: Full name of the mailbox user\n                      type: string\n                    authsource:\n                      description: Specifies the authentication source for the mailbox.\n                      type: string\n                      enum: [mailcow, ldap, keycloak, generic-oidc]\n                    password2:\n                      description: new mailbox password for confirmation\n                      type: string\n                    password:\n                      description: new mailbox password when using `mailcow` as the authentication source.\n                      type: string\n                    quota:\n                      description: mailbox quota\n                      type: number\n                    sender_acl:\n                      description: list of allowed send from addresses\n                      type: object\n                    sogo_access:\n                      description: is access to SOGo webmail active or not\n                      type: boolean\n                  type: object\n                items:\n                  description: contains list of mailboxes you want update\n                  type: object\n              type: object\n      summary: Update mailbox\n  /api/v1/edit/mailbox/custom-attribute:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                  - log:\n                      - mailbox\n                      - edit\n                      - mailbox_custom_attribute\n                      - mailboxes:\n                          - moo@mailcow.tld\n                        attribute:\n                          - role\n                          - foo\n                        value:\n                          - cow\n                          - bar\n                      - null\n                    msg:\n                      - mailbox_modified\n                      - moo@mailcow.tld\n                    type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: >-\n        You can update custom attributes of one or more mailboxes per request.\n      operationId: Update mailbox custom attributes\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  attribute:\n                    - role\n                    - foo\n                  value:\n                    - cow\n                    - bar\n                items:\n                  - moo@mailcow.tld\n              properties:\n                attr:\n                  properties:\n                    attribute:\n                      description: Array of attribute keys\n                      type: object\n                    value:\n                      description: Array of attribute values\n                      type: object\n                  type: object\n                items:\n                  description: contains list of mailboxes you want update\n                  type: object\n              type: object\n      summary: Update mailbox custom attributes\n  /api/v1/edit/mailq:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    msg: Task completed\n                    type: success\n          description: OK\n          headers: {}\n      tags:\n        - Queue Manager\n      description: >-\n        Using this API you can flush the current mail queue. This will try to\n        deliver all mails currently in it.\n\n        This API uses the command: `postqueue -f`\n      operationId: Flush Queue\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                action: flush\n              properties:\n                action:\n                  description: use flush to flush the mail queue\n                  type: string\n              type: object\n      summary: Flush Queue\n  /api/v1/edit/pushover:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - pushover\n                        - edit\n                        - active: \"0\"\n                          evaluate_x_prio: \"0\"\n                          key: 21e8918e1jksdjcpis712\n                          only_x_prio: \"0\"\n                          sound: \"pushover\"\n                          senders: \"\"\n                          senders_regex: \"\"\n                          text: \"\"\n                          title: Mail\n                          token: 9023e2ohcwed27d1idu2\n                          username:\n                            - info@domain.tld\n                      msg: pushover_settings_edited\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: >-\n        Using this endpoint it is possible to update the pushover settings for\n        mailboxes\n      operationId: Update Pushover settings\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  active: \"0\"\n                  evaluate_x_prio: \"0\"\n                  key: 21e8918e1jksdjcpis712\n                  only_x_prio: \"0\"\n                  sound: \"pushover\"\n                  senders: \"\"\n                  senders_regex: \"\"\n                  text: \"\"\n                  title: Mail\n                  token: 9023e2ohcwed27d1idu2\n                items: info@domain.tld\n              properties:\n                attr:\n                  properties:\n                    active:\n                      description: Enables pushover 1 disable pushover 0\n                      type: number\n                    evaluate_x_prio:\n                      description: Send the Push with High priority\n                      type: number\n                    key:\n                      description: Pushover key\n                      type: string\n                    only_x_prio:\n                      description: Only send push for prio mails\n                      type: number\n                    sound:\n                      description: Set notification sound\n                      type: string\n                    senders:\n                      description: Only send push for emails from these senders\n                      type: string\n                    senders_regex:\n                      description: Regex to match senders for which a push will be send\n                      type: string\n                    text:\n                      description: Custom push noficiation text\n                      type: string\n                    title:\n                      description: Push title\n                      type: string\n                    token:\n                      description: Pushover token\n                      type: string\n                  type: object\n                items:\n                  description: contains list of mailboxes you want to delete\n                  type: object\n              type: object\n      summary: Update Pushover settings\n  /api/v1/edit/quarantine_notification:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: You can update one or more mailboxes per request.\n      operationId: Quarantine Notifications\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  quarantine_notification: hourly\n                items:\n                  anyOf:\n                    - mailbox1@domain.tld\n                    - mailbox2@domain.tld\n              properties:\n                attr:\n                  properties:\n                    quarantine_notification:\n                      description: recurrence\n                      enum:\n                        - hourly\n                        - daily\n                        - weekly\n                        - never\n                      type: string\n                  type: object\n                items:\n                  description: >-\n                    contains list of mailboxes you want set qurantine\n                    notifications\n                  type: object\n              type: object\n      summary: Quarantine Notifications\n  /api/v1/edit/syncjob:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    log:\n                      - entity\n                      - action\n                      - object\n                    msg:\n                      - message\n                      - entity name\n                    type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Sync jobs\n      description: >-\n        You can update one or more sync jobs per request. You can also send just\n        attributes you want to change.\n      operationId: Update sync job\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  active: \"1\"\n                  automap: \"1\"\n                  custom_params: \"\"\n                  delete1: \"0\"\n                  delete2: \"0\"\n                  delete2duplicates: \"1\"\n                  enc1: SSL\n                  exclude: (?i)spam|(?i)junk\n                  host1: imap.server.tld\n                  maxage: \"0\"\n                  maxbytespersecond: \"0\"\n                  mins_interval: \"20\"\n                  password1: supersecret\n                  port1: \"993\"\n                  skipcrossduplicates: \"0\"\n                  subfolder2: External\n                  subscribeall: \"1\"\n                  timeout1: \"600\"\n                  timeout2: \"600\"\n                  user1: username\n                items: \"1\"\n              properties:\n                attr:\n                  properties:\n                    active:\n                      description: Is sync job active\n                      type: boolean\n                    automap:\n                      description: >-\n                        Try to automap folders (\"Sent items\", \"Sent\" => \"Sent\"\n                        etc.)\n                      type: boolean\n                    custom_params:\n                      description: Custom parameters passed to imapsync command\n                      type: string\n                    delete1:\n                      description: Delete from source when completed\n                      type: boolean\n                    delete2:\n                      description: Delete messages on destination that are not on source\n                      type: boolean\n                    delete2duplicates:\n                      description: Delete duplicates on destination\n                      type: boolean\n                    enc1:\n                      description: Encryption\n                      enum:\n                        - TLS\n                        - SSL\n                        - PLAIN\n                      type: string\n                    exclude:\n                      description: Exclude objects (regex)\n                      type: string\n                    host1:\n                      description: Hostname\n                      type: string\n                    maxage:\n                      description: >-\n                        Maximum age of messages in days that will be polled from\n                        remote (0 = ignore age)\n                      type: number\n                    maxbytespersecond:\n                      description: Max. bytes per second (0 = unlimited)\n                      type: number\n                    mins_interval:\n                      description: Interval (min)\n                      type: number\n                    password1:\n                      description: Password\n                      type: string\n                    port1:\n                      description: Port\n                      type: string\n                    skipcrossduplicates:\n                      description: >-\n                        Skip duplicate messages across folders (first come,\n                        first serve)\n                      type: boolean\n                    subfolder2:\n                      description: >-\n                        Sync into subfolder on destination (empty = do not use\n                        subfolder)\n                      type: string\n                    subscribeall:\n                      description: Subscribe all folders\n                      type: boolean\n                    timeout1:\n                      description: Timeout for connection to remote host\n                      type: number\n                    timeout2:\n                      description: Timeout for connection to local host\n                      type: number\n                    user1:\n                      description: Username\n                      type: string\n                  type: object\n                items:\n                  description: contains list of aliases you want update\n                  type: object\n              type: object\n      summary: Update sync job\n  /api/v1/edit/user-acl:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - log:\n                        - acl\n                        - edit\n                        - user\n                        - user_acl:\n                            - spam_alias\n                            - tls_policy\n                            - spam_score\n                            - spam_policy\n                            - delimiter_action\n                            - syncjobs\n                            - eas_reset\n                            - quarantine\n                            - sogo_profile_reset\n                            - quarantine_attachments\n                            - quarantine_notification\n                            - app_passwds\n                            - pushover\n                          username:\n                            - info@domain.tld\n                      msg:\n                        - acl_saved\n                        - info@domain.tld\n                      type: success\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: Using this endpoints its possible to update the ACL's for mailboxes\n      operationId: Update mailbox ACL\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  user_acl:\n                    - spam_alias\n                    - tls_policy\n                    - spam_score\n                    - spam_policy\n                    - delimiter_action\n                    - syncjobs\n                    - eas_reset\n                    - quarantine\n                    - sogo_profile_reset\n                    - quarantine_attachments\n                    - quarantine_notification\n                    - app_passwds\n                    - pushover\n                items: info@domain.tld\n              properties:\n                attr:\n                  properties:\n                    user_acl:\n                      description: contains a list of active user acls\n                      type: object\n                  type: object\n                items:\n                  description: contains list of mailboxes you want to delete\n                  type: object\n              type: object\n      summary: Update mailbox ACL\n  \"/api/v1/get/alias/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      address: alias@domain.tld\n                      created: \"2019-04-04 19:29:49\"\n                      domain: domain.tld\n                      goto: destination@domain.tld\n                      id: 6\n                      in_primary_domain: \"\"\n                      is_catch_all: 0\n                      modified: null\n                      private_comment: null\n                      public_comment: null\n                    - active: \"1\"\n                      address: \"@domain.tld\"\n                      created: \"2019-04-27 13:42:39\"\n                      domain: domain.tld\n                      goto: destination@domain.tld\n                      id: 10\n                      in_primary_domain: \"\"\n                      is_catch_all: 1\n                      modified: null\n                      private_comment: null\n                      public_comment: null\n          description: OK\n          headers: {}\n      tags:\n        - Aliases\n      description: You can list mailbox aliases existing in system.\n      operationId: Get aliases\n      summary: Get aliases\n  \"/api/v1/get/time_limited_aliases/{mailbox}\":\n    get:\n      parameters:\n        - description: mailbox you want to get aliasses from\n          example: domain.tld\n          in: path\n          schema:\n            type: string\n          name: mailbox\n          required: true\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - address: alias@domain.tld\n                      goto: destination@domain.tld\n                      validity: 1668251246\n                      created: \"2021-11-12 12:07:26\"\n                      modified: null\n          description: OK\n          headers: {}\n      tags:\n        - Aliases\n      description: You can list time limited mailbox aliases existing in system.\n      operationId: Get time limited aliases\n      summary: Get time limited aliases\n  \"/api/v1/get/app-passwd/all/{mailbox}\":\n    get:\n      parameters:\n        - description: mailbox of entry you want to get\n          example: hello@mailcow.email\n          in: path\n          name: mailbox\n          required: true\n          schema:\n            enum:\n              - hello@mailcow.email\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      created: \"2019-12-21 16:04:55\"\n                      domain: mailcow.email\n                      id: 2\n                      mailbox: hello@mailcow.email\n                      modified: null\n                      name: emclient\n          description: OK\n          headers: {}\n      tags:\n        - App Passwords\n      description: >-\n        Using this endpoint you can get all app passwords from a specific\n        mailbox.\n      operationId: Get App Password\n      summary: Get App Password\n  \"/api/v1/get/bcc/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      bcc_dest: bcc@awesomecow.tld\n                      created: \"2019-10-02 21:44:34\"\n                      domain: mailcow.tld\n                      id: 3\n                      local_dest: \"@mailcow.tld\"\n                      modified: null\n                      type: sender\n          description: OK\n          headers: {}\n      tags:\n        - Address Rewriting\n      description: Using this endpoint you can get all BCC maps.\n      operationId: Get BCC Map\n      summary: Get BCC Map\n  \"/api/v1/get/dkim/{domain}\":\n    get:\n      parameters:\n        - description: name of domain\n          in: path\n          name: domain\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    dkim_selector: dkim\n                    dkim_txt: >-\n                      v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA21tUSjyasQy/hJmVjPnlRGfzx6TPhYj8mXY9DVOzSAE64Gddw/GnE/GcCR6WXNT23u9q4zPnz1IPoNt5kFOps8vg/iNqrcH++494noaZuYyFPPFnebkfryO4EvEyxC/c66qts+gnOUml+M8uv5WObBJld2gG12jLwFM0263J/N6J8LuUsaXOB2uCIfx8Nf4zjuJ6Ieez2uyHNK5dXjDLfKA4mTr+EEK6W6e34M4KN1liWM6r9Oy5S1FlLrD42VpURxxBZtBiEtaJPEKSQuk6GQz8ihu7W20Yr53tyCdaORu8dhxXVUWVf+GjuuMEdAmQCjYkarXdYCrt56Psw703kwIDAQAB\n                    length: \"2048\"\n                    privkey: \"\"\n                    pubkey: >-\n                      MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA21tUSjyasQy/hJmVjPnlRGfzx6TPhYj8mXY9DVOzSAE64Gddw/GnE/GcCR6WXNT23u9q4zPnz1IPoNt5kFOps8vg/iNqrcH++494noaZuYyFPPFnebkfryO4EvEyxC/c66qts+gnOUml+M8uv5WObBJld2gG12jLwFM0263J/N6J8LuUsaXOB2uCIfx8Nf4zjuJ6Ieez2uyHNK5dXjDLfKA4mTr+EEK6W6e34M4KN1liWM6r9Oy5S1FlLrD42VpURxxBZtBiEtaJPEKSQuk6GQz8ihu7W20Yr53tyCdaORu8dhxXVUWVf+GjuuMEdAmQCjYkarXdYCrt56Psw703kwIDAQAB\n          description: OK\n          headers: {}\n      tags:\n        - DKIM\n      description: >-\n        Using this endpoint you can get the DKIM public key for a specific\n        domain.\n      operationId: Get DKIM Key\n      summary: Get DKIM Key\n  /api/v1/get/domain-admin/all:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      created: \"2019-10-02 10:29:41\"\n                      selected_domains:\n                        - mailcow.tld\n                      tfa_active: \"0\"\n                      unselected_domains:\n                        - awesomemailcow.de\n                        - mailcowisgreat.de\n                      username: testadmin\n          description: OK\n          headers: {}\n      tags:\n        - Domain admin\n      description: \"\"\n      operationId: Get Domain Admins\n      summary: Get Domain Admins\n  \"/api/v1/get/domain/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - mailcow.tld\n            type: string\n        - description: comma seperated list of tags to filter by\n          example: \"tag1,tag2\"\n          in: query\n          name: tags\n          required: false\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      aliases_in_domain: 0\n                      aliases_left: 400\n                      backupmx: \"0\"\n                      bytes_total: \"5076666944\"\n                      def_new_mailbox_quota: 3221225472\n                      def_quota_for_mbox: 3221225472\n                      description: Some description\n                      domain_name: domain.tld\n                      gal: \"0\"\n                      max_new_mailbox_quota: 10737418240\n                      max_num_aliases_for_domain: 400\n                      max_num_mboxes_for_domain: 10\n                      max_quota_for_domain: 10737418240\n                      max_quota_for_mbox: 10737418240\n                      mboxes_in_domain: 0\n                      mboxes_left: 10\n                      msgs_total: \"172440\"\n                      quota_used_in_domain: \"0\"\n                      relay_all_recipients: \"0\"\n                      relayhost: \"0\"\n                      rl: false\n                      tags: [\"tag1\", \"tag2\"]\n                    - active: \"1\"\n                      aliases_in_domain: 0\n                      aliases_left: 400\n                      backupmx: \"1\"\n                      bytes_total: \"5076666944\"\n                      def_new_mailbox_quota: 3221225472\n                      def_quota_for_mbox: 3221225472\n                      description: domain description\n                      domain_name: domain2.tld\n                      gal: \"0\"\n                      max_new_mailbox_quota: 10737418240\n                      max_num_aliases_for_domain: 400\n                      max_num_mboxes_for_domain: 10\n                      max_quota_for_domain: 10737418240\n                      max_quota_for_mbox: 10737418240\n                      mboxes_in_domain: 0\n                      mboxes_left: 10\n                      msgs_total: \"172440\"\n                      quota_used_in_domain: \"0\"\n                      relay_all_recipients: \"0\"\n                      relayhost: \"0\"\n                      rl: false\n                      tags: [\"tag3\", \"tag4\"]\n          description: OK\n          headers: {}\n      tags:\n        - Domains\n      description: You can list all domains existing in system.\n      operationId: Get domains\n      summary: Get domains\n  /api/v1/get/fail2ban:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    ban_time: 604800\n                    ban_time_increment: 1\n                    blacklist: |-\n                      45.82.153.37/32\n                      92.118.38.52/32\n                    max_attempts: 1\n                    max_ban_time: 604800\n                    netban_ipv4: 32\n                    netban_ipv6: 128\n                    perm_bans:\n                      - 45.82.153.37/32\n                      - 92.118.38.52/32\n                    retry_window: 7200\n                    whitelist: 1.1.1.1\n          description: OK\n          headers: {}\n      tags:\n        - Fail2Ban\n      description: Gets the current Fail2Ban configuration.\n      operationId: Get Fail2Ban Config\n      summary: Get Fail2Ban Config\n  /api/v1/get/fwdhost/all:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - host: 5.1.76.202\n                      keep_spam: \"yes\"\n                      source: hosted.mailcow.de\n                    - host: \"2a00:f820:417::202\"\n                      keep_spam: \"yes\"\n                      source: hosted.mailcow.de\n          description: OK\n          headers: {}\n      tags:\n        - Fordwarding Hosts\n      description: You can list all Forwarding Hosts in your mailcow.\n      operationId: Get Forwarding Hosts\n      summary: Get Forwarding Hosts\n  \"/api/v1/get/logs/acme/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - message: >-\n                        Certificate validation done, neither changed nor due for\n                        renewal, sleeping for another day.\n                      time: \"1569927728\"\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all ACME logs from issued Lets Enctypts\n        certificates.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get ACME logs\n      summary: Get ACME logs\n  \"/api/v1/get/logs/api/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - data: \"\"\n                      method: GET\n                      remote: 1.1.1.1\n                      time: 1569939001\n                      uri: /api/v1/get/logs/api/2\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Api logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Api logs\n      summary: Get Api logs\n  \"/api/v1/get/logs/autodiscover/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - service: activesync\n                      time: 1569684212\n                      ua: >-\n                        Microsoft Office/16.0 (Windows NT 6.2; MAPICPL\n                        16.0.11328; Pro)\n                      user: awesome@mailcow.de\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Autodiscover logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Autodiscover logs\n      summary: Get Autodiscover logs\n  \"/api/v1/get/logs/dovecot/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - message: >-\n                        managesieve-login: Disconnected (no auth attempts in 0\n                        secs): user=<>, rip=172.22.1.3, lip=172.22.1.250\n                      priority: info\n                      program: dovecot\n                      time: \"1569938740\"\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Dovecot logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Dovecot logs\n      summary: Get Dovecot logs\n  \"/api/v1/get/logs/netfilter/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - message: \"Whitelist was changed, it has 1 entries\"\n                      priority: info\n                      time: 1569754911\n                    - message: Add host/network 1.1.1.1/32 to blacklist\n                      priority: crit\n                      time: 1569754911\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Netfilter logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Netfilter logs\n      summary: Get Netfilter logs\n  \"/api/v1/get/logs/postfix/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - message: \"EF1711500458: removed\"\n                      priority: info\n                      program: postfix/qmgr\n                      time: \"1569937433\"\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Postfix logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Postfix logs\n      summary: Get Postfix logs\n  \"/api/v1/get/logs/ratelimited/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - from: awesome@mailcow.email\n                      header_from: '\"Awesome\" <awesome@mailcow.email>'\n                      header_subject: Mailcow is amazing\n                      ip: 172.22.1.248\n                      message_id: 6a-5d892500-7-240abd80@90879116\n                      qid: E3CF91500458\n                      rcpt: hello@mailcow.email\n                      rl_hash: RLsdz3tuabozgd4oacbdh8kc78\n                      rl_info: mailcow(RLsdz3tuabozgd4oacbdh8kc78)\n                      rl_name: mailcow\n                      time: 1569269003\n                      user: awesome@mailcow.email\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Ratelimit logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Ratelimit logs\n      summary: Get Ratelimit logs\n  \"/api/v1/get/logs/rspamd-history/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Rspamd logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Rspamd logs\n      summary: Get Rspamd logs\n  \"/api/v1/get/logs/sogo/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - message: >-\n                        [109]:\n                        mailcowdockerized_watchdog-mailcow_1.mailcowdockerized_mailcow-network\n                        \"GET /SOGo.index/ HTTP/1.1\" 200 2531/0 0.005 - - 0\n                      priority: notice\n                      program: sogod\n                      time: \"1569938874\"\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all SOGo logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get SOGo logs\n      summary: Get SOGo logs\n  \"/api/v1/get/logs/watchdog/{count}\":\n    get:\n      parameters:\n        - description: Number of logs to return\n          in: path\n          name: count\n          required: true\n          schema:\n            type: number\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - hpdiff: \"0\"\n                      hpnow: \"1\"\n                      hptotal: \"1\"\n                      lvl: \"100\"\n                      service: Fail2ban\n                      time: \"1569938958\"\n                    - hpdiff: \"0\"\n                      hpnow: \"5\"\n                      hptotal: \"5\"\n                      lvl: \"100\"\n                      service: Rspamd\n                      time: \"1569938956\"\n          description: OK\n          headers: {}\n      tags:\n        - Logs\n      description: >-\n        This Api endpoint lists all Watchdog logs.\n\n        Tip: You can limit how many logs you want to get by using `/<count>` at\n        the end of the api url.\n      operationId: Get Watchdog logs\n      summary: Get Watchdog logs\n  \"/api/v1/get/mailbox/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - user@domain.tld\n            type: string\n        - description: comma seperated list of tags to filter by\n          example: \"tag1,tag2\"\n          in: query\n          name: tags\n          required: false\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      attributes:\n                        force_pw_update: \"0\"\n                        mailbox_format: \"maildir:\"\n                        quarantine_notification: never\n                        sogo_access: \"1\"\n                        tls_enforce_in: \"0\"\n                        tls_enforce_out: \"0\"\n                      domain: doman3.tld\n                      is_relayed: 0\n                      local_part: info\n                      max_new_quota: 10737418240\n                      messages: 0\n                      name: Full name\n                      percent_class: success\n                      percent_in_use: 0\n                      quota: 3221225472\n                      quota_used: 0\n                      rl: false\n                      spam_aliases: 0\n                      username: info@doman3.tld\n                      tags: [\"tag1\", \"tag2\"]\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: You can list all mailboxes existing in system.\n      operationId: Get mailboxes\n      summary: Get mailboxes\n  /api/v1/get/mailq/all:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - arrival_time: 1570091234\n                      message_size: 1848\n                      queue_id: B98C6260CA1\n                      queue_name: incoming\n                      recipients:\n                        - recipient@awesomecow.tld\n                      sender: sender@mailcow.tld\n          description: OK\n          headers: {}\n      tags:\n        - Queue Manager\n      description: Get the current mail queue and everything it contains.\n      operationId: Get Queue\n      summary: Get Queue\n  \"/api/v1/get/oauth2-client/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - client_id: 17c76aaa88c0\n                      client_secret: 73fc668a88147e32a31ff80c\n                      grant_types: null\n                      id: 1\n                      redirect_uri: \"https://mailcow.tld\"\n                      scope: profile\n                      user_id: null\n          description: OK\n          headers: {}\n      tags:\n        - oAuth Clients\n      description: Using this endpoint you can get all oAuth clients.\n      operationId: Get oAuth Clients\n      summary: Get oAuth Clients\n  \"/api/v1/get/policy_bl_domain/{domain}\":\n    get:\n      parameters:\n        - description: name of domain\n          in: path\n          name: domain\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - object: domain.tld\n                      prefid: 2\n                      value: \"*@baddomain.tld\"\n          description: OK\n          headers: {}\n      tags:\n        - Domain antispam policies\n      description: You can list all blacklist policies per domain.\n      operationId: List blacklist domain policy\n      summary: List blacklist domain policy\n  \"/api/v1/get/policy_wl_domain/{domain}\":\n    get:\n      parameters:\n        - description: name of domain\n          in: path\n          name: domain\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - object: domain.tld\n                      prefid: 1\n                      value: \"*@gooddomain.tld\"\n          description: OK\n          headers: {}\n      tags:\n        - Domain antispam policies\n      description: You can list all whitelist policies per domain.\n      operationId: List whitelist domain policy\n      summary: List whitelist domain policy\n  /api/v1/get/quarantine/all:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    created: 1572688831\n                    id: 33\n                    notified: 1\n                    qid: 8224615004C1\n                    rcpt: admin@domain.tld\n                    score: 15.48\n                    sender: bounces@send.domain.tld\n                    subject: mailcow is awesome\n                    virus_flag: 0\n          description: OK\n          headers: {}\n      tags:\n        - Quarantine\n      description: Get all mails that are currently in Quarantine.\n      operationId: Get mails in Quarantine\n      summary: Get mails in Quarantine\n  \"/api/v1/get/recipient_map/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      created: \"2019-10-02 22:06:29\"\n                      id: 3\n                      modified: null\n                      recipient_map_new: target@mailcow.tld\n                      recipient_map_old: recipient@mailcow.tld\n          description: OK\n          headers: {}\n      tags:\n        - Address Rewriting\n      description: Using this endpoint you can get all recipient maps.\n      operationId: Get Recipient Map\n      summary: Get Recipient Map\n  \"/api/v1/get/relayhost/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      hostname: \"mailcow.tld:25\"\n                      id: 1\n                      password: supersecurepassword\n                      password_short: tes...\n                      used_by_domains: \"\"\n                      username: testuser\n          description: OK\n          headers: {}\n      tags:\n        - Routing\n      description: Using this endpoint you can get all Sender-Dependent Transports.\n      operationId: Get Sender-Dependent Transports\n      summary: Get Sender-Dependent Transports\n  /api/v1/get/resource/all:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      description: test\n                      domain: mailcow.tld\n                      kind: location\n                      local_part: test\n                      multiple_bookings: 0\n                      name: test@mailcow.tld\n          description: OK\n          headers: {}\n      tags:\n        - Resources\n      description: Using this endpoint you can get all Resources.\n      operationId: Get Resources\n      summary: Get Resources\n  \"/api/v1/get/rl-mbox/{mailbox}\":\n    get:\n      parameters:\n        - description: name of mailbox or all\n          in: path\n          name: mailbox\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - frame: s\n                      mailbox: leon@mailcow.tld\n                      value: \"5\"\n                    - frame: s\n                      mailbox: lisa@mailcow.tld\n                      value: \"3\"\n          description: OK\n          headers: {}\n      tags:\n        - Ratelimits\n      description: >-\n        Using this endpoint you can get the ratelimits for a certain mailbox.\n        You can use all for all mailboxes.\n      operationId: Get mailbox ratelimits\n      summary: Get mailbox ratelimits\n  \"/api/v1/get/rl-domain/{domain}\":\n    get:\n      parameters:\n        - description: name of domain or all\n          in: path\n          name: domain\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - frame: s\n                      domain: domain.tld\n                      value: \"5\"\n                    - frame: s\n                      mailbox: domain2.tld\n                      value: \"3\"\n          description: OK\n          headers: {}\n      tags:\n        - Ratelimits\n      description: >-\n        Using this endpoint you can get the ratelimits for a certain domains.\n        You can use all for all domain.\n      operationId: Get domain ratelimits\n      summary: Get domain ratelimits\n  /api/v1/edit/rl-mbox/:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: success\n                      log:\n                        - ratelimit\n                        - edit\n                        - mailbox\n                        - object:\n                            - info@domain.tld\n                          rl_value: \"10\"\n                          rl_frame: h\n                      msg:\n                        - rl_saved\n                        - info@domain.tld\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Ratelimits\n      description: >-\n        Using this endpoint you can edit the ratelimits for a certain mailbox.\n      operationId: Edit mailbox ratelimits\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  rl_value: \"10\"\n                  rl_frame: \"h\"\n                items:\n                  - info@domain.tld\n              properties:\n                attr:\n                  properties:\n                    rl_frame:\n                      description: contains the frame for the ratelimit h,s,m\n                      type: string\n                    rl_value:\n                      description: contains the rate for the ratelimit 10,20,50,1\n                      type: number\n                  type: object\n                items:\n                  description: contains list of mailboxes you want to edit the ratelimit of\n                  type: object\n              type: object\n      summary: Edit mailbox ratelimits\n  /api/v1/edit/rl-domain/:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: success\n                    - log:\n                        - ratelimit\n                        - edit\n                        - domain\n                        - object:\n                            - domain.tld\n                          rl_value: \"50\"\n                          rl_frame: \"h\"\n                      msg:\n                        - rl_saved\n                        - domain.tld\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Ratelimits\n      description: >-\n        Using this endpoint you can edit the ratelimits for a certain domains.\n      operationId: Edit domain ratelimits\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  rl_value: \"10\"\n                  rl_frame: \"h\"\n                items:\n                  - domain.tld\n              properties:\n                attr:\n                  properties:\n                    rl_frame:\n                      description: contains the frame for the ratelimit h,s,m\n                      type: string\n                    rl_value:\n                      description: contains the rate for the ratelimit 10,20,50,1\n                      type: number\n                  type: object\n                items:\n                  description: contains list of domains you want to edit the ratelimit of\n                  type: object\n              type: object\n      summary: Edit domain ratelimits\n  /api/v1/get/status/containers:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    acme-mailcow:\n                      container: acme-mailcow\n                      image: \"mailcow/acme:1.63\"\n                      started_at: \"2019-12-22T21:00:08.270660275Z\"\n                      state: running\n                      type: info\n                    clamd-mailcow:\n                      container: clamd-mailcow\n                      image: \"mailcow/clamd:1.35\"\n                      started_at: \"2019-12-22T21:00:01.622856172Z\"\n                      state: running\n                      type: info\n                    dockerapi-mailcow:\n                      container: dockerapi-mailcow\n                      image: \"mailcow/dockerapi:1.36\"\n                      started_at: \"2019-12-22T20:59:59.984797808Z\"\n                      state: running\n                      type: info\n                    dovecot-mailcow:\n                      container: dovecot-mailcow\n                      image: \"mailcow/dovecot:1.104\"\n                      started_at: \"2019-12-22T21:00:08.988680259Z\"\n                      state: running\n                      type: info\n                    ipv6nat-mailcow:\n                      container: ipv6nat-mailcow\n                      image: robbertkl/ipv6nat\n                      started_at: \"2019-12-22T21:06:37.273225445Z\"\n                      state: running\n                      type: info\n                    memcached-mailcow:\n                      container: memcached-mailcow\n                      image: \"memcached:alpine\"\n                      started_at: \"2019-12-22T20:59:58.0907785Z\"\n                      state: running\n                      type: info\n                    mysql-mailcow:\n                      container: mysql-mailcow\n                      image: \"mariadb:10.3\"\n                      started_at: \"2019-12-22T21:00:02.201937528Z\"\n                      state: running\n                      type: info\n                    netfilter-mailcow:\n                      container: netfilter-mailcow\n                      image: \"mailcow/netfilter:1.31\"\n                      started_at: \"2019-12-22T21:00:09.851559297Z\"\n                      state: running\n                      type: info\n                    nginx-mailcow:\n                      container: nginx-mailcow\n                      image: \"nginx:mainline-alpine\"\n                      started_at: \"2019-12-22T21:00:12.9843038Z\"\n                      state: running\n                      type: info\n                    olefy-mailcow:\n                      container: olefy-mailcow\n                      image: \"mailcow/olefy:1.2\"\n                      started_at: \"2019-12-22T20:59:59.676259274Z\"\n                      state: running\n                      type: info\n                    php-fpm-mailcow:\n                      container: php-fpm-mailcow\n                      image: \"mailcow/phpfpm:1.55\"\n                      started_at: \"2019-12-22T21:00:00.955808957Z\"\n                      state: running\n                      type: info\n                    postfix-mailcow:\n                      container: postfix-mailcow\n                      image: \"mailcow/postfix:1.44\"\n                      started_at: \"2019-12-22T21:00:07.186717617Z\"\n                      state: running\n                      type: info\n                    redis-mailcow:\n                      container: redis-mailcow\n                      image: \"redis:5-alpine\"\n                      started_at: \"2019-12-22T20:59:56.827166834Z\"\n                      state: running\n                      type: info\n                    rspamd-mailcow:\n                      container: rspamd-mailcow\n                      image: \"mailcow/rspamd:1.56\"\n                      started_at: \"2019-12-22T21:00:12.456075355Z\"\n                      state: running\n                      type: info\n                    sogo-mailcow:\n                      container: sogo-mailcow\n                      image: \"mailcow/sogo:1.65\"\n                      started_at: \"2019-12-22T20:59:58.382274592Z\"\n                      state: running\n                      type: info\n                    unbound-mailcow:\n                      container: unbound-mailcow\n                      image: \"mailcow/unbound:1.10\"\n                      started_at: \"2019-12-22T20:59:58.760595825Z\"\n                      state: running\n                      type: info\n                    watchdog-mailcow:\n                      container: watchdog-mailcow\n                      image: \"mailcow/watchdog:1.65\"\n                      started_at: \"2019-12-22T20:59:56.028660382Z\"\n                      state: running\n                      type: info\n          description: OK\n          headers: {}\n      tags:\n        - Status\n      description: >-\n        Using this endpoint you can get the status of all containers and when\n        hey where started and a few other details.\n      operationId: Get container status\n      summary: Get container status\n  /api/v1/get/status/vmail:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    disk: /dev/mapper/mail--vg-root\n                    total: 41G\n                    type: info\n                    used: 11G\n                    used_percent: 28%\n          description: OK\n          headers: {}\n      tags:\n        - Status\n      description: >-\n        Using this endpoint you can get the status of the vmail and the amount\n        of used storage.\n      operationId: Get vmail status\n      summary: Get vmail status\n  /api/v1/get/status/version:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    version: \"2022-04\"\n          description: OK\n          headers: {}\n      tags:\n        - Status\n      description: >-\n        Using this endpoint you can get the current running release of this\n        instance.\n      operationId: Get version status\n      summary: Get version status\n  /api/v1/get/syncjobs/all/no_log:\n    get:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      authmd51: 0\n                      authmech1: PLAIN\n                      automap: 1\n                      created: \"2019-05-22 11:37:25\"\n                      custom_params: \"\"\n                      delete1: 0\n                      delete2: 0\n                      delete2duplicates: 1\n                      domain2: \"\"\n                      enc1: TLS\n                      exclude: (?i)spam|(?i)junk\n                      host1: imap.server.tld\n                      id: 1\n                      is_running: 0\n                      last_run: \"2019-05-22 11:40:02\"\n                      log: \"\"\n                      maxage: 0\n                      maxbytespersecond: \"0\"\n                      mins_interval: \"20\"\n                      modified: \"2019-05-22 11:40:02\"\n                      port1: 993\n                      regextrans2: \"\"\n                      skipcrossduplicates: 0\n                      subfolder2: External\n                      subscribeall: 1\n                      timeout1: 600\n                      timeout2: 600\n                      user1: username\n                      user2: mailbox@domain.tld\n          description: OK\n          headers: {}\n      tags:\n        - Sync jobs\n      description: You can list all syn jobs existing in system.\n      operationId: Get sync jobs\n      summary: Get sync jobs\n  \"/api/v1/get/tls-policy-map/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - parameters: \"\"\n                      active: \"1\"\n                      created: \"2019-10-03 08:42:12\"\n                      dest: mailcow.tld\n                      id: 1\n                      modified: null\n                      policy: encrypt\n          description: OK\n          headers: {}\n      tags:\n        - Outgoing TLS Policy Map Overrides\n      description: Using this endpoint you can get all TLS policy map override maps.\n      operationId: Get TLS Policy Map\n      summary: Get TLS Policy Map\n  \"/api/v1/get/transport/{id}\":\n    get:\n      parameters:\n        - description: id of entry you want to get\n          example: all\n          in: path\n          name: id\n          required: true\n          schema:\n            enum:\n              - all\n              - \"1\"\n              - \"2\"\n              - \"5\"\n              - \"10\"\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      destination: example.org\n                      id: 1\n                      lookup_mx: \"0\"\n                      nexthop: \"host:25\"\n                      password: supersecurepw\n                      password_short: sup...\n                      username: testuser\n          description: OK\n          headers: {}\n      tags:\n        - Routing\n      description: Using this endpoint you can get all Transport Maps.\n      operationId: Get Transport Maps\n      summary: Get Transport Maps\n  /api/v1/edit/spam-score/:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: success\n                      log:\n                        - mailbox\n                        - edit\n                        - spam_score\n                        - username:\n                            - info@domain.tld\n                          spam_score: \"8,15\"\n                      msg:\n                        - mailbox_modified\n                        - info@domain.tld\n              schema:\n                properties:\n                  log:\n                    description: contains request object\n                    items: {}\n                    type: array\n                  msg:\n                    items: {}\n                    type: array\n                  type:\n                    enum:\n                      - success\n                      - danger\n                      - error\n                    type: string\n                type: object\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: >-\n        Using this endpoint you can edit the spam filter score for a certain mailbox.\n      operationId: Edit mailbox spam filter score\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                - items:\n                    - info@domain.tld\n                  attr:\n                    spam_score: \"8,15\"\n      summary: Edit mailbox spam filter score\n  \"/api/v1/get/mailbox/all/{domain}\":\n    get:\n      parameters:\n        - description: name of domain\n          in: path\n          name: domain\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - active: \"1\"\n                      attributes:\n                        force_pw_update: \"0\"\n                        mailbox_format: \"maildir:\"\n                        quarantine_notification: never\n                        sogo_access: \"1\"\n                        tls_enforce_in: \"0\"\n                        tls_enforce_out: \"0\"\n                      custom_attributes: {}\n                      domain: domain3.tld\n                      is_relayed: 0\n                      local_part: info\n                      max_new_quota: 10737418240\n                      messages: 0\n                      name: Full name\n                      percent_class: success\n                      percent_in_use: 0\n                      quota: 3221225472\n                      quota_used: 0\n                      rl: false\n                      spam_aliases: 0\n                      username: info@domain3.tld\n                      tags: [\"tag1\", \"tag2\"]\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: You can list all mailboxes existing in system for a specific domain.\n      operationId: Get mailboxes of a domain\n      summary: Get mailboxes of a domain\n  /api/v1/edit/cors:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: \"success\"\n                      log: [\"cors\", \"edit\", {\"allowed_origins\": [\"*\", \"mail.mailcow.tld\"], \"allowed_methods\": [\"POST\", \"GET\", \"DELETE\", \"PUT\"]}]\n                      msg: \"cors_headers_edited\"\n          description: OK\n          headers: { }\n      tags:\n        - Cross-Origin Resource Sharing (CORS)\n      description: >-\n        This endpoint allows you to manage Cross-Origin Resource Sharing (CORS) settings for the API.\n        CORS is a security feature implemented by web browsers to prevent unauthorized cross-origin requests.\n        By editing the CORS settings, you can specify which domains and which methods are permitted to access the API resources from outside the mailcow domain.\n      operationId: Edit Cross-Origin Resource Sharing (CORS) settings\n      requestBody:\n        content:\n          application/json:\n            schema:\n              example:\n                attr:\n                  allowed_origins: [\"*\", \"mail.mailcow.tld\"]\n                  allowed_methods: [\"POST\", \"GET\", \"DELETE\", \"PUT\"]\n              properties:\n                attr:\n                  type: object\n                  properties:\n                    allowed_origins:\n                      type: array\n                      items:\n                        type: string\n                    allowed_methods:\n                      type: array\n                      items:\n                        type: string\n      summary: Edit Cross-Origin Resource Sharing (CORS) settings\n  \"/api/v1/get/spam-score/{mailbox}\":\n    get:\n      parameters:\n        - description: name of mailbox or empty for current user - admin user will retrieve the global spam filter score\n          in: path\n          name: mailbox\n          required: true\n          schema:\n            type: string\n        - description: e.g. api-key-string\n          example: api-key-string\n          in: header\n          name: X-API-Key\n          required: false\n          schema:\n            type: string\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    spam_score: \"8,15\"\n          description: OK\n          headers: {}\n      tags:\n        - Mailboxes\n      description: >-\n        Using this endpoint you can get the global spam filter score or the spam filter score of a certain mailbox.\n      operationId: Get mailbox or global spam filter score\n      summary: Get mailbox or global spam filter score\n  /api/v1/edit/identity-provider:\n    post:\n      responses:\n        \"401\":\n          $ref: \"#/components/responses/Unauthorized\"\n        \"200\":\n          content:\n            application/json:\n              examples:\n                response:\n                  value:\n                    - type: \"success\"\n                      log:\n                        - \"identity_provider\"\n                        - \"edit\"\n                        - authsource: \"keycloak\"\n                          server_url: \"https://auth.mailcow.tld\"\n                          realm: \"mailcow\"\n                          client_id: \"mailcow_client\"\n                          client_secret: \"*\"\n                          redirect_url: \"https://mail.mailcow.tld\"\n                          redirect_url_extra: [\"https://extramail.mailcow.tld\"]\n                          version: \"26.1.3\"\n                          default_template: \"Default\"\n                          mappers:\n                            - \"small_mbox\"\n                            - \"medium_mbox\"\n                          templates:\n                            - \"small\"\n                            - \"medium\"\n                          ignore_ssl_error: true\n                          mailpassword_flow: true\n                          periodic_sync: true\n                          import_users: true\n                          sync_interval: 30\n                      msg:\n                        - \"object_modified\"\n                        - \"\"\n          description: OK\n          headers: { }\n      tags:\n        - Identity Provider\n      description: >-\n        Configure an external Identity Provider to use as user authentication\n      operationId: Edit external Identity Provider settings\n      requestBody:\n        content:\n          application/json:\n            schema:\n              properties:\n                items:\n                  type: array\n                  default: [\"identity-provider\"]\n                attr:\n                  type: object\n                  properties:\n                    authsource:\n                      description: Specifies the type of the Identity Provider\n                      type: string\n                      enum: [ldap, keycloak, generic-oidc]\n                    server_url:\n                      description: The base URL of your Keycloak server. Required if `authsource` is keycloak.\n                      type: string\n                    realm:\n                      description: The Keycloak realm where the mailcow client is configured. Required if `authsource` is keycloak.\n                      type: string\n                    client_id:\n                      description: The Client ID assigned to mailcow Client in OIDC Provider. Required if `authsource` is keycloak or generic-oidc.\n                      type: string\n                    client_secret:\n                      description: The Client Secret assigned to mailcow Client in OIDC Provider. Required if `authsource` is keycloak or generic-oidc.\n                      type: string\n                    redirect_url:\n                      description: The redirect URL that OIDC Provider will use after authentication. Required if `authsource` is keycloak or generic-oidc.\n                      type: string\n                    redirect_url_extra:\n                      description: Additional redirect URLs that OIDC Provider can use after authentication if valid.\n                      type: array\n                    version:\n                      description: Specifies the Keycloak version. Required if `authsource` is keycloak.\n                      type: string\n                    default_template:\n                      description: (Optional) If no matching Attribute Mapping exists for a User, the default template will be used for creating the mailbox, but not for updating the mailbox.\n                      type: string\n                    mappers:\n                      description: (Optional) Attribute values used to match a mailbox template. Each element corresponds to the respective index in the templates array (i.e., the first element matches the first element of templates, the second matches the second, and so on).\n                      type: array\n                    templates:\n                      description: (Optional) Defines the mailbox templates to be assigned. Each element corresponds to the respective index in the `mappers` array.\n                      type: array\n                    ignore_ssl_error:\n                      description: If enabled, SSL certificate validation is bypassed\n                      type: boolean\n                      default: false\n                    mailpassword_flow:\n                      description: If enabled, mailcow will attempt to validate user credentials using the Keycloak Admin REST API instead of relying solely on the Authorization Code Flow.\n                      type: boolean\n                      default: false\n                    periodic_sync:\n                      description: If enabled, mailcow periodically performs a full sync of all users from Keycloak or LDAP.\n                      type: boolean\n                      default: false\n                    import_users:\n                      description: If enabled, new users are automatically imported from Keycloak or LDAP into mailcow.\n                      type: boolean\n                      default: false\n                    sync_interval:\n                      description: Defines the time interval (in minutes) for periodic synchronization and user imports.\n                      type: number\n                      default: 15\n                    host:\n                      description: The address of your LDAP server. You can provide a single hostname or a comma-separated list of hosts for fallback in case the primary server is unreachable. Required if `authsource` is ldap.\n                      type: string\n                    port:\n                      description: The port used to connect to the LDAP server. Required if `authsource` is ldap.\n                      type: string\n                    use_ssl:\n                      description: enable LDAPS connection. If Port is set to 389 it will be overriden to 636.\n                      type: boolean\n                      default: false\n                    use_tls:\n                      description: enable TLS connection. TLS is recommended over SSL. SSL Ports cannot be used.\n                      type: boolean\n                      default: false\n                    basedn:\n                      description: The Distinguished Name (DN) from which searches will be performed. Required if `authsource` is ldap.\n                      type: string\n                    username_field:\n                      description: The LDAP attribute used to identify users during authentication. Required if `authsource` is ldap.\n                      type: string\n                      default: mail\n                    filter:\n                      description: An optional LDAP search filter to refine which users can authenticate.\n                      type: string\n                    attribute_field:\n                      description: Specifies an LDAP attribute that holds a specific value which can be mapped to a mailbox template using the Attribute Mapping section. Required if `authsource` is ldap.\n                      type: string\n                    binddn:\n                      description: The Distinguished Name (DN) of the LDAP user that will be used to authenticate and perform LDAP searches. This account should have sufficient permissions to read the required attributes. Required if `authsource` is ldap.\n                      type: string\n                    bindpass:\n                      description: The password for the Bind DN user. It is required for authentication when connecting to the LDAP server. Required if `authsource` is ldap.\n                      type: string\n                    authorize_url:\n                      description: The OIDC provider's authorization server URL. Required if `authsource` is generic-oidc.\n                      type: string\n                    token_url:\n                      description: The OIDC provider's token server URL. Required if `authsource` is generic-oidc.\n                      type: string\n                    userinfo_url:\n                      description: The OIDC provider's user info server URL. Required if `authsource` is generic-oidc.\n                      type: string\n                    client_scopes:\n                      description: Specifies the OIDC scopes requested during authentication.\n                      type: string\n                      default: \"openid profile email mailcow_template\"\n            examples:\n              keycloak:\n                value:\n                  items:\n                    - \"identity-provider\"\n                  attr:\n                    authsource: \"keycloak\"\n                    server_url: \"https://auth.mailcow.tld\"\n                    realm: \"mailcow\"\n                    client_id: \"mailcow_client\"\n                    client_secret: \"Xy7GdPqvJ9m3R8sT2LkVZ5W1oNbCaYQf\"\n                    redirect_url: \"https://mail.mailcow.tld\"\n                    redirect_url_extra: [\"https://extramail.mailcow.tld\"]\n                    version: \"26.1.3\"\n                    default_template: \"Default\"\n                    mappers: [\"small_mbox\", \"medium_mbox\"]\n                    templates: [\"small\", \"medium\"]\n                    ignore_ssl_error: true\n                    mailpassword_flow: true\n                    periodic_sync: true\n                    import_users: true\n                    sync_interval: 30\n              ldap:\n                value:\n                  items:\n                    - \"identity-provider\"\n                  attr:\n                    authsource: \"ldap\"\n                    host: \"127.0.0.1\"\n                    port: \"389\"\n                    use_ssl: false\n                    use_tls: false\n                    ignore_ssl_error: false\n                    basedn: \"DC=mailcow,DC=local\"\n                    username_field: \"mail\"\n                    filter: \"(memberOf:1.2.840.113556.1.4.1941:=DC=mailcow,DC=local)\"\n                    attribute_field: \"othermailbox\"\n                    binddn: \"CN=LDAP Read Only,CN=Users,DC=mailcow,DC=local\"\n                    bindpass: \"moohoo\"\n                    default_template: \"Default\"\n                    mappers: [\"small_mbox\", \"medium_mbox\"]\n                    templates: [\"small\", \"medium\"]\n                    periodic_sync: true\n                    import_users: true\n                    sync_interval: 30\n              generic-oidc:\n                value:\n                  items:\n                    - \"identity-provider\"\n                  attr:\n                    authsource: \"generic-oidc\"\n                    authorize_url: \"https://auth.mailcow.tld/application/o/authorize/\"\n                    token_url: \"https://auth.mailcow.tld/application/o/token/\"\n                    userinfo_url: \"https://auth.mailcow.tld/application/o/userinfo/\"\n                    client_id: \"mailcow_client\"\n                    client_secret: \"Xy7GdPqvJ9m3R8sT2LkVZ5W1oNbCaYQf\"\n                    redirect_url: \"https://mail.mailcow.tld\"\n                    redirect_url_extra: [\"https://extramail.mailcow.tld\"]\n                    client_scopes: \"openid profile email mailcow_template\"\n                    default_template: \"Default\"\n                    mappers: [\"small_mbox\", \"medium_mbox\"]\n                    templates: [\"small\", \"medium\"]\n                    ignore_ssl_error: true\n      summary: Edit external Identity Provider\n\ntags:\n  - name: Domains\n    description: You can create antispam whitelist and blacklist policies\n  - name: Domain antispam policies\n    description: You can edit the Domain Antispam policies\n  - name: Mailboxes\n    description: You can manage mailboxes\n  - name: Aliases\n    description: You can manage aliases\n  - name: Sync jobs\n    description: Using Syncjobs you can sync your mails with other email servers\n  - name: Fordwarding Hosts\n    description: Forwarding Hosts enable you to send mail using a relay\n  - name: Logs\n    description: Get all mailcow system logs\n  - name: Queue Manager\n    description: Manage the postfix mail queue\n  - name: Quarantine\n    description: Check what emails went to quarantine\n  - name: Fail2Ban\n    description: Manage the Netfilter fail2ban options\n  - name: DKIM\n    description: Manage DKIM keys\n  - name: Domain admin\n    description: Create or udpdate domain admin users\n  - name: Single Sign-On\n    description: Issue tokens for users\n  - name: Address Rewriting\n    description: Create BCC maps or recipient maps\n  - name: Outgoing TLS Policy Map Overrides\n    description: Force global TLS policys\n  - name: oAuth Clients\n    description: Use mailcow as a oAuth server\n  - name: Routing\n    description: Define your own email routes\n  - name: Resources\n    description: Manage ressources\n  - name: App Passwords\n    description: Create mailbox app passwords\n  - name: Status\n    description: Get the status of your cow\n  - name: Ratelimits\n    description: Edit domain ratelimits\n  - name: Cross-Origin Resource Sharing (CORS)\n    description: Manage Cross-Origin Resource Sharing (CORS) settings\n  - name: Identity Provider\n    description: Manage external Identity Provider settings\n"
  },
  {
    "path": "data/web/api/swagger-initializer.js",
    "content": "window.onload = function() {\n  // Begin Swagger UI call region\n  window.ui = SwaggerUIBundle({\n    urls: [{url: \"/api/openapi.yaml\", name: \"mailcow API\"}],\n    dom_id: '#swagger-ui',\n    deepLinking: true,\n    presets: [\n      SwaggerUIBundle.presets.apis,\n      SwaggerUIStandalonePreset\n    ],\n    plugins: [\n      SwaggerUIBundle.plugins.DownloadUrl\n    ],\n    layout: \"StandaloneLayout\"\n  });\n  // End Swagger UI call region\n\n};\n"
  },
  {
    "path": "data/web/api/swagger-ui-bundle.js",
    "content": "/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,(()=>(()=>{var e={17967:(e,t)=>{\"use strict\";t.N=void 0;var n=/^([^\\w]*)(javascript|data|vbscript)/im,r=/&#(\\w+)(^\\w|;)?/g,o=/&(newline|tab);/gi,s=/[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim,i=/^.+(:|&colon;)/gim,a=[\".\",\"/\"];t.N=function(e){var t,l=(t=e||\"\",t.replace(r,(function(e,t){return String.fromCharCode(t)}))).replace(o,\"\").replace(s,\"\").trim();if(!l)return\"about:blank\";if(function(e){return a.indexOf(e[0])>-1}(l))return l;var c=l.match(i);if(!c)return l;var u=c[0];return n.test(u)?\"about:blank\":l}},53795:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>P});var r=n(23101),o=n.n(r),s=n(61125),i=n.n(s),a=n(11882),l=n.n(a),c=n(97606),u=n.n(c),p=n(67294),h=n(43393);function f(e){return f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},f(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function y(e){return y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},y(e)}function v(e,t){return v=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},v(e,t)}function b(e,t){return!t||\"object\"!=typeof t&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}var w={};function E(e,t,n){return function(e){return null==e}(e)?n:function(e){return null!==e&&\"object\"===f(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.has}(e)?e.has(t)?e.get(t):n:hasOwnProperty.call(e,t)?e[t]:n}function x(e,t,n){for(var r=0;r!==t.length;)if((e=E(e,t[r++],w))===w)return n;return e}function S(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=function(e,t){return function(n){if(\"string\"==typeof n)return(0,h.is)(t[n],e[n]);if(Array.isArray(n))return(0,h.is)(x(t,n),x(e,n));throw new TypeError(\"Invalid key: expected Array or string: \"+n)}}(t,n),o=e||Object.keys(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?g(n,!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g(n).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},n,{},t));return o.every(r)}const _=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),b(this,y(t).apply(this,arguments))}var n,r,o;return 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&&v(e,t)}(t,e),n=t,r=[{key:\"shouldComponentUpdate\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!S(this.updateOnProps,this.props,e,\"updateOnProps\")||!S(this.updateOnStates,this.state,t,\"updateOnStates\")}}],r&&d(n.prototype,r),o&&d(n,o),t}(p.Component);var j=n(23930),O=n.n(j),k=n(45697),A=n.n(k);const C=e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}};class P extends _{constructor(){super(...arguments),i()(this,\"getModelName\",(e=>-1!==l()(e).call(e,\"#/definitions/\")?C(e.replace(/^.*#\\/definitions\\//,\"\")):-1!==l()(e).call(e,\"#/components/schemas/\")?C(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):void 0)),i()(this,\"getRefSchema\",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:r,schema:s,required:i,name:a,isRef:l,specPath:c,displayName:u,includeReadOnly:h,includeWriteOnly:f}=this.props;const d=e(\"ObjectModel\"),m=e(\"ArrayModel\"),g=e(\"PrimitiveModel\");let y=\"object\",v=s&&s.get(\"$$ref\");if(!a&&v&&(a=this.getModelName(v)),!s&&v&&(s=this.getRefSchema(a)),!s)return p.createElement(\"span\",{className:\"model model-title\"},p.createElement(\"span\",{className:\"model-title__text\"},u||a),p.createElement(\"img\",{src:n(2517),height:\"20px\",width:\"20px\"}));const b=r.isOAS3()&&s.get(\"deprecated\");switch(l=void 0!==l?l:!!v,y=s&&s.get(\"type\")||y,y){case\"object\":return p.createElement(d,o()({className:\"object\"},this.props,{specPath:c,getConfigs:t,schema:s,name:a,deprecated:b,isRef:l,includeReadOnly:h,includeWriteOnly:f}));case\"array\":return p.createElement(m,o()({className:\"array\"},this.props,{getConfigs:t,schema:s,name:a,deprecated:b,required:i,includeReadOnly:h,includeWriteOnly:f}));default:return p.createElement(g,o()({},this.props,{getComponent:e,getConfigs:t,schema:s,name:a,deprecated:b,required:i}))}}}i()(P,\"propTypes\",{schema:u()(O()).isRequired,getComponent:A().func.isRequired,getConfigs:A().func.isRequired,specSelectors:A().object.isRequired,name:A().string,displayName:A().string,isRef:A().bool,required:A().bool,expandDepth:A().number,depth:A().number,specPath:O().list.isRequired,includeReadOnly:A().bool,includeWriteOnly:A().bool})},5623:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>h});var r=n(61125),o=n.n(r),s=n(28222),i=n.n(s),a=n(67294),l=n(84564),c=n.n(l),u=n(90242),p=n(27504);class h extends a.Component{constructor(e,t){super(e,t),o()(this,\"getDefinitionUrl\",(()=>{let{specSelectors:e}=this.props;return new(c())(e.url(),p.Z.location).toString()}));let{getConfigs:n}=e,{validatorUrl:r}=n();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===r?\"https://validator.swagger.io/validator\":r}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:n}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===n?\"https://validator.swagger.io/validator\":n})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),n=(0,u.Nm)(this.state.validatorUrl);return\"object\"==typeof t&&i()(t).length?null:this.state.url&&(0,u.hW)(this.state.validatorUrl)&&(0,u.hW)(this.state.url)?a.createElement(\"span\",{className:\"float-right\"},a.createElement(\"a\",{target:\"_blank\",rel:\"noopener noreferrer\",href:`${n}/debug?url=${encodeURIComponent(this.state.url)}`},a.createElement(f,{src:`${n}?url=${encodeURIComponent(this.state.url)}`,alt:\"Online validator badge\"}))):null}}class f extends a.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?a.createElement(\"img\",{alt:\"Error\"}):this.state.loaded?a.createElement(\"img\",{src:this.props.src,alt:this.props.alt}):null}}},4599:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>ye,s:()=>ve});var r=n(67294),o=n(89927);function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function i(e,t){for(var n=e.length-1;n>=0;n--)!0===t(e[n])&&e.splice(n,1)}function a(e){throw new Error(\"Unhandled case for value: '\".concat(e,\"'\"))}var l=function(){function e(e){void 0===e&&(e={}),this.tagName=\"\",this.attrs={},this.innerHTML=\"\",this.whitespaceRegex=/\\s+/,this.tagName=e.tagName||\"\",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||\"\"}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||\"\"},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr(\"class\",e)},e.prototype.addClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);t=i.shift();)-1===s(o,t)&&o.push(t);return this.getAttrs().class=o.join(\" \"),this},e.prototype.removeClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);o.length&&(t=i.shift());){var a=s(o,t);-1!==a&&o.splice(a,1)}return this.getAttrs().class=o.join(\" \"),this},e.prototype.getClass=function(){return this.getAttrs().class||\"\"},e.prototype.hasClass=function(e){return-1!==(\" \"+this.getClass()+\" \").indexOf(\" \"+e+\" \")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||\"\"},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return[\"<\",e,t=t?\" \"+t:\"\",\">\",this.getInnerHtml(),\"</\",e,\">\"].join(\"\")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return\"\";var e=this.getAttrs(),t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+'=\"'+e[n]+'\"');return t.join(\" \")},e}();var c=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className=\"\",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||\"\"}return e.prototype.build=function(e){return new l({tagName:\"a\",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},n=this.createCssClass(e);return n&&(t.class=n),this.newWindow&&(t.target=\"_blank\",t.rel=\"noopener noreferrer\"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var n=[t],r=e.getCssClassSuffixes(),o=0,s=r.length;o<s;o++)n.push(t+\"-\"+r[o]);return n.join(\" \")}return\"\"},e.prototype.processAnchorText=function(e){return e=this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var n=t.length,r=t.location;return\"smart\"===r?function(e,t,n){var r,o;null==n?(n=\"&hellip;\",o=3,r=8):(o=n.length,r=n.length);var s=function(e){var t=\"\";return e.scheme&&e.host&&(t+=e.scheme+\"://\"),e.host&&(t+=e.host),e.path&&(t+=\"/\"+e.path),e.query&&(t+=\"?\"+e.query),e.fragment&&(t+=\"#\"+e.fragment),t},i=function(e,t){var r=t/2,o=Math.ceil(r),s=-1*Math.floor(r),i=\"\";return s<0&&(i=e.substr(s)),e.substr(0,o)+n+i};if(e.length<=t)return e;var a=t-o,l=function(e){var t={},n=e,r=n.match(/^([a-z]+):\\/\\//i);return r&&(t.scheme=r[1],n=n.substr(r[0].length)),(r=n.match(/^(.*?)(?=(\\?|#|\\/|$))/i))&&(t.host=r[1],n=n.substr(r[0].length)),(r=n.match(/^\\/(.*?)(?=(\\?|#|$))/i))&&(t.path=r[1],n=n.substr(r[0].length)),(r=n.match(/^\\?(.*?)(?=(#|$))/i))&&(t.query=r[1],n=n.substr(r[0].length)),(r=n.match(/^#(.*?)$/i))&&(t.fragment=r[1]),t}(e);if(l.query){var c=l.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);c&&(l.query=l.query.substr(0,c[1].length),e=s(l))}if(e.length<=t)return e;if(l.host&&(l.host=l.host.replace(/^www\\./,\"\"),e=s(l)),e.length<=t)return e;var u=\"\";if(l.host&&(u+=l.host),u.length>=a)return l.host.length==t?(l.host.substr(0,t-o)+n).substr(0,a+r):i(u,a).substr(0,a+r);var p=\"\";if(l.path&&(p+=\"/\"+l.path),l.query&&(p+=\"?\"+l.query),p){if((u+p).length>=a)return(u+p).length==t?(u+p).substr(0,t):(u+i(p,a-u.length)).substr(0,a+r);u+=p}if(l.fragment){var h=\"#\"+l.fragment;if((u+h).length>=a)return(u+h).length==t?(u+h).substr(0,t):(u+i(h,a-u.length)).substr(0,a+r);u+=h}if(l.scheme&&l.host){var f=l.scheme+\"://\";if((u+f).length<a)return(f+u).substr(0,t)}if(u.length<=t)return u;var d=\"\";return a>0&&(d=u.substr(-1*Math.floor(a/2))),(u.substr(0,Math.ceil(a/2))+n+d).substr(0,a+r)}(e,n):\"middle\"===r?function(e,t,n){if(e.length<=t)return e;var r,o;null==n?(n=\"&hellip;\",r=8,o=3):(r=n.length,o=n.length);var s=t-o,i=\"\";return s>0&&(i=e.substr(-1*Math.floor(s/2))),(e.substr(0,Math.ceil(s/2))+n+i).substr(0,s+r)}(e,n):function(e,t,n){return function(e,t,n){var r;return e.length>t&&(null==n?(n=\"&hellip;\",r=3):r=n.length,e=e.substring(0,t-r)+n),e}(e,t,n)}(e,n)},e}(),u=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText=\"\",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},p(e,t)};function h(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function n(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var f=function(){return f=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},f.apply(this,arguments)};Object.create;Object.create;var d,m=function(e){function t(t){var n=e.call(this,t)||this;return n.email=\"\",n.email=t.email,n}return h(t,e),t.prototype.getType=function(){return\"email\"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return\"mailto:\"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(u),g=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"\",n.hashtag=\"\",n.serviceName=t.serviceName,n.hashtag=t.hashtag,n}return h(t,e),t.prototype.getType=function(){return\"hashtag\"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case\"twitter\":return\"https://twitter.com/hashtag/\"+t;case\"facebook\":return\"https://www.facebook.com/hashtag/\"+t;case\"instagram\":return\"https://instagram.com/explore/tags/\"+t;case\"tiktok\":return\"https://www.tiktok.com/tag/\"+t;default:throw new Error(\"Unknown service name to point hashtag to: \"+e)}},t.prototype.getAnchorText=function(){return\"#\"+this.hashtag},t}(u),y=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"twitter\",n.mention=\"\",n.mention=t.mention,n.serviceName=t.serviceName,n}return h(t,e),t.prototype.getType=function(){return\"mention\"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case\"twitter\":return\"https://twitter.com/\"+this.mention;case\"instagram\":return\"https://instagram.com/\"+this.mention;case\"soundcloud\":return\"https://soundcloud.com/\"+this.mention;case\"tiktok\":return\"https://www.tiktok.com/@\"+this.mention;default:throw new Error(\"Unknown service name to point mention to: \"+this.serviceName)}},t.prototype.getAnchorText=function(){return\"@\"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),n=this.getServiceName();return n&&t.push(n),t},t}(u),v=function(e){function t(t){var n=e.call(this,t)||this;return n.number=\"\",n.plusSign=!1,n.number=t.number,n.plusSign=t.plusSign,n}return h(t,e),t.prototype.getType=function(){return\"phone\"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return\"tel:\"+(this.plusSign?\"+\":\"\")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(u),b=function(e){function t(t){var n=e.call(this,t)||this;return n.url=\"\",n.urlMatchType=\"scheme\",n.protocolUrlMatch=!1,n.protocolRelativeMatch=!1,n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.schemePrefixRegex=/^(https?:\\/\\/)?/i,n.wwwPrefixRegex=/^(https?:\\/\\/)?(www\\.)?/i,n.protocolRelativeRegex=/^\\/\\//,n.protocolPrepended=!1,n.urlMatchType=t.urlMatchType,n.url=t.url,n.protocolUrlMatch=t.protocolUrlMatch,n.protocolRelativeMatch=t.protocolRelativeMatch,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return h(t,e),t.prototype.getType=function(){return\"url\"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url=\"http://\"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&amp;/g,\"&\")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,\"\")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,\"$1\")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,\"\")},t.prototype.removeTrailingSlash=function(e){return\"/\"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,\"&quot;\").replace(/%26/gi,\"&amp;\").replace(/%27/gi,\"&#39;\").replace(/%3C/gi,\"&lt;\").replace(/%3E/gi,\"&gt;\");try{return decodeURIComponent(t)}catch(e){return t}},t}(u),w=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},E=/[A-Za-z]/,x=/[\\d]/,S=/[\\D]/,_=/\\s/,j=/['\"]/,O=/[\\x00-\\x1F\\x7F]/,k=/A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/.source,A=k+/\\u2700-\\u27bf\\udde6-\\uddff\\ud800-\\udbff\\udc00-\\udfff\\ufe0e\\ufe0f\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ud83c\\udffb-\\udfff\\u200d\\u3299\\u3297\\u303d\\u3030\\u24c2\\ud83c\\udd70-\\udd71\\udd7e-\\udd7f\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01-\\ude02\\ude1a\\ude2f\\ude32-\\ude3a\\ude50-\\ude51\\u203c\\u2049\\u25aa-\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u00a9\\u00ae\\u2122\\u2139\\udc04\\u2600-\\u26FF\\u2b05\\u2b06\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u231a\\u231b\\u2328\\u23cf\\u23e9-\\u23f3\\u23f8-\\u23fa\\udccf\\u2935\\u2934\\u2190-\\u21ff/.source+/\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/.source,C=/0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/.source,P=A+C,N=A+C,I=new RegExp(\"[\".concat(N,\"]\")),T=\"(?:[\"+C+\"]{1,3}\\\\.){3}[\"+C+\"]{1,3}\",R=\"[\"+N+\"](?:[\"+N+\"\\\\-_]{0,61}[\"+N+\"])?\",M=function(e){return\"(?=(\"+R+\"))\\\\\"+e},D=function(e){return\"(?:\"+M(e)+\"(?:\\\\.\"+M(e+1)+\"){0,126}|\"+T+\")\"},F=(new RegExp(\"[\"+N+\".\\\\-]*[\"+N+\"\\\\-]\"),I),L=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,B=new RegExp(\"[\".concat(N,\"!#$%&'*+/=?^_`{|}~-]\")),$=new RegExp(\"^\".concat(L.source,\"$\")),q=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=B,t.strictTldRegex=$,t}return h(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,n=this.localPartCharRegex,r=this.strictTldRegex,o=[],s=e.length,i=new U,l={m:\"a\",a:\"i\",i:\"l\",l:\"t\",t:\"o\",o:\":\"},c=0,u=0,p=i;c<s;){var h=e.charAt(c);switch(u){case 0:d(h);break;case 1:g(e.charAt(c-1),h);break;case 2:y(h);break;case 3:v(h);break;case 4:b(h);break;case 5:w(h);break;case 6:E(h);break;case 7:x(h);break;default:a(u)}c++}return j(),o;function d(e){\"m\"===e?S(1):n.test(e)&&S()}function g(e,t){\":\"===e?n.test(t)?(u=2,p=new U(f(f({},p),{hasMailtoPrefix:!0}))):_():l[e]===t||(n.test(t)?u=2:\".\"===t?u=3:\"@\"===t?u=4:_())}function y(e){\".\"===e?u=3:\"@\"===e?u=4:n.test(e)||_()}function v(e){\".\"===e||\"@\"===e?_():n.test(e)?u=2:_()}function b(e){F.test(e)?u=5:_()}function w(e){\".\"===e?u=7:\"-\"===e?u=6:F.test(e)||j()}function E(e){\"-\"===e||\".\"===e?j():F.test(e)?u=5:j()}function x(e){\".\"===e||\"-\"===e?j():F.test(e)?(u=5,p=new U(f(f({},p),{hasDomainDot:!0}))):j()}function S(e){void 0===e&&(e=2),u=e,p=new U({idx:c})}function _(){u=0,p=i}function j(){if(p.hasDomainDot){var n=e.slice(p.idx,c);/[-.]$/.test(n)&&(n=n.slice(0,-1));var s=p.hasMailtoPrefix?n.slice(7):n;(function(e){var t=e.split(\".\").pop()||\"\",n=t.toLowerCase();return r.test(n)})(s)&&o.push(new m({tagBuilder:t,matchedText:n,offset:p.idx,email:s}))}_()}},t}(w),U=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},z=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split(\"://\")[1]),t.split(\"/\")[0].indexOf(\"..\")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),n=t&&t[0].toLowerCase();return\"javascript:\"!==n&&\"vbscript:\"!==n},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf(\".\"))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&(!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(\":[^\\\\s]*?[\"+k+\"]\"),e.ipRegex=/[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/,e}(),V=(d=new RegExp(\"[/?#](?:[\"+N+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]{}?!:,.;^✓]*[\"+N+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]{}✓])?\"),new RegExp([\"(?:\",\"(\",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/.source,D(2),\")\",\"|\",\"(\",\"(//)?\",/(?:www\\.)/.source,D(6),\")\",\"|\",\"(\",\"(//)?\",D(10)+\"\\\\.\",L.source,\"(?![-\"+P+\"])\",\")\",\")\",\"(?::[0-9]+)?\",\"(?:\"+d.source+\")?\"].join(\"\"),\"gi\")),W=new RegExp(\"[\"+N+\"]\"),J=function(e){function t(t){var n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=V,n.wordCharRegExp=W,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return h(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.stripPrefix,o=this.stripTrailingSlash,s=this.decodePercentEncoding,i=this.tagBuilder,a=[],l=function(){var n=t[0],l=t[1],u=t[4],p=t[5],h=t[9],f=t.index,d=p||h,m=e.charAt(f-1);if(!z.isValid(n,l))return\"continue\";if(f>0&&\"@\"===m)return\"continue\";if(f>0&&d&&c.wordCharRegExp.test(m))return\"continue\";if(/\\?$/.test(n)&&(n=n.substr(0,n.length-1)),c.matchHasUnbalancedClosingParen(n))n=n.substr(0,n.length-1);else{var g=c.matchHasInvalidCharAfterTld(n,l);g>-1&&(n=n.substr(0,g))}var y=[\"http://\",\"https://\"].find((function(e){return!!l&&-1!==l.indexOf(e)}));if(y){var v=n.indexOf(y);n=n.substr(v),l=l.substr(v),f+=v}var w=l?\"scheme\":u?\"www\":\"tld\",E=!!l;a.push(new b({tagBuilder:i,matchedText:n,offset:f,urlMatchType:w,url:n,protocolUrlMatch:E,protocolRelativeMatch:!!d,stripPrefix:r,stripTrailingSlash:o,decodePercentEncoding:s}))},c=this;null!==(t=n.exec(e));)l();return a},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,n=e.charAt(e.length-1);if(\")\"===n)t=\"(\";else if(\"]\"===n)t=\"[\";else{if(\"}\"!==n)return!1;t=\"{\"}for(var r=0,o=0,s=e.length-1;o<s;o++){var i=e.charAt(o);i===t?r++:i===n&&(r=Math.max(r-1,0))}return 0===r},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var n=0;t&&(n=e.indexOf(\":\"),e=e.slice(n));var r=new RegExp(\"^((.?//)?[-.\"+N+\"]*[-\"+N+\"]\\\\.[-\"+N+\"]+)\").exec(e);return null===r?-1:(n+=r[1].length,e=e.slice(r[1].length),/^[^-.A-Za-z0-9:\\/?#]/.test(e)?n:-1)},t}(w),K=new RegExp(\"[_\".concat(N,\"]\")),H=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"twitter\",n.serviceName=t.serviceName,n}return h(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,n=this.serviceName,r=[],o=e.length,s=0,i=-1,l=0;s<o;){var c=e.charAt(s);switch(l){case 0:u(c);break;case 1:p(c);break;case 2:h(c);break;case 3:f(c);break;default:a(l)}s++}return d(),r;function u(e){\"#\"===e?(l=2,i=s):I.test(e)&&(l=1)}function p(e){I.test(e)||(l=0)}function h(e){l=K.test(e)?3:I.test(e)?1:0}function f(e){K.test(e)||(d(),i=-1,l=I.test(e)?1:0)}function d(){if(i>-1&&s-i<=140){var o=e.slice(i,s),a=new g({tagBuilder:t,matchedText:o,offset:i,serviceName:n,hashtag:o.slice(1)});r.push(a)}}},t}(w),G=[\"twitter\",\"facebook\",\"instagram\",\"tiktok\"],Z=new RegExp(\"\".concat(/(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/.source,\"|\").concat(/(0([1-9]{1}-?[1-9]\\d{3}|[1-9]{2}-?\\d{3}|[1-9]{2}\\d{1}-?\\d{2}|[1-9]{2}\\d{2}-?\\d{1})-?\\d{4}|0[789]0-?\\d{4}-?\\d{4}|050-?\\d{4}-?\\d{4})/.source),\"g\"),Y=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Z,t}return h(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.tagBuilder,o=[];null!==(t=n.exec(e));){var s=t[0],i=s.replace(/[^0-9,;#]/g,\"\"),a=!(!t[1]&&!t[2]),l=0==t.index?\"\":e.substr(t.index-1,1),c=e.substr(t.index+s.length,1),u=!l.match(/\\d/)&&!c.match(/\\d/);this.testMatch(t[3])&&this.testMatch(s)&&u&&o.push(new v({tagBuilder:r,matchedText:s,offset:t.index,number:i,plusSign:a}))}return o},t.prototype.testMatch=function(e){return S.test(e)},t}(w),X=new RegExp(\"@[_\".concat(N,\"]{1,50}(?![_\").concat(N,\"])\"),\"g\"),Q=new RegExp(\"@[_.\".concat(N,\"]{1,30}(?![_\").concat(N,\"])\"),\"g\"),ee=new RegExp(\"@[-_.\".concat(N,\"]{1,50}(?![-_\").concat(N,\"])\"),\"g\"),te=new RegExp(\"@[_.\".concat(N,\"]{1,23}[_\").concat(N,\"](?![_\").concat(N,\"])\"),\"g\"),ne=new RegExp(\"[^\"+N+\"]\"),re=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"twitter\",n.matcherRegexes={twitter:X,instagram:Q,soundcloud:ee,tiktok:te},n.nonWordCharRegex=ne,n.serviceName=t.serviceName,n}return h(t,e),t.prototype.parseMatches=function(e){var t,n=this.serviceName,r=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,s=this.tagBuilder,i=[];if(!r)return i;for(;null!==(t=r.exec(e));){var a=t.index,l=e.charAt(a-1);if(0===a||o.test(l)){var c=t[0].replace(/\\.+$/g,\"\"),u=c.slice(1);i.push(new y({tagBuilder:s,matchedText:c,offset:a,serviceName:n,mention:u}))}}return i},t}(w);function oe(e,t){for(var n,r=t.onOpenTag,o=t.onCloseTag,s=t.onText,i=t.onComment,l=t.onDoctype,c=new se,u=0,p=e.length,h=0,d=0,m=c;u<p;){var g=e.charAt(u);switch(h){case 0:y(g);break;case 1:v(g);break;case 2:w(g);break;case 3:b(g);break;case 4:S(g);break;case 5:k(g);break;case 6:A(g);break;case 7:C(g);break;case 8:P(g);break;case 9:N(g);break;case 10:I(g);break;case 11:T(g);break;case 12:R(g);break;case 13:M(g);break;case 14:D(g);break;case 15:F(g);break;case 16:L(g);break;case 17:B(g);break;case 18:$(g);break;case 19:q(g);break;case 20:U(g);break;default:a(h)}u++}function y(e){\"<\"===e&&V()}function v(e){\"!\"===e?h=13:\"/\"===e?(h=2,m=new se(f(f({},m),{isClosing:!0}))):\"<\"===e?V():E.test(e)?(h=3,m=new se(f(f({},m),{isOpening:!0}))):(h=0,m=c)}function b(e){_.test(e)?(m=new se(f(f({},m),{name:J()})),h=4):\"<\"===e?V():\"/\"===e?(m=new se(f(f({},m),{name:J()})),h=12):\">\"===e?(m=new se(f(f({},m),{name:J()})),W()):E.test(e)||x.test(e)||\":\"===e||z()}function w(e){\">\"===e?z():E.test(e)?h=3:z()}function S(e){_.test(e)||(\"/\"===e?h=12:\">\"===e?W():\"<\"===e?V():\"=\"===e||j.test(e)||O.test(e)?z():h=5)}function k(e){_.test(e)?h=6:\"/\"===e?h=12:\"=\"===e?h=7:\">\"===e?W():\"<\"===e?V():j.test(e)&&z()}function A(e){_.test(e)||(\"/\"===e?h=12:\"=\"===e?h=7:\">\"===e?W():\"<\"===e?V():j.test(e)?z():h=5)}function C(e){_.test(e)||('\"'===e?h=8:\"'\"===e?h=9:/[>=`]/.test(e)?z():\"<\"===e?V():h=10)}function P(e){'\"'===e&&(h=11)}function N(e){\"'\"===e&&(h=11)}function I(e){_.test(e)?h=4:\">\"===e?W():\"<\"===e&&V()}function T(e){_.test(e)?h=4:\"/\"===e?h=12:\">\"===e?W():\"<\"===e?V():(h=4,u--)}function R(e){\">\"===e?(m=new se(f(f({},m),{isClosing:!0})),W()):h=4}function M(t){\"--\"===e.substr(u,2)?(u+=2,m=new se(f(f({},m),{type:\"comment\"})),h=14):\"DOCTYPE\"===e.substr(u,7).toUpperCase()?(u+=7,m=new se(f(f({},m),{type:\"doctype\"})),h=20):z()}function D(e){\"-\"===e?h=15:\">\"===e?z():h=16}function F(e){\"-\"===e?h=18:\">\"===e?z():h=16}function L(e){\"-\"===e&&(h=17)}function B(e){h=\"-\"===e?18:16}function $(e){\">\"===e?W():\"!\"===e?h=19:\"-\"===e||(h=16)}function q(e){\"-\"===e?h=17:\">\"===e?W():h=16}function U(e){\">\"===e?W():\"<\"===e&&V()}function z(){h=0,m=c}function V(){h=1,m=new se({idx:u})}function W(){var t=e.slice(d,m.idx);t&&s(t,d),\"comment\"===m.type?i(m.idx):\"doctype\"===m.type?l(m.idx):(m.isOpening&&r(m.name,m.idx),m.isClosing&&o(m.name,m.idx)),z(),d=u+1}function J(){var t=m.idx+(m.isClosing?2:1);return e.slice(t,u).toLowerCase()}d<u&&(n=e.slice(d,u),s(n,d),d=u+1)}var se=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||\"tag\",this.name=e.name||\"\",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing};const ie=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:\"end\"},this.className=\"\",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email=\"boolean\"==typeof t.email?t.email:this.email,this.phone=\"boolean\"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=\"boolean\"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash=\"boolean\"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=\"boolean\"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(!1!==n&&-1===[\"twitter\",\"instagram\",\"soundcloud\",\"tiktok\"].indexOf(n))throw new Error(\"invalid `mention` cfg '\".concat(n,\"' - see docs\"));var r=this.hashtag;if(!1!==r&&-1===G.indexOf(r))throw new Error(\"invalid `hashtag` cfg '\".concat(r,\"' - see docs\"));this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){return new e(n).link(t)},e.parse=function(t,n){return new e(n).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:\"boolean\"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:\"boolean\"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:\"boolean\"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{scheme:e,www:e}:{scheme:\"boolean\"!=typeof e.scheme||e.scheme,www:\"boolean\"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return\"number\"==typeof e?{length:e,location:\"end\"}:function(e,t){for(var n in t)t.hasOwnProperty(n)&&void 0===e[n]&&(e[n]=t[n]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:\"end\"})},e.prototype.parse=function(e){var t=this,n=[\"a\",\"style\",\"script\"],r=0,o=[];return oe(e,{onOpenTag:function(e){n.indexOf(e)>=0&&r++},onText:function(e,n){if(0===r){var s=function(e,t){if(!t.global)throw new Error(\"`splitRegex` must have the 'g' flag set\");for(var n,r=[],o=0;n=t.exec(e);)r.push(e.substring(o,n.index)),r.push(n[0]),o=n.index+n[0].length;return r.push(e.substring(o)),r}(e,/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi),i=n;s.forEach((function(e,n){if(n%2==0){var r=t.parseText(e,i);o.push.apply(o,r)}i+=e.length}))}},onCloseTag:function(e){n.indexOf(e)>=0&&(r=Math.max(r-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;t<e.length-1;){var n=e[t],r=n.getOffset(),o=n.getMatchedText().length,s=r+o;if(t+1<e.length){if(e[t+1].getOffset()===r){var i=e[t+1].getMatchedText().length>o?t:t+1;e.splice(i,1);continue}if(e[t+1].getOffset()<s){e.splice(t+1,1);continue}}t++}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||i(e,(function(e){return\"hashtag\"===e.getType()})),this.email||i(e,(function(e){return\"email\"===e.getType()})),this.phone||i(e,(function(e){return\"phone\"===e.getType()})),this.mention||i(e,(function(e){return\"mention\"===e.getType()})),this.urls.schemeMatches||i(e,(function(e){return\"url\"===e.getType()&&\"scheme\"===e.getUrlMatchType()})),this.urls.wwwMatches||i(e,(function(e){return\"url\"===e.getType()&&\"www\"===e.getUrlMatchType()})),this.urls.tldMatches||i(e,(function(e){return\"url\"===e.getType()&&\"tld\"===e.getUrlMatchType()})),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var n=this.getMatchers(),r=[],o=0,s=n.length;o<s;o++){for(var i=n[o].parseMatches(e),a=0,l=i.length;a<l;a++)i[a].setOffset(t+i[a].getOffset());r.push.apply(r,i)}return r},e.prototype.link=function(e){if(!e)return\"\";this.sanitizeHtml&&(e=e.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"));for(var t=this.parse(e),n=[],r=0,o=0,s=t.length;o<s;o++){var i=t[o];n.push(e.substring(r,i.getOffset())),n.push(this.createMatchReturnVal(i)),r=i.getOffset()+i.getMatchedText().length}return n.push(e.substring(r)),n.join(\"\")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),\"string\"==typeof t?t:!1===t?e.getMatchedText():t instanceof l?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new H({tagBuilder:e,serviceName:this.hashtag}),new q({tagBuilder:e}),new Y({tagBuilder:e}),new re({tagBuilder:e,serviceName:this.mention}),new J({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new c({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version=\"3.16.2\",e.AnchorTagBuilder=c,e.HtmlTag=l,e.matcher={Email:q,Hashtag:H,Matcher:w,Mention:re,Phone:Y,Url:J},e.match={Email:m,Hashtag:g,Match:u,Mention:y,Phone:v,Url:b},e}();var ae=/www|@|\\:\\/\\//;function le(e){return/^<\\/a\\s*>/i.test(e)}function ce(){var e=[],t=new ie({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case\"url\":e.push({text:t.matchedText,url:t.getUrl()});break;case\"email\":e.push({text:t.matchedText,url:\"mailto:\"+t.getEmail().replace(/^mailto:/i,\"\")})}return!1}});return{links:e,autolinker:t}}function ue(e){var t,n,r,o,s,i,a,l,c,u,p,h,f,d,m=e.tokens,g=null;for(n=0,r=m.length;n<r;n++)if(\"inline\"===m[n].type)for(p=0,t=(o=m[n].children).length-1;t>=0;t--)if(\"link_close\"!==(s=o[t]).type){if(\"htmltag\"===s.type&&(d=s.content,/^<a[>\\s]/i.test(d)&&p>0&&p--,le(s.content)&&p++),!(p>0)&&\"text\"===s.type&&ae.test(s.content)){if(g||(h=(g=ce()).links,f=g.autolinker),i=s.content,h.length=0,f.link(i),!h.length)continue;for(a=[],u=s.level,l=0;l<h.length;l++)e.inline.validateLink(h[l].url)&&((c=i.indexOf(h[l].text))&&a.push({type:\"text\",content:i.slice(0,c),level:u}),a.push({type:\"link_open\",href:h[l].url,title:\"\",level:u++}),a.push({type:\"text\",content:h[l].text,level:u}),a.push({type:\"link_close\",level:--u}),i=i.slice(c+h[l].text.length));i.length&&a.push({type:\"text\",content:i,level:u}),m[n].children=o=[].concat(o.slice(0,t),a,o.slice(t+1))}}else for(t--;o[t].level!==s.level&&\"link_open\"!==o[t].type;)t--}function pe(e){e.core.ruler.push(\"linkify\",ue)}var he=n(27856),fe=n.n(he),de=n(94184),me=n.n(de);function ge(e){let{source:t,className:n=\"\",getConfigs:s}=e;if(\"string\"!=typeof t)return null;const i=new o._({html:!0,typographer:!0,breaks:!0,linkTarget:\"_blank\"}).use(pe);i.core.ruler.disable([\"replacements\",\"smartquotes\"]);const{useUnsafeMarkdown:a}=s(),l=i.render(t),c=ve(l,{useUnsafeMarkdown:a});return t&&l&&c?r.createElement(\"div\",{className:me()(n,\"markdown\"),dangerouslySetInnerHTML:{__html:c}}):null}fe().addHook&&fe().addHook(\"beforeSanitizeElements\",(function(e){return e.href&&e.setAttribute(\"rel\",\"noopener noreferrer\"),e})),ge.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const ye=ge;function ve(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t,r=t?[]:[\"style\",\"class\"];return t&&!ve.hasWarnedAboutDeprecation&&(console.warn(\"useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0.\"),ve.hasWarnedAboutDeprecation=!0),fe().sanitize(e,{ADD_ATTR:[\"target\"],FORBID_TAGS:[\"style\",\"form\"],ALLOW_DATA_ATTR:n,FORBID_ATTR:r})}ve.hasWarnedAboutDeprecation=!1},45308:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r,o=n(86),s=n.n(o),i=n(8712),a=n.n(i),l=n(90242),c=n(27621);const u=n(95102),p={},h=p;s()(r=a()(u).call(u)).call(r,(function(e){if(\"./index.js\"===e)return;let t=u(e);p[(0,l.Zl)(e)]=t.default?t.default:t})),p.SafeRender=c.default},55812:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{AUTHORIZE:()=>h,AUTHORIZE_OAUTH2:()=>m,CONFIGURE_AUTH:()=>y,LOGOUT:()=>f,PRE_AUTHORIZE_OAUTH2:()=>d,RESTORE_AUTHORIZATION:()=>v,SHOW_AUTH_POPUP:()=>p,VALIDATE:()=>g,authPopup:()=>M,authorize:()=>w,authorizeAccessCodeWithBasicAuthentication:()=>P,authorizeAccessCodeWithFormParams:()=>C,authorizeApplication:()=>A,authorizeOauth2:()=>j,authorizeOauth2WithPersistOption:()=>O,authorizePassword:()=>k,authorizeRequest:()=>N,authorizeWithPersistOption:()=>E,configureAuth:()=>I,logout:()=>x,logoutWithPersistOption:()=>S,persistAuthorizationIfNeeded:()=>R,preAuthorizeImplicit:()=>_,restoreAuthorization:()=>T,showDefinitions:()=>b});var r=n(35627),o=n.n(r),s=n(76986),i=n.n(s),a=n(84564),l=n.n(a),c=n(27504),u=n(90242);const p=\"show_popup\",h=\"authorize\",f=\"logout\",d=\"pre_authorize_oauth2\",m=\"authorize_oauth2\",g=\"validate\",y=\"configure_auth\",v=\"restore_authorization\";function b(e){return{type:p,payload:e}}function w(e){return{type:h,payload:e}}const E=e=>t=>{let{authActions:n}=t;n.authorize(e),n.persistAuthorizationIfNeeded()};function x(e){return{type:f,payload:e}}const S=e=>t=>{let{authActions:n}=t;n.logout(e),n.persistAuthorizationIfNeeded()},_=e=>t=>{let{authActions:n,errActions:r}=t,{auth:s,token:i,isValid:a}=e,{schema:l,name:u}=s,p=l.get(\"flow\");delete c.Z.swaggerUIRedirectOauth2,\"accessCode\"===p||a||r.newAuthErr({authId:u,source:\"auth\",level:\"warning\",message:\"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server\"}),i.error?r.newAuthErr({authId:u,source:\"auth\",level:\"error\",message:o()(i)}):n.authorizeOauth2WithPersistOption({auth:s,token:i})};function j(e){return{type:m,payload:e}}const O=e=>t=>{let{authActions:n}=t;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()},k=e=>t=>{let{authActions:n}=t,{schema:r,name:o,username:s,password:a,passwordType:l,clientId:c,clientSecret:p}=e,h={grant_type:\"password\",scope:e.scopes.join(\" \"),username:s,password:a},f={};switch(l){case\"request-body\":!function(e,t,n){t&&i()(e,{client_id:t});n&&i()(e,{client_secret:n})}(h,c,p);break;case\"basic\":f.Authorization=\"Basic \"+(0,u.r3)(c+\":\"+p);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return n.authorizeRequest({body:(0,u.GZ)(h),url:r.get(\"tokenUrl\"),name:o,headers:f,query:{},auth:e})};const A=e=>t=>{let{authActions:n}=t,{schema:r,scopes:o,name:s,clientId:i,clientSecret:a}=e,l={Authorization:\"Basic \"+(0,u.r3)(i+\":\"+a)},c={grant_type:\"client_credentials\",scope:o.join(\" \")};return n.authorizeRequest({body:(0,u.GZ)(c),name:s,url:r.get(\"tokenUrl\"),auth:e,headers:l})},C=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:s,clientId:i,clientSecret:a,codeVerifier:l}=t,c={grant_type:\"authorization_code\",code:t.code,client_id:i,client_secret:a,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,u.GZ)(c),name:s,url:o.get(\"tokenUrl\"),auth:t})}},P=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:s,clientId:i,clientSecret:a,codeVerifier:l}=t,c={Authorization:\"Basic \"+(0,u.r3)(i+\":\"+a)},p={grant_type:\"authorization_code\",code:t.code,client_id:i,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,u.GZ)(p),name:s,url:o.get(\"tokenUrl\"),auth:t,headers:c})}},N=e=>t=>{let n,{fn:r,getConfigs:s,authActions:a,errActions:c,oas3Selectors:u,specSelectors:p,authSelectors:h}=t,{body:f,query:d={},headers:m={},name:g,url:y,auth:v}=e,{additionalQueryStringParams:b}=h.getConfigs()||{};if(p.isOAS3()){let e=u.serverEffectiveValue(u.selectedServer());n=l()(y,e,!0)}else n=l()(y,p.url(),!0);\"object\"==typeof b&&(n.query=i()({},n.query,b));const w=n.toString();let E=i()({Accept:\"application/json, text/plain, */*\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-Requested-With\":\"XMLHttpRequest\"},m);r.fetch({url:w,method:\"post\",headers:E,query:d,body:f,requestInterceptor:s().requestInterceptor,responseInterceptor:s().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),n=t&&(t.error||\"\"),r=t&&(t.parseError||\"\");e.ok?n||r?c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:o()(t)}):a.authorizeOauth2WithPersistOption({auth:v,token:t}):c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const n=e.response.data;try{const e=\"string\"==typeof n?JSON.parse(n):n;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:t})}))};function I(e){return{type:y,payload:e}}function T(e){return{type:v,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:n}=e;if(!n().persistAuthorization)return;const r=t.authorized().toJS();localStorage.setItem(\"authorized\",o()(r))},M=(e,t)=>()=>{c.Z.swaggerUIRedirectOauth2=t,c.Z.open(e)}},53779:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>n=>{const{getConfigs:r,authActions:o}=t,s=r();if(e(n),s.persistAuthorization){const e=localStorage.getItem(\"authorized\");e&&o.restoreAuthorization({authorized:JSON.parse(e)})}}},93705:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p,preauthorizeApiKey:()=>f,preauthorizeBasic:()=>h});var r=n(11189),o=n.n(r),s=n(43962),i=n(55812),a=n(60035),l=n(60489),c=n(53779),u=n(22849);function p(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=o()(f).call(f,null,e),this.rootInjects.preauthorizeBasic=o()(h).call(h,null,e)},statePlugins:{auth:{reducers:s.default,actions:i,selectors:a,wrapActions:{authorize:u.authorize,logout:u.logout}},configs:{wrapActions:{loaded:c.loaded}},spec:{wrapActions:{execute:l.execute}}}}}function h(e,t,n,r){const{authActions:{authorize:o},specSelectors:{specJson:s,isOAS3:i}}=e,a=i()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],l=s().getIn([...a,t]);return l?o({[t]:{value:{username:n,password:r},schema:l.toJS()}}):null}function f(e,t,n){const{authActions:{authorize:r},specSelectors:{specJson:o,isOAS3:s}}=e,i=s()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],a=o().getIn([...i,t]);return a?r({[t]:{value:n,schema:a.toJS()}}):null}},43962:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(86),o=n.n(r),s=n(76986),i=n.n(s),a=n(43393),l=n(90242),c=n(55812);const u={[c.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:n}=t;return e.set(\"showDefinitions\",n)},[c.AUTHORIZE]:(e,t)=>{var n;let{payload:r}=t,s=(0,a.fromJS)(r),i=e.get(\"authorized\")||(0,a.Map)();return o()(n=s.entrySeq()).call(n,(t=>{let[n,r]=t;if(!(0,l.Wl)(r.getIn))return e.set(\"authorized\",i);let o=r.getIn([\"schema\",\"type\"]);if(\"apiKey\"===o||\"http\"===o)i=i.set(n,r);else if(\"basic\"===o){let e=r.getIn([\"value\",\"username\"]),t=r.getIn([\"value\",\"password\"]);i=i.setIn([n,\"value\"],{username:e,header:\"Basic \"+(0,l.r3)(e+\":\"+t)}),i=i.setIn([n,\"schema\"],r.get(\"schema\"))}})),e.set(\"authorized\",i)},[c.AUTHORIZE_OAUTH2]:(e,t)=>{let n,{payload:r}=t,{auth:o,token:s}=r;o.token=i()({},s),n=(0,a.fromJS)(o);let l=e.get(\"authorized\")||(0,a.Map)();return l=l.set(n.get(\"name\"),n),e.set(\"authorized\",l)},[c.LOGOUT]:(e,t)=>{let{payload:n}=t,r=e.get(\"authorized\").withMutations((e=>{o()(n).call(n,(t=>{e.delete(t)}))}));return e.set(\"authorized\",r)},[c.CONFIGURE_AUTH]:(e,t)=>{let{payload:n}=t;return e.set(\"configs\",n)},[c.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:n}=t;return e.set(\"authorized\",(0,a.fromJS)(n.authorized))}}},60035:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{authorized:()=>x,definitionsForRequirements:()=>E,definitionsToAuthorize:()=>b,getConfigs:()=>_,getDefinitionsByNames:()=>w,isAuthorized:()=>S,shownDefinitions:()=>v});var r=n(86),o=n.n(r),s=n(51679),i=n.n(s),a=n(14418),l=n.n(a),c=n(11882),u=n.n(c),p=n(97606),h=n.n(p),f=n(28222),d=n.n(f),m=n(20573),g=n(43393);const y=e=>e,v=(0,m.P1)(y,(e=>e.get(\"showDefinitions\"))),b=(0,m.P1)(y,(()=>e=>{var t;let{specSelectors:n}=e,r=n.securityDefinitions()||(0,g.Map)({}),s=(0,g.List)();return o()(t=r.entrySeq()).call(t,(e=>{let[t,n]=e,r=(0,g.Map)();r=r.set(t,n),s=s.push(r)})),s})),w=(e,t)=>e=>{var n;let{specSelectors:r}=e;console.warn(\"WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.\");let s=r.securityDefinitions(),i=(0,g.List)();return o()(n=t.valueSeq()).call(n,(e=>{var t;let n=(0,g.Map)();o()(t=e.entrySeq()).call(t,(e=>{let t,[r,i]=e,a=s.get(r);var l;\"oauth2\"===a.get(\"type\")&&i.size&&(t=a.get(\"scopes\"),o()(l=t.keySeq()).call(l,(e=>{i.contains(e)||(t=t.delete(e))})),a=a.set(\"allowedScopes\",t));n=n.set(r,a)})),i=i.push(n)})),i},E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,g.List)();return e=>{let{authSelectors:n}=e;const r=n.definitionsToAuthorize()||(0,g.List)();let s=(0,g.List)();return o()(r).call(r,(e=>{let n=i()(t).call(t,(t=>t.get(e.keySeq().first())));n&&(o()(e).call(e,((t,r)=>{if(\"oauth2\"===t.get(\"type\")){const i=n.get(r);let a=t.get(\"scopes\");var s;if(g.List.isList(i)&&g.Map.isMap(a))o()(s=a.keySeq()).call(s,(e=>{i.contains(e)||(a=a.delete(e))})),e=e.set(r,t.set(\"scopes\",a))}})),s=s.push(e))})),s}},x=(0,m.P1)(y,(e=>e.get(\"authorized\")||(0,g.Map)())),S=(e,t)=>e=>{var n;let{authSelectors:r}=e,o=r.authorized();return g.List.isList(t)?!!l()(n=t.toJS()).call(n,(e=>{var t,n;return-1===u()(t=h()(n=d()(e)).call(n,(e=>!!o.get(e)))).call(t,!1)})).length:null},_=(0,m.P1)(y,(e=>e.get(\"configs\")))},60489:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{execute:()=>r});const r=(e,t)=>{let{authSelectors:n,specSelectors:r}=t;return t=>{let{path:o,method:s,operation:i,extras:a}=t,l={authorized:n.authorized()&&n.authorized().toJS(),definitions:r.securityDefinitions()&&r.securityDefinitions().toJS(),specSecurity:r.security()&&r.security().toJS()};return e({path:o,method:s,operation:i,securities:l,...a})}}},22849:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{authorize:()=>c,logout:()=>u});var r=n(3665),o=n.n(r),s=n(58309),i=n.n(s),a=n(86),l=n.n(a);const c=(e,t)=>n=>{e(n);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=o()(n),r=\"apiKey\"===e.get(\"type\"),s=\"cookie\"===e.get(\"in\");r&&s&&(document.cookie=`${e.get(\"name\")}=${t}; SameSite=None; Secure`)}catch(e){console.error(\"Error persisting cookie based apiKey in document.cookie.\",e)}},u=(e,t)=>n=>{const r=t.getConfigs(),o=t.authSelectors.authorized();try{r.persistAuthorization&&i()(n)&&l()(n).call(n,(e=>{const t=o.get(e,{}),n=\"apiKey\"===t.getIn([\"schema\",\"type\"]),r=\"cookie\"===t.getIn([\"schema\",\"in\"]);if(n&&r){const e=t.getIn([\"schema\",\"name\"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error(\"Error deleting cookie based apiKey from document.cookie.\",e)}e(n)}},70714:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{TOGGLE_CONFIGS:()=>o,UPDATE_CONFIGS:()=>r,loaded:()=>a,toggle:()=>i,update:()=>s});const r=\"configs_update\",o=\"configs_toggle\";function s(e,t){return{type:r,payload:{[e]:t}}}function i(e){return{type:o,payload:e}}const a=()=>()=>{}},92256:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{parseYamlConfig:()=>o});var r=n(1272);const o=(e,t)=>{try{return r.ZP.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},46709:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(92256),o=n(70714),s=n(22698),i=n(69018),a=n(37743);const l={getLocalConfig:()=>(0,r.parseYamlConfig)('---\\nurl: \"https://petstore.swagger.io/v2/swagger.json\"\\ndom_id: \"#swagger-ui\"\\nvalidatorUrl: \"https://validator.swagger.io/validator\"\\n')};function c(){return{statePlugins:{spec:{actions:s,selectors:l},configs:{reducers:a.default,actions:o,selectors:i}}}}},37743:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(43393),o=n(70714);const s={[o.UPDATE_CONFIGS]:(e,t)=>e.merge((0,r.fromJS)(t.payload)),[o.TOGGLE_CONFIGS]:(e,t)=>{const n=t.payload,r=e.get(n);return e.set(n,!r)}}},69018:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{get:()=>s});var r=n(58309),o=n.n(r);const s=(e,t)=>e.getIn(o()(t)?t:[t])},22698:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{downloadConfig:()=>o,getConfigByUrl:()=>s});var r=n(92256);const o=e=>t=>{const{fn:{fetch:n}}=t;return n(e)},s=(e,t)=>n=>{let{specActions:o}=n;if(e)return o.downloadConfig(e).then(s,s);function s(n){n instanceof Error||n.status>=400?(o.updateLoadingStatus(\"failedConfig\"),o.updateLoadingStatus(\"failedConfig\"),o.updateUrl(\"\"),console.error(n.statusText+\" \"+e.url),t(null)):t((0,r.parseYamlConfig)(n.text))}}},31970:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{setHash:()=>r});const r=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=\"\"},34980:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(41599),o=n(60877),s=n(34584);function i(){return[r.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const n=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(n)}}}},wrapComponents:{operation:o.default,OperationTag:s.default}}]}},41599:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{clearScrollTo:()=>_,default:()=>j,parseDeepLinkHash:()=>E,readyToScroll:()=>x,scrollTo:()=>w,scrollToElement:()=>S,show:()=>b});var r=n(58309),o=n.n(r),s=n(24278),i=n.n(s),a=n(97606),l=n.n(a),c=n(11882),u=n.n(c),p=n(31970),h=n(45172),f=n.n(h),d=n(90242),m=n(43393),g=n.n(m);const y=\"layout_scroll_to\",v=\"layout_clear_scroll\",b=(e,t)=>{let{getConfigs:n,layoutSelectors:r}=t;return function(){for(var t=arguments.length,s=new Array(t),i=0;i<t;i++)s[i]=arguments[i];if(e(...s),n().deepLinking)try{let[e,t]=s;e=o()(e)?e:[e];const n=r.urlHashArrayFromIsShownKey(e);if(!n.length)return;const[i,a]=n;if(!t)return(0,p.setHash)(\"/\");2===n.length?(0,p.setHash)((0,d.oJ)(`/${encodeURIComponent(i)}/${encodeURIComponent(a)}`)):1===n.length&&(0,p.setHash)((0,d.oJ)(`/${encodeURIComponent(i)}`))}catch(e){console.error(e)}}},w=e=>({type:y,payload:o()(e)?e:[e]}),E=e=>t=>{let{layoutActions:n,layoutSelectors:r,getConfigs:o}=t;if(o().deepLinking&&e){var s;let t=i()(e).call(e,1);\"!\"===t[0]&&(t=i()(t).call(t,1)),\"/\"===t[0]&&(t=i()(t).call(t,1));const o=l()(s=t.split(\"/\")).call(s,(e=>e||\"\")),a=r.isShownKeyFromUrlHashArray(o),[c,p=\"\",h=\"\"]=a;if(\"operations\"===c){const e=r.isShownKeyFromUrlHashArray([p]);u()(p).call(p,\"_\")>-1&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),n.show(l()(e).call(e,(e=>e.replace(/_/g,\" \"))),!0)),n.show(e,!0)}(u()(p).call(p,\"_\")>-1||u()(h).call(h,\"_\")>-1)&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),n.show(l()(a).call(a,(e=>e.replace(/_/g,\" \"))),!0)),n.show(a,!0),n.scrollTo(a)}},x=(e,t)=>n=>{const r=n.layoutSelectors.getScrollToKey();g().is(r,(0,m.fromJS)(e))&&(n.layoutActions.scrollToElement(t),n.layoutActions.clearScrollTo())},S=(e,t)=>n=>{try{t=t||n.fn.getScrollParent(e),f().createScroller(t).to(e)}catch(e){console.error(e)}},_=()=>({type:v});const j={fn:{getScrollParent:function(e,t){const n=document.documentElement;let r=getComputedStyle(e);const o=\"absolute\"===r.position,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if(\"fixed\"===r.position)return n;for(let t=e;t=t.parentElement;)if(r=getComputedStyle(t),(!o||\"static\"!==r.position)&&s.test(r.overflow+r.overflowY+r.overflowX))return t;return n}},statePlugins:{layout:{actions:{scrollToElement:S,scrollTo:w,clearScrollTo:_,readyToScroll:x,parseDeepLinkHash:E},selectors:{getScrollToKey:e=>e.get(\"scrollToKey\"),isShownKeyFromUrlHashArray(e,t){const[n,r]=t;return r?[\"operations\",n,r]:n?[\"operations-tag\",n]:[]},urlHashArrayFromIsShownKey(e,t){let[n,r,o]=t;return\"operations\"==n?[r,o]:\"operations-tag\"==n?[r]:[]}},reducers:{[y]:(e,t)=>e.set(\"scrollToKey\",g().fromJS(t.payload)),[v]:e=>e.delete(\"scrollToKey\")},wrapActions:{show:b}}}}},34584:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),s=n(67294);const i=(e,t)=>class extends s.Component{constructor(){super(...arguments),o()(this,\"onLoad\",(e=>{const{tag:n}=this.props,r=[\"operations-tag\",n];t.layoutActions.readyToScroll(r,e)}))}render(){return s.createElement(\"span\",{ref:this.onLoad},s.createElement(e,this.props))}}},60877:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),s=n(67294);n(23930);const i=(e,t)=>class extends s.Component{constructor(){super(...arguments),o()(this,\"onLoad\",(e=>{const{operation:n}=this.props,{tag:r,operationId:o}=n.toObject();let{isShownKey:s}=n.toObject();s=s||[\"operations\",r,o],t.layoutActions.readyToScroll(s,e)}))}render(){return s.createElement(\"span\",{ref:this.onLoad},s.createElement(e,this.props))}}},48011:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(76986),o=n.n(r),s=n(63460),i=n.n(s),a=n(11882),l=n.n(a),c=n(35627),u=n.n(c),p=n(20573),h=n(43393),f=n(27504);function d(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>n=>{let{errActions:r,specSelectors:s,specActions:a,getConfigs:l}=n,{fetch:c}=t;const u=l();function p(t){if(t instanceof Error||t.status>=400)return a.updateLoadingStatus(\"failed\"),r.newThrownErr(o()(new Error((t.message||t.statusText)+\" \"+e),{source:\"fetch\"})),void(!t.status&&t instanceof Error&&function(){try{let t;if(\"URL\"in f.Z?t=new(i())(e):(t=document.createElement(\"a\"),t.href=e),\"https:\"!==t.protocol&&\"https:\"===f.Z.location.protocol){const e=o()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:\"fetch\"});return void r.newThrownErr(e)}if(t.origin!==f.Z.location.origin){const e=o()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${f.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:\"fetch\"});r.newThrownErr(e)}}catch(e){return}}());a.updateLoadingStatus(\"success\"),a.updateSpec(t.text),s.url()!==e&&a.updateUrl(e)}e=e||s.url(),a.updateLoadingStatus(\"loading\"),r.clear({source:\"fetch\"}),c({url:e,loadSpec:!0,requestInterceptor:u.requestInterceptor||(e=>e),responseInterceptor:u.responseInterceptor||(e=>e),credentials:\"same-origin\",headers:{Accept:\"application/json,*/*\"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,\"loading\",\"failed\",\"success\",\"failedConfig\"];return-1===l()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${u()(t)}`),{type:\"spec_update_loading_status\",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>\"string\"==typeof t.payload?e.set(\"loadingStatus\",t.payload):e},selectors:{loadingStatus:(0,p.P1)((e=>e||(0,h.Map)()),(e=>e.get(\"loadingStatus\")||null))}}}}}},34966:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR:()=>c,CLEAR_BY:()=>u,NEW_AUTH_ERR:()=>l,NEW_SPEC_ERR:()=>i,NEW_SPEC_ERR_BATCH:()=>a,NEW_THROWN_ERR:()=>o,NEW_THROWN_ERR_BATCH:()=>s,clear:()=>g,clearBy:()=>y,newAuthErr:()=>m,newSpecErr:()=>f,newSpecErrBatch:()=>d,newThrownErr:()=>p,newThrownErrBatch:()=>h});var r=n(7710);const o=\"err_new_thrown_err\",s=\"err_new_thrown_err_batch\",i=\"err_new_spec_err\",a=\"err_new_spec_err_batch\",l=\"err_new_auth_err\",c=\"err_clear\",u=\"err_clear_by\";function p(e){return{type:o,payload:(0,r.serializeError)(e)}}function h(e){return{type:s,payload:e}}function f(e){return{type:i,payload:e}}function d(e){return{type:a,payload:e}}function m(e){return{type:l,payload:e}}function g(){return{type:c,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function y(){return{type:u,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}},56982:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(14418),o=n.n(r),s=n(97606),i=n.n(s),a=n(54061),l=n.n(a);const c=[n(2392),n(21835)];function u(e){var t;let n={jsSpec:{}},r=l()(c,((e,t)=>{try{let r=t.transform(e,n);return o()(r).call(r,(e=>!!e))}catch(t){return console.error(\"Transformer error:\",t),e}}),e);return i()(t=o()(r).call(r,(e=>!!e))).call(t,(e=>(!e.get(\"line\")&&e.get(\"path\"),e)))}},2392:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{transform:()=>p});var r=n(97606),o=n.n(r),s=n(11882),i=n.n(s),a=n(24278),l=n.n(a),c=n(24282),u=n.n(c);function p(e){return o()(e).call(e,(e=>{var t;let n=\"is not of a type(s)\",r=i()(t=e.get(\"message\")).call(t,n);if(r>-1){var o,s;let t=l()(o=e.get(\"message\")).call(o,r+19).split(\",\");return e.set(\"message\",l()(s=e.get(\"message\")).call(s,0,r)+function(e){return u()(e).call(e,((e,t,n,r)=>n===r.length-1&&r.length>1?e+\"or \"+t:r[n+1]&&r.length>2?e+t+\", \":r[n+1]?e+t+\" \":e+t),\"should be a\")}(t))}return e}))}},21835:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{transform:()=>r});n(97606),n(11882),n(27361),n(43393);function r(e,t){let{jsSpec:n}=t;return e}},77793:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(93527),o=n(34966),s=n(87667);function i(e){return{statePlugins:{err:{reducers:(0,r.default)(e),actions:o,selectors:s}}}}},93527:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y});var r=n(76986),o=n.n(r),s=n(97606),i=n.n(s),a=n(39022),l=n.n(a),c=n(14418),u=n.n(c),p=n(2250),h=n.n(p),f=n(34966),d=n(43393),m=n(56982);let g={line:0,level:\"error\",message:\"Unknown error\"};function y(){return{[f.NEW_THROWN_ERR]:(e,t)=>{let{payload:n}=t,r=o()(g,n,{type:\"thrown\"});return e.update(\"errors\",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:\"thrown\"})))),e.update(\"errors\",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_SPEC_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(n);return r=r.set(\"type\",\"spec\"),e.update(\"errors\",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)).sortBy((e=>e.get(\"line\"))))).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:\"spec\"})))),e.update(\"errors\",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_AUTH_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(o()({},n));return r=r.set(\"type\",\"auth\"),e.update(\"errors\",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update(\"errors\",(e=>(0,m.default)(e)))},[f.CLEAR]:(e,t)=>{var n;let{payload:r}=t;if(!r||!e.get(\"errors\"))return e;let o=u()(n=e.get(\"errors\")).call(n,(e=>{var t;return h()(t=e.keySeq()).call(t,(t=>{const n=e.get(t),o=r[t];return!o||n!==o}))}));return e.merge({errors:o})},[f.CLEAR_BY]:(e,t)=>{var n;let{payload:r}=t;if(!r||\"function\"!=typeof r)return e;let o=u()(n=e.get(\"errors\")).call(n,(e=>r(e)));return e.merge({errors:o})}}}},87667:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{allErrors:()=>s,lastError:()=>i});var r=n(43393),o=n(20573);const s=(0,o.P1)((e=>e),(e=>e.get(\"errors\",(0,r.List)()))),i=(0,o.P1)(s,(e=>e.last()))},49978:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(4309);function o(){return{fn:{opsFilter:r.default}}}},4309:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(14418),o=n.n(r),s=n(11882),i=n.n(s);function a(e,t){return o()(e).call(e,((e,n)=>-1!==i()(n).call(n,t)))}},47349:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(67294),o=n(94184),s=n.n(o),i=n(12603);const a=e=>{let{expanded:t,children:n,onChange:o}=e;const a=(0,i.useComponent)(\"ChevronRightIcon\"),l=(0,r.useCallback)((e=>{o(e,!t)}),[t,o]);return r.createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-accordion\",onClick:l},r.createElement(\"div\",{className:\"json-schema-2020-12-accordion__children\"},n),r.createElement(\"span\",{className:s()(\"json-schema-2020-12-accordion__icon\",{\"json-schema-2020-12-accordion__icon--expanded\":t,\"json-schema-2020-12-accordion__icon--collapsed\":!t})},r.createElement(a,null)))};a.defaultProps={expanded:!1};const l=a},36867:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{expanded:t,onClick:n}=e;const o=(0,r.useCallback)((e=>{n(e,!t)}),[t,n]);return r.createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-expand-deep-button\",onClick:o},t?\"Collapse all\":\"Expand all\")}},22675:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(97606),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=(n(16648),n(12603)),c=n(69006);const u=(0,s.forwardRef)(((e,t)=>{let{schema:n,name:r,dependentRequired:i,onExpand:u}=e;const p=(0,l.useFn)(),h=(0,l.useIsExpanded)(),f=(0,l.useIsExpandedDeeply)(),[d,m]=(0,s.useState)(h||f),[g,y]=(0,s.useState)(f),[v,b]=(0,l.useLevel)(),w=(0,l.useIsEmbedded)(),E=p.isExpandable(n)||i.length>0,x=(0,l.useIsCircular)(n),S=(0,l.useRenderedSchemas)(n),_=p.stringifyConstraints(n),j=(0,l.useComponent)(\"Accordion\"),O=(0,l.useComponent)(\"Keyword$schema\"),k=(0,l.useComponent)(\"Keyword$vocabulary\"),A=(0,l.useComponent)(\"Keyword$id\"),C=(0,l.useComponent)(\"Keyword$anchor\"),P=(0,l.useComponent)(\"Keyword$dynamicAnchor\"),N=(0,l.useComponent)(\"Keyword$ref\"),I=(0,l.useComponent)(\"Keyword$dynamicRef\"),T=(0,l.useComponent)(\"Keyword$defs\"),R=(0,l.useComponent)(\"Keyword$comment\"),M=(0,l.useComponent)(\"KeywordAllOf\"),D=(0,l.useComponent)(\"KeywordAnyOf\"),F=(0,l.useComponent)(\"KeywordOneOf\"),L=(0,l.useComponent)(\"KeywordNot\"),B=(0,l.useComponent)(\"KeywordIf\"),$=(0,l.useComponent)(\"KeywordThen\"),q=(0,l.useComponent)(\"KeywordElse\"),U=(0,l.useComponent)(\"KeywordDependentSchemas\"),z=(0,l.useComponent)(\"KeywordPrefixItems\"),V=(0,l.useComponent)(\"KeywordItems\"),W=(0,l.useComponent)(\"KeywordContains\"),J=(0,l.useComponent)(\"KeywordProperties\"),K=(0,l.useComponent)(\"KeywordPatternProperties\"),H=(0,l.useComponent)(\"KeywordAdditionalProperties\"),G=(0,l.useComponent)(\"KeywordPropertyNames\"),Z=(0,l.useComponent)(\"KeywordUnevaluatedItems\"),Y=(0,l.useComponent)(\"KeywordUnevaluatedProperties\"),X=(0,l.useComponent)(\"KeywordType\"),Q=(0,l.useComponent)(\"KeywordEnum\"),ee=(0,l.useComponent)(\"KeywordConst\"),te=(0,l.useComponent)(\"KeywordConstraint\"),ne=(0,l.useComponent)(\"KeywordDependentRequired\"),re=(0,l.useComponent)(\"KeywordContentSchema\"),oe=(0,l.useComponent)(\"KeywordTitle\"),se=(0,l.useComponent)(\"KeywordDescription\"),ie=(0,l.useComponent)(\"KeywordDefault\"),ae=(0,l.useComponent)(\"KeywordDeprecated\"),le=(0,l.useComponent)(\"KeywordReadOnly\"),ce=(0,l.useComponent)(\"KeywordWriteOnly\"),ue=(0,l.useComponent)(\"ExpandDeepButton\");(0,s.useEffect)((()=>{y(f)}),[f]),(0,s.useEffect)((()=>{y(g)}),[g]);const pe=(0,s.useCallback)(((e,t)=>{m(t),!t&&y(!1),u(e,t,!1)}),[u]),he=(0,s.useCallback)(((e,t)=>{m(t),y(t),u(e,t,!0)}),[u]);return s.createElement(c.JSONSchemaLevelContext.Provider,{value:b},s.createElement(c.JSONSchemaDeepExpansionContext.Provider,{value:g},s.createElement(c.JSONSchemaCyclesContext.Provider,{value:S},s.createElement(\"article\",{ref:t,\"data-json-schema-level\":v,className:a()(\"json-schema-2020-12\",{\"json-schema-2020-12--embedded\":w,\"json-schema-2020-12--circular\":x})},s.createElement(\"div\",{className:\"json-schema-2020-12-head\"},E&&!x?s.createElement(s.Fragment,null,s.createElement(j,{expanded:d,onChange:pe},s.createElement(oe,{title:r,schema:n})),s.createElement(ue,{expanded:d,onClick:he})):s.createElement(oe,{title:r,schema:n}),s.createElement(ae,{schema:n}),s.createElement(le,{schema:n}),s.createElement(ce,{schema:n}),s.createElement(X,{schema:n,isCircular:x}),_.length>0&&o()(_).call(_,(e=>s.createElement(te,{key:`${e.scope}-${e.value}`,constraint:e})))),s.createElement(\"div\",{className:a()(\"json-schema-2020-12-body\",{\"json-schema-2020-12-body--collapsed\":!d})},d&&s.createElement(s.Fragment,null,s.createElement(se,{schema:n}),!x&&E&&s.createElement(s.Fragment,null,s.createElement(J,{schema:n}),s.createElement(K,{schema:n}),s.createElement(H,{schema:n}),s.createElement(Y,{schema:n}),s.createElement(G,{schema:n}),s.createElement(M,{schema:n}),s.createElement(D,{schema:n}),s.createElement(F,{schema:n}),s.createElement(L,{schema:n}),s.createElement(B,{schema:n}),s.createElement($,{schema:n}),s.createElement(q,{schema:n}),s.createElement(U,{schema:n}),s.createElement(z,{schema:n}),s.createElement(V,{schema:n}),s.createElement(Z,{schema:n}),s.createElement(W,{schema:n}),s.createElement(re,{schema:n})),s.createElement(Q,{schema:n}),s.createElement(ee,{schema:n}),s.createElement(ne,{schema:n,dependentRequired:i}),s.createElement(ie,{schema:n}),s.createElement(O,{schema:n}),s.createElement(k,{schema:n}),s.createElement(A,{schema:n}),s.createElement(C,{schema:n}),s.createElement(P,{schema:n}),s.createElement(N,{schema:n}),!x&&E&&s.createElement(T,{schema:n}),s.createElement(I,{schema:n}),s.createElement(R,{schema:n})))))))}));u.defaultProps={name:\"\",dependentRequired:[],onExpand:()=>{}};const p=u},12260:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=()=>r.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\"},r.createElement(\"path\",{d:\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"}))},64922:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$anchor?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$anchor\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$anchor)):null}},4685:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$comment?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$comment\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$comment)):null}},36418:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=n(94184),p=n.n(u),h=(n(16648),n(12603)),f=n(69006);const d=e=>{var t;let{schema:n}=e;const r=(null==n?void 0:n.$defs)||{},s=(0,h.useIsExpandedDeeply)(),[a,u]=(0,c.useState)(s),[d,m]=(0,c.useState)(!1),g=(0,h.useComponent)(\"Accordion\"),y=(0,h.useComponent)(\"ExpandDeepButton\"),v=(0,h.useComponent)(\"JSONSchema\"),b=(0,c.useCallback)((()=>{u((e=>!e))}),[]),w=(0,c.useCallback)(((e,t)=>{u(t),m(t)}),[]);return 0===o()(r).length?null:c.createElement(f.JSONSchemaDeepExpansionContext.Provider,{value:d},c.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs\"},c.createElement(g,{expanded:a,onChange:b},c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$defs\")),c.createElement(y,{expanded:a,onClick:w}),c.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),c.createElement(\"ul\",{className:p()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!a})},a&&c.createElement(c.Fragment,null,i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},c.createElement(v,{name:t,schema:n}))}))))))}},51338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$dynamicAnchor?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicAnchor\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicAnchor)):null}},27655:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$dynamicRef?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicRef\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicRef)):null}},93460:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$id?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$id\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$id)):null}},72348:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$ref?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$ref\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$ref)):null}},69359:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$schema?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$schema\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$schema)):null}},7568:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(97606),o=n.n(r),s=n(2018),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603));const p=e=>{var t;let{schema:n}=e;const r=(0,u.useIsExpandedDeeply)(),[s,l]=(0,a.useState)(r),p=(0,u.useComponent)(\"Accordion\"),h=(0,a.useCallback)((()=>{l((e=>!e))}),[]);return null!=n&&n.$vocabulary?\"object\"!=typeof n.$vocabulary?null:a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary\"},a.createElement(p,{expanded:s,onChange:h},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$vocabulary\")),a.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),a.createElement(\"ul\",null,s&&o()(t=i()(n.$vocabulary)).call(t,(e=>{let[t,n]=e;return a.createElement(\"li\",{key:t,className:c()(\"json-schema-2020-12-$vocabulary-uri\",{\"json-schema-2020-12-$vocabulary-uri--disabled\":!n})},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t))})))):null}},65253:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{additionalProperties:s}=t,i=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"additionalProperties\"))return null;const a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Additional properties\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties\"},!0===s?r.createElement(r.Fragment,null,a,r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"allowed\")):!1===s?r.createElement(r.Fragment,null,a,r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"forbidden\")):r.createElement(i,{name:a,schema:s}))}},46457:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.allOf)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"All of\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{allOf:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},8776:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.anyOf)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Any of\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{anyOf:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},27308:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)();return n.hasKeyword(t,\"const\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--const\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Const\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},n.stringify(t.const))):null}},69956:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294);const o=e=>{let{constraint:t}=e;return r.createElement(\"span\",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${t.scope}`},t.value)},s=r.memo(o)},38993:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"contains\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Contains\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains\"},r.createElement(s,{name:i,schema:t.contains}))}},3484:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"contentSchema\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Content schema\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema\"},r.createElement(s,{name:i,schema:t.contentSchema}))}},55148:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)();return n.hasKeyword(t,\"default\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--default\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Default\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},n.stringify(t.default))):null}},24539:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(97606),o=n.n(r),s=n(67294);n(16648);const i=e=>{let{dependentRequired:t}=e;return 0===t.length?null:s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Required when defined\"),s.createElement(\"ul\",null,o()(t).call(t,(e=>s.createElement(\"li\",{key:e},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning\"},e))))))}},26076:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=n(94184),p=n.n(u),h=(n(16648),n(12603)),f=n(69006);const d=e=>{var t;let{schema:n}=e;const r=(null==n?void 0:n.dependentSchemas)||[],s=(0,h.useIsExpandedDeeply)(),[a,u]=(0,c.useState)(s),[d,m]=(0,c.useState)(!1),g=(0,h.useComponent)(\"Accordion\"),y=(0,h.useComponent)(\"ExpandDeepButton\"),v=(0,h.useComponent)(\"JSONSchema\"),b=(0,c.useCallback)((()=>{u((e=>!e))}),[]),w=(0,c.useCallback)(((e,t)=>{u(t),m(t)}),[]);return\"object\"!=typeof r||0===o()(r).length?null:c.createElement(f.JSONSchemaDeepExpansionContext.Provider,{value:d},c.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas\"},c.createElement(g,{expanded:a,onChange:b},c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Dependent schemas\")),c.createElement(y,{expanded:a,onClick:w}),c.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),c.createElement(\"ul\",{className:p()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!a})},a&&c.createElement(c.Fragment,null,i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},c.createElement(v,{name:t,schema:n}))}))))))}},26661:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.deprecated)?null:r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning\"},\"deprecated\")}},79446:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.description?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},r.createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},t.description)):null}},67207:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"else\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Else\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},r.createElement(s,{name:i,schema:t.else}))}},91805:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=(n(16648),n(12603));const c=e=>{var t;let{schema:n}=e;const r=(0,l.useFn)();return o()(null==n?void 0:n.enum)?a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum\"},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Allowed values\"),a.createElement(\"ul\",null,i()(t=n.enum).call(t,(e=>{const t=r.stringify(e);return a.createElement(\"li\",{key:t},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},t))})))):null}},40487:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"if\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"If\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},r.createElement(s,{name:i,schema:t.if}))}},89206:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"items\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Items\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--items\"},r.createElement(s,{name:i,schema:t.items}))}},65174:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"not\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Not\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--not\"},r.createElement(s,{name:i,schema:t.not}))}},13834:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.oneOf)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"One of\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{oneOf:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},36746:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=(n(16648),n(12603));const p=e=>{var t;let{schema:n}=e;const r=(null==n?void 0:n.patternProperties)||{},s=(0,u.useComponent)(\"JSONSchema\");return 0===o()(r).length?null:c.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties\"},c.createElement(\"ul\",null,i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},c.createElement(s,{name:t,schema:n}))}))))}},93971:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.prefixItems)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Prefix items\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{prefixItems:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},25472:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y});var r=n(58309),o=n.n(r),s=n(28222),i=n.n(s),a=n(97606),l=n.n(a),c=n(2018),u=n.n(c),p=n(58118),h=n.n(p),f=n(67294),d=n(94184),m=n.n(d),g=(n(16648),n(12603));const y=e=>{var t;let{schema:n}=e;const r=(0,g.useFn)(),s=(null==n?void 0:n.properties)||{},a=o()(null==n?void 0:n.required)?n.required:[],c=(0,g.useComponent)(\"JSONSchema\");return 0===i()(s).length?null:f.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},f.createElement(\"ul\",null,l()(t=u()(s)).call(t,(e=>{let[t,o]=e;const s=h()(a).call(a,t),i=r.getDependentRequired(t,n);return f.createElement(\"li\",{key:t,className:m()(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":s})},f.createElement(c,{name:t,schema:o,dependentRequired:i}))}))))}},42338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{propertyNames:s}=t,i=(0,o.useComponent)(\"JSONSchema\"),a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Property names\");return n.hasKeyword(t,\"propertyNames\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames\"},r.createElement(i,{name:a,schema:s})):null}},16456:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.readOnly)?null:r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"read-only\")}},67401:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"then\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Then\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--then\"},r.createElement(s,{name:i,schema:t.then}))}},78137:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{title:t,schema:n}=e;const s=(0,o.useFn)();return t||s.getTitle(n)?r.createElement(\"div\",{className:\"json-schema-2020-12__title\"},t||s.getTitle(n)):null};s.defaultProps={title:\"\"};const i=s},22285:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t,isCircular:n}=e;const s=(0,o.useFn)().getType(t),i=n?\" [circular]\":\"\";return r.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},`${s}${i}`)};s.defaultProps={isCircular:!1};const i=s},85828:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{unevaluatedItems:s}=t,i=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"unevaluatedItems\"))return null;const a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated items\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems\"},r.createElement(i,{name:a,schema:s}))}},6907:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{unevaluatedProperties:s}=t,i=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"unevaluatedProperties\"))return null;const a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated properties\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties\"},r.createElement(i,{name:a,schema:s}))}},15789:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.writeOnly)?null:r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"write-only\")}},69006:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{JSONSchemaContext:()=>i,JSONSchemaCyclesContext:()=>c,JSONSchemaDeepExpansionContext:()=>l,JSONSchemaLevelContext:()=>a});var r=n(82737),o=n.n(r),s=n(67294);const i=(0,s.createContext)(null);i.displayName=\"JSONSchemaContext\";const a=(0,s.createContext)(0);a.displayName=\"JSONSchemaLevelContext\";const l=(0,s.createContext)(!1);l.displayName=\"JSONSchemaDeepExpansionContext\";const c=(0,s.createContext)(new(o()))},33499:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getDependentRequired:()=>F,getTitle:()=>C,getType:()=>P,hasKeyword:()=>I,isBooleanJSONSchema:()=>N,isExpandable:()=>T,stringify:()=>R,stringifyConstraints:()=>D,upperFirst:()=>A});var r=n(24278),o=n.n(r),s=n(19030),i=n.n(s),a=n(58309),l=n.n(a),c=n(97606),u=n.n(c),p=n(58118),h=n.n(p),f=n(91086),d=n.n(f),m=n(14418),g=n.n(m),y=n(35627),v=n.n(y),b=n(25110),w=n.n(b),E=n(24282),x=n.n(E),S=n(2018),_=n.n(S),j=n(82737),O=n.n(j),k=n(12603);const A=e=>\"string\"==typeof e?`${e.charAt(0).toUpperCase()}${o()(e).call(e,1)}`:e,C=e=>{const t=(0,k.useFn)();return null!=e&&e.title?t.upperFirst(e.title):null!=e&&e.$anchor?t.upperFirst(e.$anchor):null!=e&&e.$id?e.$id:\"\"},P=function(e){var t,n;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new(i());const o=(0,k.useFn)();if(null==e)return\"any\";if(o.isBooleanJSONSchema(e))return e?\"any\":\"never\";if(\"object\"!=typeof e)return\"any\";if(r.has(e))return\"any\";r.add(e);const{type:s,prefixItems:a,items:c}=e,p=()=>{if(l()(a)){const e=u()(a).call(a,(e=>P(e,r))),t=c?P(c,r):\"any\";return`array<[${e.join(\", \")}], ${t}>`}if(c){return`array<${P(c,r)}>`}return\"array<any>\"};if(e.not&&\"any\"===P(e.not))return\"never\";const f=l()(s)?u()(s).call(s,(e=>\"array\"===e?p():e)).join(\" | \"):\"array\"===s?p():h()(t=[\"null\",\"boolean\",\"object\",\"array\",\"number\",\"string\"]).call(t,s)?s:(()=>{var t,n;if(Object.hasOwn(e,\"prefixItems\")||Object.hasOwn(e,\"items\")||Object.hasOwn(e,\"contains\"))return p();if(Object.hasOwn(e,\"properties\")||Object.hasOwn(e,\"additionalProperties\")||Object.hasOwn(e,\"patternProperties\"))return\"object\";if(h()(t=[\"int32\",\"int64\"]).call(t,e.format))return\"integer\";if(h()(n=[\"float\",\"double\"]).call(n,e.format))return\"number\";if(Object.hasOwn(e,\"minimum\")||Object.hasOwn(e,\"maximum\")||Object.hasOwn(e,\"exclusiveMinimum\")||Object.hasOwn(e,\"exclusiveMaximum\")||Object.hasOwn(e,\"multipleOf\"))return\"number | integer\";if(Object.hasOwn(e,\"pattern\")||Object.hasOwn(e,\"format\")||Object.hasOwn(e,\"minLength\")||Object.hasOwn(e,\"maxLength\"))return\"string\";if(void 0!==e.const){if(null===e.const)return\"null\";if(\"boolean\"==typeof e.const)return\"boolean\";if(\"number\"==typeof e.const)return d()(e.const)?\"integer\":\"number\";if(\"string\"==typeof e.const)return\"string\";if(l()(e.const))return\"array<any>\";if(\"object\"==typeof e.const)return\"object\"}return null})(),m=(t,n)=>{if(l()(e[t])){var o;return`(${u()(o=e[t]).call(o,(e=>P(e,r))).join(n)})`}return null},y=m(\"oneOf\",\" | \"),v=m(\"anyOf\",\" | \"),b=m(\"allOf\",\" & \"),w=g()(n=[f,y,v,b]).call(n,Boolean).join(\" | \");return r.delete(e),w||\"any\"},N=e=>\"boolean\"==typeof e,I=(e,t)=>null!==e&&\"object\"==typeof e&&Object.hasOwn(e,t),T=e=>{const t=(0,k.useFn)();return(null==e?void 0:e.$schema)||(null==e?void 0:e.$vocabulary)||(null==e?void 0:e.$id)||(null==e?void 0:e.$anchor)||(null==e?void 0:e.$dynamicAnchor)||(null==e?void 0:e.$ref)||(null==e?void 0:e.$dynamicRef)||(null==e?void 0:e.$defs)||(null==e?void 0:e.$comment)||(null==e?void 0:e.allOf)||(null==e?void 0:e.anyOf)||(null==e?void 0:e.oneOf)||t.hasKeyword(e,\"not\")||t.hasKeyword(e,\"if\")||t.hasKeyword(e,\"then\")||t.hasKeyword(e,\"else\")||(null==e?void 0:e.dependentSchemas)||(null==e?void 0:e.prefixItems)||t.hasKeyword(e,\"items\")||t.hasKeyword(e,\"contains\")||(null==e?void 0:e.properties)||(null==e?void 0:e.patternProperties)||t.hasKeyword(e,\"additionalProperties\")||t.hasKeyword(e,\"propertyNames\")||t.hasKeyword(e,\"unevaluatedItems\")||t.hasKeyword(e,\"unevaluatedProperties\")||(null==e?void 0:e.description)||(null==e?void 0:e.enum)||t.hasKeyword(e,\"const\")||t.hasKeyword(e,\"contentSchema\")||t.hasKeyword(e,\"default\")},R=e=>{var t;return null===e||h()(t=[\"number\",\"bigint\",\"boolean\"]).call(t,typeof e)?String(e):l()(e)?`[${u()(e).call(e,R).join(\", \")}]`:v()(e)},M=(e,t,n)=>{const r=\"number\"==typeof t,o=\"number\"==typeof n;return r&&o?t===n?`${t} ${e}`:`[${t}, ${n}] ${e}`:r?`>= ${t} ${e}`:o?`<= ${n} ${e}`:null},D=e=>{const t=[],n=(e=>{if(\"number\"!=typeof(null==e?void 0:e.multipleOf))return null;if(e.multipleOf<=0)return null;if(1===e.multipleOf)return null;const{multipleOf:t}=e;if(d()(t))return`multiple of ${t}`;const n=10**t.toString().split(\".\")[1].length;return`multiple of ${t*n}/${n}`})(e);null!==n&&t.push({scope:\"number\",value:n});const r=(e=>{const t=null==e?void 0:e.minimum,n=null==e?void 0:e.maximum,r=null==e?void 0:e.exclusiveMinimum,o=null==e?void 0:e.exclusiveMaximum,s=\"number\"==typeof t,i=\"number\"==typeof n,a=\"number\"==typeof r&&t<r,l=\"number\"==typeof o&&n>o;if(s&&i)return`${a?\"(\":\"[\"}${a?r:t}, ${l?o:n}${l?\")\":\"]\"}`;if(s)return`${a?\">\":\"≥\"} ${a?r:t}`;if(i)return`${l?\"<\":\"≤\"} ${l?o:n}`;return null})(e);null!==r&&t.push({scope:\"number\",value:r}),null!=e&&e.format&&t.push({scope:\"string\",value:e.format});const o=M(\"characters\",null==e?void 0:e.minLength,null==e?void 0:e.maxLength);null!==o&&t.push({scope:\"string\",value:o}),null!=e&&e.pattern&&t.push({scope:\"string\",value:`matches ${null==e?void 0:e.pattern}`}),null!=e&&e.contentMediaType&&t.push({scope:\"string\",value:`media type: ${e.contentMediaType}`}),null!=e&&e.contentEncoding&&t.push({scope:\"string\",value:`encoding: ${e.contentEncoding}`});const s=M(null!=e&&e.hasUniqueItems?\"unique items\":\"items\",null==e?void 0:e.minItems,null==e?void 0:e.maxItems);null!==s&&t.push({scope:\"array\",value:s});const i=M(\"contained items\",null==e?void 0:e.minContains,null==e?void 0:e.maxContains);null!==i&&t.push({scope:\"array\",value:i});const a=M(\"properties\",null==e?void 0:e.minProperties,null==e?void 0:e.maxProperties);return null!==a&&t.push({scope:\"object\",value:a}),t},F=(e,t)=>{var n;return null!=t&&t.dependentRequired?w()(x()(n=_()(t.dependentRequired)).call(n,((t,n)=>{let[r,o]=n;return l()(o)&&h()(o).call(o,e)?(t.add(r),t):t}),new(O()))):[]}},65077:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{withJSONSchemaContext:()=>H});var r=n(67294),o=n(22675),s=n(69359),i=n(7568),a=n(93460),l=n(64922),c=n(51338),u=n(72348),p=n(27655),h=n(36418),f=n(4685),d=n(46457),m=n(8776),g=n(13834),y=n(65174),v=n(40487),b=n(67401),w=n(67207),E=n(26076),x=n(93971),S=n(89206),_=n(38993),j=n(25472),O=n(36746),k=n(65253),A=n(42338),C=n(85828),P=n(6907),N=n(22285),I=n(91805),T=n(27308),R=n(69956),M=n(24539),D=n(3484),F=n(78137),L=n(79446),B=n(55148),$=n(26661),q=n(16456),U=n(15789),z=n(47349),V=n(36867),W=n(12260),J=n(69006),K=n(33499);const H=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={components:{JSONSchema:o.default,Keyword$schema:s.default,Keyword$vocabulary:i.default,Keyword$id:a.default,Keyword$anchor:l.default,Keyword$dynamicAnchor:c.default,Keyword$ref:u.default,Keyword$dynamicRef:p.default,Keyword$defs:h.default,Keyword$comment:f.default,KeywordAllOf:d.default,KeywordAnyOf:m.default,KeywordOneOf:g.default,KeywordNot:y.default,KeywordIf:v.default,KeywordThen:b.default,KeywordElse:w.default,KeywordDependentSchemas:E.default,KeywordPrefixItems:x.default,KeywordItems:S.default,KeywordContains:_.default,KeywordProperties:j.default,KeywordPatternProperties:O.default,KeywordAdditionalProperties:k.default,KeywordPropertyNames:A.default,KeywordUnevaluatedItems:C.default,KeywordUnevaluatedProperties:P.default,KeywordType:N.default,KeywordEnum:I.default,KeywordConst:T.default,KeywordConstraint:R.default,KeywordDependentRequired:M.default,KeywordContentSchema:D.default,KeywordTitle:F.default,KeywordDescription:L.default,KeywordDefault:B.default,KeywordDeprecated:$.default,KeywordReadOnly:q.default,KeywordWriteOnly:U.default,Accordion:z.default,ExpandDeepButton:V.default,ChevronRightIcon:W.default,...t.components},config:{default$schema:\"https://json-schema.org/draft/2020-12/schema\",defaultExpandedLevels:0,...t.config},fn:{upperFirst:K.upperFirst,getTitle:K.getTitle,getType:K.getType,isBooleanJSONSchema:K.isBooleanJSONSchema,hasKeyword:K.hasKeyword,isExpandable:K.isExpandable,stringify:K.stringify,stringifyConstraints:K.stringifyConstraints,getDependentRequired:K.getDependentRequired,...t.fn}},H=t=>r.createElement(J.JSONSchemaContext.Provider,{value:n},r.createElement(e,t));return H.contexts={JSONSchemaContext:J.JSONSchemaContext},H.displayName=e.displayName,H}},12603:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{useComponent:()=>l,useConfig:()=>a,useFn:()=>c,useIsCircular:()=>m,useIsEmbedded:()=>p,useIsExpanded:()=>h,useIsExpandedDeeply:()=>f,useLevel:()=>u,useRenderedSchemas:()=>d});var r=n(82737),o=n.n(r),s=n(67294),i=n(69006);const a=()=>{const{config:e}=(0,s.useContext)(i.JSONSchemaContext);return e},l=e=>{const{components:t}=(0,s.useContext)(i.JSONSchemaContext);return t[e]||null},c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:t}=(0,s.useContext)(i.JSONSchemaContext);return void 0!==e?t[e]:t},u=()=>{const e=(0,s.useContext)(i.JSONSchemaLevelContext);return[e,e+1]},p=()=>{const[e]=u();return e>0},h=()=>{const[e]=u(),{defaultExpandedLevels:t}=a();return t-e>0},f=()=>(0,s.useContext)(i.JSONSchemaDeepExpansionContext),d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e)return(0,s.useContext)(i.JSONSchemaCyclesContext);const t=(0,s.useContext)(i.JSONSchemaCyclesContext);return new(o())([...t,e])},m=e=>d().has(e)},97139:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>Z});var r=n(22675),o=n(69359),s=n(7568),i=n(93460),a=n(64922),l=n(51338),c=n(72348),u=n(27655),p=n(36418),h=n(4685),f=n(46457),d=n(8776),m=n(13834),g=n(65174),y=n(40487),v=n(67401),b=n(67207),w=n(26076),E=n(93971),x=n(89206),S=n(38993),_=n(25472),j=n(36746),O=n(65253),k=n(42338),A=n(85828),C=n(6907),P=n(22285),N=n(91805),I=n(27308),T=n(69956),R=n(24539),M=n(3484),D=n(78137),F=n(79446),L=n(55148),B=n(26661),$=n(16456),q=n(15789),U=n(47349),z=n(36867),V=n(12260),W=n(33499),J=n(78591),K=n(69006),H=n(12603),G=n(65077);const Z=()=>({components:{JSONSchema202012:r.default,JSONSchema202012Keyword$schema:o.default,JSONSchema202012Keyword$vocabulary:s.default,JSONSchema202012Keyword$id:i.default,JSONSchema202012Keyword$anchor:a.default,JSONSchema202012Keyword$dynamicAnchor:l.default,JSONSchema202012Keyword$ref:c.default,JSONSchema202012Keyword$dynamicRef:u.default,JSONSchema202012Keyword$defs:p.default,JSONSchema202012Keyword$comment:h.default,JSONSchema202012KeywordAllOf:f.default,JSONSchema202012KeywordAnyOf:d.default,JSONSchema202012KeywordOneOf:m.default,JSONSchema202012KeywordNot:g.default,JSONSchema202012KeywordIf:y.default,JSONSchema202012KeywordThen:v.default,JSONSchema202012KeywordElse:b.default,JSONSchema202012KeywordDependentSchemas:w.default,JSONSchema202012KeywordPrefixItems:E.default,JSONSchema202012KeywordItems:x.default,JSONSchema202012KeywordContains:S.default,JSONSchema202012KeywordProperties:_.default,JSONSchema202012KeywordPatternProperties:j.default,JSONSchema202012KeywordAdditionalProperties:O.default,JSONSchema202012KeywordPropertyNames:k.default,JSONSchema202012KeywordUnevaluatedItems:A.default,JSONSchema202012KeywordUnevaluatedProperties:C.default,JSONSchema202012KeywordType:P.default,JSONSchema202012KeywordEnum:N.default,JSONSchema202012KeywordConst:I.default,JSONSchema202012KeywordConstraint:T.default,JSONSchema202012KeywordDependentRequired:R.default,JSONSchema202012KeywordContentSchema:M.default,JSONSchema202012KeywordTitle:D.default,JSONSchema202012KeywordDescription:F.default,JSONSchema202012KeywordDefault:L.default,JSONSchema202012KeywordDeprecated:B.default,JSONSchema202012KeywordReadOnly:$.default,JSONSchema202012KeywordWriteOnly:q.default,JSONSchema202012Accordion:U.default,JSONSchema202012ExpandDeepButton:z.default,JSONSchema202012ChevronRightIcon:V.default,withJSONSchema202012Context:G.withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>K.JSONSchemaDeepExpansionContext},fn:{upperFirst:W.upperFirst,jsonSchema202012:{isExpandable:W.isExpandable,hasKeyword:W.hasKeyword,useFn:H.useFn,useConfig:H.useConfig,useComponent:H.useComponent,useIsExpandedDeeply:H.useIsExpandedDeeply,sampleFromSchema:J.sampleFromSchema,sampleFromSchemaGeneric:J.sampleFromSchemaGeneric,sampleEncoderAPI:J.encoderAPI,sampleFormatAPI:J.formatAPI,sampleMediaTypeAPI:J.mediaTypeAPI,createXMLExample:J.createXMLExample,memoizedSampleFromSchema:J.memoizedSampleFromSchema,memoizedCreateXMLExample:J.memoizedCreateXMLExample}}})},16648:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{booleanSchema:()=>i,objectSchema:()=>s,schema:()=>a});var r=n(45697),o=n.n(r);const s=o().object,i=o().bool,a=o().oneOfType([s,i])},9507:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const r=new(n(70674).default),o=(e,t)=>\"function\"==typeof t?r.register(e,t):null===t?r.unregister(e):r.get(e);o.getDefaults=()=>r.defaults;const s=o},22906:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});const r=new(n(14215).default),o=(e,t)=>\"function\"==typeof t?r.register(e,t):null===t?r.unregister(e):r.get(e)},90537:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const r=new(n(43782).default),o=(e,t)=>{if(\"function\"==typeof t)return r.register(e,t);if(null===t)return r.unregister(e);const n=e.split(\";\").at(0),o=`${n.split(\"/\").at(0)}/*`;return r.get(e)||r.get(n)||r.get(o)};o.getDefaults=()=>r.defaults;const s=o},70674:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>w});var r=n(61125),o=n.n(r),s=n(47667),i=n.n(s),a=n(28886),l=n.n(a),c=n(14215),u=n(41433),p=n(58509),h=n(44366),f=n(65037),d=n(5709),m=n(54180),g=n(91967);function y(e,t,n){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,n)}var v=new(l());class b extends c.default{constructor(){super(...arguments),y(this,v,{writable:!0,value:{\"7bit\":u.default,\"8bit\":p.default,binary:h.default,\"quoted-printable\":f.default,base16:d.default,base32:m.default,base64:g.default}}),o()(this,\"data\",{...i()(this,v)})}get defaults(){return{...i()(this,v)}}}const w=b},43782:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>v});var r=n(61125),o=n.n(r),s=n(47667),i=n.n(s),a=n(28886),l=n.n(a),c=n(14215),u=n(65378),p=n(46724),h=n(54342),f=n(92974),d=n(2672);function m(e,t,n){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,n)}var g=new(l());class y extends c.default{constructor(){super(...arguments),m(this,g,{writable:!0,value:{...u.default,...p.default,...h.default,...f.default,...d.default}}),o()(this,\"data\",{...i()(this,g)})}get defaults(){return{...i()(this,g)}}}const v=y},14215:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(61125),o=n.n(r);const s=class{constructor(){o()(this,\"data\",{})}register(e,t){this.data[e]=t}unregister(e){void 0===e?this.data={}:delete this.data[e]}get(e){return this.data[e]}}},84539:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ALL_TYPES:()=>o,SCALAR_TYPES:()=>r});const r=[\"number\",\"integer\",\"string\",\"boolean\",\"null\"],o=[\"array\",\"object\",...r]},13783:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{extractExample:()=>a,hasExample:()=>i});var r=n(58309),o=n.n(r),s=n(23084);const i=e=>{if(!(0,s.isJSONSchemaObject)(e))return!1;const{examples:t,example:n,default:r}=e;return!!(o()(t)&&t.length>=1)||(void 0!==r||void 0!==n)},a=e=>{if(!(0,s.isJSONSchemaObject)(e))return null;const{examples:t,example:n,default:r}=e;return o()(t)&&t.length>=1?t.at(0):void 0!==r?r:void 0!==n?n:void 0}},37078:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>v});var r=n(58309),o=n.n(r),s=n(39022),i=n.n(s),a=n(25110),l=n.n(a),c=n(82737),u=n.n(c),p=n(28222),h=n.n(p),f=n(14418),d=n.n(f),m=n(90242),g=n(23084);const y=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if((0,g.isBooleanJSONSchema)(e)&&!0===e)return!0;if((0,g.isBooleanJSONSchema)(e)&&!1===e)return!1;if((0,g.isBooleanJSONSchema)(t)&&!0===t)return!0;if((0,g.isBooleanJSONSchema)(t)&&!1===t)return!1;if(!(0,g.isJSONSchema)(e))return t;if(!(0,g.isJSONSchema)(t))return e;const r={...t,...e};if(t.type&&e.type&&o()(t.type)&&\"string\"==typeof t.type){var s;const n=i()(s=(0,m.AF)(t.type)).call(s,e.type);r.type=l()(new(u())(n))}if(o()(t.required)&&o()(e.required)&&(r.required=[...new(u())([...e.required,...t.required])]),t.properties&&e.properties){const o=new(u())([...h()(t.properties),...h()(e.properties)]);r.properties={};for(const s of o){const o=t.properties[s]||{},i=e.properties[s]||{};var a;if(o.readOnly&&!n.includeReadOnly||o.writeOnly&&!n.includeWriteOnly)r.required=d()(a=r.required||[]).call(a,(e=>e!==s));else r.properties[s]=y(i,o,n)}}return(0,g.isJSONSchema)(t.items)&&(0,g.isJSONSchema)(e.items)&&(r.items=y(e.items,t.items,n)),(0,g.isJSONSchema)(t.contains)&&(0,g.isJSONSchema)(e.contains)&&(r.contains=y(e.contains,t.contains,n)),(0,g.isJSONSchema)(t.contentSchema)&&(0,g.isJSONSchema)(e.contentSchema)&&(r.contentSchema=y(e.contentSchema,t.contentSchema,n)),r},v=y},23084:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{isBooleanJSONSchema:()=>s,isJSONSchema:()=>a,isJSONSchemaObject:()=>i});var r=n(68630),o=n.n(r);const s=e=>\"boolean\"==typeof e,i=e=>o()(e),a=e=>s(e)||i(e)},35202:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{bytes:()=>a,integer:()=>h,number:()=>p,pick:()=>c,randexp:()=>l,string:()=>u});var r=n(92282),o=n.n(r),s=n(14419),i=n.n(s);const a=e=>o()(e),l=e=>{try{return new(i())(e).gen()}catch{return\"string\"}},c=e=>e.at(0),u=()=>\"string\",p=()=>0,h=()=>0},96276:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{foldType:()=>_,getType:()=>O,inferType:()=>j});var r=n(58309),o=n.n(r),s=n(91086),i=n.n(s),a=n(58118),l=n.n(a),c=n(19030),u=n.n(c),p=n(28222),h=n.n(p),f=n(97606),d=n.n(f),m=n(14418),g=n.n(m),y=n(84539),v=n(23084),b=n(35202),w=n(13783);const E={array:[\"items\",\"prefixItems\",\"contains\",\"maxContains\",\"minContains\",\"maxItems\",\"minItems\",\"uniqueItems\",\"unevaluatedItems\"],object:[\"properties\",\"additionalProperties\",\"patternProperties\",\"propertyNames\",\"minProperties\",\"maxProperties\",\"required\",\"dependentSchemas\",\"dependentRequired\",\"unevaluatedProperties\"],string:[\"pattern\",\"format\",\"minLength\",\"maxLength\",\"contentEncoding\",\"contentMediaType\",\"contentSchema\"],integer:[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\",\"multipleOf\"]};E.number=E.integer;const x=\"string\",S=e=>void 0===e?null:null===e?\"null\":o()(e)?\"array\":i()(e)?\"integer\":typeof e,_=e=>{if(o()(e)&&e.length>=1){if(l()(e).call(e,\"array\"))return\"array\";if(l()(e).call(e,\"object\"))return\"object\";{const t=(0,b.pick)(e);if(l()(y.ALL_TYPES).call(y.ALL_TYPES,t))return t}}return l()(y.ALL_TYPES).call(y.ALL_TYPES,e)?e:null},j=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new(u());if(!(0,v.isJSONSchemaObject)(e))return x;if(t.has(e))return x;t.add(e);let{type:n,const:r}=e;if(n=_(n),\"string\"!=typeof n){const t=h()(E);e:for(let r=0;r<t.length;r+=1){const o=t[r],s=E[o];for(let t=0;t<s.length;t+=1){const r=s[t];if(Object.hasOwn(e,r)){n=o;break e}}}}if(\"string\"!=typeof n&&void 0!==r){const e=S(r);n=\"string\"==typeof e?e:n}if(\"string\"!=typeof n){const r=n=>{if(o()(e[n])){var r;const o=d()(r=e[n]).call(r,(e=>j(e,t)));return _(o)}return null},i=r(\"allOf\"),a=r(\"anyOf\"),l=r(\"oneOf\"),c=e.not?j(e.not,t):null;var s;if(i||a||l||c)n=_(g()(s=[i,a,l,c]).call(s,Boolean))}if(\"string\"!=typeof n&&(0,w.hasExample)(e)){const t=(0,w.extractExample)(e),r=S(t);n=\"string\"==typeof r?r:n}return t.delete(e),n||x},O=e=>j(e)},99346:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{fromJSONBooleanSchema:()=>o,typeCast:()=>s});var r=n(23084);const o=e=>!1===e?{not:{}}:{},s=e=>(0,r.isBooleanJSONSchema)(e)?o(e):(0,r.isJSONSchemaObject)(e)?e:{}},41433:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"ascii\")},58509:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"utf8\")},5709:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"hex\")},54180:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>{const t=r.from(e).toString(\"utf8\"),n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";let o=0,s=\"\",i=0,a=0;for(let e=0;e<t.length;e++)for(i=i<<8|t.charCodeAt(e),a+=8;a>=5;)s+=n.charAt(i>>>a-5&31),a-=5;a>0&&(s+=n.charAt(i<<5-a&31),o=(8-8*t.length%5)%5);for(let e=0;e<o;e++)s+=\"=\";return s}},91967:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"base64\")},44366:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"binary\")},65037:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(24278),o=n.n(r);const s=e=>{let t=\"\";for(let s=0;s<e.length;s++){const i=e.charCodeAt(s);if(61===i)t+=\"=3D\";else if(i>=33&&i<=60||i>=62&&i<=126||9===i||32===i)t+=e.charAt(s);else if(13===i||10===i)t+=\"\\r\\n\";else if(i>126){const r=unescape(encodeURIComponent(e.charAt(s)));for(let e=0;e<r.length;e++){var n;t+=\"=\"+o()(n=\"0\"+r.charCodeAt(e).toString(16)).call(n,-2).toUpperCase()}}else{var r;t+=\"=\"+o()(r=\"0\"+i.toString(16)).call(r,-2).toUpperCase()}}return t}},74045:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>(new Date).toISOString()},81456:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>(new Date).toISOString().substring(0,10)},560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>.1},64299:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"P3D\"},3981:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"user@example.com\"},51890:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>.1},69375:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"example.com\"},94518:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"실례@example.com\"},70273:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"실례.com\"},57864:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>2**30>>>0},21726:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>2**53-1},28793:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"198.51.100.42\"},98269:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\"},45693:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"path/실례.html\"},13080:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"https://실례.com/\"},37856:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"/a/b/c\"},2672:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(57740),o=n.n(r),s=n(35202);const i={\"application/json\":()=>'{\"key\":\"value\"}',\"application/ld+json\":()=>'{\"name\": \"John Doe\"}',\"application/x-httpd-php\":()=>\"<?php echo '<p>Hello World!</p>'; ?>\",\"application/rtf\":()=>o()`{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1`,\"application/x-sh\":()=>'echo \"Hello World!\"',\"application/xhtml+xml\":()=>\"<p>content</p>\",\"application/*\":()=>(0,s.bytes)(25).toString(\"binary\")}},54342:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(35202);const o={\"audio/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},46724:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(35202);const o={\"image/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},65378:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r={\"text/plain\":()=>\"string\",\"text/css\":()=>\".selector { border: 1px solid red }\",\"text/csv\":()=>\"value1,value2,value3\",\"text/html\":()=>\"<p>content</p>\",\"text/calendar\":()=>\"BEGIN:VCALENDAR\",\"text/javascript\":()=>\"console.dir('Hello world!');\",\"text/xml\":()=>'<person age=\"30\">John Doe</person>',\"text/*\":()=>\"string\"}},92974:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(35202);const o={\"video/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},93393:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"********\"},4335:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"^[a-z]+$\"},80375:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"1/0\"},65243:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>(new Date).toISOString().substring(11)},94692:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"path/index.html\"},83829:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"https://example.com/dictionary/{term:1}/{term}\"},52978:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"https://example.com/\"},38859:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\"},78591:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>r.createXMLExample,encoderAPI:()=>o.default,formatAPI:()=>s.default,mediaTypeAPI:()=>i.default,memoizedCreateXMLExample:()=>r.memoizedCreateXMLExample,memoizedSampleFromSchema:()=>r.memoizedSampleFromSchema,sampleFromSchema:()=>r.sampleFromSchema,sampleFromSchemaGeneric:()=>r.sampleFromSchemaGeneric});var r=n(94277),o=n(9507),s=n(22906),i=n(90537)},94277:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>M,memoizedCreateXMLExample:()=>L,memoizedSampleFromSchema:()=>B,sampleFromSchema:()=>D,sampleFromSchemaGeneric:()=>R});var r=n(58309),o=n.n(r),s=n(91086),i=n.n(s),a=n(86),l=n.n(a),c=n(51679),u=n.n(c),p=n(58118),h=n.n(p),f=n(39022),d=n.n(f),m=n(97606),g=n.n(m),y=n(35627),v=n.n(y),b=n(53479),w=n.n(b),E=n(41609),x=n.n(E),S=n(68630),_=n.n(S),j=n(90242),O=n(60314),k=n(63273),A=n(96276),C=n(99346),P=n(13783),N=n(35202),I=n(37078),T=n(23084);const R=function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];\"function\"==typeof(null===(t=e)||void 0===t?void 0:t.toJS)&&(e=e.toJS()),e=(0,C.typeCast)(e);let a=void 0!==r||(0,P.hasExample)(e);const c=!a&&o()(e.oneOf)&&e.oneOf.length>0,p=!a&&o()(e.anyOf)&&e.anyOf.length>0;if(!a&&(c||p)){const t=(0,C.typeCast)(c?(0,N.pick)(e.oneOf):(0,N.pick)(e.anyOf));!(e=(0,I.default)(e,t,n)).xml&&t.xml&&(e.xml=t.xml),(0,P.hasExample)(e)&&(0,P.hasExample)(t)&&(a=!0)}const f={};let{xml:m,properties:y,additionalProperties:v,items:b,contains:w}=e||{},E=(0,A.getType)(e),{includeReadOnly:S,includeWriteOnly:O}=n;m=m||{};let M,{name:D,prefix:F,namespace:L}=m,B={};if(Object.hasOwn(e,\"type\")||(e.type=E),s&&(D=D||\"notagname\",M=(F?`${F}:`:\"\")+D,L)){f[F?`xmlns:${F}`:\"xmlns\"]=L}s&&(B[M]=[]);const $=(0,j.mz)(y);let q,U=0;const z=()=>i()(e.maxProperties)&&e.maxProperties>0&&U>=e.maxProperties,V=t=>!(i()(e.maxProperties)&&e.maxProperties>0)||!z()&&(!(t=>{var n;return!o()(e.required)||0===e.required.length||!h()(n=e.required).call(n,t)})(t)||e.maxProperties-U-(()=>{if(!o()(e.required)||0===e.required.length)return 0;let t=0;var n,r;return s?l()(n=e.required).call(n,(e=>t+=void 0===B[e]?0:1)):l()(r=e.required).call(r,(e=>{var n;t+=void 0===(null===(n=B[M])||void 0===n?void 0:u()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(q=s?function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&$[t]){if($[t].xml=$[t].xml||{},$[t].xml.attribute){const e=o()($[t].enum)?(0,N.pick)($[t].enum):void 0;if((0,P.hasExample)($[t]))f[$[t].xml.name||t]=(0,P.extractExample)($[t]);else if(void 0!==e)f[$[t].xml.name||t]=e;else{const e=(0,C.typeCast)($[t]),n=(0,A.getType)(e),r=$[t].xml.name||t;f[r]=k.default[n](e)}return}$[t].xml.name=$[t].xml.name||t}else $[t]||!1===v||($[t]={xml:{name:t}});let i=R($[t],n,r,s);var a;V(t)&&(U++,o()(i)?B[M]=d()(a=B[M]).call(a,i):B[M].push(i))}:(t,r)=>{var o;if(V(t)){if(_()(null===(o=e.discriminator)||void 0===o?void 0:o.mapping)&&e.discriminator.propertyName===t&&\"string\"==typeof e.$$ref){for(const n in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[n])){B[t]=n;break}}else B[t]=R($[t],n,r,s);U++}},a){let t;if(t=void 0!==r?r:(0,P.extractExample)(e),!s){if(\"number\"==typeof t&&\"string\"===E)return`${t}`;if(\"string\"!=typeof t||\"string\"===E)return t;try{return JSON.parse(t)}catch{return t}}if(\"array\"===E){if(!o()(t)){if(\"string\"==typeof t)return t;t=[t]}let r=[];return(0,T.isJSONSchemaObject)(b)&&(b.xml=b.xml||m||{},b.xml.name=b.xml.name||m.name,r=g()(t).call(t,(e=>R(b,n,e,s)))),(0,T.isJSONSchemaObject)(w)&&(w.xml=w.xml||m||{},w.xml.name=w.xml.name||m.name,r=[R(w,n,void 0,s),...r]),r=k.default.array(e,{sample:r}),m.wrapped?(B[M]=r,x()(f)||B[M].push({_attr:f})):B=r,B}if(\"object\"===E){if(\"string\"==typeof t)return t;for(const e in t){var W,J,K,H;Object.hasOwn(t,e)&&(null!==(W=$[e])&&void 0!==W&&W.readOnly&&!S||null!==(J=$[e])&&void 0!==J&&J.writeOnly&&!O||(null!==(K=$[e])&&void 0!==K&&null!==(H=K.xml)&&void 0!==H&&H.attribute?f[$[e].xml.name||e]=t[e]:q(e,t[e])))}return x()(f)||B[M].push({_attr:f}),B}return B[M]=x()(f)?t:[{_attr:f},t],B}if(\"array\"===E){let t=[];var G,Z;if((0,T.isJSONSchemaObject)(w))if(s&&(w.xml=w.xml||e.xml||{},w.xml.name=w.xml.name||m.name),o()(w.anyOf))t.push(...g()(G=w.anyOf).call(G,(e=>R((0,I.default)(e,w,n),n,void 0,s))));else if(o()(w.oneOf)){var Y;t.push(...g()(Y=w.oneOf).call(Y,(e=>R((0,I.default)(e,w,n),n,void 0,s))))}else{if(!(!s||s&&m.wrapped))return R(w,n,void 0,s);t.push(R(w,n,void 0,s))}if((0,T.isJSONSchemaObject)(b))if(s&&(b.xml=b.xml||e.xml||{},b.xml.name=b.xml.name||m.name),o()(b.anyOf))t.push(...g()(Z=b.anyOf).call(Z,(e=>R((0,I.default)(e,b,n),n,void 0,s))));else if(o()(b.oneOf)){var X;t.push(...g()(X=b.oneOf).call(X,(e=>R((0,I.default)(e,b,n),n,void 0,s))))}else{if(!(!s||s&&m.wrapped))return R(b,n,void 0,s);t.push(R(b,n,void 0,s))}return t=k.default.array(e,{sample:t}),s&&m.wrapped?(B[M]=t,x()(f)||B[M].push({_attr:f}),B):t}if(\"object\"===E){for(let e in $){var Q,ee,te;Object.hasOwn($,e)&&(null!==(Q=$[e])&&void 0!==Q&&Q.deprecated||null!==(ee=$[e])&&void 0!==ee&&ee.readOnly&&!S||null!==(te=$[e])&&void 0!==te&&te.writeOnly&&!O||q(e))}if(s&&f&&B[M].push({_attr:f}),z())return B;if((0,T.isBooleanJSONSchema)(v))s?B[M].push({additionalProp:\"Anything can be here\"}):B.additionalProp1={},U++;else if((0,T.isJSONSchemaObject)(v)){var ne,re;const t=v,r=R(t,n,void 0,s);if(s&&\"string\"==typeof(null==t||null===(ne=t.xml)||void 0===ne?void 0:ne.name)&&\"notagname\"!==(null==t||null===(re=t.xml)||void 0===re?void 0:re.name))B[M].push(r);else{const t=i()(e.minProperties)&&e.minProperties>0&&U<e.minProperties?e.minProperties-U:3;for(let e=1;e<=t;e++){if(z())return B;if(s){const t={};t[\"additionalProp\"+e]=r.notagname,B[M].push(t)}else B[\"additionalProp\"+e]=r;U++}}}return B}let oe;if(void 0!==e.const)oe=e.const;else if(e&&o()(e.enum))oe=(0,N.pick)((0,j.AF)(e.enum));else{const t=(0,T.isJSONSchemaObject)(e.contentSchema)?R(e.contentSchema,n,void 0,s):void 0;oe=k.default[E](e,{sample:t})}return s?(B[M]=x()(f)?oe:[{_attr:f},oe],B):oe},M=(e,t,n)=>{const r=R(e,t,n,!0);if(r)return\"string\"==typeof r?r:w()(r,{declaration:!0,indent:\"\\t\"})},D=(e,t,n)=>R(e,t,n,!1),F=(e,t,n)=>[e,v()(t),v()(n)],L=(0,O.Z)(M,F),B=(0,O.Z)(D,F)},83982:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{applyArrayConstraints:()=>p,default:()=>h});var r=n(91086),o=n.n(r),s=n(24278),i=n.n(s),a=n(25110),l=n.n(a),c=n(82737),u=n.n(c);const p=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:n,maxItems:r,uniqueItems:s}=t,{contains:a,minContains:c,maxContains:p}=t;let h=[...e];if(null!=a&&\"object\"==typeof a){if(o()(c)&&c>1){const e=h.at(0);for(let t=1;t<c;t+=1)h.unshift(e)}o()(p)}if(o()(r)&&r>0&&(h=i()(e).call(e,0,r)),o()(n)&&n>0)for(let e=0;h.length<n;e+=1)h.push(h[e%h.length]);return!0===s&&(h=l()(new(u())(h))),h},h=(e,t)=>{let{sample:n}=t;return p(n,e)}},34108:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=e=>\"boolean\"!=typeof e.default||e.default},63273:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(83982),o=n(46852),s=n(74522),i=n(83455),a=n(58864),l=n(34108),c=n(90853);const u={array:r.default,object:o.default,string:s.default,number:i.default,integer:a.default,boolean:l.default,null:c.default},p=new Proxy(u,{get:(e,t)=>\"string\"==typeof t&&Object.hasOwn(e,t)?e[t]:()=>`Unknown Type: ${t}`})},58864:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(35202),o=n(22906),s=n(57864),i=n(21726);const a=e=>{const{format:t}=e;return\"string\"==typeof t?(e=>{const{format:t}=e,n=(0,o.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"int32\":return(0,s.default)();case\"int64\":return(0,i.default)()}return(0,r.integer)()})(e):(0,r.integer)()}},90853:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>null},83455:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(91086),o=n.n(r),s=n(44081),i=n.n(s),a=n(35202),l=n(22906),c=n(51890),u=n(560);const p=e=>{const{format:t}=e;let n;return n=\"string\"==typeof t?(e=>{const{format:t}=e,n=(0,l.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"float\":return(0,c.default)();case\"double\":return(0,u.default)()}return(0,a.number)()})(e):(0,a.number)(),function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:n,maximum:r,exclusiveMinimum:s,exclusiveMaximum:a}=t,{multipleOf:l}=t,c=o()(e)?1:i();let u=\"number\"==typeof n?n:null,p=\"number\"==typeof r?r:null,h=e;if(\"number\"==typeof s&&(u=null!==u?Math.max(u,s+c):s+c),\"number\"==typeof a&&(p=null!==p?Math.min(p,a-c):a-c),h=u>p&&e||u||p||h,\"number\"==typeof l&&l>0){const e=h%l;h=0===e?h:h+l-e}return h}(n,e)}},46852:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>{throw new Error(\"Not implemented\")}},74522:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>L});var r=n(91086),o=n.n(r),s=n(24278),i=n.n(s),a=n(58309),l=n.n(a),c=n(35627),u=n.n(c),p=n(6557),h=n.n(p),f=n(35202),d=n(23084),m=n(3981),g=n(94518),y=n(69375),v=n(70273),b=n(28793),w=n(98269),E=n(52978),x=n(94692),S=n(13080),_=n(45693),j=n(38859),O=n(83829),k=n(37856),A=n(80375),C=n(74045),P=n(81456),N=n(65243),I=n(64299),T=n(93393),R=n(4335),M=n(22906),D=n(9507),F=n(90537);const L=function(e){let{sample:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:n,contentMediaType:r,contentSchema:s}=e,{pattern:a,format:c}=e,p=(0,D.default)(n)||h();let L;if(\"string\"==typeof a)L=(0,f.randexp)(a);else if(\"string\"==typeof c)L=(e=>{const{format:t}=e,n=(0,M.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"email\":return(0,m.default)();case\"idn-email\":return(0,g.default)();case\"hostname\":return(0,y.default)();case\"idn-hostname\":return(0,v.default)();case\"ipv4\":return(0,b.default)();case\"ipv6\":return(0,w.default)();case\"uri\":return(0,E.default)();case\"uri-reference\":return(0,x.default)();case\"iri\":return(0,S.default)();case\"iri-reference\":return(0,_.default)();case\"uuid\":return(0,j.default)();case\"uri-template\":return(0,O.default)();case\"json-pointer\":return(0,k.default)();case\"relative-json-pointer\":return(0,A.default)();case\"date-time\":return(0,C.default)();case\"date\":return(0,P.default)();case\"time\":return(0,N.default)();case\"duration\":return(0,I.default)();case\"password\":return(0,T.default)();case\"regex\":return(0,R.default)()}return(0,f.string)()})(e);else if((0,d.isJSONSchema)(s)&&\"string\"==typeof r&&void 0!==t)L=l()(t)||\"object\"==typeof t?u()(t):String(t);else if(\"string\"==typeof r){const t=(0,F.default)(r);\"function\"==typeof t&&(L=t(e))}else L=(0,f.string)();return p(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:n,minLength:r}=t;let s=e;if(o()(n)&&n>0&&(s=i()(s).call(s,0,n)),o()(r)&&r>0){let e=0;for(;s.length<r;)s+=s[e++%s.length]}return s}(L,e))}},25474:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{SHOW:()=>a,UPDATE_FILTER:()=>s,UPDATE_LAYOUT:()=>o,UPDATE_MODE:()=>i,changeMode:()=>p,show:()=>u,updateFilter:()=>c,updateLayout:()=>l});var r=n(90242);const o=\"layout_update_layout\",s=\"layout_update_filter\",i=\"layout_update_mode\",a=\"layout_show\";function l(e){return{type:o,payload:e}}function c(e){return{type:s,payload:e}}function u(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,r.AF)(e),{type:a,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return e=(0,r.AF)(e),{type:i,payload:{thing:e,mode:t}}}},26821:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(5672),o=n(25474),s=n(4400),i=n(28989);function a(){return{statePlugins:{layout:{reducers:r.default,actions:o,selectors:s},spec:{wrapSelectors:i}}}}},5672:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(39022),o=n.n(r),s=n(43393),i=n(25474);const a={[i.UPDATE_LAYOUT]:(e,t)=>e.set(\"layout\",t.payload),[i.UPDATE_FILTER]:(e,t)=>e.set(\"filter\",t.payload),[i.SHOW]:(e,t)=>{const n=t.payload.shown,r=(0,s.fromJS)(t.payload.thing);return e.update(\"shown\",(0,s.fromJS)({}),(e=>e.set(r,n)))},[i.UPDATE_MODE]:(e,t)=>{var n;let r=t.payload.thing,s=t.payload.mode;return e.setIn(o()(n=[\"modes\"]).call(n,r),(s||\"\")+\"\")}}},4400:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{current:()=>i,currentFilter:()=>a,isShown:()=>l,showSummary:()=>u,whatMode:()=>c});var r=n(20573),o=n(90242),s=n(43393);const i=e=>e.get(\"layout\"),a=e=>e.get(\"filter\"),l=(e,t,n)=>(t=(0,o.AF)(t),e.get(\"shown\",(0,s.fromJS)({})).get((0,s.fromJS)(t),n)),c=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\";return t=(0,o.AF)(t),e.getIn([\"modes\",...t],n)},u=(0,r.P1)((e=>e),(e=>!l(e,\"editor\")))},28989:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{taggedOperations:()=>s});var r=n(24278),o=n.n(r);const s=(e,t)=>function(n){for(var r=arguments.length,s=new Array(r>1?r-1:0),i=1;i<r;i++)s[i-1]=arguments[i];let a=e(n,...s);const{fn:l,layoutSelectors:c,getConfigs:u}=t.getSystem(),p=u(),{maxDisplayedTags:h}=p;let f=c.currentFilter();return f&&!0!==f&&\"true\"!==f&&\"false\"!==f&&(a=l.opsFilter(a,f)),h&&!isNaN(h)&&h>=0&&(a=o()(a).call(a,0,h)),a}},9150:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(11189),o=n.n(r);function s(e){let{configs:t}=e;const n={debug:0,info:1,log:2,warn:3,error:4},r=e=>n[e]||-1;let{logLevel:s}=t,i=r(s);function a(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];r(e)>=i&&console[e](...n)}return a.warn=o()(a).call(a,null,\"warn\"),a.error=o()(a).call(a,null,\"error\"),a.info=o()(a).call(a,null,\"info\"),a.debug=o()(a).call(a,null,\"debug\"),{rootInjects:{log:a}}}},67002:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>h,CLEAR_REQUEST_BODY_VALUE:()=>f,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>a,UPDATE_REQUEST_BODY_INCLUSION:()=>i,UPDATE_REQUEST_BODY_VALUE:()=>o,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>s,UPDATE_REQUEST_CONTENT_TYPE:()=>l,UPDATE_RESPONSE_CONTENT_TYPE:()=>c,UPDATE_SELECTED_SERVER:()=>r,UPDATE_SERVER_VARIABLE_VALUE:()=>u,clearRequestBodyValidateError:()=>S,clearRequestBodyValue:()=>j,initRequestBodyValidateError:()=>_,setActiveExamplesMember:()=>v,setRequestBodyInclusion:()=>y,setRequestBodyValidateError:()=>x,setRequestBodyValue:()=>m,setRequestContentType:()=>b,setResponseContentType:()=>w,setRetainRequestBodyValueFlag:()=>g,setSelectedServer:()=>d,setServerVariableValue:()=>E});const r=\"oas3_set_servers\",o=\"oas3_set_request_body_value\",s=\"oas3_set_request_body_retain_flag\",i=\"oas3_set_request_body_inclusion\",a=\"oas3_set_active_examples_member\",l=\"oas3_set_request_content_type\",c=\"oas3_set_response_content_type\",u=\"oas3_set_server_variable_value\",p=\"oas3_set_request_body_validate_error\",h=\"oas3_clear_request_body_validate_error\",f=\"oas3_clear_request_body_value\";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){let{value:t,pathMethod:n}=e;return{type:o,payload:{value:t,pathMethod:n}}}const g=e=>{let{value:t,pathMethod:n}=e;return{type:s,payload:{value:t,pathMethod:n}}};function y(e){let{value:t,pathMethod:n,name:r}=e;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function v(e){let{name:t,pathMethod:n,contextType:r,contextName:o}=e;return{type:a,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){let{value:t,pathMethod:n}=e;return{type:l,payload:{value:t,pathMethod:n}}}function w(e){let{value:t,path:n,method:r}=e;return{type:c,payload:{value:t,path:n,method:r}}}function E(e){let{server:t,namespace:n,key:r,val:o}=e;return{type:u,payload:{server:t,namespace:n,key:r,val:o}}}const x=e=>{let{path:t,method:n,validationErrors:r}=e;return{type:p,payload:{path:t,method:n,validationErrors:r}}},S=e=>{let{path:t,method:n}=e;return{type:h,payload:{path:t,method:n}}},_=e=>{let{pathMethod:t}=e;return{type:h,payload:{path:t[0],method:t[1]}}},j=e=>{let{pathMethod:t}=e;return{type:f,payload:{pathMethod:t}}}},73723:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{definitionsToAuthorize:()=>p});var r=n(86),o=n.n(r),s=n(14418),i=n.n(s),a=n(24282),l=n.n(a),c=n(20573),u=n(43393);const p=(h=(0,c.P1)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var n;let r=(0,u.List)();return t?(o()(n=t.entrySeq()).call(n,(e=>{let[t,n]=e;const s=n.get(\"type\");var a;if(\"oauth2\"===s&&o()(a=n.get(\"flows\").entrySeq()).call(a,(e=>{let[o,s]=e,a=(0,u.fromJS)({flow:o,authorizationUrl:s.get(\"authorizationUrl\"),tokenUrl:s.get(\"tokenUrl\"),scopes:s.get(\"scopes\"),type:n.get(\"type\"),description:n.get(\"description\")});r=r.push(new u.Map({[t]:i()(a).call(a,(e=>void 0!==e))}))})),\"http\"!==s&&\"apiKey\"!==s||(r=r.push(new u.Map({[t]:n}))),\"openIdConnect\"===s&&n.get(\"openIdConnectData\")){let e=n.get(\"openIdConnectData\"),s=e.get(\"grant_types_supported\")||[\"authorization_code\",\"implicit\"];o()(s).call(s,(o=>{var s;let a=e.get(\"scopes_supported\")&&l()(s=e.get(\"scopes_supported\")).call(s,((e,t)=>e.set(t,\"\")),new u.Map),c=(0,u.fromJS)({flow:o,authorizationUrl:e.get(\"authorization_endpoint\"),tokenUrl:e.get(\"token_endpoint\"),scopes:a,type:\"oauth2\",openIdConnectUrl:n.get(\"openIdConnectUrl\")});r=r.push(new u.Map({[t]:i()(c).call(c,(e=>void 0!==e))}))}))}})),r):r})),(e,t)=>function(){for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];if(t.getSystem().specSelectors.isOAS3()){let e=t.getState().getIn([\"spec\",\"resolvedSubtrees\",\"components\",\"securitySchemes\"]);return h(t,e,...r)}return e(...r)});var h},33427:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294);n(23930);const l=e=>{let{callbacks:t,specPath:n,specSelectors:r,getComponent:s}=e;const l=r.callbacksOperations({callbacks:t,specPath:n}),c=o()(l),u=s(\"OperationContainer\",!0);return 0===c.length?a.createElement(\"span\",null,\"No callbacks\"):a.createElement(\"div\",null,i()(c).call(c,(e=>{var t;return a.createElement(\"div\",{key:`${e}`},a.createElement(\"h2\",null,e),i()(t=l[e]).call(t,(t=>a.createElement(u,{key:`${e}-${t.path}-${t.method}`,op:t.operation,tag:\"callbacks\",method:t.method,path:t.path,specPath:t.specPath,allowTryItOut:!1}))))})))}},86775:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(61125),o=n.n(r),s=n(76986),i=n.n(s),a=n(14418),l=n.n(a),c=n(97606),u=n.n(c),p=n(67294);class h extends p.Component{constructor(e,t){super(e,t),o()(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:n,name:r}=e.target,o=i()({},this.state.value);r?o[r]=n:o=n,this.setState({value:o},(()=>t(this.state)))}));let{name:n,schema:r}=this.props,s=this.getValue();this.state={name:n,schema:r,value:s}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e;let{schema:t,getComponent:n,errSelectors:r,name:o}=this.props;const s=n(\"Input\"),i=n(\"Row\"),a=n(\"Col\"),c=n(\"authError\"),h=n(\"Markdown\",!0),f=n(\"JumpToPath\",!0),d=(t.get(\"scheme\")||\"\").toLowerCase();let m=this.getValue(),g=l()(e=r.allErrors()).call(e,(e=>e.get(\"authId\")===o));if(\"basic\"===d){var y;let e=m?m.get(\"username\"):null;return p.createElement(\"div\",null,p.createElement(\"h4\",null,p.createElement(\"code\",null,o||t.get(\"name\")),\"  (http, Basic)\",p.createElement(f,{path:[\"securityDefinitions\",o]})),e&&p.createElement(\"h6\",null,\"Authorized\"),p.createElement(i,null,p.createElement(h,{source:t.get(\"description\")})),p.createElement(i,null,p.createElement(\"label\",null,\"Username:\"),e?p.createElement(\"code\",null,\" \",e,\" \"):p.createElement(a,null,p.createElement(s,{type:\"text\",required:\"required\",name:\"username\",\"aria-label\":\"auth-basic-username\",onChange:this.onChange,autoFocus:!0}))),p.createElement(i,null,p.createElement(\"label\",null,\"Password:\"),e?p.createElement(\"code\",null,\" ****** \"):p.createElement(a,null,p.createElement(s,{autoComplete:\"new-password\",name:\"password\",type:\"password\",\"aria-label\":\"auth-basic-password\",onChange:this.onChange}))),u()(y=g.valueSeq()).call(y,((e,t)=>p.createElement(c,{error:e,key:t}))))}var v;return\"bearer\"===d?p.createElement(\"div\",null,p.createElement(\"h4\",null,p.createElement(\"code\",null,o||t.get(\"name\")),\"  (http, Bearer)\",p.createElement(f,{path:[\"securityDefinitions\",o]})),m&&p.createElement(\"h6\",null,\"Authorized\"),p.createElement(i,null,p.createElement(h,{source:t.get(\"description\")})),p.createElement(i,null,p.createElement(\"label\",null,\"Value:\"),m?p.createElement(\"code\",null,\" ****** \"):p.createElement(a,null,p.createElement(s,{type:\"text\",\"aria-label\":\"auth-bearer-value\",onChange:this.onChange,autoFocus:!0}))),u()(v=g.valueSeq()).call(v,((e,t)=>p.createElement(c,{error:e,key:t})))):p.createElement(\"div\",null,p.createElement(\"em\",null,p.createElement(\"b\",null,o),\" HTTP authentication: unsupported scheme \",`'${d}'`))}}},76467:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(33427),o=n(42458),s=n(15757),i=n(56617),a=n(9928),l=n(45327),c=n(86775),u=n(96796);const p={Callbacks:r.default,HttpAuth:c.default,RequestBody:o.default,Servers:i.default,ServersContainer:a.default,RequestBodyEditor:l.default,OperationServers:u.default,operationLink:s.default}},15757:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(35627),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294);n(23930);class l extends a.Component{render(){const{link:e,name:t,getComponent:n}=this.props,r=n(\"Markdown\",!0);let s=e.get(\"operationId\")||e.get(\"operationRef\"),l=e.get(\"parameters\")&&e.get(\"parameters\").toJS(),c=e.get(\"description\");return a.createElement(\"div\",{className:\"operation-link\"},a.createElement(\"div\",{className:\"description\"},a.createElement(\"b\",null,a.createElement(\"code\",null,t)),c?a.createElement(r,{source:c}):null),a.createElement(\"pre\",null,\"Operation `\",s,\"`\",a.createElement(\"br\",null),a.createElement(\"br\",null),\"Parameters \",function(e,t){var n;if(\"string\"!=typeof t)return\"\";return i()(n=t.split(\"\\n\")).call(n,((t,n)=>n>0?Array(e+1).join(\" \")+t:t)).join(\"\\n\")}(0,o()(l,null,2))||\"{}\",a.createElement(\"br\",null)))}}const c=l},96796:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),s=n(67294);n(23930);class i extends s.Component{constructor(){super(...arguments),o()(this,\"setSelectedServer\",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${n}`)})),o()(this,\"setServerVariableValue\",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${n}`})})),o()(this,\"getSelectedServer\",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),o()(this,\"getServerVariable\",((e,t)=>{const{path:n,method:r}=this.props;return this.props.getServerVariable({namespace:`${n}:${r}`,server:e},t)})),o()(this,\"getEffectiveServerValue\",(e=>{const{path:t,method:n}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${n}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:n}=this.props;if(!e&&!t)return null;const r=n(\"Servers\"),o=e||t,i=e?\"operation\":\"path\";return s.createElement(\"div\",{className:\"opblock-section operation-servers\"},s.createElement(\"div\",{className:\"opblock-section-header\"},s.createElement(\"div\",{className:\"tab-header\"},s.createElement(\"h4\",{className:\"opblock-title\"},\"Servers\"))),s.createElement(\"div\",{className:\"opblock-description-wrapper\"},s.createElement(\"h4\",{className:\"message\"},\"These \",i,\"-level options override the global server options.\"),s.createElement(r,{servers:o,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},45327:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(61125),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(90242);const c=Function.prototype;class u extends s.PureComponent{constructor(e,t){super(e,t),o()(this,\"applyDefaultValue\",(e=>{const{onChange:t,defaultValue:n}=e||this.props;return this.setState({value:n}),t(n)})),o()(this,\"onChange\",(e=>{this.props.onChange((0,l.Pz)(e))})),o()(this,\"onDomChange\",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,l.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,l.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:n}=this.state,r=t.size>0;const o=e(\"TextArea\");return s.createElement(\"div\",{className:\"body-param\"},s.createElement(o,{className:a()(\"body-param__text\",{invalid:r}),title:t.size?t.join(\", \"):\"\",value:n,onChange:this.onDomChange}))}}o()(u,\"defaultProps\",{onChange:c,userHasEditedBody:!1})},42458:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>g,getDefaultRequestBodyValue:()=>m});var r=n(97606),o=n.n(r),s=n(11882),i=n.n(s),a=n(58118),l=n.n(a),c=n(58309),u=n.n(c),p=n(67294),h=(n(23930),n(43393)),f=n(90242),d=n(2518);const m=(e,t,n,r)=>{const o=e.getIn([\"content\",t]),s=o.get(\"schema\").toJS(),i=void 0!==o.get(\"examples\"),a=o.get(\"example\"),l=i?o.getIn([\"examples\",n,\"value\"]):a,c=r.getSampleSchema(s,t,{includeWriteOnly:!0},l);return(0,f.Pz)(c)},g=e=>{let{userHasEditedBody:t,requestBody:n,requestBodyValue:r,requestBodyInclusionSetting:s,requestBodyErrors:a,getComponent:c,getConfigs:g,specSelectors:y,fn:v,contentType:b,isExecute:w,specPath:E,onChange:x,onChangeIncludeEmpty:S,activeExamplesKey:_,updateActiveExamplesKey:j,setRetainRequestBodyValueFlag:O}=e;const k=e=>{x(e.target.files[0])},A=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return\"no value\"===s.get(e,\"no value\")&&(t.shouldDispatchInit=!0),t},C=c(\"Markdown\",!0),P=c(\"modelExample\"),N=c(\"RequestBodyEditor\"),I=c(\"highlightCode\"),T=c(\"ExamplesSelectValueRetainer\"),R=c(\"Example\"),M=c(\"ParameterIncludeEmpty\"),{showCommonExtensions:D}=g(),F=n&&n.get(\"description\")||null,L=n&&n.get(\"content\")||new h.OrderedMap;b=b||L.keySeq().first()||\"\";const B=L.get(b,(0,h.OrderedMap)()),$=B.get(\"schema\",(0,h.OrderedMap)()),q=B.get(\"examples\",null),U=null==q?void 0:o()(q).call(q,((e,t)=>{var r;const o=null===(r=e)||void 0===r?void 0:r.get(\"value\",null);return o&&(e=e.set(\"value\",m(n,b,t,v),o)),e}));if(a=h.List.isList(a)?a:(0,h.List)(),!B.size)return null;const z=\"object\"===B.getIn([\"schema\",\"type\"]),V=\"binary\"===B.getIn([\"schema\",\"format\"]),W=\"base64\"===B.getIn([\"schema\",\"format\"]);if(\"application/octet-stream\"===b||0===i()(b).call(b,\"image/\")||0===i()(b).call(b,\"audio/\")||0===i()(b).call(b,\"video/\")||V||W){const e=c(\"Input\");return w?p.createElement(e,{type:\"file\",onChange:k}):p.createElement(\"i\",null,\"Example values are not available for \",p.createElement(\"code\",null,b),\" media types.\")}if(z&&(\"application/x-www-form-urlencoded\"===b||0===i()(b).call(b,\"multipart/\"))&&$.get(\"properties\",(0,h.OrderedMap)()).size>0){var J;const e=c(\"JsonSchemaForm\"),t=c(\"ParameterExt\"),n=$.get(\"properties\",(0,h.OrderedMap)());return r=h.Map.isMap(r)?r:(0,h.OrderedMap)(),p.createElement(\"div\",{className:\"table-container\"},F&&p.createElement(C,{source:F}),p.createElement(\"table\",null,p.createElement(\"tbody\",null,h.Map.isMap(n)&&o()(J=n.entrySeq()).call(J,(n=>{var i,d;let[m,g]=n;if(g.get(\"readOnly\"))return;let y=D?(0,f.po)(g):null;const b=l()(i=$.get(\"required\",(0,h.List)())).call(i,m),E=g.get(\"type\"),_=g.get(\"format\"),j=g.get(\"description\"),O=r.getIn([m,\"value\"]),k=r.getIn([m,\"errors\"])||a,P=s.get(m)||!1,N=g.has(\"default\")||g.has(\"example\")||g.hasIn([\"items\",\"example\"])||g.hasIn([\"items\",\"default\"]),I=g.has(\"enum\")&&(1===g.get(\"enum\").size||b),T=N||I;let R=\"\";\"array\"!==E||T||(R=[]),(\"object\"===E||T)&&(R=v.getSampleSchema(g,!1,{includeWriteOnly:!0})),\"string\"!=typeof R&&\"object\"===E&&(R=(0,f.Pz)(R)),\"string\"==typeof R&&\"array\"===E&&(R=JSON.parse(R));const F=\"string\"===E&&(\"binary\"===_||\"base64\"===_);return p.createElement(\"tr\",{key:m,className:\"parameters\",\"data-property-name\":m},p.createElement(\"td\",{className:\"parameters-col_name\"},p.createElement(\"div\",{className:b?\"parameter__name required\":\"parameter__name\"},m,b?p.createElement(\"span\",null,\" *\"):null),p.createElement(\"div\",{className:\"parameter__type\"},E,_&&p.createElement(\"span\",{className:\"prop-format\"},\"($\",_,\")\"),D&&y.size?o()(d=y.entrySeq()).call(d,(e=>{let[n,r]=e;return p.createElement(t,{key:`${n}-${r}`,xKey:n,xVal:r})})):null),p.createElement(\"div\",{className:\"parameter__deprecated\"},g.get(\"deprecated\")?\"deprecated\":null)),p.createElement(\"td\",{className:\"parameters-col_description\"},p.createElement(C,{source:j}),w?p.createElement(\"div\",null,p.createElement(e,{fn:v,dispatchInitialValue:!F,schema:g,description:m,getComponent:c,value:void 0===O?R:O,required:b,errors:k,onChange:e=>{x(e,[m])}}),b?null:p.createElement(M,{onChange:e=>S(m,e),isIncluded:P,isIncludedOptions:A(m),isDisabled:u()(O)?0!==O.length:!(0,f.O2)(O)})):null))})))))}const K=m(n,b,_,v);let H=null;return(0,d.O)(K)&&(H=\"json\"),p.createElement(\"div\",null,F&&p.createElement(C,{source:F}),U?p.createElement(T,{userHasEditedBody:t,examples:U,currentKey:_,currentUserInputValue:r,onSelect:e=>{j(e)},updateValue:x,defaultToFirstExample:!0,getComponent:c,setRetainRequestBodyValueFlag:O}):null,w?p.createElement(\"div\",null,p.createElement(N,{value:r,errors:a,defaultValue:K,onChange:x,getComponent:c})):p.createElement(P,{getComponent:c,getConfigs:g,specSelectors:y,expandDepth:1,isExecute:w,schema:B.get(\"schema\"),specPath:E.push(\"content\",b),example:p.createElement(I,{className:\"body-param__example\",getConfigs:g,language:H,value:(0,f.Pz)(r)||K}),includeWriteOnly:!0}),U?p.createElement(R,{example:U.get(_),getComponent:c,getConfigs:g}):null)}},9928:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);class o extends r.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:n,getComponent:o}=this.props,s=e.servers(),i=o(\"Servers\");return s&&s.size?r.createElement(\"div\",null,r.createElement(\"span\",{className:\"servers-title\"},\"Servers\"),r.createElement(i,{servers:s,currentServer:t.selectedServer(),setSelectedServer:n.setSelectedServer,setServerVariableValue:n.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},56617:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(61125),o=n.n(r),s=n(51679),i=n.n(s),a=n(97606),l=n.n(a),c=n(67294),u=n(43393);n(23930);class p extends c.Component{constructor(){super(...arguments),o()(this,\"onServerChange\",(e=>{this.setServer(e.target.value)})),o()(this,\"onServerVariableValueChange\",(e=>{let{setServerVariableValue:t,currentServer:n}=this.props,r=e.target.getAttribute(\"data-variable\"),o=e.target.value;\"function\"==typeof t&&t({server:n,key:r,val:o})})),o()(this,\"setServer\",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:n}=this.props;n||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get(\"url\"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:n,getServerVariable:r}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let s=i()(t).call(t,(t=>t.get(\"url\")===e.currentServer)),a=i()(o=this.props.servers).call(o,(e=>e.get(\"url\")===this.props.currentServer))||(0,u.OrderedMap)();if(!s)return this.setServer(t.first().get(\"url\"));let c=a.get(\"variables\")||(0,u.OrderedMap)(),p=(i()(c).call(c,(e=>e.get(\"default\")))||(0,u.OrderedMap)()).get(\"default\"),h=s.get(\"variables\")||(0,u.OrderedMap)(),f=(i()(h).call(h,(e=>e.get(\"default\")))||(0,u.OrderedMap)()).get(\"default\");l()(h).call(h,((t,o)=>{r(e.currentServer,o)&&p===f||n({server:e.currentServer,key:o,val:t.get(\"default\")||\"\"})}))}}render(){var e,t;let{servers:n,currentServer:r,getServerVariable:o,getEffectiveServerValue:s}=this.props,a=(i()(n).call(n,(e=>e.get(\"url\")===r))||(0,u.OrderedMap)()).get(\"variables\")||(0,u.OrderedMap)(),p=0!==a.size;return c.createElement(\"div\",{className:\"servers\"},c.createElement(\"label\",{htmlFor:\"servers\"},c.createElement(\"select\",{onChange:this.onServerChange,value:r},l()(e=n.valueSeq()).call(e,(e=>c.createElement(\"option\",{value:e.get(\"url\"),key:e.get(\"url\")},e.get(\"url\"),e.get(\"description\")&&` - ${e.get(\"description\")}`))).toArray())),p?c.createElement(\"div\",null,c.createElement(\"div\",{className:\"computed-url\"},\"Computed URL:\",c.createElement(\"code\",null,s(r))),c.createElement(\"h4\",null,\"Server variables\"),c.createElement(\"table\",null,c.createElement(\"tbody\",null,l()(t=a.entrySeq()).call(t,(e=>{var t;let[n,s]=e;return c.createElement(\"tr\",{key:n},c.createElement(\"td\",null,n),c.createElement(\"td\",null,s.get(\"enum\")?c.createElement(\"select\",{\"data-variable\":n,onChange:this.onServerVariableValueChange},l()(t=s.get(\"enum\")).call(t,(e=>c.createElement(\"option\",{selected:e===o(r,n),key:e,value:e},e)))):c.createElement(\"input\",{type:\"text\",value:o(r,n)||\"\",onChange:this.onServerVariableValueChange,\"data-variable\":n})))}))))):null)}}},7779:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{OAS30ComponentWrapFactory:()=>c,OAS3ComponentWrapFactory:()=>l,isOAS30:()=>i,isSwagger2:()=>a});var r=n(23101),o=n.n(r),s=n(67294);function i(e){const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.0\\.([0123])(?:-rc[012])?$/.test(t)}function a(e){const t=e.get(\"swagger\");return\"string\"==typeof t&&\"2.0\"===t}function l(e){return(t,n)=>r=>{var i;return\"function\"==typeof(null===(i=n.specSelectors)||void 0===i?void 0:i.isOAS3)?n.specSelectors.isOAS3()?s.createElement(e,o()({},r,n,{Ori:t})):s.createElement(t,r):(console.warn(\"OAS3 wrapper: couldn't get spec\"),null)}}function c(e){return(t,n)=>r=>{var i;return\"function\"==typeof(null===(i=n.specSelectors)||void 0===i?void 0:i.isOAS30)?n.specSelectors.isOAS30()?s.createElement(e,o()({},r,n,{Ori:t})):s.createElement(t,r):(console.warn(\"OAS30 wrapper: couldn't get spec\"),null)}}},97451:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(92044),o=n(73723),s=n(91741),i=n(76467),a=n(37761),l=n(67002),c=n(5065),u=n(62109);function p(){return{components:i.default,wrapComponents:a.default,statePlugins:{spec:{wrapSelectors:r,selectors:s},auth:{wrapSelectors:o},oas3:{actions:l,reducers:u.default,selectors:c}}}}},62109:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(8712),o=n.n(r),s=n(86),i=n.n(s),a=n(24282),l=n.n(a),c=n(43393),u=n(67002);const p={[u.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:n,namespace:r}}=t;const o=r?[r,\"selectedServer\"]:[\"selectedServer\"];return e.setIn(o,n)},[u.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[s,a]=r;if(!c.Map.isMap(n))return e.setIn([\"requestData\",s,a,\"bodyValue\"],n);let l,u=e.getIn([\"requestData\",s,a,\"bodyValue\"])||(0,c.Map)();c.Map.isMap(u)||(u=(0,c.Map)());const[...p]=o()(n).call(n);return i()(p).call(p,(e=>{let t=n.getIn([e]);u.has(e)&&c.Map.isMap(t)||(l=u.setIn([e,\"value\"],t))})),e.setIn([\"requestData\",s,a,\"bodyValue\"],l)},[u.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,s]=r;return e.setIn([\"requestData\",o,s,\"retainBodyValue\"],n)},[u.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:n,pathMethod:r,name:o}}=t,[s,i]=r;return e.setIn([\"requestData\",s,i,\"bodyInclusion\",o],n)},[u.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:n,pathMethod:r,contextType:o,contextName:s}}=t,[i,a]=r;return e.setIn([\"examples\",i,a,o,s,\"activeExample\"],n)},[u.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,s]=r;return e.setIn([\"requestData\",o,s,\"requestContentType\"],n)},[u.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,path:r,method:o}}=t;return e.setIn([\"requestData\",r,o,\"responseContentType\"],n)},[u.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:n,namespace:r,key:o,val:s}}=t;const i=r?[r,\"serverVariableValues\",n,o]:[\"serverVariableValues\",n,o];return e.setIn(i,s)},[u.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r,validationErrors:o}}=t,s=[];if(s.push(\"Required field is not provided\"),o.missingBodyValue)return e.setIn([\"requestData\",n,r,\"errors\"],(0,c.fromJS)(s));if(o.missingRequiredKeys&&o.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=o;return e.updateIn([\"requestData\",n,r,\"bodyValue\"],(0,c.fromJS)({}),(e=>l()(t).call(t,((e,t)=>e.setIn([t,\"errors\"],(0,c.fromJS)(s))),e)))}return console.warn(\"unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR\"),e},[u.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r}}=t;const s=e.getIn([\"requestData\",n,r,\"bodyValue\"]);if(!c.Map.isMap(s))return e.setIn([\"requestData\",n,r,\"errors\"],(0,c.fromJS)([]));const[...i]=o()(s).call(s);return i?e.updateIn([\"requestData\",n,r,\"bodyValue\"],(0,c.fromJS)({}),(e=>l()(i).call(i,((e,t)=>e.setIn([t,\"errors\"],(0,c.fromJS)([]))),e))):e},[u.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:n}}=t,[r,o]=n;const s=e.getIn([\"requestData\",r,o,\"bodyValue\"]);return s?c.Map.isMap(s)?e.setIn([\"requestData\",r,o,\"bodyValue\"],(0,c.Map)()):e.setIn([\"requestData\",r,o,\"bodyValue\"],\"\"):e}}},5065:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{activeExamplesMember:()=>S,hasUserEditedBody:()=>w,requestBodyErrors:()=>x,requestBodyInclusionSetting:()=>E,requestBodyValue:()=>y,requestContentType:()=>_,responseContentType:()=>j,selectDefaultRequestBodyValue:()=>b,selectedServer:()=>g,serverEffectiveValue:()=>A,serverVariableValue:()=>O,serverVariables:()=>k,shouldRetainRequestBodyValue:()=>v,validOperationMethods:()=>I,validateBeforeExecute:()=>C,validateShallowRequired:()=>N});var r=n(97606),o=n.n(r),s=n(86),i=n.n(s),a=n(28222),l=n.n(a),c=n(11882),u=n.n(c),p=n(43393),h=n(20573),f=n(42458),d=n(90242);const m=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{if(n.getSystem().specSelectors.isOAS3()){const o=e(t,...r);return\"function\"==typeof o?o(n):o}return null}};const g=m(((e,t)=>{const n=t?[t,\"selectedServer\"]:[\"selectedServer\"];return e.getIn(n)||\"\"})),y=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"bodyValue\"])||null)),v=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"retainBodyValue\"])||!1)),b=(e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o,fn:s}=e.getSystem();if(o.isOAS3()){const e=r.requestContentType(t,n);if(e)return(0,f.getDefaultRequestBodyValue)(o.specResolvedSubtree([\"paths\",t,n,\"requestBody\"]),e,r.activeExamplesMember(t,n,\"requestBody\",\"requestBody\"),s)}return null},w=m(((e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o,fn:s}=e;let i=!1;const a=r.requestContentType(t,n);let l=r.requestBodyValue(t,n);const c=o.specResolvedSubtree([\"paths\",t,n,\"requestBody\"]);if(!c)return!1;if(p.Map.isMap(l)&&(l=(0,d.Pz)(l.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get(\"value\")]:e)).toJS())),p.List.isList(l)&&(l=(0,d.Pz)(l)),a){const e=(0,f.getDefaultRequestBodyValue)(c,a,r.activeExamplesMember(t,n,\"requestBody\",\"requestBody\"),s);i=!!l&&l!==e}return i})),E=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"bodyInclusion\"])||(0,p.Map)())),x=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"errors\"])||null)),S=m(((e,t,n,r,o)=>e.getIn([\"examples\",t,n,r,o,\"activeExample\"])||null)),_=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"requestContentType\"])||null)),j=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"responseContentType\"])||null)),O=m(((e,t,n)=>{let r;if(\"string\"!=typeof t){const{server:e,namespace:o}=t;r=o?[o,\"serverVariableValues\",e,n]:[\"serverVariableValues\",e,n]}else{r=[\"serverVariableValues\",t,n]}return e.getIn(r)||null})),k=m(((e,t)=>{let n;if(\"string\"!=typeof t){const{server:e,namespace:r}=t;n=r?[r,\"serverVariableValues\",e]:[\"serverVariableValues\",e]}else{n=[\"serverVariableValues\",t]}return e.getIn(n)||(0,p.OrderedMap)()})),A=m(((e,t)=>{var n,r;if(\"string\"!=typeof t){const{server:o,namespace:s}=t;r=o,n=s?e.getIn([s,\"serverVariableValues\",r]):e.getIn([\"serverVariableValues\",r])}else r=t,n=e.getIn([\"serverVariableValues\",r]);n=n||(0,p.OrderedMap)();let s=r;return o()(n).call(n,((e,t)=>{s=s.replace(new RegExp(`{${t}}`,\"g\"),e)})),s})),C=(P=(e,t)=>((e,t)=>(t=t||[],!!e.getIn([\"requestData\",...t,\"bodyValue\"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return e=>{const n=e.getSystem().specSelectors.specJson();let r=[...t][1]||[];return!n.getIn([\"paths\",...r,\"requestBody\",\"required\"])||P(...t)}});var P;const N=(e,t)=>{var n;let{oas3RequiredRequestBodyContentType:r,oas3RequestContentType:o,oas3RequestBodyValue:s}=t,a=[];if(!p.Map.isMap(s))return a;let c=[];return i()(n=l()(r.requestContentType)).call(n,(e=>{if(e===o){let t=r.requestContentType[e];i()(t).call(t,(e=>{u()(c).call(c,e)<0&&c.push(e)}))}})),i()(c).call(c,(e=>{s.getIn([e,\"value\"])||a.push(e)})),a},I=(0,h.P1)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"]))},91741:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{callbacksOperations:()=>E,isOAS3:()=>v,isOAS30:()=>y,isSwagger2:()=>g,servers:()=>w});var r=n(97606),o=n.n(r),s=n(24282),i=n.n(s),a=n(14418),l=n.n(a),c=n(58118),u=n.n(c),p=n(39022),h=n.n(p),f=n(43393),d=n(7779);const m=(0,f.Map)(),g=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,d.isSwagger2)(t)},y=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,d.isOAS30)(t)},v=()=>e=>e.getSystem().specSelectors.isOAS30();function b(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{if(n.specSelectors.isOAS3()){const o=e(t,...r);return\"function\"==typeof o?o(n):o}return null}}}const w=b((()=>e=>e.specSelectors.specJson().get(\"servers\",m))),E=b(((e,t)=>{let{callbacks:n,specPath:r}=t;return e=>{var t;const s=e.specSelectors.validOperationMethods();return f.Map.isMap(n)?o()(t=i()(n).call(n,((e,t,n)=>f.Map.isMap(t)?i()(t).call(t,((e,t,i)=>{var a,c;if(!f.Map.isMap(t))return e;const p=o()(a=l()(c=t.entrySeq()).call(c,(e=>{let[t]=e;return u()(s).call(s,t)}))).call(a,(e=>{let[t,o]=e;return{operation:(0,f.Map)({operation:o}),method:t,path:i,callbackName:n,specPath:h()(r).call(r,[n,i,t])}}));return h()(e).call(e,p)}),(0,f.List)()):e),(0,f.List)()).groupBy((e=>e.callbackName))).call(t,(e=>e.toArray())).toObject():{}}}))},92044:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{basePath:()=>d,consumes:()=>m,definitions:()=>c,hasHost:()=>u,host:()=>f,produces:()=>g,schemes:()=>y,securityDefinitions:()=>p,validOperationMethods:()=>h});var r=n(20573),o=n(33881),s=n(43393);const i=(0,s.Map)();function a(e){return(t,n)=>function(){if(n.getSystem().specSelectors.isOAS3()){const t=e(...arguments);return\"function\"==typeof t?t(n):t}return t(...arguments)}}const l=a((0,r.P1)((()=>null))),c=a((()=>e=>{const t=e.getSystem().specSelectors.specJson().getIn([\"components\",\"schemas\"]);return s.Map.isMap(t)?t:i})),u=a((()=>e=>e.getSystem().specSelectors.specJson().hasIn([\"servers\",0]))),p=a((0,r.P1)(o.specJsonWithResolvedSubtrees,(e=>e.getIn([\"components\",\"securitySchemes\"])||null))),h=(e,t)=>function(n){if(t.specSelectors.isOAS3())return t.oas3Selectors.validOperationMethods();for(var r=arguments.length,o=new Array(r>1?r-1:0),s=1;s<r;s++)o[s-1]=arguments[s];return e(...o)},f=l,d=l,m=l,g=l,y=l},70356:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:s,errSelectors:i,authorized:a,onAuthChange:l,name:c}=n,u=s(\"HttpAuth\");return\"http\"===o.get(\"type\")?r.createElement(u,{key:c,schema:o,name:c,errSelectors:i,authorized:a,getComponent:s,onChange:l}):r.createElement(t,n)}))},37761:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(22460),o=n(70356),s=n(69487),i=n(50058),a=n(53499),l=n(90287);const c={Markdown:r.default,AuthItem:o.default,JsonSchema_string:l.default,VersionStamp:s.default,model:a.default,onlineValidatorBadge:i.default}},90287:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:s,errors:i,onChange:a}=n,l=o&&o.get?o.get(\"format\"):null,c=o&&o.get?o.get(\"type\"):null,u=s(\"Input\");return c&&\"string\"===c&&l&&(\"binary\"===l||\"base64\"===l)?r.createElement(u,{type:\"file\",className:i.length?\"invalid\":\"\",title:i.length?i:\"\",onChange:e=>{a(e.target.files[0])},disabled:t.isDisabled}):r.createElement(t,n)}))},22460:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{Markdown:()=>h,default:()=>f});var r=n(81607),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(89927),c=n(7779),u=n(4599);const p=new l._(\"commonmark\");p.block.ruler.enable([\"table\"]),p.set({linkTarget:\"_blank\"});const h=e=>{let{source:t,className:n=\"\",getConfigs:r}=e;if(\"string\"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=r(),i=p.render(t),l=(0,u.s)(i,{useUnsafeMarkdown:e});let c;return\"string\"==typeof l&&(c=o()(l).call(l)),s.createElement(\"div\",{dangerouslySetInnerHTML:{__html:c},className:a()(n,\"renderedMarkdown\")})}return null};h.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const f=(0,c.OAS3ComponentWrapFactory)(h)},53499:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(23101),o=n.n(r),s=n(67294),i=n(7779),a=n(53795);class l extends s.Component{render(){let{getConfigs:e,schema:t}=this.props,n=[\"model-box\"],r=null;return!0===t.get(\"deprecated\")&&(n.push(\"deprecated\"),r=s.createElement(\"span\",{className:\"model-deprecated-warning\"},\"Deprecated:\")),s.createElement(\"div\",{className:n.join(\" \")},r,s.createElement(a.Z,o()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const c=(0,i.OAS3ComponentWrapFactory)(l)},50058:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(7779),o=n(5623);const s=(0,r.OAS3ComponentWrapFactory)(o.Z)},69487:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS30ComponentWrapFactory)((e=>{const{Ori:t}=e;return r.createElement(\"span\",null,r.createElement(t,e),r.createElement(\"small\",{className:\"version-stamp\"},r.createElement(\"pre\",{className:\"version\"},\"OAS 3.0\")))}))},92372:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(76986),o=n.n(r),s=n(25800),i=n(84380);const a=function(e){let{fn:t,getSystem:n}=e;if(t.jsonSchema202012){const e=(0,s.makeIsExpandable)(t.jsonSchema202012.isExpandable,n);o()(this.fn.jsonSchema202012,{isExpandable:e,getProperties:s.getProperties})}if(\"function\"==typeof t.sampleFromSchema&&t.jsonSchema202012){const e=(0,i.wrapOAS31Fn)({sampleFromSchema:t.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:t.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:t.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:t.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:t.jsonSchema202012.memoizedCreateXMLExample},n());o()(this.fn,e)}}},89503:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectContactNameField(),i=n.selectContactUrl(),a=n.selectContactEmailField(),l=t(\"Link\");return r.createElement(\"div\",{className:\"info__contact\"},i&&r.createElement(\"div\",null,r.createElement(l,{href:(0,o.Nm)(i),target:\"_blank\"},s,\" - Website\")),a&&r.createElement(l,{href:(0,o.Nm)(`mailto:${a}`)},i?`Send email to ${s}`:`Contact ${s}`))}},16133:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.version(),i=n.url(),a=n.basePath(),l=n.host(),c=n.selectInfoSummaryField(),u=n.selectInfoDescriptionField(),p=n.selectInfoTitleField(),h=n.selectInfoTermsOfServiceUrl(),f=n.selectExternalDocsUrl(),d=n.selectExternalDocsDescriptionField(),m=n.contact(),g=n.license(),y=t(\"Markdown\",!0),v=t(\"Link\"),b=t(\"VersionStamp\"),w=t(\"InfoUrl\"),E=t(\"InfoBasePath\"),x=t(\"License\",!0),S=t(\"Contact\",!0),_=t(\"JsonSchemaDialect\",!0);return r.createElement(\"div\",{className:\"info\"},r.createElement(\"hgroup\",{className:\"main\"},r.createElement(\"h2\",{className:\"title\"},p,s&&r.createElement(b,{version:s})),(l||a)&&r.createElement(E,{host:l,basePath:a}),i&&r.createElement(w,{getComponent:t,url:i})),c&&r.createElement(\"p\",{className:\"info__summary\"},c),r.createElement(\"div\",{className:\"info__description description\"},r.createElement(y,{source:u})),h&&r.createElement(\"div\",{className:\"info__tos\"},r.createElement(v,{target:\"_blank\",href:(0,o.Nm)(h)},\"Terms of service\")),m.size>0&&r.createElement(S,null),g.size>0&&r.createElement(x,null),f&&r.createElement(v,{className:\"info__extdocs\",target:\"_blank\",href:(0,o.Nm)(f)},d||f),r.createElement(_,null))}},92562:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectJsonSchemaDialectField(),i=n.selectJsonSchemaDialectDefault(),a=t(\"Link\");return r.createElement(r.Fragment,null,s&&s===i&&r.createElement(\"p\",{className:\"info__jsonschemadialect\"},\"JSON Schema dialect:\",\" \",r.createElement(a,{target:\"_blank\",href:(0,o.Nm)(s)},s)),s&&s!==i&&r.createElement(\"div\",{className:\"error-wrapper\"},r.createElement(\"div\",{className:\"no-margin\"},r.createElement(\"div\",{className:\"errors\"},r.createElement(\"div\",{className:\"errors-wrapper\"},r.createElement(\"h4\",{className:\"center\"},\"Warning\"),r.createElement(\"p\",{className:\"message\"},r.createElement(\"strong\",null,\"OpenAPI.jsonSchemaDialect\"),\" field contains a value different from the default value of\",\" \",r.createElement(a,{target:\"_blank\",href:i},i),\". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value.\"))))))}},51876:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectLicenseNameField(),i=n.selectLicenseUrl(),a=t(\"Link\");return r.createElement(\"div\",{className:\"info__license\"},i?r.createElement(\"div\",{className:\"info__license__url\"},r.createElement(a,{target:\"_blank\",href:(0,o.Nm)(i)},s)):r.createElement(\"span\",null,s))}},92718:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(58118),o=n.n(r),s=n(67294);n(23930);const i=e=>\"string\"==typeof e&&o()(e).call(e,\"#/components/schemas/\")?(e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}})(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):null,a=(0,s.forwardRef)(((e,t)=>{let{schema:n,getComponent:r,onToggle:o}=e;const a=r(\"JSONSchema202012\"),l=i(n.get(\"$$ref\")),c=(0,s.useCallback)(((e,t)=>{o(l,t)}),[l,o]);return s.createElement(a,{name:l,schema:n.toJS(),ref:t,onExpand:c})}));a.defaultProps={name:\"\",displayName:\"\",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const l=a},20263:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=n(94184),p=n.n(u);const h=e=>{var t;let{specActions:n,specSelectors:r,layoutSelectors:s,layoutActions:a,getComponent:u,getConfigs:h}=e;const f=r.selectSchemas(),d=o()(f).length>0,m=[\"components\",\"schemas\"],{docExpansion:g,defaultModelsExpandDepth:y}=h(),v=y>0&&\"none\"!==g,b=s.isShown(m,v),w=u(\"Collapse\"),E=u(\"JSONSchema202012\");(0,c.useEffect)((()=>{const e=b&&y>1,t=null!=r.specResolvedSubtree(m);e&&!t&&n.requestResolvedSubtree(m)}),[b,y]);const x=(0,c.useCallback)((()=>{a.show(m,!b)}),[b]),S=(0,c.useCallback)((e=>{null!==e&&a.readyToScroll(m,e)}),[]),_=e=>t=>{null!==t&&a.readyToScroll([...m,e],t)},j=e=>(t,o)=>{if(o){const t=[...m,e];null!=r.specResolvedSubtree(t)||n.requestResolvedSubtree([...m,e])}};return!d||y<0?null:c.createElement(\"section\",{className:p()(\"models\",{\"is-open\":b}),ref:S},c.createElement(\"h4\",null,c.createElement(\"button\",{\"aria-expanded\":b,className:\"models-control\",onClick:x},c.createElement(\"span\",null,\"Schemas\"),c.createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},c.createElement(\"use\",{xlinkHref:b?\"#large-arrow-up\":\"#large-arrow-down\"})))),c.createElement(w,{isOpened:b},i()(t=l()(f)).call(t,(e=>{let[t,n]=e;return c.createElement(E,{key:t,ref:_(t),schema:n,name:t,onExpand:j(t)})}))))}},33429:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{bypass:t,isSwagger2:n,isOAS3:o,isOAS31:s,alsoShow:i,children:a}=e;return t?r.createElement(\"div\",null,a):n&&(o||s)?r.createElement(\"div\",{className:\"version-pragma\"},i,r.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},r.createElement(\"div\",null,r.createElement(\"h3\",null,\"Unable to render this definition\"),r.createElement(\"p\",null,r.createElement(\"code\",null,\"swagger\"),\" and \",r.createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),r.createElement(\"p\",null,\"Supported version fields are \",r.createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",r.createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",r.createElement(\"code\",null,\"openapi: 3.1.0\"),\").\")))):n||o||s?r.createElement(\"div\",null,a):r.createElement(\"div\",{className:\"version-pragma\"},i,r.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},r.createElement(\"div\",null,r.createElement(\"h3\",null,\"Unable to render this definition\"),r.createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),r.createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",r.createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",r.createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",r.createElement(\"code\",null,\"openapi: 3.1.0\"),\").\"))))}},39508:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294);const l=e=>{let{specSelectors:t,getComponent:n}=e;const r=t.selectWebhooksOperations(),s=o()(r),l=n(\"OperationContainer\",!0);return 0===s.length?null:a.createElement(\"div\",{className:\"webhooks\"},a.createElement(\"h2\",null,\"Webhooks\"),i()(s).call(s,(e=>{var t;return a.createElement(\"div\",{key:`${e}-webhook`},i()(t=r[e]).call(t,(t=>a.createElement(l,{key:`${e}-${t.method}-webhook`,op:t.operation,tag:\"webhooks\",method:t.method,path:e,specPath:t.specPath,allowTryItOut:!1}))))})))}},84380:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createOnlyOAS31ComponentWrapper:()=>g,createOnlyOAS31Selector:()=>f,createOnlyOAS31SelectorWrapper:()=>d,createSystemSelector:()=>m,isOAS31:()=>h,wrapOAS31Fn:()=>y});var r=n(23101),o=n.n(r),s=n(82865),i=n.n(s),a=n(97606),l=n.n(a),c=n(2018),u=n.n(c),p=n(67294);const h=e=>{const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.1\\.(?:[1-9]\\d*|0)$/.test(t)},f=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{if(n.getSystem().specSelectors.isOAS31()){const o=e(t,...r);return\"function\"==typeof o?o(n):o}return null}},d=e=>(t,n)=>function(r){for(var o=arguments.length,s=new Array(o>1?o-1:0),i=1;i<o;i++)s[i-1]=arguments[i];if(n.getSystem().specSelectors.isOAS31()){const o=e(r,...s);return\"function\"==typeof o?o(t,n):o}return t(...s)},m=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{const o=e(t,n,...r);return\"function\"==typeof o?o(n):o}},g=e=>(t,n)=>r=>n.specSelectors.isOAS31()?p.createElement(e,o()({},r,{originalComponent:t,getSystem:n.getSystem})):p.createElement(t,r),y=(e,t)=>{var n;const{fn:r,specSelectors:o}=t;return i()(l()(n=u()(e)).call(n,(e=>{let[t,n]=e;const s=r[t];return[t,function(){return o.isOAS31()?n(...arguments):\"function\"==typeof s?s(...arguments):void 0}]})))}},29806:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>P});var r=n(39508),o=n(51876),s=n(89503),i=n(16133),a=n(92562),l=n(33429),c=n(92718),u=n(20263),p=n(6608),h=n(77423),f=n(284),d=n(17042),m=n(22914),g=n(41434),y=n(1122),v=n(84380),b=n(9305),w=n(32884),E=n(64280),x=n(59450),S=n(36617),_=n(19525),j=n(25324),O=n(80809),k=n(14951),A=n(77536),C=n(92372);const P=e=>{let{fn:t}=e;const n=t.createSystemSelector||v.createSystemSelector,P=t.createOnlyOAS31Selector||v.createOnlyOAS31Selector;return{afterLoad:C.default,fn:{isOAS31:v.isOAS31,createSystemSelector:v.createSystemSelector,createOnlyOAS31Selector:v.createOnlyOAS31Selector},components:{Webhooks:r.default,JsonSchemaDialect:a.default,OAS31Info:i.default,OAS31License:o.default,OAS31Contact:s.default,OAS31VersionPragmaFilter:l.default,OAS31Model:c.default,OAS31Models:u.default,JSONSchema202012KeywordExample:x.default,JSONSchema202012KeywordXml:S.default,JSONSchema202012KeywordDiscriminator:_.default,JSONSchema202012KeywordExternalDocs:j.default},wrapComponents:{InfoContainer:f.default,License:p.default,Contact:h.default,VersionPragmaFilter:g.default,VersionStamp:y.default,Model:d.default,Models:m.default,JSONSchema202012KeywordDescription:O.default,JSONSchema202012KeywordDefault:k.default,JSONSchema202012KeywordProperties:A.default},statePlugins:{spec:{selectors:{isOAS31:n(b.isOAS31),license:b.license,selectLicenseNameField:b.selectLicenseNameField,selectLicenseUrlField:b.selectLicenseUrlField,selectLicenseIdentifierField:P(b.selectLicenseIdentifierField),selectLicenseUrl:n(b.selectLicenseUrl),contact:b.contact,selectContactNameField:b.selectContactNameField,selectContactEmailField:b.selectContactEmailField,selectContactUrlField:b.selectContactUrlField,selectContactUrl:n(b.selectContactUrl),selectInfoTitleField:b.selectInfoTitleField,selectInfoSummaryField:P(b.selectInfoSummaryField),selectInfoDescriptionField:b.selectInfoDescriptionField,selectInfoTermsOfServiceField:b.selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:n(b.selectInfoTermsOfServiceUrl),selectExternalDocsDescriptionField:b.selectExternalDocsDescriptionField,selectExternalDocsUrlField:b.selectExternalDocsUrlField,selectExternalDocsUrl:n(b.selectExternalDocsUrl),webhooks:P(b.webhooks),selectWebhooksOperations:P(n(b.selectWebhooksOperations)),selectJsonSchemaDialectField:b.selectJsonSchemaDialectField,selectJsonSchemaDialectDefault:b.selectJsonSchemaDialectDefault,selectSchemas:n(b.selectSchemas)},wrapSelectors:{isOAS3:w.isOAS3,selectLicenseUrl:w.selectLicenseUrl}},oas31:{selectors:{selectLicenseUrl:P(n(E.selectLicenseUrl))}}}}}},45989:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{schema:t,getSystem:n}=e;if(null==t||!t.description)return null;const{getComponent:o}=n(),s=o(\"Markdown\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},r.createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},r.createElement(s,{source:t.description})))}},19525:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(28222),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(7749);const c=e=>{let{schema:t,getSystem:n}=e;const r=(null==t?void 0:t.discriminator)||{},{fn:i,getComponent:c}=n(),{useIsExpandedDeeply:u,useComponent:p}=i.jsonSchema202012,h=u(),f=!!r.mapping,[d,m]=(0,s.useState)(h),[g,y]=(0,s.useState)(!1),v=p(\"Accordion\"),b=p(\"ExpandDeepButton\"),w=c(\"JSONSchema202012DeepExpansionContext\")(),E=(0,s.useCallback)((()=>{m((e=>!e))}),[]),x=(0,s.useCallback)(((e,t)=>{m(t),y(t)}),[]);return 0===o()(r).length?null:s.createElement(w.Provider,{value:g},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator\"},f?s.createElement(s.Fragment,null,s.createElement(v,{expanded:d,onChange:E},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\")),s.createElement(b,{expanded:d,onClick:x})):s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\"),r.propertyName&&s.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},r.propertyName),s.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.createElement(\"ul\",{className:a()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(l.default,{discriminator:r})))))}},7749:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294);const u=e=>{var t;let{discriminator:n}=e;const r=(null==n?void 0:n.mapping)||{};return 0===o()(r).length?null:i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"div\",{key:`${t}-${n}`,className:\"json-schema-2020-12-keyword\"},c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},t),c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},n))}))};u.defaultProps={mapping:void 0};const p=u},59450:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{schema:t,getSystem:n}=e;const{fn:o}=n(),{hasKeyword:s,stringify:i}=o.jsonSchema202012.useFn();return s(t,\"example\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--example\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Example\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},i(t.example))):null}},25324:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(28222),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(90242);const c=e=>{let{schema:t,getSystem:n}=e;const r=(null==t?void 0:t.externalDocs)||{},{fn:i,getComponent:c}=n(),{useIsExpandedDeeply:u,useComponent:p}=i.jsonSchema202012,h=u(),f=!(!r.description&&!r.url),[d,m]=(0,s.useState)(h),[g,y]=(0,s.useState)(!1),v=p(\"Accordion\"),b=p(\"ExpandDeepButton\"),w=c(\"JSONSchema202012KeywordDescription\"),E=c(\"Link\"),x=c(\"JSONSchema202012DeepExpansionContext\")(),S=(0,s.useCallback)((()=>{m((e=>!e))}),[]),_=(0,s.useCallback)(((e,t)=>{m(t),y(t)}),[]);return 0===o()(r).length?null:s.createElement(x.Provider,{value:g},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs\"},f?s.createElement(s.Fragment,null,s.createElement(v,{expanded:d,onChange:S},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\")),s.createElement(b,{expanded:d,onClick:_})):s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\"),s.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.createElement(\"ul\",{className:a()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.createElement(s.Fragment,null,r.description&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(w,{schema:r,getSystem:n})),r.url&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"url\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},s.createElement(E,{target:\"_blank\",href:(0,l.Nm)(r.url)},r.url))))))))}},9023:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>g});var r=n(58309),o=n.n(r),s=n(28222),i=n.n(s),a=n(97606),l=n.n(a),c=n(2018),u=n.n(c),p=n(58118),h=n.n(p),f=n(67294),d=n(94184),m=n.n(d);const g=e=>{var t;let{schema:n,getSystem:r}=e;const{fn:s}=r(),{useComponent:a}=s.jsonSchema202012,{getDependentRequired:c,getProperties:p}=s.jsonSchema202012.useFn(),d=s.jsonSchema202012.useConfig(),g=o()(null==n?void 0:n.required)?n.required:[],y=a(\"JSONSchema\"),v=p(n,d);return 0===i()(v).length?null:f.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},f.createElement(\"ul\",null,l()(t=u()(v)).call(t,(e=>{let[t,r]=e;const o=h()(g).call(g,t),s=c(t,n);return f.createElement(\"li\",{key:t,className:m()(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":o})},f.createElement(y,{name:t,schema:r,dependentRequired:s}))}))))}},36617:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(28222),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i);const l=e=>{let{schema:t,getSystem:n}=e;const r=(null==t?void 0:t.xml)||{},{fn:i,getComponent:l}=n(),{useIsExpandedDeeply:c,useComponent:u}=i.jsonSchema202012,p=c(),h=!!(r.name||r.namespace||r.prefix),[f,d]=(0,s.useState)(p),[m,g]=(0,s.useState)(!1),y=u(\"Accordion\"),v=u(\"ExpandDeepButton\"),b=l(\"JSONSchema202012DeepExpansionContext\")(),w=(0,s.useCallback)((()=>{d((e=>!e))}),[]),E=(0,s.useCallback)(((e,t)=>{d(t),g(t)}),[]);return 0===o()(r).length?null:s.createElement(b.Provider,{value:m},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml\"},h?s.createElement(s.Fragment,null,s.createElement(y,{expanded:f,onChange:w},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\")),s.createElement(v,{expanded:f,onClick:E})):s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\"),!0===r.attribute&&s.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"attribute\"),!0===r.wrapped&&s.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"wrapped\"),s.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.createElement(\"ul\",{className:a()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!f})},f&&s.createElement(s.Fragment,null,r.name&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"name\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.name))),r.namespace&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"namespace\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.namespace))),r.prefix&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"prefix\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.prefix)))))))}},25800:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getProperties:()=>u,makeIsExpandable:()=>c});var r=n(2018),o=n.n(r),s=n(14418),i=n.n(s),a=n(82865),l=n.n(a);const c=(e,t)=>{const{fn:n}=t();if(\"function\"!=typeof e)return null;const{hasKeyword:r}=n.jsonSchema202012;return t=>e(t)||r(t,\"example\")||(null==t?void 0:t.xml)||(null==t?void 0:t.discriminator)||(null==t?void 0:t.externalDocs)},u=(e,t)=>{let{includeReadOnly:n,includeWriteOnly:r}=t;if(null==e||!e.properties)return{};const s=o()(e.properties),a=i()(s).call(s,(e=>{let[,t]=e;const o=!0===(null==t?void 0:t.readOnly),s=!0===(null==t?void 0:t.writeOnly);return(!o||n)&&(!s||r)}));return l()(a)}},14951:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{schema:t,getSystem:n,originalComponent:o}=e;const{getComponent:s}=n(),i=s(\"JSONSchema202012KeywordDiscriminator\"),a=s(\"JSONSchema202012KeywordXml\"),l=s(\"JSONSchema202012KeywordExample\"),c=s(\"JSONSchema202012KeywordExternalDocs\");return r.createElement(r.Fragment,null,r.createElement(o,{schema:t}),r.createElement(i,{schema:t,getSystem:n}),r.createElement(a,{schema:t,getSystem:n}),r.createElement(c,{schema:t,getSystem:n}),r.createElement(l,{schema:t,getSystem:n}))}))},80809:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(45989);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)(r.default)},77536:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(9023);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)(r.default)},64280:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{selectLicenseUrl:()=>s});var r=n(20573),o=n(63543);const s=(0,r.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t)=>t.specSelectors.selectLicenseIdentifierField()),((e,t,n,r)=>n?(0,o.mn)(n,e,{selectedServer:t}):r?`https://spdx.org/licenses/${r}.html`:void 0))},9305:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{contact:()=>A,isOAS31:()=>w,license:()=>S,selectContactEmailField:()=>P,selectContactNameField:()=>C,selectContactUrl:()=>I,selectContactUrlField:()=>N,selectExternalDocsDescriptionField:()=>L,selectExternalDocsUrl:()=>$,selectExternalDocsUrlField:()=>B,selectInfoDescriptionField:()=>M,selectInfoSummaryField:()=>R,selectInfoTermsOfServiceField:()=>D,selectInfoTermsOfServiceUrl:()=>F,selectInfoTitleField:()=>T,selectJsonSchemaDialectDefault:()=>U,selectJsonSchemaDialectField:()=>q,selectLicenseIdentifierField:()=>k,selectLicenseNameField:()=>_,selectLicenseUrl:()=>O,selectLicenseUrlField:()=>j,selectSchemas:()=>z,selectWebhooksOperations:()=>x,webhooks:()=>E});var r=n(97606),o=n.n(r),s=n(24282),i=n.n(s),a=n(14418),l=n.n(a),c=n(58118),u=n.n(c),p=n(39022),h=n.n(p),f=n(2018),d=n.n(f),m=n(43393),g=n(20573),y=n(63543),v=n(84380);const b=(0,m.Map)(),w=(0,g.P1)(((e,t)=>t.specSelectors.specJson()),v.isOAS31),E=()=>e=>e.specSelectors.specJson().get(\"webhooks\",b),x=(0,g.P1)(((e,t)=>t.specSelectors.webhooks()),((e,t)=>t.specSelectors.validOperationMethods()),((e,t)=>t.specSelectors.specResolvedSubtree([\"webhooks\"])),((e,t)=>{var n;return m.Map.isMap(e)?o()(n=i()(e).call(e,((e,n,r)=>{var s,i;if(!m.Map.isMap(n))return e;const a=o()(s=l()(i=n.entrySeq()).call(i,(e=>{let[n]=e;return u()(t).call(t,n)}))).call(s,(e=>{let[t,n]=e;return{operation:(0,m.Map)({operation:n}),method:t,path:r,specPath:(0,m.List)([\"webhooks\",r,t])}}));return h()(e).call(e,a)}),(0,m.List)()).groupBy((e=>e.path))).call(n,(e=>e.toArray())).toObject():{}})),S=()=>e=>e.specSelectors.info().get(\"license\",b),_=()=>e=>e.specSelectors.license().get(\"name\",\"License\"),j=()=>e=>e.specSelectors.license().get(\"url\"),O=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),k=()=>e=>e.specSelectors.license().get(\"identifier\"),A=()=>e=>e.specSelectors.info().get(\"contact\",b),C=()=>e=>e.specSelectors.contact().get(\"name\",\"the developer\"),P=()=>e=>e.specSelectors.contact().get(\"email\"),N=()=>e=>e.specSelectors.contact().get(\"url\"),I=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectContactUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),T=()=>e=>e.specSelectors.info().get(\"title\"),R=()=>e=>e.specSelectors.info().get(\"summary\"),M=()=>e=>e.specSelectors.info().get(\"description\"),D=()=>e=>e.specSelectors.info().get(\"termsOfService\"),F=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectInfoTermsOfServiceField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),L=()=>e=>e.specSelectors.externalDocs().get(\"description\"),B=()=>e=>e.specSelectors.externalDocs().get(\"url\"),$=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectExternalDocsUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),q=()=>e=>e.specSelectors.specJson().get(\"jsonSchemaDialect\"),U=()=>\"https://spec.openapis.org/oas/3.1/dialect/base\",z=(0,g.P1)(((e,t)=>t.specSelectors.definitions()),((e,t)=>t.specSelectors.specResolvedSubtree([\"components\",\"schemas\"])),((e,t)=>{var n;return m.Map.isMap(e)?m.Map.isMap(t)?i()(n=d()(e.toJS())).call(n,((e,n)=>{let[r,o]=n;const s=t.get(r);return e[r]=(null==s?void 0:s.toJS())||o,e}),{}):e.toJS():{}}))},32884:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{isOAS3:()=>o,selectLicenseUrl:()=>s});var r=n(84380);const o=(e,t)=>function(n){const r=t.specSelectors.isOAS31();for(var o=arguments.length,s=new Array(o>1?o-1:0),i=1;i<o;i++)s[i-1]=arguments[i];return r||e(...s)},s=(0,r.createOnlyOAS31SelectorWrapper)((()=>(e,t)=>t.oas31Selectors.selectLicenseUrl()))},77423:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31Contact\",!0);return r.createElement(n,null)}))},284:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31Info\",!0);return r.createElement(n,null)}))},6608:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31License\",!0);return r.createElement(n,null)}))},17042:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(67294),o=n(84380),s=n(25800);const i=(0,o.createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t,...n}=e;const o=t(),{getComponent:i,fn:a,getConfigs:l}=o,c=l(),u=i(\"OAS31Model\"),p=i(\"JSONSchema202012\"),h=i(\"JSONSchema202012Keyword$schema\"),f=i(\"JSONSchema202012Keyword$vocabulary\"),d=i(\"JSONSchema202012Keyword$id\"),m=i(\"JSONSchema202012Keyword$anchor\"),g=i(\"JSONSchema202012Keyword$dynamicAnchor\"),y=i(\"JSONSchema202012Keyword$ref\"),v=i(\"JSONSchema202012Keyword$dynamicRef\"),b=i(\"JSONSchema202012Keyword$defs\"),w=i(\"JSONSchema202012Keyword$comment\"),E=i(\"JSONSchema202012KeywordAllOf\"),x=i(\"JSONSchema202012KeywordAnyOf\"),S=i(\"JSONSchema202012KeywordOneOf\"),_=i(\"JSONSchema202012KeywordNot\"),j=i(\"JSONSchema202012KeywordIf\"),O=i(\"JSONSchema202012KeywordThen\"),k=i(\"JSONSchema202012KeywordElse\"),A=i(\"JSONSchema202012KeywordDependentSchemas\"),C=i(\"JSONSchema202012KeywordPrefixItems\"),P=i(\"JSONSchema202012KeywordItems\"),N=i(\"JSONSchema202012KeywordContains\"),I=i(\"JSONSchema202012KeywordProperties\"),T=i(\"JSONSchema202012KeywordPatternProperties\"),R=i(\"JSONSchema202012KeywordAdditionalProperties\"),M=i(\"JSONSchema202012KeywordPropertyNames\"),D=i(\"JSONSchema202012KeywordUnevaluatedItems\"),F=i(\"JSONSchema202012KeywordUnevaluatedProperties\"),L=i(\"JSONSchema202012KeywordType\"),B=i(\"JSONSchema202012KeywordEnum\"),$=i(\"JSONSchema202012KeywordConst\"),q=i(\"JSONSchema202012KeywordConstraint\"),U=i(\"JSONSchema202012KeywordDependentRequired\"),z=i(\"JSONSchema202012KeywordContentSchema\"),V=i(\"JSONSchema202012KeywordTitle\"),W=i(\"JSONSchema202012KeywordDescription\"),J=i(\"JSONSchema202012KeywordDefault\"),K=i(\"JSONSchema202012KeywordDeprecated\"),H=i(\"JSONSchema202012KeywordReadOnly\"),G=i(\"JSONSchema202012KeywordWriteOnly\"),Z=i(\"JSONSchema202012Accordion\"),Y=i(\"JSONSchema202012ExpandDeepButton\"),X=i(\"JSONSchema202012ChevronRightIcon\"),Q=i(\"withJSONSchema202012Context\")(u,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:c.defaultModelExpandDepth,includeReadOnly:Boolean(n.includeReadOnly),includeWriteOnly:Boolean(n.includeWriteOnly)},components:{JSONSchema:p,Keyword$schema:h,Keyword$vocabulary:f,Keyword$id:d,Keyword$anchor:m,Keyword$dynamicAnchor:g,Keyword$ref:y,Keyword$dynamicRef:v,Keyword$defs:b,Keyword$comment:w,KeywordAllOf:E,KeywordAnyOf:x,KeywordOneOf:S,KeywordNot:_,KeywordIf:j,KeywordThen:O,KeywordElse:k,KeywordDependentSchemas:A,KeywordPrefixItems:C,KeywordItems:P,KeywordContains:N,KeywordProperties:I,KeywordPatternProperties:T,KeywordAdditionalProperties:R,KeywordPropertyNames:M,KeywordUnevaluatedItems:D,KeywordUnevaluatedProperties:F,KeywordType:L,KeywordEnum:B,KeywordConst:$,KeywordConstraint:q,KeywordDependentRequired:U,KeywordContentSchema:z,KeywordTitle:V,KeywordDescription:W,KeywordDefault:J,KeywordDeprecated:K,KeywordReadOnly:H,KeywordWriteOnly:G,Accordion:Z,ExpandDeepButton:Y,ChevronRightIcon:X},fn:{upperFirst:a.upperFirst,isExpandable:(0,s.makeIsExpandable)(a.jsonSchema202012.isExpandable,t),getProperties:s.getProperties}});return r.createElement(Q,n)}))},22914:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const{getComponent:n,fn:s,getConfigs:i}=t(),a=i();if(o.ModelsWithJSONSchemaContext)return r.createElement(o.ModelsWithJSONSchemaContext,null);const l=n(\"OAS31Models\",!0),c=n(\"JSONSchema202012\"),u=n(\"JSONSchema202012Keyword$schema\"),p=n(\"JSONSchema202012Keyword$vocabulary\"),h=n(\"JSONSchema202012Keyword$id\"),f=n(\"JSONSchema202012Keyword$anchor\"),d=n(\"JSONSchema202012Keyword$dynamicAnchor\"),m=n(\"JSONSchema202012Keyword$ref\"),g=n(\"JSONSchema202012Keyword$dynamicRef\"),y=n(\"JSONSchema202012Keyword$defs\"),v=n(\"JSONSchema202012Keyword$comment\"),b=n(\"JSONSchema202012KeywordAllOf\"),w=n(\"JSONSchema202012KeywordAnyOf\"),E=n(\"JSONSchema202012KeywordOneOf\"),x=n(\"JSONSchema202012KeywordNot\"),S=n(\"JSONSchema202012KeywordIf\"),_=n(\"JSONSchema202012KeywordThen\"),j=n(\"JSONSchema202012KeywordElse\"),O=n(\"JSONSchema202012KeywordDependentSchemas\"),k=n(\"JSONSchema202012KeywordPrefixItems\"),A=n(\"JSONSchema202012KeywordItems\"),C=n(\"JSONSchema202012KeywordContains\"),P=n(\"JSONSchema202012KeywordProperties\"),N=n(\"JSONSchema202012KeywordPatternProperties\"),I=n(\"JSONSchema202012KeywordAdditionalProperties\"),T=n(\"JSONSchema202012KeywordPropertyNames\"),R=n(\"JSONSchema202012KeywordUnevaluatedItems\"),M=n(\"JSONSchema202012KeywordUnevaluatedProperties\"),D=n(\"JSONSchema202012KeywordType\"),F=n(\"JSONSchema202012KeywordEnum\"),L=n(\"JSONSchema202012KeywordConst\"),B=n(\"JSONSchema202012KeywordConstraint\"),$=n(\"JSONSchema202012KeywordDependentRequired\"),q=n(\"JSONSchema202012KeywordContentSchema\"),U=n(\"JSONSchema202012KeywordTitle\"),z=n(\"JSONSchema202012KeywordDescription\"),V=n(\"JSONSchema202012KeywordDefault\"),W=n(\"JSONSchema202012KeywordDeprecated\"),J=n(\"JSONSchema202012KeywordReadOnly\"),K=n(\"JSONSchema202012KeywordWriteOnly\"),H=n(\"JSONSchema202012Accordion\"),G=n(\"JSONSchema202012ExpandDeepButton\"),Z=n(\"JSONSchema202012ChevronRightIcon\"),Y=n(\"withJSONSchema202012Context\");return o.ModelsWithJSONSchemaContext=Y(l,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:a.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:c,Keyword$schema:u,Keyword$vocabulary:p,Keyword$id:h,Keyword$anchor:f,Keyword$dynamicAnchor:d,Keyword$ref:m,Keyword$dynamicRef:g,Keyword$defs:y,Keyword$comment:v,KeywordAllOf:b,KeywordAnyOf:w,KeywordOneOf:E,KeywordNot:x,KeywordIf:S,KeywordThen:_,KeywordElse:j,KeywordDependentSchemas:O,KeywordPrefixItems:k,KeywordItems:A,KeywordContains:C,KeywordProperties:P,KeywordPatternProperties:N,KeywordAdditionalProperties:I,KeywordPropertyNames:T,KeywordUnevaluatedItems:R,KeywordUnevaluatedProperties:M,KeywordType:D,KeywordEnum:F,KeywordConst:L,KeywordConstraint:B,KeywordDependentRequired:$,KeywordContentSchema:q,KeywordTitle:U,KeywordDescription:z,KeywordDefault:V,KeywordDeprecated:W,KeywordReadOnly:J,KeywordWriteOnly:K,Accordion:H,ExpandDeepButton:G,ChevronRightIcon:Z},fn:{upperFirst:s.upperFirst,isExpandable:s.jsonSchema202012.isExpandable,getProperties:s.jsonSchema202012.getProperties}}),r.createElement(o.ModelsWithJSONSchemaContext,null)}));o.ModelsWithJSONSchemaContext=null;const s=o},41434:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(23101),o=n.n(r),s=n(67294);const i=(e,t)=>e=>{const n=t.specSelectors.isOAS31(),r=t.getComponent(\"OAS31VersionPragmaFilter\");return s.createElement(r,o()({isOAS31:n},e))}},1122:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{originalComponent:t,...n}=e;return r.createElement(\"span\",null,r.createElement(t,n),r.createElement(\"small\",{className:\"version-stamp\"},r.createElement(\"pre\",{className:\"version\"},\"OAS 3.1\")))}))},28560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(87198),o=n.n(r);let s=!1;function i(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return s=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const n=t.getConfigs().onComplete;return s&&\"function\"==typeof n&&(o()(n,0),s=!1),e(...arguments)}}}}}}},92135:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{requestSnippetGenerator_curl_bash:()=>j,requestSnippetGenerator_curl_cmd:()=>O,requestSnippetGenerator_curl_powershell:()=>_});var r=n(11882),o=n.n(r),s=n(81607),i=n.n(s),a=n(35627),l=n.n(a),c=n(97606),u=n.n(c),p=n(12196),h=n.n(p),f=n(74386),d=n.n(f),m=n(58118),g=n.n(m),y=n(27504),v=n(43393);const b=e=>{var t;const n=\"_**[]\";return o()(e).call(e,n)<0?e:i()(t=e.split(n)[0]).call(t)},w=e=>\"-d \"===e||/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/'/g,\"'\\\\''\")+\"'\",E=e=>\"-d \"===(e=e.replace(/\\^/g,\"^^\").replace(/\\\\\"/g,'\\\\\\\\\"').replace(/\"/g,'\"\"').replace(/\\n/g,\"^\\n\"))?e.replace(/-d /g,\"-d ^\\n\"):/^[_\\/-]/g.test(e)?e:'\"'+e+'\"',x=e=>\"-d \"===e?e:/\\n/.test(e)?'@\"\\n'+e.replace(/\"/g,'\\\\\"').replace(/`/g,\"``\").replace(/\\$/,\"`$\")+'\\n\"@':/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/\"/g,'\"\"').replace(/'/g,\"''\")+\"'\";const S=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",o=!1,s=\"\";const i=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return s+=\" \"+u()(n).call(n,t).join(\" \")},a=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return s+=u()(n).call(n,t).join(\" \")},c=()=>s+=` ${n}`,p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return s+=h()(\"  \").call(\"  \",e)};let f=e.get(\"headers\");if(s+=\"curl\"+r,e.has(\"curlOptions\")&&i(...e.get(\"curlOptions\")),i(\"-X\",e.get(\"method\")),c(),p(),a(`${e.get(\"url\")}`),f&&f.size)for(let t of d()(m=e.get(\"headers\")).call(m)){var m;c(),p();let[e,n]=t;a(\"-H\",`${e}: ${n}`),o=o||/^content-type$/i.test(e)&&/^multipart\\/form-data$/i.test(n)}const w=e.get(\"body\");var E;if(w)if(o&&g()(E=[\"POST\",\"PUT\",\"PATCH\"]).call(E,e.get(\"method\")))for(let[e,t]of w.entrySeq()){let n=b(e);c(),p(),a(\"-F\"),t instanceof y.Z.File?i(`${n}=@${t.name}${t.type?`;type=${t.type}`:\"\"}`):i(`${n}=${t}`)}else if(w instanceof y.Z.File)c(),p(),a(`--data-binary '@${w.name}'`);else{c(),p(),a(\"-d \");let t=w;v.Map.isMap(t)?a(function(e){let t=[];for(let[n,r]of e.get(\"body\").entrySeq()){let e=b(n);r instanceof y.Z.File?t.push(`  \"${e}\": {\\n    \"name\": \"${r.name}\"${r.type?`,\\n    \"type\": \"${r.type}\"`:\"\"}\\n  }`):t.push(`  \"${e}\": ${l()(r,null,2).replace(/(\\r\\n|\\r|\\n)/g,\"\\n  \")}`)}return`{\\n${t.join(\",\\n\")}\\n}`}(e)):(\"string\"!=typeof t&&(t=l()(t)),a(t))}else w||\"POST\"!==e.get(\"method\")||(c(),p(),a(\"-d ''\"));return s},_=e=>S(e,x,\"`\\n\",\".exe\"),j=e=>S(e,w,\"\\\\\\n\"),O=e=>S(e,E,\"^\\n\")},86575:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(92135),o=n(4669),s=n(84206);const i=()=>({components:{RequestSnippets:s.default},fn:r,statePlugins:{requestSnippets:{selectors:o}}})},84206:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>w});var r=n(14418),o=n.n(r),s=n(25110),i=n.n(s),a=n(86),l=n.n(a),c=n(97606),u=n.n(c),p=n(67294),h=n(27361),f=n.n(h),d=n(23560),m=n.n(d),g=n(74855),y=n(33424);const v={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(250, 250, 250)\",paddingBottom:\"0\",paddingTop:\"0\",border:\"1px solid rgb(51, 51, 51)\",borderRadius:\"4px 4px 0 0\",boxShadow:\"none\",borderBottom:\"none\"},b={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(51, 51, 51)\",boxShadow:\"none\",border:\"1px solid rgb(51, 51, 51)\",paddingBottom:\"0\",paddingTop:\"0\",borderRadius:\"4px 4px 0 0\",marginTop:\"-5px\",marginRight:\"-5px\",marginLeft:\"-5px\",zIndex:\"9999\",borderBottom:\"none\"},w=e=>{var t,n;let{request:r,requestSnippetsSelectors:s,getConfigs:a}=e;const c=m()(a)?a():null,h=!1!==f()(c,\"syntaxHighlight\")&&f()(c,\"syntaxHighlight.activated\",!0),d=(0,p.useRef)(null),[w,E]=(0,p.useState)(null===(t=s.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[x,S]=(0,p.useState)(null==s?void 0:s.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=o()(e=i()(d.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains(\"curl-command\"))}));return l()(t).call(t,(e=>e.addEventListener(\"mousewheel\",C,{passive:!1}))),()=>{l()(t).call(t,(e=>e.removeEventListener(\"mousewheel\",C)))}}),[r]);const _=s.getSnippetGenerators(),j=_.get(w),O=j.get(\"fn\")(r),k=()=>{S(!x)},A=e=>e===w?b:v,C=e=>{const{target:t,deltaY:n}=e,{scrollHeight:r,offsetHeight:o,scrollTop:s}=t;r>o&&(0===s&&n<0||o+s>=r&&n>0)&&e.preventDefault()},P=h?p.createElement(y.d3,{language:j.get(\"syntax\"),className:\"curl microlight\",style:(0,y.C2)(f()(c,\"syntaxHighlight.theme\"))},O):p.createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:O});return p.createElement(\"div\",{className:\"request-snippets\",ref:d},p.createElement(\"div\",{style:{width:\"100%\",display:\"flex\",justifyContent:\"flex-start\",alignItems:\"center\",marginBottom:\"15px\"}},p.createElement(\"h4\",{onClick:()=>k(),style:{cursor:\"pointer\"}},\"Snippets\"),p.createElement(\"button\",{onClick:()=>k(),style:{border:\"none\",background:\"none\"},title:x?\"Collapse operation\":\"Expand operation\"},p.createElement(\"svg\",{className:\"arrow\",width:\"10\",height:\"10\"},p.createElement(\"use\",{href:x?\"#large-arrow-down\":\"#large-arrow\",xlinkHref:x?\"#large-arrow-down\":\"#large-arrow\"})))),x&&p.createElement(\"div\",{className:\"curl-command\"},p.createElement(\"div\",{style:{paddingLeft:\"15px\",paddingRight:\"10px\",width:\"100%\",display:\"flex\"}},u()(n=_.entrySeq()).call(n,(e=>{let[t,n]=e;return p.createElement(\"div\",{style:A(t),className:\"btn\",key:t,onClick:()=>(e=>{w!==e&&E(e)})(t)},p.createElement(\"h4\",{style:t===w?{color:\"white\"}:{}},n.get(\"title\")))}))),p.createElement(\"div\",{className:\"copy-to-clipboard\"},p.createElement(g.CopyToClipboard,{text:O},p.createElement(\"button\",null))),p.createElement(\"div\",null,P)))}},4669:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getActiveLanguage:()=>d,getDefaultExpanded:()=>m,getGenerators:()=>h,getSnippetGenerators:()=>f});var r=n(14418),o=n.n(r),s=n(58118),i=n.n(s),a=n(97606),l=n.n(a),c=n(20573),u=n(43393);const p=e=>e||(0,u.Map)(),h=(0,c.P1)(p,(e=>{const t=e.get(\"languages\"),n=e.get(\"generators\",(0,u.Map)());return!t||t.isEmpty()?n:o()(n).call(n,((e,n)=>i()(t).call(t,n)))})),f=e=>t=>{var n,r;let{fn:s}=t;return o()(n=l()(r=h(e)).call(r,((e,t)=>{const n=(e=>s[`requestSnippetGenerator_${e}`])(t);return\"function\"!=typeof n?null:e.set(\"fn\",n)}))).call(n,(e=>e))},d=(0,c.P1)(p,(e=>e.get(\"activeLanguage\"))),m=(0,c.P1)(p,(e=>e.get(\"defaultExpanded\")))},36195:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ErrorBoundary:()=>i,default:()=>a});var r=n(67294),o=n(56189),s=n(29403);class i extends r.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:n}=this.props;if(this.state.hasError){const n=e(\"Fallback\");return r.createElement(n,{name:t})}return n}}i.defaultProps={targetName:\"this component\",getComponent:()=>s.default,fn:{componentDidCatch:o.componentDidCatch},children:null};const a=i},29403:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{name:t}=e;return r.createElement(\"div\",{className:\"fallback\"},\"😱 \",r.createElement(\"i\",null,\"Could not render \",\"t\"===t?\"this component\":t,\", see the console.\"))}},56189:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{componentDidCatch:()=>i,withErrorBoundary:()=>a});var r=n(23101),o=n.n(r),s=n(67294);const i=console.error,a=e=>t=>{const{getComponent:n,fn:r}=e(),i=n(\"ErrorBoundary\"),a=r.getDisplayName(t);class l extends s.Component{render(){return s.createElement(i,{targetName:a,getComponent:n,fn:r},s.createElement(t,o()({},this.props,this.context)))}}var c;return l.displayName=`WithErrorBoundary(${a})`,(c=t).prototype&&c.prototype.isReactComponent&&(l.prototype.mapStateToProps=t.prototype.mapStateToProps),l}},27621:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(47475),o=n.n(r),s=n(7287),i=n.n(s),a=n(36195),l=n(29403),c=n(56189);const u=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{var r;let{getSystem:s}=n;const u=t?e:[\"App\",\"BaseLayout\",\"VersionPragmaFilter\",\"InfoContainer\",\"ServersContainer\",\"SchemesContainer\",\"AuthorizeBtnContainer\",\"FilterContainer\",\"Operations\",\"OperationContainer\",\"parameters\",\"responses\",\"OperationServers\",\"Models\",\"ModelWrapper\",...e],p=i()(u,o()(r=Array(u.length)).call(r,((e,t)=>{let{fn:n}=t;return n.withErrorBoundary(e)})));return{fn:{componentDidCatch:c.componentDidCatch,withErrorBoundary:(0,c.withErrorBoundary)(s)},components:{ErrorBoundary:a.default,Fallback:l.default},wrapComponents:p}}}},72846:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(24282),o=n.n(r),s=n(35627),i=n.n(s),a=n(59704),l=n.n(a);const c=[{when:/json/,shouldStringifyTypes:[\"string\"]}],u=[\"object\"],p=e=>(t,n,r,s)=>{const{fn:a}=e(),p=a.memoizedSampleFromSchema(t,n,s),h=typeof p,f=o()(c).call(c,((e,t)=>t.when.test(r)?[...e,...t.shouldStringifyTypes]:e),u);return l()(f,(e=>e===h))?i()(p,null,2):p}},16132:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=e=>function(t){var n,r;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:a}=e();return\"function\"==typeof(null===(n=t)||void 0===n?void 0:n.toJS)&&(t=t.toJS()),\"function\"==typeof(null===(r=i)||void 0===r?void 0:r.toJS)&&(i=i.toJS()),/xml/.test(o)?a.getXmlSampleSchema(t,s,i):/(yaml|yml)/.test(o)?a.getYamlSampleSchema(t,s,o,i):a.getJsonSampleSchema(t,s,o,i)}},81169:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=e=>(t,n,r)=>{const{fn:o}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\\x3c!-- XML example cannot be generated; root element name is undefined --\\x3e';if(t.$$ref){let e=t.$$ref.match(/\\S*\\/(\\S+)$/);t.xml.name=e[1]}}return o.memoizedCreateXMLExample(t,n,r)}},79431:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(24278),o=n.n(r),s=n(1272);const i=e=>(t,n,r,i)=>{const{fn:a}=e(),l=a.getJsonSampleSchema(t,n,r,i);let c;try{c=s.ZP.dump(s.ZP.load(l),{lineWidth:-1},{schema:s.A8}),\"\\n\"===c[c.length-1]&&(c=o()(c).call(c,0,c.length-1))}catch(e){return console.error(e),\"error: could not generate yaml example\"}return c.replace(/\\t/g,\"  \")}},29812:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>q,inferSchema:()=>$,memoizedCreateXMLExample:()=>V,memoizedSampleFromSchema:()=>W,sampleFromSchema:()=>U,sampleFromSchemaGeneric:()=>B});var r=n(11882),o=n.n(r),s=n(86),i=n.n(s),a=n(58309),l=n.n(a),c=n(58118),u=n.n(c),p=n(92039),h=n.n(p),f=n(24278),d=n.n(f),m=n(51679),g=n.n(m),y=n(39022),v=n.n(y),b=n(97606),w=n.n(b),E=n(35627),x=n.n(E),S=n(53479),_=n.n(S),j=n(14419),O=n.n(j),k=n(41609),A=n.n(k),C=n(90242),P=n(60314);const N={string:e=>e.pattern?(e=>{try{return new(O())(e).gen()}catch(e){return\"string\"}})(e.pattern):\"string\",string_email:()=>\"user@example.com\",\"string_date-time\":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",string_hostname:()=>\"example.com\",string_ipv4:()=>\"198.51.100.42\",string_ipv6:()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>\"boolean\"!=typeof e.default||e.default},I=e=>{e=(0,C.mz)(e);let{type:t,format:n}=e,r=N[`${t}_${n}`]||N[t];return(0,C.Wl)(r)?r(e):\"Unknown Type: \"+e.type},T=e=>(0,C.XV)(e,\"$$ref\",(e=>\"string\"==typeof e&&o()(e).call(e,\"#\")>-1)),R=[\"maxProperties\",\"minProperties\"],M=[\"minItems\",\"maxItems\"],D=[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\"],F=[\"minLength\",\"maxLength\"],L=function(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var s;(i()(n=[\"example\",\"default\",\"enum\",\"xml\",\"type\",...R,...M,...D,...F]).call(n,(n=>(n=>{void 0===t[n]&&void 0!==e[n]&&(t[n]=e[n])})(n))),void 0!==e.required&&l()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),i()(s=e.required).call(s,(e=>{var n;u()(n=t.required).call(n,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let n=(0,C.mz)(e.properties);for(let s in n){var a;if(Object.prototype.hasOwnProperty.call(n,s))if(!n[s]||!n[s].deprecated)if(!n[s]||!n[s].readOnly||r.includeReadOnly)if(!n[s]||!n[s].writeOnly||r.includeWriteOnly)if(!t.properties[s])t.properties[s]=n[s],!e.required&&l()(e.required)&&-1!==o()(a=e.required).call(a,s)&&(t.required?t.required.push(s):t.required=[s])}}return e.items&&(t.items||(t.items={}),t.items=L(e.items,t.items,r)),t},B=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,C.Wl)(e.toJS)&&(e=e.toJS());let s=void 0!==n||e&&void 0!==e.example||e&&void 0!==e.default;const a=!s&&e&&e.oneOf&&e.oneOf.length>0,c=!s&&e&&e.anyOf&&e.anyOf.length>0;if(!s&&(a||c)){const n=(0,C.mz)(a?e.oneOf[0]:e.anyOf[0]);if(L(n,e,t),!e.xml&&n.xml&&(e.xml=n.xml),void 0!==e.example&&void 0!==n.example)s=!0;else if(n.properties){e.properties||(e.properties={});let r=(0,C.mz)(n.properties);for(let s in r){var p;if(Object.prototype.hasOwnProperty.call(r,s))if(!r[s]||!r[s].deprecated)if(!r[s]||!r[s].readOnly||t.includeReadOnly)if(!r[s]||!r[s].writeOnly||t.includeWriteOnly)if(!e.properties[s])e.properties[s]=r[s],!n.required&&l()(n.required)&&-1!==o()(p=n.required).call(p,s)&&(e.required?e.required.push(s):e.required=[s])}}}const f={};let{xml:m,type:y,example:b,properties:E,additionalProperties:x,items:S}=e||{},{includeReadOnly:_,includeWriteOnly:j}=t;m=m||{};let O,{name:k,prefix:P,namespace:N}=m,F={};if(r&&(k=k||\"notagname\",O=(P?P+\":\":\"\")+k,N)){f[P?\"xmlns:\"+P:\"xmlns\"]=N}r&&(F[O]=[]);const $=t=>h()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!y&&(E||x||$(R)?y=\"object\":S||$(M)?y=\"array\":$(D)?(y=\"number\",e.type=\"number\"):s||e.enum||(y=\"string\",e.type=\"string\"));const q=t=>{var n,r,o,s,i;null!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&void 0!==(null===(r=e)||void 0===r?void 0:r.maxItems)&&(t=d()(t).call(t,0,null===(i=e)||void 0===i?void 0:i.maxItems));if(null!==(null===(o=e)||void 0===o?void 0:o.minItems)&&void 0!==(null===(s=e)||void 0===s?void 0:s.minItems)){let n=0;for(;t.length<(null===(a=e)||void 0===a?void 0:a.minItems);){var a;t.push(t[n++%t.length])}}return t},U=(0,C.mz)(E);let z,V=0;const W=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&V>=e.maxProperties,J=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!W()&&(!(t=>{var n;return!(e&&e.required&&e.required.length&&u()(n=e.required).call(n,t))})(t)||e.maxProperties-V-(()=>{if(!e||!e.required)return 0;let t=0;var n,o;return r?i()(n=e.required).call(n,(e=>t+=void 0===F[e]?0:1)):i()(o=e.required).call(o,(e=>{var n;return t+=void 0===(null===(n=F[O])||void 0===n?void 0:g()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(z=r?function(n){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&U[n]){if(U[n].xml=U[n].xml||{},U[n].xml.attribute){const e=l()(U[n].enum)?U[n].enum[0]:void 0,t=U[n].example,r=U[n].default;return void(f[U[n].xml.name||n]=void 0!==t?t:void 0!==r?r:void 0!==e?e:I(U[n]))}U[n].xml.name=U[n].xml.name||n}else U[n]||!1===x||(U[n]={xml:{name:n}});let s=B(e&&U[n]||void 0,t,o,r);var i;J(n)&&(V++,l()(s)?F[O]=v()(i=F[O]).call(i,s):F[O].push(s))}:(n,o)=>{if(J(n)){if(Object.prototype.hasOwnProperty.call(e,\"discriminator\")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,\"mapping\")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,\"$$ref\")&&e.$$ref&&e.discriminator.propertyName===n){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){F[n]=t;break}}else F[n]=B(U[n],t,o,r);V++}},s){let o;if(o=T(void 0!==n?n:void 0!==b?b:e.default),!r){if(\"number\"==typeof o&&\"string\"===y)return`${o}`;if(\"string\"!=typeof o||\"string\"===y)return o;try{return JSON.parse(o)}catch(e){return o}}if(e||(y=l()(o)?\"array\":typeof o),\"array\"===y){if(!l()(o)){if(\"string\"==typeof o)return o;o=[o]}const n=e?e.items:void 0;n&&(n.xml=n.xml||m||{},n.xml.name=n.xml.name||m.name);let s=w()(o).call(o,(e=>B(n,t,e,r)));return s=q(s),m.wrapped?(F[O]=s,A()(f)||F[O].push({_attr:f})):F=s,F}if(\"object\"===y){if(\"string\"==typeof o)return o;for(let t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e&&U[t]&&U[t].readOnly&&!_||e&&U[t]&&U[t].writeOnly&&!j||(e&&U[t]&&U[t].xml&&U[t].xml.attribute?f[U[t].xml.name||t]=o[t]:z(t,o[t])));return A()(f)||F[O].push({_attr:f}),F}return F[O]=A()(f)?o:[{_attr:f},o],F}if(\"object\"===y){for(let e in U)Object.prototype.hasOwnProperty.call(U,e)&&(U[e]&&U[e].deprecated||U[e]&&U[e].readOnly&&!_||U[e]&&U[e].writeOnly&&!j||z(e));if(r&&f&&F[O].push({_attr:f}),W())return F;if(!0===x)r?F[O].push({additionalProp:\"Anything can be here\"}):F.additionalProp1={},V++;else if(x){const n=(0,C.mz)(x),o=B(n,t,void 0,r);if(r&&n.xml&&n.xml.name&&\"notagname\"!==n.xml.name)F[O].push(o);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&V<e.minProperties?e.minProperties-V:3;for(let e=1;e<=t;e++){if(W())return F;if(r){const t={};t[\"additionalProp\"+e]=o.notagname,F[O].push(t)}else F[\"additionalProp\"+e]=o;V++}}}return F}if(\"array\"===y){if(!S)return;let n;var K,H;if(r)S.xml=S.xml||(null===(K=e)||void 0===K?void 0:K.xml)||{},S.xml.name=S.xml.name||m.name;if(l()(S.anyOf))n=w()(H=S.anyOf).call(H,(e=>B(L(S,e,t),t,void 0,r)));else if(l()(S.oneOf)){var G;n=w()(G=S.oneOf).call(G,(e=>B(L(S,e,t),t,void 0,r)))}else{if(!(!r||r&&m.wrapped))return B(S,t,void 0,r);n=[B(S,t,void 0,r)]}return n=q(n),r&&m.wrapped?(F[O]=n,A()(f)||F[O].push({_attr:f}),F):n}let Z;if(e&&l()(e.enum))Z=(0,C.AF)(e.enum)[0];else{if(!e)return;if(Z=I(e),\"number\"==typeof Z){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Z=t);let n=e.maximum;null!=n&&(e.exclusiveMaximum&&n--,Z=n)}if(\"string\"==typeof Z&&(null!==e.maxLength&&void 0!==e.maxLength&&(Z=d()(Z).call(Z,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Z.length<e.minLength;)Z+=Z[t++%Z.length]}}if(\"file\"!==y)return r?(F[O]=A()(f)?Z:[{_attr:f},Z],F):Z},$=e=>(e.schema&&(e=e.schema),e.properties&&(e.type=\"object\"),e),q=(e,t,n)=>{const r=B(e,t,n,!0);if(r)return\"string\"==typeof r?r:_()(r,{declaration:!0,indent:\"\\t\"})},U=(e,t,n)=>B(e,t,n,!1),z=(e,t,n)=>[e,x()(t),x()(n)],V=(0,P.Z)(q,z),W=(0,P.Z)(U,z)},8883:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(29812),o=n(72846),s=n(79431),i=n(81169),a=n(16132);const l=e=>{let{getSystem:t}=e;return{fn:{inferSchema:r.inferSchema,sampleFromSchema:r.sampleFromSchema,sampleFromSchemaGeneric:r.sampleFromSchemaGeneric,createXMLExample:r.createXMLExample,memoizedSampleFromSchema:r.memoizedSampleFromSchema,memoizedCreateXMLExample:r.memoizedCreateXMLExample,getJsonSampleSchema:(0,o.default)(t),getYamlSampleSchema:(0,s.default)(t),getXmlSampleSchema:(0,i.default)(t),getSampleSchema:(0,a.default)(t)}}}},51228:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR_REQUEST:()=>ee,CLEAR_RESPONSE:()=>Q,CLEAR_VALIDATE_PARAMS:()=>te,LOG_REQUEST:()=>X,SET_MUTATED_REQUEST:()=>Y,SET_REQUEST:()=>Z,SET_RESPONSE:()=>G,SET_SCHEME:()=>se,UPDATE_EMPTY_PARAM_INCLUSION:()=>K,UPDATE_JSON:()=>W,UPDATE_OPERATION_META_VALUE:()=>ne,UPDATE_PARAM:()=>J,UPDATE_RESOLVED:()=>re,UPDATE_RESOLVED_SUBTREE:()=>oe,UPDATE_SPEC:()=>z,UPDATE_URL:()=>V,VALIDATE_PARAMS:()=>H,changeConsumesValue:()=>_e,changeParam:()=>ye,changeParamByIdentity:()=>ve,changeProducesValue:()=>je,clearRequest:()=>Te,clearResponse:()=>Ie,clearValidateParams:()=>Se,execute:()=>Ne,executeRequest:()=>Pe,invalidateResolvedSubtreeCache:()=>we,logRequest:()=>Ce,parseToJson:()=>pe,requestResolvedSubtree:()=>ge,resolveSpec:()=>fe,setMutatedRequest:()=>Ae,setRequest:()=>ke,setResponse:()=>Oe,setScheme:()=>Re,updateEmptyParamInclusion:()=>xe,updateJsonSpec:()=>ue,updateResolved:()=>le,updateResolvedSubtree:()=>be,updateSpec:()=>ae,updateUrl:()=>ce,validateParams:()=>Ee});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(96718),l=n.n(a),c=n(24282),u=n.n(c),p=n(2250),h=n.n(p),f=n(6226),d=n.n(f),m=n(14418),g=n.n(m),y=n(3665),v=n.n(y),b=n(11882),w=n.n(b),E=n(86),x=n.n(E),S=n(28222),_=n.n(S),j=n(76986),O=n.n(j),k=n(70586),A=n.n(k),C=n(1272),P=n(43393),N=n(84564),I=n.n(N),T=n(7710),R=n(47037),M=n.n(R),D=n(23279),F=n.n(D),L=n(36968),B=n.n(L),$=n(72700),q=n.n($),U=n(90242);const z=\"spec_update_spec\",V=\"spec_update_url\",W=\"spec_update_json\",J=\"spec_update_param\",K=\"spec_update_empty_param_inclusion\",H=\"spec_validate_param\",G=\"spec_set_response\",Z=\"spec_set_request\",Y=\"spec_set_mutated_request\",X=\"spec_log_request\",Q=\"spec_clear_response\",ee=\"spec_clear_request\",te=\"spec_clear_validate_param\",ne=\"spec_update_operation_meta_value\",re=\"spec_update_resolved\",oe=\"spec_update_resolved_subtree\",se=\"set_scheme\",ie=e=>M()(e)?e:\"\";function ae(e){const t=ie(e).replace(/\\t/g,\"  \");if(\"string\"==typeof e)return{type:z,payload:t}}function le(e){return{type:re,payload:e}}function ce(e){return{type:V,payload:e}}function ue(e){return{type:W,payload:e}}const pe=e=>t=>{let{specActions:n,specSelectors:r,errActions:o}=t,{specStr:s}=r,i=null;try{e=e||s(),o.clear({source:\"parser\"}),i=C.ZP.load(e,{schema:C.A8})}catch(e){return console.error(e),o.newSpecErr({source:\"parser\",level:\"error\",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&\"object\"==typeof i?n.updateJsonSpec(i):{}};let he=!1;const fe=(e,t)=>n=>{let{specActions:r,specSelectors:s,errActions:a,fn:{fetch:c,resolve:u,AST:p={}},getConfigs:h}=n;he||(console.warn(\"specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!\"),he=!0);const{modelPropertyMacro:f,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}=h();void 0===e&&(e=s.specJson()),void 0===t&&(t=s.url());let y=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},v=s.specStr();return u({fetch:c,spec:e,baseDoc:t,modelPropertyMacro:f,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}).then((e=>{let{spec:t,errors:n}=e;if(a.clear({type:\"thrown\"}),o()(n)&&n.length>0){let e=i()(n).call(n,(e=>(console.error(e),e.line=e.fullPath?y(v,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",l()(e,\"message\",{enumerable:!0,value:e.message}),e)));a.newThrownErrBatch(e)}return r.updateResolved(t)}))};let de=[];const me=F()((async()=>{const e=de.system;if(!e)return void console.error(\"debResolveSubtrees: don't have a system to operate on, aborting.\");const{errActions:t,errSelectors:n,fn:{resolveSubtree:r,fetch:s,AST:a={}},specSelectors:c,specActions:p}=e;if(!r)return void console.error(\"Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.\");let f=a.getLineNumberForPath?a.getLineNumberForPath:()=>{};const m=c.specStr(),{modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E}=e.getConfigs();try{var x=await u()(de).call(de,(async(e,a)=>{let{resultMap:u,specWithCurrentSubtrees:p}=await e;const{errors:x,spec:S}=await r(p,a,{baseDoc:c.url(),modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E});if(n.allErrors().size&&t.clearBy((e=>{var t;return\"thrown\"!==e.get(\"type\")||\"resolver\"!==e.get(\"source\")||!h()(t=e.get(\"fullPath\")).call(t,((e,t)=>e===a[t]||void 0===a[t]))})),o()(x)&&x.length>0){let e=i()(x).call(x,(e=>(e.line=e.fullPath?f(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",l()(e,\"message\",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var _,j;S&&c.isOAS3()&&\"components\"===a[0]&&\"securitySchemes\"===a[1]&&await d().all(i()(_=g()(j=v()(S)).call(j,(e=>\"openIdConnect\"===e.type))).call(_,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:w,responseInterceptor:E};try{const n=await s(t);n instanceof Error||n.status>=400?console.error(n.statusText+\" \"+t.url):e.openIdConnectData=JSON.parse(n.text)}catch(e){console.error(e)}})));return B()(u,a,S),p=q()(a,S,p),{resultMap:u,specWithCurrentSubtrees:p}}),d().resolve({resultMap:(c.specResolvedSubtree([])||(0,P.Map)()).toJS(),specWithCurrentSubtrees:c.specJS()}));delete de.system,de=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],x.resultMap)}),35),ge=e=>t=>{var n;w()(n=i()(de).call(de,(e=>e.join(\"@@\")))).call(n,e.join(\"@@\"))>-1||(de.push(e),de.system=t,me())};function ye(e,t,n,r,o){return{type:J,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function ve(e,t,n,r){return{type:J,payload:{path:e,param:t,value:n,isXml:r}}}const be=(e,t)=>({type:oe,payload:{path:e,value:t}}),we=()=>({type:oe,payload:{path:[],value:(0,P.Map)()}}),Ee=(e,t)=>({type:H,payload:{pathMethod:e,isOAS3:t}}),xe=(e,t,n,r)=>({type:K,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}});function Se(e){return{type:te,payload:{pathMethod:e}}}function _e(e,t){return{type:ne,payload:{path:e,value:t,key:\"consumes_value\"}}}function je(e,t){return{type:ne,payload:{path:e,value:t,key:\"produces_value\"}}}const Oe=(e,t,n)=>({payload:{path:e,method:t,res:n},type:G}),ke=(e,t,n)=>({payload:{path:e,method:t,req:n},type:Z}),Ae=(e,t,n)=>({payload:{path:e,method:t,req:n},type:Y}),Ce=e=>({payload:e,type:X}),Pe=e=>t=>{let{fn:n,specActions:r,specSelectors:s,getConfigs:a,oas3Selectors:l}=t,{pathName:c,method:u,operation:p}=e,{requestInterceptor:h,responseInterceptor:f}=a(),d=p.toJS();var m,y;p&&p.get(\"parameters\")&&x()(m=g()(y=p.get(\"parameters\")).call(y,(e=>e&&!0===e.get(\"allowEmptyValue\")))).call(m,(t=>{if(s.parameterInclusionSettingFor([c,u],t.get(\"name\"),t.get(\"in\"))){e.parameters=e.parameters||{};const n=(0,U.cz)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get(\"name\")]=\"\")}}));if(e.contextUrl=I()(s.url()).toString(),d&&d.operationId?e.operationId=d.operationId:d&&c&&u&&(e.operationId=n.opId(d,c,u)),s.isOAS3()){const t=`${c}:${u}`;e.server=l.selectedServer(t)||l.selectedServer();const n=l.serverVariables({server:e.server,namespace:t}).toJS(),r=l.serverVariables({server:e.server}).toJS();e.serverVariables=_()(n).length?n:r,e.requestContentType=l.requestContentType(c,u),e.responseContentType=l.responseContentType(c,u)||\"*/*\";const s=l.requestBodyValue(c,u),a=l.requestBodyInclusionSetting(c,u);var v;if(s&&s.toJS)e.requestBody=g()(v=i()(s).call(s,(e=>P.Map.isMap(e)?e.get(\"value\"):e))).call(v,((e,t)=>(o()(e)?0!==e.length:!(0,U.O2)(e))||a.get(t))).toJS();else e.requestBody=s}let b=O()({},e);b=n.buildRequest(b),r.setRequest(e.pathName,e.method,b);e.requestInterceptor=async t=>{let n=await h.apply(void 0,[t]),o=O()({},n);return r.setMutatedRequest(e.pathName,e.method,o),n},e.responseInterceptor=f;const w=A()();return n.execute(e).then((t=>{t.duration=A()()-w,r.setResponse(e.pathName,e.method,t)})).catch((t=>{\"Failed to fetch\"===t.message&&(t.name=\"\",t.message='**Failed to fetch.**  \\n**Possible Reasons:** \\n  - CORS \\n  - Network Failure \\n  - URL scheme must be \"http\" or \"https\" for CORS request.'),r.setResponse(e.pathName,e.method,{error:!0,err:(0,T.serializeError)(t)})}))},Ne=function(){let{path:e,method:t,...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{fn:{fetch:o},specSelectors:s,specActions:i}=r,a=s.specJsonWithResolvedSubtrees().toJS(),l=s.operationScheme(e,t),{requestContentType:c,responseContentType:u}=s.contentTypeValues([e,t]).toJS(),p=/xml/i.test(c),h=s.parameterValues([e,t],p).toJS();return i.executeRequest({...n,fetch:o,spec:a,pathName:e,method:t,parameters:h,requestContentType:c,scheme:l,responseContentType:u})}};function Ie(e,t){return{type:Q,payload:{path:e,method:t}}}function Te(e,t){return{type:ee,payload:{path:e,method:t}}}function Re(e,t,n){return{type:se,payload:{scheme:e,path:t,method:n}}}},37038:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(20032),o=n(51228),s=n(33881),i=n(77508);function a(){return{statePlugins:{spec:{wrapActions:i,reducers:r.default,actions:o,selectors:s}}}}},20032:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(24282),o=n.n(r),s=n(97606),i=n.n(s),a=n(76986),l=n.n(a),c=n(43393),u=n(90242),p=n(27504),h=n(33881),f=n(51228);const d={[f.UPDATE_SPEC]:(e,t)=>\"string\"==typeof t.payload?e.set(\"spec\",t.payload):e,[f.UPDATE_URL]:(e,t)=>e.set(\"url\",t.payload+\"\"),[f.UPDATE_JSON]:(e,t)=>e.set(\"json\",(0,u.oG)(t.payload)),[f.UPDATE_RESOLVED]:(e,t)=>e.setIn([\"resolved\"],(0,u.oG)(t.payload)),[f.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:n,path:r}=t.payload;return e.setIn([\"resolvedSubtrees\",...r],(0,u.oG)(n))},[f.UPDATE_PARAM]:(e,t)=>{let{payload:n}=t,{path:r,paramName:o,paramIn:s,param:i,value:a,isXml:l}=n,c=i?(0,u.V9)(i):`${s}.${o}`;const p=l?\"value_xml\":\"value\";return e.setIn([\"meta\",\"paths\",...r,\"parameters\",c,p],a)},[f.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:n}=t,{pathMethod:r,paramName:o,paramIn:s,includeEmptyValue:i}=n;if(!o||!s)return console.warn(\"Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey.\"),e;const a=`${s}.${o}`;return e.setIn([\"meta\",\"paths\",...r,\"parameter_inclusions\",a],i)},[f.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n,isOAS3:r}}=t;const s=(0,h.specJsonWithResolvedSubtrees)(e).getIn([\"paths\",...n]),i=(0,h.parameterValues)(e,n).toJS();return e.updateIn([\"meta\",\"paths\",...n,\"parameters\"],(0,c.fromJS)({}),(t=>{var a;return o()(a=s.get(\"parameters\",(0,c.List)())).call(a,((t,o)=>{const s=(0,u.cz)(o,i),a=(0,h.parameterInclusionSettingFor)(e,n,o.get(\"name\"),o.get(\"in\")),l=(0,u.Ik)(o,s,{bypassRequiredCheck:a,isOAS3:r});return t.setIn([(0,u.V9)(o),\"errors\"],(0,c.fromJS)(l))}),t)}))},[f.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n}}=t;return e.updateIn([\"meta\",\"paths\",...n,\"parameters\"],(0,c.fromJS)([]),(e=>i()(e).call(e,(e=>e.set(\"errors\",(0,c.fromJS)([]))))))},[f.SET_RESPONSE]:(e,t)=>{let n,{payload:{res:r,path:o,method:s}}=t;n=r.error?l()({error:!0,name:r.err.name,message:r.err.message,statusCode:r.err.statusCode},r.err.response):r,n.headers=n.headers||{};let i=e.setIn([\"responses\",o,s],(0,u.oG)(n));return p.Z.Blob&&r.data instanceof p.Z.Blob&&(i=i.setIn([\"responses\",o,s,\"text\"],r.data)),i},[f.SET_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn([\"requests\",r,o],(0,u.oG)(n))},[f.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn([\"mutatedRequests\",r,o],(0,u.oG)(n))},[f.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:n,value:r,key:o}}=t,s=[\"paths\",...n],i=[\"meta\",\"paths\",...n];return e.getIn([\"json\",...s])||e.getIn([\"resolved\",...s])||e.getIn([\"resolvedSubtrees\",...s])?e.setIn([...i,o],(0,c.fromJS)(r)):e},[f.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn([\"responses\",n,r])},[f.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn([\"requests\",n,r])},[f.SET_SCHEME]:(e,t)=>{let{payload:{scheme:n,path:r,method:o}}=t;return r&&o?e.setIn([\"scheme\",r,o],n):r||o?void 0:e.setIn([\"scheme\",\"_defaultScheme\"],n)}}},33881:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{allowTryItOutFor:()=>fe,basePath:()=>Q,canExecuteScheme:()=>Ae,consumes:()=>K,consumesOptionsFor:()=>Oe,contentTypeValues:()=>Se,currentProducesFor:()=>_e,definitions:()=>X,externalDocs:()=>q,findDefinition:()=>Y,getOAS3RequiredRequestBodyContentType:()=>Ne,getParameter:()=>ve,hasHost:()=>be,host:()=>ee,info:()=>$,isMediaTypeSchemaPropertiesEqual:()=>Ie,isOAS3:()=>B,lastError:()=>A,mutatedRequestFor:()=>he,mutatedRequests:()=>ce,operationScheme:()=>ke,operationWithMeta:()=>ye,operations:()=>J,operationsWithRootInherited:()=>ne,operationsWithTags:()=>se,parameterInclusionSettingFor:()=>me,parameterValues:()=>we,parameterWithMeta:()=>ge,parameterWithMetaByIdentity:()=>de,parametersIncludeIn:()=>Ee,parametersIncludeType:()=>xe,paths:()=>V,produces:()=>H,producesOptionsFor:()=>je,requestFor:()=>pe,requests:()=>le,responseFor:()=>ue,responses:()=>ae,schemes:()=>te,security:()=>G,securityDefinitions:()=>Z,semver:()=>z,spec:()=>L,specJS:()=>T,specJson:()=>I,specJsonWithResolvedSubtrees:()=>F,specResolved:()=>R,specResolvedSubtree:()=>M,specSource:()=>N,specStr:()=>P,tagDetails:()=>oe,taggedOperations:()=>ie,tags:()=>re,url:()=>C,validOperationMethods:()=>W,validateBeforeExecute:()=>Pe,validationErrors:()=>Ce,version:()=>U});var r=n(24278),o=n.n(r),s=n(86),i=n.n(s),a=n(11882),l=n.n(a),c=n(97606),u=n.n(c),p=n(14418),h=n.n(p),f=n(51679),d=n.n(f),m=n(24282),g=n.n(m),y=n(2578),v=n.n(y),b=n(92039),w=n.n(b),E=n(58309),x=n.n(E),S=n(20573),_=n(90242),j=n(43393);const O=[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],k=e=>e||(0,j.Map)(),A=(0,S.P1)(k,(e=>e.get(\"lastError\"))),C=(0,S.P1)(k,(e=>e.get(\"url\"))),P=(0,S.P1)(k,(e=>e.get(\"spec\")||\"\")),N=(0,S.P1)(k,(e=>e.get(\"specSource\")||\"not-editor\")),I=(0,S.P1)(k,(e=>e.get(\"json\",(0,j.Map)()))),T=(0,S.P1)(I,(e=>e.toJS())),R=(0,S.P1)(k,(e=>e.get(\"resolved\",(0,j.Map)()))),M=(e,t)=>e.getIn([\"resolvedSubtrees\",...t],void 0),D=(e,t)=>j.Map.isMap(e)&&j.Map.isMap(t)?t.get(\"$$ref\")?t:(0,j.OrderedMap)().mergeWith(D,e,t):t,F=(0,S.P1)(k,(e=>(0,j.OrderedMap)().mergeWith(D,e.get(\"json\"),e.get(\"resolvedSubtrees\")))),L=e=>I(e),B=(0,S.P1)(L,(()=>!1)),$=(0,S.P1)(L,(e=>Te(e&&e.get(\"info\")))),q=(0,S.P1)(L,(e=>Te(e&&e.get(\"externalDocs\")))),U=(0,S.P1)($,(e=>e&&e.get(\"version\"))),z=(0,S.P1)(U,(e=>{var t;return o()(t=/v?([0-9]*)\\.([0-9]*)\\.([0-9]*)/i.exec(e)).call(t,1)})),V=(0,S.P1)(F,(e=>e.get(\"paths\"))),W=(0,S.P1)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\"])),J=(0,S.P1)(V,(e=>{if(!e||e.size<1)return(0,j.List)();let t=(0,j.List)();return e&&i()(e)?(i()(e).call(e,((e,n)=>{if(!e||!i()(e))return{};i()(e).call(e,((e,r)=>{l()(O).call(O,r)<0||(t=t.push((0,j.fromJS)({path:n,method:r,operation:e,id:`${r}-${n}`})))}))})),t):(0,j.List)()})),K=(0,S.P1)(L,(e=>(0,j.Set)(e.get(\"consumes\")))),H=(0,S.P1)(L,(e=>(0,j.Set)(e.get(\"produces\")))),G=(0,S.P1)(L,(e=>e.get(\"security\",(0,j.List)()))),Z=(0,S.P1)(L,(e=>e.get(\"securityDefinitions\"))),Y=(e,t)=>{const n=e.getIn([\"resolvedSubtrees\",\"definitions\",t],null),r=e.getIn([\"json\",\"definitions\",t],null);return n||r||null},X=(0,S.P1)(L,(e=>{const t=e.get(\"definitions\");return j.Map.isMap(t)?t:(0,j.Map)()})),Q=(0,S.P1)(L,(e=>e.get(\"basePath\"))),ee=(0,S.P1)(L,(e=>e.get(\"host\"))),te=(0,S.P1)(L,(e=>e.get(\"schemes\",(0,j.Map)()))),ne=(0,S.P1)(J,K,H,((e,t,n)=>u()(e).call(e,(e=>e.update(\"operation\",(e=>{if(e){if(!j.Map.isMap(e))return;return e.withMutations((e=>(e.get(\"consumes\")||e.update(\"consumes\",(e=>(0,j.Set)(e).merge(t))),e.get(\"produces\")||e.update(\"produces\",(e=>(0,j.Set)(e).merge(n))),e)))}return(0,j.Map)()})))))),re=(0,S.P1)(L,(e=>{const t=e.get(\"tags\",(0,j.List)());return j.List.isList(t)?h()(t).call(t,(e=>j.Map.isMap(e))):(0,j.List)()})),oe=(e,t)=>{var n;let r=re(e)||(0,j.List)();return d()(n=h()(r).call(r,j.Map.isMap)).call(n,(e=>e.get(\"name\")===t),(0,j.Map)())},se=(0,S.P1)(ne,re,((e,t)=>g()(e).call(e,((e,t)=>{let n=(0,j.Set)(t.getIn([\"operation\",\"tags\"]));return n.count()<1?e.update(\"default\",(0,j.List)(),(e=>e.push(t))):g()(n).call(n,((e,n)=>e.update(n,(0,j.List)(),(e=>e.push(t)))),e)}),g()(t).call(t,((e,t)=>e.set(t.get(\"name\"),(0,j.List)())),(0,j.OrderedMap)())))),ie=e=>t=>{var n;let{getConfigs:r}=t,{tagsSorter:o,operationsSorter:s}=r();return u()(n=se(e).sortBy(((e,t)=>t),((e,t)=>{let n=\"function\"==typeof o?o:_.wh.tagsSorter[o];return n?n(e,t):null}))).call(n,((t,n)=>{let r=\"function\"==typeof s?s:_.wh.operationsSorter[s],o=r?v()(t).call(t,r):t;return(0,j.Map)({tagDetails:oe(e,n),operations:o})}))},ae=(0,S.P1)(k,(e=>e.get(\"responses\",(0,j.Map)()))),le=(0,S.P1)(k,(e=>e.get(\"requests\",(0,j.Map)()))),ce=(0,S.P1)(k,(e=>e.get(\"mutatedRequests\",(0,j.Map)()))),ue=(e,t,n)=>ae(e).getIn([t,n],null),pe=(e,t,n)=>le(e).getIn([t,n],null),he=(e,t,n)=>ce(e).getIn([t,n],null),fe=()=>!0,de=(e,t,n)=>{const r=F(e).getIn([\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),o=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),s=u()(r).call(r,(e=>{const t=o.get(`${n.get(\"in\")}.${n.get(\"name\")}`),r=o.get(`${n.get(\"in\")}.${n.get(\"name\")}.hash-${n.hashCode()}`);return(0,j.OrderedMap)().merge(e,t,r)}));return d()(s).call(s,(e=>e.get(\"in\")===n.get(\"in\")&&e.get(\"name\")===n.get(\"name\")),(0,j.OrderedMap)())},me=(e,t,n,r)=>{const o=`${r}.${n}`;return e.getIn([\"meta\",\"paths\",...t,\"parameter_inclusions\",o],!1)},ge=(e,t,n,r)=>{const o=F(e).getIn([\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),s=d()(o).call(o,(e=>e.get(\"in\")===r&&e.get(\"name\")===n),(0,j.OrderedMap)());return de(e,t,s)},ye=(e,t,n)=>{var r;const o=F(e).getIn([\"paths\",t,n],(0,j.OrderedMap)()),s=e.getIn([\"meta\",\"paths\",t,n],(0,j.OrderedMap)()),i=u()(r=o.get(\"parameters\",(0,j.List)())).call(r,(r=>de(e,[t,n],r)));return(0,j.OrderedMap)().merge(o,s).set(\"parameters\",i)};function ve(e,t,n,r){t=t||[];let o=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.fromJS)([]));return d()(o).call(o,(e=>j.Map.isMap(e)&&e.get(\"name\")===n&&e.get(\"in\")===r))||(0,j.Map)()}const be=(0,S.P1)(L,(e=>{const t=e.get(\"host\");return\"string\"==typeof t&&t.length>0&&\"/\"!==t[0]}));function we(e,t,n){t=t||[];let r=ye(e,...t).get(\"parameters\",(0,j.List)());return g()(r).call(r,((e,t)=>{let r=n&&\"body\"===t.get(\"in\")?t.get(\"value_xml\"):t.get(\"value\");return e.set((0,_.V9)(t,{allowHashes:!1}),r)}),(0,j.fromJS)({}))}function Ee(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(j.List.isList(e))return w()(e).call(e,(e=>j.Map.isMap(e)&&e.get(\"in\")===t))}function xe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(j.List.isList(e))return w()(e).call(e,(e=>j.Map.isMap(e)&&e.get(\"type\")===t))}function Se(e,t){t=t||[];let n=F(e).getIn([\"paths\",...t],(0,j.fromJS)({})),r=e.getIn([\"meta\",\"paths\",...t],(0,j.fromJS)({})),o=_e(e,t);const s=n.get(\"parameters\")||new j.List,i=r.get(\"consumes_value\")?r.get(\"consumes_value\"):xe(s,\"file\")?\"multipart/form-data\":xe(s,\"formData\")?\"application/x-www-form-urlencoded\":void 0;return(0,j.fromJS)({requestContentType:i,responseContentType:o})}function _e(e,t){t=t||[];const n=F(e).getIn([\"paths\",...t],null);if(null===n)return;const r=e.getIn([\"meta\",\"paths\",...t,\"produces_value\"],null),o=n.getIn([\"produces\",0],null);return r||o||\"application/json\"}function je(e,t){t=t||[];const n=F(e),r=n.getIn([\"paths\",...t],null);if(null===r)return;const[o]=t,s=r.get(\"produces\",null),i=n.getIn([\"paths\",o,\"produces\"],null),a=n.getIn([\"produces\"],null);return s||i||a}function Oe(e,t){t=t||[];const n=F(e),r=n.getIn([\"paths\",...t],null);if(null===r)return;const[o]=t,s=r.get(\"consumes\",null),i=n.getIn([\"paths\",o,\"consumes\"],null),a=n.getIn([\"consumes\"],null);return s||i||a}const ke=(e,t,n)=>{let r=e.get(\"url\").match(/^([a-z][a-z0-9+\\-.]*):/),o=x()(r)?r[1]:null;return e.getIn([\"scheme\",t,n])||e.getIn([\"scheme\",\"_defaultScheme\"])||o||\"\"},Ae=(e,t,n)=>{var r;return l()(r=[\"http\",\"https\"]).call(r,ke(e,t,n))>-1},Ce=(e,t)=>{t=t||[];let n=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.fromJS)([]));const r=[];return i()(n).call(n,(e=>{let t=e.get(\"errors\");t&&t.count()&&i()(t).call(t,(e=>r.push(e)))})),r},Pe=(e,t)=>0===Ce(e,t).length,Ne=(e,t)=>{var n;let r={requestBody:!1,requestContentType:{}},o=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\"],(0,j.fromJS)([]));return o.size<1||(o.getIn([\"required\"])&&(r.requestBody=o.getIn([\"required\"])),i()(n=o.getIn([\"content\"]).entrySeq()).call(n,(e=>{const t=e[0];if(e[1].getIn([\"schema\",\"required\"])){const n=e[1].getIn([\"schema\",\"required\"]).toJS();r.requestContentType[t]=n}}))),r},Ie=(e,t,n,r)=>{if((n||r)&&n===r)return!0;let o=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\",\"content\"],(0,j.fromJS)([]));if(o.size<2||!n||!r)return!1;let s=o.getIn([n,\"schema\",\"properties\"],(0,j.fromJS)([])),i=o.getIn([r,\"schema\",\"properties\"],(0,j.fromJS)([]));return!!s.equals(i)};function Te(e){return j.Map.isMap(e)?e:new j.Map}},77508:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{executeRequest:()=>p,updateJsonSpec:()=>u,updateSpec:()=>c,validateParams:()=>h});var r=n(28222),o=n.n(r),s=n(86),i=n.n(s),a=n(27361),l=n.n(a);const c=(e,t)=>{let{specActions:n}=t;return function(){e(...arguments),n.parseToJson(...arguments)}},u=(e,t)=>{let{specActions:n}=t;return function(){for(var t=arguments.length,r=new Array(t),s=0;s<t;s++)r[s]=arguments[s];e(...r),n.invalidateResolvedSubtreeCache();const[a]=r,c=l()(a,[\"paths\"])||{},u=o()(c);i()(u).call(u,(e=>{l()(c,[e]).$ref&&n.requestResolvedSubtree([\"paths\",e])})),n.requestResolvedSubtree([\"components\",\"securitySchemes\"])}},p=(e,t)=>{let{specActions:n}=t;return t=>(n.logRequest(t),e(t))},h=(e,t)=>{let{specSelectors:n}=t;return t=>e(t,n.isOAS3())}},34852:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>function(){e(...arguments);const n=t.getConfigs().withCredentials;void 0!==n&&(t.fn.fetch.withCredentials=\"string\"==typeof n?\"true\"===n:!!n)}},79934:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>BE});var r={};n.r(r),n.d(r,{JsonPatchError:()=>j,_areEquals:()=>M,applyOperation:()=>P,applyPatch:()=>N,applyReducer:()=>I,deepClone:()=>O,getValueByPointer:()=>C,validate:()=>R,validator:()=>T});var o={};n.r(o),n.d(o,{compare:()=>z,generate:()=>q,observe:()=>$,unobserve:()=>B});var s={};n.r(s),n.d(s,{hasElementSourceMap:()=>Cs,includesClasses:()=>Ns,includesSymbols:()=>Ps,isAnnotationElement:()=>_s,isArrayElement:()=>ws,isBooleanElement:()=>vs,isCommentElement:()=>js,isElement:()=>ds,isLinkElement:()=>xs,isMemberElement:()=>Es,isNullElement:()=>ys,isNumberElement:()=>gs,isObjectElement:()=>bs,isParseResultElement:()=>Os,isPrimitiveElement:()=>As,isRefElement:()=>Ss,isSourceMapElement:()=>ks,isStringElement:()=>ms});var i={};n.r(i),n.d(i,{isJSONReferenceElement:()=>cc,isJSONSchemaElement:()=>lc,isLinkDescriptionElement:()=>pc,isMediaElement:()=>uc});var a={};n.r(a),n.d(a,{isOpenApi3_0LikeElement:()=>$c,isOpenApiExtension:()=>Kc,isParameterLikeElement:()=>qc,isReferenceLikeElement:()=>Uc,isRequestBodyLikeElement:()=>zc,isResponseLikeElement:()=>Vc,isServerLikeElement:()=>Wc,isTagLikeElement:()=>Jc});var l={};n.r(l),n.d(l,{isBooleanJsonSchemaElement:()=>ap,isCallbackElement:()=>Lu,isComponentsElement:()=>Bu,isContactElement:()=>$u,isExampleElement:()=>qu,isExternalDocumentationElement:()=>Uu,isHeaderElement:()=>zu,isInfoElement:()=>Vu,isLicenseElement:()=>Wu,isLinkElement:()=>Ju,isLinkElementExternal:()=>Ku,isMediaTypeElement:()=>pp,isOpenApi3_0Element:()=>Gu,isOpenapiElement:()=>Hu,isOperationElement:()=>Zu,isParameterElement:()=>Yu,isPathItemElement:()=>Xu,isPathItemElementExternal:()=>Qu,isPathsElement:()=>ep,isReferenceElement:()=>tp,isReferenceElementExternal:()=>np,isRequestBodyElement:()=>rp,isResponseElement:()=>op,isResponsesElement:()=>sp,isSchemaElement:()=>ip,isSecurityRequirementElement:()=>lp,isServerElement:()=>cp,isServerVariableElement:()=>up});var c={};n.r(c),n.d(c,{isBooleanJsonSchemaElement:()=>Kg,isCallbackElement:()=>Sg,isComponentsElement:()=>_g,isContactElement:()=>jg,isExampleElement:()=>Og,isExternalDocumentationElement:()=>kg,isHeaderElement:()=>Ag,isInfoElement:()=>Cg,isJsonSchemaDialectElement:()=>Pg,isLicenseElement:()=>Ng,isLinkElement:()=>Ig,isLinkElementExternal:()=>Tg,isMediaTypeElement:()=>Yg,isOpenApi3_1Element:()=>Mg,isOpenapiElement:()=>Rg,isOperationElement:()=>Dg,isParameterElement:()=>Fg,isPathItemElement:()=>Lg,isPathItemElementExternal:()=>Bg,isPathsElement:()=>$g,isReferenceElement:()=>qg,isReferenceElementExternal:()=>Ug,isRequestBodyElement:()=>zg,isResponseElement:()=>Vg,isResponsesElement:()=>Wg,isSchemaElement:()=>Jg,isSecurityRequirementElement:()=>Hg,isServerElement:()=>Gg,isServerVariableElement:()=>Zg});var u={};n.r(u),n.d(u,{cookie:()=>EE,header:()=>wE,path:()=>yE,query:()=>vE});var p,h=n(58826),f=n.n(h),d=(p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},p(e,t)},function(e,t){function n(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),m=Object.prototype.hasOwnProperty;function g(e,t){return m.call(e,t)}function y(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n<t.length;n++)t[n]=\"\"+n;return t}if(Object.keys)return Object.keys(e);var r=[];for(var o in e)g(e,o)&&r.push(o);return r}function v(e){switch(typeof e){case\"object\":return JSON.parse(JSON.stringify(e));case\"undefined\":return null;default:return e}}function b(e){for(var t,n=0,r=e.length;n<r;){if(!((t=e.charCodeAt(n))>=48&&t<=57))return!1;n++}return!0}function w(e){return-1===e.indexOf(\"/\")&&-1===e.indexOf(\"~\")?e:e.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")}function E(e){return e.replace(/~1/g,\"/\").replace(/~0/g,\"~\")}function x(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,n=e.length;t<n;t++)if(x(e[t]))return!0}else if(\"object\"==typeof e)for(var r=y(e),o=r.length,s=0;s<o;s++)if(x(e[r[s]]))return!0;return!1}function S(e,t){var n=[e];for(var r in t){var o=\"object\"==typeof t[r]?JSON.stringify(t[r],null,2):t[r];void 0!==o&&n.push(r+\": \"+o)}return n.join(\"\\n\")}var _=function(e){function t(t,n,r,o,s){var i=this.constructor,a=e.call(this,S(t,{name:n,index:r,operation:o,tree:s}))||this;return a.name=n,a.index=r,a.operation=o,a.tree=s,Object.setPrototypeOf(a,i.prototype),a.message=S(t,{name:n,index:r,operation:o,tree:s}),a}return d(t,e),t}(Error),j=_,O=v,k={add:function(e,t,n){return e[t]=this.value,{newDocument:n}},remove:function(e,t,n){var r=e[t];return delete e[t],{newDocument:n,removed:r}},replace:function(e,t,n){var r=e[t];return e[t]=this.value,{newDocument:n,removed:r}},move:function(e,t,n){var r=C(n,this.path);r&&(r=v(r));var o=P(n,{op:\"remove\",path:this.from}).removed;return P(n,{op:\"add\",path:this.path,value:o}),{newDocument:n,removed:r}},copy:function(e,t,n){var r=C(n,this.from);return P(n,{op:\"add\",path:this.path,value:v(r)}),{newDocument:n}},test:function(e,t,n){return{newDocument:n,test:M(e[t],this.value)}},_get:function(e,t,n){return this.value=e[t],{newDocument:n}}},A={add:function(e,t,n){return b(t)?e.splice(t,0,this.value):e[t]=this.value,{newDocument:n,index:t}},remove:function(e,t,n){return{newDocument:n,removed:e.splice(t,1)[0]}},replace:function(e,t,n){var r=e[t];return e[t]=this.value,{newDocument:n,removed:r}},move:k.move,copy:k.copy,test:k.test,_get:k._get};function C(e,t){if(\"\"==t)return e;var n={op:\"_get\",path:t};return P(e,n),n.value}function P(e,t,n,r,o,s){if(void 0===n&&(n=!1),void 0===r&&(r=!0),void 0===o&&(o=!0),void 0===s&&(s=0),n&&(\"function\"==typeof n?n(t,0,e,t.path):T(t,0)),\"\"===t.path){var i={newDocument:e};if(\"add\"===t.op)return i.newDocument=t.value,i;if(\"replace\"===t.op)return i.newDocument=t.value,i.removed=e,i;if(\"move\"===t.op||\"copy\"===t.op)return i.newDocument=C(e,t.from),\"move\"===t.op&&(i.removed=e),i;if(\"test\"===t.op){if(i.test=M(e,t.value),!1===i.test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",s,t,e);return i.newDocument=e,i}if(\"remove\"===t.op)return i.removed=e,i.newDocument=null,i;if(\"_get\"===t.op)return t.value=e,i;if(n)throw new j(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",s,t,e);return i}r||(e=v(e));var a=(t.path||\"\").split(\"/\"),l=e,c=1,u=a.length,p=void 0,h=void 0,f=void 0;for(f=\"function\"==typeof n?n:T;;){if((h=a[c])&&-1!=h.indexOf(\"~\")&&(h=E(h)),o&&(\"__proto__\"==h||\"prototype\"==h&&c>0&&\"constructor\"==a[c-1]))throw new TypeError(\"JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README\");if(n&&void 0===p&&(void 0===l[h]?p=a.slice(0,c).join(\"/\"):c==u-1&&(p=t.path),void 0!==p&&f(t,0,e,p)),c++,Array.isArray(l)){if(\"-\"===h)h=l.length;else{if(n&&!b(h))throw new j(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\",\"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\",s,t,e);b(h)&&(h=~~h)}if(c>=u){if(n&&\"add\"===t.op&&h>l.length)throw new j(\"The specified index MUST NOT be greater than the number of elements in the array\",\"OPERATION_VALUE_OUT_OF_BOUNDS\",s,t,e);if(!1===(i=A[t.op].call(t,l,h,e)).test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",s,t,e);return i}}else if(c>=u){if(!1===(i=k[t.op].call(t,l,h,e)).test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",s,t,e);return i}if(l=l[h],n&&c<u&&(!l||\"object\"!=typeof l))throw new j(\"Cannot perform operation at the desired path\",\"OPERATION_PATH_UNRESOLVABLE\",s,t,e)}}function N(e,t,n,r,o){if(void 0===r&&(r=!0),void 0===o&&(o=!0),n&&!Array.isArray(t))throw new j(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");r||(e=v(e));for(var s=new Array(t.length),i=0,a=t.length;i<a;i++)s[i]=P(e,t[i],n,!0,o,i),e=s[i].newDocument;return s.newDocument=e,s}function I(e,t,n){var r=P(e,t);if(!1===r.test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",n,t,e);return r.newDocument}function T(e,t,n,r){if(\"object\"!=typeof e||null===e||Array.isArray(e))throw new j(\"Operation is not an object\",\"OPERATION_NOT_AN_OBJECT\",t,e,n);if(!k[e.op])throw new j(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",t,e,n);if(\"string\"!=typeof e.path)throw new j(\"Operation `path` property is not a string\",\"OPERATION_PATH_INVALID\",t,e,n);if(0!==e.path.indexOf(\"/\")&&e.path.length>0)throw new j('Operation `path` property must start with \"/\"',\"OPERATION_PATH_INVALID\",t,e,n);if((\"move\"===e.op||\"copy\"===e.op)&&\"string\"!=typeof e.from)throw new j(\"Operation `from` property is not present (applicable in `move` and `copy` operations)\",\"OPERATION_FROM_REQUIRED\",t,e,n);if((\"add\"===e.op||\"replace\"===e.op||\"test\"===e.op)&&void 0===e.value)throw new j(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_REQUIRED\",t,e,n);if((\"add\"===e.op||\"replace\"===e.op||\"test\"===e.op)&&x(e.value))throw new j(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED\",t,e,n);if(n)if(\"add\"==e.op){var o=e.path.split(\"/\").length,s=r.split(\"/\").length;if(o!==s+1&&o!==s)throw new j(\"Cannot perform an `add` operation at the desired path\",\"OPERATION_PATH_CANNOT_ADD\",t,e,n)}else if(\"replace\"===e.op||\"remove\"===e.op||\"_get\"===e.op){if(e.path!==r)throw new j(\"Cannot perform the operation at a path that does not exist\",\"OPERATION_PATH_UNRESOLVABLE\",t,e,n)}else if(\"move\"===e.op||\"copy\"===e.op){var i=R([{op:\"_get\",path:e.from,value:void 0}],n);if(i&&\"OPERATION_PATH_UNRESOLVABLE\"===i.name)throw new j(\"Cannot perform the operation from a path that does not exist\",\"OPERATION_FROM_UNRESOLVABLE\",t,e,n)}}function R(e,t,n){try{if(!Array.isArray(e))throw new j(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");if(t)N(v(t),v(e),n||!0);else{n=n||T;for(var r=0;r<e.length;r++)n(e[r],r,t,void 0)}}catch(e){if(e instanceof j)return e;throw e}}function M(e,t){if(e===t)return!0;if(e&&t&&\"object\"==typeof e&&\"object\"==typeof t){var n,r,o,s=Array.isArray(e),i=Array.isArray(t);if(s&&i){if((r=e.length)!=t.length)return!1;for(n=r;0!=n--;)if(!M(e[n],t[n]))return!1;return!0}if(s!=i)return!1;var a=Object.keys(e);if((r=a.length)!==Object.keys(t).length)return!1;for(n=r;0!=n--;)if(!t.hasOwnProperty(a[n]))return!1;for(n=r;0!=n--;)if(!M(e[o=a[n]],t[o]))return!1;return!0}return e!=e&&t!=t}var D=new WeakMap,F=function(e){this.observers=new Map,this.obj=e},L=function(e,t){this.callback=e,this.observer=t};function B(e,t){t.unobserve()}function $(e,t){var n,r=function(e){return D.get(e)}(e);if(r){var o=function(e,t){return e.observers.get(t)}(r,t);n=o&&o.observer}else r=new F(e),D.set(e,r);if(n)return n;if(n={},r.value=v(e),t){n.callback=t,n.next=null;var s=function(){q(n)},i=function(){clearTimeout(n.next),n.next=setTimeout(s)};\"undefined\"!=typeof window&&(window.addEventListener(\"mouseup\",i),window.addEventListener(\"keyup\",i),window.addEventListener(\"mousedown\",i),window.addEventListener(\"keydown\",i),window.addEventListener(\"change\",i))}return n.patches=[],n.object=e,n.unobserve=function(){q(n),clearTimeout(n.next),function(e,t){e.observers.delete(t.callback)}(r,n),\"undefined\"!=typeof window&&(window.removeEventListener(\"mouseup\",i),window.removeEventListener(\"keyup\",i),window.removeEventListener(\"mousedown\",i),window.removeEventListener(\"keydown\",i),window.removeEventListener(\"change\",i))},r.observers.set(t,new L(t,n)),n}function q(e,t){void 0===t&&(t=!1);var n=D.get(e.object);U(n.value,e.object,e.patches,\"\",t),e.patches.length&&N(n.value,e.patches);var r=e.patches;return r.length>0&&(e.patches=[],e.callback&&e.callback(r)),r}function U(e,t,n,r,o){if(t!==e){\"function\"==typeof t.toJSON&&(t=t.toJSON());for(var s=y(t),i=y(e),a=!1,l=i.length-1;l>=0;l--){var c=e[p=i[l]];if(!g(t,p)||void 0===t[p]&&void 0!==c&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(o&&n.push({op:\"test\",path:r+\"/\"+w(p),value:v(c)}),n.push({op:\"remove\",path:r+\"/\"+w(p)}),a=!0):(o&&n.push({op:\"test\",path:r,value:e}),n.push({op:\"replace\",path:r,value:t}),!0);else{var u=t[p];\"object\"==typeof c&&null!=c&&\"object\"==typeof u&&null!=u&&Array.isArray(c)===Array.isArray(u)?U(c,u,n,r+\"/\"+w(p),o):c!==u&&(!0,o&&n.push({op:\"test\",path:r+\"/\"+w(p),value:v(c)}),n.push({op:\"replace\",path:r+\"/\"+w(p),value:v(u)}))}}if(a||s.length!=i.length)for(l=0;l<s.length;l++){var p;g(e,p=s[l])||void 0===t[p]||n.push({op:\"add\",path:r+\"/\"+w(p),value:v(t[p])})}}}function z(e,t,n){void 0===n&&(n=!1);var r=[];return U(e,t,r,\"\",n),r}Object.assign({},r,o,{JsonPatchError:_,deepClone:v,escapePathComponent:w,unescapePathComponent:E});var V=n(9996),W=n.n(V);const J={add:function(e,t){return{op:\"add\",path:e,value:t}},replace:H,remove:function(e){return{op:\"remove\",path:e}},merge:function(e,t){return{type:\"mutation\",op:\"merge\",path:e,value:t}},mergeDeep:function(e,t){return{type:\"mutation\",op:\"mergeDeep\",path:e,value:t}},context:function(e,t){return{type:\"context\",path:e,value:t}},getIn:function(e,t){return t.reduce(((e,t)=>void 0!==t&&e?e[t]:e),e)},applyPatch:function(e,t,n){if(n=n||{},\"merge\"===(t=f()(f()({},t),{},{path:t.path&&K(t.path)})).op){const n=ae(e,t.path);Object.assign(n,t.value),N(e,[H(t.path,n)])}else if(\"mergeDeep\"===t.op){const n=ae(e,t.path),r=W()(n,t.value);e=N(e,[H(t.path,r)]).newDocument}else if(\"add\"===t.op&&\"\"===t.path&&te(t.value)){N(e,Object.keys(t.value).reduce(((e,n)=>(e.push({op:\"add\",path:`/${K(n)}`,value:t.value[n]}),e)),[]))}else if(\"replace\"===t.op&&\"\"===t.path){let{value:r}=t;n.allowMetaPatches&&t.meta&&se(t)&&(Array.isArray(t.value)||te(t.value))&&(r=f()(f()({},r),t.meta)),e=r}else if(N(e,[t]),n.allowMetaPatches&&t.meta&&se(t)&&(Array.isArray(t.value)||te(t.value))){const n=ae(e,t.path),r=f()(f()({},n),t.meta);N(e,[H(t.path,r)])}return e},parentPathMatch:function(e,t){if(!Array.isArray(t))return!1;for(let n=0,r=t.length;n<r;n+=1)if(t[n]!==e[n])return!1;return!0},flatten:Q,fullyNormalizeArray:function(e){return ee(Q(X(e)))},normalizeArray:X,isPromise:function(e){return te(e)&&ne(e.then)},forEachNew:function(e,t){try{return G(e,Y,t)}catch(e){return e}},forEachNewPrimitive:function(e,t){try{return G(e,Z,t)}catch(e){return e}},isJsonPatch:re,isContextPatch:function(e){return ie(e)&&\"context\"===e.type},isPatch:ie,isMutation:oe,isAdditiveMutation:se,isGenerator:function(e){return\"[object GeneratorFunction]\"===Object.prototype.toString.call(e)},isFunction:ne,isObject:te,isError:function(e){return e instanceof Error}};function K(e){return Array.isArray(e)?e.length<1?\"\":`/${e.map((e=>(e+\"\").replace(/~/g,\"~0\").replace(/\\//g,\"~1\"))).join(\"/\")}`:e}function H(e,t,n){return{op:\"replace\",path:e,value:t,meta:n}}function G(e,t,n){return ee(Q(e.filter(se).map((e=>t(e.value,n,e.path)))||[]))}function Z(e,t,n){return n=n||[],Array.isArray(e)?e.map(((e,r)=>Z(e,t,n.concat(r)))):te(e)?Object.keys(e).map((r=>Z(e[r],t,n.concat(r)))):t(e,n[n.length-1],n)}function Y(e,t,n){let r=[];if((n=n||[]).length>0){const o=t(e,n[n.length-1],n);o&&(r=r.concat(o))}if(Array.isArray(e)){const o=e.map(((e,r)=>Y(e,t,n.concat(r))));o&&(r=r.concat(o))}else if(te(e)){const o=Object.keys(e).map((r=>Y(e[r],t,n.concat(r))));o&&(r=r.concat(o))}return r=Q(r),r}function X(e){return Array.isArray(e)?e:[e]}function Q(e){return[].concat(...e.map((e=>Array.isArray(e)?Q(e):e)))}function ee(e){return e.filter((e=>void 0!==e))}function te(e){return e&&\"object\"==typeof e}function ne(e){return e&&\"function\"==typeof e}function re(e){if(ie(e)){const{op:t}=e;return\"add\"===t||\"remove\"===t||\"replace\"===t}return!1}function oe(e){return re(e)||ie(e)&&\"mutation\"===e.type}function se(e){return oe(e)&&(\"add\"===e.op||\"replace\"===e.op||\"merge\"===e.op||\"mergeDeep\"===e.op)}function ie(e){return e&&\"object\"==typeof e}function ae(e,t){try{return C(e,t)}catch(e){return console.error(e),{}}}n(31905);var le=n(1272),ce=n(8575);function ue(e,t){function n(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];[this.message]=n,t&&t.apply(this,n)}return n.prototype=new Error,n.prototype.name=e,n.prototype.constructor=n,n}var pe=n(13692),he=n.n(pe);const fe=[\"properties\"],de=[\"properties\"],me=[\"definitions\",\"parameters\",\"responses\",\"securityDefinitions\",\"components/schemas\",\"components/responses\",\"components/parameters\",\"components/securitySchemes\"],ge=[\"schema/example\",\"items/example\"];function ye(e){const t=e[e.length-1],n=e[e.length-2],r=e.join(\"/\");return fe.indexOf(t)>-1&&-1===de.indexOf(n)||me.indexOf(r)>-1||ge.some((e=>r.indexOf(e)>-1))}function ve(e,t){const[n,r]=e.split(\"#\"),o=ce.resolve(n||\"\",t||\"\");return r?`${o}#${r}`:o}const be=\"application/json, application/yaml\",we=/^([a-z]+:\\/\\/|\\/\\/)/i,Ee=ue(\"JSONRefError\",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),xe={},Se=new WeakMap,_e=[e=>\"paths\"===e[0]&&\"responses\"===e[3]&&\"examples\"===e[5],e=>\"paths\"===e[0]&&\"responses\"===e[3]&&\"content\"===e[5]&&\"example\"===e[7],e=>\"paths\"===e[0]&&\"responses\"===e[3]&&\"content\"===e[5]&&\"examples\"===e[7]&&\"value\"===e[9],e=>\"paths\"===e[0]&&\"requestBody\"===e[3]&&\"content\"===e[4]&&\"example\"===e[6],e=>\"paths\"===e[0]&&\"requestBody\"===e[3]&&\"content\"===e[4]&&\"examples\"===e[6]&&\"value\"===e[8],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"example\"===e[4],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"example\"===e[5],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"examples\"===e[4]&&\"value\"===e[6],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"examples\"===e[5]&&\"value\"===e[7],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"content\"===e[4]&&\"example\"===e[6],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"content\"===e[4]&&\"examples\"===e[6]&&\"value\"===e[8],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"content\"===e[4]&&\"example\"===e[7],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"content\"===e[5]&&\"examples\"===e[7]&&\"value\"===e[9]],je={key:\"$ref\",plugin:(e,t,n,r)=>{const o=r.getInstance(),s=n.slice(0,-1);if(ye(s)||(e=>_e.some((t=>t(e))))(s))return;const{baseDoc:i}=r.getContext(n);if(\"string\"!=typeof e)return new Ee(\"$ref: must be a string (JSON-Ref)\",{$ref:e,baseDoc:i,fullPath:n});const a=Pe(e),l=a[0],c=a[1]||\"\";let u,p,h;try{u=i||l?Ae(l,i):null}catch(t){return Ce(t,{pointer:c,$ref:e,basePath:u,fullPath:n})}if(function(e,t,n,r){let o=Se.get(r);o||(o={},Se.set(r,o));const s=function(e){if(0===e.length)return\"\";return`/${e.map(De).join(\"/\")}`}(n),i=`${t||\"<specmap-base>\"}#${e}`,a=s.replace(/allOf\\/\\d+\\/?/g,\"\"),l=r.contextTree.get([]).baseDoc;if(t===l&&Le(a,e))return!0;let c=\"\";const u=n.some((e=>(c=`${c}/${De(e)}`,o[c]&&o[c].some((e=>Le(e,i)||Le(i,e))))));if(u)return!0;return void(o[a]=(o[a]||[]).concat(i))}(c,u,s,r)&&!o.useCircularStructures){const t=ve(e,u);return e===t?null:J.replace(n,t)}if(null==u?(h=Re(c),p=r.get(h),void 0===p&&(p=new Ee(`Could not resolve reference: ${e}`,{pointer:c,$ref:e,baseDoc:i,fullPath:n}))):(p=Ne(u,c),p=null!=p.__value?p.__value:p.catch((t=>{throw Ce(t,{pointer:c,$ref:e,baseDoc:i,fullPath:n})}))),p instanceof Error)return[J.remove(n),p];const f=ve(e,u),d=J.replace(s,p,{$$ref:f});if(u&&u!==i)return[d,J.context(s,{baseDoc:u})];try{if(!function(e,t){const n=[e];return t.path.reduce(((e,t)=>(n.push(e[t]),e[t])),e),r(t.value);function r(e){return J.isObject(e)&&(n.indexOf(e)>=0||Object.keys(e).some((t=>r(e[t]))))}}(r.state,d)||o.useCircularStructures)return d}catch(e){return null}}},Oe=Object.assign(je,{docCache:xe,absoluteify:Ae,clearCache:function(e){void 0!==e?delete xe[e]:Object.keys(xe).forEach((e=>{delete xe[e]}))},JSONRefError:Ee,wrapError:Ce,getDoc:Ie,split:Pe,extractFromDoc:Ne,fetchJSON:function(e){return fetch(e,{headers:{Accept:be},loadSpec:!0}).then((e=>e.text())).then((e=>le.ZP.load(e)))},extract:Te,jsonPointerToArray:Re,unescapeJsonPointerToken:Me}),ke=Oe;function Ae(e,t){if(!we.test(e)){if(!t)throw new Ee(`Tried to resolve a relative URL, without having a basePath. path: '${e}' basePath: '${t}'`);return ce.resolve(t,e)}return e}function Ce(e,t){let n;return n=e&&e.response&&e.response.body?`${e.response.body.code} ${e.response.body.message}`:e.message,new Ee(`Could not resolve reference: ${n}`,t,e)}function Pe(e){return(e+\"\").split(\"#\")}function Ne(e,t){const n=xe[e];if(n&&!J.isPromise(n))try{const e=Te(t,n);return Object.assign(Promise.resolve(e),{__value:e})}catch(e){return Promise.reject(e)}return Ie(e).then((e=>Te(t,e)))}function Ie(e){const t=xe[e];return t?J.isPromise(t)?t:Promise.resolve(t):(xe[e]=Oe.fetchJSON(e).then((t=>(xe[e]=t,t))),xe[e])}function Te(e,t){const n=Re(e);if(n.length<1)return t;const r=J.getIn(t,n);if(void 0===r)throw new Ee(`Could not resolve pointer: ${e} does not exist in document`,{pointer:e});return r}function Re(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected a string, got a \"+typeof e);return\"/\"===e[0]&&(e=e.substr(1)),\"\"===e?[]:e.split(\"/\").map(Me)}function Me(e){if(\"string\"!=typeof e)return e;return new URLSearchParams(`=${e.replace(/~1/g,\"/\").replace(/~0/g,\"~\")}`).get(\"\")}function De(e){return new URLSearchParams([[\"\",e.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")]]).toString().slice(1)}const Fe=e=>!e||\"/\"===e||\"#\"===e;function Le(e,t){if(Fe(t))return!0;const n=e.charAt(t.length),r=t.slice(-1);return 0===e.indexOf(t)&&(!n||\"/\"===n||\"#\"===n)&&\"#\"!==r}const Be={key:\"allOf\",plugin:(e,t,n,r,o)=>{if(o.meta&&o.meta.$$ref)return;const s=n.slice(0,-1);if(ye(s))return;if(!Array.isArray(e)){const e=new TypeError(\"allOf must be an array\");return e.fullPath=n,e}let i=!1,a=o.value;if(s.forEach((e=>{a&&(a=a[e])})),a=f()({},a),0===Object.keys(a).length)return;delete a.allOf;const l=[];return l.push(r.replace(s,{})),e.forEach(((e,t)=>{if(!r.isObject(e)){if(i)return null;i=!0;const e=new TypeError(\"Elements in allOf must be objects\");return e.fullPath=n,l.push(e)}l.push(r.mergeDeep(s,e));const o=function(e,t){let{specmap:n,getBaseUrlForNodePath:r=(e=>n.getContext([...t,...e]).baseDoc),targetKeys:o=[\"$ref\",\"$$ref\"]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=[];return he()(e).forEach((function(){if(o.includes(this.key)&&\"string\"==typeof this.node){const e=this.path,o=t.concat(this.path),i=ve(this.node,r(e));s.push(n.replace(o,i))}})),s}(e,n.slice(0,-1),{getBaseUrlForNodePath:e=>r.getContext([...n,t,...e]).baseDoc,specmap:r});l.push(...o)})),a.example&&l.push(r.remove([].concat(s,\"example\"))),l.push(r.mergeDeep(s,a)),a.$$ref||l.push(r.remove([].concat(s,\"$$ref\"))),l}},$e={key:\"parameters\",plugin:(e,t,n,r)=>{if(Array.isArray(e)&&e.length){const t=Object.assign([],e),o=n.slice(0,-1),s=f()({},J.getIn(r.spec,o));for(let o=0;o<e.length;o+=1){const i=e[o];try{t[o].default=r.parameterMacro(s,i)}catch(e){const t=new Error(e);return t.fullPath=n,t}}return J.replace(n,t)}return J.replace(n,e)}},qe={key:\"properties\",plugin:(e,t,n,r)=>{const o=f()({},e);for(const t in e)try{o[t].default=r.modelPropertyMacro(o[t])}catch(e){const t=new Error(e);return t.fullPath=n,t}return J.replace(n,o)}};class Ue{constructor(e){this.root=ze(e||{})}set(e,t){const n=this.getParent(e,!0);if(!n)return void Ve(this.root,t,null);const r=e[e.length-1],{children:o}=n;o[r]?Ve(o[r],t,n):o[r]=ze(t,n)}get(e){if((e=e||[]).length<1)return this.root.value;let t,n,r=this.root;for(let o=0;o<e.length&&(n=e[o],t=r.children,t[n]);o+=1)r=t[n];return r&&r.protoValue}getParent(e,t){return!e||e.length<1?null:e.length<2?this.root:e.slice(0,-1).reduce(((e,n)=>{if(!e)return e;const{children:r}=e;return!r[n]&&t&&(r[n]=ze(null,e)),r[n]}),this.root)}}function ze(e,t){return Ve({children:{}},e,t)}function Ve(e,t,n){return e.value=t||{},e.protoValue=n?f()(f()({},n.protoValue),e.value):e.value,Object.keys(e.children).forEach((t=>{const n=e.children[t];e.children[t]=Ve(n,n.value,e)})),e}const We=()=>{};class Je{static getPluginName(e){return e.pluginName}static getPatchesOfType(e,t){return e.filter(t)}constructor(e){Object.assign(this,{spec:\"\",debugLevel:\"info\",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new Ue,showDebug:!1,allPatches:[],pluginProp:\"specMap\",libMethods:Object.assign(Object.create(this),J,{getInstance:()=>this}),allowMetaPatches:!1},e),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(J.isFunction),this.patches.push(J.add([],this.spec)),this.patches.push(J.context([],this.context)),this.updatePatches(this.patches)}debug(e){if(this.debugLevel===e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];console.log(...n)}}verbose(e){if(\"verbose\"===this.debugLevel){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];console.log(`[${e}]   `,...n)}}wrapPlugin(e,t){const{pathDiscriminator:n}=this;let r,o=null;return e[this.pluginProp]?(o=e,r=e[this.pluginProp]):J.isFunction(e)?r=e:J.isObject(e)&&(r=function(e){const t=(e,t)=>!Array.isArray(e)||e.every(((e,n)=>e===t[n]));return function*(r,o){const s={};for(const e of r.filter(J.isAdditiveMutation))yield*i(e.value,e.path,e);function*i(r,a,l){if(J.isObject(r)){const c=a.length-1,u=a[c],p=a.indexOf(\"properties\"),h=\"properties\"===u&&c===p,f=o.allowMetaPatches&&s[r.$$ref];for(const c of Object.keys(r)){const u=r[c],p=a.concat(c),d=J.isObject(u),m=r.$$ref;if(f||d&&(o.allowMetaPatches&&m&&(s[m]=!0),yield*i(u,p,l)),!h&&c===e.key){const r=t(n,a);n&&!r||(yield e.plugin(u,c,p,o,l))}}}else e.key===a[a.length-1]&&(yield e.plugin(r,e.key,a,o))}}}(e)),Object.assign(r.bind(o),{pluginName:e.name||t,isGenerator:J.isGenerator(r)})}nextPlugin(){return this.wrappedPlugins.find((e=>this.getMutationsForPlugin(e).length>0))}nextPromisedPatch(){if(this.promisedPatches.length>0)return Promise.race(this.promisedPatches.map((e=>e.value)))}getPluginHistory(e){const t=this.constructor.getPluginName(e);return this.pluginHistory[t]||[]}getPluginRunCount(e){return this.getPluginHistory(e).length}getPluginHistoryTip(e){const t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}getPluginMutationIndex(e){const t=this.getPluginHistoryTip(e).mutationIndex;return\"number\"!=typeof t?-1:t}updatePluginHistory(e,t){const n=this.constructor.getPluginName(e);this.pluginHistory[n]=this.pluginHistory[n]||[],this.pluginHistory[n].push(t)}updatePatches(e){J.normalizeArray(e).forEach((e=>{if(e instanceof Error)this.errors.push(e);else try{if(!J.isObject(e))return void this.debug(\"updatePatches\",\"Got a non-object patch\",e);if(this.showDebug&&this.allPatches.push(e),J.isPromise(e.value))return this.promisedPatches.push(e),void this.promisedPatchThen(e);if(J.isContextPatch(e))return void this.setContext(e.path,e.value);J.isMutation(e)&&this.updateMutations(e)}catch(e){console.error(e),this.errors.push(e)}}))}updateMutations(e){\"object\"==typeof e.value&&!Array.isArray(e.value)&&this.allowMetaPatches&&(e.value=f()({},e.value));const t=J.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(e),this.state=t)}removePromisedPatch(e){const t=this.promisedPatches.indexOf(e);t<0?this.debug(\"Tried to remove a promisedPatch that isn't there!\"):this.promisedPatches.splice(t,1)}promisedPatchThen(e){return e.value=e.value.then((t=>{const n=f()(f()({},e),{},{value:t});this.removePromisedPatch(e),this.updatePatches(n)})).catch((t=>{this.removePromisedPatch(e),this.updatePatches(t)})),e.value}getMutations(e,t){return e=e||0,\"number\"!=typeof t&&(t=this.mutations.length),this.mutations.slice(e,t)}getCurrentMutations(){return this.getMutationsForPlugin(this.getCurrentPlugin())}getMutationsForPlugin(e){const t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}getCurrentPlugin(){return this.currentPlugin}getLib(){return this.libMethods}_get(e){return J.getIn(this.state,e)}_getContext(e){return this.contextTree.get(e)}setContext(e,t){return this.contextTree.set(e,t)}_hasRun(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}dispatch(){const e=this,t=this.nextPlugin();if(!t){const e=this.nextPromisedPatch();if(e)return e.then((()=>this.dispatch())).catch((()=>this.dispatch()));const t={spec:this.state,errors:this.errors};return this.showDebug&&(t.patches=this.allPatches),Promise.resolve(t)}if(e.pluginCount=e.pluginCount||{},e.pluginCount[t]=(e.pluginCount[t]||0)+1,e.pluginCount[t]>100)return Promise.resolve({spec:e.state,errors:e.errors.concat(new Error(\"We've reached a hard limit of 100 plugin runs\"))});if(t!==this.currentPlugin&&this.promisedPatches.length){const e=this.promisedPatches.map((e=>e.value));return Promise.all(e.map((e=>e.then(We,We)))).then((()=>this.dispatch()))}return function(){e.currentPlugin=t;const r=e.getCurrentMutations(),o=e.mutations.length-1;try{if(t.isGenerator)for(const o of t(r,e.getLib()))n(o);else{n(t(r,e.getLib()))}}catch(e){console.error(e),n([Object.assign(Object.create(e),{plugin:t})])}finally{e.updatePluginHistory(t,{mutationIndex:o})}return e.dispatch()}();function n(n){n&&(n=J.fullyNormalizeArray(n),e.updatePatches(n,t))}}}const Ke={refs:ke,allOf:Be,parameters:$e,properties:qe};var He=n(32454);function Ge(e){const{spec:t}=e,{paths:n}=t,r={};if(!n||t.$$normalized)return e;for(const e in n){const o=n[e];if(null==o||![\"object\",\"function\"].includes(typeof o))continue;const s=o.parameters;for(const n in o){const i=o[n];if(null==i||![\"object\",\"function\"].includes(typeof i))continue;const a=(0,He.Z)(i,e,n);if(a){r[a]?r[a].push(i):r[a]=[i];const e=r[a];if(e.length>1)e.forEach(((e,t)=>{e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=`${a}${t+1}`}));else if(void 0!==i.operationId){const t=e[0];t.__originalOperationId=t.__originalOperationId||i.operationId,t.operationId=a}}if(\"parameters\"!==n){const e=[],n={};for(const r in t)\"produces\"!==r&&\"consumes\"!==r&&\"security\"!==r||(n[r]=t[r],e.push(n));if(s&&(n.parameters=s,e.push(n)),e.length)for(const t of e)for(const e in t)if(i[e]){if(\"parameters\"===e)for(const n of t[e]){i[e].some((e=>e.name&&e.name===n.name||e.$ref&&e.$ref===n.$ref||e.$$ref&&e.$$ref===n.$$ref||e===n))||i[e].push(n)}}else i[e]=t[e]}}}return t.$$normalized=!0,e}function Ze(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{requestInterceptor:n,responseInterceptor:r}=t,o=e.withCredentials?\"include\":\"same-origin\";return t=>e({url:t,loadSpec:!0,requestInterceptor:n,responseInterceptor:r,headers:{Accept:be},credentials:o}).then((e=>e.body))}var Ye=n(80129),Xe=n.n(Ye);const Qe=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:window,{FormData:et,Blob:tt,File:nt}=Qe,rt=e=>\":/?#[]@!$&'()*+,;=\".indexOf(e)>-1,ot=e=>/^[a-z0-9\\-._~]+$/i.test(e);function st(e){let{escape:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return\"number\"==typeof e&&(e=e.toString()),\"string\"==typeof e&&e.length&&t?n?JSON.parse(e):[...e].map((e=>{if(ot(e))return e;if(rt(e)&&\"unsafe\"===t)return e;const n=new TextEncoder;return Array.from(n.encode(e)).map((e=>`0${e.toString(16).toUpperCase()}`.slice(-2))).map((e=>`%${e}`)).join(\"\")})).join(\"\"):e}function it(e){const{value:t}=e;return Array.isArray(t)?function(e){let{key:t,value:n,style:r,explode:o,escape:s}=e;const i=e=>st(e,{escape:s});if(\"simple\"===r)return n.map((e=>i(e))).join(\",\");if(\"label\"===r)return`.${n.map((e=>i(e))).join(\".\")}`;if(\"matrix\"===r)return n.map((e=>i(e))).reduce(((e,n)=>!e||o?`${e||\"\"};${t}=${n}`:`${e},${n}`),\"\");if(\"form\"===r){const e=o?`&${t}=`:\",\";return n.map((e=>i(e))).join(e)}if(\"spaceDelimited\"===r){const e=o?`${t}=`:\"\";return n.map((e=>i(e))).join(` ${e}`)}if(\"pipeDelimited\"===r){const e=o?`${t}=`:\"\";return n.map((e=>i(e))).join(`|${e}`)}return}(e):\"object\"==typeof t?function(e){let{key:t,value:n,style:r,explode:o,escape:s}=e;const i=e=>st(e,{escape:s}),a=Object.keys(n);if(\"simple\"===r)return a.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e},`:\"\"}${t}${o?\"=\":\",\"}${r}`}),\"\");if(\"label\"===r)return a.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}.`:\".\"}${t}${o?\"=\":\".\"}${r}`}),\"\");if(\"matrix\"===r&&o)return a.reduce(((e,t)=>`${e?`${e};`:\";\"}${t}=${i(n[t])}`),\"\");if(\"matrix\"===r)return a.reduce(((e,r)=>{const o=i(n[r]);return`${e?`${e},`:`;${t}=`}${r},${o}`}),\"\");if(\"form\"===r)return a.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}${o?\"&\":\",\"}`:\"\"}${t}${o?\"=\":\",\"}${r}`}),\"\");return}(e):function(e){let{key:t,value:n,style:r,escape:o}=e;const s=e=>st(e,{escape:o});if(\"simple\"===r)return s(n);if(\"label\"===r)return`.${s(n)}`;if(\"matrix\"===r)return`;${t}=${s(n)}`;if(\"form\"===r)return s(n);if(\"deepObject\"===r)return s(n,{},!0);return}(e)}const at=(e,t)=>{t.body=e},lt={serializeRes:pt,mergeInQueryOrForm:wt};async function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"object\"==typeof e&&(t=e,e=t.url),t.headers=t.headers||{},lt.mergeInQueryOrForm(t),t.headers&&Object.keys(t.headers).forEach((e=>{const n=t.headers[e];\"string\"==typeof n&&(t.headers[e]=n.replace(/\\n+/g,\" \"))})),t.requestInterceptor&&(t=await t.requestInterceptor(t)||t);const n=t.headers[\"content-type\"]||t.headers[\"Content-Type\"];let r;/multipart\\/form-data/i.test(n)&&t.body instanceof et&&(delete t.headers[\"content-type\"],delete t.headers[\"Content-Type\"]);try{r=await(t.userFetch||fetch)(t.url,t),r=await lt.serializeRes(r,e,t),t.responseInterceptor&&(r=await t.responseInterceptor(r)||r)}catch(e){if(!r)throw e;const t=new Error(r.statusText||`response status is ${r.status}`);throw t.status=r.status,t.statusCode=r.status,t.responseError=e,t}if(!r.ok){const e=new Error(r.statusText||`response status is ${r.status}`);throw e.status=r.status,e.statusCode=r.status,e.response=r,e}return r}const ut=function(){return/(json|xml|yaml|text)\\b/.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\")};function pt(e,t){let{loadSpec:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:ht(e.headers)},o=r.headers[\"content-type\"],s=n||ut(o);return(s?e.text:e.blob||e.buffer).call(e).then((e=>{if(r.text=e,r.data=e,s)try{const t=function(e,t){return t&&(0===t.indexOf(\"application/json\")||t.indexOf(\"+json\")>0)?JSON.parse(e):le.ZP.load(e)}(e,o);r.body=t,r.obj=t}catch(e){r.parseError=e}return r}))}function ht(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return\"function\"!=typeof e.entries?{}:Array.from(e.entries()).reduce(((e,t)=>{let[n,r]=t;return e[n]=function(e){return e.includes(\", \")?e.split(\", \"):e}(r),e}),{})}function ft(e,t){return t||\"undefined\"==typeof navigator||(t=navigator),t&&\"ReactNative\"===t.product?!(!e||\"object\"!=typeof e||\"string\"!=typeof e.uri):void 0!==nt&&e instanceof nt||(void 0!==tt&&e instanceof tt||(!!ArrayBuffer.isView(e)||null!==e&&\"object\"==typeof e&&\"function\"==typeof e.pipe))}function dt(e,t){return Array.isArray(e)&&e.some((e=>ft(e,t)))}const mt={form:\",\",spaceDelimited:\"%20\",pipeDelimited:\"|\"},gt={csv:\",\",ssv:\"%20\",tsv:\"%09\",pipes:\"|\"};function yt(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{collectionFormat:r,allowEmptyValue:o,serializationOption:s,encoding:i}=t,a=\"object\"!=typeof t||Array.isArray(t)?t:t.value,l=n?e=>e.toString():e=>encodeURIComponent(e),c=l(e);if(void 0===a&&o)return[[c,\"\"]];if(ft(a)||dt(a))return[[c,a]];if(s)return vt(e,a,n,s);if(i){if([typeof i.style,typeof i.explode,typeof i.allowReserved].some((e=>\"undefined\"!==e))){const{style:t,explode:r,allowReserved:o}=i;return vt(e,a,n,{style:t,explode:r,allowReserved:o})}if(i.contentType){if(\"application/json\"===i.contentType){return[[c,l(\"string\"==typeof a?a:JSON.stringify(a))]]}return[[c,l(a.toString())]]}return\"object\"!=typeof a?[[c,l(a)]]:Array.isArray(a)&&a.every((e=>\"object\"!=typeof e))?[[c,a.map(l).join(\",\")]]:[[c,l(JSON.stringify(a))]]}return\"object\"!=typeof a?[[c,l(a)]]:Array.isArray(a)?\"multi\"===r?[[c,a.map(l)]]:[[c,a.map(l).join(gt[r||\"csv\"])]]:[[c,\"\"]]}function vt(e,t,n,r){const o=r.style||\"form\",s=void 0===r.explode?\"form\"===o:r.explode,i=!n&&(r&&r.allowReserved?\"unsafe\":\"reserved\"),a=e=>st(e,{escape:i}),l=n?e=>e:e=>st(e,{escape:i});return\"object\"!=typeof t?[[l(e),a(t)]]:Array.isArray(t)?s?[[l(e),t.map(a)]]:[[l(e),t.map(a).join(mt[o])]]:\"deepObject\"===o?Object.keys(t).map((n=>[l(`${e}[${n}]`),a(t[n])])):s?Object.keys(t).map((e=>[l(e),a(t[e])])):[[l(e),Object.keys(t).map((e=>[`${l(e)},${a(t[e])}`])).join(\",\")]]}function bt(e){const t=Object.keys(e).reduce(((t,n)=>{for(const[r,o]of yt(n,e[n]))t[r]=o;return t}),{});return Xe().stringify(t,{encode:!1,indices:!1})||\"\"}function wt(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{url:t=\"\",query:n,form:r}=e;if(r){const t=Object.keys(r).some((e=>{const{value:t}=r[e];return ft(t)||dt(t)})),n=e.headers[\"content-type\"]||e.headers[\"Content-Type\"];if(t||/multipart\\/form-data/i.test(n)){const t=(o=e.form,Object.entries(o).reduce(((e,t)=>{let[n,r]=t;for(const[t,o]of yt(n,r,!0))if(Array.isArray(o))for(const n of o)if(ArrayBuffer.isView(n)){const r=new tt([n]);e.append(t,r)}else e.append(t,n);else if(ArrayBuffer.isView(o)){const n=new tt([o]);e.append(t,n)}else e.append(t,o);return e}),new et));at(t,e)}else e.body=bt(r);delete e.form}var o;if(n){const[r,o]=t.split(\"?\");let s=\"\";if(o){const e=Xe().parse(o);Object.keys(n).forEach((t=>delete e[t])),s=Xe().stringify(e,{encode:!0})}const i=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const r=t.filter((e=>e)).join(\"&\");return r?`?${r}`:\"\"}(s,bt(n));e.url=r+i,delete e.query}return e}const Et=e=>{const{baseDoc:t,url:n}=e;return t||n||\"\"},xt=e=>{const{fetch:t,http:n}=e;return t||n||ct};async function St(e){const{spec:t,mode:n,allowMetaPatches:r=!0,pathDiscriminator:o,modelPropertyMacro:s,parameterMacro:i,requestInterceptor:a,responseInterceptor:l,skipNormalization:c,useCircularStructures:u}=e,p=Et(e),h=xt(e);return function(e){p&&(Ke.refs.docCache[p]=e);Ke.refs.fetchJSON=Ze(h,{requestInterceptor:a,responseInterceptor:l});const t=[Ke.refs];\"function\"==typeof i&&t.push(Ke.parameters);\"function\"==typeof s&&t.push(Ke.properties);\"strict\"!==n&&t.push(Ke.allOf);return(f={spec:e,context:{baseDoc:p},plugins:t,allowMetaPatches:r,pathDiscriminator:o,parameterMacro:i,modelPropertyMacro:s,useCircularStructures:u},new Je(f).dispatch()).then(c?async e=>e:Ge);var f}(t)}const _t={name:\"generic\",match:()=>!0,normalize(e){let{spec:t}=e;const{spec:n}=Ge({spec:t});return n},resolve:async e=>St(e)};const jt=e=>{try{const{openapi:t}=e;return\"string\"==typeof t&&/^3\\.0\\.([0123])(?:-rc[012])?$/.test(t)}catch{return!1}},Ot=e=>{try{const{openapi:t}=e;return\"string\"==typeof t&&/^3\\.1\\.(?:[1-9]\\d*|0)$/.test(t)}catch{return!1}},kt=e=>jt(e)||Ot(e),At={name:\"openapi-2\",match(e){let{spec:t}=e;return(e=>{try{const{swagger:t}=e;return\"2.0\"===t}catch{return!1}})(t)},normalize(e){let{spec:t}=e;const{spec:n}=Ge({spec:t});return n},resolve:async e=>async function(e){return St(e)}(e)};const Ct={name:\"openapi-3-0\",match(e){let{spec:t}=e;return jt(t)},normalize(e){let{spec:t}=e;const{spec:n}=Ge({spec:t});return n},resolve:async e=>async function(e){return St(e)}(e)};var Pt=n(43500);class Nt extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"annotation\"}get code(){return this.attributes.get(\"code\")}set code(e){this.attributes.set(\"code\",e)}}const It=Nt;class Tt extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"comment\"}}const Rt=Tt;const Mt=function(){return!1};const Dt=function(){return!0};function Ft(e){return null!=e&&\"object\"==typeof e&&!0===e[\"@@functional/placeholder\"]}function Lt(e){return function t(n){return 0===arguments.length||Ft(n)?t:e.apply(this,arguments)}}function Bt(e){return function t(n,r){switch(arguments.length){case 0:return t;case 1:return Ft(n)?t:Lt((function(t){return e(n,t)}));default:return Ft(n)&&Ft(r)?t:Ft(n)?Lt((function(t){return e(t,r)})):Ft(r)?Lt((function(t){return e(n,t)})):e(n,r)}}}const $t=Array.isArray||function(e){return null!=e&&e.length>=0&&\"[object Array]\"===Object.prototype.toString.call(e)};function qt(e,t,n){return function(){if(0===arguments.length)return n();var r=arguments[arguments.length-1];if(!$t(r)){for(var o=0;o<e.length;){if(\"function\"==typeof r[e[o]])return r[e[o]].apply(r,Array.prototype.slice.call(arguments,0,-1));o+=1}if(function(e){return null!=e&&\"function\"==typeof e[\"@@transducer/step\"]}(r))return t.apply(null,Array.prototype.slice.call(arguments,0,-1))(r)}return n.apply(this,arguments)}}function Ut(e){return e&&e[\"@@transducer/reduced\"]?e:{\"@@transducer/value\":e,\"@@transducer/reduced\":!0}}const zt=function(){return this.xf[\"@@transducer/init\"]()},Vt=function(e){return this.xf[\"@@transducer/result\"](e)};var Wt=function(){function e(e,t){this.xf=t,this.f=e,this.all=!0}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=function(e){return this.all&&(e=this.xf[\"@@transducer/step\"](e,!0)),this.xf[\"@@transducer/result\"](e)},e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(t)||(this.all=!1,e=Ut(this.xf[\"@@transducer/step\"](e,!1))),e},e}();function Jt(e){return function(t){return new Wt(e,t)}}const Kt=Bt(qt([\"all\"],Jt,(function(e,t){for(var n=0;n<t.length;){if(!e(t[n]))return!1;n+=1}return!0})));function Ht(e,t){switch(e){case 0:return function(){return t.apply(this,arguments)};case 1:return function(e){return t.apply(this,arguments)};case 2:return function(e,n){return t.apply(this,arguments)};case 3:return function(e,n,r){return t.apply(this,arguments)};case 4:return function(e,n,r,o){return t.apply(this,arguments)};case 5:return function(e,n,r,o,s){return t.apply(this,arguments)};case 6:return function(e,n,r,o,s,i){return t.apply(this,arguments)};case 7:return function(e,n,r,o,s,i,a){return t.apply(this,arguments)};case 8:return function(e,n,r,o,s,i,a,l){return t.apply(this,arguments)};case 9:return function(e,n,r,o,s,i,a,l,c){return t.apply(this,arguments)};case 10:return function(e,n,r,o,s,i,a,l,c,u){return t.apply(this,arguments)};default:throw new Error(\"First argument to _arity must be a non-negative integer no greater than ten\")}}function Gt(e,t,n){return function(){for(var r=[],o=0,s=e,i=0;i<t.length||o<arguments.length;){var a;i<t.length&&(!Ft(t[i])||o>=arguments.length)?a=t[i]:(a=arguments[o],o+=1),r[i]=a,Ft(a)||(s-=1),i+=1}return s<=0?n.apply(this,r):Ht(s,Gt(e,r,n))}}const Zt=Bt((function(e,t){return 1===e?Lt(t):Ht(e,Gt(e,[],t))}));function Yt(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function Xt(e,t,n){for(var r=0,o=n.length;r<o;){if(e(t,n[r]))return!0;r+=1}return!1}function Qt(e,t){return Object.prototype.hasOwnProperty.call(t,e)}const en=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};var tn=Object.prototype.toString;const nn=function(){return\"[object Arguments]\"===tn.call(arguments)?function(e){return\"[object Arguments]\"===tn.call(e)}:function(e){return Qt(\"callee\",e)}}();var rn=!{toString:null}.propertyIsEnumerable(\"toString\"),on=[\"constructor\",\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"],sn=function(){return arguments.propertyIsEnumerable(\"length\")}(),an=function(e,t){for(var n=0;n<e.length;){if(e[n]===t)return!0;n+=1}return!1};const ln=\"function\"!=typeof Object.keys||sn?Lt((function(e){if(Object(e)!==e)return[];var t,n,r=[],o=sn&&nn(e);for(t in e)!Qt(t,e)||o&&\"length\"===t||(r[r.length]=t);if(rn)for(n=on.length-1;n>=0;)Qt(t=on[n],e)&&!an(r,t)&&(r[r.length]=t),n-=1;return r})):Lt((function(e){return Object(e)!==e?[]:Object.keys(e)}));const cn=Lt((function(e){return null===e?\"Null\":void 0===e?\"Undefined\":Object.prototype.toString.call(e).slice(8,-1)}));function un(e,t,n,r){var o=Yt(e);function s(e,t){return pn(e,t,n.slice(),r.slice())}return!Xt((function(e,t){return!Xt(s,t,e)}),Yt(t),o)}function pn(e,t,n,r){if(en(e,t))return!0;var o,s,i=cn(e);if(i!==cn(t))return!1;if(\"function\"==typeof e[\"fantasy-land/equals\"]||\"function\"==typeof t[\"fantasy-land/equals\"])return\"function\"==typeof e[\"fantasy-land/equals\"]&&e[\"fantasy-land/equals\"](t)&&\"function\"==typeof t[\"fantasy-land/equals\"]&&t[\"fantasy-land/equals\"](e);if(\"function\"==typeof e.equals||\"function\"==typeof t.equals)return\"function\"==typeof e.equals&&e.equals(t)&&\"function\"==typeof t.equals&&t.equals(e);switch(i){case\"Arguments\":case\"Array\":case\"Object\":if(\"function\"==typeof e.constructor&&\"Promise\"===(o=e.constructor,null==(s=String(o).match(/^function (\\w*)/))?\"\":s[1]))return e===t;break;case\"Boolean\":case\"Number\":case\"String\":if(typeof e!=typeof t||!en(e.valueOf(),t.valueOf()))return!1;break;case\"Date\":if(!en(e.valueOf(),t.valueOf()))return!1;break;case\"Error\":return e.name===t.name&&e.message===t.message;case\"RegExp\":if(e.source!==t.source||e.global!==t.global||e.ignoreCase!==t.ignoreCase||e.multiline!==t.multiline||e.sticky!==t.sticky||e.unicode!==t.unicode)return!1}for(var a=n.length-1;a>=0;){if(n[a]===e)return r[a]===t;a-=1}switch(i){case\"Map\":return e.size===t.size&&un(e.entries(),t.entries(),n.concat([e]),r.concat([t]));case\"Set\":return e.size===t.size&&un(e.values(),t.values(),n.concat([e]),r.concat([t]));case\"Arguments\":case\"Array\":case\"Object\":case\"Boolean\":case\"Number\":case\"String\":case\"Date\":case\"Error\":case\"RegExp\":case\"Int8Array\":case\"Uint8Array\":case\"Uint8ClampedArray\":case\"Int16Array\":case\"Uint16Array\":case\"Int32Array\":case\"Uint32Array\":case\"Float32Array\":case\"Float64Array\":case\"ArrayBuffer\":break;default:return!1}var l=ln(e);if(l.length!==ln(t).length)return!1;var c=n.concat([e]),u=r.concat([t]);for(a=l.length-1;a>=0;){var p=l[a];if(!Qt(p,t)||!pn(t[p],e[p],c,u))return!1;a-=1}return!0}const hn=Bt((function(e,t){return pn(e,t,[],[])}));function fn(e,t){return function(e,t,n){var r,o;if(\"function\"==typeof e.indexOf)switch(typeof t){case\"number\":if(0===t){for(r=1/t;n<e.length;){if(0===(o=e[n])&&1/o===r)return n;n+=1}return-1}if(t!=t){for(;n<e.length;){if(\"number\"==typeof(o=e[n])&&o!=o)return n;n+=1}return-1}return e.indexOf(t,n);case\"string\":case\"boolean\":case\"function\":case\"undefined\":return e.indexOf(t,n);case\"object\":if(null===t)return e.indexOf(t,n)}for(;n<e.length;){if(hn(e[n],t))return n;n+=1}return-1}(t,e,0)>=0}function dn(e,t){for(var n=0,r=t.length,o=Array(r);n<r;)o[n]=e(t[n]),n+=1;return o}function mn(e){return'\"'+e.replace(/\\\\/g,\"\\\\\\\\\").replace(/[\\b]/g,\"\\\\b\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\").replace(/\"/g,'\\\\\"')+'\"'}var gn=function(e){return(e<10?\"0\":\"\")+e};const yn=\"function\"==typeof Date.prototype.toISOString?function(e){return e.toISOString()}:function(e){return e.getUTCFullYear()+\"-\"+gn(e.getUTCMonth()+1)+\"-\"+gn(e.getUTCDate())+\"T\"+gn(e.getUTCHours())+\":\"+gn(e.getUTCMinutes())+\":\"+gn(e.getUTCSeconds())+\".\"+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+\"Z\"};function vn(e){return function(){return!e.apply(this,arguments)}}function bn(e,t,n){for(var r=0,o=n.length;r<o;)t=e(t,n[r]),r+=1;return t}function wn(e){return\"[object Object]\"===Object.prototype.toString.call(e)}var En=function(){function e(e,t){this.xf=t,this.f=e}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(t)?this.xf[\"@@transducer/step\"](e,t):e},e}();function xn(e){return function(t){return new En(e,t)}}const Sn=Bt(qt([\"fantasy-land/filter\",\"filter\"],xn,(function(e,t){return wn(t)?bn((function(n,r){return e(t[r])&&(n[r]=t[r]),n}),{},ln(t)):function(e,t){for(var n=0,r=t.length,o=[];n<r;)e(t[n])&&(o[o.length]=t[n]),n+=1;return o}(e,t)})));const _n=Bt((function(e,t){return Sn(vn(e),t)}));function jn(e,t){var n=function(n){var r=t.concat([e]);return fn(n,r)?\"<Circular>\":jn(n,r)},r=function(e,t){return dn((function(t){return mn(t)+\": \"+n(e[t])}),t.slice().sort())};switch(Object.prototype.toString.call(e)){case\"[object Arguments]\":return\"(function() { return arguments; }(\"+dn(n,e).join(\", \")+\"))\";case\"[object Array]\":return\"[\"+dn(n,e).concat(r(e,_n((function(e){return/^\\d+$/.test(e)}),ln(e)))).join(\", \")+\"]\";case\"[object Boolean]\":return\"object\"==typeof e?\"new Boolean(\"+n(e.valueOf())+\")\":e.toString();case\"[object Date]\":return\"new Date(\"+(isNaN(e.valueOf())?n(NaN):mn(yn(e)))+\")\";case\"[object Map]\":return\"new Map(\"+n(Array.from(e))+\")\";case\"[object Null]\":return\"null\";case\"[object Number]\":return\"object\"==typeof e?\"new Number(\"+n(e.valueOf())+\")\":1/e==-1/0?\"-0\":e.toString(10);case\"[object Set]\":return\"new Set(\"+n(Array.from(e).sort())+\")\";case\"[object String]\":return\"object\"==typeof e?\"new String(\"+n(e.valueOf())+\")\":mn(e);case\"[object Undefined]\":return\"undefined\";default:if(\"function\"==typeof e.toString){var o=e.toString();if(\"[object Object]\"!==o)return o}return\"{\"+r(e,ln(e)).join(\", \")+\"}\"}}const On=Lt((function(e){return jn(e,[])}));const kn=Bt((function(e,t){if(e===t)return t;function n(e,t){if(e>t!=t>e)return t>e?t:e}var r=n(e,t);if(void 0!==r)return r;var o=n(typeof e,typeof t);if(void 0!==o)return o===typeof e?e:t;var s=On(e),i=n(s,On(t));return void 0!==i&&i===s?e:t}));var An=function(){function e(e,t){this.xf=t,this.f=e}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){return this.xf[\"@@transducer/step\"](e,this.f(t))},e}();const Cn=Bt(qt([\"fantasy-land/map\",\"map\"],(function(e){return function(t){return new An(e,t)}}),(function(e,t){switch(Object.prototype.toString.call(t)){case\"[object Function]\":return Zt(t.length,(function(){return e.call(this,t.apply(this,arguments))}));case\"[object Object]\":return bn((function(n,r){return n[r]=e(t[r]),n}),{},ln(t));default:return dn(e,t)}}))),Pn=Number.isInteger||function(e){return e<<0===e};function Nn(e){return\"[object String]\"===Object.prototype.toString.call(e)}const In=Bt((function(e,t){var n=e<0?t.length+e:e;return Nn(t)?t.charAt(n):t[n]}));const Tn=Bt((function(e,t){if(null!=t)return Pn(e)?In(e,t):t[e]}));const Rn=Bt((function(e,t){return Cn(Tn(e),t)}));function Mn(e){return function t(n,r,o){switch(arguments.length){case 0:return t;case 1:return Ft(n)?t:Bt((function(t,r){return e(n,t,r)}));case 2:return Ft(n)&&Ft(r)?t:Ft(n)?Bt((function(t,n){return e(t,r,n)})):Ft(r)?Bt((function(t,r){return e(n,t,r)})):Lt((function(t){return e(n,r,t)}));default:return Ft(n)&&Ft(r)&&Ft(o)?t:Ft(n)&&Ft(r)?Bt((function(t,n){return e(t,n,o)})):Ft(n)&&Ft(o)?Bt((function(t,n){return e(t,r,n)})):Ft(r)&&Ft(o)?Bt((function(t,r){return e(n,t,r)})):Ft(n)?Lt((function(t){return e(t,r,o)})):Ft(r)?Lt((function(t){return e(n,t,o)})):Ft(o)?Lt((function(t){return e(n,r,t)})):e(n,r,o)}}}const Dn=Lt((function(e){return!!$t(e)||!!e&&(\"object\"==typeof e&&(!Nn(e)&&(0===e.length||e.length>0&&(e.hasOwnProperty(0)&&e.hasOwnProperty(e.length-1)))))}));var Fn=\"undefined\"!=typeof Symbol?Symbol.iterator:\"@@iterator\";function Ln(e,t,n){return function(r,o,s){if(Dn(s))return e(r,o,s);if(null==s)return o;if(\"function\"==typeof s[\"fantasy-land/reduce\"])return t(r,o,s,\"fantasy-land/reduce\");if(null!=s[Fn])return n(r,o,s[Fn]());if(\"function\"==typeof s.next)return n(r,o,s);if(\"function\"==typeof s.reduce)return t(r,o,s,\"reduce\");throw new TypeError(\"reduce: list must be array or iterable\")}}function Bn(e,t,n){for(var r=0,o=n.length;r<o;){if((t=e[\"@@transducer/step\"](t,n[r]))&&t[\"@@transducer/reduced\"]){t=t[\"@@transducer/value\"];break}r+=1}return e[\"@@transducer/result\"](t)}const $n=Bt((function(e,t){return Ht(e.length,(function(){return e.apply(t,arguments)}))}));function qn(e,t,n){for(var r=n.next();!r.done;){if((t=e[\"@@transducer/step\"](t,r.value))&&t[\"@@transducer/reduced\"]){t=t[\"@@transducer/value\"];break}r=n.next()}return e[\"@@transducer/result\"](t)}function Un(e,t,n,r){return e[\"@@transducer/result\"](n[r]($n(e[\"@@transducer/step\"],e),t))}const zn=Ln(Bn,Un,qn);var Vn=function(){function e(e){this.f=e}return e.prototype[\"@@transducer/init\"]=function(){throw new Error(\"init not implemented on XWrap\")},e.prototype[\"@@transducer/result\"]=function(e){return e},e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(e,t)},e}();function Wn(e){return new Vn(e)}const Jn=Mn((function(e,t,n){return zn(\"function\"==typeof e?Wn(e):e,t,n)}));const Kn=Lt((function(e){return Zt(Jn(kn,0,Rn(\"length\",e)),(function(){for(var t=0,n=e.length;t<n;){if(!e[t].apply(this,arguments))return!1;t+=1}return!0}))}));const Hn=Lt((function(e){return function(){return e}}));const Gn=Lt((function(e){return Zt(Jn(kn,0,Rn(\"length\",e)),(function(){for(var t=0,n=e.length;t<n;){if(e[t].apply(this,arguments))return!0;t+=1}return!1}))}));function Zn(e,t,n){for(var r=n.next();!r.done;)t=e(t,r.value),r=n.next();return t}function Yn(e,t,n,r){return n[r](e,t)}const Xn=Ln(bn,Yn,Zn);const Qn=Bt((function(e,t){return\"function\"==typeof t[\"fantasy-land/ap\"]?t[\"fantasy-land/ap\"](e):\"function\"==typeof e.ap?e.ap(t):\"function\"==typeof e?function(n){return e(n)(t(n))}:Xn((function(e,n){return function(e,t){var n;t=t||[];var r=(e=e||[]).length,o=t.length,s=[];for(n=0;n<r;)s[s.length]=e[n],n+=1;for(n=0;n<o;)s[s.length]=t[n],n+=1;return s}(e,Cn(n,t))}),[],e)}));const er=Bt((function(e,t){return e.apply(this,t)}));var tr=Lt((function(e){for(var t=ln(e),n=t.length,r=[],o=0;o<n;)r[o]=e[t[o]],o+=1;return r}));const nr=tr;const rr=Lt((function(e){return null==e}));const or=Mn((function e(t,n,r){if(0===t.length)return n;var o=t[0];if(t.length>1){var s=!rr(r)&&Qt(o,r)&&\"object\"==typeof r[o]?r[o]:Pn(t[1])?[]:{};n=e(Array.prototype.slice.call(t,1),n,s)}return function(e,t,n){if(Pn(e)&&$t(n)){var r=[].concat(n);return r[e]=t,r}var o={};for(var s in n)o[s]=n[s];return o[e]=t,o}(o,n,r)}));function sr(e){var t=Object.prototype.toString.call(e);return\"[object Function]\"===t||\"[object AsyncFunction]\"===t||\"[object GeneratorFunction]\"===t||\"[object AsyncGeneratorFunction]\"===t}const ir=Bt((function(e,t){return e&&t}));const ar=Bt((function(e,t){var n=Zt(e,t);return Zt(e,(function(){return bn(Qn,Cn(n,arguments[0]),Array.prototype.slice.call(arguments,1))}))}));const lr=Lt((function(e){return ar(e.length,e)}));const cr=Bt((function(e,t){return sr(e)?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:lr(ir)(e,t)}));const ur=Lt((function(e){return function(t,n){return e(t,n)?-1:e(n,t)?1:0}}));const pr=lr(Lt((function(e){return!e})));function hr(e,t){return function(){return t.call(this,e.apply(this,arguments))}}function fr(e,t){return function(){var n=arguments.length;if(0===n)return t();var r=arguments[n-1];return $t(r)||\"function\"!=typeof r[e]?t.apply(this,arguments):r[e].apply(r,Array.prototype.slice.call(arguments,0,n-1))}}const dr=Mn(fr(\"slice\",(function(e,t,n){return Array.prototype.slice.call(n,e,t)})));const mr=Lt(fr(\"tail\",dr(1,1/0)));function gr(){if(0===arguments.length)throw new Error(\"pipe requires at least one argument\");return Ht(arguments[0].length,Jn(hr,arguments[0],mr(arguments)))}var yr=Bt((function(e,t){return Zt(Jn(kn,0,Rn(\"length\",t)),(function(){var n=arguments,r=this;return e.apply(r,dn((function(e){return e.apply(r,n)}),t))}))}));const vr=yr;function br(e){return new RegExp(e.source,e.flags?e.flags:(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.sticky?\"y\":\"\")+(e.unicode?\"u\":\"\")+(e.dotAll?\"s\":\"\"))}function wr(e,t,n){if(n||(n=new Er),function(e){var t=typeof e;return null==e||\"object\"!=t&&\"function\"!=t}(e))return e;var r=function(r){var o=n.get(e);if(o)return o;for(var s in n.set(e,r),e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=t?wr(e[s],!0,n):e[s]);return r};switch(cn(e)){case\"Object\":return r(Object.create(Object.getPrototypeOf(e)));case\"Array\":return r([]);case\"Date\":return new Date(e.valueOf());case\"RegExp\":return br(e);case\"Int8Array\":case\"Uint8Array\":case\"Uint8ClampedArray\":case\"Int16Array\":case\"Uint16Array\":case\"Int32Array\":case\"Uint32Array\":case\"Float32Array\":case\"Float64Array\":case\"BigInt64Array\":case\"BigUint64Array\":return e.slice();default:return e}}var Er=function(){function e(){this.map={},this.length=0}return e.prototype.set=function(e,t){const n=this.hash(e);let r=this.map[n];r||(this.map[n]=r=[]),r.push([e,t]),this.length+=1},e.prototype.hash=function(e){let t=[];for(var n in e)t.push(Object.prototype.toString.call(e[n]));return t.join()},e.prototype.get=function(e){if(this.length<=180){for(const t in this.map){const n=this.map[t];for(let t=0;t<n.length;t+=1){const r=n[t];if(r[0]===e)return r[1]}}return}const t=this.hash(e),n=this.map[t];if(n)for(let t=0;t<n.length;t+=1){const r=n[t];if(r[0]===e)return r[1]}},e}(),xr=function(){function e(e,t,n,r){this.valueFn=e,this.valueAcc=t,this.keyFn=n,this.xf=r,this.inputs={}}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=function(e){var t;for(t in this.inputs)if(Qt(t,this.inputs)&&(e=this.xf[\"@@transducer/step\"](e,this.inputs[t]))[\"@@transducer/reduced\"]){e=e[\"@@transducer/value\"];break}return this.inputs=null,this.xf[\"@@transducer/result\"](e)},e.prototype[\"@@transducer/step\"]=function(e,t){var n=this.keyFn(t);return this.inputs[n]=this.inputs[n]||[n,wr(this.valueAcc,!1)],this.inputs[n][1]=this.valueFn(this.inputs[n][1],t),e},e}();function Sr(e,t,n){return function(r){return new xr(e,t,n,r)}}var _r=Gt(4,[],qt([],Sr,(function(e,t,n,r){var o=Wn((function(r,o){var s=n(o),i=e(Qt(s,r)?r[s]:wr(t,!1),o);return i&&i[\"@@transducer/reduced\"]?Ut(r):(r[s]=i,r)}));return zn(o,{},r)})));const jr=_r;const Or=Lt((function(e){return Zt(e.length,e)}));const kr=Bt((function(e,t){return null==t||t!=t?e:t}));function Ar(e,t,n){var r,o=typeof e;switch(o){case\"string\":case\"number\":return 0===e&&1/e==-1/0?!!n._items[\"-0\"]||(t&&(n._items[\"-0\"]=!0),!1):null!==n._nativeSet?t?(r=n._nativeSet.size,n._nativeSet.add(e),n._nativeSet.size===r):n._nativeSet.has(e):o in n._items?e in n._items[o]||(t&&(n._items[o][e]=!0),!1):(t&&(n._items[o]={},n._items[o][e]=!0),!1);case\"boolean\":if(o in n._items){var s=e?1:0;return!!n._items[o][s]||(t&&(n._items[o][s]=!0),!1)}return t&&(n._items[o]=e?[!1,!0]:[!0,!1]),!1;case\"function\":return null!==n._nativeSet?t?(r=n._nativeSet.size,n._nativeSet.add(e),n._nativeSet.size===r):n._nativeSet.has(e):o in n._items?!!fn(e,n._items[o])||(t&&n._items[o].push(e),!1):(t&&(n._items[o]=[e]),!1);case\"undefined\":return!!n._items[o]||(t&&(n._items[o]=!0),!1);case\"object\":if(null===e)return!!n._items.null||(t&&(n._items.null=!0),!1);default:return(o=Object.prototype.toString.call(e))in n._items?!!fn(e,n._items[o])||(t&&n._items[o].push(e),!1):(t&&(n._items[o]=[e]),!1)}}const Cr=function(){function e(){this._nativeSet=\"function\"==typeof Set?new Set:null,this._items={}}return e.prototype.add=function(e){return!Ar(e,!0,this)},e.prototype.has=function(e){return Ar(e,!1,this)},e}();const Pr=Bt((function(e,t){for(var n=[],r=0,o=e.length,s=t.length,i=new Cr,a=0;a<s;a+=1)i.add(t[a]);for(;r<o;)i.add(e[r])&&(n[n.length]=e[r]),r+=1;return n}));var Nr=function(){function e(e,t){this.xf=t,this.n=e,this.i=0}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){this.i+=1;var n=0===this.n?e:this.xf[\"@@transducer/step\"](e,t);return this.n>=0&&this.i>=this.n?Ut(n):n},e}();function Ir(e){return function(t){return new Nr(e,t)}}const Tr=Bt(qt([\"take\"],Ir,(function(e,t){return dr(0,e<0?1/0:e,t)})));function Rr(e,t){for(var n=t.length-1;n>=0&&e(t[n]);)n-=1;return dr(0,n+1,t)}var Mr=function(){function e(e,t){this.f=e,this.retained=[],this.xf=t}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=function(e){return this.retained=null,this.xf[\"@@transducer/result\"](e)},e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(t)?this.retain(e,t):this.flush(e,t)},e.prototype.flush=function(e,t){return e=zn(this.xf,e,this.retained),this.retained=[],this.xf[\"@@transducer/step\"](e,t)},e.prototype.retain=function(e,t){return this.retained.push(t),e},e}();function Dr(e){return function(t){return new Mr(e,t)}}const Fr=Bt(qt([],Dr,Rr));var Lr=function(){function e(e,t){this.xf=t,this.f=e}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){if(this.f){if(this.f(t))return e;this.f=null}return this.xf[\"@@transducer/step\"](e,t)},e}();function Br(e){return function(t){return new Lr(e,t)}}const $r=Bt(qt([\"dropWhile\"],Br,(function(e,t){for(var n=0,r=t.length;n<r&&e(t[n]);)n+=1;return dr(n,1/0,t)})));const qr=Bt((function(e,t){return e||t}));const Ur=Bt((function(e,t){return sr(e)?function(){return e.apply(this,arguments)||t.apply(this,arguments)}:lr(qr)(e,t)}));var zr=Lt((function(e){return null!=e&&\"function\"==typeof e[\"fantasy-land/empty\"]?e[\"fantasy-land/empty\"]():null!=e&&null!=e.constructor&&\"function\"==typeof e.constructor[\"fantasy-land/empty\"]?e.constructor[\"fantasy-land/empty\"]():null!=e&&\"function\"==typeof e.empty?e.empty():null!=e&&null!=e.constructor&&\"function\"==typeof e.constructor.empty?e.constructor.empty():$t(e)?[]:Nn(e)?\"\":wn(e)?{}:nn(e)?function(){return arguments}():function(e){var t=Object.prototype.toString.call(e);return\"[object Uint8ClampedArray]\"===t||\"[object Int8Array]\"===t||\"[object Uint8Array]\"===t||\"[object Int16Array]\"===t||\"[object Uint16Array]\"===t||\"[object Int32Array]\"===t||\"[object Uint32Array]\"===t||\"[object Float32Array]\"===t||\"[object Float64Array]\"===t||\"[object BigInt64Array]\"===t||\"[object BigUint64Array]\"===t}(e)?e.constructor.from(\"\"):void 0}));const Vr=zr;const Wr=Lt((function(e){return Zt(e.length,(function(t,n){var r=Array.prototype.slice.call(arguments,0);return r[0]=n,r[1]=t,e.apply(this,r)}))}));const Jr=Bt(fr(\"groupBy\",jr((function(e,t){return e.push(t),e}),[])));const Kr=Bt((function(e,t){if(0===e.length||rr(t))return!1;for(var n=t,r=0;r<e.length;){if(rr(n)||!Qt(e[r],n))return!1;n=n[e[r]],r+=1}return!0}));const Hr=Bt((function(e,t){return Kr([e],t)}));const Gr=Bt((function(e,t){return!rr(t)&&e in t}));const Zr=In(0);var Yr=function(e,t){switch(arguments.length){case 0:return Yr;case 1:return function t(n){return 0===arguments.length?t:en(e,n)};default:return en(e,t)}};const Xr=Yr;function Qr(e){return e}const eo=Lt(Qr);const to=Mn((function(e,t,n){return Zt(Math.max(e.length,t.length,n.length),(function(){return e.apply(this,arguments)?t.apply(this,arguments):n.apply(this,arguments)}))}));const no=Bt(fn);const ro=dr(0,-1);\"function\"==typeof Object.assign&&Object.assign;const oo=Bt((function(e,t){return Zt(e+1,(function(){var n=arguments[e];if(null!=n&&sr(n[t]))return n[t].apply(n,Array.prototype.slice.call(arguments,0,e));throw new TypeError(On(n)+' does not have a method named \"'+t+'\"')}))}));const so=Lt((function(e){return null!=e&&hn(e,Vr(e))}));const io=oo(1,\"join\");const ao=In(-1);const lo=Bt((function(e,t){return function(n){return function(r){return Cn((function(e){return t(e,r)}),n(e(r)))}}}));const co=Bt((function(e,t){return e.map((function(e){for(var n,r=t,o=0;o<e.length;){if(null==r)return;n=e[o],r=Pn(n)?In(n,r):r[n],o+=1}return r}))}));const uo=Bt((function(e,t){return co([e],t)[0]}));const po=Bt((function(e,t){return bn((function(n,r){return n[r]=e(t[r],r,t),n}),{},ln(t))}));const ho=Mn((function(e,t,n){var r,o={};for(r in n=n||{},t=t||{})Qt(r,t)&&(o[r]=Qt(r,n)?e(r,t[r],n[r]):t[r]);for(r in n)Qt(r,n)&&!Qt(r,o)&&(o[r]=n[r]);return o}));const fo=Mn((function e(t,n,r){return ho((function(n,r,o){return wn(r)&&wn(o)?e(t,r,o):t(n,r,o)}),n,r)}));const mo=Bt((function(e,t){return fo((function(e,t,n){return n}),e,t)}));const go=Bt((function(e,t){return Kt(vn(e),t)}));var yo=function(e){return{value:e,map:function(t){return yo(t(e))}}};const vo=Mn((function(e,t,n){return e((function(e){return yo(t(e))}))(n).value}));const bo=Mn((function(e,t,n){return kr(e,uo(t,n))}));const wo=Mn((function(e,t,n){return e(uo(t,n))}));const Eo=Bt((function(e,t){for(var n={},r=0;r<e.length;)e[r]in t&&(n[e[r]]=t[e[r]]),r+=1;return n}));const xo=Mn((function(e,t,n){return hn(e,Tn(t,n))}));const So=Mn((function(e,t,n){return kr(e,Tn(t,n))}));const _o=Mn((function(e,t,n){return e(Tn(t,n))}));function jo(e){return\"[object Number]\"===Object.prototype.toString.call(e)}var Oo=Bt((function(e,t){if(!jo(e)||!jo(t))throw new TypeError(\"Both arguments to range must be numbers\");for(var n=[],r=e;r<t;)n.push(r),r+=1;return n}));const ko=Oo;const Ao=Lt(Ut);const Co=Mn((function(e,t,n){return n.replace(e,t)}));var Po=Bt((function(e,t){return Array.prototype.slice.call(t,0).sort(e)}));const No=Po;const Io=oo(1,\"split\");const To=Bt((function(e,t){return hn(Tr(e.length,t),e)}));const Ro=Bt((function(e,t){if(n=e,\"[object RegExp]\"!==Object.prototype.toString.call(n))throw new TypeError(\"‘test’ requires a value of type RegExp as its first argument; received \"+On(e));var n;return br(e).test(t)}));var Mo=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\";String.prototype.trim;var Do=function(){function e(e,t){this.xf=t,this.pred=e,this.items=[]}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){return Xt(this.pred,t,this.items)?e:(this.items.push(t),this.xf[\"@@transducer/step\"](e,t))},e}();function Fo(e){return function(t){return new Do(e,t)}}const Lo=Bt(qt([],Fo,(function(e,t){for(var n,r=0,o=t.length,s=[];r<o;)Xt(e,n=t[r],s)||(s[s.length]=n),r+=1;return s})));const Bo=Mn((function(e,t,n){return e(n)?t(n):n}));const $o=Hn(void 0);const qo=hn($o());class Uo extends Pt.ON{constructor(e,t,n){super(e,t,n),this.element=\"parseResult\"}get api(){return this.children.filter((e=>e.classes.contains(\"api\"))).first}get results(){return this.children.filter((e=>e.classes.contains(\"result\")))}get result(){return this.results.first}get annotations(){return this.children.filter((e=>\"annotation\"===e.element))}get warnings(){return this.children.filter((e=>\"annotation\"===e.element&&e.classes.contains(\"warning\")))}get errors(){return this.children.filter((e=>\"annotation\"===e.element&&e.classes.contains(\"error\")))}get isEmpty(){return this.children.reject((e=>\"annotation\"===e.element)).isEmpty}replaceResult(e){const{result:t}=this;if(qo(t))return!1;const n=this.content.findIndex((e=>e===t));return-1!==n&&(this.content[n]=e,!0)}}const zo=Uo;class Vo extends Pt.ON{constructor(e,t,n){super(e,t,n),this.element=\"sourceMap\"}get positionStart(){return this.children.filter((e=>e.classes.contains(\"position\"))).get(0)}get positionEnd(){return this.children.filter((e=>e.classes.contains(\"position\"))).get(1)}set position(e){if(null===e)return;const t=new Pt.ON([e.start.row,e.start.column,e.start.char]),n=new Pt.ON([e.end.row,e.end.column,e.end.char]);t.classes.push(\"position\"),n.classes.push(\"position\"),this.push(t).push(n)}}const Wo=Vo;var Jo=n(80621),Ko=n(52201),Ho=n(27398);function Go(e){return Go=\"function\"==typeof Ko&&\"symbol\"==typeof Ho?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Ko&&e.constructor===Ko&&e!==Ko.prototype?\"symbol\":typeof e},Go(e)}var Zo=n(26189);function Yo(e){var t=function(e,t){if(\"object\"!==Go(e)||null===e)return e;var n=e[Zo];if(void 0!==n){var r=n.call(e,t||\"default\");if(\"object\"!==Go(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===Go(t)?t:String(t)}function Xo(e,t,n){return(t=Yo(t))in e?Jo(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Qo=Zt(1,gr(cn,Xr(\"GeneratorFunction\")));const es=Zt(1,gr(cn,Xr(\"AsyncFunction\")));const ts=Gn([gr(cn,Xr(\"Function\")),Qo,es]);const ns=pr(ts);const rs=Zt(1,ts(Array.isArray)?Array.isArray:gr(cn,Xr(\"Array\")));const os=cr(rs,so);var ss=Zt(3,(function(e,t,n){var r=uo(e,n),o=uo(ro(e),n);if(!ns(r)&&!os(e)){var s=$n(r,o);return er(s,t)}}));const is=ss;const as=Wr(no),ls=(e,t)=>\"function\"==typeof(null==t?void 0:t[e]),cs=e=>null!=e&&Object.prototype.hasOwnProperty.call(e,\"_storedElement\")&&Object.prototype.hasOwnProperty.call(e,\"_content\"),us=(e,t)=>{var n;return(null==t||null===(n=t.primitive)||void 0===n?void 0:n.call(t))===e},ps=(e,t)=>{var n,r;return(null==t||null===(n=t.classes)||void 0===n||null===(r=n.includes)||void 0===r?void 0:r.call(n,e))||!1},hs=(e,t)=>(null==t?void 0:t.element)===e,fs=e=>e({hasMethod:ls,hasBasicElementProps:cs,primitiveEq:us,isElementType:hs,hasClass:ps}),ds=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.W_||e(n)&&t(void 0,n))),ms=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.RP||e(n)&&t(\"string\",n))),gs=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.VL||e(n)&&t(\"number\",n))),ys=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.zr||e(n)&&t(\"null\",n))),vs=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.hh||e(n)&&t(\"boolean\",n))),bs=fs((({hasBasicElementProps:e,primitiveEq:t,hasMethod:n})=>r=>r instanceof Pt.Sb||e(r)&&t(\"object\",r)&&n(\"keys\",r)&&n(\"values\",r)&&n(\"items\",r))),ws=fs((({hasBasicElementProps:e,primitiveEq:t,hasMethod:n})=>r=>r instanceof Pt.ON&&!(r instanceof Pt.Sb)||e(r)&&t(\"array\",r)&&n(\"push\",r)&&n(\"unshift\",r)&&n(\"map\",r)&&n(\"reduce\",r))),Es=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pt.c6||e(r)&&t(\"member\",r)&&n(void 0,r))),xs=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pt.EA||e(r)&&t(\"link\",r)&&n(void 0,r))),Ss=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pt.tK||e(r)&&t(\"ref\",r)&&n(void 0,r))),_s=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof It||e(r)&&t(\"annotation\",r)&&n(\"array\",r))),js=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Rt||e(r)&&t(\"comment\",r)&&n(\"string\",r))),Os=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof zo||e(r)&&t(\"parseResult\",r)&&n(\"array\",r))),ks=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Wo||e(r)&&t(\"sourceMap\",r)&&n(\"array\",r))),As=e=>hs(\"object\",e)||hs(\"array\",e)||hs(\"boolean\",e)||hs(\"number\",e)||hs(\"string\",e)||hs(\"null\",e)||hs(\"member\",e),Cs=e=>{var t,n;return ks(null==e||null===(t=e.meta)||void 0===t||null===(n=t.get)||void 0===n?void 0:n.call(t,\"sourceMap\"))},Ps=(e,t)=>{if(0===e.length)return!0;const n=t.attributes.get(\"symbols\");return!!ws(n)&&Kt(as(n.toValue()),e)},Ns=(e,t)=>0===e.length||Kt(as(t.classes.toValue()),e);const Is=hn(null);const Ts=pr(Is);function Rs(e){return Rs=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},Rs(e)}const Ms=function(e){return\"object\"===Rs(e)};const Ds=Zt(1,cr(Ts,Ms));var Fs=gr(cn,Xr(\"Object\")),Ls=gr(On,hn(On(Object))),Bs=wo(cr(ts,Ls),[\"constructor\"]);const $s=Zt(1,(function(e){if(!Ds(e)||!Fs(e))return!1;var t=Object.getPrototypeOf(e);return!!Is(t)||Bs(t)}));class qs extends Pt.lS{constructor(){super(),this.register(\"annotation\",It),this.register(\"comment\",Rt),this.register(\"parseResult\",zo),this.register(\"sourceMap\",Wo)}}const Us=new qs,zs=e=>{const t=new qs;return $s(e)&&t.use(e),t},Vs=Us;function Ws(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Js=()=>({predicates:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ws(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ws(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},s),namespace:Vs});var Ks=n(14058),Hs=n(628),Gs=n(92093);function Zs(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Gs(e);for(r=0;r<s.length;r++)n=s[r],Hs(t).call(t,n)>=0||(o[n]=e[n]);return o}(e,t);if(Ks){var s=Ks(e);for(r=0;r<s.length;r++)n=s[r],Hs(t).call(t,n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ys=n(43992);const Xs=Zt(1,gr(cn,Xr(\"String\"))),Qs=(e,t,n)=>{const r=e[t];if(null!=r){if(!n&&\"function\"==typeof r)return r;const e=n?r.leave:r.enter;if(\"function\"==typeof e)return e}else{const r=n?e.leave:e.enter;if(null!=r){if(\"function\"==typeof r)return r;const e=r[t];if(\"function\"==typeof e)return e}}return null},ei={},ti=e=>null==e?void 0:e.type,ni=e=>\"string\"==typeof ti(e),ri=(e,{visitFnGetter:t=Qs,nodeTypeGetter:n=ti}={})=>{const r=new Array(e.length);return{enter(o,...s){for(let i=0;i<e.length;i+=1)if(null==r[i]){const a=t(e[i],n(o),!1);if(\"function\"==typeof a){const t=a.call(e[i],o,...s);if(!1===t)r[i]=o;else if(t===ei)r[i]=ei;else if(void 0!==t)return t}}},leave(o,...s){for(let i=0;i<e.length;i+=1)if(null==r[i]){const a=t(e[i],n(o),!0);if(\"function\"==typeof a){const t=a.call(e[i],o,...s);if(t===ei)r[i]=ei;else if(void 0!==t&&!1!==t)return t}}else r[i]===o&&(r[i]=null)}}},oi=(e,t,{keyMap:n=null,state:r={},breakSymbol:o=ei,deleteNodeSymbol:s=null,skipVisitingNodeSymbol:i=!1,visitFnGetter:a=Qs,nodeTypeGetter:l=ti,nodePredicate:c=ni,detectCycles:u=!0}={})=>{const p=n||{};let h,f,d=Array.isArray(e),m=[e],g=-1,y=[];const v=[],b=[];let w=e;do{g+=1;const e=g===m.length;let n,E;const x=e&&0!==y.length;if(e){if(n=0===b.length?void 0:v.pop(),E=f,f=b.pop(),x){E=d?E.slice():Object.create(Object.getPrototypeOf(E),Object.getOwnPropertyDescriptors(E));let e=0;for(let t=0;t<y.length;t+=1){let n=y[t][0];const r=y[t][1];d&&(n-=e),d&&r===s?(E.splice(n,1),e+=1):E[n]=r}}g=h.index,m=h.keys,y=h.edits,d=h.inArray,h=h.prev}else{if(n=f?d?g:m[g]:void 0,E=f?f[n]:w,E===s||void 0===E)continue;f&&v.push(n)}if(b.includes(E))continue;let S;if(!Array.isArray(E)){if(!c(E))throw new Error(`Invalid AST Node:  ${JSON.stringify(E)}`);if(u&&b.includes(E)){v.pop();continue}const s=a(t,l(E),e);if(s){for(const[e,n]of Object.entries(r))t[e]=n;if(S=s.call(t,E,n,f,v,b),S===o)break;if(S===i){if(!e){v.pop();continue}}else if(void 0!==S&&(y.push([n,S]),!e)){if(!c(S)){v.pop();continue}E=S}}}void 0===S&&x&&y.push([n,E]),e||(h={inArray:d,index:g,keys:m,edits:y,prev:h},d=Array.isArray(E),m=d?E:p[l(E)]||[],g=-1,y=[],f&&b.push(f),f=E)}while(void 0!==h);return 0!==y.length&&([,w]=y[y.length-1]),w};oi[Symbol.for(\"nodejs.util.promisify.custom\")]=async(e,t,{keyMap:n=null,state:r={},breakSymbol:o=ei,deleteNodeSymbol:s=null,skipVisitingNodeSymbol:i=!1,visitFnGetter:a=Qs,nodeTypeGetter:l=ti,nodePredicate:c=ni,detectCycles:u=!0}={})=>{const p=n||{};let h,f,d=Array.isArray(e),m=[e],g=-1,y=[];const v=[],b=[];let w=e;do{g+=1;const e=g===m.length;let n,E;const x=e&&0!==y.length;if(e){if(n=0===b.length?void 0:v.pop(),E=f,f=b.pop(),x){E=d?E.slice():Object.create(Object.getPrototypeOf(E),Object.getOwnPropertyDescriptors(E));let e=0;for(let t=0;t<y.length;t+=1){let n=y[t][0];const r=y[t][1];d&&(n-=e),d&&r===s?(E.splice(n,1),e+=1):E[n]=r}}g=h.index,m=h.keys,y=h.edits,d=h.inArray,h=h.prev}else{if(n=f?d?g:m[g]:void 0,E=f?f[n]:w,E===s||void 0===E)continue;f&&v.push(n)}let S;if(!Array.isArray(E)){if(!c(E))throw new Error(`Invalid AST Node:  ${JSON.stringify(E)}`);if(u&&b.includes(E)){v.pop();continue}const s=a(t,l(E),e);if(s){for(const[e,n]of Object.entries(r))t[e]=n;if(S=await s.call(t,E,n,f,v,b),S===o)break;if(S===i){if(!e){v.pop();continue}}else if(void 0!==S&&(y.push([n,S]),!e)){if(!c(S)){v.pop();continue}E=S}}}void 0===S&&x&&y.push([n,E]),e||(h={inArray:d,index:g,keys:m,edits:y,prev:h},d=Array.isArray(E),m=d?E:p[l(E)]||[],g=-1,y=[],f&&b.push(f),f=E)}while(void 0!==h);return 0!==y.length&&([,w]=y[y.length-1]),w};const si=[\"keyMap\"],ii=[\"keyMap\"];function ai(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function li(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ai(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ai(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const ci=e=>bs(e)?\"ObjectElement\":ws(e)?\"ArrayElement\":Es(e)?\"MemberElement\":ms(e)?\"StringElement\":vs(e)?\"BooleanElement\":gs(e)?\"NumberElement\":ys(e)?\"NullElement\":xs(e)?\"LinkElement\":Ss(e)?\"RefElement\":void 0,ui=gr(ci,Xs),pi={ObjectElement:[\"content\"],ArrayElement:[\"content\"],MemberElement:[\"key\",\"value\"],StringElement:[],BooleanElement:[],NumberElement:[],NullElement:[],RefElement:[],LinkElement:[],Annotation:[],Comment:[],ParseResultElement:[\"content\"],SourceMap:[\"content\"]},hi=Ys({props:{result:[],predicate:Mt,returnOnTrue:void 0,returnOnFalse:void 0},init({predicate:e=this.predicate,returnOnTrue:t=this.returnOnTrue,returnOnFalse:n=this.returnOnFalse}={}){this.result=[],this.predicate=e,this.returnOnTrue=t,this.returnOnFalse=n},methods:{enter(e){return this.predicate(e)?(this.result.push(e),this.returnOnTrue):this.returnOnFalse}}}),fi=(e,t,n={})=>{let{keyMap:r=pi}=n,o=Zs(n,si);return oi(e,t,li({keyMap:r,nodeTypeGetter:ci,nodePredicate:ui},o))};fi[Symbol.for(\"nodejs.util.promisify.custom\")]=async(e,t,n={})=>{let{keyMap:r=pi}=n,o=Zs(n,ii);return oi[Symbol.for(\"nodejs.util.promisify.custom\")](e,t,li({keyMap:r,nodeTypeGetter:ci,nodePredicate:ui},o))};const di=(e,t,n={})=>{if(0===t.length)return e;const r=So(Js,\"toolboxCreator\",n),o=So({},\"visitorOptions\",n),s=So(ci,\"nodeTypeGetter\",o),i=r(),a=t.map((e=>e(i))),l=ri(a.map(So({},\"visitor\")),{nodeTypeGetter:s});a.forEach(is([\"pre\"],[]));const c=fi(e,l,o);return a.forEach(is([\"post\"],[])),c};function mi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mi(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const yi=(e,{Type:t,plugins:n=[]})=>{const r=new t(e);return di(r,n,{toolboxCreator:Js,visitorOptions:{nodeTypeGetter:ci}})},vi=e=>(t,n={})=>yi(t,gi(gi({},n),{},{Type:e}));Pt.Sb.refract=vi(Pt.Sb),Pt.ON.refract=vi(Pt.ON),Pt.RP.refract=vi(Pt.RP),Pt.hh.refract=vi(Pt.hh),Pt.zr.refract=vi(Pt.zr),Pt.VL.refract=vi(Pt.VL),Pt.EA.refract=vi(Pt.EA),Pt.tK.refract=vi(Pt.tK),It.refract=vi(It),Rt.refract=vi(Rt),zo.refract=vi(zo),Wo.refract=vi(Wo);const bi=(e,t=new WeakMap)=>(Es(e)?(t.set(e.key,e),bi(e.key,t),t.set(e.value,e),bi(e.value,t)):e.children.forEach((n=>{t.set(n,e),bi(n,t)})),t),wi=Ys.init((function({element:e}){let t;this.transclude=function(n,r){var o;if(n===e)return r;if(n===r)return e;t=null!==(o=t)&&void 0!==o?o:bi(e);const s=t.get(n);return qo(s)?void 0:(bs(s)?((e,t,n)=>{const r=n.get(e);bs(r)&&(r.content=r.map(((o,s,i)=>i===e?(n.delete(e),n.set(t,r),t):i)))})(n,r,t):ws(s)?((e,t,n)=>{const r=n.get(e);ws(r)&&(r.content=r.map((o=>o===e?(n.delete(e),n.set(t,r),t):o)))})(n,r,t):Es(s)&&((e,t,n)=>{const r=n.get(e);Es(r)&&(r.key===e&&(r.key=t,n.delete(e),n.set(t,r)),r.value===e&&(r.value=t,n.delete(e),n.set(t,r)))})(n,r,t),e)}})),Ei=wi,xi=[\"keyMap\"],Si=[\"keyMap\"];function _i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ji(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_i(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Oi=e=>\"string\"==typeof(null==e?void 0:e.type)?e.type:ci(e),ki=ji({EphemeralObject:[\"content\"],EphemeralArray:[\"content\"]},pi),Ai=(e,t,n={})=>{let{keyMap:r=ki}=n,o=Zs(n,xi);return fi(e,t,ji({keyMap:r,nodeTypeGetter:Oi,nodePredicate:Dt,detectCycles:!1,deleteNodeSymbol:Symbol.for(\"delete-node\"),skipVisitingNodeSymbol:Symbol.for(\"skip-visiting-node\")},o))};Ai[Symbol.for(\"nodejs.util.promisify.custom\")]=async(e,t={})=>{let{keyMap:n=ki}=t,r=Zs(t,Si);return fi[Symbol.for(\"nodejs.util.promisify.custom\")](e,visitor,ji({keyMap:n,nodeTypeGetter:Oi,nodePredicate:Dt,detectCycles:!1,deleteNodeSymbol:Symbol.for(\"delete-node\"),skipVisitingNodeSymbol:Symbol.for(\"skip-visiting-node\")},r))};const Ci=class{constructor(e){Xo(this,\"type\",\"EphemeralArray\"),Xo(this,\"content\",[]),Xo(this,\"reference\",void 0),this.content=e,this.reference=[]}toReference(){return this.reference}toArray(){return this.reference.push(...this.content),this.reference}};const Pi=class{constructor(e){Xo(this,\"type\",\"EphemeralObject\"),Xo(this,\"content\",[]),Xo(this,\"reference\",void 0),this.content=e,this.reference={}}toReference(){return this.reference}toObject(){return Object.assign(this.reference,Object.fromEntries(this.content))}},Ni=Ys.init((function(){const e=new WeakMap;this.BooleanElement=function(e){return e.toValue()},this.NumberElement=function(e){return e.toValue()},this.StringElement=function(e){return e.toValue()},this.NullElement=function(){return null},this.ObjectElement={enter(t){if(e.has(t))return e.get(t).toReference();const n=new Pi(t.content);return e.set(t,n),n}},this.EphemeralObject={leave:e=>e.toObject()},this.MemberElement={enter:e=>[e.key,e.value]},this.ArrayElement={enter(t){if(e.has(t))return e.get(t).toReference();const n=new Ci(t.content);return e.set(t,n),n}},this.EphemeralArray={leave:e=>e.toArray()}})),Ii=(e,t=Vs)=>{if(Xs(e))try{return t.fromRefract(JSON.parse(e))}catch{}return $s(e)&&Hr(\"element\",e)?t.fromRefract(e):t.toElement(e)},Ti=e=>Ai(e,Ni());const Ri=hn(\"\");var Mi=cr(Zt(1,gr(cn,Xr(\"Number\"))),isFinite);var Di=Zt(1,Mi);var Fi=cr(ts(Number.isFinite)?Zt(1,$n(Number.isFinite,Number)):Di,vr(hn,[Math.floor,eo]));var Li=Zt(1,Fi);const Bi=ts(Number.isInteger)?Zt(1,$n(Number.isInteger,Number)):Li;var $i=Or((function(e,t){return gr(Io(\"\"),$r(as(e)),io(\"\"))(t)}));const qi=$i;class Ui extends Error{constructor(e){super(`Invalid $ref pointer \"${e}\". Pointers must begin with \"/\"`),this.name=this.constructor.name,this.message=`Invalid $ref pointer \"${e}\". Pointers must begin with \"/\"`,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(`Invalid $ref pointer \"${e}\". Pointers must begin with \"/\"`).stack}}class zi extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}const Vi=gr(Co(/~/g,\"~0\"),Co(/\\//g,\"~1\"),encodeURIComponent),Wi=gr(Co(/~1/g,\"/\"),Co(/~0/g,\"~\"),(e=>{try{return decodeURIComponent(e)}catch{return e}})),Ji=(e,t)=>{const n=(e=>{if(Ri(e))return[];if(!To(\"/\",e))throw new Ui(e);const t=gr(Io(\"/\"),Cn(Wi))(e);return mr(t)})(e);return n.reduce(((e,t)=>{if(bs(e)){if(!e.hasKey(t))throw new zi(`Evaluation failed on token: \"${t}\"`);return e.get(t)}if(ws(e)){if(!(t in e.content)||!Bi(Number(t)))throw new zi(`Evaluation failed on token: \"${t}\"`);return e.get(Number(t))}throw new zi(`Evaluation failed on token: \"${t}\"`)}),t)},Ki=e=>{const t=(e=>{const t=e.indexOf(\"#\");return-1!==t?e.substring(t):\"#\"})(e);return qi(\"#\",t)};class Hi extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"callback\"}}const Gi=Hi;class Zi extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"components\"}get schemas(){return this.get(\"schemas\")}set schemas(e){this.set(\"schemas\",e)}get responses(){return this.get(\"responses\")}set responses(e){this.set(\"responses\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get requestBodies(){return this.get(\"requestBodies\")}set requestBodies(e){this.set(\"requestBodies\",e)}get headers(){return this.get(\"headers\")}set headers(e){this.set(\"headers\",e)}get securitySchemes(){return this.get(\"securitySchemes\")}set securitySchemes(e){this.set(\"securitySchemes\",e)}get links(){return this.get(\"links\")}set links(e){this.set(\"links\",e)}get callbacks(){return this.get(\"callbacks\")}set callbacks(e){this.set(\"callbacks\",e)}}const Yi=Zi;class Xi extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"contact\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}get email(){return this.get(\"email\")}set email(e){this.set(\"email\",e)}}const Qi=Xi;class ea extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"discriminator\"}get propertyName(){return this.get(\"propertyName\")}set propertyName(e){this.set(\"propertyName\",e)}get mapping(){return this.get(\"mapping\")}set mapping(e){this.set(\"mapping\",e)}}const ta=ea;class na extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"encoding\"}get contentType(){return this.get(\"contentType\")}set contentType(e){this.set(\"contentType\",e)}get headers(){return this.get(\"headers\")}set headers(e){this.set(\"headers\",e)}get style(){return this.get(\"style\")}set style(e){this.set(\"style\",e)}get explode(){return this.get(\"explode\")}set explode(e){this.set(\"explode\",e)}get allowedReserved(){return this.get(\"allowedReserved\")}set allowedReserved(e){this.set(\"allowedReserved\",e)}}const ra=na;class oa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"example\"}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get value(){return this.get(\"value\")}set value(e){this.set(\"value\",e)}get externalValue(){return this.get(\"externalValue\")}set externalValue(e){this.set(\"externalValue\",e)}}const sa=oa;class ia extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"externalDocumentation\"}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}}const aa=ia;class la extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"header\"}get required(){return this.hasKey(\"required\")?this.get(\"required\"):new Pt.hh(!1)}set required(e){this.set(\"required\",e)}get deprecated(){return this.hasKey(\"deprecated\")?this.get(\"deprecated\"):new Pt.hh(!1)}set deprecated(e){this.set(\"deprecated\",e)}get allowEmptyValue(){return this.get(\"allowEmptyValue\")}set allowEmptyValue(e){this.set(\"allowEmptyValue\",e)}get style(){return this.get(\"style\")}set style(e){this.set(\"style\",e)}get explode(){return this.get(\"explode\")}set explode(e){this.set(\"explode\",e)}get allowReserved(){return this.get(\"allowReserved\")}set allowReserved(e){this.set(\"allowReserved\",e)}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}}Object.defineProperty(la.prototype,\"description\",{get(){return this.get(\"description\")},set(e){this.set(\"description\",e)},enumerable:!0});const ca=la;class ua extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"info\",this.classes.push(\"info\")}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get termsOfService(){return this.get(\"termsOfService\")}set termsOfService(e){this.set(\"termsOfService\",e)}get contact(){return this.get(\"contact\")}set contact(e){this.set(\"contact\",e)}get license(){return this.get(\"license\")}set license(e){this.set(\"license\",e)}get version(){return this.get(\"version\")}set version(e){this.set(\"version\",e)}}const pa=ua;class ha extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"license\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}}const fa=ha;class da extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"link\"}get operationRef(){return this.get(\"operationRef\")}set operationRef(e){this.set(\"operationRef\",e)}get operationId(){return this.get(\"operationId\")}set operationId(e){this.set(\"operationId\",e)}get operation(){var e,t;return ms(this.operationRef)?null===(e=this.operationRef)||void 0===e?void 0:e.meta.get(\"operation\"):ms(this.operationId)?null===(t=this.operationId)||void 0===t?void 0:t.meta.get(\"operation\"):void 0}set operation(e){this.set(\"operation\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}get requestBody(){return this.get(\"requestBody\")}set requestBody(e){this.set(\"requestBody\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get server(){return this.get(\"server\")}set server(e){this.set(\"server\",e)}}const ma=da;class ga extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"mediaType\"}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get encoding(){return this.get(\"encoding\")}set encoding(e){this.set(\"encoding\",e)}}const ya=ga;class va extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"oAuthFlow\"}get authorizationUrl(){return this.get(\"authorizationUrl\")}set authorizationUrl(e){this.set(\"authorizationUrl\",e)}get tokenUrl(){return this.get(\"tokenUrl\")}set tokenUrl(e){this.set(\"tokenUrl\",e)}get refreshUrl(){return this.get(\"refreshUrl\")}set refreshUrl(e){this.set(\"refreshUrl\",e)}get scopes(){return this.get(\"scopes\")}set scopes(e){this.set(\"scopes\",e)}}const ba=va;class wa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"oAuthFlows\"}get implicit(){return this.get(\"implicit\")}set implicit(e){this.set(\"implicit\",e)}get password(){return this.get(\"password\")}set password(e){this.set(\"password\",e)}get clientCredentials(){return this.get(\"clientCredentials\")}set clientCredentials(e){this.set(\"clientCredentials\",e)}get authorizationCode(){return this.get(\"authorizationCode\")}set authorizationCode(e){this.set(\"authorizationCode\",e)}}const Ea=wa;class xa extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"openapi\",this.classes.push(\"spec-version\"),this.classes.push(\"version\")}}const Sa=xa;class _a extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"openApi3_0\",this.classes.push(\"api\")}get openapi(){return this.get(\"openapi\")}set openapi(e){this.set(\"openapi\",e)}get info(){return this.get(\"info\")}set info(e){this.set(\"info\",e)}get servers(){return this.get(\"servers\")}set servers(e){this.set(\"servers\",e)}get paths(){return this.get(\"paths\")}set paths(e){this.set(\"paths\",e)}get components(){return this.get(\"components\")}set components(e){this.set(\"components\",e)}get security(){return this.get(\"security\")}set security(e){this.set(\"security\",e)}get tags(){return this.get(\"tags\")}set tags(e){this.set(\"tags\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}}const ja=_a;class Oa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"operation\"}get tags(){return this.get(\"tags\")}set tags(e){this.set(\"tags\",e)}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}set externalDocs(e){this.set(\"externalDocs\",e)}get externalDocs(){return this.get(\"externalDocs\")}get operationId(){return this.get(\"operationId\")}set operationId(e){this.set(\"operationId\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}get requestBody(){return this.get(\"requestBody\")}set requestBody(e){this.set(\"requestBody\",e)}get responses(){return this.get(\"responses\")}set responses(e){this.set(\"responses\",e)}get callbacks(){return this.get(\"callbacks\")}set callbacks(e){this.set(\"callbacks\",e)}get deprecated(){return this.hasKey(\"deprecated\")?this.get(\"deprecated\"):new Pt.hh(!1)}set deprecated(e){this.set(\"deprecated\",e)}get security(){return this.get(\"security\")}set security(e){this.set(\"security\",e)}get servers(){return this.get(\"severs\")}set servers(e){this.set(\"servers\",e)}}const ka=Oa;class Aa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"parameter\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get in(){return this.get(\"in\")}set in(e){this.set(\"in\",e)}get required(){return this.hasKey(\"required\")?this.get(\"required\"):new Pt.hh(!1)}set required(e){this.set(\"required\",e)}get deprecated(){return this.hasKey(\"deprecated\")?this.get(\"deprecated\"):new Pt.hh(!1)}set deprecated(e){this.set(\"deprecated\",e)}get allowEmptyValue(){return this.get(\"allowEmptyValue\")}set allowEmptyValue(e){this.set(\"allowEmptyValue\",e)}get style(){return this.get(\"style\")}set style(e){this.set(\"style\",e)}get explode(){return this.get(\"explode\")}set explode(e){this.set(\"explode\",e)}get allowReserved(){return this.get(\"allowReserved\")}set allowReserved(e){this.set(\"allowReserved\",e)}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}}Object.defineProperty(Aa.prototype,\"description\",{get(){return this.get(\"description\")},set(e){this.set(\"description\",e)},enumerable:!0});const Ca=Aa;class Pa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"pathItem\"}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get GET(){return this.get(\"get\")}set GET(e){this.set(\"GET\",e)}get PUT(){return this.get(\"put\")}set PUT(e){this.set(\"PUT\",e)}get POST(){return this.get(\"post\")}set POST(e){this.set(\"POST\",e)}get DELETE(){return this.get(\"delete\")}set DELETE(e){this.set(\"DELETE\",e)}get OPTIONS(){return this.get(\"options\")}set OPTIONS(e){this.set(\"OPTIONS\",e)}get HEAD(){return this.get(\"head\")}set HEAD(e){this.set(\"HEAD\",e)}get PATCH(){return this.get(\"patch\")}set PATCH(e){this.set(\"PATCH\",e)}get TRACE(){return this.get(\"trace\")}set TRACE(e){this.set(\"TRACE\",e)}get servers(){return this.get(\"servers\")}set servers(e){this.set(\"servers\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}}const Na=Pa;class Ia extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"paths\"}}const Ta=Ia;class Ra extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"reference\",this.classes.push(\"openapi-reference\")}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}}const Ma=Ra;class Da extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"requestBody\"}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}get required(){return this.hasKey(\"required\")?this.get(\"required\"):new Pt.hh(!1)}set required(e){this.set(\"required\",e)}}const Fa=Da;class La extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"response\"}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get headers(){return this.get(\"headers\")}set headers(e){this.set(\"headers\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}get links(){return this.get(\"links\")}set links(e){this.set(\"links\",e)}}const Ba=La;class $a extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"responses\"}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}}const qa=$a;class Ua extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"JSONSchemaDraft4\"}get idProp(){return this.get(\"id\")}set idProp(e){this.set(\"id\",e)}get $schema(){return this.get(\"$schema\")}set $schema(e){this.set(\"idProp\",e)}get multipleOf(){return this.get(\"multipleOf\")}set multipleOf(e){this.set(\"multipleOf\",e)}get maximum(){return this.get(\"maximum\")}set maximum(e){this.set(\"maximum\",e)}get exclusiveMaximum(){return this.get(\"exclusiveMaximum\")}set exclusiveMaximum(e){this.set(\"exclusiveMaximum\",e)}get minimum(){return this.get(\"minimum\")}set minimum(e){this.set(\"minimum\",e)}get exclusiveMinimum(){return this.get(\"exclusiveMinimum\")}set exclusiveMinimum(e){this.set(\"exclusiveMinimum\",e)}get maxLength(){return this.get(\"maxLength\")}set maxLength(e){this.set(\"maxLength\",e)}get minLength(){return this.get(\"minLength\")}set minLength(e){this.set(\"minLength\",e)}get pattern(){return this.get(\"pattern\")}set pattern(e){this.set(\"pattern\",e)}get additionalItems(){return this.get(\"additionalItems\")}set additionalItems(e){this.set(\"additionalItems\",e)}get items(){return this.get(\"items\")}set items(e){this.set(\"items\",e)}get maxItems(){return this.get(\"maxItems\")}set maxItems(e){this.set(\"maxItems\",e)}get minItems(){return this.get(\"minItems\")}set minItems(e){this.set(\"minItems\",e)}get uniqueItems(){return this.get(\"uniqueItems\")}set uniqueItems(e){this.set(\"uniqueItems\",e)}get maxProperties(){return this.get(\"maxProperties\")}set maxProperties(e){this.set(\"maxProperties\",e)}get minProperties(){return this.get(\"minProperties\")}set minProperties(e){this.set(\"minProperties\",e)}get required(){return this.get(\"required\")}set required(e){this.set(\"required\",e)}get properties(){return this.get(\"properties\")}set properties(e){this.set(\"properties\",e)}get additionalProperties(){return this.get(\"additionalProperties\")}set additionalProperties(e){this.set(\"additionalProperties\",e)}get patternProperties(){return this.get(\"patternProperties\")}set patternProperties(e){this.set(\"patternProperties\",e)}get dependencies(){return this.get(\"dependencies\")}set dependencies(e){this.set(\"dependencies\",e)}get enum(){return this.get(\"enum\")}set enum(e){this.set(\"enum\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get allOf(){return this.get(\"allOf\")}set allOf(e){this.set(\"allOf\",e)}get anyOf(){return this.get(\"anyOf\")}set anyOf(e){this.set(\"anyOf\",e)}get oneOf(){return this.get(\"oneOf\")}set oneOf(e){this.set(\"oneOf\",e)}get not(){return this.get(\"not\")}set not(e){this.set(\"not\",e)}get definitions(){return this.get(\"definitions\")}set definitions(e){this.set(\"definitions\",e)}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}get format(){return this.get(\"format\")}set format(e){this.set(\"format\",e)}get base(){return this.get(\"base\")}set base(e){this.set(\"base\",e)}get links(){return this.get(\"links\")}set links(e){this.set(\"links\",e)}get media(){return this.get(\"media\")}set media(e){this.set(\"media\",e)}get readOnly(){return this.get(\"readOnly\")}set readOnly(e){this.set(\"readOnly\",e)}}const za=Ua;class Va extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"JSONReference\",this.classes.push(\"json-reference\")}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}}const Wa=Va;class Ja extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"media\"}get binaryEncoding(){return this.get(\"binaryEncoding\")}set binaryEncoding(e){this.set(\"binaryEncoding\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}}const Ka=Ja;class Ha extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"linkDescription\"}get href(){return this.get(\"href\")}set href(e){this.set(\"href\",e)}get rel(){return this.get(\"rel\")}set rel(e){this.set(\"rel\",e)}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get targetSchema(){return this.get(\"targetSchema\")}set targetSchema(e){this.set(\"targetSchema\",e)}get mediaType(){return this.get(\"mediaType\")}set mediaType(e){this.set(\"mediaType\",e)}get method(){return this.get(\"method\")}set method(e){this.set(\"method\",e)}get encType(){return this.get(\"encType\")}set encType(e){this.set(\"encType\",e)}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}}const Ga=Ha,Za=(e,t)=>{const n=kr(e,t);return po((e=>{if($s(e)&&Hr(\"$ref\",e)&&_o(Xs,\"$ref\",e)){const t=uo([\"$ref\"],e),r=qi(\"#/\",t);return uo(r.split(\"/\"),n)}return $s(e)?Za(e,n):e}),e)},Ya=Ys({props:{element:null},methods:{copyMetaAndAttributes(e,t){Cs(e)&&t.meta.set(\"sourceMap\",e.meta.get(\"sourceMap\"))}}}),Xa=Ya,Qa=Ys(Xa,{methods:{enter(e){return this.element=e.clone(),ei}}});const el=Hn($o());function tl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const nl=e=>{if(ds(e))return`${e.element.charAt(0).toUpperCase()+e.element.slice(1)}Element`},rl=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tl(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({JSONSchemaDraft4Element:[\"content\"],JSONReferenceElement:[\"content\"],MediaElement:[\"content\"],LinkDescriptionElement:[\"content\"]},pi);function ol(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function sl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ol(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ol(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const il=Ys(Xa,{props:{specObj:null,passingOptionsNames:[\"specObj\"]},init({specObj:e=this.specObj}){this.specObj=e},methods:{retrievePassingOptions(){return Eo(this.passingOptionsNames,this)},retrieveFixedFields(e){return gr(uo([\"visitors\",...e,\"fixedFields\"]),ln)(this.specObj)},retrieveVisitor(e){return wo(ts,[\"visitors\",...e],this.specObj)?uo([\"visitors\",...e],this.specObj):uo([\"visitors\",...e,\"$visitor\"],this.specObj)},retrieveVisitorInstance(e,t={}){const n=this.retrievePassingOptions();return this.retrieveVisitor(e)(sl(sl({},n),t))},toRefractedElement(e,t,n={}){const r=this.retrieveVisitorInstance(e,n),o=Object.getPrototypeOf(r);return qo(this.fallbackVisitorPrototype)&&(this.fallbackVisitorPrototype=Object.getPrototypeOf(this.retrieveVisitorInstance([\"value\"]))),this.fallbackVisitorPrototype===o?t.clone():(fi(t,r,sl({keyMap:rl,nodeTypeGetter:nl},n)),r.element)}}}),al=Ys(il,{props:{specPath:el,ignoredFields:[]},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields}={}){this.specPath=e,this.ignoredFields=t},methods:{ObjectElement(e){const t=this.specPath(e),n=this.retrieveFixedFields(t);return e.forEach(((e,r,o)=>{if(ms(r)&&n.includes(r.toValue())&&!this.ignoredFields.includes(r.toValue())){const n=this.toRefractedElement([...t,\"fixedFields\",r.toValue()],e),s=new Pt.c6(r.clone(),n);this.copyMetaAndAttributes(o,s),s.classes.push(\"fixed-field\"),this.element.content.push(s)}else this.ignoredFields.includes(r.toValue())||this.element.content.push(o.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),ll=al,cl=Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"JSONSchema\"])},init(){this.element=new za}}),ul=Qa,pl=Qa,hl=Qa,fl=Qa,dl=Qa,ml=Qa,gl=Qa,yl=Qa,vl=Qa,bl=Qa,wl=Ys({props:{parent:null},init({parent:e=this.parent}){this.parent=e,this.passingOptionsNames=[...this.passingOptionsNames,\"parent\"]}}),El=e=>bs(e)&&e.hasKey(\"$ref\"),xl=Ys(il,wl,Qa,{methods:{ObjectElement(e){const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"];return this.element=this.toRefractedElement(t,e),ei},ArrayElement(e){return this.element=new Pt.ON,this.element.classes.push(\"json-schema-items\"),e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Sl=Qa,_l=Qa,jl=Qa,Ol=Qa,kl=Qa,Al=Ys(Qa,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-required\"),ei}}});const Cl=pr(Zt(1,cr(Ts,Ur(Ms,ts))));const Pl=pr(so);const Nl=Kn([Xs,Cl,Pl]),Il=Ys(il,{props:{fieldPatternPredicate:Mt,specPath:el,ignoredFields:[]},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields}={}){this.specPath=e,this.ignoredFields=t},methods:{ObjectElement(e){return e.forEach(((e,t,n)=>{if(!this.ignoredFields.includes(t.toValue())&&this.fieldPatternPredicate(t.toValue())){const r=this.specPath(e),o=this.toRefractedElement(r,e),s=new Pt.c6(t.clone(),o);this.copyMetaAndAttributes(n,s),s.classes.push(\"patterned-field\"),this.element.content.push(s)}else this.ignoredFields.includes(t.toValue())||this.element.content.push(n.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),Tl=Ys(Il,{props:{fieldPatternPredicate:Nl}}),Rl=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-properties\")}}),Ml=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-patternProperties\")}}),Dl=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-dependencies\")}}),Fl=Ys(Qa,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-enum\"),ei}}}),Ll=Ys(Qa,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei},ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei}}}),Bl=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-allOf\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),$l=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-anyOf\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),ql=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-oneOf\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Ul=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-definitions\")}}),zl=Qa,Vl=Qa,Wl=Qa,Jl=Qa,Kl=Qa,Hl=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-links\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=this.toRefractedElement([\"document\",\"objects\",\"LinkDescription\"],e);this.element.push(t)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Gl=Qa,Zl=Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"JSONReference\"])},init(){this.element=new Wa},methods:{ObjectElement(e){const t=ll.compose.methods.ObjectElement.call(this,e);return ms(this.element.$ref)&&this.element.classes.push(\"reference-element\"),t}}}),Yl=Ys(Qa,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}});const Xl=pr(rr);const Ql=cr(rs,Pl);function ec(e){return function(e){if(Array.isArray(e))return tc(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return tc(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tc(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tc(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var nc=gr(No(ur((function(e,t){return e.length>t.length}))),Zr,Tn(\"length\")),rc=Or((function(e,t,n){var r=n.apply(void 0,ec(e));return Xl(r)?Ao(r):t}));const oc=to(Ql,(function(e){var t=nc(e);return Zt(t,(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return Jn(rc(n),void 0,e)}))}),$o),sc=Ys(il,{props:{alternator:[]},methods:{enter(e){const t=this.alternator.map((({predicate:e,specPath:t})=>to(e,Hn(t),$o))),n=oc(t)(e);return this.element=this.toRefractedElement(n,e),ei}}}),ic=Ys(sc,{props:{alternator:[{predicate:El,specPath:[\"document\",\"objects\",\"JSONReference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"JSONSchema\"]}]}}),ac={visitors:{value:Qa,JSONSchemaOrJSONReferenceVisitor:ic,document:{objects:{JSONSchema:{$visitor:cl,fixedFields:{id:ul,$schema:pl,multipleOf:hl,maximum:fl,exclusiveMaximum:dl,minimum:ml,exclusiveMinimum:gl,maxLength:yl,minLength:vl,pattern:bl,additionalItems:ic,items:xl,maxItems:Sl,minItems:_l,uniqueItems:jl,maxProperties:Ol,minProperties:kl,required:Al,properties:Rl,additionalProperties:ic,patternProperties:Ml,dependencies:Dl,enum:Fl,type:Ll,allOf:Bl,anyOf:$l,oneOf:ql,not:ic,definitions:Ul,title:zl,description:Vl,default:Wl,format:Jl,base:Kl,links:Hl,media:{$ref:\"#/visitors/document/objects/Media\"},readOnly:Gl}},JSONReference:{$visitor:Zl,fixedFields:{$ref:Yl}},Media:{$visitor:Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"Media\"])},init(){this.element=new Ka}}),fixedFields:{binaryEncoding:Qa,type:Qa}},LinkDescription:{$visitor:Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"LinkDescription\"])},init(){this.element=new Ga}}),fixedFields:{href:Qa,rel:Qa,title:Qa,targetSchema:ic,mediaType:Qa,method:Qa,encType:Qa,schema:ic}}}}}},lc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof za||e(r)&&t(\"JSONSchemaDraft4\",r)&&n(\"object\",r))),cc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Wa||e(r)&&t(\"JSONReference\",r)&&n(\"object\",r))),uc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ka||e(r)&&t(\"media\",r)&&n(\"object\",r))),pc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ga||e(r)&&t(\"linkDescription\",r)&&n(\"object\",r))),hc={namespace:e=>{const{base:t}=e;return t.register(\"jSONSchemaDraft4\",za),t.register(\"jSONReference\",Wa),t.register(\"media\",Ka),t.register(\"linkDescription\",Ga),t}};function fc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?fc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):fc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const mc=()=>{const e=zs(hc);return{predicates:dc(dc({},i),{},{isStringElement:ms}),namespace:e}};function gc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const yc=(e,{specPath:t=[\"visitors\",\"document\",\"objects\",\"JSONSchema\",\"$visitor\"],plugins:n=[],specificationObj:r=ac}={})=>{const o=(0,Pt.Qc)(e),s=Za(r),i=is(t,[],s);return fi(o,i,{state:{specObj:s}}),di(i.element,n,{toolboxCreator:mc,visitorOptions:{keyMap:rl,nodeTypeGetter:nl}})},vc=e=>(t,n={})=>yc(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({specPath:e},n));za.refract=vc([\"visitors\",\"document\",\"objects\",\"JSONSchema\",\"$visitor\"]),Wa.refract=vc([\"visitors\",\"document\",\"objects\",\"JSONReference\",\"$visitor\"]),Ka.refract=vc([\"visitors\",\"document\",\"objects\",\"Media\",\"$visitor\"]),Ga.refract=vc([\"visitors\",\"document\",\"objects\",\"LinkDescription\",\"$visitor\"]);const bc=class extends za{constructor(e,t,n){super(e,t,n),this.element=\"schema\",this.classes.push(\"json-schema-draft-4\")}get additionalItems(){return this.get(\"additionalItems\")}set additionalItems(e){this.set(\"additionalItems\",e)}get items(){return this.get(\"items\")}set items(e){this.set(\"items\",e)}get additionalProperties(){return this.get(\"additionalProperties\")}set additionalProperties(e){this.set(\"additionalProperties\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get not(){return this.get(\"not\")}set not(e){this.set(\"not\",e)}get nullable(){return this.get(\"nullable\")}set nullable(e){this.set(\"nullable\",e)}get discriminator(){return this.get(\"discriminator\")}set discriminator(e){this.set(\"discriminator\",e)}get writeOnly(){return this.get(\"writeOnly\")}set writeOnly(e){this.set(\"writeOnly\",e)}get xml(){return this.get(\"xml\")}set xml(e){this.set(\"xml\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get deprecated(){return this.get(\"deprecated\")}set deprecated(e){this.set(\"deprecated\",e)}};class wc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"securityRequirement\"}}const Ec=wc;class xc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"securityScheme\"}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get in(){return this.get(\"in\")}set in(e){this.set(\"in\",e)}get scheme(){return this.get(\"scheme\")}set scheme(e){this.set(\"scheme\",e)}get bearerFormat(){return this.get(\"bearerFormat\")}set bearerFormat(e){this.set(\"bearerFormat\",e)}get flows(){return this.get(\"flows\")}set flows(e){this.set(\"flows\",e)}get openIdConnectUrl(){return this.get(\"openIdConnectUrl\")}set openIdConnectUrl(e){this.set(\"openIdConnectUrl\",e)}}const Sc=xc;class _c extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"server\"}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get variables(){return this.get(\"variables\")}set variables(e){this.set(\"variables\",e)}}const jc=_c;class Oc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"serverVariable\"}get enum(){return this.get(\"enum\")}set enum(e){this.set(\"enum\",e)}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}}const kc=Oc;class Ac extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"tag\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}}const Cc=Ac;class Pc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"xml\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get namespace(){return this.get(\"namespace\")}set namespace(e){this.set(\"namespace\",e)}get prefix(){return this.get(\"prefix\")}set prefix(e){this.set(\"prefix\",e)}get attribute(){return this.get(\"attribute\")}set attribute(e){this.set(\"attribute\",e)}get wrapped(){return this.get(\"wrapped\")}set wrapped(e){this.set(\"wrapped\",e)}}const Nc=Pc,Ic=Ys({props:{element:null},methods:{copyMetaAndAttributes(e,t){Cs(e)&&t.meta.set(\"sourceMap\",e.meta.get(\"sourceMap\"))}}}),Tc=Ic;function Rc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Mc=e=>{if(ds(e))return`${e.element.charAt(0).toUpperCase()+e.element.slice(1)}Element`},Dc=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Rc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Rc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({CallbackElement:[\"content\"],ComponentsElement:[\"content\"],ContactElement:[\"content\"],DiscriminatorElement:[\"content\"],Encoding:[\"content\"],Example:[\"content\"],ExternalDocumentationElement:[\"content\"],HeaderElement:[\"content\"],InfoElement:[\"content\"],LicenseElement:[\"content\"],MediaTypeElement:[\"content\"],OAuthFlowElement:[\"content\"],OAuthFlowsElement:[\"content\"],OpenApi3_0Element:[\"content\"],OperationElement:[\"content\"],ParameterElement:[\"content\"],PathItemElement:[\"content\"],PathsElement:[\"content\"],ReferenceElement:[\"content\"],RequestBodyElement:[\"content\"],ResponseElement:[\"content\"],ResponsesElement:[\"content\"],SchemaElement:[\"content\"],SecurityRequirementElement:[\"content\"],SecuritySchemeElement:[\"content\"],ServerElement:[\"content\"],ServerVariableElement:[\"content\"],TagElement:[\"content\"]},pi);function Fc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Lc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Fc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Fc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Bc=Ys(Tc,{props:{passingOptionsNames:[\"specObj\",\"openApiGenericElement\",\"openApiSemanticElement\"],specObj:null,openApiGenericElement:null,openApiSemanticElement:null},init({specObj:e=this.specObj,openApiGenericElement:t=this.openApiGenericElement,openApiSemanticElement:n=this.openApiSemanticElement}){this.specObj=e,this.openApiGenericElement=t,this.openApiSemanticElement=n},methods:{retrievePassingOptions(){return Eo(this.passingOptionsNames,this)},retrieveFixedFields(e){return gr(uo([\"visitors\",...e,\"fixedFields\"]),ln)(this.specObj)},retrieveVisitor(e){return wo(ts,[\"visitors\",...e],this.specObj)?uo([\"visitors\",...e],this.specObj):uo([\"visitors\",...e,\"$visitor\"],this.specObj)},retrieveVisitorInstance(e,t={}){const n=this.retrievePassingOptions();return this.retrieveVisitor(e)(Lc(Lc({},n),t))},toRefractedElement(e,t,n={}){const r=this.retrieveVisitorInstance(e,n),o=Object.getPrototypeOf(r);return qo(this.fallbackVisitorPrototype)&&(this.fallbackVisitorPrototype=Object.getPrototypeOf(this.retrieveVisitorInstance([\"value\"]))),this.fallbackVisitorPrototype===o?t.clone():(fi(t,r,Lc({keyMap:Dc,nodeTypeGetter:Mc},n)),r.element)}}}),$c=e=>bs(e)&&e.hasKey(\"openapi\")&&e.hasKey(\"info\"),qc=e=>bs(e)&&e.hasKey(\"name\")&&e.hasKey(\"in\"),Uc=e=>bs(e)&&e.hasKey(\"$ref\"),zc=e=>bs(e)&&e.hasKey(\"content\"),Vc=e=>bs(e)&&e.hasKey(\"description\"),Wc=bs,Jc=bs,Kc=e=>ms(e.key)&&To(\"x-\",e.key.toValue()),Hc=Ys(Bc,{props:{specPath:el,ignoredFields:[],canSupportSpecificationExtensions:!0,specificationExtensionPredicate:Kc},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields,canSupportSpecificationExtensions:n=this.canSupportSpecificationExtensions,specificationExtensionPredicate:r=this.specificationExtensionPredicate}={}){this.specPath=e,this.ignoredFields=t,this.canSupportSpecificationExtensions=n,this.specificationExtensionPredicate=r},methods:{ObjectElement(e){const t=this.specPath(e),n=this.retrieveFixedFields(t);return e.forEach(((e,r,o)=>{if(ms(r)&&n.includes(r.toValue())&&!this.ignoredFields.includes(r.toValue())){const n=this.toRefractedElement([...t,\"fixedFields\",r.toValue()],e),s=new Pt.c6(r.clone(),n);this.copyMetaAndAttributes(o,s),s.classes.push(\"fixed-field\"),this.element.content.push(s)}else if(this.canSupportSpecificationExtensions&&this.specificationExtensionPredicate(o)){const e=this.toRefractedElement([\"document\",\"extension\"],o);this.element.content.push(e)}else this.ignoredFields.includes(r.toValue())||this.element.content.push(o.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),Gc=Hc,Zc=Ys(Tc,{methods:{enter(e){return this.element=e.clone(),ei}}}),Yc=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OpenApi\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ja},methods:{ObjectElement(e){return this.unrefractedElement=e,Gc.compose.methods.ObjectElement.call(this,e)}}}),Xc=Ys(Bc,Zc,{methods:{StringElement(e){const t=new Sa(e.toValue());return this.copyMetaAndAttributes(e,t),this.element=t,ei}}}),Qc=Ys(Bc,{methods:{MemberElement(e){return this.element=e.clone(),this.element.classes.push(\"specification-extension\"),ei}}}),eu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Info\"]),canSupportSpecificationExtensions:!0},init(){this.element=new pa}}),tu=Zc,nu=Zc,ru=Zc,ou=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"api-version\"),this.element.classes.push(\"version\"),ei}}}),su=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Contact\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Qi}}),iu=Zc,au=Zc,lu=Zc,cu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"License\"]),canSupportSpecificationExtensions:!0},init(){this.element=new fa}}),uu=Zc,pu=Zc,hu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Link\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ma},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return(ms(this.element.operationId)||ms(this.element.operationRef))&&this.element.classes.push(\"reference-element\"),t}}}),fu=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),du=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),mu=Ys(Bc,{props:{fieldPatternPredicate:Mt,specPath:el,ignoredFields:[],canSupportSpecificationExtensions:!1,specificationExtensionPredicate:Kc},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields,canSupportSpecificationExtensions:n=this.canSupportSpecificationExtensions,specificationExtensionPredicate:r=this.specificationExtensionPredicate}={}){this.specPath=e,this.ignoredFields=t,this.canSupportSpecificationExtensions=n,this.specificationExtensionPredicate=r},methods:{ObjectElement(e){return e.forEach(((e,t,n)=>{if(this.canSupportSpecificationExtensions&&this.specificationExtensionPredicate(n)){const e=this.toRefractedElement([\"document\",\"extension\"],n);this.element.content.push(e)}else if(!this.ignoredFields.includes(t.toValue())&&this.fieldPatternPredicate(t.toValue())){const r=this.specPath(e),o=this.toRefractedElement(r,e),s=new Pt.c6(t.clone(),o);this.copyMetaAndAttributes(n,s),s.classes.push(\"patterned-field\"),this.element.content.push(s)}else this.ignoredFields.includes(t.toValue())||this.element.content.push(n.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),gu=mu,yu=Ys(gu,{props:{fieldPatternPredicate:Nl}});class vu extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(vu.primaryClass)}}Xo(vu,\"primaryClass\",\"link-parameters\");const bu=vu,wu=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new bu}}),Eu=Zc,xu=Zc,Su=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Server\"]),canSupportSpecificationExtensions:!0},init(){this.element=new jc}}),_u=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"server-url\"),ei}}}),ju=Zc;class Ou extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Ou.primaryClass)}}Xo(Ou,\"primaryClass\",\"servers\");const ku=Ou,Au=Ys(Bc,Zc,{init(){this.element=new ku},methods:{ArrayElement(e){return e.forEach((e=>{const t=Wc(e)?[\"document\",\"objects\",\"Server\"]:[\"value\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Cu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"ServerVariable\"]),canSupportSpecificationExtensions:!0},init(){this.element=new kc}}),Pu=Zc,Nu=Zc,Iu=Zc;class Tu extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Tu.primaryClass)}}Xo(Tu,\"primaryClass\",\"server-variables\");const Ru=Tu,Mu=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"ServerVariable\"])},init(){this.element=new Ru}}),Du=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"MediaType\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ya}}),Fu=Ys(Bc,{props:{alternator:[]},methods:{enter(e){const t=this.alternator.map((({predicate:e,specPath:t})=>to(e,Hn(t),$o))),n=oc(t)(e);return this.element=this.toRefractedElement(n,e),ei}}}),Lu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Gi||e(r)&&t(\"callback\",r)&&n(\"object\",r))),Bu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Yi||e(r)&&t(\"components\",r)&&n(\"object\",r))),$u=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Qi||e(r)&&t(\"contact\",r)&&n(\"object\",r))),qu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof sa||e(r)&&t(\"example\",r)&&n(\"object\",r))),Uu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof aa||e(r)&&t(\"externalDocumentation\",r)&&n(\"object\",r))),zu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ca||e(r)&&t(\"header\",r)&&n(\"object\",r))),Vu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof pa||e(r)&&t(\"info\",r)&&n(\"object\",r))),Wu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof fa||e(r)&&t(\"license\",r)&&n(\"object\",r))),Ju=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ma||e(r)&&t(\"link\",r)&&n(\"object\",r))),Ku=e=>{if(!Ju(e))return!1;if(!ms(e.operationRef))return!1;const t=e.operationRef.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},Hu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Sa||e(r)&&t(\"openapi\",r)&&n(\"string\",r))),Gu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n,hasClass:r})=>o=>o instanceof ja||e(o)&&t(\"openApi3_0\",o)&&n(\"object\",o)&&r(\"api\",o))),Zu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ka||e(r)&&t(\"operation\",r)&&n(\"object\",r))),Yu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ca||e(r)&&t(\"parameter\",r)&&n(\"object\",r))),Xu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Na||e(r)&&t(\"pathItem\",r)&&n(\"object\",r))),Qu=e=>{if(!Xu(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},ep=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ta||e(r)&&t(\"paths\",r)&&n(\"object\",r))),tp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ma||e(r)&&t(\"reference\",r)&&n(\"object\",r))),np=e=>{if(!tp(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},rp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Fa||e(r)&&t(\"requestBody\",r)&&n(\"object\",r))),op=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ba||e(r)&&t(\"response\",r)&&n(\"object\",r))),sp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof qa||e(r)&&t(\"responses\",r)&&n(\"object\",r))),ip=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof bc||e(r)&&t(\"schema\",r)&&n(\"object\",r))),ap=e=>vs(e)&&e.classes.includes(\"boolean-json-schema\"),lp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ec||e(r)&&t(\"securityRequirement\",r)&&n(\"object\",r))),cp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof jc||e(r)&&t(\"server\",r)&&n(\"object\",r))),up=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof kc||e(r)&&t(\"serverVariable\",r)&&n(\"object\",r))),pp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ya||e(r)&&t(\"mediaType\",r)&&n(\"object\",r))),hp=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Schema\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),fp=Zc,dp=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Example\"],canSupportSpecificationExtensions:!0},init(){this.element=new Pt.Sb,this.element.classes.push(\"examples\")},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"example\")})),t}}});class mp extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(mp.primaryClass),this.classes.push(\"examples\")}}Xo(mp,\"primaryClass\",\"media-type-examples\");const gp=mp,yp=Ys(dp,{init(){this.element=new gp}});class vp extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(vp.primaryClass)}}Xo(vp,\"primaryClass\",\"media-type-encoding\");const bp=vp,wp=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Encoding\"])},init(){this.element=new bp}}),Ep=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new Ec}});class xp extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(xp.primaryClass)}}Xo(xp,\"primaryClass\",\"security\");const Sp=xp,_p=Ys(Bc,Zc,{init(){this.element=new Sp},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"SecurityRequirement\"],e);this.element.push(t)}else this.element.push(e.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),jp=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Components\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Yi}}),Op=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Tag\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Cc}}),kp=Zc,Ap=Zc,Cp=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Reference\"]),canSupportSpecificationExtensions:!1},init(){this.element=new Ma},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return ms(this.element.$ref)&&this.element.classes.push(\"reference-element\"),t}}}),Pp=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),Np=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Parameter\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Ca},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.contentProp)&&this.element.contentProp.filter(pp).forEach(((e,t)=>{e.setMetaProperty(\"media-type\",t.toValue())})),t}}}),Ip=Zc,Tp=Zc,Rp=Zc,Mp=Zc,Dp=Zc,Fp=Zc,Lp=Zc,Bp=Zc,$p=Zc,qp=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Schema\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),Up=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Header\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ca}}),zp=Zc,Vp=Zc,Wp=Zc,Jp=Zc,Kp=Zc,Hp=Zc,Gp=Zc,Zp=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Schema\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),Yp=Zc;class Xp extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Xp.primaryClass),this.classes.push(\"examples\")}}Xo(Xp,\"primaryClass\",\"header-examples\");const Qp=Xp,eh=Ys(dp,{init(){this.element=new Qp}}),th=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"MediaType\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"content\")}});class nh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(nh.primaryClass),this.classes.push(\"content\")}}Xo(nh,\"primaryClass\",\"header-content\");const rh=nh,oh=Ys(th,{init(){this.element=new rh}}),sh=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"]),canSupportSpecificationExtensions:!0},init(){this.element=new bc}}),{items:ih}=ac.visitors.document.objects.JSONSchema.fixedFields,ah=Ys(ih,{methods:{ObjectElement(e){const t=ih.compose.methods.ObjectElement.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t},ArrayElement(e){return this.element=e.clone(),ei}}}),{properties:lh}=ac.visitors.document.objects.JSONSchema.fixedFields,ch=Ys(lh,{methods:{ObjectElement(e){const t=lh.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"schema\")})),t}}}),{type:uh}=ac.visitors.document.objects.JSONSchema.fixedFields,ph=Ys(uh,{methods:{ArrayElement(e){return this.element=e.clone(),ei}}}),hh=Zc,fh=Zc,dh=Zc,mh=Zc,{JSONSchemaOrJSONReferenceVisitor:gh}=ac.visitors,yh=Ys(gh,{methods:{ObjectElement(e){const t=gh.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),vh=Object.fromEntries(Object.entries(ac.visitors.document.objects.JSONSchema.fixedFields).map((([e,t])=>t===ac.visitors.JSONSchemaOrJSONReferenceVisitor?[e,yh]:[e,t]))),bh=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Discriminator\"]),canSupportSpecificationExtensions:!1},init(){this.element=new ta}}),wh=Zc;class Eh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Eh.primaryClass)}}Xo(Eh,\"primaryClass\",\"discriminator-mapping\");const xh=Eh,Sh=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new xh}}),_h=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"XML\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Nc}}),jh=Zc,Oh=Zc,kh=Zc,Ah=Zc,Ch=Zc,Ph=Zc;class Nh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Nh.primaryClass),this.classes.push(\"examples\")}}Xo(Nh,\"primaryClass\",\"parameter-examples\");const Ih=Nh,Th=Ys(dp,{init(){this.element=new Ih}});class Rh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Rh.primaryClass),this.classes.push(\"content\")}}Xo(Rh,\"primaryClass\",\"parameter-content\");const Mh=Rh,Dh=Ys(th,{init(){this.element=new Mh}});class Fh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Fh.primaryClass)}}Xo(Fh,\"primaryClass\",\"components-schemas\");const Lh=Fh,Bh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Schema\"]},init(){this.element=new Lh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"schema\")})),t}}});class $h extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push($h.primaryClass)}}Xo($h,\"primaryClass\",\"components-responses\");const qh=$h,Uh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Response\"]},init(){this.element=new qh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"response\")})),this.element.filter(op).forEach(((e,t)=>{e.setMetaProperty(\"http-status-code\",t.toValue())})),t}}}),zh=Uh;class Vh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Vh.primaryClass),this.classes.push(\"parameters\")}}Xo(Vh,\"primaryClass\",\"components-parameters\");const Wh=Vh,Jh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Parameter\"]},init(){this.element=new Wh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"parameter\")})),t}}});class Kh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Kh.primaryClass),this.classes.push(\"examples\")}}Xo(Kh,\"primaryClass\",\"components-examples\");const Hh=Kh,Gh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Example\"]},init(){this.element=new Hh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"example\")})),t}}});class Zh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Zh.primaryClass)}}Xo(Zh,\"primaryClass\",\"components-request-bodies\");const Yh=Zh,Xh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"RequestBody\"]},init(){this.element=new Yh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"requestBody\")})),t}}});class Qh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Qh.primaryClass)}}Xo(Qh,\"primaryClass\",\"components-headers\");const ef=Qh,tf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Header\"]},init(){this.element=new ef},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"header\")})),this.element.filter(zu).forEach(((e,t)=>{e.setMetaProperty(\"header-name\",t.toValue())})),t}}}),nf=tf;class rf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(rf.primaryClass)}}Xo(rf,\"primaryClass\",\"components-security-schemes\");const of=rf,sf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"SecurityScheme\"]},init(){this.element=new of},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"securityScheme\")})),t}}});class af extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(af.primaryClass)}}Xo(af,\"primaryClass\",\"components-links\");const lf=af,cf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Link\"]},init(){this.element=new lf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"link\")})),t}}});class uf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(uf.primaryClass)}}Xo(uf,\"primaryClass\",\"components-callbacks\");const pf=uf,hf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Callback\"]},init(){this.element=new pf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"callback\")})),t}}}),ff=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Example\"]),canSupportSpecificationExtensions:!0},init(){this.element=new sa},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return ms(this.element.externalValue)&&this.element.classes.push(\"reference-element\"),t}}}),df=Zc,mf=Zc,gf=Zc,yf=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),vf=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"ExternalDocumentation\"]),canSupportSpecificationExtensions:!0},init(){this.element=new aa}}),bf=Zc,wf=Zc,Ef=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Encoding\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ra},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.headers)&&this.element.headers.filter(zu).forEach(((e,t)=>{e.setMetaProperty(\"header-name\",t.toValue())})),t}}}),xf=Zc;class Sf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Sf.primaryClass)}}Xo(Sf,\"primaryClass\",\"encoding-headers\");const _f=Sf,jf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Header\"]},init(){this.element=new _f},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"header\")})),this.element.forEach(((e,t)=>{if(!zu(e))return;const n=t.toValue();e.setMetaProperty(\"headerName\",n)})),t}}}),Of=jf,kf=Zc,Af=Zc,Cf=Zc,Pf=Ys(gu,Zc,{props:{fieldPatternPredicate:Ro(/^\\/(?<path>.*)$/),specPath:Hn([\"document\",\"objects\",\"PathItem\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Ta},methods:{ObjectElement(e){const t=gu.compose.methods.ObjectElement.call(this,e);return this.element.filter(Xu).forEach(((e,t)=>{e.setMetaProperty(\"path\",t.clone())})),t}}}),Nf=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"RequestBody\"])},init(){this.element=new Fa},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.contentProp)&&this.element.contentProp.filter(pp).forEach(((e,t)=>{e.setMetaProperty(\"media-type\",t.toValue())})),t}}}),If=Zc;class Tf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Tf.primaryClass),this.classes.push(\"content\")}}Xo(Tf,\"primaryClass\",\"request-body-content\");const Rf=Tf,Mf=Ys(th,{init(){this.element=new Rf}}),Df=Zc,Ff=Ys(gu,Zc,{props:{fieldPatternPredicate:Ro(/{(?<expression>.*)}/),specPath:Hn([\"document\",\"objects\",\"PathItem\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Gi},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(Xu).forEach(((e,t)=>{e.setMetaProperty(\"runtime-expression\",t.toValue())})),t}}}),Lf=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Response\"])},init(){this.element=new Ba},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.contentProp)&&this.element.contentProp.filter(pp).forEach(((e,t)=>{e.setMetaProperty(\"media-type\",t.toValue())})),bs(this.element.headers)&&this.element.headers.filter(zu).forEach(((e,t)=>{e.setMetaProperty(\"header-name\",t.toValue())})),t}}}),Bf=Zc;class $f extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push($f.primaryClass)}}Xo($f,\"primaryClass\",\"response-headers\");const qf=$f,Uf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Header\"]},init(){this.element=new qf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"header\")})),this.element.forEach(((e,t)=>{if(!zu(e))return;const n=t.toValue();e.setMetaProperty(\"header-name\",n)})),t}}}),zf=Uf;class Vf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Vf.primaryClass),this.classes.push(\"content\")}}Xo(Vf,\"primaryClass\",\"response-content\");const Wf=Vf,Jf=Ys(th,{init(){this.element=new Wf}});class Kf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Kf.primaryClass)}}Xo(Kf,\"primaryClass\",\"response-links\");const Hf=Kf,Gf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Link\"]},init(){this.element=new Hf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"link\")})),t}}}),Zf=Ys(Gc,gu,{props:{specPathFixedFields:el,specPathPatternedFields:el},methods:{ObjectElement(e){const{specPath:t,ignoredFields:n}=this;try{this.specPath=this.specPathFixedFields;const t=this.retrieveFixedFields(this.specPath(e));this.ignoredFields=[...n,...Pr(e.keys(),t)],Gc.compose.methods.ObjectElement.call(this,e),this.specPath=this.specPathPatternedFields,this.ignoredFields=t,gu.compose.methods.ObjectElement.call(this,e)}catch(e){throw this.specPath=t,e}return ei}}}),Yf=Ys(Zf,Zc,{props:{specPathFixedFields:Hn([\"document\",\"objects\",\"Responses\"]),specPathPatternedFields:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Response\"],fieldPatternPredicate:Ro(new RegExp(`^(1XX|2XX|3XX|4XX|5XX|${ko(100,600).join(\"|\")})$`)),canSupportSpecificationExtensions:!0},init(){this.element=new qa},methods:{ObjectElement(e){const t=Zf.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"response\")})),this.element.filter(op).forEach(((e,t)=>{const n=t.clone();this.fieldPatternPredicate(n.toValue())&&e.setMetaProperty(\"http-status-code\",n)})),t}}}),Xf=Yf,Qf=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Response\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)?this.element.setMetaProperty(\"referenced-element\",\"response\"):op(this.element)&&this.element.setMetaProperty(\"http-status-code\",\"default\"),t}}}),ed=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Operation\"])},init(){this.element=new ka}});class td extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(td.primaryClass)}}Xo(td,\"primaryClass\",\"operation-tags\");const nd=td,rd=Ys(Zc,{init(){this.element=new nd},methods:{ArrayElement(e){return this.element=this.element.concat(e.clone()),ei}}}),od=Zc,sd=Zc,id=Zc;class ad extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(ad.primaryClass),this.classes.push(\"parameters\")}}Xo(ad,\"primaryClass\",\"operation-parameters\");const ld=ad,cd=Ys(Bc,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"parameters\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Parameter\"],n=this.toRefractedElement(t,e);tp(n)&&n.setMetaProperty(\"referenced-element\",\"parameter\"),this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),ud=Ys(cd,{init(){this.element=new ld}}),pd=Ys(Fu,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"RequestBody\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"requestBody\"),t}}});class hd extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(hd.primaryClass)}}Xo(hd,\"primaryClass\",\"operation-callbacks\");const fd=hd,dd=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Callback\"]},init(){this.element=new fd},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"callback\")})),t}}}),md=Zc;class gd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(gd.primaryClass),this.classes.push(\"security\")}}Xo(gd,\"primaryClass\",\"operation-security\");const yd=gd,vd=Ys(Bc,Zc,{init(){this.element=new yd},methods:{ArrayElement(e){return e.forEach((e=>{const t=bs(e)?[\"document\",\"objects\",\"SecurityRequirement\"]:[\"value\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}});class bd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(bd.primaryClass),this.classes.push(\"servers\")}}Xo(bd,\"primaryClass\",\"operation-servers\");const wd=bd,Ed=Ys(Au,{init(){this.element=new wd}}),xd=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"PathItem\"])},init(){this.element=new Na},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return this.element.filter(Zu).forEach(((e,t)=>{const n=t.clone();n.content=n.toValue().toUpperCase(),e.setMetaProperty(\"http-method\",n)})),ms(this.element.$ref)&&this.element.classes.push(\"reference-element\"),t}}}),Sd=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),_d=Zc,jd=Zc;class Od extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Od.primaryClass),this.classes.push(\"servers\")}}Xo(Od,\"primaryClass\",\"path-item-servers\");const kd=Od,Ad=Ys(Au,{init(){this.element=new kd}});class Cd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Cd.primaryClass),this.classes.push(\"parameters\")}}Xo(Cd,\"primaryClass\",\"path-item-parameters\");const Pd=Cd,Nd=Ys(cd,{init(){this.element=new Pd}}),Id=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"SecurityScheme\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Sc}}),Td=Zc,Rd=Zc,Md=Zc,Dd=Zc,Fd=Zc,Ld=Zc,Bd=Zc,$d=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OAuthFlows\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Ea}}),qd=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OAuthFlow\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ba}}),Ud=Zc,zd=Zc,Vd=Zc;class Wd extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Wd.primaryClass)}}Xo(Wd,\"primaryClass\",\"oauth-flow-scopes\");const Jd=Wd,Kd=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new Jd}});class Hd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Hd.primaryClass)}}Xo(Hd,\"primaryClass\",\"tags\");const Gd=Hd,Zd=Ys(Bc,Zc,{init(){this.element=new Gd},methods:{ArrayElement(e){return e.forEach((e=>{const t=Jc(e)?[\"document\",\"objects\",\"Tag\"]:[\"value\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}});function Yd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Xd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yd(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Qd={$visitor:Cp,fixedFields:{$ref:Pp}},em={$visitor:sh,fixedFields:Xd(Xd({},vh),{},{items:ah,properties:ch,type:ph,nullable:hh,discriminator:{$ref:\"#/visitors/document/objects/Discriminator\"},writeOnly:fh,xml:{$ref:\"#/visitors/document/objects/XML\"},externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},example:dh,deprecated:mh})},tm={visitors:{value:Zc,document:{objects:{OpenApi:{$visitor:Yc,fixedFields:{openapi:Xc,info:{$ref:\"#/visitors/document/objects/Info\"},servers:Au,paths:{$ref:\"#/visitors/document/objects/Paths\"},components:{$ref:\"#/visitors/document/objects/Components\"},security:_p,tags:Zd,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},Info:{$visitor:eu,fixedFields:{title:tu,description:nu,termsOfService:ru,contact:{$ref:\"#/visitors/document/objects/Contact\"},license:{$ref:\"#/visitors/document/objects/License\"},version:ou}},Contact:{$visitor:su,fixedFields:{name:iu,url:au,email:lu}},License:{$visitor:cu,fixedFields:{name:uu,url:pu}},Server:{$visitor:Su,fixedFields:{url:_u,description:ju,variables:Mu}},ServerVariable:{$visitor:Cu,fixedFields:{enum:Pu,default:Nu,description:Iu}},Components:{$visitor:jp,fixedFields:{schemas:Bh,responses:zh,parameters:Jh,examples:Gh,requestBodies:Xh,headers:nf,securitySchemes:sf,links:cf,callbacks:hf}},Paths:{$visitor:Pf},PathItem:{$visitor:xd,fixedFields:{$ref:Sd,summary:_d,description:jd,get:{$ref:\"#/visitors/document/objects/Operation\"},put:{$ref:\"#/visitors/document/objects/Operation\"},post:{$ref:\"#/visitors/document/objects/Operation\"},delete:{$ref:\"#/visitors/document/objects/Operation\"},options:{$ref:\"#/visitors/document/objects/Operation\"},head:{$ref:\"#/visitors/document/objects/Operation\"},patch:{$ref:\"#/visitors/document/objects/Operation\"},trace:{$ref:\"#/visitors/document/objects/Operation\"},servers:Ad,parameters:Nd}},Operation:{$visitor:ed,fixedFields:{tags:rd,summary:od,description:sd,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},operationId:id,parameters:ud,requestBody:pd,responses:{$ref:\"#/visitors/document/objects/Responses\"},callbacks:dd,deprecated:md,security:vd,servers:Ed}},ExternalDocumentation:{$visitor:vf,fixedFields:{description:bf,url:wf}},Parameter:{$visitor:Np,fixedFields:{name:Ip,in:Tp,description:Rp,required:Mp,deprecated:Dp,allowEmptyValue:Fp,style:Lp,explode:Bp,allowReserved:$p,schema:qp,example:Ph,examples:Th,content:Dh}},RequestBody:{$visitor:Nf,fixedFields:{description:If,content:Mf,required:Df}},MediaType:{$visitor:Du,fixedFields:{schema:hp,example:fp,examples:yp,encoding:wp}},Encoding:{$visitor:Ef,fixedFields:{contentType:xf,headers:Of,style:kf,explode:Af,allowReserved:Cf}},Responses:{$visitor:Xf,fixedFields:{default:Qf}},Response:{$visitor:Lf,fixedFields:{description:Bf,headers:zf,content:Jf,links:Gf}},Callback:{$visitor:Ff},Example:{$visitor:ff,fixedFields:{summary:df,description:mf,value:gf,externalValue:yf}},Link:{$visitor:hu,fixedFields:{operationRef:fu,operationId:du,parameters:wu,requestBody:Eu,description:xu,server:{$ref:\"#/visitors/document/objects/Server\"}}},Header:{$visitor:Up,fixedFields:{description:zp,required:Vp,deprecated:Wp,allowEmptyValue:Jp,style:Kp,explode:Hp,allowReserved:Gp,schema:Zp,example:Yp,examples:eh,content:oh}},Tag:{$visitor:Op,fixedFields:{name:kp,description:Ap,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},JSONReference:Qd,Reference:Qd,JSONSchema:em,Schema:em,LinkDescription:ac.visitors.document.objects.LinkDescription,Media:ac.visitors.document.objects.Media,Discriminator:{$visitor:bh,fixedFields:{propertyName:wh,mapping:Sh}},XML:{$visitor:_h,fixedFields:{name:jh,namespace:Oh,prefix:kh,attribute:Ah,wrapped:Ch}},SecurityScheme:{$visitor:Id,fixedFields:{type:Td,description:Rd,name:Md,in:Dd,scheme:Fd,bearerFormat:Ld,flows:{$ref:\"#/visitors/document/objects/OAuthFlows\"},openIdConnectUrl:Bd}},OAuthFlows:{$visitor:$d,fixedFields:{implicit:{$ref:\"#/visitors/document/objects/OAuthFlow\"},password:{$ref:\"#/visitors/document/objects/OAuthFlow\"},clientCredentials:{$ref:\"#/visitors/document/objects/OAuthFlow\"},authorizationCode:{$ref:\"#/visitors/document/objects/OAuthFlow\"}}},OAuthFlow:{$visitor:qd,fixedFields:{authorizationUrl:Ud,tokenUrl:zd,refreshUrl:Vd,scopes:Kd}},SecurityRequirement:{$visitor:Ep}},extension:{$visitor:Qc}}}},nm={namespace:e=>{const{base:t}=e;return t.register(\"callback\",Gi),t.register(\"components\",Yi),t.register(\"contact\",Qi),t.register(\"discriminator\",ta),t.register(\"encoding\",ra),t.register(\"example\",sa),t.register(\"externalDocumentation\",aa),t.register(\"header\",ca),t.register(\"info\",pa),t.register(\"license\",fa),t.register(\"link\",ma),t.register(\"mediaType\",ya),t.register(\"oAuthFlow\",ba),t.register(\"oAuthFlows\",Ea),t.register(\"openapi\",Sa),t.register(\"openApi3_0\",ja),t.register(\"operation\",ka),t.register(\"parameter\",Ca),t.register(\"pathItem\",Na),t.register(\"paths\",Ta),t.register(\"reference\",Ma),t.register(\"requestBody\",Fa),t.register(\"response\",Ba),t.register(\"responses\",qa),t.register(\"schema\",bc),t.register(\"securityRequirement\",Ec),t.register(\"securityScheme\",Sc),t.register(\"server\",jc),t.register(\"serverVariable\",kc),t.register(\"tag\",Cc),t.register(\"xml\",Nc),t}};function rm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function om(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rm(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rm(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const sm=()=>{const e=zs(nm);return{predicates:om(om(om({},a),l),{},{isStringElement:ms}),namespace:e}};function im(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const am=(e,{specPath:t=[\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"],plugins:n=[]}={})=>{const r=(0,Pt.Qc)(e),o=Za(tm),s=is(t,[],o);return fi(r,s,{state:{specObj:o}}),di(s.element,n,{toolboxCreator:sm,visitorOptions:{keyMap:Dc,nodeTypeGetter:Mc}})},lm=e=>(t,n={})=>am(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?im(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):im(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({specPath:e},n));Gi.refract=lm([\"visitors\",\"document\",\"objects\",\"Callback\",\"$visitor\"]),Yi.refract=lm([\"visitors\",\"document\",\"objects\",\"Components\",\"$visitor\"]),Qi.refract=lm([\"visitors\",\"document\",\"objects\",\"Contact\",\"$visitor\"]),sa.refract=lm([\"visitors\",\"document\",\"objects\",\"Example\",\"$visitor\"]),ta.refract=lm([\"visitors\",\"document\",\"objects\",\"Discriminator\",\"$visitor\"]),ra.refract=lm([\"visitors\",\"document\",\"objects\",\"Encoding\",\"$visitor\"]),aa.refract=lm([\"visitors\",\"document\",\"objects\",\"ExternalDocumentation\",\"$visitor\"]),ca.refract=lm([\"visitors\",\"document\",\"objects\",\"Header\",\"$visitor\"]),pa.refract=lm([\"visitors\",\"document\",\"objects\",\"Info\",\"$visitor\"]),fa.refract=lm([\"visitors\",\"document\",\"objects\",\"License\",\"$visitor\"]),ma.refract=lm([\"visitors\",\"document\",\"objects\",\"Link\",\"$visitor\"]),ya.refract=lm([\"visitors\",\"document\",\"objects\",\"MediaType\",\"$visitor\"]),ba.refract=lm([\"visitors\",\"document\",\"objects\",\"OAuthFlow\",\"$visitor\"]),Ea.refract=lm([\"visitors\",\"document\",\"objects\",\"OAuthFlows\",\"$visitor\"]),Sa.refract=lm([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"fixedFields\",\"openapi\"]),ja.refract=lm([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"]),ka.refract=lm([\"visitors\",\"document\",\"objects\",\"Operation\",\"$visitor\"]),Ca.refract=lm([\"visitors\",\"document\",\"objects\",\"Parameter\",\"$visitor\"]),Na.refract=lm([\"visitors\",\"document\",\"objects\",\"PathItem\",\"$visitor\"]),Ta.refract=lm([\"visitors\",\"document\",\"objects\",\"Paths\",\"$visitor\"]),Ma.refract=lm([\"visitors\",\"document\",\"objects\",\"Reference\",\"$visitor\"]),Fa.refract=lm([\"visitors\",\"document\",\"objects\",\"RequestBody\",\"$visitor\"]),Ba.refract=lm([\"visitors\",\"document\",\"objects\",\"Response\",\"$visitor\"]),qa.refract=lm([\"visitors\",\"document\",\"objects\",\"Responses\",\"$visitor\"]),bc.refract=lm([\"visitors\",\"document\",\"objects\",\"Schema\",\"$visitor\"]),Ec.refract=lm([\"visitors\",\"document\",\"objects\",\"SecurityRequirement\",\"$visitor\"]),Sc.refract=lm([\"visitors\",\"document\",\"objects\",\"SecurityScheme\",\"$visitor\"]),jc.refract=lm([\"visitors\",\"document\",\"objects\",\"Server\",\"$visitor\"]),kc.refract=lm([\"visitors\",\"document\",\"objects\",\"ServerVariable\",\"$visitor\"]),Cc.refract=lm([\"visitors\",\"document\",\"objects\",\"Tag\",\"$visitor\"]),Nc.refract=lm([\"visitors\",\"document\",\"objects\",\"XML\",\"$visitor\"]);const cm=class extends Gi{};const um=class extends Yi{get pathItems(){return this.get(\"pathItems\")}set pathItems(e){this.set(\"pathItems\",e)}};const pm=class extends Qi{};const hm=class extends ta{};const fm=class extends ra{};const dm=class extends sa{};const mm=class extends aa{};const gm=class extends ca{get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}};const ym=class extends pa{get license(){return this.get(\"license\")}set license(e){this.set(\"license\",e)}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}};class vm extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"jsonSchemaDialect\"}}Xo(vm,\"default\",new vm(\"https://spec.openapis.org/oas/3.1/dialect/base\"));const bm=vm;const wm=class extends fa{get identifier(){return this.get(\"identifier\")}set identifier(e){this.set(\"identifier\",e)}};const Em=class extends ma{};const xm=class extends ya{get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}};const Sm=class extends ba{};const _m=class extends Ea{};const jm=class extends Sa{};class Om extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"openApi3_1\",this.classes.push(\"api\")}get openapi(){return this.get(\"openapi\")}set openapi(e){this.set(\"openapi\",e)}get info(){return this.get(\"info\")}set info(e){this.set(\"info\",e)}get jsonSchemaDialect(){return this.get(\"jsonSchemaDialect\")}set jsonSchemaDialect(e){this.set(\"jsonSchemaDialect\",e)}get servers(){return this.get(\"servers\")}set servers(e){this.set(\"servers\",e)}get paths(){return this.get(\"paths\")}set paths(e){this.set(\"paths\",e)}get components(){return this.get(\"components\")}set components(e){this.set(\"components\",e)}get security(){return this.get(\"security\")}set security(e){this.set(\"security\",e)}get tags(){return this.get(\"tags\")}set tags(e){this.set(\"tags\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}get webhooks(){return this.get(\"webhooks\")}set webhooks(e){this.set(\"webhooks\",e)}}const km=Om;const Am=class extends ka{get requestBody(){return this.get(\"requestBody\")}set requestBody(e){this.set(\"requestBody\",e)}};const Cm=class extends Ca{get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}};const Pm=class extends Na{get GET(){return this.get(\"get\")}set GET(e){this.set(\"GET\",e)}get PUT(){return this.get(\"put\")}set PUT(e){this.set(\"PUT\",e)}get POST(){return this.get(\"post\")}set POST(e){this.set(\"POST\",e)}get DELETE(){return this.get(\"delete\")}set DELETE(e){this.set(\"DELETE\",e)}get OPTIONS(){return this.get(\"options\")}set OPTIONS(e){this.set(\"OPTIONS\",e)}get HEAD(){return this.get(\"head\")}set HEAD(e){this.set(\"HEAD\",e)}get PATCH(){return this.get(\"patch\")}set PATCH(e){this.set(\"PATCH\",e)}get TRACE(){return this.get(\"trace\")}set TRACE(e){this.set(\"TRACE\",e)}};const Nm=class extends Ta{};class Im extends Ma{}Object.defineProperty(Im.prototype,\"description\",{get(){return this.get(\"description\")},set(e){this.set(\"description\",e)},enumerable:!0}),Object.defineProperty(Im.prototype,\"summary\",{get(){return this.get(\"summary\")},set(e){this.set(\"summary\",e)},enumerable:!0});const Tm=Im;const Rm=class extends Fa{};const Mm=class extends Ba{};const Dm=class extends qa{};class Fm extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"schema\"}get $schema(){return this.get(\"$schema\")}set $schema(e){this.set(\"$schema\",e)}get $vocabulary(){return this.get(\"$vocabulary\")}set $vocabulary(e){this.set(\"$vocabulary\",e)}get $id(){return this.get(\"$id\")}set $id(e){this.set(\"$id\",e)}get $anchor(){return this.get(\"$anchor\")}set $anchor(e){this.set(\"$anchor\",e)}get $dynamicAnchor(){return this.get(\"$dynamicAnchor\")}set $dynamicAnchor(e){this.set(\"$dynamicAnchor\",e)}get $dynamicRef(){return this.get(\"$dynamicRef\")}set $dynamicRef(e){this.set(\"$dynamicRef\",e)}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}get $defs(){return this.get(\"$defs\")}set $defs(e){this.set(\"$defs\",e)}get $comment(){return this.get(\"$comment\")}set $comment(e){this.set(\"$comment\",e)}get allOf(){return this.get(\"allOf\")}set allOf(e){this.set(\"allOf\",e)}get anyOf(){return this.get(\"anyOf\")}set anyOf(e){this.set(\"anyOf\",e)}get oneOf(){return this.get(\"oneOf\")}set oneOf(e){this.set(\"oneOf\",e)}get not(){return this.get(\"not\")}set not(e){this.set(\"not\",e)}get if(){return this.get(\"if\")}set if(e){this.set(\"if\",e)}get then(){return this.get(\"then\")}set then(e){this.set(\"then\",e)}get else(){return this.get(\"else\")}set else(e){this.set(\"else\",e)}get dependentSchemas(){return this.get(\"dependentSchemas\")}set dependentSchemas(e){this.set(\"dependentSchemas\",e)}get prefixItems(){return this.get(\"prefixItems\")}set prefixItems(e){this.set(\"prefixItems\",e)}get items(){return this.get(\"items\")}set items(e){this.set(\"items\",e)}get containsProp(){return this.get(\"contains\")}set containsProp(e){this.set(\"contains\",e)}get properties(){return this.get(\"properties\")}set properties(e){this.set(\"properties\",e)}get patternProperties(){return this.get(\"patternProperties\")}set patternProperties(e){this.set(\"patternProperties\",e)}get additionalProperties(){return this.get(\"additionalProperties\")}set additionalProperties(e){this.set(\"additionalProperties\",e)}get propertyNames(){return this.get(\"propertyNames\")}set propertyNames(e){this.set(\"propertyNames\",e)}get unevaluatedItems(){return this.get(\"unevaluatedItems\")}set unevaluatedItems(e){this.set(\"unevaluatedItems\",e)}get unevaluatedProperties(){return this.get(\"unevaluatedProperties\")}set unevaluatedProperties(e){this.set(\"unevaluatedProperties\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get enum(){return this.get(\"enum\")}set enum(e){this.set(\"enum\",e)}get const(){return this.get(\"const\")}set const(e){this.set(\"const\",e)}get multipleOf(){return this.get(\"multipleOf\")}set multipleOf(e){this.set(\"multipleOf\",e)}get maximum(){return this.get(\"maximum\")}set maximum(e){this.set(\"maximum\",e)}get exclusiveMaximum(){return this.get(\"exclusiveMaximum\")}set exclusiveMaximum(e){this.set(\"exclusiveMaximum\",e)}get minimum(){return this.get(\"minimum\")}set minimum(e){this.set(\"minimum\",e)}get exclusiveMinimum(){return this.get(\"exclusiveMinimum\")}set exclusiveMinimum(e){this.set(\"exclusiveMinimum\",e)}get maxLength(){return this.get(\"maxLength\")}set maxLength(e){this.set(\"maxLength\",e)}get minLength(){return this.get(\"minLength\")}set minLength(e){this.set(\"minLength\",e)}get pattern(){return this.get(\"pattern\")}set pattern(e){this.set(\"pattern\",e)}get maxItems(){return this.get(\"maxItems\")}set maxItems(e){this.set(\"maxItems\",e)}get minItems(){return this.get(\"minItems\")}set minItems(e){this.set(\"minItems\",e)}get uniqueItems(){return this.get(\"uniqueItems\")}set uniqueItems(e){this.set(\"uniqueItems\",e)}get maxContains(){return this.get(\"maxContains\")}set maxContains(e){this.set(\"maxContains\",e)}get minContains(){return this.get(\"minContains\")}set minContains(e){this.set(\"minContains\",e)}get maxProperties(){return this.get(\"maxProperties\")}set maxProperties(e){this.set(\"maxProperties\",e)}get minProperties(){return this.get(\"minProperties\")}set minProperties(e){this.set(\"minProperties\",e)}get required(){return this.get(\"required\")}set required(e){this.set(\"required\",e)}get dependentRequired(){return this.get(\"dependentRequired\")}set dependentRequired(e){this.set(\"dependentRequired\",e)}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}get deprecated(){return this.get(\"deprecated\")}set deprecated(e){this.set(\"deprecated\",e)}get readOnly(){return this.get(\"readOnly\")}set readOnly(e){this.set(\"readOnly\",e)}get writeOnly(){return this.get(\"writeOnly\")}set writeOnly(e){this.set(\"writeOnly\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get format(){return this.get(\"format\")}set format(e){this.set(\"format\",e)}get contentEncoding(){return this.get(\"contentEncoding\")}set contentEncoding(e){this.set(\"contentEncoding\",e)}get contentMediaType(){return this.get(\"contentMediaType\")}set contentMediaType(e){this.set(\"contentMediaType\",e)}get contentSchema(){return this.get(\"contentSchema\")}set contentSchema(e){this.set(\"contentSchema\",e)}get discriminator(){return this.get(\"discriminator\")}set discriminator(e){this.set(\"discriminator\",e)}get xml(){return this.get(\"xml\")}set xml(e){this.set(\"xml\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}}const Lm=Fm;const Bm=class extends Ec{};const $m=class extends Sc{};const qm=class extends jc{};const Um=class extends kc{};const zm=class extends Cc{};const Vm=class extends Nc{},Wm=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OpenApi\"]),canSupportSpecificationExtensions:!0},init(){this.element=new km,this.openApiSemanticElement=this.element},methods:{ObjectElement(e){return this.openApiGenericElement=e,Gc.compose.methods.ObjectElement.call(this,e)}}}),{visitors:{document:{objects:{Info:{$visitor:Jm}}}}}=tm,Km=Ys(Jm,{init(){this.element=new ym}}),Hm=Zc,{visitors:{document:{objects:{Contact:{$visitor:Gm}}}}}=tm,Zm=Ys(Gm,{init(){this.element=new pm}}),{visitors:{document:{objects:{License:{$visitor:Ym}}}}}=tm,Xm=Ys(Ym,{init(){this.element=new wm}}),Qm=Zc,{visitors:{document:{objects:{Link:{$visitor:eg}}}}}=tm,tg=Ys(eg,{init(){this.element=new Em}}),ng=Ys(Bc,Zc,{methods:{StringElement(e){const t=new bm(e.toValue());return this.copyMetaAndAttributes(e,t),this.element=t,ei}}}),{visitors:{document:{objects:{Server:{$visitor:rg}}}}}=tm,og=Ys(rg,{init(){this.element=new qm}}),{visitors:{document:{objects:{ServerVariable:{$visitor:sg}}}}}=tm,ig=Ys(sg,{init(){this.element=new Um}}),{visitors:{document:{objects:{MediaType:{$visitor:ag}}}}}=tm,lg=Ys(ag,{init(){this.element=new xm}}),{visitors:{document:{objects:{SecurityRequirement:{$visitor:cg}}}}}=tm,ug=Ys(cg,{init(){this.element=new Bm}}),{visitors:{document:{objects:{Components:{$visitor:pg}}}}}=tm,hg=Ys(pg,{init(){this.element=new um}}),{visitors:{document:{objects:{Tag:{$visitor:fg}}}}}=tm,dg=Ys(fg,{init(){this.element=new zm}}),{visitors:{document:{objects:{Reference:{$visitor:mg}}}}}=tm,gg=Ys(mg,{init(){this.element=new Tm}}),yg=Zc,vg=Zc,{visitors:{document:{objects:{Parameter:{$visitor:bg}}}}}=tm,wg=Ys(bg,{init(){this.element=new Cm}}),{visitors:{document:{objects:{Header:{$visitor:Eg}}}}}=tm,xg=Ys(Eg,{init(){this.element=new gm}}),Sg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof cm||e(r)&&t(\"callback\",r)&&n(\"object\",r))),_g=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof um||e(r)&&t(\"components\",r)&&n(\"object\",r))),jg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof pm||e(r)&&t(\"contact\",r)&&n(\"object\",r))),Og=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof dm||e(r)&&t(\"example\",r)&&n(\"object\",r))),kg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof mm||e(r)&&t(\"externalDocumentation\",r)&&n(\"object\",r))),Ag=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof gm||e(r)&&t(\"header\",r)&&n(\"object\",r))),Cg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ym||e(r)&&t(\"info\",r)&&n(\"object\",r))),Pg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof bm||e(r)&&t(\"jsonSchemaDialect\",r)&&n(\"string\",r))),Ng=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof wm||e(r)&&t(\"license\",r)&&n(\"object\",r))),Ig=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Em||e(r)&&t(\"link\",r)&&n(\"object\",r))),Tg=e=>{if(!Ig(e))return!1;if(!ms(e.operationRef))return!1;const t=e.operationRef.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},Rg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof jm||e(r)&&t(\"openapi\",r)&&n(\"string\",r))),Mg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n,hasClass:r})=>o=>o instanceof km||e(o)&&t(\"openApi3_1\",o)&&n(\"object\",o)&&r(\"api\",o))),Dg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Am||e(r)&&t(\"operation\",r)&&n(\"object\",r))),Fg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Cm||e(r)&&t(\"parameter\",r)&&n(\"object\",r))),Lg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pm||e(r)&&t(\"pathItem\",r)&&n(\"object\",r))),Bg=e=>{if(!Lg(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},$g=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Nm||e(r)&&t(\"paths\",r)&&n(\"object\",r))),qg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Tm||e(r)&&t(\"reference\",r)&&n(\"object\",r))),Ug=e=>{if(!qg(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},zg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Rm||e(r)&&t(\"requestBody\",r)&&n(\"object\",r))),Vg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Mm||e(r)&&t(\"response\",r)&&n(\"object\",r))),Wg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Dm||e(r)&&t(\"responses\",r)&&n(\"object\",r))),Jg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Lm||e(r)&&t(\"schema\",r)&&n(\"object\",r))),Kg=e=>vs(e)&&e.classes.includes(\"boolean-json-schema\"),Hg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Bm||e(r)&&t(\"securityRequirement\",r)&&n(\"object\",r))),Gg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof qm||e(r)&&t(\"server\",r)&&n(\"object\",r))),Zg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Um||e(r)&&t(\"serverVariable\",r)&&n(\"object\",r))),Yg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof xm||e(r)&&t(\"mediaType\",r)&&n(\"object\",r))),Xg=Ys({props:{parent:null},init({parent:e=this.parent}){this.parent=e,this.passingOptionsNames=[...this.passingOptionsNames,\"parent\"]}}),Qg=Ys(Gc,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"]),canSupportSpecificationExtensions:!0},init(){const e=()=>{let e;return e=null!==this.openApiSemanticElement&&Pg(this.openApiSemanticElement.jsonSchemaDialect)?this.openApiSemanticElement.jsonSchemaDialect.toValue():null!==this.openApiGenericElement&&ms(this.openApiGenericElement.get(\"jsonSchemaDialect\"))?this.openApiGenericElement.get(\"jsonSchemaDialect\").toValue():bm.default.toValue(),e},t=t=>{if(Is(this.parent)&&!ms(t.get(\"$schema\")))this.element.setMetaProperty(\"inherited$schema\",e());else if(Jg(this.parent)&&!ms(t.get(\"$schema\"))){var n,r;const e=kr(null===(n=this.parent.meta.get(\"inherited$schema\"))||void 0===n?void 0:n.toValue(),null===(r=this.parent.$schema)||void 0===r?void 0:r.toValue());this.element.setMetaProperty(\"inherited$schema\",e)}},n=e=>{var t;const n=null!==this.parent?this.parent.getMetaProperty(\"inherited$id\",[]).clone():new Pt.ON,r=null===(t=e.get(\"$id\"))||void 0===t?void 0:t.toValue();Nl(r)&&n.push(r),this.element.setMetaProperty(\"inherited$id\",n)};this.ObjectElement=function(e){this.element=new Lm,t(e),n(e),this.parent=this.element;const r=Gc.compose.methods.ObjectElement.call(this,e);return ms(this.element.$ref)&&(this.element.classes.push(\"reference-element\"),this.element.setMetaProperty(\"referenced-element\",\"schema\")),r},this.BooleanElement=function(e){return this.element=e.clone(),this.element.classes.push(\"boolean-json-schema\"),ei}}}),ey=Zc,ty=Ys(Zc,{methods:{ObjectElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-$vocabulary\"),ei}}}),ny=Zc,ry=Zc,oy=Zc,sy=Zc,iy=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),ay=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-$defs\")}}),ly=Zc,cy=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-allOf\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),uy=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-anyOf\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),py=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-oneOf\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),hy=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-dependentSchemas\")}}),fy=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-prefixItems\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),dy=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-properties\")}}),my=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-patternProperties\")}}),gy=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei},ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei}}}),yy=Ys(Zc,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-enum\"),ei}}}),vy=Zc,by=Zc,wy=Zc,Ey=Zc,xy=Zc,Sy=Zc,_y=Zc,jy=Zc,Oy=Zc,ky=Zc,Ay=Zc,Cy=Zc,Py=Zc,Ny=Zc,Iy=Zc,Ty=Zc,Ry=Ys(Zc,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-required\"),ei}}}),My=Ys(Zc,{methods:{ObjectElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-dependentRequired\"),ei}}}),Dy=Zc,Fy=Zc,Ly=Zc,By=Zc,$y=Zc,qy=Zc,Uy=Ys(Zc,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-examples\"),ei}}}),zy=Zc,Vy=Zc,Wy=Zc,Jy=Zc,{visitors:{document:{objects:{Discriminator:{$visitor:Ky}}}}}=tm,Hy=Ys(Ky,{props:{canSupportSpecificationExtensions:!0},init(){this.element=new hm}}),{visitors:{document:{objects:{XML:{$visitor:Gy}}}}}=tm,Zy=Ys(Gy,{init(){this.element=new Vm}}),Yy=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Lh}});class Xy extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Xy.primaryClass)}}Xo(Xy,\"primaryClass\",\"components-path-items\");const Qy=Xy,ev=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"PathItem\"]},init(){this.element=new Qy},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(qg).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"pathItem\")})),t}}}),{visitors:{document:{objects:{Example:{$visitor:tv}}}}}=tm,nv=Ys(tv,{init(){this.element=new dm}}),{visitors:{document:{objects:{ExternalDocumentation:{$visitor:rv}}}}}=tm,ov=Ys(rv,{init(){this.element=new mm}}),{visitors:{document:{objects:{Encoding:{$visitor:sv}}}}}=tm,iv=Ys(sv,{init(){this.element=new fm}}),{visitors:{document:{objects:{Paths:{$visitor:av}}}}}=tm,lv=Ys(av,{init(){this.element=new Nm}}),{visitors:{document:{objects:{RequestBody:{$visitor:cv}}}}}=tm,uv=Ys(cv,{init(){this.element=new Rm}}),{visitors:{document:{objects:{Callback:{$visitor:pv}}}}}=tm,hv=Ys(pv,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"PathItem\"]},init(){this.element=new cm},methods:{ObjectElement(e){const t=pv.compose.methods.ObjectElement.call(this,e);return this.element.filter(qg).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"pathItem\")})),t}}}),{visitors:{document:{objects:{Response:{$visitor:fv}}}}}=tm,dv=Ys(fv,{init(){this.element=new Mm}}),{visitors:{document:{objects:{Responses:{$visitor:mv}}}}}=tm,gv=Ys(mv,{init(){this.element=new Dm}}),{visitors:{document:{objects:{Operation:{$visitor:yv}}}}}=tm,vv=Ys(yv,{init(){this.element=new Am}}),{visitors:{document:{objects:{PathItem:{$visitor:bv}}}}}=tm,wv=Ys(bv,{init(){this.element=new Pm}}),{visitors:{document:{objects:{SecurityScheme:{$visitor:Ev}}}}}=tm,xv=Ys(Ev,{init(){this.element=new $m}}),{visitors:{document:{objects:{OAuthFlows:{$visitor:Sv}}}}}=tm,_v=Ys(Sv,{init(){this.element=new _m}}),{visitors:{document:{objects:{OAuthFlow:{$visitor:jv}}}}}=tm,Ov=Ys(jv,{init(){this.element=new Sm}});class kv extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(kv.primaryClass)}}Xo(kv,\"primaryClass\",\"webhooks\");const Av=kv,Cv=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"PathItem\"]},init(){this.element=new Av},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(qg).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"pathItem\")})),this.element.filter(Lg).forEach(((e,t)=>{e.setMetaProperty(\"webhook-name\",t.toValue())})),t}}}),Pv={visitors:{value:tm.visitors.value,document:{objects:{OpenApi:{$visitor:Wm,fixedFields:{openapi:tm.visitors.document.objects.OpenApi.fixedFields.openapi,info:{$ref:\"#/visitors/document/objects/Info\"},jsonSchemaDialect:ng,servers:tm.visitors.document.objects.OpenApi.fixedFields.servers,paths:{$ref:\"#/visitors/document/objects/Paths\"},webhooks:Cv,components:{$ref:\"#/visitors/document/objects/Components\"},security:tm.visitors.document.objects.OpenApi.fixedFields.security,tags:tm.visitors.document.objects.OpenApi.fixedFields.tags,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},Info:{$visitor:Km,fixedFields:{title:tm.visitors.document.objects.Info.fixedFields.title,description:tm.visitors.document.objects.Info.fixedFields.description,summary:Hm,termsOfService:tm.visitors.document.objects.Info.fixedFields.termsOfService,contact:{$ref:\"#/visitors/document/objects/Contact\"},license:{$ref:\"#/visitors/document/objects/License\"},version:tm.visitors.document.objects.Info.fixedFields.version}},Contact:{$visitor:Zm,fixedFields:{name:tm.visitors.document.objects.Contact.fixedFields.name,url:tm.visitors.document.objects.Contact.fixedFields.url,email:tm.visitors.document.objects.Contact.fixedFields.email}},License:{$visitor:Xm,fixedFields:{name:tm.visitors.document.objects.License.fixedFields.name,identifier:Qm,url:tm.visitors.document.objects.License.fixedFields.url}},Server:{$visitor:og,fixedFields:{url:tm.visitors.document.objects.Server.fixedFields.url,description:tm.visitors.document.objects.Server.fixedFields.description,variables:tm.visitors.document.objects.Server.fixedFields.variables}},ServerVariable:{$visitor:ig,fixedFields:{enum:tm.visitors.document.objects.ServerVariable.fixedFields.enum,default:tm.visitors.document.objects.ServerVariable.fixedFields.default,description:tm.visitors.document.objects.ServerVariable.fixedFields.description}},Components:{$visitor:hg,fixedFields:{schemas:Yy,responses:tm.visitors.document.objects.Components.fixedFields.responses,parameters:tm.visitors.document.objects.Components.fixedFields.parameters,examples:tm.visitors.document.objects.Components.fixedFields.examples,requestBodies:tm.visitors.document.objects.Components.fixedFields.requestBodies,headers:tm.visitors.document.objects.Components.fixedFields.headers,securitySchemes:tm.visitors.document.objects.Components.fixedFields.securitySchemes,links:tm.visitors.document.objects.Components.fixedFields.links,callbacks:tm.visitors.document.objects.Components.fixedFields.callbacks,pathItems:ev}},Paths:{$visitor:lv},PathItem:{$visitor:wv,fixedFields:{$ref:tm.visitors.document.objects.PathItem.fixedFields.$ref,summary:tm.visitors.document.objects.PathItem.fixedFields.summary,description:tm.visitors.document.objects.PathItem.fixedFields.description,get:{$ref:\"#/visitors/document/objects/Operation\"},put:{$ref:\"#/visitors/document/objects/Operation\"},post:{$ref:\"#/visitors/document/objects/Operation\"},delete:{$ref:\"#/visitors/document/objects/Operation\"},options:{$ref:\"#/visitors/document/objects/Operation\"},head:{$ref:\"#/visitors/document/objects/Operation\"},patch:{$ref:\"#/visitors/document/objects/Operation\"},trace:{$ref:\"#/visitors/document/objects/Operation\"},servers:tm.visitors.document.objects.PathItem.fixedFields.servers,parameters:tm.visitors.document.objects.PathItem.fixedFields.parameters}},Operation:{$visitor:vv,fixedFields:{tags:tm.visitors.document.objects.Operation.fixedFields.tags,summary:tm.visitors.document.objects.Operation.fixedFields.summary,description:tm.visitors.document.objects.Operation.fixedFields.description,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},operationId:tm.visitors.document.objects.Operation.fixedFields.operationId,parameters:tm.visitors.document.objects.Operation.fixedFields.parameters,requestBody:tm.visitors.document.objects.Operation.fixedFields.requestBody,responses:{$ref:\"#/visitors/document/objects/Responses\"},callbacks:tm.visitors.document.objects.Operation.fixedFields.callbacks,deprecated:tm.visitors.document.objects.Operation.fixedFields.deprecated,security:tm.visitors.document.objects.Operation.fixedFields.security,servers:tm.visitors.document.objects.Operation.fixedFields.servers}},ExternalDocumentation:{$visitor:ov,fixedFields:{description:tm.visitors.document.objects.ExternalDocumentation.fixedFields.description,url:tm.visitors.document.objects.ExternalDocumentation.fixedFields.url}},Parameter:{$visitor:wg,fixedFields:{name:tm.visitors.document.objects.Parameter.fixedFields.name,in:tm.visitors.document.objects.Parameter.fixedFields.in,description:tm.visitors.document.objects.Parameter.fixedFields.description,required:tm.visitors.document.objects.Parameter.fixedFields.required,deprecated:tm.visitors.document.objects.Parameter.fixedFields.deprecated,allowEmptyValue:tm.visitors.document.objects.Parameter.fixedFields.allowEmptyValue,style:tm.visitors.document.objects.Parameter.fixedFields.style,explode:tm.visitors.document.objects.Parameter.fixedFields.explode,allowReserved:tm.visitors.document.objects.Parameter.fixedFields.allowReserved,schema:{$ref:\"#/visitors/document/objects/Schema\"},example:tm.visitors.document.objects.Parameter.fixedFields.example,examples:tm.visitors.document.objects.Parameter.fixedFields.examples,content:tm.visitors.document.objects.Parameter.fixedFields.content}},RequestBody:{$visitor:uv,fixedFields:{description:tm.visitors.document.objects.RequestBody.fixedFields.description,content:tm.visitors.document.objects.RequestBody.fixedFields.content,required:tm.visitors.document.objects.RequestBody.fixedFields.required}},MediaType:{$visitor:lg,fixedFields:{schema:{$ref:\"#/visitors/document/objects/Schema\"},example:tm.visitors.document.objects.MediaType.fixedFields.example,examples:tm.visitors.document.objects.MediaType.fixedFields.examples,encoding:tm.visitors.document.objects.MediaType.fixedFields.encoding}},Encoding:{$visitor:iv,fixedFields:{contentType:tm.visitors.document.objects.Encoding.fixedFields.contentType,headers:tm.visitors.document.objects.Encoding.fixedFields.headers,style:tm.visitors.document.objects.Encoding.fixedFields.style,explode:tm.visitors.document.objects.Encoding.fixedFields.explode,allowReserved:tm.visitors.document.objects.Encoding.fixedFields.allowReserved}},Responses:{$visitor:gv,fixedFields:{default:tm.visitors.document.objects.Responses.fixedFields.default}},Response:{$visitor:dv,fixedFields:{description:tm.visitors.document.objects.Response.fixedFields.description,headers:tm.visitors.document.objects.Response.fixedFields.headers,content:tm.visitors.document.objects.Response.fixedFields.content,links:tm.visitors.document.objects.Response.fixedFields.links}},Callback:{$visitor:hv},Example:{$visitor:nv,fixedFields:{summary:tm.visitors.document.objects.Example.fixedFields.summary,description:tm.visitors.document.objects.Example.fixedFields.description,value:tm.visitors.document.objects.Example.fixedFields.value,externalValue:tm.visitors.document.objects.Example.fixedFields.externalValue}},Link:{$visitor:tg,fixedFields:{operationRef:tm.visitors.document.objects.Link.fixedFields.operationRef,operationId:tm.visitors.document.objects.Link.fixedFields.operationId,parameters:tm.visitors.document.objects.Link.fixedFields.parameters,requestBody:tm.visitors.document.objects.Link.fixedFields.requestBody,description:tm.visitors.document.objects.Link.fixedFields.description,server:{$ref:\"#/visitors/document/objects/Server\"}}},Header:{$visitor:xg,fixedFields:{description:tm.visitors.document.objects.Header.fixedFields.description,required:tm.visitors.document.objects.Header.fixedFields.required,deprecated:tm.visitors.document.objects.Header.fixedFields.deprecated,allowEmptyValue:tm.visitors.document.objects.Header.fixedFields.allowEmptyValue,style:tm.visitors.document.objects.Header.fixedFields.style,explode:tm.visitors.document.objects.Header.fixedFields.explode,allowReserved:tm.visitors.document.objects.Header.fixedFields.allowReserved,schema:{$ref:\"#/visitors/document/objects/Schema\"},example:tm.visitors.document.objects.Header.fixedFields.example,examples:tm.visitors.document.objects.Header.fixedFields.examples,content:tm.visitors.document.objects.Header.fixedFields.content}},Tag:{$visitor:dg,fixedFields:{name:tm.visitors.document.objects.Tag.fixedFields.name,description:tm.visitors.document.objects.Tag.fixedFields.description,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},Reference:{$visitor:gg,fixedFields:{$ref:tm.visitors.document.objects.Reference.fixedFields.$ref,summary:yg,description:vg}},Schema:{$visitor:Qg,fixedFields:{$schema:ey,$vocabulary:ty,$id:ny,$anchor:ry,$dynamicAnchor:oy,$dynamicRef:sy,$ref:iy,$defs:ay,$comment:ly,allOf:cy,anyOf:uy,oneOf:py,not:{$ref:\"#/visitors/document/objects/Schema\"},if:{$ref:\"#/visitors/document/objects/Schema\"},then:{$ref:\"#/visitors/document/objects/Schema\"},else:{$ref:\"#/visitors/document/objects/Schema\"},dependentSchemas:hy,prefixItems:fy,items:{$ref:\"#/visitors/document/objects/Schema\"},contains:{$ref:\"#/visitors/document/objects/Schema\"},properties:dy,patternProperties:my,additionalProperties:{$ref:\"#/visitors/document/objects/Schema\"},propertyNames:{$ref:\"#/visitors/document/objects/Schema\"},unevaluatedItems:{$ref:\"#/visitors/document/objects/Schema\"},unevaluatedProperties:{$ref:\"#/visitors/document/objects/Schema\"},type:gy,enum:yy,const:vy,multipleOf:by,maximum:wy,exclusiveMaximum:Ey,minimum:xy,exclusiveMinimum:Sy,maxLength:_y,minLength:jy,pattern:Oy,maxItems:ky,minItems:Ay,uniqueItems:Cy,maxContains:Py,minContains:Ny,maxProperties:Iy,minProperties:Ty,required:Ry,dependentRequired:My,title:Dy,description:Fy,default:Ly,deprecated:By,readOnly:$y,writeOnly:qy,examples:Uy,format:zy,contentEncoding:Vy,contentMediaType:Wy,contentSchema:{$ref:\"#/visitors/document/objects/Schema\"},discriminator:{$ref:\"#/visitors/document/objects/Discriminator\"},xml:{$ref:\"#/visitors/document/objects/XML\"},externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},example:Jy}},Discriminator:{$visitor:Hy,fixedFields:{propertyName:tm.visitors.document.objects.Discriminator.fixedFields.propertyName,mapping:tm.visitors.document.objects.Discriminator.fixedFields.mapping}},XML:{$visitor:Zy,fixedFields:{name:tm.visitors.document.objects.XML.fixedFields.name,namespace:tm.visitors.document.objects.XML.fixedFields.namespace,prefix:tm.visitors.document.objects.XML.fixedFields.prefix,attribute:tm.visitors.document.objects.XML.fixedFields.attribute,wrapped:tm.visitors.document.objects.XML.fixedFields.wrapped}},SecurityScheme:{$visitor:xv,fixedFields:{type:tm.visitors.document.objects.SecurityScheme.fixedFields.type,description:tm.visitors.document.objects.SecurityScheme.fixedFields.description,name:tm.visitors.document.objects.SecurityScheme.fixedFields.name,in:tm.visitors.document.objects.SecurityScheme.fixedFields.in,scheme:tm.visitors.document.objects.SecurityScheme.fixedFields.scheme,bearerFormat:tm.visitors.document.objects.SecurityScheme.fixedFields.bearerFormat,flows:{$ref:\"#/visitors/document/objects/OAuthFlows\"},openIdConnectUrl:tm.visitors.document.objects.SecurityScheme.fixedFields.openIdConnectUrl}},OAuthFlows:{$visitor:_v,fixedFields:{implicit:{$ref:\"#/visitors/document/objects/OAuthFlow\"},password:{$ref:\"#/visitors/document/objects/OAuthFlow\"},clientCredentials:{$ref:\"#/visitors/document/objects/OAuthFlow\"},authorizationCode:{$ref:\"#/visitors/document/objects/OAuthFlow\"}}},OAuthFlow:{$visitor:Ov,fixedFields:{authorizationUrl:tm.visitors.document.objects.OAuthFlow.fixedFields.authorizationUrl,tokenUrl:tm.visitors.document.objects.OAuthFlow.fixedFields.tokenUrl,refreshUrl:tm.visitors.document.objects.OAuthFlow.fixedFields.refreshUrl,scopes:tm.visitors.document.objects.OAuthFlow.fixedFields.scopes}},SecurityRequirement:{$visitor:ug}},extension:{$visitor:tm.visitors.document.extension.$visitor}}}};function Nv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Iv=e=>{if(ds(e))return`${e.element.charAt(0).toUpperCase()+e.element.slice(1)}Element`},Tv=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Nv(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Nv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({CallbackElement:[\"content\"],ComponentsElement:[\"content\"],ContactElement:[\"content\"],DiscriminatorElement:[\"content\"],Encoding:[\"content\"],Example:[\"content\"],ExternalDocumentationElement:[\"content\"],HeaderElement:[\"content\"],InfoElement:[\"content\"],LicenseElement:[\"content\"],MediaTypeElement:[\"content\"],OAuthFlowElement:[\"content\"],OAuthFlowsElement:[\"content\"],OpenApi3_1Element:[\"content\"],OperationElement:[\"content\"],ParameterElement:[\"content\"],PathItemElement:[\"content\"],PathsElement:[\"content\"],ReferenceElement:[\"content\"],RequestBodyElement:[\"content\"],ResponseElement:[\"content\"],ResponsesElement:[\"content\"],SchemaElement:[\"content\"],SecurityRequirementElement:[\"content\"],SecuritySchemeElement:[\"content\"],ServerElement:[\"content\"],ServerVariableElement:[\"content\"],TagElement:[\"content\"]},pi),Rv={namespace:e=>{const{base:t}=e;return t.register(\"callback\",cm),t.register(\"components\",um),t.register(\"contact\",pm),t.register(\"discriminator\",hm),t.register(\"encoding\",fm),t.register(\"example\",dm),t.register(\"externalDocumentation\",mm),t.register(\"header\",gm),t.register(\"info\",ym),t.register(\"jsonSchemaDialect\",bm),t.register(\"license\",wm),t.register(\"link\",Em),t.register(\"mediaType\",xm),t.register(\"oAuthFlow\",Sm),t.register(\"oAuthFlows\",_m),t.register(\"openapi\",jm),t.register(\"openApi3_1\",km),t.register(\"operation\",Am),t.register(\"parameter\",Cm),t.register(\"pathItem\",Pm),t.register(\"paths\",Nm),t.register(\"reference\",Tm),t.register(\"requestBody\",Rm),t.register(\"response\",Mm),t.register(\"responses\",Dm),t.register(\"schema\",Lm),t.register(\"securityRequirement\",Bm),t.register(\"securityScheme\",$m),t.register(\"server\",qm),t.register(\"serverVariable\",Um),t.register(\"tag\",zm),t.register(\"xml\",Vm),t}};function Mv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Dv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Mv(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Mv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Fv=()=>{const e=zs(Rv);return{predicates:Dv(Dv({},c),{},{isStringElement:ms,isArrayElement:ws,isObjectElement:bs,includesClasses:Ns}),namespace:e}};function Lv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Bv=(e,{specPath:t=[\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"],plugins:n=[]}={})=>{const r=(0,Pt.Qc)(e),o=Za(Pv),s=is(t,[],o);return fi(r,s,{state:{specObj:o}}),di(s.element,n,{toolboxCreator:Fv,visitorOptions:{keyMap:Tv,nodeTypeGetter:Iv}})},$v=e=>(t,n={})=>Bv(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lv(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({specPath:e},n));cm.refract=$v([\"visitors\",\"document\",\"objects\",\"Callback\",\"$visitor\"]),um.refract=$v([\"visitors\",\"document\",\"objects\",\"Components\",\"$visitor\"]),pm.refract=$v([\"visitors\",\"document\",\"objects\",\"Contact\",\"$visitor\"]),dm.refract=$v([\"visitors\",\"document\",\"objects\",\"Example\",\"$visitor\"]),hm.refract=$v([\"visitors\",\"document\",\"objects\",\"Discriminator\",\"$visitor\"]),fm.refract=$v([\"visitors\",\"document\",\"objects\",\"Encoding\",\"$visitor\"]),mm.refract=$v([\"visitors\",\"document\",\"objects\",\"ExternalDocumentation\",\"$visitor\"]),gm.refract=$v([\"visitors\",\"document\",\"objects\",\"Header\",\"$visitor\"]),ym.refract=$v([\"visitors\",\"document\",\"objects\",\"Info\",\"$visitor\"]),bm.refract=$v([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"fixedFields\",\"jsonSchemaDialect\"]),wm.refract=$v([\"visitors\",\"document\",\"objects\",\"License\",\"$visitor\"]),Em.refract=$v([\"visitors\",\"document\",\"objects\",\"Link\",\"$visitor\"]),xm.refract=$v([\"visitors\",\"document\",\"objects\",\"MediaType\",\"$visitor\"]),Sm.refract=$v([\"visitors\",\"document\",\"objects\",\"OAuthFlow\",\"$visitor\"]),_m.refract=$v([\"visitors\",\"document\",\"objects\",\"OAuthFlows\",\"$visitor\"]),jm.refract=$v([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"fixedFields\",\"openapi\"]),km.refract=$v([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"]),Am.refract=$v([\"visitors\",\"document\",\"objects\",\"Operation\",\"$visitor\"]),Cm.refract=$v([\"visitors\",\"document\",\"objects\",\"Parameter\",\"$visitor\"]),Pm.refract=$v([\"visitors\",\"document\",\"objects\",\"PathItem\",\"$visitor\"]),Nm.refract=$v([\"visitors\",\"document\",\"objects\",\"Paths\",\"$visitor\"]),Tm.refract=$v([\"visitors\",\"document\",\"objects\",\"Reference\",\"$visitor\"]),Rm.refract=$v([\"visitors\",\"document\",\"objects\",\"RequestBody\",\"$visitor\"]),Mm.refract=$v([\"visitors\",\"document\",\"objects\",\"Response\",\"$visitor\"]),Dm.refract=$v([\"visitors\",\"document\",\"objects\",\"Responses\",\"$visitor\"]),Lm.refract=$v([\"visitors\",\"document\",\"objects\",\"Schema\",\"$visitor\"]),Bm.refract=$v([\"visitors\",\"document\",\"objects\",\"SecurityRequirement\",\"$visitor\"]),$m.refract=$v([\"visitors\",\"document\",\"objects\",\"SecurityScheme\",\"$visitor\"]),qm.refract=$v([\"visitors\",\"document\",\"objects\",\"Server\",\"$visitor\"]),Um.refract=$v([\"visitors\",\"document\",\"objects\",\"ServerVariable\",\"$visitor\"]),zm.refract=$v([\"visitors\",\"document\",\"objects\",\"Tag\",\"$visitor\"]),Vm.refract=$v([\"visitors\",\"document\",\"objects\",\"XML\",\"$visitor\"]);const qv=class extends Array{constructor(...e){super(...e),Xo(this,\"unknownMediaType\",\"application/octet-stream\")}filterByFormat(){throw new Error(\"Not implemented!\")}findBy(){throw new Error(\"Not implemented\")}latest(){throw new Error(\"Not implemented!\")}};class Uv extends qv{filterByFormat(e=\"generic\"){const t=\"generic\"===e?\"openapi;version\":e;return this.filter((e=>e.includes(t)))}findBy(e=\"3.1.0\",t=\"generic\"){const n=\"generic\"===t?`vnd.oai.openapi;version=${e}`:`vnd.oai.openapi+${t};version=${e}`;return this.find((e=>e.includes(n)))||this.unknownMediaType}latest(e=\"generic\"){return ao(this.filterByFormat(e))}}const zv=new Uv(\"application/vnd.oai.openapi;version=3.1.0\",\"application/vnd.oai.openapi+json;version=3.1.0\",\"application/vnd.oai.openapi+yaml;version=3.1.0\");var Vv=n(34155),Wv=Or((function(e,t){return gr(Io(\"\"),Fr(as(e)),io(\"\"))(t)}));const Jv=Wv;const Kv=pr(qo);const Hv=Zt(1,gr(cn,Xr(\"RegExp\")));const Gv=Bo(Xs,Co(/[.*+?^${}()|[\\]\\\\-]/g,\"\\\\$&\"));var Zv=function(e,t){if(\"string\"!=typeof e&&!(e instanceof String))throw TypeError(\"`\".concat(t,\"` must be a string\"))};var Yv=Zt(3,(function(e,t,n){!function(e,t,n){if(null==n||null==e||null==t)throw TypeError(\"Input values must not be `null` or `undefined`\")}(e,t,n),Zv(n,\"str\"),Zv(t,\"replaceValue\"),function(e){if(!(\"string\"==typeof e||e instanceof String||e instanceof RegExp))throw TypeError(\"`searchValue` must be a string or an regexp\")}(e);var r=new RegExp(Hv(e)?e:Gv(e),\"g\");return Co(r,t,n)})),Xv=oo(2,\"replaceAll\");const Qv=ts(String.prototype.replaceAll)?Xv:Yv,eb=()=>wo(Ro(/^win/),[\"platform\"],Vv),tb=e=>{try{const t=new URL(e);return Jv(\":\",t.protocol)}catch{return}},nb=(gr(tb,Kv),e=>{if(Vv.browser)return!1;const t=tb(e);return qo(t)||\"file\"===t||/^[a-zA-Z]$/.test(t)}),rb=e=>{const t=tb(e);return\"http\"===t||\"https\"===t},ob=(e,t)=>{const n=[/%23/g,\"#\",/%24/g,\"$\",/%26/g,\"&\",/%2C/g,\",\",/%40/g,\"@\"],r=So(!1,\"keepFileProtocol\",t),o=So(eb,\"isWindows\",t);let s=decodeURI(e);for(let e=0;e<n.length;e+=2)s=s.replace(n[e],n[e+1]);let i=\"file://\"===s.substr(0,7).toLowerCase();return i&&(s=\"/\"===s[7]?s.substr(8):s.substr(7),o()&&\"/\"===s[1]&&(s=`${s[0]}:${s.substr(1)}`),r?s=`file:///${s}`:(i=!1,s=o()?s:`/${s}`)),o()&&!i&&(s=Qv(\"/\",\"\\\\\",s),\":\\\\\"===s.substr(1,2)&&(s=s[0].toUpperCase()+s.substr(1))),s},sb=e=>{const t=e.indexOf(\"#\");return-1!==t?e.substr(t):\"#\"},ib=e=>{const t=e.indexOf(\"#\");let n=e;return t>=0&&(n=e.substr(0,t)),n},ab=()=>{if(Vv.browser)return ib(globalThis.location.href);const e=Vv.cwd(),t=ao(e);return[\"/\",\"\\\\\"].includes(t)?e:e+(eb()?\"\\\\\":\"/\")},lb=(e,t)=>{const n=new URL(t,new URL(e,\"resolve://\"));if(\"resolve:\"===n.protocol){const{pathname:e,search:t,hash:r}=n;return e+t+r}return n.toString()},cb=e=>nb(e)?(e=>{const t=[/\\?/g,\"%3F\",/#/g,\"%23\"];let n=e;eb()&&(n=n.replace(/\\\\/g,\"/\")),n=encodeURI(n);for(let e=0;e<t.length;e+=2)n=n.replace(t[e],t[e+1]);return n})(ob(e)):encodeURI(decodeURI(e)).replace(/%5B/g,\"[\").replace(/%5D/g,\"]\"),ub=e=>nb(e)?ob(e):decodeURI(e),pb=Ys({props:{uri:\"\",value:null,depth:0,refSet:null,errors:[]},init({depth:e=this.depth,refSet:t=this.refSet,uri:n=this.uri,value:r=this.value}={}){this.uri=n,this.value=r,this.depth=e,this.refSet=t,this.errors=[]}}),hb=pb,fb=Ys({props:{rootRef:null,refs:[],circular:!1},init({refs:e=[]}={}){this.refs=[],e.forEach((e=>this.add(e)))},methods:{get size(){return this.refs.length},add(e){return this.has(e)||(this.refs.push(e),this.rootRef=null===this.rootRef?e:this.rootRef,e.refSet=this),this},merge(e){for(const t of e.values())this.add(t);return this},has(e){const t=Xs(e)?e:e.uri;return Kv(this.find(xo(t,\"uri\")))},find(e){return this.refs.find(e)},*values(){yield*this.refs},clean(){this.refs.forEach((e=>{e.refSet=null})),this.refs=[]}}}),db=fb,mb={parse:{mediaType:\"text/plain\",parsers:[],parserOpts:{}},resolve:{baseURI:\"\",resolvers:[],resolverOpts:{},strategies:[],external:!0,maxDepth:1/0},dereference:{strategies:[],refSet:null,maxDepth:1/0}},gb=lo(uo([\"resolve\",\"baseURI\"]),or([\"resolve\",\"baseURI\"])),yb=e=>Ri(e)?ab():e,vb=Ys({props:{uri:null,mediaType:\"text/plain\",data:null,parseResult:null},init({uri:e=this.uri,mediaType:t=this.mediaType,data:n=this.data,parseResult:r=this.parseResult}={}){this.uri=e,this.mediaType=t,this.data=n,this.parseResult=r},methods:{get extension(){return Xs(this.uri)?(e=>{const t=e.lastIndexOf(\".\");return t>=0?e.substr(t).toLowerCase():\"\"})(this.uri):\"\"},toString(){if(\"string\"==typeof this.data)return this.data;if(this.data instanceof ArrayBuffer||[\"ArrayBuffer\"].includes(cn(this.data))||ArrayBuffer.isView(this.data)){return new TextDecoder(\"utf-8\").decode(this.data)}return String(this.data)}}});class bb extends Error{constructor(e,t){if(super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack,$s(t)&&Gr(\"cause\",t)&&!Gr(\"cause\",this)){const{cause:e}=t;this.cause=e,Gr(\"stack\",e)&&(this.stack=`${this.stack}\\nCAUSE: ${null==e?void 0:e.stack}`)}}}const wb=bb;const Eb=class extends wb{constructor(e,t){super(e,{cause:t.cause}),Xo(this,\"plugin\",void 0),this.plugin=t.plugin}},xb=async(e,t,n)=>{const r=await Promise.all(n.map(is([e],[t])));return n.filter(((e,t)=>r[t]))},Sb=async(e,t,n)=>{let r;for(const o of n)try{const n=await o[e].call(o,...t);return{plugin:o,result:n}}catch(e){r=new Eb(\"Error while running plugin\",{cause:e,plugin:o})}return Promise.reject(r)};const _b=class extends wb{};const jb=class extends _b{};const Ob=class extends wb{},kb=async(e,t)=>{let n=e,r=!1;if(!Os(e)){const t=new e.constructor(e.content,e.meta.clone(),e.attributes);t.classes.push(\"result\"),n=new zo([t]),r=!0}const o=vb({uri:t.resolve.baseURI,parseResult:n,mediaType:t.parse.mediaType}),s=await xb(\"canDereference\",o,t.dereference.strategies);if(so(s))throw new jb(o.uri);try{const{result:e}=await Sb(\"dereference\",[o,t],s);return r?e.get(0):e}catch(e){throw new Ob(`Error while dereferencing file \"${o.uri}\"`,{cause:e})}},Ab=async(e,t={})=>{const n=((e,t)=>{const n=mo(e,t);return vo(gb,yb,n)})(mb,t);return kb(e,n)};const Cb=class extends wb{constructor(e=\"Not Implemented\",t){super(e,t)}},Pb=Ys({props:{name:\"\",allowEmpty:!0,sourceMap:!1,fileExtensions:[],mediaTypes:[]},init({allowEmpty:e=this.allowEmpty,sourceMap:t=this.sourceMap,fileExtensions:n=this.fileExtensions,mediaTypes:r=this.mediaTypes}={}){this.allowEmpty=e,this.sourceMap=t,this.fileExtensions=n,this.mediaTypes=r},methods:{async canParse(){throw new Cb},async parse(){throw new Cb}}}),Nb=Pb,Ib=Ys(Nb,{props:{name:\"binary\"},methods:{async canParse(e){return 0===this.fileExtensions.length||this.fileExtensions.includes(e.extension)},async parse(e){try{const t=unescape(encodeURIComponent(e.toString())),n=btoa(t),r=new zo;if(0!==n.length){const e=new Pt.RP(n);e.classes.push(\"result\"),r.push(e)}return r}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),Tb=Ys({props:{name:null},methods:{canResolve:()=>!1,async resolve(){throw new Cb}}});const Rb=Zt(1,$n(Promise.all,Promise));const Mb=class extends wb{};const Db=class extends Mb{};const Fb=class extends Ob{};const Lb=class extends Mb{};function Bb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Bb(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bb(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const qb=async(e,t)=>{const n=vb({uri:cb(ib(e)),mediaType:t.parse.mediaType}),r=await(async(e,t)=>{const n=t.resolve.resolvers.map((e=>{const n=Object.create(e);return Object.assign(n,t.resolve.resolverOpts)})),r=await xb(\"canRead\",e,n);if(so(r))throw new Lb(e.uri);try{const{result:t}=await Sb(\"read\",[e],r);return t}catch(t){throw new Mb(`Error while reading file \"${e.uri}\"`,{cause:t})}})(n,t);return(async(e,t)=>{const n=t.parse.parsers.map((e=>{const n=Object.create(e);return Object.assign(n,t.parse.parserOpts)})),r=await xb(\"canParse\",e,n);if(so(r))throw new Lb(e.uri);try{const{plugin:t,result:n}=await Sb(\"parse\",[e],r);return!t.allowEmpty&&n.isEmpty?Promise.reject(new _b(`Error while parsing file \"${e.uri}\". File is empty.`)):n}catch(t){throw new _b(`Error while parsing file \"${e.uri}\"`,{cause:t})}})(vb($b($b({},n),{},{data:r})),t)},Ub=(e,t)=>{const n=hi({predicate:e});return fi(t,n),new Pt.O4(n.result)};class zb extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}const Vb=(e,t)=>{const n=hi({predicate:e,returnOnTrue:ei});return fi(t,n),bo(void 0,[0],n.result)};const Wb=class extends wb{};class Jb extends Wb{constructor(e){super(`Invalid JSON Schema $anchor \"${e}\".`)}}class Kb extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}const Hb=e=>/^[A-Za-z_][A-Za-z_0-9.-]*$/.test(e),Gb=e=>{const t=sb(e);return qi(\"#\",t)},Zb=(e,t)=>{const n=(e=>{if(!Hb(e))throw new Jb(e);return e})(e),r=Vb((e=>{var t;return Jg(e)&&(null===(t=e.$anchor)||void 0===t?void 0:t.toValue())===n}),t);if(qo(r))throw new Kb(`Evaluation failed on token: \"${n}\"`);return r},Yb=(e,t)=>{if(void 0===t.$ref)return;const n=sb(t.$ref.toValue()),r=t.meta.get(\"inherited$id\").toValue();return`${Jn(((e,t)=>lb(e,cb(ib(t)))),e,[...r,t.$ref.toValue()])}${\"#\"===n?\"\":n}`},Xb=e=>{if(Xb.cache.has(e))return Xb.cache.get(e);const t=Lm.refract(e);return Xb.cache.set(e,t),t};Xb.cache=new WeakMap;const Qb=e=>As(e)?Xb(e):e,ew=(e,t)=>{const{cache:n}=ew,r=ib(e),o=e=>Jg(e)&&void 0!==e.$id;if(!n.has(t)){const e=Ub(o,t);n.set(t,Array.from(e))}const s=n.get(t).find((e=>((e,t)=>{if(void 0===t.$id)return;const n=t.meta.get(\"inherited$id\").toValue();return Jn(((e,t)=>lb(e,cb(ib(t)))),e,[...n,t.$id.toValue()])})(r,e)===r));if(qo(s))throw new zb(`Evaluation failed on URI: \"${e}\"`);let i,a;return Hb(Gb(e))?(i=Zb,a=Gb(e)):(i=Ji,a=Ki(e)),i(a,s)};function tw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tw(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tw(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}ew.cache=new WeakMap;const rw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],ow=Ys({props:{indirections:[],namespace:null,reference:null,crawledElements:null,crawlingMap:null,visited:null,options:null},init({reference:e,namespace:t,indirections:n=[],visited:r=new WeakSet,options:o}){this.indirections=n,this.namespace=t,this.reference=e,this.crawledElements=[],this.crawlingMap={},this.visited=r,this.options=o},methods:{toBaseURI(e){return lb(this.reference.uri,cb(ib(e)))},async toReference(e){if(this.reference.depth>=this.options.resolve.maxDepth)throw new Db(`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file \"${this.reference.uri}\"`);const t=this.toBaseURI(e),{refSet:n}=this.reference;if(n.has(t))return n.find(xo(t,\"uri\"));const r=await qb(ub(t),nw(nw({},this.options),{},{parse:nw(nw({},this.options.parse),{},{mediaType:\"text/plain\"})})),o=hb({uri:t,value:r,depth:this.reference.depth+1});return n.add(o),o},ReferenceElement(e){var t;if(!this.options.resolve.external&&Ug(e))return!1;const n=null===(t=e.$ref)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n)),this.crawledElements.push(e)},PathItemElement(e){var t;if(!ms(e.$ref))return;if(!this.options.resolve.external&&Bg(e))return;const n=null===(t=e.$ref)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n)),this.crawledElements.push(e)},LinkElement(e){if((ms(e.operationRef)||ms(e.operationId))&&(this.options.resolve.external||!Tg(e))){if(ms(e.operationRef)&&ms(e.operationId))throw new Error(\"LinkElement operationRef and operationId are mutually exclusive.\");if(Tg(e)){var t;const n=null===(t=e.operationRef)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n))}}},ExampleElement(e){var t;if(!ms(e.externalValue))return;if(!this.options.resolve.external&&ms(e.externalValue))return;if(e.hasKey(\"value\")&&ms(e.externalValue))throw new Error(\"ExampleElement value and externalValue fields are mutually exclusive.\");const n=null===(t=e.externalValue)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n))},SchemaElement(e){if(this.visited.has(e))return!1;if(!ms(e.$ref))return void this.visited.add(e);const t=this.reference.uri,n=Yb(t,e),r=ib(n),o=vb({uri:r}),s=go((e=>e.canRead(o)),this.options.resolve.resolvers),i=!s,a=!s&&this.reference.uri!==r;if(this.options.resolve.external||!a){if(!Hr(r,this.crawlingMap))try{this.crawlingMap[r]=s||i?this.reference:this.toReference(ub(n))}catch(e){if(!(i&&e instanceof zb))throw e;this.crawlingMap[r]=this.toReference(ub(n))}this.crawledElements.push(e)}else this.visited.add(e)},async crawlReferenceElement(e){var t;const n=await this.toReference(e.$ref.toValue());this.indirections.push(e);const r=Ki(null===(t=e.$ref)||void 0===t?void 0:t.toValue());let o=Ji(r,n.value.result);if(As(o)){const t=e.meta.get(\"referenced-element\").toValue();if(Uc(o))o=Tm.refract(o),o.setMetaProperty(\"referenced-element\",t);else{o=this.namespace.getElementClass(t).refract(o)}}if(this.indirections.includes(o))throw new Error(\"Recursive Reference Object detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);const s=ow({reference:n,namespace:this.namespace,indirections:[...this.indirections],options:this.options});await rw(o,s,{keyMap:Tv,nodeTypeGetter:Iv}),await s.crawl(),this.indirections.pop()},async crawlPathItemElement(e){var t;const n=await this.toReference(e.$ref.toValue());this.indirections.push(e);const r=Ki(null===(t=e.$ref)||void 0===t?void 0:t.toValue());let o=Ji(r,n.value.result);if(As(o)&&(o=Pm.refract(o)),this.indirections.includes(o))throw new Error(\"Recursive Path Item Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);const s=ow({reference:n,namespace:this.namespace,indirections:[...this.indirections],options:this.options});await rw(o,s,{keyMap:Tv,nodeTypeGetter:Iv}),await s.crawl(),this.indirections.pop()},async crawlSchemaElement(e){const t=this.reference.uri,n=Yb(t,e),r=ib(n),o=vb({uri:r}),s=go((e=>e.canRead(o)),this.options.resolve.resolvers),i=!s;let a,l;this.indirections.push(e);try{if(s||i){a=this.reference;l=ew(n,Qb(a.value.result))}else{a=await this.toReference(ub(n));const e=Ki(n);l=Qb(Ji(e,a.value.result))}}catch(e){if(!(i&&e instanceof zb))throw e;if(Hb(Gb(n))){a=await this.toReference(ub(n));const e=Gb(n);l=Zb(e,Qb(a.value.result))}else{a=await this.toReference(ub(n));const e=Ki(n);l=Qb(Ji(e,a.value.result))}}if(this.visited.add(e),this.indirections.includes(l))throw new Error(\"Recursive Schema Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);const c=ow({reference:a,namespace:this.namespace,indirections:[...this.indirections],options:this.options,visited:this.visited});await rw(l,c,{keyMap:Tv,nodeTypeGetter:Iv}),await c.crawl(),this.indirections.pop()},async crawl(){await gr(nr,Rb)(this.crawlingMap),this.crawlingMap=null;for(const e of this.crawledElements)qg(e)?await this.crawlReferenceElement(e):Jg(e)?await this.crawlSchemaElement(e):Lg(e)&&await this.crawlPathItemElement(e)}}}),sw=ow,iw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],aw=Ys(Tb,{init(){this.name=\"openapi-3-1\"},methods:{canResolve(e){var t;return\"text/plain\"!==e.mediaType?zv.includes(e.mediaType):Mg(null===(t=e.parseResult)||void 0===t?void 0:t.result)},async resolve(e,t){const n=zs(Rv),r=hb({uri:e.uri,value:e.parseResult}),o=sw({reference:r,namespace:n,options:t}),s=db();return s.add(r),await iw(s.rootRef.value,o,{keyMap:Tv,nodeTypeGetter:Iv}),await o.crawl(),s}}}),lw=aw,cw=e=>e.replace(/\\s/g,\"\"),uw=e=>e.replace(/\\W/gi,\"_\"),pw=(e,t,n)=>{const r=cw(e);return r.length>0?uw(r):((e,t)=>`${uw(cw(t.toLowerCase()))}${uw(cw(e))}`)(t,n)},hw=({operationIdNormalizer:e=pw}={})=>({predicates:t,namespace:n})=>{const r=[],o=[],s=[];return{visitor:{OpenApi3_1Element:{leave(){const e=Jr((e=>Ti(e.operationId)),o);Object.entries(e).forEach((([e,t])=>{t.length<=1||t.forEach(((t,r)=>{const o=`${e}${r+1}`;t.operationId=new n.elements.String(o)}))})),s.forEach((e=>{var t;if(void 0===e.operationId)return;const n=String(Ti(e.operationId)),r=o.find((e=>Ti(e.meta.get(\"originalOperationId\"))===n));void 0!==r&&(e.operationId=null===(t=r.operationId)||void 0===t?void 0:t.clone(),e.meta.set(\"originalOperationId\",n),e.set(\"__originalOperationId\",n))})),o.length=0,s.length=0}},PathItemElement:{enter(e){const t=kr(\"path\",Ti(e.meta.get(\"path\")));r.push(t)},leave(){r.pop()}},OperationElement:{enter(t){if(void 0===t.operationId)return;const s=String(Ti(t.operationId)),i=ao(r),a=kr(\"method\",Ti(t.meta.get(\"http-method\"))),l=e(s,i,a);s!==l&&(t.operationId=new n.elements.String(l),t.set(\"__originalOperationId\",s),t.meta.set(\"originalOperationId\",s),o.push(t))}},LinkElement:{leave(e){t.isLinkElement(e)&&void 0!==e.operationId&&s.push(e)}}}}},fw=()=>({predicates:e})=>{const t=(t,n)=>!!e.isParameterElement(t)&&(!!e.isParameterElement(n)&&(!!e.isStringElement(t.name)&&(!!e.isStringElement(t.in)&&(!!e.isStringElement(n.name)&&(!!e.isStringElement(n.in)&&(Ti(t.name)===Ti(n.name)&&Ti(t.in)===Ti(n.in))))))),n=[];return{visitor:{PathItemElement:{enter(t,r,o,s,i){if(i.some(e.isComponentsElement))return;const{parameters:a}=t;e.isArrayElement(a)?n.push([...a.content]):n.push([])},leave(){n.pop()}},OperationElement:{leave(e){const r=ao(n);if(!Array.isArray(r)||0===r.length)return;const o=bo([],[\"parameters\",\"content\"],e),s=Lo(t,[...o,...r]);e.parameters=new ld(s)}}}}},dw=()=>({predicates:e})=>{let t;return{visitor:{OpenApi3_1Element:{enter(n){e.isArrayElement(n.security)&&(t=n.security)},leave(){t=void 0}},OperationElement:{leave(n,r,o,s,i){if(i.some(e.isComponentsElement))return;var a;void 0===n.security&&void 0!==t&&(n.security=new yd(null===(a=t)||void 0===a?void 0:a.content))}}}}},mw=()=>({predicates:e})=>{let t;const n=[];return{visitor:{OpenApi3_1Element:{enter(n){var r;e.isArrayElement(n.servers)&&(t=null===(r=n.servers)||void 0===r?void 0:r.content)},leave(){t=void 0}},PathItemElement:{enter(r,o,s,i,a){if(a.some(e.isComponentsElement))return;void 0===r.servers&&void 0!==t&&(r.servers=new kd(t));const{servers:l}=r;void 0!==l&&e.isArrayElement(l)?n.push([...l.content]):n.push(void 0)},leave(){n.pop()}},OperationElement:{enter(t){const r=ao(n);void 0!==r&&(e.isArrayElement(t.servers)||(t.servers=new wd(r)))}}}}},gw=()=>({predicates:e})=>({visitor:{ParameterElement:{leave(t,n,r,o,s){var i,a;if(!s.some(e.isComponentsElement)&&void 0!==t.schema&&e.isSchemaElement(t.schema)&&(void 0!==(null===(i=t.schema)||void 0===i?void 0:i.example)||void 0!==(null===(a=t.schema)||void 0===a?void 0:a.examples))){if(void 0!==t.examples&&e.isObjectElement(t.examples)){const e=t.examples.map((e=>{var t;return null===(t=e.value)||void 0===t?void 0:t.clone()}));return void 0!==t.schema.examples&&t.schema.set(\"examples\",e),void(void 0!==t.schema.example&&t.schema.set(\"example\",e))}void 0!==t.example&&(void 0!==t.schema.examples&&t.schema.set(\"examples\",[t.example.clone()]),void 0!==t.schema.example&&t.schema.set(\"example\",t.example.clone()))}}}}}),yw=()=>({predicates:e})=>({visitor:{HeaderElement:{leave(t,n,r,o,s){var i,a;if(!s.some(e.isComponentsElement)&&void 0!==t.schema&&e.isSchemaElement(t.schema)&&(void 0!==(null===(i=t.schema)||void 0===i?void 0:i.example)||void 0!==(null===(a=t.schema)||void 0===a?void 0:a.examples))){if(void 0!==t.examples&&e.isObjectElement(t.examples)){const e=t.examples.map((e=>{var t;return null===(t=e.value)||void 0===t?void 0:t.clone()}));return void 0!==t.schema.examples&&t.schema.set(\"examples\",e),void(void 0!==t.schema.example&&t.schema.set(\"example\",e))}void 0!==t.example&&(void 0!==t.schema.examples&&t.schema.set(\"examples\",[t.example.clone()]),void 0!==t.schema.example&&t.schema.set(\"example\",t.example.clone()))}}}}}),vw=e=>t=>{if(t?.$$normalized)return t;if(vw.cache.has(t))return t;const n=km.refract(t),r=e(n),o=Ti(r);return vw.cache.set(t,o),o};vw.cache=new WeakMap;const bw=e=>{if(!bs(e))return e;if(e.hasKey(\"$$normalized\"))return e;const t=[hw({operationIdNormalizer:(e,t,n)=>(0,He.Z)({operationId:e},t,n,{v2OperationIdCompatibilityMode:!1})}),fw(),dw(),mw(),gw(),yw()],n=di(e,t,{toolboxCreator:Fv,visitorOptions:{keyMap:Tv,nodeTypeGetter:Iv}});return n.set(\"$$normalized\",!0),n},ww=Ys({props:{name:null},methods:{canRead:()=>!1,async read(){throw new Cb}}}),Ew=Ys(ww,{props:{timeout:5e3,redirects:5,withCredentials:!1},init({timeout:e=this.timeout,redirects:t=this.redirects,withCredentials:n=this.withCredentials}={}){this.timeout=e,this.redirects=t,this.withCredentials=n},methods:{canRead:e=>rb(e.uri),async read(){throw new Cb},getHttpClient(){throw new Cb}}}).compose({props:{name:\"http-swagger-client\",swaggerHTTPClient:ct,swaggerHTTPClientConfig:{}},init(){let{swaggerHTTPClient:e=this.swaggerHTTPClient}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.swaggerHTTPClient=e},methods:{getHttpClient(){return this.swaggerHTTPClient},async read(e){const t=this.getHttpClient(),n=new AbortController,{signal:r}=n,o=setTimeout((()=>{n.abort()}),this.timeout),s=this.getHttpClient().withCredentials||this.withCredentials?\"include\":\"same-origin\",i=0===this.redirects?\"error\":\"follow\",a=this.redirects>0?this.redirects:void 0;try{return(await t(f()({url:e.uri,signal:r,userFetch:async(e,t)=>{let n=await fetch(e,t);try{n.headers.delete(\"Content-Type\")}catch{n=new Response(n.body,f()(f()({},n),{},{headers:new Headers(n.headers)})),n.headers.delete(\"Content-Type\")}return n},credentials:s,redirects:i,follow:a},this.swaggerHTTPClientConfig))).text.arrayBuffer()}catch(t){throw new Mb(`Error downloading \"${e.uri}\"`,{cause:t})}finally{clearTimeout(o)}}}}),xw=Nb.compose({props:{name:\"json-swagger-client\",fileExtensions:[\".json\"],mediaTypes:[\"application/json\"]},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{return JSON.parse(e.toString()),!0}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"json-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();if(this.allowEmpty&&\"\"===n.trim())return t;try{const e=Ii(JSON.parse(n));return e.classes.push(\"result\"),t.push(e),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),Sw=Nb.compose({props:{name:\"yaml-1-2-swagger-client\",fileExtensions:[\".yaml\",\".yml\"],mediaTypes:[\"text/yaml\",\"application/yaml\"]},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{return le.ZP.load(e.toString(),{schema:le.A8}),!0}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"yaml-1-2-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();try{const e=le.ZP.load(n,{schema:le.A8});if(this.allowEmpty&&void 0===e)return t;const r=Ii(e);return r.classes.push(\"result\"),t.push(r),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),_w=Nb.compose({props:{name:\"openapi-json-3-1-swagger-client\",fileExtensions:[\".json\"],mediaTypes:new Uv(...zv.filterByFormat(\"generic\"),...zv.filterByFormat(\"json\")),detectionRegExp:/\"openapi\"\\s*:\\s*\"(?<version_json>3\\.1\\.(?:[1-9]\\d*|0))\"/},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{const t=e.toString();return JSON.parse(t),this.detectionRegExp.test(t)}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"openapi-json-3-1-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();if(this.allowEmpty&&\"\"===n.trim())return t;try{const e=JSON.parse(n),r=km.refract(e,this.refractorOpts);return r.classes.push(\"result\"),t.push(r),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),jw=Nb.compose({props:{name:\"openapi-yaml-3-1-swagger-client\",fileExtensions:[\".yaml\",\".yml\"],mediaTypes:new Uv(...zv.filterByFormat(\"generic\"),...zv.filterByFormat(\"yaml\")),detectionRegExp:/(?<YAML>^([\"']?)openapi\\2\\s*:\\s*([\"']?)(?<version_yaml>3\\.1\\.(?:[1-9]\\d*|0))\\3(?:\\s+|$))|(?<JSON>\"openapi\"\\s*:\\s*\"(?<version_json>3\\.1\\.(?:[1-9]\\d*|0))\")/m},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{const t=e.toString();return le.ZP.load(t),this.detectionRegExp.test(t)}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"openapi-yaml-3-1-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();try{const e=le.ZP.load(n,{schema:le.A8});if(this.allowEmpty&&void 0===e)return t;const r=km.refract(e,this.refractorOpts);return r.classes.push(\"result\"),t.push(r),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),Ow=Ys({props:{name:null},methods:{canDereference:()=>!1,async dereference(){throw new Cb}}});function kw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Aw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kw(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kw(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Cw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],Pw=Ys({props:{indirections:null,namespace:null,reference:null,options:null,ancestors:null},init({indirections:e=[],reference:t,namespace:n,options:r,ancestors:o=[]}){this.indirections=e,this.namespace=n,this.reference=t,this.options=r,this.ancestors=[...o]},methods:{toBaseURI(e){return lb(this.reference.uri,cb(ib(e)))},toAncestorLineage(e){const t=new WeakSet(e.filter(ds));return[[...this.ancestors,t],t]},async toReference(e){if(this.reference.depth>=this.options.resolve.maxDepth)throw new Db(`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file \"${this.reference.uri}\"`);const t=this.toBaseURI(e),{refSet:n}=this.reference;if(n.has(t))return n.find(xo(t,\"uri\"));const r=await qb(ub(t),Aw(Aw({},this.options),{},{parse:Aw(Aw({},this.options.parse),{},{mediaType:\"text/plain\"})})),o=hb({uri:t,value:r,depth:this.reference.depth+1});return n.add(o),o},async ReferenceElement(e,t,n,r,o){var s,i,a,l,c;const[u,p]=this.toAncestorLineage([...o,n]);if(u.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Ug(e))return!1;const h=await this.toReference(null===(s=e.$ref)||void 0===s?void 0:s.toValue()),f=h.uri,d=lb(f,null===(i=e.$ref)||void 0===i?void 0:i.toValue());this.indirections.push(e);const m=Ki(d);let g=Ji(m,h.value.result);if(As(g)){const t=e.meta.get(\"referenced-element\").toValue();if(Uc(g))g=Tm.refract(g),g.setMetaProperty(\"referenced-element\",t);else{g=this.namespace.getElementClass(t).refract(g)}}if(this.indirections.includes(g))throw new Error(\"Recursive Reference Object detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);p.add(e);const y=Pw({reference:h,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:u});g=await Cw(g,y,{keyMap:Tv,nodeTypeGetter:Iv}),p.delete(e),this.indirections.pop(),g=g.clone(),g.setMetaProperty(\"ref-fields\",{$ref:null===(a=e.$ref)||void 0===a?void 0:a.toValue(),description:null===(l=e.description)||void 0===l?void 0:l.toValue(),summary:null===(c=e.summary)||void 0===c?void 0:c.toValue()}),g.setMetaProperty(\"ref-origin\",h.uri);const v=wo(Kv,[\"description\"],e),b=wo(Kv,[\"summary\"],e);return v&&Gr(\"description\",g)&&(g.description=e.description),b&&Gr(\"summary\",g)&&(g.summary=e.summary),this.indirections.pop(),g},async PathItemElement(e,t,n,r,o){var s,i,a;const[l,c]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(l.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Bg(e))return;const u=await this.toReference(null===(s=e.$ref)||void 0===s?void 0:s.toValue()),p=u.uri,h=lb(p,null===(i=e.$ref)||void 0===i?void 0:i.toValue());this.indirections.push(e);const f=Ki(h);let d=Ji(f,u.value.result);if(As(d)&&(d=Pm.refract(d)),this.indirections.includes(d))throw new Error(\"Recursive Path Item Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);c.add(e);const m=Pw({reference:u,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:l});d=await Cw(d,m,{keyMap:Tv,nodeTypeGetter:Iv}),c.delete(e),this.indirections.pop();const g=new Pm([...d.content],d.meta.clone(),d.attributes.clone());return e.forEach(((e,t,n)=>{g.remove(t.toValue()),g.content.push(n)})),g.remove(\"$ref\"),g.setMetaProperty(\"ref-fields\",{$ref:null===(a=e.$ref)||void 0===a?void 0:a.toValue()}),g.setMetaProperty(\"ref-origin\",u.uri),g},async LinkElement(e){if(!ms(e.operationRef)&&!ms(e.operationId))return;if(!this.options.resolve.external&&Tg(e))return;if(ms(e.operationRef)&&ms(e.operationId))throw new Error(\"LinkElement operationRef and operationId fields are mutually exclusive.\");let t;if(ms(e.operationRef)){var n,r,o;const s=Ki(null===(n=e.operationRef)||void 0===n?void 0:n.toValue()),i=await this.toReference(null===(r=e.operationRef)||void 0===r?void 0:r.toValue());t=Ji(s,i.value.result),As(t)&&(t=Am.refract(t)),t=new Am([...t.content],t.meta.clone(),t.attributes.clone()),t.setMetaProperty(\"ref-origin\",i.uri),null===(o=e.operationRef)||void 0===o||o.meta.set(\"operation\",t)}else if(ms(e.operationId)){var s,i;const n=null===(s=e.operationId)||void 0===s?void 0:s.toValue();if(t=Vb((e=>Dg(e)&&e.operationId.equals(n)),this.reference.value.result),qo(t))throw new Error(`OperationElement(operationId=${n}) not found.`);null===(i=e.operationId)||void 0===i||i.meta.set(\"operation\",t)}},async ExampleElement(e){var t;if(!ms(e.externalValue))return;if(!this.options.resolve.external&&ms(e.externalValue))return;if(e.hasKey(\"value\")&&ms(e.externalValue))throw new Error(\"ExampleElement value and externalValue fields are mutually exclusive.\");const n=await this.toReference(null===(t=e.externalValue)||void 0===t?void 0:t.toValue()),r=new n.value.result.constructor(n.value.result.content,n.value.result.meta.clone(),n.value.result.attributes.clone());r.setMetaProperty(\"ref-origin\",n.uri),e.value=r},async SchemaElement(e,t,n,r,o){var s;const[i,a]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(i.some((t=>t.has(e))))return!1;let{reference:l}=this,{uri:c}=l;const u=Yb(c,e),p=ib(u),h=vb({uri:p}),f=go((e=>e.canRead(h)),this.options.resolve.resolvers),d=!f,m=d&&c!==p;if(!this.options.resolve.external&&m)return;let g;this.indirections.push(e);try{if(f||d){g=ew(u,Qb(l.value.result))}else{l=await this.toReference(ub(u));const e=Ki(u);g=Qb(Ji(e,l.value.result))}}catch(e){if(!(d&&e instanceof zb))throw e;if(Hb(Gb(u))){l=await this.toReference(ub(u)),c=l.uri;const e=Gb(u);g=Zb(e,Qb(l.value.result))}else{l=await this.toReference(ub(u)),c=l.uri;const e=Ki(u);g=Qb(Ji(e,l.value.result))}}if(this.indirections.includes(g))throw new Error(\"Recursive Schema Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);a.add(e);const y=Pw({reference:l,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:i});if(g=await Cw(g,y,{keyMap:Tv,nodeTypeGetter:Iv}),a.delete(e),this.indirections.pop(),Kg(g)){var v;const t=g.clone();return t.setMetaProperty(\"ref-fields\",{$ref:null===(v=e.$ref)||void 0===v?void 0:v.toValue()}),t.setMetaProperty(\"ref-origin\",l.uri),t}const b=new Lm([...g.content],g.meta.clone(),g.attributes.clone());return e.forEach(((e,t,n)=>{b.remove(t.toValue()),b.content.push(n)})),b.remove(\"$ref\"),b.setMetaProperty(\"ref-fields\",{$ref:null===(s=e.$ref)||void 0===s?void 0:s.toValue()}),b.setMetaProperty(\"ref-origin\",l.uri),b}}}),Nw=Pw,Iw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],Tw=Ys(Ow,{init(){this.name=\"openapi-3-1\"},methods:{canDereference(e){var t;return\"text/plain\"!==e.mediaType?zv.includes(e.mediaType):Mg(null===(t=e.parseResult)||void 0===t?void 0:t.result)},async dereference(e,t){const n=zs(Rv),r=kr(db(),t.dereference.refSet);let o;r.has(e.uri)?o=r.find(xo(e.uri,\"uri\")):(o=hb({uri:e.uri,value:e.parseResult}),r.add(o));const s=Nw({reference:o,namespace:n,options:t}),i=await Iw(r.rootRef.value,s,{keyMap:Tv,nodeTypeGetter:Iv});return null===t.dereference.refSet&&r.clean(),i}}}),Rw=Tw,Mw=e=>{const t=(e=>e.slice(2))(e);return t.reduce(((e,n,r)=>{if(Es(n)){const t=String(n.key.toValue());e.push(t)}else if(ws(t[r-2])){const o=t[r-2].content.indexOf(n);e.push(o)}return e}),[])},Dw=e=>{if(null==e.cause)return e;let{cause:t}=e;for(;null!=t.cause;)t=t.cause;return t},Fw=ue(\"SchemaRefError\",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),{wrapError:Lw}=ke,Bw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],$w=Nw.compose({props:{useCircularStructures:!0,allowMetaPatches:!1,basePath:null},init(e){let{allowMetaPatches:t=this.allowMetaPatches,useCircularStructures:n=this.useCircularStructures,basePath:r=this.basePath}=e;this.allowMetaPatches=t,this.useCircularStructures=n,this.basePath=r},methods:{async ReferenceElement(e,t,n,r,o){try{const[t,r]=this.toAncestorLineage([...o,n]);if(Ns([\"cycle\"],e.$ref))return!1;if(t.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Ug(e))return!1;const s=await this.toReference(e.$ref.toValue()),i=s.uri,a=lb(i,e.$ref.toValue());this.indirections.push(e);const l=Ki(a);let c=Ji(l,s.value.result);if(As(c)){const t=e.meta.get(\"referenced-element\").toValue();if(Uc(c))c=Tm.refract(c),c.setMetaProperty(\"referenced-element\",t);else{const e=this.namespace.getElementClass(t);c=e.refract(c)}}if(this.indirections.includes(c))throw new Error(\"Recursive JSON Pointer detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);if(!this.useCircularStructures){if(t.some((e=>e.has(c)))){if(rb(i)||nb(i)){const t=new Tm({$ref:a},e.meta.clone(),e.attributes.clone());return t.get(\"$ref\").classes.push(\"cycle\"),t}return!1}}r.add(e);const u=$w({reference:s,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:t,allowMetaPatches:this.allowMetaPatches,useCircularStructures:this.useCircularStructures,basePath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});c=await Bw(c,u,{keyMap:Tv,nodeTypeGetter:Iv}),r.delete(e),this.indirections.pop(),c=c.clone(),c.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue(),description:e.description?.toValue(),summary:e.summary?.toValue()}),c.setMetaProperty(\"ref-origin\",s.uri);const p=void 0!==e.description,h=void 0!==e.summary;if(p&&\"description\"in c&&(c.description=e.description),h&&\"summary\"in c&&(c.summary=e.summary),this.allowMetaPatches&&bs(c)){const e=c;if(void 0===e.get(\"$$ref\")){const t=lb(i,a);e.set(\"$$ref\",t)}}return c}catch(t){const r=Dw(t),s=Lw(r,{baseDoc:this.reference.uri,$ref:e.$ref.toValue(),pointer:Ki(e.$ref.toValue()),fullPath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}},async PathItemElement(e,t,n,r,o){try{const[t,r]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(Ns([\"cycle\"],e.$ref))return!1;if(t.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Bg(e))return;const s=await this.toReference(e.$ref.toValue()),i=s.uri,a=lb(i,e.$ref.toValue());this.indirections.push(e);const l=Ki(a);let c=Ji(l,s.value.result);if(As(c)&&(c=Pm.refract(c)),this.indirections.includes(c))throw new Error(\"Recursive JSON Pointer detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);if(!this.useCircularStructures){if(t.some((e=>e.has(c)))){if(rb(i)||nb(i)){const t=new Pm({$ref:a},e.meta.clone(),e.attributes.clone());return t.get(\"$ref\").classes.push(\"cycle\"),t}return!1}}r.add(e);const u=$w({reference:s,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:t,allowMetaPatches:this.allowMetaPatches,useCircularStructures:this.useCircularStructures,basePath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});c=await Bw(c,u,{keyMap:Tv,nodeTypeGetter:Iv}),r.delete(e),this.indirections.pop();const p=new Pm([...c.content],c.meta.clone(),c.attributes.clone());if(e.forEach(((e,t,n)=>{p.remove(t.toValue()),p.content.push(n)})),p.remove(\"$ref\"),p.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue()}),p.setMetaProperty(\"ref-origin\",s.uri),this.allowMetaPatches&&void 0===p.get(\"$$ref\")){const e=lb(i,a);p.set(\"$$ref\",e)}return p}catch(t){const r=Dw(t),s=Lw(r,{baseDoc:this.reference.uri,$ref:e.$ref.toValue(),pointer:Ki(e.$ref.toValue()),fullPath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}},async SchemaElement(e,t,n,r,o){try{const[t,r]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(Ns([\"cycle\"],e.$ref))return!1;if(t.some((t=>t.has(e))))return!1;let{reference:s}=this,{uri:i}=s;const a=Yb(i,e),l=ib(a),c=vb({uri:l}),u=!this.options.resolve.resolvers.some((e=>e.canRead(c))),p=!u,h=p&&i!==l;if(!this.options.resolve.external&&h)return;let f;this.indirections.push(e);try{if(u||p){f=ew(a,Qb(s.value.result))}else{s=await this.toReference(ub(a)),i=s.uri;const e=Ki(a);f=Qb(Ji(e,s.value.result))}}catch(e){if(!(p&&e instanceof zb))throw e;if(Hb(Gb(a))){s=await this.toReference(ub(a)),i=s.uri;const e=Gb(a);f=Zb(e,Qb(s.value.result))}else{s=await this.toReference(ub(a)),i=s.uri;const e=Ki(a);f=Qb(Ji(e,s.value.result))}}if(this.indirections.includes(f))throw new Error(\"Recursive Schema Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);if(!this.useCircularStructures){if(t.some((e=>e.has(f)))){if(rb(i)||nb(i)){const t=lb(i,a),n=new Lm({$ref:t},e.meta.clone(),e.attributes.clone());return n.get(\"$ref\").classes.push(\"cycle\"),n}return!1}}r.add(e);const d=$w({reference:s,namespace:this.namespace,indirections:[...this.indirections],options:this.options,useCircularStructures:this.useCircularStructures,allowMetaPatches:this.allowMetaPatches,ancestors:t,basePath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});if(f=await Bw(f,d,{keyMap:Tv,nodeTypeGetter:Iv}),r.delete(e),this.indirections.pop(),Kg(f)){const t=f.clone();return t.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue()}),t.setMetaProperty(\"ref-origin\",i),t}const m=new Lm([...f.content],f.meta.clone(),f.attributes.clone());if(e.forEach(((e,t,n)=>{m.remove(t.toValue()),m.content.push(n)})),m.remove(\"$ref\"),m.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue()}),m.setMetaProperty(\"ref-origin\",i),this.allowMetaPatches&&void 0===m.get(\"$$ref\")){const e=lb(i,a);m.set(\"$$ref\",e)}return m}catch(t){const r=Dw(t),s=new Fw(`Could not resolve reference: ${r.message}`,{baseDoc:this.reference.uri,$ref:e.$ref.toValue(),fullPath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]},r);return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}},async LinkElement(){},async ExampleElement(e,t,n,r,o){try{return await Nw.compose.methods.ExampleElement.call(this,e,t,n,r,o)}catch(t){const r=Dw(t),s=Lw(r,{baseDoc:this.reference.uri,externalValue:e.externalValue?.toValue(),fullPath:this.basePath??[...Mw([...o,n,e]),\"externalValue\"]});return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}}}}),qw=$w,Uw=Rw.compose.bind(),zw=Uw({init(e){let{parameterMacro:t,options:n}=e;this.parameterMacro=t,this.options=n},props:{parameterMacro:null,options:null,macroOperation:null,OperationElement:{enter(e){this.macroOperation=e},leave(){this.macroOperation=null}},ParameterElement:{leave(e,t,n,r,o){const s=null===this.macroOperation?null:Ti(this.macroOperation),i=Ti(e);try{const t=this.parameterMacro(s,i);e.set(\"default\",t)}catch(e){const t=new Error(e,{cause:e});t.fullPath=Mw([...o,n]),this.options.dereference.dereferenceOpts?.errors?.push?.(t)}}}}}),Vw=Uw({init(e){let{modelPropertyMacro:t,options:n}=e;this.modelPropertyMacro=t,this.options=n},props:{modelPropertyMacro:null,options:null,SchemaElement:{leave(e,t,n,r,o){void 0!==e.properties&&bs(e.properties)&&e.properties.forEach((t=>{if(bs(t))try{const e=this.modelPropertyMacro(Ti(t));t.set(\"default\",e)}catch(t){const r=new Error(t,{cause:t});r.fullPath=[...Mw([...o,n,e]),\"properties\"],this.options.dereference.dereferenceOpts?.errors?.push?.(r)}}))}}}});function Ww(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Jw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ww(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ww(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Kw=e=>{const t=e.meta.clone(),n=e.attributes.clone();return new e.constructor(void 0,t,n)},Hw=e=>new Pt.c6(e.key,e.value,e.meta.clone(),e.attributes.clone()),Gw=(e,t)=>t.clone&&t.isMergeableElement(e)?Xw(Kw(e),e,t):e,Zw=(e,t,n)=>e.concat(t)[\"fantasy-land/map\"]((e=>Gw(e,n))),Yw=(e,t,n)=>{const r=bs(e)?Kw(e):Kw(t);return bs(e)&&e.forEach(((e,t,o)=>{const s=Hw(o);s.value=Gw(e,n),r.content.push(s)})),t.forEach(((t,o,s)=>{const i=o.toValue();let a;if(bs(e)&&e.hasKey(i)&&n.isMergeableElement(t)){const r=e.get(i);a=Hw(s),a.value=((e,t)=>{if(\"function\"!=typeof t.customMerge)return Xw;const n=t.customMerge(e,t);return\"function\"==typeof n?n:Xw})(o,n)(r,t)}else a=Hw(s),a.value=Gw(t,n);r.remove(i),r.content.push(a)})),r};function Xw(e,t,n){var r,o,s;const i={clone:!0,isMergeableElement:e=>bs(e)||ws(e),arrayElementMerge:Zw,objectElementMerge:Yw,customMerge:void 0},a=Jw(Jw({},i),n);a.isMergeableElement=null!==(r=a.isMergeableElement)&&void 0!==r?r:i.isMergeableElement,a.arrayElementMerge=null!==(o=a.arrayElementMerge)&&void 0!==o?o:i.arrayElementMerge,a.objectElementMerge=null!==(s=a.objectElementMerge)&&void 0!==s?s:i.objectElementMerge;const l=ws(t);return l===ws(e)?l&&\"function\"==typeof a.arrayElementMerge?a.arrayElementMerge(e,t,a):a.objectElementMerge(e,t,a):Gw(t,a)}Xw.all=(e,t)=>{if(!Array.isArray(e))throw new Error(\"first argument should be an array\");return 0===e.length?new Pt.Sb:e.reduce(((e,n)=>Xw(e,n,t)),Kw(e[0]))};const Qw=Uw({init(e){let{options:t}=e;this.options=t},props:{options:null,SchemaElement:{leave(e,t,n,r,o){if(void 0===e.allOf)return;if(!ws(e.allOf)){const t=new TypeError(\"allOf must be an array\");return t.fullPath=[...Mw([...o,n,e]),\"allOf\"],void this.options.dereference.dereferenceOpts?.errors?.push?.(t)}if(e.allOf.isEmpty)return new Lm(e.content.filter((e=>\"allOf\"!==e.key.toValue())),e.meta.clone(),e.attributes.clone());if(!e.allOf.content.every(Jg)){const t=new TypeError(\"Elements in allOf must be objects\");return t.fullPath=[...Mw([...o,n,e]),\"allOf\"],void this.options.dereference.dereferenceOpts?.errors?.push?.(t)}const s=Xw.all([...e.allOf.content,e]);if(e.hasKey(\"$$ref\")||s.remove(\"$$ref\"),e.hasKey(\"example\")){s.getMember(\"example\").value=e.get(\"example\")}if(e.hasKey(\"examples\")){s.getMember(\"examples\").value=e.get(\"examples\")}return s.remove(\"allOf\"),s}}}}),eE=fi[Symbol.for(\"nodejs.util.promisify.custom\")],tE=Rw.compose({props:{useCircularStructures:!0,allowMetaPatches:!1,parameterMacro:null,modelPropertyMacro:null,mode:\"non-strict\",ancestors:null},init(){let{useCircularStructures:e=this.useCircularStructures,allowMetaPatches:t=this.allowMetaPatches,parameterMacro:n=this.parameterMacro,modelPropertyMacro:r=this.modelPropertyMacro,mode:o=this.mode,ancestors:s=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.name=\"openapi-3-1-swagger-client\",this.useCircularStructures=e,this.allowMetaPatches=t,this.parameterMacro=n,this.modelPropertyMacro=r,this.mode=o,this.ancestors=[...s]},methods:{async dereference(e,t){const n=[],r=zs(Rv),o=t.dereference.refSet??db();let s;o.has(e.uri)?s=o.find((t=>t.uri===e.uri)):(s=hb({uri:e.uri,value:e.parseResult}),o.add(s));const i=qw({reference:s,namespace:r,options:t,useCircularStructures:this.useCircularStructures,allowMetaPatches:this.allowMetaPatches,ancestors:this.ancestors});if(n.push(i),\"function\"==typeof this.parameterMacro){const e=zw({parameterMacro:this.parameterMacro,options:t});n.push(e)}if(\"function\"==typeof this.modelPropertyMacro){const e=Vw({modelPropertyMacro:this.modelPropertyMacro,options:t});n.push(e)}if(\"strict\"!==this.mode){const e=Qw({options:t});n.push(e)}const a=ri(n,{nodeTypeGetter:Iv}),l=await eE(o.rootRef.value,a,{keyMap:Tv,nodeTypeGetter:Iv});return null===t.dereference.refSet&&o.clean(),l}}}),nE=tE,rE=async e=>{const{spec:t,timeout:n,redirects:r,requestInterceptor:o,responseInterceptor:s,pathDiscriminator:i=[],allowMetaPatches:a=!1,useCircularStructures:l=!1,skipNormalization:c=!1,parameterMacro:u=null,modelPropertyMacro:p=null,mode:h=\"non-strict\"}=e;try{const{cache:d}=rE,m=rb(ab())?ab():\"https://smartbear.com/\",g=Et(e),y=lb(m,g);let v;d.has(t)?v=d.get(t):(v=km.refract(t),v.classes.push(\"result\"),d.set(t,v));const b=new zo([v]),w=0===(f=i).length?\"\":`/${f.map(Vi).join(\"/\")}`,E=\"\"===w?\"\":`#${w}`,x=Ji(w,v),S=hb({uri:y,value:b}),_=db({refs:[S]});\"\"!==w&&(_.rootRef=null);const j=[new WeakSet([x])],O=[],k=((e,t,n)=>Ei({element:n}).transclude(e,t))(x,await Ab(x,{resolve:{baseURI:`${y}${E}`,resolvers:[Ew({timeout:n||1e4,redirects:r||10})],resolverOpts:{swaggerHTTPClientConfig:{requestInterceptor:o,responseInterceptor:s}},strategies:[lw()]},parse:{mediaType:zv.latest(),parsers:[_w({allowEmpty:!1,sourceMap:!1}),jw({allowEmpty:!1,sourceMap:!1}),xw({allowEmpty:!1,sourceMap:!1}),Sw({allowEmpty:!1,sourceMap:!1}),Ib({allowEmpty:!1,sourceMap:!1})]},dereference:{maxDepth:100,strategies:[nE({allowMetaPatches:a,useCircularStructures:l,parameterMacro:u,modelPropertyMacro:p,mode:h,ancestors:j})],refSet:_,dereferenceOpts:{errors:O}}}),v),A=c?k:bw(k);return{spec:Ti(A),errors:O}}catch(e){if(e instanceof Ui||e instanceof zi)return{spec:null,errors:[]};throw e}var f};rE.cache=new WeakMap;const oE=rE,sE={name:\"openapi-3-1-apidom\",match(e){let{spec:t}=e;return Ot(t)},normalize(e){let{spec:t}=e;return vw(bw)(t)},resolve:async e=>oE(e)},iE=e=>async t=>(async e=>{const{spec:t,requestInterceptor:n,responseInterceptor:r}=e,o=Et(e),s=xt(e),i=t||await Ze(s,{requestInterceptor:n,responseInterceptor:r})(o),a=f()(f()({},e),{},{spec:i});return e.strategies.find((e=>e.match(a))).resolve(a)})(f()(f()({},e),t)),aE=iE({strategies:[Ct,At,_t]});var lE=n(88436),cE=n.n(lE),uE=n(27361),pE=n.n(uE),hE=n(76489);function fE(e){return\"[object Object]\"===Object.prototype.toString.call(e)}function dE(e){var t,n;return!1!==fE(e)&&(void 0===(t=e.constructor)||!1!==fE(n=t.prototype)&&!1!==n.hasOwnProperty(\"isPrototypeOf\"))}const mE={body:function(e){let{req:t,value:n}=e;t.body=n},header:function(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{},void 0!==r&&(t.headers[n.name]=r)},query:function(e){let{req:t,value:n,parameter:r}=e;t.query=t.query||{},!1===n&&\"boolean\"===r.type&&(n=\"false\");0===n&&[\"number\",\"integer\"].indexOf(r.type)>-1&&(n=\"0\");if(n)t.query[r.name]={collectionFormat:r.collectionFormat,value:n};else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}},path:function(e){let{req:t,value:n,parameter:r}=e;t.url=t.url.split(`{${r.name}}`).join(encodeURIComponent(n))},formData:function(e){let{req:t,value:n,parameter:r}=e;(n||r.allowEmptyValue)&&(t.form=t.form||{},t.form[r.name]={value:n,allowEmptyValue:r.allowEmptyValue,collectionFormat:r.collectionFormat})}};function gE(e,t){return t.includes(\"application/json\")?\"string\"==typeof e?e:JSON.stringify(e):e.toString()}function yE(e){let{req:t,value:n,parameter:r}=e;const{name:o,style:s,explode:i,content:a}=r;if(a){const e=Object.keys(a)[0];return void(t.url=t.url.split(`{${o}}`).join(st(gE(n,e),{escape:!0})))}const l=it({key:r.name,value:n,style:s||\"simple\",explode:i||!1,escape:!0});t.url=t.url.split(`{${o}}`).join(l)}function vE(e){let{req:t,value:n,parameter:r}=e;if(t.query=t.query||{},r.content){const e=gE(n,Object.keys(r.content)[0]);if(e)t.query[r.name]=e;else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}else if(!1===n&&(n=\"false\"),0===n&&(n=\"0\"),n){const{style:e,explode:o,allowReserved:s}=r;t.query[r.name]={value:n,serializationOption:{style:e,explode:o,allowReserved:s}}}else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}const bE=[\"accept\",\"authorization\",\"content-type\"];function wE(e){let{req:t,parameter:n,value:r}=e;if(t.headers=t.headers||{},!(bE.indexOf(n.name.toLowerCase())>-1))if(n.content){const e=Object.keys(n.content)[0];t.headers[n.name]=gE(r,e)}else void 0!==r&&(t.headers[n.name]=it({key:n.name,value:r,style:n.style||\"simple\",explode:void 0!==n.explode&&n.explode,escape:!1}))}function EE(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{};const o=typeof r;if(n.content){const e=Object.keys(n.content)[0];t.headers.Cookie=`${n.name}=${gE(r,e)}`}else if(\"undefined\"!==o){const e=\"object\"===o&&!Array.isArray(r)&&n.explode?\"\":`${n.name}=`;t.headers.Cookie=e+it({key:n.name,value:r,escape:!1,style:n.style||\"form\",explode:void 0!==n.explode&&n.explode})}}const xE=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:window,{btoa:SE}=xE,_E=SE;function jE(e,t){const{operation:n,requestBody:r,securities:o,spec:s,attachContentTypeForEmptyPayload:i}=e;let{requestContentType:a}=e;t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const s=f()({},t),{authorized:i={}}=n,a=r.security||o.security||[],l=i&&!!Object.keys(i).length,c=pE()(o,[\"components\",\"securitySchemes\"])||{};if(s.headers=s.headers||{},s.query=s.query||{},!Object.keys(n).length||!l||!a||Array.isArray(r.security)&&!r.security.length)return t;return a.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e],n=c[e];if(!t)return;const r=t.value||t,{type:o}=n;if(t)if(\"apiKey\"===o)\"query\"===n.in&&(s.query[n.name]=r),\"header\"===n.in&&(s.headers[n.name]=r),\"cookie\"===n.in&&(s.cookies[n.name]=r);else if(\"http\"===o){if(/^basic$/i.test(n.scheme)){const e=r.username||\"\",t=r.password||\"\",n=_E(`${e}:${t}`);s.headers.Authorization=`Basic ${n}`}/^bearer$/i.test(n.scheme)&&(s.headers.Authorization=`Bearer ${r}`)}else if(\"oauth2\"===o||\"openIdConnect\"===o){const e=t.token||{},r=e[n[\"x-tokenName\"]||\"access_token\"];let o=e.token_type;o&&\"bearer\"!==o.toLowerCase()||(o=\"Bearer\"),s.headers.Authorization=`${o} ${r}`}}))})),s}({request:t,securities:o,operation:n,spec:s});const l=n.requestBody||{},c=Object.keys(l.content||{}),u=a&&c.indexOf(a)>-1;if(r||i){if(a&&u)t.headers[\"Content-Type\"]=a;else if(!a){const e=c[0];e&&(t.headers[\"Content-Type\"]=e,a=e)}}else a&&u&&(t.headers[\"Content-Type\"]=a);if(!e.responseContentType&&n.responses){const e=Object.entries(n.responses).filter((e=>{let[t,n]=e;const r=parseInt(t,10);return r>=200&&r<300&&dE(n.content)})).reduce(((e,t)=>{let[,n]=t;return e.concat(Object.keys(n.content))}),[]);e.length>0&&(t.headers.accept=e.join(\", \"))}if(r)if(a){if(c.indexOf(a)>-1)if(\"application/x-www-form-urlencoded\"===a||\"multipart/form-data\"===a)if(\"object\"==typeof r){const e=(l.content[a]||{}).encoding||{};t.form={},Object.keys(r).forEach((n=>{t.form[n]={value:r[n],encoding:e[n]||{}}}))}else t.form=r;else t.body=r}else t.body=r;return t}function OE(e,t){const{spec:n,operation:r,securities:o,requestContentType:s,responseContentType:i,attachContentTypeForEmptyPayload:a}=e;if(t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const s=f()({},t),{authorized:i={},specSecurity:a=[]}=n,l=r.security||a,c=i&&!!Object.keys(i).length,u=o.securityDefinitions;if(s.headers=s.headers||{},s.query=s.query||{},!Object.keys(n).length||!c||!l||Array.isArray(r.security)&&!r.security.length)return t;return l.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e];if(!t)return;const{token:n}=t,r=t.value||t,o=u[e],{type:a}=o,l=o[\"x-tokenName\"]||\"access_token\",c=n&&n[l];let p=n&&n.token_type;if(t)if(\"apiKey\"===a){const e=\"query\"===o.in?\"query\":\"headers\";s[e]=s[e]||{},s[e][o.name]=r}else if(\"basic\"===a)if(r.header)s.headers.authorization=r.header;else{const e=r.username||\"\",t=r.password||\"\";r.base64=_E(`${e}:${t}`),s.headers.authorization=`Basic ${r.base64}`}else\"oauth2\"===a&&c&&(p=p&&\"bearer\"!==p.toLowerCase()?p:\"Bearer\",s.headers.authorization=`${p} ${c}`)}))})),s}({request:t,securities:o,operation:r,spec:n}),t.body||t.form||a)s?t.headers[\"Content-Type\"]=s:Array.isArray(r.consumes)?[t.headers[\"Content-Type\"]]=r.consumes:Array.isArray(n.consumes)?[t.headers[\"Content-Type\"]]=n.consumes:r.parameters&&r.parameters.filter((e=>\"file\"===e.type)).length?t.headers[\"Content-Type\"]=\"multipart/form-data\":r.parameters&&r.parameters.filter((e=>\"formData\"===e.in)).length&&(t.headers[\"Content-Type\"]=\"application/x-www-form-urlencoded\");else if(s){const e=r.parameters&&r.parameters.filter((e=>\"body\"===e.in)).length>0,n=r.parameters&&r.parameters.filter((e=>\"formData\"===e.in)).length>0;(e||n)&&(t.headers[\"Content-Type\"]=s)}return!i&&Array.isArray(r.produces)&&r.produces.length>0&&(t.headers.accept=r.produces.join(\", \")),t}function kE(e,t){return`${t.toLowerCase()}-${e}`}const AE=[\"http\",\"fetch\",\"spec\",\"operationId\",\"pathName\",\"method\",\"parameters\",\"securities\"],CE=e=>Array.isArray(e)?e:[],PE=ue(\"OperationNotFoundError\",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),NE=(e,t)=>t.filter((t=>t.name===e)),IE=e=>{const t={};e.forEach((e=>{t[e.in]||(t[e.in]={}),t[e.in][e.name]=e}));const n=[];return Object.keys(t).forEach((e=>{Object.keys(t[e]).forEach((r=>{n.push(t[e][r])}))})),n},TE={buildRequest:ME};function RE(e){let{http:t,fetch:n,spec:r,operationId:o,pathName:s,method:i,parameters:a,securities:l}=e,c=cE()(e,AE);const u=t||n||ct;s&&i&&!o&&(o=kE(s,i));const p=TE.buildRequest(f()({spec:r,operationId:o,parameters:a,securities:l,http:u},c));return p.body&&(dE(p.body)||Array.isArray(p.body))&&(p.body=JSON.stringify(p.body)),u(p)}function ME(e){const{spec:t,operationId:n,responseContentType:r,scheme:o,requestInterceptor:s,responseInterceptor:i,contextUrl:a,userFetch:l,server:c,serverVariables:p,http:h,signal:d}=e;let{parameters:m,parameterBuilders:g}=e;const y=kt(t);g||(g=y?u:mE);let v={url:\"\",credentials:h&&h.withCredentials?\"include\":\"same-origin\",headers:{},cookies:{}};d&&(v.signal=d),s&&(v.requestInterceptor=s),i&&(v.responseInterceptor=i),l&&(v.userFetch=l);const b=function(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||\"object\"!=typeof e||!e.paths||\"object\"!=typeof e.paths)return null;const{paths:r}=e;for(const o in r)for(const s in r[o]){if(\"PARAMETERS\"===s.toUpperCase())continue;const i=r[o][s];if(!i||\"object\"!=typeof i)continue;const a={spec:e,pathName:o,method:s.toUpperCase(),operation:i},l=t(a);if(n&&l)return a}}(e,t,!0)||null}(e,(e=>{let{pathName:n,method:r,operation:o}=e;if(!o||\"object\"!=typeof o)return!1;const s=o.operationId;return[(0,He.Z)(o,n,r),kE(n,r),s].some((e=>e&&e===t))})):null}(t,n);if(!b)throw new PE(`Operation ${n} not found`);const{operation:w={},method:E,pathName:x}=b;if(v.url+=function(e){const t=kt(e.spec);return t?function(e){let{spec:t,pathName:n,method:r,server:o,contextUrl:s,serverVariables:i={}}=e;const a=pE()(t,[\"paths\",n,(r||\"\").toLowerCase(),\"servers\"])||pE()(t,[\"paths\",n,\"servers\"])||pE()(t,[\"servers\"]);let l=\"\",c=null;if(o&&a&&a.length){const e=a.map((e=>e.url));e.indexOf(o)>-1&&(l=o,c=a[e.indexOf(o)])}!l&&a&&a.length&&(l=a[0].url,[c]=a);if(l.indexOf(\"{\")>-1){(function(e){const t=[],n=/{([^}]+)}/g;let r;for(;r=n.exec(e);)t.push(r[1]);return t})(l).forEach((e=>{if(c.variables&&c.variables[e]){const t=c.variables[e],n=i[e]||t.default,r=new RegExp(`{${e}}`,\"g\");l=l.replace(r,n)}}))}return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";const n=e&&t?ce.parse(ce.resolve(t,e)):ce.parse(e),r=ce.parse(t),o=DE(n.protocol)||DE(r.protocol)||\"\",s=n.host||r.host,i=n.pathname||\"\";let a;a=o&&s?`${o}://${s+i}`:i;return\"/\"===a[a.length-1]?a.slice(0,-1):a}(l,s)}(e):function(e){let{spec:t,scheme:n,contextUrl:r=\"\"}=e;const o=ce.parse(r),s=Array.isArray(t.schemes)?t.schemes[0]:null,i=n||s||DE(o.protocol)||\"http\",a=t.host||o.host||\"\",l=t.basePath||\"\";let c;c=i&&a?`${i}://${a+l}`:l;return\"/\"===c[c.length-1]?c.slice(0,-1):c}(e)}({spec:t,scheme:o,contextUrl:a,server:c,serverVariables:p,pathName:x,method:E}),!n)return delete v.cookies,v;v.url+=x,v.method=`${E}`.toUpperCase(),m=m||{};const S=t.paths[x]||{};r&&(v.headers.accept=r);const _=IE([].concat(CE(w.parameters)).concat(CE(S.parameters)));_.forEach((e=>{const n=g[e.in];let r;if(\"body\"===e.in&&e.schema&&e.schema.properties&&(r=m),r=e&&e.name&&m[e.name],void 0===r?r=e&&e.name&&m[`${e.in}.${e.name}`]:NE(e.name,_).length>1&&console.warn(`Parameter '${e.name}' is ambiguous because the defined spec has more than one parameter with the name: '${e.name}' and the passed-in parameter values did not define an 'in' value.`),null!==r){if(void 0!==e.default&&void 0===r&&(r=e.default),void 0===r&&e.required&&!e.allowEmptyValue)throw new Error(`Required parameter ${e.name} is not provided`);if(y&&e.schema&&\"object\"===e.schema.type&&\"string\"==typeof r)try{r=JSON.parse(r)}catch(e){throw new Error(\"Could not parse object parameter value string as JSON\")}n&&n({req:v,parameter:e,value:r,operation:w,spec:t})}}));const j=f()(f()({},e),{},{operation:w});if(v=y?jE(j,v):OE(j,v),v.cookies&&Object.keys(v.cookies).length){const e=Object.keys(v.cookies).reduce(((e,t)=>{const n=v.cookies[t];return e+(e?\"&\":\"\")+hE.serialize(t,n)}),\"\");v.headers.Cookie=e}return v.cookies&&delete v.cookies,wt(v),v}const DE=e=>e?e.replace(/\\W/g,\"\"):null;const FE=e=>async function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{returnEntireTree:r,baseDoc:o,requestInterceptor:s,responseInterceptor:i,parameterMacro:a,modelPropertyMacro:l,useCircularStructures:c,strategies:u}=n,p={spec:e,pathDiscriminator:t,baseDoc:o,requestInterceptor:s,responseInterceptor:i,parameterMacro:a,modelPropertyMacro:l,useCircularStructures:c,strategies:u},h=u.find((e=>e.match(p))).normalize(p),d=await aE(f()(f()({},p),{},{spec:h,allowMetaPatches:!0,skipNormalization:!0}));return!r&&Array.isArray(t)&&t.length&&(d.spec=pE()(d.spec,t)||null),d}(t,n,f()(f()({},e),r))};FE({strategies:[Ct,At,_t]});var LE=n(34852);function BE(e){let{configs:t,getConfigs:n}=e;return{fn:{fetch:(r=ct,o=t.preFetch,s=t.postFetch,s=s||(e=>e),o=o||(e=>e),e=>(\"string\"==typeof e&&(e={url:e}),lt.mergeInQueryOrForm(e),e=o(e),s(r(e)))),buildRequest:ME,execute:RE,resolve:iE({strategies:[sE,Ct,At,_t]}),resolveSubtree:async function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=n(),s={modelPropertyMacro:o.modelPropertyMacro,parameterMacro:o.parameterMacro,requestInterceptor:o.requestInterceptor,responseInterceptor:o.responseInterceptor,strategies:[sE,Ct,At,_t]};return FE(s)(e,t,r)},serializeRes:pt,opId:He.Z},statePlugins:{configs:{wrapActions:{loaded:LE.loaded}}}};var r,o,s}},98525:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(90242);function o(){return{fn:{shallowEqualKeys:r.be}}}},48347:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getDisplayName:()=>r});const r=e=>e.displayName||e.name||\"Component\"},73420:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(35627),o=n.n(r),s=n(90242),i=n(11092),a=n(48347),l=n(60314);const c=e=>{let{getComponents:t,getStore:n,getSystem:r}=e;const c=(u=(0,i.getComponent)(r,n,t),(0,s.HP)(u,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return o()(t)})));var u;const p=(e=>(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t})))((0,i.withMappedContainer)(r,n,c));return{rootInjects:{getComponent:c,makeMappedContainer:p,render:(0,i.render)(r,n,i.getComponent,t)},fn:{getDisplayName:a.getDisplayName}}}},11092:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getComponent:()=>X,render:()=>Y,withMappedContainer:()=>Z});var r=n(23101),o=n.n(r),s=n(28222),i=n.n(s),a=n(67294),l=n(73935),c=n(97779),u=n(61688),p=n(52798);let h=function(e){e()};const f=()=>h,d=(0,a.createContext)(null);let m=null;var g=n(87462),y=n(63366),v=n(8679),b=n.n(v),w=n(59864);const E=[\"initMapStateToProps\",\"initMapDispatchToProps\",\"initMergeProps\"];function x(e,t,n,r,{areStatesEqual:o,areOwnPropsEqual:s,areStatePropsEqual:i}){let a,l,c,u,p,h=!1;function f(h,f){const d=!s(f,l),m=!o(h,a,f,l);return a=h,l=f,d&&m?(c=e(a,l),t.dependsOnOwnProps&&(u=t(r,l)),p=n(c,u,l),p):d?(e.dependsOnOwnProps&&(c=e(a,l)),t.dependsOnOwnProps&&(u=t(r,l)),p=n(c,u,l),p):m?function(){const t=e(a,l),r=!i(t,c);return c=t,r&&(p=n(c,u,l)),p}():p}return function(o,s){return h?f(o,s):(a=o,l=s,c=e(a,l),u=t(r,l),p=n(c,u,l),h=!0,p)}}function S(e){return function(t){const n=e(t);function r(){return n}return r.dependsOnOwnProps=!1,r}}function _(e){return e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function j(e,t){return function(t,{displayName:n}){const r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e,void 0)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=_(e);let o=r(t,n);return\"function\"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=_(o),o=r(t,n)),o},r}}function O(e,t){return(n,r)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${r.wrappedComponentName}.`)}}function k(e,t,n){return(0,g.Z)({},n,e,t)}const A={notify(){},get:()=>[]};function C(e,t){let n,r=A;function o(){i.onStateChange&&i.onStateChange()}function s(){n||(n=t?t.addNestedSub(o):e.subscribe(o),r=function(){const e=f();let t=null,n=null;return{clear(){t=null,n=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],n=t;for(;n;)e.push(n),n=n.next;return e},subscribe(e){let r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())}const i={addNestedSub:function(e){return s(),r.subscribe(e)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:o,isSubscribed:function(){return Boolean(n)},trySubscribe:s,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=A)},getListeners:()=>r};return i}const P=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement)?a.useLayoutEffect:a.useEffect;function N(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function I(e,t){if(N(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!N(e[n[r]],t[n[r]]))return!1;return!0}const T=[\"reactReduxForwardedRef\"];let R=()=>{throw new Error(\"uSES not initialized!\")};const M=[null,null];function D(e,t,n,r,o,s){e.current=r,n.current=!1,o.current&&(o.current=null,s())}function F(e,t){return e===t}const L=function(e,t,n,{pure:r,areStatesEqual:o=F,areOwnPropsEqual:s=I,areStatePropsEqual:i=I,areMergedPropsEqual:l=I,forwardRef:c=!1,context:u=d}={}){const p=u,h=function(e){return e?\"function\"==typeof e?j(e):O(e,\"mapStateToProps\"):S((()=>({})))}(e),f=function(e){return e&&\"object\"==typeof e?S((t=>function(e,t){const n={};for(const r in e){const o=e[r];\"function\"==typeof o&&(n[r]=(...e)=>t(o(...e)))}return n}(e,t))):e?\"function\"==typeof e?j(e):O(e,\"mapDispatchToProps\"):S((e=>({dispatch:e})))}(t),m=function(e){return e?\"function\"==typeof e?function(e){return function(t,{displayName:n,areMergedPropsEqual:r}){let o,s=!1;return function(t,n,i){const a=e(t,n,i);return s?r(a,o)||(o=a):(s=!0,o=a),o}}}(e):O(e,\"mergeProps\"):()=>k}(n),v=Boolean(e);return e=>{const t=e.displayName||e.name||\"Component\",n=`Connect(${t})`,r={shouldHandleStateChanges:v,displayName:n,wrappedComponentName:t,WrappedComponent:e,initMapStateToProps:h,initMapDispatchToProps:f,initMergeProps:m,areStatesEqual:o,areStatePropsEqual:i,areOwnPropsEqual:s,areMergedPropsEqual:l};function u(t){const[n,o,s]=(0,a.useMemo)((()=>{const{reactReduxForwardedRef:e}=t,n=(0,y.Z)(t,T);return[t.context,e,n]}),[t]),i=(0,a.useMemo)((()=>n&&n.Consumer&&(0,w.isContextConsumer)(a.createElement(n.Consumer,null))?n:p),[n,p]),l=(0,a.useContext)(i),c=Boolean(t.store)&&Boolean(t.store.getState)&&Boolean(t.store.dispatch),u=Boolean(l)&&Boolean(l.store);const h=c?t.store:l.store,f=u?l.getServerState:h.getState,d=(0,a.useMemo)((()=>function(e,t){let{initMapStateToProps:n,initMapDispatchToProps:r,initMergeProps:o}=t,s=(0,y.Z)(t,E);return x(n(e,s),r(e,s),o(e,s),e,s)}(h.dispatch,r)),[h]),[m,b]=(0,a.useMemo)((()=>{if(!v)return M;const e=C(h,c?void 0:l.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[h,c,l]),S=(0,a.useMemo)((()=>c?l:(0,g.Z)({},l,{subscription:m})),[c,l,m]),_=(0,a.useRef)(),j=(0,a.useRef)(s),O=(0,a.useRef)(),k=(0,a.useRef)(!1),A=((0,a.useRef)(!1),(0,a.useRef)(!1)),N=(0,a.useRef)();P((()=>(A.current=!0,()=>{A.current=!1})),[]);const I=(0,a.useMemo)((()=>()=>O.current&&s===j.current?O.current:d(h.getState(),s)),[h,s]),F=(0,a.useMemo)((()=>e=>m?function(e,t,n,r,o,s,i,a,l,c,u){if(!e)return()=>{};let p=!1,h=null;const f=()=>{if(p||!a.current)return;const e=t.getState();let n,f;try{n=r(e,o.current)}catch(e){f=e,h=e}f||(h=null),n===s.current?i.current||c():(s.current=n,l.current=n,i.current=!0,u())};return n.onStateChange=f,n.trySubscribe(),f(),()=>{if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,h)throw h}}(v,h,m,d,j,_,k,A,O,b,e):()=>{}),[m]);var L,B,$;let q;L=D,B=[j,_,k,s,O,b],P((()=>L(...B)),$);try{q=R(F,I,f?()=>d(f(),s):I)}catch(e){throw N.current&&(e.message+=`\\nThe error may be correlated with this previous error:\\n${N.current.stack}\\n\\n`),e}P((()=>{N.current=void 0,O.current=void 0,_.current=q}));const U=(0,a.useMemo)((()=>a.createElement(e,(0,g.Z)({},q,{ref:o}))),[o,e,q]);return(0,a.useMemo)((()=>v?a.createElement(i.Provider,{value:S},U):U),[i,U,S])}const d=a.memo(u);if(d.WrappedComponent=e,d.displayName=u.displayName=n,c){const t=a.forwardRef((function(e,t){return a.createElement(d,(0,g.Z)({},e,{reactReduxForwardedRef:t}))}));return t.displayName=n,t.WrappedComponent=e,b()(t,e)}return b()(d,e)}};const B=function({store:e,context:t,children:n,serverState:r}){const o=(0,a.useMemo)((()=>{const t=C(e);return{store:e,subscription:t,getServerState:r?()=>r:void 0}}),[e,r]),s=(0,a.useMemo)((()=>e.getState()),[e]);P((()=>{const{subscription:t}=o;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),s!==e.getState()&&t.notifyNestedSubs(),()=>{t.tryUnsubscribe(),t.onStateChange=void 0}}),[o,s]);const i=t||d;return a.createElement(i.Provider,{value:o},n)};var $,q;$=p.useSyncExternalStoreWithSelector,m=$,(e=>{R=e})(u.useSyncExternalStore),q=l.unstable_batchedUpdates,h=q;var U=n(57557),z=n.n(U),V=n(6557),W=n.n(V);const J=e=>t=>{const{fn:n}=e();class r extends a.Component{render(){return a.createElement(t,o()({},e(),this.props,this.context))}}return r.displayName=`WithSystem(${n.getDisplayName(t)})`,r},K=(e,t)=>n=>{const{fn:r}=e();class s extends a.Component{render(){return a.createElement(B,{store:t},a.createElement(n,o()({},this.props,this.context)))}}return s.displayName=`WithRoot(${r.getDisplayName(n)})`,s},H=(e,t,n)=>(0,c.qC)(n?K(e,n):W(),L(((n,r)=>{var o;const s={...r,...e()},i=(null===(o=t.prototype)||void 0===o?void 0:o.mapStateToProps)||(e=>({state:e}));return i(n,s)})),J(e))(t),G=(e,t,n,r)=>{for(const o in t){const s=t[o];\"function\"==typeof s&&s(n[o],r[o],e())}},Z=(e,t,n)=>(t,r)=>{const{fn:o}=e(),s=n(t,\"root\");class l extends a.Component{constructor(t,n){super(t,n),G(e,r,t,{})}UNSAFE_componentWillReceiveProps(t){G(e,r,t,this.props)}render(){const e=z()(this.props,r?i()(r):[]);return a.createElement(s,e)}}return l.displayName=`WithMappedContainer(${o.getDisplayName(s)})`,l},Y=(e,t,n,r)=>o=>{const s=n(e,t,r)(\"App\",\"root\");l.render(a.createElement(s,null),o)},X=(e,t,n)=>function(r,o){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(\"string\"!=typeof r)throw new TypeError(\"Need a string, to fetch a component. Was given a \"+typeof r);const i=n(r);return i?o?\"root\"===o?H(e,i,t()):H(e,i):i:(s.failSilently||e().log.warn(\"Could not find component:\",r),null)}},33424:(e,t,n)=>{\"use strict\";n.d(t,{d3:()=>D,C2:()=>ee});var r=n(28222),o=n.n(r),s=n(58118),i=n.n(s),a=n(63366);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function c(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(e){if(\"string\"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var u=n(64572),p=n(67294),h=n(87462);function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var m={};function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return function(e){if(0===e.length||1===e.length)return e;var t,n,r=e.join(\".\");return m[r]||(m[r]=0===(n=(t=e).length)||1===n?t:2===n?[t[0],t[1],\"\".concat(t[0],\".\").concat(t[1]),\"\".concat(t[1],\".\").concat(t[0])]:3===n?[t[0],t[1],t[2],\"\".concat(t[0],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[2]),\"\".concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[0])]:n>=4?[t[0],t[1],t[2],t[3],\"\".concat(t[0],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[3]),\"\".concat(t[3],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[1],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[1],\".\").concat(t[0])]:void 0),m[r]}(e.filter((function(e){return\"token\"!==e}))).reduce((function(e,t){return d(d({},e),n[t])}),t)}function y(e){return e.join(\" \")}function v(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,s=e.useInlineStyles,i=e.key,a=t.properties,l=t.type,c=t.tagName,u=t.value;if(\"text\"===l)return u;if(c){var f,m=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return v({node:r,stylesheet:e,useInlineStyles:t,key:\"code-segment-\".concat(n,\"-\").concat(o)})}))}}(n,s);if(s){var b=Object.keys(n).reduce((function(e,t){return t.split(\".\").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),w=a.className&&a.className.includes(\"token\")?[\"token\"]:[],E=a.className&&w.concat(a.className.filter((function(e){return!b.includes(e)})));f=d(d({},a),{},{className:y(E)||void 0,style:g(a.className,Object.assign({},a.style,o),n)})}else f=d(d({},a),{},{className:y(a.className)});var x=m(t.children);return p.createElement(c,(0,h.Z)({key:i},f),x)}}const b=function(e,t){return-1!==e.listLanguages().indexOf(t)};var w=[\"language\",\"children\",\"style\",\"customStyle\",\"codeTagProps\",\"useInlineStyles\",\"showLineNumbers\",\"showInlineLineNumbers\",\"startingLineNumber\",\"lineNumberContainerStyle\",\"lineNumberStyle\",\"wrapLines\",\"wrapLongLines\",\"lineProps\",\"renderer\",\"PreTag\",\"CodeTag\",\"code\",\"astGenerator\"];function E(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?E(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var S=/\\n/g;function _(e){var t=e.codeString,n=e.codeStyle,r=e.containerStyle,o=void 0===r?{float:\"left\",paddingRight:\"10px\"}:r,s=e.numberStyle,i=void 0===s?{}:s,a=e.startingLineNumber;return p.createElement(\"code\",{style:Object.assign({},n,o)},function(e){var t=e.lines,n=e.startingLineNumber,r=e.style;return t.map((function(e,t){var o=t+n;return p.createElement(\"span\",{key:\"line-\".concat(t),className:\"react-syntax-highlighter-line-number\",style:\"function\"==typeof r?r(o):r},\"\".concat(o,\"\\n\"))}))}({lines:t.replace(/\\n$/,\"\").split(\"\\n\"),style:i,startingLineNumber:a}))}function j(e,t){return{type:\"element\",tagName:\"span\",properties:{key:\"line-number--\".concat(e),className:[\"comment\",\"linenumber\",\"react-syntax-highlighter-line-number\"],style:t},children:[{type:\"text\",value:e}]}}function O(e,t,n){var r,o={display:\"inline-block\",minWidth:(r=n,\"\".concat(r.toString().length,\".25em\")),paddingRight:\"1em\",textAlign:\"right\",userSelect:\"none\"},s=\"function\"==typeof e?e(t):e;return x(x({},o),s)}function k(e){var t=e.children,n=e.lineNumber,r=e.lineNumberStyle,o=e.largestLineNumber,s=e.showInlineLineNumbers,i=e.lineProps,a=void 0===i?{}:i,l=e.className,c=void 0===l?[]:l,u=e.showLineNumbers,p=e.wrapLongLines,h=\"function\"==typeof a?a(n):a;if(h.className=c,n&&s){var f=O(r,n,o);t.unshift(j(n,f))}return p&u&&(h.style=x(x({},h.style),{},{display:\"flex\"})),{type:\"element\",tagName:\"span\",properties:h,children:t}}function A(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r<e.length;r++){var o=e[r];if(\"text\"===o.type)n.push(k({children:[o],className:c(new Set(t))}));else if(o.children){var s=t.concat(o.properties.className);A(o.children,s).forEach((function(e){return n.push(e)}))}}return n}function C(e,t,n,r,o,s,i,a,l){var c,u=A(e.value),p=[],h=-1,f=0;function d(e,s){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||c.length>0?function(e,t){return k({children:e,lineNumber:t,lineNumberStyle:a,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],showLineNumbers:r,wrapLongLines:l})}(e,s,c):function(e,t){if(r&&t&&o){var n=O(a,t,i);e.unshift(j(t,n))}return e}(e,s)}for(var m=function(){var e=u[f],t=e.children[0].value;if(t.match(S)){var n=t.split(\"\\n\");n.forEach((function(t,o){var i=r&&p.length+s,a={type:\"text\",value:\"\".concat(t,\"\\n\")};if(0===o){var l=d(u.slice(h+1,f).concat(k({children:[a],className:e.properties.className})),i);p.push(l)}else if(o===n.length-1){var c=u[f+1]&&u[f+1].children&&u[f+1].children[0],m={type:\"text\",value:\"\".concat(t)};if(c){var g=k({children:[m],className:e.properties.className});u.splice(f+1,0,g)}else{var y=d([m],i,e.properties.className);p.push(y)}}else{var v=d([a],i,e.properties.className);p.push(v)}})),h=f}f++};f<u.length;)m();if(h!==u.length-1){var g=u.slice(h+1,u.length);if(g&&g.length){var y=d(g,r&&p.length+s);p.push(y)}}return t?p:(c=[]).concat.apply(c,p)}function P(e){var t=e.rows,n=e.stylesheet,r=e.useInlineStyles;return t.map((function(e,t){return v({node:e,stylesheet:n,useInlineStyles:r,key:\"code-segement\".concat(t)})}))}function N(e){return e&&void 0!==e.highlightAuto}var I,T,R=n(96470),M=(I=R,T={},function(e){var t=e.language,n=e.children,r=e.style,o=void 0===r?T:r,s=e.customStyle,i=void 0===s?{}:s,l=e.codeTagProps,c=void 0===l?{className:t?\"language-\".concat(t):void 0,style:x(x({},o['code[class*=\"language-\"]']),o['code[class*=\"language-'.concat(t,'\"]')])}:l,u=e.useInlineStyles,h=void 0===u||u,f=e.showLineNumbers,d=void 0!==f&&f,m=e.showInlineLineNumbers,g=void 0===m||m,y=e.startingLineNumber,v=void 0===y?1:y,E=e.lineNumberContainerStyle,S=e.lineNumberStyle,j=void 0===S?{}:S,O=e.wrapLines,k=e.wrapLongLines,A=void 0!==k&&k,R=e.lineProps,M=void 0===R?{}:R,D=e.renderer,F=e.PreTag,L=void 0===F?\"pre\":F,B=e.CodeTag,$=void 0===B?\"code\":B,q=e.code,U=void 0===q?(Array.isArray(n)?n[0]:n)||\"\":q,z=e.astGenerator,V=function(e,t){if(null==e)return{};var n,r,o=(0,a.Z)(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,w);z=z||I;var W=d?p.createElement(_,{containerStyle:E,codeStyle:c.style||{},numberStyle:j,startingLineNumber:v,codeString:U}):null,J=o.hljs||o['pre[class*=\"language-\"]']||{backgroundColor:\"#fff\"},K=N(z)?\"hljs\":\"prismjs\",H=h?Object.assign({},V,{style:Object.assign({},J,i)}):Object.assign({},V,{className:V.className?\"\".concat(K,\" \").concat(V.className):K,style:Object.assign({},i)});if(c.style=x(x({},c.style),{},A?{whiteSpace:\"pre-wrap\"}:{whiteSpace:\"pre\"}),!z)return p.createElement(L,H,W,p.createElement($,c,U));(void 0===O&&D||A)&&(O=!0),D=D||P;var G=[{type:\"text\",value:U}],Z=function(e){var t=e.astGenerator,n=e.language,r=e.code,o=e.defaultCodeValue;if(N(t)){var s=b(t,n);return\"text\"===n?{value:o,language:\"text\"}:s?t.highlight(n,r):t.highlightAuto(r)}try{return n&&\"text\"!==n?{value:t.highlight(r,n)}:{value:o}}catch(e){return{value:o}}}({astGenerator:z,language:t,code:U,defaultCodeValue:G});null===Z.language&&(Z.value=G);var Y=C(Z,O,M,d,g,v,Z.value.length+v,j,A);return p.createElement(L,H,p.createElement($,c,!g&&W,D({rows:Y,stylesheet:o,useInlineStyles:h})))});M.registerLanguage=R.registerLanguage;const D=M;var F=n(96344);const L=n.n(F)();var B=n(82026);const $=n.n(B)();var q=n(42157);const U=n.n(q)();var z=n(61519);const V=n.n(z)();var W=n(54587);const J=n.n(W)();var K=n(30786);const H=n.n(K)();var G=n(66336);const Z=n.n(G)(),Y={hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#333\",color:\"white\"},\"hljs-name\":{fontWeight:\"bold\"},\"hljs-strong\":{fontWeight:\"bold\"},\"hljs-code\":{fontStyle:\"italic\",color:\"#888\"},\"hljs-emphasis\":{fontStyle:\"italic\"},\"hljs-tag\":{color:\"#62c8f3\"},\"hljs-variable\":{color:\"#ade5fc\"},\"hljs-template-variable\":{color:\"#ade5fc\"},\"hljs-selector-id\":{color:\"#ade5fc\"},\"hljs-selector-class\":{color:\"#ade5fc\"},\"hljs-string\":{color:\"#a2fca2\"},\"hljs-bullet\":{color:\"#d36363\"},\"hljs-type\":{color:\"#ffa\"},\"hljs-title\":{color:\"#ffa\"},\"hljs-section\":{color:\"#ffa\"},\"hljs-attribute\":{color:\"#ffa\"},\"hljs-quote\":{color:\"#ffa\"},\"hljs-built_in\":{color:\"#ffa\"},\"hljs-builtin-name\":{color:\"#ffa\"},\"hljs-number\":{color:\"#d36363\"},\"hljs-symbol\":{color:\"#d36363\"},\"hljs-keyword\":{color:\"#fcc28c\"},\"hljs-selector-tag\":{color:\"#fcc28c\"},\"hljs-literal\":{color:\"#fcc28c\"},\"hljs-comment\":{color:\"#888\"},\"hljs-deletion\":{color:\"#333\",backgroundColor:\"#fc9b9b\"},\"hljs-regexp\":{color:\"#c6b4f0\"},\"hljs-link\":{color:\"#c6b4f0\"},\"hljs-meta\":{color:\"#fc9b9b\"},\"hljs-addition\":{backgroundColor:\"#a2fca2\",color:\"#333\"}};D.registerLanguage(\"json\",$),D.registerLanguage(\"js\",L),D.registerLanguage(\"xml\",U),D.registerLanguage(\"yaml\",J),D.registerLanguage(\"http\",H),D.registerLanguage(\"bash\",V),D.registerLanguage(\"powershell\",Z),D.registerLanguage(\"javascript\",L);const X={agate:Y,arta:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#222\",color:\"#aaa\"},\"hljs-subst\":{color:\"#aaa\"},\"hljs-section\":{color:\"#fff\",fontWeight:\"bold\"},\"hljs-comment\":{color:\"#444\"},\"hljs-quote\":{color:\"#444\"},\"hljs-meta\":{color:\"#444\"},\"hljs-string\":{color:\"#ffcc33\"},\"hljs-symbol\":{color:\"#ffcc33\"},\"hljs-bullet\":{color:\"#ffcc33\"},\"hljs-regexp\":{color:\"#ffcc33\"},\"hljs-number\":{color:\"#00cc66\"},\"hljs-addition\":{color:\"#00cc66\"},\"hljs-built_in\":{color:\"#32aaee\"},\"hljs-builtin-name\":{color:\"#32aaee\"},\"hljs-literal\":{color:\"#32aaee\"},\"hljs-type\":{color:\"#32aaee\"},\"hljs-template-variable\":{color:\"#32aaee\"},\"hljs-attribute\":{color:\"#32aaee\"},\"hljs-link\":{color:\"#32aaee\"},\"hljs-keyword\":{color:\"#6644aa\"},\"hljs-selector-tag\":{color:\"#6644aa\"},\"hljs-name\":{color:\"#6644aa\"},\"hljs-selector-id\":{color:\"#6644aa\"},\"hljs-selector-class\":{color:\"#6644aa\"},\"hljs-title\":{color:\"#bb1166\"},\"hljs-variable\":{color:\"#bb1166\"},\"hljs-deletion\":{color:\"#bb1166\"},\"hljs-template-tag\":{color:\"#bb1166\"},\"hljs-doctag\":{fontWeight:\"bold\"},\"hljs-strong\":{fontWeight:\"bold\"},\"hljs-emphasis\":{fontStyle:\"italic\"}},monokai:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#272822\",color:\"#ddd\"},\"hljs-tag\":{color:\"#f92672\"},\"hljs-keyword\":{color:\"#f92672\",fontWeight:\"bold\"},\"hljs-selector-tag\":{color:\"#f92672\",fontWeight:\"bold\"},\"hljs-literal\":{color:\"#f92672\",fontWeight:\"bold\"},\"hljs-strong\":{color:\"#f92672\"},\"hljs-name\":{color:\"#f92672\"},\"hljs-code\":{color:\"#66d9ef\"},\"hljs-class .hljs-title\":{color:\"white\"},\"hljs-attribute\":{color:\"#bf79db\"},\"hljs-symbol\":{color:\"#bf79db\"},\"hljs-regexp\":{color:\"#bf79db\"},\"hljs-link\":{color:\"#bf79db\"},\"hljs-string\":{color:\"#a6e22e\"},\"hljs-bullet\":{color:\"#a6e22e\"},\"hljs-subst\":{color:\"#a6e22e\"},\"hljs-title\":{color:\"#a6e22e\",fontWeight:\"bold\"},\"hljs-section\":{color:\"#a6e22e\",fontWeight:\"bold\"},\"hljs-emphasis\":{color:\"#a6e22e\"},\"hljs-type\":{color:\"#a6e22e\",fontWeight:\"bold\"},\"hljs-built_in\":{color:\"#a6e22e\"},\"hljs-builtin-name\":{color:\"#a6e22e\"},\"hljs-selector-attr\":{color:\"#a6e22e\"},\"hljs-selector-pseudo\":{color:\"#a6e22e\"},\"hljs-addition\":{color:\"#a6e22e\"},\"hljs-variable\":{color:\"#a6e22e\"},\"hljs-template-tag\":{color:\"#a6e22e\"},\"hljs-template-variable\":{color:\"#a6e22e\"},\"hljs-comment\":{color:\"#75715e\"},\"hljs-quote\":{color:\"#75715e\"},\"hljs-deletion\":{color:\"#75715e\"},\"hljs-meta\":{color:\"#75715e\"},\"hljs-doctag\":{fontWeight:\"bold\"},\"hljs-selector-id\":{fontWeight:\"bold\"}},nord:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#2E3440\",color:\"#D8DEE9\"},\"hljs-subst\":{color:\"#D8DEE9\"},\"hljs-selector-tag\":{color:\"#81A1C1\"},\"hljs-selector-id\":{color:\"#8FBCBB\",fontWeight:\"bold\"},\"hljs-selector-class\":{color:\"#8FBCBB\"},\"hljs-selector-attr\":{color:\"#8FBCBB\"},\"hljs-selector-pseudo\":{color:\"#88C0D0\"},\"hljs-addition\":{backgroundColor:\"rgba(163, 190, 140, 0.5)\"},\"hljs-deletion\":{backgroundColor:\"rgba(191, 97, 106, 0.5)\"},\"hljs-built_in\":{color:\"#8FBCBB\"},\"hljs-type\":{color:\"#8FBCBB\"},\"hljs-class\":{color:\"#8FBCBB\"},\"hljs-function\":{color:\"#88C0D0\"},\"hljs-function > .hljs-title\":{color:\"#88C0D0\"},\"hljs-keyword\":{color:\"#81A1C1\"},\"hljs-literal\":{color:\"#81A1C1\"},\"hljs-symbol\":{color:\"#81A1C1\"},\"hljs-number\":{color:\"#B48EAD\"},\"hljs-regexp\":{color:\"#EBCB8B\"},\"hljs-string\":{color:\"#A3BE8C\"},\"hljs-title\":{color:\"#8FBCBB\"},\"hljs-params\":{color:\"#D8DEE9\"},\"hljs-bullet\":{color:\"#81A1C1\"},\"hljs-code\":{color:\"#8FBCBB\"},\"hljs-emphasis\":{fontStyle:\"italic\"},\"hljs-formula\":{color:\"#8FBCBB\"},\"hljs-strong\":{fontWeight:\"bold\"},\"hljs-link:hover\":{textDecoration:\"underline\"},\"hljs-quote\":{color:\"#4C566A\"},\"hljs-comment\":{color:\"#4C566A\"},\"hljs-doctag\":{color:\"#8FBCBB\"},\"hljs-meta\":{color:\"#5E81AC\"},\"hljs-meta-keyword\":{color:\"#5E81AC\"},\"hljs-meta-string\":{color:\"#A3BE8C\"},\"hljs-attr\":{color:\"#8FBCBB\"},\"hljs-attribute\":{color:\"#D8DEE9\"},\"hljs-builtin-name\":{color:\"#81A1C1\"},\"hljs-name\":{color:\"#81A1C1\"},\"hljs-section\":{color:\"#88C0D0\"},\"hljs-tag\":{color:\"#81A1C1\"},\"hljs-variable\":{color:\"#D8DEE9\"},\"hljs-template-variable\":{color:\"#D8DEE9\"},\"hljs-template-tag\":{color:\"#5E81AC\"},\"abnf .hljs-attribute\":{color:\"#88C0D0\"},\"abnf .hljs-symbol\":{color:\"#EBCB8B\"},\"apache .hljs-attribute\":{color:\"#88C0D0\"},\"apache .hljs-section\":{color:\"#81A1C1\"},\"arduino .hljs-built_in\":{color:\"#88C0D0\"},\"aspectj .hljs-meta\":{color:\"#D08770\"},\"aspectj > .hljs-title\":{color:\"#88C0D0\"},\"bnf .hljs-attribute\":{color:\"#8FBCBB\"},\"clojure .hljs-name\":{color:\"#88C0D0\"},\"clojure .hljs-symbol\":{color:\"#EBCB8B\"},\"coq .hljs-built_in\":{color:\"#88C0D0\"},\"cpp .hljs-meta-string\":{color:\"#8FBCBB\"},\"css .hljs-built_in\":{color:\"#88C0D0\"},\"css .hljs-keyword\":{color:\"#D08770\"},\"diff .hljs-meta\":{color:\"#8FBCBB\"},\"ebnf .hljs-attribute\":{color:\"#8FBCBB\"},\"glsl .hljs-built_in\":{color:\"#88C0D0\"},\"groovy .hljs-meta:not(:first-child)\":{color:\"#D08770\"},\"haxe .hljs-meta\":{color:\"#D08770\"},\"java .hljs-meta\":{color:\"#D08770\"},\"ldif .hljs-attribute\":{color:\"#8FBCBB\"},\"lisp .hljs-name\":{color:\"#88C0D0\"},\"lua .hljs-built_in\":{color:\"#88C0D0\"},\"moonscript .hljs-built_in\":{color:\"#88C0D0\"},\"nginx .hljs-attribute\":{color:\"#88C0D0\"},\"nginx .hljs-section\":{color:\"#5E81AC\"},\"pf .hljs-built_in\":{color:\"#88C0D0\"},\"processing .hljs-built_in\":{color:\"#88C0D0\"},\"scss .hljs-keyword\":{color:\"#81A1C1\"},\"stylus .hljs-keyword\":{color:\"#81A1C1\"},\"swift .hljs-meta\":{color:\"#D08770\"},\"vim .hljs-built_in\":{color:\"#88C0D0\",fontStyle:\"italic\"},\"yaml .hljs-meta\":{color:\"#D08770\"}},obsidian:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#282b2e\",color:\"#e0e2e4\"},\"hljs-keyword\":{color:\"#93c763\",fontWeight:\"bold\"},\"hljs-selector-tag\":{color:\"#93c763\",fontWeight:\"bold\"},\"hljs-literal\":{color:\"#93c763\",fontWeight:\"bold\"},\"hljs-selector-id\":{color:\"#93c763\"},\"hljs-number\":{color:\"#ffcd22\"},\"hljs-attribute\":{color:\"#668bb0\"},\"hljs-code\":{color:\"white\"},\"hljs-class .hljs-title\":{color:\"white\"},\"hljs-section\":{color:\"white\",fontWeight:\"bold\"},\"hljs-regexp\":{color:\"#d39745\"},\"hljs-link\":{color:\"#d39745\"},\"hljs-meta\":{color:\"#557182\"},\"hljs-tag\":{color:\"#8cbbad\"},\"hljs-name\":{color:\"#8cbbad\",fontWeight:\"bold\"},\"hljs-bullet\":{color:\"#8cbbad\"},\"hljs-subst\":{color:\"#8cbbad\"},\"hljs-emphasis\":{color:\"#8cbbad\"},\"hljs-type\":{color:\"#8cbbad\",fontWeight:\"bold\"},\"hljs-built_in\":{color:\"#8cbbad\"},\"hljs-selector-attr\":{color:\"#8cbbad\"},\"hljs-selector-pseudo\":{color:\"#8cbbad\"},\"hljs-addition\":{color:\"#8cbbad\"},\"hljs-variable\":{color:\"#8cbbad\"},\"hljs-template-tag\":{color:\"#8cbbad\"},\"hljs-template-variable\":{color:\"#8cbbad\"},\"hljs-string\":{color:\"#ec7600\"},\"hljs-symbol\":{color:\"#ec7600\"},\"hljs-comment\":{color:\"#818e96\"},\"hljs-quote\":{color:\"#818e96\"},\"hljs-deletion\":{color:\"#818e96\"},\"hljs-selector-class\":{color:\"#A082BD\"},\"hljs-doctag\":{fontWeight:\"bold\"},\"hljs-title\":{fontWeight:\"bold\"},\"hljs-strong\":{fontWeight:\"bold\"}},\"tomorrow-night\":{\"hljs-comment\":{color:\"#969896\"},\"hljs-quote\":{color:\"#969896\"},\"hljs-variable\":{color:\"#cc6666\"},\"hljs-template-variable\":{color:\"#cc6666\"},\"hljs-tag\":{color:\"#cc6666\"},\"hljs-name\":{color:\"#cc6666\"},\"hljs-selector-id\":{color:\"#cc6666\"},\"hljs-selector-class\":{color:\"#cc6666\"},\"hljs-regexp\":{color:\"#cc6666\"},\"hljs-deletion\":{color:\"#cc6666\"},\"hljs-number\":{color:\"#de935f\"},\"hljs-built_in\":{color:\"#de935f\"},\"hljs-builtin-name\":{color:\"#de935f\"},\"hljs-literal\":{color:\"#de935f\"},\"hljs-type\":{color:\"#de935f\"},\"hljs-params\":{color:\"#de935f\"},\"hljs-meta\":{color:\"#de935f\"},\"hljs-link\":{color:\"#de935f\"},\"hljs-attribute\":{color:\"#f0c674\"},\"hljs-string\":{color:\"#b5bd68\"},\"hljs-symbol\":{color:\"#b5bd68\"},\"hljs-bullet\":{color:\"#b5bd68\"},\"hljs-addition\":{color:\"#b5bd68\"},\"hljs-title\":{color:\"#81a2be\"},\"hljs-section\":{color:\"#81a2be\"},\"hljs-keyword\":{color:\"#b294bb\"},\"hljs-selector-tag\":{color:\"#b294bb\"},hljs:{display:\"block\",overflowX:\"auto\",background:\"#1d1f21\",color:\"#c5c8c6\",padding:\"0.5em\"},\"hljs-emphasis\":{fontStyle:\"italic\"},\"hljs-strong\":{fontWeight:\"bold\"}}},Q=o()(X),ee=e=>i()(Q).call(Q,e)?X[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),Y)},90242:(e,t,n)=>{\"use strict\";n.d(t,{AF:()=>ae,Ay:()=>fe,D$:()=>De,DR:()=>ve,GZ:()=>je,HP:()=>he,Ik:()=>Ee,J6:()=>Ne,Kn:()=>ce,LQ:()=>le,Nm:()=>ke,O2:()=>Ue,Pz:()=>Me,Q2:()=>de,QG:()=>Ce,UG:()=>xe,Uj:()=>Be,V9:()=>Fe,Wl:()=>ue,XV:()=>Re,Xb:()=>$e,Zl:()=>be,_5:()=>me,be:()=>Oe,cz:()=>Le,gp:()=>ye,hW:()=>Ae,iQ:()=>ge,kJ:()=>pe,mz:()=>se,nX:()=>Ie,oG:()=>ie,oJ:()=>Pe,po:()=>Te,r3:()=>Se,wh:()=>_e});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(74386),l=n.n(a),c=n(86),u=n.n(c),p=n(14418),h=n.n(p),f=n(28222),d=n.n(f),m=(n(11189),n(24282)),g=n.n(m),y=n(76986),v=n.n(y),b=n(2578),w=n.n(b),E=(n(24278),n(39022),n(92039)),x=n.n(E),S=(n(58118),n(11882)),_=n.n(S),j=n(51679),O=n.n(j),k=n(27043),A=n.n(k),C=n(81607),P=n.n(C),N=n(35627),I=n.n(N),T=n(43393),R=n.n(T),M=n(17967),D=n(68929),F=n.n(D),L=n(11700),B=n.n(L),$=n(88306),q=n.n($),U=n(13311),z=n.n(U),V=(n(59704),n(77813)),W=n.n(V),J=n(23560),K=n.n(J),H=n(27504),G=n(8269),Z=n.n(G),Y=n(19069),X=n(92282),Q=n.n(X),ee=n(89072),te=n.n(ee),ne=n(48764).Buffer;const re=\"default\",oe=e=>R().Iterable.isIterable(e);function se(e){return ce(e)?oe(e)?e.toJS():e:{}}function ie(e){var t,n;if(oe(e))return e;if(e instanceof H.Z.File)return e;if(!ce(e))return e;if(o()(e))return i()(n=R().Seq(e)).call(n,ie).toList();if(K()(l()(e))){var r;const t=function(e){if(!K()(l()(e)))return e;const t={},n=\"_**[]\",r={};for(let o of l()(e).call(e))if(t[o[0]]||r[o[0]]&&r[o[0]].containsMultiple){if(!r[o[0]]){r[o[0]]={containsMultiple:!0,length:1},t[`${o[0]}${n}${r[o[0]].length}`]=t[o[0]],delete t[o[0]]}r[o[0]].length+=1,t[`${o[0]}${n}${r[o[0]].length}`]=o[1]}else t[o[0]]=o[1];return t}(e);return i()(r=R().OrderedMap(t)).call(r,ie)}return i()(t=R().OrderedMap(e)).call(t,ie)}function ae(e){return o()(e)?e:[e]}function le(e){return\"function\"==typeof e}function ce(e){return!!e&&\"object\"==typeof e}function ue(e){return\"function\"==typeof e}function pe(e){return o()(e)}const he=q();function fe(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>(n[r]=t(e[r],r),n)),{})}function de(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>{let o=t(e[r],r);return o&&\"object\"==typeof o&&v()(n,o),n}),{})}function me(e){return t=>{let{dispatch:n,getState:r}=t;return t=>n=>\"function\"==typeof n?n(e()):t(n)}}function ge(e){var t;let n=e.keySeq();return n.contains(re)?re:w()(t=h()(n).call(n,(e=>\"2\"===(e+\"\")[0]))).call(t).first()}function ye(e,t){if(!R().Iterable.isIterable(e))return R().List();let n=e.getIn(o()(t)?t:[t]);return R().List.isList(n)?n:R().List()}function ve(e){let t,n=[/filename\\*=[^']+'\\w*'\"([^\"]+)\";?/i,/filename\\*=[^']+'\\w*'([^;]+);?/i,/filename=\"([^;]*);?\"/i,/filename=([^;]*);?/i];if(x()(n).call(n,(n=>(t=n.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function be(e){return t=e.replace(/\\.[^./]*$/,\"\"),B()(F()(t));var t}function we(e,t,n,r,s){if(!t)return[];let a=[],l=t.get(\"nullable\"),c=t.get(\"required\"),p=t.get(\"maximum\"),f=t.get(\"minimum\"),d=t.get(\"type\"),m=t.get(\"format\"),g=t.get(\"maxLength\"),y=t.get(\"minLength\"),v=t.get(\"uniqueItems\"),b=t.get(\"maxItems\"),w=t.get(\"minItems\"),E=t.get(\"pattern\");const S=n||!0===c,_=null!=e;if(l&&null===e||!d||!(S||_&&\"array\"===d||!(!S&&!_)))return[];let j=\"string\"===d&&e,O=\"array\"===d&&o()(e)&&e.length,k=\"array\"===d&&R().List.isList(e)&&e.count();const A=[j,O,k,\"array\"===d&&\"string\"==typeof e&&e,\"file\"===d&&e instanceof H.Z.File,\"boolean\"===d&&(e||!1===e),\"number\"===d&&(e||0===e),\"integer\"===d&&(e||0===e),\"object\"===d&&\"object\"==typeof e&&null!==e,\"object\"===d&&\"string\"==typeof e&&e],C=x()(A).call(A,(e=>!!e));if(S&&!C&&!r)return a.push(\"Required field is not provided\"),a;if(\"object\"===d&&(null===s||\"application/json\"===s)){let n=e;if(\"string\"==typeof e)try{n=JSON.parse(e)}catch(e){return a.push(\"Parameter string value must be valid JSON\"),a}var P;if(t&&t.has(\"required\")&&ue(c.isList)&&c.isList()&&u()(c).call(c,(e=>{void 0===n[e]&&a.push({propKey:e,error:\"Required property not found\"})})),t&&t.has(\"properties\"))u()(P=t.get(\"properties\")).call(P,((e,t)=>{const o=we(n[t],e,!1,r,s);a.push(...i()(o).call(o,(e=>({propKey:t,error:e}))))}))}if(E){let t=((e,t)=>{if(!new RegExp(t).test(e))return\"Value must follow pattern \"+t})(e,E);t&&a.push(t)}if(w&&\"array\"===d){let t=((e,t)=>{if(!e&&t>=1||e&&e.length<t)return`Array must contain at least ${t} item${1===t?\"\":\"s\"}`})(e,w);t&&a.push(t)}if(b&&\"array\"===d){let t=((e,t)=>{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?\"\":\"s\"}`})(e,b);t&&a.push({needRemove:!0,error:t})}if(v&&\"array\"===d){let t=((e,t)=>{if(e&&(\"true\"===t||!0===t)){const t=(0,T.fromJS)(e),n=t.toSet();if(e.length>n.size){let e=(0,T.Set)();if(u()(t).call(t,((n,r)=>{h()(t).call(t,(e=>ue(e.equals)?e.equals(n):e===n)).size>1&&(e=e.add(r))})),0!==e.size)return i()(e).call(e,(e=>({index:e,error:\"No duplicates allowed.\"}))).toArray()}}})(e,v);t&&a.push(...t)}if(g||0===g){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?\"s\":\"\"}`})(e,g);t&&a.push(t)}if(y){let t=((e,t)=>{if(e.length<t)return`Value must be at least ${t} character${1!==t?\"s\":\"\"}`})(e,y);t&&a.push(t)}if(p||0===p){let t=((e,t)=>{if(e>t)return`Value must be less than ${t}`})(e,p);t&&a.push(t)}if(f||0===f){let t=((e,t)=>{if(e<t)return`Value must be greater than ${t}`})(e,f);t&&a.push(t)}if(\"string\"===d){let t;if(t=\"date-time\"===m?(e=>{if(isNaN(Date.parse(e)))return\"Value must be a DateTime\"})(e):\"uuid\"===m?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return\"Value must be a Guid\"})(e):(e=>{if(e&&\"string\"!=typeof e)return\"Value must be a string\"})(e),!t)return a;a.push(t)}else if(\"boolean\"===d){let t=(e=>{if(\"true\"!==e&&\"false\"!==e&&!0!==e&&!1!==e)return\"Value must be a boolean\"})(e);if(!t)return a;a.push(t)}else if(\"number\"===d){let t=(e=>{if(!/^-?\\d+(\\.?\\d+)?$/.test(e))return\"Value must be a number\"})(e);if(!t)return a;a.push(t)}else if(\"integer\"===d){let t=(e=>{if(!/^-?\\d+$/.test(e))return\"Value must be an integer\"})(e);if(!t)return a;a.push(t)}else if(\"array\"===d){if(!O&&!k)return a;e&&u()(e).call(e,((e,n)=>{const o=we(e,t.get(\"items\"),!1,r,s);a.push(...i()(o).call(o,(e=>({index:n,error:e}))))}))}else if(\"file\"===d){let t=(e=>{if(e&&!(e instanceof H.Z.File))return\"Value must be a file\"})(e);if(!t)return a;a.push(t)}return a}const Ee=function(e,t){let{isOAS3:n=!1,bypassRequiredCheck:r=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=e.get(\"required\"),{schema:s,parameterContentMediaType:i}=(0,Y.Z)(e,{isOAS3:n});return we(t,s,o,r,i)},xe=()=>{let e={},t=H.Z.location.search;if(!t)return{};if(\"\"!=t){let n=t.substr(1).split(\"&\");for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(t=n[t].split(\"=\"),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||\"\")}return e},Se=e=>{let t;return t=e instanceof ne?e:ne.from(e.toString(),\"utf-8\"),t.toString(\"base64\")},_e={operationsSorter:{alpha:(e,t)=>e.get(\"path\").localeCompare(t.get(\"path\")),method:(e,t)=>e.get(\"method\").localeCompare(t.get(\"method\"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},je=e=>{let t=[];for(let n in e){let r=e[n];void 0!==r&&\"\"!==r&&t.push([n,\"=\",encodeURIComponent(r).replace(/%20/g,\"+\")].join(\"\"))}return t.join(\"&\")},Oe=(e,t,n)=>!!z()(n,(n=>W()(e[n],t[n])));function ke(e){return\"string\"!=typeof e||\"\"===e?\"\":(0,M.N)(e)}function Ae(e){return!(!e||_()(e).call(e,\"localhost\")>=0||_()(e).call(e,\"127.0.0.1\")>=0||\"none\"===e)}function Ce(e){if(!R().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=O()(e).call(e,((e,t)=>A()(t).call(t,\"2\")&&d()(e.get(\"content\")||{}).length>0)),n=e.get(\"default\")||R().OrderedMap(),r=(n.get(\"content\")||R().OrderedMap()).keySeq().toJS().length?n:null;return t||r}const Pe=e=>\"string\"==typeof e||e instanceof String?P()(e).call(e).replace(/\\s/g,\"%20\"):\"\",Ne=e=>Z()(Pe(e).replace(/%20/g,\"_\")),Ie=e=>h()(e).call(e,((e,t)=>/^x-/.test(t))),Te=e=>h()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function Re(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if(\"object\"!=typeof e||o()(e)||null===e||!t)return e;const s=v()({},e);return u()(n=d()(s)).call(n,(e=>{e===t&&r(s[e],e)?delete s[e]:s[e]=Re(s[e],t,r)})),s}function Me(e){if(\"string\"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),\"object\"==typeof e&&null!==e)try{return I()(e,null,2)}catch(t){return String(e)}return null==e?\"\":e.toString()}function De(e){return\"number\"==typeof e?e.toString():e}function Fe(e){let{returnAll:t=!1,allowHashes:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!R().Map.isMap(e))throw new Error(\"paramToIdentifier: received a non-Im.Map parameter as input\");const r=e.get(\"name\"),o=e.get(\"in\");let s=[];return e&&e.hashCode&&o&&r&&n&&s.push(`${o}.${r}.hash-${e.hashCode()}`),o&&r&&s.push(`${o}.${r}`),s.push(r),t?s:s[0]||\"\"}function Le(e,t){var n;const r=Fe(e,{returnAll:!0});return h()(n=i()(r).call(r,(e=>t[e]))).call(n,(e=>void 0!==e))[0]}function Be(){return qe(Q()(32).toString(\"base64\"))}function $e(e){return qe(te()(\"sha256\").update(e).digest(\"base64\"))}function qe(e){return e.replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=/g,\"\")}const Ue=e=>!e||!(!oe(e)||!e.isEmpty())},2518:(e,t,n)=>{\"use strict\";function r(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?\"json\":null}n.d(t,{O:()=>r})},63543:(e,t,n)=>{\"use strict\";n.d(t,{mn:()=>a});var r=n(63460),o=n.n(r);function s(e){return e.match(/^(?:[a-z]+:)?\\/\\//i)}function i(e,t){return e?s(e)?function(e){return e.match(/^\\/\\//i)?`${window.location.protocol}${e}`:e}(e):new(o())(e,t).href:t}function a(e,t){let{selectedServer:n=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{return function(e,t){let{selectedServer:n=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return;if(s(e))return e;const r=i(n,t);return s(r)?new(o())(e,r).href:new(o())(e,window.location.href).href}(e,t,{selectedServer:n})}catch{return}}},27504:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});const r=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if(\"undefined\"==typeof window)return e;try{e=window;for(var t of[\"File\",\"Blob\",\"FormData\"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},19069:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>u});var r=n(14418),o=n.n(r),s=n(58118),i=n.n(s),a=n(43393),l=n.n(a);const c=l().Set.of(\"type\",\"format\",\"items\",\"default\",\"maximum\",\"exclusiveMaximum\",\"minimum\",\"exclusiveMinimum\",\"maxLength\",\"minLength\",\"pattern\",\"maxItems\",\"minItems\",\"uniqueItems\",\"enum\",\"multipleOf\");function u(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!l().Map.isMap(e))return{schema:l().Map(),parameterContentMediaType:null};if(!t)return\"body\"===e.get(\"in\")?{schema:e.get(\"schema\",l().Map()),parameterContentMediaType:null}:{schema:o()(e).call(e,((e,t)=>i()(c).call(c,t))),parameterContentMediaType:null};if(e.get(\"content\")){const t=e.get(\"content\",l().Map({})).keySeq().first();return{schema:e.getIn([\"content\",t,\"schema\"],l().Map()),parameterContentMediaType:t}}return{schema:e.get(\"schema\")?e.get(\"schema\",l().Map()):l().Map(),parameterContentMediaType:null}}},60314:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>x});var r=n(58309),o=n.n(r),s=n(2250),i=n.n(s),a=n(25110),l=n.n(a),c=n(8712),u=n.n(c),p=n(51679),h=n.n(p),f=n(12373),d=n.n(f),m=n(18492),g=n.n(m),y=n(88306),v=n.n(y);const b=e=>t=>o()(e)&&o()(t)&&e.length===t.length&&i()(e).call(e,((e,n)=>e===t[n])),w=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t};class E extends(g()){delete(e){const t=l()(u()(this).call(this)),n=h()(t).call(t,b(e));return super.delete(n)}get(e){const t=l()(u()(this).call(this)),n=h()(t).call(t,b(e));return super.get(n)}has(e){const t=l()(u()(this).call(this));return-1!==d()(t).call(t,b(e))}}const x=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:w;const{Cache:n}=v();v().Cache=E;const r=v()(e,t);return v().Cache=n,r}},79742:(e,t)=>{\"use strict\";t.byteLength=function(e){var t=a(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,s=a(e),i=s[0],l=s[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,l)),u=0,p=l>0?i-4:i;for(n=0;n<p;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,s=[],i=16383,a=0,c=r-o;a<c;a+=i)s.push(l(e,a,a+i>c?c:a+i));1===o?(t=e[r-1],s.push(n[t>>2]+n[t<<4&63]+\"==\")):2===o&&(t=(e[r-2]<<8)+e[r-1],s.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+\"=\"));return s.join(\"\")};for(var n=[],r=[],o=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,s=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",i=0;i<64;++i)n[i]=s[i],r[s.charCodeAt(i)]=i;function a(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var n=e.indexOf(\"=\");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var o,s,i=[],a=t;a<r;a+=3)o=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(255&e[a+2]),i.push(n[(s=o)>>18&63]+n[s>>12&63]+n[s>>6&63]+n[63&s]);return i.join(\"\")}r[\"-\".charCodeAt(0)]=62,r[\"_\".charCodeAt(0)]=63},48764:(e,t,n)=>{\"use strict\";const r=n(79742),o=n(80645),s=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const i=2147483647;function a(e){if(e>i)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return p(e)}return c(e,t,n)}function c(e,t,n){if(\"string\"==typeof e)return function(e,t){\"string\"==typeof t&&\"\"!==t||(t=\"utf8\");if(!l.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);const n=0|m(e,t);let r=a(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return f(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return f(e,t,n);if(\"undefined\"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return f(e,t,n);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|d(e.length),n=a(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return\"number\"!=typeof e.length||Z(e.length)?a(0):h(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return h(e.data)}(e);if(o)return o;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive](\"string\"),t,n);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}function u(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function p(e){return u(e),a(e<0?0:0|d(e))}function h(e){const t=e.length<0?0:0|d(e.length),n=a(t);for(let r=0;r<t;r+=1)n[r]=255&e[r];return n}function f(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function d(e){if(e>=i)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+i.toString(16)+\" bytes\");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return n;case\"utf8\":case\"utf-8\":return J(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*n;case\"hex\":return n>>>1;case\"base64\":return K(e).length;default:if(o)return r?-1:J(e).length;t=(\"\"+t).toLowerCase(),o=!0}}function g(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return\"\";if((n>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return P(this,t,n);case\"utf8\":case\"utf-8\":return O(this,t,n);case\"ascii\":return A(this,t,n);case\"latin1\":case\"binary\":return C(this,t,n);case\"base64\":return j(this,t,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return N(this,t,n);default:if(r)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),r=!0}}function y(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if(\"string\"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),Z(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if(\"string\"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError(\"val must be string, number or Buffer\")}function b(e,t,n,r,o){let s,i=1,a=e.length,l=t.length;if(void 0!==r&&(\"ucs2\"===(r=String(r).toLowerCase())||\"ucs-2\"===r||\"utf16le\"===r||\"utf-16le\"===r)){if(e.length<2||t.length<2)return-1;i=2,a/=2,l/=2,n/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(s=n;s<a;s++)if(c(e,s)===c(t,-1===r?0:s-r)){if(-1===r&&(r=s),s-r+1===l)return r*i}else-1!==r&&(s-=s-r),r=-1}else for(n+l>a&&(n=a-l),s=n;s>=0;s--){let n=!0;for(let r=0;r<l;r++)if(c(e,s+r)!==c(t,r)){n=!1;break}if(n)return s}return-1}function w(e,t,n,r){n=Number(n)||0;const o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;const s=t.length;let i;for(r>s/2&&(r=s/2),i=0;i<r;++i){const r=parseInt(t.substr(2*i,2),16);if(Z(r))return i;e[n+i]=r}return i}function E(e,t,n,r){return H(J(t,e.length-n),e,n,r)}function x(e,t,n,r){return H(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function S(e,t,n,r){return H(K(t),e,n,r)}function _(e,t,n,r){return H(function(e,t){let n,r,o;const s=[];for(let i=0;i<e.length&&!((t-=2)<0);++i)n=e.charCodeAt(i),r=n>>8,o=n%256,s.push(o),s.push(r);return s}(t,e.length-n),e,n,r)}function j(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function O(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o<n;){const t=e[o];let s=null,i=t>239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,a,l;switch(i){case 1:t<128&&(s=t);break;case 2:n=e[o+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(s=l));break;case 3:n=e[o+1],r=e[o+2],128==(192&n)&&128==(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(s=l));break;case 4:n=e[o+1],r=e[o+2],a=e[o+3],128==(192&n)&&128==(192&r)&&128==(192&a)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&a,l>65535&&l<1114112&&(s=l))}}null===s?(s=65533,i=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),o+=i}return function(e){const t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);let n=\"\",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=k));return n}(r)}t.kMaxLength=i,l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(l.prototype,\"parent\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,\"offset\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return u(e),e<=0?a(e):void 0!==t?\"string\"==typeof n?a(e).fill(t,n):a(e).fill(t):a(e)}(e,t,n)},l.allocUnsafe=function(e){return p(e)},l.allocUnsafeSlow=function(e){return p(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),G(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let o=0,s=Math.min(n,r);o<s;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let o=0;for(n=0;n<e.length;++n){let t=e[n];if(G(t,Uint8Array))o+t.length>r.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('\"list\" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<e;t+=2)y(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)y(this,t,t+3),y(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)y(this,t,t+7),y(this,t+1,t+6),y(this,t+2,t+5),y(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?\"\":0===arguments.length?O(this,0,e):g.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e=\"\";const n=t.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,n).replace(/(.{2})/g,\"$1 \").trim(),this.length>n&&(e+=\" ... \"),\"<Buffer \"+e+\">\"},s&&(l.prototype[s]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError(\"out of range index\");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let s=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const a=Math.min(s,i),c=this.slice(r,o),u=e.slice(t,n);for(let e=0;e<a;++e)if(c[e]!==u[e]){s=c[e],i=u[e];break}return s<i?-1:i<s?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return v(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return v(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r=\"utf8\",n=this.length,t=0;else if(void 0===n&&\"string\"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r=\"utf8\")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");r||(r=\"utf8\");let s=!1;for(;;)switch(r){case\"hex\":return w(this,e,t,n);case\"utf8\":case\"utf-8\":return E(this,e,t,n);case\"ascii\":case\"latin1\":case\"binary\":return x(this,e,t,n);case\"base64\":return S(this,e,t,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _(this,e,t,n);default:if(s)throw new TypeError(\"Unknown encoding: \"+r);r=(\"\"+r).toLowerCase(),s=!0}},l.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const k=4096;function A(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function C(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function P(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let o=\"\";for(let r=t;r<n;++r)o+=Y[e[r]];return o}function N(e,t,n){const r=e.slice(t,n);let o=\"\";for(let e=0;e<r.length-1;e+=2)o+=String.fromCharCode(r[e]+256*r[e+1]);return o}function I(e,t,n){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>n)throw new RangeError(\"Trying to access beyond buffer length\")}function T(e,t,n,r,o,s){if(!l.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>o||t<s)throw new RangeError('\"value\" argument is out of bounds');if(n+r>e.length)throw new RangeError(\"Index out of range\")}function R(e,t,n,r,o){U(t,r,o,e,n,7);let s=Number(t&BigInt(4294967295));e[n++]=s,s>>=8,e[n++]=s,s>>=8,e[n++]=s,s>>=8,e[n++]=s;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function M(e,t,n,r,o){U(t,r,o,e,n,7);let s=Number(t&BigInt(4294967295));e[n+7]=s,s>>=8,e[n+6]=s,s>>=8,e[n+5]=s,s>>=8,e[n+4]=s;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function D(e,t,n,r,o,s){if(n+r>e.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"Index out of range\")}function F(e,t,n,r,s){return t=+t,n>>>=0,s||D(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function L(e,t,n,r,s){return t=+t,n>>>=0,s||D(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=this[e],o=1,s=0;for(;++s<t&&(o*=256);)r+=this[e+s]*o;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<<BigInt(32))})),l.prototype.readBigUInt64BE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<<BigInt(32))+BigInt(o)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=this[e],o=1,s=0;for(;++s<t&&(o*=256);)r+=this[e+s]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=t,o=1,s=this[e+--r];for(;r>0&&(o*=256);)s+=this[e+--r]*o;return o*=128,s>=o&&(s-=Math.pow(2,8*t)),s},l.prototype.readInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||I(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||I(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=0,t||I(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||I(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||I(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||I(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){T(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,s=0;for(this[t]=255&e;++s<n&&(o*=256);)this[t+s]=e/o&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){T(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,s=1;for(this[t+o]=255&e;--o>=0&&(s*=256);)this[t+o]=e/s&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=X((function(e,t=0){return R(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),l.prototype.writeBigUInt64BE=X((function(e,t=0){return M(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);T(this,e,t,n,r-1,-r)}let o=0,s=1,i=0;for(this[t]=255&e;++o<n&&(s*=256);)e<0&&0===i&&0!==this[t+o-1]&&(i=1),this[t+o]=(e/s>>0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);T(this,e,t,n,r-1,-r)}let o=n-1,s=1,i=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/s>>0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=X((function(e,t=0){return R(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),l.prototype.writeBigInt64BE=X((function(e,t=0){return M(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),l.prototype.writeFloatLE=function(e,t,n){return F(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return F(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return L(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return L(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"sourceEnd out of bounds\");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);const o=r-n;return this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},l.prototype.fill=function(e,t,n,r){if(\"string\"==typeof e){if(\"string\"==typeof t?(r=t,t=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!l.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);if(1===e.length){const t=e.charCodeAt(0);(\"utf8\"===r&&t<128||\"latin1\"===r)&&(e=t)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError(\"Out of range index\");if(n<=t)return this;let o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(o=t;o<n;++o)this[o]=e;else{const s=l.isBuffer(e)?e:l.from(e,r),i=s.length;if(0===i)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(o=0;o<n-t;++o)this[o+t]=s[o%i]}return this};const B={};function $(e,t,n){B[e]=class extends n{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function q(e){let t=\"\",n=e.length;const r=\"-\"===e[0]?1:0;for(;n>=r+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function U(e,t,n,r,o,s){if(e>n||e<t){const r=\"bigint\"==typeof t?\"n\":\"\";let o;throw o=s>3?0===t||t===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(s+1)}${r}`:`>= -(2${r} ** ${8*(s+1)-1}${r}) and < 2 ** ${8*(s+1)-1}${r}`:`>= ${t}${r} and <= ${n}${r}`,new B.ERR_OUT_OF_RANGE(\"value\",o,e)}!function(e,t,n){z(t,\"offset\"),void 0!==e[t]&&void 0!==e[t+n]||V(t,e.length-(n+1))}(r,o,s)}function z(e,t){if(\"number\"!=typeof e)throw new B.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function V(e,t,n){if(Math.floor(e)!==e)throw z(e,n),new B.ERR_OUT_OF_RANGE(n||\"offset\",\"an integer\",e);if(t<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(n||\"offset\",`>= ${n?1:0} and <= ${t}`,e)}$(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),$(\"ERR_INVALID_ARG_TYPE\",(function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`}),TypeError),$(\"ERR_OUT_OF_RANGE\",(function(e,t,n){let r=`The value of \"${e}\" is out of range.`,o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=q(String(n)):\"bigint\"==typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=q(o)),o+=\"n\"),r+=` It must be ${t}. Received ${o}`,r}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function J(e,t){let n;t=t||1/0;const r=e.length;let o=null;const s=[];for(let i=0;i<r;++i){if(n=e.charCodeAt(i),n>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&s.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&s.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&s.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;s.push(n)}else if(n<2048){if((t-=2)<0)break;s.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;s.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;s.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return s}function K(e){return r.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(W,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function H(e,t,n,r){let o;for(o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e=\"0123456789abcdef\",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function X(e){return\"undefined\"==typeof BigInt?Q:e}function Q(){throw new Error(\"BigInt not supported\")}},21924:(e,t,n)=>{\"use strict\";var r=n(40210),o=n(55559),s=o(r(\"String.prototype.indexOf\"));e.exports=function(e,t){var n=r(e,!!t);return\"function\"==typeof n&&s(e,\".prototype.\")>-1?o(n):n}},55559:(e,t,n)=>{\"use strict\";var r=n(58612),o=n(40210),s=o(\"%Function.prototype.apply%\"),i=o(\"%Function.prototype.call%\"),a=o(\"%Reflect.apply%\",!0)||r.call(i,s),l=o(\"%Object.getOwnPropertyDescriptor%\",!0),c=o(\"%Object.defineProperty%\",!0),u=o(\"%Math.max%\");if(c)try{c({},\"a\",{value:1})}catch(e){c=null}e.exports=function(e){var t=a(r,i,arguments);l&&c&&(l(t,\"length\").configurable&&c(t,\"length\",{value:1+u(0,e.length-(arguments.length-1))}));return t};var p=function(){return a(r,s,arguments)};c?c(e.exports,\"apply\",{value:p}):e.exports.apply=p},94184:(e,t)=>{var n;!function(){\"use strict\";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var s=typeof n;if(\"string\"===s||\"number\"===s)e.push(n);else if(Array.isArray(n)){if(n.length){var i=o.apply(null,n);i&&e.push(i)}}else if(\"object\"===s){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes(\"[native code]\")){e.push(n.toString());continue}for(var a in n)r.call(n,a)&&n[a]&&e.push(a)}}}return e.join(\" \")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},76489:(e,t)=>{\"use strict\";t.parse=function(e,t){if(\"string\"!=typeof e)throw new TypeError(\"argument str must be a string\");var n={},r=(t||{}).decode||o,s=0;for(;s<e.length;){var a=e.indexOf(\"=\",s);if(-1===a)break;var l=e.indexOf(\";\",s);if(-1===l)l=e.length;else if(l<a){s=e.lastIndexOf(\";\",a-1)+1;continue}var c=e.slice(s,a).trim();if(void 0===n[c]){var u=e.slice(a+1,l).trim();34===u.charCodeAt(0)&&(u=u.slice(1,-1)),n[c]=i(u,r)}s=l+1}return n},t.serialize=function(e,t,o){var i=o||{},a=i.encode||s;if(\"function\"!=typeof a)throw new TypeError(\"option encode is invalid\");if(!r.test(e))throw new TypeError(\"argument name is invalid\");var l=a(t);if(l&&!r.test(l))throw new TypeError(\"argument val is invalid\");var c=e+\"=\"+l;if(null!=i.maxAge){var u=i.maxAge-0;if(isNaN(u)||!isFinite(u))throw new TypeError(\"option maxAge is invalid\");c+=\"; Max-Age=\"+Math.floor(u)}if(i.domain){if(!r.test(i.domain))throw new TypeError(\"option domain is invalid\");c+=\"; Domain=\"+i.domain}if(i.path){if(!r.test(i.path))throw new TypeError(\"option path is invalid\");c+=\"; Path=\"+i.path}if(i.expires){var p=i.expires;if(!function(e){return\"[object Date]\"===n.call(e)||e instanceof Date}(p)||isNaN(p.valueOf()))throw new TypeError(\"option expires is invalid\");c+=\"; Expires=\"+p.toUTCString()}i.httpOnly&&(c+=\"; HttpOnly\");i.secure&&(c+=\"; Secure\");if(i.priority){switch(\"string\"==typeof i.priority?i.priority.toLowerCase():i.priority){case\"low\":c+=\"; Priority=Low\";break;case\"medium\":c+=\"; Priority=Medium\";break;case\"high\":c+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}}if(i.sameSite){switch(\"string\"==typeof i.sameSite?i.sameSite.toLowerCase():i.sameSite){case!0:c+=\"; SameSite=Strict\";break;case\"lax\":c+=\"; SameSite=Lax\";break;case\"strict\":c+=\"; SameSite=Strict\";break;case\"none\":c+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return c};var n=Object.prototype.toString,r=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function o(e){return-1!==e.indexOf(\"%\")?decodeURIComponent(e):e}function s(e){return encodeURIComponent(e)}function i(e,t){try{return t(e)}catch(t){return e}}},20640:(e,t,n)=>{\"use strict\";var r=n(11742),o={\"text/plain\":\"Text\",\"text/html\":\"Url\",default:\"Text\"};e.exports=function(e,t){var n,s,i,a,l,c,u=!1;t||(t={}),n=t.debug||!1;try{if(i=r(),a=document.createRange(),l=document.getSelection(),(c=document.createElement(\"span\")).textContent=e,c.ariaHidden=\"true\",c.style.all=\"unset\",c.style.position=\"fixed\",c.style.top=0,c.style.clip=\"rect(0, 0, 0, 0)\",c.style.whiteSpace=\"pre\",c.style.webkitUserSelect=\"text\",c.style.MozUserSelect=\"text\",c.style.msUserSelect=\"text\",c.style.userSelect=\"text\",c.addEventListener(\"copy\",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn(\"unable to use e.clipboardData\"),n&&console.warn(\"trying IE specific stuff\"),window.clipboardData.clearData();var s=o[t.format]||o.default;window.clipboardData.setData(s,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(c),a.selectNodeContents(c),l.addRange(a),!document.execCommand(\"copy\"))throw new Error(\"copy command was unsuccessful\");u=!0}catch(r){n&&console.error(\"unable to copy using execCommand: \",r),n&&console.warn(\"trying IE specific stuff\");try{window.clipboardData.setData(t.format||\"text\",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(r){n&&console.error(\"unable to copy using clipboardData: \",r),n&&console.error(\"falling back to prompt\"),s=function(e){var t=(/mac os x/i.test(navigator.userAgent)?\"⌘\":\"Ctrl\")+\"+C\";return e.replace(/#{\\s*key\\s*}/g,t)}(\"message\"in t?t.message:\"Copy to clipboard: #{key}, Enter\"),window.prompt(s,e)}}finally{l&&(\"function\"==typeof l.removeRange?l.removeRange(a):l.removeAllRanges()),c&&document.body.removeChild(c),i()}return u}},90093:(e,t,n)=>{var r=n(28196);e.exports=r},3688:(e,t,n)=>{var r=n(11955);e.exports=r},83838:(e,t,n)=>{var r=n(46279);e.exports=r},15684:(e,t,n)=>{var r=n(19373);e.exports=r},81331:(e,t,n)=>{var r=n(52759);e.exports=r},65362:(e,t,n)=>{var r=n(63383);e.exports=r},91254:(e,t,n)=>{var r=n(57396);e.exports=r},43536:(e,t,n)=>{var r=n(41910);e.exports=r},37331:(e,t,n)=>{var r=n(79427);e.exports=r},68522:(e,t,n)=>{var r=n(62857);e.exports=r},73151:(e,t,n)=>{var r=n(9534);e.exports=r},45012:(e,t,n)=>{var r=n(23059);e.exports=r},80281:(e,t,n)=>{var r=n(92547);n(97522),n(43975),n(45414),e.exports=r},40031:(e,t,n)=>{var r=n(46509);e.exports=r},17487:(e,t,n)=>{var r=n(35774);e.exports=r},54493:(e,t,n)=>{n(77971),n(53242);var r=n(54058);e.exports=r.Array.from},24034:(e,t,n)=>{n(92737);var r=n(54058);e.exports=r.Array.isArray},15367:(e,t,n)=>{n(85906);var r=n(35703);e.exports=r(\"Array\").concat},12710:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r(\"Array\").entries},51459:(e,t,n)=>{n(48851);var r=n(35703);e.exports=r(\"Array\").every},6172:(e,t,n)=>{n(80290);var r=n(35703);e.exports=r(\"Array\").fill},62383:(e,t,n)=>{n(21501);var r=n(35703);e.exports=r(\"Array\").filter},60009:(e,t,n)=>{n(44929);var r=n(35703);e.exports=r(\"Array\").findIndex},17671:(e,t,n)=>{n(80833);var r=n(35703);e.exports=r(\"Array\").find},99324:(e,t,n)=>{n(2437);var r=n(35703);e.exports=r(\"Array\").forEach},80991:(e,t,n)=>{n(97690);var r=n(35703);e.exports=r(\"Array\").includes},8700:(e,t,n)=>{n(99076);var r=n(35703);e.exports=r(\"Array\").indexOf},95909:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r(\"Array\").keys},6442:(e,t,n)=>{n(75915);var r=n(35703);e.exports=r(\"Array\").lastIndexOf},23866:(e,t,n)=>{n(68787);var r=n(35703);e.exports=r(\"Array\").map},9896:(e,t,n)=>{n(48528);var r=n(35703);e.exports=r(\"Array\").push},52999:(e,t,n)=>{n(81876);var r=n(35703);e.exports=r(\"Array\").reduce},24900:(e,t,n)=>{n(60186);var r=n(35703);e.exports=r(\"Array\").slice},3824:(e,t,n)=>{n(36026);var r=n(35703);e.exports=r(\"Array\").some},2948:(e,t,n)=>{n(4115);var r=n(35703);e.exports=r(\"Array\").sort},78209:(e,t,n)=>{n(98611);var r=n(35703);e.exports=r(\"Array\").splice},14423:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r(\"Array\").values},81103:(e,t,n)=>{n(95160);var r=n(54058);e.exports=r.Date.now},27700:(e,t,n)=>{n(73381);var r=n(35703);e.exports=r(\"Function\").bind},16246:(e,t,n)=>{var r=n(7046),o=n(27700),s=Function.prototype;e.exports=function(e){var t=e.bind;return e===s||r(s,e)&&t===s.bind?o:t}},56043:(e,t,n)=>{var r=n(7046),o=n(15367),s=Array.prototype;e.exports=function(e){var t=e.concat;return e===s||r(s,e)&&t===s.concat?o:t}},13160:(e,t,n)=>{var r=n(7046),o=n(51459),s=Array.prototype;e.exports=function(e){var t=e.every;return e===s||r(s,e)&&t===s.every?o:t}},80446:(e,t,n)=>{var r=n(7046),o=n(6172),s=Array.prototype;e.exports=function(e){var t=e.fill;return e===s||r(s,e)&&t===s.fill?o:t}},2480:(e,t,n)=>{var r=n(7046),o=n(62383),s=Array.prototype;e.exports=function(e){var t=e.filter;return e===s||r(s,e)&&t===s.filter?o:t}},7147:(e,t,n)=>{var r=n(7046),o=n(60009),s=Array.prototype;e.exports=function(e){var t=e.findIndex;return e===s||r(s,e)&&t===s.findIndex?o:t}},32236:(e,t,n)=>{var r=n(7046),o=n(17671),s=Array.prototype;e.exports=function(e){var t=e.find;return e===s||r(s,e)&&t===s.find?o:t}},58557:(e,t,n)=>{var r=n(7046),o=n(80991),s=n(21631),i=Array.prototype,a=String.prototype;e.exports=function(e){var t=e.includes;return e===i||r(i,e)&&t===i.includes?o:\"string\"==typeof e||e===a||r(a,e)&&t===a.includes?s:t}},34570:(e,t,n)=>{var r=n(7046),o=n(8700),s=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===s||r(s,e)&&t===s.indexOf?o:t}},57564:(e,t,n)=>{var r=n(7046),o=n(6442),s=Array.prototype;e.exports=function(e){var t=e.lastIndexOf;return e===s||r(s,e)&&t===s.lastIndexOf?o:t}},88287:(e,t,n)=>{var r=n(7046),o=n(23866),s=Array.prototype;e.exports=function(e){var t=e.map;return e===s||r(s,e)&&t===s.map?o:t}},93993:(e,t,n)=>{var r=n(7046),o=n(9896),s=Array.prototype;e.exports=function(e){var t=e.push;return e===s||r(s,e)&&t===s.push?o:t}},68025:(e,t,n)=>{var r=n(7046),o=n(52999),s=Array.prototype;e.exports=function(e){var t=e.reduce;return e===s||r(s,e)&&t===s.reduce?o:t}},59257:(e,t,n)=>{var r=n(7046),o=n(80454),s=String.prototype;e.exports=function(e){var t=e.repeat;return\"string\"==typeof e||e===s||r(s,e)&&t===s.repeat?o:t}},69601:(e,t,n)=>{var r=n(7046),o=n(24900),s=Array.prototype;e.exports=function(e){var t=e.slice;return e===s||r(s,e)&&t===s.slice?o:t}},28299:(e,t,n)=>{var r=n(7046),o=n(3824),s=Array.prototype;e.exports=function(e){var t=e.some;return e===s||r(s,e)&&t===s.some?o:t}},69355:(e,t,n)=>{var r=n(7046),o=n(2948),s=Array.prototype;e.exports=function(e){var t=e.sort;return e===s||r(s,e)&&t===s.sort?o:t}},18339:(e,t,n)=>{var r=n(7046),o=n(78209),s=Array.prototype;e.exports=function(e){var t=e.splice;return e===s||r(s,e)&&t===s.splice?o:t}},71611:(e,t,n)=>{var r=n(7046),o=n(3269),s=String.prototype;e.exports=function(e){var t=e.startsWith;return\"string\"==typeof e||e===s||r(s,e)&&t===s.startsWith?o:t}},62774:(e,t,n)=>{var r=n(7046),o=n(13348),s=String.prototype;e.exports=function(e){var t=e.trim;return\"string\"==typeof e||e===s||r(s,e)&&t===s.trim?o:t}},84426:(e,t,n)=>{n(32619);var r=n(54058),o=n(79730);r.JSON||(r.JSON={stringify:JSON.stringify}),e.exports=function(e,t,n){return o(r.JSON.stringify,null,arguments)}},91018:(e,t,n)=>{n(66274),n(37501),n(55967),n(77971);var r=n(54058);e.exports=r.Map},97849:(e,t,n)=>{n(54973),e.exports=Math.pow(2,-52)},3820:(e,t,n)=>{n(30800);var r=n(54058);e.exports=r.Number.isInteger},45999:(e,t,n)=>{n(49221);var r=n(54058);e.exports=r.Object.assign},7702:(e,t,n)=>{n(74979);var r=n(54058).Object,o=e.exports=function(e,t){return r.defineProperties(e,t)};r.defineProperties.sham&&(o.sham=!0)},48171:(e,t,n)=>{n(86450);var r=n(54058).Object,o=e.exports=function(e,t,n){return r.defineProperty(e,t,n)};r.defineProperty.sham&&(o.sham=!0)},73081:(e,t,n)=>{n(94366);var r=n(54058);e.exports=r.Object.entries},7699:(e,t,n)=>{n(66274),n(28387);var r=n(54058);e.exports=r.Object.fromEntries},286:(e,t,n)=>{n(46924);var r=n(54058).Object,o=e.exports=function(e,t){return r.getOwnPropertyDescriptor(e,t)};r.getOwnPropertyDescriptor.sham&&(o.sham=!0)},92766:(e,t,n)=>{n(88482);var r=n(54058);e.exports=r.Object.getOwnPropertyDescriptors},30498:(e,t,n)=>{n(35824);var r=n(54058);e.exports=r.Object.getOwnPropertySymbols},48494:(e,t,n)=>{n(21724);var r=n(54058);e.exports=r.Object.keys},98430:(e,t,n)=>{n(26614);var r=n(54058);e.exports=r.Object.values},52956:(e,t,n)=>{n(47627),n(66274),n(55967),n(98881),n(4560),n(91302),n(44349),n(77971);var r=n(54058);e.exports=r.Promise},76998:(e,t,n)=>{n(66274),n(55967),n(69008),n(77971);var r=n(54058);e.exports=r.Set},97089:(e,t,n)=>{n(74679);var r=n(54058);e.exports=r.String.raw},21631:(e,t,n)=>{n(11035);var r=n(35703);e.exports=r(\"String\").includes},80454:(e,t,n)=>{n(60986);var r=n(35703);e.exports=r(\"String\").repeat},3269:(e,t,n)=>{n(94761);var r=n(35703);e.exports=r(\"String\").startsWith},13348:(e,t,n)=>{n(57398);var r=n(35703);e.exports=r(\"String\").trim},57473:(e,t,n)=>{n(85906),n(55967),n(35824),n(8555),n(52615),n(21732),n(35903),n(1825),n(28394),n(45915),n(61766),n(62737),n(89911),n(74315),n(63131),n(64714),n(70659),n(69120),n(79413),n(1502);var r=n(54058);e.exports=r.Symbol},24227:(e,t,n)=>{n(66274),n(55967),n(77971),n(1825);var r=n(11477);e.exports=r.f(\"iterator\")},62978:(e,t,n)=>{n(18084),n(63131);var r=n(11477);e.exports=r.f(\"toPrimitive\")},32304:(e,t,n)=>{n(66274),n(55967),n(54334);var r=n(54058);e.exports=r.WeakMap},29567:(e,t,n)=>{n(66274),n(55967),n(1773);var r=n(54058);e.exports=r.WeakSet},14122:(e,t,n)=>{e.exports=n(89097)},44442:(e,t,n)=>{e.exports=n(51675)},57152:(e,t,n)=>{e.exports=n(82507)},69447:(e,t,n)=>{e.exports=n(628)},1449:(e,t,n)=>{e.exports=n(34501)},60269:(e,t,n)=>{e.exports=n(76936)},70573:(e,t,n)=>{e.exports=n(18180)},73685:(e,t,n)=>{e.exports=n(80621)},27533:(e,t,n)=>{e.exports=n(22948)},39057:(e,t,n)=>{e.exports=n(82108)},84710:(e,t,n)=>{e.exports=n(14058)},93799:(e,t,n)=>{e.exports=n(92093)},86600:(e,t,n)=>{e.exports=n(52201)},9759:(e,t,n)=>{e.exports=n(27398)},71384:(e,t,n)=>{e.exports=n(26189)},89097:(e,t,n)=>{var r=n(90093);e.exports=r},51675:(e,t,n)=>{var r=n(3688);e.exports=r},82507:(e,t,n)=>{var r=n(83838);e.exports=r},628:(e,t,n)=>{var r=n(15684);e.exports=r},34501:(e,t,n)=>{var r=n(81331);e.exports=r},76936:(e,t,n)=>{var r=n(65362);e.exports=r},18180:(e,t,n)=>{var r=n(91254);e.exports=r},80621:(e,t,n)=>{var r=n(43536);e.exports=r},22948:(e,t,n)=>{var r=n(37331);e.exports=r},82108:(e,t,n)=>{var r=n(68522);e.exports=r},14058:(e,t,n)=>{var r=n(73151);e.exports=r},92093:(e,t,n)=>{var r=n(45012);e.exports=r},52201:(e,t,n)=>{var r=n(80281);n(28783),n(97618),n(6989),n(65799),n(46774),n(22731),n(85605),n(31943),n(80620),n(36172),e.exports=r},27398:(e,t,n)=>{var r=n(40031);e.exports=r},26189:(e,t,n)=>{var r=n(17487);e.exports=r},24883:(e,t,n)=>{var r=n(57475),o=n(69826),s=TypeError;e.exports=function(e){if(r(e))return e;throw s(o(e)+\" is not a function\")}},174:(e,t,n)=>{var r=n(24284),o=n(69826),s=TypeError;e.exports=function(e){if(r(e))return e;throw s(o(e)+\" is not a constructor\")}},11851:(e,t,n)=>{var r=n(57475),o=String,s=TypeError;e.exports=function(e){if(\"object\"==typeof e||r(e))return e;throw s(\"Can't set \"+o(e)+\" as a prototype\")}},18479:e=>{e.exports=function(){}},5743:(e,t,n)=>{var r=n(7046),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw o(\"Incorrect invocation\")}},96059:(e,t,n)=>{var r=n(10941),o=String,s=TypeError;e.exports=function(e){if(r(e))return e;throw s(o(e)+\" is not an object\")}},97135:(e,t,n)=>{var r=n(95981);e.exports=r((function(){if(\"function\"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,\"a\",{value:8})}}))},91860:(e,t,n)=>{\"use strict\";var r=n(89678),o=n(59413),s=n(10623);e.exports=function(e){for(var t=r(this),n=s(t),i=arguments.length,a=o(i>1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,c=void 0===l?n:o(l,n);c>a;)t[a++]=e;return t}},56837:(e,t,n)=>{\"use strict\";var r=n(3610).forEach,o=n(34194)(\"forEach\");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},11354:(e,t,n)=>{\"use strict\";var r=n(86843),o=n(78834),s=n(89678),i=n(75196),a=n(6782),l=n(24284),c=n(10623),u=n(55449),p=n(53476),h=n(22902),f=Array;e.exports=function(e){var t=s(e),n=l(this),d=arguments.length,m=d>1?arguments[1]:void 0,g=void 0!==m;g&&(m=r(m,d>2?arguments[2]:void 0));var y,v,b,w,E,x,S=h(t),_=0;if(!S||this===f&&a(S))for(y=c(t),v=n?new this(y):f(y);y>_;_++)x=g?m(t[_],_):t[_],u(v,_,x);else for(E=(w=p(t,S)).next,v=n?new this:[];!(b=o(E,w)).done;_++)x=g?i(w,m,[b.value,_],!0):b.value,u(v,_,x);return v.length=_,v}},31692:(e,t,n)=>{var r=n(74529),o=n(59413),s=n(10623),i=function(e){return function(t,n,i){var a,l=r(t),c=s(l),u=o(i,c);if(e&&n!=n){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},3610:(e,t,n)=>{var r=n(86843),o=n(95329),s=n(37026),i=n(89678),a=n(10623),l=n(64692),c=o([].push),u=function(e){var t=1==e,n=2==e,o=3==e,u=4==e,p=6==e,h=7==e,f=5==e||p;return function(d,m,g,y){for(var v,b,w=i(d),E=s(w),x=r(m,g),S=a(E),_=0,j=y||l,O=t?j(d,S):n||h?j(d,0):void 0;S>_;_++)if((f||_ in E)&&(b=x(v=E[_],_,w),e))if(t)O[_]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return _;case 2:c(O,v)}else switch(e){case 4:return!1;case 7:c(O,v)}return p?-1:o||u?u:O}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},67145:(e,t,n)=>{\"use strict\";var r=n(79730),o=n(74529),s=n(62435),i=n(10623),a=n(34194),l=Math.min,c=[].lastIndexOf,u=!!c&&1/[1].lastIndexOf(1,-0)<0,p=a(\"lastIndexOf\"),h=u||!p;e.exports=h?function(e){if(u)return r(c,this,arguments)||0;var t=o(this),n=i(t),a=n-1;for(arguments.length>1&&(a=l(a,s(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:c},50568:(e,t,n)=>{var r=n(95981),o=n(99813),s=n(53385),i=o(\"species\");e.exports=function(e){return s>=51||!r((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},34194:(e,t,n)=>{\"use strict\";var r=n(95981);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},46499:(e,t,n)=>{var r=n(24883),o=n(89678),s=n(37026),i=n(10623),a=TypeError,l=function(e){return function(t,n,l,c){r(n);var u=o(t),p=s(u),h=i(u),f=e?h-1:0,d=e?-1:1;if(l<2)for(;;){if(f in p){c=p[f],f+=d;break}if(f+=d,e?f<0:h<=f)throw a(\"Reduce of empty array with no initial value\")}for(;e?f>=0:h>f;f+=d)f in p&&(c=n(c,p[f],f,u));return c}};e.exports={left:l(!1),right:l(!0)}},89779:(e,t,n)=>{\"use strict\";var r=n(55746),o=n(1052),s=TypeError,i=Object.getOwnPropertyDescriptor,a=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],\"length\",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=a?function(e,t){if(o(e)&&!i(e,\"length\").writable)throw s(\"Cannot set read only .length\");return e.length=t}:function(e,t){return e.length=t}},15790:(e,t,n)=>{var r=n(59413),o=n(10623),s=n(55449),i=Array,a=Math.max;e.exports=function(e,t,n){for(var l=o(e),c=r(t,l),u=r(void 0===n?l:n,l),p=i(a(u-c,0)),h=0;c<u;c++,h++)s(p,h,e[c]);return p.length=h,p}},93765:(e,t,n)=>{var r=n(95329);e.exports=r([].slice)},61388:(e,t,n)=>{var r=n(15790),o=Math.floor,s=function(e,t){var n=e.length,l=o(n/2);return n<8?i(e,t):a(e,s(r(e,0,l),t),s(r(e,l),t),t)},i=function(e,t){for(var n,r,o=e.length,s=1;s<o;){for(r=s,n=e[s];r&&t(e[r-1],n)>0;)e[r]=e[--r];r!==s++&&(e[r]=n)}return e},a=function(e,t,n,r){for(var o=t.length,s=n.length,i=0,a=0;i<o||a<s;)e[i+a]=i<o&&a<s?r(t[i],n[a])<=0?t[i++]:n[a++]:i<o?t[i++]:n[a++];return e};e.exports=s},5693:(e,t,n)=>{var r=n(1052),o=n(24284),s=n(10941),i=n(99813)(\"species\"),a=Array;e.exports=function(e){var t;return r(e)&&(t=e.constructor,(o(t)&&(t===a||r(t.prototype))||s(t)&&null===(t=t[i]))&&(t=void 0)),void 0===t?a:t}},64692:(e,t,n)=>{var r=n(5693);e.exports=function(e,t){return new(r(e))(0===t?0:t)}},75196:(e,t,n)=>{var r=n(96059),o=n(7609);e.exports=function(e,t,n,s){try{return s?t(r(n)[0],n[1]):t(n)}catch(t){o(e,\"throw\",t)}}},21385:(e,t,n)=>{var r=n(99813)(\"iterator\"),o=!1;try{var s=0,i={next:function(){return{done:!!s++}},return:function(){o=!0}};i[r]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var s={};s[r]=function(){return{next:function(){return{done:n=!0}}}},e(s)}catch(e){}return n}},82532:(e,t,n)=>{var r=n(95329),o=r({}.toString),s=r(\"\".slice);e.exports=function(e){return s(o(e),8,-1)}},9697:(e,t,n)=>{var r=n(22885),o=n(57475),s=n(82532),i=n(99813)(\"toStringTag\"),a=Object,l=\"Arguments\"==s(function(){return arguments}());e.exports=r?s:function(e){var t,n,r;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=a(e),i))?n:l?s(t):\"Object\"==(r=s(t))&&o(t.callee)?\"Arguments\":r}},85616:(e,t,n)=>{\"use strict\";var r=n(29290),o=n(29202),s=n(94380),i=n(86843),a=n(5743),l=n(82119),c=n(93091),u=n(75105),p=n(23538),h=n(94431),f=n(55746),d=n(21647).fastKey,m=n(45402),g=m.set,y=m.getterFor;e.exports={getConstructor:function(e,t,n,u){var p=e((function(e,o){a(e,h),g(e,{type:t,index:r(null),first:void 0,last:void 0,size:0}),f||(e.size=0),l(o)||c(o,e[u],{that:e,AS_ENTRIES:n})})),h=p.prototype,m=y(t),v=function(e,t,n){var r,o,s=m(e),i=b(e,t);return i?i.value=n:(s.last=i={index:o=d(t,!0),key:t,value:n,previous:r=s.last,next:void 0,removed:!1},s.first||(s.first=i),r&&(r.next=i),f?s.size++:e.size++,\"F\"!==o&&(s.index[o]=i)),e},b=function(e,t){var n,r=m(e),o=d(t);if(\"F\"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return s(h,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var t=this,n=m(t),r=b(t,e);if(r){var o=r.next,s=r.previous;delete n.index[r.index],r.removed=!0,s&&(s.next=o),o&&(o.previous=s),n.first==r&&(n.first=o),n.last==r&&(n.last=s),f?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=m(this),r=i(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),s(h,n?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),f&&o(h,\"size\",{configurable:!0,get:function(){return m(this).size}}),p},setStrong:function(e,t,n){var r=t+\" Iterator\",o=y(t),s=y(r);u(e,t,(function(e,t){g(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=s(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?p(\"keys\"==t?n.key:\"values\"==t?n.value:[n.key,n.value],!1):(e.target=void 0,p(void 0,!0))}),n?\"entries\":\"values\",!n,!0),h(t)}}},8850:(e,t,n)=>{\"use strict\";var r=n(95329),o=n(94380),s=n(21647).getWeakData,i=n(5743),a=n(96059),l=n(82119),c=n(10941),u=n(93091),p=n(3610),h=n(90953),f=n(45402),d=f.set,m=f.getterFor,g=p.find,y=p.findIndex,v=r([].splice),b=0,w=function(e){return e.frozen||(e.frozen=new E)},E=function(){this.entries=[]},x=function(e,t){return g(e.entries,(function(e){return e[0]===t}))};E.prototype={get:function(e){var t=x(this,e);if(t)return t[1]},has:function(e){return!!x(this,e)},set:function(e,t){var n=x(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=y(this.entries,(function(t){return t[0]===e}));return~t&&v(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var p=e((function(e,o){i(e,f),d(e,{type:t,id:b++,frozen:void 0}),l(o)||u(o,e[r],{that:e,AS_ENTRIES:n})})),f=p.prototype,g=m(t),y=function(e,t,n){var r=g(e),o=s(a(t),!0);return!0===o?w(r).set(t,n):o[r.id]=n,e};return o(f,{delete:function(e){var t=g(this);if(!c(e))return!1;var n=s(e);return!0===n?w(t).delete(e):n&&h(n,t.id)&&delete n[t.id]},has:function(e){var t=g(this);if(!c(e))return!1;var n=s(e);return!0===n?w(t).has(e):n&&h(n,t.id)}}),o(f,n?{get:function(e){var t=g(this);if(c(e)){var n=s(e);return!0===n?w(t).get(e):n?n[t.id]:void 0}},set:function(e,t){return y(this,e,t)}}:{add:function(e){return y(this,e,!0)}}),p}}},24683:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(21899),s=n(21647),i=n(95981),a=n(32029),l=n(93091),c=n(5743),u=n(57475),p=n(10941),h=n(90904),f=n(65988).f,d=n(3610).forEach,m=n(55746),g=n(45402),y=g.set,v=g.getterFor;e.exports=function(e,t,n){var g,b=-1!==e.indexOf(\"Map\"),w=-1!==e.indexOf(\"Weak\"),E=b?\"set\":\"add\",x=o[e],S=x&&x.prototype,_={};if(m&&u(x)&&(w||S.forEach&&!i((function(){(new x).entries().next()})))){var j=(g=t((function(t,n){y(c(t,j),{type:e,collection:new x}),null!=n&&l(n,t[E],{that:t,AS_ENTRIES:b})}))).prototype,O=v(e);d([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(e){var t=\"add\"==e||\"set\"==e;!(e in S)||w&&\"clear\"==e||a(j,e,(function(n,r){var o=O(this).collection;if(!t&&w&&!p(n))return\"get\"==e&&void 0;var s=o[e](0===n?0:n,r);return t?this:s}))})),w||f(j,\"size\",{configurable:!0,get:function(){return O(this).collection.size}})}else g=n.getConstructor(t,e,b,E),s.enable();return h(g,e,!1,!0),_[e]=g,r({global:!0,forced:!0},_),w||n.setStrong(g,e,b),g}},23489:(e,t,n)=>{var r=n(90953),o=n(31136),s=n(49677),i=n(65988);e.exports=function(e,t,n){for(var a=o(t),l=i.f,c=s.f,u=0;u<a.length;u++){var p=a[u];r(e,p)||n&&r(n,p)||l(e,p,c(t,p))}}},67772:(e,t,n)=>{var r=n(99813)(\"match\");e.exports=function(e){var t=/./;try{\"/./\"[e](t)}catch(n){try{return t[r]=!1,\"/./\"[e](t)}catch(e){}}return!1}},64160:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},23538:e=>{e.exports=function(e,t){return{value:e,done:t}}},32029:(e,t,n)=>{var r=n(55746),o=n(65988),s=n(31887);e.exports=r?function(e,t,n){return o.f(e,t,s(1,n))}:function(e,t,n){return e[t]=n,e}},31887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},55449:(e,t,n)=>{\"use strict\";var r=n(83894),o=n(65988),s=n(31887);e.exports=function(e,t,n){var i=r(t);i in e?o.f(e,i,s(0,n)):e[i]=n}},29202:(e,t,n)=>{var r=n(65988);e.exports=function(e,t,n){return r.f(e,t,n)}},95929:(e,t,n)=>{var r=n(32029);e.exports=function(e,t,n,o){return o&&o.enumerable?e[t]=n:r(e,t,n),e}},94380:(e,t,n)=>{var r=n(95929);e.exports=function(e,t,n){for(var o in t)n&&n.unsafe&&e[o]?e[o]=t[o]:r(e,o,t[o],n);return e}},75609:(e,t,n)=>{var r=n(21899),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},15863:(e,t,n)=>{\"use strict\";var r=n(69826),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o(\"Cannot delete property \"+r(t)+\" of \"+r(e))}},55746:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},76616:e=>{var t=\"object\"==typeof document&&document.all,n=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:n}},61333:(e,t,n)=>{var r=n(21899),o=n(10941),s=r.document,i=o(s)&&o(s.createElement);e.exports=function(e){return i?s.createElement(e):{}}},66796:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t(\"Maximum allowed index exceeded\");return e}},63281:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},34342:(e,t,n)=>{var r=n(2861).match(/firefox\\/(\\d+)/i);e.exports=!!r&&+r[1]},23321:(e,t,n)=>{var r=n(48501),o=n(6049);e.exports=!r&&!o&&\"object\"==typeof window&&\"object\"==typeof document},56491:e=>{e.exports=\"function\"==typeof Bun&&Bun&&\"string\"==typeof Bun.version},48501:e=>{e.exports=\"object\"==typeof Deno&&Deno&&\"object\"==typeof Deno.version},81046:(e,t,n)=>{var r=n(2861);e.exports=/MSIE|Trident/.test(r)},4470:(e,t,n)=>{var r=n(2861);e.exports=/ipad|iphone|ipod/i.test(r)&&\"undefined\"!=typeof Pebble},22749:(e,t,n)=>{var r=n(2861);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},6049:(e,t,n)=>{var r=n(34155),o=n(82532);e.exports=void 0!==r&&\"process\"==o(r)},58045:(e,t,n)=>{var r=n(2861);e.exports=/web0s(?!.*chrome)/i.test(r)},2861:e=>{e.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},53385:(e,t,n)=>{var r,o,s=n(21899),i=n(2861),a=s.process,l=s.Deno,c=a&&a.versions||l&&l.version,u=c&&c.v8;u&&(o=(r=u.split(\".\"))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&i&&(!(r=i.match(/Edge\\/(\\d+)/))||r[1]>=74)&&(r=i.match(/Chrome\\/(\\d+)/))&&(o=+r[1]),e.exports=o},18938:(e,t,n)=>{var r=n(2861).match(/AppleWebKit\\/(\\d+)\\./);e.exports=!!r&&+r[1]},35703:(e,t,n)=>{var r=n(54058);e.exports=function(e){return r[e+\"Prototype\"]}},56759:e=>{e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},53995:(e,t,n)=>{var r=n(95329),o=Error,s=r(\"\".replace),i=String(o(\"zxcasd\").stack),a=/\\n\\s*at [^:]*:[^\\n]*/,l=a.test(i);e.exports=function(e,t){if(l&&\"string\"==typeof e&&!o.prepareStackTrace)for(;t--;)e=s(e,a,\"\");return e}},79585:(e,t,n)=>{var r=n(32029),o=n(53995),s=n(18780),i=Error.captureStackTrace;e.exports=function(e,t,n,a){s&&(i?i(e,t):r(e,\"stack\",o(n,a)))}},18780:(e,t,n)=>{var r=n(95981),o=n(31887);e.exports=!r((function(){var e=Error(\"a\");return!(\"stack\"in e)||(Object.defineProperty(e,\"stack\",o(1,7)),7!==e.stack)}))},76887:(e,t,n)=>{\"use strict\";var r=n(21899),o=n(79730),s=n(97484),i=n(57475),a=n(49677).f,l=n(37252),c=n(54058),u=n(86843),p=n(32029),h=n(90953),f=function(e){var t=function(n,r,s){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,s)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,g,y,v,b,w,E=e.target,x=e.global,S=e.stat,_=e.proto,j=x?r:S?r[E]:(r[E]||{}).prototype,O=x?c:c[E]||p(c,E,{})[E],k=O.prototype;for(m in t)o=!(n=l(x?m:E+(S?\".\":\"#\")+m,e.forced))&&j&&h(j,m),y=O[m],o&&(v=e.dontCallGetSet?(w=a(j,m))&&w.value:j[m]),g=o&&v?v:t[m],o&&typeof y==typeof g||(b=e.bind&&o?u(g,r):e.wrap&&o?f(g):_&&i(g)?s(g):g,(e.sham||g&&g.sham||y&&y.sham)&&p(b,\"sham\",!0),p(O,m,b),_&&(h(c,d=E+\"Prototype\")||p(c,d,{}),p(c[d],m,g),e.real&&k&&(n||!k[m])&&p(k,m,g)))}},95981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},45602:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},79730:(e,t,n)=>{var r=n(18285),o=Function.prototype,s=o.apply,i=o.call;e.exports=\"object\"==typeof Reflect&&Reflect.apply||(r?i.bind(s):function(){return i.apply(s,arguments)})},86843:(e,t,n)=>{var r=n(97484),o=n(24883),s=n(18285),i=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:s?i(e,t):function(){return e.apply(t,arguments)}}},18285:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){var e=function(){}.bind();return\"function\"!=typeof e||e.hasOwnProperty(\"prototype\")}))},98308:(e,t,n)=>{\"use strict\";var r=n(95329),o=n(24883),s=n(10941),i=n(90953),a=n(93765),l=n(18285),c=Function,u=r([].concat),p=r([].join),h={};e.exports=l?c.bind:function(e){var t=o(this),n=t.prototype,r=a(arguments,1),l=function(){var n=u(r,a(arguments));return this instanceof l?function(e,t,n){if(!i(h,t)){for(var r=[],o=0;o<t;o++)r[o]=\"a[\"+o+\"]\";h[t]=c(\"C,a\",\"return new C(\"+p(r,\",\")+\")\")}return h[t](e,n)}(t,n.length,n):t.apply(e,n)};return s(n)&&(l.prototype=n),l}},78834:(e,t,n)=>{var r=n(18285),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},79417:(e,t,n)=>{var r=n(55746),o=n(90953),s=Function.prototype,i=r&&Object.getOwnPropertyDescriptor,a=o(s,\"name\"),l=a&&\"something\"===function(){}.name,c=a&&(!r||r&&i(s,\"name\").configurable);e.exports={EXISTS:a,PROPER:l,CONFIGURABLE:c}},45526:(e,t,n)=>{var r=n(95329),o=n(24883);e.exports=function(e,t,n){try{return r(o(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},97484:(e,t,n)=>{var r=n(82532),o=n(95329);e.exports=function(e){if(\"Function\"===r(e))return o(e)}},95329:(e,t,n)=>{var r=n(18285),o=Function.prototype,s=o.call,i=r&&o.bind.bind(s,s);e.exports=r?i:function(e){return function(){return s.apply(e,arguments)}}},626:(e,t,n)=>{var r=n(54058),o=n(21899),s=n(57475),i=function(e){return s(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},22902:(e,t,n)=>{var r=n(9697),o=n(14229),s=n(82119),i=n(12077),a=n(99813)(\"iterator\");e.exports=function(e){if(!s(e))return o(e,a)||o(e,\"@@iterator\")||i[r(e)]}},53476:(e,t,n)=>{var r=n(78834),o=n(24883),s=n(96059),i=n(69826),a=n(22902),l=TypeError;e.exports=function(e,t){var n=arguments.length<2?a(e):t;if(o(n))return s(r(n,e));throw l(i(e)+\" is not iterable\")}},33323:(e,t,n)=>{var r=n(95329),o=n(1052),s=n(57475),i=n(82532),a=n(85803),l=r([].push);e.exports=function(e){if(s(e))return e;if(o(e)){for(var t=e.length,n=[],r=0;r<t;r++){var c=e[r];\"string\"==typeof c?l(n,c):\"number\"!=typeof c&&\"Number\"!=i(c)&&\"String\"!=i(c)||l(n,a(c))}var u=n.length,p=!0;return function(e,t){if(p)return p=!1,t;if(o(this))return t;for(var r=0;r<u;r++)if(n[r]===e)return t}}}},14229:(e,t,n)=>{var r=n(24883),o=n(82119);e.exports=function(e,t){var n=e[t];return o(n)?void 0:r(n)}},21899:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r(\"object\"==typeof globalThis&&globalThis)||r(\"object\"==typeof window&&window)||r(\"object\"==typeof self&&self)||r(\"object\"==typeof n.g&&n.g)||function(){return this}()||this||Function(\"return this\")()},90953:(e,t,n)=>{var r=n(95329),o=n(89678),s=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return s(o(e),t)}},27748:e=>{e.exports={}},34845:e=>{e.exports=function(e,t){try{1==arguments.length?console.error(e):console.error(e,t)}catch(e){}}},15463:(e,t,n)=>{var r=n(626);e.exports=r(\"document\",\"documentElement\")},2840:(e,t,n)=>{var r=n(55746),o=n(95981),s=n(61333);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},37026:(e,t,n)=>{var r=n(95329),o=n(95981),s=n(82532),i=Object,a=r(\"\".split);e.exports=o((function(){return!i(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==s(e)?a(e,\"\"):i(e)}:i},81302:(e,t,n)=>{var r=n(95329),o=n(57475),s=n(63030),i=r(Function.toString);o(s.inspectSource)||(s.inspectSource=function(e){return i(e)}),e.exports=s.inspectSource},53794:(e,t,n)=>{var r=n(10941),o=n(32029);e.exports=function(e,t){r(t)&&\"cause\"in t&&o(e,\"cause\",t.cause)}},21647:(e,t,n)=>{var r=n(76887),o=n(95329),s=n(27748),i=n(10941),a=n(90953),l=n(65988).f,c=n(10946),u=n(684),p=n(91584),h=n(99418),f=n(45602),d=!1,m=h(\"meta\"),g=0,y=function(e){l(e,m,{value:{objectID:\"O\"+g++,weakData:{}}})},v=e.exports={enable:function(){v.enable=function(){},d=!0;var e=c.f,t=o([].splice),n={};n[m]=1,e(n).length&&(c.f=function(n){for(var r=e(n),o=0,s=r.length;o<s;o++)if(r[o]===m){t(r,o,1);break}return r},r({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(e,t){if(!i(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!a(e,m)){if(!p(e))return\"F\";if(!t)return\"E\";y(e)}return e[m].objectID},getWeakData:function(e,t){if(!a(e,m)){if(!p(e))return!0;if(!t)return!1;y(e)}return e[m].weakData},onFreeze:function(e){return f&&d&&p(e)&&!a(e,m)&&y(e),e}};s[m]=!0},45402:(e,t,n)=>{var r,o,s,i=n(47093),a=n(21899),l=n(10941),c=n(32029),u=n(90953),p=n(63030),h=n(44262),f=n(27748),d=\"Object already initialized\",m=a.TypeError,g=a.WeakMap;if(i||p.state){var y=p.state||(p.state=new g);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw m(d);return t.facade=e,y.set(e,t),t},o=function(e){return y.get(e)||{}},s=function(e){return y.has(e)}}else{var v=h(\"state\");f[v]=!0,r=function(e,t){if(u(e,v))throw m(d);return t.facade=e,c(e,v,t),t},o=function(e){return u(e,v)?e[v]:{}},s=function(e){return u(e,v)}}e.exports={set:r,get:o,has:s,enforce:function(e){return s(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw m(\"Incompatible receiver, \"+e+\" required\");return n}}}},6782:(e,t,n)=>{var r=n(99813),o=n(12077),s=r(\"iterator\"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[s]===e)}},1052:(e,t,n)=>{var r=n(82532);e.exports=Array.isArray||function(e){return\"Array\"==r(e)}},57475:(e,t,n)=>{var r=n(76616),o=r.all;e.exports=r.IS_HTMLDDA?function(e){return\"function\"==typeof e||e===o}:function(e){return\"function\"==typeof e}},24284:(e,t,n)=>{var r=n(95329),o=n(95981),s=n(57475),i=n(9697),a=n(626),l=n(81302),c=function(){},u=[],p=a(\"Reflect\",\"construct\"),h=/^\\s*(?:class|function)\\b/,f=r(h.exec),d=!h.exec(c),m=function(e){if(!s(e))return!1;try{return p(c,u,e),!0}catch(e){return!1}},g=function(e){if(!s(e))return!1;switch(i(e)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return d||!!f(h,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!p||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},37252:(e,t,n)=>{var r=n(95981),o=n(57475),s=/#|\\.prototype\\./,i=function(e,t){var n=l[a(e)];return n==u||n!=c&&(o(t)?r(t):!!t)},a=i.normalize=function(e){return String(e).replace(s,\".\").toLowerCase()},l=i.data={},c=i.NATIVE=\"N\",u=i.POLYFILL=\"P\";e.exports=i},54639:(e,t,n)=>{var r=n(10941),o=Math.floor;e.exports=Number.isInteger||function(e){return!r(e)&&isFinite(e)&&o(e)===e}},82119:e=>{e.exports=function(e){return null==e}},10941:(e,t,n)=>{var r=n(57475),o=n(76616),s=o.all;e.exports=o.IS_HTMLDDA?function(e){return\"object\"==typeof e?null!==e:r(e)||e===s}:function(e){return\"object\"==typeof e?null!==e:r(e)}},82529:e=>{e.exports=!0},60685:(e,t,n)=>{var r=n(10941),o=n(82532),s=n(99813)(\"match\");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[s])?!!t:\"RegExp\"==o(e))}},56664:(e,t,n)=>{var r=n(626),o=n(57475),s=n(7046),i=n(32302),a=Object;e.exports=i?function(e){return\"symbol\"==typeof e}:function(e){var t=r(\"Symbol\");return o(t)&&s(t.prototype,a(e))}},93091:(e,t,n)=>{var r=n(86843),o=n(78834),s=n(96059),i=n(69826),a=n(6782),l=n(10623),c=n(7046),u=n(53476),p=n(22902),h=n(7609),f=TypeError,d=function(e,t){this.stopped=e,this.result=t},m=d.prototype;e.exports=function(e,t,n){var g,y,v,b,w,E,x,S=n&&n.that,_=!(!n||!n.AS_ENTRIES),j=!(!n||!n.IS_RECORD),O=!(!n||!n.IS_ITERATOR),k=!(!n||!n.INTERRUPTED),A=r(t,S),C=function(e){return g&&h(g,\"normal\",e),new d(!0,e)},P=function(e){return _?(s(e),k?A(e[0],e[1],C):A(e[0],e[1])):k?A(e,C):A(e)};if(j)g=e.iterator;else if(O)g=e;else{if(!(y=p(e)))throw f(i(e)+\" is not iterable\");if(a(y)){for(v=0,b=l(e);b>v;v++)if((w=P(e[v]))&&c(m,w))return w;return new d(!1)}g=u(e,y)}for(E=j?e.next:g.next;!(x=o(E,g)).done;){try{w=P(x.value)}catch(e){h(g,\"throw\",e)}if(\"object\"==typeof w&&w&&c(m,w))return w}return new d(!1)}},7609:(e,t,n)=>{var r=n(78834),o=n(96059),s=n(14229);e.exports=function(e,t,n){var i,a;o(e);try{if(!(i=s(e,\"return\"))){if(\"throw\"===t)throw n;return n}i=r(i,e)}catch(e){a=!0,i=e}if(\"throw\"===t)throw n;if(a)throw i;return o(i),n}},53847:(e,t,n)=>{\"use strict\";var r=n(35143).IteratorPrototype,o=n(29290),s=n(31887),i=n(90904),a=n(12077),l=function(){return this};e.exports=function(e,t,n,c){var u=t+\" Iterator\";return e.prototype=o(r,{next:s(+!c,n)}),i(e,u,!1,!0),a[u]=l,e}},75105:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(82529),i=n(79417),a=n(57475),l=n(53847),c=n(249),u=n(88929),p=n(90904),h=n(32029),f=n(95929),d=n(99813),m=n(12077),g=n(35143),y=i.PROPER,v=i.CONFIGURABLE,b=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,E=d(\"iterator\"),x=\"keys\",S=\"values\",_=\"entries\",j=function(){return this};e.exports=function(e,t,n,i,d,g,O){l(n,t,i);var k,A,C,P=function(e){if(e===d&&M)return M;if(!w&&e in T)return T[e];switch(e){case x:case S:case _:return function(){return new n(this,e)}}return function(){return new n(this)}},N=t+\" Iterator\",I=!1,T=e.prototype,R=T[E]||T[\"@@iterator\"]||d&&T[d],M=!w&&R||P(d),D=\"Array\"==t&&T.entries||R;if(D&&(k=c(D.call(new e)))!==Object.prototype&&k.next&&(s||c(k)===b||(u?u(k,b):a(k[E])||f(k,E,j)),p(k,N,!0,!0),s&&(m[N]=j)),y&&d==S&&R&&R.name!==S&&(!s&&v?h(T,\"name\",S):(I=!0,M=function(){return o(R,this)})),d)if(A={values:P(S),keys:g?M:P(x),entries:P(_)},O)for(C in A)(w||I||!(C in T))&&f(T,C,A[C]);else r({target:t,proto:!0,forced:w||I},A);return s&&!O||T[E]===M||f(T,E,M,{name:d}),m[t]=M,A}},35143:(e,t,n)=>{\"use strict\";var r,o,s,i=n(95981),a=n(57475),l=n(10941),c=n(29290),u=n(249),p=n(95929),h=n(99813),f=n(82529),d=h(\"iterator\"),m=!1;[].keys&&(\"next\"in(s=[].keys())?(o=u(u(s)))!==Object.prototype&&(r=o):m=!0),!l(r)||i((function(){var e={};return r[d].call(e)!==e}))?r={}:f&&(r=c(r)),a(r[d])||p(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},12077:e=>{e.exports={}},10623:(e,t,n)=>{var r=n(43057);e.exports=function(e){return r(e.length)}},35331:e=>{var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},66132:(e,t,n)=>{var r,o,s,i,a,l=n(21899),c=n(86843),u=n(49677).f,p=n(42941).set,h=n(18397),f=n(22749),d=n(4470),m=n(58045),g=n(6049),y=l.MutationObserver||l.WebKitMutationObserver,v=l.document,b=l.process,w=l.Promise,E=u(l,\"queueMicrotask\"),x=E&&E.value;if(!x){var S=new h,_=function(){var e,t;for(g&&(e=b.domain)&&e.exit();t=S.get();)try{t()}catch(e){throw S.head&&r(),e}e&&e.enter()};f||g||m||!y||!v?!d&&w&&w.resolve?((i=w.resolve(void 0)).constructor=w,a=c(i.then,i),r=function(){a(_)}):g?r=function(){b.nextTick(_)}:(p=c(p,l),r=function(){p(_)}):(o=!0,s=v.createTextNode(\"\"),new y(_).observe(s,{characterData:!0}),r=function(){s.data=o=!o}),x=function(e){S.head||r(),S.add(e)}}e.exports=x},69520:(e,t,n)=>{\"use strict\";var r=n(24883),o=TypeError,s=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw o(\"Bad Promise constructor\");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new s(e)}},14649:(e,t,n)=>{var r=n(85803);e.exports=function(e,t){return void 0===e?arguments.length<2?\"\":t:r(e)}},70344:(e,t,n)=>{var r=n(60685),o=TypeError;e.exports=function(e){if(r(e))throw o(\"The method doesn't accept regular expressions\");return e}},24420:(e,t,n)=>{\"use strict\";var r=n(55746),o=n(95329),s=n(78834),i=n(95981),a=n(14771),l=n(87857),c=n(36760),u=n(89678),p=n(37026),h=Object.assign,f=Object.defineProperty,d=o([].concat);e.exports=!h||i((function(){if(r&&1!==h({b:1},h(f({},\"a\",{enumerable:!0,get:function(){f(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o=\"abcdefghijklmnopqrst\";return e[n]=7,o.split(\"\").forEach((function(e){t[e]=e})),7!=h({},e)[n]||a(h({},t)).join(\"\")!=o}))?function(e,t){for(var n=u(e),o=arguments.length,i=1,h=l.f,f=c.f;o>i;)for(var m,g=p(arguments[i++]),y=h?d(a(g),h(g)):a(g),v=y.length,b=0;v>b;)m=y[b++],r&&!s(f,g,m)||(n[m]=g[m]);return n}:h},29290:(e,t,n)=>{var r,o=n(96059),s=n(59938),i=n(56759),a=n(27748),l=n(15463),c=n(61333),u=n(44262),p=\"prototype\",h=\"script\",f=u(\"IE_PROTO\"),d=function(){},m=function(e){return\"<\"+h+\">\"+e+\"</\"+h+\">\"},g=function(e){e.write(m(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject(\"htmlfile\")}catch(e){}var e,t,n;y=\"undefined\"!=typeof document?document.domain&&r?g(r):(t=c(\"iframe\"),n=\"java\"+h+\":\",t.style.display=\"none\",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(m(\"document.F=Object\")),e.close(),e.F):g(r);for(var o=i.length;o--;)delete y[p][i[o]];return y()};a[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(d[p]=o(e),n=new d,d[p]=null,n[f]=e):n=y(),void 0===t?n:s.f(n,t)}},59938:(e,t,n)=>{var r=n(55746),o=n(83937),s=n(65988),i=n(96059),a=n(74529),l=n(14771);t.f=r&&!o?Object.defineProperties:function(e,t){i(e);for(var n,r=a(t),o=l(t),c=o.length,u=0;c>u;)s.f(e,n=o[u++],r[n]);return e}},65988:(e,t,n)=>{var r=n(55746),o=n(2840),s=n(83937),i=n(96059),a=n(83894),l=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,p=\"enumerable\",h=\"configurable\",f=\"writable\";t.f=r?s?function(e,t,n){if(i(e),t=a(t),i(n),\"function\"==typeof e&&\"prototype\"===t&&\"value\"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:p in n?n[p]:r[p],writable:!1})}return c(e,t,n)}:c:function(e,t,n){if(i(e),t=a(t),i(n),o)try{return c(e,t,n)}catch(e){}if(\"get\"in n||\"set\"in n)throw l(\"Accessors not supported\");return\"value\"in n&&(e[t]=n.value),e}},49677:(e,t,n)=>{var r=n(55746),o=n(78834),s=n(36760),i=n(31887),a=n(74529),l=n(83894),c=n(90953),u=n(2840),p=Object.getOwnPropertyDescriptor;t.f=r?p:function(e,t){if(e=a(e),t=l(t),u)try{return p(e,t)}catch(e){}if(c(e,t))return i(!o(s.f,e,t),e[t])}},684:(e,t,n)=>{var r=n(82532),o=n(74529),s=n(10946).f,i=n(15790),a=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&\"Window\"==r(e)?function(e){try{return s(e)}catch(e){return i(a)}}(e):s(o(e))}},10946:(e,t,n)=>{var r=n(55629),o=n(56759).concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},87857:(e,t)=>{t.f=Object.getOwnPropertySymbols},249:(e,t,n)=>{var r=n(90953),o=n(57475),s=n(89678),i=n(44262),a=n(64160),l=i(\"IE_PROTO\"),c=Object,u=c.prototype;e.exports=a?c.getPrototypeOf:function(e){var t=s(e);if(r(t,l))return t[l];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof c?u:null}},91584:(e,t,n)=>{var r=n(95981),o=n(10941),s=n(82532),i=n(97135),a=Object.isExtensible,l=r((function(){a(1)}));e.exports=l||i?function(e){return!!o(e)&&((!i||\"ArrayBuffer\"!=s(e))&&(!a||a(e)))}:a},7046:(e,t,n)=>{var r=n(95329);e.exports=r({}.isPrototypeOf)},55629:(e,t,n)=>{var r=n(95329),o=n(90953),s=n(74529),i=n(31692).indexOf,a=n(27748),l=r([].push);e.exports=function(e,t){var n,r=s(e),c=0,u=[];for(n in r)!o(a,n)&&o(r,n)&&l(u,n);for(;t.length>c;)o(r,n=t[c++])&&(~i(u,n)||l(u,n));return u}},14771:(e,t,n)=>{var r=n(55629),o=n(56759);e.exports=Object.keys||function(e){return r(e,o)}},36760:(e,t)=>{\"use strict\";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},88929:(e,t,n)=>{var r=n(45526),o=n(96059),s=n(11851);e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,\"__proto__\",\"set\"))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),s(r),t?e(n,r):n.__proto__=r,n}}():void 0)},88810:(e,t,n)=>{var r=n(55746),o=n(95981),s=n(95329),i=n(249),a=n(14771),l=n(74529),c=s(n(36760).f),u=s([].push),p=r&&o((function(){var e=Object.create(null);return e[2]=2,!c(e,2)})),h=function(e){return function(t){for(var n,o=l(t),s=a(o),h=p&&null===i(o),f=s.length,d=0,m=[];f>d;)n=s[d++],r&&!(h?n in o:c(o,n))||u(m,e?[n,o[n]]:o[n]);return m}};e.exports={entries:h(!0),values:h(!1)}},95623:(e,t,n)=>{\"use strict\";var r=n(22885),o=n(9697);e.exports=r?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},39811:(e,t,n)=>{var r=n(78834),o=n(57475),s=n(10941),i=TypeError;e.exports=function(e,t){var n,a;if(\"string\"===t&&o(n=e.toString)&&!s(a=r(n,e)))return a;if(o(n=e.valueOf)&&!s(a=r(n,e)))return a;if(\"string\"!==t&&o(n=e.toString)&&!s(a=r(n,e)))return a;throw i(\"Can't convert object to primitive value\")}},31136:(e,t,n)=>{var r=n(626),o=n(95329),s=n(10946),i=n(87857),a=n(96059),l=o([].concat);e.exports=r(\"Reflect\",\"ownKeys\")||function(e){var t=s.f(a(e)),n=i.f;return n?l(t,n(e)):t}},54058:e=>{e.exports={}},40002:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},67742:(e,t,n)=>{var r=n(21899),o=n(6991),s=n(57475),i=n(37252),a=n(81302),l=n(99813),c=n(23321),u=n(48501),p=n(82529),h=n(53385),f=o&&o.prototype,d=l(\"species\"),m=!1,g=s(r.PromiseRejectionEvent),y=i(\"Promise\",(function(){var e=a(o),t=e!==String(o);if(!t&&66===h)return!0;if(p&&(!f.catch||!f.finally))return!0;if(!h||h<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};if((n.constructor={})[d]=r,!(m=n.then((function(){}))instanceof r))return!0}return!t&&(c||u)&&!g}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:g,SUBCLASSING:m}},6991:(e,t,n)=>{var r=n(21899);e.exports=r.Promise},56584:(e,t,n)=>{var r=n(96059),o=n(10941),s=n(69520);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=s.f(e);return(0,n.resolve)(t),n.promise}},31542:(e,t,n)=>{var r=n(6991),o=n(21385),s=n(67742).CONSTRUCTOR;e.exports=s||!o((function(e){r.all(e).then(void 0,(function(){}))}))},18397:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},48219:(e,t,n)=>{var r=n(82119),o=TypeError;e.exports=function(e){if(r(e))throw o(\"Can't call method on \"+e);return e}},37620:(e,t,n)=>{\"use strict\";var r,o=n(21899),s=n(79730),i=n(57475),a=n(56491),l=n(2861),c=n(93765),u=n(18348),p=o.Function,h=/MSIE .\\./.test(l)||a&&((r=o.Bun.version.split(\".\")).length<3||0==r[0]&&(r[1]<3||3==r[1]&&0==r[2]));e.exports=function(e,t){var n=t?2:1;return h?function(r,o){var a=u(arguments.length,1)>n,l=i(r)?r:p(r),h=a?c(arguments,n):[],f=a?function(){s(l,this,h)}:l;return t?e(f,o):e(f)}:e}},94431:(e,t,n)=>{\"use strict\";var r=n(626),o=n(29202),s=n(99813),i=n(55746),a=s(\"species\");e.exports=function(e){var t=r(e);i&&t&&!t[a]&&o(t,a,{configurable:!0,get:function(){return this}})}},90904:(e,t,n)=>{var r=n(22885),o=n(65988).f,s=n(32029),i=n(90953),a=n(95623),l=n(99813)(\"toStringTag\");e.exports=function(e,t,n,c){if(e){var u=n?e:e.prototype;i(u,l)||o(u,l,{configurable:!0,value:t}),c&&!r&&s(u,\"toString\",a)}}},44262:(e,t,n)=>{var r=n(68726),o=n(99418),s=r(\"keys\");e.exports=function(e){return s[e]||(s[e]=o(e))}},63030:(e,t,n)=>{var r=n(21899),o=n(75609),s=\"__core-js_shared__\",i=r[s]||o(s,{});e.exports=i},68726:(e,t,n)=>{var r=n(82529),o=n(63030);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.31.0\",mode:r?\"pure\":\"global\",copyright:\"© 2014-2023 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.31.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},70487:(e,t,n)=>{var r=n(96059),o=n(174),s=n(82119),i=n(99813)(\"species\");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||s(n=r(a)[i])?t:o(n)}},64620:(e,t,n)=>{var r=n(95329),o=n(62435),s=n(85803),i=n(48219),a=r(\"\".charAt),l=r(\"\".charCodeAt),c=r(\"\".slice),u=function(e){return function(t,n){var r,u,p=s(i(t)),h=o(n),f=p.length;return h<0||h>=f?e?\"\":void 0:(r=l(p,h))<55296||r>56319||h+1===f||(u=l(p,h+1))<56320||u>57343?e?a(p,h):r:e?c(p,h,h+2):u-56320+(r-55296<<10)+65536}};e.exports={codeAt:u(!1),charAt:u(!0)}},73291:(e,t,n)=>{var r=n(95329),o=2147483647,s=/[^\\0-\\u007E]/,i=/[.\\u3002\\uFF0E\\uFF61]/g,a=\"Overflow: input needs wider integers to process\",l=RangeError,c=r(i.exec),u=Math.floor,p=String.fromCharCode,h=r(\"\".charCodeAt),f=r([].join),d=r([].push),m=r(\"\".replace),g=r(\"\".split),y=r(\"\".toLowerCase),v=function(e){return e+22+75*(e<26)},b=function(e,t,n){var r=0;for(e=n?u(e/700):e>>1,e+=u(e/t);e>455;)e=u(e/35),r+=36;return u(r+36*e/(e+38))},w=function(e){var t=[];e=function(e){for(var t=[],n=0,r=e.length;n<r;){var o=h(e,n++);if(o>=55296&&o<=56319&&n<r){var s=h(e,n++);56320==(64512&s)?d(t,((1023&o)<<10)+(1023&s)+65536):(d(t,o),n--)}else d(t,o)}return t}(e);var n,r,s=e.length,i=128,c=0,m=72;for(n=0;n<e.length;n++)(r=e[n])<128&&d(t,p(r));var g=t.length,y=g;for(g&&d(t,\"-\");y<s;){var w=o;for(n=0;n<e.length;n++)(r=e[n])>=i&&r<w&&(w=r);var E=y+1;if(w-i>u((o-c)/E))throw l(a);for(c+=(w-i)*E,i=w,n=0;n<e.length;n++){if((r=e[n])<i&&++c>o)throw l(a);if(r==i){for(var x=c,S=36;;){var _=S<=m?1:S>=m+26?26:S-m;if(x<_)break;var j=x-_,O=36-_;d(t,p(v(_+j%O))),x=u(j/O),S+=36}d(t,p(v(x))),m=b(c,E,y==g),c=0,y++}}c++,i++}return f(t,\"\")};e.exports=function(e){var t,n,r=[],o=g(m(y(e),i,\".\"),\".\");for(t=0;t<o.length;t++)n=o[t],d(r,c(s,n)?\"xn--\"+w(n):n);return f(r,\".\")}},16178:(e,t,n)=>{\"use strict\";var r=n(62435),o=n(85803),s=n(48219),i=RangeError;e.exports=function(e){var t=o(s(this)),n=\"\",a=r(e);if(a<0||a==1/0)throw i(\"Wrong number of repetitions\");for(;a>0;(a>>>=1)&&(t+=t))1&a&&(n+=t);return n}},93093:(e,t,n)=>{var r=n(79417).PROPER,o=n(95981),s=n(73483);e.exports=function(e){return o((function(){return!!s[e]()||\"​᠎\"!==\"​᠎\"[e]()||r&&s[e].name!==e}))}},74853:(e,t,n)=>{var r=n(95329),o=n(48219),s=n(85803),i=n(73483),a=r(\"\".replace),l=RegExp(\"^[\"+i+\"]+\"),c=RegExp(\"(^|[^\"+i+\"])[\"+i+\"]+$\"),u=function(e){return function(t){var n=s(o(t));return 1&e&&(n=a(n,l,\"\")),2&e&&(n=a(n,c,\"$1\")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},63405:(e,t,n)=>{var r=n(53385),o=n(95981),s=n(21899).String;e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!s(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},29630:(e,t,n)=>{var r=n(78834),o=n(626),s=n(99813),i=n(95929);e.exports=function(){var e=o(\"Symbol\"),t=e&&e.prototype,n=t&&t.valueOf,a=s(\"toPrimitive\");t&&!t[a]&&i(t,a,(function(e){return r(n,this)}),{arity:1})}},32087:(e,t,n)=>{var r=n(626),o=n(95329),s=r(\"Symbol\"),i=s.keyFor,a=o(s.prototype.valueOf);e.exports=s.isRegisteredSymbol||function(e){try{return void 0!==i(a(e))}catch(e){return!1}}},96559:(e,t,n)=>{for(var r=n(68726),o=n(626),s=n(95329),i=n(56664),a=n(99813),l=o(\"Symbol\"),c=l.isWellKnownSymbol,u=o(\"Object\",\"getOwnPropertyNames\"),p=s(l.prototype.valueOf),h=r(\"wks\"),f=0,d=u(l),m=d.length;f<m;f++)try{var g=d[f];i(l[g])&&a(g)}catch(e){}e.exports=function(e){if(c&&c(e))return!0;try{for(var t=p(e),n=0,r=u(h),o=r.length;n<o;n++)if(h[r[n]]==t)return!0}catch(e){}return!1}},34680:(e,t,n)=>{var r=n(63405);e.exports=r&&!!Symbol.for&&!!Symbol.keyFor},42941:(e,t,n)=>{var r,o,s,i,a=n(21899),l=n(79730),c=n(86843),u=n(57475),p=n(90953),h=n(95981),f=n(15463),d=n(93765),m=n(61333),g=n(18348),y=n(22749),v=n(6049),b=a.setImmediate,w=a.clearImmediate,E=a.process,x=a.Dispatch,S=a.Function,_=a.MessageChannel,j=a.String,O=0,k={},A=\"onreadystatechange\";h((function(){r=a.location}));var C=function(e){if(p(k,e)){var t=k[e];delete k[e],t()}},P=function(e){return function(){C(e)}},N=function(e){C(e.data)},I=function(e){a.postMessage(j(e),r.protocol+\"//\"+r.host)};b&&w||(b=function(e){g(arguments.length,1);var t=u(e)?e:S(e),n=d(arguments,1);return k[++O]=function(){l(t,void 0,n)},o(O),O},w=function(e){delete k[e]},v?o=function(e){E.nextTick(P(e))}:x&&x.now?o=function(e){x.now(P(e))}:_&&!y?(i=(s=new _).port2,s.port1.onmessage=N,o=c(i.postMessage,i)):a.addEventListener&&u(a.postMessage)&&!a.importScripts&&r&&\"file:\"!==r.protocol&&!h(I)?(o=I,a.addEventListener(\"message\",N,!1)):o=A in m(\"script\")?function(e){f.appendChild(m(\"script\"))[A]=function(){f.removeChild(this),C(e)}}:function(e){setTimeout(P(e),0)}),e.exports={set:b,clear:w}},59413:(e,t,n)=>{var r=n(62435),o=Math.max,s=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):s(n,t)}},74529:(e,t,n)=>{var r=n(37026),o=n(48219);e.exports=function(e){return r(o(e))}},62435:(e,t,n)=>{var r=n(35331);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},43057:(e,t,n)=>{var r=n(62435),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},89678:(e,t,n)=>{var r=n(48219),o=Object;e.exports=function(e){return o(r(e))}},46935:(e,t,n)=>{var r=n(78834),o=n(10941),s=n(56664),i=n(14229),a=n(39811),l=n(99813),c=TypeError,u=l(\"toPrimitive\");e.exports=function(e,t){if(!o(e)||s(e))return e;var n,l=i(e,u);if(l){if(void 0===t&&(t=\"default\"),n=r(l,e,t),!o(n)||s(n))return n;throw c(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),a(e,t)}},83894:(e,t,n)=>{var r=n(46935),o=n(56664);e.exports=function(e){var t=r(e,\"string\");return o(t)?t:t+\"\"}},22885:(e,t,n)=>{var r={};r[n(99813)(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(r)},85803:(e,t,n)=>{var r=n(9697),o=String;e.exports=function(e){if(\"Symbol\"===r(e))throw TypeError(\"Cannot convert a Symbol value to a string\");return o(e)}},69826:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return\"Object\"}}},99418:(e,t,n)=>{var r=n(95329),o=0,s=Math.random(),i=r(1..toString);e.exports=function(e){return\"Symbol(\"+(void 0===e?\"\":e)+\")_\"+i(++o+s,36)}},14766:(e,t,n)=>{var r=n(95981),o=n(99813),s=n(55746),i=n(82529),a=o(\"iterator\");e.exports=!r((function(){var e=new URL(\"b?a=1&b=2&c=3\",\"http://a\"),t=e.searchParams,n=new URLSearchParams(\"a=1&a=2\"),r=\"\";return e.pathname=\"c%20d\",t.forEach((function(e,n){t.delete(\"b\"),r+=n+e})),n.delete(\"a\",2),i&&(!e.toJSON||!n.has(\"a\",1)||n.has(\"a\",2))||!t.size&&(i||!s)||!t.sort||\"http://a/c%20d?a=1&c=3\"!==e.href||\"3\"!==t.get(\"c\")||\"a=1\"!==String(new URLSearchParams(\"?a=1\"))||!t[a]||\"a\"!==new URL(\"https://a@b\").username||\"b\"!==new URLSearchParams(new URLSearchParams(\"a=b\")).get(\"a\")||\"xn--e1aybc\"!==new URL(\"http://тест\").host||\"#%D0%B1\"!==new URL(\"http://a#б\").hash||\"a1c3\"!==r||\"x\"!==new URL(\"http://x\",void 0).host}))},32302:(e,t,n)=>{var r=n(63405);e.exports=r&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},83937:(e,t,n)=>{var r=n(55746),o=n(95981);e.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},18348:e=>{var t=TypeError;e.exports=function(e,n){if(e<n)throw t(\"Not enough arguments\");return e}},47093:(e,t,n)=>{var r=n(21899),o=n(57475),s=r.WeakMap;e.exports=o(s)&&/native code/.test(String(s))},73464:(e,t,n)=>{var r=n(54058),o=n(90953),s=n(11477),i=n(65988).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:s.f(e)})}},11477:(e,t,n)=>{var r=n(99813);t.f=r},99813:(e,t,n)=>{var r=n(21899),o=n(68726),s=n(90953),i=n(99418),a=n(63405),l=n(32302),c=r.Symbol,u=o(\"wks\"),p=l?c.for||c:c&&c.withoutSetter||i;e.exports=function(e){return s(u,e)||(u[e]=a&&s(c,e)?c[e]:p(\"Symbol.\"+e)),u[e]}},73483:e=>{e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},49812:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(7046),s=n(249),i=n(88929),a=n(23489),l=n(29290),c=n(32029),u=n(31887),p=n(53794),h=n(79585),f=n(93091),d=n(14649),m=n(99813)(\"toStringTag\"),g=Error,y=[].push,v=function(e,t){var n,r=o(b,this);i?n=i(g(),r?s(this):b):(n=r?this:l(b),c(n,m,\"Error\")),void 0!==t&&c(n,\"message\",d(t)),h(n,v,n.stack,1),arguments.length>2&&p(n,arguments[2]);var a=[];return f(e,y,{that:a}),c(n,\"errors\",a),n};i?i(v,g):a(v,g,{name:!0});var b=v.prototype=l(g.prototype,{constructor:u(1,v),message:u(1,\"\"),name:u(1,\"AggregateError\")});r({global:!0,constructor:!0,arity:2},{AggregateError:v})},47627:(e,t,n)=>{n(49812)},85906:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(95981),s=n(1052),i=n(10941),a=n(89678),l=n(10623),c=n(66796),u=n(55449),p=n(64692),h=n(50568),f=n(99813),d=n(53385),m=f(\"isConcatSpreadable\"),g=d>=51||!o((function(){var e=[];return e[m]=!1,e.concat()[0]!==e})),y=function(e){if(!i(e))return!1;var t=e[m];return void 0!==t?!!t:s(e)};r({target:\"Array\",proto:!0,arity:1,forced:!g||!h(\"concat\")},{concat:function(e){var t,n,r,o,s,i=a(this),h=p(i,0),f=0;for(t=-1,r=arguments.length;t<r;t++)if(y(s=-1===t?i:arguments[t]))for(o=l(s),c(f+o),n=0;n<o;n++,f++)n in s&&u(h,f,s[n]);else c(f+1),u(h,f++,s);return h.length=f,h}})},48851:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).every;r({target:\"Array\",proto:!0,forced:!n(34194)(\"every\")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},80290:(e,t,n)=>{var r=n(76887),o=n(91860),s=n(18479);r({target:\"Array\",proto:!0},{fill:o}),s(\"fill\")},21501:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).filter;r({target:\"Array\",proto:!0,forced:!n(50568)(\"filter\")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},44929:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).findIndex,s=n(18479),i=\"findIndex\",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r({target:\"Array\",proto:!0,forced:a},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(i)},80833:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).find,s=n(18479),i=\"find\",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r({target:\"Array\",proto:!0,forced:a},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(i)},2437:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(56837);r({target:\"Array\",proto:!0,forced:[].forEach!=o},{forEach:o})},53242:(e,t,n)=>{var r=n(76887),o=n(11354);r({target:\"Array\",stat:!0,forced:!n(21385)((function(e){Array.from(e)}))},{from:o})},97690:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(31692).includes,s=n(95981),i=n(18479);r({target:\"Array\",proto:!0,forced:s((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(\"includes\")},99076:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(97484),s=n(31692).indexOf,i=n(34194),a=o([].indexOf),l=!!a&&1/a([1],1,-0)<0;r({target:\"Array\",proto:!0,forced:l||!i(\"indexOf\")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return l?a(this,e,t)||0:s(this,e,t)}})},92737:(e,t,n)=>{n(76887)({target:\"Array\",stat:!0},{isArray:n(1052)})},66274:(e,t,n)=>{\"use strict\";var r=n(74529),o=n(18479),s=n(12077),i=n(45402),a=n(65988).f,l=n(75105),c=n(23538),u=n(82529),p=n(55746),h=\"Array Iterator\",f=i.set,d=i.getterFor(h);e.exports=l(Array,\"Array\",(function(e,t){f(this,{type:h,target:r(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,c(void 0,!0)):c(\"keys\"==n?r:\"values\"==n?t[r]:[r,t[r]],!1)}),\"values\");var m=s.Arguments=s.Array;if(o(\"keys\"),o(\"values\"),o(\"entries\"),!u&&p&&\"values\"!==m.name)try{a(m,\"name\",{value:\"values\"})}catch(e){}},75915:(e,t,n)=>{var r=n(76887),o=n(67145);r({target:\"Array\",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},68787:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).map;r({target:\"Array\",proto:!0,forced:!n(50568)(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},48528:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(89678),s=n(10623),i=n(89779),a=n(66796);r({target:\"Array\",proto:!0,arity:1,forced:n(95981)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],\"length\",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=o(this),n=s(t),r=arguments.length;a(n+r);for(var l=0;l<r;l++)t[n]=arguments[l],n++;return i(t,n),n}})},81876:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(46499).left,s=n(34194),i=n(53385);r({target:\"Array\",proto:!0,forced:!n(6049)&&i>79&&i<83||!s(\"reduce\")},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},60186:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(1052),s=n(24284),i=n(10941),a=n(59413),l=n(10623),c=n(74529),u=n(55449),p=n(99813),h=n(50568),f=n(93765),d=h(\"slice\"),m=p(\"species\"),g=Array,y=Math.max;r({target:\"Array\",proto:!0,forced:!d},{slice:function(e,t){var n,r,p,h=c(this),d=l(h),v=a(e,d),b=a(void 0===t?d:t,d);if(o(h)&&(n=h.constructor,(s(n)&&(n===g||o(n.prototype))||i(n)&&null===(n=n[m]))&&(n=void 0),n===g||void 0===n))return f(h,v,b);for(r=new(void 0===n?g:n)(y(b-v,0)),p=0;v<b;v++,p++)v in h&&u(r,p,h[v]);return r.length=p,r}})},36026:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).some;r({target:\"Array\",proto:!0,forced:!n(34194)(\"some\")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},4115:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(95329),s=n(24883),i=n(89678),a=n(10623),l=n(15863),c=n(85803),u=n(95981),p=n(61388),h=n(34194),f=n(34342),d=n(81046),m=n(53385),g=n(18938),y=[],v=o(y.sort),b=o(y.push),w=u((function(){y.sort(void 0)})),E=u((function(){y.sort(null)})),x=h(\"sort\"),S=!u((function(){if(m)return m<70;if(!(f&&f>3)){if(d)return!0;if(g)return g<603;var e,t,n,r,o=\"\";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)y.push({k:t+r,v:n})}for(y.sort((function(e,t){return t.v-e.v})),r=0;r<y.length;r++)t=y[r].k.charAt(0),o.charAt(o.length-1)!==t&&(o+=t);return\"DGBEFHACIJK\"!==o}}));r({target:\"Array\",proto:!0,forced:w||!E||!x||!S},{sort:function(e){void 0!==e&&s(e);var t=i(this);if(S)return void 0===e?v(t):v(t,e);var n,r,o=[],u=a(t);for(r=0;r<u;r++)r in t&&b(o,t[r]);for(p(o,function(e){return function(t,n){return void 0===n?-1:void 0===t?1:void 0!==e?+e(t,n)||0:c(t)>c(n)?1:-1}}(e)),n=a(o),r=0;r<n;)t[r]=o[r++];for(;r<u;)l(t,r++);return t}})},98611:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(89678),s=n(59413),i=n(62435),a=n(10623),l=n(89779),c=n(66796),u=n(64692),p=n(55449),h=n(15863),f=n(50568)(\"splice\"),d=Math.max,m=Math.min;r({target:\"Array\",proto:!0,forced:!f},{splice:function(e,t){var n,r,f,g,y,v,b=o(this),w=a(b),E=s(e,w),x=arguments.length;for(0===x?n=r=0:1===x?(n=0,r=w-E):(n=x-2,r=m(d(i(t),0),w-E)),c(w+n-r),f=u(b,r),g=0;g<r;g++)(y=E+g)in b&&p(f,g,b[y]);if(f.length=r,n<r){for(g=E;g<w-r;g++)v=g+n,(y=g+r)in b?b[v]=b[y]:h(b,v);for(g=w;g>w-r+n;g--)h(b,g-1)}else if(n>r)for(g=w-r;g>E;g--)v=g+n-1,(y=g+r-1)in b?b[v]=b[y]:h(b,v);for(g=0;g<n;g++)b[g+E]=arguments[g+2];return l(b,w-r+n),f}})},95160:(e,t,n)=>{var r=n(76887),o=n(95329),s=Date,i=o(s.prototype.getTime);r({target:\"Date\",stat:!0},{now:function(){return i(new s)}})},18084:()=>{},73381:(e,t,n)=>{var r=n(76887),o=n(98308);r({target:\"Function\",proto:!0,forced:Function.bind!==o},{bind:o})},32619:(e,t,n)=>{var r=n(76887),o=n(626),s=n(79730),i=n(78834),a=n(95329),l=n(95981),c=n(57475),u=n(56664),p=n(93765),h=n(33323),f=n(63405),d=String,m=o(\"JSON\",\"stringify\"),g=a(/./.exec),y=a(\"\".charAt),v=a(\"\".charCodeAt),b=a(\"\".replace),w=a(1..toString),E=/[\\uD800-\\uDFFF]/g,x=/^[\\uD800-\\uDBFF]$/,S=/^[\\uDC00-\\uDFFF]$/,_=!f||l((function(){var e=o(\"Symbol\")();return\"[null]\"!=m([e])||\"{}\"!=m({a:e})||\"{}\"!=m(Object(e))})),j=l((function(){return'\"\\\\udf06\\\\ud834\"'!==m(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==m(\"\\udead\")})),O=function(e,t){var n=p(arguments),r=h(t);if(c(r)||void 0!==e&&!u(e))return n[1]=function(e,t){if(c(r)&&(t=i(r,this,d(e),t)),!u(t))return t},s(m,null,n)},k=function(e,t,n){var r=y(n,t-1),o=y(n,t+1);return g(x,e)&&!g(S,o)||g(S,e)&&!g(x,r)?\"\\\\u\"+w(v(e,0),16):e};m&&r({target:\"JSON\",stat:!0,arity:3,forced:_||j},{stringify:function(e,t,n){var r=p(arguments),o=s(_?O:m,null,r);return j&&\"string\"==typeof o?b(o,E,k):o}})},69120:(e,t,n)=>{var r=n(21899);n(90904)(r.JSON,\"JSON\",!0)},23112:(e,t,n)=>{\"use strict\";n(24683)(\"Map\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(85616))},37501:(e,t,n)=>{n(23112)},79413:()=>{},54973:(e,t,n)=>{n(76887)({target:\"Number\",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},30800:(e,t,n)=>{n(76887)({target:\"Number\",stat:!0},{isInteger:n(54639)})},49221:(e,t,n)=>{var r=n(76887),o=n(24420);r({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},74979:(e,t,n)=>{var r=n(76887),o=n(55746),s=n(59938).f;r({target:\"Object\",stat:!0,forced:Object.defineProperties!==s,sham:!o},{defineProperties:s})},86450:(e,t,n)=>{var r=n(76887),o=n(55746),s=n(65988).f;r({target:\"Object\",stat:!0,forced:Object.defineProperty!==s,sham:!o},{defineProperty:s})},94366:(e,t,n)=>{var r=n(76887),o=n(88810).entries;r({target:\"Object\",stat:!0},{entries:function(e){return o(e)}})},28387:(e,t,n)=>{var r=n(76887),o=n(93091),s=n(55449);r({target:\"Object\",stat:!0},{fromEntries:function(e){var t={};return o(e,(function(e,n){s(t,e,n)}),{AS_ENTRIES:!0}),t}})},46924:(e,t,n)=>{var r=n(76887),o=n(95981),s=n(74529),i=n(49677).f,a=n(55746);r({target:\"Object\",stat:!0,forced:!a||o((function(){i(1)})),sham:!a},{getOwnPropertyDescriptor:function(e,t){return i(s(e),t)}})},88482:(e,t,n)=>{var r=n(76887),o=n(55746),s=n(31136),i=n(74529),a=n(49677),l=n(55449);r({target:\"Object\",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),o=a.f,c=s(r),u={},p=0;c.length>p;)void 0!==(n=o(r,t=c[p++]))&&l(u,t,n);return u}})},37144:(e,t,n)=>{var r=n(76887),o=n(63405),s=n(95981),i=n(87857),a=n(89678);r({target:\"Object\",stat:!0,forced:!o||s((function(){i.f(1)}))},{getOwnPropertySymbols:function(e){var t=i.f;return t?t(a(e)):[]}})},21724:(e,t,n)=>{var r=n(76887),o=n(89678),s=n(14771);r({target:\"Object\",stat:!0,forced:n(95981)((function(){s(1)}))},{keys:function(e){return s(o(e))}})},55967:()=>{},26614:(e,t,n)=>{var r=n(76887),o=n(88810).values;r({target:\"Object\",stat:!0},{values:function(e){return o(e)}})},4560:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(69520),a=n(40002),l=n(93091);r({target:\"Promise\",stat:!0,forced:n(31542)},{allSettled:function(e){var t=this,n=i.f(t),r=n.resolve,c=n.reject,u=a((function(){var n=s(t.resolve),i=[],a=0,c=1;l(e,(function(e){var s=a++,l=!1;c++,o(n,t,e).then((function(e){l||(l=!0,i[s]={status:\"fulfilled\",value:e},--c||r(i))}),(function(e){l||(l=!0,i[s]={status:\"rejected\",reason:e},--c||r(i))}))})),--c||r(i)}));return u.error&&c(u.value),n.promise}})},16890:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(69520),a=n(40002),l=n(93091);r({target:\"Promise\",stat:!0,forced:n(31542)},{all:function(e){var t=this,n=i.f(t),r=n.resolve,c=n.reject,u=a((function(){var n=s(t.resolve),i=[],a=0,u=1;l(e,(function(e){var s=a++,l=!1;u++,o(n,t,e).then((function(e){l||(l=!0,i[s]=e,--u||r(i))}),c)})),--u||r(i)}));return u.error&&c(u.value),n.promise}})},91302:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(626),a=n(69520),l=n(40002),c=n(93091),u=n(31542),p=\"No one promise resolved\";r({target:\"Promise\",stat:!0,forced:u},{any:function(e){var t=this,n=i(\"AggregateError\"),r=a.f(t),u=r.resolve,h=r.reject,f=l((function(){var r=s(t.resolve),i=[],a=0,l=1,f=!1;c(e,(function(e){var s=a++,c=!1;l++,o(r,t,e).then((function(e){c||f||(f=!0,u(e))}),(function(e){c||f||(c=!0,i[s]=e,--l||h(new n(i,p)))}))})),--l||h(new n(i,p))}));return f.error&&h(f.value),r.promise}})},83376:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(82529),s=n(67742).CONSTRUCTOR,i=n(6991),a=n(626),l=n(57475),c=n(95929),u=i&&i.prototype;if(r({target:\"Promise\",proto:!0,forced:s,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&l(i)){var p=a(\"Promise\").prototype.catch;u.catch!==p&&c(u,\"catch\",p,{unsafe:!0})}},26934:(e,t,n)=>{\"use strict\";var r,o,s,i=n(76887),a=n(82529),l=n(6049),c=n(21899),u=n(78834),p=n(95929),h=n(88929),f=n(90904),d=n(94431),m=n(24883),g=n(57475),y=n(10941),v=n(5743),b=n(70487),w=n(42941).set,E=n(66132),x=n(34845),S=n(40002),_=n(18397),j=n(45402),O=n(6991),k=n(67742),A=n(69520),C=\"Promise\",P=k.CONSTRUCTOR,N=k.REJECTION_EVENT,I=k.SUBCLASSING,T=j.getterFor(C),R=j.set,M=O&&O.prototype,D=O,F=M,L=c.TypeError,B=c.document,$=c.process,q=A.f,U=q,z=!!(B&&B.createEvent&&c.dispatchEvent),V=\"unhandledrejection\",W=function(e){var t;return!(!y(e)||!g(t=e.then))&&t},J=function(e,t){var n,r,o,s=t.value,i=1==t.state,a=i?e.ok:e.fail,l=e.resolve,c=e.reject,p=e.domain;try{a?(i||(2===t.rejection&&Y(t),t.rejection=1),!0===a?n=s:(p&&p.enter(),n=a(s),p&&(p.exit(),o=!0)),n===e.promise?c(L(\"Promise-chain cycle\")):(r=W(n))?u(r,n,l,c):l(n)):c(s)}catch(e){p&&!o&&p.exit(),c(e)}},K=function(e,t){e.notified||(e.notified=!0,E((function(){for(var n,r=e.reactions;n=r.get();)J(n,e);e.notified=!1,t&&!e.rejection&&G(e)})))},H=function(e,t,n){var r,o;z?((r=B.createEvent(\"Event\")).promise=t,r.reason=n,r.initEvent(e,!1,!0),c.dispatchEvent(r)):r={promise:t,reason:n},!N&&(o=c[\"on\"+e])?o(r):e===V&&x(\"Unhandled promise rejection\",n)},G=function(e){u(w,c,(function(){var t,n=e.facade,r=e.value;if(Z(e)&&(t=S((function(){l?$.emit(\"unhandledRejection\",r,n):H(V,n,r)})),e.rejection=l||Z(e)?2:1,t.error))throw t.value}))},Z=function(e){return 1!==e.rejection&&!e.parent},Y=function(e){u(w,c,(function(){var t=e.facade;l?$.emit(\"rejectionHandled\",t):H(\"rejectionhandled\",t,e.value)}))},X=function(e,t,n){return function(r){e(t,r,n)}},Q=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,K(e,!0))},ee=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw L(\"Promise can't be resolved itself\");var r=W(t);r?E((function(){var n={done:!1};try{u(r,t,X(ee,n,e),X(Q,n,e))}catch(t){Q(n,t,e)}})):(e.value=t,e.state=1,K(e,!1))}catch(t){Q({done:!1},t,e)}}};if(P&&(F=(D=function(e){v(this,F),m(e),u(r,this);var t=T(this);try{e(X(ee,t),X(Q,t))}catch(e){Q(t,e)}}).prototype,(r=function(e){R(this,{type:C,done:!1,notified:!1,parent:!1,reactions:new _,rejection:!1,state:0,value:void 0})}).prototype=p(F,\"then\",(function(e,t){var n=T(this),r=q(b(this,D));return n.parent=!0,r.ok=!g(e)||e,r.fail=g(t)&&t,r.domain=l?$.domain:void 0,0==n.state?n.reactions.add(r):E((function(){J(r,n)})),r.promise})),o=function(){var e=new r,t=T(e);this.promise=e,this.resolve=X(ee,t),this.reject=X(Q,t)},A.f=q=function(e){return e===D||undefined===e?new o(e):U(e)},!a&&g(O)&&M!==Object.prototype)){s=M.then,I||p(M,\"then\",(function(e,t){var n=this;return new D((function(e,t){u(s,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete M.constructor}catch(e){}h&&h(M,F)}i({global:!0,constructor:!0,wrap:!0,forced:P},{Promise:D}),f(D,C,!1,!0),d(C)},44349:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(82529),s=n(6991),i=n(95981),a=n(626),l=n(57475),c=n(70487),u=n(56584),p=n(95929),h=s&&s.prototype;if(r({target:\"Promise\",proto:!0,real:!0,forced:!!s&&i((function(){h.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=c(this,a(\"Promise\")),n=l(e);return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),!o&&l(s)){var f=a(\"Promise\").prototype.finally;h.finally!==f&&p(h,\"finally\",f,{unsafe:!0})}},98881:(e,t,n)=>{n(26934),n(16890),n(83376),n(55921),n(64069),n(14482)},55921:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(69520),a=n(40002),l=n(93091);r({target:\"Promise\",stat:!0,forced:n(31542)},{race:function(e){var t=this,n=i.f(t),r=n.reject,c=a((function(){var i=s(t.resolve);l(e,(function(e){o(i,t,e).then(n.resolve,r)}))}));return c.error&&r(c.value),n.promise}})},64069:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(69520);r({target:\"Promise\",stat:!0,forced:n(67742).CONSTRUCTOR},{reject:function(e){var t=s.f(this);return o(t.reject,void 0,e),t.promise}})},14482:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(626),s=n(82529),i=n(6991),a=n(67742).CONSTRUCTOR,l=n(56584),c=o(\"Promise\"),u=s&&!a;r({target:\"Promise\",stat:!0,forced:s||a},{resolve:function(e){return l(u&&this===c?i:this,e)}})},1502:()=>{},82266:(e,t,n)=>{\"use strict\";n(24683)(\"Set\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(85616))},69008:(e,t,n)=>{n(82266)},11035:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(95329),s=n(70344),i=n(48219),a=n(85803),l=n(67772),c=o(\"\".indexOf);r({target:\"String\",proto:!0,forced:!l(\"includes\")},{includes:function(e){return!!~c(a(i(this)),a(s(e)),arguments.length>1?arguments[1]:void 0)}})},77971:(e,t,n)=>{\"use strict\";var r=n(64620).charAt,o=n(85803),s=n(45402),i=n(75105),a=n(23538),l=\"String Iterator\",c=s.set,u=s.getterFor(l);i(String,\"String\",(function(e){c(this,{type:l,string:o(e),index:0})}),(function(){var e,t=u(this),n=t.string,o=t.index;return o>=n.length?a(void 0,!0):(e=r(n,o),t.index+=e.length,a(e,!1))}))},74679:(e,t,n)=>{var r=n(76887),o=n(95329),s=n(74529),i=n(89678),a=n(85803),l=n(10623),c=o([].push),u=o([].join);r({target:\"String\",stat:!0},{raw:function(e){var t=s(i(e).raw),n=l(t);if(!n)return\"\";for(var r=arguments.length,o=[],p=0;;){if(c(o,a(t[p++])),p===n)return u(o,\"\");p<r&&c(o,a(arguments[p]))}}})},60986:(e,t,n)=>{n(76887)({target:\"String\",proto:!0},{repeat:n(16178)})},94761:(e,t,n)=>{\"use strict\";var r,o=n(76887),s=n(97484),i=n(49677).f,a=n(43057),l=n(85803),c=n(70344),u=n(48219),p=n(67772),h=n(82529),f=s(\"\".startsWith),d=s(\"\".slice),m=Math.min,g=p(\"startsWith\");o({target:\"String\",proto:!0,forced:!!(h||g||(r=i(String.prototype,\"startsWith\"),!r||r.writable))&&!g},{startsWith:function(e){var t=l(u(this));c(e);var n=a(m(arguments.length>1?arguments[1]:void 0,t.length)),r=l(e);return f?f(t,r,n):d(t,n,n+r.length)===r}})},57398:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(74853).trim;r({target:\"String\",proto:!0,forced:n(93093)(\"trim\")},{trim:function(){return o(this)}})},8555:(e,t,n)=>{n(73464)(\"asyncIterator\")},48616:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(21899),s=n(78834),i=n(95329),a=n(82529),l=n(55746),c=n(63405),u=n(95981),p=n(90953),h=n(7046),f=n(96059),d=n(74529),m=n(83894),g=n(85803),y=n(31887),v=n(29290),b=n(14771),w=n(10946),E=n(684),x=n(87857),S=n(49677),_=n(65988),j=n(59938),O=n(36760),k=n(95929),A=n(29202),C=n(68726),P=n(44262),N=n(27748),I=n(99418),T=n(99813),R=n(11477),M=n(73464),D=n(29630),F=n(90904),L=n(45402),B=n(3610).forEach,$=P(\"hidden\"),q=\"Symbol\",U=\"prototype\",z=L.set,V=L.getterFor(q),W=Object[U],J=o.Symbol,K=J&&J[U],H=o.TypeError,G=o.QObject,Z=S.f,Y=_.f,X=E.f,Q=O.f,ee=i([].push),te=C(\"symbols\"),ne=C(\"op-symbols\"),re=C(\"wks\"),oe=!G||!G[U]||!G[U].findChild,se=l&&u((function(){return 7!=v(Y({},\"a\",{get:function(){return Y(this,\"a\",{value:7}).a}})).a}))?function(e,t,n){var r=Z(W,t);r&&delete W[t],Y(e,t,n),r&&e!==W&&Y(W,t,r)}:Y,ie=function(e,t){var n=te[e]=v(K);return z(n,{type:q,tag:e,description:t}),l||(n.description=t),n},ae=function(e,t,n){e===W&&ae(ne,t,n),f(e);var r=m(t);return f(n),p(te,r)?(n.enumerable?(p(e,$)&&e[$][r]&&(e[$][r]=!1),n=v(n,{enumerable:y(0,!1)})):(p(e,$)||Y(e,$,y(1,{})),e[$][r]=!0),se(e,r,n)):Y(e,r,n)},le=function(e,t){f(e);var n=d(t),r=b(n).concat(he(n));return B(r,(function(t){l&&!s(ce,n,t)||ae(e,t,n[t])})),e},ce=function(e){var t=m(e),n=s(Q,this,t);return!(this===W&&p(te,t)&&!p(ne,t))&&(!(n||!p(this,t)||!p(te,t)||p(this,$)&&this[$][t])||n)},ue=function(e,t){var n=d(e),r=m(t);if(n!==W||!p(te,r)||p(ne,r)){var o=Z(n,r);return!o||!p(te,r)||p(n,$)&&n[$][r]||(o.enumerable=!0),o}},pe=function(e){var t=X(d(e)),n=[];return B(t,(function(e){p(te,e)||p(N,e)||ee(n,e)})),n},he=function(e){var t=e===W,n=X(t?ne:d(e)),r=[];return B(n,(function(e){!p(te,e)||t&&!p(W,e)||ee(r,te[e])})),r};c||(k(K=(J=function(){if(h(K,this))throw H(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,t=I(e),n=function(e){this===W&&s(n,ne,e),p(this,$)&&p(this[$],t)&&(this[$][t]=!1),se(this,t,y(1,e))};return l&&oe&&se(W,t,{configurable:!0,set:n}),ie(t,e)})[U],\"toString\",(function(){return V(this).tag})),k(J,\"withoutSetter\",(function(e){return ie(I(e),e)})),O.f=ce,_.f=ae,j.f=le,S.f=ue,w.f=E.f=pe,x.f=he,R.f=function(e){return ie(T(e),e)},l&&(A(K,\"description\",{configurable:!0,get:function(){return V(this).description}}),a||k(W,\"propertyIsEnumerable\",ce,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:J}),B(b(re),(function(e){M(e)})),r({target:q,stat:!0,forced:!c},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:\"Object\",stat:!0,forced:!c,sham:!l},{create:function(e,t){return void 0===t?v(e):le(v(e),t)},defineProperty:ae,defineProperties:le,getOwnPropertyDescriptor:ue}),r({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:pe}),D(),F(J,q),N[$]=!0},52615:()=>{},64523:(e,t,n)=>{var r=n(76887),o=n(626),s=n(90953),i=n(85803),a=n(68726),l=n(34680),c=a(\"string-to-symbol-registry\"),u=a(\"symbol-to-string-registry\");r({target:\"Symbol\",stat:!0,forced:!l},{for:function(e){var t=i(e);if(s(c,t))return c[t];var n=o(\"Symbol\")(t);return c[t]=n,u[n]=t,n}})},21732:(e,t,n)=>{n(73464)(\"hasInstance\")},35903:(e,t,n)=>{n(73464)(\"isConcatSpreadable\")},1825:(e,t,n)=>{n(73464)(\"iterator\")},35824:(e,t,n)=>{n(48616),n(64523),n(38608),n(32619),n(37144)},38608:(e,t,n)=>{var r=n(76887),o=n(90953),s=n(56664),i=n(69826),a=n(68726),l=n(34680),c=a(\"symbol-to-string-registry\");r({target:\"Symbol\",stat:!0,forced:!l},{keyFor:function(e){if(!s(e))throw TypeError(i(e)+\" is not a symbol\");if(o(c,e))return c[e]}})},45915:(e,t,n)=>{n(73464)(\"matchAll\")},28394:(e,t,n)=>{n(73464)(\"match\")},61766:(e,t,n)=>{n(73464)(\"replace\")},62737:(e,t,n)=>{n(73464)(\"search\")},89911:(e,t,n)=>{n(73464)(\"species\")},74315:(e,t,n)=>{n(73464)(\"split\")},63131:(e,t,n)=>{var r=n(73464),o=n(29630);r(\"toPrimitive\"),o()},64714:(e,t,n)=>{var r=n(626),o=n(73464),s=n(90904);o(\"toStringTag\"),s(r(\"Symbol\"),\"Symbol\")},70659:(e,t,n)=>{n(73464)(\"unscopables\")},94776:(e,t,n)=>{\"use strict\";var r,o=n(45602),s=n(21899),i=n(95329),a=n(94380),l=n(21647),c=n(24683),u=n(8850),p=n(10941),h=n(45402).enforce,f=n(95981),d=n(47093),m=Object,g=Array.isArray,y=m.isExtensible,v=m.isFrozen,b=m.isSealed,w=m.freeze,E=m.seal,x={},S={},_=!s.ActiveXObject&&\"ActiveXObject\"in s,j=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},O=c(\"WeakMap\",j,u),k=O.prototype,A=i(k.set);if(d)if(_){r=u.getConstructor(j,\"WeakMap\",!0),l.enable();var C=i(k.delete),P=i(k.has),N=i(k.get);a(k,{delete:function(e){if(p(e)&&!y(e)){var t=h(this);return t.frozen||(t.frozen=new r),C(this,e)||t.frozen.delete(e)}return C(this,e)},has:function(e){if(p(e)&&!y(e)){var t=h(this);return t.frozen||(t.frozen=new r),P(this,e)||t.frozen.has(e)}return P(this,e)},get:function(e){if(p(e)&&!y(e)){var t=h(this);return t.frozen||(t.frozen=new r),P(this,e)?N(this,e):t.frozen.get(e)}return N(this,e)},set:function(e,t){if(p(e)&&!y(e)){var n=h(this);n.frozen||(n.frozen=new r),P(this,e)?A(this,e,t):n.frozen.set(e,t)}else A(this,e,t);return this}})}else o&&f((function(){var e=w([]);return A(new O,e,1),!v(e)}))&&a(k,{set:function(e,t){var n;return g(e)&&(v(e)?n=x:b(e)&&(n=S)),A(this,e,t),n==x&&w(e),n==S&&E(e),this}})},54334:(e,t,n)=>{n(94776)},31115:(e,t,n)=>{\"use strict\";n(24683)(\"WeakSet\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(8850))},1773:(e,t,n)=>{n(31115)},97522:(e,t,n)=>{var r=n(99813),o=n(65988).f,s=r(\"metadata\"),i=Function.prototype;void 0===i[s]&&o(i,s,{value:null})},28783:(e,t,n)=>{n(73464)(\"asyncDispose\")},43975:(e,t,n)=>{n(73464)(\"dispose\")},97618:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0},{isRegisteredSymbol:n(32087)})},22731:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0,name:\"isRegisteredSymbol\"},{isRegistered:n(32087)})},6989:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0,forced:!0},{isWellKnownSymbol:n(96559)})},85605:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0,name:\"isWellKnownSymbol\",forced:!0},{isWellKnown:n(96559)})},65799:(e,t,n)=>{n(73464)(\"matcher\")},31943:(e,t,n)=>{n(73464)(\"metadataKey\")},45414:(e,t,n)=>{n(73464)(\"metadata\")},46774:(e,t,n)=>{n(73464)(\"observable\")},80620:(e,t,n)=>{n(73464)(\"patternMatch\")},36172:(e,t,n)=>{n(73464)(\"replaceAll\")},7634:(e,t,n)=>{n(66274);var r=n(63281),o=n(21899),s=n(9697),i=n(32029),a=n(12077),l=n(99813)(\"toStringTag\");for(var c in r){var u=o[c],p=u&&u.prototype;p&&s(p)!==l&&i(p,l,c),a[c]=a.Array}},79229:(e,t,n)=>{var r=n(76887),o=n(21899),s=n(37620)(o.setInterval,!0);r({global:!0,bind:!0,forced:o.setInterval!==s},{setInterval:s})},17749:(e,t,n)=>{var r=n(76887),o=n(21899),s=n(37620)(o.setTimeout,!0);r({global:!0,bind:!0,forced:o.setTimeout!==s},{setTimeout:s})},71249:(e,t,n)=>{n(79229),n(17749)},62524:(e,t,n)=>{\"use strict\";n(66274);var r=n(76887),o=n(21899),s=n(78834),i=n(95329),a=n(55746),l=n(14766),c=n(95929),u=n(29202),p=n(94380),h=n(90904),f=n(53847),d=n(45402),m=n(5743),g=n(57475),y=n(90953),v=n(86843),b=n(9697),w=n(96059),E=n(10941),x=n(85803),S=n(29290),_=n(31887),j=n(53476),O=n(22902),k=n(18348),A=n(99813),C=n(61388),P=A(\"iterator\"),N=\"URLSearchParams\",I=N+\"Iterator\",T=d.set,R=d.getterFor(N),M=d.getterFor(I),D=Object.getOwnPropertyDescriptor,F=function(e){if(!a)return o[e];var t=D(o,e);return t&&t.value},L=F(\"fetch\"),B=F(\"Request\"),$=F(\"Headers\"),q=B&&B.prototype,U=$&&$.prototype,z=o.RegExp,V=o.TypeError,W=o.decodeURIComponent,J=o.encodeURIComponent,K=i(\"\".charAt),H=i([].join),G=i([].push),Z=i(\"\".replace),Y=i([].shift),X=i([].splice),Q=i(\"\".split),ee=i(\"\".slice),te=/\\+/g,ne=Array(4),re=function(e){return ne[e-1]||(ne[e-1]=z(\"((?:%[\\\\da-f]{2}){\"+e+\"})\",\"gi\"))},oe=function(e){try{return W(e)}catch(t){return e}},se=function(e){var t=Z(e,te,\" \"),n=4;try{return W(t)}catch(e){for(;n;)t=Z(t,re(n--),oe);return t}},ie=/[!'()~]|%20/g,ae={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\"},le=function(e){return ae[e]},ce=function(e){return Z(J(e),ie,le)},ue=f((function(e,t){T(this,{type:I,iterator:j(R(e).entries),kind:t})}),\"Iterator\",(function(){var e=M(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value=\"keys\"===t?r.key:\"values\"===t?r.value:[r.key,r.value]),n}),!0),pe=function(e){this.entries=[],this.url=null,void 0!==e&&(E(e)?this.parseObject(e):this.parseQuery(\"string\"==typeof e?\"?\"===K(e,0)?ee(e,1):e:x(e)))};pe.prototype={type:N,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,o,i,a,l,c=O(e);if(c)for(n=(t=j(e,c)).next;!(r=s(n,t)).done;){if(i=(o=j(w(r.value))).next,(a=s(i,o)).done||(l=s(i,o)).done||!s(i,o).done)throw V(\"Expected sequence with length 2\");G(this.entries,{key:x(a.value),value:x(l.value)})}else for(var u in e)y(e,u)&&G(this.entries,{key:u,value:x(e[u])})},parseQuery:function(e){if(e)for(var t,n,r=Q(e,\"&\"),o=0;o<r.length;)(t=r[o++]).length&&(n=Q(t,\"=\"),G(this.entries,{key:se(Y(n)),value:se(H(n,\"=\"))}))},serialize:function(){for(var e,t=this.entries,n=[],r=0;r<t.length;)e=t[r++],G(n,ce(e.key)+\"=\"+ce(e.value));return H(n,\"&\")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var he=function(){m(this,fe);var e=T(this,new pe(arguments.length>0?arguments[0]:void 0));a||(this.size=e.entries.length)},fe=he.prototype;if(p(fe,{append:function(e,t){var n=R(this);k(arguments.length,2),G(n.entries,{key:x(e),value:x(t)}),a||this.length++,n.updateURL()},delete:function(e){for(var t=R(this),n=k(arguments.length,1),r=t.entries,o=x(e),s=n<2?void 0:arguments[1],i=void 0===s?s:x(s),l=0;l<r.length;){var c=r[l];if(c.key!==o||void 0!==i&&c.value!==i)l++;else if(X(r,l,1),void 0!==i)break}a||(this.size=r.length),t.updateURL()},get:function(e){var t=R(this).entries;k(arguments.length,1);for(var n=x(e),r=0;r<t.length;r++)if(t[r].key===n)return t[r].value;return null},getAll:function(e){var t=R(this).entries;k(arguments.length,1);for(var n=x(e),r=[],o=0;o<t.length;o++)t[o].key===n&&G(r,t[o].value);return r},has:function(e){for(var t=R(this).entries,n=k(arguments.length,1),r=x(e),o=n<2?void 0:arguments[1],s=void 0===o?o:x(o),i=0;i<t.length;){var a=t[i++];if(a.key===r&&(void 0===s||a.value===s))return!0}return!1},set:function(e,t){var n=R(this);k(arguments.length,1);for(var r,o=n.entries,s=!1,i=x(e),l=x(t),c=0;c<o.length;c++)(r=o[c]).key===i&&(s?X(o,c--,1):(s=!0,r.value=l));s||G(o,{key:i,value:l}),a||(this.size=o.length),n.updateURL()},sort:function(){var e=R(this);C(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=R(this).entries,r=v(e,arguments.length>1?arguments[1]:void 0),o=0;o<n.length;)r((t=n[o++]).value,t.key,this)},keys:function(){return new ue(this,\"keys\")},values:function(){return new ue(this,\"values\")},entries:function(){return new ue(this,\"entries\")}},{enumerable:!0}),c(fe,P,fe.entries,{name:\"entries\"}),c(fe,\"toString\",(function(){return R(this).serialize()}),{enumerable:!0}),a&&u(fe,\"size\",{get:function(){return R(this).entries.length},configurable:!0,enumerable:!0}),h(he,N),r({global:!0,constructor:!0,forced:!l},{URLSearchParams:he}),!l&&g($)){var de=i(U.has),me=i(U.set),ge=function(e){if(E(e)){var t,n=e.body;if(b(n)===N)return t=e.headers?new $(e.headers):new $,de(t,\"content-type\")||me(t,\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"),S(e,{body:_(0,x(n)),headers:_(0,t)})}return e};if(g(L)&&r({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return L(e,arguments.length>1?ge(arguments[1]):{})}}),g(B)){var ye=function(e){return m(this,q),new B(e,arguments.length>1?ge(arguments[1]):{})};q.constructor=ye,ye.prototype=q,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ye})}}e.exports={URLSearchParams:he,getState:R}},16454:()=>{},73305:()=>{},95304:(e,t,n)=>{n(62524)},62337:()=>{},84630:(e,t,n)=>{var r=n(76887),o=n(626),s=n(95981),i=n(18348),a=n(85803),l=n(14766),c=o(\"URL\");r({target:\"URL\",stat:!0,forced:!(l&&s((function(){c.canParse()})))},{canParse:function(e){var t=i(arguments.length,1),n=a(e),r=t<2||void 0===arguments[1]?void 0:a(arguments[1]);try{return!!new c(n,r)}catch(e){return!1}}})},47250:(e,t,n)=>{\"use strict\";n(77971);var r,o=n(76887),s=n(55746),i=n(14766),a=n(21899),l=n(86843),c=n(95329),u=n(95929),p=n(29202),h=n(5743),f=n(90953),d=n(24420),m=n(11354),g=n(15790),y=n(64620).codeAt,v=n(73291),b=n(85803),w=n(90904),E=n(18348),x=n(62524),S=n(45402),_=S.set,j=S.getterFor(\"URL\"),O=x.URLSearchParams,k=x.getState,A=a.URL,C=a.TypeError,P=a.parseInt,N=Math.floor,I=Math.pow,T=c(\"\".charAt),R=c(/./.exec),M=c([].join),D=c(1..toString),F=c([].pop),L=c([].push),B=c(\"\".replace),$=c([].shift),q=c(\"\".split),U=c(\"\".slice),z=c(\"\".toLowerCase),V=c([].unshift),W=\"Invalid scheme\",J=\"Invalid host\",K=\"Invalid port\",H=/[a-z]/i,G=/[\\d+-.a-z]/i,Z=/\\d/,Y=/^0x/i,X=/^[0-7]+$/,Q=/^\\d+$/,ee=/^[\\da-f]+$/i,te=/[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/,ne=/[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/,re=/^[\\u0000-\\u0020]+/,oe=/(^|[^\\u0000-\\u0020])[\\u0000-\\u0020]+$/,se=/[\\t\\n\\r]/g,ie=function(e){var t,n,r,o;if(\"number\"==typeof e){for(t=[],n=0;n<4;n++)V(t,e%256),e=N(e/256);return M(t,\".\")}if(\"object\"==typeof e){for(t=\"\",r=function(e){for(var t=null,n=1,r=null,o=0,s=0;s<8;s++)0!==e[s]?(o>n&&(t=r,n=o),r=null,o=0):(null===r&&(r=s),++o);return o>n&&(t=r,n=o),t}(e),n=0;n<8;n++)o&&0===e[n]||(o&&(o=!1),r===n?(t+=n?\":\":\"::\",o=!0):(t+=D(e[n],16),n<7&&(t+=\":\")));return\"[\"+t+\"]\"}return e},ae={},le=d({},ae,{\" \":1,'\"':1,\"<\":1,\">\":1,\"`\":1}),ce=d({},le,{\"#\":1,\"?\":1,\"{\":1,\"}\":1}),ue=d({},ce,{\"/\":1,\":\":1,\";\":1,\"=\":1,\"@\":1,\"[\":1,\"\\\\\":1,\"]\":1,\"^\":1,\"|\":1}),pe=function(e,t){var n=y(e,0);return n>32&&n<127&&!f(t,e)?e:encodeURIComponent(e)},he={ftp:21,file:null,http:80,https:443,ws:80,wss:443},fe=function(e,t){var n;return 2==e.length&&R(H,T(e,0))&&(\":\"==(n=T(e,1))||!t&&\"|\"==n)},de=function(e){var t;return e.length>1&&fe(U(e,0,2))&&(2==e.length||\"/\"===(t=T(e,2))||\"\\\\\"===t||\"?\"===t||\"#\"===t)},me=function(e){return\".\"===e||\"%2e\"===z(e)},ge={},ye={},ve={},be={},we={},Ee={},xe={},Se={},_e={},je={},Oe={},ke={},Ae={},Ce={},Pe={},Ne={},Ie={},Te={},Re={},Me={},De={},Fe=function(e,t,n){var r,o,s,i=b(e);if(t){if(o=this.parse(i))throw C(o);this.searchParams=null}else{if(void 0!==n&&(r=new Fe(n,!0)),o=this.parse(i,null,r))throw C(o);(s=k(new O)).bindURL(this),this.searchParams=s}};Fe.prototype={type:\"URL\",parse:function(e,t,n){var o,s,i,a,l,c=this,u=t||ge,p=0,h=\"\",d=!1,y=!1,v=!1;for(e=b(e),t||(c.scheme=\"\",c.username=\"\",c.password=\"\",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=B(e,re,\"\"),e=B(e,oe,\"$1\")),e=B(e,se,\"\"),o=m(e);p<=o.length;){switch(s=o[p],u){case ge:if(!s||!R(H,s)){if(t)return W;u=ve;continue}h+=z(s),u=ye;break;case ye:if(s&&(R(G,s)||\"+\"==s||\"-\"==s||\".\"==s))h+=z(s);else{if(\":\"!=s){if(t)return W;h=\"\",u=ve,p=0;continue}if(t&&(c.isSpecial()!=f(he,h)||\"file\"==h&&(c.includesCredentials()||null!==c.port)||\"file\"==c.scheme&&!c.host))return;if(c.scheme=h,t)return void(c.isSpecial()&&he[c.scheme]==c.port&&(c.port=null));h=\"\",\"file\"==c.scheme?u=Ce:c.isSpecial()&&n&&n.scheme==c.scheme?u=be:c.isSpecial()?u=Se:\"/\"==o[p+1]?(u=we,p++):(c.cannotBeABaseURL=!0,L(c.path,\"\"),u=Re)}break;case ve:if(!n||n.cannotBeABaseURL&&\"#\"!=s)return W;if(n.cannotBeABaseURL&&\"#\"==s){c.scheme=n.scheme,c.path=g(n.path),c.query=n.query,c.fragment=\"\",c.cannotBeABaseURL=!0,u=De;break}u=\"file\"==n.scheme?Ce:Ee;continue;case be:if(\"/\"!=s||\"/\"!=o[p+1]){u=Ee;continue}u=_e,p++;break;case we:if(\"/\"==s){u=je;break}u=Te;continue;case Ee:if(c.scheme=n.scheme,s==r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.query=n.query;else if(\"/\"==s||\"\\\\\"==s&&c.isSpecial())u=xe;else if(\"?\"==s)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.query=\"\",u=Me;else{if(\"#\"!=s){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.path.length--,u=Te;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.query=n.query,c.fragment=\"\",u=De}break;case xe:if(!c.isSpecial()||\"/\"!=s&&\"\\\\\"!=s){if(\"/\"!=s){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,u=Te;continue}u=je}else u=_e;break;case Se:if(u=_e,\"/\"!=s||\"/\"!=T(h,p+1))continue;p++;break;case _e:if(\"/\"!=s&&\"\\\\\"!=s){u=je;continue}break;case je:if(\"@\"==s){d&&(h=\"%40\"+h),d=!0,i=m(h);for(var w=0;w<i.length;w++){var E=i[w];if(\":\"!=E||v){var x=pe(E,ue);v?c.password+=x:c.username+=x}else v=!0}h=\"\"}else if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&c.isSpecial()){if(d&&\"\"==h)return\"Invalid authority\";p-=m(h).length+1,h=\"\",u=Oe}else h+=s;break;case Oe:case ke:if(t&&\"file\"==c.scheme){u=Ne;continue}if(\":\"!=s||y){if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&c.isSpecial()){if(c.isSpecial()&&\"\"==h)return J;if(t&&\"\"==h&&(c.includesCredentials()||null!==c.port))return;if(a=c.parseHost(h))return a;if(h=\"\",u=Ie,t)return;continue}\"[\"==s?y=!0:\"]\"==s&&(y=!1),h+=s}else{if(\"\"==h)return J;if(a=c.parseHost(h))return a;if(h=\"\",u=Ae,t==ke)return}break;case Ae:if(!R(Z,s)){if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&c.isSpecial()||t){if(\"\"!=h){var S=P(h,10);if(S>65535)return K;c.port=c.isSpecial()&&S===he[c.scheme]?null:S,h=\"\"}if(t)return;u=Ie;continue}return K}h+=s;break;case Ce:if(c.scheme=\"file\",\"/\"==s||\"\\\\\"==s)u=Pe;else{if(!n||\"file\"!=n.scheme){u=Te;continue}if(s==r)c.host=n.host,c.path=g(n.path),c.query=n.query;else if(\"?\"==s)c.host=n.host,c.path=g(n.path),c.query=\"\",u=Me;else{if(\"#\"!=s){de(M(g(o,p),\"\"))||(c.host=n.host,c.path=g(n.path),c.shortenPath()),u=Te;continue}c.host=n.host,c.path=g(n.path),c.query=n.query,c.fragment=\"\",u=De}}break;case Pe:if(\"/\"==s||\"\\\\\"==s){u=Ne;break}n&&\"file\"==n.scheme&&!de(M(g(o,p),\"\"))&&(fe(n.path[0],!0)?L(c.path,n.path[0]):c.host=n.host),u=Te;continue;case Ne:if(s==r||\"/\"==s||\"\\\\\"==s||\"?\"==s||\"#\"==s){if(!t&&fe(h))u=Te;else if(\"\"==h){if(c.host=\"\",t)return;u=Ie}else{if(a=c.parseHost(h))return a;if(\"localhost\"==c.host&&(c.host=\"\"),t)return;h=\"\",u=Ie}continue}h+=s;break;case Ie:if(c.isSpecial()){if(u=Te,\"/\"!=s&&\"\\\\\"!=s)continue}else if(t||\"?\"!=s)if(t||\"#\"!=s){if(s!=r&&(u=Te,\"/\"!=s))continue}else c.fragment=\"\",u=De;else c.query=\"\",u=Me;break;case Te:if(s==r||\"/\"==s||\"\\\\\"==s&&c.isSpecial()||!t&&(\"?\"==s||\"#\"==s)){if(\"..\"===(l=z(l=h))||\"%2e.\"===l||\".%2e\"===l||\"%2e%2e\"===l?(c.shortenPath(),\"/\"==s||\"\\\\\"==s&&c.isSpecial()||L(c.path,\"\")):me(h)?\"/\"==s||\"\\\\\"==s&&c.isSpecial()||L(c.path,\"\"):(\"file\"==c.scheme&&!c.path.length&&fe(h)&&(c.host&&(c.host=\"\"),h=T(h,0)+\":\"),L(c.path,h)),h=\"\",\"file\"==c.scheme&&(s==r||\"?\"==s||\"#\"==s))for(;c.path.length>1&&\"\"===c.path[0];)$(c.path);\"?\"==s?(c.query=\"\",u=Me):\"#\"==s&&(c.fragment=\"\",u=De)}else h+=pe(s,ce);break;case Re:\"?\"==s?(c.query=\"\",u=Me):\"#\"==s?(c.fragment=\"\",u=De):s!=r&&(c.path[0]+=pe(s,ae));break;case Me:t||\"#\"!=s?s!=r&&(\"'\"==s&&c.isSpecial()?c.query+=\"%27\":c.query+=\"#\"==s?\"%23\":pe(s,ae)):(c.fragment=\"\",u=De);break;case De:s!=r&&(c.fragment+=pe(s,le))}p++}},parseHost:function(e){var t,n,r;if(\"[\"==T(e,0)){if(\"]\"!=T(e,e.length-1))return J;if(t=function(e){var t,n,r,o,s,i,a,l=[0,0,0,0,0,0,0,0],c=0,u=null,p=0,h=function(){return T(e,p)};if(\":\"==h()){if(\":\"!=T(e,1))return;p+=2,u=++c}for(;h();){if(8==c)return;if(\":\"!=h()){for(t=n=0;n<4&&R(ee,h());)t=16*t+P(h(),16),p++,n++;if(\".\"==h()){if(0==n)return;if(p-=n,c>6)return;for(r=0;h();){if(o=null,r>0){if(!(\".\"==h()&&r<4))return;p++}if(!R(Z,h()))return;for(;R(Z,h());){if(s=P(h(),10),null===o)o=s;else{if(0==o)return;o=10*o+s}if(o>255)return;p++}l[c]=256*l[c]+o,2!=++r&&4!=r||c++}if(4!=r)return;break}if(\":\"==h()){if(p++,!h())return}else if(h())return;l[c++]=t}else{if(null!==u)return;p++,u=++c}}if(null!==u)for(i=c-u,c=7;0!=c&&i>0;)a=l[c],l[c--]=l[u+i-1],l[u+--i]=a;else if(8!=c)return;return l}(U(e,1,-1)),!t)return J;this.host=t}else if(this.isSpecial()){if(e=v(e),R(te,e))return J;if(t=function(e){var t,n,r,o,s,i,a,l=q(e,\".\");if(l.length&&\"\"==l[l.length-1]&&l.length--,(t=l.length)>4)return e;for(n=[],r=0;r<t;r++){if(\"\"==(o=l[r]))return e;if(s=10,o.length>1&&\"0\"==T(o,0)&&(s=R(Y,o)?16:8,o=U(o,8==s?1:2)),\"\"===o)i=0;else{if(!R(10==s?Q:8==s?X:ee,o))return e;i=P(o,s)}L(n,i)}for(r=0;r<t;r++)if(i=n[r],r==t-1){if(i>=I(256,5-t))return null}else if(i>255)return null;for(a=F(n),r=0;r<n.length;r++)a+=n[r]*I(256,3-r);return a}(e),null===t)return J;this.host=t}else{if(R(ne,e))return J;for(t=\"\",n=m(e),r=0;r<n.length;r++)t+=pe(n[r],ae);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||\"file\"==this.scheme},includesCredentials:function(){return\"\"!=this.username||\"\"!=this.password},isSpecial:function(){return f(he,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||\"file\"==this.scheme&&1==t&&fe(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,n=e.username,r=e.password,o=e.host,s=e.port,i=e.path,a=e.query,l=e.fragment,c=t+\":\";return null!==o?(c+=\"//\",e.includesCredentials()&&(c+=n+(r?\":\"+r:\"\")+\"@\"),c+=ie(o),null!==s&&(c+=\":\"+s)):\"file\"==t&&(c+=\"//\"),c+=e.cannotBeABaseURL?i[0]:i.length?\"/\"+M(i,\"/\"):\"\",null!==a&&(c+=\"?\"+a),null!==l&&(c+=\"#\"+l),c},setHref:function(e){var t=this.parse(e);if(t)throw C(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if(\"blob\"==e)try{return new Le(e.path[0]).origin}catch(e){return\"null\"}return\"file\"!=e&&this.isSpecial()?e+\"://\"+ie(this.host)+(null!==t?\":\"+t:\"\"):\"null\"},getProtocol:function(){return this.scheme+\":\"},setProtocol:function(e){this.parse(b(e)+\":\",ge)},getUsername:function(){return this.username},setUsername:function(e){var t=m(b(e));if(!this.cannotHaveUsernamePasswordPort()){this.username=\"\";for(var n=0;n<t.length;n++)this.username+=pe(t[n],ue)}},getPassword:function(){return this.password},setPassword:function(e){var t=m(b(e));if(!this.cannotHaveUsernamePasswordPort()){this.password=\"\";for(var n=0;n<t.length;n++)this.password+=pe(t[n],ue)}},getHost:function(){var e=this.host,t=this.port;return null===e?\"\":null===t?ie(e):ie(e)+\":\"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,Oe)},getHostname:function(){var e=this.host;return null===e?\"\":ie(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,ke)},getPort:function(){var e=this.port;return null===e?\"\":b(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(\"\"==(e=b(e))?this.port=null:this.parse(e,Ae))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?\"/\"+M(e,\"/\"):\"\"},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,Ie))},getSearch:function(){var e=this.query;return e?\"?\"+e:\"\"},setSearch:function(e){\"\"==(e=b(e))?this.query=null:(\"?\"==T(e,0)&&(e=U(e,1)),this.query=\"\",this.parse(e,Me)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?\"#\"+e:\"\"},setHash:function(e){\"\"!=(e=b(e))?(\"#\"==T(e,0)&&(e=U(e,1)),this.fragment=\"\",this.parse(e,De)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Le=function(e){var t=h(this,Be),n=E(arguments.length,1)>1?arguments[1]:void 0,r=_(t,new Fe(e,!1,n));s||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},Be=Le.prototype,$e=function(e,t){return{get:function(){return j(this)[e]()},set:t&&function(e){return j(this)[t](e)},configurable:!0,enumerable:!0}};if(s&&(p(Be,\"href\",$e(\"serialize\",\"setHref\")),p(Be,\"origin\",$e(\"getOrigin\")),p(Be,\"protocol\",$e(\"getProtocol\",\"setProtocol\")),p(Be,\"username\",$e(\"getUsername\",\"setUsername\")),p(Be,\"password\",$e(\"getPassword\",\"setPassword\")),p(Be,\"host\",$e(\"getHost\",\"setHost\")),p(Be,\"hostname\",$e(\"getHostname\",\"setHostname\")),p(Be,\"port\",$e(\"getPort\",\"setPort\")),p(Be,\"pathname\",$e(\"getPathname\",\"setPathname\")),p(Be,\"search\",$e(\"getSearch\",\"setSearch\")),p(Be,\"searchParams\",$e(\"getSearchParams\")),p(Be,\"hash\",$e(\"getHash\",\"setHash\"))),u(Be,\"toJSON\",(function(){return j(this).serialize()}),{enumerable:!0}),u(Be,\"toString\",(function(){return j(this).serialize()}),{enumerable:!0}),A){var qe=A.createObjectURL,Ue=A.revokeObjectURL;qe&&u(Le,\"createObjectURL\",l(qe,A)),Ue&&u(Le,\"revokeObjectURL\",l(Ue,A))}w(Le,\"URL\"),o({global:!0,constructor:!0,forced:!i,sham:!s},{URL:Le})},33601:(e,t,n)=>{n(47250)},98947:()=>{},24848:(e,t,n)=>{var r=n(54493);e.exports=r},83363:(e,t,n)=>{var r=n(24034);e.exports=r},62908:(e,t,n)=>{var r=n(12710);e.exports=r},49216:(e,t,n)=>{var r=n(99324);e.exports=r},56668:(e,t,n)=>{var r=n(95909);e.exports=r},74719:(e,t,n)=>{var r=n(14423);e.exports=r},57784:(e,t,n)=>{var r=n(81103);e.exports=r},28196:(e,t,n)=>{var r=n(16246);e.exports=r},8065:(e,t,n)=>{var r=n(56043);e.exports=r},57448:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(62908),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.entries;return e===a||s(a,e)&&t===a.entries||o(l,r(e))?i:t}},29455:(e,t,n)=>{var r=n(13160);e.exports=r},69743:(e,t,n)=>{var r=n(80446);e.exports=r},11955:(e,t,n)=>{var r=n(2480);e.exports=r},96064:(e,t,n)=>{var r=n(7147);e.exports=r},61577:(e,t,n)=>{var r=n(32236);e.exports=r},46279:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(49216),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.forEach;return e===a||s(a,e)&&t===a.forEach||o(l,r(e))?i:t}},33778:(e,t,n)=>{var r=n(58557);e.exports=r},19373:(e,t,n)=>{var r=n(34570);e.exports=r},73819:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(56668),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.keys;return e===a||s(a,e)&&t===a.keys||o(l,r(e))?i:t}},11022:(e,t,n)=>{var r=n(57564);e.exports=r},61798:(e,t,n)=>{var r=n(88287);e.exports=r},52759:(e,t,n)=>{var r=n(93993);e.exports=r},52527:(e,t,n)=>{var r=n(68025);e.exports=r},36857:(e,t,n)=>{var r=n(59257);e.exports=r},82073:(e,t,n)=>{var r=n(69601);e.exports=r},45286:(e,t,n)=>{var r=n(28299);e.exports=r},62856:(e,t,n)=>{var r=n(69355);e.exports=r},2348:(e,t,n)=>{var r=n(18339);e.exports=r},35178:(e,t,n)=>{var r=n(71611);e.exports=r},76361:(e,t,n)=>{var r=n(62774);e.exports=r},71815:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(74719),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.values;return e===a||s(a,e)&&t===a.values||o(l,r(e))?i:t}},8933:(e,t,n)=>{var r=n(84426);e.exports=r},15868:(e,t,n)=>{var r=n(91018);n(7634),e.exports=r},14873:(e,t,n)=>{var r=n(97849);e.exports=r},38849:(e,t,n)=>{var r=n(3820);e.exports=r},63383:(e,t,n)=>{var r=n(45999);e.exports=r},57396:(e,t,n)=>{var r=n(7702);e.exports=r},41910:(e,t,n)=>{var r=n(48171);e.exports=r},86209:(e,t,n)=>{var r=n(73081);e.exports=r},53402:(e,t,n)=>{var r=n(7699);n(7634),e.exports=r},79427:(e,t,n)=>{var r=n(286);e.exports=r},62857:(e,t,n)=>{var r=n(92766);e.exports=r},9534:(e,t,n)=>{var r=n(30498);e.exports=r},23059:(e,t,n)=>{var r=n(48494);e.exports=r},47795:(e,t,n)=>{var r=n(98430);e.exports=r},27460:(e,t,n)=>{var r=n(52956);n(7634),e.exports=r},27989:(e,t,n)=>{n(71249);var r=n(54058);e.exports=r.setTimeout},5519:(e,t,n)=>{var r=n(76998);n(7634),e.exports=r},23452:(e,t,n)=>{var r=n(97089);e.exports=r},92547:(e,t,n)=>{var r=n(57473);n(7634),e.exports=r},46509:(e,t,n)=>{var r=n(24227);n(7634),e.exports=r},35774:(e,t,n)=>{var r=n(62978);e.exports=r},57641:(e,t,n)=>{var r=n(71459);e.exports=r},72010:(e,t,n)=>{var r=n(32304);n(7634),e.exports=r},93726:(e,t,n)=>{var r=n(29567);n(7634),e.exports=r},47610:(e,t,n)=>{n(95304),n(16454),n(73305),n(62337);var r=n(54058);e.exports=r.URLSearchParams},71459:(e,t,n)=>{n(47610),n(33601),n(84630),n(98947);var r=n(54058);e.exports=r.URL},31905:function(){!function(e){!function(t){var n=\"URLSearchParams\"in e,r=\"Symbol\"in e&&\"iterator\"in Symbol,o=\"FileReader\"in e&&\"Blob\"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),s=\"FormData\"in e,i=\"ArrayBuffer\"in e;if(i)var a=[\"[object Int8Array]\",\"[object Uint8Array]\",\"[object Uint8ClampedArray]\",\"[object Int16Array]\",\"[object Uint16Array]\",\"[object Int32Array]\",\"[object Uint32Array]\",\"[object Float32Array]\",\"[object Float64Array]\"],l=ArrayBuffer.isView||function(e){return e&&a.indexOf(Object.prototype.toString.call(e))>-1};function c(e){if(\"string\"!=typeof e&&(e=String(e)),/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError(\"Invalid character in header field name\");return e.toLowerCase()}function u(e){return\"string\"!=typeof e&&(e=String(e)),e}function p(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function h(e){this.map={},e instanceof h?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function f(e){if(e.bodyUsed)return Promise.reject(new TypeError(\"Already read\"));e.bodyUsed=!0}function d(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function m(e){var t=new FileReader,n=d(t);return t.readAsArrayBuffer(e),n}function g(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function y(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?\"string\"==typeof e?this._bodyText=e:o&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:s&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():i&&o&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=g(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):i&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=g(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText=\"\",this.headers.get(\"content-type\")||(\"string\"==typeof e?this.headers.set(\"content-type\",\"text/plain;charset=UTF-8\"):this._bodyBlob&&this._bodyBlob.type?this.headers.set(\"content-type\",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"))},o&&(this.blob=function(){var e=f(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error(\"could not read FormData body as blob\");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?f(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(m)}),this.text=function(){var e,t,n,r=f(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=d(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join(\"\")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error(\"could not read FormData body as text\");return Promise.resolve(this._bodyText)},s&&(this.formData=function(){return this.text().then(w)}),this.json=function(){return this.text().then(JSON.parse)},this}h.prototype.append=function(e,t){e=c(e),t=u(t);var n=this.map[e];this.map[e]=n?n+\", \"+t:t},h.prototype.delete=function(e){delete this.map[c(e)]},h.prototype.get=function(e){return e=c(e),this.has(e)?this.map[e]:null},h.prototype.has=function(e){return this.map.hasOwnProperty(c(e))},h.prototype.set=function(e,t){this.map[c(e)]=u(t)},h.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},h.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),p(e)},h.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),p(e)},h.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),p(e)},r&&(h.prototype[Symbol.iterator]=h.prototype.entries);var v=[\"DELETE\",\"GET\",\"HEAD\",\"OPTIONS\",\"POST\",\"PUT\"];function b(e,t){var n,r,o=(t=t||{}).body;if(e instanceof b){if(e.bodyUsed)throw new TypeError(\"Already read\");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new h(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,o||null==e._bodyInit||(o=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||\"same-origin\",!t.headers&&this.headers||(this.headers=new h(t.headers)),this.method=(n=t.method||this.method||\"GET\",r=n.toUpperCase(),v.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,(\"GET\"===this.method||\"HEAD\"===this.method)&&o)throw new TypeError(\"Body not allowed for GET or HEAD requests\");this._initBody(o)}function w(e){var t=new FormData;return e.trim().split(\"&\").forEach((function(e){if(e){var n=e.split(\"=\"),r=n.shift().replace(/\\+/g,\" \"),o=n.join(\"=\").replace(/\\+/g,\" \");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function E(e,t){t||(t={}),this.type=\"default\",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=\"statusText\"in t?t.statusText:\"OK\",this.headers=new h(t.headers),this.url=t.url||\"\",this._initBody(e)}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})},y.call(b.prototype),y.call(E.prototype),E.prototype.clone=function(){return new E(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new h(this.headers),url:this.url})},E.error=function(){var e=new E(null,{status:0,statusText:\"\"});return e.type=\"error\",e};var x=[301,302,303,307,308];E.redirect=function(e,t){if(-1===x.indexOf(t))throw new RangeError(\"Invalid status code\");return new E(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function S(e,n){return new Promise((function(r,s){var i=new b(e,n);if(i.signal&&i.signal.aborted)return s(new t.DOMException(\"Aborted\",\"AbortError\"));var a=new XMLHttpRequest;function l(){a.abort()}a.onload=function(){var e,t,n={status:a.status,statusText:a.statusText,headers:(e=a.getAllResponseHeaders()||\"\",t=new h,e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/).forEach((function(e){var n=e.split(\":\"),r=n.shift().trim();if(r){var o=n.join(\":\").trim();t.append(r,o)}})),t)};n.url=\"responseURL\"in a?a.responseURL:n.headers.get(\"X-Request-URL\");var o=\"response\"in a?a.response:a.responseText;r(new E(o,n))},a.onerror=function(){s(new TypeError(\"Network request failed\"))},a.ontimeout=function(){s(new TypeError(\"Network request failed\"))},a.onabort=function(){s(new t.DOMException(\"Aborted\",\"AbortError\"))},a.open(i.method,i.url,!0),\"include\"===i.credentials?a.withCredentials=!0:\"omit\"===i.credentials&&(a.withCredentials=!1),\"responseType\"in a&&o&&(a.responseType=\"blob\"),i.headers.forEach((function(e,t){a.setRequestHeader(t,e)})),i.signal&&(i.signal.addEventListener(\"abort\",l),a.onreadystatechange=function(){4===a.readyState&&i.signal.removeEventListener(\"abort\",l)}),a.send(void 0===i._bodyInit?null:i._bodyInit)}))}S.polyfill=!0,e.fetch||(e.fetch=S,e.Headers=h,e.Request=b,e.Response=E),t.Headers=h,t.Request=b,t.Response=E,t.fetch=S,Object.defineProperty(t,\"__esModule\",{value:!0})}({})}(\"undefined\"!=typeof self?self:this)},8269:function(e,t,n){var r;r=void 0!==n.g?n.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError(\"`CSS.escape` requires an argument.\");for(var t,n=String(e),r=n.length,o=-1,s=\"\",i=n.charCodeAt(0);++o<r;)0!=(t=n.charCodeAt(o))?s+=t>=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==i?\"\\\\\"+t.toString(16)+\" \":0==o&&1==r&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?\"\\\\\"+n.charAt(o):n.charAt(o):s+=\"�\";return s};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(r)},27698:(e,t,n)=>{\"use strict\";var r=n(48764).Buffer;function o(e){return e instanceof r||e instanceof Date||e instanceof RegExp}function s(e){if(e instanceof r){var t=r.alloc?r.alloc(e.length):new r(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error(\"Unexpected situation\")}function i(e){var t=[];return e.forEach((function(e,n){\"object\"==typeof e&&null!==e?Array.isArray(e)?t[n]=i(e):o(e)?t[n]=s(e):t[n]=l({},e):t[n]=e})),t}function a(e,t){return\"__proto__\"===t?void 0:e[t]}var l=e.exports=function(){if(arguments.length<1||\"object\"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,n=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(r){\"object\"!=typeof r||null===r||Array.isArray(r)||Object.keys(r).forEach((function(c){return t=a(n,c),(e=a(r,c))===n?void 0:\"object\"!=typeof e||null===e?void(n[c]=e):Array.isArray(e)?void(n[c]=i(e)):o(e)?void(n[c]=s(e)):\"object\"!=typeof t||null===t||Array.isArray(t)?void(n[c]=l({},e)):void(n[c]=l(t,e))}))})),n}},9996:e=>{\"use strict\";var t=function(e){return function(e){return!!e&&\"object\"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return\"[object RegExp]\"===t||\"[object Date]\"===t||function(e){return e.$$typeof===n}(e)}(e)};var n=\"function\"==typeof Symbol&&Symbol.for?Symbol.for(\"react.element\"):60103;function r(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function o(e,t,n){return e.concat(t).map((function(e){return r(e,n)}))}function s(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(e){return!1}}function a(e,t,n){var o={};return n.isMergeableObject(e)&&s(e).forEach((function(t){o[t]=r(e[t],n)})),s(t).forEach((function(s){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,s)||(i(e,s)&&n.isMergeableObject(t[s])?o[s]=function(e,t){if(!t.customMerge)return l;var n=t.customMerge(e);return\"function\"==typeof n?n:l}(s,n)(e[s],t[s],n):o[s]=r(t[s],n))})),o}function l(e,n,s){(s=s||{}).arrayMerge=s.arrayMerge||o,s.isMergeableObject=s.isMergeableObject||t,s.cloneUnlessOtherwiseSpecified=r;var i=Array.isArray(n);return i===Array.isArray(e)?i?s.arrayMerge(e,n,s):a(e,n,s):r(n,s)}l.all=function(e,t){if(!Array.isArray(e))throw new Error(\"first argument should be an array\");return e.reduce((function(e,n){return l(e,n,t)}),{})};var c=l;e.exports=c},27856:function(e){e.exports=function(){\"use strict\";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:o}=Object;let{freeze:s,seal:i,create:a}=Object,{apply:l,construct:c}=\"undefined\"!=typeof Reflect&&Reflect;l||(l=function(e,t,n){return e.apply(t,n)}),s||(s=function(e){return e}),i||(i=function(e){return e}),c||(c=function(e,t){return new e(...t)});const u=E(Array.prototype.forEach),p=E(Array.prototype.pop),h=E(Array.prototype.push),f=E(String.prototype.toLowerCase),d=E(String.prototype.toString),m=E(String.prototype.match),g=E(String.prototype.replace),y=E(String.prototype.indexOf),v=E(String.prototype.trim),b=E(RegExp.prototype.test),w=x(TypeError);function E(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return l(e,t,r)}}function x(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return c(e,n)}}function S(e,r,o){var s;o=null!==(s=o)&&void 0!==s?s:f,t&&t(e,null);let i=r.length;for(;i--;){let t=r[i];if(\"string\"==typeof t){const e=o(t);e!==t&&(n(r)||(r[i]=e),t=e)}e[t]=!0}return e}function _(t){const n=a(null);for(const[r,o]of e(t))n[r]=o;return n}function j(e,t){for(;null!==e;){const n=o(e,t);if(n){if(n.get)return E(n.get);if(\"function\"==typeof n.value)return E(n.value)}e=r(e)}function n(e){return console.warn(\"fallback value for\",e),null}return n}const O=s([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),k=s([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),A=s([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),C=s([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),P=s([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\",\"mprescripts\"]),N=s([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),I=s([\"#text\"]),T=s([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),R=s([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),M=s([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),D=s([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),F=i(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),L=i(/<%[\\w\\W]*|[\\w\\W]*%>/gm),B=i(/\\${[\\w\\W]*}/gm),$=i(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),q=i(/^aria-[\\-\\w]+$/),U=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),z=i(/^(?:\\w+script|data):/i),V=i(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),W=i(/^html$/i);var J=Object.freeze({__proto__:null,MUSTACHE_EXPR:F,ERB_EXPR:L,TMPLIT_EXPR:B,DATA_ATTR:$,ARIA_ATTR:q,IS_ALLOWED_URI:U,IS_SCRIPT_OR_DATA:z,ATTR_WHITESPACE:V,DOCTYPE_NAME:W});const K=()=>\"undefined\"==typeof window?null:window,H=function(e,t){if(\"object\"!=typeof e||\"function\"!=typeof e.createPolicy)return null;let n=null;const r=\"data-tt-policy-suffix\";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const o=\"dompurify\"+(n?\"#\"+n:\"\");try{return e.createPolicy(o,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn(\"TrustedTypes policy \"+o+\" could not be created.\"),null}};function G(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:K();const n=e=>G(e);if(n.version=\"3.0.3\",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;const r=t.document,o=r.currentScript;let{document:i}=t;const{DocumentFragment:a,HTMLTemplateElement:l,Node:c,Element:E,NodeFilter:x,NamedNodeMap:F=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:L,DOMParser:B,trustedTypes:$}=t,q=E.prototype,z=j(q,\"cloneNode\"),V=j(q,\"nextSibling\"),Z=j(q,\"childNodes\"),Y=j(q,\"parentNode\");if(\"function\"==typeof l){const e=i.createElement(\"template\");e.content&&e.content.ownerDocument&&(i=e.content.ownerDocument)}let X,Q=\"\";const{implementation:ee,createNodeIterator:te,createDocumentFragment:ne,getElementsByTagName:re}=i,{importNode:oe}=r;let se={};n.isSupported=\"function\"==typeof e&&\"function\"==typeof Y&&ee&&void 0!==ee.createHTMLDocument;const{MUSTACHE_EXPR:ie,ERB_EXPR:ae,TMPLIT_EXPR:le,DATA_ATTR:ce,ARIA_ATTR:ue,IS_SCRIPT_OR_DATA:pe,ATTR_WHITESPACE:he}=J;let{IS_ALLOWED_URI:fe}=J,de=null;const me=S({},[...O,...k,...A,...P,...I]);let ge=null;const ye=S({},[...T,...R,...M,...D]);let ve=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),be=null,we=null,Ee=!0,xe=!0,Se=!1,_e=!0,je=!1,Oe=!1,ke=!1,Ae=!1,Ce=!1,Pe=!1,Ne=!1,Ie=!0,Te=!1;const Re=\"user-content-\";let Me=!0,De=!1,Fe={},Le=null;const Be=S({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]);let $e=null;const qe=S({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]);let Ue=null;const ze=S({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),Ve=\"http://www.w3.org/1998/Math/MathML\",We=\"http://www.w3.org/2000/svg\",Je=\"http://www.w3.org/1999/xhtml\";let Ke=Je,He=!1,Ge=null;const Ze=S({},[Ve,We,Je],d);let Ye;const Xe=[\"application/xhtml+xml\",\"text/html\"],Qe=\"text/html\";let et,tt=null;const nt=i.createElement(\"form\"),rt=function(e){return e instanceof RegExp||e instanceof Function},ot=function(e){if(!tt||tt!==e){if(e&&\"object\"==typeof e||(e={}),e=_(e),Ye=Ye=-1===Xe.indexOf(e.PARSER_MEDIA_TYPE)?Qe:e.PARSER_MEDIA_TYPE,et=\"application/xhtml+xml\"===Ye?d:f,de=\"ALLOWED_TAGS\"in e?S({},e.ALLOWED_TAGS,et):me,ge=\"ALLOWED_ATTR\"in e?S({},e.ALLOWED_ATTR,et):ye,Ge=\"ALLOWED_NAMESPACES\"in e?S({},e.ALLOWED_NAMESPACES,d):Ze,Ue=\"ADD_URI_SAFE_ATTR\"in e?S(_(ze),e.ADD_URI_SAFE_ATTR,et):ze,$e=\"ADD_DATA_URI_TAGS\"in e?S(_(qe),e.ADD_DATA_URI_TAGS,et):qe,Le=\"FORBID_CONTENTS\"in e?S({},e.FORBID_CONTENTS,et):Be,be=\"FORBID_TAGS\"in e?S({},e.FORBID_TAGS,et):{},we=\"FORBID_ATTR\"in e?S({},e.FORBID_ATTR,et):{},Fe=\"USE_PROFILES\"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,xe=!1!==e.ALLOW_DATA_ATTR,Se=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_e=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,je=e.SAFE_FOR_TEMPLATES||!1,Oe=e.WHOLE_DOCUMENT||!1,Ce=e.RETURN_DOM||!1,Pe=e.RETURN_DOM_FRAGMENT||!1,Ne=e.RETURN_TRUSTED_TYPE||!1,Ae=e.FORCE_BODY||!1,Ie=!1!==e.SANITIZE_DOM,Te=e.SANITIZE_NAMED_PROPS||!1,Me=!1!==e.KEEP_CONTENT,De=e.IN_PLACE||!1,fe=e.ALLOWED_URI_REGEXP||U,Ke=e.NAMESPACE||Je,ve=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&rt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ve.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&rt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ve.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&\"boolean\"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ve.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),je&&(xe=!1),Pe&&(Ce=!0),Fe&&(de=S({},[...I]),ge=[],!0===Fe.html&&(S(de,O),S(ge,T)),!0===Fe.svg&&(S(de,k),S(ge,R),S(ge,D)),!0===Fe.svgFilters&&(S(de,A),S(ge,R),S(ge,D)),!0===Fe.mathMl&&(S(de,P),S(ge,M),S(ge,D))),e.ADD_TAGS&&(de===me&&(de=_(de)),S(de,e.ADD_TAGS,et)),e.ADD_ATTR&&(ge===ye&&(ge=_(ge)),S(ge,e.ADD_ATTR,et)),e.ADD_URI_SAFE_ATTR&&S(Ue,e.ADD_URI_SAFE_ATTR,et),e.FORBID_CONTENTS&&(Le===Be&&(Le=_(Le)),S(Le,e.FORBID_CONTENTS,et)),Me&&(de[\"#text\"]=!0),Oe&&S(de,[\"html\",\"head\",\"body\"]),de.table&&(S(de,[\"tbody\"]),delete be.tbody),e.TRUSTED_TYPES_POLICY){if(\"function\"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw w('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');if(\"function\"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw w('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');X=e.TRUSTED_TYPES_POLICY,Q=X.createHTML(\"\")}else void 0===X&&(X=H($,o)),null!==X&&\"string\"==typeof Q&&(Q=X.createHTML(\"\"));s&&s(e),tt=e}},st=S({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),it=S({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),at=S({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),lt=S({},k);S(lt,A),S(lt,C);const ct=S({},P);S(ct,N);const ut=function(e){let t=Y(e);t&&t.tagName||(t={namespaceURI:Ke,tagName:\"template\"});const n=f(e.tagName),r=f(t.tagName);return!!Ge[e.namespaceURI]&&(e.namespaceURI===We?t.namespaceURI===Je?\"svg\"===n:t.namespaceURI===Ve?\"svg\"===n&&(\"annotation-xml\"===r||st[r]):Boolean(lt[n]):e.namespaceURI===Ve?t.namespaceURI===Je?\"math\"===n:t.namespaceURI===We?\"math\"===n&&it[r]:Boolean(ct[n]):e.namespaceURI===Je?!(t.namespaceURI===We&&!it[r])&&!(t.namespaceURI===Ve&&!st[r])&&!ct[n]&&(at[n]||!lt[n]):!(\"application/xhtml+xml\"!==Ye||!Ge[e.namespaceURI]))},pt=function(e){h(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},ht=function(e,t){try{h(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){h(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),\"is\"===e&&!ge[e])if(Ce||Pe)try{pt(t)}catch(e){}else try{t.setAttribute(e,\"\")}catch(e){}},ft=function(e){let t,n;if(Ae)e=\"<remove></remove>\"+e;else{const t=m(e,/^[\\r\\n\\t ]+/);n=t&&t[0]}\"application/xhtml+xml\"===Ye&&Ke===Je&&(e='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+e+\"</body></html>\");const r=X?X.createHTML(e):e;if(Ke===Je)try{t=(new B).parseFromString(r,Ye)}catch(e){}if(!t||!t.documentElement){t=ee.createDocument(Ke,\"template\",null);try{t.documentElement.innerHTML=He?Q:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(i.createTextNode(n),o.childNodes[0]||null),Ke===Je?re.call(t,Oe?\"html\":\"body\")[0]:Oe?t.documentElement:o},dt=function(e){return te.call(e.ownerDocument||e,e,x.SHOW_ELEMENT|x.SHOW_COMMENT|x.SHOW_TEXT,null,!1)},mt=function(e){return e instanceof L&&(\"string\"!=typeof e.nodeName||\"string\"!=typeof e.textContent||\"function\"!=typeof e.removeChild||!(e.attributes instanceof F)||\"function\"!=typeof e.removeAttribute||\"function\"!=typeof e.setAttribute||\"string\"!=typeof e.namespaceURI||\"function\"!=typeof e.insertBefore||\"function\"!=typeof e.hasChildNodes)},gt=function(e){return\"object\"==typeof c?e instanceof c:e&&\"object\"==typeof e&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName},yt=function(e,t,r){se[e]&&u(se[e],(e=>{e.call(n,t,r,tt)}))},vt=function(e){let t;if(yt(\"beforeSanitizeElements\",e,null),mt(e))return pt(e),!0;const r=et(e.nodeName);if(yt(\"uponSanitizeElement\",e,{tagName:r,allowedTags:de}),e.hasChildNodes()&&!gt(e.firstElementChild)&&(!gt(e.content)||!gt(e.content.firstElementChild))&&b(/<[/\\w]/g,e.innerHTML)&&b(/<[/\\w]/g,e.textContent))return pt(e),!0;if(!de[r]||be[r]){if(!be[r]&&wt(r)){if(ve.tagNameCheck instanceof RegExp&&b(ve.tagNameCheck,r))return!1;if(ve.tagNameCheck instanceof Function&&ve.tagNameCheck(r))return!1}if(Me&&!Le[r]){const t=Y(e)||e.parentNode,n=Z(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(z(n[r],!0),V(e))}return pt(e),!0}return e instanceof E&&!ut(e)?(pt(e),!0):\"noscript\"!==r&&\"noembed\"!==r||!b(/<\\/no(script|embed)/i,e.innerHTML)?(je&&3===e.nodeType&&(t=e.textContent,t=g(t,ie,\" \"),t=g(t,ae,\" \"),t=g(t,le,\" \"),e.textContent!==t&&(h(n.removed,{element:e.cloneNode()}),e.textContent=t)),yt(\"afterSanitizeElements\",e,null),!1):(pt(e),!0)},bt=function(e,t,n){if(Ie&&(\"id\"===t||\"name\"===t)&&(n in i||n in nt))return!1;if(xe&&!we[t]&&b(ce,t));else if(Ee&&b(ue,t));else if(!ge[t]||we[t]){if(!(wt(e)&&(ve.tagNameCheck instanceof RegExp&&b(ve.tagNameCheck,e)||ve.tagNameCheck instanceof Function&&ve.tagNameCheck(e))&&(ve.attributeNameCheck instanceof RegExp&&b(ve.attributeNameCheck,t)||ve.attributeNameCheck instanceof Function&&ve.attributeNameCheck(t))||\"is\"===t&&ve.allowCustomizedBuiltInElements&&(ve.tagNameCheck instanceof RegExp&&b(ve.tagNameCheck,n)||ve.tagNameCheck instanceof Function&&ve.tagNameCheck(n))))return!1}else if(Ue[t]);else if(b(fe,g(n,he,\"\")));else if(\"src\"!==t&&\"xlink:href\"!==t&&\"href\"!==t||\"script\"===e||0!==y(n,\"data:\")||!$e[e])if(Se&&!b(pe,g(n,he,\"\")));else if(n)return!1;return!0},wt=function(e){return e.indexOf(\"-\")>0},Et=function(e){let t,r,o,s;yt(\"beforeSanitizeAttributes\",e,null);const{attributes:i}=e;if(!i)return;const a={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:ge};for(s=i.length;s--;){t=i[s];const{name:l,namespaceURI:c}=t;if(r=\"value\"===l?t.value:v(t.value),o=et(l),a.attrName=o,a.attrValue=r,a.keepAttr=!0,a.forceKeepAttr=void 0,yt(\"uponSanitizeAttribute\",e,a),r=a.attrValue,a.forceKeepAttr)continue;if(ht(l,e),!a.keepAttr)continue;if(!_e&&b(/\\/>/i,r)){ht(l,e);continue}je&&(r=g(r,ie,\" \"),r=g(r,ae,\" \"),r=g(r,le,\" \"));const u=et(e.nodeName);if(bt(u,o,r)){if(!Te||\"id\"!==o&&\"name\"!==o||(ht(l,e),r=Re+r),X&&\"object\"==typeof $&&\"function\"==typeof $.getAttributeType)if(c);else switch($.getAttributeType(u,o)){case\"TrustedHTML\":r=X.createHTML(r);break;case\"TrustedScriptURL\":r=X.createScriptURL(r)}try{c?e.setAttributeNS(c,l,r):e.setAttribute(l,r),p(n.removed)}catch(e){}}}yt(\"afterSanitizeAttributes\",e,null)},xt=function e(t){let n;const r=dt(t);for(yt(\"beforeSanitizeShadowDOM\",t,null);n=r.nextNode();)yt(\"uponSanitizeShadowNode\",n,null),vt(n)||(n.content instanceof a&&e(n.content),Et(n));yt(\"afterSanitizeShadowDOM\",t,null)};return n.sanitize=function(e){let t,o,s,i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(He=!e,He&&(e=\"\\x3c!--\\x3e\"),\"string\"!=typeof e&&!gt(e)){if(\"function\"!=typeof e.toString)throw w(\"toString is not a function\");if(\"string\"!=typeof(e=e.toString()))throw w(\"dirty is not a string, aborting\")}if(!n.isSupported)return e;if(ke||ot(l),n.removed=[],\"string\"==typeof e&&(De=!1),De){if(e.nodeName){const t=et(e.nodeName);if(!de[t]||be[t])throw w(\"root node is forbidden and cannot be sanitized in-place\")}}else if(e instanceof c)t=ft(\"\\x3c!----\\x3e\"),o=t.ownerDocument.importNode(e,!0),1===o.nodeType&&\"BODY\"===o.nodeName||\"HTML\"===o.nodeName?t=o:t.appendChild(o);else{if(!Ce&&!je&&!Oe&&-1===e.indexOf(\"<\"))return X&&Ne?X.createHTML(e):e;if(t=ft(e),!t)return Ce?null:Ne?Q:\"\"}t&&Ae&&pt(t.firstChild);const u=dt(De?e:t);for(;s=u.nextNode();)vt(s)||(s.content instanceof a&&xt(s.content),Et(s));if(De)return e;if(Ce){if(Pe)for(i=ne.call(t.ownerDocument);t.firstChild;)i.appendChild(t.firstChild);else i=t;return(ge.shadowroot||ge.shadowrootmod)&&(i=oe.call(r,i,!0)),i}let p=Oe?t.outerHTML:t.innerHTML;return Oe&&de[\"!doctype\"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&b(W,t.ownerDocument.doctype.name)&&(p=\"<!DOCTYPE \"+t.ownerDocument.doctype.name+\">\\n\"+p),je&&(p=g(p,ie,\" \"),p=g(p,ae,\" \"),p=g(p,le,\" \")),X&&Ne?X.createHTML(p):p},n.setConfig=function(e){ot(e),ke=!0},n.clearConfig=function(){tt=null,ke=!1},n.isValidAttribute=function(e,t,n){tt||ot({});const r=et(e),o=et(t);return bt(r,o,n)},n.addHook=function(e,t){\"function\"==typeof t&&(se[e]=se[e]||[],h(se[e],t))},n.removeHook=function(e){if(se[e])return p(se[e])},n.removeHooks=function(e){se[e]&&(se[e]=[])},n.removeAllHooks=function(){se={}},n}return G()}()},69450:e=>{\"use strict\";class t{constructor(e,t){this.low=e,this.high=t,this.length=1+t-e}overlaps(e){return!(this.high<e.low||this.low>e.high)}touches(e){return!(this.high+1<e.low||this.low-1>e.high)}add(e){return new t(Math.min(this.low,e.low),Math.max(this.high,e.high))}subtract(e){return e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.high<this.high?[new t(this.low,e.low-1),new t(e.high+1,this.high)]:e.low<=this.low?[new t(e.high+1,this.high)]:[new t(this.low,e.low-1)]}toString(){return this.low==this.high?this.low.toString():this.low+\"-\"+this.high}}class n{constructor(e,t){this.ranges=[],this.length=0,null!=e&&this.add(e,t)}_update_length(){this.length=this.ranges.reduce(((e,t)=>e+t.length),0)}add(e,r){var o=e=>{for(var t=0;t<this.ranges.length&&!e.touches(this.ranges[t]);)t++;for(var n=this.ranges.slice(0,t);t<this.ranges.length&&e.touches(this.ranges[t]);)e=e.add(this.ranges[t]),t++;n.push(e),this.ranges=n.concat(this.ranges.slice(t)),this._update_length()};return e instanceof n?e.ranges.forEach(o):(null==r&&(r=e),o(new t(e,r))),this}subtract(e,r){var o=e=>{for(var t=0;t<this.ranges.length&&!e.overlaps(this.ranges[t]);)t++;for(var n=this.ranges.slice(0,t);t<this.ranges.length&&e.overlaps(this.ranges[t]);)n=n.concat(this.ranges[t].subtract(e)),t++;this.ranges=n.concat(this.ranges.slice(t)),this._update_length()};return e instanceof n?e.ranges.forEach(o):(null==r&&(r=e),o(new t(e,r))),this}intersect(e,r){var o=[],s=e=>{for(var n=0;n<this.ranges.length&&!e.overlaps(this.ranges[n]);)n++;for(;n<this.ranges.length&&e.overlaps(this.ranges[n]);){var r=Math.max(this.ranges[n].low,e.low),s=Math.min(this.ranges[n].high,e.high);o.push(new t(r,s)),n++}};return e instanceof n?e.ranges.forEach(s):(null==r&&(r=e),s(new t(e,r))),this.ranges=o,this._update_length(),this}index(e){for(var t=0;t<this.ranges.length&&this.ranges[t].length<=e;)e-=this.ranges[t].length,t++;return this.ranges[t].low+e}toString(){return\"[ \"+this.ranges.join(\", \")+\" ]\"}clone(){return new n(this)}numbers(){return this.ranges.reduce(((e,t)=>{for(var n=t.low;n<=t.high;)e.push(n),n++;return e}),[])}subranges(){return this.ranges.map((e=>({low:e.low,high:e.high,length:1+e.high-e.low})))}}e.exports=n},17187:e=>{\"use strict\";var t,n=\"object\"==typeof Reflect?Reflect:null,r=n&&\"function\"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&\"function\"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(n,r){function o(n){e.removeListener(t,s),r(n)}function s(){\"function\"==typeof e.removeListener&&e.removeListener(\"error\",o),n([].slice.call(arguments))}m(e,t,s,{once:!0}),\"error\"!==t&&function(e,t,n){\"function\"==typeof e.on&&m(e,\"error\",t,n)}(e,o,{once:!0})}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var i=10;function a(e){if(\"function\"!=typeof e)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function c(e,t,n,r){var o,s,i,c;if(a(n),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit(\"newListener\",t,n.listener?n.listener:n),s=e._events),i=s[t]),void 0===i)i=s[t]=n,++e._eventsCount;else if(\"function\"==typeof i?i=s[t]=r?[n,i]:[i,n]:r?i.unshift(n):i.push(n),(o=l(e))>0&&i.length>o&&!i.warned){i.warned=!0;var u=new Error(\"Possible EventEmitter memory leak detected. \"+i.length+\" \"+String(t)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");u.name=\"MaxListenersExceededWarning\",u.emitter=e,u.type=t,u.count=i.length,c=u,console&&console.warn&&console.warn(c)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=u.bind(r);return o.listener=n,r.wrapFn=o,o}function h(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:\"function\"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):d(o,o.length)}function f(e){var t=this._events;if(void 0!==t){var n=t[e];if(\"function\"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function d(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if(\"function\"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if(\"function\"!=typeof e.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function o(s){r.once&&e.removeEventListener(t,o),n(s)}))}}Object.defineProperty(s,\"defaultMaxListeners\",{enumerable:!0,get:function(){return i},set:function(e){if(\"number\"!=typeof e||e<0||o(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");i=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||o(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return l(this)},s.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o=\"error\"===e,s=this._events;if(void 0!==s)o=o&&void 0===s.error;else if(!o)return!1;if(o){var i;if(t.length>0&&(i=t[0]),i instanceof Error)throw i;var a=new Error(\"Unhandled error.\"+(i?\" (\"+i.message+\")\":\"\"));throw a.context=i,a}var l=s[e];if(void 0===l)return!1;if(\"function\"==typeof l)r(l,this,t);else{var c=l.length,u=d(l,c);for(n=0;n<c;++n)r(u[n],this,t)}return!0},s.prototype.addListener=function(e,t){return c(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return c(this,e,t,!0)},s.prototype.once=function(e,t){return a(t),this.on(e,p(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,p(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,r,o,s,i;if(a(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(\"removeListener\",e,n.listener||t));else if(\"function\"!=typeof n){for(o=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){i=n[s].listener,o=s;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit(\"removeListener\",e,i||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,s=Object.keys(n);for(r=0;r<s.length;++r)\"removeListener\"!==(o=s[r])&&this.removeAllListeners(o);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},s.prototype.listenerCount=f,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},21102:(e,t,n)=>{\"use strict\";var r=n(46291),o=s(Error);function s(e){return t.displayName=e.displayName||e.name,t;function t(t){return t&&(t=r.apply(null,arguments)),new e(t)}}e.exports=o,o.eval=s(EvalError),o.range=s(RangeError),o.reference=s(ReferenceError),o.syntax=s(SyntaxError),o.type=s(TypeError),o.uri=s(URIError),o.create=s},46291:e=>{!function(){var t;function n(e){for(var t,n,r,o,s=1,i=[].slice.call(arguments),a=0,l=e.length,c=\"\",u=!1,p=!1,h=function(){return i[s++]},f=function(){for(var n=\"\";/\\d/.test(e[a]);)n+=e[a++],t=e[a];return n.length>0?parseInt(n):null};a<l;++a)if(t=e[a],u)switch(u=!1,\".\"==t?(p=!1,t=e[++a]):\"0\"==t&&\".\"==e[a+1]?(p=!0,t=e[a+=2]):p=!0,o=f(),t){case\"b\":c+=parseInt(h(),10).toString(2);break;case\"c\":c+=\"string\"==typeof(n=h())||n instanceof String?n:String.fromCharCode(parseInt(n,10));break;case\"d\":c+=parseInt(h(),10);break;case\"f\":r=String(parseFloat(h()).toFixed(o||6)),c+=p?r:r.replace(/^0/,\"\");break;case\"j\":c+=JSON.stringify(h());break;case\"o\":c+=\"0\"+parseInt(h(),10).toString(8);break;case\"s\":c+=h();break;case\"x\":c+=\"0x\"+parseInt(h(),10).toString(16);break;case\"X\":c+=\"0x\"+parseInt(h(),10).toString(16).toUpperCase();break;default:c+=t}else\"%\"===t?u=!0:c+=t;return c}(t=e.exports=n).format=n,t.vsprintf=function(e,t){return n.apply(null,[e].concat(t))},\"undefined\"!=typeof console&&\"function\"==typeof console.log&&(t.printf=function(){console.log(n.apply(null,arguments))})}()},17648:e=>{\"use strict\";var t=Array.prototype.slice,n=Object.prototype.toString;e.exports=function(e){var r=this;if(\"function\"!=typeof r||\"[object Function]\"!==n.call(r))throw new TypeError(\"Function.prototype.bind called on incompatible \"+r);for(var o,s=t.call(arguments,1),i=Math.max(0,r.length-s.length),a=[],l=0;l<i;l++)a.push(\"$\"+l);if(o=Function(\"binder\",\"return function (\"+a.join(\",\")+\"){ return binder.apply(this,arguments); }\")((function(){if(this instanceof o){var n=r.apply(this,s.concat(t.call(arguments)));return Object(n)===n?n:this}return r.apply(e,s.concat(t.call(arguments)))})),r.prototype){var c=function(){};c.prototype=r.prototype,o.prototype=new c,c.prototype=null}return o}},58612:(e,t,n)=>{\"use strict\";var r=n(17648);e.exports=Function.prototype.bind||r},40210:(e,t,n)=>{\"use strict\";var r,o=SyntaxError,s=Function,i=TypeError,a=function(e){try{return s('\"use strict\"; return ('+e+\").constructor;\")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},\"\")}catch(e){l=null}var c=function(){throw new i},u=l?function(){try{return c}catch(e){try{return l(arguments,\"callee\").get}catch(e){return c}}}():c,p=n(41405)(),h=n(28185)(),f=Object.getPrototypeOf||(h?function(e){return e.__proto__}:null),d={},m=\"undefined\"!=typeof Uint8Array&&f?f(Uint8Array):r,g={\"%AggregateError%\":\"undefined\"==typeof AggregateError?r:AggregateError,\"%Array%\":Array,\"%ArrayBuffer%\":\"undefined\"==typeof ArrayBuffer?r:ArrayBuffer,\"%ArrayIteratorPrototype%\":p&&f?f([][Symbol.iterator]()):r,\"%AsyncFromSyncIteratorPrototype%\":r,\"%AsyncFunction%\":d,\"%AsyncGenerator%\":d,\"%AsyncGeneratorFunction%\":d,\"%AsyncIteratorPrototype%\":d,\"%Atomics%\":\"undefined\"==typeof Atomics?r:Atomics,\"%BigInt%\":\"undefined\"==typeof BigInt?r:BigInt,\"%BigInt64Array%\":\"undefined\"==typeof BigInt64Array?r:BigInt64Array,\"%BigUint64Array%\":\"undefined\"==typeof BigUint64Array?r:BigUint64Array,\"%Boolean%\":Boolean,\"%DataView%\":\"undefined\"==typeof DataView?r:DataView,\"%Date%\":Date,\"%decodeURI%\":decodeURI,\"%decodeURIComponent%\":decodeURIComponent,\"%encodeURI%\":encodeURI,\"%encodeURIComponent%\":encodeURIComponent,\"%Error%\":Error,\"%eval%\":eval,\"%EvalError%\":EvalError,\"%Float32Array%\":\"undefined\"==typeof Float32Array?r:Float32Array,\"%Float64Array%\":\"undefined\"==typeof Float64Array?r:Float64Array,\"%FinalizationRegistry%\":\"undefined\"==typeof FinalizationRegistry?r:FinalizationRegistry,\"%Function%\":s,\"%GeneratorFunction%\":d,\"%Int8Array%\":\"undefined\"==typeof Int8Array?r:Int8Array,\"%Int16Array%\":\"undefined\"==typeof Int16Array?r:Int16Array,\"%Int32Array%\":\"undefined\"==typeof Int32Array?r:Int32Array,\"%isFinite%\":isFinite,\"%isNaN%\":isNaN,\"%IteratorPrototype%\":p&&f?f(f([][Symbol.iterator]())):r,\"%JSON%\":\"object\"==typeof JSON?JSON:r,\"%Map%\":\"undefined\"==typeof Map?r:Map,\"%MapIteratorPrototype%\":\"undefined\"!=typeof Map&&p&&f?f((new Map)[Symbol.iterator]()):r,\"%Math%\":Math,\"%Number%\":Number,\"%Object%\":Object,\"%parseFloat%\":parseFloat,\"%parseInt%\":parseInt,\"%Promise%\":\"undefined\"==typeof Promise?r:Promise,\"%Proxy%\":\"undefined\"==typeof Proxy?r:Proxy,\"%RangeError%\":RangeError,\"%ReferenceError%\":ReferenceError,\"%Reflect%\":\"undefined\"==typeof Reflect?r:Reflect,\"%RegExp%\":RegExp,\"%Set%\":\"undefined\"==typeof Set?r:Set,\"%SetIteratorPrototype%\":\"undefined\"!=typeof Set&&p&&f?f((new Set)[Symbol.iterator]()):r,\"%SharedArrayBuffer%\":\"undefined\"==typeof SharedArrayBuffer?r:SharedArrayBuffer,\"%String%\":String,\"%StringIteratorPrototype%\":p&&f?f(\"\"[Symbol.iterator]()):r,\"%Symbol%\":p?Symbol:r,\"%SyntaxError%\":o,\"%ThrowTypeError%\":u,\"%TypedArray%\":m,\"%TypeError%\":i,\"%Uint8Array%\":\"undefined\"==typeof Uint8Array?r:Uint8Array,\"%Uint8ClampedArray%\":\"undefined\"==typeof Uint8ClampedArray?r:Uint8ClampedArray,\"%Uint16Array%\":\"undefined\"==typeof Uint16Array?r:Uint16Array,\"%Uint32Array%\":\"undefined\"==typeof Uint32Array?r:Uint32Array,\"%URIError%\":URIError,\"%WeakMap%\":\"undefined\"==typeof WeakMap?r:WeakMap,\"%WeakRef%\":\"undefined\"==typeof WeakRef?r:WeakRef,\"%WeakSet%\":\"undefined\"==typeof WeakSet?r:WeakSet};if(f)try{null.error}catch(e){var y=f(f(e));g[\"%Error.prototype%\"]=y}var v=function e(t){var n;if(\"%AsyncFunction%\"===t)n=a(\"async function () {}\");else if(\"%GeneratorFunction%\"===t)n=a(\"function* () {}\");else if(\"%AsyncGeneratorFunction%\"===t)n=a(\"async function* () {}\");else if(\"%AsyncGenerator%\"===t){var r=e(\"%AsyncGeneratorFunction%\");r&&(n=r.prototype)}else if(\"%AsyncIteratorPrototype%\"===t){var o=e(\"%AsyncGenerator%\");o&&f&&(n=f(o.prototype))}return g[t]=n,n},b={\"%ArrayBufferPrototype%\":[\"ArrayBuffer\",\"prototype\"],\"%ArrayPrototype%\":[\"Array\",\"prototype\"],\"%ArrayProto_entries%\":[\"Array\",\"prototype\",\"entries\"],\"%ArrayProto_forEach%\":[\"Array\",\"prototype\",\"forEach\"],\"%ArrayProto_keys%\":[\"Array\",\"prototype\",\"keys\"],\"%ArrayProto_values%\":[\"Array\",\"prototype\",\"values\"],\"%AsyncFunctionPrototype%\":[\"AsyncFunction\",\"prototype\"],\"%AsyncGenerator%\":[\"AsyncGeneratorFunction\",\"prototype\"],\"%AsyncGeneratorPrototype%\":[\"AsyncGeneratorFunction\",\"prototype\",\"prototype\"],\"%BooleanPrototype%\":[\"Boolean\",\"prototype\"],\"%DataViewPrototype%\":[\"DataView\",\"prototype\"],\"%DatePrototype%\":[\"Date\",\"prototype\"],\"%ErrorPrototype%\":[\"Error\",\"prototype\"],\"%EvalErrorPrototype%\":[\"EvalError\",\"prototype\"],\"%Float32ArrayPrototype%\":[\"Float32Array\",\"prototype\"],\"%Float64ArrayPrototype%\":[\"Float64Array\",\"prototype\"],\"%FunctionPrototype%\":[\"Function\",\"prototype\"],\"%Generator%\":[\"GeneratorFunction\",\"prototype\"],\"%GeneratorPrototype%\":[\"GeneratorFunction\",\"prototype\",\"prototype\"],\"%Int8ArrayPrototype%\":[\"Int8Array\",\"prototype\"],\"%Int16ArrayPrototype%\":[\"Int16Array\",\"prototype\"],\"%Int32ArrayPrototype%\":[\"Int32Array\",\"prototype\"],\"%JSONParse%\":[\"JSON\",\"parse\"],\"%JSONStringify%\":[\"JSON\",\"stringify\"],\"%MapPrototype%\":[\"Map\",\"prototype\"],\"%NumberPrototype%\":[\"Number\",\"prototype\"],\"%ObjectPrototype%\":[\"Object\",\"prototype\"],\"%ObjProto_toString%\":[\"Object\",\"prototype\",\"toString\"],\"%ObjProto_valueOf%\":[\"Object\",\"prototype\",\"valueOf\"],\"%PromisePrototype%\":[\"Promise\",\"prototype\"],\"%PromiseProto_then%\":[\"Promise\",\"prototype\",\"then\"],\"%Promise_all%\":[\"Promise\",\"all\"],\"%Promise_reject%\":[\"Promise\",\"reject\"],\"%Promise_resolve%\":[\"Promise\",\"resolve\"],\"%RangeErrorPrototype%\":[\"RangeError\",\"prototype\"],\"%ReferenceErrorPrototype%\":[\"ReferenceError\",\"prototype\"],\"%RegExpPrototype%\":[\"RegExp\",\"prototype\"],\"%SetPrototype%\":[\"Set\",\"prototype\"],\"%SharedArrayBufferPrototype%\":[\"SharedArrayBuffer\",\"prototype\"],\"%StringPrototype%\":[\"String\",\"prototype\"],\"%SymbolPrototype%\":[\"Symbol\",\"prototype\"],\"%SyntaxErrorPrototype%\":[\"SyntaxError\",\"prototype\"],\"%TypedArrayPrototype%\":[\"TypedArray\",\"prototype\"],\"%TypeErrorPrototype%\":[\"TypeError\",\"prototype\"],\"%Uint8ArrayPrototype%\":[\"Uint8Array\",\"prototype\"],\"%Uint8ClampedArrayPrototype%\":[\"Uint8ClampedArray\",\"prototype\"],\"%Uint16ArrayPrototype%\":[\"Uint16Array\",\"prototype\"],\"%Uint32ArrayPrototype%\":[\"Uint32Array\",\"prototype\"],\"%URIErrorPrototype%\":[\"URIError\",\"prototype\"],\"%WeakMapPrototype%\":[\"WeakMap\",\"prototype\"],\"%WeakSetPrototype%\":[\"WeakSet\",\"prototype\"]},w=n(58612),E=n(17642),x=w.call(Function.call,Array.prototype.concat),S=w.call(Function.apply,Array.prototype.splice),_=w.call(Function.call,String.prototype.replace),j=w.call(Function.call,String.prototype.slice),O=w.call(Function.call,RegExp.prototype.exec),k=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,A=/\\\\(\\\\)?/g,C=function(e,t){var n,r=e;if(E(b,r)&&(r=\"%\"+(n=b[r])[0]+\"%\"),E(g,r)){var s=g[r];if(s===d&&(s=v(r)),void 0===s&&!t)throw new i(\"intrinsic \"+e+\" exists, but is not available. Please file an issue!\");return{alias:n,name:r,value:s}}throw new o(\"intrinsic \"+e+\" does not exist!\")};e.exports=function(e,t){if(\"string\"!=typeof e||0===e.length)throw new i(\"intrinsic name must be a non-empty string\");if(arguments.length>1&&\"boolean\"!=typeof t)throw new i('\"allowMissing\" argument must be a boolean');if(null===O(/^%?[^%]*%?$/,e))throw new o(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");var n=function(e){var t=j(e,0,1),n=j(e,-1);if(\"%\"===t&&\"%\"!==n)throw new o(\"invalid intrinsic syntax, expected closing `%`\");if(\"%\"===n&&\"%\"!==t)throw new o(\"invalid intrinsic syntax, expected opening `%`\");var r=[];return _(e,k,(function(e,t,n,o){r[r.length]=n?_(o,A,\"$1\"):t||e})),r}(e),r=n.length>0?n[0]:\"\",s=C(\"%\"+r+\"%\",t),a=s.name,c=s.value,u=!1,p=s.alias;p&&(r=p[0],S(n,x([0,1],p)));for(var h=1,f=!0;h<n.length;h+=1){var d=n[h],m=j(d,0,1),y=j(d,-1);if(('\"'===m||\"'\"===m||\"`\"===m||'\"'===y||\"'\"===y||\"`\"===y)&&m!==y)throw new o(\"property names with quotes must have matching quotes\");if(\"constructor\"!==d&&f||(u=!0),E(g,a=\"%\"+(r+=\".\"+d)+\"%\"))c=g[a];else if(null!=c){if(!(d in c)){if(!t)throw new i(\"base intrinsic for \"+e+\" exists, but the property is not available.\");return}if(l&&h+1>=n.length){var v=l(c,d);c=(f=!!v)&&\"get\"in v&&!(\"originalValue\"in v.get)?v.get:c[d]}else f=E(c,d),c=c[d];f&&!u&&(g[a]=c)}}return c}},28185:e=>{\"use strict\";var t={foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof n)}},41405:(e,t,n)=>{\"use strict\";var r=\"undefined\"!=typeof Symbol&&Symbol,o=n(55419);e.exports=function(){return\"function\"==typeof r&&(\"function\"==typeof Symbol&&(\"symbol\"==typeof r(\"foo\")&&(\"symbol\"==typeof Symbol(\"bar\")&&o())))}},55419:e=>{\"use strict\";e.exports=function(){if(\"function\"!=typeof Symbol||\"function\"!=typeof Object.getOwnPropertySymbols)return!1;if(\"symbol\"==typeof Symbol.iterator)return!0;var e={},t=Symbol(\"test\"),n=Object(t);if(\"string\"==typeof t)return!1;if(\"[object Symbol]\"!==Object.prototype.toString.call(t))return!1;if(\"[object Symbol]\"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if(\"function\"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if(\"function\"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if(\"function\"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},17642:(e,t,n)=>{\"use strict\";var r=n(58612);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},47802:e=>{function t(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error(\"map is read-only\")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error(\"set is read-only\")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(n){var r=e[n];\"object\"!=typeof r||Object.isFrozen(r)||t(r)})),e}var n=t,r=t;n.default=r;class o{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function s(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\")}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const a=e=>!!e.kind;class l{constructor(e,t){this.buffer=\"\",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=s(e)}openNode(e){if(!a(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){a(e)&&(this.buffer+=\"</span>\")}value(){return this.buffer}span(e){this.buffer+=`<span class=\"${e}\">`}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return\"string\"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){\"string\"!=typeof e&&e.children&&(e.children.every((e=>\"string\"==typeof e))?e.children=[e.children.join(\"\")]:e.children.forEach((e=>{c._collapse(e)})))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,t){\"\"!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){\"\"!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function p(e){return e?\"string\"==typeof e?e:e.source:null}const h=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;const f=\"[a-zA-Z]\\\\w*\",d=\"[a-zA-Z_]\\\\w*\",m=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",g=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",y=\"\\\\b(0b[01]+)\",v={begin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},b={className:\"string\",begin:\"'\",end:\"'\",illegal:\"\\\\n\",contains:[v]},w={className:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",contains:[v]},E={begin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},x=function(e,t,n={}){const r=i({className:\"comment\",begin:e,end:t,contains:[]},n);return r.contains.push(E),r.contains.push({className:\"doctag\",begin:\"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):\",relevance:0}),r},S=x(\"//\",\"$\"),_=x(\"/\\\\*\",\"\\\\*/\"),j=x(\"#\",\"$\"),O={className:\"number\",begin:m,relevance:0},k={className:\"number\",begin:g,relevance:0},A={className:\"number\",begin:y,relevance:0},C={className:\"number\",begin:m+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",relevance:0},P={begin:/(?=\\/[^/\\n]*\\/)/,contains:[{className:\"regexp\",begin:/\\//,end:/\\/[gimuy]*/,illegal:/\\n/,contains:[v,{begin:/\\[/,end:/\\]/,relevance:0,contains:[v]}]}]},N={className:\"title\",begin:f,relevance:0},I={className:\"title\",begin:d,relevance:0},T={begin:\"\\\\.\\\\s*\"+d,relevance:0};var R=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\\b\\B/,IDENT_RE:f,UNDERSCORE_IDENT_RE:d,NUMBER_RE:m,C_NUMBER_RE:g,BINARY_NUMBER_RE:y,RE_STARTERS_RE:\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",SHEBANG:(e={})=>{const t=/^#![ ]*\\//;return e.binary&&(e.begin=function(...e){return e.map((e=>p(e))).join(\"\")}(t,/.*\\b/,e.binary,/\\b.*/)),i({className:\"meta\",begin:t,end:/$/,relevance:0,\"on:begin\":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:v,APOS_STRING_MODE:b,QUOTE_STRING_MODE:w,PHRASAL_WORDS_MODE:E,COMMENT:x,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:_,HASH_COMMENT_MODE:j,NUMBER_MODE:O,C_NUMBER_MODE:k,BINARY_NUMBER_MODE:A,CSS_NUMBER_MODE:C,REGEXP_MODE:P,TITLE_MODE:N,UNDERSCORE_TITLE_MODE:I,METHOD_GUARD:T,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{\"on:begin\":(e,t)=>{t.data._beginMatch=e[1]},\"on:end\":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function M(e,t){\".\"===e.input[e.index-1]&&t.ignoreMatch()}function D(e,t){t&&e.beginKeywords&&(e.begin=\"\\\\b(\"+e.beginKeywords.split(\" \").join(\"|\")+\")(?!\\\\.)(?=\\\\b|\\\\s)\",e.__beforeBegin=M,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function F(e,t){Array.isArray(e.illegal)&&(e.illegal=function(...e){return\"(\"+e.map((e=>p(e))).join(\"|\")+\")\"}(...e.illegal))}function L(e,t){if(e.match){if(e.begin||e.end)throw new Error(\"begin & end are not supported with match\");e.begin=e.match,delete e.match}}function B(e,t){void 0===e.relevance&&(e.relevance=1)}const $=[\"of\",\"and\",\"for\",\"in\",\"not\",\"or\",\"if\",\"then\",\"parent\",\"list\",\"value\"],q=\"keyword\";function U(e,t,n=q){const r={};return\"string\"==typeof e?o(n,e.split(\" \")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,U(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split(\"|\");r[n[0]]=[e,z(n[0],n[1])]}))}}function z(e,t){return t?Number(t):function(e){return $.includes(e.toLowerCase())}(e)?0:1}function V(e,{plugins:t}){function n(t,n){return new RegExp(p(t),\"m\"+(e.case_insensitive?\"i\":\"\")+(n?\"g\":\"\"))}class r{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=n(function(e,t=\"|\"){let n=0;return e.map((e=>{n+=1;const t=n;let r=p(e),o=\"\";for(;r.length>0;){const e=h.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),\"\\\\\"===e[0][0]&&e[1]?o+=\"\\\\\"+String(Number(e[1])+t):(o+=e[0],\"(\"===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class o{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new r;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),\"begin\"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes(\"self\"))throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");return e.classNameAliases=i(e.classNameAliases||{}),function t(r,s){const a=r;if(r.isCompiled)return a;[L].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))),r.__beforeBegin=null,[D,F,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null;if(\"object\"==typeof r.keywords&&(l=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)),r.lexemes&&l)throw new Error(\"ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) \");return l=l||r.lexemes||/\\w+/,a.keywordPatternRe=n(l,!0),s&&(r.begin||(r.begin=/\\B|\\b/),a.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\\B|\\b/),r.end&&(a.endRe=n(r.end)),a.terminatorEnd=p(r.end)||\"\",r.endsWithParent&&s.terminatorEnd&&(a.terminatorEnd+=(r.end?\"|\":\"\")+s.terminatorEnd)),r.illegal&&(a.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return i(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(W(e))return i(e,{starts:e.starts?i(e.starts):null});if(Object.isFrozen(e))return i(e);return e}(\"self\"===e?r:e)}))),r.contains.forEach((function(e){t(e,a)})),r.starts&&t(r.starts,s),a.matcher=function(e){const t=new o;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:\"begin\"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:\"end\"}),e.illegal&&t.addRule(e.illegal,{type:\"illegal\"}),t}(a),a}(e)}function W(e){return!!e&&(e.endsWithParent||W(e.starts))}function J(e){const t={props:[\"language\",\"code\",\"autodetect\"],data:function(){return{detectedLanguage:\"\",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?\"\":\"hljs \"+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language \"${this.language}\" you specified could not be found.`),this.unknownLanguage=!0,s(this.code);let t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||\"\"===e));var e},ignoreIllegals:()=>!0},render(e){return e(\"pre\",{},[e(\"code\",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install(e){e.component(\"highlightjs\",t)}}}}const K={\"after:highlightElement\":({el:e,result:t,text:n})=>{const r=G(e);if(!r.length)return;const o=document.createElement(\"div\");o.innerHTML=t.value,t.value=function(e,t,n){let r=0,o=\"\";const i=[];function a(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset<t[0].offset?e:t:\"start\"===t[0].event?e:t:e.length?e:t}function l(e){function t(e){return\" \"+e.nodeName+'=\"'+s(e.value)+'\"'}o+=\"<\"+H(e)+[].map.call(e.attributes,t).join(\"\")+\">\"}function c(e){o+=\"</\"+H(e)+\">\"}function u(e){(\"start\"===e.event?l:c)(e.node)}for(;e.length||t.length;){let t=a();if(o+=s(n.substring(r,t[0].offset)),r=t[0].offset,t===e){i.reverse().forEach(c);do{u(t.splice(0,1)[0]),t=a()}while(t===e&&t.length&&t[0].offset===r);i.reverse().forEach(l)}else\"start\"===t[0].event?i.push(t[0].node):i.pop(),u(t.splice(0,1)[0])}return o+s(n.substr(r))}(r,G(o),n)}};function H(e){return e.nodeName.toLowerCase()}function G(e){const t=[];return function e(n,r){for(let o=n.firstChild;o;o=o.nextSibling)3===o.nodeType?r+=o.nodeValue.length:1===o.nodeType&&(t.push({event:\"start\",offset:r,node:o}),r=e(o,r),H(o).match(/br|hr|img|input/)||t.push({event:\"stop\",offset:r,node:o}));return r}(e,0),t}const Z={},Y=e=>{console.error(e)},X=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Q=(e,t)=>{Z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Z[`${e}/${t}`]=!0)},ee=s,te=i,ne=Symbol(\"nomatch\");var re=function(e){const t=Object.create(null),r=Object.create(null),s=[];let i=!0;const a=/(^(<[^>]+>|\\t|)+|\\n)/gm,l=\"Could not find the language '{}', did you forget to load/include a language module?\",c={disableAutodetect:!0,name:\"Plain text\",contains:[]};let p={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\\blang(?:uage)?-([\\w-]+)\\b/i,classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:null,__emitter:u};function h(e){return p.noHighlightRe.test(e)}function f(e,t,n,r){let o=\"\",s=\"\";\"object\"==typeof t?(o=e,n=t.ignoreIllegals,s=t.language,r=void 0):(Q(\"10.7.0\",\"highlight(lang, code, ...args) has been deprecated.\"),Q(\"10.7.0\",\"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\"),s=e,o=t);const i={code:o,language:s};O(\"before:highlight\",i);const a=i.result?i.result:d(i.language,i.code,n,r);return a.code=i.code,O(\"after:highlight\",a),a}function d(e,n,r,a){function c(e,t){const n=E.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function u(){null!=j.subLanguage?function(){if(\"\"===A)return;let e=null;if(\"string\"==typeof j.subLanguage){if(!t[j.subLanguage])return void k.addText(A);e=d(j.subLanguage,A,!0,O[j.subLanguage]),O[j.subLanguage]=e.top}else e=m(A,j.subLanguage.length?j.subLanguage:null);j.relevance>0&&(C+=e.relevance),k.addSublanguage(e.emitter,e.language)}():function(){if(!j.keywords)return void k.addText(A);let e=0;j.keywordPatternRe.lastIndex=0;let t=j.keywordPatternRe.exec(A),n=\"\";for(;t;){n+=A.substring(e,t.index);const r=c(j,t);if(r){const[e,o]=r;if(k.addText(n),n=\"\",C+=o,e.startsWith(\"_\"))n+=t[0];else{const n=E.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0];e=j.keywordPatternRe.lastIndex,t=j.keywordPatternRe.exec(A)}n+=A.substr(e),k.addText(n)}(),A=\"\"}function h(e){return e.className&&k.openNode(E.classNameAliases[e.className]||e.className),j=Object.create(e,{parent:{value:j}}),j}function f(e,t,n){let r=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(r){if(e[\"on:end\"]){const n=new o(e);e[\"on:end\"](t,n),n.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return f(e.parent,t,n)}function g(e){return 0===j.matcher.regexIndex?(A+=e[0],1):(I=!0,0)}function y(e){const t=e[0],n=e.rule,r=new o(n),s=[n.__beforeBegin,n[\"on:begin\"]];for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return g(t);return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"),\"m\")),n.skip?A+=t:(n.excludeBegin&&(A+=t),u(),n.returnBegin||n.excludeBegin||(A=t)),h(n),n.returnBegin?0:t.length}function v(e){const t=e[0],r=n.substr(e.index),o=f(j,e,r);if(!o)return ne;const s=j;s.skip?A+=t:(s.returnEnd||s.excludeEnd||(A+=t),u(),s.excludeEnd&&(A=t));do{j.className&&k.closeNode(),j.skip||j.subLanguage||(C+=j.relevance),j=j.parent}while(j!==o.parent);return o.starts&&(o.endSameAsBegin&&(o.starts.endRe=o.endRe),h(o.starts)),s.returnEnd?0:t.length}let b={};function w(t,o){const s=o&&o[0];if(A+=t,null==s)return u(),0;if(\"begin\"===b.type&&\"end\"===o.type&&b.index===o.index&&\"\"===s){if(A+=n.slice(o.index,o.index+1),!i){const t=new Error(\"0 width match regex\");throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=o,\"begin\"===o.type)return y(o);if(\"illegal\"===o.type&&!r){const e=new Error('Illegal lexeme \"'+s+'\" for mode \"'+(j.className||\"<unnamed>\")+'\"');throw e.mode=j,e}if(\"end\"===o.type){const e=v(o);if(e!==ne)return e}if(\"illegal\"===o.type&&\"\"===s)return 1;if(N>1e5&&N>3*o.index){throw new Error(\"potential infinite loop, way more iterations than matches\")}return A+=s,s.length}const E=S(e);if(!E)throw Y(l.replace(\"{}\",e)),new Error('Unknown language: \"'+e+'\"');const x=V(E,{plugins:s});let _=\"\",j=a||x;const O={},k=new p.__emitter(p);!function(){const e=[];for(let t=j;t!==E;t=t.parent)t.className&&e.unshift(t.className);e.forEach((e=>k.openNode(e)))}();let A=\"\",C=0,P=0,N=0,I=!1;try{for(j.matcher.considerAll();;){N++,I?I=!1:j.matcher.considerAll(),j.matcher.lastIndex=P;const e=j.matcher.exec(n);if(!e)break;const t=w(n.substring(P,e.index),e);P=e.index+t}return w(n.substr(P)),k.closeAllNodes(),k.finalize(),_=k.toHTML(),{relevance:Math.floor(C),value:_,language:e,illegal:!1,emitter:k,top:j}}catch(t){if(t.message&&t.message.includes(\"Illegal\"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(P-100,P+100),mode:t.mode},sofar:_,relevance:0,value:ee(n),emitter:k};if(i)return{illegal:!1,relevance:0,value:ee(n),emitter:k,language:e,top:j,errorRaised:t};throw t}}function m(e,n){n=n||p.languages||Object.keys(t);const r=function(e){const t={relevance:0,emitter:new p.__emitter(p),value:ee(e),illegal:!1,top:c};return t.emitter.addText(e),t}(e),o=n.filter(S).filter(j).map((t=>d(t,e,!1)));o.unshift(r);const s=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(S(e.language).supersetOf===t.language)return 1;if(S(t.language).supersetOf===e.language)return-1}return 0})),[i,a]=s,l=i;return l.second_best=a,l}const g={\"before:highlightElement\":({el:e})=>{p.useBR&&(e.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ /]*>/g,\"\\n\"))},\"after:highlightElement\":({result:e})=>{p.useBR&&(e.value=e.value.replace(/\\n/g,\"<br>\"))}},y=/^(<[^>]+>|\\t)+/gm,v={\"after:highlightElement\":({result:e})=>{p.tabReplace&&(e.value=e.value.replace(y,(e=>e.replace(/\\t/g,p.tabReplace))))}};function b(e){let t=null;const n=function(e){let t=e.className+\" \";t+=e.parentNode?e.parentNode.className:\"\";const n=p.languageDetectRe.exec(t);if(n){const t=S(n[1]);return t||(X(l.replace(\"{}\",n[1])),X(\"Falling back to no-highlight mode for this block.\",e)),t?n[1]:\"no-highlight\"}return t.split(/\\s+/).find((e=>h(e)||S(e)))}(e);if(h(n))return;O(\"before:highlightElement\",{el:e,language:n}),t=e;const o=t.textContent,s=n?f(o,{language:n,ignoreIllegals:!0}):m(o);O(\"after:highlightElement\",{el:e,result:s,text:o}),e.innerHTML=s.value,function(e,t,n){const o=t?r[t]:n;e.classList.add(\"hljs\"),o&&e.classList.add(o)}(e,n,s.language),e.result={language:s.language,re:s.relevance,relavance:s.relevance},s.second_best&&(e.second_best={language:s.second_best.language,re:s.second_best.relevance,relavance:s.second_best.relevance})}const w=()=>{if(w.called)return;w.called=!0,Q(\"10.6.0\",\"initHighlighting() is deprecated.  Use highlightAll() instead.\");document.querySelectorAll(\"pre code\").forEach(b)};let E=!1;function x(){if(\"loading\"===document.readyState)return void(E=!0);document.querySelectorAll(\"pre code\").forEach(b)}function S(e){return e=(e||\"\").toLowerCase(),t[e]||t[r[e]]}function _(e,{languageName:t}){\"string\"==typeof e&&(e=[e]),e.forEach((e=>{r[e.toLowerCase()]=t}))}function j(e){const t=S(e);return t&&!t.disableAutodetect}function O(e,t){const n=e;s.forEach((function(e){e[n]&&e[n](t)}))}\"undefined\"!=typeof window&&window.addEventListener&&window.addEventListener(\"DOMContentLoaded\",(function(){E&&x()}),!1),Object.assign(e,{highlight:f,highlightAuto:m,highlightAll:x,fixMarkup:function(e){return Q(\"10.2.0\",\"fixMarkup will be removed entirely in v11.0\"),Q(\"10.2.0\",\"Please see https://github.com/highlightjs/highlight.js/issues/2534\"),t=e,p.tabReplace||p.useBR?t.replace(a,(e=>\"\\n\"===e?p.useBR?\"<br>\":e:p.tabReplace?e.replace(/\\t/g,p.tabReplace):e)):t;var t},highlightElement:b,highlightBlock:function(e){return Q(\"10.7.0\",\"highlightBlock will be removed entirely in v12.0\"),Q(\"10.7.0\",\"Please use highlightElement now.\"),b(e)},configure:function(e){e.useBR&&(Q(\"10.3.0\",\"'useBR' will be removed entirely in v11.0\"),Q(\"10.3.0\",\"Please see https://github.com/highlightjs/highlight.js/issues/2559\")),p=te(p,e)},initHighlighting:w,initHighlightingOnLoad:function(){Q(\"10.6.0\",\"initHighlightingOnLoad() is deprecated.  Use highlightAll() instead.\"),E=!0},registerLanguage:function(n,r){let o=null;try{o=r(e)}catch(e){if(Y(\"Language definition for '{}' could not be registered.\".replace(\"{}\",n)),!i)throw e;Y(e),o=c}o.name||(o.name=n),t[n]=o,o.rawDefinition=r.bind(null,e),o.aliases&&_(o.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const t of Object.keys(r))r[t]===e&&delete r[t]},listLanguages:function(){return Object.keys(t)},getLanguage:S,registerAliases:_,requireLanguage:function(e){Q(\"10.4.0\",\"requireLanguage will be removed entirely in v11.\"),Q(\"10.4.0\",\"Please see https://github.com/highlightjs/highlight.js/pull/2844\");const t=S(e);if(t)return t;throw new Error(\"The '{}' language is required, but not loaded.\".replace(\"{}\",e))},autoDetection:j,inherit:te,addPlugin:function(e){!function(e){e[\"before:highlightBlock\"]&&!e[\"before:highlightElement\"]&&(e[\"before:highlightElement\"]=t=>{e[\"before:highlightBlock\"](Object.assign({block:t.el},t))}),e[\"after:highlightBlock\"]&&!e[\"after:highlightElement\"]&&(e[\"after:highlightElement\"]=t=>{e[\"after:highlightBlock\"](Object.assign({block:t.el},t))})}(e),s.push(e)},vuePlugin:J(e).VuePlugin}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString=\"10.7.3\";for(const e in R)\"object\"==typeof R[e]&&n(R[e]);return Object.assign(e,R),e.addPlugin(g),e.addPlugin(K),e.addPlugin(v),e}({});e.exports=re},61519:e=>{function t(...e){return e.map((e=>{return(t=e)?\"string\"==typeof t?t:t.source:null;var t})).join(\"\")}e.exports=function(e){const n={},r={begin:/\\$\\{/,end:/\\}/,contains:[\"self\",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:\"variable\",variants:[{begin:t(/\\$[\\w\\d#@][\\w\\d_]*/,\"(?![\\\\w\\\\d])(?![$])\")},r]});const o={className:\"subst\",begin:/\\$\\(/,end:/\\)/,contains:[e.BACKSLASH_ESCAPE]},s={begin:/<<-?\\s*(?=\\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\\w+)/,end:/(\\w+)/,className:\"string\"})]}},i={className:\"string\",begin:/\"/,end:/\"/,contains:[e.BACKSLASH_ESCAPE,n,o]};o.contains.push(i);const a={begin:/\\$\\(\\(/,end:/\\)\\)/,contains:[{begin:/\\d+#[0-9a-f]+/,className:\"number\"},e.NUMBER_MODE,n]},l=e.SHEBANG({binary:`(${[\"fish\",\"bash\",\"zsh\",\"sh\",\"csh\",\"ksh\",\"tcsh\",\"dash\",\"scsh\"].join(\"|\")})`,relevance:10}),c={className:\"function\",begin:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\\w[\\w\\d_]*/})],relevance:0};return{name:\"Bash\",aliases:[\"sh\",\"zsh\"],keywords:{$pattern:/\\b[a-z._-]+\\b/,keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\"},contains:[l,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,s,i,{className:\"\",begin:/\\\\\"/},{className:\"string\",begin:/'/,end:/'/},n]}}},30786:e=>{function t(...e){return e.map((e=>{return(t=e)?\"string\"==typeof t?t:t.source:null;var t})).join(\"\")}e.exports=function(e){const n=\"HTTP/(2|1\\\\.[01])\",r={className:\"attribute\",begin:t(\"^\",/[A-Za-z][A-Za-z0-9-]*/,\"(?=\\\\:\\\\s)\"),starts:{contains:[{className:\"punctuation\",begin:/: /,relevance:0,starts:{end:\"$\",relevance:0}}]}},o=[r,{begin:\"\\\\n\\\\n\",starts:{subLanguage:[],endsWithParent:!0}}];return{name:\"HTTP\",aliases:[\"https\"],illegal:/\\S/,contains:[{begin:\"^(?=\"+n+\" \\\\d{3})\",end:/$/,contains:[{className:\"meta\",begin:n},{className:\"number\",begin:\"\\\\b\\\\d{3}\\\\b\"}],starts:{end:/\\b\\B/,illegal:/\\S/,contains:o}},{begin:\"(?=^[A-Z]+ (.*?) \"+n+\"$)\",end:/$/,contains:[{className:\"string\",begin:\" \",end:\" \",excludeBegin:!0,excludeEnd:!0},{className:\"meta\",begin:n},{className:\"keyword\",begin:\"[A-Z]+\"}],starts:{end:/\\b\\B/,illegal:/\\S/,contains:o}},e.inherit(r,{relevance:0})]}}},96344:e=>{const t=\"[A-Za-z$_][0-9A-Za-z$_]*\",n=[\"as\",\"in\",\"of\",\"if\",\"for\",\"while\",\"finally\",\"var\",\"new\",\"function\",\"do\",\"return\",\"void\",\"else\",\"break\",\"catch\",\"instanceof\",\"with\",\"throw\",\"case\",\"default\",\"try\",\"switch\",\"continue\",\"typeof\",\"delete\",\"let\",\"yield\",\"const\",\"class\",\"debugger\",\"async\",\"await\",\"static\",\"import\",\"from\",\"export\",\"extends\"],r=[\"true\",\"false\",\"null\",\"undefined\",\"NaN\",\"Infinity\"],o=[].concat([\"setInterval\",\"setTimeout\",\"clearInterval\",\"clearTimeout\",\"require\",\"exports\",\"eval\",\"isFinite\",\"isNaN\",\"parseFloat\",\"parseInt\",\"decodeURI\",\"decodeURIComponent\",\"encodeURI\",\"encodeURIComponent\",\"escape\",\"unescape\"],[\"arguments\",\"this\",\"super\",\"console\",\"window\",\"document\",\"localStorage\",\"module\",\"global\"],[\"Intl\",\"DataView\",\"Number\",\"Math\",\"Date\",\"String\",\"RegExp\",\"Object\",\"Function\",\"Boolean\",\"Error\",\"Symbol\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\",\"Proxy\",\"Reflect\",\"JSON\",\"Promise\",\"Float64Array\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Uint16Array\",\"Uint32Array\",\"Float32Array\",\"Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"ArrayBuffer\",\"BigInt64Array\",\"BigUint64Array\",\"BigInt\"],[\"EvalError\",\"InternalError\",\"RangeError\",\"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\"]);function s(e){return i(\"(?=\",e,\")\")}function i(...e){return e.map((e=>{return(t=e)?\"string\"==typeof t?t:t.source:null;var t})).join(\"\")}e.exports=function(e){const a=t,l=\"<>\",c=\"</>\",u={begin:/<[A-Za-z0-9\\\\._:-]+/,end:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];\"<\"!==r?\">\"===r&&(((e,{after:t})=>{const n=\"</\"+e[0].slice(1);return-1!==e.input.indexOf(n,t)})(e,{after:n})||t.ignoreMatch()):t.ignoreMatch()}},p={$pattern:t,keyword:n,literal:r,built_in:o},h=\"[0-9](_?[0-9])*\",f=`\\\\.(${h})`,d=\"0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*\",m={className:\"number\",variants:[{begin:`(\\\\b(${d})((${f})|\\\\.)?|(${f}))[eE][+-]?(${h})\\\\b`},{begin:`\\\\b(${d})\\\\b((${f})\\\\b|\\\\.)?|(${f})\\\\b`},{begin:\"\\\\b(0|[1-9](_?[0-9])*)n\\\\b\"},{begin:\"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\"},{begin:\"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\"},{begin:\"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\"},{begin:\"\\\\b0[0-7]+n?\\\\b\"}],relevance:0},g={className:\"subst\",begin:\"\\\\$\\\\{\",end:\"\\\\}\",keywords:p,contains:[]},y={begin:\"html`\",end:\"\",starts:{end:\"`\",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:\"xml\"}},v={begin:\"css`\",end:\"\",starts:{end:\"`\",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:\"css\"}},b={className:\"string\",begin:\"`\",end:\"`\",contains:[e.BACKSLASH_ESCAPE,g]},w={className:\"comment\",variants:[e.COMMENT(/\\/\\*\\*(?!\\/)/,\"\\\\*/\",{relevance:0,contains:[{className:\"doctag\",begin:\"@[A-Za-z]+\",contains:[{className:\"type\",begin:\"\\\\{\",end:\"\\\\}\",relevance:0},{className:\"variable\",begin:a+\"(?=\\\\s*(-)|$)\",endsParent:!0,relevance:0},{begin:/(?=[^\\n])\\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},E=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,y,v,b,m,e.REGEXP_MODE];g.contains=E.concat({begin:/\\{/,end:/\\}/,keywords:p,contains:[\"self\"].concat(E)});const x=[].concat(w,g.contains),S=x.concat([{begin:/\\(/,end:/\\)/,keywords:p,contains:[\"self\"].concat(x)}]),_={className:\"params\",begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:S};return{name:\"Javascript\",aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],keywords:p,exports:{PARAMS_CONTAINS:S},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:\"shebang\",binary:\"node\",relevance:5}),{label:\"use_strict\",className:\"meta\",relevance:10,begin:/^\\s*['\"]use (strict|asm)['\"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,y,v,b,w,m,{begin:i(/[{,\\n]\\s*/,s(i(/(((\\/\\/.*$)|(\\/\\*(\\*[^/]|[^*])*\\*\\/))\\s*)*/,a+\"\\\\s*:\"))),relevance:0,contains:[{className:\"attr\",begin:a+s(\"\\\\s*:\"),relevance:0}]},{begin:\"(\"+e.RE_STARTERS_RE+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",keywords:\"return throw case\",contains:[w,e.REGEXP_MODE,{className:\"function\",begin:\"(\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)|\"+e.UNDERSCORE_IDENT_RE+\")\\\\s*=>\",returnBegin:!0,end:\"\\\\s*=>\",contains:[{className:\"params\",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:S}]}]},{begin:/,/,relevance:0},{className:\"\",begin:/\\s/,end:/\\s*/,skip:!0},{variants:[{begin:l,end:c},{begin:u.begin,\"on:begin\":u.isTrulyOpeningTag,end:u.end}],subLanguage:\"xml\",contains:[{begin:u.begin,end:u.end,skip:!0,contains:[\"self\"]}]}],relevance:0},{className:\"function\",beginKeywords:\"function\",end:/[{;]/,excludeEnd:!0,keywords:p,contains:[\"self\",e.inherit(e.TITLE_MODE,{begin:a}),_],illegal:/%/},{beginKeywords:\"while if switch catch for\"},{className:\"function\",begin:e.UNDERSCORE_IDENT_RE+\"\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)\\\\s*\\\\{\",returnBegin:!0,contains:[_,e.inherit(e.TITLE_MODE,{begin:a})]},{variants:[{begin:\"\\\\.\"+a},{begin:\"\\\\$\"+a}],relevance:0},{className:\"class\",beginKeywords:\"class\",end:/[{;=]/,excludeEnd:!0,illegal:/[:\"[\\]]/,contains:[{beginKeywords:\"extends\"},e.UNDERSCORE_TITLE_MODE]},{begin:/\\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:a}),\"self\",_]},{begin:\"(get|set)\\\\s+(?=\"+a+\"\\\\()\",end:/\\{/,keywords:\"get set\",contains:[e.inherit(e.TITLE_MODE,{begin:a}),{begin:/\\(\\)/},_]},{begin:/\\$[(.]/}]}}},82026:e=>{e.exports=function(e){const t={literal:\"true false null\"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],o={end:\",\",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},s={begin:/\\{/,end:/\\}/,contains:[{className:\"attr\",begin:/\"/,end:/\"/,contains:[e.BACKSLASH_ESCAPE],illegal:\"\\\\n\"},e.inherit(o,{begin:/:/})].concat(n),illegal:\"\\\\S\"},i={begin:\"\\\\[\",end:\"\\\\]\",contains:[e.inherit(o)],illegal:\"\\\\S\"};return r.push(s,i),n.forEach((function(e){r.push(e)})),{name:\"JSON\",contains:r,keywords:t,illegal:\"\\\\S\"}}},66336:e=>{e.exports=function(e){const t={$pattern:/-?[A-z\\.\\-]+\\b/,keyword:\"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter\",built_in:\"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write\"},n={begin:\"`[\\\\s\\\\S]\",relevance:0},r={className:\"variable\",variants:[{begin:/\\$\\B/},{className:\"keyword\",begin:/\\$this/},{begin:/\\$[\\w\\d][\\w\\d_:]*/}]},o={className:\"string\",variants:[{begin:/\"/,end:/\"/},{begin:/@\"/,end:/^\"@/}],contains:[n,r,{className:\"variable\",begin:/\\$[A-z]/,end:/[^A-z]/}]},s={className:\"string\",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},i=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:\"doctag\",variants:[{begin:/\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/}]}]}),a={className:\"built_in\",variants:[{begin:\"(\".concat(\"Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where\",\")+(-)[\\\\w\\\\d]+\")}]},l={className:\"class\",beginKeywords:\"class enum\",end:/\\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},c={className:\"function\",begin:/function\\s+/,end:/\\s*\\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:\"function\",relevance:0,className:\"keyword\"},{className:\"title\",begin:/\\w[\\w\\d]*((-)[\\w\\d]+)*/,relevance:0},{begin:/\\(/,end:/\\)/,className:\"params\",relevance:0,contains:[r]}]},u={begin:/using\\s/,end:/$/,returnBegin:!0,contains:[o,s,{className:\"keyword\",begin:/(using|assembly|command|module|namespace|type)/}]},p={variants:[{className:\"operator\",begin:\"(\".concat(\"-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor\",\")\\\\b\")},{className:\"literal\",begin:/(-)[\\w\\d]+/,relevance:0}]},h={className:\"function\",begin:/\\[.*\\]\\s*[\\w]+[ ]??\\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:\"keyword\",begin:\"(\".concat(t.keyword.toString().replace(/\\s/g,\"|\"),\")\\\\b\"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},f=[h,i,n,e.NUMBER_MODE,o,s,a,r,{className:\"literal\",begin:/\\$(null|true|false)\\b/},{className:\"selector-tag\",begin:/@\\B/,relevance:0}],d={begin:/\\[/,end:/\\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat(\"self\",f,{begin:\"(\"+[\"string\",\"char\",\"byte\",\"int\",\"long\",\"bool\",\"decimal\",\"single\",\"double\",\"DateTime\",\"xml\",\"array\",\"hashtable\",\"void\"].join(\"|\")+\")\",className:\"built_in\",relevance:0},{className:\"type\",begin:/[\\.\\w\\d]+/,relevance:0})};return h.contains.unshift(d),{name:\"PowerShell\",aliases:[\"ps\",\"ps1\"],case_insensitive:!0,keywords:t,contains:f.concat(l,c,u,p,d)}}},42157:e=>{function t(e){return e?\"string\"==typeof e?e:e.source:null}function n(e){return r(\"(?=\",e,\")\")}function r(...e){return e.map((e=>t(e))).join(\"\")}function o(...e){return\"(\"+e.map((e=>t(e))).join(\"|\")+\")\"}e.exports=function(e){const t=r(/[A-Z_]/,r(\"(\",/[A-Z0-9_.-]*:/,\")?\"),/[A-Z0-9_.-]*/),s={className:\"symbol\",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\\s/,contains:[{className:\"meta-keyword\",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\\n/}]},a=e.inherit(i,{begin:/\\(/,end:/\\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:\"meta-string\"}),c=e.inherit(e.QUOTE_STRING_MODE,{className:\"meta-string\"}),u={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:\"attr\",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\\s*/,relevance:0,contains:[{className:\"string\",endsParent:!0,variants:[{begin:/\"/,end:/\"/,contains:[s]},{begin:/'/,end:/'/,contains:[s]},{begin:/[^\\s\"'=<>`]+/}]}]}]};return{name:\"HTML, XML\",aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\",\"wsf\",\"svg\"],case_insensitive:!0,contains:[{className:\"meta\",begin:/<![a-z]/,end:/>/,relevance:10,contains:[i,c,l,a,{begin:/\\[/,end:/\\]/,contains:[{className:\"meta\",begin:/<![a-z]/,end:/>/,contains:[i,a,c,l]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\\[CDATA\\[/,end:/\\]\\]>/,relevance:10},s,{className:\"meta\",begin:/<\\?xml/,end:/\\?>/,relevance:10},{className:\"tag\",begin:/<style(?=\\s|>)/,end:/>/,keywords:{name:\"style\"},contains:[u],starts:{end:/<\\/style>/,returnEnd:!0,subLanguage:[\"css\",\"xml\"]}},{className:\"tag\",begin:/<script(?=\\s|>)/,end:/>/,keywords:{name:\"script\"},contains:[u],starts:{end:/<\\/script>/,returnEnd:!0,subLanguage:[\"javascript\",\"handlebars\",\"xml\"]}},{className:\"tag\",begin:/<>|<\\/>/},{className:\"tag\",begin:r(/</,n(r(t,o(/\\/>/,/>/,/\\s/)))),end:/\\/?>/,contains:[{className:\"name\",begin:t,relevance:0,starts:u}]},{className:\"tag\",begin:r(/<\\//,n(r(t,/>/))),contains:[{className:\"name\",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:e=>{e.exports=function(e){var t=\"true false yes no null\",n=\"[\\\\w#;/?:@&=+$,.~*'()[\\\\]]+\",r={className:\"string\",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/\\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:\"template-variable\",variants:[{begin:/\\{\\{/,end:/\\}\\}/},{begin:/%\\{/,end:/\\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/[^\\s,{}[\\]]+/}]}),s={className:\"number\",begin:\"\\\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\\\.[0-9]*)?([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\\\b\"},i={end:\",\",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},a={begin:/\\{/,end:/\\}/,contains:[i],illegal:\"\\\\n\",relevance:0},l={begin:\"\\\\[\",end:\"\\\\]\",contains:[i],illegal:\"\\\\n\",relevance:0},c=[{className:\"attr\",variants:[{begin:\"\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)\"},{begin:'\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)'},{begin:\"'\\\\w[\\\\w :\\\\/.-]*':(?=[ \\t]|$)\"}]},{className:\"meta\",begin:\"^---\\\\s*$\",relevance:10},{className:\"string\",begin:\"[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*\"},{begin:\"<%[%=-]?\",end:\"[%-]?%>\",subLanguage:\"ruby\",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:\"type\",begin:\"!\\\\w+!\"+n},{className:\"type\",begin:\"!<\"+n+\">\"},{className:\"type\",begin:\"!\"+n},{className:\"type\",begin:\"!!\"+n},{className:\"meta\",begin:\"&\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"meta\",begin:\"\\\\*\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"bullet\",begin:\"-(?=[ ]|$)\",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},s,{className:\"number\",begin:e.C_NUMBER_RE+\"\\\\b\",relevance:0},a,l,r],u=[...c];return u.pop(),u.push(o),i.contains=u,{name:\"YAML\",case_insensitive:!0,aliases:[\"yml\"],contains:c}}},8679:(e,t,n)=>{\"use strict\";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},s={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},a={};function l(e){return r.isMemo(e)?i:a[e.$$typeof]||o}a[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},a[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,h=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(t,n,r){if(\"string\"!=typeof n){if(d){var o=f(n);o&&o!==d&&e(t,o,r)}var i=u(n);p&&(i=i.concat(p(n)));for(var a=l(t),m=l(n),g=0;g<i.length;++g){var y=i[g];if(!(s[y]||r&&r[y]||m&&m[y]||a&&a[y])){var v=h(n,y);try{c(t,y,v)}catch(e){}}}}return t}},80645:(e,t)=>{t.read=function(e,t,n,r,o){var s,i,a=8*o-r-1,l=(1<<a)-1,c=l>>1,u=-7,p=n?o-1:0,h=n?-1:1,f=e[t+p];for(p+=h,s=f&(1<<-u)-1,f>>=-u,u+=a;u>0;s=256*s+e[t+p],p+=h,u-=8);for(i=s&(1<<-u)-1,s>>=-u,u+=r;u>0;i=256*i+e[t+p],p+=h,u-=8);if(0===s)s=1-c;else{if(s===l)return i?NaN:1/0*(f?-1:1);i+=Math.pow(2,r),s-=c}return(f?-1:1)*i*Math.pow(2,s-r)},t.write=function(e,t,n,r,o,s){var i,a,l,c=8*s-o-1,u=(1<<c)-1,p=u>>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:s-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+p>=1?h/l:h*Math.pow(2,1-p))*l>=2&&(i++,l/=2),i+p>=u?(a=0,i=u):i+p>=1?(a=(t*l-1)*Math.pow(2,o),i+=p):(a=t*Math.pow(2,p-1)*Math.pow(2,o),i=0));o>=8;e[n+f]=255&a,f+=d,a/=256,o-=8);for(i=i<<o|a,c+=o;c>0;e[n+f]=255&i,f+=d,i/=256,c-=8);e[n+f-d]|=128*m}},43393:function(e){e.exports=function(){\"use strict\";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:K(e)}function r(e){return a(e)?e:H(e)}function o(e){return l(e)?e:G(e)}function s(e){return i(e)&&!c(e)?e:Z(e)}function i(e){return!(!e||!e[p])}function a(e){return!(!e||!e[h])}function l(e){return!(!e||!e[f])}function c(e){return a(e)||l(e)}function u(e){return!(!e||!e[d])}t(r,n),t(o,n),t(s,n),n.isIterable=i,n.isKeyed=a,n.isIndexed=l,n.isAssociative=c,n.isOrdered=u,n.Keyed=r,n.Indexed=o,n.Set=s;var p=\"@@__IMMUTABLE_ITERABLE__@@\",h=\"@@__IMMUTABLE_KEYED__@@\",f=\"@@__IMMUTABLE_INDEXED__@@\",d=\"@@__IMMUTABLE_ORDERED__@@\",m=\"delete\",g=5,y=1<<g,v=y-1,b={},w={value:!1},E={value:!1};function x(e){return e.value=!1,e}function S(e){e&&(e.value=!0)}function _(){}function j(e,t){t=t||0;for(var n=Math.max(0,e.length-t),r=new Array(n),o=0;o<n;o++)r[o]=e[o+t];return r}function O(e){return void 0===e.size&&(e.size=e.__iterate(A)),e.size}function k(e,t){if(\"number\"!=typeof t){var n=t>>>0;if(\"\"+n!==t||4294967295===n)return NaN;t=n}return t<0?O(e)+t:t}function A(){return!0}function C(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function P(e,t){return I(e,t,0)}function N(e,t){return I(e,t,t)}function I(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var T=0,R=1,M=2,D=\"function\"==typeof Symbol&&Symbol.iterator,F=\"@@iterator\",L=D||F;function B(e){this.next=e}function $(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function q(){return{value:void 0,done:!0}}function U(e){return!!W(e)}function z(e){return e&&\"function\"==typeof e.next}function V(e){var t=W(e);return t&&t.call(e)}function W(e){var t=e&&(D&&e[D]||e[F]);if(\"function\"==typeof t)return t}function J(e){return e&&\"number\"==typeof e.length}function K(e){return null==e?ie():i(e)?e.toSeq():ce(e)}function H(e){return null==e?ie().toKeyedSeq():i(e)?a(e)?e.toSeq():e.fromEntrySeq():ae(e)}function G(e){return null==e?ie():i(e)?a(e)?e.entrySeq():e.toIndexedSeq():le(e)}function Z(e){return(null==e?ie():i(e)?a(e)?e.entrySeq():e:le(e)).toSetSeq()}B.prototype.toString=function(){return\"[Iterator]\"},B.KEYS=T,B.VALUES=R,B.ENTRIES=M,B.prototype.inspect=B.prototype.toSource=function(){return this.toString()},B.prototype[L]=function(){return this},t(K,n),K.of=function(){return K(arguments)},K.prototype.toSeq=function(){return this},K.prototype.toString=function(){return this.__toString(\"Seq {\",\"}\")},K.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},K.prototype.__iterate=function(e,t){return pe(this,e,t,!0)},K.prototype.__iterator=function(e,t){return he(this,e,t,!0)},t(H,K),H.prototype.toKeyedSeq=function(){return this},t(G,K),G.of=function(){return G(arguments)},G.prototype.toIndexedSeq=function(){return this},G.prototype.toString=function(){return this.__toString(\"Seq [\",\"]\")},G.prototype.__iterate=function(e,t){return pe(this,e,t,!1)},G.prototype.__iterator=function(e,t){return he(this,e,t,!1)},t(Z,K),Z.of=function(){return Z(arguments)},Z.prototype.toSetSeq=function(){return this},K.isSeq=se,K.Keyed=H,K.Set=Z,K.Indexed=G;var Y,X,Q,ee=\"@@__IMMUTABLE_SEQ__@@\";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function se(e){return!(!e||!e[ee])}function ie(){return Y||(Y=new te([]))}function ae(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():z(e)?new oe(e).fromEntrySeq():U(e)?new re(e).fromEntrySeq():\"object\"==typeof e?new ne(e):void 0;if(!t)throw new TypeError(\"Expected Array or iterable object of [k, v] entries, or keyed object: \"+e);return t}function le(e){var t=ue(e);if(!t)throw new TypeError(\"Expected Array or iterable object of values: \"+e);return t}function ce(e){var t=ue(e)||\"object\"==typeof e&&new ne(e);if(!t)throw new TypeError(\"Expected Array or iterable object of values, or keyed object: \"+e);return t}function ue(e){return J(e)?new te(e):z(e)?new oe(e):U(e)?new re(e):void 0}function pe(e,t,n,r){var o=e._cache;if(o){for(var s=o.length-1,i=0;i<=s;i++){var a=o[n?s-i:i];if(!1===t(a[1],r?a[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function he(e,t,n,r){var o=e._cache;if(o){var s=o.length-1,i=0;return new B((function(){var e=o[n?s-i:i];return i++>s?q():$(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function fe(e,t){return t?de(t,e,\"\",{\"\":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,G(t).map((function(n,r){return de(e,n,r,t)}))):ge(t)?e.call(r,n,H(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?G(e).map(me).toList():ge(e)?H(e).map(me).toMap():e}function ge(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ye(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if(\"function\"==typeof e.valueOf&&\"function\"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!(\"function\"!=typeof e.equals||\"function\"!=typeof t.equals||!e.equals(t))}function ve(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||a(e)!==a(t)||l(e)!==l(t)||u(e)!==u(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!c(e);if(u(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ye(o[1],e)&&(n||ye(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)\"function\"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var s=e;e=t,t=s}var p=!0,h=t.__iterate((function(t,r){if(n?!e.has(t):o?!ye(t,e.get(r,b)):!ye(e.get(r,b),t))return p=!1,!1}));return p&&e.size===h}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(X)return X;X=this}}function we(e,t){if(!e)throw new Error(t)}function Ee(e,t,n){if(!(this instanceof Ee))return new Ee(e,t,n);if(we(0!==n,\"Cannot step a Range by 0\"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),t<e&&(n=-n),this._start=e,this._end=t,this._step=n,this.size=Math.max(0,Math.ceil((t-e)/n-1)+1),0===this.size){if(Q)return Q;Q=this}}function xe(){throw TypeError(\"Abstract\")}function Se(){}function _e(){}function je(){}K.prototype[ee]=!0,t(te,G),te.prototype.get=function(e,t){return this.has(e)?this._array[k(this,e)]:t},te.prototype.__iterate=function(e,t){for(var n=this._array,r=n.length-1,o=0;o<=r;o++)if(!1===e(n[t?r-o:o],o,this))return o+1;return o},te.prototype.__iterator=function(e,t){var n=this._array,r=n.length-1,o=0;return new B((function(){return o>r?q():$(e,o,n[t?r-o++:o++])}))},t(ne,H),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,s=0;s<=o;s++){var i=r[t?o-s:s];if(!1===e(n[i],i,this))return s+1}return s},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,s=0;return new B((function(){var i=r[t?o-s:s];return s++>o?q():$(e,i,n[i])}))},ne.prototype[d]=!0,t(re,G),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=V(this._iterable),r=0;if(z(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=V(this._iterable);if(!z(n))return new B(q);var r=0;return new B((function(){var t=n.next();return t.done?t:$(e,r++,t.value)}))},t(oe,G),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,s=0;s<o.length;)if(!1===e(o[s],s++,this))return s;for(;!(n=r.next()).done;){var i=n.value;if(o[s]=i,!1===e(i,s++,this))break}return s},oe.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=this._iterator,r=this._iteratorCache,o=0;return new B((function(){if(o>=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return $(e,o,r[o++])}))},t(be,G),be.prototype.toString=function(){return 0===this.size?\"Repeat []\":\"Repeat [ \"+this._value+\" \"+this.size+\" times ]\"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ye(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return C(e,t,n)?this:new be(this._value,N(t,n)-P(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ye(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ye(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n<this.size;n++)if(!1===e(this._value,n,this))return n+1;return n},be.prototype.__iterator=function(e,t){var n=this,r=0;return new B((function(){return r<n.size?$(e,r++,n._value):q()}))},be.prototype.equals=function(e){return e instanceof be?ye(this._value,e._value):ve(e)},t(Ee,G),Ee.prototype.toString=function(){return 0===this.size?\"Range []\":\"Range [ \"+this._start+\"...\"+this._end+(1!==this._step?\" by \"+this._step:\"\")+\" ]\"},Ee.prototype.get=function(e,t){return this.has(e)?this._start+k(this,e)*this._step:t},Ee.prototype.includes=function(e){var t=(e-this._start)/this._step;return t>=0&&t<this.size&&t===Math.floor(t)},Ee.prototype.slice=function(e,t){return C(e,t,this.size)?this:(e=P(e,this.size),(t=N(t,this.size))<=e?new Ee(0,0):new Ee(this.get(e,this._end),this.get(t,this._end),this._step))},Ee.prototype.indexOf=function(e){var t=e-this._start;if(t%this._step==0){var n=t/this._step;if(n>=0&&n<this.size)return n}return-1},Ee.prototype.lastIndexOf=function(e){return this.indexOf(e)},Ee.prototype.__iterate=function(e,t){for(var n=this.size-1,r=this._step,o=t?this._start+n*r:this._start,s=0;s<=n;s++){if(!1===e(o,s,this))return s+1;o+=t?-r:r}return s},Ee.prototype.__iterator=function(e,t){var n=this.size-1,r=this._step,o=t?this._start+n*r:this._start,s=0;return new B((function(){var i=o;return o+=t?-r:r,s>n?q():$(e,s++,i)}))},Ee.prototype.equals=function(e){return e instanceof Ee?this._start===e._start&&this._end===e._end&&this._step===e._step:ve(this,e)},t(xe,n),t(Se,xe),t(_e,xe),t(je,xe),xe.Keyed=Se,xe.Indexed=_e,xe.Set=je;var Oe=\"function\"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function ke(e){return e>>>1&1073741824|3221225471&e}function Ae(e){if(!1===e||null==e)return 0;if(\"function\"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if(\"number\"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return ke(n)}if(\"string\"===t)return e.length>Be?Ce(e):Pe(e);if(\"function\"==typeof e.hashCode)return e.hashCode();if(\"object\"===t)return Ne(e);if(\"function\"==typeof e.toString)return Pe(e.toString());throw new Error(\"Value type \"+t+\" cannot be hashed.\")}function Ce(e){var t=Ue[e];return void 0===t&&(t=Pe(e),qe===$e&&(qe=0,Ue={}),qe++,Ue[e]=t),t}function Pe(e){for(var t=0,n=0;n<e.length;n++)t=31*t+e.charCodeAt(n)|0;return ke(t)}function Ne(e){var t;if(De&&void 0!==(t=Me.get(e)))return t;if(void 0!==(t=e[Le]))return t;if(!Te){if(void 0!==(t=e.propertyIsEnumerable&&e.propertyIsEnumerable[Le]))return t;if(void 0!==(t=Re(e)))return t}if(t=++Fe,1073741824&Fe&&(Fe=0),De)Me.set(e,t);else{if(void 0!==Ie&&!1===Ie(e))throw new Error(\"Non-extensible objects are not allowed as keys.\");if(Te)Object.defineProperty(e,Le,{enumerable:!1,configurable:!1,writable:!1,value:t});else if(void 0!==e.propertyIsEnumerable&&e.propertyIsEnumerable===e.constructor.prototype.propertyIsEnumerable)e.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},e.propertyIsEnumerable[Le]=t;else{if(void 0===e.nodeType)throw new Error(\"Unable to set a non-enumerable property on object.\");e[Le]=t}}return t}var Ie=Object.isExtensible,Te=function(){try{return Object.defineProperty({},\"@\",{}),!0}catch(e){return!1}}();function Re(e){if(e&&e.nodeType>0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Me,De=\"function\"==typeof WeakMap;De&&(Me=new WeakMap);var Fe=0,Le=\"__immutablehash__\";\"function\"==typeof Symbol&&(Le=Symbol(Le));var Be=16,$e=255,qe=0,Ue={};function ze(e){we(e!==1/0,\"Cannot perform this action with an infinite size.\")}function Ve(e){return null==e?ot():We(e)&&!u(e)?e:ot().withMutations((function(t){var n=r(e);ze(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function We(e){return!(!e||!e[Ke])}t(Ve,Se),Ve.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n<t.length;n+=2){if(n+1>=t.length)throw new Error(\"Missing value for key: \"+t[n]);e.set(t[n],t[n+1])}}))},Ve.prototype.toString=function(){return this.__toString(\"Map {\",\"}\")},Ve.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},Ve.prototype.set=function(e,t){return st(this,e,t)},Ve.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},Ve.prototype.remove=function(e){return st(this,e,b)},Ve.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},Ve.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},Ve.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=gt(this,xn(e),t,n);return r===b?void 0:r},Ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},Ve.prototype.merge=function(){return ht(this,void 0,arguments)},Ve.prototype.mergeWith=function(t){return ht(this,t,e.call(arguments,1))},Ve.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return\"function\"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},Ve.prototype.mergeDeep=function(){return ht(this,ft,arguments)},Ve.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return ht(this,dt(t),n)},Ve.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return\"function\"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},Ve.prototype.sort=function(e){return Ut(pn(this,e))},Ve.prototype.sortBy=function(e,t){return Ut(pn(this,t,e))},Ve.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},Ve.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new _)},Ve.prototype.asImmutable=function(){return this.__ensureOwner()},Ve.prototype.wasAltered=function(){return this.__altered},Ve.prototype.__iterator=function(e,t){return new et(this,e,t)},Ve.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},Ve.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Ve.isMap=We;var Je,Ke=\"@@__IMMUTABLE_MAP__@@\",He=Ve.prototype;function Ge(e,t){this.ownerID=e,this.entries=t}function Ze(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Ye(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Qe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return $(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(He);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return Je||(Je=rt(0))}function st(e,t,n){var r,o;if(e._root){var s=x(w),i=x(E);if(r=it(e._root,e.__ownerID,0,void 0,t,n,s,i),!i.value)return e;o=e.size+(s.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ge(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,s,i,a){return e?e.update(t,n,r,o,s,i,a):s===b?e:(S(a),S(i),new Qe(t,r,[o,s]))}function at(e){return e.constructor===Qe||e.constructor===Xe}function lt(e,t,n,r,o){if(e.keyHash===r)return new Xe(t,r,[e.entry,o]);var s,i=(0===n?e.keyHash:e.keyHash>>>n)&v,a=(0===n?r:r>>>n)&v;return new Ze(t,1<<i|1<<a,i===a?[lt(e,t,n+g,r,o)]:(s=new Qe(t,r,o),i<a?[e,s]:[s,e]))}function ct(e,t,n,r){e||(e=new _);for(var o=new Qe(e,Ae(n),[n,r]),s=0;s<t.length;s++){var i=t[s];o=o.update(e,0,void 0,i[0],i[1])}return o}function ut(e,t,n,r){for(var o=0,s=0,i=new Array(n),a=0,l=1,c=t.length;a<c;a++,l<<=1){var u=t[a];void 0!==u&&a!==r&&(o|=l,i[s++]=u)}return new Ze(e,o,i)}function pt(e,t,n,r,o){for(var s=0,i=new Array(y),a=0;0!==n;a++,n>>>=1)i[a]=1&n?t[s++]:void 0;return i[r]=o,new Ye(e,s+1,i)}function ht(e,t,n){for(var o=[],s=0;s<n.length;s++){var a=n[s],l=r(a);i(a)||(l=l.map((function(e){return fe(e)}))),o.push(l)}return mt(e,t,o)}function ft(e,t,n){return e&&e.mergeDeep&&i(t)?e.mergeDeep(t):ye(e,t)?e:t}function dt(e){return function(t,n,r){if(t&&t.mergeDeepWith&&i(n))return t.mergeDeepWith(e,n);var o=e(t,n,r);return ye(t,o)?t:o}}function mt(e,t,n){return 0===(n=n.filter((function(e){return 0!==e.size}))).length?e:0!==e.size||e.__ownerID||1!==n.length?e.withMutations((function(e){for(var r=t?function(n,r){e.update(r,b,(function(e){return e===b?n:t(e,n,r)}))}:function(t,n){e.set(n,t)},o=0;o<n.length;o++)n[o].forEach(r)})):e.constructor(n[0])}function gt(e,t,n,r){var o=e===b,s=t.next();if(s.done){var i=o?n:e,a=r(i);return a===i?e:a}we(o||e&&e.set,\"invalid keyPath\");var l=s.value,c=o?b:e.get(l,b),u=gt(c,t,n,r);return u===c?e:u===b?e.remove(l):(o?ot():e).set(l,u)}function yt(e){return e=(e=(858993459&(e-=e>>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function vt(e,t,n,r){var o=r?e:j(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var s=new Array(o),i=0,a=0;a<o;a++)a===t?(s[a]=n,i=-1):s[a]=e[a+i];return s}function wt(e,t,n){var r=e.length-1;if(n&&t===r)return e.pop(),e;for(var o=new Array(r),s=0,i=0;i<r;i++)i===t&&(s=1),o[i]=e[i+s];return o}He[Ke]=!0,He[m]=He.remove,He.removeIn=He.deleteIn,Ge.prototype.get=function(e,t,n,r){for(var o=this.entries,s=0,i=o.length;s<i;s++)if(ye(n,o[s][0]))return o[s][1];return r},Ge.prototype.update=function(e,t,n,r,o,s,i){for(var a=o===b,l=this.entries,c=0,u=l.length;c<u&&!ye(r,l[c][0]);c++);var p=c<u;if(p?l[c][1]===o:a)return this;if(S(i),(a||!p)&&S(s),!a||1!==l.length){if(!p&&!a&&l.length>=Et)return ct(e,l,r,o);var h=e&&e===this.ownerID,f=h?l:j(l);return p?a?c===u-1?f.pop():f[c]=f.pop():f[c]=[r,o]:f.push([r,o]),h?(this.entries=f,this):new Ge(e,f)}},Ze.prototype.get=function(e,t,n,r){void 0===t&&(t=Ae(n));var o=1<<((0===e?t:t>>>e)&v),s=this.bitmap;return 0==(s&o)?r:this.nodes[yt(s&o-1)].get(e+g,t,n,r)},Ze.prototype.update=function(e,t,n,r,o,s,i){void 0===n&&(n=Ae(r));var a=(0===t?n:n>>>t)&v,l=1<<a,c=this.bitmap,u=0!=(c&l);if(!u&&o===b)return this;var p=yt(c&l-1),h=this.nodes,f=u?h[p]:void 0,d=it(f,e,t+g,n,r,o,s,i);if(d===f)return this;if(!u&&d&&h.length>=xt)return pt(e,h,c,a,d);if(u&&!d&&2===h.length&&at(h[1^p]))return h[1^p];if(u&&d&&1===h.length&&at(d))return d;var m=e&&e===this.ownerID,y=u?d?c:c^l:c|l,w=u?d?vt(h,p,d,m):wt(h,p,m):bt(h,p,d,m);return m?(this.bitmap=y,this.nodes=w,this):new Ze(e,y,w)},Ye.prototype.get=function(e,t,n,r){void 0===t&&(t=Ae(n));var o=(0===e?t:t>>>e)&v,s=this.nodes[o];return s?s.get(e+g,t,n,r):r},Ye.prototype.update=function(e,t,n,r,o,s,i){void 0===n&&(n=Ae(r));var a=(0===t?n:n>>>t)&v,l=o===b,c=this.nodes,u=c[a];if(l&&!u)return this;var p=it(u,e,t+g,n,r,o,s,i);if(p===u)return this;var h=this.count;if(u){if(!p&&--h<St)return ut(e,c,h,a)}else h++;var f=e&&e===this.ownerID,d=vt(c,a,p,f);return f?(this.count=h,this.nodes=d,this):new Ye(e,h,d)},Xe.prototype.get=function(e,t,n,r){for(var o=this.entries,s=0,i=o.length;s<i;s++)if(ye(n,o[s][0]))return o[s][1];return r},Xe.prototype.update=function(e,t,n,r,o,s,i){void 0===n&&(n=Ae(r));var a=o===b;if(n!==this.keyHash)return a?this:(S(i),S(s),lt(this,e,t,n,[r,o]));for(var l=this.entries,c=0,u=l.length;c<u&&!ye(r,l[c][0]);c++);var p=c<u;if(p?l[c][1]===o:a)return this;if(S(i),(a||!p)&&S(s),a&&2===u)return new Qe(e,this.keyHash,l[1^c]);var h=e&&e===this.ownerID,f=h?l:j(l);return p?a?c===u-1?f.pop():f[c]=f.pop():f[c]=[r,o]:f.push([r,o]),h?(this.entries=f,this):new Xe(e,this.keyHash,f)},Qe.prototype.get=function(e,t,n,r){return ye(n,this.entry[0])?this.entry[1]:r},Qe.prototype.update=function(e,t,n,r,o,s,i){var a=o===b,l=ye(r,this.entry[0]);return(l?o===this.entry[1]:a)?this:(S(i),a?void S(s):l?e&&e===this.ownerID?(this.entry[1]=o,this):new Qe(e,this.keyHash,[r,o]):(S(s),lt(this,e,t,Ae(r),[r,o])))},Ge.prototype.iterate=Xe.prototype.iterate=function(e,t){for(var n=this.entries,r=0,o=n.length-1;r<=o;r++)if(!1===e(n[t?o-r:r]))return!1},Ze.prototype.iterate=Ye.prototype.iterate=function(e,t){for(var n=this.nodes,r=0,o=n.length-1;r<=o;r++){var s=n[t?o-r:r];if(s&&!1===s.iterate(e,t))return!1}},Qe.prototype.iterate=function(e,t){return e(this.entry)},t(et,B),et.prototype.next=function(){for(var e=this._type,t=this._stack;t;){var n,r=t.node,o=t.index++;if(r.entry){if(0===o)return tt(e,r.entry)}else if(r.entries){if(o<=(n=r.entries.length-1))return tt(e,r.entries[this._reverse?n-o:o])}else if(o<=(n=r.nodes.length-1)){var s=r.nodes[this._reverse?n-o:o];if(s){if(s.entry)return tt(e,s.entry);t=this._stack=nt(s,t)}continue}t=this._stack=this._stack.__prev}return q()};var Et=y/4,xt=y/2,St=y/4;function _t(e){var t=Rt();if(null==e)return t;if(jt(e))return e;var n=o(e),r=n.size;return 0===r?t:(ze(r),r>0&&r<y?Tt(0,r,g,null,new At(n.toArray())):t.withMutations((function(e){e.setSize(r),n.forEach((function(t,n){return e.set(n,t)}))})))}function jt(e){return!(!e||!e[Ot])}t(_t,_e),_t.of=function(){return this(arguments)},_t.prototype.toString=function(){return this.__toString(\"List [\",\"]\")},_t.prototype.get=function(e,t){if((e=k(this,e))>=0&&e<this.size){var n=Lt(this,e+=this._origin);return n&&n.array[e&v]}return t},_t.prototype.set=function(e,t){return Mt(this,e,t)},_t.prototype.remove=function(e){return this.has(e)?0===e?this.shift():e===this.size-1?this.pop():this.splice(e,1):this},_t.prototype.insert=function(e,t){return this.splice(e,0,t)},_t.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=g,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):Rt()},_t.prototype.push=function(){var e=arguments,t=this.size;return this.withMutations((function(n){Bt(n,0,t+e.length);for(var r=0;r<e.length;r++)n.set(t+r,e[r])}))},_t.prototype.pop=function(){return Bt(this,0,-1)},_t.prototype.unshift=function(){var e=arguments;return this.withMutations((function(t){Bt(t,-e.length);for(var n=0;n<e.length;n++)t.set(n,e[n])}))},_t.prototype.shift=function(){return Bt(this,1)},_t.prototype.merge=function(){return $t(this,void 0,arguments)},_t.prototype.mergeWith=function(t){return $t(this,t,e.call(arguments,1))},_t.prototype.mergeDeep=function(){return $t(this,ft,arguments)},_t.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return $t(this,dt(t),n)},_t.prototype.setSize=function(e){return Bt(this,0,e)},_t.prototype.slice=function(e,t){var n=this.size;return C(e,t,n)?this:Bt(this,P(e,n),N(t,n))},_t.prototype.__iterator=function(e,t){var n=0,r=It(this,t);return new B((function(){var t=r();return t===Nt?q():$(e,n++,t)}))},_t.prototype.__iterate=function(e,t){for(var n,r=0,o=It(this,t);(n=o())!==Nt&&!1!==e(n,r++,this););return r},_t.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Tt(this._origin,this._capacity,this._level,this._root,this._tail,e,this.__hash):(this.__ownerID=e,this)},_t.isList=jt;var Ot=\"@@__IMMUTABLE_LIST__@@\",kt=_t.prototype;function At(e,t){this.array=e,this.ownerID=t}kt[Ot]=!0,kt[m]=kt.remove,kt.setIn=He.setIn,kt.deleteIn=kt.removeIn=He.removeIn,kt.update=He.update,kt.updateIn=He.updateIn,kt.mergeIn=He.mergeIn,kt.mergeDeepIn=He.mergeDeepIn,kt.withMutations=He.withMutations,kt.asMutable=He.asMutable,kt.asImmutable=He.asImmutable,kt.wasAltered=He.wasAltered,At.prototype.removeBefore=function(e,t,n){if(n===t?1<<t:0===this.array.length)return this;var r=n>>>t&v;if(r>=this.array.length)return new At([],e);var o,s=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-g,n))===i&&s)return this}if(s&&!o)return this;var a=Ft(this,e);if(!s)for(var l=0;l<r;l++)a.array[l]=void 0;return o&&(a.array[r]=o),a},At.prototype.removeAfter=function(e,t,n){if(n===(t?1<<t:0)||0===this.array.length)return this;var r,o=n-1>>>t&v;if(o>=this.array.length)return this;if(t>0){var s=this.array[o];if((r=s&&s.removeAfter(e,t-g,n))===s&&o===this.array.length-1)return this}var i=Ft(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var Ct,Pt,Nt={};function It(e,t){var n=e._origin,r=e._capacity,o=qt(r),s=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?a(e,n):l(e,t,n)}function a(e,i){var a=i===o?s&&s.array:e&&e.array,l=i>n?0:n-i,c=r-i;return c>y&&(c=y),function(){if(l===c)return Nt;var e=t?--c:l++;return a&&a[e]}}function l(e,o,s){var a,l=e&&e.array,c=s>n?0:n-s>>o,u=1+(r-s>>o);return u>y&&(u=y),function(){for(;;){if(a){var e=a();if(e!==Nt)return e;a=null}if(c===u)return Nt;var n=t?--u:c++;a=i(l&&l[n],o-g,s+(n<<o))}}}}function Tt(e,t,n,r,o,s,i){var a=Object.create(kt);return a.size=t-e,a._origin=e,a._capacity=t,a._level=n,a._root=r,a._tail=o,a.__ownerID=s,a.__hash=i,a.__altered=!1,a}function Rt(){return Ct||(Ct=Tt(0,0,g))}function Mt(e,t,n){if((t=k(e,t))!=t)return e;if(t>=e.size||t<0)return e.withMutations((function(e){t<0?Bt(e,t).set(0,n):Bt(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,s=x(E);return t>=qt(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,s):o=Dt(o,e.__ownerID,e._level,t,n,s),s.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Tt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,s){var i,a=r>>>n&v,l=e&&a<e.array.length;if(!l&&void 0===o)return e;if(n>0){var c=e&&e.array[a],u=Dt(c,t,n-g,r,o,s);return u===c?e:((i=Ft(e,t)).array[a]=u,i)}return l&&e.array[a]===o?e:(S(s),i=Ft(e,t),void 0===o&&a===i.array.length-1?i.array.pop():i.array[a]=o,i)}function Ft(e,t){return t&&e&&t===e.ownerID?e:new At(e?e.array.slice():[],t)}function Lt(e,t){if(t>=qt(e._capacity))return e._tail;if(t<1<<e._level+g){for(var n=e._root,r=e._level;n&&r>0;)n=n.array[t>>>r&v],r-=g;return n}}function Bt(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new _,o=e._origin,s=e._capacity,i=o+t,a=void 0===n?s:n<0?s+n:o+n;if(i===o&&a===s)return e;if(i>=a)return e.clear();for(var l=e._level,c=e._root,u=0;i+u<0;)c=new At(c&&c.array.length?[void 0,c]:[],r),u+=1<<(l+=g);u&&(i+=u,o+=u,a+=u,s+=u);for(var p=qt(s),h=qt(a);h>=1<<l+g;)c=new At(c&&c.array.length?[c]:[],r),l+=g;var f=e._tail,d=h<p?Lt(e,a-1):h>p?new At([],r):f;if(f&&h>p&&i<s&&f.array.length){for(var m=c=Ft(c,r),y=l;y>g;y-=g){var b=p>>>y&v;m=m.array[b]=Ft(m.array[b],r)}m.array[p>>>g&v]=f}if(a<s&&(d=d&&d.removeAfter(r,0,a)),i>=h)i-=h,a-=h,l=g,c=null,d=d&&d.removeBefore(r,0,i);else if(i>o||h<p){for(u=0;c;){var w=i>>>l&v;if(w!==h>>>l&v)break;w&&(u+=(1<<l)*w),l-=g,c=c.array[w]}c&&i>o&&(c=c.removeBefore(r,l,i-u)),c&&h<p&&(c=c.removeAfter(r,l,h-u)),u&&(i-=u,a-=u)}return e.__ownerID?(e.size=a-i,e._origin=i,e._capacity=a,e._level=l,e._root=c,e._tail=d,e.__hash=void 0,e.__altered=!0,e):Tt(i,a,l,c,d)}function $t(e,t,n){for(var r=[],s=0,a=0;a<n.length;a++){var l=n[a],c=o(l);c.size>s&&(s=c.size),i(l)||(c=c.map((function(e){return fe(e)}))),r.push(c)}return s>e.size&&(e=e.setSize(s)),mt(e,t,r)}function qt(e){return e<y?0:e-1>>>g<<g}function Ut(e){return null==e?Wt():zt(e)?e:Wt().withMutations((function(t){var n=r(e);ze(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function zt(e){return We(e)&&u(e)}function Vt(e,t,n,r){var o=Object.create(Ut.prototype);return o.size=e?e.size:0,o._map=e,o._list=t,o.__ownerID=n,o.__hash=r,o}function Wt(){return Pt||(Pt=Vt(ot(),Rt()))}function Jt(e,t,n){var r,o,s=e._map,i=e._list,a=s.get(t),l=void 0!==a;if(n===b){if(!l)return e;i.size>=y&&i.size>=2*s.size?(r=(o=i.filter((function(e,t){return void 0!==e&&a!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=s.remove(t),o=a===i.size-1?i.pop():i.set(a,void 0))}else if(l){if(n===i.get(a)[1])return e;r=s,o=i.set(a,[t,n])}else r=s.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Vt(r,o)}function Kt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Ht(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Zt(e){this._iter=e,this.size=e.size}function Yt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===M){var r=e.__iterator(t,n);return new B((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===R?T:R,n)},t}function Xt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var s=e.get(r,b);return s===b?o:t.call(n,s,r,e)},r.__iterateUncached=function(r,o){var s=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,s)}),o)},r.__iteratorUncached=function(r,o){var s=e.__iterator(M,o);return new B((function(){var o=s.next();if(o.done)return o;var i=o.value,a=i[0];return $(r,a,t.call(n,i[1],a,e),o)}))},r}function Qt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Yt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var s=e.get(r,b);return s!==b&&t.call(n,s,r,e)?s:o}),o.__iterateUncached=function(o,s){var i=this,a=0;return e.__iterate((function(e,s,l){if(t.call(n,e,s,l))return a++,o(e,r?s:a-1,i)}),s),a},o.__iteratorUncached=function(o,s){var i=e.__iterator(M,s),a=0;return new B((function(){for(;;){var s=i.next();if(s.done)return s;var l=s.value,c=l[0],u=l[1];if(t.call(n,u,c,e))return $(o,r?c:a++,u,s)}}))},o}function tn(e,t,n){var r=Ve().asMutable();return e.__iterate((function(o,s){r.update(t.call(n,o,s,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=a(e),o=(u(e)?Ut():Ve()).asMutable();e.__iterate((function(s,i){o.update(t.call(n,s,i,e),(function(e){return(e=e||[]).push(r?[i,s]:s),e}))}));var s=vn(e);return o.map((function(t){return mn(e,s(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),C(t,n,o))return e;var s=P(t,o),i=N(n,o);if(s!=s||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var a,l=i-s;l==l&&(a=l<0?0:l);var c=bn(e);return c.size=0===a?a:e.size&&a||void 0,!r&&se(e)&&a>=0&&(c.get=function(t,n){return(t=k(this,t))>=0&&t<a?e.get(t+s,n):n}),c.__iterateUncached=function(t,n){var o=this;if(0===a)return 0;if(n)return this.cacheResult().__iterate(t,n);var i=0,l=!0,c=0;return e.__iterate((function(e,n){if(!l||!(l=i++<s))return c++,!1!==t(e,r?n:c-1,o)&&c!==a})),c},c.__iteratorUncached=function(t,n){if(0!==a&&n)return this.cacheResult().__iterator(t,n);var o=0!==a&&e.__iterator(t,n),i=0,l=0;return new B((function(){for(;i++<s;)o.next();if(++l>a)return q();var e=o.next();return r||t===R?e:$(t,l-1,t===T?void 0:e.value[1],e)}))},c}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var s=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,a){return t.call(n,e,o,a)&&++i&&r(e,o,s)})),i},r.__iteratorUncached=function(r,o){var s=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(M,o),a=!0;return new B((function(){if(!a)return q();var e=i.next();if(e.done)return e;var o=e.value,l=o[0],c=o[1];return t.call(n,c,l,s)?r===M?e:$(r,l,c,e):(a=!1,q())}))},r}function sn(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,s){var i=this;if(s)return this.cacheResult().__iterate(o,s);var a=!0,l=0;return e.__iterate((function(e,s,c){if(!a||!(a=t.call(n,e,s,c)))return l++,o(e,r?s:l-1,i)})),l},o.__iteratorUncached=function(o,s){var i=this;if(s)return this.cacheResult().__iterator(o,s);var a=e.__iterator(M,s),l=!0,c=0;return new B((function(){var e,s,u;do{if((e=a.next()).done)return r||o===R?e:$(o,c++,o===T?void 0:e.value[1],e);var p=e.value;s=p[0],u=p[1],l&&(l=t.call(n,u,s,i))}while(l);return o===M?e:$(o,s,u,e)}))},o}function an(e,t){var n=a(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?ae(e):le(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var s=o[0];if(s===e||n&&a(s)||l(e)&&l(s))return s}var c=new te(o);return n?c=c.toKeyedSeq():l(e)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),c}function ln(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var s=0,a=!1;function l(e,c){var u=this;e.__iterate((function(e,o){return(!t||c<t)&&i(e)?l(e,c+1):!1===r(e,n?o:s++,u)&&(a=!0),!a}),o)}return l(e,0),s},r.__iteratorUncached=function(r,o){var s=e.__iterator(r,o),a=[],l=0;return new B((function(){for(;s;){var e=s.next();if(!1===e.done){var c=e.value;if(r===M&&(c=c[1]),t&&!(a.length<t)||!i(c))return n?e:$(r,l++,c,e);a.push(s),s=c.__iterator(r,o)}else s=a.pop()}return q()}))},r}function cn(e,t,n){var r=vn(e);return e.toSeq().map((function(o,s){return r(t.call(n,o,s,e))})).flatten(!0)}function un(e,t){var n=bn(e);return n.size=e.size&&2*e.size-1,n.__iterateUncached=function(n,r){var o=this,s=0;return e.__iterate((function(e,r){return(!s||!1!==n(t,s++,o))&&!1!==n(e,s++,o)}),r),s},n.__iteratorUncached=function(n,r){var o,s=e.__iterator(R,r),i=0;return new B((function(){return(!o||i%2)&&(o=s.next()).done?o:i%2?$(n,i++,t):$(n,i++,o.value,o)}))},n}function pn(e,t,n){t||(t=En);var r=a(e),o=0,s=e.toSeq().map((function(t,r){return[r,t,o++,n?n(t,r,e):t]})).toArray();return s.sort((function(e,n){return t(e[3],n[3])||e[2]-n[2]})).forEach(r?function(e,t){s[t].length=2}:function(e,t){s[t]=e[1]}),r?H(s):l(e)?G(s):Z(s)}function hn(e,t,n){if(t||(t=En),n){var r=e.toSeq().map((function(t,r){return[t,n(t,r,e)]})).reduce((function(e,n){return fn(t,e[1],n[1])?n:e}));return r&&r[0]}return e.reduce((function(e,n){return fn(t,e,n)?n:e}))}function fn(e,t,n){var r=e(n,t);return 0===r&&n!==t&&(null==n||n!=n)||r>0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(R,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var s=r.map((function(e){return e=n(e),V(o?e.reverse():e)})),i=0,a=!1;return new B((function(){var n;return a||(n=s.map((function(e){return e.next()})),a=n.some((function(e){return e.done}))),a?q():$(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return se(e)?t:e.constructor(t)}function gn(e){if(e!==Object(e))throw new TypeError(\"Expected [K, V] tuple: \"+e)}function yn(e){return ze(e.size),O(e)}function vn(e){return a(e)?r:l(e)?o:s}function bn(e){return Object.create((a(e)?H:l(e)?G:Z).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):K.prototype.cacheResult.call(this)}function En(e,t){return e>t?1:e<t?-1:0}function xn(e){var t=V(e);if(!t){if(!J(e))throw new TypeError(\"Expected iterable or array-like: \"+e);t=V(n(e))}return t}function Sn(e,t){var n,r=function(s){if(s instanceof r)return s;if(!(this instanceof r))return new r(s);if(!n){n=!0;var i=Object.keys(e);kn(o,i),o.size=i.length,o._name=t,o._keys=i,o._defaultValues=e}this._map=Ve(s)},o=r.prototype=Object.create(_n);return o.constructor=r,r}t(Ut,Ve),Ut.of=function(){return this(arguments)},Ut.prototype.toString=function(){return this.__toString(\"OrderedMap {\",\"}\")},Ut.prototype.get=function(e,t){var n=this._map.get(e);return void 0!==n?this._list.get(n)[1]:t},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Wt()},Ut.prototype.set=function(e,t){return Jt(this,e,t)},Ut.prototype.remove=function(e){return Jt(this,e,b)},Ut.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Ut.prototype.__iterate=function(e,t){var n=this;return this._list.__iterate((function(t){return t&&e(t[1],t[0],n)}),t)},Ut.prototype.__iterator=function(e,t){return this._list.fromEntrySeq().__iterator(e,t)},Ut.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map.__ensureOwner(e),n=this._list.__ensureOwner(e);return e?Vt(t,n,e,this.__hash):(this.__ownerID=e,this._map=t,this._list=n,this)},Ut.isOrderedMap=zt,Ut.prototype[d]=!0,Ut.prototype[m]=Ut.prototype.remove,t(Kt,H),Kt.prototype.get=function(e,t){return this._iter.get(e,t)},Kt.prototype.has=function(e){return this._iter.has(e)},Kt.prototype.valueSeq=function(){return this._iter.valueSeq()},Kt.prototype.reverse=function(){var e=this,t=Qt(this,!0);return this._useKeys||(t.valueSeq=function(){return e._iter.toSeq().reverse()}),t},Kt.prototype.map=function(e,t){var n=this,r=Xt(this,e,t);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(e,t)}),r},Kt.prototype.__iterate=function(e,t){var n,r=this;return this._iter.__iterate(this._useKeys?function(t,n){return e(t,n,r)}:(n=t?yn(this):0,function(o){return e(o,t?--n:n++,r)}),t)},Kt.prototype.__iterator=function(e,t){if(this._useKeys)return this._iter.__iterator(e,t);var n=this._iter.__iterator(R,t),r=t?yn(this):0;return new B((function(){var o=n.next();return o.done?o:$(e,t?--r:r++,o.value,o)}))},Kt.prototype[d]=!0,t(Ht,G),Ht.prototype.includes=function(e){return this._iter.includes(e)},Ht.prototype.__iterate=function(e,t){var n=this,r=0;return this._iter.__iterate((function(t){return e(t,r++,n)}),t)},Ht.prototype.__iterator=function(e,t){var n=this._iter.__iterator(R,t),r=0;return new B((function(){var t=n.next();return t.done?t:$(e,r++,t.value,t)}))},t(Gt,Z),Gt.prototype.has=function(e){return this._iter.includes(e)},Gt.prototype.__iterate=function(e,t){var n=this;return this._iter.__iterate((function(t){return e(t,t,n)}),t)},Gt.prototype.__iterator=function(e,t){var n=this._iter.__iterator(R,t);return new B((function(){var t=n.next();return t.done?t:$(e,t.value,t.value,t)}))},t(Zt,H),Zt.prototype.entrySeq=function(){return this._iter.toSeq()},Zt.prototype.__iterate=function(e,t){var n=this;return this._iter.__iterate((function(t){if(t){gn(t);var r=i(t);return e(r?t.get(1):t[1],r?t.get(0):t[0],n)}}),t)},Zt.prototype.__iterator=function(e,t){var n=this._iter.__iterator(R,t);return new B((function(){for(;;){var t=n.next();if(t.done)return t;var r=t.value;if(r){gn(r);var o=i(r);return $(e,o?r.get(0):r[0],o?r.get(1):r[1],t)}}}))},Ht.prototype.cacheResult=Kt.prototype.cacheResult=Gt.prototype.cacheResult=Zt.prototype.cacheResult=wn,t(Sn,Se),Sn.prototype.toString=function(){return this.__toString(On(this)+\" {\",\"}\")},Sn.prototype.has=function(e){return this._defaultValues.hasOwnProperty(e)},Sn.prototype.get=function(e,t){if(!this.has(e))return t;var n=this._defaultValues[e];return this._map?this._map.get(e,n):n},Sn.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var e=this.constructor;return e._empty||(e._empty=jn(this,ot()))},Sn.prototype.set=function(e,t){if(!this.has(e))throw new Error('Cannot set unknown key \"'+e+'\" on '+On(this));if(this._map&&!this._map.has(e)&&t===this._defaultValues[e])return this;var n=this._map&&this._map.set(e,t);return this.__ownerID||n===this._map?this:jn(this,n)},Sn.prototype.remove=function(e){if(!this.has(e))return this;var t=this._map&&this._map.remove(e);return this.__ownerID||t===this._map?this:jn(this,t)},Sn.prototype.wasAltered=function(){return this._map.wasAltered()},Sn.prototype.__iterator=function(e,t){var n=this;return r(this._defaultValues).map((function(e,t){return n.get(t)})).__iterator(e,t)},Sn.prototype.__iterate=function(e,t){var n=this;return r(this._defaultValues).map((function(e,t){return n.get(t)})).__iterate(e,t)},Sn.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map&&this._map.__ensureOwner(e);return e?jn(this,t,e):(this.__ownerID=e,this._map=t,this)};var _n=Sn.prototype;function jn(e,t,n){var r=Object.create(Object.getPrototypeOf(e));return r._map=t,r.__ownerID=n,r}function On(e){return e._name||e.constructor.name||\"Record\"}function kn(e,t){try{t.forEach(An.bind(void 0,e))}catch(e){}}function An(e,t){Object.defineProperty(e,t,{get:function(){return this.get(t)},set:function(e){we(this.__ownerID,\"Cannot set on an immutable record.\"),this.set(t,e)}})}function Cn(e){return null==e?Dn():Pn(e)&&!u(e)?e:Dn().withMutations((function(t){var n=s(e);ze(n.size),n.forEach((function(e){return t.add(e)}))}))}function Pn(e){return!(!e||!e[In])}_n[m]=_n.remove,_n.deleteIn=_n.removeIn=He.removeIn,_n.merge=He.merge,_n.mergeWith=He.mergeWith,_n.mergeIn=He.mergeIn,_n.mergeDeep=He.mergeDeep,_n.mergeDeepWith=He.mergeDeepWith,_n.mergeDeepIn=He.mergeDeepIn,_n.setIn=He.setIn,_n.update=He.update,_n.updateIn=He.updateIn,_n.withMutations=He.withMutations,_n.asMutable=He.asMutable,_n.asImmutable=He.asImmutable,t(Cn,je),Cn.of=function(){return this(arguments)},Cn.fromKeys=function(e){return this(r(e).keySeq())},Cn.prototype.toString=function(){return this.__toString(\"Set {\",\"}\")},Cn.prototype.has=function(e){return this._map.has(e)},Cn.prototype.add=function(e){return Rn(this,this._map.set(e,!0))},Cn.prototype.remove=function(e){return Rn(this,this._map.remove(e))},Cn.prototype.clear=function(){return Rn(this,this._map.clear())},Cn.prototype.union=function(){var t=e.call(arguments,0);return 0===(t=t.filter((function(e){return 0!==e.size}))).length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations((function(e){for(var n=0;n<t.length;n++)s(t[n]).forEach((function(t){return e.add(t)}))})):this.constructor(t[0])},Cn.prototype.intersect=function(){var t=e.call(arguments,0);if(0===t.length)return this;t=t.map((function(e){return s(e)}));var n=this;return this.withMutations((function(e){n.forEach((function(n){t.every((function(e){return e.includes(n)}))||e.remove(n)}))}))},Cn.prototype.subtract=function(){var t=e.call(arguments,0);if(0===t.length)return this;t=t.map((function(e){return s(e)}));var n=this;return this.withMutations((function(e){n.forEach((function(n){t.some((function(e){return e.includes(n)}))&&e.remove(n)}))}))},Cn.prototype.merge=function(){return this.union.apply(this,arguments)},Cn.prototype.mergeWith=function(t){var n=e.call(arguments,1);return this.union.apply(this,n)},Cn.prototype.sort=function(e){return Fn(pn(this,e))},Cn.prototype.sortBy=function(e,t){return Fn(pn(this,t,e))},Cn.prototype.wasAltered=function(){return this._map.wasAltered()},Cn.prototype.__iterate=function(e,t){var n=this;return this._map.__iterate((function(t,r){return e(r,r,n)}),t)},Cn.prototype.__iterator=function(e,t){return this._map.map((function(e,t){return t})).__iterator(e,t)},Cn.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map.__ensureOwner(e);return e?this.__make(t,e):(this.__ownerID=e,this._map=t,this)},Cn.isSet=Pn;var Nn,In=\"@@__IMMUTABLE_SET__@@\",Tn=Cn.prototype;function Rn(e,t){return e.__ownerID?(e.size=t.size,e._map=t,e):t===e._map?e:0===t.size?e.__empty():e.__make(t)}function Mn(e,t){var n=Object.create(Tn);return n.size=e?e.size:0,n._map=e,n.__ownerID=t,n}function Dn(){return Nn||(Nn=Mn(ot()))}function Fn(e){return null==e?Un():Ln(e)?e:Un().withMutations((function(t){var n=s(e);ze(n.size),n.forEach((function(e){return t.add(e)}))}))}function Ln(e){return Pn(e)&&u(e)}Tn[In]=!0,Tn[m]=Tn.remove,Tn.mergeDeep=Tn.merge,Tn.mergeDeepWith=Tn.mergeWith,Tn.withMutations=He.withMutations,Tn.asMutable=He.asMutable,Tn.asImmutable=He.asImmutable,Tn.__empty=Dn,Tn.__make=Mn,t(Fn,Cn),Fn.of=function(){return this(arguments)},Fn.fromKeys=function(e){return this(r(e).keySeq())},Fn.prototype.toString=function(){return this.__toString(\"OrderedSet {\",\"}\")},Fn.isOrderedSet=Ln;var Bn,$n=Fn.prototype;function qn(e,t){var n=Object.create($n);return n.size=e?e.size:0,n._map=e,n.__ownerID=t,n}function Un(){return Bn||(Bn=qn(Wt()))}function zn(e){return null==e?Gn():Vn(e)?e:Gn().unshiftAll(e)}function Vn(e){return!(!e||!e[Jn])}$n[d]=!0,$n.__empty=Un,$n.__make=qn,t(zn,_e),zn.of=function(){return this(arguments)},zn.prototype.toString=function(){return this.__toString(\"Stack [\",\"]\")},zn.prototype.get=function(e,t){var n=this._head;for(e=k(this,e);n&&e--;)n=n.next;return n?n.value:t},zn.prototype.peek=function(){return this._head&&this._head.value},zn.prototype.push=function(){if(0===arguments.length)return this;for(var e=this.size+arguments.length,t=this._head,n=arguments.length-1;n>=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Hn(e,t)},zn.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;ze(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Hn(t,n)},zn.prototype.pop=function(){return this.slice(1)},zn.prototype.unshift=function(){return this.push.apply(this,arguments)},zn.prototype.unshiftAll=function(e){return this.pushAll(e)},zn.prototype.shift=function(){return this.pop.apply(this,arguments)},zn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Gn()},zn.prototype.slice=function(e,t){if(C(e,t,this.size))return this;var n=P(e,this.size);if(N(t,this.size)!==this.size)return _e.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Hn(r,o)},zn.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Hn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},zn.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},zn.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new B((function(){if(r){var t=r.value;return r=r.next,$(e,n++,t)}return q()}))},zn.isStack=Vn;var Wn,Jn=\"@@__IMMUTABLE_STACK__@@\",Kn=zn.prototype;function Hn(e,t,n,r){var o=Object.create(Kn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Gn(){return Wn||(Wn=Hn(0))}function Zn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Kn[Jn]=!0,Kn.withMutations=He.withMutations,Kn.asMutable=He.asMutable,Kn.asImmutable=He.asImmutable,Kn.wasAltered=He.wasAltered,n.Iterator=B,Zn(n,{toArray:function(){ze(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Ht(this)},toJS:function(){return this.toSeq().map((function(e){return e&&\"function\"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&\"function\"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Kt(this,!0)},toMap:function(){return Ve(this.toKeyedSeq())},toObject:function(){ze(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return Ut(this.toKeyedSeq())},toOrderedSet:function(){return Fn(a(this)?this.valueSeq():this)},toSet:function(){return Cn(a(this)?this.valueSeq():this)},toSetSeq:function(){return new Gt(this)},toSeq:function(){return l(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return zn(a(this)?this.valueSeq():this)},toList:function(){return _t(a(this)?this.valueSeq():this)},toString:function(){return\"[Iterable]\"},__toString:function(e,t){return 0===this.size?e+t:e+\" \"+this.toSeq().map(this.__toStringMapper).join(\", \")+\" \"+t},concat:function(){return mn(this,an(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ye(t,e)}))},entries:function(){return this.__iterator(M)},every:function(e,t){ze(this.size);var n=!0;return this.__iterate((function(r,o,s){if(!e.call(t,r,o,s))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return ze(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){ze(this.size),e=void 0!==e?\"\"+e:\",\";var t=\"\",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():\"\"})),t},keys:function(){return this.__iterator(T)},map:function(e,t){return mn(this,Xt(this,e,t))},reduce:function(e,t,n){var r,o;return ze(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,s,i){o?(o=!1,r=t):r=e.call(n,r,t,s,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Qt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,pn(this,e))},values:function(){return this.__iterator(R)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return O(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ve(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,s){if(e.call(t,n,o,s))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(A)},flatMap:function(e,t){return mn(this,cn(this,e,t))},flatten:function(e){return mn(this,ln(this,e,!0))},fromEntrySeq:function(){return new Zt(this)},get:function(e,t){return this.find((function(t,n){return ye(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=xn(e);!(n=o.next()).done;){var s=n.value;if((r=r&&r.get?r.get(s,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e=\"function\"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e=\"function\"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ye(t,e)}))},keySeq:function(){return this.toSeq().map(Qn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return hn(this,e)},maxBy:function(e,t){return hn(this,t,e)},min:function(e){return hn(this,e?nr(e):sr)},minBy:function(e,t){return hn(this,t?nr(t):sr,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,sn(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,pn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Yn=n.prototype;Yn[p]=!0,Yn[L]=Yn.values,Yn.__toJS=Yn.toArray,Yn.__toStringMapper=rr,Yn.inspect=Yn.toSource=function(){return this.toString()},Yn.chain=Yn.flatMap,Yn.contains=Yn.includes,Zn(r,{flip:function(){return mn(this,Yt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,s){return e.call(t,[s,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Xn=r.prototype;function Qn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return\"string\"==typeof e?JSON.stringify(e):String(e)}function or(){return j(arguments)}function sr(e,t){return e<t?1:e>t?-1:0}function ir(e){if(e.size===1/0)return 0;var t=u(e),n=a(e),r=t?1:0;return ar(e.__iterate(n?t?function(e,t){r=31*r+lr(Ae(e),Ae(t))|0}:function(e,t){r=r+lr(Ae(e),Ae(t))|0}:t?function(e){r=31*r+Ae(e)|0}:function(e){r=r+Ae(e)|0}),r)}function ar(e,t){return t=Oe(t,3432918353),t=Oe(t<<15|t>>>-15,461845907),t=Oe(t<<13|t>>>-13,5),t=Oe((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=ke((t=Oe(t^t>>>13,3266489909))^t>>>16)}function lr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Xn[h]=!0,Xn[L]=Yn.entries,Xn.__toJS=Yn.toObject,Xn.__toStringMapper=function(e,t){return JSON.stringify(t)+\": \"+rr(e)},Zn(o,{toKeyedSeq:function(){return new Kt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Qt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=P(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(j(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,ln(this,e,!1))},get:function(e,t){return(e=k(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=k(this,e))>=0&&(void 0!==this.size?this.size===1/0||e<this.size:-1!==this.indexOf(e))},interpose:function(e){return mn(this,un(this,e))},interleave:function(){var e=[this].concat(j(arguments)),t=dn(this.toSeq(),G.of,e),n=t.flatten(!0);return t.size&&(n.size=t.size*e.length),mn(this,n)},keySeq:function(){return Ee(0,this.size)},last:function(){return this.get(-1)},skipWhile:function(e,t){return mn(this,sn(this,e,t,!1))},zip:function(){return mn(this,dn(this,or,[this].concat(j(arguments))))},zipWith:function(e){var t=j(arguments);return t[0]=this,mn(this,dn(this,e,t))}}),o.prototype[f]=!0,o.prototype[d]=!0,Zn(s,{get:function(e,t){return this.has(e)?e:t},includes:function(e){return this.has(e)},keySeq:function(){return this.valueSeq()}}),s.prototype.has=Yn.includes,s.prototype.contains=s.prototype.includes,Zn(H,r.prototype),Zn(G,o.prototype),Zn(Z,s.prototype),Zn(Se,r.prototype),Zn(_e,o.prototype),Zn(je,s.prototype),{Iterable:n,Seq:K,Collection:xe,Map:Ve,OrderedMap:Ut,List:_t,Stack:zn,Set:Cn,OrderedSet:Fn,Record:Sn,Range:Ee,Repeat:be,is:ye,fromJS:fe}}()},35717:e=>{\"function\"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},35823:e=>{e.exports=function(e,t,n,r){var o=new Blob(void 0!==r?[r,e]:[e],{type:n||\"application/octet-stream\"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(o,t);else{var s=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(o):window.webkitURL.createObjectURL(o),i=document.createElement(\"a\");i.style.display=\"none\",i.href=s,i.setAttribute(\"download\",t),void 0===i.download&&i.setAttribute(\"target\",\"_blank\"),document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),200)}}},91296:(e,t,n)=>{var r=NaN,o=\"[object Symbol]\",s=/^\\s+|\\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt,u=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p=\"object\"==typeof self&&self&&self.Object===Object&&self,h=u||p||Function(\"return this\")(),f=Object.prototype.toString,d=Math.max,m=Math.min,g=function(){return h.Date.now()};function y(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function v(e){if(\"number\"==typeof e)return e;if(function(e){return\"symbol\"==typeof e||function(e){return!!e&&\"object\"==typeof e}(e)&&f.call(e)==o}(e))return r;if(y(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(s,\"\");var n=a.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,o,s,i,a,l,c=0,u=!1,p=!1,h=!0;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");function f(t){var n=r,s=o;return r=o=void 0,c=t,i=e.apply(s,n)}function b(e){var n=e-l;return void 0===l||n>=t||n<0||p&&e-c>=s}function w(){var e=g();if(b(e))return E(e);a=setTimeout(w,function(e){var n=t-(e-l);return p?m(n,s-(e-c)):n}(e))}function E(e){return a=void 0,h&&r?f(e):(r=o=void 0,i)}function x(){var e=g(),n=b(e);if(r=arguments,o=this,l=e,n){if(void 0===a)return function(e){return c=e,a=setTimeout(w,t),u?f(e):i}(l);if(p)return a=setTimeout(w,t),f(l)}return void 0===a&&(a=setTimeout(w,t)),i}return t=v(t)||0,y(n)&&(u=!!n.leading,s=(p=\"maxWait\"in n)?d(v(n.maxWait)||0,t):s,h=\"trailing\"in n?!!n.trailing:h),x.cancel=function(){void 0!==a&&clearTimeout(a),c=0,r=l=o=a=void 0},x.flush=function(){return void 0===a?i:E(g())},x}},18552:(e,t,n)=>{var r=n(10852)(n(55639),\"DataView\");e.exports=r},1989:(e,t,n)=>{var r=n(51789),o=n(80401),s=n(57667),i=n(21327),a=n(81866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=i,l.prototype.set=a,e.exports=l},96425:(e,t,n)=>{var r=n(3118),o=n(9435);function s(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}s.prototype=r(o.prototype),s.prototype.constructor=s,e.exports=s},38407:(e,t,n)=>{var r=n(27040),o=n(14125),s=n(82117),i=n(67518),a=n(54705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=i,l.prototype.set=a,e.exports=l},7548:(e,t,n)=>{var r=n(3118),o=n(9435);function s(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}s.prototype=r(o.prototype),s.prototype.constructor=s,e.exports=s},57071:(e,t,n)=>{var r=n(10852)(n(55639),\"Map\");e.exports=r},83369:(e,t,n)=>{var r=n(24785),o=n(11285),s=n(96e3),i=n(49916),a=n(95265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=i,l.prototype.set=a,e.exports=l},53818:(e,t,n)=>{var r=n(10852)(n(55639),\"Promise\");e.exports=r},58525:(e,t,n)=>{var r=n(10852)(n(55639),\"Set\");e.exports=r},88668:(e,t,n)=>{var r=n(83369),o=n(90619),s=n(72385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}i.prototype.add=i.prototype.push=o,i.prototype.has=s,e.exports=i},46384:(e,t,n)=>{var r=n(38407),o=n(37465),s=n(63779),i=n(67599),a=n(44758),l=n(34309);function c(e){var t=this.__data__=new r(e);this.size=t.size}c.prototype.clear=o,c.prototype.delete=s,c.prototype.get=i,c.prototype.has=a,c.prototype.set=l,e.exports=c},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},11149:(e,t,n)=>{var r=n(55639).Uint8Array;e.exports=r},70577:(e,t,n)=>{var r=n(10852)(n(55639),\"WeakMap\");e.exports=r},96874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},77412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},34963:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,s=[];++n<r;){var i=e[n];t(i,n,e)&&(s[o++]=i)}return s}},47443:(e,t,n)=>{var r=n(42118);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},14636:(e,t,n)=>{var r=n(22545),o=n(35694),s=n(1469),i=n(44144),a=n(65776),l=n(36719),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=s(e),u=!n&&o(e),p=!n&&!u&&i(e),h=!n&&!u&&!p&&l(e),f=n||u||p||h,d=f?r(e.length,String):[],m=d.length;for(var g in e)!t&&!c.call(e,g)||f&&(\"length\"==g||p&&(\"offset\"==g||\"parent\"==g)||h&&(\"buffer\"==g||\"byteLength\"==g||\"byteOffset\"==g)||a(g,m))||d.push(g);return d}},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},62488:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},62663:e=>{e.exports=function(e,t,n,r){var o=-1,s=null==e?0:e.length;for(r&&s&&(n=e[++o]);++o<s;)n=t(n,e[o],o,e);return n}},82908:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},44286:e=>{e.exports=function(e){return e.split(\"\")}},49029:e=>{var t=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},86556:(e,t,n)=>{var r=n(89465),o=n(77813);e.exports=function(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},34865:(e,t,n)=>{var r=n(89465),o=n(77813),s=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];s.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},44037:(e,t,n)=>{var r=n(98363),o=n(3674);e.exports=function(e,t){return e&&r(t,o(t),e)}},63886:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e,t){return e&&r(t,o(t),e)}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){\"__proto__\"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},85990:(e,t,n)=>{var r=n(46384),o=n(77412),s=n(34865),i=n(44037),a=n(63886),l=n(64626),c=n(278),u=n(18805),p=n(1911),h=n(58234),f=n(46904),d=n(98882),m=n(43824),g=n(29148),y=n(38517),v=n(1469),b=n(44144),w=n(56688),E=n(13218),x=n(72928),S=n(3674),_=n(81704),j=\"[object Arguments]\",O=\"[object Function]\",k=\"[object Object]\",A={};A[j]=A[\"[object Array]\"]=A[\"[object ArrayBuffer]\"]=A[\"[object DataView]\"]=A[\"[object Boolean]\"]=A[\"[object Date]\"]=A[\"[object Float32Array]\"]=A[\"[object Float64Array]\"]=A[\"[object Int8Array]\"]=A[\"[object Int16Array]\"]=A[\"[object Int32Array]\"]=A[\"[object Map]\"]=A[\"[object Number]\"]=A[k]=A[\"[object RegExp]\"]=A[\"[object Set]\"]=A[\"[object String]\"]=A[\"[object Symbol]\"]=A[\"[object Uint8Array]\"]=A[\"[object Uint8ClampedArray]\"]=A[\"[object Uint16Array]\"]=A[\"[object Uint32Array]\"]=!0,A[\"[object Error]\"]=A[O]=A[\"[object WeakMap]\"]=!1,e.exports=function e(t,n,C,P,N,I){var T,R=1&n,M=2&n,D=4&n;if(C&&(T=N?C(t,P,N,I):C(t)),void 0!==T)return T;if(!E(t))return t;var F=v(t);if(F){if(T=m(t),!R)return c(t,T)}else{var L=d(t),B=L==O||\"[object GeneratorFunction]\"==L;if(b(t))return l(t,R);if(L==k||L==j||B&&!N){if(T=M||B?{}:y(t),!R)return M?p(t,a(T,t)):u(t,i(T,t))}else{if(!A[L])return N?t:{};T=g(t,L,R)}}I||(I=new r);var $=I.get(t);if($)return $;I.set(t,T),x(t)?t.forEach((function(r){T.add(e(r,n,C,r,t,I))})):w(t)&&t.forEach((function(r,o){T.set(o,e(r,n,C,o,t,I))}));var q=F?void 0:(D?M?f:h:M?_:S)(t);return o(q||t,(function(r,o){q&&(r=t[o=r]),s(T,o,e(r,n,C,o,t,I))})),T}},3118:(e,t,n)=>{var r=n(13218),o=Object.create,s=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=s},89881:(e,t,n)=>{var r=n(47816),o=n(99291)(r);e.exports=o},41848:e=>{e.exports=function(e,t,n,r){for(var o=e.length,s=n+(r?1:-1);r?s--:++s<o;)if(t(e[s],s,e))return s;return-1}},21078:(e,t,n)=>{var r=n(62488),o=n(37285);e.exports=function e(t,n,s,i,a){var l=-1,c=t.length;for(s||(s=o),a||(a=[]);++l<c;){var u=t[l];n>0&&s(u)?n>1?e(u,n-1,s,i,a):r(a,u):i||(a[a.length]=u)}return a}},28483:(e,t,n)=>{var r=n(25063)();e.exports=r},47816:(e,t,n)=>{var r=n(28483),o=n(3674);e.exports=function(e,t){return e&&r(e,t,o)}},97786:(e,t,n)=>{var r=n(71811),o=n(40327);e.exports=function(e,t){for(var n=0,s=(t=r(t,e)).length;null!=e&&n<s;)e=e[o(t[n++])];return n&&n==s?e:void 0}},68866:(e,t,n)=>{var r=n(62488),o=n(1469);e.exports=function(e,t,n){var s=t(e);return o(e)?s:r(s,n(e))}},44239:(e,t,n)=>{var r=n(62705),o=n(89607),s=n(2333),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":i&&i in Object(e)?o(e):s(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},42118:(e,t,n)=>{var r=n(41848),o=n(62722),s=n(42351);e.exports=function(e,t,n){return t==t?s(e,t,n):r(e,o,n)}},9454:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return o(e)&&\"[object Arguments]\"==r(e)}},90939:(e,t,n)=>{var r=n(2492),o=n(37005);e.exports=function e(t,n,s,i,a){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,s,i,e,a))}},2492:(e,t,n)=>{var r=n(46384),o=n(67114),s=n(18351),i=n(16096),a=n(98882),l=n(1469),c=n(44144),u=n(36719),p=\"[object Arguments]\",h=\"[object Array]\",f=\"[object Object]\",d=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,g,y){var v=l(e),b=l(t),w=v?h:a(e),E=b?h:a(t),x=(w=w==p?f:w)==f,S=(E=E==p?f:E)==f,_=w==E;if(_&&c(e)){if(!c(t))return!1;v=!0,x=!1}if(_&&!x)return y||(y=new r),v||u(e)?o(e,t,n,m,g,y):s(e,t,w,n,m,g,y);if(!(1&n)){var j=x&&d.call(e,\"__wrapped__\"),O=S&&d.call(t,\"__wrapped__\");if(j||O){var k=j?e.value():e,A=O?t.value():t;return y||(y=new r),g(k,A,n,m,y)}}return!!_&&(y||(y=new r),i(e,t,n,m,g,y))}},25588:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&\"[object Map]\"==r(e)}},2958:(e,t,n)=>{var r=n(46384),o=n(90939);e.exports=function(e,t,n,s){var i=n.length,a=i,l=!s;if(null==e)return!a;for(e=Object(e);i--;){var c=n[i];if(l&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++i<a;){var u=(c=n[i])[0],p=e[u],h=c[1];if(l&&c[2]){if(void 0===p&&!(u in e))return!1}else{var f=new r;if(s)var d=s(p,h,u,e,t,f);if(!(void 0===d?o(h,p,3,s,f):d))return!1}}return!0}},62722:e=>{e.exports=function(e){return e!=e}},28458:(e,t,n)=>{var r=n(23560),o=n(15346),s=n(13218),i=n(80346),a=/^\\[object .+?Constructor\\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,p=c.hasOwnProperty,h=RegExp(\"^\"+u.call(p).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");e.exports=function(e){return!(!s(e)||o(e))&&(r(e)?h:a).test(i(e))}},29221:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&\"[object Set]\"==r(e)}},38749:(e,t,n)=>{var r=n(44239),o=n(41780),s=n(37005),i={};i[\"[object Float32Array]\"]=i[\"[object Float64Array]\"]=i[\"[object Int8Array]\"]=i[\"[object Int16Array]\"]=i[\"[object Int32Array]\"]=i[\"[object Uint8Array]\"]=i[\"[object Uint8ClampedArray]\"]=i[\"[object Uint16Array]\"]=i[\"[object Uint32Array]\"]=!0,i[\"[object Arguments]\"]=i[\"[object Array]\"]=i[\"[object ArrayBuffer]\"]=i[\"[object Boolean]\"]=i[\"[object DataView]\"]=i[\"[object Date]\"]=i[\"[object Error]\"]=i[\"[object Function]\"]=i[\"[object Map]\"]=i[\"[object Number]\"]=i[\"[object Object]\"]=i[\"[object RegExp]\"]=i[\"[object Set]\"]=i[\"[object String]\"]=i[\"[object WeakMap]\"]=!1,e.exports=function(e){return s(e)&&o(e.length)&&!!i[r(e)]}},67206:(e,t,n)=>{var r=n(91573),o=n(16432),s=n(6557),i=n(1469),a=n(39601);e.exports=function(e){return\"function\"==typeof e?e:null==e?s:\"object\"==typeof e?i(e)?o(e[0],e[1]):r(e):a(e)}},280:(e,t,n)=>{var r=n(25726),o=n(86916),s=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))s.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}},10313:(e,t,n)=>{var r=n(13218),o=n(25726),s=n(33498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return s(e);var t=o(e),n=[];for(var a in e)(\"constructor\"!=a||!t&&i.call(e,a))&&n.push(a);return n}},9435:e=>{e.exports=function(){}},91573:(e,t,n)=>{var r=n(2958),o=n(1499),s=n(42634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?s(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},16432:(e,t,n)=>{var r=n(90939),o=n(27361),s=n(79095),i=n(15403),a=n(89162),l=n(42634),c=n(40327);e.exports=function(e,t){return i(e)&&a(t)?l(c(e),t):function(n){var i=o(n,e);return void 0===i&&i===t?s(n,e):r(t,i,3)}}},42980:(e,t,n)=>{var r=n(46384),o=n(86556),s=n(28483),i=n(59783),a=n(13218),l=n(81704),c=n(36390);e.exports=function e(t,n,u,p,h){t!==n&&s(n,(function(s,l){if(h||(h=new r),a(s))i(t,n,l,u,e,p,h);else{var f=p?p(c(t,l),s,l+\"\",t,n,h):void 0;void 0===f&&(f=s),o(t,l,f)}}),l)}},59783:(e,t,n)=>{var r=n(86556),o=n(64626),s=n(77133),i=n(278),a=n(38517),l=n(35694),c=n(1469),u=n(29246),p=n(44144),h=n(23560),f=n(13218),d=n(68630),m=n(36719),g=n(36390),y=n(59881);e.exports=function(e,t,n,v,b,w,E){var x=g(e,n),S=g(t,n),_=E.get(S);if(_)r(e,n,_);else{var j=w?w(x,S,n+\"\",e,t,E):void 0,O=void 0===j;if(O){var k=c(S),A=!k&&p(S),C=!k&&!A&&m(S);j=S,k||A||C?c(x)?j=x:u(x)?j=i(x):A?(O=!1,j=o(S,!0)):C?(O=!1,j=s(S,!0)):j=[]:d(S)||l(S)?(j=x,l(x)?j=y(x):f(x)&&!h(x)||(j=a(S))):O=!1}O&&(E.set(S,j),b(j,S,v,w,E),E.delete(S)),r(e,n,j)}}},40371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},79152:(e,t,n)=>{var r=n(97786);e.exports=function(e){return function(t){return r(t,e)}}},18674:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},10107:e=>{e.exports=function(e,t,n,r,o){return o(e,(function(e,o,s){n=r?(r=!1,e):t(n,e,o,s)})),n}},5976:(e,t,n)=>{var r=n(6557),o=n(45357),s=n(30061);e.exports=function(e,t){return s(o(e,t,r),e+\"\")}},10611:(e,t,n)=>{var r=n(34865),o=n(71811),s=n(65776),i=n(13218),a=n(40327);e.exports=function(e,t,n,l){if(!i(e))return e;for(var c=-1,u=(t=o(t,e)).length,p=u-1,h=e;null!=h&&++c<u;){var f=a(t[c]),d=n;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return e;if(c!=p){var m=h[f];void 0===(d=l?l(m,f,h):void 0)&&(d=i(m)?m:s(t[c+1])?[]:{})}r(h,f,d),h=h[f]}return e}},28045:(e,t,n)=>{var r=n(6557),o=n(89250),s=o?function(e,t){return o.set(e,t),e}:r;e.exports=s},56560:(e,t,n)=>{var r=n(75703),o=n(38777),s=n(6557),i=o?function(e,t){return o(e,\"toString\",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:s;e.exports=i},14259:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(o);++r<o;)s[r]=e[r+t];return s}},5076:(e,t,n)=>{var r=n(89881);e.exports=function(e,t){var n;return r(e,(function(e,r,o){return!(n=t(e,r,o))})),!!n}},22545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},80531:(e,t,n)=>{var r=n(62705),o=n(29932),s=n(1469),i=n(33448),a=r?r.prototype:void 0,l=a?a.toString:void 0;e.exports=function e(t){if(\"string\"==typeof t)return t;if(s(t))return o(t,e)+\"\";if(i(t))return l?l.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-Infinity?\"-0\":n}},27561:(e,t,n)=>{var r=n(67990),o=/^\\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,\"\"):e}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},57406:(e,t,n)=>{var r=n(71811),o=n(10928),s=n(40292),i=n(40327);e.exports=function(e,t){return t=r(t,e),null==(e=s(e,t))||delete e[i(o(t))]}},1757:e=>{e.exports=function(e,t,n){for(var r=-1,o=e.length,s=t.length,i={};++r<o;){var a=r<s?t[r]:void 0;n(i,e[r],a)}return i}},74757:e=>{e.exports=function(e,t){return e.has(t)}},71811:(e,t,n)=>{var r=n(1469),o=n(15403),s=n(55514),i=n(79833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:s(i(e))}},40180:(e,t,n)=>{var r=n(14259);e.exports=function(e,t,n){var o=e.length;return n=void 0===n?o:n,!t&&n>=o?e:r(e,t,n)}},74318:(e,t,n)=>{var r=n(11149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},64626:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=t&&!t.nodeType&&t,s=o&&e&&!e.nodeType&&e,i=s&&s.exports===o?r.Buffer:void 0,a=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=a?a(n):new e.constructor(n);return e.copy(r),r}},57157:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},93147:e=>{var t=/\\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},40419:(e,t,n)=>{var r=n(62705),o=r?r.prototype:void 0,s=o?o.valueOf:void 0;e.exports=function(e){return s?Object(s.call(e)):{}}},77133:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},52157:e=>{var t=Math.max;e.exports=function(e,n,r,o){for(var s=-1,i=e.length,a=r.length,l=-1,c=n.length,u=t(i-a,0),p=Array(c+u),h=!o;++l<c;)p[l]=n[l];for(;++s<a;)(h||s<i)&&(p[r[s]]=e[s]);for(;u--;)p[l++]=e[s++];return p}},14054:e=>{var t=Math.max;e.exports=function(e,n,r,o){for(var s=-1,i=e.length,a=-1,l=r.length,c=-1,u=n.length,p=t(i-l,0),h=Array(p+u),f=!o;++s<p;)h[s]=e[s];for(var d=s;++c<u;)h[d+c]=n[c];for(;++a<l;)(f||s<i)&&(h[d+r[a]]=e[s++]);return h}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},98363:(e,t,n)=>{var r=n(34865),o=n(89465);e.exports=function(e,t,n,s){var i=!n;n||(n={});for(var a=-1,l=t.length;++a<l;){var c=t[a],u=s?s(n[c],e[c],c,n,e):void 0;void 0===u&&(u=e[c]),i?o(n,c,u):r(n,c,u)}return n}},18805:(e,t,n)=>{var r=n(98363),o=n(99551);e.exports=function(e,t){return r(e,o(e),t)}},1911:(e,t,n)=>{var r=n(98363),o=n(51442);e.exports=function(e,t){return r(e,o(e),t)}},14429:(e,t,n)=>{var r=n(55639)[\"__core-js_shared__\"];e.exports=r},97991:e=>{e.exports=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}},21463:(e,t,n)=>{var r=n(5976),o=n(16612);e.exports=function(e){return r((function(t,n){var r=-1,s=n.length,i=s>1?n[s-1]:void 0,a=s>2?n[2]:void 0;for(i=e.length>3&&\"function\"==typeof i?(s--,i):void 0,a&&o(n[0],n[1],a)&&(i=s<3?void 0:i,s=1),t=Object(t);++r<s;){var l=n[r];l&&e(t,l,r,i)}return t}))}},99291:(e,t,n)=>{var r=n(98612);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var s=n.length,i=t?s:-1,a=Object(n);(t?i--:++i<s)&&!1!==o(a[i],i,a););return n}}},25063:e=>{e.exports=function(e){return function(t,n,r){for(var o=-1,s=Object(t),i=r(t),a=i.length;a--;){var l=i[e?a:++o];if(!1===n(s[l],l,s))break}return t}}},22402:(e,t,n)=>{var r=n(71774),o=n(55639);e.exports=function(e,t,n){var s=1&t,i=r(e);return function t(){return(this&&this!==o&&this instanceof t?i:e).apply(s?n:this,arguments)}}},98805:(e,t,n)=>{var r=n(40180),o=n(62689),s=n(83140),i=n(79833);e.exports=function(e){return function(t){t=i(t);var n=o(t)?s(t):void 0,a=n?n[0]:t.charAt(0),l=n?r(n,1).join(\"\"):t.slice(1);return a[e]()+l}}},35393:(e,t,n)=>{var r=n(62663),o=n(53816),s=n(58748),i=RegExp(\"['’]\",\"g\");e.exports=function(e){return function(t){return r(s(o(t).replace(i,\"\")),e,\"\")}}},71774:(e,t,n)=>{var r=n(3118),o=n(13218);e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=r(e.prototype),s=e.apply(n,t);return o(s)?s:n}}},46347:(e,t,n)=>{var r=n(96874),o=n(71774),s=n(86935),i=n(94487),a=n(20893),l=n(46460),c=n(55639);e.exports=function(e,t,n){var u=o(e);return function o(){for(var p=arguments.length,h=Array(p),f=p,d=a(o);f--;)h[f]=arguments[f];var m=p<3&&h[0]!==d&&h[p-1]!==d?[]:l(h,d);return(p-=m.length)<n?i(e,t,s,o.placeholder,void 0,h,m,void 0,void 0,n-p):r(this&&this!==c&&this instanceof o?u:e,this,h)}}},67740:(e,t,n)=>{var r=n(67206),o=n(98612),s=n(3674);e.exports=function(e){return function(t,n,i){var a=Object(t);if(!o(t)){var l=r(n,3);t=s(t),n=function(e){return l(a[e],e,a)}}var c=e(t,n,i);return c>-1?a[l?t[c]:c]:void 0}}},86935:(e,t,n)=>{var r=n(52157),o=n(14054),s=n(97991),i=n(71774),a=n(94487),l=n(20893),c=n(90451),u=n(46460),p=n(55639);e.exports=function e(t,n,h,f,d,m,g,y,v,b){var w=128&n,E=1&n,x=2&n,S=24&n,_=512&n,j=x?void 0:i(t);return function O(){for(var k=arguments.length,A=Array(k),C=k;C--;)A[C]=arguments[C];if(S)var P=l(O),N=s(A,P);if(f&&(A=r(A,f,d,S)),m&&(A=o(A,m,g,S)),k-=N,S&&k<b){var I=u(A,P);return a(t,n,e,O.placeholder,h,A,I,y,v,b-k)}var T=E?h:this,R=x?T[t]:t;return k=A.length,y?A=c(A,y):_&&k>1&&A.reverse(),w&&v<k&&(A.length=v),this&&this!==p&&this instanceof O&&(R=j||i(R)),R.apply(T,A)}}},84375:(e,t,n)=>{var r=n(96874),o=n(71774),s=n(55639);e.exports=function(e,t,n,i){var a=1&t,l=o(e);return function t(){for(var o=-1,c=arguments.length,u=-1,p=i.length,h=Array(p+c),f=this&&this!==s&&this instanceof t?l:e;++u<p;)h[u]=i[u];for(;c--;)h[u++]=arguments[++o];return r(f,a?n:this,h)}}},94487:(e,t,n)=>{var r=n(86528),o=n(258),s=n(69255);e.exports=function(e,t,n,i,a,l,c,u,p,h){var f=8&t;t|=f?32:64,4&(t&=~(f?64:32))||(t&=-4);var d=[e,t,a,f?l:void 0,f?c:void 0,f?void 0:l,f?void 0:c,u,p,h],m=n.apply(void 0,d);return r(e)&&o(m,d),m.placeholder=i,s(m,e,t)}},97727:(e,t,n)=>{var r=n(28045),o=n(22402),s=n(46347),i=n(86935),a=n(84375),l=n(66833),c=n(63833),u=n(258),p=n(69255),h=n(40554),f=Math.max;e.exports=function(e,t,n,d,m,g,y,v){var b=2&t;if(!b&&\"function\"!=typeof e)throw new TypeError(\"Expected a function\");var w=d?d.length:0;if(w||(t&=-97,d=m=void 0),y=void 0===y?y:f(h(y),0),v=void 0===v?v:h(v),w-=m?m.length:0,64&t){var E=d,x=m;d=m=void 0}var S=b?void 0:l(e),_=[e,t,n,d,m,E,x,g,y,v];if(S&&c(_,S),e=_[0],t=_[1],n=_[2],d=_[3],m=_[4],!(v=_[9]=void 0===_[9]?b?0:e.length:f(_[9]-w,0))&&24&t&&(t&=-25),t&&1!=t)j=8==t||16==t?s(e,t,v):32!=t&&33!=t||m.length?i.apply(void 0,_):a(e,t,n,d);else var j=o(e,t,n);return p((S?r:u)(j,_),e,t)}},60696:(e,t,n)=>{var r=n(68630);e.exports=function(e){return r(e)?void 0:e}},69389:(e,t,n)=>{var r=n(18674)({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"});e.exports=r},38777:(e,t,n)=>{var r=n(10852),o=function(){try{var e=r(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}();e.exports=o},67114:(e,t,n)=>{var r=n(88668),o=n(82908),s=n(74757);e.exports=function(e,t,n,i,a,l){var c=1&n,u=e.length,p=t.length;if(u!=p&&!(c&&p>u))return!1;var h=l.get(e),f=l.get(t);if(h&&f)return h==t&&f==e;var d=-1,m=!0,g=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++d<u;){var y=e[d],v=t[d];if(i)var b=c?i(v,y,d,t,e,l):i(y,v,d,e,t,l);if(void 0!==b){if(b)continue;m=!1;break}if(g){if(!o(t,(function(e,t){if(!s(g,t)&&(y===e||a(y,e,n,i,l)))return g.push(t)}))){m=!1;break}}else if(y!==v&&!a(y,v,n,i,l)){m=!1;break}}return l.delete(e),l.delete(t),m}},18351:(e,t,n)=>{var r=n(62705),o=n(11149),s=n(77813),i=n(67114),a=n(68776),l=n(21814),c=r?r.prototype:void 0,u=c?c.valueOf:void 0;e.exports=function(e,t,n,r,c,p,h){switch(n){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!p(new o(e),new o(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return s(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case\"[object Map]\":var f=a;case\"[object Set]\":var d=1&r;if(f||(f=l),e.size!=t.size&&!d)return!1;var m=h.get(e);if(m)return m==t;r|=2,h.set(e,t);var g=i(f(e),f(t),r,c,p,h);return h.delete(e),g;case\"[object Symbol]\":if(u)return u.call(e)==u.call(t)}return!1}},16096:(e,t,n)=>{var r=n(58234),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,s,i,a){var l=1&n,c=r(e),u=c.length;if(u!=r(t).length&&!l)return!1;for(var p=u;p--;){var h=c[p];if(!(l?h in t:o.call(t,h)))return!1}var f=a.get(e),d=a.get(t);if(f&&d)return f==t&&d==e;var m=!0;a.set(e,t),a.set(t,e);for(var g=l;++p<u;){var y=e[h=c[p]],v=t[h];if(s)var b=l?s(v,y,h,t,e,a):s(y,v,h,e,t,a);if(!(void 0===b?y===v||i(y,v,n,s,a):b)){m=!1;break}g||(g=\"constructor\"==h)}if(m&&!g){var w=e.constructor,E=t.constructor;w==E||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof w&&w instanceof w&&\"function\"==typeof E&&E instanceof E||(m=!1)}return a.delete(e),a.delete(t),m}},99021:(e,t,n)=>{var r=n(85564),o=n(45357),s=n(30061);e.exports=function(e){return s(o(e,void 0,r),e+\"\")}},31957:(e,t,n)=>{var r=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},58234:(e,t,n)=>{var r=n(68866),o=n(99551),s=n(3674);e.exports=function(e){return r(e,s,o)}},46904:(e,t,n)=>{var r=n(68866),o=n(51442),s=n(81704);e.exports=function(e){return r(e,s,o)}},66833:(e,t,n)=>{var r=n(89250),o=n(50308),s=r?function(e){return r.get(e)}:o;e.exports=s},97658:(e,t,n)=>{var r=n(52060),o=Object.prototype.hasOwnProperty;e.exports=function(e){for(var t=e.name+\"\",n=r[t],s=o.call(r,t)?n.length:0;s--;){var i=n[s],a=i.func;if(null==a||a==e)return i.name}return t}},20893:e=>{e.exports=function(e){return e.placeholder}},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n[\"string\"==typeof t?\"string\":\"hash\"]:n.map}},1499:(e,t,n)=>{var r=n(89162),o=n(3674);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var s=t[n],i=e[s];t[n]=[s,i,r(i)]}return t}},10852:(e,t,n)=>{var r=n(28458),o=n(47801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},85924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},89607:(e,t,n)=>{var r=n(62705),o=Object.prototype,s=o.hasOwnProperty,i=o.toString,a=r?r.toStringTag:void 0;e.exports=function(e){var t=s.call(e,a),n=e[a];try{e[a]=void 0;var r=!0}catch(e){}var o=i.call(e);return r&&(t?e[a]=n:delete e[a]),o}},99551:(e,t,n)=>{var r=n(34963),o=n(70479),s=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,a=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return s.call(e,t)})))}:o;e.exports=a},51442:(e,t,n)=>{var r=n(62488),o=n(85924),s=n(99551),i=n(70479),a=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,s(e)),e=o(e);return t}:i;e.exports=a},98882:(e,t,n)=>{var r=n(18552),o=n(57071),s=n(53818),i=n(58525),a=n(70577),l=n(44239),c=n(80346),u=\"[object Map]\",p=\"[object Promise]\",h=\"[object Set]\",f=\"[object WeakMap]\",d=\"[object DataView]\",m=c(r),g=c(o),y=c(s),v=c(i),b=c(a),w=l;(r&&w(new r(new ArrayBuffer(1)))!=d||o&&w(new o)!=u||s&&w(s.resolve())!=p||i&&w(new i)!=h||a&&w(new a)!=f)&&(w=function(e){var t=l(e),n=\"[object Object]\"==t?e.constructor:void 0,r=n?c(n):\"\";if(r)switch(r){case m:return d;case g:return u;case y:return p;case v:return h;case b:return f}return t}),e.exports=w},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},58775:e=>{var t=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,n=/,? & /;e.exports=function(e){var r=e.match(t);return r?r[1].split(n):[]}},222:(e,t,n)=>{var r=n(71811),o=n(35694),s=n(1469),i=n(65776),a=n(41780),l=n(40327);e.exports=function(e,t,n){for(var c=-1,u=(t=r(t,e)).length,p=!1;++c<u;){var h=l(t[c]);if(!(p=null!=e&&n(e,h)))break;e=e[h]}return p||++c!=u?p:!!(u=null==e?0:e.length)&&a(u)&&i(h,u)&&(s(e)||o(e))}},62689:e=>{var t=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\");e.exports=function(e){return t.test(e)}},93157:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return\"__lodash_hash_undefined__\"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?\"__lodash_hash_undefined__\":t,this}},43824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&\"string\"==typeof e[0]&&t.call(e,\"index\")&&(r.index=e.index,r.input=e.input),r}},29148:(e,t,n)=>{var r=n(74318),o=n(57157),s=n(93147),i=n(40419),a=n(77133);e.exports=function(e,t,n){var l=e.constructor;switch(t){case\"[object ArrayBuffer]\":return r(e);case\"[object Boolean]\":case\"[object Date]\":return new l(+e);case\"[object DataView]\":return o(e,n);case\"[object Float32Array]\":case\"[object Float64Array]\":case\"[object Int8Array]\":case\"[object Int16Array]\":case\"[object Int32Array]\":case\"[object Uint8Array]\":case\"[object Uint8ClampedArray]\":case\"[object Uint16Array]\":case\"[object Uint32Array]\":return a(e,n);case\"[object Map]\":case\"[object Set]\":return new l;case\"[object Number]\":case\"[object String]\":return new l(e);case\"[object RegExp]\":return s(e);case\"[object Symbol]\":return i(e)}}},38517:(e,t,n)=>{var r=n(3118),o=n(85924),s=n(25726);e.exports=function(e){return\"function\"!=typeof e.constructor||s(e)?{}:r(o(e))}},83112:e=>{var t=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/;e.exports=function(e,n){var r=n.length;if(!r)return e;var o=r-1;return n[o]=(r>1?\"& \":\"\")+n[o],n=n.join(r>2?\", \":\" \"),e.replace(t,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}},37285:(e,t,n)=>{var r=n(62705),o=n(35694),s=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return s(e)||o(e)||!!(i&&e&&e[i])}},65776:e=>{var t=/^(?:0|[1-9]\\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&(\"number\"==r||\"symbol\"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},16612:(e,t,n)=>{var r=n(77813),o=n(98612),s=n(65776),i=n(13218);e.exports=function(e,t,n){if(!i(n))return!1;var a=typeof t;return!!(\"number\"==a?o(n)&&s(t,n.length):\"string\"==a&&t in n)&&r(n[t],e)}},15403:(e,t,n)=>{var r=n(1469),o=n(33448),s=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,i=/^\\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!o(e))||(i.test(e)||!s.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==e:null===e}},86528:(e,t,n)=>{var r=n(96425),o=n(66833),s=n(97658),i=n(8111);e.exports=function(e){var t=s(e),n=i[t];if(\"function\"!=typeof n||!(t in r.prototype))return!1;if(e===n)return!0;var a=o(n);return!!a&&e===a[0]}},15346:(e,t,n)=>{var r,o=n(14429),s=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\";e.exports=function(e){return!!s&&s in e}},25726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===(\"function\"==typeof n&&n.prototype||t)}},89162:(e,t,n)=>{var r=n(13218);e.exports=function(e){return e==e&&!r(e)}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),o=n(38407),s=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(s||o),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},68776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},42634:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},63833:(e,t,n)=>{var r=n(52157),o=n(14054),s=n(46460),i=\"__lodash_placeholder__\",a=128,l=Math.min;e.exports=function(e,t){var n=e[1],c=t[1],u=n|c,p=u<131,h=c==a&&8==n||c==a&&256==n&&e[7].length<=t[8]||384==c&&t[7].length<=t[8]&&8==n;if(!p&&!h)return e;1&c&&(e[2]=t[2],u|=1&n?0:4);var f=t[3];if(f){var d=e[3];e[3]=d?r(d,f,t[4]):f,e[4]=d?s(e[3],i):t[4]}return(f=t[5])&&(d=e[5],e[5]=d?o(d,f,t[6]):f,e[6]=d?s(e[5],i):t[6]),(f=t[7])&&(e[7]=f),c&a&&(e[8]=null==e[8]?t[8]:l(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=u,e}},89250:(e,t,n)=>{var r=n(70577),o=r&&new r;e.exports=o},94536:(e,t,n)=>{var r=n(10852)(Object,\"create\");e.exports=r},86916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},33498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},31167:(e,t,n)=>{e=n.nmd(e);var r=n(31957),o=t&&!t.nodeType&&t,s=o&&e&&!e.nodeType&&e,i=s&&s.exports===o&&r.process,a=function(){try{var e=s&&s.require&&s.require(\"util\").types;return e||i&&i.binding&&i.binding(\"util\")}catch(e){}}();e.exports=a},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},45357:(e,t,n)=>{var r=n(96874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var s=arguments,i=-1,a=o(s.length-t,0),l=Array(a);++i<a;)l[i]=s[t+i];i=-1;for(var c=Array(t+1);++i<t;)c[i]=s[i];return c[t]=n(l),r(e,this,c)}}},40292:(e,t,n)=>{var r=n(97786),o=n(14259);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},52060:e=>{e.exports={}},90451:(e,t,n)=>{var r=n(278),o=n(65776),s=Math.min;e.exports=function(e,t){for(var n=e.length,i=s(t.length,n),a=r(e);i--;){var l=t[i];e[i]=o(l,n)?a[l]:void 0}return e}},46460:e=>{var t=\"__lodash_placeholder__\";e.exports=function(e,n){for(var r=-1,o=e.length,s=0,i=[];++r<o;){var a=e[r];a!==n&&a!==t||(e[r]=t,i[s++]=r)}return i}},55639:(e,t,n)=>{var r=n(31957),o=\"object\"==typeof self&&self&&self.Object===Object&&self,s=r||o||Function(\"return this\")();e.exports=s},36390:e=>{e.exports=function(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}},90619:e=>{e.exports=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this}},72385:e=>{e.exports=function(e){return this.__data__.has(e)}},258:(e,t,n)=>{var r=n(28045),o=n(21275)(r);e.exports=o},21814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},30061:(e,t,n)=>{var r=n(56560),o=n(21275)(r);e.exports=o},69255:(e,t,n)=>{var r=n(58775),o=n(83112),s=n(30061),i=n(87241);e.exports=function(e,t,n){var a=t+\"\";return s(e,o(a,i(r(a),n)))}},21275:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),s=16-(o-r);if(r=o,s>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},37465:(e,t,n)=>{var r=n(38407);e.exports=function(){this.__data__=new r,this.size=0}},63779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},67599:e=>{e.exports=function(e){return this.__data__.get(e)}},44758:e=>{e.exports=function(e){return this.__data__.has(e)}},34309:(e,t,n)=>{var r=n(38407),o=n(57071),s=n(83369);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new s(i)}return n.set(e,t),this.size=n.size,this}},42351:e=>{e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r<o;)if(e[r]===t)return r;return-1}},83140:(e,t,n)=>{var r=n(44286),o=n(62689),s=n(676);e.exports=function(e){return o(e)?s(e):r(e)}},55514:(e,t,n)=>{var r=n(24523),o=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,s=/\\\\(\\\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(s,\"$1\"):n||e)})),t}));e.exports=i},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if(\"string\"==typeof e||r(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-Infinity?\"-0\":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}},67990:e=>{var t=/\\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},676:e=>{var t=\"\\\\ud800-\\\\udfff\",n=\"[\"+t+\"]\",r=\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",o=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",s=\"[^\"+t+\"]\",i=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",a=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",l=\"(?:\"+r+\"|\"+o+\")\"+\"?\",c=\"[\\\\ufe0e\\\\ufe0f]?\",u=c+l+(\"(?:\\\\u200d(?:\"+[s,i,a].join(\"|\")+\")\"+c+l+\")*\"),p=\"(?:\"+[s+r+\"?\",r,i,a,n].join(\"|\")+\")\",h=RegExp(o+\"(?=\"+o+\")|\"+p+u,\"g\");e.exports=function(e){return e.match(h)||[]}},2757:e=>{var t=\"\\\\ud800-\\\\udfff\",n=\"\\\\u2700-\\\\u27bf\",r=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",o=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",s=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",i=\"[\"+s+\"]\",a=\"\\\\d+\",l=\"[\"+n+\"]\",c=\"[\"+r+\"]\",u=\"[^\"+t+s+a+n+r+o+\"]\",p=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",h=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",f=\"[\"+o+\"]\",d=\"(?:\"+c+\"|\"+u+\")\",m=\"(?:\"+f+\"|\"+u+\")\",g=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",y=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",v=\"(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?\",b=\"[\\\\ufe0e\\\\ufe0f]?\",w=b+v+(\"(?:\\\\u200d(?:\"+[\"[^\"+t+\"]\",p,h].join(\"|\")+\")\"+b+v+\")*\"),E=\"(?:\"+[l,p,h].join(\"|\")+\")\"+w,x=RegExp([f+\"?\"+c+\"+\"+g+\"(?=\"+[i,f,\"$\"].join(\"|\")+\")\",m+\"+\"+y+\"(?=\"+[i,f+d,\"$\"].join(\"|\")+\")\",f+\"?\"+d+\"+\"+g,f+\"+\"+y,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",a,E].join(\"|\"),\"g\");e.exports=function(e){return e.match(x)||[]}},87241:(e,t,n)=>{var r=n(77412),o=n(47443),s=[[\"ary\",128],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",32],[\"partialRight\",64],[\"rearg\",256]];e.exports=function(e,t){return r(s,(function(n){var r=\"_.\"+n[0];t&n[1]&&!o(e,r)&&e.push(r)})),e.sort()}},21913:(e,t,n)=>{var r=n(96425),o=n(7548),s=n(278);e.exports=function(e){if(e instanceof r)return e.clone();var t=new o(e.__wrapped__,e.__chain__);return t.__actions__=s(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},39514:(e,t,n)=>{var r=n(97727);e.exports=function(e,t,n){return t=n?void 0:t,t=e&&null==t?e.length:t,r(e,128,void 0,void 0,void 0,void 0,t)}},68929:(e,t,n)=>{var r=n(48403),o=n(35393)((function(e,t,n){return t=t.toLowerCase(),e+(n?r(t):t)}));e.exports=o},48403:(e,t,n)=>{var r=n(79833),o=n(11700);e.exports=function(e){return o(r(e).toLowerCase())}},66678:(e,t,n)=>{var r=n(85990);e.exports=function(e){return r(e,4)}},75703:e=>{e.exports=function(e){return function(){return e}}},40087:(e,t,n)=>{var r=n(97727);function o(e,t,n){var s=r(e,8,void 0,void 0,void 0,void 0,void 0,t=n?void 0:t);return s.placeholder=o.placeholder,s}o.placeholder={},e.exports=o},23279:(e,t,n)=>{var r=n(13218),o=n(7771),s=n(14841),i=Math.max,a=Math.min;e.exports=function(e,t,n){var l,c,u,p,h,f,d=0,m=!1,g=!1,y=!0;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");function v(t){var n=l,r=c;return l=c=void 0,d=t,p=e.apply(r,n)}function b(e){var n=e-f;return void 0===f||n>=t||n<0||g&&e-d>=u}function w(){var e=o();if(b(e))return E(e);h=setTimeout(w,function(e){var n=t-(e-f);return g?a(n,u-(e-d)):n}(e))}function E(e){return h=void 0,y&&l?v(e):(l=c=void 0,p)}function x(){var e=o(),n=b(e);if(l=arguments,c=this,f=e,n){if(void 0===h)return function(e){return d=e,h=setTimeout(w,t),m?v(e):p}(f);if(g)return clearTimeout(h),h=setTimeout(w,t),v(f)}return void 0===h&&(h=setTimeout(w,t)),p}return t=s(t)||0,r(n)&&(m=!!n.leading,u=(g=\"maxWait\"in n)?i(s(n.maxWait)||0,t):u,y=\"trailing\"in n?!!n.trailing:y),x.cancel=function(){void 0!==h&&clearTimeout(h),d=0,l=f=c=h=void 0},x.flush=function(){return void 0===h?p:E(o())},x}},53816:(e,t,n)=>{var r=n(69389),o=n(79833),s=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,i=RegExp(\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\"g\");e.exports=function(e){return(e=o(e))&&e.replace(s,r).replace(i,\"\")}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},13311:(e,t,n)=>{var r=n(67740)(n(30998));e.exports=r},30998:(e,t,n)=>{var r=n(41848),o=n(67206),s=n(40554),i=Math.max;e.exports=function(e,t,n){var a=null==e?0:e.length;if(!a)return-1;var l=null==n?0:s(n);return l<0&&(l=i(a+l,0)),r(e,o(t,3),l)}},85564:(e,t,n)=>{var r=n(21078);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},84599:(e,t,n)=>{var r=n(68836),o=n(69306),s=Array.prototype.push;function i(e,t){return 2==t?function(t,n){return e(t,n)}:function(t){return e(t)}}function a(e){for(var t=e?e.length:0,n=Array(t);t--;)n[t]=e[t];return n}function l(e,t){return function(){var n=arguments.length;if(n){for(var r=Array(n);n--;)r[n]=arguments[n];var o=r[0]=t.apply(void 0,r);return e.apply(void 0,r),o}}}e.exports=function e(t,n,c,u){var p=\"function\"==typeof n,h=n===Object(n);if(h&&(u=c,c=n,n=void 0),null==c)throw new TypeError;u||(u={});var f={cap:!(\"cap\"in u)||u.cap,curry:!(\"curry\"in u)||u.curry,fixed:!(\"fixed\"in u)||u.fixed,immutable:!(\"immutable\"in u)||u.immutable,rearg:!(\"rearg\"in u)||u.rearg},d=p?c:o,m=\"curry\"in u&&u.curry,g=\"fixed\"in u&&u.fixed,y=\"rearg\"in u&&u.rearg,v=p?c.runInContext():void 0,b=p?c:{ary:t.ary,assign:t.assign,clone:t.clone,curry:t.curry,forEach:t.forEach,isArray:t.isArray,isError:t.isError,isFunction:t.isFunction,isWeakMap:t.isWeakMap,iteratee:t.iteratee,keys:t.keys,rearg:t.rearg,toInteger:t.toInteger,toPath:t.toPath},w=b.ary,E=b.assign,x=b.clone,S=b.curry,_=b.forEach,j=b.isArray,O=b.isError,k=b.isFunction,A=b.isWeakMap,C=b.keys,P=b.rearg,N=b.toInteger,I=b.toPath,T=C(r.aryMethod),R={castArray:function(e){return function(){var t=arguments[0];return j(t)?e(a(t)):e.apply(void 0,arguments)}},iteratee:function(e){return function(){var t=arguments[1],n=e(arguments[0],t),r=n.length;return f.cap&&\"number\"==typeof t?(t=t>2?t-2:1,r&&r<=t?n:i(n,t)):n}},mixin:function(e){return function(t){var n=this;if(!k(n))return e(n,Object(t));var r=[];return _(C(t),(function(e){k(t[e])&&r.push([e,n.prototype[e]])})),e(n,Object(t)),_(r,(function(e){var t=e[1];k(t)?n.prototype[e[0]]=t:delete n.prototype[e[0]]})),n}},nthArg:function(e){return function(t){var n=t<0?1:N(t)+1;return S(e(t),n)}},rearg:function(e){return function(t,n){var r=n?n.length:0;return S(e(t,n),r)}},runInContext:function(n){return function(r){return e(t,n(r),u)}}};function M(e,t){if(f.cap){var n=r.iterateeRearg[e];if(n)return function(e,t){return $(e,(function(e){var n=t.length;return function(e,t){return 2==t?function(t,n){return e.apply(void 0,arguments)}:function(t){return e.apply(void 0,arguments)}}(P(i(e,n),t),n)}))}(t,n);var o=!p&&r.iterateeAry[e];if(o)return function(e,t){return $(e,(function(e){return\"function\"==typeof e?i(e,t):e}))}(t,o)}return t}function D(e,t,n){if(f.fixed&&(g||!r.skipFixed[e])){var o=r.methodSpread[e],i=o&&o.start;return void 0===i?w(t,n):function(e,t){return function(){for(var n=arguments.length,r=n-1,o=Array(n);n--;)o[n]=arguments[n];var i=o[t],a=o.slice(0,t);return i&&s.apply(a,i),t!=r&&s.apply(a,o.slice(t+1)),e.apply(this,a)}}(t,i)}return t}function F(e,t,n){return f.rearg&&n>1&&(y||!r.skipRearg[e])?P(t,r.methodRearg[e]||r.aryRearg[n]):t}function L(e,t){for(var n=-1,r=(t=I(t)).length,o=r-1,s=x(Object(e)),i=s;null!=i&&++n<r;){var a=t[n],l=i[a];null==l||k(l)||O(l)||A(l)||(i[a]=x(n==o?l:Object(l))),i=i[a]}return s}function B(t,n){var o=r.aliasToReal[t]||t,s=r.remap[o]||o,i=u;return function(t){var r=p?v:b,a=p?v[s]:n,l=E(E({},i),t);return e(r,o,a,l)}}function $(e,t){return function(){var n=arguments.length;if(!n)return e();for(var r=Array(n);n--;)r[n]=arguments[n];var o=f.rearg?0:n-1;return r[o]=t(r[o]),e.apply(void 0,r)}}function q(e,t,n){var o,s=r.aliasToReal[e]||e,i=t,c=R[s];return c?i=c(t):f.immutable&&(r.mutate.array[s]?i=l(t,a):r.mutate.object[s]?i=l(t,function(e){return function(t){return e({},t)}}(t)):r.mutate.set[s]&&(i=l(t,L))),_(T,(function(e){return _(r.aryMethod[e],(function(t){if(s==t){var n=r.methodSpread[s],a=n&&n.afterRearg;return o=a?D(s,F(s,i,e),e):F(s,D(s,i,e),e),o=function(e,t,n){return m||f.curry&&n>1?S(t,n):t}(0,o=M(s,o),e),!1}})),!o})),o||(o=i),o==t&&(o=m?S(o,1):function(){return t.apply(this,arguments)}),o.convert=B(s,t),o.placeholder=t.placeholder=n,o}if(!h)return q(n,c,d);var U=c,z=[];return _(T,(function(e){_(r.aryMethod[e],(function(e){var t=U[r.remap[e]||e];t&&z.push([e,q(e,t,U)])}))})),_(C(U),(function(e){var t=U[e];if(\"function\"==typeof t){for(var n=z.length;n--;)if(z[n][0]==e)return;t.convert=B(e,t),z.push([e,t])}})),_(z,(function(e){U[e[0]]=e[1]})),U.convert=function(e){return U.runInContext.convert(e)(void 0)},U.placeholder=U,_(C(U),(function(e){_(r.realToAlias[e]||[],(function(t){U[t]=U[e]}))})),U}},68836:(e,t)=>{t.aliasToReal={each:\"forEach\",eachRight:\"forEachRight\",entries:\"toPairs\",entriesIn:\"toPairsIn\",extend:\"assignIn\",extendAll:\"assignInAll\",extendAllWith:\"assignInAllWith\",extendWith:\"assignInWith\",first:\"head\",conforms:\"conformsTo\",matches:\"isMatch\",property:\"get\",__:\"placeholder\",F:\"stubFalse\",T:\"stubTrue\",all:\"every\",allPass:\"overEvery\",always:\"constant\",any:\"some\",anyPass:\"overSome\",apply:\"spread\",assoc:\"set\",assocPath:\"set\",complement:\"negate\",compose:\"flowRight\",contains:\"includes\",dissoc:\"unset\",dissocPath:\"unset\",dropLast:\"dropRight\",dropLastWhile:\"dropRightWhile\",equals:\"isEqual\",identical:\"eq\",indexBy:\"keyBy\",init:\"initial\",invertObj:\"invert\",juxt:\"over\",omitAll:\"omit\",nAry:\"ary\",path:\"get\",pathEq:\"matchesProperty\",pathOr:\"getOr\",paths:\"at\",pickAll:\"pick\",pipe:\"flow\",pluck:\"map\",prop:\"get\",propEq:\"matchesProperty\",propOr:\"getOr\",props:\"at\",symmetricDifference:\"xor\",symmetricDifferenceBy:\"xorBy\",symmetricDifferenceWith:\"xorWith\",takeLast:\"takeRight\",takeLastWhile:\"takeRightWhile\",unapply:\"rest\",unnest:\"flatten\",useWith:\"overArgs\",where:\"conformsTo\",whereEq:\"isMatch\",zipObj:\"zipObject\"},t.aryMethod={1:[\"assignAll\",\"assignInAll\",\"attempt\",\"castArray\",\"ceil\",\"create\",\"curry\",\"curryRight\",\"defaultsAll\",\"defaultsDeepAll\",\"floor\",\"flow\",\"flowRight\",\"fromPairs\",\"invert\",\"iteratee\",\"memoize\",\"method\",\"mergeAll\",\"methodOf\",\"mixin\",\"nthArg\",\"over\",\"overEvery\",\"overSome\",\"rest\",\"reverse\",\"round\",\"runInContext\",\"spread\",\"template\",\"trim\",\"trimEnd\",\"trimStart\",\"uniqueId\",\"words\",\"zipAll\"],2:[\"add\",\"after\",\"ary\",\"assign\",\"assignAllWith\",\"assignIn\",\"assignInAllWith\",\"at\",\"before\",\"bind\",\"bindAll\",\"bindKey\",\"chunk\",\"cloneDeepWith\",\"cloneWith\",\"concat\",\"conformsTo\",\"countBy\",\"curryN\",\"curryRightN\",\"debounce\",\"defaults\",\"defaultsDeep\",\"defaultTo\",\"delay\",\"difference\",\"divide\",\"drop\",\"dropRight\",\"dropRightWhile\",\"dropWhile\",\"endsWith\",\"eq\",\"every\",\"filter\",\"find\",\"findIndex\",\"findKey\",\"findLast\",\"findLastIndex\",\"findLastKey\",\"flatMap\",\"flatMapDeep\",\"flattenDepth\",\"forEach\",\"forEachRight\",\"forIn\",\"forInRight\",\"forOwn\",\"forOwnRight\",\"get\",\"groupBy\",\"gt\",\"gte\",\"has\",\"hasIn\",\"includes\",\"indexOf\",\"intersection\",\"invertBy\",\"invoke\",\"invokeMap\",\"isEqual\",\"isMatch\",\"join\",\"keyBy\",\"lastIndexOf\",\"lt\",\"lte\",\"map\",\"mapKeys\",\"mapValues\",\"matchesProperty\",\"maxBy\",\"meanBy\",\"merge\",\"mergeAllWith\",\"minBy\",\"multiply\",\"nth\",\"omit\",\"omitBy\",\"overArgs\",\"pad\",\"padEnd\",\"padStart\",\"parseInt\",\"partial\",\"partialRight\",\"partition\",\"pick\",\"pickBy\",\"propertyOf\",\"pull\",\"pullAll\",\"pullAt\",\"random\",\"range\",\"rangeRight\",\"rearg\",\"reject\",\"remove\",\"repeat\",\"restFrom\",\"result\",\"sampleSize\",\"some\",\"sortBy\",\"sortedIndex\",\"sortedIndexOf\",\"sortedLastIndex\",\"sortedLastIndexOf\",\"sortedUniqBy\",\"split\",\"spreadFrom\",\"startsWith\",\"subtract\",\"sumBy\",\"take\",\"takeRight\",\"takeRightWhile\",\"takeWhile\",\"tap\",\"throttle\",\"thru\",\"times\",\"trimChars\",\"trimCharsEnd\",\"trimCharsStart\",\"truncate\",\"union\",\"uniqBy\",\"uniqWith\",\"unset\",\"unzipWith\",\"without\",\"wrap\",\"xor\",\"zip\",\"zipObject\",\"zipObjectDeep\"],3:[\"assignInWith\",\"assignWith\",\"clamp\",\"differenceBy\",\"differenceWith\",\"findFrom\",\"findIndexFrom\",\"findLastFrom\",\"findLastIndexFrom\",\"getOr\",\"includesFrom\",\"indexOfFrom\",\"inRange\",\"intersectionBy\",\"intersectionWith\",\"invokeArgs\",\"invokeArgsMap\",\"isEqualWith\",\"isMatchWith\",\"flatMapDepth\",\"lastIndexOfFrom\",\"mergeWith\",\"orderBy\",\"padChars\",\"padCharsEnd\",\"padCharsStart\",\"pullAllBy\",\"pullAllWith\",\"rangeStep\",\"rangeStepRight\",\"reduce\",\"reduceRight\",\"replace\",\"set\",\"slice\",\"sortedIndexBy\",\"sortedLastIndexBy\",\"transform\",\"unionBy\",\"unionWith\",\"update\",\"xorBy\",\"xorWith\",\"zipWith\"],4:[\"fill\",\"setWith\",\"updateWith\"]},t.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},t.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},t.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},t.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},t.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},t.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},t.realToAlias=function(){var e=Object.prototype.hasOwnProperty,n=t.aliasToReal,r={};for(var o in n){var s=n[o];e.call(r,s)?r[s].push(o):r[s]=[o]}return r}(),t.remap={assignAll:\"assign\",assignAllWith:\"assignWith\",assignInAll:\"assignIn\",assignInAllWith:\"assignInWith\",curryN:\"curry\",curryRightN:\"curryRight\",defaultsAll:\"defaults\",defaultsDeepAll:\"defaultsDeep\",findFrom:\"find\",findIndexFrom:\"findIndex\",findLastFrom:\"findLast\",findLastIndexFrom:\"findLastIndex\",getOr:\"get\",includesFrom:\"includes\",indexOfFrom:\"indexOf\",invokeArgs:\"invoke\",invokeArgsMap:\"invokeMap\",lastIndexOfFrom:\"lastIndexOf\",mergeAll:\"merge\",mergeAllWith:\"mergeWith\",padChars:\"pad\",padCharsEnd:\"padEnd\",padCharsStart:\"padStart\",propertyOf:\"get\",rangeStep:\"range\",rangeStepRight:\"rangeRight\",restFrom:\"rest\",spreadFrom:\"spread\",trimChars:\"trim\",trimCharsEnd:\"trimEnd\",trimCharsStart:\"trimStart\",zipAll:\"zip\"},t.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},t.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}},4269:(e,t,n)=>{e.exports={ary:n(39514),assign:n(44037),clone:n(66678),curry:n(40087),forEach:n(77412),isArray:n(1469),isError:n(64647),isFunction:n(23560),isWeakMap:n(81018),iteratee:n(72594),keys:n(280),rearg:n(4963),toInteger:n(40554),toPath:n(30084)}},72700:(e,t,n)=>{e.exports=n(28252)},92822:(e,t,n)=>{var r=n(84599),o=n(4269);e.exports=function(e,t,n){return r(o,e,t,n)}},69306:e=>{e.exports={}},28252:(e,t,n)=>{var r=n(92822)(\"set\",n(36968));r.placeholder=n(69306),e.exports=r},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},79095:(e,t,n)=>{var r=n(13),o=n(222);e.exports=function(e,t){return null!=e&&o(e,t,r)}},6557:e=>{e.exports=function(e){return e}},35694:(e,t,n)=>{var r=n(9454),o=n(37005),s=Object.prototype,i=s.hasOwnProperty,a=s.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,\"callee\")&&!a.call(e,\"callee\")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},98612:(e,t,n)=>{var r=n(23560),o=n(41780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},29246:(e,t,n)=>{var r=n(98612),o=n(37005);e.exports=function(e){return o(e)&&r(e)}},51584:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return!0===e||!1===e||o(e)&&\"[object Boolean]\"==r(e)}},44144:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=n(95062),s=t&&!t.nodeType&&t,i=s&&e&&!e.nodeType&&e,a=i&&i.exports===s?r.Buffer:void 0,l=(a?a.isBuffer:void 0)||o;e.exports=l},41609:(e,t,n)=>{var r=n(280),o=n(98882),s=n(35694),i=n(1469),a=n(98612),l=n(44144),c=n(25726),u=n(36719),p=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(a(e)&&(i(e)||\"string\"==typeof e||\"function\"==typeof e.splice||l(e)||u(e)||s(e)))return!e.length;var t=o(e);if(\"[object Map]\"==t||\"[object Set]\"==t)return!e.size;if(c(e))return!r(e).length;for(var n in e)if(p.call(e,n))return!1;return!0}},18446:(e,t,n)=>{var r=n(90939);e.exports=function(e,t){return r(e,t)}},64647:(e,t,n)=>{var r=n(44239),o=n(37005),s=n(68630);e.exports=function(e){if(!o(e))return!1;var t=r(e);return\"[object Error]\"==t||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!s(e)}},23560:(e,t,n)=>{var r=n(44239),o=n(13218);e.exports=function(e){if(!o(e))return!1;var t=r(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}},41780:e=>{e.exports=function(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},56688:(e,t,n)=>{var r=n(25588),o=n(7518),s=n(31167),i=s&&s.isMap,a=i?o(i):r;e.exports=a},45220:e=>{e.exports=function(e){return null===e}},81763:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return\"number\"==typeof e||o(e)&&\"[object Number]\"==r(e)}},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}},37005:e=>{e.exports=function(e){return null!=e&&\"object\"==typeof e}},68630:(e,t,n)=>{var r=n(44239),o=n(85924),s=n(37005),i=Function.prototype,a=Object.prototype,l=i.toString,c=a.hasOwnProperty,u=l.call(Object);e.exports=function(e){if(!s(e)||\"[object Object]\"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=c.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&l.call(n)==u}},72928:(e,t,n)=>{var r=n(29221),o=n(7518),s=n(31167),i=s&&s.isSet,a=i?o(i):r;e.exports=a},47037:(e,t,n)=>{var r=n(44239),o=n(1469),s=n(37005);e.exports=function(e){return\"string\"==typeof e||!o(e)&&s(e)&&\"[object String]\"==r(e)}},33448:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return\"symbol\"==typeof e||o(e)&&\"[object Symbol]\"==r(e)}},36719:(e,t,n)=>{var r=n(38749),o=n(7518),s=n(31167),i=s&&s.isTypedArray,a=i?o(i):r;e.exports=a},81018:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&\"[object WeakMap]\"==r(e)}},72594:(e,t,n)=>{var r=n(85990),o=n(67206);e.exports=function(e){return o(\"function\"==typeof e?e:r(e,1))}},3674:(e,t,n)=>{var r=n(14636),o=n(280),s=n(98612);e.exports=function(e){return s(e)?r(e):o(e)}},81704:(e,t,n)=>{var r=n(14636),o=n(10313),s=n(98612);e.exports=function(e){return s(e)?r(e,!0):o(e)}},10928:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},88306:(e,t,n)=>{var r=n(83369);function o(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],s=n.cache;if(s.has(o))return s.get(o);var i=e.apply(this,r);return n.cache=s.set(o,i)||s,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},82492:(e,t,n)=>{var r=n(42980),o=n(21463)((function(e,t,n){r(e,t,n)}));e.exports=o},94885:e=>{e.exports=function(e){if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}},50308:e=>{e.exports=function(){}},7771:(e,t,n)=>{var r=n(55639);e.exports=function(){return r.Date.now()}},57557:(e,t,n)=>{var r=n(29932),o=n(85990),s=n(57406),i=n(71811),a=n(98363),l=n(60696),c=n(99021),u=n(46904),p=c((function(e,t){var n={};if(null==e)return n;var c=!1;t=r(t,(function(t){return t=i(t,e),c||(c=t.length>1),t})),a(e,u(e),n),c&&(n=o(n,7,l));for(var p=t.length;p--;)s(n,t[p]);return n}));e.exports=p},39601:(e,t,n)=>{var r=n(40371),o=n(79152),s=n(15403),i=n(40327);e.exports=function(e){return s(e)?r(i(e)):o(e)}},4963:(e,t,n)=>{var r=n(97727),o=n(99021),s=o((function(e,t){return r(e,256,void 0,void 0,void 0,t)}));e.exports=s},54061:(e,t,n)=>{var r=n(62663),o=n(89881),s=n(67206),i=n(10107),a=n(1469);e.exports=function(e,t,n){var l=a(e)?r:i,c=arguments.length<3;return l(e,s(t,4),n,c,o)}},36968:(e,t,n)=>{var r=n(10611);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},59704:(e,t,n)=>{var r=n(82908),o=n(67206),s=n(5076),i=n(1469),a=n(16612);e.exports=function(e,t,n){var l=i(e)?r:s;return n&&a(e,t,n)&&(t=void 0),l(e,o(t,3))}},70479:e=>{e.exports=function(){return[]}},95062:e=>{e.exports=function(){return!1}},18601:(e,t,n)=>{var r=n(14841),o=1/0;e.exports=function(e){return e?(e=r(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},40554:(e,t,n)=>{var r=n(18601);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},7334:(e,t,n)=>{var r=n(79833);e.exports=function(e){return r(e).toLowerCase()}},14841:(e,t,n)=>{var r=n(27561),o=n(13218),s=n(33448),i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if(\"number\"==typeof e)return e;if(s(e))return NaN;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=r(e);var n=a.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):i.test(e)?NaN:+e}},30084:(e,t,n)=>{var r=n(29932),o=n(278),s=n(1469),i=n(33448),a=n(55514),l=n(40327),c=n(79833);e.exports=function(e){return s(e)?r(e,l):i(e)?[e]:o(a(c(e)))}},59881:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e){return r(e,o(e))}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?\"\":r(e)}},11700:(e,t,n)=>{var r=n(98805)(\"toUpperCase\");e.exports=r},58748:(e,t,n)=>{var r=n(49029),o=n(93157),s=n(79833),i=n(2757);e.exports=function(e,t,n){return e=s(e),void 0===(t=n?void 0:t)?o(e)?i(e):r(e):e.match(t)||[]}},8111:(e,t,n)=>{var r=n(96425),o=n(7548),s=n(9435),i=n(1469),a=n(37005),l=n(21913),c=Object.prototype.hasOwnProperty;function u(e){if(a(e)&&!i(e)&&!(e instanceof r)){if(e instanceof o)return e;if(c.call(e,\"__wrapped__\"))return l(e)}return new o(e)}u.prototype=s.prototype,u.prototype.constructor=u,e.exports=u},7287:(e,t,n)=>{var r=n(34865),o=n(1757);e.exports=function(e,t){return o(e||[],t||[],r)}},96470:(e,t,n)=>{\"use strict\";var r=n(47802),o=n(21102);t.highlight=i,t.highlightAuto=function(e,t){var n,a,l,c,u=t||{},p=u.subset||r.listLanguages(),h=u.prefix,f=p.length,d=-1;null==h&&(h=s);if(\"string\"!=typeof e)throw o(\"Expected `string` for value, got `%s`\",e);a={relevance:0,language:null,value:[]},n={relevance:0,language:null,value:[]};for(;++d<f;)c=p[d],r.getLanguage(c)&&((l=i(c,e,t)).language=c,l.relevance>a.relevance&&(a=l),l.relevance>n.relevance&&(a=n,n=l));a.language&&(n.secondBest=a);return n},t.registerLanguage=function(e,t){r.registerLanguage(e,t)},t.listLanguages=function(){return r.listLanguages()},t.registerAlias=function(e,t){var n,o=e;t&&((o={})[e]=t);for(n in o)r.registerAliases(o[n],{languageName:n})},a.prototype.addText=function(e){var t,n,r=this.stack;if(\"\"===e)return;t=r[r.length-1],(n=t.children[t.children.length-1])&&\"text\"===n.type?n.value+=e:t.children.push({type:\"text\",value:e})},a.prototype.addKeyword=function(e,t){this.openNode(t),this.addText(e),this.closeNode()},a.prototype.addSublanguage=function(e,t){var n=this.stack,r=n[n.length-1],o=e.rootNode.children,s=t?{type:\"element\",tagName:\"span\",properties:{className:[t]},children:o}:o;r.children=r.children.concat(s)},a.prototype.openNode=function(e){var t=this.stack,n=this.options.classPrefix+e,r=t[t.length-1],o={type:\"element\",tagName:\"span\",properties:{className:[n]},children:[]};r.children.push(o),t.push(o)},a.prototype.closeNode=function(){this.stack.pop()},a.prototype.closeAllNodes=l,a.prototype.finalize=l,a.prototype.toHTML=function(){return\"\"};var s=\"hljs-\";function i(e,t,n){var i,l=r.configure({}),c=(n||{}).prefix;if(\"string\"!=typeof e)throw o(\"Expected `string` for name, got `%s`\",e);if(!r.getLanguage(e))throw o(\"Unknown language: `%s` is not registered\",e);if(\"string\"!=typeof t)throw o(\"Expected `string` for value, got `%s`\",t);if(null==c&&(c=s),r.configure({__emitter:a,classPrefix:c}),i=r.highlight(t,{language:e,ignoreIllegals:!0}),r.configure(l||{}),i.errorRaised)throw i.errorRaised;return{relevance:i.relevance,language:i.language,value:i.emitter.rootNode.children}}function a(e){this.options=e,this.rootNode={children:[]},this.stack=[this.rootNode]}function l(){}},42566:(e,t,n)=>{const r=n(94885);function o(e){return\"string\"==typeof e?t=>t.element===e:e.constructor&&e.extend?t=>t instanceof e:e}class s{constructor(e){this.elements=e||[]}toValue(){return this.elements.map((e=>e.toValue()))}map(e,t){return this.elements.map(e,t)}flatMap(e,t){return this.map(e,t).reduce(((e,t)=>e.concat(t)),[])}compactMap(e,t){const n=[];return this.forEach((r=>{const o=e.bind(t)(r);o&&n.push(o)})),n}filter(e,t){return e=o(e),new s(this.elements.filter(e,t))}reject(e,t){return e=o(e),new s(this.elements.filter(r(e),t))}find(e,t){return e=o(e),this.elements.find(e,t)}forEach(e,t){this.elements.forEach(e,t)}reduce(e,t){return this.elements.reduce(e,t)}includes(e){return this.elements.some((t=>t.equals(e)))}shift(){return this.elements.shift()}unshift(e){this.elements.unshift(this.refract(e))}push(e){return this.elements.push(this.refract(e)),this}add(e){this.push(e)}get(e){return this.elements[e]}getValue(e){const t=this.elements[e];if(t)return t.toValue()}get length(){return this.elements.length}get isEmpty(){return 0===this.elements.length}get first(){return this.elements[0]}}\"undefined\"!=typeof Symbol&&(s.prototype[Symbol.iterator]=function(){return this.elements[Symbol.iterator]()}),e.exports=s},17645:e=>{class t{constructor(e,t){this.key=e,this.value=t}clone(){const e=new t;return this.key&&(e.key=this.key.clone()),this.value&&(e.value=this.value.clone()),e}}e.exports=t},78520:(e,t,n)=>{const r=n(45220),o=n(47037),s=n(81763),i=n(51584),a=n(13218),l=n(28219),c=n(99829);class u{constructor(e){this.elementMap={},this.elementDetection=[],this.Element=c.Element,this.KeyValuePair=c.KeyValuePair,e&&e.noDefault||this.useDefault(),this._attributeElementKeys=[],this._attributeElementArrayKeys=[]}use(e){return e.namespace&&e.namespace({base:this}),e.load&&e.load({base:this}),this}useDefault(){return this.register(\"null\",c.NullElement).register(\"string\",c.StringElement).register(\"number\",c.NumberElement).register(\"boolean\",c.BooleanElement).register(\"array\",c.ArrayElement).register(\"object\",c.ObjectElement).register(\"member\",c.MemberElement).register(\"ref\",c.RefElement).register(\"link\",c.LinkElement),this.detect(r,c.NullElement,!1).detect(o,c.StringElement,!1).detect(s,c.NumberElement,!1).detect(i,c.BooleanElement,!1).detect(Array.isArray,c.ArrayElement,!1).detect(a,c.ObjectElement,!1),this}register(e,t){return this._elements=void 0,this.elementMap[e]=t,this}unregister(e){return this._elements=void 0,delete this.elementMap[e],this}detect(e,t,n){return void 0===n||n?this.elementDetection.unshift([e,t]):this.elementDetection.push([e,t]),this}toElement(e){if(e instanceof this.Element)return e;let t;for(let n=0;n<this.elementDetection.length;n+=1){const r=this.elementDetection[n][0],o=this.elementDetection[n][1];if(r(e)){t=new o(e);break}}return t}getElementClass(e){const t=this.elementMap[e];return void 0===t?this.Element:t}fromRefract(e){return this.serialiser.deserialise(e)}toRefract(e){return this.serialiser.serialise(e)}get elements(){return void 0===this._elements&&(this._elements={Element:this.Element},Object.keys(this.elementMap).forEach((e=>{const t=e[0].toUpperCase()+e.substr(1);this._elements[t]=this.elementMap[e]}))),this._elements}get serialiser(){return new l(this)}}l.prototype.Namespace=u,e.exports=u},87526:(e,t,n)=>{const r=n(94885),o=n(42566);class s extends o{map(e,t){return this.elements.map((n=>e.bind(t)(n.value,n.key,n)))}filter(e,t){return new s(this.elements.filter((n=>e.bind(t)(n.value,n.key,n))))}reject(e,t){return this.filter(r(e.bind(t)))}forEach(e,t){return this.elements.forEach(((n,r)=>{e.bind(t)(n.value,n.key,n,r)}))}keys(){return this.map(((e,t)=>t.toValue()))}values(){return this.map((e=>e.toValue()))}}e.exports=s},99829:(e,t,n)=>{const r=n(3079),o=n(96295),s=n(16036),i=n(91090),a=n(18866),l=n(35804),c=n(5946),u=n(76735),p=n(59964),h=n(38588),f=n(42566),d=n(87526),m=n(17645);function g(e){if(e instanceof r)return e;if(\"string\"==typeof e)return new s(e);if(\"number\"==typeof e)return new i(e);if(\"boolean\"==typeof e)return new a(e);if(null===e)return new o;if(Array.isArray(e))return new l(e.map(g));if(\"object\"==typeof e){return new u(e)}return e}r.prototype.ObjectElement=u,r.prototype.RefElement=h,r.prototype.MemberElement=c,r.prototype.refract=g,f.prototype.refract=g,e.exports={Element:r,NullElement:o,StringElement:s,NumberElement:i,BooleanElement:a,ArrayElement:l,MemberElement:c,ObjectElement:u,LinkElement:p,RefElement:h,refract:g,ArraySlice:f,ObjectSlice:d,KeyValuePair:m}},59964:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e||[],t,n),this.element=\"link\"}get relation(){return this.attributes.get(\"relation\")}set relation(e){this.attributes.set(\"relation\",e)}get href(){return this.attributes.get(\"href\")}set href(e){this.attributes.set(\"href\",e)}}},38588:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e||[],t,n),this.element=\"ref\",this.path||(this.path=\"element\")}get path(){return this.attributes.get(\"path\")}set path(e){this.attributes.set(\"path\",e)}}},43500:(e,t,n)=>{const r=n(78520),o=n(99829);t.lS=r,n(17645),t.O4=o.ArraySlice,o.ObjectSlice,t.W_=o.Element,t.RP=o.StringElement,t.VL=o.NumberElement,t.hh=o.BooleanElement,t.zr=o.NullElement,t.ON=o.ArrayElement,t.Sb=o.ObjectElement,t.c6=o.MemberElement,t.tK=o.RefElement,t.EA=o.LinkElement,t.Qc=o.refract,n(28219),n(3414)},35804:(e,t,n)=>{const r=n(94885),o=n(3079),s=n(42566);class i extends o{constructor(e,t,n){super(e||[],t,n),this.element=\"array\"}primitive(){return\"array\"}get(e){return this.content[e]}getValue(e){const t=this.get(e);if(t)return t.toValue()}getIndex(e){return this.content[e]}set(e,t){return this.content[e]=this.refract(t),this}remove(e){const t=this.content.splice(e,1);return t.length?t[0]:null}map(e,t){return this.content.map(e,t)}flatMap(e,t){return this.map(e,t).reduce(((e,t)=>e.concat(t)),[])}compactMap(e,t){const n=[];return this.forEach((r=>{const o=e.bind(t)(r);o&&n.push(o)})),n}filter(e,t){return new s(this.content.filter(e,t))}reject(e,t){return this.filter(r(e),t)}reduce(e,t){let n,r;void 0!==t?(n=0,r=this.refract(t)):(n=1,r=\"object\"===this.primitive()?this.first.value:this.first);for(let t=n;t<this.length;t+=1){const n=this.content[t];r=\"object\"===this.primitive()?this.refract(e(r,n.value,n.key,n,this)):this.refract(e(r,n,t,this))}return r}forEach(e,t){this.content.forEach(((n,r)=>{e.bind(t)(n,this.refract(r))}))}shift(){return this.content.shift()}unshift(e){this.content.unshift(this.refract(e))}push(e){return this.content.push(this.refract(e)),this}add(e){this.push(e)}findElements(e,t){const n=t||{},r=!!n.recursive,o=void 0===n.results?[]:n.results;return this.forEach(((t,n,s)=>{r&&void 0!==t.findElements&&t.findElements(e,{results:o,recursive:r}),e(t,n,s)&&o.push(t)})),o}find(e){return new s(this.findElements(e,{recursive:!0}))}findByElement(e){return this.find((t=>t.element===e))}findByClass(e){return this.find((t=>t.classes.includes(e)))}getById(e){return this.find((t=>t.id.toValue()===e)).first}includes(e){return this.content.some((t=>t.equals(e)))}contains(e){return this.includes(e)}empty(){return new this.constructor([])}\"fantasy-land/empty\"(){return this.empty()}concat(e){return new this.constructor(this.content.concat(e.content))}\"fantasy-land/concat\"(e){return this.concat(e)}\"fantasy-land/map\"(e){return new this.constructor(this.map(e))}\"fantasy-land/chain\"(e){return this.map((t=>e(t)),this).reduce(((e,t)=>e.concat(t)),this.empty())}\"fantasy-land/filter\"(e){return new this.constructor(this.content.filter(e))}\"fantasy-land/reduce\"(e,t){return this.content.reduce(e,t)}get length(){return this.content.length}get isEmpty(){return 0===this.content.length}get first(){return this.getIndex(0)}get second(){return this.getIndex(1)}get last(){return this.getIndex(this.length-1)}}i.empty=function(){return new this},i[\"fantasy-land/empty\"]=i.empty,\"undefined\"!=typeof Symbol&&(i.prototype[Symbol.iterator]=function(){return this.content[Symbol.iterator]()}),e.exports=i},18866:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e,t,n),this.element=\"boolean\"}primitive(){return\"boolean\"}}},3079:(e,t,n)=>{const r=n(18446),o=n(17645),s=n(42566);class i{constructor(e,t,n){t&&(this.meta=t),n&&(this.attributes=n),this.content=e}freeze(){Object.isFrozen(this)||(this._meta&&(this.meta.parent=this,this.meta.freeze()),this._attributes&&(this.attributes.parent=this,this.attributes.freeze()),this.children.forEach((e=>{e.parent=this,e.freeze()}),this),this.content&&Array.isArray(this.content)&&Object.freeze(this.content),Object.freeze(this))}primitive(){}clone(){const e=new this.constructor;return e.element=this.element,this.meta.length&&(e._meta=this.meta.clone()),this.attributes.length&&(e._attributes=this.attributes.clone()),this.content?this.content.clone?e.content=this.content.clone():Array.isArray(this.content)?e.content=this.content.map((e=>e.clone())):e.content=this.content:e.content=this.content,e}toValue(){return this.content instanceof i?this.content.toValue():this.content instanceof o?{key:this.content.key.toValue(),value:this.content.value?this.content.value.toValue():void 0}:this.content&&this.content.map?this.content.map((e=>e.toValue()),this):this.content}toRef(e){if(\"\"===this.id.toValue())throw Error(\"Cannot create reference to an element that does not contain an ID\");const t=new this.RefElement(this.id.toValue());return e&&(t.path=e),t}findRecursive(...e){if(arguments.length>1&&!this.isFrozen)throw new Error(\"Cannot find recursive with multiple element names without first freezing the element. Call `element.freeze()`\");const t=e.pop();let n=new s;const r=(e,t)=>(e.push(t),e),i=(e,n)=>{n.element===t&&e.push(n);const s=n.findRecursive(t);return s&&s.reduce(r,e),n.content instanceof o&&(n.content.key&&i(e,n.content.key),n.content.value&&i(e,n.content.value)),e};return this.content&&(this.content.element&&i(n,this.content),Array.isArray(this.content)&&this.content.reduce(i,n)),e.isEmpty||(n=n.filter((t=>{let n=t.parents.map((e=>e.element));for(const t in e){const r=e[t],o=n.indexOf(r);if(-1===o)return!1;n=n.splice(0,o)}return!0}))),n}set(e){return this.content=e,this}equals(e){return r(this.toValue(),e)}getMetaProperty(e,t){if(!this.meta.hasKey(e)){if(this.isFrozen){const e=this.refract(t);return e.freeze(),e}this.meta.set(e,t)}return this.meta.get(e)}setMetaProperty(e,t){this.meta.set(e,t)}get element(){return this._storedElement||\"element\"}set element(e){this._storedElement=e}get content(){return this._content}set content(e){if(e instanceof i)this._content=e;else if(e instanceof s)this.content=e.elements;else if(\"string\"==typeof e||\"number\"==typeof e||\"boolean\"==typeof e||\"null\"===e||null==e)this._content=e;else if(e instanceof o)this._content=e;else if(Array.isArray(e))this._content=e.map(this.refract);else{if(\"object\"!=typeof e)throw new Error(\"Cannot set content to given value\");this._content=Object.keys(e).map((t=>new this.MemberElement(t,e[t])))}}get meta(){if(!this._meta){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._meta=new this.ObjectElement}return this._meta}set meta(e){e instanceof this.ObjectElement?this._meta=e:this.meta.set(e||{})}get attributes(){if(!this._attributes){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._attributes=new this.ObjectElement}return this._attributes}set attributes(e){e instanceof this.ObjectElement?this._attributes=e:this.attributes.set(e||{})}get id(){return this.getMetaProperty(\"id\",\"\")}set id(e){this.setMetaProperty(\"id\",e)}get classes(){return this.getMetaProperty(\"classes\",[])}set classes(e){this.setMetaProperty(\"classes\",e)}get title(){return this.getMetaProperty(\"title\",\"\")}set title(e){this.setMetaProperty(\"title\",e)}get description(){return this.getMetaProperty(\"description\",\"\")}set description(e){this.setMetaProperty(\"description\",e)}get links(){return this.getMetaProperty(\"links\",[])}set links(e){this.setMetaProperty(\"links\",e)}get isFrozen(){return Object.isFrozen(this)}get parents(){let{parent:e}=this;const t=new s;for(;e;)t.push(e),e=e.parent;return t}get children(){if(Array.isArray(this.content))return new s(this.content);if(this.content instanceof o){const e=new s([this.content.key]);return this.content.value&&e.push(this.content.value),e}return this.content instanceof i?new s([this.content]):new s}get recursiveChildren(){const e=new s;return this.children.forEach((t=>{e.push(t),t.recursiveChildren.forEach((t=>{e.push(t)}))})),e}}e.exports=i},5946:(e,t,n)=>{const r=n(17645),o=n(3079);e.exports=class extends o{constructor(e,t,n,o){super(new r,n,o),this.element=\"member\",this.key=e,this.value=t}get key(){return this.content.key}set key(e){this.content.key=this.refract(e)}get value(){return this.content.value}set value(e){this.content.value=this.refract(e)}}},96295:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e||null,t,n),this.element=\"null\"}primitive(){return\"null\"}set(){return new Error(\"Cannot set the value of null\")}}},91090:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e,t,n),this.element=\"number\"}primitive(){return\"number\"}}},76735:(e,t,n)=>{const r=n(94885),o=n(13218),s=n(35804),i=n(5946),a=n(87526);e.exports=class extends s{constructor(e,t,n){super(e||[],t,n),this.element=\"object\"}primitive(){return\"object\"}toValue(){return this.content.reduce(((e,t)=>(e[t.key.toValue()]=t.value?t.value.toValue():void 0,e)),{})}get(e){const t=this.getMember(e);if(t)return t.value}getMember(e){if(void 0!==e)return this.content.find((t=>t.key.toValue()===e))}remove(e){let t=null;return this.content=this.content.filter((n=>n.key.toValue()!==e||(t=n,!1))),t}getKey(e){const t=this.getMember(e);if(t)return t.key}set(e,t){if(o(e))return Object.keys(e).forEach((t=>{this.set(t,e[t])})),this;const n=e,r=this.getMember(n);return r?r.value=t:this.content.push(new i(n,t)),this}keys(){return this.content.map((e=>e.key.toValue()))}values(){return this.content.map((e=>e.value.toValue()))}hasKey(e){return this.content.some((t=>t.key.equals(e)))}items(){return this.content.map((e=>[e.key.toValue(),e.value.toValue()]))}map(e,t){return this.content.map((n=>e.bind(t)(n.value,n.key,n)))}compactMap(e,t){const n=[];return this.forEach(((r,o,s)=>{const i=e.bind(t)(r,o,s);i&&n.push(i)})),n}filter(e,t){return new a(this.content).filter(e,t)}reject(e,t){return this.filter(r(e),t)}forEach(e,t){return this.content.forEach((n=>e.bind(t)(n.value,n.key,n)))}}},16036:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e,t,n),this.element=\"string\"}primitive(){return\"string\"}get length(){return this.content.length}}},3414:(e,t,n)=>{const r=n(28219);e.exports=class extends r{serialise(e){if(!(e instanceof this.namespace.elements.Element))throw new TypeError(`Given element \\`${e}\\` is not an Element instance`);let t;e._attributes&&e.attributes.get(\"variable\")&&(t=e.attributes.get(\"variable\"));const n={element:e.element};e._meta&&e._meta.length>0&&(n.meta=this.serialiseObject(e.meta));const r=\"enum\"===e.element||-1!==e.attributes.keys().indexOf(\"enumerations\");if(r){const t=this.enumSerialiseAttributes(e);t&&(n.attributes=t)}else if(e._attributes&&e._attributes.length>0){let{attributes:r}=e;r.get(\"metadata\")&&(r=r.clone(),r.set(\"meta\",r.get(\"metadata\")),r.remove(\"metadata\")),\"member\"===e.element&&t&&(r=r.clone(),r.remove(\"variable\")),r.length>0&&(n.attributes=this.serialiseObject(r))}if(r)n.content=this.enumSerialiseContent(e,n);else if(this[`${e.element}SerialiseContent`])n.content=this[`${e.element}SerialiseContent`](e,n);else if(void 0!==e.content){let r;t&&e.content.key?(r=e.content.clone(),r.key.attributes.set(\"variable\",t),r=this.serialiseContent(r)):r=this.serialiseContent(e.content),this.shouldSerialiseContent(e,r)&&(n.content=r)}else this.shouldSerialiseContent(e,e.content)&&e instanceof this.namespace.elements.Array&&(n.content=[]);return n}shouldSerialiseContent(e,t){return\"parseResult\"===e.element||\"httpRequest\"===e.element||\"httpResponse\"===e.element||\"category\"===e.element||\"link\"===e.element||void 0!==t&&(!Array.isArray(t)||0!==t.length)}refSerialiseContent(e,t){return delete t.attributes,{href:e.toValue(),path:e.path.toValue()}}sourceMapSerialiseContent(e){return e.toValue()}dataStructureSerialiseContent(e){return[this.serialiseContent(e.content)]}enumSerialiseAttributes(e){const t=e.attributes.clone(),n=t.remove(\"enumerations\")||new this.namespace.elements.Array([]),r=t.get(\"default\");let o=t.get(\"samples\")||new this.namespace.elements.Array([]);if(r&&r.content&&(r.content.attributes&&r.content.attributes.remove(\"typeAttributes\"),t.set(\"default\",new this.namespace.elements.Array([r.content]))),o.forEach((e=>{e.content&&e.content.element&&e.content.attributes.remove(\"typeAttributes\")})),e.content&&0!==n.length&&o.unshift(e.content),o=o.map((e=>e instanceof this.namespace.elements.Array?[e]:new this.namespace.elements.Array([e.content]))),o.length&&t.set(\"samples\",o),t.length>0)return this.serialiseObject(t)}enumSerialiseContent(e){if(e._attributes){const t=e.attributes.get(\"enumerations\");if(t&&t.length>0)return t.content.map((e=>{const t=e.clone();return t.attributes.remove(\"typeAttributes\"),this.serialise(t)}))}if(e.content){const t=e.content.clone();return t.attributes.remove(\"typeAttributes\"),[this.serialise(t)]}return[]}deserialise(e){if(\"string\"==typeof e)return new this.namespace.elements.String(e);if(\"number\"==typeof e)return new this.namespace.elements.Number(e);if(\"boolean\"==typeof e)return new this.namespace.elements.Boolean(e);if(null===e)return new this.namespace.elements.Null;if(Array.isArray(e))return new this.namespace.elements.Array(e.map(this.deserialise,this));const t=this.namespace.getElementClass(e.element),n=new t;n.element!==e.element&&(n.element=e.element),e.meta&&this.deserialiseObject(e.meta,n.meta),e.attributes&&this.deserialiseObject(e.attributes,n.attributes);const r=this.deserialiseContent(e.content);if(void 0===r&&null!==n.content||(n.content=r),\"enum\"===n.element){n.content&&n.attributes.set(\"enumerations\",n.content);let e=n.attributes.get(\"samples\");if(n.attributes.remove(\"samples\"),e){const r=e;e=new this.namespace.elements.Array,r.forEach((r=>{r.forEach((r=>{const o=new t(r);o.element=n.element,e.push(o)}))}));const o=e.shift();n.content=o?o.content:void 0,n.attributes.set(\"samples\",e)}else n.content=void 0;let r=n.attributes.get(\"default\");if(r&&r.length>0){r=r.get(0);const e=new t(r);e.element=n.element,n.attributes.set(\"default\",e)}}else if(\"dataStructure\"===n.element&&Array.isArray(n.content))[n.content]=n.content;else if(\"category\"===n.element){const e=n.attributes.get(\"meta\");e&&(n.attributes.set(\"metadata\",e),n.attributes.remove(\"meta\"))}else\"member\"===n.element&&n.key&&n.key._attributes&&n.key._attributes.getValue(\"variable\")&&(n.attributes.set(\"variable\",n.key.attributes.get(\"variable\")),n.key.attributes.remove(\"variable\"));return n}serialiseContent(e){if(e instanceof this.namespace.elements.Element)return this.serialise(e);if(e instanceof this.namespace.KeyValuePair){const t={key:this.serialise(e.key)};return e.value&&(t.value=this.serialise(e.value)),t}return e&&e.map?e.map(this.serialise,this):e}deserialiseContent(e){if(e){if(e.element)return this.deserialise(e);if(e.key){const t=new this.namespace.KeyValuePair(this.deserialise(e.key));return e.value&&(t.value=this.deserialise(e.value)),t}if(e.map)return e.map(this.deserialise,this)}return e}shouldRefract(e){return!!(e._attributes&&e.attributes.keys().length||e._meta&&e.meta.keys().length)||\"enum\"!==e.element&&(e.element!==e.primitive()||\"member\"===e.element)}convertKeyToRefract(e,t){return this.shouldRefract(t)?this.serialise(t):\"enum\"===t.element?this.serialiseEnum(t):\"array\"===t.element?t.map((t=>this.shouldRefract(t)||\"default\"===e?this.serialise(t):\"array\"===t.element||\"object\"===t.element||\"enum\"===t.element?t.children.map((e=>this.serialise(e))):t.toValue())):\"object\"===t.element?(t.content||[]).map(this.serialise,this):t.toValue()}serialiseEnum(e){return e.children.map((e=>this.serialise(e)))}serialiseObject(e){const t={};return e.forEach(((e,n)=>{if(e){const r=n.toValue();t[r]=this.convertKeyToRefract(r,e)}})),t}deserialiseObject(e,t){Object.keys(e).forEach((n=>{t.set(n,this.deserialise(e[n]))}))}}},28219:e=>{e.exports=class{constructor(e){this.namespace=e||new this.Namespace}serialise(e){if(!(e instanceof this.namespace.elements.Element))throw new TypeError(`Given element \\`${e}\\` is not an Element instance`);const t={element:e.element};e._meta&&e._meta.length>0&&(t.meta=this.serialiseObject(e.meta)),e._attributes&&e._attributes.length>0&&(t.attributes=this.serialiseObject(e.attributes));const n=this.serialiseContent(e.content);return void 0!==n&&(t.content=n),t}deserialise(e){if(!e.element)throw new Error(\"Given value is not an object containing an element name\");const t=new(this.namespace.getElementClass(e.element));t.element!==e.element&&(t.element=e.element),e.meta&&this.deserialiseObject(e.meta,t.meta),e.attributes&&this.deserialiseObject(e.attributes,t.attributes);const n=this.deserialiseContent(e.content);return void 0===n&&null!==t.content||(t.content=n),t}serialiseContent(e){if(e instanceof this.namespace.elements.Element)return this.serialise(e);if(e instanceof this.namespace.KeyValuePair){const t={key:this.serialise(e.key)};return e.value&&(t.value=this.serialise(e.value)),t}if(e&&e.map){if(0===e.length)return;return e.map(this.serialise,this)}return e}deserialiseContent(e){if(e){if(e.element)return this.deserialise(e);if(e.key){const t=new this.namespace.KeyValuePair(this.deserialise(e.key));return e.value&&(t.value=this.deserialise(e.value)),t}if(e.map)return e.map(this.deserialise,this)}return e}serialiseObject(e){const t={};if(e.forEach(((e,n)=>{e&&(t[n.toValue()]=this.serialise(e))})),0!==Object.keys(t).length)return t}deserialiseObject(e,t){Object.keys(e).forEach((n=>{t.set(n,this.deserialise(e[n]))}))}}},27418:e=>{\"use strict\";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){r[e]=e})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,o){for(var s,i,a=function(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),l=1;l<arguments.length;l++){for(var c in s=Object(arguments[l]))n.call(s,c)&&(a[c]=s[c]);if(t){i=t(s);for(var u=0;u<i.length;u++)r.call(s,i[u])&&(a[i[u]]=s[i[u]])}}return a}},70631:(e,t,n)=>{var r=\"function\"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,\"size\"):null,s=r&&o&&\"function\"==typeof o.get?o.get:null,i=r&&Map.prototype.forEach,a=\"function\"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&a?Object.getOwnPropertyDescriptor(Set.prototype,\"size\"):null,c=a&&l&&\"function\"==typeof l.get?l.get:null,u=a&&Set.prototype.forEach,p=\"function\"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h=\"function\"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,f=\"function\"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,d=Boolean.prototype.valueOf,m=Object.prototype.toString,g=Function.prototype.toString,y=String.prototype.match,v=String.prototype.slice,b=String.prototype.replace,w=String.prototype.toUpperCase,E=String.prototype.toLowerCase,x=RegExp.prototype.test,S=Array.prototype.concat,_=Array.prototype.join,j=Array.prototype.slice,O=Math.floor,k=\"function\"==typeof BigInt?BigInt.prototype.valueOf:null,A=Object.getOwnPropertySymbols,C=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?Symbol.prototype.toString:null,P=\"function\"==typeof Symbol&&\"object\"==typeof Symbol.iterator,N=\"function\"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===P||\"symbol\")?Symbol.toStringTag:null,I=Object.prototype.propertyIsEnumerable,T=(\"function\"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function R(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||x.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(\"number\"==typeof e){var r=e<0?-O(-e):O(e);if(r!==e){var o=String(r),s=v.call(t,o.length+1);return b.call(o,n,\"$&_\")+\".\"+b.call(b.call(s,/([0-9]{3})/g,\"$&_\"),/_$/,\"\")}}return b.call(t,n,\"$&_\")}var M=n(24654),D=M.custom,F=U(D)?D:null;function L(e,t,n){var r=\"double\"===(n.quoteStyle||t)?'\"':\"'\";return r+e+r}function B(e){return b.call(String(e),/\"/g,\"&quot;\")}function $(e){return!(\"[object Array]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}function q(e){return!(\"[object RegExp]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}function U(e){if(P)return e&&\"object\"==typeof e&&e instanceof Symbol;if(\"symbol\"==typeof e)return!0;if(!e||\"object\"!=typeof e||!C)return!1;try{return C.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,r,o){var a=n||{};if(V(a,\"quoteStyle\")&&\"single\"!==a.quoteStyle&&\"double\"!==a.quoteStyle)throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');if(V(a,\"maxStringLength\")&&(\"number\"==typeof a.maxStringLength?a.maxStringLength<0&&a.maxStringLength!==1/0:null!==a.maxStringLength))throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');var l=!V(a,\"customInspect\")||a.customInspect;if(\"boolean\"!=typeof l&&\"symbol\"!==l)throw new TypeError(\"option \\\"customInspect\\\", if provided, must be `true`, `false`, or `'symbol'`\");if(V(a,\"indent\")&&null!==a.indent&&\"\\t\"!==a.indent&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');if(V(a,\"numericSeparator\")&&\"boolean\"!=typeof a.numericSeparator)throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');var m=a.numericSeparator;if(void 0===t)return\"undefined\";if(null===t)return\"null\";if(\"boolean\"==typeof t)return t?\"true\":\"false\";if(\"string\"==typeof t)return K(t,a);if(\"number\"==typeof t){if(0===t)return 1/0/t>0?\"0\":\"-0\";var w=String(t);return m?R(t,w):w}if(\"bigint\"==typeof t){var x=String(t)+\"n\";return m?R(t,x):x}var O=void 0===a.depth?5:a.depth;if(void 0===r&&(r=0),r>=O&&O>0&&\"object\"==typeof t)return $(t)?\"[Array]\":\"[Object]\";var A=function(e,t){var n;if(\"\\t\"===e.indent)n=\"\\t\";else{if(!(\"number\"==typeof e.indent&&e.indent>0))return null;n=_.call(Array(e.indent+1),\" \")}return{base:n,prev:_.call(Array(t+1),n)}}(a,r);if(void 0===o)o=[];else if(J(o,t)>=0)return\"[Circular]\";function D(t,n,s){if(n&&(o=j.call(o)).push(n),s){var i={depth:a.depth};return V(a,\"quoteStyle\")&&(i.quoteStyle=a.quoteStyle),e(t,i,r+1,o)}return e(t,a,r+1,o)}if(\"function\"==typeof t&&!q(t)){var z=function(e){if(e.name)return e.name;var t=y.call(g.call(e),/^function\\s*([\\w$]+)/);if(t)return t[1];return null}(t),H=Q(t,D);return\"[Function\"+(z?\": \"+z:\" (anonymous)\")+\"]\"+(H.length>0?\" { \"+_.call(H,\", \")+\" }\":\"\")}if(U(t)){var ee=P?b.call(String(t),/^(Symbol\\(.*\\))_[^)]*$/,\"$1\"):C.call(t);return\"object\"!=typeof t||P?ee:G(ee)}if(function(e){if(!e||\"object\"!=typeof e)return!1;if(\"undefined\"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return\"string\"==typeof e.nodeName&&\"function\"==typeof e.getAttribute}(t)){for(var te=\"<\"+E.call(String(t.nodeName)),ne=t.attributes||[],re=0;re<ne.length;re++)te+=\" \"+ne[re].name+\"=\"+L(B(ne[re].value),\"double\",a);return te+=\">\",t.childNodes&&t.childNodes.length&&(te+=\"...\"),te+=\"</\"+E.call(String(t.nodeName))+\">\"}if($(t)){if(0===t.length)return\"[]\";var oe=Q(t,D);return A&&!function(e){for(var t=0;t<e.length;t++)if(J(e[t],\"\\n\")>=0)return!1;return!0}(oe)?\"[\"+X(oe,A)+\"]\":\"[ \"+_.call(oe,\", \")+\" ]\"}if(function(e){return!(\"[object Error]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t)){var se=Q(t,D);return\"cause\"in Error.prototype||!(\"cause\"in t)||I.call(t,\"cause\")?0===se.length?\"[\"+String(t)+\"]\":\"{ [\"+String(t)+\"] \"+_.call(se,\", \")+\" }\":\"{ [\"+String(t)+\"] \"+_.call(S.call(\"[cause]: \"+D(t.cause),se),\", \")+\" }\"}if(\"object\"==typeof t&&l){if(F&&\"function\"==typeof t[F]&&M)return M(t,{depth:O-r});if(\"symbol\"!==l&&\"function\"==typeof t.inspect)return t.inspect()}if(function(e){if(!s||!e||\"object\"!=typeof e)return!1;try{s.call(e);try{c.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var ie=[];return i&&i.call(t,(function(e,n){ie.push(D(n,t,!0)+\" => \"+D(e,t))})),Y(\"Map\",s.call(t),ie,A)}if(function(e){if(!c||!e||\"object\"!=typeof e)return!1;try{c.call(e);try{s.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var ae=[];return u&&u.call(t,(function(e){ae.push(D(e,t))})),Y(\"Set\",c.call(t),ae,A)}if(function(e){if(!p||!e||\"object\"!=typeof e)return!1;try{p.call(e,p);try{h.call(e,h)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Z(\"WeakMap\");if(function(e){if(!h||!e||\"object\"!=typeof e)return!1;try{h.call(e,h);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Z(\"WeakSet\");if(function(e){if(!f||!e||\"object\"!=typeof e)return!1;try{return f.call(e),!0}catch(e){}return!1}(t))return Z(\"WeakRef\");if(function(e){return!(\"[object Number]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t))return G(D(Number(t)));if(function(e){if(!e||\"object\"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(e){}return!1}(t))return G(D(k.call(t)));if(function(e){return!(\"[object Boolean]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t))return G(d.call(t));if(function(e){return!(\"[object String]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t))return G(D(String(t)));if(!function(e){return!(\"[object Date]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t)&&!q(t)){var le=Q(t,D),ce=T?T(t)===Object.prototype:t instanceof Object||t.constructor===Object,ue=t instanceof Object?\"\":\"null prototype\",pe=!ce&&N&&Object(t)===t&&N in t?v.call(W(t),8,-1):ue?\"Object\":\"\",he=(ce||\"function\"!=typeof t.constructor?\"\":t.constructor.name?t.constructor.name+\" \":\"\")+(pe||ue?\"[\"+_.call(S.call([],pe||[],ue||[]),\": \")+\"] \":\"\");return 0===le.length?he+\"{}\":A?he+\"{\"+X(le,A)+\"}\":he+\"{ \"+_.call(le,\", \")+\" }\"}return String(t)};var z=Object.prototype.hasOwnProperty||function(e){return e in this};function V(e,t){return z.call(e,t)}function W(e){return m.call(e)}function J(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function K(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r=\"... \"+n+\" more character\"+(n>1?\"s\":\"\");return K(v.call(e,0,t.maxStringLength),t)+r}return L(b.call(b.call(e,/(['\\\\])/g,\"\\\\$1\"),/[\\x00-\\x1f]/g,H),\"single\",t)}function H(e){var t=e.charCodeAt(0),n={8:\"b\",9:\"t\",10:\"n\",12:\"f\",13:\"r\"}[t];return n?\"\\\\\"+n:\"\\\\x\"+(t<16?\"0\":\"\")+w.call(t.toString(16))}function G(e){return\"Object(\"+e+\")\"}function Z(e){return e+\" { ? }\"}function Y(e,t,n,r){return e+\" (\"+t+\") {\"+(r?X(n,r):_.call(n,\", \"))+\"}\"}function X(e,t){if(0===e.length)return\"\";var n=\"\\n\"+t.prev+t.base;return n+_.call(e,\",\"+n)+\"\\n\"+t.prev}function Q(e,t){var n=$(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=V(e,o)?t(e[o],e):\"\"}var s,i=\"function\"==typeof A?A(e):[];if(P){s={};for(var a=0;a<i.length;a++)s[\"$\"+i[a]]=i[a]}for(var l in e)V(e,l)&&(n&&String(Number(l))===l&&l<e.length||P&&s[\"$\"+l]instanceof Symbol||(x.call(/[^\\w$]/,l)?r.push(t(l,e)+\": \"+t(e[l],e)):r.push(l+\": \"+t(e[l],e))));if(\"function\"==typeof A)for(var c=0;c<i.length;c++)I.call(e,i[c])&&r.push(\"[\"+t(i[c])+\"]: \"+t(e[i[c]],e));return r}},34155:e=>{var t,n,r=e.exports={};function o(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t=\"function\"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{n=\"function\"==typeof clearTimeout?clearTimeout:s}catch(e){n=s}}();var a,l=[],c=!1,u=-1;function p(){c&&a&&(c=!1,a.length?l=a.concat(l):u=-1,l.length&&h())}function h(){if(!c){var e=i(p);c=!0;for(var t=l.length;t;){for(a=l,l=[];++u<t;)a&&a[u].run();u=-1,t=l.length}a=null,c=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===s||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function d(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new f(e,t)),1!==l.length||c||i(h)},f.prototype.run=function(){this.fun.apply(null,this.array)},r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.version=\"\",r.versions={},r.on=d,r.addListener=d,r.once=d,r.off=d,r.removeListener=d,r.removeAllListeners=d,r.emit=d,r.prependListener=d,r.prependOnceListener=d,r.listeners=function(e){return[]},r.binding=function(e){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(e){throw new Error(\"process.chdir is not supported\")},r.umask=function(){return 0}},92703:(e,t,n)=>{\"use strict\";var r=n(50414);function o(){}function s(){}s.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,s,i){if(i!==r){var a=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw a.name=\"Invariant Violation\",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:s,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{\"use strict\";e.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},55798:e=>{\"use strict\";var t=String.prototype.replace,n=/%20/g,r=\"RFC1738\",o=\"RFC3986\";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,\"+\")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},80129:(e,t,n)=>{\"use strict\";var r=n(58261),o=n(55235),s=n(55798);e.exports={formats:s,parse:o,stringify:r}},55235:(e,t,n)=>{\"use strict\";var r=n(12769),o=Object.prototype.hasOwnProperty,s=Array.isArray,i={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:\"utf-8\",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:\"&\",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},a=function(e){return e.replace(/&#(\\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},l=function(e,t){return e&&\"string\"==typeof e&&t.comma&&e.indexOf(\",\")>-1?e.split(\",\"):e},c=function(e,t,n,r){if(e){var s=n.allowDots?e.replace(/\\.([^.[]+)/g,\"[$1]\"):e,i=/(\\[[^[\\]]*])/g,a=n.depth>0&&/(\\[[^[\\]]*])/.exec(s),c=a?s.slice(0,a.index):s,u=[];if(c){if(!n.plainObjects&&o.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}for(var p=0;n.depth>0&&null!==(a=i.exec(s))&&p<n.depth;){if(p+=1,!n.plainObjects&&o.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(a[1])}return a&&u.push(\"[\"+s.slice(a.index)+\"]\"),function(e,t,n,r){for(var o=r?t:l(t,n),s=e.length-1;s>=0;--s){var i,a=e[s];if(\"[]\"===a&&n.parseArrays)i=[].concat(o);else{i=n.plainObjects?Object.create(null):{};var c=\"[\"===a.charAt(0)&&\"]\"===a.charAt(a.length-1)?a.slice(1,-1):a,u=parseInt(c,10);n.parseArrays||\"\"!==c?!isNaN(u)&&a!==c&&String(u)===c&&u>=0&&n.parseArrays&&u<=n.arrayLimit?(i=[])[u]=o:\"__proto__\"!==c&&(i[c]=o):i={0:o}}o=i}return o}(u,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if(null!==e.decoder&&void 0!==e.decoder&&\"function\"!=typeof e.decoder)throw new TypeError(\"Decoder has to be a function.\");if(void 0!==e.charset&&\"utf-8\"!==e.charset&&\"iso-8859-1\"!==e.charset)throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");var t=void 0===e.charset?i.charset:e.charset;return{allowDots:void 0===e.allowDots?i.allowDots:!!e.allowDots,allowPrototypes:\"boolean\"==typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:\"boolean\"==typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:\"number\"==typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:\"boolean\"==typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:\"boolean\"==typeof e.comma?e.comma:i.comma,decoder:\"function\"==typeof e.decoder?e.decoder:i.decoder,delimiter:\"string\"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:\"number\"==typeof e.depth||!1===e.depth?+e.depth:i.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:\"boolean\"==typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:\"number\"==typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:\"boolean\"==typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:\"boolean\"==typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(\"\"===e||null==e)return n.plainObjects?Object.create(null):{};for(var u=\"string\"==typeof e?function(e,t){var n,c={},u=t.ignoreQueryPrefix?e.replace(/^\\?/,\"\"):e,p=t.parameterLimit===1/0?void 0:t.parameterLimit,h=u.split(t.delimiter,p),f=-1,d=t.charset;if(t.charsetSentinel)for(n=0;n<h.length;++n)0===h[n].indexOf(\"utf8=\")&&(\"utf8=%E2%9C%93\"===h[n]?d=\"utf-8\":\"utf8=%26%2310003%3B\"===h[n]&&(d=\"iso-8859-1\"),f=n,n=h.length);for(n=0;n<h.length;++n)if(n!==f){var m,g,y=h[n],v=y.indexOf(\"]=\"),b=-1===v?y.indexOf(\"=\"):v+1;-1===b?(m=t.decoder(y,i.decoder,d,\"key\"),g=t.strictNullHandling?null:\"\"):(m=t.decoder(y.slice(0,b),i.decoder,d,\"key\"),g=r.maybeMap(l(y.slice(b+1),t),(function(e){return t.decoder(e,i.decoder,d,\"value\")}))),g&&t.interpretNumericEntities&&\"iso-8859-1\"===d&&(g=a(g)),y.indexOf(\"[]=\")>-1&&(g=s(g)?[g]:g),o.call(c,m)?c[m]=r.combine(c[m],g):c[m]=g}return c}(e,n):e,p=n.plainObjects?Object.create(null):{},h=Object.keys(u),f=0;f<h.length;++f){var d=h[f],m=c(d,u[d],n,\"string\"==typeof e);p=r.merge(p,m,n)}return!0===n.allowSparse?p:r.compact(p)}},58261:(e,t,n)=>{\"use strict\";var r=n(37478),o=n(12769),s=n(55798),i=Object.prototype.hasOwnProperty,a={brackets:function(e){return e+\"[]\"},comma:\"comma\",indices:function(e,t){return e+\"[\"+t+\"]\"},repeat:function(e){return e}},l=Array.isArray,c=String.prototype.split,u=Array.prototype.push,p=function(e,t){u.apply(e,l(t)?t:[t])},h=Date.prototype.toISOString,f=s.default,d={addQueryPrefix:!1,allowDots:!1,charset:\"utf-8\",charsetSentinel:!1,delimiter:\"&\",encode:!0,encoder:o.encode,encodeValuesOnly:!1,format:f,formatter:s.formatters[f],indices:!1,serializeDate:function(e){return h.call(e)},skipNulls:!1,strictNullHandling:!1},m={},g=function e(t,n,s,i,a,u,h,f,g,y,v,b,w,E,x,S){for(var _,j=t,O=S,k=0,A=!1;void 0!==(O=O.get(m))&&!A;){var C=O.get(t);if(k+=1,void 0!==C){if(C===k)throw new RangeError(\"Cyclic object value\");A=!0}void 0===O.get(m)&&(k=0)}if(\"function\"==typeof f?j=f(n,j):j instanceof Date?j=v(j):\"comma\"===s&&l(j)&&(j=o.maybeMap(j,(function(e){return e instanceof Date?v(e):e}))),null===j){if(a)return h&&!E?h(n,d.encoder,x,\"key\",b):n;j=\"\"}if(\"string\"==typeof(_=j)||\"number\"==typeof _||\"boolean\"==typeof _||\"symbol\"==typeof _||\"bigint\"==typeof _||o.isBuffer(j)){if(h){var P=E?n:h(n,d.encoder,x,\"key\",b);if(\"comma\"===s&&E){for(var N=c.call(String(j),\",\"),I=\"\",T=0;T<N.length;++T)I+=(0===T?\"\":\",\")+w(h(N[T],d.encoder,x,\"value\",b));return[w(P)+(i&&l(j)&&1===N.length?\"[]\":\"\")+\"=\"+I]}return[w(P)+\"=\"+w(h(j,d.encoder,x,\"value\",b))]}return[w(n)+\"=\"+w(String(j))]}var R,M=[];if(void 0===j)return M;if(\"comma\"===s&&l(j))R=[{value:j.length>0?j.join(\",\")||null:void 0}];else if(l(f))R=f;else{var D=Object.keys(j);R=g?D.sort(g):D}for(var F=i&&l(j)&&1===j.length?n+\"[]\":n,L=0;L<R.length;++L){var B=R[L],$=\"object\"==typeof B&&void 0!==B.value?B.value:j[B];if(!u||null!==$){var q=l(j)?\"function\"==typeof s?s(F,B):F:F+(y?\".\"+B:\"[\"+B+\"]\");S.set(t,k);var U=r();U.set(m,S),p(M,e($,q,s,i,a,u,h,f,g,y,v,b,w,E,x,U))}}return M};e.exports=function(e,t){var n,o=e,c=function(e){if(!e)return d;if(null!==e.encoder&&void 0!==e.encoder&&\"function\"!=typeof e.encoder)throw new TypeError(\"Encoder has to be a function.\");var t=e.charset||d.charset;if(void 0!==e.charset&&\"utf-8\"!==e.charset&&\"iso-8859-1\"!==e.charset)throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");var n=s.default;if(void 0!==e.format){if(!i.call(s.formatters,e.format))throw new TypeError(\"Unknown format option provided.\");n=e.format}var r=s.formatters[n],o=d.filter;return(\"function\"==typeof e.filter||l(e.filter))&&(o=e.filter),{addQueryPrefix:\"boolean\"==typeof e.addQueryPrefix?e.addQueryPrefix:d.addQueryPrefix,allowDots:void 0===e.allowDots?d.allowDots:!!e.allowDots,charset:t,charsetSentinel:\"boolean\"==typeof e.charsetSentinel?e.charsetSentinel:d.charsetSentinel,delimiter:void 0===e.delimiter?d.delimiter:e.delimiter,encode:\"boolean\"==typeof e.encode?e.encode:d.encode,encoder:\"function\"==typeof e.encoder?e.encoder:d.encoder,encodeValuesOnly:\"boolean\"==typeof e.encodeValuesOnly?e.encodeValuesOnly:d.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:\"function\"==typeof e.serializeDate?e.serializeDate:d.serializeDate,skipNulls:\"boolean\"==typeof e.skipNulls?e.skipNulls:d.skipNulls,sort:\"function\"==typeof e.sort?e.sort:null,strictNullHandling:\"boolean\"==typeof e.strictNullHandling?e.strictNullHandling:d.strictNullHandling}}(t);\"function\"==typeof c.filter?o=(0,c.filter)(\"\",o):l(c.filter)&&(n=c.filter);var u,h=[];if(\"object\"!=typeof o||null===o)return\"\";u=t&&t.arrayFormat in a?t.arrayFormat:t&&\"indices\"in t?t.indices?\"indices\":\"repeat\":\"indices\";var f=a[u];if(t&&\"commaRoundTrip\"in t&&\"boolean\"!=typeof t.commaRoundTrip)throw new TypeError(\"`commaRoundTrip` must be a boolean, or absent\");var m=\"comma\"===f&&t&&t.commaRoundTrip;n||(n=Object.keys(o)),c.sort&&n.sort(c.sort);for(var y=r(),v=0;v<n.length;++v){var b=n[v];c.skipNulls&&null===o[b]||p(h,g(o[b],b,f,m,c.strictNullHandling,c.skipNulls,c.encode?c.encoder:null,c.filter,c.sort,c.allowDots,c.serializeDate,c.format,c.formatter,c.encodeValuesOnly,c.charset,y))}var w=h.join(c.delimiter),E=!0===c.addQueryPrefix?\"?\":\"\";return c.charsetSentinel&&(\"iso-8859-1\"===c.charset?E+=\"utf8=%26%2310003%3B&\":E+=\"utf8=%E2%9C%93&\"),w.length>0?E+w:\"\"}},12769:(e,t,n)=>{\"use strict\";var r=n(55798),o=Object.prototype.hasOwnProperty,s=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push(\"%\"+((t<16?\"0\":\"\")+t.toString(16)).toUpperCase());return e}(),a=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n};e.exports={arrayToObject:a,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:\"o\"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),l=0;l<a.length;++l){var c=a[l],u=i[c];\"object\"==typeof u&&null!==u&&-1===n.indexOf(u)&&(t.push({obj:i,prop:c}),n.push(u))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(s(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\\+/g,\" \");if(\"iso-8859-1\"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,o,s){if(0===e.length)return e;var a=e;if(\"symbol\"==typeof e?a=Symbol.prototype.toString.call(e):\"string\"!=typeof e&&(a=String(e)),\"iso-8859-1\"===n)return escape(a).replace(/%u[0-9a-f]{4}/gi,(function(e){return\"%26%23\"+parseInt(e.slice(2),16)+\"%3B\"}));for(var l=\"\",c=0;c<a.length;++c){var u=a.charCodeAt(c);45===u||46===u||95===u||126===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||s===r.RFC1738&&(40===u||41===u)?l+=a.charAt(c):u<128?l+=i[u]:u<2048?l+=i[192|u>>6]+i[128|63&u]:u<55296||u>=57344?l+=i[224|u>>12]+i[128|u>>6&63]+i[128|63&u]:(c+=1,u=65536+((1023&u)<<10|1023&a.charCodeAt(c)),l+=i[240|u>>18]+i[128|u>>12&63]+i[128|u>>6&63]+i[128|63&u])}return l},isBuffer:function(e){return!(!e||\"object\"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(s(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if(\"object\"!=typeof n){if(s(t))t.push(n);else{if(!t||\"object\"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!o.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||\"object\"!=typeof t)return[t].concat(n);var i=t;return s(t)&&!s(n)&&(i=a(t,r)),s(t)&&s(n)?(n.forEach((function(n,s){if(o.call(t,s)){var i=t[s];i&&\"object\"==typeof i&&n&&\"object\"==typeof n?t[s]=e(i,n,r):t.push(n)}else t[s]=n})),t):Object.keys(n).reduce((function(t,s){var i=n[s];return o.call(t,s)?t[s]=e(t[s],i,r):t[s]=i,t}),i)}}},57129:(e,t)=>{\"use strict\";var n=Object.prototype.hasOwnProperty;function r(e){try{return decodeURIComponent(e.replace(/\\+/g,\" \"))}catch(e){return null}}function o(e){try{return encodeURIComponent(e)}catch(e){return null}}t.stringify=function(e,t){t=t||\"\";var r,s,i=[];for(s in\"string\"!=typeof t&&(t=\"?\"),e)if(n.call(e,s)){if((r=e[s])||null!=r&&!isNaN(r)||(r=\"\"),s=o(s),r=o(r),null===s||null===r)continue;i.push(s+\"=\"+r)}return i.length?t+i.join(\"&\"):\"\"},t.parse=function(e){for(var t,n=/([^=?#&]+)=?([^&]*)/g,o={};t=n.exec(e);){var s=r(t[1]),i=r(t[2]);null===s||null===i||s in o||(o[s]=i)}return o}},14419:(e,t,n)=>{const r=n(60697),o=n(69450),s=r.types;e.exports=class e{constructor(e,t){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else{if(\"string\"!=typeof e)throw new Error(\"Expected a regexp or string\");this.ignoreCase=t&&-1!==t.indexOf(\"i\"),this.multiline=t&&-1!==t.indexOf(\"m\")}this.tokens=r(e)}_setDefaults(t){this.max=null!=t.max?t.max:null!=e.prototype.max?e.prototype.max:100,this.defaultRange=t.defaultRange?t.defaultRange:this.defaultRange.clone(),t.randInt&&(this.randInt=t.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,t){var n,r,o,i,a;switch(e.type){case s.ROOT:case s.GROUP:if(e.followedBy||e.notFollowedBy)return\"\";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=t.push(null)-1),r=\"\",i=0,a=(n=e.options?this._randSelect(e.options):e.stack).length;i<a;i++)r+=this._gen(n[i],t);return e.remember&&(t[e.groupNumber]=r),r;case s.POSITION:return\"\";case s.SET:var l=this._expand(e);return l.length?String.fromCharCode(this._randSelect(l)):\"\";case s.REPETITION:for(o=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),r=\"\",i=0;i<o;i++)r+=this._gen(e.value,t);return r;case s.REFERENCE:return t[e.value-1]||\"\";case s.CHAR:var c=this.ignoreCase&&this._randBool()?this._toOtherCase(e.value):e.value;return String.fromCharCode(c)}}_toOtherCase(e){return e+(97<=e&&e<=122?-32:65<=e&&e<=90?32:0)}_randBool(){return!this.randInt(0,1)}_randSelect(e){return e instanceof o?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}_expand(e){if(e.type===r.types.CHAR)return new o(e.value);if(e.type===r.types.RANGE)return new o(e.from,e.to);{let t=new o;for(let n=0;n<e.set.length;n++){let r=this._expand(e.set[n]);if(t.add(r),this.ignoreCase)for(let e=0;e<r.length;e++){let n=r.index(e),o=this._toOtherCase(n);n!==o&&t.add(o)}}return e.not?this.defaultRange.clone().subtract(t):this.defaultRange.clone().intersect(t)}}randInt(e,t){return e+Math.floor(Math.random()*(1+t-e))}get defaultRange(){return this._range=this._range||new o(32,126)}set defaultRange(e){this._range=e}static randexp(t,n){var r;return\"string\"==typeof t&&(t=new RegExp(t,n)),void 0===t._randexp?(r=new e(t,n),t._randexp=r):(r=t._randexp)._setDefaults(t),r.gen()}static sugar(){RegExp.prototype.gen=function(){return e.randexp(this)}}}},92282:(e,t,n)=>{\"use strict\";var r=n(34155),o=65536,s=4294967295;var i=n(89509).Buffer,a=n.g.crypto||n.g.msCrypto;a&&a.getRandomValues?e.exports=function(e,t){if(e>s)throw new RangeError(\"requested too many random bytes\");var n=i.allocUnsafe(e);if(e>0)if(e>o)for(var l=0;l<e;l+=o)a.getRandomValues(n.slice(l,l+o));else a.getRandomValues(n);if(\"function\"==typeof t)return r.nextTick((function(){t(null,n)}));return n}:e.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}},74300:(e,t,n)=>{\"use strict\";function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.CopyToClipboard=void 0;var o=a(n(67294)),s=a(n(20640)),i=[\"text\",\"onCopy\",\"options\",\"children\"];function a(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){g(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function f(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=m(e);if(t){var s=m(this).constructor;n=Reflect.construct(o,arguments,s)}else n=o.apply(this,arguments);return function(e,t){if(t&&(\"object\"===r(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return d(e)}(this,n)}}function d(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=function(e){!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}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&h(e,t)}(l,e);var t,n,r,a=f(l);function l(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return g(d(e=a.call.apply(a,[this].concat(n))),\"onClick\",(function(t){var n=e.props,r=n.text,i=n.onCopy,a=n.children,l=n.options,c=o.default.Children.only(a),u=(0,s.default)(r,l);i&&i(r,u),c&&c.props&&\"function\"==typeof c.props.onClick&&c.props.onClick(t)})),e}return t=l,(n=[{key:\"render\",value:function(){var e=this.props,t=(e.text,e.onCopy,e.options,e.children),n=u(e,i),r=o.default.Children.only(t);return o.default.cloneElement(r,c(c({},n),{},{onClick:this.onClick}))}}])&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),l}(o.default.PureComponent);t.CopyToClipboard=y,g(y,\"defaultProps\",{onCopy:void 0,options:void 0})},74855:(e,t,n)=>{\"use strict\";var r=n(74300).CopyToClipboard;r.CopyToClipboard=r,e.exports=r},53441:(e,t,n)=>{\"use strict\";function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.DebounceInput=void 0;var o=a(n(67294)),s=a(n(91296)),i=[\"element\",\"onChange\",\"value\",\"minLength\",\"debounceTimeout\",\"forceNotifyByEnter\",\"forceNotifyOnBlur\",\"onKeyDown\",\"onBlur\",\"inputRef\"];function a(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){g(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function f(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=m(e);if(t){var s=m(this).constructor;n=Reflect.construct(o,arguments,s)}else n=o.apply(this,arguments);return function(e,t){if(t&&(\"object\"===r(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return d(e)}(this,n)}}function d(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=function(e){!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}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&h(e,t)}(c,e);var t,n,r,a=f(c);function c(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,c),g(d(t=a.call(this,e)),\"onChange\",(function(e){e.persist();var n=t.state.value,r=t.props.minLength;t.setState({value:e.target.value},(function(){var o=t.state.value;o.length>=r?t.notify(e):n.length>o.length&&t.notify(u(u({},e),{},{target:u(u({},e.target),{},{value:\"\"})}))}))})),g(d(t),\"onKeyDown\",(function(e){\"Enter\"===e.key&&t.forceNotify(e);var n=t.props.onKeyDown;n&&(e.persist(),n(e))})),g(d(t),\"onBlur\",(function(e){t.forceNotify(e);var n=t.props.onBlur;n&&(e.persist(),n(e))})),g(d(t),\"createNotifier\",(function(e){if(e<0)t.notify=function(){return null};else if(0===e)t.notify=t.doNotify;else{var n=(0,s.default)((function(e){t.isDebouncing=!1,t.doNotify(e)}),e);t.notify=function(e){t.isDebouncing=!0,n(e)},t.flush=function(){return n.flush()},t.cancel=function(){t.isDebouncing=!1,n.cancel()}}})),g(d(t),\"doNotify\",(function(){t.props.onChange.apply(void 0,arguments)})),g(d(t),\"forceNotify\",(function(e){var n=t.props.debounceTimeout;if(t.isDebouncing||!(n>0)){t.cancel&&t.cancel();var r=t.state.value,o=t.props.minLength;r.length>=o?t.doNotify(e):t.doNotify(u(u({},e),{},{target:u(u({},e.target),{},{value:r})}))}})),t.isDebouncing=!1,t.state={value:void 0===e.value||null===e.value?\"\":e.value};var n=t.props.debounceTimeout;return t.createNotifier(n),t}return t=c,(n=[{key:\"componentDidUpdate\",value:function(e){if(!this.isDebouncing){var t=this.props,n=t.value,r=t.debounceTimeout,o=e.debounceTimeout,s=e.value,i=this.state.value;void 0!==n&&s!==n&&i!==n&&this.setState({value:n}),r!==o&&this.createNotifier(r)}}},{key:\"componentWillUnmount\",value:function(){this.flush&&this.flush()}},{key:\"render\",value:function(){var e,t,n=this.props,r=n.element,s=(n.onChange,n.value,n.minLength,n.debounceTimeout,n.forceNotifyByEnter),a=n.forceNotifyOnBlur,c=n.onKeyDown,p=n.onBlur,h=n.inputRef,f=l(n,i),d=this.state.value;e=s?{onKeyDown:this.onKeyDown}:c?{onKeyDown:c}:{},t=a?{onBlur:this.onBlur}:p?{onBlur:p}:{};var m=h?{ref:h}:{};return o.default.createElement(r,u(u(u(u({},f),{},{onChange:this.onChange,value:d},e),t),m))}}])&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),c}(o.default.PureComponent);t.DebounceInput=y,g(y,\"defaultProps\",{element:\"input\",type:\"text\",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(e,t,n)=>{\"use strict\";var r=n(53441).DebounceInput;r.DebounceInput=r,e.exports=r},64448:(e,t,n)=>{\"use strict\";var r=n(67294),o=n(27418),s=n(63840);function i(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!r)throw Error(i(227));var a=new Set,l={};function c(e,t){u(e,t),u(e+\"Capture\",t)}function u(e,t){for(l[e]=t,e=0;e<t.length;e++)a.add(t[e])}var p=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement),h=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,f=Object.prototype.hasOwnProperty,d={},m={};function g(e,t,n,r,o,s,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=s,this.removeEmptyString=i}var y={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),[\"capture\",\"download\"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),[\"cols\",\"rows\",\"size\",\"span\"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),[\"rowSpan\",\"start\"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case\"function\":case\"symbol\":return!0;case\"boolean\":return!r&&(null!==n?!n.acceptsBooleans:\"data-\"!==(e=e.toLowerCase().slice(0,5))&&\"aria-\"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!f.call(m,e)||!f.call(d,e)&&(h.test(e)?m[e]=!0:(d[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,\"\"+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&\"\":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?\"\":\"\"+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,null,!1,!1)})),\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,\"http://www.w3.org/1999/xlink\",!1,!1)})),[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1,!1)})),[\"tabIndex\",\"crossOrigin\"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1),[\"src\",\"href\",\"action\",\"formAction\"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=60103,S=60106,_=60107,j=60108,O=60114,k=60109,A=60110,C=60112,P=60113,N=60120,I=60115,T=60116,R=60121,M=60128,D=60129,F=60130,L=60131;if(\"function\"==typeof Symbol&&Symbol.for){var B=Symbol.for;x=B(\"react.element\"),S=B(\"react.portal\"),_=B(\"react.fragment\"),j=B(\"react.strict_mode\"),O=B(\"react.profiler\"),k=B(\"react.provider\"),A=B(\"react.context\"),C=B(\"react.forward_ref\"),P=B(\"react.suspense\"),N=B(\"react.suspense_list\"),I=B(\"react.memo\"),T=B(\"react.lazy\"),R=B(\"react.block\"),B(\"react.scope\"),M=B(\"react.opaque.id\"),D=B(\"react.debug_trace_mode\"),F=B(\"react.offscreen\"),L=B(\"react.legacy_hidden\")}var $,q=\"function\"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=q&&e[q]||e[\"@@iterator\"])?e:null}function z(e){if(void 0===$)try{throw Error()}catch(e){var t=e.stack.trim().match(/\\n( *(at )?)/);$=t&&t[1]||\"\"}return\"\\n\"+$+e}var V=!1;function W(e,t){if(!e||V)return\"\";V=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(e){if(e&&r&&\"string\"==typeof e.stack){for(var o=e.stack.split(\"\\n\"),s=r.stack.split(\"\\n\"),i=o.length-1,a=s.length-1;1<=i&&0<=a&&o[i]!==s[a];)a--;for(;1<=i&&0<=a;i--,a--)if(o[i]!==s[a]){if(1!==i||1!==a)do{if(i--,0>--a||o[i]!==s[a])return\"\\n\"+o[i].replace(\" at new \",\" at \")}while(1<=i&&0<=a);break}}}finally{V=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:\"\")?z(e):\"\"}function J(e){switch(e.tag){case 5:return z(e.type);case 16:return z(\"Lazy\");case 13:return z(\"Suspense\");case 19:return z(\"SuspenseList\");case 0:case 2:case 15:return e=W(e.type,!1);case 11:return e=W(e.type.render,!1);case 22:return e=W(e.type._render,!1);case 1:return e=W(e.type,!0);default:return\"\"}}function K(e){if(null==e)return null;if(\"function\"==typeof e)return e.displayName||e.name||null;if(\"string\"==typeof e)return e;switch(e){case _:return\"Fragment\";case S:return\"Portal\";case O:return\"Profiler\";case j:return\"StrictMode\";case P:return\"Suspense\";case N:return\"SuspenseList\"}if(\"object\"==typeof e)switch(e.$$typeof){case A:return(e.displayName||\"Context\")+\".Consumer\";case k:return(e._context.displayName||\"Context\")+\".Provider\";case C:var t=e.render;return t=t.displayName||t.name||\"\",e.displayName||(\"\"!==t?\"ForwardRef(\"+t+\")\":\"ForwardRef\");case I:return K(e.type);case R:return K(e._render);case T:t=e._payload,e=e._init;try{return K(e(t))}catch(e){}}return null}function H(e){switch(typeof e){case\"boolean\":case\"number\":case\"object\":case\"string\":case\"undefined\":return e;default:return\"\"}}function G(e){var t=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function Z(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?\"checked\":\"value\",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=\"\"+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&\"function\"==typeof n.get&&\"function\"==typeof n.set){var o=n.get,s=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=\"\"+e,s.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Y(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=\"\";return e&&(r=G(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Q(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?\"\":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:\"checkbox\"===t.type||\"radio\"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,\"checked\",t,!1)}function ne(e,t){te(e,t);var n=H(t.value),r=t.type;if(null!=n)\"number\"===r?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+n):e.value!==\"\"+n&&(e.value=\"\"+n);else if(\"submit\"===r||\"reset\"===r)return void e.removeAttribute(\"value\");t.hasOwnProperty(\"value\")?oe(e,t.type,n):t.hasOwnProperty(\"defaultValue\")&&oe(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty(\"value\")||t.hasOwnProperty(\"defaultValue\")){var r=t.type;if(!(\"submit\"!==r&&\"reset\"!==r||void 0!==t.value&&null!==t.value))return;t=\"\"+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}\"\"!==(n=e.name)&&(e.name=\"\"),e.defaultChecked=!!e._wrapperState.initialChecked,\"\"!==n&&(e.name=n)}function oe(e,t,n){\"number\"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+n&&(e.defaultValue=\"\"+n))}function se(e,t){return e=o({children:void 0},t),(t=function(e){var t=\"\";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t[\"$\"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty(\"$\"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=\"\"+H(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ae(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=\"\"),n=t}e._wrapperState={initialValue:H(n)}}function ce(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=\"\"+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=\"\"+r)}function ue(e){var t=e.textContent;t===e._wrapperState.initialValue&&\"\"!==t&&null!==t&&(e.value=t)}var pe={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};function he(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function fe(e,t){return null==e||\"http://www.w3.org/1999/xhtml\"===e?he(t):\"http://www.w3.org/2000/svg\"===e&&\"foreignObject\"===t?\"http://www.w3.org/1999/xhtml\":e}var de,me,ge=(me=function(e,t){if(e.namespaceURI!==pe.svg||\"innerHTML\"in e)e.innerHTML=t;else{for((de=de||document.createElement(\"div\")).innerHTML=\"<svg>\"+t.valueOf().toString()+\"</svg>\",t=de.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},\"undefined\"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return me(e,t)}))}:me);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},be=[\"Webkit\",\"ms\",\"Moz\",\"O\"];function we(e,t,n){return null==t||\"boolean\"==typeof t||\"\"===t?\"\":n||\"number\"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(\"\"+t).trim():t+\"px\"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf(\"--\"),o=we(n,t[n],r);\"float\"===n&&(n=\"cssFloat\"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ve).forEach((function(e){be.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var xe=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(xe[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if(\"object\"!=typeof t.dangerouslySetInnerHTML||!(\"__html\"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&\"object\"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf(\"-\"))return\"string\"==typeof t.is;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}function je(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,ke=null,Ae=null;function Ce(e){if(e=no(e)){if(\"function\"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Pe(e){ke?Ae?Ae.push(e):Ae=[e]:ke=e}function Ne(){if(ke){var e=ke,t=Ae;if(Ae=ke=null,Ce(e),t)for(e=0;e<t.length;e++)Ce(t[e])}}function Ie(e,t){return e(t)}function Te(e,t,n,r,o){return e(t,n,r,o)}function Re(){}var Me=Ie,De=!1,Fe=!1;function Le(){null===ke&&null===Ae||(Re(),Ne())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=!(\"button\"===(e=e.type)||\"input\"===e||\"select\"===e||\"textarea\"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&\"function\"!=typeof n)throw Error(i(231,t,typeof n));return n}var $e=!1;if(p)try{var qe={};Object.defineProperty(qe,\"passive\",{get:function(){$e=!0}}),window.addEventListener(\"test\",qe,qe),window.removeEventListener(\"test\",qe,qe)}catch(me){$e=!1}function Ue(e,t,n,r,o,s,i,a,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this.onError(e)}}var ze=!1,Ve=null,We=!1,Je=null,Ke={onError:function(e){ze=!0,Ve=e}};function He(e,t,n,r,o,s,i,a,l){ze=!1,Ve=null,Ue.apply(Ke,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ze(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ye(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var s=o.alternate;if(null===s){if(null!==(r=o.return)){n=r;continue}break}if(o.child===s.child){for(s=o.child;s;){if(s===n)return Ye(o),e;if(s===r)return Ye(o),t;s=s.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=s;else{for(var a=!1,l=o.child;l;){if(l===n){a=!0,n=o,r=s;break}if(l===r){a=!0,r=o,n=s;break}l=l.sibling}if(!a){for(l=s.child;l;){if(l===n){a=!0,n=s,r=o;break}if(l===r){a=!0,r=s,n=o;break}l=l.sibling}if(!a)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Qe(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,st=[],it=null,at=null,lt=null,ct=new Map,ut=new Map,pt=[],ht=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");function ft(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function dt(e,t){switch(e){case\"focusin\":case\"focusout\":it=null;break;case\"dragenter\":case\"dragleave\":at=null;break;case\"mouseover\":case\"mouseout\":lt=null;break;case\"pointerover\":case\"pointerout\":ct.delete(t.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":ut.delete(t.pointerId)}}function mt(e,t,n,r,o,s){return null===e||e.nativeEvent!==s?(e=ft(t,n,r,o,s),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ze(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){s.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){yt(e)&&n.delete(t)}function bt(){for(ot=!1;0<st.length;){var e=st[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&st.shift()}null!==it&&yt(it)&&(it=null),null!==at&&yt(at)&&(at=null),null!==lt&&yt(lt)&&(lt=null),ct.forEach(vt),ut.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,s.unstable_scheduleCallback(s.unstable_NormalPriority,bt)))}function Et(e){function t(t){return wt(t,e)}if(0<st.length){wt(st[0],e);for(var n=1;n<st.length;n++){var r=st[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==at&&wt(at,e),null!==lt&&wt(lt,e),ct.forEach(t),ut.forEach(t),n=0;n<pt.length;n++)(r=pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<pt.length&&null===(n=pt[0]).blockedOn;)gt(n),null===n.blockedOn&&pt.shift()}function xt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n}var St={animationend:xt(\"Animation\",\"AnimationEnd\"),animationiteration:xt(\"Animation\",\"AnimationIteration\"),animationstart:xt(\"Animation\",\"AnimationStart\"),transitionend:xt(\"Transition\",\"TransitionEnd\")},_t={},jt={};function Ot(e){if(_t[e])return _t[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in jt)return _t[e]=n[t];return e}p&&(jt=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),\"TransitionEvent\"in window||delete St.transitionend.transition);var kt=Ot(\"animationend\"),At=Ot(\"animationiteration\"),Ct=Ot(\"animationstart\"),Pt=Ot(\"transitionend\"),Nt=new Map,It=new Map,Tt=[\"abort\",\"abort\",kt,\"animationEnd\",At,\"animationIteration\",Ct,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Pt,\"transitionEnd\",\"waiting\",\"waiting\"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o=\"on\"+(o[0].toUpperCase()+o.slice(1)),It.set(r,t),Nt.set(r,o),c(o,[r])}}(0,s.unstable_now)();var Mt=8;function Dt(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,o=0,s=e.expiredLanes,i=e.suspendedLanes,a=e.pingedLanes;if(0!==s)r=s,o=Mt=15;else if(0!==(s=134217727&n)){var l=s&~i;0!==l?(r=Dt(l),o=Mt):0!==(a&=s)&&(r=Dt(a),o=Mt)}else 0!==(s=n&~i)?(r=Dt(s),o=Mt):0!==a&&(r=Dt(a),o=Mt);if(0===r)return 0;if(r=n&((0>(r=31-zt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Mt)return t;Mt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-zt(t)),r|=e[n],t&=~o;return r}function Lt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=$t(24&~t))?Bt(10,t):e;case 10:return 0===(e=$t(192&~t))?Bt(8,t):e;case 8:return 0===(e=$t(3584&~t))&&(0===(e=$t(4186112&~t))&&(e=512)),e;case 2:return 0===(t=$t(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function $t(e){return e&-e}function qt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-zt(t)]=n}var zt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Vt(e)/Wt|0)|0},Vt=Math.log,Wt=Math.LN2;var Jt=s.unstable_UserBlockingPriority,Kt=s.unstable_runWithPriority,Ht=!0;function Gt(e,t,n,r){De||Re();var o=Yt,s=De;De=!0;try{Te(o,e,t,n,r)}finally{(De=s)||Le()}}function Zt(e,t,n,r){Kt(Jt,Yt.bind(null,e,t,n,r))}function Yt(e,t,n,r){var o;if(Ht)if((o=0==(4&t))&&0<st.length&&-1<ht.indexOf(e))e=ft(null,e,t,n,r),st.push(e);else{var s=Xt(e,t,n,r);if(null===s)o&&dt(e,r);else{if(o){if(-1<ht.indexOf(e))return e=ft(s,e,t,n,r),void st.push(e);if(function(e,t,n,r,o){switch(t){case\"focusin\":return it=mt(it,e,t,n,r,o),!0;case\"dragenter\":return at=mt(at,e,t,n,r,o),!0;case\"mouseover\":return lt=mt(lt,e,t,n,r,o),!0;case\"pointerover\":var s=o.pointerId;return ct.set(s,mt(ct.get(s)||null,e,t,n,r,o)),!0;case\"gotpointercapture\":return s=o.pointerId,ut.set(s,mt(ut.get(s)||null,e,t,n,r,o)),!0}return!1}(s,e,t,n,r))return;dt(e,r)}Rr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=je(r);if(null!==(o=to(o))){var s=Ge(o);if(null===s)o=null;else{var i=s.tag;if(13===i){if(null!==(o=Ze(s)))return o;o=null}else if(3===i){if(s.stateNode.hydrate)return 3===s.tag?s.stateNode.containerInfo:null;o=null}else s!==o&&(o=null)}}return Rr(e,t,r,o,n),null}var Qt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o=\"value\"in Qt?Qt.value:Qt.textContent,s=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[s-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function sn(){return!1}function an(e){function t(t,n,r,o,s){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=s,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:sn,this.isPropagationStopped=sn,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var ln,cn,un,pn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},hn=an(pn),fn=o({},pn,{view:0,detail:0}),dn=an(fn),mn=o({},fn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:kn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==un&&(un&&\"mousemove\"===e.type?(ln=e.screenX-un.screenX,cn=e.screenY-un.screenY):cn=ln=0,un=e),ln)},movementY:function(e){return\"movementY\"in e?e.movementY:cn}}),gn=an(mn),yn=an(o({},mn,{dataTransfer:0})),vn=an(o({},fn,{relatedTarget:0})),bn=an(o({},pn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},pn,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),En=an(wn),xn=an(o({},pn,{data:0})),Sn={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},_n={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},jn={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=jn[e])&&!!t[e]}function kn(){return On}var An=o({},fn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if(\"Unidentified\"!==t)return t}return\"keypress\"===e.type?13===(e=rn(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?_n[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:kn,charCode:function(e){return\"keypress\"===e.type?rn(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?rn(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}}),Cn=an(An),Pn=an(o({},mn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=an(o({},fn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:kn})),In=an(o({},pn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Tn=o({},mn,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=an(Tn),Mn=[9,13,27,32],Dn=p&&\"CompositionEvent\"in window,Fn=null;p&&\"documentMode\"in document&&(Fn=document.documentMode);var Ln=p&&\"TextEvent\"in window&&!Fn,Bn=p&&(!Dn||Fn&&8<Fn&&11>=Fn),$n=String.fromCharCode(32),qn=!1;function Un(e,t){switch(e){case\"keyup\":return-1!==Mn.indexOf(t.keyCode);case\"keydown\":return 229!==t.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function zn(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var Vn=!1;var Wn={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Jn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!Wn[e.type]:\"textarea\"===t}function Kn(e,t,n,r){Pe(r),0<(t=Dr(t,\"onChange\")).length&&(n=new hn(\"onChange\",\"change\",null,n,r),e.push({event:n,listeners:t}))}var Hn=null,Gn=null;function Zn(e){Ar(e,0)}function Yn(e){if(Y(ro(e)))return e}function Xn(e,t){if(\"change\"===e)return t}var Qn=!1;if(p){var er;if(p){var tr=\"oninput\"in document;if(!tr){var nr=document.createElement(\"div\");nr.setAttribute(\"oninput\",\"return;\"),tr=\"function\"==typeof nr.oninput}er=tr}else er=!1;Qn=er&&(!document.documentMode||9<document.documentMode)}function rr(){Hn&&(Hn.detachEvent(\"onpropertychange\",or),Gn=Hn=null)}function or(e){if(\"value\"===e.propertyName&&Yn(Gn)){var t=[];if(Kn(t,Gn,e,je(e)),e=Zn,De)e(t);else{De=!0;try{Ie(e,t)}finally{De=!1,Le()}}}}function sr(e,t,n){\"focusin\"===e?(rr(),Gn=n,(Hn=t).attachEvent(\"onpropertychange\",or)):\"focusout\"===e&&rr()}function ir(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return Yn(Gn)}function ar(e,t){if(\"click\"===e)return Yn(t)}function lr(e,t){if(\"input\"===e||\"change\"===e)return Yn(t)}var cr=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},ur=Object.prototype.hasOwnProperty;function pr(e,t){if(cr(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!ur.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function hr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=hr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=hr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):\"contains\"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function mr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n=\"string\"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===t||\"true\"===e.contentEditable)}var yr=p&&\"documentMode\"in document&&11>=document.documentMode,vr=null,br=null,wr=null,Er=!1;function xr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==X(r)||(\"selectionStart\"in(r=vr)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&pr(wr,r)||(wr=r,0<(r=Dr(br,\"onSelect\")).length&&(t=new hn(\"onSelect\",\"select\",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}Rt(\"cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0),Rt(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1),Rt(Tt,2);for(var Sr=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),_r=0;_r<Sr.length;_r++)It.set(Sr[_r],0);u(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),u(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),u(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),u(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),c(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),c(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),c(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),c(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),c(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),c(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var jr=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),Or=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(jr));function kr(e,t,n){var r=e.type||\"unknown-event\";e.currentTarget=n,function(e,t,n,r,o,s,a,l,c){if(He.apply(this,arguments),ze){if(!ze)throw Error(i(198));var u=Ve;ze=!1,Ve=null,We||(We=!0,Je=u)}}(r,t,void 0,e),e.currentTarget=null}function Ar(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var s=void 0;if(t)for(var i=r.length-1;0<=i;i--){var a=r[i],l=a.instance,c=a.currentTarget;if(a=a.listener,l!==s&&o.isPropagationStopped())break e;kr(o,a,c),s=l}else for(i=0;i<r.length;i++){if(l=(a=r[i]).instance,c=a.currentTarget,a=a.listener,l!==s&&o.isPropagationStopped())break e;kr(o,a,c),s=l}}}if(We)throw e=Je,We=!1,Je=null,e}function Cr(e,t){var n=so(t),r=e+\"__bubble\";n.has(r)||(Tr(t,e,2,!1),n.add(r))}var Pr=\"_reactListening\"+Math.random().toString(36).slice(2);function Nr(e){e[Pr]||(e[Pr]=!0,a.forEach((function(t){Or.has(t)||Ir(t,!1,e,null),Ir(t,!0,e,null)})))}function Ir(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,s=n;if(\"selectionchange\"===e&&9!==n.nodeType&&(s=n.ownerDocument),null!==r&&!t&&Or.has(e)){if(\"scroll\"!==e)return;o|=2,s=r}var i=so(s),a=e+\"__\"+(t?\"capture\":\"bubble\");i.has(a)||(t&&(o|=4),Tr(s,e,o,t),i.add(a))}function Tr(e,t,n,r){var o=It.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Zt;break;default:o=Yt}n=o.bind(null,t,n,e),o=void 0,!$e||\"touchstart\"!==t&&\"touchmove\"!==t&&\"wheel\"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,o){var s=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var a=r.stateNode.containerInfo;if(a===o||8===a.nodeType&&a.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==a;){if(null===(i=to(a)))return;if(5===(l=i.tag)||6===l){r=s=i;continue e}a=a.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{return Me(e,t,n)}finally{Fe=!1,Le()}}((function(){var r=s,o=je(n),i=[];e:{var a=Nt.get(e);if(void 0!==a){var l=hn,c=e;switch(e){case\"keypress\":if(0===rn(n))break e;case\"keydown\":case\"keyup\":l=Cn;break;case\"focusin\":c=\"focus\",l=vn;break;case\"focusout\":c=\"blur\",l=vn;break;case\"beforeblur\":case\"afterblur\":l=vn;break;case\"click\":if(2===n.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":l=gn;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":l=yn;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":l=Nn;break;case kt:case At:case Ct:l=bn;break;case Pt:l=In;break;case\"scroll\":l=dn;break;case\"wheel\":l=Rn;break;case\"copy\":case\"cut\":case\"paste\":l=En;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":l=Pn}var u=0!=(4&t),p=!u&&\"scroll\"===e,h=u?null!==a?a+\"Capture\":null:a;u=[];for(var f,d=r;null!==d;){var m=(f=d).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==h&&(null!=(m=Be(d,h))&&u.push(Mr(d,m,f)))),p)break;d=d.return}0<u.length&&(a=new l(a,c,null,n,o),i.push({event:a,listeners:u}))}}if(0==(7&t)){if(l=\"mouseout\"===e||\"pointerout\"===e,(!(a=\"mouseover\"===e||\"pointerover\"===e)||0!=(16&t)||!(c=n.relatedTarget||n.fromElement)||!to(c)&&!c[Qr])&&(l||a)&&(a=o.window===o?o:(a=o.ownerDocument)?a.defaultView||a.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?to(c):null)&&(c!==(p=Ge(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=gn,m=\"onMouseLeave\",h=\"onMouseEnter\",d=\"mouse\",\"pointerout\"!==e&&\"pointerover\"!==e||(u=Pn,m=\"onPointerLeave\",h=\"onPointerEnter\",d=\"pointer\"),p=null==l?a:ro(l),f=null==c?a:ro(c),(a=new u(m,d+\"leave\",l,n,o)).target=p,a.relatedTarget=f,m=null,to(o)===r&&((u=new u(h,d+\"enter\",c,n,o)).target=f,u.relatedTarget=p,m=u),p=m,l&&c)e:{for(h=c,d=0,f=u=l;f;f=Fr(f))d++;for(f=0,m=h;m;m=Fr(m))f++;for(;0<d-f;)u=Fr(u),d--;for(;0<f-d;)h=Fr(h),f--;for(;d--;){if(u===h||null!==h&&u===h.alternate)break e;u=Fr(u),h=Fr(h)}u=null}else u=null;null!==l&&Lr(i,a,l,u,!1),null!==c&&null!==p&&Lr(i,p,c,u,!0)}if(\"select\"===(l=(a=r?ro(r):window).nodeName&&a.nodeName.toLowerCase())||\"input\"===l&&\"file\"===a.type)var g=Xn;else if(Jn(a))if(Qn)g=lr;else{g=ir;var y=sr}else(l=a.nodeName)&&\"input\"===l.toLowerCase()&&(\"checkbox\"===a.type||\"radio\"===a.type)&&(g=ar);switch(g&&(g=g(e,r))?Kn(i,g,n,o):(y&&y(e,a,r),\"focusout\"===e&&(y=a._wrapperState)&&y.controlled&&\"number\"===a.type&&oe(a,\"number\",a.value)),y=r?ro(r):window,e){case\"focusin\":(Jn(y)||\"true\"===y.contentEditable)&&(vr=y,br=r,wr=null);break;case\"focusout\":wr=br=vr=null;break;case\"mousedown\":Er=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":Er=!1,xr(i,n,o);break;case\"selectionchange\":if(yr)break;case\"keydown\":case\"keyup\":xr(i,n,o)}var v;if(Dn)e:{switch(e){case\"compositionstart\":var b=\"onCompositionStart\";break e;case\"compositionend\":b=\"onCompositionEnd\";break e;case\"compositionupdate\":b=\"onCompositionUpdate\";break e}b=void 0}else Vn?Un(e,n)&&(b=\"onCompositionEnd\"):\"keydown\"===e&&229===n.keyCode&&(b=\"onCompositionStart\");b&&(Bn&&\"ko\"!==n.locale&&(Vn||\"onCompositionStart\"!==b?\"onCompositionEnd\"===b&&Vn&&(v=nn()):(en=\"value\"in(Qt=o)?Qt.value:Qt.textContent,Vn=!0)),0<(y=Dr(r,b)).length&&(b=new xn(b,e,null,n,o),i.push({event:b,listeners:y}),v?b.data=v:null!==(v=zn(n))&&(b.data=v))),(v=Ln?function(e,t){switch(e){case\"compositionend\":return zn(t);case\"keypress\":return 32!==t.which?null:(qn=!0,$n);case\"textInput\":return(e=t.data)===$n&&qn?null:e;default:return null}}(e,n):function(e,t){if(Vn)return\"compositionend\"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Qt=null,Vn=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return Bn&&\"ko\"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,\"onBeforeInput\")).length&&(o=new xn(\"onBeforeInput\",\"beforeinput\",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Ar(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+\"Capture\",r=[];null!==e;){var o=e,s=o.stateNode;5===o.tag&&null!==s&&(o=s,null!=(s=Be(e,n))&&r.unshift(Mr(e,s,o)),null!=(s=Be(e,t))&&r.push(Mr(e,s,o))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Lr(e,t,n,r,o){for(var s=t._reactName,i=[];null!==n&&n!==r;){var a=n,l=a.alternate,c=a.stateNode;if(null!==l&&l===r)break;5===a.tag&&null!==c&&(a=c,o?null!=(l=Be(n,s))&&i.unshift(Mr(n,l,a)):o||null!=(l=Be(n,s))&&i.push(Mr(n,l,a))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var $r=null,qr=null;function Ur(e,t){switch(e){case\"button\":case\"input\":case\"select\":case\"textarea\":return!!t.autoFocus}return!1}function zr(e,t){return\"textarea\"===e||\"option\"===e||\"noscript\"===e||\"string\"==typeof t.children||\"number\"==typeof t.children||\"object\"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Vr=\"function\"==typeof setTimeout?setTimeout:void 0,Wr=\"function\"==typeof clearTimeout?clearTimeout:void 0;function Jr(e){1===e.nodeType?e.textContent=\"\":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=\"\"))}function Kr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Hr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(\"$\"===n||\"$!\"===n||\"$?\"===n){if(0===t)return e;t--}else\"/$\"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Zr=Math.random().toString(36).slice(2),Yr=\"__reactFiber$\"+Zr,Xr=\"__reactProps$\"+Zr,Qr=\"__reactContainer$\"+Zr,eo=\"__reactEvents$\"+Zr;function to(e){var t=e[Yr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Qr]||n[Yr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Hr(e);null!==e;){if(n=e[Yr])return n;e=Hr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Yr]||e[Qr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function so(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],ao=-1;function lo(e){return{current:e}}function co(e){0>ao||(e.current=io[ao],io[ao]=null,ao--)}function uo(e,t){ao++,io[ao]=e.current,e.current=t}var po={},ho=lo(po),fo=lo(!1),mo=po;function go(e,t){var n=e.type.contextTypes;if(!n)return po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,s={};for(o in n)s[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function yo(e){return null!=(e=e.childContextTypes)}function vo(){co(fo),co(ho)}function bo(e,t,n){if(ho.current!==po)throw Error(i(168));uo(ho,t),uo(fo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,\"function\"!=typeof r.getChildContext)return n;for(var s in r=r.getChildContext())if(!(s in e))throw Error(i(108,K(t)||\"Unknown\",s));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||po,mo=ho.current,uo(ho,e),uo(fo,fo.current),!0}function xo(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,mo),r.__reactInternalMemoizedMergedChildContext=e,co(fo),co(ho),uo(ho,e)):co(fo),uo(fo,n)}var So=null,_o=null,jo=s.unstable_runWithPriority,Oo=s.unstable_scheduleCallback,ko=s.unstable_cancelCallback,Ao=s.unstable_shouldYield,Co=s.unstable_requestPaint,Po=s.unstable_now,No=s.unstable_getCurrentPriorityLevel,Io=s.unstable_ImmediatePriority,To=s.unstable_UserBlockingPriority,Ro=s.unstable_NormalPriority,Mo=s.unstable_LowPriority,Do=s.unstable_IdlePriority,Fo={},Lo=void 0!==Co?Co:function(){},Bo=null,$o=null,qo=!1,Uo=Po(),zo=1e4>Uo?Po:function(){return Po()-Uo};function Vo(){switch(No()){case Io:return 99;case To:return 98;case Ro:return 97;case Mo:return 96;case Do:return 95;default:throw Error(i(332))}}function Wo(e){switch(e){case 99:return Io;case 98:return To;case 97:return Ro;case 96:return Mo;case 95:return Do;default:throw Error(i(332))}}function Jo(e,t){return e=Wo(e),jo(e,t)}function Ko(e,t,n){return e=Wo(e),Oo(e,t,n)}function Ho(){if(null!==$o){var e=$o;$o=null,ko(e)}Go()}function Go(){if(!qo&&null!==Bo){qo=!0;var e=0;try{var t=Bo;Jo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(t){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(Io,Ho),t}finally{qo=!1}}}var Zo=E.ReactCurrentBatchConfig;function Yo(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=lo(null),Qo=null,es=null,ts=null;function ns(){ts=es=Qo=null}function rs(e){var t=Xo.current;co(Xo),e.type._context._currentValue=t}function os(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ss(e,t){Qo=e,ts=es=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function is(e,t){if(ts!==e&&!1!==t&&0!==t)if(\"number\"==typeof t&&1073741823!==t||(ts=e,t=1073741823),t={context:e,observedBits:t,next:null},null===es){if(null===Qo)throw Error(i(308));es=t,Qo.dependencies={lanes:0,firstContext:t,responders:null}}else es=es.next=t;return e._currentValue}var as=!1;function ls(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function cs(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function us(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ps(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function hs(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,s=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===s?o=s=i:s=s.next=i,n=n.next}while(null!==n);null===s?o=s=t:s=s.next=t}else o=s=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:s,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fs(e,t,n,r){var s=e.updateQueue;as=!1;var i=s.firstBaseUpdate,a=s.lastBaseUpdate,l=s.shared.pending;if(null!==l){s.shared.pending=null;var c=l,u=c.next;c.next=null,null===a?i=u:a.next=u,a=c;var p=e.alternate;if(null!==p){var h=(p=p.updateQueue).lastBaseUpdate;h!==a&&(null===h?p.firstBaseUpdate=u:h.next=u,p.lastBaseUpdate=c)}}if(null!==i){for(h=s.baseState,a=0,p=u=c=null;;){l=i.lane;var f=i.eventTime;if((r&l)===l){null!==p&&(p=p.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var d=e,m=i;switch(l=t,f=n,m.tag){case 1:if(\"function\"==typeof(d=m.payload)){h=d.call(f,h,l);break e}h=d;break e;case 3:d.flags=-4097&d.flags|64;case 0:if(null==(l=\"function\"==typeof(d=m.payload)?d.call(f,h,l):d))break e;h=o({},h,l);break e;case 2:as=!0}}null!==i.callback&&(e.flags|=32,null===(l=s.effects)?s.effects=[i]:l.push(i))}else f={eventTime:f,lane:l,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===p?(u=p=f,c=h):p=p.next=f,a|=l;if(null===(i=i.next)){if(null===(l=s.shared.pending))break;i=l.next,l.next=null,s.lastBaseUpdate=l,s.shared.pending=null}}null===p&&(c=h),s.baseState=c,s.firstBaseUpdate=u,s.lastBaseUpdate=p,qa|=a,e.lanes=a,e.memoizedState=h}}function ds(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,\"function\"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ms=(new r.Component).refs;function gs(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ys={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=hl(),o=fl(e),s=us(r,o);s.payload=t,null!=n&&(s.callback=n),ps(e,s),dl(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=hl(),o=fl(e),s=us(r,o);s.tag=1,s.payload=t,null!=n&&(s.callback=n),ps(e,s),dl(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=hl(),r=fl(e),o=us(n,r);o.tag=2,null!=t&&(o.callback=t),ps(e,o),dl(e,r,n)}};function vs(e,t,n,r,o,s,i){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,s,i):!t.prototype||!t.prototype.isPureReactComponent||(!pr(n,r)||!pr(o,s))}function bs(e,t,n){var r=!1,o=po,s=t.contextType;return\"object\"==typeof s&&null!==s?s=is(s):(o=yo(t)?mo:ho.current,s=(r=null!=(r=t.contextTypes))?go(e,o):po),t=new t(n,s),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ys,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=s),t}function ws(e,t,n,r){e=t.state,\"function\"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),\"function\"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ys.enqueueReplaceState(t,t.state,null)}function Es(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ms,ls(e);var s=t.contextType;\"object\"==typeof s&&null!==s?o.context=is(s):(s=yo(t)?mo:ho.current,o.context=go(e,s)),fs(e,n,o,r),o.state=e.memoizedState,\"function\"==typeof(s=t.getDerivedStateFromProps)&&(gs(e,t,s,n),o.state=e.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof o.getSnapshotBeforeUpdate||\"function\"!=typeof o.UNSAFE_componentWillMount&&\"function\"!=typeof o.componentWillMount||(t=o.state,\"function\"==typeof o.componentWillMount&&o.componentWillMount(),\"function\"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ys.enqueueReplaceState(o,o.state,null),fs(e,n,o,r),o.state=e.memoizedState),\"function\"==typeof o.componentDidMount&&(e.flags|=4)}var xs=Array.isArray;function Ss(e,t,n){if(null!==(e=n.ref)&&\"function\"!=typeof e&&\"object\"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=\"\"+e;return null!==t&&null!==t.ref&&\"function\"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ms&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if(\"string\"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _s(e,t){if(\"textarea\"!==e.type)throw Error(i(31,\"[object Object]\"===Object.prototype.toString.call(t)?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":t))}function js(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Jl(e,t)).index=0,e.sibling=null,e}function s(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function a(t){return e&&null===t.alternate&&(t.flags=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Zl(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Ss(e,t,n),r.return=e,r):((r=Kl(n.type,n.key,n.props,null,e.mode,r)).ref=Ss(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yl(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function p(e,t,n,r,s){return null===t||7!==t.tag?((t=Hl(n,e.mode,r,s)).return=e,t):((t=o(t,n)).return=e,t)}function h(e,t,n){if(\"string\"==typeof t||\"number\"==typeof t)return(t=Zl(\"\"+t,e.mode,n)).return=e,t;if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Kl(t.type,t.key,t.props,null,e.mode,n)).ref=Ss(e,null,t),n.return=e,n;case S:return(t=Yl(t,e.mode,n)).return=e,t}if(xs(t)||U(t))return(t=Hl(t,e.mode,n,null)).return=e,t;_s(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if(\"string\"==typeof n||\"number\"==typeof n)return null!==o?null:l(e,t,\"\"+n,r);if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?n.type===_?p(e,t,n.props.children,r,o):c(e,t,n,r):null;case S:return n.key===o?u(e,t,n,r):null}if(xs(n)||U(n))return null!==o?null:p(e,t,n,r,null);_s(e,n)}return null}function d(e,t,n,r,o){if(\"string\"==typeof r||\"number\"==typeof r)return l(t,e=e.get(n)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case x:return e=e.get(null===r.key?n:r.key)||null,r.type===_?p(t,e,r.props.children,o,r.key):c(t,e,r,o);case S:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(xs(r)||U(r))return p(t,e=e.get(n)||null,r,o,null);_s(t,r)}return null}function m(o,i,a,l){for(var c=null,u=null,p=i,m=i=0,g=null;null!==p&&m<a.length;m++){p.index>m?(g=p,p=null):g=p.sibling;var y=f(o,p,a[m],l);if(null===y){null===p&&(p=g);break}e&&p&&null===y.alternate&&t(o,p),i=s(y,i,m),null===u?c=y:u.sibling=y,u=y,p=g}if(m===a.length)return n(o,p),c;if(null===p){for(;m<a.length;m++)null!==(p=h(o,a[m],l))&&(i=s(p,i,m),null===u?c=p:u.sibling=p,u=p);return c}for(p=r(o,p);m<a.length;m++)null!==(g=d(p,o,m,a[m],l))&&(e&&null!==g.alternate&&p.delete(null===g.key?m:g.key),i=s(g,i,m),null===u?c=g:u.sibling=g,u=g);return e&&p.forEach((function(e){return t(o,e)})),c}function g(o,a,l,c){var u=U(l);if(\"function\"!=typeof u)throw Error(i(150));if(null==(l=u.call(l)))throw Error(i(151));for(var p=u=null,m=a,g=a=0,y=null,v=l.next();null!==m&&!v.done;g++,v=l.next()){m.index>g?(y=m,m=null):y=m.sibling;var b=f(o,m,v.value,c);if(null===b){null===m&&(m=y);break}e&&m&&null===b.alternate&&t(o,m),a=s(b,a,g),null===p?u=b:p.sibling=b,p=b,m=y}if(v.done)return n(o,m),u;if(null===m){for(;!v.done;g++,v=l.next())null!==(v=h(o,v.value,c))&&(a=s(v,a,g),null===p?u=v:p.sibling=v,p=v);return u}for(m=r(o,m);!v.done;g++,v=l.next())null!==(v=d(m,o,g,v.value,c))&&(e&&null!==v.alternate&&m.delete(null===v.key?g:v.key),a=s(v,a,g),null===p?u=v:p.sibling=v,p=v);return e&&m.forEach((function(e){return t(o,e)})),u}return function(e,r,s,l){var c=\"object\"==typeof s&&null!==s&&s.type===_&&null===s.key;c&&(s=s.props.children);var u=\"object\"==typeof s&&null!==s;if(u)switch(s.$$typeof){case x:e:{for(u=s.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(s.type===_){n(e,c.sibling),(r=o(c,s.props.children)).return=e,e=r;break e}}else if(c.elementType===s.type){n(e,c.sibling),(r=o(c,s.props)).ref=Ss(e,c,s),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}s.type===_?((r=Hl(s.props.children,e.mode,l,s.key)).return=e,e=r):((l=Kl(s.type,s.key,s.props,null,e.mode,l)).ref=Ss(e,r,s),l.return=e,e=l)}return a(e);case S:e:{for(c=s.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===s.containerInfo&&r.stateNode.implementation===s.implementation){n(e,r.sibling),(r=o(r,s.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Yl(s,e.mode,l)).return=e,e=r}return a(e)}if(\"string\"==typeof s||\"number\"==typeof s)return s=\"\"+s,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,s)).return=e,e=r):(n(e,r),(r=Zl(s,e.mode,l)).return=e,e=r),a(e);if(xs(s))return m(e,r,s,l);if(U(s))return g(e,r,s,l);if(u&&_s(e,s),void 0===s&&!c)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,K(e.type)||\"Component\"))}return n(e,r)}}var Os=js(!0),ks=js(!1),As={},Cs=lo(As),Ps=lo(As),Ns=lo(As);function Is(e){if(e===As)throw Error(i(174));return e}function Ts(e,t){switch(uo(Ns,t),uo(Ps,e),uo(Cs,As),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:fe(null,\"\");break;default:t=fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}co(Cs),uo(Cs,t)}function Rs(){co(Cs),co(Ps),co(Ns)}function Ms(e){Is(Ns.current);var t=Is(Cs.current),n=fe(t,e.type);t!==n&&(uo(Ps,e),uo(Cs,n))}function Ds(e){Ps.current===e&&(co(Cs),co(Ps))}var Fs=lo(0);function Ls(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||\"$?\"===n.data||\"$!\"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Bs=null,$s=null,qs=!1;function Us(e,t){var n=Vl(5,null,null,0);n.elementType=\"DELETED\",n.type=\"DELETED\",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function zs(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=\"\"===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Vs(e){if(qs){var t=$s;if(t){var n=t;if(!zs(e,t)){if(!(t=Kr(n.nextSibling))||!zs(e,t))return e.flags=-1025&e.flags|2,qs=!1,void(Bs=e);Us(Bs,n)}Bs=e,$s=Kr(t.firstChild)}else e.flags=-1025&e.flags|2,qs=!1,Bs=e}}function Ws(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Bs=e}function Js(e){if(e!==Bs)return!1;if(!qs)return Ws(e),qs=!0,!1;var t=e.type;if(5!==e.tag||\"head\"!==t&&\"body\"!==t&&!zr(t,e.memoizedProps))for(t=$s;t;)Us(e,t),t=Kr(t.nextSibling);if(Ws(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if(\"/$\"===n){if(0===t){$s=Kr(e.nextSibling);break e}t--}else\"$\"!==n&&\"$!\"!==n&&\"$?\"!==n||t++}e=e.nextSibling}$s=null}}else $s=Bs?Kr(e.stateNode.nextSibling):null;return!0}function Ks(){$s=Bs=null,qs=!1}var Hs=[];function Gs(){for(var e=0;e<Hs.length;e++)Hs[e]._workInProgressVersionPrimary=null;Hs.length=0}var Zs=E.ReactCurrentDispatcher,Ys=E.ReactCurrentBatchConfig,Xs=0,Qs=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function si(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,s){if(Xs=s,Qs=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Zs.current=null===e||null===e.memoizedState?Ii:Ti,e=n(r,o),ri){s=0;do{if(ri=!1,!(25>s))throw Error(i(301));s+=1,ti=ei=null,t.updateQueue=null,Zs.current=Ri,e=n(r,o)}while(ri)}if(Zs.current=Ni,t=null!==ei&&null!==ei.next,Xs=0,ti=ei=Qs=null,ni=!1,t)throw Error(i(300));return e}function ai(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Qs.memoizedState=ti=e:ti=ti.next=e,ti}function li(){if(null===ei){var e=Qs.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Qs.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Qs.memoizedState=ti=e:ti=ti.next=e}return ti}function ci(e,t){return\"function\"==typeof t?t(e):t}function ui(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,s=n.pending;if(null!==s){if(null!==o){var a=o.next;o.next=s.next,s.next=a}r.baseQueue=o=s,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var l=a=s=null,c=o;do{var u=c.lane;if((Xs&u)===u)null!==l&&(l=l.next={lane:0,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),r=c.eagerReducer===e?c.eagerState:e(r,c.action);else{var p={lane:u,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===l?(a=l=p,s=r):l=l.next=p,Qs.lanes|=u,qa|=u}c=c.next}while(null!==c&&c!==o);null===l?s=r:l.next=a,cr(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=l,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function pi(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,s=t.memoizedState;if(null!==o){n.pending=null;var a=o=o.next;do{s=e(s,a.action),a=a.next}while(a!==o);cr(s,t.memoizedState)||(Di=!0),t.memoizedState=s,null===t.baseQueue&&(t.baseState=s),n.lastRenderedState=s}return[s,r]}function hi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xs&e)===e)&&(t._workInProgressVersionPrimary=r,Hs.push(t))),e)return n(t._source);throw Hs.push(t),Error(i(350))}function fi(e,t,n,r){var o=Ta;if(null===o)throw Error(i(349));var s=t._getVersion,a=s(t._source),l=Zs.current,c=l.useState((function(){return hi(o,t,n)})),u=c[1],p=c[0];c=ti;var h=e.memoizedState,f=h.refs,d=f.getSnapshot,m=h.source;h=h.subscribe;var g=Qs;return e.memoizedState={refs:f,source:t,subscribe:r},l.useEffect((function(){f.getSnapshot=n,f.setSnapshot=u;var e=s(t._source);if(!cr(a,e)){e=n(t._source),cr(p,e)||(u(e),e=fl(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var l=31-zt(i),c=1<<l;r[l]|=e,i&=~c}}}),[n,t,r]),l.useEffect((function(){return r(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var r=fl(g);o.mutableReadLanes|=r&o.pendingLanes}catch(e){n((function(){throw e}))}}))}),[t,r]),cr(d,n)&&cr(m,t)&&cr(h,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:p}).dispatch=u=Pi.bind(null,Qs,e),c.queue=e,c.baseQueue=null,p=hi(o,t,n),c.memoizedState=c.baseState=p),p}function di(e,t,n){return fi(li(),e,t,n)}function mi(e){var t=ai();return\"function\"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Pi.bind(null,Qs,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Qs.updateQueue)?(t={lastEffect:null},Qs.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},ai().memoizedState=e}function vi(){return li().memoizedState}function bi(e,t,n,r){var o=ai();Qs.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=li();r=void 0===r?null:r;var s=void 0;if(null!==ei){var i=ei.memoizedState;if(s=i.destroy,null!==r&&si(r,i.deps))return void gi(t,n,s,r)}Qs.flags|=e,o.memoizedState=gi(1|t,n,s,r)}function Ei(e,t){return bi(516,4,e,t)}function xi(e,t){return wi(516,4,e,t)}function Si(e,t){return wi(4,2,e,t)}function _i(e,t){return\"function\"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ji(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function ki(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ai(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ci(e,t){var n=Vo();Jo(98>n?98:n,(function(){e(!0)})),Jo(97<n?97:n,(function(){var n=Ys.transition;Ys.transition=1;try{e(!1),t()}finally{Ys.transition=n}}))}function Pi(e,t,n){var r=hl(),o=fl(e),s={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?s.next=s:(s.next=i.next,i.next=s),t.pending=s,i=e.alternate,e===Qs||null!==i&&i===Qs)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var a=t.lastRenderedState,l=i(a,n);if(s.eagerReducer=i,s.eagerState=l,cr(l,a))return}catch(e){}dl(e,o,r)}}var Ni={readContext:is,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ii={readContext:is,useCallback:function(e,t){return ai().memoizedState=[e,void 0===t?null:t],e},useContext:is,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,bi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return bi(4,2,e,t)},useMemo:function(e,t){var n=ai();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ai();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Pi.bind(null,Qs,e),[r.memoizedState,e]},useRef:yi,useState:mi,useDebugValue:Oi,useDeferredValue:function(e){var t=mi(e),n=t[0],r=t[1];return Ei((function(){var t=Ys.transition;Ys.transition=1;try{r(e)}finally{Ys.transition=t}}),[e]),n},useTransition:function(){var e=mi(!1),t=e[0];return yi(e=Ci.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=ai();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fi(r,e,t,n)},useOpaqueIdentifier:function(){if(qs){var e=!1,t=function(e){return{$$typeof:M,toString:e,valueOf:e}}((function(){throw e||(e=!0,n(\"r:\"+(Gr++).toString(36))),Error(i(355))})),n=mi(t)[1];return 0==(2&Qs.mode)&&(Qs.flags|=516,gi(5,(function(){n(\"r:\"+(Gr++).toString(36))}),void 0,null)),t}return mi(t=\"r:\"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Ti={readContext:is,useCallback:ki,useContext:is,useEffect:xi,useImperativeHandle:ji,useLayoutEffect:Si,useMemo:Ai,useReducer:ui,useRef:vi,useState:function(){return ui(ci)},useDebugValue:Oi,useDeferredValue:function(e){var t=ui(ci),n=t[0],r=t[1];return xi((function(){var t=Ys.transition;Ys.transition=1;try{r(e)}finally{Ys.transition=t}}),[e]),n},useTransition:function(){var e=ui(ci)[0];return[vi().current,e]},useMutableSource:di,useOpaqueIdentifier:function(){return ui(ci)[0]},unstable_isNewReconciler:!1},Ri={readContext:is,useCallback:ki,useContext:is,useEffect:xi,useImperativeHandle:ji,useLayoutEffect:Si,useMemo:Ai,useReducer:pi,useRef:vi,useState:function(){return pi(ci)},useDebugValue:Oi,useDeferredValue:function(e){var t=pi(ci),n=t[0],r=t[1];return xi((function(){var t=Ys.transition;Ys.transition=1;try{r(e)}finally{Ys.transition=t}}),[e]),n},useTransition:function(){var e=pi(ci)[0];return[vi().current,e]},useMutableSource:di,useOpaqueIdentifier:function(){return pi(ci)[0]},unstable_isNewReconciler:!1},Mi=E.ReactCurrentOwner,Di=!1;function Fi(e,t,n,r){t.child=null===e?ks(t,null,n,r):Os(t,e.child,n,r)}function Li(e,t,n,r,o){n=n.render;var s=t.ref;return ss(t,o),r=ii(e,t,n,r,s,o),null===e||Di?(t.flags|=1,Fi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,sa(e,t,o))}function Bi(e,t,n,r,o,s){if(null===e){var i=n.type;return\"function\"!=typeof i||Wl(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Kl(n.type,null,r,t,t.mode,s)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,$i(e,t,i,r,o,s))}return i=e.child,0==(o&s)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:pr)(o,r)&&e.ref===t.ref)?sa(e,t,s):(t.flags|=1,(e=Jl(i,r)).ref=t.ref,e.return=t,t.child=e)}function $i(e,t,n,r,o,s){if(null!==e&&pr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(s&o))return t.lanes=e.lanes,sa(e,t,s);0!=(16384&e.flags)&&(Di=!0)}return zi(e,t,n,r,s)}function qi(e,t,n){var r=t.pendingProps,o=r.children,s=null!==e?e.memoizedState:null;if(\"hidden\"===r.mode||\"unstable-defer-without-hiding\"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},xl(t,n);else{if(0==(1073741824&n))return e=null!==s?s.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},xl(t,e),null;t.memoizedState={baseLanes:0},xl(t,null!==s?s.baseLanes:n)}else null!==s?(r=s.baseLanes|n,t.memoizedState=null):r=n,xl(t,r);return Fi(e,t,o,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function zi(e,t,n,r,o){var s=yo(n)?mo:ho.current;return s=go(t,s),ss(t,o),n=ii(e,t,n,r,s,o),null===e||Di?(t.flags|=1,Fi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,sa(e,t,o))}function Vi(e,t,n,r,o){if(yo(n)){var s=!0;Eo(t)}else s=!1;if(ss(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),bs(t,n,r),Es(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,a=t.memoizedProps;i.props=a;var l=i.context,c=n.contextType;\"object\"==typeof c&&null!==c?c=is(c):c=go(t,c=yo(n)?mo:ho.current);var u=n.getDerivedStateFromProps,p=\"function\"==typeof u||\"function\"==typeof i.getSnapshotBeforeUpdate;p||\"function\"!=typeof i.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof i.componentWillReceiveProps||(a!==r||l!==c)&&ws(t,i,r,c),as=!1;var h=t.memoizedState;i.state=h,fs(t,r,i,o),l=t.memoizedState,a!==r||h!==l||fo.current||as?(\"function\"==typeof u&&(gs(t,n,u,r),l=t.memoizedState),(a=as||vs(t,n,a,r,h,l,c))?(p||\"function\"!=typeof i.UNSAFE_componentWillMount&&\"function\"!=typeof i.componentWillMount||(\"function\"==typeof i.componentWillMount&&i.componentWillMount(),\"function\"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),\"function\"==typeof i.componentDidMount&&(t.flags|=4)):(\"function\"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=a):(\"function\"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,cs(e,t),a=t.memoizedProps,c=t.type===t.elementType?a:Yo(t.type,a),i.props=c,p=t.pendingProps,h=i.context,\"object\"==typeof(l=n.contextType)&&null!==l?l=is(l):l=go(t,l=yo(n)?mo:ho.current);var f=n.getDerivedStateFromProps;(u=\"function\"==typeof f||\"function\"==typeof i.getSnapshotBeforeUpdate)||\"function\"!=typeof i.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof i.componentWillReceiveProps||(a!==p||h!==l)&&ws(t,i,r,l),as=!1,h=t.memoizedState,i.state=h,fs(t,r,i,o);var d=t.memoizedState;a!==p||h!==d||fo.current||as?(\"function\"==typeof f&&(gs(t,n,f,r),d=t.memoizedState),(c=as||vs(t,n,c,r,h,d,l))?(u||\"function\"!=typeof i.UNSAFE_componentWillUpdate&&\"function\"!=typeof i.componentWillUpdate||(\"function\"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,d,l),\"function\"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,d,l)),\"function\"==typeof i.componentDidUpdate&&(t.flags|=4),\"function\"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):(\"function\"!=typeof i.componentDidUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),\"function\"!=typeof i.getSnapshotBeforeUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=d),i.props=r,i.state=d,i.context=l,r=c):(\"function\"!=typeof i.componentDidUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),\"function\"!=typeof i.getSnapshotBeforeUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=256),r=!1)}return Wi(e,t,n,r,s,o)}function Wi(e,t,n,r,o,s){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&xo(t,n,!1),sa(e,t,s);r=t.stateNode,Mi.current=t;var a=i&&\"function\"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Os(t,e.child,null,s),t.child=Os(t,null,a,s)):Fi(e,t,a,s),t.memoizedState=r.state,o&&xo(t,n,!0),t.child}function Ji(e){var t=e.stateNode;t.pendingContext?bo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&bo(0,t.context,!1),Ts(e,t.containerInfo)}var Ki,Hi,Gi,Zi,Yi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,s=Fs.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&s)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(s|=1),uo(Fs,1&s),null===e?(void 0!==o.fallback&&Vs(t),e=o.children,s=o.fallback,i?(e=Qi(t,e,s,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Yi,e):\"number\"==typeof o.unstable_expectedLoadTime?(e=Qi(t,e,s,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Yi,t.lanes=33554432,e):((n=Gl({mode:\"visible\",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=ta(e,t,o.children,o.fallback,n),i=t.child,s=e.child.memoizedState,i.memoizedState=null===s?{baseLanes:n}:{baseLanes:s.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Yi,o):(n=ea(e,t,o.children,n),t.memoizedState=null,n))}function Qi(e,t,n,r){var o=e.mode,s=e.child;return t={mode:\"hidden\",children:t},0==(2&o)&&null!==s?(s.childLanes=0,s.pendingProps=t):s=Gl(t,o,0,null),n=Hl(n,o,r,null),s.return=e,n.return=e,s.sibling=n,e.child=s,n}function ea(e,t,n,r){var o=e.child;return e=o.sibling,n=Jl(o,{mode:\"visible\",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ta(e,t,n,r,o){var s=t.mode,i=e.child;e=i.sibling;var a={mode:\"hidden\",children:n};return 0==(2&s)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=a,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Jl(i,a),null!==e?r=Jl(e,r):(r=Hl(r,s,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function na(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),os(e.return,t)}function ra(e,t,n,r,o,s){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:s}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=s)}function oa(e,t,n){var r=t.pendingProps,o=r.revealOrder,s=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fs.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&na(e,n);else if(19===e.tag)na(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(uo(Fs,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case\"forwards\":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Ls(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),ra(t,!1,o,n,s,t.lastEffect);break;case\"backwards\":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Ls(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}ra(t,!0,n,null,s,t.lastEffect);break;case\"together\":ra(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function sa(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),qa|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Jl(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Jl(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function ia(e,t){if(!qs)switch(e.tailMode){case\"hidden\":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case\"collapsed\":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function aa(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&vo(),null;case 3:return Rs(),co(fo),co(ho),Gs(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Js(t)?t.flags|=4:r.hydrate||(t.flags|=256)),Hi(t),null;case 5:Ds(t);var s=Is(Ns.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,s),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Is(Cs.current),Js(t)){r=t.stateNode,n=t.type;var a=t.memoizedProps;switch(r[Yr]=t,r[Xr]=a,n){case\"dialog\":Cr(\"cancel\",r),Cr(\"close\",r);break;case\"iframe\":case\"object\":case\"embed\":Cr(\"load\",r);break;case\"video\":case\"audio\":for(e=0;e<jr.length;e++)Cr(jr[e],r);break;case\"source\":Cr(\"error\",r);break;case\"img\":case\"image\":case\"link\":Cr(\"error\",r),Cr(\"load\",r);break;case\"details\":Cr(\"toggle\",r);break;case\"input\":ee(r,a),Cr(\"invalid\",r);break;case\"select\":r._wrapperState={wasMultiple:!!a.multiple},Cr(\"invalid\",r);break;case\"textarea\":le(r,a),Cr(\"invalid\",r)}for(var c in Se(n,a),e=null,a)a.hasOwnProperty(c)&&(s=a[c],\"children\"===c?\"string\"==typeof s?r.textContent!==s&&(e=[\"children\",s]):\"number\"==typeof s&&r.textContent!==\"\"+s&&(e=[\"children\",\"\"+s]):l.hasOwnProperty(c)&&null!=s&&\"onScroll\"===c&&Cr(\"scroll\",r));switch(n){case\"input\":Z(r),re(r,a,!0);break;case\"textarea\":Z(r),ue(r);break;case\"select\":case\"option\":break;default:\"function\"==typeof a.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(c=9===s.nodeType?s:s.ownerDocument,e===pe.html&&(e=he(n)),e===pe.html?\"script\"===n?((e=c.createElement(\"div\")).innerHTML=\"<script><\\/script>\",e=e.removeChild(e.firstChild)):\"string\"==typeof r.is?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),\"select\"===n&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Yr]=t,e[Xr]=r,Ki(e,t,!1,!1),t.stateNode=e,c=_e(n,r),n){case\"dialog\":Cr(\"cancel\",e),Cr(\"close\",e),s=r;break;case\"iframe\":case\"object\":case\"embed\":Cr(\"load\",e),s=r;break;case\"video\":case\"audio\":for(s=0;s<jr.length;s++)Cr(jr[s],e);s=r;break;case\"source\":Cr(\"error\",e),s=r;break;case\"img\":case\"image\":case\"link\":Cr(\"error\",e),Cr(\"load\",e),s=r;break;case\"details\":Cr(\"toggle\",e),s=r;break;case\"input\":ee(e,r),s=Q(e,r),Cr(\"invalid\",e);break;case\"option\":s=se(e,r);break;case\"select\":e._wrapperState={wasMultiple:!!r.multiple},s=o({},r,{value:void 0}),Cr(\"invalid\",e);break;case\"textarea\":le(e,r),s=ae(e,r),Cr(\"invalid\",e);break;default:s=r}Se(n,s);var u=s;for(a in u)if(u.hasOwnProperty(a)){var p=u[a];\"style\"===a?Ee(e,p):\"dangerouslySetInnerHTML\"===a?null!=(p=p?p.__html:void 0)&&ge(e,p):\"children\"===a?\"string\"==typeof p?(\"textarea\"!==n||\"\"!==p)&&ye(e,p):\"number\"==typeof p&&ye(e,\"\"+p):\"suppressContentEditableWarning\"!==a&&\"suppressHydrationWarning\"!==a&&\"autoFocus\"!==a&&(l.hasOwnProperty(a)?null!=p&&\"onScroll\"===a&&Cr(\"scroll\",e):null!=p&&w(e,a,p,c))}switch(n){case\"input\":Z(e),re(e,r,!1);break;case\"textarea\":Z(e),ue(e);break;case\"option\":null!=r.value&&e.setAttribute(\"value\",\"\"+H(r.value));break;case\"select\":e.multiple=!!r.multiple,null!=(a=r.value)?ie(e,!!r.multiple,a,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:\"function\"==typeof s.onClick&&(e.onclick=Br)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Zi(e,t,e.memoizedProps,r);else{if(\"string\"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Is(Ns.current),Is(Cs.current),Js(t)?(r=t.stateNode,n=t.memoizedProps,r[Yr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Yr]=t,t.stateNode=r)}return null;case 13:return co(Fs),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Js(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fs.current)?0===La&&(La=3):(0!==La&&3!==La||(La=4),null===Ta||0==(134217727&qa)&&0==(134217727&Ua)||vl(Ta,Ma))),(r||n)&&(t.flags|=4),null);case 4:return Rs(),Hi(t),null===e&&Nr(t.stateNode.containerInfo),null;case 10:return rs(t),null;case 19:if(co(Fs),null===(r=t.memoizedState))return null;if(a=0!=(64&t.flags),null===(c=r.rendering))if(a)ia(r,!1);else{if(0!==La||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(c=Ls(e))){for(t.flags|=64,ia(r,!1),null!==(a=c.updateQueue)&&(t.updateQueue=a,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(a=n).flags&=2,a.nextEffect=null,a.firstEffect=null,a.lastEffect=null,null===(c=a.alternate)?(a.childLanes=0,a.lanes=e,a.child=null,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null,a.stateNode=null):(a.childLanes=c.childLanes,a.lanes=c.lanes,a.child=c.child,a.memoizedProps=c.memoizedProps,a.memoizedState=c.memoizedState,a.updateQueue=c.updateQueue,a.type=c.type,e=c.dependencies,a.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return uo(Fs,1&Fs.current|2),t.child}e=e.sibling}null!==r.tail&&zo()>Ja&&(t.flags|=64,a=!0,ia(r,!1),t.lanes=33554432)}else{if(!a)if(null!==(e=Ls(c))){if(t.flags|=64,a=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),ia(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!c.alternate&&!qs)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*zo()-r.renderingStartTime>Ja&&1073741824!==n&&(t.flags|=64,a=!0,ia(r,!1),t.lanes=33554432);r.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=r.last)?n.sibling=c:t.child=c,r.last=c)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=zo(),n.sibling=null,t=Fs.current,uo(Fs,a?1&t|2:1&t),n):null;case 23:case 24:return Sl(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&\"unstable-defer-without-hiding\"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function la(e){switch(e.tag){case 1:yo(e.type)&&vo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Rs(),co(fo),co(ho),Gs(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Ds(e),null;case 13:return co(Fs),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return co(Fs),null;case 4:return Rs(),null;case 10:return rs(e),null;case 23:case 24:return Sl(),null;default:return null}}function ca(e,t){try{var n=\"\",r=t;do{n+=J(r),r=r.return}while(r);var o=n}catch(e){o=\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}return{value:e,source:t,stack:o}}function ua(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}Ki=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Hi=function(){},Gi=function(e,t,n,r){var s=e.memoizedProps;if(s!==r){e=t.stateNode,Is(Cs.current);var i,a=null;switch(n){case\"input\":s=Q(e,s),r=Q(e,r),a=[];break;case\"option\":s=se(e,s),r=se(e,r),a=[];break;case\"select\":s=o({},s,{value:void 0}),r=o({},r,{value:void 0}),a=[];break;case\"textarea\":s=ae(e,s),r=ae(e,r),a=[];break;default:\"function\"!=typeof s.onClick&&\"function\"==typeof r.onClick&&(e.onclick=Br)}for(p in Se(n,r),n=null,s)if(!r.hasOwnProperty(p)&&s.hasOwnProperty(p)&&null!=s[p])if(\"style\"===p){var c=s[p];for(i in c)c.hasOwnProperty(i)&&(n||(n={}),n[i]=\"\")}else\"dangerouslySetInnerHTML\"!==p&&\"children\"!==p&&\"suppressContentEditableWarning\"!==p&&\"suppressHydrationWarning\"!==p&&\"autoFocus\"!==p&&(l.hasOwnProperty(p)?a||(a=[]):(a=a||[]).push(p,null));for(p in r){var u=r[p];if(c=null!=s?s[p]:void 0,r.hasOwnProperty(p)&&u!==c&&(null!=u||null!=c))if(\"style\"===p)if(c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(n||(n={}),n[i]=\"\");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(n||(n={}),n[i]=u[i])}else n||(a||(a=[]),a.push(p,n)),n=u;else\"dangerouslySetInnerHTML\"===p?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(a=a||[]).push(p,u)):\"children\"===p?\"string\"!=typeof u&&\"number\"!=typeof u||(a=a||[]).push(p,\"\"+u):\"suppressContentEditableWarning\"!==p&&\"suppressHydrationWarning\"!==p&&(l.hasOwnProperty(p)?(null!=u&&\"onScroll\"===p&&Cr(\"scroll\",e),a||c===u||(a=[])):\"object\"==typeof u&&null!==u&&u.$$typeof===M?u.toString():(a=a||[]).push(p,u))}n&&(a=a||[]).push(\"style\",n);var p=a;(t.updateQueue=p)&&(t.flags|=4)}},Zi=function(e,t,n,r){n!==r&&(t.flags|=4)};var pa=\"function\"==typeof WeakMap?WeakMap:Map;function ha(e,t,n){(n=us(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Za||(Za=!0,Ya=r),ua(0,t)},n}function fa(e,t,n){(n=us(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if(\"function\"==typeof r){var o=t.value;n.payload=function(){return ua(0,t),r(o)}}var s=e.stateNode;return null!==s&&\"function\"==typeof s.componentDidCatch&&(n.callback=function(){\"function\"!=typeof r&&(null===Xa?Xa=new Set([this]):Xa.add(this),ua(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:\"\"})}),n}var da=\"function\"==typeof WeakSet?WeakSet:Set;function ma(e){var t=e.ref;if(null!==t)if(\"function\"==typeof t)try{t(null)}catch(t){$l(e,t)}else t.current=null}function ga(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Yo(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Jr(t.stateNode.containerInfo))}throw Error(i(163))}function ya(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Fl(n,e),Dl(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Yo(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ds(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ds(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function va(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)\"function\"==typeof(r=r.style).setProperty?r.setProperty(\"display\",\"none\",\"important\"):r.display=\"none\";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty(\"display\")?o.display:null,r.style.display=we(\"display\",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?\"\":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ba(e,t){if(_o&&\"function\"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(So,t)}catch(e){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Fl(t,n);else{r=t;try{o()}catch(e){$l(r,e)}}n=n.next}while(n!==e)}break;case 1:if(ma(t),\"function\"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(e){$l(t,e)}break;case 5:ma(t);break;case 4:ja(e,t)}}function wa(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function Ea(e){return 5===e.tag||3===e.tag||4===e.tag}function xa(e){e:{for(var t=e.return;null!==t;){if(Ea(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,\"\"),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||Ea(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Sa(e,n,t):_a(e,n,t)}function Sa(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(Sa(e,t,n),e=e.sibling;null!==e;)Sa(e,t,n),e=e.sibling}function _a(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_a(e,t,n),e=e.sibling;null!==e;)_a(e,t,n),e=e.sibling}function ja(e,t){for(var n,r,o=t,s=!1;;){if(!s){s=o.return;e:for(;;){if(null===s)throw Error(i(160));switch(n=s.stateNode,s.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}s=s.return}s=!0}if(5===o.tag||6===o.tag){e:for(var a=e,l=o,c=l;;)if(ba(a,c),null!==c.child&&4!==c.tag)c.child.return=c,c=c.child;else{if(c===l)break e;for(;null===c.sibling;){if(null===c.return||c.return===l)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}r?(a=n,l=o.stateNode,8===a.nodeType?a.parentNode.removeChild(l):a.removeChild(l)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(ba(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(s=!1)}o.sibling.return=o.return,o=o.sibling}}function Oa(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var s=t.updateQueue;if(t.updateQueue=null,null!==s){for(n[Xr]=r,\"input\"===e&&\"radio\"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<s.length;o+=2){var a=s[o],l=s[o+1];\"style\"===a?Ee(n,l):\"dangerouslySetInnerHTML\"===a?ge(n,l):\"children\"===a?ye(n,l):w(n,a,l,t)}switch(e){case\"input\":ne(n,r);break;case\"textarea\":ce(n,r);break;case\"select\":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(s=r.value)?ie(n,!!r.multiple,s,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:\"\",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Wa=zo(),va(t.child,!0)),void ka(t);case 19:return void ka(t);case 23:case 24:return void va(t,null!==t.memoizedState)}throw Error(i(163))}function ka(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new da),t.forEach((function(t){var r=Ul.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Aa(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ca=Math.ceil,Pa=E.ReactCurrentDispatcher,Na=E.ReactCurrentOwner,Ia=0,Ta=null,Ra=null,Ma=0,Da=0,Fa=lo(0),La=0,Ba=null,$a=0,qa=0,Ua=0,za=0,Va=null,Wa=0,Ja=1/0;function Ka(){Ja=zo()+500}var Ha,Ga=null,Za=!1,Ya=null,Xa=null,Qa=!1,el=null,tl=90,nl=[],rl=[],ol=null,sl=0,il=null,al=-1,ll=0,cl=0,ul=null,pl=!1;function hl(){return 0!=(48&Ia)?zo():-1!==al?al:al=zo()}function fl(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Vo()?1:2;if(0===ll&&(ll=$a),0!==Zo.transition){0!==cl&&(cl=null!==Va?Va.pendingLanes:0),e=ll;var t=4186112&~cl;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Vo(),0!=(4&Ia)&&98===e?e=Bt(12,ll):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ll),e}function dl(e,t,n){if(50<sl)throw sl=0,il=null,Error(i(185));if(null===(e=ml(e,t)))return null;Ut(e,t,n),e===Ta&&(Ua|=t,4===La&&vl(e,Ma));var r=Vo();1===t?0!=(8&Ia)&&0==(48&Ia)?bl(e):(gl(e,n),0===Ia&&(Ka(),Ho())):(0==(4&Ia)||98!==r&&99!==r||(null===ol?ol=new Set([e]):ol.add(e)),gl(e,n)),Va=e}function ml(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gl(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,s=e.expirationTimes,a=e.pendingLanes;0<a;){var l=31-zt(a),c=1<<l,u=s[l];if(-1===u){if(0==(c&r)||0!=(c&o)){u=t,Dt(c);var p=Mt;s[l]=10<=p?u+250:6<=p?u+5e3:-1}}else u<=t&&(e.expiredLanes|=c);a&=~c}if(r=Ft(e,e===Ta?Ma:0),t=Mt,0===r)null!==n&&(n!==Fo&&ko(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fo&&ko(n)}15===t?(n=bl.bind(null,e),null===Bo?(Bo=[n],$o=Oo(Io,Go)):Bo.push(n),n=Fo):14===t?n=Ko(99,bl.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Ko(n,yl.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function yl(e){if(al=-1,cl=ll=0,0!=(48&Ia))throw Error(i(327));var t=e.callbackNode;if(Ml()&&e.callbackNode!==t)return null;var n=Ft(e,e===Ta?Ma:0);if(0===n)return null;var r=n,o=Ia;Ia|=16;var s=Ol();for(Ta===e&&Ma===r||(Ka(),_l(e,r));;)try{Cl();break}catch(t){jl(e,t)}if(ns(),Pa.current=s,Ia=o,null!==Ra?r=0:(Ta=null,Ma=0,r=La),0!=($a&Ua))_l(e,0);else if(0!==r){if(2===r&&(Ia|=64,e.hydrate&&(e.hydrate=!1,Jr(e.containerInfo)),0!==(n=Lt(e))&&(r=kl(e,n))),1===r)throw t=Ba,_l(e,0),vl(e,n),gl(e,zo()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Il(e);break;case 3:if(vl(e,n),(62914560&n)===n&&10<(r=Wa+500-zo())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){hl(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Vr(Il.bind(null,e),r);break}Il(e);break;case 4:if(vl(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var a=31-zt(n);s=1<<a,(a=r[a])>o&&(o=a),n&=~s}if(n=o,10<(n=(120>(n=zo()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ca(n/1960))-n)){e.timeoutHandle=Vr(Il.bind(null,e),n);break}Il(e);break;default:throw Error(i(329))}}return gl(e,zo()),e.callbackNode===t?yl.bind(null,e):null}function vl(e,t){for(t&=~za,t&=~Ua,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-zt(t),r=1<<n;e[n]=-1,t&=~r}}function bl(e){if(0!=(48&Ia))throw Error(i(327));if(Ml(),e===Ta&&0!=(e.expiredLanes&Ma)){var t=Ma,n=kl(e,t);0!=($a&Ua)&&(n=kl(e,t=Ft(e,t)))}else n=kl(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Ia|=64,e.hydrate&&(e.hydrate=!1,Jr(e.containerInfo)),0!==(t=Lt(e))&&(n=kl(e,t))),1===n)throw n=Ba,_l(e,0),vl(e,t),gl(e,zo()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Il(e),gl(e,zo()),null}function wl(e,t){var n=Ia;Ia|=1;try{return e(t)}finally{0===(Ia=n)&&(Ka(),Ho())}}function El(e,t){var n=Ia;Ia&=-2,Ia|=8;try{return e(t)}finally{0===(Ia=n)&&(Ka(),Ho())}}function xl(e,t){uo(Fa,Da),Da|=t,$a|=t}function Sl(){Da=Fa.current,co(Fa)}function _l(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Wr(n)),null!==Ra)for(n=Ra.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vo();break;case 3:Rs(),co(fo),co(ho),Gs();break;case 5:Ds(r);break;case 4:Rs();break;case 13:case 19:co(Fs);break;case 10:rs(r);break;case 23:case 24:Sl()}n=n.return}Ta=e,Ra=Jl(e.current,null),Ma=Da=$a=t,La=0,Ba=null,za=Ua=qa=0}function jl(e,t){for(;;){var n=Ra;try{if(ns(),Zs.current=Ni,ni){for(var r=Qs.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xs=0,ti=ei=Qs=null,ri=!1,Na.current=null,null===n||null===n.return){La=1,Ba=t,Ra=null;break}e:{var s=e,i=n.return,a=n,l=t;if(t=Ma,a.flags|=2048,a.firstEffect=a.lastEffect=null,null!==l&&\"object\"==typeof l&&\"function\"==typeof l.then){var c=l;if(0==(2&a.mode)){var u=a.alternate;u?(a.updateQueue=u.updateQueue,a.memoizedState=u.memoizedState,a.lanes=u.lanes):(a.updateQueue=null,a.memoizedState=null)}var p=0!=(1&Fs.current),h=i;do{var f;if(f=13===h.tag){var d=h.memoizedState;if(null!==d)f=null!==d.dehydrated;else{var m=h.memoizedProps;f=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!p)}}if(f){var g=h.updateQueue;if(null===g){var y=new Set;y.add(c),h.updateQueue=y}else g.add(c);if(0==(2&h.mode)){if(h.flags|=64,a.flags|=16384,a.flags&=-2981,1===a.tag)if(null===a.alternate)a.tag=17;else{var v=us(-1,1);v.tag=2,ps(a,v)}a.lanes|=1;break e}l=void 0,a=t;var b=s.pingCache;if(null===b?(b=s.pingCache=new pa,l=new Set,b.set(c,l)):void 0===(l=b.get(c))&&(l=new Set,b.set(c,l)),!l.has(a)){l.add(a);var w=ql.bind(null,s,c,a);c.then(w,w)}h.flags|=4096,h.lanes=t;break e}h=h.return}while(null!==h);l=Error((K(a.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==La&&(La=2),l=ca(l,a),h=i;do{switch(h.tag){case 3:s=l,h.flags|=4096,t&=-t,h.lanes|=t,hs(h,ha(0,s,t));break e;case 1:s=l;var E=h.type,x=h.stateNode;if(0==(64&h.flags)&&(\"function\"==typeof E.getDerivedStateFromError||null!==x&&\"function\"==typeof x.componentDidCatch&&(null===Xa||!Xa.has(x)))){h.flags|=4096,t&=-t,h.lanes|=t,hs(h,fa(h,s,t));break e}}h=h.return}while(null!==h)}Nl(n)}catch(e){t=e,Ra===n&&null!==n&&(Ra=n=n.return);continue}break}}function Ol(){var e=Pa.current;return Pa.current=Ni,null===e?Ni:e}function kl(e,t){var n=Ia;Ia|=16;var r=Ol();for(Ta===e&&Ma===t||_l(e,t);;)try{Al();break}catch(t){jl(e,t)}if(ns(),Ia=n,Pa.current=r,null!==Ra)throw Error(i(261));return Ta=null,Ma=0,La}function Al(){for(;null!==Ra;)Pl(Ra)}function Cl(){for(;null!==Ra&&!Ao();)Pl(Ra)}function Pl(e){var t=Ha(e.alternate,e,Da);e.memoizedProps=e.pendingProps,null===t?Nl(e):Ra=t,Na.current=null}function Nl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=aa(n,t,Da)))return void(Ra=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Da)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=la(t)))return n.flags&=2047,void(Ra=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Ra=t);Ra=t=e}while(null!==t);0===La&&(La=5)}function Il(e){var t=Vo();return Jo(99,Tl.bind(null,e,t)),null}function Tl(e,t){do{Ml()}while(null!==el);if(0!=(48&Ia))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,s=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var a=e.eventTimes,l=e.expirationTimes;0<s;){var c=31-zt(s),u=1<<c;o[c]=0,a[c]=-1,l[c]=-1,s&=~u}if(null!==ol&&0==(24&r)&&ol.has(e)&&ol.delete(e),e===Ta&&(Ra=Ta=null,Ma=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ia,Ia|=32,Na.current=null,$r=Ht,gr(a=mr())){if(\"selectionStart\"in a)l={start:a.selectionStart,end:a.selectionEnd};else e:if(l=(l=a.ownerDocument)&&l.defaultView||window,(u=l.getSelection&&l.getSelection())&&0!==u.rangeCount){l=u.anchorNode,s=u.anchorOffset,c=u.focusNode,u=u.focusOffset;try{l.nodeType,c.nodeType}catch(e){l=null;break e}var p=0,h=-1,f=-1,d=0,m=0,g=a,y=null;t:for(;;){for(var v;g!==l||0!==s&&3!==g.nodeType||(h=p+s),g!==c||0!==u&&3!==g.nodeType||(f=p+u),3===g.nodeType&&(p+=g.nodeValue.length),null!==(v=g.firstChild);)y=g,g=v;for(;;){if(g===a)break t;if(y===l&&++d===s&&(h=p),y===c&&++m===u&&(f=p),null!==(v=g.nextSibling))break;y=(g=y).parentNode}g=v}l=-1===h||-1===f?null:{start:h,end:f}}else l=null;l=l||{start:0,end:0}}else l=null;qr={focusedElem:a,selectionRange:l},Ht=!1,ul=null,pl=!1,Ga=r;do{try{Rl()}catch(e){if(null===Ga)throw Error(i(330));$l(Ga,e),Ga=Ga.nextEffect}}while(null!==Ga);ul=null,Ga=r;do{try{for(a=e;null!==Ga;){var b=Ga.flags;if(16&b&&ye(Ga.stateNode,\"\"),128&b){var w=Ga.alternate;if(null!==w){var E=w.ref;null!==E&&(\"function\"==typeof E?E(null):E.current=null)}}switch(1038&b){case 2:xa(Ga),Ga.flags&=-3;break;case 6:xa(Ga),Ga.flags&=-3,Oa(Ga.alternate,Ga);break;case 1024:Ga.flags&=-1025;break;case 1028:Ga.flags&=-1025,Oa(Ga.alternate,Ga);break;case 4:Oa(Ga.alternate,Ga);break;case 8:ja(a,l=Ga);var x=l.alternate;wa(l),null!==x&&wa(x)}Ga=Ga.nextEffect}}catch(e){if(null===Ga)throw Error(i(330));$l(Ga,e),Ga=Ga.nextEffect}}while(null!==Ga);if(E=qr,w=mr(),b=E.focusedElem,a=E.selectionRange,w!==b&&b&&b.ownerDocument&&dr(b.ownerDocument.documentElement,b)){null!==a&&gr(b)&&(w=a.start,void 0===(E=a.end)&&(E=w),\"selectionStart\"in b?(b.selectionStart=w,b.selectionEnd=Math.min(E,b.value.length)):(E=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),l=b.textContent.length,x=Math.min(a.start,l),a=void 0===a.end?x:Math.min(a.end,l),!E.extend&&x>a&&(l=a,a=x,x=l),l=fr(b,x),s=fr(b,a),l&&s&&(1!==E.rangeCount||E.anchorNode!==l.node||E.anchorOffset!==l.offset||E.focusNode!==s.node||E.focusOffset!==s.offset)&&((w=w.createRange()).setStart(l.node,l.offset),E.removeAllRanges(),x>a?(E.addRange(w),E.extend(s.node,s.offset)):(w.setEnd(s.node,s.offset),E.addRange(w))))),w=[];for(E=b;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for(\"function\"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(E=w[b]).element.scrollLeft=E.left,E.element.scrollTop=E.top}Ht=!!$r,qr=$r=null,e.current=n,Ga=r;do{try{for(b=e;null!==Ga;){var S=Ga.flags;if(36&S&&ya(b,Ga.alternate,Ga),128&S){w=void 0;var _=Ga.ref;if(null!==_){var j=Ga.stateNode;Ga.tag,w=j,\"function\"==typeof _?_(w):_.current=w}}Ga=Ga.nextEffect}}catch(e){if(null===Ga)throw Error(i(330));$l(Ga,e),Ga=Ga.nextEffect}}while(null!==Ga);Ga=null,Lo(),Ia=o}else e.current=n;if(Qa)Qa=!1,el=e,tl=t;else for(Ga=r;null!==Ga;)t=Ga.nextEffect,Ga.nextEffect=null,8&Ga.flags&&((S=Ga).sibling=null,S.stateNode=null),Ga=t;if(0===(r=e.pendingLanes)&&(Xa=null),1===r?e===il?sl++:(sl=0,il=e):sl=0,n=n.stateNode,_o&&\"function\"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(So,n,void 0,64==(64&n.current.flags))}catch(e){}if(gl(e,zo()),Za)throw Za=!1,e=Ya,Ya=null,e;return 0!=(8&Ia)||Ho(),null}function Rl(){for(;null!==Ga;){var e=Ga.alternate;pl||null===ul||(0!=(8&Ga.flags)?Qe(Ga,ul)&&(pl=!0):13===Ga.tag&&Aa(e,Ga)&&Qe(Ga,ul)&&(pl=!0));var t=Ga.flags;0!=(256&t)&&ga(e,Ga),0==(512&t)||Qa||(Qa=!0,Ko(97,(function(){return Ml(),null}))),Ga=Ga.nextEffect}}function Ml(){if(90!==tl){var e=97<tl?97:tl;return tl=90,Jo(e,Ll)}return!1}function Dl(e,t){nl.push(t,e),Qa||(Qa=!0,Ko(97,(function(){return Ml(),null})))}function Fl(e,t){rl.push(t,e),Qa||(Qa=!0,Ko(97,(function(){return Ml(),null})))}function Ll(){if(null===el)return!1;var e=el;if(el=null,0!=(48&Ia))throw Error(i(331));var t=Ia;Ia|=32;var n=rl;rl=[];for(var r=0;r<n.length;r+=2){var o=n[r],s=n[r+1],a=o.destroy;if(o.destroy=void 0,\"function\"==typeof a)try{a()}catch(e){if(null===s)throw Error(i(330));$l(s,e)}}for(n=nl,nl=[],r=0;r<n.length;r+=2){o=n[r],s=n[r+1];try{var l=o.create;o.destroy=l()}catch(e){if(null===s)throw Error(i(330));$l(s,e)}}for(l=e.current.firstEffect;null!==l;)e=l.nextEffect,l.nextEffect=null,8&l.flags&&(l.sibling=null,l.stateNode=null),l=e;return Ia=t,Ho(),!0}function Bl(e,t,n){ps(e,t=ha(0,t=ca(n,t),1)),t=hl(),null!==(e=ml(e,1))&&(Ut(e,1,t),gl(e,t))}function $l(e,t){if(3===e.tag)Bl(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bl(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"==typeof n.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===Xa||!Xa.has(r))){var o=fa(n,e=ca(t,e),1);if(ps(n,o),o=hl(),null!==(n=ml(n,1)))Ut(n,1,o),gl(n,o);else if(\"function\"==typeof r.componentDidCatch&&(null===Xa||!Xa.has(r)))try{r.componentDidCatch(t,e)}catch(e){}break}}n=n.return}}function ql(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=hl(),e.pingedLanes|=e.suspendedLanes&n,Ta===e&&(Ma&n)===n&&(4===La||3===La&&(62914560&Ma)===Ma&&500>zo()-Wa?_l(e,0):za|=n),gl(e,t)}function Ul(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Vo()?1:2:(0===ll&&(ll=$a),0===(t=$t(62914560&~ll))&&(t=4194304))),n=hl(),null!==(e=ml(e,t))&&(Ut(e,t,n),gl(e,n))}function zl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Vl(e,t,n,r){return new zl(e,t,n,r)}function Wl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Jl(e,t){var n=e.alternate;return null===n?((n=Vl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Kl(e,t,n,r,o,s){var a=2;if(r=e,\"function\"==typeof e)Wl(e)&&(a=1);else if(\"string\"==typeof e)a=5;else e:switch(e){case _:return Hl(n.children,o,s,t);case D:a=8,o|=16;break;case j:a=8,o|=1;break;case O:return(e=Vl(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=s,e;case P:return(e=Vl(13,n,t,o)).type=P,e.elementType=P,e.lanes=s,e;case N:return(e=Vl(19,n,t,o)).elementType=N,e.lanes=s,e;case F:return Gl(n,o,s,t);case L:return(e=Vl(24,n,t,o)).elementType=L,e.lanes=s,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case k:a=10;break e;case A:a=9;break e;case C:a=11;break e;case I:a=14;break e;case T:a=16,r=null;break e;case R:a=22;break e}throw Error(i(130,null==e?e:typeof e,\"\"))}return(t=Vl(a,n,t,o)).elementType=e,t.type=r,t.lanes=s,t}function Hl(e,t,n,r){return(e=Vl(7,e,r,t)).lanes=n,e}function Gl(e,t,n,r){return(e=Vl(23,e,r,t)).elementType=F,e.lanes=n,e}function Zl(e,t,n){return(e=Vl(6,e,null,t)).lanes=n,e}function Yl(e,t,n){return(t=Vl(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xl(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=qt(0),this.expirationTimes=qt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=qt(0),this.mutableSourceEagerHydrationData=null}function Ql(e,t,n,r){var o=t.current,s=hl(),a=fl(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(yo(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(i(171))}if(1===n.tag){var c=n.type;if(yo(c)){n=wo(n,c,l);break e}}n=l}else n=po;return null===t.context?t.context=n:t.pendingContext=n,(t=us(s,a)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),ps(o,t),dl(o,a,s),a}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xl(e,t,null!=n&&!0===n.hydrate),t=Vl(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ls(t),e[Qr]=n.current,Nr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function oc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||\" react-mount-point-unstable \"!==e.nodeValue))}function sc(e,t,n,r,o){var s=n._reactRootContainer;if(s){var i=s._internalRoot;if(\"function\"==typeof o){var a=o;o=function(){var e=ec(i);a.call(e)}}Ql(t,i,e,o)}else{if(s=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute(\"data-reactroot\"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),i=s._internalRoot,\"function\"==typeof o){var l=o;o=function(){var e=ec(i);l.call(e)}}El((function(){Ql(t,i,e,o)}))}return ec(i)}function ic(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!oc(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:\"\"+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Ha=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||fo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Ji(t),Ks();break;case 5:Ms(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:Ts(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;uo(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(uo(Fs,1&Fs.current),null!==(t=sa(e,t,n))?t.sibling:null);uo(Fs,1&Fs.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return oa(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),uo(Fs,Fs.current),r)break;return null;case 23:case 24:return t.lanes=0,qi(e,t,n)}return sa(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,ho.current),ss(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,\"object\"==typeof o&&null!==o&&\"function\"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var s=!0;Eo(t)}else s=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ls(t);var a=r.getDerivedStateFromProps;\"function\"==typeof a&&gs(t,r,a,e),o.updater=ys,t.stateNode=o,o._reactInternals=t,Es(t,r,e,n),t=Wi(null,t,r,!0,s,n)}else t.tag=0,Fi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(s=o._init)(o._payload),t.type=o,s=t.tag=function(e){if(\"function\"==typeof e)return Wl(e)?1:0;if(null!=e){if((e=e.$$typeof)===C)return 11;if(e===I)return 14}return 2}(o),e=Yo(o,e),s){case 0:t=zi(null,t,o,e,n);break e;case 1:t=Vi(null,t,o,e,n);break e;case 11:t=Li(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Yo(o.type,e),r,n);break e}throw Error(i(306,o,\"\"))}return t;case 0:return r=t.type,o=t.pendingProps,zi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 1:return r=t.type,o=t.pendingProps,Vi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 3:if(Ji(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,cs(e,t),fs(t,r,null,n),(r=t.memoizedState.element)===o)Ks(),t=sa(e,t,n);else{if((s=(o=t.stateNode).hydrate)&&($s=Kr(t.stateNode.containerInfo.firstChild),Bs=t,s=qs=!0),s){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(s=e[o])._workInProgressVersionPrimary=e[o+1],Hs.push(s);for(n=ks(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Ks();t=t.child}return t;case 5:return Ms(t),null===e&&Vs(t),r=t.type,o=t.pendingProps,s=null!==e?e.memoizedProps:null,a=o.children,zr(r,o)?a=null:null!==s&&zr(r,s)&&(t.flags|=16),Ui(e,t),Fi(e,t,a,n),t.child;case 6:return null===e&&Vs(t),null;case 13:return Xi(e,t,n);case 4:return Ts(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Os(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Li(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,a=t.memoizedProps,s=o.value;var l=t.type._context;if(uo(Xo,l._currentValue),l._currentValue=s,null!==a)if(l=a.value,0===(s=cr(l,s)?0:0|(\"function\"==typeof r._calculateChangedBits?r._calculateChangedBits(l,s):1073741823))){if(a.children===o.children&&!fo.current){t=sa(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var c=l.dependencies;if(null!==c){a=l.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&s)){1===l.tag&&((u=us(-1,n&-n)).tag=2,ps(l,u)),l.lanes|=n,null!==(u=l.alternate)&&(u.lanes|=n),os(l.return,n),c.lanes|=n;break}u=u.next}}else a=10===l.tag&&l.type===t.type?null:l.child;if(null!==a)a.return=l;else for(a=l;null!==a;){if(a===t){a=null;break}if(null!==(l=a.sibling)){l.return=a.return,a=l;break}a=a.return}l=a}Fi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(s=t.pendingProps).children,ss(t,n),r=r(o=is(o,s.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return s=Yo(o=t.type,t.pendingProps),Bi(e,t,o,s=Yo(o.type,s),r,n);case 15:return $i(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Yo(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,ss(t,n),bs(t,r,o),Es(t,r,o,n),Wi(null,t,r,!0,e,n);case 19:return oa(e,t,n);case 23:case 24:return qi(e,t,n)}throw Error(i(156,t.tag))},rc.prototype.render=function(e){Ql(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Ql(null,e,null,(function(){t[Qr]=null}))},et=function(e){13===e.tag&&(dl(e,4,hl()),nc(e,4))},tt=function(e){13===e.tag&&(dl(e,67108864,hl()),nc(e,67108864))},nt=function(e){if(13===e.tag){var t=hl(),n=fl(e);dl(e,n,t),nc(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case\"input\":if(ne(e,n),t=n.name,\"radio\"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+t)+'][type=\"radio\"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));Y(r),ne(r,o)}}}break;case\"textarea\":ce(e,n);break;case\"select\":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ie=wl,Te=function(e,t,n,r,o){var s=Ia;Ia|=4;try{return Jo(98,e.bind(null,t,n,r,o))}finally{0===(Ia=s)&&(Ka(),Ho())}},Re=function(){0==(49&Ia)&&(function(){if(null!==ol){var e=ol;ol=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gl(e,zo())}))}Ho()}(),Ml())},Me=function(e,t){var n=Ia;Ia|=2;try{return e(t)}finally{0===(Ia=n)&&(Ka(),Ho())}};var ac={Events:[no,ro,oo,Pe,Ne,Ml,{current:!1}]},lc={findFiberByHostInstance:to,bundleType:0,version:\"17.0.2\",rendererPackageName:\"react-dom\"},cc={bundleType:lc.bundleType,version:lc.version,rendererPackageName:lc.rendererPackageName,rendererConfig:lc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:lc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uc=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uc.isDisabled&&uc.supportsFiber)try{So=uc.inject(cc),_o=uc}catch(me){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ac,t.createPortal=ic,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if(\"function\"==typeof e.render)throw Error(i(188));throw Error(i(268,Object.keys(e)))}return e=null===(e=Xe(t))?null:e.stateNode},t.flushSync=function(e,t){var n=Ia;if(0!=(48&n))return e(t);Ia|=1;try{if(e)return Jo(99,e.bind(null,t))}finally{Ia=n,Ho()}},t.hydrate=function(e,t,n){if(!oc(t))throw Error(i(200));return sc(null,e,t,!0,n)},t.render=function(e,t,n){if(!oc(t))throw Error(i(200));return sc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!oc(e))throw Error(i(40));return!!e._reactRootContainer&&(El((function(){sc(null,null,e,!1,(function(){e._reactRootContainer=null,e[Qr]=null}))})),!0)},t.unstable_batchedUpdates=wl,t.unstable_createPortal=function(e,t){return ic(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!oc(n))throw Error(i(200));if(null==e||void 0===e._reactInternals)throw Error(i(38));return sc(e,t,n,!1,r)},t.version=\"17.0.2\"},73935:(e,t,n)=>{\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(64448)},23930:(e,t,n)=>{\"use strict\";var r,o=n(43393),s=\"<<anonymous>>\",i=function(){invariant(!1,\"ImmutablePropTypes type checking code is stripped in production.\")};i.isRequired=i;var a=function(){return i};function l(e){var t=typeof e;return Array.isArray(e)?\"array\":e instanceof RegExp?\"object\":e instanceof o.Iterable?\"Immutable.\"+e.toSource().split(\" \")[0]:t}function c(e){function t(t,n,r,o,i,a){for(var l=arguments.length,c=Array(l>6?l-6:0),u=6;u<l;u++)c[u-6]=arguments[u];return a=a||r,o=o||s,null!=n[r]?e.apply(void 0,[n,r,o,i,a].concat(c)):t?new Error(\"Required \"+i+\" `\"+a+\"` was not specified in `\"+o+\"`.\"):void 0}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function u(e,t){return n=\"Iterable.\"+e,r=function(e){return o.Iterable.isIterable(e)&&t(e)},c((function(e,t,o,s,i){var a=e[t];if(!r(a)){var c=l(a);return new Error(\"Invalid \"+s+\" `\"+i+\"` of type `\"+c+\"` supplied to `\"+o+\"`, expected `\"+n+\"`.\")}return null}));var n,r}(r={listOf:a,mapOf:a,orderedMapOf:a,setOf:a,orderedSetOf:a,stackOf:a,iterableOf:a,recordOf:a,shape:a,contains:a,mapContains:a,orderedMapContains:a,list:i,map:i,orderedMap:i,set:i,orderedSet:i,stack:i,seq:i,record:i,iterable:i}).iterable.indexed=u(\"Indexed\",o.Iterable.isIndexed),r.iterable.keyed=u(\"Keyed\",o.Iterable.isKeyed),e.exports=r},69921:(e,t)=>{\"use strict\";var n=60103,r=60106,o=60107,s=60108,i=60114,a=60109,l=60110,c=60112,u=60113,p=60120,h=60115,f=60116,d=60121,m=60122,g=60117,y=60129,v=60131;if(\"function\"==typeof Symbol&&Symbol.for){var b=Symbol.for;n=b(\"react.element\"),r=b(\"react.portal\"),o=b(\"react.fragment\"),s=b(\"react.strict_mode\"),i=b(\"react.profiler\"),a=b(\"react.provider\"),l=b(\"react.context\"),c=b(\"react.forward_ref\"),u=b(\"react.suspense\"),p=b(\"react.suspense_list\"),h=b(\"react.memo\"),f=b(\"react.lazy\"),d=b(\"react.block\"),m=b(\"react.server.block\"),g=b(\"react.fundamental\"),y=b(\"react.debug_trace_mode\"),v=b(\"react.legacy_hidden\")}function w(e){if(\"object\"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case o:case i:case s:case u:case p:return e;default:switch(e=e&&e.$$typeof){case l:case c:case f:case h:case a:return e;default:return t}}case r:return t}}}var E=a,x=n,S=c,_=o,j=f,O=h,k=r,A=i,C=s,P=u;t.ContextConsumer=l,t.ContextProvider=E,t.Element=x,t.ForwardRef=S,t.Fragment=_,t.Lazy=j,t.Memo=O,t.Portal=k,t.Profiler=A,t.StrictMode=C,t.Suspense=P,t.isAsyncMode=function(){return!1},t.isConcurrentMode=function(){return!1},t.isContextConsumer=function(e){return w(e)===l},t.isContextProvider=function(e){return w(e)===a},t.isElement=function(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return w(e)===c},t.isFragment=function(e){return w(e)===o},t.isLazy=function(e){return w(e)===f},t.isMemo=function(e){return w(e)===h},t.isPortal=function(e){return w(e)===r},t.isProfiler=function(e){return w(e)===i},t.isStrictMode=function(e){return w(e)===s},t.isSuspense=function(e){return w(e)===u},t.isValidElementType=function(e){return\"string\"==typeof e||\"function\"==typeof e||e===o||e===i||e===y||e===s||e===u||e===p||e===v||\"object\"==typeof e&&null!==e&&(e.$$typeof===f||e.$$typeof===h||e.$$typeof===a||e.$$typeof===l||e.$$typeof===c||e.$$typeof===g||e.$$typeof===d||e[0]===m)},t.typeOf=w},59864:(e,t,n)=>{\"use strict\";e.exports=n(69921)},72408:(e,t,n)=>{\"use strict\";var r=n(27418),o=60103,s=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,a=60110,l=60112;t.Suspense=60113;var c=60115,u=60116;if(\"function\"==typeof Symbol&&Symbol.for){var p=Symbol.for;o=p(\"react.element\"),s=p(\"react.portal\"),t.Fragment=p(\"react.fragment\"),t.StrictMode=p(\"react.strict_mode\"),t.Profiler=p(\"react.profiler\"),i=p(\"react.provider\"),a=p(\"react.context\"),l=p(\"react.forward_ref\"),t.Suspense=p(\"react.suspense\"),c=p(\"react.memo\"),u=p(\"react.lazy\")}var h=\"function\"==typeof Symbol&&Symbol.iterator;function f(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var d={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||d}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||d}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,\"setState\")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},y.prototype=g.prototype;var b=v.prototype=new y;b.constructor=v,r(b,g.prototype),b.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,x={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,s={},i=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(i=\"\"+t.key),t)E.call(t,r)&&!x.hasOwnProperty(r)&&(s[r]=t[r]);var l=arguments.length-2;if(1===l)s.children=n;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];s.children=c}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===s[r]&&(s[r]=l[r]);return{$$typeof:o,type:e,key:i,ref:a,props:s,_owner:w.current}}function _(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===o}var j=/\\/+/g;function O(e,t){return\"object\"==typeof e&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+e.replace(/[=:]/g,(function(e){return t[e]}))}(\"\"+e.key):t.toString(36)}function k(e,t,n,r,i){var a=typeof e;\"undefined\"!==a&&\"boolean\"!==a||(e=null);var l=!1;if(null===e)l=!0;else switch(a){case\"string\":case\"number\":l=!0;break;case\"object\":switch(e.$$typeof){case o:case s:l=!0}}if(l)return i=i(l=e),e=\"\"===r?\".\"+O(l,0):r,Array.isArray(i)?(n=\"\",null!=e&&(n=e.replace(j,\"$&/\")+\"/\"),k(i,t,n,\"\",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||l&&l.key===i.key?\"\":(\"\"+i.key).replace(j,\"$&/\")+\"/\")+e)),t.push(i)),1;if(l=0,r=\"\"===r?\".\":r+\":\",Array.isArray(e))for(var c=0;c<e.length;c++){var u=r+O(a=e[c],c);l+=k(a,t,n,u,i)}else if(u=function(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=h&&e[h]||e[\"@@iterator\"])?e:null}(e),\"function\"==typeof u)for(e=u.call(e),c=0;!(a=e.next()).done;)l+=k(a=a.value,t,n,u=r+O(a,c++),i);else if(\"object\"===a)throw t=\"\"+e,Error(f(31,\"[object Object]\"===t?\"object with keys {\"+Object.keys(e).join(\", \")+\"}\":t));return l}function A(e,t,n){if(null==e)return e;var r=[],o=0;return k(e,r,\"\",\"\",(function(e){return t.call(n,e,o++)})),r}function C(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function N(){var e=P.current;if(null===e)throw Error(f(321));return e}var I={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(f(143));return e}},t.Component=g,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var s=r({},e.props),i=e.key,a=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,l=w.current),void 0!==t.key&&(i=\"\"+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)E.call(t,u)&&!x.hasOwnProperty(u)&&(s[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)s.children=n;else if(1<u){c=Array(u);for(var p=0;p<u;p++)c[p]=arguments[p+2];s.children=c}return{$$typeof:o,type:e.type,key:i,ref:a,props:s,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:a,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:C}},t.memo=function(e,t){return{$$typeof:c,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().useState(e)},t.version=\"17.0.2\"},67294:(e,t,n)=>{\"use strict\";e.exports=n(72408)},94281:e=>{\"use strict\";var t={};function n(e,n,r){r||(r=Error);var o=function(e){var t,r;function o(t,r,o){return e.call(this,function(e,t,r){return\"string\"==typeof n?n:n(e,t,r)}(t,r,o))||this}return r=e,(t=o).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,o}(r);o.prototype.name=r.name,o.prototype.code=e,t[e]=o}function r(e,t){if(Array.isArray(e)){var n=e.length;return e=e.map((function(e){return String(e)})),n>2?\"one of \".concat(t,\" \").concat(e.slice(0,n-1).join(\", \"),\", or \")+e[n-1]:2===n?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}n(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),n(\"ERR_INVALID_ARG_TYPE\",(function(e,t,n){var o,s,i,a;if(\"string\"==typeof t&&(s=\"not \",t.substr(!i||i<0?0:+i,s.length)===s)?(o=\"must not be\",t=t.replace(/^not /,\"\")):o=\"must be\",function(e,t,n){return(void 0===n||n>e.length)&&(n=e.length),e.substring(n-t.length,n)===t}(e,\" argument\"))a=\"The \".concat(e,\" \").concat(o,\" \").concat(r(t,\"type\"));else{var l=function(e,t,n){return\"number\"!=typeof n&&(n=0),!(n+t.length>e.length)&&-1!==e.indexOf(t,n)}(e,\".\")?\"property\":\"argument\";a='The \"'.concat(e,'\" ').concat(l,\" \").concat(o,\" \").concat(r(t,\"type\"))}return a+=\". Received type \".concat(typeof n)}),TypeError),n(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),n(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),n(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),n(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),n(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),n(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),n(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),n(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),n(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),n(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),e.exports.q=t},56753:(e,t,n)=>{\"use strict\";var r=n(34155),o=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=u;var s=n(79481),i=n(64229);n(35717)(u,s);for(var a=o(i.prototype),l=0;l<a.length;l++){var c=a[l];u.prototype[c]||(u.prototype[c]=i.prototype[c])}function u(e){if(!(this instanceof u))return new u(e);s.call(this,e),i.call(this,e),this.allowHalfOpen=!0,e&&(!1===e.readable&&(this.readable=!1),!1===e.writable&&(this.writable=!1),!1===e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",p)))}function p(){this._writableState.ended||r.nextTick(h,this)}function h(e){e.end()}Object.defineProperty(u.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(u.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(u.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(u.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}})},82725:(e,t,n)=>{\"use strict\";e.exports=o;var r=n(74605);function o(e){if(!(this instanceof o))return new o(e);r.call(this,e)}n(35717)(o,r),o.prototype._transform=function(e,t,n){n(null,e)}},79481:(e,t,n)=>{\"use strict\";var r,o=n(34155);e.exports=j,j.ReadableState=_;n(17187).EventEmitter;var s=function(e,t){return e.listeners(t).length},i=n(22503),a=n(48764).Buffer,l=(void 0!==n.g?n.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){};var c,u=n(94616);c=u&&u.debuglog?u.debuglog(\"stream\"):function(){};var p,h,f,d=n(57327),m=n(61195),g=n(82457).getHighWaterMark,y=n(94281).q,v=y.ERR_INVALID_ARG_TYPE,b=y.ERR_STREAM_PUSH_AFTER_EOF,w=y.ERR_METHOD_NOT_IMPLEMENTED,E=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;n(35717)(j,i);var x=m.errorOrDestroy,S=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function _(e,t,o){r=r||n(56753),e=e||{},\"boolean\"!=typeof o&&(o=t instanceof r),this.objectMode=!!e.objectMode,o&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=g(this,e,\"readableHighWaterMark\",o),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n(32553).s),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function j(e){if(r=r||n(56753),!(this instanceof j))return new j(e);var t=this instanceof r;this._readableState=new _(e,this,t),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),i.call(this)}function O(e,t,n,r,o){c(\"readableAddChunk\",t);var s,i=e._readableState;if(null===t)i.reading=!1,function(e,t){if(c(\"onEofChunk\"),t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,t.sync?P(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,N(e)))}(e,i);else if(o||(s=function(e,t){var n;r=t,a.isBuffer(r)||r instanceof l||\"string\"==typeof t||void 0===t||e.objectMode||(n=new v(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],t));var r;return n}(i,t)),s)x(e,s);else if(i.objectMode||t&&t.length>0)if(\"string\"==typeof t||i.objectMode||Object.getPrototypeOf(t)===a.prototype||(t=function(e){return a.from(e)}(t)),r)i.endEmitted?x(e,new E):k(e,i,t,!0);else if(i.ended)x(e,new b);else{if(i.destroyed)return!1;i.reading=!1,i.decoder&&!n?(t=i.decoder.write(t),i.objectMode||0!==t.length?k(e,i,t,!1):I(e,i)):k(e,i,t,!1)}else r||(i.reading=!1,I(e,i));return!i.ended&&(i.length<i.highWaterMark||0===i.length)}function k(e,t,n,r){t.flowing&&0===t.length&&!t.sync?(t.awaitDrain=0,e.emit(\"data\",n)):(t.length+=t.objectMode?1:n.length,r?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&P(e)),I(e,t)}Object.defineProperty(j.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),j.prototype.destroy=m.destroy,j.prototype._undestroy=m.undestroy,j.prototype._destroy=function(e,t){t(e)},j.prototype.push=function(e,t){var n,r=this._readableState;return r.objectMode?n=!0:\"string\"==typeof e&&((t=t||r.defaultEncoding)!==r.encoding&&(e=a.from(e,t),t=\"\"),n=!0),O(this,e,t,!1,n)},j.prototype.unshift=function(e){return O(this,e,null,!0,!1)},j.prototype.isPaused=function(){return!1===this._readableState.flowing},j.prototype.setEncoding=function(e){p||(p=n(32553).s);var t=new p(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;for(var r=this._readableState.buffer.head,o=\"\";null!==r;)o+=t.write(r.data),r=r.next;return this._readableState.buffer.clear(),\"\"!==o&&this._readableState.buffer.push(o),this._readableState.length=o.length,this};var A=1073741824;function C(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=A?e=A:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function P(e){var t=e._readableState;c(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,o.nextTick(N,e))}function N(e){var t=e._readableState;c(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,F(e)}function I(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(T,e,t))}function T(e,t){for(;!t.reading&&!t.ended&&(t.length<t.highWaterMark||t.flowing&&0===t.length);){var n=t.length;if(c(\"maybeReadMore read 0\"),e.read(0),n===t.length)break}t.readingMore=!1}function R(e){var t=e._readableState;t.readableListening=e.listenerCount(\"readable\")>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function M(e){c(\"readable nexttick read 0\"),e.read(0)}function D(e,t){c(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),F(e),t.flowing&&!t.reading&&e.read(0)}function F(e){var t=e._readableState;for(c(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function L(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):n=t.buffer.consume(e,t.decoder),n);var n}function B(e){var t=e._readableState;c(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,o.nextTick($,t,e))}function $(e,t){if(c(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var n=t._writableState;(!n||n.autoDestroy&&n.finished)&&t.destroy()}}function q(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}j.prototype.read=function(e){c(\"read\",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?B(this):P(this),null;if(0===(e=C(e,t))&&t.ended)return 0===t.length&&B(this),null;var r,o=t.needReadable;return c(\"need readable\",o),(0===t.length||t.length-e<t.highWaterMark)&&c(\"length less than watermark\",o=!0),t.ended||t.reading?c(\"reading or ended\",o=!1):o&&(c(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=C(n,t))),null===(r=e>0?L(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&B(this)),null!==r&&this.emit(\"data\",r),r},j.prototype._read=function(e){x(this,new w(\"_read()\"))},j.prototype.pipe=function(e,t){var n=this,r=this._readableState;switch(r.pipesCount){case 0:r.pipes=e;break;case 1:r.pipes=[r.pipes,e];break;default:r.pipes.push(e)}r.pipesCount+=1,c(\"pipe count=%d opts=%j\",r.pipesCount,t);var i=(!t||!1!==t.end)&&e!==o.stdout&&e!==o.stderr?l:g;function a(t,o){c(\"onunpipe\"),t===n&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",d),e.removeListener(\"finish\",m),e.removeListener(\"drain\",u),e.removeListener(\"error\",f),e.removeListener(\"unpipe\",a),n.removeListener(\"end\",l),n.removeListener(\"end\",g),n.removeListener(\"data\",h),p=!0,!r.awaitDrain||e._writableState&&!e._writableState.needDrain||u())}function l(){c(\"onend\"),e.end()}r.endEmitted?o.nextTick(i):n.once(\"end\",i),e.on(\"unpipe\",a);var u=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,F(e))}}(n);e.on(\"drain\",u);var p=!1;function h(t){c(\"ondata\");var o=e.write(t);c(\"dest.write\",o),!1===o&&((1===r.pipesCount&&r.pipes===e||r.pipesCount>1&&-1!==q(r.pipes,e))&&!p&&(c(\"false write response, pause\",r.awaitDrain),r.awaitDrain++),n.pause())}function f(t){c(\"onerror\",t),g(),e.removeListener(\"error\",f),0===s(e,\"error\")&&x(e,t)}function d(){e.removeListener(\"finish\",m),g()}function m(){c(\"onfinish\"),e.removeListener(\"close\",d),g()}function g(){c(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",h),function(e,t,n){if(\"function\"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,\"error\",f),e.once(\"close\",d),e.once(\"finish\",m),e.emit(\"pipe\",n),r.flowing||(c(\"pipe resume\"),n.resume()),e},j.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var s=0;s<o;s++)r[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var i=q(t.pipes,e);return-1===i||(t.pipes.splice(i,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,n)),this},j.prototype.on=function(e,t){var n=i.prototype.on.call(this,e,t),r=this._readableState;return\"data\"===e?(r.readableListening=this.listenerCount(\"readable\")>0,!1!==r.flowing&&this.resume()):\"readable\"===e&&(r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,c(\"on readable\",r.length,r.reading),r.length?P(this):r.reading||o.nextTick(M,this))),n},j.prototype.addListener=j.prototype.on,j.prototype.removeListener=function(e,t){var n=i.prototype.removeListener.call(this,e,t);return\"readable\"===e&&o.nextTick(R,this),n},j.prototype.removeAllListeners=function(e){var t=i.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||o.nextTick(R,this),t},j.prototype.resume=function(){var e=this._readableState;return e.flowing||(c(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,o.nextTick(D,e,t))}(this,e)),e.paused=!1,this},j.prototype.pause=function(){return c(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(c(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},j.prototype.wrap=function(e){var t=this,n=this._readableState,r=!1;for(var o in e.on(\"end\",(function(){if(c(\"wrapped end\"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){(c(\"wrapped data\"),n.decoder&&(o=n.decoder.write(o)),n.objectMode&&null==o)||(n.objectMode||o&&o.length)&&(t.push(o)||(r=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var s=0;s<S.length;s++)e.on(S[s],this.emit.bind(this,S[s]));return this._read=function(t){c(\"wrapped _read\",t),r&&(r=!1,e.resume())},this},\"function\"==typeof Symbol&&(j.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=n(45850)),h(this)}),Object.defineProperty(j.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(j.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(j.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}}),j._fromList=L,Object.defineProperty(j.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(j.from=function(e,t){return void 0===f&&(f=n(15167)),f(j,e,t)})},74605:(e,t,n)=>{\"use strict\";e.exports=u;var r=n(94281).q,o=r.ERR_METHOD_NOT_IMPLEMENTED,s=r.ERR_MULTIPLE_CALLBACK,i=r.ERR_TRANSFORM_ALREADY_TRANSFORMING,a=r.ERR_TRANSFORM_WITH_LENGTH_0,l=n(56753);function c(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(null===r)return this.emit(\"error\",new s);n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}function u(e){if(!(this instanceof u))return new u(e);l.call(this,e),this._transformState={afterTransform:c.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",p)}function p(){var e=this;\"function\"!=typeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(t,n){h(e,t,n)}))}function h(e,t,n){if(t)return e.emit(\"error\",t);if(null!=n&&e.push(n),e._writableState.length)throw new a;if(e._transformState.transforming)throw new i;return e.push(null)}n(35717)(u,l),u.prototype.push=function(e,t){return this._transformState.needTransform=!1,l.prototype.push.call(this,e,t)},u.prototype._transform=function(e,t,n){n(new o(\"_transform()\"))},u.prototype._write=function(e,t,n){var r=this._transformState;if(r.writecb=n,r.writechunk=e,r.writeencoding=t,!r.transforming){var o=this._readableState;(r.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},u.prototype._read=function(e){var t=this._transformState;null===t.writechunk||t.transforming?t.needTransform=!0:(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform))},u.prototype._destroy=function(e,t){l.prototype._destroy.call(this,e,(function(e){t(e)}))}},64229:(e,t,n)=>{\"use strict\";var r,o=n(34155);function s(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree.next=e}(t,e)}}e.exports=j,j.WritableState=_;var i={deprecate:n(94927)},a=n(22503),l=n(48764).Buffer,c=(void 0!==n.g?n.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){};var u,p=n(61195),h=n(82457).getHighWaterMark,f=n(94281).q,d=f.ERR_INVALID_ARG_TYPE,m=f.ERR_METHOD_NOT_IMPLEMENTED,g=f.ERR_MULTIPLE_CALLBACK,y=f.ERR_STREAM_CANNOT_PIPE,v=f.ERR_STREAM_DESTROYED,b=f.ERR_STREAM_NULL_VALUES,w=f.ERR_STREAM_WRITE_AFTER_END,E=f.ERR_UNKNOWN_ENCODING,x=p.errorOrDestroy;function S(){}function _(e,t,i){r=r||n(56753),e=e||{},\"boolean\"!=typeof i&&(i=t instanceof r),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=h(this,e,\"writableHighWaterMark\",i),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===e.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,s=n.writecb;if(\"function\"!=typeof s)throw new g;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,s){--t.pendingcb,n?(o.nextTick(s,r),o.nextTick(N,e,t),e._writableState.errorEmitted=!0,x(e,r)):(s(r),e._writableState.errorEmitted=!0,x(e,r),N(e,t))}(e,n,r,t,s);else{var i=C(n)||e.destroyed;i||n.corked||n.bufferProcessing||!n.bufferedRequest||A(e,n),r?o.nextTick(k,e,n,i,s):k(e,n,i,s)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function j(e){var t=this instanceof(r=r||n(56753));if(!t&&!u.call(j,this))return new j(e);this._writableState=new _(e,this,t),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),a.call(this)}function O(e,t,n,r,o,s,i){t.writelen=r,t.writecb=i,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new v(\"write\")):n?e._writev(o,t.onwrite):e._write(o,s,t.onwrite),t.sync=!1}function k(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,r(),N(e,t)}function A(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var a=0,l=!0;n;)o[a]=n,n.isBuf||(l=!1),n=n.next,a+=1;o.allBuffers=l,O(e,t,!0,t.length,o,\"\",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new s(t),t.bufferedRequestCount=0}else{for(;n;){var c=n.chunk,u=n.encoding,p=n.callback;if(O(e,t,!1,t.objectMode?1:c.length,c,u,p),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function C(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function P(e,t){e._final((function(n){t.pendingcb--,n&&x(e,n),t.prefinished=!0,e.emit(\"prefinish\"),N(e,t)}))}function N(e,t){var n=C(t);if(n&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit(\"prefinish\")):(t.pendingcb++,t.finalCalled=!0,o.nextTick(P,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"),t.autoDestroy))){var r=e._readableState;(!r||r.autoDestroy&&r.endEmitted)&&e.destroy()}return n}n(35717)(j,a),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,\"buffer\",{get:i.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(j,Symbol.hasInstance,{value:function(e){return!!u.call(this,e)||this===j&&(e&&e._writableState instanceof _)}})):u=function(e){return e instanceof this},j.prototype.pipe=function(){x(this,new y)},j.prototype.write=function(e,t,n){var r,s=this._writableState,i=!1,a=!s.objectMode&&(r=e,l.isBuffer(r)||r instanceof c);return a&&!l.isBuffer(e)&&(e=function(e){return l.from(e)}(e)),\"function\"==typeof t&&(n=t,t=null),a?t=\"buffer\":t||(t=s.defaultEncoding),\"function\"!=typeof n&&(n=S),s.ending?function(e,t){var n=new w;x(e,n),o.nextTick(t,n)}(this,n):(a||function(e,t,n,r){var s;return null===n?s=new b:\"string\"==typeof n||t.objectMode||(s=new d(\"chunk\",[\"string\",\"Buffer\"],n)),!s||(x(e,s),o.nextTick(r,s),!1)}(this,s,e,n))&&(s.pendingcb++,i=function(e,t,n,r,o,s){if(!n){var i=function(e,t,n){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=l.from(t,n));return t}(t,r,o);r!==i&&(n=!0,o=\"buffer\",r=i)}var a=t.objectMode?1:r.length;t.length+=a;var c=t.length<t.highWaterMark;c||(t.needDrain=!0);if(t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest={chunk:r,encoding:o,isBuf:n,callback:s,next:null},u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else O(e,t,!1,a,r,o,s);return c}(this,s,a,e,t,n)),i},j.prototype.cork=function(){this._writableState.corked++},j.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||A(this,e))},j.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new E(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(j.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(j.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),j.prototype._write=function(e,t,n){n(new m(\"_write()\"))},j.prototype._writev=null,j.prototype.end=function(e,t,n){var r=this._writableState;return\"function\"==typeof e?(n=e,e=null,t=null):\"function\"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||function(e,t,n){t.ending=!0,N(e,t),n&&(t.finished?o.nextTick(n):e.once(\"finish\",n));t.ended=!0,e.writable=!1}(this,r,n),this},Object.defineProperty(j.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(j.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),j.prototype.destroy=p.destroy,j.prototype._undestroy=p.undestroy,j.prototype._destroy=function(e,t){t(e)}},45850:(e,t,n)=>{\"use strict\";var r,o=n(34155);function s(e,t,n){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||\"default\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=n(8610),a=Symbol(\"lastResolve\"),l=Symbol(\"lastReject\"),c=Symbol(\"error\"),u=Symbol(\"ended\"),p=Symbol(\"lastPromise\"),h=Symbol(\"handlePromise\"),f=Symbol(\"stream\");function d(e,t){return{value:e,done:t}}function m(e){var t=e[a];if(null!==t){var n=e[f].read();null!==n&&(e[p]=null,e[a]=null,e[l]=null,t(d(n,!1)))}}function g(e){o.nextTick(m,e)}var y=Object.getPrototypeOf((function(){})),v=Object.setPrototypeOf((s(r={get stream(){return this[f]},next:function(){var e=this,t=this[c];if(null!==t)return Promise.reject(t);if(this[u])return Promise.resolve(d(void 0,!0));if(this[f].destroyed)return new Promise((function(t,n){o.nextTick((function(){e[c]?n(e[c]):t(d(void 0,!0))}))}));var n,r=this[p];if(r)n=new Promise(function(e,t){return function(n,r){e.then((function(){t[u]?n(d(void 0,!0)):t[h](n,r)}),r)}}(r,this));else{var s=this[f].read();if(null!==s)return Promise.resolve(d(s,!1));n=new Promise(this[h])}return this[p]=n,n}},Symbol.asyncIterator,(function(){return this})),s(r,\"return\",(function(){var e=this;return new Promise((function(t,n){e[f].destroy(null,(function(e){e?n(e):t(d(void 0,!0))}))}))})),r),y);e.exports=function(e){var t,n=Object.create(v,(s(t={},f,{value:e,writable:!0}),s(t,a,{value:null,writable:!0}),s(t,l,{value:null,writable:!0}),s(t,c,{value:null,writable:!0}),s(t,u,{value:e._readableState.endEmitted,writable:!0}),s(t,h,{value:function(e,t){var r=n[f].read();r?(n[p]=null,n[a]=null,n[l]=null,e(d(r,!1))):(n[a]=e,n[l]=t)},writable:!0}),t));return n[p]=null,i(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=n[l];return null!==t&&(n[p]=null,n[a]=null,n[l]=null,t(e)),void(n[c]=e)}var r=n[a];null!==r&&(n[p]=null,n[a]=null,n[l]=null,r(d(void 0,!0))),n[u]=!0})),e.on(\"readable\",g.bind(null,n)),n}},57327:(e,t,n)=>{\"use strict\";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t,n){return(t=a(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||\"default\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}var l=n(48764).Buffer,c=n(52361).inspect,u=c&&c.custom||\"inspect\";e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}var t,n,r;return t=e,(n=[{key:\"push\",value:function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,n=\"\"+t.data;t=t.next;)n+=e+t.data;return n}},{key:\"concat\",value:function(e){if(0===this.length)return l.alloc(0);for(var t,n,r,o=l.allocUnsafe(e>>>0),s=this.head,i=0;s;)t=s.data,n=o,r=i,l.prototype.copy.call(t,n,r),i+=s.data.length,s=s.next;return o}},{key:\"consume\",value:function(e,t){var n;return e<this.head.data.length?(n=this.head.data.slice(0,e),this.head.data=this.head.data.slice(e)):n=e===this.head.data.length?this.shift():t?this._getString(e):this._getBuffer(e),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(e){var t=this.head,n=1,r=t.data;for(e-=r.length;t=t.next;){var o=t.data,s=e>o.length?o.length:e;if(s===o.length?r+=o:r+=o.slice(0,e),0==(e-=s)){s===o.length?(++n,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=o.slice(s));break}++n}return this.length-=n,r}},{key:\"_getBuffer\",value:function(e){var t=l.allocUnsafe(e),n=this.head,r=1;for(n.data.copy(t),e-=n.data.length;n=n.next;){var o=n.data,s=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,s),0==(e-=s)){s===o.length?(++r,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(s));break}++r}return this.length-=r,t}},{key:u,value:function(e,t){return c(this,o(o({},t),{},{depth:0,customInspect:!1}))}}])&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),e}()},61195:(e,t,n)=>{\"use strict\";var r=n(34155);function o(e,t){i(e,t),s(e)}function s(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function i(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return a||l?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,r.nextTick(i,this,e)):r.nextTick(i,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?n._writableState?n._writableState.errorEmitted?r.nextTick(s,n):(n._writableState.errorEmitted=!0,r.nextTick(o,n,e)):r.nextTick(o,n,e):t?(r.nextTick(s,n),t(e)):r.nextTick(s,n)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var n=e._readableState,r=e._writableState;n&&n.autoDestroy||r&&r.autoDestroy?e.destroy(t):e.emit(\"error\",t)}}},8610:(e,t,n)=>{\"use strict\";var r=n(94281).q.ERR_STREAM_PREMATURE_CLOSE;function o(){}e.exports=function e(t,n,s){if(\"function\"==typeof n)return e(t,null,n);n||(n={}),s=function(e){var t=!1;return function(){if(!t){t=!0;for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];e.apply(this,r)}}}(s||o);var i=n.readable||!1!==n.readable&&t.readable,a=n.writable||!1!==n.writable&&t.writable,l=function(){t.writable||u()},c=t._writableState&&t._writableState.finished,u=function(){a=!1,c=!0,i||s.call(t)},p=t._readableState&&t._readableState.endEmitted,h=function(){i=!1,p=!0,a||s.call(t)},f=function(e){s.call(t,e)},d=function(){var e;return i&&!p?(t._readableState&&t._readableState.ended||(e=new r),s.call(t,e)):a&&!c?(t._writableState&&t._writableState.ended||(e=new r),s.call(t,e)):void 0},m=function(){t.req.on(\"finish\",u)};return!function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?a&&!t._writableState&&(t.on(\"end\",l),t.on(\"close\",l)):(t.on(\"complete\",u),t.on(\"abort\",d),t.req?m():t.on(\"request\",m)),t.on(\"end\",h),t.on(\"finish\",u),!1!==n.error&&t.on(\"error\",f),t.on(\"close\",d),function(){t.removeListener(\"complete\",u),t.removeListener(\"abort\",d),t.removeListener(\"request\",m),t.req&&t.req.removeListener(\"finish\",u),t.removeListener(\"end\",l),t.removeListener(\"close\",l),t.removeListener(\"finish\",u),t.removeListener(\"end\",h),t.removeListener(\"error\",f),t.removeListener(\"close\",d)}}},15167:e=>{e.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},59946:(e,t,n)=>{\"use strict\";var r;var o=n(94281).q,s=o.ERR_MISSING_ARGS,i=o.ERR_STREAM_DESTROYED;function a(e){if(e)throw e}function l(e){e()}function c(e,t){return e.pipe(t)}e.exports=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];var u,p=function(e){return e.length?\"function\"!=typeof e[e.length-1]?a:e.pop():a}(t);if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new s(\"streams\");var h=t.map((function(e,o){var s=o<t.length-1;return function(e,t,o,s){s=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(s);var a=!1;e.on(\"close\",(function(){a=!0})),void 0===r&&(r=n(8610)),r(e,{readable:t,writable:o},(function(e){if(e)return s(e);a=!0,s()}));var l=!1;return function(t){if(!a&&!l)return l=!0,function(e){return e.setHeader&&\"function\"==typeof e.abort}(e)?e.abort():\"function\"==typeof e.destroy?e.destroy():void s(t||new i(\"pipe\"))}}(e,s,o>0,(function(e){u||(u=e),e&&h.forEach(l),s||(h.forEach(l),p(u))}))}));return t.reduce(c)}},82457:(e,t,n)=>{\"use strict\";var r=n(94281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,n,o){var s=function(e,t,n){return null!=e.highWaterMark?e.highWaterMark:t?e[n]:null}(t,o,n);if(null!=s){if(!isFinite(s)||Math.floor(s)!==s||s<0)throw new r(o?n:\"highWaterMark\",s);return Math.floor(s)}return e.objectMode?16:16384}}},22503:(e,t,n)=>{e.exports=n(17187).EventEmitter},27428:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,o=n(43393),s=(r=o)&&r.__esModule?r:{default:r},i=n(79607);t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s.default.Map,n=Object.keys(e);return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t(),o=arguments[1];return r.withMutations((function(t){n.forEach((function(n){var r=(0,e[n])(t.get(n),o);(0,i.validateNextState)(r,n,o),t.set(n,r)}))}))}},e.exports=t.default},72739:(e,t,n)=>{\"use strict\";t.U=void 0;var r,o=n(27428),s=(r=o)&&r.__esModule?r:{default:r};t.U=s.default},94528:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e&&\"@@redux/INIT\"===e.type?\"initialState argument passed to createStore\":\"previous state received by the reducer\"},e.exports=t.default},93651:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=s(n(43393)),o=s(n(94528));function s(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){var s=Object.keys(t);if(!s.length)return\"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";var i=(0,o.default)(n);if(r.default.isImmutable?!r.default.isImmutable(e):!r.default.Iterable.isIterable(e))return\"The \"+i+' is of unexpected type. Expected argument to be an instance of Immutable.Collection or Immutable.Record with the following properties: \"'+s.join('\", \"')+'\".';var a=e.toSeq().keySeq().toArray().filter((function(e){return!t.hasOwnProperty(e)}));return a.length>0?\"Unexpected \"+(1===a.length?\"property\":\"properties\")+' \"'+a.join('\", \"')+'\" found in '+i+'. Expected to find one of the known reducer property names instead: \"'+s.join('\", \"')+'\". Unexpected properties will be ignored.':null},e.exports=t.default},79607:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.validateNextState=t.getUnexpectedInvocationParameterMessage=t.getStateName=void 0;var r=i(n(94528)),o=i(n(93651)),s=i(n(85527));function i(e){return e&&e.__esModule?e:{default:e}}t.getStateName=r.default,t.getUnexpectedInvocationParameterMessage=o.default,t.validateNextState=s.default},85527:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,n){if(void 0===e)throw new Error('Reducer \"'+t+'\" returned undefined when handling \"'+n.type+'\" action. To ignore an action, you must explicitly return the previous state.')},e.exports=t.default},97779:(e,t,n)=>{\"use strict\";n.d(t,{md:()=>m,DE:()=>f,qC:()=>d,MT:()=>p});var r=n(64572);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){(0,r.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e){return\"Minified Redux error #\"+e+\"; visit https://redux.js.org/Errors?code=\"+e+\" for the full message or use the non-minified dev environment for full errors. \"}var a=\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\",l=function(){return Math.random().toString(36).substring(7).split(\"\").join(\".\")},c={INIT:\"@@redux/INIT\"+l(),REPLACE:\"@@redux/REPLACE\"+l(),PROBE_UNKNOWN_ACTION:function(){return\"@@redux/PROBE_UNKNOWN_ACTION\"+l()}};function u(e){if(\"object\"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function p(e,t,n){var r;if(\"function\"==typeof t&&\"function\"==typeof n||\"function\"==typeof n&&\"function\"==typeof arguments[3])throw new Error(i(0));if(\"function\"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if(\"function\"!=typeof n)throw new Error(i(1));return n(p)(e,t)}if(\"function\"!=typeof e)throw new Error(i(2));var o=e,s=t,l=[],h=l,f=!1;function d(){h===l&&(h=l.slice())}function m(){if(f)throw new Error(i(3));return s}function g(e){if(\"function\"!=typeof e)throw new Error(i(4));if(f)throw new Error(i(5));var t=!0;return d(),h.push(e),function(){if(t){if(f)throw new Error(i(6));t=!1,d();var n=h.indexOf(e);h.splice(n,1),l=null}}}function y(e){if(!u(e))throw new Error(i(7));if(void 0===e.type)throw new Error(i(8));if(f)throw new Error(i(9));try{f=!0,s=o(s,e)}finally{f=!1}for(var t=l=h,n=0;n<t.length;n++){(0,t[n])()}return e}return y({type:c.INIT}),(r={dispatch:y,subscribe:g,getState:m,replaceReducer:function(e){if(\"function\"!=typeof e)throw new Error(i(10));o=e,y({type:c.REPLACE})}})[a]=function(){var e,t=g;return(e={subscribe:function(e){if(\"object\"!=typeof e||null===e)throw new Error(i(11));function n(){e.next&&e.next(m())}return n(),{unsubscribe:t(n)}}})[a]=function(){return this},e},r}function h(e,t){return function(){return t(e.apply(this,arguments))}}function f(e,t){if(\"function\"==typeof e)return h(e,t);if(\"object\"!=typeof e||null===e)throw new Error(i(16));var n={};for(var r in e){var o=e[r];\"function\"==typeof o&&(n[r]=h(o,t))}return n}function d(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function m(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),r=function(){throw new Error(i(15))},o={getState:n.getState,dispatch:function(){return r.apply(void 0,arguments)}},a=t.map((function(e){return e(o)}));return r=d.apply(void 0,a)(n.dispatch),s(s({},n),{},{dispatch:r})}}}},89927:(e,t,n)=>{\"use strict\";var r;function o(e){return(r=r||document.createElement(\"textarea\")).innerHTML=\"&\"+e+\";\",r.value}n.d(t,{_:()=>ke});var s=Object.prototype.hasOwnProperty;function i(e,t){return!!e&&s.call(e,t)}function a(e){return[].slice.call(arguments,1).forEach((function(t){if(t){if(\"object\"!=typeof t)throw new TypeError(t+\"must be object\");Object.keys(t).forEach((function(n){e[n]=t[n]}))}})),e}var l=/\\\\([\\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;function c(e){return e.indexOf(\"\\\\\")<0?e:e.replace(l,\"$1\")}function u(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function p(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var h=/&([a-z#][a-z0-9]{1,31});/gi,f=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function d(e,t){var n=0,r=o(t);return t!==r?r:35===t.charCodeAt(0)&&f.test(t)&&u(n=\"x\"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?p(n):e}function m(e){return e.indexOf(\"&\")<0?e:e.replace(h,d)}var g=/[&<>\"]/,y=/[&<>\"]/g,v={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\"};function b(e){return v[e]}function w(e){return g.test(e)?e.replace(y,b):e}var E={};function x(e,t){return++t>=e.length-2?t:\"paragraph_open\"===e[t].type&&e[t].tight&&\"inline\"===e[t+1].type&&0===e[t+1].content.length&&\"paragraph_close\"===e[t+2].type&&e[t+2].tight?x(e,t+2):t}E.blockquote_open=function(){return\"<blockquote>\\n\"},E.blockquote_close=function(e,t){return\"</blockquote>\"+S(e,t)},E.code=function(e,t){return e[t].block?\"<pre><code>\"+w(e[t].content)+\"</code></pre>\"+S(e,t):\"<code>\"+w(e[t].content)+\"</code>\"},E.fence=function(e,t,n,r,o){var s,a,l=e[t],u=\"\",p=n.langPrefix;if(l.params){if(a=(s=l.params.split(/\\s+/g)).join(\" \"),i(o.rules.fence_custom,s[0]))return o.rules.fence_custom[s[0]](e,t,n,r,o);u=' class=\"'+p+w(m(c(a)))+'\"'}return\"<pre><code\"+u+\">\"+(n.highlight&&n.highlight.apply(n.highlight,[l.content].concat(s))||w(l.content))+\"</code></pre>\"+S(e,t)},E.fence_custom={},E.heading_open=function(e,t){return\"<h\"+e[t].hLevel+\">\"},E.heading_close=function(e,t){return\"</h\"+e[t].hLevel+\">\\n\"},E.hr=function(e,t,n){return(n.xhtmlOut?\"<hr />\":\"<hr>\")+S(e,t)},E.bullet_list_open=function(){return\"<ul>\\n\"},E.bullet_list_close=function(e,t){return\"</ul>\"+S(e,t)},E.list_item_open=function(){return\"<li>\"},E.list_item_close=function(){return\"</li>\\n\"},E.ordered_list_open=function(e,t){var n=e[t];return\"<ol\"+(n.order>1?' start=\"'+n.order+'\"':\"\")+\">\\n\"},E.ordered_list_close=function(e,t){return\"</ol>\"+S(e,t)},E.paragraph_open=function(e,t){return e[t].tight?\"\":\"<p>\"},E.paragraph_close=function(e,t){var n=!(e[t].tight&&t&&\"inline\"===e[t-1].type&&!e[t-1].content);return(e[t].tight?\"\":\"</p>\")+(n?S(e,t):\"\")},E.link_open=function(e,t,n){var r=e[t].title?' title=\"'+w(m(e[t].title))+'\"':\"\",o=n.linkTarget?' target=\"'+n.linkTarget+'\"':\"\";return'<a href=\"'+w(e[t].href)+'\"'+r+o+\">\"},E.link_close=function(){return\"</a>\"},E.image=function(e,t,n){var r=' src=\"'+w(e[t].src)+'\"',o=e[t].title?' title=\"'+w(m(e[t].title))+'\"':\"\";return\"<img\"+r+(' alt=\"'+(e[t].alt?w(m(c(e[t].alt))):\"\")+'\"')+o+(n.xhtmlOut?\" /\":\"\")+\">\"},E.table_open=function(){return\"<table>\\n\"},E.table_close=function(){return\"</table>\\n\"},E.thead_open=function(){return\"<thead>\\n\"},E.thead_close=function(){return\"</thead>\\n\"},E.tbody_open=function(){return\"<tbody>\\n\"},E.tbody_close=function(){return\"</tbody>\\n\"},E.tr_open=function(){return\"<tr>\"},E.tr_close=function(){return\"</tr>\\n\"},E.th_open=function(e,t){var n=e[t];return\"<th\"+(n.align?' style=\"text-align:'+n.align+'\"':\"\")+\">\"},E.th_close=function(){return\"</th>\"},E.td_open=function(e,t){var n=e[t];return\"<td\"+(n.align?' style=\"text-align:'+n.align+'\"':\"\")+\">\"},E.td_close=function(){return\"</td>\"},E.strong_open=function(){return\"<strong>\"},E.strong_close=function(){return\"</strong>\"},E.em_open=function(){return\"<em>\"},E.em_close=function(){return\"</em>\"},E.del_open=function(){return\"<del>\"},E.del_close=function(){return\"</del>\"},E.ins_open=function(){return\"<ins>\"},E.ins_close=function(){return\"</ins>\"},E.mark_open=function(){return\"<mark>\"},E.mark_close=function(){return\"</mark>\"},E.sub=function(e,t){return\"<sub>\"+w(e[t].content)+\"</sub>\"},E.sup=function(e,t){return\"<sup>\"+w(e[t].content)+\"</sup>\"},E.hardbreak=function(e,t,n){return n.xhtmlOut?\"<br />\\n\":\"<br>\\n\"},E.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?\"<br />\\n\":\"<br>\\n\":\"\\n\"},E.text=function(e,t){return w(e[t].content)},E.htmlblock=function(e,t){return e[t].content},E.htmltag=function(e,t){return e[t].content},E.abbr_open=function(e,t){return'<abbr title=\"'+w(m(e[t].title))+'\">'},E.abbr_close=function(){return\"</abbr>\"},E.footnote_ref=function(e,t){var n=Number(e[t].id+1).toString(),r=\"fnref\"+n;return e[t].subId>0&&(r+=\":\"+e[t].subId),'<sup class=\"footnote-ref\"><a href=\"#fn'+n+'\" id=\"'+r+'\">['+n+\"]</a></sup>\"},E.footnote_block_open=function(e,t,n){return(n.xhtmlOut?'<hr class=\"footnotes-sep\" />\\n':'<hr class=\"footnotes-sep\">\\n')+'<section class=\"footnotes\">\\n<ol class=\"footnotes-list\">\\n'},E.footnote_block_close=function(){return\"</ol>\\n</section>\\n\"},E.footnote_open=function(e,t){return'<li id=\"fn'+Number(e[t].id+1).toString()+'\"  class=\"footnote-item\">'},E.footnote_close=function(){return\"</li>\\n\"},E.footnote_anchor=function(e,t){var n=\"fnref\"+Number(e[t].id+1).toString();return e[t].subId>0&&(n+=\":\"+e[t].subId),' <a href=\"#'+n+'\" class=\"footnote-backref\">↩</a>'},E.dl_open=function(){return\"<dl>\\n\"},E.dt_open=function(){return\"<dt>\"},E.dd_open=function(){return\"<dd>\"},E.dl_close=function(){return\"</dl>\\n\"},E.dt_close=function(){return\"</dt>\\n\"},E.dd_close=function(){return\"</dd>\\n\"};var S=E.getBreak=function(e,t){return(t=x(e,t))<e.length&&\"list_item_close\"===e[t].type?\"\":\"\\n\"};function _(){this.rules=a({},E),this.getBreak=E.getBreak}function j(){this.__rules__=[],this.__cache__=null}function O(e,t,n,r,o){this.src=e,this.env=r,this.options=n,this.parser=t,this.tokens=o,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending=\"\",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent=\"\",this.labelUnmatchedScopes=0}function k(e,t){var n,r,o,s=-1,i=e.posMax,a=e.pos,l=e.isInLabel;if(e.isInLabel)return-1;if(e.labelUnmatchedScopes)return e.labelUnmatchedScopes--,-1;for(e.pos=t+1,e.isInLabel=!0,n=1;e.pos<i;){if(91===(o=e.src.charCodeAt(e.pos)))n++;else if(93===o&&0===--n){r=!0;break}e.parser.skipToken(e)}return r?(s=e.pos,e.labelUnmatchedScopes=0):e.labelUnmatchedScopes=n-1,e.pos=a,e.isInLabel=l,s}function A(e,t,n,r){var o,s,i,a,l,c;if(42!==e.charCodeAt(0))return-1;if(91!==e.charCodeAt(1))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=k(o=new O(e,t,n,r,[]),1))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&10!==o.src.charCodeAt(i);i++);return l=e.slice(2,s),0===(c=e.slice(s+2,i).trim()).length?-1:(r.abbreviations||(r.abbreviations={}),void 0===r.abbreviations[\":\"+l]&&(r.abbreviations[\":\"+l]=c),i)}function C(e){var t=m(e);try{t=decodeURI(t)}catch(e){}return encodeURI(t)}function P(e,t){var n,r,o,s=t,i=e.posMax;if(60===e.src.charCodeAt(t)){for(t++;t<i;){if(10===(n=e.src.charCodeAt(t)))return!1;if(62===n)return o=C(c(e.src.slice(s+1,t))),!!e.parser.validateLink(o)&&(e.pos=t+1,e.linkContent=o,!0);92===n&&t+1<i?t+=2:t++}return!1}for(r=0;t<i&&32!==(n=e.src.charCodeAt(t))&&!(n<32||127===n);)if(92===n&&t+1<i)t+=2;else{if(40===n&&++r>1)break;if(41===n&&--r<0)break;t++}return s!==t&&(o=c(e.src.slice(s,t)),!!e.parser.validateLink(o)&&(e.linkContent=o,e.pos=t,!0))}function N(e,t){var n,r=t,o=e.posMax,s=e.src.charCodeAt(t);if(34!==s&&39!==s&&40!==s)return!1;for(t++,40===s&&(s=41);t<o;){if((n=e.src.charCodeAt(t))===s)return e.pos=t+1,e.linkContent=c(e.src.slice(r+1,t)),!0;92===n&&t+1<o?t+=2:t++}return!1}function I(e){return e.trim().replace(/\\s+/g,\" \").toUpperCase()}function T(e,t,n,r){var o,s,i,a,l,c,u,p,h;if(91!==e.charCodeAt(0))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=k(o=new O(e,t,n,r,[]),0))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&(32===(l=o.src.charCodeAt(i))||10===l);i++);if(!P(o,i))return-1;for(u=o.linkContent,c=i=o.pos,i+=1;i<a&&(32===(l=o.src.charCodeAt(i))||10===l);i++);for(i<a&&c!==i&&N(o,i)?(p=o.linkContent,i=o.pos):(p=\"\",i=c);i<a&&32===o.src.charCodeAt(i);)i++;return i<a&&10!==o.src.charCodeAt(i)?-1:(h=I(e.slice(1,s)),void 0===r.references[h]&&(r.references[h]={title:p,href:u}),i)}_.prototype.renderInline=function(e,t,n){for(var r=this.rules,o=e.length,s=0,i=\"\";o--;)i+=r[e[s].type](e,s++,t,n,this);return i},_.prototype.render=function(e,t,n){for(var r=this.rules,o=e.length,s=-1,i=\"\";++s<o;)\"inline\"===e[s].type?i+=this.renderInline(e[s].children,t,n):i+=r[e[s].type](e,s,t,n,this);return i},j.prototype.__find__=function(e){for(var t=this.__rules__.length,n=-1;t--;)if(this.__rules__[++n].name===e)return n;return-1},j.prototype.__compile__=function(){var e=this,t=[\"\"];e.__rules__.forEach((function(e){e.enabled&&e.alt.forEach((function(e){t.indexOf(e)<0&&t.push(e)}))})),e.__cache__={},t.forEach((function(t){e.__cache__[t]=[],e.__rules__.forEach((function(n){n.enabled&&(t&&n.alt.indexOf(t)<0||e.__cache__[t].push(n.fn))}))}))},j.prototype.at=function(e,t,n){var r=this.__find__(e),o=n||{};if(-1===r)throw new Error(\"Parser rule not found: \"+e);this.__rules__[r].fn=t,this.__rules__[r].alt=o.alt||[],this.__cache__=null},j.prototype.before=function(e,t,n,r){var o=this.__find__(e),s=r||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:n,alt:s.alt||[]}),this.__cache__=null},j.prototype.after=function(e,t,n,r){var o=this.__find__(e),s=r||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:n,alt:s.alt||[]}),this.__cache__=null},j.prototype.push=function(e,t,n){var r=n||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:r.alt||[]}),this.__cache__=null},j.prototype.enable=function(e,t){e=Array.isArray(e)?e:[e],t&&this.__rules__.forEach((function(e){e.enabled=!1})),e.forEach((function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!0}),this),this.__cache__=null},j.prototype.disable=function(e){(e=Array.isArray(e)?e:[e]).forEach((function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!1}),this),this.__cache__=null},j.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},O.prototype.pushPending=function(){this.tokens.push({type:\"text\",content:this.pending,level:this.pendingLevel}),this.pending=\"\"},O.prototype.push=function(e){this.pending&&this.pushPending(),this.tokens.push(e),this.pendingLevel=this.level},O.prototype.cacheSet=function(e,t){for(var n=this.cache.length;n<=e;n++)this.cache.push(0);this.cache[e]=t},O.prototype.cacheGet=function(e){return e<this.cache.length?this.cache[e]:0};var R=\" \\n()[]'\\\".,!?-\";function M(e){return e.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\")}var D=/\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/,F=/\\((c|tm|r|p)\\)/gi,L={c:\"©\",r:\"®\",p:\"§\",tm:\"™\"};var B=/['\"]/,$=/['\"]/g,q=/[-\\s()\\[\\]]/;function U(e,t){return!(t<0||t>=e.length)&&!q.test(e[t])}function z(e,t,n){return e.substr(0,t)+n+e.substr(t+1)}var V=[[\"block\",function(e){e.inlineMode?e.tokens.push({type:\"inline\",content:e.src.replace(/\\n/g,\" \").trim(),level:0,lines:[0,1],children:[]}):e.block.parse(e.src,e.options,e.env,e.tokens)}],[\"abbr\",function(e){var t,n,r,o,s=e.tokens;if(!e.inlineMode)for(t=1,n=s.length-1;t<n;t++)if(\"paragraph_open\"===s[t-1].type&&\"inline\"===s[t].type&&\"paragraph_close\"===s[t+1].type){for(r=s[t].content;r.length&&!((o=A(r,e.inline,e.options,e.env))<0);)r=r.slice(o).trim();s[t].content=r,r.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"references\",function(e){var t,n,r,o,s=e.tokens;if(e.env.references=e.env.references||{},!e.inlineMode)for(t=1,n=s.length-1;t<n;t++)if(\"inline\"===s[t].type&&\"paragraph_open\"===s[t-1].type&&\"paragraph_close\"===s[t+1].type){for(r=s[t].content;r.length&&!((o=T(r,e.inline,e.options,e.env))<0);)r=r.slice(o).trim();s[t].content=r,r.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"inline\",function(e){var t,n,r,o=e.tokens;for(n=0,r=o.length;n<r;n++)\"inline\"===(t=o[n]).type&&e.inline.parse(t.content,e.options,e.env,t.children)}],[\"footnote_tail\",function(e){var t,n,r,o,s,i,a,l,c,u=0,p=!1,h={};if(e.env.footnotes&&(e.tokens=e.tokens.filter((function(e){return\"footnote_reference_open\"===e.type?(p=!0,l=[],c=e.label,!1):\"footnote_reference_close\"===e.type?(p=!1,h[\":\"+c]=l,!1):(p&&l.push(e),!p)})),e.env.footnotes.list)){for(i=e.env.footnotes.list,e.tokens.push({type:\"footnote_block_open\",level:u++}),t=0,n=i.length;t<n;t++){for(e.tokens.push({type:\"footnote_open\",id:t,level:u++}),i[t].tokens?((a=[]).push({type:\"paragraph_open\",tight:!1,level:u++}),a.push({type:\"inline\",content:\"\",level:u,children:i[t].tokens}),a.push({type:\"paragraph_close\",tight:!1,level:--u})):i[t].label&&(a=h[\":\"+i[t].label]),e.tokens=e.tokens.concat(a),s=\"paragraph_close\"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,o=i[t].count>0?i[t].count:1,r=0;r<o;r++)e.tokens.push({type:\"footnote_anchor\",id:t,subId:r,level:u});s&&e.tokens.push(s),e.tokens.push({type:\"footnote_close\",level:--u})}e.tokens.push({type:\"footnote_block_close\",level:--u})}}],[\"abbr2\",function(e){var t,n,r,o,s,i,a,l,c,u,p,h,f=e.tokens;if(e.env.abbreviations)for(e.env.abbrRegExp||(h=\"(^|[\"+R.split(\"\").map(M).join(\"\")+\"])(\"+Object.keys(e.env.abbreviations).map((function(e){return e.substr(1)})).sort((function(e,t){return t.length-e.length})).map(M).join(\"|\")+\")($|[\"+R.split(\"\").map(M).join(\"\")+\"])\",e.env.abbrRegExp=new RegExp(h,\"g\")),u=e.env.abbrRegExp,n=0,r=f.length;n<r;n++)if(\"inline\"===f[n].type)for(t=(o=f[n].children).length-1;t>=0;t--)if(\"text\"===(s=o[t]).type){for(l=0,i=s.content,u.lastIndex=0,c=s.level,a=[];p=u.exec(i);)u.lastIndex>l&&a.push({type:\"text\",content:i.slice(l,p.index+p[1].length),level:c}),a.push({type:\"abbr_open\",title:e.env.abbreviations[\":\"+p[2]],level:c++}),a.push({type:\"text\",content:p[2],level:c}),a.push({type:\"abbr_close\",level:--c}),l=u.lastIndex-p[3].length;a.length&&(l<i.length&&a.push({type:\"text\",content:i.slice(l),level:c}),f[n].children=o=[].concat(o.slice(0,t),a,o.slice(t+1)))}}],[\"replacements\",function(e){var t,n,r,o,s,i;if(e.options.typographer)for(s=e.tokens.length-1;s>=0;s--)if(\"inline\"===e.tokens[s].type)for(t=(o=e.tokens[s].children).length-1;t>=0;t--)\"text\"===(n=o[t]).type&&(r=n.content,r=(i=r).indexOf(\"(\")<0?i:i.replace(F,(function(e,t){return L[t.toLowerCase()]})),D.test(r)&&(r=r.replace(/\\+-/g,\"±\").replace(/\\.{2,}/g,\"…\").replace(/([?!])…/g,\"$1..\").replace(/([?!]){4,}/g,\"$1$1$1\").replace(/,{2,}/g,\",\").replace(/(^|[^-])---([^-]|$)/gm,\"$1—$2\").replace(/(^|\\s)--(\\s|$)/gm,\"$1–$2\").replace(/(^|[^-\\s])--([^-\\s]|$)/gm,\"$1–$2\")),n.content=r)}],[\"smartquotes\",function(e){var t,n,r,o,s,i,a,l,c,u,p,h,f,d,m,g,y;if(e.options.typographer)for(y=[],m=e.tokens.length-1;m>=0;m--)if(\"inline\"===e.tokens[m].type)for(g=e.tokens[m].children,y.length=0,t=0;t<g.length;t++)if(\"text\"===(n=g[t]).type&&!B.test(n.text)){for(a=g[t].level,f=y.length-1;f>=0&&!(y[f].level<=a);f--);y.length=f+1,s=0,i=(r=n.content).length;e:for(;s<i&&($.lastIndex=s,o=$.exec(r));)if(l=!U(r,o.index-1),s=o.index+1,d=\"'\"===o[0],(c=!U(r,s))||l){if(p=!c,h=!l)for(f=y.length-1;f>=0&&(u=y[f],!(y[f].level<a));f--)if(u.single===d&&y[f].level===a){u=y[f],d?(g[u.token].content=z(g[u.token].content,u.pos,e.options.quotes[2]),n.content=z(n.content,o.index,e.options.quotes[3])):(g[u.token].content=z(g[u.token].content,u.pos,e.options.quotes[0]),n.content=z(n.content,o.index,e.options.quotes[1])),y.length=f;continue e}p?y.push({token:t,pos:o.index,single:d,level:a}):h&&d&&(n.content=z(n.content,o.index,\"’\"))}else d&&(n.content=z(n.content,o.index,\"’\"))}}]];function W(){this.options={},this.ruler=new j;for(var e=0;e<V.length;e++)this.ruler.push(V[e][0],V[e][1])}function J(e,t,n,r,o){var s,i,a,l,c,u,p;for(this.src=e,this.parser=t,this.options=n,this.env=r,this.tokens=o,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType=\"root\",this.ddIndent=-1,this.level=0,this.result=\"\",u=0,p=!1,a=l=u=0,c=(i=this.src).length;l<c;l++){if(s=i.charCodeAt(l),!p){if(32===s){u++;continue}p=!0}10!==s&&l!==c-1||(10!==s&&l++,this.bMarks.push(a),this.eMarks.push(l),this.tShift.push(u),p=!1,u=0,a=l+1)}this.bMarks.push(i.length),this.eMarks.push(i.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function K(e,t){var n,r,o;return(r=e.bMarks[t]+e.tShift[t])>=(o=e.eMarks[t])||42!==(n=e.src.charCodeAt(r++))&&45!==n&&43!==n||r<o&&32!==e.src.charCodeAt(r)?-1:r}function H(e,t){var n,r=e.bMarks[t]+e.tShift[t],o=e.eMarks[t];if(r+1>=o)return-1;if((n=e.src.charCodeAt(r++))<48||n>57)return-1;for(;;){if(r>=o)return-1;if(!((n=e.src.charCodeAt(r++))>=48&&n<=57)){if(41===n||46===n)break;return-1}}return r<o&&32!==e.src.charCodeAt(r)?-1:r}W.prototype.process=function(e){var t,n,r;for(t=0,n=(r=this.ruler.getRules(\"\")).length;t<n;t++)r[t](e)},J.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},J.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},J.prototype.skipSpaces=function(e){for(var t=this.src.length;e<t&&32===this.src.charCodeAt(e);e++);return e},J.prototype.skipChars=function(e,t){for(var n=this.src.length;e<n&&this.src.charCodeAt(e)===t;e++);return e},J.prototype.skipCharsBack=function(e,t,n){if(e<=n)return e;for(;e>n;)if(t!==this.src.charCodeAt(--e))return e+1;return e},J.prototype.getLines=function(e,t,n,r){var o,s,i,a,l,c=e;if(e>=t)return\"\";if(c+1===t)return s=this.bMarks[c]+Math.min(this.tShift[c],n),i=r?this.eMarks[c]+1:this.eMarks[c],this.src.slice(s,i);for(a=new Array(t-e),o=0;c<t;c++,o++)(l=this.tShift[c])>n&&(l=n),l<0&&(l=0),s=this.bMarks[c]+l,i=c+1<t||r?this.eMarks[c]+1:this.eMarks[c],a[o]=this.src.slice(s,i);return a.join(\"\")};var G={};[\"article\",\"aside\",\"button\",\"blockquote\",\"body\",\"canvas\",\"caption\",\"col\",\"colgroup\",\"dd\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"iframe\",\"li\",\"map\",\"object\",\"ol\",\"output\",\"p\",\"pre\",\"progress\",\"script\",\"section\",\"style\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"tr\",\"thead\",\"ul\",\"video\"].forEach((function(e){G[e]=!0}));var Z=/^<([a-zA-Z]{1,15})[\\s\\/>]/,Y=/^<\\/([a-zA-Z]{1,15})[\\s>]/;function X(e,t){var n=e.bMarks[t]+e.blkIndent,r=e.eMarks[t];return e.src.substr(n,r-n)}function Q(e,t){var n,r,o=e.bMarks[t]+e.tShift[t],s=e.eMarks[t];return o>=s||126!==(r=e.src.charCodeAt(o++))&&58!==r||o===(n=e.skipSpaces(o))||n>=s?-1:n}var ee=[[\"code\",function(e,t,n){var r,o;if(e.tShift[t]-e.blkIndent<4)return!1;for(o=r=t+1;r<n;)if(e.isEmpty(r))r++;else{if(!(e.tShift[r]-e.blkIndent>=4))break;o=++r}return e.line=r,e.tokens.push({type:\"code\",content:e.getLines(t,o,4+e.blkIndent,!0),block:!0,lines:[t,e.line],level:e.level}),!0}],[\"fences\",function(e,t,n,r){var o,s,i,a,l,c=!1,u=e.bMarks[t]+e.tShift[t],p=e.eMarks[t];if(u+3>p)return!1;if(126!==(o=e.src.charCodeAt(u))&&96!==o)return!1;if(l=u,(s=(u=e.skipChars(u,o))-l)<3)return!1;if((i=e.src.slice(u,p).trim()).indexOf(\"`\")>=0)return!1;if(r)return!0;for(a=t;!(++a>=n)&&!((u=l=e.bMarks[a]+e.tShift[a])<(p=e.eMarks[a])&&e.tShift[a]<e.blkIndent);)if(e.src.charCodeAt(u)===o&&!(e.tShift[a]-e.blkIndent>=4||(u=e.skipChars(u,o))-l<s||(u=e.skipSpaces(u))<p)){c=!0;break}return s=e.tShift[t],e.line=a+(c?1:0),e.tokens.push({type:\"fence\",params:i,content:e.getLines(t+1,a,s,!0),lines:[t,e.line],level:e.level}),!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"blockquote\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d,m=e.bMarks[t]+e.tShift[t],g=e.eMarks[t];if(m>g)return!1;if(62!==e.src.charCodeAt(m++))return!1;if(e.level>=e.options.maxNesting)return!1;if(r)return!0;for(32===e.src.charCodeAt(m)&&m++,l=e.blkIndent,e.blkIndent=0,a=[e.bMarks[t]],e.bMarks[t]=m,s=(m=m<g?e.skipSpaces(m):m)>=g,i=[e.tShift[t]],e.tShift[t]=m-e.bMarks[t],p=e.parser.ruler.getRules(\"blockquote\"),o=t+1;o<n&&!((m=e.bMarks[o]+e.tShift[o])>=(g=e.eMarks[o]));o++)if(62!==e.src.charCodeAt(m++)){if(s)break;for(d=!1,h=0,f=p.length;h<f;h++)if(p[h](e,o,n,!0)){d=!0;break}if(d)break;a.push(e.bMarks[o]),i.push(e.tShift[o]),e.tShift[o]=-1337}else 32===e.src.charCodeAt(m)&&m++,a.push(e.bMarks[o]),e.bMarks[o]=m,s=(m=m<g?e.skipSpaces(m):m)>=g,i.push(e.tShift[o]),e.tShift[o]=m-e.bMarks[o];for(c=e.parentType,e.parentType=\"blockquote\",e.tokens.push({type:\"blockquote_open\",lines:u=[t,0],level:e.level++}),e.parser.tokenize(e,t,o),e.tokens.push({type:\"blockquote_close\",level:--e.level}),e.parentType=c,u[1]=e.line,h=0;h<i.length;h++)e.bMarks[h+t]=a[h],e.tShift[h+t]=i[h];return e.blkIndent=l,!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"hr\",function(e,t,n,r){var o,s,i,a=e.bMarks[t],l=e.eMarks[t];if((a+=e.tShift[t])>l)return!1;if(42!==(o=e.src.charCodeAt(a++))&&45!==o&&95!==o)return!1;for(s=1;a<l;){if((i=e.src.charCodeAt(a++))!==o&&32!==i)return!1;i===o&&s++}return!(s<3)&&(r||(e.line=t+1,e.tokens.push({type:\"hr\",lines:[t,e.line],level:e.level})),!0)},[\"paragraph\",\"blockquote\",\"list\"]],[\"list\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d,m,g,y,v,b,w,E,x,S,_,j=!0;if((p=H(e,t))>=0)m=!0;else{if(!((p=K(e,t))>=0))return!1;m=!1}if(e.level>=e.options.maxNesting)return!1;if(d=e.src.charCodeAt(p-1),r)return!0;for(y=e.tokens.length,m?(u=e.bMarks[t]+e.tShift[t],f=Number(e.src.substr(u,p-u-1)),e.tokens.push({type:\"ordered_list_open\",order:f,lines:b=[t,0],level:e.level++})):e.tokens.push({type:\"bullet_list_open\",lines:b=[t,0],level:e.level++}),o=t,v=!1,E=e.parser.ruler.getRules(\"list\");!(!(o<n)||((h=(g=e.skipSpaces(p))>=e.eMarks[o]?1:g-p)>4&&(h=1),h<1&&(h=1),s=p-e.bMarks[o]+h,e.tokens.push({type:\"list_item_open\",lines:w=[t,0],level:e.level++}),a=e.blkIndent,l=e.tight,i=e.tShift[t],c=e.parentType,e.tShift[t]=g-e.bMarks[t],e.blkIndent=s,e.tight=!0,e.parentType=\"list\",e.parser.tokenize(e,t,n,!0),e.tight&&!v||(j=!1),v=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=a,e.tShift[t]=i,e.tight=l,e.parentType=c,e.tokens.push({type:\"list_item_close\",level:--e.level}),o=t=e.line,w[1]=o,g=e.bMarks[t],o>=n)||e.isEmpty(o)||e.tShift[o]<e.blkIndent);){for(_=!1,x=0,S=E.length;x<S;x++)if(E[x](e,o,n,!0)){_=!0;break}if(_)break;if(m){if((p=H(e,o))<0)break}else if((p=K(e,o))<0)break;if(d!==e.src.charCodeAt(p-1))break}return e.tokens.push({type:m?\"ordered_list_close\":\"bullet_list_close\",level:--e.level}),b[1]=o,e.line=o,j&&function(e,t){var n,r,o=e.level+2;for(n=t+2,r=e.tokens.length-2;n<r;n++)e.tokens[n].level===o&&\"paragraph_open\"===e.tokens[n].type&&(e.tokens[n+2].tight=!0,e.tokens[n].tight=!0,n+=2)}(e,y),!0},[\"paragraph\",\"blockquote\"]],[\"footnote\",function(e,t,n,r){var o,s,i,a,l,c=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(c+4>u)return!1;if(91!==e.src.charCodeAt(c))return!1;if(94!==e.src.charCodeAt(c+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(a=c+2;a<u;a++){if(32===e.src.charCodeAt(a))return!1;if(93===e.src.charCodeAt(a))break}return a!==c+2&&(!(a+1>=u||58!==e.src.charCodeAt(++a))&&(r||(a++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),l=e.src.slice(c+2,a-2),e.env.footnotes.refs[\":\"+l]=-1,e.tokens.push({type:\"footnote_reference_open\",label:l,level:e.level++}),o=e.bMarks[t],s=e.tShift[t],i=e.parentType,e.tShift[t]=e.skipSpaces(a)-a,e.bMarks[t]=a,e.blkIndent+=4,e.parentType=\"footnote\",e.tShift[t]<e.blkIndent&&(e.tShift[t]+=e.blkIndent,e.bMarks[t]-=e.blkIndent),e.parser.tokenize(e,t,n,!0),e.parentType=i,e.blkIndent-=4,e.tShift[t]=s,e.bMarks[t]=o,e.tokens.push({type:\"footnote_reference_close\",level:--e.level})),!0))},[\"paragraph\"]],[\"heading\",function(e,t,n,r){var o,s,i,a=e.bMarks[t]+e.tShift[t],l=e.eMarks[t];if(a>=l)return!1;if(35!==(o=e.src.charCodeAt(a))||a>=l)return!1;for(s=1,o=e.src.charCodeAt(++a);35===o&&a<l&&s<=6;)s++,o=e.src.charCodeAt(++a);return!(s>6||a<l&&32!==o)&&(r||(l=e.skipCharsBack(l,32,a),(i=e.skipCharsBack(l,35,a))>a&&32===e.src.charCodeAt(i-1)&&(l=i),e.line=t+1,e.tokens.push({type:\"heading_open\",hLevel:s,lines:[t,e.line],level:e.level}),a<l&&e.tokens.push({type:\"inline\",content:e.src.slice(a,l).trim(),level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:s,level:e.level})),!0)},[\"paragraph\",\"blockquote\"]],[\"lheading\",function(e,t,n){var r,o,s,i=t+1;return!(i>=n)&&(!(e.tShift[i]<e.blkIndent)&&(!(e.tShift[i]-e.blkIndent>3)&&(!((o=e.bMarks[i]+e.tShift[i])>=(s=e.eMarks[i]))&&((45===(r=e.src.charCodeAt(o))||61===r)&&(o=e.skipChars(o,r),!((o=e.skipSpaces(o))<s)&&(o=e.bMarks[t]+e.tShift[t],e.line=i+1,e.tokens.push({type:\"heading_open\",hLevel:61===r?1:2,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:e.src.slice(o,e.eMarks[t]).trim(),level:e.level+1,lines:[t,e.line-1],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:61===r?1:2,level:e.level}),!0))))))}],[\"htmlblock\",function(e,t,n,r){var o,s,i,a=e.bMarks[t],l=e.eMarks[t],c=e.tShift[t];if(a+=c,!e.options.html)return!1;if(c>3||a+2>=l)return!1;if(60!==e.src.charCodeAt(a))return!1;if(33===(o=e.src.charCodeAt(a+1))||63===o){if(r)return!0}else{if(47!==o&&!function(e){var t=32|e;return t>=97&&t<=122}(o))return!1;if(47===o){if(!(s=e.src.slice(a,l).match(Y)))return!1}else if(!(s=e.src.slice(a,l).match(Z)))return!1;if(!0!==G[s[1].toLowerCase()])return!1;if(r)return!0}for(i=t+1;i<e.lineMax&&!e.isEmpty(i);)i++;return e.line=i,e.tokens.push({type:\"htmlblock\",level:e.level,lines:[t,e.line],content:e.getLines(t,i,0,!0)}),!0},[\"paragraph\",\"blockquote\"]],[\"table\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d;if(t+2>n)return!1;if(l=t+1,e.tShift[l]<e.blkIndent)return!1;if((i=e.bMarks[l]+e.tShift[l])>=e.eMarks[l])return!1;if(124!==(o=e.src.charCodeAt(i))&&45!==o&&58!==o)return!1;if(s=X(e,t+1),!/^[-:| ]+$/.test(s))return!1;if((c=s.split(\"|\"))<=2)return!1;for(p=[],a=0;a<c.length;a++){if(!(h=c[a].trim())){if(0===a||a===c.length-1)continue;return!1}if(!/^:?-+:?$/.test(h))return!1;58===h.charCodeAt(h.length-1)?p.push(58===h.charCodeAt(0)?\"center\":\"right\"):58===h.charCodeAt(0)?p.push(\"left\"):p.push(\"\")}if(-1===(s=X(e,t).trim()).indexOf(\"|\"))return!1;if(c=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),p.length!==c.length)return!1;if(r)return!0;for(e.tokens.push({type:\"table_open\",lines:f=[t,0],level:e.level++}),e.tokens.push({type:\"thead_open\",lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"tr_open\",lines:[t,t+1],level:e.level++}),a=0;a<c.length;a++)e.tokens.push({type:\"th_open\",align:p[a],lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"inline\",content:c[a].trim(),lines:[t,t+1],level:e.level,children:[]}),e.tokens.push({type:\"th_close\",level:--e.level});for(e.tokens.push({type:\"tr_close\",level:--e.level}),e.tokens.push({type:\"thead_close\",level:--e.level}),e.tokens.push({type:\"tbody_open\",lines:d=[t+2,0],level:e.level++}),l=t+2;l<n&&!(e.tShift[l]<e.blkIndent)&&-1!==(s=X(e,l).trim()).indexOf(\"|\");l++){for(c=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),e.tokens.push({type:\"tr_open\",level:e.level++}),a=0;a<c.length;a++)e.tokens.push({type:\"td_open\",align:p[a],level:e.level++}),u=c[a].substring(124===c[a].charCodeAt(0)?1:0,124===c[a].charCodeAt(c[a].length-1)?c[a].length-1:c[a].length).trim(),e.tokens.push({type:\"inline\",content:u,level:e.level,children:[]}),e.tokens.push({type:\"td_close\",level:--e.level});e.tokens.push({type:\"tr_close\",level:--e.level})}return e.tokens.push({type:\"tbody_close\",level:--e.level}),e.tokens.push({type:\"table_close\",level:--e.level}),f[1]=d[1]=l,e.line=l,!0},[\"paragraph\"]],[\"deflist\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d,m,g,y;if(r)return!(e.ddIndent<0)&&Q(e,t)>=0;if(u=t+1,e.isEmpty(u)&&++u>n)return!1;if(e.tShift[u]<e.blkIndent)return!1;if((o=Q(e,u))<0)return!1;if(e.level>=e.options.maxNesting)return!1;c=e.tokens.length,e.tokens.push({type:\"dl_open\",lines:l=[t,0],level:e.level++}),i=t,s=u;e:for(;;){for(y=!0,g=!1,e.tokens.push({type:\"dt_open\",lines:[i,i],level:e.level++}),e.tokens.push({type:\"inline\",content:e.getLines(i,i+1,e.blkIndent,!1).trim(),level:e.level+1,lines:[i,i],children:[]}),e.tokens.push({type:\"dt_close\",level:--e.level});;){if(e.tokens.push({type:\"dd_open\",lines:a=[u,0],level:e.level++}),m=e.tight,h=e.ddIndent,p=e.blkIndent,d=e.tShift[s],f=e.parentType,e.blkIndent=e.ddIndent=e.tShift[s]+2,e.tShift[s]=o-e.bMarks[s],e.tight=!0,e.parentType=\"deflist\",e.parser.tokenize(e,s,n,!0),e.tight&&!g||(y=!1),g=e.line-s>1&&e.isEmpty(e.line-1),e.tShift[s]=d,e.tight=m,e.parentType=f,e.blkIndent=p,e.ddIndent=h,e.tokens.push({type:\"dd_close\",level:--e.level}),a[1]=u=e.line,u>=n)break e;if(e.tShift[u]<e.blkIndent)break e;if((o=Q(e,u))<0)break;s=u}if(u>=n)break;if(i=u,e.isEmpty(i))break;if(e.tShift[i]<e.blkIndent)break;if((s=i+1)>=n)break;if(e.isEmpty(s)&&s++,s>=n)break;if(e.tShift[s]<e.blkIndent)break;if((o=Q(e,s))<0)break}return e.tokens.push({type:\"dl_close\",level:--e.level}),l[1]=u,e.line=u,y&&function(e,t){var n,r,o=e.level+2;for(n=t+2,r=e.tokens.length-2;n<r;n++)e.tokens[n].level===o&&\"paragraph_open\"===e.tokens[n].type&&(e.tokens[n+2].tight=!0,e.tokens[n].tight=!0,n+=2)}(e,c),!0},[\"paragraph\"]],[\"paragraph\",function(e,t){var n,r,o,s,i,a,l=t+1;if(l<(n=e.lineMax)&&!e.isEmpty(l))for(a=e.parser.ruler.getRules(\"paragraph\");l<n&&!e.isEmpty(l);l++)if(!(e.tShift[l]-e.blkIndent>3)){for(o=!1,s=0,i=a.length;s<i;s++)if(a[s](e,l,n,!0)){o=!0;break}if(o)break}return r=e.getLines(t,l,e.blkIndent,!1).trim(),e.line=l,r.length&&(e.tokens.push({type:\"paragraph_open\",tight:!1,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:r,level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"paragraph_close\",tight:!1,level:e.level})),!0}]];function te(){this.ruler=new j;for(var e=0;e<ee.length;e++)this.ruler.push(ee[e][0],ee[e][1],{alt:(ee[e][2]||[]).slice()})}te.prototype.tokenize=function(e,t,n){for(var r,o=this.ruler.getRules(\"\"),s=o.length,i=t,a=!1;i<n&&(e.line=i=e.skipEmptyLines(i),!(i>=n))&&!(e.tShift[i]<e.blkIndent);){for(r=0;r<s&&!o[r](e,i,n,!1);r++);if(e.tight=!a,e.isEmpty(e.line-1)&&(a=!0),(i=e.line)<n&&e.isEmpty(i)){if(a=!0,++i<n&&\"list\"===e.parentType&&e.isEmpty(i))break;e.line=i}}};var ne=/[\\n\\t]/g,re=/\\r[\\n\\u0085]|[\\u2424\\u2028\\u0085]/g,oe=/\\u00a0/g;function se(e){switch(e){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}te.prototype.parse=function(e,t,n,r){var o,s=0,i=0;if(!e)return[];(e=(e=e.replace(oe,\" \")).replace(re,\"\\n\")).indexOf(\"\\t\")>=0&&(e=e.replace(ne,(function(t,n){var r;return 10===e.charCodeAt(n)?(s=n+1,i=0,t):(r=\"    \".slice((n-s-i)%4),i=n-s+1,r)}))),o=new J(e,this,t,n,r),this.tokenize(o,o.line,o.lineMax)};for(var ie=[],ae=0;ae<256;ae++)ie.push(0);function le(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function ce(e,t){var n,r,o,s=t,i=!0,a=!0,l=e.posMax,c=e.src.charCodeAt(t);for(n=t>0?e.src.charCodeAt(t-1):-1;s<l&&e.src.charCodeAt(s)===c;)s++;return s>=l&&(i=!1),(o=s-t)>=4?i=a=!1:(32!==(r=s<l?e.src.charCodeAt(s):-1)&&10!==r||(i=!1),32!==n&&10!==n||(a=!1),95===c&&(le(n)&&(i=!1),le(r)&&(a=!1))),{can_open:i,can_close:a,delims:o}}\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach((function(e){ie[e.charCodeAt(0)]=1}));var ue=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var pe=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var he=[\"coap\",\"doi\",\"javascript\",\"aaa\",\"aaas\",\"about\",\"acap\",\"cap\",\"cid\",\"crid\",\"data\",\"dav\",\"dict\",\"dns\",\"file\",\"ftp\",\"geo\",\"go\",\"gopher\",\"h323\",\"http\",\"https\",\"iax\",\"icap\",\"im\",\"imap\",\"info\",\"ipp\",\"iris\",\"iris.beep\",\"iris.xpc\",\"iris.xpcs\",\"iris.lwz\",\"ldap\",\"mailto\",\"mid\",\"msrp\",\"msrps\",\"mtqp\",\"mupdate\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"opaquelocktoken\",\"pop\",\"pres\",\"rtsp\",\"service\",\"session\",\"shttp\",\"sieve\",\"sip\",\"sips\",\"sms\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"tag\",\"tel\",\"telnet\",\"tftp\",\"thismessage\",\"tn3270\",\"tip\",\"tv\",\"urn\",\"vemmi\",\"ws\",\"wss\",\"xcon\",\"xcon-userid\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"z39.50r\",\"z39.50s\",\"adiumxtra\",\"afp\",\"afs\",\"aim\",\"apt\",\"attachment\",\"aw\",\"beshare\",\"bitcoin\",\"bolo\",\"callto\",\"chrome\",\"chrome-extension\",\"com-eventbrite-attendee\",\"content\",\"cvs\",\"dlna-playsingle\",\"dlna-playcontainer\",\"dtn\",\"dvb\",\"ed2k\",\"facetime\",\"feed\",\"finger\",\"fish\",\"gg\",\"git\",\"gizmoproject\",\"gtalk\",\"hcp\",\"icon\",\"ipn\",\"irc\",\"irc6\",\"ircs\",\"itms\",\"jar\",\"jms\",\"keyparc\",\"lastfm\",\"ldaps\",\"magnet\",\"maps\",\"market\",\"message\",\"mms\",\"ms-help\",\"msnim\",\"mumble\",\"mvn\",\"notes\",\"oid\",\"palm\",\"paparazzi\",\"platform\",\"proxy\",\"psyc\",\"query\",\"res\",\"resource\",\"rmi\",\"rsync\",\"rtmp\",\"secondlife\",\"sftp\",\"sgn\",\"skype\",\"smb\",\"soldat\",\"spotify\",\"ssh\",\"steam\",\"svn\",\"teamspeak\",\"things\",\"udp\",\"unreal\",\"ut2004\",\"ventrilo\",\"view-source\",\"webcal\",\"wtai\",\"wyciwyg\",\"xfire\",\"xri\",\"ymsgr\"],fe=/^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,de=/^<([a-zA-Z.\\-]{1,25}):([^<>\\x00-\\x20]*)>/;function me(e,t){return e=e.source,t=t||\"\",function n(r,o){return r?(o=o.source||o,e=e.replace(r,o),n):new RegExp(e,t)}}var ge=me(/(?:unquoted|single_quoted|double_quoted)/)(\"unquoted\",/[^\"'=<>`\\x00-\\x20]+/)(\"single_quoted\",/'[^']*'/)(\"double_quoted\",/\"[^\"]*\"/)(),ye=me(/(?:\\s+attr_name(?:\\s*=\\s*attr_value)?)/)(\"attr_name\",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)(\"attr_value\",ge)(),ve=me(/<[A-Za-z][A-Za-z0-9]*attribute*\\s*\\/?>/)(\"attribute\",ye)(),be=me(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)(\"open_tag\",ve)(\"close_tag\",/<\\/[A-Za-z][A-Za-z0-9]*\\s*>/)(\"comment\",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)(\"processing\",/<[?].*?[?]>/)(\"declaration\",/<![A-Z]+\\s+[^>]*>/)(\"cdata\",/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/)();var we=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,Ee=/^&([a-z][a-z0-9]{1,31});/i;var xe=[[\"text\",function(e,t){for(var n=e.pos;n<e.posMax&&!se(e.src.charCodeAt(n));)n++;return n!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,n)),e.pos=n,!0)}],[\"newline\",function(e,t){var n,r,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;if(n=e.pending.length-1,r=e.posMax,!t)if(n>=0&&32===e.pending.charCodeAt(n))if(n>=1&&32===e.pending.charCodeAt(n-1)){for(var s=n-2;s>=0;s--)if(32!==e.pending.charCodeAt(s)){e.pending=e.pending.substring(0,s+1);break}e.push({type:\"hardbreak\",level:e.level})}else e.pending=e.pending.slice(0,-1),e.push({type:\"softbreak\",level:e.level});else e.push({type:\"softbreak\",level:e.level});for(o++;o<r&&32===e.src.charCodeAt(o);)o++;return e.pos=o,!0}],[\"escape\",function(e,t){var n,r=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(r))return!1;if(++r<o){if((n=e.src.charCodeAt(r))<256&&0!==ie[n])return t||(e.pending+=e.src[r]),e.pos+=2,!0;if(10===n){for(t||e.push({type:\"hardbreak\",level:e.level}),r++;r<o&&32===e.src.charCodeAt(r);)r++;return e.pos=r,!0}}return t||(e.pending+=\"\\\\\"),e.pos++,!0}],[\"backticks\",function(e,t){var n,r,o,s,i,a=e.pos;if(96!==e.src.charCodeAt(a))return!1;for(n=a,a++,r=e.posMax;a<r&&96===e.src.charCodeAt(a);)a++;for(o=e.src.slice(n,a),s=i=a;-1!==(s=e.src.indexOf(\"`\",i));){for(i=s+1;i<r&&96===e.src.charCodeAt(i);)i++;if(i-s===o.length)return t||e.push({type:\"code\",content:e.src.slice(a,s).replace(/[ \\n]+/g,\" \").trim(),block:!1,level:e.level}),e.pos=i,!0}return t||(e.pending+=o),e.pos+=o.length,!0}],[\"del\",function(e,t){var n,r,o,s,i,a=e.posMax,l=e.pos;if(126!==e.src.charCodeAt(l))return!1;if(t)return!1;if(l+4>=a)return!1;if(126!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=l>0?e.src.charCodeAt(l-1):-1,i=e.src.charCodeAt(l+2),126===s)return!1;if(126===i)return!1;if(32===i||10===i)return!1;for(r=l+2;r<a&&126===e.src.charCodeAt(r);)r++;if(r>l+3)return e.pos+=r-l,t||(e.pending+=e.src.slice(l,r)),!0;for(e.pos=l+2,o=1;e.pos+1<a;){if(126===e.src.charCodeAt(e.pos)&&126===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),126!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&126!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){n=!0;break}e.parser.skipToken(e)}return n?(e.posMax=e.pos,e.pos=l+2,t||(e.push({type:\"del_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"del_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=l,!1)}],[\"ins\",function(e,t){var n,r,o,s,i,a=e.posMax,l=e.pos;if(43!==e.src.charCodeAt(l))return!1;if(t)return!1;if(l+4>=a)return!1;if(43!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=l>0?e.src.charCodeAt(l-1):-1,i=e.src.charCodeAt(l+2),43===s)return!1;if(43===i)return!1;if(32===i||10===i)return!1;for(r=l+2;r<a&&43===e.src.charCodeAt(r);)r++;if(r!==l+2)return e.pos+=r-l,t||(e.pending+=e.src.slice(l,r)),!0;for(e.pos=l+2,o=1;e.pos+1<a;){if(43===e.src.charCodeAt(e.pos)&&43===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),43!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&43!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){n=!0;break}e.parser.skipToken(e)}return n?(e.posMax=e.pos,e.pos=l+2,t||(e.push({type:\"ins_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"ins_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=l,!1)}],[\"mark\",function(e,t){var n,r,o,s,i,a=e.posMax,l=e.pos;if(61!==e.src.charCodeAt(l))return!1;if(t)return!1;if(l+4>=a)return!1;if(61!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=l>0?e.src.charCodeAt(l-1):-1,i=e.src.charCodeAt(l+2),61===s)return!1;if(61===i)return!1;if(32===i||10===i)return!1;for(r=l+2;r<a&&61===e.src.charCodeAt(r);)r++;if(r!==l+2)return e.pos+=r-l,t||(e.pending+=e.src.slice(l,r)),!0;for(e.pos=l+2,o=1;e.pos+1<a;){if(61===e.src.charCodeAt(e.pos)&&61===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),61!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&61!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){n=!0;break}e.parser.skipToken(e)}return n?(e.posMax=e.pos,e.pos=l+2,t||(e.push({type:\"mark_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"mark_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=l,!1)}],[\"emphasis\",function(e,t){var n,r,o,s,i,a,l,c=e.posMax,u=e.pos,p=e.src.charCodeAt(u);if(95!==p&&42!==p)return!1;if(t)return!1;if(n=(l=ce(e,u)).delims,!l.can_open)return e.pos+=n,t||(e.pending+=e.src.slice(u,e.pos)),!0;if(e.level>=e.options.maxNesting)return!1;for(e.pos=u+n,a=[n];e.pos<c;)if(e.src.charCodeAt(e.pos)!==p)e.parser.skipToken(e);else{if(r=(l=ce(e,e.pos)).delims,l.can_close){for(s=a.pop(),i=r;s!==i;){if(i<s){a.push(s-i);break}if(i-=s,0===a.length)break;e.pos+=s,s=a.pop()}if(0===a.length){n=s,o=!0;break}e.pos+=r;continue}l.can_open&&a.push(r),e.pos+=r}return o?(e.posMax=e.pos,e.pos=u+n,t||(2!==n&&3!==n||e.push({type:\"strong_open\",level:e.level++}),1!==n&&3!==n||e.push({type:\"em_open\",level:e.level++}),e.parser.tokenize(e),1!==n&&3!==n||e.push({type:\"em_close\",level:--e.level}),2!==n&&3!==n||e.push({type:\"strong_close\",level:--e.level})),e.pos=e.posMax+n,e.posMax=c,!0):(e.pos=u,!1)}],[\"sub\",function(e,t){var n,r,o=e.posMax,s=e.pos;if(126!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(126===e.src.charCodeAt(e.pos)){n=!0;break}e.parser.skipToken(e)}return n&&s+1!==e.pos?(r=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sub\",level:e.level,content:r.replace(ue,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"sup\",function(e,t){var n,r,o=e.posMax,s=e.pos;if(94!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(94===e.src.charCodeAt(e.pos)){n=!0;break}e.parser.skipToken(e)}return n&&s+1!==e.pos?(r=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sup\",level:e.level,content:r.replace(pe,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"links\",function(e,t){var n,r,o,s,i,a,l,c,u=!1,p=e.pos,h=e.posMax,f=e.pos,d=e.src.charCodeAt(f);if(33===d&&(u=!0,d=e.src.charCodeAt(++f)),91!==d)return!1;if(e.level>=e.options.maxNesting)return!1;if(n=f+1,(r=k(e,f))<0)return!1;if((a=r+1)<h&&40===e.src.charCodeAt(a)){for(a++;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);if(a>=h)return!1;for(f=a,P(e,a)?(s=e.linkContent,a=e.pos):s=\"\",f=a;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);if(a<h&&f!==a&&N(e,a))for(i=e.linkContent,a=e.pos;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);else i=\"\";if(a>=h||41!==e.src.charCodeAt(a))return e.pos=p,!1;a++}else{if(e.linkLevel>0)return!1;for(;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);if(a<h&&91===e.src.charCodeAt(a)&&(f=a+1,(a=k(e,a))>=0?o=e.src.slice(f,a++):a=f-1),o||(void 0===o&&(a=r+1),o=e.src.slice(n,r)),!(l=e.env.references[I(o)]))return e.pos=p,!1;s=l.href,i=l.title}return t||(e.pos=n,e.posMax=r,u?e.push({type:\"image\",src:s,title:i,alt:e.src.substr(n,r-n),level:e.level}):(e.push({type:\"link_open\",href:s,title:i,level:e.level++}),e.linkLevel++,e.parser.tokenize(e),e.linkLevel--,e.push({type:\"link_close\",level:--e.level}))),e.pos=a,e.posMax=h,!0}],[\"footnote_inline\",function(e,t){var n,r,o,s,i=e.posMax,a=e.pos;return!(a+2>=i)&&(94===e.src.charCodeAt(a)&&(91===e.src.charCodeAt(a+1)&&(!(e.level>=e.options.maxNesting)&&(n=a+2,!((r=k(e,a+1))<0)&&(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),o=e.env.footnotes.list.length,e.pos=n,e.posMax=r,e.push({type:\"footnote_ref\",id:o,level:e.level}),e.linkLevel++,s=e.tokens.length,e.parser.tokenize(e),e.env.footnotes.list[o]={tokens:e.tokens.splice(s)},e.linkLevel--),e.pos=r+1,e.posMax=i,!0)))))}],[\"footnote_ref\",function(e,t){var n,r,o,s,i=e.posMax,a=e.pos;if(a+3>i)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(r=a+2;r<i;r++){if(32===e.src.charCodeAt(r))return!1;if(10===e.src.charCodeAt(r))return!1;if(93===e.src.charCodeAt(r))break}return r!==a+2&&(!(r>=i)&&(r++,n=e.src.slice(a+2,r-1),void 0!==e.env.footnotes.refs[\":\"+n]&&(t||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[\":\"+n]<0?(o=e.env.footnotes.list.length,e.env.footnotes.list[o]={label:n,count:0},e.env.footnotes.refs[\":\"+n]=o):o=e.env.footnotes.refs[\":\"+n],s=e.env.footnotes.list[o].count,e.env.footnotes.list[o].count++,e.push({type:\"footnote_ref\",id:o,subId:s,level:e.level})),e.pos=r,e.posMax=i,!0)))}],[\"autolink\",function(e,t){var n,r,o,s,i,a=e.pos;return 60===e.src.charCodeAt(a)&&(!((n=e.src.slice(a)).indexOf(\">\")<0)&&((r=n.match(de))?!(he.indexOf(r[1].toLowerCase())<0)&&(i=C(s=r[0].slice(1,-1)),!!e.parser.validateLink(s)&&(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=r[0].length,!0)):!!(o=n.match(fe))&&(i=C(\"mailto:\"+(s=o[0].slice(1,-1))),!!e.parser.validateLink(i)&&(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=o[0].length,!0))))}],[\"htmltag\",function(e,t){var n,r,o,s=e.pos;return!!e.options.html&&(o=e.posMax,!(60!==e.src.charCodeAt(s)||s+2>=o)&&(!(33!==(n=e.src.charCodeAt(s+1))&&63!==n&&47!==n&&!function(e){var t=32|e;return t>=97&&t<=122}(n))&&(!!(r=e.src.slice(s).match(be))&&(t||e.push({type:\"htmltag\",content:e.src.slice(s,s+r[0].length),level:e.level}),e.pos+=r[0].length,!0))))}],[\"entity\",function(e,t){var n,r,s=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(s))return!1;if(s+1<i)if(35===e.src.charCodeAt(s+1)){if(r=e.src.slice(s).match(we))return t||(n=\"x\"===r[1][0].toLowerCase()?parseInt(r[1].slice(1),16):parseInt(r[1],10),e.pending+=u(n)?p(n):p(65533)),e.pos+=r[0].length,!0}else if(r=e.src.slice(s).match(Ee)){var a=o(r[1]);if(r[1]!==a)return t||(e.pending+=a),e.pos+=r[0].length,!0}return t||(e.pending+=\"&\"),e.pos++,!0}]];function Se(){this.ruler=new j;for(var e=0;e<xe.length;e++)this.ruler.push(xe[e][0],xe[e][1]);this.validateLink=_e}function _e(e){var t=e.trim().toLowerCase();return-1===(t=m(t)).indexOf(\":\")||-1===[\"vbscript\",\"javascript\",\"file\",\"data\"].indexOf(t.split(\":\")[0])}Se.prototype.skipToken=function(e){var t,n,r=this.ruler.getRules(\"\"),o=r.length,s=e.pos;if((n=e.cacheGet(s))>0)e.pos=n;else{for(t=0;t<o;t++)if(r[t](e,!0))return void e.cacheSet(s,e.pos);e.pos++,e.cacheSet(s,e.pos)}},Se.prototype.tokenize=function(e){for(var t,n,r=this.ruler.getRules(\"\"),o=r.length,s=e.posMax;e.pos<s;){for(n=0;n<o&&!(t=r[n](e,!1));n++);if(t){if(e.pos>=s)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},Se.prototype.parse=function(e,t,n,r){var o=new O(e,this,t,n,r);this.tokenize(o)};var je={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"replacements\",\"smartquotes\",\"references\",\"abbr2\",\"footnote_tail\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"footnote\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\",\"table\"]},inline:{rules:[\"autolink\",\"backticks\",\"del\",\"emphasis\",\"entity\",\"escape\",\"footnote_ref\",\"htmltag\",\"links\",\"newline\",\"text\"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"abbr2\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\"]},inline:{rules:[\"autolink\",\"backticks\",\"emphasis\",\"entity\",\"escape\",\"htmltag\",\"links\",\"newline\",\"text\"]}}}};function Oe(e,t,n){this.src=t,this.env=n,this.options=e.options,this.tokens=[],this.inlineMode=!1,this.inline=e.inline,this.block=e.block,this.renderer=e.renderer,this.typographer=e.typographer}function ke(e,t){\"string\"!=typeof e&&(t=e,e=\"default\"),t&&null!=t.linkify&&console.warn(\"linkify option is removed. Use linkify plugin instead:\\n\\nimport Remarkable from 'remarkable';\\nimport linkify from 'remarkable/linkify';\\nnew Remarkable().use(linkify)\\n\"),this.inline=new Se,this.block=new te,this.core=new W,this.renderer=new _,this.ruler=new j,this.options={},this.configure(je[e]),this.set(t||{})}ke.prototype.set=function(e){a(this.options,e)},ke.prototype.configure=function(e){var t=this;if(!e)throw new Error(\"Wrong `remarkable` preset, check name/content\");e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach((function(n){e.components[n].rules&&t[n].ruler.enable(e.components[n].rules,!0)}))},ke.prototype.use=function(e,t){return e(this,t),this},ke.prototype.parse=function(e,t){var n=new Oe(this,e,t);return this.core.process(n),n.tokens},ke.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},ke.prototype.parseInline=function(e,t){var n=new Oe(this,e,t);return n.inlineMode=!0,this.core.process(n),n.tokens},ke.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)}},96464:e=>{\"use strict\";var t,n=\"\";e.exports=function(e,r){if(\"string\"!=typeof e)throw new TypeError(\"expected a string\");if(1===r)return e;if(2===r)return e+e;var o=e.length*r;if(t!==e||void 0===t)t=e,n=\"\";else if(n.length>=o)return n.substr(0,o);for(;o>n.length&&r>1;)1&r&&(n+=e),r>>=1,e+=e;return n=(n+=e).substr(0,o)}},47418:e=>{\"use strict\";e.exports=function(e,t){if(t=t.split(\":\")[0],!(e=+e))return!1;switch(t){case\"http\":case\"ws\":return 80!==e;case\"https\":case\"wss\":return 443!==e;case\"ftp\":return 21!==e;case\"gopher\":return 70!==e;case\"file\":return!1}return 0!==e}},20573:(e,t,n)=>{\"use strict\";n.d(t,{P1:()=>a});var r=\"NOT_FOUND\";var o=function(e,t){return e===t};function s(e,t){var n=\"object\"==typeof t?t:{equalityCheck:t},s=n.equalityCheck,i=void 0===s?o:s,a=n.maxSize,l=void 0===a?1:a,c=n.resultEqualityCheck,u=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,o=0;o<r;o++)if(!e(t[o],n[o]))return!1;return!0}}(i),p=1===l?function(e){var t;return{get:function(n){return t&&e(t.key,n)?t.value:r},put:function(e,n){t={key:e,value:n}},getEntries:function(){return t?[t]:[]},clear:function(){t=void 0}}}(u):function(e,t){var n=[];function o(e){var o=n.findIndex((function(n){return t(e,n.key)}));if(o>-1){var s=n[o];return o>0&&(n.splice(o,1),n.unshift(s)),s.value}return r}return{get:o,put:function(t,s){o(t)===r&&(n.unshift({key:t,value:s}),n.length>e&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(l,u);function h(){var t=p.get(arguments);if(t===r){if(t=e.apply(null,arguments),c){var n=p.getEntries().find((function(e){return c(e.value,t)}));n&&(t=n.value)}p.put(arguments,t)}return t}return h.clearCache=function(){return p.clear()},h}function i(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return function(){for(var t=arguments.length,r=new Array(t),o=0;o<t;o++)r[o]=arguments[o];var s,i=0,a={memoizeOptions:void 0},l=r.pop();if(\"object\"==typeof l&&(a=l,l=r.pop()),\"function\"!=typeof l)throw new Error(\"createSelector expects an output function after the inputs, but received: [\"+typeof l+\"]\");var c=a.memoizeOptions,u=void 0===c?n:c,p=Array.isArray(u)?u:[u],h=function(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every((function(e){return\"function\"==typeof e}))){var n=t.map((function(e){return\"function\"==typeof e?\"function \"+(e.name||\"unnamed\")+\"()\":typeof e})).join(\", \");throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\"+n+\"]\")}return t}(r),f=e.apply(void 0,[function(){return i++,l.apply(null,arguments)}].concat(p)),d=e((function(){for(var e=[],t=h.length,n=0;n<t;n++)e.push(h[n].apply(null,arguments));return s=f.apply(null,e)}));return Object.assign(d,{resultFunc:l,memoizedResultFunc:f,dependencies:h,lastResult:function(){return s},recomputations:function(){return i},resetRecomputations:function(){return i=0}}),d}}var a=i(s)},60697:(e,t,n)=>{const r=n(86245),o=n(30504),s=n(94992),i=n(82407);e.exports=e=>{var t,n,a=0,l={type:o.ROOT,stack:[]},c=l,u=l.stack,p=[],h=t=>{r.error(e,\"Nothing to repeat at column \"+(t-1))},f=r.strToChars(e);for(t=f.length;a<t;)switch(n=f[a++]){case\"\\\\\":switch(n=f[a++]){case\"b\":u.push(i.wordBoundary());break;case\"B\":u.push(i.nonWordBoundary());break;case\"w\":u.push(s.words());break;case\"W\":u.push(s.notWords());break;case\"d\":u.push(s.ints());break;case\"D\":u.push(s.notInts());break;case\"s\":u.push(s.whitespace());break;case\"S\":u.push(s.notWhitespace());break;default:/\\d/.test(n)?u.push({type:o.REFERENCE,value:parseInt(n,10)}):u.push({type:o.CHAR,value:n.charCodeAt(0)})}break;case\"^\":u.push(i.begin());break;case\"$\":u.push(i.end());break;case\"[\":var d;\"^\"===f[a]?(d=!0,a++):d=!1;var m=r.tokenizeClass(f.slice(a),e);a+=m[1],u.push({type:o.SET,set:m[0],not:d});break;case\".\":u.push(s.anyChar());break;case\"(\":var g={type:o.GROUP,stack:[],remember:!0};\"?\"===(n=f[a])&&(n=f[a+1],a+=2,\"=\"===n?g.followedBy=!0:\"!\"===n?g.notFollowedBy=!0:\":\"!==n&&r.error(e,`Invalid group, character '${n}' after '?' at column `+(a-1)),g.remember=!1),u.push(g),p.push(c),c=g,u=g.stack;break;case\")\":0===p.length&&r.error(e,\"Unmatched ) at column \"+(a-1)),u=(c=p.pop()).options?c.options[c.options.length-1]:c.stack;break;case\"|\":c.options||(c.options=[c.stack],delete c.stack);var y=[];c.options.push(y),u=y;break;case\"{\":var v,b,w=/^(\\d+)(,(\\d+)?)?\\}/.exec(f.slice(a));null!==w?(0===u.length&&h(a),v=parseInt(w[1],10),b=w[2]?w[3]?parseInt(w[3],10):1/0:v,a+=w[0].length,u.push({type:o.REPETITION,min:v,max:b,value:u.pop()})):u.push({type:o.CHAR,value:123});break;case\"?\":0===u.length&&h(a),u.push({type:o.REPETITION,min:0,max:1,value:u.pop()});break;case\"+\":0===u.length&&h(a),u.push({type:o.REPETITION,min:1,max:1/0,value:u.pop()});break;case\"*\":0===u.length&&h(a),u.push({type:o.REPETITION,min:0,max:1/0,value:u.pop()});break;default:u.push({type:o.CHAR,value:n.charCodeAt(0)})}return 0!==p.length&&r.error(e,\"Unterminated group\"),l},e.exports.types=o},82407:(e,t,n)=>{const r=n(30504);t.wordBoundary=()=>({type:r.POSITION,value:\"b\"}),t.nonWordBoundary=()=>({type:r.POSITION,value:\"B\"}),t.begin=()=>({type:r.POSITION,value:\"^\"}),t.end=()=>({type:r.POSITION,value:\"$\"})},94992:(e,t,n)=>{const r=n(30504),o=()=>[{type:r.RANGE,from:48,to:57}],s=()=>[{type:r.CHAR,value:95},{type:r.RANGE,from:97,to:122},{type:r.RANGE,from:65,to:90}].concat(o()),i=()=>[{type:r.CHAR,value:9},{type:r.CHAR,value:10},{type:r.CHAR,value:11},{type:r.CHAR,value:12},{type:r.CHAR,value:13},{type:r.CHAR,value:32},{type:r.CHAR,value:160},{type:r.CHAR,value:5760},{type:r.RANGE,from:8192,to:8202},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233},{type:r.CHAR,value:8239},{type:r.CHAR,value:8287},{type:r.CHAR,value:12288},{type:r.CHAR,value:65279}];t.words=()=>({type:r.SET,set:s(),not:!1}),t.notWords=()=>({type:r.SET,set:s(),not:!0}),t.ints=()=>({type:r.SET,set:o(),not:!1}),t.notInts=()=>({type:r.SET,set:o(),not:!0}),t.whitespace=()=>({type:r.SET,set:i(),not:!1}),t.notWhitespace=()=>({type:r.SET,set:i(),not:!0}),t.anyChar=()=>({type:r.SET,set:[{type:r.CHAR,value:10},{type:r.CHAR,value:13},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233}],not:!0})},30504:e=>{e.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},86245:(e,t,n)=>{const r=n(30504),o=n(94992),s={0:0,t:9,n:10,v:11,f:12,r:13};t.strToChars=function(e){return e=e.replace(/(\\[\\\\b\\])|(\\\\)?\\\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\\\\]^?])|([0tnvfr]))/g,(function(e,t,n,r,o,i,a,l){if(n)return e;var c=t?8:r?parseInt(r,16):o?parseInt(o,16):i?parseInt(i,8):a?\"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^ ?\".indexOf(a):s[l],u=String.fromCharCode(c);return/[[\\]{}^$.|?*+()]/.test(u)&&(u=\"\\\\\"+u),u}))},t.tokenizeClass=(e,n)=>{for(var s,i,a=[],l=/\\\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\\\)(.)|([^\\]\\\\]))-(?:\\\\)?([^\\]]))|(\\])|(?:\\\\)?([^])/g;null!=(s=l.exec(e));)if(s[1])a.push(o.words());else if(s[2])a.push(o.ints());else if(s[3])a.push(o.whitespace());else if(s[4])a.push(o.notWords());else if(s[5])a.push(o.notInts());else if(s[6])a.push(o.notWhitespace());else if(s[7])a.push({type:r.RANGE,from:(s[8]||s[9]).charCodeAt(0),to:s[10].charCodeAt(0)});else{if(!(i=s[12]))return[a,l.lastIndex];a.push({type:r.CHAR,value:i.charCodeAt(0)})}t.error(n,\"Unterminated character class\")},t.error=(e,t)=>{throw new SyntaxError(\"Invalid regular expression: /\"+e+\"/: \"+t)}},89509:(e,t,n)=>{var r=n(48764),o=r.Buffer;function s(e,t){for(var n in e)t[n]=e[n]}function i(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(s(r,t),t.Buffer=i),i.prototype=Object.create(o.prototype),s(o,i),i.from=function(e,t,n){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return o(e,t,n)},i.alloc=function(e,t,n){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var r=o(e);return void 0!==t?\"string\"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},i.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return o(e)},i.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return r.SlowBuffer(e)}},60053:(e,t)=>{\"use strict\";var n,r,o,s;if(\"object\"==typeof performance&&\"function\"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();t.unstable_now=function(){return a.now()-l}}if(\"undefined\"==typeof window||\"function\"!=typeof MessageChannel){var c=null,u=null,p=function(){if(null!==c)try{var e=t.unstable_now();c(!0,e),c=null}catch(e){throw setTimeout(p,0),e}};n=function(e){null!==c?setTimeout(n,0,e):(c=e,setTimeout(p,0))},r=function(e,t){u=setTimeout(e,t)},o=function(){clearTimeout(u)},t.unstable_shouldYield=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var h=window.setTimeout,f=window.clearTimeout;if(\"undefined\"!=typeof console){var d=window.cancelAnimationFrame;\"function\"!=typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"),\"function\"!=typeof d&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var m=!1,g=null,y=-1,v=5,b=0;t.unstable_shouldYield=function(){return t.unstable_now()>=b},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();b=e+v;try{g(!0,e)?E.postMessage(null):(m=!1,g=null)}catch(e){throw E.postMessage(null),e}}else m=!1},n=function(e){g=e,m||(m=!0,E.postMessage(null))},r=function(e,n){y=h((function(){e(t.unstable_now())}),n)},o=function(){f(y),y=-1}}function x(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<j(o,t)))break e;e[r]=t,e[n]=o,n=r}}function S(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var s=2*(r+1)-1,i=e[s],a=s+1,l=e[a];if(void 0!==i&&0>j(i,n))void 0!==l&&0>j(l,i)?(e[r]=l,e[a]=n,r=a):(e[r]=i,e[s]=n,r=s);else{if(!(void 0!==l&&0>j(l,n)))break e;e[r]=l,e[a]=n,r=a}}}return t}return null}function j(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],k=[],A=1,C=null,P=3,N=!1,I=!1,T=!1;function R(e){for(var t=S(k);null!==t;){if(null===t.callback)_(k);else{if(!(t.startTime<=e))break;_(k),t.sortIndex=t.expirationTime,x(O,t)}t=S(k)}}function M(e){if(T=!1,R(e),!I)if(null!==S(O))I=!0,n(D);else{var t=S(k);null!==t&&r(M,t.startTime-e)}}function D(e,n){I=!1,T&&(T=!1,o()),N=!0;var s=P;try{for(R(n),C=S(O);null!==C&&(!(C.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=C.callback;if(\"function\"==typeof i){C.callback=null,P=C.priorityLevel;var a=i(C.expirationTime<=n);n=t.unstable_now(),\"function\"==typeof a?C.callback=a:C===S(O)&&_(O),R(n)}else _(O);C=S(O)}if(null!==C)var l=!0;else{var c=S(k);null!==c&&r(M,c.startTime-n),l=!1}return l}finally{C=null,P=s,N=!1}}var F=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){I||N||(I=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return P},t.unstable_getFirstCallbackNode=function(){return S(O)},t.unstable_next=function(e){switch(P){case 1:case 2:case 3:var t=3;break;default:t=P}var n=P;P=t;try{return e()}finally{P=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=P;P=e;try{return t()}finally{P=n}},t.unstable_scheduleCallback=function(e,s,i){var a=t.unstable_now();switch(\"object\"==typeof i&&null!==i?i=\"number\"==typeof(i=i.delay)&&0<i?a+i:a:i=a,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:A++,callback:s,priorityLevel:e,startTime:i,expirationTime:l=i+l,sortIndex:-1},i>a?(e.sortIndex=i,x(k,e),null===S(O)&&e===S(k)&&(T?o():T=!0,r(M,i-a))):(e.sortIndex=l,x(O,e),I||N||(I=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=P;return function(){var n=P;P=t;try{return e.apply(this,arguments)}finally{P=n}}}},63840:(e,t,n)=>{\"use strict\";e.exports=n(60053)},7710:(e,t,n)=>{\"use strict\";var r=n(48764).Buffer;class o extends Error{constructor(e){super(o._prepareSuperMessage(e)),Object.defineProperty(this,\"name\",{value:\"NonError\",configurable:!0,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(this,o)}static _prepareSuperMessage(e){try{return JSON.stringify(e)}catch{return String(e)}}}const s=[{property:\"name\",enumerable:!1},{property:\"message\",enumerable:!1},{property:\"stack\",enumerable:!1},{property:\"code\",enumerable:!0}],i=Symbol(\".toJSON called\"),a=({from:e,seen:t,to_:n,forceEnumerable:o,maxDepth:l,depth:c})=>{const u=n||(Array.isArray(e)?[]:{});if(t.push(e),c>=l)return u;if(\"function\"==typeof e.toJSON&&!0!==e[i])return(e=>{e[i]=!0;const t=e.toJSON();return delete e[i],t})(e);for(const[n,s]of Object.entries(e))\"function\"==typeof r&&r.isBuffer(s)?u[n]=\"[object Buffer]\":\"function\"!=typeof s&&(s&&\"object\"==typeof s?t.includes(e[n])?u[n]=\"[Circular]\":(c++,u[n]=a({from:e[n],seen:t.slice(),forceEnumerable:o,maxDepth:l,depth:c})):u[n]=s);for(const{property:t,enumerable:n}of s)\"string\"==typeof e[t]&&Object.defineProperty(u,t,{value:e[t],enumerable:!!o||n,configurable:!0,writable:!0});return u};e.exports={serializeError:(e,t={})=>{const{maxDepth:n=Number.POSITIVE_INFINITY}=t;return\"object\"==typeof e&&null!==e?a({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0}):\"function\"==typeof e?`[Function: ${e.name||\"anonymous\"}]`:e},deserializeError:(e,t={})=>{const{maxDepth:n=Number.POSITIVE_INFINITY}=t;if(e instanceof Error)return e;if(\"object\"==typeof e&&null!==e&&!Array.isArray(e)){const t=new Error;return a({from:e,seen:[],to_:t,maxDepth:n,depth:0}),t}return new o(e)}}},24189:(e,t,n)=>{var r=n(89509).Buffer;function o(e,t){this._block=r.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}o.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=r.from(e,t));for(var n=this._block,o=this._blockSize,s=e.length,i=this._len,a=0;a<s;){for(var l=i%o,c=Math.min(s-a,o-l),u=0;u<c;u++)n[l+u]=e[a+u];a+=c,(i+=c)%o==0&&this._update(n)}return this._len+=s,this},o.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var r=(4294967295&n)>>>0,o=(n-r)/4294967296;this._block.writeUInt32BE(o,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var s=this._hash();return e?s.toString(e):s},o.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},e.exports=o},89072:(e,t,n)=>{var r=e.exports=function(e){e=e.toLowerCase();var t=r[e];if(!t)throw new Error(e+\" is not supported (we accept pull requests)\");return new t};r.sha=n(74448),r.sha1=n(18336),r.sha224=n(48432),r.sha256=n(67499),r.sha384=n(51686),r.sha512=n(87816)},74448:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function l(){this.init(),this._w=a,o.call(this,64,56)}function c(e){return e<<30|e>>>2}function u(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}r(l,o),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,o=0|this._b,s=0|this._c,a=0|this._d,l=0|this._e,p=0;p<16;++p)n[p]=e.readInt32BE(4*p);for(;p<80;++p)n[p]=n[p-3]^n[p-8]^n[p-14]^n[p-16];for(var h=0;h<80;++h){var f=~~(h/20),d=0|((t=r)<<5|t>>>27)+u(f,o,s,a)+l+n[h]+i[f];l=a,a=s,s=c(o),o=r,r=d}this._a=r+this._a|0,this._b=o+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=l+this._e|0},l.prototype._hash=function(){var e=s.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=l},18336:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function l(){this.init(),this._w=a,o.call(this,64,56)}function c(e){return e<<5|e>>>27}function u(e){return e<<30|e>>>2}function p(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}r(l,o),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,o=0|this._b,s=0|this._c,a=0|this._d,l=0|this._e,h=0;h<16;++h)n[h]=e.readInt32BE(4*h);for(;h<80;++h)n[h]=(t=n[h-3]^n[h-8]^n[h-14]^n[h-16])<<1|t>>>31;for(var f=0;f<80;++f){var d=~~(f/20),m=c(r)+p(d,o,s,a)+l+n[f]+i[d]|0;l=a,a=s,s=u(o),o=r,r=m}this._a=r+this._a|0,this._b=o+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=l+this._e|0},l.prototype._hash=function(){var e=s.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=l},48432:(e,t,n)=>{var r=n(35717),o=n(67499),s=n(24189),i=n(89509).Buffer,a=new Array(64);function l(){this.init(),this._w=a,s.call(this,64,56)}r(l,o),l.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},l.prototype._hash=function(){var e=i.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=l},67499:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function l(){this.init(),this._w=a,o.call(this,64,56)}function c(e,t,n){return n^e&(t^n)}function u(e,t,n){return e&t|n&(e|t)}function p(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function h(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function f(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}r(l,o),l.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},l.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,o=0|this._b,s=0|this._c,a=0|this._d,l=0|this._e,d=0|this._f,m=0|this._g,g=0|this._h,y=0;y<16;++y)n[y]=e.readInt32BE(4*y);for(;y<64;++y)n[y]=0|(((t=n[y-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+n[y-7]+f(n[y-15])+n[y-16];for(var v=0;v<64;++v){var b=g+h(l)+c(l,d,m)+i[v]+n[v]|0,w=p(r)+u(r,o,s)|0;g=m,m=d,d=l,l=a+b|0,a=s,s=o,o=r,r=b+w|0}this._a=r+this._a|0,this._b=o+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=l+this._e|0,this._f=d+this._f|0,this._g=m+this._g|0,this._h=g+this._h|0},l.prototype._hash=function(){var e=s.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=l},51686:(e,t,n)=>{var r=n(35717),o=n(87816),s=n(24189),i=n(89509).Buffer,a=new Array(160);function l(){this.init(),this._w=a,s.call(this,128,112)}r(l,o),l.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},l.prototype._hash=function(){var e=i.allocUnsafe(48);function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=l},87816:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function l(){this.init(),this._w=a,o.call(this,128,112)}function c(e,t,n){return n^e&(t^n)}function u(e,t,n){return e&t|n&(e|t)}function p(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function h(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function f(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function y(e,t){return e>>>0<t>>>0?1:0}r(l,o),l.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},l.prototype._update=function(e){for(var t=this._w,n=0|this._ah,r=0|this._bh,o=0|this._ch,s=0|this._dh,a=0|this._eh,l=0|this._fh,v=0|this._gh,b=0|this._hh,w=0|this._al,E=0|this._bl,x=0|this._cl,S=0|this._dl,_=0|this._el,j=0|this._fl,O=0|this._gl,k=0|this._hl,A=0;A<32;A+=2)t[A]=e.readInt32BE(4*A),t[A+1]=e.readInt32BE(4*A+4);for(;A<160;A+=2){var C=t[A-30],P=t[A-30+1],N=f(C,P),I=d(P,C),T=m(C=t[A-4],P=t[A-4+1]),R=g(P,C),M=t[A-14],D=t[A-14+1],F=t[A-32],L=t[A-32+1],B=I+D|0,$=N+M+y(B,I)|0;$=($=$+T+y(B=B+R|0,R)|0)+F+y(B=B+L|0,L)|0,t[A]=$,t[A+1]=B}for(var q=0;q<160;q+=2){$=t[q],B=t[q+1];var U=u(n,r,o),z=u(w,E,x),V=p(n,w),W=p(w,n),J=h(a,_),K=h(_,a),H=i[q],G=i[q+1],Z=c(a,l,v),Y=c(_,j,O),X=k+K|0,Q=b+J+y(X,k)|0;Q=(Q=(Q=Q+Z+y(X=X+Y|0,Y)|0)+H+y(X=X+G|0,G)|0)+$+y(X=X+B|0,B)|0;var ee=W+z|0,te=V+U+y(ee,W)|0;b=v,k=O,v=l,O=j,l=a,j=_,a=s+Q+y(_=S+X|0,S)|0,s=o,S=x,o=r,x=E,r=n,E=w,n=Q+te+y(w=X+ee|0,X)|0}this._al=this._al+w|0,this._bl=this._bl+E|0,this._cl=this._cl+x|0,this._dl=this._dl+S|0,this._el=this._el+_|0,this._fl=this._fl+j|0,this._gl=this._gl+O|0,this._hl=this._hl+k|0,this._ah=this._ah+n+y(this._al,w)|0,this._bh=this._bh+r+y(this._bl,E)|0,this._ch=this._ch+o+y(this._cl,x)|0,this._dh=this._dh+s+y(this._dl,S)|0,this._eh=this._eh+a+y(this._el,_)|0,this._fh=this._fh+l+y(this._fl,j)|0,this._gh=this._gh+v+y(this._gl,O)|0,this._hh=this._hh+b+y(this._hl,k)|0},l.prototype._hash=function(){var e=s.allocUnsafe(64);function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=l},37478:(e,t,n)=>{\"use strict\";var r=n(40210),o=n(21924),s=n(70631),i=r(\"%TypeError%\"),a=r(\"%WeakMap%\",!0),l=r(\"%Map%\",!0),c=o(\"WeakMap.prototype.get\",!0),u=o(\"WeakMap.prototype.set\",!0),p=o(\"WeakMap.prototype.has\",!0),h=o(\"Map.prototype.get\",!0),f=o(\"Map.prototype.set\",!0),d=o(\"Map.prototype.has\",!0),m=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new i(\"Side channel does not contain \"+s(e))},get:function(r){if(a&&r&&(\"object\"==typeof r||\"function\"==typeof r)){if(e)return c(e,r)}else if(l){if(t)return h(t,r)}else if(n)return function(e,t){var n=m(e,t);return n&&n.value}(n,r)},has:function(r){if(a&&r&&(\"object\"==typeof r||\"function\"==typeof r)){if(e)return p(e,r)}else if(l){if(t)return d(t,r)}else if(n)return function(e,t){return!!m(e,t)}(n,r);return!1},set:function(r,o){a&&r&&(\"object\"==typeof r||\"function\"==typeof r)?(e||(e=new a),u(e,r,o)):l?(t||(t=new l),f(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=m(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},43992:e=>{!function(){\"use strict\";var t,n,r,o,s,i=\"properties\",a=\"deepProperties\",l=\"propertyDescriptors\",c=\"staticProperties\",u=\"staticDeepProperties\",p=\"staticPropertyDescriptors\",h=\"configuration\",f=\"deepConfiguration\",d=\"deepProps\",m=\"deepStatics\",g=\"deepConf\",y=\"initializers\",v=\"methods\",b=\"composers\",w=\"compose\";function E(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e):[])}function x(e,t){return Array.prototype.slice.call(arguments,2).reduce(e,t)}var S=x.bind(0,(function(e,t){if(t)for(var n=E(t),r=0;r<n.length;r+=1)Object.defineProperty(e,n[r],Object.getOwnPropertyDescriptor(t,n[r]));return e}));function _(e){return\"function\"==typeof e}function j(e){return e&&\"object\"==typeof e||_(e)}function O(e){return e&&\"object\"==typeof e&&e.__proto__==Object.prototype}var k=x.bind(0,(function e(n,r){if(r===t)return n;if(Array.isArray(r))return(Array.isArray(n)?n:[]).concat(r);if(!O(r))return r;for(var o,s,i=E(r),a=0;a<i.length;)o=i[a++],(s=Object.getOwnPropertyDescriptor(r,o)).hasOwnProperty(\"value\")?s.value!==t&&(n[o]=e(O(n[o])||Array.isArray(r[o])?n[o]:{},r[o])):Object.defineProperty(n,o,s);return n}));function A(){return(n=Array.prototype.concat.apply([],arguments).filter((function(e,t,n){return _(e)&&n.indexOf(e)===t}))).length?n:t}function C(e,t){function r(n,r){j(t[n])&&(j(e[n])||(e[n]={}),(r||S)(e[n],t[n]))}function o(r){(n=A(e[r],t[r]))&&(e[r]=n)}return t&&j(t=t[w]||t)&&(r(v),r(i),r(a,k),r(l),r(c),r(u,k),r(p),r(h),r(f,k),o(y),o(b)),e}function P(){return function(e){return n=function e(n){var r,o,s=e[w]||{},c={__proto__:s[v]},u=s[y],p=Array.prototype.slice.apply(arguments),h=s[a];if(h&&k(c,h),(h=s[i])&&S(c,h),(h=s[l])&&Object.defineProperties(c,h),!u||!u.length)return c;for(n===t&&(n={}),s=0;s<u.length;)_(r=u[s++])&&(c=(o=r.call(c,n,{instance:c,stamp:e,args:p}))===t?c:o);return c},(r=e[u])&&k(n,r),(r=e[c])&&S(n,r),(r=e[p])&&Object.defineProperties(n,r),r=_(n[w])?n[w]:P,S(n[w]=function(){return r.apply(this,arguments)},e),n}(Array.prototype.concat.apply([this],arguments).reduce(C,{}))}function N(e){return _(e)&&_(e[w])}var I={};function T(e,s){return function(){return(o={})[e]=s.apply(t,Array.prototype.concat.apply([{}],arguments)),((n=this)&&n[w]||r).call(n,o)}}I[v]=T(v,S),I[i]=I.props=T(i,S),I[y]=I.init=T(y,A),I[b]=T(b,A),I[a]=I[d]=T(a,k),I[c]=I.statics=T(c,S),I[u]=I[m]=T(u,k),I[h]=I.conf=T(h,S),I[f]=I[g]=T(f,k),I[l]=T(l,S),I[p]=T(p,S),r=I[w]=S((function(){for(var e,E,x=0,_=[],O=arguments,C=this;x<O.length;)j(e=O[x++])&&_.push(N(e)?e:((o={})[v]=(E=e)[v]||t,r=E.props,o[i]=j((n=E[i])||r)?S({},r,n):t,o[y]=A(E.init,E[y]),o[b]=A(E[b]),r=E[d],o[a]=j((n=E[a])||r)?k({},r,n):t,o[l]=E[l],r=E.statics,o[c]=j((n=E[c])||r)?S({},r,n):t,r=E[m],o[u]=j((n=E[u])||r)?k({},r,n):t,n=E[p],o[p]=j((r=E.name&&{name:{value:E.name}})||n)?S({},n,r):t,r=E.conf,o[h]=j((n=E[h])||r)?S({},r,n):t,r=E[g],o[f]=j((n=E[f])||r)?k({},r,n):t,o));if(e=P.apply(C||s,_),C&&_.unshift(C),Array.isArray(O=e[w][b]))for(x=0;x<O.length;)e=N(C=O[x++]({stamp:e,composables:_}))?C:e;return e}),I),I.create=function(){return this.apply(t,arguments)},(o={})[c]=I,s=P(o),r[w]=r.bind(),r.version=\"4.3.2\",\"object\"!=typeof t?e.exports=r:self.stampit=r}()},42830:(e,t,n)=>{e.exports=o;var r=n(17187).EventEmitter;function o(){r.call(this)}n(35717)(o,r),o.Readable=n(79481),o.Writable=n(64229),o.Duplex=n(56753),o.Transform=n(74605),o.PassThrough=n(82725),o.finished=n(8610),o.pipeline=n(59946),o.Stream=o,o.prototype.pipe=function(e,t){var n=this;function o(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function s(){n.readable&&n.resume&&n.resume()}n.on(\"data\",o),e.on(\"drain\",s),e._isStdio||t&&!1===t.end||(n.on(\"end\",a),n.on(\"close\",l));var i=!1;function a(){i||(i=!0,e.end())}function l(){i||(i=!0,\"function\"==typeof e.destroy&&e.destroy())}function c(e){if(u(),0===r.listenerCount(this,\"error\"))throw e}function u(){n.removeListener(\"data\",o),e.removeListener(\"drain\",s),n.removeListener(\"end\",a),n.removeListener(\"close\",l),n.removeListener(\"error\",c),e.removeListener(\"error\",c),n.removeListener(\"end\",u),n.removeListener(\"close\",u),e.removeListener(\"close\",u)}return n.on(\"error\",c),e.on(\"error\",c),n.on(\"end\",u),n.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",n),e}},32553:(e,t,n)=>{\"use strict\";var r=n(89509).Buffer,o=r.isEncoding||function(e){switch((e=\"\"+e)&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function s(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=l,this.end=c,t=4;break;case\"utf8\":this.fillLast=a,t=4;break;case\"base64\":this.text=u,this.end=p,t=3;break;default:return this.write=h,void(this.end=f)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function i(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,\"�\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var n=e.toString(\"utf16le\",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,n)}return t}function u(e,t){var n=(e.length-t)%3;return 0===n?e.toString(\"base64\",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-n))}function p(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function f(e){return e&&e.length?this.write(e):\"\"}t.s=s,s.prototype.write=function(e){if(0===e.length)return\"\";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||\"\"},s.prototype.end=function(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+\"�\":t},s.prototype.text=function(e,t){var n=function(e,t,n){var r=t.length-1;if(r<n)return 0;var o=i(t[r]);if(o>=0)return o>0&&(e.lastNeed=o-1),o;if(--r<n||-2===o)return 0;if(o=i(t[r]),o>=0)return o>0&&(e.lastNeed=o-2),o;if(--r<n||-2===o)return 0;if(o=i(t[r]),o>=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString(\"utf8\",t,r)},s.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},32454:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>o});const r=e=>e.replace(/\\W/gi,\"_\");function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",{v2OperationIdCompatibilityMode:o}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(!e||\"object\"!=typeof e)return null;return(e.operationId||\"\").replace(/\\s/g,\"\").length?r(e.operationId):function(e,t){let{v2OperationIdCompatibilityMode:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(n){let n=`${t.toLowerCase()}_${e}`.replace(/[\\s!@#$%^&*()_+=[{\\]};:<>|./?,\\\\'\"\"-]/g,\"_\");return n=n||`${e.substring(1)}_${t}`,n.replace(/((_){2,})/g,\"_\").replace(/^(_)*/g,\"\").replace(/([_])*$/g,\"\")}return`${t.toLowerCase()}${r(e)}`}(t,n,{v2OperationIdCompatibilityMode:o})}},11742:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r<e.rangeCount;r++)n.push(e.getRangeAt(r));switch(t.tagName.toUpperCase()){case\"INPUT\":case\"TEXTAREA\":t.blur();break;default:t=null}return e.removeAllRanges(),function(){\"Caret\"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},13692:e=>{\"use strict\";function t(e){return Object.prototype.toString.call(e)}var n=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};function r(e,t){if(e.forEach)return e.forEach(t);for(var n=0;n<e.length;n++)t(e[n],n,e)}var o=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t},s=Object.prototype.hasOwnProperty||function(e,t){return t in e};function i(e){if(\"object\"==typeof e&&null!==e){var s;if(n(e))s=[];else if(\"[object Date]\"===t(e))s=new Date(e.getTime?e.getTime():e);else if(function(e){return\"[object RegExp]\"===t(e)}(e))s=new RegExp(e);else if(function(e){return\"[object Error]\"===t(e)}(e))s={message:e.message};else if(function(e){return\"[object Boolean]\"===t(e)}(e)||function(e){return\"[object Number]\"===t(e)}(e)||function(e){return\"[object String]\"===t(e)}(e))s=Object(e);else if(Object.create&&Object.getPrototypeOf)s=Object.create(Object.getPrototypeOf(e));else if(e.constructor===Object)s={};else{var i=e.constructor&&e.constructor.prototype||e.__proto__||{},a=function(){};a.prototype=i,s=new a}return r(o(e),(function(t){s[t]=e[t]})),s}return e}function a(e,t,a){var l=[],c=[],u=!0;return function e(p){var h=a?i(p):p,f={},d=!0,m={node:h,node_:p,path:[].concat(l),parent:c[c.length-1],parents:c,key:l[l.length-1],isRoot:0===l.length,level:l.length,circular:null,update:function(e,t){m.isRoot||(m.parent.node[m.key]=e),m.node=e,t&&(d=!1)},delete:function(e){delete m.parent.node[m.key],e&&(d=!1)},remove:function(e){n(m.parent.node)?m.parent.node.splice(m.key,1):delete m.parent.node[m.key],e&&(d=!1)},keys:null,before:function(e){f.before=e},after:function(e){f.after=e},pre:function(e){f.pre=e},post:function(e){f.post=e},stop:function(){u=!1},block:function(){d=!1}};if(!u)return m;function g(){if(\"object\"==typeof m.node&&null!==m.node){m.keys&&m.node_===m.node||(m.keys=o(m.node)),m.isLeaf=0===m.keys.length;for(var e=0;e<c.length;e++)if(c[e].node_===p){m.circular=c[e];break}}else m.isLeaf=!0,m.keys=null;m.notLeaf=!m.isLeaf,m.notRoot=!m.isRoot}g();var y=t.call(m,m.node);return void 0!==y&&m.update&&m.update(y),f.before&&f.before.call(m,m.node),d?(\"object\"!=typeof m.node||null===m.node||m.circular||(c.push(m),g(),r(m.keys,(function(t,n){l.push(t),f.pre&&f.pre.call(m,m.node[t],t);var r=e(m.node[t]);a&&s.call(m.node,t)&&(m.node[t]=r.node),r.isLast=n===m.keys.length-1,r.isFirst=0===n,f.post&&f.post.call(m,r),l.pop()})),c.pop()),f.after&&f.after.call(m,m.node),m):m}(e).node}function l(e){this.value=e}function c(e){return new l(e)}l.prototype.get=function(e){for(var t=this.value,n=0;n<e.length;n++){var r=e[n];if(!t||!s.call(t,r))return;t=t[r]}return t},l.prototype.has=function(e){for(var t=this.value,n=0;n<e.length;n++){var r=e[n];if(!t||!s.call(t,r))return!1;t=t[r]}return!0},l.prototype.set=function(e,t){for(var n=this.value,r=0;r<e.length-1;r++){var o=e[r];s.call(n,o)||(n[o]={}),n=n[o]}return n[e[r]]=t,t},l.prototype.map=function(e){return a(this.value,e,!0)},l.prototype.forEach=function(e){return this.value=a(this.value,e,!1),this.value},l.prototype.reduce=function(e,t){var n=1===arguments.length,r=n?this.value:t;return this.forEach((function(t){this.isRoot&&n||(r=e.call(this,r,t))})),r},l.prototype.paths=function(){var e=[];return this.forEach((function(){e.push(this.path)})),e},l.prototype.nodes=function(){var e=[];return this.forEach((function(){e.push(this.node)})),e},l.prototype.clone=function(){var e=[],t=[];return function n(s){for(var a=0;a<e.length;a++)if(e[a]===s)return t[a];if(\"object\"==typeof s&&null!==s){var l=i(s);return e.push(s),t.push(l),r(o(s),(function(e){l[e]=n(s[e])})),e.pop(),t.pop(),l}return s}(this.value)},r(o(l.prototype),(function(e){c[e]=function(t){var n=[].slice.call(arguments,1),r=new l(t);return r[e].apply(r,n)}})),e.exports=c},84564:(e,t,n)=>{\"use strict\";var r=n(47418),o=n(57129),s=/^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/,i=/[\\n\\r\\t]/g,a=/^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//,l=/:\\d+$/,c=/^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i,u=/^[a-zA-Z]:/;function p(e){return(e||\"\").toString().replace(s,\"\")}var h=[[\"#\",\"hash\"],[\"?\",\"query\"],function(e,t){return m(t.protocol)?e.replace(/\\\\/g,\"/\"):e},[\"/\",\"pathname\"],[\"@\",\"auth\",1],[NaN,\"host\",void 0,1,1],[/:(\\d*)$/,\"port\",void 0,1],[NaN,\"hostname\",void 0,1,1]],f={hash:1,query:1};function d(e){var t,r=(\"undefined\"!=typeof window?window:void 0!==n.g?n.g:\"undefined\"!=typeof self?self:{}).location||{},o={},s=typeof(e=e||r);if(\"blob:\"===e.protocol)o=new y(unescape(e.pathname),{});else if(\"string\"===s)for(t in o=new y(e,{}),f)delete o[t];else if(\"object\"===s){for(t in e)t in f||(o[t]=e[t]);void 0===o.slashes&&(o.slashes=a.test(e.href))}return o}function m(e){return\"file:\"===e||\"ftp:\"===e||\"http:\"===e||\"https:\"===e||\"ws:\"===e||\"wss:\"===e}function g(e,t){e=(e=p(e)).replace(i,\"\"),t=t||{};var n,r=c.exec(e),o=r[1]?r[1].toLowerCase():\"\",s=!!r[2],a=!!r[3],l=0;return s?a?(n=r[2]+r[3]+r[4],l=r[2].length+r[3].length):(n=r[2]+r[4],l=r[2].length):a?(n=r[3]+r[4],l=r[3].length):n=r[4],\"file:\"===o?l>=2&&(n=n.slice(2)):m(o)?n=r[4]:o?s&&(n=n.slice(2)):l>=2&&m(t.protocol)&&(n=r[4]),{protocol:o,slashes:s||m(o),slashesCount:l,rest:n}}function y(e,t,n){if(e=(e=p(e)).replace(i,\"\"),!(this instanceof y))return new y(e,t,n);var s,a,l,c,f,v,b=h.slice(),w=typeof t,E=this,x=0;for(\"object\"!==w&&\"string\"!==w&&(n=t,t=null),n&&\"function\"!=typeof n&&(n=o.parse),s=!(a=g(e||\"\",t=d(t))).protocol&&!a.slashes,E.slashes=a.slashes||s&&t.slashes,E.protocol=a.protocol||t.protocol||\"\",e=a.rest,(\"file:\"===a.protocol&&(2!==a.slashesCount||u.test(e))||!a.slashes&&(a.protocol||a.slashesCount<2||!m(E.protocol)))&&(b[3]=[/(.*)/,\"pathname\"]);x<b.length;x++)\"function\"!=typeof(c=b[x])?(l=c[0],v=c[1],l!=l?E[v]=e:\"string\"==typeof l?~(f=\"@\"===l?e.lastIndexOf(l):e.indexOf(l))&&(\"number\"==typeof c[2]?(E[v]=e.slice(0,f),e=e.slice(f+c[2])):(E[v]=e.slice(f),e=e.slice(0,f))):(f=l.exec(e))&&(E[v]=f[1],e=e.slice(0,f.index)),E[v]=E[v]||s&&c[3]&&t[v]||\"\",c[4]&&(E[v]=E[v].toLowerCase())):e=c(e,E);n&&(E.query=n(E.query)),s&&t.slashes&&\"/\"!==E.pathname.charAt(0)&&(\"\"!==E.pathname||\"\"!==t.pathname)&&(E.pathname=function(e,t){if(\"\"===e)return t;for(var n=(t||\"/\").split(\"/\").slice(0,-1).concat(e.split(\"/\")),r=n.length,o=n[r-1],s=!1,i=0;r--;)\".\"===n[r]?n.splice(r,1):\"..\"===n[r]?(n.splice(r,1),i++):i&&(0===r&&(s=!0),n.splice(r,1),i--);return s&&n.unshift(\"\"),\".\"!==o&&\"..\"!==o||n.push(\"\"),n.join(\"/\")}(E.pathname,t.pathname)),\"/\"!==E.pathname.charAt(0)&&m(E.protocol)&&(E.pathname=\"/\"+E.pathname),r(E.port,E.protocol)||(E.host=E.hostname,E.port=\"\"),E.username=E.password=\"\",E.auth&&(~(f=E.auth.indexOf(\":\"))?(E.username=E.auth.slice(0,f),E.username=encodeURIComponent(decodeURIComponent(E.username)),E.password=E.auth.slice(f+1),E.password=encodeURIComponent(decodeURIComponent(E.password))):E.username=encodeURIComponent(decodeURIComponent(E.auth)),E.auth=E.password?E.username+\":\"+E.password:E.username),E.origin=\"file:\"!==E.protocol&&m(E.protocol)&&E.host?E.protocol+\"//\"+E.host:\"null\",E.href=E.toString()}y.prototype={set:function(e,t,n){var s=this;switch(e){case\"query\":\"string\"==typeof t&&t.length&&(t=(n||o.parse)(t)),s[e]=t;break;case\"port\":s[e]=t,r(t,s.protocol)?t&&(s.host=s.hostname+\":\"+t):(s.host=s.hostname,s[e]=\"\");break;case\"hostname\":s[e]=t,s.port&&(t+=\":\"+s.port),s.host=t;break;case\"host\":s[e]=t,l.test(t)?(t=t.split(\":\"),s.port=t.pop(),s.hostname=t.join(\":\")):(s.hostname=t,s.port=\"\");break;case\"protocol\":s.protocol=t.toLowerCase(),s.slashes=!n;break;case\"pathname\":case\"hash\":if(t){var i=\"pathname\"===e?\"/\":\"#\";s[e]=t.charAt(0)!==i?i+t:t}else s[e]=t;break;case\"username\":case\"password\":s[e]=encodeURIComponent(t);break;case\"auth\":var a=t.indexOf(\":\");~a?(s.username=t.slice(0,a),s.username=encodeURIComponent(decodeURIComponent(s.username)),s.password=t.slice(a+1),s.password=encodeURIComponent(decodeURIComponent(s.password))):s.username=encodeURIComponent(decodeURIComponent(t))}for(var c=0;c<h.length;c++){var u=h[c];u[4]&&(s[u[1]]=s[u[1]].toLowerCase())}return s.auth=s.password?s.username+\":\"+s.password:s.username,s.origin=\"file:\"!==s.protocol&&m(s.protocol)&&s.host?s.protocol+\"//\"+s.host:\"null\",s.href=s.toString(),s},toString:function(e){e&&\"function\"==typeof e||(e=o.stringify);var t,n=this,r=n.host,s=n.protocol;s&&\":\"!==s.charAt(s.length-1)&&(s+=\":\");var i=s+(n.protocol&&n.slashes||m(n.protocol)?\"//\":\"\");return n.username?(i+=n.username,n.password&&(i+=\":\"+n.password),i+=\"@\"):n.password?(i+=\":\"+n.password,i+=\"@\"):\"file:\"!==n.protocol&&m(n.protocol)&&!r&&\"/\"!==n.pathname&&(i+=\"@\"),(\":\"===r[r.length-1]||l.test(n.hostname)&&!n.port)&&(r+=\":\"),i+=r+n.pathname,(t=\"object\"==typeof n.query?e(n.query):n.query)&&(i+=\"?\"!==t.charAt(0)?\"?\"+t:t),n.hash&&(i+=n.hash),i}},y.extractProtocol=g,y.location=d,y.trimLeft=p,y.qs=o,e.exports=y},52511:function(e,t,n){var r;e=n.nmd(e),function(o){t&&t.nodeType,e&&e.nodeType;var s=\"object\"==typeof n.g&&n.g;s.global!==s&&s.window!==s&&s.self;var i,a=2147483647,l=36,c=1,u=26,p=38,h=700,f=72,d=128,m=\"-\",g=/^xn--/,y=/[^\\x20-\\x7E]/,v=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,b={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},w=l-c,E=Math.floor,x=String.fromCharCode;function S(e){throw new RangeError(b[e])}function _(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function j(e,t){var n=e.split(\"@\"),r=\"\";return n.length>1&&(r=n[0]+\"@\",e=n[1]),r+_((e=e.replace(v,\".\")).split(\".\"),t).join(\".\")}function O(e){for(var t,n,r=[],o=0,s=e.length;o<s;)(t=e.charCodeAt(o++))>=55296&&t<=56319&&o<s?56320==(64512&(n=e.charCodeAt(o++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--):r.push(t);return r}function k(e){return _(e,(function(e){var t=\"\";return e>65535&&(t+=x((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=x(e)})).join(\"\")}function A(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function C(e,t,n){var r=0;for(e=n?E(e/h):e>>1,e+=E(e/t);e>w*u>>1;r+=l)e=E(e/w);return E(r+(w+1)*e/(e+p))}function P(e){var t,n,r,o,s,i,p,h,g,y,v,b=[],w=e.length,x=0,_=d,j=f;for((n=e.lastIndexOf(m))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&S(\"not-basic\"),b.push(e.charCodeAt(r));for(o=n>0?n+1:0;o<w;){for(s=x,i=1,p=l;o>=w&&S(\"invalid-input\"),((h=(v=e.charCodeAt(o++))-48<10?v-22:v-65<26?v-65:v-97<26?v-97:l)>=l||h>E((a-x)/i))&&S(\"overflow\"),x+=h*i,!(h<(g=p<=j?c:p>=j+u?u:p-j));p+=l)i>E(a/(y=l-g))&&S(\"overflow\"),i*=y;j=C(x-s,t=b.length+1,0==s),E(x/t)>a-_&&S(\"overflow\"),_+=E(x/t),x%=t,b.splice(x++,0,_)}return k(b)}function N(e){var t,n,r,o,s,i,p,h,g,y,v,b,w,_,j,k=[];for(b=(e=O(e)).length,t=d,n=0,s=f,i=0;i<b;++i)(v=e[i])<128&&k.push(x(v));for(r=o=k.length,o&&k.push(m);r<b;){for(p=a,i=0;i<b;++i)(v=e[i])>=t&&v<p&&(p=v);for(p-t>E((a-n)/(w=r+1))&&S(\"overflow\"),n+=(p-t)*w,t=p,i=0;i<b;++i)if((v=e[i])<t&&++n>a&&S(\"overflow\"),v==t){for(h=n,g=l;!(h<(y=g<=s?c:g>=s+u?u:g-s));g+=l)j=h-y,_=l-y,k.push(x(A(y+j%_,0))),h=E(j/_);k.push(x(A(h,0))),s=C(n,w,r==o),n=0,++r}++n,++t}return k.join(\"\")}i={version:\"1.4.1\",ucs2:{decode:O,encode:k},decode:P,encode:N,toASCII:function(e){return j(e,(function(e){return y.test(e)?\"xn--\"+N(e):e}))},toUnicode:function(e){return j(e,(function(e){return g.test(e)?P(e.slice(4).toLowerCase()):e}))}},void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},8575:(e,t,n)=>{\"use strict\";var r=n(52511);function o(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var s=/^([a-z0-9.+-]+:)/i,i=/:[0-9]*$/,a=/^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,l=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat([\"<\",\">\",'\"',\"`\",\" \",\"\\r\",\"\\n\",\"\\t\"]),c=[\"'\"].concat(l),u=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(c),p=[\"/\",\"?\",\"#\"],h=/^[+a-z0-9A-Z_-]{0,63}$/,f=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,d={javascript:!0,\"javascript:\":!0},m={javascript:!0,\"javascript:\":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0},y=n(80129);function v(e,t,n){if(e&&\"object\"==typeof e&&e instanceof o)return e;var r=new o;return r.parse(e,t,n),r}o.prototype.parse=function(e,t,n){if(\"string\"!=typeof e)throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof e);var o=e.indexOf(\"?\"),i=-1!==o&&o<e.indexOf(\"#\")?\"?\":\"#\",l=e.split(i);l[0]=l[0].replace(/\\\\/g,\"/\");var v=e=l.join(i);if(v=v.trim(),!n&&1===e.split(\"#\").length){var b=a.exec(v);if(b)return this.path=v,this.href=v,this.pathname=b[1],b[2]?(this.search=b[2],this.query=t?y.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search=\"\",this.query={}),this}var w=s.exec(v);if(w){var E=(w=w[0]).toLowerCase();this.protocol=E,v=v.substr(w.length)}if(n||w||v.match(/^\\/\\/[^@/]+@[^@/]+/)){var x=\"//\"===v.substr(0,2);!x||w&&m[w]||(v=v.substr(2),this.slashes=!0)}if(!m[w]&&(x||w&&!g[w])){for(var S,_,j=-1,O=0;O<p.length;O++){-1!==(k=v.indexOf(p[O]))&&(-1===j||k<j)&&(j=k)}-1!==(_=-1===j?v.lastIndexOf(\"@\"):v.lastIndexOf(\"@\",j))&&(S=v.slice(0,_),v=v.slice(_+1),this.auth=decodeURIComponent(S)),j=-1;for(O=0;O<u.length;O++){var k;-1!==(k=v.indexOf(u[O]))&&(-1===j||k<j)&&(j=k)}-1===j&&(j=v.length),this.host=v.slice(0,j),v=v.slice(j),this.parseHost(),this.hostname=this.hostname||\"\";var A=\"[\"===this.hostname[0]&&\"]\"===this.hostname[this.hostname.length-1];if(!A)for(var C=this.hostname.split(/\\./),P=(O=0,C.length);O<P;O++){var N=C[O];if(N&&!N.match(h)){for(var I=\"\",T=0,R=N.length;T<R;T++)N.charCodeAt(T)>127?I+=\"x\":I+=N[T];if(!I.match(h)){var M=C.slice(0,O),D=C.slice(O+1),F=N.match(f);F&&(M.push(F[1]),D.unshift(F[2])),D.length&&(v=\"/\"+D.join(\".\")+v),this.hostname=M.join(\".\");break}}}this.hostname.length>255?this.hostname=\"\":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=r.toASCII(this.hostname));var L=this.port?\":\"+this.port:\"\",B=this.hostname||\"\";this.host=B+L,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),\"/\"!==v[0]&&(v=\"/\"+v))}if(!d[E])for(O=0,P=c.length;O<P;O++){var $=c[O];if(-1!==v.indexOf($)){var q=encodeURIComponent($);q===$&&(q=escape($)),v=v.split($).join(q)}}var U=v.indexOf(\"#\");-1!==U&&(this.hash=v.substr(U),v=v.slice(0,U));var z=v.indexOf(\"?\");if(-1!==z?(this.search=v.substr(z),this.query=v.substr(z+1),t&&(this.query=y.parse(this.query)),v=v.slice(0,z)):t&&(this.search=\"\",this.query={}),v&&(this.pathname=v),g[E]&&this.hostname&&!this.pathname&&(this.pathname=\"/\"),this.pathname||this.search){L=this.pathname||\"\";var V=this.search||\"\";this.path=L+V}return this.href=this.format(),this},o.prototype.format=function(){var e=this.auth||\"\";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,\":\"),e+=\"@\");var t=this.protocol||\"\",n=this.pathname||\"\",r=this.hash||\"\",o=!1,s=\"\";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(\":\")?this.hostname:\"[\"+this.hostname+\"]\"),this.port&&(o+=\":\"+this.port)),this.query&&\"object\"==typeof this.query&&Object.keys(this.query).length&&(s=y.stringify(this.query));var i=this.search||s&&\"?\"+s||\"\";return t&&\":\"!==t.substr(-1)&&(t+=\":\"),this.slashes||(!t||g[t])&&!1!==o?(o=\"//\"+(o||\"\"),n&&\"/\"!==n.charAt(0)&&(n=\"/\"+n)):o||(o=\"\"),r&&\"#\"!==r.charAt(0)&&(r=\"#\"+r),i&&\"?\"!==i.charAt(0)&&(i=\"?\"+i),t+o+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(i=i.replace(\"#\",\"%23\"))+r},o.prototype.resolve=function(e){return this.resolveObject(v(e,!1,!0)).format()},o.prototype.resolveObject=function(e){if(\"string\"==typeof e){var t=new o;t.parse(e,!1,!0),e=t}for(var n=new o,r=Object.keys(this),s=0;s<r.length;s++){var i=r[s];n[i]=this[i]}if(n.hash=e.hash,\"\"===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var a=Object.keys(e),l=0;l<a.length;l++){var c=a[l];\"protocol\"!==c&&(n[c]=e[c])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.pathname=\"/\",n.path=n.pathname),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var u=Object.keys(e),p=0;p<u.length;p++){var h=u[p];n[h]=e[h]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||m[e.protocol])n.pathname=e.pathname;else{for(var f=(e.pathname||\"\").split(\"/\");f.length&&!(e.host=f.shift()););e.host||(e.host=\"\"),e.hostname||(e.hostname=\"\"),\"\"!==f[0]&&f.unshift(\"\"),f.length<2&&f.unshift(\"\"),n.pathname=f.join(\"/\")}if(n.search=e.search,n.query=e.query,n.host=e.host||\"\",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var d=n.pathname||\"\",y=n.search||\"\";n.path=d+y}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var v=n.pathname&&\"/\"===n.pathname.charAt(0),b=e.host||e.pathname&&\"/\"===e.pathname.charAt(0),w=b||v||n.host&&e.pathname,E=w,x=n.pathname&&n.pathname.split(\"/\")||[],S=(f=e.pathname&&e.pathname.split(\"/\")||[],n.protocol&&!g[n.protocol]);if(S&&(n.hostname=\"\",n.port=null,n.host&&(\"\"===x[0]?x[0]=n.host:x.unshift(n.host)),n.host=\"\",e.protocol&&(e.hostname=null,e.port=null,e.host&&(\"\"===f[0]?f[0]=e.host:f.unshift(e.host)),e.host=null),w=w&&(\"\"===f[0]||\"\"===x[0])),b)n.host=e.host||\"\"===e.host?e.host:n.host,n.hostname=e.hostname||\"\"===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,x=f;else if(f.length)x||(x=[]),x.pop(),x=x.concat(f),n.search=e.search,n.query=e.query;else if(null!=e.search){if(S)n.host=x.shift(),n.hostname=n.host,(A=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\"))&&(n.auth=A.shift(),n.hostname=A.shift(),n.host=n.hostname);return n.search=e.search,n.query=e.query,null===n.pathname&&null===n.search||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.href=n.format(),n}if(!x.length)return n.pathname=null,n.search?n.path=\"/\"+n.search:n.path=null,n.href=n.format(),n;for(var _=x.slice(-1)[0],j=(n.host||e.host||x.length>1)&&(\".\"===_||\"..\"===_)||\"\"===_,O=0,k=x.length;k>=0;k--)\".\"===(_=x[k])?x.splice(k,1):\"..\"===_?(x.splice(k,1),O++):O&&(x.splice(k,1),O--);if(!w&&!E)for(;O--;O)x.unshift(\"..\");!w||\"\"===x[0]||x[0]&&\"/\"===x[0].charAt(0)||x.unshift(\"\"),j&&\"/\"!==x.join(\"/\").substr(-1)&&x.push(\"\");var A,C=\"\"===x[0]||x[0]&&\"/\"===x[0].charAt(0);S&&(n.hostname=C?\"\":x.length?x.shift():\"\",n.host=n.hostname,(A=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\"))&&(n.auth=A.shift(),n.hostname=A.shift(),n.host=n.hostname));return(w=w||n.host&&x.length)&&!C&&x.unshift(\"\"),x.length>0?n.pathname=x.join(\"/\"):(n.pathname=null,n.path=null),null===n.pathname&&null===n.search||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},o.prototype.parseHost=function(){var e=this.host,t=i.exec(e);t&&(\":\"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},t.parse=v,t.resolve=function(e,t){return v(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?v(e,!1,!0).resolveObject(t):t},t.format=function(e){return\"string\"==typeof e&&(e=v(e)),e instanceof o?e.format():o.prototype.format.call(e)},t.Url=o},53250:(e,t,n)=>{\"use strict\";var r=n(67294);var o=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=r.useState,i=r.useEffect,a=r.useLayoutEffect,l=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var u=\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=s({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return a((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),i((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),l(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:u},50139:(e,t,n)=>{\"use strict\";var r=n(67294),o=n(61688);var s=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=o.useSyncExternalStore,a=r.useRef,l=r.useEffect,c=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,o){var p=a(null);if(null===p.current){var h={hasValue:!1,value:null};p.current=h}else h=p.current;p=c((function(){function e(e){if(!l){if(l=!0,i=e,e=r(e),void 0!==o&&h.hasValue){var t=h.value;if(o(t,e))return a=t}return a=e}if(t=a,s(i,e))return t;var n=r(e);return void 0!==o&&o(t,n)?t:(i=e,a=n)}var i,a,l=!1,c=void 0===n?null:n;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]}),[t,n,r,o]);var f=i(e,p[0],p[1]);return l((function(){h.hasValue=!0,h.value=f}),[f]),u(f),f}},61688:(e,t,n)=>{\"use strict\";e.exports=n(53250)},52798:(e,t,n)=>{\"use strict\";e.exports=n(50139)},94927:(e,t,n)=>{function r(e){try{if(!n.g.localStorage)return!1}catch(e){return!1}var t=n.g.localStorage[e];return null!=t&&\"true\"===String(t).toLowerCase()}e.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}},3131:(e,t,n)=>{\"use strict\";var r=n(96464),o=function(e){return/<\\/+[^>]+>/.test(e)},s=function(e){return/<[^>]+\\/>/.test(e)},i=function(e){return function(e){return/<[^>!]+>/.test(e)}(e)&&!o(e)&&!s(e)};function a(e){return o(e)?\"ClosingTag\":i(e)?\"OpeningTag\":s(e)?\"SelfClosingTag\":\"Text\"}e.exports=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.indentor,o=t.textNodesOnSameLine,s=0,i=[];n=n||\"    \";var l,c,u=(l=e,(c=l,c.split(/(<\\/?[^>]+>)/g).filter((function(e){return\"\"!==e.trim()}))).map((function(e){return{value:e,type:a(e)}}))).map((function(e,t,a){var l=e.value,c=e.type;\"ClosingTag\"===c&&s--;var u=r(n,s),p=u+l;if(\"OpeningTag\"===c&&s++,o){var h=a[t-1],f=a[t-2];\"ClosingTag\"===c&&\"Text\"===h.type&&\"OpeningTag\"===f.type&&(p=\"\"+u+f.value+h.value+l,i.push(t-2,t-1))}return p}));return i.forEach((function(e){return u[e]=null})),u.filter((function(e){return!!e})).join(\"\\n\")}},80255:e=>{var t={\"&\":\"&amp;\",'\"':\"&quot;\",\"'\":\"&apos;\",\"<\":\"&lt;\",\">\":\"&gt;\"};e.exports=function(e){return e&&e.replace?e.replace(/([&\"<>'])/g,(function(e,n){return t[n]})):e}},53479:(e,t,n)=>{var r=n(34155),o=n(80255),s=n(42830).Stream;function i(e,t,n){n=n||0;var r,s,a=(r=t,new Array(n||0).join(r||\"\")),l=e;if(\"object\"==typeof e&&((l=e[s=Object.keys(e)[0]])&&l._elem))return l._elem.name=s,l._elem.icount=n,l._elem.indent=t,l._elem.indents=a,l._elem.interrupt=l,l._elem;var c,u=[],p=[];function h(e){Object.keys(e).forEach((function(t){u.push(function(e,t){return e+'=\"'+o(t)+'\"'}(t,e[t]))}))}switch(typeof l){case\"object\":if(null===l)break;l._attr&&h(l._attr),l._cdata&&p.push((\"<![CDATA[\"+l._cdata).replace(/\\]\\]>/g,\"]]]]><![CDATA[>\")+\"]]>\"),l.forEach&&(c=!1,p.push(\"\"),l.forEach((function(e){\"object\"==typeof e?\"_attr\"==Object.keys(e)[0]?h(e._attr):p.push(i(e,t,n+1)):(p.pop(),c=!0,p.push(o(e)))})),c||p.push(\"\"));break;default:p.push(o(l))}return{name:s,interrupt:!1,attributes:u,content:p,icount:n,indents:a,indent:t}}function a(e,t,n){if(\"object\"!=typeof t)return e(!1,t);var r=t.interrupt?1:t.content.length;function o(){for(;t.content.length;){var o=t.content.shift();if(void 0!==o){if(s(o))return;a(e,o)}}e(!1,(r>1?t.indents:\"\")+(t.name?\"</\"+t.name+\">\":\"\")+(t.indent&&!n?\"\\n\":\"\")),n&&n()}function s(t){return!!t.interrupt&&(t.interrupt.append=e,t.interrupt.end=o,t.interrupt=!1,e(!0),!0)}if(e(!1,t.indents+(t.name?\"<\"+t.name:\"\")+(t.attributes.length?\" \"+t.attributes.join(\" \"):\"\")+(r?t.name?\">\":\"\":t.name?\"/>\":\"\")+(t.indent&&r>1?\"\\n\":\"\")),!r)return e(!1,t.indent?\"\\n\":\"\");s(t)||o()}e.exports=function(e,t){\"object\"!=typeof t&&(t={indent:t});var n,o,l=t.stream?new s:null,c=\"\",u=!1,p=t.indent?!0===t.indent?\"    \":t.indent:\"\",h=!0;function f(e){h?r.nextTick(e):e()}function d(e,t){if(void 0!==t&&(c+=t),e&&!u&&(l=l||new s,u=!0),e&&u){var n=c;f((function(){l.emit(\"data\",n)})),c=\"\"}}function m(e,t){a(d,i(e,p,p?1:0),t)}function g(){if(l){var e=c;f((function(){l.emit(\"data\",e),l.emit(\"end\"),l.readable=!1,l.emit(\"close\")}))}}return f((function(){h=!1})),t.declaration&&(n=t.declaration,o={version:\"1.0\",encoding:n.encoding||\"UTF-8\"},n.standalone&&(o.standalone=n.standalone),m({\"?xml\":{_attr:o}}),c=c.replace(\"/>\",\"?>\")),e&&e.forEach?e.forEach((function(t,n){var r;n+1===e.length&&(r=g),m(t,r)})):m(e,g),l?(l.readable=!0,l):c},e.exports.element=e.exports.Element=function(){var e={_elem:i(Array.prototype.slice.call(arguments)),push:function(e){if(!this.append)throw new Error(\"not assigned to a parent!\");var t=this,n=this._elem.indent;a(this.append,i(e,n,this._elem.icount+(n?1:0)),(function(){t.append(!0)}))},close:function(e){void 0!==e&&this.push(e),this.end&&this.end()}};return e}},45172:function(e,t){var n,r,o;r=[],n=function(){\"use strict\";var e=function(e){return e&&\"getComputedStyle\"in window&&\"smooth\"===window.getComputedStyle(e)[\"scroll-behavior\"]};if(\"undefined\"==typeof window||!(\"document\"in window))return{};var t=function(t,n,r){var o;n=n||999,r||0===r||(r=9);var s=function(e){o=e},i=function(){clearTimeout(o),s(0)},a=function(e){return Math.max(0,t.getTopOf(e)-r)},l=function(r,o,a){if(i(),0===o||o&&o<0||e(t.body))t.toY(r),a&&a();else{var l=t.getY(),c=Math.max(0,r)-l,u=(new Date).getTime();o=o||Math.min(Math.abs(c),n),function e(){s(setTimeout((function(){var n=Math.min(1,((new Date).getTime()-u)/o),r=Math.max(0,Math.floor(l+c*(n<.5?2*n*n:n*(4-2*n)-1)));t.toY(r),n<1&&t.getHeight()+r<t.body.scrollHeight?e():(setTimeout(i,99),a&&a())}),9))}()}},c=function(e,t,n){l(a(e),t,n)},u=function(e,n,o){var s=e.getBoundingClientRect().height,i=t.getTopOf(e)+s,u=t.getHeight(),p=t.getY(),h=p+u;a(e)<p||s+r>u?c(e,n,o):i+r>h?l(i-u+r,n,o):o&&o()},p=function(e,n,r,o){l(Math.max(0,t.getTopOf(e)-t.getHeight()/2+(r||e.getBoundingClientRect().height/2)),n,o)};return{setup:function(e,t){return(0===e||e)&&(n=e),(0===t||t)&&(r=t),{defaultDuration:n,edgeOffset:r}},to:c,toY:l,intoView:u,center:p,stop:i,moving:function(){return!!o},getY:t.getY,getTopOf:t.getTopOf}},n=document.documentElement,r=function(){return window.scrollY||n.scrollTop},o=t({body:document.scrollingElement||document.body,toY:function(e){window.scrollTo(0,e)},getY:r,getHeight:function(){return window.innerHeight||n.clientHeight},getTopOf:function(e){return e.getBoundingClientRect().top+r()-n.offsetTop}});if(o.createScroller=function(e,r,o){return t({body:e,toY:function(t){e.scrollTop=t},getY:function(){return e.scrollTop},getHeight:function(){return Math.min(e.clientHeight,window.innerHeight||n.clientHeight)},getTopOf:function(e){return e.offsetTop}},r,o)},\"addEventListener\"in window&&!window.noZensmooth&&!e(document.body)){var s=\"history\"in window&&\"pushState\"in history,i=s&&\"scrollRestoration\"in history;i&&(history.scrollRestoration=\"auto\"),window.addEventListener(\"load\",(function(){i&&(setTimeout((function(){history.scrollRestoration=\"manual\"}),9),window.addEventListener(\"popstate\",(function(e){e.state&&\"zenscrollY\"in e.state&&o.toY(e.state.zenscrollY)}),!1)),window.location.hash&&setTimeout((function(){var e=o.setup().edgeOffset;if(e){var t=document.getElementById(window.location.href.split(\"#\")[1]);if(t){var n=Math.max(0,o.getTopOf(t)-e),r=o.getY()-n;0<=r&&r<9&&window.scrollTo(0,n)}}}),9)}),!1);var a=new RegExp(\"(^|\\\\s)noZensmooth(\\\\s|$)\");window.addEventListener(\"click\",(function(e){for(var t=e.target;t&&\"A\"!==t.tagName;)t=t.parentNode;if(!(!t||1!==e.which||e.shiftKey||e.metaKey||e.ctrlKey||e.altKey)){if(i){var n=history.state&&\"object\"==typeof history.state?history.state:{};n.zenscrollY=o.getY();try{history.replaceState(n,\"\")}catch(e){}}var r=t.getAttribute(\"href\")||\"\";if(0===r.indexOf(\"#\")&&!a.test(t.className)){var l=0,c=document.getElementById(r.substring(1));if(\"#\"!==r){if(!c)return;l=o.getTopOf(c)}e.preventDefault();var u=function(){window.location=r},p=o.setup().edgeOffset;p&&(l=Math.max(0,l-p),s&&(u=function(){history.pushState({},\"\",r)})),o.toY(l,null,u)}}}),!1)}return o}(),void 0===(o=\"function\"==typeof n?n.apply(t,r):n)||(e.exports=o)},95102:(e,t,n)=>{var r={\"./all.js\":45308,\"./auth/actions.js\":55812,\"./auth/configs-extensions/wrap-actions.js\":53779,\"./auth/index.js\":93705,\"./auth/reducers.js\":43962,\"./auth/selectors.js\":60035,\"./auth/spec-extensions/wrap-actions.js\":60489,\"./auth/wrap-actions.js\":22849,\"./configs/actions.js\":70714,\"./configs/helpers.js\":92256,\"./configs/index.js\":46709,\"./configs/reducers.js\":37743,\"./configs/selectors.js\":69018,\"./configs/spec-actions.js\":22698,\"./deep-linking/helpers.js\":31970,\"./deep-linking/index.js\":34980,\"./deep-linking/layout.js\":41599,\"./deep-linking/operation-tag-wrapper.jsx\":34584,\"./deep-linking/operation-wrapper.jsx\":60877,\"./download-url.js\":48011,\"./err/actions.js\":34966,\"./err/error-transformers/hook.js\":56982,\"./err/error-transformers/transformers/not-of-type.js\":2392,\"./err/error-transformers/transformers/parameter-oneof.js\":21835,\"./err/index.js\":77793,\"./err/reducers.js\":93527,\"./err/selectors.js\":87667,\"./filter/index.js\":49978,\"./filter/opsFilter.js\":4309,\"./json-schema-2020-12/components/Accordion/Accordion.jsx\":47349,\"./json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":36867,\"./json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":22675,\"./json-schema-2020-12/components/icons/ChevronRight.jsx\":12260,\"./json-schema-2020-12/components/keywords/$anchor.jsx\":64922,\"./json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"./json-schema-2020-12/components/keywords/$defs.jsx\":36418,\"./json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":51338,\"./json-schema-2020-12/components/keywords/$dynamicRef.jsx\":27655,\"./json-schema-2020-12/components/keywords/$id.jsx\":93460,\"./json-schema-2020-12/components/keywords/$ref.jsx\":72348,\"./json-schema-2020-12/components/keywords/$schema.jsx\":69359,\"./json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"./json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":65253,\"./json-schema-2020-12/components/keywords/AllOf.jsx\":46457,\"./json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"./json-schema-2020-12/components/keywords/Const.jsx\":27308,\"./json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":69956,\"./json-schema-2020-12/components/keywords/Contains.jsx\":38993,\"./json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"./json-schema-2020-12/components/keywords/Default.jsx\":55148,\"./json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":24539,\"./json-schema-2020-12/components/keywords/DependentSchemas.jsx\":26076,\"./json-schema-2020-12/components/keywords/Deprecated.jsx\":26661,\"./json-schema-2020-12/components/keywords/Description/Description.jsx\":79446,\"./json-schema-2020-12/components/keywords/Else.jsx\":67207,\"./json-schema-2020-12/components/keywords/Enum/Enum.jsx\":91805,\"./json-schema-2020-12/components/keywords/If.jsx\":40487,\"./json-schema-2020-12/components/keywords/Items.jsx\":89206,\"./json-schema-2020-12/components/keywords/Not.jsx\":65174,\"./json-schema-2020-12/components/keywords/OneOf.jsx\":13834,\"./json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":36746,\"./json-schema-2020-12/components/keywords/PrefixItems.jsx\":93971,\"./json-schema-2020-12/components/keywords/Properties/Properties.jsx\":25472,\"./json-schema-2020-12/components/keywords/PropertyNames.jsx\":42338,\"./json-schema-2020-12/components/keywords/ReadOnly.jsx\":16456,\"./json-schema-2020-12/components/keywords/Then.jsx\":67401,\"./json-schema-2020-12/components/keywords/Title/Title.jsx\":78137,\"./json-schema-2020-12/components/keywords/Type.jsx\":22285,\"./json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":85828,\"./json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"./json-schema-2020-12/components/keywords/WriteOnly.jsx\":15789,\"./json-schema-2020-12/context.js\":69006,\"./json-schema-2020-12/fn.js\":33499,\"./json-schema-2020-12/hoc.jsx\":65077,\"./json-schema-2020-12/hooks.js\":12603,\"./json-schema-2020-12/index.js\":97139,\"./json-schema-2020-12/prop-types.js\":16648,\"./json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"./json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":22906,\"./json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":90537,\"./json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":70674,\"./json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":43782,\"./json-schema-2020-12/samples-extensions/fn/class/Registry.js\":14215,\"./json-schema-2020-12/samples-extensions/fn/core/constants.js\":84539,\"./json-schema-2020-12/samples-extensions/fn/core/example.js\":13783,\"./json-schema-2020-12/samples-extensions/fn/core/merge.js\":37078,\"./json-schema-2020-12/samples-extensions/fn/core/predicates.js\":23084,\"./json-schema-2020-12/samples-extensions/fn/core/random.js\":35202,\"./json-schema-2020-12/samples-extensions/fn/core/type.js\":96276,\"./json-schema-2020-12/samples-extensions/fn/core/utils.js\":99346,\"./json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":41433,\"./json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":58509,\"./json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"./json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":54180,\"./json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":91967,\"./json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":44366,\"./json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":65037,\"./json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":74045,\"./json-schema-2020-12/samples-extensions/fn/generators/date.js\":81456,\"./json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"./json-schema-2020-12/samples-extensions/fn/generators/duration.js\":64299,\"./json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"./json-schema-2020-12/samples-extensions/fn/generators/float.js\":51890,\"./json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":69375,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":94518,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":70273,\"./json-schema-2020-12/samples-extensions/fn/generators/int32.js\":57864,\"./json-schema-2020-12/samples-extensions/fn/generators/int64.js\":21726,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":28793,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":98269,\"./json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":45693,\"./json-schema-2020-12/samples-extensions/fn/generators/iri.js\":13080,\"./json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":37856,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":2672,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":54342,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":46724,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":65378,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":92974,\"./json-schema-2020-12/samples-extensions/fn/generators/password.js\":93393,\"./json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"./json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":80375,\"./json-schema-2020-12/samples-extensions/fn/generators/time.js\":65243,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":94692,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":83829,\"./json-schema-2020-12/samples-extensions/fn/generators/uri.js\":52978,\"./json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":38859,\"./json-schema-2020-12/samples-extensions/fn/index.js\":78591,\"./json-schema-2020-12/samples-extensions/fn/main.js\":94277,\"./json-schema-2020-12/samples-extensions/fn/types/array.js\":83982,\"./json-schema-2020-12/samples-extensions/fn/types/boolean.js\":34108,\"./json-schema-2020-12/samples-extensions/fn/types/index.js\":63273,\"./json-schema-2020-12/samples-extensions/fn/types/integer.js\":58864,\"./json-schema-2020-12/samples-extensions/fn/types/null.js\":90853,\"./json-schema-2020-12/samples-extensions/fn/types/number.js\":83455,\"./json-schema-2020-12/samples-extensions/fn/types/object.js\":46852,\"./json-schema-2020-12/samples-extensions/fn/types/string.js\":74522,\"./layout/actions.js\":25474,\"./layout/index.js\":26821,\"./layout/reducers.js\":5672,\"./layout/selectors.js\":4400,\"./layout/spec-extensions/wrap-selector.js\":28989,\"./logs/index.js\":9150,\"./oas3/actions.js\":67002,\"./oas3/auth-extensions/wrap-selectors.js\":73723,\"./oas3/components/callbacks.jsx\":33427,\"./oas3/components/http-auth.jsx\":86775,\"./oas3/components/index.js\":76467,\"./oas3/components/operation-link.jsx\":15757,\"./oas3/components/operation-servers.jsx\":96796,\"./oas3/components/request-body-editor.jsx\":45327,\"./oas3/components/request-body.jsx\":42458,\"./oas3/components/servers-container.jsx\":9928,\"./oas3/components/servers.jsx\":56617,\"./oas3/helpers.jsx\":7779,\"./oas3/index.js\":97451,\"./oas3/reducers.js\":62109,\"./oas3/selectors.js\":5065,\"./oas3/spec-extensions/selectors.js\":91741,\"./oas3/spec-extensions/wrap-selectors.js\":92044,\"./oas3/wrap-components/auth-item.jsx\":70356,\"./oas3/wrap-components/index.js\":37761,\"./oas3/wrap-components/json-schema-string.jsx\":90287,\"./oas3/wrap-components/markdown.jsx\":22460,\"./oas3/wrap-components/model.jsx\":53499,\"./oas3/wrap-components/online-validator-badge.js\":50058,\"./oas3/wrap-components/version-stamp.jsx\":69487,\"./oas31/after-load.js\":92372,\"./oas31/components/contact.jsx\":89503,\"./oas31/components/info.jsx\":16133,\"./oas31/components/json-schema-dialect.jsx\":92562,\"./oas31/components/license.jsx\":51876,\"./oas31/components/model/model.jsx\":92718,\"./oas31/components/models/models.jsx\":20263,\"./oas31/components/version-pragma-filter.jsx\":33429,\"./oas31/components/webhooks.jsx\":39508,\"./oas31/fn.js\":84380,\"./oas31/index.js\":29806,\"./oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":45989,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":19525,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"./oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":59450,\"./oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":25324,\"./oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"./oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":36617,\"./oas31/json-schema-2020-12-extensions/fn.js\":25800,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":14951,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":80809,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":77536,\"./oas31/selectors.js\":64280,\"./oas31/spec-extensions/selectors.js\":9305,\"./oas31/spec-extensions/wrap-selectors.js\":32884,\"./oas31/wrap-components/contact.jsx\":77423,\"./oas31/wrap-components/info.jsx\":284,\"./oas31/wrap-components/license.jsx\":6608,\"./oas31/wrap-components/model.jsx\":17042,\"./oas31/wrap-components/models.jsx\":22914,\"./oas31/wrap-components/version-pragma-filter.jsx\":41434,\"./oas31/wrap-components/version-stamp.jsx\":1122,\"./on-complete/index.js\":28560,\"./request-snippets/fn.js\":92135,\"./request-snippets/index.js\":86575,\"./request-snippets/request-snippets.jsx\":84206,\"./request-snippets/selectors.js\":4669,\"./safe-render/components/error-boundary.jsx\":36195,\"./safe-render/components/fallback.jsx\":29403,\"./safe-render/fn.jsx\":56189,\"./safe-render/index.js\":27621,\"./samples/fn/get-json-sample-schema.js\":72846,\"./samples/fn/get-sample-schema.js\":16132,\"./samples/fn/get-xml-sample-schema.js\":81169,\"./samples/fn/get-yaml-sample-schema.js\":79431,\"./samples/fn/index.js\":29812,\"./samples/index.js\":8883,\"./spec/actions.js\":51228,\"./spec/index.js\":37038,\"./spec/reducers.js\":20032,\"./spec/selectors.js\":33881,\"./spec/wrap-actions.js\":77508,\"./swagger-js/configs-wrap-actions.js\":34852,\"./swagger-js/index.js\":79934,\"./util/index.js\":98525,\"./view/fn.js\":48347,\"./view/index.js\":73420,\"./view/root-injects.jsx\":11092,\"core/plugins/all.js\":45308,\"core/plugins/auth/actions.js\":55812,\"core/plugins/auth/configs-extensions/wrap-actions.js\":53779,\"core/plugins/auth/index.js\":93705,\"core/plugins/auth/reducers.js\":43962,\"core/plugins/auth/selectors.js\":60035,\"core/plugins/auth/spec-extensions/wrap-actions.js\":60489,\"core/plugins/auth/wrap-actions.js\":22849,\"core/plugins/configs/actions.js\":70714,\"core/plugins/configs/helpers.js\":92256,\"core/plugins/configs/index.js\":46709,\"core/plugins/configs/reducers.js\":37743,\"core/plugins/configs/selectors.js\":69018,\"core/plugins/configs/spec-actions.js\":22698,\"core/plugins/deep-linking/helpers.js\":31970,\"core/plugins/deep-linking/index.js\":34980,\"core/plugins/deep-linking/layout.js\":41599,\"core/plugins/deep-linking/operation-tag-wrapper.jsx\":34584,\"core/plugins/deep-linking/operation-wrapper.jsx\":60877,\"core/plugins/download-url.js\":48011,\"core/plugins/err/actions.js\":34966,\"core/plugins/err/error-transformers/hook.js\":56982,\"core/plugins/err/error-transformers/transformers/not-of-type.js\":2392,\"core/plugins/err/error-transformers/transformers/parameter-oneof.js\":21835,\"core/plugins/err/index.js\":77793,\"core/plugins/err/reducers.js\":93527,\"core/plugins/err/selectors.js\":87667,\"core/plugins/filter/index.js\":49978,\"core/plugins/filter/opsFilter.js\":4309,\"core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx\":47349,\"core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":36867,\"core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":22675,\"core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx\":12260,\"core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx\":64922,\"core/plugins/json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"core/plugins/json-schema-2020-12/components/keywords/$defs.jsx\":36418,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":51338,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx\":27655,\"core/plugins/json-schema-2020-12/components/keywords/$id.jsx\":93460,\"core/plugins/json-schema-2020-12/components/keywords/$ref.jsx\":72348,\"core/plugins/json-schema-2020-12/components/keywords/$schema.jsx\":69359,\"core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":65253,\"core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx\":46457,\"core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"core/plugins/json-schema-2020-12/components/keywords/Const.jsx\":27308,\"core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":69956,\"core/plugins/json-schema-2020-12/components/keywords/Contains.jsx\":38993,\"core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"core/plugins/json-schema-2020-12/components/keywords/Default.jsx\":55148,\"core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":24539,\"core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx\":26076,\"core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx\":26661,\"core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx\":79446,\"core/plugins/json-schema-2020-12/components/keywords/Else.jsx\":67207,\"core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx\":91805,\"core/plugins/json-schema-2020-12/components/keywords/If.jsx\":40487,\"core/plugins/json-schema-2020-12/components/keywords/Items.jsx\":89206,\"core/plugins/json-schema-2020-12/components/keywords/Not.jsx\":65174,\"core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx\":13834,\"core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":36746,\"core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx\":93971,\"core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx\":25472,\"core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx\":42338,\"core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx\":16456,\"core/plugins/json-schema-2020-12/components/keywords/Then.jsx\":67401,\"core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx\":78137,\"core/plugins/json-schema-2020-12/components/keywords/Type.jsx\":22285,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":85828,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx\":15789,\"core/plugins/json-schema-2020-12/context.js\":69006,\"core/plugins/json-schema-2020-12/fn.js\":33499,\"core/plugins/json-schema-2020-12/hoc.jsx\":65077,\"core/plugins/json-schema-2020-12/hooks.js\":12603,\"core/plugins/json-schema-2020-12/index.js\":97139,\"core/plugins/json-schema-2020-12/prop-types.js\":16648,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":22906,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":90537,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":70674,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":43782,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/Registry.js\":14215,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/constants.js\":84539,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/example.js\":13783,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/merge.js\":37078,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/predicates.js\":23084,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/random.js\":35202,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/type.js\":96276,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/utils.js\":99346,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":41433,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":58509,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":54180,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":91967,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":44366,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":65037,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":74045,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date.js\":81456,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/duration.js\":64299,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/float.js\":51890,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":69375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":94518,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":70273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int32.js\":57864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int64.js\":21726,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":28793,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":98269,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":45693,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri.js\":13080,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":37856,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":2672,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":54342,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":46724,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":65378,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":92974,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/password.js\":93393,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":80375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/time.js\":65243,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":94692,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":83829,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri.js\":52978,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":38859,\"core/plugins/json-schema-2020-12/samples-extensions/fn/index.js\":78591,\"core/plugins/json-schema-2020-12/samples-extensions/fn/main.js\":94277,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/array.js\":83982,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/boolean.js\":34108,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/index.js\":63273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/integer.js\":58864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/null.js\":90853,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/number.js\":83455,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/object.js\":46852,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/string.js\":74522,\"core/plugins/layout/actions.js\":25474,\"core/plugins/layout/index.js\":26821,\"core/plugins/layout/reducers.js\":5672,\"core/plugins/layout/selectors.js\":4400,\"core/plugins/layout/spec-extensions/wrap-selector.js\":28989,\"core/plugins/logs/index.js\":9150,\"core/plugins/oas3/actions.js\":67002,\"core/plugins/oas3/auth-extensions/wrap-selectors.js\":73723,\"core/plugins/oas3/components/callbacks.jsx\":33427,\"core/plugins/oas3/components/http-auth.jsx\":86775,\"core/plugins/oas3/components/index.js\":76467,\"core/plugins/oas3/components/operation-link.jsx\":15757,\"core/plugins/oas3/components/operation-servers.jsx\":96796,\"core/plugins/oas3/components/request-body-editor.jsx\":45327,\"core/plugins/oas3/components/request-body.jsx\":42458,\"core/plugins/oas3/components/servers-container.jsx\":9928,\"core/plugins/oas3/components/servers.jsx\":56617,\"core/plugins/oas3/helpers.jsx\":7779,\"core/plugins/oas3/index.js\":97451,\"core/plugins/oas3/reducers.js\":62109,\"core/plugins/oas3/selectors.js\":5065,\"core/plugins/oas3/spec-extensions/selectors.js\":91741,\"core/plugins/oas3/spec-extensions/wrap-selectors.js\":92044,\"core/plugins/oas3/wrap-components/auth-item.jsx\":70356,\"core/plugins/oas3/wrap-components/index.js\":37761,\"core/plugins/oas3/wrap-components/json-schema-string.jsx\":90287,\"core/plugins/oas3/wrap-components/markdown.jsx\":22460,\"core/plugins/oas3/wrap-components/model.jsx\":53499,\"core/plugins/oas3/wrap-components/online-validator-badge.js\":50058,\"core/plugins/oas3/wrap-components/version-stamp.jsx\":69487,\"core/plugins/oas31/after-load.js\":92372,\"core/plugins/oas31/components/contact.jsx\":89503,\"core/plugins/oas31/components/info.jsx\":16133,\"core/plugins/oas31/components/json-schema-dialect.jsx\":92562,\"core/plugins/oas31/components/license.jsx\":51876,\"core/plugins/oas31/components/model/model.jsx\":92718,\"core/plugins/oas31/components/models/models.jsx\":20263,\"core/plugins/oas31/components/version-pragma-filter.jsx\":33429,\"core/plugins/oas31/components/webhooks.jsx\":39508,\"core/plugins/oas31/fn.js\":84380,\"core/plugins/oas31/index.js\":29806,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":45989,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":19525,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":59450,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":25324,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":36617,\"core/plugins/oas31/json-schema-2020-12-extensions/fn.js\":25800,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":14951,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":80809,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":77536,\"core/plugins/oas31/selectors.js\":64280,\"core/plugins/oas31/spec-extensions/selectors.js\":9305,\"core/plugins/oas31/spec-extensions/wrap-selectors.js\":32884,\"core/plugins/oas31/wrap-components/contact.jsx\":77423,\"core/plugins/oas31/wrap-components/info.jsx\":284,\"core/plugins/oas31/wrap-components/license.jsx\":6608,\"core/plugins/oas31/wrap-components/model.jsx\":17042,\"core/plugins/oas31/wrap-components/models.jsx\":22914,\"core/plugins/oas31/wrap-components/version-pragma-filter.jsx\":41434,\"core/plugins/oas31/wrap-components/version-stamp.jsx\":1122,\"core/plugins/on-complete/index.js\":28560,\"core/plugins/request-snippets/fn.js\":92135,\"core/plugins/request-snippets/index.js\":86575,\"core/plugins/request-snippets/request-snippets.jsx\":84206,\"core/plugins/request-snippets/selectors.js\":4669,\"core/plugins/safe-render/components/error-boundary.jsx\":36195,\"core/plugins/safe-render/components/fallback.jsx\":29403,\"core/plugins/safe-render/fn.jsx\":56189,\"core/plugins/safe-render/index.js\":27621,\"core/plugins/samples/fn/get-json-sample-schema.js\":72846,\"core/plugins/samples/fn/get-sample-schema.js\":16132,\"core/plugins/samples/fn/get-xml-sample-schema.js\":81169,\"core/plugins/samples/fn/get-yaml-sample-schema.js\":79431,\"core/plugins/samples/fn/index.js\":29812,\"core/plugins/samples/index.js\":8883,\"core/plugins/spec/actions.js\":51228,\"core/plugins/spec/index.js\":37038,\"core/plugins/spec/reducers.js\":20032,\"core/plugins/spec/selectors.js\":33881,\"core/plugins/spec/wrap-actions.js\":77508,\"core/plugins/swagger-js/configs-wrap-actions.js\":34852,\"core/plugins/swagger-js/index.js\":79934,\"core/plugins/util/index.js\":98525,\"core/plugins/view/fn.js\":48347,\"core/plugins/view/index.js\":73420,\"core/plugins/view/root-injects.jsx\":11092};function o(e){var t=s(e);return n(t)}function s(e){if(!n.o(r,e)){var t=new Error(\"Cannot find module '\"+e+\"'\");throw t.code=\"MODULE_NOT_FOUND\",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=s,e.exports=o,o.id=95102},2517:e=>{\"use strict\";e.exports=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIGNsYXNzPSJsZHMtcm9sbGluZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IGJhY2tncm91bmQtcG9zaXRpb246IGluaXRpYWwgaW5pdGlhbDsgYmFja2dyb3VuZC1yZXBlYXQ6IGluaXRpYWwgaW5pdGlhbDsiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIG5nLWF0dHItc3Ryb2tlPSJ7e2NvbmZpZy5jb2xvcn19IiBuZy1hdHRyLXN0cm9rZS13aWR0aD0ie3tjb25maWcud2lkdGh9fSIgbmctYXR0ci1yPSJ7e2NvbmZpZy5yYWRpdXN9fSIgbmctYXR0ci1zdHJva2UtZGFzaGFycmF5PSJ7e2NvbmZpZy5kYXNoYXJyYXl9fSIgc3Ryb2tlPSIjNTU1NTU1IiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgY2FsY01vZGU9ImxpbmVhciIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49IjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvY2lyY2xlPjwvc3ZnPgo=\"},24654:()=>{},52361:()=>{},94616:()=>{},25110:(e,t,n)=>{e.exports=n(24848)},58309:(e,t,n)=>{e.exports=n(83363)},70586:(e,t,n)=>{e.exports=n(57784)},11189:(e,t,n)=>{e.exports=n(28196)},39022:(e,t,n)=>{e.exports=n(8065)},74386:(e,t,n)=>{e.exports=n(57448)},2250:(e,t,n)=>{e.exports=n(29455)},47475:(e,t,n)=>{e.exports=n(69743)},14418:(e,t,n)=>{e.exports=n(11955)},12373:(e,t,n)=>{e.exports=n(96064)},51679:(e,t,n)=>{e.exports=n(61577)},86:(e,t,n)=>{e.exports=n(46279)},58118:(e,t,n)=>{e.exports=n(33778)},11882:(e,t,n)=>{e.exports=n(19373)},8712:(e,t,n)=>{e.exports=n(73819)},57269:(e,t,n)=>{e.exports=n(11022)},97606:(e,t,n)=>{e.exports=n(61798)},24282:(e,t,n)=>{e.exports=n(52527)},12196:(e,t,n)=>{e.exports=n(36857)},24278:(e,t,n)=>{e.exports=n(82073)},92039:(e,t,n)=>{e.exports=n(45286)},2578:(e,t,n)=>{e.exports=n(62856)},39940:(e,t,n)=>{e.exports=n(2348)},27043:(e,t,n)=>{e.exports=n(35178)},81607:(e,t,n)=>{e.exports=n(76361)},47273:(e,t,n)=>{e.exports=n(71815)},35627:(e,t,n)=>{e.exports=n(8933)},18492:(e,t,n)=>{e.exports=n(15868)},44081:(e,t,n)=>{e.exports=n(14873)},91086:(e,t,n)=>{e.exports=n(38849)},76986:(e,t,n)=>{e.exports=n(63383)},96718:(e,t,n)=>{e.exports=n(41910)},2018:(e,t,n)=>{e.exports=n(86209)},82865:(e,t,n)=>{e.exports=n(53402)},28222:(e,t,n)=>{e.exports=n(23059)},3665:(e,t,n)=>{e.exports=n(47795)},6226:(e,t,n)=>{e.exports=n(27460)},87198:(e,t,n)=>{e.exports=n(27989)},82737:(e,t,n)=>{e.exports=n(5519)},57740:(e,t,n)=>{e.exports=n(23452)},63460:(e,t,n)=>{e.exports=n(57641)},28886:(e,t,n)=>{e.exports=n(72010)},19030:(e,t,n)=>{e.exports=n(93726)},69689:e=>{e.exports=function(e,t){return t.get?t.get.call(e):t.value},e.exports.__esModule=!0,e.exports.default=e.exports},66412:e=>{e.exports=function(e,t,n){if(!t.has(e))throw new TypeError(\"attempted to \"+n+\" private field on non-instance\");return t.get(e)},e.exports.__esModule=!0,e.exports.default=e.exports},47667:(e,t,n)=>{var r=n(69689),o=n(66412);e.exports=function(e,t){var n=o(e,t,\"get\");return r(e,n)},e.exports.__esModule=!0,e.exports.default=e.exports},61125:(e,t,n)=>{var r=n(73685),o=n(57696);e.exports=function(e,t,n){return(t=o(t))in e?r(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.__esModule=!0,e.exports.default=e.exports},23101:(e,t,n)=>{var r=n(60269),o=n(14122);function s(){var t;return e.exports=s=r?o(t=r).call(t):function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},e.exports.__esModule=!0,e.exports.default=e.exports,s.apply(this,arguments)}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports},58826:(e,t,n)=>{var r=n(93799),o=n(84710),s=n(44442),i=n(27533),a=n(1449),l=n(57152),c=n(39057),u=n(70573),p=n(73685),h=n(61125);function f(e,t){var n=r(e);if(o){var l=o(e);t&&(l=s(l).call(l,(function(t){return i(e,t).enumerable}))),a(n).apply(n,l)}return n}e.exports=function(e){for(var t=1;t<arguments.length;t++){var n,r,o=null!=arguments[t]?arguments[t]:{};t%2?l(n=f(Object(o),!0)).call(n,(function(t){h(e,t,o[t])})):c?u(e,c(o)):l(r=f(Object(o))).call(r,(function(t){p(e,t,i(o,t))}))}return e},e.exports.__esModule=!0,e.exports.default=e.exports},88436:(e,t,n)=>{var r=n(84710),o=n(69447),s=n(80300);e.exports=function(e,t){if(null==e)return{};var n,i,a=s(e,t);if(r){var l=r(e);for(i=0;i<l.length;i++)n=l[i],o(t).call(t,n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a},e.exports.__esModule=!0,e.exports.default=e.exports},80300:(e,t,n)=>{var r=n(93799),o=n(69447);e.exports=function(e,t){if(null==e)return{};var n,s,i={},a=r(e);for(s=0;s<a.length;s++)n=a[s],o(t).call(t,n)>=0||(i[n]=e[n]);return i},e.exports.__esModule=!0,e.exports.default=e.exports},18504:(e,t,n)=>{var r=n(71384),o=n(20474).default;e.exports=function(e,t){if(\"object\"!==o(e)||null===e)return e;var n=e[r];if(void 0!==n){var s=n.call(e,t||\"default\");if(\"object\"!==o(s))return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},57696:(e,t,n)=>{var r=n(20474).default,o=n(18504);e.exports=function(e){var t=o(e,\"string\");return\"symbol\"===r(t)?t:String(t)},e.exports.__esModule=!0,e.exports.default=e.exports},20474:(e,t,n)=>{var r=n(86600),o=n(9759);function s(t){return e.exports=s=\"function\"==typeof r&&\"symbol\"==typeof o?function(e){return typeof e}:function(e){return e&&\"function\"==typeof r&&e.constructor===r&&e!==r.prototype?\"symbol\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,s(t)}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports},64572:(e,t,n)=>{\"use strict\";function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e){var t=function(e,t){if(\"object\"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||\"default\");if(\"object\"!==r(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===r(t)?t:String(t)}function s(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,{Z:()=>s})},87462:(e,t,n)=>{\"use strict\";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},63366:(e,t,n)=>{\"use strict\";function r(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},1272:(e,t,n)=>{\"use strict\";function r(e){return null==e}n.d(t,{A8:()=>qt,ZP:()=>Xt});var o={isNothing:r,isObject:function(e){return\"object\"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:r(e)?[]:[e]},repeat:function(e,t){var n,r=\"\";for(n=0;n<t;n+=1)r+=e;return r},isNegativeZero:function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},extend:function(e,t){var n,r,o,s;if(t)for(n=0,r=(s=Object.keys(t)).length;n<r;n+=1)e[o=s[n]]=t[o];return e}};function s(e,t){var n=\"\",r=e.reason||\"(unknown reason)\";return e.mark?(e.mark.name&&(n+='in \"'+e.mark.name+'\" '),n+=\"(\"+(e.mark.line+1)+\":\"+(e.mark.column+1)+\")\",!t&&e.mark.snippet&&(n+=\"\\n\\n\"+e.mark.snippet),r+\" \"+n):r}function i(e,t){Error.call(this),this.name=\"YAMLException\",this.reason=e,this.mark=t,this.message=s(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||\"\"}i.prototype=Object.create(Error.prototype),i.prototype.constructor=i,i.prototype.toString=function(e){return this.name+\": \"+s(this,e)};var a=i;function l(e,t,n,r,o){var s=\"\",i=\"\",a=Math.floor(o/2)-1;return r-t>a&&(t=r-a+(s=\" ... \").length),n-r>a&&(n=r+a-(i=\" ...\").length),{str:s+e.slice(t,n).replace(/\\t/g,\"→\")+i,pos:r-t+s.length}}function c(e,t){return o.repeat(\" \",t-e.length)+e}var u=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),\"number\"!=typeof t.indent&&(t.indent=1),\"number\"!=typeof t.linesBefore&&(t.linesBefore=3),\"number\"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,r=/\\r?\\n|\\r|\\0/g,s=[0],i=[],a=-1;n=r.exec(e.buffer);)i.push(n.index),s.push(n.index+n[0].length),e.position<=n.index&&a<0&&(a=s.length-2);a<0&&(a=s.length-1);var u,p,h=\"\",f=Math.min(e.line+t.linesAfter,i.length).toString().length,d=t.maxLength-(t.indent+f+3);for(u=1;u<=t.linesBefore&&!(a-u<0);u++)p=l(e.buffer,s[a-u],i[a-u],e.position-(s[a]-s[a-u]),d),h=o.repeat(\" \",t.indent)+c((e.line-u+1).toString(),f)+\" | \"+p.str+\"\\n\"+h;for(p=l(e.buffer,s[a],i[a],e.position,d),h+=o.repeat(\" \",t.indent)+c((e.line+1).toString(),f)+\" | \"+p.str+\"\\n\",h+=o.repeat(\"-\",t.indent+f+3+p.pos)+\"^\\n\",u=1;u<=t.linesAfter&&!(a+u>=i.length);u++)p=l(e.buffer,s[a+u],i[a+u],e.position-(s[a]-s[a+u]),d),h+=o.repeat(\" \",t.indent)+c((e.line+u+1).toString(),f)+\" | \"+p.str+\"\\n\";return h.replace(/\\n$/,\"\")},p=[\"kind\",\"multi\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"representName\",\"defaultStyle\",\"styleAliases\"],h=[\"scalar\",\"sequence\",\"mapping\"];var f=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===p.indexOf(t))throw new a('Unknown option \"'+t+'\" is met in definition of \"'+e+'\" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===h.indexOf(this.kind))throw new a('Unknown kind \"'+this.kind+'\" is specified for \"'+e+'\" YAML type.')};function d(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,r){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=r)})),n[t]=e})),n}function m(e){return this.extend(e)}m.prototype.extend=function(e){var t=[],n=[];if(e instanceof f)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new a(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof f))throw new a(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");if(e.loadKind&&\"scalar\"!==e.loadKind)throw new a(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");if(e.multi)throw new a(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\")})),n.forEach((function(e){if(!(e instanceof f))throw new a(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\")}));var r=Object.create(m.prototype);return r.implicit=(this.implicit||[]).concat(t),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=d(r,\"implicit\"),r.compiledExplicit=d(r,\"explicit\"),r.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(r);return n}(r.compiledImplicit,r.compiledExplicit),r};var g=m,y=new f(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(e){return null!==e?e:\"\"}}),v=new f(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(e){return null!==e?e:[]}}),b=new f(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(e){return null!==e?e:{}}}),w=new g({explicit:[y,v,b]});var E=new f(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&\"~\"===e||4===t&&(\"null\"===e||\"Null\"===e||\"NULL\"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"},empty:function(){return\"\"}},defaultStyle:\"lowercase\"});var x=new f(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&(\"true\"===e||\"True\"===e||\"TRUE\"===e)||5===t&&(\"false\"===e||\"False\"===e||\"FALSE\"===e)},construct:function(e){return\"true\"===e||\"True\"===e||\"TRUE\"===e},predicate:function(e){return\"[object Boolean]\"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?\"true\":\"false\"},uppercase:function(e){return e?\"TRUE\":\"FALSE\"},camelcase:function(e){return e?\"True\":\"False\"}},defaultStyle:\"lowercase\"});function S(e){return 48<=e&&e<=55}function _(e){return 48<=e&&e<=57}var j=new f(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t,n,r=e.length,o=0,s=!1;if(!r)return!1;if(\"-\"!==(t=e[o])&&\"+\"!==t||(t=e[++o]),\"0\"===t){if(o+1===r)return!0;if(\"b\"===(t=e[++o])){for(o++;o<r;o++)if(\"_\"!==(t=e[o])){if(\"0\"!==t&&\"1\"!==t)return!1;s=!0}return s&&\"_\"!==t}if(\"x\"===t){for(o++;o<r;o++)if(\"_\"!==(t=e[o])){if(!(48<=(n=e.charCodeAt(o))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;s=!0}return s&&\"_\"!==t}if(\"o\"===t){for(o++;o<r;o++)if(\"_\"!==(t=e[o])){if(!S(e.charCodeAt(o)))return!1;s=!0}return s&&\"_\"!==t}}if(\"_\"===t)return!1;for(;o<r;o++)if(\"_\"!==(t=e[o])){if(!_(e.charCodeAt(o)))return!1;s=!0}return!(!s||\"_\"===t)},construct:function(e){var t,n=e,r=1;if(-1!==n.indexOf(\"_\")&&(n=n.replace(/_/g,\"\")),\"-\"!==(t=n[0])&&\"+\"!==t||(\"-\"===t&&(r=-1),t=(n=n.slice(1))[0]),\"0\"===n)return 0;if(\"0\"===t){if(\"b\"===n[1])return r*parseInt(n.slice(2),2);if(\"x\"===n[1])return r*parseInt(n.slice(2),16);if(\"o\"===n[1])return r*parseInt(n.slice(2),8)}return r*parseInt(n,10)},predicate:function(e){return\"[object Number]\"===Object.prototype.toString.call(e)&&e%1==0&&!o.isNegativeZero(e)},represent:{binary:function(e){return e>=0?\"0b\"+e.toString(2):\"-0b\"+e.toString(2).slice(1)},octal:function(e){return e>=0?\"0o\"+e.toString(8):\"-0o\"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?\"0x\"+e.toString(16).toUpperCase():\"-0x\"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}}),O=new RegExp(\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");var k=/^[-+]?[0-9]+e/;var A=new f(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:function(e){return null!==e&&!(!O.test(e)||\"_\"===e[e.length-1])},construct:function(e){var t,n;return n=\"-\"===(t=e.replace(/_/g,\"\").toLowerCase())[0]?-1:1,\"+-\".indexOf(t[0])>=0&&(t=t.slice(1)),\".inf\"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:\".nan\"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return\"[object Number]\"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===e)switch(t){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(o.isNegativeZero(e))return\"-0.0\";return n=e.toString(10),k.test(n)?n.replace(\"e\",\".e\"):n},defaultStyle:\"lowercase\"}),C=w.extend({implicit:[E,x,j,A]}),P=C,N=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),I=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");var T=new f(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:function(e){return null!==e&&(null!==N.exec(e)||null!==I.exec(e))},construct:function(e){var t,n,r,o,s,i,a,l,c=0,u=null;if(null===(t=N.exec(e))&&(t=I.exec(e)),null===t)throw new Error(\"Date resolve error\");if(n=+t[1],r=+t[2]-1,o=+t[3],!t[4])return new Date(Date.UTC(n,r,o));if(s=+t[4],i=+t[5],a=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+=\"0\";c=+c}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),\"-\"===t[9]&&(u=-u)),l=new Date(Date.UTC(n,r,o,s,i,a,c)),u&&l.setTime(l.getTime()-u),l},instanceOf:Date,represent:function(e){return e.toISOString()}});var R=new f(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:function(e){return\"<<\"===e||null===e}}),M=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";var D=new f(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t,n,r=0,o=e.length,s=M;for(n=0;n<o;n++)if(!((t=s.indexOf(e.charAt(n)))>64)){if(t<0)return!1;r+=6}return r%8==0},construct:function(e){var t,n,r=e.replace(/[\\r\\n=]/g,\"\"),o=r.length,s=M,i=0,a=[];for(t=0;t<o;t++)t%4==0&&t&&(a.push(i>>16&255),a.push(i>>8&255),a.push(255&i)),i=i<<6|s.indexOf(r.charAt(t));return 0===(n=o%4*6)?(a.push(i>>16&255),a.push(i>>8&255),a.push(255&i)):18===n?(a.push(i>>10&255),a.push(i>>2&255)):12===n&&a.push(i>>4&255),new Uint8Array(a)},predicate:function(e){return\"[object Uint8Array]\"===Object.prototype.toString.call(e)},represent:function(e){var t,n,r=\"\",o=0,s=e.length,i=M;for(t=0;t<s;t++)t%3==0&&t&&(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]),o=(o<<8)+e[t];return 0===(n=s%3)?(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]):2===n?(r+=i[o>>10&63],r+=i[o>>4&63],r+=i[o<<2&63],r+=i[64]):1===n&&(r+=i[o>>2&63],r+=i[o<<4&63],r+=i[64],r+=i[64]),r}}),F=Object.prototype.hasOwnProperty,L=Object.prototype.toString;var B=new f(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:function(e){if(null===e)return!0;var t,n,r,o,s,i=[],a=e;for(t=0,n=a.length;t<n;t+=1){if(r=a[t],s=!1,\"[object Object]\"!==L.call(r))return!1;for(o in r)if(F.call(r,o)){if(s)return!1;s=!0}if(!s)return!1;if(-1!==i.indexOf(o))return!1;i.push(o)}return!0},construct:function(e){return null!==e?e:[]}}),$=Object.prototype.toString;var q=new f(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:function(e){if(null===e)return!0;var t,n,r,o,s,i=e;for(s=new Array(i.length),t=0,n=i.length;t<n;t+=1){if(r=i[t],\"[object Object]\"!==$.call(r))return!1;if(1!==(o=Object.keys(r)).length)return!1;s[t]=[o[0],r[o[0]]]}return!0},construct:function(e){if(null===e)return[];var t,n,r,o,s,i=e;for(s=new Array(i.length),t=0,n=i.length;t<n;t+=1)r=i[t],o=Object.keys(r),s[t]=[o[0],r[o[0]]];return s}}),U=Object.prototype.hasOwnProperty;var z=new f(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:function(e){if(null===e)return!0;var t,n=e;for(t in n)if(U.call(n,t)&&null!==n[t])return!1;return!0},construct:function(e){return null!==e?e:{}}}),V=P.extend({implicit:[T,R],explicit:[D,B,q,z]}),W=Object.prototype.hasOwnProperty,J=1,K=2,H=3,G=4,Z=1,Y=2,X=3,Q=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,ee=/[\\x85\\u2028\\u2029]/,te=/[,\\[\\]\\{\\}]/,ne=/^(?:!|!!|![a-z\\-]+!)$/i,re=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function oe(e){return Object.prototype.toString.call(e)}function se(e){return 10===e||13===e}function ie(e){return 9===e||32===e}function ae(e){return 9===e||32===e||10===e||13===e}function le(e){return 44===e||91===e||93===e||123===e||125===e}function ce(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function ue(e){return 48===e?\"\\0\":97===e?\"\u0007\":98===e?\"\\b\":116===e||9===e?\"\\t\":110===e?\"\\n\":118===e?\"\\v\":102===e?\"\\f\":114===e?\"\\r\":101===e?\"\u001b\":32===e?\" \":34===e?'\"':47===e?\"/\":92===e?\"\\\\\":78===e?\"\":95===e?\" \":76===e?\"\\u2028\":80===e?\"\\u2029\":\"\"}function pe(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}for(var he=new Array(256),fe=new Array(256),de=0;de<256;de++)he[de]=ue(de)?1:0,fe[de]=ue(de);function me(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||V,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ge(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=u(n),new a(t,n)}function ye(e,t){throw ge(e,t)}function ve(e,t){e.onWarning&&e.onWarning.call(null,ge(e,t))}var be={YAML:function(e,t,n){var r,o,s;null!==e.version&&ye(e,\"duplication of %YAML directive\"),1!==n.length&&ye(e,\"YAML directive accepts exactly one argument\"),null===(r=/^([0-9]+)\\.([0-9]+)$/.exec(n[0]))&&ye(e,\"ill-formed argument of the YAML directive\"),o=parseInt(r[1],10),s=parseInt(r[2],10),1!==o&&ye(e,\"unacceptable YAML version of the document\"),e.version=n[0],e.checkLineBreaks=s<2,1!==s&&2!==s&&ve(e,\"unsupported YAML version of the document\")},TAG:function(e,t,n){var r,o;2!==n.length&&ye(e,\"TAG directive accepts exactly two arguments\"),r=n[0],o=n[1],ne.test(r)||ye(e,\"ill-formed tag handle (first argument) of the TAG directive\"),W.call(e.tagMap,r)&&ye(e,'there is a previously declared suffix for \"'+r+'\" tag handle'),re.test(o)||ye(e,\"ill-formed tag prefix (second argument) of the TAG directive\");try{o=decodeURIComponent(o)}catch(t){ye(e,\"tag prefix is malformed: \"+o)}e.tagMap[r]=o}};function we(e,t,n,r){var o,s,i,a;if(t<n){if(a=e.input.slice(t,n),r)for(o=0,s=a.length;o<s;o+=1)9===(i=a.charCodeAt(o))||32<=i&&i<=1114111||ye(e,\"expected valid JSON character\");else Q.test(a)&&ye(e,\"the stream contains non-printable characters\");e.result+=a}}function Ee(e,t,n,r){var s,i,a,l;for(o.isObject(n)||ye(e,\"cannot merge mappings; the provided source object is unacceptable\"),a=0,l=(s=Object.keys(n)).length;a<l;a+=1)i=s[a],W.call(t,i)||(t[i]=n[i],r[i]=!0)}function xe(e,t,n,r,o,s,i,a,l){var c,u;if(Array.isArray(o))for(c=0,u=(o=Array.prototype.slice.call(o)).length;c<u;c+=1)Array.isArray(o[c])&&ye(e,\"nested arrays are not supported inside keys\"),\"object\"==typeof o&&\"[object Object]\"===oe(o[c])&&(o[c]=\"[object Object]\");if(\"object\"==typeof o&&\"[object Object]\"===oe(o)&&(o=\"[object Object]\"),o=String(o),null===t&&(t={}),\"tag:yaml.org,2002:merge\"===r)if(Array.isArray(s))for(c=0,u=s.length;c<u;c+=1)Ee(e,t,s[c],n);else Ee(e,t,s,n);else e.json||W.call(n,o)||!W.call(t,o)||(e.line=i||e.line,e.lineStart=a||e.lineStart,e.position=l||e.position,ye(e,\"duplicated mapping key\")),\"__proto__\"===o?Object.defineProperty(t,o,{configurable:!0,enumerable:!0,writable:!0,value:s}):t[o]=s,delete n[o];return t}function Se(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):ye(e,\"a line break is expected\"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function _e(e,t,n){for(var r=0,o=e.input.charCodeAt(e.position);0!==o;){for(;ie(o);)9===o&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),o=e.input.charCodeAt(++e.position);if(t&&35===o)do{o=e.input.charCodeAt(++e.position)}while(10!==o&&13!==o&&0!==o);if(!se(o))break;for(Se(e),o=e.input.charCodeAt(e.position),r++,e.lineIndent=0;32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position)}return-1!==n&&0!==r&&e.lineIndent<n&&ve(e,\"deficient indentation\"),r}function je(e){var t,n=e.position;return!(45!==(t=e.input.charCodeAt(n))&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,0!==(t=e.input.charCodeAt(n))&&!ae(t)))}function Oe(e,t){1===t?e.result+=\" \":t>1&&(e.result+=o.repeat(\"\\n\",t-1))}function ke(e,t){var n,r,o=e.tag,s=e.anchor,i=[],a=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),r=e.input.charCodeAt(e.position);0!==r&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ye(e,\"tab characters must not be used in indentation\")),45===r)&&ae(e.input.charCodeAt(e.position+1));)if(a=!0,e.position++,_e(e,!0,-1)&&e.lineIndent<=t)i.push(null),r=e.input.charCodeAt(e.position);else if(n=e.line,Pe(e,t,H,!1,!0),i.push(e.result),_e(e,!0,-1),r=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==r)ye(e,\"bad indentation of a sequence entry\");else if(e.lineIndent<t)break;return!!a&&(e.tag=o,e.anchor=s,e.kind=\"sequence\",e.result=i,!0)}function Ae(e){var t,n,r,o,s=!1,i=!1;if(33!==(o=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&ye(e,\"duplication of a tag property\"),60===(o=e.input.charCodeAt(++e.position))?(s=!0,o=e.input.charCodeAt(++e.position)):33===o?(i=!0,n=\"!!\",o=e.input.charCodeAt(++e.position)):n=\"!\",t=e.position,s){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&62!==o);e.position<e.length?(r=e.input.slice(t,e.position),o=e.input.charCodeAt(++e.position)):ye(e,\"unexpected end of the stream within a verbatim tag\")}else{for(;0!==o&&!ae(o);)33===o&&(i?ye(e,\"tag suffix cannot contain exclamation marks\"):(n=e.input.slice(t-1,e.position+1),ne.test(n)||ye(e,\"named tag handle cannot contain such characters\"),i=!0,t=e.position+1)),o=e.input.charCodeAt(++e.position);r=e.input.slice(t,e.position),te.test(r)&&ye(e,\"tag suffix cannot contain flow indicator characters\")}r&&!re.test(r)&&ye(e,\"tag name cannot contain such characters: \"+r);try{r=decodeURIComponent(r)}catch(t){ye(e,\"tag name is malformed: \"+r)}return s?e.tag=r:W.call(e.tagMap,n)?e.tag=e.tagMap[n]+r:\"!\"===n?e.tag=\"!\"+r:\"!!\"===n?e.tag=\"tag:yaml.org,2002:\"+r:ye(e,'undeclared tag handle \"'+n+'\"'),!0}function Ce(e){var t,n;if(38!==(n=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&ye(e,\"duplication of an anchor property\"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!ae(n)&&!le(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&ye(e,\"name of an anchor node must contain at least one character\"),e.anchor=e.input.slice(t,e.position),!0}function Pe(e,t,n,r,s){var i,a,l,c,u,p,h,f,d,m=1,g=!1,y=!1;if(null!==e.listener&&e.listener(\"open\",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,i=a=l=G===n||H===n,r&&_e(e,!0,-1)&&(g=!0,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)),1===m)for(;Ae(e)||Ce(e);)_e(e,!0,-1)?(g=!0,l=i,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)):l=!1;if(l&&(l=g||s),1!==m&&G!==n||(f=J===n||K===n?t:t+1,d=e.position-e.lineStart,1===m?l&&(ke(e,d)||function(e,t,n){var r,o,s,i,a,l,c,u=e.tag,p=e.anchor,h={},f=Object.create(null),d=null,m=null,g=null,y=!1,v=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=h),c=e.input.charCodeAt(e.position);0!==c;){if(y||-1===e.firstTabInLine||(e.position=e.firstTabInLine,ye(e,\"tab characters must not be used in indentation\")),r=e.input.charCodeAt(e.position+1),s=e.line,63!==c&&58!==c||!ae(r)){if(i=e.line,a=e.lineStart,l=e.position,!Pe(e,n,K,!1,!0))break;if(e.line===s){for(c=e.input.charCodeAt(e.position);ie(c);)c=e.input.charCodeAt(++e.position);if(58===c)ae(c=e.input.charCodeAt(++e.position))||ye(e,\"a whitespace character is expected after the key-value separator within a block mapping\"),y&&(xe(e,h,f,d,m,null,i,a,l),d=m=g=null),v=!0,y=!1,o=!1,d=e.tag,m=e.result;else{if(!v)return e.tag=u,e.anchor=p,!0;ye(e,\"can not read an implicit mapping pair; a colon is missed\")}}else{if(!v)return e.tag=u,e.anchor=p,!0;ye(e,\"can not read a block mapping entry; a multiline key may not be an implicit key\")}}else 63===c?(y&&(xe(e,h,f,d,m,null,i,a,l),d=m=g=null),v=!0,y=!0,o=!0):y?(y=!1,o=!0):ye(e,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),e.position+=1,c=r;if((e.line===s||e.lineIndent>t)&&(y&&(i=e.line,a=e.lineStart,l=e.position),Pe(e,t,G,!0,o)&&(y?m=e.result:g=e.result),y||(xe(e,h,f,d,m,g,i,a,l),d=m=g=null),_e(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===s||e.lineIndent>t)&&0!==c)ye(e,\"bad indentation of a mapping entry\");else if(e.lineIndent<t)break}return y&&xe(e,h,f,d,m,null,i,a,l),v&&(e.tag=u,e.anchor=p,e.kind=\"mapping\",e.result=h),v}(e,d,f))||function(e,t){var n,r,o,s,i,a,l,c,u,p,h,f,d=!0,m=e.tag,g=e.anchor,y=Object.create(null);if(91===(f=e.input.charCodeAt(e.position)))i=93,c=!1,s=[];else{if(123!==f)return!1;i=125,c=!0,s={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=s),f=e.input.charCodeAt(++e.position);0!==f;){if(_e(e,!0,t),(f=e.input.charCodeAt(e.position))===i)return e.position++,e.tag=m,e.anchor=g,e.kind=c?\"mapping\":\"sequence\",e.result=s,!0;d?44===f&&ye(e,\"expected the node content, but found ','\"):ye(e,\"missed comma between flow collection entries\"),h=null,a=l=!1,63===f&&ae(e.input.charCodeAt(e.position+1))&&(a=l=!0,e.position++,_e(e,!0,t)),n=e.line,r=e.lineStart,o=e.position,Pe(e,t,J,!1,!0),p=e.tag,u=e.result,_e(e,!0,t),f=e.input.charCodeAt(e.position),!l&&e.line!==n||58!==f||(a=!0,f=e.input.charCodeAt(++e.position),_e(e,!0,t),Pe(e,t,J,!1,!0),h=e.result),c?xe(e,s,y,p,u,h,n,r,o):a?s.push(xe(e,null,y,p,u,h,n,r,o)):s.push(u),_e(e,!0,t),44===(f=e.input.charCodeAt(e.position))?(d=!0,f=e.input.charCodeAt(++e.position)):d=!1}ye(e,\"unexpected end of the stream within a flow collection\")}(e,f)?y=!0:(a&&function(e,t){var n,r,s,i,a,l=Z,c=!1,u=!1,p=t,h=0,f=!1;if(124===(i=e.input.charCodeAt(e.position)))r=!1;else{if(62!==i)return!1;r=!0}for(e.kind=\"scalar\",e.result=\"\";0!==i;)if(43===(i=e.input.charCodeAt(++e.position))||45===i)Z===l?l=43===i?X:Y:ye(e,\"repeat of a chomping mode identifier\");else{if(!((s=48<=(a=i)&&a<=57?a-48:-1)>=0))break;0===s?ye(e,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):u?ye(e,\"repeat of an indentation width identifier\"):(p=t+s-1,u=!0)}if(ie(i)){do{i=e.input.charCodeAt(++e.position)}while(ie(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!se(i)&&0!==i)}for(;0!==i;){for(Se(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!u||e.lineIndent<p)&&32===i;)e.lineIndent++,i=e.input.charCodeAt(++e.position);if(!u&&e.lineIndent>p&&(p=e.lineIndent),se(i))h++;else{if(e.lineIndent<p){l===X?e.result+=o.repeat(\"\\n\",c?1+h:h):l===Z&&c&&(e.result+=\"\\n\");break}for(r?ie(i)?(f=!0,e.result+=o.repeat(\"\\n\",c?1+h:h)):f?(f=!1,e.result+=o.repeat(\"\\n\",h+1)):0===h?c&&(e.result+=\" \"):e.result+=o.repeat(\"\\n\",h):e.result+=o.repeat(\"\\n\",c?1+h:h),c=!0,u=!0,h=0,n=e.position;!se(i)&&0!==i;)i=e.input.charCodeAt(++e.position);we(e,n,e.position,!1)}}return!0}(e,f)||function(e,t){var n,r,o;if(39!==(n=e.input.charCodeAt(e.position)))return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,r=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(we(e,r,e.position,!0),39!==(n=e.input.charCodeAt(++e.position)))return!0;r=e.position,e.position++,o=e.position}else se(n)?(we(e,r,o,!0),Oe(e,_e(e,!1,t)),r=o=e.position):e.position===e.lineStart&&je(e)?ye(e,\"unexpected end of the document within a single quoted scalar\"):(e.position++,o=e.position);ye(e,\"unexpected end of the stream within a single quoted scalar\")}(e,f)||function(e,t){var n,r,o,s,i,a,l;if(34!==(a=e.input.charCodeAt(e.position)))return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,n=r=e.position;0!==(a=e.input.charCodeAt(e.position));){if(34===a)return we(e,n,e.position,!0),e.position++,!0;if(92===a){if(we(e,n,e.position,!0),se(a=e.input.charCodeAt(++e.position)))_e(e,!1,t);else if(a<256&&he[a])e.result+=fe[a],e.position++;else if((i=120===(l=a)?2:117===l?4:85===l?8:0)>0){for(o=i,s=0;o>0;o--)(i=ce(a=e.input.charCodeAt(++e.position)))>=0?s=(s<<4)+i:ye(e,\"expected hexadecimal character\");e.result+=pe(s),e.position++}else ye(e,\"unknown escape sequence\");n=r=e.position}else se(a)?(we(e,n,r,!0),Oe(e,_e(e,!1,t)),n=r=e.position):e.position===e.lineStart&&je(e)?ye(e,\"unexpected end of the document within a double quoted scalar\"):(e.position++,r=e.position)}ye(e,\"unexpected end of the stream within a double quoted scalar\")}(e,f)?y=!0:!function(e){var t,n,r;if(42!==(r=e.input.charCodeAt(e.position)))return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ae(r)&&!le(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&ye(e,\"name of an alias node must contain at least one character\"),n=e.input.slice(t,e.position),W.call(e.anchorMap,n)||ye(e,'unidentified alias \"'+n+'\"'),e.result=e.anchorMap[n],_e(e,!0,-1),!0}(e)?function(e,t,n){var r,o,s,i,a,l,c,u,p=e.kind,h=e.result;if(ae(u=e.input.charCodeAt(e.position))||le(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(ae(r=e.input.charCodeAt(e.position+1))||n&&le(r)))return!1;for(e.kind=\"scalar\",e.result=\"\",o=s=e.position,i=!1;0!==u;){if(58===u){if(ae(r=e.input.charCodeAt(e.position+1))||n&&le(r))break}else if(35===u){if(ae(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&je(e)||n&&le(u))break;if(se(u)){if(a=e.line,l=e.lineStart,c=e.lineIndent,_e(e,!1,-1),e.lineIndent>=t){i=!0,u=e.input.charCodeAt(e.position);continue}e.position=s,e.line=a,e.lineStart=l,e.lineIndent=c;break}}i&&(we(e,o,s,!1),Oe(e,e.line-a),o=s=e.position,i=!1),ie(u)||(s=e.position+1),u=e.input.charCodeAt(++e.position)}return we(e,o,s,!1),!!e.result||(e.kind=p,e.result=h,!1)}(e,f,J===n)&&(y=!0,null===e.tag&&(e.tag=\"?\")):(y=!0,null===e.tag&&null===e.anchor||ye(e,\"alias node should not have any properties\")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(y=l&&ke(e,d))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if(\"?\"===e.tag){for(null!==e.result&&\"scalar\"!==e.kind&&ye(e,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+e.kind+'\"'),c=0,u=e.implicitTypes.length;c<u;c+=1)if((h=e.implicitTypes[c]).resolve(e.result)){e.result=h.construct(e.result),e.tag=h.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else if(\"!\"!==e.tag){if(W.call(e.typeMap[e.kind||\"fallback\"],e.tag))h=e.typeMap[e.kind||\"fallback\"][e.tag];else for(h=null,c=0,u=(p=e.typeMap.multi[e.kind||\"fallback\"]).length;c<u;c+=1)if(e.tag.slice(0,p[c].tag.length)===p[c].tag){h=p[c];break}h||ye(e,\"unknown tag !<\"+e.tag+\">\"),null!==e.result&&h.kind!==e.kind&&ye(e,\"unacceptable node kind for !<\"+e.tag+'> tag; it should be \"'+h.kind+'\", not \"'+e.kind+'\"'),h.resolve(e.result,e.tag)?(e.result=h.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ye(e,\"cannot resolve a node with !<\"+e.tag+\"> explicit tag\")}return null!==e.listener&&e.listener(\"close\",e),null!==e.tag||null!==e.anchor||y}function Ne(e){var t,n,r,o,s=e.position,i=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(o=e.input.charCodeAt(e.position))&&(_e(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(i=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!ae(o);)o=e.input.charCodeAt(++e.position);for(r=[],(n=e.input.slice(t,e.position)).length<1&&ye(e,\"directive name must not be less than one character in length\");0!==o;){for(;ie(o);)o=e.input.charCodeAt(++e.position);if(35===o){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&!se(o));break}if(se(o))break;for(t=e.position;0!==o&&!ae(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}0!==o&&Se(e),W.call(be,n)?be[n](e,n,r):ve(e,'unknown document directive \"'+n+'\"')}_e(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,_e(e,!0,-1)):i&&ye(e,\"directives end mark is expected\"),Pe(e,e.lineIndent-1,G,!1,!0),_e(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(s,e.position))&&ve(e,\"non-ASCII line breaks are interpreted as content\"),e.documents.push(e.result),e.position===e.lineStart&&je(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,_e(e,!0,-1)):e.position<e.length-1&&ye(e,\"end of the stream or a document separator is expected\")}function Ie(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+=\"\\n\"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new me(e,t),r=e.indexOf(\"\\0\");for(-1!==r&&(n.position=r,ye(n,\"null byte is not allowed in input\")),n.input+=\"\\0\";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)Ne(n);return n.documents}var Te={loadAll:function(e,t,n){null!==t&&\"object\"==typeof t&&void 0===n&&(n=t,t=null);var r=Ie(e,n);if(\"function\"!=typeof t)return r;for(var o=0,s=r.length;o<s;o+=1)t(r[o])},load:function(e,t){var n=Ie(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new a(\"expected a single document in the stream, but found more\")}}},Re=Object.prototype.toString,Me=Object.prototype.hasOwnProperty,De=65279,Fe=9,Le=10,Be=13,$e=32,qe=33,Ue=34,ze=35,Ve=37,We=38,Je=39,Ke=42,He=44,Ge=45,Ze=58,Ye=61,Xe=62,Qe=63,et=64,tt=91,nt=93,rt=96,ot=123,st=124,it=125,at={0:\"\\\\0\",7:\"\\\\a\",8:\"\\\\b\",9:\"\\\\t\",10:\"\\\\n\",11:\"\\\\v\",12:\"\\\\f\",13:\"\\\\r\",27:\"\\\\e\",34:'\\\\\"',92:\"\\\\\\\\\",133:\"\\\\N\",160:\"\\\\_\",8232:\"\\\\L\",8233:\"\\\\P\"},lt=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"],ct=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;function ut(e){var t,n,r;if(t=e.toString(16).toUpperCase(),e<=255)n=\"x\",r=2;else if(e<=65535)n=\"u\",r=4;else{if(!(e<=4294967295))throw new a(\"code point within a string may not be greater than 0xFFFFFFFF\");n=\"U\",r=8}return\"\\\\\"+n+o.repeat(\"0\",r-t.length)+t}var pt=1,ht=2;function ft(e){this.schema=e.schema||V,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=o.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=function(e,t){var n,r,o,s,i,a,l;if(null===t)return{};for(n={},o=0,s=(r=Object.keys(t)).length;o<s;o+=1)i=r[o],a=String(t[i]),\"!!\"===i.slice(0,2)&&(i=\"tag:yaml.org,2002:\"+i.slice(2)),(l=e.compiledTypeMap.fallback[i])&&Me.call(l.styleAliases,a)&&(a=l.styleAliases[a]),n[i]=a;return n}(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType='\"'===e.quotingType?ht:pt,this.forceQuotes=e.forceQuotes||!1,this.replacer=\"function\"==typeof e.replacer?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function dt(e,t){for(var n,r=o.repeat(\" \",t),s=0,i=-1,a=\"\",l=e.length;s<l;)-1===(i=e.indexOf(\"\\n\",s))?(n=e.slice(s),s=l):(n=e.slice(s,i+1),s=i+1),n.length&&\"\\n\"!==n&&(a+=r),a+=n;return a}function mt(e,t){return\"\\n\"+o.repeat(\" \",e.indent*t)}function gt(e){return e===$e||e===Fe}function yt(e){return 32<=e&&e<=126||161<=e&&e<=55295&&8232!==e&&8233!==e||57344<=e&&e<=65533&&e!==De||65536<=e&&e<=1114111}function vt(e){return yt(e)&&e!==De&&e!==Be&&e!==Le}function bt(e,t,n){var r=vt(e),o=r&&!gt(e);return(n?r:r&&e!==He&&e!==tt&&e!==nt&&e!==ot&&e!==it)&&e!==ze&&!(t===Ze&&!o)||vt(t)&&!gt(t)&&e===ze||t===Ze&&o}function wt(e,t){var n,r=e.charCodeAt(t);return r>=55296&&r<=56319&&t+1<e.length&&(n=e.charCodeAt(t+1))>=56320&&n<=57343?1024*(r-55296)+n-56320+65536:r}function Et(e){return/^\\n* /.test(e)}var xt=1,St=2,_t=3,jt=4,Ot=5;function kt(e,t,n,r,o,s,i,a){var l,c,u=0,p=null,h=!1,f=!1,d=-1!==r,m=-1,g=yt(c=wt(e,0))&&c!==De&&!gt(c)&&c!==Ge&&c!==Qe&&c!==Ze&&c!==He&&c!==tt&&c!==nt&&c!==ot&&c!==it&&c!==ze&&c!==We&&c!==Ke&&c!==qe&&c!==st&&c!==Ye&&c!==Xe&&c!==Je&&c!==Ue&&c!==Ve&&c!==et&&c!==rt&&function(e){return!gt(e)&&e!==Ze}(wt(e,e.length-1));if(t||i)for(l=0;l<e.length;u>=65536?l+=2:l++){if(!yt(u=wt(e,l)))return Ot;g=g&&bt(u,p,a),p=u}else{for(l=0;l<e.length;u>=65536?l+=2:l++){if((u=wt(e,l))===Le)h=!0,d&&(f=f||l-m-1>r&&\" \"!==e[m+1],m=l);else if(!yt(u))return Ot;g=g&&bt(u,p,a),p=u}f=f||d&&l-m-1>r&&\" \"!==e[m+1]}return h||f?n>9&&Et(e)?Ot:i?s===ht?Ot:St:f?jt:_t:!g||i||o(e)?s===ht?Ot:St:xt}function At(e,t,n,r,o){e.dump=function(){if(0===t.length)return e.quotingType===ht?'\"\"':\"''\";if(!e.noCompatMode&&(-1!==lt.indexOf(t)||ct.test(t)))return e.quotingType===ht?'\"'+t+'\"':\"'\"+t+\"'\";var s=e.indent*Math.max(1,n),i=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-s),l=r||e.flowLevel>-1&&n>=e.flowLevel;switch(kt(t,l,e.indent,i,(function(t){return function(e,t){var n,r;for(n=0,r=e.implicitTypes.length;n<r;n+=1)if(e.implicitTypes[n].resolve(t))return!0;return!1}(e,t)}),e.quotingType,e.forceQuotes&&!r,o)){case xt:return t;case St:return\"'\"+t.replace(/'/g,\"''\")+\"'\";case _t:return\"|\"+Ct(t,e.indent)+Pt(dt(t,s));case jt:return\">\"+Ct(t,e.indent)+Pt(dt(function(e,t){var n,r,o=/(\\n+)([^\\n]*)/g,s=(a=e.indexOf(\"\\n\"),a=-1!==a?a:e.length,o.lastIndex=a,Nt(e.slice(0,a),t)),i=\"\\n\"===e[0]||\" \"===e[0];var a;for(;r=o.exec(e);){var l=r[1],c=r[2];n=\" \"===c[0],s+=l+(i||n||\"\"===c?\"\":\"\\n\")+Nt(c,t),i=n}return s}(t,i),s));case Ot:return'\"'+function(e){for(var t,n=\"\",r=0,o=0;o<e.length;r>=65536?o+=2:o++)r=wt(e,o),!(t=at[r])&&yt(r)?(n+=e[o],r>=65536&&(n+=e[o+1])):n+=t||ut(r);return n}(t)+'\"';default:throw new a(\"impossible error: invalid scalar style\")}}()}function Ct(e,t){var n=Et(e)?String(t):\"\",r=\"\\n\"===e[e.length-1];return n+(r&&(\"\\n\"===e[e.length-2]||\"\\n\"===e)?\"+\":r?\"\":\"-\")+\"\\n\"}function Pt(e){return\"\\n\"===e[e.length-1]?e.slice(0,-1):e}function Nt(e,t){if(\"\"===e||\" \"===e[0])return e;for(var n,r,o=/ [^ ]/g,s=0,i=0,a=0,l=\"\";n=o.exec(e);)(a=n.index)-s>t&&(r=i>s?i:a,l+=\"\\n\"+e.slice(s,r),s=r+1),i=a;return l+=\"\\n\",e.length-s>t&&i>s?l+=e.slice(s,i)+\"\\n\"+e.slice(i+1):l+=e.slice(s),l.slice(1)}function It(e,t,n,r){var o,s,i,a=\"\",l=e.tag;for(o=0,s=n.length;o<s;o+=1)i=n[o],e.replacer&&(i=e.replacer.call(n,String(o),i)),(Rt(e,t+1,i,!0,!0,!1,!0)||void 0===i&&Rt(e,t+1,null,!0,!0,!1,!0))&&(r&&\"\"===a||(a+=mt(e,t)),e.dump&&Le===e.dump.charCodeAt(0)?a+=\"-\":a+=\"- \",a+=e.dump);e.tag=l,e.dump=a||\"[]\"}function Tt(e,t,n){var r,o,s,i,l,c;for(s=0,i=(o=n?e.explicitTypes:e.implicitTypes).length;s<i;s+=1)if(((l=o[s]).instanceOf||l.predicate)&&(!l.instanceOf||\"object\"==typeof t&&t instanceof l.instanceOf)&&(!l.predicate||l.predicate(t))){if(n?l.multi&&l.representName?e.tag=l.representName(t):e.tag=l.tag:e.tag=\"?\",l.represent){if(c=e.styleMap[l.tag]||l.defaultStyle,\"[object Function]\"===Re.call(l.represent))r=l.represent(t,c);else{if(!Me.call(l.represent,c))throw new a(\"!<\"+l.tag+'> tag resolver accepts not \"'+c+'\" style');r=l.represent[c](t,c)}e.dump=r}return!0}return!1}function Rt(e,t,n,r,o,s,i){e.tag=null,e.dump=n,Tt(e,n,!1)||Tt(e,n,!0);var l,c=Re.call(e.dump),u=r;r&&(r=e.flowLevel<0||e.flowLevel>t);var p,h,f=\"[object Object]\"===c||\"[object Array]\"===c;if(f&&(h=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&\"?\"!==e.tag||h||2!==e.indent&&t>0)&&(o=!1),h&&e.usedDuplicates[p])e.dump=\"*ref_\"+p;else{if(f&&h&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),\"[object Object]\"===c)r&&0!==Object.keys(e.dump).length?(!function(e,t,n,r){var o,s,i,l,c,u,p=\"\",h=e.tag,f=Object.keys(n);if(!0===e.sortKeys)f.sort();else if(\"function\"==typeof e.sortKeys)f.sort(e.sortKeys);else if(e.sortKeys)throw new a(\"sortKeys must be a boolean or a function\");for(o=0,s=f.length;o<s;o+=1)u=\"\",r&&\"\"===p||(u+=mt(e,t)),l=n[i=f[o]],e.replacer&&(l=e.replacer.call(n,i,l)),Rt(e,t+1,i,!0,!0,!0)&&((c=null!==e.tag&&\"?\"!==e.tag||e.dump&&e.dump.length>1024)&&(e.dump&&Le===e.dump.charCodeAt(0)?u+=\"?\":u+=\"? \"),u+=e.dump,c&&(u+=mt(e,t)),Rt(e,t+1,l,!0,c)&&(e.dump&&Le===e.dump.charCodeAt(0)?u+=\":\":u+=\": \",p+=u+=e.dump));e.tag=h,e.dump=p||\"{}\"}(e,t,e.dump,o),h&&(e.dump=\"&ref_\"+p+e.dump)):(!function(e,t,n){var r,o,s,i,a,l=\"\",c=e.tag,u=Object.keys(n);for(r=0,o=u.length;r<o;r+=1)a=\"\",\"\"!==l&&(a+=\", \"),e.condenseFlow&&(a+='\"'),i=n[s=u[r]],e.replacer&&(i=e.replacer.call(n,s,i)),Rt(e,t,s,!1,!1)&&(e.dump.length>1024&&(a+=\"? \"),a+=e.dump+(e.condenseFlow?'\"':\"\")+\":\"+(e.condenseFlow?\"\":\" \"),Rt(e,t,i,!1,!1)&&(l+=a+=e.dump));e.tag=c,e.dump=\"{\"+l+\"}\"}(e,t,e.dump),h&&(e.dump=\"&ref_\"+p+\" \"+e.dump));else if(\"[object Array]\"===c)r&&0!==e.dump.length?(e.noArrayIndent&&!i&&t>0?It(e,t-1,e.dump,o):It(e,t,e.dump,o),h&&(e.dump=\"&ref_\"+p+e.dump)):(!function(e,t,n){var r,o,s,i=\"\",a=e.tag;for(r=0,o=n.length;r<o;r+=1)s=n[r],e.replacer&&(s=e.replacer.call(n,String(r),s)),(Rt(e,t,s,!1,!1)||void 0===s&&Rt(e,t,null,!1,!1))&&(\"\"!==i&&(i+=\",\"+(e.condenseFlow?\"\":\" \")),i+=e.dump);e.tag=a,e.dump=\"[\"+i+\"]\"}(e,t,e.dump),h&&(e.dump=\"&ref_\"+p+\" \"+e.dump));else{if(\"[object String]\"!==c){if(\"[object Undefined]\"===c)return!1;if(e.skipInvalid)return!1;throw new a(\"unacceptable kind of an object to dump \"+c)}\"?\"!==e.tag&&At(e,e.dump,t,s,u)}null!==e.tag&&\"?\"!==e.tag&&(l=encodeURI(\"!\"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,\"%21\"),l=\"!\"===e.tag[0]?\"!\"+l:\"tag:yaml.org,2002:\"===l.slice(0,18)?\"!!\"+l.slice(18):\"!<\"+l+\">\",e.dump=l+\" \"+e.dump)}return!0}function Mt(e,t){var n,r,o=[],s=[];for(Dt(e,o,s),n=0,r=s.length;n<r;n+=1)t.duplicates.push(o[s[n]]);t.usedDuplicates=new Array(r)}function Dt(e,t,n){var r,o,s;if(null!==e&&\"object\"==typeof e)if(-1!==(o=t.indexOf(e)))-1===n.indexOf(o)&&n.push(o);else if(t.push(e),Array.isArray(e))for(o=0,s=e.length;o<s;o+=1)Dt(e[o],t,n);else for(o=0,s=(r=Object.keys(e)).length;o<s;o+=1)Dt(e[r[o]],t,n)}function Ft(e,t){return function(){throw new Error(\"Function yaml.\"+e+\" is removed in js-yaml 4. Use yaml.\"+t+\" instead, which is now safe by default.\")}}var Lt=f,Bt=g,$t=w,qt=C,Ut=P,zt=V,Vt=Te.load,Wt=Te.loadAll,Jt={dump:function(e,t){var n=new ft(t=t||{});n.noRefs||Mt(e,n);var r=e;return n.replacer&&(r=n.replacer.call({\"\":r},\"\",r)),Rt(n,0,r,!0,!0)?n.dump+\"\\n\":\"\"}}.dump,Kt=a,Ht={binary:D,float:A,map:b,null:E,pairs:q,set:z,timestamp:T,bool:x,int:j,merge:R,omap:B,seq:v,str:y},Gt=Ft(\"safeLoad\",\"load\"),Zt=Ft(\"safeLoadAll\",\"loadAll\"),Yt=Ft(\"safeDump\",\"dump\");const Xt={Type:Lt,Schema:Bt,FAILSAFE_SCHEMA:$t,JSON_SCHEMA:qt,CORE_SCHEMA:Ut,DEFAULT_SCHEMA:zt,load:Vt,loadAll:Wt,dump:Jt,YAMLException:Kt,types:Ht,safeLoad:Gt,safeLoadAll:Zt,safeDump:Yt}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};return(()=>{\"use strict\";n.d(r,{default:()=>wr});var e={};n.r(e),n.d(e,{Button:()=>tn,Col:()=>Qt,Collapse:()=>ln,Container:()=>Yt,Input:()=>rn,Link:()=>sn,Row:()=>en,Select:()=>on,TextArea:()=>nn});var t={};n.r(t),n.d(t,{JsonSchemaArrayItemFile:()=>or,JsonSchemaArrayItemText:()=>rr,JsonSchemaForm:()=>er,JsonSchema_array:()=>nr,JsonSchema_boolean:()=>sr,JsonSchema_object:()=>ar,JsonSchema_string:()=>tr});var o=n(57269),s=n.n(o),i=n(14418),a=n.n(i),l=n(28222),c=n.n(l),u=n(35627),p=n.n(u),h=n(27698),f=n.n(h),d=n(11189),m=n.n(d),g=n(76986),y=n.n(g),v=n(24278),b=n.n(v),w=n(58309),E=n.n(w),x=n(24282),S=n.n(x),_=n(97606),j=n.n(_),O=n(39022),k=n.n(O),A=n(67294),C=n(97779),P=n(43393),N=n.n(P),I=n(72739),T=n(7710),R=n(82492),M=n.n(R),D=n(34966),F=n(27504),L=n(90242);const B=e=>e;class ${constructor(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var n,r,o;f()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},t),this.getSystem=m()(e=this._getSystem).call(e,this),this.store=(n=B,r=(0,P.fromJS)(this.state),o=this.getSystem,function(e,t,n){let r=[(0,L._5)(n)];const o=F.Z.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||C.qC;return(0,C.MT)(e,t,o((0,C.md)(...r)))}(n,r,o)),this.buildSystem(!1),this.register(this.plugins)}getStore(){return this.store}register(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var n=q(e,this.getSystem(),this.pluginsOptions);z(this.system,n),t&&this.buildSystem();U.call(this.system,e,this.getSystem())&&this.buildSystem()}buildSystem(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,n=this.getStore().getState;this.boundSystem=y()({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getWrappedAndBoundSelectors(n,this.getSystem),this.getStateThunks(n),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}_getSystem(){return this.boundSystem}getRootInjects(){var e,t,n;return y()({getSystem:this.getSystem,getStore:m()(e=this.getStore).call(e,this),getComponents:m()(t=this.getComponents).call(t,this),getState:this.getStore().getState,getConfigs:m()(n=this._getConfigs).call(n,this),Im:N(),React:A},this.system.rootInjects||{})}_getConfigs(){return this.system.configs}getConfigs(){return{configs:this.system.configs}}setConfigs(e){this.system.configs=e}rebuildReducer(){var e;this.store.replaceReducer((e=this.system.statePlugins,function(e){var t;let n=S()(t=c()(e)).call(t,((t,n)=>(t[n]=function(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new P.Map,n=arguments.length>1?arguments[1]:void 0;if(!e)return t;let r=e[n.type];if(r){const e=V(r)(t,n);return null===e?t:e}return t}}(e[n]),t)),{});return c()(n).length?(0,I.U)(n):B}((0,L.Ay)(e,(e=>e.reducers)))))}getType(e){let t=e[0].toUpperCase()+b()(e).call(e,1);return(0,L.Q2)(this.system.statePlugins,((n,r)=>{let o=n[e];if(o)return{[r+t]:o}}))}getSelectors(){return this.getType(\"selectors\")}getActions(){let e=this.getType(\"actions\");return(0,L.Ay)(e,(e=>(0,L.Q2)(e,((e,t)=>{if((0,L.LQ)(e))return{[t]:e}}))))}getWrappedAndBoundActions(e){var t=this;let n=this.getBoundActions(e);return(0,L.Ay)(n,((e,n)=>{let r=this.system.statePlugins[b()(n).call(n,0,-7)].wrapActions;return r?(0,L.Ay)(e,((e,n)=>{let o=r[n];return o?(E()(o)||(o=[o]),S()(o).call(o,((e,n)=>{let r=function(){return n(e,t.getSystem())(...arguments)};if(!(0,L.LQ)(r))throw new TypeError(\"wrapActions needs to return a function that returns a new function (ie the wrapped action)\");return V(r)}),e||Function.prototype)):e})):e}))}getWrappedAndBoundSelectors(e,t){var n=this;let r=this.getBoundSelectors(e,t);return(0,L.Ay)(r,((t,r)=>{let o=[b()(r).call(r,0,-9)],s=this.system.statePlugins[o].wrapSelectors;return s?(0,L.Ay)(t,((t,r)=>{let i=s[r];return i?(E()(i)||(i=[i]),S()(i).call(i,((t,r)=>{let s=function(){for(var s=arguments.length,i=new Array(s),a=0;a<s;a++)i[a]=arguments[a];return r(t,n.getSystem())(e().getIn(o),...i)};if(!(0,L.LQ)(s))throw new TypeError(\"wrapSelector needs to return a function that returns a new function (ie the wrapped action)\");return s}),t||Function.prototype)):t})):t}))}getStates(e){var t;return S()(t=c()(this.system.statePlugins)).call(t,((t,n)=>(t[n]=e.get(n),t)),{})}getStateThunks(e){var t;return S()(t=c()(this.system.statePlugins)).call(t,((t,n)=>(t[n]=()=>e().get(n),t)),{})}getFn(){return{fn:this.system.fn}}getComponents(e){const t=this.system.components[e];return E()(t)?S()(t).call(t,((e,t)=>t(e,this.getSystem()))):void 0!==e?this.system.components[e]:this.system.components}getBoundSelectors(e,t){return(0,L.Ay)(this.getSelectors(),((n,r)=>{let o=[b()(r).call(r,0,-9)];return(0,L.Ay)(n,(n=>function(){for(var r=arguments.length,s=new Array(r),i=0;i<r;i++)s[i]=arguments[i];let a=V(n).apply(null,[e().getIn(o),...s]);return\"function\"==typeof a&&(a=V(a)(t())),a}))}))}getBoundActions(e){e=e||this.getStore().dispatch;const t=this.getActions(),n=e=>\"function\"!=typeof e?(0,L.Ay)(e,(e=>n(e))):function(){var t=null;try{t=e(...arguments)}catch(e){t={type:D.NEW_THROWN_ERR,error:!0,payload:(0,T.serializeError)(e)}}finally{return t}};return(0,L.Ay)(t,(t=>(0,C.DE)(n(t),e)))}getMapStateToProps(){return()=>y()({},this.getSystem())}getMapDispatchToProps(e){return t=>f()({},this.getWrappedAndBoundActions(t),this.getFn(),e)}}function q(e,t,n){if((0,L.Kn)(e)&&!(0,L.kJ)(e))return M()({},e);if((0,L.Wl)(e))return q(e(t),t,n);if((0,L.kJ)(e)){var r;const o=\"chain\"===n.pluginLoadType?t.getComponents():{};return S()(r=j()(e).call(e,(e=>q(e,t,n)))).call(r,z,o)}return{}}function U(e,t){let{hasLoaded:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n;return(0,L.Kn)(e)&&!(0,L.kJ)(e)&&\"function\"==typeof e.afterLoad&&(r=!0,V(e.afterLoad).call(this,t)),(0,L.Wl)(e)?U.call(this,e(t),t,{hasLoaded:r}):(0,L.kJ)(e)?j()(e).call(e,(e=>U.call(this,e,t,{hasLoaded:r}))):r}function z(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,L.Kn)(e))return{};if(!(0,L.Kn)(t))return e;t.wrapComponents&&((0,L.Ay)(t.wrapComponents,((n,r)=>{const o=e.components&&e.components[r];o&&E()(o)?(e.components[r]=k()(o).call(o,[n]),delete t.wrapComponents[r]):o&&(e.components[r]=[o,n],delete t.wrapComponents[r])})),c()(t.wrapComponents).length||delete t.wrapComponents);const{statePlugins:n}=e;if((0,L.Kn)(n))for(let e in n){const s=n[e];if(!(0,L.Kn)(s))continue;const{wrapActions:i,wrapSelectors:a}=s;if((0,L.Kn)(i))for(let n in i){let o=i[n];var r;if(E()(o)||(o=[o],i[n]=o),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapActions&&t.statePlugins[e].wrapActions[n])t.statePlugins[e].wrapActions[n]=k()(r=i[n]).call(r,t.statePlugins[e].wrapActions[n])}if((0,L.Kn)(a))for(let n in a){let r=a[n];var o;if(E()(r)||(r=[r],a[n]=r),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapSelectors&&t.statePlugins[e].wrapSelectors[n])t.statePlugins[e].wrapSelectors[n]=k()(o=a[n]).call(o,t.statePlugins[e].wrapSelectors[n])}}return f()(e,t)}function V(e){let{logErrors:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"function\"!=typeof e?e:function(){try{for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return e.call(this,...r)}catch(e){return t&&console.error(e),null}}}var W=n(77793),J=n(26821),K=n(37038),H=n(73420),G=n(8883),Z=n(86575),Y=n(9150),X=n(79934),Q=n(93705),ee=n(98525),te=n(48011),ne=n(46709),re=n(34980),oe=n(49978),se=n(28560),ie=n(27621),ae=n(61125),le=n.n(ae),ce=n(11882),ue=n.n(ce),pe=(n(23930),n(32454));class he extends A.PureComponent{constructor(e,t){super(e,t),le()(this,\"toggleShown\",(()=>{let{layoutActions:e,tag:t,operationId:n,isShown:r}=this.props;const o=this.getResolvedSubtree();r||void 0!==o||this.requestResolvedSubtree(),e.show([\"operations\",t,n],!r)})),le()(this,\"onCancelClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),le()(this,\"onTryoutClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),le()(this,\"onResetClick\",(e=>{const t=this.props.oas3Selectors.selectDefaultRequestBodyValue(...e);this.props.oas3Actions.setRequestBodyValue({value:t,pathMethod:e})})),le()(this,\"onExecute\",(()=>{this.setState({executeInProgress:!0})})),le()(this,\"getResolvedSubtree\",(()=>{const{specSelectors:e,path:t,method:n,specPath:r}=this.props;return r?e.specResolvedSubtree(r.toJS()):e.specResolvedSubtree([\"paths\",t,n])})),le()(this,\"requestResolvedSubtree\",(()=>{const{specActions:e,path:t,method:n,specPath:r}=this.props;return r?e.requestResolvedSubtree(r.toJS()):e.requestResolvedSubtree([\"paths\",t,n])}));const{tryItOutEnabled:n}=e.getConfigs();this.state={tryItOutEnabled:!0===n||\"true\"===n,executeInProgress:!1}}mapStateToProps(e,t){const{op:n,layoutSelectors:r,getConfigs:o}=t,{docExpansion:s,deepLinking:i,displayOperationId:a,displayRequestDuration:l,supportedSubmitMethods:c}=o(),u=r.showSummary(),p=n.getIn([\"operation\",\"__originalOperationId\"])||n.getIn([\"operation\",\"operationId\"])||(0,pe.Z)(n.get(\"operation\"),t.path,t.method)||n.get(\"id\"),h=[\"operations\",t.tag,p],f=i&&\"false\"!==i,d=ue()(c).call(c,t.method)>=0&&(void 0===t.allowTryItOut?t.specSelectors.allowTryItOutFor(t.path,t.method):t.allowTryItOut),m=n.getIn([\"operation\",\"security\"])||t.specSelectors.security();return{operationId:p,isDeepLinkingEnabled:f,showSummary:u,displayOperationId:a,displayRequestDuration:l,allowTryItOut:d,security:m,isAuthorized:t.authSelectors.isAuthorized(m),isShown:r.isShown(h,\"full\"===s),jumpToKey:`paths.${t.path}.${t.method}`,response:t.specSelectors.responseFor(t.path,t.method),request:t.specSelectors.requestFor(t.path,t.method)}}componentDidMount(){const{isShown:e}=this.props,t=this.getResolvedSubtree();e&&void 0===t&&this.requestResolvedSubtree()}UNSAFE_componentWillReceiveProps(e){const{response:t,isShown:n}=e,r=this.getResolvedSubtree();t!==this.props.response&&this.setState({executeInProgress:!1}),n&&void 0===r&&this.requestResolvedSubtree()}render(){let{op:e,tag:t,path:n,method:r,security:o,isAuthorized:s,operationId:i,showSummary:a,isShown:l,jumpToKey:c,allowTryItOut:u,response:p,request:h,displayOperationId:f,displayRequestDuration:d,isDeepLinkingEnabled:m,specPath:g,specSelectors:y,specActions:v,getComponent:b,getConfigs:w,layoutSelectors:E,layoutActions:x,authActions:S,authSelectors:_,oas3Actions:j,oas3Selectors:O,fn:k}=this.props;const C=b(\"operation\"),N=this.getResolvedSubtree()||(0,P.Map)(),I=(0,P.fromJS)({op:N,tag:t,path:n,summary:e.getIn([\"operation\",\"summary\"])||\"\",deprecated:N.get(\"deprecated\")||e.getIn([\"operation\",\"deprecated\"])||!1,method:r,security:o,isAuthorized:s,operationId:i,originalOperationId:N.getIn([\"operation\",\"__originalOperationId\"]),showSummary:a,isShown:l,jumpToKey:c,allowTryItOut:u,request:h,displayOperationId:f,displayRequestDuration:d,isDeepLinkingEnabled:m,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return A.createElement(C,{operation:I,response:p,request:h,isShown:l,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onResetClick:this.onResetClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:g,specActions:v,specSelectors:y,oas3Actions:j,oas3Selectors:O,layoutActions:x,layoutSelectors:E,authActions:S,authSelectors:_,getComponent:b,getConfigs:w,fn:k})}}le()(he,\"defaultProps\",{showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1});class fe extends A.Component{getLayout(){let{getComponent:e,layoutSelectors:t}=this.props;const n=t.current(),r=e(n,!0);return r||(()=>A.createElement(\"h1\",null,' No layout defined for \"',n,'\" '))}render(){const e=this.getLayout();return A.createElement(e,null)}}fe.defaultProps={};class de extends A.Component{constructor(){super(...arguments),le()(this,\"close\",(()=>{let{authActions:e}=this.props;e.showDefinitions(!1)}))}render(){var e;let{authSelectors:t,authActions:n,getComponent:r,errSelectors:o,specSelectors:s,fn:{AST:i={}}}=this.props,a=t.shownDefinitions();const l=r(\"auths\");return A.createElement(\"div\",{className:\"dialog-ux\"},A.createElement(\"div\",{className:\"backdrop-ux\"}),A.createElement(\"div\",{className:\"modal-ux\"},A.createElement(\"div\",{className:\"modal-dialog-ux\"},A.createElement(\"div\",{className:\"modal-ux-inner\"},A.createElement(\"div\",{className:\"modal-ux-header\"},A.createElement(\"h3\",null,\"Available authorizations\"),A.createElement(\"button\",{type:\"button\",className:\"close-modal\",onClick:this.close},A.createElement(\"svg\",{width:\"20\",height:\"20\"},A.createElement(\"use\",{href:\"#close\",xlinkHref:\"#close\"})))),A.createElement(\"div\",{className:\"modal-ux-content\"},j()(e=a.valueSeq()).call(e,((e,a)=>A.createElement(l,{key:a,AST:i,definitions:e,getComponent:r,errSelectors:o,authSelectors:t,authActions:n,specSelectors:s}))))))))}}class me extends A.Component{render(){let{isAuthorized:e,showPopup:t,onClick:n,getComponent:r}=this.props;const o=r(\"authorizationPopup\",!0);return A.createElement(\"div\",{className:\"auth-wrapper\"},A.createElement(\"button\",{className:e?\"btn authorize locked\":\"btn authorize unlocked\",onClick:n},A.createElement(\"span\",null,\"Authorize\"),A.createElement(\"svg\",{width:\"20\",height:\"20\"},A.createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"}))),t&&A.createElement(o,null))}}class ge extends A.Component{render(){const{authActions:e,authSelectors:t,specSelectors:n,getComponent:r}=this.props,o=n.securityDefinitions(),s=t.definitionsToAuthorize(),i=r(\"authorizeBtn\");return o?A.createElement(i,{onClick:()=>e.showDefinitions(s),isAuthorized:!!t.authorized().size,showPopup:!!t.shownDefinitions(),getComponent:r}):null}}class ye extends A.Component{constructor(){super(...arguments),le()(this,\"onClick\",(e=>{e.stopPropagation();let{onClick:t}=this.props;t&&t()}))}render(){let{isAuthorized:e}=this.props;return A.createElement(\"button\",{className:e?\"authorization__btn locked\":\"authorization__btn unlocked\",\"aria-label\":e?\"authorization button locked\":\"authorization button unlocked\",onClick:this.onClick},A.createElement(\"svg\",{width:\"20\",height:\"20\"},A.createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"})))}}class ve extends A.Component{constructor(e,t){super(e,t),le()(this,\"onAuthChange\",(e=>{let{name:t}=e;this.setState({[t]:e})})),le()(this,\"submitAuth\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)})),le()(this,\"logoutClick\",(e=>{e.preventDefault();let{authActions:t,definitions:n}=this.props,r=j()(n).call(n,((e,t)=>t)).toArray();this.setState(S()(r).call(r,((e,t)=>(e[t]=\"\",e)),{})),t.logoutWithPersistOption(r)})),le()(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),this.state={}}render(){var e;let{definitions:t,getComponent:n,authSelectors:r,errSelectors:o}=this.props;const s=n(\"AuthItem\"),i=n(\"oauth2\",!0),l=n(\"Button\");let c=r.authorized(),u=a()(t).call(t,((e,t)=>!!c.get(t))),p=a()(t).call(t,(e=>\"oauth2\"!==e.get(\"type\"))),h=a()(t).call(t,(e=>\"oauth2\"===e.get(\"type\")));return A.createElement(\"div\",{className:\"auth-container\"},!!p.size&&A.createElement(\"form\",{onSubmit:this.submitAuth},j()(p).call(p,((e,t)=>A.createElement(s,{key:t,schema:e,name:t,getComponent:n,onAuthChange:this.onAuthChange,authorized:c,errSelectors:o}))).toArray(),A.createElement(\"div\",{className:\"auth-btn-wrapper\"},p.size===u.size?A.createElement(l,{className:\"btn modal-btn auth\",onClick:this.logoutClick},\"Logout\"):A.createElement(l,{type:\"submit\",className:\"btn modal-btn auth authorize\"},\"Authorize\"),A.createElement(l,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\"))),h&&h.size?A.createElement(\"div\",null,A.createElement(\"div\",{className:\"scope-def\"},A.createElement(\"p\",null,\"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.\"),A.createElement(\"p\",null,\"API requires the following scopes. Select which ones you want to grant to Swagger UI.\")),j()(e=a()(t).call(t,(e=>\"oauth2\"===e.get(\"type\")))).call(e,((e,t)=>A.createElement(\"div\",{key:t},A.createElement(i,{authorized:c,schema:e,name:t})))).toArray()):null)}}class be extends A.Component{render(){let{schema:e,name:t,getComponent:n,onAuthChange:r,authorized:o,errSelectors:s}=this.props;const i=n(\"apiKeyAuth\"),a=n(\"basicAuth\");let l;const c=e.get(\"type\");switch(c){case\"apiKey\":l=A.createElement(i,{key:t,schema:e,name:t,errSelectors:s,authorized:o,getComponent:n,onChange:r});break;case\"basic\":l=A.createElement(a,{key:t,schema:e,name:t,errSelectors:s,authorized:o,getComponent:n,onChange:r});break;default:l=A.createElement(\"div\",{key:t},\"Unknown security definition type \",c)}return A.createElement(\"div\",{key:`${t}-jump`},l)}}class we extends A.Component{render(){let{error:e}=this.props,t=e.get(\"level\"),n=e.get(\"message\"),r=e.get(\"source\");return A.createElement(\"div\",{className:\"errors\"},A.createElement(\"b\",null,r,\" \",t),A.createElement(\"span\",null,n))}}class Ee extends A.Component{constructor(e,t){super(e,t),le()(this,\"onChange\",(e=>{let{onChange:t}=this.props,n=e.target.value,r=y()({},this.state,{value:n});this.setState(r),t(r)}));let{name:n,schema:r}=this.props,o=this.getValue();this.state={name:n,schema:r,value:o}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e,t;let{schema:n,getComponent:r,errSelectors:o,name:s}=this.props;const i=r(\"Input\"),l=r(\"Row\"),c=r(\"Col\"),u=r(\"authError\"),p=r(\"Markdown\",!0),h=r(\"JumpToPath\",!0);let f=this.getValue(),d=a()(e=o.allErrors()).call(e,(e=>e.get(\"authId\")===s));return A.createElement(\"div\",null,A.createElement(\"h4\",null,A.createElement(\"code\",null,s||n.get(\"name\")),\" (apiKey)\",A.createElement(h,{path:[\"securityDefinitions\",s]})),f&&A.createElement(\"h6\",null,\"Authorized\"),A.createElement(l,null,A.createElement(p,{source:n.get(\"description\")})),A.createElement(l,null,A.createElement(\"p\",null,\"Name: \",A.createElement(\"code\",null,n.get(\"name\")))),A.createElement(l,null,A.createElement(\"p\",null,\"In: \",A.createElement(\"code\",null,n.get(\"in\")))),A.createElement(l,null,A.createElement(\"label\",null,\"Value:\"),f?A.createElement(\"code\",null,\" ****** \"):A.createElement(c,null,A.createElement(i,{type:\"text\",onChange:this.onChange,autoFocus:!0}))),j()(t=d.valueSeq()).call(t,((e,t)=>A.createElement(u,{error:e,key:t}))))}}class xe extends A.Component{constructor(e,t){super(e,t),le()(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:n,name:r}=e.target,o=this.state.value;o[r]=n,this.setState({value:o}),t(this.state)}));let{schema:n,name:r}=this.props,o=this.getValue().username;this.state={name:r,schema:n,value:o?{username:o}:{}}}getValue(){let{authorized:e,name:t}=this.props;return e&&e.getIn([t,\"value\"])||{}}render(){var e,t;let{schema:n,getComponent:r,name:o,errSelectors:s}=this.props;const i=r(\"Input\"),l=r(\"Row\"),c=r(\"Col\"),u=r(\"authError\"),p=r(\"JumpToPath\",!0),h=r(\"Markdown\",!0);let f=this.getValue().username,d=a()(e=s.allErrors()).call(e,(e=>e.get(\"authId\")===o));return A.createElement(\"div\",null,A.createElement(\"h4\",null,\"Basic authorization\",A.createElement(p,{path:[\"securityDefinitions\",o]})),f&&A.createElement(\"h6\",null,\"Authorized\"),A.createElement(l,null,A.createElement(h,{source:n.get(\"description\")})),A.createElement(l,null,A.createElement(\"label\",null,\"Username:\"),f?A.createElement(\"code\",null,\" \",f,\" \"):A.createElement(c,null,A.createElement(i,{type:\"text\",required:\"required\",name:\"username\",onChange:this.onChange,autoFocus:!0}))),A.createElement(l,null,A.createElement(\"label\",null,\"Password:\"),f?A.createElement(\"code\",null,\" ****** \"):A.createElement(c,null,A.createElement(i,{autoComplete:\"new-password\",name:\"password\",type:\"password\",onChange:this.onChange}))),j()(t=d.valueSeq()).call(t,((e,t)=>A.createElement(u,{error:e,key:t}))))}}function Se(e){const{example:t,showValue:n,getComponent:r,getConfigs:o}=e,s=r(\"Markdown\",!0),i=r(\"highlightCode\");return t?A.createElement(\"div\",{className:\"example\"},t.get(\"description\")?A.createElement(\"section\",{className:\"example__section\"},A.createElement(\"div\",{className:\"example__section-header\"},\"Example Description\"),A.createElement(\"p\",null,A.createElement(s,{source:t.get(\"description\")}))):null,n&&t.has(\"value\")?A.createElement(\"section\",{className:\"example__section\"},A.createElement(\"div\",{className:\"example__section-header\"},\"Example Value\"),A.createElement(i,{getConfigs:o,value:(0,L.Pz)(t.get(\"value\"))})):null):null}var _e=n(18492),je=n.n(_e);class Oe extends A.PureComponent{constructor(){var e;super(...arguments),e=this,le()(this,\"_onSelect\",(function(t){let{isSyntheticChange:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"function\"==typeof e.props.onSelect&&e.props.onSelect(t,{isSyntheticChange:n})})),le()(this,\"_onDomSelect\",(e=>{if(\"function\"==typeof this.props.onSelect){const t=e.target.selectedOptions[0].getAttribute(\"value\");this._onSelect(t,{isSyntheticChange:!1})}})),le()(this,\"getCurrentExample\",(()=>{const{examples:e,currentExampleKey:t}=this.props,n=e.get(t),r=e.keySeq().first(),o=e.get(r);return n||o||je()({})}))}componentDidMount(){const{onSelect:e,examples:t}=this.props;if(\"function\"==typeof e){const e=t.first(),n=t.keyOf(e);this._onSelect(n,{isSyntheticChange:!0})}}UNSAFE_componentWillReceiveProps(e){const{currentExampleKey:t,examples:n}=e;if(n!==this.props.examples&&!n.has(t)){const e=n.first(),t=n.keyOf(e);this._onSelect(t,{isSyntheticChange:!0})}}render(){const{examples:e,currentExampleKey:t,isValueModified:n,isModifiedValueAvailable:r,showLabels:o}=this.props;return A.createElement(\"div\",{className:\"examples-select\"},o?A.createElement(\"span\",{className:\"examples-select__section-label\"},\"Examples: \"):null,A.createElement(\"select\",{className:\"examples-select-element\",onChange:this._onDomSelect,value:r&&n?\"__MODIFIED__VALUE__\":t||\"\"},r?A.createElement(\"option\",{value:\"__MODIFIED__VALUE__\"},\"[Modified value]\"):null,j()(e).call(e,((e,t)=>A.createElement(\"option\",{key:t,value:t},e.get(\"summary\")||t))).valueSeq()))}}le()(Oe,\"defaultProps\",{examples:N().Map({}),onSelect:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"DEBUG: ExamplesSelect was not given an onSelect callback\",...t)},currentExampleKey:null,showLabels:!0});const ke=e=>P.List.isList(e)?e:(0,L.Pz)(e);class Ae extends A.PureComponent{constructor(e){var t;super(e),t=this,le()(this,\"_getStateForCurrentNamespace\",(()=>{const{currentNamespace:e}=this.props;return(this.state[e]||(0,P.Map)()).toObject()})),le()(this,\"_setStateForCurrentNamespace\",(e=>{const{currentNamespace:t}=this.props;return this._setStateForNamespace(t,e)})),le()(this,\"_setStateForNamespace\",((e,t)=>{const n=(this.state[e]||(0,P.Map)()).mergeDeep(t);return this.setState({[e]:n})})),le()(this,\"_isCurrentUserInputSameAsExampleValue\",(()=>{const{currentUserInputValue:e}=this.props;return this._getCurrentExampleValue()===e})),le()(this,\"_getValueForExample\",((e,t)=>{const{examples:n}=t||this.props;return ke((n||(0,P.Map)({})).getIn([e,\"value\"]))})),le()(this,\"_getCurrentExampleValue\",(e=>{const{currentKey:t}=e||this.props;return this._getValueForExample(t,e||this.props)})),le()(this,\"_onExamplesSelect\",(function(e){let{isSyntheticChange:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{onSelect:r,updateValue:o,currentUserInputValue:s,userHasEditedBody:i}=t.props,{lastUserEditedValue:a}=t._getStateForCurrentNamespace(),l=t._getValueForExample(e);if(\"__MODIFIED__VALUE__\"===e)return o(ke(a)),t._setStateForCurrentNamespace({isModifiedValueSelected:!0});if(\"function\"==typeof r){for(var c=arguments.length,u=new Array(c>2?c-2:0),p=2;p<c;p++)u[p-2]=arguments[p];r(e,{isSyntheticChange:n},...u)}t._setStateForCurrentNamespace({lastDownstreamValue:l,isModifiedValueSelected:n&&i||!!s&&s!==l}),n||\"function\"==typeof o&&o(ke(l))}));const n=this._getCurrentExampleValue();this.state={[e.currentNamespace]:(0,P.Map)({lastUserEditedValue:this.props.currentUserInputValue,lastDownstreamValue:n,isModifiedValueSelected:this.props.userHasEditedBody||this.props.currentUserInputValue!==n})}}componentWillUnmount(){this.props.setRetainRequestBodyValueFlag(!1)}UNSAFE_componentWillReceiveProps(e){const{currentUserInputValue:t,examples:n,onSelect:r,userHasEditedBody:o}=e,{lastUserEditedValue:s,lastDownstreamValue:i}=this._getStateForCurrentNamespace(),l=this._getValueForExample(e.currentKey,e),c=a()(n).call(n,(e=>e.get(\"value\")===t||(0,L.Pz)(e.get(\"value\"))===t));if(c.size){let t;t=c.has(e.currentKey)?e.currentKey:c.keySeq().first(),r(t,{isSyntheticChange:!0})}else t!==this.props.currentUserInputValue&&t!==s&&t!==i&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(e.currentNamespace,{lastUserEditedValue:e.currentUserInputValue,isModifiedValueSelected:o||t!==l}))}render(){const{currentUserInputValue:e,examples:t,currentKey:n,getComponent:r,userHasEditedBody:o}=this.props,{lastDownstreamValue:s,lastUserEditedValue:i,isModifiedValueSelected:a}=this._getStateForCurrentNamespace(),l=r(\"ExamplesSelect\");return A.createElement(l,{examples:t,currentExampleKey:n,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!i&&i!==s,isValueModified:void 0!==e&&a&&e!==this._getCurrentExampleValue()||o})}}le()(Ae,\"defaultProps\",{userHasEditedBody:!1,examples:(0,P.Map)({}),currentNamespace:\"__DEFAULT__NAMESPACE__\",setRetainRequestBodyValueFlag:()=>{},onSelect:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"ExamplesSelectValueRetainer: no `onSelect` function was provided\",...t)},updateValue:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"ExamplesSelectValueRetainer: no `updateValue` function was provided\",...t)}});var Ce=n(25110),Pe=n.n(Ce),Ne=n(8712),Ie=n.n(Ne),Te=n(58118),Re=n.n(Te),Me=n(84564),De=n.n(Me);class Fe extends A.Component{constructor(e,t){super(e,t),le()(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),le()(this,\"authorize\",(()=>{let{authActions:e,errActions:t,getConfigs:n,authSelectors:r,oas3Selectors:o}=this.props,s=n(),i=r.getConfigs();t.clear({authId:name,type:\"auth\",source:\"auth\"}),function(e){let{auth:t,authActions:n,errActions:r,configs:o,authConfigs:s={},currentServer:i}=e,{schema:a,scopes:l,name:c,clientId:u}=t,p=a.get(\"flow\"),h=[];switch(p){case\"password\":return void n.authorizePassword(t);case\"application\":case\"clientCredentials\":case\"client_credentials\":return void n.authorizeApplication(t);case\"accessCode\":case\"authorizationCode\":case\"authorization_code\":h.push(\"response_type=code\");break;case\"implicit\":h.push(\"response_type=token\")}\"string\"==typeof u&&h.push(\"client_id=\"+encodeURIComponent(u));let f=o.oauth2RedirectUrl;if(void 0===f)return void r.newAuthErr({authId:c,source:\"validation\",level:\"error\",message:\"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed.\"});h.push(\"redirect_uri=\"+encodeURIComponent(f));let d=[];if(E()(l)?d=l:N().List.isList(l)&&(d=l.toArray()),d.length>0){let e=s.scopeSeparator||\" \";h.push(\"scope=\"+encodeURIComponent(d.join(e)))}let m=(0,L.r3)(new Date);if(h.push(\"state=\"+encodeURIComponent(m)),void 0!==s.realm&&h.push(\"realm=\"+encodeURIComponent(s.realm)),(\"authorizationCode\"===p||\"authorization_code\"===p||\"accessCode\"===p)&&s.usePkceWithAuthorizationCodeGrant){const e=(0,L.Uj)(),n=(0,L.Xb)(e);h.push(\"code_challenge=\"+n),h.push(\"code_challenge_method=S256\"),t.codeVerifier=e}let{additionalQueryStringParams:g}=s;for(let e in g){var y;void 0!==g[e]&&h.push(j()(y=[e,g[e]]).call(y,encodeURIComponent).join(\"=\"))}const v=a.get(\"authorizationUrl\");let b;b=i?De()((0,L.Nm)(v),i,!0).toString():(0,L.Nm)(v);let w,x=[b,h.join(\"&\")].join(-1===ue()(v).call(v,\"?\")?\"?\":\"&\");w=\"implicit\"===p?n.preAuthorizeImplicit:s.useBasicAuthenticationWithAccessCodeGrant?n.authorizeAccessCodeWithBasicAuthentication:n.authorizeAccessCodeWithFormParams,n.authPopup(x,{auth:t,state:m,redirectUrl:f,callback:w,errCb:r.newAuthErr})}({auth:this.state,currentServer:o.serverEffectiveValue(o.selectedServer()),authActions:e,errActions:t,configs:s,authConfigs:i})})),le()(this,\"onScopeChange\",(e=>{var t,n;let{target:r}=e,{checked:o}=r,s=r.dataset.value;if(o&&-1===ue()(t=this.state.scopes).call(t,s)){var i;let e=k()(i=this.state.scopes).call(i,[s]);this.setState({scopes:e})}else if(!o&&ue()(n=this.state.scopes).call(n,s)>-1){var l;this.setState({scopes:a()(l=this.state.scopes).call(l,(e=>e!==s))})}})),le()(this,\"onInputChange\",(e=>{let{target:{dataset:{name:t},value:n}}=e,r={[t]:n};this.setState(r)})),le()(this,\"selectScopes\",(e=>{var t;e.target.dataset.all?this.setState({scopes:Pe()(Ie()(t=this.props.schema.get(\"allowedScopes\")||this.props.schema.get(\"scopes\")).call(t))}):this.setState({scopes:[]})})),le()(this,\"logout\",(e=>{e.preventDefault();let{authActions:t,errActions:n,name:r}=this.props;n.clear({authId:r,type:\"auth\",source:\"auth\"}),t.logoutWithPersistOption([r])}));let{name:n,schema:r,authorized:o,authSelectors:s}=this.props,i=o&&o.get(n),l=s.getConfigs()||{},c=i&&i.get(\"username\")||\"\",u=i&&i.get(\"clientId\")||l.clientId||\"\",p=i&&i.get(\"clientSecret\")||l.clientSecret||\"\",h=i&&i.get(\"passwordType\")||\"basic\",f=i&&i.get(\"scopes\")||l.scopes||[];\"string\"==typeof f&&(f=f.split(l.scopeSeparator||\" \")),this.state={appName:l.appName,name:n,schema:r,scopes:f,clientId:u,clientSecret:p,username:c,password:\"\",passwordType:h}}render(){var e,t;let{schema:n,getComponent:r,authSelectors:o,errSelectors:s,name:i,specSelectors:l}=this.props;const c=r(\"Input\"),u=r(\"Row\"),p=r(\"Col\"),h=r(\"Button\"),f=r(\"authError\"),d=r(\"JumpToPath\",!0),m=r(\"Markdown\",!0),g=r(\"InitializedInput\"),{isOAS3:y}=l;let v=y()?n.get(\"openIdConnectUrl\"):null;const b=\"implicit\",w=\"password\",E=y()?v?\"authorization_code\":\"authorizationCode\":\"accessCode\",x=y()?v?\"client_credentials\":\"clientCredentials\":\"application\";let S=!!(o.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,_=n.get(\"flow\"),O=_===E&&S?_+\" with PKCE\":_,k=n.get(\"allowedScopes\")||n.get(\"scopes\"),C=!!o.authorized().get(i),P=a()(e=s.allErrors()).call(e,(e=>e.get(\"authId\")===i)),N=!a()(P).call(P,(e=>\"validation\"===e.get(\"source\"))).size,I=n.get(\"description\");return A.createElement(\"div\",null,A.createElement(\"h4\",null,i,\" (OAuth2, \",O,\") \",A.createElement(d,{path:[\"securityDefinitions\",i]})),this.state.appName?A.createElement(\"h5\",null,\"Application: \",this.state.appName,\" \"):null,I&&A.createElement(m,{source:n.get(\"description\")}),C&&A.createElement(\"h6\",null,\"Authorized\"),v&&A.createElement(\"p\",null,\"OpenID Connect URL: \",A.createElement(\"code\",null,v)),(_===b||_===E)&&A.createElement(\"p\",null,\"Authorization URL: \",A.createElement(\"code\",null,n.get(\"authorizationUrl\"))),(_===w||_===E||_===x)&&A.createElement(\"p\",null,\"Token URL:\",A.createElement(\"code\",null,\" \",n.get(\"tokenUrl\"))),A.createElement(\"p\",{className:\"flow\"},\"Flow: \",A.createElement(\"code\",null,O)),_!==w?null:A.createElement(u,null,A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"oauth_username\"},\"username:\"),C?A.createElement(\"code\",null,\" \",this.state.username,\" \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(\"input\",{id:\"oauth_username\",type:\"text\",\"data-name\":\"username\",onChange:this.onInputChange,autoFocus:!0}))),A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"oauth_password\"},\"password:\"),C?A.createElement(\"code\",null,\" ****** \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(\"input\",{id:\"oauth_password\",type:\"password\",\"data-name\":\"password\",onChange:this.onInputChange}))),A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"password_type\"},\"Client credentials location:\"),C?A.createElement(\"code\",null,\" \",this.state.passwordType,\" \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(\"select\",{id:\"password_type\",\"data-name\":\"passwordType\",onChange:this.onInputChange},A.createElement(\"option\",{value:\"basic\"},\"Authorization header\"),A.createElement(\"option\",{value:\"request-body\"},\"Request body\"))))),(_===x||_===b||_===E||_===w)&&(!C||C&&this.state.clientId)&&A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"client_id\"},\"client_id:\"),C?A.createElement(\"code\",null,\" ****** \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(g,{id:\"client_id\",type:\"text\",required:_===w,initialValue:this.state.clientId,\"data-name\":\"clientId\",onChange:this.onInputChange}))),(_===x||_===E||_===w)&&A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"client_secret\"},\"client_secret:\"),C?A.createElement(\"code\",null,\" ****** \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(g,{id:\"client_secret\",initialValue:this.state.clientSecret,type:\"password\",\"data-name\":\"clientSecret\",onChange:this.onInputChange}))),!C&&k&&k.size?A.createElement(\"div\",{className:\"scopes\"},A.createElement(\"h2\",null,\"Scopes:\",A.createElement(\"a\",{onClick:this.selectScopes,\"data-all\":!0},\"select all\"),A.createElement(\"a\",{onClick:this.selectScopes},\"select none\")),j()(k).call(k,((e,t)=>{var n;return A.createElement(u,{key:t},A.createElement(\"div\",{className:\"checkbox\"},A.createElement(c,{\"data-value\":t,id:`${t}-${_}-checkbox-${this.state.name}`,disabled:C,checked:Re()(n=this.state.scopes).call(n,t),type:\"checkbox\",onChange:this.onScopeChange}),A.createElement(\"label\",{htmlFor:`${t}-${_}-checkbox-${this.state.name}`},A.createElement(\"span\",{className:\"item\"}),A.createElement(\"div\",{className:\"text\"},A.createElement(\"p\",{className:\"name\"},t),A.createElement(\"p\",{className:\"description\"},e)))))})).toArray()):null,j()(t=P.valueSeq()).call(t,((e,t)=>A.createElement(f,{error:e,key:t}))),A.createElement(\"div\",{className:\"auth-btn-wrapper\"},N&&(C?A.createElement(h,{className:\"btn modal-btn auth authorize\",onClick:this.logout},\"Logout\"):A.createElement(h,{className:\"btn modal-btn auth authorize\",onClick:this.authorize},\"Authorize\")),A.createElement(h,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\")))}}class Le extends A.Component{constructor(){super(...arguments),le()(this,\"onClick\",(()=>{let{specActions:e,path:t,method:n}=this.props;e.clearResponse(t,n),e.clearRequest(t,n)}))}render(){return A.createElement(\"button\",{className:\"btn btn-clear opblock-control__btn\",onClick:this.onClick},\"Clear\")}}const Be=e=>{let{headers:t}=e;return A.createElement(\"div\",null,A.createElement(\"h5\",null,\"Response headers\"),A.createElement(\"pre\",{className:\"microlight\"},t))},$e=e=>{let{duration:t}=e;return A.createElement(\"div\",null,A.createElement(\"h5\",null,\"Request duration\"),A.createElement(\"pre\",{className:\"microlight\"},t,\" ms\"))};class qe extends A.Component{shouldComponentUpdate(e){return this.props.response!==e.response||this.props.path!==e.path||this.props.method!==e.method||this.props.displayRequestDuration!==e.displayRequestDuration}render(){const{response:e,getComponent:t,getConfigs:n,displayRequestDuration:r,specSelectors:o,path:s,method:i}=this.props,{showMutatedRequest:a,requestSnippetsEnabled:l}=n(),u=a?o.mutatedRequestFor(s,i):o.requestFor(s,i),p=e.get(\"status\"),h=u.get(\"url\"),f=e.get(\"headers\").toJS(),d=e.get(\"notDocumented\"),m=e.get(\"error\"),g=e.get(\"text\"),y=e.get(\"duration\"),v=c()(f),b=f[\"content-type\"]||f[\"Content-Type\"],w=t(\"responseBody\"),x=j()(v).call(v,(e=>{var t=E()(f[e])?f[e].join():f[e];return A.createElement(\"span\",{className:\"headerline\",key:e},\" \",e,\": \",t,\" \")})),S=0!==x.length,_=t(\"Markdown\",!0),O=t(\"RequestSnippets\",!0),k=t(\"curl\");return A.createElement(\"div\",null,u&&(!0===l||\"true\"===l?A.createElement(O,{request:u}):A.createElement(k,{request:u,getConfigs:n})),h&&A.createElement(\"div\",null,A.createElement(\"div\",{className:\"request-url\"},A.createElement(\"h4\",null,\"Request URL\"),A.createElement(\"pre\",{className:\"microlight\"},h))),A.createElement(\"h4\",null,\"Server response\"),A.createElement(\"table\",{className:\"responses-table live-responses-table\"},A.createElement(\"thead\",null,A.createElement(\"tr\",{className:\"responses-header\"},A.createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),A.createElement(\"td\",{className:\"col_header response-col_description\"},\"Details\"))),A.createElement(\"tbody\",null,A.createElement(\"tr\",{className:\"response\"},A.createElement(\"td\",{className:\"response-col_status\"},p,d?A.createElement(\"div\",{className:\"response-undocumented\"},A.createElement(\"i\",null,\" Undocumented \")):null),A.createElement(\"td\",{className:\"response-col_description\"},m?A.createElement(_,{source:`${\"\"!==e.get(\"name\")?`${e.get(\"name\")}: `:\"\"}${e.get(\"message\")}`}):null,g?A.createElement(w,{content:g,contentType:b,url:h,headers:f,getConfigs:n,getComponent:t}):null,S?A.createElement(Be,{headers:x}):null,r&&y?A.createElement($e,{duration:y}):null)))))}}var Ue=n(5623);class ze extends A.Component{constructor(){super(...arguments),le()(this,\"renderOperationTag\",((e,t)=>{const{specSelectors:n,getComponent:r,oas3Selectors:o,layoutSelectors:s,layoutActions:i,getConfigs:a}=this.props,l=n.validOperationMethods(),c=r(\"OperationContainer\",!0),u=r(\"OperationTag\"),p=e.get(\"operations\");return A.createElement(u,{key:\"operation-\"+t,tagObj:e,tag:t,oas3Selectors:o,layoutSelectors:s,layoutActions:i,getConfigs:a,getComponent:r,specUrl:n.url()},A.createElement(\"div\",{className:\"operation-tag-content\"},j()(p).call(p,(e=>{const n=e.get(\"path\"),r=e.get(\"method\"),o=N().List([\"paths\",n,r]);return-1===ue()(l).call(l,r)?null:A.createElement(c,{key:`${n}-${r}`,specPath:o,op:e,path:n,method:r,tag:t})})).toArray()))}))}render(){let{specSelectors:e}=this.props;const t=e.taggedOperations();return 0===t.size?A.createElement(\"h3\",null,\" No operations defined in spec!\"):A.createElement(\"div\",null,j()(t).call(t,this.renderOperationTag).toArray(),t.size<1?A.createElement(\"h3\",null,\" No operations defined in spec! \"):null)}}var Ve=n(63543);class We extends A.Component{render(){const{tagObj:e,tag:t,children:n,oas3Selectors:r,layoutSelectors:o,layoutActions:s,getConfigs:i,getComponent:a,specUrl:l}=this.props;let{docExpansion:c,deepLinking:u}=i();const p=u&&\"false\"!==u,h=a(\"Collapse\"),f=a(\"Markdown\",!0),d=a(\"DeepLink\"),m=a(\"Link\");let g,y=e.getIn([\"tagDetails\",\"description\"],null),v=e.getIn([\"tagDetails\",\"externalDocs\",\"description\"]),b=e.getIn([\"tagDetails\",\"externalDocs\",\"url\"]);g=(0,L.Wl)(r)&&(0,L.Wl)(r.selectedServer)?(0,Ve.mn)(b,l,{selectedServer:r.selectedServer()}):b;let w=[\"operations-tag\",t],E=o.isShown(w,\"full\"===c||\"list\"===c);return A.createElement(\"div\",{className:E?\"opblock-tag-section is-open\":\"opblock-tag-section\"},A.createElement(\"h3\",{onClick:()=>s.show(w,!E),className:y?\"opblock-tag\":\"opblock-tag no-desc\",id:j()(w).call(w,(e=>(0,L.J6)(e))).join(\"-\"),\"data-tag\":t,\"data-is-open\":E},A.createElement(d,{enabled:p,isShown:E,path:(0,L.oJ)(t),text:t}),y?A.createElement(\"small\",null,A.createElement(f,{source:y})):A.createElement(\"small\",null),g?A.createElement(\"div\",{className:\"info__externaldocs\"},A.createElement(\"small\",null,A.createElement(m,{href:(0,L.Nm)(g),onClick:e=>e.stopPropagation(),target:\"_blank\"},v||g))):null,A.createElement(\"button\",{\"aria-expanded\":E,className:\"expand-operation\",title:E?\"Collapse operation\":\"Expand operation\",onClick:()=>s.show(w,!E)},A.createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},A.createElement(\"use\",{href:E?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:E?\"#large-arrow-up\":\"#large-arrow-down\"})))),A.createElement(h,{isOpened:E},n))}}le()(We,\"defaultProps\",{tagObj:N().fromJS({}),tag:\"\"});class Je extends A.PureComponent{render(){let{specPath:e,response:t,request:r,toggleShown:o,onTryoutClick:s,onResetClick:i,onCancelClick:a,onExecute:l,fn:c,getComponent:u,getConfigs:p,specActions:h,specSelectors:f,authActions:d,authSelectors:m,oas3Actions:g,oas3Selectors:y}=this.props,v=this.props.operation,{deprecated:b,isShown:w,path:E,method:x,op:S,tag:_,operationId:O,allowTryItOut:k,displayRequestDuration:C,tryItOutEnabled:P,executeInProgress:N}=v.toJS(),{description:I,externalDocs:T,schemes:R}=S;const M=T?(0,Ve.mn)(T.url,f.url(),{selectedServer:y.selectedServer()}):\"\";let D=v.getIn([\"op\"]),F=D.get(\"responses\"),B=(0,L.gp)(D,[\"parameters\"]),$=f.operationScheme(E,x),q=[\"operations\",_,O],U=(0,L.nX)(D);const z=u(\"responses\"),V=u(\"parameters\"),W=u(\"execute\"),J=u(\"clear\"),K=u(\"Collapse\"),H=u(\"Markdown\",!0),G=u(\"schemes\"),Z=u(\"OperationServers\"),Y=u(\"OperationExt\"),X=u(\"OperationSummary\"),Q=u(\"Link\"),{showExtensions:ee}=p();if(F&&t&&t.size>0){let e=!F.get(String(t.get(\"status\")))&&!F.get(\"default\");t=t.set(\"notDocumented\",e)}let te=[E,x];const ne=f.validationErrors([E,x]);return A.createElement(\"div\",{className:b?\"opblock opblock-deprecated\":w?`opblock opblock-${x} is-open`:`opblock opblock-${x}`,id:(0,L.J6)(q.join(\"-\"))},A.createElement(X,{operationProps:v,isShown:w,toggleShown:o,getComponent:u,authActions:d,authSelectors:m,specPath:e}),A.createElement(K,{isOpened:w},A.createElement(\"div\",{className:\"opblock-body\"},D&&D.size||null===D?null:A.createElement(\"img\",{height:\"32px\",width:\"32px\",src:n(2517),className:\"opblock-loading-animation\"}),b&&A.createElement(\"h4\",{className:\"opblock-title_normal\"},\" Warning: Deprecated\"),I&&A.createElement(\"div\",{className:\"opblock-description-wrapper\"},A.createElement(\"div\",{className:\"opblock-description\"},A.createElement(H,{source:I}))),M?A.createElement(\"div\",{className:\"opblock-external-docs-wrapper\"},A.createElement(\"h4\",{className:\"opblock-title_normal\"},\"Find more details\"),A.createElement(\"div\",{className:\"opblock-external-docs\"},T.description&&A.createElement(\"span\",{className:\"opblock-external-docs__description\"},A.createElement(H,{source:T.description})),A.createElement(Q,{target:\"_blank\",className:\"opblock-external-docs__link\",href:(0,L.Nm)(M)},M))):null,D&&D.size?A.createElement(V,{parameters:B,specPath:e.push(\"parameters\"),operation:D,onChangeKey:te,onTryoutClick:s,onResetClick:i,onCancelClick:a,tryItOutEnabled:P,allowTryItOut:k,fn:c,getComponent:u,specActions:h,specSelectors:f,pathMethod:[E,x],getConfigs:p,oas3Actions:g,oas3Selectors:y}):null,P?A.createElement(Z,{getComponent:u,path:E,method:x,operationServers:D.get(\"servers\"),pathServers:f.paths().getIn([E,\"servers\"]),getSelectedServer:y.selectedServer,setSelectedServer:g.setSelectedServer,setServerVariableValue:g.setServerVariableValue,getServerVariable:y.serverVariableValue,getEffectiveServerValue:y.serverEffectiveValue}):null,P&&k&&R&&R.size?A.createElement(\"div\",{className:\"opblock-schemes\"},A.createElement(G,{schemes:R,path:E,method:x,specActions:h,currentScheme:$})):null,!P||!k||ne.length<=0?null:A.createElement(\"div\",{className:\"validation-errors errors-wrapper\"},\"Please correct the following validation errors and try again.\",A.createElement(\"ul\",null,j()(ne).call(ne,((e,t)=>A.createElement(\"li\",{key:t},\" \",e,\" \"))))),A.createElement(\"div\",{className:P&&t&&k?\"btn-group\":\"execute-wrapper\"},P&&k?A.createElement(W,{operation:D,specActions:h,specSelectors:f,oas3Selectors:y,oas3Actions:g,path:E,method:x,onExecute:l,disabled:N}):null,P&&t&&k?A.createElement(J,{specActions:h,path:E,method:x}):null),N?A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"div\",{className:\"loading\"})):null,F?A.createElement(z,{responses:F,request:r,tryItOutResponse:t,getComponent:u,getConfigs:p,specSelectors:f,oas3Actions:g,oas3Selectors:y,specActions:h,produces:f.producesOptionsFor([E,x]),producesValue:f.currentProducesFor([E,x]),specPath:e.push(\"responses\"),path:E,method:x,displayRequestDuration:C,fn:c}):null,ee&&U.size?A.createElement(Y,{extensions:U,getComponent:u}):null)))}}le()(Je,\"defaultProps\",{operation:null,response:null,request:null,specPath:(0,P.List)(),summary:\"\"});var Ke=n(79833),He=n.n(Ke);class Ge extends A.PureComponent{render(){let{isShown:e,toggleShown:t,getComponent:n,authActions:r,authSelectors:o,operationProps:s,specPath:i}=this.props,{summary:a,isAuthorized:l,method:c,op:u,showSummary:p,path:h,operationId:f,originalOperationId:d,displayOperationId:m}=s.toJS(),{summary:g}=u,y=s.get(\"security\");const v=n(\"authorizeOperationBtn\"),b=n(\"OperationSummaryMethod\"),w=n(\"OperationSummaryPath\"),E=n(\"JumpToPath\",!0),x=n(\"CopyToClipboardBtn\",!0),S=y&&!!y.count(),_=S&&1===y.size&&y.first().isEmpty(),j=!S||_;return A.createElement(\"div\",{className:`opblock-summary opblock-summary-${c}`},A.createElement(\"button\",{\"aria-label\":`${c} ${h.replace(/\\//g,\"​/\")}`,\"aria-expanded\":e,className:\"opblock-summary-control\",onClick:t},A.createElement(b,{method:c}),A.createElement(w,{getComponent:n,operationProps:s,specPath:i}),p?A.createElement(\"div\",{className:\"opblock-summary-description\"},He()(g||a)):null,m&&(d||f)?A.createElement(\"span\",{className:\"opblock-summary-operation-id\"},d||f):null,A.createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},A.createElement(\"use\",{href:e?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:e?\"#large-arrow-up\":\"#large-arrow-down\"}))),j?null:A.createElement(v,{isAuthorized:l,onClick:()=>{const e=o.definitionsForRequirements(y);r.showDefinitions(e)}}),A.createElement(x,{textToCopy:`${i.get(1)}`}),A.createElement(E,{path:i}))}}le()(Ge,\"defaultProps\",{operationProps:null,specPath:(0,P.List)(),summary:\"\"});class Ze extends A.PureComponent{render(){let{method:e}=this.props;return A.createElement(\"span\",{className:\"opblock-summary-method\"},e.toUpperCase())}}le()(Ze,\"defaultProps\",{operationProps:null});var Ye=n(39940),Xe=n.n(Ye);class Qe extends A.PureComponent{render(){let{getComponent:e,operationProps:t}=this.props,{deprecated:n,isShown:r,path:o,tag:s,operationId:i,isDeepLinkingEnabled:a}=t.toJS();const l=o.split(/(?=\\/)/g);for(let e=1;e<l.length;e+=2)Xe()(l).call(l,e,0,A.createElement(\"wbr\",{key:e}));const c=e(\"DeepLink\");return A.createElement(\"span\",{className:n?\"opblock-summary-path__deprecated\":\"opblock-summary-path\",\"data-path\":o},A.createElement(c,{enabled:a,isShown:r,path:(0,L.oJ)(`${s}/${i}`),text:l}))}}const et=e=>{var t;let{extensions:n,getComponent:r}=e,o=r(\"OperationExtRow\");return A.createElement(\"div\",{className:\"opblock-section\"},A.createElement(\"div\",{className:\"opblock-section-header\"},A.createElement(\"h4\",null,\"Extensions\")),A.createElement(\"div\",{className:\"table-container\"},A.createElement(\"table\",null,A.createElement(\"thead\",null,A.createElement(\"tr\",null,A.createElement(\"td\",{className:\"col_header\"},\"Field\"),A.createElement(\"td\",{className:\"col_header\"},\"Value\"))),A.createElement(\"tbody\",null,j()(t=n.entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(o,{key:`${t}-${n}`,xKey:t,xVal:n})}))))))},tt=e=>{let{xKey:t,xVal:n}=e;const r=n?n.toJS?n.toJS():n:null;return A.createElement(\"tr\",null,A.createElement(\"td\",null,t),A.createElement(\"td\",null,p()(r)))};var nt=n(86),rt=n.n(nt),ot=n(94184),st=n.n(ot),it=n(33424),at=n(27361),lt=n.n(at),ct=n(23560),ut=n.n(ct),pt=n(35823),ht=n.n(pt),ft=n(74855);const dt=e=>{let{value:t,fileName:n,className:r,downloadable:o,getConfigs:s,canCopy:i,language:l}=e;const c=ut()(s)?s():null,u=!1!==lt()(c,\"syntaxHighlight\")&&lt()(c,\"syntaxHighlight.activated\",!0),p=(0,A.useRef)(null);(0,A.useEffect)((()=>{var e;const t=a()(e=Pe()(p.current.childNodes)).call(e,(e=>!!e.nodeType&&e.classList.contains(\"microlight\")));return rt()(t).call(t,(e=>e.addEventListener(\"mousewheel\",h,{passive:!1}))),()=>{rt()(t).call(t,(e=>e.removeEventListener(\"mousewheel\",h)))}}),[t,r,l]);const h=e=>{const{target:t,deltaY:n}=e,{scrollHeight:r,offsetHeight:o,scrollTop:s}=t;r>o&&(0===s&&n<0||o+s>=r&&n>0)&&e.preventDefault()};return A.createElement(\"div\",{className:\"highlight-code\",ref:p},o?A.createElement(\"div\",{className:\"download-contents\",onClick:()=>{ht()(t,n)}},\"Download\"):null,i&&A.createElement(\"div\",{className:\"copy-to-clipboard\"},A.createElement(ft.CopyToClipboard,{text:t},A.createElement(\"button\",null))),u?A.createElement(it.d3,{language:l,className:st()(r,\"microlight\"),style:(0,it.C2)(lt()(c,\"syntaxHighlight.theme\",\"agate\"))},t):A.createElement(\"pre\",{className:st()(r,\"microlight\")},t))};dt.defaultProps={fileName:\"response.txt\"};const mt=dt;class gt extends A.Component{constructor(){super(...arguments),le()(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e))),le()(this,\"onResponseContentTypeChange\",(e=>{let{controlsAcceptHeader:t,value:n}=e;const{oas3Actions:r,path:o,method:s}=this.props;t&&r.setResponseContentType({value:n,path:o,method:s})}))}render(){var e;let{responses:t,tryItOutResponse:n,getComponent:r,getConfigs:o,specSelectors:s,fn:i,producesValue:a,displayRequestDuration:l,specPath:c,path:u,method:p,oas3Selectors:h,oas3Actions:f}=this.props,d=(0,L.iQ)(t);const m=r(\"contentType\"),g=r(\"liveResponse\"),y=r(\"response\");let v=this.props.produces&&this.props.produces.size?this.props.produces:gt.defaultProps.produces;const b=s.isOAS3()?(0,L.QG)(t):null,w=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"_\";return e.replace(/[^\\w-]/g,t)}(`${p}${u}_responses`),E=`${w}_select`;return A.createElement(\"div\",{className:\"responses-wrapper\"},A.createElement(\"div\",{className:\"opblock-section-header\"},A.createElement(\"h4\",null,\"Responses\"),s.isOAS3()?null:A.createElement(\"label\",{htmlFor:E},A.createElement(\"span\",null,\"Response content type\"),A.createElement(m,{value:a,ariaControls:w,ariaLabel:\"Response content type\",className:\"execute-content-type\",contentTypes:v,controlId:E,onChange:this.onChangeProducesWrapper}))),A.createElement(\"div\",{className:\"responses-inner\"},n?A.createElement(\"div\",null,A.createElement(g,{response:n,getComponent:r,getConfigs:o,specSelectors:s,path:this.props.path,method:this.props.method,displayRequestDuration:l}),A.createElement(\"h4\",null,\"Responses\")):null,A.createElement(\"table\",{\"aria-live\":\"polite\",className:\"responses-table\",id:w,role:\"region\"},A.createElement(\"thead\",null,A.createElement(\"tr\",{className:\"responses-header\"},A.createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),A.createElement(\"td\",{className:\"col_header response-col_description\"},\"Description\"),s.isOAS3()?A.createElement(\"td\",{className:\"col col_header response-col_links\"},\"Links\"):null)),A.createElement(\"tbody\",null,j()(e=t.entrySeq()).call(e,(e=>{let[t,l]=e,m=n&&n.get(\"status\")==t?\"response_current\":\"\";return A.createElement(y,{key:t,path:u,method:p,specPath:c.push(t),isDefault:d===t,fn:i,className:m,code:t,response:l,specSelectors:s,controlsAcceptHeader:l===b,onContentTypeChange:this.onResponseContentTypeChange,contentType:a,getConfigs:o,activeExamplesKey:h.activeExamplesMember(u,p,\"responses\",t),oas3Actions:f,getComponent:r})})).toArray()))))}}le()(gt,\"defaultProps\",{tryItOutResponse:null,produces:(0,P.fromJS)([\"application/json\"]),displayRequestDuration:!1});var yt=n(47273),vt=n.n(yt),bt=n(2518);class wt extends A.Component{constructor(e,t){super(e,t),le()(this,\"_onContentTypeChange\",(e=>{const{onContentTypeChange:t,controlsAcceptHeader:n}=this.props;this.setState({responseContentType:e}),t({value:e,controlsAcceptHeader:n})})),le()(this,\"getTargetExamplesKey\",(()=>{const{response:e,contentType:t,activeExamplesKey:n}=this.props,r=this.state.responseContentType||t,o=e.getIn([\"content\",r],(0,P.Map)({})).get(\"examples\",null).keySeq().first();return n||o})),this.state={responseContentType:\"\"}}render(){var e,t;let{path:n,method:r,code:o,response:s,className:i,specPath:a,fn:l,getComponent:c,getConfigs:u,specSelectors:p,contentType:h,controlsAcceptHeader:f,oas3Actions:d}=this.props,{inferSchema:m,getSampleSchema:g}=l,y=p.isOAS3();const{showExtensions:v}=u();let b=v?(0,L.nX)(s):null,w=s.get(\"headers\"),E=s.get(\"links\");const x=c(\"ResponseExtension\"),S=c(\"headers\"),_=c(\"highlightCode\"),O=c(\"modelExample\"),k=c(\"Markdown\",!0),C=c(\"operationLink\"),N=c(\"contentType\"),I=c(\"ExamplesSelect\"),T=c(\"Example\");var R,M;const D=this.state.responseContentType||h,F=s.getIn([\"content\",D],(0,P.Map)({})),B=F.get(\"examples\",null);if(y){const e=F.get(\"schema\");R=e?m(e.toJS()):null,M=e?(0,P.List)([\"content\",this.state.responseContentType,\"schema\"]):a}else R=s.get(\"schema\"),M=s.has(\"schema\")?a.push(\"schema\"):a;let $,q,U=!1,z={includeReadOnly:!0};if(y){var V;if(q=null===(V=F.get(\"schema\"))||void 0===V?void 0:V.toJS(),B){const e=this.getTargetExamplesKey(),t=e=>e.get(\"value\");$=t(B.get(e,(0,P.Map)({}))),void 0===$&&($=t(vt()(B).call(B).next().value)),U=!0}else void 0!==F.get(\"example\")&&($=F.get(\"example\"),U=!0)}else{q=R,z={...z,includeWriteOnly:!0};const e=s.getIn([\"examples\",D]);e&&($=e,U=!0)}let W=((e,t,n)=>{if(null!=e){let r=null;return(0,bt.O)(e)&&(r=\"json\"),A.createElement(\"div\",null,A.createElement(t,{className:\"example\",getConfigs:n,language:r,value:(0,L.Pz)(e)}))}return null})(g(q,D,z,U?$:void 0),_,u);return A.createElement(\"tr\",{className:\"response \"+(i||\"\"),\"data-code\":o},A.createElement(\"td\",{className:\"response-col_status\"},o),A.createElement(\"td\",{className:\"response-col_description\"},A.createElement(\"div\",{className:\"response-col_description__inner\"},A.createElement(k,{source:s.get(\"description\")})),v&&b.size?j()(e=b.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(x,{key:`${t}-${n}`,xKey:t,xVal:n})})):null,y&&s.get(\"content\")?A.createElement(\"section\",{className:\"response-controls\"},A.createElement(\"div\",{className:st()(\"response-control-media-type\",{\"response-control-media-type--accept-controller\":f})},A.createElement(\"small\",{className:\"response-control-media-type__title\"},\"Media type\"),A.createElement(N,{value:this.state.responseContentType,contentTypes:s.get(\"content\")?s.get(\"content\").keySeq():(0,P.Seq)(),onChange:this._onContentTypeChange,ariaLabel:\"Media Type\"}),f?A.createElement(\"small\",{className:\"response-control-media-type__accept-message\"},\"Controls \",A.createElement(\"code\",null,\"Accept\"),\" header.\"):null),B?A.createElement(\"div\",{className:\"response-control-examples\"},A.createElement(\"small\",{className:\"response-control-examples__title\"},\"Examples\"),A.createElement(I,{examples:B,currentExampleKey:this.getTargetExamplesKey(),onSelect:e=>d.setActiveExamplesMember({name:e,pathMethod:[n,r],contextType:\"responses\",contextName:o}),showLabels:!1})):null):null,W||R?A.createElement(O,{specPath:M,getComponent:c,getConfigs:u,specSelectors:p,schema:(0,L.oG)(R),example:W,includeReadOnly:!0}):null,y&&B?A.createElement(T,{example:B.get(this.getTargetExamplesKey(),(0,P.Map)({})),getComponent:c,getConfigs:u,omitValue:!0}):null,w?A.createElement(S,{headers:w,getComponent:c}):null),y?A.createElement(\"td\",{className:\"response-col_links\"},E?j()(t=E.toSeq().entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(C,{key:t,name:t,link:n,getComponent:c})})):A.createElement(\"i\",null,\"No links\")):null)}}le()(wt,\"defaultProps\",{response:(0,P.fromJS)({}),onContentTypeChange:()=>{}});const Et=e=>{let{xKey:t,xVal:n}=e;return A.createElement(\"div\",{className:\"response__extension\"},t,\": \",String(n))};var xt=n(63460),St=n.n(xt),_t=n(3131),jt=n.n(_t),Ot=n(7334),kt=n.n(Ot);class At extends A.PureComponent{constructor(){super(...arguments),le()(this,\"state\",{parsedContent:null}),le()(this,\"updateParsedContent\",(e=>{const{content:t}=this.props;if(e!==t)if(t&&t instanceof Blob){var n=new FileReader;n.onload=()=>{this.setState({parsedContent:n.result})},n.readAsText(t)}else this.setState({parsedContent:t.toString()})}))}componentDidMount(){this.updateParsedContent(null)}componentDidUpdate(e){this.updateParsedContent(e.content)}render(){let{content:e,contentType:t,url:n,headers:r={},getConfigs:o,getComponent:i}=this.props;const{parsedContent:a}=this.state,l=i(\"highlightCode\"),c=\"response_\"+(new Date).getTime();let u,h;if(n=n||\"\",(/^application\\/octet-stream/i.test(t)||r[\"Content-Disposition\"]&&/attachment/i.test(r[\"Content-Disposition\"])||r[\"content-disposition\"]&&/attachment/i.test(r[\"content-disposition\"])||r[\"Content-Description\"]&&/File Transfer/i.test(r[\"Content-Description\"])||r[\"content-description\"]&&/File Transfer/i.test(r[\"content-description\"]))&&e.size>0)if(\"Blob\"in window){let o=t||\"text/html\",i=e instanceof Blob?e:new Blob([e],{type:o}),a=St().createObjectURL(i),l=[o,n.substr(s()(n).call(n,\"/\")+1),a].join(\":\"),c=r[\"content-disposition\"]||r[\"Content-Disposition\"];if(void 0!==c){let e=(0,L.DR)(c);null!==e&&(l=e)}h=F.Z.navigator&&F.Z.navigator.msSaveOrOpenBlob?A.createElement(\"div\",null,A.createElement(\"a\",{href:a,onClick:()=>F.Z.navigator.msSaveOrOpenBlob(i,l)},\"Download file\")):A.createElement(\"div\",null,A.createElement(\"a\",{href:a,download:l},\"Download file\"))}else h=A.createElement(\"pre\",{className:\"microlight\"},\"Download headers detected but your browser does not support downloading binary via XHR (Blob).\");else if(/json/i.test(t)){let t=null;(0,bt.O)(e)&&(t=\"json\");try{u=p()(JSON.parse(e),null,\"  \")}catch(t){u=\"can't parse JSON.  Raw result:\\n\\n\"+e}h=A.createElement(l,{language:t,downloadable:!0,fileName:`${c}.json`,value:u,getConfigs:o,canCopy:!0})}else/xml/i.test(t)?(u=jt()(e,{textNodesOnSameLine:!0,indentor:\"  \"}),h=A.createElement(l,{downloadable:!0,fileName:`${c}.xml`,value:u,getConfigs:o,canCopy:!0})):h=\"text/html\"===kt()(t)||/text\\/plain/.test(t)?A.createElement(l,{downloadable:!0,fileName:`${c}.html`,value:e,getConfigs:o,canCopy:!0}):\"text/csv\"===kt()(t)||/text\\/csv/.test(t)?A.createElement(l,{downloadable:!0,fileName:`${c}.csv`,value:e,getConfigs:o,canCopy:!0}):/^image\\//i.test(t)?Re()(t).call(t,\"svg\")?A.createElement(\"div\",null,\" \",e,\" \"):A.createElement(\"img\",{src:St().createObjectURL(e)}):/^audio\\//i.test(t)?A.createElement(\"pre\",{className:\"microlight\"},A.createElement(\"audio\",{controls:!0,key:n},A.createElement(\"source\",{src:n,type:t}))):\"string\"==typeof e?A.createElement(l,{downloadable:!0,fileName:`${c}.txt`,value:e,getConfigs:o,canCopy:!0}):e.size>0?a?A.createElement(\"div\",null,A.createElement(\"p\",{className:\"i\"},\"Unrecognized response type; displaying content as text.\"),A.createElement(l,{downloadable:!0,fileName:`${c}.txt`,value:a,getConfigs:o,canCopy:!0})):A.createElement(\"p\",{className:\"i\"},\"Unrecognized response type; unable to display.\"):null;return h?A.createElement(\"div\",null,A.createElement(\"h5\",null,\"Response body\"),h):null}}var Ct=n(3665),Pt=n.n(Ct);class Nt extends A.Component{constructor(e){super(e),le()(this,\"onChange\",((e,t,n)=>{let{specActions:{changeParamByIdentity:r},onChangeKey:o}=this.props;r(o,e,t,n)})),le()(this,\"onChangeConsumesWrapper\",(e=>{let{specActions:{changeConsumesValue:t},onChangeKey:n}=this.props;t(n,e)})),le()(this,\"toggleTab\",(e=>\"parameters\"===e?this.setState({parametersVisible:!0,callbackVisible:!1}):\"callbacks\"===e?this.setState({callbackVisible:!0,parametersVisible:!1}):void 0)),le()(this,\"onChangeMediaType\",(e=>{let{value:t,pathMethod:n}=e,{specActions:r,oas3Selectors:o,oas3Actions:s}=this.props;const i=o.hasUserEditedBody(...n),a=o.shouldRetainRequestBodyValue(...n);s.setRequestContentType({value:t,pathMethod:n}),s.initRequestBodyValidateError({pathMethod:n}),i||(a||s.setRequestBodyValue({value:void 0,pathMethod:n}),r.clearResponse(...n),r.clearRequest(...n),r.clearValidateParams(n))})),this.state={callbackVisible:!1,parametersVisible:!0}}render(){var e;let{onTryoutClick:t,onResetClick:n,parameters:r,allowTryItOut:o,tryItOutEnabled:s,specPath:i,fn:a,getComponent:l,getConfigs:c,specSelectors:u,specActions:p,pathMethod:h,oas3Actions:f,oas3Selectors:d,operation:m}=this.props;const g=l(\"parameterRow\"),y=l(\"TryItOutButton\"),v=l(\"contentType\"),w=l(\"Callbacks\",!0),E=l(\"RequestBody\",!0),x=s&&o,_=u.isOAS3(),O=m.get(\"requestBody\"),C=S()(e=Pt()(S()(r).call(r,((e,t)=>{const n=t.get(\"in\");return e[n]??(e[n]=[]),e[n].push(t),e}),{}))).call(e,((e,t)=>k()(e).call(e,t)),[]);return A.createElement(\"div\",{className:\"opblock-section\"},A.createElement(\"div\",{className:\"opblock-section-header\"},_?A.createElement(\"div\",{className:\"tab-header\"},A.createElement(\"div\",{onClick:()=>this.toggleTab(\"parameters\"),className:`tab-item ${this.state.parametersVisible&&\"active\"}`},A.createElement(\"h4\",{className:\"opblock-title\"},A.createElement(\"span\",null,\"Parameters\"))),m.get(\"callbacks\")?A.createElement(\"div\",{onClick:()=>this.toggleTab(\"callbacks\"),className:`tab-item ${this.state.callbackVisible&&\"active\"}`},A.createElement(\"h4\",{className:\"opblock-title\"},A.createElement(\"span\",null,\"Callbacks\"))):null):A.createElement(\"div\",{className:\"tab-header\"},A.createElement(\"h4\",{className:\"opblock-title\"},\"Parameters\")),o?A.createElement(y,{isOAS3:u.isOAS3(),hasUserEditedBody:d.hasUserEditedBody(...h),enabled:s,onCancelClick:this.props.onCancelClick,onTryoutClick:t,onResetClick:()=>n(h)}):null),this.state.parametersVisible?A.createElement(\"div\",{className:\"parameters-container\"},C.length?A.createElement(\"div\",{className:\"table-container\"},A.createElement(\"table\",{className:\"parameters\"},A.createElement(\"thead\",null,A.createElement(\"tr\",null,A.createElement(\"th\",{className:\"col_header parameters-col_name\"},\"Name\"),A.createElement(\"th\",{className:\"col_header parameters-col_description\"},\"Description\"))),A.createElement(\"tbody\",null,j()(C).call(C,((e,t)=>A.createElement(g,{fn:a,specPath:i.push(t.toString()),getComponent:l,getConfigs:c,rawParam:e,param:u.parameterWithMetaByIdentity(h,e),key:`${e.get(\"in\")}.${e.get(\"name\")}`,onChange:this.onChange,onChangeConsumes:this.onChangeConsumesWrapper,specSelectors:u,specActions:p,oas3Actions:f,oas3Selectors:d,pathMethod:h,isExecute:x})))))):A.createElement(\"div\",{className:\"opblock-description-wrapper\"},A.createElement(\"p\",null,\"No parameters\"))):null,this.state.callbackVisible?A.createElement(\"div\",{className:\"callbacks-container opblock-description-wrapper\"},A.createElement(w,{callbacks:(0,P.Map)(m.get(\"callbacks\")),specPath:b()(i).call(i,0,-1).push(\"callbacks\")})):null,_&&O&&this.state.parametersVisible&&A.createElement(\"div\",{className:\"opblock-section opblock-section-request-body\"},A.createElement(\"div\",{className:\"opblock-section-header\"},A.createElement(\"h4\",{className:`opblock-title parameter__name ${O.get(\"required\")&&\"required\"}`},\"Request body\"),A.createElement(\"label\",null,A.createElement(v,{value:d.requestContentType(...h),contentTypes:O.get(\"content\",(0,P.List)()).keySeq(),onChange:e=>{this.onChangeMediaType({value:e,pathMethod:h})},className:\"body-param-content-type\",ariaLabel:\"Request content type\"}))),A.createElement(\"div\",{className:\"opblock-description-wrapper\"},A.createElement(E,{setRetainRequestBodyValueFlag:e=>f.setRetainRequestBodyValueFlag({value:e,pathMethod:h}),userHasEditedBody:d.hasUserEditedBody(...h),specPath:b()(i).call(i,0,-1).push(\"requestBody\"),requestBody:O,requestBodyValue:d.requestBodyValue(...h),requestBodyInclusionSetting:d.requestBodyInclusionSetting(...h),requestBodyErrors:d.requestBodyErrors(...h),isExecute:x,getConfigs:c,activeExamplesKey:d.activeExamplesMember(...h,\"requestBody\",\"requestBody\"),updateActiveExamplesKey:e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"requestBody\",contextName:\"requestBody\"})},onChange:(e,t)=>{if(t){const n=d.requestBodyValue(...h),r=P.Map.isMap(n)?n:(0,P.Map)();return f.setRequestBodyValue({pathMethod:h,value:r.setIn(t,e)})}f.setRequestBodyValue({value:e,pathMethod:h})},onChangeIncludeEmpty:(e,t)=>{f.setRequestBodyInclusion({pathMethod:h,value:t,name:e})},contentType:d.requestContentType(...h)}))))}}le()(Nt,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]});const It=e=>{let{xKey:t,xVal:n}=e;return A.createElement(\"div\",{className:\"parameter__extension\"},t,\": \",String(n))},Tt={onChange:()=>{},isIncludedOptions:{}};class Rt extends A.Component{constructor(){super(...arguments),le()(this,\"onCheckboxChange\",(e=>{const{onChange:t}=this.props;t(e.target.checked)}))}componentDidMount(){const{isIncludedOptions:e,onChange:t}=this.props,{shouldDispatchInit:n,defaultValue:r}=e;n&&t(r)}render(){let{isIncluded:e,isDisabled:t}=this.props;return A.createElement(\"div\",null,A.createElement(\"label\",{className:st()(\"parameter__empty_value_toggle\",{disabled:t})},A.createElement(\"input\",{type:\"checkbox\",disabled:t,checked:!t&&e,onChange:this.onCheckboxChange}),\"Send empty value\"))}}le()(Rt,\"defaultProps\",Tt);var Mt=n(19069);class Dt extends A.Component{constructor(e,t){var n;super(e,t),n=this,le()(this,\"onChangeWrapper\",(function(e){let t,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{onChange:o,rawParam:s}=n.props;return t=\"\"===e||e&&0===e.size?null:e,o(s,t,r)})),le()(this,\"_onExampleSelect\",(e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"parameters\",contextName:this.getParamKey()})})),le()(this,\"onChangeIncludeEmpty\",(e=>{let{specActions:t,param:n,pathMethod:r}=this.props;const o=n.get(\"name\"),s=n.get(\"in\");return t.updateEmptyParamInclusion(r,o,s,e)})),le()(this,\"setDefaultValue\",(()=>{let{specSelectors:e,pathMethod:t,rawParam:n,oas3Selectors:r,fn:o}=this.props;const s=e.parameterWithMetaByIdentity(t,n)||(0,P.Map)(),{schema:i}=(0,Mt.Z)(s,{isOAS3:e.isOAS3()}),a=s.get(\"content\",(0,P.Map)()).keySeq().first(),l=i?o.getSampleSchema(i.toJS(),a,{includeWriteOnly:!0}):null;if(s&&void 0===s.get(\"value\")&&\"body\"!==s.get(\"in\")){let n;if(e.isSwagger2())n=void 0!==s.get(\"x-example\")?s.get(\"x-example\"):void 0!==s.getIn([\"schema\",\"example\"])?s.getIn([\"schema\",\"example\"]):i&&i.getIn([\"default\"]);else if(e.isOAS3()){const e=r.activeExamplesMember(...t,\"parameters\",this.getParamKey());n=void 0!==s.getIn([\"examples\",e,\"value\"])?s.getIn([\"examples\",e,\"value\"]):void 0!==s.getIn([\"content\",a,\"example\"])?s.getIn([\"content\",a,\"example\"]):void 0!==s.get(\"example\")?s.get(\"example\"):void 0!==(i&&i.get(\"example\"))?i&&i.get(\"example\"):void 0!==(i&&i.get(\"default\"))?i&&i.get(\"default\"):s.get(\"default\")}void 0===n||P.List.isList(n)||(n=(0,L.Pz)(n)),void 0!==n?this.onChangeWrapper(n):i&&\"object\"===i.get(\"type\")&&l&&!s.get(\"examples\")&&this.onChangeWrapper(P.List.isList(l)?l:(0,L.Pz)(l))}})),this.setDefaultValue()}UNSAFE_componentWillReceiveProps(e){let t,{specSelectors:n,pathMethod:r,rawParam:o}=e,s=n.isOAS3(),i=n.parameterWithMetaByIdentity(r,o)||new P.Map;if(i=i.isEmpty()?o:i,s){let{schema:e}=(0,Mt.Z)(i,{isOAS3:s});t=e?e.get(\"enum\"):void 0}else t=i?i.get(\"enum\"):void 0;let a,l=i?i.get(\"value\"):void 0;void 0!==l?a=l:o.get(\"required\")&&t&&t.size&&(a=t.first()),void 0!==a&&a!==l&&this.onChangeWrapper((0,L.D$)(a)),this.setDefaultValue()}getParamKey(){const{param:e}=this.props;return e?`${e.get(\"name\")}-${e.get(\"in\")}`:null}render(){var e,t;let{param:n,rawParam:r,getComponent:o,getConfigs:s,isExecute:i,fn:a,onChangeConsumes:l,specSelectors:c,pathMethod:u,specPath:p,oas3Selectors:h}=this.props,f=c.isOAS3();const{showExtensions:d,showCommonExtensions:m}=s();if(n||(n=r),!r)return null;const g=o(\"JsonSchemaForm\"),y=o(\"ParamBody\");let v=n.get(\"in\"),b=\"body\"!==v?null:A.createElement(y,{getComponent:o,getConfigs:s,fn:a,param:n,consumes:c.consumesOptionsFor(u),consumesValue:c.contentTypeValues(u).get(\"requestContentType\"),onChange:this.onChangeWrapper,onChangeConsumes:l,isExecute:i,specSelectors:c,pathMethod:u});const w=o(\"modelExample\"),E=o(\"Markdown\",!0),x=o(\"ParameterExt\"),S=o(\"ParameterIncludeEmpty\"),_=o(\"ExamplesSelectValueRetainer\"),O=o(\"Example\");let k,C,N,I,{schema:T}=(0,Mt.Z)(n,{isOAS3:f}),R=c.parameterWithMetaByIdentity(u,r)||(0,P.Map)(),M=T?T.get(\"format\"):null,D=T?T.get(\"type\"):null,B=T?T.getIn([\"items\",\"type\"]):null,$=\"formData\"===v,q=\"FormData\"in F.Z,U=n.get(\"required\"),z=R?R.get(\"value\"):\"\",V=m?(0,L.po)(T):null,W=d?(0,L.nX)(n):null,J=!1;return void 0!==n&&T&&(k=T.get(\"items\")),void 0!==k?(C=k.get(\"enum\"),N=k.get(\"default\")):T&&(C=T.get(\"enum\")),C&&C.size&&C.size>0&&(J=!0),void 0!==n&&(T&&(N=T.get(\"default\")),void 0===N&&(N=n.get(\"default\")),I=n.get(\"example\"),void 0===I&&(I=n.get(\"x-example\"))),A.createElement(\"tr\",{\"data-param-name\":n.get(\"name\"),\"data-param-in\":n.get(\"in\")},A.createElement(\"td\",{className:\"parameters-col_name\"},A.createElement(\"div\",{className:U?\"parameter__name required\":\"parameter__name\"},n.get(\"name\"),U?A.createElement(\"span\",null,\" *\"):null),A.createElement(\"div\",{className:\"parameter__type\"},D,B&&`[${B}]`,M&&A.createElement(\"span\",{className:\"prop-format\"},\"($\",M,\")\")),A.createElement(\"div\",{className:\"parameter__deprecated\"},f&&n.get(\"deprecated\")?\"deprecated\":null),A.createElement(\"div\",{className:\"parameter__in\"},\"(\",n.get(\"in\"),\")\"),m&&V.size?j()(e=V.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(x,{key:`${t}-${n}`,xKey:t,xVal:n})})):null,d&&W.size?j()(t=W.entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(x,{key:`${t}-${n}`,xKey:t,xVal:n})})):null),A.createElement(\"td\",{className:\"parameters-col_description\"},n.get(\"description\")?A.createElement(E,{source:n.get(\"description\")}):null,!b&&i||!J?null:A.createElement(E,{className:\"parameter__enum\",source:\"<i>Available values</i> : \"+j()(C).call(C,(function(e){return e})).toArray().join(\", \")}),!b&&i||void 0===N?null:A.createElement(E,{className:\"parameter__default\",source:\"<i>Default value</i> : \"+N}),!b&&i||void 0===I?null:A.createElement(E,{source:\"<i>Example</i> : \"+I}),$&&!q&&A.createElement(\"div\",null,\"Error: your browser does not support FormData\"),f&&n.get(\"examples\")?A.createElement(\"section\",{className:\"parameter-controls\"},A.createElement(_,{examples:n.get(\"examples\"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:o,defaultToFirstExample:!0,currentKey:h.activeExamplesMember(...u,\"parameters\",this.getParamKey()),currentUserInputValue:z})):null,b?null:A.createElement(g,{fn:a,getComponent:o,value:z,required:U,disabled:!i,description:n.get(\"name\"),onChange:this.onChangeWrapper,errors:R.get(\"errors\"),schema:T}),b&&T?A.createElement(w,{getComponent:o,specPath:p.push(\"schema\"),getConfigs:s,isExecute:i,specSelectors:c,schema:T,example:b,includeWriteOnly:!0}):null,!b&&i&&n.get(\"allowEmptyValue\")?A.createElement(S,{onChange:this.onChangeIncludeEmpty,isIncluded:c.parameterInclusionSettingFor(u,n.get(\"name\"),n.get(\"in\")),isDisabled:!(0,L.O2)(z)}):null,f&&n.get(\"examples\")?A.createElement(O,{example:n.getIn([\"examples\",h.activeExamplesMember(...u,\"parameters\",this.getParamKey())]),getComponent:o,getConfigs:s}):null))}}var Ft=n(87198),Lt=n.n(Ft);class Bt extends A.Component{constructor(){super(...arguments),le()(this,\"handleValidateParameters\",(()=>{let{specSelectors:e,specActions:t,path:n,method:r}=this.props;return t.validateParams([n,r]),e.validateBeforeExecute([n,r])})),le()(this,\"handleValidateRequestBody\",(()=>{let{path:e,method:t,specSelectors:n,oas3Selectors:r,oas3Actions:o}=this.props,s={missingBodyValue:!1,missingRequiredKeys:[]};o.clearRequestBodyValidateError({path:e,method:t});let i=n.getOAS3RequiredRequestBodyContentType([e,t]),a=r.requestBodyValue(e,t),l=r.validateBeforeExecute([e,t]),c=r.requestContentType(e,t);if(!l)return s.missingBodyValue=!0,o.setRequestBodyValidateError({path:e,method:t,validationErrors:s}),!1;if(!i)return!0;let u=r.validateShallowRequired({oas3RequiredRequestBodyContentType:i,oas3RequestContentType:c,oas3RequestBodyValue:a});return!u||u.length<1||(rt()(u).call(u,(e=>{s.missingRequiredKeys.push(e)})),o.setRequestBodyValidateError({path:e,method:t,validationErrors:s}),!1)})),le()(this,\"handleValidationResultPass\",(()=>{let{specActions:e,operation:t,path:n,method:r}=this.props;this.props.onExecute&&this.props.onExecute(),e.execute({operation:t,path:n,method:r})})),le()(this,\"handleValidationResultFail\",(()=>{let{specActions:e,path:t,method:n}=this.props;e.clearValidateParams([t,n]),Lt()((()=>{e.validateParams([t,n])}),40)})),le()(this,\"handleValidationResult\",(e=>{e?this.handleValidationResultPass():this.handleValidationResultFail()})),le()(this,\"onClick\",(()=>{let e=this.handleValidateParameters(),t=this.handleValidateRequestBody(),n=e&&t;this.handleValidationResult(n)})),le()(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e)))}render(){const{disabled:e}=this.props;return A.createElement(\"button\",{className:\"btn execute opblock-control__btn\",onClick:this.onClick,disabled:e},\"Execute\")}}class $t extends A.Component{render(){var e;let{headers:t,getComponent:n}=this.props;const r=n(\"Property\"),o=n(\"Markdown\",!0);return t&&t.size?A.createElement(\"div\",{className:\"headers-wrapper\"},A.createElement(\"h4\",{className:\"headers__title\"},\"Headers:\"),A.createElement(\"table\",{className:\"headers\"},A.createElement(\"thead\",null,A.createElement(\"tr\",{className:\"header-row\"},A.createElement(\"th\",{className:\"header-col\"},\"Name\"),A.createElement(\"th\",{className:\"header-col\"},\"Description\"),A.createElement(\"th\",{className:\"header-col\"},\"Type\"))),A.createElement(\"tbody\",null,j()(e=t.entrySeq()).call(e,(e=>{let[t,n]=e;if(!N().Map.isMap(n))return null;const s=n.get(\"description\"),i=n.getIn([\"schema\"])?n.getIn([\"schema\",\"type\"]):n.getIn([\"type\"]),a=n.getIn([\"schema\",\"example\"]);return A.createElement(\"tr\",{key:t},A.createElement(\"td\",{className:\"header-col\"},t),A.createElement(\"td\",{className:\"header-col\"},s?A.createElement(o,{source:s}):null),A.createElement(\"td\",{className:\"header-col\"},i,\" \",a?A.createElement(r,{propKey:\"Example\",propVal:a,propClass:\"header-example\"}):null))})).toArray()))):null}}class qt extends A.Component{render(){let{editorActions:e,errSelectors:t,layoutSelectors:n,layoutActions:r,getComponent:o}=this.props;const s=o(\"Collapse\");if(e&&e.jumpToLine)var i=e.jumpToLine;let l=t.allErrors(),c=a()(l).call(l,(e=>\"thrown\"===e.get(\"type\")||\"error\"===e.get(\"level\")));if(!c||c.count()<1)return null;let u=n.isShown([\"errorPane\"],!0),p=c.sortBy((e=>e.get(\"line\")));return A.createElement(\"pre\",{className:\"errors-wrapper\"},A.createElement(\"hgroup\",{className:\"error\"},A.createElement(\"h4\",{className:\"errors__title\"},\"Errors\"),A.createElement(\"button\",{className:\"btn errors__clear-btn\",onClick:()=>r.show([\"errorPane\"],!u)},u?\"Hide\":\"Show\")),A.createElement(s,{isOpened:u,animated:!0},A.createElement(\"div\",{className:\"errors\"},j()(p).call(p,((e,t)=>{let n=e.get(\"type\");return\"thrown\"===n||\"auth\"===n?A.createElement(Ut,{key:t,error:e.get(\"error\")||e,jumpToLine:i}):\"spec\"===n?A.createElement(zt,{key:t,error:e,jumpToLine:i}):void 0})))))}}const Ut=e=>{let{error:t,jumpToLine:n}=e;if(!t)return null;let r=t.get(\"line\");return A.createElement(\"div\",{className:\"error-wrapper\"},t?A.createElement(\"div\",null,A.createElement(\"h4\",null,t.get(\"source\")&&t.get(\"level\")?Vt(t.get(\"source\"))+\" \"+t.get(\"level\"):\"\",t.get(\"path\")?A.createElement(\"small\",null,\" at \",t.get(\"path\")):null),A.createElement(\"span\",{className:\"message thrown\"},t.get(\"message\")),A.createElement(\"div\",{className:\"error-line\"},r&&n?A.createElement(\"a\",{onClick:m()(n).call(n,null,r)},\"Jump to line \",r):null)):null)},zt=e=>{let{error:t,jumpToLine:n}=e,r=null;return t.get(\"path\")?r=P.List.isList(t.get(\"path\"))?A.createElement(\"small\",null,\"at \",t.get(\"path\").join(\".\")):A.createElement(\"small\",null,\"at \",t.get(\"path\")):t.get(\"line\")&&!n&&(r=A.createElement(\"small\",null,\"on line \",t.get(\"line\"))),A.createElement(\"div\",{className:\"error-wrapper\"},t?A.createElement(\"div\",null,A.createElement(\"h4\",null,Vt(t.get(\"source\"))+\" \"+t.get(\"level\"),\" \",r),A.createElement(\"span\",{className:\"message\"},t.get(\"message\")),A.createElement(\"div\",{className:\"error-line\"},n?A.createElement(\"a\",{onClick:m()(n).call(n,null,t.get(\"line\"))},\"Jump to line \",t.get(\"line\")):null)):null)};function Vt(e){var t;return j()(t=(e||\"\").split(\" \")).call(t,(e=>e[0].toUpperCase()+b()(e).call(e,1))).join(\" \")}Ut.defaultProps={jumpToLine:null};class Wt extends A.Component{constructor(){super(...arguments),le()(this,\"onChangeWrapper\",(e=>this.props.onChange(e.target.value)))}componentDidMount(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}UNSAFE_componentWillReceiveProps(e){var t;e.contentTypes&&e.contentTypes.size&&(Re()(t=e.contentTypes).call(t,e.value)||e.onChange(e.contentTypes.first()))}render(){let{ariaControls:e,ariaLabel:t,className:n,contentTypes:r,controlId:o,value:s}=this.props;return r&&r.size?A.createElement(\"div\",{className:\"content-type-wrapper \"+(n||\"\")},A.createElement(\"select\",{\"aria-controls\":e,\"aria-label\":t,className:\"content-type\",id:o,onChange:this.onChangeWrapper,value:s||\"\"},j()(r).call(r,(e=>A.createElement(\"option\",{key:e,value:e},e))).toArray())):null}}le()(Wt,\"defaultProps\",{onChange:()=>{},value:null,contentTypes:(0,P.fromJS)([\"application/json\"])});var Jt=n(23101),Kt=n.n(Jt),Ht=n(81607),Gt=n.n(Ht);function Zt(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return Gt()(e=a()(n).call(n,(e=>!!e)).join(\" \")).call(e)}class Yt extends A.Component{render(){let{fullscreen:e,full:t,...n}=this.props;if(e)return A.createElement(\"section\",n);let r=\"swagger-container\"+(t?\"-full\":\"\");return A.createElement(\"section\",Kt()({},n,{className:Zt(n.className,r)}))}}const Xt={mobile:\"\",tablet:\"-tablet\",desktop:\"-desktop\",large:\"-hd\"};class Qt extends A.Component{render(){const{hide:e,keepContents:t,mobile:n,tablet:r,desktop:o,large:s,...i}=this.props;if(e&&!t)return A.createElement(\"span\",null);let a=[];for(let e in Xt){if(!Object.prototype.hasOwnProperty.call(Xt,e))continue;let t=Xt[e];if(e in this.props){let n=this.props[e];if(n<1){a.push(\"none\"+t);continue}a.push(\"block\"+t),a.push(\"col-\"+n+t)}}e&&a.push(\"hidden\");let l=Zt(i.className,...a);return A.createElement(\"section\",Kt()({},i,{className:l}))}}class en extends A.Component{render(){return A.createElement(\"div\",Kt()({},this.props,{className:Zt(this.props.className,\"wrapper\")}))}}class tn extends A.Component{render(){return A.createElement(\"button\",Kt()({},this.props,{className:Zt(this.props.className,\"button\")}))}}le()(tn,\"defaultProps\",{className:\"\"});const nn=e=>A.createElement(\"textarea\",e),rn=e=>A.createElement(\"input\",e);class on extends A.Component{constructor(e,t){let n;super(e,t),le()(this,\"onChange\",(e=>{let t,{onChange:n,multiple:r}=this.props,o=b()([]).call(e.target.options);var s;r?t=j()(s=a()(o).call(o,(function(e){return e.selected}))).call(s,(function(e){return e.value})):t=e.target.value;this.setState({value:t}),n&&n(t)})),n=e.value?e.value:e.multiple?[\"\"]:\"\",this.state={value:n}}UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){var e,t;let{allowedValues:n,multiple:r,allowEmptyValue:o,disabled:s}=this.props,i=(null===(e=this.state.value)||void 0===e||null===(t=e.toJS)||void 0===t?void 0:t.call(e))||this.state.value;return A.createElement(\"select\",{className:this.props.className,multiple:r,value:i,onChange:this.onChange,disabled:s},o?A.createElement(\"option\",{value:\"\"},\"--\"):null,j()(n).call(n,(function(e,t){return A.createElement(\"option\",{key:t,value:String(e)},String(e))})))}}le()(on,\"defaultProps\",{multiple:!1,allowEmptyValue:!0});class sn extends A.Component{render(){return A.createElement(\"a\",Kt()({},this.props,{rel:\"noopener noreferrer\",className:Zt(this.props.className,\"link\")}))}}const an=e=>{let{children:t}=e;return A.createElement(\"div\",{className:\"no-margin\"},\" \",t,\" \")};class ln extends A.Component{renderNotAnimated(){return this.props.isOpened?A.createElement(an,null,this.props.children):A.createElement(\"noscript\",null)}render(){let{animated:e,isOpened:t,children:n}=this.props;return e?(n=t?n:null,A.createElement(an,null,n)):this.renderNotAnimated()}}le()(ln,\"defaultProps\",{isOpened:!1,animated:!1});class cn extends A.Component{constructor(){var e;super(...arguments),this.setTagShown=m()(e=this._setTagShown).call(e,this)}_setTagShown(e,t){this.props.layoutActions.show(e,t)}showOp(e,t){let{layoutActions:n}=this.props;n.show(e,t)}render(){let{specSelectors:e,layoutSelectors:t,layoutActions:n,getComponent:r}=this.props,o=e.taggedOperations();const s=r(\"Collapse\");return A.createElement(\"div\",null,A.createElement(\"h4\",{className:\"overview-title\"},\"Overview\"),j()(o).call(o,((e,r)=>{let o=e.get(\"operations\"),i=[\"overview-tags\",r],a=t.isShown(i,!0);return A.createElement(\"div\",{key:\"overview-\"+r},A.createElement(\"h4\",{onClick:()=>n.show(i,!a),className:\"link overview-tag\"},\" \",a?\"-\":\"+\",r),A.createElement(s,{isOpened:a,animated:!0},j()(o).call(o,(e=>{let{path:r,method:o,id:s}=e.toObject(),i=\"operations\",a=s,l=t.isShown([i,a]);return A.createElement(un,{key:s,path:r,method:o,id:r+\"-\"+o,shown:l,showOpId:a,showOpIdPrefix:i,href:`#operation-${a}`,onClick:n.show})})).toArray()))})).toArray(),o.size<1&&A.createElement(\"h3\",null,\" No operations defined in spec! \"))}}class un extends A.Component{constructor(e){var t;super(e),this.onClick=m()(t=this._onClick).call(t,this)}_onClick(){let{showOpId:e,showOpIdPrefix:t,onClick:n,shown:r}=this.props;n([t,e],!r)}render(){let{id:e,method:t,shown:n,href:r}=this.props;return A.createElement(sn,{href:r,onClick:this.onClick,className:\"block opblock-link \"+(n?\"shown\":\"\")},A.createElement(\"div\",null,A.createElement(\"small\",{className:`bold-label-${t}`},t.toUpperCase()),A.createElement(\"span\",{className:\"bold-label\"},e)))}}class pn extends A.Component{componentDidMount(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}render(){const{value:e,defaultValue:t,initialValue:n,...r}=this.props;return A.createElement(\"input\",Kt()({},r,{ref:e=>this.inputRef=e}))}}class hn extends A.Component{render(){const{host:e,basePath:t}=this.props;return A.createElement(\"pre\",{className:\"base-url\"},\"[ Base URL: \",e,t,\" ]\")}}class fn extends A.PureComponent{render(){const{url:e,getComponent:t}=this.props,n=t(\"Link\");return A.createElement(n,{target:\"_blank\",href:(0,L.Nm)(e)},A.createElement(\"span\",{className:\"url\"},\" \",e))}}class dn extends A.Component{render(){const{info:e,url:t,host:n,basePath:r,getComponent:o,externalDocs:s,selectedServer:i,url:a}=this.props,l=e.get(\"version\"),c=e.get(\"description\"),u=e.get(\"title\"),p=(0,Ve.mn)(e.get(\"termsOfService\"),a,{selectedServer:i}),h=e.get(\"contact\"),f=e.get(\"license\"),d=s&&s.get(\"url\"),m=(0,Ve.mn)(d,a,{selectedServer:i}),g=s&&s.get(\"description\"),y=o(\"Markdown\",!0),v=o(\"Link\"),b=o(\"VersionStamp\"),w=o(\"InfoUrl\"),E=o(\"InfoBasePath\"),x=o(\"License\"),S=o(\"Contact\");return A.createElement(\"div\",{className:\"info\"},A.createElement(\"hgroup\",{className:\"main\"},A.createElement(\"h2\",{className:\"title\"},u,l&&A.createElement(b,{version:l})),n||r?A.createElement(E,{host:n,basePath:r}):null,t&&A.createElement(w,{getComponent:o,url:t})),A.createElement(\"div\",{className:\"description\"},A.createElement(y,{source:c})),p&&A.createElement(\"div\",{className:\"info__tos\"},A.createElement(v,{target:\"_blank\",href:(0,L.Nm)(p)},\"Terms of service\")),(null==h?void 0:h.size)>0&&A.createElement(S,{getComponent:o,data:h,selectedServer:i,url:t}),(null==f?void 0:f.size)>0&&A.createElement(x,{getComponent:o,license:f,selectedServer:i,url:t}),m?A.createElement(v,{className:\"info__extdocs\",target:\"_blank\",href:(0,L.Nm)(m)},g||m):null)}}const mn=dn;class gn extends A.Component{render(){const{specSelectors:e,getComponent:t,oas3Selectors:n}=this.props,r=e.info(),o=e.url(),s=e.basePath(),i=e.host(),a=e.externalDocs(),l=n.selectedServer(),c=t(\"info\");return A.createElement(\"div\",null,r&&r.count()?A.createElement(c,{info:r,url:o,host:i,basePath:s,externalDocs:a,getComponent:t,selectedServer:l}):null)}}class yn extends A.Component{render(){const{data:e,getComponent:t,selectedServer:n,url:r}=this.props,o=e.get(\"name\",\"the developer\"),s=(0,Ve.mn)(e.get(\"url\"),r,{selectedServer:n}),i=e.get(\"email\"),a=t(\"Link\");return A.createElement(\"div\",{className:\"info__contact\"},s&&A.createElement(\"div\",null,A.createElement(a,{href:(0,L.Nm)(s),target:\"_blank\"},o,\" - Website\")),i&&A.createElement(a,{href:(0,L.Nm)(`mailto:${i}`)},s?`Send email to ${o}`:`Contact ${o}`))}}const vn=yn;class bn extends A.Component{render(){const{license:e,getComponent:t,selectedServer:n,url:r}=this.props,o=e.get(\"name\",\"License\"),s=(0,Ve.mn)(e.get(\"url\"),r,{selectedServer:n}),i=t(\"Link\");return A.createElement(\"div\",{className:\"info__license\"},s?A.createElement(\"div\",{className:\"info__license__url\"},A.createElement(i,{target:\"_blank\",href:(0,L.Nm)(s)},o)):A.createElement(\"span\",null,o))}}const wn=bn;class En extends A.Component{render(){return null}}class xn extends A.Component{render(){return A.createElement(\"div\",{className:\"view-line-link copy-to-clipboard\",title:\"Copy to clipboard\"},A.createElement(ft.CopyToClipboard,{text:this.props.textToCopy},A.createElement(\"svg\",{width:\"15\",height:\"16\"},A.createElement(\"use\",{href:\"#copy\",xlinkHref:\"#copy\"}))))}}class Sn extends A.Component{render(){return A.createElement(\"div\",{className:\"footer\"})}}class _n extends A.Component{constructor(){super(...arguments),le()(this,\"onFilterChange\",(e=>{const{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)}))}render(){const{specSelectors:e,layoutSelectors:t,getComponent:n}=this.props,r=n(\"Col\"),o=\"loading\"===e.loadingStatus(),s=\"failed\"===e.loadingStatus(),i=t.currentFilter(),a=[\"operation-filter-input\"];return s&&a.push(\"failed\"),o&&a.push(\"loading\"),A.createElement(\"div\",null,null===i||!1===i||\"false\"===i?null:A.createElement(\"div\",{className:\"filter-container\"},A.createElement(r,{className:\"filter wrapper\",mobile:12},A.createElement(\"input\",{className:a.join(\" \"),placeholder:\"Filter by tag\",type:\"text\",onChange:this.onFilterChange,value:!0===i||\"true\"===i?\"\":i,disabled:o}))))}}const jn=Function.prototype;class On extends A.PureComponent{constructor(e,t){super(e,t),le()(this,\"updateValues\",(e=>{let{param:t,isExecute:n,consumesValue:r=\"\"}=e,o=/xml/i.test(r),s=/json/i.test(r),i=o?t.get(\"value_xml\"):t.get(\"value\");if(void 0!==i){let e=!i&&s?\"{}\":i;this.setState({value:e}),this.onChange(e,{isXml:o,isEditBox:n})}else o?this.onChange(this.sample(\"xml\"),{isXml:o,isEditBox:n}):this.onChange(this.sample(),{isEditBox:n})})),le()(this,\"sample\",(e=>{let{param:t,fn:n}=this.props,r=n.inferSchema(t.toJS());return n.getSampleSchema(r,e,{includeWriteOnly:!0})})),le()(this,\"onChange\",((e,t)=>{let{isEditBox:n,isXml:r}=t;this.setState({value:e,isEditBox:n}),this._onChange(e,r)})),le()(this,\"_onChange\",((e,t)=>{(this.props.onChange||jn)(e,t)})),le()(this,\"handleOnChange\",(e=>{const{consumesValue:t}=this.props,n=/xml/i.test(t),r=e.target.value;this.onChange(r,{isXml:n,isEditBox:this.state.isEditBox})})),le()(this,\"toggleIsEditBox\",(()=>this.setState((e=>({isEditBox:!e.isEditBox}))))),this.state={isEditBox:!1,value:\"\"}}componentDidMount(){this.updateValues.call(this,this.props)}UNSAFE_componentWillReceiveProps(e){this.updateValues.call(this,e)}render(){let{onChangeConsumes:e,param:t,isExecute:n,specSelectors:r,pathMethod:o,getConfigs:s,getComponent:i}=this.props;const a=i(\"Button\"),l=i(\"TextArea\"),c=i(\"highlightCode\"),u=i(\"contentType\");let p=(r?r.parameterWithMetaByIdentity(o,t):t).get(\"errors\",(0,P.List)()),h=r.contentTypeValues(o).get(\"requestContentType\"),f=this.props.consumes&&this.props.consumes.size?this.props.consumes:On.defaultProp.consumes,{value:d,isEditBox:m}=this.state,g=null;return(0,bt.O)(d)&&(g=\"json\"),A.createElement(\"div\",{className:\"body-param\",\"data-param-name\":t.get(\"name\"),\"data-param-in\":t.get(\"in\")},m&&n?A.createElement(l,{className:\"body-param__text\"+(p.count()?\" invalid\":\"\"),value:d,onChange:this.handleOnChange}):d&&A.createElement(c,{className:\"body-param__example\",language:g,getConfigs:s,value:d}),A.createElement(\"div\",{className:\"body-param-options\"},n?A.createElement(\"div\",{className:\"body-param-edit\"},A.createElement(a,{className:m?\"btn cancel body-param__example-edit\":\"btn edit body-param__example-edit\",onClick:this.toggleIsEditBox},m?\"Cancel\":\"Edit\")):null,A.createElement(\"label\",{htmlFor:\"\"},A.createElement(\"span\",null,\"Parameter content type\"),A.createElement(u,{value:h,contentTypes:f,onChange:e,className:\"body-param-content-type\",ariaLabel:\"Parameter content type\"}))))}}le()(On,\"defaultProp\",{consumes:(0,P.fromJS)([\"application/json\"]),param:(0,P.fromJS)({}),onChange:jn,onChangeConsumes:jn});var kn=n(92135);class An extends A.Component{render(){let{request:e,getConfigs:t}=this.props,n=(0,kn.requestSnippetGenerator_curl_bash)(e);const r=t(),o=lt()(r,\"syntaxHighlight.activated\")?A.createElement(it.d3,{language:\"bash\",className:\"curl microlight\",style:(0,it.C2)(lt()(r,\"syntaxHighlight.theme\"))},n):A.createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:n});return A.createElement(\"div\",{className:\"curl-command\"},A.createElement(\"h4\",null,\"Curl\"),A.createElement(\"div\",{className:\"copy-to-clipboard\"},A.createElement(ft.CopyToClipboard,{text:n},A.createElement(\"button\",null))),A.createElement(\"div\",null,o))}}class Cn extends A.Component{constructor(){super(...arguments),le()(this,\"onChange\",(e=>{this.setScheme(e.target.value)})),le()(this,\"setScheme\",(e=>{let{path:t,method:n,specActions:r}=this.props;r.setScheme(e,t,n)}))}UNSAFE_componentWillMount(){let{schemes:e}=this.props;this.setScheme(e.first())}UNSAFE_componentWillReceiveProps(e){var t;this.props.currentScheme&&Re()(t=e.schemes).call(t,this.props.currentScheme)||this.setScheme(e.schemes.first())}render(){var e;let{schemes:t,currentScheme:n}=this.props;return A.createElement(\"label\",{htmlFor:\"schemes\"},A.createElement(\"span\",{className:\"schemes-title\"},\"Schemes\"),A.createElement(\"select\",{onChange:this.onChange,value:n},j()(e=t.valueSeq()).call(e,(e=>A.createElement(\"option\",{value:e,key:e},e))).toArray()))}}class Pn extends A.Component{render(){const{specActions:e,specSelectors:t,getComponent:n}=this.props,r=t.operationScheme(),o=t.schemes(),s=n(\"schemes\");return o&&o.size?A.createElement(s,{currentScheme:r,schemes:o,specActions:e}):null}}class Nn extends A.Component{constructor(e,t){super(e,t),le()(this,\"toggleCollapsed\",(()=>{this.props.onToggle&&this.props.onToggle(this.props.modelName,!this.state.expanded),this.setState({expanded:!this.state.expanded})})),le()(this,\"onLoad\",(e=>{if(e&&this.props.layoutSelectors){const t=this.props.layoutSelectors.getScrollToKey();N().is(t,this.props.specPath)&&this.toggleCollapsed(),this.props.layoutActions.readyToScroll(this.props.specPath,e.parentElement)}}));let{expanded:n,collapsedContent:r}=this.props;this.state={expanded:n,collapsedContent:r||Nn.defaultProps.collapsedContent}}componentDidMount(){const{hideSelfOnExpand:e,expanded:t,modelName:n}=this.props;e&&t&&this.props.onToggle(n,t)}UNSAFE_componentWillReceiveProps(e){this.props.expanded!==e.expanded&&this.setState({expanded:e.expanded})}render(){const{title:e,classes:t}=this.props;return this.state.expanded&&this.props.hideSelfOnExpand?A.createElement(\"span\",{className:t||\"\"},this.props.children):A.createElement(\"span\",{className:t||\"\",ref:this.onLoad},A.createElement(\"button\",{\"aria-expanded\":this.state.expanded,className:\"model-box-control\",onClick:this.toggleCollapsed},e&&A.createElement(\"span\",{className:\"pointer\"},e),A.createElement(\"span\",{className:\"model-toggle\"+(this.state.expanded?\"\":\" collapsed\")}),!this.state.expanded&&A.createElement(\"span\",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}le()(Nn,\"defaultProps\",{collapsedContent:\"{...}\",expanded:!1,title:null,onToggle:()=>{},hideSelfOnExpand:!1,specPath:N().List([])});var In=n(92282),Tn=n.n(In);class Rn extends A.Component{constructor(e,t){super(e,t),le()(this,\"activeTab\",(e=>{let{target:{dataset:{name:t}}}=e;this.setState({activeTab:t})}));let{getConfigs:n,isExecute:r}=this.props,{defaultModelRendering:o}=n(),s=o;\"example\"!==o&&\"model\"!==o&&(s=\"example\"),r&&(s=\"example\"),this.state={activeTab:s}}UNSAFE_componentWillReceiveProps(e){e.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:\"example\"})}render(){let{getComponent:e,specSelectors:t,schema:n,example:r,isExecute:o,getConfigs:s,specPath:i,includeReadOnly:a,includeWriteOnly:l}=this.props,{defaultModelExpandDepth:c}=s();const u=e(\"ModelWrapper\"),p=e(\"highlightCode\"),h=Tn()(5).toString(\"base64\"),f=Tn()(5).toString(\"base64\"),d=Tn()(5).toString(\"base64\"),m=Tn()(5).toString(\"base64\");let g=t.isOAS3();return A.createElement(\"div\",{className:\"model-example\"},A.createElement(\"ul\",{className:\"tab\",role:\"tablist\"},A.createElement(\"li\",{className:st()(\"tabitem\",{active:\"example\"===this.state.activeTab}),role:\"presentation\"},A.createElement(\"button\",{\"aria-controls\":f,\"aria-selected\":\"example\"===this.state.activeTab,className:\"tablinks\",\"data-name\":\"example\",id:h,onClick:this.activeTab,role:\"tab\"},o?\"Edit Value\":\"Example Value\")),n&&A.createElement(\"li\",{className:st()(\"tabitem\",{active:\"model\"===this.state.activeTab}),role:\"presentation\"},A.createElement(\"button\",{\"aria-controls\":m,\"aria-selected\":\"model\"===this.state.activeTab,className:st()(\"tablinks\",{inactive:o}),\"data-name\":\"model\",id:d,onClick:this.activeTab,role:\"tab\"},g?\"Schema\":\"Model\"))),\"example\"===this.state.activeTab&&A.createElement(\"div\",{\"aria-hidden\":\"example\"!==this.state.activeTab,\"aria-labelledby\":h,\"data-name\":\"examplePanel\",id:f,role:\"tabpanel\",tabIndex:\"0\"},r||A.createElement(p,{value:\"(no example available)\",getConfigs:s})),\"model\"===this.state.activeTab&&A.createElement(\"div\",{\"aria-hidden\":\"example\"===this.state.activeTab,\"aria-labelledby\":d,\"data-name\":\"modelPanel\",id:m,role:\"tabpanel\",tabIndex:\"0\"},A.createElement(u,{schema:n,getComponent:e,getConfigs:s,specSelectors:t,expandDepth:c,specPath:i,includeReadOnly:a,includeWriteOnly:l})))}}class Mn extends A.Component{constructor(){super(...arguments),le()(this,\"onToggle\",((e,t)=>{this.props.layoutActions&&this.props.layoutActions.show(this.props.fullPath,t)}))}render(){let{getComponent:e,getConfigs:t}=this.props;const n=e(\"Model\");let r;return this.props.layoutSelectors&&(r=this.props.layoutSelectors.isShown(this.props.fullPath)),A.createElement(\"div\",{className:\"model-box\"},A.createElement(n,Kt()({},this.props,{getConfigs:t,expanded:r,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}var Dn=n(53795);class Fn extends A.Component{constructor(){super(...arguments),le()(this,\"getSchemaBasePath\",(()=>this.props.specSelectors.isOAS3()?[\"components\",\"schemas\"]:[\"definitions\"])),le()(this,\"getCollapsedContent\",(()=>\" \")),le()(this,\"handleToggle\",((e,t)=>{const{layoutActions:n}=this.props;n.show([...this.getSchemaBasePath(),e],t),t&&this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(),e])})),le()(this,\"onLoadModels\",(e=>{e&&this.props.layoutActions.readyToScroll(this.getSchemaBasePath(),e)})),le()(this,\"onLoadModel\",(e=>{if(e){const t=e.getAttribute(\"data-name\");this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(),t],e)}}))}render(){var e;let{specSelectors:t,getComponent:n,layoutSelectors:r,layoutActions:o,getConfigs:s}=this.props,i=t.definitions(),{docExpansion:a,defaultModelsExpandDepth:l}=s();if(!i.size||l<0)return null;const c=this.getSchemaBasePath();let u=r.isShown(c,l>0&&\"none\"!==a);const p=t.isOAS3(),h=n(\"ModelWrapper\"),f=n(\"Collapse\"),d=n(\"ModelCollapse\"),m=n(\"JumpToPath\",!0);return A.createElement(\"section\",{className:u?\"models is-open\":\"models\",ref:this.onLoadModels},A.createElement(\"h4\",null,A.createElement(\"button\",{\"aria-expanded\":u,className:\"models-control\",onClick:()=>o.show(c,!u)},A.createElement(\"span\",null,p?\"Schemas\":\"Models\"),A.createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},A.createElement(\"use\",{xlinkHref:u?\"#large-arrow-up\":\"#large-arrow-down\"})))),A.createElement(f,{isOpened:u},j()(e=i.entrySeq()).call(e,(e=>{let[i]=e;const a=[...c,i],u=N().List(a),p=t.specResolvedSubtree(a),f=t.specJson().getIn(a),g=P.Map.isMap(p)?p:N().Map(),y=P.Map.isMap(f)?f:N().Map(),v=g.get(\"title\")||y.get(\"title\")||i,b=r.isShown(a,!1);b&&0===g.size&&y.size>0&&this.props.specActions.requestResolvedSubtree(a);const w=A.createElement(h,{name:i,expandDepth:l,schema:g||N().Map(),displayName:v,fullPath:a,specPath:u,getComponent:n,specSelectors:t,getConfigs:s,layoutSelectors:r,layoutActions:o,includeReadOnly:!0,includeWriteOnly:!0}),E=A.createElement(\"span\",{className:\"model-box\"},A.createElement(\"span\",{className:\"model model-title\"},v));return A.createElement(\"div\",{id:`model-${i}`,className:\"model-container\",key:`models-section-${i}`,\"data-name\":i,ref:this.onLoadModel},A.createElement(\"span\",{className:\"models-jump-to-path\"},A.createElement(m,{specPath:u})),A.createElement(d,{classes:\"model-box\",collapsedContent:this.getCollapsedContent(i),onToggle:this.handleToggle,title:E,displayName:v,modelName:i,specPath:u,layoutSelectors:r,layoutActions:o,hideSelfOnExpand:!0,expanded:l>0&&b},w))})).toArray()))}}const Ln=e=>{let{value:t,getComponent:n}=e,r=n(\"ModelCollapse\"),o=A.createElement(\"span\",null,\"Array [ \",t.count(),\" ]\");return A.createElement(\"span\",{className:\"prop-enum\"},\"Enum:\",A.createElement(\"br\",null),A.createElement(r,{collapsedContent:o},\"[ \",t.join(\", \"),\" ]\"))};class Bn extends A.Component{render(){var e,t,n,r;let{schema:o,name:s,displayName:i,isRef:l,getComponent:c,getConfigs:u,depth:h,onToggle:f,expanded:d,specPath:m,...g}=this.props,{specSelectors:y,expandDepth:v,includeReadOnly:w,includeWriteOnly:E}=g;const{isOAS3:x}=y;if(!o)return null;const{showExtensions:S}=u();let _=o.get(\"description\"),O=o.get(\"properties\"),k=o.get(\"additionalProperties\"),C=o.get(\"title\")||i||s,N=o.get(\"required\"),I=a()(o).call(o,((e,t)=>{var n;return-1!==ue()(n=[\"maxProperties\",\"minProperties\",\"nullable\",\"example\"]).call(n,t)})),T=o.get(\"deprecated\"),R=o.getIn([\"externalDocs\",\"url\"]),M=o.getIn([\"externalDocs\",\"description\"]);const D=c(\"JumpToPath\",!0),F=c(\"Markdown\",!0),B=c(\"Model\"),$=c(\"ModelCollapse\"),q=c(\"Property\"),U=c(\"Link\"),z=()=>A.createElement(\"span\",{className:\"model-jump-to-path\"},A.createElement(D,{specPath:m})),V=A.createElement(\"span\",null,A.createElement(\"span\",null,\"{\"),\"...\",A.createElement(\"span\",null,\"}\"),l?A.createElement(z,null):\"\"),W=y.isOAS3()?o.get(\"anyOf\"):null,J=y.isOAS3()?o.get(\"oneOf\"):null,K=y.isOAS3()?o.get(\"not\"):null,H=C&&A.createElement(\"span\",{className:\"model-title\"},l&&o.get(\"$$ref\")&&A.createElement(\"span\",{className:\"model-hint\"},o.get(\"$$ref\")),A.createElement(\"span\",{className:\"model-title__text\"},C));return A.createElement(\"span\",{className:\"model\"},A.createElement($,{modelName:s,title:H,onToggle:f,expanded:!!d||h<=v,collapsedContent:V},A.createElement(\"span\",{className:\"brace-open object\"},\"{\"),l?A.createElement(z,null):null,A.createElement(\"span\",{className:\"inner-object\"},A.createElement(\"table\",{className:\"model\"},A.createElement(\"tbody\",null,_?A.createElement(\"tr\",{className:\"description\"},A.createElement(\"td\",null,\"description:\"),A.createElement(\"td\",null,A.createElement(F,{source:_}))):null,R&&A.createElement(\"tr\",{className:\"external-docs\"},A.createElement(\"td\",null,\"externalDocs:\"),A.createElement(\"td\",null,A.createElement(U,{target:\"_blank\",href:(0,L.Nm)(R)},M||R))),T?A.createElement(\"tr\",{className:\"property\"},A.createElement(\"td\",null,\"deprecated:\"),A.createElement(\"td\",null,\"true\")):null,O&&O.size?j()(e=a()(t=O.entrySeq()).call(t,(e=>{let[,t]=e;return(!t.get(\"readOnly\")||w)&&(!t.get(\"writeOnly\")||E)}))).call(e,(e=>{let[t,n]=e,r=x()&&n.get(\"deprecated\"),o=P.List.isList(N)&&N.contains(t),i=[\"property-row\"];return r&&i.push(\"deprecated\"),o&&i.push(\"required\"),A.createElement(\"tr\",{key:t,className:i.join(\" \")},A.createElement(\"td\",null,t,o&&A.createElement(\"span\",{className:\"star\"},\"*\")),A.createElement(\"td\",null,A.createElement(B,Kt()({key:`object-${s}-${t}_${n}`},g,{required:o,getComponent:c,specPath:m.push(\"properties\",t),getConfigs:u,schema:n,depth:h+1}))))})).toArray():null,S?A.createElement(\"tr\",null,A.createElement(\"td\",null,\" \")):null,S?j()(n=o.entrySeq()).call(n,(e=>{let[t,n]=e;if(\"x-\"!==b()(t).call(t,0,2))return;const r=n?n.toJS?n.toJS():n:null;return A.createElement(\"tr\",{key:t,className:\"extension\"},A.createElement(\"td\",null,t),A.createElement(\"td\",null,p()(r)))})).toArray():null,k&&k.size?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"< * >:\"),A.createElement(\"td\",null,A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"additionalProperties\"),getConfigs:u,schema:k,depth:h+1})))):null,W?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"anyOf ->\"),A.createElement(\"td\",null,j()(W).call(W,((e,t)=>A.createElement(\"div\",{key:t},A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"anyOf\",t),getConfigs:u,schema:e,depth:h+1}))))))):null,J?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"oneOf ->\"),A.createElement(\"td\",null,j()(J).call(J,((e,t)=>A.createElement(\"div\",{key:t},A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"oneOf\",t),getConfigs:u,schema:e,depth:h+1}))))))):null,K?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"not ->\"),A.createElement(\"td\",null,A.createElement(\"div\",null,A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"not\"),getConfigs:u,schema:K,depth:h+1}))))):null))),A.createElement(\"span\",{className:\"brace-close\"},\"}\")),I.size?j()(r=I.entrySeq()).call(r,(e=>{let[t,n]=e;return A.createElement(q,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:\"property\"})})):null)}}class $n extends A.Component{render(){var e;let{getComponent:t,getConfigs:n,schema:r,depth:o,expandDepth:s,name:i,displayName:l,specPath:c}=this.props,u=r.get(\"description\"),p=r.get(\"items\"),h=r.get(\"title\")||l||i,f=a()(r).call(r,((e,t)=>{var n;return-1===ue()(n=[\"type\",\"items\",\"description\",\"$$ref\",\"externalDocs\"]).call(n,t)})),d=r.getIn([\"externalDocs\",\"url\"]),m=r.getIn([\"externalDocs\",\"description\"]);const g=t(\"Markdown\",!0),y=t(\"ModelCollapse\"),v=t(\"Model\"),b=t(\"Property\"),w=t(\"Link\"),E=h&&A.createElement(\"span\",{className:\"model-title\"},A.createElement(\"span\",{className:\"model-title__text\"},h));return A.createElement(\"span\",{className:\"model\"},A.createElement(y,{title:E,expanded:o<=s,collapsedContent:\"[...]\"},\"[\",f.size?j()(e=f.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(b,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:\"property\"})})):null,u?A.createElement(g,{source:u}):f.size?A.createElement(\"div\",{className:\"markdown\"}):null,d&&A.createElement(\"div\",{className:\"external-docs\"},A.createElement(w,{target:\"_blank\",href:(0,L.Nm)(d)},m||d)),A.createElement(\"span\",null,A.createElement(v,Kt()({},this.props,{getConfigs:n,specPath:c.push(\"items\"),name:null,schema:p,required:!1,depth:o+1}))),\"]\"))}}const qn=\"property primitive\";class Un extends A.Component{render(){var e,t,n;let{schema:r,getComponent:o,getConfigs:s,name:i,displayName:l,depth:c,expandDepth:u}=this.props;const{showExtensions:p}=s();if(!r||!r.get)return A.createElement(\"div\",null);let h=r.get(\"type\"),f=r.get(\"format\"),d=r.get(\"xml\"),m=r.get(\"enum\"),g=r.get(\"title\")||l||i,y=r.get(\"description\"),v=(0,L.nX)(r),b=a()(r).call(r,((e,t)=>{var n;return-1===ue()(n=[\"enum\",\"type\",\"format\",\"description\",\"$$ref\",\"externalDocs\"]).call(n,t)})).filterNot(((e,t)=>v.has(t))),w=r.getIn([\"externalDocs\",\"url\"]),E=r.getIn([\"externalDocs\",\"description\"]);const x=o(\"Markdown\",!0),S=o(\"EnumModel\"),_=o(\"Property\"),O=o(\"ModelCollapse\"),k=o(\"Link\"),C=g&&A.createElement(\"span\",{className:\"model-title\"},A.createElement(\"span\",{className:\"model-title__text\"},g));return A.createElement(\"span\",{className:\"model\"},A.createElement(O,{title:C,expanded:c<=u,collapsedContent:\"[...]\",hideSelfOnExpand:u!==c},A.createElement(\"span\",{className:\"prop\"},i&&c>1&&A.createElement(\"span\",{className:\"prop-name\"},g),A.createElement(\"span\",{className:\"prop-type\"},h),f&&A.createElement(\"span\",{className:\"prop-format\"},\"($\",f,\")\"),b.size?j()(e=b.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(_,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:qn})})):null,p&&v.size?j()(t=v.entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(_,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:qn})})):null,y?A.createElement(x,{source:y}):null,w&&A.createElement(\"div\",{className:\"external-docs\"},A.createElement(k,{target:\"_blank\",href:(0,L.Nm)(w)},E||w)),d&&d.size?A.createElement(\"span\",null,A.createElement(\"br\",null),A.createElement(\"span\",{className:qn},\"xml:\"),j()(n=d.entrySeq()).call(n,(e=>{let[t,n]=e;return A.createElement(\"span\",{key:`${t}-${n}`,className:qn},A.createElement(\"br\",null),\"   \",t,\": \",String(n))})).toArray()):null,m&&A.createElement(S,{value:m,getComponent:o}))))}}const zn=e=>{let{propKey:t,propVal:n,propClass:r}=e;return A.createElement(\"span\",{className:r},A.createElement(\"br\",null),t,\": \",String(n))};class Vn extends A.Component{render(){const{onTryoutClick:e,onCancelClick:t,onResetClick:n,enabled:r,hasUserEditedBody:o,isOAS3:s}=this.props,i=s&&o;return A.createElement(\"div\",{className:i?\"try-out btn-group\":\"try-out\"},r?A.createElement(\"button\",{className:\"btn try-out__btn cancel\",onClick:t},\"Cancel\"):A.createElement(\"button\",{className:\"btn try-out__btn\",onClick:e},\"Try it out \"),i&&A.createElement(\"button\",{className:\"btn try-out__btn reset\",onClick:n},\"Reset\"))}}le()(Vn,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1});class Wn extends A.PureComponent{render(){const{bypass:e,isSwagger2:t,isOAS3:n,alsoShow:r}=this.props;return e?A.createElement(\"div\",null,this.props.children):t&&n?A.createElement(\"div\",{className:\"version-pragma\"},r,A.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},A.createElement(\"div\",null,A.createElement(\"h3\",null,\"Unable to render this definition\"),A.createElement(\"p\",null,A.createElement(\"code\",null,\"swagger\"),\" and \",A.createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),A.createElement(\"p\",null,\"Supported version fields are \",A.createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",A.createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",A.createElement(\"code\",null,\"openapi: 3.0.0\"),\").\")))):t||n?A.createElement(\"div\",null,this.props.children):A.createElement(\"div\",{className:\"version-pragma\"},r,A.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},A.createElement(\"div\",null,A.createElement(\"h3\",null,\"Unable to render this definition\"),A.createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),A.createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",A.createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",A.createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",A.createElement(\"code\",null,\"openapi: 3.0.0\"),\").\"))))}}le()(Wn,\"defaultProps\",{alsoShow:null,children:null,bypass:!1});const Jn=e=>{let{version:t}=e;return A.createElement(\"small\",null,A.createElement(\"pre\",{className:\"version\"},\" \",t,\" \"))},Kn=e=>{let{enabled:t,path:n,text:r}=e;return A.createElement(\"a\",{className:\"nostyle\",onClick:t?e=>e.preventDefault():null,href:t?`#/${n}`:null},A.createElement(\"span\",null,r))},Hn=()=>A.createElement(\"div\",null,A.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",xmlnsXlink:\"http://www.w3.org/1999/xlink\",className:\"svg-assets\"},A.createElement(\"defs\",null,A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"unlocked\"},A.createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"locked\"},A.createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"close\"},A.createElement(\"path\",{d:\"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow\"},A.createElement(\"path\",{d:\"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-down\"},A.createElement(\"path\",{d:\"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-up\"},A.createElement(\"path\",{d:\"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"jump-to\"},A.createElement(\"path\",{d:\"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"expand\"},A.createElement(\"path\",{d:\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 15 16\",id:\"copy\"},A.createElement(\"g\",{transform:\"translate(2, -1)\"},A.createElement(\"path\",{fill:\"#ffffff\",fillRule:\"evenodd\",d:\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"}))))));var Gn=n(4599);class Zn extends A.Component{render(){const{errSelectors:e,specSelectors:t,getComponent:n}=this.props,r=n(\"SvgAssets\"),o=n(\"InfoContainer\",!0),s=n(\"VersionPragmaFilter\"),i=n(\"operations\",!0),a=n(\"Models\",!0),l=n(\"Webhooks\",!0),c=n(\"Row\"),u=n(\"Col\"),p=n(\"errors\",!0),h=n(\"ServersContainer\",!0),f=n(\"SchemesContainer\",!0),d=n(\"AuthorizeBtnContainer\",!0),m=n(\"FilterContainer\",!0),g=t.isSwagger2(),y=t.isOAS3(),v=t.isOAS31(),b=!t.specStr(),w=t.loadingStatus();let E=null;if(\"loading\"===w&&(E=A.createElement(\"div\",{className:\"info\"},A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"div\",{className:\"loading\"})))),\"failed\"===w&&(E=A.createElement(\"div\",{className:\"info\"},A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"h4\",{className:\"title\"},\"Failed to load API definition.\"),A.createElement(p,null)))),\"failedConfig\"===w){const t=e.lastError(),n=t?t.get(\"message\"):\"\";E=A.createElement(\"div\",{className:\"info failed-config\"},A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"h4\",{className:\"title\"},\"Failed to load remote configuration.\"),A.createElement(\"p\",null,n)))}if(!E&&b&&(E=A.createElement(\"h4\",null,\"No API definition provided.\")),E)return A.createElement(\"div\",{className:\"swagger-ui\"},A.createElement(\"div\",{className:\"loading-container\"},E));const x=t.servers(),S=t.schemes(),_=x&&x.size,j=S&&S.size,O=!!t.securityDefinitions();return A.createElement(\"div\",{className:\"swagger-ui\"},A.createElement(r,null),A.createElement(s,{isSwagger2:g,isOAS3:y,alsoShow:A.createElement(p,null)},A.createElement(p,null),A.createElement(c,{className:\"information-container\"},A.createElement(u,{mobile:12},A.createElement(o,null))),_||j||O?A.createElement(\"div\",{className:\"scheme-container\"},A.createElement(u,{className:\"schemes wrapper\",mobile:12},_?A.createElement(h,null):null,j?A.createElement(f,null):null,O?A.createElement(d,null):null)):null,A.createElement(m,null),A.createElement(c,null,A.createElement(u,{mobile:12,desktop:12},A.createElement(i,null))),v&&A.createElement(c,{className:\"webhooks-container\"},A.createElement(u,{mobile:12,desktop:12},A.createElement(l,null))),A.createElement(c,null,A.createElement(u,{mobile:12,desktop:12},A.createElement(a,null)))))}}var Yn=n(775),Xn=n.n(Yn);const Qn={value:\"\",onChange:()=>{},schema:{},keyName:\"\",required:!1,errors:(0,P.List)()};class er extends A.Component{componentDidMount(){const{dispatchInitialValue:e,value:t,onChange:n}=this.props;e?n(t):!1===e&&n(\"\")}render(){let{schema:e,errors:t,value:n,onChange:r,getComponent:o,fn:s,disabled:i}=this.props;const a=e&&e.get?e.get(\"format\"):null,l=e&&e.get?e.get(\"type\"):null;let c=e=>o(e,!1,{failSilently:!0}),u=l?c(a?`JsonSchema_${l}_${a}`:`JsonSchema_${l}`):o(\"JsonSchema_string\");return u||(u=o(\"JsonSchema_string\")),A.createElement(u,Kt()({},this.props,{errors:t,fn:s,getComponent:o,value:n,onChange:r,schema:e,disabled:i}))}}le()(er,\"defaultProps\",Qn);class tr extends A.Component{constructor(){super(...arguments),le()(this,\"onChange\",(e=>{const t=this.props.schema&&\"file\"===this.props.schema.get(\"type\")?e.target.files[0]:e.target.value;this.props.onChange(t,this.props.keyName)})),le()(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,schema:n,errors:r,required:o,description:s,disabled:i}=this.props;const a=n&&n.get?n.get(\"enum\"):null,l=n&&n.get?n.get(\"format\"):null,c=n&&n.get?n.get(\"type\"):null,u=n&&n.get?n.get(\"in\"):null;if(t||(t=\"\"),r=r.toJS?r.toJS():[],a){const n=e(\"Select\");return A.createElement(n,{className:r.length?\"invalid\":\"\",title:r.length?r:\"\",allowedValues:[...a],value:t,allowEmptyValue:!o,disabled:i,onChange:this.onEnumChange})}const p=i||u&&\"formData\"===u&&!(\"FormData\"in window),h=e(\"Input\");return c&&\"file\"===c?A.createElement(h,{type:\"file\",className:r.length?\"invalid\":\"\",title:r.length?r:\"\",onChange:this.onChange,disabled:p}):A.createElement(Xn(),{type:l&&\"password\"===l?\"password\":\"text\",className:r.length?\"invalid\":\"\",title:r.length?r:\"\",value:t,minLength:0,debounceTimeout:350,placeholder:s,onChange:this.onChange,disabled:p})}}le()(tr,\"defaultProps\",Qn);class nr extends A.PureComponent{constructor(e,t){super(e,t),le()(this,\"onChange\",(()=>{this.props.onChange(this.state.value)})),le()(this,\"onItemChange\",((e,t)=>{this.setState((n=>{let{value:r}=n;return{value:r.set(t,e)}}),this.onChange)})),le()(this,\"removeItem\",(e=>{this.setState((t=>{let{value:n}=t;return{value:n.delete(e)}}),this.onChange)})),le()(this,\"addItem\",(()=>{const{fn:e}=this.props;let t=lr(this.state.value);this.setState((()=>({value:t.push(e.getSampleSchema(this.state.schema.get(\"items\"),!1,{includeWriteOnly:!0}))})),this.onChange)})),le()(this,\"onEnumChange\",(e=>{this.setState((()=>({value:e})),this.onChange)})),this.state={value:lr(e.value),schema:e.schema}}UNSAFE_componentWillReceiveProps(e){const t=lr(e.value);t!==this.state.value&&this.setState({value:t}),e.schema!==this.state.schema&&this.setState({schema:e.schema})}render(){var e;let{getComponent:t,required:n,schema:r,errors:o,fn:s,disabled:i}=this.props;o=o.toJS?o.toJS():E()(o)?o:[];const l=a()(o).call(o,(e=>\"string\"==typeof e)),c=j()(e=a()(o).call(o,(e=>void 0!==e.needRemove))).call(e,(e=>e.error)),u=this.state.value,p=!!(u&&u.count&&u.count()>0),h=r.getIn([\"items\",\"enum\"]),f=r.getIn([\"items\",\"type\"]),d=r.getIn([\"items\",\"format\"]),m=r.get(\"items\");let g,y=!1,v=\"file\"===f||\"string\"===f&&\"binary\"===d;if(f&&d?g=t(`JsonSchema_${f}_${d}`):\"boolean\"!==f&&\"array\"!==f&&\"object\"!==f||(g=t(`JsonSchema_${f}`)),g||v||(y=!0),h){const e=t(\"Select\");return A.createElement(e,{className:o.length?\"invalid\":\"\",title:o.length?o:\"\",multiple:!0,value:u,disabled:i,allowedValues:h,allowEmptyValue:!n,onChange:this.onEnumChange})}const b=t(\"Button\");return A.createElement(\"div\",{className:\"json-schema-array\"},p?j()(u).call(u,((e,n)=>{var r;const l=(0,P.fromJS)([...j()(r=a()(o).call(o,(e=>e.index===n))).call(r,(e=>e.error))]);return A.createElement(\"div\",{key:n,className:\"json-schema-form-item\"},v?A.createElement(or,{value:e,onChange:e=>this.onItemChange(e,n),disabled:i,errors:l,getComponent:t}):y?A.createElement(rr,{value:e,onChange:e=>this.onItemChange(e,n),disabled:i,errors:l}):A.createElement(g,Kt()({},this.props,{value:e,onChange:e=>this.onItemChange(e,n),disabled:i,errors:l,schema:m,getComponent:t,fn:s})),i?null:A.createElement(b,{className:`btn btn-sm json-schema-form-item-remove ${c.length?\"invalid\":null}`,title:c.length?c:\"\",onClick:()=>this.removeItem(n)},\" - \"))})):null,i?null:A.createElement(b,{className:`btn btn-sm json-schema-form-item-add ${l.length?\"invalid\":null}`,title:l.length?l:\"\",onClick:this.addItem},\"Add \",f?`${f} `:\"\",\"item\"))}}le()(nr,\"defaultProps\",Qn);class rr extends A.Component{constructor(){super(...arguments),le()(this,\"onChange\",(e=>{const t=e.target.value;this.props.onChange(t,this.props.keyName)}))}render(){let{value:e,errors:t,description:n,disabled:r}=this.props;return e||(e=\"\"),t=t.toJS?t.toJS():[],A.createElement(Xn(),{type:\"text\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",value:e,minLength:0,debounceTimeout:350,placeholder:n,onChange:this.onChange,disabled:r})}}le()(rr,\"defaultProps\",Qn);class or extends A.Component{constructor(){super(...arguments),le()(this,\"onFileChange\",(e=>{const t=e.target.files[0];this.props.onChange(t,this.props.keyName)}))}render(){let{getComponent:e,errors:t,disabled:n}=this.props;const r=e(\"Input\"),o=n||!(\"FormData\"in window);return A.createElement(r,{type:\"file\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",onChange:this.onFileChange,disabled:o})}}le()(or,\"defaultProps\",Qn);class sr extends A.Component{constructor(){super(...arguments),le()(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,errors:n,schema:r,required:o,disabled:s}=this.props;n=n.toJS?n.toJS():[];let i=r&&r.get?r.get(\"enum\"):null,a=!i||!o,l=!i&&[\"true\",\"false\"];const c=e(\"Select\");return A.createElement(c,{className:n.length?\"invalid\":\"\",title:n.length?n:\"\",value:String(t),disabled:s,allowedValues:i?[...i]:l,allowEmptyValue:a,onChange:this.onEnumChange})}}le()(sr,\"defaultProps\",Qn);const ir=e=>j()(e).call(e,(e=>{const t=void 0!==e.propKey?e.propKey:e.index;let n=\"string\"==typeof e?e:\"string\"==typeof e.error?e.error:null;if(!t&&n)return n;let r=e.error,o=`/${e.propKey}`;for(;\"object\"==typeof r;){const e=void 0!==r.propKey?r.propKey:r.index;if(void 0===e)break;if(o+=`/${e}`,!r.error)break;r=r.error}return`${o}: ${r}`}));class ar extends A.PureComponent{constructor(){super(),le()(this,\"onChange\",(e=>{this.props.onChange(e)})),le()(this,\"handleOnChange\",(e=>{const t=e.target.value;this.onChange(t)}))}render(){let{getComponent:e,value:t,errors:n,disabled:r}=this.props;const o=e(\"TextArea\");return n=n.toJS?n.toJS():E()(n)?n:[],A.createElement(\"div\",null,A.createElement(o,{className:st()({invalid:n.length}),title:n.length?ir(n).join(\", \"):\"\",value:(0,L.Pz)(t),disabled:r,onChange:this.handleOnChange}))}}function lr(e){return P.List.isList(e)?e:E()(e)?(0,P.fromJS)(e):(0,P.List)()}function cr(){let n={components:{App:fe,authorizationPopup:de,authorizeBtn:me,AuthorizeBtnContainer:ge,authorizeOperationBtn:ye,auths:ve,AuthItem:be,authError:we,oauth2:Fe,apiKeyAuth:Ee,basicAuth:xe,clear:Le,liveResponse:qe,InitializedInput:pn,info:mn,InfoContainer:gn,InfoUrl:fn,InfoBasePath:hn,Contact:vn,License:wn,JumpToPath:En,CopyToClipboardBtn:xn,onlineValidatorBadge:Ue.Z,operations:ze,operation:Je,OperationSummary:Ge,OperationSummaryMethod:Ze,OperationSummaryPath:Qe,highlightCode:mt,responses:gt,response:wt,ResponseExtension:Et,responseBody:At,parameters:Nt,parameterRow:Dt,execute:Bt,headers:$t,errors:qt,contentType:Wt,overview:cn,footer:Sn,FilterContainer:_n,ParamBody:On,curl:An,schemes:Cn,SchemesContainer:Pn,modelExample:Rn,ModelWrapper:Mn,ModelCollapse:Nn,Model:Dn.Z,Models:Fn,EnumModel:Ln,ObjectModel:Bn,ArrayModel:$n,PrimitiveModel:Un,Property:zn,TryItOutButton:Vn,Markdown:Gn.Z,BaseLayout:Zn,VersionPragmaFilter:Wn,VersionStamp:Jn,OperationExt:et,OperationExtRow:tt,ParameterExt:It,ParameterIncludeEmpty:Rt,OperationTag:We,OperationContainer:he,DeepLink:Kn,SvgAssets:Hn,Example:Se,ExamplesSelect:Oe,ExamplesSelectValueRetainer:Ae}},r={components:e},o={components:t};return[ne.default,ee.default,Y.default,H.default,K.default,W.default,J.default,G.default,n,r,X.default,o,Q.default,te.default,re.default,oe.default,se.default,Z.default,(0,ie.default)()]}le()(ar,\"defaultProps\",Qn);var ur=n(97451),pr=n(29806),hr=n(97139);function fr(){return[cr,ur.default,hr.default,pr.default]}var dr=n(45308);const{GIT_DIRTY:mr,GIT_COMMIT:gr,PACKAGE_VERSION:yr,BUILD_TIME:vr}={PACKAGE_VERSION:\"5.1.0\",GIT_COMMIT:\"gc1cc7a3\",GIT_DIRTY:!0,BUILD_TIME:\"Mon, 19 Jun 2023 09:16:15 GMT\"};function br(e){var t;F.Z.versions=F.Z.versions||{},F.Z.versions.swaggerUi={version:yr,gitRevision:gr,gitDirty:mr,buildTimestamp:vr};const n={dom_id:null,domNode:null,spec:{},url:\"\",urls:null,layout:\"BaseLayout\",docExpansion:\"list\",maxDisplayedTags:null,filter:null,validatorUrl:\"https://validator.swagger.io/validator\",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,s()(t=window.location.pathname).call(t,\"/\"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:e=>e,responseInterceptor:e=>e,showMutatedRequest:!0,defaultModelRendering:\"example\",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:\"cURL (bash)\",syntax:\"bash\"},curl_powershell:{title:\"cURL (PowerShell)\",syntax:\"powershell\"},curl_cmd:{title:\"cURL (CMD)\",syntax:\"bash\"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],queryConfigEnabled:!1,presets:[fr],plugins:[],pluginsOptions:{pluginLoadType:\"legacy\"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:\"agate\"}};let r=e.queryConfigEnabled?(0,L.UG)():{};const o=e.domNode;delete e.domNode;const i=f()({},n,e,r),l={system:{configs:i.configs},plugins:i.presets,pluginsOptions:i.pluginsOptions,state:f()({layout:{layout:i.layout,filter:a()(i)},spec:{spec:\"\",url:i.url},requestSnippets:i.requestSnippets},i.initialState)};if(i.initialState)for(var u in i.initialState)Object.prototype.hasOwnProperty.call(i.initialState,u)&&void 0===i.initialState[u]&&delete l.state[u];var h=new $(l);h.register([i.plugins,()=>({fn:i.fn,components:i.components,state:i.state})]);var d=h.getSystem();const m=e=>{let t=d.specSelectors.getLocalConfig?d.specSelectors.getLocalConfig():{},n=f()({},t,i,e||{},r);if(o&&(n.domNode=o),h.setConfigs(n),d.configsActions.loaded(),null!==e&&(!r.url&&\"object\"==typeof n.spec&&c()(n.spec).length?(d.specActions.updateUrl(\"\"),d.specActions.updateLoadingStatus(\"success\"),d.specActions.updateSpec(p()(n.spec))):d.specActions.download&&n.url&&!n.urls&&(d.specActions.updateUrl(n.url),d.specActions.download(n.url))),n.domNode)d.render(n.domNode,\"App\");else if(n.dom_id){let e=document.querySelector(n.dom_id);d.render(e,\"App\")}else null===n.dom_id||null===n.domNode||console.error(\"Skipped rendering: no `dom_id` or `domNode` was specified\");return d},g=r.config||i.configUrl;return g&&d.specActions&&d.specActions.getConfigByUrl?(d.specActions.getConfigByUrl({url:g,loadRemoteConfig:!0,requestInterceptor:i.requestInterceptor,responseInterceptor:i.responseInterceptor},m),d):m()}br.presets={apis:fr},br.plugins=dr.default;const wr=br})(),r=r.default})()));\n//# sourceMappingURL=swagger-ui-bundle.js.map"
  },
  {
    "path": "data/web/api/swagger-ui-es-bundle-core.js",
    "content": "/*! For license information please see swagger-ui-es-bundle-core.js.LICENSE.txt */\nimport*as e from\"react-immutable-pure-component\";import*as t from\"remarkable/linkify\";import*as a from\"dompurify\";import*as n from\"zenscroll\";import*as r from\"lodash/reduce\";import*as s from\"@babel/runtime-corejs3/core-js-stable/string/raw\";import*as o from\"@babel/runtime-corejs3/core-js-stable/number/epsilon\";import*as l from\"@babel/runtime-corejs3/core-js-stable/instance/repeat\";import*as i from\"@babel/runtime-corejs3/core-js-stable/instance/fill\";import*as c from\"lodash/zipObject\";import*as u from\"@babel/runtime-corejs3/core-js-stable/promise\";import*as d from\"@babel/runtime-corejs3/core-js-stable/date/now\";import*as p from\"lodash/isString\";import*as m from\"lodash/debounce\";import*as f from\"lodash/set\";import*as h from\"lodash/fp/assocPath\";import*as g from\"swagger-client/es/resolver/strategies/generic\";import*as y from\"swagger-client/es/resolver/strategies/openapi-2\";import*as v from\"swagger-client/es/resolver/strategies/openapi-3-0\";import*as E from\"swagger-client/es/resolver/strategies/openapi-3-1-apidom\";import*as S from\"swagger-client/es/resolver\";import*as w from\"swagger-client/es/execute\";import*as b from\"swagger-client/es/http\";import*as x from\"swagger-client/es/subtree-resolver\";import*as _ from\"react-dom\";import*as C from\"react-redux\";import*as j from\"lodash/omit\";import*as O from\"react-syntax-highlighter/dist/esm/light\";import*as N from\"react-syntax-highlighter/dist/esm/languages/hljs/javascript\";import*as k from\"react-syntax-highlighter/dist/esm/languages/hljs/json\";import*as A from\"react-syntax-highlighter/dist/esm/languages/hljs/xml\";import*as I from\"react-syntax-highlighter/dist/esm/languages/hljs/bash\";import*as R from\"react-syntax-highlighter/dist/esm/languages/hljs/yaml\";import*as P from\"react-syntax-highlighter/dist/esm/languages/hljs/http\";import*as T from\"react-syntax-highlighter/dist/esm/languages/hljs/powershell\";import*as M from\"react-syntax-highlighter/dist/esm/styles/hljs/agate\";import*as D from\"react-syntax-highlighter/dist/esm/styles/hljs/arta\";import*as L from\"react-syntax-highlighter/dist/esm/styles/hljs/monokai\";import*as q from\"react-syntax-highlighter/dist/esm/styles/hljs/nord\";import*as B from\"react-syntax-highlighter/dist/esm/styles/hljs/obsidian\";import*as U from\"react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night\";import*as J from\"@babel/runtime-corejs3/core-js-stable/instance/starts-with\";import*as $ from\"@braintree/sanitize-url\";import*as K from\"lodash/camelCase\";import*as V from\"lodash/upperFirst\";import*as F from\"lodash/find\";import*as z from\"lodash/eq\";import*as W from\"css.escape\";import*as H from\"@babel/runtime-corejs3/core-js-stable/instance/find-index\";import*as G from\"@babel/runtime-corejs3/core-js-stable/array/from\";import*as Z from\"@babel/runtime-corejs3/core-js-stable/array/is-array\";import*as Y from\"@babel/runtime-corejs3/core-js-stable/instance/bind\";import*as X from\"@babel/runtime-corejs3/core-js-stable/instance/concat\";import*as Q from\"@babel/runtime-corejs3/core-js-stable/instance/entries\";import*as ee from\"@babel/runtime-corejs3/core-js-stable/instance/every\";import*as te from\"@babel/runtime-corejs3/core-js-stable/instance/filter\";import*as ae from\"@babel/runtime-corejs3/core-js-stable/instance/find\";import*as ne from\"@babel/runtime-corejs3/core-js-stable/instance/for-each\";import*as re from\"@babel/runtime-corejs3/core-js-stable/instance/includes\";import*as se from\"@babel/runtime-corejs3/core-js-stable/instance/index-of\";import*as oe from\"@babel/runtime-corejs3/core-js-stable/instance/keys\";import*as le from\"@babel/runtime-corejs3/core-js-stable/instance/map\";import*as ie from\"@babel/runtime-corejs3/core-js-stable/instance/reduce\";import*as ce from\"@babel/runtime-corejs3/core-js-stable/instance/slice\";import*as ue from\"@babel/runtime-corejs3/core-js-stable/instance/some\";import*as de from\"@babel/runtime-corejs3/core-js-stable/instance/sort\";import*as pe from\"@babel/runtime-corejs3/core-js-stable/instance/trim\";import*as me from\"@babel/runtime-corejs3/core-js-stable/json/stringify\";import*as fe from\"@babel/runtime-corejs3/core-js-stable/map\";import*as he from\"@babel/runtime-corejs3/core-js-stable/number/is-integer\";import*as ge from\"@babel/runtime-corejs3/core-js-stable/object/assign\";import*as ye from\"@babel/runtime-corejs3/core-js-stable/object/entries\";import*as ve from\"@babel/runtime-corejs3/core-js-stable/object/from-entries\";import*as Ee from\"@babel/runtime-corejs3/core-js-stable/object/keys\";import*as Se from\"@babel/runtime-corejs3/core-js-stable/object/values\";import*as we from\"@babel/runtime-corejs3/core-js-stable/set\";import*as be from\"@babel/runtime-corejs3/core-js-stable/set-timeout\";import*as xe from\"@babel/runtime-corejs3/core-js-stable/url\";import*as _e from\"@babel/runtime-corejs3/core-js-stable/weak-map\";import*as Ce from\"@babel/runtime-corejs3/core-js-stable/weak-set\";import*as je from\"@babel/runtime-corejs3/helpers/classPrivateFieldGet\";import*as Oe from\"@babel/runtime-corejs3/helpers/defineProperty\";import*as Ne from\"@babel/runtime-corejs3/helpers/extends\";import*as ke from\"base64-js\";import*as Ae from\"classnames\";import*as Ie from\"ieee754\";import*as Re from\"immutable\";import*as Pe from\"js-yaml\";import*as Te from\"lodash/get\";import*as Me from\"lodash/identity\";import*as De from\"lodash/isEmpty\";import*as Le from\"lodash/isFunction\";import*as qe from\"lodash/isPlainObject\";import*as Be from\"lodash/memoize\";import*as Ue from\"lodash/some\";import*as Je from\"prop-types\";import*as $e from\"randexp\";import*as Ke from\"react\";import*as Ve from\"react-copy-to-clipboard\";import*as Fe from\"react-immutable-proptypes\";import*as ze from\"redux\";import*as We from\"remarkable\";import*as He from\"reselect\";import*as Ge from\"serialize-error\";import*as Ze from\"swagger-client/es/helpers\";import*as Ye from\"url-parse\";import*as Xe from\"@babel/runtime-corejs3/core-js-stable/instance/last-index-of\";import*as Qe from\"redux-immutable\";import*as et from\"lodash/merge\";import*as tt from\"lodash/toString\";import*as at from\"@babel/runtime-corejs3/core-js-stable/instance/splice\";import*as nt from\"js-file-download\";import*as rt from\"@babel/runtime-corejs3/core-js-stable/instance/values\";import*as st from\"xml-but-prettier\";import*as ot from\"lodash/toLower\";import*as lt from\"react-debounce-input\";var it={1543:(t,a,n)=>{n.d(a,{Z:()=>m});var r=n(863),s=n(775),o=n(8818),l=n(2565),i=n(810);const c=(e=>{var t={};return n.d(t,e),t})({default:()=>e.default});var u=n(9569),d=n(5053);const p=e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}};class m extends c.default{constructor(){super(...arguments),(0,s.default)(this,\"getModelName\",(e=>-1!==(0,o.default)(e).call(e,\"#/definitions/\")?p(e.replace(/^.*#\\/definitions\\//,\"\")):-1!==(0,o.default)(e).call(e,\"#/components/schemas/\")?p(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):void 0)),(0,s.default)(this,\"getRefSchema\",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:a,schema:s,required:o,name:l,isRef:c,specPath:u,displayName:d,includeReadOnly:p,includeWriteOnly:m}=this.props;const f=e(\"ObjectModel\"),h=e(\"ArrayModel\"),g=e(\"PrimitiveModel\");let y=\"object\",v=s&&s.get(\"$$ref\");if(!l&&v&&(l=this.getModelName(v)),!s&&v&&(s=this.getRefSchema(l)),!s)return i.default.createElement(\"span\",{className:\"model model-title\"},i.default.createElement(\"span\",{className:\"model-title__text\"},d||l),i.default.createElement(\"img\",{src:n(2517),height:\"20px\",width:\"20px\"}));const E=a.isOAS3()&&s.get(\"deprecated\");switch(c=void 0!==c?c:!!v,y=s&&s.get(\"type\")||y,y){case\"object\":return i.default.createElement(f,(0,r.default)({className:\"object\"},this.props,{specPath:u,getConfigs:t,schema:s,name:l,deprecated:E,isRef:c,includeReadOnly:p,includeWriteOnly:m}));case\"array\":return i.default.createElement(h,(0,r.default)({className:\"array\"},this.props,{getConfigs:t,schema:s,name:l,deprecated:E,required:o,includeReadOnly:p,includeWriteOnly:m}));default:return i.default.createElement(g,(0,r.default)({},this.props,{getComponent:e,getConfigs:t,schema:s,name:l,deprecated:E,required:o}))}}}(0,s.default)(m,\"propTypes\",{schema:(0,l.default)(u.default).isRequired,getComponent:d.default.func.isRequired,getConfigs:d.default.func.isRequired,specSelectors:d.default.object.isRequired,name:d.default.string,displayName:d.default.string,isRef:d.default.bool,required:d.default.bool,expandDepth:d.default.number,depth:d.default.number,specPath:u.default.list.isRequired,includeReadOnly:d.default.bool,includeWriteOnly:d.default.bool})},5623:(e,t,a)=>{a.d(t,{Z:()=>c});var n=a(775),r=a(2740),s=a(810),o=a(8900),l=(a(5053),a(6561)),i=a(7504);class c extends s.default.Component{constructor(e,t){super(e,t),(0,n.default)(this,\"getDefinitionUrl\",(()=>{let{specSelectors:e}=this.props;return new o.default(e.url(),i.Z.location).toString()}));let{getConfigs:a}=e,{validatorUrl:r}=a();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===r?\"https://validator.swagger.io/validator\":r}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:a}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===a?\"https://validator.swagger.io/validator\":a})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),a=(0,l.Nm)(this.state.validatorUrl);return\"object\"==typeof t&&(0,r.default)(t).length?null:this.state.url&&(0,l.hW)(this.state.validatorUrl)&&(0,l.hW)(this.state.url)?s.default.createElement(\"span\",{className:\"float-right\"},s.default.createElement(\"a\",{target:\"_blank\",rel:\"noopener noreferrer\",href:`${a}/debug?url=${encodeURIComponent(this.state.url)}`},s.default.createElement(u,{src:`${a}?url=${encodeURIComponent(this.state.url)}`,alt:\"Online validator badge\"}))):null}}class u extends s.default.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?s.default.createElement(\"img\",{alt:\"Error\"}):this.state.loaded?s.default.createElement(\"img\",{src:this.props.src,alt:this.props.alt}):null}}},5466:(e,n,r)=>{r.d(n,{Z:()=>d,s:()=>p});var s=r(810),o=(r(5053),r(3952));const l=(e=>{var t={};return r.d(t,e),t})({linkify:()=>t.linkify});const i=(e=>{var t={};return r.d(t,e),t})({default:()=>a.default});var c=r(8096);function u(e){let{source:t,className:a=\"\",getConfigs:n}=e;if(\"string\"!=typeof t)return null;const r=new o.Remarkable({html:!0,typographer:!0,breaks:!0,linkTarget:\"_blank\"}).use(l.linkify);r.core.ruler.disable([\"replacements\",\"smartquotes\"]);const{useUnsafeMarkdown:i}=n(),u=r.render(t),d=p(u,{useUnsafeMarkdown:i});return t&&u&&d?s.default.createElement(\"div\",{className:(0,c.default)(a,\"markdown\"),dangerouslySetInnerHTML:{__html:d}}):null}i.default.addHook&&i.default.addHook(\"beforeSanitizeElements\",(function(e){return e.href&&e.setAttribute(\"rel\",\"noopener noreferrer\"),e})),u.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const d=u;function p(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a=t,n=t?[]:[\"style\",\"class\"];return t&&!p.hasWarnedAboutDeprecation&&(console.warn(\"useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0.\"),p.hasWarnedAboutDeprecation=!0),i.default.sanitize(e,{ADD_ATTR:[\"target\"],FORBID_TAGS:[\"style\",\"form\"],ALLOW_DATA_ATTR:a,FORBID_ATTR:n})}p.hasWarnedAboutDeprecation=!1},5308:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n,r=a(29),s=a(5487),o=a(6561),l=a(8102);const i=a(5102),c={},u=c;(0,r.default)(n=(0,s.default)(i).call(i)).call(n,(function(e){if(\"./index.js\"===e)return;let t=i(e);c[(0,o.Zl)(e)]=t.default?t.default:t})),c.SafeRender=l.default},5812:(e,t,a)=>{a.r(t),a.d(t,{AUTHORIZE:()=>c,AUTHORIZE_OAUTH2:()=>p,CONFIGURE_AUTH:()=>f,LOGOUT:()=>u,PRE_AUTHORIZE_OAUTH2:()=>d,RESTORE_AUTHORIZATION:()=>h,SHOW_AUTH_POPUP:()=>i,VALIDATE:()=>m,authPopup:()=>R,authorize:()=>y,authorizeAccessCodeWithBasicAuthentication:()=>O,authorizeAccessCodeWithFormParams:()=>j,authorizeApplication:()=>C,authorizeOauth2:()=>b,authorizeOauth2WithPersistOption:()=>x,authorizePassword:()=>_,authorizeRequest:()=>N,authorizeWithPersistOption:()=>v,configureAuth:()=>k,logout:()=>E,logoutWithPersistOption:()=>S,persistAuthorizationIfNeeded:()=>I,preAuthorizeImplicit:()=>w,restoreAuthorization:()=>A,showDefinitions:()=>g});var n=a(313),r=a(7512),s=a(8900),o=a(7504),l=a(6561);const i=\"show_popup\",c=\"authorize\",u=\"logout\",d=\"pre_authorize_oauth2\",p=\"authorize_oauth2\",m=\"validate\",f=\"configure_auth\",h=\"restore_authorization\";function g(e){return{type:i,payload:e}}function y(e){return{type:c,payload:e}}const v=e=>t=>{let{authActions:a}=t;a.authorize(e),a.persistAuthorizationIfNeeded()};function E(e){return{type:u,payload:e}}const S=e=>t=>{let{authActions:a}=t;a.logout(e),a.persistAuthorizationIfNeeded()},w=e=>t=>{let{authActions:a,errActions:r}=t,{auth:s,token:l,isValid:i}=e,{schema:c,name:u}=s,d=c.get(\"flow\");delete o.Z.swaggerUIRedirectOauth2,\"accessCode\"===d||i||r.newAuthErr({authId:u,source:\"auth\",level:\"warning\",message:\"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server\"}),l.error?r.newAuthErr({authId:u,source:\"auth\",level:\"error\",message:(0,n.default)(l)}):a.authorizeOauth2WithPersistOption({auth:s,token:l})};function b(e){return{type:p,payload:e}}const x=e=>t=>{let{authActions:a}=t;a.authorizeOauth2(e),a.persistAuthorizationIfNeeded()},_=e=>t=>{let{authActions:a}=t,{schema:n,name:s,username:o,password:i,passwordType:c,clientId:u,clientSecret:d}=e,p={grant_type:\"password\",scope:e.scopes.join(\" \"),username:o,password:i},m={};switch(c){case\"request-body\":!function(e,t,a){t&&(0,r.default)(e,{client_id:t});a&&(0,r.default)(e,{client_secret:a})}(p,u,d);break;case\"basic\":m.Authorization=\"Basic \"+(0,l.r3)(u+\":\"+d);break;default:console.warn(`Warning: invalid passwordType ${c} was passed, not including client id and secret`)}return a.authorizeRequest({body:(0,l.GZ)(p),url:n.get(\"tokenUrl\"),name:s,headers:m,query:{},auth:e})};const C=e=>t=>{let{authActions:a}=t,{schema:n,scopes:r,name:s,clientId:o,clientSecret:i}=e,c={Authorization:\"Basic \"+(0,l.r3)(o+\":\"+i)},u={grant_type:\"client_credentials\",scope:r.join(\" \")};return a.authorizeRequest({body:(0,l.GZ)(u),name:s,url:n.get(\"tokenUrl\"),auth:e,headers:c})},j=e=>{let{auth:t,redirectUrl:a}=e;return e=>{let{authActions:n}=e,{schema:r,name:s,clientId:o,clientSecret:i,codeVerifier:c}=t,u={grant_type:\"authorization_code\",code:t.code,client_id:o,client_secret:i,redirect_uri:a,code_verifier:c};return n.authorizeRequest({body:(0,l.GZ)(u),name:s,url:r.get(\"tokenUrl\"),auth:t})}},O=e=>{let{auth:t,redirectUrl:a}=e;return e=>{let{authActions:n}=e,{schema:r,name:s,clientId:o,clientSecret:i,codeVerifier:c}=t,u={Authorization:\"Basic \"+(0,l.r3)(o+\":\"+i)},d={grant_type:\"authorization_code\",code:t.code,client_id:o,redirect_uri:a,code_verifier:c};return n.authorizeRequest({body:(0,l.GZ)(d),name:s,url:r.get(\"tokenUrl\"),auth:t,headers:u})}},N=e=>t=>{let a,{fn:o,getConfigs:l,authActions:i,errActions:c,oas3Selectors:u,specSelectors:d,authSelectors:p}=t,{body:m,query:f={},headers:h={},name:g,url:y,auth:v}=e,{additionalQueryStringParams:E}=p.getConfigs()||{};if(d.isOAS3()){let e=u.serverEffectiveValue(u.selectedServer());a=(0,s.default)(y,e,!0)}else a=(0,s.default)(y,d.url(),!0);\"object\"==typeof E&&(a.query=(0,r.default)({},a.query,E));const S=a.toString();let w=(0,r.default)({Accept:\"application/json, text/plain, */*\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-Requested-With\":\"XMLHttpRequest\"},h);o.fetch({url:S,method:\"post\",headers:w,query:f,body:m,requestInterceptor:l().requestInterceptor,responseInterceptor:l().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),a=t&&(t.error||\"\"),r=t&&(t.parseError||\"\");e.ok?a||r?c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:(0,n.default)(t)}):i.authorizeOauth2WithPersistOption({auth:v,token:t}):c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const a=e.response.data;try{const e=\"string\"==typeof a?JSON.parse(a):a;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:t})}))};function k(e){return{type:f,payload:e}}function A(e){return{type:h,payload:e}}const I=()=>e=>{let{authSelectors:t,getConfigs:a}=e;if(!a().persistAuthorization)return;const r=t.authorized().toJS();localStorage.setItem(\"authorized\",(0,n.default)(r))},R=(e,t)=>()=>{o.Z.swaggerUIRedirectOauth2=t,o.Z.open(e)}},3779:(e,t,a)=>{a.r(t),a.d(t,{loaded:()=>n});const n=(e,t)=>a=>{const{getConfigs:n,authActions:r}=t,s=n();if(e(a),s.persistAuthorization){const e=localStorage.getItem(\"authorized\");e&&r.restoreAuthorization({authorized:JSON.parse(e)})}}},3705:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u,preauthorizeApiKey:()=>p,preauthorizeBasic:()=>d});var n=a(5527),r=a(3962),s=a(5812),o=a(35),l=a(489),i=a(3779),c=a(2849);function u(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=(0,n.default)(p).call(p,null,e),this.rootInjects.preauthorizeBasic=(0,n.default)(d).call(d,null,e)},statePlugins:{auth:{reducers:r.default,actions:s,selectors:o,wrapActions:{authorize:c.authorize,logout:c.logout}},configs:{wrapActions:{loaded:i.loaded}},spec:{wrapActions:{execute:l.execute}}}}}function d(e,t,a,n){const{authActions:{authorize:r},specSelectors:{specJson:s,isOAS3:o}}=e,l=o()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],i=s().getIn([...l,t]);return i?r({[t]:{value:{username:a,password:n},schema:i.toJS()}}):null}function p(e,t,a){const{authActions:{authorize:n},specSelectors:{specJson:r,isOAS3:s}}=e,o=s()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],l=r().getIn([...o,t]);return l?n({[t]:{value:a,schema:l.toJS()}}):null}},3962:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(29),r=a(7512),s=a(9725),o=a(6561),l=a(5812);const i={[l.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:a}=t;return e.set(\"showDefinitions\",a)},[l.AUTHORIZE]:(e,t)=>{var a;let{payload:r}=t,l=(0,s.fromJS)(r),i=e.get(\"authorized\")||(0,s.Map)();return(0,n.default)(a=l.entrySeq()).call(a,(t=>{let[a,n]=t;if(!(0,o.Wl)(n.getIn))return e.set(\"authorized\",i);let r=n.getIn([\"schema\",\"type\"]);if(\"apiKey\"===r||\"http\"===r)i=i.set(a,n);else if(\"basic\"===r){let e=n.getIn([\"value\",\"username\"]),t=n.getIn([\"value\",\"password\"]);i=i.setIn([a,\"value\"],{username:e,header:\"Basic \"+(0,o.r3)(e+\":\"+t)}),i=i.setIn([a,\"schema\"],n.get(\"schema\"))}})),e.set(\"authorized\",i)},[l.AUTHORIZE_OAUTH2]:(e,t)=>{let a,{payload:n}=t,{auth:o,token:l}=n;o.token=(0,r.default)({},l),a=(0,s.fromJS)(o);let i=e.get(\"authorized\")||(0,s.Map)();return i=i.set(a.get(\"name\"),a),e.set(\"authorized\",i)},[l.LOGOUT]:(e,t)=>{let{payload:a}=t,r=e.get(\"authorized\").withMutations((e=>{(0,n.default)(a).call(a,(t=>{e.delete(t)}))}));return e.set(\"authorized\",r)},[l.CONFIGURE_AUTH]:(e,t)=>{let{payload:a}=t;return e.set(\"configs\",a)},[l.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:a}=t;return e.set(\"authorized\",(0,s.fromJS)(a.authorized))}}},35:(e,t,a)=>{a.r(t),a.d(t,{authorized:()=>g,definitionsForRequirements:()=>h,definitionsToAuthorize:()=>m,getConfigs:()=>v,getDefinitionsByNames:()=>f,isAuthorized:()=>y,shownDefinitions:()=>p});var n=a(29),r=a(1778),s=a(6145),o=a(8818),l=a(2565),i=a(2740),c=a(8639),u=a(9725);const d=e=>e,p=(0,c.createSelector)(d,(e=>e.get(\"showDefinitions\"))),m=(0,c.createSelector)(d,(()=>e=>{var t;let{specSelectors:a}=e,r=a.securityDefinitions()||(0,u.Map)({}),s=(0,u.List)();return(0,n.default)(t=r.entrySeq()).call(t,(e=>{let[t,a]=e,n=(0,u.Map)();n=n.set(t,a),s=s.push(n)})),s})),f=(e,t)=>e=>{var a;let{specSelectors:r}=e;console.warn(\"WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.\");let s=r.securityDefinitions(),o=(0,u.List)();return(0,n.default)(a=t.valueSeq()).call(a,(e=>{var t;let a=(0,u.Map)();(0,n.default)(t=e.entrySeq()).call(t,(e=>{let t,[r,o]=e,l=s.get(r);var i;\"oauth2\"===l.get(\"type\")&&o.size&&(t=l.get(\"scopes\"),(0,n.default)(i=t.keySeq()).call(i,(e=>{o.contains(e)||(t=t.delete(e))})),l=l.set(\"allowedScopes\",t));a=a.set(r,l)})),o=o.push(a)})),o},h=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,u.List)();return e=>{let{authSelectors:a}=e;const s=a.definitionsToAuthorize()||(0,u.List)();let o=(0,u.List)();return(0,n.default)(s).call(s,(e=>{let a=(0,r.default)(t).call(t,(t=>t.get(e.keySeq().first())));a&&((0,n.default)(e).call(e,((t,r)=>{if(\"oauth2\"===t.get(\"type\")){const o=a.get(r);let l=t.get(\"scopes\");var s;if(u.List.isList(o)&&u.Map.isMap(l))(0,n.default)(s=l.keySeq()).call(s,(e=>{o.contains(e)||(l=l.delete(e))})),e=e.set(r,t.set(\"scopes\",l))}})),o=o.push(e))})),o}},g=(0,c.createSelector)(d,(e=>e.get(\"authorized\")||(0,u.Map)())),y=(e,t)=>e=>{var a;let{authSelectors:n}=e,r=n.authorized();return u.List.isList(t)?!!(0,s.default)(a=t.toJS()).call(a,(e=>{var t,a;return-1===(0,o.default)(t=(0,l.default)(a=(0,i.default)(e)).call(a,(e=>!!r.get(e)))).call(t,!1)})).length:null},v=(0,c.createSelector)(d,(e=>e.get(\"configs\")))},489:(e,t,a)=>{a.r(t),a.d(t,{execute:()=>n});const n=(e,t)=>{let{authSelectors:a,specSelectors:n}=t;return t=>{let{path:r,method:s,operation:o,extras:l}=t,i={authorized:a.authorized()&&a.authorized().toJS(),definitions:n.securityDefinitions()&&n.securityDefinitions().toJS(),specSecurity:n.security()&&n.security().toJS()};return e({path:r,method:s,operation:o,securities:i,...l})}}},2849:(e,t,a)=>{a.r(t),a.d(t,{authorize:()=>o,logout:()=>l});var n=a(374),r=a(4163),s=a(29);const o=(e,t)=>a=>{e(a);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=(0,n.default)(a),r=\"apiKey\"===e.get(\"type\"),s=\"cookie\"===e.get(\"in\");r&&s&&(document.cookie=`${e.get(\"name\")}=${t}; SameSite=None; Secure`)}catch(e){console.error(\"Error persisting cookie based apiKey in document.cookie.\",e)}},l=(e,t)=>a=>{const n=t.getConfigs(),o=t.authSelectors.authorized();try{n.persistAuthorization&&(0,r.default)(a)&&(0,s.default)(a).call(a,(e=>{const t=o.get(e,{}),a=\"apiKey\"===t.getIn([\"schema\",\"type\"]),n=\"cookie\"===t.getIn([\"schema\",\"in\"]);if(a&&n){const e=t.getIn([\"schema\",\"name\"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error(\"Error deleting cookie based apiKey from document.cookie.\",e)}e(a)}},714:(e,t,a)=>{a.r(t),a.d(t,{TOGGLE_CONFIGS:()=>r,UPDATE_CONFIGS:()=>n,loaded:()=>l,toggle:()=>o,update:()=>s});const n=\"configs_update\",r=\"configs_toggle\";function s(e,t){return{type:n,payload:{[e]:t}}}function o(e){return{type:r,payload:e}}const l=()=>()=>{}},2256:(e,t,a)=>{a.r(t),a.d(t,{parseYamlConfig:()=>r});var n=a(3772);const r=(e,t)=>{try{return n.default.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},6709:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(2256),r=a(714),s=a(2698),o=a(9018),l=a(7743);const i={getLocalConfig:()=>(0,n.parseYamlConfig)('---\\nurl: \"https://petstore.swagger.io/v2/swagger.json\"\\ndom_id: \"#swagger-ui\"\\nvalidatorUrl: \"https://validator.swagger.io/validator\"\\n')};function c(){return{statePlugins:{spec:{actions:s,selectors:i},configs:{reducers:l.default,actions:r,selectors:o}}}}},7743:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(9725),r=a(714);const s={[r.UPDATE_CONFIGS]:(e,t)=>e.merge((0,n.fromJS)(t.payload)),[r.TOGGLE_CONFIGS]:(e,t)=>{const a=t.payload,n=e.get(a);return e.set(a,!n)}}},9018:(e,t,a)=>{a.r(t),a.d(t,{get:()=>r});var n=a(4163);const r=(e,t)=>e.getIn((0,n.default)(t)?t:[t])},2698:(e,t,a)=>{a.r(t),a.d(t,{downloadConfig:()=>r,getConfigByUrl:()=>s});var n=a(2256);const r=e=>t=>{const{fn:{fetch:a}}=t;return a(e)},s=(e,t)=>a=>{let{specActions:r}=a;if(e)return r.downloadConfig(e).then(s,s);function s(a){a instanceof Error||a.status>=400?(r.updateLoadingStatus(\"failedConfig\"),r.updateLoadingStatus(\"failedConfig\"),r.updateUrl(\"\"),console.error(a.statusText+\" \"+e.url),t(null)):t((0,n.parseYamlConfig)(a.text))}}},1970:(e,t,a)=>{a.r(t),a.d(t,{setHash:()=>n});const n=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=\"\"},4980:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(5858),r=a(877),s=a(4584);function o(){return[n.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const a=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(a)}}}},wrapComponents:{operation:r.default,OperationTag:s.default}}]}},5858:(e,t,a)=>{a.r(t),a.d(t,{clearScrollTo:()=>E,default:()=>S,parseDeepLinkHash:()=>g,readyToScroll:()=>y,scrollTo:()=>h,scrollToElement:()=>v,show:()=>f});var r=a(4163),s=a(8136),o=a(2565),l=a(8818),i=a(1970);const c=(e=>{var t={};return a.d(t,e),t})({default:()=>n.default});var u=a(6561),d=a(9725);const p=\"layout_scroll_to\",m=\"layout_clear_scroll\",f=(e,t)=>{let{getConfigs:a,layoutSelectors:n}=t;return function(){for(var t=arguments.length,s=new Array(t),o=0;o<t;o++)s[o]=arguments[o];if(e(...s),a().deepLinking)try{let[e,t]=s;e=(0,r.default)(e)?e:[e];const a=n.urlHashArrayFromIsShownKey(e);if(!a.length)return;const[o,l]=a;if(!t)return(0,i.setHash)(\"/\");2===a.length?(0,i.setHash)((0,u.oJ)(`/${encodeURIComponent(o)}/${encodeURIComponent(l)}`)):1===a.length&&(0,i.setHash)((0,u.oJ)(`/${encodeURIComponent(o)}`))}catch(e){console.error(e)}}},h=e=>({type:p,payload:(0,r.default)(e)?e:[e]}),g=e=>t=>{let{layoutActions:a,layoutSelectors:n,getConfigs:r}=t;if(r().deepLinking&&e){var i;let t=(0,s.default)(e).call(e,1);\"!\"===t[0]&&(t=(0,s.default)(t).call(t,1)),\"/\"===t[0]&&(t=(0,s.default)(t).call(t,1));const r=(0,o.default)(i=t.split(\"/\")).call(i,(e=>e||\"\")),c=n.isShownKeyFromUrlHashArray(r),[u,d=\"\",p=\"\"]=c;if(\"operations\"===u){const e=n.isShownKeyFromUrlHashArray([d]);(0,l.default)(d).call(d,\"_\")>-1&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),a.show((0,o.default)(e).call(e,(e=>e.replace(/_/g,\" \"))),!0)),a.show(e,!0)}((0,l.default)(d).call(d,\"_\")>-1||(0,l.default)(p).call(p,\"_\")>-1)&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),a.show((0,o.default)(c).call(c,(e=>e.replace(/_/g,\" \"))),!0)),a.show(c,!0),a.scrollTo(c)}},y=(e,t)=>a=>{const n=a.layoutSelectors.getScrollToKey();d.default.is(n,(0,d.fromJS)(e))&&(a.layoutActions.scrollToElement(t),a.layoutActions.clearScrollTo())},v=(e,t)=>a=>{try{t=t||a.fn.getScrollParent(e),c.default.createScroller(t).to(e)}catch(e){console.error(e)}},E=()=>({type:m});const S={fn:{getScrollParent:function(e,t){const a=document.documentElement;let n=getComputedStyle(e);const r=\"absolute\"===n.position,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if(\"fixed\"===n.position)return a;for(let t=e;t=t.parentElement;)if(n=getComputedStyle(t),(!r||\"static\"!==n.position)&&s.test(n.overflow+n.overflowY+n.overflowX))return t;return a}},statePlugins:{layout:{actions:{scrollToElement:v,scrollTo:h,clearScrollTo:E,readyToScroll:y,parseDeepLinkHash:g},selectors:{getScrollToKey:e=>e.get(\"scrollToKey\"),isShownKeyFromUrlHashArray(e,t){const[a,n]=t;return n?[\"operations\",a,n]:a?[\"operations-tag\",a]:[]},urlHashArrayFromIsShownKey(e,t){let[a,n,r]=t;return\"operations\"==a?[n,r]:\"operations-tag\"==a?[n]:[]}},reducers:{[p]:(e,t)=>e.set(\"scrollToKey\",d.default.fromJS(t.payload)),[m]:e=>e.delete(\"scrollToKey\")},wrapActions:{show:f}}}}},4584:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(775),r=a(810);a(5053);const s=(e,t)=>class extends r.default.Component{constructor(){super(...arguments),(0,n.default)(this,\"onLoad\",(e=>{const{tag:a}=this.props,n=[\"operations-tag\",a];t.layoutActions.readyToScroll(n,e)}))}render(){return r.default.createElement(\"span\",{ref:this.onLoad},r.default.createElement(e,this.props))}}},877:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(775),r=a(810);a(9569);const s=(e,t)=>class extends r.default.Component{constructor(){super(...arguments),(0,n.default)(this,\"onLoad\",(e=>{const{operation:a}=this.props,{tag:n,operationId:r}=a.toObject();let{isShownKey:s}=a.toObject();s=s||[\"operations\",n,r],t.layoutActions.readyToScroll(s,e)}))}render(){return r.default.createElement(\"span\",{ref:this.onLoad},r.default.createElement(e,this.props))}}},8011:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(7512),r=a(3769),s=a(8818),o=a(313),l=a(8639),i=a(9725),c=a(7504);function u(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>a=>{let{errActions:s,specSelectors:o,specActions:l,getConfigs:i}=a,{fetch:u}=t;const d=i();function p(t){if(t instanceof Error||t.status>=400)return l.updateLoadingStatus(\"failed\"),s.newThrownErr((0,n.default)(new Error((t.message||t.statusText)+\" \"+e),{source:\"fetch\"})),void(!t.status&&t instanceof Error&&function(){try{let t;if(\"URL\"in c.Z?t=new r.default(e):(t=document.createElement(\"a\"),t.href=e),\"https:\"!==t.protocol&&\"https:\"===c.Z.location.protocol){const e=(0,n.default)(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:\"fetch\"});return void s.newThrownErr(e)}if(t.origin!==c.Z.location.origin){const e=(0,n.default)(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${c.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:\"fetch\"});s.newThrownErr(e)}}catch(e){return}}());l.updateLoadingStatus(\"success\"),l.updateSpec(t.text),o.url()!==e&&l.updateUrl(e)}e=e||o.url(),l.updateLoadingStatus(\"loading\"),s.clear({source:\"fetch\"}),u({url:e,loadSpec:!0,requestInterceptor:d.requestInterceptor||(e=>e),responseInterceptor:d.responseInterceptor||(e=>e),credentials:\"same-origin\",headers:{Accept:\"application/json,*/*\"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,\"loading\",\"failed\",\"success\",\"failedConfig\"];return-1===(0,s.default)(t).call(t,e)&&console.error(`Error: ${e} is not one of ${(0,o.default)(t)}`),{type:\"spec_update_loading_status\",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>\"string\"==typeof t.payload?e.set(\"loadingStatus\",t.payload):e},selectors:{loadingStatus:(0,l.createSelector)((e=>e||(0,i.Map)()),(e=>e.get(\"loadingStatus\")||null))}}}}}},4966:(e,t,a)=>{a.r(t),a.d(t,{CLEAR:()=>c,CLEAR_BY:()=>u,NEW_AUTH_ERR:()=>i,NEW_SPEC_ERR:()=>o,NEW_SPEC_ERR_BATCH:()=>l,NEW_THROWN_ERR:()=>r,NEW_THROWN_ERR_BATCH:()=>s,clear:()=>g,clearBy:()=>y,newAuthErr:()=>h,newSpecErr:()=>m,newSpecErrBatch:()=>f,newThrownErr:()=>d,newThrownErrBatch:()=>p});var n=a(8518);const r=\"err_new_thrown_err\",s=\"err_new_thrown_err_batch\",o=\"err_new_spec_err\",l=\"err_new_spec_err_batch\",i=\"err_new_auth_err\",c=\"err_clear\",u=\"err_clear_by\";function d(e){return{type:r,payload:(0,n.serializeError)(e)}}function p(e){return{type:s,payload:e}}function m(e){return{type:o,payload:e}}function f(e){return{type:l,payload:e}}function h(e){return{type:i,payload:e}}function g(){return{type:c,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function y(){return{type:u,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}},6808:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(6145),s=a(2565);const o=(e=>{var t={};return a.d(t,e),t})({default:()=>r.default});const l=[a(2392),a(1835)];function i(e){var t;let a={jsSpec:{}},r=(0,o.default)(l,((e,t)=>{try{let r=t.transform(e,a);return(0,n.default)(r).call(r,(e=>!!e))}catch(t){return console.error(\"Transformer error:\",t),e}}),e);return(0,s.default)(t=(0,n.default)(r).call(r,(e=>!!e))).call(t,(e=>(!e.get(\"line\")&&e.get(\"path\"),e)))}},2392:(e,t,a)=>{a.r(t),a.d(t,{transform:()=>l});var n=a(2565),r=a(8818),s=a(8136),o=a(6785);function l(e){return(0,n.default)(e).call(e,(e=>{var t;let a=\"is not of a type(s)\",n=(0,r.default)(t=e.get(\"message\")).call(t,a);if(n>-1){var l,i;let t=(0,s.default)(l=e.get(\"message\")).call(l,n+19).split(\",\");return e.set(\"message\",(0,s.default)(i=e.get(\"message\")).call(i,0,n)+function(e){return(0,o.default)(e).call(e,((e,t,a,n)=>a===n.length-1&&n.length>1?e+\"or \"+t:n[a+1]&&n.length>2?e+t+\", \":n[a+1]?e+t+\" \":e+t),\"should be a\")}(t))}return e}))}},1835:(e,t,a)=>{a.r(t),a.d(t,{transform:()=>n});a(2565),a(8818),a(9908),a(9725);function n(e,t){let{jsSpec:a}=t;return e}},7793:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(3527),r=a(4966),s=a(7667);function o(e){return{statePlugins:{err:{reducers:(0,n.default)(e),actions:r,selectors:s}}}}},3527:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});var n=a(7512),r=a(2565),s=a(5171),o=a(6145),l=a(7930),i=a(4966),c=a(9725),u=a(6808);let d={line:0,level:\"error\",message:\"Unknown error\"};function p(){return{[i.NEW_THROWN_ERR]:(e,t)=>{let{payload:a}=t,r=(0,n.default)(d,a,{type:\"thrown\"});return e.update(\"errors\",(e=>(e||(0,c.List)()).push((0,c.fromJS)(r)))).update(\"errors\",(e=>(0,u.default)(e)))},[i.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:a}=t;return a=(0,r.default)(a).call(a,(e=>(0,c.fromJS)((0,n.default)(d,e,{type:\"thrown\"})))),e.update(\"errors\",(e=>{var t;return(0,s.default)(t=e||(0,c.List)()).call(t,(0,c.fromJS)(a))})).update(\"errors\",(e=>(0,u.default)(e)))},[i.NEW_SPEC_ERR]:(e,t)=>{let{payload:a}=t,n=(0,c.fromJS)(a);return n=n.set(\"type\",\"spec\"),e.update(\"errors\",(e=>(e||(0,c.List)()).push((0,c.fromJS)(n)).sortBy((e=>e.get(\"line\"))))).update(\"errors\",(e=>(0,u.default)(e)))},[i.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:a}=t;return a=(0,r.default)(a).call(a,(e=>(0,c.fromJS)((0,n.default)(d,e,{type:\"spec\"})))),e.update(\"errors\",(e=>{var t;return(0,s.default)(t=e||(0,c.List)()).call(t,(0,c.fromJS)(a))})).update(\"errors\",(e=>(0,u.default)(e)))},[i.NEW_AUTH_ERR]:(e,t)=>{let{payload:a}=t,r=(0,c.fromJS)((0,n.default)({},a));return r=r.set(\"type\",\"auth\"),e.update(\"errors\",(e=>(e||(0,c.List)()).push((0,c.fromJS)(r)))).update(\"errors\",(e=>(0,u.default)(e)))},[i.CLEAR]:(e,t)=>{var a;let{payload:n}=t;if(!n||!e.get(\"errors\"))return e;let r=(0,o.default)(a=e.get(\"errors\")).call(a,(e=>{var t;return(0,l.default)(t=e.keySeq()).call(t,(t=>{const a=e.get(t),r=n[t];return!r||a!==r}))}));return e.merge({errors:r})},[i.CLEAR_BY]:(e,t)=>{var a;let{payload:n}=t;if(!n||\"function\"!=typeof n)return e;let r=(0,o.default)(a=e.get(\"errors\")).call(a,(e=>n(e)));return e.merge({errors:r})}}}},7667:(e,t,a)=>{a.r(t),a.d(t,{allErrors:()=>s,lastError:()=>o});var n=a(9725),r=a(8639);const s=(0,r.createSelector)((e=>e),(e=>e.get(\"errors\",(0,n.List)()))),o=(0,r.createSelector)(s,(e=>e.last()))},9978:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(4309);function r(){return{fn:{opsFilter:n.default}}}},4309:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(6145),r=a(8818);function s(e,t){return(0,n.default)(e).call(e,((e,a)=>-1!==(0,r.default)(a).call(a,t)))}},7349:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(810),r=(a(5053),a(8096)),s=a(2603);const o=e=>{let{expanded:t,children:a,onChange:o}=e;const l=(0,s.useComponent)(\"ChevronRightIcon\"),i=(0,n.useCallback)((e=>{o(e,!t)}),[t,o]);return n.default.createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-accordion\",onClick:i},n.default.createElement(\"div\",{className:\"json-schema-2020-12-accordion__children\"},a),n.default.createElement(\"span\",{className:(0,r.default)(\"json-schema-2020-12-accordion__icon\",{\"json-schema-2020-12-accordion__icon--expanded\":t,\"json-schema-2020-12-accordion__icon--collapsed\":!t})},n.default.createElement(l,null)))};o.defaultProps={expanded:!1};const l=o},6867:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(5053);const r=e=>{let{expanded:t,onClick:a}=e;const r=(0,n.useCallback)((e=>{a(e,!t)}),[t,a]);return n.default.createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-expand-deep-button\",onClick:r},t?\"Collapse all\":\"Expand all\")}},2675:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(2565),r=a(810),s=(a(5053),a(8096)),o=(a(6648),a(2603)),l=a(9006);const i=(0,r.forwardRef)(((e,t)=>{let{schema:a,name:i,dependentRequired:c,onExpand:u}=e;const d=(0,o.useFn)(),p=(0,o.useIsExpanded)(),m=(0,o.useIsExpandedDeeply)(),[f,h]=(0,r.useState)(p||m),[g,y]=(0,r.useState)(m),[v,E]=(0,o.useLevel)(),S=(0,o.useIsEmbedded)(),w=d.isExpandable(a)||c.length>0,b=(0,o.useIsCircular)(a),x=(0,o.useRenderedSchemas)(a),_=d.stringifyConstraints(a),C=(0,o.useComponent)(\"Accordion\"),j=(0,o.useComponent)(\"Keyword$schema\"),O=(0,o.useComponent)(\"Keyword$vocabulary\"),N=(0,o.useComponent)(\"Keyword$id\"),k=(0,o.useComponent)(\"Keyword$anchor\"),A=(0,o.useComponent)(\"Keyword$dynamicAnchor\"),I=(0,o.useComponent)(\"Keyword$ref\"),R=(0,o.useComponent)(\"Keyword$dynamicRef\"),P=(0,o.useComponent)(\"Keyword$defs\"),T=(0,o.useComponent)(\"Keyword$comment\"),M=(0,o.useComponent)(\"KeywordAllOf\"),D=(0,o.useComponent)(\"KeywordAnyOf\"),L=(0,o.useComponent)(\"KeywordOneOf\"),q=(0,o.useComponent)(\"KeywordNot\"),B=(0,o.useComponent)(\"KeywordIf\"),U=(0,o.useComponent)(\"KeywordThen\"),J=(0,o.useComponent)(\"KeywordElse\"),$=(0,o.useComponent)(\"KeywordDependentSchemas\"),K=(0,o.useComponent)(\"KeywordPrefixItems\"),V=(0,o.useComponent)(\"KeywordItems\"),F=(0,o.useComponent)(\"KeywordContains\"),z=(0,o.useComponent)(\"KeywordProperties\"),W=(0,o.useComponent)(\"KeywordPatternProperties\"),H=(0,o.useComponent)(\"KeywordAdditionalProperties\"),G=(0,o.useComponent)(\"KeywordPropertyNames\"),Z=(0,o.useComponent)(\"KeywordUnevaluatedItems\"),Y=(0,o.useComponent)(\"KeywordUnevaluatedProperties\"),X=(0,o.useComponent)(\"KeywordType\"),Q=(0,o.useComponent)(\"KeywordEnum\"),ee=(0,o.useComponent)(\"KeywordConst\"),te=(0,o.useComponent)(\"KeywordConstraint\"),ae=(0,o.useComponent)(\"KeywordDependentRequired\"),ne=(0,o.useComponent)(\"KeywordContentSchema\"),re=(0,o.useComponent)(\"KeywordTitle\"),se=(0,o.useComponent)(\"KeywordDescription\"),oe=(0,o.useComponent)(\"KeywordDefault\"),le=(0,o.useComponent)(\"KeywordDeprecated\"),ie=(0,o.useComponent)(\"KeywordReadOnly\"),ce=(0,o.useComponent)(\"KeywordWriteOnly\"),ue=(0,o.useComponent)(\"ExpandDeepButton\");(0,r.useEffect)((()=>{y(m)}),[m]),(0,r.useEffect)((()=>{y(g)}),[g]);const de=(0,r.useCallback)(((e,t)=>{h(t),!t&&y(!1),u(e,t,!1)}),[u]),pe=(0,r.useCallback)(((e,t)=>{h(t),y(t),u(e,t,!0)}),[u]);return r.default.createElement(l.JSONSchemaLevelContext.Provider,{value:E},r.default.createElement(l.JSONSchemaDeepExpansionContext.Provider,{value:g},r.default.createElement(l.JSONSchemaCyclesContext.Provider,{value:x},r.default.createElement(\"article\",{ref:t,\"data-json-schema-level\":v,className:(0,s.default)(\"json-schema-2020-12\",{\"json-schema-2020-12--embedded\":S,\"json-schema-2020-12--circular\":b})},r.default.createElement(\"div\",{className:\"json-schema-2020-12-head\"},w&&!b?r.default.createElement(r.default.Fragment,null,r.default.createElement(C,{expanded:f,onChange:de},r.default.createElement(re,{title:i,schema:a})),r.default.createElement(ue,{expanded:f,onClick:pe})):r.default.createElement(re,{title:i,schema:a}),r.default.createElement(le,{schema:a}),r.default.createElement(ie,{schema:a}),r.default.createElement(ce,{schema:a}),r.default.createElement(X,{schema:a,isCircular:b}),_.length>0&&(0,n.default)(_).call(_,(e=>r.default.createElement(te,{key:`${e.scope}-${e.value}`,constraint:e})))),r.default.createElement(\"div\",{className:(0,s.default)(\"json-schema-2020-12-body\",{\"json-schema-2020-12-body--collapsed\":!f})},f&&r.default.createElement(r.default.Fragment,null,r.default.createElement(se,{schema:a}),!b&&w&&r.default.createElement(r.default.Fragment,null,r.default.createElement(z,{schema:a}),r.default.createElement(W,{schema:a}),r.default.createElement(H,{schema:a}),r.default.createElement(Y,{schema:a}),r.default.createElement(G,{schema:a}),r.default.createElement(M,{schema:a}),r.default.createElement(D,{schema:a}),r.default.createElement(L,{schema:a}),r.default.createElement(q,{schema:a}),r.default.createElement(B,{schema:a}),r.default.createElement(U,{schema:a}),r.default.createElement(J,{schema:a}),r.default.createElement($,{schema:a}),r.default.createElement(K,{schema:a}),r.default.createElement(V,{schema:a}),r.default.createElement(Z,{schema:a}),r.default.createElement(F,{schema:a}),r.default.createElement(ne,{schema:a})),r.default.createElement(Q,{schema:a}),r.default.createElement(ee,{schema:a}),r.default.createElement(ae,{schema:a,dependentRequired:c}),r.default.createElement(oe,{schema:a}),r.default.createElement(j,{schema:a}),r.default.createElement(O,{schema:a}),r.default.createElement(N,{schema:a}),r.default.createElement(k,{schema:a}),r.default.createElement(A,{schema:a}),r.default.createElement(I,{schema:a}),!b&&w&&r.default.createElement(P,{schema:a}),r.default.createElement(R,{schema:a}),r.default.createElement(T,{schema:a})))))))}));i.defaultProps={name:\"\",dependentRequired:[],onExpand:()=>{}};const c=i},2260:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=()=>n.default.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\"},n.default.createElement(\"path\",{d:\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"}))},4922:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$anchor?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$anchor\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$anchor)):null}},4685:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$comment?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$comment\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$comment)):null}},6418:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(2740),r=a(2565),s=a(7204),o=a(810),l=a(8096),i=(a(6648),a(2603)),c=a(9006);const u=e=>{var t;let{schema:a}=e;const u=(null==a?void 0:a.$defs)||{},d=(0,i.useIsExpandedDeeply)(),[p,m]=(0,o.useState)(d),[f,h]=(0,o.useState)(!1),g=(0,i.useComponent)(\"Accordion\"),y=(0,i.useComponent)(\"ExpandDeepButton\"),v=(0,i.useComponent)(\"JSONSchema\"),E=(0,o.useCallback)((()=>{m((e=>!e))}),[]),S=(0,o.useCallback)(((e,t)=>{m(t),h(t)}),[]);return 0===(0,n.default)(u).length?null:o.default.createElement(c.JSONSchemaDeepExpansionContext.Provider,{value:f},o.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs\"},o.default.createElement(g,{expanded:p,onChange:E},o.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$defs\")),o.default.createElement(y,{expanded:p,onClick:S}),o.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),o.default.createElement(\"ul\",{className:(0,l.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!p})},p&&o.default.createElement(o.default.Fragment,null,(0,r.default)(t=(0,s.default)(u)).call(t,(e=>{let[t,a]=e;return o.default.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},o.default.createElement(v,{name:t,schema:a}))}))))))}},1338:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$dynamicAnchor?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicAnchor\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicAnchor)):null}},7655:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$dynamicRef?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicRef\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicRef)):null}},3460:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$id?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$id\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$id)):null}},2348:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$ref?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$ref\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$ref)):null}},9359:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.$schema?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$schema\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$schema)):null}},7568:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(2565),r=a(7204),s=a(810),o=a(8096),l=(a(6648),a(2603));const i=e=>{var t;let{schema:a}=e;const i=(0,l.useIsExpandedDeeply)(),[c,u]=(0,s.useState)(i),d=(0,l.useComponent)(\"Accordion\"),p=(0,s.useCallback)((()=>{u((e=>!e))}),[]);return null!=a&&a.$vocabulary?\"object\"!=typeof a.$vocabulary?null:s.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary\"},s.default.createElement(d,{expanded:c,onChange:p},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$vocabulary\")),s.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.default.createElement(\"ul\",null,c&&(0,n.default)(t=(0,r.default)(a.$vocabulary)).call(t,(e=>{let[t,a]=e;return s.default.createElement(\"li\",{key:t,className:(0,o.default)(\"json-schema-2020-12-$vocabulary-uri\",{\"json-schema-2020-12-$vocabulary-uri--disabled\":!a})},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t))})))):null}},5253:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),{additionalProperties:s}=t,o=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"additionalProperties\"))return null;const l=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Additional properties\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties\"},!0===s?n.default.createElement(n.default.Fragment,null,l,n.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"allowed\")):!1===s?n.default.createElement(n.default.Fragment,null,l,n.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"forbidden\")):n.default.createElement(o,{name:l,schema:s}))}},6457:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(4163),r=a(2565),s=a(810),o=a(8096),l=(a(6648),a(2603)),i=a(9006);const c=e=>{let{schema:t}=e;const a=(null==t?void 0:t.allOf)||[],c=(0,l.useFn)(),u=(0,l.useIsExpandedDeeply)(),[d,p]=(0,s.useState)(u),[m,f]=(0,s.useState)(!1),h=(0,l.useComponent)(\"Accordion\"),g=(0,l.useComponent)(\"ExpandDeepButton\"),y=(0,l.useComponent)(\"JSONSchema\"),v=(0,l.useComponent)(\"KeywordType\"),E=(0,s.useCallback)((()=>{p((e=>!e))}),[]),S=(0,s.useCallback)(((e,t)=>{p(t),f(t)}),[]);return(0,n.default)(a)&&0!==a.length?s.default.createElement(i.JSONSchemaDeepExpansionContext.Provider,{value:m},s.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf\"},s.default.createElement(h,{expanded:d,onChange:E},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"All of\")),s.default.createElement(g,{expanded:d,onClick:S}),s.default.createElement(v,{schema:{allOf:a}}),s.default.createElement(\"ul\",{className:(0,o.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.default.createElement(s.default.Fragment,null,(0,r.default)(a).call(a,((e,t)=>s.default.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},s.default.createElement(y,{name:`#${t} ${c.getTitle(e)}`,schema:e})))))))):null}},8776:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(4163),r=a(2565),s=a(810),o=a(8096),l=(a(6648),a(2603)),i=a(9006);const c=e=>{let{schema:t}=e;const a=(null==t?void 0:t.anyOf)||[],c=(0,l.useFn)(),u=(0,l.useIsExpandedDeeply)(),[d,p]=(0,s.useState)(u),[m,f]=(0,s.useState)(!1),h=(0,l.useComponent)(\"Accordion\"),g=(0,l.useComponent)(\"ExpandDeepButton\"),y=(0,l.useComponent)(\"JSONSchema\"),v=(0,l.useComponent)(\"KeywordType\"),E=(0,s.useCallback)((()=>{p((e=>!e))}),[]),S=(0,s.useCallback)(((e,t)=>{p(t),f(t)}),[]);return(0,n.default)(a)&&0!==a.length?s.default.createElement(i.JSONSchemaDeepExpansionContext.Provider,{value:m},s.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf\"},s.default.createElement(h,{expanded:d,onChange:E},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Any of\")),s.default.createElement(g,{expanded:d,onClick:S}),s.default.createElement(v,{schema:{anyOf:a}}),s.default.createElement(\"ul\",{className:(0,o.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.default.createElement(s.default.Fragment,null,(0,r.default)(a).call(a,((e,t)=>s.default.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},s.default.createElement(y,{name:`#${t} ${c.getTitle(e)}`,schema:e})))))))):null}},7308:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)();return a.hasKeyword(t,\"const\")?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--const\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Const\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},a.stringify(t.const))):null}},9956:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810);a(5053);const r=e=>{let{constraint:t}=e;return n.default.createElement(\"span\",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${t.scope}`},t.value)},s=n.default.memo(r)},8993:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"contains\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Contains\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains\"},n.default.createElement(s,{name:o,schema:t.contains}))}},3484:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"contentSchema\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Content schema\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema\"},n.default.createElement(s,{name:o,schema:t.contentSchema}))}},5148:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)();return a.hasKeyword(t,\"default\")?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--default\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Default\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},a.stringify(t.default))):null}},4539:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(2565),r=a(810);a(5053),a(6648);const s=e=>{let{dependentRequired:t}=e;return 0===t.length?null:r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired\"},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Required when defined\"),r.default.createElement(\"ul\",null,(0,n.default)(t).call(t,(e=>r.default.createElement(\"li\",{key:e},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning\"},e))))))}},6076:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(2740),r=a(2565),s=a(7204),o=a(810),l=a(8096),i=(a(6648),a(2603)),c=a(9006);const u=e=>{var t;let{schema:a}=e;const u=(null==a?void 0:a.dependentSchemas)||[],d=(0,i.useIsExpandedDeeply)(),[p,m]=(0,o.useState)(d),[f,h]=(0,o.useState)(!1),g=(0,i.useComponent)(\"Accordion\"),y=(0,i.useComponent)(\"ExpandDeepButton\"),v=(0,i.useComponent)(\"JSONSchema\"),E=(0,o.useCallback)((()=>{m((e=>!e))}),[]),S=(0,o.useCallback)(((e,t)=>{m(t),h(t)}),[]);return\"object\"!=typeof u||0===(0,n.default)(u).length?null:o.default.createElement(c.JSONSchemaDeepExpansionContext.Provider,{value:f},o.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas\"},o.default.createElement(g,{expanded:p,onChange:E},o.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Dependent schemas\")),o.default.createElement(y,{expanded:p,onClick:S}),o.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),o.default.createElement(\"ul\",{className:(0,l.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!p})},p&&o.default.createElement(o.default.Fragment,null,(0,r.default)(t=(0,s.default)(u)).call(t,(e=>{let[t,a]=e;return o.default.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},o.default.createElement(v,{name:t,schema:a}))}))))))}},6661:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.deprecated)?null:n.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning\"},\"deprecated\")}},9446:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return null!=t&&t.description?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},n.default.createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},t.description)):null}},7207:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"else\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Else\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},n.default.createElement(s,{name:o,schema:t.else}))}},1805:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(4163),r=a(2565),s=a(810),o=(a(6648),a(2603));const l=e=>{var t;let{schema:a}=e;const l=(0,o.useFn)();return(0,n.default)(null==a?void 0:a.enum)?s.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum\"},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Allowed values\"),s.default.createElement(\"ul\",null,(0,r.default)(t=a.enum).call(t,(e=>{const t=l.stringify(e);return s.default.createElement(\"li\",{key:t},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},t))})))):null}},487:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"if\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"If\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},n.default.createElement(s,{name:o,schema:t.if}))}},9206:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"items\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Items\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--items\"},n.default.createElement(s,{name:o,schema:t.items}))}},5174:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"not\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Not\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--not\"},n.default.createElement(s,{name:o,schema:t.not}))}},3834:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(4163),r=a(2565),s=a(810),o=a(8096),l=(a(6648),a(2603)),i=a(9006);const c=e=>{let{schema:t}=e;const a=(null==t?void 0:t.oneOf)||[],c=(0,l.useFn)(),u=(0,l.useIsExpandedDeeply)(),[d,p]=(0,s.useState)(u),[m,f]=(0,s.useState)(!1),h=(0,l.useComponent)(\"Accordion\"),g=(0,l.useComponent)(\"ExpandDeepButton\"),y=(0,l.useComponent)(\"JSONSchema\"),v=(0,l.useComponent)(\"KeywordType\"),E=(0,s.useCallback)((()=>{p((e=>!e))}),[]),S=(0,s.useCallback)(((e,t)=>{p(t),f(t)}),[]);return(0,n.default)(a)&&0!==a.length?s.default.createElement(i.JSONSchemaDeepExpansionContext.Provider,{value:m},s.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf\"},s.default.createElement(h,{expanded:d,onChange:E},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"One of\")),s.default.createElement(g,{expanded:d,onClick:S}),s.default.createElement(v,{schema:{oneOf:a}}),s.default.createElement(\"ul\",{className:(0,o.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.default.createElement(s.default.Fragment,null,(0,r.default)(a).call(a,((e,t)=>s.default.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},s.default.createElement(y,{name:`#${t} ${c.getTitle(e)}`,schema:e})))))))):null}},6746:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(2740),r=a(2565),s=a(7204),o=a(810),l=(a(6648),a(2603));const i=e=>{var t;let{schema:a}=e;const i=(null==a?void 0:a.patternProperties)||{},c=(0,l.useComponent)(\"JSONSchema\");return 0===(0,n.default)(i).length?null:o.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties\"},o.default.createElement(\"ul\",null,(0,r.default)(t=(0,s.default)(i)).call(t,(e=>{let[t,a]=e;return o.default.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},o.default.createElement(c,{name:t,schema:a}))}))))}},3971:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(4163),r=a(2565),s=a(810),o=a(8096),l=(a(6648),a(2603)),i=a(9006);const c=e=>{let{schema:t}=e;const a=(null==t?void 0:t.prefixItems)||[],c=(0,l.useFn)(),u=(0,l.useIsExpandedDeeply)(),[d,p]=(0,s.useState)(u),[m,f]=(0,s.useState)(!1),h=(0,l.useComponent)(\"Accordion\"),g=(0,l.useComponent)(\"ExpandDeepButton\"),y=(0,l.useComponent)(\"JSONSchema\"),v=(0,l.useComponent)(\"KeywordType\"),E=(0,s.useCallback)((()=>{p((e=>!e))}),[]),S=(0,s.useCallback)(((e,t)=>{p(t),f(t)}),[]);return(0,n.default)(a)&&0!==a.length?s.default.createElement(i.JSONSchemaDeepExpansionContext.Provider,{value:m},s.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems\"},s.default.createElement(h,{expanded:d,onChange:E},s.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Prefix items\")),s.default.createElement(g,{expanded:d,onClick:S}),s.default.createElement(v,{schema:{prefixItems:a}}),s.default.createElement(\"ul\",{className:(0,o.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.default.createElement(s.default.Fragment,null,(0,r.default)(a).call(a,((e,t)=>s.default.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},s.default.createElement(y,{name:`#${t} ${c.getTitle(e)}`,schema:e})))))))):null}},5472:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(4163),r=a(2740),s=a(2565),o=a(7204),l=a(2372),i=a(810),c=a(8096),u=(a(6648),a(2603));const d=e=>{var t;let{schema:a}=e;const d=(0,u.useFn)(),p=(null==a?void 0:a.properties)||{},m=(0,n.default)(null==a?void 0:a.required)?a.required:[],f=(0,u.useComponent)(\"JSONSchema\");return 0===(0,r.default)(p).length?null:i.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},i.default.createElement(\"ul\",null,(0,s.default)(t=(0,o.default)(p)).call(t,(e=>{let[t,n]=e;const r=(0,l.default)(m).call(m,t),s=d.getDependentRequired(t,a);return i.default.createElement(\"li\",{key:t,className:(0,c.default)(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":r})},i.default.createElement(f,{name:t,schema:n,dependentRequired:s}))}))))}},2338:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),{propertyNames:s}=t,o=(0,r.useComponent)(\"JSONSchema\"),l=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Property names\");return a.hasKeyword(t,\"propertyNames\")?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames\"},n.default.createElement(o,{name:l,schema:s})):null}},6456:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.readOnly)?null:n.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"read-only\")}},7401:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),s=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"then\"))return null;const o=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Then\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--then\"},n.default.createElement(s,{name:o,schema:t.then}))}},8137:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(810),r=(a(5053),a(6648),a(2603));const s=e=>{let{title:t,schema:a}=e;const s=(0,r.useFn)();return t||s.getTitle(a)?n.default.createElement(\"div\",{className:\"json-schema-2020-12__title\"},t||s.getTitle(a)):null};s.defaultProps={title:\"\"};const o=s},2285:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(810),r=(a(5053),a(6648),a(2603));const s=e=>{let{schema:t,isCircular:a}=e;const s=(0,r.useFn)().getType(t),o=a?\" [circular]\":\"\";return n.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},`${s}${o}`)};s.defaultProps={isCircular:!1};const o=s},5828:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),{unevaluatedItems:s}=t,o=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"unevaluatedItems\"))return null;const l=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated items\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems\"},n.default.createElement(o,{name:l,schema:s}))}},6907:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(6648),a(2603));const s=e=>{let{schema:t}=e;const a=(0,r.useFn)(),{unevaluatedProperties:s}=t,o=(0,r.useComponent)(\"JSONSchema\");if(!a.hasKeyword(t,\"unevaluatedProperties\"))return null;const l=n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated properties\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties\"},n.default.createElement(o,{name:l,schema:s}))}},5789:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(6648);const r=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.writeOnly)?null:n.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"write-only\")}},9006:(e,t,a)=>{a.r(t),a.d(t,{JSONSchemaContext:()=>s,JSONSchemaCyclesContext:()=>i,JSONSchemaDeepExpansionContext:()=>l,JSONSchemaLevelContext:()=>o});var n=a(527),r=a(810);const s=(0,r.createContext)(null);s.displayName=\"JSONSchemaContext\";const o=(0,r.createContext)(0);o.displayName=\"JSONSchemaLevelContext\";const l=(0,r.createContext)(!1);l.displayName=\"JSONSchemaDeepExpansionContext\";const i=(0,r.createContext)(new n.default)},4121:(e,t,a)=>{a.r(t),a.d(t,{getDependentRequired:()=>C,getTitle:()=>y,getType:()=>v,hasKeyword:()=>S,isBooleanJSONSchema:()=>E,isExpandable:()=>w,stringify:()=>b,stringifyConstraints:()=>_,upperFirst:()=>g});var n=a(8136),r=a(3284),s=a(4163),o=a(2565),l=a(2372),i=a(1772),c=a(6145),u=a(313),d=a(8898),p=a(6785),m=a(7204),f=a(527),h=a(2603);const g=e=>\"string\"==typeof e?`${e.charAt(0).toUpperCase()}${(0,n.default)(e).call(e,1)}`:e,y=e=>{const t=(0,h.useFn)();return null!=e&&e.title?t.upperFirst(e.title):null!=e&&e.$anchor?t.upperFirst(e.$anchor):null!=e&&e.$id?e.$id:\"\"},v=function(e){var t,a;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new r.default;const u=(0,h.useFn)();if(null==e)return\"any\";if(u.isBooleanJSONSchema(e))return e?\"any\":\"never\";if(\"object\"!=typeof e)return\"any\";if(n.has(e))return\"any\";n.add(e);const{type:d,prefixItems:p,items:m}=e,f=()=>{if((0,s.default)(p)){const e=(0,o.default)(p).call(p,(e=>v(e,n))),t=m?v(m,n):\"any\";return`array<[${e.join(\", \")}], ${t}>`}if(m){return`array<${v(m,n)}>`}return\"array<any>\"};if(e.not&&\"any\"===v(e.not))return\"never\";const g=(0,s.default)(d)?(0,o.default)(d).call(d,(e=>\"array\"===e?f():e)).join(\" | \"):\"array\"===d?f():(0,l.default)(t=[\"null\",\"boolean\",\"object\",\"array\",\"number\",\"string\"]).call(t,d)?d:(()=>{var t,a;if(Object.hasOwn(e,\"prefixItems\")||Object.hasOwn(e,\"items\")||Object.hasOwn(e,\"contains\"))return f();if(Object.hasOwn(e,\"properties\")||Object.hasOwn(e,\"additionalProperties\")||Object.hasOwn(e,\"patternProperties\"))return\"object\";if((0,l.default)(t=[\"int32\",\"int64\"]).call(t,e.format))return\"integer\";if((0,l.default)(a=[\"float\",\"double\"]).call(a,e.format))return\"number\";if(Object.hasOwn(e,\"minimum\")||Object.hasOwn(e,\"maximum\")||Object.hasOwn(e,\"exclusiveMinimum\")||Object.hasOwn(e,\"exclusiveMaximum\")||Object.hasOwn(e,\"multipleOf\"))return\"number | integer\";if(Object.hasOwn(e,\"pattern\")||Object.hasOwn(e,\"format\")||Object.hasOwn(e,\"minLength\")||Object.hasOwn(e,\"maxLength\"))return\"string\";if(void 0!==e.const){if(null===e.const)return\"null\";if(\"boolean\"==typeof e.const)return\"boolean\";if(\"number\"==typeof e.const)return(0,i.default)(e.const)?\"integer\":\"number\";if(\"string\"==typeof e.const)return\"string\";if((0,s.default)(e.const))return\"array<any>\";if(\"object\"==typeof e.const)return\"object\"}return null})(),y=(t,a)=>{if((0,s.default)(e[t])){var r;return`(${(0,o.default)(r=e[t]).call(r,(e=>v(e,n))).join(a)})`}return null},E=y(\"oneOf\",\" | \"),S=y(\"anyOf\",\" | \"),w=y(\"allOf\",\" & \"),b=(0,c.default)(a=[g,E,S,w]).call(a,Boolean).join(\" | \");return n.delete(e),b||\"any\"},E=e=>\"boolean\"==typeof e,S=(e,t)=>null!==e&&\"object\"==typeof e&&Object.hasOwn(e,t),w=e=>{const t=(0,h.useFn)();return(null==e?void 0:e.$schema)||(null==e?void 0:e.$vocabulary)||(null==e?void 0:e.$id)||(null==e?void 0:e.$anchor)||(null==e?void 0:e.$dynamicAnchor)||(null==e?void 0:e.$ref)||(null==e?void 0:e.$dynamicRef)||(null==e?void 0:e.$defs)||(null==e?void 0:e.$comment)||(null==e?void 0:e.allOf)||(null==e?void 0:e.anyOf)||(null==e?void 0:e.oneOf)||t.hasKeyword(e,\"not\")||t.hasKeyword(e,\"if\")||t.hasKeyword(e,\"then\")||t.hasKeyword(e,\"else\")||(null==e?void 0:e.dependentSchemas)||(null==e?void 0:e.prefixItems)||t.hasKeyword(e,\"items\")||t.hasKeyword(e,\"contains\")||(null==e?void 0:e.properties)||(null==e?void 0:e.patternProperties)||t.hasKeyword(e,\"additionalProperties\")||t.hasKeyword(e,\"propertyNames\")||t.hasKeyword(e,\"unevaluatedItems\")||t.hasKeyword(e,\"unevaluatedProperties\")||(null==e?void 0:e.description)||(null==e?void 0:e.enum)||t.hasKeyword(e,\"const\")||t.hasKeyword(e,\"contentSchema\")||t.hasKeyword(e,\"default\")},b=e=>{var t;return null===e||(0,l.default)(t=[\"number\",\"bigint\",\"boolean\"]).call(t,typeof e)?String(e):(0,s.default)(e)?`[${(0,o.default)(e).call(e,b).join(\", \")}]`:(0,u.default)(e)},x=(e,t,a)=>{const n=\"number\"==typeof t,r=\"number\"==typeof a;return n&&r?t===a?`${t} ${e}`:`[${t}, ${a}] ${e}`:n?`>= ${t} ${e}`:r?`<= ${a} ${e}`:null},_=e=>{const t=[],a=(e=>{if(\"number\"!=typeof(null==e?void 0:e.multipleOf))return null;if(e.multipleOf<=0)return null;if(1===e.multipleOf)return null;const{multipleOf:t}=e;if((0,i.default)(t))return`multiple of ${t}`;const a=10**t.toString().split(\".\")[1].length;return`multiple of ${t*a}/${a}`})(e);null!==a&&t.push({scope:\"number\",value:a});const n=(e=>{const t=null==e?void 0:e.minimum,a=null==e?void 0:e.maximum,n=null==e?void 0:e.exclusiveMinimum,r=null==e?void 0:e.exclusiveMaximum,s=\"number\"==typeof t,o=\"number\"==typeof a,l=\"number\"==typeof n&&t<n,i=\"number\"==typeof r&&a>r;if(s&&o)return`${l?\"(\":\"[\"}${l?n:t}, ${i?r:a}${i?\")\":\"]\"}`;if(s)return`${l?\">\":\"≥\"} ${l?n:t}`;if(o)return`${i?\"<\":\"≤\"} ${i?r:a}`;return null})(e);null!==n&&t.push({scope:\"number\",value:n}),null!=e&&e.format&&t.push({scope:\"string\",value:e.format});const r=x(\"characters\",null==e?void 0:e.minLength,null==e?void 0:e.maxLength);null!==r&&t.push({scope:\"string\",value:r}),null!=e&&e.pattern&&t.push({scope:\"string\",value:`matches ${null==e?void 0:e.pattern}`}),null!=e&&e.contentMediaType&&t.push({scope:\"string\",value:`media type: ${e.contentMediaType}`}),null!=e&&e.contentEncoding&&t.push({scope:\"string\",value:`encoding: ${e.contentEncoding}`});const s=x(null!=e&&e.hasUniqueItems?\"unique items\":\"items\",null==e?void 0:e.minItems,null==e?void 0:e.maxItems);null!==s&&t.push({scope:\"array\",value:s});const o=x(\"contained items\",null==e?void 0:e.minContains,null==e?void 0:e.maxContains);null!==o&&t.push({scope:\"array\",value:o});const l=x(\"properties\",null==e?void 0:e.minProperties,null==e?void 0:e.maxProperties);return null!==l&&t.push({scope:\"object\",value:l}),t},C=(e,t)=>{var a;return null!=t&&t.dependentRequired?(0,d.default)((0,p.default)(a=(0,m.default)(t.dependentRequired)).call(a,((t,a)=>{let[n,r]=a;return(0,s.default)(r)&&(0,l.default)(r).call(r,e)?(t.add(n),t):t}),new f.default)):[]}},5077:(e,t,a)=>{a.r(t),a.d(t,{withJSONSchemaContext:()=>H});var n=a(810),r=a(2675),s=a(9359),o=a(7568),l=a(3460),i=a(4922),c=a(1338),u=a(2348),d=a(7655),p=a(6418),m=a(4685),f=a(6457),h=a(8776),g=a(3834),y=a(5174),v=a(487),E=a(7401),S=a(7207),w=a(6076),b=a(3971),x=a(9206),_=a(8993),C=a(5472),j=a(6746),O=a(5253),N=a(2338),k=a(5828),A=a(6907),I=a(2285),R=a(1805),P=a(7308),T=a(9956),M=a(4539),D=a(3484),L=a(8137),q=a(9446),B=a(5148),U=a(6661),J=a(6456),$=a(5789),K=a(7349),V=a(6867),F=a(2260),z=a(9006),W=a(4121);const H=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const a={components:{JSONSchema:r.default,Keyword$schema:s.default,Keyword$vocabulary:o.default,Keyword$id:l.default,Keyword$anchor:i.default,Keyword$dynamicAnchor:c.default,Keyword$ref:u.default,Keyword$dynamicRef:d.default,Keyword$defs:p.default,Keyword$comment:m.default,KeywordAllOf:f.default,KeywordAnyOf:h.default,KeywordOneOf:g.default,KeywordNot:y.default,KeywordIf:v.default,KeywordThen:E.default,KeywordElse:S.default,KeywordDependentSchemas:w.default,KeywordPrefixItems:b.default,KeywordItems:x.default,KeywordContains:_.default,KeywordProperties:C.default,KeywordPatternProperties:j.default,KeywordAdditionalProperties:O.default,KeywordPropertyNames:N.default,KeywordUnevaluatedItems:k.default,KeywordUnevaluatedProperties:A.default,KeywordType:I.default,KeywordEnum:R.default,KeywordConst:P.default,KeywordConstraint:T.default,KeywordDependentRequired:M.default,KeywordContentSchema:D.default,KeywordTitle:L.default,KeywordDescription:q.default,KeywordDefault:B.default,KeywordDeprecated:U.default,KeywordReadOnly:J.default,KeywordWriteOnly:$.default,Accordion:K.default,ExpandDeepButton:V.default,ChevronRightIcon:F.default,...t.components},config:{default$schema:\"https://json-schema.org/draft/2020-12/schema\",defaultExpandedLevels:0,...t.config},fn:{upperFirst:W.upperFirst,getTitle:W.getTitle,getType:W.getType,isBooleanJSONSchema:W.isBooleanJSONSchema,hasKeyword:W.hasKeyword,isExpandable:W.isExpandable,stringify:W.stringify,stringifyConstraints:W.stringifyConstraints,getDependentRequired:W.getDependentRequired,...t.fn}},H=t=>n.default.createElement(z.JSONSchemaContext.Provider,{value:a},n.default.createElement(e,t));return H.contexts={JSONSchemaContext:z.JSONSchemaContext},H.displayName=e.displayName,H}},2603:(e,t,a)=>{a.r(t),a.d(t,{useComponent:()=>l,useConfig:()=>o,useFn:()=>i,useIsCircular:()=>f,useIsEmbedded:()=>u,useIsExpanded:()=>d,useIsExpandedDeeply:()=>p,useLevel:()=>c,useRenderedSchemas:()=>m});var n=a(527),r=a(810),s=a(9006);const o=()=>{const{config:e}=(0,r.useContext)(s.JSONSchemaContext);return e},l=e=>{const{components:t}=(0,r.useContext)(s.JSONSchemaContext);return t[e]||null},i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:t}=(0,r.useContext)(s.JSONSchemaContext);return void 0!==e?t[e]:t},c=()=>{const e=(0,r.useContext)(s.JSONSchemaLevelContext);return[e,e+1]},u=()=>{const[e]=c();return e>0},d=()=>{const[e]=c(),{defaultExpandedLevels:t}=o();return t-e>0},p=()=>(0,r.useContext)(s.JSONSchemaDeepExpansionContext),m=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e)return(0,r.useContext)(s.JSONSchemaCyclesContext);const t=(0,r.useContext)(s.JSONSchemaCyclesContext);return new n.default([...t,e])},f=e=>m().has(e)},7139:(e,t,a)=>{a.r(t),a.d(t,{default:()=>Z});var n=a(2675),r=a(9359),s=a(7568),o=a(3460),l=a(4922),i=a(1338),c=a(2348),u=a(7655),d=a(6418),p=a(4685),m=a(6457),f=a(8776),h=a(3834),g=a(5174),y=a(487),v=a(7401),E=a(7207),S=a(6076),w=a(3971),b=a(9206),x=a(8993),_=a(5472),C=a(6746),j=a(5253),O=a(2338),N=a(5828),k=a(6907),A=a(2285),I=a(1805),R=a(7308),P=a(9956),T=a(4539),M=a(3484),D=a(8137),L=a(9446),q=a(5148),B=a(6661),U=a(6456),J=a(5789),$=a(7349),K=a(6867),V=a(2260),F=a(4121),z=a(8591),W=a(9006),H=a(2603),G=a(5077);const Z=()=>({components:{JSONSchema202012:n.default,JSONSchema202012Keyword$schema:r.default,JSONSchema202012Keyword$vocabulary:s.default,JSONSchema202012Keyword$id:o.default,JSONSchema202012Keyword$anchor:l.default,JSONSchema202012Keyword$dynamicAnchor:i.default,JSONSchema202012Keyword$ref:c.default,JSONSchema202012Keyword$dynamicRef:u.default,JSONSchema202012Keyword$defs:d.default,JSONSchema202012Keyword$comment:p.default,JSONSchema202012KeywordAllOf:m.default,JSONSchema202012KeywordAnyOf:f.default,JSONSchema202012KeywordOneOf:h.default,JSONSchema202012KeywordNot:g.default,JSONSchema202012KeywordIf:y.default,JSONSchema202012KeywordThen:v.default,JSONSchema202012KeywordElse:E.default,JSONSchema202012KeywordDependentSchemas:S.default,JSONSchema202012KeywordPrefixItems:w.default,JSONSchema202012KeywordItems:b.default,JSONSchema202012KeywordContains:x.default,JSONSchema202012KeywordProperties:_.default,JSONSchema202012KeywordPatternProperties:C.default,JSONSchema202012KeywordAdditionalProperties:j.default,JSONSchema202012KeywordPropertyNames:O.default,JSONSchema202012KeywordUnevaluatedItems:N.default,JSONSchema202012KeywordUnevaluatedProperties:k.default,JSONSchema202012KeywordType:A.default,JSONSchema202012KeywordEnum:I.default,JSONSchema202012KeywordConst:R.default,JSONSchema202012KeywordConstraint:P.default,JSONSchema202012KeywordDependentRequired:T.default,JSONSchema202012KeywordContentSchema:M.default,JSONSchema202012KeywordTitle:D.default,JSONSchema202012KeywordDescription:L.default,JSONSchema202012KeywordDefault:q.default,JSONSchema202012KeywordDeprecated:B.default,JSONSchema202012KeywordReadOnly:U.default,JSONSchema202012KeywordWriteOnly:J.default,JSONSchema202012Accordion:$.default,JSONSchema202012ExpandDeepButton:K.default,JSONSchema202012ChevronRightIcon:V.default,withJSONSchema202012Context:G.withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>W.JSONSchemaDeepExpansionContext},fn:{upperFirst:F.upperFirst,jsonSchema202012:{isExpandable:F.isExpandable,hasKeyword:F.hasKeyword,useFn:H.useFn,useConfig:H.useConfig,useComponent:H.useComponent,useIsExpandedDeeply:H.useIsExpandedDeeply,sampleFromSchema:z.sampleFromSchema,sampleFromSchemaGeneric:z.sampleFromSchemaGeneric,sampleEncoderAPI:z.encoderAPI,sampleFormatAPI:z.formatAPI,sampleMediaTypeAPI:z.mediaTypeAPI,createXMLExample:z.createXMLExample,memoizedSampleFromSchema:z.memoizedSampleFromSchema,memoizedCreateXMLExample:z.memoizedCreateXMLExample}}})},6648:(e,t,a)=>{a.r(t),a.d(t,{booleanSchema:()=>s,objectSchema:()=>r,schema:()=>o});var n=a(5053);const r=n.default.object,s=n.default.bool,o=n.default.oneOfType([r,s])},9507:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});const n=new(a(674).default),r=(e,t)=>\"function\"==typeof t?n.register(e,t):null===t?n.unregister(e):n.get(e);r.getDefaults=()=>n.defaults;const s=r},2906:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});const n=new(a(4215).default),r=(e,t)=>\"function\"==typeof t?n.register(e,t):null===t?n.unregister(e):n.get(e)},537:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});const n=new(a(3782).default),r=(e,t)=>{if(\"function\"==typeof t)return n.register(e,t);if(null===t)return n.unregister(e);const a=e.split(\";\").at(0),r=`${a.split(\"/\").at(0)}/*`;return n.get(e)||n.get(a)||n.get(r)};r.getDefaults=()=>n.defaults;const s=r},674:(e,t,a)=>{a.r(t),a.d(t,{default:()=>y});var n=a(775),r=a(5496),s=a(9651),o=a(4215),l=a(1433),i=a(8509),c=a(4366),u=a(5037),d=a(5709),p=a(4180),m=a(1967);function f(e,t,a){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,a)}var h=new s.default;class g extends o.default{constructor(){super(...arguments),f(this,h,{writable:!0,value:{\"7bit\":l.default,\"8bit\":i.default,binary:c.default,\"quoted-printable\":u.default,base16:d.default,base32:p.default,base64:m.default}}),(0,n.default)(this,\"data\",{...(0,r.default)(this,h)})}get defaults(){return{...(0,r.default)(this,h)}}}const y=g},3782:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});var n=a(775),r=a(5496),s=a(9651),o=a(4215),l=a(5378),i=a(6724),c=a(4342),u=a(2974),d=a(5652);function p(e,t,a){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,a)}var m=new s.default;class f extends o.default{constructor(){super(...arguments),p(this,m,{writable:!0,value:{...l.default,...i.default,...c.default,...u.default,...d.default}}),(0,n.default)(this,\"data\",{...(0,r.default)(this,m)})}get defaults(){return{...(0,r.default)(this,m)}}}const h=f},4215:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(775);const r=class{constructor(){(0,n.default)(this,\"data\",{})}register(e,t){this.data[e]=t}unregister(e){void 0===e?this.data={}:delete this.data[e]}get(e){return this.data[e]}}},8338:(e,t,a)=>{a.r(t),a.d(t,{ALL_TYPES:()=>r,SCALAR_TYPES:()=>n});const n=[\"number\",\"integer\",\"string\",\"boolean\",\"null\"],r=[\"array\",\"object\",...n]},3783:(e,t,a)=>{a.r(t),a.d(t,{extractExample:()=>o,hasExample:()=>s});var n=a(4163),r=a(3084);const s=e=>{if(!(0,r.isJSONSchemaObject)(e))return!1;const{examples:t,example:a,default:s}=e;return!!((0,n.default)(t)&&t.length>=1)||(void 0!==s||void 0!==a)},o=e=>{if(!(0,r.isJSONSchemaObject)(e))return null;const{examples:t,example:a,default:s}=e;return(0,n.default)(t)&&t.length>=1?t.at(0):void 0!==s?s:void 0!==a?a:void 0}},7078:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});var n=a(4163),r=a(5171),s=a(8898),o=a(527),l=a(2740),i=a(6145),c=a(6561),u=a(3084);const d=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if((0,u.isBooleanJSONSchema)(e)&&!0===e)return!0;if((0,u.isBooleanJSONSchema)(e)&&!1===e)return!1;if((0,u.isBooleanJSONSchema)(t)&&!0===t)return!0;if((0,u.isBooleanJSONSchema)(t)&&!1===t)return!1;if(!(0,u.isJSONSchema)(e))return t;if(!(0,u.isJSONSchema)(t))return e;const p={...t,...e};if(t.type&&e.type&&(0,n.default)(t.type)&&\"string\"==typeof t.type){var m;const a=(0,r.default)(m=(0,c.AF)(t.type)).call(m,e.type);p.type=(0,s.default)(new o.default(a))}if((0,n.default)(t.required)&&(0,n.default)(e.required)&&(p.required=[...new o.default([...e.required,...t.required])]),t.properties&&e.properties){const n=new o.default([...(0,l.default)(t.properties),...(0,l.default)(e.properties)]);p.properties={};for(const r of n){const n=t.properties[r]||{},s=e.properties[r]||{};var f;if(n.readOnly&&!a.includeReadOnly||n.writeOnly&&!a.includeWriteOnly)p.required=(0,i.default)(f=p.required||[]).call(f,(e=>e!==r));else p.properties[r]=d(s,n,a)}}return(0,u.isJSONSchema)(t.items)&&(0,u.isJSONSchema)(e.items)&&(p.items=d(e.items,t.items,a)),(0,u.isJSONSchema)(t.contains)&&(0,u.isJSONSchema)(e.contains)&&(p.contains=d(e.contains,t.contains,a)),(0,u.isJSONSchema)(t.contentSchema)&&(0,u.isJSONSchema)(e.contentSchema)&&(p.contentSchema=d(e.contentSchema,t.contentSchema,a)),p},p=d},3084:(e,t,a)=>{a.r(t),a.d(t,{isBooleanJSONSchema:()=>r,isJSONSchema:()=>o,isJSONSchemaObject:()=>s});var n=a(8646);const r=e=>\"boolean\"==typeof e,s=e=>(0,n.default)(e),o=e=>r(e)||s(e)},5202:(e,t,a)=>{a.r(t),a.d(t,{bytes:()=>o,integer:()=>d,number:()=>u,pick:()=>i,randexp:()=>l,string:()=>c});var n=a(1798),r=a.n(n),s=a(2092);const o=e=>r()(e),l=e=>{try{return new s.default(e).gen()}catch{return\"string\"}},i=e=>e.at(0),c=()=>\"string\",u=()=>0,d=()=>0},6276:(e,t,a)=>{a.r(t),a.d(t,{foldType:()=>y,getType:()=>E,inferType:()=>v});var n=a(4163),r=a(1772),s=a(2372),o=a(3284),l=a(2740),i=a(2565),c=a(6145),u=a(8338),d=a(3084),p=a(5202),m=a(3783);const f={array:[\"items\",\"prefixItems\",\"contains\",\"maxContains\",\"minContains\",\"maxItems\",\"minItems\",\"uniqueItems\",\"unevaluatedItems\"],object:[\"properties\",\"additionalProperties\",\"patternProperties\",\"propertyNames\",\"minProperties\",\"maxProperties\",\"required\",\"dependentSchemas\",\"dependentRequired\",\"unevaluatedProperties\"],string:[\"pattern\",\"format\",\"minLength\",\"maxLength\",\"contentEncoding\",\"contentMediaType\",\"contentSchema\"],integer:[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\",\"multipleOf\"]};f.number=f.integer;const h=\"string\",g=e=>void 0===e?null:null===e?\"null\":(0,n.default)(e)?\"array\":(0,r.default)(e)?\"integer\":typeof e,y=e=>{if((0,n.default)(e)&&e.length>=1){if((0,s.default)(e).call(e,\"array\"))return\"array\";if((0,s.default)(e).call(e,\"object\"))return\"object\";{const t=(0,p.pick)(e);if((0,s.default)(u.ALL_TYPES).call(u.ALL_TYPES,t))return t}}return(0,s.default)(u.ALL_TYPES).call(u.ALL_TYPES,e)?e:null},v=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new o.default;if(!(0,d.isJSONSchemaObject)(e))return h;if(t.has(e))return h;t.add(e);let{type:a,const:r}=e;if(a=y(a),\"string\"!=typeof a){const t=(0,l.default)(f);e:for(let n=0;n<t.length;n+=1){const r=t[n],s=f[r];for(let t=0;t<s.length;t+=1){const n=s[t];if(Object.hasOwn(e,n)){a=r;break e}}}}if(\"string\"!=typeof a&&void 0!==r){const e=g(r);a=\"string\"==typeof e?e:a}if(\"string\"!=typeof a){const r=a=>{if((0,n.default)(e[a])){var r;const n=(0,i.default)(r=e[a]).call(r,(e=>v(e,t)));return y(n)}return null},o=r(\"allOf\"),l=r(\"anyOf\"),u=r(\"oneOf\"),d=e.not?v(e.not,t):null;var s;if(o||l||u||d)a=y((0,c.default)(s=[o,l,u,d]).call(s,Boolean))}if(\"string\"!=typeof a&&(0,m.hasExample)(e)){const t=(0,m.extractExample)(e),n=g(t);a=\"string\"==typeof n?n:a}return t.delete(e),a||h},E=e=>v(e)},9346:(e,t,a)=>{a.r(t),a.d(t,{fromJSONBooleanSchema:()=>r,typeCast:()=>s});var n=a(3084);const r=e=>!1===e?{not:{}}:{},s=e=>(0,n.isBooleanJSONSchema)(e)?r(e):(0,n.isJSONSchemaObject)(e)?e:{}},1433:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8764).Buffer;const r=e=>n.from(e).toString(\"ascii\")},8509:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8764).Buffer;const r=e=>n.from(e).toString(\"utf8\")},5709:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8764).Buffer;const r=e=>n.from(e).toString(\"hex\")},4180:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8764).Buffer;const r=e=>{const t=n.from(e).toString(\"utf8\"),a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";let r=0,s=\"\",o=0,l=0;for(let e=0;e<t.length;e++)for(o=o<<8|t.charCodeAt(e),l+=8;l>=5;)s+=a.charAt(o>>>l-5&31),l-=5;l>0&&(s+=a.charAt(o<<5-l&31),r=(8-8*t.length%5)%5);for(let e=0;e<r;e++)s+=\"=\";return s}},1967:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8764).Buffer;const r=e=>n.from(e).toString(\"base64\")},4366:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8764).Buffer;const r=e=>n.from(e).toString(\"binary\")},5037:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(8136);const r=e=>{let t=\"\";for(let s=0;s<e.length;s++){const o=e.charCodeAt(s);if(61===o)t+=\"=3D\";else if(o>=33&&o<=60||o>=62&&o<=126||9===o||32===o)t+=e.charAt(s);else if(13===o||10===o)t+=\"\\r\\n\";else if(o>126){const r=unescape(encodeURIComponent(e.charAt(s)));for(let e=0;e<r.length;e++){var a;t+=\"=\"+(0,n.default)(a=\"0\"+r.charCodeAt(e).toString(16)).call(a,-2).toUpperCase()}}else{var r;t+=\"=\"+(0,n.default)(r=\"0\"+o.toString(16)).call(r,-2).toUpperCase()}}return t}},4045:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>(new Date).toISOString()},1456:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>(new Date).toISOString().substring(0,10)},560:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>.1},4299:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"P3D\"},3981:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"user@example.com\"},1890:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>.1},9375:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"example.com\"},4518:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"실례@example.com\"},273:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"실례.com\"},7864:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>2**30>>>0},1726:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>2**53-1},8793:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"198.51.100.42\"},8269:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\"},5693:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"path/실례.html\"},3080:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"https://실례.com/\"},7856:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"/a/b/c\"},5652:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});const n=(e=>{var t={};return a.d(t,e),t})({default:()=>s.default});var r=a(5202);const o={\"application/json\":()=>'{\"key\":\"value\"}',\"application/ld+json\":()=>'{\"name\": \"John Doe\"}',\"application/x-httpd-php\":()=>\"<?php echo '<p>Hello World!</p>'; ?>\",\"application/rtf\":()=>n.default`{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1`,\"application/x-sh\":()=>'echo \"Hello World!\"',\"application/xhtml+xml\":()=>\"<p>content</p>\",\"application/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},4342:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(5202);const r={\"audio/*\":()=>(0,n.bytes)(25).toString(\"binary\")}},6724:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(5202);const r={\"image/*\":()=>(0,n.bytes)(25).toString(\"binary\")}},5378:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n={\"text/plain\":()=>\"string\",\"text/css\":()=>\".selector { border: 1px solid red }\",\"text/csv\":()=>\"value1,value2,value3\",\"text/html\":()=>\"<p>content</p>\",\"text/calendar\":()=>\"BEGIN:VCALENDAR\",\"text/javascript\":()=>\"console.dir('Hello world!');\",\"text/xml\":()=>'<person age=\"30\">John Doe</person>',\"text/*\":()=>\"string\"}},2974:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(5202);const r={\"video/*\":()=>(0,n.bytes)(25).toString(\"binary\")}},3393:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"********\"},4335:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"^[a-z]+$\"},375:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"1/0\"},5243:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>(new Date).toISOString().substring(11)},4692:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"path/index.html\"},3829:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"https://example.com/dictionary/{term:1}/{term}\"},2978:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"https://example.com/\"},8859:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\"},8591:(e,t,a)=>{a.r(t),a.d(t,{createXMLExample:()=>n.createXMLExample,encoderAPI:()=>r.default,formatAPI:()=>s.default,mediaTypeAPI:()=>o.default,memoizedCreateXMLExample:()=>n.memoizedCreateXMLExample,memoizedSampleFromSchema:()=>n.memoizedSampleFromSchema,sampleFromSchema:()=>n.sampleFromSchema,sampleFromSchemaGeneric:()=>n.sampleFromSchemaGeneric});var n=a(4277),r=a(9507),s=a(2906),o=a(537)},4277:(e,t,a)=>{a.r(t),a.d(t,{createXMLExample:()=>C,memoizedCreateXMLExample:()=>N,memoizedSampleFromSchema:()=>k,sampleFromSchema:()=>j,sampleFromSchemaGeneric:()=>_});var n=a(4163),r=a(1772),s=a(29),o=a(1778),l=a(2372),i=a(5171),c=a(2565),u=a(313),d=a(3479),p=a.n(d),m=a(8747),f=a(8646),h=a(6561),g=a(9669),y=a(3273),v=a(6276),E=a(9346),S=a(3783),w=a(5202),b=a(7078),x=a(3084);const _=function(e){var t;let a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,d=arguments.length>3&&void 0!==arguments[3]&&arguments[3];\"function\"==typeof(null===(t=e)||void 0===t?void 0:t.toJS)&&(e=e.toJS()),e=(0,E.typeCast)(e);let p=void 0!==u||(0,S.hasExample)(e);const g=!p&&(0,n.default)(e.oneOf)&&e.oneOf.length>0,C=!p&&(0,n.default)(e.anyOf)&&e.anyOf.length>0;if(!p&&(g||C)){const t=(0,E.typeCast)(g?(0,w.pick)(e.oneOf):(0,w.pick)(e.anyOf));!(e=(0,b.default)(e,t,a)).xml&&t.xml&&(e.xml=t.xml),(0,S.hasExample)(e)&&(0,S.hasExample)(t)&&(p=!0)}const j={};let{xml:O,properties:N,additionalProperties:k,items:A,contains:I}=e||{},R=(0,v.getType)(e),{includeReadOnly:P,includeWriteOnly:T}=a;O=O||{};let M,{name:D,prefix:L,namespace:q}=O,B={};if(Object.hasOwn(e,\"type\")||(e.type=R),d&&(D=D||\"notagname\",M=(L?`${L}:`:\"\")+D,q)){j[L?`xmlns:${L}`:\"xmlns\"]=q}d&&(B[M]=[]);const U=(0,h.mz)(N);let J,$=0;const K=()=>(0,r.default)(e.maxProperties)&&e.maxProperties>0&&$>=e.maxProperties,V=t=>!((0,r.default)(e.maxProperties)&&e.maxProperties>0)||!K()&&(!(t=>{var a;return!(0,n.default)(e.required)||0===e.required.length||!(0,l.default)(a=e.required).call(a,t)})(t)||e.maxProperties-$-(()=>{if(!(0,n.default)(e.required)||0===e.required.length)return 0;let t=0;var a,r;return d?(0,s.default)(a=e.required).call(a,(e=>t+=void 0===B[e]?0:1)):(0,s.default)(r=e.required).call(r,(e=>{var a;t+=void 0===(null===(a=B[M])||void 0===a?void 0:(0,o.default)(a).call(a,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(J=d?function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&U[t]){if(U[t].xml=U[t].xml||{},U[t].xml.attribute){const e=(0,n.default)(U[t].enum)?(0,w.pick)(U[t].enum):void 0;if((0,S.hasExample)(U[t]))j[U[t].xml.name||t]=(0,S.extractExample)(U[t]);else if(void 0!==e)j[U[t].xml.name||t]=e;else{const e=(0,E.typeCast)(U[t]),a=(0,v.getType)(e),n=U[t].xml.name||t;j[n]=y.default[a](e)}return}U[t].xml.name=U[t].xml.name||t}else U[t]||!1===k||(U[t]={xml:{name:t}});let s=_(U[t],a,r,d);var o;V(t)&&($++,(0,n.default)(s)?B[M]=(0,i.default)(o=B[M]).call(o,s):B[M].push(s))}:(t,n)=>{var r;if(V(t)){if((0,f.default)(null===(r=e.discriminator)||void 0===r?void 0:r.mapping)&&e.discriminator.propertyName===t&&\"string\"==typeof e.$$ref){for(const a in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[a])){B[t]=a;break}}else B[t]=_(U[t],a,n,d);$++}},p){let t;if(t=void 0!==u?u:(0,S.extractExample)(e),!d){if(\"number\"==typeof t&&\"string\"===R)return`${t}`;if(\"string\"!=typeof t||\"string\"===R)return t;try{return JSON.parse(t)}catch{return t}}if(\"array\"===R){if(!(0,n.default)(t)){if(\"string\"==typeof t)return t;t=[t]}let r=[];return(0,x.isJSONSchemaObject)(A)&&(A.xml=A.xml||O||{},A.xml.name=A.xml.name||O.name,r=(0,c.default)(t).call(t,(e=>_(A,a,e,d)))),(0,x.isJSONSchemaObject)(I)&&(I.xml=I.xml||O||{},I.xml.name=I.xml.name||O.name,r=[_(I,a,void 0,d),...r]),r=y.default.array(e,{sample:r}),O.wrapped?(B[M]=r,(0,m.default)(j)||B[M].push({_attr:j})):B=r,B}if(\"object\"===R){if(\"string\"==typeof t)return t;for(const e in t){var F,z,W,H;Object.hasOwn(t,e)&&(null!==(F=U[e])&&void 0!==F&&F.readOnly&&!P||null!==(z=U[e])&&void 0!==z&&z.writeOnly&&!T||(null!==(W=U[e])&&void 0!==W&&null!==(H=W.xml)&&void 0!==H&&H.attribute?j[U[e].xml.name||e]=t[e]:J(e,t[e])))}return(0,m.default)(j)||B[M].push({_attr:j}),B}return B[M]=(0,m.default)(j)?t:[{_attr:j},t],B}if(\"array\"===R){let t=[];var G,Z;if((0,x.isJSONSchemaObject)(I))if(d&&(I.xml=I.xml||e.xml||{},I.xml.name=I.xml.name||O.name),(0,n.default)(I.anyOf))t.push(...(0,c.default)(G=I.anyOf).call(G,(e=>_((0,b.default)(e,I,a),a,void 0,d))));else if((0,n.default)(I.oneOf)){var Y;t.push(...(0,c.default)(Y=I.oneOf).call(Y,(e=>_((0,b.default)(e,I,a),a,void 0,d))))}else{if(!(!d||d&&O.wrapped))return _(I,a,void 0,d);t.push(_(I,a,void 0,d))}if((0,x.isJSONSchemaObject)(A))if(d&&(A.xml=A.xml||e.xml||{},A.xml.name=A.xml.name||O.name),(0,n.default)(A.anyOf))t.push(...(0,c.default)(Z=A.anyOf).call(Z,(e=>_((0,b.default)(e,A,a),a,void 0,d))));else if((0,n.default)(A.oneOf)){var X;t.push(...(0,c.default)(X=A.oneOf).call(X,(e=>_((0,b.default)(e,A,a),a,void 0,d))))}else{if(!(!d||d&&O.wrapped))return _(A,a,void 0,d);t.push(_(A,a,void 0,d))}return t=y.default.array(e,{sample:t}),d&&O.wrapped?(B[M]=t,(0,m.default)(j)||B[M].push({_attr:j}),B):t}if(\"object\"===R){for(let e in U){var Q,ee,te;Object.hasOwn(U,e)&&(null!==(Q=U[e])&&void 0!==Q&&Q.deprecated||null!==(ee=U[e])&&void 0!==ee&&ee.readOnly&&!P||null!==(te=U[e])&&void 0!==te&&te.writeOnly&&!T||J(e))}if(d&&j&&B[M].push({_attr:j}),K())return B;if((0,x.isBooleanJSONSchema)(k))d?B[M].push({additionalProp:\"Anything can be here\"}):B.additionalProp1={},$++;else if((0,x.isJSONSchemaObject)(k)){var ae,ne;const t=k,n=_(t,a,void 0,d);if(d&&\"string\"==typeof(null==t||null===(ae=t.xml)||void 0===ae?void 0:ae.name)&&\"notagname\"!==(null==t||null===(ne=t.xml)||void 0===ne?void 0:ne.name))B[M].push(n);else{const t=(0,r.default)(e.minProperties)&&e.minProperties>0&&$<e.minProperties?e.minProperties-$:3;for(let e=1;e<=t;e++){if(K())return B;if(d){const t={};t[\"additionalProp\"+e]=n.notagname,B[M].push(t)}else B[\"additionalProp\"+e]=n;$++}}}return B}let re;if(void 0!==e.const)re=e.const;else if(e&&(0,n.default)(e.enum))re=(0,w.pick)((0,h.AF)(e.enum));else{const t=(0,x.isJSONSchemaObject)(e.contentSchema)?_(e.contentSchema,a,void 0,d):void 0;re=y.default[R](e,{sample:t})}return d?(B[M]=(0,m.default)(j)?re:[{_attr:j},re],B):re},C=(e,t,a)=>{const n=_(e,t,a,!0);if(n)return\"string\"==typeof n?n:p()(n,{declaration:!0,indent:\"\\t\"})},j=(e,t,a)=>_(e,t,a,!1),O=(e,t,a)=>[e,(0,u.default)(t),(0,u.default)(a)],N=(0,g.Z)(C,O),k=(0,g.Z)(j,O)},8262:(e,t,a)=>{a.r(t),a.d(t,{applyArrayConstraints:()=>l,default:()=>i});var n=a(1772),r=a(8136),s=a(8898),o=a(527);const l=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:a,maxItems:l,uniqueItems:i}=t,{contains:c,minContains:u,maxContains:d}=t;let p=[...e];if(null!=c&&\"object\"==typeof c){if((0,n.default)(u)&&u>1){const e=p.at(0);for(let t=1;t<u;t+=1)p.unshift(e)}(0,n.default)(d)}if((0,n.default)(l)&&l>0&&(p=(0,r.default)(e).call(e,0,l)),(0,n.default)(a)&&a>0)for(let e=0;p.length<a;e+=1)p.push(p[e%p.length]);return!0===i&&(p=(0,s.default)(new o.default(p))),p},i=(e,t)=>{let{sample:a}=t;return l(a,e)}},4108:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=e=>\"boolean\"!=typeof e.default||e.default},3273:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(8262),r=a(6852),s=a(4522),o=a(7742),l=a(8864),i=a(4108),c=a(853);const u={array:n.default,object:r.default,string:s.default,number:o.default,integer:l.default,boolean:i.default,null:c.default},d=new Proxy(u,{get:(e,t)=>\"string\"==typeof t&&Object.hasOwn(e,t)?e[t]:()=>`Unknown Type: ${t}`})},8864:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(5202),r=a(2906),s=a(7864),o=a(1726);const l=e=>{const{format:t}=e;return\"string\"==typeof t?(e=>{const{format:t}=e,a=(0,r.default)(t);if(\"function\"==typeof a)return a(e);switch(t){case\"int32\":return(0,s.default)();case\"int64\":return(0,o.default)()}return(0,n.integer)()})(e):(0,n.integer)()}},853:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>null},7742:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(1772);const r=(e=>{var t={};return a.d(t,e),t})({default:()=>o.default});var s=a(5202),l=a(2906),i=a(1890),c=a(560);const u=e=>{const{format:t}=e;let a;return a=\"string\"==typeof t?(e=>{const{format:t}=e,a=(0,l.default)(t);if(\"function\"==typeof a)return a(e);switch(t){case\"float\":return(0,i.default)();case\"double\":return(0,c.default)()}return(0,s.number)()})(e):(0,s.number)(),function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:a,maximum:s,exclusiveMinimum:o,exclusiveMaximum:l}=t,{multipleOf:i}=t,c=(0,n.default)(e)?1:r.default;let u=\"number\"==typeof a?a:null,d=\"number\"==typeof s?s:null,p=e;if(\"number\"==typeof o&&(u=null!==u?Math.max(u,o+c):o+c),\"number\"==typeof l&&(d=null!==d?Math.min(d,l-c):l-c),p=u>d&&e||u||d||p,\"number\"==typeof i&&i>0){const e=p%i;p=0===e?p:p+i-e}return p}(a,e)}},6852:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=()=>{throw new Error(\"Not implemented\")}},4522:(e,t,a)=>{a.r(t),a.d(t,{default:()=>P});var n=a(1772),r=a(8136),s=a(4163),o=a(313),l=a(1252),i=a(5202),c=a(3084),u=a(3981),d=a(4518),p=a(9375),m=a(273),f=a(8793),h=a(8269),g=a(2978),y=a(4692),v=a(3080),E=a(5693),S=a(8859),w=a(3829),b=a(7856),x=a(375),_=a(4045),C=a(1456),j=a(5243),O=a(4299),N=a(3393),k=a(4335),A=a(2906),I=a(9507),R=a(537);const P=function(e){let{sample:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:a,contentMediaType:P,contentSchema:T}=e,{pattern:M,format:D}=e,L=(0,I.default)(a)||l.default;let q;if(\"string\"==typeof M)q=(0,i.randexp)(M);else if(\"string\"==typeof D)q=(e=>{const{format:t}=e,a=(0,A.default)(t);if(\"function\"==typeof a)return a(e);switch(t){case\"email\":return(0,u.default)();case\"idn-email\":return(0,d.default)();case\"hostname\":return(0,p.default)();case\"idn-hostname\":return(0,m.default)();case\"ipv4\":return(0,f.default)();case\"ipv6\":return(0,h.default)();case\"uri\":return(0,g.default)();case\"uri-reference\":return(0,y.default)();case\"iri\":return(0,v.default)();case\"iri-reference\":return(0,E.default)();case\"uuid\":return(0,S.default)();case\"uri-template\":return(0,w.default)();case\"json-pointer\":return(0,b.default)();case\"relative-json-pointer\":return(0,x.default)();case\"date-time\":return(0,_.default)();case\"date\":return(0,C.default)();case\"time\":return(0,j.default)();case\"duration\":return(0,O.default)();case\"password\":return(0,N.default)();case\"regex\":return(0,k.default)()}return(0,i.string)()})(e);else if((0,c.isJSONSchema)(T)&&\"string\"==typeof P&&void 0!==t)q=(0,s.default)(t)||\"object\"==typeof t?(0,o.default)(t):String(t);else if(\"string\"==typeof P){const t=(0,R.default)(P);\"function\"==typeof t&&(q=t(e))}else q=(0,i.string)();return L(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:a,minLength:s}=t;let o=e;if((0,n.default)(a)&&a>0&&(o=(0,r.default)(o).call(o,0,a)),(0,n.default)(s)&&s>0){let e=0;for(;o.length<s;)o+=o[e++%o.length]}return o}(q,e))}},5474:(e,t,a)=>{a.r(t),a.d(t,{SHOW:()=>l,UPDATE_FILTER:()=>s,UPDATE_LAYOUT:()=>r,UPDATE_MODE:()=>o,changeMode:()=>d,show:()=>u,updateFilter:()=>c,updateLayout:()=>i});var n=a(6561);const r=\"layout_update_layout\",s=\"layout_update_filter\",o=\"layout_update_mode\",l=\"layout_show\";function i(e){return{type:r,payload:e}}function c(e){return{type:s,payload:e}}function u(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,n.AF)(e),{type:l,payload:{thing:e,shown:t}}}function d(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return e=(0,n.AF)(e),{type:o,payload:{thing:e,mode:t}}}},6821:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(5672),r=a(5474),s=a(4400),o=a(8989);function l(){return{statePlugins:{layout:{reducers:n.default,actions:r,selectors:s},spec:{wrapSelectors:o}}}}},5672:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(5171),r=a(9725),s=a(5474);const o={[s.UPDATE_LAYOUT]:(e,t)=>e.set(\"layout\",t.payload),[s.UPDATE_FILTER]:(e,t)=>e.set(\"filter\",t.payload),[s.SHOW]:(e,t)=>{const a=t.payload.shown,n=(0,r.fromJS)(t.payload.thing);return e.update(\"shown\",(0,r.fromJS)({}),(e=>e.set(n,a)))},[s.UPDATE_MODE]:(e,t)=>{var a;let r=t.payload.thing,s=t.payload.mode;return e.setIn((0,n.default)(a=[\"modes\"]).call(a,r),(s||\"\")+\"\")}}},4400:(e,t,a)=>{a.r(t),a.d(t,{current:()=>o,currentFilter:()=>l,isShown:()=>i,showSummary:()=>u,whatMode:()=>c});var n=a(8639),r=a(6561),s=a(9725);const o=e=>e.get(\"layout\"),l=e=>e.get(\"filter\"),i=(e,t,a)=>(t=(0,r.AF)(t),e.get(\"shown\",(0,s.fromJS)({})).get((0,s.fromJS)(t),a)),c=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\";return t=(0,r.AF)(t),e.getIn([\"modes\",...t],a)},u=(0,n.createSelector)((e=>e),(e=>!i(e,\"editor\")))},8989:(e,t,a)=>{a.r(t),a.d(t,{taggedOperations:()=>r});var n=a(8136);const r=(e,t)=>function(a){for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;o<r;o++)s[o-1]=arguments[o];let l=e(a,...s);const{fn:i,layoutSelectors:c,getConfigs:u}=t.getSystem(),d=u(),{maxDisplayedTags:p}=d;let m=c.currentFilter();return m&&!0!==m&&\"true\"!==m&&\"false\"!==m&&(l=i.opsFilter(l,m)),p&&!isNaN(p)&&p>=0&&(l=(0,n.default)(l).call(l,0,p)),l}},9150:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(5527);function r(e){let{configs:t}=e;const a={debug:0,info:1,log:2,warn:3,error:4},r=e=>a[e]||-1;let{logLevel:s}=t,o=r(s);function l(e){for(var t=arguments.length,a=new Array(t>1?t-1:0),n=1;n<t;n++)a[n-1]=arguments[n];r(e)>=o&&console[e](...a)}return l.warn=(0,n.default)(l).call(l,null,\"warn\"),l.error=(0,n.default)(l).call(l,null,\"error\"),l.info=(0,n.default)(l).call(l,null,\"info\"),l.debug=(0,n.default)(l).call(l,null,\"debug\"),{rootInjects:{log:l}}}},7002:(e,t,a)=>{a.r(t),a.d(t,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>p,CLEAR_REQUEST_BODY_VALUE:()=>m,SET_REQUEST_BODY_VALIDATE_ERROR:()=>d,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>l,UPDATE_REQUEST_BODY_INCLUSION:()=>o,UPDATE_REQUEST_BODY_VALUE:()=>r,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>s,UPDATE_REQUEST_CONTENT_TYPE:()=>i,UPDATE_RESPONSE_CONTENT_TYPE:()=>c,UPDATE_SELECTED_SERVER:()=>n,UPDATE_SERVER_VARIABLE_VALUE:()=>u,clearRequestBodyValidateError:()=>x,clearRequestBodyValue:()=>C,initRequestBodyValidateError:()=>_,setActiveExamplesMember:()=>v,setRequestBodyInclusion:()=>y,setRequestBodyValidateError:()=>b,setRequestBodyValue:()=>h,setRequestContentType:()=>E,setResponseContentType:()=>S,setRetainRequestBodyValueFlag:()=>g,setSelectedServer:()=>f,setServerVariableValue:()=>w});const n=\"oas3_set_servers\",r=\"oas3_set_request_body_value\",s=\"oas3_set_request_body_retain_flag\",o=\"oas3_set_request_body_inclusion\",l=\"oas3_set_active_examples_member\",i=\"oas3_set_request_content_type\",c=\"oas3_set_response_content_type\",u=\"oas3_set_server_variable_value\",d=\"oas3_set_request_body_validate_error\",p=\"oas3_clear_request_body_validate_error\",m=\"oas3_clear_request_body_value\";function f(e,t){return{type:n,payload:{selectedServerUrl:e,namespace:t}}}function h(e){let{value:t,pathMethod:a}=e;return{type:r,payload:{value:t,pathMethod:a}}}const g=e=>{let{value:t,pathMethod:a}=e;return{type:s,payload:{value:t,pathMethod:a}}};function y(e){let{value:t,pathMethod:a,name:n}=e;return{type:o,payload:{value:t,pathMethod:a,name:n}}}function v(e){let{name:t,pathMethod:a,contextType:n,contextName:r}=e;return{type:l,payload:{name:t,pathMethod:a,contextType:n,contextName:r}}}function E(e){let{value:t,pathMethod:a}=e;return{type:i,payload:{value:t,pathMethod:a}}}function S(e){let{value:t,path:a,method:n}=e;return{type:c,payload:{value:t,path:a,method:n}}}function w(e){let{server:t,namespace:a,key:n,val:r}=e;return{type:u,payload:{server:t,namespace:a,key:n,val:r}}}const b=e=>{let{path:t,method:a,validationErrors:n}=e;return{type:d,payload:{path:t,method:a,validationErrors:n}}},x=e=>{let{path:t,method:a}=e;return{type:p,payload:{path:t,method:a}}},_=e=>{let{pathMethod:t}=e;return{type:p,payload:{path:t[0],method:t[1]}}},C=e=>{let{pathMethod:t}=e;return{type:m,payload:{pathMethod:t}}}},3723:(e,t,a)=>{a.r(t),a.d(t,{definitionsToAuthorize:()=>i});var n=a(29),r=a(6145),s=a(6785),o=a(8639),l=a(9725);const i=(c=(0,o.createSelector)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var a;let o=(0,l.List)();return t?((0,n.default)(a=t.entrySeq()).call(a,(e=>{let[t,a]=e;const i=a.get(\"type\");var c;if(\"oauth2\"===i&&(0,n.default)(c=a.get(\"flows\").entrySeq()).call(c,(e=>{let[n,s]=e,i=(0,l.fromJS)({flow:n,authorizationUrl:s.get(\"authorizationUrl\"),tokenUrl:s.get(\"tokenUrl\"),scopes:s.get(\"scopes\"),type:a.get(\"type\"),description:a.get(\"description\")});o=o.push(new l.Map({[t]:(0,r.default)(i).call(i,(e=>void 0!==e))}))})),\"http\"!==i&&\"apiKey\"!==i||(o=o.push(new l.Map({[t]:a}))),\"openIdConnect\"===i&&a.get(\"openIdConnectData\")){let e=a.get(\"openIdConnectData\"),i=e.get(\"grant_types_supported\")||[\"authorization_code\",\"implicit\"];(0,n.default)(i).call(i,(n=>{var i;let c=e.get(\"scopes_supported\")&&(0,s.default)(i=e.get(\"scopes_supported\")).call(i,((e,t)=>e.set(t,\"\")),new l.Map),u=(0,l.fromJS)({flow:n,authorizationUrl:e.get(\"authorization_endpoint\"),tokenUrl:e.get(\"token_endpoint\"),scopes:c,type:\"oauth2\",openIdConnectUrl:a.get(\"openIdConnectUrl\")});o=o.push(new l.Map({[t]:(0,r.default)(u).call(u,(e=>void 0!==e))}))}))}})),o):o})),(e,t)=>function(){for(var a=arguments.length,n=new Array(a),r=0;r<a;r++)n[r]=arguments[r];if(t.getSystem().specSelectors.isOAS3()){let e=t.getState().getIn([\"spec\",\"resolvedSubtrees\",\"components\",\"securitySchemes\"]);return c(t,e,...n)}return e(...n)});var c},3427:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(2740),r=a(2565),s=a(810);a(5053),a(9569);const o=e=>{let{callbacks:t,specPath:a,specSelectors:o,getComponent:l}=e;const i=o.callbacksOperations({callbacks:t,specPath:a}),c=(0,n.default)(i),u=l(\"OperationContainer\",!0);return 0===c.length?s.default.createElement(\"span\",null,\"No callbacks\"):s.default.createElement(\"div\",null,(0,r.default)(c).call(c,(e=>{var t;return s.default.createElement(\"div\",{key:`${e}`},s.default.createElement(\"h2\",null,e),(0,r.default)(t=i[e]).call(t,(t=>s.default.createElement(u,{key:`${e}-${t.path}-${t.method}`,op:t.operation,tag:\"callbacks\",method:t.method,path:t.path,specPath:t.specPath,allowTryItOut:!1}))))})))}},6775:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(775),r=a(7512),s=a(6145),o=a(2565),l=a(810);a(5053);class i extends l.default.Component{constructor(e,t){super(e,t),(0,n.default)(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:a,name:n}=e.target,s=(0,r.default)({},this.state.value);n?s[n]=a:s=a,this.setState({value:s},(()=>t(this.state)))}));let{name:a,schema:s}=this.props,o=this.getValue();this.state={name:a,schema:s,value:o}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e;let{schema:t,getComponent:a,errSelectors:n,name:r}=this.props;const i=a(\"Input\"),c=a(\"Row\"),u=a(\"Col\"),d=a(\"authError\"),p=a(\"Markdown\",!0),m=a(\"JumpToPath\",!0),f=(t.get(\"scheme\")||\"\").toLowerCase();let h=this.getValue(),g=(0,s.default)(e=n.allErrors()).call(e,(e=>e.get(\"authId\")===r));if(\"basic\"===f){var y;let e=h?h.get(\"username\"):null;return l.default.createElement(\"div\",null,l.default.createElement(\"h4\",null,l.default.createElement(\"code\",null,r||t.get(\"name\")),\"  (http, Basic)\",l.default.createElement(m,{path:[\"securityDefinitions\",r]})),e&&l.default.createElement(\"h6\",null,\"Authorized\"),l.default.createElement(c,null,l.default.createElement(p,{source:t.get(\"description\")})),l.default.createElement(c,null,l.default.createElement(\"label\",null,\"Username:\"),e?l.default.createElement(\"code\",null,\" \",e,\" \"):l.default.createElement(u,null,l.default.createElement(i,{type:\"text\",required:\"required\",name:\"username\",\"aria-label\":\"auth-basic-username\",onChange:this.onChange,autoFocus:!0}))),l.default.createElement(c,null,l.default.createElement(\"label\",null,\"Password:\"),e?l.default.createElement(\"code\",null,\" ****** \"):l.default.createElement(u,null,l.default.createElement(i,{autoComplete:\"new-password\",name:\"password\",type:\"password\",\"aria-label\":\"auth-basic-password\",onChange:this.onChange}))),(0,o.default)(y=g.valueSeq()).call(y,((e,t)=>l.default.createElement(d,{error:e,key:t}))))}var v;return\"bearer\"===f?l.default.createElement(\"div\",null,l.default.createElement(\"h4\",null,l.default.createElement(\"code\",null,r||t.get(\"name\")),\"  (http, Bearer)\",l.default.createElement(m,{path:[\"securityDefinitions\",r]})),h&&l.default.createElement(\"h6\",null,\"Authorized\"),l.default.createElement(c,null,l.default.createElement(p,{source:t.get(\"description\")})),l.default.createElement(c,null,l.default.createElement(\"label\",null,\"Value:\"),h?l.default.createElement(\"code\",null,\" ****** \"):l.default.createElement(u,null,l.default.createElement(i,{type:\"text\",\"aria-label\":\"auth-bearer-value\",onChange:this.onChange,autoFocus:!0}))),(0,o.default)(v=g.valueSeq()).call(v,((e,t)=>l.default.createElement(d,{error:e,key:t})))):l.default.createElement(\"div\",null,l.default.createElement(\"em\",null,l.default.createElement(\"b\",null,r),\" HTTP authentication: unsupported scheme \",`'${f}'`))}}},6467:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(3427),r=a(2458),s=a(5757),o=a(6617),l=a(9928),i=a(5327),c=a(6775),u=a(6796);const d={Callbacks:n.default,HttpAuth:c.default,RequestBody:r.default,Servers:o.default,ServersContainer:l.default,RequestBodyEditor:i.default,OperationServers:u.default,operationLink:s.default}},5757:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(313),r=a(2565),s=a(810);a(5053),a(9569);class o extends s.Component{render(){const{link:e,name:t,getComponent:a}=this.props,o=a(\"Markdown\",!0);let l=e.get(\"operationId\")||e.get(\"operationRef\"),i=e.get(\"parameters\")&&e.get(\"parameters\").toJS(),c=e.get(\"description\");return s.default.createElement(\"div\",{className:\"operation-link\"},s.default.createElement(\"div\",{className:\"description\"},s.default.createElement(\"b\",null,s.default.createElement(\"code\",null,t)),c?s.default.createElement(o,{source:c}):null),s.default.createElement(\"pre\",null,\"Operation `\",l,\"`\",s.default.createElement(\"br\",null),s.default.createElement(\"br\",null),\"Parameters \",function(e,t){var a;if(\"string\"!=typeof t)return\"\";return(0,r.default)(a=t.split(\"\\n\")).call(a,((t,a)=>a>0?Array(e+1).join(\" \")+t:t)).join(\"\\n\")}(0,(0,n.default)(i,null,2))||\"{}\",s.default.createElement(\"br\",null)))}}const l=o},6796:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(775),r=a(810);a(5053),a(9569);class s extends r.default.Component{constructor(){super(...arguments),(0,n.default)(this,\"setSelectedServer\",(e=>{const{path:t,method:a}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${a}`)})),(0,n.default)(this,\"setServerVariableValue\",(e=>{const{path:t,method:a}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${a}`})})),(0,n.default)(this,\"getSelectedServer\",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),(0,n.default)(this,\"getServerVariable\",((e,t)=>{const{path:a,method:n}=this.props;return this.props.getServerVariable({namespace:`${a}:${n}`,server:e},t)})),(0,n.default)(this,\"getEffectiveServerValue\",(e=>{const{path:t,method:a}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${a}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:a}=this.props;if(!e&&!t)return null;const n=a(\"Servers\"),s=e||t,o=e?\"operation\":\"path\";return r.default.createElement(\"div\",{className:\"opblock-section operation-servers\"},r.default.createElement(\"div\",{className:\"opblock-section-header\"},r.default.createElement(\"div\",{className:\"tab-header\"},r.default.createElement(\"h4\",{className:\"opblock-title\"},\"Servers\"))),r.default.createElement(\"div\",{className:\"opblock-description-wrapper\"},r.default.createElement(\"h4\",{className:\"message\"},\"These \",o,\"-level options override the global server options.\"),r.default.createElement(n,{servers:s,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},5327:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(775),r=a(810),s=(a(5053),a(8096)),o=a(6561);const l=Function.prototype;class i extends r.PureComponent{constructor(e,t){super(e,t),(0,n.default)(this,\"applyDefaultValue\",(e=>{const{onChange:t,defaultValue:a}=e||this.props;return this.setState({value:a}),t(a)})),(0,n.default)(this,\"onChange\",(e=>{this.props.onChange((0,o.Pz)(e))})),(0,n.default)(this,\"onDomChange\",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,o.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,o.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:a}=this.state,n=t.size>0;const o=e(\"TextArea\");return r.default.createElement(\"div\",{className:\"body-param\"},r.default.createElement(o,{className:(0,s.default)(\"body-param__text\",{invalid:n}),title:t.size?t.join(\", \"):\"\",value:a,onChange:this.onDomChange}))}}(0,n.default)(i,\"defaultProps\",{onChange:l,userHasEditedBody:!1})},2458:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p,getDefaultRequestBodyValue:()=>d});var n=a(2565),r=a(8818),s=a(2372),o=a(4163),l=a(810),i=(a(5053),a(9569),a(9725)),c=a(6561),u=a(2518);const d=(e,t,a,n)=>{const r=e.getIn([\"content\",t]),s=r.get(\"schema\").toJS(),o=void 0!==r.get(\"examples\"),l=r.get(\"example\"),i=o?r.getIn([\"examples\",a,\"value\"]):l,u=n.getSampleSchema(s,t,{includeWriteOnly:!0},i);return(0,c.Pz)(u)},p=e=>{let{userHasEditedBody:t,requestBody:a,requestBodyValue:p,requestBodyInclusionSetting:m,requestBodyErrors:f,getComponent:h,getConfigs:g,specSelectors:y,fn:v,contentType:E,isExecute:S,specPath:w,onChange:b,onChangeIncludeEmpty:x,activeExamplesKey:_,updateActiveExamplesKey:C,setRetainRequestBodyValueFlag:j}=e;const O=e=>{b(e.target.files[0])},N=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return\"no value\"===m.get(e,\"no value\")&&(t.shouldDispatchInit=!0),t},k=h(\"Markdown\",!0),A=h(\"modelExample\"),I=h(\"RequestBodyEditor\"),R=h(\"highlightCode\"),P=h(\"ExamplesSelectValueRetainer\"),T=h(\"Example\"),M=h(\"ParameterIncludeEmpty\"),{showCommonExtensions:D}=g(),L=a&&a.get(\"description\")||null,q=a&&a.get(\"content\")||new i.OrderedMap;E=E||q.keySeq().first()||\"\";const B=q.get(E,(0,i.OrderedMap)()),U=B.get(\"schema\",(0,i.OrderedMap)()),J=B.get(\"examples\",null),$=null==J?void 0:(0,n.default)(J).call(J,((e,t)=>{var n;const r=null===(n=e)||void 0===n?void 0:n.get(\"value\",null);return r&&(e=e.set(\"value\",d(a,E,t,v),r)),e}));if(f=i.List.isList(f)?f:(0,i.List)(),!B.size)return null;const K=\"object\"===B.getIn([\"schema\",\"type\"]),V=\"binary\"===B.getIn([\"schema\",\"format\"]),F=\"base64\"===B.getIn([\"schema\",\"format\"]);if(\"application/octet-stream\"===E||0===(0,r.default)(E).call(E,\"image/\")||0===(0,r.default)(E).call(E,\"audio/\")||0===(0,r.default)(E).call(E,\"video/\")||V||F){const e=h(\"Input\");return S?l.default.createElement(e,{type:\"file\",onChange:O}):l.default.createElement(\"i\",null,\"Example values are not available for \",l.default.createElement(\"code\",null,E),\" media types.\")}if(K&&(\"application/x-www-form-urlencoded\"===E||0===(0,r.default)(E).call(E,\"multipart/\"))&&U.get(\"properties\",(0,i.OrderedMap)()).size>0){var z;const e=h(\"JsonSchemaForm\"),t=h(\"ParameterExt\"),a=U.get(\"properties\",(0,i.OrderedMap)());return p=i.Map.isMap(p)?p:(0,i.OrderedMap)(),l.default.createElement(\"div\",{className:\"table-container\"},L&&l.default.createElement(k,{source:L}),l.default.createElement(\"table\",null,l.default.createElement(\"tbody\",null,i.Map.isMap(a)&&(0,n.default)(z=a.entrySeq()).call(z,(a=>{var r,u;let[d,g]=a;if(g.get(\"readOnly\"))return;let y=D?(0,c.po)(g):null;const E=(0,s.default)(r=U.get(\"required\",(0,i.List)())).call(r,d),w=g.get(\"type\"),_=g.get(\"format\"),C=g.get(\"description\"),j=p.getIn([d,\"value\"]),O=p.getIn([d,\"errors\"])||f,A=m.get(d)||!1,I=g.has(\"default\")||g.has(\"example\")||g.hasIn([\"items\",\"example\"])||g.hasIn([\"items\",\"default\"]),R=g.has(\"enum\")&&(1===g.get(\"enum\").size||E),P=I||R;let T=\"\";\"array\"!==w||P||(T=[]),(\"object\"===w||P)&&(T=v.getSampleSchema(g,!1,{includeWriteOnly:!0})),\"string\"!=typeof T&&\"object\"===w&&(T=(0,c.Pz)(T)),\"string\"==typeof T&&\"array\"===w&&(T=JSON.parse(T));const L=\"string\"===w&&(\"binary\"===_||\"base64\"===_);return l.default.createElement(\"tr\",{key:d,className:\"parameters\",\"data-property-name\":d},l.default.createElement(\"td\",{className:\"parameters-col_name\"},l.default.createElement(\"div\",{className:E?\"parameter__name required\":\"parameter__name\"},d,E?l.default.createElement(\"span\",null,\" *\"):null),l.default.createElement(\"div\",{className:\"parameter__type\"},w,_&&l.default.createElement(\"span\",{className:\"prop-format\"},\"($\",_,\")\"),D&&y.size?(0,n.default)(u=y.entrySeq()).call(u,(e=>{let[a,n]=e;return l.default.createElement(t,{key:`${a}-${n}`,xKey:a,xVal:n})})):null),l.default.createElement(\"div\",{className:\"parameter__deprecated\"},g.get(\"deprecated\")?\"deprecated\":null)),l.default.createElement(\"td\",{className:\"parameters-col_description\"},l.default.createElement(k,{source:C}),S?l.default.createElement(\"div\",null,l.default.createElement(e,{fn:v,dispatchInitialValue:!L,schema:g,description:d,getComponent:h,value:void 0===j?T:j,required:E,errors:O,onChange:e=>{b(e,[d])}}),E?null:l.default.createElement(M,{onChange:e=>x(d,e),isIncluded:A,isIncludedOptions:N(d),isDisabled:(0,o.default)(j)?0!==j.length:!(0,c.O2)(j)})):null))})))))}const W=d(a,E,_,v);let H=null;return(0,u.O)(W)&&(H=\"json\"),l.default.createElement(\"div\",null,L&&l.default.createElement(k,{source:L}),$?l.default.createElement(P,{userHasEditedBody:t,examples:$,currentKey:_,currentUserInputValue:p,onSelect:e=>{C(e)},updateValue:b,defaultToFirstExample:!0,getComponent:h,setRetainRequestBodyValueFlag:j}):null,S?l.default.createElement(\"div\",null,l.default.createElement(I,{value:p,errors:f,defaultValue:W,onChange:b,getComponent:h})):l.default.createElement(A,{getComponent:h,getConfigs:g,specSelectors:y,expandDepth:1,isExecute:S,schema:B.get(\"schema\"),specPath:w.push(\"content\",E),example:l.default.createElement(R,{className:\"body-param__example\",getConfigs:g,language:H,value:(0,c.Pz)(p)||W}),includeWriteOnly:!0}),$?l.default.createElement(T,{example:$.get(_),getComponent:h,getConfigs:g}):null)}},9928:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(5053);class r extends n.default.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:a,getComponent:r}=this.props,s=e.servers(),o=r(\"Servers\");return s&&s.size?n.default.createElement(\"div\",null,n.default.createElement(\"span\",{className:\"servers-title\"},\"Servers\"),n.default.createElement(o,{servers:s,currentServer:t.selectedServer(),setSelectedServer:a.setSelectedServer,setServerVariableValue:a.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},6617:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(775),r=a(1778),s=a(2565),o=a(810),l=a(9725);a(5053),a(9569);class i extends o.default.Component{constructor(){super(...arguments),(0,n.default)(this,\"onServerChange\",(e=>{this.setServer(e.target.value)})),(0,n.default)(this,\"onServerVariableValueChange\",(e=>{let{setServerVariableValue:t,currentServer:a}=this.props,n=e.target.getAttribute(\"data-variable\"),r=e.target.value;\"function\"==typeof t&&t({server:a,key:n,val:r})})),(0,n.default)(this,\"setServer\",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:a}=this.props;a||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get(\"url\"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:a,getServerVariable:n}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let i=(0,r.default)(t).call(t,(t=>t.get(\"url\")===e.currentServer)),c=(0,r.default)(o=this.props.servers).call(o,(e=>e.get(\"url\")===this.props.currentServer))||(0,l.OrderedMap)();if(!i)return this.setServer(t.first().get(\"url\"));let u=c.get(\"variables\")||(0,l.OrderedMap)(),d=((0,r.default)(u).call(u,(e=>e.get(\"default\")))||(0,l.OrderedMap)()).get(\"default\"),p=i.get(\"variables\")||(0,l.OrderedMap)(),m=((0,r.default)(p).call(p,(e=>e.get(\"default\")))||(0,l.OrderedMap)()).get(\"default\");(0,s.default)(p).call(p,((t,r)=>{n(e.currentServer,r)&&d===m||a({server:e.currentServer,key:r,val:t.get(\"default\")||\"\"})}))}}render(){var e,t;let{servers:a,currentServer:n,getServerVariable:i,getEffectiveServerValue:c}=this.props,u=((0,r.default)(a).call(a,(e=>e.get(\"url\")===n))||(0,l.OrderedMap)()).get(\"variables\")||(0,l.OrderedMap)(),d=0!==u.size;return o.default.createElement(\"div\",{className:\"servers\"},o.default.createElement(\"label\",{htmlFor:\"servers\"},o.default.createElement(\"select\",{onChange:this.onServerChange,value:n},(0,s.default)(e=a.valueSeq()).call(e,(e=>o.default.createElement(\"option\",{value:e.get(\"url\"),key:e.get(\"url\")},e.get(\"url\"),e.get(\"description\")&&` - ${e.get(\"description\")}`))).toArray())),d?o.default.createElement(\"div\",null,o.default.createElement(\"div\",{className:\"computed-url\"},\"Computed URL:\",o.default.createElement(\"code\",null,c(n))),o.default.createElement(\"h4\",null,\"Server variables\"),o.default.createElement(\"table\",null,o.default.createElement(\"tbody\",null,(0,s.default)(t=u.entrySeq()).call(t,(e=>{var t;let[a,r]=e;return o.default.createElement(\"tr\",{key:a},o.default.createElement(\"td\",null,a),o.default.createElement(\"td\",null,r.get(\"enum\")?o.default.createElement(\"select\",{\"data-variable\":a,onChange:this.onServerVariableValueChange},(0,s.default)(t=r.get(\"enum\")).call(t,(e=>o.default.createElement(\"option\",{selected:e===i(n,a),key:e,value:e},e)))):o.default.createElement(\"input\",{type:\"text\",value:i(n,a)||\"\",onChange:this.onServerVariableValueChange,\"data-variable\":a})))}))))):null)}}},7779:(e,t,a)=>{a.r(t),a.d(t,{OAS30ComponentWrapFactory:()=>i,OAS3ComponentWrapFactory:()=>l,isOAS30:()=>s,isSwagger2:()=>o});var n=a(863),r=a(810);function s(e){const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.0\\.([0123])(?:-rc[012])?$/.test(t)}function o(e){const t=e.get(\"swagger\");return\"string\"==typeof t&&\"2.0\"===t}function l(e){return(t,a)=>s=>{var o;return\"function\"==typeof(null===(o=a.specSelectors)||void 0===o?void 0:o.isOAS3)?a.specSelectors.isOAS3()?r.default.createElement(e,(0,n.default)({},s,a,{Ori:t})):r.default.createElement(t,s):(console.warn(\"OAS3 wrapper: couldn't get spec\"),null)}}function i(e){return(t,a)=>s=>{var o;return\"function\"==typeof(null===(o=a.specSelectors)||void 0===o?void 0:o.isOAS30)?a.specSelectors.isOAS30()?r.default.createElement(e,(0,n.default)({},s,a,{Ori:t})):r.default.createElement(t,s):(console.warn(\"OAS30 wrapper: couldn't get spec\"),null)}}},7451:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(2044),r=a(3723),s=a(1741),o=a(6467),l=a(7761),i=a(7002),c=a(5065),u=a(2109);function d(){return{components:o.default,wrapComponents:l.default,statePlugins:{spec:{wrapSelectors:n,selectors:s},auth:{wrapSelectors:r},oas3:{actions:i,reducers:u.default,selectors:c}}}}},2109:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(5487),r=a(29),s=a(6785),o=a(9725),l=a(7002);const i={[l.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:a,namespace:n}}=t;const r=n?[n,\"selectedServer\"]:[\"selectedServer\"];return e.setIn(r,a)},[l.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:a,pathMethod:s}}=t,[l,i]=s;if(!o.Map.isMap(a))return e.setIn([\"requestData\",l,i,\"bodyValue\"],a);let c,u=e.getIn([\"requestData\",l,i,\"bodyValue\"])||(0,o.Map)();o.Map.isMap(u)||(u=(0,o.Map)());const[...d]=(0,n.default)(a).call(a);return(0,r.default)(d).call(d,(e=>{let t=a.getIn([e]);u.has(e)&&o.Map.isMap(t)||(c=u.setIn([e,\"value\"],t))})),e.setIn([\"requestData\",l,i,\"bodyValue\"],c)},[l.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:a,pathMethod:n}}=t,[r,s]=n;return e.setIn([\"requestData\",r,s,\"retainBodyValue\"],a)},[l.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:a,pathMethod:n,name:r}}=t,[s,o]=n;return e.setIn([\"requestData\",s,o,\"bodyInclusion\",r],a)},[l.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:a,pathMethod:n,contextType:r,contextName:s}}=t,[o,l]=n;return e.setIn([\"examples\",o,l,r,s,\"activeExample\"],a)},[l.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:a,pathMethod:n}}=t,[r,s]=n;return e.setIn([\"requestData\",r,s,\"requestContentType\"],a)},[l.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:a,path:n,method:r}}=t;return e.setIn([\"requestData\",n,r,\"responseContentType\"],a)},[l.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:a,namespace:n,key:r,val:s}}=t;const o=n?[n,\"serverVariableValues\",a,r]:[\"serverVariableValues\",a,r];return e.setIn(o,s)},[l.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:a,method:n,validationErrors:r}}=t,l=[];if(l.push(\"Required field is not provided\"),r.missingBodyValue)return e.setIn([\"requestData\",a,n,\"errors\"],(0,o.fromJS)(l));if(r.missingRequiredKeys&&r.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=r;return e.updateIn([\"requestData\",a,n,\"bodyValue\"],(0,o.fromJS)({}),(e=>(0,s.default)(t).call(t,((e,t)=>e.setIn([t,\"errors\"],(0,o.fromJS)(l))),e)))}return console.warn(\"unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR\"),e},[l.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:a,method:r}}=t;const l=e.getIn([\"requestData\",a,r,\"bodyValue\"]);if(!o.Map.isMap(l))return e.setIn([\"requestData\",a,r,\"errors\"],(0,o.fromJS)([]));const[...i]=(0,n.default)(l).call(l);return i?e.updateIn([\"requestData\",a,r,\"bodyValue\"],(0,o.fromJS)({}),(e=>(0,s.default)(i).call(i,((e,t)=>e.setIn([t,\"errors\"],(0,o.fromJS)([]))),e))):e},[l.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:a}}=t,[n,r]=a;const s=e.getIn([\"requestData\",n,r,\"bodyValue\"]);return s?o.Map.isMap(s)?e.setIn([\"requestData\",n,r,\"bodyValue\"],(0,o.Map)()):e.setIn([\"requestData\",n,r,\"bodyValue\"],\"\"):e}}},5065:(e,t,a)=>{a.r(t),a.d(t,{activeExamplesMember:()=>E,hasUserEditedBody:()=>g,requestBodyErrors:()=>v,requestBodyInclusionSetting:()=>y,requestBodyValue:()=>m,requestContentType:()=>S,responseContentType:()=>w,selectDefaultRequestBodyValue:()=>h,selectedServer:()=>p,serverEffectiveValue:()=>_,serverVariableValue:()=>b,serverVariables:()=>x,shouldRetainRequestBodyValue:()=>f,validOperationMethods:()=>N,validateBeforeExecute:()=>C,validateShallowRequired:()=>O});var n=a(2565),r=a(29),s=a(2740),o=a(8818),l=a(9725),i=a(8639),c=a(2458),u=a(6561);const d=e=>function(t){for(var a=arguments.length,n=new Array(a>1?a-1:0),r=1;r<a;r++)n[r-1]=arguments[r];return a=>{if(a.getSystem().specSelectors.isOAS3()){const r=e(t,...n);return\"function\"==typeof r?r(a):r}return null}};const p=d(((e,t)=>{const a=t?[t,\"selectedServer\"]:[\"selectedServer\"];return e.getIn(a)||\"\"})),m=d(((e,t,a)=>e.getIn([\"requestData\",t,a,\"bodyValue\"])||null)),f=d(((e,t,a)=>e.getIn([\"requestData\",t,a,\"retainBodyValue\"])||!1)),h=(e,t,a)=>e=>{const{oas3Selectors:n,specSelectors:r,fn:s}=e.getSystem();if(r.isOAS3()){const e=n.requestContentType(t,a);if(e)return(0,c.getDefaultRequestBodyValue)(r.specResolvedSubtree([\"paths\",t,a,\"requestBody\"]),e,n.activeExamplesMember(t,a,\"requestBody\",\"requestBody\"),s)}return null},g=d(((e,t,a)=>e=>{const{oas3Selectors:n,specSelectors:r,fn:s}=e;let o=!1;const i=n.requestContentType(t,a);let d=n.requestBodyValue(t,a);const p=r.specResolvedSubtree([\"paths\",t,a,\"requestBody\"]);if(!p)return!1;if(l.Map.isMap(d)&&(d=(0,u.Pz)(d.mapEntries((e=>l.Map.isMap(e[1])?[e[0],e[1].get(\"value\")]:e)).toJS())),l.List.isList(d)&&(d=(0,u.Pz)(d)),i){const e=(0,c.getDefaultRequestBodyValue)(p,i,n.activeExamplesMember(t,a,\"requestBody\",\"requestBody\"),s);o=!!d&&d!==e}return o})),y=d(((e,t,a)=>e.getIn([\"requestData\",t,a,\"bodyInclusion\"])||(0,l.Map)())),v=d(((e,t,a)=>e.getIn([\"requestData\",t,a,\"errors\"])||null)),E=d(((e,t,a,n,r)=>e.getIn([\"examples\",t,a,n,r,\"activeExample\"])||null)),S=d(((e,t,a)=>e.getIn([\"requestData\",t,a,\"requestContentType\"])||null)),w=d(((e,t,a)=>e.getIn([\"requestData\",t,a,\"responseContentType\"])||null)),b=d(((e,t,a)=>{let n;if(\"string\"!=typeof t){const{server:e,namespace:r}=t;n=r?[r,\"serverVariableValues\",e,a]:[\"serverVariableValues\",e,a]}else{n=[\"serverVariableValues\",t,a]}return e.getIn(n)||null})),x=d(((e,t)=>{let a;if(\"string\"!=typeof t){const{server:e,namespace:n}=t;a=n?[n,\"serverVariableValues\",e]:[\"serverVariableValues\",e]}else{a=[\"serverVariableValues\",t]}return e.getIn(a)||(0,l.OrderedMap)()})),_=d(((e,t)=>{var a,r;if(\"string\"!=typeof t){const{server:n,namespace:s}=t;r=n,a=s?e.getIn([s,\"serverVariableValues\",r]):e.getIn([\"serverVariableValues\",r])}else r=t,a=e.getIn([\"serverVariableValues\",r]);a=a||(0,l.OrderedMap)();let s=r;return(0,n.default)(a).call(a,((e,t)=>{s=s.replace(new RegExp(`{${t}}`,\"g\"),e)})),s})),C=(j=(e,t)=>((e,t)=>(t=t||[],!!e.getIn([\"requestData\",...t,\"bodyValue\"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return e=>{const a=e.getSystem().specSelectors.specJson();let n=[...t][1]||[];return!a.getIn([\"paths\",...n,\"requestBody\",\"required\"])||j(...t)}});var j;const O=(e,t)=>{var a;let{oas3RequiredRequestBodyContentType:n,oas3RequestContentType:i,oas3RequestBodyValue:c}=t,u=[];if(!l.Map.isMap(c))return u;let d=[];return(0,r.default)(a=(0,s.default)(n.requestContentType)).call(a,(e=>{if(e===i){let t=n.requestContentType[e];(0,r.default)(t).call(t,(e=>{(0,o.default)(d).call(d,e)<0&&d.push(e)}))}})),(0,r.default)(d).call(d,(e=>{c.getIn([e,\"value\"])||u.push(e)})),u},N=(0,i.createSelector)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"]))},1741:(e,t,a)=>{a.r(t),a.d(t,{callbacksOperations:()=>g,isOAS3:()=>m,isOAS30:()=>p,isSwagger2:()=>d,servers:()=>h});var n=a(2565),r=a(6785),s=a(6145),o=a(2372),l=a(5171),i=a(9725),c=a(7779);const u=(0,i.Map)(),d=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,c.isSwagger2)(t)},p=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,c.isOAS30)(t)},m=()=>e=>e.getSystem().specSelectors.isOAS30();function f(e){return function(t){for(var a=arguments.length,n=new Array(a>1?a-1:0),r=1;r<a;r++)n[r-1]=arguments[r];return a=>{if(a.specSelectors.isOAS3()){const r=e(t,...n);return\"function\"==typeof r?r(a):r}return null}}}const h=f((()=>e=>e.specSelectors.specJson().get(\"servers\",u))),g=f(((e,t)=>{let{callbacks:a,specPath:c}=t;return e=>{var t;const u=e.specSelectors.validOperationMethods();return i.Map.isMap(a)?(0,n.default)(t=(0,r.default)(a).call(a,((e,t,a)=>i.Map.isMap(t)?(0,r.default)(t).call(t,((e,t,r)=>{var d,p;if(!i.Map.isMap(t))return e;const m=(0,n.default)(d=(0,s.default)(p=t.entrySeq()).call(p,(e=>{let[t]=e;return(0,o.default)(u).call(u,t)}))).call(d,(e=>{let[t,n]=e;return{operation:(0,i.Map)({operation:n}),method:t,path:r,callbackName:a,specPath:(0,l.default)(c).call(c,[a,r,t])}}));return(0,l.default)(e).call(e,m)}),(0,i.List)()):e),(0,i.List)()).groupBy((e=>e.callbackName))).call(t,(e=>e.toArray())).toObject():{}}}))},2044:(e,t,a)=>{a.r(t),a.d(t,{basePath:()=>f,consumes:()=>h,definitions:()=>c,hasHost:()=>u,host:()=>m,produces:()=>g,schemes:()=>y,securityDefinitions:()=>d,validOperationMethods:()=>p});var n=a(8639),r=a(3881),s=a(9725);const o=(0,s.Map)();function l(e){return(t,a)=>function(){if(a.getSystem().specSelectors.isOAS3()){const t=e(...arguments);return\"function\"==typeof t?t(a):t}return t(...arguments)}}const i=l((0,n.createSelector)((()=>null))),c=l((()=>e=>{const t=e.getSystem().specSelectors.specJson().getIn([\"components\",\"schemas\"]);return s.Map.isMap(t)?t:o})),u=l((()=>e=>e.getSystem().specSelectors.specJson().hasIn([\"servers\",0]))),d=l((0,n.createSelector)(r.specJsonWithResolvedSubtrees,(e=>e.getIn([\"components\",\"securitySchemes\"])||null))),p=(e,t)=>function(a){if(t.specSelectors.isOAS3())return t.oas3Selectors.validOperationMethods();for(var n=arguments.length,r=new Array(n>1?n-1:0),s=1;s<n;s++)r[s-1]=arguments[s];return e(...r)},m=i,f=i,h=i,g=i,y=i},356:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...a}=e;const{schema:r,getComponent:s,errSelectors:o,authorized:l,onAuthChange:i,name:c}=a,u=s(\"HttpAuth\");return\"http\"===r.get(\"type\")?n.default.createElement(u,{key:c,schema:r,name:c,errSelectors:o,authorized:l,getComponent:s,onChange:i}):n.default.createElement(t,a)}))},7761:(e,t,a)=>{a.r(t),a.d(t,{default:()=>c});var n=a(2460),r=a(356),s=a(9487),o=a(58),l=a(3499),i=a(287);const c={Markdown:n.default,AuthItem:r.default,JsonSchema_string:i.default,VersionStamp:s.default,model:l.default,onlineValidatorBadge:o.default}},287:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...a}=e;const{schema:r,getComponent:s,errors:o,onChange:l}=a,i=r&&r.get?r.get(\"format\"):null,c=r&&r.get?r.get(\"type\"):null,u=s(\"Input\");return c&&\"string\"===c&&i&&(\"binary\"===i||\"base64\"===i)?n.default.createElement(u,{type:\"file\",className:o.length?\"invalid\":\"\",title:o.length?o:\"\",onChange:e=>{l(e.target.files[0])},disabled:t.isDisabled}):n.default.createElement(t,a)}))},2460:(e,t,a)=>{a.r(t),a.d(t,{Markdown:()=>u,default:()=>d});var n=a(5942),r=a(810),s=(a(5053),a(8096)),o=a(3952),l=a(7779),i=a(5466);const c=new o.Remarkable(\"commonmark\");c.block.ruler.enable([\"table\"]),c.set({linkTarget:\"_blank\"});const u=e=>{let{source:t,className:a=\"\",getConfigs:o}=e;if(\"string\"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=o(),l=c.render(t),u=(0,i.s)(l,{useUnsafeMarkdown:e});let d;return\"string\"==typeof u&&(d=(0,n.default)(u).call(u)),r.default.createElement(\"div\",{dangerouslySetInnerHTML:{__html:d},className:(0,s.default)(a,\"renderedMarkdown\")})}return null};u.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const d=(0,l.OAS3ComponentWrapFactory)(u)},3499:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(863),r=a(810),s=(a(5053),a(7779)),o=a(1543);class l extends r.Component{render(){let{getConfigs:e,schema:t}=this.props,a=[\"model-box\"],s=null;return!0===t.get(\"deprecated\")&&(a.push(\"deprecated\"),s=r.default.createElement(\"span\",{className:\"model-deprecated-warning\"},\"Deprecated:\")),r.default.createElement(\"div\",{className:a.join(\" \")},s,r.default.createElement(o.Z,(0,n.default)({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const i=(0,s.OAS3ComponentWrapFactory)(l)},58:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(7779),r=a(5623);const s=(0,n.OAS3ComponentWrapFactory)(r.Z)},9487:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(7779).OAS30ComponentWrapFactory)((e=>{const{Ori:t}=e;return n.default.createElement(\"span\",null,n.default.createElement(t,e),n.default.createElement(\"small\",{className:\"version-stamp\"},n.default.createElement(\"pre\",{className:\"version\"},\"OAS 3.0\")))}))},7754:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(7512),r=a(5800),s=a(4380);const o=function(e){let{fn:t,getSystem:a}=e;if(t.jsonSchema202012){const e=(0,r.makeIsExpandable)(t.jsonSchema202012.isExpandable,a);(0,n.default)(this.fn.jsonSchema202012,{isExpandable:e,getProperties:r.getProperties})}if(\"function\"==typeof t.sampleFromSchema&&t.jsonSchema202012){const e=(0,s.wrapOAS31Fn)({sampleFromSchema:t.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:t.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:t.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:t.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:t.jsonSchema202012.memoizedCreateXMLExample},a());(0,n.default)(this.fn,e)}}},9503:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(5053),a(6561));const s=e=>{let{getComponent:t,specSelectors:a}=e;const s=a.selectContactNameField(),o=a.selectContactUrl(),l=a.selectContactEmailField(),i=t(\"Link\");return n.default.createElement(\"div\",{className:\"info__contact\"},o&&n.default.createElement(\"div\",null,n.default.createElement(i,{href:(0,r.Nm)(o),target:\"_blank\"},s,\" - Website\")),l&&n.default.createElement(i,{href:(0,r.Nm)(`mailto:${l}`)},o?`Send email to ${s}`:`Contact ${s}`))}},6133:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(5053),a(6561));const s=e=>{let{getComponent:t,specSelectors:a}=e;const s=a.version(),o=a.url(),l=a.basePath(),i=a.host(),c=a.selectInfoSummaryField(),u=a.selectInfoDescriptionField(),d=a.selectInfoTitleField(),p=a.selectInfoTermsOfServiceUrl(),m=a.selectExternalDocsUrl(),f=a.selectExternalDocsDescriptionField(),h=a.contact(),g=a.license(),y=t(\"Markdown\",!0),v=t(\"Link\"),E=t(\"VersionStamp\"),S=t(\"InfoUrl\"),w=t(\"InfoBasePath\"),b=t(\"License\",!0),x=t(\"Contact\",!0),_=t(\"JsonSchemaDialect\",!0);return n.default.createElement(\"div\",{className:\"info\"},n.default.createElement(\"hgroup\",{className:\"main\"},n.default.createElement(\"h2\",{className:\"title\"},d,s&&n.default.createElement(E,{version:s})),(i||l)&&n.default.createElement(w,{host:i,basePath:l}),o&&n.default.createElement(S,{getComponent:t,url:o})),c&&n.default.createElement(\"p\",{className:\"info__summary\"},c),n.default.createElement(\"div\",{className:\"info__description description\"},n.default.createElement(y,{source:u})),p&&n.default.createElement(\"div\",{className:\"info__tos\"},n.default.createElement(v,{target:\"_blank\",href:(0,r.Nm)(p)},\"Terms of service\")),h.size>0&&n.default.createElement(x,null),g.size>0&&n.default.createElement(b,null),m&&n.default.createElement(v,{className:\"info__extdocs\",target:\"_blank\",href:(0,r.Nm)(m)},f||m),n.default.createElement(_,null))}},2562:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(5053),a(6561));const s=e=>{let{getComponent:t,specSelectors:a}=e;const s=a.selectJsonSchemaDialectField(),o=a.selectJsonSchemaDialectDefault(),l=t(\"Link\");return n.default.createElement(n.default.Fragment,null,s&&s===o&&n.default.createElement(\"p\",{className:\"info__jsonschemadialect\"},\"JSON Schema dialect:\",\" \",n.default.createElement(l,{target:\"_blank\",href:(0,r.Nm)(s)},s)),s&&s!==o&&n.default.createElement(\"div\",{className:\"error-wrapper\"},n.default.createElement(\"div\",{className:\"no-margin\"},n.default.createElement(\"div\",{className:\"errors\"},n.default.createElement(\"div\",{className:\"errors-wrapper\"},n.default.createElement(\"h4\",{className:\"center\"},\"Warning\"),n.default.createElement(\"p\",{className:\"message\"},n.default.createElement(\"strong\",null,\"OpenAPI.jsonSchemaDialect\"),\" field contains a value different from the default value of\",\" \",n.default.createElement(l,{target:\"_blank\",href:o},o),\". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value.\"))))))}},1876:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810),r=(a(5053),a(6561));const s=e=>{let{getComponent:t,specSelectors:a}=e;const s=a.selectLicenseNameField(),o=a.selectLicenseUrl(),l=t(\"Link\");return n.default.createElement(\"div\",{className:\"info__license\"},o?n.default.createElement(\"div\",{className:\"info__license__url\"},n.default.createElement(l,{target:\"_blank\",href:(0,r.Nm)(o)},s)):n.default.createElement(\"span\",null,s))}},2718:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(2372),r=a(810);a(5053),a(9569);const s=e=>\"string\"==typeof e&&(0,n.default)(e).call(e,\"#/components/schemas/\")?(e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}})(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):null,o=(0,r.forwardRef)(((e,t)=>{let{schema:a,getComponent:n,onToggle:o}=e;const l=n(\"JSONSchema202012\"),i=s(a.get(\"$$ref\")),c=(0,r.useCallback)(((e,t)=>{o(i,t)}),[i,o]);return r.default.createElement(l,{name:i,schema:a.toJS(),ref:t,onExpand:c})}));o.defaultProps={name:\"\",displayName:\"\",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const l=o},263:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(2740),r=a(2565),s=a(7204),o=a(810),l=(a(5053),a(8096));const i=e=>{var t;let{specActions:a,specSelectors:i,layoutSelectors:c,layoutActions:u,getComponent:d,getConfigs:p}=e;const m=i.selectSchemas(),f=(0,n.default)(m).length>0,h=[\"components\",\"schemas\"],{docExpansion:g,defaultModelsExpandDepth:y}=p(),v=y>0&&\"none\"!==g,E=c.isShown(h,v),S=d(\"Collapse\"),w=d(\"JSONSchema202012\");(0,o.useEffect)((()=>{const e=E&&y>1,t=null!=i.specResolvedSubtree(h);e&&!t&&a.requestResolvedSubtree(h)}),[E,y]);const b=(0,o.useCallback)((()=>{u.show(h,!E)}),[E]),x=(0,o.useCallback)((e=>{null!==e&&u.readyToScroll(h,e)}),[]),_=e=>t=>{null!==t&&u.readyToScroll([...h,e],t)},C=e=>(t,n)=>{if(n){const t=[...h,e];null!=i.specResolvedSubtree(t)||a.requestResolvedSubtree([...h,e])}};return!f||y<0?null:o.default.createElement(\"section\",{className:(0,l.default)(\"models\",{\"is-open\":E}),ref:x},o.default.createElement(\"h4\",null,o.default.createElement(\"button\",{\"aria-expanded\":E,className:\"models-control\",onClick:b},o.default.createElement(\"span\",null,\"Schemas\"),o.default.createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},o.default.createElement(\"use\",{xlinkHref:E?\"#large-arrow-up\":\"#large-arrow-down\"})))),o.default.createElement(S,{isOpened:E},(0,r.default)(t=(0,s.default)(m)).call(t,(e=>{let[t,a]=e;return o.default.createElement(w,{key:t,ref:_(t),schema:a,name:t,onExpand:C(t)})}))))}},3429:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(5053);const r=e=>{let{bypass:t,isSwagger2:a,isOAS3:r,isOAS31:s,alsoShow:o,children:l}=e;return t?n.default.createElement(\"div\",null,l):a&&(r||s)?n.default.createElement(\"div\",{className:\"version-pragma\"},o,n.default.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},n.default.createElement(\"div\",null,n.default.createElement(\"h3\",null,\"Unable to render this definition\"),n.default.createElement(\"p\",null,n.default.createElement(\"code\",null,\"swagger\"),\" and \",n.default.createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),n.default.createElement(\"p\",null,\"Supported version fields are \",n.default.createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",n.default.createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",n.default.createElement(\"code\",null,\"openapi: 3.1.0\"),\").\")))):a||r||s?n.default.createElement(\"div\",null,l):n.default.createElement(\"div\",{className:\"version-pragma\"},o,n.default.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},n.default.createElement(\"div\",null,n.default.createElement(\"h3\",null,\"Unable to render this definition\"),n.default.createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),n.default.createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",n.default.createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",n.default.createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",n.default.createElement(\"code\",null,\"openapi: 3.1.0\"),\").\"))))}},9508:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(2740),r=a(2565),s=a(810);a(5053);const o=e=>{let{specSelectors:t,getComponent:a}=e;const o=t.selectWebhooksOperations(),l=(0,n.default)(o),i=a(\"OperationContainer\",!0);return 0===l.length?null:s.default.createElement(\"div\",{className:\"webhooks\"},s.default.createElement(\"h2\",null,\"Webhooks\"),(0,r.default)(l).call(l,(e=>{var t;return s.default.createElement(\"div\",{key:`${e}-webhook`},(0,r.default)(t=o[e]).call(t,(t=>s.default.createElement(i,{key:`${e}-${t.method}-webhook`,op:t.operation,tag:\"webhooks\",method:t.method,path:e,specPath:t.specPath,allowTryItOut:!1}))))})))}},4380:(e,t,a)=>{a.r(t),a.d(t,{createOnlyOAS31ComponentWrapper:()=>p,createOnlyOAS31Selector:()=>c,createOnlyOAS31SelectorWrapper:()=>u,createSystemSelector:()=>d,isOAS31:()=>i,wrapOAS31Fn:()=>m});var n=a(863),r=a(7415),s=a(2565),o=a(7204),l=a(810);const i=e=>{const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.1\\.(?:[1-9]\\d*|0)$/.test(t)},c=e=>function(t){for(var a=arguments.length,n=new Array(a>1?a-1:0),r=1;r<a;r++)n[r-1]=arguments[r];return a=>{if(a.getSystem().specSelectors.isOAS31()){const r=e(t,...n);return\"function\"==typeof r?r(a):r}return null}},u=e=>(t,a)=>function(n){for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;o<r;o++)s[o-1]=arguments[o];if(a.getSystem().specSelectors.isOAS31()){const r=e(n,...s);return\"function\"==typeof r?r(t,a):r}return t(...s)},d=e=>function(t){for(var a=arguments.length,n=new Array(a>1?a-1:0),r=1;r<a;r++)n[r-1]=arguments[r];return a=>{const r=e(t,a,...n);return\"function\"==typeof r?r(a):r}},p=e=>(t,a)=>r=>a.specSelectors.isOAS31()?l.default.createElement(e,(0,n.default)({},r,{originalComponent:t,getSystem:a.getSystem})):l.default.createElement(t,r),m=(e,t)=>{var a;const{fn:n,specSelectors:l}=t;return(0,r.default)((0,s.default)(a=(0,o.default)(e)).call(a,(e=>{let[t,a]=e;const r=n[t];return[t,function(){return l.isOAS31()?a(...arguments):\"function\"==typeof r?r(...arguments):void 0}]})))}},9806:(e,t,a)=>{a.r(t),a.d(t,{default:()=>A});var n=a(9508),r=a(1876),s=a(9503),o=a(6133),l=a(2562),i=a(3429),c=a(2718),u=a(263),d=a(6608),p=a(7423),m=a(284),f=a(7042),h=a(2914),g=a(1434),y=a(1122),v=a(4380),E=a(9305),S=a(2884),w=a(4280),b=a(9450),x=a(3995),_=a(9525),C=a(5324),j=a(809),O=a(4951),N=a(7536),k=a(7754);const A=e=>{let{fn:t}=e;const a=t.createSystemSelector||v.createSystemSelector,A=t.createOnlyOAS31Selector||v.createOnlyOAS31Selector;return{afterLoad:k.default,fn:{isOAS31:v.isOAS31,createSystemSelector:v.createSystemSelector,createOnlyOAS31Selector:v.createOnlyOAS31Selector},components:{Webhooks:n.default,JsonSchemaDialect:l.default,OAS31Info:o.default,OAS31License:r.default,OAS31Contact:s.default,OAS31VersionPragmaFilter:i.default,OAS31Model:c.default,OAS31Models:u.default,JSONSchema202012KeywordExample:b.default,JSONSchema202012KeywordXml:x.default,JSONSchema202012KeywordDiscriminator:_.default,JSONSchema202012KeywordExternalDocs:C.default},wrapComponents:{InfoContainer:m.default,License:d.default,Contact:p.default,VersionPragmaFilter:g.default,VersionStamp:y.default,Model:f.default,Models:h.default,JSONSchema202012KeywordDescription:j.default,JSONSchema202012KeywordDefault:O.default,JSONSchema202012KeywordProperties:N.default},statePlugins:{spec:{selectors:{isOAS31:a(E.isOAS31),license:E.license,selectLicenseNameField:E.selectLicenseNameField,selectLicenseUrlField:E.selectLicenseUrlField,selectLicenseIdentifierField:A(E.selectLicenseIdentifierField),selectLicenseUrl:a(E.selectLicenseUrl),contact:E.contact,selectContactNameField:E.selectContactNameField,selectContactEmailField:E.selectContactEmailField,selectContactUrlField:E.selectContactUrlField,selectContactUrl:a(E.selectContactUrl),selectInfoTitleField:E.selectInfoTitleField,selectInfoSummaryField:A(E.selectInfoSummaryField),selectInfoDescriptionField:E.selectInfoDescriptionField,selectInfoTermsOfServiceField:E.selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:a(E.selectInfoTermsOfServiceUrl),selectExternalDocsDescriptionField:E.selectExternalDocsDescriptionField,selectExternalDocsUrlField:E.selectExternalDocsUrlField,selectExternalDocsUrl:a(E.selectExternalDocsUrl),webhooks:A(E.webhooks),selectWebhooksOperations:A(a(E.selectWebhooksOperations)),selectJsonSchemaDialectField:E.selectJsonSchemaDialectField,selectJsonSchemaDialectDefault:E.selectJsonSchemaDialectDefault,selectSchemas:a(E.selectSchemas)},wrapSelectors:{isOAS3:S.isOAS3,selectLicenseUrl:S.selectLicenseUrl}},oas31:{selectors:{selectLicenseUrl:A(a(w.selectLicenseUrl))}}}}}},5989:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(5053);const r=e=>{let{schema:t,getSystem:a}=e;if(null==t||!t.description)return null;const{getComponent:r}=a(),s=r(\"Markdown\");return n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},n.default.createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},n.default.createElement(s,{source:t.description})))}},9525:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(2740),r=a(810),s=(a(5053),a(8096)),o=a(7749);const l=e=>{let{schema:t,getSystem:a}=e;const l=(null==t?void 0:t.discriminator)||{},{fn:i,getComponent:c}=a(),{useIsExpandedDeeply:u,useComponent:d}=i.jsonSchema202012,p=u(),m=!!l.mapping,[f,h]=(0,r.useState)(p),[g,y]=(0,r.useState)(!1),v=d(\"Accordion\"),E=d(\"ExpandDeepButton\"),S=c(\"JSONSchema202012DeepExpansionContext\")(),w=(0,r.useCallback)((()=>{h((e=>!e))}),[]),b=(0,r.useCallback)(((e,t)=>{h(t),y(t)}),[]);return 0===(0,n.default)(l).length?null:r.default.createElement(S.Provider,{value:g},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator\"},m?r.default.createElement(r.default.Fragment,null,r.default.createElement(v,{expanded:f,onChange:w},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\")),r.default.createElement(E,{expanded:f,onClick:b})):r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\"),l.propertyName&&r.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},l.propertyName),r.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),r.default.createElement(\"ul\",{className:(0,s.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!f})},f&&r.default.createElement(\"li\",{className:\"json-schema-2020-12-property\"},r.default.createElement(o.default,{discriminator:l})))))}},7749:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(2740),r=a(2565),s=a(7204),o=a(810);a(5053);const l=e=>{var t;let{discriminator:a}=e;const l=(null==a?void 0:a.mapping)||{};return 0===(0,n.default)(l).length?null:(0,r.default)(t=(0,s.default)(l)).call(t,(e=>{let[t,a]=e;return o.default.createElement(\"div\",{key:`${t}-${a}`,className:\"json-schema-2020-12-keyword\"},o.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},t),o.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},a))}))};l.defaultProps={mapping:void 0};const i=l},9450:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(5053);const r=e=>{let{schema:t,getSystem:a}=e;const{fn:r}=a(),{hasKeyword:s,stringify:o}=r.jsonSchema202012.useFn();return s(t,\"example\")?n.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--example\"},n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Example\"),n.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},o(t.example))):null}},5324:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(2740),r=a(810),s=(a(5053),a(8096)),o=a(6561);const l=e=>{let{schema:t,getSystem:a}=e;const l=(null==t?void 0:t.externalDocs)||{},{fn:i,getComponent:c}=a(),{useIsExpandedDeeply:u,useComponent:d}=i.jsonSchema202012,p=u(),m=!(!l.description&&!l.url),[f,h]=(0,r.useState)(p),[g,y]=(0,r.useState)(!1),v=d(\"Accordion\"),E=d(\"ExpandDeepButton\"),S=c(\"JSONSchema202012KeywordDescription\"),w=c(\"Link\"),b=c(\"JSONSchema202012DeepExpansionContext\")(),x=(0,r.useCallback)((()=>{h((e=>!e))}),[]),_=(0,r.useCallback)(((e,t)=>{h(t),y(t)}),[]);return 0===(0,n.default)(l).length?null:r.default.createElement(b.Provider,{value:g},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs\"},m?r.default.createElement(r.default.Fragment,null,r.default.createElement(v,{expanded:f,onChange:x},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\")),r.default.createElement(E,{expanded:f,onClick:_})):r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\"),r.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),r.default.createElement(\"ul\",{className:(0,s.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!f})},f&&r.default.createElement(r.default.Fragment,null,l.description&&r.default.createElement(\"li\",{className:\"json-schema-2020-12-property\"},r.default.createElement(S,{schema:l,getSystem:a})),l.url&&r.default.createElement(\"li\",{className:\"json-schema-2020-12-property\"},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"url\"),r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.default.createElement(w,{target:\"_blank\",href:(0,o.Nm)(l.url)},l.url))))))))}},9023:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(4163),r=a(2740),s=a(2565),o=a(7204),l=a(2372),i=a(810),c=(a(5053),a(8096));const u=e=>{var t;let{schema:a,getSystem:u}=e;const{fn:d}=u(),{useComponent:p}=d.jsonSchema202012,{getDependentRequired:m,getProperties:f}=d.jsonSchema202012.useFn(),h=d.jsonSchema202012.useConfig(),g=(0,n.default)(null==a?void 0:a.required)?a.required:[],y=p(\"JSONSchema\"),v=f(a,h);return 0===(0,r.default)(v).length?null:i.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},i.default.createElement(\"ul\",null,(0,s.default)(t=(0,o.default)(v)).call(t,(e=>{let[t,n]=e;const r=(0,l.default)(g).call(g,t),s=m(t,a);return i.default.createElement(\"li\",{key:t,className:(0,c.default)(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":r})},i.default.createElement(y,{name:t,schema:n,dependentRequired:s}))}))))}},3995:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(2740),r=a(810),s=(a(5053),a(8096));const o=e=>{let{schema:t,getSystem:a}=e;const o=(null==t?void 0:t.xml)||{},{fn:l,getComponent:i}=a(),{useIsExpandedDeeply:c,useComponent:u}=l.jsonSchema202012,d=c(),p=!!(o.name||o.namespace||o.prefix),[m,f]=(0,r.useState)(d),[h,g]=(0,r.useState)(!1),y=u(\"Accordion\"),v=u(\"ExpandDeepButton\"),E=i(\"JSONSchema202012DeepExpansionContext\")(),S=(0,r.useCallback)((()=>{f((e=>!e))}),[]),w=(0,r.useCallback)(((e,t)=>{f(t),g(t)}),[]);return 0===(0,n.default)(o).length?null:r.default.createElement(E.Provider,{value:h},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml\"},p?r.default.createElement(r.default.Fragment,null,r.default.createElement(y,{expanded:m,onChange:S},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\")),r.default.createElement(v,{expanded:m,onClick:w})):r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\"),!0===o.attribute&&r.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"attribute\"),!0===o.wrapped&&r.default.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"wrapped\"),r.default.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),r.default.createElement(\"ul\",{className:(0,s.default)(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!m})},m&&r.default.createElement(r.default.Fragment,null,o.name&&r.default.createElement(\"li\",{className:\"json-schema-2020-12-property\"},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"name\"),r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},o.name))),o.namespace&&r.default.createElement(\"li\",{className:\"json-schema-2020-12-property\"},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"namespace\"),r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},o.namespace))),o.prefix&&r.default.createElement(\"li\",{className:\"json-schema-2020-12-property\"},r.default.createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"prefix\"),r.default.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},o.prefix)))))))}},5800:(e,t,a)=>{a.r(t),a.d(t,{getProperties:()=>l,makeIsExpandable:()=>o});var n=a(7204),r=a(6145),s=a(7415);const o=(e,t)=>{const{fn:a}=t();if(\"function\"!=typeof e)return null;const{hasKeyword:n}=a.jsonSchema202012;return t=>e(t)||n(t,\"example\")||(null==t?void 0:t.xml)||(null==t?void 0:t.discriminator)||(null==t?void 0:t.externalDocs)},l=(e,t)=>{let{includeReadOnly:a,includeWriteOnly:o}=t;if(null==e||!e.properties)return{};const l=(0,n.default)(e.properties),i=(0,r.default)(l).call(l,(e=>{let[,t]=e;const n=!0===(null==t?void 0:t.readOnly),r=!0===(null==t?void 0:t.writeOnly);return(!n||a)&&(!r||o)}));return(0,s.default)(i)}},4951:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)((e=>{let{schema:t,getSystem:a,originalComponent:r}=e;const{getComponent:s}=a(),o=s(\"JSONSchema202012KeywordDiscriminator\"),l=s(\"JSONSchema202012KeywordXml\"),i=s(\"JSONSchema202012KeywordExample\"),c=s(\"JSONSchema202012KeywordExternalDocs\");return n.default.createElement(n.default.Fragment,null,n.default.createElement(r,{schema:t}),n.default.createElement(o,{schema:t,getSystem:a}),n.default.createElement(l,{schema:t,getSystem:a}),n.default.createElement(c,{schema:t,getSystem:a}),n.default.createElement(i,{schema:t,getSystem:a}))}))},809:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(5989);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)(n.default)},7536:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(9023);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)(n.default)},4280:(e,t,a)=>{a.r(t),a.d(t,{selectLicenseUrl:()=>s});var n=a(8639),r=a(3543);const s=(0,n.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t)=>t.specSelectors.selectLicenseIdentifierField()),((e,t,a,n)=>a?(0,r.mn)(a,e,{selectedServer:t}):n?`https://spdx.org/licenses/${n}.html`:void 0))},9305:(e,t,a)=>{a.r(t),a.d(t,{contact:()=>b,isOAS31:()=>f,license:()=>y,selectContactEmailField:()=>_,selectContactNameField:()=>x,selectContactUrl:()=>j,selectContactUrlField:()=>C,selectExternalDocsDescriptionField:()=>R,selectExternalDocsUrl:()=>T,selectExternalDocsUrlField:()=>P,selectInfoDescriptionField:()=>k,selectInfoSummaryField:()=>N,selectInfoTermsOfServiceField:()=>A,selectInfoTermsOfServiceUrl:()=>I,selectInfoTitleField:()=>O,selectJsonSchemaDialectDefault:()=>D,selectJsonSchemaDialectField:()=>M,selectLicenseIdentifierField:()=>w,selectLicenseNameField:()=>v,selectLicenseUrl:()=>S,selectLicenseUrlField:()=>E,selectSchemas:()=>L,selectWebhooksOperations:()=>g,webhooks:()=>h});var n=a(2565),r=a(6785),s=a(6145),o=a(2372),l=a(5171),i=a(7204),c=a(9725),u=a(8639),d=a(3543),p=a(4380);const m=(0,c.Map)(),f=(0,u.createSelector)(((e,t)=>t.specSelectors.specJson()),p.isOAS31),h=()=>e=>e.specSelectors.specJson().get(\"webhooks\",m),g=(0,u.createSelector)(((e,t)=>t.specSelectors.webhooks()),((e,t)=>t.specSelectors.validOperationMethods()),((e,t)=>t.specSelectors.specResolvedSubtree([\"webhooks\"])),((e,t)=>{var a;return c.Map.isMap(e)?(0,n.default)(a=(0,r.default)(e).call(e,((e,a,r)=>{var i,u;if(!c.Map.isMap(a))return e;const d=(0,n.default)(i=(0,s.default)(u=a.entrySeq()).call(u,(e=>{let[a]=e;return(0,o.default)(t).call(t,a)}))).call(i,(e=>{let[t,a]=e;return{operation:(0,c.Map)({operation:a}),method:t,path:r,specPath:(0,c.List)([\"webhooks\",r,t])}}));return(0,l.default)(e).call(e,d)}),(0,c.List)()).groupBy((e=>e.path))).call(a,(e=>e.toArray())).toObject():{}})),y=()=>e=>e.specSelectors.info().get(\"license\",m),v=()=>e=>e.specSelectors.license().get(\"name\",\"License\"),E=()=>e=>e.specSelectors.license().get(\"url\"),S=(0,u.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t,a)=>{if(a)return(0,d.mn)(a,e,{selectedServer:t})})),w=()=>e=>e.specSelectors.license().get(\"identifier\"),b=()=>e=>e.specSelectors.info().get(\"contact\",m),x=()=>e=>e.specSelectors.contact().get(\"name\",\"the developer\"),_=()=>e=>e.specSelectors.contact().get(\"email\"),C=()=>e=>e.specSelectors.contact().get(\"url\"),j=(0,u.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectContactUrlField()),((e,t,a)=>{if(a)return(0,d.mn)(a,e,{selectedServer:t})})),O=()=>e=>e.specSelectors.info().get(\"title\"),N=()=>e=>e.specSelectors.info().get(\"summary\"),k=()=>e=>e.specSelectors.info().get(\"description\"),A=()=>e=>e.specSelectors.info().get(\"termsOfService\"),I=(0,u.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectInfoTermsOfServiceField()),((e,t,a)=>{if(a)return(0,d.mn)(a,e,{selectedServer:t})})),R=()=>e=>e.specSelectors.externalDocs().get(\"description\"),P=()=>e=>e.specSelectors.externalDocs().get(\"url\"),T=(0,u.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectExternalDocsUrlField()),((e,t,a)=>{if(a)return(0,d.mn)(a,e,{selectedServer:t})})),M=()=>e=>e.specSelectors.specJson().get(\"jsonSchemaDialect\"),D=()=>\"https://spec.openapis.org/oas/3.1/dialect/base\",L=(0,u.createSelector)(((e,t)=>t.specSelectors.definitions()),((e,t)=>t.specSelectors.specResolvedSubtree([\"components\",\"schemas\"])),((e,t)=>{var a;return c.Map.isMap(e)?c.Map.isMap(t)?(0,r.default)(a=(0,i.default)(e.toJS())).call(a,((e,a)=>{let[n,r]=a;const s=t.get(n);return e[n]=(null==s?void 0:s.toJS())||r,e}),{}):e.toJS():{}}))},2884:(e,t,a)=>{a.r(t),a.d(t,{isOAS3:()=>r,selectLicenseUrl:()=>s});var n=a(4380);const r=(e,t)=>function(a){const n=t.specSelectors.isOAS31();for(var r=arguments.length,s=new Array(r>1?r-1:0),o=1;o<r;o++)s[o-1]=arguments[o];return n||e(...s)},s=(0,n.createOnlyOAS31SelectorWrapper)((()=>(e,t)=>t.oas31Selectors.selectLicenseUrl()))},7423:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const a=t().getComponent(\"OAS31Contact\",!0);return n.default.createElement(a,null)}))},284:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const a=t().getComponent(\"OAS31Info\",!0);return n.default.createElement(a,null)}))},6608:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const a=t().getComponent(\"OAS31License\",!0);return n.default.createElement(a,null)}))},7042:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(810),r=a(4380),s=a(5800);const o=(0,r.createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t,...a}=e;const r=t(),{getComponent:o,fn:l,getConfigs:i}=r,c=i(),u=o(\"OAS31Model\"),d=o(\"JSONSchema202012\"),p=o(\"JSONSchema202012Keyword$schema\"),m=o(\"JSONSchema202012Keyword$vocabulary\"),f=o(\"JSONSchema202012Keyword$id\"),h=o(\"JSONSchema202012Keyword$anchor\"),g=o(\"JSONSchema202012Keyword$dynamicAnchor\"),y=o(\"JSONSchema202012Keyword$ref\"),v=o(\"JSONSchema202012Keyword$dynamicRef\"),E=o(\"JSONSchema202012Keyword$defs\"),S=o(\"JSONSchema202012Keyword$comment\"),w=o(\"JSONSchema202012KeywordAllOf\"),b=o(\"JSONSchema202012KeywordAnyOf\"),x=o(\"JSONSchema202012KeywordOneOf\"),_=o(\"JSONSchema202012KeywordNot\"),C=o(\"JSONSchema202012KeywordIf\"),j=o(\"JSONSchema202012KeywordThen\"),O=o(\"JSONSchema202012KeywordElse\"),N=o(\"JSONSchema202012KeywordDependentSchemas\"),k=o(\"JSONSchema202012KeywordPrefixItems\"),A=o(\"JSONSchema202012KeywordItems\"),I=o(\"JSONSchema202012KeywordContains\"),R=o(\"JSONSchema202012KeywordProperties\"),P=o(\"JSONSchema202012KeywordPatternProperties\"),T=o(\"JSONSchema202012KeywordAdditionalProperties\"),M=o(\"JSONSchema202012KeywordPropertyNames\"),D=o(\"JSONSchema202012KeywordUnevaluatedItems\"),L=o(\"JSONSchema202012KeywordUnevaluatedProperties\"),q=o(\"JSONSchema202012KeywordType\"),B=o(\"JSONSchema202012KeywordEnum\"),U=o(\"JSONSchema202012KeywordConst\"),J=o(\"JSONSchema202012KeywordConstraint\"),$=o(\"JSONSchema202012KeywordDependentRequired\"),K=o(\"JSONSchema202012KeywordContentSchema\"),V=o(\"JSONSchema202012KeywordTitle\"),F=o(\"JSONSchema202012KeywordDescription\"),z=o(\"JSONSchema202012KeywordDefault\"),W=o(\"JSONSchema202012KeywordDeprecated\"),H=o(\"JSONSchema202012KeywordReadOnly\"),G=o(\"JSONSchema202012KeywordWriteOnly\"),Z=o(\"JSONSchema202012Accordion\"),Y=o(\"JSONSchema202012ExpandDeepButton\"),X=o(\"JSONSchema202012ChevronRightIcon\"),Q=o(\"withJSONSchema202012Context\")(u,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:c.defaultModelExpandDepth,includeReadOnly:Boolean(a.includeReadOnly),includeWriteOnly:Boolean(a.includeWriteOnly)},components:{JSONSchema:d,Keyword$schema:p,Keyword$vocabulary:m,Keyword$id:f,Keyword$anchor:h,Keyword$dynamicAnchor:g,Keyword$ref:y,Keyword$dynamicRef:v,Keyword$defs:E,Keyword$comment:S,KeywordAllOf:w,KeywordAnyOf:b,KeywordOneOf:x,KeywordNot:_,KeywordIf:C,KeywordThen:j,KeywordElse:O,KeywordDependentSchemas:N,KeywordPrefixItems:k,KeywordItems:A,KeywordContains:I,KeywordProperties:R,KeywordPatternProperties:P,KeywordAdditionalProperties:T,KeywordPropertyNames:M,KeywordUnevaluatedItems:D,KeywordUnevaluatedProperties:L,KeywordType:q,KeywordEnum:B,KeywordConst:U,KeywordConstraint:J,KeywordDependentRequired:$,KeywordContentSchema:K,KeywordTitle:V,KeywordDescription:F,KeywordDefault:z,KeywordDeprecated:W,KeywordReadOnly:H,KeywordWriteOnly:G,Accordion:Z,ExpandDeepButton:Y,ChevronRightIcon:X},fn:{upperFirst:l.upperFirst,isExpandable:(0,s.makeIsExpandable)(l.jsonSchema202012.isExpandable,t),getProperties:s.getProperties}});return n.default.createElement(Q,a)}))},2914:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(810);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const{getComponent:a,fn:s,getConfigs:o}=t(),l=o();if(r.ModelsWithJSONSchemaContext)return n.default.createElement(r.ModelsWithJSONSchemaContext,null);const i=a(\"OAS31Models\",!0),c=a(\"JSONSchema202012\"),u=a(\"JSONSchema202012Keyword$schema\"),d=a(\"JSONSchema202012Keyword$vocabulary\"),p=a(\"JSONSchema202012Keyword$id\"),m=a(\"JSONSchema202012Keyword$anchor\"),f=a(\"JSONSchema202012Keyword$dynamicAnchor\"),h=a(\"JSONSchema202012Keyword$ref\"),g=a(\"JSONSchema202012Keyword$dynamicRef\"),y=a(\"JSONSchema202012Keyword$defs\"),v=a(\"JSONSchema202012Keyword$comment\"),E=a(\"JSONSchema202012KeywordAllOf\"),S=a(\"JSONSchema202012KeywordAnyOf\"),w=a(\"JSONSchema202012KeywordOneOf\"),b=a(\"JSONSchema202012KeywordNot\"),x=a(\"JSONSchema202012KeywordIf\"),_=a(\"JSONSchema202012KeywordThen\"),C=a(\"JSONSchema202012KeywordElse\"),j=a(\"JSONSchema202012KeywordDependentSchemas\"),O=a(\"JSONSchema202012KeywordPrefixItems\"),N=a(\"JSONSchema202012KeywordItems\"),k=a(\"JSONSchema202012KeywordContains\"),A=a(\"JSONSchema202012KeywordProperties\"),I=a(\"JSONSchema202012KeywordPatternProperties\"),R=a(\"JSONSchema202012KeywordAdditionalProperties\"),P=a(\"JSONSchema202012KeywordPropertyNames\"),T=a(\"JSONSchema202012KeywordUnevaluatedItems\"),M=a(\"JSONSchema202012KeywordUnevaluatedProperties\"),D=a(\"JSONSchema202012KeywordType\"),L=a(\"JSONSchema202012KeywordEnum\"),q=a(\"JSONSchema202012KeywordConst\"),B=a(\"JSONSchema202012KeywordConstraint\"),U=a(\"JSONSchema202012KeywordDependentRequired\"),J=a(\"JSONSchema202012KeywordContentSchema\"),$=a(\"JSONSchema202012KeywordTitle\"),K=a(\"JSONSchema202012KeywordDescription\"),V=a(\"JSONSchema202012KeywordDefault\"),F=a(\"JSONSchema202012KeywordDeprecated\"),z=a(\"JSONSchema202012KeywordReadOnly\"),W=a(\"JSONSchema202012KeywordWriteOnly\"),H=a(\"JSONSchema202012Accordion\"),G=a(\"JSONSchema202012ExpandDeepButton\"),Z=a(\"JSONSchema202012ChevronRightIcon\"),Y=a(\"withJSONSchema202012Context\");return r.ModelsWithJSONSchemaContext=Y(i,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:l.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:c,Keyword$schema:u,Keyword$vocabulary:d,Keyword$id:p,Keyword$anchor:m,Keyword$dynamicAnchor:f,Keyword$ref:h,Keyword$dynamicRef:g,Keyword$defs:y,Keyword$comment:v,KeywordAllOf:E,KeywordAnyOf:S,KeywordOneOf:w,KeywordNot:b,KeywordIf:x,KeywordThen:_,KeywordElse:C,KeywordDependentSchemas:j,KeywordPrefixItems:O,KeywordItems:N,KeywordContains:k,KeywordProperties:A,KeywordPatternProperties:I,KeywordAdditionalProperties:R,KeywordPropertyNames:P,KeywordUnevaluatedItems:T,KeywordUnevaluatedProperties:M,KeywordType:D,KeywordEnum:L,KeywordConst:q,KeywordConstraint:B,KeywordDependentRequired:U,KeywordContentSchema:J,KeywordTitle:$,KeywordDescription:K,KeywordDefault:V,KeywordDeprecated:F,KeywordReadOnly:z,KeywordWriteOnly:W,Accordion:H,ExpandDeepButton:G,ChevronRightIcon:Z},fn:{upperFirst:s.upperFirst,isExpandable:s.jsonSchema202012.isExpandable,getProperties:s.jsonSchema202012.getProperties}}),n.default.createElement(r.ModelsWithJSONSchemaContext,null)}));r.ModelsWithJSONSchemaContext=null;const s=r},1434:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(863),r=a(810);const s=(e,t)=>e=>{const a=t.specSelectors.isOAS31(),s=t.getComponent(\"OAS31VersionPragmaFilter\");return r.default.createElement(s,(0,n.default)({isOAS31:a},e))}},1122:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);const r=(0,a(4380).createOnlyOAS31ComponentWrapper)((e=>{let{originalComponent:t,...a}=e;return n.default.createElement(\"span\",null,n.default.createElement(t,a),n.default.createElement(\"small\",{className:\"version-stamp\"},n.default.createElement(\"pre\",{className:\"version\"},\"OAS 3.1\")))}))},8560:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(6235);let r=!1;function s(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return r=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const a=t.getConfigs().onComplete;return r&&\"function\"==typeof a&&((0,n.default)(a,0),r=!1),e(...arguments)}}}}}}},4624:(e,t,a)=>{a.r(t),a.d(t,{requestSnippetGenerator_curl_bash:()=>E,requestSnippetGenerator_curl_cmd:()=>S,requestSnippetGenerator_curl_powershell:()=>v});var n=a(8818),r=a(5942),s=a(313),o=a(2565);const i=(e=>{var t={};return a.d(t,e),t})({default:()=>l.default});var c=a(2954),u=a(2372),d=a(7504),p=a(9725);const m=e=>{var t;const a=\"_**[]\";return(0,n.default)(e).call(e,a)<0?e:(0,r.default)(t=e.split(a)[0]).call(t)},f=e=>\"-d \"===e||/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/'/g,\"'\\\\''\")+\"'\",h=e=>\"-d \"===(e=e.replace(/\\^/g,\"^^\").replace(/\\\\\"/g,'\\\\\\\\\"').replace(/\"/g,'\"\"').replace(/\\n/g,\"^\\n\"))?e.replace(/-d /g,\"-d ^\\n\"):/^[_\\/-]/g.test(e)?e:'\"'+e+'\"',g=e=>\"-d \"===e?e:/\\n/.test(e)?'@\"\\n'+e.replace(/\"/g,'\\\\\"').replace(/`/g,\"``\").replace(/\\$/,\"`$\")+'\\n\"@':/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/\"/g,'\"\"').replace(/'/g,\"''\")+\"'\";const y=function(e,t,a){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",r=!1,l=\"\";const f=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return l+=\" \"+(0,o.default)(a).call(a,t).join(\" \")},h=function(){for(var e=arguments.length,a=new Array(e),n=0;n<e;n++)a[n]=arguments[n];return l+=(0,o.default)(a).call(a,t).join(\" \")},g=()=>l+=` ${a}`,y=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return l+=(0,i.default)(\"  \").call(\"  \",e)};let v=e.get(\"headers\");if(l+=\"curl\"+n,e.has(\"curlOptions\")&&f(...e.get(\"curlOptions\")),f(\"-X\",e.get(\"method\")),g(),y(),h(`${e.get(\"url\")}`),v&&v.size)for(let t of(0,c.default)(E=e.get(\"headers\")).call(E)){var E;g(),y();let[e,a]=t;h(\"-H\",`${e}: ${a}`),r=r||/^content-type$/i.test(e)&&/^multipart\\/form-data$/i.test(a)}const S=e.get(\"body\");var w;if(S)if(r&&(0,u.default)(w=[\"POST\",\"PUT\",\"PATCH\"]).call(w,e.get(\"method\")))for(let[e,t]of S.entrySeq()){let a=m(e);g(),y(),h(\"-F\"),t instanceof d.Z.File?f(`${a}=@${t.name}${t.type?`;type=${t.type}`:\"\"}`):f(`${a}=${t}`)}else if(S instanceof d.Z.File)g(),y(),h(`--data-binary '@${S.name}'`);else{g(),y(),h(\"-d \");let t=S;p.Map.isMap(t)?h(function(e){let t=[];for(let[a,n]of e.get(\"body\").entrySeq()){let e=m(a);n instanceof d.Z.File?t.push(`  \"${e}\": {\\n    \"name\": \"${n.name}\"${n.type?`,\\n    \"type\": \"${n.type}\"`:\"\"}\\n  }`):t.push(`  \"${e}\": ${(0,s.default)(n,null,2).replace(/(\\r\\n|\\r|\\n)/g,\"\\n  \")}`)}return`{\\n${t.join(\",\\n\")}\\n}`}(e)):(\"string\"!=typeof t&&(t=(0,s.default)(t)),h(t))}else S||\"POST\"!==e.get(\"method\")||(g(),y(),h(\"-d ''\"));return l},v=e=>y(e,g,\"`\\n\",\".exe\"),E=e=>y(e,f,\"\\\\\\n\"),S=e=>y(e,h,\"^\\n\")},6575:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var n=a(4624),r=a(4669),s=a(4206);const o=()=>({components:{RequestSnippets:s.default},fn:n,statePlugins:{requestSnippets:{selectors:r}}})},4206:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});var n=a(6145),r=a(8898),s=a(29),o=a(2565),l=a(810),i=(a(5053),a(9908)),c=a(7068),u=a(9874),d=a(471);const p={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(250, 250, 250)\",paddingBottom:\"0\",paddingTop:\"0\",border:\"1px solid rgb(51, 51, 51)\",borderRadius:\"4px 4px 0 0\",boxShadow:\"none\",borderBottom:\"none\"},m={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(51, 51, 51)\",boxShadow:\"none\",border:\"1px solid rgb(51, 51, 51)\",paddingBottom:\"0\",paddingTop:\"0\",borderRadius:\"4px 4px 0 0\",marginTop:\"-5px\",marginRight:\"-5px\",marginLeft:\"-5px\",zIndex:\"9999\",borderBottom:\"none\"},f=e=>{var t,a;let{request:f,requestSnippetsSelectors:h,getConfigs:g}=e;const y=(0,c.default)(g)?g():null,v=!1!==(0,i.default)(y,\"syntaxHighlight\")&&(0,i.default)(y,\"syntaxHighlight.activated\",!0),E=(0,l.useRef)(null),[S,w]=(0,l.useState)(null===(t=h.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[b,x]=(0,l.useState)(null==h?void 0:h.getDefaultExpanded());(0,l.useEffect)((()=>{}),[]),(0,l.useEffect)((()=>{var e;const t=(0,n.default)(e=(0,r.default)(E.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains(\"curl-command\"))}));return(0,s.default)(t).call(t,(e=>e.addEventListener(\"mousewheel\",k,{passive:!1}))),()=>{(0,s.default)(t).call(t,(e=>e.removeEventListener(\"mousewheel\",k)))}}),[f]);const _=h.getSnippetGenerators(),C=_.get(S),j=C.get(\"fn\")(f),O=()=>{x(!b)},N=e=>e===S?m:p,k=e=>{const{target:t,deltaY:a}=e,{scrollHeight:n,offsetHeight:r,scrollTop:s}=t;n>r&&(0===s&&a<0||r+s>=n&&a>0)&&e.preventDefault()},A=v?l.default.createElement(d.d3,{language:C.get(\"syntax\"),className:\"curl microlight\",style:(0,d.C2)((0,i.default)(y,\"syntaxHighlight.theme\"))},j):l.default.createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:j});return l.default.createElement(\"div\",{className:\"request-snippets\",ref:E},l.default.createElement(\"div\",{style:{width:\"100%\",display:\"flex\",justifyContent:\"flex-start\",alignItems:\"center\",marginBottom:\"15px\"}},l.default.createElement(\"h4\",{onClick:()=>O(),style:{cursor:\"pointer\"}},\"Snippets\"),l.default.createElement(\"button\",{onClick:()=>O(),style:{border:\"none\",background:\"none\"},title:b?\"Collapse operation\":\"Expand operation\"},l.default.createElement(\"svg\",{className:\"arrow\",width:\"10\",height:\"10\"},l.default.createElement(\"use\",{href:b?\"#large-arrow-down\":\"#large-arrow\",xlinkHref:b?\"#large-arrow-down\":\"#large-arrow\"})))),b&&l.default.createElement(\"div\",{className:\"curl-command\"},l.default.createElement(\"div\",{style:{paddingLeft:\"15px\",paddingRight:\"10px\",width:\"100%\",display:\"flex\"}},(0,o.default)(a=_.entrySeq()).call(a,(e=>{let[t,a]=e;return l.default.createElement(\"div\",{style:N(t),className:\"btn\",key:t,onClick:()=>(e=>{S!==e&&w(e)})(t)},l.default.createElement(\"h4\",{style:t===S?{color:\"white\"}:{}},a.get(\"title\")))}))),l.default.createElement(\"div\",{className:\"copy-to-clipboard\"},l.default.createElement(u.CopyToClipboard,{text:j},l.default.createElement(\"button\",null))),l.default.createElement(\"div\",null,A)))}},4669:(e,t,a)=>{a.r(t),a.d(t,{getActiveLanguage:()=>d,getDefaultExpanded:()=>p,getGenerators:()=>c,getSnippetGenerators:()=>u});var n=a(6145),r=a(2372),s=a(2565),o=a(8639),l=a(9725);const i=e=>e||(0,l.Map)(),c=(0,o.createSelector)(i,(e=>{const t=e.get(\"languages\"),a=e.get(\"generators\",(0,l.Map)());return!t||t.isEmpty()?a:(0,n.default)(a).call(a,((e,a)=>(0,r.default)(t).call(t,a)))})),u=e=>t=>{var a,r;let{fn:o}=t;return(0,n.default)(a=(0,s.default)(r=c(e)).call(r,((e,t)=>{const a=(e=>o[`requestSnippetGenerator_${e}`])(t);return\"function\"!=typeof a?null:e.set(\"fn\",a)}))).call(a,(e=>e))},d=(0,o.createSelector)(i,(e=>e.get(\"activeLanguage\"))),p=(0,o.createSelector)(i,(e=>e.get(\"defaultExpanded\")))},6195:(e,t,a)=>{a.r(t),a.d(t,{ErrorBoundary:()=>o,default:()=>l});a(5053);var n=a(810),r=a(6189),s=a(9403);class o extends n.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:a}=this.props;if(this.state.hasError){const a=e(\"Fallback\");return n.default.createElement(a,{name:t})}return a}}o.defaultProps={targetName:\"this component\",getComponent:()=>s.default,fn:{componentDidCatch:r.componentDidCatch},children:null};const l=o},9403:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(810);a(5053);const r=e=>{let{name:t}=e;return n.default.createElement(\"div\",{className:\"fallback\"},\"😱 \",n.default.createElement(\"i\",null,\"Could not render \",\"t\"===t?\"this component\":t,\", see the console.\"))}},6189:(e,t,a)=>{a.r(t),a.d(t,{componentDidCatch:()=>s,withErrorBoundary:()=>o});var n=a(863),r=a(810);const s=console.error,o=e=>t=>{const{getComponent:a,fn:s}=e(),o=a(\"ErrorBoundary\"),l=s.getDisplayName(t);class i extends r.Component{render(){return r.default.createElement(o,{targetName:l,getComponent:a,fn:s},r.default.createElement(t,(0,n.default)({},this.props,this.context)))}}var c;return i.displayName=`WithErrorBoundary(${l})`,(c=t).prototype&&c.prototype.isReactComponent&&(i.prototype.mapStateToProps=t.prototype.mapStateToProps),i}},8102:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});const n=(e=>{var t={};return a.d(t,e),t})({default:()=>i.default});const r=(e=>{var t={};return a.d(t,e),t})({default:()=>c.default});var s=a(6195),o=a(9403),l=a(6189);const u=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a=>{var i;let{getSystem:c}=a;const u=t?e:[\"App\",\"BaseLayout\",\"VersionPragmaFilter\",\"InfoContainer\",\"ServersContainer\",\"SchemesContainer\",\"AuthorizeBtnContainer\",\"FilterContainer\",\"Operations\",\"OperationContainer\",\"parameters\",\"responses\",\"OperationServers\",\"Models\",\"ModelWrapper\",...e],d=(0,r.default)(u,(0,n.default)(i=Array(u.length)).call(i,((e,t)=>{let{fn:a}=t;return a.withErrorBoundary(e)})));return{fn:{componentDidCatch:l.componentDidCatch,withErrorBoundary:(0,l.withErrorBoundary)(c)},components:{ErrorBoundary:s.default,Fallback:o.default},wrapComponents:d}}}},2846:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(6785),r=a(313),s=a(841);const o=[{when:/json/,shouldStringifyTypes:[\"string\"]}],l=[\"object\"],i=e=>(t,a,i,c)=>{const{fn:u}=e(),d=u.memoizedSampleFromSchema(t,a,c),p=typeof d,m=(0,n.default)(o).call(o,((e,t)=>t.when.test(i)?[...e,...t.shouldStringifyTypes]:e),l);return(0,s.default)(m,(e=>e===p))?(0,r.default)(d,null,2):d}},6132:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=e=>function(t){var a,n;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:l}=e();return\"function\"==typeof(null===(a=t)||void 0===a?void 0:a.toJS)&&(t=t.toJS()),\"function\"==typeof(null===(n=o)||void 0===n?void 0:n.toJS)&&(o=o.toJS()),/xml/.test(r)?l.getXmlSampleSchema(t,s,o):/(yaml|yml)/.test(r)?l.getYamlSampleSchema(t,s,r,o):l.getJsonSampleSchema(t,s,r,o)}},1169:(e,t,a)=>{a.r(t),a.d(t,{default:()=>n});const n=e=>(t,a,n)=>{const{fn:r}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\\x3c!-- XML example cannot be generated; root element name is undefined --\\x3e';if(t.$$ref){let e=t.$$ref.match(/\\S*\\/(\\S+)$/);t.xml.name=e[1]}}return r.memoizedCreateXMLExample(t,a,n)}},9431:(e,t,a)=>{a.r(t),a.d(t,{default:()=>s});var n=a(8136),r=a(3772);const s=e=>(t,a,s,o)=>{const{fn:l}=e(),i=l.getJsonSampleSchema(t,a,s,o);let c;try{c=r.default.dump(r.default.load(i),{lineWidth:-1},{schema:r.JSON_SCHEMA}),\"\\n\"===c[c.length-1]&&(c=(0,n.default)(c).call(c,0,c.length-1))}catch(e){return console.error(e),\"error: could not generate yaml example\"}return c.replace(/\\t/g,\"  \")}},9812:(e,t,a)=>{a.r(t),a.d(t,{createXMLExample:()=>k,inferSchema:()=>N,memoizedCreateXMLExample:()=>R,memoizedSampleFromSchema:()=>P,sampleFromSchema:()=>A,sampleFromSchemaGeneric:()=>O});var n=a(8818),r=a(29),s=a(4163),o=a(2372),l=a(9963),i=a(8136),c=a(1778),u=a(5171),d=a(2565),p=a(313),m=a(3479),f=a.n(m),h=a(2092),g=a(8747),y=a(6561),v=a(9669);const E={string:e=>e.pattern?(e=>{try{return new h.default(e).gen()}catch(e){return\"string\"}})(e.pattern):\"string\",string_email:()=>\"user@example.com\",\"string_date-time\":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",string_hostname:()=>\"example.com\",string_ipv4:()=>\"198.51.100.42\",string_ipv6:()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>\"boolean\"!=typeof e.default||e.default},S=e=>{e=(0,y.mz)(e);let{type:t,format:a}=e,n=E[`${t}_${a}`]||E[t];return(0,y.Wl)(n)?n(e):\"Unknown Type: \"+e.type},w=e=>(0,y.XV)(e,\"$$ref\",(e=>\"string\"==typeof e&&(0,n.default)(e).call(e,\"#\")>-1)),b=[\"maxProperties\",\"minProperties\"],x=[\"minItems\",\"maxItems\"],_=[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\"],C=[\"minLength\",\"maxLength\"],j=function(e,t){var a;let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var i;((0,r.default)(a=[\"example\",\"default\",\"enum\",\"xml\",\"type\",...b,...x,..._,...C]).call(a,(a=>(a=>{void 0===t[a]&&void 0!==e[a]&&(t[a]=e[a])})(a))),void 0!==e.required&&(0,s.default)(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),(0,r.default)(i=e.required).call(i,(e=>{var a;(0,o.default)(a=t.required).call(a,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let a=(0,y.mz)(e.properties);for(let r in a){var c;if(Object.prototype.hasOwnProperty.call(a,r))if(!a[r]||!a[r].deprecated)if(!a[r]||!a[r].readOnly||l.includeReadOnly)if(!a[r]||!a[r].writeOnly||l.includeWriteOnly)if(!t.properties[r])t.properties[r]=a[r],!e.required&&(0,s.default)(e.required)&&-1!==(0,n.default)(c=e.required).call(c,r)&&(t.required?t.required.push(r):t.required=[r])}}return e.items&&(t.items||(t.items={}),t.items=j(e.items,t.items,l)),t},O=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,p=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,y.Wl)(e.toJS)&&(e=e.toJS());let m=void 0!==a||e&&void 0!==e.example||e&&void 0!==e.default;const f=!m&&e&&e.oneOf&&e.oneOf.length>0,h=!m&&e&&e.anyOf&&e.anyOf.length>0;if(!m&&(f||h)){const a=(0,y.mz)(f?e.oneOf[0]:e.anyOf[0]);if(j(a,e,t),!e.xml&&a.xml&&(e.xml=a.xml),void 0!==e.example&&void 0!==a.example)m=!0;else if(a.properties){e.properties||(e.properties={});let r=(0,y.mz)(a.properties);for(let o in r){var v;if(Object.prototype.hasOwnProperty.call(r,o))if(!r[o]||!r[o].deprecated)if(!r[o]||!r[o].readOnly||t.includeReadOnly)if(!r[o]||!r[o].writeOnly||t.includeWriteOnly)if(!e.properties[o])e.properties[o]=r[o],!a.required&&(0,s.default)(a.required)&&-1!==(0,n.default)(v=a.required).call(v,o)&&(e.required?e.required.push(o):e.required=[o])}}}const E={};let{xml:C,type:N,example:k,properties:A,additionalProperties:I,items:R}=e||{},{includeReadOnly:P,includeWriteOnly:T}=t;C=C||{};let M,{name:D,prefix:L,namespace:q}=C,B={};if(p&&(D=D||\"notagname\",M=(L?L+\":\":\"\")+D,q)){E[L?\"xmlns:\"+L:\"xmlns\"]=q}p&&(B[M]=[]);const U=t=>(0,l.default)(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!N&&(A||I||U(b)?N=\"object\":R||U(x)?N=\"array\":U(_)?(N=\"number\",e.type=\"number\"):m||e.enum||(N=\"string\",e.type=\"string\"));const J=t=>{var a,n,r,s,o;null!==(null===(a=e)||void 0===a?void 0:a.maxItems)&&void 0!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&(t=(0,i.default)(t).call(t,0,null===(o=e)||void 0===o?void 0:o.maxItems));if(null!==(null===(r=e)||void 0===r?void 0:r.minItems)&&void 0!==(null===(s=e)||void 0===s?void 0:s.minItems)){let a=0;for(;t.length<(null===(l=e)||void 0===l?void 0:l.minItems);){var l;t.push(t[a++%t.length])}}return t},$=(0,y.mz)(A);let K,V=0;const F=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&V>=e.maxProperties,z=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!F()&&(!(t=>{var a;return!(e&&e.required&&e.required.length&&(0,o.default)(a=e.required).call(a,t))})(t)||e.maxProperties-V-(()=>{if(!e||!e.required)return 0;let t=0;var a,n;return p?(0,r.default)(a=e.required).call(a,(e=>t+=void 0===B[e]?0:1)):(0,r.default)(n=e.required).call(n,(e=>{var a;return t+=void 0===(null===(a=B[M])||void 0===a?void 0:(0,c.default)(a).call(a,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(K=p?function(a){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&$[a]){if($[a].xml=$[a].xml||{},$[a].xml.attribute){const e=(0,s.default)($[a].enum)?$[a].enum[0]:void 0,t=$[a].example,n=$[a].default;return void(E[$[a].xml.name||a]=void 0!==t?t:void 0!==n?n:void 0!==e?e:S($[a]))}$[a].xml.name=$[a].xml.name||a}else $[a]||!1===I||($[a]={xml:{name:a}});let r=O(e&&$[a]||void 0,t,n,p);var o;z(a)&&(V++,(0,s.default)(r)?B[M]=(0,u.default)(o=B[M]).call(o,r):B[M].push(r))}:(a,n)=>{if(z(a)){if(Object.prototype.hasOwnProperty.call(e,\"discriminator\")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,\"mapping\")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,\"$$ref\")&&e.$$ref&&e.discriminator.propertyName===a){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){B[a]=t;break}}else B[a]=O($[a],t,n,p);V++}},m){let n;if(n=w(void 0!==a?a:void 0!==k?k:e.default),!p){if(\"number\"==typeof n&&\"string\"===N)return`${n}`;if(\"string\"!=typeof n||\"string\"===N)return n;try{return JSON.parse(n)}catch(e){return n}}if(e||(N=(0,s.default)(n)?\"array\":typeof n),\"array\"===N){if(!(0,s.default)(n)){if(\"string\"==typeof n)return n;n=[n]}const a=e?e.items:void 0;a&&(a.xml=a.xml||C||{},a.xml.name=a.xml.name||C.name);let r=(0,d.default)(n).call(n,(e=>O(a,t,e,p)));return r=J(r),C.wrapped?(B[M]=r,(0,g.default)(E)||B[M].push({_attr:E})):B=r,B}if(\"object\"===N){if(\"string\"==typeof n)return n;for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e&&$[t]&&$[t].readOnly&&!P||e&&$[t]&&$[t].writeOnly&&!T||(e&&$[t]&&$[t].xml&&$[t].xml.attribute?E[$[t].xml.name||t]=n[t]:K(t,n[t])));return(0,g.default)(E)||B[M].push({_attr:E}),B}return B[M]=(0,g.default)(E)?n:[{_attr:E},n],B}if(\"object\"===N){for(let e in $)Object.prototype.hasOwnProperty.call($,e)&&($[e]&&$[e].deprecated||$[e]&&$[e].readOnly&&!P||$[e]&&$[e].writeOnly&&!T||K(e));if(p&&E&&B[M].push({_attr:E}),F())return B;if(!0===I)p?B[M].push({additionalProp:\"Anything can be here\"}):B.additionalProp1={},V++;else if(I){const a=(0,y.mz)(I),n=O(a,t,void 0,p);if(p&&a.xml&&a.xml.name&&\"notagname\"!==a.xml.name)B[M].push(n);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&V<e.minProperties?e.minProperties-V:3;for(let e=1;e<=t;e++){if(F())return B;if(p){const t={};t[\"additionalProp\"+e]=n.notagname,B[M].push(t)}else B[\"additionalProp\"+e]=n;V++}}}return B}if(\"array\"===N){if(!R)return;let a;var W,H;if(p)R.xml=R.xml||(null===(W=e)||void 0===W?void 0:W.xml)||{},R.xml.name=R.xml.name||C.name;if((0,s.default)(R.anyOf))a=(0,d.default)(H=R.anyOf).call(H,(e=>O(j(R,e,t),t,void 0,p)));else if((0,s.default)(R.oneOf)){var G;a=(0,d.default)(G=R.oneOf).call(G,(e=>O(j(R,e,t),t,void 0,p)))}else{if(!(!p||p&&C.wrapped))return O(R,t,void 0,p);a=[O(R,t,void 0,p)]}return a=J(a),p&&C.wrapped?(B[M]=a,(0,g.default)(E)||B[M].push({_attr:E}),B):a}let Z;if(e&&(0,s.default)(e.enum))Z=(0,y.AF)(e.enum)[0];else{if(!e)return;if(Z=S(e),\"number\"==typeof Z){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Z=t);let a=e.maximum;null!=a&&(e.exclusiveMaximum&&a--,Z=a)}if(\"string\"==typeof Z&&(null!==e.maxLength&&void 0!==e.maxLength&&(Z=(0,i.default)(Z).call(Z,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Z.length<e.minLength;)Z+=Z[t++%Z.length]}}if(\"file\"!==N)return p?(B[M]=(0,g.default)(E)?Z:[{_attr:E},Z],B):Z},N=e=>(e.schema&&(e=e.schema),e.properties&&(e.type=\"object\"),e),k=(e,t,a)=>{const n=O(e,t,a,!0);if(n)return\"string\"==typeof n?n:f()(n,{declaration:!0,indent:\"\\t\"})},A=(e,t,a)=>O(e,t,a,!1),I=(e,t,a)=>[e,(0,p.default)(t),(0,p.default)(a)],R=(0,v.Z)(k,I),P=(0,v.Z)(A,I)},8883:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(9812),r=a(2846),s=a(9431),o=a(1169),l=a(6132);const i=e=>{let{getSystem:t}=e;return{fn:{inferSchema:n.inferSchema,sampleFromSchema:n.sampleFromSchema,sampleFromSchemaGeneric:n.sampleFromSchemaGeneric,createXMLExample:n.createXMLExample,memoizedSampleFromSchema:n.memoizedSampleFromSchema,memoizedCreateXMLExample:n.memoizedCreateXMLExample,getJsonSampleSchema:(0,r.default)(t),getYamlSampleSchema:(0,s.default)(t),getXmlSampleSchema:(0,o.default)(t),getSampleSchema:(0,l.default)(t)}}}},7612:(e,t,a)=>{a.r(t),a.d(t,{CLEAR_REQUEST:()=>K,CLEAR_RESPONSE:()=>$,CLEAR_VALIDATE_PARAMS:()=>V,LOG_REQUEST:()=>J,SET_MUTATED_REQUEST:()=>U,SET_REQUEST:()=>B,SET_RESPONSE:()=>q,SET_SCHEME:()=>H,UPDATE_EMPTY_PARAM_INCLUSION:()=>D,UPDATE_JSON:()=>T,UPDATE_OPERATION_META_VALUE:()=>F,UPDATE_PARAM:()=>M,UPDATE_RESOLVED:()=>z,UPDATE_RESOLVED_SUBTREE:()=>W,UPDATE_SPEC:()=>R,UPDATE_URL:()=>P,VALIDATE_PARAMS:()=>L,changeConsumesValue:()=>me,changeParam:()=>oe,changeParamByIdentity:()=>le,changeProducesValue:()=>fe,clearRequest:()=>be,clearResponse:()=>we,clearValidateParams:()=>pe,execute:()=>Se,executeRequest:()=>Ee,invalidateResolvedSubtreeCache:()=>ce,logRequest:()=>ve,parseToJson:()=>ee,requestResolvedSubtree:()=>se,resolveSpec:()=>ae,setMutatedRequest:()=>ye,setRequest:()=>ge,setResponse:()=>he,setScheme:()=>xe,updateEmptyParamInclusion:()=>de,updateJsonSpec:()=>Q,updateResolved:()=>Y,updateResolvedSubtree:()=>ie,updateSpec:()=>Z,updateUrl:()=>X,validateParams:()=>ue});var n=a(4163),r=a(2565),s=a(6718),o=a.n(s),l=a(6785),i=a(7930);const c=(e=>{var t={};return a.d(t,e),t})({default:()=>u.default});var g=a(6145),y=a(374),v=a(8818),E=a(29),S=a(2740),w=a(7512);const b=(e=>{var t={};return a.d(t,e),t})({default:()=>d.default});var x=a(3772),_=a(9725),C=a(8900),j=a(8518);const O=(e=>{var t={};return a.d(t,e),t})({default:()=>p.default});const N=(e=>{var t={};return a.d(t,e),t})({default:()=>m.default});const k=(e=>{var t={};return a.d(t,e),t})({default:()=>f.default});const A=(e=>{var t={};return a.d(t,e),t})({default:()=>h.default});var I=a(6561);const R=\"spec_update_spec\",P=\"spec_update_url\",T=\"spec_update_json\",M=\"spec_update_param\",D=\"spec_update_empty_param_inclusion\",L=\"spec_validate_param\",q=\"spec_set_response\",B=\"spec_set_request\",U=\"spec_set_mutated_request\",J=\"spec_log_request\",$=\"spec_clear_response\",K=\"spec_clear_request\",V=\"spec_clear_validate_param\",F=\"spec_update_operation_meta_value\",z=\"spec_update_resolved\",W=\"spec_update_resolved_subtree\",H=\"set_scheme\",G=e=>(0,O.default)(e)?e:\"\";function Z(e){const t=G(e).replace(/\\t/g,\"  \");if(\"string\"==typeof e)return{type:R,payload:t}}function Y(e){return{type:z,payload:e}}function X(e){return{type:P,payload:e}}function Q(e){return{type:T,payload:e}}const ee=e=>t=>{let{specActions:a,specSelectors:n,errActions:r}=t,{specStr:s}=n,o=null;try{e=e||s(),r.clear({source:\"parser\"}),o=x.default.load(e,{schema:x.JSON_SCHEMA})}catch(e){return console.error(e),r.newSpecErr({source:\"parser\",level:\"error\",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return o&&\"object\"==typeof o?a.updateJsonSpec(o):{}};let te=!1;const ae=(e,t)=>a=>{let{specActions:s,specSelectors:l,errActions:i,fn:{fetch:c,resolve:u,AST:d={}},getConfigs:p}=a;te||(console.warn(\"specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!\"),te=!0);const{modelPropertyMacro:m,parameterMacro:f,requestInterceptor:h,responseInterceptor:g}=p();void 0===e&&(e=l.specJson()),void 0===t&&(t=l.url());let y=d.getLineNumberForPath?d.getLineNumberForPath:()=>{},v=l.specStr();return u({fetch:c,spec:e,baseDoc:t,modelPropertyMacro:m,parameterMacro:f,requestInterceptor:h,responseInterceptor:g}).then((e=>{let{spec:t,errors:a}=e;if(i.clear({type:\"thrown\"}),(0,n.default)(a)&&a.length>0){let e=(0,r.default)(a).call(a,(e=>(console.error(e),e.line=e.fullPath?y(v,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",o()(e,\"message\",{enumerable:!0,value:e.message}),e)));i.newThrownErrBatch(e)}return s.updateResolved(t)}))};let ne=[];const re=(0,N.default)((async()=>{const e=ne.system;if(!e)return void console.error(\"debResolveSubtrees: don't have a system to operate on, aborting.\");const{errActions:t,errSelectors:a,fn:{resolveSubtree:s,fetch:u,AST:d={}},specSelectors:p,specActions:m}=e;if(!s)return void console.error(\"Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.\");let f=d.getLineNumberForPath?d.getLineNumberForPath:()=>{};const h=p.specStr(),{modelPropertyMacro:v,parameterMacro:E,requestInterceptor:S,responseInterceptor:w}=e.getConfigs();try{var b=await(0,l.default)(ne).call(ne,(async(e,l)=>{let{resultMap:d,specWithCurrentSubtrees:m}=await e;const{errors:b,spec:x}=await s(m,l,{baseDoc:p.url(),modelPropertyMacro:v,parameterMacro:E,requestInterceptor:S,responseInterceptor:w});if(a.allErrors().size&&t.clearBy((e=>{var t;return\"thrown\"!==e.get(\"type\")||\"resolver\"!==e.get(\"source\")||!(0,i.default)(t=e.get(\"fullPath\")).call(t,((e,t)=>e===l[t]||void 0===l[t]))})),(0,n.default)(b)&&b.length>0){let e=(0,r.default)(b).call(b,(e=>(e.line=e.fullPath?f(h,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",o()(e,\"message\",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var _,C;x&&p.isOAS3()&&\"components\"===l[0]&&\"securitySchemes\"===l[1]&&await c.default.all((0,r.default)(_=(0,g.default)(C=(0,y.default)(x)).call(C,(e=>\"openIdConnect\"===e.type))).call(_,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:S,responseInterceptor:w};try{const a=await u(t);a instanceof Error||a.status>=400?console.error(a.statusText+\" \"+t.url):e.openIdConnectData=JSON.parse(a.text)}catch(e){console.error(e)}})));return(0,k.default)(d,l,x),m=(0,A.default)(l,x,m),{resultMap:d,specWithCurrentSubtrees:m}}),c.default.resolve({resultMap:(p.specResolvedSubtree([])||(0,_.Map)()).toJS(),specWithCurrentSubtrees:p.specJS()}));delete ne.system,ne=[]}catch(e){console.error(e)}m.updateResolvedSubtree([],b.resultMap)}),35),se=e=>t=>{var a;(0,v.default)(a=(0,r.default)(ne).call(ne,(e=>e.join(\"@@\")))).call(a,e.join(\"@@\"))>-1||(ne.push(e),ne.system=t,re())};function oe(e,t,a,n,r){return{type:M,payload:{path:e,value:n,paramName:t,paramIn:a,isXml:r}}}function le(e,t,a,n){return{type:M,payload:{path:e,param:t,value:a,isXml:n}}}const ie=(e,t)=>({type:W,payload:{path:e,value:t}}),ce=()=>({type:W,payload:{path:[],value:(0,_.Map)()}}),ue=(e,t)=>({type:L,payload:{pathMethod:e,isOAS3:t}}),de=(e,t,a,n)=>({type:D,payload:{pathMethod:e,paramName:t,paramIn:a,includeEmptyValue:n}});function pe(e){return{type:V,payload:{pathMethod:e}}}function me(e,t){return{type:F,payload:{path:e,value:t,key:\"consumes_value\"}}}function fe(e,t){return{type:F,payload:{path:e,value:t,key:\"produces_value\"}}}const he=(e,t,a)=>({payload:{path:e,method:t,res:a},type:q}),ge=(e,t,a)=>({payload:{path:e,method:t,req:a},type:B}),ye=(e,t,a)=>({payload:{path:e,method:t,req:a},type:U}),ve=e=>({payload:e,type:J}),Ee=e=>t=>{let{fn:a,specActions:s,specSelectors:o,getConfigs:l,oas3Selectors:i}=t,{pathName:c,method:u,operation:d}=e,{requestInterceptor:p,responseInterceptor:m}=l(),f=d.toJS();var h,y;d&&d.get(\"parameters\")&&(0,E.default)(h=(0,g.default)(y=d.get(\"parameters\")).call(y,(e=>e&&!0===e.get(\"allowEmptyValue\")))).call(h,(t=>{if(o.parameterInclusionSettingFor([c,u],t.get(\"name\"),t.get(\"in\"))){e.parameters=e.parameters||{};const a=(0,I.cz)(t,e.parameters);(!a||a&&0===a.size)&&(e.parameters[t.get(\"name\")]=\"\")}}));if(e.contextUrl=(0,C.default)(o.url()).toString(),f&&f.operationId?e.operationId=f.operationId:f&&c&&u&&(e.operationId=a.opId(f,c,u)),o.isOAS3()){const t=`${c}:${u}`;e.server=i.selectedServer(t)||i.selectedServer();const a=i.serverVariables({server:e.server,namespace:t}).toJS(),s=i.serverVariables({server:e.server}).toJS();e.serverVariables=(0,S.default)(a).length?a:s,e.requestContentType=i.requestContentType(c,u),e.responseContentType=i.responseContentType(c,u)||\"*/*\";const o=i.requestBodyValue(c,u),l=i.requestBodyInclusionSetting(c,u);var v;if(o&&o.toJS)e.requestBody=(0,g.default)(v=(0,r.default)(o).call(o,(e=>_.Map.isMap(e)?e.get(\"value\"):e))).call(v,((e,t)=>((0,n.default)(e)?0!==e.length:!(0,I.O2)(e))||l.get(t))).toJS();else e.requestBody=o}let x=(0,w.default)({},e);x=a.buildRequest(x),s.setRequest(e.pathName,e.method,x);e.requestInterceptor=async t=>{let a=await p.apply(void 0,[t]),n=(0,w.default)({},a);return s.setMutatedRequest(e.pathName,e.method,n),a},e.responseInterceptor=m;const O=(0,b.default)();return a.execute(e).then((t=>{t.duration=(0,b.default)()-O,s.setResponse(e.pathName,e.method,t)})).catch((t=>{\"Failed to fetch\"===t.message&&(t.name=\"\",t.message='**Failed to fetch.**  \\n**Possible Reasons:** \\n  - CORS \\n  - Network Failure \\n  - URL scheme must be \"http\" or \"https\" for CORS request.'),s.setResponse(e.pathName,e.method,{error:!0,err:(0,j.serializeError)(t)})}))},Se=function(){let{path:e,method:t,...a}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{let{fn:{fetch:r},specSelectors:s,specActions:o}=n,l=s.specJsonWithResolvedSubtrees().toJS(),i=s.operationScheme(e,t),{requestContentType:c,responseContentType:u}=s.contentTypeValues([e,t]).toJS(),d=/xml/i.test(c),p=s.parameterValues([e,t],d).toJS();return o.executeRequest({...a,fetch:r,spec:l,pathName:e,method:t,parameters:p,requestContentType:c,scheme:i,responseContentType:u})}};function we(e,t){return{type:$,payload:{path:e,method:t}}}function be(e,t){return{type:K,payload:{path:e,method:t}}}function xe(e,t,a){return{type:H,payload:{scheme:e,path:t,method:a}}}},7038:(e,t,a)=>{a.r(t),a.d(t,{default:()=>l});var n=a(32),r=a(7612),s=a(3881),o=a(7508);function l(){return{statePlugins:{spec:{wrapActions:o,reducers:n.default,actions:r,selectors:s}}}}},32:(e,t,a)=>{a.r(t),a.d(t,{default:()=>d});var n=a(6785),r=a(2565),s=a(7512),o=a(9725),l=a(6561),i=a(7504),c=a(3881),u=a(7612);const d={[u.UPDATE_SPEC]:(e,t)=>\"string\"==typeof t.payload?e.set(\"spec\",t.payload):e,[u.UPDATE_URL]:(e,t)=>e.set(\"url\",t.payload+\"\"),[u.UPDATE_JSON]:(e,t)=>e.set(\"json\",(0,l.oG)(t.payload)),[u.UPDATE_RESOLVED]:(e,t)=>e.setIn([\"resolved\"],(0,l.oG)(t.payload)),[u.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:a,path:n}=t.payload;return e.setIn([\"resolvedSubtrees\",...n],(0,l.oG)(a))},[u.UPDATE_PARAM]:(e,t)=>{let{payload:a}=t,{path:n,paramName:r,paramIn:s,param:o,value:i,isXml:c}=a,u=o?(0,l.V9)(o):`${s}.${r}`;const d=c?\"value_xml\":\"value\";return e.setIn([\"meta\",\"paths\",...n,\"parameters\",u,d],i)},[u.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:a}=t,{pathMethod:n,paramName:r,paramIn:s,includeEmptyValue:o}=a;if(!r||!s)return console.warn(\"Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey.\"),e;const l=`${s}.${r}`;return e.setIn([\"meta\",\"paths\",...n,\"parameter_inclusions\",l],o)},[u.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:a,isOAS3:r}}=t;const s=(0,c.specJsonWithResolvedSubtrees)(e).getIn([\"paths\",...a]),i=(0,c.parameterValues)(e,a).toJS();return e.updateIn([\"meta\",\"paths\",...a,\"parameters\"],(0,o.fromJS)({}),(t=>{var u;return(0,n.default)(u=s.get(\"parameters\",(0,o.List)())).call(u,((t,n)=>{const s=(0,l.cz)(n,i),u=(0,c.parameterInclusionSettingFor)(e,a,n.get(\"name\"),n.get(\"in\")),d=(0,l.Ik)(n,s,{bypassRequiredCheck:u,isOAS3:r});return t.setIn([(0,l.V9)(n),\"errors\"],(0,o.fromJS)(d))}),t)}))},[u.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:a}}=t;return e.updateIn([\"meta\",\"paths\",...a,\"parameters\"],(0,o.fromJS)([]),(e=>(0,r.default)(e).call(e,(e=>e.set(\"errors\",(0,o.fromJS)([]))))))},[u.SET_RESPONSE]:(e,t)=>{let a,{payload:{res:n,path:r,method:o}}=t;a=n.error?(0,s.default)({error:!0,name:n.err.name,message:n.err.message,statusCode:n.err.statusCode},n.err.response):n,a.headers=a.headers||{};let c=e.setIn([\"responses\",r,o],(0,l.oG)(a));return i.Z.Blob&&n.data instanceof i.Z.Blob&&(c=c.setIn([\"responses\",r,o,\"text\"],n.data)),c},[u.SET_REQUEST]:(e,t)=>{let{payload:{req:a,path:n,method:r}}=t;return e.setIn([\"requests\",n,r],(0,l.oG)(a))},[u.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:a,path:n,method:r}}=t;return e.setIn([\"mutatedRequests\",n,r],(0,l.oG)(a))},[u.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:a,value:n,key:r}}=t,s=[\"paths\",...a],l=[\"meta\",\"paths\",...a];return e.getIn([\"json\",...s])||e.getIn([\"resolved\",...s])||e.getIn([\"resolvedSubtrees\",...s])?e.setIn([...l,r],(0,o.fromJS)(n)):e},[u.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:a,method:n}}=t;return e.deleteIn([\"responses\",a,n])},[u.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:a,method:n}}=t;return e.deleteIn([\"requests\",a,n])},[u.SET_SCHEME]:(e,t)=>{let{payload:{scheme:a,path:n,method:r}}=t;return n&&r?e.setIn([\"scheme\",n,r],a):n||r?void 0:e.setIn([\"scheme\",\"_defaultScheme\"],a)}}},3881:(e,t,a)=>{a.r(t),a.d(t,{allowTryItOutFor:()=>ne,basePath:()=>K,canExecuteScheme:()=>ve,consumes:()=>L,consumesOptionsFor:()=>ge,contentTypeValues:()=>me,currentProducesFor:()=>fe,definitions:()=>$,externalDocs:()=>I,findDefinition:()=>J,getOAS3RequiredRequestBodyContentType:()=>we,getParameter:()=>ie,hasHost:()=>ce,host:()=>V,info:()=>A,isMediaTypeSchemaPropertiesEqual:()=>be,isOAS3:()=>k,lastError:()=>v,mutatedRequestFor:()=>ae,mutatedRequests:()=>Q,operationScheme:()=>ye,operationWithMeta:()=>le,operations:()=>D,operationsWithRootInherited:()=>z,operationsWithTags:()=>G,parameterInclusionSettingFor:()=>se,parameterValues:()=>ue,parameterWithMeta:()=>oe,parameterWithMetaByIdentity:()=>re,parametersIncludeIn:()=>de,parametersIncludeType:()=>pe,paths:()=>T,produces:()=>q,producesOptionsFor:()=>he,requestFor:()=>te,requests:()=>X,responseFor:()=>ee,responses:()=>Y,schemes:()=>F,security:()=>B,securityDefinitions:()=>U,semver:()=>P,spec:()=>N,specJS:()=>x,specJson:()=>b,specJsonWithResolvedSubtrees:()=>O,specResolved:()=>_,specResolvedSubtree:()=>C,specSource:()=>w,specStr:()=>S,tagDetails:()=>H,taggedOperations:()=>Z,tags:()=>W,url:()=>E,validOperationMethods:()=>M,validateBeforeExecute:()=>Se,validationErrors:()=>Ee,version:()=>R});var n=a(8136),r=a(29),s=a(8818),o=a(2565),l=a(6145),i=a(1778),c=a(6785),u=a(4350),d=a(9963),p=a(4163),m=a(8639),f=a(6561),h=a(9725);const g=[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],y=e=>e||(0,h.Map)(),v=(0,m.createSelector)(y,(e=>e.get(\"lastError\"))),E=(0,m.createSelector)(y,(e=>e.get(\"url\"))),S=(0,m.createSelector)(y,(e=>e.get(\"spec\")||\"\")),w=(0,m.createSelector)(y,(e=>e.get(\"specSource\")||\"not-editor\")),b=(0,m.createSelector)(y,(e=>e.get(\"json\",(0,h.Map)()))),x=(0,m.createSelector)(b,(e=>e.toJS())),_=(0,m.createSelector)(y,(e=>e.get(\"resolved\",(0,h.Map)()))),C=(e,t)=>e.getIn([\"resolvedSubtrees\",...t],void 0),j=(e,t)=>h.Map.isMap(e)&&h.Map.isMap(t)?t.get(\"$$ref\")?t:(0,h.OrderedMap)().mergeWith(j,e,t):t,O=(0,m.createSelector)(y,(e=>(0,h.OrderedMap)().mergeWith(j,e.get(\"json\"),e.get(\"resolvedSubtrees\")))),N=e=>b(e),k=(0,m.createSelector)(N,(()=>!1)),A=(0,m.createSelector)(N,(e=>xe(e&&e.get(\"info\")))),I=(0,m.createSelector)(N,(e=>xe(e&&e.get(\"externalDocs\")))),R=(0,m.createSelector)(A,(e=>e&&e.get(\"version\"))),P=(0,m.createSelector)(R,(e=>{var t;return(0,n.default)(t=/v?([0-9]*)\\.([0-9]*)\\.([0-9]*)/i.exec(e)).call(t,1)})),T=(0,m.createSelector)(O,(e=>e.get(\"paths\"))),M=(0,m.createSelector)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\"])),D=(0,m.createSelector)(T,(e=>{if(!e||e.size<1)return(0,h.List)();let t=(0,h.List)();return e&&(0,r.default)(e)?((0,r.default)(e).call(e,((e,a)=>{if(!e||!(0,r.default)(e))return{};(0,r.default)(e).call(e,((e,n)=>{(0,s.default)(g).call(g,n)<0||(t=t.push((0,h.fromJS)({path:a,method:n,operation:e,id:`${n}-${a}`})))}))})),t):(0,h.List)()})),L=(0,m.createSelector)(N,(e=>(0,h.Set)(e.get(\"consumes\")))),q=(0,m.createSelector)(N,(e=>(0,h.Set)(e.get(\"produces\")))),B=(0,m.createSelector)(N,(e=>e.get(\"security\",(0,h.List)()))),U=(0,m.createSelector)(N,(e=>e.get(\"securityDefinitions\"))),J=(e,t)=>{const a=e.getIn([\"resolvedSubtrees\",\"definitions\",t],null),n=e.getIn([\"json\",\"definitions\",t],null);return a||n||null},$=(0,m.createSelector)(N,(e=>{const t=e.get(\"definitions\");return h.Map.isMap(t)?t:(0,h.Map)()})),K=(0,m.createSelector)(N,(e=>e.get(\"basePath\"))),V=(0,m.createSelector)(N,(e=>e.get(\"host\"))),F=(0,m.createSelector)(N,(e=>e.get(\"schemes\",(0,h.Map)()))),z=(0,m.createSelector)(D,L,q,((e,t,a)=>(0,o.default)(e).call(e,(e=>e.update(\"operation\",(e=>{if(e){if(!h.Map.isMap(e))return;return e.withMutations((e=>(e.get(\"consumes\")||e.update(\"consumes\",(e=>(0,h.Set)(e).merge(t))),e.get(\"produces\")||e.update(\"produces\",(e=>(0,h.Set)(e).merge(a))),e)))}return(0,h.Map)()})))))),W=(0,m.createSelector)(N,(e=>{const t=e.get(\"tags\",(0,h.List)());return h.List.isList(t)?(0,l.default)(t).call(t,(e=>h.Map.isMap(e))):(0,h.List)()})),H=(e,t)=>{var a;let n=W(e)||(0,h.List)();return(0,i.default)(a=(0,l.default)(n).call(n,h.Map.isMap)).call(a,(e=>e.get(\"name\")===t),(0,h.Map)())},G=(0,m.createSelector)(z,W,((e,t)=>(0,c.default)(e).call(e,((e,t)=>{let a=(0,h.Set)(t.getIn([\"operation\",\"tags\"]));return a.count()<1?e.update(\"default\",(0,h.List)(),(e=>e.push(t))):(0,c.default)(a).call(a,((e,a)=>e.update(a,(0,h.List)(),(e=>e.push(t)))),e)}),(0,c.default)(t).call(t,((e,t)=>e.set(t.get(\"name\"),(0,h.List)())),(0,h.OrderedMap)())))),Z=e=>t=>{var a;let{getConfigs:n}=t,{tagsSorter:r,operationsSorter:s}=n();return(0,o.default)(a=G(e).sortBy(((e,t)=>t),((e,t)=>{let a=\"function\"==typeof r?r:f.wh.tagsSorter[r];return a?a(e,t):null}))).call(a,((t,a)=>{let n=\"function\"==typeof s?s:f.wh.operationsSorter[s],r=n?(0,u.default)(t).call(t,n):t;return(0,h.Map)({tagDetails:H(e,a),operations:r})}))},Y=(0,m.createSelector)(y,(e=>e.get(\"responses\",(0,h.Map)()))),X=(0,m.createSelector)(y,(e=>e.get(\"requests\",(0,h.Map)()))),Q=(0,m.createSelector)(y,(e=>e.get(\"mutatedRequests\",(0,h.Map)()))),ee=(e,t,a)=>Y(e).getIn([t,a],null),te=(e,t,a)=>X(e).getIn([t,a],null),ae=(e,t,a)=>Q(e).getIn([t,a],null),ne=()=>!0,re=(e,t,a)=>{const n=O(e).getIn([\"paths\",...t,\"parameters\"],(0,h.OrderedMap)()),r=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,h.OrderedMap)()),s=(0,o.default)(n).call(n,(e=>{const t=r.get(`${a.get(\"in\")}.${a.get(\"name\")}`),n=r.get(`${a.get(\"in\")}.${a.get(\"name\")}.hash-${a.hashCode()}`);return(0,h.OrderedMap)().merge(e,t,n)}));return(0,i.default)(s).call(s,(e=>e.get(\"in\")===a.get(\"in\")&&e.get(\"name\")===a.get(\"name\")),(0,h.OrderedMap)())},se=(e,t,a,n)=>{const r=`${n}.${a}`;return e.getIn([\"meta\",\"paths\",...t,\"parameter_inclusions\",r],!1)},oe=(e,t,a,n)=>{const r=O(e).getIn([\"paths\",...t,\"parameters\"],(0,h.OrderedMap)()),s=(0,i.default)(r).call(r,(e=>e.get(\"in\")===n&&e.get(\"name\")===a),(0,h.OrderedMap)());return re(e,t,s)},le=(e,t,a)=>{var n;const r=O(e).getIn([\"paths\",t,a],(0,h.OrderedMap)()),s=e.getIn([\"meta\",\"paths\",t,a],(0,h.OrderedMap)()),l=(0,o.default)(n=r.get(\"parameters\",(0,h.List)())).call(n,(n=>re(e,[t,a],n)));return(0,h.OrderedMap)().merge(r,s).set(\"parameters\",l)};function ie(e,t,a,n){t=t||[];let r=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,h.fromJS)([]));return(0,i.default)(r).call(r,(e=>h.Map.isMap(e)&&e.get(\"name\")===a&&e.get(\"in\")===n))||(0,h.Map)()}const ce=(0,m.createSelector)(N,(e=>{const t=e.get(\"host\");return\"string\"==typeof t&&t.length>0&&\"/\"!==t[0]}));function ue(e,t,a){t=t||[];let n=le(e,...t).get(\"parameters\",(0,h.List)());return(0,c.default)(n).call(n,((e,t)=>{let n=a&&\"body\"===t.get(\"in\")?t.get(\"value_xml\"):t.get(\"value\");return e.set((0,f.V9)(t,{allowHashes:!1}),n)}),(0,h.fromJS)({}))}function de(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(h.List.isList(e))return(0,d.default)(e).call(e,(e=>h.Map.isMap(e)&&e.get(\"in\")===t))}function pe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(h.List.isList(e))return(0,d.default)(e).call(e,(e=>h.Map.isMap(e)&&e.get(\"type\")===t))}function me(e,t){t=t||[];let a=O(e).getIn([\"paths\",...t],(0,h.fromJS)({})),n=e.getIn([\"meta\",\"paths\",...t],(0,h.fromJS)({})),r=fe(e,t);const s=a.get(\"parameters\")||new h.List,o=n.get(\"consumes_value\")?n.get(\"consumes_value\"):pe(s,\"file\")?\"multipart/form-data\":pe(s,\"formData\")?\"application/x-www-form-urlencoded\":void 0;return(0,h.fromJS)({requestContentType:o,responseContentType:r})}function fe(e,t){t=t||[];const a=O(e).getIn([\"paths\",...t],null);if(null===a)return;const n=e.getIn([\"meta\",\"paths\",...t,\"produces_value\"],null),r=a.getIn([\"produces\",0],null);return n||r||\"application/json\"}function he(e,t){t=t||[];const a=O(e),n=a.getIn([\"paths\",...t],null);if(null===n)return;const[r]=t,s=n.get(\"produces\",null),o=a.getIn([\"paths\",r,\"produces\"],null),l=a.getIn([\"produces\"],null);return s||o||l}function ge(e,t){t=t||[];const a=O(e),n=a.getIn([\"paths\",...t],null);if(null===n)return;const[r]=t,s=n.get(\"consumes\",null),o=a.getIn([\"paths\",r,\"consumes\"],null),l=a.getIn([\"consumes\"],null);return s||o||l}const ye=(e,t,a)=>{let n=e.get(\"url\").match(/^([a-z][a-z0-9+\\-.]*):/),r=(0,p.default)(n)?n[1]:null;return e.getIn([\"scheme\",t,a])||e.getIn([\"scheme\",\"_defaultScheme\"])||r||\"\"},ve=(e,t,a)=>{var n;return(0,s.default)(n=[\"http\",\"https\"]).call(n,ye(e,t,a))>-1},Ee=(e,t)=>{t=t||[];let a=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,h.fromJS)([]));const n=[];return(0,r.default)(a).call(a,(e=>{let t=e.get(\"errors\");t&&t.count()&&(0,r.default)(t).call(t,(e=>n.push(e)))})),n},Se=(e,t)=>0===Ee(e,t).length,we=(e,t)=>{var a;let n={requestBody:!1,requestContentType:{}},s=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\"],(0,h.fromJS)([]));return s.size<1||(s.getIn([\"required\"])&&(n.requestBody=s.getIn([\"required\"])),(0,r.default)(a=s.getIn([\"content\"]).entrySeq()).call(a,(e=>{const t=e[0];if(e[1].getIn([\"schema\",\"required\"])){const a=e[1].getIn([\"schema\",\"required\"]).toJS();n.requestContentType[t]=a}}))),n},be=(e,t,a,n)=>{if((a||n)&&a===n)return!0;let r=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\",\"content\"],(0,h.fromJS)([]));if(r.size<2||!a||!n)return!1;let s=r.getIn([a,\"schema\",\"properties\"],(0,h.fromJS)([])),o=r.getIn([n,\"schema\",\"properties\"],(0,h.fromJS)([]));return!!s.equals(o)};function xe(e){return h.Map.isMap(e)?e:new h.Map}},7508:(e,t,a)=>{a.r(t),a.d(t,{executeRequest:()=>i,updateJsonSpec:()=>l,updateSpec:()=>o,validateParams:()=>c});var n=a(2740),r=a(29),s=a(9908);const o=(e,t)=>{let{specActions:a}=t;return function(){e(...arguments),a.parseToJson(...arguments)}},l=(e,t)=>{let{specActions:a}=t;return function(){for(var t=arguments.length,o=new Array(t),l=0;l<t;l++)o[l]=arguments[l];e(...o),a.invalidateResolvedSubtreeCache();const[i]=o,c=(0,s.default)(i,[\"paths\"])||{},u=(0,n.default)(c);(0,r.default)(u).call(u,(e=>{(0,s.default)(c,[e]).$ref&&a.requestResolvedSubtree([\"paths\",e])})),a.requestResolvedSubtree([\"components\",\"securitySchemes\"])}},i=(e,t)=>{let{specActions:a}=t;return t=>(a.logRequest(t),e(t))},c=(e,t)=>{let{specSelectors:a}=t;return t=>e(t,a.isOAS3())}},4852:(e,t,a)=>{a.r(t),a.d(t,{loaded:()=>n});const n=(e,t)=>function(){e(...arguments);const a=t.getConfigs().withCredentials;void 0!==a&&(t.fn.fetch.withCredentials=\"string\"==typeof a?\"true\"===a:!!a)}},9430:(e,t,a)=>{a.r(t),a.d(t,{default:()=>m});const n=(e=>{var t={};return a.d(t,e),t})({default:()=>g.default});const r=(e=>{var t={};return a.d(t,e),t})({default:()=>y.default});const s=(e=>{var t={};return a.d(t,e),t})({default:()=>v.default});const o=(e=>{var t={};return a.d(t,e),t})({default:()=>E.default});const l=(e=>{var t={};return a.d(t,e),t})({makeResolve:()=>S.makeResolve});const i=(e=>{var t={};return a.d(t,e),t})({buildRequest:()=>w.buildRequest,execute:()=>w.execute});const c=(e=>{var t={};return a.d(t,e),t})({default:()=>b.default,makeHttp:()=>b.makeHttp,serializeRes:()=>b.serializeRes});const u=(e=>{var t={};return a.d(t,e),t})({makeResolveSubtree:()=>x.makeResolveSubtree});var d=a(5013),p=a(4852);function m(e){let{configs:t,getConfigs:a}=e;return{fn:{fetch:(0,c.makeHttp)(c.default,t.preFetch,t.postFetch),buildRequest:i.buildRequest,execute:i.execute,resolve:(0,l.makeResolve)({strategies:[o.default,s.default,r.default,n.default]}),resolveSubtree:async function(e,t){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const i=a(),c={modelPropertyMacro:i.modelPropertyMacro,parameterMacro:i.parameterMacro,requestInterceptor:i.requestInterceptor,responseInterceptor:i.responseInterceptor,strategies:[o.default,s.default,r.default,n.default]};return(0,u.makeResolveSubtree)(c)(e,t,l)},serializeRes:c.serializeRes,opId:d.opId},statePlugins:{configs:{wrapActions:{loaded:p.loaded}}}}}},8525:(e,t,a)=>{a.r(t),a.d(t,{default:()=>r});var n=a(6561);function r(){return{fn:{shallowEqualKeys:n.be}}}},8347:(e,t,a)=>{a.r(t),a.d(t,{getDisplayName:()=>n});const n=e=>e.displayName||e.name||\"Component\"},3420:(e,t,a)=>{a.r(t),a.d(t,{default:()=>i});var n=a(313),r=a(6561),s=a(3934),o=a(8347),l=a(9669);const i=e=>{let{getComponents:t,getStore:a,getSystem:i}=e;const c=(u=(0,s.getComponent)(i,a,t),(0,r.HP)(u,(function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return(0,n.default)(t)})));var u;const d=(e=>(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return t})))((0,s.withMappedContainer)(i,a,c));return{rootInjects:{getComponent:c,makeMappedContainer:d,render:(0,s.render)(i,a,s.getComponent,t)},fn:{getDisplayName:o.getDisplayName}}}},3934:(e,t,a)=>{a.r(t),a.d(t,{getComponent:()=>y,render:()=>g,withMappedContainer:()=>h});var n=a(863),r=a(2740),s=a(810);const o=(e=>{var t={};return a.d(t,e),t})({default:()=>_.default});var l=a(9871);const i=(e=>{var t={};return a.d(t,e),t})({Provider:()=>C.Provider,connect:()=>C.connect});const c=(e=>{var t={};return a.d(t,e),t})({default:()=>j.default});var u=a(1252);const d=e=>t=>{const{fn:a}=e();class r extends s.Component{render(){return s.default.createElement(t,(0,n.default)({},e(),this.props,this.context))}}return r.displayName=`WithSystem(${a.getDisplayName(t)})`,r},p=(e,t)=>a=>{const{fn:r}=e();class o extends s.Component{render(){return s.default.createElement(i.Provider,{store:t},s.default.createElement(a,(0,n.default)({},this.props,this.context)))}}return o.displayName=`WithRoot(${r.getDisplayName(a)})`,o},m=(e,t,a)=>(0,l.compose)(a?p(e,a):u.default,(0,i.connect)(((a,n)=>{var r;const s={...n,...e()},o=(null===(r=t.prototype)||void 0===r?void 0:r.mapStateToProps)||(e=>({state:e}));return o(a,s)})),d(e))(t),f=(e,t,a,n)=>{for(const r in t){const s=t[r];\"function\"==typeof s&&s(a[r],n[r],e())}},h=(e,t,a)=>(t,n)=>{const{fn:o}=e(),l=a(t,\"root\");class i extends s.Component{constructor(t,a){super(t,a),f(e,n,t,{})}UNSAFE_componentWillReceiveProps(t){f(e,n,t,this.props)}render(){const e=(0,c.default)(this.props,n?(0,r.default)(n):[]);return s.default.createElement(l,e)}}return i.displayName=`WithMappedContainer(${o.getDisplayName(l)})`,i},g=(e,t,a,n)=>r=>{const l=a(e,t,n)(\"App\",\"root\");o.default.render(s.default.createElement(l,null),r)},y=(e,t,a)=>function(n,r){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(\"string\"!=typeof n)throw new TypeError(\"Need a string, to fetch a component. Was given a \"+typeof n);const o=a(n);return o?r?\"root\"===r?m(e,o,t()):m(e,o):o:(s.failSilently||e().log.warn(\"Could not find component:\",n),null)}},471:(e,t,a)=>{a.d(t,{d3:()=>s.default,C2:()=>w});var n=a(2740),r=a(2372);const s=(e=>{var t={};return a.d(t,e),t})({default:()=>O.default});const o=(e=>{var t={};return a.d(t,e),t})({default:()=>N.default});const l=(e=>{var t={};return a.d(t,e),t})({default:()=>k.default});const i=(e=>{var t={};return a.d(t,e),t})({default:()=>A.default});const c=(e=>{var t={};return a.d(t,e),t})({default:()=>I.default});const u=(e=>{var t={};return a.d(t,e),t})({default:()=>R.default});const d=(e=>{var t={};return a.d(t,e),t})({default:()=>P.default});const p=(e=>{var t={};return a.d(t,e),t})({default:()=>T.default});const m=(e=>{var t={};return a.d(t,e),t})({default:()=>M.default});const f=(e=>{var t={};return a.d(t,e),t})({default:()=>D.default});const h=(e=>{var t={};return a.d(t,e),t})({default:()=>L.default});const g=(e=>{var t={};return a.d(t,e),t})({default:()=>q.default});const y=(e=>{var t={};return a.d(t,e),t})({default:()=>B.default});const v=(e=>{var t={};return a.d(t,e),t})({default:()=>U.default});s.default.registerLanguage(\"json\",l.default),s.default.registerLanguage(\"js\",o.default),s.default.registerLanguage(\"xml\",i.default),s.default.registerLanguage(\"yaml\",u.default),s.default.registerLanguage(\"http\",d.default),s.default.registerLanguage(\"bash\",c.default),s.default.registerLanguage(\"powershell\",p.default),s.default.registerLanguage(\"javascript\",o.default);const E={agate:m.default,arta:f.default,monokai:h.default,nord:g.default,obsidian:y.default,\"tomorrow-night\":v.default},S=(0,n.default)(E),w=e=>(0,r.default)(S).call(S,e)?E[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),m.default)},6561:(e,t,a)=>{a.d(t,{r3:()=>le,GZ:()=>ce,Xb:()=>_e,oJ:()=>fe,XV:()=>ve,iQ:()=>ee,J6:()=>he,DR:()=>ae,oG:()=>L,Uj:()=>xe,QG:()=>me,po:()=>ye,nX:()=>ge,gp:()=>te,kJ:()=>G,O2:()=>je,LQ:()=>B,Wl:()=>H,Kn:()=>U,HP:()=>Z,AF:()=>q,D$:()=>Se,Ay:()=>Y,Q2:()=>X,mz:()=>D,V9:()=>we,cz:()=>be,UG:()=>oe,Zl:()=>ne,hW:()=>pe,Nm:()=>de,be:()=>ue,wh:()=>ie,Pz:()=>Ee,_5:()=>Q,Ik:()=>se});var n=a(4163),r=a(2565),s=a(2954),o=a(29),l=a(6145),i=a(2740),c=(a(5527),a(6785)),u=a(7512),d=a(4350),p=(a(8136),a(5171),a(9963)),m=(a(2372),a(8818)),f=a(1778);const h=(e=>{var t={};return a.d(t,e),t})({default:()=>J.default});var g=a(5942),y=a(313),v=a(9725);const E=(e=>{var t={};return a.d(t,e),t})({sanitizeUrl:()=>$.sanitizeUrl});const S=(e=>{var t={};return a.d(t,e),t})({default:()=>K.default});const w=(e=>{var t={};return a.d(t,e),t})({default:()=>V.default});var b=a(5476);const x=(e=>{var t={};return a.d(t,e),t})({default:()=>F.default});a(841);const _=(e=>{var t={};return a.d(t,e),t})({default:()=>z.default});var C=a(7068),j=a(7504);const O=(e=>{var t={};return a.d(t,e),t})({default:()=>W.default});var N=a(9069),k=a(1798),A=a.n(k),I=a(9072),R=a.n(I),P=a(8764).Buffer;const T=\"default\",M=e=>v.default.Iterable.isIterable(e);function D(e){return U(e)?M(e)?e.toJS():e:{}}function L(e){var t,a;if(M(e))return e;if(e instanceof j.Z.File)return e;if(!U(e))return e;if((0,n.default)(e))return(0,r.default)(a=v.default.Seq(e)).call(a,L).toList();if((0,C.default)((0,s.default)(e))){var o;const t=function(e){if(!(0,C.default)((0,s.default)(e)))return e;const t={},a=\"_**[]\",n={};for(let r of(0,s.default)(e).call(e))if(t[r[0]]||n[r[0]]&&n[r[0]].containsMultiple){if(!n[r[0]]){n[r[0]]={containsMultiple:!0,length:1},t[`${r[0]}${a}${n[r[0]].length}`]=t[r[0]],delete t[r[0]]}n[r[0]].length+=1,t[`${r[0]}${a}${n[r[0]].length}`]=r[1]}else t[r[0]]=r[1];return t}(e);return(0,r.default)(o=v.default.OrderedMap(t)).call(o,L)}return(0,r.default)(t=v.default.OrderedMap(e)).call(t,L)}function q(e){return(0,n.default)(e)?e:[e]}function B(e){return\"function\"==typeof e}function U(e){return!!e&&\"object\"==typeof e}function H(e){return\"function\"==typeof e}function G(e){return(0,n.default)(e)}const Z=b.default;function Y(e,t){var a;return(0,c.default)(a=(0,i.default)(e)).call(a,((a,n)=>(a[n]=t(e[n],n),a)),{})}function X(e,t){var a;return(0,c.default)(a=(0,i.default)(e)).call(a,((a,n)=>{let r=t(e[n],n);return r&&\"object\"==typeof r&&(0,u.default)(a,r),a}),{})}function Q(e){return t=>{let{dispatch:a,getState:n}=t;return t=>a=>\"function\"==typeof a?a(e()):t(a)}}function ee(e){var t;let a=e.keySeq();return a.contains(T)?T:(0,d.default)(t=(0,l.default)(a).call(a,(e=>\"2\"===(e+\"\")[0]))).call(t).first()}function te(e,t){if(!v.default.Iterable.isIterable(e))return v.default.List();let a=e.getIn((0,n.default)(t)?t:[t]);return v.default.List.isList(a)?a:v.default.List()}function ae(e){let t,a=[/filename\\*=[^']+'\\w*'\"([^\"]+)\";?/i,/filename\\*=[^']+'\\w*'([^;]+);?/i,/filename=\"([^;]*);?\"/i,/filename=([^;]*);?/i];if((0,p.default)(a).call(a,(a=>(t=a.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function ne(e){return t=e.replace(/\\.[^./]*$/,\"\"),(0,w.default)((0,S.default)(t));var t}function re(e,t,a,s,i){if(!t)return[];let c=[],u=t.get(\"nullable\"),d=t.get(\"required\"),m=t.get(\"maximum\"),f=t.get(\"minimum\"),h=t.get(\"type\"),g=t.get(\"format\"),y=t.get(\"maxLength\"),E=t.get(\"minLength\"),S=t.get(\"uniqueItems\"),w=t.get(\"maxItems\"),b=t.get(\"minItems\"),x=t.get(\"pattern\");const _=a||!0===d,C=null!=e;if(u&&null===e||!h||!(_||C&&\"array\"===h||!(!_&&!C)))return[];let O=\"string\"===h&&e,N=\"array\"===h&&(0,n.default)(e)&&e.length,k=\"array\"===h&&v.default.List.isList(e)&&e.count();const A=[O,N,k,\"array\"===h&&\"string\"==typeof e&&e,\"file\"===h&&e instanceof j.Z.File,\"boolean\"===h&&(e||!1===e),\"number\"===h&&(e||0===e),\"integer\"===h&&(e||0===e),\"object\"===h&&\"object\"==typeof e&&null!==e,\"object\"===h&&\"string\"==typeof e&&e],I=(0,p.default)(A).call(A,(e=>!!e));if(_&&!I&&!s)return c.push(\"Required field is not provided\"),c;if(\"object\"===h&&(null===i||\"application/json\"===i)){let a=e;if(\"string\"==typeof e)try{a=JSON.parse(e)}catch(e){return c.push(\"Parameter string value must be valid JSON\"),c}var R;if(t&&t.has(\"required\")&&H(d.isList)&&d.isList()&&(0,o.default)(d).call(d,(e=>{void 0===a[e]&&c.push({propKey:e,error:\"Required property not found\"})})),t&&t.has(\"properties\"))(0,o.default)(R=t.get(\"properties\")).call(R,((e,t)=>{const n=re(a[t],e,!1,s,i);c.push(...(0,r.default)(n).call(n,(e=>({propKey:t,error:e}))))}))}if(x){let t=((e,t)=>{if(!new RegExp(t).test(e))return\"Value must follow pattern \"+t})(e,x);t&&c.push(t)}if(b&&\"array\"===h){let t=((e,t)=>{if(!e&&t>=1||e&&e.length<t)return`Array must contain at least ${t} item${1===t?\"\":\"s\"}`})(e,b);t&&c.push(t)}if(w&&\"array\"===h){let t=((e,t)=>{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?\"\":\"s\"}`})(e,w);t&&c.push({needRemove:!0,error:t})}if(S&&\"array\"===h){let t=((e,t)=>{if(e&&(\"true\"===t||!0===t)){const t=(0,v.fromJS)(e),a=t.toSet();if(e.length>a.size){let e=(0,v.Set)();if((0,o.default)(t).call(t,((a,n)=>{(0,l.default)(t).call(t,(e=>H(e.equals)?e.equals(a):e===a)).size>1&&(e=e.add(n))})),0!==e.size)return(0,r.default)(e).call(e,(e=>({index:e,error:\"No duplicates allowed.\"}))).toArray()}}})(e,S);t&&c.push(...t)}if(y||0===y){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?\"s\":\"\"}`})(e,y);t&&c.push(t)}if(E){let t=((e,t)=>{if(e.length<t)return`Value must be at least ${t} character${1!==t?\"s\":\"\"}`})(e,E);t&&c.push(t)}if(m||0===m){let t=((e,t)=>{if(e>t)return`Value must be less than ${t}`})(e,m);t&&c.push(t)}if(f||0===f){let t=((e,t)=>{if(e<t)return`Value must be greater than ${t}`})(e,f);t&&c.push(t)}if(\"string\"===h){let t;if(t=\"date-time\"===g?(e=>{if(isNaN(Date.parse(e)))return\"Value must be a DateTime\"})(e):\"uuid\"===g?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return\"Value must be a Guid\"})(e):(e=>{if(e&&\"string\"!=typeof e)return\"Value must be a string\"})(e),!t)return c;c.push(t)}else if(\"boolean\"===h){let t=(e=>{if(\"true\"!==e&&\"false\"!==e&&!0!==e&&!1!==e)return\"Value must be a boolean\"})(e);if(!t)return c;c.push(t)}else if(\"number\"===h){let t=(e=>{if(!/^-?\\d+(\\.?\\d+)?$/.test(e))return\"Value must be a number\"})(e);if(!t)return c;c.push(t)}else if(\"integer\"===h){let t=(e=>{if(!/^-?\\d+$/.test(e))return\"Value must be an integer\"})(e);if(!t)return c;c.push(t)}else if(\"array\"===h){if(!N&&!k)return c;e&&(0,o.default)(e).call(e,((e,a)=>{const n=re(e,t.get(\"items\"),!1,s,i);c.push(...(0,r.default)(n).call(n,(e=>({index:a,error:e}))))}))}else if(\"file\"===h){let t=(e=>{if(e&&!(e instanceof j.Z.File))return\"Value must be a file\"})(e);if(!t)return c;c.push(t)}return c}const se=function(e,t){let{isOAS3:a=!1,bypassRequiredCheck:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=e.get(\"required\"),{schema:s,parameterContentMediaType:o}=(0,N.Z)(e,{isOAS3:a});return re(t,s,r,n,o)},oe=()=>{let e={},t=j.Z.location.search;if(!t)return{};if(\"\"!=t){let a=t.substr(1).split(\"&\");for(let t in a)Object.prototype.hasOwnProperty.call(a,t)&&(t=a[t].split(\"=\"),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||\"\")}return e},le=e=>{let t;return t=e instanceof P?e:P.from(e.toString(),\"utf-8\"),t.toString(\"base64\")},ie={operationsSorter:{alpha:(e,t)=>e.get(\"path\").localeCompare(t.get(\"path\")),method:(e,t)=>e.get(\"method\").localeCompare(t.get(\"method\"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},ce=e=>{let t=[];for(let a in e){let n=e[a];void 0!==n&&\"\"!==n&&t.push([a,\"=\",encodeURIComponent(n).replace(/%20/g,\"+\")].join(\"\"))}return t.join(\"&\")},ue=(e,t,a)=>!!(0,x.default)(a,(a=>(0,_.default)(e[a],t[a])));function de(e){return\"string\"!=typeof e||\"\"===e?\"\":(0,E.sanitizeUrl)(e)}function pe(e){return!(!e||(0,m.default)(e).call(e,\"localhost\")>=0||(0,m.default)(e).call(e,\"127.0.0.1\")>=0||\"none\"===e)}function me(e){if(!v.default.OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=(0,f.default)(e).call(e,((e,t)=>(0,h.default)(t).call(t,\"2\")&&(0,i.default)(e.get(\"content\")||{}).length>0)),a=e.get(\"default\")||v.default.OrderedMap(),n=(a.get(\"content\")||v.default.OrderedMap()).keySeq().toJS().length?a:null;return t||n}const fe=e=>\"string\"==typeof e||e instanceof String?(0,g.default)(e).call(e).replace(/\\s/g,\"%20\"):\"\",he=e=>(0,O.default)(fe(e).replace(/%20/g,\"_\")),ge=e=>(0,l.default)(e).call(e,((e,t)=>/^x-/.test(t))),ye=e=>(0,l.default)(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function ve(e,t){var a;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if(\"object\"!=typeof e||(0,n.default)(e)||null===e||!t)return e;const s=(0,u.default)({},e);return(0,o.default)(a=(0,i.default)(s)).call(a,(e=>{e===t&&r(s[e],e)?delete s[e]:s[e]=ve(s[e],t,r)})),s}function Ee(e){if(\"string\"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),\"object\"==typeof e&&null!==e)try{return(0,y.default)(e,null,2)}catch(t){return String(e)}return null==e?\"\":e.toString()}function Se(e){return\"number\"==typeof e?e.toString():e}function we(e){let{returnAll:t=!1,allowHashes:a=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!v.default.Map.isMap(e))throw new Error(\"paramToIdentifier: received a non-Im.Map parameter as input\");const n=e.get(\"name\"),r=e.get(\"in\");let s=[];return e&&e.hashCode&&r&&n&&a&&s.push(`${r}.${n}.hash-${e.hashCode()}`),r&&n&&s.push(`${r}.${n}`),s.push(n),t?s:s[0]||\"\"}function be(e,t){var a;const n=we(e,{returnAll:!0});return(0,l.default)(a=(0,r.default)(n).call(n,(e=>t[e]))).call(a,(e=>void 0!==e))[0]}function xe(){return Ce(A()(32).toString(\"base64\"))}function _e(e){return Ce(R()(\"sha256\").update(e).digest(\"base64\"))}function Ce(e){return e.replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=/g,\"\")}const je=e=>!e||!(!M(e)||!e.isEmpty())},2518:(e,t,a)=>{function n(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?\"json\":null}a.d(t,{O:()=>n})},3543:(e,t,a)=>{a.d(t,{mn:()=>o});var n=a(3769);function r(e){return e.match(/^(?:[a-z]+:)?\\/\\//i)}function s(e,t){return e?r(e)?(a=e).match(/^\\/\\//i)?`${window.location.protocol}${a}`:a:new n.default(e,t).href:t;var a}function o(e,t){let{selectedServer:a=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{return function(e,t){let{selectedServer:a=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return;if(r(e))return e;const o=s(a,t);return r(o)?new n.default(e,o).href:new n.default(e,window.location.href).href}(e,t,{selectedServer:a})}catch{return}}},7504:(e,t,a)=>{a.d(t,{Z:()=>n});const n=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if(\"undefined\"==typeof window)return e;try{e=window;for(var t of[\"File\",\"Blob\",\"FormData\"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},9069:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(6145),r=a(2372),s=a(9725);const o=s.default.Set.of(\"type\",\"format\",\"items\",\"default\",\"maximum\",\"exclusiveMaximum\",\"minimum\",\"exclusiveMinimum\",\"maxLength\",\"minLength\",\"pattern\",\"maxItems\",\"minItems\",\"uniqueItems\",\"enum\",\"multipleOf\");function l(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!s.default.Map.isMap(e))return{schema:s.default.Map(),parameterContentMediaType:null};if(!t)return\"body\"===e.get(\"in\")?{schema:e.get(\"schema\",s.default.Map()),parameterContentMediaType:null}:{schema:(0,n.default)(e).call(e,((e,t)=>(0,r.default)(o).call(o,t))),parameterContentMediaType:null};if(e.get(\"content\")){const t=e.get(\"content\",s.default.Map({})).keySeq().first();return{schema:e.getIn([\"content\",t,\"schema\"],s.default.Map()),parameterContentMediaType:t}}return{schema:e.get(\"schema\")?e.get(\"schema\",s.default.Map()):s.default.Map(),parameterContentMediaType:null}}},9669:(e,t,a)=>{a.d(t,{Z:()=>f});var n=a(4163),r=a(7930),s=a(8898),o=a(5487),l=a(1778);const i=(e=>{var t={};return a.d(t,e),t})({default:()=>H.default});var c=a(6914),u=a(5476);const d=e=>t=>(0,n.default)(e)&&(0,n.default)(t)&&e.length===t.length&&(0,r.default)(e).call(e,((e,a)=>e===t[a])),p=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return t};class m extends c.default{delete(e){const t=(0,s.default)((0,o.default)(this).call(this)),a=(0,l.default)(t).call(t,d(e));return super.delete(a)}get(e){const t=(0,s.default)((0,o.default)(this).call(this)),a=(0,l.default)(t).call(t,d(e));return super.get(a)}has(e){const t=(0,s.default)((0,o.default)(this).call(this));return-1!==(0,i.default)(t).call(t,d(e))}}const f=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;const{Cache:a}=u.default;u.default.Cache=m;const n=(0,u.default)(e,t);return u.default.Cache=a,n}},8764:(e,t,a)=>{const n=a(4780),r=a(3294),s=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;t.Buffer=i,t.SlowBuffer=function(e){+e!=e&&(e=0);return i.alloc(+e)},t.INSPECT_MAX_BYTES=50;const o=2147483647;function l(e){if(e>o)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,i.prototype),t}function i(e,t,a){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return d(e)}return c(e,t,a)}function c(e,t,a){if(\"string\"==typeof e)return function(e,t){\"string\"==typeof t&&\"\"!==t||(t=\"utf8\");if(!i.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);const a=0|h(e,t);let n=l(a);const r=n.write(e,t);r!==a&&(n=n.slice(0,r));return n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return m(t.buffer,t.byteOffset,t.byteLength)}return p(e)}(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return m(e,t,a);if(\"undefined\"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return m(e,t,a);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return i.from(n,t,a);const r=function(e){if(i.isBuffer(e)){const t=0|f(e.length),a=l(t);return 0===a.length||e.copy(a,0,0,t),a}if(void 0!==e.length)return\"number\"!=typeof e.length||Z(e.length)?l(0):p(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return p(e.data)}(e);if(r)return r;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return i.from(e[Symbol.toPrimitive](\"string\"),t,a);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}function u(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function d(e){return u(e),l(e<0?0:0|f(e))}function p(e){const t=e.length<0?0:0|f(e.length),a=l(t);for(let n=0;n<t;n+=1)a[n]=255&e[n];return a}function m(e,t,a){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(a||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return n=void 0===t&&void 0===a?new Uint8Array(e):void 0===a?new Uint8Array(e,t):new Uint8Array(e,t,a),Object.setPrototypeOf(n,i.prototype),n}function f(e){if(e>=o)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+o.toString(16)+\" bytes\");return 0|e}function h(e,t){if(i.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const a=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===a)return 0;let r=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return a;case\"utf8\":case\"utf-8\":return z(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*a;case\"hex\":return a>>>1;case\"base64\":return W(e).length;default:if(r)return n?-1:z(e).length;t=(\"\"+t).toLowerCase(),r=!0}}function g(e,t,a){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===a||a>this.length)&&(a=this.length),a<=0)return\"\";if((a>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return A(this,t,a);case\"utf8\":case\"utf-8\":return j(this,t,a);case\"ascii\":return N(this,t,a);case\"latin1\":case\"binary\":return k(this,t,a);case\"base64\":return C(this,t,a);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return I(this,t,a);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function y(e,t,a){const n=e[t];e[t]=e[a],e[a]=n}function v(e,t,a,n,r){if(0===e.length)return-1;if(\"string\"==typeof a?(n=a,a=0):a>2147483647?a=2147483647:a<-2147483648&&(a=-2147483648),Z(a=+a)&&(a=r?0:e.length-1),a<0&&(a=e.length+a),a>=e.length){if(r)return-1;a=e.length-1}else if(a<0){if(!r)return-1;a=0}if(\"string\"==typeof t&&(t=i.from(t,n)),i.isBuffer(t))return 0===t.length?-1:E(e,t,a,n,r);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,t,a):Uint8Array.prototype.lastIndexOf.call(e,t,a):E(e,[t],a,n,r);throw new TypeError(\"val must be string, number or Buffer\")}function E(e,t,a,n,r){let s,o=1,l=e.length,i=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;o=2,l/=2,i/=2,a/=2}function c(e,t){return 1===o?e[t]:e.readUInt16BE(t*o)}if(r){let n=-1;for(s=a;s<l;s++)if(c(e,s)===c(t,-1===n?0:s-n)){if(-1===n&&(n=s),s-n+1===i)return n*o}else-1!==n&&(s-=s-n),n=-1}else for(a+i>l&&(a=l-i),s=a;s>=0;s--){let a=!0;for(let n=0;n<i;n++)if(c(e,s+n)!==c(t,n)){a=!1;break}if(a)return s}return-1}function S(e,t,a,n){a=Number(a)||0;const r=e.length-a;n?(n=Number(n))>r&&(n=r):n=r;const s=t.length;let o;for(n>s/2&&(n=s/2),o=0;o<n;++o){const n=parseInt(t.substr(2*o,2),16);if(Z(n))return o;e[a+o]=n}return o}function w(e,t,a,n){return H(z(t,e.length-a),e,a,n)}function b(e,t,a,n){return H(function(e){const t=[];for(let a=0;a<e.length;++a)t.push(255&e.charCodeAt(a));return t}(t),e,a,n)}function x(e,t,a,n){return H(W(t),e,a,n)}function _(e,t,a,n){return H(function(e,t){let a,n,r;const s=[];for(let o=0;o<e.length&&!((t-=2)<0);++o)a=e.charCodeAt(o),n=a>>8,r=a%256,s.push(r),s.push(n);return s}(t,e.length-a),e,a,n)}function C(e,t,a){return 0===t&&a===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,a))}function j(e,t,a){a=Math.min(e.length,a);const n=[];let r=t;for(;r<a;){const t=e[r];let s=null,o=t>239?4:t>223?3:t>191?2:1;if(r+o<=a){let a,n,l,i;switch(o){case 1:t<128&&(s=t);break;case 2:a=e[r+1],128==(192&a)&&(i=(31&t)<<6|63&a,i>127&&(s=i));break;case 3:a=e[r+1],n=e[r+2],128==(192&a)&&128==(192&n)&&(i=(15&t)<<12|(63&a)<<6|63&n,i>2047&&(i<55296||i>57343)&&(s=i));break;case 4:a=e[r+1],n=e[r+2],l=e[r+3],128==(192&a)&&128==(192&n)&&128==(192&l)&&(i=(15&t)<<18|(63&a)<<12|(63&n)<<6|63&l,i>65535&&i<1114112&&(s=i))}}null===s?(s=65533,o=1):s>65535&&(s-=65536,n.push(s>>>10&1023|55296),s=56320|1023&s),n.push(s),r+=o}return function(e){const t=e.length;if(t<=O)return String.fromCharCode.apply(String,e);let a=\"\",n=0;for(;n<t;)a+=String.fromCharCode.apply(String,e.slice(n,n+=O));return a}(n)}t.kMaxLength=o,i.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),i.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(i.prototype,\"parent\",{enumerable:!0,get:function(){if(i.isBuffer(this))return this.buffer}}),Object.defineProperty(i.prototype,\"offset\",{enumerable:!0,get:function(){if(i.isBuffer(this))return this.byteOffset}}),i.poolSize=8192,i.from=function(e,t,a){return c(e,t,a)},Object.setPrototypeOf(i.prototype,Uint8Array.prototype),Object.setPrototypeOf(i,Uint8Array),i.alloc=function(e,t,a){return function(e,t,a){return u(e),e<=0?l(e):void 0!==t?\"string\"==typeof a?l(e).fill(t,a):l(e).fill(t):l(e)}(e,t,a)},i.allocUnsafe=function(e){return d(e)},i.allocUnsafeSlow=function(e){return d(e)},i.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==i.prototype},i.compare=function(e,t){if(G(e,Uint8Array)&&(e=i.from(e,e.offset,e.byteLength)),G(t,Uint8Array)&&(t=i.from(t,t.offset,t.byteLength)),!i.isBuffer(e)||!i.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let a=e.length,n=t.length;for(let r=0,s=Math.min(a,n);r<s;++r)if(e[r]!==t[r]){a=e[r],n=t[r];break}return a<n?-1:n<a?1:0},i.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},i.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return i.alloc(0);let a;if(void 0===t)for(t=0,a=0;a<e.length;++a)t+=e[a].length;const n=i.allocUnsafe(t);let r=0;for(a=0;a<e.length;++a){let t=e[a];if(G(t,Uint8Array))r+t.length>n.length?(i.isBuffer(t)||(t=i.from(t)),t.copy(n,r)):Uint8Array.prototype.set.call(n,t,r);else{if(!i.isBuffer(t))throw new TypeError('\"list\" argument must be an Array of Buffers');t.copy(n,r)}r+=t.length}return n},i.byteLength=h,i.prototype._isBuffer=!0,i.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<e;t+=2)y(this,t,t+1);return this},i.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)y(this,t,t+3),y(this,t+1,t+2);return this},i.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)y(this,t,t+7),y(this,t+1,t+6),y(this,t+2,t+5),y(this,t+3,t+4);return this},i.prototype.toString=function(){const e=this.length;return 0===e?\"\":0===arguments.length?j(this,0,e):g.apply(this,arguments)},i.prototype.toLocaleString=i.prototype.toString,i.prototype.equals=function(e){if(!i.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===i.compare(this,e)},i.prototype.inspect=function(){let e=\"\";const a=t.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,a).replace(/(.{2})/g,\"$1 \").trim(),this.length>a&&(e+=\" ... \"),\"<Buffer \"+e+\">\"},s&&(i.prototype[s]=i.prototype.inspect),i.prototype.compare=function(e,t,a,n,r){if(G(e,Uint8Array)&&(e=i.from(e,e.offset,e.byteLength)),!i.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===a&&(a=e?e.length:0),void 0===n&&(n=0),void 0===r&&(r=this.length),t<0||a>e.length||n<0||r>this.length)throw new RangeError(\"out of range index\");if(n>=r&&t>=a)return 0;if(n>=r)return-1;if(t>=a)return 1;if(this===e)return 0;let s=(r>>>=0)-(n>>>=0),o=(a>>>=0)-(t>>>=0);const l=Math.min(s,o),c=this.slice(n,r),u=e.slice(t,a);for(let e=0;e<l;++e)if(c[e]!==u[e]){s=c[e],o=u[e];break}return s<o?-1:o<s?1:0},i.prototype.includes=function(e,t,a){return-1!==this.indexOf(e,t,a)},i.prototype.indexOf=function(e,t,a){return v(this,e,t,a,!0)},i.prototype.lastIndexOf=function(e,t,a){return v(this,e,t,a,!1)},i.prototype.write=function(e,t,a,n){if(void 0===t)n=\"utf8\",a=this.length,t=0;else if(void 0===a&&\"string\"==typeof t)n=t,a=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(a)?(a>>>=0,void 0===n&&(n=\"utf8\")):(n=a,a=void 0)}const r=this.length-t;if((void 0===a||a>r)&&(a=r),e.length>0&&(a<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let s=!1;for(;;)switch(n){case\"hex\":return S(this,e,t,a);case\"utf8\":case\"utf-8\":return w(this,e,t,a);case\"ascii\":case\"latin1\":case\"binary\":return b(this,e,t,a);case\"base64\":return x(this,e,t,a);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _(this,e,t,a);default:if(s)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),s=!0}},i.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const O=4096;function N(e,t,a){let n=\"\";a=Math.min(e.length,a);for(let r=t;r<a;++r)n+=String.fromCharCode(127&e[r]);return n}function k(e,t,a){let n=\"\";a=Math.min(e.length,a);for(let r=t;r<a;++r)n+=String.fromCharCode(e[r]);return n}function A(e,t,a){const n=e.length;(!t||t<0)&&(t=0),(!a||a<0||a>n)&&(a=n);let r=\"\";for(let n=t;n<a;++n)r+=Y[e[n]];return r}function I(e,t,a){const n=e.slice(t,a);let r=\"\";for(let e=0;e<n.length-1;e+=2)r+=String.fromCharCode(n[e]+256*n[e+1]);return r}function R(e,t,a){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>a)throw new RangeError(\"Trying to access beyond buffer length\")}function P(e,t,a,n,r,s){if(!i.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>r||t<s)throw new RangeError('\"value\" argument is out of bounds');if(a+n>e.length)throw new RangeError(\"Index out of range\")}function T(e,t,a,n,r){$(t,n,r,e,a,7);let s=Number(t&BigInt(4294967295));e[a++]=s,s>>=8,e[a++]=s,s>>=8,e[a++]=s,s>>=8,e[a++]=s;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[a++]=o,o>>=8,e[a++]=o,o>>=8,e[a++]=o,o>>=8,e[a++]=o,a}function M(e,t,a,n,r){$(t,n,r,e,a,7);let s=Number(t&BigInt(4294967295));e[a+7]=s,s>>=8,e[a+6]=s,s>>=8,e[a+5]=s,s>>=8,e[a+4]=s;let o=Number(t>>BigInt(32)&BigInt(4294967295));return e[a+3]=o,o>>=8,e[a+2]=o,o>>=8,e[a+1]=o,o>>=8,e[a]=o,a+8}function D(e,t,a,n,r,s){if(a+n>e.length)throw new RangeError(\"Index out of range\");if(a<0)throw new RangeError(\"Index out of range\")}function L(e,t,a,n,s){return t=+t,a>>>=0,s||D(e,0,a,4),r.write(e,t,a,n,23,4),a+4}function q(e,t,a,n,s){return t=+t,a>>>=0,s||D(e,0,a,8),r.write(e,t,a,n,52,8),a+8}i.prototype.slice=function(e,t){const a=this.length;(e=~~e)<0?(e+=a)<0&&(e=0):e>a&&(e=a),(t=void 0===t?a:~~t)<0?(t+=a)<0&&(t=0):t>a&&(t=a),t<e&&(t=e);const n=this.subarray(e,t);return Object.setPrototypeOf(n,i.prototype),n},i.prototype.readUintLE=i.prototype.readUIntLE=function(e,t,a){e>>>=0,t>>>=0,a||R(e,t,this.length);let n=this[e],r=1,s=0;for(;++s<t&&(r*=256);)n+=this[e+s]*r;return n},i.prototype.readUintBE=i.prototype.readUIntBE=function(e,t,a){e>>>=0,t>>>=0,a||R(e,t,this.length);let n=this[e+--t],r=1;for(;t>0&&(r*=256);)n+=this[e+--t]*r;return n},i.prototype.readUint8=i.prototype.readUInt8=function(e,t){return e>>>=0,t||R(e,1,this.length),this[e]},i.prototype.readUint16LE=i.prototype.readUInt16LE=function(e,t){return e>>>=0,t||R(e,2,this.length),this[e]|this[e+1]<<8},i.prototype.readUint16BE=i.prototype.readUInt16BE=function(e,t){return e>>>=0,t||R(e,2,this.length),this[e]<<8|this[e+1]},i.prototype.readUint32LE=i.prototype.readUInt32LE=function(e,t){return e>>>=0,t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},i.prototype.readUint32BE=i.prototype.readUInt32BE=function(e,t){return e>>>=0,t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},i.prototype.readBigUInt64LE=X((function(e){K(e>>>=0,\"offset\");const t=this[e],a=this[e+7];void 0!==t&&void 0!==a||V(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,r=this[++e]+256*this[++e]+65536*this[++e]+a*2**24;return BigInt(n)+(BigInt(r)<<BigInt(32))})),i.prototype.readBigUInt64BE=X((function(e){K(e>>>=0,\"offset\");const t=this[e],a=this[e+7];void 0!==t&&void 0!==a||V(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],r=this[++e]*2**24+65536*this[++e]+256*this[++e]+a;return(BigInt(n)<<BigInt(32))+BigInt(r)})),i.prototype.readIntLE=function(e,t,a){e>>>=0,t>>>=0,a||R(e,t,this.length);let n=this[e],r=1,s=0;for(;++s<t&&(r*=256);)n+=this[e+s]*r;return r*=128,n>=r&&(n-=Math.pow(2,8*t)),n},i.prototype.readIntBE=function(e,t,a){e>>>=0,t>>>=0,a||R(e,t,this.length);let n=t,r=1,s=this[e+--n];for(;n>0&&(r*=256);)s+=this[e+--n]*r;return r*=128,s>=r&&(s-=Math.pow(2,8*t)),s},i.prototype.readInt8=function(e,t){return e>>>=0,t||R(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},i.prototype.readInt16LE=function(e,t){e>>>=0,t||R(e,2,this.length);const a=this[e]|this[e+1]<<8;return 32768&a?4294901760|a:a},i.prototype.readInt16BE=function(e,t){e>>>=0,t||R(e,2,this.length);const a=this[e+1]|this[e]<<8;return 32768&a?4294901760|a:a},i.prototype.readInt32LE=function(e,t){return e>>>=0,t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},i.prototype.readInt32BE=function(e,t){return e>>>=0,t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},i.prototype.readBigInt64LE=X((function(e){K(e>>>=0,\"offset\");const t=this[e],a=this[e+7];void 0!==t&&void 0!==a||V(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(a<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),i.prototype.readBigInt64BE=X((function(e){K(e>>>=0,\"offset\");const t=this[e],a=this[e+7];void 0!==t&&void 0!==a||V(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+a)})),i.prototype.readFloatLE=function(e,t){return e>>>=0,t||R(e,4,this.length),r.read(this,e,!0,23,4)},i.prototype.readFloatBE=function(e,t){return e>>>=0,t||R(e,4,this.length),r.read(this,e,!1,23,4)},i.prototype.readDoubleLE=function(e,t){return e>>>=0,t||R(e,8,this.length),r.read(this,e,!0,52,8)},i.prototype.readDoubleBE=function(e,t){return e>>>=0,t||R(e,8,this.length),r.read(this,e,!1,52,8)},i.prototype.writeUintLE=i.prototype.writeUIntLE=function(e,t,a,n){if(e=+e,t>>>=0,a>>>=0,!n){P(this,e,t,a,Math.pow(2,8*a)-1,0)}let r=1,s=0;for(this[t]=255&e;++s<a&&(r*=256);)this[t+s]=e/r&255;return t+a},i.prototype.writeUintBE=i.prototype.writeUIntBE=function(e,t,a,n){if(e=+e,t>>>=0,a>>>=0,!n){P(this,e,t,a,Math.pow(2,8*a)-1,0)}let r=a-1,s=1;for(this[t+r]=255&e;--r>=0&&(s*=256);)this[t+r]=e/s&255;return t+a},i.prototype.writeUint8=i.prototype.writeUInt8=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,1,255,0),this[t]=255&e,t+1},i.prototype.writeUint16LE=i.prototype.writeUInt16LE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeUint16BE=i.prototype.writeUInt16BE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeUint32LE=i.prototype.writeUInt32LE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},i.prototype.writeUint32BE=i.prototype.writeUInt32BE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeBigUInt64LE=X((function(e,t=0){return T(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),i.prototype.writeBigUInt64BE=X((function(e,t=0){return M(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),i.prototype.writeIntLE=function(e,t,a,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*a-1);P(this,e,t,a,n-1,-n)}let r=0,s=1,o=0;for(this[t]=255&e;++r<a&&(s*=256);)e<0&&0===o&&0!==this[t+r-1]&&(o=1),this[t+r]=(e/s>>0)-o&255;return t+a},i.prototype.writeIntBE=function(e,t,a,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*a-1);P(this,e,t,a,n-1,-n)}let r=a-1,s=1,o=0;for(this[t+r]=255&e;--r>=0&&(s*=256);)e<0&&0===o&&0!==this[t+r+1]&&(o=1),this[t+r]=(e/s>>0)-o&255;return t+a},i.prototype.writeInt8=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},i.prototype.writeInt16LE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},i.prototype.writeInt16BE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},i.prototype.writeInt32LE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},i.prototype.writeInt32BE=function(e,t,a){return e=+e,t>>>=0,a||P(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},i.prototype.writeBigInt64LE=X((function(e,t=0){return T(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),i.prototype.writeBigInt64BE=X((function(e,t=0){return M(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),i.prototype.writeFloatLE=function(e,t,a){return L(this,e,t,!0,a)},i.prototype.writeFloatBE=function(e,t,a){return L(this,e,t,!1,a)},i.prototype.writeDoubleLE=function(e,t,a){return q(this,e,t,!0,a)},i.prototype.writeDoubleBE=function(e,t,a){return q(this,e,t,!1,a)},i.prototype.copy=function(e,t,a,n){if(!i.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(a||(a=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<a&&(n=a),n===a)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(a<0||a>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),e.length-t<n-a&&(n=e.length-t+a);const r=n-a;return this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,a,n):Uint8Array.prototype.set.call(e,this.subarray(a,n),t),r},i.prototype.fill=function(e,t,a,n){if(\"string\"==typeof e){if(\"string\"==typeof t?(n=t,t=0,a=this.length):\"string\"==typeof a&&(n=a,a=this.length),void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!i.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(1===e.length){const t=e.charCodeAt(0);(\"utf8\"===n&&t<128||\"latin1\"===n)&&(e=t)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<a)throw new RangeError(\"Out of range index\");if(a<=t)return this;let r;if(t>>>=0,a=void 0===a?this.length:a>>>0,e||(e=0),\"number\"==typeof e)for(r=t;r<a;++r)this[r]=e;else{const s=i.isBuffer(e)?e:i.from(e,n),o=s.length;if(0===o)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(r=0;r<a-t;++r)this[r+t]=s[r%o]}return this};const B={};function U(e,t,a){B[e]=class extends a{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function J(e){let t=\"\",a=e.length;const n=\"-\"===e[0]?1:0;for(;a>=n+4;a-=3)t=`_${e.slice(a-3,a)}${t}`;return`${e.slice(0,a)}${t}`}function $(e,t,a,n,r,s){if(e>a||e<t){const n=\"bigint\"==typeof t?\"n\":\"\";let r;throw r=s>3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(s+1)}${n}`:`>= -(2${n} ** ${8*(s+1)-1}${n}) and < 2 ** ${8*(s+1)-1}${n}`:`>= ${t}${n} and <= ${a}${n}`,new B.ERR_OUT_OF_RANGE(\"value\",r,e)}!function(e,t,a){K(t,\"offset\"),void 0!==e[t]&&void 0!==e[t+a]||V(t,e.length-(a+1))}(n,r,s)}function K(e,t){if(\"number\"!=typeof e)throw new B.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function V(e,t,a){if(Math.floor(e)!==e)throw K(e,a),new B.ERR_OUT_OF_RANGE(a||\"offset\",\"an integer\",e);if(t<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(a||\"offset\",`>= ${a?1:0} and <= ${t}`,e)}U(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),U(\"ERR_INVALID_ARG_TYPE\",(function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`}),TypeError),U(\"ERR_OUT_OF_RANGE\",(function(e,t,a){let n=`The value of \"${e}\" is out of range.`,r=a;return Number.isInteger(a)&&Math.abs(a)>2**32?r=J(String(a)):\"bigint\"==typeof a&&(r=String(a),(a>BigInt(2)**BigInt(32)||a<-(BigInt(2)**BigInt(32)))&&(r=J(r)),r+=\"n\"),n+=` It must be ${t}. Received ${r}`,n}),RangeError);const F=/[^+/0-9A-Za-z-_]/g;function z(e,t){let a;t=t||1/0;const n=e.length;let r=null;const s=[];for(let o=0;o<n;++o){if(a=e.charCodeAt(o),a>55295&&a<57344){if(!r){if(a>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(o+1===n){(t-=3)>-1&&s.push(239,191,189);continue}r=a;continue}if(a<56320){(t-=3)>-1&&s.push(239,191,189),r=a;continue}a=65536+(r-55296<<10|a-56320)}else r&&(t-=3)>-1&&s.push(239,191,189);if(r=null,a<128){if((t-=1)<0)break;s.push(a)}else if(a<2048){if((t-=2)<0)break;s.push(a>>6|192,63&a|128)}else if(a<65536){if((t-=3)<0)break;s.push(a>>12|224,a>>6&63|128,63&a|128)}else{if(!(a<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;s.push(a>>18|240,a>>12&63|128,a>>6&63|128,63&a|128)}}return s}function W(e){return n.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(F,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function H(e,t,a,n){let r;for(r=0;r<n&&!(r+a>=t.length||r>=e.length);++r)t[r+a]=e[r];return r}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e=\"0123456789abcdef\",t=new Array(256);for(let a=0;a<16;++a){const n=16*a;for(let r=0;r<16;++r)t[n+r]=e[a]+e[r]}return t}();function X(e){return\"undefined\"==typeof BigInt?Q:e}function Q(){throw new Error(\"BigInt not supported\")}},8171:(e,t,a)=>{a(6450);var n=a(4058).Object,r=e.exports=function(e,t,a){return n.defineProperty(e,t,a)};n.defineProperty.sham&&(r.sham=!0)},4883:(e,t,a)=>{var n=a(7475),r=a(9826),s=TypeError;e.exports=function(e){if(n(e))return e;throw s(r(e)+\" is not a function\")}},6059:(e,t,a)=>{var n=a(941),r=String,s=TypeError;e.exports=function(e){if(n(e))return e;throw s(r(e)+\" is not an object\")}},2532:(e,t,a)=>{var n=a(5329),r=n({}.toString),s=n(\"\".slice);e.exports=function(e){return s(r(e),8,-1)}},2029:(e,t,a)=>{var n=a(5746),r=a(5988),s=a(1887);e.exports=n?function(e,t,a){return r.f(e,t,s(1,a))}:function(e,t,a){return e[t]=a,e}},1887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},5609:(e,t,a)=>{var n=a(1899),r=Object.defineProperty;e.exports=function(e,t){try{r(n,e,{value:t,configurable:!0,writable:!0})}catch(a){n[e]=t}return t}},5746:(e,t,a)=>{var n=a(5981);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},6616:e=>{var t=\"object\"==typeof document&&document.all,a=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:a}},1333:(e,t,a)=>{var n=a(1899),r=a(941),s=n.document,o=r(s)&&r(s.createElement);e.exports=function(e){return o?s.createElement(e):{}}},2861:e=>{e.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},3385:(e,t,a)=>{var n,r,s=a(1899),o=a(2861),l=s.process,i=s.Deno,c=l&&l.versions||i&&i.version,u=c&&c.v8;u&&(r=(n=u.split(\".\"))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!r&&o&&(!(n=o.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=o.match(/Chrome\\/(\\d+)/))&&(r=+n[1]),e.exports=r},6887:(e,t,a)=>{var n=a(1899),r=a(9730),s=a(7484),o=a(7475),l=a(9677).f,i=a(7252),c=a(4058),u=a(6843),d=a(2029),p=a(953),m=function(e){var t=function(a,n,s){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(a);case 2:return new e(a,n)}return new e(a,n,s)}return r(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var a,r,f,h,g,y,v,E,S,w=e.target,b=e.global,x=e.stat,_=e.proto,C=b?n:x?n[w]:(n[w]||{}).prototype,j=b?c:c[w]||d(c,w,{})[w],O=j.prototype;for(h in t)r=!(a=i(b?h:w+(x?\".\":\"#\")+h,e.forced))&&C&&p(C,h),y=j[h],r&&(v=e.dontCallGetSet?(S=l(C,h))&&S.value:C[h]),g=r&&v?v:t[h],r&&typeof y==typeof g||(E=e.bind&&r?u(g,n):e.wrap&&r?m(g):_&&o(g)?s(g):g,(e.sham||g&&g.sham||y&&y.sham)&&d(E,\"sham\",!0),d(j,h,E),_&&(p(c,f=w+\"Prototype\")||d(c,f,{}),d(c[f],h,g),e.real&&O&&(a||!O[h])&&d(O,h,g)))}},5981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},9730:(e,t,a)=>{var n=a(8285),r=Function.prototype,s=r.apply,o=r.call;e.exports=\"object\"==typeof Reflect&&Reflect.apply||(n?o.bind(s):function(){return o.apply(s,arguments)})},6843:(e,t,a)=>{var n=a(7484),r=a(4883),s=a(8285),o=n(n.bind);e.exports=function(e,t){return r(e),void 0===t?e:s?o(e,t):function(){return e.apply(t,arguments)}}},8285:(e,t,a)=>{var n=a(5981);e.exports=!n((function(){var e=function(){}.bind();return\"function\"!=typeof e||e.hasOwnProperty(\"prototype\")}))},8834:(e,t,a)=>{var n=a(8285),r=Function.prototype.call;e.exports=n?r.bind(r):function(){return r.apply(r,arguments)}},7484:(e,t,a)=>{var n=a(2532),r=a(5329);e.exports=function(e){if(\"Function\"===n(e))return r(e)}},5329:(e,t,a)=>{var n=a(8285),r=Function.prototype,s=r.call,o=n&&r.bind.bind(s,s);e.exports=n?o:function(e){return function(){return s.apply(e,arguments)}}},626:(e,t,a)=>{var n=a(4058),r=a(1899),s=a(7475),o=function(e){return s(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?o(n[e])||o(r[e]):n[e]&&n[e][t]||r[e]&&r[e][t]}},4229:(e,t,a)=>{var n=a(4883),r=a(2119);e.exports=function(e,t){var a=e[t];return r(a)?void 0:n(a)}},1899:function(e,t,a){var n=function(e){return e&&e.Math==Math&&e};e.exports=n(\"object\"==typeof globalThis&&globalThis)||n(\"object\"==typeof window&&window)||n(\"object\"==typeof self&&self)||n(\"object\"==typeof a.g&&a.g)||function(){return this}()||this||Function(\"return this\")()},953:(e,t,a)=>{var n=a(5329),r=a(9678),s=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return s(r(e),t)}},2840:(e,t,a)=>{var n=a(5746),r=a(5981),s=a(1333);e.exports=!n&&!r((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},7026:(e,t,a)=>{var n=a(5329),r=a(5981),s=a(2532),o=Object,l=n(\"\".split);e.exports=r((function(){return!o(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==s(e)?l(e,\"\"):o(e)}:o},7475:(e,t,a)=>{var n=a(6616),r=n.all;e.exports=n.IS_HTMLDDA?function(e){return\"function\"==typeof e||e===r}:function(e){return\"function\"==typeof e}},7252:(e,t,a)=>{var n=a(5981),r=a(7475),s=/#|\\.prototype\\./,o=function(e,t){var a=i[l(e)];return a==u||a!=c&&(r(t)?n(t):!!t)},l=o.normalize=function(e){return String(e).replace(s,\".\").toLowerCase()},i=o.data={},c=o.NATIVE=\"N\",u=o.POLYFILL=\"P\";e.exports=o},2119:e=>{e.exports=function(e){return null==e}},941:(e,t,a)=>{var n=a(7475),r=a(6616),s=r.all;e.exports=r.IS_HTMLDDA?function(e){return\"object\"==typeof e?null!==e:n(e)||e===s}:function(e){return\"object\"==typeof e?null!==e:n(e)}},2529:e=>{e.exports=!0},6664:(e,t,a)=>{var n=a(626),r=a(7475),s=a(7046),o=a(2302),l=Object;e.exports=o?function(e){return\"symbol\"==typeof e}:function(e){var t=n(\"Symbol\");return r(t)&&s(t.prototype,l(e))}},5988:(e,t,a)=>{var n=a(5746),r=a(2840),s=a(3937),o=a(6059),l=a(3894),i=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,d=\"enumerable\",p=\"configurable\",m=\"writable\";t.f=n?s?function(e,t,a){if(o(e),t=l(t),o(a),\"function\"==typeof e&&\"prototype\"===t&&\"value\"in a&&m in a&&!a[m]){var n=u(e,t);n&&n[m]&&(e[t]=a.value,a={configurable:p in a?a[p]:n[p],enumerable:d in a?a[d]:n[d],writable:!1})}return c(e,t,a)}:c:function(e,t,a){if(o(e),t=l(t),o(a),r)try{return c(e,t,a)}catch(e){}if(\"get\"in a||\"set\"in a)throw i(\"Accessors not supported\");return\"value\"in a&&(e[t]=a.value),e}},9677:(e,t,a)=>{var n=a(5746),r=a(8834),s=a(6760),o=a(1887),l=a(4529),i=a(3894),c=a(953),u=a(2840),d=Object.getOwnPropertyDescriptor;t.f=n?d:function(e,t){if(e=l(e),t=i(t),u)try{return d(e,t)}catch(e){}if(c(e,t))return o(!r(s.f,e,t),e[t])}},7046:(e,t,a)=>{var n=a(5329);e.exports=n({}.isPrototypeOf)},6760:(e,t)=>{var a={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,r=n&&!a.call({1:2},1);t.f=r?function(e){var t=n(this,e);return!!t&&t.enumerable}:a},9811:(e,t,a)=>{var n=a(8834),r=a(7475),s=a(941),o=TypeError;e.exports=function(e,t){var a,l;if(\"string\"===t&&r(a=e.toString)&&!s(l=n(a,e)))return l;if(r(a=e.valueOf)&&!s(l=n(a,e)))return l;if(\"string\"!==t&&r(a=e.toString)&&!s(l=n(a,e)))return l;throw o(\"Can't convert object to primitive value\")}},4058:e=>{e.exports={}},8219:(e,t,a)=>{var n=a(2119),r=TypeError;e.exports=function(e){if(n(e))throw r(\"Can't call method on \"+e);return e}},3030:(e,t,a)=>{var n=a(1899),r=a(5609),s=\"__core-js_shared__\",o=n[s]||r(s,{});e.exports=o},8726:(e,t,a)=>{var n=a(2529),r=a(3030);(e.exports=function(e,t){return r[e]||(r[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.31.0\",mode:n?\"pure\":\"global\",copyright:\"© 2014-2023 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.31.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},3405:(e,t,a)=>{var n=a(3385),r=a(5981),s=a(1899).String;e.exports=!!Object.getOwnPropertySymbols&&!r((function(){var e=Symbol();return!s(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},4529:(e,t,a)=>{var n=a(7026),r=a(8219);e.exports=function(e){return n(r(e))}},9678:(e,t,a)=>{var n=a(8219),r=Object;e.exports=function(e){return r(n(e))}},6935:(e,t,a)=>{var n=a(8834),r=a(941),s=a(6664),o=a(4229),l=a(9811),i=a(9813),c=TypeError,u=i(\"toPrimitive\");e.exports=function(e,t){if(!r(e)||s(e))return e;var a,i=o(e,u);if(i){if(void 0===t&&(t=\"default\"),a=n(i,e,t),!r(a)||s(a))return a;throw c(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),l(e,t)}},3894:(e,t,a)=>{var n=a(6935),r=a(6664);e.exports=function(e){var t=n(e,\"string\");return r(t)?t:t+\"\"}},9826:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return\"Object\"}}},9418:(e,t,a)=>{var n=a(5329),r=0,s=Math.random(),o=n(1..toString);e.exports=function(e){return\"Symbol(\"+(void 0===e?\"\":e)+\")_\"+o(++r+s,36)}},2302:(e,t,a)=>{var n=a(3405);e.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},3937:(e,t,a)=>{var n=a(5746),r=a(5981);e.exports=n&&r((function(){return 42!=Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},9813:(e,t,a)=>{var n=a(1899),r=a(8726),s=a(953),o=a(9418),l=a(3405),i=a(2302),c=n.Symbol,u=r(\"wks\"),d=i?c.for||c:c&&c.withoutSetter||o;e.exports=function(e){return s(u,e)||(u[e]=l&&s(c,e)?c[e]:d(\"Symbol.\"+e)),u[e]}},6450:(e,t,a)=>{var n=a(6887),r=a(5746),s=a(5988).f;n({target:\"Object\",stat:!0,forced:Object.defineProperty!==s,sham:!r},{defineProperty:s})},1910:(e,t,a)=>{var n=a(8171);e.exports=n},7698:(e,t,a)=>{var n=a(8764).Buffer;function r(e){return e instanceof n||e instanceof Date||e instanceof RegExp}function s(e){if(e instanceof n){var t=n.alloc?n.alloc(e.length):new n(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error(\"Unexpected situation\")}function o(e){var t=[];return e.forEach((function(e,a){\"object\"==typeof e&&null!==e?Array.isArray(e)?t[a]=o(e):r(e)?t[a]=s(e):t[a]=i({},e):t[a]=e})),t}function l(e,t){return\"__proto__\"===t?void 0:e[t]}var i=e.exports=function(){if(arguments.length<1||\"object\"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,a=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(n){\"object\"!=typeof n||null===n||Array.isArray(n)||Object.keys(n).forEach((function(c){return t=l(a,c),(e=l(n,c))===a?void 0:\"object\"!=typeof e||null===e?void(a[c]=e):Array.isArray(e)?void(a[c]=o(e)):r(e)?void(a[c]=s(e)):\"object\"!=typeof t||null===t||Array.isArray(t)?void(a[c]=i({},e)):void(a[c]=i(t,e))}))})),a}},7187:e=>{var t,a=\"object\"==typeof Reflect?Reflect:null,n=a&&\"function\"==typeof a.apply?a.apply:function(e,t,a){return Function.prototype.apply.call(e,t,a)};t=a&&\"function\"==typeof a.ownKeys?a.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var r=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(a,n){function r(a){e.removeListener(t,s),n(a)}function s(){\"function\"==typeof e.removeListener&&e.removeListener(\"error\",r),a([].slice.call(arguments))}h(e,t,s,{once:!0}),\"error\"!==t&&function(e,t,a){\"function\"==typeof e.on&&h(e,\"error\",t,a)}(e,r,{once:!0})}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var o=10;function l(e){if(\"function\"!=typeof e)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof e)}function i(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function c(e,t,a,n){var r,s,o,c;if(l(a),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit(\"newListener\",t,a.listener?a.listener:a),s=e._events),o=s[t]),void 0===o)o=s[t]=a,++e._eventsCount;else if(\"function\"==typeof o?o=s[t]=n?[a,o]:[o,a]:n?o.unshift(a):o.push(a),(r=i(e))>0&&o.length>r&&!o.warned){o.warned=!0;var u=new Error(\"Possible EventEmitter memory leak detected. \"+o.length+\" \"+String(t)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");u.name=\"MaxListenersExceededWarning\",u.emitter=e,u.type=t,u.count=o.length,c=u,console&&console.warn&&console.warn(c)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(e,t,a){var n={fired:!1,wrapFn:void 0,target:e,type:t,listener:a},r=u.bind(n);return r.listener=a,n.wrapFn=r,r}function p(e,t,a){var n=e._events;if(void 0===n)return[];var r=n[t];return void 0===r?[]:\"function\"==typeof r?a?[r.listener||r]:[r]:a?function(e){for(var t=new Array(e.length),a=0;a<t.length;++a)t[a]=e[a].listener||e[a];return t}(r):f(r,r.length)}function m(e){var t=this._events;if(void 0!==t){var a=t[e];if(\"function\"==typeof a)return 1;if(void 0!==a)return a.length}return 0}function f(e,t){for(var a=new Array(t),n=0;n<t;++n)a[n]=e[n];return a}function h(e,t,a,n){if(\"function\"==typeof e.on)n.once?e.once(t,a):e.on(t,a);else{if(\"function\"!=typeof e.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function r(s){n.once&&e.removeEventListener(t,r),a(s)}))}}Object.defineProperty(s,\"defaultMaxListeners\",{enumerable:!0,get:function(){return o},set:function(e){if(\"number\"!=typeof e||e<0||r(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");o=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||r(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return i(this)},s.prototype.emit=function(e){for(var t=[],a=1;a<arguments.length;a++)t.push(arguments[a]);var r=\"error\"===e,s=this._events;if(void 0!==s)r=r&&void 0===s.error;else if(!r)return!1;if(r){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var l=new Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw l.context=o,l}var i=s[e];if(void 0===i)return!1;if(\"function\"==typeof i)n(i,this,t);else{var c=i.length,u=f(i,c);for(a=0;a<c;++a)n(u[a],this,t)}return!0},s.prototype.addListener=function(e,t){return c(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return c(this,e,t,!0)},s.prototype.once=function(e,t){return l(t),this.on(e,d(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return l(t),this.prependListener(e,d(this,e,t)),this},s.prototype.removeListener=function(e,t){var a,n,r,s,o;if(l(t),void 0===(n=this._events))return this;if(void 0===(a=n[e]))return this;if(a===t||a.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit(\"removeListener\",e,a.listener||t));else if(\"function\"!=typeof a){for(r=-1,s=a.length-1;s>=0;s--)if(a[s]===t||a[s].listener===t){o=a[s].listener,r=s;break}if(r<0)return this;0===r?a.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(a,r),1===a.length&&(n[e]=a[0]),void 0!==n.removeListener&&this.emit(\"removeListener\",e,o||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,a,n;if(void 0===(a=this._events))return this;if(void 0===a.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==a[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete a[e]),this;if(0===arguments.length){var r,s=Object.keys(a);for(n=0;n<s.length;++n)\"removeListener\"!==(r=s[n])&&this.removeAllListeners(r);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=a[e]))this.removeListener(e,t);else if(void 0!==t)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this},s.prototype.listeners=function(e){return p(this,e,!0)},s.prototype.rawListeners=function(e){return p(this,e,!1)},s.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},s.prototype.listenerCount=m,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},5717:e=>{\"function\"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var a=function(){};a.prototype=t.prototype,e.prototype=new a,e.prototype.constructor=e}}},4155:e=>{var t,a,n=e.exports={};function r(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function o(e){if(t===setTimeout)return setTimeout(e,0);if((t===r||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(a){try{return t.call(null,e,0)}catch(a){return t.call(this,e,0)}}}!function(){try{t=\"function\"==typeof setTimeout?setTimeout:r}catch(e){t=r}try{a=\"function\"==typeof clearTimeout?clearTimeout:s}catch(e){a=s}}();var l,i=[],c=!1,u=-1;function d(){c&&l&&(c=!1,l.length?i=l.concat(i):u=-1,i.length&&p())}function p(){if(!c){var e=o(d);c=!0;for(var t=i.length;t;){for(l=i,i=[];++u<t;)l&&l[u].run();u=-1,t=i.length}l=null,c=!1,function(e){if(a===clearTimeout)return clearTimeout(e);if((a===s||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(e);try{return a(e)}catch(t){try{return a.call(null,e)}catch(t){return a.call(this,e)}}}(e)}}function m(e,t){this.fun=e,this.array=t}function f(){}n.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var a=1;a<arguments.length;a++)t[a-1]=arguments[a];i.push(new m(e,t)),1!==i.length||c||o(p)},m.prototype.run=function(){this.fun.apply(null,this.array)},n.title=\"browser\",n.browser=!0,n.env={},n.argv=[],n.version=\"\",n.versions={},n.on=f,n.addListener=f,n.once=f,n.off=f,n.removeListener=f,n.removeAllListeners=f,n.emit=f,n.prependListener=f,n.prependOnceListener=f,n.listeners=function(e){return[]},n.binding=function(e){throw new Error(\"process.binding is not supported\")},n.cwd=function(){return\"/\"},n.chdir=function(e){throw new Error(\"process.chdir is not supported\")},n.umask=function(){return 0}},1798:(e,t,a)=>{var n=a(4155),r=65536,s=4294967295;var o=a(9509).Buffer,l=a.g.crypto||a.g.msCrypto;l&&l.getRandomValues?e.exports=function(e,t){if(e>s)throw new RangeError(\"requested too many random bytes\");var a=o.allocUnsafe(e);if(e>0)if(e>r)for(var i=0;i<e;i+=r)l.getRandomValues(a.slice(i,i+r));else l.getRandomValues(a);if(\"function\"==typeof t)return n.nextTick((function(){t(null,a)}));return a}:e.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}},4281:e=>{var t={};function a(e,a,n){n||(n=Error);var r=function(e){var t,n;function r(t,n,r){return e.call(this,function(e,t,n){return\"string\"==typeof a?a:a(e,t,n)}(t,n,r))||this}return n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r}(n);r.prototype.name=n.name,r.prototype.code=e,t[e]=r}function n(e,t){if(Array.isArray(e)){var a=e.length;return e=e.map((function(e){return String(e)})),a>2?\"one of \".concat(t,\" \").concat(e.slice(0,a-1).join(\", \"),\", or \")+e[a-1]:2===a?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}a(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),a(\"ERR_INVALID_ARG_TYPE\",(function(e,t,a){var r,s,o,l;if(\"string\"==typeof t&&(s=\"not \",t.substr(!o||o<0?0:+o,s.length)===s)?(r=\"must not be\",t=t.replace(/^not /,\"\")):r=\"must be\",function(e,t,a){return(void 0===a||a>e.length)&&(a=e.length),e.substring(a-t.length,a)===t}(e,\" argument\"))l=\"The \".concat(e,\" \").concat(r,\" \").concat(n(t,\"type\"));else{var i=function(e,t,a){return\"number\"!=typeof a&&(a=0),!(a+t.length>e.length)&&-1!==e.indexOf(t,a)}(e,\".\")?\"property\":\"argument\";l='The \"'.concat(e,'\" ').concat(i,\" \").concat(r,\" \").concat(n(t,\"type\"))}return l+=\". Received type \".concat(typeof a)}),TypeError),a(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),a(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),a(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),a(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),a(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),a(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),a(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),a(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),a(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),a(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),e.exports.q=t},6753:(e,t,a)=>{var n=a(4155),r=Object.keys||function(e){var t=[];for(var a in e)t.push(a);return t};e.exports=u;var s=a(9481),o=a(3982);a(5717)(u,s);for(var l=r(o.prototype),i=0;i<l.length;i++){var c=l[i];u.prototype[c]||(u.prototype[c]=o.prototype[c])}function u(e){if(!(this instanceof u))return new u(e);s.call(this,e),o.call(this,e),this.allowHalfOpen=!0,e&&(!1===e.readable&&(this.readable=!1),!1===e.writable&&(this.writable=!1),!1===e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",d)))}function d(){this._writableState.ended||n.nextTick(p,this)}function p(e){e.end()}Object.defineProperty(u.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(u.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(u.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(u.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}})},2725:(e,t,a)=>{e.exports=r;var n=a(4605);function r(e){if(!(this instanceof r))return new r(e);n.call(this,e)}a(5717)(r,n),r.prototype._transform=function(e,t,a){a(null,e)}},9481:(e,t,a)=>{var n,r=a(4155);e.exports=C,C.ReadableState=_;a(7187).EventEmitter;var s=function(e,t){return e.listeners(t).length},o=a(2503),l=a(8764).Buffer,i=(void 0!==a.g?a.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){};var c,u=a(4616);c=u&&u.debuglog?u.debuglog(\"stream\"):function(){};var d,p,m,f=a(7327),h=a(1195),g=a(2457).getHighWaterMark,y=a(4281).q,v=y.ERR_INVALID_ARG_TYPE,E=y.ERR_STREAM_PUSH_AFTER_EOF,S=y.ERR_METHOD_NOT_IMPLEMENTED,w=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;a(5717)(C,o);var b=h.errorOrDestroy,x=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function _(e,t,r){n=n||a(6753),e=e||{},\"boolean\"!=typeof r&&(r=t instanceof n),this.objectMode=!!e.objectMode,r&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=g(this,e,\"readableHighWaterMark\",r),this.buffer=new f,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(d||(d=a(2553).s),this.decoder=new d(e.encoding),this.encoding=e.encoding)}function C(e){if(n=n||a(6753),!(this instanceof C))return new C(e);var t=this instanceof n;this._readableState=new _(e,this,t),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),o.call(this)}function j(e,t,a,n,r){c(\"readableAddChunk\",t);var s,o=e._readableState;if(null===t)o.reading=!1,function(e,t){if(c(\"onEofChunk\"),t.ended)return;if(t.decoder){var a=t.decoder.end();a&&a.length&&(t.buffer.push(a),t.length+=t.objectMode?1:a.length)}t.ended=!0,t.sync?A(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,I(e)))}(e,o);else if(r||(s=function(e,t){var a;n=t,l.isBuffer(n)||n instanceof i||\"string\"==typeof t||void 0===t||e.objectMode||(a=new v(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],t));var n;return a}(o,t)),s)b(e,s);else if(o.objectMode||t&&t.length>0)if(\"string\"==typeof t||o.objectMode||Object.getPrototypeOf(t)===l.prototype||(t=function(e){return l.from(e)}(t)),n)o.endEmitted?b(e,new w):O(e,o,t,!0);else if(o.ended)b(e,new E);else{if(o.destroyed)return!1;o.reading=!1,o.decoder&&!a?(t=o.decoder.write(t),o.objectMode||0!==t.length?O(e,o,t,!1):R(e,o)):O(e,o,t,!1)}else n||(o.reading=!1,R(e,o));return!o.ended&&(o.length<o.highWaterMark||0===o.length)}function O(e,t,a,n){t.flowing&&0===t.length&&!t.sync?(t.awaitDrain=0,e.emit(\"data\",a)):(t.length+=t.objectMode?1:a.length,n?t.buffer.unshift(a):t.buffer.push(a),t.needReadable&&A(e)),R(e,t)}Object.defineProperty(C.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),C.prototype.destroy=h.destroy,C.prototype._undestroy=h.undestroy,C.prototype._destroy=function(e,t){t(e)},C.prototype.push=function(e,t){var a,n=this._readableState;return n.objectMode?a=!0:\"string\"==typeof e&&((t=t||n.defaultEncoding)!==n.encoding&&(e=l.from(e,t),t=\"\"),a=!0),j(this,e,t,!1,a)},C.prototype.unshift=function(e){return j(this,e,null,!0,!1)},C.prototype.isPaused=function(){return!1===this._readableState.flowing},C.prototype.setEncoding=function(e){d||(d=a(2553).s);var t=new d(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;for(var n=this._readableState.buffer.head,r=\"\";null!==n;)r+=t.write(n.data),n=n.next;return this._readableState.buffer.clear(),\"\"!==r&&this._readableState.buffer.push(r),this._readableState.length=r.length,this};var N=1073741824;function k(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=N?e=N:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function A(e){var t=e._readableState;c(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,r.nextTick(I,e))}function I(e){var t=e._readableState;c(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,L(e)}function R(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(P,e,t))}function P(e,t){for(;!t.reading&&!t.ended&&(t.length<t.highWaterMark||t.flowing&&0===t.length);){var a=t.length;if(c(\"maybeReadMore read 0\"),e.read(0),a===t.length)break}t.readingMore=!1}function T(e){var t=e._readableState;t.readableListening=e.listenerCount(\"readable\")>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function M(e){c(\"readable nexttick read 0\"),e.read(0)}function D(e,t){c(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),L(e),t.flowing&&!t.reading&&e.read(0)}function L(e){var t=e._readableState;for(c(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function q(e,t){return 0===t.length?null:(t.objectMode?a=t.buffer.shift():!e||e>=t.length?(a=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):a=t.buffer.consume(e,t.decoder),a);var a}function B(e){var t=e._readableState;c(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(U,t,e))}function U(e,t){if(c(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var a=t._writableState;(!a||a.autoDestroy&&a.finished)&&t.destroy()}}function J(e,t){for(var a=0,n=e.length;a<n;a++)if(e[a]===t)return a;return-1}C.prototype.read=function(e){c(\"read\",e),e=parseInt(e,10);var t=this._readableState,a=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?B(this):A(this),null;if(0===(e=k(e,t))&&t.ended)return 0===t.length&&B(this),null;var n,r=t.needReadable;return c(\"need readable\",r),(0===t.length||t.length-e<t.highWaterMark)&&c(\"length less than watermark\",r=!0),t.ended||t.reading?c(\"reading or ended\",r=!1):r&&(c(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=k(a,t))),null===(n=e>0?q(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),a!==e&&t.ended&&B(this)),null!==n&&this.emit(\"data\",n),n},C.prototype._read=function(e){b(this,new S(\"_read()\"))},C.prototype.pipe=function(e,t){var a=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e)}n.pipesCount+=1,c(\"pipe count=%d opts=%j\",n.pipesCount,t);var o=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?i:g;function l(t,r){c(\"onunpipe\"),t===a&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",f),e.removeListener(\"finish\",h),e.removeListener(\"drain\",u),e.removeListener(\"error\",m),e.removeListener(\"unpipe\",l),a.removeListener(\"end\",i),a.removeListener(\"end\",g),a.removeListener(\"data\",p),d=!0,!n.awaitDrain||e._writableState&&!e._writableState.needDrain||u())}function i(){c(\"onend\"),e.end()}n.endEmitted?r.nextTick(o):a.once(\"end\",o),e.on(\"unpipe\",l);var u=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,L(e))}}(a);e.on(\"drain\",u);var d=!1;function p(t){c(\"ondata\");var r=e.write(t);c(\"dest.write\",r),!1===r&&((1===n.pipesCount&&n.pipes===e||n.pipesCount>1&&-1!==J(n.pipes,e))&&!d&&(c(\"false write response, pause\",n.awaitDrain),n.awaitDrain++),a.pause())}function m(t){c(\"onerror\",t),g(),e.removeListener(\"error\",m),0===s(e,\"error\")&&b(e,t)}function f(){e.removeListener(\"finish\",h),g()}function h(){c(\"onfinish\"),e.removeListener(\"close\",f),g()}function g(){c(\"unpipe\"),a.unpipe(e)}return a.on(\"data\",p),function(e,t,a){if(\"function\"==typeof e.prependListener)return e.prependListener(t,a);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(a):e._events[t]=[a,e._events[t]]:e.on(t,a)}(e,\"error\",m),e.once(\"close\",f),e.once(\"finish\",h),e.emit(\"pipe\",a),n.flowing||(c(\"pipe resume\"),a.resume()),e},C.prototype.unpipe=function(e){var t=this._readableState,a={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,a)),this;if(!e){var n=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var s=0;s<r;s++)n[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o=J(t.pipes,e);return-1===o||(t.pipes.splice(o,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,a)),this},C.prototype.on=function(e,t){var a=o.prototype.on.call(this,e,t),n=this._readableState;return\"data\"===e?(n.readableListening=this.listenerCount(\"readable\")>0,!1!==n.flowing&&this.resume()):\"readable\"===e&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,c(\"on readable\",n.length,n.reading),n.length?A(this):n.reading||r.nextTick(M,this))),a},C.prototype.addListener=C.prototype.on,C.prototype.removeListener=function(e,t){var a=o.prototype.removeListener.call(this,e,t);return\"readable\"===e&&r.nextTick(T,this),a},C.prototype.removeAllListeners=function(e){var t=o.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||r.nextTick(T,this),t},C.prototype.resume=function(){var e=this._readableState;return e.flowing||(c(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(D,e,t))}(this,e)),e.paused=!1,this},C.prototype.pause=function(){return c(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(c(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},C.prototype.wrap=function(e){var t=this,a=this._readableState,n=!1;for(var r in e.on(\"end\",(function(){if(c(\"wrapped end\"),a.decoder&&!a.ended){var e=a.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(r){(c(\"wrapped data\"),a.decoder&&(r=a.decoder.write(r)),a.objectMode&&null==r)||(a.objectMode||r&&r.length)&&(t.push(r)||(n=!0,e.pause()))})),e)void 0===this[r]&&\"function\"==typeof e[r]&&(this[r]=function(t){return function(){return e[t].apply(e,arguments)}}(r));for(var s=0;s<x.length;s++)e.on(x[s],this.emit.bind(this,x[s]));return this._read=function(t){c(\"wrapped _read\",t),n&&(n=!1,e.resume())},this},\"function\"==typeof Symbol&&(C.prototype[Symbol.asyncIterator]=function(){return void 0===p&&(p=a(5850)),p(this)}),Object.defineProperty(C.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(C.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(C.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}}),C._fromList=q,Object.defineProperty(C.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(C.from=function(e,t){return void 0===m&&(m=a(5167)),m(C,e,t)})},4605:(e,t,a)=>{e.exports=u;var n=a(4281).q,r=n.ERR_METHOD_NOT_IMPLEMENTED,s=n.ERR_MULTIPLE_CALLBACK,o=n.ERR_TRANSFORM_ALREADY_TRANSFORMING,l=n.ERR_TRANSFORM_WITH_LENGTH_0,i=a(6753);function c(e,t){var a=this._transformState;a.transforming=!1;var n=a.writecb;if(null===n)return this.emit(\"error\",new s);a.writechunk=null,a.writecb=null,null!=t&&this.push(t),n(e);var r=this._readableState;r.reading=!1,(r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}function u(e){if(!(this instanceof u))return new u(e);i.call(this,e),this._transformState={afterTransform:c.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",d)}function d(){var e=this;\"function\"!=typeof this._flush||this._readableState.destroyed?p(this,null,null):this._flush((function(t,a){p(e,t,a)}))}function p(e,t,a){if(t)return e.emit(\"error\",t);if(null!=a&&e.push(a),e._writableState.length)throw new l;if(e._transformState.transforming)throw new o;return e.push(null)}a(5717)(u,i),u.prototype.push=function(e,t){return this._transformState.needTransform=!1,i.prototype.push.call(this,e,t)},u.prototype._transform=function(e,t,a){a(new r(\"_transform()\"))},u.prototype._write=function(e,t,a){var n=this._transformState;if(n.writecb=a,n.writechunk=e,n.writeencoding=t,!n.transforming){var r=this._readableState;(n.needTransform||r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}},u.prototype._read=function(e){var t=this._transformState;null===t.writechunk||t.transforming?t.needTransform=!0:(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform))},u.prototype._destroy=function(e,t){i.prototype._destroy.call(this,e,(function(e){t(e)}))}},3982:(e,t,a)=>{var n,r=a(4155);function s(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,a){var n=e.entry;e.entry=null;for(;n;){var r=n.callback;t.pendingcb--,r(a),n=n.next}t.corkedRequestsFree.next=e}(t,e)}}e.exports=C,C.WritableState=_;var o={deprecate:a(4927)},l=a(2503),i=a(8764).Buffer,c=(void 0!==a.g?a.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){};var u,d=a(1195),p=a(2457).getHighWaterMark,m=a(4281).q,f=m.ERR_INVALID_ARG_TYPE,h=m.ERR_METHOD_NOT_IMPLEMENTED,g=m.ERR_MULTIPLE_CALLBACK,y=m.ERR_STREAM_CANNOT_PIPE,v=m.ERR_STREAM_DESTROYED,E=m.ERR_STREAM_NULL_VALUES,S=m.ERR_STREAM_WRITE_AFTER_END,w=m.ERR_UNKNOWN_ENCODING,b=d.errorOrDestroy;function x(){}function _(e,t,o){n=n||a(6753),e=e||{},\"boolean\"!=typeof o&&(o=t instanceof n),this.objectMode=!!e.objectMode,o&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=p(this,e,\"writableHighWaterMark\",o),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var l=!1===e.decodeStrings;this.decodeStrings=!l,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var a=e._writableState,n=a.sync,s=a.writecb;if(\"function\"!=typeof s)throw new g;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(a),t)!function(e,t,a,n,s){--t.pendingcb,a?(r.nextTick(s,n),r.nextTick(I,e,t),e._writableState.errorEmitted=!0,b(e,n)):(s(n),e._writableState.errorEmitted=!0,b(e,n),I(e,t))}(e,a,n,t,s);else{var o=k(a)||e.destroyed;o||a.corked||a.bufferProcessing||!a.bufferedRequest||N(e,a),n?r.nextTick(O,e,a,o,s):O(e,a,o,s)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function C(e){var t=this instanceof(n=n||a(6753));if(!t&&!u.call(C,this))return new C(e);this._writableState=new _(e,this,t),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),l.call(this)}function j(e,t,a,n,r,s,o){t.writelen=n,t.writecb=o,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new v(\"write\")):a?e._writev(r,t.onwrite):e._write(r,s,t.onwrite),t.sync=!1}function O(e,t,a,n){a||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),I(e,t)}function N(e,t){t.bufferProcessing=!0;var a=t.bufferedRequest;if(e._writev&&a&&a.next){var n=t.bufferedRequestCount,r=new Array(n),o=t.corkedRequestsFree;o.entry=a;for(var l=0,i=!0;a;)r[l]=a,a.isBuf||(i=!1),a=a.next,l+=1;r.allBuffers=i,j(e,t,!0,t.length,r,\"\",o.finish),t.pendingcb++,t.lastBufferedRequest=null,o.next?(t.corkedRequestsFree=o.next,o.next=null):t.corkedRequestsFree=new s(t),t.bufferedRequestCount=0}else{for(;a;){var c=a.chunk,u=a.encoding,d=a.callback;if(j(e,t,!1,t.objectMode?1:c.length,c,u,d),a=a.next,t.bufferedRequestCount--,t.writing)break}null===a&&(t.lastBufferedRequest=null)}t.bufferedRequest=a,t.bufferProcessing=!1}function k(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function A(e,t){e._final((function(a){t.pendingcb--,a&&b(e,a),t.prefinished=!0,e.emit(\"prefinish\"),I(e,t)}))}function I(e,t){var a=k(t);if(a&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit(\"prefinish\")):(t.pendingcb++,t.finalCalled=!0,r.nextTick(A,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"),t.autoDestroy))){var n=e._readableState;(!n||n.autoDestroy&&n.endEmitted)&&e.destroy()}return a}a(5717)(C,l),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,\"buffer\",{get:o.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(C,Symbol.hasInstance,{value:function(e){return!!u.call(this,e)||this===C&&(e&&e._writableState instanceof _)}})):u=function(e){return e instanceof this},C.prototype.pipe=function(){b(this,new y)},C.prototype.write=function(e,t,a){var n,s=this._writableState,o=!1,l=!s.objectMode&&(n=e,i.isBuffer(n)||n instanceof c);return l&&!i.isBuffer(e)&&(e=function(e){return i.from(e)}(e)),\"function\"==typeof t&&(a=t,t=null),l?t=\"buffer\":t||(t=s.defaultEncoding),\"function\"!=typeof a&&(a=x),s.ending?function(e,t){var a=new S;b(e,a),r.nextTick(t,a)}(this,a):(l||function(e,t,a,n){var s;return null===a?s=new E:\"string\"==typeof a||t.objectMode||(s=new f(\"chunk\",[\"string\",\"Buffer\"],a)),!s||(b(e,s),r.nextTick(n,s),!1)}(this,s,e,a))&&(s.pendingcb++,o=function(e,t,a,n,r,s){if(!a){var o=function(e,t,a){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=i.from(t,a));return t}(t,n,r);n!==o&&(a=!0,r=\"buffer\",n=o)}var l=t.objectMode?1:n.length;t.length+=l;var c=t.length<t.highWaterMark;c||(t.needDrain=!0);if(t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:r,isBuf:a,callback:s,next:null},u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else j(e,t,!1,l,n,r,s);return c}(this,s,l,e,t,a)),o},C.prototype.cork=function(){this._writableState.corked++},C.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||N(this,e))},C.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new w(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(C.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(C.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),C.prototype._write=function(e,t,a){a(new h(\"_write()\"))},C.prototype._writev=null,C.prototype.end=function(e,t,a){var n=this._writableState;return\"function\"==typeof e?(a=e,e=null,t=null):\"function\"==typeof t&&(a=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||function(e,t,a){t.ending=!0,I(e,t),a&&(t.finished?r.nextTick(a):e.once(\"finish\",a));t.ended=!0,e.writable=!1}(this,n,a),this},Object.defineProperty(C.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(C.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),C.prototype.destroy=d.destroy,C.prototype._undestroy=d.undestroy,C.prototype._destroy=function(e,t){t(e)}},5850:(e,t,a)=>{var n,r=a(4155);function s(e,t,a){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||\"default\");if(\"object\"!=typeof n)return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var o=a(8610),l=Symbol(\"lastResolve\"),i=Symbol(\"lastReject\"),c=Symbol(\"error\"),u=Symbol(\"ended\"),d=Symbol(\"lastPromise\"),p=Symbol(\"handlePromise\"),m=Symbol(\"stream\");function f(e,t){return{value:e,done:t}}function h(e){var t=e[l];if(null!==t){var a=e[m].read();null!==a&&(e[d]=null,e[l]=null,e[i]=null,t(f(a,!1)))}}function g(e){r.nextTick(h,e)}var y=Object.getPrototypeOf((function(){})),v=Object.setPrototypeOf((s(n={get stream(){return this[m]},next:function(){var e=this,t=this[c];if(null!==t)return Promise.reject(t);if(this[u])return Promise.resolve(f(void 0,!0));if(this[m].destroyed)return new Promise((function(t,a){r.nextTick((function(){e[c]?a(e[c]):t(f(void 0,!0))}))}));var a,n=this[d];if(n)a=new Promise(function(e,t){return function(a,n){e.then((function(){t[u]?a(f(void 0,!0)):t[p](a,n)}),n)}}(n,this));else{var s=this[m].read();if(null!==s)return Promise.resolve(f(s,!1));a=new Promise(this[p])}return this[d]=a,a}},Symbol.asyncIterator,(function(){return this})),s(n,\"return\",(function(){var e=this;return new Promise((function(t,a){e[m].destroy(null,(function(e){e?a(e):t(f(void 0,!0))}))}))})),n),y);e.exports=function(e){var t,a=Object.create(v,(s(t={},m,{value:e,writable:!0}),s(t,l,{value:null,writable:!0}),s(t,i,{value:null,writable:!0}),s(t,c,{value:null,writable:!0}),s(t,u,{value:e._readableState.endEmitted,writable:!0}),s(t,p,{value:function(e,t){var n=a[m].read();n?(a[d]=null,a[l]=null,a[i]=null,e(f(n,!1))):(a[l]=e,a[i]=t)},writable:!0}),t));return a[d]=null,o(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=a[i];return null!==t&&(a[d]=null,a[l]=null,a[i]=null,t(e)),void(a[c]=e)}var n=a[l];null!==n&&(a[d]=null,a[l]=null,a[i]=null,n(f(void 0,!0))),a[u]=!0})),e.on(\"readable\",g.bind(null,a)),a}},7327:(e,t,a)=>{function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t,a){return(t=l(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){for(var a=0;a<t.length;a++){var n=t[a];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,l(n.key),n)}}function l(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var a=e[Symbol.toPrimitive];if(void 0!==a){var n=a.call(e,t||\"default\");if(\"object\"!=typeof n)return n;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}var i=a(8764).Buffer,c=a(2361).inspect,u=c&&c.custom||\"inspect\";e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}var t,a,n;return t=e,(a=[{key:\"push\",value:function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,a=\"\"+t.data;t=t.next;)a+=e+t.data;return a}},{key:\"concat\",value:function(e){if(0===this.length)return i.alloc(0);for(var t,a,n,r=i.allocUnsafe(e>>>0),s=this.head,o=0;s;)t=s.data,a=r,n=o,i.prototype.copy.call(t,a,n),o+=s.data.length,s=s.next;return r}},{key:\"consume\",value:function(e,t){var a;return e<this.head.data.length?(a=this.head.data.slice(0,e),this.head.data=this.head.data.slice(e)):a=e===this.head.data.length?this.shift():t?this._getString(e):this._getBuffer(e),a}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(e){var t=this.head,a=1,n=t.data;for(e-=n.length;t=t.next;){var r=t.data,s=e>r.length?r.length:e;if(s===r.length?n+=r:n+=r.slice(0,e),0==(e-=s)){s===r.length?(++a,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=r.slice(s));break}++a}return this.length-=a,n}},{key:\"_getBuffer\",value:function(e){var t=i.allocUnsafe(e),a=this.head,n=1;for(a.data.copy(t),e-=a.data.length;a=a.next;){var r=a.data,s=e>r.length?r.length:e;if(r.copy(t,t.length-e,0,s),0==(e-=s)){s===r.length?(++n,a.next?this.head=a.next:this.head=this.tail=null):(this.head=a,a.data=r.slice(s));break}++n}return this.length-=n,t}},{key:u,value:function(e,t){return c(this,r(r({},t),{},{depth:0,customInspect:!1}))}}])&&o(t.prototype,a),n&&o(t,n),Object.defineProperty(t,\"prototype\",{writable:!1}),e}()},1195:(e,t,a)=>{var n=a(4155);function r(e,t){o(e,t),s(e)}function s(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function o(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,t){var a=this,l=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return l||i?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,n.nextTick(o,this,e)):n.nextTick(o,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?a._writableState?a._writableState.errorEmitted?n.nextTick(s,a):(a._writableState.errorEmitted=!0,n.nextTick(r,a,e)):n.nextTick(r,a,e):t?(n.nextTick(s,a),t(e)):n.nextTick(s,a)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var a=e._readableState,n=e._writableState;a&&a.autoDestroy||n&&n.autoDestroy?e.destroy(t):e.emit(\"error\",t)}}},8610:(e,t,a)=>{var n=a(4281).q.ERR_STREAM_PREMATURE_CLOSE;function r(){}e.exports=function e(t,a,s){if(\"function\"==typeof a)return e(t,null,a);a||(a={}),s=function(e){var t=!1;return function(){if(!t){t=!0;for(var a=arguments.length,n=new Array(a),r=0;r<a;r++)n[r]=arguments[r];e.apply(this,n)}}}(s||r);var o=a.readable||!1!==a.readable&&t.readable,l=a.writable||!1!==a.writable&&t.writable,i=function(){t.writable||u()},c=t._writableState&&t._writableState.finished,u=function(){l=!1,c=!0,o||s.call(t)},d=t._readableState&&t._readableState.endEmitted,p=function(){o=!1,d=!0,l||s.call(t)},m=function(e){s.call(t,e)},f=function(){var e;return o&&!d?(t._readableState&&t._readableState.ended||(e=new n),s.call(t,e)):l&&!c?(t._writableState&&t._writableState.ended||(e=new n),s.call(t,e)):void 0},h=function(){t.req.on(\"finish\",u)};return!function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?l&&!t._writableState&&(t.on(\"end\",i),t.on(\"close\",i)):(t.on(\"complete\",u),t.on(\"abort\",f),t.req?h():t.on(\"request\",h)),t.on(\"end\",p),t.on(\"finish\",u),!1!==a.error&&t.on(\"error\",m),t.on(\"close\",f),function(){t.removeListener(\"complete\",u),t.removeListener(\"abort\",f),t.removeListener(\"request\",h),t.req&&t.req.removeListener(\"finish\",u),t.removeListener(\"end\",i),t.removeListener(\"close\",i),t.removeListener(\"finish\",u),t.removeListener(\"end\",p),t.removeListener(\"error\",m),t.removeListener(\"close\",f)}}},5167:e=>{e.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},9946:(e,t,a)=>{var n;var r=a(4281).q,s=r.ERR_MISSING_ARGS,o=r.ERR_STREAM_DESTROYED;function l(e){if(e)throw e}function i(e){e()}function c(e,t){return e.pipe(t)}e.exports=function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];var u,d=function(e){return e.length?\"function\"!=typeof e[e.length-1]?l:e.pop():l}(t);if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new s(\"streams\");var p=t.map((function(e,r){var s=r<t.length-1;return function(e,t,r,s){s=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(s);var l=!1;e.on(\"close\",(function(){l=!0})),void 0===n&&(n=a(8610)),n(e,{readable:t,writable:r},(function(e){if(e)return s(e);l=!0,s()}));var i=!1;return function(t){if(!l&&!i)return i=!0,function(e){return e.setHeader&&\"function\"==typeof e.abort}(e)?e.abort():\"function\"==typeof e.destroy?e.destroy():void s(t||new o(\"pipe\"))}}(e,s,r>0,(function(e){u||(u=e),e&&p.forEach(i),s||(p.forEach(i),d(u))}))}));return t.reduce(c)}},2457:(e,t,a)=>{var n=a(4281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,a,r){var s=function(e,t,a){return null!=e.highWaterMark?e.highWaterMark:t?e[a]:null}(t,r,a);if(null!=s){if(!isFinite(s)||Math.floor(s)!==s||s<0)throw new n(r?a:\"highWaterMark\",s);return Math.floor(s)}return e.objectMode?16:16384}}},2503:(e,t,a)=>{e.exports=a(7187).EventEmitter},9509:(e,t,a)=>{var n=a(8764),r=n.Buffer;function s(e,t){for(var a in e)t[a]=e[a]}function o(e,t,a){return r(e,t,a)}r.from&&r.alloc&&r.allocUnsafe&&r.allocUnsafeSlow?e.exports=n:(s(n,t),t.Buffer=o),o.prototype=Object.create(r.prototype),s(r,o),o.from=function(e,t,a){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return r(e,t,a)},o.alloc=function(e,t,a){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=r(e);return void 0!==t?\"string\"==typeof a?n.fill(t,a):n.fill(t):n.fill(0),n},o.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return r(e)},o.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},4189:(e,t,a)=>{var n=a(9509).Buffer;function r(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}r.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=n.from(e,t));for(var a=this._block,r=this._blockSize,s=e.length,o=this._len,l=0;l<s;){for(var i=o%r,c=Math.min(s-l,r-i),u=0;u<c;u++)a[i+u]=e[l+u];l+=c,(o+=c)%r==0&&this._update(a)}return this._len+=s,this},r.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var a=8*this._len;if(a<=4294967295)this._block.writeUInt32BE(a,this._blockSize-4);else{var n=(4294967295&a)>>>0,r=(a-n)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var s=this._hash();return e?s.toString(e):s},r.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},e.exports=r},9072:(e,t,a)=>{var n=e.exports=function(e){e=e.toLowerCase();var t=n[e];if(!t)throw new Error(e+\" is not supported (we accept pull requests)\");return new t};n.sha=a(4448),n.sha1=a(8336),n.sha224=a(8432),n.sha256=a(7499),n.sha384=a(1686),n.sha512=a(7816)},4448:(e,t,a)=>{var n=a(5717),r=a(4189),s=a(9509).Buffer,o=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);function i(){this.init(),this._w=l,r.call(this,64,56)}function c(e){return e<<30|e>>>2}function u(e,t,a,n){return 0===e?t&a|~t&n:2===e?t&a|t&n|a&n:t^a^n}n(i,r),i.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},i.prototype._update=function(e){for(var t,a=this._w,n=0|this._a,r=0|this._b,s=0|this._c,l=0|this._d,i=0|this._e,d=0;d<16;++d)a[d]=e.readInt32BE(4*d);for(;d<80;++d)a[d]=a[d-3]^a[d-8]^a[d-14]^a[d-16];for(var p=0;p<80;++p){var m=~~(p/20),f=0|((t=n)<<5|t>>>27)+u(m,r,s,l)+i+a[p]+o[m];i=l,l=s,s=c(r),r=n,n=f}this._a=n+this._a|0,this._b=r+this._b|0,this._c=s+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0},i.prototype._hash=function(){var e=s.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=i},8336:(e,t,a)=>{var n=a(5717),r=a(4189),s=a(9509).Buffer,o=[1518500249,1859775393,-1894007588,-899497514],l=new Array(80);function i(){this.init(),this._w=l,r.call(this,64,56)}function c(e){return e<<5|e>>>27}function u(e){return e<<30|e>>>2}function d(e,t,a,n){return 0===e?t&a|~t&n:2===e?t&a|t&n|a&n:t^a^n}n(i,r),i.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},i.prototype._update=function(e){for(var t,a=this._w,n=0|this._a,r=0|this._b,s=0|this._c,l=0|this._d,i=0|this._e,p=0;p<16;++p)a[p]=e.readInt32BE(4*p);for(;p<80;++p)a[p]=(t=a[p-3]^a[p-8]^a[p-14]^a[p-16])<<1|t>>>31;for(var m=0;m<80;++m){var f=~~(m/20),h=c(n)+d(f,r,s,l)+i+a[m]+o[f]|0;i=l,l=s,s=u(r),r=n,n=h}this._a=n+this._a|0,this._b=r+this._b|0,this._c=s+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0},i.prototype._hash=function(){var e=s.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=i},8432:(e,t,a)=>{var n=a(5717),r=a(7499),s=a(4189),o=a(9509).Buffer,l=new Array(64);function i(){this.init(),this._w=l,s.call(this,64,56)}n(i,r),i.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},i.prototype._hash=function(){var e=o.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=i},7499:(e,t,a)=>{var n=a(5717),r=a(4189),s=a(9509).Buffer,o=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],l=new Array(64);function i(){this.init(),this._w=l,r.call(this,64,56)}function c(e,t,a){return a^e&(t^a)}function u(e,t,a){return e&t|a&(e|t)}function d(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function p(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function m(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(i,r),i.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},i.prototype._update=function(e){for(var t,a=this._w,n=0|this._a,r=0|this._b,s=0|this._c,l=0|this._d,i=0|this._e,f=0|this._f,h=0|this._g,g=0|this._h,y=0;y<16;++y)a[y]=e.readInt32BE(4*y);for(;y<64;++y)a[y]=0|(((t=a[y-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+a[y-7]+m(a[y-15])+a[y-16];for(var v=0;v<64;++v){var E=g+p(i)+c(i,f,h)+o[v]+a[v]|0,S=d(n)+u(n,r,s)|0;g=h,h=f,f=i,i=l+E|0,l=s,s=r,r=n,n=E+S|0}this._a=n+this._a|0,this._b=r+this._b|0,this._c=s+this._c|0,this._d=l+this._d|0,this._e=i+this._e|0,this._f=f+this._f|0,this._g=h+this._g|0,this._h=g+this._h|0},i.prototype._hash=function(){var e=s.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=i},1686:(e,t,a)=>{var n=a(5717),r=a(7816),s=a(4189),o=a(9509).Buffer,l=new Array(160);function i(){this.init(),this._w=l,s.call(this,128,112)}n(i,r),i.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},i.prototype._hash=function(){var e=o.allocUnsafe(48);function t(t,a,n){e.writeInt32BE(t,n),e.writeInt32BE(a,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=i},7816:(e,t,a)=>{var n=a(5717),r=a(4189),s=a(9509).Buffer,o=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],l=new Array(160);function i(){this.init(),this._w=l,r.call(this,128,112)}function c(e,t,a){return a^e&(t^a)}function u(e,t,a){return e&t|a&(e|t)}function d(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function p(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function m(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function f(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function h(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function y(e,t){return e>>>0<t>>>0?1:0}n(i,r),i.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},i.prototype._update=function(e){for(var t=this._w,a=0|this._ah,n=0|this._bh,r=0|this._ch,s=0|this._dh,l=0|this._eh,i=0|this._fh,v=0|this._gh,E=0|this._hh,S=0|this._al,w=0|this._bl,b=0|this._cl,x=0|this._dl,_=0|this._el,C=0|this._fl,j=0|this._gl,O=0|this._hl,N=0;N<32;N+=2)t[N]=e.readInt32BE(4*N),t[N+1]=e.readInt32BE(4*N+4);for(;N<160;N+=2){var k=t[N-30],A=t[N-30+1],I=m(k,A),R=f(A,k),P=h(k=t[N-4],A=t[N-4+1]),T=g(A,k),M=t[N-14],D=t[N-14+1],L=t[N-32],q=t[N-32+1],B=R+D|0,U=I+M+y(B,R)|0;U=(U=U+P+y(B=B+T|0,T)|0)+L+y(B=B+q|0,q)|0,t[N]=U,t[N+1]=B}for(var J=0;J<160;J+=2){U=t[J],B=t[J+1];var $=u(a,n,r),K=u(S,w,b),V=d(a,S),F=d(S,a),z=p(l,_),W=p(_,l),H=o[J],G=o[J+1],Z=c(l,i,v),Y=c(_,C,j),X=O+W|0,Q=E+z+y(X,O)|0;Q=(Q=(Q=Q+Z+y(X=X+Y|0,Y)|0)+H+y(X=X+G|0,G)|0)+U+y(X=X+B|0,B)|0;var ee=F+K|0,te=V+$+y(ee,F)|0;E=v,O=j,v=i,j=C,i=l,C=_,l=s+Q+y(_=x+X|0,x)|0,s=r,x=b,r=n,b=w,n=a,w=S,a=Q+te+y(S=X+ee|0,X)|0}this._al=this._al+S|0,this._bl=this._bl+w|0,this._cl=this._cl+b|0,this._dl=this._dl+x|0,this._el=this._el+_|0,this._fl=this._fl+C|0,this._gl=this._gl+j|0,this._hl=this._hl+O|0,this._ah=this._ah+a+y(this._al,S)|0,this._bh=this._bh+n+y(this._bl,w)|0,this._ch=this._ch+r+y(this._cl,b)|0,this._dh=this._dh+s+y(this._dl,x)|0,this._eh=this._eh+l+y(this._el,_)|0,this._fh=this._fh+i+y(this._fl,C)|0,this._gh=this._gh+v+y(this._gl,j)|0,this._hh=this._hh+E+y(this._hl,O)|0},i.prototype._hash=function(){var e=s.allocUnsafe(64);function t(t,a,n){e.writeInt32BE(t,n),e.writeInt32BE(a,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=i},2830:(e,t,a)=>{e.exports=r;var n=a(7187).EventEmitter;function r(){n.call(this)}a(5717)(r,n),r.Readable=a(9481),r.Writable=a(3982),r.Duplex=a(6753),r.Transform=a(4605),r.PassThrough=a(2725),r.finished=a(8610),r.pipeline=a(9946),r.Stream=r,r.prototype.pipe=function(e,t){var a=this;function r(t){e.writable&&!1===e.write(t)&&a.pause&&a.pause()}function s(){a.readable&&a.resume&&a.resume()}a.on(\"data\",r),e.on(\"drain\",s),e._isStdio||t&&!1===t.end||(a.on(\"end\",l),a.on(\"close\",i));var o=!1;function l(){o||(o=!0,e.end())}function i(){o||(o=!0,\"function\"==typeof e.destroy&&e.destroy())}function c(e){if(u(),0===n.listenerCount(this,\"error\"))throw e}function u(){a.removeListener(\"data\",r),e.removeListener(\"drain\",s),a.removeListener(\"end\",l),a.removeListener(\"close\",i),a.removeListener(\"error\",c),e.removeListener(\"error\",c),a.removeListener(\"end\",u),a.removeListener(\"close\",u),e.removeListener(\"close\",u)}return a.on(\"error\",c),e.on(\"error\",c),a.on(\"end\",u),a.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",a),e}},2553:(e,t,a)=>{var n=a(9509).Buffer,r=n.isEncoding||function(e){switch((e=\"\"+e)&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function s(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(n.isEncoding===r||!r(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=i,this.end=c,t=4;break;case\"utf8\":this.fillLast=l,t=4;break;case\"base64\":this.text=u,this.end=d,t=3;break;default:return this.write=p,void(this.end=m)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function o(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function l(e){var t=this.lastTotal-this.lastNeed,a=function(e,t,a){if(128!=(192&t[0]))return e.lastNeed=0,\"�\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\"}}(this,e);return void 0!==a?a:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function i(e,t){if((e.length-t)%2==0){var a=e.toString(\"utf16le\",t);if(a){var n=a.charCodeAt(a.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],a.slice(0,-1)}return a}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var a=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,a)}return t}function u(e,t){var a=(e.length-t)%3;return 0===a?e.toString(\"base64\",t):(this.lastNeed=3-a,this.lastTotal=3,1===a?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-a))}function d(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function p(e){return e.toString(this.encoding)}function m(e){return e&&e.length?this.write(e):\"\"}t.s=s,s.prototype.write=function(e){if(0===e.length)return\"\";var t,a;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";a=this.lastNeed,this.lastNeed=0}else a=0;return a<e.length?t?t+this.text(e,a):this.text(e,a):t||\"\"},s.prototype.end=function(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+\"�\":t},s.prototype.text=function(e,t){var a=function(e,t,a){var n=t.length-1;if(n<a)return 0;var r=o(t[n]);if(r>=0)return r>0&&(e.lastNeed=r-1),r;if(--n<a||-2===r)return 0;if(r=o(t[n]),r>=0)return r>0&&(e.lastNeed=r-2),r;if(--n<a||-2===r)return 0;if(r=o(t[n]),r>=0)return r>0&&(2===r?r=0:e.lastNeed=r-3),r;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=a;var n=e.length-(a-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},s.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},4927:(e,t,a)=>{function n(e){try{if(!a.g.localStorage)return!1}catch(e){return!1}var t=a.g.localStorage[e];return null!=t&&\"true\"===String(t).toLowerCase()}e.exports=function(e,t){if(n(\"noDeprecation\"))return e;var a=!1;return function(){if(!a){if(n(\"throwDeprecation\"))throw new Error(t);n(\"traceDeprecation\")?console.trace(t):console.warn(t),a=!0}return e.apply(this,arguments)}}},255:e=>{var t={\"&\":\"&amp;\",'\"':\"&quot;\",\"'\":\"&apos;\",\"<\":\"&lt;\",\">\":\"&gt;\"};e.exports=function(e){return e&&e.replace?e.replace(/([&\"<>'])/g,(function(e,a){return t[a]})):e}},3479:(e,t,a)=>{var n=a(4155),r=a(255),s=a(2830).Stream;function o(e,t,a){a=a||0;var n,s,l=(n=t,new Array(a||0).join(n||\"\")),i=e;if(\"object\"==typeof e&&((i=e[s=Object.keys(e)[0]])&&i._elem))return i._elem.name=s,i._elem.icount=a,i._elem.indent=t,i._elem.indents=l,i._elem.interrupt=i,i._elem;var c,u=[],d=[];function p(e){Object.keys(e).forEach((function(t){u.push(function(e,t){return e+'=\"'+r(t)+'\"'}(t,e[t]))}))}switch(typeof i){case\"object\":if(null===i)break;i._attr&&p(i._attr),i._cdata&&d.push((\"<![CDATA[\"+i._cdata).replace(/\\]\\]>/g,\"]]]]><![CDATA[>\")+\"]]>\"),i.forEach&&(c=!1,d.push(\"\"),i.forEach((function(e){\"object\"==typeof e?\"_attr\"==Object.keys(e)[0]?p(e._attr):d.push(o(e,t,a+1)):(d.pop(),c=!0,d.push(r(e)))})),c||d.push(\"\"));break;default:d.push(r(i))}return{name:s,interrupt:!1,attributes:u,content:d,icount:a,indents:l,indent:t}}function l(e,t,a){if(\"object\"!=typeof t)return e(!1,t);var n=t.interrupt?1:t.content.length;function r(){for(;t.content.length;){var r=t.content.shift();if(void 0!==r){if(s(r))return;l(e,r)}}e(!1,(n>1?t.indents:\"\")+(t.name?\"</\"+t.name+\">\":\"\")+(t.indent&&!a?\"\\n\":\"\")),a&&a()}function s(t){return!!t.interrupt&&(t.interrupt.append=e,t.interrupt.end=r,t.interrupt=!1,e(!0),!0)}if(e(!1,t.indents+(t.name?\"<\"+t.name:\"\")+(t.attributes.length?\" \"+t.attributes.join(\" \"):\"\")+(n?t.name?\">\":\"\":t.name?\"/>\":\"\")+(t.indent&&n>1?\"\\n\":\"\")),!n)return e(!1,t.indent?\"\\n\":\"\");s(t)||r()}e.exports=function(e,t){\"object\"!=typeof t&&(t={indent:t});var a,r,i=t.stream?new s:null,c=\"\",u=!1,d=t.indent?!0===t.indent?\"    \":t.indent:\"\",p=!0;function m(e){p?n.nextTick(e):e()}function f(e,t){if(void 0!==t&&(c+=t),e&&!u&&(i=i||new s,u=!0),e&&u){var a=c;m((function(){i.emit(\"data\",a)})),c=\"\"}}function h(e,t){l(f,o(e,d,d?1:0),t)}function g(){if(i){var e=c;m((function(){i.emit(\"data\",e),i.emit(\"end\"),i.readable=!1,i.emit(\"close\")}))}}return m((function(){p=!1})),t.declaration&&(a=t.declaration,r={version:\"1.0\",encoding:a.encoding||\"UTF-8\"},a.standalone&&(r.standalone=a.standalone),h({\"?xml\":{_attr:r}}),c=c.replace(\"/>\",\"?>\")),e&&e.forEach?e.forEach((function(t,a){var n;a+1===e.length&&(n=g),h(t,n)})):h(e,g),i?(i.readable=!0,i):c},e.exports.element=e.exports.Element=function(){var e={_elem:o(Array.prototype.slice.call(arguments)),push:function(e){if(!this.append)throw new Error(\"not assigned to a parent!\");var t=this,a=this._elem.indent;l(this.append,o(e,a,this._elem.icount+(a?1:0)),(function(){t.append(!0)}))},close:function(e){void 0!==e&&this.push(e),this.end&&this.end()}};return e}},5102:(e,t,a)=>{var n={\"./all.js\":5308,\"./auth/actions.js\":5812,\"./auth/configs-extensions/wrap-actions.js\":3779,\"./auth/index.js\":3705,\"./auth/reducers.js\":3962,\"./auth/selectors.js\":35,\"./auth/spec-extensions/wrap-actions.js\":489,\"./auth/wrap-actions.js\":2849,\"./configs/actions.js\":714,\"./configs/helpers.js\":2256,\"./configs/index.js\":6709,\"./configs/reducers.js\":7743,\"./configs/selectors.js\":9018,\"./configs/spec-actions.js\":2698,\"./deep-linking/helpers.js\":1970,\"./deep-linking/index.js\":4980,\"./deep-linking/layout.js\":5858,\"./deep-linking/operation-tag-wrapper.jsx\":4584,\"./deep-linking/operation-wrapper.jsx\":877,\"./download-url.js\":8011,\"./err/actions.js\":4966,\"./err/error-transformers/hook.js\":6808,\"./err/error-transformers/transformers/not-of-type.js\":2392,\"./err/error-transformers/transformers/parameter-oneof.js\":1835,\"./err/index.js\":7793,\"./err/reducers.js\":3527,\"./err/selectors.js\":7667,\"./filter/index.js\":9978,\"./filter/opsFilter.js\":4309,\"./json-schema-2020-12/components/Accordion/Accordion.jsx\":7349,\"./json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":6867,\"./json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":2675,\"./json-schema-2020-12/components/icons/ChevronRight.jsx\":2260,\"./json-schema-2020-12/components/keywords/$anchor.jsx\":4922,\"./json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"./json-schema-2020-12/components/keywords/$defs.jsx\":6418,\"./json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":1338,\"./json-schema-2020-12/components/keywords/$dynamicRef.jsx\":7655,\"./json-schema-2020-12/components/keywords/$id.jsx\":3460,\"./json-schema-2020-12/components/keywords/$ref.jsx\":2348,\"./json-schema-2020-12/components/keywords/$schema.jsx\":9359,\"./json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"./json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":5253,\"./json-schema-2020-12/components/keywords/AllOf.jsx\":6457,\"./json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"./json-schema-2020-12/components/keywords/Const.jsx\":7308,\"./json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":9956,\"./json-schema-2020-12/components/keywords/Contains.jsx\":8993,\"./json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"./json-schema-2020-12/components/keywords/Default.jsx\":5148,\"./json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":4539,\"./json-schema-2020-12/components/keywords/DependentSchemas.jsx\":6076,\"./json-schema-2020-12/components/keywords/Deprecated.jsx\":6661,\"./json-schema-2020-12/components/keywords/Description/Description.jsx\":9446,\"./json-schema-2020-12/components/keywords/Else.jsx\":7207,\"./json-schema-2020-12/components/keywords/Enum/Enum.jsx\":1805,\"./json-schema-2020-12/components/keywords/If.jsx\":487,\"./json-schema-2020-12/components/keywords/Items.jsx\":9206,\"./json-schema-2020-12/components/keywords/Not.jsx\":5174,\"./json-schema-2020-12/components/keywords/OneOf.jsx\":3834,\"./json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":6746,\"./json-schema-2020-12/components/keywords/PrefixItems.jsx\":3971,\"./json-schema-2020-12/components/keywords/Properties/Properties.jsx\":5472,\"./json-schema-2020-12/components/keywords/PropertyNames.jsx\":2338,\"./json-schema-2020-12/components/keywords/ReadOnly.jsx\":6456,\"./json-schema-2020-12/components/keywords/Then.jsx\":7401,\"./json-schema-2020-12/components/keywords/Title/Title.jsx\":8137,\"./json-schema-2020-12/components/keywords/Type.jsx\":2285,\"./json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":5828,\"./json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"./json-schema-2020-12/components/keywords/WriteOnly.jsx\":5789,\"./json-schema-2020-12/context.js\":9006,\"./json-schema-2020-12/fn.js\":4121,\"./json-schema-2020-12/hoc.jsx\":5077,\"./json-schema-2020-12/hooks.js\":2603,\"./json-schema-2020-12/index.js\":7139,\"./json-schema-2020-12/prop-types.js\":6648,\"./json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"./json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":2906,\"./json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":537,\"./json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":674,\"./json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":3782,\"./json-schema-2020-12/samples-extensions/fn/class/Registry.js\":4215,\"./json-schema-2020-12/samples-extensions/fn/core/constants.js\":8338,\"./json-schema-2020-12/samples-extensions/fn/core/example.js\":3783,\"./json-schema-2020-12/samples-extensions/fn/core/merge.js\":7078,\"./json-schema-2020-12/samples-extensions/fn/core/predicates.js\":3084,\"./json-schema-2020-12/samples-extensions/fn/core/random.js\":5202,\"./json-schema-2020-12/samples-extensions/fn/core/type.js\":6276,\"./json-schema-2020-12/samples-extensions/fn/core/utils.js\":9346,\"./json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":1433,\"./json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":8509,\"./json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"./json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":4180,\"./json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":1967,\"./json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":4366,\"./json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":5037,\"./json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":4045,\"./json-schema-2020-12/samples-extensions/fn/generators/date.js\":1456,\"./json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"./json-schema-2020-12/samples-extensions/fn/generators/duration.js\":4299,\"./json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"./json-schema-2020-12/samples-extensions/fn/generators/float.js\":1890,\"./json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":9375,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":4518,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":273,\"./json-schema-2020-12/samples-extensions/fn/generators/int32.js\":7864,\"./json-schema-2020-12/samples-extensions/fn/generators/int64.js\":1726,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":8793,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":8269,\"./json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":5693,\"./json-schema-2020-12/samples-extensions/fn/generators/iri.js\":3080,\"./json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":7856,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":5652,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":4342,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":6724,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":5378,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":2974,\"./json-schema-2020-12/samples-extensions/fn/generators/password.js\":3393,\"./json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"./json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":375,\"./json-schema-2020-12/samples-extensions/fn/generators/time.js\":5243,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":4692,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":3829,\"./json-schema-2020-12/samples-extensions/fn/generators/uri.js\":2978,\"./json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":8859,\"./json-schema-2020-12/samples-extensions/fn/index.js\":8591,\"./json-schema-2020-12/samples-extensions/fn/main.js\":4277,\"./json-schema-2020-12/samples-extensions/fn/types/array.js\":8262,\"./json-schema-2020-12/samples-extensions/fn/types/boolean.js\":4108,\"./json-schema-2020-12/samples-extensions/fn/types/index.js\":3273,\"./json-schema-2020-12/samples-extensions/fn/types/integer.js\":8864,\"./json-schema-2020-12/samples-extensions/fn/types/null.js\":853,\"./json-schema-2020-12/samples-extensions/fn/types/number.js\":7742,\"./json-schema-2020-12/samples-extensions/fn/types/object.js\":6852,\"./json-schema-2020-12/samples-extensions/fn/types/string.js\":4522,\"./layout/actions.js\":5474,\"./layout/index.js\":6821,\"./layout/reducers.js\":5672,\"./layout/selectors.js\":4400,\"./layout/spec-extensions/wrap-selector.js\":8989,\"./logs/index.js\":9150,\"./oas3/actions.js\":7002,\"./oas3/auth-extensions/wrap-selectors.js\":3723,\"./oas3/components/callbacks.jsx\":3427,\"./oas3/components/http-auth.jsx\":6775,\"./oas3/components/index.js\":6467,\"./oas3/components/operation-link.jsx\":5757,\"./oas3/components/operation-servers.jsx\":6796,\"./oas3/components/request-body-editor.jsx\":5327,\"./oas3/components/request-body.jsx\":2458,\"./oas3/components/servers-container.jsx\":9928,\"./oas3/components/servers.jsx\":6617,\"./oas3/helpers.jsx\":7779,\"./oas3/index.js\":7451,\"./oas3/reducers.js\":2109,\"./oas3/selectors.js\":5065,\"./oas3/spec-extensions/selectors.js\":1741,\"./oas3/spec-extensions/wrap-selectors.js\":2044,\"./oas3/wrap-components/auth-item.jsx\":356,\"./oas3/wrap-components/index.js\":7761,\"./oas3/wrap-components/json-schema-string.jsx\":287,\"./oas3/wrap-components/markdown.jsx\":2460,\"./oas3/wrap-components/model.jsx\":3499,\"./oas3/wrap-components/online-validator-badge.js\":58,\"./oas3/wrap-components/version-stamp.jsx\":9487,\"./oas31/after-load.js\":7754,\"./oas31/components/contact.jsx\":9503,\"./oas31/components/info.jsx\":6133,\"./oas31/components/json-schema-dialect.jsx\":2562,\"./oas31/components/license.jsx\":1876,\"./oas31/components/model/model.jsx\":2718,\"./oas31/components/models/models.jsx\":263,\"./oas31/components/version-pragma-filter.jsx\":3429,\"./oas31/components/webhooks.jsx\":9508,\"./oas31/fn.js\":4380,\"./oas31/index.js\":9806,\"./oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":5989,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":9525,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"./oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":9450,\"./oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":5324,\"./oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"./oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":3995,\"./oas31/json-schema-2020-12-extensions/fn.js\":5800,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":4951,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":809,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":7536,\"./oas31/selectors.js\":4280,\"./oas31/spec-extensions/selectors.js\":9305,\"./oas31/spec-extensions/wrap-selectors.js\":2884,\"./oas31/wrap-components/contact.jsx\":7423,\"./oas31/wrap-components/info.jsx\":284,\"./oas31/wrap-components/license.jsx\":6608,\"./oas31/wrap-components/model.jsx\":7042,\"./oas31/wrap-components/models.jsx\":2914,\"./oas31/wrap-components/version-pragma-filter.jsx\":1434,\"./oas31/wrap-components/version-stamp.jsx\":1122,\"./on-complete/index.js\":8560,\"./request-snippets/fn.js\":4624,\"./request-snippets/index.js\":6575,\"./request-snippets/request-snippets.jsx\":4206,\"./request-snippets/selectors.js\":4669,\"./safe-render/components/error-boundary.jsx\":6195,\"./safe-render/components/fallback.jsx\":9403,\"./safe-render/fn.jsx\":6189,\"./safe-render/index.js\":8102,\"./samples/fn/get-json-sample-schema.js\":2846,\"./samples/fn/get-sample-schema.js\":6132,\"./samples/fn/get-xml-sample-schema.js\":1169,\"./samples/fn/get-yaml-sample-schema.js\":9431,\"./samples/fn/index.js\":9812,\"./samples/index.js\":8883,\"./spec/actions.js\":7612,\"./spec/index.js\":7038,\"./spec/reducers.js\":32,\"./spec/selectors.js\":3881,\"./spec/wrap-actions.js\":7508,\"./swagger-js/configs-wrap-actions.js\":4852,\"./swagger-js/index.js\":9430,\"./util/index.js\":8525,\"./view/fn.js\":8347,\"./view/index.js\":3420,\"./view/root-injects.jsx\":3934,\"core/plugins/all.js\":5308,\"core/plugins/auth/actions.js\":5812,\"core/plugins/auth/configs-extensions/wrap-actions.js\":3779,\"core/plugins/auth/index.js\":3705,\"core/plugins/auth/reducers.js\":3962,\"core/plugins/auth/selectors.js\":35,\"core/plugins/auth/spec-extensions/wrap-actions.js\":489,\"core/plugins/auth/wrap-actions.js\":2849,\"core/plugins/configs/actions.js\":714,\"core/plugins/configs/helpers.js\":2256,\"core/plugins/configs/index.js\":6709,\"core/plugins/configs/reducers.js\":7743,\"core/plugins/configs/selectors.js\":9018,\"core/plugins/configs/spec-actions.js\":2698,\"core/plugins/deep-linking/helpers.js\":1970,\"core/plugins/deep-linking/index.js\":4980,\"core/plugins/deep-linking/layout.js\":5858,\"core/plugins/deep-linking/operation-tag-wrapper.jsx\":4584,\"core/plugins/deep-linking/operation-wrapper.jsx\":877,\"core/plugins/download-url.js\":8011,\"core/plugins/err/actions.js\":4966,\"core/plugins/err/error-transformers/hook.js\":6808,\"core/plugins/err/error-transformers/transformers/not-of-type.js\":2392,\"core/plugins/err/error-transformers/transformers/parameter-oneof.js\":1835,\"core/plugins/err/index.js\":7793,\"core/plugins/err/reducers.js\":3527,\"core/plugins/err/selectors.js\":7667,\"core/plugins/filter/index.js\":9978,\"core/plugins/filter/opsFilter.js\":4309,\"core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx\":7349,\"core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":6867,\"core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":2675,\"core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx\":2260,\"core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx\":4922,\"core/plugins/json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"core/plugins/json-schema-2020-12/components/keywords/$defs.jsx\":6418,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":1338,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx\":7655,\"core/plugins/json-schema-2020-12/components/keywords/$id.jsx\":3460,\"core/plugins/json-schema-2020-12/components/keywords/$ref.jsx\":2348,\"core/plugins/json-schema-2020-12/components/keywords/$schema.jsx\":9359,\"core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":5253,\"core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx\":6457,\"core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"core/plugins/json-schema-2020-12/components/keywords/Const.jsx\":7308,\"core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":9956,\"core/plugins/json-schema-2020-12/components/keywords/Contains.jsx\":8993,\"core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"core/plugins/json-schema-2020-12/components/keywords/Default.jsx\":5148,\"core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":4539,\"core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx\":6076,\"core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx\":6661,\"core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx\":9446,\"core/plugins/json-schema-2020-12/components/keywords/Else.jsx\":7207,\"core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx\":1805,\"core/plugins/json-schema-2020-12/components/keywords/If.jsx\":487,\"core/plugins/json-schema-2020-12/components/keywords/Items.jsx\":9206,\"core/plugins/json-schema-2020-12/components/keywords/Not.jsx\":5174,\"core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx\":3834,\"core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":6746,\"core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx\":3971,\"core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx\":5472,\"core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx\":2338,\"core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx\":6456,\"core/plugins/json-schema-2020-12/components/keywords/Then.jsx\":7401,\"core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx\":8137,\"core/plugins/json-schema-2020-12/components/keywords/Type.jsx\":2285,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":5828,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx\":5789,\"core/plugins/json-schema-2020-12/context.js\":9006,\"core/plugins/json-schema-2020-12/fn.js\":4121,\"core/plugins/json-schema-2020-12/hoc.jsx\":5077,\"core/plugins/json-schema-2020-12/hooks.js\":2603,\"core/plugins/json-schema-2020-12/index.js\":7139,\"core/plugins/json-schema-2020-12/prop-types.js\":6648,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":2906,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":537,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":674,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":3782,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/Registry.js\":4215,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/constants.js\":8338,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/example.js\":3783,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/merge.js\":7078,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/predicates.js\":3084,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/random.js\":5202,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/type.js\":6276,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/utils.js\":9346,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":1433,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":8509,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":4180,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":1967,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":4366,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":5037,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":4045,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date.js\":1456,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/duration.js\":4299,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/float.js\":1890,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":9375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":4518,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int32.js\":7864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int64.js\":1726,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":8793,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":8269,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":5693,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri.js\":3080,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":7856,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":5652,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":4342,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":6724,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":5378,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":2974,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/password.js\":3393,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/time.js\":5243,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":4692,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":3829,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri.js\":2978,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":8859,\"core/plugins/json-schema-2020-12/samples-extensions/fn/index.js\":8591,\"core/plugins/json-schema-2020-12/samples-extensions/fn/main.js\":4277,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/array.js\":8262,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/boolean.js\":4108,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/index.js\":3273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/integer.js\":8864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/null.js\":853,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/number.js\":7742,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/object.js\":6852,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/string.js\":4522,\"core/plugins/layout/actions.js\":5474,\"core/plugins/layout/index.js\":6821,\"core/plugins/layout/reducers.js\":5672,\"core/plugins/layout/selectors.js\":4400,\"core/plugins/layout/spec-extensions/wrap-selector.js\":8989,\"core/plugins/logs/index.js\":9150,\"core/plugins/oas3/actions.js\":7002,\"core/plugins/oas3/auth-extensions/wrap-selectors.js\":3723,\"core/plugins/oas3/components/callbacks.jsx\":3427,\"core/plugins/oas3/components/http-auth.jsx\":6775,\"core/plugins/oas3/components/index.js\":6467,\"core/plugins/oas3/components/operation-link.jsx\":5757,\"core/plugins/oas3/components/operation-servers.jsx\":6796,\"core/plugins/oas3/components/request-body-editor.jsx\":5327,\"core/plugins/oas3/components/request-body.jsx\":2458,\"core/plugins/oas3/components/servers-container.jsx\":9928,\"core/plugins/oas3/components/servers.jsx\":6617,\"core/plugins/oas3/helpers.jsx\":7779,\"core/plugins/oas3/index.js\":7451,\"core/plugins/oas3/reducers.js\":2109,\"core/plugins/oas3/selectors.js\":5065,\"core/plugins/oas3/spec-extensions/selectors.js\":1741,\"core/plugins/oas3/spec-extensions/wrap-selectors.js\":2044,\"core/plugins/oas3/wrap-components/auth-item.jsx\":356,\"core/plugins/oas3/wrap-components/index.js\":7761,\"core/plugins/oas3/wrap-components/json-schema-string.jsx\":287,\"core/plugins/oas3/wrap-components/markdown.jsx\":2460,\"core/plugins/oas3/wrap-components/model.jsx\":3499,\"core/plugins/oas3/wrap-components/online-validator-badge.js\":58,\"core/plugins/oas3/wrap-components/version-stamp.jsx\":9487,\"core/plugins/oas31/after-load.js\":7754,\"core/plugins/oas31/components/contact.jsx\":9503,\"core/plugins/oas31/components/info.jsx\":6133,\"core/plugins/oas31/components/json-schema-dialect.jsx\":2562,\"core/plugins/oas31/components/license.jsx\":1876,\"core/plugins/oas31/components/model/model.jsx\":2718,\"core/plugins/oas31/components/models/models.jsx\":263,\"core/plugins/oas31/components/version-pragma-filter.jsx\":3429,\"core/plugins/oas31/components/webhooks.jsx\":9508,\"core/plugins/oas31/fn.js\":4380,\"core/plugins/oas31/index.js\":9806,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":5989,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":9525,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":9450,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":5324,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":3995,\"core/plugins/oas31/json-schema-2020-12-extensions/fn.js\":5800,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":4951,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":809,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":7536,\"core/plugins/oas31/selectors.js\":4280,\"core/plugins/oas31/spec-extensions/selectors.js\":9305,\"core/plugins/oas31/spec-extensions/wrap-selectors.js\":2884,\"core/plugins/oas31/wrap-components/contact.jsx\":7423,\"core/plugins/oas31/wrap-components/info.jsx\":284,\"core/plugins/oas31/wrap-components/license.jsx\":6608,\"core/plugins/oas31/wrap-components/model.jsx\":7042,\"core/plugins/oas31/wrap-components/models.jsx\":2914,\"core/plugins/oas31/wrap-components/version-pragma-filter.jsx\":1434,\"core/plugins/oas31/wrap-components/version-stamp.jsx\":1122,\"core/plugins/on-complete/index.js\":8560,\"core/plugins/request-snippets/fn.js\":4624,\"core/plugins/request-snippets/index.js\":6575,\"core/plugins/request-snippets/request-snippets.jsx\":4206,\"core/plugins/request-snippets/selectors.js\":4669,\"core/plugins/safe-render/components/error-boundary.jsx\":6195,\"core/plugins/safe-render/components/fallback.jsx\":9403,\"core/plugins/safe-render/fn.jsx\":6189,\"core/plugins/safe-render/index.js\":8102,\"core/plugins/samples/fn/get-json-sample-schema.js\":2846,\"core/plugins/samples/fn/get-sample-schema.js\":6132,\"core/plugins/samples/fn/get-xml-sample-schema.js\":1169,\"core/plugins/samples/fn/get-yaml-sample-schema.js\":9431,\"core/plugins/samples/fn/index.js\":9812,\"core/plugins/samples/index.js\":8883,\"core/plugins/spec/actions.js\":7612,\"core/plugins/spec/index.js\":7038,\"core/plugins/spec/reducers.js\":32,\"core/plugins/spec/selectors.js\":3881,\"core/plugins/spec/wrap-actions.js\":7508,\"core/plugins/swagger-js/configs-wrap-actions.js\":4852,\"core/plugins/swagger-js/index.js\":9430,\"core/plugins/util/index.js\":8525,\"core/plugins/view/fn.js\":8347,\"core/plugins/view/index.js\":3420,\"core/plugins/view/root-injects.jsx\":3934};function r(e){var t=s(e);return a(t)}function s(e){if(!a.o(n,e)){var t=new Error(\"Cannot find module '\"+e+\"'\");throw t.code=\"MODULE_NOT_FOUND\",t}return n[e]}r.keys=function(){return Object.keys(n)},r.resolve=s,e.exports=r,r.id=5102},2517:e=>{e.exports=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIGNsYXNzPSJsZHMtcm9sbGluZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IGJhY2tncm91bmQtcG9zaXRpb246IGluaXRpYWwgaW5pdGlhbDsgYmFja2dyb3VuZC1yZXBlYXQ6IGluaXRpYWwgaW5pdGlhbDsiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIG5nLWF0dHItc3Ryb2tlPSJ7e2NvbmZpZy5jb2xvcn19IiBuZy1hdHRyLXN0cm9rZS13aWR0aD0ie3tjb25maWcud2lkdGh9fSIgbmctYXR0ci1yPSJ7e2NvbmZpZy5yYWRpdXN9fSIgbmctYXR0ci1zdHJva2UtZGFzaGFycmF5PSJ7e2NvbmZpZy5kYXNoYXJyYXl9fSIgc3Ryb2tlPSIjNTU1NTU1IiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgY2FsY01vZGU9ImxpbmVhciIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49IjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvY2lyY2xlPjwvc3ZnPgo=\"},8898:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>G.default})},4163:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Z.default})},5527:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Y.default})},5171:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>X.default})},2954:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Q.default})},7930:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ee.default})},6145:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>te.default})},1778:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ae.default})},29:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ne.default})},2372:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>re.default})},8818:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>se.default})},5487:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>oe.default})},2565:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>le.default})},6785:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ie.default})},8136:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ce.default})},9963:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ue.default})},4350:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>de.default})},5942:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>pe.default})},313:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>me.default})},6914:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>fe.default})},1772:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>he.default})},7512:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ge.default})},7204:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ye.default})},7415:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>ve.default})},2740:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Ee.default})},374:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Se.default})},527:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>we.default})},6235:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>be.default})},3769:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>xe.default})},9651:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>_e.default})},3284:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Ce.default})},5496:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>je.default})},775:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Oe.default})},863:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Ne.default})},4780:e=>{e.exports=ke},8096:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Ae.default})},3294:e=>{e.exports=Ie},9725:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({List:()=>Re.List,Map:()=>Re.Map,OrderedMap:()=>Re.OrderedMap,Seq:()=>Re.Seq,Set:()=>Re.Set,default:()=>Re.default,fromJS:()=>Re.fromJS})},3772:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({JSON_SCHEMA:()=>Pe.JSON_SCHEMA,default:()=>Pe.default})},9908:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Te.default})},1252:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Me.default})},8747:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>De.default})},7068:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Le.default})},8646:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>qe.default})},5476:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Be.default})},841:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Ue.default})},5053:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Je.default})},2092:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>$e.default})},810:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({Component:()=>Ke.Component,PureComponent:()=>Ke.PureComponent,createContext:()=>Ke.createContext,default:()=>Ke.default,forwardRef:()=>Ke.forwardRef,useCallback:()=>Ke.useCallback,useContext:()=>Ke.useContext,useEffect:()=>Ke.useEffect,useRef:()=>Ke.useRef,useState:()=>Ke.useState})},9874:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({CopyToClipboard:()=>Ve.CopyToClipboard})},9569:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Fe.default})},9871:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({applyMiddleware:()=>ze.applyMiddleware,bindActionCreators:()=>ze.bindActionCreators,compose:()=>ze.compose,createStore:()=>ze.createStore})},3952:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({Remarkable:()=>We.Remarkable})},8639:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({createSelector:()=>He.createSelector})},8518:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({serializeError:()=>Ge.serializeError})},5013:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({opId:()=>Ze.opId})},8900:(e,t,a)=>{e.exports=(e=>{var t={};return a.d(t,e),t})({default:()=>Ye.default})},2361:()=>{},4616:()=>{},6718:(e,t,a)=>{e.exports=a(1910)}},ct={};function ut(e){var t=ct[e];if(void 0!==t)return t.exports;var a=ct[e]={exports:{}};return it[e].call(a.exports,a,a.exports,ut),a.exports}ut.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return ut.d(t,{a:t}),t},ut.d=(e,t)=>{for(var a in t)ut.o(t,a)&&!ut.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},ut.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),ut.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),ut.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var dt={};(()=>{ut.d(dt,{Z:()=>Wa});var e={};ut.r(e),ut.d(e,{Button:()=>At,Col:()=>Nt,Collapse:()=>Dt,Container:()=>jt,Input:()=>Rt,Link:()=>Tt,Row:()=>kt,Select:()=>Pt,TextArea:()=>It});var t={};ut.r(t),ut.d(t,{JsonSchemaArrayItemFile:()=>Ia,JsonSchemaArrayItemText:()=>Aa,JsonSchemaForm:()=>Oa,JsonSchema_array:()=>ka,JsonSchema_boolean:()=>Ra,JsonSchema_object:()=>Ta,JsonSchema_string:()=>Na});const a=(e=>{var t={};return ut.d(t,e),t})({default:()=>Xe.default});var n=ut(6145),r=ut(2740),s=ut(313),o=ut(7698),l=ut.n(o),i=ut(5527),c=ut(7512),u=ut(8136),d=ut(4163),p=ut(6785),m=ut(2565),f=ut(5171),h=ut(810),g=ut(9871),y=ut(9725);const v=(e=>{var t={};return ut.d(t,e),t})({combineReducers:()=>Qe.combineReducers});var E=ut(8518);const S=(e=>{var t={};return ut.d(t,e),t})({default:()=>et.default});var w=ut(4966),b=ut(7504),x=ut(6561);const _=e=>e;class C{constructor(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var a,n,r;l()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},t),this.getSystem=(0,i.default)(e=this._getSystem).call(e,this),this.store=(a=_,n=(0,y.fromJS)(this.state),r=this.getSystem,function(e,t,a){let n=[(0,x._5)(a)];const r=b.Z.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||g.compose;return(0,g.createStore)(e,t,r((0,g.applyMiddleware)(...n)))}(a,n,r)),this.buildSystem(!1),this.register(this.plugins)}getStore(){return this.store}register(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var a=j(e,this.getSystem(),this.pluginsOptions);N(this.system,a),t&&this.buildSystem();O.call(this.system,e,this.getSystem())&&this.buildSystem()}buildSystem(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,a=this.getStore().getState;this.boundSystem=(0,c.default)({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getWrappedAndBoundSelectors(a,this.getSystem),this.getStateThunks(a),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}_getSystem(){return this.boundSystem}getRootInjects(){var e,t,a;return(0,c.default)({getSystem:this.getSystem,getStore:(0,i.default)(e=this.getStore).call(e,this),getComponents:(0,i.default)(t=this.getComponents).call(t,this),getState:this.getStore().getState,getConfigs:(0,i.default)(a=this._getConfigs).call(a,this),Im:y.default,React:h.default},this.system.rootInjects||{})}_getConfigs(){return this.system.configs}getConfigs(){return{configs:this.system.configs}}setConfigs(e){this.system.configs=e}rebuildReducer(){var e;this.store.replaceReducer((e=this.system.statePlugins,function(e){var t;let a=(0,p.default)(t=(0,r.default)(e)).call(t,((t,a)=>(t[a]=function(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new y.Map,a=arguments.length>1?arguments[1]:void 0;if(!e)return t;let n=e[a.type];if(n){const e=k(n)(t,a);return null===e?t:e}return t}}(e[a]),t)),{});return(0,r.default)(a).length?(0,v.combineReducers)(a):_}((0,x.Ay)(e,(e=>e.reducers)))))}getType(e){let t=e[0].toUpperCase()+(0,u.default)(e).call(e,1);return(0,x.Q2)(this.system.statePlugins,((a,n)=>{let r=a[e];if(r)return{[n+t]:r}}))}getSelectors(){return this.getType(\"selectors\")}getActions(){let e=this.getType(\"actions\");return(0,x.Ay)(e,(e=>(0,x.Q2)(e,((e,t)=>{if((0,x.LQ)(e))return{[t]:e}}))))}getWrappedAndBoundActions(e){var t=this;let a=this.getBoundActions(e);return(0,x.Ay)(a,((e,a)=>{let n=this.system.statePlugins[(0,u.default)(a).call(a,0,-7)].wrapActions;return n?(0,x.Ay)(e,((e,a)=>{let r=n[a];return r?((0,d.default)(r)||(r=[r]),(0,p.default)(r).call(r,((e,a)=>{let n=function(){return a(e,t.getSystem())(...arguments)};if(!(0,x.LQ)(n))throw new TypeError(\"wrapActions needs to return a function that returns a new function (ie the wrapped action)\");return k(n)}),e||Function.prototype)):e})):e}))}getWrappedAndBoundSelectors(e,t){var a=this;let n=this.getBoundSelectors(e,t);return(0,x.Ay)(n,((t,n)=>{let r=[(0,u.default)(n).call(n,0,-9)],s=this.system.statePlugins[r].wrapSelectors;return s?(0,x.Ay)(t,((t,n)=>{let o=s[n];return o?((0,d.default)(o)||(o=[o]),(0,p.default)(o).call(o,((t,n)=>{let s=function(){for(var s=arguments.length,o=new Array(s),l=0;l<s;l++)o[l]=arguments[l];return n(t,a.getSystem())(e().getIn(r),...o)};if(!(0,x.LQ)(s))throw new TypeError(\"wrapSelector needs to return a function that returns a new function (ie the wrapped action)\");return s}),t||Function.prototype)):t})):t}))}getStates(e){var t;return(0,p.default)(t=(0,r.default)(this.system.statePlugins)).call(t,((t,a)=>(t[a]=e.get(a),t)),{})}getStateThunks(e){var t;return(0,p.default)(t=(0,r.default)(this.system.statePlugins)).call(t,((t,a)=>(t[a]=()=>e().get(a),t)),{})}getFn(){return{fn:this.system.fn}}getComponents(e){const t=this.system.components[e];return(0,d.default)(t)?(0,p.default)(t).call(t,((e,t)=>t(e,this.getSystem()))):void 0!==e?this.system.components[e]:this.system.components}getBoundSelectors(e,t){return(0,x.Ay)(this.getSelectors(),((a,n)=>{let r=[(0,u.default)(n).call(n,0,-9)];return(0,x.Ay)(a,(a=>function(){for(var n=arguments.length,s=new Array(n),o=0;o<n;o++)s[o]=arguments[o];let l=k(a).apply(null,[e().getIn(r),...s]);return\"function\"==typeof l&&(l=k(l)(t())),l}))}))}getBoundActions(e){e=e||this.getStore().dispatch;const t=this.getActions(),a=e=>\"function\"!=typeof e?(0,x.Ay)(e,(e=>a(e))):function(){var t=null;try{t=e(...arguments)}catch(e){t={type:w.NEW_THROWN_ERR,error:!0,payload:(0,E.serializeError)(e)}}finally{return t}};return(0,x.Ay)(t,(t=>(0,g.bindActionCreators)(a(t),e)))}getMapStateToProps(){return()=>(0,c.default)({},this.getSystem())}getMapDispatchToProps(e){return t=>l()({},this.getWrappedAndBoundActions(t),this.getFn(),e)}}function j(e,t,a){if((0,x.Kn)(e)&&!(0,x.kJ)(e))return(0,S.default)({},e);if((0,x.Wl)(e))return j(e(t),t,a);if((0,x.kJ)(e)){var n;const r=\"chain\"===a.pluginLoadType?t.getComponents():{};return(0,p.default)(n=(0,m.default)(e).call(e,(e=>j(e,t,a)))).call(n,N,r)}return{}}function O(e,t){let{hasLoaded:a}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=a;return(0,x.Kn)(e)&&!(0,x.kJ)(e)&&\"function\"==typeof e.afterLoad&&(n=!0,k(e.afterLoad).call(this,t)),(0,x.Wl)(e)?O.call(this,e(t),t,{hasLoaded:n}):(0,x.kJ)(e)?(0,m.default)(e).call(e,(e=>O.call(this,e,t,{hasLoaded:n}))):n}function N(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,x.Kn)(e))return{};if(!(0,x.Kn)(t))return e;t.wrapComponents&&((0,x.Ay)(t.wrapComponents,((a,n)=>{const r=e.components&&e.components[n];r&&(0,d.default)(r)?(e.components[n]=(0,f.default)(r).call(r,[a]),delete t.wrapComponents[n]):r&&(e.components[n]=[r,a],delete t.wrapComponents[n])})),(0,r.default)(t.wrapComponents).length||delete t.wrapComponents);const{statePlugins:a}=e;if((0,x.Kn)(a))for(let e in a){const r=a[e];if(!(0,x.Kn)(r))continue;const{wrapActions:o,wrapSelectors:l}=r;if((0,x.Kn)(o))for(let a in o){let r=o[a];var n;if((0,d.default)(r)||(r=[r],o[a]=r),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapActions&&t.statePlugins[e].wrapActions[a])t.statePlugins[e].wrapActions[a]=(0,f.default)(n=o[a]).call(n,t.statePlugins[e].wrapActions[a])}if((0,x.Kn)(l))for(let a in l){let n=l[a];var s;if((0,d.default)(n)||(n=[n],l[a]=n),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapSelectors&&t.statePlugins[e].wrapSelectors[a])t.statePlugins[e].wrapSelectors[a]=(0,f.default)(s=l[a]).call(s,t.statePlugins[e].wrapSelectors[a])}}return l()(e,t)}function k(e){let{logErrors:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"function\"!=typeof e?e:function(){try{for(var a=arguments.length,n=new Array(a),r=0;r<a;r++)n[r]=arguments[r];return e.call(this,...n)}catch(e){return t&&console.error(e),null}}}var A=ut(7793),I=ut(6821),R=ut(7038),P=ut(3420),T=ut(8883),M=ut(6575),D=ut(9150),L=ut(9430),q=ut(3705),B=ut(8525),U=ut(8011),J=ut(6709),$=ut(4980),K=ut(9978),V=ut(8560),F=ut(8102),z=ut(775),W=ut(8818),H=(ut(5053),ut(9569),ut(5013));class G extends h.PureComponent{constructor(e,t){super(e,t),(0,z.default)(this,\"toggleShown\",(()=>{let{layoutActions:e,tag:t,operationId:a,isShown:n}=this.props;const r=this.getResolvedSubtree();n||void 0!==r||this.requestResolvedSubtree(),e.show([\"operations\",t,a],!n)})),(0,z.default)(this,\"onCancelClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),(0,z.default)(this,\"onTryoutClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),(0,z.default)(this,\"onResetClick\",(e=>{const t=this.props.oas3Selectors.selectDefaultRequestBodyValue(...e);this.props.oas3Actions.setRequestBodyValue({value:t,pathMethod:e})})),(0,z.default)(this,\"onExecute\",(()=>{this.setState({executeInProgress:!0})})),(0,z.default)(this,\"getResolvedSubtree\",(()=>{const{specSelectors:e,path:t,method:a,specPath:n}=this.props;return n?e.specResolvedSubtree(n.toJS()):e.specResolvedSubtree([\"paths\",t,a])})),(0,z.default)(this,\"requestResolvedSubtree\",(()=>{const{specActions:e,path:t,method:a,specPath:n}=this.props;return n?e.requestResolvedSubtree(n.toJS()):e.requestResolvedSubtree([\"paths\",t,a])}));const{tryItOutEnabled:a}=e.getConfigs();this.state={tryItOutEnabled:!0===a||\"true\"===a,executeInProgress:!1}}mapStateToProps(e,t){const{op:a,layoutSelectors:n,getConfigs:r}=t,{docExpansion:s,deepLinking:o,displayOperationId:l,displayRequestDuration:i,supportedSubmitMethods:c}=r(),u=n.showSummary(),d=a.getIn([\"operation\",\"__originalOperationId\"])||a.getIn([\"operation\",\"operationId\"])||(0,H.opId)(a.get(\"operation\"),t.path,t.method)||a.get(\"id\"),p=[\"operations\",t.tag,d],m=o&&\"false\"!==o,f=(0,W.default)(c).call(c,t.method)>=0&&(void 0===t.allowTryItOut?t.specSelectors.allowTryItOutFor(t.path,t.method):t.allowTryItOut),h=a.getIn([\"operation\",\"security\"])||t.specSelectors.security();return{operationId:d,isDeepLinkingEnabled:m,showSummary:u,displayOperationId:l,displayRequestDuration:i,allowTryItOut:f,security:h,isAuthorized:t.authSelectors.isAuthorized(h),isShown:n.isShown(p,\"full\"===s),jumpToKey:`paths.${t.path}.${t.method}`,response:t.specSelectors.responseFor(t.path,t.method),request:t.specSelectors.requestFor(t.path,t.method)}}componentDidMount(){const{isShown:e}=this.props,t=this.getResolvedSubtree();e&&void 0===t&&this.requestResolvedSubtree()}UNSAFE_componentWillReceiveProps(e){const{response:t,isShown:a}=e,n=this.getResolvedSubtree();t!==this.props.response&&this.setState({executeInProgress:!1}),a&&void 0===n&&this.requestResolvedSubtree()}render(){let{op:e,tag:t,path:a,method:n,security:r,isAuthorized:s,operationId:o,showSummary:l,isShown:i,jumpToKey:c,allowTryItOut:u,response:d,request:p,displayOperationId:m,displayRequestDuration:f,isDeepLinkingEnabled:g,specPath:v,specSelectors:E,specActions:S,getComponent:w,getConfigs:b,layoutSelectors:x,layoutActions:_,authActions:C,authSelectors:j,oas3Actions:O,oas3Selectors:N,fn:k}=this.props;const A=w(\"operation\"),I=this.getResolvedSubtree()||(0,y.Map)(),R=(0,y.fromJS)({op:I,tag:t,path:a,summary:e.getIn([\"operation\",\"summary\"])||\"\",deprecated:I.get(\"deprecated\")||e.getIn([\"operation\",\"deprecated\"])||!1,method:n,security:r,isAuthorized:s,operationId:o,originalOperationId:I.getIn([\"operation\",\"__originalOperationId\"]),showSummary:l,isShown:i,jumpToKey:c,allowTryItOut:u,request:p,displayOperationId:m,displayRequestDuration:f,isDeepLinkingEnabled:g,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return h.default.createElement(A,{operation:R,response:d,request:p,isShown:i,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onResetClick:this.onResetClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:v,specActions:S,specSelectors:E,oas3Actions:O,oas3Selectors:N,layoutActions:_,layoutSelectors:x,authActions:C,authSelectors:j,getComponent:w,getConfigs:b,fn:k})}}(0,z.default)(G,\"defaultProps\",{showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1});class Z extends h.default.Component{getLayout(){let{getComponent:e,layoutSelectors:t}=this.props;const a=t.current(),n=e(a,!0);return n||(()=>h.default.createElement(\"h1\",null,' No layout defined for \"',a,'\" '))}render(){const e=this.getLayout();return h.default.createElement(e,null)}}Z.defaultProps={};class Y extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"close\",(()=>{let{authActions:e}=this.props;e.showDefinitions(!1)}))}render(){var e;let{authSelectors:t,authActions:a,getComponent:n,errSelectors:r,specSelectors:s,fn:{AST:o={}}}=this.props,l=t.shownDefinitions();const i=n(\"auths\");return h.default.createElement(\"div\",{className:\"dialog-ux\"},h.default.createElement(\"div\",{className:\"backdrop-ux\"}),h.default.createElement(\"div\",{className:\"modal-ux\"},h.default.createElement(\"div\",{className:\"modal-dialog-ux\"},h.default.createElement(\"div\",{className:\"modal-ux-inner\"},h.default.createElement(\"div\",{className:\"modal-ux-header\"},h.default.createElement(\"h3\",null,\"Available authorizations\"),h.default.createElement(\"button\",{type:\"button\",className:\"close-modal\",onClick:this.close},h.default.createElement(\"svg\",{width:\"20\",height:\"20\"},h.default.createElement(\"use\",{href:\"#close\",xlinkHref:\"#close\"})))),h.default.createElement(\"div\",{className:\"modal-ux-content\"},(0,m.default)(e=l.valueSeq()).call(e,((e,l)=>h.default.createElement(i,{key:l,AST:o,definitions:e,getComponent:n,errSelectors:r,authSelectors:t,authActions:a,specSelectors:s}))))))))}}class X extends h.default.Component{render(){let{isAuthorized:e,showPopup:t,onClick:a,getComponent:n}=this.props;const r=n(\"authorizationPopup\",!0);return h.default.createElement(\"div\",{className:\"auth-wrapper\"},h.default.createElement(\"button\",{className:e?\"btn authorize locked\":\"btn authorize unlocked\",onClick:a},h.default.createElement(\"span\",null,\"Authorize\"),h.default.createElement(\"svg\",{width:\"20\",height:\"20\"},h.default.createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"}))),t&&h.default.createElement(r,null))}}class Q extends h.default.Component{render(){const{authActions:e,authSelectors:t,specSelectors:a,getComponent:n}=this.props,r=a.securityDefinitions(),s=t.definitionsToAuthorize(),o=n(\"authorizeBtn\");return r?h.default.createElement(o,{onClick:()=>e.showDefinitions(s),isAuthorized:!!t.authorized().size,showPopup:!!t.shownDefinitions(),getComponent:n}):null}}class ee extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"onClick\",(e=>{e.stopPropagation();let{onClick:t}=this.props;t&&t()}))}render(){let{isAuthorized:e}=this.props;return h.default.createElement(\"button\",{className:e?\"authorization__btn locked\":\"authorization__btn unlocked\",\"aria-label\":e?\"authorization button locked\":\"authorization button unlocked\",onClick:this.onClick},h.default.createElement(\"svg\",{width:\"20\",height:\"20\"},h.default.createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"})))}}class te extends h.default.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"onAuthChange\",(e=>{let{name:t}=e;this.setState({[t]:e})})),(0,z.default)(this,\"submitAuth\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)})),(0,z.default)(this,\"logoutClick\",(e=>{e.preventDefault();let{authActions:t,definitions:a}=this.props,n=(0,m.default)(a).call(a,((e,t)=>t)).toArray();this.setState((0,p.default)(n).call(n,((e,t)=>(e[t]=\"\",e)),{})),t.logoutWithPersistOption(n)})),(0,z.default)(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),this.state={}}render(){var e;let{definitions:t,getComponent:a,authSelectors:r,errSelectors:s}=this.props;const o=a(\"AuthItem\"),l=a(\"oauth2\",!0),i=a(\"Button\");let c=r.authorized(),u=(0,n.default)(t).call(t,((e,t)=>!!c.get(t))),d=(0,n.default)(t).call(t,(e=>\"oauth2\"!==e.get(\"type\"))),p=(0,n.default)(t).call(t,(e=>\"oauth2\"===e.get(\"type\")));return h.default.createElement(\"div\",{className:\"auth-container\"},!!d.size&&h.default.createElement(\"form\",{onSubmit:this.submitAuth},(0,m.default)(d).call(d,((e,t)=>h.default.createElement(o,{key:t,schema:e,name:t,getComponent:a,onAuthChange:this.onAuthChange,authorized:c,errSelectors:s}))).toArray(),h.default.createElement(\"div\",{className:\"auth-btn-wrapper\"},d.size===u.size?h.default.createElement(i,{className:\"btn modal-btn auth\",onClick:this.logoutClick},\"Logout\"):h.default.createElement(i,{type:\"submit\",className:\"btn modal-btn auth authorize\"},\"Authorize\"),h.default.createElement(i,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\"))),p&&p.size?h.default.createElement(\"div\",null,h.default.createElement(\"div\",{className:\"scope-def\"},h.default.createElement(\"p\",null,\"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.\"),h.default.createElement(\"p\",null,\"API requires the following scopes. Select which ones you want to grant to Swagger UI.\")),(0,m.default)(e=(0,n.default)(t).call(t,(e=>\"oauth2\"===e.get(\"type\")))).call(e,((e,t)=>h.default.createElement(\"div\",{key:t},h.default.createElement(l,{authorized:c,schema:e,name:t})))).toArray()):null)}}class ae extends h.default.Component{render(){let{schema:e,name:t,getComponent:a,onAuthChange:n,authorized:r,errSelectors:s}=this.props;const o=a(\"apiKeyAuth\"),l=a(\"basicAuth\");let i;const c=e.get(\"type\");switch(c){case\"apiKey\":i=h.default.createElement(o,{key:t,schema:e,name:t,errSelectors:s,authorized:r,getComponent:a,onChange:n});break;case\"basic\":i=h.default.createElement(l,{key:t,schema:e,name:t,errSelectors:s,authorized:r,getComponent:a,onChange:n});break;default:i=h.default.createElement(\"div\",{key:t},\"Unknown security definition type \",c)}return h.default.createElement(\"div\",{key:`${t}-jump`},i)}}class ne extends h.default.Component{render(){let{error:e}=this.props,t=e.get(\"level\"),a=e.get(\"message\"),n=e.get(\"source\");return h.default.createElement(\"div\",{className:\"errors\"},h.default.createElement(\"b\",null,n,\" \",t),h.default.createElement(\"span\",null,a))}}class re extends h.default.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"onChange\",(e=>{let{onChange:t}=this.props,a=e.target.value,n=(0,c.default)({},this.state,{value:a});this.setState(n),t(n)}));let{name:a,schema:n}=this.props,r=this.getValue();this.state={name:a,schema:n,value:r}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e,t;let{schema:a,getComponent:r,errSelectors:s,name:o}=this.props;const l=r(\"Input\"),i=r(\"Row\"),c=r(\"Col\"),u=r(\"authError\"),d=r(\"Markdown\",!0),p=r(\"JumpToPath\",!0);let f=this.getValue(),g=(0,n.default)(e=s.allErrors()).call(e,(e=>e.get(\"authId\")===o));return h.default.createElement(\"div\",null,h.default.createElement(\"h4\",null,h.default.createElement(\"code\",null,o||a.get(\"name\")),\" (apiKey)\",h.default.createElement(p,{path:[\"securityDefinitions\",o]})),f&&h.default.createElement(\"h6\",null,\"Authorized\"),h.default.createElement(i,null,h.default.createElement(d,{source:a.get(\"description\")})),h.default.createElement(i,null,h.default.createElement(\"p\",null,\"Name: \",h.default.createElement(\"code\",null,a.get(\"name\")))),h.default.createElement(i,null,h.default.createElement(\"p\",null,\"In: \",h.default.createElement(\"code\",null,a.get(\"in\")))),h.default.createElement(i,null,h.default.createElement(\"label\",null,\"Value:\"),f?h.default.createElement(\"code\",null,\" ****** \"):h.default.createElement(c,null,h.default.createElement(l,{type:\"text\",onChange:this.onChange,autoFocus:!0}))),(0,m.default)(t=g.valueSeq()).call(t,((e,t)=>h.default.createElement(u,{error:e,key:t}))))}}class se extends h.default.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:a,name:n}=e.target,r=this.state.value;r[n]=a,this.setState({value:r}),t(this.state)}));let{schema:a,name:n}=this.props,r=this.getValue().username;this.state={name:n,schema:a,value:r?{username:r}:{}}}getValue(){let{authorized:e,name:t}=this.props;return e&&e.getIn([t,\"value\"])||{}}render(){var e,t;let{schema:a,getComponent:r,name:s,errSelectors:o}=this.props;const l=r(\"Input\"),i=r(\"Row\"),c=r(\"Col\"),u=r(\"authError\"),d=r(\"JumpToPath\",!0),p=r(\"Markdown\",!0);let f=this.getValue().username,g=(0,n.default)(e=o.allErrors()).call(e,(e=>e.get(\"authId\")===s));return h.default.createElement(\"div\",null,h.default.createElement(\"h4\",null,\"Basic authorization\",h.default.createElement(d,{path:[\"securityDefinitions\",s]})),f&&h.default.createElement(\"h6\",null,\"Authorized\"),h.default.createElement(i,null,h.default.createElement(p,{source:a.get(\"description\")})),h.default.createElement(i,null,h.default.createElement(\"label\",null,\"Username:\"),f?h.default.createElement(\"code\",null,\" \",f,\" \"):h.default.createElement(c,null,h.default.createElement(l,{type:\"text\",required:\"required\",name:\"username\",onChange:this.onChange,autoFocus:!0}))),h.default.createElement(i,null,h.default.createElement(\"label\",null,\"Password:\"),f?h.default.createElement(\"code\",null,\" ****** \"):h.default.createElement(c,null,h.default.createElement(l,{autoComplete:\"new-password\",name:\"password\",type:\"password\",onChange:this.onChange}))),(0,m.default)(t=g.valueSeq()).call(t,((e,t)=>h.default.createElement(u,{error:e,key:t}))))}}function oe(e){const{example:t,showValue:a,getComponent:n,getConfigs:r}=e,s=n(\"Markdown\",!0),o=n(\"highlightCode\");return t?h.default.createElement(\"div\",{className:\"example\"},t.get(\"description\")?h.default.createElement(\"section\",{className:\"example__section\"},h.default.createElement(\"div\",{className:\"example__section-header\"},\"Example Description\"),h.default.createElement(\"p\",null,h.default.createElement(s,{source:t.get(\"description\")}))):null,a&&t.has(\"value\")?h.default.createElement(\"section\",{className:\"example__section\"},h.default.createElement(\"div\",{className:\"example__section-header\"},\"Example Value\"),h.default.createElement(o,{getConfigs:r,value:(0,x.Pz)(t.get(\"value\"))})):null):null}var le=ut(6914);class ie extends h.default.PureComponent{constructor(){var e;super(...arguments),e=this,(0,z.default)(this,\"_onSelect\",(function(t){let{isSyntheticChange:a=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"function\"==typeof e.props.onSelect&&e.props.onSelect(t,{isSyntheticChange:a})})),(0,z.default)(this,\"_onDomSelect\",(e=>{if(\"function\"==typeof this.props.onSelect){const t=e.target.selectedOptions[0].getAttribute(\"value\");this._onSelect(t,{isSyntheticChange:!1})}})),(0,z.default)(this,\"getCurrentExample\",(()=>{const{examples:e,currentExampleKey:t}=this.props,a=e.get(t),n=e.keySeq().first(),r=e.get(n);return a||r||(0,le.default)({})}))}componentDidMount(){const{onSelect:e,examples:t}=this.props;if(\"function\"==typeof e){const e=t.first(),a=t.keyOf(e);this._onSelect(a,{isSyntheticChange:!0})}}UNSAFE_componentWillReceiveProps(e){const{currentExampleKey:t,examples:a}=e;if(a!==this.props.examples&&!a.has(t)){const e=a.first(),t=a.keyOf(e);this._onSelect(t,{isSyntheticChange:!0})}}render(){const{examples:e,currentExampleKey:t,isValueModified:a,isModifiedValueAvailable:n,showLabels:r}=this.props;return h.default.createElement(\"div\",{className:\"examples-select\"},r?h.default.createElement(\"span\",{className:\"examples-select__section-label\"},\"Examples: \"):null,h.default.createElement(\"select\",{className:\"examples-select-element\",onChange:this._onDomSelect,value:n&&a?\"__MODIFIED__VALUE__\":t||\"\"},n?h.default.createElement(\"option\",{value:\"__MODIFIED__VALUE__\"},\"[Modified value]\"):null,(0,m.default)(e).call(e,((e,t)=>h.default.createElement(\"option\",{key:t,value:t},e.get(\"summary\")||t))).valueSeq()))}}(0,z.default)(ie,\"defaultProps\",{examples:y.default.Map({}),onSelect:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return console.log(\"DEBUG: ExamplesSelect was not given an onSelect callback\",...t)},currentExampleKey:null,showLabels:!0});const ce=e=>y.List.isList(e)?e:(0,x.Pz)(e);class ue extends h.default.PureComponent{constructor(e){var t;super(e),t=this,(0,z.default)(this,\"_getStateForCurrentNamespace\",(()=>{const{currentNamespace:e}=this.props;return(this.state[e]||(0,y.Map)()).toObject()})),(0,z.default)(this,\"_setStateForCurrentNamespace\",(e=>{const{currentNamespace:t}=this.props;return this._setStateForNamespace(t,e)})),(0,z.default)(this,\"_setStateForNamespace\",((e,t)=>{const a=(this.state[e]||(0,y.Map)()).mergeDeep(t);return this.setState({[e]:a})})),(0,z.default)(this,\"_isCurrentUserInputSameAsExampleValue\",(()=>{const{currentUserInputValue:e}=this.props;return this._getCurrentExampleValue()===e})),(0,z.default)(this,\"_getValueForExample\",((e,t)=>{const{examples:a}=t||this.props;return ce((a||(0,y.Map)({})).getIn([e,\"value\"]))})),(0,z.default)(this,\"_getCurrentExampleValue\",(e=>{const{currentKey:t}=e||this.props;return this._getValueForExample(t,e||this.props)})),(0,z.default)(this,\"_onExamplesSelect\",(function(e){let{isSyntheticChange:a}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{onSelect:n,updateValue:r,currentUserInputValue:s,userHasEditedBody:o}=t.props,{lastUserEditedValue:l}=t._getStateForCurrentNamespace(),i=t._getValueForExample(e);if(\"__MODIFIED__VALUE__\"===e)return r(ce(l)),t._setStateForCurrentNamespace({isModifiedValueSelected:!0});if(\"function\"==typeof n){for(var c=arguments.length,u=new Array(c>2?c-2:0),d=2;d<c;d++)u[d-2]=arguments[d];n(e,{isSyntheticChange:a},...u)}t._setStateForCurrentNamespace({lastDownstreamValue:i,isModifiedValueSelected:a&&o||!!s&&s!==i}),a||\"function\"==typeof r&&r(ce(i))}));const a=this._getCurrentExampleValue();this.state={[e.currentNamespace]:(0,y.Map)({lastUserEditedValue:this.props.currentUserInputValue,lastDownstreamValue:a,isModifiedValueSelected:this.props.userHasEditedBody||this.props.currentUserInputValue!==a})}}componentWillUnmount(){this.props.setRetainRequestBodyValueFlag(!1)}UNSAFE_componentWillReceiveProps(e){const{currentUserInputValue:t,examples:a,onSelect:r,userHasEditedBody:s}=e,{lastUserEditedValue:o,lastDownstreamValue:l}=this._getStateForCurrentNamespace(),i=this._getValueForExample(e.currentKey,e),c=(0,n.default)(a).call(a,(e=>e.get(\"value\")===t||(0,x.Pz)(e.get(\"value\"))===t));if(c.size){let t;t=c.has(e.currentKey)?e.currentKey:c.keySeq().first(),r(t,{isSyntheticChange:!0})}else t!==this.props.currentUserInputValue&&t!==o&&t!==l&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(e.currentNamespace,{lastUserEditedValue:e.currentUserInputValue,isModifiedValueSelected:s||t!==i}))}render(){const{currentUserInputValue:e,examples:t,currentKey:a,getComponent:n,userHasEditedBody:r}=this.props,{lastDownstreamValue:s,lastUserEditedValue:o,isModifiedValueSelected:l}=this._getStateForCurrentNamespace(),i=n(\"ExamplesSelect\");return h.default.createElement(i,{examples:t,currentExampleKey:a,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!o&&o!==s,isValueModified:void 0!==e&&l&&e!==this._getCurrentExampleValue()||r})}}(0,z.default)(ue,\"defaultProps\",{userHasEditedBody:!1,examples:(0,y.Map)({}),currentNamespace:\"__DEFAULT__NAMESPACE__\",setRetainRequestBodyValueFlag:()=>{},onSelect:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return console.log(\"ExamplesSelectValueRetainer: no `onSelect` function was provided\",...t)},updateValue:function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];return console.log(\"ExamplesSelectValueRetainer: no `updateValue` function was provided\",...t)}});var de=ut(8898),pe=ut(5487),me=ut(2372),fe=ut(8900);class he extends h.default.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),(0,z.default)(this,\"authorize\",(()=>{let{authActions:e,errActions:t,getConfigs:a,authSelectors:n,oas3Selectors:r}=this.props,s=a(),o=n.getConfigs();t.clear({authId:name,type:\"auth\",source:\"auth\"}),function(e){let{auth:t,authActions:a,errActions:n,configs:r,authConfigs:s={},currentServer:o}=e,{schema:l,scopes:i,name:c,clientId:u}=t,p=l.get(\"flow\"),f=[];switch(p){case\"password\":return void a.authorizePassword(t);case\"application\":case\"clientCredentials\":case\"client_credentials\":return void a.authorizeApplication(t);case\"accessCode\":case\"authorizationCode\":case\"authorization_code\":f.push(\"response_type=code\");break;case\"implicit\":f.push(\"response_type=token\")}\"string\"==typeof u&&f.push(\"client_id=\"+encodeURIComponent(u));let h=r.oauth2RedirectUrl;if(void 0===h)return void n.newAuthErr({authId:c,source:\"validation\",level:\"error\",message:\"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed.\"});f.push(\"redirect_uri=\"+encodeURIComponent(h));let g=[];if((0,d.default)(i)?g=i:y.default.List.isList(i)&&(g=i.toArray()),g.length>0){let e=s.scopeSeparator||\" \";f.push(\"scope=\"+encodeURIComponent(g.join(e)))}let v=(0,x.r3)(new Date);if(f.push(\"state=\"+encodeURIComponent(v)),void 0!==s.realm&&f.push(\"realm=\"+encodeURIComponent(s.realm)),(\"authorizationCode\"===p||\"authorization_code\"===p||\"accessCode\"===p)&&s.usePkceWithAuthorizationCodeGrant){const e=(0,x.Uj)(),a=(0,x.Xb)(e);f.push(\"code_challenge=\"+a),f.push(\"code_challenge_method=S256\"),t.codeVerifier=e}let{additionalQueryStringParams:E}=s;for(let e in E){var S;void 0!==E[e]&&f.push((0,m.default)(S=[e,E[e]]).call(S,encodeURIComponent).join(\"=\"))}const w=l.get(\"authorizationUrl\");let b;b=o?(0,fe.default)((0,x.Nm)(w),o,!0).toString():(0,x.Nm)(w);let _,C=[b,f.join(\"&\")].join(-1===(0,W.default)(w).call(w,\"?\")?\"?\":\"&\");_=\"implicit\"===p?a.preAuthorizeImplicit:s.useBasicAuthenticationWithAccessCodeGrant?a.authorizeAccessCodeWithBasicAuthentication:a.authorizeAccessCodeWithFormParams,a.authPopup(C,{auth:t,state:v,redirectUrl:h,callback:_,errCb:n.newAuthErr})}({auth:this.state,currentServer:r.serverEffectiveValue(r.selectedServer()),authActions:e,errActions:t,configs:s,authConfigs:o})})),(0,z.default)(this,\"onScopeChange\",(e=>{var t,a;let{target:r}=e,{checked:s}=r,o=r.dataset.value;if(s&&-1===(0,W.default)(t=this.state.scopes).call(t,o)){var l;let e=(0,f.default)(l=this.state.scopes).call(l,[o]);this.setState({scopes:e})}else if(!s&&(0,W.default)(a=this.state.scopes).call(a,o)>-1){var i;this.setState({scopes:(0,n.default)(i=this.state.scopes).call(i,(e=>e!==o))})}})),(0,z.default)(this,\"onInputChange\",(e=>{let{target:{dataset:{name:t},value:a}}=e,n={[t]:a};this.setState(n)})),(0,z.default)(this,\"selectScopes\",(e=>{var t;e.target.dataset.all?this.setState({scopes:(0,de.default)((0,pe.default)(t=this.props.schema.get(\"allowedScopes\")||this.props.schema.get(\"scopes\")).call(t))}):this.setState({scopes:[]})})),(0,z.default)(this,\"logout\",(e=>{e.preventDefault();let{authActions:t,errActions:a,name:n}=this.props;a.clear({authId:n,type:\"auth\",source:\"auth\"}),t.logoutWithPersistOption([n])}));let{name:a,schema:r,authorized:s,authSelectors:o}=this.props,l=s&&s.get(a),i=o.getConfigs()||{},c=l&&l.get(\"username\")||\"\",u=l&&l.get(\"clientId\")||i.clientId||\"\",p=l&&l.get(\"clientSecret\")||i.clientSecret||\"\",h=l&&l.get(\"passwordType\")||\"basic\",g=l&&l.get(\"scopes\")||i.scopes||[];\"string\"==typeof g&&(g=g.split(i.scopeSeparator||\" \")),this.state={appName:i.appName,name:a,schema:r,scopes:g,clientId:u,clientSecret:p,username:c,password:\"\",passwordType:h}}render(){var e,t;let{schema:a,getComponent:r,authSelectors:s,errSelectors:o,name:l,specSelectors:i}=this.props;const c=r(\"Input\"),u=r(\"Row\"),d=r(\"Col\"),p=r(\"Button\"),f=r(\"authError\"),g=r(\"JumpToPath\",!0),y=r(\"Markdown\",!0),v=r(\"InitializedInput\"),{isOAS3:E}=i;let S=E()?a.get(\"openIdConnectUrl\"):null;const w=\"implicit\",b=\"password\",x=E()?S?\"authorization_code\":\"authorizationCode\":\"accessCode\",_=E()?S?\"client_credentials\":\"clientCredentials\":\"application\";let C=!!(s.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,j=a.get(\"flow\"),O=j===x&&C?j+\" with PKCE\":j,N=a.get(\"allowedScopes\")||a.get(\"scopes\"),k=!!s.authorized().get(l),A=(0,n.default)(e=o.allErrors()).call(e,(e=>e.get(\"authId\")===l)),I=!(0,n.default)(A).call(A,(e=>\"validation\"===e.get(\"source\"))).size,R=a.get(\"description\");return h.default.createElement(\"div\",null,h.default.createElement(\"h4\",null,l,\" (OAuth2, \",O,\") \",h.default.createElement(g,{path:[\"securityDefinitions\",l]})),this.state.appName?h.default.createElement(\"h5\",null,\"Application: \",this.state.appName,\" \"):null,R&&h.default.createElement(y,{source:a.get(\"description\")}),k&&h.default.createElement(\"h6\",null,\"Authorized\"),S&&h.default.createElement(\"p\",null,\"OpenID Connect URL: \",h.default.createElement(\"code\",null,S)),(j===w||j===x)&&h.default.createElement(\"p\",null,\"Authorization URL: \",h.default.createElement(\"code\",null,a.get(\"authorizationUrl\"))),(j===b||j===x||j===_)&&h.default.createElement(\"p\",null,\"Token URL:\",h.default.createElement(\"code\",null,\" \",a.get(\"tokenUrl\"))),h.default.createElement(\"p\",{className:\"flow\"},\"Flow: \",h.default.createElement(\"code\",null,O)),j!==b?null:h.default.createElement(u,null,h.default.createElement(u,null,h.default.createElement(\"label\",{htmlFor:\"oauth_username\"},\"username:\"),k?h.default.createElement(\"code\",null,\" \",this.state.username,\" \"):h.default.createElement(d,{tablet:10,desktop:10},h.default.createElement(\"input\",{id:\"oauth_username\",type:\"text\",\"data-name\":\"username\",onChange:this.onInputChange,autoFocus:!0}))),h.default.createElement(u,null,h.default.createElement(\"label\",{htmlFor:\"oauth_password\"},\"password:\"),k?h.default.createElement(\"code\",null,\" ****** \"):h.default.createElement(d,{tablet:10,desktop:10},h.default.createElement(\"input\",{id:\"oauth_password\",type:\"password\",\"data-name\":\"password\",onChange:this.onInputChange}))),h.default.createElement(u,null,h.default.createElement(\"label\",{htmlFor:\"password_type\"},\"Client credentials location:\"),k?h.default.createElement(\"code\",null,\" \",this.state.passwordType,\" \"):h.default.createElement(d,{tablet:10,desktop:10},h.default.createElement(\"select\",{id:\"password_type\",\"data-name\":\"passwordType\",onChange:this.onInputChange},h.default.createElement(\"option\",{value:\"basic\"},\"Authorization header\"),h.default.createElement(\"option\",{value:\"request-body\"},\"Request body\"))))),(j===_||j===w||j===x||j===b)&&(!k||k&&this.state.clientId)&&h.default.createElement(u,null,h.default.createElement(\"label\",{htmlFor:\"client_id\"},\"client_id:\"),k?h.default.createElement(\"code\",null,\" ****** \"):h.default.createElement(d,{tablet:10,desktop:10},h.default.createElement(v,{id:\"client_id\",type:\"text\",required:j===b,initialValue:this.state.clientId,\"data-name\":\"clientId\",onChange:this.onInputChange}))),(j===_||j===x||j===b)&&h.default.createElement(u,null,h.default.createElement(\"label\",{htmlFor:\"client_secret\"},\"client_secret:\"),k?h.default.createElement(\"code\",null,\" ****** \"):h.default.createElement(d,{tablet:10,desktop:10},h.default.createElement(v,{id:\"client_secret\",initialValue:this.state.clientSecret,type:\"password\",\"data-name\":\"clientSecret\",onChange:this.onInputChange}))),!k&&N&&N.size?h.default.createElement(\"div\",{className:\"scopes\"},h.default.createElement(\"h2\",null,\"Scopes:\",h.default.createElement(\"a\",{onClick:this.selectScopes,\"data-all\":!0},\"select all\"),h.default.createElement(\"a\",{onClick:this.selectScopes},\"select none\")),(0,m.default)(N).call(N,((e,t)=>{var a;return h.default.createElement(u,{key:t},h.default.createElement(\"div\",{className:\"checkbox\"},h.default.createElement(c,{\"data-value\":t,id:`${t}-${j}-checkbox-${this.state.name}`,disabled:k,checked:(0,me.default)(a=this.state.scopes).call(a,t),type:\"checkbox\",onChange:this.onScopeChange}),h.default.createElement(\"label\",{htmlFor:`${t}-${j}-checkbox-${this.state.name}`},h.default.createElement(\"span\",{className:\"item\"}),h.default.createElement(\"div\",{className:\"text\"},h.default.createElement(\"p\",{className:\"name\"},t),h.default.createElement(\"p\",{className:\"description\"},e)))))})).toArray()):null,(0,m.default)(t=A.valueSeq()).call(t,((e,t)=>h.default.createElement(f,{error:e,key:t}))),h.default.createElement(\"div\",{className:\"auth-btn-wrapper\"},I&&(k?h.default.createElement(p,{className:\"btn modal-btn auth authorize\",onClick:this.logout},\"Logout\"):h.default.createElement(p,{className:\"btn modal-btn auth authorize\",onClick:this.authorize},\"Authorize\")),h.default.createElement(p,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\")))}}class ge extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onClick\",(()=>{let{specActions:e,path:t,method:a}=this.props;e.clearResponse(t,a),e.clearRequest(t,a)}))}render(){return h.default.createElement(\"button\",{className:\"btn btn-clear opblock-control__btn\",onClick:this.onClick},\"Clear\")}}const ye=e=>{let{headers:t}=e;return h.default.createElement(\"div\",null,h.default.createElement(\"h5\",null,\"Response headers\"),h.default.createElement(\"pre\",{className:\"microlight\"},t))},ve=e=>{let{duration:t}=e;return h.default.createElement(\"div\",null,h.default.createElement(\"h5\",null,\"Request duration\"),h.default.createElement(\"pre\",{className:\"microlight\"},t,\" ms\"))};class Ee extends h.default.Component{shouldComponentUpdate(e){return this.props.response!==e.response||this.props.path!==e.path||this.props.method!==e.method||this.props.displayRequestDuration!==e.displayRequestDuration}render(){const{response:e,getComponent:t,getConfigs:a,displayRequestDuration:n,specSelectors:s,path:o,method:l}=this.props,{showMutatedRequest:i,requestSnippetsEnabled:c}=a(),u=i?s.mutatedRequestFor(o,l):s.requestFor(o,l),p=e.get(\"status\"),f=u.get(\"url\"),g=e.get(\"headers\").toJS(),y=e.get(\"notDocumented\"),v=e.get(\"error\"),E=e.get(\"text\"),S=e.get(\"duration\"),w=(0,r.default)(g),b=g[\"content-type\"]||g[\"Content-Type\"],x=t(\"responseBody\"),_=(0,m.default)(w).call(w,(e=>{var t=(0,d.default)(g[e])?g[e].join():g[e];return h.default.createElement(\"span\",{className:\"headerline\",key:e},\" \",e,\": \",t,\" \")})),C=0!==_.length,j=t(\"Markdown\",!0),O=t(\"RequestSnippets\",!0),N=t(\"curl\");return h.default.createElement(\"div\",null,u&&(!0===c||\"true\"===c?h.default.createElement(O,{request:u}):h.default.createElement(N,{request:u,getConfigs:a})),f&&h.default.createElement(\"div\",null,h.default.createElement(\"div\",{className:\"request-url\"},h.default.createElement(\"h4\",null,\"Request URL\"),h.default.createElement(\"pre\",{className:\"microlight\"},f))),h.default.createElement(\"h4\",null,\"Server response\"),h.default.createElement(\"table\",{className:\"responses-table live-responses-table\"},h.default.createElement(\"thead\",null,h.default.createElement(\"tr\",{className:\"responses-header\"},h.default.createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),h.default.createElement(\"td\",{className:\"col_header response-col_description\"},\"Details\"))),h.default.createElement(\"tbody\",null,h.default.createElement(\"tr\",{className:\"response\"},h.default.createElement(\"td\",{className:\"response-col_status\"},p,y?h.default.createElement(\"div\",{className:\"response-undocumented\"},h.default.createElement(\"i\",null,\" Undocumented \")):null),h.default.createElement(\"td\",{className:\"response-col_description\"},v?h.default.createElement(j,{source:`${\"\"!==e.get(\"name\")?`${e.get(\"name\")}: `:\"\"}${e.get(\"message\")}`}):null,E?h.default.createElement(x,{content:E,contentType:b,url:f,headers:g,getConfigs:a,getComponent:t}):null,C?h.default.createElement(ye,{headers:_}):null,n&&S?h.default.createElement(ve,{duration:S}):null)))))}}var Se=ut(5623);class we extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"renderOperationTag\",((e,t)=>{const{specSelectors:a,getComponent:n,oas3Selectors:r,layoutSelectors:s,layoutActions:o,getConfigs:l}=this.props,i=a.validOperationMethods(),c=n(\"OperationContainer\",!0),u=n(\"OperationTag\"),d=e.get(\"operations\");return h.default.createElement(u,{key:\"operation-\"+t,tagObj:e,tag:t,oas3Selectors:r,layoutSelectors:s,layoutActions:o,getConfigs:l,getComponent:n,specUrl:a.url()},h.default.createElement(\"div\",{className:\"operation-tag-content\"},(0,m.default)(d).call(d,(e=>{const a=e.get(\"path\"),n=e.get(\"method\"),r=y.default.List([\"paths\",a,n]);return-1===(0,W.default)(i).call(i,n)?null:h.default.createElement(c,{key:`${a}-${n}`,specPath:r,op:e,path:a,method:n,tag:t})})).toArray()))}))}render(){let{specSelectors:e}=this.props;const t=e.taggedOperations();return 0===t.size?h.default.createElement(\"h3\",null,\" No operations defined in spec!\"):h.default.createElement(\"div\",null,(0,m.default)(t).call(t,this.renderOperationTag).toArray(),t.size<1?h.default.createElement(\"h3\",null,\" No operations defined in spec! \"):null)}}var be=ut(3543);class xe extends h.default.Component{render(){const{tagObj:e,tag:t,children:a,oas3Selectors:n,layoutSelectors:r,layoutActions:s,getConfigs:o,getComponent:l,specUrl:i}=this.props;let{docExpansion:c,deepLinking:u}=o();const d=u&&\"false\"!==u,p=l(\"Collapse\"),f=l(\"Markdown\",!0),g=l(\"DeepLink\"),y=l(\"Link\");let v,E=e.getIn([\"tagDetails\",\"description\"],null),S=e.getIn([\"tagDetails\",\"externalDocs\",\"description\"]),w=e.getIn([\"tagDetails\",\"externalDocs\",\"url\"]);v=(0,x.Wl)(n)&&(0,x.Wl)(n.selectedServer)?(0,be.mn)(w,i,{selectedServer:n.selectedServer()}):w;let b=[\"operations-tag\",t],_=r.isShown(b,\"full\"===c||\"list\"===c);return h.default.createElement(\"div\",{className:_?\"opblock-tag-section is-open\":\"opblock-tag-section\"},h.default.createElement(\"h3\",{onClick:()=>s.show(b,!_),className:E?\"opblock-tag\":\"opblock-tag no-desc\",id:(0,m.default)(b).call(b,(e=>(0,x.J6)(e))).join(\"-\"),\"data-tag\":t,\"data-is-open\":_},h.default.createElement(g,{enabled:d,isShown:_,path:(0,x.oJ)(t),text:t}),E?h.default.createElement(\"small\",null,h.default.createElement(f,{source:E})):h.default.createElement(\"small\",null),v?h.default.createElement(\"div\",{className:\"info__externaldocs\"},h.default.createElement(\"small\",null,h.default.createElement(y,{href:(0,x.Nm)(v),onClick:e=>e.stopPropagation(),target:\"_blank\"},S||v))):null,h.default.createElement(\"button\",{\"aria-expanded\":_,className:\"expand-operation\",title:_?\"Collapse operation\":\"Expand operation\",onClick:()=>s.show(b,!_)},h.default.createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},h.default.createElement(\"use\",{href:_?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:_?\"#large-arrow-up\":\"#large-arrow-down\"})))),h.default.createElement(p,{isOpened:_},a))}}(0,z.default)(xe,\"defaultProps\",{tagObj:y.default.fromJS({}),tag:\"\"});class _e extends h.PureComponent{render(){let{specPath:e,response:t,request:a,toggleShown:n,onTryoutClick:r,onResetClick:s,onCancelClick:o,onExecute:l,fn:i,getComponent:c,getConfigs:u,specActions:d,specSelectors:p,authActions:f,authSelectors:g,oas3Actions:y,oas3Selectors:v}=this.props,E=this.props.operation,{deprecated:S,isShown:w,path:b,method:_,op:C,tag:j,operationId:O,allowTryItOut:N,displayRequestDuration:k,tryItOutEnabled:A,executeInProgress:I}=E.toJS(),{description:R,externalDocs:P,schemes:T}=C;const M=P?(0,be.mn)(P.url,p.url(),{selectedServer:v.selectedServer()}):\"\";let D=E.getIn([\"op\"]),L=D.get(\"responses\"),q=(0,x.gp)(D,[\"parameters\"]),B=p.operationScheme(b,_),U=[\"operations\",j,O],J=(0,x.nX)(D);const $=c(\"responses\"),K=c(\"parameters\"),V=c(\"execute\"),F=c(\"clear\"),z=c(\"Collapse\"),W=c(\"Markdown\",!0),H=c(\"schemes\"),G=c(\"OperationServers\"),Z=c(\"OperationExt\"),Y=c(\"OperationSummary\"),X=c(\"Link\"),{showExtensions:Q}=u();if(L&&t&&t.size>0){let e=!L.get(String(t.get(\"status\")))&&!L.get(\"default\");t=t.set(\"notDocumented\",e)}let ee=[b,_];const te=p.validationErrors([b,_]);return h.default.createElement(\"div\",{className:S?\"opblock opblock-deprecated\":w?`opblock opblock-${_} is-open`:`opblock opblock-${_}`,id:(0,x.J6)(U.join(\"-\"))},h.default.createElement(Y,{operationProps:E,isShown:w,toggleShown:n,getComponent:c,authActions:f,authSelectors:g,specPath:e}),h.default.createElement(z,{isOpened:w},h.default.createElement(\"div\",{className:\"opblock-body\"},D&&D.size||null===D?null:h.default.createElement(\"img\",{height:\"32px\",width:\"32px\",src:ut(2517),className:\"opblock-loading-animation\"}),S&&h.default.createElement(\"h4\",{className:\"opblock-title_normal\"},\" Warning: Deprecated\"),R&&h.default.createElement(\"div\",{className:\"opblock-description-wrapper\"},h.default.createElement(\"div\",{className:\"opblock-description\"},h.default.createElement(W,{source:R}))),M?h.default.createElement(\"div\",{className:\"opblock-external-docs-wrapper\"},h.default.createElement(\"h4\",{className:\"opblock-title_normal\"},\"Find more details\"),h.default.createElement(\"div\",{className:\"opblock-external-docs\"},P.description&&h.default.createElement(\"span\",{className:\"opblock-external-docs__description\"},h.default.createElement(W,{source:P.description})),h.default.createElement(X,{target:\"_blank\",className:\"opblock-external-docs__link\",href:(0,x.Nm)(M)},M))):null,D&&D.size?h.default.createElement(K,{parameters:q,specPath:e.push(\"parameters\"),operation:D,onChangeKey:ee,onTryoutClick:r,onResetClick:s,onCancelClick:o,tryItOutEnabled:A,allowTryItOut:N,fn:i,getComponent:c,specActions:d,specSelectors:p,pathMethod:[b,_],getConfigs:u,oas3Actions:y,oas3Selectors:v}):null,A?h.default.createElement(G,{getComponent:c,path:b,method:_,operationServers:D.get(\"servers\"),pathServers:p.paths().getIn([b,\"servers\"]),getSelectedServer:v.selectedServer,setSelectedServer:y.setSelectedServer,setServerVariableValue:y.setServerVariableValue,getServerVariable:v.serverVariableValue,getEffectiveServerValue:v.serverEffectiveValue}):null,A&&N&&T&&T.size?h.default.createElement(\"div\",{className:\"opblock-schemes\"},h.default.createElement(H,{schemes:T,path:b,method:_,specActions:d,currentScheme:B})):null,!A||!N||te.length<=0?null:h.default.createElement(\"div\",{className:\"validation-errors errors-wrapper\"},\"Please correct the following validation errors and try again.\",h.default.createElement(\"ul\",null,(0,m.default)(te).call(te,((e,t)=>h.default.createElement(\"li\",{key:t},\" \",e,\" \"))))),h.default.createElement(\"div\",{className:A&&t&&N?\"btn-group\":\"execute-wrapper\"},A&&N?h.default.createElement(V,{operation:D,specActions:d,specSelectors:p,oas3Selectors:v,oas3Actions:y,path:b,method:_,onExecute:l,disabled:I}):null,A&&t&&N?h.default.createElement(F,{specActions:d,path:b,method:_}):null),I?h.default.createElement(\"div\",{className:\"loading-container\"},h.default.createElement(\"div\",{className:\"loading\"})):null,L?h.default.createElement($,{responses:L,request:a,tryItOutResponse:t,getComponent:c,getConfigs:u,specSelectors:p,oas3Actions:y,oas3Selectors:v,specActions:d,produces:p.producesOptionsFor([b,_]),producesValue:p.currentProducesFor([b,_]),specPath:e.push(\"responses\"),path:b,method:_,displayRequestDuration:k,fn:i}):null,Q&&J.size?h.default.createElement(Z,{extensions:J,getComponent:c}):null)))}}(0,z.default)(_e,\"defaultProps\",{operation:null,response:null,request:null,specPath:(0,y.List)(),summary:\"\"});const Ce=(e=>{var t={};return ut.d(t,e),t})({default:()=>tt.default});class je extends h.PureComponent{render(){let{isShown:e,toggleShown:t,getComponent:a,authActions:n,authSelectors:r,operationProps:s,specPath:o}=this.props,{summary:l,isAuthorized:i,method:c,op:u,showSummary:d,path:p,operationId:m,originalOperationId:f,displayOperationId:g}=s.toJS(),{summary:y}=u,v=s.get(\"security\");const E=a(\"authorizeOperationBtn\"),S=a(\"OperationSummaryMethod\"),w=a(\"OperationSummaryPath\"),b=a(\"JumpToPath\",!0),x=a(\"CopyToClipboardBtn\",!0),_=v&&!!v.count(),C=_&&1===v.size&&v.first().isEmpty(),j=!_||C;return h.default.createElement(\"div\",{className:`opblock-summary opblock-summary-${c}`},h.default.createElement(\"button\",{\"aria-label\":`${c} ${p.replace(/\\//g,\"​/\")}`,\"aria-expanded\":e,className:\"opblock-summary-control\",onClick:t},h.default.createElement(S,{method:c}),h.default.createElement(w,{getComponent:a,operationProps:s,specPath:o}),d?h.default.createElement(\"div\",{className:\"opblock-summary-description\"},(0,Ce.default)(y||l)):null,g&&(f||m)?h.default.createElement(\"span\",{className:\"opblock-summary-operation-id\"},f||m):null,h.default.createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},h.default.createElement(\"use\",{href:e?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:e?\"#large-arrow-up\":\"#large-arrow-down\"}))),j?null:h.default.createElement(E,{isAuthorized:i,onClick:()=>{const e=r.definitionsForRequirements(v);n.showDefinitions(e)}}),h.default.createElement(x,{textToCopy:`${o.get(1)}`}),h.default.createElement(b,{path:o}))}}(0,z.default)(je,\"defaultProps\",{operationProps:null,specPath:(0,y.List)(),summary:\"\"});class Oe extends h.PureComponent{render(){let{method:e}=this.props;return h.default.createElement(\"span\",{className:\"opblock-summary-method\"},e.toUpperCase())}}(0,z.default)(Oe,\"defaultProps\",{operationProps:null});const Ne=(e=>{var t={};return ut.d(t,e),t})({default:()=>at.default});class ke extends h.PureComponent{render(){let{getComponent:e,operationProps:t}=this.props,{deprecated:a,isShown:n,path:r,tag:s,operationId:o,isDeepLinkingEnabled:l}=t.toJS();const i=r.split(/(?=\\/)/g);for(let e=1;e<i.length;e+=2)(0,Ne.default)(i).call(i,e,0,h.default.createElement(\"wbr\",{key:e}));const c=e(\"DeepLink\");return h.default.createElement(\"span\",{className:a?\"opblock-summary-path__deprecated\":\"opblock-summary-path\",\"data-path\":r},h.default.createElement(c,{enabled:l,isShown:n,path:(0,x.oJ)(`${s}/${o}`),text:i}))}}const Ae=e=>{var t;let{extensions:a,getComponent:n}=e,r=n(\"OperationExtRow\");return h.default.createElement(\"div\",{className:\"opblock-section\"},h.default.createElement(\"div\",{className:\"opblock-section-header\"},h.default.createElement(\"h4\",null,\"Extensions\")),h.default.createElement(\"div\",{className:\"table-container\"},h.default.createElement(\"table\",null,h.default.createElement(\"thead\",null,h.default.createElement(\"tr\",null,h.default.createElement(\"td\",{className:\"col_header\"},\"Field\"),h.default.createElement(\"td\",{className:\"col_header\"},\"Value\"))),h.default.createElement(\"tbody\",null,(0,m.default)(t=a.entrySeq()).call(t,(e=>{let[t,a]=e;return h.default.createElement(r,{key:`${t}-${a}`,xKey:t,xVal:a})}))))))},Ie=e=>{let{xKey:t,xVal:a}=e;const n=a?a.toJS?a.toJS():a:null;return h.default.createElement(\"tr\",null,h.default.createElement(\"td\",null,t),h.default.createElement(\"td\",null,(0,s.default)(n)))};var Re=ut(29),Pe=ut(8096),Te=ut(471),Me=ut(9908),De=ut(7068);const Le=(e=>{var t={};return ut.d(t,e),t})({default:()=>nt.default});var qe=ut(9874);const Be=e=>{let{value:t,fileName:a,className:r,downloadable:s,getConfigs:o,canCopy:l,language:i}=e;const c=(0,De.default)(o)?o():null,u=!1!==(0,Me.default)(c,\"syntaxHighlight\")&&(0,Me.default)(c,\"syntaxHighlight.activated\",!0),d=(0,h.useRef)(null);(0,h.useEffect)((()=>{var e;const t=(0,n.default)(e=(0,de.default)(d.current.childNodes)).call(e,(e=>!!e.nodeType&&e.classList.contains(\"microlight\")));return(0,Re.default)(t).call(t,(e=>e.addEventListener(\"mousewheel\",p,{passive:!1}))),()=>{(0,Re.default)(t).call(t,(e=>e.removeEventListener(\"mousewheel\",p)))}}),[t,r,i]);const p=e=>{const{target:t,deltaY:a}=e,{scrollHeight:n,offsetHeight:r,scrollTop:s}=t;n>r&&(0===s&&a<0||r+s>=n&&a>0)&&e.preventDefault()};return h.default.createElement(\"div\",{className:\"highlight-code\",ref:d},s?h.default.createElement(\"div\",{className:\"download-contents\",onClick:()=>{(0,Le.default)(t,a)}},\"Download\"):null,l&&h.default.createElement(\"div\",{className:\"copy-to-clipboard\"},h.default.createElement(qe.CopyToClipboard,{text:t},h.default.createElement(\"button\",null))),u?h.default.createElement(Te.d3,{language:i,className:(0,Pe.default)(r,\"microlight\"),style:(0,Te.C2)((0,Me.default)(c,\"syntaxHighlight.theme\",\"agate\"))},t):h.default.createElement(\"pre\",{className:(0,Pe.default)(r,\"microlight\")},t))};Be.defaultProps={fileName:\"response.txt\"};const Ue=Be;class Je extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e))),(0,z.default)(this,\"onResponseContentTypeChange\",(e=>{let{controlsAcceptHeader:t,value:a}=e;const{oas3Actions:n,path:r,method:s}=this.props;t&&n.setResponseContentType({value:a,path:r,method:s})}))}render(){var e;let{responses:t,tryItOutResponse:a,getComponent:n,getConfigs:r,specSelectors:s,fn:o,producesValue:l,displayRequestDuration:i,specPath:c,path:u,method:d,oas3Selectors:p,oas3Actions:f}=this.props,g=(0,x.iQ)(t);const y=n(\"contentType\"),v=n(\"liveResponse\"),E=n(\"response\");let S=this.props.produces&&this.props.produces.size?this.props.produces:Je.defaultProps.produces;const w=s.isOAS3()?(0,x.QG)(t):null,b=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"_\";return e.replace(/[^\\w-]/g,t)}(`${d}${u}_responses`),_=`${b}_select`;return h.default.createElement(\"div\",{className:\"responses-wrapper\"},h.default.createElement(\"div\",{className:\"opblock-section-header\"},h.default.createElement(\"h4\",null,\"Responses\"),s.isOAS3()?null:h.default.createElement(\"label\",{htmlFor:_},h.default.createElement(\"span\",null,\"Response content type\"),h.default.createElement(y,{value:l,ariaControls:b,ariaLabel:\"Response content type\",className:\"execute-content-type\",contentTypes:S,controlId:_,onChange:this.onChangeProducesWrapper}))),h.default.createElement(\"div\",{className:\"responses-inner\"},a?h.default.createElement(\"div\",null,h.default.createElement(v,{response:a,getComponent:n,getConfigs:r,specSelectors:s,path:this.props.path,method:this.props.method,displayRequestDuration:i}),h.default.createElement(\"h4\",null,\"Responses\")):null,h.default.createElement(\"table\",{\"aria-live\":\"polite\",className:\"responses-table\",id:b,role:\"region\"},h.default.createElement(\"thead\",null,h.default.createElement(\"tr\",{className:\"responses-header\"},h.default.createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),h.default.createElement(\"td\",{className:\"col_header response-col_description\"},\"Description\"),s.isOAS3()?h.default.createElement(\"td\",{className:\"col col_header response-col_links\"},\"Links\"):null)),h.default.createElement(\"tbody\",null,(0,m.default)(e=t.entrySeq()).call(e,(e=>{let[t,i]=e,m=a&&a.get(\"status\")==t?\"response_current\":\"\";return h.default.createElement(E,{key:t,path:u,method:d,specPath:c.push(t),isDefault:g===t,fn:o,className:m,code:t,response:i,specSelectors:s,controlsAcceptHeader:i===w,onContentTypeChange:this.onResponseContentTypeChange,contentType:l,getConfigs:r,activeExamplesKey:p.activeExamplesMember(u,d,\"responses\",t),oas3Actions:f,getComponent:n})})).toArray()))))}}(0,z.default)(Je,\"defaultProps\",{tryItOutResponse:null,produces:(0,y.fromJS)([\"application/json\"]),displayRequestDuration:!1});const $e=(e=>{var t={};return ut.d(t,e),t})({default:()=>rt.default});var Ke=ut(2518);class Ve extends h.default.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"_onContentTypeChange\",(e=>{const{onContentTypeChange:t,controlsAcceptHeader:a}=this.props;this.setState({responseContentType:e}),t({value:e,controlsAcceptHeader:a})})),(0,z.default)(this,\"getTargetExamplesKey\",(()=>{const{response:e,contentType:t,activeExamplesKey:a}=this.props,n=this.state.responseContentType||t,r=e.getIn([\"content\",n],(0,y.Map)({})).get(\"examples\",null).keySeq().first();return a||r})),this.state={responseContentType:\"\"}}render(){var e,t;let{path:a,method:n,code:r,response:s,className:o,specPath:l,fn:i,getComponent:c,getConfigs:u,specSelectors:d,contentType:p,controlsAcceptHeader:f,oas3Actions:g}=this.props,{inferSchema:v,getSampleSchema:E}=i,S=d.isOAS3();const{showExtensions:w}=u();let b=w?(0,x.nX)(s):null,_=s.get(\"headers\"),C=s.get(\"links\");const j=c(\"ResponseExtension\"),O=c(\"headers\"),N=c(\"highlightCode\"),k=c(\"modelExample\"),A=c(\"Markdown\",!0),I=c(\"operationLink\"),R=c(\"contentType\"),P=c(\"ExamplesSelect\"),T=c(\"Example\");var M,D;const L=this.state.responseContentType||p,q=s.getIn([\"content\",L],(0,y.Map)({})),B=q.get(\"examples\",null);if(S){const e=q.get(\"schema\");M=e?v(e.toJS()):null,D=e?(0,y.List)([\"content\",this.state.responseContentType,\"schema\"]):l}else M=s.get(\"schema\"),D=s.has(\"schema\")?l.push(\"schema\"):l;let U,J,$=!1,K={includeReadOnly:!0};if(S){var V;if(J=null===(V=q.get(\"schema\"))||void 0===V?void 0:V.toJS(),B){const e=this.getTargetExamplesKey(),t=e=>e.get(\"value\");U=t(B.get(e,(0,y.Map)({}))),void 0===U&&(U=t((0,$e.default)(B).call(B).next().value)),$=!0}else void 0!==q.get(\"example\")&&(U=q.get(\"example\"),$=!0)}else{J=M,K={...K,includeWriteOnly:!0};const e=s.getIn([\"examples\",L]);e&&(U=e,$=!0)}let F=((e,t,a)=>{if(null!=e){let n=null;return(0,Ke.O)(e)&&(n=\"json\"),h.default.createElement(\"div\",null,h.default.createElement(t,{className:\"example\",getConfigs:a,language:n,value:(0,x.Pz)(e)}))}return null})(E(J,L,K,$?U:void 0),N,u);return h.default.createElement(\"tr\",{className:\"response \"+(o||\"\"),\"data-code\":r},h.default.createElement(\"td\",{className:\"response-col_status\"},r),h.default.createElement(\"td\",{className:\"response-col_description\"},h.default.createElement(\"div\",{className:\"response-col_description__inner\"},h.default.createElement(A,{source:s.get(\"description\")})),w&&b.size?(0,m.default)(e=b.entrySeq()).call(e,(e=>{let[t,a]=e;return h.default.createElement(j,{key:`${t}-${a}`,xKey:t,xVal:a})})):null,S&&s.get(\"content\")?h.default.createElement(\"section\",{className:\"response-controls\"},h.default.createElement(\"div\",{className:(0,Pe.default)(\"response-control-media-type\",{\"response-control-media-type--accept-controller\":f})},h.default.createElement(\"small\",{className:\"response-control-media-type__title\"},\"Media type\"),h.default.createElement(R,{value:this.state.responseContentType,contentTypes:s.get(\"content\")?s.get(\"content\").keySeq():(0,y.Seq)(),onChange:this._onContentTypeChange,ariaLabel:\"Media Type\"}),f?h.default.createElement(\"small\",{className:\"response-control-media-type__accept-message\"},\"Controls \",h.default.createElement(\"code\",null,\"Accept\"),\" header.\"):null),B?h.default.createElement(\"div\",{className:\"response-control-examples\"},h.default.createElement(\"small\",{className:\"response-control-examples__title\"},\"Examples\"),h.default.createElement(P,{examples:B,currentExampleKey:this.getTargetExamplesKey(),onSelect:e=>g.setActiveExamplesMember({name:e,pathMethod:[a,n],contextType:\"responses\",contextName:r}),showLabels:!1})):null):null,F||M?h.default.createElement(k,{specPath:D,getComponent:c,getConfigs:u,specSelectors:d,schema:(0,x.oG)(M),example:F,includeReadOnly:!0}):null,S&&B?h.default.createElement(T,{example:B.get(this.getTargetExamplesKey(),(0,y.Map)({})),getComponent:c,getConfigs:u,omitValue:!0}):null,_?h.default.createElement(O,{headers:_,getComponent:c}):null),S?h.default.createElement(\"td\",{className:\"response-col_links\"},C?(0,m.default)(t=C.toSeq().entrySeq()).call(t,(e=>{let[t,a]=e;return h.default.createElement(I,{key:t,name:t,link:a,getComponent:c})})):h.default.createElement(\"i\",null,\"No links\")):null)}}(0,z.default)(Ve,\"defaultProps\",{response:(0,y.fromJS)({}),onContentTypeChange:()=>{}});const Fe=e=>{let{xKey:t,xVal:a}=e;return h.default.createElement(\"div\",{className:\"response__extension\"},t,\": \",String(a))};var ze=ut(3769);const We=(e=>{var t={};return ut.d(t,e),t})({default:()=>st.default});const He=(e=>{var t={};return ut.d(t,e),t})({default:()=>ot.default});class Ge extends h.default.PureComponent{constructor(){super(...arguments),(0,z.default)(this,\"state\",{parsedContent:null}),(0,z.default)(this,\"updateParsedContent\",(e=>{const{content:t}=this.props;if(e!==t)if(t&&t instanceof Blob){var a=new FileReader;a.onload=()=>{this.setState({parsedContent:a.result})},a.readAsText(t)}else this.setState({parsedContent:t.toString()})}))}componentDidMount(){this.updateParsedContent(null)}componentDidUpdate(e){this.updateParsedContent(e.content)}render(){let{content:e,contentType:t,url:n,headers:r={},getConfigs:o,getComponent:l}=this.props;const{parsedContent:i}=this.state,c=l(\"highlightCode\"),u=\"response_\"+(new Date).getTime();let d,p;if(n=n||\"\",(/^application\\/octet-stream/i.test(t)||r[\"Content-Disposition\"]&&/attachment/i.test(r[\"Content-Disposition\"])||r[\"content-disposition\"]&&/attachment/i.test(r[\"content-disposition\"])||r[\"Content-Description\"]&&/File Transfer/i.test(r[\"Content-Description\"])||r[\"content-description\"]&&/File Transfer/i.test(r[\"content-description\"]))&&e.size>0)if(\"Blob\"in window){let s=t||\"text/html\",o=e instanceof Blob?e:new Blob([e],{type:s}),l=ze.default.createObjectURL(o),i=[s,n.substr((0,a.default)(n).call(n,\"/\")+1),l].join(\":\"),c=r[\"content-disposition\"]||r[\"Content-Disposition\"];if(void 0!==c){let e=(0,x.DR)(c);null!==e&&(i=e)}p=b.Z.navigator&&b.Z.navigator.msSaveOrOpenBlob?h.default.createElement(\"div\",null,h.default.createElement(\"a\",{href:l,onClick:()=>b.Z.navigator.msSaveOrOpenBlob(o,i)},\"Download file\")):h.default.createElement(\"div\",null,h.default.createElement(\"a\",{href:l,download:i},\"Download file\"))}else p=h.default.createElement(\"pre\",{className:\"microlight\"},\"Download headers detected but your browser does not support downloading binary via XHR (Blob).\");else if(/json/i.test(t)){let t=null;(0,Ke.O)(e)&&(t=\"json\");try{d=(0,s.default)(JSON.parse(e),null,\"  \")}catch(t){d=\"can't parse JSON.  Raw result:\\n\\n\"+e}p=h.default.createElement(c,{language:t,downloadable:!0,fileName:`${u}.json`,value:d,getConfigs:o,canCopy:!0})}else/xml/i.test(t)?(d=(0,We.default)(e,{textNodesOnSameLine:!0,indentor:\"  \"}),p=h.default.createElement(c,{downloadable:!0,fileName:`${u}.xml`,value:d,getConfigs:o,canCopy:!0})):p=\"text/html\"===(0,He.default)(t)||/text\\/plain/.test(t)?h.default.createElement(c,{downloadable:!0,fileName:`${u}.html`,value:e,getConfigs:o,canCopy:!0}):\"text/csv\"===(0,He.default)(t)||/text\\/csv/.test(t)?h.default.createElement(c,{downloadable:!0,fileName:`${u}.csv`,value:e,getConfigs:o,canCopy:!0}):/^image\\//i.test(t)?(0,me.default)(t).call(t,\"svg\")?h.default.createElement(\"div\",null,\" \",e,\" \"):h.default.createElement(\"img\",{src:ze.default.createObjectURL(e)}):/^audio\\//i.test(t)?h.default.createElement(\"pre\",{className:\"microlight\"},h.default.createElement(\"audio\",{controls:!0,key:n},h.default.createElement(\"source\",{src:n,type:t}))):\"string\"==typeof e?h.default.createElement(c,{downloadable:!0,fileName:`${u}.txt`,value:e,getConfigs:o,canCopy:!0}):e.size>0?i?h.default.createElement(\"div\",null,h.default.createElement(\"p\",{className:\"i\"},\"Unrecognized response type; displaying content as text.\"),h.default.createElement(c,{downloadable:!0,fileName:`${u}.txt`,value:i,getConfigs:o,canCopy:!0})):h.default.createElement(\"p\",{className:\"i\"},\"Unrecognized response type; unable to display.\"):null;return p?h.default.createElement(\"div\",null,h.default.createElement(\"h5\",null,\"Response body\"),p):null}}var Ze=ut(374);class Ye extends h.Component{constructor(e){super(e),(0,z.default)(this,\"onChange\",((e,t,a)=>{let{specActions:{changeParamByIdentity:n},onChangeKey:r}=this.props;n(r,e,t,a)})),(0,z.default)(this,\"onChangeConsumesWrapper\",(e=>{let{specActions:{changeConsumesValue:t},onChangeKey:a}=this.props;t(a,e)})),(0,z.default)(this,\"toggleTab\",(e=>\"parameters\"===e?this.setState({parametersVisible:!0,callbackVisible:!1}):\"callbacks\"===e?this.setState({callbackVisible:!0,parametersVisible:!1}):void 0)),(0,z.default)(this,\"onChangeMediaType\",(e=>{let{value:t,pathMethod:a}=e,{specActions:n,oas3Selectors:r,oas3Actions:s}=this.props;const o=r.hasUserEditedBody(...a),l=r.shouldRetainRequestBodyValue(...a);s.setRequestContentType({value:t,pathMethod:a}),s.initRequestBodyValidateError({pathMethod:a}),o||(l||s.setRequestBodyValue({value:void 0,pathMethod:a}),n.clearResponse(...a),n.clearRequest(...a),n.clearValidateParams(a))})),this.state={callbackVisible:!1,parametersVisible:!0}}render(){var e;let{onTryoutClick:t,onResetClick:a,parameters:n,allowTryItOut:r,tryItOutEnabled:s,specPath:o,fn:l,getComponent:i,getConfigs:c,specSelectors:d,specActions:g,pathMethod:v,oas3Actions:E,oas3Selectors:S,operation:w}=this.props;const b=i(\"parameterRow\"),x=i(\"TryItOutButton\"),_=i(\"contentType\"),C=i(\"Callbacks\",!0),j=i(\"RequestBody\",!0),O=s&&r,N=d.isOAS3(),k=w.get(\"requestBody\"),A=(0,p.default)(e=(0,Ze.default)((0,p.default)(n).call(n,((e,t)=>{const a=t.get(\"in\");return e[a]??(e[a]=[]),e[a].push(t),e}),{}))).call(e,((e,t)=>(0,f.default)(e).call(e,t)),[]);return h.default.createElement(\"div\",{className:\"opblock-section\"},h.default.createElement(\"div\",{className:\"opblock-section-header\"},N?h.default.createElement(\"div\",{className:\"tab-header\"},h.default.createElement(\"div\",{onClick:()=>this.toggleTab(\"parameters\"),className:`tab-item ${this.state.parametersVisible&&\"active\"}`},h.default.createElement(\"h4\",{className:\"opblock-title\"},h.default.createElement(\"span\",null,\"Parameters\"))),w.get(\"callbacks\")?h.default.createElement(\"div\",{onClick:()=>this.toggleTab(\"callbacks\"),className:`tab-item ${this.state.callbackVisible&&\"active\"}`},h.default.createElement(\"h4\",{className:\"opblock-title\"},h.default.createElement(\"span\",null,\"Callbacks\"))):null):h.default.createElement(\"div\",{className:\"tab-header\"},h.default.createElement(\"h4\",{className:\"opblock-title\"},\"Parameters\")),r?h.default.createElement(x,{isOAS3:d.isOAS3(),hasUserEditedBody:S.hasUserEditedBody(...v),enabled:s,onCancelClick:this.props.onCancelClick,onTryoutClick:t,onResetClick:()=>a(v)}):null),this.state.parametersVisible?h.default.createElement(\"div\",{className:\"parameters-container\"},A.length?h.default.createElement(\"div\",{className:\"table-container\"},h.default.createElement(\"table\",{className:\"parameters\"},h.default.createElement(\"thead\",null,h.default.createElement(\"tr\",null,h.default.createElement(\"th\",{className:\"col_header parameters-col_name\"},\"Name\"),h.default.createElement(\"th\",{className:\"col_header parameters-col_description\"},\"Description\"))),h.default.createElement(\"tbody\",null,(0,m.default)(A).call(A,((e,t)=>h.default.createElement(b,{fn:l,specPath:o.push(t.toString()),getComponent:i,getConfigs:c,rawParam:e,param:d.parameterWithMetaByIdentity(v,e),key:`${e.get(\"in\")}.${e.get(\"name\")}`,onChange:this.onChange,onChangeConsumes:this.onChangeConsumesWrapper,specSelectors:d,specActions:g,oas3Actions:E,oas3Selectors:S,pathMethod:v,isExecute:O})))))):h.default.createElement(\"div\",{className:\"opblock-description-wrapper\"},h.default.createElement(\"p\",null,\"No parameters\"))):null,this.state.callbackVisible?h.default.createElement(\"div\",{className:\"callbacks-container opblock-description-wrapper\"},h.default.createElement(C,{callbacks:(0,y.Map)(w.get(\"callbacks\")),specPath:(0,u.default)(o).call(o,0,-1).push(\"callbacks\")})):null,N&&k&&this.state.parametersVisible&&h.default.createElement(\"div\",{className:\"opblock-section opblock-section-request-body\"},h.default.createElement(\"div\",{className:\"opblock-section-header\"},h.default.createElement(\"h4\",{className:`opblock-title parameter__name ${k.get(\"required\")&&\"required\"}`},\"Request body\"),h.default.createElement(\"label\",null,h.default.createElement(_,{value:S.requestContentType(...v),contentTypes:k.get(\"content\",(0,y.List)()).keySeq(),onChange:e=>{this.onChangeMediaType({value:e,pathMethod:v})},className:\"body-param-content-type\",ariaLabel:\"Request content type\"}))),h.default.createElement(\"div\",{className:\"opblock-description-wrapper\"},h.default.createElement(j,{setRetainRequestBodyValueFlag:e=>E.setRetainRequestBodyValueFlag({value:e,pathMethod:v}),userHasEditedBody:S.hasUserEditedBody(...v),specPath:(0,u.default)(o).call(o,0,-1).push(\"requestBody\"),requestBody:k,requestBodyValue:S.requestBodyValue(...v),requestBodyInclusionSetting:S.requestBodyInclusionSetting(...v),requestBodyErrors:S.requestBodyErrors(...v),isExecute:O,getConfigs:c,activeExamplesKey:S.activeExamplesMember(...v,\"requestBody\",\"requestBody\"),updateActiveExamplesKey:e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"requestBody\",contextName:\"requestBody\"})},onChange:(e,t)=>{if(t){const a=S.requestBodyValue(...v),n=y.Map.isMap(a)?a:(0,y.Map)();return E.setRequestBodyValue({pathMethod:v,value:n.setIn(t,e)})}E.setRequestBodyValue({value:e,pathMethod:v})},onChangeIncludeEmpty:(e,t)=>{E.setRequestBodyInclusion({pathMethod:v,value:t,name:e})},contentType:S.requestContentType(...v)}))))}}(0,z.default)(Ye,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]});const it=e=>{let{xKey:t,xVal:a}=e;return h.default.createElement(\"div\",{className:\"parameter__extension\"},t,\": \",String(a))},ct={onChange:()=>{},isIncludedOptions:{}};class pt extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onCheckboxChange\",(e=>{const{onChange:t}=this.props;t(e.target.checked)}))}componentDidMount(){const{isIncludedOptions:e,onChange:t}=this.props,{shouldDispatchInit:a,defaultValue:n}=e;a&&t(n)}render(){let{isIncluded:e,isDisabled:t}=this.props;return h.default.createElement(\"div\",null,h.default.createElement(\"label\",{className:(0,Pe.default)(\"parameter__empty_value_toggle\",{disabled:t})},h.default.createElement(\"input\",{type:\"checkbox\",disabled:t,checked:!t&&e,onChange:this.onCheckboxChange}),\"Send empty value\"))}}(0,z.default)(pt,\"defaultProps\",ct);var mt=ut(9069);class ft extends h.Component{constructor(e,t){var a;super(e,t),a=this,(0,z.default)(this,\"onChangeWrapper\",(function(e){let t,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{onChange:r,rawParam:s}=a.props;return t=\"\"===e||e&&0===e.size?null:e,r(s,t,n)})),(0,z.default)(this,\"_onExampleSelect\",(e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"parameters\",contextName:this.getParamKey()})})),(0,z.default)(this,\"onChangeIncludeEmpty\",(e=>{let{specActions:t,param:a,pathMethod:n}=this.props;const r=a.get(\"name\"),s=a.get(\"in\");return t.updateEmptyParamInclusion(n,r,s,e)})),(0,z.default)(this,\"setDefaultValue\",(()=>{let{specSelectors:e,pathMethod:t,rawParam:a,oas3Selectors:n,fn:r}=this.props;const s=e.parameterWithMetaByIdentity(t,a)||(0,y.Map)(),{schema:o}=(0,mt.Z)(s,{isOAS3:e.isOAS3()}),l=s.get(\"content\",(0,y.Map)()).keySeq().first(),i=o?r.getSampleSchema(o.toJS(),l,{includeWriteOnly:!0}):null;if(s&&void 0===s.get(\"value\")&&\"body\"!==s.get(\"in\")){let a;if(e.isSwagger2())a=void 0!==s.get(\"x-example\")?s.get(\"x-example\"):void 0!==s.getIn([\"schema\",\"example\"])?s.getIn([\"schema\",\"example\"]):o&&o.getIn([\"default\"]);else if(e.isOAS3()){const e=n.activeExamplesMember(...t,\"parameters\",this.getParamKey());a=void 0!==s.getIn([\"examples\",e,\"value\"])?s.getIn([\"examples\",e,\"value\"]):void 0!==s.getIn([\"content\",l,\"example\"])?s.getIn([\"content\",l,\"example\"]):void 0!==s.get(\"example\")?s.get(\"example\"):void 0!==(o&&o.get(\"example\"))?o&&o.get(\"example\"):void 0!==(o&&o.get(\"default\"))?o&&o.get(\"default\"):s.get(\"default\")}void 0===a||y.List.isList(a)||(a=(0,x.Pz)(a)),void 0!==a?this.onChangeWrapper(a):o&&\"object\"===o.get(\"type\")&&i&&!s.get(\"examples\")&&this.onChangeWrapper(y.List.isList(i)?i:(0,x.Pz)(i))}})),this.setDefaultValue()}UNSAFE_componentWillReceiveProps(e){let t,{specSelectors:a,pathMethod:n,rawParam:r}=e,s=a.isOAS3(),o=a.parameterWithMetaByIdentity(n,r)||new y.Map;if(o=o.isEmpty()?r:o,s){let{schema:e}=(0,mt.Z)(o,{isOAS3:s});t=e?e.get(\"enum\"):void 0}else t=o?o.get(\"enum\"):void 0;let l,i=o?o.get(\"value\"):void 0;void 0!==i?l=i:r.get(\"required\")&&t&&t.size&&(l=t.first()),void 0!==l&&l!==i&&this.onChangeWrapper((0,x.D$)(l)),this.setDefaultValue()}getParamKey(){const{param:e}=this.props;return e?`${e.get(\"name\")}-${e.get(\"in\")}`:null}render(){var e,t;let{param:a,rawParam:n,getComponent:r,getConfigs:s,isExecute:o,fn:l,onChangeConsumes:i,specSelectors:c,pathMethod:u,specPath:d,oas3Selectors:p}=this.props,f=c.isOAS3();const{showExtensions:g,showCommonExtensions:v}=s();if(a||(a=n),!n)return null;const E=r(\"JsonSchemaForm\"),S=r(\"ParamBody\");let w=a.get(\"in\"),_=\"body\"!==w?null:h.default.createElement(S,{getComponent:r,getConfigs:s,fn:l,param:a,consumes:c.consumesOptionsFor(u),consumesValue:c.contentTypeValues(u).get(\"requestContentType\"),onChange:this.onChangeWrapper,onChangeConsumes:i,isExecute:o,specSelectors:c,pathMethod:u});const C=r(\"modelExample\"),j=r(\"Markdown\",!0),O=r(\"ParameterExt\"),N=r(\"ParameterIncludeEmpty\"),k=r(\"ExamplesSelectValueRetainer\"),A=r(\"Example\");let I,R,P,T,{schema:M}=(0,mt.Z)(a,{isOAS3:f}),D=c.parameterWithMetaByIdentity(u,n)||(0,y.Map)(),L=M?M.get(\"format\"):null,q=M?M.get(\"type\"):null,B=M?M.getIn([\"items\",\"type\"]):null,U=\"formData\"===w,J=\"FormData\"in b.Z,$=a.get(\"required\"),K=D?D.get(\"value\"):\"\",V=v?(0,x.po)(M):null,F=g?(0,x.nX)(a):null,z=!1;return void 0!==a&&M&&(I=M.get(\"items\")),void 0!==I?(R=I.get(\"enum\"),P=I.get(\"default\")):M&&(R=M.get(\"enum\")),R&&R.size&&R.size>0&&(z=!0),void 0!==a&&(M&&(P=M.get(\"default\")),void 0===P&&(P=a.get(\"default\")),T=a.get(\"example\"),void 0===T&&(T=a.get(\"x-example\"))),h.default.createElement(\"tr\",{\"data-param-name\":a.get(\"name\"),\"data-param-in\":a.get(\"in\")},h.default.createElement(\"td\",{className:\"parameters-col_name\"},h.default.createElement(\"div\",{className:$?\"parameter__name required\":\"parameter__name\"},a.get(\"name\"),$?h.default.createElement(\"span\",null,\" *\"):null),h.default.createElement(\"div\",{className:\"parameter__type\"},q,B&&`[${B}]`,L&&h.default.createElement(\"span\",{className:\"prop-format\"},\"($\",L,\")\")),h.default.createElement(\"div\",{className:\"parameter__deprecated\"},f&&a.get(\"deprecated\")?\"deprecated\":null),h.default.createElement(\"div\",{className:\"parameter__in\"},\"(\",a.get(\"in\"),\")\"),v&&V.size?(0,m.default)(e=V.entrySeq()).call(e,(e=>{let[t,a]=e;return h.default.createElement(O,{key:`${t}-${a}`,xKey:t,xVal:a})})):null,g&&F.size?(0,m.default)(t=F.entrySeq()).call(t,(e=>{let[t,a]=e;return h.default.createElement(O,{key:`${t}-${a}`,xKey:t,xVal:a})})):null),h.default.createElement(\"td\",{className:\"parameters-col_description\"},a.get(\"description\")?h.default.createElement(j,{source:a.get(\"description\")}):null,!_&&o||!z?null:h.default.createElement(j,{className:\"parameter__enum\",source:\"<i>Available values</i> : \"+(0,m.default)(R).call(R,(function(e){return e})).toArray().join(\", \")}),!_&&o||void 0===P?null:h.default.createElement(j,{className:\"parameter__default\",source:\"<i>Default value</i> : \"+P}),!_&&o||void 0===T?null:h.default.createElement(j,{source:\"<i>Example</i> : \"+T}),U&&!J&&h.default.createElement(\"div\",null,\"Error: your browser does not support FormData\"),f&&a.get(\"examples\")?h.default.createElement(\"section\",{className:\"parameter-controls\"},h.default.createElement(k,{examples:a.get(\"examples\"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:r,defaultToFirstExample:!0,currentKey:p.activeExamplesMember(...u,\"parameters\",this.getParamKey()),currentUserInputValue:K})):null,_?null:h.default.createElement(E,{fn:l,getComponent:r,value:K,required:$,disabled:!o,description:a.get(\"name\"),onChange:this.onChangeWrapper,errors:D.get(\"errors\"),schema:M}),_&&M?h.default.createElement(C,{getComponent:r,specPath:d.push(\"schema\"),getConfigs:s,isExecute:o,specSelectors:c,schema:M,example:_,includeWriteOnly:!0}):null,!_&&o&&a.get(\"allowEmptyValue\")?h.default.createElement(N,{onChange:this.onChangeIncludeEmpty,isIncluded:c.parameterInclusionSettingFor(u,a.get(\"name\"),a.get(\"in\")),isDisabled:!(0,x.O2)(K)}):null,f&&a.get(\"examples\")?h.default.createElement(A,{example:a.getIn([\"examples\",p.activeExamplesMember(...u,\"parameters\",this.getParamKey())]),getComponent:r,getConfigs:s}):null))}}var ht=ut(6235);class gt extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"handleValidateParameters\",(()=>{let{specSelectors:e,specActions:t,path:a,method:n}=this.props;return t.validateParams([a,n]),e.validateBeforeExecute([a,n])})),(0,z.default)(this,\"handleValidateRequestBody\",(()=>{let{path:e,method:t,specSelectors:a,oas3Selectors:n,oas3Actions:r}=this.props,s={missingBodyValue:!1,missingRequiredKeys:[]};r.clearRequestBodyValidateError({path:e,method:t});let o=a.getOAS3RequiredRequestBodyContentType([e,t]),l=n.requestBodyValue(e,t),i=n.validateBeforeExecute([e,t]),c=n.requestContentType(e,t);if(!i)return s.missingBodyValue=!0,r.setRequestBodyValidateError({path:e,method:t,validationErrors:s}),!1;if(!o)return!0;let u=n.validateShallowRequired({oas3RequiredRequestBodyContentType:o,oas3RequestContentType:c,oas3RequestBodyValue:l});return!u||u.length<1||((0,Re.default)(u).call(u,(e=>{s.missingRequiredKeys.push(e)})),r.setRequestBodyValidateError({path:e,method:t,validationErrors:s}),!1)})),(0,z.default)(this,\"handleValidationResultPass\",(()=>{let{specActions:e,operation:t,path:a,method:n}=this.props;this.props.onExecute&&this.props.onExecute(),e.execute({operation:t,path:a,method:n})})),(0,z.default)(this,\"handleValidationResultFail\",(()=>{let{specActions:e,path:t,method:a}=this.props;e.clearValidateParams([t,a]),(0,ht.default)((()=>{e.validateParams([t,a])}),40)})),(0,z.default)(this,\"handleValidationResult\",(e=>{e?this.handleValidationResultPass():this.handleValidationResultFail()})),(0,z.default)(this,\"onClick\",(()=>{let e=this.handleValidateParameters(),t=this.handleValidateRequestBody(),a=e&&t;this.handleValidationResult(a)})),(0,z.default)(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e)))}render(){const{disabled:e}=this.props;return h.default.createElement(\"button\",{className:\"btn execute opblock-control__btn\",onClick:this.onClick,disabled:e},\"Execute\")}}class yt extends h.default.Component{render(){var e;let{headers:t,getComponent:a}=this.props;const n=a(\"Property\"),r=a(\"Markdown\",!0);return t&&t.size?h.default.createElement(\"div\",{className:\"headers-wrapper\"},h.default.createElement(\"h4\",{className:\"headers__title\"},\"Headers:\"),h.default.createElement(\"table\",{className:\"headers\"},h.default.createElement(\"thead\",null,h.default.createElement(\"tr\",{className:\"header-row\"},h.default.createElement(\"th\",{className:\"header-col\"},\"Name\"),h.default.createElement(\"th\",{className:\"header-col\"},\"Description\"),h.default.createElement(\"th\",{className:\"header-col\"},\"Type\"))),h.default.createElement(\"tbody\",null,(0,m.default)(e=t.entrySeq()).call(e,(e=>{let[t,a]=e;if(!y.default.Map.isMap(a))return null;const s=a.get(\"description\"),o=a.getIn([\"schema\"])?a.getIn([\"schema\",\"type\"]):a.getIn([\"type\"]),l=a.getIn([\"schema\",\"example\"]);return h.default.createElement(\"tr\",{key:t},h.default.createElement(\"td\",{className:\"header-col\"},t),h.default.createElement(\"td\",{className:\"header-col\"},s?h.default.createElement(r,{source:s}):null),h.default.createElement(\"td\",{className:\"header-col\"},o,\" \",l?h.default.createElement(n,{propKey:\"Example\",propVal:l,propClass:\"header-example\"}):null))})).toArray()))):null}}class vt extends h.default.Component{render(){let{editorActions:e,errSelectors:t,layoutSelectors:a,layoutActions:r,getComponent:s}=this.props;const o=s(\"Collapse\");if(e&&e.jumpToLine)var l=e.jumpToLine;let i=t.allErrors(),c=(0,n.default)(i).call(i,(e=>\"thrown\"===e.get(\"type\")||\"error\"===e.get(\"level\")));if(!c||c.count()<1)return null;let u=a.isShown([\"errorPane\"],!0),d=c.sortBy((e=>e.get(\"line\")));return h.default.createElement(\"pre\",{className:\"errors-wrapper\"},h.default.createElement(\"hgroup\",{className:\"error\"},h.default.createElement(\"h4\",{className:\"errors__title\"},\"Errors\"),h.default.createElement(\"button\",{className:\"btn errors__clear-btn\",onClick:()=>r.show([\"errorPane\"],!u)},u?\"Hide\":\"Show\")),h.default.createElement(o,{isOpened:u,animated:!0},h.default.createElement(\"div\",{className:\"errors\"},(0,m.default)(d).call(d,((e,t)=>{let a=e.get(\"type\");return\"thrown\"===a||\"auth\"===a?h.default.createElement(Et,{key:t,error:e.get(\"error\")||e,jumpToLine:l}):\"spec\"===a?h.default.createElement(St,{key:t,error:e,jumpToLine:l}):void 0})))))}}const Et=e=>{let{error:t,jumpToLine:a}=e;if(!t)return null;let n=t.get(\"line\");return h.default.createElement(\"div\",{className:\"error-wrapper\"},t?h.default.createElement(\"div\",null,h.default.createElement(\"h4\",null,t.get(\"source\")&&t.get(\"level\")?wt(t.get(\"source\"))+\" \"+t.get(\"level\"):\"\",t.get(\"path\")?h.default.createElement(\"small\",null,\" at \",t.get(\"path\")):null),h.default.createElement(\"span\",{className:\"message thrown\"},t.get(\"message\")),h.default.createElement(\"div\",{className:\"error-line\"},n&&a?h.default.createElement(\"a\",{onClick:(0,i.default)(a).call(a,null,n)},\"Jump to line \",n):null)):null)},St=e=>{let{error:t,jumpToLine:a}=e,n=null;return t.get(\"path\")?n=y.List.isList(t.get(\"path\"))?h.default.createElement(\"small\",null,\"at \",t.get(\"path\").join(\".\")):h.default.createElement(\"small\",null,\"at \",t.get(\"path\")):t.get(\"line\")&&!a&&(n=h.default.createElement(\"small\",null,\"on line \",t.get(\"line\"))),h.default.createElement(\"div\",{className:\"error-wrapper\"},t?h.default.createElement(\"div\",null,h.default.createElement(\"h4\",null,wt(t.get(\"source\"))+\" \"+t.get(\"level\"),\" \",n),h.default.createElement(\"span\",{className:\"message\"},t.get(\"message\")),h.default.createElement(\"div\",{className:\"error-line\"},a?h.default.createElement(\"a\",{onClick:(0,i.default)(a).call(a,null,t.get(\"line\"))},\"Jump to line \",t.get(\"line\")):null)):null)};function wt(e){var t;return(0,m.default)(t=(e||\"\").split(\" \")).call(t,(e=>e[0].toUpperCase()+(0,u.default)(e).call(e,1))).join(\" \")}Et.defaultProps={jumpToLine:null};class bt extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"onChangeWrapper\",(e=>this.props.onChange(e.target.value)))}componentDidMount(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}UNSAFE_componentWillReceiveProps(e){var t;e.contentTypes&&e.contentTypes.size&&((0,me.default)(t=e.contentTypes).call(t,e.value)||e.onChange(e.contentTypes.first()))}render(){let{ariaControls:e,ariaLabel:t,className:a,contentTypes:n,controlId:r,value:s}=this.props;return n&&n.size?h.default.createElement(\"div\",{className:\"content-type-wrapper \"+(a||\"\")},h.default.createElement(\"select\",{\"aria-controls\":e,\"aria-label\":t,className:\"content-type\",id:r,onChange:this.onChangeWrapper,value:s||\"\"},(0,m.default)(n).call(n,(e=>h.default.createElement(\"option\",{key:e,value:e},e))).toArray())):null}}(0,z.default)(bt,\"defaultProps\",{onChange:()=>{},value:null,contentTypes:(0,y.fromJS)([\"application/json\"])});var xt=ut(863),_t=ut(5942);function Ct(){for(var e,t=arguments.length,a=new Array(t),r=0;r<t;r++)a[r]=arguments[r];return(0,_t.default)(e=(0,n.default)(a).call(a,(e=>!!e)).join(\" \")).call(e)}class jt extends h.default.Component{render(){let{fullscreen:e,full:t,...a}=this.props;if(e)return h.default.createElement(\"section\",a);let n=\"swagger-container\"+(t?\"-full\":\"\");return h.default.createElement(\"section\",(0,xt.default)({},a,{className:Ct(a.className,n)}))}}const Ot={mobile:\"\",tablet:\"-tablet\",desktop:\"-desktop\",large:\"-hd\"};class Nt extends h.default.Component{render(){const{hide:e,keepContents:t,mobile:a,tablet:n,desktop:r,large:s,...o}=this.props;if(e&&!t)return h.default.createElement(\"span\",null);let l=[];for(let e in Ot){if(!Object.prototype.hasOwnProperty.call(Ot,e))continue;let t=Ot[e];if(e in this.props){let a=this.props[e];if(a<1){l.push(\"none\"+t);continue}l.push(\"block\"+t),l.push(\"col-\"+a+t)}}e&&l.push(\"hidden\");let i=Ct(o.className,...l);return h.default.createElement(\"section\",(0,xt.default)({},o,{className:i}))}}class kt extends h.default.Component{render(){return h.default.createElement(\"div\",(0,xt.default)({},this.props,{className:Ct(this.props.className,\"wrapper\")}))}}class At extends h.default.Component{render(){return h.default.createElement(\"button\",(0,xt.default)({},this.props,{className:Ct(this.props.className,\"button\")}))}}(0,z.default)(At,\"defaultProps\",{className:\"\"});const It=e=>h.default.createElement(\"textarea\",e),Rt=e=>h.default.createElement(\"input\",e);class Pt extends h.default.Component{constructor(e,t){let a;super(e,t),(0,z.default)(this,\"onChange\",(e=>{let t,{onChange:a,multiple:r}=this.props,s=(0,u.default)([]).call(e.target.options);var o;r?t=(0,m.default)(o=(0,n.default)(s).call(s,(function(e){return e.selected}))).call(o,(function(e){return e.value})):t=e.target.value;this.setState({value:t}),a&&a(t)})),a=e.value?e.value:e.multiple?[\"\"]:\"\",this.state={value:a}}UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){var e,t;let{allowedValues:a,multiple:n,allowEmptyValue:r,disabled:s}=this.props,o=(null===(e=this.state.value)||void 0===e||null===(t=e.toJS)||void 0===t?void 0:t.call(e))||this.state.value;return h.default.createElement(\"select\",{className:this.props.className,multiple:n,value:o,onChange:this.onChange,disabled:s},r?h.default.createElement(\"option\",{value:\"\"},\"--\"):null,(0,m.default)(a).call(a,(function(e,t){return h.default.createElement(\"option\",{key:t,value:String(e)},String(e))})))}}(0,z.default)(Pt,\"defaultProps\",{multiple:!1,allowEmptyValue:!0});class Tt extends h.default.Component{render(){return h.default.createElement(\"a\",(0,xt.default)({},this.props,{rel:\"noopener noreferrer\",className:Ct(this.props.className,\"link\")}))}}const Mt=e=>{let{children:t}=e;return h.default.createElement(\"div\",{className:\"no-margin\"},\" \",t,\" \")};class Dt extends h.default.Component{renderNotAnimated(){return this.props.isOpened?h.default.createElement(Mt,null,this.props.children):h.default.createElement(\"noscript\",null)}render(){let{animated:e,isOpened:t,children:a}=this.props;return e?(a=t?a:null,h.default.createElement(Mt,null,a)):this.renderNotAnimated()}}(0,z.default)(Dt,\"defaultProps\",{isOpened:!1,animated:!1});class Lt extends h.default.Component{constructor(){var e;super(...arguments),this.setTagShown=(0,i.default)(e=this._setTagShown).call(e,this)}_setTagShown(e,t){this.props.layoutActions.show(e,t)}showOp(e,t){let{layoutActions:a}=this.props;a.show(e,t)}render(){let{specSelectors:e,layoutSelectors:t,layoutActions:a,getComponent:n}=this.props,r=e.taggedOperations();const s=n(\"Collapse\");return h.default.createElement(\"div\",null,h.default.createElement(\"h4\",{className:\"overview-title\"},\"Overview\"),(0,m.default)(r).call(r,((e,n)=>{let r=e.get(\"operations\"),o=[\"overview-tags\",n],l=t.isShown(o,!0);return h.default.createElement(\"div\",{key:\"overview-\"+n},h.default.createElement(\"h4\",{onClick:()=>a.show(o,!l),className:\"link overview-tag\"},\" \",l?\"-\":\"+\",n),h.default.createElement(s,{isOpened:l,animated:!0},(0,m.default)(r).call(r,(e=>{let{path:n,method:r,id:s}=e.toObject(),o=\"operations\",l=s,i=t.isShown([o,l]);return h.default.createElement(qt,{key:s,path:n,method:r,id:n+\"-\"+r,shown:i,showOpId:l,showOpIdPrefix:o,href:`#operation-${l}`,onClick:a.show})})).toArray()))})).toArray(),r.size<1&&h.default.createElement(\"h3\",null,\" No operations defined in spec! \"))}}class qt extends h.default.Component{constructor(e){var t;super(e),this.onClick=(0,i.default)(t=this._onClick).call(t,this)}_onClick(){let{showOpId:e,showOpIdPrefix:t,onClick:a,shown:n}=this.props;a([t,e],!n)}render(){let{id:e,method:t,shown:a,href:n}=this.props;return h.default.createElement(Tt,{href:n,onClick:this.onClick,className:\"block opblock-link \"+(a?\"shown\":\"\")},h.default.createElement(\"div\",null,h.default.createElement(\"small\",{className:`bold-label-${t}`},t.toUpperCase()),h.default.createElement(\"span\",{className:\"bold-label\"},e)))}}class Bt extends h.default.Component{componentDidMount(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}render(){const{value:e,defaultValue:t,initialValue:a,...n}=this.props;return h.default.createElement(\"input\",(0,xt.default)({},n,{ref:e=>this.inputRef=e}))}}class Ut extends h.default.Component{render(){const{host:e,basePath:t}=this.props;return h.default.createElement(\"pre\",{className:\"base-url\"},\"[ Base URL: \",e,t,\" ]\")}}class Jt extends h.default.PureComponent{render(){const{url:e,getComponent:t}=this.props,a=t(\"Link\");return h.default.createElement(a,{target:\"_blank\",href:(0,x.Nm)(e)},h.default.createElement(\"span\",{className:\"url\"},\" \",e))}}class $t extends h.default.Component{render(){const{info:e,url:t,host:a,basePath:n,getComponent:r,externalDocs:s,selectedServer:o,url:l}=this.props,i=e.get(\"version\"),c=e.get(\"description\"),u=e.get(\"title\"),d=(0,be.mn)(e.get(\"termsOfService\"),l,{selectedServer:o}),p=e.get(\"contact\"),m=e.get(\"license\"),f=s&&s.get(\"url\"),g=(0,be.mn)(f,l,{selectedServer:o}),y=s&&s.get(\"description\"),v=r(\"Markdown\",!0),E=r(\"Link\"),S=r(\"VersionStamp\"),w=r(\"InfoUrl\"),b=r(\"InfoBasePath\"),_=r(\"License\"),C=r(\"Contact\");return h.default.createElement(\"div\",{className:\"info\"},h.default.createElement(\"hgroup\",{className:\"main\"},h.default.createElement(\"h2\",{className:\"title\"},u,i&&h.default.createElement(S,{version:i})),a||n?h.default.createElement(b,{host:a,basePath:n}):null,t&&h.default.createElement(w,{getComponent:r,url:t})),h.default.createElement(\"div\",{className:\"description\"},h.default.createElement(v,{source:c})),d&&h.default.createElement(\"div\",{className:\"info__tos\"},h.default.createElement(E,{target:\"_blank\",href:(0,x.Nm)(d)},\"Terms of service\")),(null==p?void 0:p.size)>0&&h.default.createElement(C,{getComponent:r,data:p,selectedServer:o,url:t}),(null==m?void 0:m.size)>0&&h.default.createElement(_,{getComponent:r,license:m,selectedServer:o,url:t}),g?h.default.createElement(E,{className:\"info__extdocs\",target:\"_blank\",href:(0,x.Nm)(g)},y||g):null)}}const Kt=$t;class Vt extends h.default.Component{render(){const{specSelectors:e,getComponent:t,oas3Selectors:a}=this.props,n=e.info(),r=e.url(),s=e.basePath(),o=e.host(),l=e.externalDocs(),i=a.selectedServer(),c=t(\"info\");return h.default.createElement(\"div\",null,n&&n.count()?h.default.createElement(c,{info:n,url:r,host:o,basePath:s,externalDocs:l,getComponent:t,selectedServer:i}):null)}}class Ft extends h.default.Component{render(){const{data:e,getComponent:t,selectedServer:a,url:n}=this.props,r=e.get(\"name\",\"the developer\"),s=(0,be.mn)(e.get(\"url\"),n,{selectedServer:a}),o=e.get(\"email\"),l=t(\"Link\");return h.default.createElement(\"div\",{className:\"info__contact\"},s&&h.default.createElement(\"div\",null,h.default.createElement(l,{href:(0,x.Nm)(s),target:\"_blank\"},r,\" - Website\")),o&&h.default.createElement(l,{href:(0,x.Nm)(`mailto:${o}`)},s?`Send email to ${r}`:`Contact ${r}`))}}const zt=Ft;class Wt extends h.default.Component{render(){const{license:e,getComponent:t,selectedServer:a,url:n}=this.props,r=e.get(\"name\",\"License\"),s=(0,be.mn)(e.get(\"url\"),n,{selectedServer:a}),o=t(\"Link\");return h.default.createElement(\"div\",{className:\"info__license\"},s?h.default.createElement(\"div\",{className:\"info__license__url\"},h.default.createElement(o,{target:\"_blank\",href:(0,x.Nm)(s)},r)):h.default.createElement(\"span\",null,r))}}const Ht=Wt;class Gt extends h.default.Component{render(){return null}}class Zt extends h.default.Component{render(){return h.default.createElement(\"div\",{className:\"view-line-link copy-to-clipboard\",title:\"Copy to clipboard\"},h.default.createElement(qe.CopyToClipboard,{text:this.props.textToCopy},h.default.createElement(\"svg\",{width:\"15\",height:\"16\"},h.default.createElement(\"use\",{href:\"#copy\",xlinkHref:\"#copy\"}))))}}class Yt extends h.default.Component{render(){return h.default.createElement(\"div\",{className:\"footer\"})}}class Xt extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"onFilterChange\",(e=>{const{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)}))}render(){const{specSelectors:e,layoutSelectors:t,getComponent:a}=this.props,n=a(\"Col\"),r=\"loading\"===e.loadingStatus(),s=\"failed\"===e.loadingStatus(),o=t.currentFilter(),l=[\"operation-filter-input\"];return s&&l.push(\"failed\"),r&&l.push(\"loading\"),h.default.createElement(\"div\",null,null===o||!1===o||\"false\"===o?null:h.default.createElement(\"div\",{className:\"filter-container\"},h.default.createElement(n,{className:\"filter wrapper\",mobile:12},h.default.createElement(\"input\",{className:l.join(\" \"),placeholder:\"Filter by tag\",type:\"text\",onChange:this.onFilterChange,value:!0===o||\"true\"===o?\"\":o,disabled:r}))))}}const Qt=Function.prototype;class ea extends h.PureComponent{constructor(e,t){super(e,t),(0,z.default)(this,\"updateValues\",(e=>{let{param:t,isExecute:a,consumesValue:n=\"\"}=e,r=/xml/i.test(n),s=/json/i.test(n),o=r?t.get(\"value_xml\"):t.get(\"value\");if(void 0!==o){let e=!o&&s?\"{}\":o;this.setState({value:e}),this.onChange(e,{isXml:r,isEditBox:a})}else r?this.onChange(this.sample(\"xml\"),{isXml:r,isEditBox:a}):this.onChange(this.sample(),{isEditBox:a})})),(0,z.default)(this,\"sample\",(e=>{let{param:t,fn:a}=this.props,n=a.inferSchema(t.toJS());return a.getSampleSchema(n,e,{includeWriteOnly:!0})})),(0,z.default)(this,\"onChange\",((e,t)=>{let{isEditBox:a,isXml:n}=t;this.setState({value:e,isEditBox:a}),this._onChange(e,n)})),(0,z.default)(this,\"_onChange\",((e,t)=>{(this.props.onChange||Qt)(e,t)})),(0,z.default)(this,\"handleOnChange\",(e=>{const{consumesValue:t}=this.props,a=/xml/i.test(t),n=e.target.value;this.onChange(n,{isXml:a,isEditBox:this.state.isEditBox})})),(0,z.default)(this,\"toggleIsEditBox\",(()=>this.setState((e=>({isEditBox:!e.isEditBox}))))),this.state={isEditBox:!1,value:\"\"}}componentDidMount(){this.updateValues.call(this,this.props)}UNSAFE_componentWillReceiveProps(e){this.updateValues.call(this,e)}render(){let{onChangeConsumes:e,param:t,isExecute:a,specSelectors:n,pathMethod:r,getConfigs:s,getComponent:o}=this.props;const l=o(\"Button\"),i=o(\"TextArea\"),c=o(\"highlightCode\"),u=o(\"contentType\");let d=(n?n.parameterWithMetaByIdentity(r,t):t).get(\"errors\",(0,y.List)()),p=n.contentTypeValues(r).get(\"requestContentType\"),m=this.props.consumes&&this.props.consumes.size?this.props.consumes:ea.defaultProp.consumes,{value:f,isEditBox:g}=this.state,v=null;return(0,Ke.O)(f)&&(v=\"json\"),h.default.createElement(\"div\",{className:\"body-param\",\"data-param-name\":t.get(\"name\"),\"data-param-in\":t.get(\"in\")},g&&a?h.default.createElement(i,{className:\"body-param__text\"+(d.count()?\" invalid\":\"\"),value:f,onChange:this.handleOnChange}):f&&h.default.createElement(c,{className:\"body-param__example\",language:v,getConfigs:s,value:f}),h.default.createElement(\"div\",{className:\"body-param-options\"},a?h.default.createElement(\"div\",{className:\"body-param-edit\"},h.default.createElement(l,{className:g?\"btn cancel body-param__example-edit\":\"btn edit body-param__example-edit\",onClick:this.toggleIsEditBox},g?\"Cancel\":\"Edit\")):null,h.default.createElement(\"label\",{htmlFor:\"\"},h.default.createElement(\"span\",null,\"Parameter content type\"),h.default.createElement(u,{value:p,contentTypes:m,onChange:e,className:\"body-param-content-type\",ariaLabel:\"Parameter content type\"}))))}}(0,z.default)(ea,\"defaultProp\",{consumes:(0,y.fromJS)([\"application/json\"]),param:(0,y.fromJS)({}),onChange:Qt,onChangeConsumes:Qt});var ta=ut(4624);class aa extends h.default.Component{render(){let{request:e,getConfigs:t}=this.props,a=(0,ta.requestSnippetGenerator_curl_bash)(e);const n=t(),r=(0,Me.default)(n,\"syntaxHighlight.activated\")?h.default.createElement(Te.d3,{language:\"bash\",className:\"curl microlight\",style:(0,Te.C2)((0,Me.default)(n,\"syntaxHighlight.theme\"))},a):h.default.createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:a});return h.default.createElement(\"div\",{className:\"curl-command\"},h.default.createElement(\"h4\",null,\"Curl\"),h.default.createElement(\"div\",{className:\"copy-to-clipboard\"},h.default.createElement(qe.CopyToClipboard,{text:a},h.default.createElement(\"button\",null))),h.default.createElement(\"div\",null,r))}}class na extends h.default.Component{constructor(){super(...arguments),(0,z.default)(this,\"onChange\",(e=>{this.setScheme(e.target.value)})),(0,z.default)(this,\"setScheme\",(e=>{let{path:t,method:a,specActions:n}=this.props;n.setScheme(e,t,a)}))}UNSAFE_componentWillMount(){let{schemes:e}=this.props;this.setScheme(e.first())}UNSAFE_componentWillReceiveProps(e){var t;this.props.currentScheme&&(0,me.default)(t=e.schemes).call(t,this.props.currentScheme)||this.setScheme(e.schemes.first())}render(){var e;let{schemes:t,currentScheme:a}=this.props;return h.default.createElement(\"label\",{htmlFor:\"schemes\"},h.default.createElement(\"span\",{className:\"schemes-title\"},\"Schemes\"),h.default.createElement(\"select\",{onChange:this.onChange,value:a},(0,m.default)(e=t.valueSeq()).call(e,(e=>h.default.createElement(\"option\",{value:e,key:e},e))).toArray()))}}class ra extends h.default.Component{render(){const{specActions:e,specSelectors:t,getComponent:a}=this.props,n=t.operationScheme(),r=t.schemes(),s=a(\"schemes\");return r&&r.size?h.default.createElement(s,{currentScheme:n,schemes:r,specActions:e}):null}}class sa extends h.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"toggleCollapsed\",(()=>{this.props.onToggle&&this.props.onToggle(this.props.modelName,!this.state.expanded),this.setState({expanded:!this.state.expanded})})),(0,z.default)(this,\"onLoad\",(e=>{if(e&&this.props.layoutSelectors){const t=this.props.layoutSelectors.getScrollToKey();y.default.is(t,this.props.specPath)&&this.toggleCollapsed(),this.props.layoutActions.readyToScroll(this.props.specPath,e.parentElement)}}));let{expanded:a,collapsedContent:n}=this.props;this.state={expanded:a,collapsedContent:n||sa.defaultProps.collapsedContent}}componentDidMount(){const{hideSelfOnExpand:e,expanded:t,modelName:a}=this.props;e&&t&&this.props.onToggle(a,t)}UNSAFE_componentWillReceiveProps(e){this.props.expanded!==e.expanded&&this.setState({expanded:e.expanded})}render(){const{title:e,classes:t}=this.props;return this.state.expanded&&this.props.hideSelfOnExpand?h.default.createElement(\"span\",{className:t||\"\"},this.props.children):h.default.createElement(\"span\",{className:t||\"\",ref:this.onLoad},h.default.createElement(\"button\",{\"aria-expanded\":this.state.expanded,className:\"model-box-control\",onClick:this.toggleCollapsed},e&&h.default.createElement(\"span\",{className:\"pointer\"},e),h.default.createElement(\"span\",{className:\"model-toggle\"+(this.state.expanded?\"\":\" collapsed\")}),!this.state.expanded&&h.default.createElement(\"span\",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}(0,z.default)(sa,\"defaultProps\",{collapsedContent:\"{...}\",expanded:!1,title:null,onToggle:()=>{},hideSelfOnExpand:!1,specPath:y.default.List([])});var oa=ut(1798),la=ut.n(oa);class ia extends h.default.Component{constructor(e,t){super(e,t),(0,z.default)(this,\"activeTab\",(e=>{let{target:{dataset:{name:t}}}=e;this.setState({activeTab:t})}));let{getConfigs:a,isExecute:n}=this.props,{defaultModelRendering:r}=a(),s=r;\"example\"!==r&&\"model\"!==r&&(s=\"example\"),n&&(s=\"example\"),this.state={activeTab:s}}UNSAFE_componentWillReceiveProps(e){e.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:\"example\"})}render(){let{getComponent:e,specSelectors:t,schema:a,example:n,isExecute:r,getConfigs:s,specPath:o,includeReadOnly:l,includeWriteOnly:i}=this.props,{defaultModelExpandDepth:c}=s();const u=e(\"ModelWrapper\"),d=e(\"highlightCode\"),p=la()(5).toString(\"base64\"),m=la()(5).toString(\"base64\"),f=la()(5).toString(\"base64\"),g=la()(5).toString(\"base64\");let y=t.isOAS3();return h.default.createElement(\"div\",{className:\"model-example\"},h.default.createElement(\"ul\",{className:\"tab\",role:\"tablist\"},h.default.createElement(\"li\",{className:(0,Pe.default)(\"tabitem\",{active:\"example\"===this.state.activeTab}),role:\"presentation\"},h.default.createElement(\"button\",{\"aria-controls\":m,\"aria-selected\":\"example\"===this.state.activeTab,className:\"tablinks\",\"data-name\":\"example\",id:p,onClick:this.activeTab,role:\"tab\"},r?\"Edit Value\":\"Example Value\")),a&&h.default.createElement(\"li\",{className:(0,Pe.default)(\"tabitem\",{active:\"model\"===this.state.activeTab}),role:\"presentation\"},h.default.createElement(\"button\",{\"aria-controls\":g,\"aria-selected\":\"model\"===this.state.activeTab,className:(0,Pe.default)(\"tablinks\",{inactive:r}),\"data-name\":\"model\",id:f,onClick:this.activeTab,role:\"tab\"},y?\"Schema\":\"Model\"))),\"example\"===this.state.activeTab&&h.default.createElement(\"div\",{\"aria-hidden\":\"example\"!==this.state.activeTab,\"aria-labelledby\":p,\"data-name\":\"examplePanel\",id:m,role:\"tabpanel\",tabIndex:\"0\"},n||h.default.createElement(d,{value:\"(no example available)\",getConfigs:s})),\"model\"===this.state.activeTab&&h.default.createElement(\"div\",{\"aria-hidden\":\"example\"===this.state.activeTab,\"aria-labelledby\":f,\"data-name\":\"modelPanel\",id:g,role:\"tabpanel\",tabIndex:\"0\"},h.default.createElement(u,{schema:a,getComponent:e,getConfigs:s,specSelectors:t,expandDepth:c,specPath:o,includeReadOnly:l,includeWriteOnly:i})))}}class ca extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onToggle\",((e,t)=>{this.props.layoutActions&&this.props.layoutActions.show(this.props.fullPath,t)}))}render(){let{getComponent:e,getConfigs:t}=this.props;const a=e(\"Model\");let n;return this.props.layoutSelectors&&(n=this.props.layoutSelectors.isShown(this.props.fullPath)),h.default.createElement(\"div\",{className:\"model-box\"},h.default.createElement(a,(0,xt.default)({},this.props,{getConfigs:t,expanded:n,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}var ua=ut(1543);class da extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"getSchemaBasePath\",(()=>this.props.specSelectors.isOAS3()?[\"components\",\"schemas\"]:[\"definitions\"])),(0,z.default)(this,\"getCollapsedContent\",(()=>\" \")),(0,z.default)(this,\"handleToggle\",((e,t)=>{const{layoutActions:a}=this.props;a.show([...this.getSchemaBasePath(),e],t),t&&this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(),e])})),(0,z.default)(this,\"onLoadModels\",(e=>{e&&this.props.layoutActions.readyToScroll(this.getSchemaBasePath(),e)})),(0,z.default)(this,\"onLoadModel\",(e=>{if(e){const t=e.getAttribute(\"data-name\");this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(),t],e)}}))}render(){var e;let{specSelectors:t,getComponent:a,layoutSelectors:n,layoutActions:r,getConfigs:s}=this.props,o=t.definitions(),{docExpansion:l,defaultModelsExpandDepth:i}=s();if(!o.size||i<0)return null;const c=this.getSchemaBasePath();let u=n.isShown(c,i>0&&\"none\"!==l);const d=t.isOAS3(),p=a(\"ModelWrapper\"),f=a(\"Collapse\"),g=a(\"ModelCollapse\"),v=a(\"JumpToPath\",!0);return h.default.createElement(\"section\",{className:u?\"models is-open\":\"models\",ref:this.onLoadModels},h.default.createElement(\"h4\",null,h.default.createElement(\"button\",{\"aria-expanded\":u,className:\"models-control\",onClick:()=>r.show(c,!u)},h.default.createElement(\"span\",null,d?\"Schemas\":\"Models\"),h.default.createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},h.default.createElement(\"use\",{xlinkHref:u?\"#large-arrow-up\":\"#large-arrow-down\"})))),h.default.createElement(f,{isOpened:u},(0,m.default)(e=o.entrySeq()).call(e,(e=>{let[o]=e;const l=[...c,o],u=y.default.List(l),d=t.specResolvedSubtree(l),m=t.specJson().getIn(l),f=y.Map.isMap(d)?d:y.default.Map(),E=y.Map.isMap(m)?m:y.default.Map(),S=f.get(\"title\")||E.get(\"title\")||o,w=n.isShown(l,!1);w&&0===f.size&&E.size>0&&this.props.specActions.requestResolvedSubtree(l);const b=h.default.createElement(p,{name:o,expandDepth:i,schema:f||y.default.Map(),displayName:S,fullPath:l,specPath:u,getComponent:a,specSelectors:t,getConfigs:s,layoutSelectors:n,layoutActions:r,includeReadOnly:!0,includeWriteOnly:!0}),x=h.default.createElement(\"span\",{className:\"model-box\"},h.default.createElement(\"span\",{className:\"model model-title\"},S));return h.default.createElement(\"div\",{id:`model-${o}`,className:\"model-container\",key:`models-section-${o}`,\"data-name\":o,ref:this.onLoadModel},h.default.createElement(\"span\",{className:\"models-jump-to-path\"},h.default.createElement(v,{specPath:u})),h.default.createElement(g,{classes:\"model-box\",collapsedContent:this.getCollapsedContent(o),onToggle:this.handleToggle,title:x,displayName:S,modelName:o,specPath:u,layoutSelectors:n,layoutActions:r,hideSelfOnExpand:!0,expanded:i>0&&w},b))})).toArray()))}}const pa=e=>{let{value:t,getComponent:a}=e,n=a(\"ModelCollapse\"),r=h.default.createElement(\"span\",null,\"Array [ \",t.count(),\" ]\");return h.default.createElement(\"span\",{className:\"prop-enum\"},\"Enum:\",h.default.createElement(\"br\",null),h.default.createElement(n,{collapsedContent:r},\"[ \",t.join(\", \"),\" ]\"))};class ma extends h.Component{render(){var e,t,a,r;let{schema:o,name:l,displayName:i,isRef:c,getComponent:d,getConfigs:p,depth:f,onToggle:g,expanded:v,specPath:E,...S}=this.props,{specSelectors:w,expandDepth:b,includeReadOnly:_,includeWriteOnly:C}=S;const{isOAS3:j}=w;if(!o)return null;const{showExtensions:O}=p();let N=o.get(\"description\"),k=o.get(\"properties\"),A=o.get(\"additionalProperties\"),I=o.get(\"title\")||i||l,R=o.get(\"required\"),P=(0,n.default)(o).call(o,((e,t)=>{var a;return-1!==(0,W.default)(a=[\"maxProperties\",\"minProperties\",\"nullable\",\"example\"]).call(a,t)})),T=o.get(\"deprecated\"),M=o.getIn([\"externalDocs\",\"url\"]),D=o.getIn([\"externalDocs\",\"description\"]);const L=d(\"JumpToPath\",!0),q=d(\"Markdown\",!0),B=d(\"Model\"),U=d(\"ModelCollapse\"),J=d(\"Property\"),$=d(\"Link\"),K=()=>h.default.createElement(\"span\",{className:\"model-jump-to-path\"},h.default.createElement(L,{specPath:E})),V=h.default.createElement(\"span\",null,h.default.createElement(\"span\",null,\"{\"),\"...\",h.default.createElement(\"span\",null,\"}\"),c?h.default.createElement(K,null):\"\"),F=w.isOAS3()?o.get(\"anyOf\"):null,z=w.isOAS3()?o.get(\"oneOf\"):null,H=w.isOAS3()?o.get(\"not\"):null,G=I&&h.default.createElement(\"span\",{className:\"model-title\"},c&&o.get(\"$$ref\")&&h.default.createElement(\"span\",{className:\"model-hint\"},o.get(\"$$ref\")),h.default.createElement(\"span\",{className:\"model-title__text\"},I));return h.default.createElement(\"span\",{className:\"model\"},h.default.createElement(U,{modelName:l,title:G,onToggle:g,expanded:!!v||f<=b,collapsedContent:V},h.default.createElement(\"span\",{className:\"brace-open object\"},\"{\"),c?h.default.createElement(K,null):null,h.default.createElement(\"span\",{className:\"inner-object\"},h.default.createElement(\"table\",{className:\"model\"},h.default.createElement(\"tbody\",null,N?h.default.createElement(\"tr\",{className:\"description\"},h.default.createElement(\"td\",null,\"description:\"),h.default.createElement(\"td\",null,h.default.createElement(q,{source:N}))):null,M&&h.default.createElement(\"tr\",{className:\"external-docs\"},h.default.createElement(\"td\",null,\"externalDocs:\"),h.default.createElement(\"td\",null,h.default.createElement($,{target:\"_blank\",href:(0,x.Nm)(M)},D||M))),T?h.default.createElement(\"tr\",{className:\"property\"},h.default.createElement(\"td\",null,\"deprecated:\"),h.default.createElement(\"td\",null,\"true\")):null,k&&k.size?(0,m.default)(e=(0,n.default)(t=k.entrySeq()).call(t,(e=>{let[,t]=e;return(!t.get(\"readOnly\")||_)&&(!t.get(\"writeOnly\")||C)}))).call(e,(e=>{let[t,a]=e,n=j()&&a.get(\"deprecated\"),r=y.List.isList(R)&&R.contains(t),s=[\"property-row\"];return n&&s.push(\"deprecated\"),r&&s.push(\"required\"),h.default.createElement(\"tr\",{key:t,className:s.join(\" \")},h.default.createElement(\"td\",null,t,r&&h.default.createElement(\"span\",{className:\"star\"},\"*\")),h.default.createElement(\"td\",null,h.default.createElement(B,(0,xt.default)({key:`object-${l}-${t}_${a}`},S,{required:r,getComponent:d,specPath:E.push(\"properties\",t),getConfigs:p,schema:a,depth:f+1}))))})).toArray():null,O?h.default.createElement(\"tr\",null,h.default.createElement(\"td\",null,\" \")):null,O?(0,m.default)(a=o.entrySeq()).call(a,(e=>{let[t,a]=e;if(\"x-\"!==(0,u.default)(t).call(t,0,2))return;const n=a?a.toJS?a.toJS():a:null;return h.default.createElement(\"tr\",{key:t,className:\"extension\"},h.default.createElement(\"td\",null,t),h.default.createElement(\"td\",null,(0,s.default)(n)))})).toArray():null,A&&A.size?h.default.createElement(\"tr\",null,h.default.createElement(\"td\",null,\"< * >:\"),h.default.createElement(\"td\",null,h.default.createElement(B,(0,xt.default)({},S,{required:!1,getComponent:d,specPath:E.push(\"additionalProperties\"),getConfigs:p,schema:A,depth:f+1})))):null,F?h.default.createElement(\"tr\",null,h.default.createElement(\"td\",null,\"anyOf ->\"),h.default.createElement(\"td\",null,(0,m.default)(F).call(F,((e,t)=>h.default.createElement(\"div\",{key:t},h.default.createElement(B,(0,xt.default)({},S,{required:!1,getComponent:d,specPath:E.push(\"anyOf\",t),getConfigs:p,schema:e,depth:f+1}))))))):null,z?h.default.createElement(\"tr\",null,h.default.createElement(\"td\",null,\"oneOf ->\"),h.default.createElement(\"td\",null,(0,m.default)(z).call(z,((e,t)=>h.default.createElement(\"div\",{key:t},h.default.createElement(B,(0,xt.default)({},S,{required:!1,getComponent:d,specPath:E.push(\"oneOf\",t),getConfigs:p,schema:e,depth:f+1}))))))):null,H?h.default.createElement(\"tr\",null,h.default.createElement(\"td\",null,\"not ->\"),h.default.createElement(\"td\",null,h.default.createElement(\"div\",null,h.default.createElement(B,(0,xt.default)({},S,{required:!1,getComponent:d,specPath:E.push(\"not\"),getConfigs:p,schema:H,depth:f+1}))))):null))),h.default.createElement(\"span\",{className:\"brace-close\"},\"}\")),P.size?(0,m.default)(r=P.entrySeq()).call(r,(e=>{let[t,a]=e;return h.default.createElement(J,{key:`${t}-${a}`,propKey:t,propVal:a,propClass:\"property\"})})):null)}}class fa extends h.Component{render(){var e;let{getComponent:t,getConfigs:a,schema:r,depth:s,expandDepth:o,name:l,displayName:i,specPath:c}=this.props,u=r.get(\"description\"),d=r.get(\"items\"),p=r.get(\"title\")||i||l,f=(0,n.default)(r).call(r,((e,t)=>{var a;return-1===(0,W.default)(a=[\"type\",\"items\",\"description\",\"$$ref\",\"externalDocs\"]).call(a,t)})),g=r.getIn([\"externalDocs\",\"url\"]),y=r.getIn([\"externalDocs\",\"description\"]);const v=t(\"Markdown\",!0),E=t(\"ModelCollapse\"),S=t(\"Model\"),w=t(\"Property\"),b=t(\"Link\"),_=p&&h.default.createElement(\"span\",{className:\"model-title\"},h.default.createElement(\"span\",{className:\"model-title__text\"},p));return h.default.createElement(\"span\",{className:\"model\"},h.default.createElement(E,{title:_,expanded:s<=o,collapsedContent:\"[...]\"},\"[\",f.size?(0,m.default)(e=f.entrySeq()).call(e,(e=>{let[t,a]=e;return h.default.createElement(w,{key:`${t}-${a}`,propKey:t,propVal:a,propClass:\"property\"})})):null,u?h.default.createElement(v,{source:u}):f.size?h.default.createElement(\"div\",{className:\"markdown\"}):null,g&&h.default.createElement(\"div\",{className:\"external-docs\"},h.default.createElement(b,{target:\"_blank\",href:(0,x.Nm)(g)},y||g)),h.default.createElement(\"span\",null,h.default.createElement(S,(0,xt.default)({},this.props,{getConfigs:a,specPath:c.push(\"items\"),name:null,schema:d,required:!1,depth:s+1}))),\"]\"))}}const ha=\"property primitive\";class ga extends h.Component{render(){var e,t,a;let{schema:r,getComponent:s,getConfigs:o,name:l,displayName:i,depth:c,expandDepth:u}=this.props;const{showExtensions:d}=o();if(!r||!r.get)return h.default.createElement(\"div\",null);let p=r.get(\"type\"),f=r.get(\"format\"),g=r.get(\"xml\"),y=r.get(\"enum\"),v=r.get(\"title\")||i||l,E=r.get(\"description\"),S=(0,x.nX)(r),w=(0,n.default)(r).call(r,((e,t)=>{var a;return-1===(0,W.default)(a=[\"enum\",\"type\",\"format\",\"description\",\"$$ref\",\"externalDocs\"]).call(a,t)})).filterNot(((e,t)=>S.has(t))),b=r.getIn([\"externalDocs\",\"url\"]),_=r.getIn([\"externalDocs\",\"description\"]);const C=s(\"Markdown\",!0),j=s(\"EnumModel\"),O=s(\"Property\"),N=s(\"ModelCollapse\"),k=s(\"Link\"),A=v&&h.default.createElement(\"span\",{className:\"model-title\"},h.default.createElement(\"span\",{className:\"model-title__text\"},v));return h.default.createElement(\"span\",{className:\"model\"},h.default.createElement(N,{title:A,expanded:c<=u,collapsedContent:\"[...]\",hideSelfOnExpand:u!==c},h.default.createElement(\"span\",{className:\"prop\"},l&&c>1&&h.default.createElement(\"span\",{className:\"prop-name\"},v),h.default.createElement(\"span\",{className:\"prop-type\"},p),f&&h.default.createElement(\"span\",{className:\"prop-format\"},\"($\",f,\")\"),w.size?(0,m.default)(e=w.entrySeq()).call(e,(e=>{let[t,a]=e;return h.default.createElement(O,{key:`${t}-${a}`,propKey:t,propVal:a,propClass:ha})})):null,d&&S.size?(0,m.default)(t=S.entrySeq()).call(t,(e=>{let[t,a]=e;return h.default.createElement(O,{key:`${t}-${a}`,propKey:t,propVal:a,propClass:ha})})):null,E?h.default.createElement(C,{source:E}):null,b&&h.default.createElement(\"div\",{className:\"external-docs\"},h.default.createElement(k,{target:\"_blank\",href:(0,x.Nm)(b)},_||b)),g&&g.size?h.default.createElement(\"span\",null,h.default.createElement(\"br\",null),h.default.createElement(\"span\",{className:ha},\"xml:\"),(0,m.default)(a=g.entrySeq()).call(a,(e=>{let[t,a]=e;return h.default.createElement(\"span\",{key:`${t}-${a}`,className:ha},h.default.createElement(\"br\",null),\"   \",t,\": \",String(a))})).toArray()):null,y&&h.default.createElement(j,{value:y,getComponent:s}))))}}const ya=e=>{let{propKey:t,propVal:a,propClass:n}=e;return h.default.createElement(\"span\",{className:n},h.default.createElement(\"br\",null),t,\": \",String(a))};class va extends h.default.Component{render(){const{onTryoutClick:e,onCancelClick:t,onResetClick:a,enabled:n,hasUserEditedBody:r,isOAS3:s}=this.props,o=s&&r;return h.default.createElement(\"div\",{className:o?\"try-out btn-group\":\"try-out\"},n?h.default.createElement(\"button\",{className:\"btn try-out__btn cancel\",onClick:t},\"Cancel\"):h.default.createElement(\"button\",{className:\"btn try-out__btn\",onClick:e},\"Try it out \"),o&&h.default.createElement(\"button\",{className:\"btn try-out__btn reset\",onClick:a},\"Reset\"))}}(0,z.default)(va,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1});class Ea extends h.default.PureComponent{render(){const{bypass:e,isSwagger2:t,isOAS3:a,alsoShow:n}=this.props;return e?h.default.createElement(\"div\",null,this.props.children):t&&a?h.default.createElement(\"div\",{className:\"version-pragma\"},n,h.default.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},h.default.createElement(\"div\",null,h.default.createElement(\"h3\",null,\"Unable to render this definition\"),h.default.createElement(\"p\",null,h.default.createElement(\"code\",null,\"swagger\"),\" and \",h.default.createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),h.default.createElement(\"p\",null,\"Supported version fields are \",h.default.createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",h.default.createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",h.default.createElement(\"code\",null,\"openapi: 3.0.0\"),\").\")))):t||a?h.default.createElement(\"div\",null,this.props.children):h.default.createElement(\"div\",{className:\"version-pragma\"},n,h.default.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},h.default.createElement(\"div\",null,h.default.createElement(\"h3\",null,\"Unable to render this definition\"),h.default.createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),h.default.createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",h.default.createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",h.default.createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",h.default.createElement(\"code\",null,\"openapi: 3.0.0\"),\").\"))))}}(0,z.default)(Ea,\"defaultProps\",{alsoShow:null,children:null,bypass:!1});const Sa=e=>{let{version:t}=e;return h.default.createElement(\"small\",null,h.default.createElement(\"pre\",{className:\"version\"},\" \",t,\" \"))},wa=e=>{let{enabled:t,path:a,text:n}=e;return h.default.createElement(\"a\",{className:\"nostyle\",onClick:t?e=>e.preventDefault():null,href:t?`#/${a}`:null},h.default.createElement(\"span\",null,n))},ba=()=>h.default.createElement(\"div\",null,h.default.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",xmlnsXlink:\"http://www.w3.org/1999/xlink\",className:\"svg-assets\"},h.default.createElement(\"defs\",null,h.default.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"unlocked\"},h.default.createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"locked\"},h.default.createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"close\"},h.default.createElement(\"path\",{d:\"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow\"},h.default.createElement(\"path\",{d:\"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-down\"},h.default.createElement(\"path\",{d:\"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-up\"},h.default.createElement(\"path\",{d:\"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"jump-to\"},h.default.createElement(\"path\",{d:\"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"expand\"},h.default.createElement(\"path\",{d:\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"})),h.default.createElement(\"symbol\",{viewBox:\"0 0 15 16\",id:\"copy\"},h.default.createElement(\"g\",{transform:\"translate(2, -1)\"},h.default.createElement(\"path\",{fill:\"#ffffff\",fillRule:\"evenodd\",d:\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"}))))));var xa=ut(5466);class _a extends h.default.Component{render(){const{errSelectors:e,specSelectors:t,getComponent:a}=this.props,n=a(\"SvgAssets\"),r=a(\"InfoContainer\",!0),s=a(\"VersionPragmaFilter\"),o=a(\"operations\",!0),l=a(\"Models\",!0),i=a(\"Webhooks\",!0),c=a(\"Row\"),u=a(\"Col\"),d=a(\"errors\",!0),p=a(\"ServersContainer\",!0),m=a(\"SchemesContainer\",!0),f=a(\"AuthorizeBtnContainer\",!0),g=a(\"FilterContainer\",!0),y=t.isSwagger2(),v=t.isOAS3(),E=t.isOAS31(),S=!t.specStr(),w=t.loadingStatus();let b=null;if(\"loading\"===w&&(b=h.default.createElement(\"div\",{className:\"info\"},h.default.createElement(\"div\",{className:\"loading-container\"},h.default.createElement(\"div\",{className:\"loading\"})))),\"failed\"===w&&(b=h.default.createElement(\"div\",{className:\"info\"},h.default.createElement(\"div\",{className:\"loading-container\"},h.default.createElement(\"h4\",{className:\"title\"},\"Failed to load API definition.\"),h.default.createElement(d,null)))),\"failedConfig\"===w){const t=e.lastError(),a=t?t.get(\"message\"):\"\";b=h.default.createElement(\"div\",{className:\"info failed-config\"},h.default.createElement(\"div\",{className:\"loading-container\"},h.default.createElement(\"h4\",{className:\"title\"},\"Failed to load remote configuration.\"),h.default.createElement(\"p\",null,a)))}if(!b&&S&&(b=h.default.createElement(\"h4\",null,\"No API definition provided.\")),b)return h.default.createElement(\"div\",{className:\"swagger-ui\"},h.default.createElement(\"div\",{className:\"loading-container\"},b));const x=t.servers(),_=t.schemes(),C=x&&x.size,j=_&&_.size,O=!!t.securityDefinitions();return h.default.createElement(\"div\",{className:\"swagger-ui\"},h.default.createElement(n,null),h.default.createElement(s,{isSwagger2:y,isOAS3:v,alsoShow:h.default.createElement(d,null)},h.default.createElement(d,null),h.default.createElement(c,{className:\"information-container\"},h.default.createElement(u,{mobile:12},h.default.createElement(r,null))),C||j||O?h.default.createElement(\"div\",{className:\"scheme-container\"},h.default.createElement(u,{className:\"schemes wrapper\",mobile:12},C?h.default.createElement(p,null):null,j?h.default.createElement(m,null):null,O?h.default.createElement(f,null):null)):null,h.default.createElement(g,null),h.default.createElement(c,null,h.default.createElement(u,{mobile:12,desktop:12},h.default.createElement(o,null))),E&&h.default.createElement(c,{className:\"webhooks-container\"},h.default.createElement(u,{mobile:12,desktop:12},h.default.createElement(i,null))),h.default.createElement(c,null,h.default.createElement(u,{mobile:12,desktop:12},h.default.createElement(l,null)))))}}const Ca=(e=>{var t={};return ut.d(t,e),t})({default:()=>lt.default}),ja={value:\"\",onChange:()=>{},schema:{},keyName:\"\",required:!1,errors:(0,y.List)()};class Oa extends h.Component{componentDidMount(){const{dispatchInitialValue:e,value:t,onChange:a}=this.props;e?a(t):!1===e&&a(\"\")}render(){let{schema:e,errors:t,value:a,onChange:n,getComponent:r,fn:s,disabled:o}=this.props;const l=e&&e.get?e.get(\"format\"):null,i=e&&e.get?e.get(\"type\"):null;let c=e=>r(e,!1,{failSilently:!0}),u=i?c(l?`JsonSchema_${i}_${l}`:`JsonSchema_${i}`):r(\"JsonSchema_string\");return u||(u=r(\"JsonSchema_string\")),h.default.createElement(u,(0,xt.default)({},this.props,{errors:t,fn:s,getComponent:r,value:a,onChange:n,schema:e,disabled:o}))}}(0,z.default)(Oa,\"defaultProps\",ja);class Na extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onChange\",(e=>{const t=this.props.schema&&\"file\"===this.props.schema.get(\"type\")?e.target.files[0]:e.target.value;this.props.onChange(t,this.props.keyName)})),(0,z.default)(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,schema:a,errors:n,required:r,description:s,disabled:o}=this.props;const l=a&&a.get?a.get(\"enum\"):null,i=a&&a.get?a.get(\"format\"):null,c=a&&a.get?a.get(\"type\"):null,u=a&&a.get?a.get(\"in\"):null;if(t||(t=\"\"),n=n.toJS?n.toJS():[],l){const a=e(\"Select\");return h.default.createElement(a,{className:n.length?\"invalid\":\"\",title:n.length?n:\"\",allowedValues:[...l],value:t,allowEmptyValue:!r,disabled:o,onChange:this.onEnumChange})}const d=o||u&&\"formData\"===u&&!(\"FormData\"in window),p=e(\"Input\");return c&&\"file\"===c?h.default.createElement(p,{type:\"file\",className:n.length?\"invalid\":\"\",title:n.length?n:\"\",onChange:this.onChange,disabled:d}):h.default.createElement(Ca.default,{type:i&&\"password\"===i?\"password\":\"text\",className:n.length?\"invalid\":\"\",title:n.length?n:\"\",value:t,minLength:0,debounceTimeout:350,placeholder:s,onChange:this.onChange,disabled:d})}}(0,z.default)(Na,\"defaultProps\",ja);class ka extends h.PureComponent{constructor(e,t){super(e,t),(0,z.default)(this,\"onChange\",(()=>{this.props.onChange(this.state.value)})),(0,z.default)(this,\"onItemChange\",((e,t)=>{this.setState((a=>{let{value:n}=a;return{value:n.set(t,e)}}),this.onChange)})),(0,z.default)(this,\"removeItem\",(e=>{this.setState((t=>{let{value:a}=t;return{value:a.delete(e)}}),this.onChange)})),(0,z.default)(this,\"addItem\",(()=>{const{fn:e}=this.props;let t=Ma(this.state.value);this.setState((()=>({value:t.push(e.getSampleSchema(this.state.schema.get(\"items\"),!1,{includeWriteOnly:!0}))})),this.onChange)})),(0,z.default)(this,\"onEnumChange\",(e=>{this.setState((()=>({value:e})),this.onChange)})),this.state={value:Ma(e.value),schema:e.schema}}UNSAFE_componentWillReceiveProps(e){const t=Ma(e.value);t!==this.state.value&&this.setState({value:t}),e.schema!==this.state.schema&&this.setState({schema:e.schema})}render(){var e;let{getComponent:t,required:a,schema:r,errors:s,fn:o,disabled:l}=this.props;s=s.toJS?s.toJS():(0,d.default)(s)?s:[];const i=(0,n.default)(s).call(s,(e=>\"string\"==typeof e)),c=(0,m.default)(e=(0,n.default)(s).call(s,(e=>void 0!==e.needRemove))).call(e,(e=>e.error)),u=this.state.value,p=!!(u&&u.count&&u.count()>0),f=r.getIn([\"items\",\"enum\"]),g=r.getIn([\"items\",\"type\"]),v=r.getIn([\"items\",\"format\"]),E=r.get(\"items\");let S,w=!1,b=\"file\"===g||\"string\"===g&&\"binary\"===v;if(g&&v?S=t(`JsonSchema_${g}_${v}`):\"boolean\"!==g&&\"array\"!==g&&\"object\"!==g||(S=t(`JsonSchema_${g}`)),S||b||(w=!0),f){const e=t(\"Select\");return h.default.createElement(e,{className:s.length?\"invalid\":\"\",title:s.length?s:\"\",multiple:!0,value:u,disabled:l,allowedValues:f,allowEmptyValue:!a,onChange:this.onEnumChange})}const x=t(\"Button\");return h.default.createElement(\"div\",{className:\"json-schema-array\"},p?(0,m.default)(u).call(u,((e,a)=>{var r;const i=(0,y.fromJS)([...(0,m.default)(r=(0,n.default)(s).call(s,(e=>e.index===a))).call(r,(e=>e.error))]);return h.default.createElement(\"div\",{key:a,className:\"json-schema-form-item\"},b?h.default.createElement(Ia,{value:e,onChange:e=>this.onItemChange(e,a),disabled:l,errors:i,getComponent:t}):w?h.default.createElement(Aa,{value:e,onChange:e=>this.onItemChange(e,a),disabled:l,errors:i}):h.default.createElement(S,(0,xt.default)({},this.props,{value:e,onChange:e=>this.onItemChange(e,a),disabled:l,errors:i,schema:E,getComponent:t,fn:o})),l?null:h.default.createElement(x,{className:`btn btn-sm json-schema-form-item-remove ${c.length?\"invalid\":null}`,title:c.length?c:\"\",onClick:()=>this.removeItem(a)},\" - \"))})):null,l?null:h.default.createElement(x,{className:`btn btn-sm json-schema-form-item-add ${i.length?\"invalid\":null}`,title:i.length?i:\"\",onClick:this.addItem},\"Add \",g?`${g} `:\"\",\"item\"))}}(0,z.default)(ka,\"defaultProps\",ja);class Aa extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onChange\",(e=>{const t=e.target.value;this.props.onChange(t,this.props.keyName)}))}render(){let{value:e,errors:t,description:a,disabled:n}=this.props;return e||(e=\"\"),t=t.toJS?t.toJS():[],h.default.createElement(Ca.default,{type:\"text\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",value:e,minLength:0,debounceTimeout:350,placeholder:a,onChange:this.onChange,disabled:n})}}(0,z.default)(Aa,\"defaultProps\",ja);class Ia extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onFileChange\",(e=>{const t=e.target.files[0];this.props.onChange(t,this.props.keyName)}))}render(){let{getComponent:e,errors:t,disabled:a}=this.props;const n=e(\"Input\"),r=a||!(\"FormData\"in window);return h.default.createElement(n,{type:\"file\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",onChange:this.onFileChange,disabled:r})}}(0,z.default)(Ia,\"defaultProps\",ja);class Ra extends h.Component{constructor(){super(...arguments),(0,z.default)(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,errors:a,schema:n,required:r,disabled:s}=this.props;a=a.toJS?a.toJS():[];let o=n&&n.get?n.get(\"enum\"):null,l=!o||!r,i=!o&&[\"true\",\"false\"];const c=e(\"Select\");return h.default.createElement(c,{className:a.length?\"invalid\":\"\",title:a.length?a:\"\",value:String(t),disabled:s,allowedValues:o?[...o]:i,allowEmptyValue:l,onChange:this.onEnumChange})}}(0,z.default)(Ra,\"defaultProps\",ja);const Pa=e=>(0,m.default)(e).call(e,(e=>{const t=void 0!==e.propKey?e.propKey:e.index;let a=\"string\"==typeof e?e:\"string\"==typeof e.error?e.error:null;if(!t&&a)return a;let n=e.error,r=`/${e.propKey}`;for(;\"object\"==typeof n;){const e=void 0!==n.propKey?n.propKey:n.index;if(void 0===e)break;if(r+=`/${e}`,!n.error)break;n=n.error}return`${r}: ${n}`}));class Ta extends h.PureComponent{constructor(){super(),(0,z.default)(this,\"onChange\",(e=>{this.props.onChange(e)})),(0,z.default)(this,\"handleOnChange\",(e=>{const t=e.target.value;this.onChange(t)}))}render(){let{getComponent:e,value:t,errors:a,disabled:n}=this.props;const r=e(\"TextArea\");return a=a.toJS?a.toJS():(0,d.default)(a)?a:[],h.default.createElement(\"div\",null,h.default.createElement(r,{className:(0,Pe.default)({invalid:a.length}),title:a.length?Pa(a).join(\", \"):\"\",value:(0,x.Pz)(t),disabled:n,onChange:this.handleOnChange}))}}function Ma(e){return y.List.isList(e)?e:(0,d.default)(e)?(0,y.fromJS)(e):(0,y.List)()}function Da(){let a={components:{App:Z,authorizationPopup:Y,authorizeBtn:X,AuthorizeBtnContainer:Q,authorizeOperationBtn:ee,auths:te,AuthItem:ae,authError:ne,oauth2:he,apiKeyAuth:re,basicAuth:se,clear:ge,liveResponse:Ee,InitializedInput:Bt,info:Kt,InfoContainer:Vt,InfoUrl:Jt,InfoBasePath:Ut,Contact:zt,License:Ht,JumpToPath:Gt,CopyToClipboardBtn:Zt,onlineValidatorBadge:Se.Z,operations:we,operation:_e,OperationSummary:je,OperationSummaryMethod:Oe,OperationSummaryPath:ke,highlightCode:Ue,responses:Je,response:Ve,ResponseExtension:Fe,responseBody:Ge,parameters:Ye,parameterRow:ft,execute:gt,headers:yt,errors:vt,contentType:bt,overview:Lt,footer:Yt,FilterContainer:Xt,ParamBody:ea,curl:aa,schemes:na,SchemesContainer:ra,modelExample:ia,ModelWrapper:ca,ModelCollapse:sa,Model:ua.Z,Models:da,EnumModel:pa,ObjectModel:ma,ArrayModel:fa,PrimitiveModel:ga,Property:ya,TryItOutButton:va,Markdown:xa.Z,BaseLayout:_a,VersionPragmaFilter:Ea,VersionStamp:Sa,OperationExt:Ae,OperationExtRow:Ie,ParameterExt:it,ParameterIncludeEmpty:pt,OperationTag:xe,OperationContainer:G,DeepLink:wa,SvgAssets:ba,Example:oe,ExamplesSelect:ie,ExamplesSelectValueRetainer:ue}},n={components:e},r={components:t};return[J.default,B.default,D.default,P.default,R.default,A.default,I.default,T.default,a,n,L.default,r,q.default,U.default,$.default,K.default,V.default,M.default,(0,F.default)()]}(0,z.default)(Ta,\"defaultProps\",ja);var La=ut(7451),qa=ut(9806),Ba=ut(7139);function Ua(){return[Da,La.default,Ba.default,qa.default]}var Ja=ut(5308);const{GIT_DIRTY:$a,GIT_COMMIT:Ka,PACKAGE_VERSION:Va,BUILD_TIME:Fa}={PACKAGE_VERSION:\"5.1.0\",GIT_COMMIT:\"gc1cc7a3\",GIT_DIRTY:!0,BUILD_TIME:\"Mon, 19 Jun 2023 09:16:14 GMT\"};function za(e){var t;b.Z.versions=b.Z.versions||{},b.Z.versions.swaggerUi={version:Va,gitRevision:Ka,gitDirty:$a,buildTimestamp:Fa};const o={dom_id:null,domNode:null,spec:{},url:\"\",urls:null,layout:\"BaseLayout\",docExpansion:\"list\",maxDisplayedTags:null,filter:null,validatorUrl:\"https://validator.swagger.io/validator\",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,(0,a.default)(t=window.location.pathname).call(t,\"/\"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:e=>e,responseInterceptor:e=>e,showMutatedRequest:!0,defaultModelRendering:\"example\",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:\"cURL (bash)\",syntax:\"bash\"},curl_powershell:{title:\"cURL (PowerShell)\",syntax:\"powershell\"},curl_cmd:{title:\"cURL (CMD)\",syntax:\"bash\"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],queryConfigEnabled:!1,presets:[Ua],plugins:[],pluginsOptions:{pluginLoadType:\"legacy\"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:\"agate\"}};let i=e.queryConfigEnabled?(0,x.UG)():{};const c=e.domNode;delete e.domNode;const u=l()({},o,e,i),d={system:{configs:u.configs},plugins:u.presets,pluginsOptions:u.pluginsOptions,state:l()({layout:{layout:u.layout,filter:(0,n.default)(u)},spec:{spec:\"\",url:u.url},requestSnippets:u.requestSnippets},u.initialState)};if(u.initialState)for(var p in u.initialState)Object.prototype.hasOwnProperty.call(u.initialState,p)&&void 0===u.initialState[p]&&delete d.state[p];var m=new C(d);m.register([u.plugins,()=>({fn:u.fn,components:u.components,state:u.state})]);var f=m.getSystem();const h=e=>{let t=f.specSelectors.getLocalConfig?f.specSelectors.getLocalConfig():{},a=l()({},t,u,e||{},i);if(c&&(a.domNode=c),m.setConfigs(a),f.configsActions.loaded(),null!==e&&(!i.url&&\"object\"==typeof a.spec&&(0,r.default)(a.spec).length?(f.specActions.updateUrl(\"\"),f.specActions.updateLoadingStatus(\"success\"),f.specActions.updateSpec((0,s.default)(a.spec))):f.specActions.download&&a.url&&!a.urls&&(f.specActions.updateUrl(a.url),f.specActions.download(a.url))),a.domNode)f.render(a.domNode,\"App\");else if(a.dom_id){let e=document.querySelector(a.dom_id);f.render(e,\"App\")}else null===a.dom_id||null===a.domNode||console.error(\"Skipped rendering: no `dom_id` or `domNode` was specified\");return f},g=i.config||u.configUrl;return g&&f.specActions&&f.specActions.getConfigByUrl?(f.specActions.getConfigByUrl({url:g,loadRemoteConfig:!0,requestInterceptor:u.requestInterceptor,responseInterceptor:u.responseInterceptor},h),f):h()}za.presets={apis:Ua},za.plugins=Ja.default;const Wa=za})();var pt=dt.Z;export{pt as default};\n//# sourceMappingURL=swagger-ui-es-bundle-core.js.map"
  },
  {
    "path": "data/web/api/swagger-ui-es-bundle.js",
    "content": "/*! For license information please see swagger-ui-es-bundle.js.LICENSE.txt */\n(()=>{var e={17967:(e,t)=>{\"use strict\";t.N=void 0;var n=/^([^\\w]*)(javascript|data|vbscript)/im,r=/&#(\\w+)(^\\w|;)?/g,o=/&(newline|tab);/gi,s=/[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim,i=/^.+(:|&colon;)/gim,a=[\".\",\"/\"];t.N=function(e){var t,l=(t=e||\"\",t.replace(r,(function(e,t){return String.fromCharCode(t)}))).replace(o,\"\").replace(s,\"\").trim();if(!l)return\"about:blank\";if(function(e){return a.indexOf(e[0])>-1}(l))return l;var c=l.match(i);if(!c)return l;var u=c[0];return n.test(u)?\"about:blank\":l}},53795:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>P});var r=n(23101),o=n.n(r),s=n(61125),i=n.n(s),a=n(11882),l=n.n(a),c=n(97606),u=n.n(c),p=n(67294),h=n(43393);function f(e){return f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},f(e)}function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function y(e){return y=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},y(e)}function v(e,t){return v=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},v(e,t)}function b(e,t){return!t||\"object\"!=typeof t&&\"function\"!=typeof t?function(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}(e):t}var w={};function E(e,t,n){return function(e){return null==e}(e)?n:function(e){return null!==e&&\"object\"===f(e)&&\"function\"==typeof e.get&&\"function\"==typeof e.has}(e)?e.has(t)?e.get(t):n:hasOwnProperty.call(e,t)?e[t]:n}function x(e,t,n){for(var r=0;r!==t.length;)if((e=E(e,t[r++],w))===w)return n;return e}function S(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=function(e,t){return function(n){if(\"string\"==typeof n)return(0,h.is)(t[n],e[n]);if(Array.isArray(n))return(0,h.is)(x(t,n),x(e,n));throw new TypeError(\"Invalid key: expected Array or string: \"+n)}}(t,n),o=e||Object.keys(function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?g(n,!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g(n).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},n,{},t));return o.every(r)}const _=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,t),b(this,y(t).apply(this,arguments))}var n,r,o;return 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&&v(e,t)}(t,e),n=t,r=[{key:\"shouldComponentUpdate\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return!S(this.updateOnProps,this.props,e,\"updateOnProps\")||!S(this.updateOnStates,this.state,t,\"updateOnStates\")}}],r&&d(n.prototype,r),o&&d(n,o),t}(p.Component);var j=n(23930),O=n.n(j),k=n(45697),A=n.n(k);const C=e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}};class P extends _{constructor(){super(...arguments),i()(this,\"getModelName\",(e=>-1!==l()(e).call(e,\"#/definitions/\")?C(e.replace(/^.*#\\/definitions\\//,\"\")):-1!==l()(e).call(e,\"#/components/schemas/\")?C(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):void 0)),i()(this,\"getRefSchema\",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:r,schema:s,required:i,name:a,isRef:l,specPath:c,displayName:u,includeReadOnly:h,includeWriteOnly:f}=this.props;const d=e(\"ObjectModel\"),m=e(\"ArrayModel\"),g=e(\"PrimitiveModel\");let y=\"object\",v=s&&s.get(\"$$ref\");if(!a&&v&&(a=this.getModelName(v)),!s&&v&&(s=this.getRefSchema(a)),!s)return p.createElement(\"span\",{className:\"model model-title\"},p.createElement(\"span\",{className:\"model-title__text\"},u||a),p.createElement(\"img\",{src:n(2517),height:\"20px\",width:\"20px\"}));const b=r.isOAS3()&&s.get(\"deprecated\");switch(l=void 0!==l?l:!!v,y=s&&s.get(\"type\")||y,y){case\"object\":return p.createElement(d,o()({className:\"object\"},this.props,{specPath:c,getConfigs:t,schema:s,name:a,deprecated:b,isRef:l,includeReadOnly:h,includeWriteOnly:f}));case\"array\":return p.createElement(m,o()({className:\"array\"},this.props,{getConfigs:t,schema:s,name:a,deprecated:b,required:i,includeReadOnly:h,includeWriteOnly:f}));default:return p.createElement(g,o()({},this.props,{getComponent:e,getConfigs:t,schema:s,name:a,deprecated:b,required:i}))}}}i()(P,\"propTypes\",{schema:u()(O()).isRequired,getComponent:A().func.isRequired,getConfigs:A().func.isRequired,specSelectors:A().object.isRequired,name:A().string,displayName:A().string,isRef:A().bool,required:A().bool,expandDepth:A().number,depth:A().number,specPath:O().list.isRequired,includeReadOnly:A().bool,includeWriteOnly:A().bool})},5623:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>h});var r=n(61125),o=n.n(r),s=n(28222),i=n.n(s),a=n(67294),l=n(84564),c=n.n(l),u=n(90242),p=n(27504);class h extends a.Component{constructor(e,t){super(e,t),o()(this,\"getDefinitionUrl\",(()=>{let{specSelectors:e}=this.props;return new(c())(e.url(),p.Z.location).toString()}));let{getConfigs:n}=e,{validatorUrl:r}=n();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===r?\"https://validator.swagger.io/validator\":r}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:n}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===n?\"https://validator.swagger.io/validator\":n})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),n=(0,u.Nm)(this.state.validatorUrl);return\"object\"==typeof t&&i()(t).length?null:this.state.url&&(0,u.hW)(this.state.validatorUrl)&&(0,u.hW)(this.state.url)?a.createElement(\"span\",{className:\"float-right\"},a.createElement(\"a\",{target:\"_blank\",rel:\"noopener noreferrer\",href:`${n}/debug?url=${encodeURIComponent(this.state.url)}`},a.createElement(f,{src:`${n}?url=${encodeURIComponent(this.state.url)}`,alt:\"Online validator badge\"}))):null}}class f extends a.Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?a.createElement(\"img\",{alt:\"Error\"}):this.state.loaded?a.createElement(\"img\",{src:this.props.src,alt:this.props.alt}):null}}},4599:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>ye,s:()=>ve});var r=n(67294),o=n(89927);function s(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function i(e,t){for(var n=e.length-1;n>=0;n--)!0===t(e[n])&&e.splice(n,1)}function a(e){throw new Error(\"Unhandled case for value: '\".concat(e,\"'\"))}var l=function(){function e(e){void 0===e&&(e={}),this.tagName=\"\",this.attrs={},this.innerHTML=\"\",this.whitespaceRegex=/\\s+/,this.tagName=e.tagName||\"\",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||\"\"}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||\"\"},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr(\"class\",e)},e.prototype.addClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);t=i.shift();)-1===s(o,t)&&o.push(t);return this.getAttrs().class=o.join(\" \"),this},e.prototype.removeClass=function(e){for(var t,n=this.getClass(),r=this.whitespaceRegex,o=n?n.split(r):[],i=e.split(r);o.length&&(t=i.shift());){var a=s(o,t);-1!==a&&o.splice(a,1)}return this.getAttrs().class=o.join(\" \"),this},e.prototype.getClass=function(){return this.getAttrs().class||\"\"},e.prototype.hasClass=function(e){return-1!==(\" \"+this.getClass()+\" \").indexOf(\" \"+e+\" \")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||\"\"},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return[\"<\",e,t=t?\" \"+t:\"\",\">\",this.getInnerHtml(),\"</\",e,\">\"].join(\"\")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return\"\";var e=this.getAttrs(),t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+'=\"'+e[n]+'\"');return t.join(\" \")},e}();var c=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className=\"\",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||\"\"}return e.prototype.build=function(e){return new l({tagName:\"a\",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},n=this.createCssClass(e);return n&&(t.class=n),this.newWindow&&(t.target=\"_blank\",t.rel=\"noopener noreferrer\"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var n=[t],r=e.getCssClassSuffixes(),o=0,s=r.length;o<s;o++)n.push(t+\"-\"+r[o]);return n.join(\" \")}return\"\"},e.prototype.processAnchorText=function(e){return e=this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var n=t.length,r=t.location;return\"smart\"===r?function(e,t,n){var r,o;null==n?(n=\"&hellip;\",o=3,r=8):(o=n.length,r=n.length);var s=function(e){var t=\"\";return e.scheme&&e.host&&(t+=e.scheme+\"://\"),e.host&&(t+=e.host),e.path&&(t+=\"/\"+e.path),e.query&&(t+=\"?\"+e.query),e.fragment&&(t+=\"#\"+e.fragment),t},i=function(e,t){var r=t/2,o=Math.ceil(r),s=-1*Math.floor(r),i=\"\";return s<0&&(i=e.substr(s)),e.substr(0,o)+n+i};if(e.length<=t)return e;var a=t-o,l=function(e){var t={},n=e,r=n.match(/^([a-z]+):\\/\\//i);return r&&(t.scheme=r[1],n=n.substr(r[0].length)),(r=n.match(/^(.*?)(?=(\\?|#|\\/|$))/i))&&(t.host=r[1],n=n.substr(r[0].length)),(r=n.match(/^\\/(.*?)(?=(\\?|#|$))/i))&&(t.path=r[1],n=n.substr(r[0].length)),(r=n.match(/^\\?(.*?)(?=(#|$))/i))&&(t.query=r[1],n=n.substr(r[0].length)),(r=n.match(/^#(.*?)$/i))&&(t.fragment=r[1]),t}(e);if(l.query){var c=l.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);c&&(l.query=l.query.substr(0,c[1].length),e=s(l))}if(e.length<=t)return e;if(l.host&&(l.host=l.host.replace(/^www\\./,\"\"),e=s(l)),e.length<=t)return e;var u=\"\";if(l.host&&(u+=l.host),u.length>=a)return l.host.length==t?(l.host.substr(0,t-o)+n).substr(0,a+r):i(u,a).substr(0,a+r);var p=\"\";if(l.path&&(p+=\"/\"+l.path),l.query&&(p+=\"?\"+l.query),p){if((u+p).length>=a)return(u+p).length==t?(u+p).substr(0,t):(u+i(p,a-u.length)).substr(0,a+r);u+=p}if(l.fragment){var h=\"#\"+l.fragment;if((u+h).length>=a)return(u+h).length==t?(u+h).substr(0,t):(u+i(h,a-u.length)).substr(0,a+r);u+=h}if(l.scheme&&l.host){var f=l.scheme+\"://\";if((u+f).length<a)return(f+u).substr(0,t)}if(u.length<=t)return u;var d=\"\";return a>0&&(d=u.substr(-1*Math.floor(a/2))),(u.substr(0,Math.ceil(a/2))+n+d).substr(0,a+r)}(e,n):\"middle\"===r?function(e,t,n){if(e.length<=t)return e;var r,o;null==n?(n=\"&hellip;\",r=8,o=3):(r=n.length,o=n.length);var s=t-o,i=\"\";return s>0&&(i=e.substr(-1*Math.floor(s/2))),(e.substr(0,Math.ceil(s/2))+n+i).substr(0,s+r)}(e,n):function(e,t,n){return function(e,t,n){var r;return e.length>t&&(null==n?(n=\"&hellip;\",r=3):r=n.length,e=e.substring(0,t-r)+n),e}(e,t,n)}(e,n)},e}(),u=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText=\"\",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},p(e,t)};function h(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function n(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var f=function(){return f=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},f.apply(this,arguments)};Object.create;Object.create;var d,m=function(e){function t(t){var n=e.call(this,t)||this;return n.email=\"\",n.email=t.email,n}return h(t,e),t.prototype.getType=function(){return\"email\"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return\"mailto:\"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(u),g=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"\",n.hashtag=\"\",n.serviceName=t.serviceName,n.hashtag=t.hashtag,n}return h(t,e),t.prototype.getType=function(){return\"hashtag\"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case\"twitter\":return\"https://twitter.com/hashtag/\"+t;case\"facebook\":return\"https://www.facebook.com/hashtag/\"+t;case\"instagram\":return\"https://instagram.com/explore/tags/\"+t;case\"tiktok\":return\"https://www.tiktok.com/tag/\"+t;default:throw new Error(\"Unknown service name to point hashtag to: \"+e)}},t.prototype.getAnchorText=function(){return\"#\"+this.hashtag},t}(u),y=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"twitter\",n.mention=\"\",n.mention=t.mention,n.serviceName=t.serviceName,n}return h(t,e),t.prototype.getType=function(){return\"mention\"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case\"twitter\":return\"https://twitter.com/\"+this.mention;case\"instagram\":return\"https://instagram.com/\"+this.mention;case\"soundcloud\":return\"https://soundcloud.com/\"+this.mention;case\"tiktok\":return\"https://www.tiktok.com/@\"+this.mention;default:throw new Error(\"Unknown service name to point mention to: \"+this.serviceName)}},t.prototype.getAnchorText=function(){return\"@\"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),n=this.getServiceName();return n&&t.push(n),t},t}(u),v=function(e){function t(t){var n=e.call(this,t)||this;return n.number=\"\",n.plusSign=!1,n.number=t.number,n.plusSign=t.plusSign,n}return h(t,e),t.prototype.getType=function(){return\"phone\"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return\"tel:\"+(this.plusSign?\"+\":\"\")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(u),b=function(e){function t(t){var n=e.call(this,t)||this;return n.url=\"\",n.urlMatchType=\"scheme\",n.protocolUrlMatch=!1,n.protocolRelativeMatch=!1,n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.schemePrefixRegex=/^(https?:\\/\\/)?/i,n.wwwPrefixRegex=/^(https?:\\/\\/)?(www\\.)?/i,n.protocolRelativeRegex=/^\\/\\//,n.protocolPrepended=!1,n.urlMatchType=t.urlMatchType,n.url=t.url,n.protocolUrlMatch=t.protocolUrlMatch,n.protocolRelativeMatch=t.protocolRelativeMatch,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return h(t,e),t.prototype.getType=function(){return\"url\"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url=\"http://\"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&amp;/g,\"&\")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,\"\")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,\"$1\")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,\"\")},t.prototype.removeTrailingSlash=function(e){return\"/\"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,\"&quot;\").replace(/%26/gi,\"&amp;\").replace(/%27/gi,\"&#39;\").replace(/%3C/gi,\"&lt;\").replace(/%3E/gi,\"&gt;\");try{return decodeURIComponent(t)}catch(e){return t}},t}(u),w=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},E=/[A-Za-z]/,x=/[\\d]/,S=/[\\D]/,_=/\\s/,j=/['\"]/,O=/[\\x00-\\x1F\\x7F]/,k=/A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/.source,A=k+/\\u2700-\\u27bf\\udde6-\\uddff\\ud800-\\udbff\\udc00-\\udfff\\ufe0e\\ufe0f\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ud83c\\udffb-\\udfff\\u200d\\u3299\\u3297\\u303d\\u3030\\u24c2\\ud83c\\udd70-\\udd71\\udd7e-\\udd7f\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01-\\ude02\\ude1a\\ude2f\\ude32-\\ude3a\\ude50-\\ude51\\u203c\\u2049\\u25aa-\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u00a9\\u00ae\\u2122\\u2139\\udc04\\u2600-\\u26FF\\u2b05\\u2b06\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u231a\\u231b\\u2328\\u23cf\\u23e9-\\u23f3\\u23f8-\\u23fa\\udccf\\u2935\\u2934\\u2190-\\u21ff/.source+/\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/.source,C=/0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/.source,P=A+C,N=A+C,I=new RegExp(\"[\".concat(N,\"]\")),T=\"(?:[\"+C+\"]{1,3}\\\\.){3}[\"+C+\"]{1,3}\",R=\"[\"+N+\"](?:[\"+N+\"\\\\-_]{0,61}[\"+N+\"])?\",M=function(e){return\"(?=(\"+R+\"))\\\\\"+e},D=function(e){return\"(?:\"+M(e)+\"(?:\\\\.\"+M(e+1)+\"){0,126}|\"+T+\")\"},F=(new RegExp(\"[\"+N+\".\\\\-]*[\"+N+\"\\\\-]\"),I),L=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|travelchannel|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|موريتانيا|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|etisalat|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|البحرين|الجزائر|العليان|پاکستان|كاثوليك|இந்தியா|abarth|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|loans|locus|lotte|lotto|macys|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|ישראל|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|アマゾン|グーグル|クラウド|ポイント|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ລາວ|ストア|セール|みんな|中文网|亚马逊|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|ευ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|广东|微博|慈善|手机|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,B=new RegExp(\"[\".concat(N,\"!#$%&'*+/=?^_`{|}~-]\")),$=new RegExp(\"^\".concat(L.source,\"$\")),q=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=B,t.strictTldRegex=$,t}return h(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,n=this.localPartCharRegex,r=this.strictTldRegex,o=[],s=e.length,i=new U,l={m:\"a\",a:\"i\",i:\"l\",l:\"t\",t:\"o\",o:\":\"},c=0,u=0,p=i;c<s;){var h=e.charAt(c);switch(u){case 0:d(h);break;case 1:g(e.charAt(c-1),h);break;case 2:y(h);break;case 3:v(h);break;case 4:b(h);break;case 5:w(h);break;case 6:E(h);break;case 7:x(h);break;default:a(u)}c++}return j(),o;function d(e){\"m\"===e?S(1):n.test(e)&&S()}function g(e,t){\":\"===e?n.test(t)?(u=2,p=new U(f(f({},p),{hasMailtoPrefix:!0}))):_():l[e]===t||(n.test(t)?u=2:\".\"===t?u=3:\"@\"===t?u=4:_())}function y(e){\".\"===e?u=3:\"@\"===e?u=4:n.test(e)||_()}function v(e){\".\"===e||\"@\"===e?_():n.test(e)?u=2:_()}function b(e){F.test(e)?u=5:_()}function w(e){\".\"===e?u=7:\"-\"===e?u=6:F.test(e)||j()}function E(e){\"-\"===e||\".\"===e?j():F.test(e)?u=5:j()}function x(e){\".\"===e||\"-\"===e?j():F.test(e)?(u=5,p=new U(f(f({},p),{hasDomainDot:!0}))):j()}function S(e){void 0===e&&(e=2),u=e,p=new U({idx:c})}function _(){u=0,p=i}function j(){if(p.hasDomainDot){var n=e.slice(p.idx,c);/[-.]$/.test(n)&&(n=n.slice(0,-1));var s=p.hasMailtoPrefix?n.slice(7):n;(function(e){var t=e.split(\".\").pop()||\"\",n=t.toLowerCase();return r.test(n)})(s)&&o.push(new m({tagBuilder:t,matchedText:n,offset:p.idx,email:s}))}_()}},t}(w),U=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},z=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split(\"://\")[1]),t.split(\"/\")[0].indexOf(\"..\")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),n=t&&t[0].toLowerCase();return\"javascript:\"!==n&&\"vbscript:\"!==n},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf(\".\"))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&(!this.hasFullProtocolRegex.test(t)&&!this.hasWordCharAfterProtocolRegex.test(e))},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(\":[^\\\\s]*?[\"+k+\"]\"),e.ipRegex=/[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/,e}(),V=(d=new RegExp(\"[/?#](?:[\"+N+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]{}?!:,.;^✓]*[\"+N+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]{}✓])?\"),new RegExp([\"(?:\",\"(\",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/.source,D(2),\")\",\"|\",\"(\",\"(//)?\",/(?:www\\.)/.source,D(6),\")\",\"|\",\"(\",\"(//)?\",D(10)+\"\\\\.\",L.source,\"(?![-\"+P+\"])\",\")\",\")\",\"(?::[0-9]+)?\",\"(?:\"+d.source+\")?\"].join(\"\"),\"gi\")),W=new RegExp(\"[\"+N+\"]\"),J=function(e){function t(t){var n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=V,n.wordCharRegExp=W,n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return h(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.stripPrefix,o=this.stripTrailingSlash,s=this.decodePercentEncoding,i=this.tagBuilder,a=[],l=function(){var n=t[0],l=t[1],u=t[4],p=t[5],h=t[9],f=t.index,d=p||h,m=e.charAt(f-1);if(!z.isValid(n,l))return\"continue\";if(f>0&&\"@\"===m)return\"continue\";if(f>0&&d&&c.wordCharRegExp.test(m))return\"continue\";if(/\\?$/.test(n)&&(n=n.substr(0,n.length-1)),c.matchHasUnbalancedClosingParen(n))n=n.substr(0,n.length-1);else{var g=c.matchHasInvalidCharAfterTld(n,l);g>-1&&(n=n.substr(0,g))}var y=[\"http://\",\"https://\"].find((function(e){return!!l&&-1!==l.indexOf(e)}));if(y){var v=n.indexOf(y);n=n.substr(v),l=l.substr(v),f+=v}var w=l?\"scheme\":u?\"www\":\"tld\",E=!!l;a.push(new b({tagBuilder:i,matchedText:n,offset:f,urlMatchType:w,url:n,protocolUrlMatch:E,protocolRelativeMatch:!!d,stripPrefix:r,stripTrailingSlash:o,decodePercentEncoding:s}))},c=this;null!==(t=n.exec(e));)l();return a},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,n=e.charAt(e.length-1);if(\")\"===n)t=\"(\";else if(\"]\"===n)t=\"[\";else{if(\"}\"!==n)return!1;t=\"{\"}for(var r=0,o=0,s=e.length-1;o<s;o++){var i=e.charAt(o);i===t?r++:i===n&&(r=Math.max(r-1,0))}return 0===r},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var n=0;t&&(n=e.indexOf(\":\"),e=e.slice(n));var r=new RegExp(\"^((.?//)?[-.\"+N+\"]*[-\"+N+\"]\\\\.[-\"+N+\"]+)\").exec(e);return null===r?-1:(n+=r[1].length,e=e.slice(r[1].length),/^[^-.A-Za-z0-9:\\/?#]/.test(e)?n:-1)},t}(w),K=new RegExp(\"[_\".concat(N,\"]\")),H=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"twitter\",n.serviceName=t.serviceName,n}return h(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,n=this.serviceName,r=[],o=e.length,s=0,i=-1,l=0;s<o;){var c=e.charAt(s);switch(l){case 0:u(c);break;case 1:p(c);break;case 2:h(c);break;case 3:f(c);break;default:a(l)}s++}return d(),r;function u(e){\"#\"===e?(l=2,i=s):I.test(e)&&(l=1)}function p(e){I.test(e)||(l=0)}function h(e){l=K.test(e)?3:I.test(e)?1:0}function f(e){K.test(e)||(d(),i=-1,l=I.test(e)?1:0)}function d(){if(i>-1&&s-i<=140){var o=e.slice(i,s),a=new g({tagBuilder:t,matchedText:o,offset:i,serviceName:n,hashtag:o.slice(1)});r.push(a)}}},t}(w),G=[\"twitter\",\"facebook\",\"instagram\",\"tiktok\"],Z=new RegExp(\"\".concat(/(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/.source,\"|\").concat(/(0([1-9]{1}-?[1-9]\\d{3}|[1-9]{2}-?\\d{3}|[1-9]{2}\\d{1}-?\\d{2}|[1-9]{2}\\d{2}-?\\d{1})-?\\d{4}|0[789]0-?\\d{4}-?\\d{4}|050-?\\d{4}-?\\d{4})/.source),\"g\"),Y=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=Z,t}return h(t,e),t.prototype.parseMatches=function(e){for(var t,n=this.matcherRegex,r=this.tagBuilder,o=[];null!==(t=n.exec(e));){var s=t[0],i=s.replace(/[^0-9,;#]/g,\"\"),a=!(!t[1]&&!t[2]),l=0==t.index?\"\":e.substr(t.index-1,1),c=e.substr(t.index+s.length,1),u=!l.match(/\\d/)&&!c.match(/\\d/);this.testMatch(t[3])&&this.testMatch(s)&&u&&o.push(new v({tagBuilder:r,matchedText:s,offset:t.index,number:i,plusSign:a}))}return o},t.prototype.testMatch=function(e){return S.test(e)},t}(w),X=new RegExp(\"@[_\".concat(N,\"]{1,50}(?![_\").concat(N,\"])\"),\"g\"),Q=new RegExp(\"@[_.\".concat(N,\"]{1,30}(?![_\").concat(N,\"])\"),\"g\"),ee=new RegExp(\"@[-_.\".concat(N,\"]{1,50}(?![-_\").concat(N,\"])\"),\"g\"),te=new RegExp(\"@[_.\".concat(N,\"]{1,23}[_\").concat(N,\"](?![_\").concat(N,\"])\"),\"g\"),ne=new RegExp(\"[^\"+N+\"]\"),re=function(e){function t(t){var n=e.call(this,t)||this;return n.serviceName=\"twitter\",n.matcherRegexes={twitter:X,instagram:Q,soundcloud:ee,tiktok:te},n.nonWordCharRegex=ne,n.serviceName=t.serviceName,n}return h(t,e),t.prototype.parseMatches=function(e){var t,n=this.serviceName,r=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,s=this.tagBuilder,i=[];if(!r)return i;for(;null!==(t=r.exec(e));){var a=t.index,l=e.charAt(a-1);if(0===a||o.test(l)){var c=t[0].replace(/\\.+$/g,\"\"),u=c.slice(1);i.push(new y({tagBuilder:s,matchedText:c,offset:a,serviceName:n,mention:u}))}}return i},t}(w);function oe(e,t){for(var n,r=t.onOpenTag,o=t.onCloseTag,s=t.onText,i=t.onComment,l=t.onDoctype,c=new se,u=0,p=e.length,h=0,d=0,m=c;u<p;){var g=e.charAt(u);switch(h){case 0:y(g);break;case 1:v(g);break;case 2:w(g);break;case 3:b(g);break;case 4:S(g);break;case 5:k(g);break;case 6:A(g);break;case 7:C(g);break;case 8:P(g);break;case 9:N(g);break;case 10:I(g);break;case 11:T(g);break;case 12:R(g);break;case 13:M(g);break;case 14:D(g);break;case 15:F(g);break;case 16:L(g);break;case 17:B(g);break;case 18:$(g);break;case 19:q(g);break;case 20:U(g);break;default:a(h)}u++}function y(e){\"<\"===e&&V()}function v(e){\"!\"===e?h=13:\"/\"===e?(h=2,m=new se(f(f({},m),{isClosing:!0}))):\"<\"===e?V():E.test(e)?(h=3,m=new se(f(f({},m),{isOpening:!0}))):(h=0,m=c)}function b(e){_.test(e)?(m=new se(f(f({},m),{name:J()})),h=4):\"<\"===e?V():\"/\"===e?(m=new se(f(f({},m),{name:J()})),h=12):\">\"===e?(m=new se(f(f({},m),{name:J()})),W()):E.test(e)||x.test(e)||\":\"===e||z()}function w(e){\">\"===e?z():E.test(e)?h=3:z()}function S(e){_.test(e)||(\"/\"===e?h=12:\">\"===e?W():\"<\"===e?V():\"=\"===e||j.test(e)||O.test(e)?z():h=5)}function k(e){_.test(e)?h=6:\"/\"===e?h=12:\"=\"===e?h=7:\">\"===e?W():\"<\"===e?V():j.test(e)&&z()}function A(e){_.test(e)||(\"/\"===e?h=12:\"=\"===e?h=7:\">\"===e?W():\"<\"===e?V():j.test(e)?z():h=5)}function C(e){_.test(e)||('\"'===e?h=8:\"'\"===e?h=9:/[>=`]/.test(e)?z():\"<\"===e?V():h=10)}function P(e){'\"'===e&&(h=11)}function N(e){\"'\"===e&&(h=11)}function I(e){_.test(e)?h=4:\">\"===e?W():\"<\"===e&&V()}function T(e){_.test(e)?h=4:\"/\"===e?h=12:\">\"===e?W():\"<\"===e?V():(h=4,u--)}function R(e){\">\"===e?(m=new se(f(f({},m),{isClosing:!0})),W()):h=4}function M(t){\"--\"===e.substr(u,2)?(u+=2,m=new se(f(f({},m),{type:\"comment\"})),h=14):\"DOCTYPE\"===e.substr(u,7).toUpperCase()?(u+=7,m=new se(f(f({},m),{type:\"doctype\"})),h=20):z()}function D(e){\"-\"===e?h=15:\">\"===e?z():h=16}function F(e){\"-\"===e?h=18:\">\"===e?z():h=16}function L(e){\"-\"===e&&(h=17)}function B(e){h=\"-\"===e?18:16}function $(e){\">\"===e?W():\"!\"===e?h=19:\"-\"===e||(h=16)}function q(e){\"-\"===e?h=17:\">\"===e?W():h=16}function U(e){\">\"===e?W():\"<\"===e&&V()}function z(){h=0,m=c}function V(){h=1,m=new se({idx:u})}function W(){var t=e.slice(d,m.idx);t&&s(t,d),\"comment\"===m.type?i(m.idx):\"doctype\"===m.type?l(m.idx):(m.isOpening&&r(m.name,m.idx),m.isClosing&&o(m.name,m.idx)),z(),d=u+1}function J(){var t=m.idx+(m.isClosing?2:1);return e.slice(t,u).toLowerCase()}d<u&&(n=e.slice(d,u),s(n,d),d=u+1)}var se=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||\"tag\",this.name=e.name||\"\",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing};const ie=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:\"end\"},this.className=\"\",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email=\"boolean\"==typeof t.email?t.email:this.email,this.phone=\"boolean\"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=\"boolean\"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash=\"boolean\"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=\"boolean\"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(!1!==n&&-1===[\"twitter\",\"instagram\",\"soundcloud\",\"tiktok\"].indexOf(n))throw new Error(\"invalid `mention` cfg '\".concat(n,\"' - see docs\"));var r=this.hashtag;if(!1!==r&&-1===G.indexOf(r))throw new Error(\"invalid `hashtag` cfg '\".concat(r,\"' - see docs\"));this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){return new e(n).link(t)},e.parse=function(t,n){return new e(n).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:\"boolean\"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:\"boolean\"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:\"boolean\"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{scheme:e,www:e}:{scheme:\"boolean\"!=typeof e.scheme||e.scheme,www:\"boolean\"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return\"number\"==typeof e?{length:e,location:\"end\"}:function(e,t){for(var n in t)t.hasOwnProperty(n)&&void 0===e[n]&&(e[n]=t[n]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:\"end\"})},e.prototype.parse=function(e){var t=this,n=[\"a\",\"style\",\"script\"],r=0,o=[];return oe(e,{onOpenTag:function(e){n.indexOf(e)>=0&&r++},onText:function(e,n){if(0===r){var s=function(e,t){if(!t.global)throw new Error(\"`splitRegex` must have the 'g' flag set\");for(var n,r=[],o=0;n=t.exec(e);)r.push(e.substring(o,n.index)),r.push(n[0]),o=n.index+n[0].length;return r.push(e.substring(o)),r}(e,/(&nbsp;|&#160;|&lt;|&#60;|&gt;|&#62;|&quot;|&#34;|&#39;)/gi),i=n;s.forEach((function(e,n){if(n%2==0){var r=t.parseText(e,i);o.push.apply(o,r)}i+=e.length}))}},onCloseTag:function(e){n.indexOf(e)>=0&&(r=Math.max(r-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort((function(e,t){return e.getOffset()-t.getOffset()}));for(var t=0;t<e.length-1;){var n=e[t],r=n.getOffset(),o=n.getMatchedText().length,s=r+o;if(t+1<e.length){if(e[t+1].getOffset()===r){var i=e[t+1].getMatchedText().length>o?t:t+1;e.splice(i,1);continue}if(e[t+1].getOffset()<s){e.splice(t+1,1);continue}}t++}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||i(e,(function(e){return\"hashtag\"===e.getType()})),this.email||i(e,(function(e){return\"email\"===e.getType()})),this.phone||i(e,(function(e){return\"phone\"===e.getType()})),this.mention||i(e,(function(e){return\"mention\"===e.getType()})),this.urls.schemeMatches||i(e,(function(e){return\"url\"===e.getType()&&\"scheme\"===e.getUrlMatchType()})),this.urls.wwwMatches||i(e,(function(e){return\"url\"===e.getType()&&\"www\"===e.getUrlMatchType()})),this.urls.tldMatches||i(e,(function(e){return\"url\"===e.getType()&&\"tld\"===e.getUrlMatchType()})),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var n=this.getMatchers(),r=[],o=0,s=n.length;o<s;o++){for(var i=n[o].parseMatches(e),a=0,l=i.length;a<l;a++)i[a].setOffset(t+i[a].getOffset());r.push.apply(r,i)}return r},e.prototype.link=function(e){if(!e)return\"\";this.sanitizeHtml&&(e=e.replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"));for(var t=this.parse(e),n=[],r=0,o=0,s=t.length;o<s;o++){var i=t[o];n.push(e.substring(r,i.getOffset())),n.push(this.createMatchReturnVal(i)),r=i.getOffset()+i.getMatchedText().length}return n.push(e.substring(r)),n.join(\"\")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),\"string\"==typeof t?t:!1===t?e.getMatchedText():t instanceof l?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new H({tagBuilder:e,serviceName:this.hashtag}),new q({tagBuilder:e}),new Y({tagBuilder:e}),new re({tagBuilder:e,serviceName:this.mention}),new J({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new c({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version=\"3.16.2\",e.AnchorTagBuilder=c,e.HtmlTag=l,e.matcher={Email:q,Hashtag:H,Matcher:w,Mention:re,Phone:Y,Url:J},e.match={Email:m,Hashtag:g,Match:u,Mention:y,Phone:v,Url:b},e}();var ae=/www|@|\\:\\/\\//;function le(e){return/^<\\/a\\s*>/i.test(e)}function ce(){var e=[],t=new ie({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case\"url\":e.push({text:t.matchedText,url:t.getUrl()});break;case\"email\":e.push({text:t.matchedText,url:\"mailto:\"+t.getEmail().replace(/^mailto:/i,\"\")})}return!1}});return{links:e,autolinker:t}}function ue(e){var t,n,r,o,s,i,a,l,c,u,p,h,f,d,m=e.tokens,g=null;for(n=0,r=m.length;n<r;n++)if(\"inline\"===m[n].type)for(p=0,t=(o=m[n].children).length-1;t>=0;t--)if(\"link_close\"!==(s=o[t]).type){if(\"htmltag\"===s.type&&(d=s.content,/^<a[>\\s]/i.test(d)&&p>0&&p--,le(s.content)&&p++),!(p>0)&&\"text\"===s.type&&ae.test(s.content)){if(g||(h=(g=ce()).links,f=g.autolinker),i=s.content,h.length=0,f.link(i),!h.length)continue;for(a=[],u=s.level,l=0;l<h.length;l++)e.inline.validateLink(h[l].url)&&((c=i.indexOf(h[l].text))&&a.push({type:\"text\",content:i.slice(0,c),level:u}),a.push({type:\"link_open\",href:h[l].url,title:\"\",level:u++}),a.push({type:\"text\",content:h[l].text,level:u}),a.push({type:\"link_close\",level:--u}),i=i.slice(c+h[l].text.length));i.length&&a.push({type:\"text\",content:i,level:u}),m[n].children=o=[].concat(o.slice(0,t),a,o.slice(t+1))}}else for(t--;o[t].level!==s.level&&\"link_open\"!==o[t].type;)t--}function pe(e){e.core.ruler.push(\"linkify\",ue)}var he=n(27856),fe=n.n(he),de=n(94184),me=n.n(de);function ge(e){let{source:t,className:n=\"\",getConfigs:s}=e;if(\"string\"!=typeof t)return null;const i=new o._({html:!0,typographer:!0,breaks:!0,linkTarget:\"_blank\"}).use(pe);i.core.ruler.disable([\"replacements\",\"smartquotes\"]);const{useUnsafeMarkdown:a}=s(),l=i.render(t),c=ve(l,{useUnsafeMarkdown:a});return t&&l&&c?r.createElement(\"div\",{className:me()(n,\"markdown\"),dangerouslySetInnerHTML:{__html:c}}):null}fe().addHook&&fe().addHook(\"beforeSanitizeElements\",(function(e){return e.href&&e.setAttribute(\"rel\",\"noopener noreferrer\"),e})),ge.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const ye=ge;function ve(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t,r=t?[]:[\"style\",\"class\"];return t&&!ve.hasWarnedAboutDeprecation&&(console.warn(\"useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0.\"),ve.hasWarnedAboutDeprecation=!0),fe().sanitize(e,{ADD_ATTR:[\"target\"],FORBID_TAGS:[\"style\",\"form\"],ALLOW_DATA_ATTR:n,FORBID_ATTR:r})}ve.hasWarnedAboutDeprecation=!1},45308:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r,o=n(86),s=n.n(o),i=n(8712),a=n.n(i),l=n(90242),c=n(27621);const u=n(95102),p={},h=p;s()(r=a()(u).call(u)).call(r,(function(e){if(\"./index.js\"===e)return;let t=u(e);p[(0,l.Zl)(e)]=t.default?t.default:t})),p.SafeRender=c.default},55812:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{AUTHORIZE:()=>h,AUTHORIZE_OAUTH2:()=>m,CONFIGURE_AUTH:()=>y,LOGOUT:()=>f,PRE_AUTHORIZE_OAUTH2:()=>d,RESTORE_AUTHORIZATION:()=>v,SHOW_AUTH_POPUP:()=>p,VALIDATE:()=>g,authPopup:()=>M,authorize:()=>w,authorizeAccessCodeWithBasicAuthentication:()=>P,authorizeAccessCodeWithFormParams:()=>C,authorizeApplication:()=>A,authorizeOauth2:()=>j,authorizeOauth2WithPersistOption:()=>O,authorizePassword:()=>k,authorizeRequest:()=>N,authorizeWithPersistOption:()=>E,configureAuth:()=>I,logout:()=>x,logoutWithPersistOption:()=>S,persistAuthorizationIfNeeded:()=>R,preAuthorizeImplicit:()=>_,restoreAuthorization:()=>T,showDefinitions:()=>b});var r=n(35627),o=n.n(r),s=n(76986),i=n.n(s),a=n(84564),l=n.n(a),c=n(27504),u=n(90242);const p=\"show_popup\",h=\"authorize\",f=\"logout\",d=\"pre_authorize_oauth2\",m=\"authorize_oauth2\",g=\"validate\",y=\"configure_auth\",v=\"restore_authorization\";function b(e){return{type:p,payload:e}}function w(e){return{type:h,payload:e}}const E=e=>t=>{let{authActions:n}=t;n.authorize(e),n.persistAuthorizationIfNeeded()};function x(e){return{type:f,payload:e}}const S=e=>t=>{let{authActions:n}=t;n.logout(e),n.persistAuthorizationIfNeeded()},_=e=>t=>{let{authActions:n,errActions:r}=t,{auth:s,token:i,isValid:a}=e,{schema:l,name:u}=s,p=l.get(\"flow\");delete c.Z.swaggerUIRedirectOauth2,\"accessCode\"===p||a||r.newAuthErr({authId:u,source:\"auth\",level:\"warning\",message:\"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server\"}),i.error?r.newAuthErr({authId:u,source:\"auth\",level:\"error\",message:o()(i)}):n.authorizeOauth2WithPersistOption({auth:s,token:i})};function j(e){return{type:m,payload:e}}const O=e=>t=>{let{authActions:n}=t;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()},k=e=>t=>{let{authActions:n}=t,{schema:r,name:o,username:s,password:a,passwordType:l,clientId:c,clientSecret:p}=e,h={grant_type:\"password\",scope:e.scopes.join(\" \"),username:s,password:a},f={};switch(l){case\"request-body\":!function(e,t,n){t&&i()(e,{client_id:t});n&&i()(e,{client_secret:n})}(h,c,p);break;case\"basic\":f.Authorization=\"Basic \"+(0,u.r3)(c+\":\"+p);break;default:console.warn(`Warning: invalid passwordType ${l} was passed, not including client id and secret`)}return n.authorizeRequest({body:(0,u.GZ)(h),url:r.get(\"tokenUrl\"),name:o,headers:f,query:{},auth:e})};const A=e=>t=>{let{authActions:n}=t,{schema:r,scopes:o,name:s,clientId:i,clientSecret:a}=e,l={Authorization:\"Basic \"+(0,u.r3)(i+\":\"+a)},c={grant_type:\"client_credentials\",scope:o.join(\" \")};return n.authorizeRequest({body:(0,u.GZ)(c),name:s,url:r.get(\"tokenUrl\"),auth:e,headers:l})},C=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:s,clientId:i,clientSecret:a,codeVerifier:l}=t,c={grant_type:\"authorization_code\",code:t.code,client_id:i,client_secret:a,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,u.GZ)(c),name:s,url:o.get(\"tokenUrl\"),auth:t})}},P=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:r}=e,{schema:o,name:s,clientId:i,clientSecret:a,codeVerifier:l}=t,c={Authorization:\"Basic \"+(0,u.r3)(i+\":\"+a)},p={grant_type:\"authorization_code\",code:t.code,client_id:i,redirect_uri:n,code_verifier:l};return r.authorizeRequest({body:(0,u.GZ)(p),name:s,url:o.get(\"tokenUrl\"),auth:t,headers:c})}},N=e=>t=>{let n,{fn:r,getConfigs:s,authActions:a,errActions:c,oas3Selectors:u,specSelectors:p,authSelectors:h}=t,{body:f,query:d={},headers:m={},name:g,url:y,auth:v}=e,{additionalQueryStringParams:b}=h.getConfigs()||{};if(p.isOAS3()){let e=u.serverEffectiveValue(u.selectedServer());n=l()(y,e,!0)}else n=l()(y,p.url(),!0);\"object\"==typeof b&&(n.query=i()({},n.query,b));const w=n.toString();let E=i()({Accept:\"application/json, text/plain, */*\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-Requested-With\":\"XMLHttpRequest\"},m);r.fetch({url:w,method:\"post\",headers:E,query:d,body:f,requestInterceptor:s().requestInterceptor,responseInterceptor:s().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),n=t&&(t.error||\"\"),r=t&&(t.parseError||\"\");e.ok?n||r?c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:o()(t)}):a.authorizeOauth2WithPersistOption({auth:v,token:t}):c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const n=e.response.data;try{const e=\"string\"==typeof n?JSON.parse(n):n;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}c.newAuthErr({authId:g,level:\"error\",source:\"auth\",message:t})}))};function I(e){return{type:y,payload:e}}function T(e){return{type:v,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:n}=e;if(!n().persistAuthorization)return;const r=t.authorized().toJS();localStorage.setItem(\"authorized\",o()(r))},M=(e,t)=>()=>{c.Z.swaggerUIRedirectOauth2=t,c.Z.open(e)}},53779:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>n=>{const{getConfigs:r,authActions:o}=t,s=r();if(e(n),s.persistAuthorization){const e=localStorage.getItem(\"authorized\");e&&o.restoreAuthorization({authorized:JSON.parse(e)})}}},93705:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p,preauthorizeApiKey:()=>f,preauthorizeBasic:()=>h});var r=n(11189),o=n.n(r),s=n(43962),i=n(55812),a=n(60035),l=n(60489),c=n(53779),u=n(22849);function p(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=o()(f).call(f,null,e),this.rootInjects.preauthorizeBasic=o()(h).call(h,null,e)},statePlugins:{auth:{reducers:s.default,actions:i,selectors:a,wrapActions:{authorize:u.authorize,logout:u.logout}},configs:{wrapActions:{loaded:c.loaded}},spec:{wrapActions:{execute:l.execute}}}}}function h(e,t,n,r){const{authActions:{authorize:o},specSelectors:{specJson:s,isOAS3:i}}=e,a=i()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],l=s().getIn([...a,t]);return l?o({[t]:{value:{username:n,password:r},schema:l.toJS()}}):null}function f(e,t,n){const{authActions:{authorize:r},specSelectors:{specJson:o,isOAS3:s}}=e,i=s()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],a=o().getIn([...i,t]);return a?r({[t]:{value:n,schema:a.toJS()}}):null}},43962:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(86),o=n.n(r),s=n(76986),i=n.n(s),a=n(43393),l=n(90242),c=n(55812);const u={[c.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:n}=t;return e.set(\"showDefinitions\",n)},[c.AUTHORIZE]:(e,t)=>{var n;let{payload:r}=t,s=(0,a.fromJS)(r),i=e.get(\"authorized\")||(0,a.Map)();return o()(n=s.entrySeq()).call(n,(t=>{let[n,r]=t;if(!(0,l.Wl)(r.getIn))return e.set(\"authorized\",i);let o=r.getIn([\"schema\",\"type\"]);if(\"apiKey\"===o||\"http\"===o)i=i.set(n,r);else if(\"basic\"===o){let e=r.getIn([\"value\",\"username\"]),t=r.getIn([\"value\",\"password\"]);i=i.setIn([n,\"value\"],{username:e,header:\"Basic \"+(0,l.r3)(e+\":\"+t)}),i=i.setIn([n,\"schema\"],r.get(\"schema\"))}})),e.set(\"authorized\",i)},[c.AUTHORIZE_OAUTH2]:(e,t)=>{let n,{payload:r}=t,{auth:o,token:s}=r;o.token=i()({},s),n=(0,a.fromJS)(o);let l=e.get(\"authorized\")||(0,a.Map)();return l=l.set(n.get(\"name\"),n),e.set(\"authorized\",l)},[c.LOGOUT]:(e,t)=>{let{payload:n}=t,r=e.get(\"authorized\").withMutations((e=>{o()(n).call(n,(t=>{e.delete(t)}))}));return e.set(\"authorized\",r)},[c.CONFIGURE_AUTH]:(e,t)=>{let{payload:n}=t;return e.set(\"configs\",n)},[c.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:n}=t;return e.set(\"authorized\",(0,a.fromJS)(n.authorized))}}},60035:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{authorized:()=>x,definitionsForRequirements:()=>E,definitionsToAuthorize:()=>b,getConfigs:()=>_,getDefinitionsByNames:()=>w,isAuthorized:()=>S,shownDefinitions:()=>v});var r=n(86),o=n.n(r),s=n(51679),i=n.n(s),a=n(14418),l=n.n(a),c=n(11882),u=n.n(c),p=n(97606),h=n.n(p),f=n(28222),d=n.n(f),m=n(20573),g=n(43393);const y=e=>e,v=(0,m.P1)(y,(e=>e.get(\"showDefinitions\"))),b=(0,m.P1)(y,(()=>e=>{var t;let{specSelectors:n}=e,r=n.securityDefinitions()||(0,g.Map)({}),s=(0,g.List)();return o()(t=r.entrySeq()).call(t,(e=>{let[t,n]=e,r=(0,g.Map)();r=r.set(t,n),s=s.push(r)})),s})),w=(e,t)=>e=>{var n;let{specSelectors:r}=e;console.warn(\"WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.\");let s=r.securityDefinitions(),i=(0,g.List)();return o()(n=t.valueSeq()).call(n,(e=>{var t;let n=(0,g.Map)();o()(t=e.entrySeq()).call(t,(e=>{let t,[r,i]=e,a=s.get(r);var l;\"oauth2\"===a.get(\"type\")&&i.size&&(t=a.get(\"scopes\"),o()(l=t.keySeq()).call(l,(e=>{i.contains(e)||(t=t.delete(e))})),a=a.set(\"allowedScopes\",t));n=n.set(r,a)})),i=i.push(n)})),i},E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,g.List)();return e=>{let{authSelectors:n}=e;const r=n.definitionsToAuthorize()||(0,g.List)();let s=(0,g.List)();return o()(r).call(r,(e=>{let n=i()(t).call(t,(t=>t.get(e.keySeq().first())));n&&(o()(e).call(e,((t,r)=>{if(\"oauth2\"===t.get(\"type\")){const i=n.get(r);let a=t.get(\"scopes\");var s;if(g.List.isList(i)&&g.Map.isMap(a))o()(s=a.keySeq()).call(s,(e=>{i.contains(e)||(a=a.delete(e))})),e=e.set(r,t.set(\"scopes\",a))}})),s=s.push(e))})),s}},x=(0,m.P1)(y,(e=>e.get(\"authorized\")||(0,g.Map)())),S=(e,t)=>e=>{var n;let{authSelectors:r}=e,o=r.authorized();return g.List.isList(t)?!!l()(n=t.toJS()).call(n,(e=>{var t,n;return-1===u()(t=h()(n=d()(e)).call(n,(e=>!!o.get(e)))).call(t,!1)})).length:null},_=(0,m.P1)(y,(e=>e.get(\"configs\")))},60489:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{execute:()=>r});const r=(e,t)=>{let{authSelectors:n,specSelectors:r}=t;return t=>{let{path:o,method:s,operation:i,extras:a}=t,l={authorized:n.authorized()&&n.authorized().toJS(),definitions:r.securityDefinitions()&&r.securityDefinitions().toJS(),specSecurity:r.security()&&r.security().toJS()};return e({path:o,method:s,operation:i,securities:l,...a})}}},22849:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{authorize:()=>c,logout:()=>u});var r=n(3665),o=n.n(r),s=n(58309),i=n.n(s),a=n(86),l=n.n(a);const c=(e,t)=>n=>{e(n);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=o()(n),r=\"apiKey\"===e.get(\"type\"),s=\"cookie\"===e.get(\"in\");r&&s&&(document.cookie=`${e.get(\"name\")}=${t}; SameSite=None; Secure`)}catch(e){console.error(\"Error persisting cookie based apiKey in document.cookie.\",e)}},u=(e,t)=>n=>{const r=t.getConfigs(),o=t.authSelectors.authorized();try{r.persistAuthorization&&i()(n)&&l()(n).call(n,(e=>{const t=o.get(e,{}),n=\"apiKey\"===t.getIn([\"schema\",\"type\"]),r=\"cookie\"===t.getIn([\"schema\",\"in\"]);if(n&&r){const e=t.getIn([\"schema\",\"name\"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error(\"Error deleting cookie based apiKey from document.cookie.\",e)}e(n)}},70714:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{TOGGLE_CONFIGS:()=>o,UPDATE_CONFIGS:()=>r,loaded:()=>a,toggle:()=>i,update:()=>s});const r=\"configs_update\",o=\"configs_toggle\";function s(e,t){return{type:r,payload:{[e]:t}}}function i(e){return{type:o,payload:e}}const a=()=>()=>{}},92256:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{parseYamlConfig:()=>o});var r=n(1272);const o=(e,t)=>{try{return r.ZP.load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},46709:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(92256),o=n(70714),s=n(22698),i=n(69018),a=n(37743);const l={getLocalConfig:()=>(0,r.parseYamlConfig)('---\\nurl: \"https://petstore.swagger.io/v2/swagger.json\"\\ndom_id: \"#swagger-ui\"\\nvalidatorUrl: \"https://validator.swagger.io/validator\"\\n')};function c(){return{statePlugins:{spec:{actions:s,selectors:l},configs:{reducers:a.default,actions:o,selectors:i}}}}},37743:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(43393),o=n(70714);const s={[o.UPDATE_CONFIGS]:(e,t)=>e.merge((0,r.fromJS)(t.payload)),[o.TOGGLE_CONFIGS]:(e,t)=>{const n=t.payload,r=e.get(n);return e.set(n,!r)}}},69018:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{get:()=>s});var r=n(58309),o=n.n(r);const s=(e,t)=>e.getIn(o()(t)?t:[t])},22698:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{downloadConfig:()=>o,getConfigByUrl:()=>s});var r=n(92256);const o=e=>t=>{const{fn:{fetch:n}}=t;return n(e)},s=(e,t)=>n=>{let{specActions:o}=n;if(e)return o.downloadConfig(e).then(s,s);function s(n){n instanceof Error||n.status>=400?(o.updateLoadingStatus(\"failedConfig\"),o.updateLoadingStatus(\"failedConfig\"),o.updateUrl(\"\"),console.error(n.statusText+\" \"+e.url),t(null)):t((0,r.parseYamlConfig)(n.text))}}},31970:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{setHash:()=>r});const r=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=\"\"},34980:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(41599),o=n(60877),s=n(34584);function i(){return[r.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const n=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(n)}}}},wrapComponents:{operation:o.default,OperationTag:s.default}}]}},41599:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{clearScrollTo:()=>_,default:()=>j,parseDeepLinkHash:()=>E,readyToScroll:()=>x,scrollTo:()=>w,scrollToElement:()=>S,show:()=>b});var r=n(58309),o=n.n(r),s=n(24278),i=n.n(s),a=n(97606),l=n.n(a),c=n(11882),u=n.n(c),p=n(31970),h=n(45172),f=n.n(h),d=n(90242),m=n(43393),g=n.n(m);const y=\"layout_scroll_to\",v=\"layout_clear_scroll\",b=(e,t)=>{let{getConfigs:n,layoutSelectors:r}=t;return function(){for(var t=arguments.length,s=new Array(t),i=0;i<t;i++)s[i]=arguments[i];if(e(...s),n().deepLinking)try{let[e,t]=s;e=o()(e)?e:[e];const n=r.urlHashArrayFromIsShownKey(e);if(!n.length)return;const[i,a]=n;if(!t)return(0,p.setHash)(\"/\");2===n.length?(0,p.setHash)((0,d.oJ)(`/${encodeURIComponent(i)}/${encodeURIComponent(a)}`)):1===n.length&&(0,p.setHash)((0,d.oJ)(`/${encodeURIComponent(i)}`))}catch(e){console.error(e)}}},w=e=>({type:y,payload:o()(e)?e:[e]}),E=e=>t=>{let{layoutActions:n,layoutSelectors:r,getConfigs:o}=t;if(o().deepLinking&&e){var s;let t=i()(e).call(e,1);\"!\"===t[0]&&(t=i()(t).call(t,1)),\"/\"===t[0]&&(t=i()(t).call(t,1));const o=l()(s=t.split(\"/\")).call(s,(e=>e||\"\")),a=r.isShownKeyFromUrlHashArray(o),[c,p=\"\",h=\"\"]=a;if(\"operations\"===c){const e=r.isShownKeyFromUrlHashArray([p]);u()(p).call(p,\"_\")>-1&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),n.show(l()(e).call(e,(e=>e.replace(/_/g,\" \"))),!0)),n.show(e,!0)}(u()(p).call(p,\"_\")>-1||u()(h).call(h,\"_\")>-1)&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),n.show(l()(a).call(a,(e=>e.replace(/_/g,\" \"))),!0)),n.show(a,!0),n.scrollTo(a)}},x=(e,t)=>n=>{const r=n.layoutSelectors.getScrollToKey();g().is(r,(0,m.fromJS)(e))&&(n.layoutActions.scrollToElement(t),n.layoutActions.clearScrollTo())},S=(e,t)=>n=>{try{t=t||n.fn.getScrollParent(e),f().createScroller(t).to(e)}catch(e){console.error(e)}},_=()=>({type:v});const j={fn:{getScrollParent:function(e,t){const n=document.documentElement;let r=getComputedStyle(e);const o=\"absolute\"===r.position,s=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if(\"fixed\"===r.position)return n;for(let t=e;t=t.parentElement;)if(r=getComputedStyle(t),(!o||\"static\"!==r.position)&&s.test(r.overflow+r.overflowY+r.overflowX))return t;return n}},statePlugins:{layout:{actions:{scrollToElement:S,scrollTo:w,clearScrollTo:_,readyToScroll:x,parseDeepLinkHash:E},selectors:{getScrollToKey:e=>e.get(\"scrollToKey\"),isShownKeyFromUrlHashArray(e,t){const[n,r]=t;return r?[\"operations\",n,r]:n?[\"operations-tag\",n]:[]},urlHashArrayFromIsShownKey(e,t){let[n,r,o]=t;return\"operations\"==n?[r,o]:\"operations-tag\"==n?[r]:[]}},reducers:{[y]:(e,t)=>e.set(\"scrollToKey\",g().fromJS(t.payload)),[v]:e=>e.delete(\"scrollToKey\")},wrapActions:{show:b}}}}},34584:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),s=n(67294);const i=(e,t)=>class extends s.Component{constructor(){super(...arguments),o()(this,\"onLoad\",(e=>{const{tag:n}=this.props,r=[\"operations-tag\",n];t.layoutActions.readyToScroll(r,e)}))}render(){return s.createElement(\"span\",{ref:this.onLoad},s.createElement(e,this.props))}}},60877:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),s=n(67294);n(23930);const i=(e,t)=>class extends s.Component{constructor(){super(...arguments),o()(this,\"onLoad\",(e=>{const{operation:n}=this.props,{tag:r,operationId:o}=n.toObject();let{isShownKey:s}=n.toObject();s=s||[\"operations\",r,o],t.layoutActions.readyToScroll(s,e)}))}render(){return s.createElement(\"span\",{ref:this.onLoad},s.createElement(e,this.props))}}},48011:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(76986),o=n.n(r),s=n(63460),i=n.n(s),a=n(11882),l=n.n(a),c=n(35627),u=n.n(c),p=n(20573),h=n(43393),f=n(27504);function d(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>n=>{let{errActions:r,specSelectors:s,specActions:a,getConfigs:l}=n,{fetch:c}=t;const u=l();function p(t){if(t instanceof Error||t.status>=400)return a.updateLoadingStatus(\"failed\"),r.newThrownErr(o()(new Error((t.message||t.statusText)+\" \"+e),{source:\"fetch\"})),void(!t.status&&t instanceof Error&&function(){try{let t;if(\"URL\"in f.Z?t=new(i())(e):(t=document.createElement(\"a\"),t.href=e),\"https:\"!==t.protocol&&\"https:\"===f.Z.location.protocol){const e=o()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:\"fetch\"});return void r.newThrownErr(e)}if(t.origin!==f.Z.location.origin){const e=o()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${f.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:\"fetch\"});r.newThrownErr(e)}}catch(e){return}}());a.updateLoadingStatus(\"success\"),a.updateSpec(t.text),s.url()!==e&&a.updateUrl(e)}e=e||s.url(),a.updateLoadingStatus(\"loading\"),r.clear({source:\"fetch\"}),c({url:e,loadSpec:!0,requestInterceptor:u.requestInterceptor||(e=>e),responseInterceptor:u.responseInterceptor||(e=>e),credentials:\"same-origin\",headers:{Accept:\"application/json,*/*\"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,\"loading\",\"failed\",\"success\",\"failedConfig\"];return-1===l()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${u()(t)}`),{type:\"spec_update_loading_status\",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>\"string\"==typeof t.payload?e.set(\"loadingStatus\",t.payload):e},selectors:{loadingStatus:(0,p.P1)((e=>e||(0,h.Map)()),(e=>e.get(\"loadingStatus\")||null))}}}}}},34966:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR:()=>c,CLEAR_BY:()=>u,NEW_AUTH_ERR:()=>l,NEW_SPEC_ERR:()=>i,NEW_SPEC_ERR_BATCH:()=>a,NEW_THROWN_ERR:()=>o,NEW_THROWN_ERR_BATCH:()=>s,clear:()=>g,clearBy:()=>y,newAuthErr:()=>m,newSpecErr:()=>f,newSpecErrBatch:()=>d,newThrownErr:()=>p,newThrownErrBatch:()=>h});var r=n(7710);const o=\"err_new_thrown_err\",s=\"err_new_thrown_err_batch\",i=\"err_new_spec_err\",a=\"err_new_spec_err_batch\",l=\"err_new_auth_err\",c=\"err_clear\",u=\"err_clear_by\";function p(e){return{type:o,payload:(0,r.serializeError)(e)}}function h(e){return{type:s,payload:e}}function f(e){return{type:i,payload:e}}function d(e){return{type:a,payload:e}}function m(e){return{type:l,payload:e}}function g(){return{type:c,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function y(){return{type:u,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}},56982:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(14418),o=n.n(r),s=n(97606),i=n.n(s),a=n(54061),l=n.n(a);const c=[n(2392),n(21835)];function u(e){var t;let n={jsSpec:{}},r=l()(c,((e,t)=>{try{let r=t.transform(e,n);return o()(r).call(r,(e=>!!e))}catch(t){return console.error(\"Transformer error:\",t),e}}),e);return i()(t=o()(r).call(r,(e=>!!e))).call(t,(e=>(!e.get(\"line\")&&e.get(\"path\"),e)))}},2392:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{transform:()=>p});var r=n(97606),o=n.n(r),s=n(11882),i=n.n(s),a=n(24278),l=n.n(a),c=n(24282),u=n.n(c);function p(e){return o()(e).call(e,(e=>{var t;let n=\"is not of a type(s)\",r=i()(t=e.get(\"message\")).call(t,n);if(r>-1){var o,s;let t=l()(o=e.get(\"message\")).call(o,r+19).split(\",\");return e.set(\"message\",l()(s=e.get(\"message\")).call(s,0,r)+function(e){return u()(e).call(e,((e,t,n,r)=>n===r.length-1&&r.length>1?e+\"or \"+t:r[n+1]&&r.length>2?e+t+\", \":r[n+1]?e+t+\" \":e+t),\"should be a\")}(t))}return e}))}},21835:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{transform:()=>r});n(97606),n(11882),n(27361),n(43393);function r(e,t){let{jsSpec:n}=t;return e}},77793:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(93527),o=n(34966),s=n(87667);function i(e){return{statePlugins:{err:{reducers:(0,r.default)(e),actions:o,selectors:s}}}}},93527:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y});var r=n(76986),o=n.n(r),s=n(97606),i=n.n(s),a=n(39022),l=n.n(a),c=n(14418),u=n.n(c),p=n(2250),h=n.n(p),f=n(34966),d=n(43393),m=n(56982);let g={line:0,level:\"error\",message:\"Unknown error\"};function y(){return{[f.NEW_THROWN_ERR]:(e,t)=>{let{payload:n}=t,r=o()(g,n,{type:\"thrown\"});return e.update(\"errors\",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:\"thrown\"})))),e.update(\"errors\",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_SPEC_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(n);return r=r.set(\"type\",\"spec\"),e.update(\"errors\",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)).sortBy((e=>e.get(\"line\"))))).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=i()(n).call(n,(e=>(0,d.fromJS)(o()(g,e,{type:\"spec\"})))),e.update(\"errors\",(e=>{var t;return l()(t=e||(0,d.List)()).call(t,(0,d.fromJS)(n))})).update(\"errors\",(e=>(0,m.default)(e)))},[f.NEW_AUTH_ERR]:(e,t)=>{let{payload:n}=t,r=(0,d.fromJS)(o()({},n));return r=r.set(\"type\",\"auth\"),e.update(\"errors\",(e=>(e||(0,d.List)()).push((0,d.fromJS)(r)))).update(\"errors\",(e=>(0,m.default)(e)))},[f.CLEAR]:(e,t)=>{var n;let{payload:r}=t;if(!r||!e.get(\"errors\"))return e;let o=u()(n=e.get(\"errors\")).call(n,(e=>{var t;return h()(t=e.keySeq()).call(t,(t=>{const n=e.get(t),o=r[t];return!o||n!==o}))}));return e.merge({errors:o})},[f.CLEAR_BY]:(e,t)=>{var n;let{payload:r}=t;if(!r||\"function\"!=typeof r)return e;let o=u()(n=e.get(\"errors\")).call(n,(e=>r(e)));return e.merge({errors:o})}}}},87667:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{allErrors:()=>s,lastError:()=>i});var r=n(43393),o=n(20573);const s=(0,o.P1)((e=>e),(e=>e.get(\"errors\",(0,r.List)()))),i=(0,o.P1)(s,(e=>e.last()))},49978:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(4309);function o(){return{fn:{opsFilter:r.default}}}},4309:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(14418),o=n.n(r),s=n(11882),i=n.n(s);function a(e,t){return o()(e).call(e,((e,n)=>-1!==i()(n).call(n,t)))}},47349:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(67294),o=n(94184),s=n.n(o),i=n(12603);const a=e=>{let{expanded:t,children:n,onChange:o}=e;const a=(0,i.useComponent)(\"ChevronRightIcon\"),l=(0,r.useCallback)((e=>{o(e,!t)}),[t,o]);return r.createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-accordion\",onClick:l},r.createElement(\"div\",{className:\"json-schema-2020-12-accordion__children\"},n),r.createElement(\"span\",{className:s()(\"json-schema-2020-12-accordion__icon\",{\"json-schema-2020-12-accordion__icon--expanded\":t,\"json-schema-2020-12-accordion__icon--collapsed\":!t})},r.createElement(a,null)))};a.defaultProps={expanded:!1};const l=a},36867:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{expanded:t,onClick:n}=e;const o=(0,r.useCallback)((e=>{n(e,!t)}),[t,n]);return r.createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-expand-deep-button\",onClick:o},t?\"Collapse all\":\"Expand all\")}},22675:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(97606),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=(n(16648),n(12603)),c=n(69006);const u=(0,s.forwardRef)(((e,t)=>{let{schema:n,name:r,dependentRequired:i,onExpand:u}=e;const p=(0,l.useFn)(),h=(0,l.useIsExpanded)(),f=(0,l.useIsExpandedDeeply)(),[d,m]=(0,s.useState)(h||f),[g,y]=(0,s.useState)(f),[v,b]=(0,l.useLevel)(),w=(0,l.useIsEmbedded)(),E=p.isExpandable(n)||i.length>0,x=(0,l.useIsCircular)(n),S=(0,l.useRenderedSchemas)(n),_=p.stringifyConstraints(n),j=(0,l.useComponent)(\"Accordion\"),O=(0,l.useComponent)(\"Keyword$schema\"),k=(0,l.useComponent)(\"Keyword$vocabulary\"),A=(0,l.useComponent)(\"Keyword$id\"),C=(0,l.useComponent)(\"Keyword$anchor\"),P=(0,l.useComponent)(\"Keyword$dynamicAnchor\"),N=(0,l.useComponent)(\"Keyword$ref\"),I=(0,l.useComponent)(\"Keyword$dynamicRef\"),T=(0,l.useComponent)(\"Keyword$defs\"),R=(0,l.useComponent)(\"Keyword$comment\"),M=(0,l.useComponent)(\"KeywordAllOf\"),D=(0,l.useComponent)(\"KeywordAnyOf\"),F=(0,l.useComponent)(\"KeywordOneOf\"),L=(0,l.useComponent)(\"KeywordNot\"),B=(0,l.useComponent)(\"KeywordIf\"),$=(0,l.useComponent)(\"KeywordThen\"),q=(0,l.useComponent)(\"KeywordElse\"),U=(0,l.useComponent)(\"KeywordDependentSchemas\"),z=(0,l.useComponent)(\"KeywordPrefixItems\"),V=(0,l.useComponent)(\"KeywordItems\"),W=(0,l.useComponent)(\"KeywordContains\"),J=(0,l.useComponent)(\"KeywordProperties\"),K=(0,l.useComponent)(\"KeywordPatternProperties\"),H=(0,l.useComponent)(\"KeywordAdditionalProperties\"),G=(0,l.useComponent)(\"KeywordPropertyNames\"),Z=(0,l.useComponent)(\"KeywordUnevaluatedItems\"),Y=(0,l.useComponent)(\"KeywordUnevaluatedProperties\"),X=(0,l.useComponent)(\"KeywordType\"),Q=(0,l.useComponent)(\"KeywordEnum\"),ee=(0,l.useComponent)(\"KeywordConst\"),te=(0,l.useComponent)(\"KeywordConstraint\"),ne=(0,l.useComponent)(\"KeywordDependentRequired\"),re=(0,l.useComponent)(\"KeywordContentSchema\"),oe=(0,l.useComponent)(\"KeywordTitle\"),se=(0,l.useComponent)(\"KeywordDescription\"),ie=(0,l.useComponent)(\"KeywordDefault\"),ae=(0,l.useComponent)(\"KeywordDeprecated\"),le=(0,l.useComponent)(\"KeywordReadOnly\"),ce=(0,l.useComponent)(\"KeywordWriteOnly\"),ue=(0,l.useComponent)(\"ExpandDeepButton\");(0,s.useEffect)((()=>{y(f)}),[f]),(0,s.useEffect)((()=>{y(g)}),[g]);const pe=(0,s.useCallback)(((e,t)=>{m(t),!t&&y(!1),u(e,t,!1)}),[u]),he=(0,s.useCallback)(((e,t)=>{m(t),y(t),u(e,t,!0)}),[u]);return s.createElement(c.JSONSchemaLevelContext.Provider,{value:b},s.createElement(c.JSONSchemaDeepExpansionContext.Provider,{value:g},s.createElement(c.JSONSchemaCyclesContext.Provider,{value:S},s.createElement(\"article\",{ref:t,\"data-json-schema-level\":v,className:a()(\"json-schema-2020-12\",{\"json-schema-2020-12--embedded\":w,\"json-schema-2020-12--circular\":x})},s.createElement(\"div\",{className:\"json-schema-2020-12-head\"},E&&!x?s.createElement(s.Fragment,null,s.createElement(j,{expanded:d,onChange:pe},s.createElement(oe,{title:r,schema:n})),s.createElement(ue,{expanded:d,onClick:he})):s.createElement(oe,{title:r,schema:n}),s.createElement(ae,{schema:n}),s.createElement(le,{schema:n}),s.createElement(ce,{schema:n}),s.createElement(X,{schema:n,isCircular:x}),_.length>0&&o()(_).call(_,(e=>s.createElement(te,{key:`${e.scope}-${e.value}`,constraint:e})))),s.createElement(\"div\",{className:a()(\"json-schema-2020-12-body\",{\"json-schema-2020-12-body--collapsed\":!d})},d&&s.createElement(s.Fragment,null,s.createElement(se,{schema:n}),!x&&E&&s.createElement(s.Fragment,null,s.createElement(J,{schema:n}),s.createElement(K,{schema:n}),s.createElement(H,{schema:n}),s.createElement(Y,{schema:n}),s.createElement(G,{schema:n}),s.createElement(M,{schema:n}),s.createElement(D,{schema:n}),s.createElement(F,{schema:n}),s.createElement(L,{schema:n}),s.createElement(B,{schema:n}),s.createElement($,{schema:n}),s.createElement(q,{schema:n}),s.createElement(U,{schema:n}),s.createElement(z,{schema:n}),s.createElement(V,{schema:n}),s.createElement(Z,{schema:n}),s.createElement(W,{schema:n}),s.createElement(re,{schema:n})),s.createElement(Q,{schema:n}),s.createElement(ee,{schema:n}),s.createElement(ne,{schema:n,dependentRequired:i}),s.createElement(ie,{schema:n}),s.createElement(O,{schema:n}),s.createElement(k,{schema:n}),s.createElement(A,{schema:n}),s.createElement(C,{schema:n}),s.createElement(P,{schema:n}),s.createElement(N,{schema:n}),!x&&E&&s.createElement(T,{schema:n}),s.createElement(I,{schema:n}),s.createElement(R,{schema:n})))))))}));u.defaultProps={name:\"\",dependentRequired:[],onExpand:()=>{}};const p=u},12260:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=()=>r.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\"},r.createElement(\"path\",{d:\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"}))},64922:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$anchor?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$anchor\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$anchor)):null}},4685:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$comment?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$comment\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$comment)):null}},36418:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=n(94184),p=n.n(u),h=(n(16648),n(12603)),f=n(69006);const d=e=>{var t;let{schema:n}=e;const r=(null==n?void 0:n.$defs)||{},s=(0,h.useIsExpandedDeeply)(),[a,u]=(0,c.useState)(s),[d,m]=(0,c.useState)(!1),g=(0,h.useComponent)(\"Accordion\"),y=(0,h.useComponent)(\"ExpandDeepButton\"),v=(0,h.useComponent)(\"JSONSchema\"),b=(0,c.useCallback)((()=>{u((e=>!e))}),[]),w=(0,c.useCallback)(((e,t)=>{u(t),m(t)}),[]);return 0===o()(r).length?null:c.createElement(f.JSONSchemaDeepExpansionContext.Provider,{value:d},c.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs\"},c.createElement(g,{expanded:a,onChange:b},c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$defs\")),c.createElement(y,{expanded:a,onClick:w}),c.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),c.createElement(\"ul\",{className:p()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!a})},a&&c.createElement(c.Fragment,null,i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},c.createElement(v,{name:t,schema:n}))}))))))}},51338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$dynamicAnchor?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicAnchor\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicAnchor)):null}},27655:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$dynamicRef?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicRef\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicRef)):null}},93460:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$id?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$id\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$id)):null}},72348:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$ref?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$ref\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$ref)):null}},69359:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.$schema?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$schema\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$schema)):null}},7568:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(97606),o=n.n(r),s=n(2018),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603));const p=e=>{var t;let{schema:n}=e;const r=(0,u.useIsExpandedDeeply)(),[s,l]=(0,a.useState)(r),p=(0,u.useComponent)(\"Accordion\"),h=(0,a.useCallback)((()=>{l((e=>!e))}),[]);return null!=n&&n.$vocabulary?\"object\"!=typeof n.$vocabulary?null:a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary\"},a.createElement(p,{expanded:s,onChange:h},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$vocabulary\")),a.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),a.createElement(\"ul\",null,s&&o()(t=i()(n.$vocabulary)).call(t,(e=>{let[t,n]=e;return a.createElement(\"li\",{key:t,className:c()(\"json-schema-2020-12-$vocabulary-uri\",{\"json-schema-2020-12-$vocabulary-uri--disabled\":!n})},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t))})))):null}},65253:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{additionalProperties:s}=t,i=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"additionalProperties\"))return null;const a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Additional properties\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties\"},!0===s?r.createElement(r.Fragment,null,a,r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"allowed\")):!1===s?r.createElement(r.Fragment,null,a,r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"forbidden\")):r.createElement(i,{name:a,schema:s}))}},46457:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.allOf)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"All of\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{allOf:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},8776:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.anyOf)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Any of\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{anyOf:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},27308:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)();return n.hasKeyword(t,\"const\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--const\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Const\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},n.stringify(t.const))):null}},69956:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294);const o=e=>{let{constraint:t}=e;return r.createElement(\"span\",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${t.scope}`},t.value)},s=r.memo(o)},38993:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"contains\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Contains\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains\"},r.createElement(s,{name:i,schema:t.contains}))}},3484:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"contentSchema\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Content schema\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema\"},r.createElement(s,{name:i,schema:t.contentSchema}))}},55148:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)();return n.hasKeyword(t,\"default\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--default\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Default\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},n.stringify(t.default))):null}},24539:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(97606),o=n.n(r),s=n(67294);n(16648);const i=e=>{let{dependentRequired:t}=e;return 0===t.length?null:s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Required when defined\"),s.createElement(\"ul\",null,o()(t).call(t,(e=>s.createElement(\"li\",{key:e},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning\"},e))))))}},26076:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=n(94184),p=n.n(u),h=(n(16648),n(12603)),f=n(69006);const d=e=>{var t;let{schema:n}=e;const r=(null==n?void 0:n.dependentSchemas)||[],s=(0,h.useIsExpandedDeeply)(),[a,u]=(0,c.useState)(s),[d,m]=(0,c.useState)(!1),g=(0,h.useComponent)(\"Accordion\"),y=(0,h.useComponent)(\"ExpandDeepButton\"),v=(0,h.useComponent)(\"JSONSchema\"),b=(0,c.useCallback)((()=>{u((e=>!e))}),[]),w=(0,c.useCallback)(((e,t)=>{u(t),m(t)}),[]);return\"object\"!=typeof r||0===o()(r).length?null:c.createElement(f.JSONSchemaDeepExpansionContext.Provider,{value:d},c.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas\"},c.createElement(g,{expanded:a,onChange:b},c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Dependent schemas\")),c.createElement(y,{expanded:a,onClick:w}),c.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),c.createElement(\"ul\",{className:p()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!a})},a&&c.createElement(c.Fragment,null,i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},c.createElement(v,{name:t,schema:n}))}))))))}},26661:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.deprecated)?null:r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning\"},\"deprecated\")}},79446:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return null!=t&&t.description?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},r.createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},t.description)):null}},67207:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"else\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Else\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},r.createElement(s,{name:i,schema:t.else}))}},91805:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=(n(16648),n(12603));const c=e=>{var t;let{schema:n}=e;const r=(0,l.useFn)();return o()(null==n?void 0:n.enum)?a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum\"},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Allowed values\"),a.createElement(\"ul\",null,i()(t=n.enum).call(t,(e=>{const t=r.stringify(e);return a.createElement(\"li\",{key:t},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},t))})))):null}},40487:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"if\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"If\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},r.createElement(s,{name:i,schema:t.if}))}},89206:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"items\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Items\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--items\"},r.createElement(s,{name:i,schema:t.items}))}},65174:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"not\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Not\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--not\"},r.createElement(s,{name:i,schema:t.not}))}},13834:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.oneOf)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"One of\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{oneOf:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},36746:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=(n(16648),n(12603));const p=e=>{var t;let{schema:n}=e;const r=(null==n?void 0:n.patternProperties)||{},s=(0,u.useComponent)(\"JSONSchema\");return 0===o()(r).length?null:c.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties\"},c.createElement(\"ul\",null,i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},c.createElement(s,{name:t,schema:n}))}))))}},93971:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294),l=n(94184),c=n.n(l),u=(n(16648),n(12603)),p=n(69006);const h=e=>{let{schema:t}=e;const n=(null==t?void 0:t.prefixItems)||[],r=(0,u.useFn)(),s=(0,u.useIsExpandedDeeply)(),[l,h]=(0,a.useState)(s),[f,d]=(0,a.useState)(!1),m=(0,u.useComponent)(\"Accordion\"),g=(0,u.useComponent)(\"ExpandDeepButton\"),y=(0,u.useComponent)(\"JSONSchema\"),v=(0,u.useComponent)(\"KeywordType\"),b=(0,a.useCallback)((()=>{h((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{h(t),d(t)}),[]);return o()(n)&&0!==n.length?a.createElement(p.JSONSchemaDeepExpansionContext.Provider,{value:f},a.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems\"},a.createElement(m,{expanded:l,onChange:b},a.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Prefix items\")),a.createElement(g,{expanded:l,onClick:w}),a.createElement(v,{schema:{prefixItems:n}}),a.createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&a.createElement(a.Fragment,null,i()(n).call(n,((e,t)=>a.createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},a.createElement(y,{name:`#${t} ${r.getTitle(e)}`,schema:e})))))))):null}},25472:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y});var r=n(58309),o=n.n(r),s=n(28222),i=n.n(s),a=n(97606),l=n.n(a),c=n(2018),u=n.n(c),p=n(58118),h=n.n(p),f=n(67294),d=n(94184),m=n.n(d),g=(n(16648),n(12603));const y=e=>{var t;let{schema:n}=e;const r=(0,g.useFn)(),s=(null==n?void 0:n.properties)||{},a=o()(null==n?void 0:n.required)?n.required:[],c=(0,g.useComponent)(\"JSONSchema\");return 0===i()(s).length?null:f.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},f.createElement(\"ul\",null,l()(t=u()(s)).call(t,(e=>{let[t,o]=e;const s=h()(a).call(a,t),i=r.getDependentRequired(t,n);return f.createElement(\"li\",{key:t,className:m()(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":s})},f.createElement(c,{name:t,schema:o,dependentRequired:i}))}))))}},42338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{propertyNames:s}=t,i=(0,o.useComponent)(\"JSONSchema\"),a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Property names\");return n.hasKeyword(t,\"propertyNames\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames\"},r.createElement(i,{name:a,schema:s})):null}},16456:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.readOnly)?null:r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"read-only\")}},67401:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),s=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"then\"))return null;const i=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Then\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--then\"},r.createElement(s,{name:i,schema:t.then}))}},78137:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{title:t,schema:n}=e;const s=(0,o.useFn)();return t||s.getTitle(n)?r.createElement(\"div\",{className:\"json-schema-2020-12__title\"},t||s.getTitle(n)):null};s.defaultProps={title:\"\"};const i=s},22285:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t,isCircular:n}=e;const s=(0,o.useFn)().getType(t),i=n?\" [circular]\":\"\";return r.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},`${s}${i}`)};s.defaultProps={isCircular:!1};const i=s},85828:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{unevaluatedItems:s}=t,i=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"unevaluatedItems\"))return null;const a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated items\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems\"},r.createElement(i,{name:a,schema:s}))}},6907:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=(n(16648),n(12603));const s=e=>{let{schema:t}=e;const n=(0,o.useFn)(),{unevaluatedProperties:s}=t,i=(0,o.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"unevaluatedProperties\"))return null;const a=r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated properties\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties\"},r.createElement(i,{name:a,schema:s}))}},15789:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);n(16648);const o=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.writeOnly)?null:r.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"write-only\")}},69006:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{JSONSchemaContext:()=>i,JSONSchemaCyclesContext:()=>c,JSONSchemaDeepExpansionContext:()=>l,JSONSchemaLevelContext:()=>a});var r=n(82737),o=n.n(r),s=n(67294);const i=(0,s.createContext)(null);i.displayName=\"JSONSchemaContext\";const a=(0,s.createContext)(0);a.displayName=\"JSONSchemaLevelContext\";const l=(0,s.createContext)(!1);l.displayName=\"JSONSchemaDeepExpansionContext\";const c=(0,s.createContext)(new(o()))},33499:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getDependentRequired:()=>F,getTitle:()=>C,getType:()=>P,hasKeyword:()=>I,isBooleanJSONSchema:()=>N,isExpandable:()=>T,stringify:()=>R,stringifyConstraints:()=>D,upperFirst:()=>A});var r=n(24278),o=n.n(r),s=n(19030),i=n.n(s),a=n(58309),l=n.n(a),c=n(97606),u=n.n(c),p=n(58118),h=n.n(p),f=n(91086),d=n.n(f),m=n(14418),g=n.n(m),y=n(35627),v=n.n(y),b=n(25110),w=n.n(b),E=n(24282),x=n.n(E),S=n(2018),_=n.n(S),j=n(82737),O=n.n(j),k=n(12603);const A=e=>\"string\"==typeof e?`${e.charAt(0).toUpperCase()}${o()(e).call(e,1)}`:e,C=e=>{const t=(0,k.useFn)();return null!=e&&e.title?t.upperFirst(e.title):null!=e&&e.$anchor?t.upperFirst(e.$anchor):null!=e&&e.$id?e.$id:\"\"},P=function(e){var t,n;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new(i());const o=(0,k.useFn)();if(null==e)return\"any\";if(o.isBooleanJSONSchema(e))return e?\"any\":\"never\";if(\"object\"!=typeof e)return\"any\";if(r.has(e))return\"any\";r.add(e);const{type:s,prefixItems:a,items:c}=e,p=()=>{if(l()(a)){const e=u()(a).call(a,(e=>P(e,r))),t=c?P(c,r):\"any\";return`array<[${e.join(\", \")}], ${t}>`}if(c){return`array<${P(c,r)}>`}return\"array<any>\"};if(e.not&&\"any\"===P(e.not))return\"never\";const f=l()(s)?u()(s).call(s,(e=>\"array\"===e?p():e)).join(\" | \"):\"array\"===s?p():h()(t=[\"null\",\"boolean\",\"object\",\"array\",\"number\",\"string\"]).call(t,s)?s:(()=>{var t,n;if(Object.hasOwn(e,\"prefixItems\")||Object.hasOwn(e,\"items\")||Object.hasOwn(e,\"contains\"))return p();if(Object.hasOwn(e,\"properties\")||Object.hasOwn(e,\"additionalProperties\")||Object.hasOwn(e,\"patternProperties\"))return\"object\";if(h()(t=[\"int32\",\"int64\"]).call(t,e.format))return\"integer\";if(h()(n=[\"float\",\"double\"]).call(n,e.format))return\"number\";if(Object.hasOwn(e,\"minimum\")||Object.hasOwn(e,\"maximum\")||Object.hasOwn(e,\"exclusiveMinimum\")||Object.hasOwn(e,\"exclusiveMaximum\")||Object.hasOwn(e,\"multipleOf\"))return\"number | integer\";if(Object.hasOwn(e,\"pattern\")||Object.hasOwn(e,\"format\")||Object.hasOwn(e,\"minLength\")||Object.hasOwn(e,\"maxLength\"))return\"string\";if(void 0!==e.const){if(null===e.const)return\"null\";if(\"boolean\"==typeof e.const)return\"boolean\";if(\"number\"==typeof e.const)return d()(e.const)?\"integer\":\"number\";if(\"string\"==typeof e.const)return\"string\";if(l()(e.const))return\"array<any>\";if(\"object\"==typeof e.const)return\"object\"}return null})(),m=(t,n)=>{if(l()(e[t])){var o;return`(${u()(o=e[t]).call(o,(e=>P(e,r))).join(n)})`}return null},y=m(\"oneOf\",\" | \"),v=m(\"anyOf\",\" | \"),b=m(\"allOf\",\" & \"),w=g()(n=[f,y,v,b]).call(n,Boolean).join(\" | \");return r.delete(e),w||\"any\"},N=e=>\"boolean\"==typeof e,I=(e,t)=>null!==e&&\"object\"==typeof e&&Object.hasOwn(e,t),T=e=>{const t=(0,k.useFn)();return(null==e?void 0:e.$schema)||(null==e?void 0:e.$vocabulary)||(null==e?void 0:e.$id)||(null==e?void 0:e.$anchor)||(null==e?void 0:e.$dynamicAnchor)||(null==e?void 0:e.$ref)||(null==e?void 0:e.$dynamicRef)||(null==e?void 0:e.$defs)||(null==e?void 0:e.$comment)||(null==e?void 0:e.allOf)||(null==e?void 0:e.anyOf)||(null==e?void 0:e.oneOf)||t.hasKeyword(e,\"not\")||t.hasKeyword(e,\"if\")||t.hasKeyword(e,\"then\")||t.hasKeyword(e,\"else\")||(null==e?void 0:e.dependentSchemas)||(null==e?void 0:e.prefixItems)||t.hasKeyword(e,\"items\")||t.hasKeyword(e,\"contains\")||(null==e?void 0:e.properties)||(null==e?void 0:e.patternProperties)||t.hasKeyword(e,\"additionalProperties\")||t.hasKeyword(e,\"propertyNames\")||t.hasKeyword(e,\"unevaluatedItems\")||t.hasKeyword(e,\"unevaluatedProperties\")||(null==e?void 0:e.description)||(null==e?void 0:e.enum)||t.hasKeyword(e,\"const\")||t.hasKeyword(e,\"contentSchema\")||t.hasKeyword(e,\"default\")},R=e=>{var t;return null===e||h()(t=[\"number\",\"bigint\",\"boolean\"]).call(t,typeof e)?String(e):l()(e)?`[${u()(e).call(e,R).join(\", \")}]`:v()(e)},M=(e,t,n)=>{const r=\"number\"==typeof t,o=\"number\"==typeof n;return r&&o?t===n?`${t} ${e}`:`[${t}, ${n}] ${e}`:r?`>= ${t} ${e}`:o?`<= ${n} ${e}`:null},D=e=>{const t=[],n=(e=>{if(\"number\"!=typeof(null==e?void 0:e.multipleOf))return null;if(e.multipleOf<=0)return null;if(1===e.multipleOf)return null;const{multipleOf:t}=e;if(d()(t))return`multiple of ${t}`;const n=10**t.toString().split(\".\")[1].length;return`multiple of ${t*n}/${n}`})(e);null!==n&&t.push({scope:\"number\",value:n});const r=(e=>{const t=null==e?void 0:e.minimum,n=null==e?void 0:e.maximum,r=null==e?void 0:e.exclusiveMinimum,o=null==e?void 0:e.exclusiveMaximum,s=\"number\"==typeof t,i=\"number\"==typeof n,a=\"number\"==typeof r&&t<r,l=\"number\"==typeof o&&n>o;if(s&&i)return`${a?\"(\":\"[\"}${a?r:t}, ${l?o:n}${l?\")\":\"]\"}`;if(s)return`${a?\">\":\"≥\"} ${a?r:t}`;if(i)return`${l?\"<\":\"≤\"} ${l?o:n}`;return null})(e);null!==r&&t.push({scope:\"number\",value:r}),null!=e&&e.format&&t.push({scope:\"string\",value:e.format});const o=M(\"characters\",null==e?void 0:e.minLength,null==e?void 0:e.maxLength);null!==o&&t.push({scope:\"string\",value:o}),null!=e&&e.pattern&&t.push({scope:\"string\",value:`matches ${null==e?void 0:e.pattern}`}),null!=e&&e.contentMediaType&&t.push({scope:\"string\",value:`media type: ${e.contentMediaType}`}),null!=e&&e.contentEncoding&&t.push({scope:\"string\",value:`encoding: ${e.contentEncoding}`});const s=M(null!=e&&e.hasUniqueItems?\"unique items\":\"items\",null==e?void 0:e.minItems,null==e?void 0:e.maxItems);null!==s&&t.push({scope:\"array\",value:s});const i=M(\"contained items\",null==e?void 0:e.minContains,null==e?void 0:e.maxContains);null!==i&&t.push({scope:\"array\",value:i});const a=M(\"properties\",null==e?void 0:e.minProperties,null==e?void 0:e.maxProperties);return null!==a&&t.push({scope:\"object\",value:a}),t},F=(e,t)=>{var n;return null!=t&&t.dependentRequired?w()(x()(n=_()(t.dependentRequired)).call(n,((t,n)=>{let[r,o]=n;return l()(o)&&h()(o).call(o,e)?(t.add(r),t):t}),new(O()))):[]}},65077:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{withJSONSchemaContext:()=>H});var r=n(67294),o=n(22675),s=n(69359),i=n(7568),a=n(93460),l=n(64922),c=n(51338),u=n(72348),p=n(27655),h=n(36418),f=n(4685),d=n(46457),m=n(8776),g=n(13834),y=n(65174),v=n(40487),b=n(67401),w=n(67207),E=n(26076),x=n(93971),S=n(89206),_=n(38993),j=n(25472),O=n(36746),k=n(65253),A=n(42338),C=n(85828),P=n(6907),N=n(22285),I=n(91805),T=n(27308),R=n(69956),M=n(24539),D=n(3484),F=n(78137),L=n(79446),B=n(55148),$=n(26661),q=n(16456),U=n(15789),z=n(47349),V=n(36867),W=n(12260),J=n(69006),K=n(33499);const H=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={components:{JSONSchema:o.default,Keyword$schema:s.default,Keyword$vocabulary:i.default,Keyword$id:a.default,Keyword$anchor:l.default,Keyword$dynamicAnchor:c.default,Keyword$ref:u.default,Keyword$dynamicRef:p.default,Keyword$defs:h.default,Keyword$comment:f.default,KeywordAllOf:d.default,KeywordAnyOf:m.default,KeywordOneOf:g.default,KeywordNot:y.default,KeywordIf:v.default,KeywordThen:b.default,KeywordElse:w.default,KeywordDependentSchemas:E.default,KeywordPrefixItems:x.default,KeywordItems:S.default,KeywordContains:_.default,KeywordProperties:j.default,KeywordPatternProperties:O.default,KeywordAdditionalProperties:k.default,KeywordPropertyNames:A.default,KeywordUnevaluatedItems:C.default,KeywordUnevaluatedProperties:P.default,KeywordType:N.default,KeywordEnum:I.default,KeywordConst:T.default,KeywordConstraint:R.default,KeywordDependentRequired:M.default,KeywordContentSchema:D.default,KeywordTitle:F.default,KeywordDescription:L.default,KeywordDefault:B.default,KeywordDeprecated:$.default,KeywordReadOnly:q.default,KeywordWriteOnly:U.default,Accordion:z.default,ExpandDeepButton:V.default,ChevronRightIcon:W.default,...t.components},config:{default$schema:\"https://json-schema.org/draft/2020-12/schema\",defaultExpandedLevels:0,...t.config},fn:{upperFirst:K.upperFirst,getTitle:K.getTitle,getType:K.getType,isBooleanJSONSchema:K.isBooleanJSONSchema,hasKeyword:K.hasKeyword,isExpandable:K.isExpandable,stringify:K.stringify,stringifyConstraints:K.stringifyConstraints,getDependentRequired:K.getDependentRequired,...t.fn}},H=t=>r.createElement(J.JSONSchemaContext.Provider,{value:n},r.createElement(e,t));return H.contexts={JSONSchemaContext:J.JSONSchemaContext},H.displayName=e.displayName,H}},12603:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{useComponent:()=>l,useConfig:()=>a,useFn:()=>c,useIsCircular:()=>m,useIsEmbedded:()=>p,useIsExpanded:()=>h,useIsExpandedDeeply:()=>f,useLevel:()=>u,useRenderedSchemas:()=>d});var r=n(82737),o=n.n(r),s=n(67294),i=n(69006);const a=()=>{const{config:e}=(0,s.useContext)(i.JSONSchemaContext);return e},l=e=>{const{components:t}=(0,s.useContext)(i.JSONSchemaContext);return t[e]||null},c=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:t}=(0,s.useContext)(i.JSONSchemaContext);return void 0!==e?t[e]:t},u=()=>{const e=(0,s.useContext)(i.JSONSchemaLevelContext);return[e,e+1]},p=()=>{const[e]=u();return e>0},h=()=>{const[e]=u(),{defaultExpandedLevels:t}=a();return t-e>0},f=()=>(0,s.useContext)(i.JSONSchemaDeepExpansionContext),d=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e)return(0,s.useContext)(i.JSONSchemaCyclesContext);const t=(0,s.useContext)(i.JSONSchemaCyclesContext);return new(o())([...t,e])},m=e=>d().has(e)},97139:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>Z});var r=n(22675),o=n(69359),s=n(7568),i=n(93460),a=n(64922),l=n(51338),c=n(72348),u=n(27655),p=n(36418),h=n(4685),f=n(46457),d=n(8776),m=n(13834),g=n(65174),y=n(40487),v=n(67401),b=n(67207),w=n(26076),E=n(93971),x=n(89206),S=n(38993),_=n(25472),j=n(36746),O=n(65253),k=n(42338),A=n(85828),C=n(6907),P=n(22285),N=n(91805),I=n(27308),T=n(69956),R=n(24539),M=n(3484),D=n(78137),F=n(79446),L=n(55148),B=n(26661),$=n(16456),q=n(15789),U=n(47349),z=n(36867),V=n(12260),W=n(33499),J=n(78591),K=n(69006),H=n(12603),G=n(65077);const Z=()=>({components:{JSONSchema202012:r.default,JSONSchema202012Keyword$schema:o.default,JSONSchema202012Keyword$vocabulary:s.default,JSONSchema202012Keyword$id:i.default,JSONSchema202012Keyword$anchor:a.default,JSONSchema202012Keyword$dynamicAnchor:l.default,JSONSchema202012Keyword$ref:c.default,JSONSchema202012Keyword$dynamicRef:u.default,JSONSchema202012Keyword$defs:p.default,JSONSchema202012Keyword$comment:h.default,JSONSchema202012KeywordAllOf:f.default,JSONSchema202012KeywordAnyOf:d.default,JSONSchema202012KeywordOneOf:m.default,JSONSchema202012KeywordNot:g.default,JSONSchema202012KeywordIf:y.default,JSONSchema202012KeywordThen:v.default,JSONSchema202012KeywordElse:b.default,JSONSchema202012KeywordDependentSchemas:w.default,JSONSchema202012KeywordPrefixItems:E.default,JSONSchema202012KeywordItems:x.default,JSONSchema202012KeywordContains:S.default,JSONSchema202012KeywordProperties:_.default,JSONSchema202012KeywordPatternProperties:j.default,JSONSchema202012KeywordAdditionalProperties:O.default,JSONSchema202012KeywordPropertyNames:k.default,JSONSchema202012KeywordUnevaluatedItems:A.default,JSONSchema202012KeywordUnevaluatedProperties:C.default,JSONSchema202012KeywordType:P.default,JSONSchema202012KeywordEnum:N.default,JSONSchema202012KeywordConst:I.default,JSONSchema202012KeywordConstraint:T.default,JSONSchema202012KeywordDependentRequired:R.default,JSONSchema202012KeywordContentSchema:M.default,JSONSchema202012KeywordTitle:D.default,JSONSchema202012KeywordDescription:F.default,JSONSchema202012KeywordDefault:L.default,JSONSchema202012KeywordDeprecated:B.default,JSONSchema202012KeywordReadOnly:$.default,JSONSchema202012KeywordWriteOnly:q.default,JSONSchema202012Accordion:U.default,JSONSchema202012ExpandDeepButton:z.default,JSONSchema202012ChevronRightIcon:V.default,withJSONSchema202012Context:G.withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>K.JSONSchemaDeepExpansionContext},fn:{upperFirst:W.upperFirst,jsonSchema202012:{isExpandable:W.isExpandable,hasKeyword:W.hasKeyword,useFn:H.useFn,useConfig:H.useConfig,useComponent:H.useComponent,useIsExpandedDeeply:H.useIsExpandedDeeply,sampleFromSchema:J.sampleFromSchema,sampleFromSchemaGeneric:J.sampleFromSchemaGeneric,sampleEncoderAPI:J.encoderAPI,sampleFormatAPI:J.formatAPI,sampleMediaTypeAPI:J.mediaTypeAPI,createXMLExample:J.createXMLExample,memoizedSampleFromSchema:J.memoizedSampleFromSchema,memoizedCreateXMLExample:J.memoizedCreateXMLExample}}})},16648:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{booleanSchema:()=>i,objectSchema:()=>s,schema:()=>a});var r=n(45697),o=n.n(r);const s=o().object,i=o().bool,a=o().oneOfType([s,i])},9507:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const r=new(n(70674).default),o=(e,t)=>\"function\"==typeof t?r.register(e,t):null===t?r.unregister(e):r.get(e);o.getDefaults=()=>r.defaults;const s=o},22906:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});const r=new(n(14215).default),o=(e,t)=>\"function\"==typeof t?r.register(e,t):null===t?r.unregister(e):r.get(e)},90537:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const r=new(n(43782).default),o=(e,t)=>{if(\"function\"==typeof t)return r.register(e,t);if(null===t)return r.unregister(e);const n=e.split(\";\").at(0),o=`${n.split(\"/\").at(0)}/*`;return r.get(e)||r.get(n)||r.get(o)};o.getDefaults=()=>r.defaults;const s=o},70674:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>w});var r=n(61125),o=n.n(r),s=n(47667),i=n.n(s),a=n(28886),l=n.n(a),c=n(14215),u=n(41433),p=n(58509),h=n(44366),f=n(65037),d=n(5709),m=n(54180),g=n(91967);function y(e,t,n){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,n)}var v=new(l());class b extends c.default{constructor(){super(...arguments),y(this,v,{writable:!0,value:{\"7bit\":u.default,\"8bit\":p.default,binary:h.default,\"quoted-printable\":f.default,base16:d.default,base32:m.default,base64:g.default}}),o()(this,\"data\",{...i()(this,v)})}get defaults(){return{...i()(this,v)}}}const w=b},43782:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>v});var r=n(61125),o=n.n(r),s=n(47667),i=n.n(s),a=n(28886),l=n.n(a),c=n(14215),u=n(65378),p=n(46724),h=n(54342),f=n(92974),d=n(2672);function m(e,t,n){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,n)}var g=new(l());class y extends c.default{constructor(){super(...arguments),m(this,g,{writable:!0,value:{...u.default,...p.default,...h.default,...f.default,...d.default}}),o()(this,\"data\",{...i()(this,g)})}get defaults(){return{...i()(this,g)}}}const v=y},14215:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(61125),o=n.n(r);const s=class{constructor(){o()(this,\"data\",{})}register(e,t){this.data[e]=t}unregister(e){void 0===e?this.data={}:delete this.data[e]}get(e){return this.data[e]}}},84539:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ALL_TYPES:()=>o,SCALAR_TYPES:()=>r});const r=[\"number\",\"integer\",\"string\",\"boolean\",\"null\"],o=[\"array\",\"object\",...r]},13783:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{extractExample:()=>a,hasExample:()=>i});var r=n(58309),o=n.n(r),s=n(23084);const i=e=>{if(!(0,s.isJSONSchemaObject)(e))return!1;const{examples:t,example:n,default:r}=e;return!!(o()(t)&&t.length>=1)||(void 0!==r||void 0!==n)},a=e=>{if(!(0,s.isJSONSchemaObject)(e))return null;const{examples:t,example:n,default:r}=e;return o()(t)&&t.length>=1?t.at(0):void 0!==r?r:void 0!==n?n:void 0}},37078:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>v});var r=n(58309),o=n.n(r),s=n(39022),i=n.n(s),a=n(25110),l=n.n(a),c=n(82737),u=n.n(c),p=n(28222),h=n.n(p),f=n(14418),d=n.n(f),m=n(90242),g=n(23084);const y=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if((0,g.isBooleanJSONSchema)(e)&&!0===e)return!0;if((0,g.isBooleanJSONSchema)(e)&&!1===e)return!1;if((0,g.isBooleanJSONSchema)(t)&&!0===t)return!0;if((0,g.isBooleanJSONSchema)(t)&&!1===t)return!1;if(!(0,g.isJSONSchema)(e))return t;if(!(0,g.isJSONSchema)(t))return e;const r={...t,...e};if(t.type&&e.type&&o()(t.type)&&\"string\"==typeof t.type){var s;const n=i()(s=(0,m.AF)(t.type)).call(s,e.type);r.type=l()(new(u())(n))}if(o()(t.required)&&o()(e.required)&&(r.required=[...new(u())([...e.required,...t.required])]),t.properties&&e.properties){const o=new(u())([...h()(t.properties),...h()(e.properties)]);r.properties={};for(const s of o){const o=t.properties[s]||{},i=e.properties[s]||{};var a;if(o.readOnly&&!n.includeReadOnly||o.writeOnly&&!n.includeWriteOnly)r.required=d()(a=r.required||[]).call(a,(e=>e!==s));else r.properties[s]=y(i,o,n)}}return(0,g.isJSONSchema)(t.items)&&(0,g.isJSONSchema)(e.items)&&(r.items=y(e.items,t.items,n)),(0,g.isJSONSchema)(t.contains)&&(0,g.isJSONSchema)(e.contains)&&(r.contains=y(e.contains,t.contains,n)),(0,g.isJSONSchema)(t.contentSchema)&&(0,g.isJSONSchema)(e.contentSchema)&&(r.contentSchema=y(e.contentSchema,t.contentSchema,n)),r},v=y},23084:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{isBooleanJSONSchema:()=>s,isJSONSchema:()=>a,isJSONSchemaObject:()=>i});var r=n(68630),o=n.n(r);const s=e=>\"boolean\"==typeof e,i=e=>o()(e),a=e=>s(e)||i(e)},35202:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{bytes:()=>a,integer:()=>h,number:()=>p,pick:()=>c,randexp:()=>l,string:()=>u});var r=n(92282),o=n.n(r),s=n(14419),i=n.n(s);const a=e=>o()(e),l=e=>{try{return new(i())(e).gen()}catch{return\"string\"}},c=e=>e.at(0),u=()=>\"string\",p=()=>0,h=()=>0},96276:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{foldType:()=>_,getType:()=>O,inferType:()=>j});var r=n(58309),o=n.n(r),s=n(91086),i=n.n(s),a=n(58118),l=n.n(a),c=n(19030),u=n.n(c),p=n(28222),h=n.n(p),f=n(97606),d=n.n(f),m=n(14418),g=n.n(m),y=n(84539),v=n(23084),b=n(35202),w=n(13783);const E={array:[\"items\",\"prefixItems\",\"contains\",\"maxContains\",\"minContains\",\"maxItems\",\"minItems\",\"uniqueItems\",\"unevaluatedItems\"],object:[\"properties\",\"additionalProperties\",\"patternProperties\",\"propertyNames\",\"minProperties\",\"maxProperties\",\"required\",\"dependentSchemas\",\"dependentRequired\",\"unevaluatedProperties\"],string:[\"pattern\",\"format\",\"minLength\",\"maxLength\",\"contentEncoding\",\"contentMediaType\",\"contentSchema\"],integer:[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\",\"multipleOf\"]};E.number=E.integer;const x=\"string\",S=e=>void 0===e?null:null===e?\"null\":o()(e)?\"array\":i()(e)?\"integer\":typeof e,_=e=>{if(o()(e)&&e.length>=1){if(l()(e).call(e,\"array\"))return\"array\";if(l()(e).call(e,\"object\"))return\"object\";{const t=(0,b.pick)(e);if(l()(y.ALL_TYPES).call(y.ALL_TYPES,t))return t}}return l()(y.ALL_TYPES).call(y.ALL_TYPES,e)?e:null},j=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new(u());if(!(0,v.isJSONSchemaObject)(e))return x;if(t.has(e))return x;t.add(e);let{type:n,const:r}=e;if(n=_(n),\"string\"!=typeof n){const t=h()(E);e:for(let r=0;r<t.length;r+=1){const o=t[r],s=E[o];for(let t=0;t<s.length;t+=1){const r=s[t];if(Object.hasOwn(e,r)){n=o;break e}}}}if(\"string\"!=typeof n&&void 0!==r){const e=S(r);n=\"string\"==typeof e?e:n}if(\"string\"!=typeof n){const r=n=>{if(o()(e[n])){var r;const o=d()(r=e[n]).call(r,(e=>j(e,t)));return _(o)}return null},i=r(\"allOf\"),a=r(\"anyOf\"),l=r(\"oneOf\"),c=e.not?j(e.not,t):null;var s;if(i||a||l||c)n=_(g()(s=[i,a,l,c]).call(s,Boolean))}if(\"string\"!=typeof n&&(0,w.hasExample)(e)){const t=(0,w.extractExample)(e),r=S(t);n=\"string\"==typeof r?r:n}return t.delete(e),n||x},O=e=>j(e)},99346:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{fromJSONBooleanSchema:()=>o,typeCast:()=>s});var r=n(23084);const o=e=>!1===e?{not:{}}:{},s=e=>(0,r.isBooleanJSONSchema)(e)?o(e):(0,r.isJSONSchemaObject)(e)?e:{}},41433:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"ascii\")},58509:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"utf8\")},5709:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"hex\")},54180:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>{const t=r.from(e).toString(\"utf8\"),n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";let o=0,s=\"\",i=0,a=0;for(let e=0;e<t.length;e++)for(i=i<<8|t.charCodeAt(e),a+=8;a>=5;)s+=n.charAt(i>>>a-5&31),a-=5;a>0&&(s+=n.charAt(i<<5-a&31),o=(8-8*t.length%5)%5);for(let e=0;e<o;e++)s+=\"=\";return s}},91967:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"base64\")},44366:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(48764).Buffer;const o=e=>r.from(e).toString(\"binary\")},65037:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(24278),o=n.n(r);const s=e=>{let t=\"\";for(let s=0;s<e.length;s++){const i=e.charCodeAt(s);if(61===i)t+=\"=3D\";else if(i>=33&&i<=60||i>=62&&i<=126||9===i||32===i)t+=e.charAt(s);else if(13===i||10===i)t+=\"\\r\\n\";else if(i>126){const r=unescape(encodeURIComponent(e.charAt(s)));for(let e=0;e<r.length;e++){var n;t+=\"=\"+o()(n=\"0\"+r.charCodeAt(e).toString(16)).call(n,-2).toUpperCase()}}else{var r;t+=\"=\"+o()(r=\"0\"+i.toString(16)).call(r,-2).toUpperCase()}}return t}},74045:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>(new Date).toISOString()},81456:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>(new Date).toISOString().substring(0,10)},560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>.1},64299:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"P3D\"},3981:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"user@example.com\"},51890:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>.1},69375:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"example.com\"},94518:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"실례@example.com\"},70273:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"실례.com\"},57864:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>2**30>>>0},21726:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>2**53-1},28793:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"198.51.100.42\"},98269:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\"},45693:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"path/실례.html\"},13080:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"https://실례.com/\"},37856:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"/a/b/c\"},2672:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(57740),o=n.n(r),s=n(35202);const i={\"application/json\":()=>'{\"key\":\"value\"}',\"application/ld+json\":()=>'{\"name\": \"John Doe\"}',\"application/x-httpd-php\":()=>\"<?php echo '<p>Hello World!</p>'; ?>\",\"application/rtf\":()=>o()`{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1`,\"application/x-sh\":()=>'echo \"Hello World!\"',\"application/xhtml+xml\":()=>\"<p>content</p>\",\"application/*\":()=>(0,s.bytes)(25).toString(\"binary\")}},54342:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(35202);const o={\"audio/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},46724:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(35202);const o={\"image/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},65378:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r={\"text/plain\":()=>\"string\",\"text/css\":()=>\".selector { border: 1px solid red }\",\"text/csv\":()=>\"value1,value2,value3\",\"text/html\":()=>\"<p>content</p>\",\"text/calendar\":()=>\"BEGIN:VCALENDAR\",\"text/javascript\":()=>\"console.dir('Hello world!');\",\"text/xml\":()=>'<person age=\"30\">John Doe</person>',\"text/*\":()=>\"string\"}},92974:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(35202);const o={\"video/*\":()=>(0,r.bytes)(25).toString(\"binary\")}},93393:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"********\"},4335:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"^[a-z]+$\"},80375:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"1/0\"},65243:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>(new Date).toISOString().substring(11)},94692:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"path/index.html\"},83829:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"https://example.com/dictionary/{term:1}/{term}\"},52978:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"https://example.com/\"},38859:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\"},78591:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>r.createXMLExample,encoderAPI:()=>o.default,formatAPI:()=>s.default,mediaTypeAPI:()=>i.default,memoizedCreateXMLExample:()=>r.memoizedCreateXMLExample,memoizedSampleFromSchema:()=>r.memoizedSampleFromSchema,sampleFromSchema:()=>r.sampleFromSchema,sampleFromSchemaGeneric:()=>r.sampleFromSchemaGeneric});var r=n(94277),o=n(9507),s=n(22906),i=n(90537)},94277:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>M,memoizedCreateXMLExample:()=>L,memoizedSampleFromSchema:()=>B,sampleFromSchema:()=>D,sampleFromSchemaGeneric:()=>R});var r=n(58309),o=n.n(r),s=n(91086),i=n.n(s),a=n(86),l=n.n(a),c=n(51679),u=n.n(c),p=n(58118),h=n.n(p),f=n(39022),d=n.n(f),m=n(97606),g=n.n(m),y=n(35627),v=n.n(y),b=n(53479),w=n.n(b),E=n(41609),x=n.n(E),S=n(68630),_=n.n(S),j=n(90242),O=n(60314),k=n(63273),A=n(96276),C=n(99346),P=n(13783),N=n(35202),I=n(37078),T=n(23084);const R=function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];\"function\"==typeof(null===(t=e)||void 0===t?void 0:t.toJS)&&(e=e.toJS()),e=(0,C.typeCast)(e);let a=void 0!==r||(0,P.hasExample)(e);const c=!a&&o()(e.oneOf)&&e.oneOf.length>0,p=!a&&o()(e.anyOf)&&e.anyOf.length>0;if(!a&&(c||p)){const t=(0,C.typeCast)(c?(0,N.pick)(e.oneOf):(0,N.pick)(e.anyOf));!(e=(0,I.default)(e,t,n)).xml&&t.xml&&(e.xml=t.xml),(0,P.hasExample)(e)&&(0,P.hasExample)(t)&&(a=!0)}const f={};let{xml:m,properties:y,additionalProperties:v,items:b,contains:w}=e||{},E=(0,A.getType)(e),{includeReadOnly:S,includeWriteOnly:O}=n;m=m||{};let M,{name:D,prefix:F,namespace:L}=m,B={};if(Object.hasOwn(e,\"type\")||(e.type=E),s&&(D=D||\"notagname\",M=(F?`${F}:`:\"\")+D,L)){f[F?`xmlns:${F}`:\"xmlns\"]=L}s&&(B[M]=[]);const $=(0,j.mz)(y);let q,U=0;const z=()=>i()(e.maxProperties)&&e.maxProperties>0&&U>=e.maxProperties,V=t=>!(i()(e.maxProperties)&&e.maxProperties>0)||!z()&&(!(t=>{var n;return!o()(e.required)||0===e.required.length||!h()(n=e.required).call(n,t)})(t)||e.maxProperties-U-(()=>{if(!o()(e.required)||0===e.required.length)return 0;let t=0;var n,r;return s?l()(n=e.required).call(n,(e=>t+=void 0===B[e]?0:1)):l()(r=e.required).call(r,(e=>{var n;t+=void 0===(null===(n=B[M])||void 0===n?void 0:u()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(q=s?function(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&$[t]){if($[t].xml=$[t].xml||{},$[t].xml.attribute){const e=o()($[t].enum)?(0,N.pick)($[t].enum):void 0;if((0,P.hasExample)($[t]))f[$[t].xml.name||t]=(0,P.extractExample)($[t]);else if(void 0!==e)f[$[t].xml.name||t]=e;else{const e=(0,C.typeCast)($[t]),n=(0,A.getType)(e),r=$[t].xml.name||t;f[r]=k.default[n](e)}return}$[t].xml.name=$[t].xml.name||t}else $[t]||!1===v||($[t]={xml:{name:t}});let i=R($[t],n,r,s);var a;V(t)&&(U++,o()(i)?B[M]=d()(a=B[M]).call(a,i):B[M].push(i))}:(t,r)=>{var o;if(V(t)){if(_()(null===(o=e.discriminator)||void 0===o?void 0:o.mapping)&&e.discriminator.propertyName===t&&\"string\"==typeof e.$$ref){for(const n in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[n])){B[t]=n;break}}else B[t]=R($[t],n,r,s);U++}},a){let t;if(t=void 0!==r?r:(0,P.extractExample)(e),!s){if(\"number\"==typeof t&&\"string\"===E)return`${t}`;if(\"string\"!=typeof t||\"string\"===E)return t;try{return JSON.parse(t)}catch{return t}}if(\"array\"===E){if(!o()(t)){if(\"string\"==typeof t)return t;t=[t]}let r=[];return(0,T.isJSONSchemaObject)(b)&&(b.xml=b.xml||m||{},b.xml.name=b.xml.name||m.name,r=g()(t).call(t,(e=>R(b,n,e,s)))),(0,T.isJSONSchemaObject)(w)&&(w.xml=w.xml||m||{},w.xml.name=w.xml.name||m.name,r=[R(w,n,void 0,s),...r]),r=k.default.array(e,{sample:r}),m.wrapped?(B[M]=r,x()(f)||B[M].push({_attr:f})):B=r,B}if(\"object\"===E){if(\"string\"==typeof t)return t;for(const e in t){var W,J,K,H;Object.hasOwn(t,e)&&(null!==(W=$[e])&&void 0!==W&&W.readOnly&&!S||null!==(J=$[e])&&void 0!==J&&J.writeOnly&&!O||(null!==(K=$[e])&&void 0!==K&&null!==(H=K.xml)&&void 0!==H&&H.attribute?f[$[e].xml.name||e]=t[e]:q(e,t[e])))}return x()(f)||B[M].push({_attr:f}),B}return B[M]=x()(f)?t:[{_attr:f},t],B}if(\"array\"===E){let t=[];var G,Z;if((0,T.isJSONSchemaObject)(w))if(s&&(w.xml=w.xml||e.xml||{},w.xml.name=w.xml.name||m.name),o()(w.anyOf))t.push(...g()(G=w.anyOf).call(G,(e=>R((0,I.default)(e,w,n),n,void 0,s))));else if(o()(w.oneOf)){var Y;t.push(...g()(Y=w.oneOf).call(Y,(e=>R((0,I.default)(e,w,n),n,void 0,s))))}else{if(!(!s||s&&m.wrapped))return R(w,n,void 0,s);t.push(R(w,n,void 0,s))}if((0,T.isJSONSchemaObject)(b))if(s&&(b.xml=b.xml||e.xml||{},b.xml.name=b.xml.name||m.name),o()(b.anyOf))t.push(...g()(Z=b.anyOf).call(Z,(e=>R((0,I.default)(e,b,n),n,void 0,s))));else if(o()(b.oneOf)){var X;t.push(...g()(X=b.oneOf).call(X,(e=>R((0,I.default)(e,b,n),n,void 0,s))))}else{if(!(!s||s&&m.wrapped))return R(b,n,void 0,s);t.push(R(b,n,void 0,s))}return t=k.default.array(e,{sample:t}),s&&m.wrapped?(B[M]=t,x()(f)||B[M].push({_attr:f}),B):t}if(\"object\"===E){for(let e in $){var Q,ee,te;Object.hasOwn($,e)&&(null!==(Q=$[e])&&void 0!==Q&&Q.deprecated||null!==(ee=$[e])&&void 0!==ee&&ee.readOnly&&!S||null!==(te=$[e])&&void 0!==te&&te.writeOnly&&!O||q(e))}if(s&&f&&B[M].push({_attr:f}),z())return B;if((0,T.isBooleanJSONSchema)(v))s?B[M].push({additionalProp:\"Anything can be here\"}):B.additionalProp1={},U++;else if((0,T.isJSONSchemaObject)(v)){var ne,re;const t=v,r=R(t,n,void 0,s);if(s&&\"string\"==typeof(null==t||null===(ne=t.xml)||void 0===ne?void 0:ne.name)&&\"notagname\"!==(null==t||null===(re=t.xml)||void 0===re?void 0:re.name))B[M].push(r);else{const t=i()(e.minProperties)&&e.minProperties>0&&U<e.minProperties?e.minProperties-U:3;for(let e=1;e<=t;e++){if(z())return B;if(s){const t={};t[\"additionalProp\"+e]=r.notagname,B[M].push(t)}else B[\"additionalProp\"+e]=r;U++}}}return B}let oe;if(void 0!==e.const)oe=e.const;else if(e&&o()(e.enum))oe=(0,N.pick)((0,j.AF)(e.enum));else{const t=(0,T.isJSONSchemaObject)(e.contentSchema)?R(e.contentSchema,n,void 0,s):void 0;oe=k.default[E](e,{sample:t})}return s?(B[M]=x()(f)?oe:[{_attr:f},oe],B):oe},M=(e,t,n)=>{const r=R(e,t,n,!0);if(r)return\"string\"==typeof r?r:w()(r,{declaration:!0,indent:\"\\t\"})},D=(e,t,n)=>R(e,t,n,!1),F=(e,t,n)=>[e,v()(t),v()(n)],L=(0,O.Z)(M,F),B=(0,O.Z)(D,F)},83982:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{applyArrayConstraints:()=>p,default:()=>h});var r=n(91086),o=n.n(r),s=n(24278),i=n.n(s),a=n(25110),l=n.n(a),c=n(82737),u=n.n(c);const p=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:n,maxItems:r,uniqueItems:s}=t,{contains:a,minContains:c,maxContains:p}=t;let h=[...e];if(null!=a&&\"object\"==typeof a){if(o()(c)&&c>1){const e=h.at(0);for(let t=1;t<c;t+=1)h.unshift(e)}o()(p)}if(o()(r)&&r>0&&(h=i()(e).call(e,0,r)),o()(n)&&n>0)for(let e=0;h.length<n;e+=1)h.push(h[e%h.length]);return!0===s&&(h=l()(new(u())(h))),h},h=(e,t)=>{let{sample:n}=t;return p(n,e)}},34108:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=e=>\"boolean\"!=typeof e.default||e.default},63273:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(83982),o=n(46852),s=n(74522),i=n(83455),a=n(58864),l=n(34108),c=n(90853);const u={array:r.default,object:o.default,string:s.default,number:i.default,integer:a.default,boolean:l.default,null:c.default},p=new Proxy(u,{get:(e,t)=>\"string\"==typeof t&&Object.hasOwn(e,t)?e[t]:()=>`Unknown Type: ${t}`})},58864:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(35202),o=n(22906),s=n(57864),i=n(21726);const a=e=>{const{format:t}=e;return\"string\"==typeof t?(e=>{const{format:t}=e,n=(0,o.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"int32\":return(0,s.default)();case\"int64\":return(0,i.default)()}return(0,r.integer)()})(e):(0,r.integer)()}},90853:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>null},83455:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(91086),o=n.n(r),s=n(44081),i=n.n(s),a=n(35202),l=n(22906),c=n(51890),u=n(560);const p=e=>{const{format:t}=e;let n;return n=\"string\"==typeof t?(e=>{const{format:t}=e,n=(0,l.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"float\":return(0,c.default)();case\"double\":return(0,u.default)()}return(0,a.number)()})(e):(0,a.number)(),function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:n,maximum:r,exclusiveMinimum:s,exclusiveMaximum:a}=t,{multipleOf:l}=t,c=o()(e)?1:i();let u=\"number\"==typeof n?n:null,p=\"number\"==typeof r?r:null,h=e;if(\"number\"==typeof s&&(u=null!==u?Math.max(u,s+c):s+c),\"number\"==typeof a&&(p=null!==p?Math.min(p,a-c):a-c),h=u>p&&e||u||p||h,\"number\"==typeof l&&l>0){const e=h%l;h=0===e?h:h+l-e}return h}(n,e)}},46852:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=()=>{throw new Error(\"Not implemented\")}},74522:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>L});var r=n(91086),o=n.n(r),s=n(24278),i=n.n(s),a=n(58309),l=n.n(a),c=n(35627),u=n.n(c),p=n(6557),h=n.n(p),f=n(35202),d=n(23084),m=n(3981),g=n(94518),y=n(69375),v=n(70273),b=n(28793),w=n(98269),E=n(52978),x=n(94692),S=n(13080),_=n(45693),j=n(38859),O=n(83829),k=n(37856),A=n(80375),C=n(74045),P=n(81456),N=n(65243),I=n(64299),T=n(93393),R=n(4335),M=n(22906),D=n(9507),F=n(90537);const L=function(e){let{sample:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:n,contentMediaType:r,contentSchema:s}=e,{pattern:a,format:c}=e,p=(0,D.default)(n)||h();let L;if(\"string\"==typeof a)L=(0,f.randexp)(a);else if(\"string\"==typeof c)L=(e=>{const{format:t}=e,n=(0,M.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"email\":return(0,m.default)();case\"idn-email\":return(0,g.default)();case\"hostname\":return(0,y.default)();case\"idn-hostname\":return(0,v.default)();case\"ipv4\":return(0,b.default)();case\"ipv6\":return(0,w.default)();case\"uri\":return(0,E.default)();case\"uri-reference\":return(0,x.default)();case\"iri\":return(0,S.default)();case\"iri-reference\":return(0,_.default)();case\"uuid\":return(0,j.default)();case\"uri-template\":return(0,O.default)();case\"json-pointer\":return(0,k.default)();case\"relative-json-pointer\":return(0,A.default)();case\"date-time\":return(0,C.default)();case\"date\":return(0,P.default)();case\"time\":return(0,N.default)();case\"duration\":return(0,I.default)();case\"password\":return(0,T.default)();case\"regex\":return(0,R.default)()}return(0,f.string)()})(e);else if((0,d.isJSONSchema)(s)&&\"string\"==typeof r&&void 0!==t)L=l()(t)||\"object\"==typeof t?u()(t):String(t);else if(\"string\"==typeof r){const t=(0,F.default)(r);\"function\"==typeof t&&(L=t(e))}else L=(0,f.string)();return p(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:n,minLength:r}=t;let s=e;if(o()(n)&&n>0&&(s=i()(s).call(s,0,n)),o()(r)&&r>0){let e=0;for(;s.length<r;)s+=s[e++%s.length]}return s}(L,e))}},25474:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{SHOW:()=>a,UPDATE_FILTER:()=>s,UPDATE_LAYOUT:()=>o,UPDATE_MODE:()=>i,changeMode:()=>p,show:()=>u,updateFilter:()=>c,updateLayout:()=>l});var r=n(90242);const o=\"layout_update_layout\",s=\"layout_update_filter\",i=\"layout_update_mode\",a=\"layout_show\";function l(e){return{type:o,payload:e}}function c(e){return{type:s,payload:e}}function u(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,r.AF)(e),{type:a,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return e=(0,r.AF)(e),{type:i,payload:{thing:e,mode:t}}}},26821:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(5672),o=n(25474),s=n(4400),i=n(28989);function a(){return{statePlugins:{layout:{reducers:r.default,actions:o,selectors:s},spec:{wrapSelectors:i}}}}},5672:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(39022),o=n.n(r),s=n(43393),i=n(25474);const a={[i.UPDATE_LAYOUT]:(e,t)=>e.set(\"layout\",t.payload),[i.UPDATE_FILTER]:(e,t)=>e.set(\"filter\",t.payload),[i.SHOW]:(e,t)=>{const n=t.payload.shown,r=(0,s.fromJS)(t.payload.thing);return e.update(\"shown\",(0,s.fromJS)({}),(e=>e.set(r,n)))},[i.UPDATE_MODE]:(e,t)=>{var n;let r=t.payload.thing,s=t.payload.mode;return e.setIn(o()(n=[\"modes\"]).call(n,r),(s||\"\")+\"\")}}},4400:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{current:()=>i,currentFilter:()=>a,isShown:()=>l,showSummary:()=>u,whatMode:()=>c});var r=n(20573),o=n(90242),s=n(43393);const i=e=>e.get(\"layout\"),a=e=>e.get(\"filter\"),l=(e,t,n)=>(t=(0,o.AF)(t),e.get(\"shown\",(0,s.fromJS)({})).get((0,s.fromJS)(t),n)),c=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\";return t=(0,o.AF)(t),e.getIn([\"modes\",...t],n)},u=(0,r.P1)((e=>e),(e=>!l(e,\"editor\")))},28989:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{taggedOperations:()=>s});var r=n(24278),o=n.n(r);const s=(e,t)=>function(n){for(var r=arguments.length,s=new Array(r>1?r-1:0),i=1;i<r;i++)s[i-1]=arguments[i];let a=e(n,...s);const{fn:l,layoutSelectors:c,getConfigs:u}=t.getSystem(),p=u(),{maxDisplayedTags:h}=p;let f=c.currentFilter();return f&&!0!==f&&\"true\"!==f&&\"false\"!==f&&(a=l.opsFilter(a,f)),h&&!isNaN(h)&&h>=0&&(a=o()(a).call(a,0,h)),a}},9150:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(11189),o=n.n(r);function s(e){let{configs:t}=e;const n={debug:0,info:1,log:2,warn:3,error:4},r=e=>n[e]||-1;let{logLevel:s}=t,i=r(s);function a(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o<t;o++)n[o-1]=arguments[o];r(e)>=i&&console[e](...n)}return a.warn=o()(a).call(a,null,\"warn\"),a.error=o()(a).call(a,null,\"error\"),a.info=o()(a).call(a,null,\"info\"),a.debug=o()(a).call(a,null,\"debug\"),{rootInjects:{log:a}}}},67002:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>h,CLEAR_REQUEST_BODY_VALUE:()=>f,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>a,UPDATE_REQUEST_BODY_INCLUSION:()=>i,UPDATE_REQUEST_BODY_VALUE:()=>o,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>s,UPDATE_REQUEST_CONTENT_TYPE:()=>l,UPDATE_RESPONSE_CONTENT_TYPE:()=>c,UPDATE_SELECTED_SERVER:()=>r,UPDATE_SERVER_VARIABLE_VALUE:()=>u,clearRequestBodyValidateError:()=>S,clearRequestBodyValue:()=>j,initRequestBodyValidateError:()=>_,setActiveExamplesMember:()=>v,setRequestBodyInclusion:()=>y,setRequestBodyValidateError:()=>x,setRequestBodyValue:()=>m,setRequestContentType:()=>b,setResponseContentType:()=>w,setRetainRequestBodyValueFlag:()=>g,setSelectedServer:()=>d,setServerVariableValue:()=>E});const r=\"oas3_set_servers\",o=\"oas3_set_request_body_value\",s=\"oas3_set_request_body_retain_flag\",i=\"oas3_set_request_body_inclusion\",a=\"oas3_set_active_examples_member\",l=\"oas3_set_request_content_type\",c=\"oas3_set_response_content_type\",u=\"oas3_set_server_variable_value\",p=\"oas3_set_request_body_validate_error\",h=\"oas3_clear_request_body_validate_error\",f=\"oas3_clear_request_body_value\";function d(e,t){return{type:r,payload:{selectedServerUrl:e,namespace:t}}}function m(e){let{value:t,pathMethod:n}=e;return{type:o,payload:{value:t,pathMethod:n}}}const g=e=>{let{value:t,pathMethod:n}=e;return{type:s,payload:{value:t,pathMethod:n}}};function y(e){let{value:t,pathMethod:n,name:r}=e;return{type:i,payload:{value:t,pathMethod:n,name:r}}}function v(e){let{name:t,pathMethod:n,contextType:r,contextName:o}=e;return{type:a,payload:{name:t,pathMethod:n,contextType:r,contextName:o}}}function b(e){let{value:t,pathMethod:n}=e;return{type:l,payload:{value:t,pathMethod:n}}}function w(e){let{value:t,path:n,method:r}=e;return{type:c,payload:{value:t,path:n,method:r}}}function E(e){let{server:t,namespace:n,key:r,val:o}=e;return{type:u,payload:{server:t,namespace:n,key:r,val:o}}}const x=e=>{let{path:t,method:n,validationErrors:r}=e;return{type:p,payload:{path:t,method:n,validationErrors:r}}},S=e=>{let{path:t,method:n}=e;return{type:h,payload:{path:t,method:n}}},_=e=>{let{pathMethod:t}=e;return{type:h,payload:{path:t[0],method:t[1]}}},j=e=>{let{pathMethod:t}=e;return{type:f,payload:{pathMethod:t}}}},73723:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{definitionsToAuthorize:()=>p});var r=n(86),o=n.n(r),s=n(14418),i=n.n(s),a=n(24282),l=n.n(a),c=n(20573),u=n(43393);const p=(h=(0,c.P1)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var n;let r=(0,u.List)();return t?(o()(n=t.entrySeq()).call(n,(e=>{let[t,n]=e;const s=n.get(\"type\");var a;if(\"oauth2\"===s&&o()(a=n.get(\"flows\").entrySeq()).call(a,(e=>{let[o,s]=e,a=(0,u.fromJS)({flow:o,authorizationUrl:s.get(\"authorizationUrl\"),tokenUrl:s.get(\"tokenUrl\"),scopes:s.get(\"scopes\"),type:n.get(\"type\"),description:n.get(\"description\")});r=r.push(new u.Map({[t]:i()(a).call(a,(e=>void 0!==e))}))})),\"http\"!==s&&\"apiKey\"!==s||(r=r.push(new u.Map({[t]:n}))),\"openIdConnect\"===s&&n.get(\"openIdConnectData\")){let e=n.get(\"openIdConnectData\"),s=e.get(\"grant_types_supported\")||[\"authorization_code\",\"implicit\"];o()(s).call(s,(o=>{var s;let a=e.get(\"scopes_supported\")&&l()(s=e.get(\"scopes_supported\")).call(s,((e,t)=>e.set(t,\"\")),new u.Map),c=(0,u.fromJS)({flow:o,authorizationUrl:e.get(\"authorization_endpoint\"),tokenUrl:e.get(\"token_endpoint\"),scopes:a,type:\"oauth2\",openIdConnectUrl:n.get(\"openIdConnectUrl\")});r=r.push(new u.Map({[t]:i()(c).call(c,(e=>void 0!==e))}))}))}})),r):r})),(e,t)=>function(){for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];if(t.getSystem().specSelectors.isOAS3()){let e=t.getState().getIn([\"spec\",\"resolvedSubtrees\",\"components\",\"securitySchemes\"]);return h(t,e,...r)}return e(...r)});var h},33427:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294);n(23930);const l=e=>{let{callbacks:t,specPath:n,specSelectors:r,getComponent:s}=e;const l=r.callbacksOperations({callbacks:t,specPath:n}),c=o()(l),u=s(\"OperationContainer\",!0);return 0===c.length?a.createElement(\"span\",null,\"No callbacks\"):a.createElement(\"div\",null,i()(c).call(c,(e=>{var t;return a.createElement(\"div\",{key:`${e}`},a.createElement(\"h2\",null,e),i()(t=l[e]).call(t,(t=>a.createElement(u,{key:`${e}-${t.path}-${t.method}`,op:t.operation,tag:\"callbacks\",method:t.method,path:t.path,specPath:t.specPath,allowTryItOut:!1}))))})))}},86775:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(61125),o=n.n(r),s=n(76986),i=n.n(s),a=n(14418),l=n.n(a),c=n(97606),u=n.n(c),p=n(67294);class h extends p.Component{constructor(e,t){super(e,t),o()(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:n,name:r}=e.target,o=i()({},this.state.value);r?o[r]=n:o=n,this.setState({value:o},(()=>t(this.state)))}));let{name:n,schema:r}=this.props,s=this.getValue();this.state={name:n,schema:r,value:s}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e;let{schema:t,getComponent:n,errSelectors:r,name:o}=this.props;const s=n(\"Input\"),i=n(\"Row\"),a=n(\"Col\"),c=n(\"authError\"),h=n(\"Markdown\",!0),f=n(\"JumpToPath\",!0),d=(t.get(\"scheme\")||\"\").toLowerCase();let m=this.getValue(),g=l()(e=r.allErrors()).call(e,(e=>e.get(\"authId\")===o));if(\"basic\"===d){var y;let e=m?m.get(\"username\"):null;return p.createElement(\"div\",null,p.createElement(\"h4\",null,p.createElement(\"code\",null,o||t.get(\"name\")),\"  (http, Basic)\",p.createElement(f,{path:[\"securityDefinitions\",o]})),e&&p.createElement(\"h6\",null,\"Authorized\"),p.createElement(i,null,p.createElement(h,{source:t.get(\"description\")})),p.createElement(i,null,p.createElement(\"label\",null,\"Username:\"),e?p.createElement(\"code\",null,\" \",e,\" \"):p.createElement(a,null,p.createElement(s,{type:\"text\",required:\"required\",name:\"username\",\"aria-label\":\"auth-basic-username\",onChange:this.onChange,autoFocus:!0}))),p.createElement(i,null,p.createElement(\"label\",null,\"Password:\"),e?p.createElement(\"code\",null,\" ****** \"):p.createElement(a,null,p.createElement(s,{autoComplete:\"new-password\",name:\"password\",type:\"password\",\"aria-label\":\"auth-basic-password\",onChange:this.onChange}))),u()(y=g.valueSeq()).call(y,((e,t)=>p.createElement(c,{error:e,key:t}))))}var v;return\"bearer\"===d?p.createElement(\"div\",null,p.createElement(\"h4\",null,p.createElement(\"code\",null,o||t.get(\"name\")),\"  (http, Bearer)\",p.createElement(f,{path:[\"securityDefinitions\",o]})),m&&p.createElement(\"h6\",null,\"Authorized\"),p.createElement(i,null,p.createElement(h,{source:t.get(\"description\")})),p.createElement(i,null,p.createElement(\"label\",null,\"Value:\"),m?p.createElement(\"code\",null,\" ****** \"):p.createElement(a,null,p.createElement(s,{type:\"text\",\"aria-label\":\"auth-bearer-value\",onChange:this.onChange,autoFocus:!0}))),u()(v=g.valueSeq()).call(v,((e,t)=>p.createElement(c,{error:e,key:t})))):p.createElement(\"div\",null,p.createElement(\"em\",null,p.createElement(\"b\",null,o),\" HTTP authentication: unsupported scheme \",`'${d}'`))}}},76467:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(33427),o=n(42458),s=n(15757),i=n(56617),a=n(9928),l=n(45327),c=n(86775),u=n(96796);const p={Callbacks:r.default,HttpAuth:c.default,RequestBody:o.default,Servers:i.default,ServersContainer:a.default,RequestBodyEditor:l.default,OperationServers:u.default,operationLink:s.default}},15757:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(35627),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294);n(23930);class l extends a.Component{render(){const{link:e,name:t,getComponent:n}=this.props,r=n(\"Markdown\",!0);let s=e.get(\"operationId\")||e.get(\"operationRef\"),l=e.get(\"parameters\")&&e.get(\"parameters\").toJS(),c=e.get(\"description\");return a.createElement(\"div\",{className:\"operation-link\"},a.createElement(\"div\",{className:\"description\"},a.createElement(\"b\",null,a.createElement(\"code\",null,t)),c?a.createElement(r,{source:c}):null),a.createElement(\"pre\",null,\"Operation `\",s,\"`\",a.createElement(\"br\",null),a.createElement(\"br\",null),\"Parameters \",function(e,t){var n;if(\"string\"!=typeof t)return\"\";return i()(n=t.split(\"\\n\")).call(n,((t,n)=>n>0?Array(e+1).join(\" \")+t:t)).join(\"\\n\")}(0,o()(l,null,2))||\"{}\",a.createElement(\"br\",null)))}}const c=l},96796:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(61125),o=n.n(r),s=n(67294);n(23930);class i extends s.Component{constructor(){super(...arguments),o()(this,\"setSelectedServer\",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${n}`)})),o()(this,\"setServerVariableValue\",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${n}`})})),o()(this,\"getSelectedServer\",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),o()(this,\"getServerVariable\",((e,t)=>{const{path:n,method:r}=this.props;return this.props.getServerVariable({namespace:`${n}:${r}`,server:e},t)})),o()(this,\"getEffectiveServerValue\",(e=>{const{path:t,method:n}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${n}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:n}=this.props;if(!e&&!t)return null;const r=n(\"Servers\"),o=e||t,i=e?\"operation\":\"path\";return s.createElement(\"div\",{className:\"opblock-section operation-servers\"},s.createElement(\"div\",{className:\"opblock-section-header\"},s.createElement(\"div\",{className:\"tab-header\"},s.createElement(\"h4\",{className:\"opblock-title\"},\"Servers\"))),s.createElement(\"div\",{className:\"opblock-description-wrapper\"},s.createElement(\"h4\",{className:\"message\"},\"These \",i,\"-level options override the global server options.\"),s.createElement(r,{servers:o,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},45327:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(61125),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(90242);const c=Function.prototype;class u extends s.PureComponent{constructor(e,t){super(e,t),o()(this,\"applyDefaultValue\",(e=>{const{onChange:t,defaultValue:n}=e||this.props;return this.setState({value:n}),t(n)})),o()(this,\"onChange\",(e=>{this.props.onChange((0,l.Pz)(e))})),o()(this,\"onDomChange\",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,l.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,l.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:n}=this.state,r=t.size>0;const o=e(\"TextArea\");return s.createElement(\"div\",{className:\"body-param\"},s.createElement(o,{className:a()(\"body-param__text\",{invalid:r}),title:t.size?t.join(\", \"):\"\",value:n,onChange:this.onDomChange}))}}o()(u,\"defaultProps\",{onChange:c,userHasEditedBody:!1})},42458:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>g,getDefaultRequestBodyValue:()=>m});var r=n(97606),o=n.n(r),s=n(11882),i=n.n(s),a=n(58118),l=n.n(a),c=n(58309),u=n.n(c),p=n(67294),h=(n(23930),n(43393)),f=n(90242),d=n(2518);const m=(e,t,n,r)=>{const o=e.getIn([\"content\",t]),s=o.get(\"schema\").toJS(),i=void 0!==o.get(\"examples\"),a=o.get(\"example\"),l=i?o.getIn([\"examples\",n,\"value\"]):a,c=r.getSampleSchema(s,t,{includeWriteOnly:!0},l);return(0,f.Pz)(c)},g=e=>{let{userHasEditedBody:t,requestBody:n,requestBodyValue:r,requestBodyInclusionSetting:s,requestBodyErrors:a,getComponent:c,getConfigs:g,specSelectors:y,fn:v,contentType:b,isExecute:w,specPath:E,onChange:x,onChangeIncludeEmpty:S,activeExamplesKey:_,updateActiveExamplesKey:j,setRetainRequestBodyValueFlag:O}=e;const k=e=>{x(e.target.files[0])},A=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return\"no value\"===s.get(e,\"no value\")&&(t.shouldDispatchInit=!0),t},C=c(\"Markdown\",!0),P=c(\"modelExample\"),N=c(\"RequestBodyEditor\"),I=c(\"highlightCode\"),T=c(\"ExamplesSelectValueRetainer\"),R=c(\"Example\"),M=c(\"ParameterIncludeEmpty\"),{showCommonExtensions:D}=g(),F=n&&n.get(\"description\")||null,L=n&&n.get(\"content\")||new h.OrderedMap;b=b||L.keySeq().first()||\"\";const B=L.get(b,(0,h.OrderedMap)()),$=B.get(\"schema\",(0,h.OrderedMap)()),q=B.get(\"examples\",null),U=null==q?void 0:o()(q).call(q,((e,t)=>{var r;const o=null===(r=e)||void 0===r?void 0:r.get(\"value\",null);return o&&(e=e.set(\"value\",m(n,b,t,v),o)),e}));if(a=h.List.isList(a)?a:(0,h.List)(),!B.size)return null;const z=\"object\"===B.getIn([\"schema\",\"type\"]),V=\"binary\"===B.getIn([\"schema\",\"format\"]),W=\"base64\"===B.getIn([\"schema\",\"format\"]);if(\"application/octet-stream\"===b||0===i()(b).call(b,\"image/\")||0===i()(b).call(b,\"audio/\")||0===i()(b).call(b,\"video/\")||V||W){const e=c(\"Input\");return w?p.createElement(e,{type:\"file\",onChange:k}):p.createElement(\"i\",null,\"Example values are not available for \",p.createElement(\"code\",null,b),\" media types.\")}if(z&&(\"application/x-www-form-urlencoded\"===b||0===i()(b).call(b,\"multipart/\"))&&$.get(\"properties\",(0,h.OrderedMap)()).size>0){var J;const e=c(\"JsonSchemaForm\"),t=c(\"ParameterExt\"),n=$.get(\"properties\",(0,h.OrderedMap)());return r=h.Map.isMap(r)?r:(0,h.OrderedMap)(),p.createElement(\"div\",{className:\"table-container\"},F&&p.createElement(C,{source:F}),p.createElement(\"table\",null,p.createElement(\"tbody\",null,h.Map.isMap(n)&&o()(J=n.entrySeq()).call(J,(n=>{var i,d;let[m,g]=n;if(g.get(\"readOnly\"))return;let y=D?(0,f.po)(g):null;const b=l()(i=$.get(\"required\",(0,h.List)())).call(i,m),E=g.get(\"type\"),_=g.get(\"format\"),j=g.get(\"description\"),O=r.getIn([m,\"value\"]),k=r.getIn([m,\"errors\"])||a,P=s.get(m)||!1,N=g.has(\"default\")||g.has(\"example\")||g.hasIn([\"items\",\"example\"])||g.hasIn([\"items\",\"default\"]),I=g.has(\"enum\")&&(1===g.get(\"enum\").size||b),T=N||I;let R=\"\";\"array\"!==E||T||(R=[]),(\"object\"===E||T)&&(R=v.getSampleSchema(g,!1,{includeWriteOnly:!0})),\"string\"!=typeof R&&\"object\"===E&&(R=(0,f.Pz)(R)),\"string\"==typeof R&&\"array\"===E&&(R=JSON.parse(R));const F=\"string\"===E&&(\"binary\"===_||\"base64\"===_);return p.createElement(\"tr\",{key:m,className:\"parameters\",\"data-property-name\":m},p.createElement(\"td\",{className:\"parameters-col_name\"},p.createElement(\"div\",{className:b?\"parameter__name required\":\"parameter__name\"},m,b?p.createElement(\"span\",null,\" *\"):null),p.createElement(\"div\",{className:\"parameter__type\"},E,_&&p.createElement(\"span\",{className:\"prop-format\"},\"($\",_,\")\"),D&&y.size?o()(d=y.entrySeq()).call(d,(e=>{let[n,r]=e;return p.createElement(t,{key:`${n}-${r}`,xKey:n,xVal:r})})):null),p.createElement(\"div\",{className:\"parameter__deprecated\"},g.get(\"deprecated\")?\"deprecated\":null)),p.createElement(\"td\",{className:\"parameters-col_description\"},p.createElement(C,{source:j}),w?p.createElement(\"div\",null,p.createElement(e,{fn:v,dispatchInitialValue:!F,schema:g,description:m,getComponent:c,value:void 0===O?R:O,required:b,errors:k,onChange:e=>{x(e,[m])}}),b?null:p.createElement(M,{onChange:e=>S(m,e),isIncluded:P,isIncludedOptions:A(m),isDisabled:u()(O)?0!==O.length:!(0,f.O2)(O)})):null))})))))}const K=m(n,b,_,v);let H=null;return(0,d.O)(K)&&(H=\"json\"),p.createElement(\"div\",null,F&&p.createElement(C,{source:F}),U?p.createElement(T,{userHasEditedBody:t,examples:U,currentKey:_,currentUserInputValue:r,onSelect:e=>{j(e)},updateValue:x,defaultToFirstExample:!0,getComponent:c,setRetainRequestBodyValueFlag:O}):null,w?p.createElement(\"div\",null,p.createElement(N,{value:r,errors:a,defaultValue:K,onChange:x,getComponent:c})):p.createElement(P,{getComponent:c,getConfigs:g,specSelectors:y,expandDepth:1,isExecute:w,schema:B.get(\"schema\"),specPath:E.push(\"content\",b),example:p.createElement(I,{className:\"body-param__example\",getConfigs:g,language:H,value:(0,f.Pz)(r)||K}),includeWriteOnly:!0}),U?p.createElement(R,{example:U.get(_),getComponent:c,getConfigs:g}):null)}},9928:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);class o extends r.Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:n,getComponent:o}=this.props,s=e.servers(),i=o(\"Servers\");return s&&s.size?r.createElement(\"div\",null,r.createElement(\"span\",{className:\"servers-title\"},\"Servers\"),r.createElement(i,{servers:s,currentServer:t.selectedServer(),setSelectedServer:n.setSelectedServer,setServerVariableValue:n.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},56617:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(61125),o=n.n(r),s=n(51679),i=n.n(s),a=n(97606),l=n.n(a),c=n(67294),u=n(43393);n(23930);class p extends c.Component{constructor(){super(...arguments),o()(this,\"onServerChange\",(e=>{this.setServer(e.target.value)})),o()(this,\"onServerVariableValueChange\",(e=>{let{setServerVariableValue:t,currentServer:n}=this.props,r=e.target.getAttribute(\"data-variable\"),o=e.target.value;\"function\"==typeof t&&t({server:n,key:r,val:o})})),o()(this,\"setServer\",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:n}=this.props;n||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get(\"url\"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:n,getServerVariable:r}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var o;let s=i()(t).call(t,(t=>t.get(\"url\")===e.currentServer)),a=i()(o=this.props.servers).call(o,(e=>e.get(\"url\")===this.props.currentServer))||(0,u.OrderedMap)();if(!s)return this.setServer(t.first().get(\"url\"));let c=a.get(\"variables\")||(0,u.OrderedMap)(),p=(i()(c).call(c,(e=>e.get(\"default\")))||(0,u.OrderedMap)()).get(\"default\"),h=s.get(\"variables\")||(0,u.OrderedMap)(),f=(i()(h).call(h,(e=>e.get(\"default\")))||(0,u.OrderedMap)()).get(\"default\");l()(h).call(h,((t,o)=>{r(e.currentServer,o)&&p===f||n({server:e.currentServer,key:o,val:t.get(\"default\")||\"\"})}))}}render(){var e,t;let{servers:n,currentServer:r,getServerVariable:o,getEffectiveServerValue:s}=this.props,a=(i()(n).call(n,(e=>e.get(\"url\")===r))||(0,u.OrderedMap)()).get(\"variables\")||(0,u.OrderedMap)(),p=0!==a.size;return c.createElement(\"div\",{className:\"servers\"},c.createElement(\"label\",{htmlFor:\"servers\"},c.createElement(\"select\",{onChange:this.onServerChange,value:r},l()(e=n.valueSeq()).call(e,(e=>c.createElement(\"option\",{value:e.get(\"url\"),key:e.get(\"url\")},e.get(\"url\"),e.get(\"description\")&&` - ${e.get(\"description\")}`))).toArray())),p?c.createElement(\"div\",null,c.createElement(\"div\",{className:\"computed-url\"},\"Computed URL:\",c.createElement(\"code\",null,s(r))),c.createElement(\"h4\",null,\"Server variables\"),c.createElement(\"table\",null,c.createElement(\"tbody\",null,l()(t=a.entrySeq()).call(t,(e=>{var t;let[n,s]=e;return c.createElement(\"tr\",{key:n},c.createElement(\"td\",null,n),c.createElement(\"td\",null,s.get(\"enum\")?c.createElement(\"select\",{\"data-variable\":n,onChange:this.onServerVariableValueChange},l()(t=s.get(\"enum\")).call(t,(e=>c.createElement(\"option\",{selected:e===o(r,n),key:e,value:e},e)))):c.createElement(\"input\",{type:\"text\",value:o(r,n)||\"\",onChange:this.onServerVariableValueChange,\"data-variable\":n})))}))))):null)}}},7779:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{OAS30ComponentWrapFactory:()=>c,OAS3ComponentWrapFactory:()=>l,isOAS30:()=>i,isSwagger2:()=>a});var r=n(23101),o=n.n(r),s=n(67294);function i(e){const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.0\\.([0123])(?:-rc[012])?$/.test(t)}function a(e){const t=e.get(\"swagger\");return\"string\"==typeof t&&\"2.0\"===t}function l(e){return(t,n)=>r=>{var i;return\"function\"==typeof(null===(i=n.specSelectors)||void 0===i?void 0:i.isOAS3)?n.specSelectors.isOAS3()?s.createElement(e,o()({},r,n,{Ori:t})):s.createElement(t,r):(console.warn(\"OAS3 wrapper: couldn't get spec\"),null)}}function c(e){return(t,n)=>r=>{var i;return\"function\"==typeof(null===(i=n.specSelectors)||void 0===i?void 0:i.isOAS30)?n.specSelectors.isOAS30()?s.createElement(e,o()({},r,n,{Ori:t})):s.createElement(t,r):(console.warn(\"OAS30 wrapper: couldn't get spec\"),null)}}},97451:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(92044),o=n(73723),s=n(91741),i=n(76467),a=n(37761),l=n(67002),c=n(5065),u=n(62109);function p(){return{components:i.default,wrapComponents:a.default,statePlugins:{spec:{wrapSelectors:r,selectors:s},auth:{wrapSelectors:o},oas3:{actions:l,reducers:u.default,selectors:c}}}}},62109:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(8712),o=n.n(r),s=n(86),i=n.n(s),a=n(24282),l=n.n(a),c=n(43393),u=n(67002);const p={[u.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:n,namespace:r}}=t;const o=r?[r,\"selectedServer\"]:[\"selectedServer\"];return e.setIn(o,n)},[u.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[s,a]=r;if(!c.Map.isMap(n))return e.setIn([\"requestData\",s,a,\"bodyValue\"],n);let l,u=e.getIn([\"requestData\",s,a,\"bodyValue\"])||(0,c.Map)();c.Map.isMap(u)||(u=(0,c.Map)());const[...p]=o()(n).call(n);return i()(p).call(p,(e=>{let t=n.getIn([e]);u.has(e)&&c.Map.isMap(t)||(l=u.setIn([e,\"value\"],t))})),e.setIn([\"requestData\",s,a,\"bodyValue\"],l)},[u.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,s]=r;return e.setIn([\"requestData\",o,s,\"retainBodyValue\"],n)},[u.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:n,pathMethod:r,name:o}}=t,[s,i]=r;return e.setIn([\"requestData\",s,i,\"bodyInclusion\",o],n)},[u.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:n,pathMethod:r,contextType:o,contextName:s}}=t,[i,a]=r;return e.setIn([\"examples\",i,a,o,s,\"activeExample\"],n)},[u.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,pathMethod:r}}=t,[o,s]=r;return e.setIn([\"requestData\",o,s,\"requestContentType\"],n)},[u.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,path:r,method:o}}=t;return e.setIn([\"requestData\",r,o,\"responseContentType\"],n)},[u.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:n,namespace:r,key:o,val:s}}=t;const i=r?[r,\"serverVariableValues\",n,o]:[\"serverVariableValues\",n,o];return e.setIn(i,s)},[u.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r,validationErrors:o}}=t,s=[];if(s.push(\"Required field is not provided\"),o.missingBodyValue)return e.setIn([\"requestData\",n,r,\"errors\"],(0,c.fromJS)(s));if(o.missingRequiredKeys&&o.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=o;return e.updateIn([\"requestData\",n,r,\"bodyValue\"],(0,c.fromJS)({}),(e=>l()(t).call(t,((e,t)=>e.setIn([t,\"errors\"],(0,c.fromJS)(s))),e)))}return console.warn(\"unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR\"),e},[u.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:r}}=t;const s=e.getIn([\"requestData\",n,r,\"bodyValue\"]);if(!c.Map.isMap(s))return e.setIn([\"requestData\",n,r,\"errors\"],(0,c.fromJS)([]));const[...i]=o()(s).call(s);return i?e.updateIn([\"requestData\",n,r,\"bodyValue\"],(0,c.fromJS)({}),(e=>l()(i).call(i,((e,t)=>e.setIn([t,\"errors\"],(0,c.fromJS)([]))),e))):e},[u.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:n}}=t,[r,o]=n;const s=e.getIn([\"requestData\",r,o,\"bodyValue\"]);return s?c.Map.isMap(s)?e.setIn([\"requestData\",r,o,\"bodyValue\"],(0,c.Map)()):e.setIn([\"requestData\",r,o,\"bodyValue\"],\"\"):e}}},5065:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{activeExamplesMember:()=>S,hasUserEditedBody:()=>w,requestBodyErrors:()=>x,requestBodyInclusionSetting:()=>E,requestBodyValue:()=>y,requestContentType:()=>_,responseContentType:()=>j,selectDefaultRequestBodyValue:()=>b,selectedServer:()=>g,serverEffectiveValue:()=>A,serverVariableValue:()=>O,serverVariables:()=>k,shouldRetainRequestBodyValue:()=>v,validOperationMethods:()=>I,validateBeforeExecute:()=>C,validateShallowRequired:()=>N});var r=n(97606),o=n.n(r),s=n(86),i=n.n(s),a=n(28222),l=n.n(a),c=n(11882),u=n.n(c),p=n(43393),h=n(20573),f=n(42458),d=n(90242);const m=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{if(n.getSystem().specSelectors.isOAS3()){const o=e(t,...r);return\"function\"==typeof o?o(n):o}return null}};const g=m(((e,t)=>{const n=t?[t,\"selectedServer\"]:[\"selectedServer\"];return e.getIn(n)||\"\"})),y=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"bodyValue\"])||null)),v=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"retainBodyValue\"])||!1)),b=(e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o,fn:s}=e.getSystem();if(o.isOAS3()){const e=r.requestContentType(t,n);if(e)return(0,f.getDefaultRequestBodyValue)(o.specResolvedSubtree([\"paths\",t,n,\"requestBody\"]),e,r.activeExamplesMember(t,n,\"requestBody\",\"requestBody\"),s)}return null},w=m(((e,t,n)=>e=>{const{oas3Selectors:r,specSelectors:o,fn:s}=e;let i=!1;const a=r.requestContentType(t,n);let l=r.requestBodyValue(t,n);const c=o.specResolvedSubtree([\"paths\",t,n,\"requestBody\"]);if(!c)return!1;if(p.Map.isMap(l)&&(l=(0,d.Pz)(l.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get(\"value\")]:e)).toJS())),p.List.isList(l)&&(l=(0,d.Pz)(l)),a){const e=(0,f.getDefaultRequestBodyValue)(c,a,r.activeExamplesMember(t,n,\"requestBody\",\"requestBody\"),s);i=!!l&&l!==e}return i})),E=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"bodyInclusion\"])||(0,p.Map)())),x=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"errors\"])||null)),S=m(((e,t,n,r,o)=>e.getIn([\"examples\",t,n,r,o,\"activeExample\"])||null)),_=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"requestContentType\"])||null)),j=m(((e,t,n)=>e.getIn([\"requestData\",t,n,\"responseContentType\"])||null)),O=m(((e,t,n)=>{let r;if(\"string\"!=typeof t){const{server:e,namespace:o}=t;r=o?[o,\"serverVariableValues\",e,n]:[\"serverVariableValues\",e,n]}else{r=[\"serverVariableValues\",t,n]}return e.getIn(r)||null})),k=m(((e,t)=>{let n;if(\"string\"!=typeof t){const{server:e,namespace:r}=t;n=r?[r,\"serverVariableValues\",e]:[\"serverVariableValues\",e]}else{n=[\"serverVariableValues\",t]}return e.getIn(n)||(0,p.OrderedMap)()})),A=m(((e,t)=>{var n,r;if(\"string\"!=typeof t){const{server:o,namespace:s}=t;r=o,n=s?e.getIn([s,\"serverVariableValues\",r]):e.getIn([\"serverVariableValues\",r])}else r=t,n=e.getIn([\"serverVariableValues\",r]);n=n||(0,p.OrderedMap)();let s=r;return o()(n).call(n,((e,t)=>{s=s.replace(new RegExp(`{${t}}`,\"g\"),e)})),s})),C=(P=(e,t)=>((e,t)=>(t=t||[],!!e.getIn([\"requestData\",...t,\"bodyValue\"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return e=>{const n=e.getSystem().specSelectors.specJson();let r=[...t][1]||[];return!n.getIn([\"paths\",...r,\"requestBody\",\"required\"])||P(...t)}});var P;const N=(e,t)=>{var n;let{oas3RequiredRequestBodyContentType:r,oas3RequestContentType:o,oas3RequestBodyValue:s}=t,a=[];if(!p.Map.isMap(s))return a;let c=[];return i()(n=l()(r.requestContentType)).call(n,(e=>{if(e===o){let t=r.requestContentType[e];i()(t).call(t,(e=>{u()(c).call(c,e)<0&&c.push(e)}))}})),i()(c).call(c,(e=>{s.getIn([e,\"value\"])||a.push(e)})),a},I=(0,h.P1)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"]))},91741:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{callbacksOperations:()=>E,isOAS3:()=>v,isOAS30:()=>y,isSwagger2:()=>g,servers:()=>w});var r=n(97606),o=n.n(r),s=n(24282),i=n.n(s),a=n(14418),l=n.n(a),c=n(58118),u=n.n(c),p=n(39022),h=n.n(p),f=n(43393),d=n(7779);const m=(0,f.Map)(),g=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,d.isSwagger2)(t)},y=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,d.isOAS30)(t)},v=()=>e=>e.getSystem().specSelectors.isOAS30();function b(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{if(n.specSelectors.isOAS3()){const o=e(t,...r);return\"function\"==typeof o?o(n):o}return null}}}const w=b((()=>e=>e.specSelectors.specJson().get(\"servers\",m))),E=b(((e,t)=>{let{callbacks:n,specPath:r}=t;return e=>{var t;const s=e.specSelectors.validOperationMethods();return f.Map.isMap(n)?o()(t=i()(n).call(n,((e,t,n)=>f.Map.isMap(t)?i()(t).call(t,((e,t,i)=>{var a,c;if(!f.Map.isMap(t))return e;const p=o()(a=l()(c=t.entrySeq()).call(c,(e=>{let[t]=e;return u()(s).call(s,t)}))).call(a,(e=>{let[t,o]=e;return{operation:(0,f.Map)({operation:o}),method:t,path:i,callbackName:n,specPath:h()(r).call(r,[n,i,t])}}));return h()(e).call(e,p)}),(0,f.List)()):e),(0,f.List)()).groupBy((e=>e.callbackName))).call(t,(e=>e.toArray())).toObject():{}}}))},92044:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{basePath:()=>d,consumes:()=>m,definitions:()=>c,hasHost:()=>u,host:()=>f,produces:()=>g,schemes:()=>y,securityDefinitions:()=>p,validOperationMethods:()=>h});var r=n(20573),o=n(33881),s=n(43393);const i=(0,s.Map)();function a(e){return(t,n)=>function(){if(n.getSystem().specSelectors.isOAS3()){const t=e(...arguments);return\"function\"==typeof t?t(n):t}return t(...arguments)}}const l=a((0,r.P1)((()=>null))),c=a((()=>e=>{const t=e.getSystem().specSelectors.specJson().getIn([\"components\",\"schemas\"]);return s.Map.isMap(t)?t:i})),u=a((()=>e=>e.getSystem().specSelectors.specJson().hasIn([\"servers\",0]))),p=a((0,r.P1)(o.specJsonWithResolvedSubtrees,(e=>e.getIn([\"components\",\"securitySchemes\"])||null))),h=(e,t)=>function(n){if(t.specSelectors.isOAS3())return t.oas3Selectors.validOperationMethods();for(var r=arguments.length,o=new Array(r>1?r-1:0),s=1;s<r;s++)o[s-1]=arguments[s];return e(...o)},f=l,d=l,m=l,g=l,y=l},70356:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:s,errSelectors:i,authorized:a,onAuthChange:l,name:c}=n,u=s(\"HttpAuth\");return\"http\"===o.get(\"type\")?r.createElement(u,{key:c,schema:o,name:c,errSelectors:i,authorized:a,getComponent:s,onChange:l}):r.createElement(t,n)}))},37761:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(22460),o=n(70356),s=n(69487),i=n(50058),a=n(53499),l=n(90287);const c={Markdown:r.default,AuthItem:o.default,JsonSchema_string:l.default,VersionStamp:s.default,model:a.default,onlineValidatorBadge:i.default}},90287:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:o,getComponent:s,errors:i,onChange:a}=n,l=o&&o.get?o.get(\"format\"):null,c=o&&o.get?o.get(\"type\"):null,u=s(\"Input\");return c&&\"string\"===c&&l&&(\"binary\"===l||\"base64\"===l)?r.createElement(u,{type:\"file\",className:i.length?\"invalid\":\"\",title:i.length?i:\"\",onChange:e=>{a(e.target.files[0])},disabled:t.isDisabled}):r.createElement(t,n)}))},22460:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{Markdown:()=>h,default:()=>f});var r=n(81607),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(89927),c=n(7779),u=n(4599);const p=new l._(\"commonmark\");p.block.ruler.enable([\"table\"]),p.set({linkTarget:\"_blank\"});const h=e=>{let{source:t,className:n=\"\",getConfigs:r}=e;if(\"string\"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=r(),i=p.render(t),l=(0,u.s)(i,{useUnsafeMarkdown:e});let c;return\"string\"==typeof l&&(c=o()(l).call(l)),s.createElement(\"div\",{dangerouslySetInnerHTML:{__html:c},className:a()(n,\"renderedMarkdown\")})}return null};h.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const f=(0,c.OAS3ComponentWrapFactory)(h)},53499:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(23101),o=n.n(r),s=n(67294),i=n(7779),a=n(53795);class l extends s.Component{render(){let{getConfigs:e,schema:t}=this.props,n=[\"model-box\"],r=null;return!0===t.get(\"deprecated\")&&(n.push(\"deprecated\"),r=s.createElement(\"span\",{className:\"model-deprecated-warning\"},\"Deprecated:\")),s.createElement(\"div\",{className:n.join(\" \")},r,s.createElement(a.Z,o()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const c=(0,i.OAS3ComponentWrapFactory)(l)},50058:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(7779),o=n(5623);const s=(0,r.OAS3ComponentWrapFactory)(o.Z)},69487:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(7779).OAS30ComponentWrapFactory)((e=>{const{Ori:t}=e;return r.createElement(\"span\",null,r.createElement(t,e),r.createElement(\"small\",{className:\"version-stamp\"},r.createElement(\"pre\",{className:\"version\"},\"OAS 3.0\")))}))},92372:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(76986),o=n.n(r),s=n(25800),i=n(84380);const a=function(e){let{fn:t,getSystem:n}=e;if(t.jsonSchema202012){const e=(0,s.makeIsExpandable)(t.jsonSchema202012.isExpandable,n);o()(this.fn.jsonSchema202012,{isExpandable:e,getProperties:s.getProperties})}if(\"function\"==typeof t.sampleFromSchema&&t.jsonSchema202012){const e=(0,i.wrapOAS31Fn)({sampleFromSchema:t.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:t.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:t.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:t.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:t.jsonSchema202012.memoizedCreateXMLExample},n());o()(this.fn,e)}}},89503:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectContactNameField(),i=n.selectContactUrl(),a=n.selectContactEmailField(),l=t(\"Link\");return r.createElement(\"div\",{className:\"info__contact\"},i&&r.createElement(\"div\",null,r.createElement(l,{href:(0,o.Nm)(i),target:\"_blank\"},s,\" - Website\")),a&&r.createElement(l,{href:(0,o.Nm)(`mailto:${a}`)},i?`Send email to ${s}`:`Contact ${s}`))}},16133:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.version(),i=n.url(),a=n.basePath(),l=n.host(),c=n.selectInfoSummaryField(),u=n.selectInfoDescriptionField(),p=n.selectInfoTitleField(),h=n.selectInfoTermsOfServiceUrl(),f=n.selectExternalDocsUrl(),d=n.selectExternalDocsDescriptionField(),m=n.contact(),g=n.license(),y=t(\"Markdown\",!0),v=t(\"Link\"),b=t(\"VersionStamp\"),w=t(\"InfoUrl\"),E=t(\"InfoBasePath\"),x=t(\"License\",!0),S=t(\"Contact\",!0),_=t(\"JsonSchemaDialect\",!0);return r.createElement(\"div\",{className:\"info\"},r.createElement(\"hgroup\",{className:\"main\"},r.createElement(\"h2\",{className:\"title\"},p,s&&r.createElement(b,{version:s})),(l||a)&&r.createElement(E,{host:l,basePath:a}),i&&r.createElement(w,{getComponent:t,url:i})),c&&r.createElement(\"p\",{className:\"info__summary\"},c),r.createElement(\"div\",{className:\"info__description description\"},r.createElement(y,{source:u})),h&&r.createElement(\"div\",{className:\"info__tos\"},r.createElement(v,{target:\"_blank\",href:(0,o.Nm)(h)},\"Terms of service\")),m.size>0&&r.createElement(S,null),g.size>0&&r.createElement(x,null),f&&r.createElement(v,{className:\"info__extdocs\",target:\"_blank\",href:(0,o.Nm)(f)},d||f),r.createElement(_,null))}},92562:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectJsonSchemaDialectField(),i=n.selectJsonSchemaDialectDefault(),a=t(\"Link\");return r.createElement(r.Fragment,null,s&&s===i&&r.createElement(\"p\",{className:\"info__jsonschemadialect\"},\"JSON Schema dialect:\",\" \",r.createElement(a,{target:\"_blank\",href:(0,o.Nm)(s)},s)),s&&s!==i&&r.createElement(\"div\",{className:\"error-wrapper\"},r.createElement(\"div\",{className:\"no-margin\"},r.createElement(\"div\",{className:\"errors\"},r.createElement(\"div\",{className:\"errors-wrapper\"},r.createElement(\"h4\",{className:\"center\"},\"Warning\"),r.createElement(\"p\",{className:\"message\"},r.createElement(\"strong\",null,\"OpenAPI.jsonSchemaDialect\"),\" field contains a value different from the default value of\",\" \",r.createElement(a,{target:\"_blank\",href:i},i),\". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value.\"))))))}},51876:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(90242);const s=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectLicenseNameField(),i=n.selectLicenseUrl(),a=t(\"Link\");return r.createElement(\"div\",{className:\"info__license\"},i?r.createElement(\"div\",{className:\"info__license__url\"},r.createElement(a,{target:\"_blank\",href:(0,o.Nm)(i)},s)):r.createElement(\"span\",null,s))}},92718:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(58118),o=n.n(r),s=n(67294);n(23930);const i=e=>\"string\"==typeof e&&o()(e).call(e,\"#/components/schemas/\")?(e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}})(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):null,a=(0,s.forwardRef)(((e,t)=>{let{schema:n,getComponent:r,onToggle:o}=e;const a=r(\"JSONSchema202012\"),l=i(n.get(\"$$ref\")),c=(0,s.useCallback)(((e,t)=>{o(l,t)}),[l,o]);return s.createElement(a,{name:l,schema:n.toJS(),ref:t,onExpand:c})}));a.defaultProps={name:\"\",displayName:\"\",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const l=a},20263:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294),u=n(94184),p=n.n(u);const h=e=>{var t;let{specActions:n,specSelectors:r,layoutSelectors:s,layoutActions:a,getComponent:u,getConfigs:h}=e;const f=r.selectSchemas(),d=o()(f).length>0,m=[\"components\",\"schemas\"],{docExpansion:g,defaultModelsExpandDepth:y}=h(),v=y>0&&\"none\"!==g,b=s.isShown(m,v),w=u(\"Collapse\"),E=u(\"JSONSchema202012\");(0,c.useEffect)((()=>{const e=b&&y>1,t=null!=r.specResolvedSubtree(m);e&&!t&&n.requestResolvedSubtree(m)}),[b,y]);const x=(0,c.useCallback)((()=>{a.show(m,!b)}),[b]),S=(0,c.useCallback)((e=>{null!==e&&a.readyToScroll(m,e)}),[]),_=e=>t=>{null!==t&&a.readyToScroll([...m,e],t)},j=e=>(t,o)=>{if(o){const t=[...m,e];null!=r.specResolvedSubtree(t)||n.requestResolvedSubtree([...m,e])}};return!d||y<0?null:c.createElement(\"section\",{className:p()(\"models\",{\"is-open\":b}),ref:S},c.createElement(\"h4\",null,c.createElement(\"button\",{\"aria-expanded\":b,className:\"models-control\",onClick:x},c.createElement(\"span\",null,\"Schemas\"),c.createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},c.createElement(\"use\",{xlinkHref:b?\"#large-arrow-up\":\"#large-arrow-down\"})))),c.createElement(w,{isOpened:b},i()(t=l()(f)).call(t,(e=>{let[t,n]=e;return c.createElement(E,{key:t,ref:_(t),schema:n,name:t,onExpand:j(t)})}))))}},33429:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{bypass:t,isSwagger2:n,isOAS3:o,isOAS31:s,alsoShow:i,children:a}=e;return t?r.createElement(\"div\",null,a):n&&(o||s)?r.createElement(\"div\",{className:\"version-pragma\"},i,r.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},r.createElement(\"div\",null,r.createElement(\"h3\",null,\"Unable to render this definition\"),r.createElement(\"p\",null,r.createElement(\"code\",null,\"swagger\"),\" and \",r.createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),r.createElement(\"p\",null,\"Supported version fields are \",r.createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",r.createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",r.createElement(\"code\",null,\"openapi: 3.1.0\"),\").\")))):n||o||s?r.createElement(\"div\",null,a):r.createElement(\"div\",{className:\"version-pragma\"},i,r.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},r.createElement(\"div\",null,r.createElement(\"h3\",null,\"Unable to render this definition\"),r.createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),r.createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",r.createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",r.createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",r.createElement(\"code\",null,\"openapi: 3.1.0\"),\").\"))))}},39508:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(67294);const l=e=>{let{specSelectors:t,getComponent:n}=e;const r=t.selectWebhooksOperations(),s=o()(r),l=n(\"OperationContainer\",!0);return 0===s.length?null:a.createElement(\"div\",{className:\"webhooks\"},a.createElement(\"h2\",null,\"Webhooks\"),i()(s).call(s,(e=>{var t;return a.createElement(\"div\",{key:`${e}-webhook`},i()(t=r[e]).call(t,(t=>a.createElement(l,{key:`${e}-${t.method}-webhook`,op:t.operation,tag:\"webhooks\",method:t.method,path:e,specPath:t.specPath,allowTryItOut:!1}))))})))}},84380:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createOnlyOAS31ComponentWrapper:()=>g,createOnlyOAS31Selector:()=>f,createOnlyOAS31SelectorWrapper:()=>d,createSystemSelector:()=>m,isOAS31:()=>h,wrapOAS31Fn:()=>y});var r=n(23101),o=n.n(r),s=n(82865),i=n.n(s),a=n(97606),l=n.n(a),c=n(2018),u=n.n(c),p=n(67294);const h=e=>{const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.1\\.(?:[1-9]\\d*|0)$/.test(t)},f=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{if(n.getSystem().specSelectors.isOAS31()){const o=e(t,...r);return\"function\"==typeof o?o(n):o}return null}},d=e=>(t,n)=>function(r){for(var o=arguments.length,s=new Array(o>1?o-1:0),i=1;i<o;i++)s[i-1]=arguments[i];if(n.getSystem().specSelectors.isOAS31()){const o=e(r,...s);return\"function\"==typeof o?o(t,n):o}return t(...s)},m=e=>function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return n=>{const o=e(t,n,...r);return\"function\"==typeof o?o(n):o}},g=e=>(t,n)=>r=>n.specSelectors.isOAS31()?p.createElement(e,o()({},r,{originalComponent:t,getSystem:n.getSystem})):p.createElement(t,r),y=(e,t)=>{var n;const{fn:r,specSelectors:o}=t;return i()(l()(n=u()(e)).call(n,(e=>{let[t,n]=e;const s=r[t];return[t,function(){return o.isOAS31()?n(...arguments):\"function\"==typeof s?s(...arguments):void 0}]})))}},29806:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>P});var r=n(39508),o=n(51876),s=n(89503),i=n(16133),a=n(92562),l=n(33429),c=n(92718),u=n(20263),p=n(6608),h=n(77423),f=n(284),d=n(17042),m=n(22914),g=n(41434),y=n(1122),v=n(84380),b=n(9305),w=n(32884),E=n(64280),x=n(59450),S=n(36617),_=n(19525),j=n(25324),O=n(80809),k=n(14951),A=n(77536),C=n(92372);const P=e=>{let{fn:t}=e;const n=t.createSystemSelector||v.createSystemSelector,P=t.createOnlyOAS31Selector||v.createOnlyOAS31Selector;return{afterLoad:C.default,fn:{isOAS31:v.isOAS31,createSystemSelector:v.createSystemSelector,createOnlyOAS31Selector:v.createOnlyOAS31Selector},components:{Webhooks:r.default,JsonSchemaDialect:a.default,OAS31Info:i.default,OAS31License:o.default,OAS31Contact:s.default,OAS31VersionPragmaFilter:l.default,OAS31Model:c.default,OAS31Models:u.default,JSONSchema202012KeywordExample:x.default,JSONSchema202012KeywordXml:S.default,JSONSchema202012KeywordDiscriminator:_.default,JSONSchema202012KeywordExternalDocs:j.default},wrapComponents:{InfoContainer:f.default,License:p.default,Contact:h.default,VersionPragmaFilter:g.default,VersionStamp:y.default,Model:d.default,Models:m.default,JSONSchema202012KeywordDescription:O.default,JSONSchema202012KeywordDefault:k.default,JSONSchema202012KeywordProperties:A.default},statePlugins:{spec:{selectors:{isOAS31:n(b.isOAS31),license:b.license,selectLicenseNameField:b.selectLicenseNameField,selectLicenseUrlField:b.selectLicenseUrlField,selectLicenseIdentifierField:P(b.selectLicenseIdentifierField),selectLicenseUrl:n(b.selectLicenseUrl),contact:b.contact,selectContactNameField:b.selectContactNameField,selectContactEmailField:b.selectContactEmailField,selectContactUrlField:b.selectContactUrlField,selectContactUrl:n(b.selectContactUrl),selectInfoTitleField:b.selectInfoTitleField,selectInfoSummaryField:P(b.selectInfoSummaryField),selectInfoDescriptionField:b.selectInfoDescriptionField,selectInfoTermsOfServiceField:b.selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:n(b.selectInfoTermsOfServiceUrl),selectExternalDocsDescriptionField:b.selectExternalDocsDescriptionField,selectExternalDocsUrlField:b.selectExternalDocsUrlField,selectExternalDocsUrl:n(b.selectExternalDocsUrl),webhooks:P(b.webhooks),selectWebhooksOperations:P(n(b.selectWebhooksOperations)),selectJsonSchemaDialectField:b.selectJsonSchemaDialectField,selectJsonSchemaDialectDefault:b.selectJsonSchemaDialectDefault,selectSchemas:n(b.selectSchemas)},wrapSelectors:{isOAS3:w.isOAS3,selectLicenseUrl:w.selectLicenseUrl}},oas31:{selectors:{selectLicenseUrl:P(n(E.selectLicenseUrl))}}}}}},45989:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{schema:t,getSystem:n}=e;if(null==t||!t.description)return null;const{getComponent:o}=n(),s=o(\"Markdown\");return r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},r.createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},r.createElement(s,{source:t.description})))}},19525:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(28222),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(7749);const c=e=>{let{schema:t,getSystem:n}=e;const r=(null==t?void 0:t.discriminator)||{},{fn:i,getComponent:c}=n(),{useIsExpandedDeeply:u,useComponent:p}=i.jsonSchema202012,h=u(),f=!!r.mapping,[d,m]=(0,s.useState)(h),[g,y]=(0,s.useState)(!1),v=p(\"Accordion\"),b=p(\"ExpandDeepButton\"),w=c(\"JSONSchema202012DeepExpansionContext\")(),E=(0,s.useCallback)((()=>{m((e=>!e))}),[]),x=(0,s.useCallback)(((e,t)=>{m(t),y(t)}),[]);return 0===o()(r).length?null:s.createElement(w.Provider,{value:g},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator\"},f?s.createElement(s.Fragment,null,s.createElement(v,{expanded:d,onChange:E},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\")),s.createElement(b,{expanded:d,onClick:x})):s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\"),r.propertyName&&s.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},r.propertyName),s.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.createElement(\"ul\",{className:a()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(l.default,{discriminator:r})))))}},7749:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(28222),o=n.n(r),s=n(97606),i=n.n(s),a=n(2018),l=n.n(a),c=n(67294);const u=e=>{var t;let{discriminator:n}=e;const r=(null==n?void 0:n.mapping)||{};return 0===o()(r).length?null:i()(t=l()(r)).call(t,(e=>{let[t,n]=e;return c.createElement(\"div\",{key:`${t}-${n}`,className:\"json-schema-2020-12-keyword\"},c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},t),c.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},n))}))};u.defaultProps={mapping:void 0};const p=u},59450:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{schema:t,getSystem:n}=e;const{fn:o}=n(),{hasKeyword:s,stringify:i}=o.jsonSchema202012.useFn();return s(t,\"example\")?r.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--example\"},r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Example\"),r.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},i(t.example))):null}},25324:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(28222),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i),l=n(90242);const c=e=>{let{schema:t,getSystem:n}=e;const r=(null==t?void 0:t.externalDocs)||{},{fn:i,getComponent:c}=n(),{useIsExpandedDeeply:u,useComponent:p}=i.jsonSchema202012,h=u(),f=!(!r.description&&!r.url),[d,m]=(0,s.useState)(h),[g,y]=(0,s.useState)(!1),v=p(\"Accordion\"),b=p(\"ExpandDeepButton\"),w=c(\"JSONSchema202012KeywordDescription\"),E=c(\"Link\"),x=c(\"JSONSchema202012DeepExpansionContext\")(),S=(0,s.useCallback)((()=>{m((e=>!e))}),[]),_=(0,s.useCallback)(((e,t)=>{m(t),y(t)}),[]);return 0===o()(r).length?null:s.createElement(x.Provider,{value:g},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs\"},f?s.createElement(s.Fragment,null,s.createElement(v,{expanded:d,onChange:S},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\")),s.createElement(b,{expanded:d,onClick:_})):s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\"),s.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.createElement(\"ul\",{className:a()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!d})},d&&s.createElement(s.Fragment,null,r.description&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(w,{schema:r,getSystem:n})),r.url&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"url\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},s.createElement(E,{target:\"_blank\",href:(0,l.Nm)(r.url)},r.url))))))))}},9023:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>g});var r=n(58309),o=n.n(r),s=n(28222),i=n.n(s),a=n(97606),l=n.n(a),c=n(2018),u=n.n(c),p=n(58118),h=n.n(p),f=n(67294),d=n(94184),m=n.n(d);const g=e=>{var t;let{schema:n,getSystem:r}=e;const{fn:s}=r(),{useComponent:a}=s.jsonSchema202012,{getDependentRequired:c,getProperties:p}=s.jsonSchema202012.useFn(),d=s.jsonSchema202012.useConfig(),g=o()(null==n?void 0:n.required)?n.required:[],y=a(\"JSONSchema\"),v=p(n,d);return 0===i()(v).length?null:f.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},f.createElement(\"ul\",null,l()(t=u()(v)).call(t,(e=>{let[t,r]=e;const o=h()(g).call(g,t),s=c(t,n);return f.createElement(\"li\",{key:t,className:m()(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":o})},f.createElement(y,{name:t,schema:r,dependentRequired:s}))}))))}},36617:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(28222),o=n.n(r),s=n(67294),i=n(94184),a=n.n(i);const l=e=>{let{schema:t,getSystem:n}=e;const r=(null==t?void 0:t.xml)||{},{fn:i,getComponent:l}=n(),{useIsExpandedDeeply:c,useComponent:u}=i.jsonSchema202012,p=c(),h=!!(r.name||r.namespace||r.prefix),[f,d]=(0,s.useState)(p),[m,g]=(0,s.useState)(!1),y=u(\"Accordion\"),v=u(\"ExpandDeepButton\"),b=l(\"JSONSchema202012DeepExpansionContext\")(),w=(0,s.useCallback)((()=>{d((e=>!e))}),[]),E=(0,s.useCallback)(((e,t)=>{d(t),g(t)}),[]);return 0===o()(r).length?null:s.createElement(b.Provider,{value:m},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml\"},h?s.createElement(s.Fragment,null,s.createElement(y,{expanded:f,onChange:w},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\")),s.createElement(v,{expanded:f,onClick:E})):s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\"),!0===r.attribute&&s.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"attribute\"),!0===r.wrapped&&s.createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"wrapped\"),s.createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),s.createElement(\"ul\",{className:a()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!f})},f&&s.createElement(s.Fragment,null,r.name&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"name\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.name))),r.namespace&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"namespace\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.namespace))),r.prefix&&s.createElement(\"li\",{className:\"json-schema-2020-12-property\"},s.createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"prefix\"),s.createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},r.prefix)))))))}},25800:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getProperties:()=>u,makeIsExpandable:()=>c});var r=n(2018),o=n.n(r),s=n(14418),i=n.n(s),a=n(82865),l=n.n(a);const c=(e,t)=>{const{fn:n}=t();if(\"function\"!=typeof e)return null;const{hasKeyword:r}=n.jsonSchema202012;return t=>e(t)||r(t,\"example\")||(null==t?void 0:t.xml)||(null==t?void 0:t.discriminator)||(null==t?void 0:t.externalDocs)},u=(e,t)=>{let{includeReadOnly:n,includeWriteOnly:r}=t;if(null==e||!e.properties)return{};const s=o()(e.properties),a=i()(s).call(s,(e=>{let[,t]=e;const o=!0===(null==t?void 0:t.readOnly),s=!0===(null==t?void 0:t.writeOnly);return(!o||n)&&(!s||r)}));return l()(a)}},14951:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{schema:t,getSystem:n,originalComponent:o}=e;const{getComponent:s}=n(),i=s(\"JSONSchema202012KeywordDiscriminator\"),a=s(\"JSONSchema202012KeywordXml\"),l=s(\"JSONSchema202012KeywordExample\"),c=s(\"JSONSchema202012KeywordExternalDocs\");return r.createElement(r.Fragment,null,r.createElement(o,{schema:t}),r.createElement(i,{schema:t,getSystem:n}),r.createElement(a,{schema:t,getSystem:n}),r.createElement(c,{schema:t,getSystem:n}),r.createElement(l,{schema:t,getSystem:n}))}))},80809:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(45989);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)(r.default)},77536:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(9023);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)(r.default)},64280:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{selectLicenseUrl:()=>s});var r=n(20573),o=n(63543);const s=(0,r.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t)=>t.specSelectors.selectLicenseIdentifierField()),((e,t,n,r)=>n?(0,o.mn)(n,e,{selectedServer:t}):r?`https://spdx.org/licenses/${r}.html`:void 0))},9305:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{contact:()=>A,isOAS31:()=>w,license:()=>S,selectContactEmailField:()=>P,selectContactNameField:()=>C,selectContactUrl:()=>I,selectContactUrlField:()=>N,selectExternalDocsDescriptionField:()=>L,selectExternalDocsUrl:()=>$,selectExternalDocsUrlField:()=>B,selectInfoDescriptionField:()=>M,selectInfoSummaryField:()=>R,selectInfoTermsOfServiceField:()=>D,selectInfoTermsOfServiceUrl:()=>F,selectInfoTitleField:()=>T,selectJsonSchemaDialectDefault:()=>U,selectJsonSchemaDialectField:()=>q,selectLicenseIdentifierField:()=>k,selectLicenseNameField:()=>_,selectLicenseUrl:()=>O,selectLicenseUrlField:()=>j,selectSchemas:()=>z,selectWebhooksOperations:()=>x,webhooks:()=>E});var r=n(97606),o=n.n(r),s=n(24282),i=n.n(s),a=n(14418),l=n.n(a),c=n(58118),u=n.n(c),p=n(39022),h=n.n(p),f=n(2018),d=n.n(f),m=n(43393),g=n(20573),y=n(63543),v=n(84380);const b=(0,m.Map)(),w=(0,g.P1)(((e,t)=>t.specSelectors.specJson()),v.isOAS31),E=()=>e=>e.specSelectors.specJson().get(\"webhooks\",b),x=(0,g.P1)(((e,t)=>t.specSelectors.webhooks()),((e,t)=>t.specSelectors.validOperationMethods()),((e,t)=>t.specSelectors.specResolvedSubtree([\"webhooks\"])),((e,t)=>{var n;return m.Map.isMap(e)?o()(n=i()(e).call(e,((e,n,r)=>{var s,i;if(!m.Map.isMap(n))return e;const a=o()(s=l()(i=n.entrySeq()).call(i,(e=>{let[n]=e;return u()(t).call(t,n)}))).call(s,(e=>{let[t,n]=e;return{operation:(0,m.Map)({operation:n}),method:t,path:r,specPath:(0,m.List)([\"webhooks\",r,t])}}));return h()(e).call(e,a)}),(0,m.List)()).groupBy((e=>e.path))).call(n,(e=>e.toArray())).toObject():{}})),S=()=>e=>e.specSelectors.info().get(\"license\",b),_=()=>e=>e.specSelectors.license().get(\"name\",\"License\"),j=()=>e=>e.specSelectors.license().get(\"url\"),O=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),k=()=>e=>e.specSelectors.license().get(\"identifier\"),A=()=>e=>e.specSelectors.info().get(\"contact\",b),C=()=>e=>e.specSelectors.contact().get(\"name\",\"the developer\"),P=()=>e=>e.specSelectors.contact().get(\"email\"),N=()=>e=>e.specSelectors.contact().get(\"url\"),I=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectContactUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),T=()=>e=>e.specSelectors.info().get(\"title\"),R=()=>e=>e.specSelectors.info().get(\"summary\"),M=()=>e=>e.specSelectors.info().get(\"description\"),D=()=>e=>e.specSelectors.info().get(\"termsOfService\"),F=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectInfoTermsOfServiceField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),L=()=>e=>e.specSelectors.externalDocs().get(\"description\"),B=()=>e=>e.specSelectors.externalDocs().get(\"url\"),$=(0,g.P1)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectExternalDocsUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),q=()=>e=>e.specSelectors.specJson().get(\"jsonSchemaDialect\"),U=()=>\"https://spec.openapis.org/oas/3.1/dialect/base\",z=(0,g.P1)(((e,t)=>t.specSelectors.definitions()),((e,t)=>t.specSelectors.specResolvedSubtree([\"components\",\"schemas\"])),((e,t)=>{var n;return m.Map.isMap(e)?m.Map.isMap(t)?i()(n=d()(e.toJS())).call(n,((e,n)=>{let[r,o]=n;const s=t.get(r);return e[r]=(null==s?void 0:s.toJS())||o,e}),{}):e.toJS():{}}))},32884:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{isOAS3:()=>o,selectLicenseUrl:()=>s});var r=n(84380);const o=(e,t)=>function(n){const r=t.specSelectors.isOAS31();for(var o=arguments.length,s=new Array(o>1?o-1:0),i=1;i<o;i++)s[i-1]=arguments[i];return r||e(...s)},s=(0,r.createOnlyOAS31SelectorWrapper)((()=>(e,t)=>t.oas31Selectors.selectLicenseUrl()))},77423:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31Contact\",!0);return r.createElement(n,null)}))},284:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31Info\",!0);return r.createElement(n,null)}))},6608:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31License\",!0);return r.createElement(n,null)}))},17042:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(67294),o=n(84380),s=n(25800);const i=(0,o.createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t,...n}=e;const o=t(),{getComponent:i,fn:a,getConfigs:l}=o,c=l(),u=i(\"OAS31Model\"),p=i(\"JSONSchema202012\"),h=i(\"JSONSchema202012Keyword$schema\"),f=i(\"JSONSchema202012Keyword$vocabulary\"),d=i(\"JSONSchema202012Keyword$id\"),m=i(\"JSONSchema202012Keyword$anchor\"),g=i(\"JSONSchema202012Keyword$dynamicAnchor\"),y=i(\"JSONSchema202012Keyword$ref\"),v=i(\"JSONSchema202012Keyword$dynamicRef\"),b=i(\"JSONSchema202012Keyword$defs\"),w=i(\"JSONSchema202012Keyword$comment\"),E=i(\"JSONSchema202012KeywordAllOf\"),x=i(\"JSONSchema202012KeywordAnyOf\"),S=i(\"JSONSchema202012KeywordOneOf\"),_=i(\"JSONSchema202012KeywordNot\"),j=i(\"JSONSchema202012KeywordIf\"),O=i(\"JSONSchema202012KeywordThen\"),k=i(\"JSONSchema202012KeywordElse\"),A=i(\"JSONSchema202012KeywordDependentSchemas\"),C=i(\"JSONSchema202012KeywordPrefixItems\"),P=i(\"JSONSchema202012KeywordItems\"),N=i(\"JSONSchema202012KeywordContains\"),I=i(\"JSONSchema202012KeywordProperties\"),T=i(\"JSONSchema202012KeywordPatternProperties\"),R=i(\"JSONSchema202012KeywordAdditionalProperties\"),M=i(\"JSONSchema202012KeywordPropertyNames\"),D=i(\"JSONSchema202012KeywordUnevaluatedItems\"),F=i(\"JSONSchema202012KeywordUnevaluatedProperties\"),L=i(\"JSONSchema202012KeywordType\"),B=i(\"JSONSchema202012KeywordEnum\"),$=i(\"JSONSchema202012KeywordConst\"),q=i(\"JSONSchema202012KeywordConstraint\"),U=i(\"JSONSchema202012KeywordDependentRequired\"),z=i(\"JSONSchema202012KeywordContentSchema\"),V=i(\"JSONSchema202012KeywordTitle\"),W=i(\"JSONSchema202012KeywordDescription\"),J=i(\"JSONSchema202012KeywordDefault\"),K=i(\"JSONSchema202012KeywordDeprecated\"),H=i(\"JSONSchema202012KeywordReadOnly\"),G=i(\"JSONSchema202012KeywordWriteOnly\"),Z=i(\"JSONSchema202012Accordion\"),Y=i(\"JSONSchema202012ExpandDeepButton\"),X=i(\"JSONSchema202012ChevronRightIcon\"),Q=i(\"withJSONSchema202012Context\")(u,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:c.defaultModelExpandDepth,includeReadOnly:Boolean(n.includeReadOnly),includeWriteOnly:Boolean(n.includeWriteOnly)},components:{JSONSchema:p,Keyword$schema:h,Keyword$vocabulary:f,Keyword$id:d,Keyword$anchor:m,Keyword$dynamicAnchor:g,Keyword$ref:y,Keyword$dynamicRef:v,Keyword$defs:b,Keyword$comment:w,KeywordAllOf:E,KeywordAnyOf:x,KeywordOneOf:S,KeywordNot:_,KeywordIf:j,KeywordThen:O,KeywordElse:k,KeywordDependentSchemas:A,KeywordPrefixItems:C,KeywordItems:P,KeywordContains:N,KeywordProperties:I,KeywordPatternProperties:T,KeywordAdditionalProperties:R,KeywordPropertyNames:M,KeywordUnevaluatedItems:D,KeywordUnevaluatedProperties:F,KeywordType:L,KeywordEnum:B,KeywordConst:$,KeywordConstraint:q,KeywordDependentRequired:U,KeywordContentSchema:z,KeywordTitle:V,KeywordDescription:W,KeywordDefault:J,KeywordDeprecated:K,KeywordReadOnly:H,KeywordWriteOnly:G,Accordion:Z,ExpandDeepButton:Y,ChevronRightIcon:X},fn:{upperFirst:a.upperFirst,isExpandable:(0,s.makeIsExpandable)(a.jsonSchema202012.isExpandable,t),getProperties:s.getProperties}});return r.createElement(Q,n)}))},22914:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const{getComponent:n,fn:s,getConfigs:i}=t(),a=i();if(o.ModelsWithJSONSchemaContext)return r.createElement(o.ModelsWithJSONSchemaContext,null);const l=n(\"OAS31Models\",!0),c=n(\"JSONSchema202012\"),u=n(\"JSONSchema202012Keyword$schema\"),p=n(\"JSONSchema202012Keyword$vocabulary\"),h=n(\"JSONSchema202012Keyword$id\"),f=n(\"JSONSchema202012Keyword$anchor\"),d=n(\"JSONSchema202012Keyword$dynamicAnchor\"),m=n(\"JSONSchema202012Keyword$ref\"),g=n(\"JSONSchema202012Keyword$dynamicRef\"),y=n(\"JSONSchema202012Keyword$defs\"),v=n(\"JSONSchema202012Keyword$comment\"),b=n(\"JSONSchema202012KeywordAllOf\"),w=n(\"JSONSchema202012KeywordAnyOf\"),E=n(\"JSONSchema202012KeywordOneOf\"),x=n(\"JSONSchema202012KeywordNot\"),S=n(\"JSONSchema202012KeywordIf\"),_=n(\"JSONSchema202012KeywordThen\"),j=n(\"JSONSchema202012KeywordElse\"),O=n(\"JSONSchema202012KeywordDependentSchemas\"),k=n(\"JSONSchema202012KeywordPrefixItems\"),A=n(\"JSONSchema202012KeywordItems\"),C=n(\"JSONSchema202012KeywordContains\"),P=n(\"JSONSchema202012KeywordProperties\"),N=n(\"JSONSchema202012KeywordPatternProperties\"),I=n(\"JSONSchema202012KeywordAdditionalProperties\"),T=n(\"JSONSchema202012KeywordPropertyNames\"),R=n(\"JSONSchema202012KeywordUnevaluatedItems\"),M=n(\"JSONSchema202012KeywordUnevaluatedProperties\"),D=n(\"JSONSchema202012KeywordType\"),F=n(\"JSONSchema202012KeywordEnum\"),L=n(\"JSONSchema202012KeywordConst\"),B=n(\"JSONSchema202012KeywordConstraint\"),$=n(\"JSONSchema202012KeywordDependentRequired\"),q=n(\"JSONSchema202012KeywordContentSchema\"),U=n(\"JSONSchema202012KeywordTitle\"),z=n(\"JSONSchema202012KeywordDescription\"),V=n(\"JSONSchema202012KeywordDefault\"),W=n(\"JSONSchema202012KeywordDeprecated\"),J=n(\"JSONSchema202012KeywordReadOnly\"),K=n(\"JSONSchema202012KeywordWriteOnly\"),H=n(\"JSONSchema202012Accordion\"),G=n(\"JSONSchema202012ExpandDeepButton\"),Z=n(\"JSONSchema202012ChevronRightIcon\"),Y=n(\"withJSONSchema202012Context\");return o.ModelsWithJSONSchemaContext=Y(l,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:a.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:c,Keyword$schema:u,Keyword$vocabulary:p,Keyword$id:h,Keyword$anchor:f,Keyword$dynamicAnchor:d,Keyword$ref:m,Keyword$dynamicRef:g,Keyword$defs:y,Keyword$comment:v,KeywordAllOf:b,KeywordAnyOf:w,KeywordOneOf:E,KeywordNot:x,KeywordIf:S,KeywordThen:_,KeywordElse:j,KeywordDependentSchemas:O,KeywordPrefixItems:k,KeywordItems:A,KeywordContains:C,KeywordProperties:P,KeywordPatternProperties:N,KeywordAdditionalProperties:I,KeywordPropertyNames:T,KeywordUnevaluatedItems:R,KeywordUnevaluatedProperties:M,KeywordType:D,KeywordEnum:F,KeywordConst:L,KeywordConstraint:B,KeywordDependentRequired:$,KeywordContentSchema:q,KeywordTitle:U,KeywordDescription:z,KeywordDefault:V,KeywordDeprecated:W,KeywordReadOnly:J,KeywordWriteOnly:K,Accordion:H,ExpandDeepButton:G,ChevronRightIcon:Z},fn:{upperFirst:s.upperFirst,isExpandable:s.jsonSchema202012.isExpandable,getProperties:s.jsonSchema202012.getProperties}}),r.createElement(o.ModelsWithJSONSchemaContext,null)}));o.ModelsWithJSONSchemaContext=null;const s=o},41434:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(23101),o=n.n(r),s=n(67294);const i=(e,t)=>e=>{const n=t.specSelectors.isOAS31(),r=t.getComponent(\"OAS31VersionPragmaFilter\");return s.createElement(r,o()({isOAS31:n},e))}},1122:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=(0,n(84380).createOnlyOAS31ComponentWrapper)((e=>{let{originalComponent:t,...n}=e;return r.createElement(\"span\",null,r.createElement(t,n),r.createElement(\"small\",{className:\"version-stamp\"},r.createElement(\"pre\",{className:\"version\"},\"OAS 3.1\")))}))},28560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(87198),o=n.n(r);let s=!1;function i(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return s=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const n=t.getConfigs().onComplete;return s&&\"function\"==typeof n&&(o()(n,0),s=!1),e(...arguments)}}}}}}},92135:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{requestSnippetGenerator_curl_bash:()=>j,requestSnippetGenerator_curl_cmd:()=>O,requestSnippetGenerator_curl_powershell:()=>_});var r=n(11882),o=n.n(r),s=n(81607),i=n.n(s),a=n(35627),l=n.n(a),c=n(97606),u=n.n(c),p=n(12196),h=n.n(p),f=n(74386),d=n.n(f),m=n(58118),g=n.n(m),y=n(27504),v=n(43393);const b=e=>{var t;const n=\"_**[]\";return o()(e).call(e,n)<0?e:i()(t=e.split(n)[0]).call(t)},w=e=>\"-d \"===e||/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/'/g,\"'\\\\''\")+\"'\",E=e=>\"-d \"===(e=e.replace(/\\^/g,\"^^\").replace(/\\\\\"/g,'\\\\\\\\\"').replace(/\"/g,'\"\"').replace(/\\n/g,\"^\\n\"))?e.replace(/-d /g,\"-d ^\\n\"):/^[_\\/-]/g.test(e)?e:'\"'+e+'\"',x=e=>\"-d \"===e?e:/\\n/.test(e)?'@\"\\n'+e.replace(/\"/g,'\\\\\"').replace(/`/g,\"``\").replace(/\\$/,\"`$\")+'\\n\"@':/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/\"/g,'\"\"').replace(/'/g,\"''\")+\"'\";const S=function(e,t,n){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",o=!1,s=\"\";const i=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return s+=\" \"+u()(n).call(n,t).join(\" \")},a=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return s+=u()(n).call(n,t).join(\" \")},c=()=>s+=` ${n}`,p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return s+=h()(\"  \").call(\"  \",e)};let f=e.get(\"headers\");if(s+=\"curl\"+r,e.has(\"curlOptions\")&&i(...e.get(\"curlOptions\")),i(\"-X\",e.get(\"method\")),c(),p(),a(`${e.get(\"url\")}`),f&&f.size)for(let t of d()(m=e.get(\"headers\")).call(m)){var m;c(),p();let[e,n]=t;a(\"-H\",`${e}: ${n}`),o=o||/^content-type$/i.test(e)&&/^multipart\\/form-data$/i.test(n)}const w=e.get(\"body\");var E;if(w)if(o&&g()(E=[\"POST\",\"PUT\",\"PATCH\"]).call(E,e.get(\"method\")))for(let[e,t]of w.entrySeq()){let n=b(e);c(),p(),a(\"-F\"),t instanceof y.Z.File?i(`${n}=@${t.name}${t.type?`;type=${t.type}`:\"\"}`):i(`${n}=${t}`)}else if(w instanceof y.Z.File)c(),p(),a(`--data-binary '@${w.name}'`);else{c(),p(),a(\"-d \");let t=w;v.Map.isMap(t)?a(function(e){let t=[];for(let[n,r]of e.get(\"body\").entrySeq()){let e=b(n);r instanceof y.Z.File?t.push(`  \"${e}\": {\\n    \"name\": \"${r.name}\"${r.type?`,\\n    \"type\": \"${r.type}\"`:\"\"}\\n  }`):t.push(`  \"${e}\": ${l()(r,null,2).replace(/(\\r\\n|\\r|\\n)/g,\"\\n  \")}`)}return`{\\n${t.join(\",\\n\")}\\n}`}(e)):(\"string\"!=typeof t&&(t=l()(t)),a(t))}else w||\"POST\"!==e.get(\"method\")||(c(),p(),a(\"-d ''\"));return s},_=e=>S(e,x,\"`\\n\",\".exe\"),j=e=>S(e,w,\"\\\\\\n\"),O=e=>S(e,E,\"^\\n\")},86575:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(92135),o=n(4669),s=n(84206);const i=()=>({components:{RequestSnippets:s.default},fn:r,statePlugins:{requestSnippets:{selectors:o}}})},84206:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>w});var r=n(14418),o=n.n(r),s=n(25110),i=n.n(s),a=n(86),l=n.n(a),c=n(97606),u=n.n(c),p=n(67294),h=n(27361),f=n.n(h),d=n(23560),m=n.n(d),g=n(74855),y=n(33424);const v={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(250, 250, 250)\",paddingBottom:\"0\",paddingTop:\"0\",border:\"1px solid rgb(51, 51, 51)\",borderRadius:\"4px 4px 0 0\",boxShadow:\"none\",borderBottom:\"none\"},b={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(51, 51, 51)\",boxShadow:\"none\",border:\"1px solid rgb(51, 51, 51)\",paddingBottom:\"0\",paddingTop:\"0\",borderRadius:\"4px 4px 0 0\",marginTop:\"-5px\",marginRight:\"-5px\",marginLeft:\"-5px\",zIndex:\"9999\",borderBottom:\"none\"},w=e=>{var t,n;let{request:r,requestSnippetsSelectors:s,getConfigs:a}=e;const c=m()(a)?a():null,h=!1!==f()(c,\"syntaxHighlight\")&&f()(c,\"syntaxHighlight.activated\",!0),d=(0,p.useRef)(null),[w,E]=(0,p.useState)(null===(t=s.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[x,S]=(0,p.useState)(null==s?void 0:s.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=o()(e=i()(d.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains(\"curl-command\"))}));return l()(t).call(t,(e=>e.addEventListener(\"mousewheel\",C,{passive:!1}))),()=>{l()(t).call(t,(e=>e.removeEventListener(\"mousewheel\",C)))}}),[r]);const _=s.getSnippetGenerators(),j=_.get(w),O=j.get(\"fn\")(r),k=()=>{S(!x)},A=e=>e===w?b:v,C=e=>{const{target:t,deltaY:n}=e,{scrollHeight:r,offsetHeight:o,scrollTop:s}=t;r>o&&(0===s&&n<0||o+s>=r&&n>0)&&e.preventDefault()},P=h?p.createElement(y.d3,{language:j.get(\"syntax\"),className:\"curl microlight\",style:(0,y.C2)(f()(c,\"syntaxHighlight.theme\"))},O):p.createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:O});return p.createElement(\"div\",{className:\"request-snippets\",ref:d},p.createElement(\"div\",{style:{width:\"100%\",display:\"flex\",justifyContent:\"flex-start\",alignItems:\"center\",marginBottom:\"15px\"}},p.createElement(\"h4\",{onClick:()=>k(),style:{cursor:\"pointer\"}},\"Snippets\"),p.createElement(\"button\",{onClick:()=>k(),style:{border:\"none\",background:\"none\"},title:x?\"Collapse operation\":\"Expand operation\"},p.createElement(\"svg\",{className:\"arrow\",width:\"10\",height:\"10\"},p.createElement(\"use\",{href:x?\"#large-arrow-down\":\"#large-arrow\",xlinkHref:x?\"#large-arrow-down\":\"#large-arrow\"})))),x&&p.createElement(\"div\",{className:\"curl-command\"},p.createElement(\"div\",{style:{paddingLeft:\"15px\",paddingRight:\"10px\",width:\"100%\",display:\"flex\"}},u()(n=_.entrySeq()).call(n,(e=>{let[t,n]=e;return p.createElement(\"div\",{style:A(t),className:\"btn\",key:t,onClick:()=>(e=>{w!==e&&E(e)})(t)},p.createElement(\"h4\",{style:t===w?{color:\"white\"}:{}},n.get(\"title\")))}))),p.createElement(\"div\",{className:\"copy-to-clipboard\"},p.createElement(g.CopyToClipboard,{text:O},p.createElement(\"button\",null))),p.createElement(\"div\",null,P)))}},4669:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getActiveLanguage:()=>d,getDefaultExpanded:()=>m,getGenerators:()=>h,getSnippetGenerators:()=>f});var r=n(14418),o=n.n(r),s=n(58118),i=n.n(s),a=n(97606),l=n.n(a),c=n(20573),u=n(43393);const p=e=>e||(0,u.Map)(),h=(0,c.P1)(p,(e=>{const t=e.get(\"languages\"),n=e.get(\"generators\",(0,u.Map)());return!t||t.isEmpty()?n:o()(n).call(n,((e,n)=>i()(t).call(t,n)))})),f=e=>t=>{var n,r;let{fn:s}=t;return o()(n=l()(r=h(e)).call(r,((e,t)=>{const n=(e=>s[`requestSnippetGenerator_${e}`])(t);return\"function\"!=typeof n?null:e.set(\"fn\",n)}))).call(n,(e=>e))},d=(0,c.P1)(p,(e=>e.get(\"activeLanguage\"))),m=(0,c.P1)(p,(e=>e.get(\"defaultExpanded\")))},36195:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ErrorBoundary:()=>i,default:()=>a});var r=n(67294),o=n(56189),s=n(29403);class i extends r.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:n}=this.props;if(this.state.hasError){const n=e(\"Fallback\");return r.createElement(n,{name:t})}return n}}i.defaultProps={targetName:\"this component\",getComponent:()=>s.default,fn:{componentDidCatch:o.componentDidCatch},children:null};const a=i},29403:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(67294);const o=e=>{let{name:t}=e;return r.createElement(\"div\",{className:\"fallback\"},\"😱 \",r.createElement(\"i\",null,\"Could not render \",\"t\"===t?\"this component\":t,\", see the console.\"))}},56189:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{componentDidCatch:()=>i,withErrorBoundary:()=>a});var r=n(23101),o=n.n(r),s=n(67294);const i=console.error,a=e=>t=>{const{getComponent:n,fn:r}=e(),i=n(\"ErrorBoundary\"),a=r.getDisplayName(t);class l extends s.Component{render(){return s.createElement(i,{targetName:a,getComponent:n,fn:r},s.createElement(t,o()({},this.props,this.context)))}}var c;return l.displayName=`WithErrorBoundary(${a})`,(c=t).prototype&&c.prototype.isReactComponent&&(l.prototype.mapStateToProps=t.prototype.mapStateToProps),l}},27621:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var r=n(47475),o=n.n(r),s=n(7287),i=n.n(s),a=n(36195),l=n(29403),c=n(56189);const u=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{var r;let{getSystem:s}=n;const u=t?e:[\"App\",\"BaseLayout\",\"VersionPragmaFilter\",\"InfoContainer\",\"ServersContainer\",\"SchemesContainer\",\"AuthorizeBtnContainer\",\"FilterContainer\",\"Operations\",\"OperationContainer\",\"parameters\",\"responses\",\"OperationServers\",\"Models\",\"ModelWrapper\",...e],p=i()(u,o()(r=Array(u.length)).call(r,((e,t)=>{let{fn:n}=t;return n.withErrorBoundary(e)})));return{fn:{componentDidCatch:c.componentDidCatch,withErrorBoundary:(0,c.withErrorBoundary)(s)},components:{ErrorBoundary:a.default,Fallback:l.default},wrapComponents:p}}}},72846:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var r=n(24282),o=n.n(r),s=n(35627),i=n.n(s),a=n(59704),l=n.n(a);const c=[{when:/json/,shouldStringifyTypes:[\"string\"]}],u=[\"object\"],p=e=>(t,n,r,s)=>{const{fn:a}=e(),p=a.memoizedSampleFromSchema(t,n,s),h=typeof p,f=o()(c).call(c,((e,t)=>t.when.test(r)?[...e,...t.shouldStringifyTypes]:e),u);return l()(f,(e=>e===h))?i()(p,null,2):p}},16132:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=e=>function(t){var n,r;let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:a}=e();return\"function\"==typeof(null===(n=t)||void 0===n?void 0:n.toJS)&&(t=t.toJS()),\"function\"==typeof(null===(r=i)||void 0===r?void 0:r.toJS)&&(i=i.toJS()),/xml/.test(o)?a.getXmlSampleSchema(t,s,i):/(yaml|yml)/.test(o)?a.getYamlSampleSchema(t,s,o,i):a.getJsonSampleSchema(t,s,o,i)}},81169:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const r=e=>(t,n,r)=>{const{fn:o}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\\x3c!-- XML example cannot be generated; root element name is undefined --\\x3e';if(t.$$ref){let e=t.$$ref.match(/\\S*\\/(\\S+)$/);t.xml.name=e[1]}}return o.memoizedCreateXMLExample(t,n,r)}},79431:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var r=n(24278),o=n.n(r),s=n(1272);const i=e=>(t,n,r,i)=>{const{fn:a}=e(),l=a.getJsonSampleSchema(t,n,r,i);let c;try{c=s.ZP.dump(s.ZP.load(l),{lineWidth:-1},{schema:s.A8}),\"\\n\"===c[c.length-1]&&(c=o()(c).call(c,0,c.length-1))}catch(e){return console.error(e),\"error: could not generate yaml example\"}return c.replace(/\\t/g,\"  \")}},29812:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>q,inferSchema:()=>$,memoizedCreateXMLExample:()=>V,memoizedSampleFromSchema:()=>W,sampleFromSchema:()=>U,sampleFromSchemaGeneric:()=>B});var r=n(11882),o=n.n(r),s=n(86),i=n.n(s),a=n(58309),l=n.n(a),c=n(58118),u=n.n(c),p=n(92039),h=n.n(p),f=n(24278),d=n.n(f),m=n(51679),g=n.n(m),y=n(39022),v=n.n(y),b=n(97606),w=n.n(b),E=n(35627),x=n.n(E),S=n(53479),_=n.n(S),j=n(14419),O=n.n(j),k=n(41609),A=n.n(k),C=n(90242),P=n(60314);const N={string:e=>e.pattern?(e=>{try{return new(O())(e).gen()}catch(e){return\"string\"}})(e.pattern):\"string\",string_email:()=>\"user@example.com\",\"string_date-time\":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",string_hostname:()=>\"example.com\",string_ipv4:()=>\"198.51.100.42\",string_ipv6:()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>\"boolean\"!=typeof e.default||e.default},I=e=>{e=(0,C.mz)(e);let{type:t,format:n}=e,r=N[`${t}_${n}`]||N[t];return(0,C.Wl)(r)?r(e):\"Unknown Type: \"+e.type},T=e=>(0,C.XV)(e,\"$$ref\",(e=>\"string\"==typeof e&&o()(e).call(e,\"#\")>-1)),R=[\"maxProperties\",\"minProperties\"],M=[\"minItems\",\"maxItems\"],D=[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\"],F=[\"minLength\",\"maxLength\"],L=function(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var s;(i()(n=[\"example\",\"default\",\"enum\",\"xml\",\"type\",...R,...M,...D,...F]).call(n,(n=>(n=>{void 0===t[n]&&void 0!==e[n]&&(t[n]=e[n])})(n))),void 0!==e.required&&l()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),i()(s=e.required).call(s,(e=>{var n;u()(n=t.required).call(n,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let n=(0,C.mz)(e.properties);for(let s in n){var a;if(Object.prototype.hasOwnProperty.call(n,s))if(!n[s]||!n[s].deprecated)if(!n[s]||!n[s].readOnly||r.includeReadOnly)if(!n[s]||!n[s].writeOnly||r.includeWriteOnly)if(!t.properties[s])t.properties[s]=n[s],!e.required&&l()(e.required)&&-1!==o()(a=e.required).call(a,s)&&(t.required?t.required.push(s):t.required=[s])}}return e.items&&(t.items||(t.items={}),t.items=L(e.items,t.items,r)),t},B=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,C.Wl)(e.toJS)&&(e=e.toJS());let s=void 0!==n||e&&void 0!==e.example||e&&void 0!==e.default;const a=!s&&e&&e.oneOf&&e.oneOf.length>0,c=!s&&e&&e.anyOf&&e.anyOf.length>0;if(!s&&(a||c)){const n=(0,C.mz)(a?e.oneOf[0]:e.anyOf[0]);if(L(n,e,t),!e.xml&&n.xml&&(e.xml=n.xml),void 0!==e.example&&void 0!==n.example)s=!0;else if(n.properties){e.properties||(e.properties={});let r=(0,C.mz)(n.properties);for(let s in r){var p;if(Object.prototype.hasOwnProperty.call(r,s))if(!r[s]||!r[s].deprecated)if(!r[s]||!r[s].readOnly||t.includeReadOnly)if(!r[s]||!r[s].writeOnly||t.includeWriteOnly)if(!e.properties[s])e.properties[s]=r[s],!n.required&&l()(n.required)&&-1!==o()(p=n.required).call(p,s)&&(e.required?e.required.push(s):e.required=[s])}}}const f={};let{xml:m,type:y,example:b,properties:E,additionalProperties:x,items:S}=e||{},{includeReadOnly:_,includeWriteOnly:j}=t;m=m||{};let O,{name:k,prefix:P,namespace:N}=m,F={};if(r&&(k=k||\"notagname\",O=(P?P+\":\":\"\")+k,N)){f[P?\"xmlns:\"+P:\"xmlns\"]=N}r&&(F[O]=[]);const $=t=>h()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!y&&(E||x||$(R)?y=\"object\":S||$(M)?y=\"array\":$(D)?(y=\"number\",e.type=\"number\"):s||e.enum||(y=\"string\",e.type=\"string\"));const q=t=>{var n,r,o,s,i;null!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&void 0!==(null===(r=e)||void 0===r?void 0:r.maxItems)&&(t=d()(t).call(t,0,null===(i=e)||void 0===i?void 0:i.maxItems));if(null!==(null===(o=e)||void 0===o?void 0:o.minItems)&&void 0!==(null===(s=e)||void 0===s?void 0:s.minItems)){let n=0;for(;t.length<(null===(a=e)||void 0===a?void 0:a.minItems);){var a;t.push(t[n++%t.length])}}return t},U=(0,C.mz)(E);let z,V=0;const W=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&V>=e.maxProperties,J=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!W()&&(!(t=>{var n;return!(e&&e.required&&e.required.length&&u()(n=e.required).call(n,t))})(t)||e.maxProperties-V-(()=>{if(!e||!e.required)return 0;let t=0;var n,o;return r?i()(n=e.required).call(n,(e=>t+=void 0===F[e]?0:1)):i()(o=e.required).call(o,(e=>{var n;return t+=void 0===(null===(n=F[O])||void 0===n?void 0:g()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(z=r?function(n){let o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&U[n]){if(U[n].xml=U[n].xml||{},U[n].xml.attribute){const e=l()(U[n].enum)?U[n].enum[0]:void 0,t=U[n].example,r=U[n].default;return void(f[U[n].xml.name||n]=void 0!==t?t:void 0!==r?r:void 0!==e?e:I(U[n]))}U[n].xml.name=U[n].xml.name||n}else U[n]||!1===x||(U[n]={xml:{name:n}});let s=B(e&&U[n]||void 0,t,o,r);var i;J(n)&&(V++,l()(s)?F[O]=v()(i=F[O]).call(i,s):F[O].push(s))}:(n,o)=>{if(J(n)){if(Object.prototype.hasOwnProperty.call(e,\"discriminator\")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,\"mapping\")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,\"$$ref\")&&e.$$ref&&e.discriminator.propertyName===n){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){F[n]=t;break}}else F[n]=B(U[n],t,o,r);V++}},s){let o;if(o=T(void 0!==n?n:void 0!==b?b:e.default),!r){if(\"number\"==typeof o&&\"string\"===y)return`${o}`;if(\"string\"!=typeof o||\"string\"===y)return o;try{return JSON.parse(o)}catch(e){return o}}if(e||(y=l()(o)?\"array\":typeof o),\"array\"===y){if(!l()(o)){if(\"string\"==typeof o)return o;o=[o]}const n=e?e.items:void 0;n&&(n.xml=n.xml||m||{},n.xml.name=n.xml.name||m.name);let s=w()(o).call(o,(e=>B(n,t,e,r)));return s=q(s),m.wrapped?(F[O]=s,A()(f)||F[O].push({_attr:f})):F=s,F}if(\"object\"===y){if(\"string\"==typeof o)return o;for(let t in o)Object.prototype.hasOwnProperty.call(o,t)&&(e&&U[t]&&U[t].readOnly&&!_||e&&U[t]&&U[t].writeOnly&&!j||(e&&U[t]&&U[t].xml&&U[t].xml.attribute?f[U[t].xml.name||t]=o[t]:z(t,o[t])));return A()(f)||F[O].push({_attr:f}),F}return F[O]=A()(f)?o:[{_attr:f},o],F}if(\"object\"===y){for(let e in U)Object.prototype.hasOwnProperty.call(U,e)&&(U[e]&&U[e].deprecated||U[e]&&U[e].readOnly&&!_||U[e]&&U[e].writeOnly&&!j||z(e));if(r&&f&&F[O].push({_attr:f}),W())return F;if(!0===x)r?F[O].push({additionalProp:\"Anything can be here\"}):F.additionalProp1={},V++;else if(x){const n=(0,C.mz)(x),o=B(n,t,void 0,r);if(r&&n.xml&&n.xml.name&&\"notagname\"!==n.xml.name)F[O].push(o);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&V<e.minProperties?e.minProperties-V:3;for(let e=1;e<=t;e++){if(W())return F;if(r){const t={};t[\"additionalProp\"+e]=o.notagname,F[O].push(t)}else F[\"additionalProp\"+e]=o;V++}}}return F}if(\"array\"===y){if(!S)return;let n;var K,H;if(r)S.xml=S.xml||(null===(K=e)||void 0===K?void 0:K.xml)||{},S.xml.name=S.xml.name||m.name;if(l()(S.anyOf))n=w()(H=S.anyOf).call(H,(e=>B(L(S,e,t),t,void 0,r)));else if(l()(S.oneOf)){var G;n=w()(G=S.oneOf).call(G,(e=>B(L(S,e,t),t,void 0,r)))}else{if(!(!r||r&&m.wrapped))return B(S,t,void 0,r);n=[B(S,t,void 0,r)]}return n=q(n),r&&m.wrapped?(F[O]=n,A()(f)||F[O].push({_attr:f}),F):n}let Z;if(e&&l()(e.enum))Z=(0,C.AF)(e.enum)[0];else{if(!e)return;if(Z=I(e),\"number\"==typeof Z){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Z=t);let n=e.maximum;null!=n&&(e.exclusiveMaximum&&n--,Z=n)}if(\"string\"==typeof Z&&(null!==e.maxLength&&void 0!==e.maxLength&&(Z=d()(Z).call(Z,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Z.length<e.minLength;)Z+=Z[t++%Z.length]}}if(\"file\"!==y)return r?(F[O]=A()(f)?Z:[{_attr:f},Z],F):Z},$=e=>(e.schema&&(e=e.schema),e.properties&&(e.type=\"object\"),e),q=(e,t,n)=>{const r=B(e,t,n,!0);if(r)return\"string\"==typeof r?r:_()(r,{declaration:!0,indent:\"\\t\"})},U=(e,t,n)=>B(e,t,n,!1),z=(e,t,n)=>[e,x()(t),x()(n)],V=(0,P.Z)(q,z),W=(0,P.Z)(U,z)},8883:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var r=n(29812),o=n(72846),s=n(79431),i=n(81169),a=n(16132);const l=e=>{let{getSystem:t}=e;return{fn:{inferSchema:r.inferSchema,sampleFromSchema:r.sampleFromSchema,sampleFromSchemaGeneric:r.sampleFromSchemaGeneric,createXMLExample:r.createXMLExample,memoizedSampleFromSchema:r.memoizedSampleFromSchema,memoizedCreateXMLExample:r.memoizedCreateXMLExample,getJsonSampleSchema:(0,o.default)(t),getYamlSampleSchema:(0,s.default)(t),getXmlSampleSchema:(0,i.default)(t),getSampleSchema:(0,a.default)(t)}}}},51228:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR_REQUEST:()=>ee,CLEAR_RESPONSE:()=>Q,CLEAR_VALIDATE_PARAMS:()=>te,LOG_REQUEST:()=>X,SET_MUTATED_REQUEST:()=>Y,SET_REQUEST:()=>Z,SET_RESPONSE:()=>G,SET_SCHEME:()=>se,UPDATE_EMPTY_PARAM_INCLUSION:()=>K,UPDATE_JSON:()=>W,UPDATE_OPERATION_META_VALUE:()=>ne,UPDATE_PARAM:()=>J,UPDATE_RESOLVED:()=>re,UPDATE_RESOLVED_SUBTREE:()=>oe,UPDATE_SPEC:()=>z,UPDATE_URL:()=>V,VALIDATE_PARAMS:()=>H,changeConsumesValue:()=>_e,changeParam:()=>ye,changeParamByIdentity:()=>ve,changeProducesValue:()=>je,clearRequest:()=>Te,clearResponse:()=>Ie,clearValidateParams:()=>Se,execute:()=>Ne,executeRequest:()=>Pe,invalidateResolvedSubtreeCache:()=>we,logRequest:()=>Ce,parseToJson:()=>pe,requestResolvedSubtree:()=>ge,resolveSpec:()=>fe,setMutatedRequest:()=>Ae,setRequest:()=>ke,setResponse:()=>Oe,setScheme:()=>Re,updateEmptyParamInclusion:()=>xe,updateJsonSpec:()=>ue,updateResolved:()=>le,updateResolvedSubtree:()=>be,updateSpec:()=>ae,updateUrl:()=>ce,validateParams:()=>Ee});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(96718),l=n.n(a),c=n(24282),u=n.n(c),p=n(2250),h=n.n(p),f=n(6226),d=n.n(f),m=n(14418),g=n.n(m),y=n(3665),v=n.n(y),b=n(11882),w=n.n(b),E=n(86),x=n.n(E),S=n(28222),_=n.n(S),j=n(76986),O=n.n(j),k=n(70586),A=n.n(k),C=n(1272),P=n(43393),N=n(84564),I=n.n(N),T=n(7710),R=n(47037),M=n.n(R),D=n(23279),F=n.n(D),L=n(36968),B=n.n(L),$=n(72700),q=n.n($),U=n(90242);const z=\"spec_update_spec\",V=\"spec_update_url\",W=\"spec_update_json\",J=\"spec_update_param\",K=\"spec_update_empty_param_inclusion\",H=\"spec_validate_param\",G=\"spec_set_response\",Z=\"spec_set_request\",Y=\"spec_set_mutated_request\",X=\"spec_log_request\",Q=\"spec_clear_response\",ee=\"spec_clear_request\",te=\"spec_clear_validate_param\",ne=\"spec_update_operation_meta_value\",re=\"spec_update_resolved\",oe=\"spec_update_resolved_subtree\",se=\"set_scheme\",ie=e=>M()(e)?e:\"\";function ae(e){const t=ie(e).replace(/\\t/g,\"  \");if(\"string\"==typeof e)return{type:z,payload:t}}function le(e){return{type:re,payload:e}}function ce(e){return{type:V,payload:e}}function ue(e){return{type:W,payload:e}}const pe=e=>t=>{let{specActions:n,specSelectors:r,errActions:o}=t,{specStr:s}=r,i=null;try{e=e||s(),o.clear({source:\"parser\"}),i=C.ZP.load(e,{schema:C.A8})}catch(e){return console.error(e),o.newSpecErr({source:\"parser\",level:\"error\",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return i&&\"object\"==typeof i?n.updateJsonSpec(i):{}};let he=!1;const fe=(e,t)=>n=>{let{specActions:r,specSelectors:s,errActions:a,fn:{fetch:c,resolve:u,AST:p={}},getConfigs:h}=n;he||(console.warn(\"specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!\"),he=!0);const{modelPropertyMacro:f,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}=h();void 0===e&&(e=s.specJson()),void 0===t&&(t=s.url());let y=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},v=s.specStr();return u({fetch:c,spec:e,baseDoc:t,modelPropertyMacro:f,parameterMacro:d,requestInterceptor:m,responseInterceptor:g}).then((e=>{let{spec:t,errors:n}=e;if(a.clear({type:\"thrown\"}),o()(n)&&n.length>0){let e=i()(n).call(n,(e=>(console.error(e),e.line=e.fullPath?y(v,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",l()(e,\"message\",{enumerable:!0,value:e.message}),e)));a.newThrownErrBatch(e)}return r.updateResolved(t)}))};let de=[];const me=F()((async()=>{const e=de.system;if(!e)return void console.error(\"debResolveSubtrees: don't have a system to operate on, aborting.\");const{errActions:t,errSelectors:n,fn:{resolveSubtree:r,fetch:s,AST:a={}},specSelectors:c,specActions:p}=e;if(!r)return void console.error(\"Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.\");let f=a.getLineNumberForPath?a.getLineNumberForPath:()=>{};const m=c.specStr(),{modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E}=e.getConfigs();try{var x=await u()(de).call(de,(async(e,a)=>{let{resultMap:u,specWithCurrentSubtrees:p}=await e;const{errors:x,spec:S}=await r(p,a,{baseDoc:c.url(),modelPropertyMacro:y,parameterMacro:b,requestInterceptor:w,responseInterceptor:E});if(n.allErrors().size&&t.clearBy((e=>{var t;return\"thrown\"!==e.get(\"type\")||\"resolver\"!==e.get(\"source\")||!h()(t=e.get(\"fullPath\")).call(t,((e,t)=>e===a[t]||void 0===a[t]))})),o()(x)&&x.length>0){let e=i()(x).call(x,(e=>(e.line=e.fullPath?f(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",l()(e,\"message\",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var _,j;S&&c.isOAS3()&&\"components\"===a[0]&&\"securitySchemes\"===a[1]&&await d().all(i()(_=g()(j=v()(S)).call(j,(e=>\"openIdConnect\"===e.type))).call(_,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:w,responseInterceptor:E};try{const n=await s(t);n instanceof Error||n.status>=400?console.error(n.statusText+\" \"+t.url):e.openIdConnectData=JSON.parse(n.text)}catch(e){console.error(e)}})));return B()(u,a,S),p=q()(a,S,p),{resultMap:u,specWithCurrentSubtrees:p}}),d().resolve({resultMap:(c.specResolvedSubtree([])||(0,P.Map)()).toJS(),specWithCurrentSubtrees:c.specJS()}));delete de.system,de=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],x.resultMap)}),35),ge=e=>t=>{var n;w()(n=i()(de).call(de,(e=>e.join(\"@@\")))).call(n,e.join(\"@@\"))>-1||(de.push(e),de.system=t,me())};function ye(e,t,n,r,o){return{type:J,payload:{path:e,value:r,paramName:t,paramIn:n,isXml:o}}}function ve(e,t,n,r){return{type:J,payload:{path:e,param:t,value:n,isXml:r}}}const be=(e,t)=>({type:oe,payload:{path:e,value:t}}),we=()=>({type:oe,payload:{path:[],value:(0,P.Map)()}}),Ee=(e,t)=>({type:H,payload:{pathMethod:e,isOAS3:t}}),xe=(e,t,n,r)=>({type:K,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:r}});function Se(e){return{type:te,payload:{pathMethod:e}}}function _e(e,t){return{type:ne,payload:{path:e,value:t,key:\"consumes_value\"}}}function je(e,t){return{type:ne,payload:{path:e,value:t,key:\"produces_value\"}}}const Oe=(e,t,n)=>({payload:{path:e,method:t,res:n},type:G}),ke=(e,t,n)=>({payload:{path:e,method:t,req:n},type:Z}),Ae=(e,t,n)=>({payload:{path:e,method:t,req:n},type:Y}),Ce=e=>({payload:e,type:X}),Pe=e=>t=>{let{fn:n,specActions:r,specSelectors:s,getConfigs:a,oas3Selectors:l}=t,{pathName:c,method:u,operation:p}=e,{requestInterceptor:h,responseInterceptor:f}=a(),d=p.toJS();var m,y;p&&p.get(\"parameters\")&&x()(m=g()(y=p.get(\"parameters\")).call(y,(e=>e&&!0===e.get(\"allowEmptyValue\")))).call(m,(t=>{if(s.parameterInclusionSettingFor([c,u],t.get(\"name\"),t.get(\"in\"))){e.parameters=e.parameters||{};const n=(0,U.cz)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get(\"name\")]=\"\")}}));if(e.contextUrl=I()(s.url()).toString(),d&&d.operationId?e.operationId=d.operationId:d&&c&&u&&(e.operationId=n.opId(d,c,u)),s.isOAS3()){const t=`${c}:${u}`;e.server=l.selectedServer(t)||l.selectedServer();const n=l.serverVariables({server:e.server,namespace:t}).toJS(),r=l.serverVariables({server:e.server}).toJS();e.serverVariables=_()(n).length?n:r,e.requestContentType=l.requestContentType(c,u),e.responseContentType=l.responseContentType(c,u)||\"*/*\";const s=l.requestBodyValue(c,u),a=l.requestBodyInclusionSetting(c,u);var v;if(s&&s.toJS)e.requestBody=g()(v=i()(s).call(s,(e=>P.Map.isMap(e)?e.get(\"value\"):e))).call(v,((e,t)=>(o()(e)?0!==e.length:!(0,U.O2)(e))||a.get(t))).toJS();else e.requestBody=s}let b=O()({},e);b=n.buildRequest(b),r.setRequest(e.pathName,e.method,b);e.requestInterceptor=async t=>{let n=await h.apply(void 0,[t]),o=O()({},n);return r.setMutatedRequest(e.pathName,e.method,o),n},e.responseInterceptor=f;const w=A()();return n.execute(e).then((t=>{t.duration=A()()-w,r.setResponse(e.pathName,e.method,t)})).catch((t=>{\"Failed to fetch\"===t.message&&(t.name=\"\",t.message='**Failed to fetch.**  \\n**Possible Reasons:** \\n  - CORS \\n  - Network Failure \\n  - URL scheme must be \"http\" or \"https\" for CORS request.'),r.setResponse(e.pathName,e.method,{error:!0,err:(0,T.serializeError)(t)})}))},Ne=function(){let{path:e,method:t,...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{let{fn:{fetch:o},specSelectors:s,specActions:i}=r,a=s.specJsonWithResolvedSubtrees().toJS(),l=s.operationScheme(e,t),{requestContentType:c,responseContentType:u}=s.contentTypeValues([e,t]).toJS(),p=/xml/i.test(c),h=s.parameterValues([e,t],p).toJS();return i.executeRequest({...n,fetch:o,spec:a,pathName:e,method:t,parameters:h,requestContentType:c,scheme:l,responseContentType:u})}};function Ie(e,t){return{type:Q,payload:{path:e,method:t}}}function Te(e,t){return{type:ee,payload:{path:e,method:t}}}function Re(e,t,n){return{type:se,payload:{scheme:e,path:t,method:n}}}},37038:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var r=n(20032),o=n(51228),s=n(33881),i=n(77508);function a(){return{statePlugins:{spec:{wrapActions:i,reducers:r.default,actions:o,selectors:s}}}}},20032:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var r=n(24282),o=n.n(r),s=n(97606),i=n.n(s),a=n(76986),l=n.n(a),c=n(43393),u=n(90242),p=n(27504),h=n(33881),f=n(51228);const d={[f.UPDATE_SPEC]:(e,t)=>\"string\"==typeof t.payload?e.set(\"spec\",t.payload):e,[f.UPDATE_URL]:(e,t)=>e.set(\"url\",t.payload+\"\"),[f.UPDATE_JSON]:(e,t)=>e.set(\"json\",(0,u.oG)(t.payload)),[f.UPDATE_RESOLVED]:(e,t)=>e.setIn([\"resolved\"],(0,u.oG)(t.payload)),[f.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:n,path:r}=t.payload;return e.setIn([\"resolvedSubtrees\",...r],(0,u.oG)(n))},[f.UPDATE_PARAM]:(e,t)=>{let{payload:n}=t,{path:r,paramName:o,paramIn:s,param:i,value:a,isXml:l}=n,c=i?(0,u.V9)(i):`${s}.${o}`;const p=l?\"value_xml\":\"value\";return e.setIn([\"meta\",\"paths\",...r,\"parameters\",c,p],a)},[f.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:n}=t,{pathMethod:r,paramName:o,paramIn:s,includeEmptyValue:i}=n;if(!o||!s)return console.warn(\"Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey.\"),e;const a=`${s}.${o}`;return e.setIn([\"meta\",\"paths\",...r,\"parameter_inclusions\",a],i)},[f.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n,isOAS3:r}}=t;const s=(0,h.specJsonWithResolvedSubtrees)(e).getIn([\"paths\",...n]),i=(0,h.parameterValues)(e,n).toJS();return e.updateIn([\"meta\",\"paths\",...n,\"parameters\"],(0,c.fromJS)({}),(t=>{var a;return o()(a=s.get(\"parameters\",(0,c.List)())).call(a,((t,o)=>{const s=(0,u.cz)(o,i),a=(0,h.parameterInclusionSettingFor)(e,n,o.get(\"name\"),o.get(\"in\")),l=(0,u.Ik)(o,s,{bypassRequiredCheck:a,isOAS3:r});return t.setIn([(0,u.V9)(o),\"errors\"],(0,c.fromJS)(l))}),t)}))},[f.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n}}=t;return e.updateIn([\"meta\",\"paths\",...n,\"parameters\"],(0,c.fromJS)([]),(e=>i()(e).call(e,(e=>e.set(\"errors\",(0,c.fromJS)([]))))))},[f.SET_RESPONSE]:(e,t)=>{let n,{payload:{res:r,path:o,method:s}}=t;n=r.error?l()({error:!0,name:r.err.name,message:r.err.message,statusCode:r.err.statusCode},r.err.response):r,n.headers=n.headers||{};let i=e.setIn([\"responses\",o,s],(0,u.oG)(n));return p.Z.Blob&&r.data instanceof p.Z.Blob&&(i=i.setIn([\"responses\",o,s,\"text\"],r.data)),i},[f.SET_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn([\"requests\",r,o],(0,u.oG)(n))},[f.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:n,path:r,method:o}}=t;return e.setIn([\"mutatedRequests\",r,o],(0,u.oG)(n))},[f.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:n,value:r,key:o}}=t,s=[\"paths\",...n],i=[\"meta\",\"paths\",...n];return e.getIn([\"json\",...s])||e.getIn([\"resolved\",...s])||e.getIn([\"resolvedSubtrees\",...s])?e.setIn([...i,o],(0,c.fromJS)(r)):e},[f.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn([\"responses\",n,r])},[f.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:n,method:r}}=t;return e.deleteIn([\"requests\",n,r])},[f.SET_SCHEME]:(e,t)=>{let{payload:{scheme:n,path:r,method:o}}=t;return r&&o?e.setIn([\"scheme\",r,o],n):r||o?void 0:e.setIn([\"scheme\",\"_defaultScheme\"],n)}}},33881:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{allowTryItOutFor:()=>fe,basePath:()=>Q,canExecuteScheme:()=>Ae,consumes:()=>K,consumesOptionsFor:()=>Oe,contentTypeValues:()=>Se,currentProducesFor:()=>_e,definitions:()=>X,externalDocs:()=>q,findDefinition:()=>Y,getOAS3RequiredRequestBodyContentType:()=>Ne,getParameter:()=>ve,hasHost:()=>be,host:()=>ee,info:()=>$,isMediaTypeSchemaPropertiesEqual:()=>Ie,isOAS3:()=>B,lastError:()=>A,mutatedRequestFor:()=>he,mutatedRequests:()=>ce,operationScheme:()=>ke,operationWithMeta:()=>ye,operations:()=>J,operationsWithRootInherited:()=>ne,operationsWithTags:()=>se,parameterInclusionSettingFor:()=>me,parameterValues:()=>we,parameterWithMeta:()=>ge,parameterWithMetaByIdentity:()=>de,parametersIncludeIn:()=>Ee,parametersIncludeType:()=>xe,paths:()=>V,produces:()=>H,producesOptionsFor:()=>je,requestFor:()=>pe,requests:()=>le,responseFor:()=>ue,responses:()=>ae,schemes:()=>te,security:()=>G,securityDefinitions:()=>Z,semver:()=>z,spec:()=>L,specJS:()=>T,specJson:()=>I,specJsonWithResolvedSubtrees:()=>F,specResolved:()=>R,specResolvedSubtree:()=>M,specSource:()=>N,specStr:()=>P,tagDetails:()=>oe,taggedOperations:()=>ie,tags:()=>re,url:()=>C,validOperationMethods:()=>W,validateBeforeExecute:()=>Pe,validationErrors:()=>Ce,version:()=>U});var r=n(24278),o=n.n(r),s=n(86),i=n.n(s),a=n(11882),l=n.n(a),c=n(97606),u=n.n(c),p=n(14418),h=n.n(p),f=n(51679),d=n.n(f),m=n(24282),g=n.n(m),y=n(2578),v=n.n(y),b=n(92039),w=n.n(b),E=n(58309),x=n.n(E),S=n(20573),_=n(90242),j=n(43393);const O=[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],k=e=>e||(0,j.Map)(),A=(0,S.P1)(k,(e=>e.get(\"lastError\"))),C=(0,S.P1)(k,(e=>e.get(\"url\"))),P=(0,S.P1)(k,(e=>e.get(\"spec\")||\"\")),N=(0,S.P1)(k,(e=>e.get(\"specSource\")||\"not-editor\")),I=(0,S.P1)(k,(e=>e.get(\"json\",(0,j.Map)()))),T=(0,S.P1)(I,(e=>e.toJS())),R=(0,S.P1)(k,(e=>e.get(\"resolved\",(0,j.Map)()))),M=(e,t)=>e.getIn([\"resolvedSubtrees\",...t],void 0),D=(e,t)=>j.Map.isMap(e)&&j.Map.isMap(t)?t.get(\"$$ref\")?t:(0,j.OrderedMap)().mergeWith(D,e,t):t,F=(0,S.P1)(k,(e=>(0,j.OrderedMap)().mergeWith(D,e.get(\"json\"),e.get(\"resolvedSubtrees\")))),L=e=>I(e),B=(0,S.P1)(L,(()=>!1)),$=(0,S.P1)(L,(e=>Te(e&&e.get(\"info\")))),q=(0,S.P1)(L,(e=>Te(e&&e.get(\"externalDocs\")))),U=(0,S.P1)($,(e=>e&&e.get(\"version\"))),z=(0,S.P1)(U,(e=>{var t;return o()(t=/v?([0-9]*)\\.([0-9]*)\\.([0-9]*)/i.exec(e)).call(t,1)})),V=(0,S.P1)(F,(e=>e.get(\"paths\"))),W=(0,S.P1)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\"])),J=(0,S.P1)(V,(e=>{if(!e||e.size<1)return(0,j.List)();let t=(0,j.List)();return e&&i()(e)?(i()(e).call(e,((e,n)=>{if(!e||!i()(e))return{};i()(e).call(e,((e,r)=>{l()(O).call(O,r)<0||(t=t.push((0,j.fromJS)({path:n,method:r,operation:e,id:`${r}-${n}`})))}))})),t):(0,j.List)()})),K=(0,S.P1)(L,(e=>(0,j.Set)(e.get(\"consumes\")))),H=(0,S.P1)(L,(e=>(0,j.Set)(e.get(\"produces\")))),G=(0,S.P1)(L,(e=>e.get(\"security\",(0,j.List)()))),Z=(0,S.P1)(L,(e=>e.get(\"securityDefinitions\"))),Y=(e,t)=>{const n=e.getIn([\"resolvedSubtrees\",\"definitions\",t],null),r=e.getIn([\"json\",\"definitions\",t],null);return n||r||null},X=(0,S.P1)(L,(e=>{const t=e.get(\"definitions\");return j.Map.isMap(t)?t:(0,j.Map)()})),Q=(0,S.P1)(L,(e=>e.get(\"basePath\"))),ee=(0,S.P1)(L,(e=>e.get(\"host\"))),te=(0,S.P1)(L,(e=>e.get(\"schemes\",(0,j.Map)()))),ne=(0,S.P1)(J,K,H,((e,t,n)=>u()(e).call(e,(e=>e.update(\"operation\",(e=>{if(e){if(!j.Map.isMap(e))return;return e.withMutations((e=>(e.get(\"consumes\")||e.update(\"consumes\",(e=>(0,j.Set)(e).merge(t))),e.get(\"produces\")||e.update(\"produces\",(e=>(0,j.Set)(e).merge(n))),e)))}return(0,j.Map)()})))))),re=(0,S.P1)(L,(e=>{const t=e.get(\"tags\",(0,j.List)());return j.List.isList(t)?h()(t).call(t,(e=>j.Map.isMap(e))):(0,j.List)()})),oe=(e,t)=>{var n;let r=re(e)||(0,j.List)();return d()(n=h()(r).call(r,j.Map.isMap)).call(n,(e=>e.get(\"name\")===t),(0,j.Map)())},se=(0,S.P1)(ne,re,((e,t)=>g()(e).call(e,((e,t)=>{let n=(0,j.Set)(t.getIn([\"operation\",\"tags\"]));return n.count()<1?e.update(\"default\",(0,j.List)(),(e=>e.push(t))):g()(n).call(n,((e,n)=>e.update(n,(0,j.List)(),(e=>e.push(t)))),e)}),g()(t).call(t,((e,t)=>e.set(t.get(\"name\"),(0,j.List)())),(0,j.OrderedMap)())))),ie=e=>t=>{var n;let{getConfigs:r}=t,{tagsSorter:o,operationsSorter:s}=r();return u()(n=se(e).sortBy(((e,t)=>t),((e,t)=>{let n=\"function\"==typeof o?o:_.wh.tagsSorter[o];return n?n(e,t):null}))).call(n,((t,n)=>{let r=\"function\"==typeof s?s:_.wh.operationsSorter[s],o=r?v()(t).call(t,r):t;return(0,j.Map)({tagDetails:oe(e,n),operations:o})}))},ae=(0,S.P1)(k,(e=>e.get(\"responses\",(0,j.Map)()))),le=(0,S.P1)(k,(e=>e.get(\"requests\",(0,j.Map)()))),ce=(0,S.P1)(k,(e=>e.get(\"mutatedRequests\",(0,j.Map)()))),ue=(e,t,n)=>ae(e).getIn([t,n],null),pe=(e,t,n)=>le(e).getIn([t,n],null),he=(e,t,n)=>ce(e).getIn([t,n],null),fe=()=>!0,de=(e,t,n)=>{const r=F(e).getIn([\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),o=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),s=u()(r).call(r,(e=>{const t=o.get(`${n.get(\"in\")}.${n.get(\"name\")}`),r=o.get(`${n.get(\"in\")}.${n.get(\"name\")}.hash-${n.hashCode()}`);return(0,j.OrderedMap)().merge(e,t,r)}));return d()(s).call(s,(e=>e.get(\"in\")===n.get(\"in\")&&e.get(\"name\")===n.get(\"name\")),(0,j.OrderedMap)())},me=(e,t,n,r)=>{const o=`${r}.${n}`;return e.getIn([\"meta\",\"paths\",...t,\"parameter_inclusions\",o],!1)},ge=(e,t,n,r)=>{const o=F(e).getIn([\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),s=d()(o).call(o,(e=>e.get(\"in\")===r&&e.get(\"name\")===n),(0,j.OrderedMap)());return de(e,t,s)},ye=(e,t,n)=>{var r;const o=F(e).getIn([\"paths\",t,n],(0,j.OrderedMap)()),s=e.getIn([\"meta\",\"paths\",t,n],(0,j.OrderedMap)()),i=u()(r=o.get(\"parameters\",(0,j.List)())).call(r,(r=>de(e,[t,n],r)));return(0,j.OrderedMap)().merge(o,s).set(\"parameters\",i)};function ve(e,t,n,r){t=t||[];let o=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.fromJS)([]));return d()(o).call(o,(e=>j.Map.isMap(e)&&e.get(\"name\")===n&&e.get(\"in\")===r))||(0,j.Map)()}const be=(0,S.P1)(L,(e=>{const t=e.get(\"host\");return\"string\"==typeof t&&t.length>0&&\"/\"!==t[0]}));function we(e,t,n){t=t||[];let r=ye(e,...t).get(\"parameters\",(0,j.List)());return g()(r).call(r,((e,t)=>{let r=n&&\"body\"===t.get(\"in\")?t.get(\"value_xml\"):t.get(\"value\");return e.set((0,_.V9)(t,{allowHashes:!1}),r)}),(0,j.fromJS)({}))}function Ee(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(j.List.isList(e))return w()(e).call(e,(e=>j.Map.isMap(e)&&e.get(\"in\")===t))}function xe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(j.List.isList(e))return w()(e).call(e,(e=>j.Map.isMap(e)&&e.get(\"type\")===t))}function Se(e,t){t=t||[];let n=F(e).getIn([\"paths\",...t],(0,j.fromJS)({})),r=e.getIn([\"meta\",\"paths\",...t],(0,j.fromJS)({})),o=_e(e,t);const s=n.get(\"parameters\")||new j.List,i=r.get(\"consumes_value\")?r.get(\"consumes_value\"):xe(s,\"file\")?\"multipart/form-data\":xe(s,\"formData\")?\"application/x-www-form-urlencoded\":void 0;return(0,j.fromJS)({requestContentType:i,responseContentType:o})}function _e(e,t){t=t||[];const n=F(e).getIn([\"paths\",...t],null);if(null===n)return;const r=e.getIn([\"meta\",\"paths\",...t,\"produces_value\"],null),o=n.getIn([\"produces\",0],null);return r||o||\"application/json\"}function je(e,t){t=t||[];const n=F(e),r=n.getIn([\"paths\",...t],null);if(null===r)return;const[o]=t,s=r.get(\"produces\",null),i=n.getIn([\"paths\",o,\"produces\"],null),a=n.getIn([\"produces\"],null);return s||i||a}function Oe(e,t){t=t||[];const n=F(e),r=n.getIn([\"paths\",...t],null);if(null===r)return;const[o]=t,s=r.get(\"consumes\",null),i=n.getIn([\"paths\",o,\"consumes\"],null),a=n.getIn([\"consumes\"],null);return s||i||a}const ke=(e,t,n)=>{let r=e.get(\"url\").match(/^([a-z][a-z0-9+\\-.]*):/),o=x()(r)?r[1]:null;return e.getIn([\"scheme\",t,n])||e.getIn([\"scheme\",\"_defaultScheme\"])||o||\"\"},Ae=(e,t,n)=>{var r;return l()(r=[\"http\",\"https\"]).call(r,ke(e,t,n))>-1},Ce=(e,t)=>{t=t||[];let n=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.fromJS)([]));const r=[];return i()(n).call(n,(e=>{let t=e.get(\"errors\");t&&t.count()&&i()(t).call(t,(e=>r.push(e)))})),r},Pe=(e,t)=>0===Ce(e,t).length,Ne=(e,t)=>{var n;let r={requestBody:!1,requestContentType:{}},o=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\"],(0,j.fromJS)([]));return o.size<1||(o.getIn([\"required\"])&&(r.requestBody=o.getIn([\"required\"])),i()(n=o.getIn([\"content\"]).entrySeq()).call(n,(e=>{const t=e[0];if(e[1].getIn([\"schema\",\"required\"])){const n=e[1].getIn([\"schema\",\"required\"]).toJS();r.requestContentType[t]=n}}))),r},Ie=(e,t,n,r)=>{if((n||r)&&n===r)return!0;let o=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\",\"content\"],(0,j.fromJS)([]));if(o.size<2||!n||!r)return!1;let s=o.getIn([n,\"schema\",\"properties\"],(0,j.fromJS)([])),i=o.getIn([r,\"schema\",\"properties\"],(0,j.fromJS)([]));return!!s.equals(i)};function Te(e){return j.Map.isMap(e)?e:new j.Map}},77508:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{executeRequest:()=>p,updateJsonSpec:()=>u,updateSpec:()=>c,validateParams:()=>h});var r=n(28222),o=n.n(r),s=n(86),i=n.n(s),a=n(27361),l=n.n(a);const c=(e,t)=>{let{specActions:n}=t;return function(){e(...arguments),n.parseToJson(...arguments)}},u=(e,t)=>{let{specActions:n}=t;return function(){for(var t=arguments.length,r=new Array(t),s=0;s<t;s++)r[s]=arguments[s];e(...r),n.invalidateResolvedSubtreeCache();const[a]=r,c=l()(a,[\"paths\"])||{},u=o()(c);i()(u).call(u,(e=>{l()(c,[e]).$ref&&n.requestResolvedSubtree([\"paths\",e])})),n.requestResolvedSubtree([\"components\",\"securitySchemes\"])}},p=(e,t)=>{let{specActions:n}=t;return t=>(n.logRequest(t),e(t))},h=(e,t)=>{let{specSelectors:n}=t;return t=>e(t,n.isOAS3())}},34852:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{loaded:()=>r});const r=(e,t)=>function(){e(...arguments);const n=t.getConfigs().withCredentials;void 0!==n&&(t.fn.fetch.withCredentials=\"string\"==typeof n?\"true\"===n:!!n)}},79934:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>BE});var r={};n.r(r),n.d(r,{JsonPatchError:()=>j,_areEquals:()=>M,applyOperation:()=>P,applyPatch:()=>N,applyReducer:()=>I,deepClone:()=>O,getValueByPointer:()=>C,validate:()=>R,validator:()=>T});var o={};n.r(o),n.d(o,{compare:()=>z,generate:()=>q,observe:()=>$,unobserve:()=>B});var s={};n.r(s),n.d(s,{hasElementSourceMap:()=>Cs,includesClasses:()=>Ns,includesSymbols:()=>Ps,isAnnotationElement:()=>_s,isArrayElement:()=>ws,isBooleanElement:()=>vs,isCommentElement:()=>js,isElement:()=>ds,isLinkElement:()=>xs,isMemberElement:()=>Es,isNullElement:()=>ys,isNumberElement:()=>gs,isObjectElement:()=>bs,isParseResultElement:()=>Os,isPrimitiveElement:()=>As,isRefElement:()=>Ss,isSourceMapElement:()=>ks,isStringElement:()=>ms});var i={};n.r(i),n.d(i,{isJSONReferenceElement:()=>cc,isJSONSchemaElement:()=>lc,isLinkDescriptionElement:()=>pc,isMediaElement:()=>uc});var a={};n.r(a),n.d(a,{isOpenApi3_0LikeElement:()=>$c,isOpenApiExtension:()=>Kc,isParameterLikeElement:()=>qc,isReferenceLikeElement:()=>Uc,isRequestBodyLikeElement:()=>zc,isResponseLikeElement:()=>Vc,isServerLikeElement:()=>Wc,isTagLikeElement:()=>Jc});var l={};n.r(l),n.d(l,{isBooleanJsonSchemaElement:()=>ap,isCallbackElement:()=>Lu,isComponentsElement:()=>Bu,isContactElement:()=>$u,isExampleElement:()=>qu,isExternalDocumentationElement:()=>Uu,isHeaderElement:()=>zu,isInfoElement:()=>Vu,isLicenseElement:()=>Wu,isLinkElement:()=>Ju,isLinkElementExternal:()=>Ku,isMediaTypeElement:()=>pp,isOpenApi3_0Element:()=>Gu,isOpenapiElement:()=>Hu,isOperationElement:()=>Zu,isParameterElement:()=>Yu,isPathItemElement:()=>Xu,isPathItemElementExternal:()=>Qu,isPathsElement:()=>ep,isReferenceElement:()=>tp,isReferenceElementExternal:()=>np,isRequestBodyElement:()=>rp,isResponseElement:()=>op,isResponsesElement:()=>sp,isSchemaElement:()=>ip,isSecurityRequirementElement:()=>lp,isServerElement:()=>cp,isServerVariableElement:()=>up});var c={};n.r(c),n.d(c,{isBooleanJsonSchemaElement:()=>Kg,isCallbackElement:()=>Sg,isComponentsElement:()=>_g,isContactElement:()=>jg,isExampleElement:()=>Og,isExternalDocumentationElement:()=>kg,isHeaderElement:()=>Ag,isInfoElement:()=>Cg,isJsonSchemaDialectElement:()=>Pg,isLicenseElement:()=>Ng,isLinkElement:()=>Ig,isLinkElementExternal:()=>Tg,isMediaTypeElement:()=>Yg,isOpenApi3_1Element:()=>Mg,isOpenapiElement:()=>Rg,isOperationElement:()=>Dg,isParameterElement:()=>Fg,isPathItemElement:()=>Lg,isPathItemElementExternal:()=>Bg,isPathsElement:()=>$g,isReferenceElement:()=>qg,isReferenceElementExternal:()=>Ug,isRequestBodyElement:()=>zg,isResponseElement:()=>Vg,isResponsesElement:()=>Wg,isSchemaElement:()=>Jg,isSecurityRequirementElement:()=>Hg,isServerElement:()=>Gg,isServerVariableElement:()=>Zg});var u={};n.r(u),n.d(u,{cookie:()=>EE,header:()=>wE,path:()=>yE,query:()=>vE});var p,h=n(58826),f=n.n(h),d=(p=function(e,t){return p=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},p(e,t)},function(e,t){function n(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),m=Object.prototype.hasOwnProperty;function g(e,t){return m.call(e,t)}function y(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n<t.length;n++)t[n]=\"\"+n;return t}if(Object.keys)return Object.keys(e);var r=[];for(var o in e)g(e,o)&&r.push(o);return r}function v(e){switch(typeof e){case\"object\":return JSON.parse(JSON.stringify(e));case\"undefined\":return null;default:return e}}function b(e){for(var t,n=0,r=e.length;n<r;){if(!((t=e.charCodeAt(n))>=48&&t<=57))return!1;n++}return!0}function w(e){return-1===e.indexOf(\"/\")&&-1===e.indexOf(\"~\")?e:e.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")}function E(e){return e.replace(/~1/g,\"/\").replace(/~0/g,\"~\")}function x(e){if(void 0===e)return!0;if(e)if(Array.isArray(e)){for(var t=0,n=e.length;t<n;t++)if(x(e[t]))return!0}else if(\"object\"==typeof e)for(var r=y(e),o=r.length,s=0;s<o;s++)if(x(e[r[s]]))return!0;return!1}function S(e,t){var n=[e];for(var r in t){var o=\"object\"==typeof t[r]?JSON.stringify(t[r],null,2):t[r];void 0!==o&&n.push(r+\": \"+o)}return n.join(\"\\n\")}var _=function(e){function t(t,n,r,o,s){var i=this.constructor,a=e.call(this,S(t,{name:n,index:r,operation:o,tree:s}))||this;return a.name=n,a.index=r,a.operation=o,a.tree=s,Object.setPrototypeOf(a,i.prototype),a.message=S(t,{name:n,index:r,operation:o,tree:s}),a}return d(t,e),t}(Error),j=_,O=v,k={add:function(e,t,n){return e[t]=this.value,{newDocument:n}},remove:function(e,t,n){var r=e[t];return delete e[t],{newDocument:n,removed:r}},replace:function(e,t,n){var r=e[t];return e[t]=this.value,{newDocument:n,removed:r}},move:function(e,t,n){var r=C(n,this.path);r&&(r=v(r));var o=P(n,{op:\"remove\",path:this.from}).removed;return P(n,{op:\"add\",path:this.path,value:o}),{newDocument:n,removed:r}},copy:function(e,t,n){var r=C(n,this.from);return P(n,{op:\"add\",path:this.path,value:v(r)}),{newDocument:n}},test:function(e,t,n){return{newDocument:n,test:M(e[t],this.value)}},_get:function(e,t,n){return this.value=e[t],{newDocument:n}}},A={add:function(e,t,n){return b(t)?e.splice(t,0,this.value):e[t]=this.value,{newDocument:n,index:t}},remove:function(e,t,n){return{newDocument:n,removed:e.splice(t,1)[0]}},replace:function(e,t,n){var r=e[t];return e[t]=this.value,{newDocument:n,removed:r}},move:k.move,copy:k.copy,test:k.test,_get:k._get};function C(e,t){if(\"\"==t)return e;var n={op:\"_get\",path:t};return P(e,n),n.value}function P(e,t,n,r,o,s){if(void 0===n&&(n=!1),void 0===r&&(r=!0),void 0===o&&(o=!0),void 0===s&&(s=0),n&&(\"function\"==typeof n?n(t,0,e,t.path):T(t,0)),\"\"===t.path){var i={newDocument:e};if(\"add\"===t.op)return i.newDocument=t.value,i;if(\"replace\"===t.op)return i.newDocument=t.value,i.removed=e,i;if(\"move\"===t.op||\"copy\"===t.op)return i.newDocument=C(e,t.from),\"move\"===t.op&&(i.removed=e),i;if(\"test\"===t.op){if(i.test=M(e,t.value),!1===i.test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",s,t,e);return i.newDocument=e,i}if(\"remove\"===t.op)return i.removed=e,i.newDocument=null,i;if(\"_get\"===t.op)return t.value=e,i;if(n)throw new j(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",s,t,e);return i}r||(e=v(e));var a=(t.path||\"\").split(\"/\"),l=e,c=1,u=a.length,p=void 0,h=void 0,f=void 0;for(f=\"function\"==typeof n?n:T;;){if((h=a[c])&&-1!=h.indexOf(\"~\")&&(h=E(h)),o&&(\"__proto__\"==h||\"prototype\"==h&&c>0&&\"constructor\"==a[c-1]))throw new TypeError(\"JSON-Patch: modifying `__proto__` or `constructor/prototype` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README\");if(n&&void 0===p&&(void 0===l[h]?p=a.slice(0,c).join(\"/\"):c==u-1&&(p=t.path),void 0!==p&&f(t,0,e,p)),c++,Array.isArray(l)){if(\"-\"===h)h=l.length;else{if(n&&!b(h))throw new j(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\",\"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\",s,t,e);b(h)&&(h=~~h)}if(c>=u){if(n&&\"add\"===t.op&&h>l.length)throw new j(\"The specified index MUST NOT be greater than the number of elements in the array\",\"OPERATION_VALUE_OUT_OF_BOUNDS\",s,t,e);if(!1===(i=A[t.op].call(t,l,h,e)).test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",s,t,e);return i}}else if(c>=u){if(!1===(i=k[t.op].call(t,l,h,e)).test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",s,t,e);return i}if(l=l[h],n&&c<u&&(!l||\"object\"!=typeof l))throw new j(\"Cannot perform operation at the desired path\",\"OPERATION_PATH_UNRESOLVABLE\",s,t,e)}}function N(e,t,n,r,o){if(void 0===r&&(r=!0),void 0===o&&(o=!0),n&&!Array.isArray(t))throw new j(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");r||(e=v(e));for(var s=new Array(t.length),i=0,a=t.length;i<a;i++)s[i]=P(e,t[i],n,!0,o,i),e=s[i].newDocument;return s.newDocument=e,s}function I(e,t,n){var r=P(e,t);if(!1===r.test)throw new j(\"Test operation failed\",\"TEST_OPERATION_FAILED\",n,t,e);return r.newDocument}function T(e,t,n,r){if(\"object\"!=typeof e||null===e||Array.isArray(e))throw new j(\"Operation is not an object\",\"OPERATION_NOT_AN_OBJECT\",t,e,n);if(!k[e.op])throw new j(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",t,e,n);if(\"string\"!=typeof e.path)throw new j(\"Operation `path` property is not a string\",\"OPERATION_PATH_INVALID\",t,e,n);if(0!==e.path.indexOf(\"/\")&&e.path.length>0)throw new j('Operation `path` property must start with \"/\"',\"OPERATION_PATH_INVALID\",t,e,n);if((\"move\"===e.op||\"copy\"===e.op)&&\"string\"!=typeof e.from)throw new j(\"Operation `from` property is not present (applicable in `move` and `copy` operations)\",\"OPERATION_FROM_REQUIRED\",t,e,n);if((\"add\"===e.op||\"replace\"===e.op||\"test\"===e.op)&&void 0===e.value)throw new j(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_REQUIRED\",t,e,n);if((\"add\"===e.op||\"replace\"===e.op||\"test\"===e.op)&&x(e.value))throw new j(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED\",t,e,n);if(n)if(\"add\"==e.op){var o=e.path.split(\"/\").length,s=r.split(\"/\").length;if(o!==s+1&&o!==s)throw new j(\"Cannot perform an `add` operation at the desired path\",\"OPERATION_PATH_CANNOT_ADD\",t,e,n)}else if(\"replace\"===e.op||\"remove\"===e.op||\"_get\"===e.op){if(e.path!==r)throw new j(\"Cannot perform the operation at a path that does not exist\",\"OPERATION_PATH_UNRESOLVABLE\",t,e,n)}else if(\"move\"===e.op||\"copy\"===e.op){var i=R([{op:\"_get\",path:e.from,value:void 0}],n);if(i&&\"OPERATION_PATH_UNRESOLVABLE\"===i.name)throw new j(\"Cannot perform the operation from a path that does not exist\",\"OPERATION_FROM_UNRESOLVABLE\",t,e,n)}}function R(e,t,n){try{if(!Array.isArray(e))throw new j(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");if(t)N(v(t),v(e),n||!0);else{n=n||T;for(var r=0;r<e.length;r++)n(e[r],r,t,void 0)}}catch(e){if(e instanceof j)return e;throw e}}function M(e,t){if(e===t)return!0;if(e&&t&&\"object\"==typeof e&&\"object\"==typeof t){var n,r,o,s=Array.isArray(e),i=Array.isArray(t);if(s&&i){if((r=e.length)!=t.length)return!1;for(n=r;0!=n--;)if(!M(e[n],t[n]))return!1;return!0}if(s!=i)return!1;var a=Object.keys(e);if((r=a.length)!==Object.keys(t).length)return!1;for(n=r;0!=n--;)if(!t.hasOwnProperty(a[n]))return!1;for(n=r;0!=n--;)if(!M(e[o=a[n]],t[o]))return!1;return!0}return e!=e&&t!=t}var D=new WeakMap,F=function(e){this.observers=new Map,this.obj=e},L=function(e,t){this.callback=e,this.observer=t};function B(e,t){t.unobserve()}function $(e,t){var n,r=function(e){return D.get(e)}(e);if(r){var o=function(e,t){return e.observers.get(t)}(r,t);n=o&&o.observer}else r=new F(e),D.set(e,r);if(n)return n;if(n={},r.value=v(e),t){n.callback=t,n.next=null;var s=function(){q(n)},i=function(){clearTimeout(n.next),n.next=setTimeout(s)};\"undefined\"!=typeof window&&(window.addEventListener(\"mouseup\",i),window.addEventListener(\"keyup\",i),window.addEventListener(\"mousedown\",i),window.addEventListener(\"keydown\",i),window.addEventListener(\"change\",i))}return n.patches=[],n.object=e,n.unobserve=function(){q(n),clearTimeout(n.next),function(e,t){e.observers.delete(t.callback)}(r,n),\"undefined\"!=typeof window&&(window.removeEventListener(\"mouseup\",i),window.removeEventListener(\"keyup\",i),window.removeEventListener(\"mousedown\",i),window.removeEventListener(\"keydown\",i),window.removeEventListener(\"change\",i))},r.observers.set(t,new L(t,n)),n}function q(e,t){void 0===t&&(t=!1);var n=D.get(e.object);U(n.value,e.object,e.patches,\"\",t),e.patches.length&&N(n.value,e.patches);var r=e.patches;return r.length>0&&(e.patches=[],e.callback&&e.callback(r)),r}function U(e,t,n,r,o){if(t!==e){\"function\"==typeof t.toJSON&&(t=t.toJSON());for(var s=y(t),i=y(e),a=!1,l=i.length-1;l>=0;l--){var c=e[p=i[l]];if(!g(t,p)||void 0===t[p]&&void 0!==c&&!1===Array.isArray(t))Array.isArray(e)===Array.isArray(t)?(o&&n.push({op:\"test\",path:r+\"/\"+w(p),value:v(c)}),n.push({op:\"remove\",path:r+\"/\"+w(p)}),a=!0):(o&&n.push({op:\"test\",path:r,value:e}),n.push({op:\"replace\",path:r,value:t}),!0);else{var u=t[p];\"object\"==typeof c&&null!=c&&\"object\"==typeof u&&null!=u&&Array.isArray(c)===Array.isArray(u)?U(c,u,n,r+\"/\"+w(p),o):c!==u&&(!0,o&&n.push({op:\"test\",path:r+\"/\"+w(p),value:v(c)}),n.push({op:\"replace\",path:r+\"/\"+w(p),value:v(u)}))}}if(a||s.length!=i.length)for(l=0;l<s.length;l++){var p;g(e,p=s[l])||void 0===t[p]||n.push({op:\"add\",path:r+\"/\"+w(p),value:v(t[p])})}}}function z(e,t,n){void 0===n&&(n=!1);var r=[];return U(e,t,r,\"\",n),r}Object.assign({},r,o,{JsonPatchError:_,deepClone:v,escapePathComponent:w,unescapePathComponent:E});var V=n(9996),W=n.n(V);const J={add:function(e,t){return{op:\"add\",path:e,value:t}},replace:H,remove:function(e){return{op:\"remove\",path:e}},merge:function(e,t){return{type:\"mutation\",op:\"merge\",path:e,value:t}},mergeDeep:function(e,t){return{type:\"mutation\",op:\"mergeDeep\",path:e,value:t}},context:function(e,t){return{type:\"context\",path:e,value:t}},getIn:function(e,t){return t.reduce(((e,t)=>void 0!==t&&e?e[t]:e),e)},applyPatch:function(e,t,n){if(n=n||{},\"merge\"===(t=f()(f()({},t),{},{path:t.path&&K(t.path)})).op){const n=ae(e,t.path);Object.assign(n,t.value),N(e,[H(t.path,n)])}else if(\"mergeDeep\"===t.op){const n=ae(e,t.path),r=W()(n,t.value);e=N(e,[H(t.path,r)]).newDocument}else if(\"add\"===t.op&&\"\"===t.path&&te(t.value)){N(e,Object.keys(t.value).reduce(((e,n)=>(e.push({op:\"add\",path:`/${K(n)}`,value:t.value[n]}),e)),[]))}else if(\"replace\"===t.op&&\"\"===t.path){let{value:r}=t;n.allowMetaPatches&&t.meta&&se(t)&&(Array.isArray(t.value)||te(t.value))&&(r=f()(f()({},r),t.meta)),e=r}else if(N(e,[t]),n.allowMetaPatches&&t.meta&&se(t)&&(Array.isArray(t.value)||te(t.value))){const n=ae(e,t.path),r=f()(f()({},n),t.meta);N(e,[H(t.path,r)])}return e},parentPathMatch:function(e,t){if(!Array.isArray(t))return!1;for(let n=0,r=t.length;n<r;n+=1)if(t[n]!==e[n])return!1;return!0},flatten:Q,fullyNormalizeArray:function(e){return ee(Q(X(e)))},normalizeArray:X,isPromise:function(e){return te(e)&&ne(e.then)},forEachNew:function(e,t){try{return G(e,Y,t)}catch(e){return e}},forEachNewPrimitive:function(e,t){try{return G(e,Z,t)}catch(e){return e}},isJsonPatch:re,isContextPatch:function(e){return ie(e)&&\"context\"===e.type},isPatch:ie,isMutation:oe,isAdditiveMutation:se,isGenerator:function(e){return\"[object GeneratorFunction]\"===Object.prototype.toString.call(e)},isFunction:ne,isObject:te,isError:function(e){return e instanceof Error}};function K(e){return Array.isArray(e)?e.length<1?\"\":`/${e.map((e=>(e+\"\").replace(/~/g,\"~0\").replace(/\\//g,\"~1\"))).join(\"/\")}`:e}function H(e,t,n){return{op:\"replace\",path:e,value:t,meta:n}}function G(e,t,n){return ee(Q(e.filter(se).map((e=>t(e.value,n,e.path)))||[]))}function Z(e,t,n){return n=n||[],Array.isArray(e)?e.map(((e,r)=>Z(e,t,n.concat(r)))):te(e)?Object.keys(e).map((r=>Z(e[r],t,n.concat(r)))):t(e,n[n.length-1],n)}function Y(e,t,n){let r=[];if((n=n||[]).length>0){const o=t(e,n[n.length-1],n);o&&(r=r.concat(o))}if(Array.isArray(e)){const o=e.map(((e,r)=>Y(e,t,n.concat(r))));o&&(r=r.concat(o))}else if(te(e)){const o=Object.keys(e).map((r=>Y(e[r],t,n.concat(r))));o&&(r=r.concat(o))}return r=Q(r),r}function X(e){return Array.isArray(e)?e:[e]}function Q(e){return[].concat(...e.map((e=>Array.isArray(e)?Q(e):e)))}function ee(e){return e.filter((e=>void 0!==e))}function te(e){return e&&\"object\"==typeof e}function ne(e){return e&&\"function\"==typeof e}function re(e){if(ie(e)){const{op:t}=e;return\"add\"===t||\"remove\"===t||\"replace\"===t}return!1}function oe(e){return re(e)||ie(e)&&\"mutation\"===e.type}function se(e){return oe(e)&&(\"add\"===e.op||\"replace\"===e.op||\"merge\"===e.op||\"mergeDeep\"===e.op)}function ie(e){return e&&\"object\"==typeof e}function ae(e,t){try{return C(e,t)}catch(e){return console.error(e),{}}}n(31905);var le=n(1272),ce=n(8575);function ue(e,t){function n(){Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack;for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];[this.message]=n,t&&t.apply(this,n)}return n.prototype=new Error,n.prototype.name=e,n.prototype.constructor=n,n}var pe=n(13692),he=n.n(pe);const fe=[\"properties\"],de=[\"properties\"],me=[\"definitions\",\"parameters\",\"responses\",\"securityDefinitions\",\"components/schemas\",\"components/responses\",\"components/parameters\",\"components/securitySchemes\"],ge=[\"schema/example\",\"items/example\"];function ye(e){const t=e[e.length-1],n=e[e.length-2],r=e.join(\"/\");return fe.indexOf(t)>-1&&-1===de.indexOf(n)||me.indexOf(r)>-1||ge.some((e=>r.indexOf(e)>-1))}function ve(e,t){const[n,r]=e.split(\"#\"),o=ce.resolve(n||\"\",t||\"\");return r?`${o}#${r}`:o}const be=\"application/json, application/yaml\",we=/^([a-z]+:\\/\\/|\\/\\/)/i,Ee=ue(\"JSONRefError\",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),xe={},Se=new WeakMap,_e=[e=>\"paths\"===e[0]&&\"responses\"===e[3]&&\"examples\"===e[5],e=>\"paths\"===e[0]&&\"responses\"===e[3]&&\"content\"===e[5]&&\"example\"===e[7],e=>\"paths\"===e[0]&&\"responses\"===e[3]&&\"content\"===e[5]&&\"examples\"===e[7]&&\"value\"===e[9],e=>\"paths\"===e[0]&&\"requestBody\"===e[3]&&\"content\"===e[4]&&\"example\"===e[6],e=>\"paths\"===e[0]&&\"requestBody\"===e[3]&&\"content\"===e[4]&&\"examples\"===e[6]&&\"value\"===e[8],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"example\"===e[4],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"example\"===e[5],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"examples\"===e[4]&&\"value\"===e[6],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"examples\"===e[5]&&\"value\"===e[7],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"content\"===e[4]&&\"example\"===e[6],e=>\"paths\"===e[0]&&\"parameters\"===e[2]&&\"content\"===e[4]&&\"examples\"===e[6]&&\"value\"===e[8],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"content\"===e[4]&&\"example\"===e[7],e=>\"paths\"===e[0]&&\"parameters\"===e[3]&&\"content\"===e[5]&&\"examples\"===e[7]&&\"value\"===e[9]],je={key:\"$ref\",plugin:(e,t,n,r)=>{const o=r.getInstance(),s=n.slice(0,-1);if(ye(s)||(e=>_e.some((t=>t(e))))(s))return;const{baseDoc:i}=r.getContext(n);if(\"string\"!=typeof e)return new Ee(\"$ref: must be a string (JSON-Ref)\",{$ref:e,baseDoc:i,fullPath:n});const a=Pe(e),l=a[0],c=a[1]||\"\";let u,p,h;try{u=i||l?Ae(l,i):null}catch(t){return Ce(t,{pointer:c,$ref:e,basePath:u,fullPath:n})}if(function(e,t,n,r){let o=Se.get(r);o||(o={},Se.set(r,o));const s=function(e){if(0===e.length)return\"\";return`/${e.map(De).join(\"/\")}`}(n),i=`${t||\"<specmap-base>\"}#${e}`,a=s.replace(/allOf\\/\\d+\\/?/g,\"\"),l=r.contextTree.get([]).baseDoc;if(t===l&&Le(a,e))return!0;let c=\"\";const u=n.some((e=>(c=`${c}/${De(e)}`,o[c]&&o[c].some((e=>Le(e,i)||Le(i,e))))));if(u)return!0;return void(o[a]=(o[a]||[]).concat(i))}(c,u,s,r)&&!o.useCircularStructures){const t=ve(e,u);return e===t?null:J.replace(n,t)}if(null==u?(h=Re(c),p=r.get(h),void 0===p&&(p=new Ee(`Could not resolve reference: ${e}`,{pointer:c,$ref:e,baseDoc:i,fullPath:n}))):(p=Ne(u,c),p=null!=p.__value?p.__value:p.catch((t=>{throw Ce(t,{pointer:c,$ref:e,baseDoc:i,fullPath:n})}))),p instanceof Error)return[J.remove(n),p];const f=ve(e,u),d=J.replace(s,p,{$$ref:f});if(u&&u!==i)return[d,J.context(s,{baseDoc:u})];try{if(!function(e,t){const n=[e];return t.path.reduce(((e,t)=>(n.push(e[t]),e[t])),e),r(t.value);function r(e){return J.isObject(e)&&(n.indexOf(e)>=0||Object.keys(e).some((t=>r(e[t]))))}}(r.state,d)||o.useCircularStructures)return d}catch(e){return null}}},Oe=Object.assign(je,{docCache:xe,absoluteify:Ae,clearCache:function(e){void 0!==e?delete xe[e]:Object.keys(xe).forEach((e=>{delete xe[e]}))},JSONRefError:Ee,wrapError:Ce,getDoc:Ie,split:Pe,extractFromDoc:Ne,fetchJSON:function(e){return fetch(e,{headers:{Accept:be},loadSpec:!0}).then((e=>e.text())).then((e=>le.ZP.load(e)))},extract:Te,jsonPointerToArray:Re,unescapeJsonPointerToken:Me}),ke=Oe;function Ae(e,t){if(!we.test(e)){if(!t)throw new Ee(`Tried to resolve a relative URL, without having a basePath. path: '${e}' basePath: '${t}'`);return ce.resolve(t,e)}return e}function Ce(e,t){let n;return n=e&&e.response&&e.response.body?`${e.response.body.code} ${e.response.body.message}`:e.message,new Ee(`Could not resolve reference: ${n}`,t,e)}function Pe(e){return(e+\"\").split(\"#\")}function Ne(e,t){const n=xe[e];if(n&&!J.isPromise(n))try{const e=Te(t,n);return Object.assign(Promise.resolve(e),{__value:e})}catch(e){return Promise.reject(e)}return Ie(e).then((e=>Te(t,e)))}function Ie(e){const t=xe[e];return t?J.isPromise(t)?t:Promise.resolve(t):(xe[e]=Oe.fetchJSON(e).then((t=>(xe[e]=t,t))),xe[e])}function Te(e,t){const n=Re(e);if(n.length<1)return t;const r=J.getIn(t,n);if(void 0===r)throw new Ee(`Could not resolve pointer: ${e} does not exist in document`,{pointer:e});return r}function Re(e){if(\"string\"!=typeof e)throw new TypeError(\"Expected a string, got a \"+typeof e);return\"/\"===e[0]&&(e=e.substr(1)),\"\"===e?[]:e.split(\"/\").map(Me)}function Me(e){if(\"string\"!=typeof e)return e;return new URLSearchParams(`=${e.replace(/~1/g,\"/\").replace(/~0/g,\"~\")}`).get(\"\")}function De(e){return new URLSearchParams([[\"\",e.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")]]).toString().slice(1)}const Fe=e=>!e||\"/\"===e||\"#\"===e;function Le(e,t){if(Fe(t))return!0;const n=e.charAt(t.length),r=t.slice(-1);return 0===e.indexOf(t)&&(!n||\"/\"===n||\"#\"===n)&&\"#\"!==r}const Be={key:\"allOf\",plugin:(e,t,n,r,o)=>{if(o.meta&&o.meta.$$ref)return;const s=n.slice(0,-1);if(ye(s))return;if(!Array.isArray(e)){const e=new TypeError(\"allOf must be an array\");return e.fullPath=n,e}let i=!1,a=o.value;if(s.forEach((e=>{a&&(a=a[e])})),a=f()({},a),0===Object.keys(a).length)return;delete a.allOf;const l=[];return l.push(r.replace(s,{})),e.forEach(((e,t)=>{if(!r.isObject(e)){if(i)return null;i=!0;const e=new TypeError(\"Elements in allOf must be objects\");return e.fullPath=n,l.push(e)}l.push(r.mergeDeep(s,e));const o=function(e,t){let{specmap:n,getBaseUrlForNodePath:r=(e=>n.getContext([...t,...e]).baseDoc),targetKeys:o=[\"$ref\",\"$$ref\"]}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const s=[];return he()(e).forEach((function(){if(o.includes(this.key)&&\"string\"==typeof this.node){const e=this.path,o=t.concat(this.path),i=ve(this.node,r(e));s.push(n.replace(o,i))}})),s}(e,n.slice(0,-1),{getBaseUrlForNodePath:e=>r.getContext([...n,t,...e]).baseDoc,specmap:r});l.push(...o)})),a.example&&l.push(r.remove([].concat(s,\"example\"))),l.push(r.mergeDeep(s,a)),a.$$ref||l.push(r.remove([].concat(s,\"$$ref\"))),l}},$e={key:\"parameters\",plugin:(e,t,n,r)=>{if(Array.isArray(e)&&e.length){const t=Object.assign([],e),o=n.slice(0,-1),s=f()({},J.getIn(r.spec,o));for(let o=0;o<e.length;o+=1){const i=e[o];try{t[o].default=r.parameterMacro(s,i)}catch(e){const t=new Error(e);return t.fullPath=n,t}}return J.replace(n,t)}return J.replace(n,e)}},qe={key:\"properties\",plugin:(e,t,n,r)=>{const o=f()({},e);for(const t in e)try{o[t].default=r.modelPropertyMacro(o[t])}catch(e){const t=new Error(e);return t.fullPath=n,t}return J.replace(n,o)}};class Ue{constructor(e){this.root=ze(e||{})}set(e,t){const n=this.getParent(e,!0);if(!n)return void Ve(this.root,t,null);const r=e[e.length-1],{children:o}=n;o[r]?Ve(o[r],t,n):o[r]=ze(t,n)}get(e){if((e=e||[]).length<1)return this.root.value;let t,n,r=this.root;for(let o=0;o<e.length&&(n=e[o],t=r.children,t[n]);o+=1)r=t[n];return r&&r.protoValue}getParent(e,t){return!e||e.length<1?null:e.length<2?this.root:e.slice(0,-1).reduce(((e,n)=>{if(!e)return e;const{children:r}=e;return!r[n]&&t&&(r[n]=ze(null,e)),r[n]}),this.root)}}function ze(e,t){return Ve({children:{}},e,t)}function Ve(e,t,n){return e.value=t||{},e.protoValue=n?f()(f()({},n.protoValue),e.value):e.value,Object.keys(e.children).forEach((t=>{const n=e.children[t];e.children[t]=Ve(n,n.value,e)})),e}const We=()=>{};class Je{static getPluginName(e){return e.pluginName}static getPatchesOfType(e,t){return e.filter(t)}constructor(e){Object.assign(this,{spec:\"\",debugLevel:\"info\",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new Ue,showDebug:!1,allPatches:[],pluginProp:\"specMap\",libMethods:Object.assign(Object.create(this),J,{getInstance:()=>this}),allowMetaPatches:!1},e),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(J.isFunction),this.patches.push(J.add([],this.spec)),this.patches.push(J.context([],this.context)),this.updatePatches(this.patches)}debug(e){if(this.debugLevel===e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];console.log(...n)}}verbose(e){if(\"verbose\"===this.debugLevel){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];console.log(`[${e}]   `,...n)}}wrapPlugin(e,t){const{pathDiscriminator:n}=this;let r,o=null;return e[this.pluginProp]?(o=e,r=e[this.pluginProp]):J.isFunction(e)?r=e:J.isObject(e)&&(r=function(e){const t=(e,t)=>!Array.isArray(e)||e.every(((e,n)=>e===t[n]));return function*(r,o){const s={};for(const e of r.filter(J.isAdditiveMutation))yield*i(e.value,e.path,e);function*i(r,a,l){if(J.isObject(r)){const c=a.length-1,u=a[c],p=a.indexOf(\"properties\"),h=\"properties\"===u&&c===p,f=o.allowMetaPatches&&s[r.$$ref];for(const c of Object.keys(r)){const u=r[c],p=a.concat(c),d=J.isObject(u),m=r.$$ref;if(f||d&&(o.allowMetaPatches&&m&&(s[m]=!0),yield*i(u,p,l)),!h&&c===e.key){const r=t(n,a);n&&!r||(yield e.plugin(u,c,p,o,l))}}}else e.key===a[a.length-1]&&(yield e.plugin(r,e.key,a,o))}}}(e)),Object.assign(r.bind(o),{pluginName:e.name||t,isGenerator:J.isGenerator(r)})}nextPlugin(){return this.wrappedPlugins.find((e=>this.getMutationsForPlugin(e).length>0))}nextPromisedPatch(){if(this.promisedPatches.length>0)return Promise.race(this.promisedPatches.map((e=>e.value)))}getPluginHistory(e){const t=this.constructor.getPluginName(e);return this.pluginHistory[t]||[]}getPluginRunCount(e){return this.getPluginHistory(e).length}getPluginHistoryTip(e){const t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}getPluginMutationIndex(e){const t=this.getPluginHistoryTip(e).mutationIndex;return\"number\"!=typeof t?-1:t}updatePluginHistory(e,t){const n=this.constructor.getPluginName(e);this.pluginHistory[n]=this.pluginHistory[n]||[],this.pluginHistory[n].push(t)}updatePatches(e){J.normalizeArray(e).forEach((e=>{if(e instanceof Error)this.errors.push(e);else try{if(!J.isObject(e))return void this.debug(\"updatePatches\",\"Got a non-object patch\",e);if(this.showDebug&&this.allPatches.push(e),J.isPromise(e.value))return this.promisedPatches.push(e),void this.promisedPatchThen(e);if(J.isContextPatch(e))return void this.setContext(e.path,e.value);J.isMutation(e)&&this.updateMutations(e)}catch(e){console.error(e),this.errors.push(e)}}))}updateMutations(e){\"object\"==typeof e.value&&!Array.isArray(e.value)&&this.allowMetaPatches&&(e.value=f()({},e.value));const t=J.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches});t&&(this.mutations.push(e),this.state=t)}removePromisedPatch(e){const t=this.promisedPatches.indexOf(e);t<0?this.debug(\"Tried to remove a promisedPatch that isn't there!\"):this.promisedPatches.splice(t,1)}promisedPatchThen(e){return e.value=e.value.then((t=>{const n=f()(f()({},e),{},{value:t});this.removePromisedPatch(e),this.updatePatches(n)})).catch((t=>{this.removePromisedPatch(e),this.updatePatches(t)})),e.value}getMutations(e,t){return e=e||0,\"number\"!=typeof t&&(t=this.mutations.length),this.mutations.slice(e,t)}getCurrentMutations(){return this.getMutationsForPlugin(this.getCurrentPlugin())}getMutationsForPlugin(e){const t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}getCurrentPlugin(){return this.currentPlugin}getLib(){return this.libMethods}_get(e){return J.getIn(this.state,e)}_getContext(e){return this.contextTree.get(e)}setContext(e,t){return this.contextTree.set(e,t)}_hasRun(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}dispatch(){const e=this,t=this.nextPlugin();if(!t){const e=this.nextPromisedPatch();if(e)return e.then((()=>this.dispatch())).catch((()=>this.dispatch()));const t={spec:this.state,errors:this.errors};return this.showDebug&&(t.patches=this.allPatches),Promise.resolve(t)}if(e.pluginCount=e.pluginCount||{},e.pluginCount[t]=(e.pluginCount[t]||0)+1,e.pluginCount[t]>100)return Promise.resolve({spec:e.state,errors:e.errors.concat(new Error(\"We've reached a hard limit of 100 plugin runs\"))});if(t!==this.currentPlugin&&this.promisedPatches.length){const e=this.promisedPatches.map((e=>e.value));return Promise.all(e.map((e=>e.then(We,We)))).then((()=>this.dispatch()))}return function(){e.currentPlugin=t;const r=e.getCurrentMutations(),o=e.mutations.length-1;try{if(t.isGenerator)for(const o of t(r,e.getLib()))n(o);else{n(t(r,e.getLib()))}}catch(e){console.error(e),n([Object.assign(Object.create(e),{plugin:t})])}finally{e.updatePluginHistory(t,{mutationIndex:o})}return e.dispatch()}();function n(n){n&&(n=J.fullyNormalizeArray(n),e.updatePatches(n,t))}}}const Ke={refs:ke,allOf:Be,parameters:$e,properties:qe};var He=n(32454);function Ge(e){const{spec:t}=e,{paths:n}=t,r={};if(!n||t.$$normalized)return e;for(const e in n){const o=n[e];if(null==o||![\"object\",\"function\"].includes(typeof o))continue;const s=o.parameters;for(const n in o){const i=o[n];if(null==i||![\"object\",\"function\"].includes(typeof i))continue;const a=(0,He.Z)(i,e,n);if(a){r[a]?r[a].push(i):r[a]=[i];const e=r[a];if(e.length>1)e.forEach(((e,t)=>{e.__originalOperationId=e.__originalOperationId||e.operationId,e.operationId=`${a}${t+1}`}));else if(void 0!==i.operationId){const t=e[0];t.__originalOperationId=t.__originalOperationId||i.operationId,t.operationId=a}}if(\"parameters\"!==n){const e=[],n={};for(const r in t)\"produces\"!==r&&\"consumes\"!==r&&\"security\"!==r||(n[r]=t[r],e.push(n));if(s&&(n.parameters=s,e.push(n)),e.length)for(const t of e)for(const e in t)if(i[e]){if(\"parameters\"===e)for(const n of t[e]){i[e].some((e=>e.name&&e.name===n.name||e.$ref&&e.$ref===n.$ref||e.$$ref&&e.$$ref===n.$$ref||e===n))||i[e].push(n)}}else i[e]=t[e]}}}return t.$$normalized=!0,e}function Ze(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{requestInterceptor:n,responseInterceptor:r}=t,o=e.withCredentials?\"include\":\"same-origin\";return t=>e({url:t,loadSpec:!0,requestInterceptor:n,responseInterceptor:r,headers:{Accept:be},credentials:o}).then((e=>e.body))}var Ye=n(80129),Xe=n.n(Ye);const Qe=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:window,{FormData:et,Blob:tt,File:nt}=Qe,rt=e=>\":/?#[]@!$&'()*+,;=\".indexOf(e)>-1,ot=e=>/^[a-z0-9\\-._~]+$/i.test(e);function st(e){let{escape:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return\"number\"==typeof e&&(e=e.toString()),\"string\"==typeof e&&e.length&&t?n?JSON.parse(e):[...e].map((e=>{if(ot(e))return e;if(rt(e)&&\"unsafe\"===t)return e;const n=new TextEncoder;return Array.from(n.encode(e)).map((e=>`0${e.toString(16).toUpperCase()}`.slice(-2))).map((e=>`%${e}`)).join(\"\")})).join(\"\"):e}function it(e){const{value:t}=e;return Array.isArray(t)?function(e){let{key:t,value:n,style:r,explode:o,escape:s}=e;const i=e=>st(e,{escape:s});if(\"simple\"===r)return n.map((e=>i(e))).join(\",\");if(\"label\"===r)return`.${n.map((e=>i(e))).join(\".\")}`;if(\"matrix\"===r)return n.map((e=>i(e))).reduce(((e,n)=>!e||o?`${e||\"\"};${t}=${n}`:`${e},${n}`),\"\");if(\"form\"===r){const e=o?`&${t}=`:\",\";return n.map((e=>i(e))).join(e)}if(\"spaceDelimited\"===r){const e=o?`${t}=`:\"\";return n.map((e=>i(e))).join(` ${e}`)}if(\"pipeDelimited\"===r){const e=o?`${t}=`:\"\";return n.map((e=>i(e))).join(`|${e}`)}return}(e):\"object\"==typeof t?function(e){let{key:t,value:n,style:r,explode:o,escape:s}=e;const i=e=>st(e,{escape:s}),a=Object.keys(n);if(\"simple\"===r)return a.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e},`:\"\"}${t}${o?\"=\":\",\"}${r}`}),\"\");if(\"label\"===r)return a.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}.`:\".\"}${t}${o?\"=\":\".\"}${r}`}),\"\");if(\"matrix\"===r&&o)return a.reduce(((e,t)=>`${e?`${e};`:\";\"}${t}=${i(n[t])}`),\"\");if(\"matrix\"===r)return a.reduce(((e,r)=>{const o=i(n[r]);return`${e?`${e},`:`;${t}=`}${r},${o}`}),\"\");if(\"form\"===r)return a.reduce(((e,t)=>{const r=i(n[t]);return`${e?`${e}${o?\"&\":\",\"}`:\"\"}${t}${o?\"=\":\",\"}${r}`}),\"\");return}(e):function(e){let{key:t,value:n,style:r,escape:o}=e;const s=e=>st(e,{escape:o});if(\"simple\"===r)return s(n);if(\"label\"===r)return`.${s(n)}`;if(\"matrix\"===r)return`;${t}=${s(n)}`;if(\"form\"===r)return s(n);if(\"deepObject\"===r)return s(n,{},!0);return}(e)}const at=(e,t)=>{t.body=e},lt={serializeRes:pt,mergeInQueryOrForm:wt};async function ct(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"object\"==typeof e&&(t=e,e=t.url),t.headers=t.headers||{},lt.mergeInQueryOrForm(t),t.headers&&Object.keys(t.headers).forEach((e=>{const n=t.headers[e];\"string\"==typeof n&&(t.headers[e]=n.replace(/\\n+/g,\" \"))})),t.requestInterceptor&&(t=await t.requestInterceptor(t)||t);const n=t.headers[\"content-type\"]||t.headers[\"Content-Type\"];let r;/multipart\\/form-data/i.test(n)&&t.body instanceof et&&(delete t.headers[\"content-type\"],delete t.headers[\"Content-Type\"]);try{r=await(t.userFetch||fetch)(t.url,t),r=await lt.serializeRes(r,e,t),t.responseInterceptor&&(r=await t.responseInterceptor(r)||r)}catch(e){if(!r)throw e;const t=new Error(r.statusText||`response status is ${r.status}`);throw t.status=r.status,t.statusCode=r.status,t.responseError=e,t}if(!r.ok){const e=new Error(r.statusText||`response status is ${r.status}`);throw e.status=r.status,e.statusCode=r.status,e.response=r,e}return r}const ut=function(){return/(json|xml|yaml|text)\\b/.test(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\")};function pt(e,t){let{loadSpec:n=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:ht(e.headers)},o=r.headers[\"content-type\"],s=n||ut(o);return(s?e.text:e.blob||e.buffer).call(e).then((e=>{if(r.text=e,r.data=e,s)try{const t=function(e,t){return t&&(0===t.indexOf(\"application/json\")||t.indexOf(\"+json\")>0)?JSON.parse(e):le.ZP.load(e)}(e,o);r.body=t,r.obj=t}catch(e){r.parseError=e}return r}))}function ht(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return\"function\"!=typeof e.entries?{}:Array.from(e.entries()).reduce(((e,t)=>{let[n,r]=t;return e[n]=function(e){return e.includes(\", \")?e.split(\", \"):e}(r),e}),{})}function ft(e,t){return t||\"undefined\"==typeof navigator||(t=navigator),t&&\"ReactNative\"===t.product?!(!e||\"object\"!=typeof e||\"string\"!=typeof e.uri):void 0!==nt&&e instanceof nt||(void 0!==tt&&e instanceof tt||(!!ArrayBuffer.isView(e)||null!==e&&\"object\"==typeof e&&\"function\"==typeof e.pipe))}function dt(e,t){return Array.isArray(e)&&e.some((e=>ft(e,t)))}const mt={form:\",\",spaceDelimited:\"%20\",pipeDelimited:\"|\"},gt={csv:\",\",ssv:\"%20\",tsv:\"%09\",pipes:\"|\"};function yt(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const{collectionFormat:r,allowEmptyValue:o,serializationOption:s,encoding:i}=t,a=\"object\"!=typeof t||Array.isArray(t)?t:t.value,l=n?e=>e.toString():e=>encodeURIComponent(e),c=l(e);if(void 0===a&&o)return[[c,\"\"]];if(ft(a)||dt(a))return[[c,a]];if(s)return vt(e,a,n,s);if(i){if([typeof i.style,typeof i.explode,typeof i.allowReserved].some((e=>\"undefined\"!==e))){const{style:t,explode:r,allowReserved:o}=i;return vt(e,a,n,{style:t,explode:r,allowReserved:o})}if(i.contentType){if(\"application/json\"===i.contentType){return[[c,l(\"string\"==typeof a?a:JSON.stringify(a))]]}return[[c,l(a.toString())]]}return\"object\"!=typeof a?[[c,l(a)]]:Array.isArray(a)&&a.every((e=>\"object\"!=typeof e))?[[c,a.map(l).join(\",\")]]:[[c,l(JSON.stringify(a))]]}return\"object\"!=typeof a?[[c,l(a)]]:Array.isArray(a)?\"multi\"===r?[[c,a.map(l)]]:[[c,a.map(l).join(gt[r||\"csv\"])]]:[[c,\"\"]]}function vt(e,t,n,r){const o=r.style||\"form\",s=void 0===r.explode?\"form\"===o:r.explode,i=!n&&(r&&r.allowReserved?\"unsafe\":\"reserved\"),a=e=>st(e,{escape:i}),l=n?e=>e:e=>st(e,{escape:i});return\"object\"!=typeof t?[[l(e),a(t)]]:Array.isArray(t)?s?[[l(e),t.map(a)]]:[[l(e),t.map(a).join(mt[o])]]:\"deepObject\"===o?Object.keys(t).map((n=>[l(`${e}[${n}]`),a(t[n])])):s?Object.keys(t).map((e=>[l(e),a(t[e])])):[[l(e),Object.keys(t).map((e=>[`${l(e)},${a(t[e])}`])).join(\",\")]]}function bt(e){const t=Object.keys(e).reduce(((t,n)=>{for(const[r,o]of yt(n,e[n]))t[r]=o;return t}),{});return Xe().stringify(t,{encode:!1,indices:!1})||\"\"}function wt(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const{url:t=\"\",query:n,form:r}=e;if(r){const t=Object.keys(r).some((e=>{const{value:t}=r[e];return ft(t)||dt(t)})),n=e.headers[\"content-type\"]||e.headers[\"Content-Type\"];if(t||/multipart\\/form-data/i.test(n)){const t=(o=e.form,Object.entries(o).reduce(((e,t)=>{let[n,r]=t;for(const[t,o]of yt(n,r,!0))if(Array.isArray(o))for(const n of o)if(ArrayBuffer.isView(n)){const r=new tt([n]);e.append(t,r)}else e.append(t,n);else if(ArrayBuffer.isView(o)){const n=new tt([o]);e.append(t,n)}else e.append(t,o);return e}),new et));at(t,e)}else e.body=bt(r);delete e.form}var o;if(n){const[r,o]=t.split(\"?\");let s=\"\";if(o){const e=Xe().parse(o);Object.keys(n).forEach((t=>delete e[t])),s=Xe().stringify(e,{encode:!0})}const i=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const r=t.filter((e=>e)).join(\"&\");return r?`?${r}`:\"\"}(s,bt(n));e.url=r+i,delete e.query}return e}const Et=e=>{const{baseDoc:t,url:n}=e;return t||n||\"\"},xt=e=>{const{fetch:t,http:n}=e;return t||n||ct};async function St(e){const{spec:t,mode:n,allowMetaPatches:r=!0,pathDiscriminator:o,modelPropertyMacro:s,parameterMacro:i,requestInterceptor:a,responseInterceptor:l,skipNormalization:c,useCircularStructures:u}=e,p=Et(e),h=xt(e);return function(e){p&&(Ke.refs.docCache[p]=e);Ke.refs.fetchJSON=Ze(h,{requestInterceptor:a,responseInterceptor:l});const t=[Ke.refs];\"function\"==typeof i&&t.push(Ke.parameters);\"function\"==typeof s&&t.push(Ke.properties);\"strict\"!==n&&t.push(Ke.allOf);return(f={spec:e,context:{baseDoc:p},plugins:t,allowMetaPatches:r,pathDiscriminator:o,parameterMacro:i,modelPropertyMacro:s,useCircularStructures:u},new Je(f).dispatch()).then(c?async e=>e:Ge);var f}(t)}const _t={name:\"generic\",match:()=>!0,normalize(e){let{spec:t}=e;const{spec:n}=Ge({spec:t});return n},resolve:async e=>St(e)};const jt=e=>{try{const{openapi:t}=e;return\"string\"==typeof t&&/^3\\.0\\.([0123])(?:-rc[012])?$/.test(t)}catch{return!1}},Ot=e=>{try{const{openapi:t}=e;return\"string\"==typeof t&&/^3\\.1\\.(?:[1-9]\\d*|0)$/.test(t)}catch{return!1}},kt=e=>jt(e)||Ot(e),At={name:\"openapi-2\",match(e){let{spec:t}=e;return(e=>{try{const{swagger:t}=e;return\"2.0\"===t}catch{return!1}})(t)},normalize(e){let{spec:t}=e;const{spec:n}=Ge({spec:t});return n},resolve:async e=>async function(e){return St(e)}(e)};const Ct={name:\"openapi-3-0\",match(e){let{spec:t}=e;return jt(t)},normalize(e){let{spec:t}=e;const{spec:n}=Ge({spec:t});return n},resolve:async e=>async function(e){return St(e)}(e)};var Pt=n(43500);class Nt extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"annotation\"}get code(){return this.attributes.get(\"code\")}set code(e){this.attributes.set(\"code\",e)}}const It=Nt;class Tt extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"comment\"}}const Rt=Tt;const Mt=function(){return!1};const Dt=function(){return!0};function Ft(e){return null!=e&&\"object\"==typeof e&&!0===e[\"@@functional/placeholder\"]}function Lt(e){return function t(n){return 0===arguments.length||Ft(n)?t:e.apply(this,arguments)}}function Bt(e){return function t(n,r){switch(arguments.length){case 0:return t;case 1:return Ft(n)?t:Lt((function(t){return e(n,t)}));default:return Ft(n)&&Ft(r)?t:Ft(n)?Lt((function(t){return e(t,r)})):Ft(r)?Lt((function(t){return e(n,t)})):e(n,r)}}}const $t=Array.isArray||function(e){return null!=e&&e.length>=0&&\"[object Array]\"===Object.prototype.toString.call(e)};function qt(e,t,n){return function(){if(0===arguments.length)return n();var r=arguments[arguments.length-1];if(!$t(r)){for(var o=0;o<e.length;){if(\"function\"==typeof r[e[o]])return r[e[o]].apply(r,Array.prototype.slice.call(arguments,0,-1));o+=1}if(function(e){return null!=e&&\"function\"==typeof e[\"@@transducer/step\"]}(r))return t.apply(null,Array.prototype.slice.call(arguments,0,-1))(r)}return n.apply(this,arguments)}}function Ut(e){return e&&e[\"@@transducer/reduced\"]?e:{\"@@transducer/value\":e,\"@@transducer/reduced\":!0}}const zt=function(){return this.xf[\"@@transducer/init\"]()},Vt=function(e){return this.xf[\"@@transducer/result\"](e)};var Wt=function(){function e(e,t){this.xf=t,this.f=e,this.all=!0}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=function(e){return this.all&&(e=this.xf[\"@@transducer/step\"](e,!0)),this.xf[\"@@transducer/result\"](e)},e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(t)||(this.all=!1,e=Ut(this.xf[\"@@transducer/step\"](e,!1))),e},e}();function Jt(e){return function(t){return new Wt(e,t)}}const Kt=Bt(qt([\"all\"],Jt,(function(e,t){for(var n=0;n<t.length;){if(!e(t[n]))return!1;n+=1}return!0})));function Ht(e,t){switch(e){case 0:return function(){return t.apply(this,arguments)};case 1:return function(e){return t.apply(this,arguments)};case 2:return function(e,n){return t.apply(this,arguments)};case 3:return function(e,n,r){return t.apply(this,arguments)};case 4:return function(e,n,r,o){return t.apply(this,arguments)};case 5:return function(e,n,r,o,s){return t.apply(this,arguments)};case 6:return function(e,n,r,o,s,i){return t.apply(this,arguments)};case 7:return function(e,n,r,o,s,i,a){return t.apply(this,arguments)};case 8:return function(e,n,r,o,s,i,a,l){return t.apply(this,arguments)};case 9:return function(e,n,r,o,s,i,a,l,c){return t.apply(this,arguments)};case 10:return function(e,n,r,o,s,i,a,l,c,u){return t.apply(this,arguments)};default:throw new Error(\"First argument to _arity must be a non-negative integer no greater than ten\")}}function Gt(e,t,n){return function(){for(var r=[],o=0,s=e,i=0;i<t.length||o<arguments.length;){var a;i<t.length&&(!Ft(t[i])||o>=arguments.length)?a=t[i]:(a=arguments[o],o+=1),r[i]=a,Ft(a)||(s-=1),i+=1}return s<=0?n.apply(this,r):Ht(s,Gt(e,r,n))}}const Zt=Bt((function(e,t){return 1===e?Lt(t):Ht(e,Gt(e,[],t))}));function Yt(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}function Xt(e,t,n){for(var r=0,o=n.length;r<o;){if(e(t,n[r]))return!0;r+=1}return!1}function Qt(e,t){return Object.prototype.hasOwnProperty.call(t,e)}const en=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};var tn=Object.prototype.toString;const nn=function(){return\"[object Arguments]\"===tn.call(arguments)?function(e){return\"[object Arguments]\"===tn.call(e)}:function(e){return Qt(\"callee\",e)}}();var rn=!{toString:null}.propertyIsEnumerable(\"toString\"),on=[\"constructor\",\"valueOf\",\"isPrototypeOf\",\"toString\",\"propertyIsEnumerable\",\"hasOwnProperty\",\"toLocaleString\"],sn=function(){return arguments.propertyIsEnumerable(\"length\")}(),an=function(e,t){for(var n=0;n<e.length;){if(e[n]===t)return!0;n+=1}return!1};const ln=\"function\"!=typeof Object.keys||sn?Lt((function(e){if(Object(e)!==e)return[];var t,n,r=[],o=sn&&nn(e);for(t in e)!Qt(t,e)||o&&\"length\"===t||(r[r.length]=t);if(rn)for(n=on.length-1;n>=0;)Qt(t=on[n],e)&&!an(r,t)&&(r[r.length]=t),n-=1;return r})):Lt((function(e){return Object(e)!==e?[]:Object.keys(e)}));const cn=Lt((function(e){return null===e?\"Null\":void 0===e?\"Undefined\":Object.prototype.toString.call(e).slice(8,-1)}));function un(e,t,n,r){var o=Yt(e);function s(e,t){return pn(e,t,n.slice(),r.slice())}return!Xt((function(e,t){return!Xt(s,t,e)}),Yt(t),o)}function pn(e,t,n,r){if(en(e,t))return!0;var o,s,i=cn(e);if(i!==cn(t))return!1;if(\"function\"==typeof e[\"fantasy-land/equals\"]||\"function\"==typeof t[\"fantasy-land/equals\"])return\"function\"==typeof e[\"fantasy-land/equals\"]&&e[\"fantasy-land/equals\"](t)&&\"function\"==typeof t[\"fantasy-land/equals\"]&&t[\"fantasy-land/equals\"](e);if(\"function\"==typeof e.equals||\"function\"==typeof t.equals)return\"function\"==typeof e.equals&&e.equals(t)&&\"function\"==typeof t.equals&&t.equals(e);switch(i){case\"Arguments\":case\"Array\":case\"Object\":if(\"function\"==typeof e.constructor&&\"Promise\"===(o=e.constructor,null==(s=String(o).match(/^function (\\w*)/))?\"\":s[1]))return e===t;break;case\"Boolean\":case\"Number\":case\"String\":if(typeof e!=typeof t||!en(e.valueOf(),t.valueOf()))return!1;break;case\"Date\":if(!en(e.valueOf(),t.valueOf()))return!1;break;case\"Error\":return e.name===t.name&&e.message===t.message;case\"RegExp\":if(e.source!==t.source||e.global!==t.global||e.ignoreCase!==t.ignoreCase||e.multiline!==t.multiline||e.sticky!==t.sticky||e.unicode!==t.unicode)return!1}for(var a=n.length-1;a>=0;){if(n[a]===e)return r[a]===t;a-=1}switch(i){case\"Map\":return e.size===t.size&&un(e.entries(),t.entries(),n.concat([e]),r.concat([t]));case\"Set\":return e.size===t.size&&un(e.values(),t.values(),n.concat([e]),r.concat([t]));case\"Arguments\":case\"Array\":case\"Object\":case\"Boolean\":case\"Number\":case\"String\":case\"Date\":case\"Error\":case\"RegExp\":case\"Int8Array\":case\"Uint8Array\":case\"Uint8ClampedArray\":case\"Int16Array\":case\"Uint16Array\":case\"Int32Array\":case\"Uint32Array\":case\"Float32Array\":case\"Float64Array\":case\"ArrayBuffer\":break;default:return!1}var l=ln(e);if(l.length!==ln(t).length)return!1;var c=n.concat([e]),u=r.concat([t]);for(a=l.length-1;a>=0;){var p=l[a];if(!Qt(p,t)||!pn(t[p],e[p],c,u))return!1;a-=1}return!0}const hn=Bt((function(e,t){return pn(e,t,[],[])}));function fn(e,t){return function(e,t,n){var r,o;if(\"function\"==typeof e.indexOf)switch(typeof t){case\"number\":if(0===t){for(r=1/t;n<e.length;){if(0===(o=e[n])&&1/o===r)return n;n+=1}return-1}if(t!=t){for(;n<e.length;){if(\"number\"==typeof(o=e[n])&&o!=o)return n;n+=1}return-1}return e.indexOf(t,n);case\"string\":case\"boolean\":case\"function\":case\"undefined\":return e.indexOf(t,n);case\"object\":if(null===t)return e.indexOf(t,n)}for(;n<e.length;){if(hn(e[n],t))return n;n+=1}return-1}(t,e,0)>=0}function dn(e,t){for(var n=0,r=t.length,o=Array(r);n<r;)o[n]=e(t[n]),n+=1;return o}function mn(e){return'\"'+e.replace(/\\\\/g,\"\\\\\\\\\").replace(/[\\b]/g,\"\\\\b\").replace(/\\f/g,\"\\\\f\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/\\t/g,\"\\\\t\").replace(/\\v/g,\"\\\\v\").replace(/\\0/g,\"\\\\0\").replace(/\"/g,'\\\\\"')+'\"'}var gn=function(e){return(e<10?\"0\":\"\")+e};const yn=\"function\"==typeof Date.prototype.toISOString?function(e){return e.toISOString()}:function(e){return e.getUTCFullYear()+\"-\"+gn(e.getUTCMonth()+1)+\"-\"+gn(e.getUTCDate())+\"T\"+gn(e.getUTCHours())+\":\"+gn(e.getUTCMinutes())+\":\"+gn(e.getUTCSeconds())+\".\"+(e.getUTCMilliseconds()/1e3).toFixed(3).slice(2,5)+\"Z\"};function vn(e){return function(){return!e.apply(this,arguments)}}function bn(e,t,n){for(var r=0,o=n.length;r<o;)t=e(t,n[r]),r+=1;return t}function wn(e){return\"[object Object]\"===Object.prototype.toString.call(e)}var En=function(){function e(e,t){this.xf=t,this.f=e}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(t)?this.xf[\"@@transducer/step\"](e,t):e},e}();function xn(e){return function(t){return new En(e,t)}}const Sn=Bt(qt([\"fantasy-land/filter\",\"filter\"],xn,(function(e,t){return wn(t)?bn((function(n,r){return e(t[r])&&(n[r]=t[r]),n}),{},ln(t)):function(e,t){for(var n=0,r=t.length,o=[];n<r;)e(t[n])&&(o[o.length]=t[n]),n+=1;return o}(e,t)})));const _n=Bt((function(e,t){return Sn(vn(e),t)}));function jn(e,t){var n=function(n){var r=t.concat([e]);return fn(n,r)?\"<Circular>\":jn(n,r)},r=function(e,t){return dn((function(t){return mn(t)+\": \"+n(e[t])}),t.slice().sort())};switch(Object.prototype.toString.call(e)){case\"[object Arguments]\":return\"(function() { return arguments; }(\"+dn(n,e).join(\", \")+\"))\";case\"[object Array]\":return\"[\"+dn(n,e).concat(r(e,_n((function(e){return/^\\d+$/.test(e)}),ln(e)))).join(\", \")+\"]\";case\"[object Boolean]\":return\"object\"==typeof e?\"new Boolean(\"+n(e.valueOf())+\")\":e.toString();case\"[object Date]\":return\"new Date(\"+(isNaN(e.valueOf())?n(NaN):mn(yn(e)))+\")\";case\"[object Map]\":return\"new Map(\"+n(Array.from(e))+\")\";case\"[object Null]\":return\"null\";case\"[object Number]\":return\"object\"==typeof e?\"new Number(\"+n(e.valueOf())+\")\":1/e==-1/0?\"-0\":e.toString(10);case\"[object Set]\":return\"new Set(\"+n(Array.from(e).sort())+\")\";case\"[object String]\":return\"object\"==typeof e?\"new String(\"+n(e.valueOf())+\")\":mn(e);case\"[object Undefined]\":return\"undefined\";default:if(\"function\"==typeof e.toString){var o=e.toString();if(\"[object Object]\"!==o)return o}return\"{\"+r(e,ln(e)).join(\", \")+\"}\"}}const On=Lt((function(e){return jn(e,[])}));const kn=Bt((function(e,t){if(e===t)return t;function n(e,t){if(e>t!=t>e)return t>e?t:e}var r=n(e,t);if(void 0!==r)return r;var o=n(typeof e,typeof t);if(void 0!==o)return o===typeof e?e:t;var s=On(e),i=n(s,On(t));return void 0!==i&&i===s?e:t}));var An=function(){function e(e,t){this.xf=t,this.f=e}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){return this.xf[\"@@transducer/step\"](e,this.f(t))},e}();const Cn=Bt(qt([\"fantasy-land/map\",\"map\"],(function(e){return function(t){return new An(e,t)}}),(function(e,t){switch(Object.prototype.toString.call(t)){case\"[object Function]\":return Zt(t.length,(function(){return e.call(this,t.apply(this,arguments))}));case\"[object Object]\":return bn((function(n,r){return n[r]=e(t[r]),n}),{},ln(t));default:return dn(e,t)}}))),Pn=Number.isInteger||function(e){return e<<0===e};function Nn(e){return\"[object String]\"===Object.prototype.toString.call(e)}const In=Bt((function(e,t){var n=e<0?t.length+e:e;return Nn(t)?t.charAt(n):t[n]}));const Tn=Bt((function(e,t){if(null!=t)return Pn(e)?In(e,t):t[e]}));const Rn=Bt((function(e,t){return Cn(Tn(e),t)}));function Mn(e){return function t(n,r,o){switch(arguments.length){case 0:return t;case 1:return Ft(n)?t:Bt((function(t,r){return e(n,t,r)}));case 2:return Ft(n)&&Ft(r)?t:Ft(n)?Bt((function(t,n){return e(t,r,n)})):Ft(r)?Bt((function(t,r){return e(n,t,r)})):Lt((function(t){return e(n,r,t)}));default:return Ft(n)&&Ft(r)&&Ft(o)?t:Ft(n)&&Ft(r)?Bt((function(t,n){return e(t,n,o)})):Ft(n)&&Ft(o)?Bt((function(t,n){return e(t,r,n)})):Ft(r)&&Ft(o)?Bt((function(t,r){return e(n,t,r)})):Ft(n)?Lt((function(t){return e(t,r,o)})):Ft(r)?Lt((function(t){return e(n,t,o)})):Ft(o)?Lt((function(t){return e(n,r,t)})):e(n,r,o)}}}const Dn=Lt((function(e){return!!$t(e)||!!e&&(\"object\"==typeof e&&(!Nn(e)&&(0===e.length||e.length>0&&(e.hasOwnProperty(0)&&e.hasOwnProperty(e.length-1)))))}));var Fn=\"undefined\"!=typeof Symbol?Symbol.iterator:\"@@iterator\";function Ln(e,t,n){return function(r,o,s){if(Dn(s))return e(r,o,s);if(null==s)return o;if(\"function\"==typeof s[\"fantasy-land/reduce\"])return t(r,o,s,\"fantasy-land/reduce\");if(null!=s[Fn])return n(r,o,s[Fn]());if(\"function\"==typeof s.next)return n(r,o,s);if(\"function\"==typeof s.reduce)return t(r,o,s,\"reduce\");throw new TypeError(\"reduce: list must be array or iterable\")}}function Bn(e,t,n){for(var r=0,o=n.length;r<o;){if((t=e[\"@@transducer/step\"](t,n[r]))&&t[\"@@transducer/reduced\"]){t=t[\"@@transducer/value\"];break}r+=1}return e[\"@@transducer/result\"](t)}const $n=Bt((function(e,t){return Ht(e.length,(function(){return e.apply(t,arguments)}))}));function qn(e,t,n){for(var r=n.next();!r.done;){if((t=e[\"@@transducer/step\"](t,r.value))&&t[\"@@transducer/reduced\"]){t=t[\"@@transducer/value\"];break}r=n.next()}return e[\"@@transducer/result\"](t)}function Un(e,t,n,r){return e[\"@@transducer/result\"](n[r]($n(e[\"@@transducer/step\"],e),t))}const zn=Ln(Bn,Un,qn);var Vn=function(){function e(e){this.f=e}return e.prototype[\"@@transducer/init\"]=function(){throw new Error(\"init not implemented on XWrap\")},e.prototype[\"@@transducer/result\"]=function(e){return e},e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(e,t)},e}();function Wn(e){return new Vn(e)}const Jn=Mn((function(e,t,n){return zn(\"function\"==typeof e?Wn(e):e,t,n)}));const Kn=Lt((function(e){return Zt(Jn(kn,0,Rn(\"length\",e)),(function(){for(var t=0,n=e.length;t<n;){if(!e[t].apply(this,arguments))return!1;t+=1}return!0}))}));const Hn=Lt((function(e){return function(){return e}}));const Gn=Lt((function(e){return Zt(Jn(kn,0,Rn(\"length\",e)),(function(){for(var t=0,n=e.length;t<n;){if(e[t].apply(this,arguments))return!0;t+=1}return!1}))}));function Zn(e,t,n){for(var r=n.next();!r.done;)t=e(t,r.value),r=n.next();return t}function Yn(e,t,n,r){return n[r](e,t)}const Xn=Ln(bn,Yn,Zn);const Qn=Bt((function(e,t){return\"function\"==typeof t[\"fantasy-land/ap\"]?t[\"fantasy-land/ap\"](e):\"function\"==typeof e.ap?e.ap(t):\"function\"==typeof e?function(n){return e(n)(t(n))}:Xn((function(e,n){return function(e,t){var n;t=t||[];var r=(e=e||[]).length,o=t.length,s=[];for(n=0;n<r;)s[s.length]=e[n],n+=1;for(n=0;n<o;)s[s.length]=t[n],n+=1;return s}(e,Cn(n,t))}),[],e)}));const er=Bt((function(e,t){return e.apply(this,t)}));var tr=Lt((function(e){for(var t=ln(e),n=t.length,r=[],o=0;o<n;)r[o]=e[t[o]],o+=1;return r}));const nr=tr;const rr=Lt((function(e){return null==e}));const or=Mn((function e(t,n,r){if(0===t.length)return n;var o=t[0];if(t.length>1){var s=!rr(r)&&Qt(o,r)&&\"object\"==typeof r[o]?r[o]:Pn(t[1])?[]:{};n=e(Array.prototype.slice.call(t,1),n,s)}return function(e,t,n){if(Pn(e)&&$t(n)){var r=[].concat(n);return r[e]=t,r}var o={};for(var s in n)o[s]=n[s];return o[e]=t,o}(o,n,r)}));function sr(e){var t=Object.prototype.toString.call(e);return\"[object Function]\"===t||\"[object AsyncFunction]\"===t||\"[object GeneratorFunction]\"===t||\"[object AsyncGeneratorFunction]\"===t}const ir=Bt((function(e,t){return e&&t}));const ar=Bt((function(e,t){var n=Zt(e,t);return Zt(e,(function(){return bn(Qn,Cn(n,arguments[0]),Array.prototype.slice.call(arguments,1))}))}));const lr=Lt((function(e){return ar(e.length,e)}));const cr=Bt((function(e,t){return sr(e)?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:lr(ir)(e,t)}));const ur=Lt((function(e){return function(t,n){return e(t,n)?-1:e(n,t)?1:0}}));const pr=lr(Lt((function(e){return!e})));function hr(e,t){return function(){return t.call(this,e.apply(this,arguments))}}function fr(e,t){return function(){var n=arguments.length;if(0===n)return t();var r=arguments[n-1];return $t(r)||\"function\"!=typeof r[e]?t.apply(this,arguments):r[e].apply(r,Array.prototype.slice.call(arguments,0,n-1))}}const dr=Mn(fr(\"slice\",(function(e,t,n){return Array.prototype.slice.call(n,e,t)})));const mr=Lt(fr(\"tail\",dr(1,1/0)));function gr(){if(0===arguments.length)throw new Error(\"pipe requires at least one argument\");return Ht(arguments[0].length,Jn(hr,arguments[0],mr(arguments)))}var yr=Bt((function(e,t){return Zt(Jn(kn,0,Rn(\"length\",t)),(function(){var n=arguments,r=this;return e.apply(r,dn((function(e){return e.apply(r,n)}),t))}))}));const vr=yr;function br(e){return new RegExp(e.source,e.flags?e.flags:(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.sticky?\"y\":\"\")+(e.unicode?\"u\":\"\")+(e.dotAll?\"s\":\"\"))}function wr(e,t,n){if(n||(n=new Er),function(e){var t=typeof e;return null==e||\"object\"!=t&&\"function\"!=t}(e))return e;var r=function(r){var o=n.get(e);if(o)return o;for(var s in n.set(e,r),e)Object.prototype.hasOwnProperty.call(e,s)&&(r[s]=t?wr(e[s],!0,n):e[s]);return r};switch(cn(e)){case\"Object\":return r(Object.create(Object.getPrototypeOf(e)));case\"Array\":return r([]);case\"Date\":return new Date(e.valueOf());case\"RegExp\":return br(e);case\"Int8Array\":case\"Uint8Array\":case\"Uint8ClampedArray\":case\"Int16Array\":case\"Uint16Array\":case\"Int32Array\":case\"Uint32Array\":case\"Float32Array\":case\"Float64Array\":case\"BigInt64Array\":case\"BigUint64Array\":return e.slice();default:return e}}var Er=function(){function e(){this.map={},this.length=0}return e.prototype.set=function(e,t){const n=this.hash(e);let r=this.map[n];r||(this.map[n]=r=[]),r.push([e,t]),this.length+=1},e.prototype.hash=function(e){let t=[];for(var n in e)t.push(Object.prototype.toString.call(e[n]));return t.join()},e.prototype.get=function(e){if(this.length<=180){for(const t in this.map){const n=this.map[t];for(let t=0;t<n.length;t+=1){const r=n[t];if(r[0]===e)return r[1]}}return}const t=this.hash(e),n=this.map[t];if(n)for(let t=0;t<n.length;t+=1){const r=n[t];if(r[0]===e)return r[1]}},e}(),xr=function(){function e(e,t,n,r){this.valueFn=e,this.valueAcc=t,this.keyFn=n,this.xf=r,this.inputs={}}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=function(e){var t;for(t in this.inputs)if(Qt(t,this.inputs)&&(e=this.xf[\"@@transducer/step\"](e,this.inputs[t]))[\"@@transducer/reduced\"]){e=e[\"@@transducer/value\"];break}return this.inputs=null,this.xf[\"@@transducer/result\"](e)},e.prototype[\"@@transducer/step\"]=function(e,t){var n=this.keyFn(t);return this.inputs[n]=this.inputs[n]||[n,wr(this.valueAcc,!1)],this.inputs[n][1]=this.valueFn(this.inputs[n][1],t),e},e}();function Sr(e,t,n){return function(r){return new xr(e,t,n,r)}}var _r=Gt(4,[],qt([],Sr,(function(e,t,n,r){var o=Wn((function(r,o){var s=n(o),i=e(Qt(s,r)?r[s]:wr(t,!1),o);return i&&i[\"@@transducer/reduced\"]?Ut(r):(r[s]=i,r)}));return zn(o,{},r)})));const jr=_r;const Or=Lt((function(e){return Zt(e.length,e)}));const kr=Bt((function(e,t){return null==t||t!=t?e:t}));function Ar(e,t,n){var r,o=typeof e;switch(o){case\"string\":case\"number\":return 0===e&&1/e==-1/0?!!n._items[\"-0\"]||(t&&(n._items[\"-0\"]=!0),!1):null!==n._nativeSet?t?(r=n._nativeSet.size,n._nativeSet.add(e),n._nativeSet.size===r):n._nativeSet.has(e):o in n._items?e in n._items[o]||(t&&(n._items[o][e]=!0),!1):(t&&(n._items[o]={},n._items[o][e]=!0),!1);case\"boolean\":if(o in n._items){var s=e?1:0;return!!n._items[o][s]||(t&&(n._items[o][s]=!0),!1)}return t&&(n._items[o]=e?[!1,!0]:[!0,!1]),!1;case\"function\":return null!==n._nativeSet?t?(r=n._nativeSet.size,n._nativeSet.add(e),n._nativeSet.size===r):n._nativeSet.has(e):o in n._items?!!fn(e,n._items[o])||(t&&n._items[o].push(e),!1):(t&&(n._items[o]=[e]),!1);case\"undefined\":return!!n._items[o]||(t&&(n._items[o]=!0),!1);case\"object\":if(null===e)return!!n._items.null||(t&&(n._items.null=!0),!1);default:return(o=Object.prototype.toString.call(e))in n._items?!!fn(e,n._items[o])||(t&&n._items[o].push(e),!1):(t&&(n._items[o]=[e]),!1)}}const Cr=function(){function e(){this._nativeSet=\"function\"==typeof Set?new Set:null,this._items={}}return e.prototype.add=function(e){return!Ar(e,!0,this)},e.prototype.has=function(e){return Ar(e,!1,this)},e}();const Pr=Bt((function(e,t){for(var n=[],r=0,o=e.length,s=t.length,i=new Cr,a=0;a<s;a+=1)i.add(t[a]);for(;r<o;)i.add(e[r])&&(n[n.length]=e[r]),r+=1;return n}));var Nr=function(){function e(e,t){this.xf=t,this.n=e,this.i=0}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){this.i+=1;var n=0===this.n?e:this.xf[\"@@transducer/step\"](e,t);return this.n>=0&&this.i>=this.n?Ut(n):n},e}();function Ir(e){return function(t){return new Nr(e,t)}}const Tr=Bt(qt([\"take\"],Ir,(function(e,t){return dr(0,e<0?1/0:e,t)})));function Rr(e,t){for(var n=t.length-1;n>=0&&e(t[n]);)n-=1;return dr(0,n+1,t)}var Mr=function(){function e(e,t){this.f=e,this.retained=[],this.xf=t}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=function(e){return this.retained=null,this.xf[\"@@transducer/result\"](e)},e.prototype[\"@@transducer/step\"]=function(e,t){return this.f(t)?this.retain(e,t):this.flush(e,t)},e.prototype.flush=function(e,t){return e=zn(this.xf,e,this.retained),this.retained=[],this.xf[\"@@transducer/step\"](e,t)},e.prototype.retain=function(e,t){return this.retained.push(t),e},e}();function Dr(e){return function(t){return new Mr(e,t)}}const Fr=Bt(qt([],Dr,Rr));var Lr=function(){function e(e,t){this.xf=t,this.f=e}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){if(this.f){if(this.f(t))return e;this.f=null}return this.xf[\"@@transducer/step\"](e,t)},e}();function Br(e){return function(t){return new Lr(e,t)}}const $r=Bt(qt([\"dropWhile\"],Br,(function(e,t){for(var n=0,r=t.length;n<r&&e(t[n]);)n+=1;return dr(n,1/0,t)})));const qr=Bt((function(e,t){return e||t}));const Ur=Bt((function(e,t){return sr(e)?function(){return e.apply(this,arguments)||t.apply(this,arguments)}:lr(qr)(e,t)}));var zr=Lt((function(e){return null!=e&&\"function\"==typeof e[\"fantasy-land/empty\"]?e[\"fantasy-land/empty\"]():null!=e&&null!=e.constructor&&\"function\"==typeof e.constructor[\"fantasy-land/empty\"]?e.constructor[\"fantasy-land/empty\"]():null!=e&&\"function\"==typeof e.empty?e.empty():null!=e&&null!=e.constructor&&\"function\"==typeof e.constructor.empty?e.constructor.empty():$t(e)?[]:Nn(e)?\"\":wn(e)?{}:nn(e)?function(){return arguments}():function(e){var t=Object.prototype.toString.call(e);return\"[object Uint8ClampedArray]\"===t||\"[object Int8Array]\"===t||\"[object Uint8Array]\"===t||\"[object Int16Array]\"===t||\"[object Uint16Array]\"===t||\"[object Int32Array]\"===t||\"[object Uint32Array]\"===t||\"[object Float32Array]\"===t||\"[object Float64Array]\"===t||\"[object BigInt64Array]\"===t||\"[object BigUint64Array]\"===t}(e)?e.constructor.from(\"\"):void 0}));const Vr=zr;const Wr=Lt((function(e){return Zt(e.length,(function(t,n){var r=Array.prototype.slice.call(arguments,0);return r[0]=n,r[1]=t,e.apply(this,r)}))}));const Jr=Bt(fr(\"groupBy\",jr((function(e,t){return e.push(t),e}),[])));const Kr=Bt((function(e,t){if(0===e.length||rr(t))return!1;for(var n=t,r=0;r<e.length;){if(rr(n)||!Qt(e[r],n))return!1;n=n[e[r]],r+=1}return!0}));const Hr=Bt((function(e,t){return Kr([e],t)}));const Gr=Bt((function(e,t){return!rr(t)&&e in t}));const Zr=In(0);var Yr=function(e,t){switch(arguments.length){case 0:return Yr;case 1:return function t(n){return 0===arguments.length?t:en(e,n)};default:return en(e,t)}};const Xr=Yr;function Qr(e){return e}const eo=Lt(Qr);const to=Mn((function(e,t,n){return Zt(Math.max(e.length,t.length,n.length),(function(){return e.apply(this,arguments)?t.apply(this,arguments):n.apply(this,arguments)}))}));const no=Bt(fn);const ro=dr(0,-1);\"function\"==typeof Object.assign&&Object.assign;const oo=Bt((function(e,t){return Zt(e+1,(function(){var n=arguments[e];if(null!=n&&sr(n[t]))return n[t].apply(n,Array.prototype.slice.call(arguments,0,e));throw new TypeError(On(n)+' does not have a method named \"'+t+'\"')}))}));const so=Lt((function(e){return null!=e&&hn(e,Vr(e))}));const io=oo(1,\"join\");const ao=In(-1);const lo=Bt((function(e,t){return function(n){return function(r){return Cn((function(e){return t(e,r)}),n(e(r)))}}}));const co=Bt((function(e,t){return e.map((function(e){for(var n,r=t,o=0;o<e.length;){if(null==r)return;n=e[o],r=Pn(n)?In(n,r):r[n],o+=1}return r}))}));const uo=Bt((function(e,t){return co([e],t)[0]}));const po=Bt((function(e,t){return bn((function(n,r){return n[r]=e(t[r],r,t),n}),{},ln(t))}));const ho=Mn((function(e,t,n){var r,o={};for(r in n=n||{},t=t||{})Qt(r,t)&&(o[r]=Qt(r,n)?e(r,t[r],n[r]):t[r]);for(r in n)Qt(r,n)&&!Qt(r,o)&&(o[r]=n[r]);return o}));const fo=Mn((function e(t,n,r){return ho((function(n,r,o){return wn(r)&&wn(o)?e(t,r,o):t(n,r,o)}),n,r)}));const mo=Bt((function(e,t){return fo((function(e,t,n){return n}),e,t)}));const go=Bt((function(e,t){return Kt(vn(e),t)}));var yo=function(e){return{value:e,map:function(t){return yo(t(e))}}};const vo=Mn((function(e,t,n){return e((function(e){return yo(t(e))}))(n).value}));const bo=Mn((function(e,t,n){return kr(e,uo(t,n))}));const wo=Mn((function(e,t,n){return e(uo(t,n))}));const Eo=Bt((function(e,t){for(var n={},r=0;r<e.length;)e[r]in t&&(n[e[r]]=t[e[r]]),r+=1;return n}));const xo=Mn((function(e,t,n){return hn(e,Tn(t,n))}));const So=Mn((function(e,t,n){return kr(e,Tn(t,n))}));const _o=Mn((function(e,t,n){return e(Tn(t,n))}));function jo(e){return\"[object Number]\"===Object.prototype.toString.call(e)}var Oo=Bt((function(e,t){if(!jo(e)||!jo(t))throw new TypeError(\"Both arguments to range must be numbers\");for(var n=[],r=e;r<t;)n.push(r),r+=1;return n}));const ko=Oo;const Ao=Lt(Ut);const Co=Mn((function(e,t,n){return n.replace(e,t)}));var Po=Bt((function(e,t){return Array.prototype.slice.call(t,0).sort(e)}));const No=Po;const Io=oo(1,\"split\");const To=Bt((function(e,t){return hn(Tr(e.length,t),e)}));const Ro=Bt((function(e,t){if(n=e,\"[object RegExp]\"!==Object.prototype.toString.call(n))throw new TypeError(\"‘test’ requires a value of type RegExp as its first argument; received \"+On(e));var n;return br(e).test(t)}));var Mo=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\";String.prototype.trim;var Do=function(){function e(e,t){this.xf=t,this.pred=e,this.items=[]}return e.prototype[\"@@transducer/init\"]=zt,e.prototype[\"@@transducer/result\"]=Vt,e.prototype[\"@@transducer/step\"]=function(e,t){return Xt(this.pred,t,this.items)?e:(this.items.push(t),this.xf[\"@@transducer/step\"](e,t))},e}();function Fo(e){return function(t){return new Do(e,t)}}const Lo=Bt(qt([],Fo,(function(e,t){for(var n,r=0,o=t.length,s=[];r<o;)Xt(e,n=t[r],s)||(s[s.length]=n),r+=1;return s})));const Bo=Mn((function(e,t,n){return e(n)?t(n):n}));const $o=Hn(void 0);const qo=hn($o());class Uo extends Pt.ON{constructor(e,t,n){super(e,t,n),this.element=\"parseResult\"}get api(){return this.children.filter((e=>e.classes.contains(\"api\"))).first}get results(){return this.children.filter((e=>e.classes.contains(\"result\")))}get result(){return this.results.first}get annotations(){return this.children.filter((e=>\"annotation\"===e.element))}get warnings(){return this.children.filter((e=>\"annotation\"===e.element&&e.classes.contains(\"warning\")))}get errors(){return this.children.filter((e=>\"annotation\"===e.element&&e.classes.contains(\"error\")))}get isEmpty(){return this.children.reject((e=>\"annotation\"===e.element)).isEmpty}replaceResult(e){const{result:t}=this;if(qo(t))return!1;const n=this.content.findIndex((e=>e===t));return-1!==n&&(this.content[n]=e,!0)}}const zo=Uo;class Vo extends Pt.ON{constructor(e,t,n){super(e,t,n),this.element=\"sourceMap\"}get positionStart(){return this.children.filter((e=>e.classes.contains(\"position\"))).get(0)}get positionEnd(){return this.children.filter((e=>e.classes.contains(\"position\"))).get(1)}set position(e){if(null===e)return;const t=new Pt.ON([e.start.row,e.start.column,e.start.char]),n=new Pt.ON([e.end.row,e.end.column,e.end.char]);t.classes.push(\"position\"),n.classes.push(\"position\"),this.push(t).push(n)}}const Wo=Vo;var Jo=n(80621),Ko=n(52201),Ho=n(27398);function Go(e){return Go=\"function\"==typeof Ko&&\"symbol\"==typeof Ho?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Ko&&e.constructor===Ko&&e!==Ko.prototype?\"symbol\":typeof e},Go(e)}var Zo=n(26189);function Yo(e){var t=function(e,t){if(\"object\"!==Go(e)||null===e)return e;var n=e[Zo];if(void 0!==n){var r=n.call(e,t||\"default\");if(\"object\"!==Go(r))return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===Go(t)?t:String(t)}function Xo(e,t,n){return(t=Yo(t))in e?Jo(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const Qo=Zt(1,gr(cn,Xr(\"GeneratorFunction\")));const es=Zt(1,gr(cn,Xr(\"AsyncFunction\")));const ts=Gn([gr(cn,Xr(\"Function\")),Qo,es]);const ns=pr(ts);const rs=Zt(1,ts(Array.isArray)?Array.isArray:gr(cn,Xr(\"Array\")));const os=cr(rs,so);var ss=Zt(3,(function(e,t,n){var r=uo(e,n),o=uo(ro(e),n);if(!ns(r)&&!os(e)){var s=$n(r,o);return er(s,t)}}));const is=ss;const as=Wr(no),ls=(e,t)=>\"function\"==typeof(null==t?void 0:t[e]),cs=e=>null!=e&&Object.prototype.hasOwnProperty.call(e,\"_storedElement\")&&Object.prototype.hasOwnProperty.call(e,\"_content\"),us=(e,t)=>{var n;return(null==t||null===(n=t.primitive)||void 0===n?void 0:n.call(t))===e},ps=(e,t)=>{var n,r;return(null==t||null===(n=t.classes)||void 0===n||null===(r=n.includes)||void 0===r?void 0:r.call(n,e))||!1},hs=(e,t)=>(null==t?void 0:t.element)===e,fs=e=>e({hasMethod:ls,hasBasicElementProps:cs,primitiveEq:us,isElementType:hs,hasClass:ps}),ds=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.W_||e(n)&&t(void 0,n))),ms=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.RP||e(n)&&t(\"string\",n))),gs=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.VL||e(n)&&t(\"number\",n))),ys=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.zr||e(n)&&t(\"null\",n))),vs=fs((({hasBasicElementProps:e,primitiveEq:t})=>n=>n instanceof Pt.hh||e(n)&&t(\"boolean\",n))),bs=fs((({hasBasicElementProps:e,primitiveEq:t,hasMethod:n})=>r=>r instanceof Pt.Sb||e(r)&&t(\"object\",r)&&n(\"keys\",r)&&n(\"values\",r)&&n(\"items\",r))),ws=fs((({hasBasicElementProps:e,primitiveEq:t,hasMethod:n})=>r=>r instanceof Pt.ON&&!(r instanceof Pt.Sb)||e(r)&&t(\"array\",r)&&n(\"push\",r)&&n(\"unshift\",r)&&n(\"map\",r)&&n(\"reduce\",r))),Es=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pt.c6||e(r)&&t(\"member\",r)&&n(void 0,r))),xs=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pt.EA||e(r)&&t(\"link\",r)&&n(void 0,r))),Ss=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pt.tK||e(r)&&t(\"ref\",r)&&n(void 0,r))),_s=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof It||e(r)&&t(\"annotation\",r)&&n(\"array\",r))),js=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Rt||e(r)&&t(\"comment\",r)&&n(\"string\",r))),Os=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof zo||e(r)&&t(\"parseResult\",r)&&n(\"array\",r))),ks=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Wo||e(r)&&t(\"sourceMap\",r)&&n(\"array\",r))),As=e=>hs(\"object\",e)||hs(\"array\",e)||hs(\"boolean\",e)||hs(\"number\",e)||hs(\"string\",e)||hs(\"null\",e)||hs(\"member\",e),Cs=e=>{var t,n;return ks(null==e||null===(t=e.meta)||void 0===t||null===(n=t.get)||void 0===n?void 0:n.call(t,\"sourceMap\"))},Ps=(e,t)=>{if(0===e.length)return!0;const n=t.attributes.get(\"symbols\");return!!ws(n)&&Kt(as(n.toValue()),e)},Ns=(e,t)=>0===e.length||Kt(as(t.classes.toValue()),e);const Is=hn(null);const Ts=pr(Is);function Rs(e){return Rs=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},Rs(e)}const Ms=function(e){return\"object\"===Rs(e)};const Ds=Zt(1,cr(Ts,Ms));var Fs=gr(cn,Xr(\"Object\")),Ls=gr(On,hn(On(Object))),Bs=wo(cr(ts,Ls),[\"constructor\"]);const $s=Zt(1,(function(e){if(!Ds(e)||!Fs(e))return!1;var t=Object.getPrototypeOf(e);return!!Is(t)||Bs(t)}));class qs extends Pt.lS{constructor(){super(),this.register(\"annotation\",It),this.register(\"comment\",Rt),this.register(\"parseResult\",zo),this.register(\"sourceMap\",Wo)}}const Us=new qs,zs=e=>{const t=new qs;return $s(e)&&t.use(e),t},Vs=Us;function Ws(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Js=()=>({predicates:function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ws(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ws(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},s),namespace:Vs});var Ks=n(14058),Hs=n(628),Gs=n(92093);function Zs(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Gs(e);for(r=0;r<s.length;r++)n=s[r],Hs(t).call(t,n)>=0||(o[n]=e[n]);return o}(e,t);if(Ks){var s=Ks(e);for(r=0;r<s.length;r++)n=s[r],Hs(t).call(t,n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Ys=n(43992);const Xs=Zt(1,gr(cn,Xr(\"String\"))),Qs=(e,t,n)=>{const r=e[t];if(null!=r){if(!n&&\"function\"==typeof r)return r;const e=n?r.leave:r.enter;if(\"function\"==typeof e)return e}else{const r=n?e.leave:e.enter;if(null!=r){if(\"function\"==typeof r)return r;const e=r[t];if(\"function\"==typeof e)return e}}return null},ei={},ti=e=>null==e?void 0:e.type,ni=e=>\"string\"==typeof ti(e),ri=(e,{visitFnGetter:t=Qs,nodeTypeGetter:n=ti}={})=>{const r=new Array(e.length);return{enter(o,...s){for(let i=0;i<e.length;i+=1)if(null==r[i]){const a=t(e[i],n(o),!1);if(\"function\"==typeof a){const t=a.call(e[i],o,...s);if(!1===t)r[i]=o;else if(t===ei)r[i]=ei;else if(void 0!==t)return t}}},leave(o,...s){for(let i=0;i<e.length;i+=1)if(null==r[i]){const a=t(e[i],n(o),!0);if(\"function\"==typeof a){const t=a.call(e[i],o,...s);if(t===ei)r[i]=ei;else if(void 0!==t&&!1!==t)return t}}else r[i]===o&&(r[i]=null)}}},oi=(e,t,{keyMap:n=null,state:r={},breakSymbol:o=ei,deleteNodeSymbol:s=null,skipVisitingNodeSymbol:i=!1,visitFnGetter:a=Qs,nodeTypeGetter:l=ti,nodePredicate:c=ni,detectCycles:u=!0}={})=>{const p=n||{};let h,f,d=Array.isArray(e),m=[e],g=-1,y=[];const v=[],b=[];let w=e;do{g+=1;const e=g===m.length;let n,E;const x=e&&0!==y.length;if(e){if(n=0===b.length?void 0:v.pop(),E=f,f=b.pop(),x){E=d?E.slice():Object.create(Object.getPrototypeOf(E),Object.getOwnPropertyDescriptors(E));let e=0;for(let t=0;t<y.length;t+=1){let n=y[t][0];const r=y[t][1];d&&(n-=e),d&&r===s?(E.splice(n,1),e+=1):E[n]=r}}g=h.index,m=h.keys,y=h.edits,d=h.inArray,h=h.prev}else{if(n=f?d?g:m[g]:void 0,E=f?f[n]:w,E===s||void 0===E)continue;f&&v.push(n)}if(b.includes(E))continue;let S;if(!Array.isArray(E)){if(!c(E))throw new Error(`Invalid AST Node:  ${JSON.stringify(E)}`);if(u&&b.includes(E)){v.pop();continue}const s=a(t,l(E),e);if(s){for(const[e,n]of Object.entries(r))t[e]=n;if(S=s.call(t,E,n,f,v,b),S===o)break;if(S===i){if(!e){v.pop();continue}}else if(void 0!==S&&(y.push([n,S]),!e)){if(!c(S)){v.pop();continue}E=S}}}void 0===S&&x&&y.push([n,E]),e||(h={inArray:d,index:g,keys:m,edits:y,prev:h},d=Array.isArray(E),m=d?E:p[l(E)]||[],g=-1,y=[],f&&b.push(f),f=E)}while(void 0!==h);return 0!==y.length&&([,w]=y[y.length-1]),w};oi[Symbol.for(\"nodejs.util.promisify.custom\")]=async(e,t,{keyMap:n=null,state:r={},breakSymbol:o=ei,deleteNodeSymbol:s=null,skipVisitingNodeSymbol:i=!1,visitFnGetter:a=Qs,nodeTypeGetter:l=ti,nodePredicate:c=ni,detectCycles:u=!0}={})=>{const p=n||{};let h,f,d=Array.isArray(e),m=[e],g=-1,y=[];const v=[],b=[];let w=e;do{g+=1;const e=g===m.length;let n,E;const x=e&&0!==y.length;if(e){if(n=0===b.length?void 0:v.pop(),E=f,f=b.pop(),x){E=d?E.slice():Object.create(Object.getPrototypeOf(E),Object.getOwnPropertyDescriptors(E));let e=0;for(let t=0;t<y.length;t+=1){let n=y[t][0];const r=y[t][1];d&&(n-=e),d&&r===s?(E.splice(n,1),e+=1):E[n]=r}}g=h.index,m=h.keys,y=h.edits,d=h.inArray,h=h.prev}else{if(n=f?d?g:m[g]:void 0,E=f?f[n]:w,E===s||void 0===E)continue;f&&v.push(n)}let S;if(!Array.isArray(E)){if(!c(E))throw new Error(`Invalid AST Node:  ${JSON.stringify(E)}`);if(u&&b.includes(E)){v.pop();continue}const s=a(t,l(E),e);if(s){for(const[e,n]of Object.entries(r))t[e]=n;if(S=await s.call(t,E,n,f,v,b),S===o)break;if(S===i){if(!e){v.pop();continue}}else if(void 0!==S&&(y.push([n,S]),!e)){if(!c(S)){v.pop();continue}E=S}}}void 0===S&&x&&y.push([n,E]),e||(h={inArray:d,index:g,keys:m,edits:y,prev:h},d=Array.isArray(E),m=d?E:p[l(E)]||[],g=-1,y=[],f&&b.push(f),f=E)}while(void 0!==h);return 0!==y.length&&([,w]=y[y.length-1]),w};const si=[\"keyMap\"],ii=[\"keyMap\"];function ai(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function li(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ai(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ai(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const ci=e=>bs(e)?\"ObjectElement\":ws(e)?\"ArrayElement\":Es(e)?\"MemberElement\":ms(e)?\"StringElement\":vs(e)?\"BooleanElement\":gs(e)?\"NumberElement\":ys(e)?\"NullElement\":xs(e)?\"LinkElement\":Ss(e)?\"RefElement\":void 0,ui=gr(ci,Xs),pi={ObjectElement:[\"content\"],ArrayElement:[\"content\"],MemberElement:[\"key\",\"value\"],StringElement:[],BooleanElement:[],NumberElement:[],NullElement:[],RefElement:[],LinkElement:[],Annotation:[],Comment:[],ParseResultElement:[\"content\"],SourceMap:[\"content\"]},hi=Ys({props:{result:[],predicate:Mt,returnOnTrue:void 0,returnOnFalse:void 0},init({predicate:e=this.predicate,returnOnTrue:t=this.returnOnTrue,returnOnFalse:n=this.returnOnFalse}={}){this.result=[],this.predicate=e,this.returnOnTrue=t,this.returnOnFalse=n},methods:{enter(e){return this.predicate(e)?(this.result.push(e),this.returnOnTrue):this.returnOnFalse}}}),fi=(e,t,n={})=>{let{keyMap:r=pi}=n,o=Zs(n,si);return oi(e,t,li({keyMap:r,nodeTypeGetter:ci,nodePredicate:ui},o))};fi[Symbol.for(\"nodejs.util.promisify.custom\")]=async(e,t,n={})=>{let{keyMap:r=pi}=n,o=Zs(n,ii);return oi[Symbol.for(\"nodejs.util.promisify.custom\")](e,t,li({keyMap:r,nodeTypeGetter:ci,nodePredicate:ui},o))};const di=(e,t,n={})=>{if(0===t.length)return e;const r=So(Js,\"toolboxCreator\",n),o=So({},\"visitorOptions\",n),s=So(ci,\"nodeTypeGetter\",o),i=r(),a=t.map((e=>e(i))),l=ri(a.map(So({},\"visitor\")),{nodeTypeGetter:s});a.forEach(is([\"pre\"],[]));const c=fi(e,l,o);return a.forEach(is([\"post\"],[])),c};function mi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gi(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?mi(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):mi(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const yi=(e,{Type:t,plugins:n=[]})=>{const r=new t(e);return di(r,n,{toolboxCreator:Js,visitorOptions:{nodeTypeGetter:ci}})},vi=e=>(t,n={})=>yi(t,gi(gi({},n),{},{Type:e}));Pt.Sb.refract=vi(Pt.Sb),Pt.ON.refract=vi(Pt.ON),Pt.RP.refract=vi(Pt.RP),Pt.hh.refract=vi(Pt.hh),Pt.zr.refract=vi(Pt.zr),Pt.VL.refract=vi(Pt.VL),Pt.EA.refract=vi(Pt.EA),Pt.tK.refract=vi(Pt.tK),It.refract=vi(It),Rt.refract=vi(Rt),zo.refract=vi(zo),Wo.refract=vi(Wo);const bi=(e,t=new WeakMap)=>(Es(e)?(t.set(e.key,e),bi(e.key,t),t.set(e.value,e),bi(e.value,t)):e.children.forEach((n=>{t.set(n,e),bi(n,t)})),t),wi=Ys.init((function({element:e}){let t;this.transclude=function(n,r){var o;if(n===e)return r;if(n===r)return e;t=null!==(o=t)&&void 0!==o?o:bi(e);const s=t.get(n);return qo(s)?void 0:(bs(s)?((e,t,n)=>{const r=n.get(e);bs(r)&&(r.content=r.map(((o,s,i)=>i===e?(n.delete(e),n.set(t,r),t):i)))})(n,r,t):ws(s)?((e,t,n)=>{const r=n.get(e);ws(r)&&(r.content=r.map((o=>o===e?(n.delete(e),n.set(t,r),t):o)))})(n,r,t):Es(s)&&((e,t,n)=>{const r=n.get(e);Es(r)&&(r.key===e&&(r.key=t,n.delete(e),n.set(t,r)),r.value===e&&(r.value=t,n.delete(e),n.set(t,r)))})(n,r,t),e)}})),Ei=wi,xi=[\"keyMap\"],Si=[\"keyMap\"];function _i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ji(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?_i(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Oi=e=>\"string\"==typeof(null==e?void 0:e.type)?e.type:ci(e),ki=ji({EphemeralObject:[\"content\"],EphemeralArray:[\"content\"]},pi),Ai=(e,t,n={})=>{let{keyMap:r=ki}=n,o=Zs(n,xi);return fi(e,t,ji({keyMap:r,nodeTypeGetter:Oi,nodePredicate:Dt,detectCycles:!1,deleteNodeSymbol:Symbol.for(\"delete-node\"),skipVisitingNodeSymbol:Symbol.for(\"skip-visiting-node\")},o))};Ai[Symbol.for(\"nodejs.util.promisify.custom\")]=async(e,t={})=>{let{keyMap:n=ki}=t,r=Zs(t,Si);return fi[Symbol.for(\"nodejs.util.promisify.custom\")](e,visitor,ji({keyMap:n,nodeTypeGetter:Oi,nodePredicate:Dt,detectCycles:!1,deleteNodeSymbol:Symbol.for(\"delete-node\"),skipVisitingNodeSymbol:Symbol.for(\"skip-visiting-node\")},r))};const Ci=class{constructor(e){Xo(this,\"type\",\"EphemeralArray\"),Xo(this,\"content\",[]),Xo(this,\"reference\",void 0),this.content=e,this.reference=[]}toReference(){return this.reference}toArray(){return this.reference.push(...this.content),this.reference}};const Pi=class{constructor(e){Xo(this,\"type\",\"EphemeralObject\"),Xo(this,\"content\",[]),Xo(this,\"reference\",void 0),this.content=e,this.reference={}}toReference(){return this.reference}toObject(){return Object.assign(this.reference,Object.fromEntries(this.content))}},Ni=Ys.init((function(){const e=new WeakMap;this.BooleanElement=function(e){return e.toValue()},this.NumberElement=function(e){return e.toValue()},this.StringElement=function(e){return e.toValue()},this.NullElement=function(){return null},this.ObjectElement={enter(t){if(e.has(t))return e.get(t).toReference();const n=new Pi(t.content);return e.set(t,n),n}},this.EphemeralObject={leave:e=>e.toObject()},this.MemberElement={enter:e=>[e.key,e.value]},this.ArrayElement={enter(t){if(e.has(t))return e.get(t).toReference();const n=new Ci(t.content);return e.set(t,n),n}},this.EphemeralArray={leave:e=>e.toArray()}})),Ii=(e,t=Vs)=>{if(Xs(e))try{return t.fromRefract(JSON.parse(e))}catch{}return $s(e)&&Hr(\"element\",e)?t.fromRefract(e):t.toElement(e)},Ti=e=>Ai(e,Ni());const Ri=hn(\"\");var Mi=cr(Zt(1,gr(cn,Xr(\"Number\"))),isFinite);var Di=Zt(1,Mi);var Fi=cr(ts(Number.isFinite)?Zt(1,$n(Number.isFinite,Number)):Di,vr(hn,[Math.floor,eo]));var Li=Zt(1,Fi);const Bi=ts(Number.isInteger)?Zt(1,$n(Number.isInteger,Number)):Li;var $i=Or((function(e,t){return gr(Io(\"\"),$r(as(e)),io(\"\"))(t)}));const qi=$i;class Ui extends Error{constructor(e){super(`Invalid $ref pointer \"${e}\". Pointers must begin with \"/\"`),this.name=this.constructor.name,this.message=`Invalid $ref pointer \"${e}\". Pointers must begin with \"/\"`,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(`Invalid $ref pointer \"${e}\". Pointers must begin with \"/\"`).stack}}class zi extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}const Vi=gr(Co(/~/g,\"~0\"),Co(/\\//g,\"~1\"),encodeURIComponent),Wi=gr(Co(/~1/g,\"/\"),Co(/~0/g,\"~\"),(e=>{try{return decodeURIComponent(e)}catch{return e}})),Ji=(e,t)=>{const n=(e=>{if(Ri(e))return[];if(!To(\"/\",e))throw new Ui(e);const t=gr(Io(\"/\"),Cn(Wi))(e);return mr(t)})(e);return n.reduce(((e,t)=>{if(bs(e)){if(!e.hasKey(t))throw new zi(`Evaluation failed on token: \"${t}\"`);return e.get(t)}if(ws(e)){if(!(t in e.content)||!Bi(Number(t)))throw new zi(`Evaluation failed on token: \"${t}\"`);return e.get(Number(t))}throw new zi(`Evaluation failed on token: \"${t}\"`)}),t)},Ki=e=>{const t=(e=>{const t=e.indexOf(\"#\");return-1!==t?e.substring(t):\"#\"})(e);return qi(\"#\",t)};class Hi extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"callback\"}}const Gi=Hi;class Zi extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"components\"}get schemas(){return this.get(\"schemas\")}set schemas(e){this.set(\"schemas\",e)}get responses(){return this.get(\"responses\")}set responses(e){this.set(\"responses\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get requestBodies(){return this.get(\"requestBodies\")}set requestBodies(e){this.set(\"requestBodies\",e)}get headers(){return this.get(\"headers\")}set headers(e){this.set(\"headers\",e)}get securitySchemes(){return this.get(\"securitySchemes\")}set securitySchemes(e){this.set(\"securitySchemes\",e)}get links(){return this.get(\"links\")}set links(e){this.set(\"links\",e)}get callbacks(){return this.get(\"callbacks\")}set callbacks(e){this.set(\"callbacks\",e)}}const Yi=Zi;class Xi extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"contact\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}get email(){return this.get(\"email\")}set email(e){this.set(\"email\",e)}}const Qi=Xi;class ea extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"discriminator\"}get propertyName(){return this.get(\"propertyName\")}set propertyName(e){this.set(\"propertyName\",e)}get mapping(){return this.get(\"mapping\")}set mapping(e){this.set(\"mapping\",e)}}const ta=ea;class na extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"encoding\"}get contentType(){return this.get(\"contentType\")}set contentType(e){this.set(\"contentType\",e)}get headers(){return this.get(\"headers\")}set headers(e){this.set(\"headers\",e)}get style(){return this.get(\"style\")}set style(e){this.set(\"style\",e)}get explode(){return this.get(\"explode\")}set explode(e){this.set(\"explode\",e)}get allowedReserved(){return this.get(\"allowedReserved\")}set allowedReserved(e){this.set(\"allowedReserved\",e)}}const ra=na;class oa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"example\"}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get value(){return this.get(\"value\")}set value(e){this.set(\"value\",e)}get externalValue(){return this.get(\"externalValue\")}set externalValue(e){this.set(\"externalValue\",e)}}const sa=oa;class ia extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"externalDocumentation\"}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}}const aa=ia;class la extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"header\"}get required(){return this.hasKey(\"required\")?this.get(\"required\"):new Pt.hh(!1)}set required(e){this.set(\"required\",e)}get deprecated(){return this.hasKey(\"deprecated\")?this.get(\"deprecated\"):new Pt.hh(!1)}set deprecated(e){this.set(\"deprecated\",e)}get allowEmptyValue(){return this.get(\"allowEmptyValue\")}set allowEmptyValue(e){this.set(\"allowEmptyValue\",e)}get style(){return this.get(\"style\")}set style(e){this.set(\"style\",e)}get explode(){return this.get(\"explode\")}set explode(e){this.set(\"explode\",e)}get allowReserved(){return this.get(\"allowReserved\")}set allowReserved(e){this.set(\"allowReserved\",e)}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}}Object.defineProperty(la.prototype,\"description\",{get(){return this.get(\"description\")},set(e){this.set(\"description\",e)},enumerable:!0});const ca=la;class ua extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"info\",this.classes.push(\"info\")}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get termsOfService(){return this.get(\"termsOfService\")}set termsOfService(e){this.set(\"termsOfService\",e)}get contact(){return this.get(\"contact\")}set contact(e){this.set(\"contact\",e)}get license(){return this.get(\"license\")}set license(e){this.set(\"license\",e)}get version(){return this.get(\"version\")}set version(e){this.set(\"version\",e)}}const pa=ua;class ha extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"license\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}}const fa=ha;class da extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"link\"}get operationRef(){return this.get(\"operationRef\")}set operationRef(e){this.set(\"operationRef\",e)}get operationId(){return this.get(\"operationId\")}set operationId(e){this.set(\"operationId\",e)}get operation(){var e,t;return ms(this.operationRef)?null===(e=this.operationRef)||void 0===e?void 0:e.meta.get(\"operation\"):ms(this.operationId)?null===(t=this.operationId)||void 0===t?void 0:t.meta.get(\"operation\"):void 0}set operation(e){this.set(\"operation\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}get requestBody(){return this.get(\"requestBody\")}set requestBody(e){this.set(\"requestBody\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get server(){return this.get(\"server\")}set server(e){this.set(\"server\",e)}}const ma=da;class ga extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"mediaType\"}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get encoding(){return this.get(\"encoding\")}set encoding(e){this.set(\"encoding\",e)}}const ya=ga;class va extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"oAuthFlow\"}get authorizationUrl(){return this.get(\"authorizationUrl\")}set authorizationUrl(e){this.set(\"authorizationUrl\",e)}get tokenUrl(){return this.get(\"tokenUrl\")}set tokenUrl(e){this.set(\"tokenUrl\",e)}get refreshUrl(){return this.get(\"refreshUrl\")}set refreshUrl(e){this.set(\"refreshUrl\",e)}get scopes(){return this.get(\"scopes\")}set scopes(e){this.set(\"scopes\",e)}}const ba=va;class wa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"oAuthFlows\"}get implicit(){return this.get(\"implicit\")}set implicit(e){this.set(\"implicit\",e)}get password(){return this.get(\"password\")}set password(e){this.set(\"password\",e)}get clientCredentials(){return this.get(\"clientCredentials\")}set clientCredentials(e){this.set(\"clientCredentials\",e)}get authorizationCode(){return this.get(\"authorizationCode\")}set authorizationCode(e){this.set(\"authorizationCode\",e)}}const Ea=wa;class xa extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"openapi\",this.classes.push(\"spec-version\"),this.classes.push(\"version\")}}const Sa=xa;class _a extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"openApi3_0\",this.classes.push(\"api\")}get openapi(){return this.get(\"openapi\")}set openapi(e){this.set(\"openapi\",e)}get info(){return this.get(\"info\")}set info(e){this.set(\"info\",e)}get servers(){return this.get(\"servers\")}set servers(e){this.set(\"servers\",e)}get paths(){return this.get(\"paths\")}set paths(e){this.set(\"paths\",e)}get components(){return this.get(\"components\")}set components(e){this.set(\"components\",e)}get security(){return this.get(\"security\")}set security(e){this.set(\"security\",e)}get tags(){return this.get(\"tags\")}set tags(e){this.set(\"tags\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}}const ja=_a;class Oa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"operation\"}get tags(){return this.get(\"tags\")}set tags(e){this.set(\"tags\",e)}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}set externalDocs(e){this.set(\"externalDocs\",e)}get externalDocs(){return this.get(\"externalDocs\")}get operationId(){return this.get(\"operationId\")}set operationId(e){this.set(\"operationId\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}get requestBody(){return this.get(\"requestBody\")}set requestBody(e){this.set(\"requestBody\",e)}get responses(){return this.get(\"responses\")}set responses(e){this.set(\"responses\",e)}get callbacks(){return this.get(\"callbacks\")}set callbacks(e){this.set(\"callbacks\",e)}get deprecated(){return this.hasKey(\"deprecated\")?this.get(\"deprecated\"):new Pt.hh(!1)}set deprecated(e){this.set(\"deprecated\",e)}get security(){return this.get(\"security\")}set security(e){this.set(\"security\",e)}get servers(){return this.get(\"severs\")}set servers(e){this.set(\"servers\",e)}}const ka=Oa;class Aa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"parameter\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get in(){return this.get(\"in\")}set in(e){this.set(\"in\",e)}get required(){return this.hasKey(\"required\")?this.get(\"required\"):new Pt.hh(!1)}set required(e){this.set(\"required\",e)}get deprecated(){return this.hasKey(\"deprecated\")?this.get(\"deprecated\"):new Pt.hh(!1)}set deprecated(e){this.set(\"deprecated\",e)}get allowEmptyValue(){return this.get(\"allowEmptyValue\")}set allowEmptyValue(e){this.set(\"allowEmptyValue\",e)}get style(){return this.get(\"style\")}set style(e){this.set(\"style\",e)}get explode(){return this.get(\"explode\")}set explode(e){this.set(\"explode\",e)}get allowReserved(){return this.get(\"allowReserved\")}set allowReserved(e){this.set(\"allowReserved\",e)}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}}Object.defineProperty(Aa.prototype,\"description\",{get(){return this.get(\"description\")},set(e){this.set(\"description\",e)},enumerable:!0});const Ca=Aa;class Pa extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"pathItem\"}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get GET(){return this.get(\"get\")}set GET(e){this.set(\"GET\",e)}get PUT(){return this.get(\"put\")}set PUT(e){this.set(\"PUT\",e)}get POST(){return this.get(\"post\")}set POST(e){this.set(\"POST\",e)}get DELETE(){return this.get(\"delete\")}set DELETE(e){this.set(\"DELETE\",e)}get OPTIONS(){return this.get(\"options\")}set OPTIONS(e){this.set(\"OPTIONS\",e)}get HEAD(){return this.get(\"head\")}set HEAD(e){this.set(\"HEAD\",e)}get PATCH(){return this.get(\"patch\")}set PATCH(e){this.set(\"PATCH\",e)}get TRACE(){return this.get(\"trace\")}set TRACE(e){this.set(\"TRACE\",e)}get servers(){return this.get(\"servers\")}set servers(e){this.set(\"servers\",e)}get parameters(){return this.get(\"parameters\")}set parameters(e){this.set(\"parameters\",e)}}const Na=Pa;class Ia extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"paths\"}}const Ta=Ia;class Ra extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"reference\",this.classes.push(\"openapi-reference\")}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}}const Ma=Ra;class Da extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"requestBody\"}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}get required(){return this.hasKey(\"required\")?this.get(\"required\"):new Pt.hh(!1)}set required(e){this.set(\"required\",e)}}const Fa=Da;class La extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"response\"}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get headers(){return this.get(\"headers\")}set headers(e){this.set(\"headers\",e)}get contentProp(){return this.get(\"content\")}set contentProp(e){this.set(\"content\",e)}get links(){return this.get(\"links\")}set links(e){this.set(\"links\",e)}}const Ba=La;class $a extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"responses\"}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}}const qa=$a;class Ua extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"JSONSchemaDraft4\"}get idProp(){return this.get(\"id\")}set idProp(e){this.set(\"id\",e)}get $schema(){return this.get(\"$schema\")}set $schema(e){this.set(\"idProp\",e)}get multipleOf(){return this.get(\"multipleOf\")}set multipleOf(e){this.set(\"multipleOf\",e)}get maximum(){return this.get(\"maximum\")}set maximum(e){this.set(\"maximum\",e)}get exclusiveMaximum(){return this.get(\"exclusiveMaximum\")}set exclusiveMaximum(e){this.set(\"exclusiveMaximum\",e)}get minimum(){return this.get(\"minimum\")}set minimum(e){this.set(\"minimum\",e)}get exclusiveMinimum(){return this.get(\"exclusiveMinimum\")}set exclusiveMinimum(e){this.set(\"exclusiveMinimum\",e)}get maxLength(){return this.get(\"maxLength\")}set maxLength(e){this.set(\"maxLength\",e)}get minLength(){return this.get(\"minLength\")}set minLength(e){this.set(\"minLength\",e)}get pattern(){return this.get(\"pattern\")}set pattern(e){this.set(\"pattern\",e)}get additionalItems(){return this.get(\"additionalItems\")}set additionalItems(e){this.set(\"additionalItems\",e)}get items(){return this.get(\"items\")}set items(e){this.set(\"items\",e)}get maxItems(){return this.get(\"maxItems\")}set maxItems(e){this.set(\"maxItems\",e)}get minItems(){return this.get(\"minItems\")}set minItems(e){this.set(\"minItems\",e)}get uniqueItems(){return this.get(\"uniqueItems\")}set uniqueItems(e){this.set(\"uniqueItems\",e)}get maxProperties(){return this.get(\"maxProperties\")}set maxProperties(e){this.set(\"maxProperties\",e)}get minProperties(){return this.get(\"minProperties\")}set minProperties(e){this.set(\"minProperties\",e)}get required(){return this.get(\"required\")}set required(e){this.set(\"required\",e)}get properties(){return this.get(\"properties\")}set properties(e){this.set(\"properties\",e)}get additionalProperties(){return this.get(\"additionalProperties\")}set additionalProperties(e){this.set(\"additionalProperties\",e)}get patternProperties(){return this.get(\"patternProperties\")}set patternProperties(e){this.set(\"patternProperties\",e)}get dependencies(){return this.get(\"dependencies\")}set dependencies(e){this.set(\"dependencies\",e)}get enum(){return this.get(\"enum\")}set enum(e){this.set(\"enum\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get allOf(){return this.get(\"allOf\")}set allOf(e){this.set(\"allOf\",e)}get anyOf(){return this.get(\"anyOf\")}set anyOf(e){this.set(\"anyOf\",e)}get oneOf(){return this.get(\"oneOf\")}set oneOf(e){this.set(\"oneOf\",e)}get not(){return this.get(\"not\")}set not(e){this.set(\"not\",e)}get definitions(){return this.get(\"definitions\")}set definitions(e){this.set(\"definitions\",e)}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}get format(){return this.get(\"format\")}set format(e){this.set(\"format\",e)}get base(){return this.get(\"base\")}set base(e){this.set(\"base\",e)}get links(){return this.get(\"links\")}set links(e){this.set(\"links\",e)}get media(){return this.get(\"media\")}set media(e){this.set(\"media\",e)}get readOnly(){return this.get(\"readOnly\")}set readOnly(e){this.set(\"readOnly\",e)}}const za=Ua;class Va extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"JSONReference\",this.classes.push(\"json-reference\")}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}}const Wa=Va;class Ja extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"media\"}get binaryEncoding(){return this.get(\"binaryEncoding\")}set binaryEncoding(e){this.set(\"binaryEncoding\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}}const Ka=Ja;class Ha extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"linkDescription\"}get href(){return this.get(\"href\")}set href(e){this.set(\"href\",e)}get rel(){return this.get(\"rel\")}set rel(e){this.set(\"rel\",e)}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get targetSchema(){return this.get(\"targetSchema\")}set targetSchema(e){this.set(\"targetSchema\",e)}get mediaType(){return this.get(\"mediaType\")}set mediaType(e){this.set(\"mediaType\",e)}get method(){return this.get(\"method\")}set method(e){this.set(\"method\",e)}get encType(){return this.get(\"encType\")}set encType(e){this.set(\"encType\",e)}get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}}const Ga=Ha,Za=(e,t)=>{const n=kr(e,t);return po((e=>{if($s(e)&&Hr(\"$ref\",e)&&_o(Xs,\"$ref\",e)){const t=uo([\"$ref\"],e),r=qi(\"#/\",t);return uo(r.split(\"/\"),n)}return $s(e)?Za(e,n):e}),e)},Ya=Ys({props:{element:null},methods:{copyMetaAndAttributes(e,t){Cs(e)&&t.meta.set(\"sourceMap\",e.meta.get(\"sourceMap\"))}}}),Xa=Ya,Qa=Ys(Xa,{methods:{enter(e){return this.element=e.clone(),ei}}});const el=Hn($o());function tl(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const nl=e=>{if(ds(e))return`${e.element.charAt(0).toUpperCase()+e.element.slice(1)}Element`},rl=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tl(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tl(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({JSONSchemaDraft4Element:[\"content\"],JSONReferenceElement:[\"content\"],MediaElement:[\"content\"],LinkDescriptionElement:[\"content\"]},pi);function ol(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function sl(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ol(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ol(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const il=Ys(Xa,{props:{specObj:null,passingOptionsNames:[\"specObj\"]},init({specObj:e=this.specObj}){this.specObj=e},methods:{retrievePassingOptions(){return Eo(this.passingOptionsNames,this)},retrieveFixedFields(e){return gr(uo([\"visitors\",...e,\"fixedFields\"]),ln)(this.specObj)},retrieveVisitor(e){return wo(ts,[\"visitors\",...e],this.specObj)?uo([\"visitors\",...e],this.specObj):uo([\"visitors\",...e,\"$visitor\"],this.specObj)},retrieveVisitorInstance(e,t={}){const n=this.retrievePassingOptions();return this.retrieveVisitor(e)(sl(sl({},n),t))},toRefractedElement(e,t,n={}){const r=this.retrieveVisitorInstance(e,n),o=Object.getPrototypeOf(r);return qo(this.fallbackVisitorPrototype)&&(this.fallbackVisitorPrototype=Object.getPrototypeOf(this.retrieveVisitorInstance([\"value\"]))),this.fallbackVisitorPrototype===o?t.clone():(fi(t,r,sl({keyMap:rl,nodeTypeGetter:nl},n)),r.element)}}}),al=Ys(il,{props:{specPath:el,ignoredFields:[]},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields}={}){this.specPath=e,this.ignoredFields=t},methods:{ObjectElement(e){const t=this.specPath(e),n=this.retrieveFixedFields(t);return e.forEach(((e,r,o)=>{if(ms(r)&&n.includes(r.toValue())&&!this.ignoredFields.includes(r.toValue())){const n=this.toRefractedElement([...t,\"fixedFields\",r.toValue()],e),s=new Pt.c6(r.clone(),n);this.copyMetaAndAttributes(o,s),s.classes.push(\"fixed-field\"),this.element.content.push(s)}else this.ignoredFields.includes(r.toValue())||this.element.content.push(o.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),ll=al,cl=Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"JSONSchema\"])},init(){this.element=new za}}),ul=Qa,pl=Qa,hl=Qa,fl=Qa,dl=Qa,ml=Qa,gl=Qa,yl=Qa,vl=Qa,bl=Qa,wl=Ys({props:{parent:null},init({parent:e=this.parent}){this.parent=e,this.passingOptionsNames=[...this.passingOptionsNames,\"parent\"]}}),El=e=>bs(e)&&e.hasKey(\"$ref\"),xl=Ys(il,wl,Qa,{methods:{ObjectElement(e){const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"];return this.element=this.toRefractedElement(t,e),ei},ArrayElement(e){return this.element=new Pt.ON,this.element.classes.push(\"json-schema-items\"),e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Sl=Qa,_l=Qa,jl=Qa,Ol=Qa,kl=Qa,Al=Ys(Qa,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-required\"),ei}}});const Cl=pr(Zt(1,cr(Ts,Ur(Ms,ts))));const Pl=pr(so);const Nl=Kn([Xs,Cl,Pl]),Il=Ys(il,{props:{fieldPatternPredicate:Mt,specPath:el,ignoredFields:[]},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields}={}){this.specPath=e,this.ignoredFields=t},methods:{ObjectElement(e){return e.forEach(((e,t,n)=>{if(!this.ignoredFields.includes(t.toValue())&&this.fieldPatternPredicate(t.toValue())){const r=this.specPath(e),o=this.toRefractedElement(r,e),s=new Pt.c6(t.clone(),o);this.copyMetaAndAttributes(n,s),s.classes.push(\"patterned-field\"),this.element.content.push(s)}else this.ignoredFields.includes(t.toValue())||this.element.content.push(n.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),Tl=Ys(Il,{props:{fieldPatternPredicate:Nl}}),Rl=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-properties\")}}),Ml=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-patternProperties\")}}),Dl=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-dependencies\")}}),Fl=Ys(Qa,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-enum\"),ei}}}),Ll=Ys(Qa,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei},ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei}}}),Bl=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-allOf\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),$l=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-anyOf\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),ql=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-oneOf\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Ul=Ys(Tl,wl,Qa,{props:{specPath:e=>El(e)?[\"document\",\"objects\",\"JSONReference\"]:[\"document\",\"objects\",\"JSONSchema\"]},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-definitions\")}}),zl=Qa,Vl=Qa,Wl=Qa,Jl=Qa,Kl=Qa,Hl=Ys(il,wl,Qa,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-links\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=this.toRefractedElement([\"document\",\"objects\",\"LinkDescription\"],e);this.element.push(t)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Gl=Qa,Zl=Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"JSONReference\"])},init(){this.element=new Wa},methods:{ObjectElement(e){const t=ll.compose.methods.ObjectElement.call(this,e);return ms(this.element.$ref)&&this.element.classes.push(\"reference-element\"),t}}}),Yl=Ys(Qa,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}});const Xl=pr(rr);const Ql=cr(rs,Pl);function ec(e){return function(e){if(Array.isArray(e))return tc(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return tc(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tc(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function tc(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var nc=gr(No(ur((function(e,t){return e.length>t.length}))),Zr,Tn(\"length\")),rc=Or((function(e,t,n){var r=n.apply(void 0,ec(e));return Xl(r)?Ao(r):t}));const oc=to(Ql,(function(e){var t=nc(e);return Zt(t,(function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return Jn(rc(n),void 0,e)}))}),$o),sc=Ys(il,{props:{alternator:[]},methods:{enter(e){const t=this.alternator.map((({predicate:e,specPath:t})=>to(e,Hn(t),$o))),n=oc(t)(e);return this.element=this.toRefractedElement(n,e),ei}}}),ic=Ys(sc,{props:{alternator:[{predicate:El,specPath:[\"document\",\"objects\",\"JSONReference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"JSONSchema\"]}]}}),ac={visitors:{value:Qa,JSONSchemaOrJSONReferenceVisitor:ic,document:{objects:{JSONSchema:{$visitor:cl,fixedFields:{id:ul,$schema:pl,multipleOf:hl,maximum:fl,exclusiveMaximum:dl,minimum:ml,exclusiveMinimum:gl,maxLength:yl,minLength:vl,pattern:bl,additionalItems:ic,items:xl,maxItems:Sl,minItems:_l,uniqueItems:jl,maxProperties:Ol,minProperties:kl,required:Al,properties:Rl,additionalProperties:ic,patternProperties:Ml,dependencies:Dl,enum:Fl,type:Ll,allOf:Bl,anyOf:$l,oneOf:ql,not:ic,definitions:Ul,title:zl,description:Vl,default:Wl,format:Jl,base:Kl,links:Hl,media:{$ref:\"#/visitors/document/objects/Media\"},readOnly:Gl}},JSONReference:{$visitor:Zl,fixedFields:{$ref:Yl}},Media:{$visitor:Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"Media\"])},init(){this.element=new Ka}}),fixedFields:{binaryEncoding:Qa,type:Qa}},LinkDescription:{$visitor:Ys(ll,Qa,{props:{specPath:Hn([\"document\",\"objects\",\"LinkDescription\"])},init(){this.element=new Ga}}),fixedFields:{href:Qa,rel:Qa,title:Qa,targetSchema:ic,mediaType:Qa,method:Qa,encType:Qa,schema:ic}}}}}},lc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof za||e(r)&&t(\"JSONSchemaDraft4\",r)&&n(\"object\",r))),cc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Wa||e(r)&&t(\"JSONReference\",r)&&n(\"object\",r))),uc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ka||e(r)&&t(\"media\",r)&&n(\"object\",r))),pc=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ga||e(r)&&t(\"linkDescription\",r)&&n(\"object\",r))),hc={namespace:e=>{const{base:t}=e;return t.register(\"jSONSchemaDraft4\",za),t.register(\"jSONReference\",Wa),t.register(\"media\",Ka),t.register(\"linkDescription\",Ga),t}};function fc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?fc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):fc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const mc=()=>{const e=zs(hc);return{predicates:dc(dc({},i),{},{isStringElement:ms}),namespace:e}};function gc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const yc=(e,{specPath:t=[\"visitors\",\"document\",\"objects\",\"JSONSchema\",\"$visitor\"],plugins:n=[],specificationObj:r=ac}={})=>{const o=(0,Pt.Qc)(e),s=Za(r),i=is(t,[],s);return fi(o,i,{state:{specObj:s}}),di(i.element,n,{toolboxCreator:mc,visitorOptions:{keyMap:rl,nodeTypeGetter:nl}})},vc=e=>(t,n={})=>yc(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?gc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):gc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({specPath:e},n));za.refract=vc([\"visitors\",\"document\",\"objects\",\"JSONSchema\",\"$visitor\"]),Wa.refract=vc([\"visitors\",\"document\",\"objects\",\"JSONReference\",\"$visitor\"]),Ka.refract=vc([\"visitors\",\"document\",\"objects\",\"Media\",\"$visitor\"]),Ga.refract=vc([\"visitors\",\"document\",\"objects\",\"LinkDescription\",\"$visitor\"]);const bc=class extends za{constructor(e,t,n){super(e,t,n),this.element=\"schema\",this.classes.push(\"json-schema-draft-4\")}get additionalItems(){return this.get(\"additionalItems\")}set additionalItems(e){this.set(\"additionalItems\",e)}get items(){return this.get(\"items\")}set items(e){this.set(\"items\",e)}get additionalProperties(){return this.get(\"additionalProperties\")}set additionalProperties(e){this.set(\"additionalProperties\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get not(){return this.get(\"not\")}set not(e){this.set(\"not\",e)}get nullable(){return this.get(\"nullable\")}set nullable(e){this.set(\"nullable\",e)}get discriminator(){return this.get(\"discriminator\")}set discriminator(e){this.set(\"discriminator\",e)}get writeOnly(){return this.get(\"writeOnly\")}set writeOnly(e){this.set(\"writeOnly\",e)}get xml(){return this.get(\"xml\")}set xml(e){this.set(\"xml\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}get deprecated(){return this.get(\"deprecated\")}set deprecated(e){this.set(\"deprecated\",e)}};class wc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"securityRequirement\"}}const Ec=wc;class xc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"securityScheme\"}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get in(){return this.get(\"in\")}set in(e){this.set(\"in\",e)}get scheme(){return this.get(\"scheme\")}set scheme(e){this.set(\"scheme\",e)}get bearerFormat(){return this.get(\"bearerFormat\")}set bearerFormat(e){this.set(\"bearerFormat\",e)}get flows(){return this.get(\"flows\")}set flows(e){this.set(\"flows\",e)}get openIdConnectUrl(){return this.get(\"openIdConnectUrl\")}set openIdConnectUrl(e){this.set(\"openIdConnectUrl\",e)}}const Sc=xc;class _c extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"server\"}get url(){return this.get(\"url\")}set url(e){this.set(\"url\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get variables(){return this.get(\"variables\")}set variables(e){this.set(\"variables\",e)}}const jc=_c;class Oc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"serverVariable\"}get enum(){return this.get(\"enum\")}set enum(e){this.set(\"enum\",e)}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}}const kc=Oc;class Ac extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"tag\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}}const Cc=Ac;class Pc extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"xml\"}get name(){return this.get(\"name\")}set name(e){this.set(\"name\",e)}get namespace(){return this.get(\"namespace\")}set namespace(e){this.set(\"namespace\",e)}get prefix(){return this.get(\"prefix\")}set prefix(e){this.set(\"prefix\",e)}get attribute(){return this.get(\"attribute\")}set attribute(e){this.set(\"attribute\",e)}get wrapped(){return this.get(\"wrapped\")}set wrapped(e){this.set(\"wrapped\",e)}}const Nc=Pc,Ic=Ys({props:{element:null},methods:{copyMetaAndAttributes(e,t){Cs(e)&&t.meta.set(\"sourceMap\",e.meta.get(\"sourceMap\"))}}}),Tc=Ic;function Rc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Mc=e=>{if(ds(e))return`${e.element.charAt(0).toUpperCase()+e.element.slice(1)}Element`},Dc=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Rc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Rc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({CallbackElement:[\"content\"],ComponentsElement:[\"content\"],ContactElement:[\"content\"],DiscriminatorElement:[\"content\"],Encoding:[\"content\"],Example:[\"content\"],ExternalDocumentationElement:[\"content\"],HeaderElement:[\"content\"],InfoElement:[\"content\"],LicenseElement:[\"content\"],MediaTypeElement:[\"content\"],OAuthFlowElement:[\"content\"],OAuthFlowsElement:[\"content\"],OpenApi3_0Element:[\"content\"],OperationElement:[\"content\"],ParameterElement:[\"content\"],PathItemElement:[\"content\"],PathsElement:[\"content\"],ReferenceElement:[\"content\"],RequestBodyElement:[\"content\"],ResponseElement:[\"content\"],ResponsesElement:[\"content\"],SchemaElement:[\"content\"],SecurityRequirementElement:[\"content\"],SecuritySchemeElement:[\"content\"],ServerElement:[\"content\"],ServerVariableElement:[\"content\"],TagElement:[\"content\"]},pi);function Fc(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Lc(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Fc(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Fc(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Bc=Ys(Tc,{props:{passingOptionsNames:[\"specObj\",\"openApiGenericElement\",\"openApiSemanticElement\"],specObj:null,openApiGenericElement:null,openApiSemanticElement:null},init({specObj:e=this.specObj,openApiGenericElement:t=this.openApiGenericElement,openApiSemanticElement:n=this.openApiSemanticElement}){this.specObj=e,this.openApiGenericElement=t,this.openApiSemanticElement=n},methods:{retrievePassingOptions(){return Eo(this.passingOptionsNames,this)},retrieveFixedFields(e){return gr(uo([\"visitors\",...e,\"fixedFields\"]),ln)(this.specObj)},retrieveVisitor(e){return wo(ts,[\"visitors\",...e],this.specObj)?uo([\"visitors\",...e],this.specObj):uo([\"visitors\",...e,\"$visitor\"],this.specObj)},retrieveVisitorInstance(e,t={}){const n=this.retrievePassingOptions();return this.retrieveVisitor(e)(Lc(Lc({},n),t))},toRefractedElement(e,t,n={}){const r=this.retrieveVisitorInstance(e,n),o=Object.getPrototypeOf(r);return qo(this.fallbackVisitorPrototype)&&(this.fallbackVisitorPrototype=Object.getPrototypeOf(this.retrieveVisitorInstance([\"value\"]))),this.fallbackVisitorPrototype===o?t.clone():(fi(t,r,Lc({keyMap:Dc,nodeTypeGetter:Mc},n)),r.element)}}}),$c=e=>bs(e)&&e.hasKey(\"openapi\")&&e.hasKey(\"info\"),qc=e=>bs(e)&&e.hasKey(\"name\")&&e.hasKey(\"in\"),Uc=e=>bs(e)&&e.hasKey(\"$ref\"),zc=e=>bs(e)&&e.hasKey(\"content\"),Vc=e=>bs(e)&&e.hasKey(\"description\"),Wc=bs,Jc=bs,Kc=e=>ms(e.key)&&To(\"x-\",e.key.toValue()),Hc=Ys(Bc,{props:{specPath:el,ignoredFields:[],canSupportSpecificationExtensions:!0,specificationExtensionPredicate:Kc},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields,canSupportSpecificationExtensions:n=this.canSupportSpecificationExtensions,specificationExtensionPredicate:r=this.specificationExtensionPredicate}={}){this.specPath=e,this.ignoredFields=t,this.canSupportSpecificationExtensions=n,this.specificationExtensionPredicate=r},methods:{ObjectElement(e){const t=this.specPath(e),n=this.retrieveFixedFields(t);return e.forEach(((e,r,o)=>{if(ms(r)&&n.includes(r.toValue())&&!this.ignoredFields.includes(r.toValue())){const n=this.toRefractedElement([...t,\"fixedFields\",r.toValue()],e),s=new Pt.c6(r.clone(),n);this.copyMetaAndAttributes(o,s),s.classes.push(\"fixed-field\"),this.element.content.push(s)}else if(this.canSupportSpecificationExtensions&&this.specificationExtensionPredicate(o)){const e=this.toRefractedElement([\"document\",\"extension\"],o);this.element.content.push(e)}else this.ignoredFields.includes(r.toValue())||this.element.content.push(o.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),Gc=Hc,Zc=Ys(Tc,{methods:{enter(e){return this.element=e.clone(),ei}}}),Yc=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OpenApi\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ja},methods:{ObjectElement(e){return this.unrefractedElement=e,Gc.compose.methods.ObjectElement.call(this,e)}}}),Xc=Ys(Bc,Zc,{methods:{StringElement(e){const t=new Sa(e.toValue());return this.copyMetaAndAttributes(e,t),this.element=t,ei}}}),Qc=Ys(Bc,{methods:{MemberElement(e){return this.element=e.clone(),this.element.classes.push(\"specification-extension\"),ei}}}),eu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Info\"]),canSupportSpecificationExtensions:!0},init(){this.element=new pa}}),tu=Zc,nu=Zc,ru=Zc,ou=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"api-version\"),this.element.classes.push(\"version\"),ei}}}),su=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Contact\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Qi}}),iu=Zc,au=Zc,lu=Zc,cu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"License\"]),canSupportSpecificationExtensions:!0},init(){this.element=new fa}}),uu=Zc,pu=Zc,hu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Link\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ma},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return(ms(this.element.operationId)||ms(this.element.operationRef))&&this.element.classes.push(\"reference-element\"),t}}}),fu=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),du=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),mu=Ys(Bc,{props:{fieldPatternPredicate:Mt,specPath:el,ignoredFields:[],canSupportSpecificationExtensions:!1,specificationExtensionPredicate:Kc},init({specPath:e=this.specPath,ignoredFields:t=this.ignoredFields,canSupportSpecificationExtensions:n=this.canSupportSpecificationExtensions,specificationExtensionPredicate:r=this.specificationExtensionPredicate}={}){this.specPath=e,this.ignoredFields=t,this.canSupportSpecificationExtensions=n,this.specificationExtensionPredicate=r},methods:{ObjectElement(e){return e.forEach(((e,t,n)=>{if(this.canSupportSpecificationExtensions&&this.specificationExtensionPredicate(n)){const e=this.toRefractedElement([\"document\",\"extension\"],n);this.element.content.push(e)}else if(!this.ignoredFields.includes(t.toValue())&&this.fieldPatternPredicate(t.toValue())){const r=this.specPath(e),o=this.toRefractedElement(r,e),s=new Pt.c6(t.clone(),o);this.copyMetaAndAttributes(n,s),s.classes.push(\"patterned-field\"),this.element.content.push(s)}else this.ignoredFields.includes(t.toValue())||this.element.content.push(n.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),gu=mu,yu=Ys(gu,{props:{fieldPatternPredicate:Nl}});class vu extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(vu.primaryClass)}}Xo(vu,\"primaryClass\",\"link-parameters\");const bu=vu,wu=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new bu}}),Eu=Zc,xu=Zc,Su=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Server\"]),canSupportSpecificationExtensions:!0},init(){this.element=new jc}}),_u=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"server-url\"),ei}}}),ju=Zc;class Ou extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Ou.primaryClass)}}Xo(Ou,\"primaryClass\",\"servers\");const ku=Ou,Au=Ys(Bc,Zc,{init(){this.element=new ku},methods:{ArrayElement(e){return e.forEach((e=>{const t=Wc(e)?[\"document\",\"objects\",\"Server\"]:[\"value\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),Cu=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"ServerVariable\"]),canSupportSpecificationExtensions:!0},init(){this.element=new kc}}),Pu=Zc,Nu=Zc,Iu=Zc;class Tu extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Tu.primaryClass)}}Xo(Tu,\"primaryClass\",\"server-variables\");const Ru=Tu,Mu=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"ServerVariable\"])},init(){this.element=new Ru}}),Du=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"MediaType\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ya}}),Fu=Ys(Bc,{props:{alternator:[]},methods:{enter(e){const t=this.alternator.map((({predicate:e,specPath:t})=>to(e,Hn(t),$o))),n=oc(t)(e);return this.element=this.toRefractedElement(n,e),ei}}}),Lu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Gi||e(r)&&t(\"callback\",r)&&n(\"object\",r))),Bu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Yi||e(r)&&t(\"components\",r)&&n(\"object\",r))),$u=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Qi||e(r)&&t(\"contact\",r)&&n(\"object\",r))),qu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof sa||e(r)&&t(\"example\",r)&&n(\"object\",r))),Uu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof aa||e(r)&&t(\"externalDocumentation\",r)&&n(\"object\",r))),zu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ca||e(r)&&t(\"header\",r)&&n(\"object\",r))),Vu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof pa||e(r)&&t(\"info\",r)&&n(\"object\",r))),Wu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof fa||e(r)&&t(\"license\",r)&&n(\"object\",r))),Ju=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ma||e(r)&&t(\"link\",r)&&n(\"object\",r))),Ku=e=>{if(!Ju(e))return!1;if(!ms(e.operationRef))return!1;const t=e.operationRef.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},Hu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Sa||e(r)&&t(\"openapi\",r)&&n(\"string\",r))),Gu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n,hasClass:r})=>o=>o instanceof ja||e(o)&&t(\"openApi3_0\",o)&&n(\"object\",o)&&r(\"api\",o))),Zu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ka||e(r)&&t(\"operation\",r)&&n(\"object\",r))),Yu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ca||e(r)&&t(\"parameter\",r)&&n(\"object\",r))),Xu=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Na||e(r)&&t(\"pathItem\",r)&&n(\"object\",r))),Qu=e=>{if(!Xu(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},ep=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ta||e(r)&&t(\"paths\",r)&&n(\"object\",r))),tp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ma||e(r)&&t(\"reference\",r)&&n(\"object\",r))),np=e=>{if(!tp(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},rp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Fa||e(r)&&t(\"requestBody\",r)&&n(\"object\",r))),op=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ba||e(r)&&t(\"response\",r)&&n(\"object\",r))),sp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof qa||e(r)&&t(\"responses\",r)&&n(\"object\",r))),ip=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof bc||e(r)&&t(\"schema\",r)&&n(\"object\",r))),ap=e=>vs(e)&&e.classes.includes(\"boolean-json-schema\"),lp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Ec||e(r)&&t(\"securityRequirement\",r)&&n(\"object\",r))),cp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof jc||e(r)&&t(\"server\",r)&&n(\"object\",r))),up=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof kc||e(r)&&t(\"serverVariable\",r)&&n(\"object\",r))),pp=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ya||e(r)&&t(\"mediaType\",r)&&n(\"object\",r))),hp=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Schema\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),fp=Zc,dp=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Example\"],canSupportSpecificationExtensions:!0},init(){this.element=new Pt.Sb,this.element.classes.push(\"examples\")},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"example\")})),t}}});class mp extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(mp.primaryClass),this.classes.push(\"examples\")}}Xo(mp,\"primaryClass\",\"media-type-examples\");const gp=mp,yp=Ys(dp,{init(){this.element=new gp}});class vp extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(vp.primaryClass)}}Xo(vp,\"primaryClass\",\"media-type-encoding\");const bp=vp,wp=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Encoding\"])},init(){this.element=new bp}}),Ep=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new Ec}});class xp extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(xp.primaryClass)}}Xo(xp,\"primaryClass\",\"security\");const Sp=xp,_p=Ys(Bc,Zc,{init(){this.element=new Sp},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"SecurityRequirement\"],e);this.element.push(t)}else this.element.push(e.clone())})),this.copyMetaAndAttributes(e,this.element),ei}}}),jp=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Components\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Yi}}),Op=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Tag\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Cc}}),kp=Zc,Ap=Zc,Cp=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Reference\"]),canSupportSpecificationExtensions:!1},init(){this.element=new Ma},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return ms(this.element.$ref)&&this.element.classes.push(\"reference-element\"),t}}}),Pp=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),Np=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Parameter\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Ca},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.contentProp)&&this.element.contentProp.filter(pp).forEach(((e,t)=>{e.setMetaProperty(\"media-type\",t.toValue())})),t}}}),Ip=Zc,Tp=Zc,Rp=Zc,Mp=Zc,Dp=Zc,Fp=Zc,Lp=Zc,Bp=Zc,$p=Zc,qp=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Schema\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),Up=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Header\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ca}}),zp=Zc,Vp=Zc,Wp=Zc,Jp=Zc,Kp=Zc,Hp=Zc,Gp=Zc,Zp=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Schema\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),Yp=Zc;class Xp extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Xp.primaryClass),this.classes.push(\"examples\")}}Xo(Xp,\"primaryClass\",\"header-examples\");const Qp=Xp,eh=Ys(dp,{init(){this.element=new Qp}}),th=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"MediaType\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"content\")}});class nh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(nh.primaryClass),this.classes.push(\"content\")}}Xo(nh,\"primaryClass\",\"header-content\");const rh=nh,oh=Ys(th,{init(){this.element=new rh}}),sh=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"]),canSupportSpecificationExtensions:!0},init(){this.element=new bc}}),{items:ih}=ac.visitors.document.objects.JSONSchema.fixedFields,ah=Ys(ih,{methods:{ObjectElement(e){const t=ih.compose.methods.ObjectElement.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t},ArrayElement(e){return this.element=e.clone(),ei}}}),{properties:lh}=ac.visitors.document.objects.JSONSchema.fixedFields,ch=Ys(lh,{methods:{ObjectElement(e){const t=lh.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"schema\")})),t}}}),{type:uh}=ac.visitors.document.objects.JSONSchema.fixedFields,ph=Ys(uh,{methods:{ArrayElement(e){return this.element=e.clone(),ei}}}),hh=Zc,fh=Zc,dh=Zc,mh=Zc,{JSONSchemaOrJSONReferenceVisitor:gh}=ac.visitors,yh=Ys(gh,{methods:{ObjectElement(e){const t=gh.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"schema\"),t}}}),vh=Object.fromEntries(Object.entries(ac.visitors.document.objects.JSONSchema.fixedFields).map((([e,t])=>t===ac.visitors.JSONSchemaOrJSONReferenceVisitor?[e,yh]:[e,t]))),bh=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Discriminator\"]),canSupportSpecificationExtensions:!1},init(){this.element=new ta}}),wh=Zc;class Eh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Eh.primaryClass)}}Xo(Eh,\"primaryClass\",\"discriminator-mapping\");const xh=Eh,Sh=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new xh}}),_h=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"XML\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Nc}}),jh=Zc,Oh=Zc,kh=Zc,Ah=Zc,Ch=Zc,Ph=Zc;class Nh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Nh.primaryClass),this.classes.push(\"examples\")}}Xo(Nh,\"primaryClass\",\"parameter-examples\");const Ih=Nh,Th=Ys(dp,{init(){this.element=new Ih}});class Rh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Rh.primaryClass),this.classes.push(\"content\")}}Xo(Rh,\"primaryClass\",\"parameter-content\");const Mh=Rh,Dh=Ys(th,{init(){this.element=new Mh}});class Fh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Fh.primaryClass)}}Xo(Fh,\"primaryClass\",\"components-schemas\");const Lh=Fh,Bh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Schema\"]},init(){this.element=new Lh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"schema\")})),t}}});class $h extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push($h.primaryClass)}}Xo($h,\"primaryClass\",\"components-responses\");const qh=$h,Uh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Response\"]},init(){this.element=new qh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"response\")})),this.element.filter(op).forEach(((e,t)=>{e.setMetaProperty(\"http-status-code\",t.toValue())})),t}}}),zh=Uh;class Vh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Vh.primaryClass),this.classes.push(\"parameters\")}}Xo(Vh,\"primaryClass\",\"components-parameters\");const Wh=Vh,Jh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Parameter\"]},init(){this.element=new Wh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"parameter\")})),t}}});class Kh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Kh.primaryClass),this.classes.push(\"examples\")}}Xo(Kh,\"primaryClass\",\"components-examples\");const Hh=Kh,Gh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Example\"]},init(){this.element=new Hh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"example\")})),t}}});class Zh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Zh.primaryClass)}}Xo(Zh,\"primaryClass\",\"components-request-bodies\");const Yh=Zh,Xh=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"RequestBody\"]},init(){this.element=new Yh},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"requestBody\")})),t}}});class Qh extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Qh.primaryClass)}}Xo(Qh,\"primaryClass\",\"components-headers\");const ef=Qh,tf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Header\"]},init(){this.element=new ef},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"header\")})),this.element.filter(zu).forEach(((e,t)=>{e.setMetaProperty(\"header-name\",t.toValue())})),t}}}),nf=tf;class rf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(rf.primaryClass)}}Xo(rf,\"primaryClass\",\"components-security-schemes\");const of=rf,sf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"SecurityScheme\"]},init(){this.element=new of},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"securityScheme\")})),t}}});class af extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(af.primaryClass)}}Xo(af,\"primaryClass\",\"components-links\");const lf=af,cf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Link\"]},init(){this.element=new lf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"link\")})),t}}});class uf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(uf.primaryClass)}}Xo(uf,\"primaryClass\",\"components-callbacks\");const pf=uf,hf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Callback\"]},init(){this.element=new pf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"callback\")})),t}}}),ff=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Example\"]),canSupportSpecificationExtensions:!0},init(){this.element=new sa},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return ms(this.element.externalValue)&&this.element.classes.push(\"reference-element\"),t}}}),df=Zc,mf=Zc,gf=Zc,yf=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),vf=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"ExternalDocumentation\"]),canSupportSpecificationExtensions:!0},init(){this.element=new aa}}),bf=Zc,wf=Zc,Ef=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Encoding\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ra},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.headers)&&this.element.headers.filter(zu).forEach(((e,t)=>{e.setMetaProperty(\"header-name\",t.toValue())})),t}}}),xf=Zc;class Sf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Sf.primaryClass)}}Xo(Sf,\"primaryClass\",\"encoding-headers\");const _f=Sf,jf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Header\"]},init(){this.element=new _f},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"header\")})),this.element.forEach(((e,t)=>{if(!zu(e))return;const n=t.toValue();e.setMetaProperty(\"headerName\",n)})),t}}}),Of=jf,kf=Zc,Af=Zc,Cf=Zc,Pf=Ys(gu,Zc,{props:{fieldPatternPredicate:Ro(/^\\/(?<path>.*)$/),specPath:Hn([\"document\",\"objects\",\"PathItem\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Ta},methods:{ObjectElement(e){const t=gu.compose.methods.ObjectElement.call(this,e);return this.element.filter(Xu).forEach(((e,t)=>{e.setMetaProperty(\"path\",t.clone())})),t}}}),Nf=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"RequestBody\"])},init(){this.element=new Fa},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.contentProp)&&this.element.contentProp.filter(pp).forEach(((e,t)=>{e.setMetaProperty(\"media-type\",t.toValue())})),t}}}),If=Zc;class Tf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Tf.primaryClass),this.classes.push(\"content\")}}Xo(Tf,\"primaryClass\",\"request-body-content\");const Rf=Tf,Mf=Ys(th,{init(){this.element=new Rf}}),Df=Zc,Ff=Ys(gu,Zc,{props:{fieldPatternPredicate:Ro(/{(?<expression>.*)}/),specPath:Hn([\"document\",\"objects\",\"PathItem\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Gi},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(Xu).forEach(((e,t)=>{e.setMetaProperty(\"runtime-expression\",t.toValue())})),t}}}),Lf=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Response\"])},init(){this.element=new Ba},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return bs(this.element.contentProp)&&this.element.contentProp.filter(pp).forEach(((e,t)=>{e.setMetaProperty(\"media-type\",t.toValue())})),bs(this.element.headers)&&this.element.headers.filter(zu).forEach(((e,t)=>{e.setMetaProperty(\"header-name\",t.toValue())})),t}}}),Bf=Zc;class $f extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push($f.primaryClass)}}Xo($f,\"primaryClass\",\"response-headers\");const qf=$f,Uf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Header\"]},init(){this.element=new qf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"header\")})),this.element.forEach(((e,t)=>{if(!zu(e))return;const n=t.toValue();e.setMetaProperty(\"header-name\",n)})),t}}}),zf=Uf;class Vf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Vf.primaryClass),this.classes.push(\"content\")}}Xo(Vf,\"primaryClass\",\"response-content\");const Wf=Vf,Jf=Ys(th,{init(){this.element=new Wf}});class Kf extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Kf.primaryClass)}}Xo(Kf,\"primaryClass\",\"response-links\");const Hf=Kf,Gf=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Link\"]},init(){this.element=new Hf},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"link\")})),t}}}),Zf=Ys(Gc,gu,{props:{specPathFixedFields:el,specPathPatternedFields:el},methods:{ObjectElement(e){const{specPath:t,ignoredFields:n}=this;try{this.specPath=this.specPathFixedFields;const t=this.retrieveFixedFields(this.specPath(e));this.ignoredFields=[...n,...Pr(e.keys(),t)],Gc.compose.methods.ObjectElement.call(this,e),this.specPath=this.specPathPatternedFields,this.ignoredFields=t,gu.compose.methods.ObjectElement.call(this,e)}catch(e){throw this.specPath=t,e}return ei}}}),Yf=Ys(Zf,Zc,{props:{specPathFixedFields:Hn([\"document\",\"objects\",\"Responses\"]),specPathPatternedFields:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Response\"],fieldPatternPredicate:Ro(new RegExp(`^(1XX|2XX|3XX|4XX|5XX|${ko(100,600).join(\"|\")})$`)),canSupportSpecificationExtensions:!0},init(){this.element=new qa},methods:{ObjectElement(e){const t=Zf.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"response\")})),this.element.filter(op).forEach(((e,t)=>{const n=t.clone();this.fieldPatternPredicate(n.toValue())&&e.setMetaProperty(\"http-status-code\",n)})),t}}}),Xf=Yf,Qf=Ys(Fu,Zc,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"Response\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)?this.element.setMetaProperty(\"referenced-element\",\"response\"):op(this.element)&&this.element.setMetaProperty(\"http-status-code\",\"default\"),t}}}),ed=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Operation\"])},init(){this.element=new ka}});class td extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(td.primaryClass)}}Xo(td,\"primaryClass\",\"operation-tags\");const nd=td,rd=Ys(Zc,{init(){this.element=new nd},methods:{ArrayElement(e){return this.element=this.element.concat(e.clone()),ei}}}),od=Zc,sd=Zc,id=Zc;class ad extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(ad.primaryClass),this.classes.push(\"parameters\")}}Xo(ad,\"primaryClass\",\"operation-parameters\");const ld=ad,cd=Ys(Bc,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"parameters\")},methods:{ArrayElement(e){return e.forEach((e=>{const t=Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Parameter\"],n=this.toRefractedElement(t,e);tp(n)&&n.setMetaProperty(\"referenced-element\",\"parameter\"),this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}}),ud=Ys(cd,{init(){this.element=new ld}}),pd=Ys(Fu,{props:{alternator:[{predicate:Uc,specPath:[\"document\",\"objects\",\"Reference\"]},{predicate:Dt,specPath:[\"document\",\"objects\",\"RequestBody\"]}]},methods:{ObjectElement(e){const t=Fu.compose.methods.enter.call(this,e);return tp(this.element)&&this.element.setMetaProperty(\"referenced-element\",\"requestBody\"),t}}});class hd extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(hd.primaryClass)}}Xo(hd,\"primaryClass\",\"operation-callbacks\");const fd=hd,dd=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"Callback\"]},init(){this.element=new fd},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(tp).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"callback\")})),t}}}),md=Zc;class gd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(gd.primaryClass),this.classes.push(\"security\")}}Xo(gd,\"primaryClass\",\"operation-security\");const yd=gd,vd=Ys(Bc,Zc,{init(){this.element=new yd},methods:{ArrayElement(e){return e.forEach((e=>{const t=bs(e)?[\"document\",\"objects\",\"SecurityRequirement\"]:[\"value\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}});class bd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(bd.primaryClass),this.classes.push(\"servers\")}}Xo(bd,\"primaryClass\",\"operation-servers\");const wd=bd,Ed=Ys(Au,{init(){this.element=new wd}}),xd=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"PathItem\"])},init(){this.element=new Na},methods:{ObjectElement(e){const t=Gc.compose.methods.ObjectElement.call(this,e);return this.element.filter(Zu).forEach(((e,t)=>{const n=t.clone();n.content=n.toValue().toUpperCase(),e.setMetaProperty(\"http-method\",n)})),ms(this.element.$ref)&&this.element.classes.push(\"reference-element\"),t}}}),Sd=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),_d=Zc,jd=Zc;class Od extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Od.primaryClass),this.classes.push(\"servers\")}}Xo(Od,\"primaryClass\",\"path-item-servers\");const kd=Od,Ad=Ys(Au,{init(){this.element=new kd}});class Cd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Cd.primaryClass),this.classes.push(\"parameters\")}}Xo(Cd,\"primaryClass\",\"path-item-parameters\");const Pd=Cd,Nd=Ys(cd,{init(){this.element=new Pd}}),Id=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"SecurityScheme\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Sc}}),Td=Zc,Rd=Zc,Md=Zc,Dd=Zc,Fd=Zc,Ld=Zc,Bd=Zc,$d=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OAuthFlows\"]),canSupportSpecificationExtensions:!0},init(){this.element=new Ea}}),qd=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OAuthFlow\"]),canSupportSpecificationExtensions:!0},init(){this.element=new ba}}),Ud=Zc,zd=Zc,Vd=Zc;class Wd extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Wd.primaryClass)}}Xo(Wd,\"primaryClass\",\"oauth-flow-scopes\");const Jd=Wd,Kd=Ys(yu,Zc,{props:{specPath:Hn([\"value\"])},init(){this.element=new Jd}});class Hd extends Pt.ON{constructor(e,t,n){super(e,t,n),this.classes.push(Hd.primaryClass)}}Xo(Hd,\"primaryClass\",\"tags\");const Gd=Hd,Zd=Ys(Bc,Zc,{init(){this.element=new Gd},methods:{ArrayElement(e){return e.forEach((e=>{const t=Jc(e)?[\"document\",\"objects\",\"Tag\"]:[\"value\"],n=this.toRefractedElement(t,e);this.element.push(n)})),this.copyMetaAndAttributes(e,this.element),ei}}});function Yd(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Xd(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Yd(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Yd(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Qd={$visitor:Cp,fixedFields:{$ref:Pp}},em={$visitor:sh,fixedFields:Xd(Xd({},vh),{},{items:ah,properties:ch,type:ph,nullable:hh,discriminator:{$ref:\"#/visitors/document/objects/Discriminator\"},writeOnly:fh,xml:{$ref:\"#/visitors/document/objects/XML\"},externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},example:dh,deprecated:mh})},tm={visitors:{value:Zc,document:{objects:{OpenApi:{$visitor:Yc,fixedFields:{openapi:Xc,info:{$ref:\"#/visitors/document/objects/Info\"},servers:Au,paths:{$ref:\"#/visitors/document/objects/Paths\"},components:{$ref:\"#/visitors/document/objects/Components\"},security:_p,tags:Zd,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},Info:{$visitor:eu,fixedFields:{title:tu,description:nu,termsOfService:ru,contact:{$ref:\"#/visitors/document/objects/Contact\"},license:{$ref:\"#/visitors/document/objects/License\"},version:ou}},Contact:{$visitor:su,fixedFields:{name:iu,url:au,email:lu}},License:{$visitor:cu,fixedFields:{name:uu,url:pu}},Server:{$visitor:Su,fixedFields:{url:_u,description:ju,variables:Mu}},ServerVariable:{$visitor:Cu,fixedFields:{enum:Pu,default:Nu,description:Iu}},Components:{$visitor:jp,fixedFields:{schemas:Bh,responses:zh,parameters:Jh,examples:Gh,requestBodies:Xh,headers:nf,securitySchemes:sf,links:cf,callbacks:hf}},Paths:{$visitor:Pf},PathItem:{$visitor:xd,fixedFields:{$ref:Sd,summary:_d,description:jd,get:{$ref:\"#/visitors/document/objects/Operation\"},put:{$ref:\"#/visitors/document/objects/Operation\"},post:{$ref:\"#/visitors/document/objects/Operation\"},delete:{$ref:\"#/visitors/document/objects/Operation\"},options:{$ref:\"#/visitors/document/objects/Operation\"},head:{$ref:\"#/visitors/document/objects/Operation\"},patch:{$ref:\"#/visitors/document/objects/Operation\"},trace:{$ref:\"#/visitors/document/objects/Operation\"},servers:Ad,parameters:Nd}},Operation:{$visitor:ed,fixedFields:{tags:rd,summary:od,description:sd,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},operationId:id,parameters:ud,requestBody:pd,responses:{$ref:\"#/visitors/document/objects/Responses\"},callbacks:dd,deprecated:md,security:vd,servers:Ed}},ExternalDocumentation:{$visitor:vf,fixedFields:{description:bf,url:wf}},Parameter:{$visitor:Np,fixedFields:{name:Ip,in:Tp,description:Rp,required:Mp,deprecated:Dp,allowEmptyValue:Fp,style:Lp,explode:Bp,allowReserved:$p,schema:qp,example:Ph,examples:Th,content:Dh}},RequestBody:{$visitor:Nf,fixedFields:{description:If,content:Mf,required:Df}},MediaType:{$visitor:Du,fixedFields:{schema:hp,example:fp,examples:yp,encoding:wp}},Encoding:{$visitor:Ef,fixedFields:{contentType:xf,headers:Of,style:kf,explode:Af,allowReserved:Cf}},Responses:{$visitor:Xf,fixedFields:{default:Qf}},Response:{$visitor:Lf,fixedFields:{description:Bf,headers:zf,content:Jf,links:Gf}},Callback:{$visitor:Ff},Example:{$visitor:ff,fixedFields:{summary:df,description:mf,value:gf,externalValue:yf}},Link:{$visitor:hu,fixedFields:{operationRef:fu,operationId:du,parameters:wu,requestBody:Eu,description:xu,server:{$ref:\"#/visitors/document/objects/Server\"}}},Header:{$visitor:Up,fixedFields:{description:zp,required:Vp,deprecated:Wp,allowEmptyValue:Jp,style:Kp,explode:Hp,allowReserved:Gp,schema:Zp,example:Yp,examples:eh,content:oh}},Tag:{$visitor:Op,fixedFields:{name:kp,description:Ap,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},JSONReference:Qd,Reference:Qd,JSONSchema:em,Schema:em,LinkDescription:ac.visitors.document.objects.LinkDescription,Media:ac.visitors.document.objects.Media,Discriminator:{$visitor:bh,fixedFields:{propertyName:wh,mapping:Sh}},XML:{$visitor:_h,fixedFields:{name:jh,namespace:Oh,prefix:kh,attribute:Ah,wrapped:Ch}},SecurityScheme:{$visitor:Id,fixedFields:{type:Td,description:Rd,name:Md,in:Dd,scheme:Fd,bearerFormat:Ld,flows:{$ref:\"#/visitors/document/objects/OAuthFlows\"},openIdConnectUrl:Bd}},OAuthFlows:{$visitor:$d,fixedFields:{implicit:{$ref:\"#/visitors/document/objects/OAuthFlow\"},password:{$ref:\"#/visitors/document/objects/OAuthFlow\"},clientCredentials:{$ref:\"#/visitors/document/objects/OAuthFlow\"},authorizationCode:{$ref:\"#/visitors/document/objects/OAuthFlow\"}}},OAuthFlow:{$visitor:qd,fixedFields:{authorizationUrl:Ud,tokenUrl:zd,refreshUrl:Vd,scopes:Kd}},SecurityRequirement:{$visitor:Ep}},extension:{$visitor:Qc}}}},nm={namespace:e=>{const{base:t}=e;return t.register(\"callback\",Gi),t.register(\"components\",Yi),t.register(\"contact\",Qi),t.register(\"discriminator\",ta),t.register(\"encoding\",ra),t.register(\"example\",sa),t.register(\"externalDocumentation\",aa),t.register(\"header\",ca),t.register(\"info\",pa),t.register(\"license\",fa),t.register(\"link\",ma),t.register(\"mediaType\",ya),t.register(\"oAuthFlow\",ba),t.register(\"oAuthFlows\",Ea),t.register(\"openapi\",Sa),t.register(\"openApi3_0\",ja),t.register(\"operation\",ka),t.register(\"parameter\",Ca),t.register(\"pathItem\",Na),t.register(\"paths\",Ta),t.register(\"reference\",Ma),t.register(\"requestBody\",Fa),t.register(\"response\",Ba),t.register(\"responses\",qa),t.register(\"schema\",bc),t.register(\"securityRequirement\",Ec),t.register(\"securityScheme\",Sc),t.register(\"server\",jc),t.register(\"serverVariable\",kc),t.register(\"tag\",Cc),t.register(\"xml\",Nc),t}};function rm(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function om(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?rm(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rm(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const sm=()=>{const e=zs(nm);return{predicates:om(om(om({},a),l),{},{isStringElement:ms}),namespace:e}};function im(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const am=(e,{specPath:t=[\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"],plugins:n=[]}={})=>{const r=(0,Pt.Qc)(e),o=Za(tm),s=is(t,[],o);return fi(r,s,{state:{specObj:o}}),di(s.element,n,{toolboxCreator:sm,visitorOptions:{keyMap:Dc,nodeTypeGetter:Mc}})},lm=e=>(t,n={})=>am(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?im(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):im(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({specPath:e},n));Gi.refract=lm([\"visitors\",\"document\",\"objects\",\"Callback\",\"$visitor\"]),Yi.refract=lm([\"visitors\",\"document\",\"objects\",\"Components\",\"$visitor\"]),Qi.refract=lm([\"visitors\",\"document\",\"objects\",\"Contact\",\"$visitor\"]),sa.refract=lm([\"visitors\",\"document\",\"objects\",\"Example\",\"$visitor\"]),ta.refract=lm([\"visitors\",\"document\",\"objects\",\"Discriminator\",\"$visitor\"]),ra.refract=lm([\"visitors\",\"document\",\"objects\",\"Encoding\",\"$visitor\"]),aa.refract=lm([\"visitors\",\"document\",\"objects\",\"ExternalDocumentation\",\"$visitor\"]),ca.refract=lm([\"visitors\",\"document\",\"objects\",\"Header\",\"$visitor\"]),pa.refract=lm([\"visitors\",\"document\",\"objects\",\"Info\",\"$visitor\"]),fa.refract=lm([\"visitors\",\"document\",\"objects\",\"License\",\"$visitor\"]),ma.refract=lm([\"visitors\",\"document\",\"objects\",\"Link\",\"$visitor\"]),ya.refract=lm([\"visitors\",\"document\",\"objects\",\"MediaType\",\"$visitor\"]),ba.refract=lm([\"visitors\",\"document\",\"objects\",\"OAuthFlow\",\"$visitor\"]),Ea.refract=lm([\"visitors\",\"document\",\"objects\",\"OAuthFlows\",\"$visitor\"]),Sa.refract=lm([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"fixedFields\",\"openapi\"]),ja.refract=lm([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"]),ka.refract=lm([\"visitors\",\"document\",\"objects\",\"Operation\",\"$visitor\"]),Ca.refract=lm([\"visitors\",\"document\",\"objects\",\"Parameter\",\"$visitor\"]),Na.refract=lm([\"visitors\",\"document\",\"objects\",\"PathItem\",\"$visitor\"]),Ta.refract=lm([\"visitors\",\"document\",\"objects\",\"Paths\",\"$visitor\"]),Ma.refract=lm([\"visitors\",\"document\",\"objects\",\"Reference\",\"$visitor\"]),Fa.refract=lm([\"visitors\",\"document\",\"objects\",\"RequestBody\",\"$visitor\"]),Ba.refract=lm([\"visitors\",\"document\",\"objects\",\"Response\",\"$visitor\"]),qa.refract=lm([\"visitors\",\"document\",\"objects\",\"Responses\",\"$visitor\"]),bc.refract=lm([\"visitors\",\"document\",\"objects\",\"Schema\",\"$visitor\"]),Ec.refract=lm([\"visitors\",\"document\",\"objects\",\"SecurityRequirement\",\"$visitor\"]),Sc.refract=lm([\"visitors\",\"document\",\"objects\",\"SecurityScheme\",\"$visitor\"]),jc.refract=lm([\"visitors\",\"document\",\"objects\",\"Server\",\"$visitor\"]),kc.refract=lm([\"visitors\",\"document\",\"objects\",\"ServerVariable\",\"$visitor\"]),Cc.refract=lm([\"visitors\",\"document\",\"objects\",\"Tag\",\"$visitor\"]),Nc.refract=lm([\"visitors\",\"document\",\"objects\",\"XML\",\"$visitor\"]);const cm=class extends Gi{};const um=class extends Yi{get pathItems(){return this.get(\"pathItems\")}set pathItems(e){this.set(\"pathItems\",e)}};const pm=class extends Qi{};const hm=class extends ta{};const fm=class extends ra{};const dm=class extends sa{};const mm=class extends aa{};const gm=class extends ca{get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}};const ym=class extends pa{get license(){return this.get(\"license\")}set license(e){this.set(\"license\",e)}get summary(){return this.get(\"summary\")}set summary(e){this.set(\"summary\",e)}};class vm extends Pt.RP{constructor(e,t,n){super(e,t,n),this.element=\"jsonSchemaDialect\"}}Xo(vm,\"default\",new vm(\"https://spec.openapis.org/oas/3.1/dialect/base\"));const bm=vm;const wm=class extends fa{get identifier(){return this.get(\"identifier\")}set identifier(e){this.set(\"identifier\",e)}};const Em=class extends ma{};const xm=class extends ya{get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}};const Sm=class extends ba{};const _m=class extends Ea{};const jm=class extends Sa{};class Om extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"openApi3_1\",this.classes.push(\"api\")}get openapi(){return this.get(\"openapi\")}set openapi(e){this.set(\"openapi\",e)}get info(){return this.get(\"info\")}set info(e){this.set(\"info\",e)}get jsonSchemaDialect(){return this.get(\"jsonSchemaDialect\")}set jsonSchemaDialect(e){this.set(\"jsonSchemaDialect\",e)}get servers(){return this.get(\"servers\")}set servers(e){this.set(\"servers\",e)}get paths(){return this.get(\"paths\")}set paths(e){this.set(\"paths\",e)}get components(){return this.get(\"components\")}set components(e){this.set(\"components\",e)}get security(){return this.get(\"security\")}set security(e){this.set(\"security\",e)}get tags(){return this.get(\"tags\")}set tags(e){this.set(\"tags\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}get webhooks(){return this.get(\"webhooks\")}set webhooks(e){this.set(\"webhooks\",e)}}const km=Om;const Am=class extends ka{get requestBody(){return this.get(\"requestBody\")}set requestBody(e){this.set(\"requestBody\",e)}};const Cm=class extends Ca{get schema(){return this.get(\"schema\")}set schema(e){this.set(\"schema\",e)}};const Pm=class extends Na{get GET(){return this.get(\"get\")}set GET(e){this.set(\"GET\",e)}get PUT(){return this.get(\"put\")}set PUT(e){this.set(\"PUT\",e)}get POST(){return this.get(\"post\")}set POST(e){this.set(\"POST\",e)}get DELETE(){return this.get(\"delete\")}set DELETE(e){this.set(\"DELETE\",e)}get OPTIONS(){return this.get(\"options\")}set OPTIONS(e){this.set(\"OPTIONS\",e)}get HEAD(){return this.get(\"head\")}set HEAD(e){this.set(\"HEAD\",e)}get PATCH(){return this.get(\"patch\")}set PATCH(e){this.set(\"PATCH\",e)}get TRACE(){return this.get(\"trace\")}set TRACE(e){this.set(\"TRACE\",e)}};const Nm=class extends Ta{};class Im extends Ma{}Object.defineProperty(Im.prototype,\"description\",{get(){return this.get(\"description\")},set(e){this.set(\"description\",e)},enumerable:!0}),Object.defineProperty(Im.prototype,\"summary\",{get(){return this.get(\"summary\")},set(e){this.set(\"summary\",e)},enumerable:!0});const Tm=Im;const Rm=class extends Fa{};const Mm=class extends Ba{};const Dm=class extends qa{};class Fm extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.element=\"schema\"}get $schema(){return this.get(\"$schema\")}set $schema(e){this.set(\"$schema\",e)}get $vocabulary(){return this.get(\"$vocabulary\")}set $vocabulary(e){this.set(\"$vocabulary\",e)}get $id(){return this.get(\"$id\")}set $id(e){this.set(\"$id\",e)}get $anchor(){return this.get(\"$anchor\")}set $anchor(e){this.set(\"$anchor\",e)}get $dynamicAnchor(){return this.get(\"$dynamicAnchor\")}set $dynamicAnchor(e){this.set(\"$dynamicAnchor\",e)}get $dynamicRef(){return this.get(\"$dynamicRef\")}set $dynamicRef(e){this.set(\"$dynamicRef\",e)}get $ref(){return this.get(\"$ref\")}set $ref(e){this.set(\"$ref\",e)}get $defs(){return this.get(\"$defs\")}set $defs(e){this.set(\"$defs\",e)}get $comment(){return this.get(\"$comment\")}set $comment(e){this.set(\"$comment\",e)}get allOf(){return this.get(\"allOf\")}set allOf(e){this.set(\"allOf\",e)}get anyOf(){return this.get(\"anyOf\")}set anyOf(e){this.set(\"anyOf\",e)}get oneOf(){return this.get(\"oneOf\")}set oneOf(e){this.set(\"oneOf\",e)}get not(){return this.get(\"not\")}set not(e){this.set(\"not\",e)}get if(){return this.get(\"if\")}set if(e){this.set(\"if\",e)}get then(){return this.get(\"then\")}set then(e){this.set(\"then\",e)}get else(){return this.get(\"else\")}set else(e){this.set(\"else\",e)}get dependentSchemas(){return this.get(\"dependentSchemas\")}set dependentSchemas(e){this.set(\"dependentSchemas\",e)}get prefixItems(){return this.get(\"prefixItems\")}set prefixItems(e){this.set(\"prefixItems\",e)}get items(){return this.get(\"items\")}set items(e){this.set(\"items\",e)}get containsProp(){return this.get(\"contains\")}set containsProp(e){this.set(\"contains\",e)}get properties(){return this.get(\"properties\")}set properties(e){this.set(\"properties\",e)}get patternProperties(){return this.get(\"patternProperties\")}set patternProperties(e){this.set(\"patternProperties\",e)}get additionalProperties(){return this.get(\"additionalProperties\")}set additionalProperties(e){this.set(\"additionalProperties\",e)}get propertyNames(){return this.get(\"propertyNames\")}set propertyNames(e){this.set(\"propertyNames\",e)}get unevaluatedItems(){return this.get(\"unevaluatedItems\")}set unevaluatedItems(e){this.set(\"unevaluatedItems\",e)}get unevaluatedProperties(){return this.get(\"unevaluatedProperties\")}set unevaluatedProperties(e){this.set(\"unevaluatedProperties\",e)}get type(){return this.get(\"type\")}set type(e){this.set(\"type\",e)}get enum(){return this.get(\"enum\")}set enum(e){this.set(\"enum\",e)}get const(){return this.get(\"const\")}set const(e){this.set(\"const\",e)}get multipleOf(){return this.get(\"multipleOf\")}set multipleOf(e){this.set(\"multipleOf\",e)}get maximum(){return this.get(\"maximum\")}set maximum(e){this.set(\"maximum\",e)}get exclusiveMaximum(){return this.get(\"exclusiveMaximum\")}set exclusiveMaximum(e){this.set(\"exclusiveMaximum\",e)}get minimum(){return this.get(\"minimum\")}set minimum(e){this.set(\"minimum\",e)}get exclusiveMinimum(){return this.get(\"exclusiveMinimum\")}set exclusiveMinimum(e){this.set(\"exclusiveMinimum\",e)}get maxLength(){return this.get(\"maxLength\")}set maxLength(e){this.set(\"maxLength\",e)}get minLength(){return this.get(\"minLength\")}set minLength(e){this.set(\"minLength\",e)}get pattern(){return this.get(\"pattern\")}set pattern(e){this.set(\"pattern\",e)}get maxItems(){return this.get(\"maxItems\")}set maxItems(e){this.set(\"maxItems\",e)}get minItems(){return this.get(\"minItems\")}set minItems(e){this.set(\"minItems\",e)}get uniqueItems(){return this.get(\"uniqueItems\")}set uniqueItems(e){this.set(\"uniqueItems\",e)}get maxContains(){return this.get(\"maxContains\")}set maxContains(e){this.set(\"maxContains\",e)}get minContains(){return this.get(\"minContains\")}set minContains(e){this.set(\"minContains\",e)}get maxProperties(){return this.get(\"maxProperties\")}set maxProperties(e){this.set(\"maxProperties\",e)}get minProperties(){return this.get(\"minProperties\")}set minProperties(e){this.set(\"minProperties\",e)}get required(){return this.get(\"required\")}set required(e){this.set(\"required\",e)}get dependentRequired(){return this.get(\"dependentRequired\")}set dependentRequired(e){this.set(\"dependentRequired\",e)}get title(){return this.get(\"title\")}set title(e){this.set(\"title\",e)}get description(){return this.get(\"description\")}set description(e){this.set(\"description\",e)}get default(){return this.get(\"default\")}set default(e){this.set(\"default\",e)}get deprecated(){return this.get(\"deprecated\")}set deprecated(e){this.set(\"deprecated\",e)}get readOnly(){return this.get(\"readOnly\")}set readOnly(e){this.set(\"readOnly\",e)}get writeOnly(){return this.get(\"writeOnly\")}set writeOnly(e){this.set(\"writeOnly\",e)}get examples(){return this.get(\"examples\")}set examples(e){this.set(\"examples\",e)}get format(){return this.get(\"format\")}set format(e){this.set(\"format\",e)}get contentEncoding(){return this.get(\"contentEncoding\")}set contentEncoding(e){this.set(\"contentEncoding\",e)}get contentMediaType(){return this.get(\"contentMediaType\")}set contentMediaType(e){this.set(\"contentMediaType\",e)}get contentSchema(){return this.get(\"contentSchema\")}set contentSchema(e){this.set(\"contentSchema\",e)}get discriminator(){return this.get(\"discriminator\")}set discriminator(e){this.set(\"discriminator\",e)}get xml(){return this.get(\"xml\")}set xml(e){this.set(\"xml\",e)}get externalDocs(){return this.get(\"externalDocs\")}set externalDocs(e){this.set(\"externalDocs\",e)}get example(){return this.get(\"example\")}set example(e){this.set(\"example\",e)}}const Lm=Fm;const Bm=class extends Ec{};const $m=class extends Sc{};const qm=class extends jc{};const Um=class extends kc{};const zm=class extends Cc{};const Vm=class extends Nc{},Wm=Ys(Gc,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"OpenApi\"]),canSupportSpecificationExtensions:!0},init(){this.element=new km,this.openApiSemanticElement=this.element},methods:{ObjectElement(e){return this.openApiGenericElement=e,Gc.compose.methods.ObjectElement.call(this,e)}}}),{visitors:{document:{objects:{Info:{$visitor:Jm}}}}}=tm,Km=Ys(Jm,{init(){this.element=new ym}}),Hm=Zc,{visitors:{document:{objects:{Contact:{$visitor:Gm}}}}}=tm,Zm=Ys(Gm,{init(){this.element=new pm}}),{visitors:{document:{objects:{License:{$visitor:Ym}}}}}=tm,Xm=Ys(Ym,{init(){this.element=new wm}}),Qm=Zc,{visitors:{document:{objects:{Link:{$visitor:eg}}}}}=tm,tg=Ys(eg,{init(){this.element=new Em}}),ng=Ys(Bc,Zc,{methods:{StringElement(e){const t=new bm(e.toValue());return this.copyMetaAndAttributes(e,t),this.element=t,ei}}}),{visitors:{document:{objects:{Server:{$visitor:rg}}}}}=tm,og=Ys(rg,{init(){this.element=new qm}}),{visitors:{document:{objects:{ServerVariable:{$visitor:sg}}}}}=tm,ig=Ys(sg,{init(){this.element=new Um}}),{visitors:{document:{objects:{MediaType:{$visitor:ag}}}}}=tm,lg=Ys(ag,{init(){this.element=new xm}}),{visitors:{document:{objects:{SecurityRequirement:{$visitor:cg}}}}}=tm,ug=Ys(cg,{init(){this.element=new Bm}}),{visitors:{document:{objects:{Components:{$visitor:pg}}}}}=tm,hg=Ys(pg,{init(){this.element=new um}}),{visitors:{document:{objects:{Tag:{$visitor:fg}}}}}=tm,dg=Ys(fg,{init(){this.element=new zm}}),{visitors:{document:{objects:{Reference:{$visitor:mg}}}}}=tm,gg=Ys(mg,{init(){this.element=new Tm}}),yg=Zc,vg=Zc,{visitors:{document:{objects:{Parameter:{$visitor:bg}}}}}=tm,wg=Ys(bg,{init(){this.element=new Cm}}),{visitors:{document:{objects:{Header:{$visitor:Eg}}}}}=tm,xg=Ys(Eg,{init(){this.element=new gm}}),Sg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof cm||e(r)&&t(\"callback\",r)&&n(\"object\",r))),_g=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof um||e(r)&&t(\"components\",r)&&n(\"object\",r))),jg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof pm||e(r)&&t(\"contact\",r)&&n(\"object\",r))),Og=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof dm||e(r)&&t(\"example\",r)&&n(\"object\",r))),kg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof mm||e(r)&&t(\"externalDocumentation\",r)&&n(\"object\",r))),Ag=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof gm||e(r)&&t(\"header\",r)&&n(\"object\",r))),Cg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof ym||e(r)&&t(\"info\",r)&&n(\"object\",r))),Pg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof bm||e(r)&&t(\"jsonSchemaDialect\",r)&&n(\"string\",r))),Ng=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof wm||e(r)&&t(\"license\",r)&&n(\"object\",r))),Ig=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Em||e(r)&&t(\"link\",r)&&n(\"object\",r))),Tg=e=>{if(!Ig(e))return!1;if(!ms(e.operationRef))return!1;const t=e.operationRef.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},Rg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof jm||e(r)&&t(\"openapi\",r)&&n(\"string\",r))),Mg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n,hasClass:r})=>o=>o instanceof km||e(o)&&t(\"openApi3_1\",o)&&n(\"object\",o)&&r(\"api\",o))),Dg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Am||e(r)&&t(\"operation\",r)&&n(\"object\",r))),Fg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Cm||e(r)&&t(\"parameter\",r)&&n(\"object\",r))),Lg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Pm||e(r)&&t(\"pathItem\",r)&&n(\"object\",r))),Bg=e=>{if(!Lg(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},$g=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Nm||e(r)&&t(\"paths\",r)&&n(\"object\",r))),qg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Tm||e(r)&&t(\"reference\",r)&&n(\"object\",r))),Ug=e=>{if(!qg(e))return!1;if(!ms(e.$ref))return!1;const t=e.$ref.toValue();return\"string\"==typeof t&&t.length>0&&!t.startsWith(\"#\")},zg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Rm||e(r)&&t(\"requestBody\",r)&&n(\"object\",r))),Vg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Mm||e(r)&&t(\"response\",r)&&n(\"object\",r))),Wg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Dm||e(r)&&t(\"responses\",r)&&n(\"object\",r))),Jg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Lm||e(r)&&t(\"schema\",r)&&n(\"object\",r))),Kg=e=>vs(e)&&e.classes.includes(\"boolean-json-schema\"),Hg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Bm||e(r)&&t(\"securityRequirement\",r)&&n(\"object\",r))),Gg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof qm||e(r)&&t(\"server\",r)&&n(\"object\",r))),Zg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof Um||e(r)&&t(\"serverVariable\",r)&&n(\"object\",r))),Yg=fs((({hasBasicElementProps:e,isElementType:t,primitiveEq:n})=>r=>r instanceof xm||e(r)&&t(\"mediaType\",r)&&n(\"object\",r))),Xg=Ys({props:{parent:null},init({parent:e=this.parent}){this.parent=e,this.passingOptionsNames=[...this.passingOptionsNames,\"parent\"]}}),Qg=Ys(Gc,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"]),canSupportSpecificationExtensions:!0},init(){const e=()=>{let e;return e=null!==this.openApiSemanticElement&&Pg(this.openApiSemanticElement.jsonSchemaDialect)?this.openApiSemanticElement.jsonSchemaDialect.toValue():null!==this.openApiGenericElement&&ms(this.openApiGenericElement.get(\"jsonSchemaDialect\"))?this.openApiGenericElement.get(\"jsonSchemaDialect\").toValue():bm.default.toValue(),e},t=t=>{if(Is(this.parent)&&!ms(t.get(\"$schema\")))this.element.setMetaProperty(\"inherited$schema\",e());else if(Jg(this.parent)&&!ms(t.get(\"$schema\"))){var n,r;const e=kr(null===(n=this.parent.meta.get(\"inherited$schema\"))||void 0===n?void 0:n.toValue(),null===(r=this.parent.$schema)||void 0===r?void 0:r.toValue());this.element.setMetaProperty(\"inherited$schema\",e)}},n=e=>{var t;const n=null!==this.parent?this.parent.getMetaProperty(\"inherited$id\",[]).clone():new Pt.ON,r=null===(t=e.get(\"$id\"))||void 0===t?void 0:t.toValue();Nl(r)&&n.push(r),this.element.setMetaProperty(\"inherited$id\",n)};this.ObjectElement=function(e){this.element=new Lm,t(e),n(e),this.parent=this.element;const r=Gc.compose.methods.ObjectElement.call(this,e);return ms(this.element.$ref)&&(this.element.classes.push(\"reference-element\"),this.element.setMetaProperty(\"referenced-element\",\"schema\")),r},this.BooleanElement=function(e){return this.element=e.clone(),this.element.classes.push(\"boolean-json-schema\"),ei}}}),ey=Zc,ty=Ys(Zc,{methods:{ObjectElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-$vocabulary\"),ei}}}),ny=Zc,ry=Zc,oy=Zc,sy=Zc,iy=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"reference-value\"),ei}}}),ay=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-$defs\")}}),ly=Zc,cy=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-allOf\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),uy=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-anyOf\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),py=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-oneOf\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),hy=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-dependentSchemas\")}}),fy=Ys(Bc,Xg,Zc,{init(){this.element=new Pt.ON,this.element.classes.push(\"json-schema-prefixItems\")},methods:{ArrayElement(e){return e.forEach((e=>{if(bs(e)){const t=this.toRefractedElement([\"document\",\"objects\",\"Schema\"],e);this.element.push(t)}else{const t=e.clone();this.element.push(t)}})),this.copyMetaAndAttributes(e,this.element),ei}}}),dy=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-properties\")}}),my=Ys(yu,Xg,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Pt.Sb,this.element.classes.push(\"json-schema-patternProperties\")}}),gy=Ys(Zc,{methods:{StringElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei},ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-type\"),ei}}}),yy=Ys(Zc,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-enum\"),ei}}}),vy=Zc,by=Zc,wy=Zc,Ey=Zc,xy=Zc,Sy=Zc,_y=Zc,jy=Zc,Oy=Zc,ky=Zc,Ay=Zc,Cy=Zc,Py=Zc,Ny=Zc,Iy=Zc,Ty=Zc,Ry=Ys(Zc,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-required\"),ei}}}),My=Ys(Zc,{methods:{ObjectElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-dependentRequired\"),ei}}}),Dy=Zc,Fy=Zc,Ly=Zc,By=Zc,$y=Zc,qy=Zc,Uy=Ys(Zc,{methods:{ArrayElement(e){return this.element=e.clone(),this.element.classes.push(\"json-schema-examples\"),ei}}}),zy=Zc,Vy=Zc,Wy=Zc,Jy=Zc,{visitors:{document:{objects:{Discriminator:{$visitor:Ky}}}}}=tm,Hy=Ys(Ky,{props:{canSupportSpecificationExtensions:!0},init(){this.element=new hm}}),{visitors:{document:{objects:{XML:{$visitor:Gy}}}}}=tm,Zy=Ys(Gy,{init(){this.element=new Vm}}),Yy=Ys(yu,Zc,{props:{specPath:Hn([\"document\",\"objects\",\"Schema\"])},init(){this.element=new Lh}});class Xy extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(Xy.primaryClass)}}Xo(Xy,\"primaryClass\",\"components-path-items\");const Qy=Xy,ev=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"PathItem\"]},init(){this.element=new Qy},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(qg).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"pathItem\")})),t}}}),{visitors:{document:{objects:{Example:{$visitor:tv}}}}}=tm,nv=Ys(tv,{init(){this.element=new dm}}),{visitors:{document:{objects:{ExternalDocumentation:{$visitor:rv}}}}}=tm,ov=Ys(rv,{init(){this.element=new mm}}),{visitors:{document:{objects:{Encoding:{$visitor:sv}}}}}=tm,iv=Ys(sv,{init(){this.element=new fm}}),{visitors:{document:{objects:{Paths:{$visitor:av}}}}}=tm,lv=Ys(av,{init(){this.element=new Nm}}),{visitors:{document:{objects:{RequestBody:{$visitor:cv}}}}}=tm,uv=Ys(cv,{init(){this.element=new Rm}}),{visitors:{document:{objects:{Callback:{$visitor:pv}}}}}=tm,hv=Ys(pv,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"PathItem\"]},init(){this.element=new cm},methods:{ObjectElement(e){const t=pv.compose.methods.ObjectElement.call(this,e);return this.element.filter(qg).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"pathItem\")})),t}}}),{visitors:{document:{objects:{Response:{$visitor:fv}}}}}=tm,dv=Ys(fv,{init(){this.element=new Mm}}),{visitors:{document:{objects:{Responses:{$visitor:mv}}}}}=tm,gv=Ys(mv,{init(){this.element=new Dm}}),{visitors:{document:{objects:{Operation:{$visitor:yv}}}}}=tm,vv=Ys(yv,{init(){this.element=new Am}}),{visitors:{document:{objects:{PathItem:{$visitor:bv}}}}}=tm,wv=Ys(bv,{init(){this.element=new Pm}}),{visitors:{document:{objects:{SecurityScheme:{$visitor:Ev}}}}}=tm,xv=Ys(Ev,{init(){this.element=new $m}}),{visitors:{document:{objects:{OAuthFlows:{$visitor:Sv}}}}}=tm,_v=Ys(Sv,{init(){this.element=new _m}}),{visitors:{document:{objects:{OAuthFlow:{$visitor:jv}}}}}=tm,Ov=Ys(jv,{init(){this.element=new Sm}});class kv extends Pt.Sb{constructor(e,t,n){super(e,t,n),this.classes.push(kv.primaryClass)}}Xo(kv,\"primaryClass\",\"webhooks\");const Av=kv,Cv=Ys(yu,Zc,{props:{specPath:e=>Uc(e)?[\"document\",\"objects\",\"Reference\"]:[\"document\",\"objects\",\"PathItem\"]},init(){this.element=new Av},methods:{ObjectElement(e){const t=yu.compose.methods.ObjectElement.call(this,e);return this.element.filter(qg).forEach((e=>{e.setMetaProperty(\"referenced-element\",\"pathItem\")})),this.element.filter(Lg).forEach(((e,t)=>{e.setMetaProperty(\"webhook-name\",t.toValue())})),t}}}),Pv={visitors:{value:tm.visitors.value,document:{objects:{OpenApi:{$visitor:Wm,fixedFields:{openapi:tm.visitors.document.objects.OpenApi.fixedFields.openapi,info:{$ref:\"#/visitors/document/objects/Info\"},jsonSchemaDialect:ng,servers:tm.visitors.document.objects.OpenApi.fixedFields.servers,paths:{$ref:\"#/visitors/document/objects/Paths\"},webhooks:Cv,components:{$ref:\"#/visitors/document/objects/Components\"},security:tm.visitors.document.objects.OpenApi.fixedFields.security,tags:tm.visitors.document.objects.OpenApi.fixedFields.tags,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},Info:{$visitor:Km,fixedFields:{title:tm.visitors.document.objects.Info.fixedFields.title,description:tm.visitors.document.objects.Info.fixedFields.description,summary:Hm,termsOfService:tm.visitors.document.objects.Info.fixedFields.termsOfService,contact:{$ref:\"#/visitors/document/objects/Contact\"},license:{$ref:\"#/visitors/document/objects/License\"},version:tm.visitors.document.objects.Info.fixedFields.version}},Contact:{$visitor:Zm,fixedFields:{name:tm.visitors.document.objects.Contact.fixedFields.name,url:tm.visitors.document.objects.Contact.fixedFields.url,email:tm.visitors.document.objects.Contact.fixedFields.email}},License:{$visitor:Xm,fixedFields:{name:tm.visitors.document.objects.License.fixedFields.name,identifier:Qm,url:tm.visitors.document.objects.License.fixedFields.url}},Server:{$visitor:og,fixedFields:{url:tm.visitors.document.objects.Server.fixedFields.url,description:tm.visitors.document.objects.Server.fixedFields.description,variables:tm.visitors.document.objects.Server.fixedFields.variables}},ServerVariable:{$visitor:ig,fixedFields:{enum:tm.visitors.document.objects.ServerVariable.fixedFields.enum,default:tm.visitors.document.objects.ServerVariable.fixedFields.default,description:tm.visitors.document.objects.ServerVariable.fixedFields.description}},Components:{$visitor:hg,fixedFields:{schemas:Yy,responses:tm.visitors.document.objects.Components.fixedFields.responses,parameters:tm.visitors.document.objects.Components.fixedFields.parameters,examples:tm.visitors.document.objects.Components.fixedFields.examples,requestBodies:tm.visitors.document.objects.Components.fixedFields.requestBodies,headers:tm.visitors.document.objects.Components.fixedFields.headers,securitySchemes:tm.visitors.document.objects.Components.fixedFields.securitySchemes,links:tm.visitors.document.objects.Components.fixedFields.links,callbacks:tm.visitors.document.objects.Components.fixedFields.callbacks,pathItems:ev}},Paths:{$visitor:lv},PathItem:{$visitor:wv,fixedFields:{$ref:tm.visitors.document.objects.PathItem.fixedFields.$ref,summary:tm.visitors.document.objects.PathItem.fixedFields.summary,description:tm.visitors.document.objects.PathItem.fixedFields.description,get:{$ref:\"#/visitors/document/objects/Operation\"},put:{$ref:\"#/visitors/document/objects/Operation\"},post:{$ref:\"#/visitors/document/objects/Operation\"},delete:{$ref:\"#/visitors/document/objects/Operation\"},options:{$ref:\"#/visitors/document/objects/Operation\"},head:{$ref:\"#/visitors/document/objects/Operation\"},patch:{$ref:\"#/visitors/document/objects/Operation\"},trace:{$ref:\"#/visitors/document/objects/Operation\"},servers:tm.visitors.document.objects.PathItem.fixedFields.servers,parameters:tm.visitors.document.objects.PathItem.fixedFields.parameters}},Operation:{$visitor:vv,fixedFields:{tags:tm.visitors.document.objects.Operation.fixedFields.tags,summary:tm.visitors.document.objects.Operation.fixedFields.summary,description:tm.visitors.document.objects.Operation.fixedFields.description,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},operationId:tm.visitors.document.objects.Operation.fixedFields.operationId,parameters:tm.visitors.document.objects.Operation.fixedFields.parameters,requestBody:tm.visitors.document.objects.Operation.fixedFields.requestBody,responses:{$ref:\"#/visitors/document/objects/Responses\"},callbacks:tm.visitors.document.objects.Operation.fixedFields.callbacks,deprecated:tm.visitors.document.objects.Operation.fixedFields.deprecated,security:tm.visitors.document.objects.Operation.fixedFields.security,servers:tm.visitors.document.objects.Operation.fixedFields.servers}},ExternalDocumentation:{$visitor:ov,fixedFields:{description:tm.visitors.document.objects.ExternalDocumentation.fixedFields.description,url:tm.visitors.document.objects.ExternalDocumentation.fixedFields.url}},Parameter:{$visitor:wg,fixedFields:{name:tm.visitors.document.objects.Parameter.fixedFields.name,in:tm.visitors.document.objects.Parameter.fixedFields.in,description:tm.visitors.document.objects.Parameter.fixedFields.description,required:tm.visitors.document.objects.Parameter.fixedFields.required,deprecated:tm.visitors.document.objects.Parameter.fixedFields.deprecated,allowEmptyValue:tm.visitors.document.objects.Parameter.fixedFields.allowEmptyValue,style:tm.visitors.document.objects.Parameter.fixedFields.style,explode:tm.visitors.document.objects.Parameter.fixedFields.explode,allowReserved:tm.visitors.document.objects.Parameter.fixedFields.allowReserved,schema:{$ref:\"#/visitors/document/objects/Schema\"},example:tm.visitors.document.objects.Parameter.fixedFields.example,examples:tm.visitors.document.objects.Parameter.fixedFields.examples,content:tm.visitors.document.objects.Parameter.fixedFields.content}},RequestBody:{$visitor:uv,fixedFields:{description:tm.visitors.document.objects.RequestBody.fixedFields.description,content:tm.visitors.document.objects.RequestBody.fixedFields.content,required:tm.visitors.document.objects.RequestBody.fixedFields.required}},MediaType:{$visitor:lg,fixedFields:{schema:{$ref:\"#/visitors/document/objects/Schema\"},example:tm.visitors.document.objects.MediaType.fixedFields.example,examples:tm.visitors.document.objects.MediaType.fixedFields.examples,encoding:tm.visitors.document.objects.MediaType.fixedFields.encoding}},Encoding:{$visitor:iv,fixedFields:{contentType:tm.visitors.document.objects.Encoding.fixedFields.contentType,headers:tm.visitors.document.objects.Encoding.fixedFields.headers,style:tm.visitors.document.objects.Encoding.fixedFields.style,explode:tm.visitors.document.objects.Encoding.fixedFields.explode,allowReserved:tm.visitors.document.objects.Encoding.fixedFields.allowReserved}},Responses:{$visitor:gv,fixedFields:{default:tm.visitors.document.objects.Responses.fixedFields.default}},Response:{$visitor:dv,fixedFields:{description:tm.visitors.document.objects.Response.fixedFields.description,headers:tm.visitors.document.objects.Response.fixedFields.headers,content:tm.visitors.document.objects.Response.fixedFields.content,links:tm.visitors.document.objects.Response.fixedFields.links}},Callback:{$visitor:hv},Example:{$visitor:nv,fixedFields:{summary:tm.visitors.document.objects.Example.fixedFields.summary,description:tm.visitors.document.objects.Example.fixedFields.description,value:tm.visitors.document.objects.Example.fixedFields.value,externalValue:tm.visitors.document.objects.Example.fixedFields.externalValue}},Link:{$visitor:tg,fixedFields:{operationRef:tm.visitors.document.objects.Link.fixedFields.operationRef,operationId:tm.visitors.document.objects.Link.fixedFields.operationId,parameters:tm.visitors.document.objects.Link.fixedFields.parameters,requestBody:tm.visitors.document.objects.Link.fixedFields.requestBody,description:tm.visitors.document.objects.Link.fixedFields.description,server:{$ref:\"#/visitors/document/objects/Server\"}}},Header:{$visitor:xg,fixedFields:{description:tm.visitors.document.objects.Header.fixedFields.description,required:tm.visitors.document.objects.Header.fixedFields.required,deprecated:tm.visitors.document.objects.Header.fixedFields.deprecated,allowEmptyValue:tm.visitors.document.objects.Header.fixedFields.allowEmptyValue,style:tm.visitors.document.objects.Header.fixedFields.style,explode:tm.visitors.document.objects.Header.fixedFields.explode,allowReserved:tm.visitors.document.objects.Header.fixedFields.allowReserved,schema:{$ref:\"#/visitors/document/objects/Schema\"},example:tm.visitors.document.objects.Header.fixedFields.example,examples:tm.visitors.document.objects.Header.fixedFields.examples,content:tm.visitors.document.objects.Header.fixedFields.content}},Tag:{$visitor:dg,fixedFields:{name:tm.visitors.document.objects.Tag.fixedFields.name,description:tm.visitors.document.objects.Tag.fixedFields.description,externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"}}},Reference:{$visitor:gg,fixedFields:{$ref:tm.visitors.document.objects.Reference.fixedFields.$ref,summary:yg,description:vg}},Schema:{$visitor:Qg,fixedFields:{$schema:ey,$vocabulary:ty,$id:ny,$anchor:ry,$dynamicAnchor:oy,$dynamicRef:sy,$ref:iy,$defs:ay,$comment:ly,allOf:cy,anyOf:uy,oneOf:py,not:{$ref:\"#/visitors/document/objects/Schema\"},if:{$ref:\"#/visitors/document/objects/Schema\"},then:{$ref:\"#/visitors/document/objects/Schema\"},else:{$ref:\"#/visitors/document/objects/Schema\"},dependentSchemas:hy,prefixItems:fy,items:{$ref:\"#/visitors/document/objects/Schema\"},contains:{$ref:\"#/visitors/document/objects/Schema\"},properties:dy,patternProperties:my,additionalProperties:{$ref:\"#/visitors/document/objects/Schema\"},propertyNames:{$ref:\"#/visitors/document/objects/Schema\"},unevaluatedItems:{$ref:\"#/visitors/document/objects/Schema\"},unevaluatedProperties:{$ref:\"#/visitors/document/objects/Schema\"},type:gy,enum:yy,const:vy,multipleOf:by,maximum:wy,exclusiveMaximum:Ey,minimum:xy,exclusiveMinimum:Sy,maxLength:_y,minLength:jy,pattern:Oy,maxItems:ky,minItems:Ay,uniqueItems:Cy,maxContains:Py,minContains:Ny,maxProperties:Iy,minProperties:Ty,required:Ry,dependentRequired:My,title:Dy,description:Fy,default:Ly,deprecated:By,readOnly:$y,writeOnly:qy,examples:Uy,format:zy,contentEncoding:Vy,contentMediaType:Wy,contentSchema:{$ref:\"#/visitors/document/objects/Schema\"},discriminator:{$ref:\"#/visitors/document/objects/Discriminator\"},xml:{$ref:\"#/visitors/document/objects/XML\"},externalDocs:{$ref:\"#/visitors/document/objects/ExternalDocumentation\"},example:Jy}},Discriminator:{$visitor:Hy,fixedFields:{propertyName:tm.visitors.document.objects.Discriminator.fixedFields.propertyName,mapping:tm.visitors.document.objects.Discriminator.fixedFields.mapping}},XML:{$visitor:Zy,fixedFields:{name:tm.visitors.document.objects.XML.fixedFields.name,namespace:tm.visitors.document.objects.XML.fixedFields.namespace,prefix:tm.visitors.document.objects.XML.fixedFields.prefix,attribute:tm.visitors.document.objects.XML.fixedFields.attribute,wrapped:tm.visitors.document.objects.XML.fixedFields.wrapped}},SecurityScheme:{$visitor:xv,fixedFields:{type:tm.visitors.document.objects.SecurityScheme.fixedFields.type,description:tm.visitors.document.objects.SecurityScheme.fixedFields.description,name:tm.visitors.document.objects.SecurityScheme.fixedFields.name,in:tm.visitors.document.objects.SecurityScheme.fixedFields.in,scheme:tm.visitors.document.objects.SecurityScheme.fixedFields.scheme,bearerFormat:tm.visitors.document.objects.SecurityScheme.fixedFields.bearerFormat,flows:{$ref:\"#/visitors/document/objects/OAuthFlows\"},openIdConnectUrl:tm.visitors.document.objects.SecurityScheme.fixedFields.openIdConnectUrl}},OAuthFlows:{$visitor:_v,fixedFields:{implicit:{$ref:\"#/visitors/document/objects/OAuthFlow\"},password:{$ref:\"#/visitors/document/objects/OAuthFlow\"},clientCredentials:{$ref:\"#/visitors/document/objects/OAuthFlow\"},authorizationCode:{$ref:\"#/visitors/document/objects/OAuthFlow\"}}},OAuthFlow:{$visitor:Ov,fixedFields:{authorizationUrl:tm.visitors.document.objects.OAuthFlow.fixedFields.authorizationUrl,tokenUrl:tm.visitors.document.objects.OAuthFlow.fixedFields.tokenUrl,refreshUrl:tm.visitors.document.objects.OAuthFlow.fixedFields.refreshUrl,scopes:tm.visitors.document.objects.OAuthFlow.fixedFields.scopes}},SecurityRequirement:{$visitor:ug}},extension:{$visitor:tm.visitors.document.extension.$visitor}}}};function Nv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Iv=e=>{if(ds(e))return`${e.element.charAt(0).toUpperCase()+e.element.slice(1)}Element`},Tv=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Nv(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Nv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({CallbackElement:[\"content\"],ComponentsElement:[\"content\"],ContactElement:[\"content\"],DiscriminatorElement:[\"content\"],Encoding:[\"content\"],Example:[\"content\"],ExternalDocumentationElement:[\"content\"],HeaderElement:[\"content\"],InfoElement:[\"content\"],LicenseElement:[\"content\"],MediaTypeElement:[\"content\"],OAuthFlowElement:[\"content\"],OAuthFlowsElement:[\"content\"],OpenApi3_1Element:[\"content\"],OperationElement:[\"content\"],ParameterElement:[\"content\"],PathItemElement:[\"content\"],PathsElement:[\"content\"],ReferenceElement:[\"content\"],RequestBodyElement:[\"content\"],ResponseElement:[\"content\"],ResponsesElement:[\"content\"],SchemaElement:[\"content\"],SecurityRequirementElement:[\"content\"],SecuritySchemeElement:[\"content\"],ServerElement:[\"content\"],ServerVariableElement:[\"content\"],TagElement:[\"content\"]},pi),Rv={namespace:e=>{const{base:t}=e;return t.register(\"callback\",cm),t.register(\"components\",um),t.register(\"contact\",pm),t.register(\"discriminator\",hm),t.register(\"encoding\",fm),t.register(\"example\",dm),t.register(\"externalDocumentation\",mm),t.register(\"header\",gm),t.register(\"info\",ym),t.register(\"jsonSchemaDialect\",bm),t.register(\"license\",wm),t.register(\"link\",Em),t.register(\"mediaType\",xm),t.register(\"oAuthFlow\",Sm),t.register(\"oAuthFlows\",_m),t.register(\"openapi\",jm),t.register(\"openApi3_1\",km),t.register(\"operation\",Am),t.register(\"parameter\",Cm),t.register(\"pathItem\",Pm),t.register(\"paths\",Nm),t.register(\"reference\",Tm),t.register(\"requestBody\",Rm),t.register(\"response\",Mm),t.register(\"responses\",Dm),t.register(\"schema\",Lm),t.register(\"securityRequirement\",Bm),t.register(\"securityScheme\",$m),t.register(\"server\",qm),t.register(\"serverVariable\",Um),t.register(\"tag\",zm),t.register(\"xml\",Vm),t}};function Mv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Dv(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Mv(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Mv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Fv=()=>{const e=zs(Rv);return{predicates:Dv(Dv({},c),{},{isStringElement:ms,isArrayElement:ws,isObjectElement:bs,includesClasses:Ns}),namespace:e}};function Lv(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}const Bv=(e,{specPath:t=[\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"],plugins:n=[]}={})=>{const r=(0,Pt.Qc)(e),o=Za(Pv),s=is(t,[],o);return fi(r,s,{state:{specObj:o}}),di(s.element,n,{toolboxCreator:Fv,visitorOptions:{keyMap:Tv,nodeTypeGetter:Iv}})},$v=e=>(t,n={})=>Bv(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Lv(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lv(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({specPath:e},n));cm.refract=$v([\"visitors\",\"document\",\"objects\",\"Callback\",\"$visitor\"]),um.refract=$v([\"visitors\",\"document\",\"objects\",\"Components\",\"$visitor\"]),pm.refract=$v([\"visitors\",\"document\",\"objects\",\"Contact\",\"$visitor\"]),dm.refract=$v([\"visitors\",\"document\",\"objects\",\"Example\",\"$visitor\"]),hm.refract=$v([\"visitors\",\"document\",\"objects\",\"Discriminator\",\"$visitor\"]),fm.refract=$v([\"visitors\",\"document\",\"objects\",\"Encoding\",\"$visitor\"]),mm.refract=$v([\"visitors\",\"document\",\"objects\",\"ExternalDocumentation\",\"$visitor\"]),gm.refract=$v([\"visitors\",\"document\",\"objects\",\"Header\",\"$visitor\"]),ym.refract=$v([\"visitors\",\"document\",\"objects\",\"Info\",\"$visitor\"]),bm.refract=$v([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"fixedFields\",\"jsonSchemaDialect\"]),wm.refract=$v([\"visitors\",\"document\",\"objects\",\"License\",\"$visitor\"]),Em.refract=$v([\"visitors\",\"document\",\"objects\",\"Link\",\"$visitor\"]),xm.refract=$v([\"visitors\",\"document\",\"objects\",\"MediaType\",\"$visitor\"]),Sm.refract=$v([\"visitors\",\"document\",\"objects\",\"OAuthFlow\",\"$visitor\"]),_m.refract=$v([\"visitors\",\"document\",\"objects\",\"OAuthFlows\",\"$visitor\"]),jm.refract=$v([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"fixedFields\",\"openapi\"]),km.refract=$v([\"visitors\",\"document\",\"objects\",\"OpenApi\",\"$visitor\"]),Am.refract=$v([\"visitors\",\"document\",\"objects\",\"Operation\",\"$visitor\"]),Cm.refract=$v([\"visitors\",\"document\",\"objects\",\"Parameter\",\"$visitor\"]),Pm.refract=$v([\"visitors\",\"document\",\"objects\",\"PathItem\",\"$visitor\"]),Nm.refract=$v([\"visitors\",\"document\",\"objects\",\"Paths\",\"$visitor\"]),Tm.refract=$v([\"visitors\",\"document\",\"objects\",\"Reference\",\"$visitor\"]),Rm.refract=$v([\"visitors\",\"document\",\"objects\",\"RequestBody\",\"$visitor\"]),Mm.refract=$v([\"visitors\",\"document\",\"objects\",\"Response\",\"$visitor\"]),Dm.refract=$v([\"visitors\",\"document\",\"objects\",\"Responses\",\"$visitor\"]),Lm.refract=$v([\"visitors\",\"document\",\"objects\",\"Schema\",\"$visitor\"]),Bm.refract=$v([\"visitors\",\"document\",\"objects\",\"SecurityRequirement\",\"$visitor\"]),$m.refract=$v([\"visitors\",\"document\",\"objects\",\"SecurityScheme\",\"$visitor\"]),qm.refract=$v([\"visitors\",\"document\",\"objects\",\"Server\",\"$visitor\"]),Um.refract=$v([\"visitors\",\"document\",\"objects\",\"ServerVariable\",\"$visitor\"]),zm.refract=$v([\"visitors\",\"document\",\"objects\",\"Tag\",\"$visitor\"]),Vm.refract=$v([\"visitors\",\"document\",\"objects\",\"XML\",\"$visitor\"]);const qv=class extends Array{constructor(...e){super(...e),Xo(this,\"unknownMediaType\",\"application/octet-stream\")}filterByFormat(){throw new Error(\"Not implemented!\")}findBy(){throw new Error(\"Not implemented\")}latest(){throw new Error(\"Not implemented!\")}};class Uv extends qv{filterByFormat(e=\"generic\"){const t=\"generic\"===e?\"openapi;version\":e;return this.filter((e=>e.includes(t)))}findBy(e=\"3.1.0\",t=\"generic\"){const n=\"generic\"===t?`vnd.oai.openapi;version=${e}`:`vnd.oai.openapi+${t};version=${e}`;return this.find((e=>e.includes(n)))||this.unknownMediaType}latest(e=\"generic\"){return ao(this.filterByFormat(e))}}const zv=new Uv(\"application/vnd.oai.openapi;version=3.1.0\",\"application/vnd.oai.openapi+json;version=3.1.0\",\"application/vnd.oai.openapi+yaml;version=3.1.0\");var Vv=n(34155),Wv=Or((function(e,t){return gr(Io(\"\"),Fr(as(e)),io(\"\"))(t)}));const Jv=Wv;const Kv=pr(qo);const Hv=Zt(1,gr(cn,Xr(\"RegExp\")));const Gv=Bo(Xs,Co(/[.*+?^${}()|[\\]\\\\-]/g,\"\\\\$&\"));var Zv=function(e,t){if(\"string\"!=typeof e&&!(e instanceof String))throw TypeError(\"`\".concat(t,\"` must be a string\"))};var Yv=Zt(3,(function(e,t,n){!function(e,t,n){if(null==n||null==e||null==t)throw TypeError(\"Input values must not be `null` or `undefined`\")}(e,t,n),Zv(n,\"str\"),Zv(t,\"replaceValue\"),function(e){if(!(\"string\"==typeof e||e instanceof String||e instanceof RegExp))throw TypeError(\"`searchValue` must be a string or an regexp\")}(e);var r=new RegExp(Hv(e)?e:Gv(e),\"g\");return Co(r,t,n)})),Xv=oo(2,\"replaceAll\");const Qv=ts(String.prototype.replaceAll)?Xv:Yv,eb=()=>wo(Ro(/^win/),[\"platform\"],Vv),tb=e=>{try{const t=new URL(e);return Jv(\":\",t.protocol)}catch{return}},nb=(gr(tb,Kv),e=>{if(Vv.browser)return!1;const t=tb(e);return qo(t)||\"file\"===t||/^[a-zA-Z]$/.test(t)}),rb=e=>{const t=tb(e);return\"http\"===t||\"https\"===t},ob=(e,t)=>{const n=[/%23/g,\"#\",/%24/g,\"$\",/%26/g,\"&\",/%2C/g,\",\",/%40/g,\"@\"],r=So(!1,\"keepFileProtocol\",t),o=So(eb,\"isWindows\",t);let s=decodeURI(e);for(let e=0;e<n.length;e+=2)s=s.replace(n[e],n[e+1]);let i=\"file://\"===s.substr(0,7).toLowerCase();return i&&(s=\"/\"===s[7]?s.substr(8):s.substr(7),o()&&\"/\"===s[1]&&(s=`${s[0]}:${s.substr(1)}`),r?s=`file:///${s}`:(i=!1,s=o()?s:`/${s}`)),o()&&!i&&(s=Qv(\"/\",\"\\\\\",s),\":\\\\\"===s.substr(1,2)&&(s=s[0].toUpperCase()+s.substr(1))),s},sb=e=>{const t=e.indexOf(\"#\");return-1!==t?e.substr(t):\"#\"},ib=e=>{const t=e.indexOf(\"#\");let n=e;return t>=0&&(n=e.substr(0,t)),n},ab=()=>{if(Vv.browser)return ib(globalThis.location.href);const e=Vv.cwd(),t=ao(e);return[\"/\",\"\\\\\"].includes(t)?e:e+(eb()?\"\\\\\":\"/\")},lb=(e,t)=>{const n=new URL(t,new URL(e,\"resolve://\"));if(\"resolve:\"===n.protocol){const{pathname:e,search:t,hash:r}=n;return e+t+r}return n.toString()},cb=e=>nb(e)?(e=>{const t=[/\\?/g,\"%3F\",/#/g,\"%23\"];let n=e;eb()&&(n=n.replace(/\\\\/g,\"/\")),n=encodeURI(n);for(let e=0;e<t.length;e+=2)n=n.replace(t[e],t[e+1]);return n})(ob(e)):encodeURI(decodeURI(e)).replace(/%5B/g,\"[\").replace(/%5D/g,\"]\"),ub=e=>nb(e)?ob(e):decodeURI(e),pb=Ys({props:{uri:\"\",value:null,depth:0,refSet:null,errors:[]},init({depth:e=this.depth,refSet:t=this.refSet,uri:n=this.uri,value:r=this.value}={}){this.uri=n,this.value=r,this.depth=e,this.refSet=t,this.errors=[]}}),hb=pb,fb=Ys({props:{rootRef:null,refs:[],circular:!1},init({refs:e=[]}={}){this.refs=[],e.forEach((e=>this.add(e)))},methods:{get size(){return this.refs.length},add(e){return this.has(e)||(this.refs.push(e),this.rootRef=null===this.rootRef?e:this.rootRef,e.refSet=this),this},merge(e){for(const t of e.values())this.add(t);return this},has(e){const t=Xs(e)?e:e.uri;return Kv(this.find(xo(t,\"uri\")))},find(e){return this.refs.find(e)},*values(){yield*this.refs},clean(){this.refs.forEach((e=>{e.refSet=null})),this.refs=[]}}}),db=fb,mb={parse:{mediaType:\"text/plain\",parsers:[],parserOpts:{}},resolve:{baseURI:\"\",resolvers:[],resolverOpts:{},strategies:[],external:!0,maxDepth:1/0},dereference:{strategies:[],refSet:null,maxDepth:1/0}},gb=lo(uo([\"resolve\",\"baseURI\"]),or([\"resolve\",\"baseURI\"])),yb=e=>Ri(e)?ab():e,vb=Ys({props:{uri:null,mediaType:\"text/plain\",data:null,parseResult:null},init({uri:e=this.uri,mediaType:t=this.mediaType,data:n=this.data,parseResult:r=this.parseResult}={}){this.uri=e,this.mediaType=t,this.data=n,this.parseResult=r},methods:{get extension(){return Xs(this.uri)?(e=>{const t=e.lastIndexOf(\".\");return t>=0?e.substr(t).toLowerCase():\"\"})(this.uri):\"\"},toString(){if(\"string\"==typeof this.data)return this.data;if(this.data instanceof ArrayBuffer||[\"ArrayBuffer\"].includes(cn(this.data))||ArrayBuffer.isView(this.data)){return new TextDecoder(\"utf-8\").decode(this.data)}return String(this.data)}}});class bb extends Error{constructor(e,t){if(super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack,$s(t)&&Gr(\"cause\",t)&&!Gr(\"cause\",this)){const{cause:e}=t;this.cause=e,Gr(\"stack\",e)&&(this.stack=`${this.stack}\\nCAUSE: ${null==e?void 0:e.stack}`)}}}const wb=bb;const Eb=class extends wb{constructor(e,t){super(e,{cause:t.cause}),Xo(this,\"plugin\",void 0),this.plugin=t.plugin}},xb=async(e,t,n)=>{const r=await Promise.all(n.map(is([e],[t])));return n.filter(((e,t)=>r[t]))},Sb=async(e,t,n)=>{let r;for(const o of n)try{const n=await o[e].call(o,...t);return{plugin:o,result:n}}catch(e){r=new Eb(\"Error while running plugin\",{cause:e,plugin:o})}return Promise.reject(r)};const _b=class extends wb{};const jb=class extends _b{};const Ob=class extends wb{},kb=async(e,t)=>{let n=e,r=!1;if(!Os(e)){const t=new e.constructor(e.content,e.meta.clone(),e.attributes);t.classes.push(\"result\"),n=new zo([t]),r=!0}const o=vb({uri:t.resolve.baseURI,parseResult:n,mediaType:t.parse.mediaType}),s=await xb(\"canDereference\",o,t.dereference.strategies);if(so(s))throw new jb(o.uri);try{const{result:e}=await Sb(\"dereference\",[o,t],s);return r?e.get(0):e}catch(e){throw new Ob(`Error while dereferencing file \"${o.uri}\"`,{cause:e})}},Ab=async(e,t={})=>{const n=((e,t)=>{const n=mo(e,t);return vo(gb,yb,n)})(mb,t);return kb(e,n)};const Cb=class extends wb{constructor(e=\"Not Implemented\",t){super(e,t)}},Pb=Ys({props:{name:\"\",allowEmpty:!0,sourceMap:!1,fileExtensions:[],mediaTypes:[]},init({allowEmpty:e=this.allowEmpty,sourceMap:t=this.sourceMap,fileExtensions:n=this.fileExtensions,mediaTypes:r=this.mediaTypes}={}){this.allowEmpty=e,this.sourceMap=t,this.fileExtensions=n,this.mediaTypes=r},methods:{async canParse(){throw new Cb},async parse(){throw new Cb}}}),Nb=Pb,Ib=Ys(Nb,{props:{name:\"binary\"},methods:{async canParse(e){return 0===this.fileExtensions.length||this.fileExtensions.includes(e.extension)},async parse(e){try{const t=unescape(encodeURIComponent(e.toString())),n=btoa(t),r=new zo;if(0!==n.length){const e=new Pt.RP(n);e.classes.push(\"result\"),r.push(e)}return r}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),Tb=Ys({props:{name:null},methods:{canResolve:()=>!1,async resolve(){throw new Cb}}});const Rb=Zt(1,$n(Promise.all,Promise));const Mb=class extends wb{};const Db=class extends Mb{};const Fb=class extends Ob{};const Lb=class extends Mb{};function Bb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $b(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Bb(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bb(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const qb=async(e,t)=>{const n=vb({uri:cb(ib(e)),mediaType:t.parse.mediaType}),r=await(async(e,t)=>{const n=t.resolve.resolvers.map((e=>{const n=Object.create(e);return Object.assign(n,t.resolve.resolverOpts)})),r=await xb(\"canRead\",e,n);if(so(r))throw new Lb(e.uri);try{const{result:t}=await Sb(\"read\",[e],r);return t}catch(t){throw new Mb(`Error while reading file \"${e.uri}\"`,{cause:t})}})(n,t);return(async(e,t)=>{const n=t.parse.parsers.map((e=>{const n=Object.create(e);return Object.assign(n,t.parse.parserOpts)})),r=await xb(\"canParse\",e,n);if(so(r))throw new Lb(e.uri);try{const{plugin:t,result:n}=await Sb(\"parse\",[e],r);return!t.allowEmpty&&n.isEmpty?Promise.reject(new _b(`Error while parsing file \"${e.uri}\". File is empty.`)):n}catch(t){throw new _b(`Error while parsing file \"${e.uri}\"`,{cause:t})}})(vb($b($b({},n),{},{data:r})),t)},Ub=(e,t)=>{const n=hi({predicate:e});return fi(t,n),new Pt.O4(n.result)};class zb extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}const Vb=(e,t)=>{const n=hi({predicate:e,returnOnTrue:ei});return fi(t,n),bo(void 0,[0],n.result)};const Wb=class extends wb{};class Jb extends Wb{constructor(e){super(`Invalid JSON Schema $anchor \"${e}\".`)}}class Kb extends Error{constructor(e){super(e),this.name=this.constructor.name,this.message=e,\"function\"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error(e).stack}}const Hb=e=>/^[A-Za-z_][A-Za-z_0-9.-]*$/.test(e),Gb=e=>{const t=sb(e);return qi(\"#\",t)},Zb=(e,t)=>{const n=(e=>{if(!Hb(e))throw new Jb(e);return e})(e),r=Vb((e=>{var t;return Jg(e)&&(null===(t=e.$anchor)||void 0===t?void 0:t.toValue())===n}),t);if(qo(r))throw new Kb(`Evaluation failed on token: \"${n}\"`);return r},Yb=(e,t)=>{if(void 0===t.$ref)return;const n=sb(t.$ref.toValue()),r=t.meta.get(\"inherited$id\").toValue();return`${Jn(((e,t)=>lb(e,cb(ib(t)))),e,[...r,t.$ref.toValue()])}${\"#\"===n?\"\":n}`},Xb=e=>{if(Xb.cache.has(e))return Xb.cache.get(e);const t=Lm.refract(e);return Xb.cache.set(e,t),t};Xb.cache=new WeakMap;const Qb=e=>As(e)?Xb(e):e,ew=(e,t)=>{const{cache:n}=ew,r=ib(e),o=e=>Jg(e)&&void 0!==e.$id;if(!n.has(t)){const e=Ub(o,t);n.set(t,Array.from(e))}const s=n.get(t).find((e=>((e,t)=>{if(void 0===t.$id)return;const n=t.meta.get(\"inherited$id\").toValue();return Jn(((e,t)=>lb(e,cb(ib(t)))),e,[...n,t.$id.toValue()])})(r,e)===r));if(qo(s))throw new zb(`Evaluation failed on URI: \"${e}\"`);let i,a;return Hb(Gb(e))?(i=Zb,a=Gb(e)):(i=Ji,a=Ki(e)),i(a,s)};function tw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function nw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?tw(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tw(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}ew.cache=new WeakMap;const rw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],ow=Ys({props:{indirections:[],namespace:null,reference:null,crawledElements:null,crawlingMap:null,visited:null,options:null},init({reference:e,namespace:t,indirections:n=[],visited:r=new WeakSet,options:o}){this.indirections=n,this.namespace=t,this.reference=e,this.crawledElements=[],this.crawlingMap={},this.visited=r,this.options=o},methods:{toBaseURI(e){return lb(this.reference.uri,cb(ib(e)))},async toReference(e){if(this.reference.depth>=this.options.resolve.maxDepth)throw new Db(`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file \"${this.reference.uri}\"`);const t=this.toBaseURI(e),{refSet:n}=this.reference;if(n.has(t))return n.find(xo(t,\"uri\"));const r=await qb(ub(t),nw(nw({},this.options),{},{parse:nw(nw({},this.options.parse),{},{mediaType:\"text/plain\"})})),o=hb({uri:t,value:r,depth:this.reference.depth+1});return n.add(o),o},ReferenceElement(e){var t;if(!this.options.resolve.external&&Ug(e))return!1;const n=null===(t=e.$ref)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n)),this.crawledElements.push(e)},PathItemElement(e){var t;if(!ms(e.$ref))return;if(!this.options.resolve.external&&Bg(e))return;const n=null===(t=e.$ref)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n)),this.crawledElements.push(e)},LinkElement(e){if((ms(e.operationRef)||ms(e.operationId))&&(this.options.resolve.external||!Tg(e))){if(ms(e.operationRef)&&ms(e.operationId))throw new Error(\"LinkElement operationRef and operationId are mutually exclusive.\");if(Tg(e)){var t;const n=null===(t=e.operationRef)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n))}}},ExampleElement(e){var t;if(!ms(e.externalValue))return;if(!this.options.resolve.external&&ms(e.externalValue))return;if(e.hasKey(\"value\")&&ms(e.externalValue))throw new Error(\"ExampleElement value and externalValue fields are mutually exclusive.\");const n=null===(t=e.externalValue)||void 0===t?void 0:t.toValue(),r=this.toBaseURI(n);Hr(r,this.crawlingMap)||(this.crawlingMap[r]=this.toReference(n))},SchemaElement(e){if(this.visited.has(e))return!1;if(!ms(e.$ref))return void this.visited.add(e);const t=this.reference.uri,n=Yb(t,e),r=ib(n),o=vb({uri:r}),s=go((e=>e.canRead(o)),this.options.resolve.resolvers),i=!s,a=!s&&this.reference.uri!==r;if(this.options.resolve.external||!a){if(!Hr(r,this.crawlingMap))try{this.crawlingMap[r]=s||i?this.reference:this.toReference(ub(n))}catch(e){if(!(i&&e instanceof zb))throw e;this.crawlingMap[r]=this.toReference(ub(n))}this.crawledElements.push(e)}else this.visited.add(e)},async crawlReferenceElement(e){var t;const n=await this.toReference(e.$ref.toValue());this.indirections.push(e);const r=Ki(null===(t=e.$ref)||void 0===t?void 0:t.toValue());let o=Ji(r,n.value.result);if(As(o)){const t=e.meta.get(\"referenced-element\").toValue();if(Uc(o))o=Tm.refract(o),o.setMetaProperty(\"referenced-element\",t);else{o=this.namespace.getElementClass(t).refract(o)}}if(this.indirections.includes(o))throw new Error(\"Recursive Reference Object detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);const s=ow({reference:n,namespace:this.namespace,indirections:[...this.indirections],options:this.options});await rw(o,s,{keyMap:Tv,nodeTypeGetter:Iv}),await s.crawl(),this.indirections.pop()},async crawlPathItemElement(e){var t;const n=await this.toReference(e.$ref.toValue());this.indirections.push(e);const r=Ki(null===(t=e.$ref)||void 0===t?void 0:t.toValue());let o=Ji(r,n.value.result);if(As(o)&&(o=Pm.refract(o)),this.indirections.includes(o))throw new Error(\"Recursive Path Item Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);const s=ow({reference:n,namespace:this.namespace,indirections:[...this.indirections],options:this.options});await rw(o,s,{keyMap:Tv,nodeTypeGetter:Iv}),await s.crawl(),this.indirections.pop()},async crawlSchemaElement(e){const t=this.reference.uri,n=Yb(t,e),r=ib(n),o=vb({uri:r}),s=go((e=>e.canRead(o)),this.options.resolve.resolvers),i=!s;let a,l;this.indirections.push(e);try{if(s||i){a=this.reference;l=ew(n,Qb(a.value.result))}else{a=await this.toReference(ub(n));const e=Ki(n);l=Qb(Ji(e,a.value.result))}}catch(e){if(!(i&&e instanceof zb))throw e;if(Hb(Gb(n))){a=await this.toReference(ub(n));const e=Gb(n);l=Zb(e,Qb(a.value.result))}else{a=await this.toReference(ub(n));const e=Ki(n);l=Qb(Ji(e,a.value.result))}}if(this.visited.add(e),this.indirections.includes(l))throw new Error(\"Recursive Schema Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);const c=ow({reference:a,namespace:this.namespace,indirections:[...this.indirections],options:this.options,visited:this.visited});await rw(l,c,{keyMap:Tv,nodeTypeGetter:Iv}),await c.crawl(),this.indirections.pop()},async crawl(){await gr(nr,Rb)(this.crawlingMap),this.crawlingMap=null;for(const e of this.crawledElements)qg(e)?await this.crawlReferenceElement(e):Jg(e)?await this.crawlSchemaElement(e):Lg(e)&&await this.crawlPathItemElement(e)}}}),sw=ow,iw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],aw=Ys(Tb,{init(){this.name=\"openapi-3-1\"},methods:{canResolve(e){var t;return\"text/plain\"!==e.mediaType?zv.includes(e.mediaType):Mg(null===(t=e.parseResult)||void 0===t?void 0:t.result)},async resolve(e,t){const n=zs(Rv),r=hb({uri:e.uri,value:e.parseResult}),o=sw({reference:r,namespace:n,options:t}),s=db();return s.add(r),await iw(s.rootRef.value,o,{keyMap:Tv,nodeTypeGetter:Iv}),await o.crawl(),s}}}),lw=aw,cw=e=>e.replace(/\\s/g,\"\"),uw=e=>e.replace(/\\W/gi,\"_\"),pw=(e,t,n)=>{const r=cw(e);return r.length>0?uw(r):((e,t)=>`${uw(cw(t.toLowerCase()))}${uw(cw(e))}`)(t,n)},hw=({operationIdNormalizer:e=pw}={})=>({predicates:t,namespace:n})=>{const r=[],o=[],s=[];return{visitor:{OpenApi3_1Element:{leave(){const e=Jr((e=>Ti(e.operationId)),o);Object.entries(e).forEach((([e,t])=>{t.length<=1||t.forEach(((t,r)=>{const o=`${e}${r+1}`;t.operationId=new n.elements.String(o)}))})),s.forEach((e=>{var t;if(void 0===e.operationId)return;const n=String(Ti(e.operationId)),r=o.find((e=>Ti(e.meta.get(\"originalOperationId\"))===n));void 0!==r&&(e.operationId=null===(t=r.operationId)||void 0===t?void 0:t.clone(),e.meta.set(\"originalOperationId\",n),e.set(\"__originalOperationId\",n))})),o.length=0,s.length=0}},PathItemElement:{enter(e){const t=kr(\"path\",Ti(e.meta.get(\"path\")));r.push(t)},leave(){r.pop()}},OperationElement:{enter(t){if(void 0===t.operationId)return;const s=String(Ti(t.operationId)),i=ao(r),a=kr(\"method\",Ti(t.meta.get(\"http-method\"))),l=e(s,i,a);s!==l&&(t.operationId=new n.elements.String(l),t.set(\"__originalOperationId\",s),t.meta.set(\"originalOperationId\",s),o.push(t))}},LinkElement:{leave(e){t.isLinkElement(e)&&void 0!==e.operationId&&s.push(e)}}}}},fw=()=>({predicates:e})=>{const t=(t,n)=>!!e.isParameterElement(t)&&(!!e.isParameterElement(n)&&(!!e.isStringElement(t.name)&&(!!e.isStringElement(t.in)&&(!!e.isStringElement(n.name)&&(!!e.isStringElement(n.in)&&(Ti(t.name)===Ti(n.name)&&Ti(t.in)===Ti(n.in))))))),n=[];return{visitor:{PathItemElement:{enter(t,r,o,s,i){if(i.some(e.isComponentsElement))return;const{parameters:a}=t;e.isArrayElement(a)?n.push([...a.content]):n.push([])},leave(){n.pop()}},OperationElement:{leave(e){const r=ao(n);if(!Array.isArray(r)||0===r.length)return;const o=bo([],[\"parameters\",\"content\"],e),s=Lo(t,[...o,...r]);e.parameters=new ld(s)}}}}},dw=()=>({predicates:e})=>{let t;return{visitor:{OpenApi3_1Element:{enter(n){e.isArrayElement(n.security)&&(t=n.security)},leave(){t=void 0}},OperationElement:{leave(n,r,o,s,i){if(i.some(e.isComponentsElement))return;var a;void 0===n.security&&void 0!==t&&(n.security=new yd(null===(a=t)||void 0===a?void 0:a.content))}}}}},mw=()=>({predicates:e})=>{let t;const n=[];return{visitor:{OpenApi3_1Element:{enter(n){var r;e.isArrayElement(n.servers)&&(t=null===(r=n.servers)||void 0===r?void 0:r.content)},leave(){t=void 0}},PathItemElement:{enter(r,o,s,i,a){if(a.some(e.isComponentsElement))return;void 0===r.servers&&void 0!==t&&(r.servers=new kd(t));const{servers:l}=r;void 0!==l&&e.isArrayElement(l)?n.push([...l.content]):n.push(void 0)},leave(){n.pop()}},OperationElement:{enter(t){const r=ao(n);void 0!==r&&(e.isArrayElement(t.servers)||(t.servers=new wd(r)))}}}}},gw=()=>({predicates:e})=>({visitor:{ParameterElement:{leave(t,n,r,o,s){var i,a;if(!s.some(e.isComponentsElement)&&void 0!==t.schema&&e.isSchemaElement(t.schema)&&(void 0!==(null===(i=t.schema)||void 0===i?void 0:i.example)||void 0!==(null===(a=t.schema)||void 0===a?void 0:a.examples))){if(void 0!==t.examples&&e.isObjectElement(t.examples)){const e=t.examples.map((e=>{var t;return null===(t=e.value)||void 0===t?void 0:t.clone()}));return void 0!==t.schema.examples&&t.schema.set(\"examples\",e),void(void 0!==t.schema.example&&t.schema.set(\"example\",e))}void 0!==t.example&&(void 0!==t.schema.examples&&t.schema.set(\"examples\",[t.example.clone()]),void 0!==t.schema.example&&t.schema.set(\"example\",t.example.clone()))}}}}}),yw=()=>({predicates:e})=>({visitor:{HeaderElement:{leave(t,n,r,o,s){var i,a;if(!s.some(e.isComponentsElement)&&void 0!==t.schema&&e.isSchemaElement(t.schema)&&(void 0!==(null===(i=t.schema)||void 0===i?void 0:i.example)||void 0!==(null===(a=t.schema)||void 0===a?void 0:a.examples))){if(void 0!==t.examples&&e.isObjectElement(t.examples)){const e=t.examples.map((e=>{var t;return null===(t=e.value)||void 0===t?void 0:t.clone()}));return void 0!==t.schema.examples&&t.schema.set(\"examples\",e),void(void 0!==t.schema.example&&t.schema.set(\"example\",e))}void 0!==t.example&&(void 0!==t.schema.examples&&t.schema.set(\"examples\",[t.example.clone()]),void 0!==t.schema.example&&t.schema.set(\"example\",t.example.clone()))}}}}}),vw=e=>t=>{if(t?.$$normalized)return t;if(vw.cache.has(t))return t;const n=km.refract(t),r=e(n),o=Ti(r);return vw.cache.set(t,o),o};vw.cache=new WeakMap;const bw=e=>{if(!bs(e))return e;if(e.hasKey(\"$$normalized\"))return e;const t=[hw({operationIdNormalizer:(e,t,n)=>(0,He.Z)({operationId:e},t,n,{v2OperationIdCompatibilityMode:!1})}),fw(),dw(),mw(),gw(),yw()],n=di(e,t,{toolboxCreator:Fv,visitorOptions:{keyMap:Tv,nodeTypeGetter:Iv}});return n.set(\"$$normalized\",!0),n},ww=Ys({props:{name:null},methods:{canRead:()=>!1,async read(){throw new Cb}}}),Ew=Ys(ww,{props:{timeout:5e3,redirects:5,withCredentials:!1},init({timeout:e=this.timeout,redirects:t=this.redirects,withCredentials:n=this.withCredentials}={}){this.timeout=e,this.redirects=t,this.withCredentials=n},methods:{canRead:e=>rb(e.uri),async read(){throw new Cb},getHttpClient(){throw new Cb}}}).compose({props:{name:\"http-swagger-client\",swaggerHTTPClient:ct,swaggerHTTPClientConfig:{}},init(){let{swaggerHTTPClient:e=this.swaggerHTTPClient}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.swaggerHTTPClient=e},methods:{getHttpClient(){return this.swaggerHTTPClient},async read(e){const t=this.getHttpClient(),n=new AbortController,{signal:r}=n,o=setTimeout((()=>{n.abort()}),this.timeout),s=this.getHttpClient().withCredentials||this.withCredentials?\"include\":\"same-origin\",i=0===this.redirects?\"error\":\"follow\",a=this.redirects>0?this.redirects:void 0;try{return(await t(f()({url:e.uri,signal:r,userFetch:async(e,t)=>{let n=await fetch(e,t);try{n.headers.delete(\"Content-Type\")}catch{n=new Response(n.body,f()(f()({},n),{},{headers:new Headers(n.headers)})),n.headers.delete(\"Content-Type\")}return n},credentials:s,redirects:i,follow:a},this.swaggerHTTPClientConfig))).text.arrayBuffer()}catch(t){throw new Mb(`Error downloading \"${e.uri}\"`,{cause:t})}finally{clearTimeout(o)}}}}),xw=Nb.compose({props:{name:\"json-swagger-client\",fileExtensions:[\".json\"],mediaTypes:[\"application/json\"]},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{return JSON.parse(e.toString()),!0}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"json-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();if(this.allowEmpty&&\"\"===n.trim())return t;try{const e=Ii(JSON.parse(n));return e.classes.push(\"result\"),t.push(e),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),Sw=Nb.compose({props:{name:\"yaml-1-2-swagger-client\",fileExtensions:[\".yaml\",\".yml\"],mediaTypes:[\"text/yaml\",\"application/yaml\"]},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{return le.ZP.load(e.toString(),{schema:le.A8}),!0}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"yaml-1-2-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();try{const e=le.ZP.load(n,{schema:le.A8});if(this.allowEmpty&&void 0===e)return t;const r=Ii(e);return r.classes.push(\"result\"),t.push(r),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),_w=Nb.compose({props:{name:\"openapi-json-3-1-swagger-client\",fileExtensions:[\".json\"],mediaTypes:new Uv(...zv.filterByFormat(\"generic\"),...zv.filterByFormat(\"json\")),detectionRegExp:/\"openapi\"\\s*:\\s*\"(?<version_json>3\\.1\\.(?:[1-9]\\d*|0))\"/},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{const t=e.toString();return JSON.parse(t),this.detectionRegExp.test(t)}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"openapi-json-3-1-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();if(this.allowEmpty&&\"\"===n.trim())return t;try{const e=JSON.parse(n),r=km.refract(e,this.refractorOpts);return r.classes.push(\"result\"),t.push(r),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),jw=Nb.compose({props:{name:\"openapi-yaml-3-1-swagger-client\",fileExtensions:[\".yaml\",\".yml\"],mediaTypes:new Uv(...zv.filterByFormat(\"generic\"),...zv.filterByFormat(\"yaml\")),detectionRegExp:/(?<YAML>^([\"']?)openapi\\2\\s*:\\s*([\"']?)(?<version_yaml>3\\.1\\.(?:[1-9]\\d*|0))\\3(?:\\s+|$))|(?<JSON>\"openapi\"\\s*:\\s*\"(?<version_json>3\\.1\\.(?:[1-9]\\d*|0))\")/m},methods:{async canParse(e){const t=0===this.fileExtensions.length||this.fileExtensions.includes(e.extension),n=this.mediaTypes.includes(e.mediaType);if(!t)return!1;if(n)return!0;if(!n)try{const t=e.toString();return le.ZP.load(t),this.detectionRegExp.test(t)}catch(e){return!1}return!1},async parse(e){if(this.sourceMap)throw new _b(\"openapi-yaml-3-1-swagger-client parser plugin doesn't support sourceMaps option\");const t=new zo,n=e.toString();try{const e=le.ZP.load(n,{schema:le.A8});if(this.allowEmpty&&void 0===e)return t;const r=km.refract(e,this.refractorOpts);return r.classes.push(\"result\"),t.push(r),t}catch(t){throw new _b(`Error parsing \"${e.uri}\"`,{cause:t})}}}}),Ow=Ys({props:{name:null},methods:{canDereference:()=>!1,async dereference(){throw new Cb}}});function kw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Aw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kw(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kw(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Cw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],Pw=Ys({props:{indirections:null,namespace:null,reference:null,options:null,ancestors:null},init({indirections:e=[],reference:t,namespace:n,options:r,ancestors:o=[]}){this.indirections=e,this.namespace=n,this.reference=t,this.options=r,this.ancestors=[...o]},methods:{toBaseURI(e){return lb(this.reference.uri,cb(ib(e)))},toAncestorLineage(e){const t=new WeakSet(e.filter(ds));return[[...this.ancestors,t],t]},async toReference(e){if(this.reference.depth>=this.options.resolve.maxDepth)throw new Db(`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file \"${this.reference.uri}\"`);const t=this.toBaseURI(e),{refSet:n}=this.reference;if(n.has(t))return n.find(xo(t,\"uri\"));const r=await qb(ub(t),Aw(Aw({},this.options),{},{parse:Aw(Aw({},this.options.parse),{},{mediaType:\"text/plain\"})})),o=hb({uri:t,value:r,depth:this.reference.depth+1});return n.add(o),o},async ReferenceElement(e,t,n,r,o){var s,i,a,l,c;const[u,p]=this.toAncestorLineage([...o,n]);if(u.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Ug(e))return!1;const h=await this.toReference(null===(s=e.$ref)||void 0===s?void 0:s.toValue()),f=h.uri,d=lb(f,null===(i=e.$ref)||void 0===i?void 0:i.toValue());this.indirections.push(e);const m=Ki(d);let g=Ji(m,h.value.result);if(As(g)){const t=e.meta.get(\"referenced-element\").toValue();if(Uc(g))g=Tm.refract(g),g.setMetaProperty(\"referenced-element\",t);else{g=this.namespace.getElementClass(t).refract(g)}}if(this.indirections.includes(g))throw new Error(\"Recursive Reference Object detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);p.add(e);const y=Pw({reference:h,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:u});g=await Cw(g,y,{keyMap:Tv,nodeTypeGetter:Iv}),p.delete(e),this.indirections.pop(),g=g.clone(),g.setMetaProperty(\"ref-fields\",{$ref:null===(a=e.$ref)||void 0===a?void 0:a.toValue(),description:null===(l=e.description)||void 0===l?void 0:l.toValue(),summary:null===(c=e.summary)||void 0===c?void 0:c.toValue()}),g.setMetaProperty(\"ref-origin\",h.uri);const v=wo(Kv,[\"description\"],e),b=wo(Kv,[\"summary\"],e);return v&&Gr(\"description\",g)&&(g.description=e.description),b&&Gr(\"summary\",g)&&(g.summary=e.summary),this.indirections.pop(),g},async PathItemElement(e,t,n,r,o){var s,i,a;const[l,c]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(l.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Bg(e))return;const u=await this.toReference(null===(s=e.$ref)||void 0===s?void 0:s.toValue()),p=u.uri,h=lb(p,null===(i=e.$ref)||void 0===i?void 0:i.toValue());this.indirections.push(e);const f=Ki(h);let d=Ji(f,u.value.result);if(As(d)&&(d=Pm.refract(d)),this.indirections.includes(d))throw new Error(\"Recursive Path Item Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);c.add(e);const m=Pw({reference:u,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:l});d=await Cw(d,m,{keyMap:Tv,nodeTypeGetter:Iv}),c.delete(e),this.indirections.pop();const g=new Pm([...d.content],d.meta.clone(),d.attributes.clone());return e.forEach(((e,t,n)=>{g.remove(t.toValue()),g.content.push(n)})),g.remove(\"$ref\"),g.setMetaProperty(\"ref-fields\",{$ref:null===(a=e.$ref)||void 0===a?void 0:a.toValue()}),g.setMetaProperty(\"ref-origin\",u.uri),g},async LinkElement(e){if(!ms(e.operationRef)&&!ms(e.operationId))return;if(!this.options.resolve.external&&Tg(e))return;if(ms(e.operationRef)&&ms(e.operationId))throw new Error(\"LinkElement operationRef and operationId fields are mutually exclusive.\");let t;if(ms(e.operationRef)){var n,r,o;const s=Ki(null===(n=e.operationRef)||void 0===n?void 0:n.toValue()),i=await this.toReference(null===(r=e.operationRef)||void 0===r?void 0:r.toValue());t=Ji(s,i.value.result),As(t)&&(t=Am.refract(t)),t=new Am([...t.content],t.meta.clone(),t.attributes.clone()),t.setMetaProperty(\"ref-origin\",i.uri),null===(o=e.operationRef)||void 0===o||o.meta.set(\"operation\",t)}else if(ms(e.operationId)){var s,i;const n=null===(s=e.operationId)||void 0===s?void 0:s.toValue();if(t=Vb((e=>Dg(e)&&e.operationId.equals(n)),this.reference.value.result),qo(t))throw new Error(`OperationElement(operationId=${n}) not found.`);null===(i=e.operationId)||void 0===i||i.meta.set(\"operation\",t)}},async ExampleElement(e){var t;if(!ms(e.externalValue))return;if(!this.options.resolve.external&&ms(e.externalValue))return;if(e.hasKey(\"value\")&&ms(e.externalValue))throw new Error(\"ExampleElement value and externalValue fields are mutually exclusive.\");const n=await this.toReference(null===(t=e.externalValue)||void 0===t?void 0:t.toValue()),r=new n.value.result.constructor(n.value.result.content,n.value.result.meta.clone(),n.value.result.attributes.clone());r.setMetaProperty(\"ref-origin\",n.uri),e.value=r},async SchemaElement(e,t,n,r,o){var s;const[i,a]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(i.some((t=>t.has(e))))return!1;let{reference:l}=this,{uri:c}=l;const u=Yb(c,e),p=ib(u),h=vb({uri:p}),f=go((e=>e.canRead(h)),this.options.resolve.resolvers),d=!f,m=d&&c!==p;if(!this.options.resolve.external&&m)return;let g;this.indirections.push(e);try{if(f||d){g=ew(u,Qb(l.value.result))}else{l=await this.toReference(ub(u));const e=Ki(u);g=Qb(Ji(e,l.value.result))}}catch(e){if(!(d&&e instanceof zb))throw e;if(Hb(Gb(u))){l=await this.toReference(ub(u)),c=l.uri;const e=Gb(u);g=Zb(e,Qb(l.value.result))}else{l=await this.toReference(ub(u)),c=l.uri;const e=Ki(u);g=Qb(Ji(e,l.value.result))}}if(this.indirections.includes(g))throw new Error(\"Recursive Schema Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);a.add(e);const y=Pw({reference:l,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:i});if(g=await Cw(g,y,{keyMap:Tv,nodeTypeGetter:Iv}),a.delete(e),this.indirections.pop(),Kg(g)){var v;const t=g.clone();return t.setMetaProperty(\"ref-fields\",{$ref:null===(v=e.$ref)||void 0===v?void 0:v.toValue()}),t.setMetaProperty(\"ref-origin\",l.uri),t}const b=new Lm([...g.content],g.meta.clone(),g.attributes.clone());return e.forEach(((e,t,n)=>{b.remove(t.toValue()),b.content.push(n)})),b.remove(\"$ref\"),b.setMetaProperty(\"ref-fields\",{$ref:null===(s=e.$ref)||void 0===s?void 0:s.toValue()}),b.setMetaProperty(\"ref-origin\",l.uri),b}}}),Nw=Pw,Iw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],Tw=Ys(Ow,{init(){this.name=\"openapi-3-1\"},methods:{canDereference(e){var t;return\"text/plain\"!==e.mediaType?zv.includes(e.mediaType):Mg(null===(t=e.parseResult)||void 0===t?void 0:t.result)},async dereference(e,t){const n=zs(Rv),r=kr(db(),t.dereference.refSet);let o;r.has(e.uri)?o=r.find(xo(e.uri,\"uri\")):(o=hb({uri:e.uri,value:e.parseResult}),r.add(o));const s=Nw({reference:o,namespace:n,options:t}),i=await Iw(r.rootRef.value,s,{keyMap:Tv,nodeTypeGetter:Iv});return null===t.dereference.refSet&&r.clean(),i}}}),Rw=Tw,Mw=e=>{const t=(e=>e.slice(2))(e);return t.reduce(((e,n,r)=>{if(Es(n)){const t=String(n.key.toValue());e.push(t)}else if(ws(t[r-2])){const o=t[r-2].content.indexOf(n);e.push(o)}return e}),[])},Dw=e=>{if(null==e.cause)return e;let{cause:t}=e;for(;null!=t.cause;)t=t.cause;return t},Fw=ue(\"SchemaRefError\",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),{wrapError:Lw}=ke,Bw=fi[Symbol.for(\"nodejs.util.promisify.custom\")],$w=Nw.compose({props:{useCircularStructures:!0,allowMetaPatches:!1,basePath:null},init(e){let{allowMetaPatches:t=this.allowMetaPatches,useCircularStructures:n=this.useCircularStructures,basePath:r=this.basePath}=e;this.allowMetaPatches=t,this.useCircularStructures=n,this.basePath=r},methods:{async ReferenceElement(e,t,n,r,o){try{const[t,r]=this.toAncestorLineage([...o,n]);if(Ns([\"cycle\"],e.$ref))return!1;if(t.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Ug(e))return!1;const s=await this.toReference(e.$ref.toValue()),i=s.uri,a=lb(i,e.$ref.toValue());this.indirections.push(e);const l=Ki(a);let c=Ji(l,s.value.result);if(As(c)){const t=e.meta.get(\"referenced-element\").toValue();if(Uc(c))c=Tm.refract(c),c.setMetaProperty(\"referenced-element\",t);else{const e=this.namespace.getElementClass(t);c=e.refract(c)}}if(this.indirections.includes(c))throw new Error(\"Recursive JSON Pointer detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);if(!this.useCircularStructures){if(t.some((e=>e.has(c)))){if(rb(i)||nb(i)){const t=new Tm({$ref:a},e.meta.clone(),e.attributes.clone());return t.get(\"$ref\").classes.push(\"cycle\"),t}return!1}}r.add(e);const u=$w({reference:s,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:t,allowMetaPatches:this.allowMetaPatches,useCircularStructures:this.useCircularStructures,basePath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});c=await Bw(c,u,{keyMap:Tv,nodeTypeGetter:Iv}),r.delete(e),this.indirections.pop(),c=c.clone(),c.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue(),description:e.description?.toValue(),summary:e.summary?.toValue()}),c.setMetaProperty(\"ref-origin\",s.uri);const p=void 0!==e.description,h=void 0!==e.summary;if(p&&\"description\"in c&&(c.description=e.description),h&&\"summary\"in c&&(c.summary=e.summary),this.allowMetaPatches&&bs(c)){const e=c;if(void 0===e.get(\"$$ref\")){const t=lb(i,a);e.set(\"$$ref\",t)}}return c}catch(t){const r=Dw(t),s=Lw(r,{baseDoc:this.reference.uri,$ref:e.$ref.toValue(),pointer:Ki(e.$ref.toValue()),fullPath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}},async PathItemElement(e,t,n,r,o){try{const[t,r]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(Ns([\"cycle\"],e.$ref))return!1;if(t.some((t=>t.has(e))))return!1;if(!this.options.resolve.external&&Bg(e))return;const s=await this.toReference(e.$ref.toValue()),i=s.uri,a=lb(i,e.$ref.toValue());this.indirections.push(e);const l=Ki(a);let c=Ji(l,s.value.result);if(As(c)&&(c=Pm.refract(c)),this.indirections.includes(c))throw new Error(\"Recursive JSON Pointer detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);if(!this.useCircularStructures){if(t.some((e=>e.has(c)))){if(rb(i)||nb(i)){const t=new Pm({$ref:a},e.meta.clone(),e.attributes.clone());return t.get(\"$ref\").classes.push(\"cycle\"),t}return!1}}r.add(e);const u=$w({reference:s,namespace:this.namespace,indirections:[...this.indirections],options:this.options,ancestors:t,allowMetaPatches:this.allowMetaPatches,useCircularStructures:this.useCircularStructures,basePath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});c=await Bw(c,u,{keyMap:Tv,nodeTypeGetter:Iv}),r.delete(e),this.indirections.pop();const p=new Pm([...c.content],c.meta.clone(),c.attributes.clone());if(e.forEach(((e,t,n)=>{p.remove(t.toValue()),p.content.push(n)})),p.remove(\"$ref\"),p.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue()}),p.setMetaProperty(\"ref-origin\",s.uri),this.allowMetaPatches&&void 0===p.get(\"$$ref\")){const e=lb(i,a);p.set(\"$$ref\",e)}return p}catch(t){const r=Dw(t),s=Lw(r,{baseDoc:this.reference.uri,$ref:e.$ref.toValue(),pointer:Ki(e.$ref.toValue()),fullPath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}},async SchemaElement(e,t,n,r,o){try{const[t,r]=this.toAncestorLineage([...o,n]);if(!ms(e.$ref))return;if(Ns([\"cycle\"],e.$ref))return!1;if(t.some((t=>t.has(e))))return!1;let{reference:s}=this,{uri:i}=s;const a=Yb(i,e),l=ib(a),c=vb({uri:l}),u=!this.options.resolve.resolvers.some((e=>e.canRead(c))),p=!u,h=p&&i!==l;if(!this.options.resolve.external&&h)return;let f;this.indirections.push(e);try{if(u||p){f=ew(a,Qb(s.value.result))}else{s=await this.toReference(ub(a)),i=s.uri;const e=Ki(a);f=Qb(Ji(e,s.value.result))}}catch(e){if(!(p&&e instanceof zb))throw e;if(Hb(Gb(a))){s=await this.toReference(ub(a)),i=s.uri;const e=Gb(a);f=Zb(e,Qb(s.value.result))}else{s=await this.toReference(ub(a)),i=s.uri;const e=Ki(a);f=Qb(Ji(e,s.value.result))}}if(this.indirections.includes(f))throw new Error(\"Recursive Schema Object reference detected\");if(this.indirections.length>this.options.dereference.maxDepth)throw new Fb(`Maximum dereference depth of \"${this.options.dereference.maxDepth}\" has been exceeded in file \"${this.reference.uri}\"`);if(!this.useCircularStructures){if(t.some((e=>e.has(f)))){if(rb(i)||nb(i)){const t=lb(i,a),n=new Lm({$ref:t},e.meta.clone(),e.attributes.clone());return n.get(\"$ref\").classes.push(\"cycle\"),n}return!1}}r.add(e);const d=$w({reference:s,namespace:this.namespace,indirections:[...this.indirections],options:this.options,useCircularStructures:this.useCircularStructures,allowMetaPatches:this.allowMetaPatches,ancestors:t,basePath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]});if(f=await Bw(f,d,{keyMap:Tv,nodeTypeGetter:Iv}),r.delete(e),this.indirections.pop(),Kg(f)){const t=f.clone();return t.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue()}),t.setMetaProperty(\"ref-origin\",i),t}const m=new Lm([...f.content],f.meta.clone(),f.attributes.clone());if(e.forEach(((e,t,n)=>{m.remove(t.toValue()),m.content.push(n)})),m.remove(\"$ref\"),m.setMetaProperty(\"ref-fields\",{$ref:e.$ref?.toValue()}),m.setMetaProperty(\"ref-origin\",i),this.allowMetaPatches&&void 0===m.get(\"$$ref\")){const e=lb(i,a);m.set(\"$$ref\",e)}return m}catch(t){const r=Dw(t),s=new Fw(`Could not resolve reference: ${r.message}`,{baseDoc:this.reference.uri,$ref:e.$ref.toValue(),fullPath:this.basePath??[...Mw([...o,n,e]),\"$ref\"]},r);return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}},async LinkElement(){},async ExampleElement(e,t,n,r,o){try{return await Nw.compose.methods.ExampleElement.call(this,e,t,n,r,o)}catch(t){const r=Dw(t),s=Lw(r,{baseDoc:this.reference.uri,externalValue:e.externalValue?.toValue(),fullPath:this.basePath??[...Mw([...o,n,e]),\"externalValue\"]});return void this.options.dereference.dereferenceOpts?.errors?.push?.(s)}}}}),qw=$w,Uw=Rw.compose.bind(),zw=Uw({init(e){let{parameterMacro:t,options:n}=e;this.parameterMacro=t,this.options=n},props:{parameterMacro:null,options:null,macroOperation:null,OperationElement:{enter(e){this.macroOperation=e},leave(){this.macroOperation=null}},ParameterElement:{leave(e,t,n,r,o){const s=null===this.macroOperation?null:Ti(this.macroOperation),i=Ti(e);try{const t=this.parameterMacro(s,i);e.set(\"default\",t)}catch(e){const t=new Error(e,{cause:e});t.fullPath=Mw([...o,n]),this.options.dereference.dereferenceOpts?.errors?.push?.(t)}}}}}),Vw=Uw({init(e){let{modelPropertyMacro:t,options:n}=e;this.modelPropertyMacro=t,this.options=n},props:{modelPropertyMacro:null,options:null,SchemaElement:{leave(e,t,n,r,o){void 0!==e.properties&&bs(e.properties)&&e.properties.forEach((t=>{if(bs(t))try{const e=this.modelPropertyMacro(Ti(t));t.set(\"default\",e)}catch(t){const r=new Error(t,{cause:t});r.fullPath=[...Mw([...o,n,e]),\"properties\"],this.options.dereference.dereferenceOpts?.errors?.push?.(r)}}))}}}});function Ww(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Jw(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ww(Object(n),!0).forEach((function(t){Xo(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ww(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const Kw=e=>{const t=e.meta.clone(),n=e.attributes.clone();return new e.constructor(void 0,t,n)},Hw=e=>new Pt.c6(e.key,e.value,e.meta.clone(),e.attributes.clone()),Gw=(e,t)=>t.clone&&t.isMergeableElement(e)?Xw(Kw(e),e,t):e,Zw=(e,t,n)=>e.concat(t)[\"fantasy-land/map\"]((e=>Gw(e,n))),Yw=(e,t,n)=>{const r=bs(e)?Kw(e):Kw(t);return bs(e)&&e.forEach(((e,t,o)=>{const s=Hw(o);s.value=Gw(e,n),r.content.push(s)})),t.forEach(((t,o,s)=>{const i=o.toValue();let a;if(bs(e)&&e.hasKey(i)&&n.isMergeableElement(t)){const r=e.get(i);a=Hw(s),a.value=((e,t)=>{if(\"function\"!=typeof t.customMerge)return Xw;const n=t.customMerge(e,t);return\"function\"==typeof n?n:Xw})(o,n)(r,t)}else a=Hw(s),a.value=Gw(t,n);r.remove(i),r.content.push(a)})),r};function Xw(e,t,n){var r,o,s;const i={clone:!0,isMergeableElement:e=>bs(e)||ws(e),arrayElementMerge:Zw,objectElementMerge:Yw,customMerge:void 0},a=Jw(Jw({},i),n);a.isMergeableElement=null!==(r=a.isMergeableElement)&&void 0!==r?r:i.isMergeableElement,a.arrayElementMerge=null!==(o=a.arrayElementMerge)&&void 0!==o?o:i.arrayElementMerge,a.objectElementMerge=null!==(s=a.objectElementMerge)&&void 0!==s?s:i.objectElementMerge;const l=ws(t);return l===ws(e)?l&&\"function\"==typeof a.arrayElementMerge?a.arrayElementMerge(e,t,a):a.objectElementMerge(e,t,a):Gw(t,a)}Xw.all=(e,t)=>{if(!Array.isArray(e))throw new Error(\"first argument should be an array\");return 0===e.length?new Pt.Sb:e.reduce(((e,n)=>Xw(e,n,t)),Kw(e[0]))};const Qw=Uw({init(e){let{options:t}=e;this.options=t},props:{options:null,SchemaElement:{leave(e,t,n,r,o){if(void 0===e.allOf)return;if(!ws(e.allOf)){const t=new TypeError(\"allOf must be an array\");return t.fullPath=[...Mw([...o,n,e]),\"allOf\"],void this.options.dereference.dereferenceOpts?.errors?.push?.(t)}if(e.allOf.isEmpty)return new Lm(e.content.filter((e=>\"allOf\"!==e.key.toValue())),e.meta.clone(),e.attributes.clone());if(!e.allOf.content.every(Jg)){const t=new TypeError(\"Elements in allOf must be objects\");return t.fullPath=[...Mw([...o,n,e]),\"allOf\"],void this.options.dereference.dereferenceOpts?.errors?.push?.(t)}const s=Xw.all([...e.allOf.content,e]);if(e.hasKey(\"$$ref\")||s.remove(\"$$ref\"),e.hasKey(\"example\")){s.getMember(\"example\").value=e.get(\"example\")}if(e.hasKey(\"examples\")){s.getMember(\"examples\").value=e.get(\"examples\")}return s.remove(\"allOf\"),s}}}}),eE=fi[Symbol.for(\"nodejs.util.promisify.custom\")],tE=Rw.compose({props:{useCircularStructures:!0,allowMetaPatches:!1,parameterMacro:null,modelPropertyMacro:null,mode:\"non-strict\",ancestors:null},init(){let{useCircularStructures:e=this.useCircularStructures,allowMetaPatches:t=this.allowMetaPatches,parameterMacro:n=this.parameterMacro,modelPropertyMacro:r=this.modelPropertyMacro,mode:o=this.mode,ancestors:s=[]}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.name=\"openapi-3-1-swagger-client\",this.useCircularStructures=e,this.allowMetaPatches=t,this.parameterMacro=n,this.modelPropertyMacro=r,this.mode=o,this.ancestors=[...s]},methods:{async dereference(e,t){const n=[],r=zs(Rv),o=t.dereference.refSet??db();let s;o.has(e.uri)?s=o.find((t=>t.uri===e.uri)):(s=hb({uri:e.uri,value:e.parseResult}),o.add(s));const i=qw({reference:s,namespace:r,options:t,useCircularStructures:this.useCircularStructures,allowMetaPatches:this.allowMetaPatches,ancestors:this.ancestors});if(n.push(i),\"function\"==typeof this.parameterMacro){const e=zw({parameterMacro:this.parameterMacro,options:t});n.push(e)}if(\"function\"==typeof this.modelPropertyMacro){const e=Vw({modelPropertyMacro:this.modelPropertyMacro,options:t});n.push(e)}if(\"strict\"!==this.mode){const e=Qw({options:t});n.push(e)}const a=ri(n,{nodeTypeGetter:Iv}),l=await eE(o.rootRef.value,a,{keyMap:Tv,nodeTypeGetter:Iv});return null===t.dereference.refSet&&o.clean(),l}}}),nE=tE,rE=async e=>{const{spec:t,timeout:n,redirects:r,requestInterceptor:o,responseInterceptor:s,pathDiscriminator:i=[],allowMetaPatches:a=!1,useCircularStructures:l=!1,skipNormalization:c=!1,parameterMacro:u=null,modelPropertyMacro:p=null,mode:h=\"non-strict\"}=e;try{const{cache:d}=rE,m=rb(ab())?ab():\"https://smartbear.com/\",g=Et(e),y=lb(m,g);let v;d.has(t)?v=d.get(t):(v=km.refract(t),v.classes.push(\"result\"),d.set(t,v));const b=new zo([v]),w=0===(f=i).length?\"\":`/${f.map(Vi).join(\"/\")}`,E=\"\"===w?\"\":`#${w}`,x=Ji(w,v),S=hb({uri:y,value:b}),_=db({refs:[S]});\"\"!==w&&(_.rootRef=null);const j=[new WeakSet([x])],O=[],k=((e,t,n)=>Ei({element:n}).transclude(e,t))(x,await Ab(x,{resolve:{baseURI:`${y}${E}`,resolvers:[Ew({timeout:n||1e4,redirects:r||10})],resolverOpts:{swaggerHTTPClientConfig:{requestInterceptor:o,responseInterceptor:s}},strategies:[lw()]},parse:{mediaType:zv.latest(),parsers:[_w({allowEmpty:!1,sourceMap:!1}),jw({allowEmpty:!1,sourceMap:!1}),xw({allowEmpty:!1,sourceMap:!1}),Sw({allowEmpty:!1,sourceMap:!1}),Ib({allowEmpty:!1,sourceMap:!1})]},dereference:{maxDepth:100,strategies:[nE({allowMetaPatches:a,useCircularStructures:l,parameterMacro:u,modelPropertyMacro:p,mode:h,ancestors:j})],refSet:_,dereferenceOpts:{errors:O}}}),v),A=c?k:bw(k);return{spec:Ti(A),errors:O}}catch(e){if(e instanceof Ui||e instanceof zi)return{spec:null,errors:[]};throw e}var f};rE.cache=new WeakMap;const oE=rE,sE={name:\"openapi-3-1-apidom\",match(e){let{spec:t}=e;return Ot(t)},normalize(e){let{spec:t}=e;return vw(bw)(t)},resolve:async e=>oE(e)},iE=e=>async t=>(async e=>{const{spec:t,requestInterceptor:n,responseInterceptor:r}=e,o=Et(e),s=xt(e),i=t||await Ze(s,{requestInterceptor:n,responseInterceptor:r})(o),a=f()(f()({},e),{},{spec:i});return e.strategies.find((e=>e.match(a))).resolve(a)})(f()(f()({},e),t)),aE=iE({strategies:[Ct,At,_t]});var lE=n(88436),cE=n.n(lE),uE=n(27361),pE=n.n(uE),hE=n(76489);function fE(e){return\"[object Object]\"===Object.prototype.toString.call(e)}function dE(e){var t,n;return!1!==fE(e)&&(void 0===(t=e.constructor)||!1!==fE(n=t.prototype)&&!1!==n.hasOwnProperty(\"isPrototypeOf\"))}const mE={body:function(e){let{req:t,value:n}=e;t.body=n},header:function(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{},void 0!==r&&(t.headers[n.name]=r)},query:function(e){let{req:t,value:n,parameter:r}=e;t.query=t.query||{},!1===n&&\"boolean\"===r.type&&(n=\"false\");0===n&&[\"number\",\"integer\"].indexOf(r.type)>-1&&(n=\"0\");if(n)t.query[r.name]={collectionFormat:r.collectionFormat,value:n};else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}},path:function(e){let{req:t,value:n,parameter:r}=e;t.url=t.url.split(`{${r.name}}`).join(encodeURIComponent(n))},formData:function(e){let{req:t,value:n,parameter:r}=e;(n||r.allowEmptyValue)&&(t.form=t.form||{},t.form[r.name]={value:n,allowEmptyValue:r.allowEmptyValue,collectionFormat:r.collectionFormat})}};function gE(e,t){return t.includes(\"application/json\")?\"string\"==typeof e?e:JSON.stringify(e):e.toString()}function yE(e){let{req:t,value:n,parameter:r}=e;const{name:o,style:s,explode:i,content:a}=r;if(a){const e=Object.keys(a)[0];return void(t.url=t.url.split(`{${o}}`).join(st(gE(n,e),{escape:!0})))}const l=it({key:r.name,value:n,style:s||\"simple\",explode:i||!1,escape:!0});t.url=t.url.split(`{${o}}`).join(l)}function vE(e){let{req:t,value:n,parameter:r}=e;if(t.query=t.query||{},r.content){const e=gE(n,Object.keys(r.content)[0]);if(e)t.query[r.name]=e;else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}else if(!1===n&&(n=\"false\"),0===n&&(n=\"0\"),n){const{style:e,explode:o,allowReserved:s}=r;t.query[r.name]={value:n,serializationOption:{style:e,explode:o,allowReserved:s}}}else if(r.allowEmptyValue&&void 0!==n){const e=r.name;t.query[e]=t.query[e]||{},t.query[e].allowEmptyValue=!0}}const bE=[\"accept\",\"authorization\",\"content-type\"];function wE(e){let{req:t,parameter:n,value:r}=e;if(t.headers=t.headers||{},!(bE.indexOf(n.name.toLowerCase())>-1))if(n.content){const e=Object.keys(n.content)[0];t.headers[n.name]=gE(r,e)}else void 0!==r&&(t.headers[n.name]=it({key:n.name,value:r,style:n.style||\"simple\",explode:void 0!==n.explode&&n.explode,escape:!1}))}function EE(e){let{req:t,parameter:n,value:r}=e;t.headers=t.headers||{};const o=typeof r;if(n.content){const e=Object.keys(n.content)[0];t.headers.Cookie=`${n.name}=${gE(r,e)}`}else if(\"undefined\"!==o){const e=\"object\"===o&&!Array.isArray(r)&&n.explode?\"\":`${n.name}=`;t.headers.Cookie=e+it({key:n.name,value:r,escape:!1,style:n.style||\"form\",explode:void 0!==n.explode&&n.explode})}}const xE=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:window,{btoa:SE}=xE,_E=SE;function jE(e,t){const{operation:n,requestBody:r,securities:o,spec:s,attachContentTypeForEmptyPayload:i}=e;let{requestContentType:a}=e;t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const s=f()({},t),{authorized:i={}}=n,a=r.security||o.security||[],l=i&&!!Object.keys(i).length,c=pE()(o,[\"components\",\"securitySchemes\"])||{};if(s.headers=s.headers||{},s.query=s.query||{},!Object.keys(n).length||!l||!a||Array.isArray(r.security)&&!r.security.length)return t;return a.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e],n=c[e];if(!t)return;const r=t.value||t,{type:o}=n;if(t)if(\"apiKey\"===o)\"query\"===n.in&&(s.query[n.name]=r),\"header\"===n.in&&(s.headers[n.name]=r),\"cookie\"===n.in&&(s.cookies[n.name]=r);else if(\"http\"===o){if(/^basic$/i.test(n.scheme)){const e=r.username||\"\",t=r.password||\"\",n=_E(`${e}:${t}`);s.headers.Authorization=`Basic ${n}`}/^bearer$/i.test(n.scheme)&&(s.headers.Authorization=`Bearer ${r}`)}else if(\"oauth2\"===o||\"openIdConnect\"===o){const e=t.token||{},r=e[n[\"x-tokenName\"]||\"access_token\"];let o=e.token_type;o&&\"bearer\"!==o.toLowerCase()||(o=\"Bearer\"),s.headers.Authorization=`${o} ${r}`}}))})),s}({request:t,securities:o,operation:n,spec:s});const l=n.requestBody||{},c=Object.keys(l.content||{}),u=a&&c.indexOf(a)>-1;if(r||i){if(a&&u)t.headers[\"Content-Type\"]=a;else if(!a){const e=c[0];e&&(t.headers[\"Content-Type\"]=e,a=e)}}else a&&u&&(t.headers[\"Content-Type\"]=a);if(!e.responseContentType&&n.responses){const e=Object.entries(n.responses).filter((e=>{let[t,n]=e;const r=parseInt(t,10);return r>=200&&r<300&&dE(n.content)})).reduce(((e,t)=>{let[,n]=t;return e.concat(Object.keys(n.content))}),[]);e.length>0&&(t.headers.accept=e.join(\", \"))}if(r)if(a){if(c.indexOf(a)>-1)if(\"application/x-www-form-urlencoded\"===a||\"multipart/form-data\"===a)if(\"object\"==typeof r){const e=(l.content[a]||{}).encoding||{};t.form={},Object.keys(r).forEach((n=>{t.form[n]={value:r[n],encoding:e[n]||{}}}))}else t.form=r;else t.body=r}else t.body=r;return t}function OE(e,t){const{spec:n,operation:r,securities:o,requestContentType:s,responseContentType:i,attachContentTypeForEmptyPayload:a}=e;if(t=function(e){let{request:t,securities:n={},operation:r={},spec:o}=e;const s=f()({},t),{authorized:i={},specSecurity:a=[]}=n,l=r.security||a,c=i&&!!Object.keys(i).length,u=o.securityDefinitions;if(s.headers=s.headers||{},s.query=s.query||{},!Object.keys(n).length||!c||!l||Array.isArray(r.security)&&!r.security.length)return t;return l.forEach((e=>{Object.keys(e).forEach((e=>{const t=i[e];if(!t)return;const{token:n}=t,r=t.value||t,o=u[e],{type:a}=o,l=o[\"x-tokenName\"]||\"access_token\",c=n&&n[l];let p=n&&n.token_type;if(t)if(\"apiKey\"===a){const e=\"query\"===o.in?\"query\":\"headers\";s[e]=s[e]||{},s[e][o.name]=r}else if(\"basic\"===a)if(r.header)s.headers.authorization=r.header;else{const e=r.username||\"\",t=r.password||\"\";r.base64=_E(`${e}:${t}`),s.headers.authorization=`Basic ${r.base64}`}else\"oauth2\"===a&&c&&(p=p&&\"bearer\"!==p.toLowerCase()?p:\"Bearer\",s.headers.authorization=`${p} ${c}`)}))})),s}({request:t,securities:o,operation:r,spec:n}),t.body||t.form||a)s?t.headers[\"Content-Type\"]=s:Array.isArray(r.consumes)?[t.headers[\"Content-Type\"]]=r.consumes:Array.isArray(n.consumes)?[t.headers[\"Content-Type\"]]=n.consumes:r.parameters&&r.parameters.filter((e=>\"file\"===e.type)).length?t.headers[\"Content-Type\"]=\"multipart/form-data\":r.parameters&&r.parameters.filter((e=>\"formData\"===e.in)).length&&(t.headers[\"Content-Type\"]=\"application/x-www-form-urlencoded\");else if(s){const e=r.parameters&&r.parameters.filter((e=>\"body\"===e.in)).length>0,n=r.parameters&&r.parameters.filter((e=>\"formData\"===e.in)).length>0;(e||n)&&(t.headers[\"Content-Type\"]=s)}return!i&&Array.isArray(r.produces)&&r.produces.length>0&&(t.headers.accept=r.produces.join(\", \")),t}function kE(e,t){return`${t.toLowerCase()}-${e}`}const AE=[\"http\",\"fetch\",\"spec\",\"operationId\",\"pathName\",\"method\",\"parameters\",\"securities\"],CE=e=>Array.isArray(e)?e:[],PE=ue(\"OperationNotFoundError\",(function(e,t,n){this.originalError=n,Object.assign(this,t||{})})),NE=(e,t)=>t.filter((t=>t.name===e)),IE=e=>{const t={};e.forEach((e=>{t[e.in]||(t[e.in]={}),t[e.in][e.name]=e}));const n=[];return Object.keys(t).forEach((e=>{Object.keys(t[e]).forEach((r=>{n.push(t[e][r])}))})),n},TE={buildRequest:ME};function RE(e){let{http:t,fetch:n,spec:r,operationId:o,pathName:s,method:i,parameters:a,securities:l}=e,c=cE()(e,AE);const u=t||n||ct;s&&i&&!o&&(o=kE(s,i));const p=TE.buildRequest(f()({spec:r,operationId:o,parameters:a,securities:l,http:u},c));return p.body&&(dE(p.body)||Array.isArray(p.body))&&(p.body=JSON.stringify(p.body)),u(p)}function ME(e){const{spec:t,operationId:n,responseContentType:r,scheme:o,requestInterceptor:s,responseInterceptor:i,contextUrl:a,userFetch:l,server:c,serverVariables:p,http:h,signal:d}=e;let{parameters:m,parameterBuilders:g}=e;const y=kt(t);g||(g=y?u:mE);let v={url:\"\",credentials:h&&h.withCredentials?\"include\":\"same-origin\",headers:{},cookies:{}};d&&(v.signal=d),s&&(v.requestInterceptor=s),i&&(v.responseInterceptor=i),l&&(v.userFetch=l);const b=function(e,t){return e&&e.paths?function(e,t){return function(e,t,n){if(!e||\"object\"!=typeof e||!e.paths||\"object\"!=typeof e.paths)return null;const{paths:r}=e;for(const o in r)for(const s in r[o]){if(\"PARAMETERS\"===s.toUpperCase())continue;const i=r[o][s];if(!i||\"object\"!=typeof i)continue;const a={spec:e,pathName:o,method:s.toUpperCase(),operation:i},l=t(a);if(n&&l)return a}}(e,t,!0)||null}(e,(e=>{let{pathName:n,method:r,operation:o}=e;if(!o||\"object\"!=typeof o)return!1;const s=o.operationId;return[(0,He.Z)(o,n,r),kE(n,r),s].some((e=>e&&e===t))})):null}(t,n);if(!b)throw new PE(`Operation ${n} not found`);const{operation:w={},method:E,pathName:x}=b;if(v.url+=function(e){const t=kt(e.spec);return t?function(e){let{spec:t,pathName:n,method:r,server:o,contextUrl:s,serverVariables:i={}}=e;const a=pE()(t,[\"paths\",n,(r||\"\").toLowerCase(),\"servers\"])||pE()(t,[\"paths\",n,\"servers\"])||pE()(t,[\"servers\"]);let l=\"\",c=null;if(o&&a&&a.length){const e=a.map((e=>e.url));e.indexOf(o)>-1&&(l=o,c=a[e.indexOf(o)])}!l&&a&&a.length&&(l=a[0].url,[c]=a);if(l.indexOf(\"{\")>-1){(function(e){const t=[],n=/{([^}]+)}/g;let r;for(;r=n.exec(e);)t.push(r[1]);return t})(l).forEach((e=>{if(c.variables&&c.variables[e]){const t=c.variables[e],n=i[e]||t.default,r=new RegExp(`{${e}}`,\"g\");l=l.replace(r,n)}}))}return function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";const n=e&&t?ce.parse(ce.resolve(t,e)):ce.parse(e),r=ce.parse(t),o=DE(n.protocol)||DE(r.protocol)||\"\",s=n.host||r.host,i=n.pathname||\"\";let a;a=o&&s?`${o}://${s+i}`:i;return\"/\"===a[a.length-1]?a.slice(0,-1):a}(l,s)}(e):function(e){let{spec:t,scheme:n,contextUrl:r=\"\"}=e;const o=ce.parse(r),s=Array.isArray(t.schemes)?t.schemes[0]:null,i=n||s||DE(o.protocol)||\"http\",a=t.host||o.host||\"\",l=t.basePath||\"\";let c;c=i&&a?`${i}://${a+l}`:l;return\"/\"===c[c.length-1]?c.slice(0,-1):c}(e)}({spec:t,scheme:o,contextUrl:a,server:c,serverVariables:p,pathName:x,method:E}),!n)return delete v.cookies,v;v.url+=x,v.method=`${E}`.toUpperCase(),m=m||{};const S=t.paths[x]||{};r&&(v.headers.accept=r);const _=IE([].concat(CE(w.parameters)).concat(CE(S.parameters)));_.forEach((e=>{const n=g[e.in];let r;if(\"body\"===e.in&&e.schema&&e.schema.properties&&(r=m),r=e&&e.name&&m[e.name],void 0===r?r=e&&e.name&&m[`${e.in}.${e.name}`]:NE(e.name,_).length>1&&console.warn(`Parameter '${e.name}' is ambiguous because the defined spec has more than one parameter with the name: '${e.name}' and the passed-in parameter values did not define an 'in' value.`),null!==r){if(void 0!==e.default&&void 0===r&&(r=e.default),void 0===r&&e.required&&!e.allowEmptyValue)throw new Error(`Required parameter ${e.name} is not provided`);if(y&&e.schema&&\"object\"===e.schema.type&&\"string\"==typeof r)try{r=JSON.parse(r)}catch(e){throw new Error(\"Could not parse object parameter value string as JSON\")}n&&n({req:v,parameter:e,value:r,operation:w,spec:t})}}));const j=f()(f()({},e),{},{operation:w});if(v=y?jE(j,v):OE(j,v),v.cookies&&Object.keys(v.cookies).length){const e=Object.keys(v.cookies).reduce(((e,t)=>{const n=v.cookies[t];return e+(e?\"&\":\"\")+hE.serialize(t,n)}),\"\");v.headers.Cookie=e}return v.cookies&&delete v.cookies,wt(v),v}const DE=e=>e?e.replace(/\\W/g,\"\"):null;const FE=e=>async function(t,n){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{returnEntireTree:r,baseDoc:o,requestInterceptor:s,responseInterceptor:i,parameterMacro:a,modelPropertyMacro:l,useCircularStructures:c,strategies:u}=n,p={spec:e,pathDiscriminator:t,baseDoc:o,requestInterceptor:s,responseInterceptor:i,parameterMacro:a,modelPropertyMacro:l,useCircularStructures:c,strategies:u},h=u.find((e=>e.match(p))).normalize(p),d=await aE(f()(f()({},p),{},{spec:h,allowMetaPatches:!0,skipNormalization:!0}));return!r&&Array.isArray(t)&&t.length&&(d.spec=pE()(d.spec,t)||null),d}(t,n,f()(f()({},e),r))};FE({strategies:[Ct,At,_t]});var LE=n(34852);function BE(e){let{configs:t,getConfigs:n}=e;return{fn:{fetch:(r=ct,o=t.preFetch,s=t.postFetch,s=s||(e=>e),o=o||(e=>e),e=>(\"string\"==typeof e&&(e={url:e}),lt.mergeInQueryOrForm(e),e=o(e),s(r(e)))),buildRequest:ME,execute:RE,resolve:iE({strategies:[sE,Ct,At,_t]}),resolveSubtree:async function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const o=n(),s={modelPropertyMacro:o.modelPropertyMacro,parameterMacro:o.parameterMacro,requestInterceptor:o.requestInterceptor,responseInterceptor:o.responseInterceptor,strategies:[sE,Ct,At,_t]};return FE(s)(e,t,r)},serializeRes:pt,opId:He.Z},statePlugins:{configs:{wrapActions:{loaded:LE.loaded}}}};var r,o,s}},98525:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var r=n(90242);function o(){return{fn:{shallowEqualKeys:r.be}}}},48347:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getDisplayName:()=>r});const r=e=>e.displayName||e.name||\"Component\"},73420:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var r=n(35627),o=n.n(r),s=n(90242),i=n(11092),a=n(48347),l=n(60314);const c=e=>{let{getComponents:t,getStore:n,getSystem:r}=e;const c=(u=(0,i.getComponent)(r,n,t),(0,s.HP)(u,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return o()(t)})));var u;const p=(e=>(0,l.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t})))((0,i.withMappedContainer)(r,n,c));return{rootInjects:{getComponent:c,makeMappedContainer:p,render:(0,i.render)(r,n,i.getComponent,t)},fn:{getDisplayName:a.getDisplayName}}}},11092:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getComponent:()=>X,render:()=>Y,withMappedContainer:()=>Z});var r=n(23101),o=n.n(r),s=n(28222),i=n.n(s),a=n(67294),l=n(73935),c=n(97779),u=n(61688),p=n(52798);let h=function(e){e()};const f=()=>h,d=(0,a.createContext)(null);let m=null;var g=n(87462),y=n(63366),v=n(8679),b=n.n(v),w=n(59864);const E=[\"initMapStateToProps\",\"initMapDispatchToProps\",\"initMergeProps\"];function x(e,t,n,r,{areStatesEqual:o,areOwnPropsEqual:s,areStatePropsEqual:i}){let a,l,c,u,p,h=!1;function f(h,f){const d=!s(f,l),m=!o(h,a,f,l);return a=h,l=f,d&&m?(c=e(a,l),t.dependsOnOwnProps&&(u=t(r,l)),p=n(c,u,l),p):d?(e.dependsOnOwnProps&&(c=e(a,l)),t.dependsOnOwnProps&&(u=t(r,l)),p=n(c,u,l),p):m?function(){const t=e(a,l),r=!i(t,c);return c=t,r&&(p=n(c,u,l)),p}():p}return function(o,s){return h?f(o,s):(a=o,l=s,c=e(a,l),u=t(r,l),p=n(c,u,l),h=!0,p)}}function S(e){return function(t){const n=e(t);function r(){return n}return r.dependsOnOwnProps=!1,r}}function _(e){return e.dependsOnOwnProps?Boolean(e.dependsOnOwnProps):1!==e.length}function j(e,t){return function(t,{displayName:n}){const r=function(e,t){return r.dependsOnOwnProps?r.mapToProps(e,t):r.mapToProps(e,void 0)};return r.dependsOnOwnProps=!0,r.mapToProps=function(t,n){r.mapToProps=e,r.dependsOnOwnProps=_(e);let o=r(t,n);return\"function\"==typeof o&&(r.mapToProps=o,r.dependsOnOwnProps=_(o),o=r(t,n)),o},r}}function O(e,t){return(n,r)=>{throw new Error(`Invalid value of type ${typeof e} for ${t} argument when connecting component ${r.wrappedComponentName}.`)}}function k(e,t,n){return(0,g.Z)({},n,e,t)}const A={notify(){},get:()=>[]};function C(e,t){let n,r=A;function o(){i.onStateChange&&i.onStateChange()}function s(){n||(n=t?t.addNestedSub(o):e.subscribe(o),r=function(){const e=f();let t=null,n=null;return{clear(){t=null,n=null},notify(){e((()=>{let e=t;for(;e;)e.callback(),e=e.next}))},get(){let e=[],n=t;for(;n;)e.push(n),n=n.next;return e},subscribe(e){let r=!0,o=n={callback:e,next:null,prev:n};return o.prev?o.prev.next=o:t=o,function(){r&&null!==t&&(r=!1,o.next?o.next.prev=o.prev:n=o.prev,o.prev?o.prev.next=o.next:t=o.next)}}}}())}const i={addNestedSub:function(e){return s(),r.subscribe(e)},notifyNestedSubs:function(){r.notify()},handleChangeWrapper:o,isSubscribed:function(){return Boolean(n)},trySubscribe:s,tryUnsubscribe:function(){n&&(n(),n=void 0,r.clear(),r=A)},getListeners:()=>r};return i}const P=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement)?a.useLayoutEffect:a.useEffect;function N(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!=e&&t!=t}function I(e,t){if(N(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r=0;r<n.length;r++)if(!Object.prototype.hasOwnProperty.call(t,n[r])||!N(e[n[r]],t[n[r]]))return!1;return!0}const T=[\"reactReduxForwardedRef\"];let R=()=>{throw new Error(\"uSES not initialized!\")};const M=[null,null];function D(e,t,n,r,o,s){e.current=r,n.current=!1,o.current&&(o.current=null,s())}function F(e,t){return e===t}const L=function(e,t,n,{pure:r,areStatesEqual:o=F,areOwnPropsEqual:s=I,areStatePropsEqual:i=I,areMergedPropsEqual:l=I,forwardRef:c=!1,context:u=d}={}){const p=u,h=function(e){return e?\"function\"==typeof e?j(e):O(e,\"mapStateToProps\"):S((()=>({})))}(e),f=function(e){return e&&\"object\"==typeof e?S((t=>function(e,t){const n={};for(const r in e){const o=e[r];\"function\"==typeof o&&(n[r]=(...e)=>t(o(...e)))}return n}(e,t))):e?\"function\"==typeof e?j(e):O(e,\"mapDispatchToProps\"):S((e=>({dispatch:e})))}(t),m=function(e){return e?\"function\"==typeof e?function(e){return function(t,{displayName:n,areMergedPropsEqual:r}){let o,s=!1;return function(t,n,i){const a=e(t,n,i);return s?r(a,o)||(o=a):(s=!0,o=a),o}}}(e):O(e,\"mergeProps\"):()=>k}(n),v=Boolean(e);return e=>{const t=e.displayName||e.name||\"Component\",n=`Connect(${t})`,r={shouldHandleStateChanges:v,displayName:n,wrappedComponentName:t,WrappedComponent:e,initMapStateToProps:h,initMapDispatchToProps:f,initMergeProps:m,areStatesEqual:o,areStatePropsEqual:i,areOwnPropsEqual:s,areMergedPropsEqual:l};function u(t){const[n,o,s]=(0,a.useMemo)((()=>{const{reactReduxForwardedRef:e}=t,n=(0,y.Z)(t,T);return[t.context,e,n]}),[t]),i=(0,a.useMemo)((()=>n&&n.Consumer&&(0,w.isContextConsumer)(a.createElement(n.Consumer,null))?n:p),[n,p]),l=(0,a.useContext)(i),c=Boolean(t.store)&&Boolean(t.store.getState)&&Boolean(t.store.dispatch),u=Boolean(l)&&Boolean(l.store);const h=c?t.store:l.store,f=u?l.getServerState:h.getState,d=(0,a.useMemo)((()=>function(e,t){let{initMapStateToProps:n,initMapDispatchToProps:r,initMergeProps:o}=t,s=(0,y.Z)(t,E);return x(n(e,s),r(e,s),o(e,s),e,s)}(h.dispatch,r)),[h]),[m,b]=(0,a.useMemo)((()=>{if(!v)return M;const e=C(h,c?void 0:l.subscription),t=e.notifyNestedSubs.bind(e);return[e,t]}),[h,c,l]),S=(0,a.useMemo)((()=>c?l:(0,g.Z)({},l,{subscription:m})),[c,l,m]),_=(0,a.useRef)(),j=(0,a.useRef)(s),O=(0,a.useRef)(),k=(0,a.useRef)(!1),A=((0,a.useRef)(!1),(0,a.useRef)(!1)),N=(0,a.useRef)();P((()=>(A.current=!0,()=>{A.current=!1})),[]);const I=(0,a.useMemo)((()=>()=>O.current&&s===j.current?O.current:d(h.getState(),s)),[h,s]),F=(0,a.useMemo)((()=>e=>m?function(e,t,n,r,o,s,i,a,l,c,u){if(!e)return()=>{};let p=!1,h=null;const f=()=>{if(p||!a.current)return;const e=t.getState();let n,f;try{n=r(e,o.current)}catch(e){f=e,h=e}f||(h=null),n===s.current?i.current||c():(s.current=n,l.current=n,i.current=!0,u())};return n.onStateChange=f,n.trySubscribe(),f(),()=>{if(p=!0,n.tryUnsubscribe(),n.onStateChange=null,h)throw h}}(v,h,m,d,j,_,k,A,O,b,e):()=>{}),[m]);var L,B,$;let q;L=D,B=[j,_,k,s,O,b],P((()=>L(...B)),$);try{q=R(F,I,f?()=>d(f(),s):I)}catch(e){throw N.current&&(e.message+=`\\nThe error may be correlated with this previous error:\\n${N.current.stack}\\n\\n`),e}P((()=>{N.current=void 0,O.current=void 0,_.current=q}));const U=(0,a.useMemo)((()=>a.createElement(e,(0,g.Z)({},q,{ref:o}))),[o,e,q]);return(0,a.useMemo)((()=>v?a.createElement(i.Provider,{value:S},U):U),[i,U,S])}const d=a.memo(u);if(d.WrappedComponent=e,d.displayName=u.displayName=n,c){const t=a.forwardRef((function(e,t){return a.createElement(d,(0,g.Z)({},e,{reactReduxForwardedRef:t}))}));return t.displayName=n,t.WrappedComponent=e,b()(t,e)}return b()(d,e)}};const B=function({store:e,context:t,children:n,serverState:r}){const o=(0,a.useMemo)((()=>{const t=C(e);return{store:e,subscription:t,getServerState:r?()=>r:void 0}}),[e,r]),s=(0,a.useMemo)((()=>e.getState()),[e]);P((()=>{const{subscription:t}=o;return t.onStateChange=t.notifyNestedSubs,t.trySubscribe(),s!==e.getState()&&t.notifyNestedSubs(),()=>{t.tryUnsubscribe(),t.onStateChange=void 0}}),[o,s]);const i=t||d;return a.createElement(i.Provider,{value:o},n)};var $,q;$=p.useSyncExternalStoreWithSelector,m=$,(e=>{R=e})(u.useSyncExternalStore),q=l.unstable_batchedUpdates,h=q;var U=n(57557),z=n.n(U),V=n(6557),W=n.n(V);const J=e=>t=>{const{fn:n}=e();class r extends a.Component{render(){return a.createElement(t,o()({},e(),this.props,this.context))}}return r.displayName=`WithSystem(${n.getDisplayName(t)})`,r},K=(e,t)=>n=>{const{fn:r}=e();class s extends a.Component{render(){return a.createElement(B,{store:t},a.createElement(n,o()({},this.props,this.context)))}}return s.displayName=`WithRoot(${r.getDisplayName(n)})`,s},H=(e,t,n)=>(0,c.qC)(n?K(e,n):W(),L(((n,r)=>{var o;const s={...r,...e()},i=(null===(o=t.prototype)||void 0===o?void 0:o.mapStateToProps)||(e=>({state:e}));return i(n,s)})),J(e))(t),G=(e,t,n,r)=>{for(const o in t){const s=t[o];\"function\"==typeof s&&s(n[o],r[o],e())}},Z=(e,t,n)=>(t,r)=>{const{fn:o}=e(),s=n(t,\"root\");class l extends a.Component{constructor(t,n){super(t,n),G(e,r,t,{})}UNSAFE_componentWillReceiveProps(t){G(e,r,t,this.props)}render(){const e=z()(this.props,r?i()(r):[]);return a.createElement(s,e)}}return l.displayName=`WithMappedContainer(${o.getDisplayName(s)})`,l},Y=(e,t,n,r)=>o=>{const s=n(e,t,r)(\"App\",\"root\");l.render(a.createElement(s,null),o)},X=(e,t,n)=>function(r,o){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(\"string\"!=typeof r)throw new TypeError(\"Need a string, to fetch a component. Was given a \"+typeof r);const i=n(r);return i?o?\"root\"===o?H(e,i,t()):H(e,i):i:(s.failSilently||e().log.warn(\"Could not find component:\",r),null)}},33424:(e,t,n)=>{\"use strict\";n.d(t,{d3:()=>D,C2:()=>ee});var r=n(28222),o=n.n(r),s=n(58118),i=n.n(s),a=n(63366);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function c(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(e){if(\"string\"==typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(e)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}var u=n(64572),p=n(67294),h=n(87462);function f(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?f(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):f(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var m={};function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return function(e){if(0===e.length||1===e.length)return e;var t,n,r=e.join(\".\");return m[r]||(m[r]=0===(n=(t=e).length)||1===n?t:2===n?[t[0],t[1],\"\".concat(t[0],\".\").concat(t[1]),\"\".concat(t[1],\".\").concat(t[0])]:3===n?[t[0],t[1],t[2],\"\".concat(t[0],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[2]),\"\".concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[0])]:n>=4?[t[0],t[1],t[2],t[3],\"\".concat(t[0],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[3]),\"\".concat(t[3],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[1],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[0],\".\").concat(t[2],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[0],\".\").concat(t[3],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[2],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[0],\".\").concat(t[3],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[1],\".\").concat(t[2],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[1],\".\").concat(t[3],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[1],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[0],\".\").concat(t[3],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[0],\".\").concat(t[3]),\"\".concat(t[2],\".\").concat(t[1],\".\").concat(t[3],\".\").concat(t[0]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[2],\".\").concat(t[3],\".\").concat(t[1],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[1],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[0],\".\").concat(t[2],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[0],\".\").concat(t[2]),\"\".concat(t[3],\".\").concat(t[1],\".\").concat(t[2],\".\").concat(t[0]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[0],\".\").concat(t[1]),\"\".concat(t[3],\".\").concat(t[2],\".\").concat(t[1],\".\").concat(t[0])]:void 0),m[r]}(e.filter((function(e){return\"token\"!==e}))).reduce((function(e,t){return d(d({},e),n[t])}),t)}function y(e){return e.join(\" \")}function v(e){var t=e.node,n=e.stylesheet,r=e.style,o=void 0===r?{}:r,s=e.useInlineStyles,i=e.key,a=t.properties,l=t.type,c=t.tagName,u=t.value;if(\"text\"===l)return u;if(c){var f,m=function(e,t){var n=0;return function(r){return n+=1,r.map((function(r,o){return v({node:r,stylesheet:e,useInlineStyles:t,key:\"code-segment-\".concat(n,\"-\").concat(o)})}))}}(n,s);if(s){var b=Object.keys(n).reduce((function(e,t){return t.split(\".\").forEach((function(t){e.includes(t)||e.push(t)})),e}),[]),w=a.className&&a.className.includes(\"token\")?[\"token\"]:[],E=a.className&&w.concat(a.className.filter((function(e){return!b.includes(e)})));f=d(d({},a),{},{className:y(E)||void 0,style:g(a.className,Object.assign({},a.style,o),n)})}else f=d(d({},a),{},{className:y(a.className)});var x=m(t.children);return p.createElement(c,(0,h.Z)({key:i},f),x)}}const b=function(e,t){return-1!==e.listLanguages().indexOf(t)};var w=[\"language\",\"children\",\"style\",\"customStyle\",\"codeTagProps\",\"useInlineStyles\",\"showLineNumbers\",\"showInlineLineNumbers\",\"startingLineNumber\",\"lineNumberContainerStyle\",\"lineNumberStyle\",\"wrapLines\",\"wrapLongLines\",\"lineProps\",\"renderer\",\"PreTag\",\"CodeTag\",\"code\",\"astGenerator\"];function E(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function x(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?E(Object(n),!0).forEach((function(t){(0,u.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var S=/\\n/g;function _(e){var t=e.codeString,n=e.codeStyle,r=e.containerStyle,o=void 0===r?{float:\"left\",paddingRight:\"10px\"}:r,s=e.numberStyle,i=void 0===s?{}:s,a=e.startingLineNumber;return p.createElement(\"code\",{style:Object.assign({},n,o)},function(e){var t=e.lines,n=e.startingLineNumber,r=e.style;return t.map((function(e,t){var o=t+n;return p.createElement(\"span\",{key:\"line-\".concat(t),className:\"react-syntax-highlighter-line-number\",style:\"function\"==typeof r?r(o):r},\"\".concat(o,\"\\n\"))}))}({lines:t.replace(/\\n$/,\"\").split(\"\\n\"),style:i,startingLineNumber:a}))}function j(e,t){return{type:\"element\",tagName:\"span\",properties:{key:\"line-number--\".concat(e),className:[\"comment\",\"linenumber\",\"react-syntax-highlighter-line-number\"],style:t},children:[{type:\"text\",value:e}]}}function O(e,t,n){var r,o={display:\"inline-block\",minWidth:(r=n,\"\".concat(r.toString().length,\".25em\")),paddingRight:\"1em\",textAlign:\"right\",userSelect:\"none\"},s=\"function\"==typeof e?e(t):e;return x(x({},o),s)}function k(e){var t=e.children,n=e.lineNumber,r=e.lineNumberStyle,o=e.largestLineNumber,s=e.showInlineLineNumbers,i=e.lineProps,a=void 0===i?{}:i,l=e.className,c=void 0===l?[]:l,u=e.showLineNumbers,p=e.wrapLongLines,h=\"function\"==typeof a?a(n):a;if(h.className=c,n&&s){var f=O(r,n,o);t.unshift(j(n,f))}return p&u&&(h.style=x(x({},h.style),{},{display:\"flex\"})),{type:\"element\",tagName:\"span\",properties:h,children:t}}function A(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],r=0;r<e.length;r++){var o=e[r];if(\"text\"===o.type)n.push(k({children:[o],className:c(new Set(t))}));else if(o.children){var s=t.concat(o.properties.className);A(o.children,s).forEach((function(e){return n.push(e)}))}}return n}function C(e,t,n,r,o,s,i,a,l){var c,u=A(e.value),p=[],h=-1,f=0;function d(e,s){var c=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return t||c.length>0?function(e,t){return k({children:e,lineNumber:t,lineNumberStyle:a,largestLineNumber:i,showInlineLineNumbers:o,lineProps:n,className:arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],showLineNumbers:r,wrapLongLines:l})}(e,s,c):function(e,t){if(r&&t&&o){var n=O(a,t,i);e.unshift(j(t,n))}return e}(e,s)}for(var m=function(){var e=u[f],t=e.children[0].value;if(t.match(S)){var n=t.split(\"\\n\");n.forEach((function(t,o){var i=r&&p.length+s,a={type:\"text\",value:\"\".concat(t,\"\\n\")};if(0===o){var l=d(u.slice(h+1,f).concat(k({children:[a],className:e.properties.className})),i);p.push(l)}else if(o===n.length-1){var c=u[f+1]&&u[f+1].children&&u[f+1].children[0],m={type:\"text\",value:\"\".concat(t)};if(c){var g=k({children:[m],className:e.properties.className});u.splice(f+1,0,g)}else{var y=d([m],i,e.properties.className);p.push(y)}}else{var v=d([a],i,e.properties.className);p.push(v)}})),h=f}f++};f<u.length;)m();if(h!==u.length-1){var g=u.slice(h+1,u.length);if(g&&g.length){var y=d(g,r&&p.length+s);p.push(y)}}return t?p:(c=[]).concat.apply(c,p)}function P(e){var t=e.rows,n=e.stylesheet,r=e.useInlineStyles;return t.map((function(e,t){return v({node:e,stylesheet:n,useInlineStyles:r,key:\"code-segement\".concat(t)})}))}function N(e){return e&&void 0!==e.highlightAuto}var I,T,R=n(96470),M=(I=R,T={},function(e){var t=e.language,n=e.children,r=e.style,o=void 0===r?T:r,s=e.customStyle,i=void 0===s?{}:s,l=e.codeTagProps,c=void 0===l?{className:t?\"language-\".concat(t):void 0,style:x(x({},o['code[class*=\"language-\"]']),o['code[class*=\"language-'.concat(t,'\"]')])}:l,u=e.useInlineStyles,h=void 0===u||u,f=e.showLineNumbers,d=void 0!==f&&f,m=e.showInlineLineNumbers,g=void 0===m||m,y=e.startingLineNumber,v=void 0===y?1:y,E=e.lineNumberContainerStyle,S=e.lineNumberStyle,j=void 0===S?{}:S,O=e.wrapLines,k=e.wrapLongLines,A=void 0!==k&&k,R=e.lineProps,M=void 0===R?{}:R,D=e.renderer,F=e.PreTag,L=void 0===F?\"pre\":F,B=e.CodeTag,$=void 0===B?\"code\":B,q=e.code,U=void 0===q?(Array.isArray(n)?n[0]:n)||\"\":q,z=e.astGenerator,V=function(e,t){if(null==e)return{};var n,r,o=(0,a.Z)(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}(e,w);z=z||I;var W=d?p.createElement(_,{containerStyle:E,codeStyle:c.style||{},numberStyle:j,startingLineNumber:v,codeString:U}):null,J=o.hljs||o['pre[class*=\"language-\"]']||{backgroundColor:\"#fff\"},K=N(z)?\"hljs\":\"prismjs\",H=h?Object.assign({},V,{style:Object.assign({},J,i)}):Object.assign({},V,{className:V.className?\"\".concat(K,\" \").concat(V.className):K,style:Object.assign({},i)});if(c.style=x(x({},c.style),{},A?{whiteSpace:\"pre-wrap\"}:{whiteSpace:\"pre\"}),!z)return p.createElement(L,H,W,p.createElement($,c,U));(void 0===O&&D||A)&&(O=!0),D=D||P;var G=[{type:\"text\",value:U}],Z=function(e){var t=e.astGenerator,n=e.language,r=e.code,o=e.defaultCodeValue;if(N(t)){var s=b(t,n);return\"text\"===n?{value:o,language:\"text\"}:s?t.highlight(n,r):t.highlightAuto(r)}try{return n&&\"text\"!==n?{value:t.highlight(r,n)}:{value:o}}catch(e){return{value:o}}}({astGenerator:z,language:t,code:U,defaultCodeValue:G});null===Z.language&&(Z.value=G);var Y=C(Z,O,M,d,g,v,Z.value.length+v,j,A);return p.createElement(L,H,p.createElement($,c,!g&&W,D({rows:Y,stylesheet:o,useInlineStyles:h})))});M.registerLanguage=R.registerLanguage;const D=M;var F=n(96344);const L=n.n(F)();var B=n(82026);const $=n.n(B)();var q=n(42157);const U=n.n(q)();var z=n(61519);const V=n.n(z)();var W=n(54587);const J=n.n(W)();var K=n(30786);const H=n.n(K)();var G=n(66336);const Z=n.n(G)(),Y={hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#333\",color:\"white\"},\"hljs-name\":{fontWeight:\"bold\"},\"hljs-strong\":{fontWeight:\"bold\"},\"hljs-code\":{fontStyle:\"italic\",color:\"#888\"},\"hljs-emphasis\":{fontStyle:\"italic\"},\"hljs-tag\":{color:\"#62c8f3\"},\"hljs-variable\":{color:\"#ade5fc\"},\"hljs-template-variable\":{color:\"#ade5fc\"},\"hljs-selector-id\":{color:\"#ade5fc\"},\"hljs-selector-class\":{color:\"#ade5fc\"},\"hljs-string\":{color:\"#a2fca2\"},\"hljs-bullet\":{color:\"#d36363\"},\"hljs-type\":{color:\"#ffa\"},\"hljs-title\":{color:\"#ffa\"},\"hljs-section\":{color:\"#ffa\"},\"hljs-attribute\":{color:\"#ffa\"},\"hljs-quote\":{color:\"#ffa\"},\"hljs-built_in\":{color:\"#ffa\"},\"hljs-builtin-name\":{color:\"#ffa\"},\"hljs-number\":{color:\"#d36363\"},\"hljs-symbol\":{color:\"#d36363\"},\"hljs-keyword\":{color:\"#fcc28c\"},\"hljs-selector-tag\":{color:\"#fcc28c\"},\"hljs-literal\":{color:\"#fcc28c\"},\"hljs-comment\":{color:\"#888\"},\"hljs-deletion\":{color:\"#333\",backgroundColor:\"#fc9b9b\"},\"hljs-regexp\":{color:\"#c6b4f0\"},\"hljs-link\":{color:\"#c6b4f0\"},\"hljs-meta\":{color:\"#fc9b9b\"},\"hljs-addition\":{backgroundColor:\"#a2fca2\",color:\"#333\"}};D.registerLanguage(\"json\",$),D.registerLanguage(\"js\",L),D.registerLanguage(\"xml\",U),D.registerLanguage(\"yaml\",J),D.registerLanguage(\"http\",H),D.registerLanguage(\"bash\",V),D.registerLanguage(\"powershell\",Z),D.registerLanguage(\"javascript\",L);const X={agate:Y,arta:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#222\",color:\"#aaa\"},\"hljs-subst\":{color:\"#aaa\"},\"hljs-section\":{color:\"#fff\",fontWeight:\"bold\"},\"hljs-comment\":{color:\"#444\"},\"hljs-quote\":{color:\"#444\"},\"hljs-meta\":{color:\"#444\"},\"hljs-string\":{color:\"#ffcc33\"},\"hljs-symbol\":{color:\"#ffcc33\"},\"hljs-bullet\":{color:\"#ffcc33\"},\"hljs-regexp\":{color:\"#ffcc33\"},\"hljs-number\":{color:\"#00cc66\"},\"hljs-addition\":{color:\"#00cc66\"},\"hljs-built_in\":{color:\"#32aaee\"},\"hljs-builtin-name\":{color:\"#32aaee\"},\"hljs-literal\":{color:\"#32aaee\"},\"hljs-type\":{color:\"#32aaee\"},\"hljs-template-variable\":{color:\"#32aaee\"},\"hljs-attribute\":{color:\"#32aaee\"},\"hljs-link\":{color:\"#32aaee\"},\"hljs-keyword\":{color:\"#6644aa\"},\"hljs-selector-tag\":{color:\"#6644aa\"},\"hljs-name\":{color:\"#6644aa\"},\"hljs-selector-id\":{color:\"#6644aa\"},\"hljs-selector-class\":{color:\"#6644aa\"},\"hljs-title\":{color:\"#bb1166\"},\"hljs-variable\":{color:\"#bb1166\"},\"hljs-deletion\":{color:\"#bb1166\"},\"hljs-template-tag\":{color:\"#bb1166\"},\"hljs-doctag\":{fontWeight:\"bold\"},\"hljs-strong\":{fontWeight:\"bold\"},\"hljs-emphasis\":{fontStyle:\"italic\"}},monokai:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#272822\",color:\"#ddd\"},\"hljs-tag\":{color:\"#f92672\"},\"hljs-keyword\":{color:\"#f92672\",fontWeight:\"bold\"},\"hljs-selector-tag\":{color:\"#f92672\",fontWeight:\"bold\"},\"hljs-literal\":{color:\"#f92672\",fontWeight:\"bold\"},\"hljs-strong\":{color:\"#f92672\"},\"hljs-name\":{color:\"#f92672\"},\"hljs-code\":{color:\"#66d9ef\"},\"hljs-class .hljs-title\":{color:\"white\"},\"hljs-attribute\":{color:\"#bf79db\"},\"hljs-symbol\":{color:\"#bf79db\"},\"hljs-regexp\":{color:\"#bf79db\"},\"hljs-link\":{color:\"#bf79db\"},\"hljs-string\":{color:\"#a6e22e\"},\"hljs-bullet\":{color:\"#a6e22e\"},\"hljs-subst\":{color:\"#a6e22e\"},\"hljs-title\":{color:\"#a6e22e\",fontWeight:\"bold\"},\"hljs-section\":{color:\"#a6e22e\",fontWeight:\"bold\"},\"hljs-emphasis\":{color:\"#a6e22e\"},\"hljs-type\":{color:\"#a6e22e\",fontWeight:\"bold\"},\"hljs-built_in\":{color:\"#a6e22e\"},\"hljs-builtin-name\":{color:\"#a6e22e\"},\"hljs-selector-attr\":{color:\"#a6e22e\"},\"hljs-selector-pseudo\":{color:\"#a6e22e\"},\"hljs-addition\":{color:\"#a6e22e\"},\"hljs-variable\":{color:\"#a6e22e\"},\"hljs-template-tag\":{color:\"#a6e22e\"},\"hljs-template-variable\":{color:\"#a6e22e\"},\"hljs-comment\":{color:\"#75715e\"},\"hljs-quote\":{color:\"#75715e\"},\"hljs-deletion\":{color:\"#75715e\"},\"hljs-meta\":{color:\"#75715e\"},\"hljs-doctag\":{fontWeight:\"bold\"},\"hljs-selector-id\":{fontWeight:\"bold\"}},nord:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#2E3440\",color:\"#D8DEE9\"},\"hljs-subst\":{color:\"#D8DEE9\"},\"hljs-selector-tag\":{color:\"#81A1C1\"},\"hljs-selector-id\":{color:\"#8FBCBB\",fontWeight:\"bold\"},\"hljs-selector-class\":{color:\"#8FBCBB\"},\"hljs-selector-attr\":{color:\"#8FBCBB\"},\"hljs-selector-pseudo\":{color:\"#88C0D0\"},\"hljs-addition\":{backgroundColor:\"rgba(163, 190, 140, 0.5)\"},\"hljs-deletion\":{backgroundColor:\"rgba(191, 97, 106, 0.5)\"},\"hljs-built_in\":{color:\"#8FBCBB\"},\"hljs-type\":{color:\"#8FBCBB\"},\"hljs-class\":{color:\"#8FBCBB\"},\"hljs-function\":{color:\"#88C0D0\"},\"hljs-function > .hljs-title\":{color:\"#88C0D0\"},\"hljs-keyword\":{color:\"#81A1C1\"},\"hljs-literal\":{color:\"#81A1C1\"},\"hljs-symbol\":{color:\"#81A1C1\"},\"hljs-number\":{color:\"#B48EAD\"},\"hljs-regexp\":{color:\"#EBCB8B\"},\"hljs-string\":{color:\"#A3BE8C\"},\"hljs-title\":{color:\"#8FBCBB\"},\"hljs-params\":{color:\"#D8DEE9\"},\"hljs-bullet\":{color:\"#81A1C1\"},\"hljs-code\":{color:\"#8FBCBB\"},\"hljs-emphasis\":{fontStyle:\"italic\"},\"hljs-formula\":{color:\"#8FBCBB\"},\"hljs-strong\":{fontWeight:\"bold\"},\"hljs-link:hover\":{textDecoration:\"underline\"},\"hljs-quote\":{color:\"#4C566A\"},\"hljs-comment\":{color:\"#4C566A\"},\"hljs-doctag\":{color:\"#8FBCBB\"},\"hljs-meta\":{color:\"#5E81AC\"},\"hljs-meta-keyword\":{color:\"#5E81AC\"},\"hljs-meta-string\":{color:\"#A3BE8C\"},\"hljs-attr\":{color:\"#8FBCBB\"},\"hljs-attribute\":{color:\"#D8DEE9\"},\"hljs-builtin-name\":{color:\"#81A1C1\"},\"hljs-name\":{color:\"#81A1C1\"},\"hljs-section\":{color:\"#88C0D0\"},\"hljs-tag\":{color:\"#81A1C1\"},\"hljs-variable\":{color:\"#D8DEE9\"},\"hljs-template-variable\":{color:\"#D8DEE9\"},\"hljs-template-tag\":{color:\"#5E81AC\"},\"abnf .hljs-attribute\":{color:\"#88C0D0\"},\"abnf .hljs-symbol\":{color:\"#EBCB8B\"},\"apache .hljs-attribute\":{color:\"#88C0D0\"},\"apache .hljs-section\":{color:\"#81A1C1\"},\"arduino .hljs-built_in\":{color:\"#88C0D0\"},\"aspectj .hljs-meta\":{color:\"#D08770\"},\"aspectj > .hljs-title\":{color:\"#88C0D0\"},\"bnf .hljs-attribute\":{color:\"#8FBCBB\"},\"clojure .hljs-name\":{color:\"#88C0D0\"},\"clojure .hljs-symbol\":{color:\"#EBCB8B\"},\"coq .hljs-built_in\":{color:\"#88C0D0\"},\"cpp .hljs-meta-string\":{color:\"#8FBCBB\"},\"css .hljs-built_in\":{color:\"#88C0D0\"},\"css .hljs-keyword\":{color:\"#D08770\"},\"diff .hljs-meta\":{color:\"#8FBCBB\"},\"ebnf .hljs-attribute\":{color:\"#8FBCBB\"},\"glsl .hljs-built_in\":{color:\"#88C0D0\"},\"groovy .hljs-meta:not(:first-child)\":{color:\"#D08770\"},\"haxe .hljs-meta\":{color:\"#D08770\"},\"java .hljs-meta\":{color:\"#D08770\"},\"ldif .hljs-attribute\":{color:\"#8FBCBB\"},\"lisp .hljs-name\":{color:\"#88C0D0\"},\"lua .hljs-built_in\":{color:\"#88C0D0\"},\"moonscript .hljs-built_in\":{color:\"#88C0D0\"},\"nginx .hljs-attribute\":{color:\"#88C0D0\"},\"nginx .hljs-section\":{color:\"#5E81AC\"},\"pf .hljs-built_in\":{color:\"#88C0D0\"},\"processing .hljs-built_in\":{color:\"#88C0D0\"},\"scss .hljs-keyword\":{color:\"#81A1C1\"},\"stylus .hljs-keyword\":{color:\"#81A1C1\"},\"swift .hljs-meta\":{color:\"#D08770\"},\"vim .hljs-built_in\":{color:\"#88C0D0\",fontStyle:\"italic\"},\"yaml .hljs-meta\":{color:\"#D08770\"}},obsidian:{hljs:{display:\"block\",overflowX:\"auto\",padding:\"0.5em\",background:\"#282b2e\",color:\"#e0e2e4\"},\"hljs-keyword\":{color:\"#93c763\",fontWeight:\"bold\"},\"hljs-selector-tag\":{color:\"#93c763\",fontWeight:\"bold\"},\"hljs-literal\":{color:\"#93c763\",fontWeight:\"bold\"},\"hljs-selector-id\":{color:\"#93c763\"},\"hljs-number\":{color:\"#ffcd22\"},\"hljs-attribute\":{color:\"#668bb0\"},\"hljs-code\":{color:\"white\"},\"hljs-class .hljs-title\":{color:\"white\"},\"hljs-section\":{color:\"white\",fontWeight:\"bold\"},\"hljs-regexp\":{color:\"#d39745\"},\"hljs-link\":{color:\"#d39745\"},\"hljs-meta\":{color:\"#557182\"},\"hljs-tag\":{color:\"#8cbbad\"},\"hljs-name\":{color:\"#8cbbad\",fontWeight:\"bold\"},\"hljs-bullet\":{color:\"#8cbbad\"},\"hljs-subst\":{color:\"#8cbbad\"},\"hljs-emphasis\":{color:\"#8cbbad\"},\"hljs-type\":{color:\"#8cbbad\",fontWeight:\"bold\"},\"hljs-built_in\":{color:\"#8cbbad\"},\"hljs-selector-attr\":{color:\"#8cbbad\"},\"hljs-selector-pseudo\":{color:\"#8cbbad\"},\"hljs-addition\":{color:\"#8cbbad\"},\"hljs-variable\":{color:\"#8cbbad\"},\"hljs-template-tag\":{color:\"#8cbbad\"},\"hljs-template-variable\":{color:\"#8cbbad\"},\"hljs-string\":{color:\"#ec7600\"},\"hljs-symbol\":{color:\"#ec7600\"},\"hljs-comment\":{color:\"#818e96\"},\"hljs-quote\":{color:\"#818e96\"},\"hljs-deletion\":{color:\"#818e96\"},\"hljs-selector-class\":{color:\"#A082BD\"},\"hljs-doctag\":{fontWeight:\"bold\"},\"hljs-title\":{fontWeight:\"bold\"},\"hljs-strong\":{fontWeight:\"bold\"}},\"tomorrow-night\":{\"hljs-comment\":{color:\"#969896\"},\"hljs-quote\":{color:\"#969896\"},\"hljs-variable\":{color:\"#cc6666\"},\"hljs-template-variable\":{color:\"#cc6666\"},\"hljs-tag\":{color:\"#cc6666\"},\"hljs-name\":{color:\"#cc6666\"},\"hljs-selector-id\":{color:\"#cc6666\"},\"hljs-selector-class\":{color:\"#cc6666\"},\"hljs-regexp\":{color:\"#cc6666\"},\"hljs-deletion\":{color:\"#cc6666\"},\"hljs-number\":{color:\"#de935f\"},\"hljs-built_in\":{color:\"#de935f\"},\"hljs-builtin-name\":{color:\"#de935f\"},\"hljs-literal\":{color:\"#de935f\"},\"hljs-type\":{color:\"#de935f\"},\"hljs-params\":{color:\"#de935f\"},\"hljs-meta\":{color:\"#de935f\"},\"hljs-link\":{color:\"#de935f\"},\"hljs-attribute\":{color:\"#f0c674\"},\"hljs-string\":{color:\"#b5bd68\"},\"hljs-symbol\":{color:\"#b5bd68\"},\"hljs-bullet\":{color:\"#b5bd68\"},\"hljs-addition\":{color:\"#b5bd68\"},\"hljs-title\":{color:\"#81a2be\"},\"hljs-section\":{color:\"#81a2be\"},\"hljs-keyword\":{color:\"#b294bb\"},\"hljs-selector-tag\":{color:\"#b294bb\"},hljs:{display:\"block\",overflowX:\"auto\",background:\"#1d1f21\",color:\"#c5c8c6\",padding:\"0.5em\"},\"hljs-emphasis\":{fontStyle:\"italic\"},\"hljs-strong\":{fontWeight:\"bold\"}}},Q=o()(X),ee=e=>i()(Q).call(Q,e)?X[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),Y)},90242:(e,t,n)=>{\"use strict\";n.d(t,{AF:()=>ae,Ay:()=>fe,D$:()=>De,DR:()=>ve,GZ:()=>je,HP:()=>he,Ik:()=>Ee,J6:()=>Ne,Kn:()=>ce,LQ:()=>le,Nm:()=>ke,O2:()=>Ue,Pz:()=>Me,Q2:()=>de,QG:()=>Ce,UG:()=>xe,Uj:()=>Be,V9:()=>Fe,Wl:()=>ue,XV:()=>Re,Xb:()=>$e,Zl:()=>be,_5:()=>me,be:()=>Oe,cz:()=>Le,gp:()=>ye,hW:()=>Ae,iQ:()=>ge,kJ:()=>pe,mz:()=>se,nX:()=>Ie,oG:()=>ie,oJ:()=>Pe,po:()=>Te,r3:()=>Se,wh:()=>_e});var r=n(58309),o=n.n(r),s=n(97606),i=n.n(s),a=n(74386),l=n.n(a),c=n(86),u=n.n(c),p=n(14418),h=n.n(p),f=n(28222),d=n.n(f),m=(n(11189),n(24282)),g=n.n(m),y=n(76986),v=n.n(y),b=n(2578),w=n.n(b),E=(n(24278),n(39022),n(92039)),x=n.n(E),S=(n(58118),n(11882)),_=n.n(S),j=n(51679),O=n.n(j),k=n(27043),A=n.n(k),C=n(81607),P=n.n(C),N=n(35627),I=n.n(N),T=n(43393),R=n.n(T),M=n(17967),D=n(68929),F=n.n(D),L=n(11700),B=n.n(L),$=n(88306),q=n.n($),U=n(13311),z=n.n(U),V=(n(59704),n(77813)),W=n.n(V),J=n(23560),K=n.n(J),H=n(27504),G=n(8269),Z=n.n(G),Y=n(19069),X=n(92282),Q=n.n(X),ee=n(89072),te=n.n(ee),ne=n(48764).Buffer;const re=\"default\",oe=e=>R().Iterable.isIterable(e);function se(e){return ce(e)?oe(e)?e.toJS():e:{}}function ie(e){var t,n;if(oe(e))return e;if(e instanceof H.Z.File)return e;if(!ce(e))return e;if(o()(e))return i()(n=R().Seq(e)).call(n,ie).toList();if(K()(l()(e))){var r;const t=function(e){if(!K()(l()(e)))return e;const t={},n=\"_**[]\",r={};for(let o of l()(e).call(e))if(t[o[0]]||r[o[0]]&&r[o[0]].containsMultiple){if(!r[o[0]]){r[o[0]]={containsMultiple:!0,length:1},t[`${o[0]}${n}${r[o[0]].length}`]=t[o[0]],delete t[o[0]]}r[o[0]].length+=1,t[`${o[0]}${n}${r[o[0]].length}`]=o[1]}else t[o[0]]=o[1];return t}(e);return i()(r=R().OrderedMap(t)).call(r,ie)}return i()(t=R().OrderedMap(e)).call(t,ie)}function ae(e){return o()(e)?e:[e]}function le(e){return\"function\"==typeof e}function ce(e){return!!e&&\"object\"==typeof e}function ue(e){return\"function\"==typeof e}function pe(e){return o()(e)}const he=q();function fe(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>(n[r]=t(e[r],r),n)),{})}function de(e,t){var n;return g()(n=d()(e)).call(n,((n,r)=>{let o=t(e[r],r);return o&&\"object\"==typeof o&&v()(n,o),n}),{})}function me(e){return t=>{let{dispatch:n,getState:r}=t;return t=>n=>\"function\"==typeof n?n(e()):t(n)}}function ge(e){var t;let n=e.keySeq();return n.contains(re)?re:w()(t=h()(n).call(n,(e=>\"2\"===(e+\"\")[0]))).call(t).first()}function ye(e,t){if(!R().Iterable.isIterable(e))return R().List();let n=e.getIn(o()(t)?t:[t]);return R().List.isList(n)?n:R().List()}function ve(e){let t,n=[/filename\\*=[^']+'\\w*'\"([^\"]+)\";?/i,/filename\\*=[^']+'\\w*'([^;]+);?/i,/filename=\"([^;]*);?\"/i,/filename=([^;]*);?/i];if(x()(n).call(n,(n=>(t=n.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function be(e){return t=e.replace(/\\.[^./]*$/,\"\"),B()(F()(t));var t}function we(e,t,n,r,s){if(!t)return[];let a=[],l=t.get(\"nullable\"),c=t.get(\"required\"),p=t.get(\"maximum\"),f=t.get(\"minimum\"),d=t.get(\"type\"),m=t.get(\"format\"),g=t.get(\"maxLength\"),y=t.get(\"minLength\"),v=t.get(\"uniqueItems\"),b=t.get(\"maxItems\"),w=t.get(\"minItems\"),E=t.get(\"pattern\");const S=n||!0===c,_=null!=e;if(l&&null===e||!d||!(S||_&&\"array\"===d||!(!S&&!_)))return[];let j=\"string\"===d&&e,O=\"array\"===d&&o()(e)&&e.length,k=\"array\"===d&&R().List.isList(e)&&e.count();const A=[j,O,k,\"array\"===d&&\"string\"==typeof e&&e,\"file\"===d&&e instanceof H.Z.File,\"boolean\"===d&&(e||!1===e),\"number\"===d&&(e||0===e),\"integer\"===d&&(e||0===e),\"object\"===d&&\"object\"==typeof e&&null!==e,\"object\"===d&&\"string\"==typeof e&&e],C=x()(A).call(A,(e=>!!e));if(S&&!C&&!r)return a.push(\"Required field is not provided\"),a;if(\"object\"===d&&(null===s||\"application/json\"===s)){let n=e;if(\"string\"==typeof e)try{n=JSON.parse(e)}catch(e){return a.push(\"Parameter string value must be valid JSON\"),a}var P;if(t&&t.has(\"required\")&&ue(c.isList)&&c.isList()&&u()(c).call(c,(e=>{void 0===n[e]&&a.push({propKey:e,error:\"Required property not found\"})})),t&&t.has(\"properties\"))u()(P=t.get(\"properties\")).call(P,((e,t)=>{const o=we(n[t],e,!1,r,s);a.push(...i()(o).call(o,(e=>({propKey:t,error:e}))))}))}if(E){let t=((e,t)=>{if(!new RegExp(t).test(e))return\"Value must follow pattern \"+t})(e,E);t&&a.push(t)}if(w&&\"array\"===d){let t=((e,t)=>{if(!e&&t>=1||e&&e.length<t)return`Array must contain at least ${t} item${1===t?\"\":\"s\"}`})(e,w);t&&a.push(t)}if(b&&\"array\"===d){let t=((e,t)=>{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?\"\":\"s\"}`})(e,b);t&&a.push({needRemove:!0,error:t})}if(v&&\"array\"===d){let t=((e,t)=>{if(e&&(\"true\"===t||!0===t)){const t=(0,T.fromJS)(e),n=t.toSet();if(e.length>n.size){let e=(0,T.Set)();if(u()(t).call(t,((n,r)=>{h()(t).call(t,(e=>ue(e.equals)?e.equals(n):e===n)).size>1&&(e=e.add(r))})),0!==e.size)return i()(e).call(e,(e=>({index:e,error:\"No duplicates allowed.\"}))).toArray()}}})(e,v);t&&a.push(...t)}if(g||0===g){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?\"s\":\"\"}`})(e,g);t&&a.push(t)}if(y){let t=((e,t)=>{if(e.length<t)return`Value must be at least ${t} character${1!==t?\"s\":\"\"}`})(e,y);t&&a.push(t)}if(p||0===p){let t=((e,t)=>{if(e>t)return`Value must be less than ${t}`})(e,p);t&&a.push(t)}if(f||0===f){let t=((e,t)=>{if(e<t)return`Value must be greater than ${t}`})(e,f);t&&a.push(t)}if(\"string\"===d){let t;if(t=\"date-time\"===m?(e=>{if(isNaN(Date.parse(e)))return\"Value must be a DateTime\"})(e):\"uuid\"===m?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return\"Value must be a Guid\"})(e):(e=>{if(e&&\"string\"!=typeof e)return\"Value must be a string\"})(e),!t)return a;a.push(t)}else if(\"boolean\"===d){let t=(e=>{if(\"true\"!==e&&\"false\"!==e&&!0!==e&&!1!==e)return\"Value must be a boolean\"})(e);if(!t)return a;a.push(t)}else if(\"number\"===d){let t=(e=>{if(!/^-?\\d+(\\.?\\d+)?$/.test(e))return\"Value must be a number\"})(e);if(!t)return a;a.push(t)}else if(\"integer\"===d){let t=(e=>{if(!/^-?\\d+$/.test(e))return\"Value must be an integer\"})(e);if(!t)return a;a.push(t)}else if(\"array\"===d){if(!O&&!k)return a;e&&u()(e).call(e,((e,n)=>{const o=we(e,t.get(\"items\"),!1,r,s);a.push(...i()(o).call(o,(e=>({index:n,error:e}))))}))}else if(\"file\"===d){let t=(e=>{if(e&&!(e instanceof H.Z.File))return\"Value must be a file\"})(e);if(!t)return a;a.push(t)}return a}const Ee=function(e,t){let{isOAS3:n=!1,bypassRequiredCheck:r=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=e.get(\"required\"),{schema:s,parameterContentMediaType:i}=(0,Y.Z)(e,{isOAS3:n});return we(t,s,o,r,i)},xe=()=>{let e={},t=H.Z.location.search;if(!t)return{};if(\"\"!=t){let n=t.substr(1).split(\"&\");for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(t=n[t].split(\"=\"),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||\"\")}return e},Se=e=>{let t;return t=e instanceof ne?e:ne.from(e.toString(),\"utf-8\"),t.toString(\"base64\")},_e={operationsSorter:{alpha:(e,t)=>e.get(\"path\").localeCompare(t.get(\"path\")),method:(e,t)=>e.get(\"method\").localeCompare(t.get(\"method\"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},je=e=>{let t=[];for(let n in e){let r=e[n];void 0!==r&&\"\"!==r&&t.push([n,\"=\",encodeURIComponent(r).replace(/%20/g,\"+\")].join(\"\"))}return t.join(\"&\")},Oe=(e,t,n)=>!!z()(n,(n=>W()(e[n],t[n])));function ke(e){return\"string\"!=typeof e||\"\"===e?\"\":(0,M.N)(e)}function Ae(e){return!(!e||_()(e).call(e,\"localhost\")>=0||_()(e).call(e,\"127.0.0.1\")>=0||\"none\"===e)}function Ce(e){if(!R().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=O()(e).call(e,((e,t)=>A()(t).call(t,\"2\")&&d()(e.get(\"content\")||{}).length>0)),n=e.get(\"default\")||R().OrderedMap(),r=(n.get(\"content\")||R().OrderedMap()).keySeq().toJS().length?n:null;return t||r}const Pe=e=>\"string\"==typeof e||e instanceof String?P()(e).call(e).replace(/\\s/g,\"%20\"):\"\",Ne=e=>Z()(Pe(e).replace(/%20/g,\"_\")),Ie=e=>h()(e).call(e,((e,t)=>/^x-/.test(t))),Te=e=>h()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function Re(e,t){var n;let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if(\"object\"!=typeof e||o()(e)||null===e||!t)return e;const s=v()({},e);return u()(n=d()(s)).call(n,(e=>{e===t&&r(s[e],e)?delete s[e]:s[e]=Re(s[e],t,r)})),s}function Me(e){if(\"string\"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),\"object\"==typeof e&&null!==e)try{return I()(e,null,2)}catch(t){return String(e)}return null==e?\"\":e.toString()}function De(e){return\"number\"==typeof e?e.toString():e}function Fe(e){let{returnAll:t=!1,allowHashes:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!R().Map.isMap(e))throw new Error(\"paramToIdentifier: received a non-Im.Map parameter as input\");const r=e.get(\"name\"),o=e.get(\"in\");let s=[];return e&&e.hashCode&&o&&r&&n&&s.push(`${o}.${r}.hash-${e.hashCode()}`),o&&r&&s.push(`${o}.${r}`),s.push(r),t?s:s[0]||\"\"}function Le(e,t){var n;const r=Fe(e,{returnAll:!0});return h()(n=i()(r).call(r,(e=>t[e]))).call(n,(e=>void 0!==e))[0]}function Be(){return qe(Q()(32).toString(\"base64\"))}function $e(e){return qe(te()(\"sha256\").update(e).digest(\"base64\"))}function qe(e){return e.replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=/g,\"\")}const Ue=e=>!e||!(!oe(e)||!e.isEmpty())},2518:(e,t,n)=>{\"use strict\";function r(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?\"json\":null}n.d(t,{O:()=>r})},63543:(e,t,n)=>{\"use strict\";n.d(t,{mn:()=>a});var r=n(63460),o=n.n(r);function s(e){return e.match(/^(?:[a-z]+:)?\\/\\//i)}function i(e,t){return e?s(e)?function(e){return e.match(/^\\/\\//i)?`${window.location.protocol}${e}`:e}(e):new(o())(e,t).href:t}function a(e,t){let{selectedServer:n=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{return function(e,t){let{selectedServer:n=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return;if(s(e))return e;const r=i(n,t);return s(r)?new(o())(e,r).href:new(o())(e,window.location.href).href}(e,t,{selectedServer:n})}catch{return}}},27504:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>r});const r=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if(\"undefined\"==typeof window)return e;try{e=window;for(var t of[\"File\",\"Blob\",\"FormData\"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},19069:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>u});var r=n(14418),o=n.n(r),s=n(58118),i=n.n(s),a=n(43393),l=n.n(a);const c=l().Set.of(\"type\",\"format\",\"items\",\"default\",\"maximum\",\"exclusiveMaximum\",\"minimum\",\"exclusiveMinimum\",\"maxLength\",\"minLength\",\"pattern\",\"maxItems\",\"minItems\",\"uniqueItems\",\"enum\",\"multipleOf\");function u(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!l().Map.isMap(e))return{schema:l().Map(),parameterContentMediaType:null};if(!t)return\"body\"===e.get(\"in\")?{schema:e.get(\"schema\",l().Map()),parameterContentMediaType:null}:{schema:o()(e).call(e,((e,t)=>i()(c).call(c,t))),parameterContentMediaType:null};if(e.get(\"content\")){const t=e.get(\"content\",l().Map({})).keySeq().first();return{schema:e.getIn([\"content\",t,\"schema\"],l().Map()),parameterContentMediaType:t}}return{schema:e.get(\"schema\")?e.get(\"schema\",l().Map()):l().Map(),parameterContentMediaType:null}}},60314:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>x});var r=n(58309),o=n.n(r),s=n(2250),i=n.n(s),a=n(25110),l=n.n(a),c=n(8712),u=n.n(c),p=n(51679),h=n.n(p),f=n(12373),d=n.n(f),m=n(18492),g=n.n(m),y=n(88306),v=n.n(y);const b=e=>t=>o()(e)&&o()(t)&&e.length===t.length&&i()(e).call(e,((e,n)=>e===t[n])),w=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t};class E extends(g()){delete(e){const t=l()(u()(this).call(this)),n=h()(t).call(t,b(e));return super.delete(n)}get(e){const t=l()(u()(this).call(this)),n=h()(t).call(t,b(e));return super.get(n)}has(e){const t=l()(u()(this).call(this));return-1!==d()(t).call(t,b(e))}}const x=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:w;const{Cache:n}=v();v().Cache=E;const r=v()(e,t);return v().Cache=n,r}},79742:(e,t)=>{\"use strict\";t.byteLength=function(e){var t=a(e),n=t[0],r=t[1];return 3*(n+r)/4-r},t.toByteArray=function(e){var t,n,s=a(e),i=s[0],l=s[1],c=new o(function(e,t,n){return 3*(t+n)/4-n}(0,i,l)),u=0,p=l>0?i-4:i;for(n=0;n<p;n+=4)t=r[e.charCodeAt(n)]<<18|r[e.charCodeAt(n+1)]<<12|r[e.charCodeAt(n+2)]<<6|r[e.charCodeAt(n+3)],c[u++]=t>>16&255,c[u++]=t>>8&255,c[u++]=255&t;2===l&&(t=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,c[u++]=255&t);1===l&&(t=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,c[u++]=t>>8&255,c[u++]=255&t);return c},t.fromByteArray=function(e){for(var t,r=e.length,o=r%3,s=[],i=16383,a=0,c=r-o;a<c;a+=i)s.push(l(e,a,a+i>c?c:a+i));1===o?(t=e[r-1],s.push(n[t>>2]+n[t<<4&63]+\"==\")):2===o&&(t=(e[r-2]<<8)+e[r-1],s.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+\"=\"));return s.join(\"\")};for(var n=[],r=[],o=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,s=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",i=0;i<64;++i)n[i]=s[i],r[s.charCodeAt(i)]=i;function a(e){var t=e.length;if(t%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var n=e.indexOf(\"=\");return-1===n&&(n=t),[n,n===t?0:4-n%4]}function l(e,t,r){for(var o,s,i=[],a=t;a<r;a+=3)o=(e[a]<<16&16711680)+(e[a+1]<<8&65280)+(255&e[a+2]),i.push(n[(s=o)>>18&63]+n[s>>12&63]+n[s>>6&63]+n[63&s]);return i.join(\"\")}r[\"-\".charCodeAt(0)]=62,r[\"_\".charCodeAt(0)]=63},48764:(e,t,n)=>{\"use strict\";const r=n(79742),o=n(80645),s=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;t.Buffer=l,t.SlowBuffer=function(e){+e!=e&&(e=0);return l.alloc(+e)},t.INSPECT_MAX_BYTES=50;const i=2147483647;function a(e){if(e>i)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,l.prototype),t}function l(e,t,n){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return p(e)}return c(e,t,n)}function c(e,t,n){if(\"string\"==typeof e)return function(e,t){\"string\"==typeof t&&\"\"!==t||(t=\"utf8\");if(!l.isEncoding(t))throw new TypeError(\"Unknown encoding: \"+t);const n=0|m(e,t);let r=a(n);const o=r.write(e,t);o!==n&&(r=r.slice(0,o));return r}(e,t);if(ArrayBuffer.isView(e))return function(e){if(G(e,Uint8Array)){const t=new Uint8Array(e);return f(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e);if(G(e,ArrayBuffer)||e&&G(e.buffer,ArrayBuffer))return f(e,t,n);if(\"undefined\"!=typeof SharedArrayBuffer&&(G(e,SharedArrayBuffer)||e&&G(e.buffer,SharedArrayBuffer)))return f(e,t,n);if(\"number\"==typeof e)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const r=e.valueOf&&e.valueOf();if(null!=r&&r!==e)return l.from(r,t,n);const o=function(e){if(l.isBuffer(e)){const t=0|d(e.length),n=a(t);return 0===n.length||e.copy(n,0,0,t),n}if(void 0!==e.length)return\"number\"!=typeof e.length||Z(e.length)?a(0):h(e);if(\"Buffer\"===e.type&&Array.isArray(e.data))return h(e.data)}(e);if(o)return o;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof e[Symbol.toPrimitive])return l.from(e[Symbol.toPrimitive](\"string\"),t,n);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof e)}function u(e){if(\"number\"!=typeof e)throw new TypeError('\"size\" argument must be of type number');if(e<0)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}function p(e){return u(e),a(e<0?0:0|d(e))}function h(e){const t=e.length<0?0:0|d(e.length),n=a(t);for(let r=0;r<t;r+=1)n[r]=255&e[r];return n}function f(e,t,n){if(t<0||e.byteLength<t)throw new RangeError('\"offset\" is outside of buffer bounds');if(e.byteLength<t+(n||0))throw new RangeError('\"length\" is outside of buffer bounds');let r;return r=void 0===t&&void 0===n?new Uint8Array(e):void 0===n?new Uint8Array(e,t):new Uint8Array(e,t,n),Object.setPrototypeOf(r,l.prototype),r}function d(e){if(e>=i)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+i.toString(16)+\" bytes\");return 0|e}function m(e,t){if(l.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||G(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const n=e.length,r=arguments.length>2&&!0===arguments[2];if(!r&&0===n)return 0;let o=!1;for(;;)switch(t){case\"ascii\":case\"latin1\":case\"binary\":return n;case\"utf8\":case\"utf-8\":return J(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*n;case\"hex\":return n>>>1;case\"base64\":return K(e).length;default:if(o)return r?-1:J(e).length;t=(\"\"+t).toLowerCase(),o=!0}}function g(e,t,n){let r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return\"\";if((n>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return P(this,t,n);case\"utf8\":case\"utf-8\":return O(this,t,n);case\"ascii\":return A(this,t,n);case\"latin1\":case\"binary\":return C(this,t,n);case\"base64\":return j(this,t,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return N(this,t,n);default:if(r)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),r=!0}}function y(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function v(e,t,n,r,o){if(0===e.length)return-1;if(\"string\"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),Z(n=+n)&&(n=o?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(o)return-1;n=e.length-1}else if(n<0){if(!o)return-1;n=0}if(\"string\"==typeof t&&(t=l.from(t,r)),l.isBuffer(t))return 0===t.length?-1:b(e,t,n,r,o);if(\"number\"==typeof t)return t&=255,\"function\"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):b(e,[t],n,r,o);throw new TypeError(\"val must be string, number or Buffer\")}function b(e,t,n,r,o){let s,i=1,a=e.length,l=t.length;if(void 0!==r&&(\"ucs2\"===(r=String(r).toLowerCase())||\"ucs-2\"===r||\"utf16le\"===r||\"utf-16le\"===r)){if(e.length<2||t.length<2)return-1;i=2,a/=2,l/=2,n/=2}function c(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(o){let r=-1;for(s=n;s<a;s++)if(c(e,s)===c(t,-1===r?0:s-r)){if(-1===r&&(r=s),s-r+1===l)return r*i}else-1!==r&&(s-=s-r),r=-1}else for(n+l>a&&(n=a-l),s=n;s>=0;s--){let n=!0;for(let r=0;r<l;r++)if(c(e,s+r)!==c(t,r)){n=!1;break}if(n)return s}return-1}function w(e,t,n,r){n=Number(n)||0;const o=e.length-n;r?(r=Number(r))>o&&(r=o):r=o;const s=t.length;let i;for(r>s/2&&(r=s/2),i=0;i<r;++i){const r=parseInt(t.substr(2*i,2),16);if(Z(r))return i;e[n+i]=r}return i}function E(e,t,n,r){return H(J(t,e.length-n),e,n,r)}function x(e,t,n,r){return H(function(e){const t=[];for(let n=0;n<e.length;++n)t.push(255&e.charCodeAt(n));return t}(t),e,n,r)}function S(e,t,n,r){return H(K(t),e,n,r)}function _(e,t,n,r){return H(function(e,t){let n,r,o;const s=[];for(let i=0;i<e.length&&!((t-=2)<0);++i)n=e.charCodeAt(i),r=n>>8,o=n%256,s.push(o),s.push(r);return s}(t,e.length-n),e,n,r)}function j(e,t,n){return 0===t&&n===e.length?r.fromByteArray(e):r.fromByteArray(e.slice(t,n))}function O(e,t,n){n=Math.min(e.length,n);const r=[];let o=t;for(;o<n;){const t=e[o];let s=null,i=t>239?4:t>223?3:t>191?2:1;if(o+i<=n){let n,r,a,l;switch(i){case 1:t<128&&(s=t);break;case 2:n=e[o+1],128==(192&n)&&(l=(31&t)<<6|63&n,l>127&&(s=l));break;case 3:n=e[o+1],r=e[o+2],128==(192&n)&&128==(192&r)&&(l=(15&t)<<12|(63&n)<<6|63&r,l>2047&&(l<55296||l>57343)&&(s=l));break;case 4:n=e[o+1],r=e[o+2],a=e[o+3],128==(192&n)&&128==(192&r)&&128==(192&a)&&(l=(15&t)<<18|(63&n)<<12|(63&r)<<6|63&a,l>65535&&l<1114112&&(s=l))}}null===s?(s=65533,i=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),o+=i}return function(e){const t=e.length;if(t<=k)return String.fromCharCode.apply(String,e);let n=\"\",r=0;for(;r<t;)n+=String.fromCharCode.apply(String,e.slice(r,r+=k));return n}(r)}t.kMaxLength=i,l.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),l.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(l.prototype,\"parent\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.buffer}}),Object.defineProperty(l.prototype,\"offset\",{enumerable:!0,get:function(){if(l.isBuffer(this))return this.byteOffset}}),l.poolSize=8192,l.from=function(e,t,n){return c(e,t,n)},Object.setPrototypeOf(l.prototype,Uint8Array.prototype),Object.setPrototypeOf(l,Uint8Array),l.alloc=function(e,t,n){return function(e,t,n){return u(e),e<=0?a(e):void 0!==t?\"string\"==typeof n?a(e).fill(t,n):a(e).fill(t):a(e)}(e,t,n)},l.allocUnsafe=function(e){return p(e)},l.allocUnsafeSlow=function(e){return p(e)},l.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==l.prototype},l.compare=function(e,t){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),G(t,Uint8Array)&&(t=l.from(t,t.offset,t.byteLength)),!l.isBuffer(e)||!l.isBuffer(t))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let n=e.length,r=t.length;for(let o=0,s=Math.min(n,r);o<s;++o)if(e[o]!==t[o]){n=e[o],r=t[o];break}return n<r?-1:r<n?1:0},l.isEncoding=function(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},l.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===e.length)return l.alloc(0);let n;if(void 0===t)for(t=0,n=0;n<e.length;++n)t+=e[n].length;const r=l.allocUnsafe(t);let o=0;for(n=0;n<e.length;++n){let t=e[n];if(G(t,Uint8Array))o+t.length>r.length?(l.isBuffer(t)||(t=l.from(t)),t.copy(r,o)):Uint8Array.prototype.set.call(r,t,o);else{if(!l.isBuffer(t))throw new TypeError('\"list\" argument must be an Array of Buffers');t.copy(r,o)}o+=t.length}return r},l.byteLength=m,l.prototype._isBuffer=!0,l.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let t=0;t<e;t+=2)y(this,t,t+1);return this},l.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let t=0;t<e;t+=4)y(this,t,t+3),y(this,t+1,t+2);return this},l.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let t=0;t<e;t+=8)y(this,t,t+7),y(this,t+1,t+6),y(this,t+2,t+5),y(this,t+3,t+4);return this},l.prototype.toString=function(){const e=this.length;return 0===e?\"\":0===arguments.length?O(this,0,e):g.apply(this,arguments)},l.prototype.toLocaleString=l.prototype.toString,l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){let e=\"\";const n=t.INSPECT_MAX_BYTES;return e=this.toString(\"hex\",0,n).replace(/(.{2})/g,\"$1 \").trim(),this.length>n&&(e+=\" ... \"),\"<Buffer \"+e+\">\"},s&&(l.prototype[s]=l.prototype.inspect),l.prototype.compare=function(e,t,n,r,o){if(G(e,Uint8Array)&&(e=l.from(e,e.offset,e.byteLength)),!l.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),t<0||n>e.length||r<0||o>this.length)throw new RangeError(\"out of range index\");if(r>=o&&t>=n)return 0;if(r>=o)return-1;if(t>=n)return 1;if(this===e)return 0;let s=(o>>>=0)-(r>>>=0),i=(n>>>=0)-(t>>>=0);const a=Math.min(s,i),c=this.slice(r,o),u=e.slice(t,n);for(let e=0;e<a;++e)if(c[e]!==u[e]){s=c[e],i=u[e];break}return s<i?-1:i<s?1:0},l.prototype.includes=function(e,t,n){return-1!==this.indexOf(e,t,n)},l.prototype.indexOf=function(e,t,n){return v(this,e,t,n,!0)},l.prototype.lastIndexOf=function(e,t,n){return v(this,e,t,n,!1)},l.prototype.write=function(e,t,n,r){if(void 0===t)r=\"utf8\",n=this.length,t=0;else if(void 0===n&&\"string\"==typeof t)r=t,n=this.length,t=0;else{if(!isFinite(t))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");t>>>=0,isFinite(n)?(n>>>=0,void 0===r&&(r=\"utf8\")):(r=n,n=void 0)}const o=this.length-t;if((void 0===n||n>o)&&(n=o),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");r||(r=\"utf8\");let s=!1;for(;;)switch(r){case\"hex\":return w(this,e,t,n);case\"utf8\":case\"utf-8\":return E(this,e,t,n);case\"ascii\":case\"latin1\":case\"binary\":return x(this,e,t,n);case\"base64\":return S(this,e,t,n);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _(this,e,t,n);default:if(s)throw new TypeError(\"Unknown encoding: \"+r);r=(\"\"+r).toLowerCase(),s=!0}},l.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const k=4096;function A(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(127&e[o]);return r}function C(e,t,n){let r=\"\";n=Math.min(e.length,n);for(let o=t;o<n;++o)r+=String.fromCharCode(e[o]);return r}function P(e,t,n){const r=e.length;(!t||t<0)&&(t=0),(!n||n<0||n>r)&&(n=r);let o=\"\";for(let r=t;r<n;++r)o+=Y[e[r]];return o}function N(e,t,n){const r=e.slice(t,n);let o=\"\";for(let e=0;e<r.length-1;e+=2)o+=String.fromCharCode(r[e]+256*r[e+1]);return o}function I(e,t,n){if(e%1!=0||e<0)throw new RangeError(\"offset is not uint\");if(e+t>n)throw new RangeError(\"Trying to access beyond buffer length\")}function T(e,t,n,r,o,s){if(!l.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(t>o||t<s)throw new RangeError('\"value\" argument is out of bounds');if(n+r>e.length)throw new RangeError(\"Index out of range\")}function R(e,t,n,r,o){U(t,r,o,e,n,7);let s=Number(t&BigInt(4294967295));e[n++]=s,s>>=8,e[n++]=s,s>>=8,e[n++]=s,s>>=8,e[n++]=s;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,i>>=8,e[n++]=i,n}function M(e,t,n,r,o){U(t,r,o,e,n,7);let s=Number(t&BigInt(4294967295));e[n+7]=s,s>>=8,e[n+6]=s,s>>=8,e[n+5]=s,s>>=8,e[n+4]=s;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[n+3]=i,i>>=8,e[n+2]=i,i>>=8,e[n+1]=i,i>>=8,e[n]=i,n+8}function D(e,t,n,r,o,s){if(n+r>e.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"Index out of range\")}function F(e,t,n,r,s){return t=+t,n>>>=0,s||D(e,0,n,4),o.write(e,t,n,r,23,4),n+4}function L(e,t,n,r,s){return t=+t,n>>>=0,s||D(e,0,n,8),o.write(e,t,n,r,52,8),n+8}l.prototype.slice=function(e,t){const n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(t=void 0===t?n:~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),t<e&&(t=e);const r=this.subarray(e,t);return Object.setPrototypeOf(r,l.prototype),r},l.prototype.readUintLE=l.prototype.readUIntLE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=this[e],o=1,s=0;for(;++s<t&&(o*=256);)r+=this[e+s]*o;return r},l.prototype.readUintBE=l.prototype.readUIntBE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=this[e+--t],o=1;for(;t>0&&(o*=256);)r+=this[e+--t]*o;return r},l.prototype.readUint8=l.prototype.readUInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),this[e]},l.prototype.readUint16LE=l.prototype.readUInt16LE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUint16BE=l.prototype.readUInt16BE=function(e,t){return e>>>=0,t||I(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUint32LE=l.prototype.readUInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUint32BE=l.prototype.readUInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readBigUInt64LE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,o=this[++e]+256*this[++e]+65536*this[++e]+n*2**24;return BigInt(r)+(BigInt(o)<<BigInt(32))})),l.prototype.readBigUInt64BE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=t*2**24+65536*this[++e]+256*this[++e]+this[++e],o=this[++e]*2**24+65536*this[++e]+256*this[++e]+n;return(BigInt(r)<<BigInt(32))+BigInt(o)})),l.prototype.readIntLE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=this[e],o=1,s=0;for(;++s<t&&(o*=256);)r+=this[e+s]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*t)),r},l.prototype.readIntBE=function(e,t,n){e>>>=0,t>>>=0,n||I(e,t,this.length);let r=t,o=1,s=this[e+--r];for(;r>0&&(o*=256);)s+=this[e+--r]*o;return o*=128,s>=o&&(s-=Math.pow(2,8*t)),s},l.prototype.readInt8=function(e,t){return e>>>=0,t||I(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,t){e>>>=0,t||I(e,2,this.length);const n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt16BE=function(e,t){e>>>=0,t||I(e,2,this.length);const n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},l.prototype.readInt32LE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,t){return e>>>=0,t||I(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readBigInt64LE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=this[e+4]+256*this[e+5]+65536*this[e+6]+(n<<24);return(BigInt(r)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),l.prototype.readBigInt64BE=X((function(e){z(e>>>=0,\"offset\");const t=this[e],n=this[e+7];void 0!==t&&void 0!==n||V(e,this.length-8);const r=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(r)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+n)})),l.prototype.readFloatLE=function(e,t){return e>>>=0,t||I(e,4,this.length),o.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,t){return e>>>=0,t||I(e,4,this.length),o.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,t){return e>>>=0,t||I(e,8,this.length),o.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,t){return e>>>=0,t||I(e,8,this.length),o.read(this,e,!1,52,8)},l.prototype.writeUintLE=l.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){T(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=1,s=0;for(this[t]=255&e;++s<n&&(o*=256);)this[t+s]=e/o&255;return t+n},l.prototype.writeUintBE=l.prototype.writeUIntBE=function(e,t,n,r){if(e=+e,t>>>=0,n>>>=0,!r){T(this,e,t,n,Math.pow(2,8*n)-1,0)}let o=n-1,s=1;for(this[t+o]=255&e;--o>=0&&(s*=256);)this[t+o]=e/s&255;return t+n},l.prototype.writeUint8=l.prototype.writeUInt8=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,1,255,0),this[t]=255&e,t+1},l.prototype.writeUint16LE=l.prototype.writeUInt16LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeUint16BE=l.prototype.writeUInt16BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeUint32LE=l.prototype.writeUInt32LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},l.prototype.writeUint32BE=l.prototype.writeUInt32BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigUInt64LE=X((function(e,t=0){return R(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),l.prototype.writeBigUInt64BE=X((function(e,t=0){return M(this,e,t,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),l.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);T(this,e,t,n,r-1,-r)}let o=0,s=1,i=0;for(this[t]=255&e;++o<n&&(s*=256);)e<0&&0===i&&0!==this[t+o-1]&&(i=1),this[t+o]=(e/s>>0)-i&255;return t+n},l.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t>>>=0,!r){const r=Math.pow(2,8*n-1);T(this,e,t,n,r-1,-r)}let o=n-1,s=1,i=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===i&&0!==this[t+o+1]&&(i=1),this[t+o]=(e/s>>0)-i&255;return t+n},l.prototype.writeInt8=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},l.prototype.writeInt16LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},l.prototype.writeInt16BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},l.prototype.writeInt32LE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},l.prototype.writeInt32BE=function(e,t,n){return e=+e,t>>>=0,n||T(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},l.prototype.writeBigInt64LE=X((function(e,t=0){return R(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),l.prototype.writeBigInt64BE=X((function(e,t=0){return M(this,e,t,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),l.prototype.writeFloatLE=function(e,t,n){return F(this,e,t,!0,n)},l.prototype.writeFloatBE=function(e,t,n){return F(this,e,t,!1,n)},l.prototype.writeDoubleLE=function(e,t,n){return L(this,e,t,!0,n)},l.prototype.writeDoubleBE=function(e,t,n){return L(this,e,t,!1,n)},l.prototype.copy=function(e,t,n,r){if(!l.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError(\"targetStart out of bounds\");if(n<0||n>=this.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"sourceEnd out of bounds\");r>this.length&&(r=this.length),e.length-t<r-n&&(r=e.length-t+n);const o=r-n;return this===e&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,n,r):Uint8Array.prototype.set.call(e,this.subarray(n,r),t),o},l.prototype.fill=function(e,t,n,r){if(\"string\"==typeof e){if(\"string\"==typeof t?(r=t,t=0,n=this.length):\"string\"==typeof n&&(r=n,n=this.length),void 0!==r&&\"string\"!=typeof r)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof r&&!l.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);if(1===e.length){const t=e.charCodeAt(0);(\"utf8\"===r&&t<128||\"latin1\"===r)&&(e=t)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<n)throw new RangeError(\"Out of range index\");if(n<=t)return this;let o;if(t>>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(o=t;o<n;++o)this[o]=e;else{const s=l.isBuffer(e)?e:l.from(e,r),i=s.length;if(0===i)throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"');for(o=0;o<n-t;++o)this[o+t]=s[o%i]}return this};const B={};function $(e,t,n){B[e]=class extends n{constructor(){super(),Object.defineProperty(this,\"message\",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function q(e){let t=\"\",n=e.length;const r=\"-\"===e[0]?1:0;for(;n>=r+4;n-=3)t=`_${e.slice(n-3,n)}${t}`;return`${e.slice(0,n)}${t}`}function U(e,t,n,r,o,s){if(e>n||e<t){const r=\"bigint\"==typeof t?\"n\":\"\";let o;throw o=s>3?0===t||t===BigInt(0)?`>= 0${r} and < 2${r} ** ${8*(s+1)}${r}`:`>= -(2${r} ** ${8*(s+1)-1}${r}) and < 2 ** ${8*(s+1)-1}${r}`:`>= ${t}${r} and <= ${n}${r}`,new B.ERR_OUT_OF_RANGE(\"value\",o,e)}!function(e,t,n){z(t,\"offset\"),void 0!==e[t]&&void 0!==e[t+n]||V(t,e.length-(n+1))}(r,o,s)}function z(e,t){if(\"number\"!=typeof e)throw new B.ERR_INVALID_ARG_TYPE(t,\"number\",e)}function V(e,t,n){if(Math.floor(e)!==e)throw z(e,n),new B.ERR_OUT_OF_RANGE(n||\"offset\",\"an integer\",e);if(t<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(n||\"offset\",`>= ${n?1:0} and <= ${t}`,e)}$(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(e){return e?`${e} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),$(\"ERR_INVALID_ARG_TYPE\",(function(e,t){return`The \"${e}\" argument must be of type number. Received type ${typeof t}`}),TypeError),$(\"ERR_OUT_OF_RANGE\",(function(e,t,n){let r=`The value of \"${e}\" is out of range.`,o=n;return Number.isInteger(n)&&Math.abs(n)>2**32?o=q(String(n)):\"bigint\"==typeof n&&(o=String(n),(n>BigInt(2)**BigInt(32)||n<-(BigInt(2)**BigInt(32)))&&(o=q(o)),o+=\"n\"),r+=` It must be ${t}. Received ${o}`,r}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function J(e,t){let n;t=t||1/0;const r=e.length;let o=null;const s=[];for(let i=0;i<r;++i){if(n=e.charCodeAt(i),n>55295&&n<57344){if(!o){if(n>56319){(t-=3)>-1&&s.push(239,191,189);continue}if(i+1===r){(t-=3)>-1&&s.push(239,191,189);continue}o=n;continue}if(n<56320){(t-=3)>-1&&s.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(t-=3)>-1&&s.push(239,191,189);if(o=null,n<128){if((t-=1)<0)break;s.push(n)}else if(n<2048){if((t-=2)<0)break;s.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;s.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;s.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return s}function K(e){return r.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(W,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function H(e,t,n,r){let o;for(o=0;o<r&&!(o+n>=t.length||o>=e.length);++o)t[o+n]=e[o];return o}function G(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function Z(e){return e!=e}const Y=function(){const e=\"0123456789abcdef\",t=new Array(256);for(let n=0;n<16;++n){const r=16*n;for(let o=0;o<16;++o)t[r+o]=e[n]+e[o]}return t}();function X(e){return\"undefined\"==typeof BigInt?Q:e}function Q(){throw new Error(\"BigInt not supported\")}},21924:(e,t,n)=>{\"use strict\";var r=n(40210),o=n(55559),s=o(r(\"String.prototype.indexOf\"));e.exports=function(e,t){var n=r(e,!!t);return\"function\"==typeof n&&s(e,\".prototype.\")>-1?o(n):n}},55559:(e,t,n)=>{\"use strict\";var r=n(58612),o=n(40210),s=o(\"%Function.prototype.apply%\"),i=o(\"%Function.prototype.call%\"),a=o(\"%Reflect.apply%\",!0)||r.call(i,s),l=o(\"%Object.getOwnPropertyDescriptor%\",!0),c=o(\"%Object.defineProperty%\",!0),u=o(\"%Math.max%\");if(c)try{c({},\"a\",{value:1})}catch(e){c=null}e.exports=function(e){var t=a(r,i,arguments);l&&c&&(l(t,\"length\").configurable&&c(t,\"length\",{value:1+u(0,e.length-(arguments.length-1))}));return t};var p=function(){return a(r,s,arguments)};c?c(e.exports,\"apply\",{value:p}):e.exports.apply=p},94184:(e,t)=>{var n;!function(){\"use strict\";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;t<arguments.length;t++){var n=arguments[t];if(n){var s=typeof n;if(\"string\"===s||\"number\"===s)e.push(n);else if(Array.isArray(n)){if(n.length){var i=o.apply(null,n);i&&e.push(i)}}else if(\"object\"===s){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes(\"[native code]\")){e.push(n.toString());continue}for(var a in n)r.call(n,a)&&n[a]&&e.push(a)}}}return e.join(\" \")}e.exports?(o.default=o,e.exports=o):void 0===(n=function(){return o}.apply(t,[]))||(e.exports=n)}()},76489:(e,t)=>{\"use strict\";t.parse=function(e,t){if(\"string\"!=typeof e)throw new TypeError(\"argument str must be a string\");var n={},r=(t||{}).decode||o,s=0;for(;s<e.length;){var a=e.indexOf(\"=\",s);if(-1===a)break;var l=e.indexOf(\";\",s);if(-1===l)l=e.length;else if(l<a){s=e.lastIndexOf(\";\",a-1)+1;continue}var c=e.slice(s,a).trim();if(void 0===n[c]){var u=e.slice(a+1,l).trim();34===u.charCodeAt(0)&&(u=u.slice(1,-1)),n[c]=i(u,r)}s=l+1}return n},t.serialize=function(e,t,o){var i=o||{},a=i.encode||s;if(\"function\"!=typeof a)throw new TypeError(\"option encode is invalid\");if(!r.test(e))throw new TypeError(\"argument name is invalid\");var l=a(t);if(l&&!r.test(l))throw new TypeError(\"argument val is invalid\");var c=e+\"=\"+l;if(null!=i.maxAge){var u=i.maxAge-0;if(isNaN(u)||!isFinite(u))throw new TypeError(\"option maxAge is invalid\");c+=\"; Max-Age=\"+Math.floor(u)}if(i.domain){if(!r.test(i.domain))throw new TypeError(\"option domain is invalid\");c+=\"; Domain=\"+i.domain}if(i.path){if(!r.test(i.path))throw new TypeError(\"option path is invalid\");c+=\"; Path=\"+i.path}if(i.expires){var p=i.expires;if(!function(e){return\"[object Date]\"===n.call(e)||e instanceof Date}(p)||isNaN(p.valueOf()))throw new TypeError(\"option expires is invalid\");c+=\"; Expires=\"+p.toUTCString()}i.httpOnly&&(c+=\"; HttpOnly\");i.secure&&(c+=\"; Secure\");if(i.priority){switch(\"string\"==typeof i.priority?i.priority.toLowerCase():i.priority){case\"low\":c+=\"; Priority=Low\";break;case\"medium\":c+=\"; Priority=Medium\";break;case\"high\":c+=\"; Priority=High\";break;default:throw new TypeError(\"option priority is invalid\")}}if(i.sameSite){switch(\"string\"==typeof i.sameSite?i.sameSite.toLowerCase():i.sameSite){case!0:c+=\"; SameSite=Strict\";break;case\"lax\":c+=\"; SameSite=Lax\";break;case\"strict\":c+=\"; SameSite=Strict\";break;case\"none\":c+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return c};var n=Object.prototype.toString,r=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function o(e){return-1!==e.indexOf(\"%\")?decodeURIComponent(e):e}function s(e){return encodeURIComponent(e)}function i(e,t){try{return t(e)}catch(t){return e}}},20640:(e,t,n)=>{\"use strict\";var r=n(11742),o={\"text/plain\":\"Text\",\"text/html\":\"Url\",default:\"Text\"};e.exports=function(e,t){var n,s,i,a,l,c,u=!1;t||(t={}),n=t.debug||!1;try{if(i=r(),a=document.createRange(),l=document.getSelection(),(c=document.createElement(\"span\")).textContent=e,c.ariaHidden=\"true\",c.style.all=\"unset\",c.style.position=\"fixed\",c.style.top=0,c.style.clip=\"rect(0, 0, 0, 0)\",c.style.whiteSpace=\"pre\",c.style.webkitUserSelect=\"text\",c.style.MozUserSelect=\"text\",c.style.msUserSelect=\"text\",c.style.userSelect=\"text\",c.addEventListener(\"copy\",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn(\"unable to use e.clipboardData\"),n&&console.warn(\"trying IE specific stuff\"),window.clipboardData.clearData();var s=o[t.format]||o.default;window.clipboardData.setData(s,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(c),a.selectNodeContents(c),l.addRange(a),!document.execCommand(\"copy\"))throw new Error(\"copy command was unsuccessful\");u=!0}catch(r){n&&console.error(\"unable to copy using execCommand: \",r),n&&console.warn(\"trying IE specific stuff\");try{window.clipboardData.setData(t.format||\"text\",e),t.onCopy&&t.onCopy(window.clipboardData),u=!0}catch(r){n&&console.error(\"unable to copy using clipboardData: \",r),n&&console.error(\"falling back to prompt\"),s=function(e){var t=(/mac os x/i.test(navigator.userAgent)?\"⌘\":\"Ctrl\")+\"+C\";return e.replace(/#{\\s*key\\s*}/g,t)}(\"message\"in t?t.message:\"Copy to clipboard: #{key}, Enter\"),window.prompt(s,e)}}finally{l&&(\"function\"==typeof l.removeRange?l.removeRange(a):l.removeAllRanges()),c&&document.body.removeChild(c),i()}return u}},90093:(e,t,n)=>{var r=n(28196);e.exports=r},3688:(e,t,n)=>{var r=n(11955);e.exports=r},83838:(e,t,n)=>{var r=n(46279);e.exports=r},15684:(e,t,n)=>{var r=n(19373);e.exports=r},81331:(e,t,n)=>{var r=n(52759);e.exports=r},65362:(e,t,n)=>{var r=n(63383);e.exports=r},91254:(e,t,n)=>{var r=n(57396);e.exports=r},43536:(e,t,n)=>{var r=n(41910);e.exports=r},37331:(e,t,n)=>{var r=n(79427);e.exports=r},68522:(e,t,n)=>{var r=n(62857);e.exports=r},73151:(e,t,n)=>{var r=n(9534);e.exports=r},45012:(e,t,n)=>{var r=n(23059);e.exports=r},80281:(e,t,n)=>{var r=n(92547);n(97522),n(43975),n(45414),e.exports=r},40031:(e,t,n)=>{var r=n(46509);e.exports=r},17487:(e,t,n)=>{var r=n(35774);e.exports=r},54493:(e,t,n)=>{n(77971),n(53242);var r=n(54058);e.exports=r.Array.from},24034:(e,t,n)=>{n(92737);var r=n(54058);e.exports=r.Array.isArray},15367:(e,t,n)=>{n(85906);var r=n(35703);e.exports=r(\"Array\").concat},12710:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r(\"Array\").entries},51459:(e,t,n)=>{n(48851);var r=n(35703);e.exports=r(\"Array\").every},6172:(e,t,n)=>{n(80290);var r=n(35703);e.exports=r(\"Array\").fill},62383:(e,t,n)=>{n(21501);var r=n(35703);e.exports=r(\"Array\").filter},60009:(e,t,n)=>{n(44929);var r=n(35703);e.exports=r(\"Array\").findIndex},17671:(e,t,n)=>{n(80833);var r=n(35703);e.exports=r(\"Array\").find},99324:(e,t,n)=>{n(2437);var r=n(35703);e.exports=r(\"Array\").forEach},80991:(e,t,n)=>{n(97690);var r=n(35703);e.exports=r(\"Array\").includes},8700:(e,t,n)=>{n(99076);var r=n(35703);e.exports=r(\"Array\").indexOf},95909:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r(\"Array\").keys},6442:(e,t,n)=>{n(75915);var r=n(35703);e.exports=r(\"Array\").lastIndexOf},23866:(e,t,n)=>{n(68787);var r=n(35703);e.exports=r(\"Array\").map},9896:(e,t,n)=>{n(48528);var r=n(35703);e.exports=r(\"Array\").push},52999:(e,t,n)=>{n(81876);var r=n(35703);e.exports=r(\"Array\").reduce},24900:(e,t,n)=>{n(60186);var r=n(35703);e.exports=r(\"Array\").slice},3824:(e,t,n)=>{n(36026);var r=n(35703);e.exports=r(\"Array\").some},2948:(e,t,n)=>{n(4115);var r=n(35703);e.exports=r(\"Array\").sort},78209:(e,t,n)=>{n(98611);var r=n(35703);e.exports=r(\"Array\").splice},14423:(e,t,n)=>{n(66274),n(55967);var r=n(35703);e.exports=r(\"Array\").values},81103:(e,t,n)=>{n(95160);var r=n(54058);e.exports=r.Date.now},27700:(e,t,n)=>{n(73381);var r=n(35703);e.exports=r(\"Function\").bind},16246:(e,t,n)=>{var r=n(7046),o=n(27700),s=Function.prototype;e.exports=function(e){var t=e.bind;return e===s||r(s,e)&&t===s.bind?o:t}},56043:(e,t,n)=>{var r=n(7046),o=n(15367),s=Array.prototype;e.exports=function(e){var t=e.concat;return e===s||r(s,e)&&t===s.concat?o:t}},13160:(e,t,n)=>{var r=n(7046),o=n(51459),s=Array.prototype;e.exports=function(e){var t=e.every;return e===s||r(s,e)&&t===s.every?o:t}},80446:(e,t,n)=>{var r=n(7046),o=n(6172),s=Array.prototype;e.exports=function(e){var t=e.fill;return e===s||r(s,e)&&t===s.fill?o:t}},2480:(e,t,n)=>{var r=n(7046),o=n(62383),s=Array.prototype;e.exports=function(e){var t=e.filter;return e===s||r(s,e)&&t===s.filter?o:t}},7147:(e,t,n)=>{var r=n(7046),o=n(60009),s=Array.prototype;e.exports=function(e){var t=e.findIndex;return e===s||r(s,e)&&t===s.findIndex?o:t}},32236:(e,t,n)=>{var r=n(7046),o=n(17671),s=Array.prototype;e.exports=function(e){var t=e.find;return e===s||r(s,e)&&t===s.find?o:t}},58557:(e,t,n)=>{var r=n(7046),o=n(80991),s=n(21631),i=Array.prototype,a=String.prototype;e.exports=function(e){var t=e.includes;return e===i||r(i,e)&&t===i.includes?o:\"string\"==typeof e||e===a||r(a,e)&&t===a.includes?s:t}},34570:(e,t,n)=>{var r=n(7046),o=n(8700),s=Array.prototype;e.exports=function(e){var t=e.indexOf;return e===s||r(s,e)&&t===s.indexOf?o:t}},57564:(e,t,n)=>{var r=n(7046),o=n(6442),s=Array.prototype;e.exports=function(e){var t=e.lastIndexOf;return e===s||r(s,e)&&t===s.lastIndexOf?o:t}},88287:(e,t,n)=>{var r=n(7046),o=n(23866),s=Array.prototype;e.exports=function(e){var t=e.map;return e===s||r(s,e)&&t===s.map?o:t}},93993:(e,t,n)=>{var r=n(7046),o=n(9896),s=Array.prototype;e.exports=function(e){var t=e.push;return e===s||r(s,e)&&t===s.push?o:t}},68025:(e,t,n)=>{var r=n(7046),o=n(52999),s=Array.prototype;e.exports=function(e){var t=e.reduce;return e===s||r(s,e)&&t===s.reduce?o:t}},59257:(e,t,n)=>{var r=n(7046),o=n(80454),s=String.prototype;e.exports=function(e){var t=e.repeat;return\"string\"==typeof e||e===s||r(s,e)&&t===s.repeat?o:t}},69601:(e,t,n)=>{var r=n(7046),o=n(24900),s=Array.prototype;e.exports=function(e){var t=e.slice;return e===s||r(s,e)&&t===s.slice?o:t}},28299:(e,t,n)=>{var r=n(7046),o=n(3824),s=Array.prototype;e.exports=function(e){var t=e.some;return e===s||r(s,e)&&t===s.some?o:t}},69355:(e,t,n)=>{var r=n(7046),o=n(2948),s=Array.prototype;e.exports=function(e){var t=e.sort;return e===s||r(s,e)&&t===s.sort?o:t}},18339:(e,t,n)=>{var r=n(7046),o=n(78209),s=Array.prototype;e.exports=function(e){var t=e.splice;return e===s||r(s,e)&&t===s.splice?o:t}},71611:(e,t,n)=>{var r=n(7046),o=n(3269),s=String.prototype;e.exports=function(e){var t=e.startsWith;return\"string\"==typeof e||e===s||r(s,e)&&t===s.startsWith?o:t}},62774:(e,t,n)=>{var r=n(7046),o=n(13348),s=String.prototype;e.exports=function(e){var t=e.trim;return\"string\"==typeof e||e===s||r(s,e)&&t===s.trim?o:t}},84426:(e,t,n)=>{n(32619);var r=n(54058),o=n(79730);r.JSON||(r.JSON={stringify:JSON.stringify}),e.exports=function(e,t,n){return o(r.JSON.stringify,null,arguments)}},91018:(e,t,n)=>{n(66274),n(37501),n(55967),n(77971);var r=n(54058);e.exports=r.Map},97849:(e,t,n)=>{n(54973),e.exports=Math.pow(2,-52)},3820:(e,t,n)=>{n(30800);var r=n(54058);e.exports=r.Number.isInteger},45999:(e,t,n)=>{n(49221);var r=n(54058);e.exports=r.Object.assign},7702:(e,t,n)=>{n(74979);var r=n(54058).Object,o=e.exports=function(e,t){return r.defineProperties(e,t)};r.defineProperties.sham&&(o.sham=!0)},48171:(e,t,n)=>{n(86450);var r=n(54058).Object,o=e.exports=function(e,t,n){return r.defineProperty(e,t,n)};r.defineProperty.sham&&(o.sham=!0)},73081:(e,t,n)=>{n(94366);var r=n(54058);e.exports=r.Object.entries},7699:(e,t,n)=>{n(66274),n(28387);var r=n(54058);e.exports=r.Object.fromEntries},286:(e,t,n)=>{n(46924);var r=n(54058).Object,o=e.exports=function(e,t){return r.getOwnPropertyDescriptor(e,t)};r.getOwnPropertyDescriptor.sham&&(o.sham=!0)},92766:(e,t,n)=>{n(88482);var r=n(54058);e.exports=r.Object.getOwnPropertyDescriptors},30498:(e,t,n)=>{n(35824);var r=n(54058);e.exports=r.Object.getOwnPropertySymbols},48494:(e,t,n)=>{n(21724);var r=n(54058);e.exports=r.Object.keys},98430:(e,t,n)=>{n(26614);var r=n(54058);e.exports=r.Object.values},52956:(e,t,n)=>{n(47627),n(66274),n(55967),n(98881),n(4560),n(91302),n(44349),n(77971);var r=n(54058);e.exports=r.Promise},76998:(e,t,n)=>{n(66274),n(55967),n(69008),n(77971);var r=n(54058);e.exports=r.Set},97089:(e,t,n)=>{n(74679);var r=n(54058);e.exports=r.String.raw},21631:(e,t,n)=>{n(11035);var r=n(35703);e.exports=r(\"String\").includes},80454:(e,t,n)=>{n(60986);var r=n(35703);e.exports=r(\"String\").repeat},3269:(e,t,n)=>{n(94761);var r=n(35703);e.exports=r(\"String\").startsWith},13348:(e,t,n)=>{n(57398);var r=n(35703);e.exports=r(\"String\").trim},57473:(e,t,n)=>{n(85906),n(55967),n(35824),n(8555),n(52615),n(21732),n(35903),n(1825),n(28394),n(45915),n(61766),n(62737),n(89911),n(74315),n(63131),n(64714),n(70659),n(69120),n(79413),n(1502);var r=n(54058);e.exports=r.Symbol},24227:(e,t,n)=>{n(66274),n(55967),n(77971),n(1825);var r=n(11477);e.exports=r.f(\"iterator\")},62978:(e,t,n)=>{n(18084),n(63131);var r=n(11477);e.exports=r.f(\"toPrimitive\")},32304:(e,t,n)=>{n(66274),n(55967),n(54334);var r=n(54058);e.exports=r.WeakMap},29567:(e,t,n)=>{n(66274),n(55967),n(1773);var r=n(54058);e.exports=r.WeakSet},14122:(e,t,n)=>{e.exports=n(89097)},44442:(e,t,n)=>{e.exports=n(51675)},57152:(e,t,n)=>{e.exports=n(82507)},69447:(e,t,n)=>{e.exports=n(628)},1449:(e,t,n)=>{e.exports=n(34501)},60269:(e,t,n)=>{e.exports=n(76936)},70573:(e,t,n)=>{e.exports=n(18180)},73685:(e,t,n)=>{e.exports=n(80621)},27533:(e,t,n)=>{e.exports=n(22948)},39057:(e,t,n)=>{e.exports=n(82108)},84710:(e,t,n)=>{e.exports=n(14058)},93799:(e,t,n)=>{e.exports=n(92093)},86600:(e,t,n)=>{e.exports=n(52201)},9759:(e,t,n)=>{e.exports=n(27398)},71384:(e,t,n)=>{e.exports=n(26189)},89097:(e,t,n)=>{var r=n(90093);e.exports=r},51675:(e,t,n)=>{var r=n(3688);e.exports=r},82507:(e,t,n)=>{var r=n(83838);e.exports=r},628:(e,t,n)=>{var r=n(15684);e.exports=r},34501:(e,t,n)=>{var r=n(81331);e.exports=r},76936:(e,t,n)=>{var r=n(65362);e.exports=r},18180:(e,t,n)=>{var r=n(91254);e.exports=r},80621:(e,t,n)=>{var r=n(43536);e.exports=r},22948:(e,t,n)=>{var r=n(37331);e.exports=r},82108:(e,t,n)=>{var r=n(68522);e.exports=r},14058:(e,t,n)=>{var r=n(73151);e.exports=r},92093:(e,t,n)=>{var r=n(45012);e.exports=r},52201:(e,t,n)=>{var r=n(80281);n(28783),n(97618),n(6989),n(65799),n(46774),n(22731),n(85605),n(31943),n(80620),n(36172),e.exports=r},27398:(e,t,n)=>{var r=n(40031);e.exports=r},26189:(e,t,n)=>{var r=n(17487);e.exports=r},24883:(e,t,n)=>{var r=n(57475),o=n(69826),s=TypeError;e.exports=function(e){if(r(e))return e;throw s(o(e)+\" is not a function\")}},174:(e,t,n)=>{var r=n(24284),o=n(69826),s=TypeError;e.exports=function(e){if(r(e))return e;throw s(o(e)+\" is not a constructor\")}},11851:(e,t,n)=>{var r=n(57475),o=String,s=TypeError;e.exports=function(e){if(\"object\"==typeof e||r(e))return e;throw s(\"Can't set \"+o(e)+\" as a prototype\")}},18479:e=>{e.exports=function(){}},5743:(e,t,n)=>{var r=n(7046),o=TypeError;e.exports=function(e,t){if(r(t,e))return e;throw o(\"Incorrect invocation\")}},96059:(e,t,n)=>{var r=n(10941),o=String,s=TypeError;e.exports=function(e){if(r(e))return e;throw s(o(e)+\" is not an object\")}},97135:(e,t,n)=>{var r=n(95981);e.exports=r((function(){if(\"function\"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,\"a\",{value:8})}}))},91860:(e,t,n)=>{\"use strict\";var r=n(89678),o=n(59413),s=n(10623);e.exports=function(e){for(var t=r(this),n=s(t),i=arguments.length,a=o(i>1?arguments[1]:void 0,n),l=i>2?arguments[2]:void 0,c=void 0===l?n:o(l,n);c>a;)t[a++]=e;return t}},56837:(e,t,n)=>{\"use strict\";var r=n(3610).forEach,o=n(34194)(\"forEach\");e.exports=o?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},11354:(e,t,n)=>{\"use strict\";var r=n(86843),o=n(78834),s=n(89678),i=n(75196),a=n(6782),l=n(24284),c=n(10623),u=n(55449),p=n(53476),h=n(22902),f=Array;e.exports=function(e){var t=s(e),n=l(this),d=arguments.length,m=d>1?arguments[1]:void 0,g=void 0!==m;g&&(m=r(m,d>2?arguments[2]:void 0));var y,v,b,w,E,x,S=h(t),_=0;if(!S||this===f&&a(S))for(y=c(t),v=n?new this(y):f(y);y>_;_++)x=g?m(t[_],_):t[_],u(v,_,x);else for(E=(w=p(t,S)).next,v=n?new this:[];!(b=o(E,w)).done;_++)x=g?i(w,m,[b.value,_],!0):b.value,u(v,_,x);return v.length=_,v}},31692:(e,t,n)=>{var r=n(74529),o=n(59413),s=n(10623),i=function(e){return function(t,n,i){var a,l=r(t),c=s(l),u=o(i,c);if(e&&n!=n){for(;c>u;)if((a=l[u++])!=a)return!0}else for(;c>u;u++)if((e||u in l)&&l[u]===n)return e||u||0;return!e&&-1}};e.exports={includes:i(!0),indexOf:i(!1)}},3610:(e,t,n)=>{var r=n(86843),o=n(95329),s=n(37026),i=n(89678),a=n(10623),l=n(64692),c=o([].push),u=function(e){var t=1==e,n=2==e,o=3==e,u=4==e,p=6==e,h=7==e,f=5==e||p;return function(d,m,g,y){for(var v,b,w=i(d),E=s(w),x=r(m,g),S=a(E),_=0,j=y||l,O=t?j(d,S):n||h?j(d,0):void 0;S>_;_++)if((f||_ in E)&&(b=x(v=E[_],_,w),e))if(t)O[_]=b;else if(b)switch(e){case 3:return!0;case 5:return v;case 6:return _;case 2:c(O,v)}else switch(e){case 4:return!1;case 7:c(O,v)}return p?-1:o||u?u:O}};e.exports={forEach:u(0),map:u(1),filter:u(2),some:u(3),every:u(4),find:u(5),findIndex:u(6),filterReject:u(7)}},67145:(e,t,n)=>{\"use strict\";var r=n(79730),o=n(74529),s=n(62435),i=n(10623),a=n(34194),l=Math.min,c=[].lastIndexOf,u=!!c&&1/[1].lastIndexOf(1,-0)<0,p=a(\"lastIndexOf\"),h=u||!p;e.exports=h?function(e){if(u)return r(c,this,arguments)||0;var t=o(this),n=i(t),a=n-1;for(arguments.length>1&&(a=l(a,s(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:c},50568:(e,t,n)=>{var r=n(95981),o=n(99813),s=n(53385),i=o(\"species\");e.exports=function(e){return s>=51||!r((function(){var t=[];return(t.constructor={})[i]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},34194:(e,t,n)=>{\"use strict\";var r=n(95981);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){return 1},1)}))}},46499:(e,t,n)=>{var r=n(24883),o=n(89678),s=n(37026),i=n(10623),a=TypeError,l=function(e){return function(t,n,l,c){r(n);var u=o(t),p=s(u),h=i(u),f=e?h-1:0,d=e?-1:1;if(l<2)for(;;){if(f in p){c=p[f],f+=d;break}if(f+=d,e?f<0:h<=f)throw a(\"Reduce of empty array with no initial value\")}for(;e?f>=0:h>f;f+=d)f in p&&(c=n(c,p[f],f,u));return c}};e.exports={left:l(!1),right:l(!0)}},89779:(e,t,n)=>{\"use strict\";var r=n(55746),o=n(1052),s=TypeError,i=Object.getOwnPropertyDescriptor,a=r&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],\"length\",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=a?function(e,t){if(o(e)&&!i(e,\"length\").writable)throw s(\"Cannot set read only .length\");return e.length=t}:function(e,t){return e.length=t}},15790:(e,t,n)=>{var r=n(59413),o=n(10623),s=n(55449),i=Array,a=Math.max;e.exports=function(e,t,n){for(var l=o(e),c=r(t,l),u=r(void 0===n?l:n,l),p=i(a(u-c,0)),h=0;c<u;c++,h++)s(p,h,e[c]);return p.length=h,p}},93765:(e,t,n)=>{var r=n(95329);e.exports=r([].slice)},61388:(e,t,n)=>{var r=n(15790),o=Math.floor,s=function(e,t){var n=e.length,l=o(n/2);return n<8?i(e,t):a(e,s(r(e,0,l),t),s(r(e,l),t),t)},i=function(e,t){for(var n,r,o=e.length,s=1;s<o;){for(r=s,n=e[s];r&&t(e[r-1],n)>0;)e[r]=e[--r];r!==s++&&(e[r]=n)}return e},a=function(e,t,n,r){for(var o=t.length,s=n.length,i=0,a=0;i<o||a<s;)e[i+a]=i<o&&a<s?r(t[i],n[a])<=0?t[i++]:n[a++]:i<o?t[i++]:n[a++];return e};e.exports=s},5693:(e,t,n)=>{var r=n(1052),o=n(24284),s=n(10941),i=n(99813)(\"species\"),a=Array;e.exports=function(e){var t;return r(e)&&(t=e.constructor,(o(t)&&(t===a||r(t.prototype))||s(t)&&null===(t=t[i]))&&(t=void 0)),void 0===t?a:t}},64692:(e,t,n)=>{var r=n(5693);e.exports=function(e,t){return new(r(e))(0===t?0:t)}},75196:(e,t,n)=>{var r=n(96059),o=n(7609);e.exports=function(e,t,n,s){try{return s?t(r(n)[0],n[1]):t(n)}catch(t){o(e,\"throw\",t)}}},21385:(e,t,n)=>{var r=n(99813)(\"iterator\"),o=!1;try{var s=0,i={next:function(){return{done:!!s++}},return:function(){o=!0}};i[r]=function(){return this},Array.from(i,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!o)return!1;var n=!1;try{var s={};s[r]=function(){return{next:function(){return{done:n=!0}}}},e(s)}catch(e){}return n}},82532:(e,t,n)=>{var r=n(95329),o=r({}.toString),s=r(\"\".slice);e.exports=function(e){return s(o(e),8,-1)}},9697:(e,t,n)=>{var r=n(22885),o=n(57475),s=n(82532),i=n(99813)(\"toStringTag\"),a=Object,l=\"Arguments\"==s(function(){return arguments}());e.exports=r?s:function(e){var t,n,r;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=a(e),i))?n:l?s(t):\"Object\"==(r=s(t))&&o(t.callee)?\"Arguments\":r}},85616:(e,t,n)=>{\"use strict\";var r=n(29290),o=n(29202),s=n(94380),i=n(86843),a=n(5743),l=n(82119),c=n(93091),u=n(75105),p=n(23538),h=n(94431),f=n(55746),d=n(21647).fastKey,m=n(45402),g=m.set,y=m.getterFor;e.exports={getConstructor:function(e,t,n,u){var p=e((function(e,o){a(e,h),g(e,{type:t,index:r(null),first:void 0,last:void 0,size:0}),f||(e.size=0),l(o)||c(o,e[u],{that:e,AS_ENTRIES:n})})),h=p.prototype,m=y(t),v=function(e,t,n){var r,o,s=m(e),i=b(e,t);return i?i.value=n:(s.last=i={index:o=d(t,!0),key:t,value:n,previous:r=s.last,next:void 0,removed:!1},s.first||(s.first=i),r&&(r.next=i),f?s.size++:e.size++,\"F\"!==o&&(s.index[o]=i)),e},b=function(e,t){var n,r=m(e),o=d(t);if(\"F\"!==o)return r.index[o];for(n=r.first;n;n=n.next)if(n.key==t)return n};return s(h,{clear:function(){for(var e=m(this),t=e.index,n=e.first;n;)n.removed=!0,n.previous&&(n.previous=n.previous.next=void 0),delete t[n.index],n=n.next;e.first=e.last=void 0,f?e.size=0:this.size=0},delete:function(e){var t=this,n=m(t),r=b(t,e);if(r){var o=r.next,s=r.previous;delete n.index[r.index],r.removed=!0,s&&(s.next=o),o&&(o.previous=s),n.first==r&&(n.first=o),n.last==r&&(n.last=s),f?n.size--:t.size--}return!!r},forEach:function(e){for(var t,n=m(this),r=i(e,arguments.length>1?arguments[1]:void 0);t=t?t.next:n.first;)for(r(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(e){return!!b(this,e)}}),s(h,n?{get:function(e){var t=b(this,e);return t&&t.value},set:function(e,t){return v(this,0===e?0:e,t)}}:{add:function(e){return v(this,e=0===e?0:e,e)}}),f&&o(h,\"size\",{configurable:!0,get:function(){return m(this).size}}),p},setStrong:function(e,t,n){var r=t+\" Iterator\",o=y(t),s=y(r);u(e,t,(function(e,t){g(this,{type:r,target:e,state:o(e),kind:t,last:void 0})}),(function(){for(var e=s(this),t=e.kind,n=e.last;n&&n.removed;)n=n.previous;return e.target&&(e.last=n=n?n.next:e.state.first)?p(\"keys\"==t?n.key:\"values\"==t?n.value:[n.key,n.value],!1):(e.target=void 0,p(void 0,!0))}),n?\"entries\":\"values\",!n,!0),h(t)}}},8850:(e,t,n)=>{\"use strict\";var r=n(95329),o=n(94380),s=n(21647).getWeakData,i=n(5743),a=n(96059),l=n(82119),c=n(10941),u=n(93091),p=n(3610),h=n(90953),f=n(45402),d=f.set,m=f.getterFor,g=p.find,y=p.findIndex,v=r([].splice),b=0,w=function(e){return e.frozen||(e.frozen=new E)},E=function(){this.entries=[]},x=function(e,t){return g(e.entries,(function(e){return e[0]===t}))};E.prototype={get:function(e){var t=x(this,e);if(t)return t[1]},has:function(e){return!!x(this,e)},set:function(e,t){var n=x(this,e);n?n[1]=t:this.entries.push([e,t])},delete:function(e){var t=y(this.entries,(function(t){return t[0]===e}));return~t&&v(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,n,r){var p=e((function(e,o){i(e,f),d(e,{type:t,id:b++,frozen:void 0}),l(o)||u(o,e[r],{that:e,AS_ENTRIES:n})})),f=p.prototype,g=m(t),y=function(e,t,n){var r=g(e),o=s(a(t),!0);return!0===o?w(r).set(t,n):o[r.id]=n,e};return o(f,{delete:function(e){var t=g(this);if(!c(e))return!1;var n=s(e);return!0===n?w(t).delete(e):n&&h(n,t.id)&&delete n[t.id]},has:function(e){var t=g(this);if(!c(e))return!1;var n=s(e);return!0===n?w(t).has(e):n&&h(n,t.id)}}),o(f,n?{get:function(e){var t=g(this);if(c(e)){var n=s(e);return!0===n?w(t).get(e):n?n[t.id]:void 0}},set:function(e,t){return y(this,e,t)}}:{add:function(e){return y(this,e,!0)}}),p}}},24683:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(21899),s=n(21647),i=n(95981),a=n(32029),l=n(93091),c=n(5743),u=n(57475),p=n(10941),h=n(90904),f=n(65988).f,d=n(3610).forEach,m=n(55746),g=n(45402),y=g.set,v=g.getterFor;e.exports=function(e,t,n){var g,b=-1!==e.indexOf(\"Map\"),w=-1!==e.indexOf(\"Weak\"),E=b?\"set\":\"add\",x=o[e],S=x&&x.prototype,_={};if(m&&u(x)&&(w||S.forEach&&!i((function(){(new x).entries().next()})))){var j=(g=t((function(t,n){y(c(t,j),{type:e,collection:new x}),null!=n&&l(n,t[E],{that:t,AS_ENTRIES:b})}))).prototype,O=v(e);d([\"add\",\"clear\",\"delete\",\"forEach\",\"get\",\"has\",\"set\",\"keys\",\"values\",\"entries\"],(function(e){var t=\"add\"==e||\"set\"==e;!(e in S)||w&&\"clear\"==e||a(j,e,(function(n,r){var o=O(this).collection;if(!t&&w&&!p(n))return\"get\"==e&&void 0;var s=o[e](0===n?0:n,r);return t?this:s}))})),w||f(j,\"size\",{configurable:!0,get:function(){return O(this).collection.size}})}else g=n.getConstructor(t,e,b,E),s.enable();return h(g,e,!1,!0),_[e]=g,r({global:!0,forced:!0},_),w||n.setStrong(g,e,b),g}},23489:(e,t,n)=>{var r=n(90953),o=n(31136),s=n(49677),i=n(65988);e.exports=function(e,t,n){for(var a=o(t),l=i.f,c=s.f,u=0;u<a.length;u++){var p=a[u];r(e,p)||n&&r(n,p)||l(e,p,c(t,p))}}},67772:(e,t,n)=>{var r=n(99813)(\"match\");e.exports=function(e){var t=/./;try{\"/./\"[e](t)}catch(n){try{return t[r]=!1,\"/./\"[e](t)}catch(e){}}return!1}},64160:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},23538:e=>{e.exports=function(e,t){return{value:e,done:t}}},32029:(e,t,n)=>{var r=n(55746),o=n(65988),s=n(31887);e.exports=r?function(e,t,n){return o.f(e,t,s(1,n))}:function(e,t,n){return e[t]=n,e}},31887:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},55449:(e,t,n)=>{\"use strict\";var r=n(83894),o=n(65988),s=n(31887);e.exports=function(e,t,n){var i=r(t);i in e?o.f(e,i,s(0,n)):e[i]=n}},29202:(e,t,n)=>{var r=n(65988);e.exports=function(e,t,n){return r.f(e,t,n)}},95929:(e,t,n)=>{var r=n(32029);e.exports=function(e,t,n,o){return o&&o.enumerable?e[t]=n:r(e,t,n),e}},94380:(e,t,n)=>{var r=n(95929);e.exports=function(e,t,n){for(var o in t)n&&n.unsafe&&e[o]?e[o]=t[o]:r(e,o,t[o],n);return e}},75609:(e,t,n)=>{var r=n(21899),o=Object.defineProperty;e.exports=function(e,t){try{o(r,e,{value:t,configurable:!0,writable:!0})}catch(n){r[e]=t}return t}},15863:(e,t,n)=>{\"use strict\";var r=n(69826),o=TypeError;e.exports=function(e,t){if(!delete e[t])throw o(\"Cannot delete property \"+r(t)+\" of \"+r(e))}},55746:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},76616:e=>{var t=\"object\"==typeof document&&document.all,n=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:n}},61333:(e,t,n)=>{var r=n(21899),o=n(10941),s=r.document,i=o(s)&&o(s.createElement);e.exports=function(e){return i?s.createElement(e):{}}},66796:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t(\"Maximum allowed index exceeded\");return e}},63281:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},34342:(e,t,n)=>{var r=n(2861).match(/firefox\\/(\\d+)/i);e.exports=!!r&&+r[1]},23321:(e,t,n)=>{var r=n(48501),o=n(6049);e.exports=!r&&!o&&\"object\"==typeof window&&\"object\"==typeof document},56491:e=>{e.exports=\"function\"==typeof Bun&&Bun&&\"string\"==typeof Bun.version},48501:e=>{e.exports=\"object\"==typeof Deno&&Deno&&\"object\"==typeof Deno.version},81046:(e,t,n)=>{var r=n(2861);e.exports=/MSIE|Trident/.test(r)},4470:(e,t,n)=>{var r=n(2861);e.exports=/ipad|iphone|ipod/i.test(r)&&\"undefined\"!=typeof Pebble},22749:(e,t,n)=>{var r=n(2861);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(r)},6049:(e,t,n)=>{var r=n(34155),o=n(82532);e.exports=void 0!==r&&\"process\"==o(r)},58045:(e,t,n)=>{var r=n(2861);e.exports=/web0s(?!.*chrome)/i.test(r)},2861:e=>{e.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},53385:(e,t,n)=>{var r,o,s=n(21899),i=n(2861),a=s.process,l=s.Deno,c=a&&a.versions||l&&l.version,u=c&&c.v8;u&&(o=(r=u.split(\".\"))[0]>0&&r[0]<4?1:+(r[0]+r[1])),!o&&i&&(!(r=i.match(/Edge\\/(\\d+)/))||r[1]>=74)&&(r=i.match(/Chrome\\/(\\d+)/))&&(o=+r[1]),e.exports=o},18938:(e,t,n)=>{var r=n(2861).match(/AppleWebKit\\/(\\d+)\\./);e.exports=!!r&&+r[1]},35703:(e,t,n)=>{var r=n(54058);e.exports=function(e){return r[e+\"Prototype\"]}},56759:e=>{e.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},53995:(e,t,n)=>{var r=n(95329),o=Error,s=r(\"\".replace),i=String(o(\"zxcasd\").stack),a=/\\n\\s*at [^:]*:[^\\n]*/,l=a.test(i);e.exports=function(e,t){if(l&&\"string\"==typeof e&&!o.prepareStackTrace)for(;t--;)e=s(e,a,\"\");return e}},79585:(e,t,n)=>{var r=n(32029),o=n(53995),s=n(18780),i=Error.captureStackTrace;e.exports=function(e,t,n,a){s&&(i?i(e,t):r(e,\"stack\",o(n,a)))}},18780:(e,t,n)=>{var r=n(95981),o=n(31887);e.exports=!r((function(){var e=Error(\"a\");return!(\"stack\"in e)||(Object.defineProperty(e,\"stack\",o(1,7)),7!==e.stack)}))},76887:(e,t,n)=>{\"use strict\";var r=n(21899),o=n(79730),s=n(97484),i=n(57475),a=n(49677).f,l=n(37252),c=n(54058),u=n(86843),p=n(32029),h=n(90953),f=function(e){var t=function(n,r,s){if(this instanceof t){switch(arguments.length){case 0:return new e;case 1:return new e(n);case 2:return new e(n,r)}return new e(n,r,s)}return o(e,this,arguments)};return t.prototype=e.prototype,t};e.exports=function(e,t){var n,o,d,m,g,y,v,b,w,E=e.target,x=e.global,S=e.stat,_=e.proto,j=x?r:S?r[E]:(r[E]||{}).prototype,O=x?c:c[E]||p(c,E,{})[E],k=O.prototype;for(m in t)o=!(n=l(x?m:E+(S?\".\":\"#\")+m,e.forced))&&j&&h(j,m),y=O[m],o&&(v=e.dontCallGetSet?(w=a(j,m))&&w.value:j[m]),g=o&&v?v:t[m],o&&typeof y==typeof g||(b=e.bind&&o?u(g,r):e.wrap&&o?f(g):_&&i(g)?s(g):g,(e.sham||g&&g.sham||y&&y.sham)&&p(b,\"sham\",!0),p(O,m,b),_&&(h(c,d=E+\"Prototype\")||p(c,d,{}),p(c[d],m,g),e.real&&k&&(n||!k[m])&&p(k,m,g)))}},95981:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},45602:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){return Object.isExtensible(Object.preventExtensions({}))}))},79730:(e,t,n)=>{var r=n(18285),o=Function.prototype,s=o.apply,i=o.call;e.exports=\"object\"==typeof Reflect&&Reflect.apply||(r?i.bind(s):function(){return i.apply(s,arguments)})},86843:(e,t,n)=>{var r=n(97484),o=n(24883),s=n(18285),i=r(r.bind);e.exports=function(e,t){return o(e),void 0===t?e:s?i(e,t):function(){return e.apply(t,arguments)}}},18285:(e,t,n)=>{var r=n(95981);e.exports=!r((function(){var e=function(){}.bind();return\"function\"!=typeof e||e.hasOwnProperty(\"prototype\")}))},98308:(e,t,n)=>{\"use strict\";var r=n(95329),o=n(24883),s=n(10941),i=n(90953),a=n(93765),l=n(18285),c=Function,u=r([].concat),p=r([].join),h={};e.exports=l?c.bind:function(e){var t=o(this),n=t.prototype,r=a(arguments,1),l=function(){var n=u(r,a(arguments));return this instanceof l?function(e,t,n){if(!i(h,t)){for(var r=[],o=0;o<t;o++)r[o]=\"a[\"+o+\"]\";h[t]=c(\"C,a\",\"return new C(\"+p(r,\",\")+\")\")}return h[t](e,n)}(t,n.length,n):t.apply(e,n)};return s(n)&&(l.prototype=n),l}},78834:(e,t,n)=>{var r=n(18285),o=Function.prototype.call;e.exports=r?o.bind(o):function(){return o.apply(o,arguments)}},79417:(e,t,n)=>{var r=n(55746),o=n(90953),s=Function.prototype,i=r&&Object.getOwnPropertyDescriptor,a=o(s,\"name\"),l=a&&\"something\"===function(){}.name,c=a&&(!r||r&&i(s,\"name\").configurable);e.exports={EXISTS:a,PROPER:l,CONFIGURABLE:c}},45526:(e,t,n)=>{var r=n(95329),o=n(24883);e.exports=function(e,t,n){try{return r(o(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}}},97484:(e,t,n)=>{var r=n(82532),o=n(95329);e.exports=function(e){if(\"Function\"===r(e))return o(e)}},95329:(e,t,n)=>{var r=n(18285),o=Function.prototype,s=o.call,i=r&&o.bind.bind(s,s);e.exports=r?i:function(e){return function(){return s.apply(e,arguments)}}},626:(e,t,n)=>{var r=n(54058),o=n(21899),s=n(57475),i=function(e){return s(e)?e:void 0};e.exports=function(e,t){return arguments.length<2?i(r[e])||i(o[e]):r[e]&&r[e][t]||o[e]&&o[e][t]}},22902:(e,t,n)=>{var r=n(9697),o=n(14229),s=n(82119),i=n(12077),a=n(99813)(\"iterator\");e.exports=function(e){if(!s(e))return o(e,a)||o(e,\"@@iterator\")||i[r(e)]}},53476:(e,t,n)=>{var r=n(78834),o=n(24883),s=n(96059),i=n(69826),a=n(22902),l=TypeError;e.exports=function(e,t){var n=arguments.length<2?a(e):t;if(o(n))return s(r(n,e));throw l(i(e)+\" is not iterable\")}},33323:(e,t,n)=>{var r=n(95329),o=n(1052),s=n(57475),i=n(82532),a=n(85803),l=r([].push);e.exports=function(e){if(s(e))return e;if(o(e)){for(var t=e.length,n=[],r=0;r<t;r++){var c=e[r];\"string\"==typeof c?l(n,c):\"number\"!=typeof c&&\"Number\"!=i(c)&&\"String\"!=i(c)||l(n,a(c))}var u=n.length,p=!0;return function(e,t){if(p)return p=!1,t;if(o(this))return t;for(var r=0;r<u;r++)if(n[r]===e)return t}}}},14229:(e,t,n)=>{var r=n(24883),o=n(82119);e.exports=function(e,t){var n=e[t];return o(n)?void 0:r(n)}},21899:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r(\"object\"==typeof globalThis&&globalThis)||r(\"object\"==typeof window&&window)||r(\"object\"==typeof self&&self)||r(\"object\"==typeof n.g&&n.g)||function(){return this}()||this||Function(\"return this\")()},90953:(e,t,n)=>{var r=n(95329),o=n(89678),s=r({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return s(o(e),t)}},27748:e=>{e.exports={}},34845:e=>{e.exports=function(e,t){try{1==arguments.length?console.error(e):console.error(e,t)}catch(e){}}},15463:(e,t,n)=>{var r=n(626);e.exports=r(\"document\",\"documentElement\")},2840:(e,t,n)=>{var r=n(55746),o=n(95981),s=n(61333);e.exports=!r&&!o((function(){return 7!=Object.defineProperty(s(\"div\"),\"a\",{get:function(){return 7}}).a}))},37026:(e,t,n)=>{var r=n(95329),o=n(95981),s=n(82532),i=Object,a=r(\"\".split);e.exports=o((function(){return!i(\"z\").propertyIsEnumerable(0)}))?function(e){return\"String\"==s(e)?a(e,\"\"):i(e)}:i},81302:(e,t,n)=>{var r=n(95329),o=n(57475),s=n(63030),i=r(Function.toString);o(s.inspectSource)||(s.inspectSource=function(e){return i(e)}),e.exports=s.inspectSource},53794:(e,t,n)=>{var r=n(10941),o=n(32029);e.exports=function(e,t){r(t)&&\"cause\"in t&&o(e,\"cause\",t.cause)}},21647:(e,t,n)=>{var r=n(76887),o=n(95329),s=n(27748),i=n(10941),a=n(90953),l=n(65988).f,c=n(10946),u=n(684),p=n(91584),h=n(99418),f=n(45602),d=!1,m=h(\"meta\"),g=0,y=function(e){l(e,m,{value:{objectID:\"O\"+g++,weakData:{}}})},v=e.exports={enable:function(){v.enable=function(){},d=!0;var e=c.f,t=o([].splice),n={};n[m]=1,e(n).length&&(c.f=function(n){for(var r=e(n),o=0,s=r.length;o<s;o++)if(r[o]===m){t(r,o,1);break}return r},r({target:\"Object\",stat:!0,forced:!0},{getOwnPropertyNames:u.f}))},fastKey:function(e,t){if(!i(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!a(e,m)){if(!p(e))return\"F\";if(!t)return\"E\";y(e)}return e[m].objectID},getWeakData:function(e,t){if(!a(e,m)){if(!p(e))return!0;if(!t)return!1;y(e)}return e[m].weakData},onFreeze:function(e){return f&&d&&p(e)&&!a(e,m)&&y(e),e}};s[m]=!0},45402:(e,t,n)=>{var r,o,s,i=n(47093),a=n(21899),l=n(10941),c=n(32029),u=n(90953),p=n(63030),h=n(44262),f=n(27748),d=\"Object already initialized\",m=a.TypeError,g=a.WeakMap;if(i||p.state){var y=p.state||(p.state=new g);y.get=y.get,y.has=y.has,y.set=y.set,r=function(e,t){if(y.has(e))throw m(d);return t.facade=e,y.set(e,t),t},o=function(e){return y.get(e)||{}},s=function(e){return y.has(e)}}else{var v=h(\"state\");f[v]=!0,r=function(e,t){if(u(e,v))throw m(d);return t.facade=e,c(e,v,t),t},o=function(e){return u(e,v)?e[v]:{}},s=function(e){return u(e,v)}}e.exports={set:r,get:o,has:s,enforce:function(e){return s(e)?o(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!l(t)||(n=o(t)).type!==e)throw m(\"Incompatible receiver, \"+e+\" required\");return n}}}},6782:(e,t,n)=>{var r=n(99813),o=n(12077),s=r(\"iterator\"),i=Array.prototype;e.exports=function(e){return void 0!==e&&(o.Array===e||i[s]===e)}},1052:(e,t,n)=>{var r=n(82532);e.exports=Array.isArray||function(e){return\"Array\"==r(e)}},57475:(e,t,n)=>{var r=n(76616),o=r.all;e.exports=r.IS_HTMLDDA?function(e){return\"function\"==typeof e||e===o}:function(e){return\"function\"==typeof e}},24284:(e,t,n)=>{var r=n(95329),o=n(95981),s=n(57475),i=n(9697),a=n(626),l=n(81302),c=function(){},u=[],p=a(\"Reflect\",\"construct\"),h=/^\\s*(?:class|function)\\b/,f=r(h.exec),d=!h.exec(c),m=function(e){if(!s(e))return!1;try{return p(c,u,e),!0}catch(e){return!1}},g=function(e){if(!s(e))return!1;switch(i(e)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return d||!!f(h,l(e))}catch(e){return!0}};g.sham=!0,e.exports=!p||o((function(){var e;return m(m.call)||!m(Object)||!m((function(){e=!0}))||e}))?g:m},37252:(e,t,n)=>{var r=n(95981),o=n(57475),s=/#|\\.prototype\\./,i=function(e,t){var n=l[a(e)];return n==u||n!=c&&(o(t)?r(t):!!t)},a=i.normalize=function(e){return String(e).replace(s,\".\").toLowerCase()},l=i.data={},c=i.NATIVE=\"N\",u=i.POLYFILL=\"P\";e.exports=i},54639:(e,t,n)=>{var r=n(10941),o=Math.floor;e.exports=Number.isInteger||function(e){return!r(e)&&isFinite(e)&&o(e)===e}},82119:e=>{e.exports=function(e){return null==e}},10941:(e,t,n)=>{var r=n(57475),o=n(76616),s=o.all;e.exports=o.IS_HTMLDDA?function(e){return\"object\"==typeof e?null!==e:r(e)||e===s}:function(e){return\"object\"==typeof e?null!==e:r(e)}},82529:e=>{e.exports=!0},60685:(e,t,n)=>{var r=n(10941),o=n(82532),s=n(99813)(\"match\");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[s])?!!t:\"RegExp\"==o(e))}},56664:(e,t,n)=>{var r=n(626),o=n(57475),s=n(7046),i=n(32302),a=Object;e.exports=i?function(e){return\"symbol\"==typeof e}:function(e){var t=r(\"Symbol\");return o(t)&&s(t.prototype,a(e))}},93091:(e,t,n)=>{var r=n(86843),o=n(78834),s=n(96059),i=n(69826),a=n(6782),l=n(10623),c=n(7046),u=n(53476),p=n(22902),h=n(7609),f=TypeError,d=function(e,t){this.stopped=e,this.result=t},m=d.prototype;e.exports=function(e,t,n){var g,y,v,b,w,E,x,S=n&&n.that,_=!(!n||!n.AS_ENTRIES),j=!(!n||!n.IS_RECORD),O=!(!n||!n.IS_ITERATOR),k=!(!n||!n.INTERRUPTED),A=r(t,S),C=function(e){return g&&h(g,\"normal\",e),new d(!0,e)},P=function(e){return _?(s(e),k?A(e[0],e[1],C):A(e[0],e[1])):k?A(e,C):A(e)};if(j)g=e.iterator;else if(O)g=e;else{if(!(y=p(e)))throw f(i(e)+\" is not iterable\");if(a(y)){for(v=0,b=l(e);b>v;v++)if((w=P(e[v]))&&c(m,w))return w;return new d(!1)}g=u(e,y)}for(E=j?e.next:g.next;!(x=o(E,g)).done;){try{w=P(x.value)}catch(e){h(g,\"throw\",e)}if(\"object\"==typeof w&&w&&c(m,w))return w}return new d(!1)}},7609:(e,t,n)=>{var r=n(78834),o=n(96059),s=n(14229);e.exports=function(e,t,n){var i,a;o(e);try{if(!(i=s(e,\"return\"))){if(\"throw\"===t)throw n;return n}i=r(i,e)}catch(e){a=!0,i=e}if(\"throw\"===t)throw n;if(a)throw i;return o(i),n}},53847:(e,t,n)=>{\"use strict\";var r=n(35143).IteratorPrototype,o=n(29290),s=n(31887),i=n(90904),a=n(12077),l=function(){return this};e.exports=function(e,t,n,c){var u=t+\" Iterator\";return e.prototype=o(r,{next:s(+!c,n)}),i(e,u,!1,!0),a[u]=l,e}},75105:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(82529),i=n(79417),a=n(57475),l=n(53847),c=n(249),u=n(88929),p=n(90904),h=n(32029),f=n(95929),d=n(99813),m=n(12077),g=n(35143),y=i.PROPER,v=i.CONFIGURABLE,b=g.IteratorPrototype,w=g.BUGGY_SAFARI_ITERATORS,E=d(\"iterator\"),x=\"keys\",S=\"values\",_=\"entries\",j=function(){return this};e.exports=function(e,t,n,i,d,g,O){l(n,t,i);var k,A,C,P=function(e){if(e===d&&M)return M;if(!w&&e in T)return T[e];switch(e){case x:case S:case _:return function(){return new n(this,e)}}return function(){return new n(this)}},N=t+\" Iterator\",I=!1,T=e.prototype,R=T[E]||T[\"@@iterator\"]||d&&T[d],M=!w&&R||P(d),D=\"Array\"==t&&T.entries||R;if(D&&(k=c(D.call(new e)))!==Object.prototype&&k.next&&(s||c(k)===b||(u?u(k,b):a(k[E])||f(k,E,j)),p(k,N,!0,!0),s&&(m[N]=j)),y&&d==S&&R&&R.name!==S&&(!s&&v?h(T,\"name\",S):(I=!0,M=function(){return o(R,this)})),d)if(A={values:P(S),keys:g?M:P(x),entries:P(_)},O)for(C in A)(w||I||!(C in T))&&f(T,C,A[C]);else r({target:t,proto:!0,forced:w||I},A);return s&&!O||T[E]===M||f(T,E,M,{name:d}),m[t]=M,A}},35143:(e,t,n)=>{\"use strict\";var r,o,s,i=n(95981),a=n(57475),l=n(10941),c=n(29290),u=n(249),p=n(95929),h=n(99813),f=n(82529),d=h(\"iterator\"),m=!1;[].keys&&(\"next\"in(s=[].keys())?(o=u(u(s)))!==Object.prototype&&(r=o):m=!0),!l(r)||i((function(){var e={};return r[d].call(e)!==e}))?r={}:f&&(r=c(r)),a(r[d])||p(r,d,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:m}},12077:e=>{e.exports={}},10623:(e,t,n)=>{var r=n(43057);e.exports=function(e){return r(e.length)}},35331:e=>{var t=Math.ceil,n=Math.floor;e.exports=Math.trunc||function(e){var r=+e;return(r>0?n:t)(r)}},66132:(e,t,n)=>{var r,o,s,i,a,l=n(21899),c=n(86843),u=n(49677).f,p=n(42941).set,h=n(18397),f=n(22749),d=n(4470),m=n(58045),g=n(6049),y=l.MutationObserver||l.WebKitMutationObserver,v=l.document,b=l.process,w=l.Promise,E=u(l,\"queueMicrotask\"),x=E&&E.value;if(!x){var S=new h,_=function(){var e,t;for(g&&(e=b.domain)&&e.exit();t=S.get();)try{t()}catch(e){throw S.head&&r(),e}e&&e.enter()};f||g||m||!y||!v?!d&&w&&w.resolve?((i=w.resolve(void 0)).constructor=w,a=c(i.then,i),r=function(){a(_)}):g?r=function(){b.nextTick(_)}:(p=c(p,l),r=function(){p(_)}):(o=!0,s=v.createTextNode(\"\"),new y(_).observe(s,{characterData:!0}),r=function(){s.data=o=!o}),x=function(e){S.head||r(),S.add(e)}}e.exports=x},69520:(e,t,n)=>{\"use strict\";var r=n(24883),o=TypeError,s=function(e){var t,n;this.promise=new e((function(e,r){if(void 0!==t||void 0!==n)throw o(\"Bad Promise constructor\");t=e,n=r})),this.resolve=r(t),this.reject=r(n)};e.exports.f=function(e){return new s(e)}},14649:(e,t,n)=>{var r=n(85803);e.exports=function(e,t){return void 0===e?arguments.length<2?\"\":t:r(e)}},70344:(e,t,n)=>{var r=n(60685),o=TypeError;e.exports=function(e){if(r(e))throw o(\"The method doesn't accept regular expressions\");return e}},24420:(e,t,n)=>{\"use strict\";var r=n(55746),o=n(95329),s=n(78834),i=n(95981),a=n(14771),l=n(87857),c=n(36760),u=n(89678),p=n(37026),h=Object.assign,f=Object.defineProperty,d=o([].concat);e.exports=!h||i((function(){if(r&&1!==h({b:1},h(f({},\"a\",{enumerable:!0,get:function(){f(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),o=\"abcdefghijklmnopqrst\";return e[n]=7,o.split(\"\").forEach((function(e){t[e]=e})),7!=h({},e)[n]||a(h({},t)).join(\"\")!=o}))?function(e,t){for(var n=u(e),o=arguments.length,i=1,h=l.f,f=c.f;o>i;)for(var m,g=p(arguments[i++]),y=h?d(a(g),h(g)):a(g),v=y.length,b=0;v>b;)m=y[b++],r&&!s(f,g,m)||(n[m]=g[m]);return n}:h},29290:(e,t,n)=>{var r,o=n(96059),s=n(59938),i=n(56759),a=n(27748),l=n(15463),c=n(61333),u=n(44262),p=\"prototype\",h=\"script\",f=u(\"IE_PROTO\"),d=function(){},m=function(e){return\"<\"+h+\">\"+e+\"</\"+h+\">\"},g=function(e){e.write(m(\"\")),e.close();var t=e.parentWindow.Object;return e=null,t},y=function(){try{r=new ActiveXObject(\"htmlfile\")}catch(e){}var e,t,n;y=\"undefined\"!=typeof document?document.domain&&r?g(r):(t=c(\"iframe\"),n=\"java\"+h+\":\",t.style.display=\"none\",l.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(m(\"document.F=Object\")),e.close(),e.F):g(r);for(var o=i.length;o--;)delete y[p][i[o]];return y()};a[f]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(d[p]=o(e),n=new d,d[p]=null,n[f]=e):n=y(),void 0===t?n:s.f(n,t)}},59938:(e,t,n)=>{var r=n(55746),o=n(83937),s=n(65988),i=n(96059),a=n(74529),l=n(14771);t.f=r&&!o?Object.defineProperties:function(e,t){i(e);for(var n,r=a(t),o=l(t),c=o.length,u=0;c>u;)s.f(e,n=o[u++],r[n]);return e}},65988:(e,t,n)=>{var r=n(55746),o=n(2840),s=n(83937),i=n(96059),a=n(83894),l=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,p=\"enumerable\",h=\"configurable\",f=\"writable\";t.f=r?s?function(e,t,n){if(i(e),t=a(t),i(n),\"function\"==typeof e&&\"prototype\"===t&&\"value\"in n&&f in n&&!n[f]){var r=u(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:h in n?n[h]:r[h],enumerable:p in n?n[p]:r[p],writable:!1})}return c(e,t,n)}:c:function(e,t,n){if(i(e),t=a(t),i(n),o)try{return c(e,t,n)}catch(e){}if(\"get\"in n||\"set\"in n)throw l(\"Accessors not supported\");return\"value\"in n&&(e[t]=n.value),e}},49677:(e,t,n)=>{var r=n(55746),o=n(78834),s=n(36760),i=n(31887),a=n(74529),l=n(83894),c=n(90953),u=n(2840),p=Object.getOwnPropertyDescriptor;t.f=r?p:function(e,t){if(e=a(e),t=l(t),u)try{return p(e,t)}catch(e){}if(c(e,t))return i(!o(s.f,e,t),e[t])}},684:(e,t,n)=>{var r=n(82532),o=n(74529),s=n(10946).f,i=n(15790),a=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return a&&\"Window\"==r(e)?function(e){try{return s(e)}catch(e){return i(a)}}(e):s(o(e))}},10946:(e,t,n)=>{var r=n(55629),o=n(56759).concat(\"length\",\"prototype\");t.f=Object.getOwnPropertyNames||function(e){return r(e,o)}},87857:(e,t)=>{t.f=Object.getOwnPropertySymbols},249:(e,t,n)=>{var r=n(90953),o=n(57475),s=n(89678),i=n(44262),a=n(64160),l=i(\"IE_PROTO\"),c=Object,u=c.prototype;e.exports=a?c.getPrototypeOf:function(e){var t=s(e);if(r(t,l))return t[l];var n=t.constructor;return o(n)&&t instanceof n?n.prototype:t instanceof c?u:null}},91584:(e,t,n)=>{var r=n(95981),o=n(10941),s=n(82532),i=n(97135),a=Object.isExtensible,l=r((function(){a(1)}));e.exports=l||i?function(e){return!!o(e)&&((!i||\"ArrayBuffer\"!=s(e))&&(!a||a(e)))}:a},7046:(e,t,n)=>{var r=n(95329);e.exports=r({}.isPrototypeOf)},55629:(e,t,n)=>{var r=n(95329),o=n(90953),s=n(74529),i=n(31692).indexOf,a=n(27748),l=r([].push);e.exports=function(e,t){var n,r=s(e),c=0,u=[];for(n in r)!o(a,n)&&o(r,n)&&l(u,n);for(;t.length>c;)o(r,n=t[c++])&&(~i(u,n)||l(u,n));return u}},14771:(e,t,n)=>{var r=n(55629),o=n(56759);e.exports=Object.keys||function(e){return r(e,o)}},36760:(e,t)=>{\"use strict\";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,o=r&&!n.call({1:2},1);t.f=o?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},88929:(e,t,n)=>{var r=n(45526),o=n(96059),s=n(11851);e.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var e,t=!1,n={};try{(e=r(Object.prototype,\"__proto__\",\"set\"))(n,[]),t=n instanceof Array}catch(e){}return function(n,r){return o(n),s(r),t?e(n,r):n.__proto__=r,n}}():void 0)},88810:(e,t,n)=>{var r=n(55746),o=n(95981),s=n(95329),i=n(249),a=n(14771),l=n(74529),c=s(n(36760).f),u=s([].push),p=r&&o((function(){var e=Object.create(null);return e[2]=2,!c(e,2)})),h=function(e){return function(t){for(var n,o=l(t),s=a(o),h=p&&null===i(o),f=s.length,d=0,m=[];f>d;)n=s[d++],r&&!(h?n in o:c(o,n))||u(m,e?[n,o[n]]:o[n]);return m}};e.exports={entries:h(!0),values:h(!1)}},95623:(e,t,n)=>{\"use strict\";var r=n(22885),o=n(9697);e.exports=r?{}.toString:function(){return\"[object \"+o(this)+\"]\"}},39811:(e,t,n)=>{var r=n(78834),o=n(57475),s=n(10941),i=TypeError;e.exports=function(e,t){var n,a;if(\"string\"===t&&o(n=e.toString)&&!s(a=r(n,e)))return a;if(o(n=e.valueOf)&&!s(a=r(n,e)))return a;if(\"string\"!==t&&o(n=e.toString)&&!s(a=r(n,e)))return a;throw i(\"Can't convert object to primitive value\")}},31136:(e,t,n)=>{var r=n(626),o=n(95329),s=n(10946),i=n(87857),a=n(96059),l=o([].concat);e.exports=r(\"Reflect\",\"ownKeys\")||function(e){var t=s.f(a(e)),n=i.f;return n?l(t,n(e)):t}},54058:e=>{e.exports={}},40002:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},67742:(e,t,n)=>{var r=n(21899),o=n(6991),s=n(57475),i=n(37252),a=n(81302),l=n(99813),c=n(23321),u=n(48501),p=n(82529),h=n(53385),f=o&&o.prototype,d=l(\"species\"),m=!1,g=s(r.PromiseRejectionEvent),y=i(\"Promise\",(function(){var e=a(o),t=e!==String(o);if(!t&&66===h)return!0;if(p&&(!f.catch||!f.finally))return!0;if(!h||h<51||!/native code/.test(e)){var n=new o((function(e){e(1)})),r=function(e){e((function(){}),(function(){}))};if((n.constructor={})[d]=r,!(m=n.then((function(){}))instanceof r))return!0}return!t&&(c||u)&&!g}));e.exports={CONSTRUCTOR:y,REJECTION_EVENT:g,SUBCLASSING:m}},6991:(e,t,n)=>{var r=n(21899);e.exports=r.Promise},56584:(e,t,n)=>{var r=n(96059),o=n(10941),s=n(69520);e.exports=function(e,t){if(r(e),o(t)&&t.constructor===e)return t;var n=s.f(e);return(0,n.resolve)(t),n.promise}},31542:(e,t,n)=>{var r=n(6991),o=n(21385),s=n(67742).CONSTRUCTOR;e.exports=s||!o((function(e){r.all(e).then(void 0,(function(){}))}))},18397:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},48219:(e,t,n)=>{var r=n(82119),o=TypeError;e.exports=function(e){if(r(e))throw o(\"Can't call method on \"+e);return e}},37620:(e,t,n)=>{\"use strict\";var r,o=n(21899),s=n(79730),i=n(57475),a=n(56491),l=n(2861),c=n(93765),u=n(18348),p=o.Function,h=/MSIE .\\./.test(l)||a&&((r=o.Bun.version.split(\".\")).length<3||0==r[0]&&(r[1]<3||3==r[1]&&0==r[2]));e.exports=function(e,t){var n=t?2:1;return h?function(r,o){var a=u(arguments.length,1)>n,l=i(r)?r:p(r),h=a?c(arguments,n):[],f=a?function(){s(l,this,h)}:l;return t?e(f,o):e(f)}:e}},94431:(e,t,n)=>{\"use strict\";var r=n(626),o=n(29202),s=n(99813),i=n(55746),a=s(\"species\");e.exports=function(e){var t=r(e);i&&t&&!t[a]&&o(t,a,{configurable:!0,get:function(){return this}})}},90904:(e,t,n)=>{var r=n(22885),o=n(65988).f,s=n(32029),i=n(90953),a=n(95623),l=n(99813)(\"toStringTag\");e.exports=function(e,t,n,c){if(e){var u=n?e:e.prototype;i(u,l)||o(u,l,{configurable:!0,value:t}),c&&!r&&s(u,\"toString\",a)}}},44262:(e,t,n)=>{var r=n(68726),o=n(99418),s=r(\"keys\");e.exports=function(e){return s[e]||(s[e]=o(e))}},63030:(e,t,n)=>{var r=n(21899),o=n(75609),s=\"__core-js_shared__\",i=r[s]||o(s,{});e.exports=i},68726:(e,t,n)=>{var r=n(82529),o=n(63030);(e.exports=function(e,t){return o[e]||(o[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.31.0\",mode:r?\"pure\":\"global\",copyright:\"© 2014-2023 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.31.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},70487:(e,t,n)=>{var r=n(96059),o=n(174),s=n(82119),i=n(99813)(\"species\");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||s(n=r(a)[i])?t:o(n)}},64620:(e,t,n)=>{var r=n(95329),o=n(62435),s=n(85803),i=n(48219),a=r(\"\".charAt),l=r(\"\".charCodeAt),c=r(\"\".slice),u=function(e){return function(t,n){var r,u,p=s(i(t)),h=o(n),f=p.length;return h<0||h>=f?e?\"\":void 0:(r=l(p,h))<55296||r>56319||h+1===f||(u=l(p,h+1))<56320||u>57343?e?a(p,h):r:e?c(p,h,h+2):u-56320+(r-55296<<10)+65536}};e.exports={codeAt:u(!1),charAt:u(!0)}},73291:(e,t,n)=>{var r=n(95329),o=2147483647,s=/[^\\0-\\u007E]/,i=/[.\\u3002\\uFF0E\\uFF61]/g,a=\"Overflow: input needs wider integers to process\",l=RangeError,c=r(i.exec),u=Math.floor,p=String.fromCharCode,h=r(\"\".charCodeAt),f=r([].join),d=r([].push),m=r(\"\".replace),g=r(\"\".split),y=r(\"\".toLowerCase),v=function(e){return e+22+75*(e<26)},b=function(e,t,n){var r=0;for(e=n?u(e/700):e>>1,e+=u(e/t);e>455;)e=u(e/35),r+=36;return u(r+36*e/(e+38))},w=function(e){var t=[];e=function(e){for(var t=[],n=0,r=e.length;n<r;){var o=h(e,n++);if(o>=55296&&o<=56319&&n<r){var s=h(e,n++);56320==(64512&s)?d(t,((1023&o)<<10)+(1023&s)+65536):(d(t,o),n--)}else d(t,o)}return t}(e);var n,r,s=e.length,i=128,c=0,m=72;for(n=0;n<e.length;n++)(r=e[n])<128&&d(t,p(r));var g=t.length,y=g;for(g&&d(t,\"-\");y<s;){var w=o;for(n=0;n<e.length;n++)(r=e[n])>=i&&r<w&&(w=r);var E=y+1;if(w-i>u((o-c)/E))throw l(a);for(c+=(w-i)*E,i=w,n=0;n<e.length;n++){if((r=e[n])<i&&++c>o)throw l(a);if(r==i){for(var x=c,S=36;;){var _=S<=m?1:S>=m+26?26:S-m;if(x<_)break;var j=x-_,O=36-_;d(t,p(v(_+j%O))),x=u(j/O),S+=36}d(t,p(v(x))),m=b(c,E,y==g),c=0,y++}}c++,i++}return f(t,\"\")};e.exports=function(e){var t,n,r=[],o=g(m(y(e),i,\".\"),\".\");for(t=0;t<o.length;t++)n=o[t],d(r,c(s,n)?\"xn--\"+w(n):n);return f(r,\".\")}},16178:(e,t,n)=>{\"use strict\";var r=n(62435),o=n(85803),s=n(48219),i=RangeError;e.exports=function(e){var t=o(s(this)),n=\"\",a=r(e);if(a<0||a==1/0)throw i(\"Wrong number of repetitions\");for(;a>0;(a>>>=1)&&(t+=t))1&a&&(n+=t);return n}},93093:(e,t,n)=>{var r=n(79417).PROPER,o=n(95981),s=n(73483);e.exports=function(e){return o((function(){return!!s[e]()||\"​᠎\"!==\"​᠎\"[e]()||r&&s[e].name!==e}))}},74853:(e,t,n)=>{var r=n(95329),o=n(48219),s=n(85803),i=n(73483),a=r(\"\".replace),l=RegExp(\"^[\"+i+\"]+\"),c=RegExp(\"(^|[^\"+i+\"])[\"+i+\"]+$\"),u=function(e){return function(t){var n=s(o(t));return 1&e&&(n=a(n,l,\"\")),2&e&&(n=a(n,c,\"$1\")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},63405:(e,t,n)=>{var r=n(53385),o=n(95981),s=n(21899).String;e.exports=!!Object.getOwnPropertySymbols&&!o((function(){var e=Symbol();return!s(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&r&&r<41}))},29630:(e,t,n)=>{var r=n(78834),o=n(626),s=n(99813),i=n(95929);e.exports=function(){var e=o(\"Symbol\"),t=e&&e.prototype,n=t&&t.valueOf,a=s(\"toPrimitive\");t&&!t[a]&&i(t,a,(function(e){return r(n,this)}),{arity:1})}},32087:(e,t,n)=>{var r=n(626),o=n(95329),s=r(\"Symbol\"),i=s.keyFor,a=o(s.prototype.valueOf);e.exports=s.isRegisteredSymbol||function(e){try{return void 0!==i(a(e))}catch(e){return!1}}},96559:(e,t,n)=>{for(var r=n(68726),o=n(626),s=n(95329),i=n(56664),a=n(99813),l=o(\"Symbol\"),c=l.isWellKnownSymbol,u=o(\"Object\",\"getOwnPropertyNames\"),p=s(l.prototype.valueOf),h=r(\"wks\"),f=0,d=u(l),m=d.length;f<m;f++)try{var g=d[f];i(l[g])&&a(g)}catch(e){}e.exports=function(e){if(c&&c(e))return!0;try{for(var t=p(e),n=0,r=u(h),o=r.length;n<o;n++)if(h[r[n]]==t)return!0}catch(e){}return!1}},34680:(e,t,n)=>{var r=n(63405);e.exports=r&&!!Symbol.for&&!!Symbol.keyFor},42941:(e,t,n)=>{var r,o,s,i,a=n(21899),l=n(79730),c=n(86843),u=n(57475),p=n(90953),h=n(95981),f=n(15463),d=n(93765),m=n(61333),g=n(18348),y=n(22749),v=n(6049),b=a.setImmediate,w=a.clearImmediate,E=a.process,x=a.Dispatch,S=a.Function,_=a.MessageChannel,j=a.String,O=0,k={},A=\"onreadystatechange\";h((function(){r=a.location}));var C=function(e){if(p(k,e)){var t=k[e];delete k[e],t()}},P=function(e){return function(){C(e)}},N=function(e){C(e.data)},I=function(e){a.postMessage(j(e),r.protocol+\"//\"+r.host)};b&&w||(b=function(e){g(arguments.length,1);var t=u(e)?e:S(e),n=d(arguments,1);return k[++O]=function(){l(t,void 0,n)},o(O),O},w=function(e){delete k[e]},v?o=function(e){E.nextTick(P(e))}:x&&x.now?o=function(e){x.now(P(e))}:_&&!y?(i=(s=new _).port2,s.port1.onmessage=N,o=c(i.postMessage,i)):a.addEventListener&&u(a.postMessage)&&!a.importScripts&&r&&\"file:\"!==r.protocol&&!h(I)?(o=I,a.addEventListener(\"message\",N,!1)):o=A in m(\"script\")?function(e){f.appendChild(m(\"script\"))[A]=function(){f.removeChild(this),C(e)}}:function(e){setTimeout(P(e),0)}),e.exports={set:b,clear:w}},59413:(e,t,n)=>{var r=n(62435),o=Math.max,s=Math.min;e.exports=function(e,t){var n=r(e);return n<0?o(n+t,0):s(n,t)}},74529:(e,t,n)=>{var r=n(37026),o=n(48219);e.exports=function(e){return r(o(e))}},62435:(e,t,n)=>{var r=n(35331);e.exports=function(e){var t=+e;return t!=t||0===t?0:r(t)}},43057:(e,t,n)=>{var r=n(62435),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},89678:(e,t,n)=>{var r=n(48219),o=Object;e.exports=function(e){return o(r(e))}},46935:(e,t,n)=>{var r=n(78834),o=n(10941),s=n(56664),i=n(14229),a=n(39811),l=n(99813),c=TypeError,u=l(\"toPrimitive\");e.exports=function(e,t){if(!o(e)||s(e))return e;var n,l=i(e,u);if(l){if(void 0===t&&(t=\"default\"),n=r(l,e,t),!o(n)||s(n))return n;throw c(\"Can't convert object to primitive value\")}return void 0===t&&(t=\"number\"),a(e,t)}},83894:(e,t,n)=>{var r=n(46935),o=n(56664);e.exports=function(e){var t=r(e,\"string\");return o(t)?t:t+\"\"}},22885:(e,t,n)=>{var r={};r[n(99813)(\"toStringTag\")]=\"z\",e.exports=\"[object z]\"===String(r)},85803:(e,t,n)=>{var r=n(9697),o=String;e.exports=function(e){if(\"Symbol\"===r(e))throw TypeError(\"Cannot convert a Symbol value to a string\");return o(e)}},69826:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return\"Object\"}}},99418:(e,t,n)=>{var r=n(95329),o=0,s=Math.random(),i=r(1..toString);e.exports=function(e){return\"Symbol(\"+(void 0===e?\"\":e)+\")_\"+i(++o+s,36)}},14766:(e,t,n)=>{var r=n(95981),o=n(99813),s=n(55746),i=n(82529),a=o(\"iterator\");e.exports=!r((function(){var e=new URL(\"b?a=1&b=2&c=3\",\"http://a\"),t=e.searchParams,n=new URLSearchParams(\"a=1&a=2\"),r=\"\";return e.pathname=\"c%20d\",t.forEach((function(e,n){t.delete(\"b\"),r+=n+e})),n.delete(\"a\",2),i&&(!e.toJSON||!n.has(\"a\",1)||n.has(\"a\",2))||!t.size&&(i||!s)||!t.sort||\"http://a/c%20d?a=1&c=3\"!==e.href||\"3\"!==t.get(\"c\")||\"a=1\"!==String(new URLSearchParams(\"?a=1\"))||!t[a]||\"a\"!==new URL(\"https://a@b\").username||\"b\"!==new URLSearchParams(new URLSearchParams(\"a=b\")).get(\"a\")||\"xn--e1aybc\"!==new URL(\"http://тест\").host||\"#%D0%B1\"!==new URL(\"http://a#б\").hash||\"a1c3\"!==r||\"x\"!==new URL(\"http://x\",void 0).host}))},32302:(e,t,n)=>{var r=n(63405);e.exports=r&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},83937:(e,t,n)=>{var r=n(55746),o=n(95981);e.exports=r&&o((function(){return 42!=Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},18348:e=>{var t=TypeError;e.exports=function(e,n){if(e<n)throw t(\"Not enough arguments\");return e}},47093:(e,t,n)=>{var r=n(21899),o=n(57475),s=r.WeakMap;e.exports=o(s)&&/native code/.test(String(s))},73464:(e,t,n)=>{var r=n(54058),o=n(90953),s=n(11477),i=n(65988).f;e.exports=function(e){var t=r.Symbol||(r.Symbol={});o(t,e)||i(t,e,{value:s.f(e)})}},11477:(e,t,n)=>{var r=n(99813);t.f=r},99813:(e,t,n)=>{var r=n(21899),o=n(68726),s=n(90953),i=n(99418),a=n(63405),l=n(32302),c=r.Symbol,u=o(\"wks\"),p=l?c.for||c:c&&c.withoutSetter||i;e.exports=function(e){return s(u,e)||(u[e]=a&&s(c,e)?c[e]:p(\"Symbol.\"+e)),u[e]}},73483:e=>{e.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},49812:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(7046),s=n(249),i=n(88929),a=n(23489),l=n(29290),c=n(32029),u=n(31887),p=n(53794),h=n(79585),f=n(93091),d=n(14649),m=n(99813)(\"toStringTag\"),g=Error,y=[].push,v=function(e,t){var n,r=o(b,this);i?n=i(g(),r?s(this):b):(n=r?this:l(b),c(n,m,\"Error\")),void 0!==t&&c(n,\"message\",d(t)),h(n,v,n.stack,1),arguments.length>2&&p(n,arguments[2]);var a=[];return f(e,y,{that:a}),c(n,\"errors\",a),n};i?i(v,g):a(v,g,{name:!0});var b=v.prototype=l(g.prototype,{constructor:u(1,v),message:u(1,\"\"),name:u(1,\"AggregateError\")});r({global:!0,constructor:!0,arity:2},{AggregateError:v})},47627:(e,t,n)=>{n(49812)},85906:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(95981),s=n(1052),i=n(10941),a=n(89678),l=n(10623),c=n(66796),u=n(55449),p=n(64692),h=n(50568),f=n(99813),d=n(53385),m=f(\"isConcatSpreadable\"),g=d>=51||!o((function(){var e=[];return e[m]=!1,e.concat()[0]!==e})),y=function(e){if(!i(e))return!1;var t=e[m];return void 0!==t?!!t:s(e)};r({target:\"Array\",proto:!0,arity:1,forced:!g||!h(\"concat\")},{concat:function(e){var t,n,r,o,s,i=a(this),h=p(i,0),f=0;for(t=-1,r=arguments.length;t<r;t++)if(y(s=-1===t?i:arguments[t]))for(o=l(s),c(f+o),n=0;n<o;n++,f++)n in s&&u(h,f,s[n]);else c(f+1),u(h,f++,s);return h.length=f,h}})},48851:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).every;r({target:\"Array\",proto:!0,forced:!n(34194)(\"every\")},{every:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},80290:(e,t,n)=>{var r=n(76887),o=n(91860),s=n(18479);r({target:\"Array\",proto:!0},{fill:o}),s(\"fill\")},21501:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).filter;r({target:\"Array\",proto:!0,forced:!n(50568)(\"filter\")},{filter:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},44929:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).findIndex,s=n(18479),i=\"findIndex\",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r({target:\"Array\",proto:!0,forced:a},{findIndex:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(i)},80833:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).find,s=n(18479),i=\"find\",a=!0;i in[]&&Array(1)[i]((function(){a=!1})),r({target:\"Array\",proto:!0,forced:a},{find:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),s(i)},2437:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(56837);r({target:\"Array\",proto:!0,forced:[].forEach!=o},{forEach:o})},53242:(e,t,n)=>{var r=n(76887),o=n(11354);r({target:\"Array\",stat:!0,forced:!n(21385)((function(e){Array.from(e)}))},{from:o})},97690:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(31692).includes,s=n(95981),i=n(18479);r({target:\"Array\",proto:!0,forced:s((function(){return!Array(1).includes()}))},{includes:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}}),i(\"includes\")},99076:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(97484),s=n(31692).indexOf,i=n(34194),a=o([].indexOf),l=!!a&&1/a([1],1,-0)<0;r({target:\"Array\",proto:!0,forced:l||!i(\"indexOf\")},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return l?a(this,e,t)||0:s(this,e,t)}})},92737:(e,t,n)=>{n(76887)({target:\"Array\",stat:!0},{isArray:n(1052)})},66274:(e,t,n)=>{\"use strict\";var r=n(74529),o=n(18479),s=n(12077),i=n(45402),a=n(65988).f,l=n(75105),c=n(23538),u=n(82529),p=n(55746),h=\"Array Iterator\",f=i.set,d=i.getterFor(h);e.exports=l(Array,\"Array\",(function(e,t){f(this,{type:h,target:r(e),index:0,kind:t})}),(function(){var e=d(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,c(void 0,!0)):c(\"keys\"==n?r:\"values\"==n?t[r]:[r,t[r]],!1)}),\"values\");var m=s.Arguments=s.Array;if(o(\"keys\"),o(\"values\"),o(\"entries\"),!u&&p&&\"values\"!==m.name)try{a(m,\"name\",{value:\"values\"})}catch(e){}},75915:(e,t,n)=>{var r=n(76887),o=n(67145);r({target:\"Array\",proto:!0,forced:o!==[].lastIndexOf},{lastIndexOf:o})},68787:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).map;r({target:\"Array\",proto:!0,forced:!n(50568)(\"map\")},{map:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},48528:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(89678),s=n(10623),i=n(89779),a=n(66796);r({target:\"Array\",proto:!0,arity:1,forced:n(95981)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],\"length\",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=o(this),n=s(t),r=arguments.length;a(n+r);for(var l=0;l<r;l++)t[n]=arguments[l],n++;return i(t,n),n}})},81876:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(46499).left,s=n(34194),i=n(53385);r({target:\"Array\",proto:!0,forced:!n(6049)&&i>79&&i<83||!s(\"reduce\")},{reduce:function(e){var t=arguments.length;return o(this,e,t,t>1?arguments[1]:void 0)}})},60186:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(1052),s=n(24284),i=n(10941),a=n(59413),l=n(10623),c=n(74529),u=n(55449),p=n(99813),h=n(50568),f=n(93765),d=h(\"slice\"),m=p(\"species\"),g=Array,y=Math.max;r({target:\"Array\",proto:!0,forced:!d},{slice:function(e,t){var n,r,p,h=c(this),d=l(h),v=a(e,d),b=a(void 0===t?d:t,d);if(o(h)&&(n=h.constructor,(s(n)&&(n===g||o(n.prototype))||i(n)&&null===(n=n[m]))&&(n=void 0),n===g||void 0===n))return f(h,v,b);for(r=new(void 0===n?g:n)(y(b-v,0)),p=0;v<b;v++,p++)v in h&&u(r,p,h[v]);return r.length=p,r}})},36026:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(3610).some;r({target:\"Array\",proto:!0,forced:!n(34194)(\"some\")},{some:function(e){return o(this,e,arguments.length>1?arguments[1]:void 0)}})},4115:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(95329),s=n(24883),i=n(89678),a=n(10623),l=n(15863),c=n(85803),u=n(95981),p=n(61388),h=n(34194),f=n(34342),d=n(81046),m=n(53385),g=n(18938),y=[],v=o(y.sort),b=o(y.push),w=u((function(){y.sort(void 0)})),E=u((function(){y.sort(null)})),x=h(\"sort\"),S=!u((function(){if(m)return m<70;if(!(f&&f>3)){if(d)return!0;if(g)return g<603;var e,t,n,r,o=\"\";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:n=3;break;case 68:case 71:n=4;break;default:n=2}for(r=0;r<47;r++)y.push({k:t+r,v:n})}for(y.sort((function(e,t){return t.v-e.v})),r=0;r<y.length;r++)t=y[r].k.charAt(0),o.charAt(o.length-1)!==t&&(o+=t);return\"DGBEFHACIJK\"!==o}}));r({target:\"Array\",proto:!0,forced:w||!E||!x||!S},{sort:function(e){void 0!==e&&s(e);var t=i(this);if(S)return void 0===e?v(t):v(t,e);var n,r,o=[],u=a(t);for(r=0;r<u;r++)r in t&&b(o,t[r]);for(p(o,function(e){return function(t,n){return void 0===n?-1:void 0===t?1:void 0!==e?+e(t,n)||0:c(t)>c(n)?1:-1}}(e)),n=a(o),r=0;r<n;)t[r]=o[r++];for(;r<u;)l(t,r++);return t}})},98611:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(89678),s=n(59413),i=n(62435),a=n(10623),l=n(89779),c=n(66796),u=n(64692),p=n(55449),h=n(15863),f=n(50568)(\"splice\"),d=Math.max,m=Math.min;r({target:\"Array\",proto:!0,forced:!f},{splice:function(e,t){var n,r,f,g,y,v,b=o(this),w=a(b),E=s(e,w),x=arguments.length;for(0===x?n=r=0:1===x?(n=0,r=w-E):(n=x-2,r=m(d(i(t),0),w-E)),c(w+n-r),f=u(b,r),g=0;g<r;g++)(y=E+g)in b&&p(f,g,b[y]);if(f.length=r,n<r){for(g=E;g<w-r;g++)v=g+n,(y=g+r)in b?b[v]=b[y]:h(b,v);for(g=w;g>w-r+n;g--)h(b,g-1)}else if(n>r)for(g=w-r;g>E;g--)v=g+n-1,(y=g+r-1)in b?b[v]=b[y]:h(b,v);for(g=0;g<n;g++)b[g+E]=arguments[g+2];return l(b,w-r+n),f}})},95160:(e,t,n)=>{var r=n(76887),o=n(95329),s=Date,i=o(s.prototype.getTime);r({target:\"Date\",stat:!0},{now:function(){return i(new s)}})},18084:()=>{},73381:(e,t,n)=>{var r=n(76887),o=n(98308);r({target:\"Function\",proto:!0,forced:Function.bind!==o},{bind:o})},32619:(e,t,n)=>{var r=n(76887),o=n(626),s=n(79730),i=n(78834),a=n(95329),l=n(95981),c=n(57475),u=n(56664),p=n(93765),h=n(33323),f=n(63405),d=String,m=o(\"JSON\",\"stringify\"),g=a(/./.exec),y=a(\"\".charAt),v=a(\"\".charCodeAt),b=a(\"\".replace),w=a(1..toString),E=/[\\uD800-\\uDFFF]/g,x=/^[\\uD800-\\uDBFF]$/,S=/^[\\uDC00-\\uDFFF]$/,_=!f||l((function(){var e=o(\"Symbol\")();return\"[null]\"!=m([e])||\"{}\"!=m({a:e})||\"{}\"!=m(Object(e))})),j=l((function(){return'\"\\\\udf06\\\\ud834\"'!==m(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==m(\"\\udead\")})),O=function(e,t){var n=p(arguments),r=h(t);if(c(r)||void 0!==e&&!u(e))return n[1]=function(e,t){if(c(r)&&(t=i(r,this,d(e),t)),!u(t))return t},s(m,null,n)},k=function(e,t,n){var r=y(n,t-1),o=y(n,t+1);return g(x,e)&&!g(S,o)||g(S,e)&&!g(x,r)?\"\\\\u\"+w(v(e,0),16):e};m&&r({target:\"JSON\",stat:!0,arity:3,forced:_||j},{stringify:function(e,t,n){var r=p(arguments),o=s(_?O:m,null,r);return j&&\"string\"==typeof o?b(o,E,k):o}})},69120:(e,t,n)=>{var r=n(21899);n(90904)(r.JSON,\"JSON\",!0)},23112:(e,t,n)=>{\"use strict\";n(24683)(\"Map\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(85616))},37501:(e,t,n)=>{n(23112)},79413:()=>{},54973:(e,t,n)=>{n(76887)({target:\"Number\",stat:!0,nonConfigurable:!0,nonWritable:!0},{EPSILON:Math.pow(2,-52)})},30800:(e,t,n)=>{n(76887)({target:\"Number\",stat:!0},{isInteger:n(54639)})},49221:(e,t,n)=>{var r=n(76887),o=n(24420);r({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==o},{assign:o})},74979:(e,t,n)=>{var r=n(76887),o=n(55746),s=n(59938).f;r({target:\"Object\",stat:!0,forced:Object.defineProperties!==s,sham:!o},{defineProperties:s})},86450:(e,t,n)=>{var r=n(76887),o=n(55746),s=n(65988).f;r({target:\"Object\",stat:!0,forced:Object.defineProperty!==s,sham:!o},{defineProperty:s})},94366:(e,t,n)=>{var r=n(76887),o=n(88810).entries;r({target:\"Object\",stat:!0},{entries:function(e){return o(e)}})},28387:(e,t,n)=>{var r=n(76887),o=n(93091),s=n(55449);r({target:\"Object\",stat:!0},{fromEntries:function(e){var t={};return o(e,(function(e,n){s(t,e,n)}),{AS_ENTRIES:!0}),t}})},46924:(e,t,n)=>{var r=n(76887),o=n(95981),s=n(74529),i=n(49677).f,a=n(55746);r({target:\"Object\",stat:!0,forced:!a||o((function(){i(1)})),sham:!a},{getOwnPropertyDescriptor:function(e,t){return i(s(e),t)}})},88482:(e,t,n)=>{var r=n(76887),o=n(55746),s=n(31136),i=n(74529),a=n(49677),l=n(55449);r({target:\"Object\",stat:!0,sham:!o},{getOwnPropertyDescriptors:function(e){for(var t,n,r=i(e),o=a.f,c=s(r),u={},p=0;c.length>p;)void 0!==(n=o(r,t=c[p++]))&&l(u,t,n);return u}})},37144:(e,t,n)=>{var r=n(76887),o=n(63405),s=n(95981),i=n(87857),a=n(89678);r({target:\"Object\",stat:!0,forced:!o||s((function(){i.f(1)}))},{getOwnPropertySymbols:function(e){var t=i.f;return t?t(a(e)):[]}})},21724:(e,t,n)=>{var r=n(76887),o=n(89678),s=n(14771);r({target:\"Object\",stat:!0,forced:n(95981)((function(){s(1)}))},{keys:function(e){return s(o(e))}})},55967:()=>{},26614:(e,t,n)=>{var r=n(76887),o=n(88810).values;r({target:\"Object\",stat:!0},{values:function(e){return o(e)}})},4560:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(69520),a=n(40002),l=n(93091);r({target:\"Promise\",stat:!0,forced:n(31542)},{allSettled:function(e){var t=this,n=i.f(t),r=n.resolve,c=n.reject,u=a((function(){var n=s(t.resolve),i=[],a=0,c=1;l(e,(function(e){var s=a++,l=!1;c++,o(n,t,e).then((function(e){l||(l=!0,i[s]={status:\"fulfilled\",value:e},--c||r(i))}),(function(e){l||(l=!0,i[s]={status:\"rejected\",reason:e},--c||r(i))}))})),--c||r(i)}));return u.error&&c(u.value),n.promise}})},16890:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(69520),a=n(40002),l=n(93091);r({target:\"Promise\",stat:!0,forced:n(31542)},{all:function(e){var t=this,n=i.f(t),r=n.resolve,c=n.reject,u=a((function(){var n=s(t.resolve),i=[],a=0,u=1;l(e,(function(e){var s=a++,l=!1;u++,o(n,t,e).then((function(e){l||(l=!0,i[s]=e,--u||r(i))}),c)})),--u||r(i)}));return u.error&&c(u.value),n.promise}})},91302:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(626),a=n(69520),l=n(40002),c=n(93091),u=n(31542),p=\"No one promise resolved\";r({target:\"Promise\",stat:!0,forced:u},{any:function(e){var t=this,n=i(\"AggregateError\"),r=a.f(t),u=r.resolve,h=r.reject,f=l((function(){var r=s(t.resolve),i=[],a=0,l=1,f=!1;c(e,(function(e){var s=a++,c=!1;l++,o(r,t,e).then((function(e){c||f||(f=!0,u(e))}),(function(e){c||f||(c=!0,i[s]=e,--l||h(new n(i,p)))}))})),--l||h(new n(i,p))}));return f.error&&h(f.value),r.promise}})},83376:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(82529),s=n(67742).CONSTRUCTOR,i=n(6991),a=n(626),l=n(57475),c=n(95929),u=i&&i.prototype;if(r({target:\"Promise\",proto:!0,forced:s,real:!0},{catch:function(e){return this.then(void 0,e)}}),!o&&l(i)){var p=a(\"Promise\").prototype.catch;u.catch!==p&&c(u,\"catch\",p,{unsafe:!0})}},26934:(e,t,n)=>{\"use strict\";var r,o,s,i=n(76887),a=n(82529),l=n(6049),c=n(21899),u=n(78834),p=n(95929),h=n(88929),f=n(90904),d=n(94431),m=n(24883),g=n(57475),y=n(10941),v=n(5743),b=n(70487),w=n(42941).set,E=n(66132),x=n(34845),S=n(40002),_=n(18397),j=n(45402),O=n(6991),k=n(67742),A=n(69520),C=\"Promise\",P=k.CONSTRUCTOR,N=k.REJECTION_EVENT,I=k.SUBCLASSING,T=j.getterFor(C),R=j.set,M=O&&O.prototype,D=O,F=M,L=c.TypeError,B=c.document,$=c.process,q=A.f,U=q,z=!!(B&&B.createEvent&&c.dispatchEvent),V=\"unhandledrejection\",W=function(e){var t;return!(!y(e)||!g(t=e.then))&&t},J=function(e,t){var n,r,o,s=t.value,i=1==t.state,a=i?e.ok:e.fail,l=e.resolve,c=e.reject,p=e.domain;try{a?(i||(2===t.rejection&&Y(t),t.rejection=1),!0===a?n=s:(p&&p.enter(),n=a(s),p&&(p.exit(),o=!0)),n===e.promise?c(L(\"Promise-chain cycle\")):(r=W(n))?u(r,n,l,c):l(n)):c(s)}catch(e){p&&!o&&p.exit(),c(e)}},K=function(e,t){e.notified||(e.notified=!0,E((function(){for(var n,r=e.reactions;n=r.get();)J(n,e);e.notified=!1,t&&!e.rejection&&G(e)})))},H=function(e,t,n){var r,o;z?((r=B.createEvent(\"Event\")).promise=t,r.reason=n,r.initEvent(e,!1,!0),c.dispatchEvent(r)):r={promise:t,reason:n},!N&&(o=c[\"on\"+e])?o(r):e===V&&x(\"Unhandled promise rejection\",n)},G=function(e){u(w,c,(function(){var t,n=e.facade,r=e.value;if(Z(e)&&(t=S((function(){l?$.emit(\"unhandledRejection\",r,n):H(V,n,r)})),e.rejection=l||Z(e)?2:1,t.error))throw t.value}))},Z=function(e){return 1!==e.rejection&&!e.parent},Y=function(e){u(w,c,(function(){var t=e.facade;l?$.emit(\"rejectionHandled\",t):H(\"rejectionhandled\",t,e.value)}))},X=function(e,t,n){return function(r){e(t,r,n)}},Q=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=2,K(e,!0))},ee=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw L(\"Promise can't be resolved itself\");var r=W(t);r?E((function(){var n={done:!1};try{u(r,t,X(ee,n,e),X(Q,n,e))}catch(t){Q(n,t,e)}})):(e.value=t,e.state=1,K(e,!1))}catch(t){Q({done:!1},t,e)}}};if(P&&(F=(D=function(e){v(this,F),m(e),u(r,this);var t=T(this);try{e(X(ee,t),X(Q,t))}catch(e){Q(t,e)}}).prototype,(r=function(e){R(this,{type:C,done:!1,notified:!1,parent:!1,reactions:new _,rejection:!1,state:0,value:void 0})}).prototype=p(F,\"then\",(function(e,t){var n=T(this),r=q(b(this,D));return n.parent=!0,r.ok=!g(e)||e,r.fail=g(t)&&t,r.domain=l?$.domain:void 0,0==n.state?n.reactions.add(r):E((function(){J(r,n)})),r.promise})),o=function(){var e=new r,t=T(e);this.promise=e,this.resolve=X(ee,t),this.reject=X(Q,t)},A.f=q=function(e){return e===D||undefined===e?new o(e):U(e)},!a&&g(O)&&M!==Object.prototype)){s=M.then,I||p(M,\"then\",(function(e,t){var n=this;return new D((function(e,t){u(s,n,e,t)})).then(e,t)}),{unsafe:!0});try{delete M.constructor}catch(e){}h&&h(M,F)}i({global:!0,constructor:!0,wrap:!0,forced:P},{Promise:D}),f(D,C,!1,!0),d(C)},44349:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(82529),s=n(6991),i=n(95981),a=n(626),l=n(57475),c=n(70487),u=n(56584),p=n(95929),h=s&&s.prototype;if(r({target:\"Promise\",proto:!0,real:!0,forced:!!s&&i((function(){h.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=c(this,a(\"Promise\")),n=l(e);return this.then(n?function(n){return u(t,e()).then((function(){return n}))}:e,n?function(n){return u(t,e()).then((function(){throw n}))}:e)}}),!o&&l(s)){var f=a(\"Promise\").prototype.finally;h.finally!==f&&p(h,\"finally\",f,{unsafe:!0})}},98881:(e,t,n)=>{n(26934),n(16890),n(83376),n(55921),n(64069),n(14482)},55921:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(24883),i=n(69520),a=n(40002),l=n(93091);r({target:\"Promise\",stat:!0,forced:n(31542)},{race:function(e){var t=this,n=i.f(t),r=n.reject,c=a((function(){var i=s(t.resolve);l(e,(function(e){o(i,t,e).then(n.resolve,r)}))}));return c.error&&r(c.value),n.promise}})},64069:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(78834),s=n(69520);r({target:\"Promise\",stat:!0,forced:n(67742).CONSTRUCTOR},{reject:function(e){var t=s.f(this);return o(t.reject,void 0,e),t.promise}})},14482:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(626),s=n(82529),i=n(6991),a=n(67742).CONSTRUCTOR,l=n(56584),c=o(\"Promise\"),u=s&&!a;r({target:\"Promise\",stat:!0,forced:s||a},{resolve:function(e){return l(u&&this===c?i:this,e)}})},1502:()=>{},82266:(e,t,n)=>{\"use strict\";n(24683)(\"Set\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(85616))},69008:(e,t,n)=>{n(82266)},11035:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(95329),s=n(70344),i=n(48219),a=n(85803),l=n(67772),c=o(\"\".indexOf);r({target:\"String\",proto:!0,forced:!l(\"includes\")},{includes:function(e){return!!~c(a(i(this)),a(s(e)),arguments.length>1?arguments[1]:void 0)}})},77971:(e,t,n)=>{\"use strict\";var r=n(64620).charAt,o=n(85803),s=n(45402),i=n(75105),a=n(23538),l=\"String Iterator\",c=s.set,u=s.getterFor(l);i(String,\"String\",(function(e){c(this,{type:l,string:o(e),index:0})}),(function(){var e,t=u(this),n=t.string,o=t.index;return o>=n.length?a(void 0,!0):(e=r(n,o),t.index+=e.length,a(e,!1))}))},74679:(e,t,n)=>{var r=n(76887),o=n(95329),s=n(74529),i=n(89678),a=n(85803),l=n(10623),c=o([].push),u=o([].join);r({target:\"String\",stat:!0},{raw:function(e){var t=s(i(e).raw),n=l(t);if(!n)return\"\";for(var r=arguments.length,o=[],p=0;;){if(c(o,a(t[p++])),p===n)return u(o,\"\");p<r&&c(o,a(arguments[p]))}}})},60986:(e,t,n)=>{n(76887)({target:\"String\",proto:!0},{repeat:n(16178)})},94761:(e,t,n)=>{\"use strict\";var r,o=n(76887),s=n(97484),i=n(49677).f,a=n(43057),l=n(85803),c=n(70344),u=n(48219),p=n(67772),h=n(82529),f=s(\"\".startsWith),d=s(\"\".slice),m=Math.min,g=p(\"startsWith\");o({target:\"String\",proto:!0,forced:!!(h||g||(r=i(String.prototype,\"startsWith\"),!r||r.writable))&&!g},{startsWith:function(e){var t=l(u(this));c(e);var n=a(m(arguments.length>1?arguments[1]:void 0,t.length)),r=l(e);return f?f(t,r,n):d(t,n,n+r.length)===r}})},57398:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(74853).trim;r({target:\"String\",proto:!0,forced:n(93093)(\"trim\")},{trim:function(){return o(this)}})},8555:(e,t,n)=>{n(73464)(\"asyncIterator\")},48616:(e,t,n)=>{\"use strict\";var r=n(76887),o=n(21899),s=n(78834),i=n(95329),a=n(82529),l=n(55746),c=n(63405),u=n(95981),p=n(90953),h=n(7046),f=n(96059),d=n(74529),m=n(83894),g=n(85803),y=n(31887),v=n(29290),b=n(14771),w=n(10946),E=n(684),x=n(87857),S=n(49677),_=n(65988),j=n(59938),O=n(36760),k=n(95929),A=n(29202),C=n(68726),P=n(44262),N=n(27748),I=n(99418),T=n(99813),R=n(11477),M=n(73464),D=n(29630),F=n(90904),L=n(45402),B=n(3610).forEach,$=P(\"hidden\"),q=\"Symbol\",U=\"prototype\",z=L.set,V=L.getterFor(q),W=Object[U],J=o.Symbol,K=J&&J[U],H=o.TypeError,G=o.QObject,Z=S.f,Y=_.f,X=E.f,Q=O.f,ee=i([].push),te=C(\"symbols\"),ne=C(\"op-symbols\"),re=C(\"wks\"),oe=!G||!G[U]||!G[U].findChild,se=l&&u((function(){return 7!=v(Y({},\"a\",{get:function(){return Y(this,\"a\",{value:7}).a}})).a}))?function(e,t,n){var r=Z(W,t);r&&delete W[t],Y(e,t,n),r&&e!==W&&Y(W,t,r)}:Y,ie=function(e,t){var n=te[e]=v(K);return z(n,{type:q,tag:e,description:t}),l||(n.description=t),n},ae=function(e,t,n){e===W&&ae(ne,t,n),f(e);var r=m(t);return f(n),p(te,r)?(n.enumerable?(p(e,$)&&e[$][r]&&(e[$][r]=!1),n=v(n,{enumerable:y(0,!1)})):(p(e,$)||Y(e,$,y(1,{})),e[$][r]=!0),se(e,r,n)):Y(e,r,n)},le=function(e,t){f(e);var n=d(t),r=b(n).concat(he(n));return B(r,(function(t){l&&!s(ce,n,t)||ae(e,t,n[t])})),e},ce=function(e){var t=m(e),n=s(Q,this,t);return!(this===W&&p(te,t)&&!p(ne,t))&&(!(n||!p(this,t)||!p(te,t)||p(this,$)&&this[$][t])||n)},ue=function(e,t){var n=d(e),r=m(t);if(n!==W||!p(te,r)||p(ne,r)){var o=Z(n,r);return!o||!p(te,r)||p(n,$)&&n[$][r]||(o.enumerable=!0),o}},pe=function(e){var t=X(d(e)),n=[];return B(t,(function(e){p(te,e)||p(N,e)||ee(n,e)})),n},he=function(e){var t=e===W,n=X(t?ne:d(e)),r=[];return B(n,(function(e){!p(te,e)||t&&!p(W,e)||ee(r,te[e])})),r};c||(k(K=(J=function(){if(h(K,this))throw H(\"Symbol is not a constructor\");var e=arguments.length&&void 0!==arguments[0]?g(arguments[0]):void 0,t=I(e),n=function(e){this===W&&s(n,ne,e),p(this,$)&&p(this[$],t)&&(this[$][t]=!1),se(this,t,y(1,e))};return l&&oe&&se(W,t,{configurable:!0,set:n}),ie(t,e)})[U],\"toString\",(function(){return V(this).tag})),k(J,\"withoutSetter\",(function(e){return ie(I(e),e)})),O.f=ce,_.f=ae,j.f=le,S.f=ue,w.f=E.f=pe,x.f=he,R.f=function(e){return ie(T(e),e)},l&&(A(K,\"description\",{configurable:!0,get:function(){return V(this).description}}),a||k(W,\"propertyIsEnumerable\",ce,{unsafe:!0}))),r({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:J}),B(b(re),(function(e){M(e)})),r({target:q,stat:!0,forced:!c},{useSetter:function(){oe=!0},useSimple:function(){oe=!1}}),r({target:\"Object\",stat:!0,forced:!c,sham:!l},{create:function(e,t){return void 0===t?v(e):le(v(e),t)},defineProperty:ae,defineProperties:le,getOwnPropertyDescriptor:ue}),r({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:pe}),D(),F(J,q),N[$]=!0},52615:()=>{},64523:(e,t,n)=>{var r=n(76887),o=n(626),s=n(90953),i=n(85803),a=n(68726),l=n(34680),c=a(\"string-to-symbol-registry\"),u=a(\"symbol-to-string-registry\");r({target:\"Symbol\",stat:!0,forced:!l},{for:function(e){var t=i(e);if(s(c,t))return c[t];var n=o(\"Symbol\")(t);return c[t]=n,u[n]=t,n}})},21732:(e,t,n)=>{n(73464)(\"hasInstance\")},35903:(e,t,n)=>{n(73464)(\"isConcatSpreadable\")},1825:(e,t,n)=>{n(73464)(\"iterator\")},35824:(e,t,n)=>{n(48616),n(64523),n(38608),n(32619),n(37144)},38608:(e,t,n)=>{var r=n(76887),o=n(90953),s=n(56664),i=n(69826),a=n(68726),l=n(34680),c=a(\"symbol-to-string-registry\");r({target:\"Symbol\",stat:!0,forced:!l},{keyFor:function(e){if(!s(e))throw TypeError(i(e)+\" is not a symbol\");if(o(c,e))return c[e]}})},45915:(e,t,n)=>{n(73464)(\"matchAll\")},28394:(e,t,n)=>{n(73464)(\"match\")},61766:(e,t,n)=>{n(73464)(\"replace\")},62737:(e,t,n)=>{n(73464)(\"search\")},89911:(e,t,n)=>{n(73464)(\"species\")},74315:(e,t,n)=>{n(73464)(\"split\")},63131:(e,t,n)=>{var r=n(73464),o=n(29630);r(\"toPrimitive\"),o()},64714:(e,t,n)=>{var r=n(626),o=n(73464),s=n(90904);o(\"toStringTag\"),s(r(\"Symbol\"),\"Symbol\")},70659:(e,t,n)=>{n(73464)(\"unscopables\")},94776:(e,t,n)=>{\"use strict\";var r,o=n(45602),s=n(21899),i=n(95329),a=n(94380),l=n(21647),c=n(24683),u=n(8850),p=n(10941),h=n(45402).enforce,f=n(95981),d=n(47093),m=Object,g=Array.isArray,y=m.isExtensible,v=m.isFrozen,b=m.isSealed,w=m.freeze,E=m.seal,x={},S={},_=!s.ActiveXObject&&\"ActiveXObject\"in s,j=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},O=c(\"WeakMap\",j,u),k=O.prototype,A=i(k.set);if(d)if(_){r=u.getConstructor(j,\"WeakMap\",!0),l.enable();var C=i(k.delete),P=i(k.has),N=i(k.get);a(k,{delete:function(e){if(p(e)&&!y(e)){var t=h(this);return t.frozen||(t.frozen=new r),C(this,e)||t.frozen.delete(e)}return C(this,e)},has:function(e){if(p(e)&&!y(e)){var t=h(this);return t.frozen||(t.frozen=new r),P(this,e)||t.frozen.has(e)}return P(this,e)},get:function(e){if(p(e)&&!y(e)){var t=h(this);return t.frozen||(t.frozen=new r),P(this,e)?N(this,e):t.frozen.get(e)}return N(this,e)},set:function(e,t){if(p(e)&&!y(e)){var n=h(this);n.frozen||(n.frozen=new r),P(this,e)?A(this,e,t):n.frozen.set(e,t)}else A(this,e,t);return this}})}else o&&f((function(){var e=w([]);return A(new O,e,1),!v(e)}))&&a(k,{set:function(e,t){var n;return g(e)&&(v(e)?n=x:b(e)&&(n=S)),A(this,e,t),n==x&&w(e),n==S&&E(e),this}})},54334:(e,t,n)=>{n(94776)},31115:(e,t,n)=>{\"use strict\";n(24683)(\"WeakSet\",(function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}}),n(8850))},1773:(e,t,n)=>{n(31115)},97522:(e,t,n)=>{var r=n(99813),o=n(65988).f,s=r(\"metadata\"),i=Function.prototype;void 0===i[s]&&o(i,s,{value:null})},28783:(e,t,n)=>{n(73464)(\"asyncDispose\")},43975:(e,t,n)=>{n(73464)(\"dispose\")},97618:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0},{isRegisteredSymbol:n(32087)})},22731:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0,name:\"isRegisteredSymbol\"},{isRegistered:n(32087)})},6989:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0,forced:!0},{isWellKnownSymbol:n(96559)})},85605:(e,t,n)=>{n(76887)({target:\"Symbol\",stat:!0,name:\"isWellKnownSymbol\",forced:!0},{isWellKnown:n(96559)})},65799:(e,t,n)=>{n(73464)(\"matcher\")},31943:(e,t,n)=>{n(73464)(\"metadataKey\")},45414:(e,t,n)=>{n(73464)(\"metadata\")},46774:(e,t,n)=>{n(73464)(\"observable\")},80620:(e,t,n)=>{n(73464)(\"patternMatch\")},36172:(e,t,n)=>{n(73464)(\"replaceAll\")},7634:(e,t,n)=>{n(66274);var r=n(63281),o=n(21899),s=n(9697),i=n(32029),a=n(12077),l=n(99813)(\"toStringTag\");for(var c in r){var u=o[c],p=u&&u.prototype;p&&s(p)!==l&&i(p,l,c),a[c]=a.Array}},79229:(e,t,n)=>{var r=n(76887),o=n(21899),s=n(37620)(o.setInterval,!0);r({global:!0,bind:!0,forced:o.setInterval!==s},{setInterval:s})},17749:(e,t,n)=>{var r=n(76887),o=n(21899),s=n(37620)(o.setTimeout,!0);r({global:!0,bind:!0,forced:o.setTimeout!==s},{setTimeout:s})},71249:(e,t,n)=>{n(79229),n(17749)},62524:(e,t,n)=>{\"use strict\";n(66274);var r=n(76887),o=n(21899),s=n(78834),i=n(95329),a=n(55746),l=n(14766),c=n(95929),u=n(29202),p=n(94380),h=n(90904),f=n(53847),d=n(45402),m=n(5743),g=n(57475),y=n(90953),v=n(86843),b=n(9697),w=n(96059),E=n(10941),x=n(85803),S=n(29290),_=n(31887),j=n(53476),O=n(22902),k=n(18348),A=n(99813),C=n(61388),P=A(\"iterator\"),N=\"URLSearchParams\",I=N+\"Iterator\",T=d.set,R=d.getterFor(N),M=d.getterFor(I),D=Object.getOwnPropertyDescriptor,F=function(e){if(!a)return o[e];var t=D(o,e);return t&&t.value},L=F(\"fetch\"),B=F(\"Request\"),$=F(\"Headers\"),q=B&&B.prototype,U=$&&$.prototype,z=o.RegExp,V=o.TypeError,W=o.decodeURIComponent,J=o.encodeURIComponent,K=i(\"\".charAt),H=i([].join),G=i([].push),Z=i(\"\".replace),Y=i([].shift),X=i([].splice),Q=i(\"\".split),ee=i(\"\".slice),te=/\\+/g,ne=Array(4),re=function(e){return ne[e-1]||(ne[e-1]=z(\"((?:%[\\\\da-f]{2}){\"+e+\"})\",\"gi\"))},oe=function(e){try{return W(e)}catch(t){return e}},se=function(e){var t=Z(e,te,\" \"),n=4;try{return W(t)}catch(e){for(;n;)t=Z(t,re(n--),oe);return t}},ie=/[!'()~]|%20/g,ae={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\"},le=function(e){return ae[e]},ce=function(e){return Z(J(e),ie,le)},ue=f((function(e,t){T(this,{type:I,iterator:j(R(e).entries),kind:t})}),\"Iterator\",(function(){var e=M(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value=\"keys\"===t?r.key:\"values\"===t?r.value:[r.key,r.value]),n}),!0),pe=function(e){this.entries=[],this.url=null,void 0!==e&&(E(e)?this.parseObject(e):this.parseQuery(\"string\"==typeof e?\"?\"===K(e,0)?ee(e,1):e:x(e)))};pe.prototype={type:N,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,n,r,o,i,a,l,c=O(e);if(c)for(n=(t=j(e,c)).next;!(r=s(n,t)).done;){if(i=(o=j(w(r.value))).next,(a=s(i,o)).done||(l=s(i,o)).done||!s(i,o).done)throw V(\"Expected sequence with length 2\");G(this.entries,{key:x(a.value),value:x(l.value)})}else for(var u in e)y(e,u)&&G(this.entries,{key:u,value:x(e[u])})},parseQuery:function(e){if(e)for(var t,n,r=Q(e,\"&\"),o=0;o<r.length;)(t=r[o++]).length&&(n=Q(t,\"=\"),G(this.entries,{key:se(Y(n)),value:se(H(n,\"=\"))}))},serialize:function(){for(var e,t=this.entries,n=[],r=0;r<t.length;)e=t[r++],G(n,ce(e.key)+\"=\"+ce(e.value));return H(n,\"&\")},update:function(){this.entries.length=0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var he=function(){m(this,fe);var e=T(this,new pe(arguments.length>0?arguments[0]:void 0));a||(this.size=e.entries.length)},fe=he.prototype;if(p(fe,{append:function(e,t){var n=R(this);k(arguments.length,2),G(n.entries,{key:x(e),value:x(t)}),a||this.length++,n.updateURL()},delete:function(e){for(var t=R(this),n=k(arguments.length,1),r=t.entries,o=x(e),s=n<2?void 0:arguments[1],i=void 0===s?s:x(s),l=0;l<r.length;){var c=r[l];if(c.key!==o||void 0!==i&&c.value!==i)l++;else if(X(r,l,1),void 0!==i)break}a||(this.size=r.length),t.updateURL()},get:function(e){var t=R(this).entries;k(arguments.length,1);for(var n=x(e),r=0;r<t.length;r++)if(t[r].key===n)return t[r].value;return null},getAll:function(e){var t=R(this).entries;k(arguments.length,1);for(var n=x(e),r=[],o=0;o<t.length;o++)t[o].key===n&&G(r,t[o].value);return r},has:function(e){for(var t=R(this).entries,n=k(arguments.length,1),r=x(e),o=n<2?void 0:arguments[1],s=void 0===o?o:x(o),i=0;i<t.length;){var a=t[i++];if(a.key===r&&(void 0===s||a.value===s))return!0}return!1},set:function(e,t){var n=R(this);k(arguments.length,1);for(var r,o=n.entries,s=!1,i=x(e),l=x(t),c=0;c<o.length;c++)(r=o[c]).key===i&&(s?X(o,c--,1):(s=!0,r.value=l));s||G(o,{key:i,value:l}),a||(this.size=o.length),n.updateURL()},sort:function(){var e=R(this);C(e.entries,(function(e,t){return e.key>t.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,n=R(this).entries,r=v(e,arguments.length>1?arguments[1]:void 0),o=0;o<n.length;)r((t=n[o++]).value,t.key,this)},keys:function(){return new ue(this,\"keys\")},values:function(){return new ue(this,\"values\")},entries:function(){return new ue(this,\"entries\")}},{enumerable:!0}),c(fe,P,fe.entries,{name:\"entries\"}),c(fe,\"toString\",(function(){return R(this).serialize()}),{enumerable:!0}),a&&u(fe,\"size\",{get:function(){return R(this).entries.length},configurable:!0,enumerable:!0}),h(he,N),r({global:!0,constructor:!0,forced:!l},{URLSearchParams:he}),!l&&g($)){var de=i(U.has),me=i(U.set),ge=function(e){if(E(e)){var t,n=e.body;if(b(n)===N)return t=e.headers?new $(e.headers):new $,de(t,\"content-type\")||me(t,\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"),S(e,{body:_(0,x(n)),headers:_(0,t)})}return e};if(g(L)&&r({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(e){return L(e,arguments.length>1?ge(arguments[1]):{})}}),g(B)){var ye=function(e){return m(this,q),new B(e,arguments.length>1?ge(arguments[1]):{})};q.constructor=ye,ye.prototype=q,r({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:ye})}}e.exports={URLSearchParams:he,getState:R}},16454:()=>{},73305:()=>{},95304:(e,t,n)=>{n(62524)},62337:()=>{},84630:(e,t,n)=>{var r=n(76887),o=n(626),s=n(95981),i=n(18348),a=n(85803),l=n(14766),c=o(\"URL\");r({target:\"URL\",stat:!0,forced:!(l&&s((function(){c.canParse()})))},{canParse:function(e){var t=i(arguments.length,1),n=a(e),r=t<2||void 0===arguments[1]?void 0:a(arguments[1]);try{return!!new c(n,r)}catch(e){return!1}}})},47250:(e,t,n)=>{\"use strict\";n(77971);var r,o=n(76887),s=n(55746),i=n(14766),a=n(21899),l=n(86843),c=n(95329),u=n(95929),p=n(29202),h=n(5743),f=n(90953),d=n(24420),m=n(11354),g=n(15790),y=n(64620).codeAt,v=n(73291),b=n(85803),w=n(90904),E=n(18348),x=n(62524),S=n(45402),_=S.set,j=S.getterFor(\"URL\"),O=x.URLSearchParams,k=x.getState,A=a.URL,C=a.TypeError,P=a.parseInt,N=Math.floor,I=Math.pow,T=c(\"\".charAt),R=c(/./.exec),M=c([].join),D=c(1..toString),F=c([].pop),L=c([].push),B=c(\"\".replace),$=c([].shift),q=c(\"\".split),U=c(\"\".slice),z=c(\"\".toLowerCase),V=c([].unshift),W=\"Invalid scheme\",J=\"Invalid host\",K=\"Invalid port\",H=/[a-z]/i,G=/[\\d+-.a-z]/i,Z=/\\d/,Y=/^0x/i,X=/^[0-7]+$/,Q=/^\\d+$/,ee=/^[\\da-f]+$/i,te=/[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/,ne=/[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/,re=/^[\\u0000-\\u0020]+/,oe=/(^|[^\\u0000-\\u0020])[\\u0000-\\u0020]+$/,se=/[\\t\\n\\r]/g,ie=function(e){var t,n,r,o;if(\"number\"==typeof e){for(t=[],n=0;n<4;n++)V(t,e%256),e=N(e/256);return M(t,\".\")}if(\"object\"==typeof e){for(t=\"\",r=function(e){for(var t=null,n=1,r=null,o=0,s=0;s<8;s++)0!==e[s]?(o>n&&(t=r,n=o),r=null,o=0):(null===r&&(r=s),++o);return o>n&&(t=r,n=o),t}(e),n=0;n<8;n++)o&&0===e[n]||(o&&(o=!1),r===n?(t+=n?\":\":\"::\",o=!0):(t+=D(e[n],16),n<7&&(t+=\":\")));return\"[\"+t+\"]\"}return e},ae={},le=d({},ae,{\" \":1,'\"':1,\"<\":1,\">\":1,\"`\":1}),ce=d({},le,{\"#\":1,\"?\":1,\"{\":1,\"}\":1}),ue=d({},ce,{\"/\":1,\":\":1,\";\":1,\"=\":1,\"@\":1,\"[\":1,\"\\\\\":1,\"]\":1,\"^\":1,\"|\":1}),pe=function(e,t){var n=y(e,0);return n>32&&n<127&&!f(t,e)?e:encodeURIComponent(e)},he={ftp:21,file:null,http:80,https:443,ws:80,wss:443},fe=function(e,t){var n;return 2==e.length&&R(H,T(e,0))&&(\":\"==(n=T(e,1))||!t&&\"|\"==n)},de=function(e){var t;return e.length>1&&fe(U(e,0,2))&&(2==e.length||\"/\"===(t=T(e,2))||\"\\\\\"===t||\"?\"===t||\"#\"===t)},me=function(e){return\".\"===e||\"%2e\"===z(e)},ge={},ye={},ve={},be={},we={},Ee={},xe={},Se={},_e={},je={},Oe={},ke={},Ae={},Ce={},Pe={},Ne={},Ie={},Te={},Re={},Me={},De={},Fe=function(e,t,n){var r,o,s,i=b(e);if(t){if(o=this.parse(i))throw C(o);this.searchParams=null}else{if(void 0!==n&&(r=new Fe(n,!0)),o=this.parse(i,null,r))throw C(o);(s=k(new O)).bindURL(this),this.searchParams=s}};Fe.prototype={type:\"URL\",parse:function(e,t,n){var o,s,i,a,l,c=this,u=t||ge,p=0,h=\"\",d=!1,y=!1,v=!1;for(e=b(e),t||(c.scheme=\"\",c.username=\"\",c.password=\"\",c.host=null,c.port=null,c.path=[],c.query=null,c.fragment=null,c.cannotBeABaseURL=!1,e=B(e,re,\"\"),e=B(e,oe,\"$1\")),e=B(e,se,\"\"),o=m(e);p<=o.length;){switch(s=o[p],u){case ge:if(!s||!R(H,s)){if(t)return W;u=ve;continue}h+=z(s),u=ye;break;case ye:if(s&&(R(G,s)||\"+\"==s||\"-\"==s||\".\"==s))h+=z(s);else{if(\":\"!=s){if(t)return W;h=\"\",u=ve,p=0;continue}if(t&&(c.isSpecial()!=f(he,h)||\"file\"==h&&(c.includesCredentials()||null!==c.port)||\"file\"==c.scheme&&!c.host))return;if(c.scheme=h,t)return void(c.isSpecial()&&he[c.scheme]==c.port&&(c.port=null));h=\"\",\"file\"==c.scheme?u=Ce:c.isSpecial()&&n&&n.scheme==c.scheme?u=be:c.isSpecial()?u=Se:\"/\"==o[p+1]?(u=we,p++):(c.cannotBeABaseURL=!0,L(c.path,\"\"),u=Re)}break;case ve:if(!n||n.cannotBeABaseURL&&\"#\"!=s)return W;if(n.cannotBeABaseURL&&\"#\"==s){c.scheme=n.scheme,c.path=g(n.path),c.query=n.query,c.fragment=\"\",c.cannotBeABaseURL=!0,u=De;break}u=\"file\"==n.scheme?Ce:Ee;continue;case be:if(\"/\"!=s||\"/\"!=o[p+1]){u=Ee;continue}u=_e,p++;break;case we:if(\"/\"==s){u=je;break}u=Te;continue;case Ee:if(c.scheme=n.scheme,s==r)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.query=n.query;else if(\"/\"==s||\"\\\\\"==s&&c.isSpecial())u=xe;else if(\"?\"==s)c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.query=\"\",u=Me;else{if(\"#\"!=s){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.path.length--,u=Te;continue}c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,c.path=g(n.path),c.query=n.query,c.fragment=\"\",u=De}break;case xe:if(!c.isSpecial()||\"/\"!=s&&\"\\\\\"!=s){if(\"/\"!=s){c.username=n.username,c.password=n.password,c.host=n.host,c.port=n.port,u=Te;continue}u=je}else u=_e;break;case Se:if(u=_e,\"/\"!=s||\"/\"!=T(h,p+1))continue;p++;break;case _e:if(\"/\"!=s&&\"\\\\\"!=s){u=je;continue}break;case je:if(\"@\"==s){d&&(h=\"%40\"+h),d=!0,i=m(h);for(var w=0;w<i.length;w++){var E=i[w];if(\":\"!=E||v){var x=pe(E,ue);v?c.password+=x:c.username+=x}else v=!0}h=\"\"}else if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&c.isSpecial()){if(d&&\"\"==h)return\"Invalid authority\";p-=m(h).length+1,h=\"\",u=Oe}else h+=s;break;case Oe:case ke:if(t&&\"file\"==c.scheme){u=Ne;continue}if(\":\"!=s||y){if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&c.isSpecial()){if(c.isSpecial()&&\"\"==h)return J;if(t&&\"\"==h&&(c.includesCredentials()||null!==c.port))return;if(a=c.parseHost(h))return a;if(h=\"\",u=Ie,t)return;continue}\"[\"==s?y=!0:\"]\"==s&&(y=!1),h+=s}else{if(\"\"==h)return J;if(a=c.parseHost(h))return a;if(h=\"\",u=Ae,t==ke)return}break;case Ae:if(!R(Z,s)){if(s==r||\"/\"==s||\"?\"==s||\"#\"==s||\"\\\\\"==s&&c.isSpecial()||t){if(\"\"!=h){var S=P(h,10);if(S>65535)return K;c.port=c.isSpecial()&&S===he[c.scheme]?null:S,h=\"\"}if(t)return;u=Ie;continue}return K}h+=s;break;case Ce:if(c.scheme=\"file\",\"/\"==s||\"\\\\\"==s)u=Pe;else{if(!n||\"file\"!=n.scheme){u=Te;continue}if(s==r)c.host=n.host,c.path=g(n.path),c.query=n.query;else if(\"?\"==s)c.host=n.host,c.path=g(n.path),c.query=\"\",u=Me;else{if(\"#\"!=s){de(M(g(o,p),\"\"))||(c.host=n.host,c.path=g(n.path),c.shortenPath()),u=Te;continue}c.host=n.host,c.path=g(n.path),c.query=n.query,c.fragment=\"\",u=De}}break;case Pe:if(\"/\"==s||\"\\\\\"==s){u=Ne;break}n&&\"file\"==n.scheme&&!de(M(g(o,p),\"\"))&&(fe(n.path[0],!0)?L(c.path,n.path[0]):c.host=n.host),u=Te;continue;case Ne:if(s==r||\"/\"==s||\"\\\\\"==s||\"?\"==s||\"#\"==s){if(!t&&fe(h))u=Te;else if(\"\"==h){if(c.host=\"\",t)return;u=Ie}else{if(a=c.parseHost(h))return a;if(\"localhost\"==c.host&&(c.host=\"\"),t)return;h=\"\",u=Ie}continue}h+=s;break;case Ie:if(c.isSpecial()){if(u=Te,\"/\"!=s&&\"\\\\\"!=s)continue}else if(t||\"?\"!=s)if(t||\"#\"!=s){if(s!=r&&(u=Te,\"/\"!=s))continue}else c.fragment=\"\",u=De;else c.query=\"\",u=Me;break;case Te:if(s==r||\"/\"==s||\"\\\\\"==s&&c.isSpecial()||!t&&(\"?\"==s||\"#\"==s)){if(\"..\"===(l=z(l=h))||\"%2e.\"===l||\".%2e\"===l||\"%2e%2e\"===l?(c.shortenPath(),\"/\"==s||\"\\\\\"==s&&c.isSpecial()||L(c.path,\"\")):me(h)?\"/\"==s||\"\\\\\"==s&&c.isSpecial()||L(c.path,\"\"):(\"file\"==c.scheme&&!c.path.length&&fe(h)&&(c.host&&(c.host=\"\"),h=T(h,0)+\":\"),L(c.path,h)),h=\"\",\"file\"==c.scheme&&(s==r||\"?\"==s||\"#\"==s))for(;c.path.length>1&&\"\"===c.path[0];)$(c.path);\"?\"==s?(c.query=\"\",u=Me):\"#\"==s&&(c.fragment=\"\",u=De)}else h+=pe(s,ce);break;case Re:\"?\"==s?(c.query=\"\",u=Me):\"#\"==s?(c.fragment=\"\",u=De):s!=r&&(c.path[0]+=pe(s,ae));break;case Me:t||\"#\"!=s?s!=r&&(\"'\"==s&&c.isSpecial()?c.query+=\"%27\":c.query+=\"#\"==s?\"%23\":pe(s,ae)):(c.fragment=\"\",u=De);break;case De:s!=r&&(c.fragment+=pe(s,le))}p++}},parseHost:function(e){var t,n,r;if(\"[\"==T(e,0)){if(\"]\"!=T(e,e.length-1))return J;if(t=function(e){var t,n,r,o,s,i,a,l=[0,0,0,0,0,0,0,0],c=0,u=null,p=0,h=function(){return T(e,p)};if(\":\"==h()){if(\":\"!=T(e,1))return;p+=2,u=++c}for(;h();){if(8==c)return;if(\":\"!=h()){for(t=n=0;n<4&&R(ee,h());)t=16*t+P(h(),16),p++,n++;if(\".\"==h()){if(0==n)return;if(p-=n,c>6)return;for(r=0;h();){if(o=null,r>0){if(!(\".\"==h()&&r<4))return;p++}if(!R(Z,h()))return;for(;R(Z,h());){if(s=P(h(),10),null===o)o=s;else{if(0==o)return;o=10*o+s}if(o>255)return;p++}l[c]=256*l[c]+o,2!=++r&&4!=r||c++}if(4!=r)return;break}if(\":\"==h()){if(p++,!h())return}else if(h())return;l[c++]=t}else{if(null!==u)return;p++,u=++c}}if(null!==u)for(i=c-u,c=7;0!=c&&i>0;)a=l[c],l[c--]=l[u+i-1],l[u+--i]=a;else if(8!=c)return;return l}(U(e,1,-1)),!t)return J;this.host=t}else if(this.isSpecial()){if(e=v(e),R(te,e))return J;if(t=function(e){var t,n,r,o,s,i,a,l=q(e,\".\");if(l.length&&\"\"==l[l.length-1]&&l.length--,(t=l.length)>4)return e;for(n=[],r=0;r<t;r++){if(\"\"==(o=l[r]))return e;if(s=10,o.length>1&&\"0\"==T(o,0)&&(s=R(Y,o)?16:8,o=U(o,8==s?1:2)),\"\"===o)i=0;else{if(!R(10==s?Q:8==s?X:ee,o))return e;i=P(o,s)}L(n,i)}for(r=0;r<t;r++)if(i=n[r],r==t-1){if(i>=I(256,5-t))return null}else if(i>255)return null;for(a=F(n),r=0;r<n.length;r++)a+=n[r]*I(256,3-r);return a}(e),null===t)return J;this.host=t}else{if(R(ne,e))return J;for(t=\"\",n=m(e),r=0;r<n.length;r++)t+=pe(n[r],ae);this.host=t}},cannotHaveUsernamePasswordPort:function(){return!this.host||this.cannotBeABaseURL||\"file\"==this.scheme},includesCredentials:function(){return\"\"!=this.username||\"\"!=this.password},isSpecial:function(){return f(he,this.scheme)},shortenPath:function(){var e=this.path,t=e.length;!t||\"file\"==this.scheme&&1==t&&fe(e[0],!0)||e.length--},serialize:function(){var e=this,t=e.scheme,n=e.username,r=e.password,o=e.host,s=e.port,i=e.path,a=e.query,l=e.fragment,c=t+\":\";return null!==o?(c+=\"//\",e.includesCredentials()&&(c+=n+(r?\":\"+r:\"\")+\"@\"),c+=ie(o),null!==s&&(c+=\":\"+s)):\"file\"==t&&(c+=\"//\"),c+=e.cannotBeABaseURL?i[0]:i.length?\"/\"+M(i,\"/\"):\"\",null!==a&&(c+=\"?\"+a),null!==l&&(c+=\"#\"+l),c},setHref:function(e){var t=this.parse(e);if(t)throw C(t);this.searchParams.update()},getOrigin:function(){var e=this.scheme,t=this.port;if(\"blob\"==e)try{return new Le(e.path[0]).origin}catch(e){return\"null\"}return\"file\"!=e&&this.isSpecial()?e+\"://\"+ie(this.host)+(null!==t?\":\"+t:\"\"):\"null\"},getProtocol:function(){return this.scheme+\":\"},setProtocol:function(e){this.parse(b(e)+\":\",ge)},getUsername:function(){return this.username},setUsername:function(e){var t=m(b(e));if(!this.cannotHaveUsernamePasswordPort()){this.username=\"\";for(var n=0;n<t.length;n++)this.username+=pe(t[n],ue)}},getPassword:function(){return this.password},setPassword:function(e){var t=m(b(e));if(!this.cannotHaveUsernamePasswordPort()){this.password=\"\";for(var n=0;n<t.length;n++)this.password+=pe(t[n],ue)}},getHost:function(){var e=this.host,t=this.port;return null===e?\"\":null===t?ie(e):ie(e)+\":\"+t},setHost:function(e){this.cannotBeABaseURL||this.parse(e,Oe)},getHostname:function(){var e=this.host;return null===e?\"\":ie(e)},setHostname:function(e){this.cannotBeABaseURL||this.parse(e,ke)},getPort:function(){var e=this.port;return null===e?\"\":b(e)},setPort:function(e){this.cannotHaveUsernamePasswordPort()||(\"\"==(e=b(e))?this.port=null:this.parse(e,Ae))},getPathname:function(){var e=this.path;return this.cannotBeABaseURL?e[0]:e.length?\"/\"+M(e,\"/\"):\"\"},setPathname:function(e){this.cannotBeABaseURL||(this.path=[],this.parse(e,Ie))},getSearch:function(){var e=this.query;return e?\"?\"+e:\"\"},setSearch:function(e){\"\"==(e=b(e))?this.query=null:(\"?\"==T(e,0)&&(e=U(e,1)),this.query=\"\",this.parse(e,Me)),this.searchParams.update()},getSearchParams:function(){return this.searchParams.facade},getHash:function(){var e=this.fragment;return e?\"#\"+e:\"\"},setHash:function(e){\"\"!=(e=b(e))?(\"#\"==T(e,0)&&(e=U(e,1)),this.fragment=\"\",this.parse(e,De)):this.fragment=null},update:function(){this.query=this.searchParams.serialize()||null}};var Le=function(e){var t=h(this,Be),n=E(arguments.length,1)>1?arguments[1]:void 0,r=_(t,new Fe(e,!1,n));s||(t.href=r.serialize(),t.origin=r.getOrigin(),t.protocol=r.getProtocol(),t.username=r.getUsername(),t.password=r.getPassword(),t.host=r.getHost(),t.hostname=r.getHostname(),t.port=r.getPort(),t.pathname=r.getPathname(),t.search=r.getSearch(),t.searchParams=r.getSearchParams(),t.hash=r.getHash())},Be=Le.prototype,$e=function(e,t){return{get:function(){return j(this)[e]()},set:t&&function(e){return j(this)[t](e)},configurable:!0,enumerable:!0}};if(s&&(p(Be,\"href\",$e(\"serialize\",\"setHref\")),p(Be,\"origin\",$e(\"getOrigin\")),p(Be,\"protocol\",$e(\"getProtocol\",\"setProtocol\")),p(Be,\"username\",$e(\"getUsername\",\"setUsername\")),p(Be,\"password\",$e(\"getPassword\",\"setPassword\")),p(Be,\"host\",$e(\"getHost\",\"setHost\")),p(Be,\"hostname\",$e(\"getHostname\",\"setHostname\")),p(Be,\"port\",$e(\"getPort\",\"setPort\")),p(Be,\"pathname\",$e(\"getPathname\",\"setPathname\")),p(Be,\"search\",$e(\"getSearch\",\"setSearch\")),p(Be,\"searchParams\",$e(\"getSearchParams\")),p(Be,\"hash\",$e(\"getHash\",\"setHash\"))),u(Be,\"toJSON\",(function(){return j(this).serialize()}),{enumerable:!0}),u(Be,\"toString\",(function(){return j(this).serialize()}),{enumerable:!0}),A){var qe=A.createObjectURL,Ue=A.revokeObjectURL;qe&&u(Le,\"createObjectURL\",l(qe,A)),Ue&&u(Le,\"revokeObjectURL\",l(Ue,A))}w(Le,\"URL\"),o({global:!0,constructor:!0,forced:!i,sham:!s},{URL:Le})},33601:(e,t,n)=>{n(47250)},98947:()=>{},24848:(e,t,n)=>{var r=n(54493);e.exports=r},83363:(e,t,n)=>{var r=n(24034);e.exports=r},62908:(e,t,n)=>{var r=n(12710);e.exports=r},49216:(e,t,n)=>{var r=n(99324);e.exports=r},56668:(e,t,n)=>{var r=n(95909);e.exports=r},74719:(e,t,n)=>{var r=n(14423);e.exports=r},57784:(e,t,n)=>{var r=n(81103);e.exports=r},28196:(e,t,n)=>{var r=n(16246);e.exports=r},8065:(e,t,n)=>{var r=n(56043);e.exports=r},57448:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(62908),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.entries;return e===a||s(a,e)&&t===a.entries||o(l,r(e))?i:t}},29455:(e,t,n)=>{var r=n(13160);e.exports=r},69743:(e,t,n)=>{var r=n(80446);e.exports=r},11955:(e,t,n)=>{var r=n(2480);e.exports=r},96064:(e,t,n)=>{var r=n(7147);e.exports=r},61577:(e,t,n)=>{var r=n(32236);e.exports=r},46279:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(49216),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.forEach;return e===a||s(a,e)&&t===a.forEach||o(l,r(e))?i:t}},33778:(e,t,n)=>{var r=n(58557);e.exports=r},19373:(e,t,n)=>{var r=n(34570);e.exports=r},73819:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(56668),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.keys;return e===a||s(a,e)&&t===a.keys||o(l,r(e))?i:t}},11022:(e,t,n)=>{var r=n(57564);e.exports=r},61798:(e,t,n)=>{var r=n(88287);e.exports=r},52759:(e,t,n)=>{var r=n(93993);e.exports=r},52527:(e,t,n)=>{var r=n(68025);e.exports=r},36857:(e,t,n)=>{var r=n(59257);e.exports=r},82073:(e,t,n)=>{var r=n(69601);e.exports=r},45286:(e,t,n)=>{var r=n(28299);e.exports=r},62856:(e,t,n)=>{var r=n(69355);e.exports=r},2348:(e,t,n)=>{var r=n(18339);e.exports=r},35178:(e,t,n)=>{var r=n(71611);e.exports=r},76361:(e,t,n)=>{var r=n(62774);e.exports=r},71815:(e,t,n)=>{n(7634);var r=n(9697),o=n(90953),s=n(7046),i=n(74719),a=Array.prototype,l={DOMTokenList:!0,NodeList:!0};e.exports=function(e){var t=e.values;return e===a||s(a,e)&&t===a.values||o(l,r(e))?i:t}},8933:(e,t,n)=>{var r=n(84426);e.exports=r},15868:(e,t,n)=>{var r=n(91018);n(7634),e.exports=r},14873:(e,t,n)=>{var r=n(97849);e.exports=r},38849:(e,t,n)=>{var r=n(3820);e.exports=r},63383:(e,t,n)=>{var r=n(45999);e.exports=r},57396:(e,t,n)=>{var r=n(7702);e.exports=r},41910:(e,t,n)=>{var r=n(48171);e.exports=r},86209:(e,t,n)=>{var r=n(73081);e.exports=r},53402:(e,t,n)=>{var r=n(7699);n(7634),e.exports=r},79427:(e,t,n)=>{var r=n(286);e.exports=r},62857:(e,t,n)=>{var r=n(92766);e.exports=r},9534:(e,t,n)=>{var r=n(30498);e.exports=r},23059:(e,t,n)=>{var r=n(48494);e.exports=r},47795:(e,t,n)=>{var r=n(98430);e.exports=r},27460:(e,t,n)=>{var r=n(52956);n(7634),e.exports=r},27989:(e,t,n)=>{n(71249);var r=n(54058);e.exports=r.setTimeout},5519:(e,t,n)=>{var r=n(76998);n(7634),e.exports=r},23452:(e,t,n)=>{var r=n(97089);e.exports=r},92547:(e,t,n)=>{var r=n(57473);n(7634),e.exports=r},46509:(e,t,n)=>{var r=n(24227);n(7634),e.exports=r},35774:(e,t,n)=>{var r=n(62978);e.exports=r},57641:(e,t,n)=>{var r=n(71459);e.exports=r},72010:(e,t,n)=>{var r=n(32304);n(7634),e.exports=r},93726:(e,t,n)=>{var r=n(29567);n(7634),e.exports=r},47610:(e,t,n)=>{n(95304),n(16454),n(73305),n(62337);var r=n(54058);e.exports=r.URLSearchParams},71459:(e,t,n)=>{n(47610),n(33601),n(84630),n(98947);var r=n(54058);e.exports=r.URL},31905:function(){!function(e){!function(t){var n=\"URLSearchParams\"in e,r=\"Symbol\"in e&&\"iterator\"in Symbol,o=\"FileReader\"in e&&\"Blob\"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),s=\"FormData\"in e,i=\"ArrayBuffer\"in e;if(i)var a=[\"[object Int8Array]\",\"[object Uint8Array]\",\"[object Uint8ClampedArray]\",\"[object Int16Array]\",\"[object Uint16Array]\",\"[object Int32Array]\",\"[object Uint32Array]\",\"[object Float32Array]\",\"[object Float64Array]\"],l=ArrayBuffer.isView||function(e){return e&&a.indexOf(Object.prototype.toString.call(e))>-1};function c(e){if(\"string\"!=typeof e&&(e=String(e)),/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(e))throw new TypeError(\"Invalid character in header field name\");return e.toLowerCase()}function u(e){return\"string\"!=typeof e&&(e=String(e)),e}function p(e){var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return r&&(t[Symbol.iterator]=function(){return t}),t}function h(e){this.map={},e instanceof h?e.forEach((function(e,t){this.append(t,e)}),this):Array.isArray(e)?e.forEach((function(e){this.append(e[0],e[1])}),this):e&&Object.getOwnPropertyNames(e).forEach((function(t){this.append(t,e[t])}),this)}function f(e){if(e.bodyUsed)return Promise.reject(new TypeError(\"Already read\"));e.bodyUsed=!0}function d(e){return new Promise((function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}}))}function m(e){var t=new FileReader,n=d(t);return t.readAsArrayBuffer(e),n}function g(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function y(){return this.bodyUsed=!1,this._initBody=function(e){var t;this._bodyInit=e,e?\"string\"==typeof e?this._bodyText=e:o&&Blob.prototype.isPrototypeOf(e)?this._bodyBlob=e:s&&FormData.prototype.isPrototypeOf(e)?this._bodyFormData=e:n&&URLSearchParams.prototype.isPrototypeOf(e)?this._bodyText=e.toString():i&&o&&((t=e)&&DataView.prototype.isPrototypeOf(t))?(this._bodyArrayBuffer=g(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer])):i&&(ArrayBuffer.prototype.isPrototypeOf(e)||l(e))?this._bodyArrayBuffer=g(e):this._bodyText=e=Object.prototype.toString.call(e):this._bodyText=\"\",this.headers.get(\"content-type\")||(\"string\"==typeof e?this.headers.set(\"content-type\",\"text/plain;charset=UTF-8\"):this._bodyBlob&&this._bodyBlob.type?this.headers.set(\"content-type\",this._bodyBlob.type):n&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set(\"content-type\",\"application/x-www-form-urlencoded;charset=UTF-8\"))},o&&(this.blob=function(){var e=f(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error(\"could not read FormData body as blob\");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?f(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(m)}),this.text=function(){var e,t,n,r=f(this);if(r)return r;if(this._bodyBlob)return e=this._bodyBlob,t=new FileReader,n=d(t),t.readAsText(e),n;if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),n=new Array(t.length),r=0;r<t.length;r++)n[r]=String.fromCharCode(t[r]);return n.join(\"\")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error(\"could not read FormData body as text\");return Promise.resolve(this._bodyText)},s&&(this.formData=function(){return this.text().then(w)}),this.json=function(){return this.text().then(JSON.parse)},this}h.prototype.append=function(e,t){e=c(e),t=u(t);var n=this.map[e];this.map[e]=n?n+\", \"+t:t},h.prototype.delete=function(e){delete this.map[c(e)]},h.prototype.get=function(e){return e=c(e),this.has(e)?this.map[e]:null},h.prototype.has=function(e){return this.map.hasOwnProperty(c(e))},h.prototype.set=function(e,t){this.map[c(e)]=u(t)},h.prototype.forEach=function(e,t){for(var n in this.map)this.map.hasOwnProperty(n)&&e.call(t,this.map[n],n,this)},h.prototype.keys=function(){var e=[];return this.forEach((function(t,n){e.push(n)})),p(e)},h.prototype.values=function(){var e=[];return this.forEach((function(t){e.push(t)})),p(e)},h.prototype.entries=function(){var e=[];return this.forEach((function(t,n){e.push([n,t])})),p(e)},r&&(h.prototype[Symbol.iterator]=h.prototype.entries);var v=[\"DELETE\",\"GET\",\"HEAD\",\"OPTIONS\",\"POST\",\"PUT\"];function b(e,t){var n,r,o=(t=t||{}).body;if(e instanceof b){if(e.bodyUsed)throw new TypeError(\"Already read\");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new h(e.headers)),this.method=e.method,this.mode=e.mode,this.signal=e.signal,o||null==e._bodyInit||(o=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||\"same-origin\",!t.headers&&this.headers||(this.headers=new h(t.headers)),this.method=(n=t.method||this.method||\"GET\",r=n.toUpperCase(),v.indexOf(r)>-1?r:n),this.mode=t.mode||this.mode||null,this.signal=t.signal||this.signal,this.referrer=null,(\"GET\"===this.method||\"HEAD\"===this.method)&&o)throw new TypeError(\"Body not allowed for GET or HEAD requests\");this._initBody(o)}function w(e){var t=new FormData;return e.trim().split(\"&\").forEach((function(e){if(e){var n=e.split(\"=\"),r=n.shift().replace(/\\+/g,\" \"),o=n.join(\"=\").replace(/\\+/g,\" \");t.append(decodeURIComponent(r),decodeURIComponent(o))}})),t}function E(e,t){t||(t={}),this.type=\"default\",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText=\"statusText\"in t?t.statusText:\"OK\",this.headers=new h(t.headers),this.url=t.url||\"\",this._initBody(e)}b.prototype.clone=function(){return new b(this,{body:this._bodyInit})},y.call(b.prototype),y.call(E.prototype),E.prototype.clone=function(){return new E(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new h(this.headers),url:this.url})},E.error=function(){var e=new E(null,{status:0,statusText:\"\"});return e.type=\"error\",e};var x=[301,302,303,307,308];E.redirect=function(e,t){if(-1===x.indexOf(t))throw new RangeError(\"Invalid status code\");return new E(null,{status:t,headers:{location:e}})},t.DOMException=e.DOMException;try{new t.DOMException}catch(e){t.DOMException=function(e,t){this.message=e,this.name=t;var n=Error(e);this.stack=n.stack},t.DOMException.prototype=Object.create(Error.prototype),t.DOMException.prototype.constructor=t.DOMException}function S(e,n){return new Promise((function(r,s){var i=new b(e,n);if(i.signal&&i.signal.aborted)return s(new t.DOMException(\"Aborted\",\"AbortError\"));var a=new XMLHttpRequest;function l(){a.abort()}a.onload=function(){var e,t,n={status:a.status,statusText:a.statusText,headers:(e=a.getAllResponseHeaders()||\"\",t=new h,e.replace(/\\r?\\n[\\t ]+/g,\" \").split(/\\r?\\n/).forEach((function(e){var n=e.split(\":\"),r=n.shift().trim();if(r){var o=n.join(\":\").trim();t.append(r,o)}})),t)};n.url=\"responseURL\"in a?a.responseURL:n.headers.get(\"X-Request-URL\");var o=\"response\"in a?a.response:a.responseText;r(new E(o,n))},a.onerror=function(){s(new TypeError(\"Network request failed\"))},a.ontimeout=function(){s(new TypeError(\"Network request failed\"))},a.onabort=function(){s(new t.DOMException(\"Aborted\",\"AbortError\"))},a.open(i.method,i.url,!0),\"include\"===i.credentials?a.withCredentials=!0:\"omit\"===i.credentials&&(a.withCredentials=!1),\"responseType\"in a&&o&&(a.responseType=\"blob\"),i.headers.forEach((function(e,t){a.setRequestHeader(t,e)})),i.signal&&(i.signal.addEventListener(\"abort\",l),a.onreadystatechange=function(){4===a.readyState&&i.signal.removeEventListener(\"abort\",l)}),a.send(void 0===i._bodyInit?null:i._bodyInit)}))}S.polyfill=!0,e.fetch||(e.fetch=S,e.Headers=h,e.Request=b,e.Response=E),t.Headers=h,t.Request=b,t.Response=E,t.fetch=S,Object.defineProperty(t,\"__esModule\",{value:!0})}({})}(\"undefined\"!=typeof self?self:this)},8269:function(e,t,n){var r;r=void 0!==n.g?n.g:this,e.exports=function(e){if(e.CSS&&e.CSS.escape)return e.CSS.escape;var t=function(e){if(0==arguments.length)throw new TypeError(\"`CSS.escape` requires an argument.\");for(var t,n=String(e),r=n.length,o=-1,s=\"\",i=n.charCodeAt(0);++o<r;)0!=(t=n.charCodeAt(o))?s+=t>=1&&t<=31||127==t||0==o&&t>=48&&t<=57||1==o&&t>=48&&t<=57&&45==i?\"\\\\\"+t.toString(16)+\" \":0==o&&1==r&&45==t||!(t>=128||45==t||95==t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122)?\"\\\\\"+n.charAt(o):n.charAt(o):s+=\"�\";return s};return e.CSS||(e.CSS={}),e.CSS.escape=t,t}(r)},27698:(e,t,n)=>{\"use strict\";var r=n(48764).Buffer;function o(e){return e instanceof r||e instanceof Date||e instanceof RegExp}function s(e){if(e instanceof r){var t=r.alloc?r.alloc(e.length):new r(e.length);return e.copy(t),t}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error(\"Unexpected situation\")}function i(e){var t=[];return e.forEach((function(e,n){\"object\"==typeof e&&null!==e?Array.isArray(e)?t[n]=i(e):o(e)?t[n]=s(e):t[n]=l({},e):t[n]=e})),t}function a(e,t){return\"__proto__\"===t?void 0:e[t]}var l=e.exports=function(){if(arguments.length<1||\"object\"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,n=arguments[0];return Array.prototype.slice.call(arguments,1).forEach((function(r){\"object\"!=typeof r||null===r||Array.isArray(r)||Object.keys(r).forEach((function(c){return t=a(n,c),(e=a(r,c))===n?void 0:\"object\"!=typeof e||null===e?void(n[c]=e):Array.isArray(e)?void(n[c]=i(e)):o(e)?void(n[c]=s(e)):\"object\"!=typeof t||null===t||Array.isArray(t)?void(n[c]=l({},e)):void(n[c]=l(t,e))}))})),n}},9996:e=>{\"use strict\";var t=function(e){return function(e){return!!e&&\"object\"==typeof e}(e)&&!function(e){var t=Object.prototype.toString.call(e);return\"[object RegExp]\"===t||\"[object Date]\"===t||function(e){return e.$$typeof===n}(e)}(e)};var n=\"function\"==typeof Symbol&&Symbol.for?Symbol.for(\"react.element\"):60103;function r(e,t){return!1!==t.clone&&t.isMergeableObject(e)?l((n=e,Array.isArray(n)?[]:{}),e,t):e;var n}function o(e,t,n){return e.concat(t).map((function(e){return r(e,n)}))}function s(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return Object.propertyIsEnumerable.call(e,t)})):[]}(e))}function i(e,t){try{return t in e}catch(e){return!1}}function a(e,t,n){var o={};return n.isMergeableObject(e)&&s(e).forEach((function(t){o[t]=r(e[t],n)})),s(t).forEach((function(s){(function(e,t){return i(e,t)&&!(Object.hasOwnProperty.call(e,t)&&Object.propertyIsEnumerable.call(e,t))})(e,s)||(i(e,s)&&n.isMergeableObject(t[s])?o[s]=function(e,t){if(!t.customMerge)return l;var n=t.customMerge(e);return\"function\"==typeof n?n:l}(s,n)(e[s],t[s],n):o[s]=r(t[s],n))})),o}function l(e,n,s){(s=s||{}).arrayMerge=s.arrayMerge||o,s.isMergeableObject=s.isMergeableObject||t,s.cloneUnlessOtherwiseSpecified=r;var i=Array.isArray(n);return i===Array.isArray(e)?i?s.arrayMerge(e,n,s):a(e,n,s):r(n,s)}l.all=function(e,t){if(!Array.isArray(e))throw new Error(\"first argument should be an array\");return e.reduce((function(e,n){return l(e,n,t)}),{})};var c=l;e.exports=c},27856:function(e){e.exports=function(){\"use strict\";const{entries:e,setPrototypeOf:t,isFrozen:n,getPrototypeOf:r,getOwnPropertyDescriptor:o}=Object;let{freeze:s,seal:i,create:a}=Object,{apply:l,construct:c}=\"undefined\"!=typeof Reflect&&Reflect;l||(l=function(e,t,n){return e.apply(t,n)}),s||(s=function(e){return e}),i||(i=function(e){return e}),c||(c=function(e,t){return new e(...t)});const u=E(Array.prototype.forEach),p=E(Array.prototype.pop),h=E(Array.prototype.push),f=E(String.prototype.toLowerCase),d=E(String.prototype.toString),m=E(String.prototype.match),g=E(String.prototype.replace),y=E(String.prototype.indexOf),v=E(String.prototype.trim),b=E(RegExp.prototype.test),w=x(TypeError);function E(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return l(e,t,r)}}function x(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return c(e,n)}}function S(e,r,o){var s;o=null!==(s=o)&&void 0!==s?s:f,t&&t(e,null);let i=r.length;for(;i--;){let t=r[i];if(\"string\"==typeof t){const e=o(t);e!==t&&(n(r)||(r[i]=e),t=e)}e[t]=!0}return e}function _(t){const n=a(null);for(const[r,o]of e(t))n[r]=o;return n}function j(e,t){for(;null!==e;){const n=o(e,t);if(n){if(n.get)return E(n.get);if(\"function\"==typeof n.value)return E(n.value)}e=r(e)}function n(e){return console.warn(\"fallback value for\",e),null}return n}const O=s([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),k=s([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),A=s([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feDropShadow\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),C=s([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),P=s([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\",\"mprescripts\"]),N=s([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),I=s([\"#text\"]),T=s([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),R=s([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),M=s([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),D=s([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),F=i(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),L=i(/<%[\\w\\W]*|[\\w\\W]*%>/gm),B=i(/\\${[\\w\\W]*}/gm),$=i(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),q=i(/^aria-[\\-\\w]+$/),U=i(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),z=i(/^(?:\\w+script|data):/i),V=i(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),W=i(/^html$/i);var J=Object.freeze({__proto__:null,MUSTACHE_EXPR:F,ERB_EXPR:L,TMPLIT_EXPR:B,DATA_ATTR:$,ARIA_ATTR:q,IS_ALLOWED_URI:U,IS_SCRIPT_OR_DATA:z,ATTR_WHITESPACE:V,DOCTYPE_NAME:W});const K=()=>\"undefined\"==typeof window?null:window,H=function(e,t){if(\"object\"!=typeof e||\"function\"!=typeof e.createPolicy)return null;let n=null;const r=\"data-tt-policy-suffix\";t&&t.hasAttribute(r)&&(n=t.getAttribute(r));const o=\"dompurify\"+(n?\"#\"+n:\"\");try{return e.createPolicy(o,{createHTML:e=>e,createScriptURL:e=>e})}catch(e){return console.warn(\"TrustedTypes policy \"+o+\" could not be created.\"),null}};function G(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:K();const n=e=>G(e);if(n.version=\"3.0.3\",n.removed=[],!t||!t.document||9!==t.document.nodeType)return n.isSupported=!1,n;const r=t.document,o=r.currentScript;let{document:i}=t;const{DocumentFragment:a,HTMLTemplateElement:l,Node:c,Element:E,NodeFilter:x,NamedNodeMap:F=t.NamedNodeMap||t.MozNamedAttrMap,HTMLFormElement:L,DOMParser:B,trustedTypes:$}=t,q=E.prototype,z=j(q,\"cloneNode\"),V=j(q,\"nextSibling\"),Z=j(q,\"childNodes\"),Y=j(q,\"parentNode\");if(\"function\"==typeof l){const e=i.createElement(\"template\");e.content&&e.content.ownerDocument&&(i=e.content.ownerDocument)}let X,Q=\"\";const{implementation:ee,createNodeIterator:te,createDocumentFragment:ne,getElementsByTagName:re}=i,{importNode:oe}=r;let se={};n.isSupported=\"function\"==typeof e&&\"function\"==typeof Y&&ee&&void 0!==ee.createHTMLDocument;const{MUSTACHE_EXPR:ie,ERB_EXPR:ae,TMPLIT_EXPR:le,DATA_ATTR:ce,ARIA_ATTR:ue,IS_SCRIPT_OR_DATA:pe,ATTR_WHITESPACE:he}=J;let{IS_ALLOWED_URI:fe}=J,de=null;const me=S({},[...O,...k,...A,...P,...I]);let ge=null;const ye=S({},[...T,...R,...M,...D]);let ve=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),be=null,we=null,Ee=!0,xe=!0,Se=!1,_e=!0,je=!1,Oe=!1,ke=!1,Ae=!1,Ce=!1,Pe=!1,Ne=!1,Ie=!0,Te=!1;const Re=\"user-content-\";let Me=!0,De=!1,Fe={},Le=null;const Be=S({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]);let $e=null;const qe=S({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]);let Ue=null;const ze=S({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),Ve=\"http://www.w3.org/1998/Math/MathML\",We=\"http://www.w3.org/2000/svg\",Je=\"http://www.w3.org/1999/xhtml\";let Ke=Je,He=!1,Ge=null;const Ze=S({},[Ve,We,Je],d);let Ye;const Xe=[\"application/xhtml+xml\",\"text/html\"],Qe=\"text/html\";let et,tt=null;const nt=i.createElement(\"form\"),rt=function(e){return e instanceof RegExp||e instanceof Function},ot=function(e){if(!tt||tt!==e){if(e&&\"object\"==typeof e||(e={}),e=_(e),Ye=Ye=-1===Xe.indexOf(e.PARSER_MEDIA_TYPE)?Qe:e.PARSER_MEDIA_TYPE,et=\"application/xhtml+xml\"===Ye?d:f,de=\"ALLOWED_TAGS\"in e?S({},e.ALLOWED_TAGS,et):me,ge=\"ALLOWED_ATTR\"in e?S({},e.ALLOWED_ATTR,et):ye,Ge=\"ALLOWED_NAMESPACES\"in e?S({},e.ALLOWED_NAMESPACES,d):Ze,Ue=\"ADD_URI_SAFE_ATTR\"in e?S(_(ze),e.ADD_URI_SAFE_ATTR,et):ze,$e=\"ADD_DATA_URI_TAGS\"in e?S(_(qe),e.ADD_DATA_URI_TAGS,et):qe,Le=\"FORBID_CONTENTS\"in e?S({},e.FORBID_CONTENTS,et):Be,be=\"FORBID_TAGS\"in e?S({},e.FORBID_TAGS,et):{},we=\"FORBID_ATTR\"in e?S({},e.FORBID_ATTR,et):{},Fe=\"USE_PROFILES\"in e&&e.USE_PROFILES,Ee=!1!==e.ALLOW_ARIA_ATTR,xe=!1!==e.ALLOW_DATA_ATTR,Se=e.ALLOW_UNKNOWN_PROTOCOLS||!1,_e=!1!==e.ALLOW_SELF_CLOSE_IN_ATTR,je=e.SAFE_FOR_TEMPLATES||!1,Oe=e.WHOLE_DOCUMENT||!1,Ce=e.RETURN_DOM||!1,Pe=e.RETURN_DOM_FRAGMENT||!1,Ne=e.RETURN_TRUSTED_TYPE||!1,Ae=e.FORCE_BODY||!1,Ie=!1!==e.SANITIZE_DOM,Te=e.SANITIZE_NAMED_PROPS||!1,Me=!1!==e.KEEP_CONTENT,De=e.IN_PLACE||!1,fe=e.ALLOWED_URI_REGEXP||U,Ke=e.NAMESPACE||Je,ve=e.CUSTOM_ELEMENT_HANDLING||{},e.CUSTOM_ELEMENT_HANDLING&&rt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(ve.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&rt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(ve.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&\"boolean\"==typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(ve.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),je&&(xe=!1),Pe&&(Ce=!0),Fe&&(de=S({},[...I]),ge=[],!0===Fe.html&&(S(de,O),S(ge,T)),!0===Fe.svg&&(S(de,k),S(ge,R),S(ge,D)),!0===Fe.svgFilters&&(S(de,A),S(ge,R),S(ge,D)),!0===Fe.mathMl&&(S(de,P),S(ge,M),S(ge,D))),e.ADD_TAGS&&(de===me&&(de=_(de)),S(de,e.ADD_TAGS,et)),e.ADD_ATTR&&(ge===ye&&(ge=_(ge)),S(ge,e.ADD_ATTR,et)),e.ADD_URI_SAFE_ATTR&&S(Ue,e.ADD_URI_SAFE_ATTR,et),e.FORBID_CONTENTS&&(Le===Be&&(Le=_(Le)),S(Le,e.FORBID_CONTENTS,et)),Me&&(de[\"#text\"]=!0),Oe&&S(de,[\"html\",\"head\",\"body\"]),de.table&&(S(de,[\"tbody\"]),delete be.tbody),e.TRUSTED_TYPES_POLICY){if(\"function\"!=typeof e.TRUSTED_TYPES_POLICY.createHTML)throw w('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');if(\"function\"!=typeof e.TRUSTED_TYPES_POLICY.createScriptURL)throw w('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');X=e.TRUSTED_TYPES_POLICY,Q=X.createHTML(\"\")}else void 0===X&&(X=H($,o)),null!==X&&\"string\"==typeof Q&&(Q=X.createHTML(\"\"));s&&s(e),tt=e}},st=S({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),it=S({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),at=S({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),lt=S({},k);S(lt,A),S(lt,C);const ct=S({},P);S(ct,N);const ut=function(e){let t=Y(e);t&&t.tagName||(t={namespaceURI:Ke,tagName:\"template\"});const n=f(e.tagName),r=f(t.tagName);return!!Ge[e.namespaceURI]&&(e.namespaceURI===We?t.namespaceURI===Je?\"svg\"===n:t.namespaceURI===Ve?\"svg\"===n&&(\"annotation-xml\"===r||st[r]):Boolean(lt[n]):e.namespaceURI===Ve?t.namespaceURI===Je?\"math\"===n:t.namespaceURI===We?\"math\"===n&&it[r]:Boolean(ct[n]):e.namespaceURI===Je?!(t.namespaceURI===We&&!it[r])&&!(t.namespaceURI===Ve&&!st[r])&&!ct[n]&&(at[n]||!lt[n]):!(\"application/xhtml+xml\"!==Ye||!Ge[e.namespaceURI]))},pt=function(e){h(n.removed,{element:e});try{e.parentNode.removeChild(e)}catch(t){e.remove()}},ht=function(e,t){try{h(n.removed,{attribute:t.getAttributeNode(e),from:t})}catch(e){h(n.removed,{attribute:null,from:t})}if(t.removeAttribute(e),\"is\"===e&&!ge[e])if(Ce||Pe)try{pt(t)}catch(e){}else try{t.setAttribute(e,\"\")}catch(e){}},ft=function(e){let t,n;if(Ae)e=\"<remove></remove>\"+e;else{const t=m(e,/^[\\r\\n\\t ]+/);n=t&&t[0]}\"application/xhtml+xml\"===Ye&&Ke===Je&&(e='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+e+\"</body></html>\");const r=X?X.createHTML(e):e;if(Ke===Je)try{t=(new B).parseFromString(r,Ye)}catch(e){}if(!t||!t.documentElement){t=ee.createDocument(Ke,\"template\",null);try{t.documentElement.innerHTML=He?Q:r}catch(e){}}const o=t.body||t.documentElement;return e&&n&&o.insertBefore(i.createTextNode(n),o.childNodes[0]||null),Ke===Je?re.call(t,Oe?\"html\":\"body\")[0]:Oe?t.documentElement:o},dt=function(e){return te.call(e.ownerDocument||e,e,x.SHOW_ELEMENT|x.SHOW_COMMENT|x.SHOW_TEXT,null,!1)},mt=function(e){return e instanceof L&&(\"string\"!=typeof e.nodeName||\"string\"!=typeof e.textContent||\"function\"!=typeof e.removeChild||!(e.attributes instanceof F)||\"function\"!=typeof e.removeAttribute||\"function\"!=typeof e.setAttribute||\"string\"!=typeof e.namespaceURI||\"function\"!=typeof e.insertBefore||\"function\"!=typeof e.hasChildNodes)},gt=function(e){return\"object\"==typeof c?e instanceof c:e&&\"object\"==typeof e&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName},yt=function(e,t,r){se[e]&&u(se[e],(e=>{e.call(n,t,r,tt)}))},vt=function(e){let t;if(yt(\"beforeSanitizeElements\",e,null),mt(e))return pt(e),!0;const r=et(e.nodeName);if(yt(\"uponSanitizeElement\",e,{tagName:r,allowedTags:de}),e.hasChildNodes()&&!gt(e.firstElementChild)&&(!gt(e.content)||!gt(e.content.firstElementChild))&&b(/<[/\\w]/g,e.innerHTML)&&b(/<[/\\w]/g,e.textContent))return pt(e),!0;if(!de[r]||be[r]){if(!be[r]&&wt(r)){if(ve.tagNameCheck instanceof RegExp&&b(ve.tagNameCheck,r))return!1;if(ve.tagNameCheck instanceof Function&&ve.tagNameCheck(r))return!1}if(Me&&!Le[r]){const t=Y(e)||e.parentNode,n=Z(e)||e.childNodes;if(n&&t)for(let r=n.length-1;r>=0;--r)t.insertBefore(z(n[r],!0),V(e))}return pt(e),!0}return e instanceof E&&!ut(e)?(pt(e),!0):\"noscript\"!==r&&\"noembed\"!==r||!b(/<\\/no(script|embed)/i,e.innerHTML)?(je&&3===e.nodeType&&(t=e.textContent,t=g(t,ie,\" \"),t=g(t,ae,\" \"),t=g(t,le,\" \"),e.textContent!==t&&(h(n.removed,{element:e.cloneNode()}),e.textContent=t)),yt(\"afterSanitizeElements\",e,null),!1):(pt(e),!0)},bt=function(e,t,n){if(Ie&&(\"id\"===t||\"name\"===t)&&(n in i||n in nt))return!1;if(xe&&!we[t]&&b(ce,t));else if(Ee&&b(ue,t));else if(!ge[t]||we[t]){if(!(wt(e)&&(ve.tagNameCheck instanceof RegExp&&b(ve.tagNameCheck,e)||ve.tagNameCheck instanceof Function&&ve.tagNameCheck(e))&&(ve.attributeNameCheck instanceof RegExp&&b(ve.attributeNameCheck,t)||ve.attributeNameCheck instanceof Function&&ve.attributeNameCheck(t))||\"is\"===t&&ve.allowCustomizedBuiltInElements&&(ve.tagNameCheck instanceof RegExp&&b(ve.tagNameCheck,n)||ve.tagNameCheck instanceof Function&&ve.tagNameCheck(n))))return!1}else if(Ue[t]);else if(b(fe,g(n,he,\"\")));else if(\"src\"!==t&&\"xlink:href\"!==t&&\"href\"!==t||\"script\"===e||0!==y(n,\"data:\")||!$e[e])if(Se&&!b(pe,g(n,he,\"\")));else if(n)return!1;return!0},wt=function(e){return e.indexOf(\"-\")>0},Et=function(e){let t,r,o,s;yt(\"beforeSanitizeAttributes\",e,null);const{attributes:i}=e;if(!i)return;const a={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:ge};for(s=i.length;s--;){t=i[s];const{name:l,namespaceURI:c}=t;if(r=\"value\"===l?t.value:v(t.value),o=et(l),a.attrName=o,a.attrValue=r,a.keepAttr=!0,a.forceKeepAttr=void 0,yt(\"uponSanitizeAttribute\",e,a),r=a.attrValue,a.forceKeepAttr)continue;if(ht(l,e),!a.keepAttr)continue;if(!_e&&b(/\\/>/i,r)){ht(l,e);continue}je&&(r=g(r,ie,\" \"),r=g(r,ae,\" \"),r=g(r,le,\" \"));const u=et(e.nodeName);if(bt(u,o,r)){if(!Te||\"id\"!==o&&\"name\"!==o||(ht(l,e),r=Re+r),X&&\"object\"==typeof $&&\"function\"==typeof $.getAttributeType)if(c);else switch($.getAttributeType(u,o)){case\"TrustedHTML\":r=X.createHTML(r);break;case\"TrustedScriptURL\":r=X.createScriptURL(r)}try{c?e.setAttributeNS(c,l,r):e.setAttribute(l,r),p(n.removed)}catch(e){}}}yt(\"afterSanitizeAttributes\",e,null)},xt=function e(t){let n;const r=dt(t);for(yt(\"beforeSanitizeShadowDOM\",t,null);n=r.nextNode();)yt(\"uponSanitizeShadowNode\",n,null),vt(n)||(n.content instanceof a&&e(n.content),Et(n));yt(\"afterSanitizeShadowDOM\",t,null)};return n.sanitize=function(e){let t,o,s,i,l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(He=!e,He&&(e=\"\\x3c!--\\x3e\"),\"string\"!=typeof e&&!gt(e)){if(\"function\"!=typeof e.toString)throw w(\"toString is not a function\");if(\"string\"!=typeof(e=e.toString()))throw w(\"dirty is not a string, aborting\")}if(!n.isSupported)return e;if(ke||ot(l),n.removed=[],\"string\"==typeof e&&(De=!1),De){if(e.nodeName){const t=et(e.nodeName);if(!de[t]||be[t])throw w(\"root node is forbidden and cannot be sanitized in-place\")}}else if(e instanceof c)t=ft(\"\\x3c!----\\x3e\"),o=t.ownerDocument.importNode(e,!0),1===o.nodeType&&\"BODY\"===o.nodeName||\"HTML\"===o.nodeName?t=o:t.appendChild(o);else{if(!Ce&&!je&&!Oe&&-1===e.indexOf(\"<\"))return X&&Ne?X.createHTML(e):e;if(t=ft(e),!t)return Ce?null:Ne?Q:\"\"}t&&Ae&&pt(t.firstChild);const u=dt(De?e:t);for(;s=u.nextNode();)vt(s)||(s.content instanceof a&&xt(s.content),Et(s));if(De)return e;if(Ce){if(Pe)for(i=ne.call(t.ownerDocument);t.firstChild;)i.appendChild(t.firstChild);else i=t;return(ge.shadowroot||ge.shadowrootmod)&&(i=oe.call(r,i,!0)),i}let p=Oe?t.outerHTML:t.innerHTML;return Oe&&de[\"!doctype\"]&&t.ownerDocument&&t.ownerDocument.doctype&&t.ownerDocument.doctype.name&&b(W,t.ownerDocument.doctype.name)&&(p=\"<!DOCTYPE \"+t.ownerDocument.doctype.name+\">\\n\"+p),je&&(p=g(p,ie,\" \"),p=g(p,ae,\" \"),p=g(p,le,\" \")),X&&Ne?X.createHTML(p):p},n.setConfig=function(e){ot(e),ke=!0},n.clearConfig=function(){tt=null,ke=!1},n.isValidAttribute=function(e,t,n){tt||ot({});const r=et(e),o=et(t);return bt(r,o,n)},n.addHook=function(e,t){\"function\"==typeof t&&(se[e]=se[e]||[],h(se[e],t))},n.removeHook=function(e){if(se[e])return p(se[e])},n.removeHooks=function(e){se[e]&&(se[e]=[])},n.removeAllHooks=function(){se={}},n}return G()}()},69450:e=>{\"use strict\";class t{constructor(e,t){this.low=e,this.high=t,this.length=1+t-e}overlaps(e){return!(this.high<e.low||this.low>e.high)}touches(e){return!(this.high+1<e.low||this.low-1>e.high)}add(e){return new t(Math.min(this.low,e.low),Math.max(this.high,e.high))}subtract(e){return e.low<=this.low&&e.high>=this.high?[]:e.low>this.low&&e.high<this.high?[new t(this.low,e.low-1),new t(e.high+1,this.high)]:e.low<=this.low?[new t(e.high+1,this.high)]:[new t(this.low,e.low-1)]}toString(){return this.low==this.high?this.low.toString():this.low+\"-\"+this.high}}class n{constructor(e,t){this.ranges=[],this.length=0,null!=e&&this.add(e,t)}_update_length(){this.length=this.ranges.reduce(((e,t)=>e+t.length),0)}add(e,r){var o=e=>{for(var t=0;t<this.ranges.length&&!e.touches(this.ranges[t]);)t++;for(var n=this.ranges.slice(0,t);t<this.ranges.length&&e.touches(this.ranges[t]);)e=e.add(this.ranges[t]),t++;n.push(e),this.ranges=n.concat(this.ranges.slice(t)),this._update_length()};return e instanceof n?e.ranges.forEach(o):(null==r&&(r=e),o(new t(e,r))),this}subtract(e,r){var o=e=>{for(var t=0;t<this.ranges.length&&!e.overlaps(this.ranges[t]);)t++;for(var n=this.ranges.slice(0,t);t<this.ranges.length&&e.overlaps(this.ranges[t]);)n=n.concat(this.ranges[t].subtract(e)),t++;this.ranges=n.concat(this.ranges.slice(t)),this._update_length()};return e instanceof n?e.ranges.forEach(o):(null==r&&(r=e),o(new t(e,r))),this}intersect(e,r){var o=[],s=e=>{for(var n=0;n<this.ranges.length&&!e.overlaps(this.ranges[n]);)n++;for(;n<this.ranges.length&&e.overlaps(this.ranges[n]);){var r=Math.max(this.ranges[n].low,e.low),s=Math.min(this.ranges[n].high,e.high);o.push(new t(r,s)),n++}};return e instanceof n?e.ranges.forEach(s):(null==r&&(r=e),s(new t(e,r))),this.ranges=o,this._update_length(),this}index(e){for(var t=0;t<this.ranges.length&&this.ranges[t].length<=e;)e-=this.ranges[t].length,t++;return this.ranges[t].low+e}toString(){return\"[ \"+this.ranges.join(\", \")+\" ]\"}clone(){return new n(this)}numbers(){return this.ranges.reduce(((e,t)=>{for(var n=t.low;n<=t.high;)e.push(n),n++;return e}),[])}subranges(){return this.ranges.map((e=>({low:e.low,high:e.high,length:1+e.high-e.low})))}}e.exports=n},17187:e=>{\"use strict\";var t,n=\"object\"==typeof Reflect?Reflect:null,r=n&&\"function\"==typeof n.apply?n.apply:function(e,t,n){return Function.prototype.apply.call(e,t,n)};t=n&&\"function\"==typeof n.ownKeys?n.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var o=Number.isNaN||function(e){return e!=e};function s(){s.init.call(this)}e.exports=s,e.exports.once=function(e,t){return new Promise((function(n,r){function o(n){e.removeListener(t,s),r(n)}function s(){\"function\"==typeof e.removeListener&&e.removeListener(\"error\",o),n([].slice.call(arguments))}m(e,t,s,{once:!0}),\"error\"!==t&&function(e,t,n){\"function\"==typeof e.on&&m(e,\"error\",t,n)}(e,o,{once:!0})}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var i=10;function a(e){if(\"function\"!=typeof e)throw new TypeError('The \"listener\" argument must be of type Function. Received type '+typeof e)}function l(e){return void 0===e._maxListeners?s.defaultMaxListeners:e._maxListeners}function c(e,t,n,r){var o,s,i,c;if(a(n),void 0===(s=e._events)?(s=e._events=Object.create(null),e._eventsCount=0):(void 0!==s.newListener&&(e.emit(\"newListener\",t,n.listener?n.listener:n),s=e._events),i=s[t]),void 0===i)i=s[t]=n,++e._eventsCount;else if(\"function\"==typeof i?i=s[t]=r?[n,i]:[i,n]:r?i.unshift(n):i.push(n),(o=l(e))>0&&i.length>o&&!i.warned){i.warned=!0;var u=new Error(\"Possible EventEmitter memory leak detected. \"+i.length+\" \"+String(t)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");u.name=\"MaxListenersExceededWarning\",u.emitter=e,u.type=t,u.count=i.length,c=u,console&&console.warn&&console.warn(c)}return e}function u(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(e,t,n){var r={fired:!1,wrapFn:void 0,target:e,type:t,listener:n},o=u.bind(r);return o.listener=n,r.wrapFn=o,o}function h(e,t,n){var r=e._events;if(void 0===r)return[];var o=r[t];return void 0===o?[]:\"function\"==typeof o?n?[o.listener||o]:[o]:n?function(e){for(var t=new Array(e.length),n=0;n<t.length;++n)t[n]=e[n].listener||e[n];return t}(o):d(o,o.length)}function f(e){var t=this._events;if(void 0!==t){var n=t[e];if(\"function\"==typeof n)return 1;if(void 0!==n)return n.length}return 0}function d(e,t){for(var n=new Array(t),r=0;r<t;++r)n[r]=e[r];return n}function m(e,t,n,r){if(\"function\"==typeof e.on)r.once?e.once(t,n):e.on(t,n);else{if(\"function\"!=typeof e.addEventListener)throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type '+typeof e);e.addEventListener(t,(function o(s){r.once&&e.removeEventListener(t,o),n(s)}))}}Object.defineProperty(s,\"defaultMaxListeners\",{enumerable:!0,get:function(){return i},set:function(e){if(\"number\"!=typeof e||e<0||o(e))throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received '+e+\".\");i=e}}),s.init=function(){void 0!==this._events&&this._events!==Object.getPrototypeOf(this)._events||(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},s.prototype.setMaxListeners=function(e){if(\"number\"!=typeof e||e<0||o(e))throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received '+e+\".\");return this._maxListeners=e,this},s.prototype.getMaxListeners=function(){return l(this)},s.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t.push(arguments[n]);var o=\"error\"===e,s=this._events;if(void 0!==s)o=o&&void 0===s.error;else if(!o)return!1;if(o){var i;if(t.length>0&&(i=t[0]),i instanceof Error)throw i;var a=new Error(\"Unhandled error.\"+(i?\" (\"+i.message+\")\":\"\"));throw a.context=i,a}var l=s[e];if(void 0===l)return!1;if(\"function\"==typeof l)r(l,this,t);else{var c=l.length,u=d(l,c);for(n=0;n<c;++n)r(u[n],this,t)}return!0},s.prototype.addListener=function(e,t){return c(this,e,t,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(e,t){return c(this,e,t,!0)},s.prototype.once=function(e,t){return a(t),this.on(e,p(this,e,t)),this},s.prototype.prependOnceListener=function(e,t){return a(t),this.prependListener(e,p(this,e,t)),this},s.prototype.removeListener=function(e,t){var n,r,o,s,i;if(a(t),void 0===(r=this._events))return this;if(void 0===(n=r[e]))return this;if(n===t||n.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete r[e],r.removeListener&&this.emit(\"removeListener\",e,n.listener||t));else if(\"function\"!=typeof n){for(o=-1,s=n.length-1;s>=0;s--)if(n[s]===t||n[s].listener===t){i=n[s].listener,o=s;break}if(o<0)return this;0===o?n.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(n,o),1===n.length&&(r[e]=n[0]),void 0!==r.removeListener&&this.emit(\"removeListener\",e,i||t)}return this},s.prototype.off=s.prototype.removeListener,s.prototype.removeAllListeners=function(e){var t,n,r;if(void 0===(n=this._events))return this;if(void 0===n.removeListener)return 0===arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==n[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete n[e]),this;if(0===arguments.length){var o,s=Object.keys(n);for(r=0;r<s.length;++r)\"removeListener\"!==(o=s[r])&&this.removeAllListeners(o);return this.removeAllListeners(\"removeListener\"),this._events=Object.create(null),this._eventsCount=0,this}if(\"function\"==typeof(t=n[e]))this.removeListener(e,t);else if(void 0!==t)for(r=t.length-1;r>=0;r--)this.removeListener(e,t[r]);return this},s.prototype.listeners=function(e){return h(this,e,!0)},s.prototype.rawListeners=function(e){return h(this,e,!1)},s.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):f.call(e,t)},s.prototype.listenerCount=f,s.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},21102:(e,t,n)=>{\"use strict\";var r=n(46291),o=s(Error);function s(e){return t.displayName=e.displayName||e.name,t;function t(t){return t&&(t=r.apply(null,arguments)),new e(t)}}e.exports=o,o.eval=s(EvalError),o.range=s(RangeError),o.reference=s(ReferenceError),o.syntax=s(SyntaxError),o.type=s(TypeError),o.uri=s(URIError),o.create=s},46291:e=>{!function(){var t;function n(e){for(var t,n,r,o,s=1,i=[].slice.call(arguments),a=0,l=e.length,c=\"\",u=!1,p=!1,h=function(){return i[s++]},f=function(){for(var n=\"\";/\\d/.test(e[a]);)n+=e[a++],t=e[a];return n.length>0?parseInt(n):null};a<l;++a)if(t=e[a],u)switch(u=!1,\".\"==t?(p=!1,t=e[++a]):\"0\"==t&&\".\"==e[a+1]?(p=!0,t=e[a+=2]):p=!0,o=f(),t){case\"b\":c+=parseInt(h(),10).toString(2);break;case\"c\":c+=\"string\"==typeof(n=h())||n instanceof String?n:String.fromCharCode(parseInt(n,10));break;case\"d\":c+=parseInt(h(),10);break;case\"f\":r=String(parseFloat(h()).toFixed(o||6)),c+=p?r:r.replace(/^0/,\"\");break;case\"j\":c+=JSON.stringify(h());break;case\"o\":c+=\"0\"+parseInt(h(),10).toString(8);break;case\"s\":c+=h();break;case\"x\":c+=\"0x\"+parseInt(h(),10).toString(16);break;case\"X\":c+=\"0x\"+parseInt(h(),10).toString(16).toUpperCase();break;default:c+=t}else\"%\"===t?u=!0:c+=t;return c}(t=e.exports=n).format=n,t.vsprintf=function(e,t){return n.apply(null,[e].concat(t))},\"undefined\"!=typeof console&&\"function\"==typeof console.log&&(t.printf=function(){console.log(n.apply(null,arguments))})}()},17648:e=>{\"use strict\";var t=Array.prototype.slice,n=Object.prototype.toString;e.exports=function(e){var r=this;if(\"function\"!=typeof r||\"[object Function]\"!==n.call(r))throw new TypeError(\"Function.prototype.bind called on incompatible \"+r);for(var o,s=t.call(arguments,1),i=Math.max(0,r.length-s.length),a=[],l=0;l<i;l++)a.push(\"$\"+l);if(o=Function(\"binder\",\"return function (\"+a.join(\",\")+\"){ return binder.apply(this,arguments); }\")((function(){if(this instanceof o){var n=r.apply(this,s.concat(t.call(arguments)));return Object(n)===n?n:this}return r.apply(e,s.concat(t.call(arguments)))})),r.prototype){var c=function(){};c.prototype=r.prototype,o.prototype=new c,c.prototype=null}return o}},58612:(e,t,n)=>{\"use strict\";var r=n(17648);e.exports=Function.prototype.bind||r},40210:(e,t,n)=>{\"use strict\";var r,o=SyntaxError,s=Function,i=TypeError,a=function(e){try{return s('\"use strict\"; return ('+e+\").constructor;\")()}catch(e){}},l=Object.getOwnPropertyDescriptor;if(l)try{l({},\"\")}catch(e){l=null}var c=function(){throw new i},u=l?function(){try{return c}catch(e){try{return l(arguments,\"callee\").get}catch(e){return c}}}():c,p=n(41405)(),h=n(28185)(),f=Object.getPrototypeOf||(h?function(e){return e.__proto__}:null),d={},m=\"undefined\"!=typeof Uint8Array&&f?f(Uint8Array):r,g={\"%AggregateError%\":\"undefined\"==typeof AggregateError?r:AggregateError,\"%Array%\":Array,\"%ArrayBuffer%\":\"undefined\"==typeof ArrayBuffer?r:ArrayBuffer,\"%ArrayIteratorPrototype%\":p&&f?f([][Symbol.iterator]()):r,\"%AsyncFromSyncIteratorPrototype%\":r,\"%AsyncFunction%\":d,\"%AsyncGenerator%\":d,\"%AsyncGeneratorFunction%\":d,\"%AsyncIteratorPrototype%\":d,\"%Atomics%\":\"undefined\"==typeof Atomics?r:Atomics,\"%BigInt%\":\"undefined\"==typeof BigInt?r:BigInt,\"%BigInt64Array%\":\"undefined\"==typeof BigInt64Array?r:BigInt64Array,\"%BigUint64Array%\":\"undefined\"==typeof BigUint64Array?r:BigUint64Array,\"%Boolean%\":Boolean,\"%DataView%\":\"undefined\"==typeof DataView?r:DataView,\"%Date%\":Date,\"%decodeURI%\":decodeURI,\"%decodeURIComponent%\":decodeURIComponent,\"%encodeURI%\":encodeURI,\"%encodeURIComponent%\":encodeURIComponent,\"%Error%\":Error,\"%eval%\":eval,\"%EvalError%\":EvalError,\"%Float32Array%\":\"undefined\"==typeof Float32Array?r:Float32Array,\"%Float64Array%\":\"undefined\"==typeof Float64Array?r:Float64Array,\"%FinalizationRegistry%\":\"undefined\"==typeof FinalizationRegistry?r:FinalizationRegistry,\"%Function%\":s,\"%GeneratorFunction%\":d,\"%Int8Array%\":\"undefined\"==typeof Int8Array?r:Int8Array,\"%Int16Array%\":\"undefined\"==typeof Int16Array?r:Int16Array,\"%Int32Array%\":\"undefined\"==typeof Int32Array?r:Int32Array,\"%isFinite%\":isFinite,\"%isNaN%\":isNaN,\"%IteratorPrototype%\":p&&f?f(f([][Symbol.iterator]())):r,\"%JSON%\":\"object\"==typeof JSON?JSON:r,\"%Map%\":\"undefined\"==typeof Map?r:Map,\"%MapIteratorPrototype%\":\"undefined\"!=typeof Map&&p&&f?f((new Map)[Symbol.iterator]()):r,\"%Math%\":Math,\"%Number%\":Number,\"%Object%\":Object,\"%parseFloat%\":parseFloat,\"%parseInt%\":parseInt,\"%Promise%\":\"undefined\"==typeof Promise?r:Promise,\"%Proxy%\":\"undefined\"==typeof Proxy?r:Proxy,\"%RangeError%\":RangeError,\"%ReferenceError%\":ReferenceError,\"%Reflect%\":\"undefined\"==typeof Reflect?r:Reflect,\"%RegExp%\":RegExp,\"%Set%\":\"undefined\"==typeof Set?r:Set,\"%SetIteratorPrototype%\":\"undefined\"!=typeof Set&&p&&f?f((new Set)[Symbol.iterator]()):r,\"%SharedArrayBuffer%\":\"undefined\"==typeof SharedArrayBuffer?r:SharedArrayBuffer,\"%String%\":String,\"%StringIteratorPrototype%\":p&&f?f(\"\"[Symbol.iterator]()):r,\"%Symbol%\":p?Symbol:r,\"%SyntaxError%\":o,\"%ThrowTypeError%\":u,\"%TypedArray%\":m,\"%TypeError%\":i,\"%Uint8Array%\":\"undefined\"==typeof Uint8Array?r:Uint8Array,\"%Uint8ClampedArray%\":\"undefined\"==typeof Uint8ClampedArray?r:Uint8ClampedArray,\"%Uint16Array%\":\"undefined\"==typeof Uint16Array?r:Uint16Array,\"%Uint32Array%\":\"undefined\"==typeof Uint32Array?r:Uint32Array,\"%URIError%\":URIError,\"%WeakMap%\":\"undefined\"==typeof WeakMap?r:WeakMap,\"%WeakRef%\":\"undefined\"==typeof WeakRef?r:WeakRef,\"%WeakSet%\":\"undefined\"==typeof WeakSet?r:WeakSet};if(f)try{null.error}catch(e){var y=f(f(e));g[\"%Error.prototype%\"]=y}var v=function e(t){var n;if(\"%AsyncFunction%\"===t)n=a(\"async function () {}\");else if(\"%GeneratorFunction%\"===t)n=a(\"function* () {}\");else if(\"%AsyncGeneratorFunction%\"===t)n=a(\"async function* () {}\");else if(\"%AsyncGenerator%\"===t){var r=e(\"%AsyncGeneratorFunction%\");r&&(n=r.prototype)}else if(\"%AsyncIteratorPrototype%\"===t){var o=e(\"%AsyncGenerator%\");o&&f&&(n=f(o.prototype))}return g[t]=n,n},b={\"%ArrayBufferPrototype%\":[\"ArrayBuffer\",\"prototype\"],\"%ArrayPrototype%\":[\"Array\",\"prototype\"],\"%ArrayProto_entries%\":[\"Array\",\"prototype\",\"entries\"],\"%ArrayProto_forEach%\":[\"Array\",\"prototype\",\"forEach\"],\"%ArrayProto_keys%\":[\"Array\",\"prototype\",\"keys\"],\"%ArrayProto_values%\":[\"Array\",\"prototype\",\"values\"],\"%AsyncFunctionPrototype%\":[\"AsyncFunction\",\"prototype\"],\"%AsyncGenerator%\":[\"AsyncGeneratorFunction\",\"prototype\"],\"%AsyncGeneratorPrototype%\":[\"AsyncGeneratorFunction\",\"prototype\",\"prototype\"],\"%BooleanPrototype%\":[\"Boolean\",\"prototype\"],\"%DataViewPrototype%\":[\"DataView\",\"prototype\"],\"%DatePrototype%\":[\"Date\",\"prototype\"],\"%ErrorPrototype%\":[\"Error\",\"prototype\"],\"%EvalErrorPrototype%\":[\"EvalError\",\"prototype\"],\"%Float32ArrayPrototype%\":[\"Float32Array\",\"prototype\"],\"%Float64ArrayPrototype%\":[\"Float64Array\",\"prototype\"],\"%FunctionPrototype%\":[\"Function\",\"prototype\"],\"%Generator%\":[\"GeneratorFunction\",\"prototype\"],\"%GeneratorPrototype%\":[\"GeneratorFunction\",\"prototype\",\"prototype\"],\"%Int8ArrayPrototype%\":[\"Int8Array\",\"prototype\"],\"%Int16ArrayPrototype%\":[\"Int16Array\",\"prototype\"],\"%Int32ArrayPrototype%\":[\"Int32Array\",\"prototype\"],\"%JSONParse%\":[\"JSON\",\"parse\"],\"%JSONStringify%\":[\"JSON\",\"stringify\"],\"%MapPrototype%\":[\"Map\",\"prototype\"],\"%NumberPrototype%\":[\"Number\",\"prototype\"],\"%ObjectPrototype%\":[\"Object\",\"prototype\"],\"%ObjProto_toString%\":[\"Object\",\"prototype\",\"toString\"],\"%ObjProto_valueOf%\":[\"Object\",\"prototype\",\"valueOf\"],\"%PromisePrototype%\":[\"Promise\",\"prototype\"],\"%PromiseProto_then%\":[\"Promise\",\"prototype\",\"then\"],\"%Promise_all%\":[\"Promise\",\"all\"],\"%Promise_reject%\":[\"Promise\",\"reject\"],\"%Promise_resolve%\":[\"Promise\",\"resolve\"],\"%RangeErrorPrototype%\":[\"RangeError\",\"prototype\"],\"%ReferenceErrorPrototype%\":[\"ReferenceError\",\"prototype\"],\"%RegExpPrototype%\":[\"RegExp\",\"prototype\"],\"%SetPrototype%\":[\"Set\",\"prototype\"],\"%SharedArrayBufferPrototype%\":[\"SharedArrayBuffer\",\"prototype\"],\"%StringPrototype%\":[\"String\",\"prototype\"],\"%SymbolPrototype%\":[\"Symbol\",\"prototype\"],\"%SyntaxErrorPrototype%\":[\"SyntaxError\",\"prototype\"],\"%TypedArrayPrototype%\":[\"TypedArray\",\"prototype\"],\"%TypeErrorPrototype%\":[\"TypeError\",\"prototype\"],\"%Uint8ArrayPrototype%\":[\"Uint8Array\",\"prototype\"],\"%Uint8ClampedArrayPrototype%\":[\"Uint8ClampedArray\",\"prototype\"],\"%Uint16ArrayPrototype%\":[\"Uint16Array\",\"prototype\"],\"%Uint32ArrayPrototype%\":[\"Uint32Array\",\"prototype\"],\"%URIErrorPrototype%\":[\"URIError\",\"prototype\"],\"%WeakMapPrototype%\":[\"WeakMap\",\"prototype\"],\"%WeakSetPrototype%\":[\"WeakSet\",\"prototype\"]},w=n(58612),E=n(17642),x=w.call(Function.call,Array.prototype.concat),S=w.call(Function.apply,Array.prototype.splice),_=w.call(Function.call,String.prototype.replace),j=w.call(Function.call,String.prototype.slice),O=w.call(Function.call,RegExp.prototype.exec),k=/[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g,A=/\\\\(\\\\)?/g,C=function(e,t){var n,r=e;if(E(b,r)&&(r=\"%\"+(n=b[r])[0]+\"%\"),E(g,r)){var s=g[r];if(s===d&&(s=v(r)),void 0===s&&!t)throw new i(\"intrinsic \"+e+\" exists, but is not available. Please file an issue!\");return{alias:n,name:r,value:s}}throw new o(\"intrinsic \"+e+\" does not exist!\")};e.exports=function(e,t){if(\"string\"!=typeof e||0===e.length)throw new i(\"intrinsic name must be a non-empty string\");if(arguments.length>1&&\"boolean\"!=typeof t)throw new i('\"allowMissing\" argument must be a boolean');if(null===O(/^%?[^%]*%?$/,e))throw new o(\"`%` may not be present anywhere but at the beginning and end of the intrinsic name\");var n=function(e){var t=j(e,0,1),n=j(e,-1);if(\"%\"===t&&\"%\"!==n)throw new o(\"invalid intrinsic syntax, expected closing `%`\");if(\"%\"===n&&\"%\"!==t)throw new o(\"invalid intrinsic syntax, expected opening `%`\");var r=[];return _(e,k,(function(e,t,n,o){r[r.length]=n?_(o,A,\"$1\"):t||e})),r}(e),r=n.length>0?n[0]:\"\",s=C(\"%\"+r+\"%\",t),a=s.name,c=s.value,u=!1,p=s.alias;p&&(r=p[0],S(n,x([0,1],p)));for(var h=1,f=!0;h<n.length;h+=1){var d=n[h],m=j(d,0,1),y=j(d,-1);if(('\"'===m||\"'\"===m||\"`\"===m||'\"'===y||\"'\"===y||\"`\"===y)&&m!==y)throw new o(\"property names with quotes must have matching quotes\");if(\"constructor\"!==d&&f||(u=!0),E(g,a=\"%\"+(r+=\".\"+d)+\"%\"))c=g[a];else if(null!=c){if(!(d in c)){if(!t)throw new i(\"base intrinsic for \"+e+\" exists, but the property is not available.\");return}if(l&&h+1>=n.length){var v=l(c,d);c=(f=!!v)&&\"get\"in v&&!(\"originalValue\"in v.get)?v.get:c[d]}else f=E(c,d),c=c[d];f&&!u&&(g[a]=c)}}return c}},28185:e=>{\"use strict\";var t={foo:{}},n=Object;e.exports=function(){return{__proto__:t}.foo===t.foo&&!({__proto__:null}instanceof n)}},41405:(e,t,n)=>{\"use strict\";var r=\"undefined\"!=typeof Symbol&&Symbol,o=n(55419);e.exports=function(){return\"function\"==typeof r&&(\"function\"==typeof Symbol&&(\"symbol\"==typeof r(\"foo\")&&(\"symbol\"==typeof Symbol(\"bar\")&&o())))}},55419:e=>{\"use strict\";e.exports=function(){if(\"function\"!=typeof Symbol||\"function\"!=typeof Object.getOwnPropertySymbols)return!1;if(\"symbol\"==typeof Symbol.iterator)return!0;var e={},t=Symbol(\"test\"),n=Object(t);if(\"string\"==typeof t)return!1;if(\"[object Symbol]\"!==Object.prototype.toString.call(t))return!1;if(\"[object Symbol]\"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if(\"function\"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if(\"function\"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if(\"function\"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},17642:(e,t,n)=>{\"use strict\";var r=n(58612);e.exports=r.call(Function.call,Object.prototype.hasOwnProperty)},47802:e=>{function t(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error(\"map is read-only\")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error(\"set is read-only\")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(n){var r=e[n];\"object\"!=typeof r||Object.isFrozen(r)||t(r)})),e}var n=t,r=t;n.default=r;class o{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function s(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\")}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t];return t.forEach((function(e){for(const t in e)n[t]=e[t]})),n}const a=e=>!!e.kind;class l{constructor(e,t){this.buffer=\"\",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){this.buffer+=s(e)}openNode(e){if(!a(e))return;let t=e.kind;e.sublanguage||(t=`${this.classPrefix}${t}`),this.span(t)}closeNode(e){a(e)&&(this.buffer+=\"</span>\")}value(){return this.buffer}span(e){this.buffer+=`<span class=\"${e}\">`}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const t={kind:e,children:[]};this.add(t),this.stack.push(t)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){return\"string\"==typeof t?e.addText(t):t.children&&(e.openNode(t),t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){\"string\"!=typeof e&&e.children&&(e.children.every((e=>\"string\"==typeof e))?e.children=[e.children.join(\"\")]:e.children.forEach((e=>{c._collapse(e)})))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,t){\"\"!==e&&(this.openNode(t),this.addText(e),this.closeNode())}addText(e){\"\"!==e&&this.add(e)}addSublanguage(e,t){const n=e.root;n.kind=t,n.sublanguage=!0,this.add(n)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function p(e){return e?\"string\"==typeof e?e:e.source:null}const h=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;const f=\"[a-zA-Z]\\\\w*\",d=\"[a-zA-Z_]\\\\w*\",m=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",g=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",y=\"\\\\b(0b[01]+)\",v={begin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},b={className:\"string\",begin:\"'\",end:\"'\",illegal:\"\\\\n\",contains:[v]},w={className:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",contains:[v]},E={begin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},x=function(e,t,n={}){const r=i({className:\"comment\",begin:e,end:t,contains:[]},n);return r.contains.push(E),r.contains.push({className:\"doctag\",begin:\"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):\",relevance:0}),r},S=x(\"//\",\"$\"),_=x(\"/\\\\*\",\"\\\\*/\"),j=x(\"#\",\"$\"),O={className:\"number\",begin:m,relevance:0},k={className:\"number\",begin:g,relevance:0},A={className:\"number\",begin:y,relevance:0},C={className:\"number\",begin:m+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",relevance:0},P={begin:/(?=\\/[^/\\n]*\\/)/,contains:[{className:\"regexp\",begin:/\\//,end:/\\/[gimuy]*/,illegal:/\\n/,contains:[v,{begin:/\\[/,end:/\\]/,relevance:0,contains:[v]}]}]},N={className:\"title\",begin:f,relevance:0},I={className:\"title\",begin:d,relevance:0},T={begin:\"\\\\.\\\\s*\"+d,relevance:0};var R=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\\b\\B/,IDENT_RE:f,UNDERSCORE_IDENT_RE:d,NUMBER_RE:m,C_NUMBER_RE:g,BINARY_NUMBER_RE:y,RE_STARTERS_RE:\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",SHEBANG:(e={})=>{const t=/^#![ ]*\\//;return e.binary&&(e.begin=function(...e){return e.map((e=>p(e))).join(\"\")}(t,/.*\\b/,e.binary,/\\b.*/)),i({className:\"meta\",begin:t,end:/$/,relevance:0,\"on:begin\":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},BACKSLASH_ESCAPE:v,APOS_STRING_MODE:b,QUOTE_STRING_MODE:w,PHRASAL_WORDS_MODE:E,COMMENT:x,C_LINE_COMMENT_MODE:S,C_BLOCK_COMMENT_MODE:_,HASH_COMMENT_MODE:j,NUMBER_MODE:O,C_NUMBER_MODE:k,BINARY_NUMBER_MODE:A,CSS_NUMBER_MODE:C,REGEXP_MODE:P,TITLE_MODE:N,UNDERSCORE_TITLE_MODE:I,METHOD_GUARD:T,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{\"on:begin\":(e,t)=>{t.data._beginMatch=e[1]},\"on:end\":(e,t)=>{t.data._beginMatch!==e[1]&&t.ignoreMatch()}})}});function M(e,t){\".\"===e.input[e.index-1]&&t.ignoreMatch()}function D(e,t){t&&e.beginKeywords&&(e.begin=\"\\\\b(\"+e.beginKeywords.split(\" \").join(\"|\")+\")(?!\\\\.)(?=\\\\b|\\\\s)\",e.__beforeBegin=M,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function F(e,t){Array.isArray(e.illegal)&&(e.illegal=function(...e){return\"(\"+e.map((e=>p(e))).join(\"|\")+\")\"}(...e.illegal))}function L(e,t){if(e.match){if(e.begin||e.end)throw new Error(\"begin & end are not supported with match\");e.begin=e.match,delete e.match}}function B(e,t){void 0===e.relevance&&(e.relevance=1)}const $=[\"of\",\"and\",\"for\",\"in\",\"not\",\"or\",\"if\",\"then\",\"parent\",\"list\",\"value\"],q=\"keyword\";function U(e,t,n=q){const r={};return\"string\"==typeof e?o(n,e.split(\" \")):Array.isArray(e)?o(n,e):Object.keys(e).forEach((function(n){Object.assign(r,U(e[n],t,n))})),r;function o(e,n){t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((function(t){const n=t.split(\"|\");r[n[0]]=[e,z(n[0],n[1])]}))}}function z(e,t){return t?Number(t):function(e){return $.includes(e.toLowerCase())}(e)?0:1}function V(e,{plugins:t}){function n(t,n){return new RegExp(p(t),\"m\"+(e.case_insensitive?\"i\":\"\")+(n?\"g\":\"\"))}class r{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,t){t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),this.matchAt+=function(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=n(function(e,t=\"|\"){let n=0;return e.map((e=>{n+=1;const t=n;let r=p(e),o=\"\";for(;r.length>0;){const e=h.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),\"\\\\\"===e[0][0]&&e[1]?o+=\"\\\\\"+String(Number(e[1])+t):(o+=e[0],\"(\"===e[0]&&n++)}return o})).map((e=>`(${e})`)).join(t)}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const t=this.matcherRe.exec(e);if(!t)return null;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),r=this.matchIndexes[n];return t.splice(0,n),Object.assign(t,r)}}class o{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const t=new r;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){this.rules.push([e,t]),\"begin\"===t.type&&this.count++}exec(e){const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex;let n=t.exec(e);if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}return n&&(this.regexIndex+=n.position+1,this.regexIndex===this.count&&this.considerAll()),n}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes(\"self\"))throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");return e.classNameAliases=i(e.classNameAliases||{}),function t(r,s){const a=r;if(r.isCompiled)return a;[L].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))),r.__beforeBegin=null,[D,F,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null;if(\"object\"==typeof r.keywords&&(l=r.keywords.$pattern,delete r.keywords.$pattern),r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)),r.lexemes&&l)throw new Error(\"ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) \");return l=l||r.lexemes||/\\w+/,a.keywordPatternRe=n(l,!0),s&&(r.begin||(r.begin=/\\B|\\b/),a.beginRe=n(r.begin),r.endSameAsBegin&&(r.end=r.begin),r.end||r.endsWithParent||(r.end=/\\B|\\b/),r.end&&(a.endRe=n(r.end)),a.terminatorEnd=p(r.end)||\"\",r.endsWithParent&&s.terminatorEnd&&(a.terminatorEnd+=(r.end?\"|\":\"\")+s.terminatorEnd)),r.illegal&&(a.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(t){return i(e,{variants:null},t)})));if(e.cachedVariants)return e.cachedVariants;if(W(e))return i(e,{starts:e.starts?i(e.starts):null});if(Object.isFrozen(e))return i(e);return e}(\"self\"===e?r:e)}))),r.contains.forEach((function(e){t(e,a)})),r.starts&&t(r.starts,s),a.matcher=function(e){const t=new o;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:\"begin\"}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:\"end\"}),e.illegal&&t.addRule(e.illegal,{type:\"illegal\"}),t}(a),a}(e)}function W(e){return!!e&&(e.endsWithParent||W(e.starts))}function J(e){const t={props:[\"language\",\"code\",\"autodetect\"],data:function(){return{detectedLanguage:\"\",unknownLanguage:!1}},computed:{className(){return this.unknownLanguage?\"\":\"hljs \"+this.detectedLanguage},highlighted(){if(!this.autoDetect&&!e.getLanguage(this.language))return console.warn(`The language \"${this.language}\" you specified could not be found.`),this.unknownLanguage=!0,s(this.code);let t={};return this.autoDetect?(t=e.highlightAuto(this.code),this.detectedLanguage=t.language):(t=e.highlight(this.language,this.code,this.ignoreIllegals),this.detectedLanguage=this.language),t.value},autoDetect(){return!this.language||(e=this.autodetect,Boolean(e||\"\"===e));var e},ignoreIllegals:()=>!0},render(e){return e(\"pre\",{},[e(\"code\",{class:this.className,domProps:{innerHTML:this.highlighted}})])}};return{Component:t,VuePlugin:{install(e){e.component(\"highlightjs\",t)}}}}const K={\"after:highlightElement\":({el:e,result:t,text:n})=>{const r=G(e);if(!r.length)return;const o=document.createElement(\"div\");o.innerHTML=t.value,t.value=function(e,t,n){let r=0,o=\"\";const i=[];function a(){return e.length&&t.length?e[0].offset!==t[0].offset?e[0].offset<t[0].offset?e:t:\"start\"===t[0].event?e:t:e.length?e:t}function l(e){function t(e){return\" \"+e.nodeName+'=\"'+s(e.value)+'\"'}o+=\"<\"+H(e)+[].map.call(e.attributes,t).join(\"\")+\">\"}function c(e){o+=\"</\"+H(e)+\">\"}function u(e){(\"start\"===e.event?l:c)(e.node)}for(;e.length||t.length;){let t=a();if(o+=s(n.substring(r,t[0].offset)),r=t[0].offset,t===e){i.reverse().forEach(c);do{u(t.splice(0,1)[0]),t=a()}while(t===e&&t.length&&t[0].offset===r);i.reverse().forEach(l)}else\"start\"===t[0].event?i.push(t[0].node):i.pop(),u(t.splice(0,1)[0])}return o+s(n.substr(r))}(r,G(o),n)}};function H(e){return e.nodeName.toLowerCase()}function G(e){const t=[];return function e(n,r){for(let o=n.firstChild;o;o=o.nextSibling)3===o.nodeType?r+=o.nodeValue.length:1===o.nodeType&&(t.push({event:\"start\",offset:r,node:o}),r=e(o,r),H(o).match(/br|hr|img|input/)||t.push({event:\"stop\",offset:r,node:o}));return r}(e,0),t}const Z={},Y=e=>{console.error(e)},X=(e,...t)=>{console.log(`WARN: ${e}`,...t)},Q=(e,t)=>{Z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),Z[`${e}/${t}`]=!0)},ee=s,te=i,ne=Symbol(\"nomatch\");var re=function(e){const t=Object.create(null),r=Object.create(null),s=[];let i=!0;const a=/(^(<[^>]+>|\\t|)+|\\n)/gm,l=\"Could not find the language '{}', did you forget to load/include a language module?\",c={disableAutodetect:!0,name:\"Plain text\",contains:[]};let p={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\\blang(?:uage)?-([\\w-]+)\\b/i,classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:null,__emitter:u};function h(e){return p.noHighlightRe.test(e)}function f(e,t,n,r){let o=\"\",s=\"\";\"object\"==typeof t?(o=e,n=t.ignoreIllegals,s=t.language,r=void 0):(Q(\"10.7.0\",\"highlight(lang, code, ...args) has been deprecated.\"),Q(\"10.7.0\",\"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\"),s=e,o=t);const i={code:o,language:s};O(\"before:highlight\",i);const a=i.result?i.result:d(i.language,i.code,n,r);return a.code=i.code,O(\"after:highlight\",a),a}function d(e,n,r,a){function c(e,t){const n=E.case_insensitive?t[0].toLowerCase():t[0];return Object.prototype.hasOwnProperty.call(e.keywords,n)&&e.keywords[n]}function u(){null!=j.subLanguage?function(){if(\"\"===A)return;let e=null;if(\"string\"==typeof j.subLanguage){if(!t[j.subLanguage])return void k.addText(A);e=d(j.subLanguage,A,!0,O[j.subLanguage]),O[j.subLanguage]=e.top}else e=m(A,j.subLanguage.length?j.subLanguage:null);j.relevance>0&&(C+=e.relevance),k.addSublanguage(e.emitter,e.language)}():function(){if(!j.keywords)return void k.addText(A);let e=0;j.keywordPatternRe.lastIndex=0;let t=j.keywordPatternRe.exec(A),n=\"\";for(;t;){n+=A.substring(e,t.index);const r=c(j,t);if(r){const[e,o]=r;if(k.addText(n),n=\"\",C+=o,e.startsWith(\"_\"))n+=t[0];else{const n=E.classNameAliases[e]||e;k.addKeyword(t[0],n)}}else n+=t[0];e=j.keywordPatternRe.lastIndex,t=j.keywordPatternRe.exec(A)}n+=A.substr(e),k.addText(n)}(),A=\"\"}function h(e){return e.className&&k.openNode(E.classNameAliases[e.className]||e.className),j=Object.create(e,{parent:{value:j}}),j}function f(e,t,n){let r=function(e,t){const n=e&&e.exec(t);return n&&0===n.index}(e.endRe,n);if(r){if(e[\"on:end\"]){const n=new o(e);e[\"on:end\"](t,n),n.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return f(e.parent,t,n)}function g(e){return 0===j.matcher.regexIndex?(A+=e[0],1):(I=!0,0)}function y(e){const t=e[0],n=e.rule,r=new o(n),s=[n.__beforeBegin,n[\"on:begin\"]];for(const n of s)if(n&&(n(e,r),r.isMatchIgnored))return g(t);return n&&n.endSameAsBegin&&(n.endRe=new RegExp(t.replace(/[-/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"),\"m\")),n.skip?A+=t:(n.excludeBegin&&(A+=t),u(),n.returnBegin||n.excludeBegin||(A=t)),h(n),n.returnBegin?0:t.length}function v(e){const t=e[0],r=n.substr(e.index),o=f(j,e,r);if(!o)return ne;const s=j;s.skip?A+=t:(s.returnEnd||s.excludeEnd||(A+=t),u(),s.excludeEnd&&(A=t));do{j.className&&k.closeNode(),j.skip||j.subLanguage||(C+=j.relevance),j=j.parent}while(j!==o.parent);return o.starts&&(o.endSameAsBegin&&(o.starts.endRe=o.endRe),h(o.starts)),s.returnEnd?0:t.length}let b={};function w(t,o){const s=o&&o[0];if(A+=t,null==s)return u(),0;if(\"begin\"===b.type&&\"end\"===o.type&&b.index===o.index&&\"\"===s){if(A+=n.slice(o.index,o.index+1),!i){const t=new Error(\"0 width match regex\");throw t.languageName=e,t.badRule=b.rule,t}return 1}if(b=o,\"begin\"===o.type)return y(o);if(\"illegal\"===o.type&&!r){const e=new Error('Illegal lexeme \"'+s+'\" for mode \"'+(j.className||\"<unnamed>\")+'\"');throw e.mode=j,e}if(\"end\"===o.type){const e=v(o);if(e!==ne)return e}if(\"illegal\"===o.type&&\"\"===s)return 1;if(N>1e5&&N>3*o.index){throw new Error(\"potential infinite loop, way more iterations than matches\")}return A+=s,s.length}const E=S(e);if(!E)throw Y(l.replace(\"{}\",e)),new Error('Unknown language: \"'+e+'\"');const x=V(E,{plugins:s});let _=\"\",j=a||x;const O={},k=new p.__emitter(p);!function(){const e=[];for(let t=j;t!==E;t=t.parent)t.className&&e.unshift(t.className);e.forEach((e=>k.openNode(e)))}();let A=\"\",C=0,P=0,N=0,I=!1;try{for(j.matcher.considerAll();;){N++,I?I=!1:j.matcher.considerAll(),j.matcher.lastIndex=P;const e=j.matcher.exec(n);if(!e)break;const t=w(n.substring(P,e.index),e);P=e.index+t}return w(n.substr(P)),k.closeAllNodes(),k.finalize(),_=k.toHTML(),{relevance:Math.floor(C),value:_,language:e,illegal:!1,emitter:k,top:j}}catch(t){if(t.message&&t.message.includes(\"Illegal\"))return{illegal:!0,illegalBy:{msg:t.message,context:n.slice(P-100,P+100),mode:t.mode},sofar:_,relevance:0,value:ee(n),emitter:k};if(i)return{illegal:!1,relevance:0,value:ee(n),emitter:k,language:e,top:j,errorRaised:t};throw t}}function m(e,n){n=n||p.languages||Object.keys(t);const r=function(e){const t={relevance:0,emitter:new p.__emitter(p),value:ee(e),illegal:!1,top:c};return t.emitter.addText(e),t}(e),o=n.filter(S).filter(j).map((t=>d(t,e,!1)));o.unshift(r);const s=o.sort(((e,t)=>{if(e.relevance!==t.relevance)return t.relevance-e.relevance;if(e.language&&t.language){if(S(e.language).supersetOf===t.language)return 1;if(S(t.language).supersetOf===e.language)return-1}return 0})),[i,a]=s,l=i;return l.second_best=a,l}const g={\"before:highlightElement\":({el:e})=>{p.useBR&&(e.innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ /]*>/g,\"\\n\"))},\"after:highlightElement\":({result:e})=>{p.useBR&&(e.value=e.value.replace(/\\n/g,\"<br>\"))}},y=/^(<[^>]+>|\\t)+/gm,v={\"after:highlightElement\":({result:e})=>{p.tabReplace&&(e.value=e.value.replace(y,(e=>e.replace(/\\t/g,p.tabReplace))))}};function b(e){let t=null;const n=function(e){let t=e.className+\" \";t+=e.parentNode?e.parentNode.className:\"\";const n=p.languageDetectRe.exec(t);if(n){const t=S(n[1]);return t||(X(l.replace(\"{}\",n[1])),X(\"Falling back to no-highlight mode for this block.\",e)),t?n[1]:\"no-highlight\"}return t.split(/\\s+/).find((e=>h(e)||S(e)))}(e);if(h(n))return;O(\"before:highlightElement\",{el:e,language:n}),t=e;const o=t.textContent,s=n?f(o,{language:n,ignoreIllegals:!0}):m(o);O(\"after:highlightElement\",{el:e,result:s,text:o}),e.innerHTML=s.value,function(e,t,n){const o=t?r[t]:n;e.classList.add(\"hljs\"),o&&e.classList.add(o)}(e,n,s.language),e.result={language:s.language,re:s.relevance,relavance:s.relevance},s.second_best&&(e.second_best={language:s.second_best.language,re:s.second_best.relevance,relavance:s.second_best.relevance})}const w=()=>{if(w.called)return;w.called=!0,Q(\"10.6.0\",\"initHighlighting() is deprecated.  Use highlightAll() instead.\");document.querySelectorAll(\"pre code\").forEach(b)};let E=!1;function x(){if(\"loading\"===document.readyState)return void(E=!0);document.querySelectorAll(\"pre code\").forEach(b)}function S(e){return e=(e||\"\").toLowerCase(),t[e]||t[r[e]]}function _(e,{languageName:t}){\"string\"==typeof e&&(e=[e]),e.forEach((e=>{r[e.toLowerCase()]=t}))}function j(e){const t=S(e);return t&&!t.disableAutodetect}function O(e,t){const n=e;s.forEach((function(e){e[n]&&e[n](t)}))}\"undefined\"!=typeof window&&window.addEventListener&&window.addEventListener(\"DOMContentLoaded\",(function(){E&&x()}),!1),Object.assign(e,{highlight:f,highlightAuto:m,highlightAll:x,fixMarkup:function(e){return Q(\"10.2.0\",\"fixMarkup will be removed entirely in v11.0\"),Q(\"10.2.0\",\"Please see https://github.com/highlightjs/highlight.js/issues/2534\"),t=e,p.tabReplace||p.useBR?t.replace(a,(e=>\"\\n\"===e?p.useBR?\"<br>\":e:p.tabReplace?e.replace(/\\t/g,p.tabReplace):e)):t;var t},highlightElement:b,highlightBlock:function(e){return Q(\"10.7.0\",\"highlightBlock will be removed entirely in v12.0\"),Q(\"10.7.0\",\"Please use highlightElement now.\"),b(e)},configure:function(e){e.useBR&&(Q(\"10.3.0\",\"'useBR' will be removed entirely in v11.0\"),Q(\"10.3.0\",\"Please see https://github.com/highlightjs/highlight.js/issues/2559\")),p=te(p,e)},initHighlighting:w,initHighlightingOnLoad:function(){Q(\"10.6.0\",\"initHighlightingOnLoad() is deprecated.  Use highlightAll() instead.\"),E=!0},registerLanguage:function(n,r){let o=null;try{o=r(e)}catch(e){if(Y(\"Language definition for '{}' could not be registered.\".replace(\"{}\",n)),!i)throw e;Y(e),o=c}o.name||(o.name=n),t[n]=o,o.rawDefinition=r.bind(null,e),o.aliases&&_(o.aliases,{languageName:n})},unregisterLanguage:function(e){delete t[e];for(const t of Object.keys(r))r[t]===e&&delete r[t]},listLanguages:function(){return Object.keys(t)},getLanguage:S,registerAliases:_,requireLanguage:function(e){Q(\"10.4.0\",\"requireLanguage will be removed entirely in v11.\"),Q(\"10.4.0\",\"Please see https://github.com/highlightjs/highlight.js/pull/2844\");const t=S(e);if(t)return t;throw new Error(\"The '{}' language is required, but not loaded.\".replace(\"{}\",e))},autoDetection:j,inherit:te,addPlugin:function(e){!function(e){e[\"before:highlightBlock\"]&&!e[\"before:highlightElement\"]&&(e[\"before:highlightElement\"]=t=>{e[\"before:highlightBlock\"](Object.assign({block:t.el},t))}),e[\"after:highlightBlock\"]&&!e[\"after:highlightElement\"]&&(e[\"after:highlightElement\"]=t=>{e[\"after:highlightBlock\"](Object.assign({block:t.el},t))})}(e),s.push(e)},vuePlugin:J(e).VuePlugin}),e.debugMode=function(){i=!1},e.safeMode=function(){i=!0},e.versionString=\"10.7.3\";for(const e in R)\"object\"==typeof R[e]&&n(R[e]);return Object.assign(e,R),e.addPlugin(g),e.addPlugin(K),e.addPlugin(v),e}({});e.exports=re},61519:e=>{function t(...e){return e.map((e=>{return(t=e)?\"string\"==typeof t?t:t.source:null;var t})).join(\"\")}e.exports=function(e){const n={},r={begin:/\\$\\{/,end:/\\}/,contains:[\"self\",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:\"variable\",variants:[{begin:t(/\\$[\\w\\d#@][\\w\\d_]*/,\"(?![\\\\w\\\\d])(?![$])\")},r]});const o={className:\"subst\",begin:/\\$\\(/,end:/\\)/,contains:[e.BACKSLASH_ESCAPE]},s={begin:/<<-?\\s*(?=\\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\\w+)/,end:/(\\w+)/,className:\"string\"})]}},i={className:\"string\",begin:/\"/,end:/\"/,contains:[e.BACKSLASH_ESCAPE,n,o]};o.contains.push(i);const a={begin:/\\$\\(\\(/,end:/\\)\\)/,contains:[{begin:/\\d+#[0-9a-f]+/,className:\"number\"},e.NUMBER_MODE,n]},l=e.SHEBANG({binary:`(${[\"fish\",\"bash\",\"zsh\",\"sh\",\"csh\",\"ksh\",\"tcsh\",\"dash\",\"scsh\"].join(\"|\")})`,relevance:10}),c={className:\"function\",begin:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\\w[\\w\\d_]*/})],relevance:0};return{name:\"Bash\",aliases:[\"sh\",\"zsh\"],keywords:{$pattern:/\\b[a-z._-]+\\b/,keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\"},contains:[l,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,s,i,{className:\"\",begin:/\\\\\"/},{className:\"string\",begin:/'/,end:/'/},n]}}},30786:e=>{function t(...e){return e.map((e=>{return(t=e)?\"string\"==typeof t?t:t.source:null;var t})).join(\"\")}e.exports=function(e){const n=\"HTTP/(2|1\\\\.[01])\",r={className:\"attribute\",begin:t(\"^\",/[A-Za-z][A-Za-z0-9-]*/,\"(?=\\\\:\\\\s)\"),starts:{contains:[{className:\"punctuation\",begin:/: /,relevance:0,starts:{end:\"$\",relevance:0}}]}},o=[r,{begin:\"\\\\n\\\\n\",starts:{subLanguage:[],endsWithParent:!0}}];return{name:\"HTTP\",aliases:[\"https\"],illegal:/\\S/,contains:[{begin:\"^(?=\"+n+\" \\\\d{3})\",end:/$/,contains:[{className:\"meta\",begin:n},{className:\"number\",begin:\"\\\\b\\\\d{3}\\\\b\"}],starts:{end:/\\b\\B/,illegal:/\\S/,contains:o}},{begin:\"(?=^[A-Z]+ (.*?) \"+n+\"$)\",end:/$/,contains:[{className:\"string\",begin:\" \",end:\" \",excludeBegin:!0,excludeEnd:!0},{className:\"meta\",begin:n},{className:\"keyword\",begin:\"[A-Z]+\"}],starts:{end:/\\b\\B/,illegal:/\\S/,contains:o}},e.inherit(r,{relevance:0})]}}},96344:e=>{const t=\"[A-Za-z$_][0-9A-Za-z$_]*\",n=[\"as\",\"in\",\"of\",\"if\",\"for\",\"while\",\"finally\",\"var\",\"new\",\"function\",\"do\",\"return\",\"void\",\"else\",\"break\",\"catch\",\"instanceof\",\"with\",\"throw\",\"case\",\"default\",\"try\",\"switch\",\"continue\",\"typeof\",\"delete\",\"let\",\"yield\",\"const\",\"class\",\"debugger\",\"async\",\"await\",\"static\",\"import\",\"from\",\"export\",\"extends\"],r=[\"true\",\"false\",\"null\",\"undefined\",\"NaN\",\"Infinity\"],o=[].concat([\"setInterval\",\"setTimeout\",\"clearInterval\",\"clearTimeout\",\"require\",\"exports\",\"eval\",\"isFinite\",\"isNaN\",\"parseFloat\",\"parseInt\",\"decodeURI\",\"decodeURIComponent\",\"encodeURI\",\"encodeURIComponent\",\"escape\",\"unescape\"],[\"arguments\",\"this\",\"super\",\"console\",\"window\",\"document\",\"localStorage\",\"module\",\"global\"],[\"Intl\",\"DataView\",\"Number\",\"Math\",\"Date\",\"String\",\"RegExp\",\"Object\",\"Function\",\"Boolean\",\"Error\",\"Symbol\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\",\"Proxy\",\"Reflect\",\"JSON\",\"Promise\",\"Float64Array\",\"Int16Array\",\"Int32Array\",\"Int8Array\",\"Uint16Array\",\"Uint32Array\",\"Float32Array\",\"Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"ArrayBuffer\",\"BigInt64Array\",\"BigUint64Array\",\"BigInt\"],[\"EvalError\",\"InternalError\",\"RangeError\",\"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\"]);function s(e){return i(\"(?=\",e,\")\")}function i(...e){return e.map((e=>{return(t=e)?\"string\"==typeof t?t:t.source:null;var t})).join(\"\")}e.exports=function(e){const a=t,l=\"<>\",c=\"</>\",u={begin:/<[A-Za-z0-9\\\\._:-]+/,end:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,isTrulyOpeningTag:(e,t)=>{const n=e[0].length+e.index,r=e.input[n];\"<\"!==r?\">\"===r&&(((e,{after:t})=>{const n=\"</\"+e[0].slice(1);return-1!==e.input.indexOf(n,t)})(e,{after:n})||t.ignoreMatch()):t.ignoreMatch()}},p={$pattern:t,keyword:n,literal:r,built_in:o},h=\"[0-9](_?[0-9])*\",f=`\\\\.(${h})`,d=\"0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*\",m={className:\"number\",variants:[{begin:`(\\\\b(${d})((${f})|\\\\.)?|(${f}))[eE][+-]?(${h})\\\\b`},{begin:`\\\\b(${d})\\\\b((${f})\\\\b|\\\\.)?|(${f})\\\\b`},{begin:\"\\\\b(0|[1-9](_?[0-9])*)n\\\\b\"},{begin:\"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\"},{begin:\"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\"},{begin:\"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\"},{begin:\"\\\\b0[0-7]+n?\\\\b\"}],relevance:0},g={className:\"subst\",begin:\"\\\\$\\\\{\",end:\"\\\\}\",keywords:p,contains:[]},y={begin:\"html`\",end:\"\",starts:{end:\"`\",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:\"xml\"}},v={begin:\"css`\",end:\"\",starts:{end:\"`\",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,g],subLanguage:\"css\"}},b={className:\"string\",begin:\"`\",end:\"`\",contains:[e.BACKSLASH_ESCAPE,g]},w={className:\"comment\",variants:[e.COMMENT(/\\/\\*\\*(?!\\/)/,\"\\\\*/\",{relevance:0,contains:[{className:\"doctag\",begin:\"@[A-Za-z]+\",contains:[{className:\"type\",begin:\"\\\\{\",end:\"\\\\}\",relevance:0},{className:\"variable\",begin:a+\"(?=\\\\s*(-)|$)\",endsParent:!0,relevance:0},{begin:/(?=[^\\n])\\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},E=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,y,v,b,m,e.REGEXP_MODE];g.contains=E.concat({begin:/\\{/,end:/\\}/,keywords:p,contains:[\"self\"].concat(E)});const x=[].concat(w,g.contains),S=x.concat([{begin:/\\(/,end:/\\)/,keywords:p,contains:[\"self\"].concat(x)}]),_={className:\"params\",begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:S};return{name:\"Javascript\",aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],keywords:p,exports:{PARAMS_CONTAINS:S},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:\"shebang\",binary:\"node\",relevance:5}),{label:\"use_strict\",className:\"meta\",relevance:10,begin:/^\\s*['\"]use (strict|asm)['\"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,y,v,b,w,m,{begin:i(/[{,\\n]\\s*/,s(i(/(((\\/\\/.*$)|(\\/\\*(\\*[^/]|[^*])*\\*\\/))\\s*)*/,a+\"\\\\s*:\"))),relevance:0,contains:[{className:\"attr\",begin:a+s(\"\\\\s*:\"),relevance:0}]},{begin:\"(\"+e.RE_STARTERS_RE+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",keywords:\"return throw case\",contains:[w,e.REGEXP_MODE,{className:\"function\",begin:\"(\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)|\"+e.UNDERSCORE_IDENT_RE+\")\\\\s*=>\",returnBegin:!0,end:\"\\\\s*=>\",contains:[{className:\"params\",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:p,contains:S}]}]},{begin:/,/,relevance:0},{className:\"\",begin:/\\s/,end:/\\s*/,skip:!0},{variants:[{begin:l,end:c},{begin:u.begin,\"on:begin\":u.isTrulyOpeningTag,end:u.end}],subLanguage:\"xml\",contains:[{begin:u.begin,end:u.end,skip:!0,contains:[\"self\"]}]}],relevance:0},{className:\"function\",beginKeywords:\"function\",end:/[{;]/,excludeEnd:!0,keywords:p,contains:[\"self\",e.inherit(e.TITLE_MODE,{begin:a}),_],illegal:/%/},{beginKeywords:\"while if switch catch for\"},{className:\"function\",begin:e.UNDERSCORE_IDENT_RE+\"\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)\\\\s*\\\\{\",returnBegin:!0,contains:[_,e.inherit(e.TITLE_MODE,{begin:a})]},{variants:[{begin:\"\\\\.\"+a},{begin:\"\\\\$\"+a}],relevance:0},{className:\"class\",beginKeywords:\"class\",end:/[{;=]/,excludeEnd:!0,illegal:/[:\"[\\]]/,contains:[{beginKeywords:\"extends\"},e.UNDERSCORE_TITLE_MODE]},{begin:/\\b(?=constructor)/,end:/[{;]/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:a}),\"self\",_]},{begin:\"(get|set)\\\\s+(?=\"+a+\"\\\\()\",end:/\\{/,keywords:\"get set\",contains:[e.inherit(e.TITLE_MODE,{begin:a}),{begin:/\\(\\)/},_]},{begin:/\\$[(.]/}]}}},82026:e=>{e.exports=function(e){const t={literal:\"true false null\"},n=[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],r=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],o={end:\",\",endsWithParent:!0,excludeEnd:!0,contains:r,keywords:t},s={begin:/\\{/,end:/\\}/,contains:[{className:\"attr\",begin:/\"/,end:/\"/,contains:[e.BACKSLASH_ESCAPE],illegal:\"\\\\n\"},e.inherit(o,{begin:/:/})].concat(n),illegal:\"\\\\S\"},i={begin:\"\\\\[\",end:\"\\\\]\",contains:[e.inherit(o)],illegal:\"\\\\S\"};return r.push(s,i),n.forEach((function(e){r.push(e)})),{name:\"JSON\",contains:r,keywords:t,illegal:\"\\\\S\"}}},66336:e=>{e.exports=function(e){const t={$pattern:/-?[A-z\\.\\-]+\\b/,keyword:\"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter\",built_in:\"ac asnp cat cd CFS chdir clc clear clhy cli clp cls clv cnsn compare copy cp cpi cpp curl cvpa dbp del diff dir dnsn ebp echo|0 epal epcsv epsn erase etsn exsn fc fhx fl ft fw gal gbp gc gcb gci gcm gcs gdr gerr ghy gi gin gjb gl gm gmo gp gps gpv group gsn gsnp gsv gtz gu gv gwmi h history icm iex ihy ii ipal ipcsv ipmo ipsn irm ise iwmi iwr kill lp ls man md measure mi mount move mp mv nal ndr ni nmo npssc nsn nv ogv oh popd ps pushd pwd r rbp rcjb rcsn rd rdr ren ri rjb rm rmdir rmo rni rnp rp rsn rsnp rujb rv rvpa rwmi sajb sal saps sasv sbp sc scb select set shcm si sl sleep sls sort sp spjb spps spsv start stz sujb sv swmi tee trcm type wget where wjb write\"},n={begin:\"`[\\\\s\\\\S]\",relevance:0},r={className:\"variable\",variants:[{begin:/\\$\\B/},{className:\"keyword\",begin:/\\$this/},{begin:/\\$[\\w\\d][\\w\\d_:]*/}]},o={className:\"string\",variants:[{begin:/\"/,end:/\"/},{begin:/@\"/,end:/^\"@/}],contains:[n,r,{className:\"variable\",begin:/\\$[A-z]/,end:/[^A-z]/}]},s={className:\"string\",variants:[{begin:/'/,end:/'/},{begin:/@'/,end:/^'@/}]},i=e.inherit(e.COMMENT(null,null),{variants:[{begin:/#/,end:/$/},{begin:/<#/,end:/#>/}],contains:[{className:\"doctag\",variants:[{begin:/\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{begin:/\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/}]}]}),a={className:\"built_in\",variants:[{begin:\"(\".concat(\"Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|Mount|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Build|Complete|Confirm|Deny|Deploy|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where\",\")+(-)[\\\\w\\\\d]+\")}]},l={className:\"class\",beginKeywords:\"class enum\",end:/\\s*[{]/,excludeEnd:!0,relevance:0,contains:[e.TITLE_MODE]},c={className:\"function\",begin:/function\\s+/,end:/\\s*\\{|$/,excludeEnd:!0,returnBegin:!0,relevance:0,contains:[{begin:\"function\",relevance:0,className:\"keyword\"},{className:\"title\",begin:/\\w[\\w\\d]*((-)[\\w\\d]+)*/,relevance:0},{begin:/\\(/,end:/\\)/,className:\"params\",relevance:0,contains:[r]}]},u={begin:/using\\s/,end:/$/,returnBegin:!0,contains:[o,s,{className:\"keyword\",begin:/(using|assembly|command|module|namespace|type)/}]},p={variants:[{className:\"operator\",begin:\"(\".concat(\"-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor\",\")\\\\b\")},{className:\"literal\",begin:/(-)[\\w\\d]+/,relevance:0}]},h={className:\"function\",begin:/\\[.*\\]\\s*[\\w]+[ ]??\\(/,end:/$/,returnBegin:!0,relevance:0,contains:[{className:\"keyword\",begin:\"(\".concat(t.keyword.toString().replace(/\\s/g,\"|\"),\")\\\\b\"),endsParent:!0,relevance:0},e.inherit(e.TITLE_MODE,{endsParent:!0})]},f=[h,i,n,e.NUMBER_MODE,o,s,a,r,{className:\"literal\",begin:/\\$(null|true|false)\\b/},{className:\"selector-tag\",begin:/@\\B/,relevance:0}],d={begin:/\\[/,end:/\\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[].concat(\"self\",f,{begin:\"(\"+[\"string\",\"char\",\"byte\",\"int\",\"long\",\"bool\",\"decimal\",\"single\",\"double\",\"DateTime\",\"xml\",\"array\",\"hashtable\",\"void\"].join(\"|\")+\")\",className:\"built_in\",relevance:0},{className:\"type\",begin:/[\\.\\w\\d]+/,relevance:0})};return h.contains.unshift(d),{name:\"PowerShell\",aliases:[\"ps\",\"ps1\"],case_insensitive:!0,keywords:t,contains:f.concat(l,c,u,p,d)}}},42157:e=>{function t(e){return e?\"string\"==typeof e?e:e.source:null}function n(e){return r(\"(?=\",e,\")\")}function r(...e){return e.map((e=>t(e))).join(\"\")}function o(...e){return\"(\"+e.map((e=>t(e))).join(\"|\")+\")\"}e.exports=function(e){const t=r(/[A-Z_]/,r(\"(\",/[A-Z0-9_.-]*:/,\")?\"),/[A-Z0-9_.-]*/),s={className:\"symbol\",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\\s/,contains:[{className:\"meta-keyword\",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\\n/}]},a=e.inherit(i,{begin:/\\(/,end:/\\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:\"meta-string\"}),c=e.inherit(e.QUOTE_STRING_MODE,{className:\"meta-string\"}),u={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:\"attr\",begin:/[A-Za-z0-9._:-]+/,relevance:0},{begin:/=\\s*/,relevance:0,contains:[{className:\"string\",endsParent:!0,variants:[{begin:/\"/,end:/\"/,contains:[s]},{begin:/'/,end:/'/,contains:[s]},{begin:/[^\\s\"'=<>`]+/}]}]}]};return{name:\"HTML, XML\",aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\",\"wsf\",\"svg\"],case_insensitive:!0,contains:[{className:\"meta\",begin:/<![a-z]/,end:/>/,relevance:10,contains:[i,c,l,a,{begin:/\\[/,end:/\\]/,contains:[{className:\"meta\",begin:/<![a-z]/,end:/>/,contains:[i,a,c,l]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\\[CDATA\\[/,end:/\\]\\]>/,relevance:10},s,{className:\"meta\",begin:/<\\?xml/,end:/\\?>/,relevance:10},{className:\"tag\",begin:/<style(?=\\s|>)/,end:/>/,keywords:{name:\"style\"},contains:[u],starts:{end:/<\\/style>/,returnEnd:!0,subLanguage:[\"css\",\"xml\"]}},{className:\"tag\",begin:/<script(?=\\s|>)/,end:/>/,keywords:{name:\"script\"},contains:[u],starts:{end:/<\\/script>/,returnEnd:!0,subLanguage:[\"javascript\",\"handlebars\",\"xml\"]}},{className:\"tag\",begin:/<>|<\\/>/},{className:\"tag\",begin:r(/</,n(r(t,o(/\\/>/,/>/,/\\s/)))),end:/\\/?>/,contains:[{className:\"name\",begin:t,relevance:0,starts:u}]},{className:\"tag\",begin:r(/<\\//,n(r(t,/>/))),contains:[{className:\"name\",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},54587:e=>{e.exports=function(e){var t=\"true false yes no null\",n=\"[\\\\w#;/?:@&=+$,.~*'()[\\\\]]+\",r={className:\"string\",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/\\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:\"template-variable\",variants:[{begin:/\\{\\{/,end:/\\}\\}/},{begin:/%\\{/,end:/\\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/[^\\s,{}[\\]]+/}]}),s={className:\"number\",begin:\"\\\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\\\.[0-9]*)?([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\\\b\"},i={end:\",\",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},a={begin:/\\{/,end:/\\}/,contains:[i],illegal:\"\\\\n\",relevance:0},l={begin:\"\\\\[\",end:\"\\\\]\",contains:[i],illegal:\"\\\\n\",relevance:0},c=[{className:\"attr\",variants:[{begin:\"\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)\"},{begin:'\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)'},{begin:\"'\\\\w[\\\\w :\\\\/.-]*':(?=[ \\t]|$)\"}]},{className:\"meta\",begin:\"^---\\\\s*$\",relevance:10},{className:\"string\",begin:\"[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*\"},{begin:\"<%[%=-]?\",end:\"[%-]?%>\",subLanguage:\"ruby\",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:\"type\",begin:\"!\\\\w+!\"+n},{className:\"type\",begin:\"!<\"+n+\">\"},{className:\"type\",begin:\"!\"+n},{className:\"type\",begin:\"!!\"+n},{className:\"meta\",begin:\"&\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"meta\",begin:\"\\\\*\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"bullet\",begin:\"-(?=[ ]|$)\",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},s,{className:\"number\",begin:e.C_NUMBER_RE+\"\\\\b\",relevance:0},a,l,r],u=[...c];return u.pop(),u.push(o),i.contains=u,{name:\"YAML\",case_insensitive:!0,aliases:[\"yml\"],contains:c}}},8679:(e,t,n)=>{\"use strict\";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},s={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},a={};function l(e){return r.isMemo(e)?i:a[e.$$typeof]||o}a[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},a[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,p=Object.getOwnPropertySymbols,h=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,d=Object.prototype;e.exports=function e(t,n,r){if(\"string\"!=typeof n){if(d){var o=f(n);o&&o!==d&&e(t,o,r)}var i=u(n);p&&(i=i.concat(p(n)));for(var a=l(t),m=l(n),g=0;g<i.length;++g){var y=i[g];if(!(s[y]||r&&r[y]||m&&m[y]||a&&a[y])){var v=h(n,y);try{c(t,y,v)}catch(e){}}}}return t}},80645:(e,t)=>{t.read=function(e,t,n,r,o){var s,i,a=8*o-r-1,l=(1<<a)-1,c=l>>1,u=-7,p=n?o-1:0,h=n?-1:1,f=e[t+p];for(p+=h,s=f&(1<<-u)-1,f>>=-u,u+=a;u>0;s=256*s+e[t+p],p+=h,u-=8);for(i=s&(1<<-u)-1,s>>=-u,u+=r;u>0;i=256*i+e[t+p],p+=h,u-=8);if(0===s)s=1-c;else{if(s===l)return i?NaN:1/0*(f?-1:1);i+=Math.pow(2,r),s-=c}return(f?-1:1)*i*Math.pow(2,s-r)},t.write=function(e,t,n,r,o,s){var i,a,l,c=8*s-o-1,u=(1<<c)-1,p=u>>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:s-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,i=u):(i=Math.floor(Math.log(t)/Math.LN2),t*(l=Math.pow(2,-i))<1&&(i--,l*=2),(t+=i+p>=1?h/l:h*Math.pow(2,1-p))*l>=2&&(i++,l/=2),i+p>=u?(a=0,i=u):i+p>=1?(a=(t*l-1)*Math.pow(2,o),i+=p):(a=t*Math.pow(2,p-1)*Math.pow(2,o),i=0));o>=8;e[n+f]=255&a,f+=d,a/=256,o-=8);for(i=i<<o|a,c+=o;c>0;e[n+f]=255&i,f+=d,i/=256,c-=8);e[n+f-d]|=128*m}},43393:function(e){e.exports=function(){\"use strict\";var e=Array.prototype.slice;function t(e,t){t&&(e.prototype=Object.create(t.prototype)),e.prototype.constructor=e}function n(e){return i(e)?e:K(e)}function r(e){return a(e)?e:H(e)}function o(e){return l(e)?e:G(e)}function s(e){return i(e)&&!c(e)?e:Z(e)}function i(e){return!(!e||!e[p])}function a(e){return!(!e||!e[h])}function l(e){return!(!e||!e[f])}function c(e){return a(e)||l(e)}function u(e){return!(!e||!e[d])}t(r,n),t(o,n),t(s,n),n.isIterable=i,n.isKeyed=a,n.isIndexed=l,n.isAssociative=c,n.isOrdered=u,n.Keyed=r,n.Indexed=o,n.Set=s;var p=\"@@__IMMUTABLE_ITERABLE__@@\",h=\"@@__IMMUTABLE_KEYED__@@\",f=\"@@__IMMUTABLE_INDEXED__@@\",d=\"@@__IMMUTABLE_ORDERED__@@\",m=\"delete\",g=5,y=1<<g,v=y-1,b={},w={value:!1},E={value:!1};function x(e){return e.value=!1,e}function S(e){e&&(e.value=!0)}function _(){}function j(e,t){t=t||0;for(var n=Math.max(0,e.length-t),r=new Array(n),o=0;o<n;o++)r[o]=e[o+t];return r}function O(e){return void 0===e.size&&(e.size=e.__iterate(A)),e.size}function k(e,t){if(\"number\"!=typeof t){var n=t>>>0;if(\"\"+n!==t||4294967295===n)return NaN;t=n}return t<0?O(e)+t:t}function A(){return!0}function C(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function P(e,t){return I(e,t,0)}function N(e,t){return I(e,t,t)}function I(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}var T=0,R=1,M=2,D=\"function\"==typeof Symbol&&Symbol.iterator,F=\"@@iterator\",L=D||F;function B(e){this.next=e}function $(e,t,n,r){var o=0===e?t:1===e?n:[t,n];return r?r.value=o:r={value:o,done:!1},r}function q(){return{value:void 0,done:!0}}function U(e){return!!W(e)}function z(e){return e&&\"function\"==typeof e.next}function V(e){var t=W(e);return t&&t.call(e)}function W(e){var t=e&&(D&&e[D]||e[F]);if(\"function\"==typeof t)return t}function J(e){return e&&\"number\"==typeof e.length}function K(e){return null==e?ie():i(e)?e.toSeq():ce(e)}function H(e){return null==e?ie().toKeyedSeq():i(e)?a(e)?e.toSeq():e.fromEntrySeq():ae(e)}function G(e){return null==e?ie():i(e)?a(e)?e.entrySeq():e.toIndexedSeq():le(e)}function Z(e){return(null==e?ie():i(e)?a(e)?e.entrySeq():e:le(e)).toSetSeq()}B.prototype.toString=function(){return\"[Iterator]\"},B.KEYS=T,B.VALUES=R,B.ENTRIES=M,B.prototype.inspect=B.prototype.toSource=function(){return this.toString()},B.prototype[L]=function(){return this},t(K,n),K.of=function(){return K(arguments)},K.prototype.toSeq=function(){return this},K.prototype.toString=function(){return this.__toString(\"Seq {\",\"}\")},K.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},K.prototype.__iterate=function(e,t){return pe(this,e,t,!0)},K.prototype.__iterator=function(e,t){return he(this,e,t,!0)},t(H,K),H.prototype.toKeyedSeq=function(){return this},t(G,K),G.of=function(){return G(arguments)},G.prototype.toIndexedSeq=function(){return this},G.prototype.toString=function(){return this.__toString(\"Seq [\",\"]\")},G.prototype.__iterate=function(e,t){return pe(this,e,t,!1)},G.prototype.__iterator=function(e,t){return he(this,e,t,!1)},t(Z,K),Z.of=function(){return Z(arguments)},Z.prototype.toSetSeq=function(){return this},K.isSeq=se,K.Keyed=H,K.Set=Z,K.Indexed=G;var Y,X,Q,ee=\"@@__IMMUTABLE_SEQ__@@\";function te(e){this._array=e,this.size=e.length}function ne(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function re(e){this._iterable=e,this.size=e.length||e.size}function oe(e){this._iterator=e,this._iteratorCache=[]}function se(e){return!(!e||!e[ee])}function ie(){return Y||(Y=new te([]))}function ae(e){var t=Array.isArray(e)?new te(e).fromEntrySeq():z(e)?new oe(e).fromEntrySeq():U(e)?new re(e).fromEntrySeq():\"object\"==typeof e?new ne(e):void 0;if(!t)throw new TypeError(\"Expected Array or iterable object of [k, v] entries, or keyed object: \"+e);return t}function le(e){var t=ue(e);if(!t)throw new TypeError(\"Expected Array or iterable object of values: \"+e);return t}function ce(e){var t=ue(e)||\"object\"==typeof e&&new ne(e);if(!t)throw new TypeError(\"Expected Array or iterable object of values, or keyed object: \"+e);return t}function ue(e){return J(e)?new te(e):z(e)?new oe(e):U(e)?new re(e):void 0}function pe(e,t,n,r){var o=e._cache;if(o){for(var s=o.length-1,i=0;i<=s;i++){var a=o[n?s-i:i];if(!1===t(a[1],r?a[0]:i,e))return i+1}return i}return e.__iterateUncached(t,n)}function he(e,t,n,r){var o=e._cache;if(o){var s=o.length-1,i=0;return new B((function(){var e=o[n?s-i:i];return i++>s?q():$(t,r?e[0]:i-1,e[1])}))}return e.__iteratorUncached(t,n)}function fe(e,t){return t?de(t,e,\"\",{\"\":e}):me(e)}function de(e,t,n,r){return Array.isArray(t)?e.call(r,n,G(t).map((function(n,r){return de(e,n,r,t)}))):ge(t)?e.call(r,n,H(t).map((function(n,r){return de(e,n,r,t)}))):t}function me(e){return Array.isArray(e)?G(e).map(me).toList():ge(e)?H(e).map(me).toMap():e}function ge(e){return e&&(e.constructor===Object||void 0===e.constructor)}function ye(e,t){if(e===t||e!=e&&t!=t)return!0;if(!e||!t)return!1;if(\"function\"==typeof e.valueOf&&\"function\"==typeof t.valueOf){if((e=e.valueOf())===(t=t.valueOf())||e!=e&&t!=t)return!0;if(!e||!t)return!1}return!(\"function\"!=typeof e.equals||\"function\"!=typeof t.equals||!e.equals(t))}function ve(e,t){if(e===t)return!0;if(!i(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||a(e)!==a(t)||l(e)!==l(t)||u(e)!==u(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!c(e);if(u(e)){var r=e.entries();return t.every((function(e,t){var o=r.next().value;return o&&ye(o[1],e)&&(n||ye(o[0],t))}))&&r.next().done}var o=!1;if(void 0===e.size)if(void 0===t.size)\"function\"==typeof e.cacheResult&&e.cacheResult();else{o=!0;var s=e;e=t,t=s}var p=!0,h=t.__iterate((function(t,r){if(n?!e.has(t):o?!ye(t,e.get(r,b)):!ye(e.get(r,b),t))return p=!1,!1}));return p&&e.size===h}function be(e,t){if(!(this instanceof be))return new be(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(X)return X;X=this}}function we(e,t){if(!e)throw new Error(t)}function Ee(e,t,n){if(!(this instanceof Ee))return new Ee(e,t,n);if(we(0!==n,\"Cannot step a Range by 0\"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),t<e&&(n=-n),this._start=e,this._end=t,this._step=n,this.size=Math.max(0,Math.ceil((t-e)/n-1)+1),0===this.size){if(Q)return Q;Q=this}}function xe(){throw TypeError(\"Abstract\")}function Se(){}function _e(){}function je(){}K.prototype[ee]=!0,t(te,G),te.prototype.get=function(e,t){return this.has(e)?this._array[k(this,e)]:t},te.prototype.__iterate=function(e,t){for(var n=this._array,r=n.length-1,o=0;o<=r;o++)if(!1===e(n[t?r-o:o],o,this))return o+1;return o},te.prototype.__iterator=function(e,t){var n=this._array,r=n.length-1,o=0;return new B((function(){return o>r?q():$(e,o,n[t?r-o++:o++])}))},t(ne,H),ne.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},ne.prototype.has=function(e){return this._object.hasOwnProperty(e)},ne.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,o=r.length-1,s=0;s<=o;s++){var i=r[t?o-s:s];if(!1===e(n[i],i,this))return s+1}return s},ne.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,o=r.length-1,s=0;return new B((function(){var i=r[t?o-s:s];return s++>o?q():$(e,i,n[i])}))},ne.prototype[d]=!0,t(re,G),re.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=V(this._iterable),r=0;if(z(n))for(var o;!(o=n.next()).done&&!1!==e(o.value,r++,this););return r},re.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=V(this._iterable);if(!z(n))return new B(q);var r=0;return new B((function(){var t=n.next();return t.done?t:$(e,r++,t.value)}))},t(oe,G),oe.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n,r=this._iterator,o=this._iteratorCache,s=0;s<o.length;)if(!1===e(o[s],s++,this))return s;for(;!(n=r.next()).done;){var i=n.value;if(o[s]=i,!1===e(i,s++,this))break}return s},oe.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=this._iterator,r=this._iteratorCache,o=0;return new B((function(){if(o>=r.length){var t=n.next();if(t.done)return t;r[o]=t.value}return $(e,o,r[o++])}))},t(be,G),be.prototype.toString=function(){return 0===this.size?\"Repeat []\":\"Repeat [ \"+this._value+\" \"+this.size+\" times ]\"},be.prototype.get=function(e,t){return this.has(e)?this._value:t},be.prototype.includes=function(e){return ye(this._value,e)},be.prototype.slice=function(e,t){var n=this.size;return C(e,t,n)?this:new be(this._value,N(t,n)-P(e,n))},be.prototype.reverse=function(){return this},be.prototype.indexOf=function(e){return ye(this._value,e)?0:-1},be.prototype.lastIndexOf=function(e){return ye(this._value,e)?this.size:-1},be.prototype.__iterate=function(e,t){for(var n=0;n<this.size;n++)if(!1===e(this._value,n,this))return n+1;return n},be.prototype.__iterator=function(e,t){var n=this,r=0;return new B((function(){return r<n.size?$(e,r++,n._value):q()}))},be.prototype.equals=function(e){return e instanceof be?ye(this._value,e._value):ve(e)},t(Ee,G),Ee.prototype.toString=function(){return 0===this.size?\"Range []\":\"Range [ \"+this._start+\"...\"+this._end+(1!==this._step?\" by \"+this._step:\"\")+\" ]\"},Ee.prototype.get=function(e,t){return this.has(e)?this._start+k(this,e)*this._step:t},Ee.prototype.includes=function(e){var t=(e-this._start)/this._step;return t>=0&&t<this.size&&t===Math.floor(t)},Ee.prototype.slice=function(e,t){return C(e,t,this.size)?this:(e=P(e,this.size),(t=N(t,this.size))<=e?new Ee(0,0):new Ee(this.get(e,this._end),this.get(t,this._end),this._step))},Ee.prototype.indexOf=function(e){var t=e-this._start;if(t%this._step==0){var n=t/this._step;if(n>=0&&n<this.size)return n}return-1},Ee.prototype.lastIndexOf=function(e){return this.indexOf(e)},Ee.prototype.__iterate=function(e,t){for(var n=this.size-1,r=this._step,o=t?this._start+n*r:this._start,s=0;s<=n;s++){if(!1===e(o,s,this))return s+1;o+=t?-r:r}return s},Ee.prototype.__iterator=function(e,t){var n=this.size-1,r=this._step,o=t?this._start+n*r:this._start,s=0;return new B((function(){var i=o;return o+=t?-r:r,s>n?q():$(e,s++,i)}))},Ee.prototype.equals=function(e){return e instanceof Ee?this._start===e._start&&this._end===e._end&&this._step===e._step:ve(this,e)},t(xe,n),t(Se,xe),t(_e,xe),t(je,xe),xe.Keyed=Se,xe.Indexed=_e,xe.Set=je;var Oe=\"function\"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(e,t){var n=65535&(e|=0),r=65535&(t|=0);return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0};function ke(e){return e>>>1&1073741824|3221225471&e}function Ae(e){if(!1===e||null==e)return 0;if(\"function\"==typeof e.valueOf&&(!1===(e=e.valueOf())||null==e))return 0;if(!0===e)return 1;var t=typeof e;if(\"number\"===t){if(e!=e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)n^=e/=4294967295;return ke(n)}if(\"string\"===t)return e.length>Be?Ce(e):Pe(e);if(\"function\"==typeof e.hashCode)return e.hashCode();if(\"object\"===t)return Ne(e);if(\"function\"==typeof e.toString)return Pe(e.toString());throw new Error(\"Value type \"+t+\" cannot be hashed.\")}function Ce(e){var t=Ue[e];return void 0===t&&(t=Pe(e),qe===$e&&(qe=0,Ue={}),qe++,Ue[e]=t),t}function Pe(e){for(var t=0,n=0;n<e.length;n++)t=31*t+e.charCodeAt(n)|0;return ke(t)}function Ne(e){var t;if(De&&void 0!==(t=Me.get(e)))return t;if(void 0!==(t=e[Le]))return t;if(!Te){if(void 0!==(t=e.propertyIsEnumerable&&e.propertyIsEnumerable[Le]))return t;if(void 0!==(t=Re(e)))return t}if(t=++Fe,1073741824&Fe&&(Fe=0),De)Me.set(e,t);else{if(void 0!==Ie&&!1===Ie(e))throw new Error(\"Non-extensible objects are not allowed as keys.\");if(Te)Object.defineProperty(e,Le,{enumerable:!1,configurable:!1,writable:!1,value:t});else if(void 0!==e.propertyIsEnumerable&&e.propertyIsEnumerable===e.constructor.prototype.propertyIsEnumerable)e.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},e.propertyIsEnumerable[Le]=t;else{if(void 0===e.nodeType)throw new Error(\"Unable to set a non-enumerable property on object.\");e[Le]=t}}return t}var Ie=Object.isExtensible,Te=function(){try{return Object.defineProperty({},\"@\",{}),!0}catch(e){return!1}}();function Re(e){if(e&&e.nodeType>0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}var Me,De=\"function\"==typeof WeakMap;De&&(Me=new WeakMap);var Fe=0,Le=\"__immutablehash__\";\"function\"==typeof Symbol&&(Le=Symbol(Le));var Be=16,$e=255,qe=0,Ue={};function ze(e){we(e!==1/0,\"Cannot perform this action with an infinite size.\")}function Ve(e){return null==e?ot():We(e)&&!u(e)?e:ot().withMutations((function(t){var n=r(e);ze(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function We(e){return!(!e||!e[Ke])}t(Ve,Se),Ve.of=function(){var t=e.call(arguments,0);return ot().withMutations((function(e){for(var n=0;n<t.length;n+=2){if(n+1>=t.length)throw new Error(\"Missing value for key: \"+t[n]);e.set(t[n],t[n+1])}}))},Ve.prototype.toString=function(){return this.__toString(\"Map {\",\"}\")},Ve.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},Ve.prototype.set=function(e,t){return st(this,e,t)},Ve.prototype.setIn=function(e,t){return this.updateIn(e,b,(function(){return t}))},Ve.prototype.remove=function(e){return st(this,e,b)},Ve.prototype.deleteIn=function(e){return this.updateIn(e,(function(){return b}))},Ve.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},Ve.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=gt(this,xn(e),t,n);return r===b?void 0:r},Ve.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ot()},Ve.prototype.merge=function(){return ht(this,void 0,arguments)},Ve.prototype.mergeWith=function(t){return ht(this,t,e.call(arguments,1))},Ve.prototype.mergeIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return\"function\"==typeof e.merge?e.merge.apply(e,n):n[n.length-1]}))},Ve.prototype.mergeDeep=function(){return ht(this,ft,arguments)},Ve.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return ht(this,dt(t),n)},Ve.prototype.mergeDeepIn=function(t){var n=e.call(arguments,1);return this.updateIn(t,ot(),(function(e){return\"function\"==typeof e.mergeDeep?e.mergeDeep.apply(e,n):n[n.length-1]}))},Ve.prototype.sort=function(e){return Ut(pn(this,e))},Ve.prototype.sortBy=function(e,t){return Ut(pn(this,t,e))},Ve.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},Ve.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new _)},Ve.prototype.asImmutable=function(){return this.__ensureOwner()},Ve.prototype.wasAltered=function(){return this.__altered},Ve.prototype.__iterator=function(e,t){return new et(this,e,t)},Ve.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate((function(t){return r++,e(t[1],t[0],n)}),t),r},Ve.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?rt(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Ve.isMap=We;var Je,Ke=\"@@__IMMUTABLE_MAP__@@\",He=Ve.prototype;function Ge(e,t){this.ownerID=e,this.entries=t}function Ze(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function Ye(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function Xe(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function Qe(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function et(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&nt(e._root)}function tt(e,t){return $(e,t[0],t[1])}function nt(e,t){return{node:e,index:0,__prev:t}}function rt(e,t,n,r){var o=Object.create(He);return o.size=e,o._root=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function ot(){return Je||(Je=rt(0))}function st(e,t,n){var r,o;if(e._root){var s=x(w),i=x(E);if(r=it(e._root,e.__ownerID,0,void 0,t,n,s,i),!i.value)return e;o=e.size+(s.value?n===b?-1:1:0)}else{if(n===b)return e;o=1,r=new Ge(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=o,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?rt(o,r):ot()}function it(e,t,n,r,o,s,i,a){return e?e.update(t,n,r,o,s,i,a):s===b?e:(S(a),S(i),new Qe(t,r,[o,s]))}function at(e){return e.constructor===Qe||e.constructor===Xe}function lt(e,t,n,r,o){if(e.keyHash===r)return new Xe(t,r,[e.entry,o]);var s,i=(0===n?e.keyHash:e.keyHash>>>n)&v,a=(0===n?r:r>>>n)&v;return new Ze(t,1<<i|1<<a,i===a?[lt(e,t,n+g,r,o)]:(s=new Qe(t,r,o),i<a?[e,s]:[s,e]))}function ct(e,t,n,r){e||(e=new _);for(var o=new Qe(e,Ae(n),[n,r]),s=0;s<t.length;s++){var i=t[s];o=o.update(e,0,void 0,i[0],i[1])}return o}function ut(e,t,n,r){for(var o=0,s=0,i=new Array(n),a=0,l=1,c=t.length;a<c;a++,l<<=1){var u=t[a];void 0!==u&&a!==r&&(o|=l,i[s++]=u)}return new Ze(e,o,i)}function pt(e,t,n,r,o){for(var s=0,i=new Array(y),a=0;0!==n;a++,n>>>=1)i[a]=1&n?t[s++]:void 0;return i[r]=o,new Ye(e,s+1,i)}function ht(e,t,n){for(var o=[],s=0;s<n.length;s++){var a=n[s],l=r(a);i(a)||(l=l.map((function(e){return fe(e)}))),o.push(l)}return mt(e,t,o)}function ft(e,t,n){return e&&e.mergeDeep&&i(t)?e.mergeDeep(t):ye(e,t)?e:t}function dt(e){return function(t,n,r){if(t&&t.mergeDeepWith&&i(n))return t.mergeDeepWith(e,n);var o=e(t,n,r);return ye(t,o)?t:o}}function mt(e,t,n){return 0===(n=n.filter((function(e){return 0!==e.size}))).length?e:0!==e.size||e.__ownerID||1!==n.length?e.withMutations((function(e){for(var r=t?function(n,r){e.update(r,b,(function(e){return e===b?n:t(e,n,r)}))}:function(t,n){e.set(n,t)},o=0;o<n.length;o++)n[o].forEach(r)})):e.constructor(n[0])}function gt(e,t,n,r){var o=e===b,s=t.next();if(s.done){var i=o?n:e,a=r(i);return a===i?e:a}we(o||e&&e.set,\"invalid keyPath\");var l=s.value,c=o?b:e.get(l,b),u=gt(c,t,n,r);return u===c?e:u===b?e.remove(l):(o?ot():e).set(l,u)}function yt(e){return e=(e=(858993459&(e-=e>>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135,e+=e>>8,127&(e+=e>>16)}function vt(e,t,n,r){var o=r?e:j(e);return o[t]=n,o}function bt(e,t,n,r){var o=e.length+1;if(r&&t+1===o)return e[t]=n,e;for(var s=new Array(o),i=0,a=0;a<o;a++)a===t?(s[a]=n,i=-1):s[a]=e[a+i];return s}function wt(e,t,n){var r=e.length-1;if(n&&t===r)return e.pop(),e;for(var o=new Array(r),s=0,i=0;i<r;i++)i===t&&(s=1),o[i]=e[i+s];return o}He[Ke]=!0,He[m]=He.remove,He.removeIn=He.deleteIn,Ge.prototype.get=function(e,t,n,r){for(var o=this.entries,s=0,i=o.length;s<i;s++)if(ye(n,o[s][0]))return o[s][1];return r},Ge.prototype.update=function(e,t,n,r,o,s,i){for(var a=o===b,l=this.entries,c=0,u=l.length;c<u&&!ye(r,l[c][0]);c++);var p=c<u;if(p?l[c][1]===o:a)return this;if(S(i),(a||!p)&&S(s),!a||1!==l.length){if(!p&&!a&&l.length>=Et)return ct(e,l,r,o);var h=e&&e===this.ownerID,f=h?l:j(l);return p?a?c===u-1?f.pop():f[c]=f.pop():f[c]=[r,o]:f.push([r,o]),h?(this.entries=f,this):new Ge(e,f)}},Ze.prototype.get=function(e,t,n,r){void 0===t&&(t=Ae(n));var o=1<<((0===e?t:t>>>e)&v),s=this.bitmap;return 0==(s&o)?r:this.nodes[yt(s&o-1)].get(e+g,t,n,r)},Ze.prototype.update=function(e,t,n,r,o,s,i){void 0===n&&(n=Ae(r));var a=(0===t?n:n>>>t)&v,l=1<<a,c=this.bitmap,u=0!=(c&l);if(!u&&o===b)return this;var p=yt(c&l-1),h=this.nodes,f=u?h[p]:void 0,d=it(f,e,t+g,n,r,o,s,i);if(d===f)return this;if(!u&&d&&h.length>=xt)return pt(e,h,c,a,d);if(u&&!d&&2===h.length&&at(h[1^p]))return h[1^p];if(u&&d&&1===h.length&&at(d))return d;var m=e&&e===this.ownerID,y=u?d?c:c^l:c|l,w=u?d?vt(h,p,d,m):wt(h,p,m):bt(h,p,d,m);return m?(this.bitmap=y,this.nodes=w,this):new Ze(e,y,w)},Ye.prototype.get=function(e,t,n,r){void 0===t&&(t=Ae(n));var o=(0===e?t:t>>>e)&v,s=this.nodes[o];return s?s.get(e+g,t,n,r):r},Ye.prototype.update=function(e,t,n,r,o,s,i){void 0===n&&(n=Ae(r));var a=(0===t?n:n>>>t)&v,l=o===b,c=this.nodes,u=c[a];if(l&&!u)return this;var p=it(u,e,t+g,n,r,o,s,i);if(p===u)return this;var h=this.count;if(u){if(!p&&--h<St)return ut(e,c,h,a)}else h++;var f=e&&e===this.ownerID,d=vt(c,a,p,f);return f?(this.count=h,this.nodes=d,this):new Ye(e,h,d)},Xe.prototype.get=function(e,t,n,r){for(var o=this.entries,s=0,i=o.length;s<i;s++)if(ye(n,o[s][0]))return o[s][1];return r},Xe.prototype.update=function(e,t,n,r,o,s,i){void 0===n&&(n=Ae(r));var a=o===b;if(n!==this.keyHash)return a?this:(S(i),S(s),lt(this,e,t,n,[r,o]));for(var l=this.entries,c=0,u=l.length;c<u&&!ye(r,l[c][0]);c++);var p=c<u;if(p?l[c][1]===o:a)return this;if(S(i),(a||!p)&&S(s),a&&2===u)return new Qe(e,this.keyHash,l[1^c]);var h=e&&e===this.ownerID,f=h?l:j(l);return p?a?c===u-1?f.pop():f[c]=f.pop():f[c]=[r,o]:f.push([r,o]),h?(this.entries=f,this):new Xe(e,this.keyHash,f)},Qe.prototype.get=function(e,t,n,r){return ye(n,this.entry[0])?this.entry[1]:r},Qe.prototype.update=function(e,t,n,r,o,s,i){var a=o===b,l=ye(r,this.entry[0]);return(l?o===this.entry[1]:a)?this:(S(i),a?void S(s):l?e&&e===this.ownerID?(this.entry[1]=o,this):new Qe(e,this.keyHash,[r,o]):(S(s),lt(this,e,t,Ae(r),[r,o])))},Ge.prototype.iterate=Xe.prototype.iterate=function(e,t){for(var n=this.entries,r=0,o=n.length-1;r<=o;r++)if(!1===e(n[t?o-r:r]))return!1},Ze.prototype.iterate=Ye.prototype.iterate=function(e,t){for(var n=this.nodes,r=0,o=n.length-1;r<=o;r++){var s=n[t?o-r:r];if(s&&!1===s.iterate(e,t))return!1}},Qe.prototype.iterate=function(e,t){return e(this.entry)},t(et,B),et.prototype.next=function(){for(var e=this._type,t=this._stack;t;){var n,r=t.node,o=t.index++;if(r.entry){if(0===o)return tt(e,r.entry)}else if(r.entries){if(o<=(n=r.entries.length-1))return tt(e,r.entries[this._reverse?n-o:o])}else if(o<=(n=r.nodes.length-1)){var s=r.nodes[this._reverse?n-o:o];if(s){if(s.entry)return tt(e,s.entry);t=this._stack=nt(s,t)}continue}t=this._stack=this._stack.__prev}return q()};var Et=y/4,xt=y/2,St=y/4;function _t(e){var t=Rt();if(null==e)return t;if(jt(e))return e;var n=o(e),r=n.size;return 0===r?t:(ze(r),r>0&&r<y?Tt(0,r,g,null,new At(n.toArray())):t.withMutations((function(e){e.setSize(r),n.forEach((function(t,n){return e.set(n,t)}))})))}function jt(e){return!(!e||!e[Ot])}t(_t,_e),_t.of=function(){return this(arguments)},_t.prototype.toString=function(){return this.__toString(\"List [\",\"]\")},_t.prototype.get=function(e,t){if((e=k(this,e))>=0&&e<this.size){var n=Lt(this,e+=this._origin);return n&&n.array[e&v]}return t},_t.prototype.set=function(e,t){return Mt(this,e,t)},_t.prototype.remove=function(e){return this.has(e)?0===e?this.shift():e===this.size-1?this.pop():this.splice(e,1):this},_t.prototype.insert=function(e,t){return this.splice(e,0,t)},_t.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=g,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):Rt()},_t.prototype.push=function(){var e=arguments,t=this.size;return this.withMutations((function(n){Bt(n,0,t+e.length);for(var r=0;r<e.length;r++)n.set(t+r,e[r])}))},_t.prototype.pop=function(){return Bt(this,0,-1)},_t.prototype.unshift=function(){var e=arguments;return this.withMutations((function(t){Bt(t,-e.length);for(var n=0;n<e.length;n++)t.set(n,e[n])}))},_t.prototype.shift=function(){return Bt(this,1)},_t.prototype.merge=function(){return $t(this,void 0,arguments)},_t.prototype.mergeWith=function(t){return $t(this,t,e.call(arguments,1))},_t.prototype.mergeDeep=function(){return $t(this,ft,arguments)},_t.prototype.mergeDeepWith=function(t){var n=e.call(arguments,1);return $t(this,dt(t),n)},_t.prototype.setSize=function(e){return Bt(this,0,e)},_t.prototype.slice=function(e,t){var n=this.size;return C(e,t,n)?this:Bt(this,P(e,n),N(t,n))},_t.prototype.__iterator=function(e,t){var n=0,r=It(this,t);return new B((function(){var t=r();return t===Nt?q():$(e,n++,t)}))},_t.prototype.__iterate=function(e,t){for(var n,r=0,o=It(this,t);(n=o())!==Nt&&!1!==e(n,r++,this););return r},_t.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Tt(this._origin,this._capacity,this._level,this._root,this._tail,e,this.__hash):(this.__ownerID=e,this)},_t.isList=jt;var Ot=\"@@__IMMUTABLE_LIST__@@\",kt=_t.prototype;function At(e,t){this.array=e,this.ownerID=t}kt[Ot]=!0,kt[m]=kt.remove,kt.setIn=He.setIn,kt.deleteIn=kt.removeIn=He.removeIn,kt.update=He.update,kt.updateIn=He.updateIn,kt.mergeIn=He.mergeIn,kt.mergeDeepIn=He.mergeDeepIn,kt.withMutations=He.withMutations,kt.asMutable=He.asMutable,kt.asImmutable=He.asImmutable,kt.wasAltered=He.wasAltered,At.prototype.removeBefore=function(e,t,n){if(n===t?1<<t:0===this.array.length)return this;var r=n>>>t&v;if(r>=this.array.length)return new At([],e);var o,s=0===r;if(t>0){var i=this.array[r];if((o=i&&i.removeBefore(e,t-g,n))===i&&s)return this}if(s&&!o)return this;var a=Ft(this,e);if(!s)for(var l=0;l<r;l++)a.array[l]=void 0;return o&&(a.array[r]=o),a},At.prototype.removeAfter=function(e,t,n){if(n===(t?1<<t:0)||0===this.array.length)return this;var r,o=n-1>>>t&v;if(o>=this.array.length)return this;if(t>0){var s=this.array[o];if((r=s&&s.removeAfter(e,t-g,n))===s&&o===this.array.length-1)return this}var i=Ft(this,e);return i.array.splice(o+1),r&&(i.array[o]=r),i};var Ct,Pt,Nt={};function It(e,t){var n=e._origin,r=e._capacity,o=qt(r),s=e._tail;return i(e._root,e._level,0);function i(e,t,n){return 0===t?a(e,n):l(e,t,n)}function a(e,i){var a=i===o?s&&s.array:e&&e.array,l=i>n?0:n-i,c=r-i;return c>y&&(c=y),function(){if(l===c)return Nt;var e=t?--c:l++;return a&&a[e]}}function l(e,o,s){var a,l=e&&e.array,c=s>n?0:n-s>>o,u=1+(r-s>>o);return u>y&&(u=y),function(){for(;;){if(a){var e=a();if(e!==Nt)return e;a=null}if(c===u)return Nt;var n=t?--u:c++;a=i(l&&l[n],o-g,s+(n<<o))}}}}function Tt(e,t,n,r,o,s,i){var a=Object.create(kt);return a.size=t-e,a._origin=e,a._capacity=t,a._level=n,a._root=r,a._tail=o,a.__ownerID=s,a.__hash=i,a.__altered=!1,a}function Rt(){return Ct||(Ct=Tt(0,0,g))}function Mt(e,t,n){if((t=k(e,t))!=t)return e;if(t>=e.size||t<0)return e.withMutations((function(e){t<0?Bt(e,t).set(0,n):Bt(e,0,t+1).set(t,n)}));t+=e._origin;var r=e._tail,o=e._root,s=x(E);return t>=qt(e._capacity)?r=Dt(r,e.__ownerID,0,t,n,s):o=Dt(o,e.__ownerID,e._level,t,n,s),s.value?e.__ownerID?(e._root=o,e._tail=r,e.__hash=void 0,e.__altered=!0,e):Tt(e._origin,e._capacity,e._level,o,r):e}function Dt(e,t,n,r,o,s){var i,a=r>>>n&v,l=e&&a<e.array.length;if(!l&&void 0===o)return e;if(n>0){var c=e&&e.array[a],u=Dt(c,t,n-g,r,o,s);return u===c?e:((i=Ft(e,t)).array[a]=u,i)}return l&&e.array[a]===o?e:(S(s),i=Ft(e,t),void 0===o&&a===i.array.length-1?i.array.pop():i.array[a]=o,i)}function Ft(e,t){return t&&e&&t===e.ownerID?e:new At(e?e.array.slice():[],t)}function Lt(e,t){if(t>=qt(e._capacity))return e._tail;if(t<1<<e._level+g){for(var n=e._root,r=e._level;n&&r>0;)n=n.array[t>>>r&v],r-=g;return n}}function Bt(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new _,o=e._origin,s=e._capacity,i=o+t,a=void 0===n?s:n<0?s+n:o+n;if(i===o&&a===s)return e;if(i>=a)return e.clear();for(var l=e._level,c=e._root,u=0;i+u<0;)c=new At(c&&c.array.length?[void 0,c]:[],r),u+=1<<(l+=g);u&&(i+=u,o+=u,a+=u,s+=u);for(var p=qt(s),h=qt(a);h>=1<<l+g;)c=new At(c&&c.array.length?[c]:[],r),l+=g;var f=e._tail,d=h<p?Lt(e,a-1):h>p?new At([],r):f;if(f&&h>p&&i<s&&f.array.length){for(var m=c=Ft(c,r),y=l;y>g;y-=g){var b=p>>>y&v;m=m.array[b]=Ft(m.array[b],r)}m.array[p>>>g&v]=f}if(a<s&&(d=d&&d.removeAfter(r,0,a)),i>=h)i-=h,a-=h,l=g,c=null,d=d&&d.removeBefore(r,0,i);else if(i>o||h<p){for(u=0;c;){var w=i>>>l&v;if(w!==h>>>l&v)break;w&&(u+=(1<<l)*w),l-=g,c=c.array[w]}c&&i>o&&(c=c.removeBefore(r,l,i-u)),c&&h<p&&(c=c.removeAfter(r,l,h-u)),u&&(i-=u,a-=u)}return e.__ownerID?(e.size=a-i,e._origin=i,e._capacity=a,e._level=l,e._root=c,e._tail=d,e.__hash=void 0,e.__altered=!0,e):Tt(i,a,l,c,d)}function $t(e,t,n){for(var r=[],s=0,a=0;a<n.length;a++){var l=n[a],c=o(l);c.size>s&&(s=c.size),i(l)||(c=c.map((function(e){return fe(e)}))),r.push(c)}return s>e.size&&(e=e.setSize(s)),mt(e,t,r)}function qt(e){return e<y?0:e-1>>>g<<g}function Ut(e){return null==e?Wt():zt(e)?e:Wt().withMutations((function(t){var n=r(e);ze(n.size),n.forEach((function(e,n){return t.set(n,e)}))}))}function zt(e){return We(e)&&u(e)}function Vt(e,t,n,r){var o=Object.create(Ut.prototype);return o.size=e?e.size:0,o._map=e,o._list=t,o.__ownerID=n,o.__hash=r,o}function Wt(){return Pt||(Pt=Vt(ot(),Rt()))}function Jt(e,t,n){var r,o,s=e._map,i=e._list,a=s.get(t),l=void 0!==a;if(n===b){if(!l)return e;i.size>=y&&i.size>=2*s.size?(r=(o=i.filter((function(e,t){return void 0!==e&&a!==t}))).toKeyedSeq().map((function(e){return e[0]})).flip().toMap(),e.__ownerID&&(r.__ownerID=o.__ownerID=e.__ownerID)):(r=s.remove(t),o=a===i.size-1?i.pop():i.set(a,void 0))}else if(l){if(n===i.get(a)[1])return e;r=s,o=i.set(a,[t,n])}else r=s.set(t,i.size),o=i.set(i.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=o,e.__hash=void 0,e):Vt(r,o)}function Kt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function Ht(e){this._iter=e,this.size=e.size}function Gt(e){this._iter=e,this.size=e.size}function Zt(e){this._iter=e,this.size=e.size}function Yt(e){var t=bn(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=wn,t.__iterateUncached=function(t,n){var r=this;return e.__iterate((function(e,n){return!1!==t(n,e,r)}),n)},t.__iteratorUncached=function(t,n){if(t===M){var r=e.__iterator(t,n);return new B((function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e}))}return e.__iterator(t===R?T:R,n)},t}function Xt(e,t,n){var r=bn(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,o){var s=e.get(r,b);return s===b?o:t.call(n,s,r,e)},r.__iterateUncached=function(r,o){var s=this;return e.__iterate((function(e,o,i){return!1!==r(t.call(n,e,o,i),o,s)}),o)},r.__iteratorUncached=function(r,o){var s=e.__iterator(M,o);return new B((function(){var o=s.next();if(o.done)return o;var i=o.value,a=i[0];return $(r,a,t.call(n,i[1],a,e),o)}))},r}function Qt(e,t){var n=bn(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=Yt(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=wn,n.__iterate=function(t,n){var r=this;return e.__iterate((function(e,n){return t(e,n,r)}),!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function en(e,t,n,r){var o=bn(e);return r&&(o.has=function(r){var o=e.get(r,b);return o!==b&&!!t.call(n,o,r,e)},o.get=function(r,o){var s=e.get(r,b);return s!==b&&t.call(n,s,r,e)?s:o}),o.__iterateUncached=function(o,s){var i=this,a=0;return e.__iterate((function(e,s,l){if(t.call(n,e,s,l))return a++,o(e,r?s:a-1,i)}),s),a},o.__iteratorUncached=function(o,s){var i=e.__iterator(M,s),a=0;return new B((function(){for(;;){var s=i.next();if(s.done)return s;var l=s.value,c=l[0],u=l[1];if(t.call(n,u,c,e))return $(o,r?c:a++,u,s)}}))},o}function tn(e,t,n){var r=Ve().asMutable();return e.__iterate((function(o,s){r.update(t.call(n,o,s,e),0,(function(e){return e+1}))})),r.asImmutable()}function nn(e,t,n){var r=a(e),o=(u(e)?Ut():Ve()).asMutable();e.__iterate((function(s,i){o.update(t.call(n,s,i,e),(function(e){return(e=e||[]).push(r?[i,s]:s),e}))}));var s=vn(e);return o.map((function(t){return mn(e,s(t))}))}function rn(e,t,n,r){var o=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=o:n|=0),C(t,n,o))return e;var s=P(t,o),i=N(n,o);if(s!=s||i!=i)return rn(e.toSeq().cacheResult(),t,n,r);var a,l=i-s;l==l&&(a=l<0?0:l);var c=bn(e);return c.size=0===a?a:e.size&&a||void 0,!r&&se(e)&&a>=0&&(c.get=function(t,n){return(t=k(this,t))>=0&&t<a?e.get(t+s,n):n}),c.__iterateUncached=function(t,n){var o=this;if(0===a)return 0;if(n)return this.cacheResult().__iterate(t,n);var i=0,l=!0,c=0;return e.__iterate((function(e,n){if(!l||!(l=i++<s))return c++,!1!==t(e,r?n:c-1,o)&&c!==a})),c},c.__iteratorUncached=function(t,n){if(0!==a&&n)return this.cacheResult().__iterator(t,n);var o=0!==a&&e.__iterator(t,n),i=0,l=0;return new B((function(){for(;i++<s;)o.next();if(++l>a)return q();var e=o.next();return r||t===R?e:$(t,l-1,t===T?void 0:e.value[1],e)}))},c}function on(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var s=this;if(o)return this.cacheResult().__iterate(r,o);var i=0;return e.__iterate((function(e,o,a){return t.call(n,e,o,a)&&++i&&r(e,o,s)})),i},r.__iteratorUncached=function(r,o){var s=this;if(o)return this.cacheResult().__iterator(r,o);var i=e.__iterator(M,o),a=!0;return new B((function(){if(!a)return q();var e=i.next();if(e.done)return e;var o=e.value,l=o[0],c=o[1];return t.call(n,c,l,s)?r===M?e:$(r,l,c,e):(a=!1,q())}))},r}function sn(e,t,n,r){var o=bn(e);return o.__iterateUncached=function(o,s){var i=this;if(s)return this.cacheResult().__iterate(o,s);var a=!0,l=0;return e.__iterate((function(e,s,c){if(!a||!(a=t.call(n,e,s,c)))return l++,o(e,r?s:l-1,i)})),l},o.__iteratorUncached=function(o,s){var i=this;if(s)return this.cacheResult().__iterator(o,s);var a=e.__iterator(M,s),l=!0,c=0;return new B((function(){var e,s,u;do{if((e=a.next()).done)return r||o===R?e:$(o,c++,o===T?void 0:e.value[1],e);var p=e.value;s=p[0],u=p[1],l&&(l=t.call(n,u,s,i))}while(l);return o===M?e:$(o,s,u,e)}))},o}function an(e,t){var n=a(e),o=[e].concat(t).map((function(e){return i(e)?n&&(e=r(e)):e=n?ae(e):le(Array.isArray(e)?e:[e]),e})).filter((function(e){return 0!==e.size}));if(0===o.length)return e;if(1===o.length){var s=o[0];if(s===e||n&&a(s)||l(e)&&l(s))return s}var c=new te(o);return n?c=c.toKeyedSeq():l(e)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=o.reduce((function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}}),0),c}function ln(e,t,n){var r=bn(e);return r.__iterateUncached=function(r,o){var s=0,a=!1;function l(e,c){var u=this;e.__iterate((function(e,o){return(!t||c<t)&&i(e)?l(e,c+1):!1===r(e,n?o:s++,u)&&(a=!0),!a}),o)}return l(e,0),s},r.__iteratorUncached=function(r,o){var s=e.__iterator(r,o),a=[],l=0;return new B((function(){for(;s;){var e=s.next();if(!1===e.done){var c=e.value;if(r===M&&(c=c[1]),t&&!(a.length<t)||!i(c))return n?e:$(r,l++,c,e);a.push(s),s=c.__iterator(r,o)}else s=a.pop()}return q()}))},r}function cn(e,t,n){var r=vn(e);return e.toSeq().map((function(o,s){return r(t.call(n,o,s,e))})).flatten(!0)}function un(e,t){var n=bn(e);return n.size=e.size&&2*e.size-1,n.__iterateUncached=function(n,r){var o=this,s=0;return e.__iterate((function(e,r){return(!s||!1!==n(t,s++,o))&&!1!==n(e,s++,o)}),r),s},n.__iteratorUncached=function(n,r){var o,s=e.__iterator(R,r),i=0;return new B((function(){return(!o||i%2)&&(o=s.next()).done?o:i%2?$(n,i++,t):$(n,i++,o.value,o)}))},n}function pn(e,t,n){t||(t=En);var r=a(e),o=0,s=e.toSeq().map((function(t,r){return[r,t,o++,n?n(t,r,e):t]})).toArray();return s.sort((function(e,n){return t(e[3],n[3])||e[2]-n[2]})).forEach(r?function(e,t){s[t].length=2}:function(e,t){s[t]=e[1]}),r?H(s):l(e)?G(s):Z(s)}function hn(e,t,n){if(t||(t=En),n){var r=e.toSeq().map((function(t,r){return[t,n(t,r,e)]})).reduce((function(e,n){return fn(t,e[1],n[1])?n:e}));return r&&r[0]}return e.reduce((function(e,n){return fn(t,e,n)?n:e}))}function fn(e,t,n){var r=e(n,t);return 0===r&&n!==t&&(null==n||n!=n)||r>0}function dn(e,t,r){var o=bn(e);return o.size=new te(r).map((function(e){return e.size})).min(),o.__iterate=function(e,t){for(var n,r=this.__iterator(R,t),o=0;!(n=r.next()).done&&!1!==e(n.value,o++,this););return o},o.__iteratorUncached=function(e,o){var s=r.map((function(e){return e=n(e),V(o?e.reverse():e)})),i=0,a=!1;return new B((function(){var n;return a||(n=s.map((function(e){return e.next()})),a=n.some((function(e){return e.done}))),a?q():$(e,i++,t.apply(null,n.map((function(e){return e.value}))))}))},o}function mn(e,t){return se(e)?t:e.constructor(t)}function gn(e){if(e!==Object(e))throw new TypeError(\"Expected [K, V] tuple: \"+e)}function yn(e){return ze(e.size),O(e)}function vn(e){return a(e)?r:l(e)?o:s}function bn(e){return Object.create((a(e)?H:l(e)?G:Z).prototype)}function wn(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):K.prototype.cacheResult.call(this)}function En(e,t){return e>t?1:e<t?-1:0}function xn(e){var t=V(e);if(!t){if(!J(e))throw new TypeError(\"Expected iterable or array-like: \"+e);t=V(n(e))}return t}function Sn(e,t){var n,r=function(s){if(s instanceof r)return s;if(!(this instanceof r))return new r(s);if(!n){n=!0;var i=Object.keys(e);kn(o,i),o.size=i.length,o._name=t,o._keys=i,o._defaultValues=e}this._map=Ve(s)},o=r.prototype=Object.create(_n);return o.constructor=r,r}t(Ut,Ve),Ut.of=function(){return this(arguments)},Ut.prototype.toString=function(){return this.__toString(\"OrderedMap {\",\"}\")},Ut.prototype.get=function(e,t){var n=this._map.get(e);return void 0!==n?this._list.get(n)[1]:t},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Wt()},Ut.prototype.set=function(e,t){return Jt(this,e,t)},Ut.prototype.remove=function(e){return Jt(this,e,b)},Ut.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Ut.prototype.__iterate=function(e,t){var n=this;return this._list.__iterate((function(t){return t&&e(t[1],t[0],n)}),t)},Ut.prototype.__iterator=function(e,t){return this._list.fromEntrySeq().__iterator(e,t)},Ut.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map.__ensureOwner(e),n=this._list.__ensureOwner(e);return e?Vt(t,n,e,this.__hash):(this.__ownerID=e,this._map=t,this._list=n,this)},Ut.isOrderedMap=zt,Ut.prototype[d]=!0,Ut.prototype[m]=Ut.prototype.remove,t(Kt,H),Kt.prototype.get=function(e,t){return this._iter.get(e,t)},Kt.prototype.has=function(e){return this._iter.has(e)},Kt.prototype.valueSeq=function(){return this._iter.valueSeq()},Kt.prototype.reverse=function(){var e=this,t=Qt(this,!0);return this._useKeys||(t.valueSeq=function(){return e._iter.toSeq().reverse()}),t},Kt.prototype.map=function(e,t){var n=this,r=Xt(this,e,t);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(e,t)}),r},Kt.prototype.__iterate=function(e,t){var n,r=this;return this._iter.__iterate(this._useKeys?function(t,n){return e(t,n,r)}:(n=t?yn(this):0,function(o){return e(o,t?--n:n++,r)}),t)},Kt.prototype.__iterator=function(e,t){if(this._useKeys)return this._iter.__iterator(e,t);var n=this._iter.__iterator(R,t),r=t?yn(this):0;return new B((function(){var o=n.next();return o.done?o:$(e,t?--r:r++,o.value,o)}))},Kt.prototype[d]=!0,t(Ht,G),Ht.prototype.includes=function(e){return this._iter.includes(e)},Ht.prototype.__iterate=function(e,t){var n=this,r=0;return this._iter.__iterate((function(t){return e(t,r++,n)}),t)},Ht.prototype.__iterator=function(e,t){var n=this._iter.__iterator(R,t),r=0;return new B((function(){var t=n.next();return t.done?t:$(e,r++,t.value,t)}))},t(Gt,Z),Gt.prototype.has=function(e){return this._iter.includes(e)},Gt.prototype.__iterate=function(e,t){var n=this;return this._iter.__iterate((function(t){return e(t,t,n)}),t)},Gt.prototype.__iterator=function(e,t){var n=this._iter.__iterator(R,t);return new B((function(){var t=n.next();return t.done?t:$(e,t.value,t.value,t)}))},t(Zt,H),Zt.prototype.entrySeq=function(){return this._iter.toSeq()},Zt.prototype.__iterate=function(e,t){var n=this;return this._iter.__iterate((function(t){if(t){gn(t);var r=i(t);return e(r?t.get(1):t[1],r?t.get(0):t[0],n)}}),t)},Zt.prototype.__iterator=function(e,t){var n=this._iter.__iterator(R,t);return new B((function(){for(;;){var t=n.next();if(t.done)return t;var r=t.value;if(r){gn(r);var o=i(r);return $(e,o?r.get(0):r[0],o?r.get(1):r[1],t)}}}))},Ht.prototype.cacheResult=Kt.prototype.cacheResult=Gt.prototype.cacheResult=Zt.prototype.cacheResult=wn,t(Sn,Se),Sn.prototype.toString=function(){return this.__toString(On(this)+\" {\",\"}\")},Sn.prototype.has=function(e){return this._defaultValues.hasOwnProperty(e)},Sn.prototype.get=function(e,t){if(!this.has(e))return t;var n=this._defaultValues[e];return this._map?this._map.get(e,n):n},Sn.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var e=this.constructor;return e._empty||(e._empty=jn(this,ot()))},Sn.prototype.set=function(e,t){if(!this.has(e))throw new Error('Cannot set unknown key \"'+e+'\" on '+On(this));if(this._map&&!this._map.has(e)&&t===this._defaultValues[e])return this;var n=this._map&&this._map.set(e,t);return this.__ownerID||n===this._map?this:jn(this,n)},Sn.prototype.remove=function(e){if(!this.has(e))return this;var t=this._map&&this._map.remove(e);return this.__ownerID||t===this._map?this:jn(this,t)},Sn.prototype.wasAltered=function(){return this._map.wasAltered()},Sn.prototype.__iterator=function(e,t){var n=this;return r(this._defaultValues).map((function(e,t){return n.get(t)})).__iterator(e,t)},Sn.prototype.__iterate=function(e,t){var n=this;return r(this._defaultValues).map((function(e,t){return n.get(t)})).__iterate(e,t)},Sn.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map&&this._map.__ensureOwner(e);return e?jn(this,t,e):(this.__ownerID=e,this._map=t,this)};var _n=Sn.prototype;function jn(e,t,n){var r=Object.create(Object.getPrototypeOf(e));return r._map=t,r.__ownerID=n,r}function On(e){return e._name||e.constructor.name||\"Record\"}function kn(e,t){try{t.forEach(An.bind(void 0,e))}catch(e){}}function An(e,t){Object.defineProperty(e,t,{get:function(){return this.get(t)},set:function(e){we(this.__ownerID,\"Cannot set on an immutable record.\"),this.set(t,e)}})}function Cn(e){return null==e?Dn():Pn(e)&&!u(e)?e:Dn().withMutations((function(t){var n=s(e);ze(n.size),n.forEach((function(e){return t.add(e)}))}))}function Pn(e){return!(!e||!e[In])}_n[m]=_n.remove,_n.deleteIn=_n.removeIn=He.removeIn,_n.merge=He.merge,_n.mergeWith=He.mergeWith,_n.mergeIn=He.mergeIn,_n.mergeDeep=He.mergeDeep,_n.mergeDeepWith=He.mergeDeepWith,_n.mergeDeepIn=He.mergeDeepIn,_n.setIn=He.setIn,_n.update=He.update,_n.updateIn=He.updateIn,_n.withMutations=He.withMutations,_n.asMutable=He.asMutable,_n.asImmutable=He.asImmutable,t(Cn,je),Cn.of=function(){return this(arguments)},Cn.fromKeys=function(e){return this(r(e).keySeq())},Cn.prototype.toString=function(){return this.__toString(\"Set {\",\"}\")},Cn.prototype.has=function(e){return this._map.has(e)},Cn.prototype.add=function(e){return Rn(this,this._map.set(e,!0))},Cn.prototype.remove=function(e){return Rn(this,this._map.remove(e))},Cn.prototype.clear=function(){return Rn(this,this._map.clear())},Cn.prototype.union=function(){var t=e.call(arguments,0);return 0===(t=t.filter((function(e){return 0!==e.size}))).length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations((function(e){for(var n=0;n<t.length;n++)s(t[n]).forEach((function(t){return e.add(t)}))})):this.constructor(t[0])},Cn.prototype.intersect=function(){var t=e.call(arguments,0);if(0===t.length)return this;t=t.map((function(e){return s(e)}));var n=this;return this.withMutations((function(e){n.forEach((function(n){t.every((function(e){return e.includes(n)}))||e.remove(n)}))}))},Cn.prototype.subtract=function(){var t=e.call(arguments,0);if(0===t.length)return this;t=t.map((function(e){return s(e)}));var n=this;return this.withMutations((function(e){n.forEach((function(n){t.some((function(e){return e.includes(n)}))&&e.remove(n)}))}))},Cn.prototype.merge=function(){return this.union.apply(this,arguments)},Cn.prototype.mergeWith=function(t){var n=e.call(arguments,1);return this.union.apply(this,n)},Cn.prototype.sort=function(e){return Fn(pn(this,e))},Cn.prototype.sortBy=function(e,t){return Fn(pn(this,t,e))},Cn.prototype.wasAltered=function(){return this._map.wasAltered()},Cn.prototype.__iterate=function(e,t){var n=this;return this._map.__iterate((function(t,r){return e(r,r,n)}),t)},Cn.prototype.__iterator=function(e,t){return this._map.map((function(e,t){return t})).__iterator(e,t)},Cn.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map.__ensureOwner(e);return e?this.__make(t,e):(this.__ownerID=e,this._map=t,this)},Cn.isSet=Pn;var Nn,In=\"@@__IMMUTABLE_SET__@@\",Tn=Cn.prototype;function Rn(e,t){return e.__ownerID?(e.size=t.size,e._map=t,e):t===e._map?e:0===t.size?e.__empty():e.__make(t)}function Mn(e,t){var n=Object.create(Tn);return n.size=e?e.size:0,n._map=e,n.__ownerID=t,n}function Dn(){return Nn||(Nn=Mn(ot()))}function Fn(e){return null==e?Un():Ln(e)?e:Un().withMutations((function(t){var n=s(e);ze(n.size),n.forEach((function(e){return t.add(e)}))}))}function Ln(e){return Pn(e)&&u(e)}Tn[In]=!0,Tn[m]=Tn.remove,Tn.mergeDeep=Tn.merge,Tn.mergeDeepWith=Tn.mergeWith,Tn.withMutations=He.withMutations,Tn.asMutable=He.asMutable,Tn.asImmutable=He.asImmutable,Tn.__empty=Dn,Tn.__make=Mn,t(Fn,Cn),Fn.of=function(){return this(arguments)},Fn.fromKeys=function(e){return this(r(e).keySeq())},Fn.prototype.toString=function(){return this.__toString(\"OrderedSet {\",\"}\")},Fn.isOrderedSet=Ln;var Bn,$n=Fn.prototype;function qn(e,t){var n=Object.create($n);return n.size=e?e.size:0,n._map=e,n.__ownerID=t,n}function Un(){return Bn||(Bn=qn(Wt()))}function zn(e){return null==e?Gn():Vn(e)?e:Gn().unshiftAll(e)}function Vn(e){return!(!e||!e[Jn])}$n[d]=!0,$n.__empty=Un,$n.__make=qn,t(zn,_e),zn.of=function(){return this(arguments)},zn.prototype.toString=function(){return this.__toString(\"Stack [\",\"]\")},zn.prototype.get=function(e,t){var n=this._head;for(e=k(this,e);n&&e--;)n=n.next;return n?n.value:t},zn.prototype.peek=function(){return this._head&&this._head.value},zn.prototype.push=function(){if(0===arguments.length)return this;for(var e=this.size+arguments.length,t=this._head,n=arguments.length-1;n>=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Hn(e,t)},zn.prototype.pushAll=function(e){if(0===(e=o(e)).size)return this;ze(e.size);var t=this.size,n=this._head;return e.reverse().forEach((function(e){t++,n={value:e,next:n}})),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Hn(t,n)},zn.prototype.pop=function(){return this.slice(1)},zn.prototype.unshift=function(){return this.push.apply(this,arguments)},zn.prototype.unshiftAll=function(e){return this.pushAll(e)},zn.prototype.shift=function(){return this.pop.apply(this,arguments)},zn.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Gn()},zn.prototype.slice=function(e,t){if(C(e,t,this.size))return this;var n=P(e,this.size);if(N(t,this.size)!==this.size)return _e.prototype.slice.call(this,e,t);for(var r=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=r,this._head=o,this.__hash=void 0,this.__altered=!0,this):Hn(r,o)},zn.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Hn(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},zn.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&!1!==e(r.value,n++,this);)r=r.next;return n},zn.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new B((function(){if(r){var t=r.value;return r=r.next,$(e,n++,t)}return q()}))},zn.isStack=Vn;var Wn,Jn=\"@@__IMMUTABLE_STACK__@@\",Kn=zn.prototype;function Hn(e,t,n,r){var o=Object.create(Kn);return o.size=e,o._head=t,o.__ownerID=n,o.__hash=r,o.__altered=!1,o}function Gn(){return Wn||(Wn=Hn(0))}function Zn(e,t){var n=function(n){e.prototype[n]=t[n]};return Object.keys(t).forEach(n),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(t).forEach(n),e}Kn[Jn]=!0,Kn.withMutations=He.withMutations,Kn.asMutable=He.asMutable,Kn.asImmutable=He.asImmutable,Kn.wasAltered=He.wasAltered,n.Iterator=B,Zn(n,{toArray:function(){ze(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate((function(t,n){e[n]=t})),e},toIndexedSeq:function(){return new Ht(this)},toJS:function(){return this.toSeq().map((function(e){return e&&\"function\"==typeof e.toJS?e.toJS():e})).__toJS()},toJSON:function(){return this.toSeq().map((function(e){return e&&\"function\"==typeof e.toJSON?e.toJSON():e})).__toJS()},toKeyedSeq:function(){return new Kt(this,!0)},toMap:function(){return Ve(this.toKeyedSeq())},toObject:function(){ze(this.size);var e={};return this.__iterate((function(t,n){e[n]=t})),e},toOrderedMap:function(){return Ut(this.toKeyedSeq())},toOrderedSet:function(){return Fn(a(this)?this.valueSeq():this)},toSet:function(){return Cn(a(this)?this.valueSeq():this)},toSetSeq:function(){return new Gt(this)},toSeq:function(){return l(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return zn(a(this)?this.valueSeq():this)},toList:function(){return _t(a(this)?this.valueSeq():this)},toString:function(){return\"[Iterable]\"},__toString:function(e,t){return 0===this.size?e+t:e+\" \"+this.toSeq().map(this.__toStringMapper).join(\", \")+\" \"+t},concat:function(){return mn(this,an(this,e.call(arguments,0)))},includes:function(e){return this.some((function(t){return ye(t,e)}))},entries:function(){return this.__iterator(M)},every:function(e,t){ze(this.size);var n=!0;return this.__iterate((function(r,o,s){if(!e.call(t,r,o,s))return n=!1,!1})),n},filter:function(e,t){return mn(this,en(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return ze(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){ze(this.size),e=void 0!==e?\"\"+e:\",\";var t=\"\",n=!0;return this.__iterate((function(r){n?n=!1:t+=e,t+=null!=r?r.toString():\"\"})),t},keys:function(){return this.__iterator(T)},map:function(e,t){return mn(this,Xt(this,e,t))},reduce:function(e,t,n){var r,o;return ze(this.size),arguments.length<2?o=!0:r=t,this.__iterate((function(t,s,i){o?(o=!1,r=t):r=e.call(n,r,t,s,i)})),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return mn(this,Qt(this,!0))},slice:function(e,t){return mn(this,rn(this,e,t,!0))},some:function(e,t){return!this.every(tr(e),t)},sort:function(e){return mn(this,pn(this,e))},values:function(){return this.__iterator(R)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(e,t){return O(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return tn(this,e,t)},equals:function(e){return ve(this,e)},entrySeq:function(){var e=this;if(e._cache)return new te(e._cache);var t=e.toSeq().map(er).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(tr(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate((function(n,o,s){if(e.call(t,n,o,s))return r=[o,n],!1})),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(A)},flatMap:function(e,t){return mn(this,cn(this,e,t))},flatten:function(e){return mn(this,ln(this,e,!0))},fromEntrySeq:function(){return new Zt(this)},get:function(e,t){return this.find((function(t,n){return ye(n,e)}),void 0,t)},getIn:function(e,t){for(var n,r=this,o=xn(e);!(n=o.next()).done;){var s=n.value;if((r=r&&r.get?r.get(s,b):b)===b)return t}return r},groupBy:function(e,t){return nn(this,e,t)},has:function(e){return this.get(e,b)!==b},hasIn:function(e){return this.getIn(e,b)!==b},isSubset:function(e){return e=\"function\"==typeof e.includes?e:n(e),this.every((function(t){return e.includes(t)}))},isSuperset:function(e){return(e=\"function\"==typeof e.isSubset?e:n(e)).isSubset(this)},keyOf:function(e){return this.findKey((function(t){return ye(t,e)}))},keySeq:function(){return this.toSeq().map(Qn).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return hn(this,e)},maxBy:function(e,t){return hn(this,t,e)},min:function(e){return hn(this,e?nr(e):sr)},minBy:function(e,t){return hn(this,t?nr(t):sr,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return mn(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return mn(this,sn(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(tr(e),t)},sortBy:function(e,t){return mn(this,pn(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return mn(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return mn(this,on(this,e,t))},takeUntil:function(e,t){return this.takeWhile(tr(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=ir(this))}});var Yn=n.prototype;Yn[p]=!0,Yn[L]=Yn.values,Yn.__toJS=Yn.toArray,Yn.__toStringMapper=rr,Yn.inspect=Yn.toSource=function(){return this.toString()},Yn.chain=Yn.flatMap,Yn.contains=Yn.includes,Zn(r,{flip:function(){return mn(this,Yt(this))},mapEntries:function(e,t){var n=this,r=0;return mn(this,this.toSeq().map((function(o,s){return e.call(t,[s,o],r++,n)})).fromEntrySeq())},mapKeys:function(e,t){var n=this;return mn(this,this.toSeq().flip().map((function(r,o){return e.call(t,r,o,n)})).flip())}});var Xn=r.prototype;function Qn(e,t){return t}function er(e,t){return[t,e]}function tr(e){return function(){return!e.apply(this,arguments)}}function nr(e){return function(){return-e.apply(this,arguments)}}function rr(e){return\"string\"==typeof e?JSON.stringify(e):String(e)}function or(){return j(arguments)}function sr(e,t){return e<t?1:e>t?-1:0}function ir(e){if(e.size===1/0)return 0;var t=u(e),n=a(e),r=t?1:0;return ar(e.__iterate(n?t?function(e,t){r=31*r+lr(Ae(e),Ae(t))|0}:function(e,t){r=r+lr(Ae(e),Ae(t))|0}:t?function(e){r=31*r+Ae(e)|0}:function(e){r=r+Ae(e)|0}),r)}function ar(e,t){return t=Oe(t,3432918353),t=Oe(t<<15|t>>>-15,461845907),t=Oe(t<<13|t>>>-13,5),t=Oe((t=(t+3864292196|0)^e)^t>>>16,2246822507),t=ke((t=Oe(t^t>>>13,3266489909))^t>>>16)}function lr(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}return Xn[h]=!0,Xn[L]=Yn.entries,Xn.__toJS=Yn.toObject,Xn.__toStringMapper=function(e,t){return JSON.stringify(t)+\": \"+rr(e)},Zn(o,{toKeyedSeq:function(){return new Kt(this,!1)},filter:function(e,t){return mn(this,en(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return mn(this,Qt(this,!1))},slice:function(e,t){return mn(this,rn(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=P(e,e<0?this.count():this.size);var r=this.slice(0,e);return mn(this,1===n?r:r.concat(j(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return mn(this,ln(this,e,!1))},get:function(e,t){return(e=k(this,e))<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find((function(t,n){return n===e}),void 0,t)},has:function(e){return(e=k(this,e))>=0&&(void 0!==this.size?this.size===1/0||e<this.size:-1!==this.indexOf(e))},interpose:function(e){return mn(this,un(this,e))},interleave:function(){var e=[this].concat(j(arguments)),t=dn(this.toSeq(),G.of,e),n=t.flatten(!0);return t.size&&(n.size=t.size*e.length),mn(this,n)},keySeq:function(){return Ee(0,this.size)},last:function(){return this.get(-1)},skipWhile:function(e,t){return mn(this,sn(this,e,t,!1))},zip:function(){return mn(this,dn(this,or,[this].concat(j(arguments))))},zipWith:function(e){var t=j(arguments);return t[0]=this,mn(this,dn(this,e,t))}}),o.prototype[f]=!0,o.prototype[d]=!0,Zn(s,{get:function(e,t){return this.has(e)?e:t},includes:function(e){return this.has(e)},keySeq:function(){return this.valueSeq()}}),s.prototype.has=Yn.includes,s.prototype.contains=s.prototype.includes,Zn(H,r.prototype),Zn(G,o.prototype),Zn(Z,s.prototype),Zn(Se,r.prototype),Zn(_e,o.prototype),Zn(je,s.prototype),{Iterable:n,Seq:K,Collection:xe,Map:Ve,OrderedMap:Ut,List:_t,Stack:zn,Set:Cn,OrderedSet:Fn,Record:Sn,Range:Ee,Repeat:be,is:ye,fromJS:fe}}()},35717:e=>{\"function\"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}}},35823:e=>{e.exports=function(e,t,n,r){var o=new Blob(void 0!==r?[r,e]:[e],{type:n||\"application/octet-stream\"});if(void 0!==window.navigator.msSaveBlob)window.navigator.msSaveBlob(o,t);else{var s=window.URL&&window.URL.createObjectURL?window.URL.createObjectURL(o):window.webkitURL.createObjectURL(o),i=document.createElement(\"a\");i.style.display=\"none\",i.href=s,i.setAttribute(\"download\",t),void 0===i.download&&i.setAttribute(\"target\",\"_blank\"),document.body.appendChild(i),i.click(),setTimeout((function(){document.body.removeChild(i),window.URL.revokeObjectURL(s)}),200)}}},91296:(e,t,n)=>{var r=NaN,o=\"[object Symbol]\",s=/^\\s+|\\s+$/g,i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt,u=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,p=\"object\"==typeof self&&self&&self.Object===Object&&self,h=u||p||Function(\"return this\")(),f=Object.prototype.toString,d=Math.max,m=Math.min,g=function(){return h.Date.now()};function y(e){var t=typeof e;return!!e&&(\"object\"==t||\"function\"==t)}function v(e){if(\"number\"==typeof e)return e;if(function(e){return\"symbol\"==typeof e||function(e){return!!e&&\"object\"==typeof e}(e)&&f.call(e)==o}(e))return r;if(y(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=y(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(s,\"\");var n=a.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):i.test(e)?r:+e}e.exports=function(e,t,n){var r,o,s,i,a,l,c=0,u=!1,p=!1,h=!0;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");function f(t){var n=r,s=o;return r=o=void 0,c=t,i=e.apply(s,n)}function b(e){var n=e-l;return void 0===l||n>=t||n<0||p&&e-c>=s}function w(){var e=g();if(b(e))return E(e);a=setTimeout(w,function(e){var n=t-(e-l);return p?m(n,s-(e-c)):n}(e))}function E(e){return a=void 0,h&&r?f(e):(r=o=void 0,i)}function x(){var e=g(),n=b(e);if(r=arguments,o=this,l=e,n){if(void 0===a)return function(e){return c=e,a=setTimeout(w,t),u?f(e):i}(l);if(p)return a=setTimeout(w,t),f(l)}return void 0===a&&(a=setTimeout(w,t)),i}return t=v(t)||0,y(n)&&(u=!!n.leading,s=(p=\"maxWait\"in n)?d(v(n.maxWait)||0,t):s,h=\"trailing\"in n?!!n.trailing:h),x.cancel=function(){void 0!==a&&clearTimeout(a),c=0,r=l=o=a=void 0},x.flush=function(){return void 0===a?i:E(g())},x}},18552:(e,t,n)=>{var r=n(10852)(n(55639),\"DataView\");e.exports=r},1989:(e,t,n)=>{var r=n(51789),o=n(80401),s=n(57667),i=n(21327),a=n(81866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=i,l.prototype.set=a,e.exports=l},96425:(e,t,n)=>{var r=n(3118),o=n(9435);function s(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}s.prototype=r(o.prototype),s.prototype.constructor=s,e.exports=s},38407:(e,t,n)=>{var r=n(27040),o=n(14125),s=n(82117),i=n(67518),a=n(54705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=i,l.prototype.set=a,e.exports=l},7548:(e,t,n)=>{var r=n(3118),o=n(9435);function s(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}s.prototype=r(o.prototype),s.prototype.constructor=s,e.exports=s},57071:(e,t,n)=>{var r=n(10852)(n(55639),\"Map\");e.exports=r},83369:(e,t,n)=>{var r=n(24785),o=n(11285),s=n(96e3),i=n(49916),a=n(95265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=s,l.prototype.has=i,l.prototype.set=a,e.exports=l},53818:(e,t,n)=>{var r=n(10852)(n(55639),\"Promise\");e.exports=r},58525:(e,t,n)=>{var r=n(10852)(n(55639),\"Set\");e.exports=r},88668:(e,t,n)=>{var r=n(83369),o=n(90619),s=n(72385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}i.prototype.add=i.prototype.push=o,i.prototype.has=s,e.exports=i},46384:(e,t,n)=>{var r=n(38407),o=n(37465),s=n(63779),i=n(67599),a=n(44758),l=n(34309);function c(e){var t=this.__data__=new r(e);this.size=t.size}c.prototype.clear=o,c.prototype.delete=s,c.prototype.get=i,c.prototype.has=a,c.prototype.set=l,e.exports=c},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},11149:(e,t,n)=>{var r=n(55639).Uint8Array;e.exports=r},70577:(e,t,n)=>{var r=n(10852)(n(55639),\"WeakMap\");e.exports=r},96874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},77412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},34963:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,s=[];++n<r;){var i=e[n];t(i,n,e)&&(s[o++]=i)}return s}},47443:(e,t,n)=>{var r=n(42118);e.exports=function(e,t){return!!(null==e?0:e.length)&&r(e,t,0)>-1}},14636:(e,t,n)=>{var r=n(22545),o=n(35694),s=n(1469),i=n(44144),a=n(65776),l=n(36719),c=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=s(e),u=!n&&o(e),p=!n&&!u&&i(e),h=!n&&!u&&!p&&l(e),f=n||u||p||h,d=f?r(e.length,String):[],m=d.length;for(var g in e)!t&&!c.call(e,g)||f&&(\"length\"==g||p&&(\"offset\"==g||\"parent\"==g)||h&&(\"buffer\"==g||\"byteLength\"==g||\"byteOffset\"==g)||a(g,m))||d.push(g);return d}},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},62488:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},62663:e=>{e.exports=function(e,t,n,r){var o=-1,s=null==e?0:e.length;for(r&&s&&(n=e[++o]);++o<s;)n=t(n,e[o],o,e);return n}},82908:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},44286:e=>{e.exports=function(e){return e.split(\"\")}},49029:e=>{var t=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;e.exports=function(e){return e.match(t)||[]}},86556:(e,t,n)=>{var r=n(89465),o=n(77813);e.exports=function(e,t,n){(void 0!==n&&!o(e[t],n)||void 0===n&&!(t in e))&&r(e,t,n)}},34865:(e,t,n)=>{var r=n(89465),o=n(77813),s=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];s.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},44037:(e,t,n)=>{var r=n(98363),o=n(3674);e.exports=function(e,t){return e&&r(t,o(t),e)}},63886:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e,t){return e&&r(t,o(t),e)}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){\"__proto__\"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},85990:(e,t,n)=>{var r=n(46384),o=n(77412),s=n(34865),i=n(44037),a=n(63886),l=n(64626),c=n(278),u=n(18805),p=n(1911),h=n(58234),f=n(46904),d=n(98882),m=n(43824),g=n(29148),y=n(38517),v=n(1469),b=n(44144),w=n(56688),E=n(13218),x=n(72928),S=n(3674),_=n(81704),j=\"[object Arguments]\",O=\"[object Function]\",k=\"[object Object]\",A={};A[j]=A[\"[object Array]\"]=A[\"[object ArrayBuffer]\"]=A[\"[object DataView]\"]=A[\"[object Boolean]\"]=A[\"[object Date]\"]=A[\"[object Float32Array]\"]=A[\"[object Float64Array]\"]=A[\"[object Int8Array]\"]=A[\"[object Int16Array]\"]=A[\"[object Int32Array]\"]=A[\"[object Map]\"]=A[\"[object Number]\"]=A[k]=A[\"[object RegExp]\"]=A[\"[object Set]\"]=A[\"[object String]\"]=A[\"[object Symbol]\"]=A[\"[object Uint8Array]\"]=A[\"[object Uint8ClampedArray]\"]=A[\"[object Uint16Array]\"]=A[\"[object Uint32Array]\"]=!0,A[\"[object Error]\"]=A[O]=A[\"[object WeakMap]\"]=!1,e.exports=function e(t,n,C,P,N,I){var T,R=1&n,M=2&n,D=4&n;if(C&&(T=N?C(t,P,N,I):C(t)),void 0!==T)return T;if(!E(t))return t;var F=v(t);if(F){if(T=m(t),!R)return c(t,T)}else{var L=d(t),B=L==O||\"[object GeneratorFunction]\"==L;if(b(t))return l(t,R);if(L==k||L==j||B&&!N){if(T=M||B?{}:y(t),!R)return M?p(t,a(T,t)):u(t,i(T,t))}else{if(!A[L])return N?t:{};T=g(t,L,R)}}I||(I=new r);var $=I.get(t);if($)return $;I.set(t,T),x(t)?t.forEach((function(r){T.add(e(r,n,C,r,t,I))})):w(t)&&t.forEach((function(r,o){T.set(o,e(r,n,C,o,t,I))}));var q=F?void 0:(D?M?f:h:M?_:S)(t);return o(q||t,(function(r,o){q&&(r=t[o=r]),s(T,o,e(r,n,C,o,t,I))})),T}},3118:(e,t,n)=>{var r=n(13218),o=Object.create,s=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=s},89881:(e,t,n)=>{var r=n(47816),o=n(99291)(r);e.exports=o},41848:e=>{e.exports=function(e,t,n,r){for(var o=e.length,s=n+(r?1:-1);r?s--:++s<o;)if(t(e[s],s,e))return s;return-1}},21078:(e,t,n)=>{var r=n(62488),o=n(37285);e.exports=function e(t,n,s,i,a){var l=-1,c=t.length;for(s||(s=o),a||(a=[]);++l<c;){var u=t[l];n>0&&s(u)?n>1?e(u,n-1,s,i,a):r(a,u):i||(a[a.length]=u)}return a}},28483:(e,t,n)=>{var r=n(25063)();e.exports=r},47816:(e,t,n)=>{var r=n(28483),o=n(3674);e.exports=function(e,t){return e&&r(e,t,o)}},97786:(e,t,n)=>{var r=n(71811),o=n(40327);e.exports=function(e,t){for(var n=0,s=(t=r(t,e)).length;null!=e&&n<s;)e=e[o(t[n++])];return n&&n==s?e:void 0}},68866:(e,t,n)=>{var r=n(62488),o=n(1469);e.exports=function(e,t,n){var s=t(e);return o(e)?s:r(s,n(e))}},44239:(e,t,n)=>{var r=n(62705),o=n(89607),s=n(2333),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":i&&i in Object(e)?o(e):s(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},42118:(e,t,n)=>{var r=n(41848),o=n(62722),s=n(42351);e.exports=function(e,t,n){return t==t?s(e,t,n):r(e,o,n)}},9454:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return o(e)&&\"[object Arguments]\"==r(e)}},90939:(e,t,n)=>{var r=n(2492),o=n(37005);e.exports=function e(t,n,s,i,a){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,s,i,e,a))}},2492:(e,t,n)=>{var r=n(46384),o=n(67114),s=n(18351),i=n(16096),a=n(98882),l=n(1469),c=n(44144),u=n(36719),p=\"[object Arguments]\",h=\"[object Array]\",f=\"[object Object]\",d=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,g,y){var v=l(e),b=l(t),w=v?h:a(e),E=b?h:a(t),x=(w=w==p?f:w)==f,S=(E=E==p?f:E)==f,_=w==E;if(_&&c(e)){if(!c(t))return!1;v=!0,x=!1}if(_&&!x)return y||(y=new r),v||u(e)?o(e,t,n,m,g,y):s(e,t,w,n,m,g,y);if(!(1&n)){var j=x&&d.call(e,\"__wrapped__\"),O=S&&d.call(t,\"__wrapped__\");if(j||O){var k=j?e.value():e,A=O?t.value():t;return y||(y=new r),g(k,A,n,m,y)}}return!!_&&(y||(y=new r),i(e,t,n,m,g,y))}},25588:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&\"[object Map]\"==r(e)}},2958:(e,t,n)=>{var r=n(46384),o=n(90939);e.exports=function(e,t,n,s){var i=n.length,a=i,l=!s;if(null==e)return!a;for(e=Object(e);i--;){var c=n[i];if(l&&c[2]?c[1]!==e[c[0]]:!(c[0]in e))return!1}for(;++i<a;){var u=(c=n[i])[0],p=e[u],h=c[1];if(l&&c[2]){if(void 0===p&&!(u in e))return!1}else{var f=new r;if(s)var d=s(p,h,u,e,t,f);if(!(void 0===d?o(h,p,3,s,f):d))return!1}}return!0}},62722:e=>{e.exports=function(e){return e!=e}},28458:(e,t,n)=>{var r=n(23560),o=n(15346),s=n(13218),i=n(80346),a=/^\\[object .+?Constructor\\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,p=c.hasOwnProperty,h=RegExp(\"^\"+u.call(p).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");e.exports=function(e){return!(!s(e)||o(e))&&(r(e)?h:a).test(i(e))}},29221:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&\"[object Set]\"==r(e)}},38749:(e,t,n)=>{var r=n(44239),o=n(41780),s=n(37005),i={};i[\"[object Float32Array]\"]=i[\"[object Float64Array]\"]=i[\"[object Int8Array]\"]=i[\"[object Int16Array]\"]=i[\"[object Int32Array]\"]=i[\"[object Uint8Array]\"]=i[\"[object Uint8ClampedArray]\"]=i[\"[object Uint16Array]\"]=i[\"[object Uint32Array]\"]=!0,i[\"[object Arguments]\"]=i[\"[object Array]\"]=i[\"[object ArrayBuffer]\"]=i[\"[object Boolean]\"]=i[\"[object DataView]\"]=i[\"[object Date]\"]=i[\"[object Error]\"]=i[\"[object Function]\"]=i[\"[object Map]\"]=i[\"[object Number]\"]=i[\"[object Object]\"]=i[\"[object RegExp]\"]=i[\"[object Set]\"]=i[\"[object String]\"]=i[\"[object WeakMap]\"]=!1,e.exports=function(e){return s(e)&&o(e.length)&&!!i[r(e)]}},67206:(e,t,n)=>{var r=n(91573),o=n(16432),s=n(6557),i=n(1469),a=n(39601);e.exports=function(e){return\"function\"==typeof e?e:null==e?s:\"object\"==typeof e?i(e)?o(e[0],e[1]):r(e):a(e)}},280:(e,t,n)=>{var r=n(25726),o=n(86916),s=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))s.call(e,n)&&\"constructor\"!=n&&t.push(n);return t}},10313:(e,t,n)=>{var r=n(13218),o=n(25726),s=n(33498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return s(e);var t=o(e),n=[];for(var a in e)(\"constructor\"!=a||!t&&i.call(e,a))&&n.push(a);return n}},9435:e=>{e.exports=function(){}},91573:(e,t,n)=>{var r=n(2958),o=n(1499),s=n(42634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?s(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},16432:(e,t,n)=>{var r=n(90939),o=n(27361),s=n(79095),i=n(15403),a=n(89162),l=n(42634),c=n(40327);e.exports=function(e,t){return i(e)&&a(t)?l(c(e),t):function(n){var i=o(n,e);return void 0===i&&i===t?s(n,e):r(t,i,3)}}},42980:(e,t,n)=>{var r=n(46384),o=n(86556),s=n(28483),i=n(59783),a=n(13218),l=n(81704),c=n(36390);e.exports=function e(t,n,u,p,h){t!==n&&s(n,(function(s,l){if(h||(h=new r),a(s))i(t,n,l,u,e,p,h);else{var f=p?p(c(t,l),s,l+\"\",t,n,h):void 0;void 0===f&&(f=s),o(t,l,f)}}),l)}},59783:(e,t,n)=>{var r=n(86556),o=n(64626),s=n(77133),i=n(278),a=n(38517),l=n(35694),c=n(1469),u=n(29246),p=n(44144),h=n(23560),f=n(13218),d=n(68630),m=n(36719),g=n(36390),y=n(59881);e.exports=function(e,t,n,v,b,w,E){var x=g(e,n),S=g(t,n),_=E.get(S);if(_)r(e,n,_);else{var j=w?w(x,S,n+\"\",e,t,E):void 0,O=void 0===j;if(O){var k=c(S),A=!k&&p(S),C=!k&&!A&&m(S);j=S,k||A||C?c(x)?j=x:u(x)?j=i(x):A?(O=!1,j=o(S,!0)):C?(O=!1,j=s(S,!0)):j=[]:d(S)||l(S)?(j=x,l(x)?j=y(x):f(x)&&!h(x)||(j=a(S))):O=!1}O&&(E.set(S,j),b(j,S,v,w,E),E.delete(S)),r(e,n,j)}}},40371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},79152:(e,t,n)=>{var r=n(97786);e.exports=function(e){return function(t){return r(t,e)}}},18674:e=>{e.exports=function(e){return function(t){return null==e?void 0:e[t]}}},10107:e=>{e.exports=function(e,t,n,r,o){return o(e,(function(e,o,s){n=r?(r=!1,e):t(n,e,o,s)})),n}},5976:(e,t,n)=>{var r=n(6557),o=n(45357),s=n(30061);e.exports=function(e,t){return s(o(e,t,r),e+\"\")}},10611:(e,t,n)=>{var r=n(34865),o=n(71811),s=n(65776),i=n(13218),a=n(40327);e.exports=function(e,t,n,l){if(!i(e))return e;for(var c=-1,u=(t=o(t,e)).length,p=u-1,h=e;null!=h&&++c<u;){var f=a(t[c]),d=n;if(\"__proto__\"===f||\"constructor\"===f||\"prototype\"===f)return e;if(c!=p){var m=h[f];void 0===(d=l?l(m,f,h):void 0)&&(d=i(m)?m:s(t[c+1])?[]:{})}r(h,f,d),h=h[f]}return e}},28045:(e,t,n)=>{var r=n(6557),o=n(89250),s=o?function(e,t){return o.set(e,t),e}:r;e.exports=s},56560:(e,t,n)=>{var r=n(75703),o=n(38777),s=n(6557),i=o?function(e,t){return o(e,\"toString\",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:s;e.exports=i},14259:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(o);++r<o;)s[r]=e[r+t];return s}},5076:(e,t,n)=>{var r=n(89881);e.exports=function(e,t){var n;return r(e,(function(e,r,o){return!(n=t(e,r,o))})),!!n}},22545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},80531:(e,t,n)=>{var r=n(62705),o=n(29932),s=n(1469),i=n(33448),a=r?r.prototype:void 0,l=a?a.toString:void 0;e.exports=function e(t){if(\"string\"==typeof t)return t;if(s(t))return o(t,e)+\"\";if(i(t))return l?l.call(t):\"\";var n=t+\"\";return\"0\"==n&&1/t==-Infinity?\"-0\":n}},27561:(e,t,n)=>{var r=n(67990),o=/^\\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(o,\"\"):e}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},57406:(e,t,n)=>{var r=n(71811),o=n(10928),s=n(40292),i=n(40327);e.exports=function(e,t){return t=r(t,e),null==(e=s(e,t))||delete e[i(o(t))]}},1757:e=>{e.exports=function(e,t,n){for(var r=-1,o=e.length,s=t.length,i={};++r<o;){var a=r<s?t[r]:void 0;n(i,e[r],a)}return i}},74757:e=>{e.exports=function(e,t){return e.has(t)}},71811:(e,t,n)=>{var r=n(1469),o=n(15403),s=n(55514),i=n(79833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:s(i(e))}},40180:(e,t,n)=>{var r=n(14259);e.exports=function(e,t,n){var o=e.length;return n=void 0===n?o:n,!t&&n>=o?e:r(e,t,n)}},74318:(e,t,n)=>{var r=n(11149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},64626:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=t&&!t.nodeType&&t,s=o&&e&&!e.nodeType&&e,i=s&&s.exports===o?r.Buffer:void 0,a=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=a?a(n):new e.constructor(n);return e.copy(r),r}},57157:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},93147:e=>{var t=/\\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},40419:(e,t,n)=>{var r=n(62705),o=r?r.prototype:void 0,s=o?o.valueOf:void 0;e.exports=function(e){return s?Object(s.call(e)):{}}},77133:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},52157:e=>{var t=Math.max;e.exports=function(e,n,r,o){for(var s=-1,i=e.length,a=r.length,l=-1,c=n.length,u=t(i-a,0),p=Array(c+u),h=!o;++l<c;)p[l]=n[l];for(;++s<a;)(h||s<i)&&(p[r[s]]=e[s]);for(;u--;)p[l++]=e[s++];return p}},14054:e=>{var t=Math.max;e.exports=function(e,n,r,o){for(var s=-1,i=e.length,a=-1,l=r.length,c=-1,u=n.length,p=t(i-l,0),h=Array(p+u),f=!o;++s<p;)h[s]=e[s];for(var d=s;++c<u;)h[d+c]=n[c];for(;++a<l;)(f||s<i)&&(h[d+r[a]]=e[s++]);return h}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},98363:(e,t,n)=>{var r=n(34865),o=n(89465);e.exports=function(e,t,n,s){var i=!n;n||(n={});for(var a=-1,l=t.length;++a<l;){var c=t[a],u=s?s(n[c],e[c],c,n,e):void 0;void 0===u&&(u=e[c]),i?o(n,c,u):r(n,c,u)}return n}},18805:(e,t,n)=>{var r=n(98363),o=n(99551);e.exports=function(e,t){return r(e,o(e),t)}},1911:(e,t,n)=>{var r=n(98363),o=n(51442);e.exports=function(e,t){return r(e,o(e),t)}},14429:(e,t,n)=>{var r=n(55639)[\"__core-js_shared__\"];e.exports=r},97991:e=>{e.exports=function(e,t){for(var n=e.length,r=0;n--;)e[n]===t&&++r;return r}},21463:(e,t,n)=>{var r=n(5976),o=n(16612);e.exports=function(e){return r((function(t,n){var r=-1,s=n.length,i=s>1?n[s-1]:void 0,a=s>2?n[2]:void 0;for(i=e.length>3&&\"function\"==typeof i?(s--,i):void 0,a&&o(n[0],n[1],a)&&(i=s<3?void 0:i,s=1),t=Object(t);++r<s;){var l=n[r];l&&e(t,l,r,i)}return t}))}},99291:(e,t,n)=>{var r=n(98612);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var s=n.length,i=t?s:-1,a=Object(n);(t?i--:++i<s)&&!1!==o(a[i],i,a););return n}}},25063:e=>{e.exports=function(e){return function(t,n,r){for(var o=-1,s=Object(t),i=r(t),a=i.length;a--;){var l=i[e?a:++o];if(!1===n(s[l],l,s))break}return t}}},22402:(e,t,n)=>{var r=n(71774),o=n(55639);e.exports=function(e,t,n){var s=1&t,i=r(e);return function t(){return(this&&this!==o&&this instanceof t?i:e).apply(s?n:this,arguments)}}},98805:(e,t,n)=>{var r=n(40180),o=n(62689),s=n(83140),i=n(79833);e.exports=function(e){return function(t){t=i(t);var n=o(t)?s(t):void 0,a=n?n[0]:t.charAt(0),l=n?r(n,1).join(\"\"):t.slice(1);return a[e]()+l}}},35393:(e,t,n)=>{var r=n(62663),o=n(53816),s=n(58748),i=RegExp(\"['’]\",\"g\");e.exports=function(e){return function(t){return r(s(o(t).replace(i,\"\")),e,\"\")}}},71774:(e,t,n)=>{var r=n(3118),o=n(13218);e.exports=function(e){return function(){var t=arguments;switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3]);case 5:return new e(t[0],t[1],t[2],t[3],t[4]);case 6:return new e(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new e(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var n=r(e.prototype),s=e.apply(n,t);return o(s)?s:n}}},46347:(e,t,n)=>{var r=n(96874),o=n(71774),s=n(86935),i=n(94487),a=n(20893),l=n(46460),c=n(55639);e.exports=function(e,t,n){var u=o(e);return function o(){for(var p=arguments.length,h=Array(p),f=p,d=a(o);f--;)h[f]=arguments[f];var m=p<3&&h[0]!==d&&h[p-1]!==d?[]:l(h,d);return(p-=m.length)<n?i(e,t,s,o.placeholder,void 0,h,m,void 0,void 0,n-p):r(this&&this!==c&&this instanceof o?u:e,this,h)}}},67740:(e,t,n)=>{var r=n(67206),o=n(98612),s=n(3674);e.exports=function(e){return function(t,n,i){var a=Object(t);if(!o(t)){var l=r(n,3);t=s(t),n=function(e){return l(a[e],e,a)}}var c=e(t,n,i);return c>-1?a[l?t[c]:c]:void 0}}},86935:(e,t,n)=>{var r=n(52157),o=n(14054),s=n(97991),i=n(71774),a=n(94487),l=n(20893),c=n(90451),u=n(46460),p=n(55639);e.exports=function e(t,n,h,f,d,m,g,y,v,b){var w=128&n,E=1&n,x=2&n,S=24&n,_=512&n,j=x?void 0:i(t);return function O(){for(var k=arguments.length,A=Array(k),C=k;C--;)A[C]=arguments[C];if(S)var P=l(O),N=s(A,P);if(f&&(A=r(A,f,d,S)),m&&(A=o(A,m,g,S)),k-=N,S&&k<b){var I=u(A,P);return a(t,n,e,O.placeholder,h,A,I,y,v,b-k)}var T=E?h:this,R=x?T[t]:t;return k=A.length,y?A=c(A,y):_&&k>1&&A.reverse(),w&&v<k&&(A.length=v),this&&this!==p&&this instanceof O&&(R=j||i(R)),R.apply(T,A)}}},84375:(e,t,n)=>{var r=n(96874),o=n(71774),s=n(55639);e.exports=function(e,t,n,i){var a=1&t,l=o(e);return function t(){for(var o=-1,c=arguments.length,u=-1,p=i.length,h=Array(p+c),f=this&&this!==s&&this instanceof t?l:e;++u<p;)h[u]=i[u];for(;c--;)h[u++]=arguments[++o];return r(f,a?n:this,h)}}},94487:(e,t,n)=>{var r=n(86528),o=n(258),s=n(69255);e.exports=function(e,t,n,i,a,l,c,u,p,h){var f=8&t;t|=f?32:64,4&(t&=~(f?64:32))||(t&=-4);var d=[e,t,a,f?l:void 0,f?c:void 0,f?void 0:l,f?void 0:c,u,p,h],m=n.apply(void 0,d);return r(e)&&o(m,d),m.placeholder=i,s(m,e,t)}},97727:(e,t,n)=>{var r=n(28045),o=n(22402),s=n(46347),i=n(86935),a=n(84375),l=n(66833),c=n(63833),u=n(258),p=n(69255),h=n(40554),f=Math.max;e.exports=function(e,t,n,d,m,g,y,v){var b=2&t;if(!b&&\"function\"!=typeof e)throw new TypeError(\"Expected a function\");var w=d?d.length:0;if(w||(t&=-97,d=m=void 0),y=void 0===y?y:f(h(y),0),v=void 0===v?v:h(v),w-=m?m.length:0,64&t){var E=d,x=m;d=m=void 0}var S=b?void 0:l(e),_=[e,t,n,d,m,E,x,g,y,v];if(S&&c(_,S),e=_[0],t=_[1],n=_[2],d=_[3],m=_[4],!(v=_[9]=void 0===_[9]?b?0:e.length:f(_[9]-w,0))&&24&t&&(t&=-25),t&&1!=t)j=8==t||16==t?s(e,t,v):32!=t&&33!=t||m.length?i.apply(void 0,_):a(e,t,n,d);else var j=o(e,t,n);return p((S?r:u)(j,_),e,t)}},60696:(e,t,n)=>{var r=n(68630);e.exports=function(e){return r(e)?void 0:e}},69389:(e,t,n)=>{var r=n(18674)({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"});e.exports=r},38777:(e,t,n)=>{var r=n(10852),o=function(){try{var e=r(Object,\"defineProperty\");return e({},\"\",{}),e}catch(e){}}();e.exports=o},67114:(e,t,n)=>{var r=n(88668),o=n(82908),s=n(74757);e.exports=function(e,t,n,i,a,l){var c=1&n,u=e.length,p=t.length;if(u!=p&&!(c&&p>u))return!1;var h=l.get(e),f=l.get(t);if(h&&f)return h==t&&f==e;var d=-1,m=!0,g=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++d<u;){var y=e[d],v=t[d];if(i)var b=c?i(v,y,d,t,e,l):i(y,v,d,e,t,l);if(void 0!==b){if(b)continue;m=!1;break}if(g){if(!o(t,(function(e,t){if(!s(g,t)&&(y===e||a(y,e,n,i,l)))return g.push(t)}))){m=!1;break}}else if(y!==v&&!a(y,v,n,i,l)){m=!1;break}}return l.delete(e),l.delete(t),m}},18351:(e,t,n)=>{var r=n(62705),o=n(11149),s=n(77813),i=n(67114),a=n(68776),l=n(21814),c=r?r.prototype:void 0,u=c?c.valueOf:void 0;e.exports=function(e,t,n,r,c,p,h){switch(n){case\"[object DataView]\":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case\"[object ArrayBuffer]\":return!(e.byteLength!=t.byteLength||!p(new o(e),new o(t)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return s(+e,+t);case\"[object Error]\":return e.name==t.name&&e.message==t.message;case\"[object RegExp]\":case\"[object String]\":return e==t+\"\";case\"[object Map]\":var f=a;case\"[object Set]\":var d=1&r;if(f||(f=l),e.size!=t.size&&!d)return!1;var m=h.get(e);if(m)return m==t;r|=2,h.set(e,t);var g=i(f(e),f(t),r,c,p,h);return h.delete(e),g;case\"[object Symbol]\":if(u)return u.call(e)==u.call(t)}return!1}},16096:(e,t,n)=>{var r=n(58234),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,s,i,a){var l=1&n,c=r(e),u=c.length;if(u!=r(t).length&&!l)return!1;for(var p=u;p--;){var h=c[p];if(!(l?h in t:o.call(t,h)))return!1}var f=a.get(e),d=a.get(t);if(f&&d)return f==t&&d==e;var m=!0;a.set(e,t),a.set(t,e);for(var g=l;++p<u;){var y=e[h=c[p]],v=t[h];if(s)var b=l?s(v,y,h,t,e,a):s(y,v,h,e,t,a);if(!(void 0===b?y===v||i(y,v,n,s,a):b)){m=!1;break}g||(g=\"constructor\"==h)}if(m&&!g){var w=e.constructor,E=t.constructor;w==E||!(\"constructor\"in e)||!(\"constructor\"in t)||\"function\"==typeof w&&w instanceof w&&\"function\"==typeof E&&E instanceof E||(m=!1)}return a.delete(e),a.delete(t),m}},99021:(e,t,n)=>{var r=n(85564),o=n(45357),s=n(30061);e.exports=function(e){return s(o(e,void 0,r),e+\"\")}},31957:(e,t,n)=>{var r=\"object\"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},58234:(e,t,n)=>{var r=n(68866),o=n(99551),s=n(3674);e.exports=function(e){return r(e,s,o)}},46904:(e,t,n)=>{var r=n(68866),o=n(51442),s=n(81704);e.exports=function(e){return r(e,s,o)}},66833:(e,t,n)=>{var r=n(89250),o=n(50308),s=r?function(e){return r.get(e)}:o;e.exports=s},97658:(e,t,n)=>{var r=n(52060),o=Object.prototype.hasOwnProperty;e.exports=function(e){for(var t=e.name+\"\",n=r[t],s=o.call(r,t)?n.length:0;s--;){var i=n[s],a=i.func;if(null==a||a==e)return i.name}return t}},20893:e=>{e.exports=function(e){return e.placeholder}},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n[\"string\"==typeof t?\"string\":\"hash\"]:n.map}},1499:(e,t,n)=>{var r=n(89162),o=n(3674);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var s=t[n],i=e[s];t[n]=[s,i,r(i)]}return t}},10852:(e,t,n)=>{var r=n(28458),o=n(47801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},85924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},89607:(e,t,n)=>{var r=n(62705),o=Object.prototype,s=o.hasOwnProperty,i=o.toString,a=r?r.toStringTag:void 0;e.exports=function(e){var t=s.call(e,a),n=e[a];try{e[a]=void 0;var r=!0}catch(e){}var o=i.call(e);return r&&(t?e[a]=n:delete e[a]),o}},99551:(e,t,n)=>{var r=n(34963),o=n(70479),s=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,a=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return s.call(e,t)})))}:o;e.exports=a},51442:(e,t,n)=>{var r=n(62488),o=n(85924),s=n(99551),i=n(70479),a=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,s(e)),e=o(e);return t}:i;e.exports=a},98882:(e,t,n)=>{var r=n(18552),o=n(57071),s=n(53818),i=n(58525),a=n(70577),l=n(44239),c=n(80346),u=\"[object Map]\",p=\"[object Promise]\",h=\"[object Set]\",f=\"[object WeakMap]\",d=\"[object DataView]\",m=c(r),g=c(o),y=c(s),v=c(i),b=c(a),w=l;(r&&w(new r(new ArrayBuffer(1)))!=d||o&&w(new o)!=u||s&&w(s.resolve())!=p||i&&w(new i)!=h||a&&w(new a)!=f)&&(w=function(e){var t=l(e),n=\"[object Object]\"==t?e.constructor:void 0,r=n?c(n):\"\";if(r)switch(r){case m:return d;case g:return u;case y:return p;case v:return h;case b:return f}return t}),e.exports=w},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},58775:e=>{var t=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,n=/,? & /;e.exports=function(e){var r=e.match(t);return r?r[1].split(n):[]}},222:(e,t,n)=>{var r=n(71811),o=n(35694),s=n(1469),i=n(65776),a=n(41780),l=n(40327);e.exports=function(e,t,n){for(var c=-1,u=(t=r(t,e)).length,p=!1;++c<u;){var h=l(t[c]);if(!(p=null!=e&&n(e,h)))break;e=e[h]}return p||++c!=u?p:!!(u=null==e?0:e.length)&&a(u)&&i(h,u)&&(s(e)||o(e))}},62689:e=>{var t=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\");e.exports=function(e){return t.test(e)}},93157:e=>{var t=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;e.exports=function(e){return t.test(e)}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return\"__lodash_hash_undefined__\"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?\"__lodash_hash_undefined__\":t,this}},43824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&\"string\"==typeof e[0]&&t.call(e,\"index\")&&(r.index=e.index,r.input=e.input),r}},29148:(e,t,n)=>{var r=n(74318),o=n(57157),s=n(93147),i=n(40419),a=n(77133);e.exports=function(e,t,n){var l=e.constructor;switch(t){case\"[object ArrayBuffer]\":return r(e);case\"[object Boolean]\":case\"[object Date]\":return new l(+e);case\"[object DataView]\":return o(e,n);case\"[object Float32Array]\":case\"[object Float64Array]\":case\"[object Int8Array]\":case\"[object Int16Array]\":case\"[object Int32Array]\":case\"[object Uint8Array]\":case\"[object Uint8ClampedArray]\":case\"[object Uint16Array]\":case\"[object Uint32Array]\":return a(e,n);case\"[object Map]\":case\"[object Set]\":return new l;case\"[object Number]\":case\"[object String]\":return new l(e);case\"[object RegExp]\":return s(e);case\"[object Symbol]\":return i(e)}}},38517:(e,t,n)=>{var r=n(3118),o=n(85924),s=n(25726);e.exports=function(e){return\"function\"!=typeof e.constructor||s(e)?{}:r(o(e))}},83112:e=>{var t=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/;e.exports=function(e,n){var r=n.length;if(!r)return e;var o=r-1;return n[o]=(r>1?\"& \":\"\")+n[o],n=n.join(r>2?\", \":\" \"),e.replace(t,\"{\\n/* [wrapped with \"+n+\"] */\\n\")}},37285:(e,t,n)=>{var r=n(62705),o=n(35694),s=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return s(e)||o(e)||!!(i&&e&&e[i])}},65776:e=>{var t=/^(?:0|[1-9]\\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&(\"number\"==r||\"symbol\"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},16612:(e,t,n)=>{var r=n(77813),o=n(98612),s=n(65776),i=n(13218);e.exports=function(e,t,n){if(!i(n))return!1;var a=typeof t;return!!(\"number\"==a?o(n)&&s(t,n.length):\"string\"==a&&t in n)&&r(n[t],e)}},15403:(e,t,n)=>{var r=n(1469),o=n(33448),s=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,i=/^\\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=e&&!o(e))||(i.test(e)||!s.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return\"string\"==t||\"number\"==t||\"symbol\"==t||\"boolean\"==t?\"__proto__\"!==e:null===e}},86528:(e,t,n)=>{var r=n(96425),o=n(66833),s=n(97658),i=n(8111);e.exports=function(e){var t=s(e),n=i[t];if(\"function\"!=typeof n||!(t in r.prototype))return!1;if(e===n)return!0;var a=o(n);return!!a&&e===a[0]}},15346:(e,t,n)=>{var r,o=n(14429),s=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+r:\"\";e.exports=function(e){return!!s&&s in e}},25726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===(\"function\"==typeof n&&n.prototype||t)}},89162:(e,t,n)=>{var r=n(13218);e.exports=function(e){return e==e&&!r(e)}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),o=n(38407),s=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(s||o),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},68776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},42634:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},63833:(e,t,n)=>{var r=n(52157),o=n(14054),s=n(46460),i=\"__lodash_placeholder__\",a=128,l=Math.min;e.exports=function(e,t){var n=e[1],c=t[1],u=n|c,p=u<131,h=c==a&&8==n||c==a&&256==n&&e[7].length<=t[8]||384==c&&t[7].length<=t[8]&&8==n;if(!p&&!h)return e;1&c&&(e[2]=t[2],u|=1&n?0:4);var f=t[3];if(f){var d=e[3];e[3]=d?r(d,f,t[4]):f,e[4]=d?s(e[3],i):t[4]}return(f=t[5])&&(d=e[5],e[5]=d?o(d,f,t[6]):f,e[6]=d?s(e[5],i):t[6]),(f=t[7])&&(e[7]=f),c&a&&(e[8]=null==e[8]?t[8]:l(e[8],t[8])),null==e[9]&&(e[9]=t[9]),e[0]=t[0],e[1]=u,e}},89250:(e,t,n)=>{var r=n(70577),o=r&&new r;e.exports=o},94536:(e,t,n)=>{var r=n(10852)(Object,\"create\");e.exports=r},86916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},33498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},31167:(e,t,n)=>{e=n.nmd(e);var r=n(31957),o=t&&!t.nodeType&&t,s=o&&e&&!e.nodeType&&e,i=s&&s.exports===o&&r.process,a=function(){try{var e=s&&s.require&&s.require(\"util\").types;return e||i&&i.binding&&i.binding(\"util\")}catch(e){}}();e.exports=a},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},45357:(e,t,n)=>{var r=n(96874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var s=arguments,i=-1,a=o(s.length-t,0),l=Array(a);++i<a;)l[i]=s[t+i];i=-1;for(var c=Array(t+1);++i<t;)c[i]=s[i];return c[t]=n(l),r(e,this,c)}}},40292:(e,t,n)=>{var r=n(97786),o=n(14259);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},52060:e=>{e.exports={}},90451:(e,t,n)=>{var r=n(278),o=n(65776),s=Math.min;e.exports=function(e,t){for(var n=e.length,i=s(t.length,n),a=r(e);i--;){var l=t[i];e[i]=o(l,n)?a[l]:void 0}return e}},46460:e=>{var t=\"__lodash_placeholder__\";e.exports=function(e,n){for(var r=-1,o=e.length,s=0,i=[];++r<o;){var a=e[r];a!==n&&a!==t||(e[r]=t,i[s++]=r)}return i}},55639:(e,t,n)=>{var r=n(31957),o=\"object\"==typeof self&&self&&self.Object===Object&&self,s=r||o||Function(\"return this\")();e.exports=s},36390:e=>{e.exports=function(e,t){if((\"constructor\"!==t||\"function\"!=typeof e[t])&&\"__proto__\"!=t)return e[t]}},90619:e=>{e.exports=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this}},72385:e=>{e.exports=function(e){return this.__data__.has(e)}},258:(e,t,n)=>{var r=n(28045),o=n(21275)(r);e.exports=o},21814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},30061:(e,t,n)=>{var r=n(56560),o=n(21275)(r);e.exports=o},69255:(e,t,n)=>{var r=n(58775),o=n(83112),s=n(30061),i=n(87241);e.exports=function(e,t,n){var a=t+\"\";return s(e,o(a,i(r(a),n)))}},21275:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),s=16-(o-r);if(r=o,s>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},37465:(e,t,n)=>{var r=n(38407);e.exports=function(){this.__data__=new r,this.size=0}},63779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},67599:e=>{e.exports=function(e){return this.__data__.get(e)}},44758:e=>{e.exports=function(e){return this.__data__.has(e)}},34309:(e,t,n)=>{var r=n(38407),o=n(57071),s=n(83369);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new s(i)}return n.set(e,t),this.size=n.size,this}},42351:e=>{e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r<o;)if(e[r]===t)return r;return-1}},83140:(e,t,n)=>{var r=n(44286),o=n(62689),s=n(676);e.exports=function(e){return o(e)?s(e):r(e)}},55514:(e,t,n)=>{var r=n(24523),o=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,s=/\\\\(\\\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(\"\"),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(s,\"$1\"):n||e)})),t}));e.exports=i},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if(\"string\"==typeof e||r(e))return e;var t=e+\"\";return\"0\"==t&&1/e==-Infinity?\"-0\":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}},67990:e=>{var t=/\\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},676:e=>{var t=\"\\\\ud800-\\\\udfff\",n=\"[\"+t+\"]\",r=\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",o=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",s=\"[^\"+t+\"]\",i=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",a=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",l=\"(?:\"+r+\"|\"+o+\")\"+\"?\",c=\"[\\\\ufe0e\\\\ufe0f]?\",u=c+l+(\"(?:\\\\u200d(?:\"+[s,i,a].join(\"|\")+\")\"+c+l+\")*\"),p=\"(?:\"+[s+r+\"?\",r,i,a,n].join(\"|\")+\")\",h=RegExp(o+\"(?=\"+o+\")|\"+p+u,\"g\");e.exports=function(e){return e.match(h)||[]}},2757:e=>{var t=\"\\\\ud800-\\\\udfff\",n=\"\\\\u2700-\\\\u27bf\",r=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",o=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",s=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",i=\"[\"+s+\"]\",a=\"\\\\d+\",l=\"[\"+n+\"]\",c=\"[\"+r+\"]\",u=\"[^\"+t+s+a+n+r+o+\"]\",p=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",h=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",f=\"[\"+o+\"]\",d=\"(?:\"+c+\"|\"+u+\")\",m=\"(?:\"+f+\"|\"+u+\")\",g=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",y=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",v=\"(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?\",b=\"[\\\\ufe0e\\\\ufe0f]?\",w=b+v+(\"(?:\\\\u200d(?:\"+[\"[^\"+t+\"]\",p,h].join(\"|\")+\")\"+b+v+\")*\"),E=\"(?:\"+[l,p,h].join(\"|\")+\")\"+w,x=RegExp([f+\"?\"+c+\"+\"+g+\"(?=\"+[i,f,\"$\"].join(\"|\")+\")\",m+\"+\"+y+\"(?=\"+[i,f+d,\"$\"].join(\"|\")+\")\",f+\"?\"+d+\"+\"+g,f+\"+\"+y,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",a,E].join(\"|\"),\"g\");e.exports=function(e){return e.match(x)||[]}},87241:(e,t,n)=>{var r=n(77412),o=n(47443),s=[[\"ary\",128],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",32],[\"partialRight\",64],[\"rearg\",256]];e.exports=function(e,t){return r(s,(function(n){var r=\"_.\"+n[0];t&n[1]&&!o(e,r)&&e.push(r)})),e.sort()}},21913:(e,t,n)=>{var r=n(96425),o=n(7548),s=n(278);e.exports=function(e){if(e instanceof r)return e.clone();var t=new o(e.__wrapped__,e.__chain__);return t.__actions__=s(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},39514:(e,t,n)=>{var r=n(97727);e.exports=function(e,t,n){return t=n?void 0:t,t=e&&null==t?e.length:t,r(e,128,void 0,void 0,void 0,void 0,t)}},68929:(e,t,n)=>{var r=n(48403),o=n(35393)((function(e,t,n){return t=t.toLowerCase(),e+(n?r(t):t)}));e.exports=o},48403:(e,t,n)=>{var r=n(79833),o=n(11700);e.exports=function(e){return o(r(e).toLowerCase())}},66678:(e,t,n)=>{var r=n(85990);e.exports=function(e){return r(e,4)}},75703:e=>{e.exports=function(e){return function(){return e}}},40087:(e,t,n)=>{var r=n(97727);function o(e,t,n){var s=r(e,8,void 0,void 0,void 0,void 0,void 0,t=n?void 0:t);return s.placeholder=o.placeholder,s}o.placeholder={},e.exports=o},23279:(e,t,n)=>{var r=n(13218),o=n(7771),s=n(14841),i=Math.max,a=Math.min;e.exports=function(e,t,n){var l,c,u,p,h,f,d=0,m=!1,g=!1,y=!0;if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");function v(t){var n=l,r=c;return l=c=void 0,d=t,p=e.apply(r,n)}function b(e){var n=e-f;return void 0===f||n>=t||n<0||g&&e-d>=u}function w(){var e=o();if(b(e))return E(e);h=setTimeout(w,function(e){var n=t-(e-f);return g?a(n,u-(e-d)):n}(e))}function E(e){return h=void 0,y&&l?v(e):(l=c=void 0,p)}function x(){var e=o(),n=b(e);if(l=arguments,c=this,f=e,n){if(void 0===h)return function(e){return d=e,h=setTimeout(w,t),m?v(e):p}(f);if(g)return clearTimeout(h),h=setTimeout(w,t),v(f)}return void 0===h&&(h=setTimeout(w,t)),p}return t=s(t)||0,r(n)&&(m=!!n.leading,u=(g=\"maxWait\"in n)?i(s(n.maxWait)||0,t):u,y=\"trailing\"in n?!!n.trailing:y),x.cancel=function(){void 0!==h&&clearTimeout(h),d=0,l=f=c=h=void 0},x.flush=function(){return void 0===h?p:E(o())},x}},53816:(e,t,n)=>{var r=n(69389),o=n(79833),s=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,i=RegExp(\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\"g\");e.exports=function(e){return(e=o(e))&&e.replace(s,r).replace(i,\"\")}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},13311:(e,t,n)=>{var r=n(67740)(n(30998));e.exports=r},30998:(e,t,n)=>{var r=n(41848),o=n(67206),s=n(40554),i=Math.max;e.exports=function(e,t,n){var a=null==e?0:e.length;if(!a)return-1;var l=null==n?0:s(n);return l<0&&(l=i(a+l,0)),r(e,o(t,3),l)}},85564:(e,t,n)=>{var r=n(21078);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},84599:(e,t,n)=>{var r=n(68836),o=n(69306),s=Array.prototype.push;function i(e,t){return 2==t?function(t,n){return e(t,n)}:function(t){return e(t)}}function a(e){for(var t=e?e.length:0,n=Array(t);t--;)n[t]=e[t];return n}function l(e,t){return function(){var n=arguments.length;if(n){for(var r=Array(n);n--;)r[n]=arguments[n];var o=r[0]=t.apply(void 0,r);return e.apply(void 0,r),o}}}e.exports=function e(t,n,c,u){var p=\"function\"==typeof n,h=n===Object(n);if(h&&(u=c,c=n,n=void 0),null==c)throw new TypeError;u||(u={});var f={cap:!(\"cap\"in u)||u.cap,curry:!(\"curry\"in u)||u.curry,fixed:!(\"fixed\"in u)||u.fixed,immutable:!(\"immutable\"in u)||u.immutable,rearg:!(\"rearg\"in u)||u.rearg},d=p?c:o,m=\"curry\"in u&&u.curry,g=\"fixed\"in u&&u.fixed,y=\"rearg\"in u&&u.rearg,v=p?c.runInContext():void 0,b=p?c:{ary:t.ary,assign:t.assign,clone:t.clone,curry:t.curry,forEach:t.forEach,isArray:t.isArray,isError:t.isError,isFunction:t.isFunction,isWeakMap:t.isWeakMap,iteratee:t.iteratee,keys:t.keys,rearg:t.rearg,toInteger:t.toInteger,toPath:t.toPath},w=b.ary,E=b.assign,x=b.clone,S=b.curry,_=b.forEach,j=b.isArray,O=b.isError,k=b.isFunction,A=b.isWeakMap,C=b.keys,P=b.rearg,N=b.toInteger,I=b.toPath,T=C(r.aryMethod),R={castArray:function(e){return function(){var t=arguments[0];return j(t)?e(a(t)):e.apply(void 0,arguments)}},iteratee:function(e){return function(){var t=arguments[1],n=e(arguments[0],t),r=n.length;return f.cap&&\"number\"==typeof t?(t=t>2?t-2:1,r&&r<=t?n:i(n,t)):n}},mixin:function(e){return function(t){var n=this;if(!k(n))return e(n,Object(t));var r=[];return _(C(t),(function(e){k(t[e])&&r.push([e,n.prototype[e]])})),e(n,Object(t)),_(r,(function(e){var t=e[1];k(t)?n.prototype[e[0]]=t:delete n.prototype[e[0]]})),n}},nthArg:function(e){return function(t){var n=t<0?1:N(t)+1;return S(e(t),n)}},rearg:function(e){return function(t,n){var r=n?n.length:0;return S(e(t,n),r)}},runInContext:function(n){return function(r){return e(t,n(r),u)}}};function M(e,t){if(f.cap){var n=r.iterateeRearg[e];if(n)return function(e,t){return $(e,(function(e){var n=t.length;return function(e,t){return 2==t?function(t,n){return e.apply(void 0,arguments)}:function(t){return e.apply(void 0,arguments)}}(P(i(e,n),t),n)}))}(t,n);var o=!p&&r.iterateeAry[e];if(o)return function(e,t){return $(e,(function(e){return\"function\"==typeof e?i(e,t):e}))}(t,o)}return t}function D(e,t,n){if(f.fixed&&(g||!r.skipFixed[e])){var o=r.methodSpread[e],i=o&&o.start;return void 0===i?w(t,n):function(e,t){return function(){for(var n=arguments.length,r=n-1,o=Array(n);n--;)o[n]=arguments[n];var i=o[t],a=o.slice(0,t);return i&&s.apply(a,i),t!=r&&s.apply(a,o.slice(t+1)),e.apply(this,a)}}(t,i)}return t}function F(e,t,n){return f.rearg&&n>1&&(y||!r.skipRearg[e])?P(t,r.methodRearg[e]||r.aryRearg[n]):t}function L(e,t){for(var n=-1,r=(t=I(t)).length,o=r-1,s=x(Object(e)),i=s;null!=i&&++n<r;){var a=t[n],l=i[a];null==l||k(l)||O(l)||A(l)||(i[a]=x(n==o?l:Object(l))),i=i[a]}return s}function B(t,n){var o=r.aliasToReal[t]||t,s=r.remap[o]||o,i=u;return function(t){var r=p?v:b,a=p?v[s]:n,l=E(E({},i),t);return e(r,o,a,l)}}function $(e,t){return function(){var n=arguments.length;if(!n)return e();for(var r=Array(n);n--;)r[n]=arguments[n];var o=f.rearg?0:n-1;return r[o]=t(r[o]),e.apply(void 0,r)}}function q(e,t,n){var o,s=r.aliasToReal[e]||e,i=t,c=R[s];return c?i=c(t):f.immutable&&(r.mutate.array[s]?i=l(t,a):r.mutate.object[s]?i=l(t,function(e){return function(t){return e({},t)}}(t)):r.mutate.set[s]&&(i=l(t,L))),_(T,(function(e){return _(r.aryMethod[e],(function(t){if(s==t){var n=r.methodSpread[s],a=n&&n.afterRearg;return o=a?D(s,F(s,i,e),e):F(s,D(s,i,e),e),o=function(e,t,n){return m||f.curry&&n>1?S(t,n):t}(0,o=M(s,o),e),!1}})),!o})),o||(o=i),o==t&&(o=m?S(o,1):function(){return t.apply(this,arguments)}),o.convert=B(s,t),o.placeholder=t.placeholder=n,o}if(!h)return q(n,c,d);var U=c,z=[];return _(T,(function(e){_(r.aryMethod[e],(function(e){var t=U[r.remap[e]||e];t&&z.push([e,q(e,t,U)])}))})),_(C(U),(function(e){var t=U[e];if(\"function\"==typeof t){for(var n=z.length;n--;)if(z[n][0]==e)return;t.convert=B(e,t),z.push([e,t])}})),_(z,(function(e){U[e[0]]=e[1]})),U.convert=function(e){return U.runInContext.convert(e)(void 0)},U.placeholder=U,_(C(U),(function(e){_(r.realToAlias[e]||[],(function(t){U[t]=U[e]}))})),U}},68836:(e,t)=>{t.aliasToReal={each:\"forEach\",eachRight:\"forEachRight\",entries:\"toPairs\",entriesIn:\"toPairsIn\",extend:\"assignIn\",extendAll:\"assignInAll\",extendAllWith:\"assignInAllWith\",extendWith:\"assignInWith\",first:\"head\",conforms:\"conformsTo\",matches:\"isMatch\",property:\"get\",__:\"placeholder\",F:\"stubFalse\",T:\"stubTrue\",all:\"every\",allPass:\"overEvery\",always:\"constant\",any:\"some\",anyPass:\"overSome\",apply:\"spread\",assoc:\"set\",assocPath:\"set\",complement:\"negate\",compose:\"flowRight\",contains:\"includes\",dissoc:\"unset\",dissocPath:\"unset\",dropLast:\"dropRight\",dropLastWhile:\"dropRightWhile\",equals:\"isEqual\",identical:\"eq\",indexBy:\"keyBy\",init:\"initial\",invertObj:\"invert\",juxt:\"over\",omitAll:\"omit\",nAry:\"ary\",path:\"get\",pathEq:\"matchesProperty\",pathOr:\"getOr\",paths:\"at\",pickAll:\"pick\",pipe:\"flow\",pluck:\"map\",prop:\"get\",propEq:\"matchesProperty\",propOr:\"getOr\",props:\"at\",symmetricDifference:\"xor\",symmetricDifferenceBy:\"xorBy\",symmetricDifferenceWith:\"xorWith\",takeLast:\"takeRight\",takeLastWhile:\"takeRightWhile\",unapply:\"rest\",unnest:\"flatten\",useWith:\"overArgs\",where:\"conformsTo\",whereEq:\"isMatch\",zipObj:\"zipObject\"},t.aryMethod={1:[\"assignAll\",\"assignInAll\",\"attempt\",\"castArray\",\"ceil\",\"create\",\"curry\",\"curryRight\",\"defaultsAll\",\"defaultsDeepAll\",\"floor\",\"flow\",\"flowRight\",\"fromPairs\",\"invert\",\"iteratee\",\"memoize\",\"method\",\"mergeAll\",\"methodOf\",\"mixin\",\"nthArg\",\"over\",\"overEvery\",\"overSome\",\"rest\",\"reverse\",\"round\",\"runInContext\",\"spread\",\"template\",\"trim\",\"trimEnd\",\"trimStart\",\"uniqueId\",\"words\",\"zipAll\"],2:[\"add\",\"after\",\"ary\",\"assign\",\"assignAllWith\",\"assignIn\",\"assignInAllWith\",\"at\",\"before\",\"bind\",\"bindAll\",\"bindKey\",\"chunk\",\"cloneDeepWith\",\"cloneWith\",\"concat\",\"conformsTo\",\"countBy\",\"curryN\",\"curryRightN\",\"debounce\",\"defaults\",\"defaultsDeep\",\"defaultTo\",\"delay\",\"difference\",\"divide\",\"drop\",\"dropRight\",\"dropRightWhile\",\"dropWhile\",\"endsWith\",\"eq\",\"every\",\"filter\",\"find\",\"findIndex\",\"findKey\",\"findLast\",\"findLastIndex\",\"findLastKey\",\"flatMap\",\"flatMapDeep\",\"flattenDepth\",\"forEach\",\"forEachRight\",\"forIn\",\"forInRight\",\"forOwn\",\"forOwnRight\",\"get\",\"groupBy\",\"gt\",\"gte\",\"has\",\"hasIn\",\"includes\",\"indexOf\",\"intersection\",\"invertBy\",\"invoke\",\"invokeMap\",\"isEqual\",\"isMatch\",\"join\",\"keyBy\",\"lastIndexOf\",\"lt\",\"lte\",\"map\",\"mapKeys\",\"mapValues\",\"matchesProperty\",\"maxBy\",\"meanBy\",\"merge\",\"mergeAllWith\",\"minBy\",\"multiply\",\"nth\",\"omit\",\"omitBy\",\"overArgs\",\"pad\",\"padEnd\",\"padStart\",\"parseInt\",\"partial\",\"partialRight\",\"partition\",\"pick\",\"pickBy\",\"propertyOf\",\"pull\",\"pullAll\",\"pullAt\",\"random\",\"range\",\"rangeRight\",\"rearg\",\"reject\",\"remove\",\"repeat\",\"restFrom\",\"result\",\"sampleSize\",\"some\",\"sortBy\",\"sortedIndex\",\"sortedIndexOf\",\"sortedLastIndex\",\"sortedLastIndexOf\",\"sortedUniqBy\",\"split\",\"spreadFrom\",\"startsWith\",\"subtract\",\"sumBy\",\"take\",\"takeRight\",\"takeRightWhile\",\"takeWhile\",\"tap\",\"throttle\",\"thru\",\"times\",\"trimChars\",\"trimCharsEnd\",\"trimCharsStart\",\"truncate\",\"union\",\"uniqBy\",\"uniqWith\",\"unset\",\"unzipWith\",\"without\",\"wrap\",\"xor\",\"zip\",\"zipObject\",\"zipObjectDeep\"],3:[\"assignInWith\",\"assignWith\",\"clamp\",\"differenceBy\",\"differenceWith\",\"findFrom\",\"findIndexFrom\",\"findLastFrom\",\"findLastIndexFrom\",\"getOr\",\"includesFrom\",\"indexOfFrom\",\"inRange\",\"intersectionBy\",\"intersectionWith\",\"invokeArgs\",\"invokeArgsMap\",\"isEqualWith\",\"isMatchWith\",\"flatMapDepth\",\"lastIndexOfFrom\",\"mergeWith\",\"orderBy\",\"padChars\",\"padCharsEnd\",\"padCharsStart\",\"pullAllBy\",\"pullAllWith\",\"rangeStep\",\"rangeStepRight\",\"reduce\",\"reduceRight\",\"replace\",\"set\",\"slice\",\"sortedIndexBy\",\"sortedLastIndexBy\",\"transform\",\"unionBy\",\"unionWith\",\"update\",\"xorBy\",\"xorWith\",\"zipWith\"],4:[\"fill\",\"setWith\",\"updateWith\"]},t.aryRearg={2:[1,0],3:[2,0,1],4:[3,2,0,1]},t.iterateeAry={dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findFrom:1,findIndex:1,findIndexFrom:1,findKey:1,findLast:1,findLastFrom:1,findLastIndex:1,findLastIndexFrom:1,findLastKey:1,flatMap:1,flatMapDeep:1,flatMapDepth:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},t.iterateeRearg={mapKeys:[1],reduceRight:[1,0]},t.methodRearg={assignInAllWith:[1,0],assignInWith:[1,2,0],assignAllWith:[1,0],assignWith:[1,2,0],differenceBy:[1,2,0],differenceWith:[1,2,0],getOr:[2,1,0],intersectionBy:[1,2,0],intersectionWith:[1,2,0],isEqualWith:[1,2,0],isMatchWith:[2,1,0],mergeAllWith:[1,0],mergeWith:[1,2,0],padChars:[2,1,0],padCharsEnd:[2,1,0],padCharsStart:[2,1,0],pullAllBy:[2,1,0],pullAllWith:[2,1,0],rangeStep:[1,2,0],rangeStepRight:[1,2,0],setWith:[3,1,2,0],sortedIndexBy:[2,1,0],sortedLastIndexBy:[2,1,0],unionBy:[1,2,0],unionWith:[1,2,0],updateWith:[3,1,2,0],xorBy:[1,2,0],xorWith:[1,2,0],zipWith:[1,2,0]},t.methodSpread={assignAll:{start:0},assignAllWith:{start:0},assignInAll:{start:0},assignInAllWith:{start:0},defaultsAll:{start:0},defaultsDeepAll:{start:0},invokeArgs:{start:2},invokeArgsMap:{start:2},mergeAll:{start:0},mergeAllWith:{start:0},partial:{start:1},partialRight:{start:1},without:{start:1},zipAll:{start:0}},t.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAllWith:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignAll:!0,assignAllWith:!0,assignIn:!0,assignInAll:!0,assignInAllWith:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsAll:!0,defaultsDeep:!0,defaultsDeepAll:!0,merge:!0,mergeAll:!0,mergeAllWith:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0,update:!0,updateWith:!0}},t.realToAlias=function(){var e=Object.prototype.hasOwnProperty,n=t.aliasToReal,r={};for(var o in n){var s=n[o];e.call(r,s)?r[s].push(o):r[s]=[o]}return r}(),t.remap={assignAll:\"assign\",assignAllWith:\"assignWith\",assignInAll:\"assignIn\",assignInAllWith:\"assignInWith\",curryN:\"curry\",curryRightN:\"curryRight\",defaultsAll:\"defaults\",defaultsDeepAll:\"defaultsDeep\",findFrom:\"find\",findIndexFrom:\"findIndex\",findLastFrom:\"findLast\",findLastIndexFrom:\"findLastIndex\",getOr:\"get\",includesFrom:\"includes\",indexOfFrom:\"indexOf\",invokeArgs:\"invoke\",invokeArgsMap:\"invokeMap\",lastIndexOfFrom:\"lastIndexOf\",mergeAll:\"merge\",mergeAllWith:\"mergeWith\",padChars:\"pad\",padCharsEnd:\"padEnd\",padCharsStart:\"padStart\",propertyOf:\"get\",rangeStep:\"range\",rangeStepRight:\"rangeRight\",restFrom:\"rest\",spreadFrom:\"spread\",trimChars:\"trim\",trimCharsEnd:\"trimEnd\",trimCharsStart:\"trimStart\",zipAll:\"zip\"},t.skipFixed={castArray:!0,flow:!0,flowRight:!0,iteratee:!0,mixin:!0,rearg:!0,runInContext:!0},t.skipRearg={add:!0,assign:!0,assignIn:!0,bind:!0,bindKey:!0,concat:!0,difference:!0,divide:!0,eq:!0,gt:!0,gte:!0,isEqual:!0,lt:!0,lte:!0,matchesProperty:!0,merge:!0,multiply:!0,overArgs:!0,partial:!0,partialRight:!0,propertyOf:!0,random:!0,range:!0,rangeRight:!0,subtract:!0,zip:!0,zipObject:!0,zipObjectDeep:!0}},4269:(e,t,n)=>{e.exports={ary:n(39514),assign:n(44037),clone:n(66678),curry:n(40087),forEach:n(77412),isArray:n(1469),isError:n(64647),isFunction:n(23560),isWeakMap:n(81018),iteratee:n(72594),keys:n(280),rearg:n(4963),toInteger:n(40554),toPath:n(30084)}},72700:(e,t,n)=>{e.exports=n(28252)},92822:(e,t,n)=>{var r=n(84599),o=n(4269);e.exports=function(e,t,n){return r(o,e,t,n)}},69306:e=>{e.exports={}},28252:(e,t,n)=>{var r=n(92822)(\"set\",n(36968));r.placeholder=n(69306),e.exports=r},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},79095:(e,t,n)=>{var r=n(13),o=n(222);e.exports=function(e,t){return null!=e&&o(e,t,r)}},6557:e=>{e.exports=function(e){return e}},35694:(e,t,n)=>{var r=n(9454),o=n(37005),s=Object.prototype,i=s.hasOwnProperty,a=s.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,\"callee\")&&!a.call(e,\"callee\")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},98612:(e,t,n)=>{var r=n(23560),o=n(41780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},29246:(e,t,n)=>{var r=n(98612),o=n(37005);e.exports=function(e){return o(e)&&r(e)}},51584:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return!0===e||!1===e||o(e)&&\"[object Boolean]\"==r(e)}},44144:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=n(95062),s=t&&!t.nodeType&&t,i=s&&e&&!e.nodeType&&e,a=i&&i.exports===s?r.Buffer:void 0,l=(a?a.isBuffer:void 0)||o;e.exports=l},41609:(e,t,n)=>{var r=n(280),o=n(98882),s=n(35694),i=n(1469),a=n(98612),l=n(44144),c=n(25726),u=n(36719),p=Object.prototype.hasOwnProperty;e.exports=function(e){if(null==e)return!0;if(a(e)&&(i(e)||\"string\"==typeof e||\"function\"==typeof e.splice||l(e)||u(e)||s(e)))return!e.length;var t=o(e);if(\"[object Map]\"==t||\"[object Set]\"==t)return!e.size;if(c(e))return!r(e).length;for(var n in e)if(p.call(e,n))return!1;return!0}},18446:(e,t,n)=>{var r=n(90939);e.exports=function(e,t){return r(e,t)}},64647:(e,t,n)=>{var r=n(44239),o=n(37005),s=n(68630);e.exports=function(e){if(!o(e))return!1;var t=r(e);return\"[object Error]\"==t||\"[object DOMException]\"==t||\"string\"==typeof e.message&&\"string\"==typeof e.name&&!s(e)}},23560:(e,t,n)=>{var r=n(44239),o=n(13218);e.exports=function(e){if(!o(e))return!1;var t=r(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}},41780:e=>{e.exports=function(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},56688:(e,t,n)=>{var r=n(25588),o=n(7518),s=n(31167),i=s&&s.isMap,a=i?o(i):r;e.exports=a},45220:e=>{e.exports=function(e){return null===e}},81763:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return\"number\"==typeof e||o(e)&&\"[object Number]\"==r(e)}},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&(\"object\"==t||\"function\"==t)}},37005:e=>{e.exports=function(e){return null!=e&&\"object\"==typeof e}},68630:(e,t,n)=>{var r=n(44239),o=n(85924),s=n(37005),i=Function.prototype,a=Object.prototype,l=i.toString,c=a.hasOwnProperty,u=l.call(Object);e.exports=function(e){if(!s(e)||\"[object Object]\"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=c.call(t,\"constructor\")&&t.constructor;return\"function\"==typeof n&&n instanceof n&&l.call(n)==u}},72928:(e,t,n)=>{var r=n(29221),o=n(7518),s=n(31167),i=s&&s.isSet,a=i?o(i):r;e.exports=a},47037:(e,t,n)=>{var r=n(44239),o=n(1469),s=n(37005);e.exports=function(e){return\"string\"==typeof e||!o(e)&&s(e)&&\"[object String]\"==r(e)}},33448:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return\"symbol\"==typeof e||o(e)&&\"[object Symbol]\"==r(e)}},36719:(e,t,n)=>{var r=n(38749),o=n(7518),s=n(31167),i=s&&s.isTypedArray,a=i?o(i):r;e.exports=a},81018:(e,t,n)=>{var r=n(98882),o=n(37005);e.exports=function(e){return o(e)&&\"[object WeakMap]\"==r(e)}},72594:(e,t,n)=>{var r=n(85990),o=n(67206);e.exports=function(e){return o(\"function\"==typeof e?e:r(e,1))}},3674:(e,t,n)=>{var r=n(14636),o=n(280),s=n(98612);e.exports=function(e){return s(e)?r(e):o(e)}},81704:(e,t,n)=>{var r=n(14636),o=n(10313),s=n(98612);e.exports=function(e){return s(e)?r(e,!0):o(e)}},10928:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},88306:(e,t,n)=>{var r=n(83369);function o(e,t){if(\"function\"!=typeof e||null!=t&&\"function\"!=typeof t)throw new TypeError(\"Expected a function\");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],s=n.cache;if(s.has(o))return s.get(o);var i=e.apply(this,r);return n.cache=s.set(o,i)||s,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},82492:(e,t,n)=>{var r=n(42980),o=n(21463)((function(e,t,n){r(e,t,n)}));e.exports=o},94885:e=>{e.exports=function(e){if(\"function\"!=typeof e)throw new TypeError(\"Expected a function\");return function(){var t=arguments;switch(t.length){case 0:return!e.call(this);case 1:return!e.call(this,t[0]);case 2:return!e.call(this,t[0],t[1]);case 3:return!e.call(this,t[0],t[1],t[2])}return!e.apply(this,t)}}},50308:e=>{e.exports=function(){}},7771:(e,t,n)=>{var r=n(55639);e.exports=function(){return r.Date.now()}},57557:(e,t,n)=>{var r=n(29932),o=n(85990),s=n(57406),i=n(71811),a=n(98363),l=n(60696),c=n(99021),u=n(46904),p=c((function(e,t){var n={};if(null==e)return n;var c=!1;t=r(t,(function(t){return t=i(t,e),c||(c=t.length>1),t})),a(e,u(e),n),c&&(n=o(n,7,l));for(var p=t.length;p--;)s(n,t[p]);return n}));e.exports=p},39601:(e,t,n)=>{var r=n(40371),o=n(79152),s=n(15403),i=n(40327);e.exports=function(e){return s(e)?r(i(e)):o(e)}},4963:(e,t,n)=>{var r=n(97727),o=n(99021),s=o((function(e,t){return r(e,256,void 0,void 0,void 0,t)}));e.exports=s},54061:(e,t,n)=>{var r=n(62663),o=n(89881),s=n(67206),i=n(10107),a=n(1469);e.exports=function(e,t,n){var l=a(e)?r:i,c=arguments.length<3;return l(e,s(t,4),n,c,o)}},36968:(e,t,n)=>{var r=n(10611);e.exports=function(e,t,n){return null==e?e:r(e,t,n)}},59704:(e,t,n)=>{var r=n(82908),o=n(67206),s=n(5076),i=n(1469),a=n(16612);e.exports=function(e,t,n){var l=i(e)?r:s;return n&&a(e,t,n)&&(t=void 0),l(e,o(t,3))}},70479:e=>{e.exports=function(){return[]}},95062:e=>{e.exports=function(){return!1}},18601:(e,t,n)=>{var r=n(14841),o=1/0;e.exports=function(e){return e?(e=r(e))===o||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},40554:(e,t,n)=>{var r=n(18601);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},7334:(e,t,n)=>{var r=n(79833);e.exports=function(e){return r(e).toLowerCase()}},14841:(e,t,n)=>{var r=n(27561),o=n(13218),s=n(33448),i=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,l=/^0o[0-7]+$/i,c=parseInt;e.exports=function(e){if(\"number\"==typeof e)return e;if(s(e))return NaN;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=r(e);var n=a.test(e);return n||l.test(e)?c(e.slice(2),n?2:8):i.test(e)?NaN:+e}},30084:(e,t,n)=>{var r=n(29932),o=n(278),s=n(1469),i=n(33448),a=n(55514),l=n(40327),c=n(79833);e.exports=function(e){return s(e)?r(e,l):i(e)?[e]:o(a(c(e)))}},59881:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e){return r(e,o(e))}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?\"\":r(e)}},11700:(e,t,n)=>{var r=n(98805)(\"toUpperCase\");e.exports=r},58748:(e,t,n)=>{var r=n(49029),o=n(93157),s=n(79833),i=n(2757);e.exports=function(e,t,n){return e=s(e),void 0===(t=n?void 0:t)?o(e)?i(e):r(e):e.match(t)||[]}},8111:(e,t,n)=>{var r=n(96425),o=n(7548),s=n(9435),i=n(1469),a=n(37005),l=n(21913),c=Object.prototype.hasOwnProperty;function u(e){if(a(e)&&!i(e)&&!(e instanceof r)){if(e instanceof o)return e;if(c.call(e,\"__wrapped__\"))return l(e)}return new o(e)}u.prototype=s.prototype,u.prototype.constructor=u,e.exports=u},7287:(e,t,n)=>{var r=n(34865),o=n(1757);e.exports=function(e,t){return o(e||[],t||[],r)}},96470:(e,t,n)=>{\"use strict\";var r=n(47802),o=n(21102);t.highlight=i,t.highlightAuto=function(e,t){var n,a,l,c,u=t||{},p=u.subset||r.listLanguages(),h=u.prefix,f=p.length,d=-1;null==h&&(h=s);if(\"string\"!=typeof e)throw o(\"Expected `string` for value, got `%s`\",e);a={relevance:0,language:null,value:[]},n={relevance:0,language:null,value:[]};for(;++d<f;)c=p[d],r.getLanguage(c)&&((l=i(c,e,t)).language=c,l.relevance>a.relevance&&(a=l),l.relevance>n.relevance&&(a=n,n=l));a.language&&(n.secondBest=a);return n},t.registerLanguage=function(e,t){r.registerLanguage(e,t)},t.listLanguages=function(){return r.listLanguages()},t.registerAlias=function(e,t){var n,o=e;t&&((o={})[e]=t);for(n in o)r.registerAliases(o[n],{languageName:n})},a.prototype.addText=function(e){var t,n,r=this.stack;if(\"\"===e)return;t=r[r.length-1],(n=t.children[t.children.length-1])&&\"text\"===n.type?n.value+=e:t.children.push({type:\"text\",value:e})},a.prototype.addKeyword=function(e,t){this.openNode(t),this.addText(e),this.closeNode()},a.prototype.addSublanguage=function(e,t){var n=this.stack,r=n[n.length-1],o=e.rootNode.children,s=t?{type:\"element\",tagName:\"span\",properties:{className:[t]},children:o}:o;r.children=r.children.concat(s)},a.prototype.openNode=function(e){var t=this.stack,n=this.options.classPrefix+e,r=t[t.length-1],o={type:\"element\",tagName:\"span\",properties:{className:[n]},children:[]};r.children.push(o),t.push(o)},a.prototype.closeNode=function(){this.stack.pop()},a.prototype.closeAllNodes=l,a.prototype.finalize=l,a.prototype.toHTML=function(){return\"\"};var s=\"hljs-\";function i(e,t,n){var i,l=r.configure({}),c=(n||{}).prefix;if(\"string\"!=typeof e)throw o(\"Expected `string` for name, got `%s`\",e);if(!r.getLanguage(e))throw o(\"Unknown language: `%s` is not registered\",e);if(\"string\"!=typeof t)throw o(\"Expected `string` for value, got `%s`\",t);if(null==c&&(c=s),r.configure({__emitter:a,classPrefix:c}),i=r.highlight(t,{language:e,ignoreIllegals:!0}),r.configure(l||{}),i.errorRaised)throw i.errorRaised;return{relevance:i.relevance,language:i.language,value:i.emitter.rootNode.children}}function a(e){this.options=e,this.rootNode={children:[]},this.stack=[this.rootNode]}function l(){}},42566:(e,t,n)=>{const r=n(94885);function o(e){return\"string\"==typeof e?t=>t.element===e:e.constructor&&e.extend?t=>t instanceof e:e}class s{constructor(e){this.elements=e||[]}toValue(){return this.elements.map((e=>e.toValue()))}map(e,t){return this.elements.map(e,t)}flatMap(e,t){return this.map(e,t).reduce(((e,t)=>e.concat(t)),[])}compactMap(e,t){const n=[];return this.forEach((r=>{const o=e.bind(t)(r);o&&n.push(o)})),n}filter(e,t){return e=o(e),new s(this.elements.filter(e,t))}reject(e,t){return e=o(e),new s(this.elements.filter(r(e),t))}find(e,t){return e=o(e),this.elements.find(e,t)}forEach(e,t){this.elements.forEach(e,t)}reduce(e,t){return this.elements.reduce(e,t)}includes(e){return this.elements.some((t=>t.equals(e)))}shift(){return this.elements.shift()}unshift(e){this.elements.unshift(this.refract(e))}push(e){return this.elements.push(this.refract(e)),this}add(e){this.push(e)}get(e){return this.elements[e]}getValue(e){const t=this.elements[e];if(t)return t.toValue()}get length(){return this.elements.length}get isEmpty(){return 0===this.elements.length}get first(){return this.elements[0]}}\"undefined\"!=typeof Symbol&&(s.prototype[Symbol.iterator]=function(){return this.elements[Symbol.iterator]()}),e.exports=s},17645:e=>{class t{constructor(e,t){this.key=e,this.value=t}clone(){const e=new t;return this.key&&(e.key=this.key.clone()),this.value&&(e.value=this.value.clone()),e}}e.exports=t},78520:(e,t,n)=>{const r=n(45220),o=n(47037),s=n(81763),i=n(51584),a=n(13218),l=n(28219),c=n(99829);class u{constructor(e){this.elementMap={},this.elementDetection=[],this.Element=c.Element,this.KeyValuePair=c.KeyValuePair,e&&e.noDefault||this.useDefault(),this._attributeElementKeys=[],this._attributeElementArrayKeys=[]}use(e){return e.namespace&&e.namespace({base:this}),e.load&&e.load({base:this}),this}useDefault(){return this.register(\"null\",c.NullElement).register(\"string\",c.StringElement).register(\"number\",c.NumberElement).register(\"boolean\",c.BooleanElement).register(\"array\",c.ArrayElement).register(\"object\",c.ObjectElement).register(\"member\",c.MemberElement).register(\"ref\",c.RefElement).register(\"link\",c.LinkElement),this.detect(r,c.NullElement,!1).detect(o,c.StringElement,!1).detect(s,c.NumberElement,!1).detect(i,c.BooleanElement,!1).detect(Array.isArray,c.ArrayElement,!1).detect(a,c.ObjectElement,!1),this}register(e,t){return this._elements=void 0,this.elementMap[e]=t,this}unregister(e){return this._elements=void 0,delete this.elementMap[e],this}detect(e,t,n){return void 0===n||n?this.elementDetection.unshift([e,t]):this.elementDetection.push([e,t]),this}toElement(e){if(e instanceof this.Element)return e;let t;for(let n=0;n<this.elementDetection.length;n+=1){const r=this.elementDetection[n][0],o=this.elementDetection[n][1];if(r(e)){t=new o(e);break}}return t}getElementClass(e){const t=this.elementMap[e];return void 0===t?this.Element:t}fromRefract(e){return this.serialiser.deserialise(e)}toRefract(e){return this.serialiser.serialise(e)}get elements(){return void 0===this._elements&&(this._elements={Element:this.Element},Object.keys(this.elementMap).forEach((e=>{const t=e[0].toUpperCase()+e.substr(1);this._elements[t]=this.elementMap[e]}))),this._elements}get serialiser(){return new l(this)}}l.prototype.Namespace=u,e.exports=u},87526:(e,t,n)=>{const r=n(94885),o=n(42566);class s extends o{map(e,t){return this.elements.map((n=>e.bind(t)(n.value,n.key,n)))}filter(e,t){return new s(this.elements.filter((n=>e.bind(t)(n.value,n.key,n))))}reject(e,t){return this.filter(r(e.bind(t)))}forEach(e,t){return this.elements.forEach(((n,r)=>{e.bind(t)(n.value,n.key,n,r)}))}keys(){return this.map(((e,t)=>t.toValue()))}values(){return this.map((e=>e.toValue()))}}e.exports=s},99829:(e,t,n)=>{const r=n(3079),o=n(96295),s=n(16036),i=n(91090),a=n(18866),l=n(35804),c=n(5946),u=n(76735),p=n(59964),h=n(38588),f=n(42566),d=n(87526),m=n(17645);function g(e){if(e instanceof r)return e;if(\"string\"==typeof e)return new s(e);if(\"number\"==typeof e)return new i(e);if(\"boolean\"==typeof e)return new a(e);if(null===e)return new o;if(Array.isArray(e))return new l(e.map(g));if(\"object\"==typeof e){return new u(e)}return e}r.prototype.ObjectElement=u,r.prototype.RefElement=h,r.prototype.MemberElement=c,r.prototype.refract=g,f.prototype.refract=g,e.exports={Element:r,NullElement:o,StringElement:s,NumberElement:i,BooleanElement:a,ArrayElement:l,MemberElement:c,ObjectElement:u,LinkElement:p,RefElement:h,refract:g,ArraySlice:f,ObjectSlice:d,KeyValuePair:m}},59964:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e||[],t,n),this.element=\"link\"}get relation(){return this.attributes.get(\"relation\")}set relation(e){this.attributes.set(\"relation\",e)}get href(){return this.attributes.get(\"href\")}set href(e){this.attributes.set(\"href\",e)}}},38588:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e||[],t,n),this.element=\"ref\",this.path||(this.path=\"element\")}get path(){return this.attributes.get(\"path\")}set path(e){this.attributes.set(\"path\",e)}}},43500:(e,t,n)=>{const r=n(78520),o=n(99829);t.lS=r,n(17645),t.O4=o.ArraySlice,o.ObjectSlice,t.W_=o.Element,t.RP=o.StringElement,t.VL=o.NumberElement,t.hh=o.BooleanElement,t.zr=o.NullElement,t.ON=o.ArrayElement,t.Sb=o.ObjectElement,t.c6=o.MemberElement,t.tK=o.RefElement,t.EA=o.LinkElement,t.Qc=o.refract,n(28219),n(3414)},35804:(e,t,n)=>{const r=n(94885),o=n(3079),s=n(42566);class i extends o{constructor(e,t,n){super(e||[],t,n),this.element=\"array\"}primitive(){return\"array\"}get(e){return this.content[e]}getValue(e){const t=this.get(e);if(t)return t.toValue()}getIndex(e){return this.content[e]}set(e,t){return this.content[e]=this.refract(t),this}remove(e){const t=this.content.splice(e,1);return t.length?t[0]:null}map(e,t){return this.content.map(e,t)}flatMap(e,t){return this.map(e,t).reduce(((e,t)=>e.concat(t)),[])}compactMap(e,t){const n=[];return this.forEach((r=>{const o=e.bind(t)(r);o&&n.push(o)})),n}filter(e,t){return new s(this.content.filter(e,t))}reject(e,t){return this.filter(r(e),t)}reduce(e,t){let n,r;void 0!==t?(n=0,r=this.refract(t)):(n=1,r=\"object\"===this.primitive()?this.first.value:this.first);for(let t=n;t<this.length;t+=1){const n=this.content[t];r=\"object\"===this.primitive()?this.refract(e(r,n.value,n.key,n,this)):this.refract(e(r,n,t,this))}return r}forEach(e,t){this.content.forEach(((n,r)=>{e.bind(t)(n,this.refract(r))}))}shift(){return this.content.shift()}unshift(e){this.content.unshift(this.refract(e))}push(e){return this.content.push(this.refract(e)),this}add(e){this.push(e)}findElements(e,t){const n=t||{},r=!!n.recursive,o=void 0===n.results?[]:n.results;return this.forEach(((t,n,s)=>{r&&void 0!==t.findElements&&t.findElements(e,{results:o,recursive:r}),e(t,n,s)&&o.push(t)})),o}find(e){return new s(this.findElements(e,{recursive:!0}))}findByElement(e){return this.find((t=>t.element===e))}findByClass(e){return this.find((t=>t.classes.includes(e)))}getById(e){return this.find((t=>t.id.toValue()===e)).first}includes(e){return this.content.some((t=>t.equals(e)))}contains(e){return this.includes(e)}empty(){return new this.constructor([])}\"fantasy-land/empty\"(){return this.empty()}concat(e){return new this.constructor(this.content.concat(e.content))}\"fantasy-land/concat\"(e){return this.concat(e)}\"fantasy-land/map\"(e){return new this.constructor(this.map(e))}\"fantasy-land/chain\"(e){return this.map((t=>e(t)),this).reduce(((e,t)=>e.concat(t)),this.empty())}\"fantasy-land/filter\"(e){return new this.constructor(this.content.filter(e))}\"fantasy-land/reduce\"(e,t){return this.content.reduce(e,t)}get length(){return this.content.length}get isEmpty(){return 0===this.content.length}get first(){return this.getIndex(0)}get second(){return this.getIndex(1)}get last(){return this.getIndex(this.length-1)}}i.empty=function(){return new this},i[\"fantasy-land/empty\"]=i.empty,\"undefined\"!=typeof Symbol&&(i.prototype[Symbol.iterator]=function(){return this.content[Symbol.iterator]()}),e.exports=i},18866:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e,t,n),this.element=\"boolean\"}primitive(){return\"boolean\"}}},3079:(e,t,n)=>{const r=n(18446),o=n(17645),s=n(42566);class i{constructor(e,t,n){t&&(this.meta=t),n&&(this.attributes=n),this.content=e}freeze(){Object.isFrozen(this)||(this._meta&&(this.meta.parent=this,this.meta.freeze()),this._attributes&&(this.attributes.parent=this,this.attributes.freeze()),this.children.forEach((e=>{e.parent=this,e.freeze()}),this),this.content&&Array.isArray(this.content)&&Object.freeze(this.content),Object.freeze(this))}primitive(){}clone(){const e=new this.constructor;return e.element=this.element,this.meta.length&&(e._meta=this.meta.clone()),this.attributes.length&&(e._attributes=this.attributes.clone()),this.content?this.content.clone?e.content=this.content.clone():Array.isArray(this.content)?e.content=this.content.map((e=>e.clone())):e.content=this.content:e.content=this.content,e}toValue(){return this.content instanceof i?this.content.toValue():this.content instanceof o?{key:this.content.key.toValue(),value:this.content.value?this.content.value.toValue():void 0}:this.content&&this.content.map?this.content.map((e=>e.toValue()),this):this.content}toRef(e){if(\"\"===this.id.toValue())throw Error(\"Cannot create reference to an element that does not contain an ID\");const t=new this.RefElement(this.id.toValue());return e&&(t.path=e),t}findRecursive(...e){if(arguments.length>1&&!this.isFrozen)throw new Error(\"Cannot find recursive with multiple element names without first freezing the element. Call `element.freeze()`\");const t=e.pop();let n=new s;const r=(e,t)=>(e.push(t),e),i=(e,n)=>{n.element===t&&e.push(n);const s=n.findRecursive(t);return s&&s.reduce(r,e),n.content instanceof o&&(n.content.key&&i(e,n.content.key),n.content.value&&i(e,n.content.value)),e};return this.content&&(this.content.element&&i(n,this.content),Array.isArray(this.content)&&this.content.reduce(i,n)),e.isEmpty||(n=n.filter((t=>{let n=t.parents.map((e=>e.element));for(const t in e){const r=e[t],o=n.indexOf(r);if(-1===o)return!1;n=n.splice(0,o)}return!0}))),n}set(e){return this.content=e,this}equals(e){return r(this.toValue(),e)}getMetaProperty(e,t){if(!this.meta.hasKey(e)){if(this.isFrozen){const e=this.refract(t);return e.freeze(),e}this.meta.set(e,t)}return this.meta.get(e)}setMetaProperty(e,t){this.meta.set(e,t)}get element(){return this._storedElement||\"element\"}set element(e){this._storedElement=e}get content(){return this._content}set content(e){if(e instanceof i)this._content=e;else if(e instanceof s)this.content=e.elements;else if(\"string\"==typeof e||\"number\"==typeof e||\"boolean\"==typeof e||\"null\"===e||null==e)this._content=e;else if(e instanceof o)this._content=e;else if(Array.isArray(e))this._content=e.map(this.refract);else{if(\"object\"!=typeof e)throw new Error(\"Cannot set content to given value\");this._content=Object.keys(e).map((t=>new this.MemberElement(t,e[t])))}}get meta(){if(!this._meta){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._meta=new this.ObjectElement}return this._meta}set meta(e){e instanceof this.ObjectElement?this._meta=e:this.meta.set(e||{})}get attributes(){if(!this._attributes){if(this.isFrozen){const e=new this.ObjectElement;return e.freeze(),e}this._attributes=new this.ObjectElement}return this._attributes}set attributes(e){e instanceof this.ObjectElement?this._attributes=e:this.attributes.set(e||{})}get id(){return this.getMetaProperty(\"id\",\"\")}set id(e){this.setMetaProperty(\"id\",e)}get classes(){return this.getMetaProperty(\"classes\",[])}set classes(e){this.setMetaProperty(\"classes\",e)}get title(){return this.getMetaProperty(\"title\",\"\")}set title(e){this.setMetaProperty(\"title\",e)}get description(){return this.getMetaProperty(\"description\",\"\")}set description(e){this.setMetaProperty(\"description\",e)}get links(){return this.getMetaProperty(\"links\",[])}set links(e){this.setMetaProperty(\"links\",e)}get isFrozen(){return Object.isFrozen(this)}get parents(){let{parent:e}=this;const t=new s;for(;e;)t.push(e),e=e.parent;return t}get children(){if(Array.isArray(this.content))return new s(this.content);if(this.content instanceof o){const e=new s([this.content.key]);return this.content.value&&e.push(this.content.value),e}return this.content instanceof i?new s([this.content]):new s}get recursiveChildren(){const e=new s;return this.children.forEach((t=>{e.push(t),t.recursiveChildren.forEach((t=>{e.push(t)}))})),e}}e.exports=i},5946:(e,t,n)=>{const r=n(17645),o=n(3079);e.exports=class extends o{constructor(e,t,n,o){super(new r,n,o),this.element=\"member\",this.key=e,this.value=t}get key(){return this.content.key}set key(e){this.content.key=this.refract(e)}get value(){return this.content.value}set value(e){this.content.value=this.refract(e)}}},96295:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e||null,t,n),this.element=\"null\"}primitive(){return\"null\"}set(){return new Error(\"Cannot set the value of null\")}}},91090:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e,t,n),this.element=\"number\"}primitive(){return\"number\"}}},76735:(e,t,n)=>{const r=n(94885),o=n(13218),s=n(35804),i=n(5946),a=n(87526);e.exports=class extends s{constructor(e,t,n){super(e||[],t,n),this.element=\"object\"}primitive(){return\"object\"}toValue(){return this.content.reduce(((e,t)=>(e[t.key.toValue()]=t.value?t.value.toValue():void 0,e)),{})}get(e){const t=this.getMember(e);if(t)return t.value}getMember(e){if(void 0!==e)return this.content.find((t=>t.key.toValue()===e))}remove(e){let t=null;return this.content=this.content.filter((n=>n.key.toValue()!==e||(t=n,!1))),t}getKey(e){const t=this.getMember(e);if(t)return t.key}set(e,t){if(o(e))return Object.keys(e).forEach((t=>{this.set(t,e[t])})),this;const n=e,r=this.getMember(n);return r?r.value=t:this.content.push(new i(n,t)),this}keys(){return this.content.map((e=>e.key.toValue()))}values(){return this.content.map((e=>e.value.toValue()))}hasKey(e){return this.content.some((t=>t.key.equals(e)))}items(){return this.content.map((e=>[e.key.toValue(),e.value.toValue()]))}map(e,t){return this.content.map((n=>e.bind(t)(n.value,n.key,n)))}compactMap(e,t){const n=[];return this.forEach(((r,o,s)=>{const i=e.bind(t)(r,o,s);i&&n.push(i)})),n}filter(e,t){return new a(this.content).filter(e,t)}reject(e,t){return this.filter(r(e),t)}forEach(e,t){return this.content.forEach((n=>e.bind(t)(n.value,n.key,n)))}}},16036:(e,t,n)=>{const r=n(3079);e.exports=class extends r{constructor(e,t,n){super(e,t,n),this.element=\"string\"}primitive(){return\"string\"}get length(){return this.content.length}}},3414:(e,t,n)=>{const r=n(28219);e.exports=class extends r{serialise(e){if(!(e instanceof this.namespace.elements.Element))throw new TypeError(`Given element \\`${e}\\` is not an Element instance`);let t;e._attributes&&e.attributes.get(\"variable\")&&(t=e.attributes.get(\"variable\"));const n={element:e.element};e._meta&&e._meta.length>0&&(n.meta=this.serialiseObject(e.meta));const r=\"enum\"===e.element||-1!==e.attributes.keys().indexOf(\"enumerations\");if(r){const t=this.enumSerialiseAttributes(e);t&&(n.attributes=t)}else if(e._attributes&&e._attributes.length>0){let{attributes:r}=e;r.get(\"metadata\")&&(r=r.clone(),r.set(\"meta\",r.get(\"metadata\")),r.remove(\"metadata\")),\"member\"===e.element&&t&&(r=r.clone(),r.remove(\"variable\")),r.length>0&&(n.attributes=this.serialiseObject(r))}if(r)n.content=this.enumSerialiseContent(e,n);else if(this[`${e.element}SerialiseContent`])n.content=this[`${e.element}SerialiseContent`](e,n);else if(void 0!==e.content){let r;t&&e.content.key?(r=e.content.clone(),r.key.attributes.set(\"variable\",t),r=this.serialiseContent(r)):r=this.serialiseContent(e.content),this.shouldSerialiseContent(e,r)&&(n.content=r)}else this.shouldSerialiseContent(e,e.content)&&e instanceof this.namespace.elements.Array&&(n.content=[]);return n}shouldSerialiseContent(e,t){return\"parseResult\"===e.element||\"httpRequest\"===e.element||\"httpResponse\"===e.element||\"category\"===e.element||\"link\"===e.element||void 0!==t&&(!Array.isArray(t)||0!==t.length)}refSerialiseContent(e,t){return delete t.attributes,{href:e.toValue(),path:e.path.toValue()}}sourceMapSerialiseContent(e){return e.toValue()}dataStructureSerialiseContent(e){return[this.serialiseContent(e.content)]}enumSerialiseAttributes(e){const t=e.attributes.clone(),n=t.remove(\"enumerations\")||new this.namespace.elements.Array([]),r=t.get(\"default\");let o=t.get(\"samples\")||new this.namespace.elements.Array([]);if(r&&r.content&&(r.content.attributes&&r.content.attributes.remove(\"typeAttributes\"),t.set(\"default\",new this.namespace.elements.Array([r.content]))),o.forEach((e=>{e.content&&e.content.element&&e.content.attributes.remove(\"typeAttributes\")})),e.content&&0!==n.length&&o.unshift(e.content),o=o.map((e=>e instanceof this.namespace.elements.Array?[e]:new this.namespace.elements.Array([e.content]))),o.length&&t.set(\"samples\",o),t.length>0)return this.serialiseObject(t)}enumSerialiseContent(e){if(e._attributes){const t=e.attributes.get(\"enumerations\");if(t&&t.length>0)return t.content.map((e=>{const t=e.clone();return t.attributes.remove(\"typeAttributes\"),this.serialise(t)}))}if(e.content){const t=e.content.clone();return t.attributes.remove(\"typeAttributes\"),[this.serialise(t)]}return[]}deserialise(e){if(\"string\"==typeof e)return new this.namespace.elements.String(e);if(\"number\"==typeof e)return new this.namespace.elements.Number(e);if(\"boolean\"==typeof e)return new this.namespace.elements.Boolean(e);if(null===e)return new this.namespace.elements.Null;if(Array.isArray(e))return new this.namespace.elements.Array(e.map(this.deserialise,this));const t=this.namespace.getElementClass(e.element),n=new t;n.element!==e.element&&(n.element=e.element),e.meta&&this.deserialiseObject(e.meta,n.meta),e.attributes&&this.deserialiseObject(e.attributes,n.attributes);const r=this.deserialiseContent(e.content);if(void 0===r&&null!==n.content||(n.content=r),\"enum\"===n.element){n.content&&n.attributes.set(\"enumerations\",n.content);let e=n.attributes.get(\"samples\");if(n.attributes.remove(\"samples\"),e){const r=e;e=new this.namespace.elements.Array,r.forEach((r=>{r.forEach((r=>{const o=new t(r);o.element=n.element,e.push(o)}))}));const o=e.shift();n.content=o?o.content:void 0,n.attributes.set(\"samples\",e)}else n.content=void 0;let r=n.attributes.get(\"default\");if(r&&r.length>0){r=r.get(0);const e=new t(r);e.element=n.element,n.attributes.set(\"default\",e)}}else if(\"dataStructure\"===n.element&&Array.isArray(n.content))[n.content]=n.content;else if(\"category\"===n.element){const e=n.attributes.get(\"meta\");e&&(n.attributes.set(\"metadata\",e),n.attributes.remove(\"meta\"))}else\"member\"===n.element&&n.key&&n.key._attributes&&n.key._attributes.getValue(\"variable\")&&(n.attributes.set(\"variable\",n.key.attributes.get(\"variable\")),n.key.attributes.remove(\"variable\"));return n}serialiseContent(e){if(e instanceof this.namespace.elements.Element)return this.serialise(e);if(e instanceof this.namespace.KeyValuePair){const t={key:this.serialise(e.key)};return e.value&&(t.value=this.serialise(e.value)),t}return e&&e.map?e.map(this.serialise,this):e}deserialiseContent(e){if(e){if(e.element)return this.deserialise(e);if(e.key){const t=new this.namespace.KeyValuePair(this.deserialise(e.key));return e.value&&(t.value=this.deserialise(e.value)),t}if(e.map)return e.map(this.deserialise,this)}return e}shouldRefract(e){return!!(e._attributes&&e.attributes.keys().length||e._meta&&e.meta.keys().length)||\"enum\"!==e.element&&(e.element!==e.primitive()||\"member\"===e.element)}convertKeyToRefract(e,t){return this.shouldRefract(t)?this.serialise(t):\"enum\"===t.element?this.serialiseEnum(t):\"array\"===t.element?t.map((t=>this.shouldRefract(t)||\"default\"===e?this.serialise(t):\"array\"===t.element||\"object\"===t.element||\"enum\"===t.element?t.children.map((e=>this.serialise(e))):t.toValue())):\"object\"===t.element?(t.content||[]).map(this.serialise,this):t.toValue()}serialiseEnum(e){return e.children.map((e=>this.serialise(e)))}serialiseObject(e){const t={};return e.forEach(((e,n)=>{if(e){const r=n.toValue();t[r]=this.convertKeyToRefract(r,e)}})),t}deserialiseObject(e,t){Object.keys(e).forEach((n=>{t.set(n,this.deserialise(e[n]))}))}}},28219:e=>{e.exports=class{constructor(e){this.namespace=e||new this.Namespace}serialise(e){if(!(e instanceof this.namespace.elements.Element))throw new TypeError(`Given element \\`${e}\\` is not an Element instance`);const t={element:e.element};e._meta&&e._meta.length>0&&(t.meta=this.serialiseObject(e.meta)),e._attributes&&e._attributes.length>0&&(t.attributes=this.serialiseObject(e.attributes));const n=this.serialiseContent(e.content);return void 0!==n&&(t.content=n),t}deserialise(e){if(!e.element)throw new Error(\"Given value is not an object containing an element name\");const t=new(this.namespace.getElementClass(e.element));t.element!==e.element&&(t.element=e.element),e.meta&&this.deserialiseObject(e.meta,t.meta),e.attributes&&this.deserialiseObject(e.attributes,t.attributes);const n=this.deserialiseContent(e.content);return void 0===n&&null!==t.content||(t.content=n),t}serialiseContent(e){if(e instanceof this.namespace.elements.Element)return this.serialise(e);if(e instanceof this.namespace.KeyValuePair){const t={key:this.serialise(e.key)};return e.value&&(t.value=this.serialise(e.value)),t}if(e&&e.map){if(0===e.length)return;return e.map(this.serialise,this)}return e}deserialiseContent(e){if(e){if(e.element)return this.deserialise(e);if(e.key){const t=new this.namespace.KeyValuePair(this.deserialise(e.key));return e.value&&(t.value=this.deserialise(e.value)),t}if(e.map)return e.map(this.deserialise,this)}return e}serialiseObject(e){const t={};if(e.forEach(((e,n)=>{e&&(t[n.toValue()]=this.serialise(e))})),0!==Object.keys(t).length)return t}deserialiseObject(e,t){Object.keys(e).forEach((n=>{t.set(n,this.deserialise(e[n]))}))}}},27418:e=>{\"use strict\";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String(\"abc\");if(e[5]=\"de\",\"5\"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t[\"_\"+String.fromCharCode(n)]=n;if(\"0123456789\"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(\"\"))return!1;var r={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){r[e]=e})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},r)).join(\"\")}catch(e){return!1}}()?Object.assign:function(e,o){for(var s,i,a=function(e){if(null==e)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(e)}(e),l=1;l<arguments.length;l++){for(var c in s=Object(arguments[l]))n.call(s,c)&&(a[c]=s[c]);if(t){i=t(s);for(var u=0;u<i.length;u++)r.call(s,i[u])&&(a[i[u]]=s[i[u]])}}return a}},70631:(e,t,n)=>{var r=\"function\"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,\"size\"):null,s=r&&o&&\"function\"==typeof o.get?o.get:null,i=r&&Map.prototype.forEach,a=\"function\"==typeof Set&&Set.prototype,l=Object.getOwnPropertyDescriptor&&a?Object.getOwnPropertyDescriptor(Set.prototype,\"size\"):null,c=a&&l&&\"function\"==typeof l.get?l.get:null,u=a&&Set.prototype.forEach,p=\"function\"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,h=\"function\"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,f=\"function\"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,d=Boolean.prototype.valueOf,m=Object.prototype.toString,g=Function.prototype.toString,y=String.prototype.match,v=String.prototype.slice,b=String.prototype.replace,w=String.prototype.toUpperCase,E=String.prototype.toLowerCase,x=RegExp.prototype.test,S=Array.prototype.concat,_=Array.prototype.join,j=Array.prototype.slice,O=Math.floor,k=\"function\"==typeof BigInt?BigInt.prototype.valueOf:null,A=Object.getOwnPropertySymbols,C=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?Symbol.prototype.toString:null,P=\"function\"==typeof Symbol&&\"object\"==typeof Symbol.iterator,N=\"function\"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===P||\"symbol\")?Symbol.toStringTag:null,I=Object.prototype.propertyIsEnumerable,T=(\"function\"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function R(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||x.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(\"number\"==typeof e){var r=e<0?-O(-e):O(e);if(r!==e){var o=String(r),s=v.call(t,o.length+1);return b.call(o,n,\"$&_\")+\".\"+b.call(b.call(s,/([0-9]{3})/g,\"$&_\"),/_$/,\"\")}}return b.call(t,n,\"$&_\")}var M=n(24654),D=M.custom,F=U(D)?D:null;function L(e,t,n){var r=\"double\"===(n.quoteStyle||t)?'\"':\"'\";return r+e+r}function B(e){return b.call(String(e),/\"/g,\"&quot;\")}function $(e){return!(\"[object Array]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}function q(e){return!(\"[object RegExp]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}function U(e){if(P)return e&&\"object\"==typeof e&&e instanceof Symbol;if(\"symbol\"==typeof e)return!0;if(!e||\"object\"!=typeof e||!C)return!1;try{return C.call(e),!0}catch(e){}return!1}e.exports=function e(t,n,r,o){var a=n||{};if(V(a,\"quoteStyle\")&&\"single\"!==a.quoteStyle&&\"double\"!==a.quoteStyle)throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');if(V(a,\"maxStringLength\")&&(\"number\"==typeof a.maxStringLength?a.maxStringLength<0&&a.maxStringLength!==1/0:null!==a.maxStringLength))throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');var l=!V(a,\"customInspect\")||a.customInspect;if(\"boolean\"!=typeof l&&\"symbol\"!==l)throw new TypeError(\"option \\\"customInspect\\\", if provided, must be `true`, `false`, or `'symbol'`\");if(V(a,\"indent\")&&null!==a.indent&&\"\\t\"!==a.indent&&!(parseInt(a.indent,10)===a.indent&&a.indent>0))throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');if(V(a,\"numericSeparator\")&&\"boolean\"!=typeof a.numericSeparator)throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');var m=a.numericSeparator;if(void 0===t)return\"undefined\";if(null===t)return\"null\";if(\"boolean\"==typeof t)return t?\"true\":\"false\";if(\"string\"==typeof t)return K(t,a);if(\"number\"==typeof t){if(0===t)return 1/0/t>0?\"0\":\"-0\";var w=String(t);return m?R(t,w):w}if(\"bigint\"==typeof t){var x=String(t)+\"n\";return m?R(t,x):x}var O=void 0===a.depth?5:a.depth;if(void 0===r&&(r=0),r>=O&&O>0&&\"object\"==typeof t)return $(t)?\"[Array]\":\"[Object]\";var A=function(e,t){var n;if(\"\\t\"===e.indent)n=\"\\t\";else{if(!(\"number\"==typeof e.indent&&e.indent>0))return null;n=_.call(Array(e.indent+1),\" \")}return{base:n,prev:_.call(Array(t+1),n)}}(a,r);if(void 0===o)o=[];else if(J(o,t)>=0)return\"[Circular]\";function D(t,n,s){if(n&&(o=j.call(o)).push(n),s){var i={depth:a.depth};return V(a,\"quoteStyle\")&&(i.quoteStyle=a.quoteStyle),e(t,i,r+1,o)}return e(t,a,r+1,o)}if(\"function\"==typeof t&&!q(t)){var z=function(e){if(e.name)return e.name;var t=y.call(g.call(e),/^function\\s*([\\w$]+)/);if(t)return t[1];return null}(t),H=Q(t,D);return\"[Function\"+(z?\": \"+z:\" (anonymous)\")+\"]\"+(H.length>0?\" { \"+_.call(H,\", \")+\" }\":\"\")}if(U(t)){var ee=P?b.call(String(t),/^(Symbol\\(.*\\))_[^)]*$/,\"$1\"):C.call(t);return\"object\"!=typeof t||P?ee:G(ee)}if(function(e){if(!e||\"object\"!=typeof e)return!1;if(\"undefined\"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return\"string\"==typeof e.nodeName&&\"function\"==typeof e.getAttribute}(t)){for(var te=\"<\"+E.call(String(t.nodeName)),ne=t.attributes||[],re=0;re<ne.length;re++)te+=\" \"+ne[re].name+\"=\"+L(B(ne[re].value),\"double\",a);return te+=\">\",t.childNodes&&t.childNodes.length&&(te+=\"...\"),te+=\"</\"+E.call(String(t.nodeName))+\">\"}if($(t)){if(0===t.length)return\"[]\";var oe=Q(t,D);return A&&!function(e){for(var t=0;t<e.length;t++)if(J(e[t],\"\\n\")>=0)return!1;return!0}(oe)?\"[\"+X(oe,A)+\"]\":\"[ \"+_.call(oe,\", \")+\" ]\"}if(function(e){return!(\"[object Error]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t)){var se=Q(t,D);return\"cause\"in Error.prototype||!(\"cause\"in t)||I.call(t,\"cause\")?0===se.length?\"[\"+String(t)+\"]\":\"{ [\"+String(t)+\"] \"+_.call(se,\", \")+\" }\":\"{ [\"+String(t)+\"] \"+_.call(S.call(\"[cause]: \"+D(t.cause),se),\", \")+\" }\"}if(\"object\"==typeof t&&l){if(F&&\"function\"==typeof t[F]&&M)return M(t,{depth:O-r});if(\"symbol\"!==l&&\"function\"==typeof t.inspect)return t.inspect()}if(function(e){if(!s||!e||\"object\"!=typeof e)return!1;try{s.call(e);try{c.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var ie=[];return i&&i.call(t,(function(e,n){ie.push(D(n,t,!0)+\" => \"+D(e,t))})),Y(\"Map\",s.call(t),ie,A)}if(function(e){if(!c||!e||\"object\"!=typeof e)return!1;try{c.call(e);try{s.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var ae=[];return u&&u.call(t,(function(e){ae.push(D(e,t))})),Y(\"Set\",c.call(t),ae,A)}if(function(e){if(!p||!e||\"object\"!=typeof e)return!1;try{p.call(e,p);try{h.call(e,h)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Z(\"WeakMap\");if(function(e){if(!h||!e||\"object\"!=typeof e)return!1;try{h.call(e,h);try{p.call(e,p)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Z(\"WeakSet\");if(function(e){if(!f||!e||\"object\"!=typeof e)return!1;try{return f.call(e),!0}catch(e){}return!1}(t))return Z(\"WeakRef\");if(function(e){return!(\"[object Number]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t))return G(D(Number(t)));if(function(e){if(!e||\"object\"!=typeof e||!k)return!1;try{return k.call(e),!0}catch(e){}return!1}(t))return G(D(k.call(t)));if(function(e){return!(\"[object Boolean]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t))return G(d.call(t));if(function(e){return!(\"[object String]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t))return G(D(String(t)));if(!function(e){return!(\"[object Date]\"!==W(e)||N&&\"object\"==typeof e&&N in e)}(t)&&!q(t)){var le=Q(t,D),ce=T?T(t)===Object.prototype:t instanceof Object||t.constructor===Object,ue=t instanceof Object?\"\":\"null prototype\",pe=!ce&&N&&Object(t)===t&&N in t?v.call(W(t),8,-1):ue?\"Object\":\"\",he=(ce||\"function\"!=typeof t.constructor?\"\":t.constructor.name?t.constructor.name+\" \":\"\")+(pe||ue?\"[\"+_.call(S.call([],pe||[],ue||[]),\": \")+\"] \":\"\");return 0===le.length?he+\"{}\":A?he+\"{\"+X(le,A)+\"}\":he+\"{ \"+_.call(le,\", \")+\" }\"}return String(t)};var z=Object.prototype.hasOwnProperty||function(e){return e in this};function V(e,t){return z.call(e,t)}function W(e){return m.call(e)}function J(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function K(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r=\"... \"+n+\" more character\"+(n>1?\"s\":\"\");return K(v.call(e,0,t.maxStringLength),t)+r}return L(b.call(b.call(e,/(['\\\\])/g,\"\\\\$1\"),/[\\x00-\\x1f]/g,H),\"single\",t)}function H(e){var t=e.charCodeAt(0),n={8:\"b\",9:\"t\",10:\"n\",12:\"f\",13:\"r\"}[t];return n?\"\\\\\"+n:\"\\\\x\"+(t<16?\"0\":\"\")+w.call(t.toString(16))}function G(e){return\"Object(\"+e+\")\"}function Z(e){return e+\" { ? }\"}function Y(e,t,n,r){return e+\" (\"+t+\") {\"+(r?X(n,r):_.call(n,\", \"))+\"}\"}function X(e,t){if(0===e.length)return\"\";var n=\"\\n\"+t.prev+t.base;return n+_.call(e,\",\"+n)+\"\\n\"+t.prev}function Q(e,t){var n=$(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=V(e,o)?t(e[o],e):\"\"}var s,i=\"function\"==typeof A?A(e):[];if(P){s={};for(var a=0;a<i.length;a++)s[\"$\"+i[a]]=i[a]}for(var l in e)V(e,l)&&(n&&String(Number(l))===l&&l<e.length||P&&s[\"$\"+l]instanceof Symbol||(x.call(/[^\\w$]/,l)?r.push(t(l,e)+\": \"+t(e[l],e)):r.push(l+\": \"+t(e[l],e))));if(\"function\"==typeof A)for(var c=0;c<i.length;c++)I.call(e,i[c])&&r.push(\"[\"+t(i[c])+\"]: \"+t(e[i[c]],e));return r}},34155:e=>{var t,n,r=e.exports={};function o(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===o||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}!function(){try{t=\"function\"==typeof setTimeout?setTimeout:o}catch(e){t=o}try{n=\"function\"==typeof clearTimeout?clearTimeout:s}catch(e){n=s}}();var a,l=[],c=!1,u=-1;function p(){c&&a&&(c=!1,a.length?l=a.concat(l):u=-1,l.length&&h())}function h(){if(!c){var e=i(p);c=!0;for(var t=l.length;t;){for(a=l,l=[];++u<t;)a&&a[u].run();u=-1,t=l.length}a=null,c=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===s||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{return n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function d(){}r.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new f(e,t)),1!==l.length||c||i(h)},f.prototype.run=function(){this.fun.apply(null,this.array)},r.title=\"browser\",r.browser=!0,r.env={},r.argv=[],r.version=\"\",r.versions={},r.on=d,r.addListener=d,r.once=d,r.off=d,r.removeListener=d,r.removeAllListeners=d,r.emit=d,r.prependListener=d,r.prependOnceListener=d,r.listeners=function(e){return[]},r.binding=function(e){throw new Error(\"process.binding is not supported\")},r.cwd=function(){return\"/\"},r.chdir=function(e){throw new Error(\"process.chdir is not supported\")},r.umask=function(){return 0}},92703:(e,t,n)=>{\"use strict\";var r=n(50414);function o(){}function s(){}s.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,s,i){if(i!==r){var a=new Error(\"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types\");throw a.name=\"Invariant Violation\",a}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:s,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{\"use strict\";e.exports=\"SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED\"},55798:e=>{\"use strict\";var t=String.prototype.replace,n=/%20/g,r=\"RFC1738\",o=\"RFC3986\";e.exports={default:o,formatters:{RFC1738:function(e){return t.call(e,n,\"+\")},RFC3986:function(e){return String(e)}},RFC1738:r,RFC3986:o}},80129:(e,t,n)=>{\"use strict\";var r=n(58261),o=n(55235),s=n(55798);e.exports={formats:s,parse:o,stringify:r}},55235:(e,t,n)=>{\"use strict\";var r=n(12769),o=Object.prototype.hasOwnProperty,s=Array.isArray,i={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:\"utf-8\",charsetSentinel:!1,comma:!1,decoder:r.decode,delimiter:\"&\",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},a=function(e){return e.replace(/&#(\\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},l=function(e,t){return e&&\"string\"==typeof e&&t.comma&&e.indexOf(\",\")>-1?e.split(\",\"):e},c=function(e,t,n,r){if(e){var s=n.allowDots?e.replace(/\\.([^.[]+)/g,\"[$1]\"):e,i=/(\\[[^[\\]]*])/g,a=n.depth>0&&/(\\[[^[\\]]*])/.exec(s),c=a?s.slice(0,a.index):s,u=[];if(c){if(!n.plainObjects&&o.call(Object.prototype,c)&&!n.allowPrototypes)return;u.push(c)}for(var p=0;n.depth>0&&null!==(a=i.exec(s))&&p<n.depth;){if(p+=1,!n.plainObjects&&o.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(a[1])}return a&&u.push(\"[\"+s.slice(a.index)+\"]\"),function(e,t,n,r){for(var o=r?t:l(t,n),s=e.length-1;s>=0;--s){var i,a=e[s];if(\"[]\"===a&&n.parseArrays)i=[].concat(o);else{i=n.plainObjects?Object.create(null):{};var c=\"[\"===a.charAt(0)&&\"]\"===a.charAt(a.length-1)?a.slice(1,-1):a,u=parseInt(c,10);n.parseArrays||\"\"!==c?!isNaN(u)&&a!==c&&String(u)===c&&u>=0&&n.parseArrays&&u<=n.arrayLimit?(i=[])[u]=o:\"__proto__\"!==c&&(i[c]=o):i={0:o}}o=i}return o}(u,t,n,r)}};e.exports=function(e,t){var n=function(e){if(!e)return i;if(null!==e.decoder&&void 0!==e.decoder&&\"function\"!=typeof e.decoder)throw new TypeError(\"Decoder has to be a function.\");if(void 0!==e.charset&&\"utf-8\"!==e.charset&&\"iso-8859-1\"!==e.charset)throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");var t=void 0===e.charset?i.charset:e.charset;return{allowDots:void 0===e.allowDots?i.allowDots:!!e.allowDots,allowPrototypes:\"boolean\"==typeof e.allowPrototypes?e.allowPrototypes:i.allowPrototypes,allowSparse:\"boolean\"==typeof e.allowSparse?e.allowSparse:i.allowSparse,arrayLimit:\"number\"==typeof e.arrayLimit?e.arrayLimit:i.arrayLimit,charset:t,charsetSentinel:\"boolean\"==typeof e.charsetSentinel?e.charsetSentinel:i.charsetSentinel,comma:\"boolean\"==typeof e.comma?e.comma:i.comma,decoder:\"function\"==typeof e.decoder?e.decoder:i.decoder,delimiter:\"string\"==typeof e.delimiter||r.isRegExp(e.delimiter)?e.delimiter:i.delimiter,depth:\"number\"==typeof e.depth||!1===e.depth?+e.depth:i.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:\"boolean\"==typeof e.interpretNumericEntities?e.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:\"number\"==typeof e.parameterLimit?e.parameterLimit:i.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:\"boolean\"==typeof e.plainObjects?e.plainObjects:i.plainObjects,strictNullHandling:\"boolean\"==typeof e.strictNullHandling?e.strictNullHandling:i.strictNullHandling}}(t);if(\"\"===e||null==e)return n.plainObjects?Object.create(null):{};for(var u=\"string\"==typeof e?function(e,t){var n,c={},u=t.ignoreQueryPrefix?e.replace(/^\\?/,\"\"):e,p=t.parameterLimit===1/0?void 0:t.parameterLimit,h=u.split(t.delimiter,p),f=-1,d=t.charset;if(t.charsetSentinel)for(n=0;n<h.length;++n)0===h[n].indexOf(\"utf8=\")&&(\"utf8=%E2%9C%93\"===h[n]?d=\"utf-8\":\"utf8=%26%2310003%3B\"===h[n]&&(d=\"iso-8859-1\"),f=n,n=h.length);for(n=0;n<h.length;++n)if(n!==f){var m,g,y=h[n],v=y.indexOf(\"]=\"),b=-1===v?y.indexOf(\"=\"):v+1;-1===b?(m=t.decoder(y,i.decoder,d,\"key\"),g=t.strictNullHandling?null:\"\"):(m=t.decoder(y.slice(0,b),i.decoder,d,\"key\"),g=r.maybeMap(l(y.slice(b+1),t),(function(e){return t.decoder(e,i.decoder,d,\"value\")}))),g&&t.interpretNumericEntities&&\"iso-8859-1\"===d&&(g=a(g)),y.indexOf(\"[]=\")>-1&&(g=s(g)?[g]:g),o.call(c,m)?c[m]=r.combine(c[m],g):c[m]=g}return c}(e,n):e,p=n.plainObjects?Object.create(null):{},h=Object.keys(u),f=0;f<h.length;++f){var d=h[f],m=c(d,u[d],n,\"string\"==typeof e);p=r.merge(p,m,n)}return!0===n.allowSparse?p:r.compact(p)}},58261:(e,t,n)=>{\"use strict\";var r=n(37478),o=n(12769),s=n(55798),i=Object.prototype.hasOwnProperty,a={brackets:function(e){return e+\"[]\"},comma:\"comma\",indices:function(e,t){return e+\"[\"+t+\"]\"},repeat:function(e){return e}},l=Array.isArray,c=String.prototype.split,u=Array.prototype.push,p=function(e,t){u.apply(e,l(t)?t:[t])},h=Date.prototype.toISOString,f=s.default,d={addQueryPrefix:!1,allowDots:!1,charset:\"utf-8\",charsetSentinel:!1,delimiter:\"&\",encode:!0,encoder:o.encode,encodeValuesOnly:!1,format:f,formatter:s.formatters[f],indices:!1,serializeDate:function(e){return h.call(e)},skipNulls:!1,strictNullHandling:!1},m={},g=function e(t,n,s,i,a,u,h,f,g,y,v,b,w,E,x,S){for(var _,j=t,O=S,k=0,A=!1;void 0!==(O=O.get(m))&&!A;){var C=O.get(t);if(k+=1,void 0!==C){if(C===k)throw new RangeError(\"Cyclic object value\");A=!0}void 0===O.get(m)&&(k=0)}if(\"function\"==typeof f?j=f(n,j):j instanceof Date?j=v(j):\"comma\"===s&&l(j)&&(j=o.maybeMap(j,(function(e){return e instanceof Date?v(e):e}))),null===j){if(a)return h&&!E?h(n,d.encoder,x,\"key\",b):n;j=\"\"}if(\"string\"==typeof(_=j)||\"number\"==typeof _||\"boolean\"==typeof _||\"symbol\"==typeof _||\"bigint\"==typeof _||o.isBuffer(j)){if(h){var P=E?n:h(n,d.encoder,x,\"key\",b);if(\"comma\"===s&&E){for(var N=c.call(String(j),\",\"),I=\"\",T=0;T<N.length;++T)I+=(0===T?\"\":\",\")+w(h(N[T],d.encoder,x,\"value\",b));return[w(P)+(i&&l(j)&&1===N.length?\"[]\":\"\")+\"=\"+I]}return[w(P)+\"=\"+w(h(j,d.encoder,x,\"value\",b))]}return[w(n)+\"=\"+w(String(j))]}var R,M=[];if(void 0===j)return M;if(\"comma\"===s&&l(j))R=[{value:j.length>0?j.join(\",\")||null:void 0}];else if(l(f))R=f;else{var D=Object.keys(j);R=g?D.sort(g):D}for(var F=i&&l(j)&&1===j.length?n+\"[]\":n,L=0;L<R.length;++L){var B=R[L],$=\"object\"==typeof B&&void 0!==B.value?B.value:j[B];if(!u||null!==$){var q=l(j)?\"function\"==typeof s?s(F,B):F:F+(y?\".\"+B:\"[\"+B+\"]\");S.set(t,k);var U=r();U.set(m,S),p(M,e($,q,s,i,a,u,h,f,g,y,v,b,w,E,x,U))}}return M};e.exports=function(e,t){var n,o=e,c=function(e){if(!e)return d;if(null!==e.encoder&&void 0!==e.encoder&&\"function\"!=typeof e.encoder)throw new TypeError(\"Encoder has to be a function.\");var t=e.charset||d.charset;if(void 0!==e.charset&&\"utf-8\"!==e.charset&&\"iso-8859-1\"!==e.charset)throw new TypeError(\"The charset option must be either utf-8, iso-8859-1, or undefined\");var n=s.default;if(void 0!==e.format){if(!i.call(s.formatters,e.format))throw new TypeError(\"Unknown format option provided.\");n=e.format}var r=s.formatters[n],o=d.filter;return(\"function\"==typeof e.filter||l(e.filter))&&(o=e.filter),{addQueryPrefix:\"boolean\"==typeof e.addQueryPrefix?e.addQueryPrefix:d.addQueryPrefix,allowDots:void 0===e.allowDots?d.allowDots:!!e.allowDots,charset:t,charsetSentinel:\"boolean\"==typeof e.charsetSentinel?e.charsetSentinel:d.charsetSentinel,delimiter:void 0===e.delimiter?d.delimiter:e.delimiter,encode:\"boolean\"==typeof e.encode?e.encode:d.encode,encoder:\"function\"==typeof e.encoder?e.encoder:d.encoder,encodeValuesOnly:\"boolean\"==typeof e.encodeValuesOnly?e.encodeValuesOnly:d.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:\"function\"==typeof e.serializeDate?e.serializeDate:d.serializeDate,skipNulls:\"boolean\"==typeof e.skipNulls?e.skipNulls:d.skipNulls,sort:\"function\"==typeof e.sort?e.sort:null,strictNullHandling:\"boolean\"==typeof e.strictNullHandling?e.strictNullHandling:d.strictNullHandling}}(t);\"function\"==typeof c.filter?o=(0,c.filter)(\"\",o):l(c.filter)&&(n=c.filter);var u,h=[];if(\"object\"!=typeof o||null===o)return\"\";u=t&&t.arrayFormat in a?t.arrayFormat:t&&\"indices\"in t?t.indices?\"indices\":\"repeat\":\"indices\";var f=a[u];if(t&&\"commaRoundTrip\"in t&&\"boolean\"!=typeof t.commaRoundTrip)throw new TypeError(\"`commaRoundTrip` must be a boolean, or absent\");var m=\"comma\"===f&&t&&t.commaRoundTrip;n||(n=Object.keys(o)),c.sort&&n.sort(c.sort);for(var y=r(),v=0;v<n.length;++v){var b=n[v];c.skipNulls&&null===o[b]||p(h,g(o[b],b,f,m,c.strictNullHandling,c.skipNulls,c.encode?c.encoder:null,c.filter,c.sort,c.allowDots,c.serializeDate,c.format,c.formatter,c.encodeValuesOnly,c.charset,y))}var w=h.join(c.delimiter),E=!0===c.addQueryPrefix?\"?\":\"\";return c.charsetSentinel&&(\"iso-8859-1\"===c.charset?E+=\"utf8=%26%2310003%3B&\":E+=\"utf8=%E2%9C%93&\"),w.length>0?E+w:\"\"}},12769:(e,t,n)=>{\"use strict\";var r=n(55798),o=Object.prototype.hasOwnProperty,s=Array.isArray,i=function(){for(var e=[],t=0;t<256;++t)e.push(\"%\"+((t<16?\"0\":\"\")+t.toString(16)).toUpperCase());return e}(),a=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n};e.exports={arrayToObject:a,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:\"o\"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),l=0;l<a.length;++l){var c=a[l],u=i[c];\"object\"==typeof u&&null!==u&&-1===n.indexOf(u)&&(t.push({obj:i,prop:c}),n.push(u))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(s(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\\+/g,\" \");if(\"iso-8859-1\"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,o,s){if(0===e.length)return e;var a=e;if(\"symbol\"==typeof e?a=Symbol.prototype.toString.call(e):\"string\"!=typeof e&&(a=String(e)),\"iso-8859-1\"===n)return escape(a).replace(/%u[0-9a-f]{4}/gi,(function(e){return\"%26%23\"+parseInt(e.slice(2),16)+\"%3B\"}));for(var l=\"\",c=0;c<a.length;++c){var u=a.charCodeAt(c);45===u||46===u||95===u||126===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||s===r.RFC1738&&(40===u||41===u)?l+=a.charAt(c):u<128?l+=i[u]:u<2048?l+=i[192|u>>6]+i[128|63&u]:u<55296||u>=57344?l+=i[224|u>>12]+i[128|u>>6&63]+i[128|63&u]:(c+=1,u=65536+((1023&u)<<10|1023&a.charCodeAt(c)),l+=i[240|u>>18]+i[128|u>>12&63]+i[128|u>>6&63]+i[128|63&u])}return l},isBuffer:function(e){return!(!e||\"object\"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(s(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if(\"object\"!=typeof n){if(s(t))t.push(n);else{if(!t||\"object\"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!o.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||\"object\"!=typeof t)return[t].concat(n);var i=t;return s(t)&&!s(n)&&(i=a(t,r)),s(t)&&s(n)?(n.forEach((function(n,s){if(o.call(t,s)){var i=t[s];i&&\"object\"==typeof i&&n&&\"object\"==typeof n?t[s]=e(i,n,r):t.push(n)}else t[s]=n})),t):Object.keys(n).reduce((function(t,s){var i=n[s];return o.call(t,s)?t[s]=e(t[s],i,r):t[s]=i,t}),i)}}},57129:(e,t)=>{\"use strict\";var n=Object.prototype.hasOwnProperty;function r(e){try{return decodeURIComponent(e.replace(/\\+/g,\" \"))}catch(e){return null}}function o(e){try{return encodeURIComponent(e)}catch(e){return null}}t.stringify=function(e,t){t=t||\"\";var r,s,i=[];for(s in\"string\"!=typeof t&&(t=\"?\"),e)if(n.call(e,s)){if((r=e[s])||null!=r&&!isNaN(r)||(r=\"\"),s=o(s),r=o(r),null===s||null===r)continue;i.push(s+\"=\"+r)}return i.length?t+i.join(\"&\"):\"\"},t.parse=function(e){for(var t,n=/([^=?#&]+)=?([^&]*)/g,o={};t=n.exec(e);){var s=r(t[1]),i=r(t[2]);null===s||null===i||s in o||(o[s]=i)}return o}},14419:(e,t,n)=>{const r=n(60697),o=n(69450),s=r.types;e.exports=class e{constructor(e,t){if(this._setDefaults(e),e instanceof RegExp)this.ignoreCase=e.ignoreCase,this.multiline=e.multiline,e=e.source;else{if(\"string\"!=typeof e)throw new Error(\"Expected a regexp or string\");this.ignoreCase=t&&-1!==t.indexOf(\"i\"),this.multiline=t&&-1!==t.indexOf(\"m\")}this.tokens=r(e)}_setDefaults(t){this.max=null!=t.max?t.max:null!=e.prototype.max?e.prototype.max:100,this.defaultRange=t.defaultRange?t.defaultRange:this.defaultRange.clone(),t.randInt&&(this.randInt=t.randInt)}gen(){return this._gen(this.tokens,[])}_gen(e,t){var n,r,o,i,a;switch(e.type){case s.ROOT:case s.GROUP:if(e.followedBy||e.notFollowedBy)return\"\";for(e.remember&&void 0===e.groupNumber&&(e.groupNumber=t.push(null)-1),r=\"\",i=0,a=(n=e.options?this._randSelect(e.options):e.stack).length;i<a;i++)r+=this._gen(n[i],t);return e.remember&&(t[e.groupNumber]=r),r;case s.POSITION:return\"\";case s.SET:var l=this._expand(e);return l.length?String.fromCharCode(this._randSelect(l)):\"\";case s.REPETITION:for(o=this.randInt(e.min,e.max===1/0?e.min+this.max:e.max),r=\"\",i=0;i<o;i++)r+=this._gen(e.value,t);return r;case s.REFERENCE:return t[e.value-1]||\"\";case s.CHAR:var c=this.ignoreCase&&this._randBool()?this._toOtherCase(e.value):e.value;return String.fromCharCode(c)}}_toOtherCase(e){return e+(97<=e&&e<=122?-32:65<=e&&e<=90?32:0)}_randBool(){return!this.randInt(0,1)}_randSelect(e){return e instanceof o?e.index(this.randInt(0,e.length-1)):e[this.randInt(0,e.length-1)]}_expand(e){if(e.type===r.types.CHAR)return new o(e.value);if(e.type===r.types.RANGE)return new o(e.from,e.to);{let t=new o;for(let n=0;n<e.set.length;n++){let r=this._expand(e.set[n]);if(t.add(r),this.ignoreCase)for(let e=0;e<r.length;e++){let n=r.index(e),o=this._toOtherCase(n);n!==o&&t.add(o)}}return e.not?this.defaultRange.clone().subtract(t):this.defaultRange.clone().intersect(t)}}randInt(e,t){return e+Math.floor(Math.random()*(1+t-e))}get defaultRange(){return this._range=this._range||new o(32,126)}set defaultRange(e){this._range=e}static randexp(t,n){var r;return\"string\"==typeof t&&(t=new RegExp(t,n)),void 0===t._randexp?(r=new e(t,n),t._randexp=r):(r=t._randexp)._setDefaults(t),r.gen()}static sugar(){RegExp.prototype.gen=function(){return e.randexp(this)}}}},92282:(e,t,n)=>{\"use strict\";var r=n(34155),o=65536,s=4294967295;var i=n(89509).Buffer,a=n.g.crypto||n.g.msCrypto;a&&a.getRandomValues?e.exports=function(e,t){if(e>s)throw new RangeError(\"requested too many random bytes\");var n=i.allocUnsafe(e);if(e>0)if(e>o)for(var l=0;l<e;l+=o)a.getRandomValues(n.slice(l,l+o));else a.getRandomValues(n);if(\"function\"==typeof t)return r.nextTick((function(){t(null,n)}));return n}:e.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}},74300:(e,t,n)=>{\"use strict\";function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.CopyToClipboard=void 0;var o=a(n(67294)),s=a(n(20640)),i=[\"text\",\"onCopy\",\"options\",\"children\"];function a(e){return e&&e.__esModule?e:{default:e}}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){g(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function u(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function f(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=m(e);if(t){var s=m(this).constructor;n=Reflect.construct(o,arguments,s)}else n=o.apply(this,arguments);return function(e,t){if(t&&(\"object\"===r(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return d(e)}(this,n)}}function d(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=function(e){!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}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&h(e,t)}(l,e);var t,n,r,a=f(l);function l(){var e;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,l);for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return g(d(e=a.call.apply(a,[this].concat(n))),\"onClick\",(function(t){var n=e.props,r=n.text,i=n.onCopy,a=n.children,l=n.options,c=o.default.Children.only(a),u=(0,s.default)(r,l);i&&i(r,u),c&&c.props&&\"function\"==typeof c.props.onClick&&c.props.onClick(t)})),e}return t=l,(n=[{key:\"render\",value:function(){var e=this.props,t=(e.text,e.onCopy,e.options,e.children),n=u(e,i),r=o.default.Children.only(t);return o.default.cloneElement(r,c(c({},n),{},{onClick:this.onClick}))}}])&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),l}(o.default.PureComponent);t.CopyToClipboard=y,g(y,\"defaultProps\",{onCopy:void 0,options:void 0})},74855:(e,t,n)=>{\"use strict\";var r=n(74300).CopyToClipboard;r.CopyToClipboard=r,e.exports=r},53441:(e,t,n)=>{\"use strict\";function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.DebounceInput=void 0;var o=a(n(67294)),s=a(n(91296)),i=[\"element\",\"onChange\",\"value\",\"minLength\",\"debounceTimeout\",\"forceNotifyByEnter\",\"forceNotifyOnBlur\",\"onKeyDown\",\"onBlur\",\"inputRef\"];function a(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?c(Object(n),!0).forEach((function(t){g(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function f(e){var t=function(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,o=m(e);if(t){var s=m(this).constructor;n=Reflect.construct(o,arguments,s)}else n=o.apply(this,arguments);return function(e,t){if(t&&(\"object\"===r(t)||\"function\"==typeof t))return t;if(void 0!==t)throw new TypeError(\"Derived constructors may only return object or undefined\");return d(e)}(this,n)}}function d(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=function(e){!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}}),Object.defineProperty(e,\"prototype\",{writable:!1}),t&&h(e,t)}(c,e);var t,n,r,a=f(c);function c(e){var t;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,c),g(d(t=a.call(this,e)),\"onChange\",(function(e){e.persist();var n=t.state.value,r=t.props.minLength;t.setState({value:e.target.value},(function(){var o=t.state.value;o.length>=r?t.notify(e):n.length>o.length&&t.notify(u(u({},e),{},{target:u(u({},e.target),{},{value:\"\"})}))}))})),g(d(t),\"onKeyDown\",(function(e){\"Enter\"===e.key&&t.forceNotify(e);var n=t.props.onKeyDown;n&&(e.persist(),n(e))})),g(d(t),\"onBlur\",(function(e){t.forceNotify(e);var n=t.props.onBlur;n&&(e.persist(),n(e))})),g(d(t),\"createNotifier\",(function(e){if(e<0)t.notify=function(){return null};else if(0===e)t.notify=t.doNotify;else{var n=(0,s.default)((function(e){t.isDebouncing=!1,t.doNotify(e)}),e);t.notify=function(e){t.isDebouncing=!0,n(e)},t.flush=function(){return n.flush()},t.cancel=function(){t.isDebouncing=!1,n.cancel()}}})),g(d(t),\"doNotify\",(function(){t.props.onChange.apply(void 0,arguments)})),g(d(t),\"forceNotify\",(function(e){var n=t.props.debounceTimeout;if(t.isDebouncing||!(n>0)){t.cancel&&t.cancel();var r=t.state.value,o=t.props.minLength;r.length>=o?t.doNotify(e):t.doNotify(u(u({},e),{},{target:u(u({},e.target),{},{value:r})}))}})),t.isDebouncing=!1,t.state={value:void 0===e.value||null===e.value?\"\":e.value};var n=t.props.debounceTimeout;return t.createNotifier(n),t}return t=c,(n=[{key:\"componentDidUpdate\",value:function(e){if(!this.isDebouncing){var t=this.props,n=t.value,r=t.debounceTimeout,o=e.debounceTimeout,s=e.value,i=this.state.value;void 0!==n&&s!==n&&i!==n&&this.setState({value:n}),r!==o&&this.createNotifier(r)}}},{key:\"componentWillUnmount\",value:function(){this.flush&&this.flush()}},{key:\"render\",value:function(){var e,t,n=this.props,r=n.element,s=(n.onChange,n.value,n.minLength,n.debounceTimeout,n.forceNotifyByEnter),a=n.forceNotifyOnBlur,c=n.onKeyDown,p=n.onBlur,h=n.inputRef,f=l(n,i),d=this.state.value;e=s?{onKeyDown:this.onKeyDown}:c?{onKeyDown:c}:{},t=a?{onBlur:this.onBlur}:p?{onBlur:p}:{};var m=h?{ref:h}:{};return o.default.createElement(r,u(u(u(u({},f),{},{onChange:this.onChange,value:d},e),t),m))}}])&&p(t.prototype,n),r&&p(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),c}(o.default.PureComponent);t.DebounceInput=y,g(y,\"defaultProps\",{element:\"input\",type:\"text\",onKeyDown:void 0,onBlur:void 0,value:void 0,minLength:0,debounceTimeout:100,forceNotifyByEnter:!0,forceNotifyOnBlur:!0,inputRef:void 0})},775:(e,t,n)=>{\"use strict\";var r=n(53441).DebounceInput;r.DebounceInput=r,e.exports=r},64448:(e,t,n)=>{\"use strict\";var r=n(67294),o=n(27418),s=n(63840);function i(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!r)throw Error(i(227));var a=new Set,l={};function c(e,t){u(e,t),u(e+\"Capture\",t)}function u(e,t){for(l[e]=t,e=0;e<t.length;e++)a.add(t[e])}var p=!(\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement),h=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,f=Object.prototype.hasOwnProperty,d={},m={};function g(e,t,n,r,o,s,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=s,this.removeEmptyString=i}var y={};\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach((function(e){y[e]=new g(e,0,!1,e,null,!1,!1)})),[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach((function(e){var t=e[0];y[t]=new g(t,1,!1,e[1],null,!1,!1)})),[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach((function(e){y[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach((function(e){y[e]=new g(e,2,!1,e,null,!1,!1)})),\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach((function(e){y[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach((function(e){y[e]=new g(e,3,!0,e,null,!1,!1)})),[\"capture\",\"download\"].forEach((function(e){y[e]=new g(e,4,!1,e,null,!1,!1)})),[\"cols\",\"rows\",\"size\",\"span\"].forEach((function(e){y[e]=new g(e,6,!1,e,null,!1,!1)})),[\"rowSpan\",\"start\"].forEach((function(e){y[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var v=/[\\-:]([a-z])/g;function b(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=y.hasOwnProperty(t)?y[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&(\"o\"===t[0]||\"O\"===t[0])&&(\"n\"===t[1]||\"N\"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case\"function\":case\"symbol\":return!0;case\"boolean\":return!r&&(null!==n?!n.acceptsBooleans:\"data-\"!==(e=e.toLowerCase().slice(0,5))&&\"aria-\"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!f.call(m,e)||!f.call(d,e)&&(h.test(e)?m[e]=!0:(d[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,\"\"+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&\"\":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?\"\":\"\"+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,null,!1,!1)})),\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,\"http://www.w3.org/1999/xlink\",!1,!1)})),[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach((function(e){var t=e.replace(v,b);y[t]=new g(t,1,!1,e,\"http://www.w3.org/XML/1998/namespace\",!1,!1)})),[\"tabIndex\",\"crossOrigin\"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),y.xlinkHref=new g(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1),[\"src\",\"href\",\"action\",\"formAction\"].forEach((function(e){y[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var E=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=60103,S=60106,_=60107,j=60108,O=60114,k=60109,A=60110,C=60112,P=60113,N=60120,I=60115,T=60116,R=60121,M=60128,D=60129,F=60130,L=60131;if(\"function\"==typeof Symbol&&Symbol.for){var B=Symbol.for;x=B(\"react.element\"),S=B(\"react.portal\"),_=B(\"react.fragment\"),j=B(\"react.strict_mode\"),O=B(\"react.profiler\"),k=B(\"react.provider\"),A=B(\"react.context\"),C=B(\"react.forward_ref\"),P=B(\"react.suspense\"),N=B(\"react.suspense_list\"),I=B(\"react.memo\"),T=B(\"react.lazy\"),R=B(\"react.block\"),B(\"react.scope\"),M=B(\"react.opaque.id\"),D=B(\"react.debug_trace_mode\"),F=B(\"react.offscreen\"),L=B(\"react.legacy_hidden\")}var $,q=\"function\"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=q&&e[q]||e[\"@@iterator\"])?e:null}function z(e){if(void 0===$)try{throw Error()}catch(e){var t=e.stack.trim().match(/\\n( *(at )?)/);$=t&&t[1]||\"\"}return\"\\n\"+$+e}var V=!1;function W(e,t){if(!e||V)return\"\";V=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,\"props\",{set:function(){throw Error()}}),\"object\"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(e){var r=e}Reflect.construct(e,[],t)}else{try{t.call()}catch(e){r=e}e.call(t.prototype)}else{try{throw Error()}catch(e){r=e}e()}}catch(e){if(e&&r&&\"string\"==typeof e.stack){for(var o=e.stack.split(\"\\n\"),s=r.stack.split(\"\\n\"),i=o.length-1,a=s.length-1;1<=i&&0<=a&&o[i]!==s[a];)a--;for(;1<=i&&0<=a;i--,a--)if(o[i]!==s[a]){if(1!==i||1!==a)do{if(i--,0>--a||o[i]!==s[a])return\"\\n\"+o[i].replace(\" at new \",\" at \")}while(1<=i&&0<=a);break}}}finally{V=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:\"\")?z(e):\"\"}function J(e){switch(e.tag){case 5:return z(e.type);case 16:return z(\"Lazy\");case 13:return z(\"Suspense\");case 19:return z(\"SuspenseList\");case 0:case 2:case 15:return e=W(e.type,!1);case 11:return e=W(e.type.render,!1);case 22:return e=W(e.type._render,!1);case 1:return e=W(e.type,!0);default:return\"\"}}function K(e){if(null==e)return null;if(\"function\"==typeof e)return e.displayName||e.name||null;if(\"string\"==typeof e)return e;switch(e){case _:return\"Fragment\";case S:return\"Portal\";case O:return\"Profiler\";case j:return\"StrictMode\";case P:return\"Suspense\";case N:return\"SuspenseList\"}if(\"object\"==typeof e)switch(e.$$typeof){case A:return(e.displayName||\"Context\")+\".Consumer\";case k:return(e._context.displayName||\"Context\")+\".Provider\";case C:var t=e.render;return t=t.displayName||t.name||\"\",e.displayName||(\"\"!==t?\"ForwardRef(\"+t+\")\":\"ForwardRef\");case I:return K(e.type);case R:return K(e._render);case T:t=e._payload,e=e._init;try{return K(e(t))}catch(e){}}return null}function H(e){switch(typeof e){case\"boolean\":case\"number\":case\"object\":case\"string\":case\"undefined\":return e;default:return\"\"}}function G(e){var t=e.type;return(e=e.nodeName)&&\"input\"===e.toLowerCase()&&(\"checkbox\"===t||\"radio\"===t)}function Z(e){e._valueTracker||(e._valueTracker=function(e){var t=G(e)?\"checked\":\"value\",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=\"\"+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&\"function\"==typeof n.get&&\"function\"==typeof n.set){var o=n.get,s=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=\"\"+e,s.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=\"\"+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Y(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=\"\";return e&&(r=G(e)?e.checked?\"true\":\"false\":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||(\"undefined\"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function Q(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?\"\":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:\"checkbox\"===t.type||\"radio\"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,\"checked\",t,!1)}function ne(e,t){te(e,t);var n=H(t.value),r=t.type;if(null!=n)\"number\"===r?(0===n&&\"\"===e.value||e.value!=n)&&(e.value=\"\"+n):e.value!==\"\"+n&&(e.value=\"\"+n);else if(\"submit\"===r||\"reset\"===r)return void e.removeAttribute(\"value\");t.hasOwnProperty(\"value\")?oe(e,t.type,n):t.hasOwnProperty(\"defaultValue\")&&oe(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty(\"value\")||t.hasOwnProperty(\"defaultValue\")){var r=t.type;if(!(\"submit\"!==r&&\"reset\"!==r||void 0!==t.value&&null!==t.value))return;t=\"\"+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}\"\"!==(n=e.name)&&(e.name=\"\"),e.defaultChecked=!!e._wrapperState.initialChecked,\"\"!==n&&(e.name=n)}function oe(e,t,n){\"number\"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=\"\"+e._wrapperState.initialValue:e.defaultValue!==\"\"+n&&(e.defaultValue=\"\"+n))}function se(e,t){return e=o({children:void 0},t),(t=function(e){var t=\"\";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t[\"$\"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty(\"$\"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=\"\"+H(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function ae(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:\"\"+e._wrapperState.initialValue})}function le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=\"\"),n=t}e._wrapperState={initialValue:H(n)}}function ce(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=\"\"+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=\"\"+r)}function ue(e){var t=e.textContent;t===e._wrapperState.initialValue&&\"\"!==t&&null!==t&&(e.value=t)}var pe={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};function he(e){switch(e){case\"svg\":return\"http://www.w3.org/2000/svg\";case\"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function fe(e,t){return null==e||\"http://www.w3.org/1999/xhtml\"===e?he(t):\"http://www.w3.org/2000/svg\"===e&&\"foreignObject\"===t?\"http://www.w3.org/1999/xhtml\":e}var de,me,ge=(me=function(e,t){if(e.namespaceURI!==pe.svg||\"innerHTML\"in e)e.innerHTML=t;else{for((de=de||document.createElement(\"div\")).innerHTML=\"<svg>\"+t.valueOf().toString()+\"</svg>\",t=de.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},\"undefined\"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return me(e,t)}))}:me);function ye(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ve={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},be=[\"Webkit\",\"ms\",\"Moz\",\"O\"];function we(e,t,n){return null==t||\"boolean\"==typeof t||\"\"===t?\"\":n||\"number\"!=typeof t||0===t||ve.hasOwnProperty(e)&&ve[e]?(\"\"+t).trim():t+\"px\"}function Ee(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf(\"--\"),o=we(n,t[n],r);\"float\"===n&&(n=\"cssFloat\"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ve).forEach((function(e){be.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ve[t]=ve[e]}))}));var xe=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Se(e,t){if(t){if(xe[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if(\"object\"!=typeof t.dangerouslySetInnerHTML||!(\"__html\"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&\"object\"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf(\"-\"))return\"string\"==typeof t.is;switch(e){case\"annotation-xml\":case\"color-profile\":case\"font-face\":case\"font-face-src\":case\"font-face-uri\":case\"font-face-format\":case\"font-face-name\":case\"missing-glyph\":return!1;default:return!0}}function je(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,ke=null,Ae=null;function Ce(e){if(e=no(e)){if(\"function\"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Pe(e){ke?Ae?Ae.push(e):Ae=[e]:ke=e}function Ne(){if(ke){var e=ke,t=Ae;if(Ae=ke=null,Ce(e),t)for(e=0;e<t.length;e++)Ce(t[e])}}function Ie(e,t){return e(t)}function Te(e,t,n,r,o){return e(t,n,r,o)}function Re(){}var Me=Ie,De=!1,Fe=!1;function Le(){null===ke&&null===Ae||(Re(),Ne())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case\"onClick\":case\"onClickCapture\":case\"onDoubleClick\":case\"onDoubleClickCapture\":case\"onMouseDown\":case\"onMouseDownCapture\":case\"onMouseMove\":case\"onMouseMoveCapture\":case\"onMouseUp\":case\"onMouseUpCapture\":case\"onMouseEnter\":(r=!r.disabled)||(r=!(\"button\"===(e=e.type)||\"input\"===e||\"select\"===e||\"textarea\"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&\"function\"!=typeof n)throw Error(i(231,t,typeof n));return n}var $e=!1;if(p)try{var qe={};Object.defineProperty(qe,\"passive\",{get:function(){$e=!0}}),window.addEventListener(\"test\",qe,qe),window.removeEventListener(\"test\",qe,qe)}catch(me){$e=!1}function Ue(e,t,n,r,o,s,i,a,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(e){this.onError(e)}}var ze=!1,Ve=null,We=!1,Je=null,Ke={onError:function(e){ze=!0,Ve=e}};function He(e,t,n,r,o,s,i,a,l){ze=!1,Ve=null,Ue.apply(Ke,arguments)}function Ge(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ze(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ye(e){if(Ge(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ge(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var s=o.alternate;if(null===s){if(null!==(r=o.return)){n=r;continue}break}if(o.child===s.child){for(s=o.child;s;){if(s===n)return Ye(o),e;if(s===r)return Ye(o),t;s=s.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=s;else{for(var a=!1,l=o.child;l;){if(l===n){a=!0,n=o,r=s;break}if(l===r){a=!0,r=o,n=s;break}l=l.sibling}if(!a){for(l=s.child;l;){if(l===n){a=!0,n=s,r=o;break}if(l===r){a=!0,r=s,n=o;break}l=l.sibling}if(!a)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Qe(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,st=[],it=null,at=null,lt=null,ct=new Map,ut=new Map,pt=[],ht=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");function ft(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function dt(e,t){switch(e){case\"focusin\":case\"focusout\":it=null;break;case\"dragenter\":case\"dragleave\":at=null;break;case\"mouseover\":case\"mouseout\":lt=null;break;case\"pointerover\":case\"pointerout\":ct.delete(t.pointerId);break;case\"gotpointercapture\":case\"lostpointercapture\":ut.delete(t.pointerId)}}function mt(e,t,n,r,o,s){return null===e||e.nativeEvent!==s?(e=ft(t,n,r,o,s),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=Ge(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ze(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){s.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function yt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function vt(e,t,n){yt(e)&&n.delete(t)}function bt(){for(ot=!1;0<st.length;){var e=st[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&st.shift()}null!==it&&yt(it)&&(it=null),null!==at&&yt(at)&&(at=null),null!==lt&&yt(lt)&&(lt=null),ct.forEach(vt),ut.forEach(vt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,s.unstable_scheduleCallback(s.unstable_NormalPriority,bt)))}function Et(e){function t(t){return wt(t,e)}if(0<st.length){wt(st[0],e);for(var n=1;n<st.length;n++){var r=st[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==at&&wt(at,e),null!==lt&&wt(lt,e),ct.forEach(t),ut.forEach(t),n=0;n<pt.length;n++)(r=pt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<pt.length&&null===(n=pt[0]).blockedOn;)gt(n),null===n.blockedOn&&pt.shift()}function xt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n[\"Webkit\"+e]=\"webkit\"+t,n[\"Moz\"+e]=\"moz\"+t,n}var St={animationend:xt(\"Animation\",\"AnimationEnd\"),animationiteration:xt(\"Animation\",\"AnimationIteration\"),animationstart:xt(\"Animation\",\"AnimationStart\"),transitionend:xt(\"Transition\",\"TransitionEnd\")},_t={},jt={};function Ot(e){if(_t[e])return _t[e];if(!St[e])return e;var t,n=St[e];for(t in n)if(n.hasOwnProperty(t)&&t in jt)return _t[e]=n[t];return e}p&&(jt=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete St.animationend.animation,delete St.animationiteration.animation,delete St.animationstart.animation),\"TransitionEvent\"in window||delete St.transitionend.transition);var kt=Ot(\"animationend\"),At=Ot(\"animationiteration\"),Ct=Ot(\"animationstart\"),Pt=Ot(\"transitionend\"),Nt=new Map,It=new Map,Tt=[\"abort\",\"abort\",kt,\"animationEnd\",At,\"animationIteration\",Ct,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Pt,\"transitionEnd\",\"waiting\",\"waiting\"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o=\"on\"+(o[0].toUpperCase()+o.slice(1)),It.set(r,t),Nt.set(r,o),c(o,[r])}}(0,s.unstable_now)();var Mt=8;function Dt(e){if(0!=(1&e))return Mt=15,1;if(0!=(2&e))return Mt=14,2;if(0!=(4&e))return Mt=13,4;var t=24&e;return 0!==t?(Mt=12,t):0!=(32&e)?(Mt=11,32):0!==(t=192&e)?(Mt=10,t):0!=(256&e)?(Mt=9,256):0!==(t=3584&e)?(Mt=8,t):0!=(4096&e)?(Mt=7,4096):0!==(t=4186112&e)?(Mt=6,t):0!==(t=62914560&e)?(Mt=5,t):67108864&e?(Mt=4,67108864):0!=(134217728&e)?(Mt=3,134217728):0!==(t=805306368&e)?(Mt=2,t):0!=(1073741824&e)?(Mt=1,1073741824):(Mt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return Mt=0;var r=0,o=0,s=e.expiredLanes,i=e.suspendedLanes,a=e.pingedLanes;if(0!==s)r=s,o=Mt=15;else if(0!==(s=134217727&n)){var l=s&~i;0!==l?(r=Dt(l),o=Mt):0!==(a&=s)&&(r=Dt(a),o=Mt)}else 0!==(s=n&~i)?(r=Dt(s),o=Mt):0!==a&&(r=Dt(a),o=Mt);if(0===r)return 0;if(r=n&((0>(r=31-zt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Mt)return t;Mt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-zt(t)),r|=e[n],t&=~o;return r}function Lt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=$t(24&~t))?Bt(10,t):e;case 10:return 0===(e=$t(192&~t))?Bt(8,t):e;case 8:return 0===(e=$t(3584&~t))&&(0===(e=$t(4186112&~t))&&(e=512)),e;case 2:return 0===(t=$t(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function $t(e){return e&-e}function qt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ut(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-zt(t)]=n}var zt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Vt(e)/Wt|0)|0},Vt=Math.log,Wt=Math.LN2;var Jt=s.unstable_UserBlockingPriority,Kt=s.unstable_runWithPriority,Ht=!0;function Gt(e,t,n,r){De||Re();var o=Yt,s=De;De=!0;try{Te(o,e,t,n,r)}finally{(De=s)||Le()}}function Zt(e,t,n,r){Kt(Jt,Yt.bind(null,e,t,n,r))}function Yt(e,t,n,r){var o;if(Ht)if((o=0==(4&t))&&0<st.length&&-1<ht.indexOf(e))e=ft(null,e,t,n,r),st.push(e);else{var s=Xt(e,t,n,r);if(null===s)o&&dt(e,r);else{if(o){if(-1<ht.indexOf(e))return e=ft(s,e,t,n,r),void st.push(e);if(function(e,t,n,r,o){switch(t){case\"focusin\":return it=mt(it,e,t,n,r,o),!0;case\"dragenter\":return at=mt(at,e,t,n,r,o),!0;case\"mouseover\":return lt=mt(lt,e,t,n,r,o),!0;case\"pointerover\":var s=o.pointerId;return ct.set(s,mt(ct.get(s)||null,e,t,n,r,o)),!0;case\"gotpointercapture\":return s=o.pointerId,ut.set(s,mt(ut.get(s)||null,e,t,n,r,o)),!0}return!1}(s,e,t,n,r))return;dt(e,r)}Rr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=je(r);if(null!==(o=to(o))){var s=Ge(o);if(null===s)o=null;else{var i=s.tag;if(13===i){if(null!==(o=Ze(s)))return o;o=null}else if(3===i){if(s.stateNode.hydrate)return 3===s.tag?s.stateNode.containerInfo:null;o=null}else s!==o&&(o=null)}}return Rr(e,t,r,o,n),null}var Qt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o=\"value\"in Qt?Qt.value:Qt.textContent,s=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[s-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return\"charCode\"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function sn(){return!1}function an(e){function t(t,n,r,o,s){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=s,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:sn,this.isPropagationStopped=sn,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():\"unknown\"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():\"unknown\"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var ln,cn,un,pn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},hn=an(pn),fn=o({},pn,{view:0,detail:0}),dn=an(fn),mn=o({},fn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:kn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return\"movementX\"in e?e.movementX:(e!==un&&(un&&\"mousemove\"===e.type?(ln=e.screenX-un.screenX,cn=e.screenY-un.screenY):cn=ln=0,un=e),ln)},movementY:function(e){return\"movementY\"in e?e.movementY:cn}}),gn=an(mn),yn=an(o({},mn,{dataTransfer:0})),vn=an(o({},fn,{relatedTarget:0})),bn=an(o({},pn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},pn,{clipboardData:function(e){return\"clipboardData\"in e?e.clipboardData:window.clipboardData}}),En=an(wn),xn=an(o({},pn,{data:0})),Sn={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},_n={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},jn={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=jn[e])&&!!t[e]}function kn(){return On}var An=o({},fn,{key:function(e){if(e.key){var t=Sn[e.key]||e.key;if(\"Unidentified\"!==t)return t}return\"keypress\"===e.type?13===(e=rn(e))?\"Enter\":String.fromCharCode(e):\"keydown\"===e.type||\"keyup\"===e.type?_n[e.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:kn,charCode:function(e){return\"keypress\"===e.type?rn(e):0},keyCode:function(e){return\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0},which:function(e){return\"keypress\"===e.type?rn(e):\"keydown\"===e.type||\"keyup\"===e.type?e.keyCode:0}}),Cn=an(An),Pn=an(o({},mn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Nn=an(o({},fn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:kn})),In=an(o({},pn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Tn=o({},mn,{deltaX:function(e){return\"deltaX\"in e?e.deltaX:\"wheelDeltaX\"in e?-e.wheelDeltaX:0},deltaY:function(e){return\"deltaY\"in e?e.deltaY:\"wheelDeltaY\"in e?-e.wheelDeltaY:\"wheelDelta\"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=an(Tn),Mn=[9,13,27,32],Dn=p&&\"CompositionEvent\"in window,Fn=null;p&&\"documentMode\"in document&&(Fn=document.documentMode);var Ln=p&&\"TextEvent\"in window&&!Fn,Bn=p&&(!Dn||Fn&&8<Fn&&11>=Fn),$n=String.fromCharCode(32),qn=!1;function Un(e,t){switch(e){case\"keyup\":return-1!==Mn.indexOf(t.keyCode);case\"keydown\":return 229!==t.keyCode;case\"keypress\":case\"mousedown\":case\"focusout\":return!0;default:return!1}}function zn(e){return\"object\"==typeof(e=e.detail)&&\"data\"in e?e.data:null}var Vn=!1;var Wn={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Jn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return\"input\"===t?!!Wn[e.type]:\"textarea\"===t}function Kn(e,t,n,r){Pe(r),0<(t=Dr(t,\"onChange\")).length&&(n=new hn(\"onChange\",\"change\",null,n,r),e.push({event:n,listeners:t}))}var Hn=null,Gn=null;function Zn(e){Ar(e,0)}function Yn(e){if(Y(ro(e)))return e}function Xn(e,t){if(\"change\"===e)return t}var Qn=!1;if(p){var er;if(p){var tr=\"oninput\"in document;if(!tr){var nr=document.createElement(\"div\");nr.setAttribute(\"oninput\",\"return;\"),tr=\"function\"==typeof nr.oninput}er=tr}else er=!1;Qn=er&&(!document.documentMode||9<document.documentMode)}function rr(){Hn&&(Hn.detachEvent(\"onpropertychange\",or),Gn=Hn=null)}function or(e){if(\"value\"===e.propertyName&&Yn(Gn)){var t=[];if(Kn(t,Gn,e,je(e)),e=Zn,De)e(t);else{De=!0;try{Ie(e,t)}finally{De=!1,Le()}}}}function sr(e,t,n){\"focusin\"===e?(rr(),Gn=n,(Hn=t).attachEvent(\"onpropertychange\",or)):\"focusout\"===e&&rr()}function ir(e){if(\"selectionchange\"===e||\"keyup\"===e||\"keydown\"===e)return Yn(Gn)}function ar(e,t){if(\"click\"===e)return Yn(t)}function lr(e,t){if(\"input\"===e||\"change\"===e)return Yn(t)}var cr=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},ur=Object.prototype.hasOwnProperty;function pr(e,t){if(cr(e,t))return!0;if(\"object\"!=typeof e||null===e||\"object\"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!ur.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function hr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=hr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=hr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):\"contains\"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function mr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n=\"string\"==typeof t.contentWindow.location.href}catch(e){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(\"input\"===t&&(\"text\"===e.type||\"search\"===e.type||\"tel\"===e.type||\"url\"===e.type||\"password\"===e.type)||\"textarea\"===t||\"true\"===e.contentEditable)}var yr=p&&\"documentMode\"in document&&11>=document.documentMode,vr=null,br=null,wr=null,Er=!1;function xr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Er||null==vr||vr!==X(r)||(\"selectionStart\"in(r=vr)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&pr(wr,r)||(wr=r,0<(r=Dr(br,\"onSelect\")).length&&(t=new hn(\"onSelect\",\"select\",null,t,n),e.push({event:t,listeners:r}),t.target=vr)))}Rt(\"cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0),Rt(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1),Rt(Tt,2);for(var Sr=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),_r=0;_r<Sr.length;_r++)It.set(Sr[_r],0);u(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]),u(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]),u(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]),u(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]),c(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \")),c(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \")),c(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]),c(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \")),c(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")),c(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var jr=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),Or=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(jr));function kr(e,t,n){var r=e.type||\"unknown-event\";e.currentTarget=n,function(e,t,n,r,o,s,a,l,c){if(He.apply(this,arguments),ze){if(!ze)throw Error(i(198));var u=Ve;ze=!1,Ve=null,We||(We=!0,Je=u)}}(r,t,void 0,e),e.currentTarget=null}function Ar(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var s=void 0;if(t)for(var i=r.length-1;0<=i;i--){var a=r[i],l=a.instance,c=a.currentTarget;if(a=a.listener,l!==s&&o.isPropagationStopped())break e;kr(o,a,c),s=l}else for(i=0;i<r.length;i++){if(l=(a=r[i]).instance,c=a.currentTarget,a=a.listener,l!==s&&o.isPropagationStopped())break e;kr(o,a,c),s=l}}}if(We)throw e=Je,We=!1,Je=null,e}function Cr(e,t){var n=so(t),r=e+\"__bubble\";n.has(r)||(Tr(t,e,2,!1),n.add(r))}var Pr=\"_reactListening\"+Math.random().toString(36).slice(2);function Nr(e){e[Pr]||(e[Pr]=!0,a.forEach((function(t){Or.has(t)||Ir(t,!1,e,null),Ir(t,!0,e,null)})))}function Ir(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,s=n;if(\"selectionchange\"===e&&9!==n.nodeType&&(s=n.ownerDocument),null!==r&&!t&&Or.has(e)){if(\"scroll\"!==e)return;o|=2,s=r}var i=so(s),a=e+\"__\"+(t?\"capture\":\"bubble\");i.has(a)||(t&&(o|=4),Tr(s,e,o,t),i.add(a))}function Tr(e,t,n,r){var o=It.get(t);switch(void 0===o?2:o){case 0:o=Gt;break;case 1:o=Zt;break;default:o=Yt}n=o.bind(null,t,n,e),o=void 0,!$e||\"touchstart\"!==t&&\"touchmove\"!==t&&\"wheel\"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,o){var s=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var a=r.stateNode.containerInfo;if(a===o||8===a.nodeType&&a.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==a;){if(null===(i=to(a)))return;if(5===(l=i.tag)||6===l){r=s=i;continue e}a=a.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{return Me(e,t,n)}finally{Fe=!1,Le()}}((function(){var r=s,o=je(n),i=[];e:{var a=Nt.get(e);if(void 0!==a){var l=hn,c=e;switch(e){case\"keypress\":if(0===rn(n))break e;case\"keydown\":case\"keyup\":l=Cn;break;case\"focusin\":c=\"focus\",l=vn;break;case\"focusout\":c=\"blur\",l=vn;break;case\"beforeblur\":case\"afterblur\":l=vn;break;case\"click\":if(2===n.button)break e;case\"auxclick\":case\"dblclick\":case\"mousedown\":case\"mousemove\":case\"mouseup\":case\"mouseout\":case\"mouseover\":case\"contextmenu\":l=gn;break;case\"drag\":case\"dragend\":case\"dragenter\":case\"dragexit\":case\"dragleave\":case\"dragover\":case\"dragstart\":case\"drop\":l=yn;break;case\"touchcancel\":case\"touchend\":case\"touchmove\":case\"touchstart\":l=Nn;break;case kt:case At:case Ct:l=bn;break;case Pt:l=In;break;case\"scroll\":l=dn;break;case\"wheel\":l=Rn;break;case\"copy\":case\"cut\":case\"paste\":l=En;break;case\"gotpointercapture\":case\"lostpointercapture\":case\"pointercancel\":case\"pointerdown\":case\"pointermove\":case\"pointerout\":case\"pointerover\":case\"pointerup\":l=Pn}var u=0!=(4&t),p=!u&&\"scroll\"===e,h=u?null!==a?a+\"Capture\":null:a;u=[];for(var f,d=r;null!==d;){var m=(f=d).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==h&&(null!=(m=Be(d,h))&&u.push(Mr(d,m,f)))),p)break;d=d.return}0<u.length&&(a=new l(a,c,null,n,o),i.push({event:a,listeners:u}))}}if(0==(7&t)){if(l=\"mouseout\"===e||\"pointerout\"===e,(!(a=\"mouseover\"===e||\"pointerover\"===e)||0!=(16&t)||!(c=n.relatedTarget||n.fromElement)||!to(c)&&!c[Qr])&&(l||a)&&(a=o.window===o?o:(a=o.ownerDocument)?a.defaultView||a.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?to(c):null)&&(c!==(p=Ge(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=gn,m=\"onMouseLeave\",h=\"onMouseEnter\",d=\"mouse\",\"pointerout\"!==e&&\"pointerover\"!==e||(u=Pn,m=\"onPointerLeave\",h=\"onPointerEnter\",d=\"pointer\"),p=null==l?a:ro(l),f=null==c?a:ro(c),(a=new u(m,d+\"leave\",l,n,o)).target=p,a.relatedTarget=f,m=null,to(o)===r&&((u=new u(h,d+\"enter\",c,n,o)).target=f,u.relatedTarget=p,m=u),p=m,l&&c)e:{for(h=c,d=0,f=u=l;f;f=Fr(f))d++;for(f=0,m=h;m;m=Fr(m))f++;for(;0<d-f;)u=Fr(u),d--;for(;0<f-d;)h=Fr(h),f--;for(;d--;){if(u===h||null!==h&&u===h.alternate)break e;u=Fr(u),h=Fr(h)}u=null}else u=null;null!==l&&Lr(i,a,l,u,!1),null!==c&&null!==p&&Lr(i,p,c,u,!0)}if(\"select\"===(l=(a=r?ro(r):window).nodeName&&a.nodeName.toLowerCase())||\"input\"===l&&\"file\"===a.type)var g=Xn;else if(Jn(a))if(Qn)g=lr;else{g=ir;var y=sr}else(l=a.nodeName)&&\"input\"===l.toLowerCase()&&(\"checkbox\"===a.type||\"radio\"===a.type)&&(g=ar);switch(g&&(g=g(e,r))?Kn(i,g,n,o):(y&&y(e,a,r),\"focusout\"===e&&(y=a._wrapperState)&&y.controlled&&\"number\"===a.type&&oe(a,\"number\",a.value)),y=r?ro(r):window,e){case\"focusin\":(Jn(y)||\"true\"===y.contentEditable)&&(vr=y,br=r,wr=null);break;case\"focusout\":wr=br=vr=null;break;case\"mousedown\":Er=!0;break;case\"contextmenu\":case\"mouseup\":case\"dragend\":Er=!1,xr(i,n,o);break;case\"selectionchange\":if(yr)break;case\"keydown\":case\"keyup\":xr(i,n,o)}var v;if(Dn)e:{switch(e){case\"compositionstart\":var b=\"onCompositionStart\";break e;case\"compositionend\":b=\"onCompositionEnd\";break e;case\"compositionupdate\":b=\"onCompositionUpdate\";break e}b=void 0}else Vn?Un(e,n)&&(b=\"onCompositionEnd\"):\"keydown\"===e&&229===n.keyCode&&(b=\"onCompositionStart\");b&&(Bn&&\"ko\"!==n.locale&&(Vn||\"onCompositionStart\"!==b?\"onCompositionEnd\"===b&&Vn&&(v=nn()):(en=\"value\"in(Qt=o)?Qt.value:Qt.textContent,Vn=!0)),0<(y=Dr(r,b)).length&&(b=new xn(b,e,null,n,o),i.push({event:b,listeners:y}),v?b.data=v:null!==(v=zn(n))&&(b.data=v))),(v=Ln?function(e,t){switch(e){case\"compositionend\":return zn(t);case\"keypress\":return 32!==t.which?null:(qn=!0,$n);case\"textInput\":return(e=t.data)===$n&&qn?null:e;default:return null}}(e,n):function(e,t){if(Vn)return\"compositionend\"===e||!Dn&&Un(e,t)?(e=nn(),tn=en=Qt=null,Vn=!1,e):null;switch(e){case\"paste\":default:return null;case\"keypress\":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case\"compositionend\":return Bn&&\"ko\"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,\"onBeforeInput\")).length&&(o=new xn(\"onBeforeInput\",\"beforeinput\",null,n,o),i.push({event:o,listeners:r}),o.data=v))}Ar(i,t)}))}function Mr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+\"Capture\",r=[];null!==e;){var o=e,s=o.stateNode;5===o.tag&&null!==s&&(o=s,null!=(s=Be(e,n))&&r.unshift(Mr(e,s,o)),null!=(s=Be(e,t))&&r.push(Mr(e,s,o))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Lr(e,t,n,r,o){for(var s=t._reactName,i=[];null!==n&&n!==r;){var a=n,l=a.alternate,c=a.stateNode;if(null!==l&&l===r)break;5===a.tag&&null!==c&&(a=c,o?null!=(l=Be(n,s))&&i.unshift(Mr(n,l,a)):o||null!=(l=Be(n,s))&&i.push(Mr(n,l,a))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var $r=null,qr=null;function Ur(e,t){switch(e){case\"button\":case\"input\":case\"select\":case\"textarea\":return!!t.autoFocus}return!1}function zr(e,t){return\"textarea\"===e||\"option\"===e||\"noscript\"===e||\"string\"==typeof t.children||\"number\"==typeof t.children||\"object\"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Vr=\"function\"==typeof setTimeout?setTimeout:void 0,Wr=\"function\"==typeof clearTimeout?clearTimeout:void 0;function Jr(e){1===e.nodeType?e.textContent=\"\":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=\"\"))}function Kr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Hr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if(\"$\"===n||\"$!\"===n||\"$?\"===n){if(0===t)return e;t--}else\"/$\"===n&&t++}e=e.previousSibling}return null}var Gr=0;var Zr=Math.random().toString(36).slice(2),Yr=\"__reactFiber$\"+Zr,Xr=\"__reactProps$\"+Zr,Qr=\"__reactContainer$\"+Zr,eo=\"__reactEvents$\"+Zr;function to(e){var t=e[Yr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Qr]||n[Yr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Hr(e);null!==e;){if(n=e[Yr])return n;e=Hr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Yr]||e[Qr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function so(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],ao=-1;function lo(e){return{current:e}}function co(e){0>ao||(e.current=io[ao],io[ao]=null,ao--)}function uo(e,t){ao++,io[ao]=e.current,e.current=t}var po={},ho=lo(po),fo=lo(!1),mo=po;function go(e,t){var n=e.type.contextTypes;if(!n)return po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,s={};for(o in n)s[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=s),s}function yo(e){return null!=(e=e.childContextTypes)}function vo(){co(fo),co(ho)}function bo(e,t,n){if(ho.current!==po)throw Error(i(168));uo(ho,t),uo(fo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,\"function\"!=typeof r.getChildContext)return n;for(var s in r=r.getChildContext())if(!(s in e))throw Error(i(108,K(t)||\"Unknown\",s));return o({},n,r)}function Eo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||po,mo=ho.current,uo(ho,e),uo(fo,fo.current),!0}function xo(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,mo),r.__reactInternalMemoizedMergedChildContext=e,co(fo),co(ho),uo(ho,e)):co(fo),uo(fo,n)}var So=null,_o=null,jo=s.unstable_runWithPriority,Oo=s.unstable_scheduleCallback,ko=s.unstable_cancelCallback,Ao=s.unstable_shouldYield,Co=s.unstable_requestPaint,Po=s.unstable_now,No=s.unstable_getCurrentPriorityLevel,Io=s.unstable_ImmediatePriority,To=s.unstable_UserBlockingPriority,Ro=s.unstable_NormalPriority,Mo=s.unstable_LowPriority,Do=s.unstable_IdlePriority,Fo={},Lo=void 0!==Co?Co:function(){},Bo=null,$o=null,qo=!1,Uo=Po(),zo=1e4>Uo?Po:function(){return Po()-Uo};function Vo(){switch(No()){case Io:return 99;case To:return 98;case Ro:return 97;case Mo:return 96;case Do:return 95;default:throw Error(i(332))}}function Wo(e){switch(e){case 99:return Io;case 98:return To;case 97:return Ro;case 96:return Mo;case 95:return Do;default:throw Error(i(332))}}function Jo(e,t){return e=Wo(e),jo(e,t)}function Ko(e,t,n){return e=Wo(e),Oo(e,t,n)}function Ho(){if(null!==$o){var e=$o;$o=null,ko(e)}Go()}function Go(){if(!qo&&null!==Bo){qo=!0;var e=0;try{var t=Bo;Jo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(t){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(Io,Ho),t}finally{qo=!1}}}var Zo=E.ReactCurrentBatchConfig;function Yo(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=lo(null),Qo=null,es=null,ts=null;function ns(){ts=es=Qo=null}function rs(e){var t=Xo.current;co(Xo),e.type._context._currentValue=t}function os(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ss(e,t){Qo=e,ts=es=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function is(e,t){if(ts!==e&&!1!==t&&0!==t)if(\"number\"==typeof t&&1073741823!==t||(ts=e,t=1073741823),t={context:e,observedBits:t,next:null},null===es){if(null===Qo)throw Error(i(308));es=t,Qo.dependencies={lanes:0,firstContext:t,responders:null}}else es=es.next=t;return e._currentValue}var as=!1;function ls(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function cs(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function us(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ps(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function hs(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,s=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===s?o=s=i:s=s.next=i,n=n.next}while(null!==n);null===s?o=s=t:s=s.next=t}else o=s=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:s,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fs(e,t,n,r){var s=e.updateQueue;as=!1;var i=s.firstBaseUpdate,a=s.lastBaseUpdate,l=s.shared.pending;if(null!==l){s.shared.pending=null;var c=l,u=c.next;c.next=null,null===a?i=u:a.next=u,a=c;var p=e.alternate;if(null!==p){var h=(p=p.updateQueue).lastBaseUpdate;h!==a&&(null===h?p.firstBaseUpdate=u:h.next=u,p.lastBaseUpdate=c)}}if(null!==i){for(h=s.baseState,a=0,p=u=c=null;;){l=i.lane;var f=i.eventTime;if((r&l)===l){null!==p&&(p=p.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var d=e,m=i;switch(l=t,f=n,m.tag){case 1:if(\"function\"==typeof(d=m.payload)){h=d.call(f,h,l);break e}h=d;break e;case 3:d.flags=-4097&d.flags|64;case 0:if(null==(l=\"function\"==typeof(d=m.payload)?d.call(f,h,l):d))break e;h=o({},h,l);break e;case 2:as=!0}}null!==i.callback&&(e.flags|=32,null===(l=s.effects)?s.effects=[i]:l.push(i))}else f={eventTime:f,lane:l,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===p?(u=p=f,c=h):p=p.next=f,a|=l;if(null===(i=i.next)){if(null===(l=s.shared.pending))break;i=l.next,l.next=null,s.lastBaseUpdate=l,s.shared.pending=null}}null===p&&(c=h),s.baseState=c,s.firstBaseUpdate=u,s.lastBaseUpdate=p,qa|=a,e.lanes=a,e.memoizedState=h}}function ds(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,\"function\"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ms=(new r.Component).refs;function gs(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ys={isMounted:function(e){return!!(e=e._reactInternals)&&Ge(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=hl(),o=fl(e),s=us(r,o);s.payload=t,null!=n&&(s.callback=n),ps(e,s),dl(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=hl(),o=fl(e),s=us(r,o);s.tag=1,s.payload=t,null!=n&&(s.callback=n),ps(e,s),dl(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=hl(),r=fl(e),o=us(n,r);o.tag=2,null!=t&&(o.callback=t),ps(e,o),dl(e,r,n)}};function vs(e,t,n,r,o,s,i){return\"function\"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,s,i):!t.prototype||!t.prototype.isPureReactComponent||(!pr(n,r)||!pr(o,s))}function bs(e,t,n){var r=!1,o=po,s=t.contextType;return\"object\"==typeof s&&null!==s?s=is(s):(o=yo(t)?mo:ho.current,s=(r=null!=(r=t.contextTypes))?go(e,o):po),t=new t(n,s),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ys,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=s),t}function ws(e,t,n,r){e=t.state,\"function\"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),\"function\"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ys.enqueueReplaceState(t,t.state,null)}function Es(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ms,ls(e);var s=t.contextType;\"object\"==typeof s&&null!==s?o.context=is(s):(s=yo(t)?mo:ho.current,o.context=go(e,s)),fs(e,n,o,r),o.state=e.memoizedState,\"function\"==typeof(s=t.getDerivedStateFromProps)&&(gs(e,t,s,n),o.state=e.memoizedState),\"function\"==typeof t.getDerivedStateFromProps||\"function\"==typeof o.getSnapshotBeforeUpdate||\"function\"!=typeof o.UNSAFE_componentWillMount&&\"function\"!=typeof o.componentWillMount||(t=o.state,\"function\"==typeof o.componentWillMount&&o.componentWillMount(),\"function\"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ys.enqueueReplaceState(o,o.state,null),fs(e,n,o,r),o.state=e.memoizedState),\"function\"==typeof o.componentDidMount&&(e.flags|=4)}var xs=Array.isArray;function Ss(e,t,n){if(null!==(e=n.ref)&&\"function\"!=typeof e&&\"object\"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=\"\"+e;return null!==t&&null!==t.ref&&\"function\"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ms&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if(\"string\"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _s(e,t){if(\"textarea\"!==e.type)throw Error(i(31,\"[object Object]\"===Object.prototype.toString.call(t)?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":t))}function js(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Jl(e,t)).index=0,e.sibling=null,e}function s(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function a(t){return e&&null===t.alternate&&(t.flags=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Zl(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Ss(e,t,n),r.return=e,r):((r=Kl(n.type,n.key,n.props,null,e.mode,r)).ref=Ss(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yl(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function p(e,t,n,r,s){return null===t||7!==t.tag?((t=Hl(n,e.mode,r,s)).return=e,t):((t=o(t,n)).return=e,t)}function h(e,t,n){if(\"string\"==typeof t||\"number\"==typeof t)return(t=Zl(\"\"+t,e.mode,n)).return=e,t;if(\"object\"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=Kl(t.type,t.key,t.props,null,e.mode,n)).ref=Ss(e,null,t),n.return=e,n;case S:return(t=Yl(t,e.mode,n)).return=e,t}if(xs(t)||U(t))return(t=Hl(t,e.mode,n,null)).return=e,t;_s(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if(\"string\"==typeof n||\"number\"==typeof n)return null!==o?null:l(e,t,\"\"+n,r);if(\"object\"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===o?n.type===_?p(e,t,n.props.children,r,o):c(e,t,n,r):null;case S:return n.key===o?u(e,t,n,r):null}if(xs(n)||U(n))return null!==o?null:p(e,t,n,r,null);_s(e,n)}return null}function d(e,t,n,r,o){if(\"string\"==typeof r||\"number\"==typeof r)return l(t,e=e.get(n)||null,\"\"+r,o);if(\"object\"==typeof r&&null!==r){switch(r.$$typeof){case x:return e=e.get(null===r.key?n:r.key)||null,r.type===_?p(t,e,r.props.children,o,r.key):c(t,e,r,o);case S:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(xs(r)||U(r))return p(t,e=e.get(n)||null,r,o,null);_s(t,r)}return null}function m(o,i,a,l){for(var c=null,u=null,p=i,m=i=0,g=null;null!==p&&m<a.length;m++){p.index>m?(g=p,p=null):g=p.sibling;var y=f(o,p,a[m],l);if(null===y){null===p&&(p=g);break}e&&p&&null===y.alternate&&t(o,p),i=s(y,i,m),null===u?c=y:u.sibling=y,u=y,p=g}if(m===a.length)return n(o,p),c;if(null===p){for(;m<a.length;m++)null!==(p=h(o,a[m],l))&&(i=s(p,i,m),null===u?c=p:u.sibling=p,u=p);return c}for(p=r(o,p);m<a.length;m++)null!==(g=d(p,o,m,a[m],l))&&(e&&null!==g.alternate&&p.delete(null===g.key?m:g.key),i=s(g,i,m),null===u?c=g:u.sibling=g,u=g);return e&&p.forEach((function(e){return t(o,e)})),c}function g(o,a,l,c){var u=U(l);if(\"function\"!=typeof u)throw Error(i(150));if(null==(l=u.call(l)))throw Error(i(151));for(var p=u=null,m=a,g=a=0,y=null,v=l.next();null!==m&&!v.done;g++,v=l.next()){m.index>g?(y=m,m=null):y=m.sibling;var b=f(o,m,v.value,c);if(null===b){null===m&&(m=y);break}e&&m&&null===b.alternate&&t(o,m),a=s(b,a,g),null===p?u=b:p.sibling=b,p=b,m=y}if(v.done)return n(o,m),u;if(null===m){for(;!v.done;g++,v=l.next())null!==(v=h(o,v.value,c))&&(a=s(v,a,g),null===p?u=v:p.sibling=v,p=v);return u}for(m=r(o,m);!v.done;g++,v=l.next())null!==(v=d(m,o,g,v.value,c))&&(e&&null!==v.alternate&&m.delete(null===v.key?g:v.key),a=s(v,a,g),null===p?u=v:p.sibling=v,p=v);return e&&m.forEach((function(e){return t(o,e)})),u}return function(e,r,s,l){var c=\"object\"==typeof s&&null!==s&&s.type===_&&null===s.key;c&&(s=s.props.children);var u=\"object\"==typeof s&&null!==s;if(u)switch(s.$$typeof){case x:e:{for(u=s.key,c=r;null!==c;){if(c.key===u){if(7===c.tag){if(s.type===_){n(e,c.sibling),(r=o(c,s.props.children)).return=e,e=r;break e}}else if(c.elementType===s.type){n(e,c.sibling),(r=o(c,s.props)).ref=Ss(e,c,s),r.return=e,e=r;break e}n(e,c);break}t(e,c),c=c.sibling}s.type===_?((r=Hl(s.props.children,e.mode,l,s.key)).return=e,e=r):((l=Kl(s.type,s.key,s.props,null,e.mode,l)).ref=Ss(e,r,s),l.return=e,e=l)}return a(e);case S:e:{for(c=s.key;null!==r;){if(r.key===c){if(4===r.tag&&r.stateNode.containerInfo===s.containerInfo&&r.stateNode.implementation===s.implementation){n(e,r.sibling),(r=o(r,s.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Yl(s,e.mode,l)).return=e,e=r}return a(e)}if(\"string\"==typeof s||\"number\"==typeof s)return s=\"\"+s,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,s)).return=e,e=r):(n(e,r),(r=Zl(s,e.mode,l)).return=e,e=r),a(e);if(xs(s))return m(e,r,s,l);if(U(s))return g(e,r,s,l);if(u&&_s(e,s),void 0===s&&!c)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,K(e.type)||\"Component\"))}return n(e,r)}}var Os=js(!0),ks=js(!1),As={},Cs=lo(As),Ps=lo(As),Ns=lo(As);function Is(e){if(e===As)throw Error(i(174));return e}function Ts(e,t){switch(uo(Ns,t),uo(Ps,e),uo(Cs,As),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:fe(null,\"\");break;default:t=fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}co(Cs),uo(Cs,t)}function Rs(){co(Cs),co(Ps),co(Ns)}function Ms(e){Is(Ns.current);var t=Is(Cs.current),n=fe(t,e.type);t!==n&&(uo(Ps,e),uo(Cs,n))}function Ds(e){Ps.current===e&&(co(Cs),co(Ps))}var Fs=lo(0);function Ls(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||\"$?\"===n.data||\"$!\"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Bs=null,$s=null,qs=!1;function Us(e,t){var n=Vl(5,null,null,0);n.elementType=\"DELETED\",n.type=\"DELETED\",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function zs(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=\"\"===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Vs(e){if(qs){var t=$s;if(t){var n=t;if(!zs(e,t)){if(!(t=Kr(n.nextSibling))||!zs(e,t))return e.flags=-1025&e.flags|2,qs=!1,void(Bs=e);Us(Bs,n)}Bs=e,$s=Kr(t.firstChild)}else e.flags=-1025&e.flags|2,qs=!1,Bs=e}}function Ws(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Bs=e}function Js(e){if(e!==Bs)return!1;if(!qs)return Ws(e),qs=!0,!1;var t=e.type;if(5!==e.tag||\"head\"!==t&&\"body\"!==t&&!zr(t,e.memoizedProps))for(t=$s;t;)Us(e,t),t=Kr(t.nextSibling);if(Ws(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if(\"/$\"===n){if(0===t){$s=Kr(e.nextSibling);break e}t--}else\"$\"!==n&&\"$!\"!==n&&\"$?\"!==n||t++}e=e.nextSibling}$s=null}}else $s=Bs?Kr(e.stateNode.nextSibling):null;return!0}function Ks(){$s=Bs=null,qs=!1}var Hs=[];function Gs(){for(var e=0;e<Hs.length;e++)Hs[e]._workInProgressVersionPrimary=null;Hs.length=0}var Zs=E.ReactCurrentDispatcher,Ys=E.ReactCurrentBatchConfig,Xs=0,Qs=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function si(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,s){if(Xs=s,Qs=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Zs.current=null===e||null===e.memoizedState?Ii:Ti,e=n(r,o),ri){s=0;do{if(ri=!1,!(25>s))throw Error(i(301));s+=1,ti=ei=null,t.updateQueue=null,Zs.current=Ri,e=n(r,o)}while(ri)}if(Zs.current=Ni,t=null!==ei&&null!==ei.next,Xs=0,ti=ei=Qs=null,ni=!1,t)throw Error(i(300));return e}function ai(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Qs.memoizedState=ti=e:ti=ti.next=e,ti}function li(){if(null===ei){var e=Qs.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Qs.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Qs.memoizedState=ti=e:ti=ti.next=e}return ti}function ci(e,t){return\"function\"==typeof t?t(e):t}function ui(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,s=n.pending;if(null!==s){if(null!==o){var a=o.next;o.next=s.next,s.next=a}r.baseQueue=o=s,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var l=a=s=null,c=o;do{var u=c.lane;if((Xs&u)===u)null!==l&&(l=l.next={lane:0,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null}),r=c.eagerReducer===e?c.eagerState:e(r,c.action);else{var p={lane:u,action:c.action,eagerReducer:c.eagerReducer,eagerState:c.eagerState,next:null};null===l?(a=l=p,s=r):l=l.next=p,Qs.lanes|=u,qa|=u}c=c.next}while(null!==c&&c!==o);null===l?s=r:l.next=a,cr(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=l,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function pi(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,s=t.memoizedState;if(null!==o){n.pending=null;var a=o=o.next;do{s=e(s,a.action),a=a.next}while(a!==o);cr(s,t.memoizedState)||(Di=!0),t.memoizedState=s,null===t.baseQueue&&(t.baseState=s),n.lastRenderedState=s}return[s,r]}function hi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xs&e)===e)&&(t._workInProgressVersionPrimary=r,Hs.push(t))),e)return n(t._source);throw Hs.push(t),Error(i(350))}function fi(e,t,n,r){var o=Ta;if(null===o)throw Error(i(349));var s=t._getVersion,a=s(t._source),l=Zs.current,c=l.useState((function(){return hi(o,t,n)})),u=c[1],p=c[0];c=ti;var h=e.memoizedState,f=h.refs,d=f.getSnapshot,m=h.source;h=h.subscribe;var g=Qs;return e.memoizedState={refs:f,source:t,subscribe:r},l.useEffect((function(){f.getSnapshot=n,f.setSnapshot=u;var e=s(t._source);if(!cr(a,e)){e=n(t._source),cr(p,e)||(u(e),e=fl(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var l=31-zt(i),c=1<<l;r[l]|=e,i&=~c}}}),[n,t,r]),l.useEffect((function(){return r(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var r=fl(g);o.mutableReadLanes|=r&o.pendingLanes}catch(e){n((function(){throw e}))}}))}),[t,r]),cr(d,n)&&cr(m,t)&&cr(h,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:p}).dispatch=u=Pi.bind(null,Qs,e),c.queue=e,c.baseQueue=null,p=hi(o,t,n),c.memoizedState=c.baseState=p),p}function di(e,t,n){return fi(li(),e,t,n)}function mi(e){var t=ai();return\"function\"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Pi.bind(null,Qs,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Qs.updateQueue)?(t={lastEffect:null},Qs.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function yi(e){return e={current:e},ai().memoizedState=e}function vi(){return li().memoizedState}function bi(e,t,n,r){var o=ai();Qs.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=li();r=void 0===r?null:r;var s=void 0;if(null!==ei){var i=ei.memoizedState;if(s=i.destroy,null!==r&&si(r,i.deps))return void gi(t,n,s,r)}Qs.flags|=e,o.memoizedState=gi(1|t,n,s,r)}function Ei(e,t){return bi(516,4,e,t)}function xi(e,t){return wi(516,4,e,t)}function Si(e,t){return wi(4,2,e,t)}function _i(e,t){return\"function\"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function ji(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function ki(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ai(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ci(e,t){var n=Vo();Jo(98>n?98:n,(function(){e(!0)})),Jo(97<n?97:n,(function(){var n=Ys.transition;Ys.transition=1;try{e(!1),t()}finally{Ys.transition=n}}))}function Pi(e,t,n){var r=hl(),o=fl(e),s={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?s.next=s:(s.next=i.next,i.next=s),t.pending=s,i=e.alternate,e===Qs||null!==i&&i===Qs)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var a=t.lastRenderedState,l=i(a,n);if(s.eagerReducer=i,s.eagerState=l,cr(l,a))return}catch(e){}dl(e,o,r)}}var Ni={readContext:is,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ii={readContext:is,useCallback:function(e,t){return ai().memoizedState=[e,void 0===t?null:t],e},useContext:is,useEffect:Ei,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,bi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return bi(4,2,e,t)},useMemo:function(e,t){var n=ai();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=ai();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Pi.bind(null,Qs,e),[r.memoizedState,e]},useRef:yi,useState:mi,useDebugValue:Oi,useDeferredValue:function(e){var t=mi(e),n=t[0],r=t[1];return Ei((function(){var t=Ys.transition;Ys.transition=1;try{r(e)}finally{Ys.transition=t}}),[e]),n},useTransition:function(){var e=mi(!1),t=e[0];return yi(e=Ci.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=ai();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fi(r,e,t,n)},useOpaqueIdentifier:function(){if(qs){var e=!1,t=function(e){return{$$typeof:M,toString:e,valueOf:e}}((function(){throw e||(e=!0,n(\"r:\"+(Gr++).toString(36))),Error(i(355))})),n=mi(t)[1];return 0==(2&Qs.mode)&&(Qs.flags|=516,gi(5,(function(){n(\"r:\"+(Gr++).toString(36))}),void 0,null)),t}return mi(t=\"r:\"+(Gr++).toString(36)),t},unstable_isNewReconciler:!1},Ti={readContext:is,useCallback:ki,useContext:is,useEffect:xi,useImperativeHandle:ji,useLayoutEffect:Si,useMemo:Ai,useReducer:ui,useRef:vi,useState:function(){return ui(ci)},useDebugValue:Oi,useDeferredValue:function(e){var t=ui(ci),n=t[0],r=t[1];return xi((function(){var t=Ys.transition;Ys.transition=1;try{r(e)}finally{Ys.transition=t}}),[e]),n},useTransition:function(){var e=ui(ci)[0];return[vi().current,e]},useMutableSource:di,useOpaqueIdentifier:function(){return ui(ci)[0]},unstable_isNewReconciler:!1},Ri={readContext:is,useCallback:ki,useContext:is,useEffect:xi,useImperativeHandle:ji,useLayoutEffect:Si,useMemo:Ai,useReducer:pi,useRef:vi,useState:function(){return pi(ci)},useDebugValue:Oi,useDeferredValue:function(e){var t=pi(ci),n=t[0],r=t[1];return xi((function(){var t=Ys.transition;Ys.transition=1;try{r(e)}finally{Ys.transition=t}}),[e]),n},useTransition:function(){var e=pi(ci)[0];return[vi().current,e]},useMutableSource:di,useOpaqueIdentifier:function(){return pi(ci)[0]},unstable_isNewReconciler:!1},Mi=E.ReactCurrentOwner,Di=!1;function Fi(e,t,n,r){t.child=null===e?ks(t,null,n,r):Os(t,e.child,n,r)}function Li(e,t,n,r,o){n=n.render;var s=t.ref;return ss(t,o),r=ii(e,t,n,r,s,o),null===e||Di?(t.flags|=1,Fi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,sa(e,t,o))}function Bi(e,t,n,r,o,s){if(null===e){var i=n.type;return\"function\"!=typeof i||Wl(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Kl(n.type,null,r,t,t.mode,s)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,$i(e,t,i,r,o,s))}return i=e.child,0==(o&s)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:pr)(o,r)&&e.ref===t.ref)?sa(e,t,s):(t.flags|=1,(e=Jl(i,r)).ref=t.ref,e.return=t,t.child=e)}function $i(e,t,n,r,o,s){if(null!==e&&pr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(s&o))return t.lanes=e.lanes,sa(e,t,s);0!=(16384&e.flags)&&(Di=!0)}return zi(e,t,n,r,s)}function qi(e,t,n){var r=t.pendingProps,o=r.children,s=null!==e?e.memoizedState:null;if(\"hidden\"===r.mode||\"unstable-defer-without-hiding\"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},xl(t,n);else{if(0==(1073741824&n))return e=null!==s?s.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},xl(t,e),null;t.memoizedState={baseLanes:0},xl(t,null!==s?s.baseLanes:n)}else null!==s?(r=s.baseLanes|n,t.memoizedState=null):r=n,xl(t,r);return Fi(e,t,o,n),t.child}function Ui(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function zi(e,t,n,r,o){var s=yo(n)?mo:ho.current;return s=go(t,s),ss(t,o),n=ii(e,t,n,r,s,o),null===e||Di?(t.flags|=1,Fi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,sa(e,t,o))}function Vi(e,t,n,r,o){if(yo(n)){var s=!0;Eo(t)}else s=!1;if(ss(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),bs(t,n,r),Es(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,a=t.memoizedProps;i.props=a;var l=i.context,c=n.contextType;\"object\"==typeof c&&null!==c?c=is(c):c=go(t,c=yo(n)?mo:ho.current);var u=n.getDerivedStateFromProps,p=\"function\"==typeof u||\"function\"==typeof i.getSnapshotBeforeUpdate;p||\"function\"!=typeof i.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof i.componentWillReceiveProps||(a!==r||l!==c)&&ws(t,i,r,c),as=!1;var h=t.memoizedState;i.state=h,fs(t,r,i,o),l=t.memoizedState,a!==r||h!==l||fo.current||as?(\"function\"==typeof u&&(gs(t,n,u,r),l=t.memoizedState),(a=as||vs(t,n,a,r,h,l,c))?(p||\"function\"!=typeof i.UNSAFE_componentWillMount&&\"function\"!=typeof i.componentWillMount||(\"function\"==typeof i.componentWillMount&&i.componentWillMount(),\"function\"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),\"function\"==typeof i.componentDidMount&&(t.flags|=4)):(\"function\"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=a):(\"function\"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,cs(e,t),a=t.memoizedProps,c=t.type===t.elementType?a:Yo(t.type,a),i.props=c,p=t.pendingProps,h=i.context,\"object\"==typeof(l=n.contextType)&&null!==l?l=is(l):l=go(t,l=yo(n)?mo:ho.current);var f=n.getDerivedStateFromProps;(u=\"function\"==typeof f||\"function\"==typeof i.getSnapshotBeforeUpdate)||\"function\"!=typeof i.UNSAFE_componentWillReceiveProps&&\"function\"!=typeof i.componentWillReceiveProps||(a!==p||h!==l)&&ws(t,i,r,l),as=!1,h=t.memoizedState,i.state=h,fs(t,r,i,o);var d=t.memoizedState;a!==p||h!==d||fo.current||as?(\"function\"==typeof f&&(gs(t,n,f,r),d=t.memoizedState),(c=as||vs(t,n,c,r,h,d,l))?(u||\"function\"!=typeof i.UNSAFE_componentWillUpdate&&\"function\"!=typeof i.componentWillUpdate||(\"function\"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,d,l),\"function\"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,d,l)),\"function\"==typeof i.componentDidUpdate&&(t.flags|=4),\"function\"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):(\"function\"!=typeof i.componentDidUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),\"function\"!=typeof i.getSnapshotBeforeUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=d),i.props=r,i.state=d,i.context=l,r=c):(\"function\"!=typeof i.componentDidUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=4),\"function\"!=typeof i.getSnapshotBeforeUpdate||a===e.memoizedProps&&h===e.memoizedState||(t.flags|=256),r=!1)}return Wi(e,t,n,r,s,o)}function Wi(e,t,n,r,o,s){Ui(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&xo(t,n,!1),sa(e,t,s);r=t.stateNode,Mi.current=t;var a=i&&\"function\"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Os(t,e.child,null,s),t.child=Os(t,null,a,s)):Fi(e,t,a,s),t.memoizedState=r.state,o&&xo(t,n,!0),t.child}function Ji(e){var t=e.stateNode;t.pendingContext?bo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&bo(0,t.context,!1),Ts(e,t.containerInfo)}var Ki,Hi,Gi,Zi,Yi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,s=Fs.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&s)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(s|=1),uo(Fs,1&s),null===e?(void 0!==o.fallback&&Vs(t),e=o.children,s=o.fallback,i?(e=Qi(t,e,s,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Yi,e):\"number\"==typeof o.unstable_expectedLoadTime?(e=Qi(t,e,s,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Yi,t.lanes=33554432,e):((n=Gl({mode:\"visible\",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=ta(e,t,o.children,o.fallback,n),i=t.child,s=e.child.memoizedState,i.memoizedState=null===s?{baseLanes:n}:{baseLanes:s.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Yi,o):(n=ea(e,t,o.children,n),t.memoizedState=null,n))}function Qi(e,t,n,r){var o=e.mode,s=e.child;return t={mode:\"hidden\",children:t},0==(2&o)&&null!==s?(s.childLanes=0,s.pendingProps=t):s=Gl(t,o,0,null),n=Hl(n,o,r,null),s.return=e,n.return=e,s.sibling=n,e.child=s,n}function ea(e,t,n,r){var o=e.child;return e=o.sibling,n=Jl(o,{mode:\"visible\",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ta(e,t,n,r,o){var s=t.mode,i=e.child;e=i.sibling;var a={mode:\"hidden\",children:n};return 0==(2&s)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=a,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Jl(i,a),null!==e?r=Jl(e,r):(r=Hl(r,s,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function na(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),os(e.return,t)}function ra(e,t,n,r,o,s){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:s}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=s)}function oa(e,t,n){var r=t.pendingProps,o=r.revealOrder,s=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fs.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&na(e,n);else if(19===e.tag)na(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(uo(Fs,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case\"forwards\":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Ls(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),ra(t,!1,o,n,s,t.lastEffect);break;case\"backwards\":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Ls(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}ra(t,!0,n,null,s,t.lastEffect);break;case\"together\":ra(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function sa(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),qa|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Jl(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Jl(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function ia(e,t){if(!qs)switch(e.tailMode){case\"hidden\":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case\"collapsed\":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function aa(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return yo(t.type)&&vo(),null;case 3:return Rs(),co(fo),co(ho),Gs(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Js(t)?t.flags|=4:r.hydrate||(t.flags|=256)),Hi(t),null;case 5:Ds(t);var s=Is(Ns.current);if(n=t.type,null!==e&&null!=t.stateNode)Gi(e,t,n,r,s),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Is(Cs.current),Js(t)){r=t.stateNode,n=t.type;var a=t.memoizedProps;switch(r[Yr]=t,r[Xr]=a,n){case\"dialog\":Cr(\"cancel\",r),Cr(\"close\",r);break;case\"iframe\":case\"object\":case\"embed\":Cr(\"load\",r);break;case\"video\":case\"audio\":for(e=0;e<jr.length;e++)Cr(jr[e],r);break;case\"source\":Cr(\"error\",r);break;case\"img\":case\"image\":case\"link\":Cr(\"error\",r),Cr(\"load\",r);break;case\"details\":Cr(\"toggle\",r);break;case\"input\":ee(r,a),Cr(\"invalid\",r);break;case\"select\":r._wrapperState={wasMultiple:!!a.multiple},Cr(\"invalid\",r);break;case\"textarea\":le(r,a),Cr(\"invalid\",r)}for(var c in Se(n,a),e=null,a)a.hasOwnProperty(c)&&(s=a[c],\"children\"===c?\"string\"==typeof s?r.textContent!==s&&(e=[\"children\",s]):\"number\"==typeof s&&r.textContent!==\"\"+s&&(e=[\"children\",\"\"+s]):l.hasOwnProperty(c)&&null!=s&&\"onScroll\"===c&&Cr(\"scroll\",r));switch(n){case\"input\":Z(r),re(r,a,!0);break;case\"textarea\":Z(r),ue(r);break;case\"select\":case\"option\":break;default:\"function\"==typeof a.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(c=9===s.nodeType?s:s.ownerDocument,e===pe.html&&(e=he(n)),e===pe.html?\"script\"===n?((e=c.createElement(\"div\")).innerHTML=\"<script><\\/script>\",e=e.removeChild(e.firstChild)):\"string\"==typeof r.is?e=c.createElement(n,{is:r.is}):(e=c.createElement(n),\"select\"===n&&(c=e,r.multiple?c.multiple=!0:r.size&&(c.size=r.size))):e=c.createElementNS(e,n),e[Yr]=t,e[Xr]=r,Ki(e,t,!1,!1),t.stateNode=e,c=_e(n,r),n){case\"dialog\":Cr(\"cancel\",e),Cr(\"close\",e),s=r;break;case\"iframe\":case\"object\":case\"embed\":Cr(\"load\",e),s=r;break;case\"video\":case\"audio\":for(s=0;s<jr.length;s++)Cr(jr[s],e);s=r;break;case\"source\":Cr(\"error\",e),s=r;break;case\"img\":case\"image\":case\"link\":Cr(\"error\",e),Cr(\"load\",e),s=r;break;case\"details\":Cr(\"toggle\",e),s=r;break;case\"input\":ee(e,r),s=Q(e,r),Cr(\"invalid\",e);break;case\"option\":s=se(e,r);break;case\"select\":e._wrapperState={wasMultiple:!!r.multiple},s=o({},r,{value:void 0}),Cr(\"invalid\",e);break;case\"textarea\":le(e,r),s=ae(e,r),Cr(\"invalid\",e);break;default:s=r}Se(n,s);var u=s;for(a in u)if(u.hasOwnProperty(a)){var p=u[a];\"style\"===a?Ee(e,p):\"dangerouslySetInnerHTML\"===a?null!=(p=p?p.__html:void 0)&&ge(e,p):\"children\"===a?\"string\"==typeof p?(\"textarea\"!==n||\"\"!==p)&&ye(e,p):\"number\"==typeof p&&ye(e,\"\"+p):\"suppressContentEditableWarning\"!==a&&\"suppressHydrationWarning\"!==a&&\"autoFocus\"!==a&&(l.hasOwnProperty(a)?null!=p&&\"onScroll\"===a&&Cr(\"scroll\",e):null!=p&&w(e,a,p,c))}switch(n){case\"input\":Z(e),re(e,r,!1);break;case\"textarea\":Z(e),ue(e);break;case\"option\":null!=r.value&&e.setAttribute(\"value\",\"\"+H(r.value));break;case\"select\":e.multiple=!!r.multiple,null!=(a=r.value)?ie(e,!!r.multiple,a,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:\"function\"==typeof s.onClick&&(e.onclick=Br)}Ur(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Zi(e,t,e.memoizedProps,r);else{if(\"string\"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Is(Ns.current),Is(Cs.current),Js(t)?(r=t.stateNode,n=t.memoizedProps,r[Yr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Yr]=t,t.stateNode=r)}return null;case 13:return co(Fs),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Js(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fs.current)?0===La&&(La=3):(0!==La&&3!==La||(La=4),null===Ta||0==(134217727&qa)&&0==(134217727&Ua)||vl(Ta,Ma))),(r||n)&&(t.flags|=4),null);case 4:return Rs(),Hi(t),null===e&&Nr(t.stateNode.containerInfo),null;case 10:return rs(t),null;case 19:if(co(Fs),null===(r=t.memoizedState))return null;if(a=0!=(64&t.flags),null===(c=r.rendering))if(a)ia(r,!1);else{if(0!==La||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(c=Ls(e))){for(t.flags|=64,ia(r,!1),null!==(a=c.updateQueue)&&(t.updateQueue=a,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(a=n).flags&=2,a.nextEffect=null,a.firstEffect=null,a.lastEffect=null,null===(c=a.alternate)?(a.childLanes=0,a.lanes=e,a.child=null,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null,a.stateNode=null):(a.childLanes=c.childLanes,a.lanes=c.lanes,a.child=c.child,a.memoizedProps=c.memoizedProps,a.memoizedState=c.memoizedState,a.updateQueue=c.updateQueue,a.type=c.type,e=c.dependencies,a.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return uo(Fs,1&Fs.current|2),t.child}e=e.sibling}null!==r.tail&&zo()>Ja&&(t.flags|=64,a=!0,ia(r,!1),t.lanes=33554432)}else{if(!a)if(null!==(e=Ls(c))){if(t.flags|=64,a=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),ia(r,!0),null===r.tail&&\"hidden\"===r.tailMode&&!c.alternate&&!qs)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*zo()-r.renderingStartTime>Ja&&1073741824!==n&&(t.flags|=64,a=!0,ia(r,!1),t.lanes=33554432);r.isBackwards?(c.sibling=t.child,t.child=c):(null!==(n=r.last)?n.sibling=c:t.child=c,r.last=c)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=zo(),n.sibling=null,t=Fs.current,uo(Fs,a?1&t|2:1&t),n):null;case 23:case 24:return Sl(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&\"unstable-defer-without-hiding\"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function la(e){switch(e.tag){case 1:yo(e.type)&&vo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Rs(),co(fo),co(ho),Gs(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Ds(e),null;case 13:return co(Fs),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return co(Fs),null;case 4:return Rs(),null;case 10:return rs(e),null;case 23:case 24:return Sl(),null;default:return null}}function ca(e,t){try{var n=\"\",r=t;do{n+=J(r),r=r.return}while(r);var o=n}catch(e){o=\"\\nError generating stack: \"+e.message+\"\\n\"+e.stack}return{value:e,source:t,stack:o}}function ua(e,t){try{console.error(t.value)}catch(e){setTimeout((function(){throw e}))}}Ki=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Hi=function(){},Gi=function(e,t,n,r){var s=e.memoizedProps;if(s!==r){e=t.stateNode,Is(Cs.current);var i,a=null;switch(n){case\"input\":s=Q(e,s),r=Q(e,r),a=[];break;case\"option\":s=se(e,s),r=se(e,r),a=[];break;case\"select\":s=o({},s,{value:void 0}),r=o({},r,{value:void 0}),a=[];break;case\"textarea\":s=ae(e,s),r=ae(e,r),a=[];break;default:\"function\"!=typeof s.onClick&&\"function\"==typeof r.onClick&&(e.onclick=Br)}for(p in Se(n,r),n=null,s)if(!r.hasOwnProperty(p)&&s.hasOwnProperty(p)&&null!=s[p])if(\"style\"===p){var c=s[p];for(i in c)c.hasOwnProperty(i)&&(n||(n={}),n[i]=\"\")}else\"dangerouslySetInnerHTML\"!==p&&\"children\"!==p&&\"suppressContentEditableWarning\"!==p&&\"suppressHydrationWarning\"!==p&&\"autoFocus\"!==p&&(l.hasOwnProperty(p)?a||(a=[]):(a=a||[]).push(p,null));for(p in r){var u=r[p];if(c=null!=s?s[p]:void 0,r.hasOwnProperty(p)&&u!==c&&(null!=u||null!=c))if(\"style\"===p)if(c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(n||(n={}),n[i]=\"\");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(n||(n={}),n[i]=u[i])}else n||(a||(a=[]),a.push(p,n)),n=u;else\"dangerouslySetInnerHTML\"===p?(u=u?u.__html:void 0,c=c?c.__html:void 0,null!=u&&c!==u&&(a=a||[]).push(p,u)):\"children\"===p?\"string\"!=typeof u&&\"number\"!=typeof u||(a=a||[]).push(p,\"\"+u):\"suppressContentEditableWarning\"!==p&&\"suppressHydrationWarning\"!==p&&(l.hasOwnProperty(p)?(null!=u&&\"onScroll\"===p&&Cr(\"scroll\",e),a||c===u||(a=[])):\"object\"==typeof u&&null!==u&&u.$$typeof===M?u.toString():(a=a||[]).push(p,u))}n&&(a=a||[]).push(\"style\",n);var p=a;(t.updateQueue=p)&&(t.flags|=4)}},Zi=function(e,t,n,r){n!==r&&(t.flags|=4)};var pa=\"function\"==typeof WeakMap?WeakMap:Map;function ha(e,t,n){(n=us(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Za||(Za=!0,Ya=r),ua(0,t)},n}function fa(e,t,n){(n=us(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if(\"function\"==typeof r){var o=t.value;n.payload=function(){return ua(0,t),r(o)}}var s=e.stateNode;return null!==s&&\"function\"==typeof s.componentDidCatch&&(n.callback=function(){\"function\"!=typeof r&&(null===Xa?Xa=new Set([this]):Xa.add(this),ua(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:\"\"})}),n}var da=\"function\"==typeof WeakSet?WeakSet:Set;function ma(e){var t=e.ref;if(null!==t)if(\"function\"==typeof t)try{t(null)}catch(t){$l(e,t)}else t.current=null}function ga(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Yo(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Jr(t.stateNode.containerInfo))}throw Error(i(163))}function ya(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Fl(n,e),Dl(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Yo(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ds(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ds(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Ur(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&Et(n)))))}throw Error(i(163))}function va(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)\"function\"==typeof(r=r.style).setProperty?r.setProperty(\"display\",\"none\",\"important\"):r.display=\"none\";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty(\"display\")?o.display:null,r.style.display=we(\"display\",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?\"\":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ba(e,t){if(_o&&\"function\"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(So,t)}catch(e){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Fl(t,n);else{r=t;try{o()}catch(e){$l(r,e)}}n=n.next}while(n!==e)}break;case 1:if(ma(t),\"function\"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(e){$l(t,e)}break;case 5:ma(t);break;case 4:ja(e,t)}}function wa(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function Ea(e){return 5===e.tag||3===e.tag||4===e.tag}function xa(e){e:{for(var t=e.return;null!==t;){if(Ea(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ye(t,\"\"),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||Ea(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Sa(e,n,t):_a(e,n,t)}function Sa(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(Sa(e,t,n),e=e.sibling;null!==e;)Sa(e,t,n),e=e.sibling}function _a(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_a(e,t,n),e=e.sibling;null!==e;)_a(e,t,n),e=e.sibling}function ja(e,t){for(var n,r,o=t,s=!1;;){if(!s){s=o.return;e:for(;;){if(null===s)throw Error(i(160));switch(n=s.stateNode,s.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}s=s.return}s=!0}if(5===o.tag||6===o.tag){e:for(var a=e,l=o,c=l;;)if(ba(a,c),null!==c.child&&4!==c.tag)c.child.return=c,c=c.child;else{if(c===l)break e;for(;null===c.sibling;){if(null===c.return||c.return===l)break e;c=c.return}c.sibling.return=c.return,c=c.sibling}r?(a=n,l=o.stateNode,8===a.nodeType?a.parentNode.removeChild(l):a.removeChild(l)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(ba(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(s=!1)}o.sibling.return=o.return,o=o.sibling}}function Oa(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var s=t.updateQueue;if(t.updateQueue=null,null!==s){for(n[Xr]=r,\"input\"===e&&\"radio\"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<s.length;o+=2){var a=s[o],l=s[o+1];\"style\"===a?Ee(n,l):\"dangerouslySetInnerHTML\"===a?ge(n,l):\"children\"===a?ye(n,l):w(n,a,l,t)}switch(e){case\"input\":ne(n,r);break;case\"textarea\":ce(n,r);break;case\"select\":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(s=r.value)?ie(n,!!r.multiple,s,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:\"\",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,Et(n.containerInfo)));case 13:return null!==t.memoizedState&&(Wa=zo(),va(t.child,!0)),void ka(t);case 19:return void ka(t);case 23:case 24:return void va(t,null!==t.memoizedState)}throw Error(i(163))}function ka(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new da),t.forEach((function(t){var r=Ul.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Aa(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ca=Math.ceil,Pa=E.ReactCurrentDispatcher,Na=E.ReactCurrentOwner,Ia=0,Ta=null,Ra=null,Ma=0,Da=0,Fa=lo(0),La=0,Ba=null,$a=0,qa=0,Ua=0,za=0,Va=null,Wa=0,Ja=1/0;function Ka(){Ja=zo()+500}var Ha,Ga=null,Za=!1,Ya=null,Xa=null,Qa=!1,el=null,tl=90,nl=[],rl=[],ol=null,sl=0,il=null,al=-1,ll=0,cl=0,ul=null,pl=!1;function hl(){return 0!=(48&Ia)?zo():-1!==al?al:al=zo()}function fl(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Vo()?1:2;if(0===ll&&(ll=$a),0!==Zo.transition){0!==cl&&(cl=null!==Va?Va.pendingLanes:0),e=ll;var t=4186112&~cl;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Vo(),0!=(4&Ia)&&98===e?e=Bt(12,ll):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ll),e}function dl(e,t,n){if(50<sl)throw sl=0,il=null,Error(i(185));if(null===(e=ml(e,t)))return null;Ut(e,t,n),e===Ta&&(Ua|=t,4===La&&vl(e,Ma));var r=Vo();1===t?0!=(8&Ia)&&0==(48&Ia)?bl(e):(gl(e,n),0===Ia&&(Ka(),Ho())):(0==(4&Ia)||98!==r&&99!==r||(null===ol?ol=new Set([e]):ol.add(e)),gl(e,n)),Va=e}function ml(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gl(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,s=e.expirationTimes,a=e.pendingLanes;0<a;){var l=31-zt(a),c=1<<l,u=s[l];if(-1===u){if(0==(c&r)||0!=(c&o)){u=t,Dt(c);var p=Mt;s[l]=10<=p?u+250:6<=p?u+5e3:-1}}else u<=t&&(e.expiredLanes|=c);a&=~c}if(r=Ft(e,e===Ta?Ma:0),t=Mt,0===r)null!==n&&(n!==Fo&&ko(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fo&&ko(n)}15===t?(n=bl.bind(null,e),null===Bo?(Bo=[n],$o=Oo(Io,Go)):Bo.push(n),n=Fo):14===t?n=Ko(99,bl.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Ko(n,yl.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function yl(e){if(al=-1,cl=ll=0,0!=(48&Ia))throw Error(i(327));var t=e.callbackNode;if(Ml()&&e.callbackNode!==t)return null;var n=Ft(e,e===Ta?Ma:0);if(0===n)return null;var r=n,o=Ia;Ia|=16;var s=Ol();for(Ta===e&&Ma===r||(Ka(),_l(e,r));;)try{Cl();break}catch(t){jl(e,t)}if(ns(),Pa.current=s,Ia=o,null!==Ra?r=0:(Ta=null,Ma=0,r=La),0!=($a&Ua))_l(e,0);else if(0!==r){if(2===r&&(Ia|=64,e.hydrate&&(e.hydrate=!1,Jr(e.containerInfo)),0!==(n=Lt(e))&&(r=kl(e,n))),1===r)throw t=Ba,_l(e,0),vl(e,n),gl(e,zo()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Il(e);break;case 3:if(vl(e,n),(62914560&n)===n&&10<(r=Wa+500-zo())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){hl(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Vr(Il.bind(null,e),r);break}Il(e);break;case 4:if(vl(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var a=31-zt(n);s=1<<a,(a=r[a])>o&&(o=a),n&=~s}if(n=o,10<(n=(120>(n=zo()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ca(n/1960))-n)){e.timeoutHandle=Vr(Il.bind(null,e),n);break}Il(e);break;default:throw Error(i(329))}}return gl(e,zo()),e.callbackNode===t?yl.bind(null,e):null}function vl(e,t){for(t&=~za,t&=~Ua,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-zt(t),r=1<<n;e[n]=-1,t&=~r}}function bl(e){if(0!=(48&Ia))throw Error(i(327));if(Ml(),e===Ta&&0!=(e.expiredLanes&Ma)){var t=Ma,n=kl(e,t);0!=($a&Ua)&&(n=kl(e,t=Ft(e,t)))}else n=kl(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Ia|=64,e.hydrate&&(e.hydrate=!1,Jr(e.containerInfo)),0!==(t=Lt(e))&&(n=kl(e,t))),1===n)throw n=Ba,_l(e,0),vl(e,t),gl(e,zo()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Il(e),gl(e,zo()),null}function wl(e,t){var n=Ia;Ia|=1;try{return e(t)}finally{0===(Ia=n)&&(Ka(),Ho())}}function El(e,t){var n=Ia;Ia&=-2,Ia|=8;try{return e(t)}finally{0===(Ia=n)&&(Ka(),Ho())}}function xl(e,t){uo(Fa,Da),Da|=t,$a|=t}function Sl(){Da=Fa.current,co(Fa)}function _l(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Wr(n)),null!==Ra)for(n=Ra.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&vo();break;case 3:Rs(),co(fo),co(ho),Gs();break;case 5:Ds(r);break;case 4:Rs();break;case 13:case 19:co(Fs);break;case 10:rs(r);break;case 23:case 24:Sl()}n=n.return}Ta=e,Ra=Jl(e.current,null),Ma=Da=$a=t,La=0,Ba=null,za=Ua=qa=0}function jl(e,t){for(;;){var n=Ra;try{if(ns(),Zs.current=Ni,ni){for(var r=Qs.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xs=0,ti=ei=Qs=null,ri=!1,Na.current=null,null===n||null===n.return){La=1,Ba=t,Ra=null;break}e:{var s=e,i=n.return,a=n,l=t;if(t=Ma,a.flags|=2048,a.firstEffect=a.lastEffect=null,null!==l&&\"object\"==typeof l&&\"function\"==typeof l.then){var c=l;if(0==(2&a.mode)){var u=a.alternate;u?(a.updateQueue=u.updateQueue,a.memoizedState=u.memoizedState,a.lanes=u.lanes):(a.updateQueue=null,a.memoizedState=null)}var p=0!=(1&Fs.current),h=i;do{var f;if(f=13===h.tag){var d=h.memoizedState;if(null!==d)f=null!==d.dehydrated;else{var m=h.memoizedProps;f=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!p)}}if(f){var g=h.updateQueue;if(null===g){var y=new Set;y.add(c),h.updateQueue=y}else g.add(c);if(0==(2&h.mode)){if(h.flags|=64,a.flags|=16384,a.flags&=-2981,1===a.tag)if(null===a.alternate)a.tag=17;else{var v=us(-1,1);v.tag=2,ps(a,v)}a.lanes|=1;break e}l=void 0,a=t;var b=s.pingCache;if(null===b?(b=s.pingCache=new pa,l=new Set,b.set(c,l)):void 0===(l=b.get(c))&&(l=new Set,b.set(c,l)),!l.has(a)){l.add(a);var w=ql.bind(null,s,c,a);c.then(w,w)}h.flags|=4096,h.lanes=t;break e}h=h.return}while(null!==h);l=Error((K(a.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==La&&(La=2),l=ca(l,a),h=i;do{switch(h.tag){case 3:s=l,h.flags|=4096,t&=-t,h.lanes|=t,hs(h,ha(0,s,t));break e;case 1:s=l;var E=h.type,x=h.stateNode;if(0==(64&h.flags)&&(\"function\"==typeof E.getDerivedStateFromError||null!==x&&\"function\"==typeof x.componentDidCatch&&(null===Xa||!Xa.has(x)))){h.flags|=4096,t&=-t,h.lanes|=t,hs(h,fa(h,s,t));break e}}h=h.return}while(null!==h)}Nl(n)}catch(e){t=e,Ra===n&&null!==n&&(Ra=n=n.return);continue}break}}function Ol(){var e=Pa.current;return Pa.current=Ni,null===e?Ni:e}function kl(e,t){var n=Ia;Ia|=16;var r=Ol();for(Ta===e&&Ma===t||_l(e,t);;)try{Al();break}catch(t){jl(e,t)}if(ns(),Ia=n,Pa.current=r,null!==Ra)throw Error(i(261));return Ta=null,Ma=0,La}function Al(){for(;null!==Ra;)Pl(Ra)}function Cl(){for(;null!==Ra&&!Ao();)Pl(Ra)}function Pl(e){var t=Ha(e.alternate,e,Da);e.memoizedProps=e.pendingProps,null===t?Nl(e):Ra=t,Na.current=null}function Nl(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=aa(n,t,Da)))return void(Ra=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Da)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=la(t)))return n.flags&=2047,void(Ra=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Ra=t);Ra=t=e}while(null!==t);0===La&&(La=5)}function Il(e){var t=Vo();return Jo(99,Tl.bind(null,e,t)),null}function Tl(e,t){do{Ml()}while(null!==el);if(0!=(48&Ia))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,s=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var a=e.eventTimes,l=e.expirationTimes;0<s;){var c=31-zt(s),u=1<<c;o[c]=0,a[c]=-1,l[c]=-1,s&=~u}if(null!==ol&&0==(24&r)&&ol.has(e)&&ol.delete(e),e===Ta&&(Ra=Ta=null,Ma=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ia,Ia|=32,Na.current=null,$r=Ht,gr(a=mr())){if(\"selectionStart\"in a)l={start:a.selectionStart,end:a.selectionEnd};else e:if(l=(l=a.ownerDocument)&&l.defaultView||window,(u=l.getSelection&&l.getSelection())&&0!==u.rangeCount){l=u.anchorNode,s=u.anchorOffset,c=u.focusNode,u=u.focusOffset;try{l.nodeType,c.nodeType}catch(e){l=null;break e}var p=0,h=-1,f=-1,d=0,m=0,g=a,y=null;t:for(;;){for(var v;g!==l||0!==s&&3!==g.nodeType||(h=p+s),g!==c||0!==u&&3!==g.nodeType||(f=p+u),3===g.nodeType&&(p+=g.nodeValue.length),null!==(v=g.firstChild);)y=g,g=v;for(;;){if(g===a)break t;if(y===l&&++d===s&&(h=p),y===c&&++m===u&&(f=p),null!==(v=g.nextSibling))break;y=(g=y).parentNode}g=v}l=-1===h||-1===f?null:{start:h,end:f}}else l=null;l=l||{start:0,end:0}}else l=null;qr={focusedElem:a,selectionRange:l},Ht=!1,ul=null,pl=!1,Ga=r;do{try{Rl()}catch(e){if(null===Ga)throw Error(i(330));$l(Ga,e),Ga=Ga.nextEffect}}while(null!==Ga);ul=null,Ga=r;do{try{for(a=e;null!==Ga;){var b=Ga.flags;if(16&b&&ye(Ga.stateNode,\"\"),128&b){var w=Ga.alternate;if(null!==w){var E=w.ref;null!==E&&(\"function\"==typeof E?E(null):E.current=null)}}switch(1038&b){case 2:xa(Ga),Ga.flags&=-3;break;case 6:xa(Ga),Ga.flags&=-3,Oa(Ga.alternate,Ga);break;case 1024:Ga.flags&=-1025;break;case 1028:Ga.flags&=-1025,Oa(Ga.alternate,Ga);break;case 4:Oa(Ga.alternate,Ga);break;case 8:ja(a,l=Ga);var x=l.alternate;wa(l),null!==x&&wa(x)}Ga=Ga.nextEffect}}catch(e){if(null===Ga)throw Error(i(330));$l(Ga,e),Ga=Ga.nextEffect}}while(null!==Ga);if(E=qr,w=mr(),b=E.focusedElem,a=E.selectionRange,w!==b&&b&&b.ownerDocument&&dr(b.ownerDocument.documentElement,b)){null!==a&&gr(b)&&(w=a.start,void 0===(E=a.end)&&(E=w),\"selectionStart\"in b?(b.selectionStart=w,b.selectionEnd=Math.min(E,b.value.length)):(E=(w=b.ownerDocument||document)&&w.defaultView||window).getSelection&&(E=E.getSelection(),l=b.textContent.length,x=Math.min(a.start,l),a=void 0===a.end?x:Math.min(a.end,l),!E.extend&&x>a&&(l=a,a=x,x=l),l=fr(b,x),s=fr(b,a),l&&s&&(1!==E.rangeCount||E.anchorNode!==l.node||E.anchorOffset!==l.offset||E.focusNode!==s.node||E.focusOffset!==s.offset)&&((w=w.createRange()).setStart(l.node,l.offset),E.removeAllRanges(),x>a?(E.addRange(w),E.extend(s.node,s.offset)):(w.setEnd(s.node,s.offset),E.addRange(w))))),w=[];for(E=b;E=E.parentNode;)1===E.nodeType&&w.push({element:E,left:E.scrollLeft,top:E.scrollTop});for(\"function\"==typeof b.focus&&b.focus(),b=0;b<w.length;b++)(E=w[b]).element.scrollLeft=E.left,E.element.scrollTop=E.top}Ht=!!$r,qr=$r=null,e.current=n,Ga=r;do{try{for(b=e;null!==Ga;){var S=Ga.flags;if(36&S&&ya(b,Ga.alternate,Ga),128&S){w=void 0;var _=Ga.ref;if(null!==_){var j=Ga.stateNode;Ga.tag,w=j,\"function\"==typeof _?_(w):_.current=w}}Ga=Ga.nextEffect}}catch(e){if(null===Ga)throw Error(i(330));$l(Ga,e),Ga=Ga.nextEffect}}while(null!==Ga);Ga=null,Lo(),Ia=o}else e.current=n;if(Qa)Qa=!1,el=e,tl=t;else for(Ga=r;null!==Ga;)t=Ga.nextEffect,Ga.nextEffect=null,8&Ga.flags&&((S=Ga).sibling=null,S.stateNode=null),Ga=t;if(0===(r=e.pendingLanes)&&(Xa=null),1===r?e===il?sl++:(sl=0,il=e):sl=0,n=n.stateNode,_o&&\"function\"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(So,n,void 0,64==(64&n.current.flags))}catch(e){}if(gl(e,zo()),Za)throw Za=!1,e=Ya,Ya=null,e;return 0!=(8&Ia)||Ho(),null}function Rl(){for(;null!==Ga;){var e=Ga.alternate;pl||null===ul||(0!=(8&Ga.flags)?Qe(Ga,ul)&&(pl=!0):13===Ga.tag&&Aa(e,Ga)&&Qe(Ga,ul)&&(pl=!0));var t=Ga.flags;0!=(256&t)&&ga(e,Ga),0==(512&t)||Qa||(Qa=!0,Ko(97,(function(){return Ml(),null}))),Ga=Ga.nextEffect}}function Ml(){if(90!==tl){var e=97<tl?97:tl;return tl=90,Jo(e,Ll)}return!1}function Dl(e,t){nl.push(t,e),Qa||(Qa=!0,Ko(97,(function(){return Ml(),null})))}function Fl(e,t){rl.push(t,e),Qa||(Qa=!0,Ko(97,(function(){return Ml(),null})))}function Ll(){if(null===el)return!1;var e=el;if(el=null,0!=(48&Ia))throw Error(i(331));var t=Ia;Ia|=32;var n=rl;rl=[];for(var r=0;r<n.length;r+=2){var o=n[r],s=n[r+1],a=o.destroy;if(o.destroy=void 0,\"function\"==typeof a)try{a()}catch(e){if(null===s)throw Error(i(330));$l(s,e)}}for(n=nl,nl=[],r=0;r<n.length;r+=2){o=n[r],s=n[r+1];try{var l=o.create;o.destroy=l()}catch(e){if(null===s)throw Error(i(330));$l(s,e)}}for(l=e.current.firstEffect;null!==l;)e=l.nextEffect,l.nextEffect=null,8&l.flags&&(l.sibling=null,l.stateNode=null),l=e;return Ia=t,Ho(),!0}function Bl(e,t,n){ps(e,t=ha(0,t=ca(n,t),1)),t=hl(),null!==(e=ml(e,1))&&(Ut(e,1,t),gl(e,t))}function $l(e,t){if(3===e.tag)Bl(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bl(n,e,t);break}if(1===n.tag){var r=n.stateNode;if(\"function\"==typeof n.type.getDerivedStateFromError||\"function\"==typeof r.componentDidCatch&&(null===Xa||!Xa.has(r))){var o=fa(n,e=ca(t,e),1);if(ps(n,o),o=hl(),null!==(n=ml(n,1)))Ut(n,1,o),gl(n,o);else if(\"function\"==typeof r.componentDidCatch&&(null===Xa||!Xa.has(r)))try{r.componentDidCatch(t,e)}catch(e){}break}}n=n.return}}function ql(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=hl(),e.pingedLanes|=e.suspendedLanes&n,Ta===e&&(Ma&n)===n&&(4===La||3===La&&(62914560&Ma)===Ma&&500>zo()-Wa?_l(e,0):za|=n),gl(e,t)}function Ul(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Vo()?1:2:(0===ll&&(ll=$a),0===(t=$t(62914560&~ll))&&(t=4194304))),n=hl(),null!==(e=ml(e,t))&&(Ut(e,t,n),gl(e,n))}function zl(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Vl(e,t,n,r){return new zl(e,t,n,r)}function Wl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Jl(e,t){var n=e.alternate;return null===n?((n=Vl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Kl(e,t,n,r,o,s){var a=2;if(r=e,\"function\"==typeof e)Wl(e)&&(a=1);else if(\"string\"==typeof e)a=5;else e:switch(e){case _:return Hl(n.children,o,s,t);case D:a=8,o|=16;break;case j:a=8,o|=1;break;case O:return(e=Vl(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=s,e;case P:return(e=Vl(13,n,t,o)).type=P,e.elementType=P,e.lanes=s,e;case N:return(e=Vl(19,n,t,o)).elementType=N,e.lanes=s,e;case F:return Gl(n,o,s,t);case L:return(e=Vl(24,n,t,o)).elementType=L,e.lanes=s,e;default:if(\"object\"==typeof e&&null!==e)switch(e.$$typeof){case k:a=10;break e;case A:a=9;break e;case C:a=11;break e;case I:a=14;break e;case T:a=16,r=null;break e;case R:a=22;break e}throw Error(i(130,null==e?e:typeof e,\"\"))}return(t=Vl(a,n,t,o)).elementType=e,t.type=r,t.lanes=s,t}function Hl(e,t,n,r){return(e=Vl(7,e,r,t)).lanes=n,e}function Gl(e,t,n,r){return(e=Vl(23,e,r,t)).elementType=F,e.lanes=n,e}function Zl(e,t,n){return(e=Vl(6,e,null,t)).lanes=n,e}function Yl(e,t,n){return(t=Vl(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xl(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=qt(0),this.expirationTimes=qt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=qt(0),this.mutableSourceEagerHydrationData=null}function Ql(e,t,n,r){var o=t.current,s=hl(),a=fl(o);e:if(n){t:{if(Ge(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(yo(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(i(171))}if(1===n.tag){var c=n.type;if(yo(c)){n=wo(n,c,l);break e}}n=l}else n=po;return null===t.context?t.context=n:t.pendingContext=n,(t=us(s,a)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),ps(o,t),dl(o,a,s),a}function ec(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nc(e,t){tc(e,t),(e=e.alternate)&&tc(e,t)}function rc(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xl(e,t,null!=n&&!0===n.hydrate),t=Vl(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ls(t),e[Qr]=n.current,Nr(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function oc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||\" react-mount-point-unstable \"!==e.nodeValue))}function sc(e,t,n,r,o){var s=n._reactRootContainer;if(s){var i=s._internalRoot;if(\"function\"==typeof o){var a=o;o=function(){var e=ec(i);a.call(e)}}Ql(t,i,e,o)}else{if(s=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute(\"data-reactroot\"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new rc(e,0,t?{hydrate:!0}:void 0)}(n,r),i=s._internalRoot,\"function\"==typeof o){var l=o;o=function(){var e=ec(i);l.call(e)}}El((function(){Ql(t,i,e,o)}))}return ec(i)}function ic(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!oc(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:S,key:null==r?null:\"\"+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Ha=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||fo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Ji(t),Ks();break;case 5:Ms(t);break;case 1:yo(t.type)&&Eo(t);break;case 4:Ts(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;uo(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(uo(Fs,1&Fs.current),null!==(t=sa(e,t,n))?t.sibling:null);uo(Fs,1&Fs.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return oa(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),uo(Fs,Fs.current),r)break;return null;case 23:case 24:return t.lanes=0,qi(e,t,n)}return sa(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,ho.current),ss(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,\"object\"==typeof o&&null!==o&&\"function\"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,yo(r)){var s=!0;Eo(t)}else s=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ls(t);var a=r.getDerivedStateFromProps;\"function\"==typeof a&&gs(t,r,a,e),o.updater=ys,t.stateNode=o,o._reactInternals=t,Es(t,r,e,n),t=Wi(null,t,r,!0,s,n)}else t.tag=0,Fi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(s=o._init)(o._payload),t.type=o,s=t.tag=function(e){if(\"function\"==typeof e)return Wl(e)?1:0;if(null!=e){if((e=e.$$typeof)===C)return 11;if(e===I)return 14}return 2}(o),e=Yo(o,e),s){case 0:t=zi(null,t,o,e,n);break e;case 1:t=Vi(null,t,o,e,n);break e;case 11:t=Li(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Yo(o.type,e),r,n);break e}throw Error(i(306,o,\"\"))}return t;case 0:return r=t.type,o=t.pendingProps,zi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 1:return r=t.type,o=t.pendingProps,Vi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 3:if(Ji(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,cs(e,t),fs(t,r,null,n),(r=t.memoizedState.element)===o)Ks(),t=sa(e,t,n);else{if((s=(o=t.stateNode).hydrate)&&($s=Kr(t.stateNode.containerInfo.firstChild),Bs=t,s=qs=!0),s){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(s=e[o])._workInProgressVersionPrimary=e[o+1],Hs.push(s);for(n=ks(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Ks();t=t.child}return t;case 5:return Ms(t),null===e&&Vs(t),r=t.type,o=t.pendingProps,s=null!==e?e.memoizedProps:null,a=o.children,zr(r,o)?a=null:null!==s&&zr(r,s)&&(t.flags|=16),Ui(e,t),Fi(e,t,a,n),t.child;case 6:return null===e&&Vs(t),null;case 13:return Xi(e,t,n);case 4:return Ts(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Os(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Li(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,a=t.memoizedProps,s=o.value;var l=t.type._context;if(uo(Xo,l._currentValue),l._currentValue=s,null!==a)if(l=a.value,0===(s=cr(l,s)?0:0|(\"function\"==typeof r._calculateChangedBits?r._calculateChangedBits(l,s):1073741823))){if(a.children===o.children&&!fo.current){t=sa(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var c=l.dependencies;if(null!==c){a=l.child;for(var u=c.firstContext;null!==u;){if(u.context===r&&0!=(u.observedBits&s)){1===l.tag&&((u=us(-1,n&-n)).tag=2,ps(l,u)),l.lanes|=n,null!==(u=l.alternate)&&(u.lanes|=n),os(l.return,n),c.lanes|=n;break}u=u.next}}else a=10===l.tag&&l.type===t.type?null:l.child;if(null!==a)a.return=l;else for(a=l;null!==a;){if(a===t){a=null;break}if(null!==(l=a.sibling)){l.return=a.return,a=l;break}a=a.return}l=a}Fi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(s=t.pendingProps).children,ss(t,n),r=r(o=is(o,s.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return s=Yo(o=t.type,t.pendingProps),Bi(e,t,o,s=Yo(o.type,s),r,n);case 15:return $i(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Yo(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,yo(r)?(e=!0,Eo(t)):e=!1,ss(t,n),bs(t,r,o),Es(t,r,o,n),Wi(null,t,r,!0,e,n);case 19:return oa(e,t,n);case 23:case 24:return qi(e,t,n)}throw Error(i(156,t.tag))},rc.prototype.render=function(e){Ql(e,this._internalRoot,null,null)},rc.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Ql(null,e,null,(function(){t[Qr]=null}))},et=function(e){13===e.tag&&(dl(e,4,hl()),nc(e,4))},tt=function(e){13===e.tag&&(dl(e,67108864,hl()),nc(e,67108864))},nt=function(e){if(13===e.tag){var t=hl(),n=fl(e);dl(e,n,t),nc(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case\"input\":if(ne(e,n),t=n.name,\"radio\"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+t)+'][type=\"radio\"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));Y(r),ne(r,o)}}}break;case\"textarea\":ce(e,n);break;case\"select\":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ie=wl,Te=function(e,t,n,r,o){var s=Ia;Ia|=4;try{return Jo(98,e.bind(null,t,n,r,o))}finally{0===(Ia=s)&&(Ka(),Ho())}},Re=function(){0==(49&Ia)&&(function(){if(null!==ol){var e=ol;ol=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gl(e,zo())}))}Ho()}(),Ml())},Me=function(e,t){var n=Ia;Ia|=2;try{return e(t)}finally{0===(Ia=n)&&(Ka(),Ho())}};var ac={Events:[no,ro,oo,Pe,Ne,Ml,{current:!1}]},lc={findFiberByHostInstance:to,bundleType:0,version:\"17.0.2\",rendererPackageName:\"react-dom\"},cc={bundleType:lc.bundleType,version:lc.version,rendererPackageName:lc.rendererPackageName,rendererConfig:lc.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:E.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:lc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var uc=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!uc.isDisabled&&uc.supportsFiber)try{So=uc.inject(cc),_o=uc}catch(me){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ac,t.createPortal=ic,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if(\"function\"==typeof e.render)throw Error(i(188));throw Error(i(268,Object.keys(e)))}return e=null===(e=Xe(t))?null:e.stateNode},t.flushSync=function(e,t){var n=Ia;if(0!=(48&n))return e(t);Ia|=1;try{if(e)return Jo(99,e.bind(null,t))}finally{Ia=n,Ho()}},t.hydrate=function(e,t,n){if(!oc(t))throw Error(i(200));return sc(null,e,t,!0,n)},t.render=function(e,t,n){if(!oc(t))throw Error(i(200));return sc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!oc(e))throw Error(i(40));return!!e._reactRootContainer&&(El((function(){sc(null,null,e,!1,(function(){e._reactRootContainer=null,e[Qr]=null}))})),!0)},t.unstable_batchedUpdates=wl,t.unstable_createPortal=function(e,t){return ic(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!oc(n))throw Error(i(200));if(null==e||void 0===e._reactInternals)throw Error(i(38));return sc(e,t,n,!1,r)},t.version=\"17.0.2\"},73935:(e,t,n)=>{\"use strict\";!function e(){if(\"undefined\"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&\"function\"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(e){console.error(e)}}(),e.exports=n(64448)},23930:(e,t,n)=>{\"use strict\";var r,o=n(43393),s=\"<<anonymous>>\",i=function(){invariant(!1,\"ImmutablePropTypes type checking code is stripped in production.\")};i.isRequired=i;var a=function(){return i};function l(e){var t=typeof e;return Array.isArray(e)?\"array\":e instanceof RegExp?\"object\":e instanceof o.Iterable?\"Immutable.\"+e.toSource().split(\" \")[0]:t}function c(e){function t(t,n,r,o,i,a){for(var l=arguments.length,c=Array(l>6?l-6:0),u=6;u<l;u++)c[u-6]=arguments[u];return a=a||r,o=o||s,null!=n[r]?e.apply(void 0,[n,r,o,i,a].concat(c)):t?new Error(\"Required \"+i+\" `\"+a+\"` was not specified in `\"+o+\"`.\"):void 0}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function u(e,t){return n=\"Iterable.\"+e,r=function(e){return o.Iterable.isIterable(e)&&t(e)},c((function(e,t,o,s,i){var a=e[t];if(!r(a)){var c=l(a);return new Error(\"Invalid \"+s+\" `\"+i+\"` of type `\"+c+\"` supplied to `\"+o+\"`, expected `\"+n+\"`.\")}return null}));var n,r}(r={listOf:a,mapOf:a,orderedMapOf:a,setOf:a,orderedSetOf:a,stackOf:a,iterableOf:a,recordOf:a,shape:a,contains:a,mapContains:a,orderedMapContains:a,list:i,map:i,orderedMap:i,set:i,orderedSet:i,stack:i,seq:i,record:i,iterable:i}).iterable.indexed=u(\"Indexed\",o.Iterable.isIndexed),r.iterable.keyed=u(\"Keyed\",o.Iterable.isKeyed),e.exports=r},69921:(e,t)=>{\"use strict\";var n=60103,r=60106,o=60107,s=60108,i=60114,a=60109,l=60110,c=60112,u=60113,p=60120,h=60115,f=60116,d=60121,m=60122,g=60117,y=60129,v=60131;if(\"function\"==typeof Symbol&&Symbol.for){var b=Symbol.for;n=b(\"react.element\"),r=b(\"react.portal\"),o=b(\"react.fragment\"),s=b(\"react.strict_mode\"),i=b(\"react.profiler\"),a=b(\"react.provider\"),l=b(\"react.context\"),c=b(\"react.forward_ref\"),u=b(\"react.suspense\"),p=b(\"react.suspense_list\"),h=b(\"react.memo\"),f=b(\"react.lazy\"),d=b(\"react.block\"),m=b(\"react.server.block\"),g=b(\"react.fundamental\"),y=b(\"react.debug_trace_mode\"),v=b(\"react.legacy_hidden\")}function w(e){if(\"object\"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case n:switch(e=e.type){case o:case i:case s:case u:case p:return e;default:switch(e=e&&e.$$typeof){case l:case c:case f:case h:case a:return e;default:return t}}case r:return t}}}var E=a,x=n,S=c,_=o,j=f,O=h,k=r,A=i,C=s,P=u;t.ContextConsumer=l,t.ContextProvider=E,t.Element=x,t.ForwardRef=S,t.Fragment=_,t.Lazy=j,t.Memo=O,t.Portal=k,t.Profiler=A,t.StrictMode=C,t.Suspense=P,t.isAsyncMode=function(){return!1},t.isConcurrentMode=function(){return!1},t.isContextConsumer=function(e){return w(e)===l},t.isContextProvider=function(e){return w(e)===a},t.isElement=function(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===n},t.isForwardRef=function(e){return w(e)===c},t.isFragment=function(e){return w(e)===o},t.isLazy=function(e){return w(e)===f},t.isMemo=function(e){return w(e)===h},t.isPortal=function(e){return w(e)===r},t.isProfiler=function(e){return w(e)===i},t.isStrictMode=function(e){return w(e)===s},t.isSuspense=function(e){return w(e)===u},t.isValidElementType=function(e){return\"string\"==typeof e||\"function\"==typeof e||e===o||e===i||e===y||e===s||e===u||e===p||e===v||\"object\"==typeof e&&null!==e&&(e.$$typeof===f||e.$$typeof===h||e.$$typeof===a||e.$$typeof===l||e.$$typeof===c||e.$$typeof===g||e.$$typeof===d||e[0]===m)},t.typeOf=w},59864:(e,t,n)=>{\"use strict\";e.exports=n(69921)},72408:(e,t,n)=>{\"use strict\";var r=n(27418),o=60103,s=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,a=60110,l=60112;t.Suspense=60113;var c=60115,u=60116;if(\"function\"==typeof Symbol&&Symbol.for){var p=Symbol.for;o=p(\"react.element\"),s=p(\"react.portal\"),t.Fragment=p(\"react.fragment\"),t.StrictMode=p(\"react.strict_mode\"),t.Profiler=p(\"react.profiler\"),i=p(\"react.provider\"),a=p(\"react.context\"),l=p(\"react.forward_ref\"),t.Suspense=p(\"react.suspense\"),c=p(\"react.memo\"),u=p(\"react.lazy\")}var h=\"function\"==typeof Symbol&&Symbol.iterator;function f(e){for(var t=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+e,n=1;n<arguments.length;n++)t+=\"&args[]=\"+encodeURIComponent(arguments[n]);return\"Minified React error #\"+e+\"; visit \"+t+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var d={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||d}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||d}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if(\"object\"!=typeof e&&\"function\"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,\"setState\")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,\"forceUpdate\")},y.prototype=g.prototype;var b=v.prototype=new y;b.constructor=v,r(b,g.prototype),b.isPureReactComponent=!0;var w={current:null},E=Object.prototype.hasOwnProperty,x={key:!0,ref:!0,__self:!0,__source:!0};function S(e,t,n){var r,s={},i=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(i=\"\"+t.key),t)E.call(t,r)&&!x.hasOwnProperty(r)&&(s[r]=t[r]);var l=arguments.length-2;if(1===l)s.children=n;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];s.children=c}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===s[r]&&(s[r]=l[r]);return{$$typeof:o,type:e,key:i,ref:a,props:s,_owner:w.current}}function _(e){return\"object\"==typeof e&&null!==e&&e.$$typeof===o}var j=/\\/+/g;function O(e,t){return\"object\"==typeof e&&null!==e&&null!=e.key?function(e){var t={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+e.replace(/[=:]/g,(function(e){return t[e]}))}(\"\"+e.key):t.toString(36)}function k(e,t,n,r,i){var a=typeof e;\"undefined\"!==a&&\"boolean\"!==a||(e=null);var l=!1;if(null===e)l=!0;else switch(a){case\"string\":case\"number\":l=!0;break;case\"object\":switch(e.$$typeof){case o:case s:l=!0}}if(l)return i=i(l=e),e=\"\"===r?\".\"+O(l,0):r,Array.isArray(i)?(n=\"\",null!=e&&(n=e.replace(j,\"$&/\")+\"/\"),k(i,t,n,\"\",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||l&&l.key===i.key?\"\":(\"\"+i.key).replace(j,\"$&/\")+\"/\")+e)),t.push(i)),1;if(l=0,r=\"\"===r?\".\":r+\":\",Array.isArray(e))for(var c=0;c<e.length;c++){var u=r+O(a=e[c],c);l+=k(a,t,n,u,i)}else if(u=function(e){return null===e||\"object\"!=typeof e?null:\"function\"==typeof(e=h&&e[h]||e[\"@@iterator\"])?e:null}(e),\"function\"==typeof u)for(e=u.call(e),c=0;!(a=e.next()).done;)l+=k(a=a.value,t,n,u=r+O(a,c++),i);else if(\"object\"===a)throw t=\"\"+e,Error(f(31,\"[object Object]\"===t?\"object with keys {\"+Object.keys(e).join(\", \")+\"}\":t));return l}function A(e,t,n){if(null==e)return e;var r=[],o=0;return k(e,r,\"\",\"\",(function(e){return t.call(n,e,o++)})),r}function C(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function N(){var e=P.current;if(null===e)throw Error(f(321));return e}var I={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:A,forEach:function(e,t,n){A(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return A(e,(function(){t++})),t},toArray:function(e){return A(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(f(143));return e}},t.Component=g,t.PureComponent=v,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var s=r({},e.props),i=e.key,a=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(a=t.ref,l=w.current),void 0!==t.key&&(i=\"\"+t.key),e.type&&e.type.defaultProps)var c=e.type.defaultProps;for(u in t)E.call(t,u)&&!x.hasOwnProperty(u)&&(s[u]=void 0===t[u]&&void 0!==c?c[u]:t[u])}var u=arguments.length-2;if(1===u)s.children=n;else if(1<u){c=Array(u);for(var p=0;p<u;p++)c[p]=arguments[p+2];s.children=c}return{$$typeof:o,type:e.type,key:i,ref:a,props:s,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:a,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=S,t.createFactory=function(e){var t=S.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:u,_payload:{_status:-1,_result:e},_init:C}},t.memo=function(e,t){return{$$typeof:c,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().useState(e)},t.version=\"17.0.2\"},67294:(e,t,n)=>{\"use strict\";e.exports=n(72408)},94281:e=>{\"use strict\";var t={};function n(e,n,r){r||(r=Error);var o=function(e){var t,r;function o(t,r,o){return e.call(this,function(e,t,r){return\"string\"==typeof n?n:n(e,t,r)}(t,r,o))||this}return r=e,(t=o).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,o}(r);o.prototype.name=r.name,o.prototype.code=e,t[e]=o}function r(e,t){if(Array.isArray(e)){var n=e.length;return e=e.map((function(e){return String(e)})),n>2?\"one of \".concat(t,\" \").concat(e.slice(0,n-1).join(\", \"),\", or \")+e[n-1]:2===n?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}n(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),n(\"ERR_INVALID_ARG_TYPE\",(function(e,t,n){var o,s,i,a;if(\"string\"==typeof t&&(s=\"not \",t.substr(!i||i<0?0:+i,s.length)===s)?(o=\"must not be\",t=t.replace(/^not /,\"\")):o=\"must be\",function(e,t,n){return(void 0===n||n>e.length)&&(n=e.length),e.substring(n-t.length,n)===t}(e,\" argument\"))a=\"The \".concat(e,\" \").concat(o,\" \").concat(r(t,\"type\"));else{var l=function(e,t,n){return\"number\"!=typeof n&&(n=0),!(n+t.length>e.length)&&-1!==e.indexOf(t,n)}(e,\".\")?\"property\":\"argument\";a='The \"'.concat(e,'\" ').concat(l,\" \").concat(o,\" \").concat(r(t,\"type\"))}return a+=\". Received type \".concat(typeof n)}),TypeError),n(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),n(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),n(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),n(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),n(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),n(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),n(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),n(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),n(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),n(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),e.exports.q=t},56753:(e,t,n)=>{\"use strict\";var r=n(34155),o=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=u;var s=n(79481),i=n(64229);n(35717)(u,s);for(var a=o(i.prototype),l=0;l<a.length;l++){var c=a[l];u.prototype[c]||(u.prototype[c]=i.prototype[c])}function u(e){if(!(this instanceof u))return new u(e);s.call(this,e),i.call(this,e),this.allowHalfOpen=!0,e&&(!1===e.readable&&(this.readable=!1),!1===e.writable&&(this.writable=!1),!1===e.allowHalfOpen&&(this.allowHalfOpen=!1,this.once(\"end\",p)))}function p(){this._writableState.ended||r.nextTick(h,this)}function h(e){e.end()}Object.defineProperty(u.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(u.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(u.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(u.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed&&this._writableState.destroyed)},set:function(e){void 0!==this._readableState&&void 0!==this._writableState&&(this._readableState.destroyed=e,this._writableState.destroyed=e)}})},82725:(e,t,n)=>{\"use strict\";e.exports=o;var r=n(74605);function o(e){if(!(this instanceof o))return new o(e);r.call(this,e)}n(35717)(o,r),o.prototype._transform=function(e,t,n){n(null,e)}},79481:(e,t,n)=>{\"use strict\";var r,o=n(34155);e.exports=j,j.ReadableState=_;n(17187).EventEmitter;var s=function(e,t){return e.listeners(t).length},i=n(22503),a=n(48764).Buffer,l=(void 0!==n.g?n.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){};var c,u=n(94616);c=u&&u.debuglog?u.debuglog(\"stream\"):function(){};var p,h,f,d=n(57327),m=n(61195),g=n(82457).getHighWaterMark,y=n(94281).q,v=y.ERR_INVALID_ARG_TYPE,b=y.ERR_STREAM_PUSH_AFTER_EOF,w=y.ERR_METHOD_NOT_IMPLEMENTED,E=y.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;n(35717)(j,i);var x=m.errorOrDestroy,S=[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function _(e,t,o){r=r||n(56753),e=e||{},\"boolean\"!=typeof o&&(o=t instanceof r),this.objectMode=!!e.objectMode,o&&(this.objectMode=this.objectMode||!!e.readableObjectMode),this.highWaterMark=g(this,e,\"readableHighWaterMark\",o),this.buffer=new d,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.paused=!0,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(p||(p=n(32553).s),this.decoder=new p(e.encoding),this.encoding=e.encoding)}function j(e){if(r=r||n(56753),!(this instanceof j))return new j(e);var t=this instanceof r;this._readableState=new _(e,this,t),this.readable=!0,e&&(\"function\"==typeof e.read&&(this._read=e.read),\"function\"==typeof e.destroy&&(this._destroy=e.destroy)),i.call(this)}function O(e,t,n,r,o){c(\"readableAddChunk\",t);var s,i=e._readableState;if(null===t)i.reading=!1,function(e,t){if(c(\"onEofChunk\"),t.ended)return;if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,t.sync?P(e):(t.needReadable=!1,t.emittedReadable||(t.emittedReadable=!0,N(e)))}(e,i);else if(o||(s=function(e,t){var n;r=t,a.isBuffer(r)||r instanceof l||\"string\"==typeof t||void 0===t||e.objectMode||(n=new v(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],t));var r;return n}(i,t)),s)x(e,s);else if(i.objectMode||t&&t.length>0)if(\"string\"==typeof t||i.objectMode||Object.getPrototypeOf(t)===a.prototype||(t=function(e){return a.from(e)}(t)),r)i.endEmitted?x(e,new E):k(e,i,t,!0);else if(i.ended)x(e,new b);else{if(i.destroyed)return!1;i.reading=!1,i.decoder&&!n?(t=i.decoder.write(t),i.objectMode||0!==t.length?k(e,i,t,!1):I(e,i)):k(e,i,t,!1)}else r||(i.reading=!1,I(e,i));return!i.ended&&(i.length<i.highWaterMark||0===i.length)}function k(e,t,n,r){t.flowing&&0===t.length&&!t.sync?(t.awaitDrain=0,e.emit(\"data\",n)):(t.length+=t.objectMode?1:n.length,r?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&P(e)),I(e,t)}Object.defineProperty(j.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._readableState&&this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}}),j.prototype.destroy=m.destroy,j.prototype._undestroy=m.undestroy,j.prototype._destroy=function(e,t){t(e)},j.prototype.push=function(e,t){var n,r=this._readableState;return r.objectMode?n=!0:\"string\"==typeof e&&((t=t||r.defaultEncoding)!==r.encoding&&(e=a.from(e,t),t=\"\"),n=!0),O(this,e,t,!1,n)},j.prototype.unshift=function(e){return O(this,e,null,!0,!1)},j.prototype.isPaused=function(){return!1===this._readableState.flowing},j.prototype.setEncoding=function(e){p||(p=n(32553).s);var t=new p(e);this._readableState.decoder=t,this._readableState.encoding=this._readableState.decoder.encoding;for(var r=this._readableState.buffer.head,o=\"\";null!==r;)o+=t.write(r.data),r=r.next;return this._readableState.buffer.clear(),\"\"!==o&&this._readableState.buffer.push(o),this._readableState.length=o.length,this};var A=1073741824;function C(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!=e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=function(e){return e>=A?e=A:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function P(e){var t=e._readableState;c(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,o.nextTick(N,e))}function N(e){var t=e._readableState;c(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,F(e)}function I(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(T,e,t))}function T(e,t){for(;!t.reading&&!t.ended&&(t.length<t.highWaterMark||t.flowing&&0===t.length);){var n=t.length;if(c(\"maybeReadMore read 0\"),e.read(0),n===t.length)break}t.readingMore=!1}function R(e){var t=e._readableState;t.readableListening=e.listenerCount(\"readable\")>0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function M(e){c(\"readable nexttick read 0\"),e.read(0)}function D(e,t){c(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),F(e),t.flowing&&!t.reading&&e.read(0)}function F(e){var t=e._readableState;for(c(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function L(e,t){return 0===t.length?null:(t.objectMode?n=t.buffer.shift():!e||e>=t.length?(n=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):n=t.buffer.consume(e,t.decoder),n);var n}function B(e){var t=e._readableState;c(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,o.nextTick($,t,e))}function $(e,t){if(c(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var n=t._writableState;(!n||n.autoDestroy&&n.finished)&&t.destroy()}}function q(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}j.prototype.read=function(e){c(\"read\",e),e=parseInt(e,10);var t=this._readableState,n=e;if(0!==e&&(t.emittedReadable=!1),0===e&&t.needReadable&&((0!==t.highWaterMark?t.length>=t.highWaterMark:t.length>0)||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?B(this):P(this),null;if(0===(e=C(e,t))&&t.ended)return 0===t.length&&B(this),null;var r,o=t.needReadable;return c(\"need readable\",o),(0===t.length||t.length-e<t.highWaterMark)&&c(\"length less than watermark\",o=!0),t.ended||t.reading?c(\"reading or ended\",o=!1):o&&(c(\"do read\"),t.reading=!0,t.sync=!0,0===t.length&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=C(n,t))),null===(r=e>0?L(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&B(this)),null!==r&&this.emit(\"data\",r),r},j.prototype._read=function(e){x(this,new w(\"_read()\"))},j.prototype.pipe=function(e,t){var n=this,r=this._readableState;switch(r.pipesCount){case 0:r.pipes=e;break;case 1:r.pipes=[r.pipes,e];break;default:r.pipes.push(e)}r.pipesCount+=1,c(\"pipe count=%d opts=%j\",r.pipesCount,t);var i=(!t||!1!==t.end)&&e!==o.stdout&&e!==o.stderr?l:g;function a(t,o){c(\"onunpipe\"),t===n&&o&&!1===o.hasUnpiped&&(o.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",d),e.removeListener(\"finish\",m),e.removeListener(\"drain\",u),e.removeListener(\"error\",f),e.removeListener(\"unpipe\",a),n.removeListener(\"end\",l),n.removeListener(\"end\",g),n.removeListener(\"data\",h),p=!0,!r.awaitDrain||e._writableState&&!e._writableState.needDrain||u())}function l(){c(\"onend\"),e.end()}r.endEmitted?o.nextTick(i):n.once(\"end\",i),e.on(\"unpipe\",a);var u=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,F(e))}}(n);e.on(\"drain\",u);var p=!1;function h(t){c(\"ondata\");var o=e.write(t);c(\"dest.write\",o),!1===o&&((1===r.pipesCount&&r.pipes===e||r.pipesCount>1&&-1!==q(r.pipes,e))&&!p&&(c(\"false write response, pause\",r.awaitDrain),r.awaitDrain++),n.pause())}function f(t){c(\"onerror\",t),g(),e.removeListener(\"error\",f),0===s(e,\"error\")&&x(e,t)}function d(){e.removeListener(\"finish\",m),g()}function m(){c(\"onfinish\"),e.removeListener(\"close\",d),g()}function g(){c(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",h),function(e,t,n){if(\"function\"==typeof e.prependListener)return e.prependListener(t,n);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n)}(e,\"error\",f),e.once(\"close\",d),e.once(\"finish\",m),e.emit(\"pipe\",n),r.flowing||(c(\"pipe resume\"),n.resume()),e},j.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,n)),this;if(!e){var r=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var s=0;s<o;s++)r[s].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var i=q(t.pipes,e);return-1===i||(t.pipes.splice(i,1),t.pipesCount-=1,1===t.pipesCount&&(t.pipes=t.pipes[0]),e.emit(\"unpipe\",this,n)),this},j.prototype.on=function(e,t){var n=i.prototype.on.call(this,e,t),r=this._readableState;return\"data\"===e?(r.readableListening=this.listenerCount(\"readable\")>0,!1!==r.flowing&&this.resume()):\"readable\"===e&&(r.endEmitted||r.readableListening||(r.readableListening=r.needReadable=!0,r.flowing=!1,r.emittedReadable=!1,c(\"on readable\",r.length,r.reading),r.length?P(this):r.reading||o.nextTick(M,this))),n},j.prototype.addListener=j.prototype.on,j.prototype.removeListener=function(e,t){var n=i.prototype.removeListener.call(this,e,t);return\"readable\"===e&&o.nextTick(R,this),n},j.prototype.removeAllListeners=function(e){var t=i.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||o.nextTick(R,this),t},j.prototype.resume=function(){var e=this._readableState;return e.flowing||(c(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,o.nextTick(D,e,t))}(this,e)),e.paused=!1,this},j.prototype.pause=function(){return c(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(c(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},j.prototype.wrap=function(e){var t=this,n=this._readableState,r=!1;for(var o in e.on(\"end\",(function(){if(c(\"wrapped end\"),n.decoder&&!n.ended){var e=n.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){(c(\"wrapped data\"),n.decoder&&(o=n.decoder.write(o)),n.objectMode&&null==o)||(n.objectMode||o&&o.length)&&(t.push(o)||(r=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var s=0;s<S.length;s++)e.on(S[s],this.emit.bind(this,S[s]));return this._read=function(t){c(\"wrapped _read\",t),r&&(r=!1,e.resume())},this},\"function\"==typeof Symbol&&(j.prototype[Symbol.asyncIterator]=function(){return void 0===h&&(h=n(45850)),h(this)}),Object.defineProperty(j.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(j.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState&&this._readableState.buffer}}),Object.defineProperty(j.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(e){this._readableState&&(this._readableState.flowing=e)}}),j._fromList=L,Object.defineProperty(j.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"==typeof Symbol&&(j.from=function(e,t){return void 0===f&&(f=n(15167)),f(j,e,t)})},74605:(e,t,n)=>{\"use strict\";e.exports=u;var r=n(94281).q,o=r.ERR_METHOD_NOT_IMPLEMENTED,s=r.ERR_MULTIPLE_CALLBACK,i=r.ERR_TRANSFORM_ALREADY_TRANSFORMING,a=r.ERR_TRANSFORM_WITH_LENGTH_0,l=n(56753);function c(e,t){var n=this._transformState;n.transforming=!1;var r=n.writecb;if(null===r)return this.emit(\"error\",new s);n.writechunk=null,n.writecb=null,null!=t&&this.push(t),r(e);var o=this._readableState;o.reading=!1,(o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}function u(e){if(!(this instanceof u))return new u(e);l.call(this,e),this._transformState={afterTransform:c.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(\"function\"==typeof e.transform&&(this._transform=e.transform),\"function\"==typeof e.flush&&(this._flush=e.flush)),this.on(\"prefinish\",p)}function p(){var e=this;\"function\"!=typeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(t,n){h(e,t,n)}))}function h(e,t,n){if(t)return e.emit(\"error\",t);if(null!=n&&e.push(n),e._writableState.length)throw new a;if(e._transformState.transforming)throw new i;return e.push(null)}n(35717)(u,l),u.prototype.push=function(e,t){return this._transformState.needTransform=!1,l.prototype.push.call(this,e,t)},u.prototype._transform=function(e,t,n){n(new o(\"_transform()\"))},u.prototype._write=function(e,t,n){var r=this._transformState;if(r.writecb=n,r.writechunk=e,r.writeencoding=t,!r.transforming){var o=this._readableState;(r.needTransform||o.needReadable||o.length<o.highWaterMark)&&this._read(o.highWaterMark)}},u.prototype._read=function(e){var t=this._transformState;null===t.writechunk||t.transforming?t.needTransform=!0:(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform))},u.prototype._destroy=function(e,t){l.prototype._destroy.call(this,e,(function(e){t(e)}))}},64229:(e,t,n)=>{\"use strict\";var r,o=n(34155);function s(e){var t=this;this.next=null,this.entry=null,this.finish=function(){!function(e,t,n){var r=e.entry;e.entry=null;for(;r;){var o=r.callback;t.pendingcb--,o(n),r=r.next}t.corkedRequestsFree.next=e}(t,e)}}e.exports=j,j.WritableState=_;var i={deprecate:n(94927)},a=n(22503),l=n(48764).Buffer,c=(void 0!==n.g?n.g:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:{}).Uint8Array||function(){};var u,p=n(61195),h=n(82457).getHighWaterMark,f=n(94281).q,d=f.ERR_INVALID_ARG_TYPE,m=f.ERR_METHOD_NOT_IMPLEMENTED,g=f.ERR_MULTIPLE_CALLBACK,y=f.ERR_STREAM_CANNOT_PIPE,v=f.ERR_STREAM_DESTROYED,b=f.ERR_STREAM_NULL_VALUES,w=f.ERR_STREAM_WRITE_AFTER_END,E=f.ERR_UNKNOWN_ENCODING,x=p.errorOrDestroy;function S(){}function _(e,t,i){r=r||n(56753),e=e||{},\"boolean\"!=typeof i&&(i=t instanceof r),this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode),this.highWaterMark=h(this,e,\"writableHighWaterMark\",i),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var a=!1===e.decodeStrings;this.decodeStrings=!a,this.defaultEncoding=e.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var n=e._writableState,r=n.sync,s=n.writecb;if(\"function\"!=typeof s)throw new g;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(n),t)!function(e,t,n,r,s){--t.pendingcb,n?(o.nextTick(s,r),o.nextTick(N,e,t),e._writableState.errorEmitted=!0,x(e,r)):(s(r),e._writableState.errorEmitted=!0,x(e,r),N(e,t))}(e,n,r,t,s);else{var i=C(n)||e.destroyed;i||n.corked||n.bufferProcessing||!n.bufferedRequest||A(e,n),r?o.nextTick(k,e,n,i,s):k(e,n,i,s)}}(t,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.emitClose=!1!==e.emitClose,this.autoDestroy=!!e.autoDestroy,this.bufferedRequestCount=0,this.corkedRequestsFree=new s(this)}function j(e){var t=this instanceof(r=r||n(56753));if(!t&&!u.call(j,this))return new j(e);this._writableState=new _(e,this,t),this.writable=!0,e&&(\"function\"==typeof e.write&&(this._write=e.write),\"function\"==typeof e.writev&&(this._writev=e.writev),\"function\"==typeof e.destroy&&(this._destroy=e.destroy),\"function\"==typeof e.final&&(this._final=e.final)),a.call(this)}function O(e,t,n,r,o,s,i){t.writelen=r,t.writecb=i,t.writing=!0,t.sync=!0,t.destroyed?t.onwrite(new v(\"write\")):n?e._writev(o,t.onwrite):e._write(o,s,t.onwrite),t.sync=!1}function k(e,t,n,r){n||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,r(),N(e,t)}function A(e,t){t.bufferProcessing=!0;var n=t.bufferedRequest;if(e._writev&&n&&n.next){var r=t.bufferedRequestCount,o=new Array(r),i=t.corkedRequestsFree;i.entry=n;for(var a=0,l=!0;n;)o[a]=n,n.isBuf||(l=!1),n=n.next,a+=1;o.allBuffers=l,O(e,t,!0,t.length,o,\"\",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new s(t),t.bufferedRequestCount=0}else{for(;n;){var c=n.chunk,u=n.encoding,p=n.callback;if(O(e,t,!1,t.objectMode?1:c.length,c,u,p),n=n.next,t.bufferedRequestCount--,t.writing)break}null===n&&(t.lastBufferedRequest=null)}t.bufferedRequest=n,t.bufferProcessing=!1}function C(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function P(e,t){e._final((function(n){t.pendingcb--,n&&x(e,n),t.prefinished=!0,e.emit(\"prefinish\"),N(e,t)}))}function N(e,t){var n=C(t);if(n&&(function(e,t){t.prefinished||t.finalCalled||(\"function\"!=typeof e._final||t.destroyed?(t.prefinished=!0,e.emit(\"prefinish\")):(t.pendingcb++,t.finalCalled=!0,o.nextTick(P,e,t)))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"),t.autoDestroy))){var r=e._readableState;(!r||r.autoDestroy&&r.endEmitted)&&e.destroy()}return n}n(35717)(j,a),_.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(_.prototype,\"buffer\",{get:i.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(u=Function.prototype[Symbol.hasInstance],Object.defineProperty(j,Symbol.hasInstance,{value:function(e){return!!u.call(this,e)||this===j&&(e&&e._writableState instanceof _)}})):u=function(e){return e instanceof this},j.prototype.pipe=function(){x(this,new y)},j.prototype.write=function(e,t,n){var r,s=this._writableState,i=!1,a=!s.objectMode&&(r=e,l.isBuffer(r)||r instanceof c);return a&&!l.isBuffer(e)&&(e=function(e){return l.from(e)}(e)),\"function\"==typeof t&&(n=t,t=null),a?t=\"buffer\":t||(t=s.defaultEncoding),\"function\"!=typeof n&&(n=S),s.ending?function(e,t){var n=new w;x(e,n),o.nextTick(t,n)}(this,n):(a||function(e,t,n,r){var s;return null===n?s=new b:\"string\"==typeof n||t.objectMode||(s=new d(\"chunk\",[\"string\",\"Buffer\"],n)),!s||(x(e,s),o.nextTick(r,s),!1)}(this,s,e,n))&&(s.pendingcb++,i=function(e,t,n,r,o,s){if(!n){var i=function(e,t,n){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=l.from(t,n));return t}(t,r,o);r!==i&&(n=!0,o=\"buffer\",r=i)}var a=t.objectMode?1:r.length;t.length+=a;var c=t.length<t.highWaterMark;c||(t.needDrain=!0);if(t.writing||t.corked){var u=t.lastBufferedRequest;t.lastBufferedRequest={chunk:r,encoding:o,isBuf:n,callback:s,next:null},u?u.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else O(e,t,!1,a,r,o,s);return c}(this,s,a,e,t,n)),i},j.prototype.cork=function(){this._writableState.corked++},j.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.bufferProcessing||!e.bufferedRequest||A(this,e))},j.prototype.setDefaultEncoding=function(e){if(\"string\"==typeof e&&(e=e.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((e+\"\").toLowerCase())>-1))throw new E(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(j.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(j.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),j.prototype._write=function(e,t,n){n(new m(\"_write()\"))},j.prototype._writev=null,j.prototype.end=function(e,t,n){var r=this._writableState;return\"function\"==typeof e?(n=e,e=null,t=null):\"function\"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||function(e,t,n){t.ending=!0,N(e,t),n&&(t.finished?o.nextTick(n):e.once(\"finish\",n));t.ended=!0,e.writable=!1}(this,r,n),this},Object.defineProperty(j.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(j.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),j.prototype.destroy=p.destroy,j.prototype._undestroy=p.undestroy,j.prototype._destroy=function(e,t){t(e)}},45850:(e,t,n)=>{\"use strict\";var r,o=n(34155);function s(e,t,n){return(t=function(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||\"default\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var i=n(8610),a=Symbol(\"lastResolve\"),l=Symbol(\"lastReject\"),c=Symbol(\"error\"),u=Symbol(\"ended\"),p=Symbol(\"lastPromise\"),h=Symbol(\"handlePromise\"),f=Symbol(\"stream\");function d(e,t){return{value:e,done:t}}function m(e){var t=e[a];if(null!==t){var n=e[f].read();null!==n&&(e[p]=null,e[a]=null,e[l]=null,t(d(n,!1)))}}function g(e){o.nextTick(m,e)}var y=Object.getPrototypeOf((function(){})),v=Object.setPrototypeOf((s(r={get stream(){return this[f]},next:function(){var e=this,t=this[c];if(null!==t)return Promise.reject(t);if(this[u])return Promise.resolve(d(void 0,!0));if(this[f].destroyed)return new Promise((function(t,n){o.nextTick((function(){e[c]?n(e[c]):t(d(void 0,!0))}))}));var n,r=this[p];if(r)n=new Promise(function(e,t){return function(n,r){e.then((function(){t[u]?n(d(void 0,!0)):t[h](n,r)}),r)}}(r,this));else{var s=this[f].read();if(null!==s)return Promise.resolve(d(s,!1));n=new Promise(this[h])}return this[p]=n,n}},Symbol.asyncIterator,(function(){return this})),s(r,\"return\",(function(){var e=this;return new Promise((function(t,n){e[f].destroy(null,(function(e){e?n(e):t(d(void 0,!0))}))}))})),r),y);e.exports=function(e){var t,n=Object.create(v,(s(t={},f,{value:e,writable:!0}),s(t,a,{value:null,writable:!0}),s(t,l,{value:null,writable:!0}),s(t,c,{value:null,writable:!0}),s(t,u,{value:e._readableState.endEmitted,writable:!0}),s(t,h,{value:function(e,t){var r=n[f].read();r?(n[p]=null,n[a]=null,n[l]=null,e(d(r,!1))):(n[a]=e,n[l]=t)},writable:!0}),t));return n[p]=null,i(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=n[l];return null!==t&&(n[p]=null,n[a]=null,n[l]=null,t(e)),void(n[c]=e)}var r=n[a];null!==r&&(n[p]=null,n[a]=null,n[l]=null,r(d(void 0,!0))),n[u]=!0})),e.on(\"readable\",g.bind(null,n)),n}},57327:(e,t,n)=>{\"use strict\";function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t,n){return(t=a(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||\"default\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}var l=n(48764).Buffer,c=n(52361).inspect,u=c&&c.custom||\"inspect\";e.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}var t,n,r;return t=e,(n=[{key:\"push\",value:function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,n=\"\"+t.data;t=t.next;)n+=e+t.data;return n}},{key:\"concat\",value:function(e){if(0===this.length)return l.alloc(0);for(var t,n,r,o=l.allocUnsafe(e>>>0),s=this.head,i=0;s;)t=s.data,n=o,r=i,l.prototype.copy.call(t,n,r),i+=s.data.length,s=s.next;return o}},{key:\"consume\",value:function(e,t){var n;return e<this.head.data.length?(n=this.head.data.slice(0,e),this.head.data=this.head.data.slice(e)):n=e===this.head.data.length?this.shift():t?this._getString(e):this._getBuffer(e),n}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(e){var t=this.head,n=1,r=t.data;for(e-=r.length;t=t.next;){var o=t.data,s=e>o.length?o.length:e;if(s===o.length?r+=o:r+=o.slice(0,e),0==(e-=s)){s===o.length?(++n,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=o.slice(s));break}++n}return this.length-=n,r}},{key:\"_getBuffer\",value:function(e){var t=l.allocUnsafe(e),n=this.head,r=1;for(n.data.copy(t),e-=n.data.length;n=n.next;){var o=n.data,s=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,s),0==(e-=s)){s===o.length?(++r,n.next?this.head=n.next:this.head=this.tail=null):(this.head=n,n.data=o.slice(s));break}++r}return this.length-=r,t}},{key:u,value:function(e,t){return c(this,o(o({},t),{},{depth:0,customInspect:!1}))}}])&&i(t.prototype,n),r&&i(t,r),Object.defineProperty(t,\"prototype\",{writable:!1}),e}()},61195:(e,t,n)=>{\"use strict\";var r=n(34155);function o(e,t){i(e,t),s(e)}function s(e){e._writableState&&!e._writableState.emitClose||e._readableState&&!e._readableState.emitClose||e.emit(\"close\")}function i(e,t){e.emit(\"error\",t)}e.exports={destroy:function(e,t){var n=this,a=this._readableState&&this._readableState.destroyed,l=this._writableState&&this._writableState.destroyed;return a||l?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,r.nextTick(i,this,e)):r.nextTick(i,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?n._writableState?n._writableState.errorEmitted?r.nextTick(s,n):(n._writableState.errorEmitted=!0,r.nextTick(o,n,e)):r.nextTick(o,n,e):t?(r.nextTick(s,n),t(e)):r.nextTick(s,n)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(e,t){var n=e._readableState,r=e._writableState;n&&n.autoDestroy||r&&r.autoDestroy?e.destroy(t):e.emit(\"error\",t)}}},8610:(e,t,n)=>{\"use strict\";var r=n(94281).q.ERR_STREAM_PREMATURE_CLOSE;function o(){}e.exports=function e(t,n,s){if(\"function\"==typeof n)return e(t,null,n);n||(n={}),s=function(e){var t=!1;return function(){if(!t){t=!0;for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];e.apply(this,r)}}}(s||o);var i=n.readable||!1!==n.readable&&t.readable,a=n.writable||!1!==n.writable&&t.writable,l=function(){t.writable||u()},c=t._writableState&&t._writableState.finished,u=function(){a=!1,c=!0,i||s.call(t)},p=t._readableState&&t._readableState.endEmitted,h=function(){i=!1,p=!0,a||s.call(t)},f=function(e){s.call(t,e)},d=function(){var e;return i&&!p?(t._readableState&&t._readableState.ended||(e=new r),s.call(t,e)):a&&!c?(t._writableState&&t._writableState.ended||(e=new r),s.call(t,e)):void 0},m=function(){t.req.on(\"finish\",u)};return!function(e){return e.setHeader&&\"function\"==typeof e.abort}(t)?a&&!t._writableState&&(t.on(\"end\",l),t.on(\"close\",l)):(t.on(\"complete\",u),t.on(\"abort\",d),t.req?m():t.on(\"request\",m)),t.on(\"end\",h),t.on(\"finish\",u),!1!==n.error&&t.on(\"error\",f),t.on(\"close\",d),function(){t.removeListener(\"complete\",u),t.removeListener(\"abort\",d),t.removeListener(\"request\",m),t.req&&t.req.removeListener(\"finish\",u),t.removeListener(\"end\",l),t.removeListener(\"close\",l),t.removeListener(\"finish\",u),t.removeListener(\"end\",h),t.removeListener(\"error\",f),t.removeListener(\"close\",d)}}},15167:e=>{e.exports=function(){throw new Error(\"Readable.from is not available in the browser\")}},59946:(e,t,n)=>{\"use strict\";var r;var o=n(94281).q,s=o.ERR_MISSING_ARGS,i=o.ERR_STREAM_DESTROYED;function a(e){if(e)throw e}function l(e){e()}function c(e,t){return e.pipe(t)}e.exports=function(){for(var e=arguments.length,t=new Array(e),o=0;o<e;o++)t[o]=arguments[o];var u,p=function(e){return e.length?\"function\"!=typeof e[e.length-1]?a:e.pop():a}(t);if(Array.isArray(t[0])&&(t=t[0]),t.length<2)throw new s(\"streams\");var h=t.map((function(e,o){var s=o<t.length-1;return function(e,t,o,s){s=function(e){var t=!1;return function(){t||(t=!0,e.apply(void 0,arguments))}}(s);var a=!1;e.on(\"close\",(function(){a=!0})),void 0===r&&(r=n(8610)),r(e,{readable:t,writable:o},(function(e){if(e)return s(e);a=!0,s()}));var l=!1;return function(t){if(!a&&!l)return l=!0,function(e){return e.setHeader&&\"function\"==typeof e.abort}(e)?e.abort():\"function\"==typeof e.destroy?e.destroy():void s(t||new i(\"pipe\"))}}(e,s,o>0,(function(e){u||(u=e),e&&h.forEach(l),s||(h.forEach(l),p(u))}))}));return t.reduce(c)}},82457:(e,t,n)=>{\"use strict\";var r=n(94281).q.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:function(e,t,n,o){var s=function(e,t,n){return null!=e.highWaterMark?e.highWaterMark:t?e[n]:null}(t,o,n);if(null!=s){if(!isFinite(s)||Math.floor(s)!==s||s<0)throw new r(o?n:\"highWaterMark\",s);return Math.floor(s)}return e.objectMode?16:16384}}},22503:(e,t,n)=>{e.exports=n(17187).EventEmitter},27428:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r,o=n(43393),s=(r=o)&&r.__esModule?r:{default:r},i=n(79607);t.default=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:s.default.Map,n=Object.keys(e);return function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t(),o=arguments[1];return r.withMutations((function(t){n.forEach((function(n){var r=(0,e[n])(t.get(n),o);(0,i.validateNextState)(r,n,o),t.set(n,r)}))}))}},e.exports=t.default},72739:(e,t,n)=>{\"use strict\";t.U=void 0;var r,o=n(27428),s=(r=o)&&r.__esModule?r:{default:r};t.U=s.default},94528:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e){return e&&\"@@redux/INIT\"===e.type?\"initialState argument passed to createStore\":\"previous state received by the reducer\"},e.exports=t.default},93651:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var r=s(n(43393)),o=s(n(94528));function s(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){var s=Object.keys(t);if(!s.length)return\"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";var i=(0,o.default)(n);if(r.default.isImmutable?!r.default.isImmutable(e):!r.default.Iterable.isIterable(e))return\"The \"+i+' is of unexpected type. Expected argument to be an instance of Immutable.Collection or Immutable.Record with the following properties: \"'+s.join('\", \"')+'\".';var a=e.toSeq().keySeq().toArray().filter((function(e){return!t.hasOwnProperty(e)}));return a.length>0?\"Unexpected \"+(1===a.length?\"property\":\"properties\")+' \"'+a.join('\", \"')+'\" found in '+i+'. Expected to find one of the known reducer property names instead: \"'+s.join('\", \"')+'\". Unexpected properties will be ignored.':null},e.exports=t.default},79607:(e,t,n)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.validateNextState=t.getUnexpectedInvocationParameterMessage=t.getStateName=void 0;var r=i(n(94528)),o=i(n(93651)),s=i(n(85527));function i(e){return e&&e.__esModule?e:{default:e}}t.getStateName=r.default,t.getUnexpectedInvocationParameterMessage=o.default,t.validateNextState=s.default},85527:(e,t)=>{\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t,n){if(void 0===e)throw new Error('Reducer \"'+t+'\" returned undefined when handling \"'+n.type+'\" action. To ignore an action, you must explicitly return the previous state.')},e.exports=t.default},97779:(e,t,n)=>{\"use strict\";n.d(t,{md:()=>m,DE:()=>f,qC:()=>d,MT:()=>p});var r=n(64572);function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){(0,r.Z)(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e){return\"Minified Redux error #\"+e+\"; visit https://redux.js.org/Errors?code=\"+e+\" for the full message or use the non-minified dev environment for full errors. \"}var a=\"function\"==typeof Symbol&&Symbol.observable||\"@@observable\",l=function(){return Math.random().toString(36).substring(7).split(\"\").join(\".\")},c={INIT:\"@@redux/INIT\"+l(),REPLACE:\"@@redux/REPLACE\"+l(),PROBE_UNKNOWN_ACTION:function(){return\"@@redux/PROBE_UNKNOWN_ACTION\"+l()}};function u(e){if(\"object\"!=typeof e||null===e)return!1;for(var t=e;null!==Object.getPrototypeOf(t);)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t}function p(e,t,n){var r;if(\"function\"==typeof t&&\"function\"==typeof n||\"function\"==typeof n&&\"function\"==typeof arguments[3])throw new Error(i(0));if(\"function\"==typeof t&&void 0===n&&(n=t,t=void 0),void 0!==n){if(\"function\"!=typeof n)throw new Error(i(1));return n(p)(e,t)}if(\"function\"!=typeof e)throw new Error(i(2));var o=e,s=t,l=[],h=l,f=!1;function d(){h===l&&(h=l.slice())}function m(){if(f)throw new Error(i(3));return s}function g(e){if(\"function\"!=typeof e)throw new Error(i(4));if(f)throw new Error(i(5));var t=!0;return d(),h.push(e),function(){if(t){if(f)throw new Error(i(6));t=!1,d();var n=h.indexOf(e);h.splice(n,1),l=null}}}function y(e){if(!u(e))throw new Error(i(7));if(void 0===e.type)throw new Error(i(8));if(f)throw new Error(i(9));try{f=!0,s=o(s,e)}finally{f=!1}for(var t=l=h,n=0;n<t.length;n++){(0,t[n])()}return e}return y({type:c.INIT}),(r={dispatch:y,subscribe:g,getState:m,replaceReducer:function(e){if(\"function\"!=typeof e)throw new Error(i(10));o=e,y({type:c.REPLACE})}})[a]=function(){var e,t=g;return(e={subscribe:function(e){if(\"object\"!=typeof e||null===e)throw new Error(i(11));function n(){e.next&&e.next(m())}return n(),{unsubscribe:t(n)}}})[a]=function(){return this},e},r}function h(e,t){return function(){return t(e.apply(this,arguments))}}function f(e,t){if(\"function\"==typeof e)return h(e,t);if(\"object\"!=typeof e||null===e)throw new Error(i(16));var n={};for(var r in e){var o=e[r];\"function\"==typeof o&&(n[r]=h(o,t))}return n}function d(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return 0===t.length?function(e){return e}:1===t.length?t[0]:t.reduce((function(e,t){return function(){return e(t.apply(void 0,arguments))}}))}function m(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return function(e){return function(){var n=e.apply(void 0,arguments),r=function(){throw new Error(i(15))},o={getState:n.getState,dispatch:function(){return r.apply(void 0,arguments)}},a=t.map((function(e){return e(o)}));return r=d.apply(void 0,a)(n.dispatch),s(s({},n),{},{dispatch:r})}}}},89927:(e,t,n)=>{\"use strict\";var r;function o(e){return(r=r||document.createElement(\"textarea\")).innerHTML=\"&\"+e+\";\",r.value}n.d(t,{_:()=>ke});var s=Object.prototype.hasOwnProperty;function i(e,t){return!!e&&s.call(e,t)}function a(e){return[].slice.call(arguments,1).forEach((function(t){if(t){if(\"object\"!=typeof t)throw new TypeError(t+\"must be object\");Object.keys(t).forEach((function(n){e[n]=t[n]}))}})),e}var l=/\\\\([\\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;function c(e){return e.indexOf(\"\\\\\")<0?e:e.replace(l,\"$1\")}function u(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function p(e){if(e>65535){var t=55296+((e-=65536)>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var h=/&([a-z#][a-z0-9]{1,31});/gi,f=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function d(e,t){var n=0,r=o(t);return t!==r?r:35===t.charCodeAt(0)&&f.test(t)&&u(n=\"x\"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?p(n):e}function m(e){return e.indexOf(\"&\")<0?e:e.replace(h,d)}var g=/[&<>\"]/,y=/[&<>\"]/g,v={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\"};function b(e){return v[e]}function w(e){return g.test(e)?e.replace(y,b):e}var E={};function x(e,t){return++t>=e.length-2?t:\"paragraph_open\"===e[t].type&&e[t].tight&&\"inline\"===e[t+1].type&&0===e[t+1].content.length&&\"paragraph_close\"===e[t+2].type&&e[t+2].tight?x(e,t+2):t}E.blockquote_open=function(){return\"<blockquote>\\n\"},E.blockquote_close=function(e,t){return\"</blockquote>\"+S(e,t)},E.code=function(e,t){return e[t].block?\"<pre><code>\"+w(e[t].content)+\"</code></pre>\"+S(e,t):\"<code>\"+w(e[t].content)+\"</code>\"},E.fence=function(e,t,n,r,o){var s,a,l=e[t],u=\"\",p=n.langPrefix;if(l.params){if(a=(s=l.params.split(/\\s+/g)).join(\" \"),i(o.rules.fence_custom,s[0]))return o.rules.fence_custom[s[0]](e,t,n,r,o);u=' class=\"'+p+w(m(c(a)))+'\"'}return\"<pre><code\"+u+\">\"+(n.highlight&&n.highlight.apply(n.highlight,[l.content].concat(s))||w(l.content))+\"</code></pre>\"+S(e,t)},E.fence_custom={},E.heading_open=function(e,t){return\"<h\"+e[t].hLevel+\">\"},E.heading_close=function(e,t){return\"</h\"+e[t].hLevel+\">\\n\"},E.hr=function(e,t,n){return(n.xhtmlOut?\"<hr />\":\"<hr>\")+S(e,t)},E.bullet_list_open=function(){return\"<ul>\\n\"},E.bullet_list_close=function(e,t){return\"</ul>\"+S(e,t)},E.list_item_open=function(){return\"<li>\"},E.list_item_close=function(){return\"</li>\\n\"},E.ordered_list_open=function(e,t){var n=e[t];return\"<ol\"+(n.order>1?' start=\"'+n.order+'\"':\"\")+\">\\n\"},E.ordered_list_close=function(e,t){return\"</ol>\"+S(e,t)},E.paragraph_open=function(e,t){return e[t].tight?\"\":\"<p>\"},E.paragraph_close=function(e,t){var n=!(e[t].tight&&t&&\"inline\"===e[t-1].type&&!e[t-1].content);return(e[t].tight?\"\":\"</p>\")+(n?S(e,t):\"\")},E.link_open=function(e,t,n){var r=e[t].title?' title=\"'+w(m(e[t].title))+'\"':\"\",o=n.linkTarget?' target=\"'+n.linkTarget+'\"':\"\";return'<a href=\"'+w(e[t].href)+'\"'+r+o+\">\"},E.link_close=function(){return\"</a>\"},E.image=function(e,t,n){var r=' src=\"'+w(e[t].src)+'\"',o=e[t].title?' title=\"'+w(m(e[t].title))+'\"':\"\";return\"<img\"+r+(' alt=\"'+(e[t].alt?w(m(c(e[t].alt))):\"\")+'\"')+o+(n.xhtmlOut?\" /\":\"\")+\">\"},E.table_open=function(){return\"<table>\\n\"},E.table_close=function(){return\"</table>\\n\"},E.thead_open=function(){return\"<thead>\\n\"},E.thead_close=function(){return\"</thead>\\n\"},E.tbody_open=function(){return\"<tbody>\\n\"},E.tbody_close=function(){return\"</tbody>\\n\"},E.tr_open=function(){return\"<tr>\"},E.tr_close=function(){return\"</tr>\\n\"},E.th_open=function(e,t){var n=e[t];return\"<th\"+(n.align?' style=\"text-align:'+n.align+'\"':\"\")+\">\"},E.th_close=function(){return\"</th>\"},E.td_open=function(e,t){var n=e[t];return\"<td\"+(n.align?' style=\"text-align:'+n.align+'\"':\"\")+\">\"},E.td_close=function(){return\"</td>\"},E.strong_open=function(){return\"<strong>\"},E.strong_close=function(){return\"</strong>\"},E.em_open=function(){return\"<em>\"},E.em_close=function(){return\"</em>\"},E.del_open=function(){return\"<del>\"},E.del_close=function(){return\"</del>\"},E.ins_open=function(){return\"<ins>\"},E.ins_close=function(){return\"</ins>\"},E.mark_open=function(){return\"<mark>\"},E.mark_close=function(){return\"</mark>\"},E.sub=function(e,t){return\"<sub>\"+w(e[t].content)+\"</sub>\"},E.sup=function(e,t){return\"<sup>\"+w(e[t].content)+\"</sup>\"},E.hardbreak=function(e,t,n){return n.xhtmlOut?\"<br />\\n\":\"<br>\\n\"},E.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?\"<br />\\n\":\"<br>\\n\":\"\\n\"},E.text=function(e,t){return w(e[t].content)},E.htmlblock=function(e,t){return e[t].content},E.htmltag=function(e,t){return e[t].content},E.abbr_open=function(e,t){return'<abbr title=\"'+w(m(e[t].title))+'\">'},E.abbr_close=function(){return\"</abbr>\"},E.footnote_ref=function(e,t){var n=Number(e[t].id+1).toString(),r=\"fnref\"+n;return e[t].subId>0&&(r+=\":\"+e[t].subId),'<sup class=\"footnote-ref\"><a href=\"#fn'+n+'\" id=\"'+r+'\">['+n+\"]</a></sup>\"},E.footnote_block_open=function(e,t,n){return(n.xhtmlOut?'<hr class=\"footnotes-sep\" />\\n':'<hr class=\"footnotes-sep\">\\n')+'<section class=\"footnotes\">\\n<ol class=\"footnotes-list\">\\n'},E.footnote_block_close=function(){return\"</ol>\\n</section>\\n\"},E.footnote_open=function(e,t){return'<li id=\"fn'+Number(e[t].id+1).toString()+'\"  class=\"footnote-item\">'},E.footnote_close=function(){return\"</li>\\n\"},E.footnote_anchor=function(e,t){var n=\"fnref\"+Number(e[t].id+1).toString();return e[t].subId>0&&(n+=\":\"+e[t].subId),' <a href=\"#'+n+'\" class=\"footnote-backref\">↩</a>'},E.dl_open=function(){return\"<dl>\\n\"},E.dt_open=function(){return\"<dt>\"},E.dd_open=function(){return\"<dd>\"},E.dl_close=function(){return\"</dl>\\n\"},E.dt_close=function(){return\"</dt>\\n\"},E.dd_close=function(){return\"</dd>\\n\"};var S=E.getBreak=function(e,t){return(t=x(e,t))<e.length&&\"list_item_close\"===e[t].type?\"\":\"\\n\"};function _(){this.rules=a({},E),this.getBreak=E.getBreak}function j(){this.__rules__=[],this.__cache__=null}function O(e,t,n,r,o){this.src=e,this.env=r,this.options=n,this.parser=t,this.tokens=o,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending=\"\",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent=\"\",this.labelUnmatchedScopes=0}function k(e,t){var n,r,o,s=-1,i=e.posMax,a=e.pos,l=e.isInLabel;if(e.isInLabel)return-1;if(e.labelUnmatchedScopes)return e.labelUnmatchedScopes--,-1;for(e.pos=t+1,e.isInLabel=!0,n=1;e.pos<i;){if(91===(o=e.src.charCodeAt(e.pos)))n++;else if(93===o&&0===--n){r=!0;break}e.parser.skipToken(e)}return r?(s=e.pos,e.labelUnmatchedScopes=0):e.labelUnmatchedScopes=n-1,e.pos=a,e.isInLabel=l,s}function A(e,t,n,r){var o,s,i,a,l,c;if(42!==e.charCodeAt(0))return-1;if(91!==e.charCodeAt(1))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=k(o=new O(e,t,n,r,[]),1))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&10!==o.src.charCodeAt(i);i++);return l=e.slice(2,s),0===(c=e.slice(s+2,i).trim()).length?-1:(r.abbreviations||(r.abbreviations={}),void 0===r.abbreviations[\":\"+l]&&(r.abbreviations[\":\"+l]=c),i)}function C(e){var t=m(e);try{t=decodeURI(t)}catch(e){}return encodeURI(t)}function P(e,t){var n,r,o,s=t,i=e.posMax;if(60===e.src.charCodeAt(t)){for(t++;t<i;){if(10===(n=e.src.charCodeAt(t)))return!1;if(62===n)return o=C(c(e.src.slice(s+1,t))),!!e.parser.validateLink(o)&&(e.pos=t+1,e.linkContent=o,!0);92===n&&t+1<i?t+=2:t++}return!1}for(r=0;t<i&&32!==(n=e.src.charCodeAt(t))&&!(n<32||127===n);)if(92===n&&t+1<i)t+=2;else{if(40===n&&++r>1)break;if(41===n&&--r<0)break;t++}return s!==t&&(o=c(e.src.slice(s,t)),!!e.parser.validateLink(o)&&(e.linkContent=o,e.pos=t,!0))}function N(e,t){var n,r=t,o=e.posMax,s=e.src.charCodeAt(t);if(34!==s&&39!==s&&40!==s)return!1;for(t++,40===s&&(s=41);t<o;){if((n=e.src.charCodeAt(t))===s)return e.pos=t+1,e.linkContent=c(e.src.slice(r+1,t)),!0;92===n&&t+1<o?t+=2:t++}return!1}function I(e){return e.trim().replace(/\\s+/g,\" \").toUpperCase()}function T(e,t,n,r){var o,s,i,a,l,c,u,p,h;if(91!==e.charCodeAt(0))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=k(o=new O(e,t,n,r,[]),0))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&(32===(l=o.src.charCodeAt(i))||10===l);i++);if(!P(o,i))return-1;for(u=o.linkContent,c=i=o.pos,i+=1;i<a&&(32===(l=o.src.charCodeAt(i))||10===l);i++);for(i<a&&c!==i&&N(o,i)?(p=o.linkContent,i=o.pos):(p=\"\",i=c);i<a&&32===o.src.charCodeAt(i);)i++;return i<a&&10!==o.src.charCodeAt(i)?-1:(h=I(e.slice(1,s)),void 0===r.references[h]&&(r.references[h]={title:p,href:u}),i)}_.prototype.renderInline=function(e,t,n){for(var r=this.rules,o=e.length,s=0,i=\"\";o--;)i+=r[e[s].type](e,s++,t,n,this);return i},_.prototype.render=function(e,t,n){for(var r=this.rules,o=e.length,s=-1,i=\"\";++s<o;)\"inline\"===e[s].type?i+=this.renderInline(e[s].children,t,n):i+=r[e[s].type](e,s,t,n,this);return i},j.prototype.__find__=function(e){for(var t=this.__rules__.length,n=-1;t--;)if(this.__rules__[++n].name===e)return n;return-1},j.prototype.__compile__=function(){var e=this,t=[\"\"];e.__rules__.forEach((function(e){e.enabled&&e.alt.forEach((function(e){t.indexOf(e)<0&&t.push(e)}))})),e.__cache__={},t.forEach((function(t){e.__cache__[t]=[],e.__rules__.forEach((function(n){n.enabled&&(t&&n.alt.indexOf(t)<0||e.__cache__[t].push(n.fn))}))}))},j.prototype.at=function(e,t,n){var r=this.__find__(e),o=n||{};if(-1===r)throw new Error(\"Parser rule not found: \"+e);this.__rules__[r].fn=t,this.__rules__[r].alt=o.alt||[],this.__cache__=null},j.prototype.before=function(e,t,n,r){var o=this.__find__(e),s=r||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:n,alt:s.alt||[]}),this.__cache__=null},j.prototype.after=function(e,t,n,r){var o=this.__find__(e),s=r||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:n,alt:s.alt||[]}),this.__cache__=null},j.prototype.push=function(e,t,n){var r=n||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:r.alt||[]}),this.__cache__=null},j.prototype.enable=function(e,t){e=Array.isArray(e)?e:[e],t&&this.__rules__.forEach((function(e){e.enabled=!1})),e.forEach((function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!0}),this),this.__cache__=null},j.prototype.disable=function(e){(e=Array.isArray(e)?e:[e]).forEach((function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!1}),this),this.__cache__=null},j.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},O.prototype.pushPending=function(){this.tokens.push({type:\"text\",content:this.pending,level:this.pendingLevel}),this.pending=\"\"},O.prototype.push=function(e){this.pending&&this.pushPending(),this.tokens.push(e),this.pendingLevel=this.level},O.prototype.cacheSet=function(e,t){for(var n=this.cache.length;n<=e;n++)this.cache.push(0);this.cache[e]=t},O.prototype.cacheGet=function(e){return e<this.cache.length?this.cache[e]:0};var R=\" \\n()[]'\\\".,!?-\";function M(e){return e.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\")}var D=/\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/,F=/\\((c|tm|r|p)\\)/gi,L={c:\"©\",r:\"®\",p:\"§\",tm:\"™\"};var B=/['\"]/,$=/['\"]/g,q=/[-\\s()\\[\\]]/;function U(e,t){return!(t<0||t>=e.length)&&!q.test(e[t])}function z(e,t,n){return e.substr(0,t)+n+e.substr(t+1)}var V=[[\"block\",function(e){e.inlineMode?e.tokens.push({type:\"inline\",content:e.src.replace(/\\n/g,\" \").trim(),level:0,lines:[0,1],children:[]}):e.block.parse(e.src,e.options,e.env,e.tokens)}],[\"abbr\",function(e){var t,n,r,o,s=e.tokens;if(!e.inlineMode)for(t=1,n=s.length-1;t<n;t++)if(\"paragraph_open\"===s[t-1].type&&\"inline\"===s[t].type&&\"paragraph_close\"===s[t+1].type){for(r=s[t].content;r.length&&!((o=A(r,e.inline,e.options,e.env))<0);)r=r.slice(o).trim();s[t].content=r,r.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"references\",function(e){var t,n,r,o,s=e.tokens;if(e.env.references=e.env.references||{},!e.inlineMode)for(t=1,n=s.length-1;t<n;t++)if(\"inline\"===s[t].type&&\"paragraph_open\"===s[t-1].type&&\"paragraph_close\"===s[t+1].type){for(r=s[t].content;r.length&&!((o=T(r,e.inline,e.options,e.env))<0);)r=r.slice(o).trim();s[t].content=r,r.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"inline\",function(e){var t,n,r,o=e.tokens;for(n=0,r=o.length;n<r;n++)\"inline\"===(t=o[n]).type&&e.inline.parse(t.content,e.options,e.env,t.children)}],[\"footnote_tail\",function(e){var t,n,r,o,s,i,a,l,c,u=0,p=!1,h={};if(e.env.footnotes&&(e.tokens=e.tokens.filter((function(e){return\"footnote_reference_open\"===e.type?(p=!0,l=[],c=e.label,!1):\"footnote_reference_close\"===e.type?(p=!1,h[\":\"+c]=l,!1):(p&&l.push(e),!p)})),e.env.footnotes.list)){for(i=e.env.footnotes.list,e.tokens.push({type:\"footnote_block_open\",level:u++}),t=0,n=i.length;t<n;t++){for(e.tokens.push({type:\"footnote_open\",id:t,level:u++}),i[t].tokens?((a=[]).push({type:\"paragraph_open\",tight:!1,level:u++}),a.push({type:\"inline\",content:\"\",level:u,children:i[t].tokens}),a.push({type:\"paragraph_close\",tight:!1,level:--u})):i[t].label&&(a=h[\":\"+i[t].label]),e.tokens=e.tokens.concat(a),s=\"paragraph_close\"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,o=i[t].count>0?i[t].count:1,r=0;r<o;r++)e.tokens.push({type:\"footnote_anchor\",id:t,subId:r,level:u});s&&e.tokens.push(s),e.tokens.push({type:\"footnote_close\",level:--u})}e.tokens.push({type:\"footnote_block_close\",level:--u})}}],[\"abbr2\",function(e){var t,n,r,o,s,i,a,l,c,u,p,h,f=e.tokens;if(e.env.abbreviations)for(e.env.abbrRegExp||(h=\"(^|[\"+R.split(\"\").map(M).join(\"\")+\"])(\"+Object.keys(e.env.abbreviations).map((function(e){return e.substr(1)})).sort((function(e,t){return t.length-e.length})).map(M).join(\"|\")+\")($|[\"+R.split(\"\").map(M).join(\"\")+\"])\",e.env.abbrRegExp=new RegExp(h,\"g\")),u=e.env.abbrRegExp,n=0,r=f.length;n<r;n++)if(\"inline\"===f[n].type)for(t=(o=f[n].children).length-1;t>=0;t--)if(\"text\"===(s=o[t]).type){for(l=0,i=s.content,u.lastIndex=0,c=s.level,a=[];p=u.exec(i);)u.lastIndex>l&&a.push({type:\"text\",content:i.slice(l,p.index+p[1].length),level:c}),a.push({type:\"abbr_open\",title:e.env.abbreviations[\":\"+p[2]],level:c++}),a.push({type:\"text\",content:p[2],level:c}),a.push({type:\"abbr_close\",level:--c}),l=u.lastIndex-p[3].length;a.length&&(l<i.length&&a.push({type:\"text\",content:i.slice(l),level:c}),f[n].children=o=[].concat(o.slice(0,t),a,o.slice(t+1)))}}],[\"replacements\",function(e){var t,n,r,o,s,i;if(e.options.typographer)for(s=e.tokens.length-1;s>=0;s--)if(\"inline\"===e.tokens[s].type)for(t=(o=e.tokens[s].children).length-1;t>=0;t--)\"text\"===(n=o[t]).type&&(r=n.content,r=(i=r).indexOf(\"(\")<0?i:i.replace(F,(function(e,t){return L[t.toLowerCase()]})),D.test(r)&&(r=r.replace(/\\+-/g,\"±\").replace(/\\.{2,}/g,\"…\").replace(/([?!])…/g,\"$1..\").replace(/([?!]){4,}/g,\"$1$1$1\").replace(/,{2,}/g,\",\").replace(/(^|[^-])---([^-]|$)/gm,\"$1—$2\").replace(/(^|\\s)--(\\s|$)/gm,\"$1–$2\").replace(/(^|[^-\\s])--([^-\\s]|$)/gm,\"$1–$2\")),n.content=r)}],[\"smartquotes\",function(e){var t,n,r,o,s,i,a,l,c,u,p,h,f,d,m,g,y;if(e.options.typographer)for(y=[],m=e.tokens.length-1;m>=0;m--)if(\"inline\"===e.tokens[m].type)for(g=e.tokens[m].children,y.length=0,t=0;t<g.length;t++)if(\"text\"===(n=g[t]).type&&!B.test(n.text)){for(a=g[t].level,f=y.length-1;f>=0&&!(y[f].level<=a);f--);y.length=f+1,s=0,i=(r=n.content).length;e:for(;s<i&&($.lastIndex=s,o=$.exec(r));)if(l=!U(r,o.index-1),s=o.index+1,d=\"'\"===o[0],(c=!U(r,s))||l){if(p=!c,h=!l)for(f=y.length-1;f>=0&&(u=y[f],!(y[f].level<a));f--)if(u.single===d&&y[f].level===a){u=y[f],d?(g[u.token].content=z(g[u.token].content,u.pos,e.options.quotes[2]),n.content=z(n.content,o.index,e.options.quotes[3])):(g[u.token].content=z(g[u.token].content,u.pos,e.options.quotes[0]),n.content=z(n.content,o.index,e.options.quotes[1])),y.length=f;continue e}p?y.push({token:t,pos:o.index,single:d,level:a}):h&&d&&(n.content=z(n.content,o.index,\"’\"))}else d&&(n.content=z(n.content,o.index,\"’\"))}}]];function W(){this.options={},this.ruler=new j;for(var e=0;e<V.length;e++)this.ruler.push(V[e][0],V[e][1])}function J(e,t,n,r,o){var s,i,a,l,c,u,p;for(this.src=e,this.parser=t,this.options=n,this.env=r,this.tokens=o,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType=\"root\",this.ddIndent=-1,this.level=0,this.result=\"\",u=0,p=!1,a=l=u=0,c=(i=this.src).length;l<c;l++){if(s=i.charCodeAt(l),!p){if(32===s){u++;continue}p=!0}10!==s&&l!==c-1||(10!==s&&l++,this.bMarks.push(a),this.eMarks.push(l),this.tShift.push(u),p=!1,u=0,a=l+1)}this.bMarks.push(i.length),this.eMarks.push(i.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function K(e,t){var n,r,o;return(r=e.bMarks[t]+e.tShift[t])>=(o=e.eMarks[t])||42!==(n=e.src.charCodeAt(r++))&&45!==n&&43!==n||r<o&&32!==e.src.charCodeAt(r)?-1:r}function H(e,t){var n,r=e.bMarks[t]+e.tShift[t],o=e.eMarks[t];if(r+1>=o)return-1;if((n=e.src.charCodeAt(r++))<48||n>57)return-1;for(;;){if(r>=o)return-1;if(!((n=e.src.charCodeAt(r++))>=48&&n<=57)){if(41===n||46===n)break;return-1}}return r<o&&32!==e.src.charCodeAt(r)?-1:r}W.prototype.process=function(e){var t,n,r;for(t=0,n=(r=this.ruler.getRules(\"\")).length;t<n;t++)r[t](e)},J.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},J.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},J.prototype.skipSpaces=function(e){for(var t=this.src.length;e<t&&32===this.src.charCodeAt(e);e++);return e},J.prototype.skipChars=function(e,t){for(var n=this.src.length;e<n&&this.src.charCodeAt(e)===t;e++);return e},J.prototype.skipCharsBack=function(e,t,n){if(e<=n)return e;for(;e>n;)if(t!==this.src.charCodeAt(--e))return e+1;return e},J.prototype.getLines=function(e,t,n,r){var o,s,i,a,l,c=e;if(e>=t)return\"\";if(c+1===t)return s=this.bMarks[c]+Math.min(this.tShift[c],n),i=r?this.eMarks[c]+1:this.eMarks[c],this.src.slice(s,i);for(a=new Array(t-e),o=0;c<t;c++,o++)(l=this.tShift[c])>n&&(l=n),l<0&&(l=0),s=this.bMarks[c]+l,i=c+1<t||r?this.eMarks[c]+1:this.eMarks[c],a[o]=this.src.slice(s,i);return a.join(\"\")};var G={};[\"article\",\"aside\",\"button\",\"blockquote\",\"body\",\"canvas\",\"caption\",\"col\",\"colgroup\",\"dd\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"iframe\",\"li\",\"map\",\"object\",\"ol\",\"output\",\"p\",\"pre\",\"progress\",\"script\",\"section\",\"style\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"tr\",\"thead\",\"ul\",\"video\"].forEach((function(e){G[e]=!0}));var Z=/^<([a-zA-Z]{1,15})[\\s\\/>]/,Y=/^<\\/([a-zA-Z]{1,15})[\\s>]/;function X(e,t){var n=e.bMarks[t]+e.blkIndent,r=e.eMarks[t];return e.src.substr(n,r-n)}function Q(e,t){var n,r,o=e.bMarks[t]+e.tShift[t],s=e.eMarks[t];return o>=s||126!==(r=e.src.charCodeAt(o++))&&58!==r||o===(n=e.skipSpaces(o))||n>=s?-1:n}var ee=[[\"code\",function(e,t,n){var r,o;if(e.tShift[t]-e.blkIndent<4)return!1;for(o=r=t+1;r<n;)if(e.isEmpty(r))r++;else{if(!(e.tShift[r]-e.blkIndent>=4))break;o=++r}return e.line=r,e.tokens.push({type:\"code\",content:e.getLines(t,o,4+e.blkIndent,!0),block:!0,lines:[t,e.line],level:e.level}),!0}],[\"fences\",function(e,t,n,r){var o,s,i,a,l,c=!1,u=e.bMarks[t]+e.tShift[t],p=e.eMarks[t];if(u+3>p)return!1;if(126!==(o=e.src.charCodeAt(u))&&96!==o)return!1;if(l=u,(s=(u=e.skipChars(u,o))-l)<3)return!1;if((i=e.src.slice(u,p).trim()).indexOf(\"`\")>=0)return!1;if(r)return!0;for(a=t;!(++a>=n)&&!((u=l=e.bMarks[a]+e.tShift[a])<(p=e.eMarks[a])&&e.tShift[a]<e.blkIndent);)if(e.src.charCodeAt(u)===o&&!(e.tShift[a]-e.blkIndent>=4||(u=e.skipChars(u,o))-l<s||(u=e.skipSpaces(u))<p)){c=!0;break}return s=e.tShift[t],e.line=a+(c?1:0),e.tokens.push({type:\"fence\",params:i,content:e.getLines(t+1,a,s,!0),lines:[t,e.line],level:e.level}),!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"blockquote\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d,m=e.bMarks[t]+e.tShift[t],g=e.eMarks[t];if(m>g)return!1;if(62!==e.src.charCodeAt(m++))return!1;if(e.level>=e.options.maxNesting)return!1;if(r)return!0;for(32===e.src.charCodeAt(m)&&m++,l=e.blkIndent,e.blkIndent=0,a=[e.bMarks[t]],e.bMarks[t]=m,s=(m=m<g?e.skipSpaces(m):m)>=g,i=[e.tShift[t]],e.tShift[t]=m-e.bMarks[t],p=e.parser.ruler.getRules(\"blockquote\"),o=t+1;o<n&&!((m=e.bMarks[o]+e.tShift[o])>=(g=e.eMarks[o]));o++)if(62!==e.src.charCodeAt(m++)){if(s)break;for(d=!1,h=0,f=p.length;h<f;h++)if(p[h](e,o,n,!0)){d=!0;break}if(d)break;a.push(e.bMarks[o]),i.push(e.tShift[o]),e.tShift[o]=-1337}else 32===e.src.charCodeAt(m)&&m++,a.push(e.bMarks[o]),e.bMarks[o]=m,s=(m=m<g?e.skipSpaces(m):m)>=g,i.push(e.tShift[o]),e.tShift[o]=m-e.bMarks[o];for(c=e.parentType,e.parentType=\"blockquote\",e.tokens.push({type:\"blockquote_open\",lines:u=[t,0],level:e.level++}),e.parser.tokenize(e,t,o),e.tokens.push({type:\"blockquote_close\",level:--e.level}),e.parentType=c,u[1]=e.line,h=0;h<i.length;h++)e.bMarks[h+t]=a[h],e.tShift[h+t]=i[h];return e.blkIndent=l,!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"hr\",function(e,t,n,r){var o,s,i,a=e.bMarks[t],l=e.eMarks[t];if((a+=e.tShift[t])>l)return!1;if(42!==(o=e.src.charCodeAt(a++))&&45!==o&&95!==o)return!1;for(s=1;a<l;){if((i=e.src.charCodeAt(a++))!==o&&32!==i)return!1;i===o&&s++}return!(s<3)&&(r||(e.line=t+1,e.tokens.push({type:\"hr\",lines:[t,e.line],level:e.level})),!0)},[\"paragraph\",\"blockquote\",\"list\"]],[\"list\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d,m,g,y,v,b,w,E,x,S,_,j=!0;if((p=H(e,t))>=0)m=!0;else{if(!((p=K(e,t))>=0))return!1;m=!1}if(e.level>=e.options.maxNesting)return!1;if(d=e.src.charCodeAt(p-1),r)return!0;for(y=e.tokens.length,m?(u=e.bMarks[t]+e.tShift[t],f=Number(e.src.substr(u,p-u-1)),e.tokens.push({type:\"ordered_list_open\",order:f,lines:b=[t,0],level:e.level++})):e.tokens.push({type:\"bullet_list_open\",lines:b=[t,0],level:e.level++}),o=t,v=!1,E=e.parser.ruler.getRules(\"list\");!(!(o<n)||((h=(g=e.skipSpaces(p))>=e.eMarks[o]?1:g-p)>4&&(h=1),h<1&&(h=1),s=p-e.bMarks[o]+h,e.tokens.push({type:\"list_item_open\",lines:w=[t,0],level:e.level++}),a=e.blkIndent,l=e.tight,i=e.tShift[t],c=e.parentType,e.tShift[t]=g-e.bMarks[t],e.blkIndent=s,e.tight=!0,e.parentType=\"list\",e.parser.tokenize(e,t,n,!0),e.tight&&!v||(j=!1),v=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=a,e.tShift[t]=i,e.tight=l,e.parentType=c,e.tokens.push({type:\"list_item_close\",level:--e.level}),o=t=e.line,w[1]=o,g=e.bMarks[t],o>=n)||e.isEmpty(o)||e.tShift[o]<e.blkIndent);){for(_=!1,x=0,S=E.length;x<S;x++)if(E[x](e,o,n,!0)){_=!0;break}if(_)break;if(m){if((p=H(e,o))<0)break}else if((p=K(e,o))<0)break;if(d!==e.src.charCodeAt(p-1))break}return e.tokens.push({type:m?\"ordered_list_close\":\"bullet_list_close\",level:--e.level}),b[1]=o,e.line=o,j&&function(e,t){var n,r,o=e.level+2;for(n=t+2,r=e.tokens.length-2;n<r;n++)e.tokens[n].level===o&&\"paragraph_open\"===e.tokens[n].type&&(e.tokens[n+2].tight=!0,e.tokens[n].tight=!0,n+=2)}(e,y),!0},[\"paragraph\",\"blockquote\"]],[\"footnote\",function(e,t,n,r){var o,s,i,a,l,c=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(c+4>u)return!1;if(91!==e.src.charCodeAt(c))return!1;if(94!==e.src.charCodeAt(c+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(a=c+2;a<u;a++){if(32===e.src.charCodeAt(a))return!1;if(93===e.src.charCodeAt(a))break}return a!==c+2&&(!(a+1>=u||58!==e.src.charCodeAt(++a))&&(r||(a++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),l=e.src.slice(c+2,a-2),e.env.footnotes.refs[\":\"+l]=-1,e.tokens.push({type:\"footnote_reference_open\",label:l,level:e.level++}),o=e.bMarks[t],s=e.tShift[t],i=e.parentType,e.tShift[t]=e.skipSpaces(a)-a,e.bMarks[t]=a,e.blkIndent+=4,e.parentType=\"footnote\",e.tShift[t]<e.blkIndent&&(e.tShift[t]+=e.blkIndent,e.bMarks[t]-=e.blkIndent),e.parser.tokenize(e,t,n,!0),e.parentType=i,e.blkIndent-=4,e.tShift[t]=s,e.bMarks[t]=o,e.tokens.push({type:\"footnote_reference_close\",level:--e.level})),!0))},[\"paragraph\"]],[\"heading\",function(e,t,n,r){var o,s,i,a=e.bMarks[t]+e.tShift[t],l=e.eMarks[t];if(a>=l)return!1;if(35!==(o=e.src.charCodeAt(a))||a>=l)return!1;for(s=1,o=e.src.charCodeAt(++a);35===o&&a<l&&s<=6;)s++,o=e.src.charCodeAt(++a);return!(s>6||a<l&&32!==o)&&(r||(l=e.skipCharsBack(l,32,a),(i=e.skipCharsBack(l,35,a))>a&&32===e.src.charCodeAt(i-1)&&(l=i),e.line=t+1,e.tokens.push({type:\"heading_open\",hLevel:s,lines:[t,e.line],level:e.level}),a<l&&e.tokens.push({type:\"inline\",content:e.src.slice(a,l).trim(),level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:s,level:e.level})),!0)},[\"paragraph\",\"blockquote\"]],[\"lheading\",function(e,t,n){var r,o,s,i=t+1;return!(i>=n)&&(!(e.tShift[i]<e.blkIndent)&&(!(e.tShift[i]-e.blkIndent>3)&&(!((o=e.bMarks[i]+e.tShift[i])>=(s=e.eMarks[i]))&&((45===(r=e.src.charCodeAt(o))||61===r)&&(o=e.skipChars(o,r),!((o=e.skipSpaces(o))<s)&&(o=e.bMarks[t]+e.tShift[t],e.line=i+1,e.tokens.push({type:\"heading_open\",hLevel:61===r?1:2,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:e.src.slice(o,e.eMarks[t]).trim(),level:e.level+1,lines:[t,e.line-1],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:61===r?1:2,level:e.level}),!0))))))}],[\"htmlblock\",function(e,t,n,r){var o,s,i,a=e.bMarks[t],l=e.eMarks[t],c=e.tShift[t];if(a+=c,!e.options.html)return!1;if(c>3||a+2>=l)return!1;if(60!==e.src.charCodeAt(a))return!1;if(33===(o=e.src.charCodeAt(a+1))||63===o){if(r)return!0}else{if(47!==o&&!function(e){var t=32|e;return t>=97&&t<=122}(o))return!1;if(47===o){if(!(s=e.src.slice(a,l).match(Y)))return!1}else if(!(s=e.src.slice(a,l).match(Z)))return!1;if(!0!==G[s[1].toLowerCase()])return!1;if(r)return!0}for(i=t+1;i<e.lineMax&&!e.isEmpty(i);)i++;return e.line=i,e.tokens.push({type:\"htmlblock\",level:e.level,lines:[t,e.line],content:e.getLines(t,i,0,!0)}),!0},[\"paragraph\",\"blockquote\"]],[\"table\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d;if(t+2>n)return!1;if(l=t+1,e.tShift[l]<e.blkIndent)return!1;if((i=e.bMarks[l]+e.tShift[l])>=e.eMarks[l])return!1;if(124!==(o=e.src.charCodeAt(i))&&45!==o&&58!==o)return!1;if(s=X(e,t+1),!/^[-:| ]+$/.test(s))return!1;if((c=s.split(\"|\"))<=2)return!1;for(p=[],a=0;a<c.length;a++){if(!(h=c[a].trim())){if(0===a||a===c.length-1)continue;return!1}if(!/^:?-+:?$/.test(h))return!1;58===h.charCodeAt(h.length-1)?p.push(58===h.charCodeAt(0)?\"center\":\"right\"):58===h.charCodeAt(0)?p.push(\"left\"):p.push(\"\")}if(-1===(s=X(e,t).trim()).indexOf(\"|\"))return!1;if(c=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),p.length!==c.length)return!1;if(r)return!0;for(e.tokens.push({type:\"table_open\",lines:f=[t,0],level:e.level++}),e.tokens.push({type:\"thead_open\",lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"tr_open\",lines:[t,t+1],level:e.level++}),a=0;a<c.length;a++)e.tokens.push({type:\"th_open\",align:p[a],lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"inline\",content:c[a].trim(),lines:[t,t+1],level:e.level,children:[]}),e.tokens.push({type:\"th_close\",level:--e.level});for(e.tokens.push({type:\"tr_close\",level:--e.level}),e.tokens.push({type:\"thead_close\",level:--e.level}),e.tokens.push({type:\"tbody_open\",lines:d=[t+2,0],level:e.level++}),l=t+2;l<n&&!(e.tShift[l]<e.blkIndent)&&-1!==(s=X(e,l).trim()).indexOf(\"|\");l++){for(c=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),e.tokens.push({type:\"tr_open\",level:e.level++}),a=0;a<c.length;a++)e.tokens.push({type:\"td_open\",align:p[a],level:e.level++}),u=c[a].substring(124===c[a].charCodeAt(0)?1:0,124===c[a].charCodeAt(c[a].length-1)?c[a].length-1:c[a].length).trim(),e.tokens.push({type:\"inline\",content:u,level:e.level,children:[]}),e.tokens.push({type:\"td_close\",level:--e.level});e.tokens.push({type:\"tr_close\",level:--e.level})}return e.tokens.push({type:\"tbody_close\",level:--e.level}),e.tokens.push({type:\"table_close\",level:--e.level}),f[1]=d[1]=l,e.line=l,!0},[\"paragraph\"]],[\"deflist\",function(e,t,n,r){var o,s,i,a,l,c,u,p,h,f,d,m,g,y;if(r)return!(e.ddIndent<0)&&Q(e,t)>=0;if(u=t+1,e.isEmpty(u)&&++u>n)return!1;if(e.tShift[u]<e.blkIndent)return!1;if((o=Q(e,u))<0)return!1;if(e.level>=e.options.maxNesting)return!1;c=e.tokens.length,e.tokens.push({type:\"dl_open\",lines:l=[t,0],level:e.level++}),i=t,s=u;e:for(;;){for(y=!0,g=!1,e.tokens.push({type:\"dt_open\",lines:[i,i],level:e.level++}),e.tokens.push({type:\"inline\",content:e.getLines(i,i+1,e.blkIndent,!1).trim(),level:e.level+1,lines:[i,i],children:[]}),e.tokens.push({type:\"dt_close\",level:--e.level});;){if(e.tokens.push({type:\"dd_open\",lines:a=[u,0],level:e.level++}),m=e.tight,h=e.ddIndent,p=e.blkIndent,d=e.tShift[s],f=e.parentType,e.blkIndent=e.ddIndent=e.tShift[s]+2,e.tShift[s]=o-e.bMarks[s],e.tight=!0,e.parentType=\"deflist\",e.parser.tokenize(e,s,n,!0),e.tight&&!g||(y=!1),g=e.line-s>1&&e.isEmpty(e.line-1),e.tShift[s]=d,e.tight=m,e.parentType=f,e.blkIndent=p,e.ddIndent=h,e.tokens.push({type:\"dd_close\",level:--e.level}),a[1]=u=e.line,u>=n)break e;if(e.tShift[u]<e.blkIndent)break e;if((o=Q(e,u))<0)break;s=u}if(u>=n)break;if(i=u,e.isEmpty(i))break;if(e.tShift[i]<e.blkIndent)break;if((s=i+1)>=n)break;if(e.isEmpty(s)&&s++,s>=n)break;if(e.tShift[s]<e.blkIndent)break;if((o=Q(e,s))<0)break}return e.tokens.push({type:\"dl_close\",level:--e.level}),l[1]=u,e.line=u,y&&function(e,t){var n,r,o=e.level+2;for(n=t+2,r=e.tokens.length-2;n<r;n++)e.tokens[n].level===o&&\"paragraph_open\"===e.tokens[n].type&&(e.tokens[n+2].tight=!0,e.tokens[n].tight=!0,n+=2)}(e,c),!0},[\"paragraph\"]],[\"paragraph\",function(e,t){var n,r,o,s,i,a,l=t+1;if(l<(n=e.lineMax)&&!e.isEmpty(l))for(a=e.parser.ruler.getRules(\"paragraph\");l<n&&!e.isEmpty(l);l++)if(!(e.tShift[l]-e.blkIndent>3)){for(o=!1,s=0,i=a.length;s<i;s++)if(a[s](e,l,n,!0)){o=!0;break}if(o)break}return r=e.getLines(t,l,e.blkIndent,!1).trim(),e.line=l,r.length&&(e.tokens.push({type:\"paragraph_open\",tight:!1,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:r,level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"paragraph_close\",tight:!1,level:e.level})),!0}]];function te(){this.ruler=new j;for(var e=0;e<ee.length;e++)this.ruler.push(ee[e][0],ee[e][1],{alt:(ee[e][2]||[]).slice()})}te.prototype.tokenize=function(e,t,n){for(var r,o=this.ruler.getRules(\"\"),s=o.length,i=t,a=!1;i<n&&(e.line=i=e.skipEmptyLines(i),!(i>=n))&&!(e.tShift[i]<e.blkIndent);){for(r=0;r<s&&!o[r](e,i,n,!1);r++);if(e.tight=!a,e.isEmpty(e.line-1)&&(a=!0),(i=e.line)<n&&e.isEmpty(i)){if(a=!0,++i<n&&\"list\"===e.parentType&&e.isEmpty(i))break;e.line=i}}};var ne=/[\\n\\t]/g,re=/\\r[\\n\\u0085]|[\\u2424\\u2028\\u0085]/g,oe=/\\u00a0/g;function se(e){switch(e){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}te.prototype.parse=function(e,t,n,r){var o,s=0,i=0;if(!e)return[];(e=(e=e.replace(oe,\" \")).replace(re,\"\\n\")).indexOf(\"\\t\")>=0&&(e=e.replace(ne,(function(t,n){var r;return 10===e.charCodeAt(n)?(s=n+1,i=0,t):(r=\"    \".slice((n-s-i)%4),i=n-s+1,r)}))),o=new J(e,this,t,n,r),this.tokenize(o,o.line,o.lineMax)};for(var ie=[],ae=0;ae<256;ae++)ie.push(0);function le(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function ce(e,t){var n,r,o,s=t,i=!0,a=!0,l=e.posMax,c=e.src.charCodeAt(t);for(n=t>0?e.src.charCodeAt(t-1):-1;s<l&&e.src.charCodeAt(s)===c;)s++;return s>=l&&(i=!1),(o=s-t)>=4?i=a=!1:(32!==(r=s<l?e.src.charCodeAt(s):-1)&&10!==r||(i=!1),32!==n&&10!==n||(a=!1),95===c&&(le(n)&&(i=!1),le(r)&&(a=!1))),{can_open:i,can_close:a,delims:o}}\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach((function(e){ie[e.charCodeAt(0)]=1}));var ue=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var pe=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var he=[\"coap\",\"doi\",\"javascript\",\"aaa\",\"aaas\",\"about\",\"acap\",\"cap\",\"cid\",\"crid\",\"data\",\"dav\",\"dict\",\"dns\",\"file\",\"ftp\",\"geo\",\"go\",\"gopher\",\"h323\",\"http\",\"https\",\"iax\",\"icap\",\"im\",\"imap\",\"info\",\"ipp\",\"iris\",\"iris.beep\",\"iris.xpc\",\"iris.xpcs\",\"iris.lwz\",\"ldap\",\"mailto\",\"mid\",\"msrp\",\"msrps\",\"mtqp\",\"mupdate\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"opaquelocktoken\",\"pop\",\"pres\",\"rtsp\",\"service\",\"session\",\"shttp\",\"sieve\",\"sip\",\"sips\",\"sms\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"tag\",\"tel\",\"telnet\",\"tftp\",\"thismessage\",\"tn3270\",\"tip\",\"tv\",\"urn\",\"vemmi\",\"ws\",\"wss\",\"xcon\",\"xcon-userid\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"z39.50r\",\"z39.50s\",\"adiumxtra\",\"afp\",\"afs\",\"aim\",\"apt\",\"attachment\",\"aw\",\"beshare\",\"bitcoin\",\"bolo\",\"callto\",\"chrome\",\"chrome-extension\",\"com-eventbrite-attendee\",\"content\",\"cvs\",\"dlna-playsingle\",\"dlna-playcontainer\",\"dtn\",\"dvb\",\"ed2k\",\"facetime\",\"feed\",\"finger\",\"fish\",\"gg\",\"git\",\"gizmoproject\",\"gtalk\",\"hcp\",\"icon\",\"ipn\",\"irc\",\"irc6\",\"ircs\",\"itms\",\"jar\",\"jms\",\"keyparc\",\"lastfm\",\"ldaps\",\"magnet\",\"maps\",\"market\",\"message\",\"mms\",\"ms-help\",\"msnim\",\"mumble\",\"mvn\",\"notes\",\"oid\",\"palm\",\"paparazzi\",\"platform\",\"proxy\",\"psyc\",\"query\",\"res\",\"resource\",\"rmi\",\"rsync\",\"rtmp\",\"secondlife\",\"sftp\",\"sgn\",\"skype\",\"smb\",\"soldat\",\"spotify\",\"ssh\",\"steam\",\"svn\",\"teamspeak\",\"things\",\"udp\",\"unreal\",\"ut2004\",\"ventrilo\",\"view-source\",\"webcal\",\"wtai\",\"wyciwyg\",\"xfire\",\"xri\",\"ymsgr\"],fe=/^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,de=/^<([a-zA-Z.\\-]{1,25}):([^<>\\x00-\\x20]*)>/;function me(e,t){return e=e.source,t=t||\"\",function n(r,o){return r?(o=o.source||o,e=e.replace(r,o),n):new RegExp(e,t)}}var ge=me(/(?:unquoted|single_quoted|double_quoted)/)(\"unquoted\",/[^\"'=<>`\\x00-\\x20]+/)(\"single_quoted\",/'[^']*'/)(\"double_quoted\",/\"[^\"]*\"/)(),ye=me(/(?:\\s+attr_name(?:\\s*=\\s*attr_value)?)/)(\"attr_name\",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)(\"attr_value\",ge)(),ve=me(/<[A-Za-z][A-Za-z0-9]*attribute*\\s*\\/?>/)(\"attribute\",ye)(),be=me(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)(\"open_tag\",ve)(\"close_tag\",/<\\/[A-Za-z][A-Za-z0-9]*\\s*>/)(\"comment\",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)(\"processing\",/<[?].*?[?]>/)(\"declaration\",/<![A-Z]+\\s+[^>]*>/)(\"cdata\",/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/)();var we=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,Ee=/^&([a-z][a-z0-9]{1,31});/i;var xe=[[\"text\",function(e,t){for(var n=e.pos;n<e.posMax&&!se(e.src.charCodeAt(n));)n++;return n!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,n)),e.pos=n,!0)}],[\"newline\",function(e,t){var n,r,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;if(n=e.pending.length-1,r=e.posMax,!t)if(n>=0&&32===e.pending.charCodeAt(n))if(n>=1&&32===e.pending.charCodeAt(n-1)){for(var s=n-2;s>=0;s--)if(32!==e.pending.charCodeAt(s)){e.pending=e.pending.substring(0,s+1);break}e.push({type:\"hardbreak\",level:e.level})}else e.pending=e.pending.slice(0,-1),e.push({type:\"softbreak\",level:e.level});else e.push({type:\"softbreak\",level:e.level});for(o++;o<r&&32===e.src.charCodeAt(o);)o++;return e.pos=o,!0}],[\"escape\",function(e,t){var n,r=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(r))return!1;if(++r<o){if((n=e.src.charCodeAt(r))<256&&0!==ie[n])return t||(e.pending+=e.src[r]),e.pos+=2,!0;if(10===n){for(t||e.push({type:\"hardbreak\",level:e.level}),r++;r<o&&32===e.src.charCodeAt(r);)r++;return e.pos=r,!0}}return t||(e.pending+=\"\\\\\"),e.pos++,!0}],[\"backticks\",function(e,t){var n,r,o,s,i,a=e.pos;if(96!==e.src.charCodeAt(a))return!1;for(n=a,a++,r=e.posMax;a<r&&96===e.src.charCodeAt(a);)a++;for(o=e.src.slice(n,a),s=i=a;-1!==(s=e.src.indexOf(\"`\",i));){for(i=s+1;i<r&&96===e.src.charCodeAt(i);)i++;if(i-s===o.length)return t||e.push({type:\"code\",content:e.src.slice(a,s).replace(/[ \\n]+/g,\" \").trim(),block:!1,level:e.level}),e.pos=i,!0}return t||(e.pending+=o),e.pos+=o.length,!0}],[\"del\",function(e,t){var n,r,o,s,i,a=e.posMax,l=e.pos;if(126!==e.src.charCodeAt(l))return!1;if(t)return!1;if(l+4>=a)return!1;if(126!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=l>0?e.src.charCodeAt(l-1):-1,i=e.src.charCodeAt(l+2),126===s)return!1;if(126===i)return!1;if(32===i||10===i)return!1;for(r=l+2;r<a&&126===e.src.charCodeAt(r);)r++;if(r>l+3)return e.pos+=r-l,t||(e.pending+=e.src.slice(l,r)),!0;for(e.pos=l+2,o=1;e.pos+1<a;){if(126===e.src.charCodeAt(e.pos)&&126===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),126!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&126!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){n=!0;break}e.parser.skipToken(e)}return n?(e.posMax=e.pos,e.pos=l+2,t||(e.push({type:\"del_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"del_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=l,!1)}],[\"ins\",function(e,t){var n,r,o,s,i,a=e.posMax,l=e.pos;if(43!==e.src.charCodeAt(l))return!1;if(t)return!1;if(l+4>=a)return!1;if(43!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=l>0?e.src.charCodeAt(l-1):-1,i=e.src.charCodeAt(l+2),43===s)return!1;if(43===i)return!1;if(32===i||10===i)return!1;for(r=l+2;r<a&&43===e.src.charCodeAt(r);)r++;if(r!==l+2)return e.pos+=r-l,t||(e.pending+=e.src.slice(l,r)),!0;for(e.pos=l+2,o=1;e.pos+1<a;){if(43===e.src.charCodeAt(e.pos)&&43===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),43!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&43!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){n=!0;break}e.parser.skipToken(e)}return n?(e.posMax=e.pos,e.pos=l+2,t||(e.push({type:\"ins_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"ins_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=l,!1)}],[\"mark\",function(e,t){var n,r,o,s,i,a=e.posMax,l=e.pos;if(61!==e.src.charCodeAt(l))return!1;if(t)return!1;if(l+4>=a)return!1;if(61!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=l>0?e.src.charCodeAt(l-1):-1,i=e.src.charCodeAt(l+2),61===s)return!1;if(61===i)return!1;if(32===i||10===i)return!1;for(r=l+2;r<a&&61===e.src.charCodeAt(r);)r++;if(r!==l+2)return e.pos+=r-l,t||(e.pending+=e.src.slice(l,r)),!0;for(e.pos=l+2,o=1;e.pos+1<a;){if(61===e.src.charCodeAt(e.pos)&&61===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),61!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&61!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){n=!0;break}e.parser.skipToken(e)}return n?(e.posMax=e.pos,e.pos=l+2,t||(e.push({type:\"mark_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"mark_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=l,!1)}],[\"emphasis\",function(e,t){var n,r,o,s,i,a,l,c=e.posMax,u=e.pos,p=e.src.charCodeAt(u);if(95!==p&&42!==p)return!1;if(t)return!1;if(n=(l=ce(e,u)).delims,!l.can_open)return e.pos+=n,t||(e.pending+=e.src.slice(u,e.pos)),!0;if(e.level>=e.options.maxNesting)return!1;for(e.pos=u+n,a=[n];e.pos<c;)if(e.src.charCodeAt(e.pos)!==p)e.parser.skipToken(e);else{if(r=(l=ce(e,e.pos)).delims,l.can_close){for(s=a.pop(),i=r;s!==i;){if(i<s){a.push(s-i);break}if(i-=s,0===a.length)break;e.pos+=s,s=a.pop()}if(0===a.length){n=s,o=!0;break}e.pos+=r;continue}l.can_open&&a.push(r),e.pos+=r}return o?(e.posMax=e.pos,e.pos=u+n,t||(2!==n&&3!==n||e.push({type:\"strong_open\",level:e.level++}),1!==n&&3!==n||e.push({type:\"em_open\",level:e.level++}),e.parser.tokenize(e),1!==n&&3!==n||e.push({type:\"em_close\",level:--e.level}),2!==n&&3!==n||e.push({type:\"strong_close\",level:--e.level})),e.pos=e.posMax+n,e.posMax=c,!0):(e.pos=u,!1)}],[\"sub\",function(e,t){var n,r,o=e.posMax,s=e.pos;if(126!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(126===e.src.charCodeAt(e.pos)){n=!0;break}e.parser.skipToken(e)}return n&&s+1!==e.pos?(r=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sub\",level:e.level,content:r.replace(ue,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"sup\",function(e,t){var n,r,o=e.posMax,s=e.pos;if(94!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(94===e.src.charCodeAt(e.pos)){n=!0;break}e.parser.skipToken(e)}return n&&s+1!==e.pos?(r=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sup\",level:e.level,content:r.replace(pe,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"links\",function(e,t){var n,r,o,s,i,a,l,c,u=!1,p=e.pos,h=e.posMax,f=e.pos,d=e.src.charCodeAt(f);if(33===d&&(u=!0,d=e.src.charCodeAt(++f)),91!==d)return!1;if(e.level>=e.options.maxNesting)return!1;if(n=f+1,(r=k(e,f))<0)return!1;if((a=r+1)<h&&40===e.src.charCodeAt(a)){for(a++;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);if(a>=h)return!1;for(f=a,P(e,a)?(s=e.linkContent,a=e.pos):s=\"\",f=a;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);if(a<h&&f!==a&&N(e,a))for(i=e.linkContent,a=e.pos;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);else i=\"\";if(a>=h||41!==e.src.charCodeAt(a))return e.pos=p,!1;a++}else{if(e.linkLevel>0)return!1;for(;a<h&&(32===(c=e.src.charCodeAt(a))||10===c);a++);if(a<h&&91===e.src.charCodeAt(a)&&(f=a+1,(a=k(e,a))>=0?o=e.src.slice(f,a++):a=f-1),o||(void 0===o&&(a=r+1),o=e.src.slice(n,r)),!(l=e.env.references[I(o)]))return e.pos=p,!1;s=l.href,i=l.title}return t||(e.pos=n,e.posMax=r,u?e.push({type:\"image\",src:s,title:i,alt:e.src.substr(n,r-n),level:e.level}):(e.push({type:\"link_open\",href:s,title:i,level:e.level++}),e.linkLevel++,e.parser.tokenize(e),e.linkLevel--,e.push({type:\"link_close\",level:--e.level}))),e.pos=a,e.posMax=h,!0}],[\"footnote_inline\",function(e,t){var n,r,o,s,i=e.posMax,a=e.pos;return!(a+2>=i)&&(94===e.src.charCodeAt(a)&&(91===e.src.charCodeAt(a+1)&&(!(e.level>=e.options.maxNesting)&&(n=a+2,!((r=k(e,a+1))<0)&&(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),o=e.env.footnotes.list.length,e.pos=n,e.posMax=r,e.push({type:\"footnote_ref\",id:o,level:e.level}),e.linkLevel++,s=e.tokens.length,e.parser.tokenize(e),e.env.footnotes.list[o]={tokens:e.tokens.splice(s)},e.linkLevel--),e.pos=r+1,e.posMax=i,!0)))))}],[\"footnote_ref\",function(e,t){var n,r,o,s,i=e.posMax,a=e.pos;if(a+3>i)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(r=a+2;r<i;r++){if(32===e.src.charCodeAt(r))return!1;if(10===e.src.charCodeAt(r))return!1;if(93===e.src.charCodeAt(r))break}return r!==a+2&&(!(r>=i)&&(r++,n=e.src.slice(a+2,r-1),void 0!==e.env.footnotes.refs[\":\"+n]&&(t||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[\":\"+n]<0?(o=e.env.footnotes.list.length,e.env.footnotes.list[o]={label:n,count:0},e.env.footnotes.refs[\":\"+n]=o):o=e.env.footnotes.refs[\":\"+n],s=e.env.footnotes.list[o].count,e.env.footnotes.list[o].count++,e.push({type:\"footnote_ref\",id:o,subId:s,level:e.level})),e.pos=r,e.posMax=i,!0)))}],[\"autolink\",function(e,t){var n,r,o,s,i,a=e.pos;return 60===e.src.charCodeAt(a)&&(!((n=e.src.slice(a)).indexOf(\">\")<0)&&((r=n.match(de))?!(he.indexOf(r[1].toLowerCase())<0)&&(i=C(s=r[0].slice(1,-1)),!!e.parser.validateLink(s)&&(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=r[0].length,!0)):!!(o=n.match(fe))&&(i=C(\"mailto:\"+(s=o[0].slice(1,-1))),!!e.parser.validateLink(i)&&(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=o[0].length,!0))))}],[\"htmltag\",function(e,t){var n,r,o,s=e.pos;return!!e.options.html&&(o=e.posMax,!(60!==e.src.charCodeAt(s)||s+2>=o)&&(!(33!==(n=e.src.charCodeAt(s+1))&&63!==n&&47!==n&&!function(e){var t=32|e;return t>=97&&t<=122}(n))&&(!!(r=e.src.slice(s).match(be))&&(t||e.push({type:\"htmltag\",content:e.src.slice(s,s+r[0].length),level:e.level}),e.pos+=r[0].length,!0))))}],[\"entity\",function(e,t){var n,r,s=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(s))return!1;if(s+1<i)if(35===e.src.charCodeAt(s+1)){if(r=e.src.slice(s).match(we))return t||(n=\"x\"===r[1][0].toLowerCase()?parseInt(r[1].slice(1),16):parseInt(r[1],10),e.pending+=u(n)?p(n):p(65533)),e.pos+=r[0].length,!0}else if(r=e.src.slice(s).match(Ee)){var a=o(r[1]);if(r[1]!==a)return t||(e.pending+=a),e.pos+=r[0].length,!0}return t||(e.pending+=\"&\"),e.pos++,!0}]];function Se(){this.ruler=new j;for(var e=0;e<xe.length;e++)this.ruler.push(xe[e][0],xe[e][1]);this.validateLink=_e}function _e(e){var t=e.trim().toLowerCase();return-1===(t=m(t)).indexOf(\":\")||-1===[\"vbscript\",\"javascript\",\"file\",\"data\"].indexOf(t.split(\":\")[0])}Se.prototype.skipToken=function(e){var t,n,r=this.ruler.getRules(\"\"),o=r.length,s=e.pos;if((n=e.cacheGet(s))>0)e.pos=n;else{for(t=0;t<o;t++)if(r[t](e,!0))return void e.cacheSet(s,e.pos);e.pos++,e.cacheSet(s,e.pos)}},Se.prototype.tokenize=function(e){for(var t,n,r=this.ruler.getRules(\"\"),o=r.length,s=e.posMax;e.pos<s;){for(n=0;n<o&&!(t=r[n](e,!1));n++);if(t){if(e.pos>=s)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},Se.prototype.parse=function(e,t,n,r){var o=new O(e,this,t,n,r);this.tokenize(o)};var je={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"replacements\",\"smartquotes\",\"references\",\"abbr2\",\"footnote_tail\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"footnote\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\",\"table\"]},inline:{rules:[\"autolink\",\"backticks\",\"del\",\"emphasis\",\"entity\",\"escape\",\"footnote_ref\",\"htmltag\",\"links\",\"newline\",\"text\"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"abbr2\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\"]},inline:{rules:[\"autolink\",\"backticks\",\"emphasis\",\"entity\",\"escape\",\"htmltag\",\"links\",\"newline\",\"text\"]}}}};function Oe(e,t,n){this.src=t,this.env=n,this.options=e.options,this.tokens=[],this.inlineMode=!1,this.inline=e.inline,this.block=e.block,this.renderer=e.renderer,this.typographer=e.typographer}function ke(e,t){\"string\"!=typeof e&&(t=e,e=\"default\"),t&&null!=t.linkify&&console.warn(\"linkify option is removed. Use linkify plugin instead:\\n\\nimport Remarkable from 'remarkable';\\nimport linkify from 'remarkable/linkify';\\nnew Remarkable().use(linkify)\\n\"),this.inline=new Se,this.block=new te,this.core=new W,this.renderer=new _,this.ruler=new j,this.options={},this.configure(je[e]),this.set(t||{})}ke.prototype.set=function(e){a(this.options,e)},ke.prototype.configure=function(e){var t=this;if(!e)throw new Error(\"Wrong `remarkable` preset, check name/content\");e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach((function(n){e.components[n].rules&&t[n].ruler.enable(e.components[n].rules,!0)}))},ke.prototype.use=function(e,t){return e(this,t),this},ke.prototype.parse=function(e,t){var n=new Oe(this,e,t);return this.core.process(n),n.tokens},ke.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},ke.prototype.parseInline=function(e,t){var n=new Oe(this,e,t);return n.inlineMode=!0,this.core.process(n),n.tokens},ke.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)}},96464:e=>{\"use strict\";var t,n=\"\";e.exports=function(e,r){if(\"string\"!=typeof e)throw new TypeError(\"expected a string\");if(1===r)return e;if(2===r)return e+e;var o=e.length*r;if(t!==e||void 0===t)t=e,n=\"\";else if(n.length>=o)return n.substr(0,o);for(;o>n.length&&r>1;)1&r&&(n+=e),r>>=1,e+=e;return n=(n+=e).substr(0,o)}},47418:e=>{\"use strict\";e.exports=function(e,t){if(t=t.split(\":\")[0],!(e=+e))return!1;switch(t){case\"http\":case\"ws\":return 80!==e;case\"https\":case\"wss\":return 443!==e;case\"ftp\":return 21!==e;case\"gopher\":return 70!==e;case\"file\":return!1}return 0!==e}},20573:(e,t,n)=>{\"use strict\";n.d(t,{P1:()=>a});var r=\"NOT_FOUND\";var o=function(e,t){return e===t};function s(e,t){var n=\"object\"==typeof t?t:{equalityCheck:t},s=n.equalityCheck,i=void 0===s?o:s,a=n.maxSize,l=void 0===a?1:a,c=n.resultEqualityCheck,u=function(e){return function(t,n){if(null===t||null===n||t.length!==n.length)return!1;for(var r=t.length,o=0;o<r;o++)if(!e(t[o],n[o]))return!1;return!0}}(i),p=1===l?function(e){var t;return{get:function(n){return t&&e(t.key,n)?t.value:r},put:function(e,n){t={key:e,value:n}},getEntries:function(){return t?[t]:[]},clear:function(){t=void 0}}}(u):function(e,t){var n=[];function o(e){var o=n.findIndex((function(n){return t(e,n.key)}));if(o>-1){var s=n[o];return o>0&&(n.splice(o,1),n.unshift(s)),s.value}return r}return{get:o,put:function(t,s){o(t)===r&&(n.unshift({key:t,value:s}),n.length>e&&n.pop())},getEntries:function(){return n},clear:function(){n=[]}}}(l,u);function h(){var t=p.get(arguments);if(t===r){if(t=e.apply(null,arguments),c){var n=p.getEntries().find((function(e){return c(e.value,t)}));n&&(t=n.value)}p.put(arguments,t)}return t}return h.clearCache=function(){return p.clear()},h}function i(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return function(){for(var t=arguments.length,r=new Array(t),o=0;o<t;o++)r[o]=arguments[o];var s,i=0,a={memoizeOptions:void 0},l=r.pop();if(\"object\"==typeof l&&(a=l,l=r.pop()),\"function\"!=typeof l)throw new Error(\"createSelector expects an output function after the inputs, but received: [\"+typeof l+\"]\");var c=a.memoizeOptions,u=void 0===c?n:c,p=Array.isArray(u)?u:[u],h=function(e){var t=Array.isArray(e[0])?e[0]:e;if(!t.every((function(e){return\"function\"==typeof e}))){var n=t.map((function(e){return\"function\"==typeof e?\"function \"+(e.name||\"unnamed\")+\"()\":typeof e})).join(\", \");throw new Error(\"createSelector expects all input-selectors to be functions, but received the following types: [\"+n+\"]\")}return t}(r),f=e.apply(void 0,[function(){return i++,l.apply(null,arguments)}].concat(p)),d=e((function(){for(var e=[],t=h.length,n=0;n<t;n++)e.push(h[n].apply(null,arguments));return s=f.apply(null,e)}));return Object.assign(d,{resultFunc:l,memoizedResultFunc:f,dependencies:h,lastResult:function(){return s},recomputations:function(){return i},resetRecomputations:function(){return i=0}}),d}}var a=i(s)},60697:(e,t,n)=>{const r=n(86245),o=n(30504),s=n(94992),i=n(82407);e.exports=e=>{var t,n,a=0,l={type:o.ROOT,stack:[]},c=l,u=l.stack,p=[],h=t=>{r.error(e,\"Nothing to repeat at column \"+(t-1))},f=r.strToChars(e);for(t=f.length;a<t;)switch(n=f[a++]){case\"\\\\\":switch(n=f[a++]){case\"b\":u.push(i.wordBoundary());break;case\"B\":u.push(i.nonWordBoundary());break;case\"w\":u.push(s.words());break;case\"W\":u.push(s.notWords());break;case\"d\":u.push(s.ints());break;case\"D\":u.push(s.notInts());break;case\"s\":u.push(s.whitespace());break;case\"S\":u.push(s.notWhitespace());break;default:/\\d/.test(n)?u.push({type:o.REFERENCE,value:parseInt(n,10)}):u.push({type:o.CHAR,value:n.charCodeAt(0)})}break;case\"^\":u.push(i.begin());break;case\"$\":u.push(i.end());break;case\"[\":var d;\"^\"===f[a]?(d=!0,a++):d=!1;var m=r.tokenizeClass(f.slice(a),e);a+=m[1],u.push({type:o.SET,set:m[0],not:d});break;case\".\":u.push(s.anyChar());break;case\"(\":var g={type:o.GROUP,stack:[],remember:!0};\"?\"===(n=f[a])&&(n=f[a+1],a+=2,\"=\"===n?g.followedBy=!0:\"!\"===n?g.notFollowedBy=!0:\":\"!==n&&r.error(e,`Invalid group, character '${n}' after '?' at column `+(a-1)),g.remember=!1),u.push(g),p.push(c),c=g,u=g.stack;break;case\")\":0===p.length&&r.error(e,\"Unmatched ) at column \"+(a-1)),u=(c=p.pop()).options?c.options[c.options.length-1]:c.stack;break;case\"|\":c.options||(c.options=[c.stack],delete c.stack);var y=[];c.options.push(y),u=y;break;case\"{\":var v,b,w=/^(\\d+)(,(\\d+)?)?\\}/.exec(f.slice(a));null!==w?(0===u.length&&h(a),v=parseInt(w[1],10),b=w[2]?w[3]?parseInt(w[3],10):1/0:v,a+=w[0].length,u.push({type:o.REPETITION,min:v,max:b,value:u.pop()})):u.push({type:o.CHAR,value:123});break;case\"?\":0===u.length&&h(a),u.push({type:o.REPETITION,min:0,max:1,value:u.pop()});break;case\"+\":0===u.length&&h(a),u.push({type:o.REPETITION,min:1,max:1/0,value:u.pop()});break;case\"*\":0===u.length&&h(a),u.push({type:o.REPETITION,min:0,max:1/0,value:u.pop()});break;default:u.push({type:o.CHAR,value:n.charCodeAt(0)})}return 0!==p.length&&r.error(e,\"Unterminated group\"),l},e.exports.types=o},82407:(e,t,n)=>{const r=n(30504);t.wordBoundary=()=>({type:r.POSITION,value:\"b\"}),t.nonWordBoundary=()=>({type:r.POSITION,value:\"B\"}),t.begin=()=>({type:r.POSITION,value:\"^\"}),t.end=()=>({type:r.POSITION,value:\"$\"})},94992:(e,t,n)=>{const r=n(30504),o=()=>[{type:r.RANGE,from:48,to:57}],s=()=>[{type:r.CHAR,value:95},{type:r.RANGE,from:97,to:122},{type:r.RANGE,from:65,to:90}].concat(o()),i=()=>[{type:r.CHAR,value:9},{type:r.CHAR,value:10},{type:r.CHAR,value:11},{type:r.CHAR,value:12},{type:r.CHAR,value:13},{type:r.CHAR,value:32},{type:r.CHAR,value:160},{type:r.CHAR,value:5760},{type:r.RANGE,from:8192,to:8202},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233},{type:r.CHAR,value:8239},{type:r.CHAR,value:8287},{type:r.CHAR,value:12288},{type:r.CHAR,value:65279}];t.words=()=>({type:r.SET,set:s(),not:!1}),t.notWords=()=>({type:r.SET,set:s(),not:!0}),t.ints=()=>({type:r.SET,set:o(),not:!1}),t.notInts=()=>({type:r.SET,set:o(),not:!0}),t.whitespace=()=>({type:r.SET,set:i(),not:!1}),t.notWhitespace=()=>({type:r.SET,set:i(),not:!0}),t.anyChar=()=>({type:r.SET,set:[{type:r.CHAR,value:10},{type:r.CHAR,value:13},{type:r.CHAR,value:8232},{type:r.CHAR,value:8233}],not:!0})},30504:e=>{e.exports={ROOT:0,GROUP:1,POSITION:2,SET:3,RANGE:4,REPETITION:5,REFERENCE:6,CHAR:7}},86245:(e,t,n)=>{const r=n(30504),o=n(94992),s={0:0,t:9,n:10,v:11,f:12,r:13};t.strToChars=function(e){return e=e.replace(/(\\[\\\\b\\])|(\\\\)?\\\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z[\\\\\\]^?])|([0tnvfr]))/g,(function(e,t,n,r,o,i,a,l){if(n)return e;var c=t?8:r?parseInt(r,16):o?parseInt(o,16):i?parseInt(i,8):a?\"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^ ?\".indexOf(a):s[l],u=String.fromCharCode(c);return/[[\\]{}^$.|?*+()]/.test(u)&&(u=\"\\\\\"+u),u}))},t.tokenizeClass=(e,n)=>{for(var s,i,a=[],l=/\\\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\\\)(.)|([^\\]\\\\]))-(?:\\\\)?([^\\]]))|(\\])|(?:\\\\)?([^])/g;null!=(s=l.exec(e));)if(s[1])a.push(o.words());else if(s[2])a.push(o.ints());else if(s[3])a.push(o.whitespace());else if(s[4])a.push(o.notWords());else if(s[5])a.push(o.notInts());else if(s[6])a.push(o.notWhitespace());else if(s[7])a.push({type:r.RANGE,from:(s[8]||s[9]).charCodeAt(0),to:s[10].charCodeAt(0)});else{if(!(i=s[12]))return[a,l.lastIndex];a.push({type:r.CHAR,value:i.charCodeAt(0)})}t.error(n,\"Unterminated character class\")},t.error=(e,t)=>{throw new SyntaxError(\"Invalid regular expression: /\"+e+\"/: \"+t)}},89509:(e,t,n)=>{var r=n(48764),o=r.Buffer;function s(e,t){for(var n in e)t[n]=e[n]}function i(e,t,n){return o(e,t,n)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=r:(s(r,t),t.Buffer=i),i.prototype=Object.create(o.prototype),s(o,i),i.from=function(e,t,n){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return o(e,t,n)},i.alloc=function(e,t,n){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var r=o(e);return void 0!==t?\"string\"==typeof n?r.fill(t,n):r.fill(t):r.fill(0),r},i.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return o(e)},i.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return r.SlowBuffer(e)}},60053:(e,t)=>{\"use strict\";var n,r,o,s;if(\"object\"==typeof performance&&\"function\"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var a=Date,l=a.now();t.unstable_now=function(){return a.now()-l}}if(\"undefined\"==typeof window||\"function\"!=typeof MessageChannel){var c=null,u=null,p=function(){if(null!==c)try{var e=t.unstable_now();c(!0,e),c=null}catch(e){throw setTimeout(p,0),e}};n=function(e){null!==c?setTimeout(n,0,e):(c=e,setTimeout(p,0))},r=function(e,t){u=setTimeout(e,t)},o=function(){clearTimeout(u)},t.unstable_shouldYield=function(){return!1},s=t.unstable_forceFrameRate=function(){}}else{var h=window.setTimeout,f=window.clearTimeout;if(\"undefined\"!=typeof console){var d=window.cancelAnimationFrame;\"function\"!=typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\"),\"function\"!=typeof d&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var m=!1,g=null,y=-1,v=5,b=0;t.unstable_shouldYield=function(){return t.unstable_now()>=b},s=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):v=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,E=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();b=e+v;try{g(!0,e)?E.postMessage(null):(m=!1,g=null)}catch(e){throw E.postMessage(null),e}}else m=!1},n=function(e){g=e,m||(m=!0,E.postMessage(null))},r=function(e,n){y=h((function(){e(t.unstable_now())}),n)},o=function(){f(y),y=-1}}function x(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<j(o,t)))break e;e[r]=t,e[n]=o,n=r}}function S(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var s=2*(r+1)-1,i=e[s],a=s+1,l=e[a];if(void 0!==i&&0>j(i,n))void 0!==l&&0>j(l,i)?(e[r]=l,e[a]=n,r=a):(e[r]=i,e[s]=n,r=s);else{if(!(void 0!==l&&0>j(l,n)))break e;e[r]=l,e[a]=n,r=a}}}return t}return null}function j(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],k=[],A=1,C=null,P=3,N=!1,I=!1,T=!1;function R(e){for(var t=S(k);null!==t;){if(null===t.callback)_(k);else{if(!(t.startTime<=e))break;_(k),t.sortIndex=t.expirationTime,x(O,t)}t=S(k)}}function M(e){if(T=!1,R(e),!I)if(null!==S(O))I=!0,n(D);else{var t=S(k);null!==t&&r(M,t.startTime-e)}}function D(e,n){I=!1,T&&(T=!1,o()),N=!0;var s=P;try{for(R(n),C=S(O);null!==C&&(!(C.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=C.callback;if(\"function\"==typeof i){C.callback=null,P=C.priorityLevel;var a=i(C.expirationTime<=n);n=t.unstable_now(),\"function\"==typeof a?C.callback=a:C===S(O)&&_(O),R(n)}else _(O);C=S(O)}if(null!==C)var l=!0;else{var c=S(k);null!==c&&r(M,c.startTime-n),l=!1}return l}finally{C=null,P=s,N=!1}}var F=s;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){I||N||(I=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return P},t.unstable_getFirstCallbackNode=function(){return S(O)},t.unstable_next=function(e){switch(P){case 1:case 2:case 3:var t=3;break;default:t=P}var n=P;P=t;try{return e()}finally{P=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=F,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=P;P=e;try{return t()}finally{P=n}},t.unstable_scheduleCallback=function(e,s,i){var a=t.unstable_now();switch(\"object\"==typeof i&&null!==i?i=\"number\"==typeof(i=i.delay)&&0<i?a+i:a:i=a,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:A++,callback:s,priorityLevel:e,startTime:i,expirationTime:l=i+l,sortIndex:-1},i>a?(e.sortIndex=i,x(k,e),null===S(O)&&e===S(k)&&(T?o():T=!0,r(M,i-a))):(e.sortIndex=l,x(O,e),I||N||(I=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=P;return function(){var n=P;P=t;try{return e.apply(this,arguments)}finally{P=n}}}},63840:(e,t,n)=>{\"use strict\";e.exports=n(60053)},7710:(e,t,n)=>{\"use strict\";var r=n(48764).Buffer;class o extends Error{constructor(e){super(o._prepareSuperMessage(e)),Object.defineProperty(this,\"name\",{value:\"NonError\",configurable:!0,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(this,o)}static _prepareSuperMessage(e){try{return JSON.stringify(e)}catch{return String(e)}}}const s=[{property:\"name\",enumerable:!1},{property:\"message\",enumerable:!1},{property:\"stack\",enumerable:!1},{property:\"code\",enumerable:!0}],i=Symbol(\".toJSON called\"),a=({from:e,seen:t,to_:n,forceEnumerable:o,maxDepth:l,depth:c})=>{const u=n||(Array.isArray(e)?[]:{});if(t.push(e),c>=l)return u;if(\"function\"==typeof e.toJSON&&!0!==e[i])return(e=>{e[i]=!0;const t=e.toJSON();return delete e[i],t})(e);for(const[n,s]of Object.entries(e))\"function\"==typeof r&&r.isBuffer(s)?u[n]=\"[object Buffer]\":\"function\"!=typeof s&&(s&&\"object\"==typeof s?t.includes(e[n])?u[n]=\"[Circular]\":(c++,u[n]=a({from:e[n],seen:t.slice(),forceEnumerable:o,maxDepth:l,depth:c})):u[n]=s);for(const{property:t,enumerable:n}of s)\"string\"==typeof e[t]&&Object.defineProperty(u,t,{value:e[t],enumerable:!!o||n,configurable:!0,writable:!0});return u};e.exports={serializeError:(e,t={})=>{const{maxDepth:n=Number.POSITIVE_INFINITY}=t;return\"object\"==typeof e&&null!==e?a({from:e,seen:[],forceEnumerable:!0,maxDepth:n,depth:0}):\"function\"==typeof e?`[Function: ${e.name||\"anonymous\"}]`:e},deserializeError:(e,t={})=>{const{maxDepth:n=Number.POSITIVE_INFINITY}=t;if(e instanceof Error)return e;if(\"object\"==typeof e&&null!==e&&!Array.isArray(e)){const t=new Error;return a({from:e,seen:[],to_:t,maxDepth:n,depth:0}),t}return new o(e)}}},24189:(e,t,n)=>{var r=n(89509).Buffer;function o(e,t){this._block=r.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}o.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=r.from(e,t));for(var n=this._block,o=this._blockSize,s=e.length,i=this._len,a=0;a<s;){for(var l=i%o,c=Math.min(s-a,o-l),u=0;u<c;u++)n[l+u]=e[a+u];a+=c,(i+=c)%o==0&&this._update(n)}return this._len+=s,this},o.prototype.digest=function(e){var t=this._len%this._blockSize;this._block[t]=128,this._block.fill(0,t+1),t>=this._finalSize&&(this._update(this._block),this._block.fill(0));var n=8*this._len;if(n<=4294967295)this._block.writeUInt32BE(n,this._blockSize-4);else{var r=(4294967295&n)>>>0,o=(n-r)/4294967296;this._block.writeUInt32BE(o,this._blockSize-8),this._block.writeUInt32BE(r,this._blockSize-4)}this._update(this._block);var s=this._hash();return e?s.toString(e):s},o.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},e.exports=o},89072:(e,t,n)=>{var r=e.exports=function(e){e=e.toLowerCase();var t=r[e];if(!t)throw new Error(e+\" is not supported (we accept pull requests)\");return new t};r.sha=n(74448),r.sha1=n(18336),r.sha224=n(48432),r.sha256=n(67499),r.sha384=n(51686),r.sha512=n(87816)},74448:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function l(){this.init(),this._w=a,o.call(this,64,56)}function c(e){return e<<30|e>>>2}function u(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}r(l,o),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,o=0|this._b,s=0|this._c,a=0|this._d,l=0|this._e,p=0;p<16;++p)n[p]=e.readInt32BE(4*p);for(;p<80;++p)n[p]=n[p-3]^n[p-8]^n[p-14]^n[p-16];for(var h=0;h<80;++h){var f=~~(h/20),d=0|((t=r)<<5|t>>>27)+u(f,o,s,a)+l+n[h]+i[f];l=a,a=s,s=c(o),o=r,r=d}this._a=r+this._a|0,this._b=o+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=l+this._e|0},l.prototype._hash=function(){var e=s.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=l},18336:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1518500249,1859775393,-1894007588,-899497514],a=new Array(80);function l(){this.init(),this._w=a,o.call(this,64,56)}function c(e){return e<<5|e>>>27}function u(e){return e<<30|e>>>2}function p(e,t,n,r){return 0===e?t&n|~t&r:2===e?t&n|t&r|n&r:t^n^r}r(l,o),l.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},l.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,o=0|this._b,s=0|this._c,a=0|this._d,l=0|this._e,h=0;h<16;++h)n[h]=e.readInt32BE(4*h);for(;h<80;++h)n[h]=(t=n[h-3]^n[h-8]^n[h-14]^n[h-16])<<1|t>>>31;for(var f=0;f<80;++f){var d=~~(f/20),m=c(r)+p(d,o,s,a)+l+n[f]+i[d]|0;l=a,a=s,s=u(o),o=r,r=m}this._a=r+this._a|0,this._b=o+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=l+this._e|0},l.prototype._hash=function(){var e=s.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},e.exports=l},48432:(e,t,n)=>{var r=n(35717),o=n(67499),s=n(24189),i=n(89509).Buffer,a=new Array(64);function l(){this.init(),this._w=a,s.call(this,64,56)}r(l,o),l.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},l.prototype._hash=function(){var e=i.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},e.exports=l},67499:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],a=new Array(64);function l(){this.init(),this._w=a,o.call(this,64,56)}function c(e,t,n){return n^e&(t^n)}function u(e,t,n){return e&t|n&(e|t)}function p(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function h(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function f(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}r(l,o),l.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},l.prototype._update=function(e){for(var t,n=this._w,r=0|this._a,o=0|this._b,s=0|this._c,a=0|this._d,l=0|this._e,d=0|this._f,m=0|this._g,g=0|this._h,y=0;y<16;++y)n[y]=e.readInt32BE(4*y);for(;y<64;++y)n[y]=0|(((t=n[y-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+n[y-7]+f(n[y-15])+n[y-16];for(var v=0;v<64;++v){var b=g+h(l)+c(l,d,m)+i[v]+n[v]|0,w=p(r)+u(r,o,s)|0;g=m,m=d,d=l,l=a+b|0,a=s,s=o,o=r,r=b+w|0}this._a=r+this._a|0,this._b=o+this._b|0,this._c=s+this._c|0,this._d=a+this._d|0,this._e=l+this._e|0,this._f=d+this._f|0,this._g=m+this._g|0,this._h=g+this._h|0},l.prototype._hash=function(){var e=s.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},e.exports=l},51686:(e,t,n)=>{var r=n(35717),o=n(87816),s=n(24189),i=n(89509).Buffer,a=new Array(160);function l(){this.init(),this._w=a,s.call(this,128,112)}r(l,o),l.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},l.prototype._hash=function(){var e=i.allocUnsafe(48);function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},e.exports=l},87816:(e,t,n)=>{var r=n(35717),o=n(24189),s=n(89509).Buffer,i=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],a=new Array(160);function l(){this.init(),this._w=a,o.call(this,128,112)}function c(e,t,n){return n^e&(t^n)}function u(e,t,n){return e&t|n&(e|t)}function p(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function h(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function f(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function g(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function y(e,t){return e>>>0<t>>>0?1:0}r(l,o),l.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},l.prototype._update=function(e){for(var t=this._w,n=0|this._ah,r=0|this._bh,o=0|this._ch,s=0|this._dh,a=0|this._eh,l=0|this._fh,v=0|this._gh,b=0|this._hh,w=0|this._al,E=0|this._bl,x=0|this._cl,S=0|this._dl,_=0|this._el,j=0|this._fl,O=0|this._gl,k=0|this._hl,A=0;A<32;A+=2)t[A]=e.readInt32BE(4*A),t[A+1]=e.readInt32BE(4*A+4);for(;A<160;A+=2){var C=t[A-30],P=t[A-30+1],N=f(C,P),I=d(P,C),T=m(C=t[A-4],P=t[A-4+1]),R=g(P,C),M=t[A-14],D=t[A-14+1],F=t[A-32],L=t[A-32+1],B=I+D|0,$=N+M+y(B,I)|0;$=($=$+T+y(B=B+R|0,R)|0)+F+y(B=B+L|0,L)|0,t[A]=$,t[A+1]=B}for(var q=0;q<160;q+=2){$=t[q],B=t[q+1];var U=u(n,r,o),z=u(w,E,x),V=p(n,w),W=p(w,n),J=h(a,_),K=h(_,a),H=i[q],G=i[q+1],Z=c(a,l,v),Y=c(_,j,O),X=k+K|0,Q=b+J+y(X,k)|0;Q=(Q=(Q=Q+Z+y(X=X+Y|0,Y)|0)+H+y(X=X+G|0,G)|0)+$+y(X=X+B|0,B)|0;var ee=W+z|0,te=V+U+y(ee,W)|0;b=v,k=O,v=l,O=j,l=a,j=_,a=s+Q+y(_=S+X|0,S)|0,s=o,S=x,o=r,x=E,r=n,E=w,n=Q+te+y(w=X+ee|0,X)|0}this._al=this._al+w|0,this._bl=this._bl+E|0,this._cl=this._cl+x|0,this._dl=this._dl+S|0,this._el=this._el+_|0,this._fl=this._fl+j|0,this._gl=this._gl+O|0,this._hl=this._hl+k|0,this._ah=this._ah+n+y(this._al,w)|0,this._bh=this._bh+r+y(this._bl,E)|0,this._ch=this._ch+o+y(this._cl,x)|0,this._dh=this._dh+s+y(this._dl,S)|0,this._eh=this._eh+a+y(this._el,_)|0,this._fh=this._fh+l+y(this._fl,j)|0,this._gh=this._gh+v+y(this._gl,O)|0,this._hh=this._hh+b+y(this._hl,k)|0},l.prototype._hash=function(){var e=s.allocUnsafe(64);function t(t,n,r){e.writeInt32BE(t,r),e.writeInt32BE(n,r+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},e.exports=l},37478:(e,t,n)=>{\"use strict\";var r=n(40210),o=n(21924),s=n(70631),i=r(\"%TypeError%\"),a=r(\"%WeakMap%\",!0),l=r(\"%Map%\",!0),c=o(\"WeakMap.prototype.get\",!0),u=o(\"WeakMap.prototype.set\",!0),p=o(\"WeakMap.prototype.has\",!0),h=o(\"Map.prototype.get\",!0),f=o(\"Map.prototype.set\",!0),d=o(\"Map.prototype.has\",!0),m=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n};e.exports=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new i(\"Side channel does not contain \"+s(e))},get:function(r){if(a&&r&&(\"object\"==typeof r||\"function\"==typeof r)){if(e)return c(e,r)}else if(l){if(t)return h(t,r)}else if(n)return function(e,t){var n=m(e,t);return n&&n.value}(n,r)},has:function(r){if(a&&r&&(\"object\"==typeof r||\"function\"==typeof r)){if(e)return p(e,r)}else if(l){if(t)return d(t,r)}else if(n)return function(e,t){return!!m(e,t)}(n,r);return!1},set:function(r,o){a&&r&&(\"object\"==typeof r||\"function\"==typeof r)?(e||(e=new a),u(e,r,o)):l?(t||(t=new l),f(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=m(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r}},43992:e=>{!function(){\"use strict\";var t,n,r,o,s,i=\"properties\",a=\"deepProperties\",l=\"propertyDescriptors\",c=\"staticProperties\",u=\"staticDeepProperties\",p=\"staticPropertyDescriptors\",h=\"configuration\",f=\"deepConfiguration\",d=\"deepProps\",m=\"deepStatics\",g=\"deepConf\",y=\"initializers\",v=\"methods\",b=\"composers\",w=\"compose\";function E(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e):[])}function x(e,t){return Array.prototype.slice.call(arguments,2).reduce(e,t)}var S=x.bind(0,(function(e,t){if(t)for(var n=E(t),r=0;r<n.length;r+=1)Object.defineProperty(e,n[r],Object.getOwnPropertyDescriptor(t,n[r]));return e}));function _(e){return\"function\"==typeof e}function j(e){return e&&\"object\"==typeof e||_(e)}function O(e){return e&&\"object\"==typeof e&&e.__proto__==Object.prototype}var k=x.bind(0,(function e(n,r){if(r===t)return n;if(Array.isArray(r))return(Array.isArray(n)?n:[]).concat(r);if(!O(r))return r;for(var o,s,i=E(r),a=0;a<i.length;)o=i[a++],(s=Object.getOwnPropertyDescriptor(r,o)).hasOwnProperty(\"value\")?s.value!==t&&(n[o]=e(O(n[o])||Array.isArray(r[o])?n[o]:{},r[o])):Object.defineProperty(n,o,s);return n}));function A(){return(n=Array.prototype.concat.apply([],arguments).filter((function(e,t,n){return _(e)&&n.indexOf(e)===t}))).length?n:t}function C(e,t){function r(n,r){j(t[n])&&(j(e[n])||(e[n]={}),(r||S)(e[n],t[n]))}function o(r){(n=A(e[r],t[r]))&&(e[r]=n)}return t&&j(t=t[w]||t)&&(r(v),r(i),r(a,k),r(l),r(c),r(u,k),r(p),r(h),r(f,k),o(y),o(b)),e}function P(){return function(e){return n=function e(n){var r,o,s=e[w]||{},c={__proto__:s[v]},u=s[y],p=Array.prototype.slice.apply(arguments),h=s[a];if(h&&k(c,h),(h=s[i])&&S(c,h),(h=s[l])&&Object.defineProperties(c,h),!u||!u.length)return c;for(n===t&&(n={}),s=0;s<u.length;)_(r=u[s++])&&(c=(o=r.call(c,n,{instance:c,stamp:e,args:p}))===t?c:o);return c},(r=e[u])&&k(n,r),(r=e[c])&&S(n,r),(r=e[p])&&Object.defineProperties(n,r),r=_(n[w])?n[w]:P,S(n[w]=function(){return r.apply(this,arguments)},e),n}(Array.prototype.concat.apply([this],arguments).reduce(C,{}))}function N(e){return _(e)&&_(e[w])}var I={};function T(e,s){return function(){return(o={})[e]=s.apply(t,Array.prototype.concat.apply([{}],arguments)),((n=this)&&n[w]||r).call(n,o)}}I[v]=T(v,S),I[i]=I.props=T(i,S),I[y]=I.init=T(y,A),I[b]=T(b,A),I[a]=I[d]=T(a,k),I[c]=I.statics=T(c,S),I[u]=I[m]=T(u,k),I[h]=I.conf=T(h,S),I[f]=I[g]=T(f,k),I[l]=T(l,S),I[p]=T(p,S),r=I[w]=S((function(){for(var e,E,x=0,_=[],O=arguments,C=this;x<O.length;)j(e=O[x++])&&_.push(N(e)?e:((o={})[v]=(E=e)[v]||t,r=E.props,o[i]=j((n=E[i])||r)?S({},r,n):t,o[y]=A(E.init,E[y]),o[b]=A(E[b]),r=E[d],o[a]=j((n=E[a])||r)?k({},r,n):t,o[l]=E[l],r=E.statics,o[c]=j((n=E[c])||r)?S({},r,n):t,r=E[m],o[u]=j((n=E[u])||r)?k({},r,n):t,n=E[p],o[p]=j((r=E.name&&{name:{value:E.name}})||n)?S({},n,r):t,r=E.conf,o[h]=j((n=E[h])||r)?S({},r,n):t,r=E[g],o[f]=j((n=E[f])||r)?k({},r,n):t,o));if(e=P.apply(C||s,_),C&&_.unshift(C),Array.isArray(O=e[w][b]))for(x=0;x<O.length;)e=N(C=O[x++]({stamp:e,composables:_}))?C:e;return e}),I),I.create=function(){return this.apply(t,arguments)},(o={})[c]=I,s=P(o),r[w]=r.bind(),r.version=\"4.3.2\",\"object\"!=typeof t?e.exports=r:self.stampit=r}()},42830:(e,t,n)=>{e.exports=o;var r=n(17187).EventEmitter;function o(){r.call(this)}n(35717)(o,r),o.Readable=n(79481),o.Writable=n(64229),o.Duplex=n(56753),o.Transform=n(74605),o.PassThrough=n(82725),o.finished=n(8610),o.pipeline=n(59946),o.Stream=o,o.prototype.pipe=function(e,t){var n=this;function o(t){e.writable&&!1===e.write(t)&&n.pause&&n.pause()}function s(){n.readable&&n.resume&&n.resume()}n.on(\"data\",o),e.on(\"drain\",s),e._isStdio||t&&!1===t.end||(n.on(\"end\",a),n.on(\"close\",l));var i=!1;function a(){i||(i=!0,e.end())}function l(){i||(i=!0,\"function\"==typeof e.destroy&&e.destroy())}function c(e){if(u(),0===r.listenerCount(this,\"error\"))throw e}function u(){n.removeListener(\"data\",o),e.removeListener(\"drain\",s),n.removeListener(\"end\",a),n.removeListener(\"close\",l),n.removeListener(\"error\",c),e.removeListener(\"error\",c),n.removeListener(\"end\",u),n.removeListener(\"close\",u),e.removeListener(\"close\",u)}return n.on(\"error\",c),e.on(\"error\",c),n.on(\"end\",u),n.on(\"close\",u),e.on(\"close\",u),e.emit(\"pipe\",n),e}},32553:(e,t,n)=>{\"use strict\";var r=n(89509).Buffer,o=r.isEncoding||function(e){switch((e=\"\"+e)&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function s(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(r.isEncoding===o||!o(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=l,this.end=c,t=4;break;case\"utf8\":this.fillLast=a,t=4;break;case\"base64\":this.text=u,this.end=p,t=3;break;default:return this.write=h,void(this.end=f)}this.lastNeed=0,this.lastTotal=0,this.lastChar=r.allocUnsafe(t)}function i(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function a(e){var t=this.lastTotal-this.lastNeed,n=function(e,t,n){if(128!=(192&t[0]))return e.lastNeed=0,\"�\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"�\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"�\"}}(this,e);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){if((e.length-t)%2==0){var n=e.toString(\"utf16le\",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,n)}return t}function u(e,t){var n=(e.length-t)%3;return 0===n?e.toString(\"base64\",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-n))}function p(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function f(e){return e&&e.length?this.write(e):\"\"}t.s=s,s.prototype.write=function(e){if(0===e.length)return\"\";var t,n;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";n=this.lastNeed,this.lastNeed=0}else n=0;return n<e.length?t?t+this.text(e,n):this.text(e,n):t||\"\"},s.prototype.end=function(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+\"�\":t},s.prototype.text=function(e,t){var n=function(e,t,n){var r=t.length-1;if(r<n)return 0;var o=i(t[r]);if(o>=0)return o>0&&(e.lastNeed=o-1),o;if(--r<n||-2===o)return 0;if(o=i(t[r]),o>=0)return o>0&&(e.lastNeed=o-2),o;if(--r<n||-2===o)return 0;if(o=i(t[r]),o>=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString(\"utf8\",t,r)},s.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},32454:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>o});const r=e=>e.replace(/\\W/gi,\"_\");function o(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\",{v2OperationIdCompatibilityMode:o}=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(!e||\"object\"!=typeof e)return null;return(e.operationId||\"\").replace(/\\s/g,\"\").length?r(e.operationId):function(e,t){let{v2OperationIdCompatibilityMode:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(n){let n=`${t.toLowerCase()}_${e}`.replace(/[\\s!@#$%^&*()_+=[{\\]};:<>|./?,\\\\'\"\"-]/g,\"_\");return n=n||`${e.substring(1)}_${t}`,n.replace(/((_){2,})/g,\"_\").replace(/^(_)*/g,\"\").replace(/([_])*$/g,\"\")}return`${t.toLowerCase()}${r(e)}`}(t,n,{v2OperationIdCompatibilityMode:o})}},11742:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r<e.rangeCount;r++)n.push(e.getRangeAt(r));switch(t.tagName.toUpperCase()){case\"INPUT\":case\"TEXTAREA\":t.blur();break;default:t=null}return e.removeAllRanges(),function(){\"Caret\"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},13692:e=>{\"use strict\";function t(e){return Object.prototype.toString.call(e)}var n=Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)};function r(e,t){if(e.forEach)return e.forEach(t);for(var n=0;n<e.length;n++)t(e[n],n,e)}var o=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t},s=Object.prototype.hasOwnProperty||function(e,t){return t in e};function i(e){if(\"object\"==typeof e&&null!==e){var s;if(n(e))s=[];else if(\"[object Date]\"===t(e))s=new Date(e.getTime?e.getTime():e);else if(function(e){return\"[object RegExp]\"===t(e)}(e))s=new RegExp(e);else if(function(e){return\"[object Error]\"===t(e)}(e))s={message:e.message};else if(function(e){return\"[object Boolean]\"===t(e)}(e)||function(e){return\"[object Number]\"===t(e)}(e)||function(e){return\"[object String]\"===t(e)}(e))s=Object(e);else if(Object.create&&Object.getPrototypeOf)s=Object.create(Object.getPrototypeOf(e));else if(e.constructor===Object)s={};else{var i=e.constructor&&e.constructor.prototype||e.__proto__||{},a=function(){};a.prototype=i,s=new a}return r(o(e),(function(t){s[t]=e[t]})),s}return e}function a(e,t,a){var l=[],c=[],u=!0;return function e(p){var h=a?i(p):p,f={},d=!0,m={node:h,node_:p,path:[].concat(l),parent:c[c.length-1],parents:c,key:l[l.length-1],isRoot:0===l.length,level:l.length,circular:null,update:function(e,t){m.isRoot||(m.parent.node[m.key]=e),m.node=e,t&&(d=!1)},delete:function(e){delete m.parent.node[m.key],e&&(d=!1)},remove:function(e){n(m.parent.node)?m.parent.node.splice(m.key,1):delete m.parent.node[m.key],e&&(d=!1)},keys:null,before:function(e){f.before=e},after:function(e){f.after=e},pre:function(e){f.pre=e},post:function(e){f.post=e},stop:function(){u=!1},block:function(){d=!1}};if(!u)return m;function g(){if(\"object\"==typeof m.node&&null!==m.node){m.keys&&m.node_===m.node||(m.keys=o(m.node)),m.isLeaf=0===m.keys.length;for(var e=0;e<c.length;e++)if(c[e].node_===p){m.circular=c[e];break}}else m.isLeaf=!0,m.keys=null;m.notLeaf=!m.isLeaf,m.notRoot=!m.isRoot}g();var y=t.call(m,m.node);return void 0!==y&&m.update&&m.update(y),f.before&&f.before.call(m,m.node),d?(\"object\"!=typeof m.node||null===m.node||m.circular||(c.push(m),g(),r(m.keys,(function(t,n){l.push(t),f.pre&&f.pre.call(m,m.node[t],t);var r=e(m.node[t]);a&&s.call(m.node,t)&&(m.node[t]=r.node),r.isLast=n===m.keys.length-1,r.isFirst=0===n,f.post&&f.post.call(m,r),l.pop()})),c.pop()),f.after&&f.after.call(m,m.node),m):m}(e).node}function l(e){this.value=e}function c(e){return new l(e)}l.prototype.get=function(e){for(var t=this.value,n=0;n<e.length;n++){var r=e[n];if(!t||!s.call(t,r))return;t=t[r]}return t},l.prototype.has=function(e){for(var t=this.value,n=0;n<e.length;n++){var r=e[n];if(!t||!s.call(t,r))return!1;t=t[r]}return!0},l.prototype.set=function(e,t){for(var n=this.value,r=0;r<e.length-1;r++){var o=e[r];s.call(n,o)||(n[o]={}),n=n[o]}return n[e[r]]=t,t},l.prototype.map=function(e){return a(this.value,e,!0)},l.prototype.forEach=function(e){return this.value=a(this.value,e,!1),this.value},l.prototype.reduce=function(e,t){var n=1===arguments.length,r=n?this.value:t;return this.forEach((function(t){this.isRoot&&n||(r=e.call(this,r,t))})),r},l.prototype.paths=function(){var e=[];return this.forEach((function(){e.push(this.path)})),e},l.prototype.nodes=function(){var e=[];return this.forEach((function(){e.push(this.node)})),e},l.prototype.clone=function(){var e=[],t=[];return function n(s){for(var a=0;a<e.length;a++)if(e[a]===s)return t[a];if(\"object\"==typeof s&&null!==s){var l=i(s);return e.push(s),t.push(l),r(o(s),(function(e){l[e]=n(s[e])})),e.pop(),t.pop(),l}return s}(this.value)},r(o(l.prototype),(function(e){c[e]=function(t){var n=[].slice.call(arguments,1),r=new l(t);return r[e].apply(r,n)}})),e.exports=c},84564:(e,t,n)=>{\"use strict\";var r=n(47418),o=n(57129),s=/^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/,i=/[\\n\\r\\t]/g,a=/^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//,l=/:\\d+$/,c=/^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i,u=/^[a-zA-Z]:/;function p(e){return(e||\"\").toString().replace(s,\"\")}var h=[[\"#\",\"hash\"],[\"?\",\"query\"],function(e,t){return m(t.protocol)?e.replace(/\\\\/g,\"/\"):e},[\"/\",\"pathname\"],[\"@\",\"auth\",1],[NaN,\"host\",void 0,1,1],[/:(\\d*)$/,\"port\",void 0,1],[NaN,\"hostname\",void 0,1,1]],f={hash:1,query:1};function d(e){var t,r=(\"undefined\"!=typeof window?window:void 0!==n.g?n.g:\"undefined\"!=typeof self?self:{}).location||{},o={},s=typeof(e=e||r);if(\"blob:\"===e.protocol)o=new y(unescape(e.pathname),{});else if(\"string\"===s)for(t in o=new y(e,{}),f)delete o[t];else if(\"object\"===s){for(t in e)t in f||(o[t]=e[t]);void 0===o.slashes&&(o.slashes=a.test(e.href))}return o}function m(e){return\"file:\"===e||\"ftp:\"===e||\"http:\"===e||\"https:\"===e||\"ws:\"===e||\"wss:\"===e}function g(e,t){e=(e=p(e)).replace(i,\"\"),t=t||{};var n,r=c.exec(e),o=r[1]?r[1].toLowerCase():\"\",s=!!r[2],a=!!r[3],l=0;return s?a?(n=r[2]+r[3]+r[4],l=r[2].length+r[3].length):(n=r[2]+r[4],l=r[2].length):a?(n=r[3]+r[4],l=r[3].length):n=r[4],\"file:\"===o?l>=2&&(n=n.slice(2)):m(o)?n=r[4]:o?s&&(n=n.slice(2)):l>=2&&m(t.protocol)&&(n=r[4]),{protocol:o,slashes:s||m(o),slashesCount:l,rest:n}}function y(e,t,n){if(e=(e=p(e)).replace(i,\"\"),!(this instanceof y))return new y(e,t,n);var s,a,l,c,f,v,b=h.slice(),w=typeof t,E=this,x=0;for(\"object\"!==w&&\"string\"!==w&&(n=t,t=null),n&&\"function\"!=typeof n&&(n=o.parse),s=!(a=g(e||\"\",t=d(t))).protocol&&!a.slashes,E.slashes=a.slashes||s&&t.slashes,E.protocol=a.protocol||t.protocol||\"\",e=a.rest,(\"file:\"===a.protocol&&(2!==a.slashesCount||u.test(e))||!a.slashes&&(a.protocol||a.slashesCount<2||!m(E.protocol)))&&(b[3]=[/(.*)/,\"pathname\"]);x<b.length;x++)\"function\"!=typeof(c=b[x])?(l=c[0],v=c[1],l!=l?E[v]=e:\"string\"==typeof l?~(f=\"@\"===l?e.lastIndexOf(l):e.indexOf(l))&&(\"number\"==typeof c[2]?(E[v]=e.slice(0,f),e=e.slice(f+c[2])):(E[v]=e.slice(f),e=e.slice(0,f))):(f=l.exec(e))&&(E[v]=f[1],e=e.slice(0,f.index)),E[v]=E[v]||s&&c[3]&&t[v]||\"\",c[4]&&(E[v]=E[v].toLowerCase())):e=c(e,E);n&&(E.query=n(E.query)),s&&t.slashes&&\"/\"!==E.pathname.charAt(0)&&(\"\"!==E.pathname||\"\"!==t.pathname)&&(E.pathname=function(e,t){if(\"\"===e)return t;for(var n=(t||\"/\").split(\"/\").slice(0,-1).concat(e.split(\"/\")),r=n.length,o=n[r-1],s=!1,i=0;r--;)\".\"===n[r]?n.splice(r,1):\"..\"===n[r]?(n.splice(r,1),i++):i&&(0===r&&(s=!0),n.splice(r,1),i--);return s&&n.unshift(\"\"),\".\"!==o&&\"..\"!==o||n.push(\"\"),n.join(\"/\")}(E.pathname,t.pathname)),\"/\"!==E.pathname.charAt(0)&&m(E.protocol)&&(E.pathname=\"/\"+E.pathname),r(E.port,E.protocol)||(E.host=E.hostname,E.port=\"\"),E.username=E.password=\"\",E.auth&&(~(f=E.auth.indexOf(\":\"))?(E.username=E.auth.slice(0,f),E.username=encodeURIComponent(decodeURIComponent(E.username)),E.password=E.auth.slice(f+1),E.password=encodeURIComponent(decodeURIComponent(E.password))):E.username=encodeURIComponent(decodeURIComponent(E.auth)),E.auth=E.password?E.username+\":\"+E.password:E.username),E.origin=\"file:\"!==E.protocol&&m(E.protocol)&&E.host?E.protocol+\"//\"+E.host:\"null\",E.href=E.toString()}y.prototype={set:function(e,t,n){var s=this;switch(e){case\"query\":\"string\"==typeof t&&t.length&&(t=(n||o.parse)(t)),s[e]=t;break;case\"port\":s[e]=t,r(t,s.protocol)?t&&(s.host=s.hostname+\":\"+t):(s.host=s.hostname,s[e]=\"\");break;case\"hostname\":s[e]=t,s.port&&(t+=\":\"+s.port),s.host=t;break;case\"host\":s[e]=t,l.test(t)?(t=t.split(\":\"),s.port=t.pop(),s.hostname=t.join(\":\")):(s.hostname=t,s.port=\"\");break;case\"protocol\":s.protocol=t.toLowerCase(),s.slashes=!n;break;case\"pathname\":case\"hash\":if(t){var i=\"pathname\"===e?\"/\":\"#\";s[e]=t.charAt(0)!==i?i+t:t}else s[e]=t;break;case\"username\":case\"password\":s[e]=encodeURIComponent(t);break;case\"auth\":var a=t.indexOf(\":\");~a?(s.username=t.slice(0,a),s.username=encodeURIComponent(decodeURIComponent(s.username)),s.password=t.slice(a+1),s.password=encodeURIComponent(decodeURIComponent(s.password))):s.username=encodeURIComponent(decodeURIComponent(t))}for(var c=0;c<h.length;c++){var u=h[c];u[4]&&(s[u[1]]=s[u[1]].toLowerCase())}return s.auth=s.password?s.username+\":\"+s.password:s.username,s.origin=\"file:\"!==s.protocol&&m(s.protocol)&&s.host?s.protocol+\"//\"+s.host:\"null\",s.href=s.toString(),s},toString:function(e){e&&\"function\"==typeof e||(e=o.stringify);var t,n=this,r=n.host,s=n.protocol;s&&\":\"!==s.charAt(s.length-1)&&(s+=\":\");var i=s+(n.protocol&&n.slashes||m(n.protocol)?\"//\":\"\");return n.username?(i+=n.username,n.password&&(i+=\":\"+n.password),i+=\"@\"):n.password?(i+=\":\"+n.password,i+=\"@\"):\"file:\"!==n.protocol&&m(n.protocol)&&!r&&\"/\"!==n.pathname&&(i+=\"@\"),(\":\"===r[r.length-1]||l.test(n.hostname)&&!n.port)&&(r+=\":\"),i+=r+n.pathname,(t=\"object\"==typeof n.query?e(n.query):n.query)&&(i+=\"?\"!==t.charAt(0)?\"?\"+t:t),n.hash&&(i+=n.hash),i}},y.extractProtocol=g,y.location=d,y.trimLeft=p,y.qs=o,e.exports=y},52511:function(e,t,n){var r;e=n.nmd(e),function(o){t&&t.nodeType,e&&e.nodeType;var s=\"object\"==typeof n.g&&n.g;s.global!==s&&s.window!==s&&s.self;var i,a=2147483647,l=36,c=1,u=26,p=38,h=700,f=72,d=128,m=\"-\",g=/^xn--/,y=/[^\\x20-\\x7E]/,v=/[\\x2E\\u3002\\uFF0E\\uFF61]/g,b={overflow:\"Overflow: input needs wider integers to process\",\"not-basic\":\"Illegal input >= 0x80 (not a basic code point)\",\"invalid-input\":\"Invalid input\"},w=l-c,E=Math.floor,x=String.fromCharCode;function S(e){throw new RangeError(b[e])}function _(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function j(e,t){var n=e.split(\"@\"),r=\"\";return n.length>1&&(r=n[0]+\"@\",e=n[1]),r+_((e=e.replace(v,\".\")).split(\".\"),t).join(\".\")}function O(e){for(var t,n,r=[],o=0,s=e.length;o<s;)(t=e.charCodeAt(o++))>=55296&&t<=56319&&o<s?56320==(64512&(n=e.charCodeAt(o++)))?r.push(((1023&t)<<10)+(1023&n)+65536):(r.push(t),o--):r.push(t);return r}function k(e){return _(e,(function(e){var t=\"\";return e>65535&&(t+=x((e-=65536)>>>10&1023|55296),e=56320|1023&e),t+=x(e)})).join(\"\")}function A(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function C(e,t,n){var r=0;for(e=n?E(e/h):e>>1,e+=E(e/t);e>w*u>>1;r+=l)e=E(e/w);return E(r+(w+1)*e/(e+p))}function P(e){var t,n,r,o,s,i,p,h,g,y,v,b=[],w=e.length,x=0,_=d,j=f;for((n=e.lastIndexOf(m))<0&&(n=0),r=0;r<n;++r)e.charCodeAt(r)>=128&&S(\"not-basic\"),b.push(e.charCodeAt(r));for(o=n>0?n+1:0;o<w;){for(s=x,i=1,p=l;o>=w&&S(\"invalid-input\"),((h=(v=e.charCodeAt(o++))-48<10?v-22:v-65<26?v-65:v-97<26?v-97:l)>=l||h>E((a-x)/i))&&S(\"overflow\"),x+=h*i,!(h<(g=p<=j?c:p>=j+u?u:p-j));p+=l)i>E(a/(y=l-g))&&S(\"overflow\"),i*=y;j=C(x-s,t=b.length+1,0==s),E(x/t)>a-_&&S(\"overflow\"),_+=E(x/t),x%=t,b.splice(x++,0,_)}return k(b)}function N(e){var t,n,r,o,s,i,p,h,g,y,v,b,w,_,j,k=[];for(b=(e=O(e)).length,t=d,n=0,s=f,i=0;i<b;++i)(v=e[i])<128&&k.push(x(v));for(r=o=k.length,o&&k.push(m);r<b;){for(p=a,i=0;i<b;++i)(v=e[i])>=t&&v<p&&(p=v);for(p-t>E((a-n)/(w=r+1))&&S(\"overflow\"),n+=(p-t)*w,t=p,i=0;i<b;++i)if((v=e[i])<t&&++n>a&&S(\"overflow\"),v==t){for(h=n,g=l;!(h<(y=g<=s?c:g>=s+u?u:g-s));g+=l)j=h-y,_=l-y,k.push(x(A(y+j%_,0))),h=E(j/_);k.push(x(A(h,0))),s=C(n,w,r==o),n=0,++r}++n,++t}return k.join(\"\")}i={version:\"1.4.1\",ucs2:{decode:O,encode:k},decode:P,encode:N,toASCII:function(e){return j(e,(function(e){return y.test(e)?\"xn--\"+N(e):e}))},toUnicode:function(e){return j(e,(function(e){return g.test(e)?P(e.slice(4).toLowerCase()):e}))}},void 0===(r=function(){return i}.call(t,n,t,e))||(e.exports=r)}()},8575:(e,t,n)=>{\"use strict\";var r=n(52511);function o(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}var s=/^([a-z0-9.+-]+:)/i,i=/:[0-9]*$/,a=/^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,l=[\"{\",\"}\",\"|\",\"\\\\\",\"^\",\"`\"].concat([\"<\",\">\",'\"',\"`\",\" \",\"\\r\",\"\\n\",\"\\t\"]),c=[\"'\"].concat(l),u=[\"%\",\"/\",\"?\",\";\",\"#\"].concat(c),p=[\"/\",\"?\",\"#\"],h=/^[+a-z0-9A-Z_-]{0,63}$/,f=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,d={javascript:!0,\"javascript:\":!0},m={javascript:!0,\"javascript:\":!0},g={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,\"http:\":!0,\"https:\":!0,\"ftp:\":!0,\"gopher:\":!0,\"file:\":!0},y=n(80129);function v(e,t,n){if(e&&\"object\"==typeof e&&e instanceof o)return e;var r=new o;return r.parse(e,t,n),r}o.prototype.parse=function(e,t,n){if(\"string\"!=typeof e)throw new TypeError(\"Parameter 'url' must be a string, not \"+typeof e);var o=e.indexOf(\"?\"),i=-1!==o&&o<e.indexOf(\"#\")?\"?\":\"#\",l=e.split(i);l[0]=l[0].replace(/\\\\/g,\"/\");var v=e=l.join(i);if(v=v.trim(),!n&&1===e.split(\"#\").length){var b=a.exec(v);if(b)return this.path=v,this.href=v,this.pathname=b[1],b[2]?(this.search=b[2],this.query=t?y.parse(this.search.substr(1)):this.search.substr(1)):t&&(this.search=\"\",this.query={}),this}var w=s.exec(v);if(w){var E=(w=w[0]).toLowerCase();this.protocol=E,v=v.substr(w.length)}if(n||w||v.match(/^\\/\\/[^@/]+@[^@/]+/)){var x=\"//\"===v.substr(0,2);!x||w&&m[w]||(v=v.substr(2),this.slashes=!0)}if(!m[w]&&(x||w&&!g[w])){for(var S,_,j=-1,O=0;O<p.length;O++){-1!==(k=v.indexOf(p[O]))&&(-1===j||k<j)&&(j=k)}-1!==(_=-1===j?v.lastIndexOf(\"@\"):v.lastIndexOf(\"@\",j))&&(S=v.slice(0,_),v=v.slice(_+1),this.auth=decodeURIComponent(S)),j=-1;for(O=0;O<u.length;O++){var k;-1!==(k=v.indexOf(u[O]))&&(-1===j||k<j)&&(j=k)}-1===j&&(j=v.length),this.host=v.slice(0,j),v=v.slice(j),this.parseHost(),this.hostname=this.hostname||\"\";var A=\"[\"===this.hostname[0]&&\"]\"===this.hostname[this.hostname.length-1];if(!A)for(var C=this.hostname.split(/\\./),P=(O=0,C.length);O<P;O++){var N=C[O];if(N&&!N.match(h)){for(var I=\"\",T=0,R=N.length;T<R;T++)N.charCodeAt(T)>127?I+=\"x\":I+=N[T];if(!I.match(h)){var M=C.slice(0,O),D=C.slice(O+1),F=N.match(f);F&&(M.push(F[1]),D.unshift(F[2])),D.length&&(v=\"/\"+D.join(\".\")+v),this.hostname=M.join(\".\");break}}}this.hostname.length>255?this.hostname=\"\":this.hostname=this.hostname.toLowerCase(),A||(this.hostname=r.toASCII(this.hostname));var L=this.port?\":\"+this.port:\"\",B=this.hostname||\"\";this.host=B+L,this.href+=this.host,A&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),\"/\"!==v[0]&&(v=\"/\"+v))}if(!d[E])for(O=0,P=c.length;O<P;O++){var $=c[O];if(-1!==v.indexOf($)){var q=encodeURIComponent($);q===$&&(q=escape($)),v=v.split($).join(q)}}var U=v.indexOf(\"#\");-1!==U&&(this.hash=v.substr(U),v=v.slice(0,U));var z=v.indexOf(\"?\");if(-1!==z?(this.search=v.substr(z),this.query=v.substr(z+1),t&&(this.query=y.parse(this.query)),v=v.slice(0,z)):t&&(this.search=\"\",this.query={}),v&&(this.pathname=v),g[E]&&this.hostname&&!this.pathname&&(this.pathname=\"/\"),this.pathname||this.search){L=this.pathname||\"\";var V=this.search||\"\";this.path=L+V}return this.href=this.format(),this},o.prototype.format=function(){var e=this.auth||\"\";e&&(e=(e=encodeURIComponent(e)).replace(/%3A/i,\":\"),e+=\"@\");var t=this.protocol||\"\",n=this.pathname||\"\",r=this.hash||\"\",o=!1,s=\"\";this.host?o=e+this.host:this.hostname&&(o=e+(-1===this.hostname.indexOf(\":\")?this.hostname:\"[\"+this.hostname+\"]\"),this.port&&(o+=\":\"+this.port)),this.query&&\"object\"==typeof this.query&&Object.keys(this.query).length&&(s=y.stringify(this.query));var i=this.search||s&&\"?\"+s||\"\";return t&&\":\"!==t.substr(-1)&&(t+=\":\"),this.slashes||(!t||g[t])&&!1!==o?(o=\"//\"+(o||\"\"),n&&\"/\"!==n.charAt(0)&&(n=\"/\"+n)):o||(o=\"\"),r&&\"#\"!==r.charAt(0)&&(r=\"#\"+r),i&&\"?\"!==i.charAt(0)&&(i=\"?\"+i),t+o+(n=n.replace(/[?#]/g,(function(e){return encodeURIComponent(e)})))+(i=i.replace(\"#\",\"%23\"))+r},o.prototype.resolve=function(e){return this.resolveObject(v(e,!1,!0)).format()},o.prototype.resolveObject=function(e){if(\"string\"==typeof e){var t=new o;t.parse(e,!1,!0),e=t}for(var n=new o,r=Object.keys(this),s=0;s<r.length;s++){var i=r[s];n[i]=this[i]}if(n.hash=e.hash,\"\"===e.href)return n.href=n.format(),n;if(e.slashes&&!e.protocol){for(var a=Object.keys(e),l=0;l<a.length;l++){var c=a[l];\"protocol\"!==c&&(n[c]=e[c])}return g[n.protocol]&&n.hostname&&!n.pathname&&(n.pathname=\"/\",n.path=n.pathname),n.href=n.format(),n}if(e.protocol&&e.protocol!==n.protocol){if(!g[e.protocol]){for(var u=Object.keys(e),p=0;p<u.length;p++){var h=u[p];n[h]=e[h]}return n.href=n.format(),n}if(n.protocol=e.protocol,e.host||m[e.protocol])n.pathname=e.pathname;else{for(var f=(e.pathname||\"\").split(\"/\");f.length&&!(e.host=f.shift()););e.host||(e.host=\"\"),e.hostname||(e.hostname=\"\"),\"\"!==f[0]&&f.unshift(\"\"),f.length<2&&f.unshift(\"\"),n.pathname=f.join(\"/\")}if(n.search=e.search,n.query=e.query,n.host=e.host||\"\",n.auth=e.auth,n.hostname=e.hostname||e.host,n.port=e.port,n.pathname||n.search){var d=n.pathname||\"\",y=n.search||\"\";n.path=d+y}return n.slashes=n.slashes||e.slashes,n.href=n.format(),n}var v=n.pathname&&\"/\"===n.pathname.charAt(0),b=e.host||e.pathname&&\"/\"===e.pathname.charAt(0),w=b||v||n.host&&e.pathname,E=w,x=n.pathname&&n.pathname.split(\"/\")||[],S=(f=e.pathname&&e.pathname.split(\"/\")||[],n.protocol&&!g[n.protocol]);if(S&&(n.hostname=\"\",n.port=null,n.host&&(\"\"===x[0]?x[0]=n.host:x.unshift(n.host)),n.host=\"\",e.protocol&&(e.hostname=null,e.port=null,e.host&&(\"\"===f[0]?f[0]=e.host:f.unshift(e.host)),e.host=null),w=w&&(\"\"===f[0]||\"\"===x[0])),b)n.host=e.host||\"\"===e.host?e.host:n.host,n.hostname=e.hostname||\"\"===e.hostname?e.hostname:n.hostname,n.search=e.search,n.query=e.query,x=f;else if(f.length)x||(x=[]),x.pop(),x=x.concat(f),n.search=e.search,n.query=e.query;else if(null!=e.search){if(S)n.host=x.shift(),n.hostname=n.host,(A=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\"))&&(n.auth=A.shift(),n.hostname=A.shift(),n.host=n.hostname);return n.search=e.search,n.query=e.query,null===n.pathname&&null===n.search||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.href=n.format(),n}if(!x.length)return n.pathname=null,n.search?n.path=\"/\"+n.search:n.path=null,n.href=n.format(),n;for(var _=x.slice(-1)[0],j=(n.host||e.host||x.length>1)&&(\".\"===_||\"..\"===_)||\"\"===_,O=0,k=x.length;k>=0;k--)\".\"===(_=x[k])?x.splice(k,1):\"..\"===_?(x.splice(k,1),O++):O&&(x.splice(k,1),O--);if(!w&&!E)for(;O--;O)x.unshift(\"..\");!w||\"\"===x[0]||x[0]&&\"/\"===x[0].charAt(0)||x.unshift(\"\"),j&&\"/\"!==x.join(\"/\").substr(-1)&&x.push(\"\");var A,C=\"\"===x[0]||x[0]&&\"/\"===x[0].charAt(0);S&&(n.hostname=C?\"\":x.length?x.shift():\"\",n.host=n.hostname,(A=!!(n.host&&n.host.indexOf(\"@\")>0)&&n.host.split(\"@\"))&&(n.auth=A.shift(),n.hostname=A.shift(),n.host=n.hostname));return(w=w||n.host&&x.length)&&!C&&x.unshift(\"\"),x.length>0?n.pathname=x.join(\"/\"):(n.pathname=null,n.path=null),null===n.pathname&&null===n.search||(n.path=(n.pathname?n.pathname:\"\")+(n.search?n.search:\"\")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},o.prototype.parseHost=function(){var e=this.host,t=i.exec(e);t&&(\":\"!==(t=t[0])&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)},t.parse=v,t.resolve=function(e,t){return v(e,!1,!0).resolve(t)},t.resolveObject=function(e,t){return e?v(e,!1,!0).resolveObject(t):t},t.format=function(e){return\"string\"==typeof e&&(e=v(e)),e instanceof o?e.format():o.prototype.format.call(e)},t.Url=o},53250:(e,t,n)=>{\"use strict\";var r=n(67294);var o=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},s=r.useState,i=r.useEffect,a=r.useLayoutEffect,l=r.useDebugValue;function c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var u=\"undefined\"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=s({inst:{value:n,getSnapshot:t}}),o=r[0].inst,u=r[1];return a((function(){o.value=n,o.getSnapshot=t,c(o)&&u({inst:o})}),[e,n,t]),i((function(){return c(o)&&u({inst:o}),e((function(){c(o)&&u({inst:o})}))}),[e]),l(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:u},50139:(e,t,n)=>{\"use strict\";var r=n(67294),o=n(61688);var s=\"function\"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},i=o.useSyncExternalStore,a=r.useRef,l=r.useEffect,c=r.useMemo,u=r.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,o){var p=a(null);if(null===p.current){var h={hasValue:!1,value:null};p.current=h}else h=p.current;p=c((function(){function e(e){if(!l){if(l=!0,i=e,e=r(e),void 0!==o&&h.hasValue){var t=h.value;if(o(t,e))return a=t}return a=e}if(t=a,s(i,e))return t;var n=r(e);return void 0!==o&&o(t,n)?t:(i=e,a=n)}var i,a,l=!1,c=void 0===n?null:n;return[function(){return e(t())},null===c?void 0:function(){return e(c())}]}),[t,n,r,o]);var f=i(e,p[0],p[1]);return l((function(){h.hasValue=!0,h.value=f}),[f]),u(f),f}},61688:(e,t,n)=>{\"use strict\";e.exports=n(53250)},52798:(e,t,n)=>{\"use strict\";e.exports=n(50139)},94927:(e,t,n)=>{function r(e){try{if(!n.g.localStorage)return!1}catch(e){return!1}var t=n.g.localStorage[e];return null!=t&&\"true\"===String(t).toLowerCase()}e.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}},3131:(e,t,n)=>{\"use strict\";var r=n(96464),o=function(e){return/<\\/+[^>]+>/.test(e)},s=function(e){return/<[^>]+\\/>/.test(e)},i=function(e){return function(e){return/<[^>!]+>/.test(e)}(e)&&!o(e)&&!s(e)};function a(e){return o(e)?\"ClosingTag\":i(e)?\"OpeningTag\":s(e)?\"SelfClosingTag\":\"Text\"}e.exports=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.indentor,o=t.textNodesOnSameLine,s=0,i=[];n=n||\"    \";var l,c,u=(l=e,(c=l,c.split(/(<\\/?[^>]+>)/g).filter((function(e){return\"\"!==e.trim()}))).map((function(e){return{value:e,type:a(e)}}))).map((function(e,t,a){var l=e.value,c=e.type;\"ClosingTag\"===c&&s--;var u=r(n,s),p=u+l;if(\"OpeningTag\"===c&&s++,o){var h=a[t-1],f=a[t-2];\"ClosingTag\"===c&&\"Text\"===h.type&&\"OpeningTag\"===f.type&&(p=\"\"+u+f.value+h.value+l,i.push(t-2,t-1))}return p}));return i.forEach((function(e){return u[e]=null})),u.filter((function(e){return!!e})).join(\"\\n\")}},80255:e=>{var t={\"&\":\"&amp;\",'\"':\"&quot;\",\"'\":\"&apos;\",\"<\":\"&lt;\",\">\":\"&gt;\"};e.exports=function(e){return e&&e.replace?e.replace(/([&\"<>'])/g,(function(e,n){return t[n]})):e}},53479:(e,t,n)=>{var r=n(34155),o=n(80255),s=n(42830).Stream;function i(e,t,n){n=n||0;var r,s,a=(r=t,new Array(n||0).join(r||\"\")),l=e;if(\"object\"==typeof e&&((l=e[s=Object.keys(e)[0]])&&l._elem))return l._elem.name=s,l._elem.icount=n,l._elem.indent=t,l._elem.indents=a,l._elem.interrupt=l,l._elem;var c,u=[],p=[];function h(e){Object.keys(e).forEach((function(t){u.push(function(e,t){return e+'=\"'+o(t)+'\"'}(t,e[t]))}))}switch(typeof l){case\"object\":if(null===l)break;l._attr&&h(l._attr),l._cdata&&p.push((\"<![CDATA[\"+l._cdata).replace(/\\]\\]>/g,\"]]]]><![CDATA[>\")+\"]]>\"),l.forEach&&(c=!1,p.push(\"\"),l.forEach((function(e){\"object\"==typeof e?\"_attr\"==Object.keys(e)[0]?h(e._attr):p.push(i(e,t,n+1)):(p.pop(),c=!0,p.push(o(e)))})),c||p.push(\"\"));break;default:p.push(o(l))}return{name:s,interrupt:!1,attributes:u,content:p,icount:n,indents:a,indent:t}}function a(e,t,n){if(\"object\"!=typeof t)return e(!1,t);var r=t.interrupt?1:t.content.length;function o(){for(;t.content.length;){var o=t.content.shift();if(void 0!==o){if(s(o))return;a(e,o)}}e(!1,(r>1?t.indents:\"\")+(t.name?\"</\"+t.name+\">\":\"\")+(t.indent&&!n?\"\\n\":\"\")),n&&n()}function s(t){return!!t.interrupt&&(t.interrupt.append=e,t.interrupt.end=o,t.interrupt=!1,e(!0),!0)}if(e(!1,t.indents+(t.name?\"<\"+t.name:\"\")+(t.attributes.length?\" \"+t.attributes.join(\" \"):\"\")+(r?t.name?\">\":\"\":t.name?\"/>\":\"\")+(t.indent&&r>1?\"\\n\":\"\")),!r)return e(!1,t.indent?\"\\n\":\"\");s(t)||o()}e.exports=function(e,t){\"object\"!=typeof t&&(t={indent:t});var n,o,l=t.stream?new s:null,c=\"\",u=!1,p=t.indent?!0===t.indent?\"    \":t.indent:\"\",h=!0;function f(e){h?r.nextTick(e):e()}function d(e,t){if(void 0!==t&&(c+=t),e&&!u&&(l=l||new s,u=!0),e&&u){var n=c;f((function(){l.emit(\"data\",n)})),c=\"\"}}function m(e,t){a(d,i(e,p,p?1:0),t)}function g(){if(l){var e=c;f((function(){l.emit(\"data\",e),l.emit(\"end\"),l.readable=!1,l.emit(\"close\")}))}}return f((function(){h=!1})),t.declaration&&(n=t.declaration,o={version:\"1.0\",encoding:n.encoding||\"UTF-8\"},n.standalone&&(o.standalone=n.standalone),m({\"?xml\":{_attr:o}}),c=c.replace(\"/>\",\"?>\")),e&&e.forEach?e.forEach((function(t,n){var r;n+1===e.length&&(r=g),m(t,r)})):m(e,g),l?(l.readable=!0,l):c},e.exports.element=e.exports.Element=function(){var e={_elem:i(Array.prototype.slice.call(arguments)),push:function(e){if(!this.append)throw new Error(\"not assigned to a parent!\");var t=this,n=this._elem.indent;a(this.append,i(e,n,this._elem.icount+(n?1:0)),(function(){t.append(!0)}))},close:function(e){void 0!==e&&this.push(e),this.end&&this.end()}};return e}},45172:function(e,t){var n,r,o;r=[],n=function(){\"use strict\";var e=function(e){return e&&\"getComputedStyle\"in window&&\"smooth\"===window.getComputedStyle(e)[\"scroll-behavior\"]};if(\"undefined\"==typeof window||!(\"document\"in window))return{};var t=function(t,n,r){var o;n=n||999,r||0===r||(r=9);var s=function(e){o=e},i=function(){clearTimeout(o),s(0)},a=function(e){return Math.max(0,t.getTopOf(e)-r)},l=function(r,o,a){if(i(),0===o||o&&o<0||e(t.body))t.toY(r),a&&a();else{var l=t.getY(),c=Math.max(0,r)-l,u=(new Date).getTime();o=o||Math.min(Math.abs(c),n),function e(){s(setTimeout((function(){var n=Math.min(1,((new Date).getTime()-u)/o),r=Math.max(0,Math.floor(l+c*(n<.5?2*n*n:n*(4-2*n)-1)));t.toY(r),n<1&&t.getHeight()+r<t.body.scrollHeight?e():(setTimeout(i,99),a&&a())}),9))}()}},c=function(e,t,n){l(a(e),t,n)},u=function(e,n,o){var s=e.getBoundingClientRect().height,i=t.getTopOf(e)+s,u=t.getHeight(),p=t.getY(),h=p+u;a(e)<p||s+r>u?c(e,n,o):i+r>h?l(i-u+r,n,o):o&&o()},p=function(e,n,r,o){l(Math.max(0,t.getTopOf(e)-t.getHeight()/2+(r||e.getBoundingClientRect().height/2)),n,o)};return{setup:function(e,t){return(0===e||e)&&(n=e),(0===t||t)&&(r=t),{defaultDuration:n,edgeOffset:r}},to:c,toY:l,intoView:u,center:p,stop:i,moving:function(){return!!o},getY:t.getY,getTopOf:t.getTopOf}},n=document.documentElement,r=function(){return window.scrollY||n.scrollTop},o=t({body:document.scrollingElement||document.body,toY:function(e){window.scrollTo(0,e)},getY:r,getHeight:function(){return window.innerHeight||n.clientHeight},getTopOf:function(e){return e.getBoundingClientRect().top+r()-n.offsetTop}});if(o.createScroller=function(e,r,o){return t({body:e,toY:function(t){e.scrollTop=t},getY:function(){return e.scrollTop},getHeight:function(){return Math.min(e.clientHeight,window.innerHeight||n.clientHeight)},getTopOf:function(e){return e.offsetTop}},r,o)},\"addEventListener\"in window&&!window.noZensmooth&&!e(document.body)){var s=\"history\"in window&&\"pushState\"in history,i=s&&\"scrollRestoration\"in history;i&&(history.scrollRestoration=\"auto\"),window.addEventListener(\"load\",(function(){i&&(setTimeout((function(){history.scrollRestoration=\"manual\"}),9),window.addEventListener(\"popstate\",(function(e){e.state&&\"zenscrollY\"in e.state&&o.toY(e.state.zenscrollY)}),!1)),window.location.hash&&setTimeout((function(){var e=o.setup().edgeOffset;if(e){var t=document.getElementById(window.location.href.split(\"#\")[1]);if(t){var n=Math.max(0,o.getTopOf(t)-e),r=o.getY()-n;0<=r&&r<9&&window.scrollTo(0,n)}}}),9)}),!1);var a=new RegExp(\"(^|\\\\s)noZensmooth(\\\\s|$)\");window.addEventListener(\"click\",(function(e){for(var t=e.target;t&&\"A\"!==t.tagName;)t=t.parentNode;if(!(!t||1!==e.which||e.shiftKey||e.metaKey||e.ctrlKey||e.altKey)){if(i){var n=history.state&&\"object\"==typeof history.state?history.state:{};n.zenscrollY=o.getY();try{history.replaceState(n,\"\")}catch(e){}}var r=t.getAttribute(\"href\")||\"\";if(0===r.indexOf(\"#\")&&!a.test(t.className)){var l=0,c=document.getElementById(r.substring(1));if(\"#\"!==r){if(!c)return;l=o.getTopOf(c)}e.preventDefault();var u=function(){window.location=r},p=o.setup().edgeOffset;p&&(l=Math.max(0,l-p),s&&(u=function(){history.pushState({},\"\",r)})),o.toY(l,null,u)}}}),!1)}return o}(),void 0===(o=\"function\"==typeof n?n.apply(t,r):n)||(e.exports=o)},95102:(e,t,n)=>{var r={\"./all.js\":45308,\"./auth/actions.js\":55812,\"./auth/configs-extensions/wrap-actions.js\":53779,\"./auth/index.js\":93705,\"./auth/reducers.js\":43962,\"./auth/selectors.js\":60035,\"./auth/spec-extensions/wrap-actions.js\":60489,\"./auth/wrap-actions.js\":22849,\"./configs/actions.js\":70714,\"./configs/helpers.js\":92256,\"./configs/index.js\":46709,\"./configs/reducers.js\":37743,\"./configs/selectors.js\":69018,\"./configs/spec-actions.js\":22698,\"./deep-linking/helpers.js\":31970,\"./deep-linking/index.js\":34980,\"./deep-linking/layout.js\":41599,\"./deep-linking/operation-tag-wrapper.jsx\":34584,\"./deep-linking/operation-wrapper.jsx\":60877,\"./download-url.js\":48011,\"./err/actions.js\":34966,\"./err/error-transformers/hook.js\":56982,\"./err/error-transformers/transformers/not-of-type.js\":2392,\"./err/error-transformers/transformers/parameter-oneof.js\":21835,\"./err/index.js\":77793,\"./err/reducers.js\":93527,\"./err/selectors.js\":87667,\"./filter/index.js\":49978,\"./filter/opsFilter.js\":4309,\"./json-schema-2020-12/components/Accordion/Accordion.jsx\":47349,\"./json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":36867,\"./json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":22675,\"./json-schema-2020-12/components/icons/ChevronRight.jsx\":12260,\"./json-schema-2020-12/components/keywords/$anchor.jsx\":64922,\"./json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"./json-schema-2020-12/components/keywords/$defs.jsx\":36418,\"./json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":51338,\"./json-schema-2020-12/components/keywords/$dynamicRef.jsx\":27655,\"./json-schema-2020-12/components/keywords/$id.jsx\":93460,\"./json-schema-2020-12/components/keywords/$ref.jsx\":72348,\"./json-schema-2020-12/components/keywords/$schema.jsx\":69359,\"./json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"./json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":65253,\"./json-schema-2020-12/components/keywords/AllOf.jsx\":46457,\"./json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"./json-schema-2020-12/components/keywords/Const.jsx\":27308,\"./json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":69956,\"./json-schema-2020-12/components/keywords/Contains.jsx\":38993,\"./json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"./json-schema-2020-12/components/keywords/Default.jsx\":55148,\"./json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":24539,\"./json-schema-2020-12/components/keywords/DependentSchemas.jsx\":26076,\"./json-schema-2020-12/components/keywords/Deprecated.jsx\":26661,\"./json-schema-2020-12/components/keywords/Description/Description.jsx\":79446,\"./json-schema-2020-12/components/keywords/Else.jsx\":67207,\"./json-schema-2020-12/components/keywords/Enum/Enum.jsx\":91805,\"./json-schema-2020-12/components/keywords/If.jsx\":40487,\"./json-schema-2020-12/components/keywords/Items.jsx\":89206,\"./json-schema-2020-12/components/keywords/Not.jsx\":65174,\"./json-schema-2020-12/components/keywords/OneOf.jsx\":13834,\"./json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":36746,\"./json-schema-2020-12/components/keywords/PrefixItems.jsx\":93971,\"./json-schema-2020-12/components/keywords/Properties/Properties.jsx\":25472,\"./json-schema-2020-12/components/keywords/PropertyNames.jsx\":42338,\"./json-schema-2020-12/components/keywords/ReadOnly.jsx\":16456,\"./json-schema-2020-12/components/keywords/Then.jsx\":67401,\"./json-schema-2020-12/components/keywords/Title/Title.jsx\":78137,\"./json-schema-2020-12/components/keywords/Type.jsx\":22285,\"./json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":85828,\"./json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"./json-schema-2020-12/components/keywords/WriteOnly.jsx\":15789,\"./json-schema-2020-12/context.js\":69006,\"./json-schema-2020-12/fn.js\":33499,\"./json-schema-2020-12/hoc.jsx\":65077,\"./json-schema-2020-12/hooks.js\":12603,\"./json-schema-2020-12/index.js\":97139,\"./json-schema-2020-12/prop-types.js\":16648,\"./json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"./json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":22906,\"./json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":90537,\"./json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":70674,\"./json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":43782,\"./json-schema-2020-12/samples-extensions/fn/class/Registry.js\":14215,\"./json-schema-2020-12/samples-extensions/fn/core/constants.js\":84539,\"./json-schema-2020-12/samples-extensions/fn/core/example.js\":13783,\"./json-schema-2020-12/samples-extensions/fn/core/merge.js\":37078,\"./json-schema-2020-12/samples-extensions/fn/core/predicates.js\":23084,\"./json-schema-2020-12/samples-extensions/fn/core/random.js\":35202,\"./json-schema-2020-12/samples-extensions/fn/core/type.js\":96276,\"./json-schema-2020-12/samples-extensions/fn/core/utils.js\":99346,\"./json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":41433,\"./json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":58509,\"./json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"./json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":54180,\"./json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":91967,\"./json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":44366,\"./json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":65037,\"./json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":74045,\"./json-schema-2020-12/samples-extensions/fn/generators/date.js\":81456,\"./json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"./json-schema-2020-12/samples-extensions/fn/generators/duration.js\":64299,\"./json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"./json-schema-2020-12/samples-extensions/fn/generators/float.js\":51890,\"./json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":69375,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":94518,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":70273,\"./json-schema-2020-12/samples-extensions/fn/generators/int32.js\":57864,\"./json-schema-2020-12/samples-extensions/fn/generators/int64.js\":21726,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":28793,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":98269,\"./json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":45693,\"./json-schema-2020-12/samples-extensions/fn/generators/iri.js\":13080,\"./json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":37856,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":2672,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":54342,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":46724,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":65378,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":92974,\"./json-schema-2020-12/samples-extensions/fn/generators/password.js\":93393,\"./json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"./json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":80375,\"./json-schema-2020-12/samples-extensions/fn/generators/time.js\":65243,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":94692,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":83829,\"./json-schema-2020-12/samples-extensions/fn/generators/uri.js\":52978,\"./json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":38859,\"./json-schema-2020-12/samples-extensions/fn/index.js\":78591,\"./json-schema-2020-12/samples-extensions/fn/main.js\":94277,\"./json-schema-2020-12/samples-extensions/fn/types/array.js\":83982,\"./json-schema-2020-12/samples-extensions/fn/types/boolean.js\":34108,\"./json-schema-2020-12/samples-extensions/fn/types/index.js\":63273,\"./json-schema-2020-12/samples-extensions/fn/types/integer.js\":58864,\"./json-schema-2020-12/samples-extensions/fn/types/null.js\":90853,\"./json-schema-2020-12/samples-extensions/fn/types/number.js\":83455,\"./json-schema-2020-12/samples-extensions/fn/types/object.js\":46852,\"./json-schema-2020-12/samples-extensions/fn/types/string.js\":74522,\"./layout/actions.js\":25474,\"./layout/index.js\":26821,\"./layout/reducers.js\":5672,\"./layout/selectors.js\":4400,\"./layout/spec-extensions/wrap-selector.js\":28989,\"./logs/index.js\":9150,\"./oas3/actions.js\":67002,\"./oas3/auth-extensions/wrap-selectors.js\":73723,\"./oas3/components/callbacks.jsx\":33427,\"./oas3/components/http-auth.jsx\":86775,\"./oas3/components/index.js\":76467,\"./oas3/components/operation-link.jsx\":15757,\"./oas3/components/operation-servers.jsx\":96796,\"./oas3/components/request-body-editor.jsx\":45327,\"./oas3/components/request-body.jsx\":42458,\"./oas3/components/servers-container.jsx\":9928,\"./oas3/components/servers.jsx\":56617,\"./oas3/helpers.jsx\":7779,\"./oas3/index.js\":97451,\"./oas3/reducers.js\":62109,\"./oas3/selectors.js\":5065,\"./oas3/spec-extensions/selectors.js\":91741,\"./oas3/spec-extensions/wrap-selectors.js\":92044,\"./oas3/wrap-components/auth-item.jsx\":70356,\"./oas3/wrap-components/index.js\":37761,\"./oas3/wrap-components/json-schema-string.jsx\":90287,\"./oas3/wrap-components/markdown.jsx\":22460,\"./oas3/wrap-components/model.jsx\":53499,\"./oas3/wrap-components/online-validator-badge.js\":50058,\"./oas3/wrap-components/version-stamp.jsx\":69487,\"./oas31/after-load.js\":92372,\"./oas31/components/contact.jsx\":89503,\"./oas31/components/info.jsx\":16133,\"./oas31/components/json-schema-dialect.jsx\":92562,\"./oas31/components/license.jsx\":51876,\"./oas31/components/model/model.jsx\":92718,\"./oas31/components/models/models.jsx\":20263,\"./oas31/components/version-pragma-filter.jsx\":33429,\"./oas31/components/webhooks.jsx\":39508,\"./oas31/fn.js\":84380,\"./oas31/index.js\":29806,\"./oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":45989,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":19525,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"./oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":59450,\"./oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":25324,\"./oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"./oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":36617,\"./oas31/json-schema-2020-12-extensions/fn.js\":25800,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":14951,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":80809,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":77536,\"./oas31/selectors.js\":64280,\"./oas31/spec-extensions/selectors.js\":9305,\"./oas31/spec-extensions/wrap-selectors.js\":32884,\"./oas31/wrap-components/contact.jsx\":77423,\"./oas31/wrap-components/info.jsx\":284,\"./oas31/wrap-components/license.jsx\":6608,\"./oas31/wrap-components/model.jsx\":17042,\"./oas31/wrap-components/models.jsx\":22914,\"./oas31/wrap-components/version-pragma-filter.jsx\":41434,\"./oas31/wrap-components/version-stamp.jsx\":1122,\"./on-complete/index.js\":28560,\"./request-snippets/fn.js\":92135,\"./request-snippets/index.js\":86575,\"./request-snippets/request-snippets.jsx\":84206,\"./request-snippets/selectors.js\":4669,\"./safe-render/components/error-boundary.jsx\":36195,\"./safe-render/components/fallback.jsx\":29403,\"./safe-render/fn.jsx\":56189,\"./safe-render/index.js\":27621,\"./samples/fn/get-json-sample-schema.js\":72846,\"./samples/fn/get-sample-schema.js\":16132,\"./samples/fn/get-xml-sample-schema.js\":81169,\"./samples/fn/get-yaml-sample-schema.js\":79431,\"./samples/fn/index.js\":29812,\"./samples/index.js\":8883,\"./spec/actions.js\":51228,\"./spec/index.js\":37038,\"./spec/reducers.js\":20032,\"./spec/selectors.js\":33881,\"./spec/wrap-actions.js\":77508,\"./swagger-js/configs-wrap-actions.js\":34852,\"./swagger-js/index.js\":79934,\"./util/index.js\":98525,\"./view/fn.js\":48347,\"./view/index.js\":73420,\"./view/root-injects.jsx\":11092,\"core/plugins/all.js\":45308,\"core/plugins/auth/actions.js\":55812,\"core/plugins/auth/configs-extensions/wrap-actions.js\":53779,\"core/plugins/auth/index.js\":93705,\"core/plugins/auth/reducers.js\":43962,\"core/plugins/auth/selectors.js\":60035,\"core/plugins/auth/spec-extensions/wrap-actions.js\":60489,\"core/plugins/auth/wrap-actions.js\":22849,\"core/plugins/configs/actions.js\":70714,\"core/plugins/configs/helpers.js\":92256,\"core/plugins/configs/index.js\":46709,\"core/plugins/configs/reducers.js\":37743,\"core/plugins/configs/selectors.js\":69018,\"core/plugins/configs/spec-actions.js\":22698,\"core/plugins/deep-linking/helpers.js\":31970,\"core/plugins/deep-linking/index.js\":34980,\"core/plugins/deep-linking/layout.js\":41599,\"core/plugins/deep-linking/operation-tag-wrapper.jsx\":34584,\"core/plugins/deep-linking/operation-wrapper.jsx\":60877,\"core/plugins/download-url.js\":48011,\"core/plugins/err/actions.js\":34966,\"core/plugins/err/error-transformers/hook.js\":56982,\"core/plugins/err/error-transformers/transformers/not-of-type.js\":2392,\"core/plugins/err/error-transformers/transformers/parameter-oneof.js\":21835,\"core/plugins/err/index.js\":77793,\"core/plugins/err/reducers.js\":93527,\"core/plugins/err/selectors.js\":87667,\"core/plugins/filter/index.js\":49978,\"core/plugins/filter/opsFilter.js\":4309,\"core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx\":47349,\"core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":36867,\"core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":22675,\"core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx\":12260,\"core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx\":64922,\"core/plugins/json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"core/plugins/json-schema-2020-12/components/keywords/$defs.jsx\":36418,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":51338,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx\":27655,\"core/plugins/json-schema-2020-12/components/keywords/$id.jsx\":93460,\"core/plugins/json-schema-2020-12/components/keywords/$ref.jsx\":72348,\"core/plugins/json-schema-2020-12/components/keywords/$schema.jsx\":69359,\"core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":65253,\"core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx\":46457,\"core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"core/plugins/json-schema-2020-12/components/keywords/Const.jsx\":27308,\"core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":69956,\"core/plugins/json-schema-2020-12/components/keywords/Contains.jsx\":38993,\"core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"core/plugins/json-schema-2020-12/components/keywords/Default.jsx\":55148,\"core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":24539,\"core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx\":26076,\"core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx\":26661,\"core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx\":79446,\"core/plugins/json-schema-2020-12/components/keywords/Else.jsx\":67207,\"core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx\":91805,\"core/plugins/json-schema-2020-12/components/keywords/If.jsx\":40487,\"core/plugins/json-schema-2020-12/components/keywords/Items.jsx\":89206,\"core/plugins/json-schema-2020-12/components/keywords/Not.jsx\":65174,\"core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx\":13834,\"core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":36746,\"core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx\":93971,\"core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx\":25472,\"core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx\":42338,\"core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx\":16456,\"core/plugins/json-schema-2020-12/components/keywords/Then.jsx\":67401,\"core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx\":78137,\"core/plugins/json-schema-2020-12/components/keywords/Type.jsx\":22285,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":85828,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx\":15789,\"core/plugins/json-schema-2020-12/context.js\":69006,\"core/plugins/json-schema-2020-12/fn.js\":33499,\"core/plugins/json-schema-2020-12/hoc.jsx\":65077,\"core/plugins/json-schema-2020-12/hooks.js\":12603,\"core/plugins/json-schema-2020-12/index.js\":97139,\"core/plugins/json-schema-2020-12/prop-types.js\":16648,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":22906,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":90537,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":70674,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":43782,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/Registry.js\":14215,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/constants.js\":84539,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/example.js\":13783,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/merge.js\":37078,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/predicates.js\":23084,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/random.js\":35202,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/type.js\":96276,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/utils.js\":99346,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":41433,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":58509,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":54180,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":91967,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":44366,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":65037,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":74045,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date.js\":81456,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/duration.js\":64299,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/float.js\":51890,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":69375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":94518,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":70273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int32.js\":57864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int64.js\":21726,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":28793,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":98269,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":45693,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri.js\":13080,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":37856,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":2672,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":54342,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":46724,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":65378,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":92974,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/password.js\":93393,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":80375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/time.js\":65243,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":94692,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":83829,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri.js\":52978,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":38859,\"core/plugins/json-schema-2020-12/samples-extensions/fn/index.js\":78591,\"core/plugins/json-schema-2020-12/samples-extensions/fn/main.js\":94277,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/array.js\":83982,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/boolean.js\":34108,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/index.js\":63273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/integer.js\":58864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/null.js\":90853,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/number.js\":83455,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/object.js\":46852,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/string.js\":74522,\"core/plugins/layout/actions.js\":25474,\"core/plugins/layout/index.js\":26821,\"core/plugins/layout/reducers.js\":5672,\"core/plugins/layout/selectors.js\":4400,\"core/plugins/layout/spec-extensions/wrap-selector.js\":28989,\"core/plugins/logs/index.js\":9150,\"core/plugins/oas3/actions.js\":67002,\"core/plugins/oas3/auth-extensions/wrap-selectors.js\":73723,\"core/plugins/oas3/components/callbacks.jsx\":33427,\"core/plugins/oas3/components/http-auth.jsx\":86775,\"core/plugins/oas3/components/index.js\":76467,\"core/plugins/oas3/components/operation-link.jsx\":15757,\"core/plugins/oas3/components/operation-servers.jsx\":96796,\"core/plugins/oas3/components/request-body-editor.jsx\":45327,\"core/plugins/oas3/components/request-body.jsx\":42458,\"core/plugins/oas3/components/servers-container.jsx\":9928,\"core/plugins/oas3/components/servers.jsx\":56617,\"core/plugins/oas3/helpers.jsx\":7779,\"core/plugins/oas3/index.js\":97451,\"core/plugins/oas3/reducers.js\":62109,\"core/plugins/oas3/selectors.js\":5065,\"core/plugins/oas3/spec-extensions/selectors.js\":91741,\"core/plugins/oas3/spec-extensions/wrap-selectors.js\":92044,\"core/plugins/oas3/wrap-components/auth-item.jsx\":70356,\"core/plugins/oas3/wrap-components/index.js\":37761,\"core/plugins/oas3/wrap-components/json-schema-string.jsx\":90287,\"core/plugins/oas3/wrap-components/markdown.jsx\":22460,\"core/plugins/oas3/wrap-components/model.jsx\":53499,\"core/plugins/oas3/wrap-components/online-validator-badge.js\":50058,\"core/plugins/oas3/wrap-components/version-stamp.jsx\":69487,\"core/plugins/oas31/after-load.js\":92372,\"core/plugins/oas31/components/contact.jsx\":89503,\"core/plugins/oas31/components/info.jsx\":16133,\"core/plugins/oas31/components/json-schema-dialect.jsx\":92562,\"core/plugins/oas31/components/license.jsx\":51876,\"core/plugins/oas31/components/model/model.jsx\":92718,\"core/plugins/oas31/components/models/models.jsx\":20263,\"core/plugins/oas31/components/version-pragma-filter.jsx\":33429,\"core/plugins/oas31/components/webhooks.jsx\":39508,\"core/plugins/oas31/fn.js\":84380,\"core/plugins/oas31/index.js\":29806,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":45989,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":19525,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":59450,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":25324,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":36617,\"core/plugins/oas31/json-schema-2020-12-extensions/fn.js\":25800,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":14951,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":80809,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":77536,\"core/plugins/oas31/selectors.js\":64280,\"core/plugins/oas31/spec-extensions/selectors.js\":9305,\"core/plugins/oas31/spec-extensions/wrap-selectors.js\":32884,\"core/plugins/oas31/wrap-components/contact.jsx\":77423,\"core/plugins/oas31/wrap-components/info.jsx\":284,\"core/plugins/oas31/wrap-components/license.jsx\":6608,\"core/plugins/oas31/wrap-components/model.jsx\":17042,\"core/plugins/oas31/wrap-components/models.jsx\":22914,\"core/plugins/oas31/wrap-components/version-pragma-filter.jsx\":41434,\"core/plugins/oas31/wrap-components/version-stamp.jsx\":1122,\"core/plugins/on-complete/index.js\":28560,\"core/plugins/request-snippets/fn.js\":92135,\"core/plugins/request-snippets/index.js\":86575,\"core/plugins/request-snippets/request-snippets.jsx\":84206,\"core/plugins/request-snippets/selectors.js\":4669,\"core/plugins/safe-render/components/error-boundary.jsx\":36195,\"core/plugins/safe-render/components/fallback.jsx\":29403,\"core/plugins/safe-render/fn.jsx\":56189,\"core/plugins/safe-render/index.js\":27621,\"core/plugins/samples/fn/get-json-sample-schema.js\":72846,\"core/plugins/samples/fn/get-sample-schema.js\":16132,\"core/plugins/samples/fn/get-xml-sample-schema.js\":81169,\"core/plugins/samples/fn/get-yaml-sample-schema.js\":79431,\"core/plugins/samples/fn/index.js\":29812,\"core/plugins/samples/index.js\":8883,\"core/plugins/spec/actions.js\":51228,\"core/plugins/spec/index.js\":37038,\"core/plugins/spec/reducers.js\":20032,\"core/plugins/spec/selectors.js\":33881,\"core/plugins/spec/wrap-actions.js\":77508,\"core/plugins/swagger-js/configs-wrap-actions.js\":34852,\"core/plugins/swagger-js/index.js\":79934,\"core/plugins/util/index.js\":98525,\"core/plugins/view/fn.js\":48347,\"core/plugins/view/index.js\":73420,\"core/plugins/view/root-injects.jsx\":11092};function o(e){var t=s(e);return n(t)}function s(e){if(!n.o(r,e)){var t=new Error(\"Cannot find module '\"+e+\"'\");throw t.code=\"MODULE_NOT_FOUND\",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=s,e.exports=o,o.id=95102},2517:e=>{\"use strict\";e.exports=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIGNsYXNzPSJsZHMtcm9sbGluZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IGJhY2tncm91bmQtcG9zaXRpb246IGluaXRpYWwgaW5pdGlhbDsgYmFja2dyb3VuZC1yZXBlYXQ6IGluaXRpYWwgaW5pdGlhbDsiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIG5nLWF0dHItc3Ryb2tlPSJ7e2NvbmZpZy5jb2xvcn19IiBuZy1hdHRyLXN0cm9rZS13aWR0aD0ie3tjb25maWcud2lkdGh9fSIgbmctYXR0ci1yPSJ7e2NvbmZpZy5yYWRpdXN9fSIgbmctYXR0ci1zdHJva2UtZGFzaGFycmF5PSJ7e2NvbmZpZy5kYXNoYXJyYXl9fSIgc3Ryb2tlPSIjNTU1NTU1IiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgY2FsY01vZGU9ImxpbmVhciIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49IjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvY2lyY2xlPjwvc3ZnPgo=\"},24654:()=>{},52361:()=>{},94616:()=>{},25110:(e,t,n)=>{e.exports=n(24848)},58309:(e,t,n)=>{e.exports=n(83363)},70586:(e,t,n)=>{e.exports=n(57784)},11189:(e,t,n)=>{e.exports=n(28196)},39022:(e,t,n)=>{e.exports=n(8065)},74386:(e,t,n)=>{e.exports=n(57448)},2250:(e,t,n)=>{e.exports=n(29455)},47475:(e,t,n)=>{e.exports=n(69743)},14418:(e,t,n)=>{e.exports=n(11955)},12373:(e,t,n)=>{e.exports=n(96064)},51679:(e,t,n)=>{e.exports=n(61577)},86:(e,t,n)=>{e.exports=n(46279)},58118:(e,t,n)=>{e.exports=n(33778)},11882:(e,t,n)=>{e.exports=n(19373)},8712:(e,t,n)=>{e.exports=n(73819)},57269:(e,t,n)=>{e.exports=n(11022)},97606:(e,t,n)=>{e.exports=n(61798)},24282:(e,t,n)=>{e.exports=n(52527)},12196:(e,t,n)=>{e.exports=n(36857)},24278:(e,t,n)=>{e.exports=n(82073)},92039:(e,t,n)=>{e.exports=n(45286)},2578:(e,t,n)=>{e.exports=n(62856)},39940:(e,t,n)=>{e.exports=n(2348)},27043:(e,t,n)=>{e.exports=n(35178)},81607:(e,t,n)=>{e.exports=n(76361)},47273:(e,t,n)=>{e.exports=n(71815)},35627:(e,t,n)=>{e.exports=n(8933)},18492:(e,t,n)=>{e.exports=n(15868)},44081:(e,t,n)=>{e.exports=n(14873)},91086:(e,t,n)=>{e.exports=n(38849)},76986:(e,t,n)=>{e.exports=n(63383)},96718:(e,t,n)=>{e.exports=n(41910)},2018:(e,t,n)=>{e.exports=n(86209)},82865:(e,t,n)=>{e.exports=n(53402)},28222:(e,t,n)=>{e.exports=n(23059)},3665:(e,t,n)=>{e.exports=n(47795)},6226:(e,t,n)=>{e.exports=n(27460)},87198:(e,t,n)=>{e.exports=n(27989)},82737:(e,t,n)=>{e.exports=n(5519)},57740:(e,t,n)=>{e.exports=n(23452)},63460:(e,t,n)=>{e.exports=n(57641)},28886:(e,t,n)=>{e.exports=n(72010)},19030:(e,t,n)=>{e.exports=n(93726)},69689:e=>{e.exports=function(e,t){return t.get?t.get.call(e):t.value},e.exports.__esModule=!0,e.exports.default=e.exports},66412:e=>{e.exports=function(e,t,n){if(!t.has(e))throw new TypeError(\"attempted to \"+n+\" private field on non-instance\");return t.get(e)},e.exports.__esModule=!0,e.exports.default=e.exports},47667:(e,t,n)=>{var r=n(69689),o=n(66412);e.exports=function(e,t){var n=o(e,t,\"get\");return r(e,n)},e.exports.__esModule=!0,e.exports.default=e.exports},61125:(e,t,n)=>{var r=n(73685),o=n(57696);e.exports=function(e,t,n){return(t=o(t))in e?r(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},e.exports.__esModule=!0,e.exports.default=e.exports},23101:(e,t,n)=>{var r=n(60269),o=n(14122);function s(){var t;return e.exports=s=r?o(t=r).call(t):function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},e.exports.__esModule=!0,e.exports.default=e.exports,s.apply(this,arguments)}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports},58826:(e,t,n)=>{var r=n(93799),o=n(84710),s=n(44442),i=n(27533),a=n(1449),l=n(57152),c=n(39057),u=n(70573),p=n(73685),h=n(61125);function f(e,t){var n=r(e);if(o){var l=o(e);t&&(l=s(l).call(l,(function(t){return i(e,t).enumerable}))),a(n).apply(n,l)}return n}e.exports=function(e){for(var t=1;t<arguments.length;t++){var n,r,o=null!=arguments[t]?arguments[t]:{};t%2?l(n=f(Object(o),!0)).call(n,(function(t){h(e,t,o[t])})):c?u(e,c(o)):l(r=f(Object(o))).call(r,(function(t){p(e,t,i(o,t))}))}return e},e.exports.__esModule=!0,e.exports.default=e.exports},88436:(e,t,n)=>{var r=n(84710),o=n(69447),s=n(80300);e.exports=function(e,t){if(null==e)return{};var n,i,a=s(e,t);if(r){var l=r(e);for(i=0;i<l.length;i++)n=l[i],o(t).call(t,n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a},e.exports.__esModule=!0,e.exports.default=e.exports},80300:(e,t,n)=>{var r=n(93799),o=n(69447);e.exports=function(e,t){if(null==e)return{};var n,s,i={},a=r(e);for(s=0;s<a.length;s++)n=a[s],o(t).call(t,n)>=0||(i[n]=e[n]);return i},e.exports.__esModule=!0,e.exports.default=e.exports},18504:(e,t,n)=>{var r=n(71384),o=n(20474).default;e.exports=function(e,t){if(\"object\"!==o(e)||null===e)return e;var n=e[r];if(void 0!==n){var s=n.call(e,t||\"default\");if(\"object\"!==o(s))return s;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)},e.exports.__esModule=!0,e.exports.default=e.exports},57696:(e,t,n)=>{var r=n(20474).default,o=n(18504);e.exports=function(e){var t=o(e,\"string\");return\"symbol\"===r(t)?t:String(t)},e.exports.__esModule=!0,e.exports.default=e.exports},20474:(e,t,n)=>{var r=n(86600),o=n(9759);function s(t){return e.exports=s=\"function\"==typeof r&&\"symbol\"==typeof o?function(e){return typeof e}:function(e){return e&&\"function\"==typeof r&&e.constructor===r&&e!==r.prototype?\"symbol\":typeof e},e.exports.__esModule=!0,e.exports.default=e.exports,s(t)}e.exports=s,e.exports.__esModule=!0,e.exports.default=e.exports},64572:(e,t,n)=>{\"use strict\";function r(e){return r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},r(e)}function o(e){var t=function(e,t){if(\"object\"!==r(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||\"default\");if(\"object\"!==r(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"===r(t)?t:String(t)}function s(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.d(t,{Z:()=>s})},87462:(e,t,n)=>{\"use strict\";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},63366:(e,t,n)=>{\"use strict\";function r(e,t){if(null==e)return{};var n,r,o={},s=Object.keys(e);for(r=0;r<s.length;r++)n=s[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},1272:(e,t,n)=>{\"use strict\";function r(e){return null==e}n.d(t,{A8:()=>qt,ZP:()=>Xt});var o={isNothing:r,isObject:function(e){return\"object\"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:r(e)?[]:[e]},repeat:function(e,t){var n,r=\"\";for(n=0;n<t;n+=1)r+=e;return r},isNegativeZero:function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},extend:function(e,t){var n,r,o,s;if(t)for(n=0,r=(s=Object.keys(t)).length;n<r;n+=1)e[o=s[n]]=t[o];return e}};function s(e,t){var n=\"\",r=e.reason||\"(unknown reason)\";return e.mark?(e.mark.name&&(n+='in \"'+e.mark.name+'\" '),n+=\"(\"+(e.mark.line+1)+\":\"+(e.mark.column+1)+\")\",!t&&e.mark.snippet&&(n+=\"\\n\\n\"+e.mark.snippet),r+\" \"+n):r}function i(e,t){Error.call(this),this.name=\"YAMLException\",this.reason=e,this.mark=t,this.message=s(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||\"\"}i.prototype=Object.create(Error.prototype),i.prototype.constructor=i,i.prototype.toString=function(e){return this.name+\": \"+s(this,e)};var a=i;function l(e,t,n,r,o){var s=\"\",i=\"\",a=Math.floor(o/2)-1;return r-t>a&&(t=r-a+(s=\" ... \").length),n-r>a&&(n=r+a-(i=\" ...\").length),{str:s+e.slice(t,n).replace(/\\t/g,\"→\")+i,pos:r-t+s.length}}function c(e,t){return o.repeat(\" \",t-e.length)+e}var u=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),\"number\"!=typeof t.indent&&(t.indent=1),\"number\"!=typeof t.linesBefore&&(t.linesBefore=3),\"number\"!=typeof t.linesAfter&&(t.linesAfter=2);for(var n,r=/\\r?\\n|\\r|\\0/g,s=[0],i=[],a=-1;n=r.exec(e.buffer);)i.push(n.index),s.push(n.index+n[0].length),e.position<=n.index&&a<0&&(a=s.length-2);a<0&&(a=s.length-1);var u,p,h=\"\",f=Math.min(e.line+t.linesAfter,i.length).toString().length,d=t.maxLength-(t.indent+f+3);for(u=1;u<=t.linesBefore&&!(a-u<0);u++)p=l(e.buffer,s[a-u],i[a-u],e.position-(s[a]-s[a-u]),d),h=o.repeat(\" \",t.indent)+c((e.line-u+1).toString(),f)+\" | \"+p.str+\"\\n\"+h;for(p=l(e.buffer,s[a],i[a],e.position,d),h+=o.repeat(\" \",t.indent)+c((e.line+1).toString(),f)+\" | \"+p.str+\"\\n\",h+=o.repeat(\"-\",t.indent+f+3+p.pos)+\"^\\n\",u=1;u<=t.linesAfter&&!(a+u>=i.length);u++)p=l(e.buffer,s[a+u],i[a+u],e.position-(s[a]-s[a+u]),d),h+=o.repeat(\" \",t.indent)+c((e.line+u+1).toString(),f)+\" | \"+p.str+\"\\n\";return h.replace(/\\n$/,\"\")},p=[\"kind\",\"multi\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"representName\",\"defaultStyle\",\"styleAliases\"],h=[\"scalar\",\"sequence\",\"mapping\"];var f=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===p.indexOf(t))throw new a('Unknown option \"'+t+'\" is met in definition of \"'+e+'\" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===h.indexOf(this.kind))throw new a('Unknown kind \"'+this.kind+'\" is specified for \"'+e+'\" YAML type.')};function d(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,r){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=r)})),n[t]=e})),n}function m(e){return this.extend(e)}m.prototype.extend=function(e){var t=[],n=[];if(e instanceof f)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new a(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof f))throw new a(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");if(e.loadKind&&\"scalar\"!==e.loadKind)throw new a(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");if(e.multi)throw new a(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\")})),n.forEach((function(e){if(!(e instanceof f))throw new a(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\")}));var r=Object.create(m.prototype);return r.implicit=(this.implicit||[]).concat(t),r.explicit=(this.explicit||[]).concat(n),r.compiledImplicit=d(r,\"implicit\"),r.compiledExplicit=d(r,\"explicit\"),r.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(r);return n}(r.compiledImplicit,r.compiledExplicit),r};var g=m,y=new f(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(e){return null!==e?e:\"\"}}),v=new f(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(e){return null!==e?e:[]}}),b=new f(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(e){return null!==e?e:{}}}),w=new g({explicit:[y,v,b]});var E=new f(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&\"~\"===e||4===t&&(\"null\"===e||\"Null\"===e||\"NULL\"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"},empty:function(){return\"\"}},defaultStyle:\"lowercase\"});var x=new f(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&(\"true\"===e||\"True\"===e||\"TRUE\"===e)||5===t&&(\"false\"===e||\"False\"===e||\"FALSE\"===e)},construct:function(e){return\"true\"===e||\"True\"===e||\"TRUE\"===e},predicate:function(e){return\"[object Boolean]\"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?\"true\":\"false\"},uppercase:function(e){return e?\"TRUE\":\"FALSE\"},camelcase:function(e){return e?\"True\":\"False\"}},defaultStyle:\"lowercase\"});function S(e){return 48<=e&&e<=55}function _(e){return 48<=e&&e<=57}var j=new f(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t,n,r=e.length,o=0,s=!1;if(!r)return!1;if(\"-\"!==(t=e[o])&&\"+\"!==t||(t=e[++o]),\"0\"===t){if(o+1===r)return!0;if(\"b\"===(t=e[++o])){for(o++;o<r;o++)if(\"_\"!==(t=e[o])){if(\"0\"!==t&&\"1\"!==t)return!1;s=!0}return s&&\"_\"!==t}if(\"x\"===t){for(o++;o<r;o++)if(\"_\"!==(t=e[o])){if(!(48<=(n=e.charCodeAt(o))&&n<=57||65<=n&&n<=70||97<=n&&n<=102))return!1;s=!0}return s&&\"_\"!==t}if(\"o\"===t){for(o++;o<r;o++)if(\"_\"!==(t=e[o])){if(!S(e.charCodeAt(o)))return!1;s=!0}return s&&\"_\"!==t}}if(\"_\"===t)return!1;for(;o<r;o++)if(\"_\"!==(t=e[o])){if(!_(e.charCodeAt(o)))return!1;s=!0}return!(!s||\"_\"===t)},construct:function(e){var t,n=e,r=1;if(-1!==n.indexOf(\"_\")&&(n=n.replace(/_/g,\"\")),\"-\"!==(t=n[0])&&\"+\"!==t||(\"-\"===t&&(r=-1),t=(n=n.slice(1))[0]),\"0\"===n)return 0;if(\"0\"===t){if(\"b\"===n[1])return r*parseInt(n.slice(2),2);if(\"x\"===n[1])return r*parseInt(n.slice(2),16);if(\"o\"===n[1])return r*parseInt(n.slice(2),8)}return r*parseInt(n,10)},predicate:function(e){return\"[object Number]\"===Object.prototype.toString.call(e)&&e%1==0&&!o.isNegativeZero(e)},represent:{binary:function(e){return e>=0?\"0b\"+e.toString(2):\"-0b\"+e.toString(2).slice(1)},octal:function(e){return e>=0?\"0o\"+e.toString(8):\"-0o\"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?\"0x\"+e.toString(16).toUpperCase():\"-0x\"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}}),O=new RegExp(\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");var k=/^[-+]?[0-9]+e/;var A=new f(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:function(e){return null!==e&&!(!O.test(e)||\"_\"===e[e.length-1])},construct:function(e){var t,n;return n=\"-\"===(t=e.replace(/_/g,\"\").toLowerCase())[0]?-1:1,\"+-\".indexOf(t[0])>=0&&(t=t.slice(1)),\".inf\"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:\".nan\"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return\"[object Number]\"===Object.prototype.toString.call(e)&&(e%1!=0||o.isNegativeZero(e))},represent:function(e,t){var n;if(isNaN(e))switch(t){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===e)switch(t){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(o.isNegativeZero(e))return\"-0.0\";return n=e.toString(10),k.test(n)?n.replace(\"e\",\".e\"):n},defaultStyle:\"lowercase\"}),C=w.extend({implicit:[E,x,j,A]}),P=C,N=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),I=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");var T=new f(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:function(e){return null!==e&&(null!==N.exec(e)||null!==I.exec(e))},construct:function(e){var t,n,r,o,s,i,a,l,c=0,u=null;if(null===(t=N.exec(e))&&(t=I.exec(e)),null===t)throw new Error(\"Date resolve error\");if(n=+t[1],r=+t[2]-1,o=+t[3],!t[4])return new Date(Date.UTC(n,r,o));if(s=+t[4],i=+t[5],a=+t[6],t[7]){for(c=t[7].slice(0,3);c.length<3;)c+=\"0\";c=+c}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),\"-\"===t[9]&&(u=-u)),l=new Date(Date.UTC(n,r,o,s,i,a,c)),u&&l.setTime(l.getTime()-u),l},instanceOf:Date,represent:function(e){return e.toISOString()}});var R=new f(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:function(e){return\"<<\"===e||null===e}}),M=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";var D=new f(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t,n,r=0,o=e.length,s=M;for(n=0;n<o;n++)if(!((t=s.indexOf(e.charAt(n)))>64)){if(t<0)return!1;r+=6}return r%8==0},construct:function(e){var t,n,r=e.replace(/[\\r\\n=]/g,\"\"),o=r.length,s=M,i=0,a=[];for(t=0;t<o;t++)t%4==0&&t&&(a.push(i>>16&255),a.push(i>>8&255),a.push(255&i)),i=i<<6|s.indexOf(r.charAt(t));return 0===(n=o%4*6)?(a.push(i>>16&255),a.push(i>>8&255),a.push(255&i)):18===n?(a.push(i>>10&255),a.push(i>>2&255)):12===n&&a.push(i>>4&255),new Uint8Array(a)},predicate:function(e){return\"[object Uint8Array]\"===Object.prototype.toString.call(e)},represent:function(e){var t,n,r=\"\",o=0,s=e.length,i=M;for(t=0;t<s;t++)t%3==0&&t&&(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]),o=(o<<8)+e[t];return 0===(n=s%3)?(r+=i[o>>18&63],r+=i[o>>12&63],r+=i[o>>6&63],r+=i[63&o]):2===n?(r+=i[o>>10&63],r+=i[o>>4&63],r+=i[o<<2&63],r+=i[64]):1===n&&(r+=i[o>>2&63],r+=i[o<<4&63],r+=i[64],r+=i[64]),r}}),F=Object.prototype.hasOwnProperty,L=Object.prototype.toString;var B=new f(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:function(e){if(null===e)return!0;var t,n,r,o,s,i=[],a=e;for(t=0,n=a.length;t<n;t+=1){if(r=a[t],s=!1,\"[object Object]\"!==L.call(r))return!1;for(o in r)if(F.call(r,o)){if(s)return!1;s=!0}if(!s)return!1;if(-1!==i.indexOf(o))return!1;i.push(o)}return!0},construct:function(e){return null!==e?e:[]}}),$=Object.prototype.toString;var q=new f(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:function(e){if(null===e)return!0;var t,n,r,o,s,i=e;for(s=new Array(i.length),t=0,n=i.length;t<n;t+=1){if(r=i[t],\"[object Object]\"!==$.call(r))return!1;if(1!==(o=Object.keys(r)).length)return!1;s[t]=[o[0],r[o[0]]]}return!0},construct:function(e){if(null===e)return[];var t,n,r,o,s,i=e;for(s=new Array(i.length),t=0,n=i.length;t<n;t+=1)r=i[t],o=Object.keys(r),s[t]=[o[0],r[o[0]]];return s}}),U=Object.prototype.hasOwnProperty;var z=new f(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:function(e){if(null===e)return!0;var t,n=e;for(t in n)if(U.call(n,t)&&null!==n[t])return!1;return!0},construct:function(e){return null!==e?e:{}}}),V=P.extend({implicit:[T,R],explicit:[D,B,q,z]}),W=Object.prototype.hasOwnProperty,J=1,K=2,H=3,G=4,Z=1,Y=2,X=3,Q=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,ee=/[\\x85\\u2028\\u2029]/,te=/[,\\[\\]\\{\\}]/,ne=/^(?:!|!!|![a-z\\-]+!)$/i,re=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function oe(e){return Object.prototype.toString.call(e)}function se(e){return 10===e||13===e}function ie(e){return 9===e||32===e}function ae(e){return 9===e||32===e||10===e||13===e}function le(e){return 44===e||91===e||93===e||123===e||125===e}function ce(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function ue(e){return 48===e?\"\\0\":97===e?\"\u0007\":98===e?\"\\b\":116===e||9===e?\"\\t\":110===e?\"\\n\":118===e?\"\\v\":102===e?\"\\f\":114===e?\"\\r\":101===e?\"\u001b\":32===e?\" \":34===e?'\"':47===e?\"/\":92===e?\"\\\\\":78===e?\"\":95===e?\" \":76===e?\"\\u2028\":80===e?\"\\u2029\":\"\"}function pe(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}for(var he=new Array(256),fe=new Array(256),de=0;de<256;de++)he[de]=ue(de)?1:0,fe[de]=ue(de);function me(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||V,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function ge(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=u(n),new a(t,n)}function ye(e,t){throw ge(e,t)}function ve(e,t){e.onWarning&&e.onWarning.call(null,ge(e,t))}var be={YAML:function(e,t,n){var r,o,s;null!==e.version&&ye(e,\"duplication of %YAML directive\"),1!==n.length&&ye(e,\"YAML directive accepts exactly one argument\"),null===(r=/^([0-9]+)\\.([0-9]+)$/.exec(n[0]))&&ye(e,\"ill-formed argument of the YAML directive\"),o=parseInt(r[1],10),s=parseInt(r[2],10),1!==o&&ye(e,\"unacceptable YAML version of the document\"),e.version=n[0],e.checkLineBreaks=s<2,1!==s&&2!==s&&ve(e,\"unsupported YAML version of the document\")},TAG:function(e,t,n){var r,o;2!==n.length&&ye(e,\"TAG directive accepts exactly two arguments\"),r=n[0],o=n[1],ne.test(r)||ye(e,\"ill-formed tag handle (first argument) of the TAG directive\"),W.call(e.tagMap,r)&&ye(e,'there is a previously declared suffix for \"'+r+'\" tag handle'),re.test(o)||ye(e,\"ill-formed tag prefix (second argument) of the TAG directive\");try{o=decodeURIComponent(o)}catch(t){ye(e,\"tag prefix is malformed: \"+o)}e.tagMap[r]=o}};function we(e,t,n,r){var o,s,i,a;if(t<n){if(a=e.input.slice(t,n),r)for(o=0,s=a.length;o<s;o+=1)9===(i=a.charCodeAt(o))||32<=i&&i<=1114111||ye(e,\"expected valid JSON character\");else Q.test(a)&&ye(e,\"the stream contains non-printable characters\");e.result+=a}}function Ee(e,t,n,r){var s,i,a,l;for(o.isObject(n)||ye(e,\"cannot merge mappings; the provided source object is unacceptable\"),a=0,l=(s=Object.keys(n)).length;a<l;a+=1)i=s[a],W.call(t,i)||(t[i]=n[i],r[i]=!0)}function xe(e,t,n,r,o,s,i,a,l){var c,u;if(Array.isArray(o))for(c=0,u=(o=Array.prototype.slice.call(o)).length;c<u;c+=1)Array.isArray(o[c])&&ye(e,\"nested arrays are not supported inside keys\"),\"object\"==typeof o&&\"[object Object]\"===oe(o[c])&&(o[c]=\"[object Object]\");if(\"object\"==typeof o&&\"[object Object]\"===oe(o)&&(o=\"[object Object]\"),o=String(o),null===t&&(t={}),\"tag:yaml.org,2002:merge\"===r)if(Array.isArray(s))for(c=0,u=s.length;c<u;c+=1)Ee(e,t,s[c],n);else Ee(e,t,s,n);else e.json||W.call(n,o)||!W.call(t,o)||(e.line=i||e.line,e.lineStart=a||e.lineStart,e.position=l||e.position,ye(e,\"duplicated mapping key\")),\"__proto__\"===o?Object.defineProperty(t,o,{configurable:!0,enumerable:!0,writable:!0,value:s}):t[o]=s,delete n[o];return t}function Se(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):ye(e,\"a line break is expected\"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function _e(e,t,n){for(var r=0,o=e.input.charCodeAt(e.position);0!==o;){for(;ie(o);)9===o&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),o=e.input.charCodeAt(++e.position);if(t&&35===o)do{o=e.input.charCodeAt(++e.position)}while(10!==o&&13!==o&&0!==o);if(!se(o))break;for(Se(e),o=e.input.charCodeAt(e.position),r++,e.lineIndent=0;32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position)}return-1!==n&&0!==r&&e.lineIndent<n&&ve(e,\"deficient indentation\"),r}function je(e){var t,n=e.position;return!(45!==(t=e.input.charCodeAt(n))&&46!==t||t!==e.input.charCodeAt(n+1)||t!==e.input.charCodeAt(n+2)||(n+=3,0!==(t=e.input.charCodeAt(n))&&!ae(t)))}function Oe(e,t){1===t?e.result+=\" \":t>1&&(e.result+=o.repeat(\"\\n\",t-1))}function ke(e,t){var n,r,o=e.tag,s=e.anchor,i=[],a=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),r=e.input.charCodeAt(e.position);0!==r&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ye(e,\"tab characters must not be used in indentation\")),45===r)&&ae(e.input.charCodeAt(e.position+1));)if(a=!0,e.position++,_e(e,!0,-1)&&e.lineIndent<=t)i.push(null),r=e.input.charCodeAt(e.position);else if(n=e.line,Pe(e,t,H,!1,!0),i.push(e.result),_e(e,!0,-1),r=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==r)ye(e,\"bad indentation of a sequence entry\");else if(e.lineIndent<t)break;return!!a&&(e.tag=o,e.anchor=s,e.kind=\"sequence\",e.result=i,!0)}function Ae(e){var t,n,r,o,s=!1,i=!1;if(33!==(o=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&ye(e,\"duplication of a tag property\"),60===(o=e.input.charCodeAt(++e.position))?(s=!0,o=e.input.charCodeAt(++e.position)):33===o?(i=!0,n=\"!!\",o=e.input.charCodeAt(++e.position)):n=\"!\",t=e.position,s){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&62!==o);e.position<e.length?(r=e.input.slice(t,e.position),o=e.input.charCodeAt(++e.position)):ye(e,\"unexpected end of the stream within a verbatim tag\")}else{for(;0!==o&&!ae(o);)33===o&&(i?ye(e,\"tag suffix cannot contain exclamation marks\"):(n=e.input.slice(t-1,e.position+1),ne.test(n)||ye(e,\"named tag handle cannot contain such characters\"),i=!0,t=e.position+1)),o=e.input.charCodeAt(++e.position);r=e.input.slice(t,e.position),te.test(r)&&ye(e,\"tag suffix cannot contain flow indicator characters\")}r&&!re.test(r)&&ye(e,\"tag name cannot contain such characters: \"+r);try{r=decodeURIComponent(r)}catch(t){ye(e,\"tag name is malformed: \"+r)}return s?e.tag=r:W.call(e.tagMap,n)?e.tag=e.tagMap[n]+r:\"!\"===n?e.tag=\"!\"+r:\"!!\"===n?e.tag=\"tag:yaml.org,2002:\"+r:ye(e,'undeclared tag handle \"'+n+'\"'),!0}function Ce(e){var t,n;if(38!==(n=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&ye(e,\"duplication of an anchor property\"),n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!ae(n)&&!le(n);)n=e.input.charCodeAt(++e.position);return e.position===t&&ye(e,\"name of an anchor node must contain at least one character\"),e.anchor=e.input.slice(t,e.position),!0}function Pe(e,t,n,r,s){var i,a,l,c,u,p,h,f,d,m=1,g=!1,y=!1;if(null!==e.listener&&e.listener(\"open\",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,i=a=l=G===n||H===n,r&&_e(e,!0,-1)&&(g=!0,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)),1===m)for(;Ae(e)||Ce(e);)_e(e,!0,-1)?(g=!0,l=i,e.lineIndent>t?m=1:e.lineIndent===t?m=0:e.lineIndent<t&&(m=-1)):l=!1;if(l&&(l=g||s),1!==m&&G!==n||(f=J===n||K===n?t:t+1,d=e.position-e.lineStart,1===m?l&&(ke(e,d)||function(e,t,n){var r,o,s,i,a,l,c,u=e.tag,p=e.anchor,h={},f=Object.create(null),d=null,m=null,g=null,y=!1,v=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=h),c=e.input.charCodeAt(e.position);0!==c;){if(y||-1===e.firstTabInLine||(e.position=e.firstTabInLine,ye(e,\"tab characters must not be used in indentation\")),r=e.input.charCodeAt(e.position+1),s=e.line,63!==c&&58!==c||!ae(r)){if(i=e.line,a=e.lineStart,l=e.position,!Pe(e,n,K,!1,!0))break;if(e.line===s){for(c=e.input.charCodeAt(e.position);ie(c);)c=e.input.charCodeAt(++e.position);if(58===c)ae(c=e.input.charCodeAt(++e.position))||ye(e,\"a whitespace character is expected after the key-value separator within a block mapping\"),y&&(xe(e,h,f,d,m,null,i,a,l),d=m=g=null),v=!0,y=!1,o=!1,d=e.tag,m=e.result;else{if(!v)return e.tag=u,e.anchor=p,!0;ye(e,\"can not read an implicit mapping pair; a colon is missed\")}}else{if(!v)return e.tag=u,e.anchor=p,!0;ye(e,\"can not read a block mapping entry; a multiline key may not be an implicit key\")}}else 63===c?(y&&(xe(e,h,f,d,m,null,i,a,l),d=m=g=null),v=!0,y=!0,o=!0):y?(y=!1,o=!0):ye(e,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),e.position+=1,c=r;if((e.line===s||e.lineIndent>t)&&(y&&(i=e.line,a=e.lineStart,l=e.position),Pe(e,t,G,!0,o)&&(y?m=e.result:g=e.result),y||(xe(e,h,f,d,m,g,i,a,l),d=m=g=null),_e(e,!0,-1),c=e.input.charCodeAt(e.position)),(e.line===s||e.lineIndent>t)&&0!==c)ye(e,\"bad indentation of a mapping entry\");else if(e.lineIndent<t)break}return y&&xe(e,h,f,d,m,null,i,a,l),v&&(e.tag=u,e.anchor=p,e.kind=\"mapping\",e.result=h),v}(e,d,f))||function(e,t){var n,r,o,s,i,a,l,c,u,p,h,f,d=!0,m=e.tag,g=e.anchor,y=Object.create(null);if(91===(f=e.input.charCodeAt(e.position)))i=93,c=!1,s=[];else{if(123!==f)return!1;i=125,c=!0,s={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=s),f=e.input.charCodeAt(++e.position);0!==f;){if(_e(e,!0,t),(f=e.input.charCodeAt(e.position))===i)return e.position++,e.tag=m,e.anchor=g,e.kind=c?\"mapping\":\"sequence\",e.result=s,!0;d?44===f&&ye(e,\"expected the node content, but found ','\"):ye(e,\"missed comma between flow collection entries\"),h=null,a=l=!1,63===f&&ae(e.input.charCodeAt(e.position+1))&&(a=l=!0,e.position++,_e(e,!0,t)),n=e.line,r=e.lineStart,o=e.position,Pe(e,t,J,!1,!0),p=e.tag,u=e.result,_e(e,!0,t),f=e.input.charCodeAt(e.position),!l&&e.line!==n||58!==f||(a=!0,f=e.input.charCodeAt(++e.position),_e(e,!0,t),Pe(e,t,J,!1,!0),h=e.result),c?xe(e,s,y,p,u,h,n,r,o):a?s.push(xe(e,null,y,p,u,h,n,r,o)):s.push(u),_e(e,!0,t),44===(f=e.input.charCodeAt(e.position))?(d=!0,f=e.input.charCodeAt(++e.position)):d=!1}ye(e,\"unexpected end of the stream within a flow collection\")}(e,f)?y=!0:(a&&function(e,t){var n,r,s,i,a,l=Z,c=!1,u=!1,p=t,h=0,f=!1;if(124===(i=e.input.charCodeAt(e.position)))r=!1;else{if(62!==i)return!1;r=!0}for(e.kind=\"scalar\",e.result=\"\";0!==i;)if(43===(i=e.input.charCodeAt(++e.position))||45===i)Z===l?l=43===i?X:Y:ye(e,\"repeat of a chomping mode identifier\");else{if(!((s=48<=(a=i)&&a<=57?a-48:-1)>=0))break;0===s?ye(e,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):u?ye(e,\"repeat of an indentation width identifier\"):(p=t+s-1,u=!0)}if(ie(i)){do{i=e.input.charCodeAt(++e.position)}while(ie(i));if(35===i)do{i=e.input.charCodeAt(++e.position)}while(!se(i)&&0!==i)}for(;0!==i;){for(Se(e),e.lineIndent=0,i=e.input.charCodeAt(e.position);(!u||e.lineIndent<p)&&32===i;)e.lineIndent++,i=e.input.charCodeAt(++e.position);if(!u&&e.lineIndent>p&&(p=e.lineIndent),se(i))h++;else{if(e.lineIndent<p){l===X?e.result+=o.repeat(\"\\n\",c?1+h:h):l===Z&&c&&(e.result+=\"\\n\");break}for(r?ie(i)?(f=!0,e.result+=o.repeat(\"\\n\",c?1+h:h)):f?(f=!1,e.result+=o.repeat(\"\\n\",h+1)):0===h?c&&(e.result+=\" \"):e.result+=o.repeat(\"\\n\",h):e.result+=o.repeat(\"\\n\",c?1+h:h),c=!0,u=!0,h=0,n=e.position;!se(i)&&0!==i;)i=e.input.charCodeAt(++e.position);we(e,n,e.position,!1)}}return!0}(e,f)||function(e,t){var n,r,o;if(39!==(n=e.input.charCodeAt(e.position)))return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,r=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(we(e,r,e.position,!0),39!==(n=e.input.charCodeAt(++e.position)))return!0;r=e.position,e.position++,o=e.position}else se(n)?(we(e,r,o,!0),Oe(e,_e(e,!1,t)),r=o=e.position):e.position===e.lineStart&&je(e)?ye(e,\"unexpected end of the document within a single quoted scalar\"):(e.position++,o=e.position);ye(e,\"unexpected end of the stream within a single quoted scalar\")}(e,f)||function(e,t){var n,r,o,s,i,a,l;if(34!==(a=e.input.charCodeAt(e.position)))return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,n=r=e.position;0!==(a=e.input.charCodeAt(e.position));){if(34===a)return we(e,n,e.position,!0),e.position++,!0;if(92===a){if(we(e,n,e.position,!0),se(a=e.input.charCodeAt(++e.position)))_e(e,!1,t);else if(a<256&&he[a])e.result+=fe[a],e.position++;else if((i=120===(l=a)?2:117===l?4:85===l?8:0)>0){for(o=i,s=0;o>0;o--)(i=ce(a=e.input.charCodeAt(++e.position)))>=0?s=(s<<4)+i:ye(e,\"expected hexadecimal character\");e.result+=pe(s),e.position++}else ye(e,\"unknown escape sequence\");n=r=e.position}else se(a)?(we(e,n,r,!0),Oe(e,_e(e,!1,t)),n=r=e.position):e.position===e.lineStart&&je(e)?ye(e,\"unexpected end of the document within a double quoted scalar\"):(e.position++,r=e.position)}ye(e,\"unexpected end of the stream within a double quoted scalar\")}(e,f)?y=!0:!function(e){var t,n,r;if(42!==(r=e.input.charCodeAt(e.position)))return!1;for(r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!ae(r)&&!le(r);)r=e.input.charCodeAt(++e.position);return e.position===t&&ye(e,\"name of an alias node must contain at least one character\"),n=e.input.slice(t,e.position),W.call(e.anchorMap,n)||ye(e,'unidentified alias \"'+n+'\"'),e.result=e.anchorMap[n],_e(e,!0,-1),!0}(e)?function(e,t,n){var r,o,s,i,a,l,c,u,p=e.kind,h=e.result;if(ae(u=e.input.charCodeAt(e.position))||le(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(ae(r=e.input.charCodeAt(e.position+1))||n&&le(r)))return!1;for(e.kind=\"scalar\",e.result=\"\",o=s=e.position,i=!1;0!==u;){if(58===u){if(ae(r=e.input.charCodeAt(e.position+1))||n&&le(r))break}else if(35===u){if(ae(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&je(e)||n&&le(u))break;if(se(u)){if(a=e.line,l=e.lineStart,c=e.lineIndent,_e(e,!1,-1),e.lineIndent>=t){i=!0,u=e.input.charCodeAt(e.position);continue}e.position=s,e.line=a,e.lineStart=l,e.lineIndent=c;break}}i&&(we(e,o,s,!1),Oe(e,e.line-a),o=s=e.position,i=!1),ie(u)||(s=e.position+1),u=e.input.charCodeAt(++e.position)}return we(e,o,s,!1),!!e.result||(e.kind=p,e.result=h,!1)}(e,f,J===n)&&(y=!0,null===e.tag&&(e.tag=\"?\")):(y=!0,null===e.tag&&null===e.anchor||ye(e,\"alias node should not have any properties\")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===m&&(y=l&&ke(e,d))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if(\"?\"===e.tag){for(null!==e.result&&\"scalar\"!==e.kind&&ye(e,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+e.kind+'\"'),c=0,u=e.implicitTypes.length;c<u;c+=1)if((h=e.implicitTypes[c]).resolve(e.result)){e.result=h.construct(e.result),e.tag=h.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else if(\"!\"!==e.tag){if(W.call(e.typeMap[e.kind||\"fallback\"],e.tag))h=e.typeMap[e.kind||\"fallback\"][e.tag];else for(h=null,c=0,u=(p=e.typeMap.multi[e.kind||\"fallback\"]).length;c<u;c+=1)if(e.tag.slice(0,p[c].tag.length)===p[c].tag){h=p[c];break}h||ye(e,\"unknown tag !<\"+e.tag+\">\"),null!==e.result&&h.kind!==e.kind&&ye(e,\"unacceptable node kind for !<\"+e.tag+'> tag; it should be \"'+h.kind+'\", not \"'+e.kind+'\"'),h.resolve(e.result,e.tag)?(e.result=h.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ye(e,\"cannot resolve a node with !<\"+e.tag+\"> explicit tag\")}return null!==e.listener&&e.listener(\"close\",e),null!==e.tag||null!==e.anchor||y}function Ne(e){var t,n,r,o,s=e.position,i=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(o=e.input.charCodeAt(e.position))&&(_e(e,!0,-1),o=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==o));){for(i=!0,o=e.input.charCodeAt(++e.position),t=e.position;0!==o&&!ae(o);)o=e.input.charCodeAt(++e.position);for(r=[],(n=e.input.slice(t,e.position)).length<1&&ye(e,\"directive name must not be less than one character in length\");0!==o;){for(;ie(o);)o=e.input.charCodeAt(++e.position);if(35===o){do{o=e.input.charCodeAt(++e.position)}while(0!==o&&!se(o));break}if(se(o))break;for(t=e.position;0!==o&&!ae(o);)o=e.input.charCodeAt(++e.position);r.push(e.input.slice(t,e.position))}0!==o&&Se(e),W.call(be,n)?be[n](e,n,r):ve(e,'unknown document directive \"'+n+'\"')}_e(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,_e(e,!0,-1)):i&&ye(e,\"directives end mark is expected\"),Pe(e,e.lineIndent-1,G,!1,!0),_e(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(s,e.position))&&ve(e,\"non-ASCII line breaks are interpreted as content\"),e.documents.push(e.result),e.position===e.lineStart&&je(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,_e(e,!0,-1)):e.position<e.length-1&&ye(e,\"end of the stream or a document separator is expected\")}function Ie(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+=\"\\n\"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var n=new me(e,t),r=e.indexOf(\"\\0\");for(-1!==r&&(n.position=r,ye(n,\"null byte is not allowed in input\")),n.input+=\"\\0\";32===n.input.charCodeAt(n.position);)n.lineIndent+=1,n.position+=1;for(;n.position<n.length-1;)Ne(n);return n.documents}var Te={loadAll:function(e,t,n){null!==t&&\"object\"==typeof t&&void 0===n&&(n=t,t=null);var r=Ie(e,n);if(\"function\"!=typeof t)return r;for(var o=0,s=r.length;o<s;o+=1)t(r[o])},load:function(e,t){var n=Ie(e,t);if(0!==n.length){if(1===n.length)return n[0];throw new a(\"expected a single document in the stream, but found more\")}}},Re=Object.prototype.toString,Me=Object.prototype.hasOwnProperty,De=65279,Fe=9,Le=10,Be=13,$e=32,qe=33,Ue=34,ze=35,Ve=37,We=38,Je=39,Ke=42,He=44,Ge=45,Ze=58,Ye=61,Xe=62,Qe=63,et=64,tt=91,nt=93,rt=96,ot=123,st=124,it=125,at={0:\"\\\\0\",7:\"\\\\a\",8:\"\\\\b\",9:\"\\\\t\",10:\"\\\\n\",11:\"\\\\v\",12:\"\\\\f\",13:\"\\\\r\",27:\"\\\\e\",34:'\\\\\"',92:\"\\\\\\\\\",133:\"\\\\N\",160:\"\\\\_\",8232:\"\\\\L\",8233:\"\\\\P\"},lt=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"],ct=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;function ut(e){var t,n,r;if(t=e.toString(16).toUpperCase(),e<=255)n=\"x\",r=2;else if(e<=65535)n=\"u\",r=4;else{if(!(e<=4294967295))throw new a(\"code point within a string may not be greater than 0xFFFFFFFF\");n=\"U\",r=8}return\"\\\\\"+n+o.repeat(\"0\",r-t.length)+t}var pt=1,ht=2;function ft(e){this.schema=e.schema||V,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=o.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=function(e,t){var n,r,o,s,i,a,l;if(null===t)return{};for(n={},o=0,s=(r=Object.keys(t)).length;o<s;o+=1)i=r[o],a=String(t[i]),\"!!\"===i.slice(0,2)&&(i=\"tag:yaml.org,2002:\"+i.slice(2)),(l=e.compiledTypeMap.fallback[i])&&Me.call(l.styleAliases,a)&&(a=l.styleAliases[a]),n[i]=a;return n}(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType='\"'===e.quotingType?ht:pt,this.forceQuotes=e.forceQuotes||!1,this.replacer=\"function\"==typeof e.replacer?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function dt(e,t){for(var n,r=o.repeat(\" \",t),s=0,i=-1,a=\"\",l=e.length;s<l;)-1===(i=e.indexOf(\"\\n\",s))?(n=e.slice(s),s=l):(n=e.slice(s,i+1),s=i+1),n.length&&\"\\n\"!==n&&(a+=r),a+=n;return a}function mt(e,t){return\"\\n\"+o.repeat(\" \",e.indent*t)}function gt(e){return e===$e||e===Fe}function yt(e){return 32<=e&&e<=126||161<=e&&e<=55295&&8232!==e&&8233!==e||57344<=e&&e<=65533&&e!==De||65536<=e&&e<=1114111}function vt(e){return yt(e)&&e!==De&&e!==Be&&e!==Le}function bt(e,t,n){var r=vt(e),o=r&&!gt(e);return(n?r:r&&e!==He&&e!==tt&&e!==nt&&e!==ot&&e!==it)&&e!==ze&&!(t===Ze&&!o)||vt(t)&&!gt(t)&&e===ze||t===Ze&&o}function wt(e,t){var n,r=e.charCodeAt(t);return r>=55296&&r<=56319&&t+1<e.length&&(n=e.charCodeAt(t+1))>=56320&&n<=57343?1024*(r-55296)+n-56320+65536:r}function Et(e){return/^\\n* /.test(e)}var xt=1,St=2,_t=3,jt=4,Ot=5;function kt(e,t,n,r,o,s,i,a){var l,c,u=0,p=null,h=!1,f=!1,d=-1!==r,m=-1,g=yt(c=wt(e,0))&&c!==De&&!gt(c)&&c!==Ge&&c!==Qe&&c!==Ze&&c!==He&&c!==tt&&c!==nt&&c!==ot&&c!==it&&c!==ze&&c!==We&&c!==Ke&&c!==qe&&c!==st&&c!==Ye&&c!==Xe&&c!==Je&&c!==Ue&&c!==Ve&&c!==et&&c!==rt&&function(e){return!gt(e)&&e!==Ze}(wt(e,e.length-1));if(t||i)for(l=0;l<e.length;u>=65536?l+=2:l++){if(!yt(u=wt(e,l)))return Ot;g=g&&bt(u,p,a),p=u}else{for(l=0;l<e.length;u>=65536?l+=2:l++){if((u=wt(e,l))===Le)h=!0,d&&(f=f||l-m-1>r&&\" \"!==e[m+1],m=l);else if(!yt(u))return Ot;g=g&&bt(u,p,a),p=u}f=f||d&&l-m-1>r&&\" \"!==e[m+1]}return h||f?n>9&&Et(e)?Ot:i?s===ht?Ot:St:f?jt:_t:!g||i||o(e)?s===ht?Ot:St:xt}function At(e,t,n,r,o){e.dump=function(){if(0===t.length)return e.quotingType===ht?'\"\"':\"''\";if(!e.noCompatMode&&(-1!==lt.indexOf(t)||ct.test(t)))return e.quotingType===ht?'\"'+t+'\"':\"'\"+t+\"'\";var s=e.indent*Math.max(1,n),i=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-s),l=r||e.flowLevel>-1&&n>=e.flowLevel;switch(kt(t,l,e.indent,i,(function(t){return function(e,t){var n,r;for(n=0,r=e.implicitTypes.length;n<r;n+=1)if(e.implicitTypes[n].resolve(t))return!0;return!1}(e,t)}),e.quotingType,e.forceQuotes&&!r,o)){case xt:return t;case St:return\"'\"+t.replace(/'/g,\"''\")+\"'\";case _t:return\"|\"+Ct(t,e.indent)+Pt(dt(t,s));case jt:return\">\"+Ct(t,e.indent)+Pt(dt(function(e,t){var n,r,o=/(\\n+)([^\\n]*)/g,s=(a=e.indexOf(\"\\n\"),a=-1!==a?a:e.length,o.lastIndex=a,Nt(e.slice(0,a),t)),i=\"\\n\"===e[0]||\" \"===e[0];var a;for(;r=o.exec(e);){var l=r[1],c=r[2];n=\" \"===c[0],s+=l+(i||n||\"\"===c?\"\":\"\\n\")+Nt(c,t),i=n}return s}(t,i),s));case Ot:return'\"'+function(e){for(var t,n=\"\",r=0,o=0;o<e.length;r>=65536?o+=2:o++)r=wt(e,o),!(t=at[r])&&yt(r)?(n+=e[o],r>=65536&&(n+=e[o+1])):n+=t||ut(r);return n}(t)+'\"';default:throw new a(\"impossible error: invalid scalar style\")}}()}function Ct(e,t){var n=Et(e)?String(t):\"\",r=\"\\n\"===e[e.length-1];return n+(r&&(\"\\n\"===e[e.length-2]||\"\\n\"===e)?\"+\":r?\"\":\"-\")+\"\\n\"}function Pt(e){return\"\\n\"===e[e.length-1]?e.slice(0,-1):e}function Nt(e,t){if(\"\"===e||\" \"===e[0])return e;for(var n,r,o=/ [^ ]/g,s=0,i=0,a=0,l=\"\";n=o.exec(e);)(a=n.index)-s>t&&(r=i>s?i:a,l+=\"\\n\"+e.slice(s,r),s=r+1),i=a;return l+=\"\\n\",e.length-s>t&&i>s?l+=e.slice(s,i)+\"\\n\"+e.slice(i+1):l+=e.slice(s),l.slice(1)}function It(e,t,n,r){var o,s,i,a=\"\",l=e.tag;for(o=0,s=n.length;o<s;o+=1)i=n[o],e.replacer&&(i=e.replacer.call(n,String(o),i)),(Rt(e,t+1,i,!0,!0,!1,!0)||void 0===i&&Rt(e,t+1,null,!0,!0,!1,!0))&&(r&&\"\"===a||(a+=mt(e,t)),e.dump&&Le===e.dump.charCodeAt(0)?a+=\"-\":a+=\"- \",a+=e.dump);e.tag=l,e.dump=a||\"[]\"}function Tt(e,t,n){var r,o,s,i,l,c;for(s=0,i=(o=n?e.explicitTypes:e.implicitTypes).length;s<i;s+=1)if(((l=o[s]).instanceOf||l.predicate)&&(!l.instanceOf||\"object\"==typeof t&&t instanceof l.instanceOf)&&(!l.predicate||l.predicate(t))){if(n?l.multi&&l.representName?e.tag=l.representName(t):e.tag=l.tag:e.tag=\"?\",l.represent){if(c=e.styleMap[l.tag]||l.defaultStyle,\"[object Function]\"===Re.call(l.represent))r=l.represent(t,c);else{if(!Me.call(l.represent,c))throw new a(\"!<\"+l.tag+'> tag resolver accepts not \"'+c+'\" style');r=l.represent[c](t,c)}e.dump=r}return!0}return!1}function Rt(e,t,n,r,o,s,i){e.tag=null,e.dump=n,Tt(e,n,!1)||Tt(e,n,!0);var l,c=Re.call(e.dump),u=r;r&&(r=e.flowLevel<0||e.flowLevel>t);var p,h,f=\"[object Object]\"===c||\"[object Array]\"===c;if(f&&(h=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&\"?\"!==e.tag||h||2!==e.indent&&t>0)&&(o=!1),h&&e.usedDuplicates[p])e.dump=\"*ref_\"+p;else{if(f&&h&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),\"[object Object]\"===c)r&&0!==Object.keys(e.dump).length?(!function(e,t,n,r){var o,s,i,l,c,u,p=\"\",h=e.tag,f=Object.keys(n);if(!0===e.sortKeys)f.sort();else if(\"function\"==typeof e.sortKeys)f.sort(e.sortKeys);else if(e.sortKeys)throw new a(\"sortKeys must be a boolean or a function\");for(o=0,s=f.length;o<s;o+=1)u=\"\",r&&\"\"===p||(u+=mt(e,t)),l=n[i=f[o]],e.replacer&&(l=e.replacer.call(n,i,l)),Rt(e,t+1,i,!0,!0,!0)&&((c=null!==e.tag&&\"?\"!==e.tag||e.dump&&e.dump.length>1024)&&(e.dump&&Le===e.dump.charCodeAt(0)?u+=\"?\":u+=\"? \"),u+=e.dump,c&&(u+=mt(e,t)),Rt(e,t+1,l,!0,c)&&(e.dump&&Le===e.dump.charCodeAt(0)?u+=\":\":u+=\": \",p+=u+=e.dump));e.tag=h,e.dump=p||\"{}\"}(e,t,e.dump,o),h&&(e.dump=\"&ref_\"+p+e.dump)):(!function(e,t,n){var r,o,s,i,a,l=\"\",c=e.tag,u=Object.keys(n);for(r=0,o=u.length;r<o;r+=1)a=\"\",\"\"!==l&&(a+=\", \"),e.condenseFlow&&(a+='\"'),i=n[s=u[r]],e.replacer&&(i=e.replacer.call(n,s,i)),Rt(e,t,s,!1,!1)&&(e.dump.length>1024&&(a+=\"? \"),a+=e.dump+(e.condenseFlow?'\"':\"\")+\":\"+(e.condenseFlow?\"\":\" \"),Rt(e,t,i,!1,!1)&&(l+=a+=e.dump));e.tag=c,e.dump=\"{\"+l+\"}\"}(e,t,e.dump),h&&(e.dump=\"&ref_\"+p+\" \"+e.dump));else if(\"[object Array]\"===c)r&&0!==e.dump.length?(e.noArrayIndent&&!i&&t>0?It(e,t-1,e.dump,o):It(e,t,e.dump,o),h&&(e.dump=\"&ref_\"+p+e.dump)):(!function(e,t,n){var r,o,s,i=\"\",a=e.tag;for(r=0,o=n.length;r<o;r+=1)s=n[r],e.replacer&&(s=e.replacer.call(n,String(r),s)),(Rt(e,t,s,!1,!1)||void 0===s&&Rt(e,t,null,!1,!1))&&(\"\"!==i&&(i+=\",\"+(e.condenseFlow?\"\":\" \")),i+=e.dump);e.tag=a,e.dump=\"[\"+i+\"]\"}(e,t,e.dump),h&&(e.dump=\"&ref_\"+p+\" \"+e.dump));else{if(\"[object String]\"!==c){if(\"[object Undefined]\"===c)return!1;if(e.skipInvalid)return!1;throw new a(\"unacceptable kind of an object to dump \"+c)}\"?\"!==e.tag&&At(e,e.dump,t,s,u)}null!==e.tag&&\"?\"!==e.tag&&(l=encodeURI(\"!\"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,\"%21\"),l=\"!\"===e.tag[0]?\"!\"+l:\"tag:yaml.org,2002:\"===l.slice(0,18)?\"!!\"+l.slice(18):\"!<\"+l+\">\",e.dump=l+\" \"+e.dump)}return!0}function Mt(e,t){var n,r,o=[],s=[];for(Dt(e,o,s),n=0,r=s.length;n<r;n+=1)t.duplicates.push(o[s[n]]);t.usedDuplicates=new Array(r)}function Dt(e,t,n){var r,o,s;if(null!==e&&\"object\"==typeof e)if(-1!==(o=t.indexOf(e)))-1===n.indexOf(o)&&n.push(o);else if(t.push(e),Array.isArray(e))for(o=0,s=e.length;o<s;o+=1)Dt(e[o],t,n);else for(o=0,s=(r=Object.keys(e)).length;o<s;o+=1)Dt(e[r[o]],t,n)}function Ft(e,t){return function(){throw new Error(\"Function yaml.\"+e+\" is removed in js-yaml 4. Use yaml.\"+t+\" instead, which is now safe by default.\")}}var Lt=f,Bt=g,$t=w,qt=C,Ut=P,zt=V,Vt=Te.load,Wt=Te.loadAll,Jt={dump:function(e,t){var n=new ft(t=t||{});n.noRefs||Mt(e,n);var r=e;return n.replacer&&(r=n.replacer.call({\"\":r},\"\",r)),Rt(n,0,r,!0,!0)?n.dump+\"\\n\":\"\"}}.dump,Kt=a,Ht={binary:D,float:A,map:b,null:E,pairs:q,set:z,timestamp:T,bool:x,int:j,merge:R,omap:B,seq:v,str:y},Gt=Ft(\"safeLoad\",\"load\"),Zt=Ft(\"safeLoadAll\",\"loadAll\"),Yt=Ft(\"safeDump\",\"dump\");const Xt={Type:Lt,Schema:Bt,FAILSAFE_SCHEMA:$t,JSON_SCHEMA:qt,CORE_SCHEMA:Ut,DEFAULT_SCHEMA:zt,load:Vt,loadAll:Wt,dump:Jt,YAMLException:Kt,types:Ht,safeLoad:Gt,safeLoadAll:Zt,safeDump:Yt}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.loaded=!0,s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var r={};(()=>{\"use strict\";n.d(r,{default:()=>wr});var e={};n.r(e),n.d(e,{Button:()=>tn,Col:()=>Qt,Collapse:()=>ln,Container:()=>Yt,Input:()=>rn,Link:()=>sn,Row:()=>en,Select:()=>on,TextArea:()=>nn});var t={};n.r(t),n.d(t,{JsonSchemaArrayItemFile:()=>or,JsonSchemaArrayItemText:()=>rr,JsonSchemaForm:()=>er,JsonSchema_array:()=>nr,JsonSchema_boolean:()=>sr,JsonSchema_object:()=>ar,JsonSchema_string:()=>tr});var o=n(57269),s=n.n(o),i=n(14418),a=n.n(i),l=n(28222),c=n.n(l),u=n(35627),p=n.n(u),h=n(27698),f=n.n(h),d=n(11189),m=n.n(d),g=n(76986),y=n.n(g),v=n(24278),b=n.n(v),w=n(58309),E=n.n(w),x=n(24282),S=n.n(x),_=n(97606),j=n.n(_),O=n(39022),k=n.n(O),A=n(67294),C=n(97779),P=n(43393),N=n.n(P),I=n(72739),T=n(7710),R=n(82492),M=n.n(R),D=n(34966),F=n(27504),L=n(90242);const B=e=>e;class ${constructor(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var n,r,o;f()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},t),this.getSystem=m()(e=this._getSystem).call(e,this),this.store=(n=B,r=(0,P.fromJS)(this.state),o=this.getSystem,function(e,t,n){let r=[(0,L._5)(n)];const o=F.Z.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||C.qC;return(0,C.MT)(e,t,o((0,C.md)(...r)))}(n,r,o)),this.buildSystem(!1),this.register(this.plugins)}getStore(){return this.store}register(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var n=q(e,this.getSystem(),this.pluginsOptions);z(this.system,n),t&&this.buildSystem();U.call(this.system,e,this.getSystem())&&this.buildSystem()}buildSystem(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,n=this.getStore().getState;this.boundSystem=y()({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getWrappedAndBoundSelectors(n,this.getSystem),this.getStateThunks(n),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}_getSystem(){return this.boundSystem}getRootInjects(){var e,t,n;return y()({getSystem:this.getSystem,getStore:m()(e=this.getStore).call(e,this),getComponents:m()(t=this.getComponents).call(t,this),getState:this.getStore().getState,getConfigs:m()(n=this._getConfigs).call(n,this),Im:N(),React:A},this.system.rootInjects||{})}_getConfigs(){return this.system.configs}getConfigs(){return{configs:this.system.configs}}setConfigs(e){this.system.configs=e}rebuildReducer(){var e;this.store.replaceReducer((e=this.system.statePlugins,function(e){var t;let n=S()(t=c()(e)).call(t,((t,n)=>(t[n]=function(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new P.Map,n=arguments.length>1?arguments[1]:void 0;if(!e)return t;let r=e[n.type];if(r){const e=V(r)(t,n);return null===e?t:e}return t}}(e[n]),t)),{});return c()(n).length?(0,I.U)(n):B}((0,L.Ay)(e,(e=>e.reducers)))))}getType(e){let t=e[0].toUpperCase()+b()(e).call(e,1);return(0,L.Q2)(this.system.statePlugins,((n,r)=>{let o=n[e];if(o)return{[r+t]:o}}))}getSelectors(){return this.getType(\"selectors\")}getActions(){let e=this.getType(\"actions\");return(0,L.Ay)(e,(e=>(0,L.Q2)(e,((e,t)=>{if((0,L.LQ)(e))return{[t]:e}}))))}getWrappedAndBoundActions(e){var t=this;let n=this.getBoundActions(e);return(0,L.Ay)(n,((e,n)=>{let r=this.system.statePlugins[b()(n).call(n,0,-7)].wrapActions;return r?(0,L.Ay)(e,((e,n)=>{let o=r[n];return o?(E()(o)||(o=[o]),S()(o).call(o,((e,n)=>{let r=function(){return n(e,t.getSystem())(...arguments)};if(!(0,L.LQ)(r))throw new TypeError(\"wrapActions needs to return a function that returns a new function (ie the wrapped action)\");return V(r)}),e||Function.prototype)):e})):e}))}getWrappedAndBoundSelectors(e,t){var n=this;let r=this.getBoundSelectors(e,t);return(0,L.Ay)(r,((t,r)=>{let o=[b()(r).call(r,0,-9)],s=this.system.statePlugins[o].wrapSelectors;return s?(0,L.Ay)(t,((t,r)=>{let i=s[r];return i?(E()(i)||(i=[i]),S()(i).call(i,((t,r)=>{let s=function(){for(var s=arguments.length,i=new Array(s),a=0;a<s;a++)i[a]=arguments[a];return r(t,n.getSystem())(e().getIn(o),...i)};if(!(0,L.LQ)(s))throw new TypeError(\"wrapSelector needs to return a function that returns a new function (ie the wrapped action)\");return s}),t||Function.prototype)):t})):t}))}getStates(e){var t;return S()(t=c()(this.system.statePlugins)).call(t,((t,n)=>(t[n]=e.get(n),t)),{})}getStateThunks(e){var t;return S()(t=c()(this.system.statePlugins)).call(t,((t,n)=>(t[n]=()=>e().get(n),t)),{})}getFn(){return{fn:this.system.fn}}getComponents(e){const t=this.system.components[e];return E()(t)?S()(t).call(t,((e,t)=>t(e,this.getSystem()))):void 0!==e?this.system.components[e]:this.system.components}getBoundSelectors(e,t){return(0,L.Ay)(this.getSelectors(),((n,r)=>{let o=[b()(r).call(r,0,-9)];return(0,L.Ay)(n,(n=>function(){for(var r=arguments.length,s=new Array(r),i=0;i<r;i++)s[i]=arguments[i];let a=V(n).apply(null,[e().getIn(o),...s]);return\"function\"==typeof a&&(a=V(a)(t())),a}))}))}getBoundActions(e){e=e||this.getStore().dispatch;const t=this.getActions(),n=e=>\"function\"!=typeof e?(0,L.Ay)(e,(e=>n(e))):function(){var t=null;try{t=e(...arguments)}catch(e){t={type:D.NEW_THROWN_ERR,error:!0,payload:(0,T.serializeError)(e)}}finally{return t}};return(0,L.Ay)(t,(t=>(0,C.DE)(n(t),e)))}getMapStateToProps(){return()=>y()({},this.getSystem())}getMapDispatchToProps(e){return t=>f()({},this.getWrappedAndBoundActions(t),this.getFn(),e)}}function q(e,t,n){if((0,L.Kn)(e)&&!(0,L.kJ)(e))return M()({},e);if((0,L.Wl)(e))return q(e(t),t,n);if((0,L.kJ)(e)){var r;const o=\"chain\"===n.pluginLoadType?t.getComponents():{};return S()(r=j()(e).call(e,(e=>q(e,t,n)))).call(r,z,o)}return{}}function U(e,t){let{hasLoaded:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n;return(0,L.Kn)(e)&&!(0,L.kJ)(e)&&\"function\"==typeof e.afterLoad&&(r=!0,V(e.afterLoad).call(this,t)),(0,L.Wl)(e)?U.call(this,e(t),t,{hasLoaded:r}):(0,L.kJ)(e)?j()(e).call(e,(e=>U.call(this,e,t,{hasLoaded:r}))):r}function z(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,L.Kn)(e))return{};if(!(0,L.Kn)(t))return e;t.wrapComponents&&((0,L.Ay)(t.wrapComponents,((n,r)=>{const o=e.components&&e.components[r];o&&E()(o)?(e.components[r]=k()(o).call(o,[n]),delete t.wrapComponents[r]):o&&(e.components[r]=[o,n],delete t.wrapComponents[r])})),c()(t.wrapComponents).length||delete t.wrapComponents);const{statePlugins:n}=e;if((0,L.Kn)(n))for(let e in n){const s=n[e];if(!(0,L.Kn)(s))continue;const{wrapActions:i,wrapSelectors:a}=s;if((0,L.Kn)(i))for(let n in i){let o=i[n];var r;if(E()(o)||(o=[o],i[n]=o),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapActions&&t.statePlugins[e].wrapActions[n])t.statePlugins[e].wrapActions[n]=k()(r=i[n]).call(r,t.statePlugins[e].wrapActions[n])}if((0,L.Kn)(a))for(let n in a){let r=a[n];var o;if(E()(r)||(r=[r],a[n]=r),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapSelectors&&t.statePlugins[e].wrapSelectors[n])t.statePlugins[e].wrapSelectors[n]=k()(o=a[n]).call(o,t.statePlugins[e].wrapSelectors[n])}}return f()(e,t)}function V(e){let{logErrors:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"function\"!=typeof e?e:function(){try{for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return e.call(this,...r)}catch(e){return t&&console.error(e),null}}}var W=n(77793),J=n(26821),K=n(37038),H=n(73420),G=n(8883),Z=n(86575),Y=n(9150),X=n(79934),Q=n(93705),ee=n(98525),te=n(48011),ne=n(46709),re=n(34980),oe=n(49978),se=n(28560),ie=n(27621),ae=n(61125),le=n.n(ae),ce=n(11882),ue=n.n(ce),pe=(n(23930),n(32454));class he extends A.PureComponent{constructor(e,t){super(e,t),le()(this,\"toggleShown\",(()=>{let{layoutActions:e,tag:t,operationId:n,isShown:r}=this.props;const o=this.getResolvedSubtree();r||void 0!==o||this.requestResolvedSubtree(),e.show([\"operations\",t,n],!r)})),le()(this,\"onCancelClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),le()(this,\"onTryoutClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),le()(this,\"onResetClick\",(e=>{const t=this.props.oas3Selectors.selectDefaultRequestBodyValue(...e);this.props.oas3Actions.setRequestBodyValue({value:t,pathMethod:e})})),le()(this,\"onExecute\",(()=>{this.setState({executeInProgress:!0})})),le()(this,\"getResolvedSubtree\",(()=>{const{specSelectors:e,path:t,method:n,specPath:r}=this.props;return r?e.specResolvedSubtree(r.toJS()):e.specResolvedSubtree([\"paths\",t,n])})),le()(this,\"requestResolvedSubtree\",(()=>{const{specActions:e,path:t,method:n,specPath:r}=this.props;return r?e.requestResolvedSubtree(r.toJS()):e.requestResolvedSubtree([\"paths\",t,n])}));const{tryItOutEnabled:n}=e.getConfigs();this.state={tryItOutEnabled:!0===n||\"true\"===n,executeInProgress:!1}}mapStateToProps(e,t){const{op:n,layoutSelectors:r,getConfigs:o}=t,{docExpansion:s,deepLinking:i,displayOperationId:a,displayRequestDuration:l,supportedSubmitMethods:c}=o(),u=r.showSummary(),p=n.getIn([\"operation\",\"__originalOperationId\"])||n.getIn([\"operation\",\"operationId\"])||(0,pe.Z)(n.get(\"operation\"),t.path,t.method)||n.get(\"id\"),h=[\"operations\",t.tag,p],f=i&&\"false\"!==i,d=ue()(c).call(c,t.method)>=0&&(void 0===t.allowTryItOut?t.specSelectors.allowTryItOutFor(t.path,t.method):t.allowTryItOut),m=n.getIn([\"operation\",\"security\"])||t.specSelectors.security();return{operationId:p,isDeepLinkingEnabled:f,showSummary:u,displayOperationId:a,displayRequestDuration:l,allowTryItOut:d,security:m,isAuthorized:t.authSelectors.isAuthorized(m),isShown:r.isShown(h,\"full\"===s),jumpToKey:`paths.${t.path}.${t.method}`,response:t.specSelectors.responseFor(t.path,t.method),request:t.specSelectors.requestFor(t.path,t.method)}}componentDidMount(){const{isShown:e}=this.props,t=this.getResolvedSubtree();e&&void 0===t&&this.requestResolvedSubtree()}UNSAFE_componentWillReceiveProps(e){const{response:t,isShown:n}=e,r=this.getResolvedSubtree();t!==this.props.response&&this.setState({executeInProgress:!1}),n&&void 0===r&&this.requestResolvedSubtree()}render(){let{op:e,tag:t,path:n,method:r,security:o,isAuthorized:s,operationId:i,showSummary:a,isShown:l,jumpToKey:c,allowTryItOut:u,response:p,request:h,displayOperationId:f,displayRequestDuration:d,isDeepLinkingEnabled:m,specPath:g,specSelectors:y,specActions:v,getComponent:b,getConfigs:w,layoutSelectors:E,layoutActions:x,authActions:S,authSelectors:_,oas3Actions:j,oas3Selectors:O,fn:k}=this.props;const C=b(\"operation\"),N=this.getResolvedSubtree()||(0,P.Map)(),I=(0,P.fromJS)({op:N,tag:t,path:n,summary:e.getIn([\"operation\",\"summary\"])||\"\",deprecated:N.get(\"deprecated\")||e.getIn([\"operation\",\"deprecated\"])||!1,method:r,security:o,isAuthorized:s,operationId:i,originalOperationId:N.getIn([\"operation\",\"__originalOperationId\"]),showSummary:a,isShown:l,jumpToKey:c,allowTryItOut:u,request:h,displayOperationId:f,displayRequestDuration:d,isDeepLinkingEnabled:m,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return A.createElement(C,{operation:I,response:p,request:h,isShown:l,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onResetClick:this.onResetClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:g,specActions:v,specSelectors:y,oas3Actions:j,oas3Selectors:O,layoutActions:x,layoutSelectors:E,authActions:S,authSelectors:_,getComponent:b,getConfigs:w,fn:k})}}le()(he,\"defaultProps\",{showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1});class fe extends A.Component{getLayout(){let{getComponent:e,layoutSelectors:t}=this.props;const n=t.current(),r=e(n,!0);return r||(()=>A.createElement(\"h1\",null,' No layout defined for \"',n,'\" '))}render(){const e=this.getLayout();return A.createElement(e,null)}}fe.defaultProps={};class de extends A.Component{constructor(){super(...arguments),le()(this,\"close\",(()=>{let{authActions:e}=this.props;e.showDefinitions(!1)}))}render(){var e;let{authSelectors:t,authActions:n,getComponent:r,errSelectors:o,specSelectors:s,fn:{AST:i={}}}=this.props,a=t.shownDefinitions();const l=r(\"auths\");return A.createElement(\"div\",{className:\"dialog-ux\"},A.createElement(\"div\",{className:\"backdrop-ux\"}),A.createElement(\"div\",{className:\"modal-ux\"},A.createElement(\"div\",{className:\"modal-dialog-ux\"},A.createElement(\"div\",{className:\"modal-ux-inner\"},A.createElement(\"div\",{className:\"modal-ux-header\"},A.createElement(\"h3\",null,\"Available authorizations\"),A.createElement(\"button\",{type:\"button\",className:\"close-modal\",onClick:this.close},A.createElement(\"svg\",{width:\"20\",height:\"20\"},A.createElement(\"use\",{href:\"#close\",xlinkHref:\"#close\"})))),A.createElement(\"div\",{className:\"modal-ux-content\"},j()(e=a.valueSeq()).call(e,((e,a)=>A.createElement(l,{key:a,AST:i,definitions:e,getComponent:r,errSelectors:o,authSelectors:t,authActions:n,specSelectors:s}))))))))}}class me extends A.Component{render(){let{isAuthorized:e,showPopup:t,onClick:n,getComponent:r}=this.props;const o=r(\"authorizationPopup\",!0);return A.createElement(\"div\",{className:\"auth-wrapper\"},A.createElement(\"button\",{className:e?\"btn authorize locked\":\"btn authorize unlocked\",onClick:n},A.createElement(\"span\",null,\"Authorize\"),A.createElement(\"svg\",{width:\"20\",height:\"20\"},A.createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"}))),t&&A.createElement(o,null))}}class ge extends A.Component{render(){const{authActions:e,authSelectors:t,specSelectors:n,getComponent:r}=this.props,o=n.securityDefinitions(),s=t.definitionsToAuthorize(),i=r(\"authorizeBtn\");return o?A.createElement(i,{onClick:()=>e.showDefinitions(s),isAuthorized:!!t.authorized().size,showPopup:!!t.shownDefinitions(),getComponent:r}):null}}class ye extends A.Component{constructor(){super(...arguments),le()(this,\"onClick\",(e=>{e.stopPropagation();let{onClick:t}=this.props;t&&t()}))}render(){let{isAuthorized:e}=this.props;return A.createElement(\"button\",{className:e?\"authorization__btn locked\":\"authorization__btn unlocked\",\"aria-label\":e?\"authorization button locked\":\"authorization button unlocked\",onClick:this.onClick},A.createElement(\"svg\",{width:\"20\",height:\"20\"},A.createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"})))}}class ve extends A.Component{constructor(e,t){super(e,t),le()(this,\"onAuthChange\",(e=>{let{name:t}=e;this.setState({[t]:e})})),le()(this,\"submitAuth\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)})),le()(this,\"logoutClick\",(e=>{e.preventDefault();let{authActions:t,definitions:n}=this.props,r=j()(n).call(n,((e,t)=>t)).toArray();this.setState(S()(r).call(r,((e,t)=>(e[t]=\"\",e)),{})),t.logoutWithPersistOption(r)})),le()(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),this.state={}}render(){var e;let{definitions:t,getComponent:n,authSelectors:r,errSelectors:o}=this.props;const s=n(\"AuthItem\"),i=n(\"oauth2\",!0),l=n(\"Button\");let c=r.authorized(),u=a()(t).call(t,((e,t)=>!!c.get(t))),p=a()(t).call(t,(e=>\"oauth2\"!==e.get(\"type\"))),h=a()(t).call(t,(e=>\"oauth2\"===e.get(\"type\")));return A.createElement(\"div\",{className:\"auth-container\"},!!p.size&&A.createElement(\"form\",{onSubmit:this.submitAuth},j()(p).call(p,((e,t)=>A.createElement(s,{key:t,schema:e,name:t,getComponent:n,onAuthChange:this.onAuthChange,authorized:c,errSelectors:o}))).toArray(),A.createElement(\"div\",{className:\"auth-btn-wrapper\"},p.size===u.size?A.createElement(l,{className:\"btn modal-btn auth\",onClick:this.logoutClick},\"Logout\"):A.createElement(l,{type:\"submit\",className:\"btn modal-btn auth authorize\"},\"Authorize\"),A.createElement(l,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\"))),h&&h.size?A.createElement(\"div\",null,A.createElement(\"div\",{className:\"scope-def\"},A.createElement(\"p\",null,\"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.\"),A.createElement(\"p\",null,\"API requires the following scopes. Select which ones you want to grant to Swagger UI.\")),j()(e=a()(t).call(t,(e=>\"oauth2\"===e.get(\"type\")))).call(e,((e,t)=>A.createElement(\"div\",{key:t},A.createElement(i,{authorized:c,schema:e,name:t})))).toArray()):null)}}class be extends A.Component{render(){let{schema:e,name:t,getComponent:n,onAuthChange:r,authorized:o,errSelectors:s}=this.props;const i=n(\"apiKeyAuth\"),a=n(\"basicAuth\");let l;const c=e.get(\"type\");switch(c){case\"apiKey\":l=A.createElement(i,{key:t,schema:e,name:t,errSelectors:s,authorized:o,getComponent:n,onChange:r});break;case\"basic\":l=A.createElement(a,{key:t,schema:e,name:t,errSelectors:s,authorized:o,getComponent:n,onChange:r});break;default:l=A.createElement(\"div\",{key:t},\"Unknown security definition type \",c)}return A.createElement(\"div\",{key:`${t}-jump`},l)}}class we extends A.Component{render(){let{error:e}=this.props,t=e.get(\"level\"),n=e.get(\"message\"),r=e.get(\"source\");return A.createElement(\"div\",{className:\"errors\"},A.createElement(\"b\",null,r,\" \",t),A.createElement(\"span\",null,n))}}class Ee extends A.Component{constructor(e,t){super(e,t),le()(this,\"onChange\",(e=>{let{onChange:t}=this.props,n=e.target.value,r=y()({},this.state,{value:n});this.setState(r),t(r)}));let{name:n,schema:r}=this.props,o=this.getValue();this.state={name:n,schema:r,value:o}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e,t;let{schema:n,getComponent:r,errSelectors:o,name:s}=this.props;const i=r(\"Input\"),l=r(\"Row\"),c=r(\"Col\"),u=r(\"authError\"),p=r(\"Markdown\",!0),h=r(\"JumpToPath\",!0);let f=this.getValue(),d=a()(e=o.allErrors()).call(e,(e=>e.get(\"authId\")===s));return A.createElement(\"div\",null,A.createElement(\"h4\",null,A.createElement(\"code\",null,s||n.get(\"name\")),\" (apiKey)\",A.createElement(h,{path:[\"securityDefinitions\",s]})),f&&A.createElement(\"h6\",null,\"Authorized\"),A.createElement(l,null,A.createElement(p,{source:n.get(\"description\")})),A.createElement(l,null,A.createElement(\"p\",null,\"Name: \",A.createElement(\"code\",null,n.get(\"name\")))),A.createElement(l,null,A.createElement(\"p\",null,\"In: \",A.createElement(\"code\",null,n.get(\"in\")))),A.createElement(l,null,A.createElement(\"label\",null,\"Value:\"),f?A.createElement(\"code\",null,\" ****** \"):A.createElement(c,null,A.createElement(i,{type:\"text\",onChange:this.onChange,autoFocus:!0}))),j()(t=d.valueSeq()).call(t,((e,t)=>A.createElement(u,{error:e,key:t}))))}}class xe extends A.Component{constructor(e,t){super(e,t),le()(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:n,name:r}=e.target,o=this.state.value;o[r]=n,this.setState({value:o}),t(this.state)}));let{schema:n,name:r}=this.props,o=this.getValue().username;this.state={name:r,schema:n,value:o?{username:o}:{}}}getValue(){let{authorized:e,name:t}=this.props;return e&&e.getIn([t,\"value\"])||{}}render(){var e,t;let{schema:n,getComponent:r,name:o,errSelectors:s}=this.props;const i=r(\"Input\"),l=r(\"Row\"),c=r(\"Col\"),u=r(\"authError\"),p=r(\"JumpToPath\",!0),h=r(\"Markdown\",!0);let f=this.getValue().username,d=a()(e=s.allErrors()).call(e,(e=>e.get(\"authId\")===o));return A.createElement(\"div\",null,A.createElement(\"h4\",null,\"Basic authorization\",A.createElement(p,{path:[\"securityDefinitions\",o]})),f&&A.createElement(\"h6\",null,\"Authorized\"),A.createElement(l,null,A.createElement(h,{source:n.get(\"description\")})),A.createElement(l,null,A.createElement(\"label\",null,\"Username:\"),f?A.createElement(\"code\",null,\" \",f,\" \"):A.createElement(c,null,A.createElement(i,{type:\"text\",required:\"required\",name:\"username\",onChange:this.onChange,autoFocus:!0}))),A.createElement(l,null,A.createElement(\"label\",null,\"Password:\"),f?A.createElement(\"code\",null,\" ****** \"):A.createElement(c,null,A.createElement(i,{autoComplete:\"new-password\",name:\"password\",type:\"password\",onChange:this.onChange}))),j()(t=d.valueSeq()).call(t,((e,t)=>A.createElement(u,{error:e,key:t}))))}}function Se(e){const{example:t,showValue:n,getComponent:r,getConfigs:o}=e,s=r(\"Markdown\",!0),i=r(\"highlightCode\");return t?A.createElement(\"div\",{className:\"example\"},t.get(\"description\")?A.createElement(\"section\",{className:\"example__section\"},A.createElement(\"div\",{className:\"example__section-header\"},\"Example Description\"),A.createElement(\"p\",null,A.createElement(s,{source:t.get(\"description\")}))):null,n&&t.has(\"value\")?A.createElement(\"section\",{className:\"example__section\"},A.createElement(\"div\",{className:\"example__section-header\"},\"Example Value\"),A.createElement(i,{getConfigs:o,value:(0,L.Pz)(t.get(\"value\"))})):null):null}var _e=n(18492),je=n.n(_e);class Oe extends A.PureComponent{constructor(){var e;super(...arguments),e=this,le()(this,\"_onSelect\",(function(t){let{isSyntheticChange:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"function\"==typeof e.props.onSelect&&e.props.onSelect(t,{isSyntheticChange:n})})),le()(this,\"_onDomSelect\",(e=>{if(\"function\"==typeof this.props.onSelect){const t=e.target.selectedOptions[0].getAttribute(\"value\");this._onSelect(t,{isSyntheticChange:!1})}})),le()(this,\"getCurrentExample\",(()=>{const{examples:e,currentExampleKey:t}=this.props,n=e.get(t),r=e.keySeq().first(),o=e.get(r);return n||o||je()({})}))}componentDidMount(){const{onSelect:e,examples:t}=this.props;if(\"function\"==typeof e){const e=t.first(),n=t.keyOf(e);this._onSelect(n,{isSyntheticChange:!0})}}UNSAFE_componentWillReceiveProps(e){const{currentExampleKey:t,examples:n}=e;if(n!==this.props.examples&&!n.has(t)){const e=n.first(),t=n.keyOf(e);this._onSelect(t,{isSyntheticChange:!0})}}render(){const{examples:e,currentExampleKey:t,isValueModified:n,isModifiedValueAvailable:r,showLabels:o}=this.props;return A.createElement(\"div\",{className:\"examples-select\"},o?A.createElement(\"span\",{className:\"examples-select__section-label\"},\"Examples: \"):null,A.createElement(\"select\",{className:\"examples-select-element\",onChange:this._onDomSelect,value:r&&n?\"__MODIFIED__VALUE__\":t||\"\"},r?A.createElement(\"option\",{value:\"__MODIFIED__VALUE__\"},\"[Modified value]\"):null,j()(e).call(e,((e,t)=>A.createElement(\"option\",{key:t,value:t},e.get(\"summary\")||t))).valueSeq()))}}le()(Oe,\"defaultProps\",{examples:N().Map({}),onSelect:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"DEBUG: ExamplesSelect was not given an onSelect callback\",...t)},currentExampleKey:null,showLabels:!0});const ke=e=>P.List.isList(e)?e:(0,L.Pz)(e);class Ae extends A.PureComponent{constructor(e){var t;super(e),t=this,le()(this,\"_getStateForCurrentNamespace\",(()=>{const{currentNamespace:e}=this.props;return(this.state[e]||(0,P.Map)()).toObject()})),le()(this,\"_setStateForCurrentNamespace\",(e=>{const{currentNamespace:t}=this.props;return this._setStateForNamespace(t,e)})),le()(this,\"_setStateForNamespace\",((e,t)=>{const n=(this.state[e]||(0,P.Map)()).mergeDeep(t);return this.setState({[e]:n})})),le()(this,\"_isCurrentUserInputSameAsExampleValue\",(()=>{const{currentUserInputValue:e}=this.props;return this._getCurrentExampleValue()===e})),le()(this,\"_getValueForExample\",((e,t)=>{const{examples:n}=t||this.props;return ke((n||(0,P.Map)({})).getIn([e,\"value\"]))})),le()(this,\"_getCurrentExampleValue\",(e=>{const{currentKey:t}=e||this.props;return this._getValueForExample(t,e||this.props)})),le()(this,\"_onExamplesSelect\",(function(e){let{isSyntheticChange:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{onSelect:r,updateValue:o,currentUserInputValue:s,userHasEditedBody:i}=t.props,{lastUserEditedValue:a}=t._getStateForCurrentNamespace(),l=t._getValueForExample(e);if(\"__MODIFIED__VALUE__\"===e)return o(ke(a)),t._setStateForCurrentNamespace({isModifiedValueSelected:!0});if(\"function\"==typeof r){for(var c=arguments.length,u=new Array(c>2?c-2:0),p=2;p<c;p++)u[p-2]=arguments[p];r(e,{isSyntheticChange:n},...u)}t._setStateForCurrentNamespace({lastDownstreamValue:l,isModifiedValueSelected:n&&i||!!s&&s!==l}),n||\"function\"==typeof o&&o(ke(l))}));const n=this._getCurrentExampleValue();this.state={[e.currentNamespace]:(0,P.Map)({lastUserEditedValue:this.props.currentUserInputValue,lastDownstreamValue:n,isModifiedValueSelected:this.props.userHasEditedBody||this.props.currentUserInputValue!==n})}}componentWillUnmount(){this.props.setRetainRequestBodyValueFlag(!1)}UNSAFE_componentWillReceiveProps(e){const{currentUserInputValue:t,examples:n,onSelect:r,userHasEditedBody:o}=e,{lastUserEditedValue:s,lastDownstreamValue:i}=this._getStateForCurrentNamespace(),l=this._getValueForExample(e.currentKey,e),c=a()(n).call(n,(e=>e.get(\"value\")===t||(0,L.Pz)(e.get(\"value\"))===t));if(c.size){let t;t=c.has(e.currentKey)?e.currentKey:c.keySeq().first(),r(t,{isSyntheticChange:!0})}else t!==this.props.currentUserInputValue&&t!==s&&t!==i&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(e.currentNamespace,{lastUserEditedValue:e.currentUserInputValue,isModifiedValueSelected:o||t!==l}))}render(){const{currentUserInputValue:e,examples:t,currentKey:n,getComponent:r,userHasEditedBody:o}=this.props,{lastDownstreamValue:s,lastUserEditedValue:i,isModifiedValueSelected:a}=this._getStateForCurrentNamespace(),l=r(\"ExamplesSelect\");return A.createElement(l,{examples:t,currentExampleKey:n,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!i&&i!==s,isValueModified:void 0!==e&&a&&e!==this._getCurrentExampleValue()||o})}}le()(Ae,\"defaultProps\",{userHasEditedBody:!1,examples:(0,P.Map)({}),currentNamespace:\"__DEFAULT__NAMESPACE__\",setRetainRequestBodyValueFlag:()=>{},onSelect:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"ExamplesSelectValueRetainer: no `onSelect` function was provided\",...t)},updateValue:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"ExamplesSelectValueRetainer: no `updateValue` function was provided\",...t)}});var Ce=n(25110),Pe=n.n(Ce),Ne=n(8712),Ie=n.n(Ne),Te=n(58118),Re=n.n(Te),Me=n(84564),De=n.n(Me);class Fe extends A.Component{constructor(e,t){super(e,t),le()(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),le()(this,\"authorize\",(()=>{let{authActions:e,errActions:t,getConfigs:n,authSelectors:r,oas3Selectors:o}=this.props,s=n(),i=r.getConfigs();t.clear({authId:name,type:\"auth\",source:\"auth\"}),function(e){let{auth:t,authActions:n,errActions:r,configs:o,authConfigs:s={},currentServer:i}=e,{schema:a,scopes:l,name:c,clientId:u}=t,p=a.get(\"flow\"),h=[];switch(p){case\"password\":return void n.authorizePassword(t);case\"application\":case\"clientCredentials\":case\"client_credentials\":return void n.authorizeApplication(t);case\"accessCode\":case\"authorizationCode\":case\"authorization_code\":h.push(\"response_type=code\");break;case\"implicit\":h.push(\"response_type=token\")}\"string\"==typeof u&&h.push(\"client_id=\"+encodeURIComponent(u));let f=o.oauth2RedirectUrl;if(void 0===f)return void r.newAuthErr({authId:c,source:\"validation\",level:\"error\",message:\"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed.\"});h.push(\"redirect_uri=\"+encodeURIComponent(f));let d=[];if(E()(l)?d=l:N().List.isList(l)&&(d=l.toArray()),d.length>0){let e=s.scopeSeparator||\" \";h.push(\"scope=\"+encodeURIComponent(d.join(e)))}let m=(0,L.r3)(new Date);if(h.push(\"state=\"+encodeURIComponent(m)),void 0!==s.realm&&h.push(\"realm=\"+encodeURIComponent(s.realm)),(\"authorizationCode\"===p||\"authorization_code\"===p||\"accessCode\"===p)&&s.usePkceWithAuthorizationCodeGrant){const e=(0,L.Uj)(),n=(0,L.Xb)(e);h.push(\"code_challenge=\"+n),h.push(\"code_challenge_method=S256\"),t.codeVerifier=e}let{additionalQueryStringParams:g}=s;for(let e in g){var y;void 0!==g[e]&&h.push(j()(y=[e,g[e]]).call(y,encodeURIComponent).join(\"=\"))}const v=a.get(\"authorizationUrl\");let b;b=i?De()((0,L.Nm)(v),i,!0).toString():(0,L.Nm)(v);let w,x=[b,h.join(\"&\")].join(-1===ue()(v).call(v,\"?\")?\"?\":\"&\");w=\"implicit\"===p?n.preAuthorizeImplicit:s.useBasicAuthenticationWithAccessCodeGrant?n.authorizeAccessCodeWithBasicAuthentication:n.authorizeAccessCodeWithFormParams,n.authPopup(x,{auth:t,state:m,redirectUrl:f,callback:w,errCb:r.newAuthErr})}({auth:this.state,currentServer:o.serverEffectiveValue(o.selectedServer()),authActions:e,errActions:t,configs:s,authConfigs:i})})),le()(this,\"onScopeChange\",(e=>{var t,n;let{target:r}=e,{checked:o}=r,s=r.dataset.value;if(o&&-1===ue()(t=this.state.scopes).call(t,s)){var i;let e=k()(i=this.state.scopes).call(i,[s]);this.setState({scopes:e})}else if(!o&&ue()(n=this.state.scopes).call(n,s)>-1){var l;this.setState({scopes:a()(l=this.state.scopes).call(l,(e=>e!==s))})}})),le()(this,\"onInputChange\",(e=>{let{target:{dataset:{name:t},value:n}}=e,r={[t]:n};this.setState(r)})),le()(this,\"selectScopes\",(e=>{var t;e.target.dataset.all?this.setState({scopes:Pe()(Ie()(t=this.props.schema.get(\"allowedScopes\")||this.props.schema.get(\"scopes\")).call(t))}):this.setState({scopes:[]})})),le()(this,\"logout\",(e=>{e.preventDefault();let{authActions:t,errActions:n,name:r}=this.props;n.clear({authId:r,type:\"auth\",source:\"auth\"}),t.logoutWithPersistOption([r])}));let{name:n,schema:r,authorized:o,authSelectors:s}=this.props,i=o&&o.get(n),l=s.getConfigs()||{},c=i&&i.get(\"username\")||\"\",u=i&&i.get(\"clientId\")||l.clientId||\"\",p=i&&i.get(\"clientSecret\")||l.clientSecret||\"\",h=i&&i.get(\"passwordType\")||\"basic\",f=i&&i.get(\"scopes\")||l.scopes||[];\"string\"==typeof f&&(f=f.split(l.scopeSeparator||\" \")),this.state={appName:l.appName,name:n,schema:r,scopes:f,clientId:u,clientSecret:p,username:c,password:\"\",passwordType:h}}render(){var e,t;let{schema:n,getComponent:r,authSelectors:o,errSelectors:s,name:i,specSelectors:l}=this.props;const c=r(\"Input\"),u=r(\"Row\"),p=r(\"Col\"),h=r(\"Button\"),f=r(\"authError\"),d=r(\"JumpToPath\",!0),m=r(\"Markdown\",!0),g=r(\"InitializedInput\"),{isOAS3:y}=l;let v=y()?n.get(\"openIdConnectUrl\"):null;const b=\"implicit\",w=\"password\",E=y()?v?\"authorization_code\":\"authorizationCode\":\"accessCode\",x=y()?v?\"client_credentials\":\"clientCredentials\":\"application\";let S=!!(o.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,_=n.get(\"flow\"),O=_===E&&S?_+\" with PKCE\":_,k=n.get(\"allowedScopes\")||n.get(\"scopes\"),C=!!o.authorized().get(i),P=a()(e=s.allErrors()).call(e,(e=>e.get(\"authId\")===i)),N=!a()(P).call(P,(e=>\"validation\"===e.get(\"source\"))).size,I=n.get(\"description\");return A.createElement(\"div\",null,A.createElement(\"h4\",null,i,\" (OAuth2, \",O,\") \",A.createElement(d,{path:[\"securityDefinitions\",i]})),this.state.appName?A.createElement(\"h5\",null,\"Application: \",this.state.appName,\" \"):null,I&&A.createElement(m,{source:n.get(\"description\")}),C&&A.createElement(\"h6\",null,\"Authorized\"),v&&A.createElement(\"p\",null,\"OpenID Connect URL: \",A.createElement(\"code\",null,v)),(_===b||_===E)&&A.createElement(\"p\",null,\"Authorization URL: \",A.createElement(\"code\",null,n.get(\"authorizationUrl\"))),(_===w||_===E||_===x)&&A.createElement(\"p\",null,\"Token URL:\",A.createElement(\"code\",null,\" \",n.get(\"tokenUrl\"))),A.createElement(\"p\",{className:\"flow\"},\"Flow: \",A.createElement(\"code\",null,O)),_!==w?null:A.createElement(u,null,A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"oauth_username\"},\"username:\"),C?A.createElement(\"code\",null,\" \",this.state.username,\" \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(\"input\",{id:\"oauth_username\",type:\"text\",\"data-name\":\"username\",onChange:this.onInputChange,autoFocus:!0}))),A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"oauth_password\"},\"password:\"),C?A.createElement(\"code\",null,\" ****** \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(\"input\",{id:\"oauth_password\",type:\"password\",\"data-name\":\"password\",onChange:this.onInputChange}))),A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"password_type\"},\"Client credentials location:\"),C?A.createElement(\"code\",null,\" \",this.state.passwordType,\" \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(\"select\",{id:\"password_type\",\"data-name\":\"passwordType\",onChange:this.onInputChange},A.createElement(\"option\",{value:\"basic\"},\"Authorization header\"),A.createElement(\"option\",{value:\"request-body\"},\"Request body\"))))),(_===x||_===b||_===E||_===w)&&(!C||C&&this.state.clientId)&&A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"client_id\"},\"client_id:\"),C?A.createElement(\"code\",null,\" ****** \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(g,{id:\"client_id\",type:\"text\",required:_===w,initialValue:this.state.clientId,\"data-name\":\"clientId\",onChange:this.onInputChange}))),(_===x||_===E||_===w)&&A.createElement(u,null,A.createElement(\"label\",{htmlFor:\"client_secret\"},\"client_secret:\"),C?A.createElement(\"code\",null,\" ****** \"):A.createElement(p,{tablet:10,desktop:10},A.createElement(g,{id:\"client_secret\",initialValue:this.state.clientSecret,type:\"password\",\"data-name\":\"clientSecret\",onChange:this.onInputChange}))),!C&&k&&k.size?A.createElement(\"div\",{className:\"scopes\"},A.createElement(\"h2\",null,\"Scopes:\",A.createElement(\"a\",{onClick:this.selectScopes,\"data-all\":!0},\"select all\"),A.createElement(\"a\",{onClick:this.selectScopes},\"select none\")),j()(k).call(k,((e,t)=>{var n;return A.createElement(u,{key:t},A.createElement(\"div\",{className:\"checkbox\"},A.createElement(c,{\"data-value\":t,id:`${t}-${_}-checkbox-${this.state.name}`,disabled:C,checked:Re()(n=this.state.scopes).call(n,t),type:\"checkbox\",onChange:this.onScopeChange}),A.createElement(\"label\",{htmlFor:`${t}-${_}-checkbox-${this.state.name}`},A.createElement(\"span\",{className:\"item\"}),A.createElement(\"div\",{className:\"text\"},A.createElement(\"p\",{className:\"name\"},t),A.createElement(\"p\",{className:\"description\"},e)))))})).toArray()):null,j()(t=P.valueSeq()).call(t,((e,t)=>A.createElement(f,{error:e,key:t}))),A.createElement(\"div\",{className:\"auth-btn-wrapper\"},N&&(C?A.createElement(h,{className:\"btn modal-btn auth authorize\",onClick:this.logout},\"Logout\"):A.createElement(h,{className:\"btn modal-btn auth authorize\",onClick:this.authorize},\"Authorize\")),A.createElement(h,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\")))}}class Le extends A.Component{constructor(){super(...arguments),le()(this,\"onClick\",(()=>{let{specActions:e,path:t,method:n}=this.props;e.clearResponse(t,n),e.clearRequest(t,n)}))}render(){return A.createElement(\"button\",{className:\"btn btn-clear opblock-control__btn\",onClick:this.onClick},\"Clear\")}}const Be=e=>{let{headers:t}=e;return A.createElement(\"div\",null,A.createElement(\"h5\",null,\"Response headers\"),A.createElement(\"pre\",{className:\"microlight\"},t))},$e=e=>{let{duration:t}=e;return A.createElement(\"div\",null,A.createElement(\"h5\",null,\"Request duration\"),A.createElement(\"pre\",{className:\"microlight\"},t,\" ms\"))};class qe extends A.Component{shouldComponentUpdate(e){return this.props.response!==e.response||this.props.path!==e.path||this.props.method!==e.method||this.props.displayRequestDuration!==e.displayRequestDuration}render(){const{response:e,getComponent:t,getConfigs:n,displayRequestDuration:r,specSelectors:o,path:s,method:i}=this.props,{showMutatedRequest:a,requestSnippetsEnabled:l}=n(),u=a?o.mutatedRequestFor(s,i):o.requestFor(s,i),p=e.get(\"status\"),h=u.get(\"url\"),f=e.get(\"headers\").toJS(),d=e.get(\"notDocumented\"),m=e.get(\"error\"),g=e.get(\"text\"),y=e.get(\"duration\"),v=c()(f),b=f[\"content-type\"]||f[\"Content-Type\"],w=t(\"responseBody\"),x=j()(v).call(v,(e=>{var t=E()(f[e])?f[e].join():f[e];return A.createElement(\"span\",{className:\"headerline\",key:e},\" \",e,\": \",t,\" \")})),S=0!==x.length,_=t(\"Markdown\",!0),O=t(\"RequestSnippets\",!0),k=t(\"curl\");return A.createElement(\"div\",null,u&&(!0===l||\"true\"===l?A.createElement(O,{request:u}):A.createElement(k,{request:u,getConfigs:n})),h&&A.createElement(\"div\",null,A.createElement(\"div\",{className:\"request-url\"},A.createElement(\"h4\",null,\"Request URL\"),A.createElement(\"pre\",{className:\"microlight\"},h))),A.createElement(\"h4\",null,\"Server response\"),A.createElement(\"table\",{className:\"responses-table live-responses-table\"},A.createElement(\"thead\",null,A.createElement(\"tr\",{className:\"responses-header\"},A.createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),A.createElement(\"td\",{className:\"col_header response-col_description\"},\"Details\"))),A.createElement(\"tbody\",null,A.createElement(\"tr\",{className:\"response\"},A.createElement(\"td\",{className:\"response-col_status\"},p,d?A.createElement(\"div\",{className:\"response-undocumented\"},A.createElement(\"i\",null,\" Undocumented \")):null),A.createElement(\"td\",{className:\"response-col_description\"},m?A.createElement(_,{source:`${\"\"!==e.get(\"name\")?`${e.get(\"name\")}: `:\"\"}${e.get(\"message\")}`}):null,g?A.createElement(w,{content:g,contentType:b,url:h,headers:f,getConfigs:n,getComponent:t}):null,S?A.createElement(Be,{headers:x}):null,r&&y?A.createElement($e,{duration:y}):null)))))}}var Ue=n(5623);class ze extends A.Component{constructor(){super(...arguments),le()(this,\"renderOperationTag\",((e,t)=>{const{specSelectors:n,getComponent:r,oas3Selectors:o,layoutSelectors:s,layoutActions:i,getConfigs:a}=this.props,l=n.validOperationMethods(),c=r(\"OperationContainer\",!0),u=r(\"OperationTag\"),p=e.get(\"operations\");return A.createElement(u,{key:\"operation-\"+t,tagObj:e,tag:t,oas3Selectors:o,layoutSelectors:s,layoutActions:i,getConfigs:a,getComponent:r,specUrl:n.url()},A.createElement(\"div\",{className:\"operation-tag-content\"},j()(p).call(p,(e=>{const n=e.get(\"path\"),r=e.get(\"method\"),o=N().List([\"paths\",n,r]);return-1===ue()(l).call(l,r)?null:A.createElement(c,{key:`${n}-${r}`,specPath:o,op:e,path:n,method:r,tag:t})})).toArray()))}))}render(){let{specSelectors:e}=this.props;const t=e.taggedOperations();return 0===t.size?A.createElement(\"h3\",null,\" No operations defined in spec!\"):A.createElement(\"div\",null,j()(t).call(t,this.renderOperationTag).toArray(),t.size<1?A.createElement(\"h3\",null,\" No operations defined in spec! \"):null)}}var Ve=n(63543);class We extends A.Component{render(){const{tagObj:e,tag:t,children:n,oas3Selectors:r,layoutSelectors:o,layoutActions:s,getConfigs:i,getComponent:a,specUrl:l}=this.props;let{docExpansion:c,deepLinking:u}=i();const p=u&&\"false\"!==u,h=a(\"Collapse\"),f=a(\"Markdown\",!0),d=a(\"DeepLink\"),m=a(\"Link\");let g,y=e.getIn([\"tagDetails\",\"description\"],null),v=e.getIn([\"tagDetails\",\"externalDocs\",\"description\"]),b=e.getIn([\"tagDetails\",\"externalDocs\",\"url\"]);g=(0,L.Wl)(r)&&(0,L.Wl)(r.selectedServer)?(0,Ve.mn)(b,l,{selectedServer:r.selectedServer()}):b;let w=[\"operations-tag\",t],E=o.isShown(w,\"full\"===c||\"list\"===c);return A.createElement(\"div\",{className:E?\"opblock-tag-section is-open\":\"opblock-tag-section\"},A.createElement(\"h3\",{onClick:()=>s.show(w,!E),className:y?\"opblock-tag\":\"opblock-tag no-desc\",id:j()(w).call(w,(e=>(0,L.J6)(e))).join(\"-\"),\"data-tag\":t,\"data-is-open\":E},A.createElement(d,{enabled:p,isShown:E,path:(0,L.oJ)(t),text:t}),y?A.createElement(\"small\",null,A.createElement(f,{source:y})):A.createElement(\"small\",null),g?A.createElement(\"div\",{className:\"info__externaldocs\"},A.createElement(\"small\",null,A.createElement(m,{href:(0,L.Nm)(g),onClick:e=>e.stopPropagation(),target:\"_blank\"},v||g))):null,A.createElement(\"button\",{\"aria-expanded\":E,className:\"expand-operation\",title:E?\"Collapse operation\":\"Expand operation\",onClick:()=>s.show(w,!E)},A.createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},A.createElement(\"use\",{href:E?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:E?\"#large-arrow-up\":\"#large-arrow-down\"})))),A.createElement(h,{isOpened:E},n))}}le()(We,\"defaultProps\",{tagObj:N().fromJS({}),tag:\"\"});class Je extends A.PureComponent{render(){let{specPath:e,response:t,request:r,toggleShown:o,onTryoutClick:s,onResetClick:i,onCancelClick:a,onExecute:l,fn:c,getComponent:u,getConfigs:p,specActions:h,specSelectors:f,authActions:d,authSelectors:m,oas3Actions:g,oas3Selectors:y}=this.props,v=this.props.operation,{deprecated:b,isShown:w,path:E,method:x,op:S,tag:_,operationId:O,allowTryItOut:k,displayRequestDuration:C,tryItOutEnabled:P,executeInProgress:N}=v.toJS(),{description:I,externalDocs:T,schemes:R}=S;const M=T?(0,Ve.mn)(T.url,f.url(),{selectedServer:y.selectedServer()}):\"\";let D=v.getIn([\"op\"]),F=D.get(\"responses\"),B=(0,L.gp)(D,[\"parameters\"]),$=f.operationScheme(E,x),q=[\"operations\",_,O],U=(0,L.nX)(D);const z=u(\"responses\"),V=u(\"parameters\"),W=u(\"execute\"),J=u(\"clear\"),K=u(\"Collapse\"),H=u(\"Markdown\",!0),G=u(\"schemes\"),Z=u(\"OperationServers\"),Y=u(\"OperationExt\"),X=u(\"OperationSummary\"),Q=u(\"Link\"),{showExtensions:ee}=p();if(F&&t&&t.size>0){let e=!F.get(String(t.get(\"status\")))&&!F.get(\"default\");t=t.set(\"notDocumented\",e)}let te=[E,x];const ne=f.validationErrors([E,x]);return A.createElement(\"div\",{className:b?\"opblock opblock-deprecated\":w?`opblock opblock-${x} is-open`:`opblock opblock-${x}`,id:(0,L.J6)(q.join(\"-\"))},A.createElement(X,{operationProps:v,isShown:w,toggleShown:o,getComponent:u,authActions:d,authSelectors:m,specPath:e}),A.createElement(K,{isOpened:w},A.createElement(\"div\",{className:\"opblock-body\"},D&&D.size||null===D?null:A.createElement(\"img\",{height:\"32px\",width:\"32px\",src:n(2517),className:\"opblock-loading-animation\"}),b&&A.createElement(\"h4\",{className:\"opblock-title_normal\"},\" Warning: Deprecated\"),I&&A.createElement(\"div\",{className:\"opblock-description-wrapper\"},A.createElement(\"div\",{className:\"opblock-description\"},A.createElement(H,{source:I}))),M?A.createElement(\"div\",{className:\"opblock-external-docs-wrapper\"},A.createElement(\"h4\",{className:\"opblock-title_normal\"},\"Find more details\"),A.createElement(\"div\",{className:\"opblock-external-docs\"},T.description&&A.createElement(\"span\",{className:\"opblock-external-docs__description\"},A.createElement(H,{source:T.description})),A.createElement(Q,{target:\"_blank\",className:\"opblock-external-docs__link\",href:(0,L.Nm)(M)},M))):null,D&&D.size?A.createElement(V,{parameters:B,specPath:e.push(\"parameters\"),operation:D,onChangeKey:te,onTryoutClick:s,onResetClick:i,onCancelClick:a,tryItOutEnabled:P,allowTryItOut:k,fn:c,getComponent:u,specActions:h,specSelectors:f,pathMethod:[E,x],getConfigs:p,oas3Actions:g,oas3Selectors:y}):null,P?A.createElement(Z,{getComponent:u,path:E,method:x,operationServers:D.get(\"servers\"),pathServers:f.paths().getIn([E,\"servers\"]),getSelectedServer:y.selectedServer,setSelectedServer:g.setSelectedServer,setServerVariableValue:g.setServerVariableValue,getServerVariable:y.serverVariableValue,getEffectiveServerValue:y.serverEffectiveValue}):null,P&&k&&R&&R.size?A.createElement(\"div\",{className:\"opblock-schemes\"},A.createElement(G,{schemes:R,path:E,method:x,specActions:h,currentScheme:$})):null,!P||!k||ne.length<=0?null:A.createElement(\"div\",{className:\"validation-errors errors-wrapper\"},\"Please correct the following validation errors and try again.\",A.createElement(\"ul\",null,j()(ne).call(ne,((e,t)=>A.createElement(\"li\",{key:t},\" \",e,\" \"))))),A.createElement(\"div\",{className:P&&t&&k?\"btn-group\":\"execute-wrapper\"},P&&k?A.createElement(W,{operation:D,specActions:h,specSelectors:f,oas3Selectors:y,oas3Actions:g,path:E,method:x,onExecute:l,disabled:N}):null,P&&t&&k?A.createElement(J,{specActions:h,path:E,method:x}):null),N?A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"div\",{className:\"loading\"})):null,F?A.createElement(z,{responses:F,request:r,tryItOutResponse:t,getComponent:u,getConfigs:p,specSelectors:f,oas3Actions:g,oas3Selectors:y,specActions:h,produces:f.producesOptionsFor([E,x]),producesValue:f.currentProducesFor([E,x]),specPath:e.push(\"responses\"),path:E,method:x,displayRequestDuration:C,fn:c}):null,ee&&U.size?A.createElement(Y,{extensions:U,getComponent:u}):null)))}}le()(Je,\"defaultProps\",{operation:null,response:null,request:null,specPath:(0,P.List)(),summary:\"\"});var Ke=n(79833),He=n.n(Ke);class Ge extends A.PureComponent{render(){let{isShown:e,toggleShown:t,getComponent:n,authActions:r,authSelectors:o,operationProps:s,specPath:i}=this.props,{summary:a,isAuthorized:l,method:c,op:u,showSummary:p,path:h,operationId:f,originalOperationId:d,displayOperationId:m}=s.toJS(),{summary:g}=u,y=s.get(\"security\");const v=n(\"authorizeOperationBtn\"),b=n(\"OperationSummaryMethod\"),w=n(\"OperationSummaryPath\"),E=n(\"JumpToPath\",!0),x=n(\"CopyToClipboardBtn\",!0),S=y&&!!y.count(),_=S&&1===y.size&&y.first().isEmpty(),j=!S||_;return A.createElement(\"div\",{className:`opblock-summary opblock-summary-${c}`},A.createElement(\"button\",{\"aria-label\":`${c} ${h.replace(/\\//g,\"​/\")}`,\"aria-expanded\":e,className:\"opblock-summary-control\",onClick:t},A.createElement(b,{method:c}),A.createElement(w,{getComponent:n,operationProps:s,specPath:i}),p?A.createElement(\"div\",{className:\"opblock-summary-description\"},He()(g||a)):null,m&&(d||f)?A.createElement(\"span\",{className:\"opblock-summary-operation-id\"},d||f):null,A.createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},A.createElement(\"use\",{href:e?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:e?\"#large-arrow-up\":\"#large-arrow-down\"}))),j?null:A.createElement(v,{isAuthorized:l,onClick:()=>{const e=o.definitionsForRequirements(y);r.showDefinitions(e)}}),A.createElement(x,{textToCopy:`${i.get(1)}`}),A.createElement(E,{path:i}))}}le()(Ge,\"defaultProps\",{operationProps:null,specPath:(0,P.List)(),summary:\"\"});class Ze extends A.PureComponent{render(){let{method:e}=this.props;return A.createElement(\"span\",{className:\"opblock-summary-method\"},e.toUpperCase())}}le()(Ze,\"defaultProps\",{operationProps:null});var Ye=n(39940),Xe=n.n(Ye);class Qe extends A.PureComponent{render(){let{getComponent:e,operationProps:t}=this.props,{deprecated:n,isShown:r,path:o,tag:s,operationId:i,isDeepLinkingEnabled:a}=t.toJS();const l=o.split(/(?=\\/)/g);for(let e=1;e<l.length;e+=2)Xe()(l).call(l,e,0,A.createElement(\"wbr\",{key:e}));const c=e(\"DeepLink\");return A.createElement(\"span\",{className:n?\"opblock-summary-path__deprecated\":\"opblock-summary-path\",\"data-path\":o},A.createElement(c,{enabled:a,isShown:r,path:(0,L.oJ)(`${s}/${i}`),text:l}))}}const et=e=>{var t;let{extensions:n,getComponent:r}=e,o=r(\"OperationExtRow\");return A.createElement(\"div\",{className:\"opblock-section\"},A.createElement(\"div\",{className:\"opblock-section-header\"},A.createElement(\"h4\",null,\"Extensions\")),A.createElement(\"div\",{className:\"table-container\"},A.createElement(\"table\",null,A.createElement(\"thead\",null,A.createElement(\"tr\",null,A.createElement(\"td\",{className:\"col_header\"},\"Field\"),A.createElement(\"td\",{className:\"col_header\"},\"Value\"))),A.createElement(\"tbody\",null,j()(t=n.entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(o,{key:`${t}-${n}`,xKey:t,xVal:n})}))))))},tt=e=>{let{xKey:t,xVal:n}=e;const r=n?n.toJS?n.toJS():n:null;return A.createElement(\"tr\",null,A.createElement(\"td\",null,t),A.createElement(\"td\",null,p()(r)))};var nt=n(86),rt=n.n(nt),ot=n(94184),st=n.n(ot),it=n(33424),at=n(27361),lt=n.n(at),ct=n(23560),ut=n.n(ct),pt=n(35823),ht=n.n(pt),ft=n(74855);const dt=e=>{let{value:t,fileName:n,className:r,downloadable:o,getConfigs:s,canCopy:i,language:l}=e;const c=ut()(s)?s():null,u=!1!==lt()(c,\"syntaxHighlight\")&&lt()(c,\"syntaxHighlight.activated\",!0),p=(0,A.useRef)(null);(0,A.useEffect)((()=>{var e;const t=a()(e=Pe()(p.current.childNodes)).call(e,(e=>!!e.nodeType&&e.classList.contains(\"microlight\")));return rt()(t).call(t,(e=>e.addEventListener(\"mousewheel\",h,{passive:!1}))),()=>{rt()(t).call(t,(e=>e.removeEventListener(\"mousewheel\",h)))}}),[t,r,l]);const h=e=>{const{target:t,deltaY:n}=e,{scrollHeight:r,offsetHeight:o,scrollTop:s}=t;r>o&&(0===s&&n<0||o+s>=r&&n>0)&&e.preventDefault()};return A.createElement(\"div\",{className:\"highlight-code\",ref:p},o?A.createElement(\"div\",{className:\"download-contents\",onClick:()=>{ht()(t,n)}},\"Download\"):null,i&&A.createElement(\"div\",{className:\"copy-to-clipboard\"},A.createElement(ft.CopyToClipboard,{text:t},A.createElement(\"button\",null))),u?A.createElement(it.d3,{language:l,className:st()(r,\"microlight\"),style:(0,it.C2)(lt()(c,\"syntaxHighlight.theme\",\"agate\"))},t):A.createElement(\"pre\",{className:st()(r,\"microlight\")},t))};dt.defaultProps={fileName:\"response.txt\"};const mt=dt;class gt extends A.Component{constructor(){super(...arguments),le()(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e))),le()(this,\"onResponseContentTypeChange\",(e=>{let{controlsAcceptHeader:t,value:n}=e;const{oas3Actions:r,path:o,method:s}=this.props;t&&r.setResponseContentType({value:n,path:o,method:s})}))}render(){var e;let{responses:t,tryItOutResponse:n,getComponent:r,getConfigs:o,specSelectors:s,fn:i,producesValue:a,displayRequestDuration:l,specPath:c,path:u,method:p,oas3Selectors:h,oas3Actions:f}=this.props,d=(0,L.iQ)(t);const m=r(\"contentType\"),g=r(\"liveResponse\"),y=r(\"response\");let v=this.props.produces&&this.props.produces.size?this.props.produces:gt.defaultProps.produces;const b=s.isOAS3()?(0,L.QG)(t):null,w=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"_\";return e.replace(/[^\\w-]/g,t)}(`${p}${u}_responses`),E=`${w}_select`;return A.createElement(\"div\",{className:\"responses-wrapper\"},A.createElement(\"div\",{className:\"opblock-section-header\"},A.createElement(\"h4\",null,\"Responses\"),s.isOAS3()?null:A.createElement(\"label\",{htmlFor:E},A.createElement(\"span\",null,\"Response content type\"),A.createElement(m,{value:a,ariaControls:w,ariaLabel:\"Response content type\",className:\"execute-content-type\",contentTypes:v,controlId:E,onChange:this.onChangeProducesWrapper}))),A.createElement(\"div\",{className:\"responses-inner\"},n?A.createElement(\"div\",null,A.createElement(g,{response:n,getComponent:r,getConfigs:o,specSelectors:s,path:this.props.path,method:this.props.method,displayRequestDuration:l}),A.createElement(\"h4\",null,\"Responses\")):null,A.createElement(\"table\",{\"aria-live\":\"polite\",className:\"responses-table\",id:w,role:\"region\"},A.createElement(\"thead\",null,A.createElement(\"tr\",{className:\"responses-header\"},A.createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),A.createElement(\"td\",{className:\"col_header response-col_description\"},\"Description\"),s.isOAS3()?A.createElement(\"td\",{className:\"col col_header response-col_links\"},\"Links\"):null)),A.createElement(\"tbody\",null,j()(e=t.entrySeq()).call(e,(e=>{let[t,l]=e,m=n&&n.get(\"status\")==t?\"response_current\":\"\";return A.createElement(y,{key:t,path:u,method:p,specPath:c.push(t),isDefault:d===t,fn:i,className:m,code:t,response:l,specSelectors:s,controlsAcceptHeader:l===b,onContentTypeChange:this.onResponseContentTypeChange,contentType:a,getConfigs:o,activeExamplesKey:h.activeExamplesMember(u,p,\"responses\",t),oas3Actions:f,getComponent:r})})).toArray()))))}}le()(gt,\"defaultProps\",{tryItOutResponse:null,produces:(0,P.fromJS)([\"application/json\"]),displayRequestDuration:!1});var yt=n(47273),vt=n.n(yt),bt=n(2518);class wt extends A.Component{constructor(e,t){super(e,t),le()(this,\"_onContentTypeChange\",(e=>{const{onContentTypeChange:t,controlsAcceptHeader:n}=this.props;this.setState({responseContentType:e}),t({value:e,controlsAcceptHeader:n})})),le()(this,\"getTargetExamplesKey\",(()=>{const{response:e,contentType:t,activeExamplesKey:n}=this.props,r=this.state.responseContentType||t,o=e.getIn([\"content\",r],(0,P.Map)({})).get(\"examples\",null).keySeq().first();return n||o})),this.state={responseContentType:\"\"}}render(){var e,t;let{path:n,method:r,code:o,response:s,className:i,specPath:a,fn:l,getComponent:c,getConfigs:u,specSelectors:p,contentType:h,controlsAcceptHeader:f,oas3Actions:d}=this.props,{inferSchema:m,getSampleSchema:g}=l,y=p.isOAS3();const{showExtensions:v}=u();let b=v?(0,L.nX)(s):null,w=s.get(\"headers\"),E=s.get(\"links\");const x=c(\"ResponseExtension\"),S=c(\"headers\"),_=c(\"highlightCode\"),O=c(\"modelExample\"),k=c(\"Markdown\",!0),C=c(\"operationLink\"),N=c(\"contentType\"),I=c(\"ExamplesSelect\"),T=c(\"Example\");var R,M;const D=this.state.responseContentType||h,F=s.getIn([\"content\",D],(0,P.Map)({})),B=F.get(\"examples\",null);if(y){const e=F.get(\"schema\");R=e?m(e.toJS()):null,M=e?(0,P.List)([\"content\",this.state.responseContentType,\"schema\"]):a}else R=s.get(\"schema\"),M=s.has(\"schema\")?a.push(\"schema\"):a;let $,q,U=!1,z={includeReadOnly:!0};if(y){var V;if(q=null===(V=F.get(\"schema\"))||void 0===V?void 0:V.toJS(),B){const e=this.getTargetExamplesKey(),t=e=>e.get(\"value\");$=t(B.get(e,(0,P.Map)({}))),void 0===$&&($=t(vt()(B).call(B).next().value)),U=!0}else void 0!==F.get(\"example\")&&($=F.get(\"example\"),U=!0)}else{q=R,z={...z,includeWriteOnly:!0};const e=s.getIn([\"examples\",D]);e&&($=e,U=!0)}let W=((e,t,n)=>{if(null!=e){let r=null;return(0,bt.O)(e)&&(r=\"json\"),A.createElement(\"div\",null,A.createElement(t,{className:\"example\",getConfigs:n,language:r,value:(0,L.Pz)(e)}))}return null})(g(q,D,z,U?$:void 0),_,u);return A.createElement(\"tr\",{className:\"response \"+(i||\"\"),\"data-code\":o},A.createElement(\"td\",{className:\"response-col_status\"},o),A.createElement(\"td\",{className:\"response-col_description\"},A.createElement(\"div\",{className:\"response-col_description__inner\"},A.createElement(k,{source:s.get(\"description\")})),v&&b.size?j()(e=b.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(x,{key:`${t}-${n}`,xKey:t,xVal:n})})):null,y&&s.get(\"content\")?A.createElement(\"section\",{className:\"response-controls\"},A.createElement(\"div\",{className:st()(\"response-control-media-type\",{\"response-control-media-type--accept-controller\":f})},A.createElement(\"small\",{className:\"response-control-media-type__title\"},\"Media type\"),A.createElement(N,{value:this.state.responseContentType,contentTypes:s.get(\"content\")?s.get(\"content\").keySeq():(0,P.Seq)(),onChange:this._onContentTypeChange,ariaLabel:\"Media Type\"}),f?A.createElement(\"small\",{className:\"response-control-media-type__accept-message\"},\"Controls \",A.createElement(\"code\",null,\"Accept\"),\" header.\"):null),B?A.createElement(\"div\",{className:\"response-control-examples\"},A.createElement(\"small\",{className:\"response-control-examples__title\"},\"Examples\"),A.createElement(I,{examples:B,currentExampleKey:this.getTargetExamplesKey(),onSelect:e=>d.setActiveExamplesMember({name:e,pathMethod:[n,r],contextType:\"responses\",contextName:o}),showLabels:!1})):null):null,W||R?A.createElement(O,{specPath:M,getComponent:c,getConfigs:u,specSelectors:p,schema:(0,L.oG)(R),example:W,includeReadOnly:!0}):null,y&&B?A.createElement(T,{example:B.get(this.getTargetExamplesKey(),(0,P.Map)({})),getComponent:c,getConfigs:u,omitValue:!0}):null,w?A.createElement(S,{headers:w,getComponent:c}):null),y?A.createElement(\"td\",{className:\"response-col_links\"},E?j()(t=E.toSeq().entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(C,{key:t,name:t,link:n,getComponent:c})})):A.createElement(\"i\",null,\"No links\")):null)}}le()(wt,\"defaultProps\",{response:(0,P.fromJS)({}),onContentTypeChange:()=>{}});const Et=e=>{let{xKey:t,xVal:n}=e;return A.createElement(\"div\",{className:\"response__extension\"},t,\": \",String(n))};var xt=n(63460),St=n.n(xt),_t=n(3131),jt=n.n(_t),Ot=n(7334),kt=n.n(Ot);class At extends A.PureComponent{constructor(){super(...arguments),le()(this,\"state\",{parsedContent:null}),le()(this,\"updateParsedContent\",(e=>{const{content:t}=this.props;if(e!==t)if(t&&t instanceof Blob){var n=new FileReader;n.onload=()=>{this.setState({parsedContent:n.result})},n.readAsText(t)}else this.setState({parsedContent:t.toString()})}))}componentDidMount(){this.updateParsedContent(null)}componentDidUpdate(e){this.updateParsedContent(e.content)}render(){let{content:e,contentType:t,url:n,headers:r={},getConfigs:o,getComponent:i}=this.props;const{parsedContent:a}=this.state,l=i(\"highlightCode\"),c=\"response_\"+(new Date).getTime();let u,h;if(n=n||\"\",(/^application\\/octet-stream/i.test(t)||r[\"Content-Disposition\"]&&/attachment/i.test(r[\"Content-Disposition\"])||r[\"content-disposition\"]&&/attachment/i.test(r[\"content-disposition\"])||r[\"Content-Description\"]&&/File Transfer/i.test(r[\"Content-Description\"])||r[\"content-description\"]&&/File Transfer/i.test(r[\"content-description\"]))&&e.size>0)if(\"Blob\"in window){let o=t||\"text/html\",i=e instanceof Blob?e:new Blob([e],{type:o}),a=St().createObjectURL(i),l=[o,n.substr(s()(n).call(n,\"/\")+1),a].join(\":\"),c=r[\"content-disposition\"]||r[\"Content-Disposition\"];if(void 0!==c){let e=(0,L.DR)(c);null!==e&&(l=e)}h=F.Z.navigator&&F.Z.navigator.msSaveOrOpenBlob?A.createElement(\"div\",null,A.createElement(\"a\",{href:a,onClick:()=>F.Z.navigator.msSaveOrOpenBlob(i,l)},\"Download file\")):A.createElement(\"div\",null,A.createElement(\"a\",{href:a,download:l},\"Download file\"))}else h=A.createElement(\"pre\",{className:\"microlight\"},\"Download headers detected but your browser does not support downloading binary via XHR (Blob).\");else if(/json/i.test(t)){let t=null;(0,bt.O)(e)&&(t=\"json\");try{u=p()(JSON.parse(e),null,\"  \")}catch(t){u=\"can't parse JSON.  Raw result:\\n\\n\"+e}h=A.createElement(l,{language:t,downloadable:!0,fileName:`${c}.json`,value:u,getConfigs:o,canCopy:!0})}else/xml/i.test(t)?(u=jt()(e,{textNodesOnSameLine:!0,indentor:\"  \"}),h=A.createElement(l,{downloadable:!0,fileName:`${c}.xml`,value:u,getConfigs:o,canCopy:!0})):h=\"text/html\"===kt()(t)||/text\\/plain/.test(t)?A.createElement(l,{downloadable:!0,fileName:`${c}.html`,value:e,getConfigs:o,canCopy:!0}):\"text/csv\"===kt()(t)||/text\\/csv/.test(t)?A.createElement(l,{downloadable:!0,fileName:`${c}.csv`,value:e,getConfigs:o,canCopy:!0}):/^image\\//i.test(t)?Re()(t).call(t,\"svg\")?A.createElement(\"div\",null,\" \",e,\" \"):A.createElement(\"img\",{src:St().createObjectURL(e)}):/^audio\\//i.test(t)?A.createElement(\"pre\",{className:\"microlight\"},A.createElement(\"audio\",{controls:!0,key:n},A.createElement(\"source\",{src:n,type:t}))):\"string\"==typeof e?A.createElement(l,{downloadable:!0,fileName:`${c}.txt`,value:e,getConfigs:o,canCopy:!0}):e.size>0?a?A.createElement(\"div\",null,A.createElement(\"p\",{className:\"i\"},\"Unrecognized response type; displaying content as text.\"),A.createElement(l,{downloadable:!0,fileName:`${c}.txt`,value:a,getConfigs:o,canCopy:!0})):A.createElement(\"p\",{className:\"i\"},\"Unrecognized response type; unable to display.\"):null;return h?A.createElement(\"div\",null,A.createElement(\"h5\",null,\"Response body\"),h):null}}var Ct=n(3665),Pt=n.n(Ct);class Nt extends A.Component{constructor(e){super(e),le()(this,\"onChange\",((e,t,n)=>{let{specActions:{changeParamByIdentity:r},onChangeKey:o}=this.props;r(o,e,t,n)})),le()(this,\"onChangeConsumesWrapper\",(e=>{let{specActions:{changeConsumesValue:t},onChangeKey:n}=this.props;t(n,e)})),le()(this,\"toggleTab\",(e=>\"parameters\"===e?this.setState({parametersVisible:!0,callbackVisible:!1}):\"callbacks\"===e?this.setState({callbackVisible:!0,parametersVisible:!1}):void 0)),le()(this,\"onChangeMediaType\",(e=>{let{value:t,pathMethod:n}=e,{specActions:r,oas3Selectors:o,oas3Actions:s}=this.props;const i=o.hasUserEditedBody(...n),a=o.shouldRetainRequestBodyValue(...n);s.setRequestContentType({value:t,pathMethod:n}),s.initRequestBodyValidateError({pathMethod:n}),i||(a||s.setRequestBodyValue({value:void 0,pathMethod:n}),r.clearResponse(...n),r.clearRequest(...n),r.clearValidateParams(n))})),this.state={callbackVisible:!1,parametersVisible:!0}}render(){var e;let{onTryoutClick:t,onResetClick:n,parameters:r,allowTryItOut:o,tryItOutEnabled:s,specPath:i,fn:a,getComponent:l,getConfigs:c,specSelectors:u,specActions:p,pathMethod:h,oas3Actions:f,oas3Selectors:d,operation:m}=this.props;const g=l(\"parameterRow\"),y=l(\"TryItOutButton\"),v=l(\"contentType\"),w=l(\"Callbacks\",!0),E=l(\"RequestBody\",!0),x=s&&o,_=u.isOAS3(),O=m.get(\"requestBody\"),C=S()(e=Pt()(S()(r).call(r,((e,t)=>{const n=t.get(\"in\");return e[n]??(e[n]=[]),e[n].push(t),e}),{}))).call(e,((e,t)=>k()(e).call(e,t)),[]);return A.createElement(\"div\",{className:\"opblock-section\"},A.createElement(\"div\",{className:\"opblock-section-header\"},_?A.createElement(\"div\",{className:\"tab-header\"},A.createElement(\"div\",{onClick:()=>this.toggleTab(\"parameters\"),className:`tab-item ${this.state.parametersVisible&&\"active\"}`},A.createElement(\"h4\",{className:\"opblock-title\"},A.createElement(\"span\",null,\"Parameters\"))),m.get(\"callbacks\")?A.createElement(\"div\",{onClick:()=>this.toggleTab(\"callbacks\"),className:`tab-item ${this.state.callbackVisible&&\"active\"}`},A.createElement(\"h4\",{className:\"opblock-title\"},A.createElement(\"span\",null,\"Callbacks\"))):null):A.createElement(\"div\",{className:\"tab-header\"},A.createElement(\"h4\",{className:\"opblock-title\"},\"Parameters\")),o?A.createElement(y,{isOAS3:u.isOAS3(),hasUserEditedBody:d.hasUserEditedBody(...h),enabled:s,onCancelClick:this.props.onCancelClick,onTryoutClick:t,onResetClick:()=>n(h)}):null),this.state.parametersVisible?A.createElement(\"div\",{className:\"parameters-container\"},C.length?A.createElement(\"div\",{className:\"table-container\"},A.createElement(\"table\",{className:\"parameters\"},A.createElement(\"thead\",null,A.createElement(\"tr\",null,A.createElement(\"th\",{className:\"col_header parameters-col_name\"},\"Name\"),A.createElement(\"th\",{className:\"col_header parameters-col_description\"},\"Description\"))),A.createElement(\"tbody\",null,j()(C).call(C,((e,t)=>A.createElement(g,{fn:a,specPath:i.push(t.toString()),getComponent:l,getConfigs:c,rawParam:e,param:u.parameterWithMetaByIdentity(h,e),key:`${e.get(\"in\")}.${e.get(\"name\")}`,onChange:this.onChange,onChangeConsumes:this.onChangeConsumesWrapper,specSelectors:u,specActions:p,oas3Actions:f,oas3Selectors:d,pathMethod:h,isExecute:x})))))):A.createElement(\"div\",{className:\"opblock-description-wrapper\"},A.createElement(\"p\",null,\"No parameters\"))):null,this.state.callbackVisible?A.createElement(\"div\",{className:\"callbacks-container opblock-description-wrapper\"},A.createElement(w,{callbacks:(0,P.Map)(m.get(\"callbacks\")),specPath:b()(i).call(i,0,-1).push(\"callbacks\")})):null,_&&O&&this.state.parametersVisible&&A.createElement(\"div\",{className:\"opblock-section opblock-section-request-body\"},A.createElement(\"div\",{className:\"opblock-section-header\"},A.createElement(\"h4\",{className:`opblock-title parameter__name ${O.get(\"required\")&&\"required\"}`},\"Request body\"),A.createElement(\"label\",null,A.createElement(v,{value:d.requestContentType(...h),contentTypes:O.get(\"content\",(0,P.List)()).keySeq(),onChange:e=>{this.onChangeMediaType({value:e,pathMethod:h})},className:\"body-param-content-type\",ariaLabel:\"Request content type\"}))),A.createElement(\"div\",{className:\"opblock-description-wrapper\"},A.createElement(E,{setRetainRequestBodyValueFlag:e=>f.setRetainRequestBodyValueFlag({value:e,pathMethod:h}),userHasEditedBody:d.hasUserEditedBody(...h),specPath:b()(i).call(i,0,-1).push(\"requestBody\"),requestBody:O,requestBodyValue:d.requestBodyValue(...h),requestBodyInclusionSetting:d.requestBodyInclusionSetting(...h),requestBodyErrors:d.requestBodyErrors(...h),isExecute:x,getConfigs:c,activeExamplesKey:d.activeExamplesMember(...h,\"requestBody\",\"requestBody\"),updateActiveExamplesKey:e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"requestBody\",contextName:\"requestBody\"})},onChange:(e,t)=>{if(t){const n=d.requestBodyValue(...h),r=P.Map.isMap(n)?n:(0,P.Map)();return f.setRequestBodyValue({pathMethod:h,value:r.setIn(t,e)})}f.setRequestBodyValue({value:e,pathMethod:h})},onChangeIncludeEmpty:(e,t)=>{f.setRequestBodyInclusion({pathMethod:h,value:t,name:e})},contentType:d.requestContentType(...h)}))))}}le()(Nt,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]});const It=e=>{let{xKey:t,xVal:n}=e;return A.createElement(\"div\",{className:\"parameter__extension\"},t,\": \",String(n))},Tt={onChange:()=>{},isIncludedOptions:{}};class Rt extends A.Component{constructor(){super(...arguments),le()(this,\"onCheckboxChange\",(e=>{const{onChange:t}=this.props;t(e.target.checked)}))}componentDidMount(){const{isIncludedOptions:e,onChange:t}=this.props,{shouldDispatchInit:n,defaultValue:r}=e;n&&t(r)}render(){let{isIncluded:e,isDisabled:t}=this.props;return A.createElement(\"div\",null,A.createElement(\"label\",{className:st()(\"parameter__empty_value_toggle\",{disabled:t})},A.createElement(\"input\",{type:\"checkbox\",disabled:t,checked:!t&&e,onChange:this.onCheckboxChange}),\"Send empty value\"))}}le()(Rt,\"defaultProps\",Tt);var Mt=n(19069);class Dt extends A.Component{constructor(e,t){var n;super(e,t),n=this,le()(this,\"onChangeWrapper\",(function(e){let t,r=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{onChange:o,rawParam:s}=n.props;return t=\"\"===e||e&&0===e.size?null:e,o(s,t,r)})),le()(this,\"_onExampleSelect\",(e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"parameters\",contextName:this.getParamKey()})})),le()(this,\"onChangeIncludeEmpty\",(e=>{let{specActions:t,param:n,pathMethod:r}=this.props;const o=n.get(\"name\"),s=n.get(\"in\");return t.updateEmptyParamInclusion(r,o,s,e)})),le()(this,\"setDefaultValue\",(()=>{let{specSelectors:e,pathMethod:t,rawParam:n,oas3Selectors:r,fn:o}=this.props;const s=e.parameterWithMetaByIdentity(t,n)||(0,P.Map)(),{schema:i}=(0,Mt.Z)(s,{isOAS3:e.isOAS3()}),a=s.get(\"content\",(0,P.Map)()).keySeq().first(),l=i?o.getSampleSchema(i.toJS(),a,{includeWriteOnly:!0}):null;if(s&&void 0===s.get(\"value\")&&\"body\"!==s.get(\"in\")){let n;if(e.isSwagger2())n=void 0!==s.get(\"x-example\")?s.get(\"x-example\"):void 0!==s.getIn([\"schema\",\"example\"])?s.getIn([\"schema\",\"example\"]):i&&i.getIn([\"default\"]);else if(e.isOAS3()){const e=r.activeExamplesMember(...t,\"parameters\",this.getParamKey());n=void 0!==s.getIn([\"examples\",e,\"value\"])?s.getIn([\"examples\",e,\"value\"]):void 0!==s.getIn([\"content\",a,\"example\"])?s.getIn([\"content\",a,\"example\"]):void 0!==s.get(\"example\")?s.get(\"example\"):void 0!==(i&&i.get(\"example\"))?i&&i.get(\"example\"):void 0!==(i&&i.get(\"default\"))?i&&i.get(\"default\"):s.get(\"default\")}void 0===n||P.List.isList(n)||(n=(0,L.Pz)(n)),void 0!==n?this.onChangeWrapper(n):i&&\"object\"===i.get(\"type\")&&l&&!s.get(\"examples\")&&this.onChangeWrapper(P.List.isList(l)?l:(0,L.Pz)(l))}})),this.setDefaultValue()}UNSAFE_componentWillReceiveProps(e){let t,{specSelectors:n,pathMethod:r,rawParam:o}=e,s=n.isOAS3(),i=n.parameterWithMetaByIdentity(r,o)||new P.Map;if(i=i.isEmpty()?o:i,s){let{schema:e}=(0,Mt.Z)(i,{isOAS3:s});t=e?e.get(\"enum\"):void 0}else t=i?i.get(\"enum\"):void 0;let a,l=i?i.get(\"value\"):void 0;void 0!==l?a=l:o.get(\"required\")&&t&&t.size&&(a=t.first()),void 0!==a&&a!==l&&this.onChangeWrapper((0,L.D$)(a)),this.setDefaultValue()}getParamKey(){const{param:e}=this.props;return e?`${e.get(\"name\")}-${e.get(\"in\")}`:null}render(){var e,t;let{param:n,rawParam:r,getComponent:o,getConfigs:s,isExecute:i,fn:a,onChangeConsumes:l,specSelectors:c,pathMethod:u,specPath:p,oas3Selectors:h}=this.props,f=c.isOAS3();const{showExtensions:d,showCommonExtensions:m}=s();if(n||(n=r),!r)return null;const g=o(\"JsonSchemaForm\"),y=o(\"ParamBody\");let v=n.get(\"in\"),b=\"body\"!==v?null:A.createElement(y,{getComponent:o,getConfigs:s,fn:a,param:n,consumes:c.consumesOptionsFor(u),consumesValue:c.contentTypeValues(u).get(\"requestContentType\"),onChange:this.onChangeWrapper,onChangeConsumes:l,isExecute:i,specSelectors:c,pathMethod:u});const w=o(\"modelExample\"),E=o(\"Markdown\",!0),x=o(\"ParameterExt\"),S=o(\"ParameterIncludeEmpty\"),_=o(\"ExamplesSelectValueRetainer\"),O=o(\"Example\");let k,C,N,I,{schema:T}=(0,Mt.Z)(n,{isOAS3:f}),R=c.parameterWithMetaByIdentity(u,r)||(0,P.Map)(),M=T?T.get(\"format\"):null,D=T?T.get(\"type\"):null,B=T?T.getIn([\"items\",\"type\"]):null,$=\"formData\"===v,q=\"FormData\"in F.Z,U=n.get(\"required\"),z=R?R.get(\"value\"):\"\",V=m?(0,L.po)(T):null,W=d?(0,L.nX)(n):null,J=!1;return void 0!==n&&T&&(k=T.get(\"items\")),void 0!==k?(C=k.get(\"enum\"),N=k.get(\"default\")):T&&(C=T.get(\"enum\")),C&&C.size&&C.size>0&&(J=!0),void 0!==n&&(T&&(N=T.get(\"default\")),void 0===N&&(N=n.get(\"default\")),I=n.get(\"example\"),void 0===I&&(I=n.get(\"x-example\"))),A.createElement(\"tr\",{\"data-param-name\":n.get(\"name\"),\"data-param-in\":n.get(\"in\")},A.createElement(\"td\",{className:\"parameters-col_name\"},A.createElement(\"div\",{className:U?\"parameter__name required\":\"parameter__name\"},n.get(\"name\"),U?A.createElement(\"span\",null,\" *\"):null),A.createElement(\"div\",{className:\"parameter__type\"},D,B&&`[${B}]`,M&&A.createElement(\"span\",{className:\"prop-format\"},\"($\",M,\")\")),A.createElement(\"div\",{className:\"parameter__deprecated\"},f&&n.get(\"deprecated\")?\"deprecated\":null),A.createElement(\"div\",{className:\"parameter__in\"},\"(\",n.get(\"in\"),\")\"),m&&V.size?j()(e=V.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(x,{key:`${t}-${n}`,xKey:t,xVal:n})})):null,d&&W.size?j()(t=W.entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(x,{key:`${t}-${n}`,xKey:t,xVal:n})})):null),A.createElement(\"td\",{className:\"parameters-col_description\"},n.get(\"description\")?A.createElement(E,{source:n.get(\"description\")}):null,!b&&i||!J?null:A.createElement(E,{className:\"parameter__enum\",source:\"<i>Available values</i> : \"+j()(C).call(C,(function(e){return e})).toArray().join(\", \")}),!b&&i||void 0===N?null:A.createElement(E,{className:\"parameter__default\",source:\"<i>Default value</i> : \"+N}),!b&&i||void 0===I?null:A.createElement(E,{source:\"<i>Example</i> : \"+I}),$&&!q&&A.createElement(\"div\",null,\"Error: your browser does not support FormData\"),f&&n.get(\"examples\")?A.createElement(\"section\",{className:\"parameter-controls\"},A.createElement(_,{examples:n.get(\"examples\"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:o,defaultToFirstExample:!0,currentKey:h.activeExamplesMember(...u,\"parameters\",this.getParamKey()),currentUserInputValue:z})):null,b?null:A.createElement(g,{fn:a,getComponent:o,value:z,required:U,disabled:!i,description:n.get(\"name\"),onChange:this.onChangeWrapper,errors:R.get(\"errors\"),schema:T}),b&&T?A.createElement(w,{getComponent:o,specPath:p.push(\"schema\"),getConfigs:s,isExecute:i,specSelectors:c,schema:T,example:b,includeWriteOnly:!0}):null,!b&&i&&n.get(\"allowEmptyValue\")?A.createElement(S,{onChange:this.onChangeIncludeEmpty,isIncluded:c.parameterInclusionSettingFor(u,n.get(\"name\"),n.get(\"in\")),isDisabled:!(0,L.O2)(z)}):null,f&&n.get(\"examples\")?A.createElement(O,{example:n.getIn([\"examples\",h.activeExamplesMember(...u,\"parameters\",this.getParamKey())]),getComponent:o,getConfigs:s}):null))}}var Ft=n(87198),Lt=n.n(Ft);class Bt extends A.Component{constructor(){super(...arguments),le()(this,\"handleValidateParameters\",(()=>{let{specSelectors:e,specActions:t,path:n,method:r}=this.props;return t.validateParams([n,r]),e.validateBeforeExecute([n,r])})),le()(this,\"handleValidateRequestBody\",(()=>{let{path:e,method:t,specSelectors:n,oas3Selectors:r,oas3Actions:o}=this.props,s={missingBodyValue:!1,missingRequiredKeys:[]};o.clearRequestBodyValidateError({path:e,method:t});let i=n.getOAS3RequiredRequestBodyContentType([e,t]),a=r.requestBodyValue(e,t),l=r.validateBeforeExecute([e,t]),c=r.requestContentType(e,t);if(!l)return s.missingBodyValue=!0,o.setRequestBodyValidateError({path:e,method:t,validationErrors:s}),!1;if(!i)return!0;let u=r.validateShallowRequired({oas3RequiredRequestBodyContentType:i,oas3RequestContentType:c,oas3RequestBodyValue:a});return!u||u.length<1||(rt()(u).call(u,(e=>{s.missingRequiredKeys.push(e)})),o.setRequestBodyValidateError({path:e,method:t,validationErrors:s}),!1)})),le()(this,\"handleValidationResultPass\",(()=>{let{specActions:e,operation:t,path:n,method:r}=this.props;this.props.onExecute&&this.props.onExecute(),e.execute({operation:t,path:n,method:r})})),le()(this,\"handleValidationResultFail\",(()=>{let{specActions:e,path:t,method:n}=this.props;e.clearValidateParams([t,n]),Lt()((()=>{e.validateParams([t,n])}),40)})),le()(this,\"handleValidationResult\",(e=>{e?this.handleValidationResultPass():this.handleValidationResultFail()})),le()(this,\"onClick\",(()=>{let e=this.handleValidateParameters(),t=this.handleValidateRequestBody(),n=e&&t;this.handleValidationResult(n)})),le()(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e)))}render(){const{disabled:e}=this.props;return A.createElement(\"button\",{className:\"btn execute opblock-control__btn\",onClick:this.onClick,disabled:e},\"Execute\")}}class $t extends A.Component{render(){var e;let{headers:t,getComponent:n}=this.props;const r=n(\"Property\"),o=n(\"Markdown\",!0);return t&&t.size?A.createElement(\"div\",{className:\"headers-wrapper\"},A.createElement(\"h4\",{className:\"headers__title\"},\"Headers:\"),A.createElement(\"table\",{className:\"headers\"},A.createElement(\"thead\",null,A.createElement(\"tr\",{className:\"header-row\"},A.createElement(\"th\",{className:\"header-col\"},\"Name\"),A.createElement(\"th\",{className:\"header-col\"},\"Description\"),A.createElement(\"th\",{className:\"header-col\"},\"Type\"))),A.createElement(\"tbody\",null,j()(e=t.entrySeq()).call(e,(e=>{let[t,n]=e;if(!N().Map.isMap(n))return null;const s=n.get(\"description\"),i=n.getIn([\"schema\"])?n.getIn([\"schema\",\"type\"]):n.getIn([\"type\"]),a=n.getIn([\"schema\",\"example\"]);return A.createElement(\"tr\",{key:t},A.createElement(\"td\",{className:\"header-col\"},t),A.createElement(\"td\",{className:\"header-col\"},s?A.createElement(o,{source:s}):null),A.createElement(\"td\",{className:\"header-col\"},i,\" \",a?A.createElement(r,{propKey:\"Example\",propVal:a,propClass:\"header-example\"}):null))})).toArray()))):null}}class qt extends A.Component{render(){let{editorActions:e,errSelectors:t,layoutSelectors:n,layoutActions:r,getComponent:o}=this.props;const s=o(\"Collapse\");if(e&&e.jumpToLine)var i=e.jumpToLine;let l=t.allErrors(),c=a()(l).call(l,(e=>\"thrown\"===e.get(\"type\")||\"error\"===e.get(\"level\")));if(!c||c.count()<1)return null;let u=n.isShown([\"errorPane\"],!0),p=c.sortBy((e=>e.get(\"line\")));return A.createElement(\"pre\",{className:\"errors-wrapper\"},A.createElement(\"hgroup\",{className:\"error\"},A.createElement(\"h4\",{className:\"errors__title\"},\"Errors\"),A.createElement(\"button\",{className:\"btn errors__clear-btn\",onClick:()=>r.show([\"errorPane\"],!u)},u?\"Hide\":\"Show\")),A.createElement(s,{isOpened:u,animated:!0},A.createElement(\"div\",{className:\"errors\"},j()(p).call(p,((e,t)=>{let n=e.get(\"type\");return\"thrown\"===n||\"auth\"===n?A.createElement(Ut,{key:t,error:e.get(\"error\")||e,jumpToLine:i}):\"spec\"===n?A.createElement(zt,{key:t,error:e,jumpToLine:i}):void 0})))))}}const Ut=e=>{let{error:t,jumpToLine:n}=e;if(!t)return null;let r=t.get(\"line\");return A.createElement(\"div\",{className:\"error-wrapper\"},t?A.createElement(\"div\",null,A.createElement(\"h4\",null,t.get(\"source\")&&t.get(\"level\")?Vt(t.get(\"source\"))+\" \"+t.get(\"level\"):\"\",t.get(\"path\")?A.createElement(\"small\",null,\" at \",t.get(\"path\")):null),A.createElement(\"span\",{className:\"message thrown\"},t.get(\"message\")),A.createElement(\"div\",{className:\"error-line\"},r&&n?A.createElement(\"a\",{onClick:m()(n).call(n,null,r)},\"Jump to line \",r):null)):null)},zt=e=>{let{error:t,jumpToLine:n}=e,r=null;return t.get(\"path\")?r=P.List.isList(t.get(\"path\"))?A.createElement(\"small\",null,\"at \",t.get(\"path\").join(\".\")):A.createElement(\"small\",null,\"at \",t.get(\"path\")):t.get(\"line\")&&!n&&(r=A.createElement(\"small\",null,\"on line \",t.get(\"line\"))),A.createElement(\"div\",{className:\"error-wrapper\"},t?A.createElement(\"div\",null,A.createElement(\"h4\",null,Vt(t.get(\"source\"))+\" \"+t.get(\"level\"),\" \",r),A.createElement(\"span\",{className:\"message\"},t.get(\"message\")),A.createElement(\"div\",{className:\"error-line\"},n?A.createElement(\"a\",{onClick:m()(n).call(n,null,t.get(\"line\"))},\"Jump to line \",t.get(\"line\")):null)):null)};function Vt(e){var t;return j()(t=(e||\"\").split(\" \")).call(t,(e=>e[0].toUpperCase()+b()(e).call(e,1))).join(\" \")}Ut.defaultProps={jumpToLine:null};class Wt extends A.Component{constructor(){super(...arguments),le()(this,\"onChangeWrapper\",(e=>this.props.onChange(e.target.value)))}componentDidMount(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}UNSAFE_componentWillReceiveProps(e){var t;e.contentTypes&&e.contentTypes.size&&(Re()(t=e.contentTypes).call(t,e.value)||e.onChange(e.contentTypes.first()))}render(){let{ariaControls:e,ariaLabel:t,className:n,contentTypes:r,controlId:o,value:s}=this.props;return r&&r.size?A.createElement(\"div\",{className:\"content-type-wrapper \"+(n||\"\")},A.createElement(\"select\",{\"aria-controls\":e,\"aria-label\":t,className:\"content-type\",id:o,onChange:this.onChangeWrapper,value:s||\"\"},j()(r).call(r,(e=>A.createElement(\"option\",{key:e,value:e},e))).toArray())):null}}le()(Wt,\"defaultProps\",{onChange:()=>{},value:null,contentTypes:(0,P.fromJS)([\"application/json\"])});var Jt=n(23101),Kt=n.n(Jt),Ht=n(81607),Gt=n.n(Ht);function Zt(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return Gt()(e=a()(n).call(n,(e=>!!e)).join(\" \")).call(e)}class Yt extends A.Component{render(){let{fullscreen:e,full:t,...n}=this.props;if(e)return A.createElement(\"section\",n);let r=\"swagger-container\"+(t?\"-full\":\"\");return A.createElement(\"section\",Kt()({},n,{className:Zt(n.className,r)}))}}const Xt={mobile:\"\",tablet:\"-tablet\",desktop:\"-desktop\",large:\"-hd\"};class Qt extends A.Component{render(){const{hide:e,keepContents:t,mobile:n,tablet:r,desktop:o,large:s,...i}=this.props;if(e&&!t)return A.createElement(\"span\",null);let a=[];for(let e in Xt){if(!Object.prototype.hasOwnProperty.call(Xt,e))continue;let t=Xt[e];if(e in this.props){let n=this.props[e];if(n<1){a.push(\"none\"+t);continue}a.push(\"block\"+t),a.push(\"col-\"+n+t)}}e&&a.push(\"hidden\");let l=Zt(i.className,...a);return A.createElement(\"section\",Kt()({},i,{className:l}))}}class en extends A.Component{render(){return A.createElement(\"div\",Kt()({},this.props,{className:Zt(this.props.className,\"wrapper\")}))}}class tn extends A.Component{render(){return A.createElement(\"button\",Kt()({},this.props,{className:Zt(this.props.className,\"button\")}))}}le()(tn,\"defaultProps\",{className:\"\"});const nn=e=>A.createElement(\"textarea\",e),rn=e=>A.createElement(\"input\",e);class on extends A.Component{constructor(e,t){let n;super(e,t),le()(this,\"onChange\",(e=>{let t,{onChange:n,multiple:r}=this.props,o=b()([]).call(e.target.options);var s;r?t=j()(s=a()(o).call(o,(function(e){return e.selected}))).call(s,(function(e){return e.value})):t=e.target.value;this.setState({value:t}),n&&n(t)})),n=e.value?e.value:e.multiple?[\"\"]:\"\",this.state={value:n}}UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){var e,t;let{allowedValues:n,multiple:r,allowEmptyValue:o,disabled:s}=this.props,i=(null===(e=this.state.value)||void 0===e||null===(t=e.toJS)||void 0===t?void 0:t.call(e))||this.state.value;return A.createElement(\"select\",{className:this.props.className,multiple:r,value:i,onChange:this.onChange,disabled:s},o?A.createElement(\"option\",{value:\"\"},\"--\"):null,j()(n).call(n,(function(e,t){return A.createElement(\"option\",{key:t,value:String(e)},String(e))})))}}le()(on,\"defaultProps\",{multiple:!1,allowEmptyValue:!0});class sn extends A.Component{render(){return A.createElement(\"a\",Kt()({},this.props,{rel:\"noopener noreferrer\",className:Zt(this.props.className,\"link\")}))}}const an=e=>{let{children:t}=e;return A.createElement(\"div\",{className:\"no-margin\"},\" \",t,\" \")};class ln extends A.Component{renderNotAnimated(){return this.props.isOpened?A.createElement(an,null,this.props.children):A.createElement(\"noscript\",null)}render(){let{animated:e,isOpened:t,children:n}=this.props;return e?(n=t?n:null,A.createElement(an,null,n)):this.renderNotAnimated()}}le()(ln,\"defaultProps\",{isOpened:!1,animated:!1});class cn extends A.Component{constructor(){var e;super(...arguments),this.setTagShown=m()(e=this._setTagShown).call(e,this)}_setTagShown(e,t){this.props.layoutActions.show(e,t)}showOp(e,t){let{layoutActions:n}=this.props;n.show(e,t)}render(){let{specSelectors:e,layoutSelectors:t,layoutActions:n,getComponent:r}=this.props,o=e.taggedOperations();const s=r(\"Collapse\");return A.createElement(\"div\",null,A.createElement(\"h4\",{className:\"overview-title\"},\"Overview\"),j()(o).call(o,((e,r)=>{let o=e.get(\"operations\"),i=[\"overview-tags\",r],a=t.isShown(i,!0);return A.createElement(\"div\",{key:\"overview-\"+r},A.createElement(\"h4\",{onClick:()=>n.show(i,!a),className:\"link overview-tag\"},\" \",a?\"-\":\"+\",r),A.createElement(s,{isOpened:a,animated:!0},j()(o).call(o,(e=>{let{path:r,method:o,id:s}=e.toObject(),i=\"operations\",a=s,l=t.isShown([i,a]);return A.createElement(un,{key:s,path:r,method:o,id:r+\"-\"+o,shown:l,showOpId:a,showOpIdPrefix:i,href:`#operation-${a}`,onClick:n.show})})).toArray()))})).toArray(),o.size<1&&A.createElement(\"h3\",null,\" No operations defined in spec! \"))}}class un extends A.Component{constructor(e){var t;super(e),this.onClick=m()(t=this._onClick).call(t,this)}_onClick(){let{showOpId:e,showOpIdPrefix:t,onClick:n,shown:r}=this.props;n([t,e],!r)}render(){let{id:e,method:t,shown:n,href:r}=this.props;return A.createElement(sn,{href:r,onClick:this.onClick,className:\"block opblock-link \"+(n?\"shown\":\"\")},A.createElement(\"div\",null,A.createElement(\"small\",{className:`bold-label-${t}`},t.toUpperCase()),A.createElement(\"span\",{className:\"bold-label\"},e)))}}class pn extends A.Component{componentDidMount(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}render(){const{value:e,defaultValue:t,initialValue:n,...r}=this.props;return A.createElement(\"input\",Kt()({},r,{ref:e=>this.inputRef=e}))}}class hn extends A.Component{render(){const{host:e,basePath:t}=this.props;return A.createElement(\"pre\",{className:\"base-url\"},\"[ Base URL: \",e,t,\" ]\")}}class fn extends A.PureComponent{render(){const{url:e,getComponent:t}=this.props,n=t(\"Link\");return A.createElement(n,{target:\"_blank\",href:(0,L.Nm)(e)},A.createElement(\"span\",{className:\"url\"},\" \",e))}}class dn extends A.Component{render(){const{info:e,url:t,host:n,basePath:r,getComponent:o,externalDocs:s,selectedServer:i,url:a}=this.props,l=e.get(\"version\"),c=e.get(\"description\"),u=e.get(\"title\"),p=(0,Ve.mn)(e.get(\"termsOfService\"),a,{selectedServer:i}),h=e.get(\"contact\"),f=e.get(\"license\"),d=s&&s.get(\"url\"),m=(0,Ve.mn)(d,a,{selectedServer:i}),g=s&&s.get(\"description\"),y=o(\"Markdown\",!0),v=o(\"Link\"),b=o(\"VersionStamp\"),w=o(\"InfoUrl\"),E=o(\"InfoBasePath\"),x=o(\"License\"),S=o(\"Contact\");return A.createElement(\"div\",{className:\"info\"},A.createElement(\"hgroup\",{className:\"main\"},A.createElement(\"h2\",{className:\"title\"},u,l&&A.createElement(b,{version:l})),n||r?A.createElement(E,{host:n,basePath:r}):null,t&&A.createElement(w,{getComponent:o,url:t})),A.createElement(\"div\",{className:\"description\"},A.createElement(y,{source:c})),p&&A.createElement(\"div\",{className:\"info__tos\"},A.createElement(v,{target:\"_blank\",href:(0,L.Nm)(p)},\"Terms of service\")),(null==h?void 0:h.size)>0&&A.createElement(S,{getComponent:o,data:h,selectedServer:i,url:t}),(null==f?void 0:f.size)>0&&A.createElement(x,{getComponent:o,license:f,selectedServer:i,url:t}),m?A.createElement(v,{className:\"info__extdocs\",target:\"_blank\",href:(0,L.Nm)(m)},g||m):null)}}const mn=dn;class gn extends A.Component{render(){const{specSelectors:e,getComponent:t,oas3Selectors:n}=this.props,r=e.info(),o=e.url(),s=e.basePath(),i=e.host(),a=e.externalDocs(),l=n.selectedServer(),c=t(\"info\");return A.createElement(\"div\",null,r&&r.count()?A.createElement(c,{info:r,url:o,host:i,basePath:s,externalDocs:a,getComponent:t,selectedServer:l}):null)}}class yn extends A.Component{render(){const{data:e,getComponent:t,selectedServer:n,url:r}=this.props,o=e.get(\"name\",\"the developer\"),s=(0,Ve.mn)(e.get(\"url\"),r,{selectedServer:n}),i=e.get(\"email\"),a=t(\"Link\");return A.createElement(\"div\",{className:\"info__contact\"},s&&A.createElement(\"div\",null,A.createElement(a,{href:(0,L.Nm)(s),target:\"_blank\"},o,\" - Website\")),i&&A.createElement(a,{href:(0,L.Nm)(`mailto:${i}`)},s?`Send email to ${o}`:`Contact ${o}`))}}const vn=yn;class bn extends A.Component{render(){const{license:e,getComponent:t,selectedServer:n,url:r}=this.props,o=e.get(\"name\",\"License\"),s=(0,Ve.mn)(e.get(\"url\"),r,{selectedServer:n}),i=t(\"Link\");return A.createElement(\"div\",{className:\"info__license\"},s?A.createElement(\"div\",{className:\"info__license__url\"},A.createElement(i,{target:\"_blank\",href:(0,L.Nm)(s)},o)):A.createElement(\"span\",null,o))}}const wn=bn;class En extends A.Component{render(){return null}}class xn extends A.Component{render(){return A.createElement(\"div\",{className:\"view-line-link copy-to-clipboard\",title:\"Copy to clipboard\"},A.createElement(ft.CopyToClipboard,{text:this.props.textToCopy},A.createElement(\"svg\",{width:\"15\",height:\"16\"},A.createElement(\"use\",{href:\"#copy\",xlinkHref:\"#copy\"}))))}}class Sn extends A.Component{render(){return A.createElement(\"div\",{className:\"footer\"})}}class _n extends A.Component{constructor(){super(...arguments),le()(this,\"onFilterChange\",(e=>{const{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)}))}render(){const{specSelectors:e,layoutSelectors:t,getComponent:n}=this.props,r=n(\"Col\"),o=\"loading\"===e.loadingStatus(),s=\"failed\"===e.loadingStatus(),i=t.currentFilter(),a=[\"operation-filter-input\"];return s&&a.push(\"failed\"),o&&a.push(\"loading\"),A.createElement(\"div\",null,null===i||!1===i||\"false\"===i?null:A.createElement(\"div\",{className:\"filter-container\"},A.createElement(r,{className:\"filter wrapper\",mobile:12},A.createElement(\"input\",{className:a.join(\" \"),placeholder:\"Filter by tag\",type:\"text\",onChange:this.onFilterChange,value:!0===i||\"true\"===i?\"\":i,disabled:o}))))}}const jn=Function.prototype;class On extends A.PureComponent{constructor(e,t){super(e,t),le()(this,\"updateValues\",(e=>{let{param:t,isExecute:n,consumesValue:r=\"\"}=e,o=/xml/i.test(r),s=/json/i.test(r),i=o?t.get(\"value_xml\"):t.get(\"value\");if(void 0!==i){let e=!i&&s?\"{}\":i;this.setState({value:e}),this.onChange(e,{isXml:o,isEditBox:n})}else o?this.onChange(this.sample(\"xml\"),{isXml:o,isEditBox:n}):this.onChange(this.sample(),{isEditBox:n})})),le()(this,\"sample\",(e=>{let{param:t,fn:n}=this.props,r=n.inferSchema(t.toJS());return n.getSampleSchema(r,e,{includeWriteOnly:!0})})),le()(this,\"onChange\",((e,t)=>{let{isEditBox:n,isXml:r}=t;this.setState({value:e,isEditBox:n}),this._onChange(e,r)})),le()(this,\"_onChange\",((e,t)=>{(this.props.onChange||jn)(e,t)})),le()(this,\"handleOnChange\",(e=>{const{consumesValue:t}=this.props,n=/xml/i.test(t),r=e.target.value;this.onChange(r,{isXml:n,isEditBox:this.state.isEditBox})})),le()(this,\"toggleIsEditBox\",(()=>this.setState((e=>({isEditBox:!e.isEditBox}))))),this.state={isEditBox:!1,value:\"\"}}componentDidMount(){this.updateValues.call(this,this.props)}UNSAFE_componentWillReceiveProps(e){this.updateValues.call(this,e)}render(){let{onChangeConsumes:e,param:t,isExecute:n,specSelectors:r,pathMethod:o,getConfigs:s,getComponent:i}=this.props;const a=i(\"Button\"),l=i(\"TextArea\"),c=i(\"highlightCode\"),u=i(\"contentType\");let p=(r?r.parameterWithMetaByIdentity(o,t):t).get(\"errors\",(0,P.List)()),h=r.contentTypeValues(o).get(\"requestContentType\"),f=this.props.consumes&&this.props.consumes.size?this.props.consumes:On.defaultProp.consumes,{value:d,isEditBox:m}=this.state,g=null;return(0,bt.O)(d)&&(g=\"json\"),A.createElement(\"div\",{className:\"body-param\",\"data-param-name\":t.get(\"name\"),\"data-param-in\":t.get(\"in\")},m&&n?A.createElement(l,{className:\"body-param__text\"+(p.count()?\" invalid\":\"\"),value:d,onChange:this.handleOnChange}):d&&A.createElement(c,{className:\"body-param__example\",language:g,getConfigs:s,value:d}),A.createElement(\"div\",{className:\"body-param-options\"},n?A.createElement(\"div\",{className:\"body-param-edit\"},A.createElement(a,{className:m?\"btn cancel body-param__example-edit\":\"btn edit body-param__example-edit\",onClick:this.toggleIsEditBox},m?\"Cancel\":\"Edit\")):null,A.createElement(\"label\",{htmlFor:\"\"},A.createElement(\"span\",null,\"Parameter content type\"),A.createElement(u,{value:h,contentTypes:f,onChange:e,className:\"body-param-content-type\",ariaLabel:\"Parameter content type\"}))))}}le()(On,\"defaultProp\",{consumes:(0,P.fromJS)([\"application/json\"]),param:(0,P.fromJS)({}),onChange:jn,onChangeConsumes:jn});var kn=n(92135);class An extends A.Component{render(){let{request:e,getConfigs:t}=this.props,n=(0,kn.requestSnippetGenerator_curl_bash)(e);const r=t(),o=lt()(r,\"syntaxHighlight.activated\")?A.createElement(it.d3,{language:\"bash\",className:\"curl microlight\",style:(0,it.C2)(lt()(r,\"syntaxHighlight.theme\"))},n):A.createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:n});return A.createElement(\"div\",{className:\"curl-command\"},A.createElement(\"h4\",null,\"Curl\"),A.createElement(\"div\",{className:\"copy-to-clipboard\"},A.createElement(ft.CopyToClipboard,{text:n},A.createElement(\"button\",null))),A.createElement(\"div\",null,o))}}class Cn extends A.Component{constructor(){super(...arguments),le()(this,\"onChange\",(e=>{this.setScheme(e.target.value)})),le()(this,\"setScheme\",(e=>{let{path:t,method:n,specActions:r}=this.props;r.setScheme(e,t,n)}))}UNSAFE_componentWillMount(){let{schemes:e}=this.props;this.setScheme(e.first())}UNSAFE_componentWillReceiveProps(e){var t;this.props.currentScheme&&Re()(t=e.schemes).call(t,this.props.currentScheme)||this.setScheme(e.schemes.first())}render(){var e;let{schemes:t,currentScheme:n}=this.props;return A.createElement(\"label\",{htmlFor:\"schemes\"},A.createElement(\"span\",{className:\"schemes-title\"},\"Schemes\"),A.createElement(\"select\",{onChange:this.onChange,value:n},j()(e=t.valueSeq()).call(e,(e=>A.createElement(\"option\",{value:e,key:e},e))).toArray()))}}class Pn extends A.Component{render(){const{specActions:e,specSelectors:t,getComponent:n}=this.props,r=t.operationScheme(),o=t.schemes(),s=n(\"schemes\");return o&&o.size?A.createElement(s,{currentScheme:r,schemes:o,specActions:e}):null}}class Nn extends A.Component{constructor(e,t){super(e,t),le()(this,\"toggleCollapsed\",(()=>{this.props.onToggle&&this.props.onToggle(this.props.modelName,!this.state.expanded),this.setState({expanded:!this.state.expanded})})),le()(this,\"onLoad\",(e=>{if(e&&this.props.layoutSelectors){const t=this.props.layoutSelectors.getScrollToKey();N().is(t,this.props.specPath)&&this.toggleCollapsed(),this.props.layoutActions.readyToScroll(this.props.specPath,e.parentElement)}}));let{expanded:n,collapsedContent:r}=this.props;this.state={expanded:n,collapsedContent:r||Nn.defaultProps.collapsedContent}}componentDidMount(){const{hideSelfOnExpand:e,expanded:t,modelName:n}=this.props;e&&t&&this.props.onToggle(n,t)}UNSAFE_componentWillReceiveProps(e){this.props.expanded!==e.expanded&&this.setState({expanded:e.expanded})}render(){const{title:e,classes:t}=this.props;return this.state.expanded&&this.props.hideSelfOnExpand?A.createElement(\"span\",{className:t||\"\"},this.props.children):A.createElement(\"span\",{className:t||\"\",ref:this.onLoad},A.createElement(\"button\",{\"aria-expanded\":this.state.expanded,className:\"model-box-control\",onClick:this.toggleCollapsed},e&&A.createElement(\"span\",{className:\"pointer\"},e),A.createElement(\"span\",{className:\"model-toggle\"+(this.state.expanded?\"\":\" collapsed\")}),!this.state.expanded&&A.createElement(\"span\",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}le()(Nn,\"defaultProps\",{collapsedContent:\"{...}\",expanded:!1,title:null,onToggle:()=>{},hideSelfOnExpand:!1,specPath:N().List([])});var In=n(92282),Tn=n.n(In);class Rn extends A.Component{constructor(e,t){super(e,t),le()(this,\"activeTab\",(e=>{let{target:{dataset:{name:t}}}=e;this.setState({activeTab:t})}));let{getConfigs:n,isExecute:r}=this.props,{defaultModelRendering:o}=n(),s=o;\"example\"!==o&&\"model\"!==o&&(s=\"example\"),r&&(s=\"example\"),this.state={activeTab:s}}UNSAFE_componentWillReceiveProps(e){e.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:\"example\"})}render(){let{getComponent:e,specSelectors:t,schema:n,example:r,isExecute:o,getConfigs:s,specPath:i,includeReadOnly:a,includeWriteOnly:l}=this.props,{defaultModelExpandDepth:c}=s();const u=e(\"ModelWrapper\"),p=e(\"highlightCode\"),h=Tn()(5).toString(\"base64\"),f=Tn()(5).toString(\"base64\"),d=Tn()(5).toString(\"base64\"),m=Tn()(5).toString(\"base64\");let g=t.isOAS3();return A.createElement(\"div\",{className:\"model-example\"},A.createElement(\"ul\",{className:\"tab\",role:\"tablist\"},A.createElement(\"li\",{className:st()(\"tabitem\",{active:\"example\"===this.state.activeTab}),role:\"presentation\"},A.createElement(\"button\",{\"aria-controls\":f,\"aria-selected\":\"example\"===this.state.activeTab,className:\"tablinks\",\"data-name\":\"example\",id:h,onClick:this.activeTab,role:\"tab\"},o?\"Edit Value\":\"Example Value\")),n&&A.createElement(\"li\",{className:st()(\"tabitem\",{active:\"model\"===this.state.activeTab}),role:\"presentation\"},A.createElement(\"button\",{\"aria-controls\":m,\"aria-selected\":\"model\"===this.state.activeTab,className:st()(\"tablinks\",{inactive:o}),\"data-name\":\"model\",id:d,onClick:this.activeTab,role:\"tab\"},g?\"Schema\":\"Model\"))),\"example\"===this.state.activeTab&&A.createElement(\"div\",{\"aria-hidden\":\"example\"!==this.state.activeTab,\"aria-labelledby\":h,\"data-name\":\"examplePanel\",id:f,role:\"tabpanel\",tabIndex:\"0\"},r||A.createElement(p,{value:\"(no example available)\",getConfigs:s})),\"model\"===this.state.activeTab&&A.createElement(\"div\",{\"aria-hidden\":\"example\"===this.state.activeTab,\"aria-labelledby\":d,\"data-name\":\"modelPanel\",id:m,role:\"tabpanel\",tabIndex:\"0\"},A.createElement(u,{schema:n,getComponent:e,getConfigs:s,specSelectors:t,expandDepth:c,specPath:i,includeReadOnly:a,includeWriteOnly:l})))}}class Mn extends A.Component{constructor(){super(...arguments),le()(this,\"onToggle\",((e,t)=>{this.props.layoutActions&&this.props.layoutActions.show(this.props.fullPath,t)}))}render(){let{getComponent:e,getConfigs:t}=this.props;const n=e(\"Model\");let r;return this.props.layoutSelectors&&(r=this.props.layoutSelectors.isShown(this.props.fullPath)),A.createElement(\"div\",{className:\"model-box\"},A.createElement(n,Kt()({},this.props,{getConfigs:t,expanded:r,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}var Dn=n(53795);class Fn extends A.Component{constructor(){super(...arguments),le()(this,\"getSchemaBasePath\",(()=>this.props.specSelectors.isOAS3()?[\"components\",\"schemas\"]:[\"definitions\"])),le()(this,\"getCollapsedContent\",(()=>\" \")),le()(this,\"handleToggle\",((e,t)=>{const{layoutActions:n}=this.props;n.show([...this.getSchemaBasePath(),e],t),t&&this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(),e])})),le()(this,\"onLoadModels\",(e=>{e&&this.props.layoutActions.readyToScroll(this.getSchemaBasePath(),e)})),le()(this,\"onLoadModel\",(e=>{if(e){const t=e.getAttribute(\"data-name\");this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(),t],e)}}))}render(){var e;let{specSelectors:t,getComponent:n,layoutSelectors:r,layoutActions:o,getConfigs:s}=this.props,i=t.definitions(),{docExpansion:a,defaultModelsExpandDepth:l}=s();if(!i.size||l<0)return null;const c=this.getSchemaBasePath();let u=r.isShown(c,l>0&&\"none\"!==a);const p=t.isOAS3(),h=n(\"ModelWrapper\"),f=n(\"Collapse\"),d=n(\"ModelCollapse\"),m=n(\"JumpToPath\",!0);return A.createElement(\"section\",{className:u?\"models is-open\":\"models\",ref:this.onLoadModels},A.createElement(\"h4\",null,A.createElement(\"button\",{\"aria-expanded\":u,className:\"models-control\",onClick:()=>o.show(c,!u)},A.createElement(\"span\",null,p?\"Schemas\":\"Models\"),A.createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},A.createElement(\"use\",{xlinkHref:u?\"#large-arrow-up\":\"#large-arrow-down\"})))),A.createElement(f,{isOpened:u},j()(e=i.entrySeq()).call(e,(e=>{let[i]=e;const a=[...c,i],u=N().List(a),p=t.specResolvedSubtree(a),f=t.specJson().getIn(a),g=P.Map.isMap(p)?p:N().Map(),y=P.Map.isMap(f)?f:N().Map(),v=g.get(\"title\")||y.get(\"title\")||i,b=r.isShown(a,!1);b&&0===g.size&&y.size>0&&this.props.specActions.requestResolvedSubtree(a);const w=A.createElement(h,{name:i,expandDepth:l,schema:g||N().Map(),displayName:v,fullPath:a,specPath:u,getComponent:n,specSelectors:t,getConfigs:s,layoutSelectors:r,layoutActions:o,includeReadOnly:!0,includeWriteOnly:!0}),E=A.createElement(\"span\",{className:\"model-box\"},A.createElement(\"span\",{className:\"model model-title\"},v));return A.createElement(\"div\",{id:`model-${i}`,className:\"model-container\",key:`models-section-${i}`,\"data-name\":i,ref:this.onLoadModel},A.createElement(\"span\",{className:\"models-jump-to-path\"},A.createElement(m,{specPath:u})),A.createElement(d,{classes:\"model-box\",collapsedContent:this.getCollapsedContent(i),onToggle:this.handleToggle,title:E,displayName:v,modelName:i,specPath:u,layoutSelectors:r,layoutActions:o,hideSelfOnExpand:!0,expanded:l>0&&b},w))})).toArray()))}}const Ln=e=>{let{value:t,getComponent:n}=e,r=n(\"ModelCollapse\"),o=A.createElement(\"span\",null,\"Array [ \",t.count(),\" ]\");return A.createElement(\"span\",{className:\"prop-enum\"},\"Enum:\",A.createElement(\"br\",null),A.createElement(r,{collapsedContent:o},\"[ \",t.join(\", \"),\" ]\"))};class Bn extends A.Component{render(){var e,t,n,r;let{schema:o,name:s,displayName:i,isRef:l,getComponent:c,getConfigs:u,depth:h,onToggle:f,expanded:d,specPath:m,...g}=this.props,{specSelectors:y,expandDepth:v,includeReadOnly:w,includeWriteOnly:E}=g;const{isOAS3:x}=y;if(!o)return null;const{showExtensions:S}=u();let _=o.get(\"description\"),O=o.get(\"properties\"),k=o.get(\"additionalProperties\"),C=o.get(\"title\")||i||s,N=o.get(\"required\"),I=a()(o).call(o,((e,t)=>{var n;return-1!==ue()(n=[\"maxProperties\",\"minProperties\",\"nullable\",\"example\"]).call(n,t)})),T=o.get(\"deprecated\"),R=o.getIn([\"externalDocs\",\"url\"]),M=o.getIn([\"externalDocs\",\"description\"]);const D=c(\"JumpToPath\",!0),F=c(\"Markdown\",!0),B=c(\"Model\"),$=c(\"ModelCollapse\"),q=c(\"Property\"),U=c(\"Link\"),z=()=>A.createElement(\"span\",{className:\"model-jump-to-path\"},A.createElement(D,{specPath:m})),V=A.createElement(\"span\",null,A.createElement(\"span\",null,\"{\"),\"...\",A.createElement(\"span\",null,\"}\"),l?A.createElement(z,null):\"\"),W=y.isOAS3()?o.get(\"anyOf\"):null,J=y.isOAS3()?o.get(\"oneOf\"):null,K=y.isOAS3()?o.get(\"not\"):null,H=C&&A.createElement(\"span\",{className:\"model-title\"},l&&o.get(\"$$ref\")&&A.createElement(\"span\",{className:\"model-hint\"},o.get(\"$$ref\")),A.createElement(\"span\",{className:\"model-title__text\"},C));return A.createElement(\"span\",{className:\"model\"},A.createElement($,{modelName:s,title:H,onToggle:f,expanded:!!d||h<=v,collapsedContent:V},A.createElement(\"span\",{className:\"brace-open object\"},\"{\"),l?A.createElement(z,null):null,A.createElement(\"span\",{className:\"inner-object\"},A.createElement(\"table\",{className:\"model\"},A.createElement(\"tbody\",null,_?A.createElement(\"tr\",{className:\"description\"},A.createElement(\"td\",null,\"description:\"),A.createElement(\"td\",null,A.createElement(F,{source:_}))):null,R&&A.createElement(\"tr\",{className:\"external-docs\"},A.createElement(\"td\",null,\"externalDocs:\"),A.createElement(\"td\",null,A.createElement(U,{target:\"_blank\",href:(0,L.Nm)(R)},M||R))),T?A.createElement(\"tr\",{className:\"property\"},A.createElement(\"td\",null,\"deprecated:\"),A.createElement(\"td\",null,\"true\")):null,O&&O.size?j()(e=a()(t=O.entrySeq()).call(t,(e=>{let[,t]=e;return(!t.get(\"readOnly\")||w)&&(!t.get(\"writeOnly\")||E)}))).call(e,(e=>{let[t,n]=e,r=x()&&n.get(\"deprecated\"),o=P.List.isList(N)&&N.contains(t),i=[\"property-row\"];return r&&i.push(\"deprecated\"),o&&i.push(\"required\"),A.createElement(\"tr\",{key:t,className:i.join(\" \")},A.createElement(\"td\",null,t,o&&A.createElement(\"span\",{className:\"star\"},\"*\")),A.createElement(\"td\",null,A.createElement(B,Kt()({key:`object-${s}-${t}_${n}`},g,{required:o,getComponent:c,specPath:m.push(\"properties\",t),getConfigs:u,schema:n,depth:h+1}))))})).toArray():null,S?A.createElement(\"tr\",null,A.createElement(\"td\",null,\" \")):null,S?j()(n=o.entrySeq()).call(n,(e=>{let[t,n]=e;if(\"x-\"!==b()(t).call(t,0,2))return;const r=n?n.toJS?n.toJS():n:null;return A.createElement(\"tr\",{key:t,className:\"extension\"},A.createElement(\"td\",null,t),A.createElement(\"td\",null,p()(r)))})).toArray():null,k&&k.size?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"< * >:\"),A.createElement(\"td\",null,A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"additionalProperties\"),getConfigs:u,schema:k,depth:h+1})))):null,W?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"anyOf ->\"),A.createElement(\"td\",null,j()(W).call(W,((e,t)=>A.createElement(\"div\",{key:t},A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"anyOf\",t),getConfigs:u,schema:e,depth:h+1}))))))):null,J?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"oneOf ->\"),A.createElement(\"td\",null,j()(J).call(J,((e,t)=>A.createElement(\"div\",{key:t},A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"oneOf\",t),getConfigs:u,schema:e,depth:h+1}))))))):null,K?A.createElement(\"tr\",null,A.createElement(\"td\",null,\"not ->\"),A.createElement(\"td\",null,A.createElement(\"div\",null,A.createElement(B,Kt()({},g,{required:!1,getComponent:c,specPath:m.push(\"not\"),getConfigs:u,schema:K,depth:h+1}))))):null))),A.createElement(\"span\",{className:\"brace-close\"},\"}\")),I.size?j()(r=I.entrySeq()).call(r,(e=>{let[t,n]=e;return A.createElement(q,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:\"property\"})})):null)}}class $n extends A.Component{render(){var e;let{getComponent:t,getConfigs:n,schema:r,depth:o,expandDepth:s,name:i,displayName:l,specPath:c}=this.props,u=r.get(\"description\"),p=r.get(\"items\"),h=r.get(\"title\")||l||i,f=a()(r).call(r,((e,t)=>{var n;return-1===ue()(n=[\"type\",\"items\",\"description\",\"$$ref\",\"externalDocs\"]).call(n,t)})),d=r.getIn([\"externalDocs\",\"url\"]),m=r.getIn([\"externalDocs\",\"description\"]);const g=t(\"Markdown\",!0),y=t(\"ModelCollapse\"),v=t(\"Model\"),b=t(\"Property\"),w=t(\"Link\"),E=h&&A.createElement(\"span\",{className:\"model-title\"},A.createElement(\"span\",{className:\"model-title__text\"},h));return A.createElement(\"span\",{className:\"model\"},A.createElement(y,{title:E,expanded:o<=s,collapsedContent:\"[...]\"},\"[\",f.size?j()(e=f.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(b,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:\"property\"})})):null,u?A.createElement(g,{source:u}):f.size?A.createElement(\"div\",{className:\"markdown\"}):null,d&&A.createElement(\"div\",{className:\"external-docs\"},A.createElement(w,{target:\"_blank\",href:(0,L.Nm)(d)},m||d)),A.createElement(\"span\",null,A.createElement(v,Kt()({},this.props,{getConfigs:n,specPath:c.push(\"items\"),name:null,schema:p,required:!1,depth:o+1}))),\"]\"))}}const qn=\"property primitive\";class Un extends A.Component{render(){var e,t,n;let{schema:r,getComponent:o,getConfigs:s,name:i,displayName:l,depth:c,expandDepth:u}=this.props;const{showExtensions:p}=s();if(!r||!r.get)return A.createElement(\"div\",null);let h=r.get(\"type\"),f=r.get(\"format\"),d=r.get(\"xml\"),m=r.get(\"enum\"),g=r.get(\"title\")||l||i,y=r.get(\"description\"),v=(0,L.nX)(r),b=a()(r).call(r,((e,t)=>{var n;return-1===ue()(n=[\"enum\",\"type\",\"format\",\"description\",\"$$ref\",\"externalDocs\"]).call(n,t)})).filterNot(((e,t)=>v.has(t))),w=r.getIn([\"externalDocs\",\"url\"]),E=r.getIn([\"externalDocs\",\"description\"]);const x=o(\"Markdown\",!0),S=o(\"EnumModel\"),_=o(\"Property\"),O=o(\"ModelCollapse\"),k=o(\"Link\"),C=g&&A.createElement(\"span\",{className:\"model-title\"},A.createElement(\"span\",{className:\"model-title__text\"},g));return A.createElement(\"span\",{className:\"model\"},A.createElement(O,{title:C,expanded:c<=u,collapsedContent:\"[...]\",hideSelfOnExpand:u!==c},A.createElement(\"span\",{className:\"prop\"},i&&c>1&&A.createElement(\"span\",{className:\"prop-name\"},g),A.createElement(\"span\",{className:\"prop-type\"},h),f&&A.createElement(\"span\",{className:\"prop-format\"},\"($\",f,\")\"),b.size?j()(e=b.entrySeq()).call(e,(e=>{let[t,n]=e;return A.createElement(_,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:qn})})):null,p&&v.size?j()(t=v.entrySeq()).call(t,(e=>{let[t,n]=e;return A.createElement(_,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:qn})})):null,y?A.createElement(x,{source:y}):null,w&&A.createElement(\"div\",{className:\"external-docs\"},A.createElement(k,{target:\"_blank\",href:(0,L.Nm)(w)},E||w)),d&&d.size?A.createElement(\"span\",null,A.createElement(\"br\",null),A.createElement(\"span\",{className:qn},\"xml:\"),j()(n=d.entrySeq()).call(n,(e=>{let[t,n]=e;return A.createElement(\"span\",{key:`${t}-${n}`,className:qn},A.createElement(\"br\",null),\"   \",t,\": \",String(n))})).toArray()):null,m&&A.createElement(S,{value:m,getComponent:o}))))}}const zn=e=>{let{propKey:t,propVal:n,propClass:r}=e;return A.createElement(\"span\",{className:r},A.createElement(\"br\",null),t,\": \",String(n))};class Vn extends A.Component{render(){const{onTryoutClick:e,onCancelClick:t,onResetClick:n,enabled:r,hasUserEditedBody:o,isOAS3:s}=this.props,i=s&&o;return A.createElement(\"div\",{className:i?\"try-out btn-group\":\"try-out\"},r?A.createElement(\"button\",{className:\"btn try-out__btn cancel\",onClick:t},\"Cancel\"):A.createElement(\"button\",{className:\"btn try-out__btn\",onClick:e},\"Try it out \"),i&&A.createElement(\"button\",{className:\"btn try-out__btn reset\",onClick:n},\"Reset\"))}}le()(Vn,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1});class Wn extends A.PureComponent{render(){const{bypass:e,isSwagger2:t,isOAS3:n,alsoShow:r}=this.props;return e?A.createElement(\"div\",null,this.props.children):t&&n?A.createElement(\"div\",{className:\"version-pragma\"},r,A.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},A.createElement(\"div\",null,A.createElement(\"h3\",null,\"Unable to render this definition\"),A.createElement(\"p\",null,A.createElement(\"code\",null,\"swagger\"),\" and \",A.createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),A.createElement(\"p\",null,\"Supported version fields are \",A.createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",A.createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",A.createElement(\"code\",null,\"openapi: 3.0.0\"),\").\")))):t||n?A.createElement(\"div\",null,this.props.children):A.createElement(\"div\",{className:\"version-pragma\"},r,A.createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},A.createElement(\"div\",null,A.createElement(\"h3\",null,\"Unable to render this definition\"),A.createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),A.createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",A.createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",A.createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",A.createElement(\"code\",null,\"openapi: 3.0.0\"),\").\"))))}}le()(Wn,\"defaultProps\",{alsoShow:null,children:null,bypass:!1});const Jn=e=>{let{version:t}=e;return A.createElement(\"small\",null,A.createElement(\"pre\",{className:\"version\"},\" \",t,\" \"))},Kn=e=>{let{enabled:t,path:n,text:r}=e;return A.createElement(\"a\",{className:\"nostyle\",onClick:t?e=>e.preventDefault():null,href:t?`#/${n}`:null},A.createElement(\"span\",null,r))},Hn=()=>A.createElement(\"div\",null,A.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",xmlnsXlink:\"http://www.w3.org/1999/xlink\",className:\"svg-assets\"},A.createElement(\"defs\",null,A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"unlocked\"},A.createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"locked\"},A.createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"close\"},A.createElement(\"path\",{d:\"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow\"},A.createElement(\"path\",{d:\"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-down\"},A.createElement(\"path\",{d:\"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-up\"},A.createElement(\"path\",{d:\"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"jump-to\"},A.createElement(\"path\",{d:\"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"expand\"},A.createElement(\"path\",{d:\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"})),A.createElement(\"symbol\",{viewBox:\"0 0 15 16\",id:\"copy\"},A.createElement(\"g\",{transform:\"translate(2, -1)\"},A.createElement(\"path\",{fill:\"#ffffff\",fillRule:\"evenodd\",d:\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"}))))));var Gn=n(4599);class Zn extends A.Component{render(){const{errSelectors:e,specSelectors:t,getComponent:n}=this.props,r=n(\"SvgAssets\"),o=n(\"InfoContainer\",!0),s=n(\"VersionPragmaFilter\"),i=n(\"operations\",!0),a=n(\"Models\",!0),l=n(\"Webhooks\",!0),c=n(\"Row\"),u=n(\"Col\"),p=n(\"errors\",!0),h=n(\"ServersContainer\",!0),f=n(\"SchemesContainer\",!0),d=n(\"AuthorizeBtnContainer\",!0),m=n(\"FilterContainer\",!0),g=t.isSwagger2(),y=t.isOAS3(),v=t.isOAS31(),b=!t.specStr(),w=t.loadingStatus();let E=null;if(\"loading\"===w&&(E=A.createElement(\"div\",{className:\"info\"},A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"div\",{className:\"loading\"})))),\"failed\"===w&&(E=A.createElement(\"div\",{className:\"info\"},A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"h4\",{className:\"title\"},\"Failed to load API definition.\"),A.createElement(p,null)))),\"failedConfig\"===w){const t=e.lastError(),n=t?t.get(\"message\"):\"\";E=A.createElement(\"div\",{className:\"info failed-config\"},A.createElement(\"div\",{className:\"loading-container\"},A.createElement(\"h4\",{className:\"title\"},\"Failed to load remote configuration.\"),A.createElement(\"p\",null,n)))}if(!E&&b&&(E=A.createElement(\"h4\",null,\"No API definition provided.\")),E)return A.createElement(\"div\",{className:\"swagger-ui\"},A.createElement(\"div\",{className:\"loading-container\"},E));const x=t.servers(),S=t.schemes(),_=x&&x.size,j=S&&S.size,O=!!t.securityDefinitions();return A.createElement(\"div\",{className:\"swagger-ui\"},A.createElement(r,null),A.createElement(s,{isSwagger2:g,isOAS3:y,alsoShow:A.createElement(p,null)},A.createElement(p,null),A.createElement(c,{className:\"information-container\"},A.createElement(u,{mobile:12},A.createElement(o,null))),_||j||O?A.createElement(\"div\",{className:\"scheme-container\"},A.createElement(u,{className:\"schemes wrapper\",mobile:12},_?A.createElement(h,null):null,j?A.createElement(f,null):null,O?A.createElement(d,null):null)):null,A.createElement(m,null),A.createElement(c,null,A.createElement(u,{mobile:12,desktop:12},A.createElement(i,null))),v&&A.createElement(c,{className:\"webhooks-container\"},A.createElement(u,{mobile:12,desktop:12},A.createElement(l,null))),A.createElement(c,null,A.createElement(u,{mobile:12,desktop:12},A.createElement(a,null)))))}}var Yn=n(775),Xn=n.n(Yn);const Qn={value:\"\",onChange:()=>{},schema:{},keyName:\"\",required:!1,errors:(0,P.List)()};class er extends A.Component{componentDidMount(){const{dispatchInitialValue:e,value:t,onChange:n}=this.props;e?n(t):!1===e&&n(\"\")}render(){let{schema:e,errors:t,value:n,onChange:r,getComponent:o,fn:s,disabled:i}=this.props;const a=e&&e.get?e.get(\"format\"):null,l=e&&e.get?e.get(\"type\"):null;let c=e=>o(e,!1,{failSilently:!0}),u=l?c(a?`JsonSchema_${l}_${a}`:`JsonSchema_${l}`):o(\"JsonSchema_string\");return u||(u=o(\"JsonSchema_string\")),A.createElement(u,Kt()({},this.props,{errors:t,fn:s,getComponent:o,value:n,onChange:r,schema:e,disabled:i}))}}le()(er,\"defaultProps\",Qn);class tr extends A.Component{constructor(){super(...arguments),le()(this,\"onChange\",(e=>{const t=this.props.schema&&\"file\"===this.props.schema.get(\"type\")?e.target.files[0]:e.target.value;this.props.onChange(t,this.props.keyName)})),le()(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,schema:n,errors:r,required:o,description:s,disabled:i}=this.props;const a=n&&n.get?n.get(\"enum\"):null,l=n&&n.get?n.get(\"format\"):null,c=n&&n.get?n.get(\"type\"):null,u=n&&n.get?n.get(\"in\"):null;if(t||(t=\"\"),r=r.toJS?r.toJS():[],a){const n=e(\"Select\");return A.createElement(n,{className:r.length?\"invalid\":\"\",title:r.length?r:\"\",allowedValues:[...a],value:t,allowEmptyValue:!o,disabled:i,onChange:this.onEnumChange})}const p=i||u&&\"formData\"===u&&!(\"FormData\"in window),h=e(\"Input\");return c&&\"file\"===c?A.createElement(h,{type:\"file\",className:r.length?\"invalid\":\"\",title:r.length?r:\"\",onChange:this.onChange,disabled:p}):A.createElement(Xn(),{type:l&&\"password\"===l?\"password\":\"text\",className:r.length?\"invalid\":\"\",title:r.length?r:\"\",value:t,minLength:0,debounceTimeout:350,placeholder:s,onChange:this.onChange,disabled:p})}}le()(tr,\"defaultProps\",Qn);class nr extends A.PureComponent{constructor(e,t){super(e,t),le()(this,\"onChange\",(()=>{this.props.onChange(this.state.value)})),le()(this,\"onItemChange\",((e,t)=>{this.setState((n=>{let{value:r}=n;return{value:r.set(t,e)}}),this.onChange)})),le()(this,\"removeItem\",(e=>{this.setState((t=>{let{value:n}=t;return{value:n.delete(e)}}),this.onChange)})),le()(this,\"addItem\",(()=>{const{fn:e}=this.props;let t=lr(this.state.value);this.setState((()=>({value:t.push(e.getSampleSchema(this.state.schema.get(\"items\"),!1,{includeWriteOnly:!0}))})),this.onChange)})),le()(this,\"onEnumChange\",(e=>{this.setState((()=>({value:e})),this.onChange)})),this.state={value:lr(e.value),schema:e.schema}}UNSAFE_componentWillReceiveProps(e){const t=lr(e.value);t!==this.state.value&&this.setState({value:t}),e.schema!==this.state.schema&&this.setState({schema:e.schema})}render(){var e;let{getComponent:t,required:n,schema:r,errors:o,fn:s,disabled:i}=this.props;o=o.toJS?o.toJS():E()(o)?o:[];const l=a()(o).call(o,(e=>\"string\"==typeof e)),c=j()(e=a()(o).call(o,(e=>void 0!==e.needRemove))).call(e,(e=>e.error)),u=this.state.value,p=!!(u&&u.count&&u.count()>0),h=r.getIn([\"items\",\"enum\"]),f=r.getIn([\"items\",\"type\"]),d=r.getIn([\"items\",\"format\"]),m=r.get(\"items\");let g,y=!1,v=\"file\"===f||\"string\"===f&&\"binary\"===d;if(f&&d?g=t(`JsonSchema_${f}_${d}`):\"boolean\"!==f&&\"array\"!==f&&\"object\"!==f||(g=t(`JsonSchema_${f}`)),g||v||(y=!0),h){const e=t(\"Select\");return A.createElement(e,{className:o.length?\"invalid\":\"\",title:o.length?o:\"\",multiple:!0,value:u,disabled:i,allowedValues:h,allowEmptyValue:!n,onChange:this.onEnumChange})}const b=t(\"Button\");return A.createElement(\"div\",{className:\"json-schema-array\"},p?j()(u).call(u,((e,n)=>{var r;const l=(0,P.fromJS)([...j()(r=a()(o).call(o,(e=>e.index===n))).call(r,(e=>e.error))]);return A.createElement(\"div\",{key:n,className:\"json-schema-form-item\"},v?A.createElement(or,{value:e,onChange:e=>this.onItemChange(e,n),disabled:i,errors:l,getComponent:t}):y?A.createElement(rr,{value:e,onChange:e=>this.onItemChange(e,n),disabled:i,errors:l}):A.createElement(g,Kt()({},this.props,{value:e,onChange:e=>this.onItemChange(e,n),disabled:i,errors:l,schema:m,getComponent:t,fn:s})),i?null:A.createElement(b,{className:`btn btn-sm json-schema-form-item-remove ${c.length?\"invalid\":null}`,title:c.length?c:\"\",onClick:()=>this.removeItem(n)},\" - \"))})):null,i?null:A.createElement(b,{className:`btn btn-sm json-schema-form-item-add ${l.length?\"invalid\":null}`,title:l.length?l:\"\",onClick:this.addItem},\"Add \",f?`${f} `:\"\",\"item\"))}}le()(nr,\"defaultProps\",Qn);class rr extends A.Component{constructor(){super(...arguments),le()(this,\"onChange\",(e=>{const t=e.target.value;this.props.onChange(t,this.props.keyName)}))}render(){let{value:e,errors:t,description:n,disabled:r}=this.props;return e||(e=\"\"),t=t.toJS?t.toJS():[],A.createElement(Xn(),{type:\"text\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",value:e,minLength:0,debounceTimeout:350,placeholder:n,onChange:this.onChange,disabled:r})}}le()(rr,\"defaultProps\",Qn);class or extends A.Component{constructor(){super(...arguments),le()(this,\"onFileChange\",(e=>{const t=e.target.files[0];this.props.onChange(t,this.props.keyName)}))}render(){let{getComponent:e,errors:t,disabled:n}=this.props;const r=e(\"Input\"),o=n||!(\"FormData\"in window);return A.createElement(r,{type:\"file\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",onChange:this.onFileChange,disabled:o})}}le()(or,\"defaultProps\",Qn);class sr extends A.Component{constructor(){super(...arguments),le()(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,errors:n,schema:r,required:o,disabled:s}=this.props;n=n.toJS?n.toJS():[];let i=r&&r.get?r.get(\"enum\"):null,a=!i||!o,l=!i&&[\"true\",\"false\"];const c=e(\"Select\");return A.createElement(c,{className:n.length?\"invalid\":\"\",title:n.length?n:\"\",value:String(t),disabled:s,allowedValues:i?[...i]:l,allowEmptyValue:a,onChange:this.onEnumChange})}}le()(sr,\"defaultProps\",Qn);const ir=e=>j()(e).call(e,(e=>{const t=void 0!==e.propKey?e.propKey:e.index;let n=\"string\"==typeof e?e:\"string\"==typeof e.error?e.error:null;if(!t&&n)return n;let r=e.error,o=`/${e.propKey}`;for(;\"object\"==typeof r;){const e=void 0!==r.propKey?r.propKey:r.index;if(void 0===e)break;if(o+=`/${e}`,!r.error)break;r=r.error}return`${o}: ${r}`}));class ar extends A.PureComponent{constructor(){super(),le()(this,\"onChange\",(e=>{this.props.onChange(e)})),le()(this,\"handleOnChange\",(e=>{const t=e.target.value;this.onChange(t)}))}render(){let{getComponent:e,value:t,errors:n,disabled:r}=this.props;const o=e(\"TextArea\");return n=n.toJS?n.toJS():E()(n)?n:[],A.createElement(\"div\",null,A.createElement(o,{className:st()({invalid:n.length}),title:n.length?ir(n).join(\", \"):\"\",value:(0,L.Pz)(t),disabled:r,onChange:this.handleOnChange}))}}function lr(e){return P.List.isList(e)?e:E()(e)?(0,P.fromJS)(e):(0,P.List)()}function cr(){let n={components:{App:fe,authorizationPopup:de,authorizeBtn:me,AuthorizeBtnContainer:ge,authorizeOperationBtn:ye,auths:ve,AuthItem:be,authError:we,oauth2:Fe,apiKeyAuth:Ee,basicAuth:xe,clear:Le,liveResponse:qe,InitializedInput:pn,info:mn,InfoContainer:gn,InfoUrl:fn,InfoBasePath:hn,Contact:vn,License:wn,JumpToPath:En,CopyToClipboardBtn:xn,onlineValidatorBadge:Ue.Z,operations:ze,operation:Je,OperationSummary:Ge,OperationSummaryMethod:Ze,OperationSummaryPath:Qe,highlightCode:mt,responses:gt,response:wt,ResponseExtension:Et,responseBody:At,parameters:Nt,parameterRow:Dt,execute:Bt,headers:$t,errors:qt,contentType:Wt,overview:cn,footer:Sn,FilterContainer:_n,ParamBody:On,curl:An,schemes:Cn,SchemesContainer:Pn,modelExample:Rn,ModelWrapper:Mn,ModelCollapse:Nn,Model:Dn.Z,Models:Fn,EnumModel:Ln,ObjectModel:Bn,ArrayModel:$n,PrimitiveModel:Un,Property:zn,TryItOutButton:Vn,Markdown:Gn.Z,BaseLayout:Zn,VersionPragmaFilter:Wn,VersionStamp:Jn,OperationExt:et,OperationExtRow:tt,ParameterExt:It,ParameterIncludeEmpty:Rt,OperationTag:We,OperationContainer:he,DeepLink:Kn,SvgAssets:Hn,Example:Se,ExamplesSelect:Oe,ExamplesSelectValueRetainer:Ae}},r={components:e},o={components:t};return[ne.default,ee.default,Y.default,H.default,K.default,W.default,J.default,G.default,n,r,X.default,o,Q.default,te.default,re.default,oe.default,se.default,Z.default,(0,ie.default)()]}le()(ar,\"defaultProps\",Qn);var ur=n(97451),pr=n(29806),hr=n(97139);function fr(){return[cr,ur.default,hr.default,pr.default]}var dr=n(45308);const{GIT_DIRTY:mr,GIT_COMMIT:gr,PACKAGE_VERSION:yr,BUILD_TIME:vr}={PACKAGE_VERSION:\"5.1.0\",GIT_COMMIT:\"gc1cc7a3\",GIT_DIRTY:!0,BUILD_TIME:\"Mon, 19 Jun 2023 09:16:15 GMT\"};function br(e){var t;F.Z.versions=F.Z.versions||{},F.Z.versions.swaggerUi={version:yr,gitRevision:gr,gitDirty:mr,buildTimestamp:vr};const n={dom_id:null,domNode:null,spec:{},url:\"\",urls:null,layout:\"BaseLayout\",docExpansion:\"list\",maxDisplayedTags:null,filter:null,validatorUrl:\"https://validator.swagger.io/validator\",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,s()(t=window.location.pathname).call(t,\"/\"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:e=>e,responseInterceptor:e=>e,showMutatedRequest:!0,defaultModelRendering:\"example\",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:\"cURL (bash)\",syntax:\"bash\"},curl_powershell:{title:\"cURL (PowerShell)\",syntax:\"powershell\"},curl_cmd:{title:\"cURL (CMD)\",syntax:\"bash\"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],queryConfigEnabled:!1,presets:[fr],plugins:[],pluginsOptions:{pluginLoadType:\"legacy\"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:\"agate\"}};let r=e.queryConfigEnabled?(0,L.UG)():{};const o=e.domNode;delete e.domNode;const i=f()({},n,e,r),l={system:{configs:i.configs},plugins:i.presets,pluginsOptions:i.pluginsOptions,state:f()({layout:{layout:i.layout,filter:a()(i)},spec:{spec:\"\",url:i.url},requestSnippets:i.requestSnippets},i.initialState)};if(i.initialState)for(var u in i.initialState)Object.prototype.hasOwnProperty.call(i.initialState,u)&&void 0===i.initialState[u]&&delete l.state[u];var h=new $(l);h.register([i.plugins,()=>({fn:i.fn,components:i.components,state:i.state})]);var d=h.getSystem();const m=e=>{let t=d.specSelectors.getLocalConfig?d.specSelectors.getLocalConfig():{},n=f()({},t,i,e||{},r);if(o&&(n.domNode=o),h.setConfigs(n),d.configsActions.loaded(),null!==e&&(!r.url&&\"object\"==typeof n.spec&&c()(n.spec).length?(d.specActions.updateUrl(\"\"),d.specActions.updateLoadingStatus(\"success\"),d.specActions.updateSpec(p()(n.spec))):d.specActions.download&&n.url&&!n.urls&&(d.specActions.updateUrl(n.url),d.specActions.download(n.url))),n.domNode)d.render(n.domNode,\"App\");else if(n.dom_id){let e=document.querySelector(n.dom_id);d.render(e,\"App\")}else null===n.dom_id||null===n.domNode||console.error(\"Skipped rendering: no `dom_id` or `domNode` was specified\");return d},g=r.config||i.configUrl;return g&&d.specActions&&d.specActions.getConfigByUrl?(d.specActions.getConfigByUrl({url:g,loadRemoteConfig:!0,requestInterceptor:i.requestInterceptor,responseInterceptor:i.responseInterceptor},m),d):m()}br.presets={apis:fr},br.plugins=dr.default;const wr=br})(),module.exports=r.default})();\n//# sourceMappingURL=swagger-ui-es-bundle.js.map"
  },
  {
    "path": "data/web/api/swagger-ui-standalone-preset.js",
    "content": "/*! For license information please see swagger-ui-standalone-preset.js.LICENSE.txt */\n!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.SwaggerUIStandalonePreset=e():t.SwaggerUIStandalonePreset=e()}(this,(()=>(()=>{var t={7967:(t,e)=>{\"use strict\";var r=/^([^\\w]*)(javascript|data|vbscript)/im,n=/&#(\\w+)(^\\w|;)?/g,i=/&(newline|tab);/gi,o=/[\\u0000-\\u001F\\u007F-\\u009F\\u2000-\\u200D\\uFEFF]/gim,u=/^.+(:|&colon;)/gim,s=[\".\",\"/\"]},9742:(t,e)=>{\"use strict\";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=s(t),u=o[0],a=o[1],c=new i(function(t,e,r){return 3*(e+r)/4-r}(0,u,a)),f=0,l=a>0?u-4:u;for(r=0;r<l;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],c[f++]=e>>16&255,c[f++]=e>>8&255,c[f++]=255&e;2===a&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,c[f++]=255&e);1===a&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,c[f++]=e>>8&255,c[f++]=255&e);return c},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],u=16383,s=0,c=n-i;s<c;s+=u)o.push(a(t,s,s+u>c?c:s+u));1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+\"==\")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+\"=\"));return o.join(\"\")};for(var r=[],n=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",u=0;u<64;++u)r[u]=o[u],n[o.charCodeAt(u)]=u;function s(t){var e=t.length;if(e%4>0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=t.indexOf(\"=\");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function a(t,e,n){for(var i,o,u=[],s=e;s<n;s+=3)i=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),u.push(r[(o=i)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return u.join(\"\")}n[\"-\".charCodeAt(0)]=62,n[\"_\".charCodeAt(0)]=63},8764:(t,e,r)=>{\"use strict\";const n=r(9742),i=r(645),o=\"function\"==typeof Symbol&&\"function\"==typeof Symbol.for?Symbol.for(\"nodejs.util.inspect.custom\"):null;e.Buffer=a,e.SlowBuffer=function(t){+t!=t&&(t=0);return a.alloc(+t)},e.INSPECT_MAX_BYTES=50;const u=2147483647;function s(t){if(t>u)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,a.prototype),e}function a(t,e,r){if(\"number\"==typeof t){if(\"string\"==typeof e)throw new TypeError('The \"string\" argument must be of type string. Received type number');return l(t)}return c(t,e,r)}function c(t,e,r){if(\"string\"==typeof t)return function(t,e){\"string\"==typeof e&&\"\"!==e||(e=\"utf8\");if(!a.isEncoding(e))throw new TypeError(\"Unknown encoding: \"+e);const r=0|M(t,e);let n=s(r);const i=n.write(t,e);i!==r&&(n=n.slice(0,i));return n}(t,e);if(ArrayBuffer.isView(t))return function(t){if($(t,Uint8Array)){const e=new Uint8Array(t);return p(e.buffer,e.byteOffset,e.byteLength)}return h(t)}(t);if(null==t)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t);if($(t,ArrayBuffer)||t&&$(t.buffer,ArrayBuffer))return p(t,e,r);if(\"undefined\"!=typeof SharedArrayBuffer&&($(t,SharedArrayBuffer)||t&&$(t.buffer,SharedArrayBuffer)))return p(t,e,r);if(\"number\"==typeof t)throw new TypeError('The \"value\" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return a.from(n,e,r);const i=function(t){if(a.isBuffer(t)){const e=0|y(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}if(void 0!==t.length)return\"number\"!=typeof t.length||X(t.length)?s(0):h(t);if(\"Buffer\"===t.type&&Array.isArray(t.data))return h(t.data)}(t);if(i)return i;if(\"undefined\"!=typeof Symbol&&null!=Symbol.toPrimitive&&\"function\"==typeof t[Symbol.toPrimitive])return a.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t)}function f(t){if(\"number\"!=typeof t)throw new TypeError('\"size\" argument must be of type number');if(t<0)throw new RangeError('The value \"'+t+'\" is invalid for option \"size\"')}function l(t){return f(t),s(t<0?0:0|y(t))}function h(t){const e=t.length<0?0:0|y(t.length),r=s(e);for(let n=0;n<e;n+=1)r[n]=255&t[n];return r}function p(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('\"offset\" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('\"length\" is outside of buffer bounds');let n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,a.prototype),n}function y(t){if(t>=u)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+u.toString(16)+\" bytes\");return 0|t}function M(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||$(t,ArrayBuffer))return t.byteLength;if(\"string\"!=typeof t)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let i=!1;for(;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return q(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r>>>1;case\"base64\":return J(t).length;default:if(i)return n?-1:q(t).length;e=(\"\"+e).toLowerCase(),i=!0}}function w(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(e>>>=0))return\"\";for(t||(t=\"utf8\");;)switch(t){case\"hex\":return A(this,e,r);case\"utf8\":case\"utf-8\":return D(this,e,r);case\"ascii\":return S(this,e,r);case\"latin1\":case\"binary\":return b(this,e,r);case\"base64\":return m(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return C(this,e,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t=(t+\"\").toLowerCase(),n=!0}}function d(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function g(t,e,r,n,i){if(0===t.length)return-1;if(\"string\"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),X(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if(\"string\"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:v(t,e,r,n,i);if(\"number\"==typeof e)return e&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):v(t,[e],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function v(t,e,r,n,i){let o,u=1,s=t.length,a=e.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(t.length<2||e.length<2)return-1;u=2,s/=2,a/=2,r/=2}function c(t,e){return 1===u?t[e]:t.readUInt16BE(e*u)}if(i){let n=-1;for(o=r;o<s;o++)if(c(t,o)===c(e,-1===n?0:o-n)){if(-1===n&&(n=o),o-n+1===a)return n*u}else-1!==n&&(o-=o-n),n=-1}else for(r+a>s&&(r=s-a),o=r;o>=0;o--){let r=!0;for(let n=0;n<a;n++)if(c(t,o+n)!==c(e,n)){r=!1;break}if(r)return o}return-1}function L(t,e,r,n){r=Number(r)||0;const i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;const o=e.length;let u;for(n>o/2&&(n=o/2),u=0;u<n;++u){const n=parseInt(e.substr(2*u,2),16);if(X(n))return u;t[r+u]=n}return u}function _(t,e,r,n){return Z(q(e,t.length-r),t,r,n)}function j(t,e,r,n){return Z(function(t){const e=[];for(let r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function N(t,e,r,n){return Z(J(e),t,r,n)}function x(t,e,r,n){return Z(function(t,e){let r,n,i;const o=[];for(let u=0;u<t.length&&!((e-=2)<0);++u)r=t.charCodeAt(u),n=r>>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function m(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function D(t,e,r){r=Math.min(t.length,r);const n=[];let i=e;for(;i<r;){const e=t[i];let o=null,u=e>239?4:e>223?3:e>191?2:1;if(i+u<=r){let r,n,s,a;switch(u){case 1:e<128&&(o=e);break;case 2:r=t[i+1],128==(192&r)&&(a=(31&e)<<6|63&r,a>127&&(o=a));break;case 3:r=t[i+1],n=t[i+2],128==(192&r)&&128==(192&n)&&(a=(15&e)<<12|(63&r)<<6|63&n,a>2047&&(a<55296||a>57343)&&(o=a));break;case 4:r=t[i+1],n=t[i+2],s=t[i+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(a=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,a>65535&&a<1114112&&(o=a))}}null===o?(o=65533,u=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=u}return function(t){const e=t.length;if(e<=I)return String.fromCharCode.apply(String,t);let r=\"\",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=I));return r}(n)}e.kMaxLength=u,a.TYPED_ARRAY_SUPPORT=function(){try{const t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),a.TYPED_ARRAY_SUPPORT||\"undefined\"==typeof console||\"function\"!=typeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(a.prototype,\"parent\",{enumerable:!0,get:function(){if(a.isBuffer(this))return this.buffer}}),Object.defineProperty(a.prototype,\"offset\",{enumerable:!0,get:function(){if(a.isBuffer(this))return this.byteOffset}}),a.poolSize=8192,a.from=function(t,e,r){return c(t,e,r)},Object.setPrototypeOf(a.prototype,Uint8Array.prototype),Object.setPrototypeOf(a,Uint8Array),a.alloc=function(t,e,r){return function(t,e,r){return f(t),t<=0?s(t):void 0!==e?\"string\"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},a.allocUnsafe=function(t){return l(t)},a.allocUnsafeSlow=function(t){return l(t)},a.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==a.prototype},a.compare=function(t,e){if($(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),$(e,Uint8Array)&&(e=a.from(e,e.offset,e.byteLength)),!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;let r=t.length,n=e.length;for(let i=0,o=Math.min(r,n);i<o;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},a.isEncoding=function(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},a.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return a.alloc(0);let r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;const n=a.allocUnsafe(e);let i=0;for(r=0;r<t.length;++r){let e=t[r];if($(e,Uint8Array))i+e.length>n.length?(a.isBuffer(e)||(e=a.from(e)),e.copy(n,i)):Uint8Array.prototype.set.call(n,e,i);else{if(!a.isBuffer(e))throw new TypeError('\"list\" argument must be an Array of Buffers');e.copy(n,i)}i+=e.length}return n},a.byteLength=M,a.prototype._isBuffer=!0,a.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(let e=0;e<t;e+=2)d(this,e,e+1);return this},a.prototype.swap32=function(){const t=this.length;if(t%4!=0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(let e=0;e<t;e+=4)d(this,e,e+3),d(this,e+1,e+2);return this},a.prototype.swap64=function(){const t=this.length;if(t%8!=0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(let e=0;e<t;e+=8)d(this,e,e+7),d(this,e+1,e+6),d(this,e+2,e+5),d(this,e+3,e+4);return this},a.prototype.toString=function(){const t=this.length;return 0===t?\"\":0===arguments.length?D(this,0,t):w.apply(this,arguments)},a.prototype.toLocaleString=a.prototype.toString,a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){let t=\"\";const r=e.INSPECT_MAX_BYTES;return t=this.toString(\"hex\",0,r).replace(/(.{2})/g,\"$1 \").trim(),this.length>r&&(t+=\" ... \"),\"<Buffer \"+t+\">\"},o&&(a.prototype[o]=a.prototype.inspect),a.prototype.compare=function(t,e,r,n,i){if($(t,Uint8Array)&&(t=a.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError(\"out of range index\");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;let o=(i>>>=0)-(n>>>=0),u=(r>>>=0)-(e>>>=0);const s=Math.min(o,u),c=this.slice(n,i),f=t.slice(e,r);for(let t=0;t<s;++t)if(c[t]!==f[t]){o=c[t],u=f[t];break}return o<u?-1:u<o?1:0},a.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},a.prototype.indexOf=function(t,e,r){return g(this,t,e,r,!0)},a.prototype.lastIndexOf=function(t,e,r){return g(this,t,e,r,!1)},a.prototype.write=function(t,e,r,n){if(void 0===e)n=\"utf8\",r=this.length,e=0;else if(void 0===r&&\"string\"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}const i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");let o=!1;for(;;)switch(n){case\"hex\":return L(this,t,e,r);case\"utf8\":case\"utf-8\":return _(this,t,e,r);case\"ascii\":case\"latin1\":case\"binary\":return j(this,t,e,r);case\"base64\":return N(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return x(this,t,e,r);default:if(o)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};const I=4096;function S(t,e,r){let n=\"\";r=Math.min(t.length,r);for(let i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function b(t,e,r){let n=\"\";r=Math.min(t.length,r);for(let i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function A(t,e,r){const n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);let i=\"\";for(let n=e;n<r;++n)i+=V[t[n]];return i}function C(t,e,r){const n=t.slice(e,r);let i=\"\";for(let t=0;t<n.length-1;t+=2)i+=String.fromCharCode(n[t]+256*n[t+1]);return i}function T(t,e,r){if(t%1!=0||t<0)throw new RangeError(\"offset is not uint\");if(t+e>r)throw new RangeError(\"Trying to access beyond buffer length\")}function E(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('\"value\" argument is out of bounds');if(r+n>t.length)throw new RangeError(\"Index out of range\")}function z(t,e,r,n,i){F(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o,o>>=8,t[r++]=o;let u=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=u,u>>=8,t[r++]=u,u>>=8,t[r++]=u,u>>=8,t[r++]=u,r}function O(t,e,r,n,i){F(e,n,i,t,r,7);let o=Number(e&BigInt(4294967295));t[r+7]=o,o>>=8,t[r+6]=o,o>>=8,t[r+5]=o,o>>=8,t[r+4]=o;let u=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=u,u>>=8,t[r+2]=u,u>>=8,t[r+1]=u,u>>=8,t[r]=u,r+8}function k(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function U(t,e,r,n,o){return e=+e,r>>>=0,o||k(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function Y(t,e,r,n,o){return e=+e,r>>>=0,o||k(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);const n=this.subarray(t,e);return Object.setPrototypeOf(n,a.prototype),n},a.prototype.readUintLE=a.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||T(t,e,this.length);let n=this[t],i=1,o=0;for(;++o<e&&(i*=256);)n+=this[t+o]*i;return n},a.prototype.readUintBE=a.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||T(t,e,this.length);let n=this[t+--e],i=1;for(;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUint8=a.prototype.readUInt8=function(t,e){return t>>>=0,e||T(t,1,this.length),this[t]},a.prototype.readUint16LE=a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||T(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUint16BE=a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||T(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUint32LE=a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||T(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUint32BE=a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||T(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readBigUInt64LE=H((function(t){P(t>>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,i=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(i)<<BigInt(32))})),a.prototype.readBigUInt64BE=H((function(t){P(t>>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],i=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<<BigInt(32))+BigInt(i)})),a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||T(t,e,this.length);let n=this[t],i=1,o=0;for(;++o<e&&(i*=256);)n+=this[t+o]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||T(t,e,this.length);let n=e,i=1,o=this[t+--n];for(;n>0&&(i*=256);)o+=this[t+--n]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return t>>>=0,e||T(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||T(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||T(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||T(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||T(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readBigInt64LE=H((function(t){P(t>>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+256*this[++t]+65536*this[++t]+this[++t]*2**24)})),a.prototype.readBigInt64BE=H((function(t){P(t>>>=0,\"offset\");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||G(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*2**24+65536*this[++t]+256*this[++t]+r)})),a.prototype.readFloatLE=function(t,e){return t>>>=0,e||T(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||T(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||T(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||T(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUintLE=a.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){E(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=1,o=0;for(this[e]=255&t;++o<r&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUintBE=a.prototype.writeUIntBE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){E(this,t,e,r,Math.pow(2,8*r)-1,0)}let i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},a.prototype.writeUint8=a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUint16LE=a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUint16BE=a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUint32LE=a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUint32BE=a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigUInt64LE=H((function(t,e=0){return z(this,t,e,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),a.prototype.writeBigUInt64BE=H((function(t,e=0){return O(this,t,e,BigInt(0),BigInt(\"0xffffffffffffffff\"))})),a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);E(this,t,e,r,n-1,-n)}let i=0,o=1,u=0;for(this[e]=255&t;++i<r&&(o*=256);)t<0&&0===u&&0!==this[e+i-1]&&(u=1),this[e+i]=(t/o>>0)-u&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);E(this,t,e,r,n-1,-n)}let i=r-1,o=1,u=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===u&&0!==this[e+i+1]&&(u=1),this[e+i]=(t/o>>0)-u&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||E(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeBigInt64LE=H((function(t,e=0){return z(this,t,e,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),a.prototype.writeBigInt64BE=H((function(t,e=0){return O(this,t,e,-BigInt(\"0x8000000000000000\"),BigInt(\"0x7fffffffffffffff\"))})),a.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return Y(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return Y(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(!a.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"Index out of range\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);const i=n-r;return this===t&&\"function\"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),i},a.prototype.fill=function(t,e,r,n){if(\"string\"==typeof t){if(\"string\"==typeof e?(n=e,e=0,r=this.length):\"string\"==typeof r&&(n=r,r=this.length),void 0!==n&&\"string\"!=typeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof n&&!a.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(1===t.length){const e=t.charCodeAt(0);(\"utf8\"===n&&e<128||\"latin1\"===n)&&(t=e)}}else\"number\"==typeof t?t&=255:\"boolean\"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError(\"Out of range index\");if(r<=e)return this;let i;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\"number\"==typeof t)for(i=e;i<r;++i)this[i]=t;else{const o=a.isBuffer(t)?t:a.from(t,n),u=o.length;if(0===u)throw new TypeError('The value \"'+t+'\" is invalid for argument \"value\"');for(i=0;i<r-e;++i)this[i+e]=o[i%u]}return this};const B={};function Q(t,e,r){B[t]=class extends r{constructor(){super(),Object.defineProperty(this,\"message\",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${t}]`,this.stack,delete this.name}get code(){return t}set code(t){Object.defineProperty(this,\"code\",{configurable:!0,enumerable:!0,value:t,writable:!0})}toString(){return`${this.name} [${t}]: ${this.message}`}}}function R(t){let e=\"\",r=t.length;const n=\"-\"===t[0]?1:0;for(;r>=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function F(t,e,r,n,i,o){if(t>r||t<e){const n=\"bigint\"==typeof e?\"n\":\"\";let i;throw i=o>3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new B.ERR_OUT_OF_RANGE(\"value\",i,t)}!function(t,e,r){P(e,\"offset\"),void 0!==t[e]&&void 0!==t[e+r]||G(e,t.length-(r+1))}(n,i,o)}function P(t,e){if(\"number\"!=typeof t)throw new B.ERR_INVALID_ARG_TYPE(e,\"number\",t)}function G(t,e,r){if(Math.floor(t)!==t)throw P(t,r),new B.ERR_OUT_OF_RANGE(r||\"offset\",\"an integer\",t);if(e<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(r||\"offset\",`>= ${r?1:0} and <= ${e}`,t)}Q(\"ERR_BUFFER_OUT_OF_BOUNDS\",(function(t){return t?`${t} is outside of buffer bounds`:\"Attempt to access memory outside buffer bounds\"}),RangeError),Q(\"ERR_INVALID_ARG_TYPE\",(function(t,e){return`The \"${t}\" argument must be of type number. Received type ${typeof e}`}),TypeError),Q(\"ERR_OUT_OF_RANGE\",(function(t,e,r){let n=`The value of \"${t}\" is out of range.`,i=r;return Number.isInteger(r)&&Math.abs(r)>2**32?i=R(String(r)):\"bigint\"==typeof r&&(i=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(i=R(i)),i+=\"n\"),n+=` It must be ${e}. Received ${i}`,n}),RangeError);const W=/[^+/0-9A-Za-z-_]/g;function q(t,e){let r;e=e||1/0;const n=t.length;let i=null;const o=[];for(let u=0;u<n;++u){if(r=t.charCodeAt(u),r>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(u+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function J(t){return n.toByteArray(function(t){if((t=(t=t.split(\"=\")[0]).trim().replace(W,\"\")).length<2)return\"\";for(;t.length%4!=0;)t+=\"=\";return t}(t))}function Z(t,e,r,n){let i;for(i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function $(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function X(t){return t!=t}const V=function(){const t=\"0123456789abcdef\",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let i=0;i<16;++i)e[n+i]=t[r]+t[i]}return e}();function H(t){return\"undefined\"==typeof BigInt?K:t}function K(){throw new Error(\"BigInt not supported\")}},93:(t,e,r)=>{var n=r(8196);t.exports=n},5362:(t,e,r)=>{var n=r(3383);t.exports=n},3536:(t,e,r)=>{var n=r(1910);t.exports=n},281:(t,e,r)=>{var n=r(2547);r(7522),r(3975),r(5414),t.exports=n},31:(t,e,r)=>{var n=r(6509);t.exports=n},7487:(t,e,r)=>{var n=r(5774);t.exports=n},4034:(t,e,r)=>{r(2988);var n=r(4058);t.exports=n.Array.isArray},5367:(t,e,r)=>{r(5906);var n=r(5703);t.exports=n(\"Array\").concat},2710:(t,e,r)=>{r(6274),r(5967);var n=r(5703);t.exports=n(\"Array\").entries},4162:(t,e,r)=>{r(290);var n=r(5703);t.exports=n(\"Array\").fill},2383:(t,e,r)=>{r(1501);var n=r(5703);t.exports=n(\"Array\").filter},7671:(t,e,r)=>{r(833);var n=r(5703);t.exports=n(\"Array\").find},9324:(t,e,r)=>{r(2437);var n=r(5703);t.exports=n(\"Array\").forEach},991:(t,e,r)=>{r(7690);var n=r(5703);t.exports=n(\"Array\").includes},8700:(t,e,r)=>{r(9076);var n=r(5703);t.exports=n(\"Array\").indexOf},3866:(t,e,r)=>{r(8787);var n=r(5703);t.exports=n(\"Array\").map},2999:(t,e,r)=>{r(1876);var n=r(5703);t.exports=n(\"Array\").reduce},4900:(t,e,r)=>{r(186);var n=r(5703);t.exports=n(\"Array\").slice},3824:(t,e,r)=>{r(6026);var n=r(5703);t.exports=n(\"Array\").some},2948:(t,e,r)=>{r(4115);var n=r(5703);t.exports=n(\"Array\").sort},7700:(t,e,r)=>{r(3381);var n=r(5703);t.exports=n(\"Function\").bind},6246:(t,e,r)=>{var n=r(7046),i=r(7700),o=Function.prototype;t.exports=function(t){var e=t.bind;return t===o||n(o,t)&&e===o.bind?i:e}},6043:(t,e,r)=>{var n=r(7046),i=r(5367),o=Array.prototype;t.exports=function(t){var e=t.concat;return t===o||n(o,t)&&e===o.concat?i:e}},446:(t,e,r)=>{var n=r(7046),i=r(4162),o=Array.prototype;t.exports=function(t){var e=t.fill;return t===o||n(o,t)&&e===o.fill?i:e}},2480:(t,e,r)=>{var n=r(7046),i=r(2383),o=Array.prototype;t.exports=function(t){var e=t.filter;return t===o||n(o,t)&&e===o.filter?i:e}},2236:(t,e,r)=>{var n=r(7046),i=r(7671),o=Array.prototype;t.exports=function(t){var e=t.find;return t===o||n(o,t)&&e===o.find?i:e}},8557:(t,e,r)=>{var n=r(7046),i=r(991),o=r(1631),u=Array.prototype,s=String.prototype;t.exports=function(t){var e=t.includes;return t===u||n(u,t)&&e===u.includes?i:\"string\"==typeof t||t===s||n(s,t)&&e===s.includes?o:e}},4570:(t,e,r)=>{var n=r(7046),i=r(8700),o=Array.prototype;t.exports=function(t){var e=t.indexOf;return t===o||n(o,t)&&e===o.indexOf?i:e}},8287:(t,e,r)=>{var n=r(7046),i=r(3866),o=Array.prototype;t.exports=function(t){var e=t.map;return t===o||n(o,t)&&e===o.map?i:e}},8025:(t,e,r)=>{var n=r(7046),i=r(2999),o=Array.prototype;t.exports=function(t){var e=t.reduce;return t===o||n(o,t)&&e===o.reduce?i:e}},9601:(t,e,r)=>{var n=r(7046),i=r(4900),o=Array.prototype;t.exports=function(t){var e=t.slice;return t===o||n(o,t)&&e===o.slice?i:e}},8299:(t,e,r)=>{var n=r(7046),i=r(3824),o=Array.prototype;t.exports=function(t){var e=t.some;return t===o||n(o,t)&&e===o.some?i:e}},9355:(t,e,r)=>{var n=r(7046),i=r(2948),o=Array.prototype;t.exports=function(t){var e=t.sort;return t===o||n(o,t)&&e===o.sort?i:e}},1611:(t,e,r)=>{var n=r(7046),i=r(3269),o=String.prototype;t.exports=function(t){var e=t.startsWith;return\"string\"==typeof t||t===o||n(o,t)&&e===o.startsWith?i:e}},2774:(t,e,r)=>{var n=r(7046),i=r(3348),o=String.prototype;t.exports=function(t){var e=t.trim;return\"string\"==typeof t||t===o||n(o,t)&&e===o.trim?i:e}},4426:(t,e,r)=>{r(2619);var n=r(4058),i=r(9730);n.JSON||(n.JSON={stringify:JSON.stringify}),t.exports=function(t,e,r){return i(n.JSON.stringify,null,arguments)}},5999:(t,e,r)=>{r(9221);var n=r(4058);t.exports=n.Object.assign},8171:(t,e,r)=>{r(6450);var n=r(4058).Object,i=t.exports=function(t,e,r){return n.defineProperty(t,e,r)};n.defineProperty.sham&&(i.sham=!0)},8494:(t,e,r)=>{r(1724);var n=r(4058);t.exports=n.Object.keys},1631:(t,e,r)=>{r(1035);var n=r(5703);t.exports=n(\"String\").includes},3269:(t,e,r)=>{r(4761);var n=r(5703);t.exports=n(\"String\").startsWith},3348:(t,e,r)=>{r(6371);var n=r(5703);t.exports=n(\"String\").trim},7473:(t,e,r)=>{r(5906),r(5967),r(5824),r(8555),r(2615),r(1732),r(5903),r(1825),r(8394),r(5915),r(1766),r(2737),r(9911),r(4315),r(3131),r(4714),r(659),r(9120),r(5327),r(1502);var n=r(4058);t.exports=n.Symbol},4227:(t,e,r)=>{r(6274),r(5967),r(7971),r(1825);var n=r(1477);t.exports=n.f(\"iterator\")},2978:(t,e,r)=>{r(8084),r(3131);var n=r(1477);t.exports=n.f(\"toPrimitive\")},4122:(t,e,r)=>{t.exports=r(9097)},269:(t,e,r)=>{t.exports=r(6936)},3685:(t,e,r)=>{t.exports=r(621)},6600:(t,e,r)=>{t.exports=r(2201)},9759:(t,e,r)=>{t.exports=r(7398)},1384:(t,e,r)=>{t.exports=r(6189)},9097:(t,e,r)=>{var n=r(93);t.exports=n},6936:(t,e,r)=>{var n=r(5362);t.exports=n},621:(t,e,r)=>{var n=r(3536);t.exports=n},2201:(t,e,r)=>{var n=r(281);r(8783),r(7618),r(6989),r(5799),r(6774),r(2731),r(5605),r(1943),r(620),r(6172),t.exports=n},7398:(t,e,r)=>{var n=r(31);t.exports=n},6189:(t,e,r)=>{var n=r(7487);t.exports=n},4883:(t,e,r)=>{var n=r(7475),i=r(9826),o=TypeError;t.exports=function(t){if(n(t))return t;throw o(i(t)+\" is not a function\")}},1851:(t,e,r)=>{var n=r(7475),i=String,o=TypeError;t.exports=function(t){if(\"object\"==typeof t||n(t))return t;throw o(\"Can't set \"+i(t)+\" as a prototype\")}},8479:t=>{t.exports=function(){}},6059:(t,e,r)=>{var n=r(941),i=String,o=TypeError;t.exports=function(t){if(n(t))return t;throw o(i(t)+\" is not an object\")}},1860:(t,e,r)=>{\"use strict\";var n=r(9678),i=r(9413),o=r(623);t.exports=function(t){for(var e=n(this),r=o(e),u=arguments.length,s=i(u>1?arguments[1]:void 0,r),a=u>2?arguments[2]:void 0,c=void 0===a?r:i(a,r);c>s;)e[s++]=t;return e}},6837:(t,e,r)=>{\"use strict\";var n=r(3610).forEach,i=r(4194)(\"forEach\");t.exports=i?[].forEach:function(t){return n(this,t,arguments.length>1?arguments[1]:void 0)}},1692:(t,e,r)=>{var n=r(4529),i=r(9413),o=r(623),u=function(t){return function(e,r,u){var s,a=n(e),c=o(a),f=i(u,c);if(t&&r!=r){for(;c>f;)if((s=a[f++])!=s)return!0}else for(;c>f;f++)if((t||f in a)&&a[f]===r)return t||f||0;return!t&&-1}};t.exports={includes:u(!0),indexOf:u(!1)}},3610:(t,e,r)=>{var n=r(6843),i=r(5329),o=r(7026),u=r(9678),s=r(623),a=r(4692),c=i([].push),f=function(t){var e=1==t,r=2==t,i=3==t,f=4==t,l=6==t,h=7==t,p=5==t||l;return function(y,M,w,d){for(var g,v,L=u(y),_=o(L),j=n(M,w),N=s(_),x=0,m=d||a,D=e?m(y,N):r||h?m(y,0):void 0;N>x;x++)if((p||x in _)&&(v=j(g=_[x],x,L),t))if(e)D[x]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return x;case 2:c(D,g)}else switch(t){case 4:return!1;case 7:c(D,g)}return l?-1:i||f?f:D}};t.exports={forEach:f(0),map:f(1),filter:f(2),some:f(3),every:f(4),find:f(5),findIndex:f(6),filterReject:f(7)}},568:(t,e,r)=>{var n=r(5981),i=r(9813),o=r(3385),u=i(\"species\");t.exports=function(t){return o>=51||!n((function(){var e=[];return(e.constructor={})[u]=function(){return{foo:1}},1!==e[t](Boolean).foo}))}},4194:(t,e,r)=>{\"use strict\";var n=r(5981);t.exports=function(t,e){var r=[][t];return!!r&&n((function(){r.call(null,e||function(){return 1},1)}))}},6499:(t,e,r)=>{var n=r(4883),i=r(9678),o=r(7026),u=r(623),s=TypeError,a=function(t){return function(e,r,a,c){n(r);var f=i(e),l=o(f),h=u(f),p=t?h-1:0,y=t?-1:1;if(a<2)for(;;){if(p in l){c=l[p],p+=y;break}if(p+=y,t?p<0:h<=p)throw s(\"Reduce of empty array with no initial value\")}for(;t?p>=0:h>p;p+=y)p in l&&(c=r(c,l[p],p,f));return c}};t.exports={left:a(!1),right:a(!0)}},5790:(t,e,r)=>{var n=r(9413),i=r(623),o=r(5449),u=Array,s=Math.max;t.exports=function(t,e,r){for(var a=i(t),c=n(e,a),f=n(void 0===r?a:r,a),l=u(s(f-c,0)),h=0;c<f;c++,h++)o(l,h,t[c]);return l.length=h,l}},3765:(t,e,r)=>{var n=r(5329);t.exports=n([].slice)},1388:(t,e,r)=>{var n=r(5790),i=Math.floor,o=function(t,e){var r=t.length,a=i(r/2);return r<8?u(t,e):s(t,o(n(t,0,a),e),o(n(t,a),e),e)},u=function(t,e){for(var r,n,i=t.length,o=1;o<i;){for(n=o,r=t[o];n&&e(t[n-1],r)>0;)t[n]=t[--n];n!==o++&&(t[n]=r)}return t},s=function(t,e,r,n){for(var i=e.length,o=r.length,u=0,s=0;u<i||s<o;)t[u+s]=u<i&&s<o?n(e[u],r[s])<=0?e[u++]:r[s++]:u<i?e[u++]:r[s++];return t};t.exports=o},5693:(t,e,r)=>{var n=r(1052),i=r(4284),o=r(941),u=r(9813)(\"species\"),s=Array;t.exports=function(t){var e;return n(t)&&(e=t.constructor,(i(e)&&(e===s||n(e.prototype))||o(e)&&null===(e=e[u]))&&(e=void 0)),void 0===e?s:e}},4692:(t,e,r)=>{var n=r(5693);t.exports=function(t,e){return new(n(t))(0===e?0:e)}},2532:(t,e,r)=>{var n=r(5329),i=n({}.toString),o=n(\"\".slice);t.exports=function(t){return o(i(t),8,-1)}},9697:(t,e,r)=>{var n=r(2885),i=r(7475),o=r(2532),u=r(9813)(\"toStringTag\"),s=Object,a=\"Arguments\"==o(function(){return arguments}());t.exports=n?o:function(t){var e,r,n;return void 0===t?\"Undefined\":null===t?\"Null\":\"string\"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=s(t),u))?r:a?o(e):\"Object\"==(n=o(e))&&i(e.callee)?\"Arguments\":n}},7772:(t,e,r)=>{var n=r(9813)(\"match\");t.exports=function(t){var e=/./;try{\"/./\"[t](e)}catch(r){try{return e[n]=!1,\"/./\"[t](e)}catch(t){}}return!1}},4160:(t,e,r)=>{var n=r(5981);t.exports=!n((function(){function t(){}return t.prototype.constructor=null,Object.getPrototypeOf(new t)!==t.prototype}))},3538:t=>{t.exports=function(t,e){return{value:t,done:e}}},2029:(t,e,r)=>{var n=r(5746),i=r(5988),o=r(1887);t.exports=n?function(t,e,r){return i.f(t,e,o(1,r))}:function(t,e,r){return t[e]=r,t}},1887:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},5449:(t,e,r)=>{\"use strict\";var n=r(3894),i=r(5988),o=r(1887);t.exports=function(t,e,r){var u=n(e);u in t?i.f(t,u,o(0,r)):t[u]=r}},9202:(t,e,r)=>{var n=r(5988);t.exports=function(t,e,r){return n.f(t,e,r)}},5929:(t,e,r)=>{var n=r(2029);t.exports=function(t,e,r,i){return i&&i.enumerable?t[e]=r:n(t,e,r),t}},5609:(t,e,r)=>{var n=r(1899),i=Object.defineProperty;t.exports=function(t,e){try{i(n,t,{value:e,configurable:!0,writable:!0})}catch(r){n[t]=e}return e}},5863:(t,e,r)=>{\"use strict\";var n=r(9826),i=TypeError;t.exports=function(t,e){if(!delete t[e])throw i(\"Cannot delete property \"+n(e)+\" of \"+n(t))}},5746:(t,e,r)=>{var n=r(5981);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},6616:t=>{var e=\"object\"==typeof document&&document.all,r=void 0===e&&void 0!==e;t.exports={all:e,IS_HTMLDDA:r}},1333:(t,e,r)=>{var n=r(1899),i=r(941),o=n.document,u=i(o)&&i(o.createElement);t.exports=function(t){return u?o.createElement(t):{}}},6796:t=>{var e=TypeError;t.exports=function(t){if(t>9007199254740991)throw e(\"Maximum allowed index exceeded\");return t}},3281:t=>{t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},4342:(t,e,r)=>{var n=r(2861).match(/firefox\\/(\\d+)/i);t.exports=!!n&&+n[1]},1046:(t,e,r)=>{var n=r(2861);t.exports=/MSIE|Trident/.test(n)},6049:(t,e,r)=>{var n=r(4155),i=r(2532);t.exports=void 0!==n&&\"process\"==i(n)},2861:t=>{t.exports=\"undefined\"!=typeof navigator&&String(navigator.userAgent)||\"\"},3385:(t,e,r)=>{var n,i,o=r(1899),u=r(2861),s=o.process,a=o.Deno,c=s&&s.versions||a&&a.version,f=c&&c.v8;f&&(i=(n=f.split(\".\"))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!i&&u&&(!(n=u.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=u.match(/Chrome\\/(\\d+)/))&&(i=+n[1]),t.exports=i},8938:(t,e,r)=>{var n=r(2861).match(/AppleWebKit\\/(\\d+)\\./);t.exports=!!n&&+n[1]},5703:(t,e,r)=>{var n=r(4058);t.exports=function(t){return n[t+\"Prototype\"]}},6759:t=>{t.exports=[\"constructor\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"toLocaleString\",\"toString\",\"valueOf\"]},6887:(t,e,r)=>{\"use strict\";var n=r(1899),i=r(9730),o=r(7484),u=r(7475),s=r(9677).f,a=r(7252),c=r(4058),f=r(6843),l=r(2029),h=r(953),p=function(t){var e=function(r,n,o){if(this instanceof e){switch(arguments.length){case 0:return new t;case 1:return new t(r);case 2:return new t(r,n)}return new t(r,n,o)}return i(t,this,arguments)};return e.prototype=t.prototype,e};t.exports=function(t,e){var r,i,y,M,w,d,g,v,L,_=t.target,j=t.global,N=t.stat,x=t.proto,m=j?n:N?n[_]:(n[_]||{}).prototype,D=j?c:c[_]||l(c,_,{})[_],I=D.prototype;for(M in e)i=!(r=a(j?M:_+(N?\".\":\"#\")+M,t.forced))&&m&&h(m,M),d=D[M],i&&(g=t.dontCallGetSet?(L=s(m,M))&&L.value:m[M]),w=i&&g?g:e[M],i&&typeof d==typeof w||(v=t.bind&&i?f(w,n):t.wrap&&i?p(w):x&&u(w)?o(w):w,(t.sham||w&&w.sham||d&&d.sham)&&l(v,\"sham\",!0),l(D,M,v),x&&(h(c,y=_+\"Prototype\")||l(c,y,{}),l(c[y],M,w),t.real&&I&&(r||!I[M])&&l(I,M,w)))}},5981:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},9730:(t,e,r)=>{var n=r(8285),i=Function.prototype,o=i.apply,u=i.call;t.exports=\"object\"==typeof Reflect&&Reflect.apply||(n?u.bind(o):function(){return u.apply(o,arguments)})},6843:(t,e,r)=>{var n=r(7484),i=r(4883),o=r(8285),u=n(n.bind);t.exports=function(t,e){return i(t),void 0===e?t:o?u(t,e):function(){return t.apply(e,arguments)}}},8285:(t,e,r)=>{var n=r(5981);t.exports=!n((function(){var t=function(){}.bind();return\"function\"!=typeof t||t.hasOwnProperty(\"prototype\")}))},8308:(t,e,r)=>{\"use strict\";var n=r(5329),i=r(4883),o=r(941),u=r(953),s=r(3765),a=r(8285),c=Function,f=n([].concat),l=n([].join),h={};t.exports=a?c.bind:function(t){var e=i(this),r=e.prototype,n=s(arguments,1),a=function(){var r=f(n,s(arguments));return this instanceof a?function(t,e,r){if(!u(h,e)){for(var n=[],i=0;i<e;i++)n[i]=\"a[\"+i+\"]\";h[e]=c(\"C,a\",\"return new C(\"+l(n,\",\")+\")\")}return h[e](t,r)}(e,r.length,r):e.apply(t,r)};return o(r)&&(a.prototype=r),a}},8834:(t,e,r)=>{var n=r(8285),i=Function.prototype.call;t.exports=n?i.bind(i):function(){return i.apply(i,arguments)}},9417:(t,e,r)=>{var n=r(5746),i=r(953),o=Function.prototype,u=n&&Object.getOwnPropertyDescriptor,s=i(o,\"name\"),a=s&&\"something\"===function(){}.name,c=s&&(!n||n&&u(o,\"name\").configurable);t.exports={EXISTS:s,PROPER:a,CONFIGURABLE:c}},5526:(t,e,r)=>{var n=r(5329),i=r(4883);t.exports=function(t,e,r){try{return n(i(Object.getOwnPropertyDescriptor(t,e)[r]))}catch(t){}}},7484:(t,e,r)=>{var n=r(2532),i=r(5329);t.exports=function(t){if(\"Function\"===n(t))return i(t)}},5329:(t,e,r)=>{var n=r(8285),i=Function.prototype,o=i.call,u=n&&i.bind.bind(o,o);t.exports=n?u:function(t){return function(){return o.apply(t,arguments)}}},626:(t,e,r)=>{var n=r(4058),i=r(1899),o=r(7475),u=function(t){return o(t)?t:void 0};t.exports=function(t,e){return arguments.length<2?u(n[t])||u(i[t]):n[t]&&n[t][e]||i[t]&&i[t][e]}},3323:(t,e,r)=>{var n=r(5329),i=r(1052),o=r(7475),u=r(2532),s=r(5803),a=n([].push);t.exports=function(t){if(o(t))return t;if(i(t)){for(var e=t.length,r=[],n=0;n<e;n++){var c=t[n];\"string\"==typeof c?a(r,c):\"number\"!=typeof c&&\"Number\"!=u(c)&&\"String\"!=u(c)||a(r,s(c))}var f=r.length,l=!0;return function(t,e){if(l)return l=!1,e;if(i(this))return e;for(var n=0;n<f;n++)if(r[n]===t)return e}}}},4229:(t,e,r)=>{var n=r(4883),i=r(2119);t.exports=function(t,e){var r=t[e];return i(r)?void 0:n(r)}},1899:function(t,e,r){var n=function(t){return t&&t.Math==Math&&t};t.exports=n(\"object\"==typeof globalThis&&globalThis)||n(\"object\"==typeof window&&window)||n(\"object\"==typeof self&&self)||n(\"object\"==typeof r.g&&r.g)||function(){return this}()||this||Function(\"return this\")()},953:(t,e,r)=>{var n=r(5329),i=r(9678),o=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return o(i(t),e)}},7748:t=>{t.exports={}},5463:(t,e,r)=>{var n=r(626);t.exports=n(\"document\",\"documentElement\")},2840:(t,e,r)=>{var n=r(5746),i=r(5981),o=r(1333);t.exports=!n&&!i((function(){return 7!=Object.defineProperty(o(\"div\"),\"a\",{get:function(){return 7}}).a}))},7026:(t,e,r)=>{var n=r(5329),i=r(5981),o=r(2532),u=Object,s=n(\"\".split);t.exports=i((function(){return!u(\"z\").propertyIsEnumerable(0)}))?function(t){return\"String\"==o(t)?s(t,\"\"):u(t)}:u},1302:(t,e,r)=>{var n=r(5329),i=r(7475),o=r(3030),u=n(Function.toString);i(o.inspectSource)||(o.inspectSource=function(t){return u(t)}),t.exports=o.inspectSource},5402:(t,e,r)=>{var n,i,o,u=r(7093),s=r(1899),a=r(941),c=r(2029),f=r(953),l=r(3030),h=r(4262),p=r(7748),y=\"Object already initialized\",M=s.TypeError,w=s.WeakMap;if(u||l.state){var d=l.state||(l.state=new w);d.get=d.get,d.has=d.has,d.set=d.set,n=function(t,e){if(d.has(t))throw M(y);return e.facade=t,d.set(t,e),e},i=function(t){return d.get(t)||{}},o=function(t){return d.has(t)}}else{var g=h(\"state\");p[g]=!0,n=function(t,e){if(f(t,g))throw M(y);return e.facade=t,c(t,g,e),e},i=function(t){return f(t,g)?t[g]:{}},o=function(t){return f(t,g)}}t.exports={set:n,get:i,has:o,enforce:function(t){return o(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!a(e)||(r=i(e)).type!==t)throw M(\"Incompatible receiver, \"+t+\" required\");return r}}}},1052:(t,e,r)=>{var n=r(2532);t.exports=Array.isArray||function(t){return\"Array\"==n(t)}},7475:(t,e,r)=>{var n=r(6616),i=n.all;t.exports=n.IS_HTMLDDA?function(t){return\"function\"==typeof t||t===i}:function(t){return\"function\"==typeof t}},4284:(t,e,r)=>{var n=r(5329),i=r(5981),o=r(7475),u=r(9697),s=r(626),a=r(1302),c=function(){},f=[],l=s(\"Reflect\",\"construct\"),h=/^\\s*(?:class|function)\\b/,p=n(h.exec),y=!h.exec(c),M=function(t){if(!o(t))return!1;try{return l(c,f,t),!0}catch(t){return!1}},w=function(t){if(!o(t))return!1;switch(u(t)){case\"AsyncFunction\":case\"GeneratorFunction\":case\"AsyncGeneratorFunction\":return!1}try{return y||!!p(h,a(t))}catch(t){return!0}};w.sham=!0,t.exports=!l||i((function(){var t;return M(M.call)||!M(Object)||!M((function(){t=!0}))||t}))?w:M},7252:(t,e,r)=>{var n=r(5981),i=r(7475),o=/#|\\.prototype\\./,u=function(t,e){var r=a[s(t)];return r==f||r!=c&&(i(e)?n(e):!!e)},s=u.normalize=function(t){return String(t).replace(o,\".\").toLowerCase()},a=u.data={},c=u.NATIVE=\"N\",f=u.POLYFILL=\"P\";t.exports=u},2119:t=>{t.exports=function(t){return null==t}},941:(t,e,r)=>{var n=r(7475),i=r(6616),o=i.all;t.exports=i.IS_HTMLDDA?function(t){return\"object\"==typeof t?null!==t:n(t)||t===o}:function(t){return\"object\"==typeof t?null!==t:n(t)}},2529:t=>{t.exports=!0},685:(t,e,r)=>{var n=r(941),i=r(2532),o=r(9813)(\"match\");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:\"RegExp\"==i(t))}},6664:(t,e,r)=>{var n=r(626),i=r(7475),o=r(7046),u=r(2302),s=Object;t.exports=u?function(t){return\"symbol\"==typeof t}:function(t){var e=n(\"Symbol\");return i(e)&&o(e.prototype,s(t))}},3847:(t,e,r)=>{\"use strict\";var n=r(5143).IteratorPrototype,i=r(9290),o=r(1887),u=r(904),s=r(2077),a=function(){return this};t.exports=function(t,e,r,c){var f=e+\" Iterator\";return t.prototype=i(n,{next:o(+!c,r)}),u(t,f,!1,!0),s[f]=a,t}},5105:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(8834),o=r(2529),u=r(9417),s=r(7475),a=r(3847),c=r(249),f=r(8929),l=r(904),h=r(2029),p=r(5929),y=r(9813),M=r(2077),w=r(5143),d=u.PROPER,g=u.CONFIGURABLE,v=w.IteratorPrototype,L=w.BUGGY_SAFARI_ITERATORS,_=y(\"iterator\"),j=\"keys\",N=\"values\",x=\"entries\",m=function(){return this};t.exports=function(t,e,r,u,y,w,D){a(r,e,u);var I,S,b,A=function(t){if(t===y&&O)return O;if(!L&&t in E)return E[t];switch(t){case j:case N:case x:return function(){return new r(this,t)}}return function(){return new r(this)}},C=e+\" Iterator\",T=!1,E=t.prototype,z=E[_]||E[\"@@iterator\"]||y&&E[y],O=!L&&z||A(y),k=\"Array\"==e&&E.entries||z;if(k&&(I=c(k.call(new t)))!==Object.prototype&&I.next&&(o||c(I)===v||(f?f(I,v):s(I[_])||p(I,_,m)),l(I,C,!0,!0),o&&(M[C]=m)),d&&y==N&&z&&z.name!==N&&(!o&&g?h(E,\"name\",N):(T=!0,O=function(){return i(z,this)})),y)if(S={values:A(N),keys:w?O:A(j),entries:A(x)},D)for(b in S)(L||T||!(b in E))&&p(E,b,S[b]);else n({target:e,proto:!0,forced:L||T},S);return o&&!D||E[_]===O||p(E,_,O,{name:y}),M[e]=O,S}},5143:(t,e,r)=>{\"use strict\";var n,i,o,u=r(5981),s=r(7475),a=r(941),c=r(9290),f=r(249),l=r(5929),h=r(9813),p=r(2529),y=h(\"iterator\"),M=!1;[].keys&&(\"next\"in(o=[].keys())?(i=f(f(o)))!==Object.prototype&&(n=i):M=!0),!a(n)||u((function(){var t={};return n[y].call(t)!==t}))?n={}:p&&(n=c(n)),s(n[y])||l(n,y,(function(){return this})),t.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:M}},2077:t=>{t.exports={}},623:(t,e,r)=>{var n=r(3057);t.exports=function(t){return n(t.length)}},5331:t=>{var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?r:e)(n)}},344:(t,e,r)=>{var n=r(685),i=TypeError;t.exports=function(t){if(n(t))throw i(\"The method doesn't accept regular expressions\");return t}},4420:(t,e,r)=>{\"use strict\";var n=r(5746),i=r(5329),o=r(8834),u=r(5981),s=r(4771),a=r(7857),c=r(6760),f=r(9678),l=r(7026),h=Object.assign,p=Object.defineProperty,y=i([].concat);t.exports=!h||u((function(){if(n&&1!==h({b:1},h(p({},\"a\",{enumerable:!0,get:function(){p(this,\"b\",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var t={},e={},r=Symbol(),i=\"abcdefghijklmnopqrst\";return t[r]=7,i.split(\"\").forEach((function(t){e[t]=t})),7!=h({},t)[r]||s(h({},e)).join(\"\")!=i}))?function(t,e){for(var r=f(t),i=arguments.length,u=1,h=a.f,p=c.f;i>u;)for(var M,w=l(arguments[u++]),d=h?y(s(w),h(w)):s(w),g=d.length,v=0;g>v;)M=d[v++],n&&!o(p,w,M)||(r[M]=w[M]);return r}:h},9290:(t,e,r)=>{var n,i=r(6059),o=r(9938),u=r(6759),s=r(7748),a=r(5463),c=r(1333),f=r(4262),l=\"prototype\",h=\"script\",p=f(\"IE_PROTO\"),y=function(){},M=function(t){return\"<\"+h+\">\"+t+\"</\"+h+\">\"},w=function(t){t.write(M(\"\")),t.close();var e=t.parentWindow.Object;return t=null,e},d=function(){try{n=new ActiveXObject(\"htmlfile\")}catch(t){}var t,e,r;d=\"undefined\"!=typeof document?document.domain&&n?w(n):(e=c(\"iframe\"),r=\"java\"+h+\":\",e.style.display=\"none\",a.appendChild(e),e.src=String(r),(t=e.contentWindow.document).open(),t.write(M(\"document.F=Object\")),t.close(),t.F):w(n);for(var i=u.length;i--;)delete d[l][u[i]];return d()};s[p]=!0,t.exports=Object.create||function(t,e){var r;return null!==t?(y[l]=i(t),r=new y,y[l]=null,r[p]=t):r=d(),void 0===e?r:o.f(r,e)}},9938:(t,e,r)=>{var n=r(5746),i=r(3937),o=r(5988),u=r(6059),s=r(4529),a=r(4771);e.f=n&&!i?Object.defineProperties:function(t,e){u(t);for(var r,n=s(e),i=a(e),c=i.length,f=0;c>f;)o.f(t,r=i[f++],n[r]);return t}},5988:(t,e,r)=>{var n=r(5746),i=r(2840),o=r(3937),u=r(6059),s=r(3894),a=TypeError,c=Object.defineProperty,f=Object.getOwnPropertyDescriptor,l=\"enumerable\",h=\"configurable\",p=\"writable\";e.f=n?o?function(t,e,r){if(u(t),e=s(e),u(r),\"function\"==typeof t&&\"prototype\"===e&&\"value\"in r&&p in r&&!r[p]){var n=f(t,e);n&&n[p]&&(t[e]=r.value,r={configurable:h in r?r[h]:n[h],enumerable:l in r?r[l]:n[l],writable:!1})}return c(t,e,r)}:c:function(t,e,r){if(u(t),e=s(e),u(r),i)try{return c(t,e,r)}catch(t){}if(\"get\"in r||\"set\"in r)throw a(\"Accessors not supported\");return\"value\"in r&&(t[e]=r.value),t}},9677:(t,e,r)=>{var n=r(5746),i=r(8834),o=r(6760),u=r(1887),s=r(4529),a=r(3894),c=r(953),f=r(2840),l=Object.getOwnPropertyDescriptor;e.f=n?l:function(t,e){if(t=s(t),e=a(e),f)try{return l(t,e)}catch(t){}if(c(t,e))return u(!i(o.f,t,e),t[e])}},684:(t,e,r)=>{var n=r(2532),i=r(4529),o=r(946).f,u=r(5790),s=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&\"Window\"==n(t)?function(t){try{return o(t)}catch(t){return u(s)}}(t):o(i(t))}},946:(t,e,r)=>{var n=r(5629),i=r(6759).concat(\"length\",\"prototype\");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},7857:(t,e)=>{e.f=Object.getOwnPropertySymbols},249:(t,e,r)=>{var n=r(953),i=r(7475),o=r(9678),u=r(4262),s=r(4160),a=u(\"IE_PROTO\"),c=Object,f=c.prototype;t.exports=s?c.getPrototypeOf:function(t){var e=o(t);if(n(e,a))return e[a];var r=e.constructor;return i(r)&&e instanceof r?r.prototype:e instanceof c?f:null}},7046:(t,e,r)=>{var n=r(5329);t.exports=n({}.isPrototypeOf)},5629:(t,e,r)=>{var n=r(5329),i=r(953),o=r(4529),u=r(1692).indexOf,s=r(7748),a=n([].push);t.exports=function(t,e){var r,n=o(t),c=0,f=[];for(r in n)!i(s,r)&&i(n,r)&&a(f,r);for(;e.length>c;)i(n,r=e[c++])&&(~u(f,r)||a(f,r));return f}},4771:(t,e,r)=>{var n=r(5629),i=r(6759);t.exports=Object.keys||function(t){return n(t,i)}},6760:(t,e)=>{\"use strict\";var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,i=n&&!r.call({1:2},1);e.f=i?function(t){var e=n(this,t);return!!e&&e.enumerable}:r},8929:(t,e,r)=>{var n=r(5526),i=r(6059),o=r(1851);t.exports=Object.setPrototypeOf||(\"__proto__\"in{}?function(){var t,e=!1,r={};try{(t=n(Object.prototype,\"__proto__\",\"set\"))(r,[]),e=r instanceof Array}catch(t){}return function(r,n){return i(r),o(n),e?t(r,n):r.__proto__=n,r}}():void 0)},5623:(t,e,r)=>{\"use strict\";var n=r(2885),i=r(9697);t.exports=n?{}.toString:function(){return\"[object \"+i(this)+\"]\"}},9811:(t,e,r)=>{var n=r(8834),i=r(7475),o=r(941),u=TypeError;t.exports=function(t,e){var r,s;if(\"string\"===e&&i(r=t.toString)&&!o(s=n(r,t)))return s;if(i(r=t.valueOf)&&!o(s=n(r,t)))return s;if(\"string\"!==e&&i(r=t.toString)&&!o(s=n(r,t)))return s;throw u(\"Can't convert object to primitive value\")}},4058:t=>{t.exports={}},8219:(t,e,r)=>{var n=r(2119),i=TypeError;t.exports=function(t){if(n(t))throw i(\"Can't call method on \"+t);return t}},904:(t,e,r)=>{var n=r(2885),i=r(5988).f,o=r(2029),u=r(953),s=r(5623),a=r(9813)(\"toStringTag\");t.exports=function(t,e,r,c){if(t){var f=r?t:t.prototype;u(f,a)||i(f,a,{configurable:!0,value:e}),c&&!n&&o(f,\"toString\",s)}}},4262:(t,e,r)=>{var n=r(8726),i=r(9418),o=n(\"keys\");t.exports=function(t){return o[t]||(o[t]=i(t))}},3030:(t,e,r)=>{var n=r(1899),i=r(5609),o=\"__core-js_shared__\",u=n[o]||i(o,{});t.exports=u},8726:(t,e,r)=>{var n=r(2529),i=r(3030);(t.exports=function(t,e){return i[t]||(i[t]=void 0!==e?e:{})})(\"versions\",[]).push({version:\"3.31.0\",mode:n?\"pure\":\"global\",copyright:\"© 2014-2023 Denis Pushkarev (zloirock.ru)\",license:\"https://github.com/zloirock/core-js/blob/v3.31.0/LICENSE\",source:\"https://github.com/zloirock/core-js\"})},4620:(t,e,r)=>{var n=r(5329),i=r(2435),o=r(5803),u=r(8219),s=n(\"\".charAt),a=n(\"\".charCodeAt),c=n(\"\".slice),f=function(t){return function(e,r){var n,f,l=o(u(e)),h=i(r),p=l.length;return h<0||h>=p?t?\"\":void 0:(n=a(l,h))<55296||n>56319||h+1===p||(f=a(l,h+1))<56320||f>57343?t?s(l,h):n:t?c(l,h,h+2):f-56320+(n-55296<<10)+65536}};t.exports={codeAt:f(!1),charAt:f(!0)}},3093:(t,e,r)=>{var n=r(9417).PROPER,i=r(5981),o=r(3483);t.exports=function(t){return i((function(){return!!o[t]()||\"​᠎\"!==\"​᠎\"[t]()||n&&o[t].name!==t}))}},4853:(t,e,r)=>{var n=r(5329),i=r(8219),o=r(5803),u=r(3483),s=n(\"\".replace),a=RegExp(\"^[\"+u+\"]+\"),c=RegExp(\"(^|[^\"+u+\"])[\"+u+\"]+$\"),f=function(t){return function(e){var r=o(i(e));return 1&t&&(r=s(r,a,\"\")),2&t&&(r=s(r,c,\"$1\")),r}};t.exports={start:f(1),end:f(2),trim:f(3)}},3405:(t,e,r)=>{var n=r(3385),i=r(5981),o=r(1899).String;t.exports=!!Object.getOwnPropertySymbols&&!i((function(){var t=Symbol();return!o(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},9630:(t,e,r)=>{var n=r(8834),i=r(626),o=r(9813),u=r(5929);t.exports=function(){var t=i(\"Symbol\"),e=t&&t.prototype,r=e&&e.valueOf,s=o(\"toPrimitive\");e&&!e[s]&&u(e,s,(function(t){return n(r,this)}),{arity:1})}},2087:(t,e,r)=>{var n=r(626),i=r(5329),o=n(\"Symbol\"),u=o.keyFor,s=i(o.prototype.valueOf);t.exports=o.isRegisteredSymbol||function(t){try{return void 0!==u(s(t))}catch(t){return!1}}},6559:(t,e,r)=>{for(var n=r(8726),i=r(626),o=r(5329),u=r(6664),s=r(9813),a=i(\"Symbol\"),c=a.isWellKnownSymbol,f=i(\"Object\",\"getOwnPropertyNames\"),l=o(a.prototype.valueOf),h=n(\"wks\"),p=0,y=f(a),M=y.length;p<M;p++)try{var w=y[p];u(a[w])&&s(w)}catch(t){}t.exports=function(t){if(c&&c(t))return!0;try{for(var e=l(t),r=0,n=f(h),i=n.length;r<i;r++)if(h[n[r]]==e)return!0}catch(t){}return!1}},4680:(t,e,r)=>{var n=r(3405);t.exports=n&&!!Symbol.for&&!!Symbol.keyFor},9413:(t,e,r)=>{var n=r(2435),i=Math.max,o=Math.min;t.exports=function(t,e){var r=n(t);return r<0?i(r+e,0):o(r,e)}},4529:(t,e,r)=>{var n=r(7026),i=r(8219);t.exports=function(t){return n(i(t))}},2435:(t,e,r)=>{var n=r(5331);t.exports=function(t){var e=+t;return e!=e||0===e?0:n(e)}},3057:(t,e,r)=>{var n=r(2435),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},9678:(t,e,r)=>{var n=r(8219),i=Object;t.exports=function(t){return i(n(t))}},6935:(t,e,r)=>{var n=r(8834),i=r(941),o=r(6664),u=r(4229),s=r(9811),a=r(9813),c=TypeError,f=a(\"toPrimitive\");t.exports=function(t,e){if(!i(t)||o(t))return t;var r,a=u(t,f);if(a){if(void 0===e&&(e=\"default\"),r=n(a,t,e),!i(r)||o(r))return r;throw c(\"Can't convert object to primitive value\")}return void 0===e&&(e=\"number\"),s(t,e)}},3894:(t,e,r)=>{var n=r(6935),i=r(6664);t.exports=function(t){var e=n(t,\"string\");return i(e)?e:e+\"\"}},2885:(t,e,r)=>{var n={};n[r(9813)(\"toStringTag\")]=\"z\",t.exports=\"[object z]\"===String(n)},5803:(t,e,r)=>{var n=r(9697),i=String;t.exports=function(t){if(\"Symbol\"===n(t))throw TypeError(\"Cannot convert a Symbol value to a string\");return i(t)}},9826:t=>{var e=String;t.exports=function(t){try{return e(t)}catch(t){return\"Object\"}}},9418:(t,e,r)=>{var n=r(5329),i=0,o=Math.random(),u=n(1..toString);t.exports=function(t){return\"Symbol(\"+(void 0===t?\"\":t)+\")_\"+u(++i+o,36)}},2302:(t,e,r)=>{var n=r(3405);t.exports=n&&!Symbol.sham&&\"symbol\"==typeof Symbol.iterator},3937:(t,e,r)=>{var n=r(5746),i=r(5981);t.exports=n&&i((function(){return 42!=Object.defineProperty((function(){}),\"prototype\",{value:42,writable:!1}).prototype}))},7093:(t,e,r)=>{var n=r(1899),i=r(7475),o=n.WeakMap;t.exports=i(o)&&/native code/.test(String(o))},3464:(t,e,r)=>{var n=r(4058),i=r(953),o=r(1477),u=r(5988).f;t.exports=function(t){var e=n.Symbol||(n.Symbol={});i(e,t)||u(e,t,{value:o.f(t)})}},1477:(t,e,r)=>{var n=r(9813);e.f=n},9813:(t,e,r)=>{var n=r(1899),i=r(8726),o=r(953),u=r(9418),s=r(3405),a=r(2302),c=n.Symbol,f=i(\"wks\"),l=a?c.for||c:c&&c.withoutSetter||u;t.exports=function(t){return o(f,t)||(f[t]=s&&o(c,t)?c[t]:l(\"Symbol.\"+t)),f[t]}},3483:t=>{t.exports=\"\\t\\n\\v\\f\\r                　\\u2028\\u2029\\ufeff\"},5906:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(5981),o=r(1052),u=r(941),s=r(9678),a=r(623),c=r(6796),f=r(5449),l=r(4692),h=r(568),p=r(9813),y=r(3385),M=p(\"isConcatSpreadable\"),w=y>=51||!i((function(){var t=[];return t[M]=!1,t.concat()[0]!==t})),d=function(t){if(!u(t))return!1;var e=t[M];return void 0!==e?!!e:o(t)};n({target:\"Array\",proto:!0,arity:1,forced:!w||!h(\"concat\")},{concat:function(t){var e,r,n,i,o,u=s(this),h=l(u,0),p=0;for(e=-1,n=arguments.length;e<n;e++)if(d(o=-1===e?u:arguments[e]))for(i=a(o),c(p+i),r=0;r<i;r++,p++)r in o&&f(h,p,o[r]);else c(p+1),f(h,p++,o);return h.length=p,h}})},290:(t,e,r)=>{var n=r(6887),i=r(1860),o=r(8479);n({target:\"Array\",proto:!0},{fill:i}),o(\"fill\")},1501:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(3610).filter;n({target:\"Array\",proto:!0,forced:!r(568)(\"filter\")},{filter:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},833:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(3610).find,o=r(8479),u=\"find\",s=!0;u in[]&&Array(1)[u]((function(){s=!1})),n({target:\"Array\",proto:!0,forced:s},{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),o(u)},2437:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(6837);n({target:\"Array\",proto:!0,forced:[].forEach!=i},{forEach:i})},7690:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(1692).includes,o=r(5981),u=r(8479);n({target:\"Array\",proto:!0,forced:o((function(){return!Array(1).includes()}))},{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),u(\"includes\")},9076:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(7484),o=r(1692).indexOf,u=r(4194),s=i([].indexOf),a=!!s&&1/s([1],1,-0)<0;n({target:\"Array\",proto:!0,forced:a||!u(\"indexOf\")},{indexOf:function(t){var e=arguments.length>1?arguments[1]:void 0;return a?s(this,t,e)||0:o(this,t,e)}})},2988:(t,e,r)=>{r(6887)({target:\"Array\",stat:!0},{isArray:r(1052)})},6274:(t,e,r)=>{\"use strict\";var n=r(4529),i=r(8479),o=r(2077),u=r(5402),s=r(5988).f,a=r(5105),c=r(3538),f=r(2529),l=r(5746),h=\"Array Iterator\",p=u.set,y=u.getterFor(h);t.exports=a(Array,\"Array\",(function(t,e){p(this,{type:h,target:n(t),index:0,kind:e})}),(function(){var t=y(this),e=t.target,r=t.kind,n=t.index++;return!e||n>=e.length?(t.target=void 0,c(void 0,!0)):c(\"keys\"==r?n:\"values\"==r?e[n]:[n,e[n]],!1)}),\"values\");var M=o.Arguments=o.Array;if(i(\"keys\"),i(\"values\"),i(\"entries\"),!f&&l&&\"values\"!==M.name)try{s(M,\"name\",{value:\"values\"})}catch(t){}},8787:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(3610).map;n({target:\"Array\",proto:!0,forced:!r(568)(\"map\")},{map:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},1876:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(6499),o=r(4194),u=r(3385);n({target:\"Array\",proto:!0,forced:!r(6049)&&u>79&&u<83||!o(\"reduce\")},{reduce:function(t){var e=arguments.length;return i(this,t,e,e>1?arguments[1]:void 0)}})},186:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(1052),o=r(4284),u=r(941),s=r(9413),a=r(623),c=r(4529),f=r(5449),l=r(9813),h=r(568),p=r(3765),y=h(\"slice\"),M=l(\"species\"),w=Array,d=Math.max;n({target:\"Array\",proto:!0,forced:!y},{slice:function(t,e){var r,n,l,h=c(this),y=a(h),g=s(t,y),v=s(void 0===e?y:e,y);if(i(h)&&(r=h.constructor,(o(r)&&(r===w||i(r.prototype))||u(r)&&null===(r=r[M]))&&(r=void 0),r===w||void 0===r))return p(h,g,v);for(n=new(void 0===r?w:r)(d(v-g,0)),l=0;g<v;g++,l++)g in h&&f(n,l,h[g]);return n.length=l,n}})},6026:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(3610).some;n({target:\"Array\",proto:!0,forced:!r(4194)(\"some\")},{some:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}})},4115:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(5329),o=r(4883),u=r(9678),s=r(623),a=r(5863),c=r(5803),f=r(5981),l=r(1388),h=r(4194),p=r(4342),y=r(1046),M=r(3385),w=r(8938),d=[],g=i(d.sort),v=i(d.push),L=f((function(){d.sort(void 0)})),_=f((function(){d.sort(null)})),j=h(\"sort\"),N=!f((function(){if(M)return M<70;if(!(p&&p>3)){if(y)return!0;if(w)return w<603;var t,e,r,n,i=\"\";for(t=65;t<76;t++){switch(e=String.fromCharCode(t),t){case 66:case 69:case 70:case 72:r=3;break;case 68:case 71:r=4;break;default:r=2}for(n=0;n<47;n++)d.push({k:e+n,v:r})}for(d.sort((function(t,e){return e.v-t.v})),n=0;n<d.length;n++)e=d[n].k.charAt(0),i.charAt(i.length-1)!==e&&(i+=e);return\"DGBEFHACIJK\"!==i}}));n({target:\"Array\",proto:!0,forced:L||!_||!j||!N},{sort:function(t){void 0!==t&&o(t);var e=u(this);if(N)return void 0===t?g(e):g(e,t);var r,n,i=[],f=s(e);for(n=0;n<f;n++)n in e&&v(i,e[n]);for(l(i,function(t){return function(e,r){return void 0===r?-1:void 0===e?1:void 0!==t?+t(e,r)||0:c(e)>c(r)?1:-1}}(t)),r=s(i),n=0;n<r;)e[n]=i[n++];for(;n<f;)a(e,n++);return e}})},8084:()=>{},3381:(t,e,r)=>{var n=r(6887),i=r(8308);n({target:\"Function\",proto:!0,forced:Function.bind!==i},{bind:i})},2619:(t,e,r)=>{var n=r(6887),i=r(626),o=r(9730),u=r(8834),s=r(5329),a=r(5981),c=r(7475),f=r(6664),l=r(3765),h=r(3323),p=r(3405),y=String,M=i(\"JSON\",\"stringify\"),w=s(/./.exec),d=s(\"\".charAt),g=s(\"\".charCodeAt),v=s(\"\".replace),L=s(1..toString),_=/[\\uD800-\\uDFFF]/g,j=/^[\\uD800-\\uDBFF]$/,N=/^[\\uDC00-\\uDFFF]$/,x=!p||a((function(){var t=i(\"Symbol\")();return\"[null]\"!=M([t])||\"{}\"!=M({a:t})||\"{}\"!=M(Object(t))})),m=a((function(){return'\"\\\\udf06\\\\ud834\"'!==M(\"\\udf06\\ud834\")||'\"\\\\udead\"'!==M(\"\\udead\")})),D=function(t,e){var r=l(arguments),n=h(e);if(c(n)||void 0!==t&&!f(t))return r[1]=function(t,e){if(c(n)&&(e=u(n,this,y(t),e)),!f(e))return e},o(M,null,r)},I=function(t,e,r){var n=d(r,e-1),i=d(r,e+1);return w(j,t)&&!w(N,i)||w(N,t)&&!w(j,n)?\"\\\\u\"+L(g(t,0),16):t};M&&n({target:\"JSON\",stat:!0,arity:3,forced:x||m},{stringify:function(t,e,r){var n=l(arguments),i=o(x?D:M,null,n);return m&&\"string\"==typeof i?v(i,_,I):i}})},9120:(t,e,r)=>{var n=r(1899);r(904)(n.JSON,\"JSON\",!0)},5327:()=>{},9221:(t,e,r)=>{var n=r(6887),i=r(4420);n({target:\"Object\",stat:!0,arity:2,forced:Object.assign!==i},{assign:i})},6450:(t,e,r)=>{var n=r(6887),i=r(5746),o=r(5988).f;n({target:\"Object\",stat:!0,forced:Object.defineProperty!==o,sham:!i},{defineProperty:o})},7144:(t,e,r)=>{var n=r(6887),i=r(3405),o=r(5981),u=r(7857),s=r(9678);n({target:\"Object\",stat:!0,forced:!i||o((function(){u.f(1)}))},{getOwnPropertySymbols:function(t){var e=u.f;return e?e(s(t)):[]}})},1724:(t,e,r)=>{var n=r(6887),i=r(9678),o=r(4771);n({target:\"Object\",stat:!0,forced:r(5981)((function(){o(1)}))},{keys:function(t){return o(i(t))}})},5967:()=>{},1502:()=>{},1035:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(5329),o=r(344),u=r(8219),s=r(5803),a=r(7772),c=i(\"\".indexOf);n({target:\"String\",proto:!0,forced:!a(\"includes\")},{includes:function(t){return!!~c(s(u(this)),s(o(t)),arguments.length>1?arguments[1]:void 0)}})},7971:(t,e,r)=>{\"use strict\";var n=r(4620).charAt,i=r(5803),o=r(5402),u=r(5105),s=r(3538),a=\"String Iterator\",c=o.set,f=o.getterFor(a);u(String,\"String\",(function(t){c(this,{type:a,string:i(t),index:0})}),(function(){var t,e=f(this),r=e.string,i=e.index;return i>=r.length?s(void 0,!0):(t=n(r,i),e.index+=t.length,s(t,!1))}))},4761:(t,e,r)=>{\"use strict\";var n,i=r(6887),o=r(7484),u=r(9677).f,s=r(3057),a=r(5803),c=r(344),f=r(8219),l=r(7772),h=r(2529),p=o(\"\".startsWith),y=o(\"\".slice),M=Math.min,w=l(\"startsWith\");i({target:\"String\",proto:!0,forced:!!(h||w||(n=u(String.prototype,\"startsWith\"),!n||n.writable))&&!w},{startsWith:function(t){var e=a(f(this));c(t);var r=s(M(arguments.length>1?arguments[1]:void 0,e.length)),n=a(t);return p?p(e,n,r):y(e,r,r+n.length)===n}})},6371:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(4853);n({target:\"String\",proto:!0,forced:r(3093)(\"trim\")},{trim:function(){return i(this)}})},8555:(t,e,r)=>{r(3464)(\"asyncIterator\")},8616:(t,e,r)=>{\"use strict\";var n=r(6887),i=r(1899),o=r(8834),u=r(5329),s=r(2529),a=r(5746),c=r(3405),f=r(5981),l=r(953),h=r(7046),p=r(6059),y=r(4529),M=r(3894),w=r(5803),d=r(1887),g=r(9290),v=r(4771),L=r(946),_=r(684),j=r(7857),N=r(9677),x=r(5988),m=r(9938),D=r(6760),I=r(5929),S=r(9202),b=r(8726),A=r(4262),C=r(7748),T=r(9418),E=r(9813),z=r(1477),O=r(3464),k=r(9630),U=r(904),Y=r(5402),B=r(3610).forEach,Q=A(\"hidden\"),R=\"Symbol\",F=\"prototype\",P=Y.set,G=Y.getterFor(R),W=Object[F],q=i.Symbol,J=q&&q[F],Z=i.TypeError,$=i.QObject,X=N.f,V=x.f,H=_.f,K=D.f,tt=u([].push),et=b(\"symbols\"),rt=b(\"op-symbols\"),nt=b(\"wks\"),it=!$||!$[F]||!$[F].findChild,ot=a&&f((function(){return 7!=g(V({},\"a\",{get:function(){return V(this,\"a\",{value:7}).a}})).a}))?function(t,e,r){var n=X(W,e);n&&delete W[e],V(t,e,r),n&&t!==W&&V(W,e,n)}:V,ut=function(t,e){var r=et[t]=g(J);return P(r,{type:R,tag:t,description:e}),a||(r.description=e),r},st=function(t,e,r){t===W&&st(rt,e,r),p(t);var n=M(e);return p(r),l(et,n)?(r.enumerable?(l(t,Q)&&t[Q][n]&&(t[Q][n]=!1),r=g(r,{enumerable:d(0,!1)})):(l(t,Q)||V(t,Q,d(1,{})),t[Q][n]=!0),ot(t,n,r)):V(t,n,r)},at=function(t,e){p(t);var r=y(e),n=v(r).concat(ht(r));return B(n,(function(e){a&&!o(ct,r,e)||st(t,e,r[e])})),t},ct=function(t){var e=M(t),r=o(K,this,e);return!(this===W&&l(et,e)&&!l(rt,e))&&(!(r||!l(this,e)||!l(et,e)||l(this,Q)&&this[Q][e])||r)},ft=function(t,e){var r=y(t),n=M(e);if(r!==W||!l(et,n)||l(rt,n)){var i=X(r,n);return!i||!l(et,n)||l(r,Q)&&r[Q][n]||(i.enumerable=!0),i}},lt=function(t){var e=H(y(t)),r=[];return B(e,(function(t){l(et,t)||l(C,t)||tt(r,t)})),r},ht=function(t){var e=t===W,r=H(e?rt:y(t)),n=[];return B(r,(function(t){!l(et,t)||e&&!l(W,t)||tt(n,et[t])})),n};c||(I(J=(q=function(){if(h(J,this))throw Z(\"Symbol is not a constructor\");var t=arguments.length&&void 0!==arguments[0]?w(arguments[0]):void 0,e=T(t),r=function(t){this===W&&o(r,rt,t),l(this,Q)&&l(this[Q],e)&&(this[Q][e]=!1),ot(this,e,d(1,t))};return a&&it&&ot(W,e,{configurable:!0,set:r}),ut(e,t)})[F],\"toString\",(function(){return G(this).tag})),I(q,\"withoutSetter\",(function(t){return ut(T(t),t)})),D.f=ct,x.f=st,m.f=at,N.f=ft,L.f=_.f=lt,j.f=ht,z.f=function(t){return ut(E(t),t)},a&&(S(J,\"description\",{configurable:!0,get:function(){return G(this).description}}),s||I(W,\"propertyIsEnumerable\",ct,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!c,sham:!c},{Symbol:q}),B(v(nt),(function(t){O(t)})),n({target:R,stat:!0,forced:!c},{useSetter:function(){it=!0},useSimple:function(){it=!1}}),n({target:\"Object\",stat:!0,forced:!c,sham:!a},{create:function(t,e){return void 0===e?g(t):at(g(t),e)},defineProperty:st,defineProperties:at,getOwnPropertyDescriptor:ft}),n({target:\"Object\",stat:!0,forced:!c},{getOwnPropertyNames:lt}),k(),U(q,R),C[Q]=!0},2615:()=>{},4523:(t,e,r)=>{var n=r(6887),i=r(626),o=r(953),u=r(5803),s=r(8726),a=r(4680),c=s(\"string-to-symbol-registry\"),f=s(\"symbol-to-string-registry\");n({target:\"Symbol\",stat:!0,forced:!a},{for:function(t){var e=u(t);if(o(c,e))return c[e];var r=i(\"Symbol\")(e);return c[e]=r,f[r]=e,r}})},1732:(t,e,r)=>{r(3464)(\"hasInstance\")},5903:(t,e,r)=>{r(3464)(\"isConcatSpreadable\")},1825:(t,e,r)=>{r(3464)(\"iterator\")},5824:(t,e,r)=>{r(8616),r(4523),r(8608),r(2619),r(7144)},8608:(t,e,r)=>{var n=r(6887),i=r(953),o=r(6664),u=r(9826),s=r(8726),a=r(4680),c=s(\"symbol-to-string-registry\");n({target:\"Symbol\",stat:!0,forced:!a},{keyFor:function(t){if(!o(t))throw TypeError(u(t)+\" is not a symbol\");if(i(c,t))return c[t]}})},5915:(t,e,r)=>{r(3464)(\"matchAll\")},8394:(t,e,r)=>{r(3464)(\"match\")},1766:(t,e,r)=>{r(3464)(\"replace\")},2737:(t,e,r)=>{r(3464)(\"search\")},9911:(t,e,r)=>{r(3464)(\"species\")},4315:(t,e,r)=>{r(3464)(\"split\")},3131:(t,e,r)=>{var n=r(3464),i=r(9630);n(\"toPrimitive\"),i()},4714:(t,e,r)=>{var n=r(626),i=r(3464),o=r(904);i(\"toStringTag\"),o(n(\"Symbol\"),\"Symbol\")},659:(t,e,r)=>{r(3464)(\"unscopables\")},7522:(t,e,r)=>{var n=r(9813),i=r(5988).f,o=n(\"metadata\"),u=Function.prototype;void 0===u[o]&&i(u,o,{value:null})},8783:(t,e,r)=>{r(3464)(\"asyncDispose\")},3975:(t,e,r)=>{r(3464)(\"dispose\")},7618:(t,e,r)=>{r(6887)({target:\"Symbol\",stat:!0},{isRegisteredSymbol:r(2087)})},2731:(t,e,r)=>{r(6887)({target:\"Symbol\",stat:!0,name:\"isRegisteredSymbol\"},{isRegistered:r(2087)})},6989:(t,e,r)=>{r(6887)({target:\"Symbol\",stat:!0,forced:!0},{isWellKnownSymbol:r(6559)})},5605:(t,e,r)=>{r(6887)({target:\"Symbol\",stat:!0,name:\"isWellKnownSymbol\",forced:!0},{isWellKnown:r(6559)})},5799:(t,e,r)=>{r(3464)(\"matcher\")},1943:(t,e,r)=>{r(3464)(\"metadataKey\")},5414:(t,e,r)=>{r(3464)(\"metadata\")},6774:(t,e,r)=>{r(3464)(\"observable\")},620:(t,e,r)=>{r(3464)(\"patternMatch\")},6172:(t,e,r)=>{r(3464)(\"replaceAll\")},7634:(t,e,r)=>{r(6274);var n=r(3281),i=r(1899),o=r(9697),u=r(2029),s=r(2077),a=r(9813)(\"toStringTag\");for(var c in n){var f=i[c],l=f&&f.prototype;l&&o(l)!==a&&u(l,a,c),s[c]=s.Array}},3363:(t,e,r)=>{var n=r(4034);t.exports=n},2908:(t,e,r)=>{var n=r(2710);t.exports=n},9216:(t,e,r)=>{var n=r(9324);t.exports=n},8196:(t,e,r)=>{var n=r(6246);t.exports=n},8065:(t,e,r)=>{var n=r(6043);t.exports=n},7448:(t,e,r)=>{r(7634);var n=r(9697),i=r(953),o=r(7046),u=r(2908),s=Array.prototype,a={DOMTokenList:!0,NodeList:!0};t.exports=function(t){var e=t.entries;return t===s||o(s,t)&&e===s.entries||i(a,n(t))?u:e}},9743:(t,e,r)=>{var n=r(446);t.exports=n},1955:(t,e,r)=>{var n=r(2480);t.exports=n},1577:(t,e,r)=>{var n=r(2236);t.exports=n},6279:(t,e,r)=>{r(7634);var n=r(9697),i=r(953),o=r(7046),u=r(9216),s=Array.prototype,a={DOMTokenList:!0,NodeList:!0};t.exports=function(t){var e=t.forEach;return t===s||o(s,t)&&e===s.forEach||i(a,n(t))?u:e}},3778:(t,e,r)=>{var n=r(8557);t.exports=n},9373:(t,e,r)=>{var n=r(4570);t.exports=n},1798:(t,e,r)=>{var n=r(8287);t.exports=n},2527:(t,e,r)=>{var n=r(8025);t.exports=n},2073:(t,e,r)=>{var n=r(9601);t.exports=n},5286:(t,e,r)=>{var n=r(8299);t.exports=n},2856:(t,e,r)=>{var n=r(9355);t.exports=n},5178:(t,e,r)=>{var n=r(1611);t.exports=n},6361:(t,e,r)=>{var n=r(2774);t.exports=n},8933:(t,e,r)=>{var n=r(4426);t.exports=n},3383:(t,e,r)=>{var n=r(5999);t.exports=n},1910:(t,e,r)=>{var n=r(8171);t.exports=n},3059:(t,e,r)=>{var n=r(8494);t.exports=n},2547:(t,e,r)=>{var n=r(7473);r(7634),t.exports=n},6509:(t,e,r)=>{var n=r(4227);r(7634),t.exports=n},5774:(t,e,r)=>{var n=r(2978);t.exports=n},8269:function(t,e,r){var n;n=void 0!==r.g?r.g:this,t.exports=function(t){if(t.CSS&&t.CSS.escape)return t.CSS.escape;var e=function(t){if(0==arguments.length)throw new TypeError(\"`CSS.escape` requires an argument.\");for(var e,r=String(t),n=r.length,i=-1,o=\"\",u=r.charCodeAt(0);++i<n;)0!=(e=r.charCodeAt(i))?o+=e>=1&&e<=31||127==e||0==i&&e>=48&&e<=57||1==i&&e>=48&&e<=57&&45==u?\"\\\\\"+e.toString(16)+\" \":0==i&&1==n&&45==e||!(e>=128||45==e||95==e||e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122)?\"\\\\\"+r.charAt(i):r.charAt(i):o+=\"�\";return o};return t.CSS||(t.CSS={}),t.CSS.escape=e,e}(n)},645:(t,e)=>{e.read=function(t,e,r,n,i){var o,u,s=8*i-n-1,a=(1<<s)-1,c=a>>1,f=-7,l=r?i-1:0,h=r?-1:1,p=t[e+l];for(l+=h,o=p&(1<<-f)-1,p>>=-f,f+=s;f>0;o=256*o+t[e+l],l+=h,f-=8);for(u=o&(1<<-f)-1,o>>=-f,f+=n;f>0;u=256*u+t[e+l],l+=h,f-=8);if(0===o)o=1-c;else{if(o===a)return u?NaN:1/0*(p?-1:1);u+=Math.pow(2,n),o-=c}return(p?-1:1)*u*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var u,s,a,c=8*o-i-1,f=(1<<c)-1,l=f>>1,h=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,y=n?1:-1,M=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,u=f):(u=Math.floor(Math.log(e)/Math.LN2),e*(a=Math.pow(2,-u))<1&&(u--,a*=2),(e+=u+l>=1?h/a:h*Math.pow(2,1-l))*a>=2&&(u++,a/=2),u+l>=f?(s=0,u=f):u+l>=1?(s=(e*a-1)*Math.pow(2,i),u+=l):(s=e*Math.pow(2,l-1)*Math.pow(2,i),u=0));i>=8;t[r+p]=255&s,p+=y,s/=256,i-=8);for(u=u<<i|s,c+=i;c>0;t[r+p]=255&u,p+=y,u/=256,c-=8);t[r+p-y]|=128*M}},3393:function(t){t.exports=function(){\"use strict\";var t=Array.prototype.slice;function e(t,e){e&&(t.prototype=Object.create(e.prototype)),t.prototype.constructor=t}function r(t){return u(t)?t:J(t)}function n(t){return s(t)?t:Z(t)}function i(t){return a(t)?t:$(t)}function o(t){return u(t)&&!c(t)?t:X(t)}function u(t){return!(!t||!t[l])}function s(t){return!(!t||!t[h])}function a(t){return!(!t||!t[p])}function c(t){return s(t)||a(t)}function f(t){return!(!t||!t[y])}e(n,r),e(i,r),e(o,r),r.isIterable=u,r.isKeyed=s,r.isIndexed=a,r.isAssociative=c,r.isOrdered=f,r.Keyed=n,r.Indexed=i,r.Set=o;var l=\"@@__IMMUTABLE_ITERABLE__@@\",h=\"@@__IMMUTABLE_KEYED__@@\",p=\"@@__IMMUTABLE_INDEXED__@@\",y=\"@@__IMMUTABLE_ORDERED__@@\",M=\"delete\",w=5,d=1<<w,g=d-1,v={},L={value:!1},_={value:!1};function j(t){return t.value=!1,t}function N(t){t&&(t.value=!0)}function x(){}function m(t,e){e=e||0;for(var r=Math.max(0,t.length-e),n=new Array(r),i=0;i<r;i++)n[i]=t[i+e];return n}function D(t){return void 0===t.size&&(t.size=t.__iterate(S)),t.size}function I(t,e){if(\"number\"!=typeof e){var r=e>>>0;if(\"\"+r!==e||4294967295===r)return NaN;e=r}return e<0?D(t)+e:e}function S(){return!0}function b(t,e,r){return(0===t||void 0!==r&&t<=-r)&&(void 0===e||void 0!==r&&e>=r)}function A(t,e){return T(t,e,0)}function C(t,e){return T(t,e,e)}function T(t,e,r){return void 0===t?r:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}var E=0,z=1,O=2,k=\"function\"==typeof Symbol&&Symbol.iterator,U=\"@@iterator\",Y=k||U;function B(t){this.next=t}function Q(t,e,r,n){var i=0===t?e:1===t?r:[e,r];return n?n.value=i:n={value:i,done:!1},n}function R(){return{value:void 0,done:!0}}function F(t){return!!W(t)}function P(t){return t&&\"function\"==typeof t.next}function G(t){var e=W(t);return e&&e.call(t)}function W(t){var e=t&&(k&&t[k]||t[U]);if(\"function\"==typeof e)return e}function q(t){return t&&\"number\"==typeof t.length}function J(t){return null==t?ut():u(t)?t.toSeq():ct(t)}function Z(t){return null==t?ut().toKeyedSeq():u(t)?s(t)?t.toSeq():t.fromEntrySeq():st(t)}function $(t){return null==t?ut():u(t)?s(t)?t.entrySeq():t.toIndexedSeq():at(t)}function X(t){return(null==t?ut():u(t)?s(t)?t.entrySeq():t:at(t)).toSetSeq()}B.prototype.toString=function(){return\"[Iterator]\"},B.KEYS=E,B.VALUES=z,B.ENTRIES=O,B.prototype.inspect=B.prototype.toSource=function(){return this.toString()},B.prototype[Y]=function(){return this},e(J,r),J.of=function(){return J(arguments)},J.prototype.toSeq=function(){return this},J.prototype.toString=function(){return this.__toString(\"Seq {\",\"}\")},J.prototype.cacheResult=function(){return!this._cache&&this.__iterateUncached&&(this._cache=this.entrySeq().toArray(),this.size=this._cache.length),this},J.prototype.__iterate=function(t,e){return lt(this,t,e,!0)},J.prototype.__iterator=function(t,e){return ht(this,t,e,!0)},e(Z,J),Z.prototype.toKeyedSeq=function(){return this},e($,J),$.of=function(){return $(arguments)},$.prototype.toIndexedSeq=function(){return this},$.prototype.toString=function(){return this.__toString(\"Seq [\",\"]\")},$.prototype.__iterate=function(t,e){return lt(this,t,e,!1)},$.prototype.__iterator=function(t,e){return ht(this,t,e,!1)},e(X,J),X.of=function(){return X(arguments)},X.prototype.toSetSeq=function(){return this},J.isSeq=ot,J.Keyed=Z,J.Set=X,J.Indexed=$;var V,H,K,tt=\"@@__IMMUTABLE_SEQ__@@\";function et(t){this._array=t,this.size=t.length}function rt(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function nt(t){this._iterable=t,this.size=t.length||t.size}function it(t){this._iterator=t,this._iteratorCache=[]}function ot(t){return!(!t||!t[tt])}function ut(){return V||(V=new et([]))}function st(t){var e=Array.isArray(t)?new et(t).fromEntrySeq():P(t)?new it(t).fromEntrySeq():F(t)?new nt(t).fromEntrySeq():\"object\"==typeof t?new rt(t):void 0;if(!e)throw new TypeError(\"Expected Array or iterable object of [k, v] entries, or keyed object: \"+t);return e}function at(t){var e=ft(t);if(!e)throw new TypeError(\"Expected Array or iterable object of values: \"+t);return e}function ct(t){var e=ft(t)||\"object\"==typeof t&&new rt(t);if(!e)throw new TypeError(\"Expected Array or iterable object of values, or keyed object: \"+t);return e}function ft(t){return q(t)?new et(t):P(t)?new it(t):F(t)?new nt(t):void 0}function lt(t,e,r,n){var i=t._cache;if(i){for(var o=i.length-1,u=0;u<=o;u++){var s=i[r?o-u:u];if(!1===e(s[1],n?s[0]:u,t))return u+1}return u}return t.__iterateUncached(e,r)}function ht(t,e,r,n){var i=t._cache;if(i){var o=i.length-1,u=0;return new B((function(){var t=i[r?o-u:u];return u++>o?R():Q(e,n?t[0]:u-1,t[1])}))}return t.__iteratorUncached(e,r)}function pt(t,e){return e?yt(e,t,\"\",{\"\":t}):Mt(t)}function yt(t,e,r,n){return Array.isArray(e)?t.call(n,r,$(e).map((function(r,n){return yt(t,r,n,e)}))):wt(e)?t.call(n,r,Z(e).map((function(r,n){return yt(t,r,n,e)}))):e}function Mt(t){return Array.isArray(t)?$(t).map(Mt).toList():wt(t)?Z(t).map(Mt).toMap():t}function wt(t){return t&&(t.constructor===Object||void 0===t.constructor)}function dt(t,e){if(t===e||t!=t&&e!=e)return!0;if(!t||!e)return!1;if(\"function\"==typeof t.valueOf&&\"function\"==typeof e.valueOf){if((t=t.valueOf())===(e=e.valueOf())||t!=t&&e!=e)return!0;if(!t||!e)return!1}return!(\"function\"!=typeof t.equals||\"function\"!=typeof e.equals||!t.equals(e))}function gt(t,e){if(t===e)return!0;if(!u(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||s(t)!==s(e)||a(t)!==a(e)||f(t)!==f(e))return!1;if(0===t.size&&0===e.size)return!0;var r=!c(t);if(f(t)){var n=t.entries();return e.every((function(t,e){var i=n.next().value;return i&&dt(i[1],t)&&(r||dt(i[0],e))}))&&n.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)\"function\"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var l=!0,h=e.__iterate((function(e,n){if(r?!t.has(e):i?!dt(e,t.get(n,v)):!dt(t.get(n,v),e))return l=!1,!1}));return l&&t.size===h}function vt(t,e){if(!(this instanceof vt))return new vt(t,e);if(this._value=t,this.size=void 0===e?1/0:Math.max(0,e),0===this.size){if(H)return H;H=this}}function Lt(t,e){if(!t)throw new Error(e)}function _t(t,e,r){if(!(this instanceof _t))return new _t(t,e,r);if(Lt(0!==r,\"Cannot step a Range by 0\"),t=t||0,void 0===e&&(e=1/0),r=void 0===r?1:Math.abs(r),e<t&&(r=-r),this._start=t,this._end=e,this._step=r,this.size=Math.max(0,Math.ceil((e-t)/r-1)+1),0===this.size){if(K)return K;K=this}}function jt(){throw TypeError(\"Abstract\")}function Nt(){}function xt(){}function mt(){}J.prototype[tt]=!0,e(et,$),et.prototype.get=function(t,e){return this.has(t)?this._array[I(this,t)]:e},et.prototype.__iterate=function(t,e){for(var r=this._array,n=r.length-1,i=0;i<=n;i++)if(!1===t(r[e?n-i:i],i,this))return i+1;return i},et.prototype.__iterator=function(t,e){var r=this._array,n=r.length-1,i=0;return new B((function(){return i>n?R():Q(t,i,r[e?n-i++:i++])}))},e(rt,Z),rt.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},rt.prototype.has=function(t){return this._object.hasOwnProperty(t)},rt.prototype.__iterate=function(t,e){for(var r=this._object,n=this._keys,i=n.length-1,o=0;o<=i;o++){var u=n[e?i-o:o];if(!1===t(r[u],u,this))return o+1}return o},rt.prototype.__iterator=function(t,e){var r=this._object,n=this._keys,i=n.length-1,o=0;return new B((function(){var u=n[e?i-o:o];return o++>i?R():Q(t,u,r[u])}))},rt.prototype[y]=!0,e(nt,$),nt.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);var r=G(this._iterable),n=0;if(P(r))for(var i;!(i=r.next()).done&&!1!==t(i.value,n++,this););return n},nt.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=G(this._iterable);if(!P(r))return new B(R);var n=0;return new B((function(){var e=r.next();return e.done?e:Q(t,n++,e.value)}))},e(it,$),it.prototype.__iterateUncached=function(t,e){if(e)return this.cacheResult().__iterate(t,e);for(var r,n=this._iterator,i=this._iteratorCache,o=0;o<i.length;)if(!1===t(i[o],o++,this))return o;for(;!(r=n.next()).done;){var u=r.value;if(i[o]=u,!1===t(u,o++,this))break}return o},it.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var r=this._iterator,n=this._iteratorCache,i=0;return new B((function(){if(i>=n.length){var e=r.next();if(e.done)return e;n[i]=e.value}return Q(t,i,n[i++])}))},e(vt,$),vt.prototype.toString=function(){return 0===this.size?\"Repeat []\":\"Repeat [ \"+this._value+\" \"+this.size+\" times ]\"},vt.prototype.get=function(t,e){return this.has(t)?this._value:e},vt.prototype.includes=function(t){return dt(this._value,t)},vt.prototype.slice=function(t,e){var r=this.size;return b(t,e,r)?this:new vt(this._value,C(e,r)-A(t,r))},vt.prototype.reverse=function(){return this},vt.prototype.indexOf=function(t){return dt(this._value,t)?0:-1},vt.prototype.lastIndexOf=function(t){return dt(this._value,t)?this.size:-1},vt.prototype.__iterate=function(t,e){for(var r=0;r<this.size;r++)if(!1===t(this._value,r,this))return r+1;return r},vt.prototype.__iterator=function(t,e){var r=this,n=0;return new B((function(){return n<r.size?Q(t,n++,r._value):R()}))},vt.prototype.equals=function(t){return t instanceof vt?dt(this._value,t._value):gt(t)},e(_t,$),_t.prototype.toString=function(){return 0===this.size?\"Range []\":\"Range [ \"+this._start+\"...\"+this._end+(1!==this._step?\" by \"+this._step:\"\")+\" ]\"},_t.prototype.get=function(t,e){return this.has(t)?this._start+I(this,t)*this._step:e},_t.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e<this.size&&e===Math.floor(e)},_t.prototype.slice=function(t,e){return b(t,e,this.size)?this:(t=A(t,this.size),(e=C(e,this.size))<=t?new _t(0,0):new _t(this.get(t,this._end),this.get(e,this._end),this._step))},_t.prototype.indexOf=function(t){var e=t-this._start;if(e%this._step==0){var r=e/this._step;if(r>=0&&r<this.size)return r}return-1},_t.prototype.lastIndexOf=function(t){return this.indexOf(t)},_t.prototype.__iterate=function(t,e){for(var r=this.size-1,n=this._step,i=e?this._start+r*n:this._start,o=0;o<=r;o++){if(!1===t(i,o,this))return o+1;i+=e?-n:n}return o},_t.prototype.__iterator=function(t,e){var r=this.size-1,n=this._step,i=e?this._start+r*n:this._start,o=0;return new B((function(){var u=i;return i+=e?-n:n,o>r?R():Q(t,o++,u)}))},_t.prototype.equals=function(t){return t instanceof _t?this._start===t._start&&this._end===t._end&&this._step===t._step:gt(this,t)},e(jt,r),e(Nt,jt),e(xt,jt),e(mt,jt),jt.Keyed=Nt,jt.Indexed=xt,jt.Set=mt;var Dt=\"function\"==typeof Math.imul&&-2===Math.imul(4294967295,2)?Math.imul:function(t,e){var r=65535&(t|=0),n=65535&(e|=0);return r*n+((t>>>16)*n+r*(e>>>16)<<16>>>0)|0};function It(t){return t>>>1&1073741824|3221225471&t}function St(t){if(!1===t||null==t)return 0;if(\"function\"==typeof t.valueOf&&(!1===(t=t.valueOf())||null==t))return 0;if(!0===t)return 1;var e=typeof t;if(\"number\"===e){if(t!=t||t===1/0)return 0;var r=0|t;for(r!==t&&(r^=4294967295*t);t>4294967295;)r^=t/=4294967295;return It(r)}if(\"string\"===e)return t.length>Bt?bt(t):At(t);if(\"function\"==typeof t.hashCode)return t.hashCode();if(\"object\"===e)return Ct(t);if(\"function\"==typeof t.toString)return At(t.toString());throw new Error(\"Value type \"+e+\" cannot be hashed.\")}function bt(t){var e=Ft[t];return void 0===e&&(e=At(t),Rt===Qt&&(Rt=0,Ft={}),Rt++,Ft[t]=e),e}function At(t){for(var e=0,r=0;r<t.length;r++)e=31*e+t.charCodeAt(r)|0;return It(e)}function Ct(t){var e;if(kt&&void 0!==(e=Ot.get(t)))return e;if(void 0!==(e=t[Yt]))return e;if(!Et){if(void 0!==(e=t.propertyIsEnumerable&&t.propertyIsEnumerable[Yt]))return e;if(void 0!==(e=zt(t)))return e}if(e=++Ut,1073741824&Ut&&(Ut=0),kt)Ot.set(t,e);else{if(void 0!==Tt&&!1===Tt(t))throw new Error(\"Non-extensible objects are not allowed as keys.\");if(Et)Object.defineProperty(t,Yt,{enumerable:!1,configurable:!1,writable:!1,value:e});else if(void 0!==t.propertyIsEnumerable&&t.propertyIsEnumerable===t.constructor.prototype.propertyIsEnumerable)t.propertyIsEnumerable=function(){return this.constructor.prototype.propertyIsEnumerable.apply(this,arguments)},t.propertyIsEnumerable[Yt]=e;else{if(void 0===t.nodeType)throw new Error(\"Unable to set a non-enumerable property on object.\");t[Yt]=e}}return e}var Tt=Object.isExtensible,Et=function(){try{return Object.defineProperty({},\"@\",{}),!0}catch(t){return!1}}();function zt(t){if(t&&t.nodeType>0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}var Ot,kt=\"function\"==typeof WeakMap;kt&&(Ot=new WeakMap);var Ut=0,Yt=\"__immutablehash__\";\"function\"==typeof Symbol&&(Yt=Symbol(Yt));var Bt=16,Qt=255,Rt=0,Ft={};function Pt(t){Lt(t!==1/0,\"Cannot perform this action with an infinite size.\")}function Gt(t){return null==t?ie():Wt(t)&&!f(t)?t:ie().withMutations((function(e){var r=n(t);Pt(r.size),r.forEach((function(t,r){return e.set(r,t)}))}))}function Wt(t){return!(!t||!t[Jt])}e(Gt,Nt),Gt.of=function(){var e=t.call(arguments,0);return ie().withMutations((function(t){for(var r=0;r<e.length;r+=2){if(r+1>=e.length)throw new Error(\"Missing value for key: \"+e[r]);t.set(e[r],e[r+1])}}))},Gt.prototype.toString=function(){return this.__toString(\"Map {\",\"}\")},Gt.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Gt.prototype.set=function(t,e){return oe(this,t,e)},Gt.prototype.setIn=function(t,e){return this.updateIn(t,v,(function(){return e}))},Gt.prototype.remove=function(t){return oe(this,t,v)},Gt.prototype.deleteIn=function(t){return this.updateIn(t,(function(){return v}))},Gt.prototype.update=function(t,e,r){return 1===arguments.length?t(this):this.updateIn([t],e,r)},Gt.prototype.updateIn=function(t,e,r){r||(r=e,e=void 0);var n=we(this,_r(t),e,r);return n===v?void 0:n},Gt.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):ie()},Gt.prototype.merge=function(){return he(this,void 0,arguments)},Gt.prototype.mergeWith=function(e){return he(this,e,t.call(arguments,1))},Gt.prototype.mergeIn=function(e){var r=t.call(arguments,1);return this.updateIn(e,ie(),(function(t){return\"function\"==typeof t.merge?t.merge.apply(t,r):r[r.length-1]}))},Gt.prototype.mergeDeep=function(){return he(this,pe,arguments)},Gt.prototype.mergeDeepWith=function(e){var r=t.call(arguments,1);return he(this,ye(e),r)},Gt.prototype.mergeDeepIn=function(e){var r=t.call(arguments,1);return this.updateIn(e,ie(),(function(t){return\"function\"==typeof t.mergeDeep?t.mergeDeep.apply(t,r):r[r.length-1]}))},Gt.prototype.sort=function(t){return Fe(fr(this,t))},Gt.prototype.sortBy=function(t,e){return Fe(fr(this,e,t))},Gt.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Gt.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new x)},Gt.prototype.asImmutable=function(){return this.__ensureOwner()},Gt.prototype.wasAltered=function(){return this.__altered},Gt.prototype.__iterator=function(t,e){return new te(this,t,e)},Gt.prototype.__iterate=function(t,e){var r=this,n=0;return this._root&&this._root.iterate((function(e){return n++,t(e[1],e[0],r)}),e),n},Gt.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?ne(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Gt.isMap=Wt;var qt,Jt=\"@@__IMMUTABLE_MAP__@@\",Zt=Gt.prototype;function $t(t,e){this.ownerID=t,this.entries=e}function Xt(t,e,r){this.ownerID=t,this.bitmap=e,this.nodes=r}function Vt(t,e,r){this.ownerID=t,this.count=e,this.nodes=r}function Ht(t,e,r){this.ownerID=t,this.keyHash=e,this.entries=r}function Kt(t,e,r){this.ownerID=t,this.keyHash=e,this.entry=r}function te(t,e,r){this._type=e,this._reverse=r,this._stack=t._root&&re(t._root)}function ee(t,e){return Q(t,e[0],e[1])}function re(t,e){return{node:t,index:0,__prev:e}}function ne(t,e,r,n){var i=Object.create(Zt);return i.size=t,i._root=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function ie(){return qt||(qt=ne(0))}function oe(t,e,r){var n,i;if(t._root){var o=j(L),u=j(_);if(n=ue(t._root,t.__ownerID,0,void 0,e,r,o,u),!u.value)return t;i=t.size+(o.value?r===v?-1:1:0)}else{if(r===v)return t;i=1,n=new $t(t.__ownerID,[[e,r]])}return t.__ownerID?(t.size=i,t._root=n,t.__hash=void 0,t.__altered=!0,t):n?ne(i,n):ie()}function ue(t,e,r,n,i,o,u,s){return t?t.update(e,r,n,i,o,u,s):o===v?t:(N(s),N(u),new Kt(e,n,[i,o]))}function se(t){return t.constructor===Kt||t.constructor===Ht}function ae(t,e,r,n,i){if(t.keyHash===n)return new Ht(e,n,[t.entry,i]);var o,u=(0===r?t.keyHash:t.keyHash>>>r)&g,s=(0===r?n:n>>>r)&g;return new Xt(e,1<<u|1<<s,u===s?[ae(t,e,r+w,n,i)]:(o=new Kt(e,n,i),u<s?[t,o]:[o,t]))}function ce(t,e,r,n){t||(t=new x);for(var i=new Kt(t,St(r),[r,n]),o=0;o<e.length;o++){var u=e[o];i=i.update(t,0,void 0,u[0],u[1])}return i}function fe(t,e,r,n){for(var i=0,o=0,u=new Array(r),s=0,a=1,c=e.length;s<c;s++,a<<=1){var f=e[s];void 0!==f&&s!==n&&(i|=a,u[o++]=f)}return new Xt(t,i,u)}function le(t,e,r,n,i){for(var o=0,u=new Array(d),s=0;0!==r;s++,r>>>=1)u[s]=1&r?e[o++]:void 0;return u[n]=i,new Vt(t,o+1,u)}function he(t,e,r){for(var i=[],o=0;o<r.length;o++){var s=r[o],a=n(s);u(s)||(a=a.map((function(t){return pt(t)}))),i.push(a)}return Me(t,e,i)}function pe(t,e,r){return t&&t.mergeDeep&&u(e)?t.mergeDeep(e):dt(t,e)?t:e}function ye(t){return function(e,r,n){if(e&&e.mergeDeepWith&&u(r))return e.mergeDeepWith(t,r);var i=t(e,r,n);return dt(e,i)?e:i}}function Me(t,e,r){return 0===(r=r.filter((function(t){return 0!==t.size}))).length?t:0!==t.size||t.__ownerID||1!==r.length?t.withMutations((function(t){for(var n=e?function(r,n){t.update(n,v,(function(t){return t===v?r:e(t,r,n)}))}:function(e,r){t.set(r,e)},i=0;i<r.length;i++)r[i].forEach(n)})):t.constructor(r[0])}function we(t,e,r,n){var i=t===v,o=e.next();if(o.done){var u=i?r:t,s=n(u);return s===u?t:s}Lt(i||t&&t.set,\"invalid keyPath\");var a=o.value,c=i?v:t.get(a,v),f=we(c,e,r,n);return f===c?t:f===v?t.remove(a):(i?ie():t).set(a,f)}function de(t){return t=(t=(858993459&(t-=t>>1&1431655765))+(t>>2&858993459))+(t>>4)&252645135,t+=t>>8,127&(t+=t>>16)}function ge(t,e,r,n){var i=n?t:m(t);return i[e]=r,i}function ve(t,e,r,n){var i=t.length+1;if(n&&e+1===i)return t[e]=r,t;for(var o=new Array(i),u=0,s=0;s<i;s++)s===e?(o[s]=r,u=-1):o[s]=t[s+u];return o}function Le(t,e,r){var n=t.length-1;if(r&&e===n)return t.pop(),t;for(var i=new Array(n),o=0,u=0;u<n;u++)u===e&&(o=1),i[u]=t[u+o];return i}Zt[Jt]=!0,Zt[M]=Zt.remove,Zt.removeIn=Zt.deleteIn,$t.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;o<u;o++)if(dt(r,i[o][0]))return i[o][1];return n},$t.prototype.update=function(t,e,r,n,i,o,u){for(var s=i===v,a=this.entries,c=0,f=a.length;c<f&&!dt(n,a[c][0]);c++);var l=c<f;if(l?a[c][1]===i:s)return this;if(N(u),(s||!l)&&N(o),!s||1!==a.length){if(!l&&!s&&a.length>=_e)return ce(t,a,n,i);var h=t&&t===this.ownerID,p=h?a:m(a);return l?s?c===f-1?p.pop():p[c]=p.pop():p[c]=[n,i]:p.push([n,i]),h?(this.entries=p,this):new $t(t,p)}},Xt.prototype.get=function(t,e,r,n){void 0===e&&(e=St(r));var i=1<<((0===t?e:e>>>t)&g),o=this.bitmap;return 0==(o&i)?n:this.nodes[de(o&i-1)].get(t+w,e,r,n)},Xt.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=St(n));var s=(0===e?r:r>>>e)&g,a=1<<s,c=this.bitmap,f=0!=(c&a);if(!f&&i===v)return this;var l=de(c&a-1),h=this.nodes,p=f?h[l]:void 0,y=ue(p,t,e+w,r,n,i,o,u);if(y===p)return this;if(!f&&y&&h.length>=je)return le(t,h,c,s,y);if(f&&!y&&2===h.length&&se(h[1^l]))return h[1^l];if(f&&y&&1===h.length&&se(y))return y;var M=t&&t===this.ownerID,d=f?y?c:c^a:c|a,L=f?y?ge(h,l,y,M):Le(h,l,M):ve(h,l,y,M);return M?(this.bitmap=d,this.nodes=L,this):new Xt(t,d,L)},Vt.prototype.get=function(t,e,r,n){void 0===e&&(e=St(r));var i=(0===t?e:e>>>t)&g,o=this.nodes[i];return o?o.get(t+w,e,r,n):n},Vt.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=St(n));var s=(0===e?r:r>>>e)&g,a=i===v,c=this.nodes,f=c[s];if(a&&!f)return this;var l=ue(f,t,e+w,r,n,i,o,u);if(l===f)return this;var h=this.count;if(f){if(!l&&--h<Ne)return fe(t,c,h,s)}else h++;var p=t&&t===this.ownerID,y=ge(c,s,l,p);return p?(this.count=h,this.nodes=y,this):new Vt(t,h,y)},Ht.prototype.get=function(t,e,r,n){for(var i=this.entries,o=0,u=i.length;o<u;o++)if(dt(r,i[o][0]))return i[o][1];return n},Ht.prototype.update=function(t,e,r,n,i,o,u){void 0===r&&(r=St(n));var s=i===v;if(r!==this.keyHash)return s?this:(N(u),N(o),ae(this,t,e,r,[n,i]));for(var a=this.entries,c=0,f=a.length;c<f&&!dt(n,a[c][0]);c++);var l=c<f;if(l?a[c][1]===i:s)return this;if(N(u),(s||!l)&&N(o),s&&2===f)return new Kt(t,this.keyHash,a[1^c]);var h=t&&t===this.ownerID,p=h?a:m(a);return l?s?c===f-1?p.pop():p[c]=p.pop():p[c]=[n,i]:p.push([n,i]),h?(this.entries=p,this):new Ht(t,this.keyHash,p)},Kt.prototype.get=function(t,e,r,n){return dt(r,this.entry[0])?this.entry[1]:n},Kt.prototype.update=function(t,e,r,n,i,o,u){var s=i===v,a=dt(n,this.entry[0]);return(a?i===this.entry[1]:s)?this:(N(u),s?void N(o):a?t&&t===this.ownerID?(this.entry[1]=i,this):new Kt(t,this.keyHash,[n,i]):(N(o),ae(this,t,e,St(n),[n,i])))},$t.prototype.iterate=Ht.prototype.iterate=function(t,e){for(var r=this.entries,n=0,i=r.length-1;n<=i;n++)if(!1===t(r[e?i-n:n]))return!1},Xt.prototype.iterate=Vt.prototype.iterate=function(t,e){for(var r=this.nodes,n=0,i=r.length-1;n<=i;n++){var o=r[e?i-n:n];if(o&&!1===o.iterate(t,e))return!1}},Kt.prototype.iterate=function(t,e){return t(this.entry)},e(te,B),te.prototype.next=function(){for(var t=this._type,e=this._stack;e;){var r,n=e.node,i=e.index++;if(n.entry){if(0===i)return ee(t,n.entry)}else if(n.entries){if(i<=(r=n.entries.length-1))return ee(t,n.entries[this._reverse?r-i:i])}else if(i<=(r=n.nodes.length-1)){var o=n.nodes[this._reverse?r-i:i];if(o){if(o.entry)return ee(t,o.entry);e=this._stack=re(o,e)}continue}e=this._stack=this._stack.__prev}return R()};var _e=d/4,je=d/2,Ne=d/4;function xe(t){var e=ze();if(null==t)return e;if(me(t))return t;var r=i(t),n=r.size;return 0===n?e:(Pt(n),n>0&&n<d?Ee(0,n,w,null,new Se(r.toArray())):e.withMutations((function(t){t.setSize(n),r.forEach((function(e,r){return t.set(r,e)}))})))}function me(t){return!(!t||!t[De])}e(xe,xt),xe.of=function(){return this(arguments)},xe.prototype.toString=function(){return this.__toString(\"List [\",\"]\")},xe.prototype.get=function(t,e){if((t=I(this,t))>=0&&t<this.size){var r=Ye(this,t+=this._origin);return r&&r.array[t&g]}return e},xe.prototype.set=function(t,e){return Oe(this,t,e)},xe.prototype.remove=function(t){return this.has(t)?0===t?this.shift():t===this.size-1?this.pop():this.splice(t,1):this},xe.prototype.insert=function(t,e){return this.splice(t,0,e)},xe.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=this._origin=this._capacity=0,this._level=w,this._root=this._tail=null,this.__hash=void 0,this.__altered=!0,this):ze()},xe.prototype.push=function(){var t=arguments,e=this.size;return this.withMutations((function(r){Be(r,0,e+t.length);for(var n=0;n<t.length;n++)r.set(e+n,t[n])}))},xe.prototype.pop=function(){return Be(this,0,-1)},xe.prototype.unshift=function(){var t=arguments;return this.withMutations((function(e){Be(e,-t.length);for(var r=0;r<t.length;r++)e.set(r,t[r])}))},xe.prototype.shift=function(){return Be(this,1)},xe.prototype.merge=function(){return Qe(this,void 0,arguments)},xe.prototype.mergeWith=function(e){return Qe(this,e,t.call(arguments,1))},xe.prototype.mergeDeep=function(){return Qe(this,pe,arguments)},xe.prototype.mergeDeepWith=function(e){var r=t.call(arguments,1);return Qe(this,ye(e),r)},xe.prototype.setSize=function(t){return Be(this,0,t)},xe.prototype.slice=function(t,e){var r=this.size;return b(t,e,r)?this:Be(this,A(t,r),C(e,r))},xe.prototype.__iterator=function(t,e){var r=0,n=Te(this,e);return new B((function(){var e=n();return e===Ce?R():Q(t,r++,e)}))},xe.prototype.__iterate=function(t,e){for(var r,n=0,i=Te(this,e);(r=i())!==Ce&&!1!==t(r,n++,this););return n},xe.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Ee(this._origin,this._capacity,this._level,this._root,this._tail,t,this.__hash):(this.__ownerID=t,this)},xe.isList=me;var De=\"@@__IMMUTABLE_LIST__@@\",Ie=xe.prototype;function Se(t,e){this.array=t,this.ownerID=e}Ie[De]=!0,Ie[M]=Ie.remove,Ie.setIn=Zt.setIn,Ie.deleteIn=Ie.removeIn=Zt.removeIn,Ie.update=Zt.update,Ie.updateIn=Zt.updateIn,Ie.mergeIn=Zt.mergeIn,Ie.mergeDeepIn=Zt.mergeDeepIn,Ie.withMutations=Zt.withMutations,Ie.asMutable=Zt.asMutable,Ie.asImmutable=Zt.asImmutable,Ie.wasAltered=Zt.wasAltered,Se.prototype.removeBefore=function(t,e,r){if(r===e?1<<e:0===this.array.length)return this;var n=r>>>e&g;if(n>=this.array.length)return new Se([],t);var i,o=0===n;if(e>0){var u=this.array[n];if((i=u&&u.removeBefore(t,e-w,r))===u&&o)return this}if(o&&!i)return this;var s=Ue(this,t);if(!o)for(var a=0;a<n;a++)s.array[a]=void 0;return i&&(s.array[n]=i),s},Se.prototype.removeAfter=function(t,e,r){if(r===(e?1<<e:0)||0===this.array.length)return this;var n,i=r-1>>>e&g;if(i>=this.array.length)return this;if(e>0){var o=this.array[i];if((n=o&&o.removeAfter(t,e-w,r))===o&&i===this.array.length-1)return this}var u=Ue(this,t);return u.array.splice(i+1),n&&(u.array[i]=n),u};var be,Ae,Ce={};function Te(t,e){var r=t._origin,n=t._capacity,i=Re(n),o=t._tail;return u(t._root,t._level,0);function u(t,e,r){return 0===e?s(t,r):a(t,e,r)}function s(t,u){var s=u===i?o&&o.array:t&&t.array,a=u>r?0:r-u,c=n-u;return c>d&&(c=d),function(){if(a===c)return Ce;var t=e?--c:a++;return s&&s[t]}}function a(t,i,o){var s,a=t&&t.array,c=o>r?0:r-o>>i,f=1+(n-o>>i);return f>d&&(f=d),function(){for(;;){if(s){var t=s();if(t!==Ce)return t;s=null}if(c===f)return Ce;var r=e?--f:c++;s=u(a&&a[r],i-w,o+(r<<i))}}}}function Ee(t,e,r,n,i,o,u){var s=Object.create(Ie);return s.size=e-t,s._origin=t,s._capacity=e,s._level=r,s._root=n,s._tail=i,s.__ownerID=o,s.__hash=u,s.__altered=!1,s}function ze(){return be||(be=Ee(0,0,w))}function Oe(t,e,r){if((e=I(t,e))!=e)return t;if(e>=t.size||e<0)return t.withMutations((function(t){e<0?Be(t,e).set(0,r):Be(t,0,e+1).set(e,r)}));e+=t._origin;var n=t._tail,i=t._root,o=j(_);return e>=Re(t._capacity)?n=ke(n,t.__ownerID,0,e,r,o):i=ke(i,t.__ownerID,t._level,e,r,o),o.value?t.__ownerID?(t._root=i,t._tail=n,t.__hash=void 0,t.__altered=!0,t):Ee(t._origin,t._capacity,t._level,i,n):t}function ke(t,e,r,n,i,o){var u,s=n>>>r&g,a=t&&s<t.array.length;if(!a&&void 0===i)return t;if(r>0){var c=t&&t.array[s],f=ke(c,e,r-w,n,i,o);return f===c?t:((u=Ue(t,e)).array[s]=f,u)}return a&&t.array[s]===i?t:(N(o),u=Ue(t,e),void 0===i&&s===u.array.length-1?u.array.pop():u.array[s]=i,u)}function Ue(t,e){return e&&t&&e===t.ownerID?t:new Se(t?t.array.slice():[],e)}function Ye(t,e){if(e>=Re(t._capacity))return t._tail;if(e<1<<t._level+w){for(var r=t._root,n=t._level;r&&n>0;)r=r.array[e>>>n&g],n-=w;return r}}function Be(t,e,r){void 0!==e&&(e|=0),void 0!==r&&(r|=0);var n=t.__ownerID||new x,i=t._origin,o=t._capacity,u=i+e,s=void 0===r?o:r<0?o+r:i+r;if(u===i&&s===o)return t;if(u>=s)return t.clear();for(var a=t._level,c=t._root,f=0;u+f<0;)c=new Se(c&&c.array.length?[void 0,c]:[],n),f+=1<<(a+=w);f&&(u+=f,i+=f,s+=f,o+=f);for(var l=Re(o),h=Re(s);h>=1<<a+w;)c=new Se(c&&c.array.length?[c]:[],n),a+=w;var p=t._tail,y=h<l?Ye(t,s-1):h>l?new Se([],n):p;if(p&&h>l&&u<o&&p.array.length){for(var M=c=Ue(c,n),d=a;d>w;d-=w){var v=l>>>d&g;M=M.array[v]=Ue(M.array[v],n)}M.array[l>>>w&g]=p}if(s<o&&(y=y&&y.removeAfter(n,0,s)),u>=h)u-=h,s-=h,a=w,c=null,y=y&&y.removeBefore(n,0,u);else if(u>i||h<l){for(f=0;c;){var L=u>>>a&g;if(L!==h>>>a&g)break;L&&(f+=(1<<a)*L),a-=w,c=c.array[L]}c&&u>i&&(c=c.removeBefore(n,a,u-f)),c&&h<l&&(c=c.removeAfter(n,a,h-f)),f&&(u-=f,s-=f)}return t.__ownerID?(t.size=s-u,t._origin=u,t._capacity=s,t._level=a,t._root=c,t._tail=y,t.__hash=void 0,t.__altered=!0,t):Ee(u,s,a,c,y)}function Qe(t,e,r){for(var n=[],o=0,s=0;s<r.length;s++){var a=r[s],c=i(a);c.size>o&&(o=c.size),u(a)||(c=c.map((function(t){return pt(t)}))),n.push(c)}return o>t.size&&(t=t.setSize(o)),Me(t,e,n)}function Re(t){return t<d?0:t-1>>>w<<w}function Fe(t){return null==t?We():Pe(t)?t:We().withMutations((function(e){var r=n(t);Pt(r.size),r.forEach((function(t,r){return e.set(r,t)}))}))}function Pe(t){return Wt(t)&&f(t)}function Ge(t,e,r,n){var i=Object.create(Fe.prototype);return i.size=t?t.size:0,i._map=t,i._list=e,i.__ownerID=r,i.__hash=n,i}function We(){return Ae||(Ae=Ge(ie(),ze()))}function qe(t,e,r){var n,i,o=t._map,u=t._list,s=o.get(e),a=void 0!==s;if(r===v){if(!a)return t;u.size>=d&&u.size>=2*o.size?(n=(i=u.filter((function(t,e){return void 0!==t&&s!==e}))).toKeyedSeq().map((function(t){return t[0]})).flip().toMap(),t.__ownerID&&(n.__ownerID=i.__ownerID=t.__ownerID)):(n=o.remove(e),i=s===u.size-1?u.pop():u.set(s,void 0))}else if(a){if(r===u.get(s)[1])return t;n=o,i=u.set(s,[e,r])}else n=o.set(e,u.size),i=u.set(u.size,[e,r]);return t.__ownerID?(t.size=n.size,t._map=n,t._list=i,t.__hash=void 0,t):Ge(n,i)}function Je(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function Ze(t){this._iter=t,this.size=t.size}function $e(t){this._iter=t,this.size=t.size}function Xe(t){this._iter=t,this.size=t.size}function Ve(t){var e=gr(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=vr,e.__iterateUncached=function(e,r){var n=this;return t.__iterate((function(t,r){return!1!==e(r,t,n)}),r)},e.__iteratorUncached=function(e,r){if(e===O){var n=t.__iterator(e,r);return new B((function(){var t=n.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t}))}return t.__iterator(e===z?E:z,r)},e}function He(t,e,r){var n=gr(t);return n.size=t.size,n.has=function(e){return t.has(e)},n.get=function(n,i){var o=t.get(n,v);return o===v?i:e.call(r,o,n,t)},n.__iterateUncached=function(n,i){var o=this;return t.__iterate((function(t,i,u){return!1!==n(e.call(r,t,i,u),i,o)}),i)},n.__iteratorUncached=function(n,i){var o=t.__iterator(O,i);return new B((function(){var i=o.next();if(i.done)return i;var u=i.value,s=u[0];return Q(n,s,e.call(r,u[1],s,t),i)}))},n}function Ke(t,e){var r=gr(t);return r._iter=t,r.size=t.size,r.reverse=function(){return t},t.flip&&(r.flip=function(){var e=Ve(t);return e.reverse=function(){return t.flip()},e}),r.get=function(r,n){return t.get(e?r:-1-r,n)},r.has=function(r){return t.has(e?r:-1-r)},r.includes=function(e){return t.includes(e)},r.cacheResult=vr,r.__iterate=function(e,r){var n=this;return t.__iterate((function(t,r){return e(t,r,n)}),!r)},r.__iterator=function(e,r){return t.__iterator(e,!r)},r}function tr(t,e,r,n){var i=gr(t);return n&&(i.has=function(n){var i=t.get(n,v);return i!==v&&!!e.call(r,i,n,t)},i.get=function(n,i){var o=t.get(n,v);return o!==v&&e.call(r,o,n,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,s=0;return t.__iterate((function(t,o,a){if(e.call(r,t,o,a))return s++,i(t,n?o:s-1,u)}),o),s},i.__iteratorUncached=function(i,o){var u=t.__iterator(O,o),s=0;return new B((function(){for(;;){var o=u.next();if(o.done)return o;var a=o.value,c=a[0],f=a[1];if(e.call(r,f,c,t))return Q(i,n?c:s++,f,o)}}))},i}function er(t,e,r){var n=Gt().asMutable();return t.__iterate((function(i,o){n.update(e.call(r,i,o,t),0,(function(t){return t+1}))})),n.asImmutable()}function rr(t,e,r){var n=s(t),i=(f(t)?Fe():Gt()).asMutable();t.__iterate((function(o,u){i.update(e.call(r,o,u,t),(function(t){return(t=t||[]).push(n?[u,o]:o),t}))}));var o=dr(t);return i.map((function(e){return yr(t,o(e))}))}function nr(t,e,r,n){var i=t.size;if(void 0!==e&&(e|=0),void 0!==r&&(r===1/0?r=i:r|=0),b(e,r,i))return t;var o=A(e,i),u=C(r,i);if(o!=o||u!=u)return nr(t.toSeq().cacheResult(),e,r,n);var s,a=u-o;a==a&&(s=a<0?0:a);var c=gr(t);return c.size=0===s?s:t.size&&s||void 0,!n&&ot(t)&&s>=0&&(c.get=function(e,r){return(e=I(this,e))>=0&&e<s?t.get(e+o,r):r}),c.__iterateUncached=function(e,r){var i=this;if(0===s)return 0;if(r)return this.cacheResult().__iterate(e,r);var u=0,a=!0,c=0;return t.__iterate((function(t,r){if(!a||!(a=u++<o))return c++,!1!==e(t,n?r:c-1,i)&&c!==s})),c},c.__iteratorUncached=function(e,r){if(0!==s&&r)return this.cacheResult().__iterator(e,r);var i=0!==s&&t.__iterator(e,r),u=0,a=0;return new B((function(){for(;u++<o;)i.next();if(++a>s)return R();var t=i.next();return n||e===z?t:Q(e,a-1,e===E?void 0:t.value[1],t)}))},c}function ir(t,e,r){var n=gr(t);return n.__iterateUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterate(n,i);var u=0;return t.__iterate((function(t,i,s){return e.call(r,t,i,s)&&++u&&n(t,i,o)})),u},n.__iteratorUncached=function(n,i){var o=this;if(i)return this.cacheResult().__iterator(n,i);var u=t.__iterator(O,i),s=!0;return new B((function(){if(!s)return R();var t=u.next();if(t.done)return t;var i=t.value,a=i[0],c=i[1];return e.call(r,c,a,o)?n===O?t:Q(n,a,c,t):(s=!1,R())}))},n}function or(t,e,r,n){var i=gr(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,a=0;return t.__iterate((function(t,o,c){if(!s||!(s=e.call(r,t,o,c)))return a++,i(t,n?o:a-1,u)})),a},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var s=t.__iterator(O,o),a=!0,c=0;return new B((function(){var t,o,f;do{if((t=s.next()).done)return n||i===z?t:Q(i,c++,i===E?void 0:t.value[1],t);var l=t.value;o=l[0],f=l[1],a&&(a=e.call(r,f,o,u))}while(a);return i===O?t:Q(i,o,f,t)}))},i}function ur(t,e){var r=s(t),i=[t].concat(e).map((function(t){return u(t)?r&&(t=n(t)):t=r?st(t):at(Array.isArray(t)?t:[t]),t})).filter((function(t){return 0!==t.size}));if(0===i.length)return t;if(1===i.length){var o=i[0];if(o===t||r&&s(o)||a(t)&&a(o))return o}var c=new et(i);return r?c=c.toKeyedSeq():a(t)||(c=c.toSetSeq()),(c=c.flatten(!0)).size=i.reduce((function(t,e){if(void 0!==t){var r=e.size;if(void 0!==r)return t+r}}),0),c}function sr(t,e,r){var n=gr(t);return n.__iterateUncached=function(n,i){var o=0,s=!1;function a(t,c){var f=this;t.__iterate((function(t,i){return(!e||c<e)&&u(t)?a(t,c+1):!1===n(t,r?i:o++,f)&&(s=!0),!s}),i)}return a(t,0),o},n.__iteratorUncached=function(n,i){var o=t.__iterator(n,i),s=[],a=0;return new B((function(){for(;o;){var t=o.next();if(!1===t.done){var c=t.value;if(n===O&&(c=c[1]),e&&!(s.length<e)||!u(c))return r?t:Q(n,a++,c,t);s.push(o),o=c.__iterator(n,i)}else o=s.pop()}return R()}))},n}function ar(t,e,r){var n=dr(t);return t.toSeq().map((function(i,o){return n(e.call(r,i,o,t))})).flatten(!0)}function cr(t,e){var r=gr(t);return r.size=t.size&&2*t.size-1,r.__iterateUncached=function(r,n){var i=this,o=0;return t.__iterate((function(t,n){return(!o||!1!==r(e,o++,i))&&!1!==r(t,o++,i)}),n),o},r.__iteratorUncached=function(r,n){var i,o=t.__iterator(z,n),u=0;return new B((function(){return(!i||u%2)&&(i=o.next()).done?i:u%2?Q(r,u++,e):Q(r,u++,i.value,i)}))},r}function fr(t,e,r){e||(e=Lr);var n=s(t),i=0,o=t.toSeq().map((function(e,n){return[n,e,i++,r?r(e,n,t):e]})).toArray();return o.sort((function(t,r){return e(t[3],r[3])||t[2]-r[2]})).forEach(n?function(t,e){o[e].length=2}:function(t,e){o[e]=t[1]}),n?Z(o):a(t)?$(o):X(o)}function lr(t,e,r){if(e||(e=Lr),r){var n=t.toSeq().map((function(e,n){return[e,r(e,n,t)]})).reduce((function(t,r){return hr(e,t[1],r[1])?r:t}));return n&&n[0]}return t.reduce((function(t,r){return hr(e,t,r)?r:t}))}function hr(t,e,r){var n=t(r,e);return 0===n&&r!==e&&(null==r||r!=r)||n>0}function pr(t,e,n){var i=gr(t);return i.size=new et(n).map((function(t){return t.size})).min(),i.__iterate=function(t,e){for(var r,n=this.__iterator(z,e),i=0;!(r=n.next()).done&&!1!==t(r.value,i++,this););return i},i.__iteratorUncached=function(t,i){var o=n.map((function(t){return t=r(t),G(i?t.reverse():t)})),u=0,s=!1;return new B((function(){var r;return s||(r=o.map((function(t){return t.next()})),s=r.some((function(t){return t.done}))),s?R():Q(t,u++,e.apply(null,r.map((function(t){return t.value}))))}))},i}function yr(t,e){return ot(t)?e:t.constructor(e)}function Mr(t){if(t!==Object(t))throw new TypeError(\"Expected [K, V] tuple: \"+t)}function wr(t){return Pt(t.size),D(t)}function dr(t){return s(t)?n:a(t)?i:o}function gr(t){return Object.create((s(t)?Z:a(t)?$:X).prototype)}function vr(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):J.prototype.cacheResult.call(this)}function Lr(t,e){return t>e?1:t<e?-1:0}function _r(t){var e=G(t);if(!e){if(!q(t))throw new TypeError(\"Expected iterable or array-like: \"+t);e=G(r(t))}return e}function jr(t,e){var r,n=function(o){if(o instanceof n)return o;if(!(this instanceof n))return new n(o);if(!r){r=!0;var u=Object.keys(t);Dr(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=Gt(o)},i=n.prototype=Object.create(Nr);return i.constructor=n,n}e(Fe,Gt),Fe.of=function(){return this(arguments)},Fe.prototype.toString=function(){return this.__toString(\"OrderedMap {\",\"}\")},Fe.prototype.get=function(t,e){var r=this._map.get(t);return void 0!==r?this._list.get(r)[1]:e},Fe.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):We()},Fe.prototype.set=function(t,e){return qe(this,t,e)},Fe.prototype.remove=function(t){return qe(this,t,v)},Fe.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Fe.prototype.__iterate=function(t,e){var r=this;return this._list.__iterate((function(e){return e&&t(e[1],e[0],r)}),e)},Fe.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},Fe.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),r=this._list.__ensureOwner(t);return t?Ge(e,r,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=r,this)},Fe.isOrderedMap=Pe,Fe.prototype[y]=!0,Fe.prototype[M]=Fe.prototype.remove,e(Je,Z),Je.prototype.get=function(t,e){return this._iter.get(t,e)},Je.prototype.has=function(t){return this._iter.has(t)},Je.prototype.valueSeq=function(){return this._iter.valueSeq()},Je.prototype.reverse=function(){var t=this,e=Ke(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},Je.prototype.map=function(t,e){var r=this,n=He(this,t,e);return this._useKeys||(n.valueSeq=function(){return r._iter.toSeq().map(t,e)}),n},Je.prototype.__iterate=function(t,e){var r,n=this;return this._iter.__iterate(this._useKeys?function(e,r){return t(e,r,n)}:(r=e?wr(this):0,function(i){return t(i,e?--r:r++,n)}),e)},Je.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var r=this._iter.__iterator(z,e),n=e?wr(this):0;return new B((function(){var i=r.next();return i.done?i:Q(t,e?--n:n++,i.value,i)}))},Je.prototype[y]=!0,e(Ze,$),Ze.prototype.includes=function(t){return this._iter.includes(t)},Ze.prototype.__iterate=function(t,e){var r=this,n=0;return this._iter.__iterate((function(e){return t(e,n++,r)}),e)},Ze.prototype.__iterator=function(t,e){var r=this._iter.__iterator(z,e),n=0;return new B((function(){var e=r.next();return e.done?e:Q(t,n++,e.value,e)}))},e($e,X),$e.prototype.has=function(t){return this._iter.includes(t)},$e.prototype.__iterate=function(t,e){var r=this;return this._iter.__iterate((function(e){return t(e,e,r)}),e)},$e.prototype.__iterator=function(t,e){var r=this._iter.__iterator(z,e);return new B((function(){var e=r.next();return e.done?e:Q(t,e.value,e.value,e)}))},e(Xe,Z),Xe.prototype.entrySeq=function(){return this._iter.toSeq()},Xe.prototype.__iterate=function(t,e){var r=this;return this._iter.__iterate((function(e){if(e){Mr(e);var n=u(e);return t(n?e.get(1):e[1],n?e.get(0):e[0],r)}}),e)},Xe.prototype.__iterator=function(t,e){var r=this._iter.__iterator(z,e);return new B((function(){for(;;){var e=r.next();if(e.done)return e;var n=e.value;if(n){Mr(n);var i=u(n);return Q(t,i?n.get(0):n[0],i?n.get(1):n[1],e)}}}))},Ze.prototype.cacheResult=Je.prototype.cacheResult=$e.prototype.cacheResult=Xe.prototype.cacheResult=vr,e(jr,Nt),jr.prototype.toString=function(){return this.__toString(mr(this)+\" {\",\"}\")},jr.prototype.has=function(t){return this._defaultValues.hasOwnProperty(t)},jr.prototype.get=function(t,e){if(!this.has(t))return e;var r=this._defaultValues[t];return this._map?this._map.get(t,r):r},jr.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var t=this.constructor;return t._empty||(t._empty=xr(this,ie()))},jr.prototype.set=function(t,e){if(!this.has(t))throw new Error('Cannot set unknown key \"'+t+'\" on '+mr(this));if(this._map&&!this._map.has(t)&&e===this._defaultValues[t])return this;var r=this._map&&this._map.set(t,e);return this.__ownerID||r===this._map?this:xr(this,r)},jr.prototype.remove=function(t){if(!this.has(t))return this;var e=this._map&&this._map.remove(t);return this.__ownerID||e===this._map?this:xr(this,e)},jr.prototype.wasAltered=function(){return this._map.wasAltered()},jr.prototype.__iterator=function(t,e){var r=this;return n(this._defaultValues).map((function(t,e){return r.get(e)})).__iterator(t,e)},jr.prototype.__iterate=function(t,e){var r=this;return n(this._defaultValues).map((function(t,e){return r.get(e)})).__iterate(t,e)},jr.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map&&this._map.__ensureOwner(t);return t?xr(this,e,t):(this.__ownerID=t,this._map=e,this)};var Nr=jr.prototype;function xr(t,e,r){var n=Object.create(Object.getPrototypeOf(t));return n._map=e,n.__ownerID=r,n}function mr(t){return t._name||t.constructor.name||\"Record\"}function Dr(t,e){try{e.forEach(Ir.bind(void 0,t))}catch(t){}}function Ir(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){Lt(this.__ownerID,\"Cannot set on an immutable record.\"),this.set(e,t)}})}function Sr(t){return null==t?Or():br(t)&&!f(t)?t:Or().withMutations((function(e){var r=o(t);Pt(r.size),r.forEach((function(t){return e.add(t)}))}))}function br(t){return!(!t||!t[Cr])}Nr[M]=Nr.remove,Nr.deleteIn=Nr.removeIn=Zt.removeIn,Nr.merge=Zt.merge,Nr.mergeWith=Zt.mergeWith,Nr.mergeIn=Zt.mergeIn,Nr.mergeDeep=Zt.mergeDeep,Nr.mergeDeepWith=Zt.mergeDeepWith,Nr.mergeDeepIn=Zt.mergeDeepIn,Nr.setIn=Zt.setIn,Nr.update=Zt.update,Nr.updateIn=Zt.updateIn,Nr.withMutations=Zt.withMutations,Nr.asMutable=Zt.asMutable,Nr.asImmutable=Zt.asImmutable,e(Sr,mt),Sr.of=function(){return this(arguments)},Sr.fromKeys=function(t){return this(n(t).keySeq())},Sr.prototype.toString=function(){return this.__toString(\"Set {\",\"}\")},Sr.prototype.has=function(t){return this._map.has(t)},Sr.prototype.add=function(t){return Er(this,this._map.set(t,!0))},Sr.prototype.remove=function(t){return Er(this,this._map.remove(t))},Sr.prototype.clear=function(){return Er(this,this._map.clear())},Sr.prototype.union=function(){var e=t.call(arguments,0);return 0===(e=e.filter((function(t){return 0!==t.size}))).length?this:0!==this.size||this.__ownerID||1!==e.length?this.withMutations((function(t){for(var r=0;r<e.length;r++)o(e[r]).forEach((function(e){return t.add(e)}))})):this.constructor(e[0])},Sr.prototype.intersect=function(){var e=t.call(arguments,0);if(0===e.length)return this;e=e.map((function(t){return o(t)}));var r=this;return this.withMutations((function(t){r.forEach((function(r){e.every((function(t){return t.includes(r)}))||t.remove(r)}))}))},Sr.prototype.subtract=function(){var e=t.call(arguments,0);if(0===e.length)return this;e=e.map((function(t){return o(t)}));var r=this;return this.withMutations((function(t){r.forEach((function(r){e.some((function(t){return t.includes(r)}))&&t.remove(r)}))}))},Sr.prototype.merge=function(){return this.union.apply(this,arguments)},Sr.prototype.mergeWith=function(e){var r=t.call(arguments,1);return this.union.apply(this,r)},Sr.prototype.sort=function(t){return kr(fr(this,t))},Sr.prototype.sortBy=function(t,e){return kr(fr(this,e,t))},Sr.prototype.wasAltered=function(){return this._map.wasAltered()},Sr.prototype.__iterate=function(t,e){var r=this;return this._map.__iterate((function(e,n){return t(n,n,r)}),e)},Sr.prototype.__iterator=function(t,e){return this._map.map((function(t,e){return e})).__iterator(t,e)},Sr.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t);return t?this.__make(e,t):(this.__ownerID=t,this._map=e,this)},Sr.isSet=br;var Ar,Cr=\"@@__IMMUTABLE_SET__@@\",Tr=Sr.prototype;function Er(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function zr(t,e){var r=Object.create(Tr);return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r}function Or(){return Ar||(Ar=zr(ie()))}function kr(t){return null==t?Rr():Ur(t)?t:Rr().withMutations((function(e){var r=o(t);Pt(r.size),r.forEach((function(t){return e.add(t)}))}))}function Ur(t){return br(t)&&f(t)}Tr[Cr]=!0,Tr[M]=Tr.remove,Tr.mergeDeep=Tr.merge,Tr.mergeDeepWith=Tr.mergeWith,Tr.withMutations=Zt.withMutations,Tr.asMutable=Zt.asMutable,Tr.asImmutable=Zt.asImmutable,Tr.__empty=Or,Tr.__make=zr,e(kr,Sr),kr.of=function(){return this(arguments)},kr.fromKeys=function(t){return this(n(t).keySeq())},kr.prototype.toString=function(){return this.__toString(\"OrderedSet {\",\"}\")},kr.isOrderedSet=Ur;var Yr,Br=kr.prototype;function Qr(t,e){var r=Object.create(Br);return r.size=t?t.size:0,r._map=t,r.__ownerID=e,r}function Rr(){return Yr||(Yr=Qr(We()))}function Fr(t){return null==t?Zr():Pr(t)?t:Zr().unshiftAll(t)}function Pr(t){return!(!t||!t[Wr])}Br[y]=!0,Br.__empty=Rr,Br.__make=Qr,e(Fr,xt),Fr.of=function(){return this(arguments)},Fr.prototype.toString=function(){return this.__toString(\"Stack [\",\"]\")},Fr.prototype.get=function(t,e){var r=this._head;for(t=I(this,t);r&&t--;)r=r.next;return r?r.value:e},Fr.prototype.peek=function(){return this._head&&this._head.value},Fr.prototype.push=function(){if(0===arguments.length)return this;for(var t=this.size+arguments.length,e=this._head,r=arguments.length-1;r>=0;r--)e={value:arguments[r],next:e};return this.__ownerID?(this.size=t,this._head=e,this.__hash=void 0,this.__altered=!0,this):Jr(t,e)},Fr.prototype.pushAll=function(t){if(0===(t=i(t)).size)return this;Pt(t.size);var e=this.size,r=this._head;return t.reverse().forEach((function(t){e++,r={value:t,next:r}})),this.__ownerID?(this.size=e,this._head=r,this.__hash=void 0,this.__altered=!0,this):Jr(e,r)},Fr.prototype.pop=function(){return this.slice(1)},Fr.prototype.unshift=function(){return this.push.apply(this,arguments)},Fr.prototype.unshiftAll=function(t){return this.pushAll(t)},Fr.prototype.shift=function(){return this.pop.apply(this,arguments)},Fr.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Zr()},Fr.prototype.slice=function(t,e){if(b(t,e,this.size))return this;var r=A(t,this.size);if(C(e,this.size)!==this.size)return xt.prototype.slice.call(this,t,e);for(var n=this.size-r,i=this._head;r--;)i=i.next;return this.__ownerID?(this.size=n,this._head=i,this.__hash=void 0,this.__altered=!0,this):Jr(n,i)},Fr.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Jr(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Fr.prototype.__iterate=function(t,e){if(e)return this.reverse().__iterate(t);for(var r=0,n=this._head;n&&!1!==t(n.value,r++,this);)n=n.next;return r},Fr.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var r=0,n=this._head;return new B((function(){if(n){var e=n.value;return n=n.next,Q(t,r++,e)}return R()}))},Fr.isStack=Pr;var Gr,Wr=\"@@__IMMUTABLE_STACK__@@\",qr=Fr.prototype;function Jr(t,e,r,n){var i=Object.create(qr);return i.size=t,i._head=e,i.__ownerID=r,i.__hash=n,i.__altered=!1,i}function Zr(){return Gr||(Gr=Jr(0))}function $r(t,e){var r=function(r){t.prototype[r]=e[r]};return Object.keys(e).forEach(r),Object.getOwnPropertySymbols&&Object.getOwnPropertySymbols(e).forEach(r),t}qr[Wr]=!0,qr.withMutations=Zt.withMutations,qr.asMutable=Zt.asMutable,qr.asImmutable=Zt.asImmutable,qr.wasAltered=Zt.wasAltered,r.Iterator=B,$r(r,{toArray:function(){Pt(this.size);var t=new Array(this.size||0);return this.valueSeq().__iterate((function(e,r){t[r]=e})),t},toIndexedSeq:function(){return new Ze(this)},toJS:function(){return this.toSeq().map((function(t){return t&&\"function\"==typeof t.toJS?t.toJS():t})).__toJS()},toJSON:function(){return this.toSeq().map((function(t){return t&&\"function\"==typeof t.toJSON?t.toJSON():t})).__toJS()},toKeyedSeq:function(){return new Je(this,!0)},toMap:function(){return Gt(this.toKeyedSeq())},toObject:function(){Pt(this.size);var t={};return this.__iterate((function(e,r){t[r]=e})),t},toOrderedMap:function(){return Fe(this.toKeyedSeq())},toOrderedSet:function(){return kr(s(this)?this.valueSeq():this)},toSet:function(){return Sr(s(this)?this.valueSeq():this)},toSetSeq:function(){return new $e(this)},toSeq:function(){return a(this)?this.toIndexedSeq():s(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Fr(s(this)?this.valueSeq():this)},toList:function(){return xe(s(this)?this.valueSeq():this)},toString:function(){return\"[Iterable]\"},__toString:function(t,e){return 0===this.size?t+e:t+\" \"+this.toSeq().map(this.__toStringMapper).join(\", \")+\" \"+e},concat:function(){return yr(this,ur(this,t.call(arguments,0)))},includes:function(t){return this.some((function(e){return dt(e,t)}))},entries:function(){return this.__iterator(O)},every:function(t,e){Pt(this.size);var r=!0;return this.__iterate((function(n,i,o){if(!t.call(e,n,i,o))return r=!1,!1})),r},filter:function(t,e){return yr(this,tr(this,t,e,!0))},find:function(t,e,r){var n=this.findEntry(t,e);return n?n[1]:r},forEach:function(t,e){return Pt(this.size),this.__iterate(e?t.bind(e):t)},join:function(t){Pt(this.size),t=void 0!==t?\"\"+t:\",\";var e=\"\",r=!0;return this.__iterate((function(n){r?r=!1:e+=t,e+=null!=n?n.toString():\"\"})),e},keys:function(){return this.__iterator(E)},map:function(t,e){return yr(this,He(this,t,e))},reduce:function(t,e,r){var n,i;return Pt(this.size),arguments.length<2?i=!0:n=e,this.__iterate((function(e,o,u){i?(i=!1,n=e):n=t.call(r,n,e,o,u)})),n},reduceRight:function(t,e,r){var n=this.toKeyedSeq().reverse();return n.reduce.apply(n,arguments)},reverse:function(){return yr(this,Ke(this,!0))},slice:function(t,e){return yr(this,nr(this,t,e,!0))},some:function(t,e){return!this.every(tn(t),e)},sort:function(t){return yr(this,fr(this,t))},values:function(){return this.__iterator(z)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some((function(){return!0}))},count:function(t,e){return D(t?this.toSeq().filter(t,e):this)},countBy:function(t,e){return er(this,t,e)},equals:function(t){return gt(this,t)},entrySeq:function(){var t=this;if(t._cache)return new et(t._cache);var e=t.toSeq().map(Kr).toIndexedSeq();return e.fromEntrySeq=function(){return t.toSeq()},e},filterNot:function(t,e){return this.filter(tn(t),e)},findEntry:function(t,e,r){var n=r;return this.__iterate((function(r,i,o){if(t.call(e,r,i,o))return n=[i,r],!1})),n},findKey:function(t,e){var r=this.findEntry(t,e);return r&&r[0]},findLast:function(t,e,r){return this.toKeyedSeq().reverse().find(t,e,r)},findLastEntry:function(t,e,r){return this.toKeyedSeq().reverse().findEntry(t,e,r)},findLastKey:function(t,e){return this.toKeyedSeq().reverse().findKey(t,e)},first:function(){return this.find(S)},flatMap:function(t,e){return yr(this,ar(this,t,e))},flatten:function(t){return yr(this,sr(this,t,!0))},fromEntrySeq:function(){return new Xe(this)},get:function(t,e){return this.find((function(e,r){return dt(r,t)}),void 0,e)},getIn:function(t,e){for(var r,n=this,i=_r(t);!(r=i.next()).done;){var o=r.value;if((n=n&&n.get?n.get(o,v):v)===v)return e}return n},groupBy:function(t,e){return rr(this,t,e)},has:function(t){return this.get(t,v)!==v},hasIn:function(t){return this.getIn(t,v)!==v},isSubset:function(t){return t=\"function\"==typeof t.includes?t:r(t),this.every((function(e){return t.includes(e)}))},isSuperset:function(t){return(t=\"function\"==typeof t.isSubset?t:r(t)).isSubset(this)},keyOf:function(t){return this.findKey((function(e){return dt(e,t)}))},keySeq:function(){return this.toSeq().map(Hr).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(t){return this.toKeyedSeq().reverse().keyOf(t)},max:function(t){return lr(this,t)},maxBy:function(t,e){return lr(this,e,t)},min:function(t){return lr(this,t?en(t):on)},minBy:function(t,e){return lr(this,e?en(e):on,t)},rest:function(){return this.slice(1)},skip:function(t){return this.slice(Math.max(0,t))},skipLast:function(t){return yr(this,this.toSeq().reverse().skip(t).reverse())},skipWhile:function(t,e){return yr(this,or(this,t,e,!0))},skipUntil:function(t,e){return this.skipWhile(tn(t),e)},sortBy:function(t,e){return yr(this,fr(this,e,t))},take:function(t){return this.slice(0,Math.max(0,t))},takeLast:function(t){return yr(this,this.toSeq().reverse().take(t).reverse())},takeWhile:function(t,e){return yr(this,ir(this,t,e))},takeUntil:function(t,e){return this.takeWhile(tn(t),e)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=un(this))}});var Xr=r.prototype;Xr[l]=!0,Xr[Y]=Xr.values,Xr.__toJS=Xr.toArray,Xr.__toStringMapper=rn,Xr.inspect=Xr.toSource=function(){return this.toString()},Xr.chain=Xr.flatMap,Xr.contains=Xr.includes,$r(n,{flip:function(){return yr(this,Ve(this))},mapEntries:function(t,e){var r=this,n=0;return yr(this,this.toSeq().map((function(i,o){return t.call(e,[o,i],n++,r)})).fromEntrySeq())},mapKeys:function(t,e){var r=this;return yr(this,this.toSeq().flip().map((function(n,i){return t.call(e,n,i,r)})).flip())}});var Vr=n.prototype;function Hr(t,e){return e}function Kr(t,e){return[e,t]}function tn(t){return function(){return!t.apply(this,arguments)}}function en(t){return function(){return-t.apply(this,arguments)}}function rn(t){return\"string\"==typeof t?JSON.stringify(t):String(t)}function nn(){return m(arguments)}function on(t,e){return t<e?1:t>e?-1:0}function un(t){if(t.size===1/0)return 0;var e=f(t),r=s(t),n=e?1:0;return sn(t.__iterate(r?e?function(t,e){n=31*n+an(St(t),St(e))|0}:function(t,e){n=n+an(St(t),St(e))|0}:e?function(t){n=31*n+St(t)|0}:function(t){n=n+St(t)|0}),n)}function sn(t,e){return e=Dt(e,3432918353),e=Dt(e<<15|e>>>-15,461845907),e=Dt(e<<13|e>>>-13,5),e=Dt((e=(e+3864292196|0)^t)^e>>>16,2246822507),e=It((e=Dt(e^e>>>13,3266489909))^e>>>16)}function an(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}return Vr[h]=!0,Vr[Y]=Xr.entries,Vr.__toJS=Xr.toObject,Vr.__toStringMapper=function(t,e){return JSON.stringify(e)+\": \"+rn(t)},$r(i,{toKeyedSeq:function(){return new Je(this,!1)},filter:function(t,e){return yr(this,tr(this,t,e,!1))},findIndex:function(t,e){var r=this.findEntry(t,e);return r?r[0]:-1},indexOf:function(t){var e=this.keyOf(t);return void 0===e?-1:e},lastIndexOf:function(t){var e=this.lastKeyOf(t);return void 0===e?-1:e},reverse:function(){return yr(this,Ke(this,!1))},slice:function(t,e){return yr(this,nr(this,t,e,!1))},splice:function(t,e){var r=arguments.length;if(e=Math.max(0|e,0),0===r||2===r&&!e)return this;t=A(t,t<0?this.count():this.size);var n=this.slice(0,t);return yr(this,1===r?n:n.concat(m(arguments,2),this.slice(t+e)))},findLastIndex:function(t,e){var r=this.findLastEntry(t,e);return r?r[0]:-1},first:function(){return this.get(0)},flatten:function(t){return yr(this,sr(this,t,!1))},get:function(t,e){return(t=I(this,t))<0||this.size===1/0||void 0!==this.size&&t>this.size?e:this.find((function(e,r){return r===t}),void 0,e)},has:function(t){return(t=I(this,t))>=0&&(void 0!==this.size?this.size===1/0||t<this.size:-1!==this.indexOf(t))},interpose:function(t){return yr(this,cr(this,t))},interleave:function(){var t=[this].concat(m(arguments)),e=pr(this.toSeq(),$.of,t),r=e.flatten(!0);return e.size&&(r.size=e.size*t.length),yr(this,r)},keySeq:function(){return _t(0,this.size)},last:function(){return this.get(-1)},skipWhile:function(t,e){return yr(this,or(this,t,e,!1))},zip:function(){return yr(this,pr(this,nn,[this].concat(m(arguments))))},zipWith:function(t){var e=m(arguments);return e[0]=this,yr(this,pr(this,t,e))}}),i.prototype[p]=!0,i.prototype[y]=!0,$r(o,{get:function(t,e){return this.has(t)?t:e},includes:function(t){return this.has(t)},keySeq:function(){return this.valueSeq()}}),o.prototype.has=Xr.includes,o.prototype.contains=o.prototype.includes,$r(Z,n.prototype),$r($,i.prototype),$r(X,o.prototype),$r(Nt,n.prototype),$r(xt,i.prototype),$r(mt,o.prototype),{Iterable:r,Seq:J,Collection:jt,Map:Gt,OrderedMap:Fe,List:xe,Stack:Fr,Set:Sr,OrderedSet:kr,Record:jr,Range:_t,Repeat:vt,is:dt,fromJS:pt}}()},5717:t=>{\"function\"==typeof Object.create?t.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:t.exports=function(t,e){if(e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}}},8552:(t,e,r)=>{var n=r(852)(r(5639),\"DataView\");t.exports=n},1989:(t,e,r)=>{var n=r(1789),i=r(401),o=r(7667),u=r(1327),s=r(1866);function a(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}a.prototype.clear=n,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},8407:(t,e,r)=>{var n=r(7040),i=r(4125),o=r(2117),u=r(7518),s=r(4705);function a(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}a.prototype.clear=n,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},7071:(t,e,r)=>{var n=r(852)(r(5639),\"Map\");t.exports=n},3369:(t,e,r)=>{var n=r(4785),i=r(1285),o=r(6e3),u=r(9916),s=r(5265);function a(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}a.prototype.clear=n,a.prototype.delete=i,a.prototype.get=o,a.prototype.has=u,a.prototype.set=s,t.exports=a},3818:(t,e,r)=>{var n=r(852)(r(5639),\"Promise\");t.exports=n},8525:(t,e,r)=>{var n=r(852)(r(5639),\"Set\");t.exports=n},8668:(t,e,r)=>{var n=r(3369),i=r(619),o=r(2385);function u(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new n;++e<r;)this.add(t[e])}u.prototype.add=u.prototype.push=i,u.prototype.has=o,t.exports=u},6384:(t,e,r)=>{var n=r(8407),i=r(7465),o=r(3779),u=r(7599),s=r(4758),a=r(4309);function c(t){var e=this.__data__=new n(t);this.size=e.size}c.prototype.clear=i,c.prototype.delete=o,c.prototype.get=u,c.prototype.has=s,c.prototype.set=a,t.exports=c},2705:(t,e,r)=>{var n=r(5639).Symbol;t.exports=n},1149:(t,e,r)=>{var n=r(5639).Uint8Array;t.exports=n},577:(t,e,r)=>{var n=r(852)(r(5639),\"WeakMap\");t.exports=n},4963:t=>{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var u=t[r];e(u,r,t)&&(o[i++]=u)}return o}},4636:(t,e,r)=>{var n=r(2545),i=r(5694),o=r(1469),u=r(4144),s=r(5776),a=r(6719),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var r=o(t),f=!r&&i(t),l=!r&&!f&&u(t),h=!r&&!f&&!l&&a(t),p=r||f||l||h,y=p?n(t.length,String):[],M=y.length;for(var w in t)!e&&!c.call(t,w)||p&&(\"length\"==w||l&&(\"offset\"==w||\"parent\"==w)||h&&(\"buffer\"==w||\"byteLength\"==w||\"byteOffset\"==w)||s(w,M))||y.push(w);return y}},9932:t=>{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}},2488:t=>{t.exports=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}},2663:t=>{t.exports=function(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}},4855:t=>{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}},4286:t=>{t.exports=function(t){return t.split(\"\")}},9029:t=>{var e=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;t.exports=function(t){return t.match(e)||[]}},4865:(t,e,r)=>{var n=r(9465),i=r(7813),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){var u=t[e];o.call(t,e)&&i(u,r)&&(void 0!==r||e in t)||n(t,e,r)}},8470:(t,e,r)=>{var n=r(7813);t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return-1}},9465:(t,e,r)=>{var n=r(8777);t.exports=function(t,e,r){\"__proto__\"==e&&n?n(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},9881:(t,e,r)=>{var n=r(7816),i=r(9291)(n);t.exports=i},1848:t=>{t.exports=function(t,e,r,n){for(var i=t.length,o=r+(n?1:-1);n?o--:++o<i;)if(e(t[o],o,t))return o;return-1}},8483:(t,e,r)=>{var n=r(5063)();t.exports=n},7816:(t,e,r)=>{var n=r(8483),i=r(3674);t.exports=function(t,e){return t&&n(t,e,i)}},7786:(t,e,r)=>{var n=r(1811),i=r(327);t.exports=function(t,e){for(var r=0,o=(e=n(e,t)).length;null!=t&&r<o;)t=t[i(e[r++])];return r&&r==o?t:void 0}},8866:(t,e,r)=>{var n=r(2488),i=r(1469);t.exports=function(t,e,r){var o=e(t);return i(t)?o:n(o,r(t))}},4239:(t,e,r)=>{var n=r(2705),i=r(9607),o=r(2333),u=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?\"[object Undefined]\":\"[object Null]\":u&&u in Object(t)?i(t):o(t)}},13:t=>{t.exports=function(t,e){return null!=t&&e in Object(t)}},9454:(t,e,r)=>{var n=r(4239),i=r(7005);t.exports=function(t){return i(t)&&\"[object Arguments]\"==n(t)}},939:(t,e,r)=>{var n=r(2492),i=r(7005);t.exports=function t(e,r,o,u,s){return e===r||(null==e||null==r||!i(e)&&!i(r)?e!=e&&r!=r:n(e,r,o,u,t,s))}},2492:(t,e,r)=>{var n=r(6384),i=r(7114),o=r(8351),u=r(6096),s=r(8882),a=r(1469),c=r(4144),f=r(6719),l=\"[object Arguments]\",h=\"[object Array]\",p=\"[object Object]\",y=Object.prototype.hasOwnProperty;t.exports=function(t,e,r,M,w,d){var g=a(t),v=a(e),L=g?h:s(t),_=v?h:s(e),j=(L=L==l?p:L)==p,N=(_=_==l?p:_)==p,x=L==_;if(x&&c(t)){if(!c(e))return!1;g=!0,j=!1}if(x&&!j)return d||(d=new n),g||f(t)?i(t,e,r,M,w,d):o(t,e,L,r,M,w,d);if(!(1&r)){var m=j&&y.call(t,\"__wrapped__\"),D=N&&y.call(e,\"__wrapped__\");if(m||D){var I=m?t.value():t,S=D?e.value():e;return d||(d=new n),w(I,S,r,M,d)}}return!!x&&(d||(d=new n),u(t,e,r,M,w,d))}},2958:(t,e,r)=>{var n=r(6384),i=r(939);t.exports=function(t,e,r,o){var u=r.length,s=u,a=!o;if(null==t)return!s;for(t=Object(t);u--;){var c=r[u];if(a&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<s;){var f=(c=r[u])[0],l=t[f],h=c[1];if(a&&c[2]){if(void 0===l&&!(f in t))return!1}else{var p=new n;if(o)var y=o(l,h,f,t,e,p);if(!(void 0===y?i(h,l,3,o,p):y))return!1}}return!0}},8458:(t,e,r)=>{var n=r(3560),i=r(5346),o=r(3218),u=r(346),s=/^\\[object .+?Constructor\\]$/,a=Function.prototype,c=Object.prototype,f=a.toString,l=c.hasOwnProperty,h=RegExp(\"^\"+f.call(l).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\");t.exports=function(t){return!(!o(t)||i(t))&&(n(t)?h:s).test(u(t))}},8749:(t,e,r)=>{var n=r(4239),i=r(1780),o=r(7005),u={};u[\"[object Float32Array]\"]=u[\"[object Float64Array]\"]=u[\"[object Int8Array]\"]=u[\"[object Int16Array]\"]=u[\"[object Int32Array]\"]=u[\"[object Uint8Array]\"]=u[\"[object Uint8ClampedArray]\"]=u[\"[object Uint16Array]\"]=u[\"[object Uint32Array]\"]=!0,u[\"[object Arguments]\"]=u[\"[object Array]\"]=u[\"[object ArrayBuffer]\"]=u[\"[object Boolean]\"]=u[\"[object DataView]\"]=u[\"[object Date]\"]=u[\"[object Error]\"]=u[\"[object Function]\"]=u[\"[object Map]\"]=u[\"[object Number]\"]=u[\"[object Object]\"]=u[\"[object RegExp]\"]=u[\"[object Set]\"]=u[\"[object String]\"]=u[\"[object WeakMap]\"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!u[n(t)]}},7206:(t,e,r)=>{var n=r(1573),i=r(6432),o=r(6557),u=r(1469),s=r(1733);t.exports=function(t){return\"function\"==typeof t?t:null==t?o:\"object\"==typeof t?u(t)?i(t[0],t[1]):n(t):s(t)}},280:(t,e,r)=>{var n=r(5726),i=r(6916),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return i(t);var e=[];for(var r in Object(t))o.call(t,r)&&\"constructor\"!=r&&e.push(r);return e}},1573:(t,e,r)=>{var n=r(2958),i=r(1499),o=r(2634);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(r){return r===t||n(r,t,e)}}},6432:(t,e,r)=>{var n=r(939),i=r(7361),o=r(9095),u=r(5403),s=r(9162),a=r(2634),c=r(327);t.exports=function(t,e){return u(t)&&s(e)?a(c(t),e):function(r){var u=i(r,t);return void 0===u&&u===e?o(r,t):n(e,u,3)}}},371:t=>{t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},9152:(t,e,r)=>{var n=r(7786);t.exports=function(t){return function(e){return n(e,t)}}},8674:t=>{t.exports=function(t){return function(e){return null==t?void 0:t[e]}}},4259:t=>{t.exports=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}},5076:(t,e,r)=>{var n=r(9881);t.exports=function(t,e){var r;return n(t,(function(t,n,i){return!(r=e(t,n,i))})),!!r}},2545:t=>{t.exports=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}},531:(t,e,r)=>{var n=r(2705),i=r(9932),o=r(1469),u=r(3448),s=n?n.prototype:void 0,a=s?s.toString:void 0;t.exports=function t(e){if(\"string\"==typeof e)return e;if(o(e))return i(e,t)+\"\";if(u(e))return a?a.call(e):\"\";var r=e+\"\";return\"0\"==r&&1/e==-Infinity?\"-0\":r}},7561:(t,e,r)=>{var n=r(7990),i=/^\\s+/;t.exports=function(t){return t?t.slice(0,n(t)+1).replace(i,\"\"):t}},1717:t=>{t.exports=function(t){return function(e){return t(e)}}},1757:t=>{t.exports=function(t,e,r){for(var n=-1,i=t.length,o=e.length,u={};++n<i;){var s=n<o?e[n]:void 0;r(u,t[n],s)}return u}},4757:t=>{t.exports=function(t,e){return t.has(e)}},1811:(t,e,r)=>{var n=r(1469),i=r(5403),o=r(5514),u=r(9833);t.exports=function(t,e){return n(t)?t:i(t,e)?[t]:o(u(t))}},180:(t,e,r)=>{var n=r(4259);t.exports=function(t,e,r){var i=t.length;return r=void 0===r?i:r,!e&&r>=i?t:n(t,e,r)}},4429:(t,e,r)=>{var n=r(5639)[\"__core-js_shared__\"];t.exports=n},9291:(t,e,r)=>{var n=r(8612);t.exports=function(t,e){return function(r,i){if(null==r)return r;if(!n(r))return t(r,i);for(var o=r.length,u=e?o:-1,s=Object(r);(e?u--:++u<o)&&!1!==i(s[u],u,s););return r}}},5063:t=>{t.exports=function(t){return function(e,r,n){for(var i=-1,o=Object(e),u=n(e),s=u.length;s--;){var a=u[t?s:++i];if(!1===r(o[a],a,o))break}return e}}},8805:(t,e,r)=>{var n=r(180),i=r(2689),o=r(3140),u=r(9833);t.exports=function(t){return function(e){e=u(e);var r=i(e)?o(e):void 0,s=r?r[0]:e.charAt(0),a=r?n(r,1).join(\"\"):e.slice(1);return s[t]()+a}}},5393:(t,e,r)=>{var n=r(2663),i=r(3816),o=r(8748),u=RegExp(\"['’]\",\"g\");t.exports=function(t){return function(e){return n(o(i(e).replace(u,\"\")),t,\"\")}}},7740:(t,e,r)=>{var n=r(7206),i=r(8612),o=r(3674);t.exports=function(t){return function(e,r,u){var s=Object(e);if(!i(e)){var a=n(r,3);e=o(e),r=function(t){return a(s[t],t,s)}}var c=t(e,r,u);return c>-1?s[a?e[c]:c]:void 0}}},9389:(t,e,r)=>{var n=r(8674)({À:\"A\",Á:\"A\",Â:\"A\",Ã:\"A\",Ä:\"A\",Å:\"A\",à:\"a\",á:\"a\",â:\"a\",ã:\"a\",ä:\"a\",å:\"a\",Ç:\"C\",ç:\"c\",Ð:\"D\",ð:\"d\",È:\"E\",É:\"E\",Ê:\"E\",Ë:\"E\",è:\"e\",é:\"e\",ê:\"e\",ë:\"e\",Ì:\"I\",Í:\"I\",Î:\"I\",Ï:\"I\",ì:\"i\",í:\"i\",î:\"i\",ï:\"i\",Ñ:\"N\",ñ:\"n\",Ò:\"O\",Ó:\"O\",Ô:\"O\",Õ:\"O\",Ö:\"O\",Ø:\"O\",ò:\"o\",ó:\"o\",ô:\"o\",õ:\"o\",ö:\"o\",ø:\"o\",Ù:\"U\",Ú:\"U\",Û:\"U\",Ü:\"U\",ù:\"u\",ú:\"u\",û:\"u\",ü:\"u\",Ý:\"Y\",ý:\"y\",ÿ:\"y\",Æ:\"Ae\",æ:\"ae\",Þ:\"Th\",þ:\"th\",ß:\"ss\",Ā:\"A\",Ă:\"A\",Ą:\"A\",ā:\"a\",ă:\"a\",ą:\"a\",Ć:\"C\",Ĉ:\"C\",Ċ:\"C\",Č:\"C\",ć:\"c\",ĉ:\"c\",ċ:\"c\",č:\"c\",Ď:\"D\",Đ:\"D\",ď:\"d\",đ:\"d\",Ē:\"E\",Ĕ:\"E\",Ė:\"E\",Ę:\"E\",Ě:\"E\",ē:\"e\",ĕ:\"e\",ė:\"e\",ę:\"e\",ě:\"e\",Ĝ:\"G\",Ğ:\"G\",Ġ:\"G\",Ģ:\"G\",ĝ:\"g\",ğ:\"g\",ġ:\"g\",ģ:\"g\",Ĥ:\"H\",Ħ:\"H\",ĥ:\"h\",ħ:\"h\",Ĩ:\"I\",Ī:\"I\",Ĭ:\"I\",Į:\"I\",İ:\"I\",ĩ:\"i\",ī:\"i\",ĭ:\"i\",į:\"i\",ı:\"i\",Ĵ:\"J\",ĵ:\"j\",Ķ:\"K\",ķ:\"k\",ĸ:\"k\",Ĺ:\"L\",Ļ:\"L\",Ľ:\"L\",Ŀ:\"L\",Ł:\"L\",ĺ:\"l\",ļ:\"l\",ľ:\"l\",ŀ:\"l\",ł:\"l\",Ń:\"N\",Ņ:\"N\",Ň:\"N\",Ŋ:\"N\",ń:\"n\",ņ:\"n\",ň:\"n\",ŋ:\"n\",Ō:\"O\",Ŏ:\"O\",Ő:\"O\",ō:\"o\",ŏ:\"o\",ő:\"o\",Ŕ:\"R\",Ŗ:\"R\",Ř:\"R\",ŕ:\"r\",ŗ:\"r\",ř:\"r\",Ś:\"S\",Ŝ:\"S\",Ş:\"S\",Š:\"S\",ś:\"s\",ŝ:\"s\",ş:\"s\",š:\"s\",Ţ:\"T\",Ť:\"T\",Ŧ:\"T\",ţ:\"t\",ť:\"t\",ŧ:\"t\",Ũ:\"U\",Ū:\"U\",Ŭ:\"U\",Ů:\"U\",Ű:\"U\",Ų:\"U\",ũ:\"u\",ū:\"u\",ŭ:\"u\",ů:\"u\",ű:\"u\",ų:\"u\",Ŵ:\"W\",ŵ:\"w\",Ŷ:\"Y\",ŷ:\"y\",Ÿ:\"Y\",Ź:\"Z\",Ż:\"Z\",Ž:\"Z\",ź:\"z\",ż:\"z\",ž:\"z\",Ĳ:\"IJ\",ĳ:\"ij\",Œ:\"Oe\",œ:\"oe\",ŉ:\"'n\",ſ:\"s\"});t.exports=n},8777:(t,e,r)=>{var n=r(852),i=function(){try{var t=n(Object,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}();t.exports=i},7114:(t,e,r)=>{var n=r(8668),i=r(4855),o=r(4757);t.exports=function(t,e,r,u,s,a){var c=1&r,f=t.length,l=e.length;if(f!=l&&!(c&&l>f))return!1;var h=a.get(t),p=a.get(e);if(h&&p)return h==e&&p==t;var y=-1,M=!0,w=2&r?new n:void 0;for(a.set(t,e),a.set(e,t);++y<f;){var d=t[y],g=e[y];if(u)var v=c?u(g,d,y,e,t,a):u(d,g,y,t,e,a);if(void 0!==v){if(v)continue;M=!1;break}if(w){if(!i(e,(function(t,e){if(!o(w,e)&&(d===t||s(d,t,r,u,a)))return w.push(e)}))){M=!1;break}}else if(d!==g&&!s(d,g,r,u,a)){M=!1;break}}return a.delete(t),a.delete(e),M}},8351:(t,e,r)=>{var n=r(2705),i=r(1149),o=r(7813),u=r(7114),s=r(8776),a=r(1814),c=n?n.prototype:void 0,f=c?c.valueOf:void 0;t.exports=function(t,e,r,n,c,l,h){switch(r){case\"[object DataView]\":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case\"[object ArrayBuffer]\":return!(t.byteLength!=e.byteLength||!l(new i(t),new i(e)));case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return o(+t,+e);case\"[object Error]\":return t.name==e.name&&t.message==e.message;case\"[object RegExp]\":case\"[object String]\":return t==e+\"\";case\"[object Map]\":var p=s;case\"[object Set]\":var y=1&n;if(p||(p=a),t.size!=e.size&&!y)return!1;var M=h.get(t);if(M)return M==e;n|=2,h.set(t,e);var w=u(p(t),p(e),n,c,l,h);return h.delete(t),w;case\"[object Symbol]\":if(f)return f.call(t)==f.call(e)}return!1}},6096:(t,e,r)=>{var n=r(8234),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,r,o,u,s){var a=1&r,c=n(t),f=c.length;if(f!=n(e).length&&!a)return!1;for(var l=f;l--;){var h=c[l];if(!(a?h in e:i.call(e,h)))return!1}var p=s.get(t),y=s.get(e);if(p&&y)return p==e&&y==t;var M=!0;s.set(t,e),s.set(e,t);for(var w=a;++l<f;){var d=t[h=c[l]],g=e[h];if(o)var v=a?o(g,d,h,e,t,s):o(d,g,h,t,e,s);if(!(void 0===v?d===g||u(d,g,r,o,s):v)){M=!1;break}w||(w=\"constructor\"==h)}if(M&&!w){var L=t.constructor,_=e.constructor;L==_||!(\"constructor\"in t)||!(\"constructor\"in e)||\"function\"==typeof L&&L instanceof L&&\"function\"==typeof _&&_ instanceof _||(M=!1)}return s.delete(t),s.delete(e),M}},1957:(t,e,r)=>{var n=\"object\"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;t.exports=n},8234:(t,e,r)=>{var n=r(8866),i=r(9551),o=r(3674);t.exports=function(t){return n(t,o,i)}},5050:(t,e,r)=>{var n=r(7019);t.exports=function(t,e){var r=t.__data__;return n(e)?r[\"string\"==typeof e?\"string\":\"hash\"]:r.map}},1499:(t,e,r)=>{var n=r(9162),i=r(3674);t.exports=function(t){for(var e=i(t),r=e.length;r--;){var o=e[r],u=t[o];e[r]=[o,u,n(u)]}return e}},852:(t,e,r)=>{var n=r(8458),i=r(7801);t.exports=function(t,e){var r=i(t,e);return n(r)?r:void 0}},9607:(t,e,r)=>{var n=r(2705),i=Object.prototype,o=i.hasOwnProperty,u=i.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var i=u.call(t);return n&&(e?t[s]=r:delete t[s]),i}},9551:(t,e,r)=>{var n=r(4963),i=r(479),o=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,s=u?function(t){return null==t?[]:(t=Object(t),n(u(t),(function(e){return o.call(t,e)})))}:i;t.exports=s},8882:(t,e,r)=>{var n=r(8552),i=r(7071),o=r(3818),u=r(8525),s=r(577),a=r(4239),c=r(346),f=\"[object Map]\",l=\"[object Promise]\",h=\"[object Set]\",p=\"[object WeakMap]\",y=\"[object DataView]\",M=c(n),w=c(i),d=c(o),g=c(u),v=c(s),L=a;(n&&L(new n(new ArrayBuffer(1)))!=y||i&&L(new i)!=f||o&&L(o.resolve())!=l||u&&L(new u)!=h||s&&L(new s)!=p)&&(L=function(t){var e=a(t),r=\"[object Object]\"==e?t.constructor:void 0,n=r?c(r):\"\";if(n)switch(n){case M:return y;case w:return f;case d:return l;case g:return h;case v:return p}return e}),t.exports=L},7801:t=>{t.exports=function(t,e){return null==t?void 0:t[e]}},222:(t,e,r)=>{var n=r(1811),i=r(5694),o=r(1469),u=r(5776),s=r(1780),a=r(327);t.exports=function(t,e,r){for(var c=-1,f=(e=n(e,t)).length,l=!1;++c<f;){var h=a(e[c]);if(!(l=null!=t&&r(t,h)))break;t=t[h]}return l||++c!=f?l:!!(f=null==t?0:t.length)&&s(f)&&u(h,f)&&(o(t)||i(t))}},2689:t=>{var e=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\");t.exports=function(t){return e.test(t)}},3157:t=>{var e=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;t.exports=function(t){return e.test(t)}},1789:(t,e,r)=>{var n=r(4536);t.exports=function(){this.__data__=n?n(null):{},this.size=0}},401:t=>{t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},7667:(t,e,r)=>{var n=r(4536),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return\"__lodash_hash_undefined__\"===r?void 0:r}return i.call(e,t)?e[t]:void 0}},1327:(t,e,r)=>{var n=r(4536),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:i.call(e,t)}},1866:(t,e,r)=>{var n=r(4536);t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?\"__lodash_hash_undefined__\":e,this}},5776:t=>{var e=/^(?:0|[1-9]\\d*)$/;t.exports=function(t,r){var n=typeof t;return!!(r=null==r?9007199254740991:r)&&(\"number\"==n||\"symbol\"!=n&&e.test(t))&&t>-1&&t%1==0&&t<r}},6612:(t,e,r)=>{var n=r(7813),i=r(8612),o=r(5776),u=r(3218);t.exports=function(t,e,r){if(!u(r))return!1;var s=typeof e;return!!(\"number\"==s?i(r)&&o(e,r.length):\"string\"==s&&e in r)&&n(r[e],t)}},5403:(t,e,r)=>{var n=r(1469),i=r(3448),o=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,u=/^\\w*$/;t.exports=function(t,e){if(n(t))return!1;var r=typeof t;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=t&&!i(t))||(u.test(t)||!o.test(t)||null!=e&&t in Object(e))}},7019:t=>{t.exports=function(t){var e=typeof t;return\"string\"==e||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==t:null===t}},5346:(t,e,r)=>{var n,i=r(4429),o=(n=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+n:\"\";t.exports=function(t){return!!o&&o in t}},5726:t=>{var e=Object.prototype;t.exports=function(t){var r=t&&t.constructor;return t===(\"function\"==typeof r&&r.prototype||e)}},9162:(t,e,r)=>{var n=r(3218);t.exports=function(t){return t==t&&!n(t)}},7040:t=>{t.exports=function(){this.__data__=[],this.size=0}},4125:(t,e,r)=>{var n=r(8470),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0)&&(r==e.length-1?e.pop():i.call(e,r,1),--this.size,!0)}},2117:(t,e,r)=>{var n=r(8470);t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},7518:(t,e,r)=>{var n=r(8470);t.exports=function(t){return n(this.__data__,t)>-1}},4705:(t,e,r)=>{var n=r(8470);t.exports=function(t,e){var r=this.__data__,i=n(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}},4785:(t,e,r)=>{var n=r(1989),i=r(8407),o=r(7071);t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(o||i),string:new n}}},1285:(t,e,r)=>{var n=r(5050);t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},6e3:(t,e,r)=>{var n=r(5050);t.exports=function(t){return n(this,t).get(t)}},9916:(t,e,r)=>{var n=r(5050);t.exports=function(t){return n(this,t).has(t)}},5265:(t,e,r)=>{var n=r(5050);t.exports=function(t,e){var r=n(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}},8776:t=>{t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t,n){r[++e]=[n,t]})),r}},2634:t=>{t.exports=function(t,e){return function(r){return null!=r&&(r[t]===e&&(void 0!==e||t in Object(r)))}}},4569:(t,e,r)=>{var n=r(8306);t.exports=function(t){var e=n(t,(function(t){return 500===r.size&&r.clear(),t})),r=e.cache;return e}},4536:(t,e,r)=>{var n=r(852)(Object,\"create\");t.exports=n},6916:(t,e,r)=>{var n=r(5569)(Object.keys,Object);t.exports=n},1167:(t,e,r)=>{t=r.nmd(t);var n=r(1957),i=e&&!e.nodeType&&e,o=i&&t&&!t.nodeType&&t,u=o&&o.exports===i&&n.process,s=function(){try{var t=o&&o.require&&o.require(\"util\").types;return t||u&&u.binding&&u.binding(\"util\")}catch(t){}}();t.exports=s},2333:t=>{var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},5569:t=>{t.exports=function(t,e){return function(r){return t(e(r))}}},5639:(t,e,r)=>{var n=r(1957),i=\"object\"==typeof self&&self&&self.Object===Object&&self,o=n||i||Function(\"return this\")();t.exports=o},619:t=>{t.exports=function(t){return this.__data__.set(t,\"__lodash_hash_undefined__\"),this}},2385:t=>{t.exports=function(t){return this.__data__.has(t)}},1814:t=>{t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t){r[++e]=t})),r}},7465:(t,e,r)=>{var n=r(8407);t.exports=function(){this.__data__=new n,this.size=0}},3779:t=>{t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},7599:t=>{t.exports=function(t){return this.__data__.get(t)}},4758:t=>{t.exports=function(t){return this.__data__.has(t)}},4309:(t,e,r)=>{var n=r(8407),i=r(7071),o=r(3369);t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var u=r.__data__;if(!i||u.length<199)return u.push([t,e]),this.size=++r.size,this;r=this.__data__=new o(u)}return r.set(t,e),this.size=r.size,this}},3140:(t,e,r)=>{var n=r(4286),i=r(2689),o=r(676);t.exports=function(t){return i(t)?o(t):n(t)}},5514:(t,e,r)=>{var n=r(4569),i=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,o=/\\\\(\\\\)?/g,u=n((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(\"\"),t.replace(i,(function(t,r,n,i){e.push(n?i.replace(o,\"$1\"):r||t)})),e}));t.exports=u},327:(t,e,r)=>{var n=r(3448);t.exports=function(t){if(\"string\"==typeof t||n(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-Infinity?\"-0\":e}},346:t=>{var e=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return e.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}},7990:t=>{var e=/\\s/;t.exports=function(t){for(var r=t.length;r--&&e.test(t.charAt(r)););return r}},676:t=>{var e=\"\\\\ud800-\\\\udfff\",r=\"[\"+e+\"]\",n=\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",i=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",o=\"[^\"+e+\"]\",u=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",s=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",a=\"(?:\"+n+\"|\"+i+\")\"+\"?\",c=\"[\\\\ufe0e\\\\ufe0f]?\",f=c+a+(\"(?:\\\\u200d(?:\"+[o,u,s].join(\"|\")+\")\"+c+a+\")*\"),l=\"(?:\"+[o+n+\"?\",n,u,s,r].join(\"|\")+\")\",h=RegExp(i+\"(?=\"+i+\")|\"+l+f,\"g\");t.exports=function(t){return t.match(h)||[]}},2757:t=>{var e=\"\\\\ud800-\\\\udfff\",r=\"\\\\u2700-\\\\u27bf\",n=\"a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff\",i=\"A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde\",o=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",u=\"[\"+o+\"]\",s=\"\\\\d+\",a=\"[\"+r+\"]\",c=\"[\"+n+\"]\",f=\"[^\"+e+o+s+r+n+i+\"]\",l=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",h=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",p=\"[\"+i+\"]\",y=\"(?:\"+c+\"|\"+f+\")\",M=\"(?:\"+p+\"|\"+f+\")\",w=\"(?:['’](?:d|ll|m|re|s|t|ve))?\",d=\"(?:['’](?:D|LL|M|RE|S|T|VE))?\",g=\"(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?\",v=\"[\\\\ufe0e\\\\ufe0f]?\",L=v+g+(\"(?:\\\\u200d(?:\"+[\"[^\"+e+\"]\",l,h].join(\"|\")+\")\"+v+g+\")*\"),_=\"(?:\"+[a,l,h].join(\"|\")+\")\"+L,j=RegExp([p+\"?\"+c+\"+\"+w+\"(?=\"+[u,p,\"$\"].join(\"|\")+\")\",M+\"+\"+d+\"(?=\"+[u,p+y,\"$\"].join(\"|\")+\")\",p+\"?\"+y+\"+\"+w,p+\"+\"+d,\"\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])\",\"\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])\",s,_].join(\"|\"),\"g\");t.exports=function(t){return t.match(j)||[]}},1540:(t,e,r)=>{var n=r(8403),i=r(5393)((function(t,e,r){return e=e.toLowerCase(),t+(r?n(e):e)}));t.exports=i},8403:(t,e,r)=>{var n=r(9833),i=r(1700);t.exports=function(t){return i(n(t).toLowerCase())}},3816:(t,e,r)=>{var n=r(9389),i=r(9833),o=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,u=RegExp(\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\"g\");t.exports=function(t){return(t=i(t))&&t.replace(o,n).replace(u,\"\")}},7813:t=>{t.exports=function(t,e){return t===e||t!=t&&e!=e}},3311:(t,e,r)=>{var n=r(7740)(r(998));t.exports=n},998:(t,e,r)=>{var n=r(1848),i=r(7206),o=r(554),u=Math.max;t.exports=function(t,e,r){var s=null==t?0:t.length;if(!s)return-1;var a=null==r?0:o(r);return a<0&&(a=u(s+a,0)),n(t,i(e,3),a)}},7361:(t,e,r)=>{var n=r(7786);t.exports=function(t,e,r){var i=null==t?void 0:n(t,e);return void 0===i?r:i}},9095:(t,e,r)=>{var n=r(13),i=r(222);t.exports=function(t,e){return null!=t&&i(t,e,n)}},6557:t=>{t.exports=function(t){return t}},5694:(t,e,r)=>{var n=r(9454),i=r(7005),o=Object.prototype,u=o.hasOwnProperty,s=o.propertyIsEnumerable,a=n(function(){return arguments}())?n:function(t){return i(t)&&u.call(t,\"callee\")&&!s.call(t,\"callee\")};t.exports=a},1469:t=>{var e=Array.isArray;t.exports=e},8612:(t,e,r)=>{var n=r(3560),i=r(1780);t.exports=function(t){return null!=t&&i(t.length)&&!n(t)}},4144:(t,e,r)=>{t=r.nmd(t);var n=r(5639),i=r(5062),o=e&&!e.nodeType&&e,u=o&&t&&!t.nodeType&&t,s=u&&u.exports===o?n.Buffer:void 0,a=(s?s.isBuffer:void 0)||i;t.exports=a},3560:(t,e,r)=>{var n=r(4239),i=r(3218);t.exports=function(t){if(!i(t))return!1;var e=n(t);return\"[object Function]\"==e||\"[object GeneratorFunction]\"==e||\"[object AsyncFunction]\"==e||\"[object Proxy]\"==e}},1780:t=>{t.exports=function(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},3218:t=>{t.exports=function(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}},7005:t=>{t.exports=function(t){return null!=t&&\"object\"==typeof t}},3448:(t,e,r)=>{var n=r(4239),i=r(7005);t.exports=function(t){return\"symbol\"==typeof t||i(t)&&\"[object Symbol]\"==n(t)}},6719:(t,e,r)=>{var n=r(8749),i=r(1717),o=r(1167),u=o&&o.isTypedArray,s=u?i(u):n;t.exports=s},3674:(t,e,r)=>{var n=r(4636),i=r(280),o=r(8612);t.exports=function(t){return o(t)?n(t):i(t)}},8306:(t,e,r)=>{var n=r(3369);function i(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new TypeError(\"Expected a function\");var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var u=t.apply(this,n);return r.cache=o.set(i,u)||o,u};return r.cache=new(i.Cache||n),r}i.Cache=n,t.exports=i},1733:(t,e,r)=>{var n=r(371),i=r(9152),o=r(5403),u=r(327);t.exports=function(t){return o(t)?n(u(t)):i(t)}},9704:(t,e,r)=>{var n=r(4855),i=r(7206),o=r(5076),u=r(1469),s=r(6612);t.exports=function(t,e,r){var a=u(t)?n:o;return r&&s(t,e,r)&&(e=void 0),a(t,i(e,3))}},479:t=>{t.exports=function(){return[]}},5062:t=>{t.exports=function(){return!1}},8601:(t,e,r)=>{var n=r(4841),i=1/0;t.exports=function(t){return t?(t=n(t))===i||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},554:(t,e,r)=>{var n=r(8601);t.exports=function(t){var e=n(t),r=e%1;return e==e?r?e-r:e:0}},4841:(t,e,r)=>{var n=r(7561),i=r(3218),o=r(3448),u=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,a=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if(\"number\"==typeof t)return t;if(o(t))return NaN;if(i(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=i(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=n(t);var r=s.test(t);return r||a.test(t)?c(t.slice(2),r?2:8):u.test(t)?NaN:+t}},9833:(t,e,r)=>{var n=r(531);t.exports=function(t){return null==t?\"\":n(t)}},1700:(t,e,r)=>{var n=r(8805)(\"toUpperCase\");t.exports=n},8748:(t,e,r)=>{var n=r(9029),i=r(3157),o=r(9833),u=r(2757);t.exports=function(t,e,r){return t=o(t),void 0===(e=r?void 0:e)?i(t)?u(t):n(t):t.match(e)||[]}},7287:(t,e,r)=>{var n=r(4865),i=r(1757);t.exports=function(t,e){return i(t||[],e||[],n)}},7418:t=>{\"use strict\";var e=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String(\"abc\");if(t[5]=\"de\",\"5\"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e[\"_\"+String.fromCharCode(r)]=r;if(\"0123456789\"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(\"\"))return!1;var n={};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(t){n[t]=t})),\"abcdefghijklmnopqrst\"===Object.keys(Object.assign({},n)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,i){for(var o,u,s=function(t){if(null==t)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}(t),a=1;a<arguments.length;a++){for(var c in o=Object(arguments[a]))r.call(o,c)&&(s[c]=o[c]);if(e){u=e(o);for(var f=0;f<u.length;f++)n.call(o,u[f])&&(s[u[f]]=o[u[f]])}}return s}},4155:t=>{var e,r,n=t.exports={};function i(){throw new Error(\"setTimeout has not been defined\")}function o(){throw new Error(\"clearTimeout has not been defined\")}function u(t){if(e===setTimeout)return setTimeout(t,0);if((e===i||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(r){try{return e.call(null,t,0)}catch(r){return e.call(this,t,0)}}}!function(){try{e=\"function\"==typeof setTimeout?setTimeout:i}catch(t){e=i}try{r=\"function\"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var s,a=[],c=!1,f=-1;function l(){c&&s&&(c=!1,s.length?a=s.concat(a):f=-1,a.length&&h())}function h(){if(!c){var t=u(l);c=!0;for(var e=a.length;e;){for(s=a,a=[];++f<e;)s&&s[f].run();f=-1,e=a.length}s=null,c=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===o||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{return r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function y(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];a.push(new p(t,e)),1!==a.length||c||u(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title=\"browser\",n.browser=!0,n.env={},n.argv=[],n.version=\"\",n.versions={},n.on=y,n.addListener=y,n.once=y,n.off=y,n.removeListener=y,n.removeAllListeners=y,n.emit=y,n.prependListener=y,n.prependOnceListener=y,n.listeners=function(t){return[]},n.binding=function(t){throw new Error(\"process.binding is not supported\")},n.cwd=function(){return\"/\"},n.chdir=function(t){throw new Error(\"process.chdir is not supported\")},n.umask=function(){return 0}},2282:(t,e,r)=>{\"use strict\";var n=r(4155),i=65536,o=4294967295;var u=r(9509).Buffer,s=r.g.crypto||r.g.msCrypto;s&&s.getRandomValues?t.exports=function(t,e){if(t>o)throw new RangeError(\"requested too many random bytes\");var r=u.allocUnsafe(t);if(t>0)if(t>i)for(var a=0;a<t;a+=i)s.getRandomValues(r.slice(a,a+i));else s.getRandomValues(r);if(\"function\"==typeof e)return n.nextTick((function(){e(null,r)}));return r}:t.exports=function(){throw new Error(\"Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11\")}},2408:(t,e,r)=>{\"use strict\";var n=r(7418),i=60103,o=60106;e.Fragment=60107,e.StrictMode=60108,e.Profiler=60114;var u=60109,s=60110,a=60112;e.Suspense=60113;var c=60115,f=60116;if(\"function\"==typeof Symbol&&Symbol.for){var l=Symbol.for;i=l(\"react.element\"),o=l(\"react.portal\"),e.Fragment=l(\"react.fragment\"),e.StrictMode=l(\"react.strict_mode\"),e.Profiler=l(\"react.profiler\"),u=l(\"react.provider\"),s=l(\"react.context\"),a=l(\"react.forward_ref\"),e.Suspense=l(\"react.suspense\"),c=l(\"react.memo\"),f=l(\"react.lazy\")}var h=\"function\"==typeof Symbol&&Symbol.iterator;function p(t){for(var e=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+t,r=1;r<arguments.length;r++)e+=\"&args[]=\"+encodeURIComponent(arguments[r]);return\"Minified React error #\"+t+\"; visit \"+e+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},M={};function w(t,e,r){this.props=t,this.context=e,this.refs=M,this.updater=r||y}function d(){}function g(t,e,r){this.props=t,this.context=e,this.refs=M,this.updater=r||y}w.prototype.isReactComponent={},w.prototype.setState=function(t,e){if(\"object\"!=typeof t&&\"function\"!=typeof t&&null!=t)throw Error(p(85));this.updater.enqueueSetState(this,t,e,\"setState\")},w.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,\"forceUpdate\")},d.prototype=w.prototype;var v=g.prototype=new d;v.constructor=g,n(v,w.prototype),v.isPureReactComponent=!0;var L={current:null},_=Object.prototype.hasOwnProperty,j={key:!0,ref:!0,__self:!0,__source:!0};function N(t,e,r){var n,o={},u=null,s=null;if(null!=e)for(n in void 0!==e.ref&&(s=e.ref),void 0!==e.key&&(u=\"\"+e.key),e)_.call(e,n)&&!j.hasOwnProperty(n)&&(o[n]=e[n]);var a=arguments.length-2;if(1===a)o.children=r;else if(1<a){for(var c=Array(a),f=0;f<a;f++)c[f]=arguments[f+2];o.children=c}if(t&&t.defaultProps)for(n in a=t.defaultProps)void 0===o[n]&&(o[n]=a[n]);return{$$typeof:i,type:t,key:u,ref:s,props:o,_owner:L.current}}function x(t){return\"object\"==typeof t&&null!==t&&t.$$typeof===i}var m=/\\/+/g;function D(t,e){return\"object\"==typeof t&&null!==t&&null!=t.key?function(t){var e={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+t.replace(/[=:]/g,(function(t){return e[t]}))}(\"\"+t.key):e.toString(36)}function I(t,e,r,n,u){var s=typeof t;\"undefined\"!==s&&\"boolean\"!==s||(t=null);var a=!1;if(null===t)a=!0;else switch(s){case\"string\":case\"number\":a=!0;break;case\"object\":switch(t.$$typeof){case i:case o:a=!0}}if(a)return u=u(a=t),t=\"\"===n?\".\"+D(a,0):n,Array.isArray(u)?(r=\"\",null!=t&&(r=t.replace(m,\"$&/\")+\"/\"),I(u,e,r,\"\",(function(t){return t}))):null!=u&&(x(u)&&(u=function(t,e){return{$$typeof:i,type:t.type,key:e,ref:t.ref,props:t.props,_owner:t._owner}}(u,r+(!u.key||a&&a.key===u.key?\"\":(\"\"+u.key).replace(m,\"$&/\")+\"/\")+t)),e.push(u)),1;if(a=0,n=\"\"===n?\".\":n+\":\",Array.isArray(t))for(var c=0;c<t.length;c++){var f=n+D(s=t[c],c);a+=I(s,e,r,f,u)}else if(f=function(t){return null===t||\"object\"!=typeof t?null:\"function\"==typeof(t=h&&t[h]||t[\"@@iterator\"])?t:null}(t),\"function\"==typeof f)for(t=f.call(t),c=0;!(s=t.next()).done;)a+=I(s=s.value,e,r,f=n+D(s,c++),u);else if(\"object\"===s)throw e=\"\"+t,Error(p(31,\"[object Object]\"===e?\"object with keys {\"+Object.keys(t).join(\", \")+\"}\":e));return a}function S(t,e,r){if(null==t)return t;var n=[],i=0;return I(t,n,\"\",\"\",(function(t){return e.call(r,t,i++)})),n}function b(t){if(-1===t._status){var e=t._result;e=e(),t._status=0,t._result=e,e.then((function(e){0===t._status&&(e=e.default,t._status=1,t._result=e)}),(function(e){0===t._status&&(t._status=2,t._result=e)}))}if(1===t._status)return t._result;throw t._result}var A={current:null};function C(){var t=A.current;if(null===t)throw Error(p(321));return t}var T={ReactCurrentDispatcher:A,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:L,IsSomeRendererActing:{current:!1},assign:n};e.Children={map:S,forEach:function(t,e,r){S(t,(function(){e.apply(this,arguments)}),r)},count:function(t){var e=0;return S(t,(function(){e++})),e},toArray:function(t){return S(t,(function(t){return t}))||[]},only:function(t){if(!x(t))throw Error(p(143));return t}},e.Component=w,e.PureComponent=g,e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T,e.cloneElement=function(t,e,r){if(null==t)throw Error(p(267,t));var o=n({},t.props),u=t.key,s=t.ref,a=t._owner;if(null!=e){if(void 0!==e.ref&&(s=e.ref,a=L.current),void 0!==e.key&&(u=\"\"+e.key),t.type&&t.type.defaultProps)var c=t.type.defaultProps;for(f in e)_.call(e,f)&&!j.hasOwnProperty(f)&&(o[f]=void 0===e[f]&&void 0!==c?c[f]:e[f])}var f=arguments.length-2;if(1===f)o.children=r;else if(1<f){c=Array(f);for(var l=0;l<f;l++)c[l]=arguments[l+2];o.children=c}return{$$typeof:i,type:t.type,key:u,ref:s,props:o,_owner:a}},e.createContext=function(t,e){return void 0===e&&(e=null),(t={$$typeof:s,_calculateChangedBits:e,_currentValue:t,_currentValue2:t,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:u,_context:t},t.Consumer=t},e.createElement=N,e.createFactory=function(t){var e=N.bind(null,t);return e.type=t,e},e.createRef=function(){return{current:null}},e.forwardRef=function(t){return{$$typeof:a,render:t}},e.isValidElement=x,e.lazy=function(t){return{$$typeof:f,_payload:{_status:-1,_result:t},_init:b}},e.memo=function(t,e){return{$$typeof:c,type:t,compare:void 0===e?null:e}},e.useCallback=function(t,e){return C().useCallback(t,e)},e.useContext=function(t,e){return C().useContext(t,e)},e.useDebugValue=function(){},e.useEffect=function(t,e){return C().useEffect(t,e)},e.useImperativeHandle=function(t,e,r){return C().useImperativeHandle(t,e,r)},e.useLayoutEffect=function(t,e){return C().useLayoutEffect(t,e)},e.useMemo=function(t,e){return C().useMemo(t,e)},e.useReducer=function(t,e,r){return C().useReducer(t,e,r)},e.useRef=function(t){return C().useRef(t)},e.useState=function(t){return C().useState(t)},e.version=\"17.0.2\"},7294:(t,e,r)=>{\"use strict\";t.exports=r(2408)},9509:(t,e,r)=>{var n=r(8764),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function u(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=u),u.prototype=Object.create(i.prototype),o(i,u),u.from=function(t,e,r){if(\"number\"==typeof t)throw new TypeError(\"Argument must not be a number\");return i(t,e,r)},u.alloc=function(t,e,r){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");var n=i(t);return void 0!==e?\"string\"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},u.allocUnsafe=function(t){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");return i(t)},u.allocUnsafeSlow=function(t){if(\"number\"!=typeof t)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(t)}},4189:(t,e,r)=>{var n=r(9509).Buffer;function i(t,e){this._block=n.alloc(t),this._finalSize=e,this._blockSize=t,this._len=0}i.prototype.update=function(t,e){\"string\"==typeof t&&(e=e||\"utf8\",t=n.from(t,e));for(var r=this._block,i=this._blockSize,o=t.length,u=this._len,s=0;s<o;){for(var a=u%i,c=Math.min(o-s,i-a),f=0;f<c;f++)r[a+f]=t[s+f];s+=c,(u+=c)%i==0&&this._update(r)}return this._len+=o,this},i.prototype.digest=function(t){var e=this._len%this._blockSize;this._block[e]=128,this._block.fill(0,e+1),e>=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,i=(r-n)/4294967296;this._block.writeUInt32BE(i,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var o=this._hash();return t?o.toString(t):o},i.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},t.exports=i},9072:(t,e,r)=>{var n=t.exports=function(t){t=t.toLowerCase();var e=n[t];if(!e)throw new Error(t+\" is not supported (we accept pull requests)\");return new e};n.sha=r(4448),n.sha1=r(8336),n.sha224=r(8432),n.sha256=r(7499),n.sha384=r(1686),n.sha512=r(8862)},4448:(t,e,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,u=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function a(){this.init(),this._w=s,i.call(this,64,56)}function c(t){return t<<30|t>>>2}function f(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(a,i),a.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},a.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,a=0|this._e,l=0;l<16;++l)r[l]=t.readInt32BE(4*l);for(;l<80;++l)r[l]=r[l-3]^r[l-8]^r[l-14]^r[l-16];for(var h=0;h<80;++h){var p=~~(h/20),y=0|((e=n)<<5|e>>>27)+f(p,i,o,s)+a+r[h]+u[p];a=s,s=o,o=c(i),i=n,n=y}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0},a.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=a},8336:(t,e,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,u=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function a(){this.init(),this._w=s,i.call(this,64,56)}function c(t){return t<<5|t>>>27}function f(t){return t<<30|t>>>2}function l(t,e,r,n){return 0===t?e&r|~e&n:2===t?e&r|e&n|r&n:e^r^n}n(a,i),a.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},a.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,a=0|this._e,h=0;h<16;++h)r[h]=t.readInt32BE(4*h);for(;h<80;++h)r[h]=(e=r[h-3]^r[h-8]^r[h-14]^r[h-16])<<1|e>>>31;for(var p=0;p<80;++p){var y=~~(p/20),M=c(n)+l(y,i,o,s)+a+r[p]+u[y]|0;a=s,s=o,o=f(i),i=n,n=M}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0},a.prototype._hash=function(){var t=o.allocUnsafe(20);return t.writeInt32BE(0|this._a,0),t.writeInt32BE(0|this._b,4),t.writeInt32BE(0|this._c,8),t.writeInt32BE(0|this._d,12),t.writeInt32BE(0|this._e,16),t},t.exports=a},8432:(t,e,r)=>{var n=r(5717),i=r(7499),o=r(4189),u=r(9509).Buffer,s=new Array(64);function a(){this.init(),this._w=s,o.call(this,64,56)}n(a,i),a.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},a.prototype._hash=function(){var t=u.allocUnsafe(28);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t},t.exports=a},7499:(t,e,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,u=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function a(){this.init(),this._w=s,i.call(this,64,56)}function c(t,e,r){return r^t&(e^r)}function f(t,e,r){return t&e|r&(t|e)}function l(t){return(t>>>2|t<<30)^(t>>>13|t<<19)^(t>>>22|t<<10)}function h(t){return(t>>>6|t<<26)^(t>>>11|t<<21)^(t>>>25|t<<7)}function p(t){return(t>>>7|t<<25)^(t>>>18|t<<14)^t>>>3}n(a,i),a.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},a.prototype._update=function(t){for(var e,r=this._w,n=0|this._a,i=0|this._b,o=0|this._c,s=0|this._d,a=0|this._e,y=0|this._f,M=0|this._g,w=0|this._h,d=0;d<16;++d)r[d]=t.readInt32BE(4*d);for(;d<64;++d)r[d]=0|(((e=r[d-2])>>>17|e<<15)^(e>>>19|e<<13)^e>>>10)+r[d-7]+p(r[d-15])+r[d-16];for(var g=0;g<64;++g){var v=w+h(a)+c(a,y,M)+u[g]+r[g]|0,L=l(n)+f(n,i,o)|0;w=M,M=y,y=a,a=s+v|0,s=o,o=i,i=n,n=v+L|0}this._a=n+this._a|0,this._b=i+this._b|0,this._c=o+this._c|0,this._d=s+this._d|0,this._e=a+this._e|0,this._f=y+this._f|0,this._g=M+this._g|0,this._h=w+this._h|0},a.prototype._hash=function(){var t=o.allocUnsafe(32);return t.writeInt32BE(this._a,0),t.writeInt32BE(this._b,4),t.writeInt32BE(this._c,8),t.writeInt32BE(this._d,12),t.writeInt32BE(this._e,16),t.writeInt32BE(this._f,20),t.writeInt32BE(this._g,24),t.writeInt32BE(this._h,28),t},t.exports=a},1686:(t,e,r)=>{var n=r(5717),i=r(8862),o=r(4189),u=r(9509).Buffer,s=new Array(160);function a(){this.init(),this._w=s,o.call(this,128,112)}n(a,i),a.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},a.prototype._hash=function(){var t=u.allocUnsafe(48);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),t},t.exports=a},8862:(t,e,r)=>{var n=r(5717),i=r(4189),o=r(9509).Buffer,u=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function a(){this.init(),this._w=s,i.call(this,128,112)}function c(t,e,r){return r^t&(e^r)}function f(t,e,r){return t&e|r&(t|e)}function l(t,e){return(t>>>28|e<<4)^(e>>>2|t<<30)^(e>>>7|t<<25)}function h(t,e){return(t>>>14|e<<18)^(t>>>18|e<<14)^(e>>>9|t<<23)}function p(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^t>>>7}function y(t,e){return(t>>>1|e<<31)^(t>>>8|e<<24)^(t>>>7|e<<25)}function M(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^t>>>6}function w(t,e){return(t>>>19|e<<13)^(e>>>29|t<<3)^(t>>>6|e<<26)}function d(t,e){return t>>>0<e>>>0?1:0}n(a,i),a.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},a.prototype._update=function(t){for(var e=this._w,r=0|this._ah,n=0|this._bh,i=0|this._ch,o=0|this._dh,s=0|this._eh,a=0|this._fh,g=0|this._gh,v=0|this._hh,L=0|this._al,_=0|this._bl,j=0|this._cl,N=0|this._dl,x=0|this._el,m=0|this._fl,D=0|this._gl,I=0|this._hl,S=0;S<32;S+=2)e[S]=t.readInt32BE(4*S),e[S+1]=t.readInt32BE(4*S+4);for(;S<160;S+=2){var b=e[S-30],A=e[S-30+1],C=p(b,A),T=y(A,b),E=M(b=e[S-4],A=e[S-4+1]),z=w(A,b),O=e[S-14],k=e[S-14+1],U=e[S-32],Y=e[S-32+1],B=T+k|0,Q=C+O+d(B,T)|0;Q=(Q=Q+E+d(B=B+z|0,z)|0)+U+d(B=B+Y|0,Y)|0,e[S]=Q,e[S+1]=B}for(var R=0;R<160;R+=2){Q=e[R],B=e[R+1];var F=f(r,n,i),P=f(L,_,j),G=l(r,L),W=l(L,r),q=h(s,x),J=h(x,s),Z=u[R],$=u[R+1],X=c(s,a,g),V=c(x,m,D),H=I+J|0,K=v+q+d(H,I)|0;K=(K=(K=K+X+d(H=H+V|0,V)|0)+Z+d(H=H+$|0,$)|0)+Q+d(H=H+B|0,B)|0;var tt=W+P|0,et=G+F+d(tt,W)|0;v=g,I=D,g=a,D=m,a=s,m=x,s=o+K+d(x=N+H|0,N)|0,o=i,N=j,i=n,j=_,n=r,_=L,r=K+et+d(L=H+tt|0,H)|0}this._al=this._al+L|0,this._bl=this._bl+_|0,this._cl=this._cl+j|0,this._dl=this._dl+N|0,this._el=this._el+x|0,this._fl=this._fl+m|0,this._gl=this._gl+D|0,this._hl=this._hl+I|0,this._ah=this._ah+r+d(this._al,L)|0,this._bh=this._bh+n+d(this._bl,_)|0,this._ch=this._ch+i+d(this._cl,j)|0,this._dh=this._dh+o+d(this._dl,N)|0,this._eh=this._eh+s+d(this._el,x)|0,this._fh=this._fh+a+d(this._fl,m)|0,this._gh=this._gh+g+d(this._gl,D)|0,this._hh=this._hh+v+d(this._hl,I)|0},a.prototype._hash=function(){var t=o.allocUnsafe(64);function e(e,r,n){t.writeInt32BE(e,n),t.writeInt32BE(r,n+4)}return e(this._ah,this._al,0),e(this._bh,this._bl,8),e(this._ch,this._cl,16),e(this._dh,this._dl,24),e(this._eh,this._el,32),e(this._fh,this._fl,40),e(this._gh,this._gl,48),e(this._hh,this._hl,56),t},t.exports=a},8309:(t,e,r)=>{t.exports=r(3363)},1189:(t,e,r)=>{r(8196)},9022:(t,e,r)=>{r(8065)},4386:(t,e,r)=>{r(7448)},2320:(t,e,r)=>{t.exports=r(9743)},4418:(t,e,r)=>{r(1955)},1679:(t,e,r)=>{r(1577)},86:(t,e,r)=>{t.exports=r(6279)},8118:(t,e,r)=>{r(3778)},1882:(t,e,r)=>{r(9373)},7606:(t,e,r)=>{t.exports=r(1798)},4282:(t,e,r)=>{r(2527)},4278:(t,e,r)=>{r(2073)},2039:(t,e,r)=>{r(5286)},2578:(t,e,r)=>{r(2856)},7043:(t,e,r)=>{r(5178)},1607:(t,e,r)=>{r(6361)},5627:(t,e,r)=>{r(8933)},6986:(t,e,r)=>{r(3383)},8222:(t,e,r)=>{t.exports=r(3059)},1125:(t,e,r)=>{var n=r(3685),i=r(7696);t.exports=function(t,e,r){return(e=i(e))in t?n(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t},t.exports.__esModule=!0,t.exports.default=t.exports},3101:(t,e,r)=>{var n=r(269),i=r(4122);function o(){var e;return t.exports=o=n?i(e=n).call(e):function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},t.exports.__esModule=!0,t.exports.default=t.exports,o.apply(this,arguments)}t.exports=o,t.exports.__esModule=!0,t.exports.default=t.exports},8504:(t,e,r)=>{var n=r(1384),i=r(474).default;t.exports=function(t,e){if(\"object\"!==i(t)||null===t)return t;var r=t[n];if(void 0!==r){var o=r.call(t,e||\"default\");if(\"object\"!==i(o))return o;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===e?String:Number)(t)},t.exports.__esModule=!0,t.exports.default=t.exports},7696:(t,e,r)=>{var n=r(474).default,i=r(8504);t.exports=function(t){var e=i(t,\"string\");return\"symbol\"===n(e)?e:String(e)},t.exports.__esModule=!0,t.exports.default=t.exports},474:(t,e,r)=>{var n=r(6600),i=r(9759);function o(e){return t.exports=o=\"function\"==typeof n&&\"symbol\"==typeof i?function(t){return typeof t}:function(t){return t&&\"function\"==typeof n&&t.constructor===n&&t!==n.prototype?\"symbol\":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,o(e)}t.exports=o,t.exports.__esModule=!0,t.exports.default=t.exports}},e={};function r(n){var i=e[n];if(void 0!==i)return i.exports;var o=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(t){if(\"object\"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var n={};return(()=>{\"use strict\";r.d(n,{default:()=>Ir});var t={};r.r(t),r.d(t,{TOGGLE_CONFIGS:()=>sr,UPDATE_CONFIGS:()=>ur,loaded:()=>fr,toggle:()=>cr,update:()=>ar});var e={};r.r(e),r.d(e,{downloadConfig:()=>lr,getConfigByUrl:()=>hr});var i={};r.r(i),r.d(i,{get:()=>pr});var o=r(7294);class u extends o.Component{render(){const{getComponent:t}=this.props,e=t(\"Container\"),r=t(\"Row\"),n=t(\"Col\"),i=t(\"Topbar\",!0),u=t(\"BaseLayout\",!0),s=t(\"onlineValidatorBadge\",!0);return o.createElement(e,{className:\"swagger-ui\"},i?o.createElement(i,null):null,o.createElement(u,null),o.createElement(r,null,o.createElement(n,null,o.createElement(s,null))))}}var s=r(1125),a=r.n(s),c=r(86),f=r.n(c),l=r(7606),h=r.n(l),p=r(8309),y=r.n(p),M=(r(4386),r(4418),r(8222)),w=r.n(M),d=(r(1189),r(4282),r(6986),r(2578),r(4278),r(9022),r(2039),r(8118),r(1882),r(1679),r(7043),r(1607),r(5627),r(3393)),g=r.n(d);r(7967),r(1540),r(1700),r(8306),r(3311),r(9704),r(7813),r(3560);const v=function(){var t={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if(\"undefined\"==typeof window)return t;try{t=window;for(var e of[\"File\",\"Blob\",\"FormData\"])e in window&&(t[e]=window[e])}catch(t){console.error(t)}return t}();r(8269);g().Set.of(\"type\",\"format\",\"items\",\"default\",\"maximum\",\"exclusiveMaximum\",\"minimum\",\"exclusiveMinimum\",\"maxLength\",\"minLength\",\"pattern\",\"maxItems\",\"minItems\",\"uniqueItems\",\"enum\",\"multipleOf\");r(2282),r(9072),r(8764).Buffer;const L=()=>{let t={},e=v.location.search;if(!e)return{};if(\"\"!=e){let r=e.substr(1).split(\"&\");for(let e in r)Object.prototype.hasOwnProperty.call(r,e)&&(e=r[e].split(\"=\"),t[decodeURIComponent(e[0])]=e[1]&&decodeURIComponent(e[1])||\"\")}return t};class _ extends o.Component{constructor(t,e){super(t,e),a()(this,\"onUrlChange\",(t=>{let{target:{value:e}}=t;this.setState({url:e})})),a()(this,\"loadSpec\",(t=>{this.flushAuthData(),this.props.specActions.updateUrl(t),this.props.specActions.download(t)})),a()(this,\"onUrlSelect\",(t=>{let e=t.target.value||t.target.href;this.loadSpec(e),this.setSelectedUrl(e),t.preventDefault()})),a()(this,\"downloadUrl\",(t=>{this.loadSpec(this.state.url),t.preventDefault()})),a()(this,\"setSearch\",(t=>{let e=L();e[\"urls.primaryName\"]=t.name;const r=`${window.location.protocol}//${window.location.host}${window.location.pathname}`;var n,i;window&&window.history&&window.history.pushState&&window.history.replaceState(null,\"\",`${r}?${n=e,h()(i=w()(n)).call(i,(t=>encodeURIComponent(t)+\"=\"+encodeURIComponent(n[t]))).join(\"&\")}`)})),a()(this,\"setSelectedUrl\",(t=>{const e=this.props.getConfigs().urls||[];e&&e.length&&t&&f()(e).call(e,((e,r)=>{e.url===t&&(this.setState({selectedIndex:r}),this.setSearch(e))}))})),a()(this,\"onFilterChange\",(t=>{let{target:{value:e}}=t;this.props.layoutActions.updateFilter(e)})),this.state={url:t.specSelectors.url(),selectedIndex:0}}UNSAFE_componentWillReceiveProps(t){this.setState({url:t.specSelectors.url()})}flushAuthData(){const{persistAuthorization:t}=this.props.getConfigs();t||this.props.authActions.restoreAuthorization({authorized:{}})}componentDidMount(){const t=this.props.getConfigs(),e=t.urls||[];if(e&&e.length){var r=this.state.selectedIndex;let n=L()[\"urls.primaryName\"]||t[\"urls.primaryName\"];n&&f()(e).call(e,((t,e)=>{t.name===n&&(this.setState({selectedIndex:e}),r=e)})),this.loadSpec(e[r].url)}}render(){let{getComponent:t,specSelectors:e,getConfigs:r}=this.props;const n=t(\"Button\"),i=t(\"Link\"),u=t(\"Logo\");let s=\"loading\"===e.loadingStatus();const a=[\"download-url-input\"];\"failed\"===e.loadingStatus()&&a.push(\"failed\"),s&&a.push(\"loading\");const{urls:c}=r();let l=[],p=null;if(c){let t=[];f()(c).call(c,((e,r)=>{t.push(o.createElement(\"option\",{key:r,value:e.url},e.name))})),l.push(o.createElement(\"label\",{className:\"select-label\",htmlFor:\"select\"},o.createElement(\"span\",null,\"Select a definition\"),o.createElement(\"select\",{id:\"select\",disabled:s,onChange:this.onUrlSelect,value:c[this.state.selectedIndex].url},t)))}else p=this.downloadUrl,l.push(o.createElement(\"input\",{className:a.join(\" \"),type:\"text\",onChange:this.onUrlChange,value:this.state.url,disabled:s})),l.push(o.createElement(n,{className:\"download-url-button\",onClick:this.downloadUrl},\"Explore\"));return o.createElement(\"div\",{className:\"topbar\"},o.createElement(\"div\",{className:\"wrapper\"},o.createElement(\"div\",{className:\"topbar-wrapper\"},o.createElement(i,null,o.createElement(u,null)),o.createElement(\"form\",{className:\"download-url-wrapper\",onSubmit:p},h()(l).call(l,((t,e)=>(0,o.cloneElement)(t,{key:e})))))))}}const j=()=>o.createElement(\"img\",{height:\"40\",src:\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDA3IDExNiI+DQogIDxkZWZzPg0KICAgIDxzdHlsZT4NCiAgICAgIC5jbHMtMSB7DQogICAgICAgIGNsaXAtcGF0aDogdXJsKCNjbGlwLVNXX1RNLWxvZ28tb24tZGFyayk7DQogICAgICB9DQoNCiAgICAgIC5jbHMtMiB7DQogICAgICAgIGZpbGw6ICNmZmY7DQogICAgICB9DQoNCiAgICAgIC5jbHMtMyB7DQogICAgICAgIGZpbGw6ICM4NWVhMmQ7DQogICAgICB9DQoNCiAgICAgIC5jbHMtNCB7DQogICAgICAgIGZpbGw6ICMxNzM2NDc7DQogICAgICB9DQogICAgPC9zdHlsZT4NCiAgICA8Y2xpcFBhdGggaWQ9ImNsaXAtU1dfVE0tbG9nby1vbi1kYXJrIj4NCiAgICAgIDxyZWN0IHdpZHRoPSI0MDciIGhlaWdodD0iMTE2Ii8+DQogICAgPC9jbGlwUGF0aD4NCiAgPC9kZWZzPg0KICA8ZyBpZD0iU1dfVE0tbG9nby1vbi1kYXJrIiBjbGFzcz0iY2xzLTEiPg0KICAgIDxnIGlkPSJTV19Jbi1Qcm9kdWN0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMC4zMDEpIj4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5MzYiIGRhdGEtbmFtZT0iUGF0aCAyOTM2IiBjbGFzcz0iY2xzLTIiIGQ9Ik0zNTkuMTUsNzAuNjc0aC0uN1Y2Ni45OTJoLTEuMjZ2LS42aDMuMjE5di42SDM1OS4xNVoiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5MzciIGRhdGEtbmFtZT0iUGF0aCAyOTM3IiBjbGFzcz0iY2xzLTIiIGQ9Ik0zNjMuMjE3LDcwLjY3NCwzNjEuOTc1LDY3LjFoLS4wMjNxLjA1LjguMDUsMS40OTR2Mi4wODNoLS42MzZWNjYuMzkxaC45ODdsMS4xOSwzLjQwN2guMDE3bDEuMjI1LTMuNDA3aC45OXY0LjI4M0gzNjUuMVY2OC41NTZjMC0uMjEzLjAwNi0uNDkuMDE2LS44MzJzLjAyLS41NDkuMDI4LS42MjFoLS4wMjNsLTEuMjg2LDMuNTcxWiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjkzOCIgZGF0YS1uYW1lPSJQYXRoIDI5MzgiIGNsYXNzPSJjbHMtMyIgZD0iTTUwLjMyOCw5Ny42NjlBNDcuNjQyLDQ3LjY0MiwwLDEsMSw5Ny45NzEsNTAuMDI3LDQ3LjY0Miw0Ny42NDIsMCwwLDEsNTAuMzI4LDk3LjY2OVoiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5MzkiIGRhdGEtbmFtZT0iUGF0aCAyOTM5IiBjbGFzcz0iY2xzLTMiIGQ9Ik01MC4zMjgsNC43NjlBNDUuMjU4LDQ1LjI1OCwwLDEsMSw1LjA3LDUwLjAyNyw0NS4yNTgsNDUuMjU4LDAsMCwxLDUwLjMyOCw0Ljc2OW0wLTQuNzY5YTUwLjAyNyw1MC4wMjcsMCwxLDAsNTAuMDI3LDUwLjAyN0E1MC4wMjcsNTAuMDI3LDAsMCwwLDUwLjMyOCwwWiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk0MCIgZGF0YS1uYW1lPSJQYXRoIDI5NDAiIGNsYXNzPSJjbHMtNCIgZD0iTTMxLjgsMzMuODU0Yy0uMTU0LDEuNzEyLjA1OCwzLjQ4Mi0uMDU3LDUuMjEzYTQyLjY2NSw0Mi42NjUsMCwwLDEtLjY5Myw1LjE1Niw5LjUzLDkuNTMsMCwwLDEtNC4xLDUuODI5YzQuMDc5LDIuNjU0LDQuNTQsNi43NzEsNC44MSwxMC45NDYuMTM1LDIuMjUuMDc3LDQuNTIuMzA4LDYuNzUyLjE3MywxLjczMS44NDYsMi4xNzQsMi42MzYsMi4yMzEuNzMuMDIsMS40OCwwLDIuMzI3LDBWNzUuMzNjLTUuMjkuOS05LjY1Ny0uNi0xMC43MzQtNS4wNzlhMzAuNzYsMzAuNzYsMCwwLDEtLjY1NC01Yy0uMTE3LTEuNzg5LjA3Ni0zLjU3OC0uMDU4LTUuMzY3LS4zODYtNC45MDYtMS4wMi02LjU2LTUuNzEzLTYuNzkxdi02LjFBOS4xOTEsOS4xOTEsMCwwLDEsMjAuOSw0Ni44MmMyLjU3Ny0uMTM1LDMuNjc0LS45MjQsNC4yMzEtMy40NjNhMjkuMywyOS4zLDAsMCwwLC40ODEtNC4zMjksODIuMSw4Mi4xLDAsMCwxLC42LTguNDA2Yy42NzMtMy45ODIsMy4xMzYtNS45MDYsNy4yMzQtNi4xMzcsMS4xNTQtLjA1NywyLjMyNywwLDMuNjU1LDB2NS40NjRjLS41NTguMDM4LTEuMDM5LjExNS0xLjUzOS4xMTVDMzIuMjI2LDI5Ljk0OSwzMi4wNTIsMzEuMDg0LDMxLjgsMzMuODU0Wm02LjQwNiwxMi42NThoLS4wNzdhMy41MTUsMy41MTUsMCwxLDAtLjM0Niw3LjAyMWguMjMxYTMuNDYxLDMuNDYxLDAsMCwwLDMuNjU1LTMuMjUxVjUwLjA5YTMuNTIzLDMuNTIzLDAsMCwwLTMuNDYxLTMuNTc4Wm0xMi4wNjIsMGEzLjM3MywzLjM3MywwLDAsMC0zLjQ4MiwzLjI1MSwxLjc5LDEuNzksMCwwLDAsLjAyLjMyNywzLjMsMy4zLDAsMCwwLDMuNTc4LDMuNDQzLDMuMjYzLDMuMjYzLDAsMCwwLDMuNDQzLTMuNTU4LDMuMzA4LDMuMzA4LDAsMCwwLTMuNTU3LTMuNDYzWm0xMi4zNTEsMGEzLjU5MiwzLjU5MiwwLDAsMC0zLjY1NSwzLjQ4MkEzLjUyOSwzLjUyOSwwLDAsMCw2Mi41LDUzLjUzM2guMDM5YzEuNzY5LjMwOSwzLjU1OS0xLjQsMy42NzQtMy40NjJhMy41NzEsMy41NzEsMCwwLDAtMy42LTMuNTU5Wm0xNi45NDguMjg4Yy0yLjIzMi0uMS0zLjM0OC0uODQ2LTMuOS0yLjk2MmEyMS40NDcsMjEuNDQ3LDAsMCwxLS42MzUtNC4xMzZjLS4xNTQtMi41NzgtLjEzNS01LjE3NS0uMzA4LTcuNzUzLS40LTYuMTE3LTQuODI4LTguMjUyLTExLjI1NC03LjE5NXY1LjMxYzEuMDE5LDAsMS44MDgsMCwyLjYuMDE5LDEuMzY2LjAxOSwyLjQuNTM5LDIuNTM5LDIuMDU5LjEzNSwxLjM4NS4xMzUsMi43ODkuMjcsNC4xOTMuMjY5LDIuNzkuNDIyLDUuNjE4LjksOC4zNjlBOC43MTUsOC43MTUsMCwwLDAsNzMuNyw1MC4wNTJjLTMuNCwyLjI4OS00LjQwNiw1LjU1OS00LjU3OCw5LjIzNC0uMSwyLjUyLS4xNTQsNS4wNTktLjI4OSw3LjYtLjExNSwyLjMwOC0uOTIzLDMuMDU4LTMuMjUxLDMuMTE2LS42NTQuMDE5LTEuMjg5LjA3Ny0yLjAxOS4xMTV2NS40NDVjMS4zNjUsMCwyLjYxNi4wNzcsMy44NjYsMCwzLjg4Ni0uMjMxLDYuMjMzLTIuMTE3LDctNS44ODdBNDkuMDc5LDQ5LjA3OSwwLDAsMCw3NSw2My40Yy4xMzUtMS45MjMuMTE2LTMuODY2LjMwOC01Ljc3MS4yODktMi45ODIsMS42NTUtNC4yMTMsNC42MzYtNC40YTQuMDM3LDQuMDM3LDAsMCwwLC44MjgtLjE5MnYtNi4xYy0uNS0uMDU4LS44NDMtLjExNS0xLjIwOC0uMTM1WiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk0MSIgZGF0YS1uYW1lPSJQYXRoIDI5NDEiIGNsYXNzPSJjbHMtMiIgZD0iTTE1Mi4yNzMsNTguMTIyYTExLjIyOCwxMS4yMjgsMCwwLDEtNC4zODQsOS40MjRxLTQuMzgzLDMuMzgyLTExLjksMy4zODItOC4xNCwwLTEyLjUyNC0yLjFWNjMuN2EzMi45LDMyLjksMCwwLDAsNi4xMzcsMS44NzksMzIuMywzMi4zLDAsMCwwLDYuNTc1LjY4OXE1LjMyMiwwLDguMDE1LTIuMDJhNi42MjYsNi42MjYsMCwwLDAsMi42OTItNS42Miw3LjIyMiw3LjIyMiwwLDAsMC0uOTU0LTMuOSw4Ljg4NSw4Ljg4NSwwLDAsMC0zLjE5NC0yLjgsNDQuNjM0LDQ0LjYzNCwwLDAsMC02LjgxLTIuOTExcS02LjM4Ny0yLjI4Ni05LjEyNi01LjQxN2ExMS45NTUsMTEuOTU1LDAsMCwxLTIuNzQtOC4xNzJBMTAuMTY0LDEwLjE2NCwwLDAsMSwxMjguMDM5LDI3cTMuOTc3LTMuMTMxLDEwLjUyLTMuMTMxYTMxLDMxLDAsMCwxLDEyLjU1NSwyLjVMMTQ5LjQ1NSwzMWEyOC4zODIsMjguMzgyLDAsMCwwLTExLjAyMS0yLjM4LDEwLjY2OCwxMC42NjgsMCwwLDAtNi42MDYsMS44MTYsNS45ODQsNS45ODQsMCwwLDAtMi4zOCw1LjA0MSw3LjcyMiw3LjcyMiwwLDAsMCwuODc3LDMuOSw4LjI0Miw4LjI0MiwwLDAsMCwyLjk1OSwyLjc4NiwzNi43LDM2LjcsMCwwLDAsNi4zNzEsMi44cTcuMiwyLjU2Niw5LjkxLDUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTUyLjI3Myw1OC4xMjJaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTQyIiBkYXRhLW5hbWU9IlBhdGggMjk0MiIgY2xhc3M9ImNscy0yIiBkPSJNMTg1LjI4OCw3MC4zLDE3OSw1MC4xN3EtLjU5NC0xLjg0OC0yLjIyMi04LjM5MWgtLjI1MXEtMS4yNTIsNS40NzktMi4xOTIsOC40NTNMMTY3Ljg0OSw3MC4zaC02LjAxMWwtOS4zNjEtMzQuMzE1aDUuNDQ3cTMuMzE4LDEyLjkzMSw1LjA1NywxOS42OTNhODAuMTEyLDgwLjExMiwwLDAsMSwxLjk4OCw5LjExMWguMjVxLjM0NS0xLjc4NSwxLjExMi00LjYxOHQxLjMzLTQuNDkzbDYuMjk0LTE5LjY5M2g1LjYzNWw2LjEzNywxOS42OTNhNjYuMzY5LDY2LjM2OSwwLDAsMSwyLjM3OSw5LjA0OGguMjUxYTMzLjE2MywzMy4xNjMsMCwwLDEsLjY3My0zLjQ3NXEuNTQ4LTIuMzQ3LDYuNTI4LTI1LjI2Nmg1LjM4NUwxOTEuNDU2LDcwLjNaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTQzIiBkYXRhLW5hbWU9IlBhdGggMjk0MyIgY2xhc3M9ImNscy0yIiBkPSJNMjI1LjExNSw3MC4zbC0xLjAzMy00Ljg4NWgtLjI1YTE0LjQ0NiwxNC40NDYsMCwwLDEtNS4xMTksNC4zNjgsMTUuNjA4LDE1LjYwOCwwLDAsMS02LjM3MiwxLjE0M3EtNS4xLDAtOC0yLjYzdC0yLjktNy40ODNxMC0xMC40LDE2LjYyNi0xMC45bDUuODIzLS4xODhWNDcuNnEwLTQuMDM4LTEuNzM4LTUuOTY0VDIxNi42LDM5LjcxM2EyMi42MzMsMjIuNjMzLDAsMCwwLTkuNzA2LDIuNjNsLTEuNi0zLjk3N2EyNC40MzcsMjQuNDM3LDAsMCwxLDUuNTU3LTIuMTYsMjQuMDU2LDI0LjA1NiwwLDAsMSw2LjA1OC0uNzgzcTYuMTM2LDAsOS4xLDIuNzI0dDIuOTU5LDguNzM1VjcwLjNabS0xMS43NDEtMy42NjNBMTAuNTQ5LDEwLjU0OSwwLDAsMCwyMjEsNjMuOTc3YTkuODQ1LDkuODQ1LDAsMCwwLDIuNzcxLTcuNDUxdi0zLjFsLTUuMi4yMTlxLTYuMi4yMTktOC45MzksMS45MjZhNS44LDUuOCwwLDAsMC0yLjc0LDUuMzA2LDUuMzU0LDUuMzU0LDAsMCwwLDEuNzA3LDQuMjksNy4wODEsNy4wODEsMCwwLDAsNC43NzUsMS40NzJaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTQ0IiBkYXRhLW5hbWU9IlBhdGggMjk0NCIgY2xhc3M9ImNscy0yIiBkPSJNMjY0LjYsMzUuOTg3djMuMjg3bC02LjM1Ni43NTJhMTEuMTYsMTEuMTYsMCwwLDEsMi4yNTUsNi44NTYsMTAuMTQ4LDEwLjE0OCwwLDAsMS0zLjQ0NCw4LjA0N3EtMy40NDQsMy05LjQ1NiwzYTE1LjczNCwxNS43MzQsMCwwLDEtMi44OC0uMjVRMjQxLjQsNTkuNDM4LDI0MS40LDYyLjFhMi4yNDIsMi4yNDIsMCwwLDAsMS4xNTksMi4wODIsOC40NTYsOC40NTYsMCwwLDAsMy45NzYuNjczaDYuMDc0cTUuNTczLDAsOC41NjMsMi4zNDhhOC4xNTgsOC4xNTgsMCwwLDEsMi45OSw2LjgyNSw5Ljc0Myw5Ljc0MywwLDAsMS00LjU3MSw4LjY4OHEtNC41NzIsMi45ODktMTMuMzM4LDIuOTktNi43MzIsMC0xMC4zNzktMi41YTguMDg3LDguMDg3LDAsMCwxLTMuNjQ3LTcuMDc2LDcuOTQ2LDcuOTQ2LDAsMCwxLDItNS40MTcsMTAuMjExLDEwLjIxMSwwLDAsMSw1LjYzNi0zLjEsNS40MjksNS40MjksMCwwLDEtMi4yMDctMS44NDcsNC44OSw0Ljg5LDAsMCwxLS44OTMtMi45MTIsNS41Myw1LjUzLDAsMCwxLDEtMy4yODgsMTAuNTI5LDEwLjUyOSwwLDAsMSwzLjE2Mi0yLjcyMyw5LjI3NSw5LjI3NSwwLDAsMS00LjMzNi0zLjcyNiwxMC45NDUsMTAuOTQ1LDAsMCwxLTEuNjc1LTYuMDEycTAtNS42MzQsMy4zODItOC42ODh0OS41OC0zLjA1MmExNy40MzksMTcuNDM5LDAsMCwxLDQuODUzLjYyNlpNMjM3LjIzMyw3Ni4wNjJhNC42Niw0LjY2LDAsMCwwLDIuMzQ4LDQuMjI3LDEyLjk3MywxMi45NzMsMCwwLDAsNi43MzIsMS40NHE2LjU0MywwLDkuNjktMS45NTZhNS45OTIsNS45OTIsMCwwLDAsMy4xNDctNS4zMDdxMC0yLjc4Ny0xLjcyMy0zLjg2N3QtNi40ODEtMS4wOGgtNi4yM2E4LjIwNSw4LjIwNSwwLDAsMC01LjUxLDEuNjksNi4wNDMsNi4wNDMsMCwwLDAtMS45NzMsNC44NTNabTIuODE4LTI5LjA4NmE2Ljk4NCw2Ljk4NCwwLDAsMCwyLjAzNSw1LjQ0OCw4LjEyMyw4LjEyMywwLDAsMCw1LjY2NywxLjg0N3E3LjYwOCwwLDcuNjA4LTcuMzg5LDAtNy43MzMtNy43LTcuNzMzYTcuNjI4LDcuNjI4LDAsMCwwLTUuNjM1LDEuOTcycS0xLjk3NiwxLjk3My0xLjk3NSw1Ljg1NVoiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NDUiIGRhdGEtbmFtZT0iUGF0aCAyOTQ1IiBjbGFzcz0iY2xzLTIiIGQ9Ik0yOTkuMTM2LDM1Ljk4N3YzLjI4N2wtNi4zNTYuNzUyYTExLjE2OCwxMS4xNjgsMCwwLDEsMi4yNTQsNi44NTYsMTAuMTQ1LDEwLjE0NSwwLDAsMS0zLjQ0NCw4LjA0N3EtMy40NDQsMy05LjQ1NSwzYTE1LjczNCwxNS43MzQsMCwwLDEtMi44OC0uMjVxLTMuMzIsMS43NTQtMy4zMTksNC40MTVhMi4yNDMsMi4yNDMsMCwwLDAsMS4xNTgsMi4wODIsOC40NTksOC40NTksMCwwLDAsMy45NzYuNjczaDYuMDc0cTUuNTc0LDAsOC41NjMsMi4zNDhhOC4xNTgsOC4xNTgsMCwwLDEsMi45OSw2LjgyNSw5Ljc0Myw5Ljc0MywwLDAsMS00LjU3MSw4LjY4OHEtNC41NywyLjk4OS0xMy4zMzcsMi45OS02LjczMiwwLTEwLjM3OS0yLjVhOC4wODgsOC4wODgsMCwwLDEtMy42NDgtNy4wNzYsNy45NDcsNy45NDcsMCwwLDEsMi01LjQxNywxMC4yMDcsMTAuMjA3LDAsMCwxLDUuNjM2LTMuMSw1LjQzMiw1LjQzMiwwLDAsMS0yLjIwOC0xLjg0Nyw0Ljg4OSw0Ljg4OSwwLDAsMS0uODkyLTIuOTEyLDUuNTMsNS41MywwLDAsMSwxLTMuMjg4LDEwLjUyOSwxMC41MjksMCwwLDEsMy4xNjItMi43MjMsOS4yNzEsOS4yNzEsMCwwLDEtNC4zMzYtMy43MjYsMTAuOTQ1LDEwLjk0NSwwLDAsMS0xLjY3NS02LjAxMnEwLTUuNjM0LDMuMzgxLTguNjg4dDkuNTgxLTMuMDUyYTE3LjQ0NCwxNy40NDQsMCwwLDEsNC44NTMuNjI2Wk0yNzEuNzcyLDc2LjA2MmE0LjY1OCw0LjY1OCwwLDAsMCwyLjM0OCw0LjIyNywxMi45NjksMTIuOTY5LDAsMCwwLDYuNzMxLDEuNDRxNi41NDQsMCw5LjY5MS0xLjk1NmE1Ljk5Myw1Ljk5MywwLDAsMCwzLjE0Ni01LjMwN3EwLTIuNzg3LTEuNzIyLTMuODY3dC02LjQ4MS0xLjA4aC02LjIzYTguMjA4LDguMjA4LDAsMCwwLTUuNTExLDEuNjlBNi4wNDIsNi4wNDIsMCwwLDAsMjcxLjc3Miw3Ni4wNjJabTIuODE4LTI5LjA4NmE2Ljk4NCw2Ljk4NCwwLDAsMCwyLjAzNSw1LjQ0OCw4LjEyMSw4LjEyMSwwLDAsMCw1LjY2NywxLjg0N3E3LjYwNywwLDcuNjA4LTcuMzg5LDAtNy43MzMtNy43LTcuNzMzYTcuNjI5LDcuNjI5LDAsMCwwLTUuNjM1LDEuOTcycS0xLjk3NSwxLjk3My0xLjk3NSw1Ljg1NVoiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NDYiIGRhdGEtbmFtZT0iUGF0aCAyOTQ2IiBjbGFzcz0iY2xzLTIiIGQ9Ik0zMTYuNzc4LDcwLjkyOHEtNy42MDgsMC0xMi4wMDctNC42MzR0LTQuNC0xMi44NjhxMC04LjMsNC4wODYtMTMuMTgxYTEzLjU3MywxMy41NzMsMCwwLDEsMTAuOTc0LTQuODg0QTEyLjkzOCwxMi45MzgsMCwwLDEsMzI1LjYzOCwzOS42cTMuNzYyLDQuMjQ3LDMuNzYyLDExLjJ2My4yODdIMzA1Ljc1N3EuMTU2LDYuMDQ0LDMuMDUzLDkuMTc0dDguMTU2LDMuMTMxYTI3LjYzMywyNy42MzMsMCwwLDAsMTAuOTU4LTIuMzE3djQuNjM0YTI3LjUsMjcuNSwwLDAsMS01LjIxMywxLjcwNiwyOS4yNTEsMjkuMjUxLDAsMCwxLTUuOTMzLjUxM1ptLTEuNDA5LTMxLjIxNWE4LjQ4OSw4LjQ4OSwwLDAsMC02LjU5MSwyLjY5MiwxMi40MTYsMTIuNDE2LDAsMCwwLTIuOSw3LjQ1MmgxNy45NHEwLTQuOTE2LTIuMTkxLTcuNTNhNy43MTQsNy43MTQsMCwwLDAtNi4yNTgtMi42MTRaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTQ3IiBkYXRhLW5hbWU9IlBhdGggMjk0NyIgY2xhc3M9ImNscy0yIiBkPSJNMzUwLjksMzUuMzYxYTIwLjM4LDIwLjM4LDAsMCwxLDQuMS4zNzVsLS43MjEsNC44MjJhMTcuNzEyLDE3LjcxMiwwLDAsMC0zLjc1Ny0uNDdBOS4xNDIsOS4xNDIsMCwwLDAsMzQzLjQsNDMuNDdhMTIuMzI3LDEyLjMyNywwLDAsMC0yLjk1OSw4LjQyMlY3MC4zaC01LjJWMzUuOTg3aDQuMjlsLjYsNi4zNTZoLjI1YTE1LjA3MiwxNS4wNzIsMCwwLDEsNC42LTUuMTY2LDEwLjM1NiwxMC4zNTYsMCwwLDEsNS45MTktMS44MTZaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTQ4IiBkYXRhLW5hbWU9IlBhdGggMjk0OCIgY2xhc3M9ImNscy0yIiBkPSJNMjU1Ljg1Nyw5Ni42MzhzLTMuNDMtLjM5MS00Ljg1LS4zOTFjLTIuMDU4LDAtMy4xMTEuNzM1LTMuMTExLDIuMTgsMCwxLjU2OC44ODIsMS45MzUsMy43NDgsMi43MTksMy41MjcuOTgsNC44LDEuOTExLDQuOCw0Ljc3NywwLDMuNjc1LTIuMyw1LjI2Ny01LjYxLDUuMjY3YTM1LjY4NywzNS42ODcsMCwwLDEtNS40ODctLjY2MmwuMjctMi4xOHMzLjMwNi40NDEsNS4wNDYuNDQxYzIuMDgyLDAsMy4wMzctLjkzMSwzLjAzNy0yLjcsMC0xLjQyMS0uNzU5LTEuOTEtMy4zMzEtMi41MjMtMy42MjYtLjkzLTUuMTkzLTIuMDMzLTUuMTkzLTQuOTQ4LDAtMy4zODEsMi4yMjktNC43NzYsNS41ODUtNC43NzZhMzcuMiwzNy4yLDAsMCwxLDUuMzE1LjU4N1oiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NDkiIGRhdGEtbmFtZT0iUGF0aCAyOTQ5IiBjbGFzcz0iY2xzLTIiIGQ9Ik0yNjIuOTY3LDk0LjE0SDI2Ny43bDMuNzQ4LDEzLjEwNkwyNzUuMiw5NC4xNGg0Ljc1MnYxNi43OEgyNzcuMlY5Ni40MmgtLjE0NWwtNC4xOTEsMTMuODE2aC0yLjg0MkwyNjUuODMxLDk2LjQyaC0uMTQ1djE0LjVoLTIuNzE5WiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk1MCIgZGF0YS1uYW1lPSJQYXRoIDI5NTAiIGNsYXNzPSJjbHMtMiIgZD0iTTMyMi4wNTcsOTQuMTRIMzM0LjN2Mi40MjVoLTQuNzI4VjExMC45MmgtMi43NDNWOTYuNTY1aC00Ljc3N1oiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NTEiIGRhdGEtbmFtZT0iUGF0aCAyOTUxIiBjbGFzcz0iY2xzLTIiIGQ9Ik0zNDYuMTM3LDk0LjE0YzMuMzMyLDAsNS4xMiwxLjI0OSw1LjEyLDQuMzYxLDAsMi4wMzMtLjYzNywzLjAzNy0xLjk4NCwzLjc3MiwxLjQ0NS41NjMsMi40LDEuNTkyLDIuNCwzLjksMCwzLjQzLTIuMDgxLDQuNzUyLTUuMzM5LDQuNzUyaC02LjU2NlY5NC4xNFptLTMuNjUsMi4zNTJ2NC44aDMuNmMxLjY2NiwwLDIuNC0uODMyLDIuNC0yLjQ3NCwwLTEuNjE3LS44MzMtMi4zMjctMi41LTIuMzI3Wm0wLDcuMXY0Ljk3M2gzLjdjMS42ODksMCwyLjY5NC0uNTM5LDIuNjk0LTIuNTQ4LDAtMS45MTEtMS40MjEtMi40MjUtMi43NDQtMi40MjVaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTUyIiBkYXRhLW5hbWU9IlBhdGggMjk1MiIgY2xhc3M9ImNscy0yIiBkPSJNMzU4LjQxNCw5NC4xNEgzNjl2Mi4zNzdoLTcuODY0djQuNzUxaDYuMzk0VjEwMy42aC02LjM5NHY0LjkyNEgzNjl2Mi40SDM1OC40MTRaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTUzIiBkYXRhLW5hbWU9IlBhdGggMjk1MyIgY2xhc3M9ImNscy0yIiBkPSJNMzc4Ljc0Nyw5NC4xNGg1LjQxNGw0LjE2NCwxNi43OGgtMi43NDRMMzg0LjM0MiwxMDZoLTUuNzc3bC0xLjIzOSw0LjkyM2gtMi43MTlabS4zNjEsOS40NTZoNC43MDhsLTEuNzM3LTcuMTc4aC0xLjIyNVoiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NTQiIGRhdGEtbmFtZT0iUGF0aCAyOTU0IiBjbGFzcz0iY2xzLTIiIGQ9Ik0zOTcuMSwxMDUuOTQ3djQuOTczaC0yLjcxOVY5NC4xNGg2LjM3YzMuNywwLDUuNjgzLDIuMTIsNS42ODMsNS44NDMsMCwyLjM3Ni0uOTU2LDQuNTE5LTIuNzQ0LDUuMzUybDIuNzY5LDUuNTg1SDQwMy40N2wtMi40MjYtNC45NzNabTMuNjUxLTkuNDU1SDM5Ny4xdjcuMWgzLjdjMi4wNTcsMCwyLjg0MS0xLjg1LDIuODQxLTMuNTg5LDAtMS45LS45MzQtMy41MTEtMi44OTQtMy41MTFaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTU1IiBkYXRhLW5hbWU9IlBhdGggMjk1NSIgY2xhc3M9ImNscy0yIiBkPSJNMjkwLjAxMyw5NC4xNGg1LjQxM2w0LjE2NCwxNi43OGgtMi43NDNMMjk1LjYwOCwxMDZoLTUuNzc3bC0xLjIzOSw0LjkyM2gtMi43MTlabS4zNjEsOS40NTZoNC43MDdsLTEuNzM3LTcuMTc4aC0xLjIyNVoiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NTYiIGRhdGEtbmFtZT0iUGF0aCAyOTU2IiBjbGFzcz0iY2xzLTIiIGQ9Ik0zMDguMzYyLDEwNS45NDd2NC45NzNoLTIuNzE5Vjk0LjE0aDYuMzY5YzMuNywwLDUuNjgzLDIuMTIsNS42ODMsNS44NDMsMCwyLjM3Ni0uOTU1LDQuNTE5LTIuNzQzLDUuMzUybDIuNzY4LDUuNTg1aC0yLjk4OWwtMi40MjUtNC45NzNabTMuNjUtOS40NTVoLTMuNjV2Ny4xaDMuN2MyLjA1OCwwLDIuODQxLTEuODUsMi44NDEtMy41ODlDMzE0LjksOTguMSwzMTMuOTcyLDk2LjQ5MiwzMTIuMDEyLDk2LjQ5MloiLz4NCiAgICAgIDxwYXRoIGlkPSJQYXRoXzI5NTciIGRhdGEtbmFtZT0iUGF0aCAyOTU3IiBjbGFzcz0iY2xzLTIiIGQ9Ik0xMzAuNjA2LDEwNy42NDNhMy4wMiwzLjAyLDAsMCwxLTEuMTgsMi41MzcsNS4xMTMsNS4xMTMsMCwwLDEtMy4yLjkxLDguMDMsOC4wMywwLDAsMS0zLjM3MS0uNTY0di0xLjM4M2E4Ljc5Myw4Ljc5MywwLDAsMCwxLjY1Mi41MDYsOC42NzIsOC42NzIsMCwwLDAsMS43Ny4xODYsMy41NjUsMy41NjUsMCwwLDAsMi4xNTctLjU0NCwxLjc4MywxLjc4MywwLDAsMCwuNzI1LTEuNTEyLDEuOTQ3LDEuOTQ3LDAsMCwwLS4yNTctMS4wNSwyLjM5MywyLjM5MywwLDAsMC0uODYtLjc1NCwxMi4xNzEsMTIuMTcxLDAsMCwwLTEuODMzLS43ODQsNS44NDIsNS44NDIsMCwwLDEtMi40NTYtMS40NTgsMy4yMTMsMy4yMTMsMCwwLDEtLjczOC0yLjIsMi43MzYsMi43MzYsMCwwLDEsMS4wNzEtMi4yNjcsNC40NDQsNC40NDQsMCwwLDEsMi44MzEtLjg0Myw4LjM0MSw4LjM0MSwwLDAsMSwzLjM4LjY3NWwtLjQ0NywxLjI0N2E3LjYzOSw3LjYzOSwwLDAsMC0yLjk2Ni0uNjQxLDIuODc4LDIuODc4LDAsMCwwLTEuNzc5LjQ4OSwxLjYxMiwxLjYxMiwwLDAsMC0uNjQsMS4zNTcsMi4wODEsMi4wODEsMCwwLDAsLjIzNiwxLjA0OSwyLjIzMSwyLjIzMSwwLDAsMCwuOC43NSw5Ljg3OCw5Ljg3OCwwLDAsMCwxLjcxNS43NTQsNi44LDYuOCwwLDAsMSwyLjY2NywxLjQ4MywyLjkxOSwyLjkxOSwwLDAsMSwuNzIzLDIuMDU3WiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk1OCIgZGF0YS1uYW1lPSJQYXRoIDI5NTgiIGNsYXNzPSJjbHMtMiIgZD0iTTEzNC40NDcsMTAxLjY4NnY1Ljk5MWEyLjQxMSwyLjQxMSwwLDAsMCwuNTE1LDEuNjg2LDIuMDksMi4wOSwwLDAsMCwxLjYwOS41NTYsMi42MjksMi42MjksMCwwLDAsMi4xMi0uNzkyLDQsNCwwLDAsMCwuNjctMi41ODd2LTQuODU0aDEuNHY5LjIzNkgxMzkuNmwtLjItMS4yMzloLS4wNzVhMi43OTMsMi43OTMsMCwwLDEtMS4xOTMsMS4wNDUsNCw0LDAsMCwxLTEuNzQuMzYyLDMuNTI5LDMuNTI5LDAsMCwxLTIuNTI0LS44LDMuNDA5LDMuNDA5LDAsMCwxLS44MzktMi41NjJ2LTYuMDQyWiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk1OSIgZGF0YS1uYW1lPSJQYXRoIDI5NTkiIGNsYXNzPSJjbHMtMiIgZD0iTTE0OC4yMDYsMTExLjA5YTMuOTkzLDMuOTkzLDAsMCwxLTEuNjQ3LS4zMzMsMy4xLDMuMSwwLDAsMS0xLjI1Mi0xLjAyM2gtLjFhMTIuMjY1LDEyLjI2NSwwLDAsMSwuMSwxLjUzM3YzLjhoLTEuNFYxMDEuNjg2aDEuMTM3bC4xOTQsMS4yNjRoLjA2N2EzLjI1NywzLjI1NywwLDAsMSwxLjI1Ni0xLjEsMy44MzEsMy44MzEsMCwwLDEsMS42NDMtLjMzNywzLjQxMywzLjQxMywwLDAsMSwyLjgzNiwxLjI1Niw2LjY4Myw2LjY4MywwLDAsMS0uMDE3LDcuMDU3LDMuNDIsMy40MiwwLDAsMS0yLjgxNywxLjI2NFptLS4yLTguMzg1YTIuNDgyLDIuNDgyLDAsMCwwLTIuMDQ4Ljc4NCw0LjA0MSw0LjA0MSwwLDAsMC0uNjQ5LDIuNDk0di4zMTJhNC42MjUsNC42MjUsMCwwLDAsLjY0OSwyLjc4NSwyLjQ2NywyLjQ2NywwLDAsMCwyLjA4Mi44MzksMi4xNjQsMi4xNjQsMCwwLDAsMS44NzUtLjk2OSw0LjYsNC42LDAsMCwwLC42NzgtMi42NzEsNC40MjgsNC40MjgsMCwwLDAtLjY3OC0yLjY1MSwyLjIzMiwyLjIzMiwwLDAsMC0xLjkxNS0uOTIzWiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk2MCIgZGF0YS1uYW1lPSJQYXRoIDI5NjAiIGNsYXNzPSJjbHMtMiIgZD0iTTE1OS4wMzksMTExLjA5YTMuOTkzLDMuOTkzLDAsMCwxLTEuNjQ3LS4zMzMsMy4xLDMuMSwwLDAsMS0xLjI1Mi0xLjAyM2gtLjFhMTIuMjY1LDEyLjI2NSwwLDAsMSwuMSwxLjUzM3YzLjhoLTEuNFYxMDEuNjg2aDEuMTM3bC4xOTQsMS4yNjRoLjA2N2EzLjI1NywzLjI1NywwLDAsMSwxLjI1Ni0xLjEsMy44MzEsMy44MzEsMCwwLDEsMS42NDMtLjMzNywzLjQxMywzLjQxMywwLDAsMSwyLjgzNiwxLjI1Niw2LjY4Myw2LjY4MywwLDAsMS0uMDE3LDcuMDU3LDMuNDIsMy40MiwwLDAsMS0yLjgxNywxLjI2NFptLS4yLTguMzg1YTIuNDgyLDIuNDgyLDAsMCwwLTIuMDQ4Ljc4NCw0LjA0MSw0LjA0MSwwLDAsMC0uNjQ5LDIuNDk0di4zMTJhNC42MjUsNC42MjUsMCwwLDAsLjY0OSwyLjc4NSwyLjQ2NywyLjQ2NywwLDAsMCwyLjA4Mi44MzksMi4xNjQsMi4xNjQsMCwwLDAsMS44NzUtLjk2OSw0LjYsNC42LDAsMCwwLC42NzgtMi42NzEsNC40MjgsNC40MjgsMCwwLDAtLjY3OC0yLjY1MSwyLjIzMiwyLjIzMiwwLDAsMC0xLjkxMS0uOTIzWiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk2MSIgZGF0YS1uYW1lPSJQYXRoIDI5NjEiIGNsYXNzPSJjbHMtMiIgZD0iTTE3My42MTIsMTA2LjNhNS4wOTMsNS4wOTMsMCwwLDEtMS4xMzcsMy41MjcsNC4wMDUsNC4wMDUsMCwwLDEtMy4xNDMsMS4yNjgsNC4xNzIsNC4xNzIsMCwwLDEtMi4yLS41ODEsMy44NCwzLjg0LDAsMCwxLTEuNDgzLTEuNjY5LDUuOCw1LjgsMCwwLDEtLjUyMi0yLjU0NSw1LjA4Nyw1LjA4NywwLDAsMSwxLjEyOS0zLjUxOCwzLjk5MSwzLjk5MSwwLDAsMSwzLjEzNS0xLjI2LDMuOTA3LDMuOTA3LDAsMCwxLDMuMDgsMS4yOSw1LjA3MSw1LjA3MSwwLDAsMSwxLjE0MSwzLjQ4OFptLTcuMDM2LDBhNC4zODQsNC4zODQsMCwwLDAsLjcwOCwyLjcsMi44MDksMi44MDksMCwwLDAsNC4xNjcsMCw0LjM2NSw0LjM2NSwwLDAsMCwuNzEyLTIuNyw0LjI5Myw0LjI5MywwLDAsMC0uNzEyLTIuNjc1LDIuNSwyLjUsMCwwLDAtMi4xLS45MTUsMi40NjEsMi40NjEsMCwwLDAtMi4wNzIuOSw0LjMzNCw0LjMzNCwwLDAsMC0uNywyLjY5WiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk2MiIgZGF0YS1uYW1lPSJQYXRoIDI5NjIiIGNsYXNzPSJjbHMtMiIgZD0iTTE4MC41MjUsMTAxLjUxN2E1LjUwNiw1LjUwNiwwLDAsMSwxLjEuMWwtLjE5NCwxLjNhNC43ODYsNC43ODYsMCwwLDAtMS4wMTEtLjEyNywyLjQ2LDIuNDYsMCwwLDAtMS45MTcuOTExLDMuMzE4LDMuMzE4LDAsMCwwLS44LDIuMjY3djQuOTU1aC0xLjR2LTkuMjM2aDEuMTU0bC4xNiwxLjcxaC4wNjhhNC4wNTQsNC4wNTQsMCwwLDEsMS4yMzgtMS4zOSwyLjc4NywyLjc4NywwLDAsMSwxLjYtLjQ5WiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk2MyIgZGF0YS1uYW1lPSJQYXRoIDI5NjMiIGNsYXNzPSJjbHMtMiIgZD0iTTE4Ny4zNjMsMTA5LjkzNmE0LjUwNiw0LjUwNiwwLDAsMCwuNzE2LS4wNTUsNC4zODcsNC4zODcsMCwwLDAsLjU0OC0uMTE0djEuMDdhMi41LDIuNSwwLDAsMS0uNjcuMTgxLDUsNSwwLDAsMS0uOC4wNzJxLTIuNjgsMC0yLjY4LTIuODIzdi01LjQ5NGgtMS4zMjNWMTAyLjFsMS4zMjMtLjU4Mi41OS0xLjk3MmguODA5djIuMTQxaDIuNjh2MS4wODdoLTIuNjh2NS40MzVhMS44NjksMS44NjksMCwwLDAsLjQsMS4yODFBMS4zNzcsMS4zNzcsMCwwLDAsMTg3LjM2MywxMDkuOTM2WiIvPg0KICAgICAgPHBhdGggaWQ9IlBhdGhfMjk2NCIgZGF0YS1uYW1lPSJQYXRoIDI5NjQiIGNsYXNzPSJjbHMtMiIgZD0iTTE5NC41MzgsMTExLjA5YTQuMjM5LDQuMjM5LDAsMCwxLTMuMjMxLTEuMjQ3LDQuODI0LDQuODI0LDAsMCwxLTEuMTg0LTMuNDYzLDUuMzU1LDUuMzU1LDAsMCwxLDEuMS0zLjU0OCwzLjY1MiwzLjY1MiwwLDAsMSwyLjk1NC0xLjMxNSwzLjQ4NCwzLjQ4NCwwLDAsMSwyLjc0NywxLjE0Miw0LjM3OCw0LjM3OCwwLDAsMSwxLjAxMSwzLjAxM3YuODg1aC02LjM2MmEzLjY2LDMuNjYsMCwwLDAsLjgyMiwyLjQ2OSwyLjg0MywyLjg0MywwLDAsMCwyLjIuODQzLDcuNDMxLDcuNDMxLDAsMCwwLDIuOTQ5LS42MjR2MS4yNDdhNy4zNzcsNy4zNzcsMCwwLDEtMS40LjQ1OSw3Ljg2Myw3Ljg2MywwLDAsMS0xLjYuMTM5Wm0tLjM3OS04LjRhMi4yODYsMi4yODYsMCwwLDAtMS43NzQuNzI1LDMuMzM3LDMuMzM3LDAsMCwwLS43NzksMi4wMDZoNC44MjhhMy4wNzIsMy4wNzIsMCwwLDAtLjU5LTIuMDI3LDIuMDc2LDIuMDc2LDAsMCwwLTEuNjg1LS43MDZaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTY1IiBkYXRhLW5hbWU9IlBhdGggMjk2NSIgY2xhc3M9ImNscy0yIiBkPSJNMjA2Ljk1MSwxMDkuNjgzaC0uMDc2YTMuMjg3LDMuMjg3LDAsMCwxLTIuOSwxLjQwNywzLjQyNywzLjQyNywwLDAsMS0yLjgxOS0xLjIzOSw1LjQ1Miw1LjQ1MiwwLDAsMS0xLjAwNi0zLjUyMiw1LjU0Miw1LjU0MiwwLDAsMSwxLjAxMS0zLjU0OCwzLjQsMy40LDAsMCwxLDIuODE0LTEuMjY0LDMuMzYxLDMuMzYxLDAsMCwxLDIuODgzLDEuMzY1aC4xMDlsLS4wNTktLjY2NS0uMDM0LS42NDlWOTcuODA5aDEuNHYxMy4xMTNoLTEuMTM4Wm0tMi44LjIzNmEyLjU1MSwyLjU1MSwwLDAsMCwyLjA3OC0uNzc5LDMuOTQ3LDMuOTQ3LDAsMCwwLC42NDQtMi41MTZ2LS4zYTQuNjM4LDQuNjM4LDAsMCwwLS42NTMtMi44LDIuNDgxLDIuNDgxLDAsMCwwLTIuMDg2LS44MzksMi4xNCwyLjE0LDAsMCwwLTEuODgzLjk1Nyw0Ljc2LDQuNzYsMCwwLDAtLjY1MywyLjcsNC41NTQsNC41NTQsMCwwLDAsLjY0OSwyLjY3MSwyLjE5NCwyLjE5NCwwLDAsMCwxLjkwNi45MDZaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTY2IiBkYXRhLW5hbWU9IlBhdGggMjk2NiIgY2xhc3M9ImNscy0yIiBkPSJNMjIwLjcxMiwxMDEuNTM0YTMuNDM1LDMuNDM1LDAsMCwxLDIuODI3LDEuMjQzLDYuNjUzLDYuNjUzLDAsMCwxLS4wMDksNy4wNTMsMy40MTcsMy40MTcsMCwwLDEtMi44MTgsMS4yNiw0LDQsMCwwLDEtMS42NDgtLjMzMywzLjA5NCwzLjA5NCwwLDAsMS0xLjI1MS0xLjAyM2gtLjFsLS4yOTUsMS4xODhoLTFWOTcuODA5aDEuNFYxMDFxMCwxLjA2OS0uMDY4LDEuOTIxaC4wNjhhMy4zMjIsMy4zMjIsMCwwLDEsMi44OTQtMS4zODdabS0uMiwxLjE3MWEyLjQ0LDIuNDQsMCwwLDAtMi4wNjQuODIyLDYuMzM4LDYuMzM4LDAsMCwwLC4wMTcsNS41NTMsMi40NjQsMi40NjQsMCwwLDAsMi4wODEuODM5LDIuMTU4LDIuMTU4LDAsMCwwLDEuOTIyLS45NCw0LjgyOCw0LjgyOCwwLDAsMCwuNjMyLTIuNyw0LjY0NSw0LjY0NSwwLDAsMC0uNjMyLTIuNjg5LDIuMjQyLDIuMjQyLDAsMCwwLTEuOTU5LS44ODVaIi8+DQogICAgICA8cGF0aCBpZD0iUGF0aF8yOTY3IiBkYXRhLW5hbWU9IlBhdGggMjk2NyIgY2xhc3M9ImNscy0yIiBkPSJNMjI1Ljc1OCwxMDEuNjg2aDEuNWwyLjAyMyw1LjI2N2EyMC4xODgsMjAuMTg4LDAsMCwxLC44MjYsMi42aC4wNjdxLjEwOS0uNDMxLjQ1OS0xLjQ3MXQyLjI4OC02LjRoMS41TDIzMC40NTIsMTEyLjJhNS4yNTMsNS4yNTMsMCwwLDEtMS4zNzgsMi4yMTIsMi45MzIsMi45MzIsMCwwLDEtMS45MzQuNjUzLDUuNjU5LDUuNjU5LDAsMCwxLTEuMjY0LS4xNDNWMTEzLjhhNC45LDQuOSwwLDAsMCwxLjAzNy4xLDIuMTM2LDIuMTM2LDAsMCwwLDIuMDU2LTEuNjE4bC41MTQtMS4zMTRaIi8+DQogICAgPC9nPg0KICA8L2c+DQo8L3N2Zz4NCg==\",alt:\"Swagger UI\"});function N(t){return null==t}var x={isNothing:N,isObject:function(t){return\"object\"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:N(t)?[]:[t]},repeat:function(t,e){var r,n=\"\";for(r=0;r<e;r+=1)n+=t;return n},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var r,n,i,o;if(e)for(r=0,n=(o=Object.keys(e)).length;r<n;r+=1)t[i=o[r]]=e[i];return t}};function m(t,e){var r=\"\",n=t.reason||\"(unknown reason)\";return t.mark?(t.mark.name&&(r+='in \"'+t.mark.name+'\" '),r+=\"(\"+(t.mark.line+1)+\":\"+(t.mark.column+1)+\")\",!e&&t.mark.snippet&&(r+=\"\\n\\n\"+t.mark.snippet),n+\" \"+r):n}function D(t,e){Error.call(this),this.name=\"YAMLException\",this.reason=t,this.mark=e,this.message=m(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||\"\"}D.prototype=Object.create(Error.prototype),D.prototype.constructor=D,D.prototype.toString=function(t){return this.name+\": \"+m(this,t)};var I=D;function S(t,e,r,n,i){var o=\"\",u=\"\",s=Math.floor(i/2)-1;return n-e>s&&(e=n-s+(o=\" ... \").length),r-n>s&&(r=n+s-(u=\" ...\").length),{str:o+t.slice(e,r).replace(/\\t/g,\"→\")+u,pos:n-e+o.length}}function b(t,e){return x.repeat(\" \",e-t.length)+t}var A=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),\"number\"!=typeof e.indent&&(e.indent=1),\"number\"!=typeof e.linesBefore&&(e.linesBefore=3),\"number\"!=typeof e.linesAfter&&(e.linesAfter=2);for(var r,n=/\\r?\\n|\\r|\\0/g,i=[0],o=[],u=-1;r=n.exec(t.buffer);)o.push(r.index),i.push(r.index+r[0].length),t.position<=r.index&&u<0&&(u=i.length-2);u<0&&(u=i.length-1);var s,a,c=\"\",f=Math.min(t.line+e.linesAfter,o.length).toString().length,l=e.maxLength-(e.indent+f+3);for(s=1;s<=e.linesBefore&&!(u-s<0);s++)a=S(t.buffer,i[u-s],o[u-s],t.position-(i[u]-i[u-s]),l),c=x.repeat(\" \",e.indent)+b((t.line-s+1).toString(),f)+\" | \"+a.str+\"\\n\"+c;for(a=S(t.buffer,i[u],o[u],t.position,l),c+=x.repeat(\" \",e.indent)+b((t.line+1).toString(),f)+\" | \"+a.str+\"\\n\",c+=x.repeat(\"-\",e.indent+f+3+a.pos)+\"^\\n\",s=1;s<=e.linesAfter&&!(u+s>=o.length);s++)a=S(t.buffer,i[u+s],o[u+s],t.position-(i[u]-i[u+s]),l),c+=x.repeat(\" \",e.indent)+b((t.line+s+1).toString(),f)+\" | \"+a.str+\"\\n\";return c.replace(/\\n$/,\"\")},C=[\"kind\",\"multi\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"representName\",\"defaultStyle\",\"styleAliases\"],T=[\"scalar\",\"sequence\",\"mapping\"];var E=function(t,e){if(e=e||{},Object.keys(e).forEach((function(e){if(-1===C.indexOf(e))throw new I('Unknown option \"'+e+'\" is met in definition of \"'+t+'\" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=function(t){var e={};return null!==t&&Object.keys(t).forEach((function(r){t[r].forEach((function(t){e[String(t)]=r}))})),e}(e.styleAliases||null),-1===T.indexOf(this.kind))throw new I('Unknown kind \"'+this.kind+'\" is specified for \"'+t+'\" YAML type.')};function z(t,e){var r=[];return t[e].forEach((function(t){var e=r.length;r.forEach((function(r,n){r.tag===t.tag&&r.kind===t.kind&&r.multi===t.multi&&(e=n)})),r[e]=t})),r}function O(t){return this.extend(t)}O.prototype.extend=function(t){var e=[],r=[];if(t instanceof E)r.push(t);else if(Array.isArray(t))r=r.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new I(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(r=r.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof E))throw new I(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");if(t.loadKind&&\"scalar\"!==t.loadKind)throw new I(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");if(t.multi)throw new I(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\")})),r.forEach((function(t){if(!(t instanceof E))throw new I(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\")}));var n=Object.create(O.prototype);return n.implicit=(this.implicit||[]).concat(e),n.explicit=(this.explicit||[]).concat(r),n.compiledImplicit=z(n,\"implicit\"),n.compiledExplicit=z(n,\"explicit\"),n.compiledTypeMap=function(){var t,e,r={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function n(t){t.multi?(r.multi[t.kind].push(t),r.multi.fallback.push(t)):r[t.kind][t.tag]=r.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(n);return r}(n.compiledImplicit,n.compiledExplicit),n};var k=O,U=new E(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(t){return null!==t?t:\"\"}}),Y=new E(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(t){return null!==t?t:[]}}),B=new E(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(t){return null!==t?t:{}}}),Q=new k({explicit:[U,Y,B]});var R=new E(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&\"~\"===t||4===e&&(\"null\"===t||\"Null\"===t||\"NULL\"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"},empty:function(){return\"\"}},defaultStyle:\"lowercase\"});var F=new E(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&(\"true\"===t||\"True\"===t||\"TRUE\"===t)||5===e&&(\"false\"===t||\"False\"===t||\"FALSE\"===t)},construct:function(t){return\"true\"===t||\"True\"===t||\"TRUE\"===t},predicate:function(t){return\"[object Boolean]\"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?\"true\":\"false\"},uppercase:function(t){return t?\"TRUE\":\"FALSE\"},camelcase:function(t){return t?\"True\":\"False\"}},defaultStyle:\"lowercase\"});function P(t){return 48<=t&&t<=55}function G(t){return 48<=t&&t<=57}var W=new E(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:function(t){if(null===t)return!1;var e,r,n=t.length,i=0,o=!1;if(!n)return!1;if(\"-\"!==(e=t[i])&&\"+\"!==e||(e=t[++i]),\"0\"===e){if(i+1===n)return!0;if(\"b\"===(e=t[++i])){for(i++;i<n;i++)if(\"_\"!==(e=t[i])){if(\"0\"!==e&&\"1\"!==e)return!1;o=!0}return o&&\"_\"!==e}if(\"x\"===e){for(i++;i<n;i++)if(\"_\"!==(e=t[i])){if(!(48<=(r=t.charCodeAt(i))&&r<=57||65<=r&&r<=70||97<=r&&r<=102))return!1;o=!0}return o&&\"_\"!==e}if(\"o\"===e){for(i++;i<n;i++)if(\"_\"!==(e=t[i])){if(!P(t.charCodeAt(i)))return!1;o=!0}return o&&\"_\"!==e}}if(\"_\"===e)return!1;for(;i<n;i++)if(\"_\"!==(e=t[i])){if(!G(t.charCodeAt(i)))return!1;o=!0}return!(!o||\"_\"===e)},construct:function(t){var e,r=t,n=1;if(-1!==r.indexOf(\"_\")&&(r=r.replace(/_/g,\"\")),\"-\"!==(e=r[0])&&\"+\"!==e||(\"-\"===e&&(n=-1),e=(r=r.slice(1))[0]),\"0\"===r)return 0;if(\"0\"===e){if(\"b\"===r[1])return n*parseInt(r.slice(2),2);if(\"x\"===r[1])return n*parseInt(r.slice(2),16);if(\"o\"===r[1])return n*parseInt(r.slice(2),8)}return n*parseInt(r,10)},predicate:function(t){return\"[object Number]\"===Object.prototype.toString.call(t)&&t%1==0&&!x.isNegativeZero(t)},represent:{binary:function(t){return t>=0?\"0b\"+t.toString(2):\"-0b\"+t.toString(2).slice(1)},octal:function(t){return t>=0?\"0o\"+t.toString(8):\"-0o\"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?\"0x\"+t.toString(16).toUpperCase():\"-0x\"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}}),q=new RegExp(\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");var J=/^[-+]?[0-9]+e/;var Z=new E(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:function(t){return null!==t&&!(!q.test(t)||\"_\"===t[t.length-1])},construct:function(t){var e,r;return r=\"-\"===(e=t.replace(/_/g,\"\").toLowerCase())[0]?-1:1,\"+-\".indexOf(e[0])>=0&&(e=e.slice(1)),\".inf\"===e?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:\".nan\"===e?NaN:r*parseFloat(e,10)},predicate:function(t){return\"[object Number]\"===Object.prototype.toString.call(t)&&(t%1!=0||x.isNegativeZero(t))},represent:function(t,e){var r;if(isNaN(t))switch(e){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===t)switch(e){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(x.isNegativeZero(t))return\"-0.0\";return r=t.toString(10),J.test(r)?r.replace(\"e\",\".e\"):r},defaultStyle:\"lowercase\"}),$=Q.extend({implicit:[R,F,W,Z]}),X=$,V=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),H=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");var K=new E(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:function(t){return null!==t&&(null!==V.exec(t)||null!==H.exec(t))},construct:function(t){var e,r,n,i,o,u,s,a,c=0,f=null;if(null===(e=V.exec(t))&&(e=H.exec(t)),null===e)throw new Error(\"Date resolve error\");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(o=+e[4],u=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+=\"0\";c=+c}return e[9]&&(f=6e4*(60*+e[10]+ +(e[11]||0)),\"-\"===e[9]&&(f=-f)),a=new Date(Date.UTC(r,n,i,o,u,s,c)),f&&a.setTime(a.getTime()-f),a},instanceOf:Date,represent:function(t){return t.toISOString()}});var tt=new E(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:function(t){return\"<<\"===t||null===t}}),et=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";var rt=new E(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:function(t){if(null===t)return!1;var e,r,n=0,i=t.length,o=et;for(r=0;r<i;r++)if(!((e=o.indexOf(t.charAt(r)))>64)){if(e<0)return!1;n+=6}return n%8==0},construct:function(t){var e,r,n=t.replace(/[\\r\\n=]/g,\"\"),i=n.length,o=et,u=0,s=[];for(e=0;e<i;e++)e%4==0&&e&&(s.push(u>>16&255),s.push(u>>8&255),s.push(255&u)),u=u<<6|o.indexOf(n.charAt(e));return 0===(r=i%4*6)?(s.push(u>>16&255),s.push(u>>8&255),s.push(255&u)):18===r?(s.push(u>>10&255),s.push(u>>2&255)):12===r&&s.push(u>>4&255),new Uint8Array(s)},predicate:function(t){return\"[object Uint8Array]\"===Object.prototype.toString.call(t)},represent:function(t){var e,r,n=\"\",i=0,o=t.length,u=et;for(e=0;e<o;e++)e%3==0&&e&&(n+=u[i>>18&63],n+=u[i>>12&63],n+=u[i>>6&63],n+=u[63&i]),i=(i<<8)+t[e];return 0===(r=o%3)?(n+=u[i>>18&63],n+=u[i>>12&63],n+=u[i>>6&63],n+=u[63&i]):2===r?(n+=u[i>>10&63],n+=u[i>>4&63],n+=u[i<<2&63],n+=u[64]):1===r&&(n+=u[i>>2&63],n+=u[i<<4&63],n+=u[64],n+=u[64]),n}}),nt=Object.prototype.hasOwnProperty,it=Object.prototype.toString;var ot=new E(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:function(t){if(null===t)return!0;var e,r,n,i,o,u=[],s=t;for(e=0,r=s.length;e<r;e+=1){if(n=s[e],o=!1,\"[object Object]\"!==it.call(n))return!1;for(i in n)if(nt.call(n,i)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==u.indexOf(i))return!1;u.push(i)}return!0},construct:function(t){return null!==t?t:[]}}),ut=Object.prototype.toString;var st=new E(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:function(t){if(null===t)return!0;var e,r,n,i,o,u=t;for(o=new Array(u.length),e=0,r=u.length;e<r;e+=1){if(n=u[e],\"[object Object]\"!==ut.call(n))return!1;if(1!==(i=Object.keys(n)).length)return!1;o[e]=[i[0],n[i[0]]]}return!0},construct:function(t){if(null===t)return[];var e,r,n,i,o,u=t;for(o=new Array(u.length),e=0,r=u.length;e<r;e+=1)n=u[e],i=Object.keys(n),o[e]=[i[0],n[i[0]]];return o}}),at=Object.prototype.hasOwnProperty;var ct=new E(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:function(t){if(null===t)return!0;var e,r=t;for(e in r)if(at.call(r,e)&&null!==r[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),ft=X.extend({implicit:[K,tt],explicit:[rt,ot,st,ct]}),lt=Object.prototype.hasOwnProperty,ht=1,pt=2,yt=3,Mt=4,wt=1,dt=2,gt=3,vt=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,Lt=/[\\x85\\u2028\\u2029]/,_t=/[,\\[\\]\\{\\}]/,jt=/^(?:!|!!|![a-z\\-]+!)$/i,Nt=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function xt(t){return Object.prototype.toString.call(t)}function mt(t){return 10===t||13===t}function Dt(t){return 9===t||32===t}function It(t){return 9===t||32===t||10===t||13===t}function St(t){return 44===t||91===t||93===t||123===t||125===t}function bt(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function At(t){return 48===t?\"\\0\":97===t?\"\u0007\":98===t?\"\\b\":116===t||9===t?\"\\t\":110===t?\"\\n\":118===t?\"\\v\":102===t?\"\\f\":114===t?\"\\r\":101===t?\"\u001b\":32===t?\" \":34===t?'\"':47===t?\"/\":92===t?\"\\\\\":78===t?\"\":95===t?\" \":76===t?\"\\u2028\":80===t?\"\\u2029\":\"\"}function Ct(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var Tt=new Array(256),Et=new Array(256),zt=0;zt<256;zt++)Tt[zt]=At(zt)?1:0,Et[zt]=At(zt);function Ot(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||ft,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function kt(t,e){var r={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return r.snippet=A(r),new I(e,r)}function Ut(t,e){throw kt(t,e)}function Yt(t,e){t.onWarning&&t.onWarning.call(null,kt(t,e))}var Bt={YAML:function(t,e,r){var n,i,o;null!==t.version&&Ut(t,\"duplication of %YAML directive\"),1!==r.length&&Ut(t,\"YAML directive accepts exactly one argument\"),null===(n=/^([0-9]+)\\.([0-9]+)$/.exec(r[0]))&&Ut(t,\"ill-formed argument of the YAML directive\"),i=parseInt(n[1],10),o=parseInt(n[2],10),1!==i&&Ut(t,\"unacceptable YAML version of the document\"),t.version=r[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&Yt(t,\"unsupported YAML version of the document\")},TAG:function(t,e,r){var n,i;2!==r.length&&Ut(t,\"TAG directive accepts exactly two arguments\"),n=r[0],i=r[1],jt.test(n)||Ut(t,\"ill-formed tag handle (first argument) of the TAG directive\"),lt.call(t.tagMap,n)&&Ut(t,'there is a previously declared suffix for \"'+n+'\" tag handle'),Nt.test(i)||Ut(t,\"ill-formed tag prefix (second argument) of the TAG directive\");try{i=decodeURIComponent(i)}catch(e){Ut(t,\"tag prefix is malformed: \"+i)}t.tagMap[n]=i}};function Qt(t,e,r,n){var i,o,u,s;if(e<r){if(s=t.input.slice(e,r),n)for(i=0,o=s.length;i<o;i+=1)9===(u=s.charCodeAt(i))||32<=u&&u<=1114111||Ut(t,\"expected valid JSON character\");else vt.test(s)&&Ut(t,\"the stream contains non-printable characters\");t.result+=s}}function Rt(t,e,r,n){var i,o,u,s;for(x.isObject(r)||Ut(t,\"cannot merge mappings; the provided source object is unacceptable\"),u=0,s=(i=Object.keys(r)).length;u<s;u+=1)o=i[u],lt.call(e,o)||(e[o]=r[o],n[o]=!0)}function Ft(t,e,r,n,i,o,u,s,a){var c,f;if(Array.isArray(i))for(c=0,f=(i=Array.prototype.slice.call(i)).length;c<f;c+=1)Array.isArray(i[c])&&Ut(t,\"nested arrays are not supported inside keys\"),\"object\"==typeof i&&\"[object Object]\"===xt(i[c])&&(i[c]=\"[object Object]\");if(\"object\"==typeof i&&\"[object Object]\"===xt(i)&&(i=\"[object Object]\"),i=String(i),null===e&&(e={}),\"tag:yaml.org,2002:merge\"===n)if(Array.isArray(o))for(c=0,f=o.length;c<f;c+=1)Rt(t,e,o[c],r);else Rt(t,e,o,r);else t.json||lt.call(r,i)||!lt.call(e,i)||(t.line=u||t.line,t.lineStart=s||t.lineStart,t.position=a||t.position,Ut(t,\"duplicated mapping key\")),\"__proto__\"===i?Object.defineProperty(e,i,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[i]=o,delete r[i];return e}function Pt(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):Ut(t,\"a line break is expected\"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function Gt(t,e,r){for(var n=0,i=t.input.charCodeAt(t.position);0!==i;){for(;Dt(i);)9===i&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),i=t.input.charCodeAt(++t.position);if(e&&35===i)do{i=t.input.charCodeAt(++t.position)}while(10!==i&&13!==i&&0!==i);if(!mt(i))break;for(Pt(t),i=t.input.charCodeAt(t.position),n++,t.lineIndent=0;32===i;)t.lineIndent++,i=t.input.charCodeAt(++t.position)}return-1!==r&&0!==n&&t.lineIndent<r&&Yt(t,\"deficient indentation\"),n}function Wt(t){var e,r=t.position;return!(45!==(e=t.input.charCodeAt(r))&&46!==e||e!==t.input.charCodeAt(r+1)||e!==t.input.charCodeAt(r+2)||(r+=3,0!==(e=t.input.charCodeAt(r))&&!It(e)))}function qt(t,e){1===e?t.result+=\" \":e>1&&(t.result+=x.repeat(\"\\n\",e-1))}function Jt(t,e){var r,n,i=t.tag,o=t.anchor,u=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=u),n=t.input.charCodeAt(t.position);0!==n&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,Ut(t,\"tab characters must not be used in indentation\")),45===n)&&It(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,Gt(t,!0,-1)&&t.lineIndent<=e)u.push(null),n=t.input.charCodeAt(t.position);else if(r=t.line,Xt(t,e,yt,!1,!0),u.push(t.result),Gt(t,!0,-1),n=t.input.charCodeAt(t.position),(t.line===r||t.lineIndent>e)&&0!==n)Ut(t,\"bad indentation of a sequence entry\");else if(t.lineIndent<e)break;return!!s&&(t.tag=i,t.anchor=o,t.kind=\"sequence\",t.result=u,!0)}function Zt(t){var e,r,n,i,o=!1,u=!1;if(33!==(i=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&Ut(t,\"duplication of a tag property\"),60===(i=t.input.charCodeAt(++t.position))?(o=!0,i=t.input.charCodeAt(++t.position)):33===i?(u=!0,r=\"!!\",i=t.input.charCodeAt(++t.position)):r=\"!\",e=t.position,o){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&62!==i);t.position<t.length?(n=t.input.slice(e,t.position),i=t.input.charCodeAt(++t.position)):Ut(t,\"unexpected end of the stream within a verbatim tag\")}else{for(;0!==i&&!It(i);)33===i&&(u?Ut(t,\"tag suffix cannot contain exclamation marks\"):(r=t.input.slice(e-1,t.position+1),jt.test(r)||Ut(t,\"named tag handle cannot contain such characters\"),u=!0,e=t.position+1)),i=t.input.charCodeAt(++t.position);n=t.input.slice(e,t.position),_t.test(n)&&Ut(t,\"tag suffix cannot contain flow indicator characters\")}n&&!Nt.test(n)&&Ut(t,\"tag name cannot contain such characters: \"+n);try{n=decodeURIComponent(n)}catch(e){Ut(t,\"tag name is malformed: \"+n)}return o?t.tag=n:lt.call(t.tagMap,r)?t.tag=t.tagMap[r]+n:\"!\"===r?t.tag=\"!\"+n:\"!!\"===r?t.tag=\"tag:yaml.org,2002:\"+n:Ut(t,'undeclared tag handle \"'+r+'\"'),!0}function $t(t){var e,r;if(38!==(r=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&Ut(t,\"duplication of an anchor property\"),r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!It(r)&&!St(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&Ut(t,\"name of an anchor node must contain at least one character\"),t.anchor=t.input.slice(e,t.position),!0}function Xt(t,e,r,n,i){var o,u,s,a,c,f,l,h,p,y=1,M=!1,w=!1;if(null!==t.listener&&t.listener(\"open\",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=u=s=Mt===r||yt===r,n&&Gt(t,!0,-1)&&(M=!0,t.lineIndent>e?y=1:t.lineIndent===e?y=0:t.lineIndent<e&&(y=-1)),1===y)for(;Zt(t)||$t(t);)Gt(t,!0,-1)?(M=!0,s=o,t.lineIndent>e?y=1:t.lineIndent===e?y=0:t.lineIndent<e&&(y=-1)):s=!1;if(s&&(s=M||i),1!==y&&Mt!==r||(h=ht===r||pt===r?e:e+1,p=t.position-t.lineStart,1===y?s&&(Jt(t,p)||function(t,e,r){var n,i,o,u,s,a,c,f=t.tag,l=t.anchor,h={},p=Object.create(null),y=null,M=null,w=null,d=!1,g=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=h),c=t.input.charCodeAt(t.position);0!==c;){if(d||-1===t.firstTabInLine||(t.position=t.firstTabInLine,Ut(t,\"tab characters must not be used in indentation\")),n=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!It(n)){if(u=t.line,s=t.lineStart,a=t.position,!Xt(t,r,pt,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);Dt(c);)c=t.input.charCodeAt(++t.position);if(58===c)It(c=t.input.charCodeAt(++t.position))||Ut(t,\"a whitespace character is expected after the key-value separator within a block mapping\"),d&&(Ft(t,h,p,y,M,null,u,s,a),y=M=w=null),g=!0,d=!1,i=!1,y=t.tag,M=t.result;else{if(!g)return t.tag=f,t.anchor=l,!0;Ut(t,\"can not read an implicit mapping pair; a colon is missed\")}}else{if(!g)return t.tag=f,t.anchor=l,!0;Ut(t,\"can not read a block mapping entry; a multiline key may not be an implicit key\")}}else 63===c?(d&&(Ft(t,h,p,y,M,null,u,s,a),y=M=w=null),g=!0,d=!0,i=!0):d?(d=!1,i=!0):Ut(t,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),t.position+=1,c=n;if((t.line===o||t.lineIndent>e)&&(d&&(u=t.line,s=t.lineStart,a=t.position),Xt(t,e,Mt,!0,i)&&(d?M=t.result:w=t.result),d||(Ft(t,h,p,y,M,w,u,s,a),y=M=w=null),Gt(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)Ut(t,\"bad indentation of a mapping entry\");else if(t.lineIndent<e)break}return d&&Ft(t,h,p,y,M,null,u,s,a),g&&(t.tag=f,t.anchor=l,t.kind=\"mapping\",t.result=h),g}(t,p,h))||function(t,e){var r,n,i,o,u,s,a,c,f,l,h,p,y=!0,M=t.tag,w=t.anchor,d=Object.create(null);if(91===(p=t.input.charCodeAt(t.position)))u=93,c=!1,o=[];else{if(123!==p)return!1;u=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),p=t.input.charCodeAt(++t.position);0!==p;){if(Gt(t,!0,e),(p=t.input.charCodeAt(t.position))===u)return t.position++,t.tag=M,t.anchor=w,t.kind=c?\"mapping\":\"sequence\",t.result=o,!0;y?44===p&&Ut(t,\"expected the node content, but found ','\"):Ut(t,\"missed comma between flow collection entries\"),h=null,s=a=!1,63===p&&It(t.input.charCodeAt(t.position+1))&&(s=a=!0,t.position++,Gt(t,!0,e)),r=t.line,n=t.lineStart,i=t.position,Xt(t,e,ht,!1,!0),l=t.tag,f=t.result,Gt(t,!0,e),p=t.input.charCodeAt(t.position),!a&&t.line!==r||58!==p||(s=!0,p=t.input.charCodeAt(++t.position),Gt(t,!0,e),Xt(t,e,ht,!1,!0),h=t.result),c?Ft(t,o,d,l,f,h,r,n,i):s?o.push(Ft(t,null,d,l,f,h,r,n,i)):o.push(f),Gt(t,!0,e),44===(p=t.input.charCodeAt(t.position))?(y=!0,p=t.input.charCodeAt(++t.position)):y=!1}Ut(t,\"unexpected end of the stream within a flow collection\")}(t,h)?w=!0:(u&&function(t,e){var r,n,i,o,u,s=wt,a=!1,c=!1,f=e,l=0,h=!1;if(124===(o=t.input.charCodeAt(t.position)))n=!1;else{if(62!==o)return!1;n=!0}for(t.kind=\"scalar\",t.result=\"\";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)wt===s?s=43===o?gt:dt:Ut(t,\"repeat of a chomping mode identifier\");else{if(!((i=48<=(u=o)&&u<=57?u-48:-1)>=0))break;0===i?Ut(t,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):c?Ut(t,\"repeat of an indentation width identifier\"):(f=e+i-1,c=!0)}if(Dt(o)){do{o=t.input.charCodeAt(++t.position)}while(Dt(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!mt(o)&&0!==o)}for(;0!==o;){for(Pt(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndent<f)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>f&&(f=t.lineIndent),mt(o))l++;else{if(t.lineIndent<f){s===gt?t.result+=x.repeat(\"\\n\",a?1+l:l):s===wt&&a&&(t.result+=\"\\n\");break}for(n?Dt(o)?(h=!0,t.result+=x.repeat(\"\\n\",a?1+l:l)):h?(h=!1,t.result+=x.repeat(\"\\n\",l+1)):0===l?a&&(t.result+=\" \"):t.result+=x.repeat(\"\\n\",l):t.result+=x.repeat(\"\\n\",a?1+l:l),a=!0,c=!0,l=0,r=t.position;!mt(o)&&0!==o;)o=t.input.charCodeAt(++t.position);Qt(t,r,t.position,!1)}}return!0}(t,h)||function(t,e){var r,n,i;if(39!==(r=t.input.charCodeAt(t.position)))return!1;for(t.kind=\"scalar\",t.result=\"\",t.position++,n=i=t.position;0!==(r=t.input.charCodeAt(t.position));)if(39===r){if(Qt(t,n,t.position,!0),39!==(r=t.input.charCodeAt(++t.position)))return!0;n=t.position,t.position++,i=t.position}else mt(r)?(Qt(t,n,i,!0),qt(t,Gt(t,!1,e)),n=i=t.position):t.position===t.lineStart&&Wt(t)?Ut(t,\"unexpected end of the document within a single quoted scalar\"):(t.position++,i=t.position);Ut(t,\"unexpected end of the stream within a single quoted scalar\")}(t,h)||function(t,e){var r,n,i,o,u,s,a;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind=\"scalar\",t.result=\"\",t.position++,r=n=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return Qt(t,r,t.position,!0),t.position++,!0;if(92===s){if(Qt(t,r,t.position,!0),mt(s=t.input.charCodeAt(++t.position)))Gt(t,!1,e);else if(s<256&&Tt[s])t.result+=Et[s],t.position++;else if((u=120===(a=s)?2:117===a?4:85===a?8:0)>0){for(i=u,o=0;i>0;i--)(u=bt(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+u:Ut(t,\"expected hexadecimal character\");t.result+=Ct(o),t.position++}else Ut(t,\"unknown escape sequence\");r=n=t.position}else mt(s)?(Qt(t,r,n,!0),qt(t,Gt(t,!1,e)),r=n=t.position):t.position===t.lineStart&&Wt(t)?Ut(t,\"unexpected end of the document within a double quoted scalar\"):(t.position++,n=t.position)}Ut(t,\"unexpected end of the stream within a double quoted scalar\")}(t,h)?w=!0:!function(t){var e,r,n;if(42!==(n=t.input.charCodeAt(t.position)))return!1;for(n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!It(n)&&!St(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&Ut(t,\"name of an alias node must contain at least one character\"),r=t.input.slice(e,t.position),lt.call(t.anchorMap,r)||Ut(t,'unidentified alias \"'+r+'\"'),t.result=t.anchorMap[r],Gt(t,!0,-1),!0}(t)?function(t,e,r){var n,i,o,u,s,a,c,f,l=t.kind,h=t.result;if(It(f=t.input.charCodeAt(t.position))||St(f)||35===f||38===f||42===f||33===f||124===f||62===f||39===f||34===f||37===f||64===f||96===f)return!1;if((63===f||45===f)&&(It(n=t.input.charCodeAt(t.position+1))||r&&St(n)))return!1;for(t.kind=\"scalar\",t.result=\"\",i=o=t.position,u=!1;0!==f;){if(58===f){if(It(n=t.input.charCodeAt(t.position+1))||r&&St(n))break}else if(35===f){if(It(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&Wt(t)||r&&St(f))break;if(mt(f)){if(s=t.line,a=t.lineStart,c=t.lineIndent,Gt(t,!1,-1),t.lineIndent>=e){u=!0,f=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=a,t.lineIndent=c;break}}u&&(Qt(t,i,o,!1),qt(t,t.line-s),i=o=t.position,u=!1),Dt(f)||(o=t.position+1),f=t.input.charCodeAt(++t.position)}return Qt(t,i,o,!1),!!t.result||(t.kind=l,t.result=h,!1)}(t,h,ht===r)&&(w=!0,null===t.tag&&(t.tag=\"?\")):(w=!0,null===t.tag&&null===t.anchor||Ut(t,\"alias node should not have any properties\")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===y&&(w=s&&Jt(t,p))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if(\"?\"===t.tag){for(null!==t.result&&\"scalar\"!==t.kind&&Ut(t,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+t.kind+'\"'),a=0,c=t.implicitTypes.length;a<c;a+=1)if((l=t.implicitTypes[a]).resolve(t.result)){t.result=l.construct(t.result),t.tag=l.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if(\"!\"!==t.tag){if(lt.call(t.typeMap[t.kind||\"fallback\"],t.tag))l=t.typeMap[t.kind||\"fallback\"][t.tag];else for(l=null,a=0,c=(f=t.typeMap.multi[t.kind||\"fallback\"]).length;a<c;a+=1)if(t.tag.slice(0,f[a].tag.length)===f[a].tag){l=f[a];break}l||Ut(t,\"unknown tag !<\"+t.tag+\">\"),null!==t.result&&l.kind!==t.kind&&Ut(t,\"unacceptable node kind for !<\"+t.tag+'> tag; it should be \"'+l.kind+'\", not \"'+t.kind+'\"'),l.resolve(t.result,t.tag)?(t.result=l.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):Ut(t,\"cannot resolve a node with !<\"+t.tag+\"> explicit tag\")}return null!==t.listener&&t.listener(\"close\",t),null!==t.tag||null!==t.anchor||w}function Vt(t){var e,r,n,i,o=t.position,u=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(i=t.input.charCodeAt(t.position))&&(Gt(t,!0,-1),i=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==i));){for(u=!0,i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!It(i);)i=t.input.charCodeAt(++t.position);for(n=[],(r=t.input.slice(e,t.position)).length<1&&Ut(t,\"directive name must not be less than one character in length\");0!==i;){for(;Dt(i);)i=t.input.charCodeAt(++t.position);if(35===i){do{i=t.input.charCodeAt(++t.position)}while(0!==i&&!mt(i));break}if(mt(i))break;for(e=t.position;0!==i&&!It(i);)i=t.input.charCodeAt(++t.position);n.push(t.input.slice(e,t.position))}0!==i&&Pt(t),lt.call(Bt,r)?Bt[r](t,r,n):Yt(t,'unknown document directive \"'+r+'\"')}Gt(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,Gt(t,!0,-1)):u&&Ut(t,\"directives end mark is expected\"),Xt(t,t.lineIndent-1,Mt,!1,!0),Gt(t,!0,-1),t.checkLineBreaks&&Lt.test(t.input.slice(o,t.position))&&Yt(t,\"non-ASCII line breaks are interpreted as content\"),t.documents.push(t.result),t.position===t.lineStart&&Wt(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,Gt(t,!0,-1)):t.position<t.length-1&&Ut(t,\"end of the stream or a document separator is expected\")}function Ht(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+=\"\\n\"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var r=new Ot(t,e),n=t.indexOf(\"\\0\");for(-1!==n&&(r.position=n,Ut(r,\"null byte is not allowed in input\")),r.input+=\"\\0\";32===r.input.charCodeAt(r.position);)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)Vt(r);return r.documents}var Kt={loadAll:function(t,e,r){null!==e&&\"object\"==typeof e&&void 0===r&&(r=e,e=null);var n=Ht(t,r);if(\"function\"!=typeof e)return n;for(var i=0,o=n.length;i<o;i+=1)e(n[i])},load:function(t,e){var r=Ht(t,e);if(0!==r.length){if(1===r.length)return r[0];throw new I(\"expected a single document in the stream, but found more\")}}},te=Object.prototype.toString,ee=Object.prototype.hasOwnProperty,re=65279,ne=9,ie=10,oe=13,ue=32,se=33,ae=34,ce=35,fe=37,le=38,he=39,pe=42,ye=44,Me=45,we=58,de=61,ge=62,ve=63,Le=64,_e=91,je=93,Ne=96,xe=123,me=124,De=125,Ie={0:\"\\\\0\",7:\"\\\\a\",8:\"\\\\b\",9:\"\\\\t\",10:\"\\\\n\",11:\"\\\\v\",12:\"\\\\f\",13:\"\\\\r\",27:\"\\\\e\",34:'\\\\\"',92:\"\\\\\\\\\",133:\"\\\\N\",160:\"\\\\_\",8232:\"\\\\L\",8233:\"\\\\P\"},Se=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"],be=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;function Ae(t){var e,r,n;if(e=t.toString(16).toUpperCase(),t<=255)r=\"x\",n=2;else if(t<=65535)r=\"u\",n=4;else{if(!(t<=4294967295))throw new I(\"code point within a string may not be greater than 0xFFFFFFFF\");r=\"U\",n=8}return\"\\\\\"+r+x.repeat(\"0\",n-e.length)+e}var Ce=1,Te=2;function Ee(t){this.schema=t.schema||ft,this.indent=Math.max(1,t.indent||2),this.noArrayIndent=t.noArrayIndent||!1,this.skipInvalid=t.skipInvalid||!1,this.flowLevel=x.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=function(t,e){var r,n,i,o,u,s,a;if(null===e)return{};for(r={},i=0,o=(n=Object.keys(e)).length;i<o;i+=1)u=n[i],s=String(e[u]),\"!!\"===u.slice(0,2)&&(u=\"tag:yaml.org,2002:\"+u.slice(2)),(a=t.compiledTypeMap.fallback[u])&&ee.call(a.styleAliases,s)&&(s=a.styleAliases[s]),r[u]=s;return r}(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.condenseFlow=t.condenseFlow||!1,this.quotingType='\"'===t.quotingType?Te:Ce,this.forceQuotes=t.forceQuotes||!1,this.replacer=\"function\"==typeof t.replacer?t.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function ze(t,e){for(var r,n=x.repeat(\" \",e),i=0,o=-1,u=\"\",s=t.length;i<s;)-1===(o=t.indexOf(\"\\n\",i))?(r=t.slice(i),i=s):(r=t.slice(i,o+1),i=o+1),r.length&&\"\\n\"!==r&&(u+=n),u+=r;return u}function Oe(t,e){return\"\\n\"+x.repeat(\" \",t.indent*e)}function ke(t){return t===ue||t===ne}function Ue(t){return 32<=t&&t<=126||161<=t&&t<=55295&&8232!==t&&8233!==t||57344<=t&&t<=65533&&t!==re||65536<=t&&t<=1114111}function Ye(t){return Ue(t)&&t!==re&&t!==oe&&t!==ie}function Be(t,e,r){var n=Ye(t),i=n&&!ke(t);return(r?n:n&&t!==ye&&t!==_e&&t!==je&&t!==xe&&t!==De)&&t!==ce&&!(e===we&&!i)||Ye(e)&&!ke(e)&&t===ce||e===we&&i}function Qe(t,e){var r,n=t.charCodeAt(e);return n>=55296&&n<=56319&&e+1<t.length&&(r=t.charCodeAt(e+1))>=56320&&r<=57343?1024*(n-55296)+r-56320+65536:n}function Re(t){return/^\\n* /.test(t)}var Fe=1,Pe=2,Ge=3,We=4,qe=5;function Je(t,e,r,n,i,o,u,s){var a,c,f=0,l=null,h=!1,p=!1,y=-1!==n,M=-1,w=Ue(c=Qe(t,0))&&c!==re&&!ke(c)&&c!==Me&&c!==ve&&c!==we&&c!==ye&&c!==_e&&c!==je&&c!==xe&&c!==De&&c!==ce&&c!==le&&c!==pe&&c!==se&&c!==me&&c!==de&&c!==ge&&c!==he&&c!==ae&&c!==fe&&c!==Le&&c!==Ne&&function(t){return!ke(t)&&t!==we}(Qe(t,t.length-1));if(e||u)for(a=0;a<t.length;f>=65536?a+=2:a++){if(!Ue(f=Qe(t,a)))return qe;w=w&&Be(f,l,s),l=f}else{for(a=0;a<t.length;f>=65536?a+=2:a++){if((f=Qe(t,a))===ie)h=!0,y&&(p=p||a-M-1>n&&\" \"!==t[M+1],M=a);else if(!Ue(f))return qe;w=w&&Be(f,l,s),l=f}p=p||y&&a-M-1>n&&\" \"!==t[M+1]}return h||p?r>9&&Re(t)?qe:u?o===Te?qe:Pe:p?We:Ge:!w||u||i(t)?o===Te?qe:Pe:Fe}function Ze(t,e,r,n,i){t.dump=function(){if(0===e.length)return t.quotingType===Te?'\"\"':\"''\";if(!t.noCompatMode&&(-1!==Se.indexOf(e)||be.test(e)))return t.quotingType===Te?'\"'+e+'\"':\"'\"+e+\"'\";var o=t.indent*Math.max(1,r),u=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-o),s=n||t.flowLevel>-1&&r>=t.flowLevel;switch(Je(e,s,t.indent,u,(function(e){return function(t,e){var r,n;for(r=0,n=t.implicitTypes.length;r<n;r+=1)if(t.implicitTypes[r].resolve(e))return!0;return!1}(t,e)}),t.quotingType,t.forceQuotes&&!n,i)){case Fe:return e;case Pe:return\"'\"+e.replace(/'/g,\"''\")+\"'\";case Ge:return\"|\"+$e(e,t.indent)+Xe(ze(e,o));case We:return\">\"+$e(e,t.indent)+Xe(ze(function(t,e){var r,n,i=/(\\n+)([^\\n]*)/g,o=(s=t.indexOf(\"\\n\"),s=-1!==s?s:t.length,i.lastIndex=s,Ve(t.slice(0,s),e)),u=\"\\n\"===t[0]||\" \"===t[0];var s;for(;n=i.exec(t);){var a=n[1],c=n[2];r=\" \"===c[0],o+=a+(u||r||\"\"===c?\"\":\"\\n\")+Ve(c,e),u=r}return o}(e,u),o));case qe:return'\"'+function(t){for(var e,r=\"\",n=0,i=0;i<t.length;n>=65536?i+=2:i++)n=Qe(t,i),!(e=Ie[n])&&Ue(n)?(r+=t[i],n>=65536&&(r+=t[i+1])):r+=e||Ae(n);return r}(e)+'\"';default:throw new I(\"impossible error: invalid scalar style\")}}()}function $e(t,e){var r=Re(t)?String(e):\"\",n=\"\\n\"===t[t.length-1];return r+(n&&(\"\\n\"===t[t.length-2]||\"\\n\"===t)?\"+\":n?\"\":\"-\")+\"\\n\"}function Xe(t){return\"\\n\"===t[t.length-1]?t.slice(0,-1):t}function Ve(t,e){if(\"\"===t||\" \"===t[0])return t;for(var r,n,i=/ [^ ]/g,o=0,u=0,s=0,a=\"\";r=i.exec(t);)(s=r.index)-o>e&&(n=u>o?u:s,a+=\"\\n\"+t.slice(o,n),o=n+1),u=s;return a+=\"\\n\",t.length-o>e&&u>o?a+=t.slice(o,u)+\"\\n\"+t.slice(u+1):a+=t.slice(o),a.slice(1)}function He(t,e,r,n){var i,o,u,s=\"\",a=t.tag;for(i=0,o=r.length;i<o;i+=1)u=r[i],t.replacer&&(u=t.replacer.call(r,String(i),u)),(tr(t,e+1,u,!0,!0,!1,!0)||void 0===u&&tr(t,e+1,null,!0,!0,!1,!0))&&(n&&\"\"===s||(s+=Oe(t,e)),t.dump&&ie===t.dump.charCodeAt(0)?s+=\"-\":s+=\"- \",s+=t.dump);t.tag=a,t.dump=s||\"[]\"}function Ke(t,e,r){var n,i,o,u,s,a;for(o=0,u=(i=r?t.explicitTypes:t.implicitTypes).length;o<u;o+=1)if(((s=i[o]).instanceOf||s.predicate)&&(!s.instanceOf||\"object\"==typeof e&&e instanceof s.instanceOf)&&(!s.predicate||s.predicate(e))){if(r?s.multi&&s.representName?t.tag=s.representName(e):t.tag=s.tag:t.tag=\"?\",s.represent){if(a=t.styleMap[s.tag]||s.defaultStyle,\"[object Function]\"===te.call(s.represent))n=s.represent(e,a);else{if(!ee.call(s.represent,a))throw new I(\"!<\"+s.tag+'> tag resolver accepts not \"'+a+'\" style');n=s.represent[a](e,a)}t.dump=n}return!0}return!1}function tr(t,e,r,n,i,o,u){t.tag=null,t.dump=r,Ke(t,r,!1)||Ke(t,r,!0);var s,a=te.call(t.dump),c=n;n&&(n=t.flowLevel<0||t.flowLevel>e);var f,l,h=\"[object Object]\"===a||\"[object Array]\"===a;if(h&&(l=-1!==(f=t.duplicates.indexOf(r))),(null!==t.tag&&\"?\"!==t.tag||l||2!==t.indent&&e>0)&&(i=!1),l&&t.usedDuplicates[f])t.dump=\"*ref_\"+f;else{if(h&&l&&!t.usedDuplicates[f]&&(t.usedDuplicates[f]=!0),\"[object Object]\"===a)n&&0!==Object.keys(t.dump).length?(!function(t,e,r,n){var i,o,u,s,a,c,f=\"\",l=t.tag,h=Object.keys(r);if(!0===t.sortKeys)h.sort();else if(\"function\"==typeof t.sortKeys)h.sort(t.sortKeys);else if(t.sortKeys)throw new I(\"sortKeys must be a boolean or a function\");for(i=0,o=h.length;i<o;i+=1)c=\"\",n&&\"\"===f||(c+=Oe(t,e)),s=r[u=h[i]],t.replacer&&(s=t.replacer.call(r,u,s)),tr(t,e+1,u,!0,!0,!0)&&((a=null!==t.tag&&\"?\"!==t.tag||t.dump&&t.dump.length>1024)&&(t.dump&&ie===t.dump.charCodeAt(0)?c+=\"?\":c+=\"? \"),c+=t.dump,a&&(c+=Oe(t,e)),tr(t,e+1,s,!0,a)&&(t.dump&&ie===t.dump.charCodeAt(0)?c+=\":\":c+=\": \",f+=c+=t.dump));t.tag=l,t.dump=f||\"{}\"}(t,e,t.dump,i),l&&(t.dump=\"&ref_\"+f+t.dump)):(!function(t,e,r){var n,i,o,u,s,a=\"\",c=t.tag,f=Object.keys(r);for(n=0,i=f.length;n<i;n+=1)s=\"\",\"\"!==a&&(s+=\", \"),t.condenseFlow&&(s+='\"'),u=r[o=f[n]],t.replacer&&(u=t.replacer.call(r,o,u)),tr(t,e,o,!1,!1)&&(t.dump.length>1024&&(s+=\"? \"),s+=t.dump+(t.condenseFlow?'\"':\"\")+\":\"+(t.condenseFlow?\"\":\" \"),tr(t,e,u,!1,!1)&&(a+=s+=t.dump));t.tag=c,t.dump=\"{\"+a+\"}\"}(t,e,t.dump),l&&(t.dump=\"&ref_\"+f+\" \"+t.dump));else if(\"[object Array]\"===a)n&&0!==t.dump.length?(t.noArrayIndent&&!u&&e>0?He(t,e-1,t.dump,i):He(t,e,t.dump,i),l&&(t.dump=\"&ref_\"+f+t.dump)):(!function(t,e,r){var n,i,o,u=\"\",s=t.tag;for(n=0,i=r.length;n<i;n+=1)o=r[n],t.replacer&&(o=t.replacer.call(r,String(n),o)),(tr(t,e,o,!1,!1)||void 0===o&&tr(t,e,null,!1,!1))&&(\"\"!==u&&(u+=\",\"+(t.condenseFlow?\"\":\" \")),u+=t.dump);t.tag=s,t.dump=\"[\"+u+\"]\"}(t,e,t.dump),l&&(t.dump=\"&ref_\"+f+\" \"+t.dump));else{if(\"[object String]\"!==a){if(\"[object Undefined]\"===a)return!1;if(t.skipInvalid)return!1;throw new I(\"unacceptable kind of an object to dump \"+a)}\"?\"!==t.tag&&Ze(t,t.dump,e,o,c)}null!==t.tag&&\"?\"!==t.tag&&(s=encodeURI(\"!\"===t.tag[0]?t.tag.slice(1):t.tag).replace(/!/g,\"%21\"),s=\"!\"===t.tag[0]?\"!\"+s:\"tag:yaml.org,2002:\"===s.slice(0,18)?\"!!\"+s.slice(18):\"!<\"+s+\">\",t.dump=s+\" \"+t.dump)}return!0}function er(t,e){var r,n,i=[],o=[];for(rr(t,i,o),r=0,n=o.length;r<n;r+=1)e.duplicates.push(i[o[r]]);e.usedDuplicates=new Array(n)}function rr(t,e,r){var n,i,o;if(null!==t&&\"object\"==typeof t)if(-1!==(i=e.indexOf(t)))-1===r.indexOf(i)&&r.push(i);else if(e.push(t),Array.isArray(t))for(i=0,o=t.length;i<o;i+=1)rr(t[i],e,r);else for(i=0,o=(n=Object.keys(t)).length;i<o;i+=1)rr(t[n[i]],e,r)}function nr(t,e){return function(){throw new Error(\"Function yaml.\"+t+\" is removed in js-yaml 4. Use yaml.\"+e+\" instead, which is now safe by default.\")}}const ir={Type:E,Schema:k,FAILSAFE_SCHEMA:Q,JSON_SCHEMA:$,CORE_SCHEMA:X,DEFAULT_SCHEMA:ft,load:Kt.load,loadAll:Kt.loadAll,dump:{dump:function(t,e){var r=new Ee(e=e||{});r.noRefs||er(t,r);var n=t;return r.replacer&&(n=r.replacer.call({\"\":n},\"\",n)),tr(r,0,n,!0,!0)?r.dump+\"\\n\":\"\"}}.dump,YAMLException:I,types:{binary:rt,float:Z,map:B,null:R,pairs:st,set:ct,timestamp:K,bool:F,int:W,merge:tt,omap:ot,seq:Y,str:U},safeLoad:nr(\"safeLoad\",\"load\"),safeLoadAll:nr(\"safeLoadAll\",\"loadAll\"),safeDump:nr(\"safeDump\",\"dump\")},or=(t,e)=>{try{return ir.load(t)}catch(t){return e&&e.errActions.newThrownErr(new Error(t)),{}}},ur=\"configs_update\",sr=\"configs_toggle\";function ar(t,e){return{type:ur,payload:{[t]:e}}}function cr(t){return{type:sr,payload:t}}const fr=()=>()=>{},lr=t=>e=>{const{fn:{fetch:r}}=e;return r(t)},hr=(t,e)=>r=>{let{specActions:n}=r;if(t)return n.downloadConfig(t).then(i,i);function i(r){r instanceof Error||r.status>=400?(n.updateLoadingStatus(\"failedConfig\"),n.updateLoadingStatus(\"failedConfig\"),n.updateUrl(\"\"),console.error(r.statusText+\" \"+t.url),e(null)):e(or(r.text))}},pr=(t,e)=>t.getIn(y()(e)?e:[e]),yr={[ur]:(t,e)=>t.merge((0,d.fromJS)(e.payload)),[sr]:(t,e)=>{const r=e.payload,n=t.get(r);return t.set(r,!n)}},Mr={getLocalConfig:()=>or('---\\nurl: \"https://petstore.swagger.io/v2/swagger.json\"\\ndom_id: \"#swagger-ui\"\\nvalidatorUrl: \"https://validator.swagger.io/validator\"\\n')};var wr=r(2320),dr=r.n(wr),gr=r(7287),vr=r.n(gr),Lr=r(3101),_r=r.n(Lr);const jr=console.error,Nr=t=>e=>{const{getComponent:r,fn:n}=t(),i=r(\"ErrorBoundary\"),u=n.getDisplayName(e);class s extends o.Component{render(){return o.createElement(i,{targetName:u,getComponent:r,fn:n},o.createElement(e,_r()({},this.props,this.context)))}}var a;return s.displayName=`WithErrorBoundary(${u})`,(a=e).prototype&&a.prototype.isReactComponent&&(s.prototype.mapStateToProps=e.prototype.mapStateToProps),s},xr=t=>{let{name:e}=t;return o.createElement(\"div\",{className:\"fallback\"},\"😱 \",o.createElement(\"i\",null,\"Could not render \",\"t\"===e?\"this component\":e,\", see the console.\"))};class mr extends o.Component{static getDerivedStateFromError(t){return{hasError:!0,error:t}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(t,e){this.props.fn.componentDidCatch(t,e)}render(){const{getComponent:t,targetName:e,children:r}=this.props;if(this.state.hasError){const r=t(\"Fallback\");return o.createElement(r,{name:e})}return r}}mr.defaultProps={targetName:\"this component\",getComponent:()=>xr,fn:{componentDidCatch:jr},children:null};const Dr=mr,Ir=[function(){return{components:{Topbar:_,Logo:j}}},function(){return{statePlugins:{spec:{actions:e,selectors:Mr},configs:{reducers:yr,actions:t,selectors:i}}}},()=>({components:{StandaloneLayout:u}}),function(){let{componentList:t=[],fullOverride:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return r=>{var n;let{getSystem:i}=r;const o=e?t:[\"App\",\"BaseLayout\",\"VersionPragmaFilter\",\"InfoContainer\",\"ServersContainer\",\"SchemesContainer\",\"AuthorizeBtnContainer\",\"FilterContainer\",\"Operations\",\"OperationContainer\",\"parameters\",\"responses\",\"OperationServers\",\"Models\",\"ModelWrapper\",...t],u=vr()(o,dr()(n=Array(o.length)).call(n,((t,e)=>{let{fn:r}=e;return r.withErrorBoundary(t)})));return{fn:{componentDidCatch:jr,withErrorBoundary:Nr(i)},components:{ErrorBoundary:Dr,Fallback:xr},wrapComponents:u}}}({fullOverride:!0,componentList:[\"Topbar\",\"StandaloneLayout\",\"onlineValidatorBadge\"]})]})(),n=n.default})()));\n//# sourceMappingURL=swagger-ui-standalone-preset.js.map"
  },
  {
    "path": "data/web/api/swagger-ui.css",
    "content": ".swagger-ui{color:#3b4151;font-family:sans-serif/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */}.swagger-ui html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;line-height:1.15}.swagger-ui body{margin:0}.swagger-ui article,.swagger-ui aside,.swagger-ui footer,.swagger-ui header,.swagger-ui nav,.swagger-ui section{display:block}.swagger-ui h1{font-size:2em;margin:.67em 0}.swagger-ui figcaption,.swagger-ui figure,.swagger-ui main{display:block}.swagger-ui figure{margin:1em 40px}.swagger-ui hr{box-sizing:content-box;height:0;overflow:visible}.swagger-ui pre{font-family:monospace,monospace;font-size:1em}.swagger-ui a{-webkit-text-decoration-skip:objects;background-color:transparent}.swagger-ui abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.swagger-ui b,.swagger-ui strong{font-weight:inherit;font-weight:bolder}.swagger-ui code,.swagger-ui kbd,.swagger-ui samp{font-family:monospace,monospace;font-size:1em}.swagger-ui dfn{font-style:italic}.swagger-ui mark{background-color:#ff0;color:#000}.swagger-ui small{font-size:80%}.swagger-ui sub,.swagger-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.swagger-ui sub{bottom:-.25em}.swagger-ui sup{top:-.5em}.swagger-ui audio,.swagger-ui video{display:inline-block}.swagger-ui audio:not([controls]){display:none;height:0}.swagger-ui img{border-style:none}.swagger-ui svg:not(:root){overflow:hidden}.swagger-ui button,.swagger-ui input,.swagger-ui optgroup,.swagger-ui select,.swagger-ui textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}.swagger-ui button,.swagger-ui input{overflow:visible}.swagger-ui button,.swagger-ui select{text-transform:none}.swagger-ui [type=reset],.swagger-ui [type=submit],.swagger-ui button,.swagger-ui html [type=button]{-webkit-appearance:button}.swagger-ui [type=button]::-moz-focus-inner,.swagger-ui [type=reset]::-moz-focus-inner,.swagger-ui [type=submit]::-moz-focus-inner,.swagger-ui button::-moz-focus-inner{border-style:none;padding:0}.swagger-ui [type=button]:-moz-focusring,.swagger-ui [type=reset]:-moz-focusring,.swagger-ui [type=submit]:-moz-focusring,.swagger-ui button:-moz-focusring{outline:1px dotted ButtonText}.swagger-ui fieldset{padding:.35em .75em .625em}.swagger-ui legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}.swagger-ui progress{display:inline-block;vertical-align:baseline}.swagger-ui textarea{overflow:auto}.swagger-ui [type=checkbox],.swagger-ui [type=radio]{box-sizing:border-box;padding:0}.swagger-ui [type=number]::-webkit-inner-spin-button,.swagger-ui [type=number]::-webkit-outer-spin-button{height:auto}.swagger-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.swagger-ui [type=search]::-webkit-search-cancel-button,.swagger-ui [type=search]::-webkit-search-decoration{-webkit-appearance:none}.swagger-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.swagger-ui details,.swagger-ui menu{display:block}.swagger-ui summary{display:list-item}.swagger-ui canvas{display:inline-block}.swagger-ui [hidden],.swagger-ui template{display:none}.swagger-ui .debug *{outline:1px solid gold}.swagger-ui .debug-white *{outline:1px solid #fff}.swagger-ui .debug-black *{outline:1px solid #000}.swagger-ui .debug-grid{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTRDOTY4N0U2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTRDOTY4N0Q2N0VFMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3NjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3NzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsBS+GMAAAAjSURBVHjaYvz//z8DLsD4gcGXiYEAGBIKGBne//fFpwAgwAB98AaF2pjlUQAAAABJRU5ErkJggg==) repeat 0 0}.swagger-ui .debug-grid-16{background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6ODYyRjhERDU2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6ODYyRjhERDQ2N0YyMTFFNjg2MzZDQjkwNkQ4MjgwMEIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QTY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3QjY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PvCS01IAAABMSURBVHjaYmR4/5+BFPBfAMFm/MBgx8RAGWCn1AAmSg34Q6kBDKMGMDCwICeMIemF/5QawEipAWwUhwEjMDvbAWlWkvVBwu8vQIABAEwBCph8U6c0AAAAAElFTkSuQmCC) repeat 0 0}.swagger-ui .debug-grid-8-solid{background:#fff url(data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAAAAD/4QMxaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzExMSA3OS4xNTgzMjUsIDIwMTUvMDkvMTAtMDE6MTA6MjAgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChNYWNpbnRvc2gpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkIxMjI0OTczNjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkIxMjI0OTc0NjdCMzExRTZCMkJDRTI0MDgxMDAyMTcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjEyMjQ5NzE2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjEyMjQ5NzI2N0IzMTFFNkIyQkNFMjQwODEwMDIxNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAbGhopHSlBJiZBQi8vL0JHPz4+P0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHAR0pKTQmND8oKD9HPzU/R0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0f/wAARCAAIAAgDASIAAhEBAxEB/8QAWQABAQAAAAAAAAAAAAAAAAAAAAYBAQEAAAAAAAAAAAAAAAAAAAIEEAEBAAMBAAAAAAAAAAAAAAABADECA0ERAAEDBQAAAAAAAAAAAAAAAAARITFBUWESIv/aAAwDAQACEQMRAD8AoOnTV1QTD7JJshP3vSM3P//Z) repeat 0 0}.swagger-ui .debug-grid-16-solid{background:#fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTExIDc5LjE1ODMyNSwgMjAxNS8wOS8xMC0wMToxMDoyMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NzY3MkJEN0U2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NzY3MkJEN0Y2N0M1MTFFNkIyQkNFMjQwODEwMDIxNzEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3NjcyQkQ3QzY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3NjcyQkQ3RDY3QzUxMUU2QjJCQ0UyNDA4MTAwMjE3MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pve6J3kAAAAzSURBVHjaYvz//z8D0UDsMwMjSRoYP5Gq4SPNbRjVMEQ1fCRDg+in/6+J1AJUxsgAEGAA31BAJMS0GYEAAAAASUVORK5CYII=) repeat 0 0}.swagger-ui .border-box,.swagger-ui a,.swagger-ui article,.swagger-ui body,.swagger-ui code,.swagger-ui dd,.swagger-ui div,.swagger-ui dl,.swagger-ui dt,.swagger-ui fieldset,.swagger-ui footer,.swagger-ui form,.swagger-ui h1,.swagger-ui h2,.swagger-ui h3,.swagger-ui h4,.swagger-ui h5,.swagger-ui h6,.swagger-ui header,.swagger-ui html,.swagger-ui input[type=email],.swagger-ui input[type=number],.swagger-ui input[type=password],.swagger-ui input[type=tel],.swagger-ui input[type=text],.swagger-ui input[type=url],.swagger-ui legend,.swagger-ui li,.swagger-ui main,.swagger-ui ol,.swagger-ui p,.swagger-ui pre,.swagger-ui section,.swagger-ui table,.swagger-ui td,.swagger-ui textarea,.swagger-ui th,.swagger-ui tr,.swagger-ui ul{box-sizing:border-box}.swagger-ui .aspect-ratio{height:0;position:relative}.swagger-ui .aspect-ratio--16x9{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1{padding-bottom:100%}.swagger-ui .aspect-ratio--object{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}@media screen and (min-width:30em){.swagger-ui .aspect-ratio-ns{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-ns{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-ns{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-ns{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-ns{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-ns{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-ns{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-ns{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-ns{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-ns{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-ns{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-ns{padding-bottom:100%}.swagger-ui .aspect-ratio--object-ns{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .aspect-ratio-m{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-m{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-m{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-m{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-m{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-m{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-m{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-m{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-m{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-m{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-m{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-m{padding-bottom:100%}.swagger-ui .aspect-ratio--object-m{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}@media screen and (min-width:60em){.swagger-ui .aspect-ratio-l{height:0;position:relative}.swagger-ui .aspect-ratio--16x9-l{padding-bottom:56.25%}.swagger-ui .aspect-ratio--9x16-l{padding-bottom:177.77%}.swagger-ui .aspect-ratio--4x3-l{padding-bottom:75%}.swagger-ui .aspect-ratio--3x4-l{padding-bottom:133.33%}.swagger-ui .aspect-ratio--6x4-l{padding-bottom:66.6%}.swagger-ui .aspect-ratio--4x6-l{padding-bottom:150%}.swagger-ui .aspect-ratio--8x5-l{padding-bottom:62.5%}.swagger-ui .aspect-ratio--5x8-l{padding-bottom:160%}.swagger-ui .aspect-ratio--7x5-l{padding-bottom:71.42%}.swagger-ui .aspect-ratio--5x7-l{padding-bottom:140%}.swagger-ui .aspect-ratio--1x1-l{padding-bottom:100%}.swagger-ui .aspect-ratio--object-l{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%;z-index:100}}.swagger-ui img{max-width:100%}.swagger-ui .cover{background-size:cover!important}.swagger-ui .contain{background-size:contain!important}@media screen and (min-width:30em){.swagger-ui .cover-ns{background-size:cover!important}.swagger-ui .contain-ns{background-size:contain!important}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .cover-m{background-size:cover!important}.swagger-ui .contain-m{background-size:contain!important}}@media screen and (min-width:60em){.swagger-ui .cover-l{background-size:cover!important}.swagger-ui .contain-l{background-size:contain!important}}.swagger-ui .bg-center{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left{background-position:0;background-repeat:no-repeat}@media screen and (min-width:30em){.swagger-ui .bg-center-ns{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-ns{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-ns{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-ns{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-ns{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .bg-center-m{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-m{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-m{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-m{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-m{background-position:0;background-repeat:no-repeat}}@media screen and (min-width:60em){.swagger-ui .bg-center-l{background-position:50%;background-repeat:no-repeat}.swagger-ui .bg-top-l{background-position:top;background-repeat:no-repeat}.swagger-ui .bg-right-l{background-position:100%;background-repeat:no-repeat}.swagger-ui .bg-bottom-l{background-position:bottom;background-repeat:no-repeat}.swagger-ui .bg-left-l{background-position:0;background-repeat:no-repeat}}.swagger-ui .outline{outline:1px solid}.swagger-ui .outline-transparent{outline:1px solid transparent}.swagger-ui .outline-0{outline:0}@media screen and (min-width:30em){.swagger-ui .outline-ns{outline:1px solid}.swagger-ui .outline-transparent-ns{outline:1px solid transparent}.swagger-ui .outline-0-ns{outline:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .outline-m{outline:1px solid}.swagger-ui .outline-transparent-m{outline:1px solid transparent}.swagger-ui .outline-0-m{outline:0}}@media screen and (min-width:60em){.swagger-ui .outline-l{outline:1px solid}.swagger-ui .outline-transparent-l{outline:1px solid transparent}.swagger-ui .outline-0-l{outline:0}}.swagger-ui .ba{border-style:solid;border-width:1px}.swagger-ui .bt{border-top-style:solid;border-top-width:1px}.swagger-ui .br{border-right-style:solid;border-right-width:1px}.swagger-ui .bb{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl{border-left-style:solid;border-left-width:1px}.swagger-ui .bn{border-style:none;border-width:0}@media screen and (min-width:30em){.swagger-ui .ba-ns{border-style:solid;border-width:1px}.swagger-ui .bt-ns{border-top-style:solid;border-top-width:1px}.swagger-ui .br-ns{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-ns{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-ns{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-ns{border-style:none;border-width:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ba-m{border-style:solid;border-width:1px}.swagger-ui .bt-m{border-top-style:solid;border-top-width:1px}.swagger-ui .br-m{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-m{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-m{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-m{border-style:none;border-width:0}}@media screen and (min-width:60em){.swagger-ui .ba-l{border-style:solid;border-width:1px}.swagger-ui .bt-l{border-top-style:solid;border-top-width:1px}.swagger-ui .br-l{border-right-style:solid;border-right-width:1px}.swagger-ui .bb-l{border-bottom-style:solid;border-bottom-width:1px}.swagger-ui .bl-l{border-left-style:solid;border-left-width:1px}.swagger-ui .bn-l{border-style:none;border-width:0}}.swagger-ui .b--black{border-color:#000}.swagger-ui .b--near-black{border-color:#111}.swagger-ui .b--dark-gray{border-color:#333}.swagger-ui .b--mid-gray{border-color:#555}.swagger-ui .b--gray{border-color:#777}.swagger-ui .b--silver{border-color:#999}.swagger-ui .b--light-silver{border-color:#aaa}.swagger-ui .b--moon-gray{border-color:#ccc}.swagger-ui .b--light-gray{border-color:#eee}.swagger-ui .b--near-white{border-color:#f4f4f4}.swagger-ui .b--white{border-color:#fff}.swagger-ui .b--white-90{border-color:hsla(0,0%,100%,.9)}.swagger-ui .b--white-80{border-color:hsla(0,0%,100%,.8)}.swagger-ui .b--white-70{border-color:hsla(0,0%,100%,.7)}.swagger-ui .b--white-60{border-color:hsla(0,0%,100%,.6)}.swagger-ui .b--white-50{border-color:hsla(0,0%,100%,.5)}.swagger-ui .b--white-40{border-color:hsla(0,0%,100%,.4)}.swagger-ui .b--white-30{border-color:hsla(0,0%,100%,.3)}.swagger-ui .b--white-20{border-color:hsla(0,0%,100%,.2)}.swagger-ui .b--white-10{border-color:hsla(0,0%,100%,.1)}.swagger-ui .b--white-05{border-color:hsla(0,0%,100%,.05)}.swagger-ui .b--white-025{border-color:hsla(0,0%,100%,.025)}.swagger-ui .b--white-0125{border-color:hsla(0,0%,100%,.013)}.swagger-ui .b--black-90{border-color:rgba(0,0,0,.9)}.swagger-ui .b--black-80{border-color:rgba(0,0,0,.8)}.swagger-ui .b--black-70{border-color:rgba(0,0,0,.7)}.swagger-ui .b--black-60{border-color:rgba(0,0,0,.6)}.swagger-ui .b--black-50{border-color:rgba(0,0,0,.5)}.swagger-ui .b--black-40{border-color:rgba(0,0,0,.4)}.swagger-ui .b--black-30{border-color:rgba(0,0,0,.3)}.swagger-ui .b--black-20{border-color:rgba(0,0,0,.2)}.swagger-ui .b--black-10{border-color:rgba(0,0,0,.1)}.swagger-ui .b--black-05{border-color:rgba(0,0,0,.05)}.swagger-ui .b--black-025{border-color:rgba(0,0,0,.025)}.swagger-ui .b--black-0125{border-color:rgba(0,0,0,.013)}.swagger-ui .b--dark-red{border-color:#e7040f}.swagger-ui .b--red{border-color:#ff4136}.swagger-ui .b--light-red{border-color:#ff725c}.swagger-ui .b--orange{border-color:#ff6300}.swagger-ui .b--gold{border-color:#ffb700}.swagger-ui .b--yellow{border-color:gold}.swagger-ui .b--light-yellow{border-color:#fbf1a9}.swagger-ui .b--purple{border-color:#5e2ca5}.swagger-ui .b--light-purple{border-color:#a463f2}.swagger-ui .b--dark-pink{border-color:#d5008f}.swagger-ui .b--hot-pink{border-color:#ff41b4}.swagger-ui .b--pink{border-color:#ff80cc}.swagger-ui .b--light-pink{border-color:#ffa3d7}.swagger-ui .b--dark-green{border-color:#137752}.swagger-ui .b--green{border-color:#19a974}.swagger-ui .b--light-green{border-color:#9eebcf}.swagger-ui .b--navy{border-color:#001b44}.swagger-ui .b--dark-blue{border-color:#00449e}.swagger-ui .b--blue{border-color:#357edd}.swagger-ui .b--light-blue{border-color:#96ccff}.swagger-ui .b--lightest-blue{border-color:#cdecff}.swagger-ui .b--washed-blue{border-color:#f6fffe}.swagger-ui .b--washed-green{border-color:#e8fdf5}.swagger-ui .b--washed-yellow{border-color:#fffceb}.swagger-ui .b--washed-red{border-color:#ffdfdf}.swagger-ui .b--transparent{border-color:transparent}.swagger-ui .b--inherit{border-color:inherit}.swagger-ui .br0{border-radius:0}.swagger-ui .br1{border-radius:.125rem}.swagger-ui .br2{border-radius:.25rem}.swagger-ui .br3{border-radius:.5rem}.swagger-ui .br4{border-radius:1rem}.swagger-ui .br-100{border-radius:100%}.swagger-ui .br-pill{border-radius:9999px}.swagger-ui .br--bottom{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left{border-bottom-right-radius:0;border-top-right-radius:0}@media screen and (min-width:30em){.swagger-ui .br0-ns{border-radius:0}.swagger-ui .br1-ns{border-radius:.125rem}.swagger-ui .br2-ns{border-radius:.25rem}.swagger-ui .br3-ns{border-radius:.5rem}.swagger-ui .br4-ns{border-radius:1rem}.swagger-ui .br-100-ns{border-radius:100%}.swagger-ui .br-pill-ns{border-radius:9999px}.swagger-ui .br--bottom-ns{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-ns{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-ns{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-ns{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .br0-m{border-radius:0}.swagger-ui .br1-m{border-radius:.125rem}.swagger-ui .br2-m{border-radius:.25rem}.swagger-ui .br3-m{border-radius:.5rem}.swagger-ui .br4-m{border-radius:1rem}.swagger-ui .br-100-m{border-radius:100%}.swagger-ui .br-pill-m{border-radius:9999px}.swagger-ui .br--bottom-m{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-m{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-m{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-m{border-bottom-right-radius:0;border-top-right-radius:0}}@media screen and (min-width:60em){.swagger-ui .br0-l{border-radius:0}.swagger-ui .br1-l{border-radius:.125rem}.swagger-ui .br2-l{border-radius:.25rem}.swagger-ui .br3-l{border-radius:.5rem}.swagger-ui .br4-l{border-radius:1rem}.swagger-ui .br-100-l{border-radius:100%}.swagger-ui .br-pill-l{border-radius:9999px}.swagger-ui .br--bottom-l{border-top-left-radius:0;border-top-right-radius:0}.swagger-ui .br--top-l{border-bottom-left-radius:0;border-bottom-right-radius:0}.swagger-ui .br--right-l{border-bottom-left-radius:0;border-top-left-radius:0}.swagger-ui .br--left-l{border-bottom-right-radius:0;border-top-right-radius:0}}.swagger-ui .b--dotted{border-style:dotted}.swagger-ui .b--dashed{border-style:dashed}.swagger-ui .b--solid{border-style:solid}.swagger-ui .b--none{border-style:none}@media screen and (min-width:30em){.swagger-ui .b--dotted-ns{border-style:dotted}.swagger-ui .b--dashed-ns{border-style:dashed}.swagger-ui .b--solid-ns{border-style:solid}.swagger-ui .b--none-ns{border-style:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .b--dotted-m{border-style:dotted}.swagger-ui .b--dashed-m{border-style:dashed}.swagger-ui .b--solid-m{border-style:solid}.swagger-ui .b--none-m{border-style:none}}@media screen and (min-width:60em){.swagger-ui .b--dotted-l{border-style:dotted}.swagger-ui .b--dashed-l{border-style:dashed}.swagger-ui .b--solid-l{border-style:solid}.swagger-ui .b--none-l{border-style:none}}.swagger-ui .bw0{border-width:0}.swagger-ui .bw1{border-width:.125rem}.swagger-ui .bw2{border-width:.25rem}.swagger-ui .bw3{border-width:.5rem}.swagger-ui .bw4{border-width:1rem}.swagger-ui .bw5{border-width:2rem}.swagger-ui .bt-0{border-top-width:0}.swagger-ui .br-0{border-right-width:0}.swagger-ui .bb-0{border-bottom-width:0}.swagger-ui .bl-0{border-left-width:0}@media screen and (min-width:30em){.swagger-ui .bw0-ns{border-width:0}.swagger-ui .bw1-ns{border-width:.125rem}.swagger-ui .bw2-ns{border-width:.25rem}.swagger-ui .bw3-ns{border-width:.5rem}.swagger-ui .bw4-ns{border-width:1rem}.swagger-ui .bw5-ns{border-width:2rem}.swagger-ui .bt-0-ns{border-top-width:0}.swagger-ui .br-0-ns{border-right-width:0}.swagger-ui .bb-0-ns{border-bottom-width:0}.swagger-ui .bl-0-ns{border-left-width:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .bw0-m{border-width:0}.swagger-ui .bw1-m{border-width:.125rem}.swagger-ui .bw2-m{border-width:.25rem}.swagger-ui .bw3-m{border-width:.5rem}.swagger-ui .bw4-m{border-width:1rem}.swagger-ui .bw5-m{border-width:2rem}.swagger-ui .bt-0-m{border-top-width:0}.swagger-ui .br-0-m{border-right-width:0}.swagger-ui .bb-0-m{border-bottom-width:0}.swagger-ui .bl-0-m{border-left-width:0}}@media screen and (min-width:60em){.swagger-ui .bw0-l{border-width:0}.swagger-ui .bw1-l{border-width:.125rem}.swagger-ui .bw2-l{border-width:.25rem}.swagger-ui .bw3-l{border-width:.5rem}.swagger-ui .bw4-l{border-width:1rem}.swagger-ui .bw5-l{border-width:2rem}.swagger-ui .bt-0-l{border-top-width:0}.swagger-ui .br-0-l{border-right-width:0}.swagger-ui .bb-0-l{border-bottom-width:0}.swagger-ui .bl-0-l{border-left-width:0}}.swagger-ui .shadow-1{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}@media screen and (min-width:30em){.swagger-ui .shadow-1-ns{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-ns{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-ns{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-ns{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-ns{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .shadow-1-m{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-m{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-m{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-m{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-m{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}@media screen and (min-width:60em){.swagger-ui .shadow-1-l{box-shadow:0 0 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-2-l{box-shadow:0 0 8px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-3-l{box-shadow:2px 2px 4px 2px rgba(0,0,0,.2)}.swagger-ui .shadow-4-l{box-shadow:2px 2px 8px 0 rgba(0,0,0,.2)}.swagger-ui .shadow-5-l{box-shadow:4px 4px 8px 0 rgba(0,0,0,.2)}}.swagger-ui .pre{overflow-x:auto;overflow-y:hidden;overflow:scroll}.swagger-ui .top-0{top:0}.swagger-ui .right-0{right:0}.swagger-ui .bottom-0{bottom:0}.swagger-ui .left-0{left:0}.swagger-ui .top-1{top:1rem}.swagger-ui .right-1{right:1rem}.swagger-ui .bottom-1{bottom:1rem}.swagger-ui .left-1{left:1rem}.swagger-ui .top-2{top:2rem}.swagger-ui .right-2{right:2rem}.swagger-ui .bottom-2{bottom:2rem}.swagger-ui .left-2{left:2rem}.swagger-ui .top--1{top:-1rem}.swagger-ui .right--1{right:-1rem}.swagger-ui .bottom--1{bottom:-1rem}.swagger-ui .left--1{left:-1rem}.swagger-ui .top--2{top:-2rem}.swagger-ui .right--2{right:-2rem}.swagger-ui .bottom--2{bottom:-2rem}.swagger-ui .left--2{left:-2rem}.swagger-ui .absolute--fill{bottom:0;left:0;right:0;top:0}@media screen and (min-width:30em){.swagger-ui .top-0-ns{top:0}.swagger-ui .left-0-ns{left:0}.swagger-ui .right-0-ns{right:0}.swagger-ui .bottom-0-ns{bottom:0}.swagger-ui .top-1-ns{top:1rem}.swagger-ui .left-1-ns{left:1rem}.swagger-ui .right-1-ns{right:1rem}.swagger-ui .bottom-1-ns{bottom:1rem}.swagger-ui .top-2-ns{top:2rem}.swagger-ui .left-2-ns{left:2rem}.swagger-ui .right-2-ns{right:2rem}.swagger-ui .bottom-2-ns{bottom:2rem}.swagger-ui .top--1-ns{top:-1rem}.swagger-ui .right--1-ns{right:-1rem}.swagger-ui .bottom--1-ns{bottom:-1rem}.swagger-ui .left--1-ns{left:-1rem}.swagger-ui .top--2-ns{top:-2rem}.swagger-ui .right--2-ns{right:-2rem}.swagger-ui .bottom--2-ns{bottom:-2rem}.swagger-ui .left--2-ns{left:-2rem}.swagger-ui .absolute--fill-ns{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .top-0-m{top:0}.swagger-ui .left-0-m{left:0}.swagger-ui .right-0-m{right:0}.swagger-ui .bottom-0-m{bottom:0}.swagger-ui .top-1-m{top:1rem}.swagger-ui .left-1-m{left:1rem}.swagger-ui .right-1-m{right:1rem}.swagger-ui .bottom-1-m{bottom:1rem}.swagger-ui .top-2-m{top:2rem}.swagger-ui .left-2-m{left:2rem}.swagger-ui .right-2-m{right:2rem}.swagger-ui .bottom-2-m{bottom:2rem}.swagger-ui .top--1-m{top:-1rem}.swagger-ui .right--1-m{right:-1rem}.swagger-ui .bottom--1-m{bottom:-1rem}.swagger-ui .left--1-m{left:-1rem}.swagger-ui .top--2-m{top:-2rem}.swagger-ui .right--2-m{right:-2rem}.swagger-ui .bottom--2-m{bottom:-2rem}.swagger-ui .left--2-m{left:-2rem}.swagger-ui .absolute--fill-m{bottom:0;left:0;right:0;top:0}}@media screen and (min-width:60em){.swagger-ui .top-0-l{top:0}.swagger-ui .left-0-l{left:0}.swagger-ui .right-0-l{right:0}.swagger-ui .bottom-0-l{bottom:0}.swagger-ui .top-1-l{top:1rem}.swagger-ui .left-1-l{left:1rem}.swagger-ui .right-1-l{right:1rem}.swagger-ui .bottom-1-l{bottom:1rem}.swagger-ui .top-2-l{top:2rem}.swagger-ui .left-2-l{left:2rem}.swagger-ui .right-2-l{right:2rem}.swagger-ui .bottom-2-l{bottom:2rem}.swagger-ui .top--1-l{top:-1rem}.swagger-ui .right--1-l{right:-1rem}.swagger-ui .bottom--1-l{bottom:-1rem}.swagger-ui .left--1-l{left:-1rem}.swagger-ui .top--2-l{top:-2rem}.swagger-ui .right--2-l{right:-2rem}.swagger-ui .bottom--2-l{bottom:-2rem}.swagger-ui .left--2-l{left:-2rem}.swagger-ui .absolute--fill-l{bottom:0;left:0;right:0;top:0}}.swagger-ui .cf:after,.swagger-ui .cf:before{content:\" \";display:table}.swagger-ui .cf:after{clear:both}.swagger-ui .cf{zoom:1}.swagger-ui .cl{clear:left}.swagger-ui .cr{clear:right}.swagger-ui .cb{clear:both}.swagger-ui .cn{clear:none}@media screen and (min-width:30em){.swagger-ui .cl-ns{clear:left}.swagger-ui .cr-ns{clear:right}.swagger-ui .cb-ns{clear:both}.swagger-ui .cn-ns{clear:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .cl-m{clear:left}.swagger-ui .cr-m{clear:right}.swagger-ui .cb-m{clear:both}.swagger-ui .cn-m{clear:none}}@media screen and (min-width:60em){.swagger-ui .cl-l{clear:left}.swagger-ui .cr-l{clear:right}.swagger-ui .cb-l{clear:both}.swagger-ui .cn-l{clear:none}}.swagger-ui .flex{display:flex}.swagger-ui .inline-flex{display:inline-flex}.swagger-ui .flex-auto{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none{flex:none}.swagger-ui .flex-column{flex-direction:column}.swagger-ui .flex-row{flex-direction:row}.swagger-ui .flex-wrap{flex-wrap:wrap}.swagger-ui .flex-nowrap{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse{flex-direction:column-reverse}.swagger-ui .flex-row-reverse{flex-direction:row-reverse}.swagger-ui .items-start{align-items:flex-start}.swagger-ui .items-end{align-items:flex-end}.swagger-ui .items-center{align-items:center}.swagger-ui .items-baseline{align-items:baseline}.swagger-ui .items-stretch{align-items:stretch}.swagger-ui .self-start{align-self:flex-start}.swagger-ui .self-end{align-self:flex-end}.swagger-ui .self-center{align-self:center}.swagger-ui .self-baseline{align-self:baseline}.swagger-ui .self-stretch{align-self:stretch}.swagger-ui .justify-start{justify-content:flex-start}.swagger-ui .justify-end{justify-content:flex-end}.swagger-ui .justify-center{justify-content:center}.swagger-ui .justify-between{justify-content:space-between}.swagger-ui .justify-around{justify-content:space-around}.swagger-ui .content-start{align-content:flex-start}.swagger-ui .content-end{align-content:flex-end}.swagger-ui .content-center{align-content:center}.swagger-ui .content-between{align-content:space-between}.swagger-ui .content-around{align-content:space-around}.swagger-ui .content-stretch{align-content:stretch}.swagger-ui .order-0{order:0}.swagger-ui .order-1{order:1}.swagger-ui .order-2{order:2}.swagger-ui .order-3{order:3}.swagger-ui .order-4{order:4}.swagger-ui .order-5{order:5}.swagger-ui .order-6{order:6}.swagger-ui .order-7{order:7}.swagger-ui .order-8{order:8}.swagger-ui .order-last{order:99999}.swagger-ui .flex-grow-0{flex-grow:0}.swagger-ui .flex-grow-1{flex-grow:1}.swagger-ui .flex-shrink-0{flex-shrink:0}.swagger-ui .flex-shrink-1{flex-shrink:1}@media screen and (min-width:30em){.swagger-ui .flex-ns{display:flex}.swagger-ui .inline-flex-ns{display:inline-flex}.swagger-ui .flex-auto-ns{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-ns{flex:none}.swagger-ui .flex-column-ns{flex-direction:column}.swagger-ui .flex-row-ns{flex-direction:row}.swagger-ui .flex-wrap-ns{flex-wrap:wrap}.swagger-ui .flex-nowrap-ns{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-ns{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-ns{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-ns{flex-direction:row-reverse}.swagger-ui .items-start-ns{align-items:flex-start}.swagger-ui .items-end-ns{align-items:flex-end}.swagger-ui .items-center-ns{align-items:center}.swagger-ui .items-baseline-ns{align-items:baseline}.swagger-ui .items-stretch-ns{align-items:stretch}.swagger-ui .self-start-ns{align-self:flex-start}.swagger-ui .self-end-ns{align-self:flex-end}.swagger-ui .self-center-ns{align-self:center}.swagger-ui .self-baseline-ns{align-self:baseline}.swagger-ui .self-stretch-ns{align-self:stretch}.swagger-ui .justify-start-ns{justify-content:flex-start}.swagger-ui .justify-end-ns{justify-content:flex-end}.swagger-ui .justify-center-ns{justify-content:center}.swagger-ui .justify-between-ns{justify-content:space-between}.swagger-ui .justify-around-ns{justify-content:space-around}.swagger-ui .content-start-ns{align-content:flex-start}.swagger-ui .content-end-ns{align-content:flex-end}.swagger-ui .content-center-ns{align-content:center}.swagger-ui .content-between-ns{align-content:space-between}.swagger-ui .content-around-ns{align-content:space-around}.swagger-ui .content-stretch-ns{align-content:stretch}.swagger-ui .order-0-ns{order:0}.swagger-ui .order-1-ns{order:1}.swagger-ui .order-2-ns{order:2}.swagger-ui .order-3-ns{order:3}.swagger-ui .order-4-ns{order:4}.swagger-ui .order-5-ns{order:5}.swagger-ui .order-6-ns{order:6}.swagger-ui .order-7-ns{order:7}.swagger-ui .order-8-ns{order:8}.swagger-ui .order-last-ns{order:99999}.swagger-ui .flex-grow-0-ns{flex-grow:0}.swagger-ui .flex-grow-1-ns{flex-grow:1}.swagger-ui .flex-shrink-0-ns{flex-shrink:0}.swagger-ui .flex-shrink-1-ns{flex-shrink:1}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .flex-m{display:flex}.swagger-ui .inline-flex-m{display:inline-flex}.swagger-ui .flex-auto-m{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-m{flex:none}.swagger-ui .flex-column-m{flex-direction:column}.swagger-ui .flex-row-m{flex-direction:row}.swagger-ui .flex-wrap-m{flex-wrap:wrap}.swagger-ui .flex-nowrap-m{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-m{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-m{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-m{flex-direction:row-reverse}.swagger-ui .items-start-m{align-items:flex-start}.swagger-ui .items-end-m{align-items:flex-end}.swagger-ui .items-center-m{align-items:center}.swagger-ui .items-baseline-m{align-items:baseline}.swagger-ui .items-stretch-m{align-items:stretch}.swagger-ui .self-start-m{align-self:flex-start}.swagger-ui .self-end-m{align-self:flex-end}.swagger-ui .self-center-m{align-self:center}.swagger-ui .self-baseline-m{align-self:baseline}.swagger-ui .self-stretch-m{align-self:stretch}.swagger-ui .justify-start-m{justify-content:flex-start}.swagger-ui .justify-end-m{justify-content:flex-end}.swagger-ui .justify-center-m{justify-content:center}.swagger-ui .justify-between-m{justify-content:space-between}.swagger-ui .justify-around-m{justify-content:space-around}.swagger-ui .content-start-m{align-content:flex-start}.swagger-ui .content-end-m{align-content:flex-end}.swagger-ui .content-center-m{align-content:center}.swagger-ui .content-between-m{align-content:space-between}.swagger-ui .content-around-m{align-content:space-around}.swagger-ui .content-stretch-m{align-content:stretch}.swagger-ui .order-0-m{order:0}.swagger-ui .order-1-m{order:1}.swagger-ui .order-2-m{order:2}.swagger-ui .order-3-m{order:3}.swagger-ui .order-4-m{order:4}.swagger-ui .order-5-m{order:5}.swagger-ui .order-6-m{order:6}.swagger-ui .order-7-m{order:7}.swagger-ui .order-8-m{order:8}.swagger-ui .order-last-m{order:99999}.swagger-ui .flex-grow-0-m{flex-grow:0}.swagger-ui .flex-grow-1-m{flex-grow:1}.swagger-ui .flex-shrink-0-m{flex-shrink:0}.swagger-ui .flex-shrink-1-m{flex-shrink:1}}@media screen and (min-width:60em){.swagger-ui .flex-l{display:flex}.swagger-ui .inline-flex-l{display:inline-flex}.swagger-ui .flex-auto-l{flex:1 1 auto;min-height:0;min-width:0}.swagger-ui .flex-none-l{flex:none}.swagger-ui .flex-column-l{flex-direction:column}.swagger-ui .flex-row-l{flex-direction:row}.swagger-ui .flex-wrap-l{flex-wrap:wrap}.swagger-ui .flex-nowrap-l{flex-wrap:nowrap}.swagger-ui .flex-wrap-reverse-l{flex-wrap:wrap-reverse}.swagger-ui .flex-column-reverse-l{flex-direction:column-reverse}.swagger-ui .flex-row-reverse-l{flex-direction:row-reverse}.swagger-ui .items-start-l{align-items:flex-start}.swagger-ui .items-end-l{align-items:flex-end}.swagger-ui .items-center-l{align-items:center}.swagger-ui .items-baseline-l{align-items:baseline}.swagger-ui .items-stretch-l{align-items:stretch}.swagger-ui .self-start-l{align-self:flex-start}.swagger-ui .self-end-l{align-self:flex-end}.swagger-ui .self-center-l{align-self:center}.swagger-ui .self-baseline-l{align-self:baseline}.swagger-ui .self-stretch-l{align-self:stretch}.swagger-ui .justify-start-l{justify-content:flex-start}.swagger-ui .justify-end-l{justify-content:flex-end}.swagger-ui .justify-center-l{justify-content:center}.swagger-ui .justify-between-l{justify-content:space-between}.swagger-ui .justify-around-l{justify-content:space-around}.swagger-ui .content-start-l{align-content:flex-start}.swagger-ui .content-end-l{align-content:flex-end}.swagger-ui .content-center-l{align-content:center}.swagger-ui .content-between-l{align-content:space-between}.swagger-ui .content-around-l{align-content:space-around}.swagger-ui .content-stretch-l{align-content:stretch}.swagger-ui .order-0-l{order:0}.swagger-ui .order-1-l{order:1}.swagger-ui .order-2-l{order:2}.swagger-ui .order-3-l{order:3}.swagger-ui .order-4-l{order:4}.swagger-ui .order-5-l{order:5}.swagger-ui .order-6-l{order:6}.swagger-ui .order-7-l{order:7}.swagger-ui .order-8-l{order:8}.swagger-ui .order-last-l{order:99999}.swagger-ui .flex-grow-0-l{flex-grow:0}.swagger-ui .flex-grow-1-l{flex-grow:1}.swagger-ui .flex-shrink-0-l{flex-shrink:0}.swagger-ui .flex-shrink-1-l{flex-shrink:1}}.swagger-ui .dn{display:none}.swagger-ui .di{display:inline}.swagger-ui .db{display:block}.swagger-ui .dib{display:inline-block}.swagger-ui .dit{display:inline-table}.swagger-ui .dt{display:table}.swagger-ui .dtc{display:table-cell}.swagger-ui .dt-row{display:table-row}.swagger-ui .dt-row-group{display:table-row-group}.swagger-ui .dt-column{display:table-column}.swagger-ui .dt-column-group{display:table-column-group}.swagger-ui .dt--fixed{table-layout:fixed;width:100%}@media screen and (min-width:30em){.swagger-ui .dn-ns{display:none}.swagger-ui .di-ns{display:inline}.swagger-ui .db-ns{display:block}.swagger-ui .dib-ns{display:inline-block}.swagger-ui .dit-ns{display:inline-table}.swagger-ui .dt-ns{display:table}.swagger-ui .dtc-ns{display:table-cell}.swagger-ui .dt-row-ns{display:table-row}.swagger-ui .dt-row-group-ns{display:table-row-group}.swagger-ui .dt-column-ns{display:table-column}.swagger-ui .dt-column-group-ns{display:table-column-group}.swagger-ui .dt--fixed-ns{table-layout:fixed;width:100%}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .dn-m{display:none}.swagger-ui .di-m{display:inline}.swagger-ui .db-m{display:block}.swagger-ui .dib-m{display:inline-block}.swagger-ui .dit-m{display:inline-table}.swagger-ui .dt-m{display:table}.swagger-ui .dtc-m{display:table-cell}.swagger-ui .dt-row-m{display:table-row}.swagger-ui .dt-row-group-m{display:table-row-group}.swagger-ui .dt-column-m{display:table-column}.swagger-ui .dt-column-group-m{display:table-column-group}.swagger-ui .dt--fixed-m{table-layout:fixed;width:100%}}@media screen and (min-width:60em){.swagger-ui .dn-l{display:none}.swagger-ui .di-l{display:inline}.swagger-ui .db-l{display:block}.swagger-ui .dib-l{display:inline-block}.swagger-ui .dit-l{display:inline-table}.swagger-ui .dt-l{display:table}.swagger-ui .dtc-l{display:table-cell}.swagger-ui .dt-row-l{display:table-row}.swagger-ui .dt-row-group-l{display:table-row-group}.swagger-ui .dt-column-l{display:table-column}.swagger-ui .dt-column-group-l{display:table-column-group}.swagger-ui .dt--fixed-l{table-layout:fixed;width:100%}}.swagger-ui .fl{_display:inline;float:left}.swagger-ui .fr{_display:inline;float:right}.swagger-ui .fn{float:none}@media screen and (min-width:30em){.swagger-ui .fl-ns{_display:inline;float:left}.swagger-ui .fr-ns{_display:inline;float:right}.swagger-ui .fn-ns{float:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .fl-m{_display:inline;float:left}.swagger-ui .fr-m{_display:inline;float:right}.swagger-ui .fn-m{float:none}}@media screen and (min-width:60em){.swagger-ui .fl-l{_display:inline;float:left}.swagger-ui .fr-l{_display:inline;float:right}.swagger-ui .fn-l{float:none}}.swagger-ui .sans-serif{font-family:-apple-system,BlinkMacSystemFont,avenir next,avenir,helvetica,helvetica neue,ubuntu,roboto,noto,segoe ui,arial,sans-serif}.swagger-ui .serif{font-family:georgia,serif}.swagger-ui .system-sans-serif{font-family:sans-serif}.swagger-ui .system-serif{font-family:serif}.swagger-ui .code,.swagger-ui code{font-family:Consolas,monaco,monospace}.swagger-ui .courier{font-family:Courier Next,courier,monospace}.swagger-ui .helvetica{font-family:helvetica neue,helvetica,sans-serif}.swagger-ui .avenir{font-family:avenir next,avenir,sans-serif}.swagger-ui .athelas{font-family:athelas,georgia,serif}.swagger-ui .georgia{font-family:georgia,serif}.swagger-ui .times{font-family:times,serif}.swagger-ui .bodoni{font-family:Bodoni MT,serif}.swagger-ui .calisto{font-family:Calisto MT,serif}.swagger-ui .garamond{font-family:garamond,serif}.swagger-ui .baskerville{font-family:baskerville,serif}.swagger-ui .i{font-style:italic}.swagger-ui .fs-normal{font-style:normal}@media screen and (min-width:30em){.swagger-ui .i-ns{font-style:italic}.swagger-ui .fs-normal-ns{font-style:normal}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .i-m{font-style:italic}.swagger-ui .fs-normal-m{font-style:normal}}@media screen and (min-width:60em){.swagger-ui .i-l{font-style:italic}.swagger-ui .fs-normal-l{font-style:normal}}.swagger-ui .normal{font-weight:400}.swagger-ui .b{font-weight:700}.swagger-ui .fw1{font-weight:100}.swagger-ui .fw2{font-weight:200}.swagger-ui .fw3{font-weight:300}.swagger-ui .fw4{font-weight:400}.swagger-ui .fw5{font-weight:500}.swagger-ui .fw6{font-weight:600}.swagger-ui .fw7{font-weight:700}.swagger-ui .fw8{font-weight:800}.swagger-ui .fw9{font-weight:900}@media screen and (min-width:30em){.swagger-ui .normal-ns{font-weight:400}.swagger-ui .b-ns{font-weight:700}.swagger-ui .fw1-ns{font-weight:100}.swagger-ui .fw2-ns{font-weight:200}.swagger-ui .fw3-ns{font-weight:300}.swagger-ui .fw4-ns{font-weight:400}.swagger-ui .fw5-ns{font-weight:500}.swagger-ui .fw6-ns{font-weight:600}.swagger-ui .fw7-ns{font-weight:700}.swagger-ui .fw8-ns{font-weight:800}.swagger-ui .fw9-ns{font-weight:900}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .normal-m{font-weight:400}.swagger-ui .b-m{font-weight:700}.swagger-ui .fw1-m{font-weight:100}.swagger-ui .fw2-m{font-weight:200}.swagger-ui .fw3-m{font-weight:300}.swagger-ui .fw4-m{font-weight:400}.swagger-ui .fw5-m{font-weight:500}.swagger-ui .fw6-m{font-weight:600}.swagger-ui .fw7-m{font-weight:700}.swagger-ui .fw8-m{font-weight:800}.swagger-ui .fw9-m{font-weight:900}}@media screen and (min-width:60em){.swagger-ui .normal-l{font-weight:400}.swagger-ui .b-l{font-weight:700}.swagger-ui .fw1-l{font-weight:100}.swagger-ui .fw2-l{font-weight:200}.swagger-ui .fw3-l{font-weight:300}.swagger-ui .fw4-l{font-weight:400}.swagger-ui .fw5-l{font-weight:500}.swagger-ui .fw6-l{font-weight:600}.swagger-ui .fw7-l{font-weight:700}.swagger-ui .fw8-l{font-weight:800}.swagger-ui .fw9-l{font-weight:900}}.swagger-ui .input-reset{-webkit-appearance:none;-moz-appearance:none}.swagger-ui .button-reset::-moz-focus-inner,.swagger-ui .input-reset::-moz-focus-inner{border:0;padding:0}.swagger-ui .h1{height:1rem}.swagger-ui .h2{height:2rem}.swagger-ui .h3{height:4rem}.swagger-ui .h4{height:8rem}.swagger-ui .h5{height:16rem}.swagger-ui .h-25{height:25%}.swagger-ui .h-50{height:50%}.swagger-ui .h-75{height:75%}.swagger-ui .h-100{height:100%}.swagger-ui .min-h-100{min-height:100%}.swagger-ui .vh-25{height:25vh}.swagger-ui .vh-50{height:50vh}.swagger-ui .vh-75{height:75vh}.swagger-ui .vh-100{height:100vh}.swagger-ui .min-vh-100{min-height:100vh}.swagger-ui .h-auto{height:auto}.swagger-ui .h-inherit{height:inherit}@media screen and (min-width:30em){.swagger-ui .h1-ns{height:1rem}.swagger-ui .h2-ns{height:2rem}.swagger-ui .h3-ns{height:4rem}.swagger-ui .h4-ns{height:8rem}.swagger-ui .h5-ns{height:16rem}.swagger-ui .h-25-ns{height:25%}.swagger-ui .h-50-ns{height:50%}.swagger-ui .h-75-ns{height:75%}.swagger-ui .h-100-ns{height:100%}.swagger-ui .min-h-100-ns{min-height:100%}.swagger-ui .vh-25-ns{height:25vh}.swagger-ui .vh-50-ns{height:50vh}.swagger-ui .vh-75-ns{height:75vh}.swagger-ui .vh-100-ns{height:100vh}.swagger-ui .min-vh-100-ns{min-height:100vh}.swagger-ui .h-auto-ns{height:auto}.swagger-ui .h-inherit-ns{height:inherit}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .h1-m{height:1rem}.swagger-ui .h2-m{height:2rem}.swagger-ui .h3-m{height:4rem}.swagger-ui .h4-m{height:8rem}.swagger-ui .h5-m{height:16rem}.swagger-ui .h-25-m{height:25%}.swagger-ui .h-50-m{height:50%}.swagger-ui .h-75-m{height:75%}.swagger-ui .h-100-m{height:100%}.swagger-ui .min-h-100-m{min-height:100%}.swagger-ui .vh-25-m{height:25vh}.swagger-ui .vh-50-m{height:50vh}.swagger-ui .vh-75-m{height:75vh}.swagger-ui .vh-100-m{height:100vh}.swagger-ui .min-vh-100-m{min-height:100vh}.swagger-ui .h-auto-m{height:auto}.swagger-ui .h-inherit-m{height:inherit}}@media screen and (min-width:60em){.swagger-ui .h1-l{height:1rem}.swagger-ui .h2-l{height:2rem}.swagger-ui .h3-l{height:4rem}.swagger-ui .h4-l{height:8rem}.swagger-ui .h5-l{height:16rem}.swagger-ui .h-25-l{height:25%}.swagger-ui .h-50-l{height:50%}.swagger-ui .h-75-l{height:75%}.swagger-ui .h-100-l{height:100%}.swagger-ui .min-h-100-l{min-height:100%}.swagger-ui .vh-25-l{height:25vh}.swagger-ui .vh-50-l{height:50vh}.swagger-ui .vh-75-l{height:75vh}.swagger-ui .vh-100-l{height:100vh}.swagger-ui .min-vh-100-l{min-height:100vh}.swagger-ui .h-auto-l{height:auto}.swagger-ui .h-inherit-l{height:inherit}}.swagger-ui .tracked{letter-spacing:.1em}.swagger-ui .tracked-tight{letter-spacing:-.05em}.swagger-ui .tracked-mega{letter-spacing:.25em}@media screen and (min-width:30em){.swagger-ui .tracked-ns{letter-spacing:.1em}.swagger-ui .tracked-tight-ns{letter-spacing:-.05em}.swagger-ui .tracked-mega-ns{letter-spacing:.25em}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .tracked-m{letter-spacing:.1em}.swagger-ui .tracked-tight-m{letter-spacing:-.05em}.swagger-ui .tracked-mega-m{letter-spacing:.25em}}@media screen and (min-width:60em){.swagger-ui .tracked-l{letter-spacing:.1em}.swagger-ui .tracked-tight-l{letter-spacing:-.05em}.swagger-ui .tracked-mega-l{letter-spacing:.25em}}.swagger-ui .lh-solid{line-height:1}.swagger-ui .lh-title{line-height:1.25}.swagger-ui .lh-copy{line-height:1.5}@media screen and (min-width:30em){.swagger-ui .lh-solid-ns{line-height:1}.swagger-ui .lh-title-ns{line-height:1.25}.swagger-ui .lh-copy-ns{line-height:1.5}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .lh-solid-m{line-height:1}.swagger-ui .lh-title-m{line-height:1.25}.swagger-ui .lh-copy-m{line-height:1.5}}@media screen and (min-width:60em){.swagger-ui .lh-solid-l{line-height:1}.swagger-ui .lh-title-l{line-height:1.25}.swagger-ui .lh-copy-l{line-height:1.5}}.swagger-ui .link{-webkit-text-decoration:none;text-decoration:none}.swagger-ui .link,.swagger-ui .link:active,.swagger-ui .link:focus,.swagger-ui .link:hover,.swagger-ui .link:link,.swagger-ui .link:visited{transition:color .15s ease-in}.swagger-ui .link:focus{outline:1px dotted currentColor}.swagger-ui .list{list-style-type:none}.swagger-ui .mw-100{max-width:100%}.swagger-ui .mw1{max-width:1rem}.swagger-ui .mw2{max-width:2rem}.swagger-ui .mw3{max-width:4rem}.swagger-ui .mw4{max-width:8rem}.swagger-ui .mw5{max-width:16rem}.swagger-ui .mw6{max-width:32rem}.swagger-ui .mw7{max-width:48rem}.swagger-ui .mw8{max-width:64rem}.swagger-ui .mw9{max-width:96rem}.swagger-ui .mw-none{max-width:none}@media screen and (min-width:30em){.swagger-ui .mw-100-ns{max-width:100%}.swagger-ui .mw1-ns{max-width:1rem}.swagger-ui .mw2-ns{max-width:2rem}.swagger-ui .mw3-ns{max-width:4rem}.swagger-ui .mw4-ns{max-width:8rem}.swagger-ui .mw5-ns{max-width:16rem}.swagger-ui .mw6-ns{max-width:32rem}.swagger-ui .mw7-ns{max-width:48rem}.swagger-ui .mw8-ns{max-width:64rem}.swagger-ui .mw9-ns{max-width:96rem}.swagger-ui .mw-none-ns{max-width:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .mw-100-m{max-width:100%}.swagger-ui .mw1-m{max-width:1rem}.swagger-ui .mw2-m{max-width:2rem}.swagger-ui .mw3-m{max-width:4rem}.swagger-ui .mw4-m{max-width:8rem}.swagger-ui .mw5-m{max-width:16rem}.swagger-ui .mw6-m{max-width:32rem}.swagger-ui .mw7-m{max-width:48rem}.swagger-ui .mw8-m{max-width:64rem}.swagger-ui .mw9-m{max-width:96rem}.swagger-ui .mw-none-m{max-width:none}}@media screen and (min-width:60em){.swagger-ui .mw-100-l{max-width:100%}.swagger-ui .mw1-l{max-width:1rem}.swagger-ui .mw2-l{max-width:2rem}.swagger-ui .mw3-l{max-width:4rem}.swagger-ui .mw4-l{max-width:8rem}.swagger-ui .mw5-l{max-width:16rem}.swagger-ui .mw6-l{max-width:32rem}.swagger-ui .mw7-l{max-width:48rem}.swagger-ui .mw8-l{max-width:64rem}.swagger-ui .mw9-l{max-width:96rem}.swagger-ui .mw-none-l{max-width:none}}.swagger-ui .w1{width:1rem}.swagger-ui .w2{width:2rem}.swagger-ui .w3{width:4rem}.swagger-ui .w4{width:8rem}.swagger-ui .w5{width:16rem}.swagger-ui .w-10{width:10%}.swagger-ui .w-20{width:20%}.swagger-ui .w-25{width:25%}.swagger-ui .w-30{width:30%}.swagger-ui .w-33{width:33%}.swagger-ui .w-34{width:34%}.swagger-ui .w-40{width:40%}.swagger-ui .w-50{width:50%}.swagger-ui .w-60{width:60%}.swagger-ui .w-70{width:70%}.swagger-ui .w-75{width:75%}.swagger-ui .w-80{width:80%}.swagger-ui .w-90{width:90%}.swagger-ui .w-100{width:100%}.swagger-ui .w-third{width:33.3333333333%}.swagger-ui .w-two-thirds{width:66.6666666667%}.swagger-ui .w-auto{width:auto}@media screen and (min-width:30em){.swagger-ui .w1-ns{width:1rem}.swagger-ui .w2-ns{width:2rem}.swagger-ui .w3-ns{width:4rem}.swagger-ui .w4-ns{width:8rem}.swagger-ui .w5-ns{width:16rem}.swagger-ui .w-10-ns{width:10%}.swagger-ui .w-20-ns{width:20%}.swagger-ui .w-25-ns{width:25%}.swagger-ui .w-30-ns{width:30%}.swagger-ui .w-33-ns{width:33%}.swagger-ui .w-34-ns{width:34%}.swagger-ui .w-40-ns{width:40%}.swagger-ui .w-50-ns{width:50%}.swagger-ui .w-60-ns{width:60%}.swagger-ui .w-70-ns{width:70%}.swagger-ui .w-75-ns{width:75%}.swagger-ui .w-80-ns{width:80%}.swagger-ui .w-90-ns{width:90%}.swagger-ui .w-100-ns{width:100%}.swagger-ui .w-third-ns{width:33.3333333333%}.swagger-ui .w-two-thirds-ns{width:66.6666666667%}.swagger-ui .w-auto-ns{width:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .w1-m{width:1rem}.swagger-ui .w2-m{width:2rem}.swagger-ui .w3-m{width:4rem}.swagger-ui .w4-m{width:8rem}.swagger-ui .w5-m{width:16rem}.swagger-ui .w-10-m{width:10%}.swagger-ui .w-20-m{width:20%}.swagger-ui .w-25-m{width:25%}.swagger-ui .w-30-m{width:30%}.swagger-ui .w-33-m{width:33%}.swagger-ui .w-34-m{width:34%}.swagger-ui .w-40-m{width:40%}.swagger-ui .w-50-m{width:50%}.swagger-ui .w-60-m{width:60%}.swagger-ui .w-70-m{width:70%}.swagger-ui .w-75-m{width:75%}.swagger-ui .w-80-m{width:80%}.swagger-ui .w-90-m{width:90%}.swagger-ui .w-100-m{width:100%}.swagger-ui .w-third-m{width:33.3333333333%}.swagger-ui .w-two-thirds-m{width:66.6666666667%}.swagger-ui .w-auto-m{width:auto}}@media screen and (min-width:60em){.swagger-ui .w1-l{width:1rem}.swagger-ui .w2-l{width:2rem}.swagger-ui .w3-l{width:4rem}.swagger-ui .w4-l{width:8rem}.swagger-ui .w5-l{width:16rem}.swagger-ui .w-10-l{width:10%}.swagger-ui .w-20-l{width:20%}.swagger-ui .w-25-l{width:25%}.swagger-ui .w-30-l{width:30%}.swagger-ui .w-33-l{width:33%}.swagger-ui .w-34-l{width:34%}.swagger-ui .w-40-l{width:40%}.swagger-ui .w-50-l{width:50%}.swagger-ui .w-60-l{width:60%}.swagger-ui .w-70-l{width:70%}.swagger-ui .w-75-l{width:75%}.swagger-ui .w-80-l{width:80%}.swagger-ui .w-90-l{width:90%}.swagger-ui .w-100-l{width:100%}.swagger-ui .w-third-l{width:33.3333333333%}.swagger-ui .w-two-thirds-l{width:66.6666666667%}.swagger-ui .w-auto-l{width:auto}}.swagger-ui .overflow-visible{overflow:visible}.swagger-ui .overflow-hidden{overflow:hidden}.swagger-ui .overflow-scroll{overflow:scroll}.swagger-ui .overflow-auto{overflow:auto}.swagger-ui .overflow-x-visible{overflow-x:visible}.swagger-ui .overflow-x-hidden{overflow-x:hidden}.swagger-ui .overflow-x-scroll{overflow-x:scroll}.swagger-ui .overflow-x-auto{overflow-x:auto}.swagger-ui .overflow-y-visible{overflow-y:visible}.swagger-ui .overflow-y-hidden{overflow-y:hidden}.swagger-ui .overflow-y-scroll{overflow-y:scroll}.swagger-ui .overflow-y-auto{overflow-y:auto}@media screen and (min-width:30em){.swagger-ui .overflow-visible-ns{overflow:visible}.swagger-ui .overflow-hidden-ns{overflow:hidden}.swagger-ui .overflow-scroll-ns{overflow:scroll}.swagger-ui .overflow-auto-ns{overflow:auto}.swagger-ui .overflow-x-visible-ns{overflow-x:visible}.swagger-ui .overflow-x-hidden-ns{overflow-x:hidden}.swagger-ui .overflow-x-scroll-ns{overflow-x:scroll}.swagger-ui .overflow-x-auto-ns{overflow-x:auto}.swagger-ui .overflow-y-visible-ns{overflow-y:visible}.swagger-ui .overflow-y-hidden-ns{overflow-y:hidden}.swagger-ui .overflow-y-scroll-ns{overflow-y:scroll}.swagger-ui .overflow-y-auto-ns{overflow-y:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .overflow-visible-m{overflow:visible}.swagger-ui .overflow-hidden-m{overflow:hidden}.swagger-ui .overflow-scroll-m{overflow:scroll}.swagger-ui .overflow-auto-m{overflow:auto}.swagger-ui .overflow-x-visible-m{overflow-x:visible}.swagger-ui .overflow-x-hidden-m{overflow-x:hidden}.swagger-ui .overflow-x-scroll-m{overflow-x:scroll}.swagger-ui .overflow-x-auto-m{overflow-x:auto}.swagger-ui .overflow-y-visible-m{overflow-y:visible}.swagger-ui .overflow-y-hidden-m{overflow-y:hidden}.swagger-ui .overflow-y-scroll-m{overflow-y:scroll}.swagger-ui .overflow-y-auto-m{overflow-y:auto}}@media screen and (min-width:60em){.swagger-ui .overflow-visible-l{overflow:visible}.swagger-ui .overflow-hidden-l{overflow:hidden}.swagger-ui .overflow-scroll-l{overflow:scroll}.swagger-ui .overflow-auto-l{overflow:auto}.swagger-ui .overflow-x-visible-l{overflow-x:visible}.swagger-ui .overflow-x-hidden-l{overflow-x:hidden}.swagger-ui .overflow-x-scroll-l{overflow-x:scroll}.swagger-ui .overflow-x-auto-l{overflow-x:auto}.swagger-ui .overflow-y-visible-l{overflow-y:visible}.swagger-ui .overflow-y-hidden-l{overflow-y:hidden}.swagger-ui .overflow-y-scroll-l{overflow-y:scroll}.swagger-ui .overflow-y-auto-l{overflow-y:auto}}.swagger-ui .static{position:static}.swagger-ui .relative{position:relative}.swagger-ui .absolute{position:absolute}.swagger-ui .fixed{position:fixed}@media screen and (min-width:30em){.swagger-ui .static-ns{position:static}.swagger-ui .relative-ns{position:relative}.swagger-ui .absolute-ns{position:absolute}.swagger-ui .fixed-ns{position:fixed}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .static-m{position:static}.swagger-ui .relative-m{position:relative}.swagger-ui .absolute-m{position:absolute}.swagger-ui .fixed-m{position:fixed}}@media screen and (min-width:60em){.swagger-ui .static-l{position:static}.swagger-ui .relative-l{position:relative}.swagger-ui .absolute-l{position:absolute}.swagger-ui .fixed-l{position:fixed}}.swagger-ui .o-100{opacity:1}.swagger-ui .o-90{opacity:.9}.swagger-ui .o-80{opacity:.8}.swagger-ui .o-70{opacity:.7}.swagger-ui .o-60{opacity:.6}.swagger-ui .o-50{opacity:.5}.swagger-ui .o-40{opacity:.4}.swagger-ui .o-30{opacity:.3}.swagger-ui .o-20{opacity:.2}.swagger-ui .o-10{opacity:.1}.swagger-ui .o-05{opacity:.05}.swagger-ui .o-025{opacity:.025}.swagger-ui .o-0{opacity:0}.swagger-ui .rotate-45{transform:rotate(45deg)}.swagger-ui .rotate-90{transform:rotate(90deg)}.swagger-ui .rotate-135{transform:rotate(135deg)}.swagger-ui .rotate-180{transform:rotate(180deg)}.swagger-ui .rotate-225{transform:rotate(225deg)}.swagger-ui .rotate-270{transform:rotate(270deg)}.swagger-ui .rotate-315{transform:rotate(315deg)}@media screen and (min-width:30em){.swagger-ui .rotate-45-ns{transform:rotate(45deg)}.swagger-ui .rotate-90-ns{transform:rotate(90deg)}.swagger-ui .rotate-135-ns{transform:rotate(135deg)}.swagger-ui .rotate-180-ns{transform:rotate(180deg)}.swagger-ui .rotate-225-ns{transform:rotate(225deg)}.swagger-ui .rotate-270-ns{transform:rotate(270deg)}.swagger-ui .rotate-315-ns{transform:rotate(315deg)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .rotate-45-m{transform:rotate(45deg)}.swagger-ui .rotate-90-m{transform:rotate(90deg)}.swagger-ui .rotate-135-m{transform:rotate(135deg)}.swagger-ui .rotate-180-m{transform:rotate(180deg)}.swagger-ui .rotate-225-m{transform:rotate(225deg)}.swagger-ui .rotate-270-m{transform:rotate(270deg)}.swagger-ui .rotate-315-m{transform:rotate(315deg)}}@media screen and (min-width:60em){.swagger-ui .rotate-45-l{transform:rotate(45deg)}.swagger-ui .rotate-90-l{transform:rotate(90deg)}.swagger-ui .rotate-135-l{transform:rotate(135deg)}.swagger-ui .rotate-180-l{transform:rotate(180deg)}.swagger-ui .rotate-225-l{transform:rotate(225deg)}.swagger-ui .rotate-270-l{transform:rotate(270deg)}.swagger-ui .rotate-315-l{transform:rotate(315deg)}}.swagger-ui .black-90{color:rgba(0,0,0,.9)}.swagger-ui .black-80{color:rgba(0,0,0,.8)}.swagger-ui .black-70{color:rgba(0,0,0,.7)}.swagger-ui .black-60{color:rgba(0,0,0,.6)}.swagger-ui .black-50{color:rgba(0,0,0,.5)}.swagger-ui .black-40{color:rgba(0,0,0,.4)}.swagger-ui .black-30{color:rgba(0,0,0,.3)}.swagger-ui .black-20{color:rgba(0,0,0,.2)}.swagger-ui .black-10{color:rgba(0,0,0,.1)}.swagger-ui .black-05{color:rgba(0,0,0,.05)}.swagger-ui .white-90{color:hsla(0,0%,100%,.9)}.swagger-ui .white-80{color:hsla(0,0%,100%,.8)}.swagger-ui .white-70{color:hsla(0,0%,100%,.7)}.swagger-ui .white-60{color:hsla(0,0%,100%,.6)}.swagger-ui .white-50{color:hsla(0,0%,100%,.5)}.swagger-ui .white-40{color:hsla(0,0%,100%,.4)}.swagger-ui .white-30{color:hsla(0,0%,100%,.3)}.swagger-ui .white-20{color:hsla(0,0%,100%,.2)}.swagger-ui .white-10{color:hsla(0,0%,100%,.1)}.swagger-ui .black{color:#000}.swagger-ui .near-black{color:#111}.swagger-ui .dark-gray{color:#333}.swagger-ui .mid-gray{color:#555}.swagger-ui .gray{color:#777}.swagger-ui .silver{color:#999}.swagger-ui .light-silver{color:#aaa}.swagger-ui .moon-gray{color:#ccc}.swagger-ui .light-gray{color:#eee}.swagger-ui .near-white{color:#f4f4f4}.swagger-ui .white{color:#fff}.swagger-ui .dark-red{color:#e7040f}.swagger-ui .red{color:#ff4136}.swagger-ui .light-red{color:#ff725c}.swagger-ui .orange{color:#ff6300}.swagger-ui .gold{color:#ffb700}.swagger-ui .yellow{color:gold}.swagger-ui .light-yellow{color:#fbf1a9}.swagger-ui .purple{color:#5e2ca5}.swagger-ui .light-purple{color:#a463f2}.swagger-ui .dark-pink{color:#d5008f}.swagger-ui .hot-pink{color:#ff41b4}.swagger-ui .pink{color:#ff80cc}.swagger-ui .light-pink{color:#ffa3d7}.swagger-ui .dark-green{color:#137752}.swagger-ui .green{color:#19a974}.swagger-ui .light-green{color:#9eebcf}.swagger-ui .navy{color:#001b44}.swagger-ui .dark-blue{color:#00449e}.swagger-ui .blue{color:#357edd}.swagger-ui .light-blue{color:#96ccff}.swagger-ui .lightest-blue{color:#cdecff}.swagger-ui .washed-blue{color:#f6fffe}.swagger-ui .washed-green{color:#e8fdf5}.swagger-ui .washed-yellow{color:#fffceb}.swagger-ui .washed-red{color:#ffdfdf}.swagger-ui .color-inherit{color:inherit}.swagger-ui .bg-black-90{background-color:rgba(0,0,0,.9)}.swagger-ui .bg-black-80{background-color:rgba(0,0,0,.8)}.swagger-ui .bg-black-70{background-color:rgba(0,0,0,.7)}.swagger-ui .bg-black-60{background-color:rgba(0,0,0,.6)}.swagger-ui .bg-black-50{background-color:rgba(0,0,0,.5)}.swagger-ui .bg-black-40{background-color:rgba(0,0,0,.4)}.swagger-ui .bg-black-30{background-color:rgba(0,0,0,.3)}.swagger-ui .bg-black-20{background-color:rgba(0,0,0,.2)}.swagger-ui .bg-black-10{background-color:rgba(0,0,0,.1)}.swagger-ui .bg-black-05{background-color:rgba(0,0,0,.05)}.swagger-ui .bg-white-90{background-color:hsla(0,0%,100%,.9)}.swagger-ui .bg-white-80{background-color:hsla(0,0%,100%,.8)}.swagger-ui .bg-white-70{background-color:hsla(0,0%,100%,.7)}.swagger-ui .bg-white-60{background-color:hsla(0,0%,100%,.6)}.swagger-ui .bg-white-50{background-color:hsla(0,0%,100%,.5)}.swagger-ui .bg-white-40{background-color:hsla(0,0%,100%,.4)}.swagger-ui .bg-white-30{background-color:hsla(0,0%,100%,.3)}.swagger-ui .bg-white-20{background-color:hsla(0,0%,100%,.2)}.swagger-ui .bg-white-10{background-color:hsla(0,0%,100%,.1)}.swagger-ui .bg-black{background-color:#000}.swagger-ui .bg-near-black{background-color:#111}.swagger-ui .bg-dark-gray{background-color:#333}.swagger-ui .bg-mid-gray{background-color:#555}.swagger-ui .bg-gray{background-color:#777}.swagger-ui .bg-silver{background-color:#999}.swagger-ui .bg-light-silver{background-color:#aaa}.swagger-ui .bg-moon-gray{background-color:#ccc}.swagger-ui .bg-light-gray{background-color:#eee}.swagger-ui .bg-near-white{background-color:#f4f4f4}.swagger-ui .bg-white{background-color:#fff}.swagger-ui .bg-transparent{background-color:transparent}.swagger-ui .bg-dark-red{background-color:#e7040f}.swagger-ui .bg-red{background-color:#ff4136}.swagger-ui .bg-light-red{background-color:#ff725c}.swagger-ui .bg-orange{background-color:#ff6300}.swagger-ui .bg-gold{background-color:#ffb700}.swagger-ui .bg-yellow{background-color:gold}.swagger-ui .bg-light-yellow{background-color:#fbf1a9}.swagger-ui .bg-purple{background-color:#5e2ca5}.swagger-ui .bg-light-purple{background-color:#a463f2}.swagger-ui .bg-dark-pink{background-color:#d5008f}.swagger-ui .bg-hot-pink{background-color:#ff41b4}.swagger-ui .bg-pink{background-color:#ff80cc}.swagger-ui .bg-light-pink{background-color:#ffa3d7}.swagger-ui .bg-dark-green{background-color:#137752}.swagger-ui .bg-green{background-color:#19a974}.swagger-ui .bg-light-green{background-color:#9eebcf}.swagger-ui .bg-navy{background-color:#001b44}.swagger-ui .bg-dark-blue{background-color:#00449e}.swagger-ui .bg-blue{background-color:#357edd}.swagger-ui .bg-light-blue{background-color:#96ccff}.swagger-ui .bg-lightest-blue{background-color:#cdecff}.swagger-ui .bg-washed-blue{background-color:#f6fffe}.swagger-ui .bg-washed-green{background-color:#e8fdf5}.swagger-ui .bg-washed-yellow{background-color:#fffceb}.swagger-ui .bg-washed-red{background-color:#ffdfdf}.swagger-ui .bg-inherit{background-color:inherit}.swagger-ui .hover-black:focus,.swagger-ui .hover-black:hover{color:#000}.swagger-ui .hover-near-black:focus,.swagger-ui .hover-near-black:hover{color:#111}.swagger-ui .hover-dark-gray:focus,.swagger-ui .hover-dark-gray:hover{color:#333}.swagger-ui .hover-mid-gray:focus,.swagger-ui .hover-mid-gray:hover{color:#555}.swagger-ui .hover-gray:focus,.swagger-ui .hover-gray:hover{color:#777}.swagger-ui .hover-silver:focus,.swagger-ui .hover-silver:hover{color:#999}.swagger-ui .hover-light-silver:focus,.swagger-ui .hover-light-silver:hover{color:#aaa}.swagger-ui .hover-moon-gray:focus,.swagger-ui .hover-moon-gray:hover{color:#ccc}.swagger-ui .hover-light-gray:focus,.swagger-ui .hover-light-gray:hover{color:#eee}.swagger-ui .hover-near-white:focus,.swagger-ui .hover-near-white:hover{color:#f4f4f4}.swagger-ui .hover-white:focus,.swagger-ui .hover-white:hover{color:#fff}.swagger-ui .hover-black-90:focus,.swagger-ui .hover-black-90:hover{color:rgba(0,0,0,.9)}.swagger-ui .hover-black-80:focus,.swagger-ui .hover-black-80:hover{color:rgba(0,0,0,.8)}.swagger-ui .hover-black-70:focus,.swagger-ui .hover-black-70:hover{color:rgba(0,0,0,.7)}.swagger-ui .hover-black-60:focus,.swagger-ui .hover-black-60:hover{color:rgba(0,0,0,.6)}.swagger-ui .hover-black-50:focus,.swagger-ui .hover-black-50:hover{color:rgba(0,0,0,.5)}.swagger-ui .hover-black-40:focus,.swagger-ui .hover-black-40:hover{color:rgba(0,0,0,.4)}.swagger-ui .hover-black-30:focus,.swagger-ui .hover-black-30:hover{color:rgba(0,0,0,.3)}.swagger-ui .hover-black-20:focus,.swagger-ui .hover-black-20:hover{color:rgba(0,0,0,.2)}.swagger-ui .hover-black-10:focus,.swagger-ui .hover-black-10:hover{color:rgba(0,0,0,.1)}.swagger-ui .hover-white-90:focus,.swagger-ui .hover-white-90:hover{color:hsla(0,0%,100%,.9)}.swagger-ui .hover-white-80:focus,.swagger-ui .hover-white-80:hover{color:hsla(0,0%,100%,.8)}.swagger-ui .hover-white-70:focus,.swagger-ui .hover-white-70:hover{color:hsla(0,0%,100%,.7)}.swagger-ui .hover-white-60:focus,.swagger-ui .hover-white-60:hover{color:hsla(0,0%,100%,.6)}.swagger-ui .hover-white-50:focus,.swagger-ui .hover-white-50:hover{color:hsla(0,0%,100%,.5)}.swagger-ui .hover-white-40:focus,.swagger-ui .hover-white-40:hover{color:hsla(0,0%,100%,.4)}.swagger-ui .hover-white-30:focus,.swagger-ui .hover-white-30:hover{color:hsla(0,0%,100%,.3)}.swagger-ui .hover-white-20:focus,.swagger-ui .hover-white-20:hover{color:hsla(0,0%,100%,.2)}.swagger-ui .hover-white-10:focus,.swagger-ui .hover-white-10:hover{color:hsla(0,0%,100%,.1)}.swagger-ui .hover-inherit:focus,.swagger-ui .hover-inherit:hover{color:inherit}.swagger-ui .hover-bg-black:focus,.swagger-ui .hover-bg-black:hover{background-color:#000}.swagger-ui .hover-bg-near-black:focus,.swagger-ui .hover-bg-near-black:hover{background-color:#111}.swagger-ui .hover-bg-dark-gray:focus,.swagger-ui .hover-bg-dark-gray:hover{background-color:#333}.swagger-ui .hover-bg-mid-gray:focus,.swagger-ui .hover-bg-mid-gray:hover{background-color:#555}.swagger-ui .hover-bg-gray:focus,.swagger-ui .hover-bg-gray:hover{background-color:#777}.swagger-ui .hover-bg-silver:focus,.swagger-ui .hover-bg-silver:hover{background-color:#999}.swagger-ui .hover-bg-light-silver:focus,.swagger-ui .hover-bg-light-silver:hover{background-color:#aaa}.swagger-ui .hover-bg-moon-gray:focus,.swagger-ui .hover-bg-moon-gray:hover{background-color:#ccc}.swagger-ui .hover-bg-light-gray:focus,.swagger-ui .hover-bg-light-gray:hover{background-color:#eee}.swagger-ui .hover-bg-near-white:focus,.swagger-ui .hover-bg-near-white:hover{background-color:#f4f4f4}.swagger-ui .hover-bg-white:focus,.swagger-ui .hover-bg-white:hover{background-color:#fff}.swagger-ui .hover-bg-transparent:focus,.swagger-ui .hover-bg-transparent:hover{background-color:transparent}.swagger-ui .hover-bg-black-90:focus,.swagger-ui .hover-bg-black-90:hover{background-color:rgba(0,0,0,.9)}.swagger-ui .hover-bg-black-80:focus,.swagger-ui .hover-bg-black-80:hover{background-color:rgba(0,0,0,.8)}.swagger-ui .hover-bg-black-70:focus,.swagger-ui .hover-bg-black-70:hover{background-color:rgba(0,0,0,.7)}.swagger-ui .hover-bg-black-60:focus,.swagger-ui .hover-bg-black-60:hover{background-color:rgba(0,0,0,.6)}.swagger-ui .hover-bg-black-50:focus,.swagger-ui .hover-bg-black-50:hover{background-color:rgba(0,0,0,.5)}.swagger-ui .hover-bg-black-40:focus,.swagger-ui .hover-bg-black-40:hover{background-color:rgba(0,0,0,.4)}.swagger-ui .hover-bg-black-30:focus,.swagger-ui .hover-bg-black-30:hover{background-color:rgba(0,0,0,.3)}.swagger-ui .hover-bg-black-20:focus,.swagger-ui .hover-bg-black-20:hover{background-color:rgba(0,0,0,.2)}.swagger-ui .hover-bg-black-10:focus,.swagger-ui .hover-bg-black-10:hover{background-color:rgba(0,0,0,.1)}.swagger-ui .hover-bg-white-90:focus,.swagger-ui .hover-bg-white-90:hover{background-color:hsla(0,0%,100%,.9)}.swagger-ui .hover-bg-white-80:focus,.swagger-ui .hover-bg-white-80:hover{background-color:hsla(0,0%,100%,.8)}.swagger-ui .hover-bg-white-70:focus,.swagger-ui .hover-bg-white-70:hover{background-color:hsla(0,0%,100%,.7)}.swagger-ui .hover-bg-white-60:focus,.swagger-ui .hover-bg-white-60:hover{background-color:hsla(0,0%,100%,.6)}.swagger-ui .hover-bg-white-50:focus,.swagger-ui .hover-bg-white-50:hover{background-color:hsla(0,0%,100%,.5)}.swagger-ui .hover-bg-white-40:focus,.swagger-ui .hover-bg-white-40:hover{background-color:hsla(0,0%,100%,.4)}.swagger-ui .hover-bg-white-30:focus,.swagger-ui .hover-bg-white-30:hover{background-color:hsla(0,0%,100%,.3)}.swagger-ui .hover-bg-white-20:focus,.swagger-ui .hover-bg-white-20:hover{background-color:hsla(0,0%,100%,.2)}.swagger-ui .hover-bg-white-10:focus,.swagger-ui .hover-bg-white-10:hover{background-color:hsla(0,0%,100%,.1)}.swagger-ui .hover-dark-red:focus,.swagger-ui .hover-dark-red:hover{color:#e7040f}.swagger-ui .hover-red:focus,.swagger-ui .hover-red:hover{color:#ff4136}.swagger-ui .hover-light-red:focus,.swagger-ui .hover-light-red:hover{color:#ff725c}.swagger-ui .hover-orange:focus,.swagger-ui .hover-orange:hover{color:#ff6300}.swagger-ui .hover-gold:focus,.swagger-ui .hover-gold:hover{color:#ffb700}.swagger-ui .hover-yellow:focus,.swagger-ui .hover-yellow:hover{color:gold}.swagger-ui .hover-light-yellow:focus,.swagger-ui .hover-light-yellow:hover{color:#fbf1a9}.swagger-ui .hover-purple:focus,.swagger-ui .hover-purple:hover{color:#5e2ca5}.swagger-ui .hover-light-purple:focus,.swagger-ui .hover-light-purple:hover{color:#a463f2}.swagger-ui .hover-dark-pink:focus,.swagger-ui .hover-dark-pink:hover{color:#d5008f}.swagger-ui .hover-hot-pink:focus,.swagger-ui .hover-hot-pink:hover{color:#ff41b4}.swagger-ui .hover-pink:focus,.swagger-ui .hover-pink:hover{color:#ff80cc}.swagger-ui .hover-light-pink:focus,.swagger-ui .hover-light-pink:hover{color:#ffa3d7}.swagger-ui .hover-dark-green:focus,.swagger-ui .hover-dark-green:hover{color:#137752}.swagger-ui .hover-green:focus,.swagger-ui .hover-green:hover{color:#19a974}.swagger-ui .hover-light-green:focus,.swagger-ui .hover-light-green:hover{color:#9eebcf}.swagger-ui .hover-navy:focus,.swagger-ui .hover-navy:hover{color:#001b44}.swagger-ui .hover-dark-blue:focus,.swagger-ui .hover-dark-blue:hover{color:#00449e}.swagger-ui .hover-blue:focus,.swagger-ui .hover-blue:hover{color:#357edd}.swagger-ui .hover-light-blue:focus,.swagger-ui .hover-light-blue:hover{color:#96ccff}.swagger-ui .hover-lightest-blue:focus,.swagger-ui .hover-lightest-blue:hover{color:#cdecff}.swagger-ui .hover-washed-blue:focus,.swagger-ui .hover-washed-blue:hover{color:#f6fffe}.swagger-ui .hover-washed-green:focus,.swagger-ui .hover-washed-green:hover{color:#e8fdf5}.swagger-ui .hover-washed-yellow:focus,.swagger-ui .hover-washed-yellow:hover{color:#fffceb}.swagger-ui .hover-washed-red:focus,.swagger-ui .hover-washed-red:hover{color:#ffdfdf}.swagger-ui .hover-bg-dark-red:focus,.swagger-ui .hover-bg-dark-red:hover{background-color:#e7040f}.swagger-ui .hover-bg-red:focus,.swagger-ui .hover-bg-red:hover{background-color:#ff4136}.swagger-ui .hover-bg-light-red:focus,.swagger-ui .hover-bg-light-red:hover{background-color:#ff725c}.swagger-ui .hover-bg-orange:focus,.swagger-ui .hover-bg-orange:hover{background-color:#ff6300}.swagger-ui .hover-bg-gold:focus,.swagger-ui .hover-bg-gold:hover{background-color:#ffb700}.swagger-ui .hover-bg-yellow:focus,.swagger-ui .hover-bg-yellow:hover{background-color:gold}.swagger-ui .hover-bg-light-yellow:focus,.swagger-ui .hover-bg-light-yellow:hover{background-color:#fbf1a9}.swagger-ui .hover-bg-purple:focus,.swagger-ui .hover-bg-purple:hover{background-color:#5e2ca5}.swagger-ui .hover-bg-light-purple:focus,.swagger-ui .hover-bg-light-purple:hover{background-color:#a463f2}.swagger-ui .hover-bg-dark-pink:focus,.swagger-ui .hover-bg-dark-pink:hover{background-color:#d5008f}.swagger-ui .hover-bg-hot-pink:focus,.swagger-ui .hover-bg-hot-pink:hover{background-color:#ff41b4}.swagger-ui .hover-bg-pink:focus,.swagger-ui .hover-bg-pink:hover{background-color:#ff80cc}.swagger-ui .hover-bg-light-pink:focus,.swagger-ui .hover-bg-light-pink:hover{background-color:#ffa3d7}.swagger-ui .hover-bg-dark-green:focus,.swagger-ui .hover-bg-dark-green:hover{background-color:#137752}.swagger-ui .hover-bg-green:focus,.swagger-ui .hover-bg-green:hover{background-color:#19a974}.swagger-ui .hover-bg-light-green:focus,.swagger-ui .hover-bg-light-green:hover{background-color:#9eebcf}.swagger-ui .hover-bg-navy:focus,.swagger-ui .hover-bg-navy:hover{background-color:#001b44}.swagger-ui .hover-bg-dark-blue:focus,.swagger-ui .hover-bg-dark-blue:hover{background-color:#00449e}.swagger-ui .hover-bg-blue:focus,.swagger-ui .hover-bg-blue:hover{background-color:#357edd}.swagger-ui .hover-bg-light-blue:focus,.swagger-ui .hover-bg-light-blue:hover{background-color:#96ccff}.swagger-ui .hover-bg-lightest-blue:focus,.swagger-ui .hover-bg-lightest-blue:hover{background-color:#cdecff}.swagger-ui .hover-bg-washed-blue:focus,.swagger-ui .hover-bg-washed-blue:hover{background-color:#f6fffe}.swagger-ui .hover-bg-washed-green:focus,.swagger-ui .hover-bg-washed-green:hover{background-color:#e8fdf5}.swagger-ui .hover-bg-washed-yellow:focus,.swagger-ui .hover-bg-washed-yellow:hover{background-color:#fffceb}.swagger-ui .hover-bg-washed-red:focus,.swagger-ui .hover-bg-washed-red:hover{background-color:#ffdfdf}.swagger-ui .hover-bg-inherit:focus,.swagger-ui .hover-bg-inherit:hover{background-color:inherit}.swagger-ui .pa0{padding:0}.swagger-ui .pa1{padding:.25rem}.swagger-ui .pa2{padding:.5rem}.swagger-ui .pa3{padding:1rem}.swagger-ui .pa4{padding:2rem}.swagger-ui .pa5{padding:4rem}.swagger-ui .pa6{padding:8rem}.swagger-ui .pa7{padding:16rem}.swagger-ui .pl0{padding-left:0}.swagger-ui .pl1{padding-left:.25rem}.swagger-ui .pl2{padding-left:.5rem}.swagger-ui .pl3{padding-left:1rem}.swagger-ui .pl4{padding-left:2rem}.swagger-ui .pl5{padding-left:4rem}.swagger-ui .pl6{padding-left:8rem}.swagger-ui .pl7{padding-left:16rem}.swagger-ui .pr0{padding-right:0}.swagger-ui .pr1{padding-right:.25rem}.swagger-ui .pr2{padding-right:.5rem}.swagger-ui .pr3{padding-right:1rem}.swagger-ui .pr4{padding-right:2rem}.swagger-ui .pr5{padding-right:4rem}.swagger-ui .pr6{padding-right:8rem}.swagger-ui .pr7{padding-right:16rem}.swagger-ui .pb0{padding-bottom:0}.swagger-ui .pb1{padding-bottom:.25rem}.swagger-ui .pb2{padding-bottom:.5rem}.swagger-ui .pb3{padding-bottom:1rem}.swagger-ui .pb4{padding-bottom:2rem}.swagger-ui .pb5{padding-bottom:4rem}.swagger-ui .pb6{padding-bottom:8rem}.swagger-ui .pb7{padding-bottom:16rem}.swagger-ui .pt0{padding-top:0}.swagger-ui .pt1{padding-top:.25rem}.swagger-ui .pt2{padding-top:.5rem}.swagger-ui .pt3{padding-top:1rem}.swagger-ui .pt4{padding-top:2rem}.swagger-ui .pt5{padding-top:4rem}.swagger-ui .pt6{padding-top:8rem}.swagger-ui .pt7{padding-top:16rem}.swagger-ui .pv0{padding-bottom:0;padding-top:0}.swagger-ui .pv1{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0{padding-left:0;padding-right:0}.swagger-ui .ph1{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0{margin:0}.swagger-ui .ma1{margin:.25rem}.swagger-ui .ma2{margin:.5rem}.swagger-ui .ma3{margin:1rem}.swagger-ui .ma4{margin:2rem}.swagger-ui .ma5{margin:4rem}.swagger-ui .ma6{margin:8rem}.swagger-ui .ma7{margin:16rem}.swagger-ui .ml0{margin-left:0}.swagger-ui .ml1{margin-left:.25rem}.swagger-ui .ml2{margin-left:.5rem}.swagger-ui .ml3{margin-left:1rem}.swagger-ui .ml4{margin-left:2rem}.swagger-ui .ml5{margin-left:4rem}.swagger-ui .ml6{margin-left:8rem}.swagger-ui .ml7{margin-left:16rem}.swagger-ui .mr0{margin-right:0}.swagger-ui .mr1{margin-right:.25rem}.swagger-ui .mr2{margin-right:.5rem}.swagger-ui .mr3{margin-right:1rem}.swagger-ui .mr4{margin-right:2rem}.swagger-ui .mr5{margin-right:4rem}.swagger-ui .mr6{margin-right:8rem}.swagger-ui .mr7{margin-right:16rem}.swagger-ui .mb0{margin-bottom:0}.swagger-ui .mb1{margin-bottom:.25rem}.swagger-ui .mb2{margin-bottom:.5rem}.swagger-ui .mb3{margin-bottom:1rem}.swagger-ui .mb4{margin-bottom:2rem}.swagger-ui .mb5{margin-bottom:4rem}.swagger-ui .mb6{margin-bottom:8rem}.swagger-ui .mb7{margin-bottom:16rem}.swagger-ui .mt0{margin-top:0}.swagger-ui .mt1{margin-top:.25rem}.swagger-ui .mt2{margin-top:.5rem}.swagger-ui .mt3{margin-top:1rem}.swagger-ui .mt4{margin-top:2rem}.swagger-ui .mt5{margin-top:4rem}.swagger-ui .mt6{margin-top:8rem}.swagger-ui .mt7{margin-top:16rem}.swagger-ui .mv0{margin-bottom:0;margin-top:0}.swagger-ui .mv1{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0{margin-left:0;margin-right:0}.swagger-ui .mh1{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7{margin-left:16rem;margin-right:16rem}@media screen and (min-width:30em){.swagger-ui .pa0-ns{padding:0}.swagger-ui .pa1-ns{padding:.25rem}.swagger-ui .pa2-ns{padding:.5rem}.swagger-ui .pa3-ns{padding:1rem}.swagger-ui .pa4-ns{padding:2rem}.swagger-ui .pa5-ns{padding:4rem}.swagger-ui .pa6-ns{padding:8rem}.swagger-ui .pa7-ns{padding:16rem}.swagger-ui .pl0-ns{padding-left:0}.swagger-ui .pl1-ns{padding-left:.25rem}.swagger-ui .pl2-ns{padding-left:.5rem}.swagger-ui .pl3-ns{padding-left:1rem}.swagger-ui .pl4-ns{padding-left:2rem}.swagger-ui .pl5-ns{padding-left:4rem}.swagger-ui .pl6-ns{padding-left:8rem}.swagger-ui .pl7-ns{padding-left:16rem}.swagger-ui .pr0-ns{padding-right:0}.swagger-ui .pr1-ns{padding-right:.25rem}.swagger-ui .pr2-ns{padding-right:.5rem}.swagger-ui .pr3-ns{padding-right:1rem}.swagger-ui .pr4-ns{padding-right:2rem}.swagger-ui .pr5-ns{padding-right:4rem}.swagger-ui .pr6-ns{padding-right:8rem}.swagger-ui .pr7-ns{padding-right:16rem}.swagger-ui .pb0-ns{padding-bottom:0}.swagger-ui .pb1-ns{padding-bottom:.25rem}.swagger-ui .pb2-ns{padding-bottom:.5rem}.swagger-ui .pb3-ns{padding-bottom:1rem}.swagger-ui .pb4-ns{padding-bottom:2rem}.swagger-ui .pb5-ns{padding-bottom:4rem}.swagger-ui .pb6-ns{padding-bottom:8rem}.swagger-ui .pb7-ns{padding-bottom:16rem}.swagger-ui .pt0-ns{padding-top:0}.swagger-ui .pt1-ns{padding-top:.25rem}.swagger-ui .pt2-ns{padding-top:.5rem}.swagger-ui .pt3-ns{padding-top:1rem}.swagger-ui .pt4-ns{padding-top:2rem}.swagger-ui .pt5-ns{padding-top:4rem}.swagger-ui .pt6-ns{padding-top:8rem}.swagger-ui .pt7-ns{padding-top:16rem}.swagger-ui .pv0-ns{padding-bottom:0;padding-top:0}.swagger-ui .pv1-ns{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-ns{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-ns{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-ns{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-ns{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-ns{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-ns{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-ns{padding-left:0;padding-right:0}.swagger-ui .ph1-ns{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-ns{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-ns{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-ns{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-ns{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-ns{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-ns{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-ns{margin:0}.swagger-ui .ma1-ns{margin:.25rem}.swagger-ui .ma2-ns{margin:.5rem}.swagger-ui .ma3-ns{margin:1rem}.swagger-ui .ma4-ns{margin:2rem}.swagger-ui .ma5-ns{margin:4rem}.swagger-ui .ma6-ns{margin:8rem}.swagger-ui .ma7-ns{margin:16rem}.swagger-ui .ml0-ns{margin-left:0}.swagger-ui .ml1-ns{margin-left:.25rem}.swagger-ui .ml2-ns{margin-left:.5rem}.swagger-ui .ml3-ns{margin-left:1rem}.swagger-ui .ml4-ns{margin-left:2rem}.swagger-ui .ml5-ns{margin-left:4rem}.swagger-ui .ml6-ns{margin-left:8rem}.swagger-ui .ml7-ns{margin-left:16rem}.swagger-ui .mr0-ns{margin-right:0}.swagger-ui .mr1-ns{margin-right:.25rem}.swagger-ui .mr2-ns{margin-right:.5rem}.swagger-ui .mr3-ns{margin-right:1rem}.swagger-ui .mr4-ns{margin-right:2rem}.swagger-ui .mr5-ns{margin-right:4rem}.swagger-ui .mr6-ns{margin-right:8rem}.swagger-ui .mr7-ns{margin-right:16rem}.swagger-ui .mb0-ns{margin-bottom:0}.swagger-ui .mb1-ns{margin-bottom:.25rem}.swagger-ui .mb2-ns{margin-bottom:.5rem}.swagger-ui .mb3-ns{margin-bottom:1rem}.swagger-ui .mb4-ns{margin-bottom:2rem}.swagger-ui .mb5-ns{margin-bottom:4rem}.swagger-ui .mb6-ns{margin-bottom:8rem}.swagger-ui .mb7-ns{margin-bottom:16rem}.swagger-ui .mt0-ns{margin-top:0}.swagger-ui .mt1-ns{margin-top:.25rem}.swagger-ui .mt2-ns{margin-top:.5rem}.swagger-ui .mt3-ns{margin-top:1rem}.swagger-ui .mt4-ns{margin-top:2rem}.swagger-ui .mt5-ns{margin-top:4rem}.swagger-ui .mt6-ns{margin-top:8rem}.swagger-ui .mt7-ns{margin-top:16rem}.swagger-ui .mv0-ns{margin-bottom:0;margin-top:0}.swagger-ui .mv1-ns{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-ns{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-ns{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-ns{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-ns{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-ns{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-ns{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-ns{margin-left:0;margin-right:0}.swagger-ui .mh1-ns{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-ns{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-ns{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-ns{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-ns{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-ns{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-ns{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .pa0-m{padding:0}.swagger-ui .pa1-m{padding:.25rem}.swagger-ui .pa2-m{padding:.5rem}.swagger-ui .pa3-m{padding:1rem}.swagger-ui .pa4-m{padding:2rem}.swagger-ui .pa5-m{padding:4rem}.swagger-ui .pa6-m{padding:8rem}.swagger-ui .pa7-m{padding:16rem}.swagger-ui .pl0-m{padding-left:0}.swagger-ui .pl1-m{padding-left:.25rem}.swagger-ui .pl2-m{padding-left:.5rem}.swagger-ui .pl3-m{padding-left:1rem}.swagger-ui .pl4-m{padding-left:2rem}.swagger-ui .pl5-m{padding-left:4rem}.swagger-ui .pl6-m{padding-left:8rem}.swagger-ui .pl7-m{padding-left:16rem}.swagger-ui .pr0-m{padding-right:0}.swagger-ui .pr1-m{padding-right:.25rem}.swagger-ui .pr2-m{padding-right:.5rem}.swagger-ui .pr3-m{padding-right:1rem}.swagger-ui .pr4-m{padding-right:2rem}.swagger-ui .pr5-m{padding-right:4rem}.swagger-ui .pr6-m{padding-right:8rem}.swagger-ui .pr7-m{padding-right:16rem}.swagger-ui .pb0-m{padding-bottom:0}.swagger-ui .pb1-m{padding-bottom:.25rem}.swagger-ui .pb2-m{padding-bottom:.5rem}.swagger-ui .pb3-m{padding-bottom:1rem}.swagger-ui .pb4-m{padding-bottom:2rem}.swagger-ui .pb5-m{padding-bottom:4rem}.swagger-ui .pb6-m{padding-bottom:8rem}.swagger-ui .pb7-m{padding-bottom:16rem}.swagger-ui .pt0-m{padding-top:0}.swagger-ui .pt1-m{padding-top:.25rem}.swagger-ui .pt2-m{padding-top:.5rem}.swagger-ui .pt3-m{padding-top:1rem}.swagger-ui .pt4-m{padding-top:2rem}.swagger-ui .pt5-m{padding-top:4rem}.swagger-ui .pt6-m{padding-top:8rem}.swagger-ui .pt7-m{padding-top:16rem}.swagger-ui .pv0-m{padding-bottom:0;padding-top:0}.swagger-ui .pv1-m{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-m{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-m{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-m{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-m{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-m{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-m{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-m{padding-left:0;padding-right:0}.swagger-ui .ph1-m{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-m{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-m{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-m{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-m{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-m{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-m{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-m{margin:0}.swagger-ui .ma1-m{margin:.25rem}.swagger-ui .ma2-m{margin:.5rem}.swagger-ui .ma3-m{margin:1rem}.swagger-ui .ma4-m{margin:2rem}.swagger-ui .ma5-m{margin:4rem}.swagger-ui .ma6-m{margin:8rem}.swagger-ui .ma7-m{margin:16rem}.swagger-ui .ml0-m{margin-left:0}.swagger-ui .ml1-m{margin-left:.25rem}.swagger-ui .ml2-m{margin-left:.5rem}.swagger-ui .ml3-m{margin-left:1rem}.swagger-ui .ml4-m{margin-left:2rem}.swagger-ui .ml5-m{margin-left:4rem}.swagger-ui .ml6-m{margin-left:8rem}.swagger-ui .ml7-m{margin-left:16rem}.swagger-ui .mr0-m{margin-right:0}.swagger-ui .mr1-m{margin-right:.25rem}.swagger-ui .mr2-m{margin-right:.5rem}.swagger-ui .mr3-m{margin-right:1rem}.swagger-ui .mr4-m{margin-right:2rem}.swagger-ui .mr5-m{margin-right:4rem}.swagger-ui .mr6-m{margin-right:8rem}.swagger-ui .mr7-m{margin-right:16rem}.swagger-ui .mb0-m{margin-bottom:0}.swagger-ui .mb1-m{margin-bottom:.25rem}.swagger-ui .mb2-m{margin-bottom:.5rem}.swagger-ui .mb3-m{margin-bottom:1rem}.swagger-ui .mb4-m{margin-bottom:2rem}.swagger-ui .mb5-m{margin-bottom:4rem}.swagger-ui .mb6-m{margin-bottom:8rem}.swagger-ui .mb7-m{margin-bottom:16rem}.swagger-ui .mt0-m{margin-top:0}.swagger-ui .mt1-m{margin-top:.25rem}.swagger-ui .mt2-m{margin-top:.5rem}.swagger-ui .mt3-m{margin-top:1rem}.swagger-ui .mt4-m{margin-top:2rem}.swagger-ui .mt5-m{margin-top:4rem}.swagger-ui .mt6-m{margin-top:8rem}.swagger-ui .mt7-m{margin-top:16rem}.swagger-ui .mv0-m{margin-bottom:0;margin-top:0}.swagger-ui .mv1-m{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-m{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-m{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-m{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-m{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-m{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-m{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-m{margin-left:0;margin-right:0}.swagger-ui .mh1-m{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-m{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-m{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-m{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-m{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-m{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-m{margin-left:16rem;margin-right:16rem}}@media screen and (min-width:60em){.swagger-ui .pa0-l{padding:0}.swagger-ui .pa1-l{padding:.25rem}.swagger-ui .pa2-l{padding:.5rem}.swagger-ui .pa3-l{padding:1rem}.swagger-ui .pa4-l{padding:2rem}.swagger-ui .pa5-l{padding:4rem}.swagger-ui .pa6-l{padding:8rem}.swagger-ui .pa7-l{padding:16rem}.swagger-ui .pl0-l{padding-left:0}.swagger-ui .pl1-l{padding-left:.25rem}.swagger-ui .pl2-l{padding-left:.5rem}.swagger-ui .pl3-l{padding-left:1rem}.swagger-ui .pl4-l{padding-left:2rem}.swagger-ui .pl5-l{padding-left:4rem}.swagger-ui .pl6-l{padding-left:8rem}.swagger-ui .pl7-l{padding-left:16rem}.swagger-ui .pr0-l{padding-right:0}.swagger-ui .pr1-l{padding-right:.25rem}.swagger-ui .pr2-l{padding-right:.5rem}.swagger-ui .pr3-l{padding-right:1rem}.swagger-ui .pr4-l{padding-right:2rem}.swagger-ui .pr5-l{padding-right:4rem}.swagger-ui .pr6-l{padding-right:8rem}.swagger-ui .pr7-l{padding-right:16rem}.swagger-ui .pb0-l{padding-bottom:0}.swagger-ui .pb1-l{padding-bottom:.25rem}.swagger-ui .pb2-l{padding-bottom:.5rem}.swagger-ui .pb3-l{padding-bottom:1rem}.swagger-ui .pb4-l{padding-bottom:2rem}.swagger-ui .pb5-l{padding-bottom:4rem}.swagger-ui .pb6-l{padding-bottom:8rem}.swagger-ui .pb7-l{padding-bottom:16rem}.swagger-ui .pt0-l{padding-top:0}.swagger-ui .pt1-l{padding-top:.25rem}.swagger-ui .pt2-l{padding-top:.5rem}.swagger-ui .pt3-l{padding-top:1rem}.swagger-ui .pt4-l{padding-top:2rem}.swagger-ui .pt5-l{padding-top:4rem}.swagger-ui .pt6-l{padding-top:8rem}.swagger-ui .pt7-l{padding-top:16rem}.swagger-ui .pv0-l{padding-bottom:0;padding-top:0}.swagger-ui .pv1-l{padding-bottom:.25rem;padding-top:.25rem}.swagger-ui .pv2-l{padding-bottom:.5rem;padding-top:.5rem}.swagger-ui .pv3-l{padding-bottom:1rem;padding-top:1rem}.swagger-ui .pv4-l{padding-bottom:2rem;padding-top:2rem}.swagger-ui .pv5-l{padding-bottom:4rem;padding-top:4rem}.swagger-ui .pv6-l{padding-bottom:8rem;padding-top:8rem}.swagger-ui .pv7-l{padding-bottom:16rem;padding-top:16rem}.swagger-ui .ph0-l{padding-left:0;padding-right:0}.swagger-ui .ph1-l{padding-left:.25rem;padding-right:.25rem}.swagger-ui .ph2-l{padding-left:.5rem;padding-right:.5rem}.swagger-ui .ph3-l{padding-left:1rem;padding-right:1rem}.swagger-ui .ph4-l{padding-left:2rem;padding-right:2rem}.swagger-ui .ph5-l{padding-left:4rem;padding-right:4rem}.swagger-ui .ph6-l{padding-left:8rem;padding-right:8rem}.swagger-ui .ph7-l{padding-left:16rem;padding-right:16rem}.swagger-ui .ma0-l{margin:0}.swagger-ui .ma1-l{margin:.25rem}.swagger-ui .ma2-l{margin:.5rem}.swagger-ui .ma3-l{margin:1rem}.swagger-ui .ma4-l{margin:2rem}.swagger-ui .ma5-l{margin:4rem}.swagger-ui .ma6-l{margin:8rem}.swagger-ui .ma7-l{margin:16rem}.swagger-ui .ml0-l{margin-left:0}.swagger-ui .ml1-l{margin-left:.25rem}.swagger-ui .ml2-l{margin-left:.5rem}.swagger-ui .ml3-l{margin-left:1rem}.swagger-ui .ml4-l{margin-left:2rem}.swagger-ui .ml5-l{margin-left:4rem}.swagger-ui .ml6-l{margin-left:8rem}.swagger-ui .ml7-l{margin-left:16rem}.swagger-ui .mr0-l{margin-right:0}.swagger-ui .mr1-l{margin-right:.25rem}.swagger-ui .mr2-l{margin-right:.5rem}.swagger-ui .mr3-l{margin-right:1rem}.swagger-ui .mr4-l{margin-right:2rem}.swagger-ui .mr5-l{margin-right:4rem}.swagger-ui .mr6-l{margin-right:8rem}.swagger-ui .mr7-l{margin-right:16rem}.swagger-ui .mb0-l{margin-bottom:0}.swagger-ui .mb1-l{margin-bottom:.25rem}.swagger-ui .mb2-l{margin-bottom:.5rem}.swagger-ui .mb3-l{margin-bottom:1rem}.swagger-ui .mb4-l{margin-bottom:2rem}.swagger-ui .mb5-l{margin-bottom:4rem}.swagger-ui .mb6-l{margin-bottom:8rem}.swagger-ui .mb7-l{margin-bottom:16rem}.swagger-ui .mt0-l{margin-top:0}.swagger-ui .mt1-l{margin-top:.25rem}.swagger-ui .mt2-l{margin-top:.5rem}.swagger-ui .mt3-l{margin-top:1rem}.swagger-ui .mt4-l{margin-top:2rem}.swagger-ui .mt5-l{margin-top:4rem}.swagger-ui .mt6-l{margin-top:8rem}.swagger-ui .mt7-l{margin-top:16rem}.swagger-ui .mv0-l{margin-bottom:0;margin-top:0}.swagger-ui .mv1-l{margin-bottom:.25rem;margin-top:.25rem}.swagger-ui .mv2-l{margin-bottom:.5rem;margin-top:.5rem}.swagger-ui .mv3-l{margin-bottom:1rem;margin-top:1rem}.swagger-ui .mv4-l{margin-bottom:2rem;margin-top:2rem}.swagger-ui .mv5-l{margin-bottom:4rem;margin-top:4rem}.swagger-ui .mv6-l{margin-bottom:8rem;margin-top:8rem}.swagger-ui .mv7-l{margin-bottom:16rem;margin-top:16rem}.swagger-ui .mh0-l{margin-left:0;margin-right:0}.swagger-ui .mh1-l{margin-left:.25rem;margin-right:.25rem}.swagger-ui .mh2-l{margin-left:.5rem;margin-right:.5rem}.swagger-ui .mh3-l{margin-left:1rem;margin-right:1rem}.swagger-ui .mh4-l{margin-left:2rem;margin-right:2rem}.swagger-ui .mh5-l{margin-left:4rem;margin-right:4rem}.swagger-ui .mh6-l{margin-left:8rem;margin-right:8rem}.swagger-ui .mh7-l{margin-left:16rem;margin-right:16rem}}.swagger-ui .na1{margin:-.25rem}.swagger-ui .na2{margin:-.5rem}.swagger-ui .na3{margin:-1rem}.swagger-ui .na4{margin:-2rem}.swagger-ui .na5{margin:-4rem}.swagger-ui .na6{margin:-8rem}.swagger-ui .na7{margin:-16rem}.swagger-ui .nl1{margin-left:-.25rem}.swagger-ui .nl2{margin-left:-.5rem}.swagger-ui .nl3{margin-left:-1rem}.swagger-ui .nl4{margin-left:-2rem}.swagger-ui .nl5{margin-left:-4rem}.swagger-ui .nl6{margin-left:-8rem}.swagger-ui .nl7{margin-left:-16rem}.swagger-ui .nr1{margin-right:-.25rem}.swagger-ui .nr2{margin-right:-.5rem}.swagger-ui .nr3{margin-right:-1rem}.swagger-ui .nr4{margin-right:-2rem}.swagger-ui .nr5{margin-right:-4rem}.swagger-ui .nr6{margin-right:-8rem}.swagger-ui .nr7{margin-right:-16rem}.swagger-ui .nb1{margin-bottom:-.25rem}.swagger-ui .nb2{margin-bottom:-.5rem}.swagger-ui .nb3{margin-bottom:-1rem}.swagger-ui .nb4{margin-bottom:-2rem}.swagger-ui .nb5{margin-bottom:-4rem}.swagger-ui .nb6{margin-bottom:-8rem}.swagger-ui .nb7{margin-bottom:-16rem}.swagger-ui .nt1{margin-top:-.25rem}.swagger-ui .nt2{margin-top:-.5rem}.swagger-ui .nt3{margin-top:-1rem}.swagger-ui .nt4{margin-top:-2rem}.swagger-ui .nt5{margin-top:-4rem}.swagger-ui .nt6{margin-top:-8rem}.swagger-ui .nt7{margin-top:-16rem}@media screen and (min-width:30em){.swagger-ui .na1-ns{margin:-.25rem}.swagger-ui .na2-ns{margin:-.5rem}.swagger-ui .na3-ns{margin:-1rem}.swagger-ui .na4-ns{margin:-2rem}.swagger-ui .na5-ns{margin:-4rem}.swagger-ui .na6-ns{margin:-8rem}.swagger-ui .na7-ns{margin:-16rem}.swagger-ui .nl1-ns{margin-left:-.25rem}.swagger-ui .nl2-ns{margin-left:-.5rem}.swagger-ui .nl3-ns{margin-left:-1rem}.swagger-ui .nl4-ns{margin-left:-2rem}.swagger-ui .nl5-ns{margin-left:-4rem}.swagger-ui .nl6-ns{margin-left:-8rem}.swagger-ui .nl7-ns{margin-left:-16rem}.swagger-ui .nr1-ns{margin-right:-.25rem}.swagger-ui .nr2-ns{margin-right:-.5rem}.swagger-ui .nr3-ns{margin-right:-1rem}.swagger-ui .nr4-ns{margin-right:-2rem}.swagger-ui .nr5-ns{margin-right:-4rem}.swagger-ui .nr6-ns{margin-right:-8rem}.swagger-ui .nr7-ns{margin-right:-16rem}.swagger-ui .nb1-ns{margin-bottom:-.25rem}.swagger-ui .nb2-ns{margin-bottom:-.5rem}.swagger-ui .nb3-ns{margin-bottom:-1rem}.swagger-ui .nb4-ns{margin-bottom:-2rem}.swagger-ui .nb5-ns{margin-bottom:-4rem}.swagger-ui .nb6-ns{margin-bottom:-8rem}.swagger-ui .nb7-ns{margin-bottom:-16rem}.swagger-ui .nt1-ns{margin-top:-.25rem}.swagger-ui .nt2-ns{margin-top:-.5rem}.swagger-ui .nt3-ns{margin-top:-1rem}.swagger-ui .nt4-ns{margin-top:-2rem}.swagger-ui .nt5-ns{margin-top:-4rem}.swagger-ui .nt6-ns{margin-top:-8rem}.swagger-ui .nt7-ns{margin-top:-16rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .na1-m{margin:-.25rem}.swagger-ui .na2-m{margin:-.5rem}.swagger-ui .na3-m{margin:-1rem}.swagger-ui .na4-m{margin:-2rem}.swagger-ui .na5-m{margin:-4rem}.swagger-ui .na6-m{margin:-8rem}.swagger-ui .na7-m{margin:-16rem}.swagger-ui .nl1-m{margin-left:-.25rem}.swagger-ui .nl2-m{margin-left:-.5rem}.swagger-ui .nl3-m{margin-left:-1rem}.swagger-ui .nl4-m{margin-left:-2rem}.swagger-ui .nl5-m{margin-left:-4rem}.swagger-ui .nl6-m{margin-left:-8rem}.swagger-ui .nl7-m{margin-left:-16rem}.swagger-ui .nr1-m{margin-right:-.25rem}.swagger-ui .nr2-m{margin-right:-.5rem}.swagger-ui .nr3-m{margin-right:-1rem}.swagger-ui .nr4-m{margin-right:-2rem}.swagger-ui .nr5-m{margin-right:-4rem}.swagger-ui .nr6-m{margin-right:-8rem}.swagger-ui .nr7-m{margin-right:-16rem}.swagger-ui .nb1-m{margin-bottom:-.25rem}.swagger-ui .nb2-m{margin-bottom:-.5rem}.swagger-ui .nb3-m{margin-bottom:-1rem}.swagger-ui .nb4-m{margin-bottom:-2rem}.swagger-ui .nb5-m{margin-bottom:-4rem}.swagger-ui .nb6-m{margin-bottom:-8rem}.swagger-ui .nb7-m{margin-bottom:-16rem}.swagger-ui .nt1-m{margin-top:-.25rem}.swagger-ui .nt2-m{margin-top:-.5rem}.swagger-ui .nt3-m{margin-top:-1rem}.swagger-ui .nt4-m{margin-top:-2rem}.swagger-ui .nt5-m{margin-top:-4rem}.swagger-ui .nt6-m{margin-top:-8rem}.swagger-ui .nt7-m{margin-top:-16rem}}@media screen and (min-width:60em){.swagger-ui .na1-l{margin:-.25rem}.swagger-ui .na2-l{margin:-.5rem}.swagger-ui .na3-l{margin:-1rem}.swagger-ui .na4-l{margin:-2rem}.swagger-ui .na5-l{margin:-4rem}.swagger-ui .na6-l{margin:-8rem}.swagger-ui .na7-l{margin:-16rem}.swagger-ui .nl1-l{margin-left:-.25rem}.swagger-ui .nl2-l{margin-left:-.5rem}.swagger-ui .nl3-l{margin-left:-1rem}.swagger-ui .nl4-l{margin-left:-2rem}.swagger-ui .nl5-l{margin-left:-4rem}.swagger-ui .nl6-l{margin-left:-8rem}.swagger-ui .nl7-l{margin-left:-16rem}.swagger-ui .nr1-l{margin-right:-.25rem}.swagger-ui .nr2-l{margin-right:-.5rem}.swagger-ui .nr3-l{margin-right:-1rem}.swagger-ui .nr4-l{margin-right:-2rem}.swagger-ui .nr5-l{margin-right:-4rem}.swagger-ui .nr6-l{margin-right:-8rem}.swagger-ui .nr7-l{margin-right:-16rem}.swagger-ui .nb1-l{margin-bottom:-.25rem}.swagger-ui .nb2-l{margin-bottom:-.5rem}.swagger-ui .nb3-l{margin-bottom:-1rem}.swagger-ui .nb4-l{margin-bottom:-2rem}.swagger-ui .nb5-l{margin-bottom:-4rem}.swagger-ui .nb6-l{margin-bottom:-8rem}.swagger-ui .nb7-l{margin-bottom:-16rem}.swagger-ui .nt1-l{margin-top:-.25rem}.swagger-ui .nt2-l{margin-top:-.5rem}.swagger-ui .nt3-l{margin-top:-1rem}.swagger-ui .nt4-l{margin-top:-2rem}.swagger-ui .nt5-l{margin-top:-4rem}.swagger-ui .nt6-l{margin-top:-8rem}.swagger-ui .nt7-l{margin-top:-16rem}}.swagger-ui .collapse{border-collapse:collapse;border-spacing:0}.swagger-ui .striped--light-silver:nth-child(odd){background-color:#aaa}.swagger-ui .striped--moon-gray:nth-child(odd){background-color:#ccc}.swagger-ui .striped--light-gray:nth-child(odd){background-color:#eee}.swagger-ui .striped--near-white:nth-child(odd){background-color:#f4f4f4}.swagger-ui .stripe-light:nth-child(odd){background-color:hsla(0,0%,100%,.1)}.swagger-ui .stripe-dark:nth-child(odd){background-color:rgba(0,0,0,.1)}.swagger-ui .strike{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline{-webkit-text-decoration:none;text-decoration:none}@media screen and (min-width:30em){.swagger-ui .strike-ns{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-ns{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-ns{-webkit-text-decoration:none;text-decoration:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .strike-m{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-m{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-m{-webkit-text-decoration:none;text-decoration:none}}@media screen and (min-width:60em){.swagger-ui .strike-l{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .underline-l{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .no-underline-l{-webkit-text-decoration:none;text-decoration:none}}.swagger-ui .tl{text-align:left}.swagger-ui .tr{text-align:right}.swagger-ui .tc{text-align:center}.swagger-ui .tj{text-align:justify}@media screen and (min-width:30em){.swagger-ui .tl-ns{text-align:left}.swagger-ui .tr-ns{text-align:right}.swagger-ui .tc-ns{text-align:center}.swagger-ui .tj-ns{text-align:justify}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .tl-m{text-align:left}.swagger-ui .tr-m{text-align:right}.swagger-ui .tc-m{text-align:center}.swagger-ui .tj-m{text-align:justify}}@media screen and (min-width:60em){.swagger-ui .tl-l{text-align:left}.swagger-ui .tr-l{text-align:right}.swagger-ui .tc-l{text-align:center}.swagger-ui .tj-l{text-align:justify}}.swagger-ui .ttc{text-transform:capitalize}.swagger-ui .ttl{text-transform:lowercase}.swagger-ui .ttu{text-transform:uppercase}.swagger-ui .ttn{text-transform:none}@media screen and (min-width:30em){.swagger-ui .ttc-ns{text-transform:capitalize}.swagger-ui .ttl-ns{text-transform:lowercase}.swagger-ui .ttu-ns{text-transform:uppercase}.swagger-ui .ttn-ns{text-transform:none}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ttc-m{text-transform:capitalize}.swagger-ui .ttl-m{text-transform:lowercase}.swagger-ui .ttu-m{text-transform:uppercase}.swagger-ui .ttn-m{text-transform:none}}@media screen and (min-width:60em){.swagger-ui .ttc-l{text-transform:capitalize}.swagger-ui .ttl-l{text-transform:lowercase}.swagger-ui .ttu-l{text-transform:uppercase}.swagger-ui .ttn-l{text-transform:none}}.swagger-ui .f-6,.swagger-ui .f-headline{font-size:6rem}.swagger-ui .f-5,.swagger-ui .f-subheadline{font-size:5rem}.swagger-ui .f1{font-size:3rem}.swagger-ui .f2{font-size:2.25rem}.swagger-ui .f3{font-size:1.5rem}.swagger-ui .f4{font-size:1.25rem}.swagger-ui .f5{font-size:1rem}.swagger-ui .f6{font-size:.875rem}.swagger-ui .f7{font-size:.75rem}@media screen and (min-width:30em){.swagger-ui .f-6-ns,.swagger-ui .f-headline-ns{font-size:6rem}.swagger-ui .f-5-ns,.swagger-ui .f-subheadline-ns{font-size:5rem}.swagger-ui .f1-ns{font-size:3rem}.swagger-ui .f2-ns{font-size:2.25rem}.swagger-ui .f3-ns{font-size:1.5rem}.swagger-ui .f4-ns{font-size:1.25rem}.swagger-ui .f5-ns{font-size:1rem}.swagger-ui .f6-ns{font-size:.875rem}.swagger-ui .f7-ns{font-size:.75rem}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .f-6-m,.swagger-ui .f-headline-m{font-size:6rem}.swagger-ui .f-5-m,.swagger-ui .f-subheadline-m{font-size:5rem}.swagger-ui .f1-m{font-size:3rem}.swagger-ui .f2-m{font-size:2.25rem}.swagger-ui .f3-m{font-size:1.5rem}.swagger-ui .f4-m{font-size:1.25rem}.swagger-ui .f5-m{font-size:1rem}.swagger-ui .f6-m{font-size:.875rem}.swagger-ui .f7-m{font-size:.75rem}}@media screen and (min-width:60em){.swagger-ui .f-6-l,.swagger-ui .f-headline-l{font-size:6rem}.swagger-ui .f-5-l,.swagger-ui .f-subheadline-l{font-size:5rem}.swagger-ui .f1-l{font-size:3rem}.swagger-ui .f2-l{font-size:2.25rem}.swagger-ui .f3-l{font-size:1.5rem}.swagger-ui .f4-l{font-size:1.25rem}.swagger-ui .f5-l{font-size:1rem}.swagger-ui .f6-l{font-size:.875rem}.swagger-ui .f7-l{font-size:.75rem}}.swagger-ui .measure{max-width:30em}.swagger-ui .measure-wide{max-width:34em}.swagger-ui .measure-narrow{max-width:20em}.swagger-ui .indent{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps{font-feature-settings:\"smcp\";font-variant:small-caps}.swagger-ui .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media screen and (min-width:30em){.swagger-ui .measure-ns{max-width:30em}.swagger-ui .measure-wide-ns{max-width:34em}.swagger-ui .measure-narrow-ns{max-width:20em}.swagger-ui .indent-ns{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-ns{font-feature-settings:\"smcp\";font-variant:small-caps}.swagger-ui .truncate-ns{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .measure-m{max-width:30em}.swagger-ui .measure-wide-m{max-width:34em}.swagger-ui .measure-narrow-m{max-width:20em}.swagger-ui .indent-m{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-m{font-feature-settings:\"smcp\";font-variant:small-caps}.swagger-ui .truncate-m{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}@media screen and (min-width:60em){.swagger-ui .measure-l{max-width:30em}.swagger-ui .measure-wide-l{max-width:34em}.swagger-ui .measure-narrow-l{max-width:20em}.swagger-ui .indent-l{margin-bottom:0;margin-top:0;text-indent:1em}.swagger-ui .small-caps-l{font-feature-settings:\"smcp\";font-variant:small-caps}.swagger-ui .truncate-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.swagger-ui .overflow-container{overflow-y:scroll}.swagger-ui .center{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto{margin-right:auto}.swagger-ui .ml-auto{margin-left:auto}@media screen and (min-width:30em){.swagger-ui .center-ns{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-ns{margin-right:auto}.swagger-ui .ml-auto-ns{margin-left:auto}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .center-m{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-m{margin-right:auto}.swagger-ui .ml-auto-m{margin-left:auto}}@media screen and (min-width:60em){.swagger-ui .center-l{margin-left:auto;margin-right:auto}.swagger-ui .mr-auto-l{margin-right:auto}.swagger-ui .ml-auto-l{margin-left:auto}}.swagger-ui .clip{position:fixed!important;_position:absolute!important}.swagger-ui .clip{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}@media screen and (min-width:30em){.swagger-ui .clip-ns{position:fixed!important;_position:absolute!important}.swagger-ui .clip-ns{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .clip-m{position:fixed!important;_position:absolute!important}.swagger-ui .clip-m{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}@media screen and (min-width:60em){.swagger-ui .clip-l{position:fixed!important;_position:absolute!important}.swagger-ui .clip-l{clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}}.swagger-ui .ws-normal{white-space:normal}.swagger-ui .nowrap{white-space:nowrap}.swagger-ui .pre{white-space:pre}@media screen and (min-width:30em){.swagger-ui .ws-normal-ns{white-space:normal}.swagger-ui .nowrap-ns{white-space:nowrap}.swagger-ui .pre-ns{white-space:pre}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .ws-normal-m{white-space:normal}.swagger-ui .nowrap-m{white-space:nowrap}.swagger-ui .pre-m{white-space:pre}}@media screen and (min-width:60em){.swagger-ui .ws-normal-l{white-space:normal}.swagger-ui .nowrap-l{white-space:nowrap}.swagger-ui .pre-l{white-space:pre}}.swagger-ui .v-base{vertical-align:baseline}.swagger-ui .v-mid{vertical-align:middle}.swagger-ui .v-top{vertical-align:top}.swagger-ui .v-btm{vertical-align:bottom}@media screen and (min-width:30em){.swagger-ui .v-base-ns{vertical-align:baseline}.swagger-ui .v-mid-ns{vertical-align:middle}.swagger-ui .v-top-ns{vertical-align:top}.swagger-ui .v-btm-ns{vertical-align:bottom}}@media screen and (min-width:30em)and (max-width:60em){.swagger-ui .v-base-m{vertical-align:baseline}.swagger-ui .v-mid-m{vertical-align:middle}.swagger-ui .v-top-m{vertical-align:top}.swagger-ui .v-btm-m{vertical-align:bottom}}@media screen and (min-width:60em){.swagger-ui .v-base-l{vertical-align:baseline}.swagger-ui .v-mid-l{vertical-align:middle}.swagger-ui .v-top-l{vertical-align:top}.swagger-ui .v-btm-l{vertical-align:bottom}}.swagger-ui .dim{opacity:1;transition:opacity .15s ease-in}.swagger-ui .dim:focus,.swagger-ui .dim:hover{opacity:.5;transition:opacity .15s ease-in}.swagger-ui .dim:active{opacity:.8;transition:opacity .15s ease-out}.swagger-ui .glow{transition:opacity .15s ease-in}.swagger-ui .glow:focus,.swagger-ui .glow:hover{opacity:1;transition:opacity .15s ease-in}.swagger-ui .hide-child .child{opacity:0;transition:opacity .15s ease-in}.swagger-ui .hide-child:active .child,.swagger-ui .hide-child:focus .child,.swagger-ui .hide-child:hover .child{opacity:1;transition:opacity .15s ease-in}.swagger-ui .underline-hover:focus,.swagger-ui .underline-hover:hover{-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .grow{-moz-osx-font-smoothing:grayscale;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-out}.swagger-ui .grow:focus,.swagger-ui .grow:hover{transform:scale(1.05)}.swagger-ui .grow:active{transform:scale(.9)}.swagger-ui .grow-large{-moz-osx-font-smoothing:grayscale;backface-visibility:hidden;transform:translateZ(0);transition:transform .25s ease-in-out}.swagger-ui .grow-large:focus,.swagger-ui .grow-large:hover{transform:scale(1.2)}.swagger-ui .grow-large:active{transform:scale(.95)}.swagger-ui .pointer:hover{cursor:pointer}.swagger-ui .shadow-hover{cursor:pointer;position:relative;transition:all .5s cubic-bezier(.165,.84,.44,1)}.swagger-ui .shadow-hover:after{border-radius:inherit;box-shadow:0 0 16px 2px rgba(0,0,0,.2);content:\"\";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .5s cubic-bezier(.165,.84,.44,1);width:100%;z-index:-1}.swagger-ui .shadow-hover:focus:after,.swagger-ui .shadow-hover:hover:after{opacity:1}.swagger-ui .bg-animate,.swagger-ui .bg-animate:focus,.swagger-ui .bg-animate:hover{transition:background-color .15s ease-in-out}.swagger-ui .z-0{z-index:0}.swagger-ui .z-1{z-index:1}.swagger-ui .z-2{z-index:2}.swagger-ui .z-3{z-index:3}.swagger-ui .z-4{z-index:4}.swagger-ui .z-5{z-index:5}.swagger-ui .z-999{z-index:999}.swagger-ui .z-9999{z-index:9999}.swagger-ui .z-max{z-index:2147483647}.swagger-ui .z-inherit{z-index:inherit}.swagger-ui .z-initial,.swagger-ui .z-unset{z-index:auto}.swagger-ui .nested-copy-line-height ol,.swagger-ui .nested-copy-line-height p,.swagger-ui .nested-copy-line-height ul{line-height:1.5}.swagger-ui .nested-headline-line-height h1,.swagger-ui .nested-headline-line-height h2,.swagger-ui .nested-headline-line-height h3,.swagger-ui .nested-headline-line-height h4,.swagger-ui .nested-headline-line-height h5,.swagger-ui .nested-headline-line-height h6{line-height:1.25}.swagger-ui .nested-list-reset ol,.swagger-ui .nested-list-reset ul{list-style-type:none;margin-left:0;padding-left:0}.swagger-ui .nested-copy-indent p+p{margin-bottom:0;margin-top:0;text-indent:.1em}.swagger-ui .nested-copy-seperator p+p{margin-top:1.5em}.swagger-ui .nested-img img{display:block;max-width:100%;width:100%}.swagger-ui .nested-links a{color:#357edd;transition:color .15s ease-in}.swagger-ui .nested-links a:focus,.swagger-ui .nested-links a:hover{color:#96ccff;transition:color .15s ease-in}.swagger-ui .wrapper{box-sizing:border-box;margin:0 auto;max-width:1460px;padding:0 20px;width:100%}.swagger-ui .opblock-tag-section{display:flex;flex-direction:column}.swagger-ui .try-out.btn-group{display:flex;flex:.1 2 auto;padding:0}.swagger-ui .try-out__btn{margin-left:1.25rem}.swagger-ui .opblock-tag{align-items:center;border-bottom:1px solid rgba(59,65,81,.3);cursor:pointer;display:flex;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui .opblock-tag:hover{background:rgba(0,0,0,.02)}.swagger-ui .opblock-tag{color:#3b4151;font-family:sans-serif;font-size:24px;margin:0 0 5px}.swagger-ui .opblock-tag.no-desc span{flex:1}.swagger-ui .opblock-tag svg{transition:all .4s}.swagger-ui .opblock-tag small{color:#3b4151;flex:2;font-family:sans-serif;font-size:14px;font-weight:400;padding:0 10px}.swagger-ui .opblock-tag>div{flex:1 1 150px;font-weight:400;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:640px){.swagger-ui .opblock-tag small,.swagger-ui .opblock-tag>div{flex:1}}.swagger-ui .opblock-tag .info__externaldocs{text-align:right}.swagger-ui .parameter__type{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;padding:5px 0}.swagger-ui .parameter-controls{margin-top:.75em}.swagger-ui .examples__title{display:block;font-size:1.1em;font-weight:700;margin-bottom:.75em}.swagger-ui .examples__section{margin-top:1.5em}.swagger-ui .examples__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .examples-select{display:inline-block;margin-bottom:.75em}.swagger-ui .examples-select .examples-select-element{width:100%}.swagger-ui .examples-select__section-label{font-size:.9rem;font-weight:700;margin-right:.5rem}.swagger-ui .example__section{margin-top:1.5em}.swagger-ui .example__section-header{font-size:.9rem;font-weight:700;margin-bottom:.5rem}.swagger-ui .view-line-link{cursor:pointer;margin:0 5px;position:relative;top:3px;transition:all .5s;width:20px}.swagger-ui .opblock{border:1px solid #000;border-radius:4px;box-shadow:0 0 3px rgba(0,0,0,.19);margin:0 0 15px}.swagger-ui .opblock .tab-header{display:flex;flex:1}.swagger-ui .opblock .tab-header .tab-item{cursor:pointer;padding:0 40px}.swagger-ui .opblock .tab-header .tab-item:first-of-type{padding:0 40px 0 0}.swagger-ui .opblock .tab-header .tab-item.active h4 span{position:relative}.swagger-ui .opblock .tab-header .tab-item.active h4 span:after{background:gray;bottom:-15px;content:\"\";height:4px;left:50%;position:absolute;transform:translateX(-50%);width:120%}.swagger-ui .opblock.is-open .opblock-summary{border-bottom:1px solid #000}.swagger-ui .opblock .opblock-section-header{align-items:center;background:hsla(0,0%,100%,.8);box-shadow:0 1px 2px rgba(0,0,0,.1);display:flex;min-height:50px;padding:8px 20px}.swagger-ui .opblock .opblock-section-header>label{align-items:center;color:#3b4151;display:flex;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 0 auto}.swagger-ui .opblock .opblock-section-header>label>span{padding:0 10px 0 0}.swagger-ui .opblock .opblock-section-header h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock .opblock-summary-method{background:#000;border-radius:3px;color:#fff;font-family:sans-serif;font-size:14px;font-weight:700;min-width:80px;padding:6px 0;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.1)}.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{align-items:center;color:#3b4151;display:flex;font-family:monospace;font-size:16px;font-weight:600;padding:0 10px;word-break:break-word}@media(max-width:768px){.swagger-ui .opblock .opblock-summary-operation-id,.swagger-ui .opblock .opblock-summary-path,.swagger-ui .opblock .opblock-summary-path__deprecated{font-size:12px}}.swagger-ui .opblock .opblock-summary-path{flex-shrink:0;max-width:calc(100% - 110px - 15rem)}@media(max-width:640px){.swagger-ui .opblock .opblock-summary-path{flex-shrink:1;max-width:100%}}.swagger-ui .opblock .opblock-summary-path__deprecated{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .opblock .opblock-summary-operation-id{font-size:14px}.swagger-ui .opblock .opblock-summary-description{color:#3b4151;flex:1 1 auto;font-family:sans-serif;font-size:13px;word-break:break-word}.swagger-ui .opblock .opblock-summary{align-items:center;cursor:pointer;display:flex;padding:5px}.swagger-ui .opblock .opblock-summary .view-line-link{cursor:pointer;margin:0;position:relative;top:2px;transition:all .5s;width:0}.swagger-ui .opblock .opblock-summary:hover .view-line-link{margin:0 5px;width:18px}.swagger-ui .opblock .opblock-summary:hover .view-line-link.copy-to-clipboard{width:24px}.swagger-ui .opblock.opblock-post{background:rgba(73,204,144,.1);border-color:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary-method{background:#49cc90}.swagger-ui .opblock.opblock-post .opblock-summary{border-color:#49cc90}.swagger-ui .opblock.opblock-post .tab-header .tab-item.active h4 span:after{background:#49cc90}.swagger-ui .opblock.opblock-put{background:rgba(252,161,48,.1);border-color:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary-method{background:#fca130}.swagger-ui .opblock.opblock-put .opblock-summary{border-color:#fca130}.swagger-ui .opblock.opblock-put .tab-header .tab-item.active h4 span:after{background:#fca130}.swagger-ui .opblock.opblock-delete{background:rgba(249,62,62,.1);border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary-method{background:#f93e3e}.swagger-ui .opblock.opblock-delete .opblock-summary{border-color:#f93e3e}.swagger-ui .opblock.opblock-delete .tab-header .tab-item.active h4 span:after{background:#f93e3e}.swagger-ui .opblock.opblock-get{background:rgba(97,175,254,.1);border-color:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary-method{background:#61affe}.swagger-ui .opblock.opblock-get .opblock-summary{border-color:#61affe}.swagger-ui .opblock.opblock-get .tab-header .tab-item.active h4 span:after{background:#61affe}.swagger-ui .opblock.opblock-patch{background:rgba(80,227,194,.1);border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary-method{background:#50e3c2}.swagger-ui .opblock.opblock-patch .opblock-summary{border-color:#50e3c2}.swagger-ui .opblock.opblock-patch .tab-header .tab-item.active h4 span:after{background:#50e3c2}.swagger-ui .opblock.opblock-head{background:rgba(144,18,254,.1);border-color:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary-method{background:#9012fe}.swagger-ui .opblock.opblock-head .opblock-summary{border-color:#9012fe}.swagger-ui .opblock.opblock-head .tab-header .tab-item.active h4 span:after{background:#9012fe}.swagger-ui .opblock.opblock-options{background:rgba(13,90,167,.1);border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary-method{background:#0d5aa7}.swagger-ui .opblock.opblock-options .opblock-summary{border-color:#0d5aa7}.swagger-ui .opblock.opblock-options .tab-header .tab-item.active h4 span:after{background:#0d5aa7}.swagger-ui .opblock.opblock-deprecated{background:hsla(0,0%,92%,.1);border-color:#ebebeb;opacity:.6}.swagger-ui .opblock.opblock-deprecated .opblock-summary-method{background:#ebebeb}.swagger-ui .opblock.opblock-deprecated .opblock-summary{border-color:#ebebeb}.swagger-ui .opblock.opblock-deprecated .tab-header .tab-item.active h4 span:after{background:#ebebeb}.swagger-ui .opblock .opblock-schemes{padding:8px 20px}.swagger-ui .opblock .opblock-schemes .schemes-title{padding:0 10px 0 0}.swagger-ui .filter .operation-filter-input{border:2px solid #d8dde7;margin:20px 0;padding:10px;width:100%}.swagger-ui .download-url-wrapper .failed,.swagger-ui .filter .failed{color:red}.swagger-ui .download-url-wrapper .loading,.swagger-ui .filter .loading{color:#aaa}.swagger-ui .model-example{margin-top:1em}.swagger-ui .tab{display:flex;list-style:none;padding:0}.swagger-ui .tab li{color:#3b4151;cursor:pointer;font-family:sans-serif;font-size:12px;min-width:60px;padding:0}.swagger-ui .tab li:first-of-type{padding-left:0;padding-right:12px;position:relative}.swagger-ui .tab li:first-of-type:after{background:rgba(0,0,0,.2);content:\"\";height:100%;position:absolute;right:6px;top:0;width:1px}.swagger-ui .tab li.active{font-weight:700}.swagger-ui .tab li button.tablinks{background:none;border:0;color:inherit;font-family:inherit;font-weight:inherit;padding:0}.swagger-ui .opblock-description-wrapper,.swagger-ui .opblock-external-docs-wrapper,.swagger-ui .opblock-title_normal{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px;padding:15px 20px}.swagger-ui .opblock-description-wrapper h4,.swagger-ui .opblock-external-docs-wrapper h4,.swagger-ui .opblock-title_normal h4{color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .opblock-description-wrapper p,.swagger-ui .opblock-external-docs-wrapper p,.swagger-ui .opblock-title_normal p{color:#3b4151;font-family:sans-serif;font-size:14px;margin:0}.swagger-ui .opblock-external-docs-wrapper h4{padding-left:0}.swagger-ui .execute-wrapper{padding:20px;text-align:right}.swagger-ui .execute-wrapper .btn{padding:8px 40px;width:100%}.swagger-ui .body-param-options{display:flex;flex-direction:column}.swagger-ui .body-param-options .body-param-edit{padding:10px 0}.swagger-ui .body-param-options label{padding:8px 0}.swagger-ui .body-param-options label select{margin:3px 0 0}.swagger-ui .responses-inner{padding:20px}.swagger-ui .responses-inner h4,.swagger-ui .responses-inner h5{color:#3b4151;font-family:sans-serif;font-size:12px;margin:10px 0 5px}.swagger-ui .responses-inner .curl{white-space:normal}.swagger-ui .response-col_status{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .response-col_status .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links{color:#3b4151;font-family:sans-serif;font-size:14px;max-width:40em;padding-left:2em}.swagger-ui .response-col_links .response-undocumented{color:#909090;font-family:monospace;font-size:11px;font-weight:600}.swagger-ui .response-col_links .operation-link{margin-bottom:1.5em}.swagger-ui .response-col_links .operation-link .description{margin-bottom:.5em}.swagger-ui .opblock-body .opblock-loading-animation{display:block;margin:3em auto}.swagger-ui .opblock-body pre.microlight{word-wrap:break-word;background:#333;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;-webkit-hyphens:auto;hyphens:auto;margin:0;padding:10px;white-space:pre-wrap;word-break:break-all;word-break:break-word}.swagger-ui .opblock-body pre.microlight .headerline{display:block}.swagger-ui .highlight-code{position:relative}.swagger-ui .highlight-code>.microlight{max-height:400px;min-height:6em;overflow-y:auto}.swagger-ui .highlight-code>.microlight code{white-space:pre-wrap!important}.swagger-ui .highlight-code>.microlight code{word-break:break-all}.swagger-ui .curl-command{position:relative}.swagger-ui .download-contents{align-items:center;background:#7d8293;border-radius:4px;bottom:10px;color:#fff;cursor:pointer;display:flex;font-family:sans-serif;font-size:14px;font-weight:600;height:30px;justify-content:center;padding:5px;position:absolute;right:10px;text-align:center}.swagger-ui .scheme-container{background:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.15);margin:0 0 20px;padding:30px 0}.swagger-ui .scheme-container .schemes{align-items:flex-end;display:flex}.swagger-ui .scheme-container .schemes>label{color:#3b4151;display:flex;flex-direction:column;font-family:sans-serif;font-size:12px;font-weight:700;margin:-20px 15px 0 0}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{align-items:center;display:flex;flex-direction:column;justify-content:center;margin-top:1em;min-height:1px;padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{color:#3b4151;content:\"loading\";font-family:sans-serif;font-size:10px;font-weight:700;left:50%;position:absolute;text-transform:uppercase;top:50%;transform:translate(-50%,-50%)}.swagger-ui .loading-container .loading:before{animation:rotation 1s linear infinite,opacity .5s;backface-visibility:hidden;border:2px solid rgba(85,85,85,.1);border-radius:100%;border-top-color:rgba(0,0,0,.6);content:\"\";display:block;height:60px;left:50%;margin:-30px;opacity:1;position:absolute;top:50%;width:60px}@keyframes rotation{to{transform:rotate(1turn)}}.swagger-ui .response-controls{display:flex;padding-top:1em}.swagger-ui .response-control-media-type{margin-right:1em}.swagger-ui .response-control-media-type--accept-controller select{border-color:green}.swagger-ui .response-control-media-type__accept-message{color:green;font-size:.7em}.swagger-ui .response-control-examples__title,.swagger-ui .response-control-media-type__title{display:block;font-size:.7em;margin-bottom:.2em}@keyframes blinker{50%{opacity:0}}.swagger-ui .hidden{display:none}.swagger-ui .no-margin{border:none;height:auto;margin:0;padding:0}.swagger-ui .float-right{float:right}.swagger-ui .svg-assets{height:0;position:absolute;width:0}.swagger-ui section h3{color:#3b4151;font-family:sans-serif}.swagger-ui a.nostyle{display:inline}.swagger-ui a.nostyle,.swagger-ui a.nostyle:visited{color:inherit;cursor:pointer;text-decoration:inherit}.swagger-ui .fallback{color:#aaa;padding:1em}.swagger-ui .version-pragma{height:100%;padding:5em 0}.swagger-ui .version-pragma__message{display:flex;font-size:1.2em;height:100%;justify-content:center;line-height:1.5em;padding:0 .6em;text-align:center}.swagger-ui .version-pragma__message>div{flex:1;max-width:55ch}.swagger-ui .version-pragma__message code{background-color:#dedede;padding:4px 4px 2px;white-space:pre}.swagger-ui .opblock-link{font-weight:400}.swagger-ui .opblock-link.shown{font-weight:700}.swagger-ui span.token-string{color:#555}.swagger-ui span.token-not-formatted{color:#555;font-weight:700}.swagger-ui .btn{background:transparent;border:2px solid gray;border-radius:4px;box-shadow:0 1px 2px rgba(0,0,0,.1);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s}.swagger-ui .btn.btn-sm{font-size:12px;padding:4px 23px}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{background-color:transparent;border-color:#ff6060;color:#ff6060;font-family:sans-serif}.swagger-ui .btn.authorize{background-color:transparent;border-color:#49cc90;color:#49cc90;display:inline;line-height:1}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{background-color:#4990e2;border-color:#4990e2;color:#fff}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{background:none;border:none;padding:0 0 0 10px}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .model-box-control,.swagger-ui .models-control,.swagger-ui .opblock-summary-control{all:inherit;border-bottom:0;cursor:pointer;flex:1;padding:0}.swagger-ui .model-box-control:focus,.swagger-ui .models-control:focus,.swagger-ui .opblock-summary-control:focus{outline:auto}.swagger-ui .expand-methods,.swagger-ui .expand-operation{background:none;border:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{height:20px;width:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#404040}.swagger-ui .expand-methods svg{fill:#707070;transition:all .3s}.swagger-ui button{cursor:pointer}.swagger-ui button.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .copy-to-clipboard{align-items:center;background:#7d8293;border:none;border-radius:4px;bottom:10px;display:flex;height:30px;justify-content:center;position:absolute;right:100px;width:30px}.swagger-ui .copy-to-clipboard button{background:url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"16\\\" height=\\\"15\\\" aria-hidden=\\\"true\\\"><path fill=\\\"%23fff\\\" fill-rule=\\\"evenodd\\\" d=\\\"M4 12h4v1H4v-1zm5-6H4v1h5V6zm2 3V7l-3 3 3 3v-2h5V9h-5zM6.5 8H4v1h2.5V8zM4 11h2.5v-1H4v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H3c-.55 0-1-.45-1-1V3c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V5H3v9h10v-2zM4 4h8c0-.55-.45-1-1-1h-1c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H5c-.55 0-1 .45-1 1z\\\"/></svg>\") 50% no-repeat;border:none;flex-grow:1;flex-shrink:1;height:25px}.swagger-ui .curl-command .copy-to-clipboard{bottom:5px;height:20px;right:10px;width:20px}.swagger-ui .curl-command .copy-to-clipboard button{height:18px}.swagger-ui .opblock .opblock-summary .view-line-link.copy-to-clipboard{height:26px;position:static}.swagger-ui select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#f7f7f7 url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 20 20\\\"><path d=\\\"M13.418 7.859a.695.695 0 0 1 .978 0 .68.68 0 0 1 0 .969l-3.908 3.83a.697.697 0 0 1-.979 0l-3.908-3.83a.68.68 0 0 1 0-.969.695.695 0 0 1 .978 0L10 11l3.418-3.141z\\\"/></svg>\") right 10px center no-repeat;background-size:20px;border:2px solid #41444e;border-radius:4px;box-shadow:0 1px 2px 0 rgba(0,0,0,.25);color:#3b4151;font-family:sans-serif;font-size:14px;font-weight:700;padding:5px 40px 5px 10px}.swagger-ui select[multiple]{background:#f7f7f7;margin:5px 0;padding:5px}.swagger-ui select.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui .opblock-body select{min-width:230px}@media(max-width:768px){.swagger-ui .opblock-body select{min-width:180px}}@media(max-width:640px){.swagger-ui .opblock-body select{min-width:100%;width:100%}}.swagger-ui label{color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;margin:0 0 5px}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{line-height:1}@media(max-width:768px){.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{max-width:175px}}.swagger-ui input[type=email],.swagger-ui input[type=file],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text],.swagger-ui textarea{background:#fff;border:1px solid #d9d9d9;border-radius:4px;margin:5px 0;min-width:100px;padding:8px 10px}.swagger-ui input[type=email].invalid,.swagger-ui input[type=file].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid,.swagger-ui textarea.invalid{animation:shake .4s 1;background:#feebeb;border-color:#f93e3e}.swagger-ui input[disabled],.swagger-ui select[disabled],.swagger-ui textarea[disabled]{background-color:#fafafa;color:#888;cursor:not-allowed}.swagger-ui select[disabled]{border-color:#888}.swagger-ui textarea[disabled]{background-color:#41444e;color:#fff}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{background:hsla(0,0%,100%,.8);border:none;border-radius:4px;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;min-height:280px;outline:none;padding:10px;width:100%}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{background:#41444e;border-radius:4px;color:#fff;font-family:monospace;font-size:12px;font-weight:600;margin:0;min-height:100px;padding:10px;resize:none}.swagger-ui .checkbox{color:#303030;padding:5px 0 10px;transition:opacity .5s}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{font-weight:400!important;margin:0!important}.swagger-ui .checkbox p{color:#3b4151;font-family:monospace;font-style:italic;font-weight:600}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{background:#e8e8e8;border-radius:1px;box-shadow:0 0 0 2px #e8e8e8;cursor:pointer;display:inline-block;flex:none;height:16px;margin:0 8px 0 0;padding:5px;position:relative;top:3px;width:16px}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"10\\\" height=\\\"8\\\" viewBox=\\\"3 7 10 8\\\"><path fill=\\\"%2341474E\\\" fill-rule=\\\"evenodd\\\" d=\\\"M6.333 15 3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z\\\"/></svg>\") 50% no-repeat}.swagger-ui .dialog-ux{bottom:0;left:0;position:fixed;right:0;top:0;z-index:9999}.swagger-ui .dialog-ux .backdrop-ux{background:rgba(0,0,0,.8);bottom:0;left:0;position:fixed;right:0;top:0}.swagger-ui .dialog-ux .modal-ux{background:#fff;border:1px solid #ebebeb;border-radius:4px;box-shadow:0 10px 30px 0 rgba(0,0,0,.2);left:50%;max-width:650px;min-width:300px;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%;z-index:9999}.swagger-ui .dialog-ux .modal-ux-content{max-height:540px;overflow-y:auto;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{color:#41444e;color:#3b4151;font-family:sans-serif;font-size:12px;margin:0 0 5px}.swagger-ui .dialog-ux .modal-ux-content h4{color:#3b4151;font-family:sans-serif;font-size:18px;font-weight:600;margin:15px 0 0}.swagger-ui .dialog-ux .modal-ux-header{align-items:center;border-bottom:1px solid #ebebeb;display:flex;padding:12px 0}.swagger-ui .dialog-ux .modal-ux-header .close-modal{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;padding:0 10px}.swagger-ui .dialog-ux .modal-ux-header h3{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;font-weight:600;margin:0;padding:0 20px}.swagger-ui .model{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600}.swagger-ui .model .deprecated span,.swagger-ui .model .deprecated td{color:#a0a0a0!important}.swagger-ui .model .deprecated>td:first-of-type{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .model-toggle{cursor:pointer;display:inline-block;font-size:10px;margin:auto .3em;position:relative;top:6px;transform:rotate(90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .model-toggle.collapsed{transform:rotate(0deg)}.swagger-ui .model-toggle:after{background:url(\"data:image/svg+xml;charset=utf-8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\"><path d=\\\"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\\\"/></svg>\") 50% no-repeat;background-size:100%;content:\"\";display:block;height:20px;width:20px}.swagger-ui .model-jump-to-path{cursor:pointer;position:relative}.swagger-ui .model-jump-to-path .view-line-link{cursor:pointer;position:absolute;top:-.4em}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{background:rgba(0,0,0,.7);border-radius:4px;color:#ebebeb;padding:.1em .5em;position:absolute;top:-1.8em;visibility:hidden;white-space:nowrap}.swagger-ui .model p{margin:0 0 1em}.swagger-ui .model .property{color:#999;font-style:italic}.swagger-ui .model .property.primitive{color:#6b6b6b}.swagger-ui .model .external-docs,.swagger-ui table.model tr.description{color:#666;font-weight:400}.swagger-ui table.model tr.description td:first-child,.swagger-ui table.model tr.property-row.required td:first-child{font-weight:700}.swagger-ui table.model tr.property-row td{vertical-align:top}.swagger-ui table.model tr.property-row td:first-child{padding-right:.2em}.swagger-ui table.model tr.property-row .star{color:red}.swagger-ui table.model tr.extension{color:#777}.swagger-ui table.model tr.extension td:last-child{vertical-align:top}.swagger-ui table.model tr.external-docs td:first-child{font-weight:700}.swagger-ui table.model tr .renderedMarkdown p:first-child{margin-top:0}.swagger-ui section.models{border:1px solid rgba(59,65,81,.3);border-radius:4px;margin:30px 0}.swagger-ui section.models .pointer{cursor:pointer}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{border-bottom:1px solid rgba(59,65,81,.3);margin:0 0 5px}.swagger-ui section.models h4{align-items:center;color:#606060;cursor:pointer;display:flex;font-family:sans-serif;font-size:16px;margin:0;padding:10px 20px 10px 10px;transition:all .2s}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{color:#707070;font-family:sans-serif;font-size:16px;margin:0 0 10px}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{background:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;position:relative;transition:all .5s}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-container .models-jump-to-path{opacity:.65;position:absolute;right:5px;top:8px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{background:rgba(0,0,0,.1);border-radius:4px;display:inline-block;padding:10px}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-box.deprecated{opacity:.5}.swagger-ui .model-title{color:#505050;font-family:sans-serif;font-size:16px}.swagger-ui .model-title img{bottom:0;margin-left:1em;position:relative}.swagger-ui .model-deprecated-warning{color:#f93e3e;font-family:sans-serif;font-size:16px;font-weight:600;margin-right:1em}.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-name{display:inline-block;margin-right:1em}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#606060}.swagger-ui .servers>label{color:#3b4151;font-family:sans-serif;font-size:12px;margin:-20px 15px 0 0}.swagger-ui .servers>label select{max-width:100%;min-width:130px;width:100%}.swagger-ui .servers h4.message{padding-bottom:2em}.swagger-ui .servers table tr{width:30em}.swagger-ui .servers table td{display:inline-block;max-width:15em;padding-bottom:10px;padding-top:10px;vertical-align:middle}.swagger-ui .servers table td:first-of-type{padding-right:1em}.swagger-ui .servers table td input{height:100%;width:100%}.swagger-ui .servers .computed-url{margin:2em 0}.swagger-ui .servers .computed-url code{display:inline-block;font-size:16px;margin:0 1em;padding:4px}.swagger-ui .servers-title{font-size:12px;font-weight:700}.swagger-ui .operation-servers h4.message{margin-bottom:2em}.swagger-ui table{border-collapse:collapse;padding:0 10px;width:100%}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{padding:0 0 0 2em;width:174px}.swagger-ui table.headers td{color:#3b4151;font-family:monospace;font-size:12px;font-weight:300;font-weight:600;vertical-align:middle}.swagger-ui table.headers .header-example{color:#999;font-style:italic}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{min-width:6em;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{border-bottom:1px solid rgba(59,65,81,.2);color:#3b4151;font-family:sans-serif;font-size:12px;font-weight:700;padding:12px 0;text-align:left}.swagger-ui .parameters-col_description{margin-bottom:2em;width:99%}.swagger-ui .parameters-col_description input{max-width:340px;width:100%}.swagger-ui .parameters-col_description select{border-width:1px}.swagger-ui .parameters-col_description .markdown p{margin:0}.swagger-ui .parameter__name{color:#3b4151;font-family:sans-serif;font-size:16px;font-weight:400;margin-right:.75em}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required span{color:red}.swagger-ui .parameter__name.required:after{color:rgba(255,0,0,.6);content:\"required\";font-size:10px;padding:5px;position:relative;top:-6px}.swagger-ui .parameter__extension,.swagger-ui .parameter__in{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__deprecated{color:red;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .parameter__empty_value_toggle{display:block;font-size:13px;padding-bottom:12px;padding-top:5px}.swagger-ui .parameter__empty_value_toggle input{margin-right:7px}.swagger-ui .parameter__empty_value_toggle.disabled{opacity:.7}.swagger-ui .table-container{padding:20px}.swagger-ui .response-col_description{width:99%}.swagger-ui .response-col_description .markdown p{margin:0}.swagger-ui .response-col_links{min-width:6em}.swagger-ui .response__extension{color:gray;font-family:monospace;font-size:12px;font-style:italic;font-weight:600}.swagger-ui .topbar{background-color:#1b1b1b;padding:10px 0}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{align-items:center;display:flex}.swagger-ui .topbar a{color:#fff;flex:1;font-family:sans-serif;font-size:1.5em;font-weight:700;max-width:300px;-webkit-text-decoration:none;text-decoration:none}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{border:2px solid #62a03f;border-radius:4px 0 0 4px;margin:0;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label{align-items:center;color:#f0f0f0;display:flex;margin:0;max-width:600px;width:100%}.swagger-ui .topbar .download-url-wrapper .select-label span{flex:1;font-size:16px;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{border:2px solid #62a03f;box-shadow:none;flex:2;outline:none;width:100%}.swagger-ui .topbar .download-url-wrapper .download-url-button{background:#62a03f;border:none;border-radius:0 4px 4px 0;color:#fff;font-family:sans-serif;font-size:16px;font-weight:700;padding:4px 30px}.swagger-ui .info{margin:50px 0}.swagger-ui .info.failed-config{margin-left:auto;margin-right:auto;max-width:880px;text-align:center}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info pre{font-size:14px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{color:#3b4151;font-family:sans-serif}.swagger-ui .info a{color:#4990e2;font-family:sans-serif;font-size:14px;transition:all .4s}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{font-weight:300!important}.swagger-ui .info .base-url{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:0}.swagger-ui .info .title{color:#3b4151;font-family:sans-serif;font-size:36px;margin:0}.swagger-ui .info .title small{background:#7d8492;border-radius:57px;display:inline-block;font-size:10px;margin:0 0 0 5px;padding:2px 4px;position:relative;top:-5px;vertical-align:super}.swagger-ui .info .title small.version-stamp{background-color:#89bf04}.swagger-ui .info .title small pre{color:#fff;font-family:sans-serif;margin:0;padding:0}.swagger-ui .auth-btn-wrapper{display:flex;justify-content:center;padding:10px 0}.swagger-ui .auth-btn-wrapper .btn-done{margin-right:1em}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{margin-left:10px;margin-right:10px;padding-right:20px}.swagger-ui .auth-container{border-bottom:1px solid #ebebeb;margin:0 0 10px;padding:10px 20px}.swagger-ui .auth-container:last-of-type{border:0;margin:0;padding:10px 20px}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{background-color:#fee;border-radius:4px;color:red;color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;margin:1em;padding:10px}.swagger-ui .auth-container .errors b{margin-right:1em;text-transform:capitalize}.swagger-ui .scopes h2{color:#3b4151;font-family:sans-serif;font-size:14px}.swagger-ui .scopes h2 a{color:#4990e2;cursor:pointer;font-size:12px;padding-left:10px;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{animation:scaleUp .5s;background:rgba(249,62,62,.1);border:2px solid #f93e3e;border-radius:4px;margin:20px;padding:10px 20px}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{color:#3b4151;font-family:monospace;font-size:14px;font-weight:600;margin:0}.swagger-ui .errors-wrapper .errors small{color:#606060}.swagger-ui .errors-wrapper .errors .message{white-space:pre-line}.swagger-ui .errors-wrapper .errors .message.thrown{max-width:100%}.swagger-ui .errors-wrapper .errors .error-line{cursor:pointer;-webkit-text-decoration:underline;text-decoration:underline}.swagger-ui .errors-wrapper hgroup{align-items:center;display:flex}.swagger-ui .errors-wrapper hgroup h4{color:#3b4151;flex:1;font-family:sans-serif;font-size:20px;margin:0}@keyframes scaleUp{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.swagger-ui .Resizer.vertical.disabled{display:none}.swagger-ui .markdown p,.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown p,.swagger-ui .renderedMarkdown pre{margin:1em auto;word-break:break-all;word-break:break-word}.swagger-ui .markdown pre,.swagger-ui .renderedMarkdown pre{background:none;color:#000;font-weight:400;padding:0;white-space:pre-wrap}.swagger-ui .markdown code,.swagger-ui .renderedMarkdown code{background:rgba(0,0,0,.05);border-radius:4px;color:#9012fe;font-family:monospace;font-size:14px;font-weight:600;padding:5px 7px}.swagger-ui .markdown pre>code,.swagger-ui .renderedMarkdown pre>code{display:block}.swagger-ui .json-schema-2020-12{background-color:rgba(0,0,0,.05);border-radius:4px;margin:0 20px 15px;padding:12px 0 12px 20px}.swagger-ui .json-schema-2020-12:first-of-type{margin:20px}.swagger-ui .json-schema-2020-12:last-of-type{margin:0 20px}.swagger-ui .json-schema-2020-12--embedded{background-color:inherit;padding-bottom:0;padding-left:inherit;padding-right:inherit;padding-top:0}.swagger-ui .json-schema-2020-12-body{border-left:1px dashed rgba(0,0,0,.1);margin:2px 0}.swagger-ui .json-schema-2020-12-body--collapsed{display:none}.swagger-ui .json-schema-2020-12-accordion{border:none;outline:none;padding-left:0}.swagger-ui .json-schema-2020-12-accordion__children{display:inline-block}.swagger-ui .json-schema-2020-12-accordion__icon{display:inline-block;height:18px;vertical-align:bottom;width:18px}.swagger-ui .json-schema-2020-12-accordion__icon--expanded{transform:rotate(-90deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .json-schema-2020-12-accordion__icon--collapsed{transform:rotate(0deg);transform-origin:50% 50%;transition:transform .15s ease-in}.swagger-ui .json-schema-2020-12-accordion__icon svg{height:20px;width:20px}.swagger-ui .json-schema-2020-12-expand-deep-button{border:none;color:#505050;color:#afaeae;font-family:sans-serif;font-size:12px;padding-right:0}.swagger-ui .json-schema-2020-12-keyword{margin:5px 0}.swagger-ui .json-schema-2020-12-keyword__children{border-left:1px dashed rgba(0,0,0,.1);margin:0 0 0 20px;padding:0}.swagger-ui .json-schema-2020-12-keyword__children--collapsed{display:none}.swagger-ui .json-schema-2020-12-keyword__name{font-size:12px;font-weight:700;margin-left:20px}.swagger-ui .json-schema-2020-12-keyword__name--primary{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-keyword__name--secondary{color:#6b6b6b;font-style:italic}.swagger-ui .json-schema-2020-12-keyword__value{color:#6b6b6b;font-size:12px;font-style:italic;font-weight:400}.swagger-ui .json-schema-2020-12-keyword__value--primary{color:#3b4151;font-style:normal}.swagger-ui .json-schema-2020-12-keyword__value--secondary{color:#6b6b6b;font-style:italic}.swagger-ui .json-schema-2020-12-keyword__value--const,.swagger-ui .json-schema-2020-12-keyword__value--warning{border:1px dashed #6b6b6b;border-radius:4px;color:#3b4151;color:#6b6b6b;display:inline-block;font-family:monospace;font-style:normal;font-weight:600;line-height:1.5;margin-left:10px;padding:1px 4px}.swagger-ui .json-schema-2020-12-keyword__value--warning{border:1px dashed red;color:red}.swagger-ui .json-schema-2020-12-keyword__name--secondary+.json-schema-2020-12-keyword__value--secondary:before{content:\"=\"}.swagger-ui .json-schema-2020-12__attribute{color:#3b4151;font-family:monospace;font-size:12px;padding-left:10px;text-transform:lowercase}.swagger-ui .json-schema-2020-12__attribute--primary{color:#55a}.swagger-ui .json-schema-2020-12__attribute--muted{color:gray}.swagger-ui .json-schema-2020-12__attribute--warning{color:red}.swagger-ui .json-schema-2020-12-keyword--\\$vocabulary ul{border-left:1px dashed rgba(0,0,0,.1);margin:0 0 0 20px}.swagger-ui .json-schema-2020-12-\\$vocabulary-uri{margin-left:35px}.swagger-ui .json-schema-2020-12-\\$vocabulary-uri--disabled{-webkit-text-decoration:line-through;text-decoration:line-through}.swagger-ui .json-schema-2020-12-keyword--description{color:#6b6b6b;font-size:12px;margin-left:20px}.swagger-ui .json-schema-2020-12-keyword--description p{margin:0}.swagger-ui .json-schema-2020-12__title{color:#505050;display:inline-block;font-family:sans-serif;font-size:12px;font-weight:700;line-height:normal}.swagger-ui .json-schema-2020-12__title .json-schema-2020-12-keyword__name{margin:0}.swagger-ui .json-schema-2020-12-property{margin:7px 0}.swagger-ui .json-schema-2020-12-property .json-schema-2020-12__title{color:#3b4151;font-family:monospace;font-size:12px;font-weight:600;vertical-align:middle}.swagger-ui .json-schema-2020-12-keyword--properties>ul{border:none;margin:0;padding:0}.swagger-ui .json-schema-2020-12-property{list-style-type:none}.swagger-ui .json-schema-2020-12-property--required>.json-schema-2020-12:first-of-type>.json-schema-2020-12-head .json-schema-2020-12__title:after{color:red;content:\"*\";font-weight:700}.swagger-ui .json-schema-2020-12-keyword--patternProperties ul{border:none;margin:0;padding:0}.swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:first-of-type:after,.swagger-ui .json-schema-2020-12-keyword--patternProperties .json-schema-2020-12__title:first-of-type:before{color:#55a;content:\"/\"}.swagger-ui .json-schema-2020-12-keyword--enum>ul{display:inline-block;margin:0;padding:0}.swagger-ui .json-schema-2020-12-keyword--enum>ul li{display:inline;list-style-type:none}.swagger-ui .json-schema-2020-12__constraint{background-color:#805ad5;border-radius:4px;color:#3b4151;color:#fff;font-family:monospace;font-weight:600;line-height:1.5;margin-left:10px;padding:1px 3px}.swagger-ui .json-schema-2020-12__constraint--string{background-color:#d69e2e;color:#fff}.swagger-ui .json-schema-2020-12-keyword--dependentRequired>ul{display:inline-block;margin:0;padding:0}.swagger-ui .json-schema-2020-12-keyword--dependentRequired>ul li{display:inline;list-style-type:none}.swagger-ui .model-box .json-schema-2020-12:not(.json-schema-2020-12--embedded)>.json-schema-2020-12-head .json-schema-2020-12__title:first-of-type{font-size:16px}.swagger-ui .model-box>.json-schema-2020-12{margin:0}.swagger-ui .model-box .json-schema-2020-12{background-color:transparent;padding:0}.swagger-ui .model-box .json-schema-2020-12-accordion,.swagger-ui .model-box .json-schema-2020-12-expand-deep-button{background-color:transparent}.swagger-ui .models .json-schema-2020-12:not(.json-schema-2020-12--embedded)>.json-schema-2020-12-head .json-schema-2020-12__title:first-of-type{font-size:16px}\n\n/*# sourceMappingURL=swagger-ui.css.map*/"
  },
  {
    "path": "data/web/api/swagger-ui.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.SwaggerUICore=t():e.SwaggerUICore=t()}(this,(()=>(()=>{var e={6024:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>E});var s=n(4250),r=n.n(s),a=n(1093),o=n.n(a),l=n(8493),c=n.n(l),i=n(3942),u=n.n(i),p=n(6689),m=n.n(p);const d=require(\"react-immutable-pure-component\");var h=n.n(d),g=n(8082),f=n.n(g),y=n(580),S=n.n(y);const v=e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}};class E extends(h()){constructor(){super(...arguments),o()(this,\"getModelName\",(e=>-1!==c()(e).call(e,\"#/definitions/\")?v(e.replace(/^.*#\\/definitions\\//,\"\")):-1!==c()(e).call(e,\"#/components/schemas/\")?v(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):void 0)),o()(this,\"getRefSchema\",(e=>{let{specSelectors:t}=this.props;return t.findDefinition(e)}))}render(){let{getComponent:e,getConfigs:t,specSelectors:s,schema:a,required:o,name:l,isRef:c,specPath:i,displayName:u,includeReadOnly:p,includeWriteOnly:d}=this.props;const h=e(\"ObjectModel\"),g=e(\"ArrayModel\"),f=e(\"PrimitiveModel\");let y=\"object\",S=a&&a.get(\"$$ref\");if(!l&&S&&(l=this.getModelName(S)),!a&&S&&(a=this.getRefSchema(l)),!a)return m().createElement(\"span\",{className:\"model model-title\"},m().createElement(\"span\",{className:\"model-title__text\"},u||l),m().createElement(\"img\",{src:n(2517),height:\"20px\",width:\"20px\"}));const v=s.isOAS3()&&a.get(\"deprecated\");switch(c=void 0!==c?c:!!S,y=a&&a.get(\"type\")||y,y){case\"object\":return m().createElement(h,r()({className:\"object\"},this.props,{specPath:i,getConfigs:t,schema:a,name:l,deprecated:v,isRef:c,includeReadOnly:p,includeWriteOnly:d}));case\"array\":return m().createElement(g,r()({className:\"array\"},this.props,{getConfigs:t,schema:a,name:l,deprecated:v,required:o,includeReadOnly:p,includeWriteOnly:d}));default:return m().createElement(f,r()({},this.props,{getComponent:e,getConfigs:t,schema:a,name:l,deprecated:v,required:o}))}}}o()(E,\"propTypes\",{schema:u()(f()).isRequired,getComponent:S().func.isRequired,getConfigs:S().func.isRequired,specSelectors:S().object.isRequired,name:S().string,displayName:S().string,isRef:S().bool,required:S().bool,expandDepth:S().number,depth:S().number,specPath:f().list.isRequired,includeReadOnly:S().bool,includeWriteOnly:S().bool})},5623:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>d});var s=n(1093),r=n.n(s),a=n(7252),o=n.n(a),l=n(6689),c=n.n(l),i=n(3883),u=n.n(i),p=(n(580),n(1669)),m=n(7504);class d extends c().Component{constructor(e,t){super(e,t),r()(this,\"getDefinitionUrl\",(()=>{let{specSelectors:e}=this.props;return new(u())(e.url(),m.Z.location).toString()}));let{getConfigs:n}=e,{validatorUrl:s}=n();this.state={url:this.getDefinitionUrl(),validatorUrl:void 0===s?\"https://validator.swagger.io/validator\":s}}UNSAFE_componentWillReceiveProps(e){let{getConfigs:t}=e,{validatorUrl:n}=t();this.setState({url:this.getDefinitionUrl(),validatorUrl:void 0===n?\"https://validator.swagger.io/validator\":n})}render(){let{getConfigs:e}=this.props,{spec:t}=e(),n=(0,p.Nm)(this.state.validatorUrl);return\"object\"==typeof t&&o()(t).length?null:this.state.url&&(0,p.hW)(this.state.validatorUrl)&&(0,p.hW)(this.state.url)?c().createElement(\"span\",{className:\"float-right\"},c().createElement(\"a\",{target:\"_blank\",rel:\"noopener noreferrer\",href:`${n}/debug?url=${encodeURIComponent(this.state.url)}`},c().createElement(h,{src:`${n}?url=${encodeURIComponent(this.state.url)}`,alt:\"Online validator badge\"}))):null}}class h extends c().Component{constructor(e){super(e),this.state={loaded:!1,error:!1}}componentDidMount(){const e=new Image;e.onload=()=>{this.setState({loaded:!0})},e.onerror=()=>{this.setState({error:!0})},e.src=this.props.src}UNSAFE_componentWillReceiveProps(e){if(e.src!==this.props.src){const t=new Image;t.onload=()=>{this.setState({loaded:!0})},t.onerror=()=>{this.setState({error:!0})},t.src=e.src}}render(){return this.state.error?c().createElement(\"img\",{alt:\"Error\"}):this.state.loaded?c().createElement(\"img\",{src:this.props.src,alt:this.props.alt}):null}}},2552:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>m,s:()=>d});var s=n(6689),r=n.n(s),a=(n(580),n(963));const o=require(\"remarkable/linkify\"),l=require(\"dompurify\");var c=n.n(l),i=n(9003),u=n.n(i);function p(e){let{source:t,className:n=\"\",getConfigs:s}=e;if(\"string\"!=typeof t)return null;const l=new a.Remarkable({html:!0,typographer:!0,breaks:!0,linkTarget:\"_blank\"}).use(o.linkify);l.core.ruler.disable([\"replacements\",\"smartquotes\"]);const{useUnsafeMarkdown:c}=s(),i=l.render(t),p=d(i,{useUnsafeMarkdown:c});return t&&i&&p?r().createElement(\"div\",{className:u()(n,\"markdown\"),dangerouslySetInnerHTML:{__html:p}}):null}c().addHook&&c().addHook(\"beforeSanitizeElements\",(function(e){return e.href&&e.setAttribute(\"rel\",\"noopener noreferrer\"),e})),p.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const m=p;function d(e){let{useUnsafeMarkdown:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t,s=t?[]:[\"style\",\"class\"];return t&&!d.hasWarnedAboutDeprecation&&(console.warn(\"useUnsafeMarkdown display configuration parameter is deprecated since >3.26.0 and will be removed in v4.0.0.\"),d.hasWarnedAboutDeprecation=!0),c().sanitize(e,{ADD_ATTR:[\"target\"],FORBID_TAGS:[\"style\",\"form\"],ALLOW_DATA_ATTR:n,FORBID_ATTR:s})}d.hasWarnedAboutDeprecation=!1},5308:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>m});var s,r=n(4235),a=n.n(r),o=n(874),l=n.n(o),c=n(1669),i=n(9595);const u=n(5102),p={},m=p;a()(s=l()(u).call(u)).call(s,(function(e){if(\"./index.js\"===e)return;let t=u(e);p[(0,c.Zl)(e)]=t.default?t.default:t})),p.SafeRender=i.default},5812:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{AUTHORIZE:()=>m,AUTHORIZE_OAUTH2:()=>g,CONFIGURE_AUTH:()=>y,LOGOUT:()=>d,PRE_AUTHORIZE_OAUTH2:()=>h,RESTORE_AUTHORIZATION:()=>S,SHOW_AUTH_POPUP:()=>p,VALIDATE:()=>f,authPopup:()=>T,authorize:()=>E,authorizeAccessCodeWithBasicAuthentication:()=>A,authorizeAccessCodeWithFormParams:()=>k,authorizeApplication:()=>O,authorizeOauth2:()=>j,authorizeOauth2WithPersistOption:()=>_,authorizePassword:()=>N,authorizeRequest:()=>I,authorizeWithPersistOption:()=>x,configureAuth:()=>P,logout:()=>w,logoutWithPersistOption:()=>C,persistAuthorizationIfNeeded:()=>R,preAuthorizeImplicit:()=>b,restoreAuthorization:()=>q,showDefinitions:()=>v});var s=n(8344),r=n.n(s),a=n(4994),o=n.n(a),l=n(3883),c=n.n(l),i=n(7504),u=n(1669);const p=\"show_popup\",m=\"authorize\",d=\"logout\",h=\"pre_authorize_oauth2\",g=\"authorize_oauth2\",f=\"validate\",y=\"configure_auth\",S=\"restore_authorization\";function v(e){return{type:p,payload:e}}function E(e){return{type:m,payload:e}}const x=e=>t=>{let{authActions:n}=t;n.authorize(e),n.persistAuthorizationIfNeeded()};function w(e){return{type:d,payload:e}}const C=e=>t=>{let{authActions:n}=t;n.logout(e),n.persistAuthorizationIfNeeded()},b=e=>t=>{let{authActions:n,errActions:s}=t,{auth:a,token:o,isValid:l}=e,{schema:c,name:u}=a,p=c.get(\"flow\");delete i.Z.swaggerUIRedirectOauth2,\"accessCode\"===p||l||s.newAuthErr({authId:u,source:\"auth\",level:\"warning\",message:\"Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server\"}),o.error?s.newAuthErr({authId:u,source:\"auth\",level:\"error\",message:r()(o)}):n.authorizeOauth2WithPersistOption({auth:a,token:o})};function j(e){return{type:g,payload:e}}const _=e=>t=>{let{authActions:n}=t;n.authorizeOauth2(e),n.persistAuthorizationIfNeeded()},N=e=>t=>{let{authActions:n}=t,{schema:s,name:r,username:a,password:l,passwordType:c,clientId:i,clientSecret:p}=e,m={grant_type:\"password\",scope:e.scopes.join(\" \"),username:a,password:l},d={};switch(c){case\"request-body\":!function(e,t,n){t&&o()(e,{client_id:t});n&&o()(e,{client_secret:n})}(m,i,p);break;case\"basic\":d.Authorization=\"Basic \"+(0,u.r3)(i+\":\"+p);break;default:console.warn(`Warning: invalid passwordType ${c} was passed, not including client id and secret`)}return n.authorizeRequest({body:(0,u.GZ)(m),url:s.get(\"tokenUrl\"),name:r,headers:d,query:{},auth:e})};const O=e=>t=>{let{authActions:n}=t,{schema:s,scopes:r,name:a,clientId:o,clientSecret:l}=e,c={Authorization:\"Basic \"+(0,u.r3)(o+\":\"+l)},i={grant_type:\"client_credentials\",scope:r.join(\" \")};return n.authorizeRequest({body:(0,u.GZ)(i),name:a,url:s.get(\"tokenUrl\"),auth:e,headers:c})},k=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:s}=e,{schema:r,name:a,clientId:o,clientSecret:l,codeVerifier:c}=t,i={grant_type:\"authorization_code\",code:t.code,client_id:o,client_secret:l,redirect_uri:n,code_verifier:c};return s.authorizeRequest({body:(0,u.GZ)(i),name:a,url:r.get(\"tokenUrl\"),auth:t})}},A=e=>{let{auth:t,redirectUrl:n}=e;return e=>{let{authActions:s}=e,{schema:r,name:a,clientId:o,clientSecret:l,codeVerifier:c}=t,i={Authorization:\"Basic \"+(0,u.r3)(o+\":\"+l)},p={grant_type:\"authorization_code\",code:t.code,client_id:o,redirect_uri:n,code_verifier:c};return s.authorizeRequest({body:(0,u.GZ)(p),name:a,url:r.get(\"tokenUrl\"),auth:t,headers:i})}},I=e=>t=>{let n,{fn:s,getConfigs:a,authActions:l,errActions:i,oas3Selectors:u,specSelectors:p,authSelectors:m}=t,{body:d,query:h={},headers:g={},name:f,url:y,auth:S}=e,{additionalQueryStringParams:v}=m.getConfigs()||{};if(p.isOAS3()){let e=u.serverEffectiveValue(u.selectedServer());n=c()(y,e,!0)}else n=c()(y,p.url(),!0);\"object\"==typeof v&&(n.query=o()({},n.query,v));const E=n.toString();let x=o()({Accept:\"application/json, text/plain, */*\",\"Content-Type\":\"application/x-www-form-urlencoded\",\"X-Requested-With\":\"XMLHttpRequest\"},g);s.fetch({url:E,method:\"post\",headers:x,query:h,body:d,requestInterceptor:a().requestInterceptor,responseInterceptor:a().responseInterceptor}).then((function(e){let t=JSON.parse(e.data),n=t&&(t.error||\"\"),s=t&&(t.parseError||\"\");e.ok?n||s?i.newAuthErr({authId:f,level:\"error\",source:\"auth\",message:r()(t)}):l.authorizeOauth2WithPersistOption({auth:S,token:t}):i.newAuthErr({authId:f,level:\"error\",source:\"auth\",message:e.statusText})})).catch((e=>{let t=new Error(e).message;if(e.response&&e.response.data){const n=e.response.data;try{const e=\"string\"==typeof n?JSON.parse(n):n;e.error&&(t+=`, error: ${e.error}`),e.error_description&&(t+=`, description: ${e.error_description}`)}catch(e){}}i.newAuthErr({authId:f,level:\"error\",source:\"auth\",message:t})}))};function P(e){return{type:y,payload:e}}function q(e){return{type:S,payload:e}}const R=()=>e=>{let{authSelectors:t,getConfigs:n}=e;if(!n().persistAuthorization)return;const s=t.authorized().toJS();localStorage.setItem(\"authorized\",r()(s))},T=(e,t)=>()=>{i.Z.swaggerUIRedirectOauth2=t,i.Z.open(e)}},3779:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{loaded:()=>s});const s=(e,t)=>n=>{const{getConfigs:s,authActions:r}=t,a=s();if(e(n),a.persistAuthorization){const e=localStorage.getItem(\"authorized\");e&&r.restoreAuthorization({authorized:JSON.parse(e)})}}},3705:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p,preauthorizeApiKey:()=>d,preauthorizeBasic:()=>m});var s=n(593),r=n.n(s),a=n(3962),o=n(5812),l=n(35),c=n(489),i=n(3779),u=n(2849);function p(){return{afterLoad(e){this.rootInjects=this.rootInjects||{},this.rootInjects.initOAuth=e.authActions.configureAuth,this.rootInjects.preauthorizeApiKey=r()(d).call(d,null,e),this.rootInjects.preauthorizeBasic=r()(m).call(m,null,e)},statePlugins:{auth:{reducers:a.default,actions:o,selectors:l,wrapActions:{authorize:u.authorize,logout:u.logout}},configs:{wrapActions:{loaded:i.loaded}},spec:{wrapActions:{execute:c.execute}}}}}function m(e,t,n,s){const{authActions:{authorize:r},specSelectors:{specJson:a,isOAS3:o}}=e,l=o()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],c=a().getIn([...l,t]);return c?r({[t]:{value:{username:n,password:s},schema:c.toJS()}}):null}function d(e,t,n){const{authActions:{authorize:s},specSelectors:{specJson:r,isOAS3:a}}=e,o=a()?[\"components\",\"securitySchemes\"]:[\"securityDefinitions\"],l=r().getIn([...o,t]);return l?s({[t]:{value:n,schema:l.toJS()}}):null}},3962:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(4235),r=n.n(s),a=n(4994),o=n.n(a),l=n(5572),c=n(1669),i=n(5812);const u={[i.SHOW_AUTH_POPUP]:(e,t)=>{let{payload:n}=t;return e.set(\"showDefinitions\",n)},[i.AUTHORIZE]:(e,t)=>{var n;let{payload:s}=t,a=(0,l.fromJS)(s),o=e.get(\"authorized\")||(0,l.Map)();return r()(n=a.entrySeq()).call(n,(t=>{let[n,s]=t;if(!(0,c.Wl)(s.getIn))return e.set(\"authorized\",o);let r=s.getIn([\"schema\",\"type\"]);if(\"apiKey\"===r||\"http\"===r)o=o.set(n,s);else if(\"basic\"===r){let e=s.getIn([\"value\",\"username\"]),t=s.getIn([\"value\",\"password\"]);o=o.setIn([n,\"value\"],{username:e,header:\"Basic \"+(0,c.r3)(e+\":\"+t)}),o=o.setIn([n,\"schema\"],s.get(\"schema\"))}})),e.set(\"authorized\",o)},[i.AUTHORIZE_OAUTH2]:(e,t)=>{let n,{payload:s}=t,{auth:r,token:a}=s;r.token=o()({},a),n=(0,l.fromJS)(r);let c=e.get(\"authorized\")||(0,l.Map)();return c=c.set(n.get(\"name\"),n),e.set(\"authorized\",c)},[i.LOGOUT]:(e,t)=>{let{payload:n}=t,s=e.get(\"authorized\").withMutations((e=>{r()(n).call(n,(t=>{e.delete(t)}))}));return e.set(\"authorized\",s)},[i.CONFIGURE_AUTH]:(e,t)=>{let{payload:n}=t;return e.set(\"configs\",n)},[i.RESTORE_AUTHORIZATION]:(e,t)=>{let{payload:n}=t;return e.set(\"authorized\",(0,l.fromJS)(n.authorized))}}},35:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{authorized:()=>w,definitionsForRequirements:()=>x,definitionsToAuthorize:()=>v,getConfigs:()=>b,getDefinitionsByNames:()=>E,isAuthorized:()=>C,shownDefinitions:()=>S});var s=n(4235),r=n.n(s),a=n(3580),o=n.n(a),l=n(9998),c=n.n(l),i=n(8493),u=n.n(i),p=n(3942),m=n.n(p),d=n(7252),h=n.n(d),g=n(6814),f=n(5572);const y=e=>e,S=(0,g.createSelector)(y,(e=>e.get(\"showDefinitions\"))),v=(0,g.createSelector)(y,(()=>e=>{var t;let{specSelectors:n}=e,s=n.securityDefinitions()||(0,f.Map)({}),a=(0,f.List)();return r()(t=s.entrySeq()).call(t,(e=>{let[t,n]=e,s=(0,f.Map)();s=s.set(t,n),a=a.push(s)})),a})),E=(e,t)=>e=>{var n;let{specSelectors:s}=e;console.warn(\"WARNING: getDefinitionsByNames is deprecated and will be removed in the next major version.\");let a=s.securityDefinitions(),o=(0,f.List)();return r()(n=t.valueSeq()).call(n,(e=>{var t;let n=(0,f.Map)();r()(t=e.entrySeq()).call(t,(e=>{let t,[s,o]=e,l=a.get(s);var c;\"oauth2\"===l.get(\"type\")&&o.size&&(t=l.get(\"scopes\"),r()(c=t.keySeq()).call(c,(e=>{o.contains(e)||(t=t.delete(e))})),l=l.set(\"allowedScopes\",t));n=n.set(s,l)})),o=o.push(n)})),o},x=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,f.List)();return e=>{let{authSelectors:n}=e;const s=n.definitionsToAuthorize()||(0,f.List)();let a=(0,f.List)();return r()(s).call(s,(e=>{let n=o()(t).call(t,(t=>t.get(e.keySeq().first())));n&&(r()(e).call(e,((t,s)=>{if(\"oauth2\"===t.get(\"type\")){const o=n.get(s);let l=t.get(\"scopes\");var a;if(f.List.isList(o)&&f.Map.isMap(l))r()(a=l.keySeq()).call(a,(e=>{o.contains(e)||(l=l.delete(e))})),e=e.set(s,t.set(\"scopes\",l))}})),a=a.push(e))})),a}},w=(0,g.createSelector)(y,(e=>e.get(\"authorized\")||(0,f.Map)())),C=(e,t)=>e=>{var n;let{authSelectors:s}=e,r=s.authorized();return f.List.isList(t)?!!c()(n=t.toJS()).call(n,(e=>{var t,n;return-1===u()(t=m()(n=h()(e)).call(n,(e=>!!r.get(e)))).call(t,!1)})).length:null},b=(0,g.createSelector)(y,(e=>e.get(\"configs\")))},489:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{execute:()=>s});const s=(e,t)=>{let{authSelectors:n,specSelectors:s}=t;return t=>{let{path:r,method:a,operation:o,extras:l}=t,c={authorized:n.authorized()&&n.authorized().toJS(),definitions:s.securityDefinitions()&&s.securityDefinitions().toJS(),specSecurity:s.security()&&s.security().toJS()};return e({path:r,method:a,operation:o,securities:c,...l})}}},2849:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{authorize:()=>i,logout:()=>u});var s=n(9968),r=n.n(s),a=n(7104),o=n.n(a),l=n(4235),c=n.n(l);const i=(e,t)=>n=>{e(n);if(t.getConfigs().persistAuthorization)try{const[{schema:e,value:t}]=r()(n),s=\"apiKey\"===e.get(\"type\"),a=\"cookie\"===e.get(\"in\");s&&a&&(document.cookie=`${e.get(\"name\")}=${t}; SameSite=None; Secure`)}catch(e){console.error(\"Error persisting cookie based apiKey in document.cookie.\",e)}},u=(e,t)=>n=>{const s=t.getConfigs(),r=t.authSelectors.authorized();try{s.persistAuthorization&&o()(n)&&c()(n).call(n,(e=>{const t=r.get(e,{}),n=\"apiKey\"===t.getIn([\"schema\",\"type\"]),s=\"cookie\"===t.getIn([\"schema\",\"in\"]);if(n&&s){const e=t.getIn([\"schema\",\"name\"]);document.cookie=`${e}=; Max-Age=-99999999`}}))}catch(e){console.error(\"Error deleting cookie based apiKey from document.cookie.\",e)}e(n)}},714:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{TOGGLE_CONFIGS:()=>r,UPDATE_CONFIGS:()=>s,loaded:()=>l,toggle:()=>o,update:()=>a});const s=\"configs_update\",r=\"configs_toggle\";function a(e,t){return{type:s,payload:{[e]:t}}}function o(e){return{type:r,payload:e}}const l=()=>()=>{}},2256:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{parseYamlConfig:()=>a});var s=n(9793),r=n.n(s);const a=(e,t)=>{try{return r().load(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},6709:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(2256),r=n(714),a=n(2698),o=n(9018),l=n(7743);const c={getLocalConfig:()=>(0,s.parseYamlConfig)('---\\nurl: \"https://petstore.swagger.io/v2/swagger.json\"\\ndom_id: \"#swagger-ui\"\\nvalidatorUrl: \"https://validator.swagger.io/validator\"\\n')};function i(){return{statePlugins:{spec:{actions:a,selectors:c},configs:{reducers:l.default,actions:r,selectors:o}}}}},7743:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(5572),r=n(714);const a={[r.UPDATE_CONFIGS]:(e,t)=>e.merge((0,s.fromJS)(t.payload)),[r.TOGGLE_CONFIGS]:(e,t)=>{const n=t.payload,s=e.get(n);return e.set(n,!s)}}},9018:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{get:()=>a});var s=n(7104),r=n.n(s);const a=(e,t)=>e.getIn(r()(t)?t:[t])},2698:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{downloadConfig:()=>r,getConfigByUrl:()=>a});var s=n(2256);const r=e=>t=>{const{fn:{fetch:n}}=t;return n(e)},a=(e,t)=>n=>{let{specActions:r}=n;if(e)return r.downloadConfig(e).then(a,a);function a(n){n instanceof Error||n.status>=400?(r.updateLoadingStatus(\"failedConfig\"),r.updateLoadingStatus(\"failedConfig\"),r.updateUrl(\"\"),console.error(n.statusText+\" \"+e.url),t(null)):t((0,s.parseYamlConfig)(n.text))}}},1970:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{setHash:()=>s});const s=e=>e?history.pushState(null,null,`#${e}`):window.location.hash=\"\"},4980:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(2179),r=n(877),a=n(4584);function o(){return[s.default,{statePlugins:{configs:{wrapActions:{loaded:(e,t)=>function(){e(...arguments);const n=decodeURIComponent(window.location.hash);t.layoutActions.parseDeepLinkHash(n)}}}},wrapComponents:{operation:r.default,OperationTag:a.default}}]}},2179:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{clearScrollTo:()=>b,default:()=>j,parseDeepLinkHash:()=>x,readyToScroll:()=>w,scrollTo:()=>E,scrollToElement:()=>C,show:()=>v});var s=n(7104),r=n.n(s),a=n(600),o=n.n(a),l=n(3942),c=n.n(l),i=n(8493),u=n.n(i),p=n(1970);const m=require(\"zenscroll\");var d=n.n(m),h=n(1669),g=n(5572),f=n.n(g);const y=\"layout_scroll_to\",S=\"layout_clear_scroll\",v=(e,t)=>{let{getConfigs:n,layoutSelectors:s}=t;return function(){for(var t=arguments.length,a=new Array(t),o=0;o<t;o++)a[o]=arguments[o];if(e(...a),n().deepLinking)try{let[e,t]=a;e=r()(e)?e:[e];const n=s.urlHashArrayFromIsShownKey(e);if(!n.length)return;const[o,l]=n;if(!t)return(0,p.setHash)(\"/\");2===n.length?(0,p.setHash)((0,h.oJ)(`/${encodeURIComponent(o)}/${encodeURIComponent(l)}`)):1===n.length&&(0,p.setHash)((0,h.oJ)(`/${encodeURIComponent(o)}`))}catch(e){console.error(e)}}},E=e=>({type:y,payload:r()(e)?e:[e]}),x=e=>t=>{let{layoutActions:n,layoutSelectors:s,getConfigs:r}=t;if(r().deepLinking&&e){var a;let t=o()(e).call(e,1);\"!\"===t[0]&&(t=o()(t).call(t,1)),\"/\"===t[0]&&(t=o()(t).call(t,1));const r=c()(a=t.split(\"/\")).call(a,(e=>e||\"\")),l=s.isShownKeyFromUrlHashArray(r),[i,p=\"\",m=\"\"]=l;if(\"operations\"===i){const e=s.isShownKeyFromUrlHashArray([p]);u()(p).call(p,\"_\")>-1&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),n.show(c()(e).call(e,(e=>e.replace(/_/g,\" \"))),!0)),n.show(e,!0)}(u()(p).call(p,\"_\")>-1||u()(m).call(m,\"_\")>-1)&&(console.warn(\"Warning: escaping deep link whitespace with `_` will be unsupported in v4.0, use `%20` instead.\"),n.show(c()(l).call(l,(e=>e.replace(/_/g,\" \"))),!0)),n.show(l,!0),n.scrollTo(l)}},w=(e,t)=>n=>{const s=n.layoutSelectors.getScrollToKey();f().is(s,(0,g.fromJS)(e))&&(n.layoutActions.scrollToElement(t),n.layoutActions.clearScrollTo())},C=(e,t)=>n=>{try{t=t||n.fn.getScrollParent(e),d().createScroller(t).to(e)}catch(e){console.error(e)}},b=()=>({type:S});const j={fn:{getScrollParent:function(e,t){const n=document.documentElement;let s=getComputedStyle(e);const r=\"absolute\"===s.position,a=t?/(auto|scroll|hidden)/:/(auto|scroll)/;if(\"fixed\"===s.position)return n;for(let t=e;t=t.parentElement;)if(s=getComputedStyle(t),(!r||\"static\"!==s.position)&&a.test(s.overflow+s.overflowY+s.overflowX))return t;return n}},statePlugins:{layout:{actions:{scrollToElement:C,scrollTo:E,clearScrollTo:b,readyToScroll:w,parseDeepLinkHash:x},selectors:{getScrollToKey:e=>e.get(\"scrollToKey\"),isShownKeyFromUrlHashArray(e,t){const[n,s]=t;return s?[\"operations\",n,s]:n?[\"operations-tag\",n]:[]},urlHashArrayFromIsShownKey(e,t){let[n,s,r]=t;return\"operations\"==n?[s,r]:\"operations-tag\"==n?[s]:[]}},reducers:{[y]:(e,t)=>e.set(\"scrollToKey\",f().fromJS(t.payload)),[S]:e=>e.delete(\"scrollToKey\")},wrapActions:{show:v}}}}},4584:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(1093),r=n.n(s),a=n(6689),o=n.n(a);n(580);const l=(e,t)=>class extends o().Component{constructor(){super(...arguments),r()(this,\"onLoad\",(e=>{const{tag:n}=this.props,s=[\"operations-tag\",n];t.layoutActions.readyToScroll(s,e)}))}render(){return o().createElement(\"span\",{ref:this.onLoad},o().createElement(e,this.props))}}},877:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(1093),r=n.n(s),a=n(6689),o=n.n(a);n(8082);const l=(e,t)=>class extends o().Component{constructor(){super(...arguments),r()(this,\"onLoad\",(e=>{const{operation:n}=this.props,{tag:s,operationId:r}=n.toObject();let{isShownKey:a}=n.toObject();a=a||[\"operations\",s,r],t.layoutActions.readyToScroll(a,e)}))}render(){return o().createElement(\"span\",{ref:this.onLoad},o().createElement(e,this.props))}}},8011:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var s=n(4994),r=n.n(s),a=n(9478),o=n.n(a),l=n(8493),c=n.n(l),i=n(8344),u=n.n(i),p=n(6814),m=n(5572),d=n(7504);function h(e){let{fn:t}=e;return{statePlugins:{spec:{actions:{download:e=>n=>{let{errActions:s,specSelectors:a,specActions:l,getConfigs:c}=n,{fetch:i}=t;const u=c();function p(t){if(t instanceof Error||t.status>=400)return l.updateLoadingStatus(\"failed\"),s.newThrownErr(r()(new Error((t.message||t.statusText)+\" \"+e),{source:\"fetch\"})),void(!t.status&&t instanceof Error&&function(){try{let t;if(\"URL\"in d.Z?t=new(o())(e):(t=document.createElement(\"a\"),t.href=e),\"https:\"!==t.protocol&&\"https:\"===d.Z.location.protocol){const e=r()(new Error(`Possible mixed-content issue? The page was loaded over https:// but a ${t.protocol}// URL was specified. Check that you are not attempting to load mixed content.`),{source:\"fetch\"});return void s.newThrownErr(e)}if(t.origin!==d.Z.location.origin){const e=r()(new Error(`Possible cross-origin (CORS) issue? The URL origin (${t.origin}) does not match the page (${d.Z.location.origin}). Check the server returns the correct 'Access-Control-Allow-*' headers.`),{source:\"fetch\"});s.newThrownErr(e)}}catch(e){return}}());l.updateLoadingStatus(\"success\"),l.updateSpec(t.text),a.url()!==e&&l.updateUrl(e)}e=e||a.url(),l.updateLoadingStatus(\"loading\"),s.clear({source:\"fetch\"}),i({url:e,loadSpec:!0,requestInterceptor:u.requestInterceptor||(e=>e),responseInterceptor:u.responseInterceptor||(e=>e),credentials:\"same-origin\",headers:{Accept:\"application/json,*/*\"}}).then(p,p)},updateLoadingStatus:e=>{let t=[null,\"loading\",\"failed\",\"success\",\"failedConfig\"];return-1===c()(t).call(t,e)&&console.error(`Error: ${e} is not one of ${u()(t)}`),{type:\"spec_update_loading_status\",payload:e}}},reducers:{spec_update_loading_status:(e,t)=>\"string\"==typeof t.payload?e.set(\"loadingStatus\",t.payload):e},selectors:{loadingStatus:(0,p.createSelector)((e=>e||(0,m.Map)()),(e=>e.get(\"loadingStatus\")||null))}}}}}},4966:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR:()=>i,CLEAR_BY:()=>u,NEW_AUTH_ERR:()=>c,NEW_SPEC_ERR:()=>o,NEW_SPEC_ERR_BATCH:()=>l,NEW_THROWN_ERR:()=>r,NEW_THROWN_ERR_BATCH:()=>a,clear:()=>f,clearBy:()=>y,newAuthErr:()=>g,newSpecErr:()=>d,newSpecErrBatch:()=>h,newThrownErr:()=>p,newThrownErrBatch:()=>m});var s=n(41);const r=\"err_new_thrown_err\",a=\"err_new_thrown_err_batch\",o=\"err_new_spec_err\",l=\"err_new_spec_err_batch\",c=\"err_new_auth_err\",i=\"err_clear\",u=\"err_clear_by\";function p(e){return{type:r,payload:(0,s.serializeError)(e)}}function m(e){return{type:a,payload:e}}function d(e){return{type:o,payload:e}}function h(e){return{type:l,payload:e}}function g(e){return{type:c,payload:e}}function f(){return{type:i,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}}}function y(){return{type:u,payload:arguments.length>0&&void 0!==arguments[0]?arguments[0]:()=>!0}}},2860:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(9998),r=n.n(s),a=n(3942),o=n.n(a);const l=require(\"lodash/reduce\");var c=n.n(l);const i=[n(2392),n(1835)];function u(e){var t;let n={jsSpec:{}},s=c()(i,((e,t)=>{try{let s=t.transform(e,n);return r()(s).call(s,(e=>!!e))}catch(t){return console.error(\"Transformer error:\",t),e}}),e);return o()(t=r()(s).call(s,(e=>!!e))).call(t,(e=>(!e.get(\"line\")&&e.get(\"path\"),e)))}},2392:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{transform:()=>p});var s=n(3942),r=n.n(s),a=n(8493),o=n.n(a),l=n(600),c=n.n(l),i=n(66),u=n.n(i);function p(e){return r()(e).call(e,(e=>{var t;let n=\"is not of a type(s)\",s=o()(t=e.get(\"message\")).call(t,n);if(s>-1){var r,a;let t=c()(r=e.get(\"message\")).call(r,s+19).split(\",\");return e.set(\"message\",c()(a=e.get(\"message\")).call(a,0,s)+function(e){return u()(e).call(e,((e,t,n,s)=>n===s.length-1&&s.length>1?e+\"or \"+t:s[n+1]&&s.length>2?e+t+\", \":s[n+1]?e+t+\" \":e+t),\"should be a\")}(t))}return e}))}},1835:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{transform:()=>s});n(3942),n(8493),n(1712),n(5572);function s(e,t){let{jsSpec:n}=t;return e}},7793:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(3527),r=n(4966),a=n(7667);function o(e){return{statePlugins:{err:{reducers:(0,s.default)(e),actions:r,selectors:a}}}}},3527:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y});var s=n(4994),r=n.n(s),a=n(3942),o=n.n(a),l=n(4883),c=n.n(l),i=n(9998),u=n.n(i),p=n(7834),m=n.n(p),d=n(4966),h=n(5572),g=n(2860);let f={line:0,level:\"error\",message:\"Unknown error\"};function y(){return{[d.NEW_THROWN_ERR]:(e,t)=>{let{payload:n}=t,s=r()(f,n,{type:\"thrown\"});return e.update(\"errors\",(e=>(e||(0,h.List)()).push((0,h.fromJS)(s)))).update(\"errors\",(e=>(0,g.default)(e)))},[d.NEW_THROWN_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=o()(n).call(n,(e=>(0,h.fromJS)(r()(f,e,{type:\"thrown\"})))),e.update(\"errors\",(e=>{var t;return c()(t=e||(0,h.List)()).call(t,(0,h.fromJS)(n))})).update(\"errors\",(e=>(0,g.default)(e)))},[d.NEW_SPEC_ERR]:(e,t)=>{let{payload:n}=t,s=(0,h.fromJS)(n);return s=s.set(\"type\",\"spec\"),e.update(\"errors\",(e=>(e||(0,h.List)()).push((0,h.fromJS)(s)).sortBy((e=>e.get(\"line\"))))).update(\"errors\",(e=>(0,g.default)(e)))},[d.NEW_SPEC_ERR_BATCH]:(e,t)=>{let{payload:n}=t;return n=o()(n).call(n,(e=>(0,h.fromJS)(r()(f,e,{type:\"spec\"})))),e.update(\"errors\",(e=>{var t;return c()(t=e||(0,h.List)()).call(t,(0,h.fromJS)(n))})).update(\"errors\",(e=>(0,g.default)(e)))},[d.NEW_AUTH_ERR]:(e,t)=>{let{payload:n}=t,s=(0,h.fromJS)(r()({},n));return s=s.set(\"type\",\"auth\"),e.update(\"errors\",(e=>(e||(0,h.List)()).push((0,h.fromJS)(s)))).update(\"errors\",(e=>(0,g.default)(e)))},[d.CLEAR]:(e,t)=>{var n;let{payload:s}=t;if(!s||!e.get(\"errors\"))return e;let r=u()(n=e.get(\"errors\")).call(n,(e=>{var t;return m()(t=e.keySeq()).call(t,(t=>{const n=e.get(t),r=s[t];return!r||n!==r}))}));return e.merge({errors:r})},[d.CLEAR_BY]:(e,t)=>{var n;let{payload:s}=t;if(!s||\"function\"!=typeof s)return e;let r=u()(n=e.get(\"errors\")).call(n,(e=>s(e)));return e.merge({errors:r})}}}},7667:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{allErrors:()=>a,lastError:()=>o});var s=n(5572),r=n(6814);const a=(0,r.createSelector)((e=>e),(e=>e.get(\"errors\",(0,s.List)()))),o=(0,r.createSelector)(a,(e=>e.last()))},9978:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(4309);function r(){return{fn:{opsFilter:s.default}}}},4309:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(9998),r=n.n(s),a=n(8493),o=n.n(a);function l(e,t){return r()(e).call(e,((e,n)=>-1!==o()(n).call(n,t)))}},7349:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(6689),r=n.n(s),a=(n(580),n(9003)),o=n.n(a),l=n(2603);const c=e=>{let{expanded:t,children:n,onChange:a}=e;const c=(0,l.useComponent)(\"ChevronRightIcon\"),i=(0,s.useCallback)((e=>{a(e,!t)}),[t,a]);return r().createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-accordion\",onClick:i},r().createElement(\"div\",{className:\"json-schema-2020-12-accordion__children\"},n),r().createElement(\"span\",{className:o()(\"json-schema-2020-12-accordion__icon\",{\"json-schema-2020-12-accordion__icon--expanded\":t,\"json-schema-2020-12-accordion__icon--collapsed\":!t})},r().createElement(c,null)))};c.defaultProps={expanded:!1};const i=c},6867:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(580);const a=e=>{let{expanded:t,onClick:n}=e;const a=(0,s.useCallback)((e=>{n(e,!t)}),[t,n]);return r().createElement(\"button\",{type:\"button\",className:\"json-schema-2020-12-expand-deep-button\",onClick:a},t?\"Collapse all\":\"Expand all\")}},2675:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>m});var s=n(3942),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(9003)),c=n.n(l),i=(n(6648),n(2603)),u=n(9006);const p=(0,a.forwardRef)(((e,t)=>{let{schema:n,name:s,dependentRequired:l,onExpand:p}=e;const m=(0,i.useFn)(),d=(0,i.useIsExpanded)(),h=(0,i.useIsExpandedDeeply)(),[g,f]=(0,a.useState)(d||h),[y,S]=(0,a.useState)(h),[v,E]=(0,i.useLevel)(),x=(0,i.useIsEmbedded)(),w=m.isExpandable(n)||l.length>0,C=(0,i.useIsCircular)(n),b=(0,i.useRenderedSchemas)(n),j=m.stringifyConstraints(n),_=(0,i.useComponent)(\"Accordion\"),N=(0,i.useComponent)(\"Keyword$schema\"),O=(0,i.useComponent)(\"Keyword$vocabulary\"),k=(0,i.useComponent)(\"Keyword$id\"),A=(0,i.useComponent)(\"Keyword$anchor\"),I=(0,i.useComponent)(\"Keyword$dynamicAnchor\"),P=(0,i.useComponent)(\"Keyword$ref\"),q=(0,i.useComponent)(\"Keyword$dynamicRef\"),R=(0,i.useComponent)(\"Keyword$defs\"),T=(0,i.useComponent)(\"Keyword$comment\"),M=(0,i.useComponent)(\"KeywordAllOf\"),D=(0,i.useComponent)(\"KeywordAnyOf\"),J=(0,i.useComponent)(\"KeywordOneOf\"),$=(0,i.useComponent)(\"KeywordNot\"),K=(0,i.useComponent)(\"KeywordIf\"),L=(0,i.useComponent)(\"KeywordThen\"),V=(0,i.useComponent)(\"KeywordElse\"),U=(0,i.useComponent)(\"KeywordDependentSchemas\"),F=(0,i.useComponent)(\"KeywordPrefixItems\"),z=(0,i.useComponent)(\"KeywordItems\"),B=(0,i.useComponent)(\"KeywordContains\"),W=(0,i.useComponent)(\"KeywordProperties\"),H=(0,i.useComponent)(\"KeywordPatternProperties\"),G=(0,i.useComponent)(\"KeywordAdditionalProperties\"),Z=(0,i.useComponent)(\"KeywordPropertyNames\"),X=(0,i.useComponent)(\"KeywordUnevaluatedItems\"),Y=(0,i.useComponent)(\"KeywordUnevaluatedProperties\"),Q=(0,i.useComponent)(\"KeywordType\"),ee=(0,i.useComponent)(\"KeywordEnum\"),te=(0,i.useComponent)(\"KeywordConst\"),ne=(0,i.useComponent)(\"KeywordConstraint\"),se=(0,i.useComponent)(\"KeywordDependentRequired\"),re=(0,i.useComponent)(\"KeywordContentSchema\"),ae=(0,i.useComponent)(\"KeywordTitle\"),oe=(0,i.useComponent)(\"KeywordDescription\"),le=(0,i.useComponent)(\"KeywordDefault\"),ce=(0,i.useComponent)(\"KeywordDeprecated\"),ie=(0,i.useComponent)(\"KeywordReadOnly\"),ue=(0,i.useComponent)(\"KeywordWriteOnly\"),pe=(0,i.useComponent)(\"ExpandDeepButton\");(0,a.useEffect)((()=>{S(h)}),[h]),(0,a.useEffect)((()=>{S(y)}),[y]);const me=(0,a.useCallback)(((e,t)=>{f(t),!t&&S(!1),p(e,t,!1)}),[p]),de=(0,a.useCallback)(((e,t)=>{f(t),S(t),p(e,t,!0)}),[p]);return o().createElement(u.JSONSchemaLevelContext.Provider,{value:E},o().createElement(u.JSONSchemaDeepExpansionContext.Provider,{value:y},o().createElement(u.JSONSchemaCyclesContext.Provider,{value:b},o().createElement(\"article\",{ref:t,\"data-json-schema-level\":v,className:c()(\"json-schema-2020-12\",{\"json-schema-2020-12--embedded\":x,\"json-schema-2020-12--circular\":C})},o().createElement(\"div\",{className:\"json-schema-2020-12-head\"},w&&!C?o().createElement(o().Fragment,null,o().createElement(_,{expanded:g,onChange:me},o().createElement(ae,{title:s,schema:n})),o().createElement(pe,{expanded:g,onClick:de})):o().createElement(ae,{title:s,schema:n}),o().createElement(ce,{schema:n}),o().createElement(ie,{schema:n}),o().createElement(ue,{schema:n}),o().createElement(Q,{schema:n,isCircular:C}),j.length>0&&r()(j).call(j,(e=>o().createElement(ne,{key:`${e.scope}-${e.value}`,constraint:e})))),o().createElement(\"div\",{className:c()(\"json-schema-2020-12-body\",{\"json-schema-2020-12-body--collapsed\":!g})},g&&o().createElement(o().Fragment,null,o().createElement(oe,{schema:n}),!C&&w&&o().createElement(o().Fragment,null,o().createElement(W,{schema:n}),o().createElement(H,{schema:n}),o().createElement(G,{schema:n}),o().createElement(Y,{schema:n}),o().createElement(Z,{schema:n}),o().createElement(M,{schema:n}),o().createElement(D,{schema:n}),o().createElement(J,{schema:n}),o().createElement($,{schema:n}),o().createElement(K,{schema:n}),o().createElement(L,{schema:n}),o().createElement(V,{schema:n}),o().createElement(U,{schema:n}),o().createElement(F,{schema:n}),o().createElement(z,{schema:n}),o().createElement(X,{schema:n}),o().createElement(B,{schema:n}),o().createElement(re,{schema:n})),o().createElement(ee,{schema:n}),o().createElement(te,{schema:n}),o().createElement(se,{schema:n,dependentRequired:l}),o().createElement(le,{schema:n}),o().createElement(N,{schema:n}),o().createElement(O,{schema:n}),o().createElement(k,{schema:n}),o().createElement(A,{schema:n}),o().createElement(I,{schema:n}),o().createElement(P,{schema:n}),!C&&w&&o().createElement(R,{schema:n}),o().createElement(q,{schema:n}),o().createElement(T,{schema:n})))))))}));p.defaultProps={name:\"\",dependentRequired:[],onExpand:()=>{}};const m=p},2260:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=()=>r().createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\"},r().createElement(\"path\",{d:\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"}))},4922:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$anchor?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$anchor\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$anchor\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$anchor)):null}},4685:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$comment?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$comment\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$comment\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$comment)):null}},6418:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>g});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(1815),c=n.n(l),i=n(6689),u=n.n(i),p=n(9003),m=n.n(p),d=(n(6648),n(2603)),h=n(9006);const g=e=>{var t;let{schema:n}=e;const s=(null==n?void 0:n.$defs)||{},a=(0,d.useIsExpandedDeeply)(),[l,p]=(0,i.useState)(a),[g,f]=(0,i.useState)(!1),y=(0,d.useComponent)(\"Accordion\"),S=(0,d.useComponent)(\"ExpandDeepButton\"),v=(0,d.useComponent)(\"JSONSchema\"),E=(0,i.useCallback)((()=>{p((e=>!e))}),[]),x=(0,i.useCallback)(((e,t)=>{p(t),f(t)}),[]);return 0===r()(s).length?null:u().createElement(h.JSONSchemaDeepExpansionContext.Provider,{value:g},u().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$defs\"},u().createElement(y,{expanded:l,onChange:E},u().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$defs\")),u().createElement(S,{expanded:l,onClick:x}),u().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),u().createElement(\"ul\",{className:m()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&u().createElement(u().Fragment,null,o()(t=c()(s)).call(t,(e=>{let[t,n]=e;return u().createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},u().createElement(v,{name:t,schema:n}))}))))))}},1338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$dynamicAnchor?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicAnchor\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicAnchor\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicAnchor)):null}},7655:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$dynamicRef?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$dynamicRef\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$dynamicRef\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$dynamicRef)):null}},3460:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$id?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$id\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$id\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$id)):null}},2348:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$ref?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$ref\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$ref\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$ref)):null}},9359:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.$schema?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$schema\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$schema\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t.$schema)):null}},7568:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>m});var s=n(3942),r=n.n(s),a=n(1815),o=n.n(a),l=n(6689),c=n.n(l),i=n(9003),u=n.n(i),p=(n(6648),n(2603));const m=e=>{var t;let{schema:n}=e;const s=(0,p.useIsExpandedDeeply)(),[a,i]=(0,l.useState)(s),m=(0,p.useComponent)(\"Accordion\"),d=(0,l.useCallback)((()=>{i((e=>!e))}),[]);return null!=n&&n.$vocabulary?\"object\"!=typeof n.$vocabulary?null:c().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--$vocabulary\"},c().createElement(m,{expanded:a,onChange:d},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"$vocabulary\")),c().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),c().createElement(\"ul\",null,a&&r()(t=o()(n.$vocabulary)).call(t,(e=>{let[t,n]=e;return c().createElement(\"li\",{key:t,className:u()(\"json-schema-2020-12-$vocabulary-uri\",{\"json-schema-2020-12-$vocabulary-uri--disabled\":!n})},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},t))})))):null}},5253:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),{additionalProperties:s}=t,o=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"additionalProperties\"))return null;const l=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Additional properties\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--additionalProperties\"},!0===s?r().createElement(r().Fragment,null,l,r().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"allowed\")):!1===s?r().createElement(r().Fragment,null,l,r().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"forbidden\")):r().createElement(o,{name:l,schema:s}))}},6457:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l),i=n(9003),u=n.n(i),p=(n(6648),n(2603)),m=n(9006);const d=e=>{let{schema:t}=e;const n=(null==t?void 0:t.allOf)||[],s=(0,p.useFn)(),a=(0,p.useIsExpandedDeeply)(),[i,d]=(0,l.useState)(a),[h,g]=(0,l.useState)(!1),f=(0,p.useComponent)(\"Accordion\"),y=(0,p.useComponent)(\"ExpandDeepButton\"),S=(0,p.useComponent)(\"JSONSchema\"),v=(0,p.useComponent)(\"KeywordType\"),E=(0,l.useCallback)((()=>{d((e=>!e))}),[]),x=(0,l.useCallback)(((e,t)=>{d(t),g(t)}),[]);return r()(n)&&0!==n.length?c().createElement(m.JSONSchemaDeepExpansionContext.Provider,{value:h},c().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--allOf\"},c().createElement(f,{expanded:i,onChange:E},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"All of\")),c().createElement(y,{expanded:i,onClick:x}),c().createElement(v,{schema:{allOf:n}}),c().createElement(\"ul\",{className:u()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!i})},i&&c().createElement(c().Fragment,null,o()(n).call(n,((e,t)=>c().createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},c().createElement(S,{name:`#${t} ${s.getTitle(e)}`,schema:e})))))))):null}},8776:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l),i=n(9003),u=n.n(i),p=(n(6648),n(2603)),m=n(9006);const d=e=>{let{schema:t}=e;const n=(null==t?void 0:t.anyOf)||[],s=(0,p.useFn)(),a=(0,p.useIsExpandedDeeply)(),[i,d]=(0,l.useState)(a),[h,g]=(0,l.useState)(!1),f=(0,p.useComponent)(\"Accordion\"),y=(0,p.useComponent)(\"ExpandDeepButton\"),S=(0,p.useComponent)(\"JSONSchema\"),v=(0,p.useComponent)(\"KeywordType\"),E=(0,l.useCallback)((()=>{d((e=>!e))}),[]),x=(0,l.useCallback)(((e,t)=>{d(t),g(t)}),[]);return r()(n)&&0!==n.length?c().createElement(m.JSONSchemaDeepExpansionContext.Provider,{value:h},c().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--anyOf\"},c().createElement(f,{expanded:i,onChange:E},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Any of\")),c().createElement(y,{expanded:i,onClick:x}),c().createElement(v,{schema:{anyOf:n}}),c().createElement(\"ul\",{className:u()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!i})},i&&c().createElement(c().Fragment,null,o()(n).call(n,((e,t)=>c().createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},c().createElement(S,{name:`#${t} ${s.getTitle(e)}`,schema:e})))))))):null}},7308:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)();return n.hasKeyword(t,\"const\")?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--const\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Const\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},n.stringify(t.const))):null}},9956:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s);n(580);const a=e=>{let{constraint:t}=e;return r().createElement(\"span\",{className:`json-schema-2020-12__constraint json-schema-2020-12__constraint--${t.scope}`},t.value)},o=r().memo(a)},8993:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"contains\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Contains\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contains\"},r().createElement(s,{name:o,schema:t.contains}))}},3484:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"contentSchema\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Content schema\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--contentSchema\"},r().createElement(s,{name:o,schema:t.contentSchema}))}},5148:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)();return n.hasKeyword(t,\"default\")?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--default\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Default\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},n.stringify(t.default))):null}},4539:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(3942),r=n.n(s),a=n(6689),o=n.n(a);n(580),n(6648);const l=e=>{let{dependentRequired:t}=e;return 0===t.length?null:o().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentRequired\"},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Required when defined\"),o().createElement(\"ul\",null,r()(t).call(t,(e=>o().createElement(\"li\",{key:e},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--warning\"},e))))))}},6076:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>g});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(1815),c=n.n(l),i=n(6689),u=n.n(i),p=n(9003),m=n.n(p),d=(n(6648),n(2603)),h=n(9006);const g=e=>{var t;let{schema:n}=e;const s=(null==n?void 0:n.dependentSchemas)||[],a=(0,d.useIsExpandedDeeply)(),[l,p]=(0,i.useState)(a),[g,f]=(0,i.useState)(!1),y=(0,d.useComponent)(\"Accordion\"),S=(0,d.useComponent)(\"ExpandDeepButton\"),v=(0,d.useComponent)(\"JSONSchema\"),E=(0,i.useCallback)((()=>{p((e=>!e))}),[]),x=(0,i.useCallback)(((e,t)=>{p(t),f(t)}),[]);return\"object\"!=typeof s||0===r()(s).length?null:u().createElement(h.JSONSchemaDeepExpansionContext.Provider,{value:g},u().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--dependentSchemas\"},u().createElement(y,{expanded:l,onChange:E},u().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Dependent schemas\")),u().createElement(S,{expanded:l,onClick:x}),u().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),u().createElement(\"ul\",{className:m()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!l})},l&&u().createElement(u().Fragment,null,o()(t=c()(s)).call(t,(e=>{let[t,n]=e;return u().createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},u().createElement(v,{name:t,schema:n}))}))))))}},6661:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.deprecated)?null:r().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--warning\"},\"deprecated\")}},9446:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return null!=t&&t.description?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},r().createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},t.description)):null}},7207:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"else\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Else\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},r().createElement(s,{name:o,schema:t.else}))}},1805:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l),i=(n(6648),n(2603));const u=e=>{var t;let{schema:n}=e;const s=(0,i.useFn)();return r()(null==n?void 0:n.enum)?c().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--enum\"},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Allowed values\"),c().createElement(\"ul\",null,o()(t=n.enum).call(t,(e=>{const t=s.stringify(e);return c().createElement(\"li\",{key:t},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},t))})))):null}},487:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"if\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"If\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--if\"},r().createElement(s,{name:o,schema:t.if}))}},9206:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"items\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Items\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--items\"},r().createElement(s,{name:o,schema:t.items}))}},5174:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"not\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Not\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--not\"},r().createElement(s,{name:o,schema:t.not}))}},3834:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l),i=n(9003),u=n.n(i),p=(n(6648),n(2603)),m=n(9006);const d=e=>{let{schema:t}=e;const n=(null==t?void 0:t.oneOf)||[],s=(0,p.useFn)(),a=(0,p.useIsExpandedDeeply)(),[i,d]=(0,l.useState)(a),[h,g]=(0,l.useState)(!1),f=(0,p.useComponent)(\"Accordion\"),y=(0,p.useComponent)(\"ExpandDeepButton\"),S=(0,p.useComponent)(\"JSONSchema\"),v=(0,p.useComponent)(\"KeywordType\"),E=(0,l.useCallback)((()=>{d((e=>!e))}),[]),x=(0,l.useCallback)(((e,t)=>{d(t),g(t)}),[]);return r()(n)&&0!==n.length?c().createElement(m.JSONSchemaDeepExpansionContext.Provider,{value:h},c().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--oneOf\"},c().createElement(f,{expanded:i,onChange:E},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"One of\")),c().createElement(y,{expanded:i,onClick:x}),c().createElement(v,{schema:{oneOf:n}}),c().createElement(\"ul\",{className:u()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!i})},i&&c().createElement(c().Fragment,null,o()(n).call(n,((e,t)=>c().createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},c().createElement(S,{name:`#${t} ${s.getTitle(e)}`,schema:e})))))))):null}},6746:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>m});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(1815),c=n.n(l),i=n(6689),u=n.n(i),p=(n(6648),n(2603));const m=e=>{var t;let{schema:n}=e;const s=(null==n?void 0:n.patternProperties)||{},a=(0,p.useComponent)(\"JSONSchema\");return 0===r()(s).length?null:u().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--patternProperties\"},u().createElement(\"ul\",null,o()(t=c()(s)).call(t,(e=>{let[t,n]=e;return u().createElement(\"li\",{key:t,className:\"json-schema-2020-12-property\"},u().createElement(a,{name:t,schema:n}))}))))}},3971:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l),i=n(9003),u=n.n(i),p=(n(6648),n(2603)),m=n(9006);const d=e=>{let{schema:t}=e;const n=(null==t?void 0:t.prefixItems)||[],s=(0,p.useFn)(),a=(0,p.useIsExpandedDeeply)(),[i,d]=(0,l.useState)(a),[h,g]=(0,l.useState)(!1),f=(0,p.useComponent)(\"Accordion\"),y=(0,p.useComponent)(\"ExpandDeepButton\"),S=(0,p.useComponent)(\"JSONSchema\"),v=(0,p.useComponent)(\"KeywordType\"),E=(0,l.useCallback)((()=>{d((e=>!e))}),[]),x=(0,l.useCallback)(((e,t)=>{d(t),g(t)}),[]);return r()(n)&&0!==n.length?c().createElement(m.JSONSchemaDeepExpansionContext.Provider,{value:h},c().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--prefixItems\"},c().createElement(f,{expanded:i,onChange:E},c().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Prefix items\")),c().createElement(y,{expanded:i,onClick:x}),c().createElement(v,{schema:{prefixItems:n}}),c().createElement(\"ul\",{className:u()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!i})},i&&c().createElement(c().Fragment,null,o()(n).call(n,((e,t)=>c().createElement(\"li\",{key:`#${t}`,className:\"json-schema-2020-12-property\"},c().createElement(S,{name:`#${t} ${s.getTitle(e)}`,schema:e})))))))):null}},5472:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>S});var s=n(7104),r=n.n(s),a=n(7252),o=n.n(a),l=n(3942),c=n.n(l),i=n(1815),u=n.n(i),p=n(2605),m=n.n(p),d=n(6689),h=n.n(d),g=n(9003),f=n.n(g),y=(n(6648),n(2603));const S=e=>{var t;let{schema:n}=e;const s=(0,y.useFn)(),a=(null==n?void 0:n.properties)||{},l=r()(null==n?void 0:n.required)?n.required:[],i=(0,y.useComponent)(\"JSONSchema\");return 0===o()(a).length?null:h().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},h().createElement(\"ul\",null,c()(t=u()(a)).call(t,(e=>{let[t,r]=e;const a=m()(l).call(l,t),o=s.getDependentRequired(t,n);return h().createElement(\"li\",{key:t,className:f()(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":a})},h().createElement(i,{name:t,schema:r,dependentRequired:o}))}))))}},2338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),{propertyNames:s}=t,o=(0,a.useComponent)(\"JSONSchema\"),l=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Property names\");return n.hasKeyword(t,\"propertyNames\")?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--propertyNames\"},r().createElement(o,{name:l,schema:s})):null}},6456:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.readOnly)?null:r().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"read-only\")}},7401:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),s=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"then\"))return null;const o=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Then\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--then\"},r().createElement(s,{name:o,schema:t.then}))}},8137:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(6689),r=n.n(s),a=(n(580),n(6648),n(2603));const o=e=>{let{title:t,schema:n}=e;const s=(0,a.useFn)();return t||s.getTitle(n)?r().createElement(\"div\",{className:\"json-schema-2020-12__title\"},t||s.getTitle(n)):null};o.defaultProps={title:\"\"};const l=o},2285:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(6689),r=n.n(s),a=(n(580),n(6648),n(2603));const o=e=>{let{schema:t,isCircular:n}=e;const s=(0,a.useFn)().getType(t),o=n?\" [circular]\":\"\";return r().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},`${s}${o}`)};o.defaultProps={isCircular:!1};const l=o},5828:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),{unevaluatedItems:s}=t,o=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"unevaluatedItems\"))return null;const l=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated items\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedItems\"},r().createElement(o,{name:l,schema:s}))}},6907:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(6648),n(2603));const o=e=>{let{schema:t}=e;const n=(0,a.useFn)(),{unevaluatedProperties:s}=t,o=(0,a.useComponent)(\"JSONSchema\");if(!n.hasKeyword(t,\"unevaluatedProperties\"))return null;const l=r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--primary\"},\"Unevaluated properties\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--unevaluatedProperties\"},r().createElement(o,{name:l,schema:s}))}},5789:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(6648);const a=e=>{let{schema:t}=e;return!0!==(null==t?void 0:t.writeOnly)?null:r().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"write-only\")}},9006:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{JSONSchemaContext:()=>o,JSONSchemaCyclesContext:()=>i,JSONSchemaDeepExpansionContext:()=>c,JSONSchemaLevelContext:()=>l});var s=n(7885),r=n.n(s),a=n(6689);const o=(0,a.createContext)(null);o.displayName=\"JSONSchemaContext\";const l=(0,a.createContext)(0);l.displayName=\"JSONSchemaLevelContext\";const c=(0,a.createContext)(!1);c.displayName=\"JSONSchemaDeepExpansionContext\";const i=(0,a.createContext)(new(r()))},4121:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getDependentRequired:()=>D,getTitle:()=>k,getType:()=>A,hasKeyword:()=>P,isBooleanJSONSchema:()=>I,isExpandable:()=>q,stringify:()=>R,stringifyConstraints:()=>M,upperFirst:()=>O});var s=n(600),r=n.n(s),a=n(6680),o=n.n(a),l=n(7104),c=n.n(l),i=n(3942),u=n.n(i),p=n(2605),m=n.n(p),d=n(4901),h=n.n(d),g=n(9998),f=n.n(g),y=n(8344),S=n.n(y),v=n(1733),E=n.n(v),x=n(66),w=n.n(x),C=n(1815),b=n.n(C),j=n(7885),_=n.n(j),N=n(2603);const O=e=>\"string\"==typeof e?`${e.charAt(0).toUpperCase()}${r()(e).call(e,1)}`:e,k=e=>{const t=(0,N.useFn)();return null!=e&&e.title?t.upperFirst(e.title):null!=e&&e.$anchor?t.upperFirst(e.$anchor):null!=e&&e.$id?e.$id:\"\"},A=function(e){var t,n;let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new(o());const r=(0,N.useFn)();if(null==e)return\"any\";if(r.isBooleanJSONSchema(e))return e?\"any\":\"never\";if(\"object\"!=typeof e)return\"any\";if(s.has(e))return\"any\";s.add(e);const{type:a,prefixItems:l,items:i}=e,p=()=>{if(c()(l)){const e=u()(l).call(l,(e=>A(e,s))),t=i?A(i,s):\"any\";return`array<[${e.join(\", \")}], ${t}>`}if(i){return`array<${A(i,s)}>`}return\"array<any>\"};if(e.not&&\"any\"===A(e.not))return\"never\";const d=c()(a)?u()(a).call(a,(e=>\"array\"===e?p():e)).join(\" | \"):\"array\"===a?p():m()(t=[\"null\",\"boolean\",\"object\",\"array\",\"number\",\"string\"]).call(t,a)?a:(()=>{var t,n;if(Object.hasOwn(e,\"prefixItems\")||Object.hasOwn(e,\"items\")||Object.hasOwn(e,\"contains\"))return p();if(Object.hasOwn(e,\"properties\")||Object.hasOwn(e,\"additionalProperties\")||Object.hasOwn(e,\"patternProperties\"))return\"object\";if(m()(t=[\"int32\",\"int64\"]).call(t,e.format))return\"integer\";if(m()(n=[\"float\",\"double\"]).call(n,e.format))return\"number\";if(Object.hasOwn(e,\"minimum\")||Object.hasOwn(e,\"maximum\")||Object.hasOwn(e,\"exclusiveMinimum\")||Object.hasOwn(e,\"exclusiveMaximum\")||Object.hasOwn(e,\"multipleOf\"))return\"number | integer\";if(Object.hasOwn(e,\"pattern\")||Object.hasOwn(e,\"format\")||Object.hasOwn(e,\"minLength\")||Object.hasOwn(e,\"maxLength\"))return\"string\";if(void 0!==e.const){if(null===e.const)return\"null\";if(\"boolean\"==typeof e.const)return\"boolean\";if(\"number\"==typeof e.const)return h()(e.const)?\"integer\":\"number\";if(\"string\"==typeof e.const)return\"string\";if(c()(e.const))return\"array<any>\";if(\"object\"==typeof e.const)return\"object\"}return null})(),g=(t,n)=>{if(c()(e[t])){var r;return`(${u()(r=e[t]).call(r,(e=>A(e,s))).join(n)})`}return null},y=g(\"oneOf\",\" | \"),S=g(\"anyOf\",\" | \"),v=g(\"allOf\",\" & \"),E=f()(n=[d,y,S,v]).call(n,Boolean).join(\" | \");return s.delete(e),E||\"any\"},I=e=>\"boolean\"==typeof e,P=(e,t)=>null!==e&&\"object\"==typeof e&&Object.hasOwn(e,t),q=e=>{const t=(0,N.useFn)();return(null==e?void 0:e.$schema)||(null==e?void 0:e.$vocabulary)||(null==e?void 0:e.$id)||(null==e?void 0:e.$anchor)||(null==e?void 0:e.$dynamicAnchor)||(null==e?void 0:e.$ref)||(null==e?void 0:e.$dynamicRef)||(null==e?void 0:e.$defs)||(null==e?void 0:e.$comment)||(null==e?void 0:e.allOf)||(null==e?void 0:e.anyOf)||(null==e?void 0:e.oneOf)||t.hasKeyword(e,\"not\")||t.hasKeyword(e,\"if\")||t.hasKeyword(e,\"then\")||t.hasKeyword(e,\"else\")||(null==e?void 0:e.dependentSchemas)||(null==e?void 0:e.prefixItems)||t.hasKeyword(e,\"items\")||t.hasKeyword(e,\"contains\")||(null==e?void 0:e.properties)||(null==e?void 0:e.patternProperties)||t.hasKeyword(e,\"additionalProperties\")||t.hasKeyword(e,\"propertyNames\")||t.hasKeyword(e,\"unevaluatedItems\")||t.hasKeyword(e,\"unevaluatedProperties\")||(null==e?void 0:e.description)||(null==e?void 0:e.enum)||t.hasKeyword(e,\"const\")||t.hasKeyword(e,\"contentSchema\")||t.hasKeyword(e,\"default\")},R=e=>{var t;return null===e||m()(t=[\"number\",\"bigint\",\"boolean\"]).call(t,typeof e)?String(e):c()(e)?`[${u()(e).call(e,R).join(\", \")}]`:S()(e)},T=(e,t,n)=>{const s=\"number\"==typeof t,r=\"number\"==typeof n;return s&&r?t===n?`${t} ${e}`:`[${t}, ${n}] ${e}`:s?`>= ${t} ${e}`:r?`<= ${n} ${e}`:null},M=e=>{const t=[],n=(e=>{if(\"number\"!=typeof(null==e?void 0:e.multipleOf))return null;if(e.multipleOf<=0)return null;if(1===e.multipleOf)return null;const{multipleOf:t}=e;if(h()(t))return`multiple of ${t}`;const n=10**t.toString().split(\".\")[1].length;return`multiple of ${t*n}/${n}`})(e);null!==n&&t.push({scope:\"number\",value:n});const s=(e=>{const t=null==e?void 0:e.minimum,n=null==e?void 0:e.maximum,s=null==e?void 0:e.exclusiveMinimum,r=null==e?void 0:e.exclusiveMaximum,a=\"number\"==typeof t,o=\"number\"==typeof n,l=\"number\"==typeof s&&t<s,c=\"number\"==typeof r&&n>r;if(a&&o)return`${l?\"(\":\"[\"}${l?s:t}, ${c?r:n}${c?\")\":\"]\"}`;if(a)return`${l?\">\":\"≥\"} ${l?s:t}`;if(o)return`${c?\"<\":\"≤\"} ${c?r:n}`;return null})(e);null!==s&&t.push({scope:\"number\",value:s}),null!=e&&e.format&&t.push({scope:\"string\",value:e.format});const r=T(\"characters\",null==e?void 0:e.minLength,null==e?void 0:e.maxLength);null!==r&&t.push({scope:\"string\",value:r}),null!=e&&e.pattern&&t.push({scope:\"string\",value:`matches ${null==e?void 0:e.pattern}`}),null!=e&&e.contentMediaType&&t.push({scope:\"string\",value:`media type: ${e.contentMediaType}`}),null!=e&&e.contentEncoding&&t.push({scope:\"string\",value:`encoding: ${e.contentEncoding}`});const a=T(null!=e&&e.hasUniqueItems?\"unique items\":\"items\",null==e?void 0:e.minItems,null==e?void 0:e.maxItems);null!==a&&t.push({scope:\"array\",value:a});const o=T(\"contained items\",null==e?void 0:e.minContains,null==e?void 0:e.maxContains);null!==o&&t.push({scope:\"array\",value:o});const l=T(\"properties\",null==e?void 0:e.minProperties,null==e?void 0:e.maxProperties);return null!==l&&t.push({scope:\"object\",value:l}),t},D=(e,t)=>{var n;return null!=t&&t.dependentRequired?E()(w()(n=b()(t.dependentRequired)).call(n,((t,n)=>{let[s,r]=n;return c()(r)&&m()(r).call(r,e)?(t.add(s),t):t}),new(_()))):[]}},5077:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{withJSONSchemaContext:()=>G});var s=n(6689),r=n.n(s),a=n(2675),o=n(9359),l=n(7568),c=n(3460),i=n(4922),u=n(1338),p=n(2348),m=n(7655),d=n(6418),h=n(4685),g=n(6457),f=n(8776),y=n(3834),S=n(5174),v=n(487),E=n(7401),x=n(7207),w=n(6076),C=n(3971),b=n(9206),j=n(8993),_=n(5472),N=n(6746),O=n(5253),k=n(2338),A=n(5828),I=n(6907),P=n(2285),q=n(1805),R=n(7308),T=n(9956),M=n(4539),D=n(3484),J=n(8137),$=n(9446),K=n(5148),L=n(6661),V=n(6456),U=n(5789),F=n(7349),z=n(6867),B=n(2260),W=n(9006),H=n(4121);const G=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n={components:{JSONSchema:a.default,Keyword$schema:o.default,Keyword$vocabulary:l.default,Keyword$id:c.default,Keyword$anchor:i.default,Keyword$dynamicAnchor:u.default,Keyword$ref:p.default,Keyword$dynamicRef:m.default,Keyword$defs:d.default,Keyword$comment:h.default,KeywordAllOf:g.default,KeywordAnyOf:f.default,KeywordOneOf:y.default,KeywordNot:S.default,KeywordIf:v.default,KeywordThen:E.default,KeywordElse:x.default,KeywordDependentSchemas:w.default,KeywordPrefixItems:C.default,KeywordItems:b.default,KeywordContains:j.default,KeywordProperties:_.default,KeywordPatternProperties:N.default,KeywordAdditionalProperties:O.default,KeywordPropertyNames:k.default,KeywordUnevaluatedItems:A.default,KeywordUnevaluatedProperties:I.default,KeywordType:P.default,KeywordEnum:q.default,KeywordConst:R.default,KeywordConstraint:T.default,KeywordDependentRequired:M.default,KeywordContentSchema:D.default,KeywordTitle:J.default,KeywordDescription:$.default,KeywordDefault:K.default,KeywordDeprecated:L.default,KeywordReadOnly:V.default,KeywordWriteOnly:U.default,Accordion:F.default,ExpandDeepButton:z.default,ChevronRightIcon:B.default,...t.components},config:{default$schema:\"https://json-schema.org/draft/2020-12/schema\",defaultExpandedLevels:0,...t.config},fn:{upperFirst:H.upperFirst,getTitle:H.getTitle,getType:H.getType,isBooleanJSONSchema:H.isBooleanJSONSchema,hasKeyword:H.hasKeyword,isExpandable:H.isExpandable,stringify:H.stringify,stringifyConstraints:H.stringifyConstraints,getDependentRequired:H.getDependentRequired,...t.fn}},s=t=>r().createElement(W.JSONSchemaContext.Provider,{value:n},r().createElement(e,t));return s.contexts={JSONSchemaContext:W.JSONSchemaContext},s.displayName=e.displayName,s}},2603:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{useComponent:()=>c,useConfig:()=>l,useFn:()=>i,useIsCircular:()=>g,useIsEmbedded:()=>p,useIsExpanded:()=>m,useIsExpandedDeeply:()=>d,useLevel:()=>u,useRenderedSchemas:()=>h});var s=n(7885),r=n.n(s),a=n(6689),o=n(9006);const l=()=>{const{config:e}=(0,a.useContext)(o.JSONSchemaContext);return e},c=e=>{const{components:t}=(0,a.useContext)(o.JSONSchemaContext);return t[e]||null},i=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;const{fn:t}=(0,a.useContext)(o.JSONSchemaContext);return void 0!==e?t[e]:t},u=()=>{const e=(0,a.useContext)(o.JSONSchemaLevelContext);return[e,e+1]},p=()=>{const[e]=u();return e>0},m=()=>{const[e]=u(),{defaultExpandedLevels:t}=l();return t-e>0},d=()=>(0,a.useContext)(o.JSONSchemaDeepExpansionContext),h=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e)return(0,a.useContext)(o.JSONSchemaCyclesContext);const t=(0,a.useContext)(o.JSONSchemaCyclesContext);return new(r())([...t,e])},g=e=>h().has(e)},7139:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>Z});var s=n(2675),r=n(9359),a=n(7568),o=n(3460),l=n(4922),c=n(1338),i=n(2348),u=n(7655),p=n(6418),m=n(4685),d=n(6457),h=n(8776),g=n(3834),f=n(5174),y=n(487),S=n(7401),v=n(7207),E=n(6076),x=n(3971),w=n(9206),C=n(8993),b=n(5472),j=n(6746),_=n(5253),N=n(2338),O=n(5828),k=n(6907),A=n(2285),I=n(1805),P=n(7308),q=n(9956),R=n(4539),T=n(3484),M=n(8137),D=n(9446),J=n(5148),$=n(6661),K=n(6456),L=n(5789),V=n(7349),U=n(6867),F=n(2260),z=n(4121),B=n(8591),W=n(9006),H=n(2603),G=n(5077);const Z=()=>({components:{JSONSchema202012:s.default,JSONSchema202012Keyword$schema:r.default,JSONSchema202012Keyword$vocabulary:a.default,JSONSchema202012Keyword$id:o.default,JSONSchema202012Keyword$anchor:l.default,JSONSchema202012Keyword$dynamicAnchor:c.default,JSONSchema202012Keyword$ref:i.default,JSONSchema202012Keyword$dynamicRef:u.default,JSONSchema202012Keyword$defs:p.default,JSONSchema202012Keyword$comment:m.default,JSONSchema202012KeywordAllOf:d.default,JSONSchema202012KeywordAnyOf:h.default,JSONSchema202012KeywordOneOf:g.default,JSONSchema202012KeywordNot:f.default,JSONSchema202012KeywordIf:y.default,JSONSchema202012KeywordThen:S.default,JSONSchema202012KeywordElse:v.default,JSONSchema202012KeywordDependentSchemas:E.default,JSONSchema202012KeywordPrefixItems:x.default,JSONSchema202012KeywordItems:w.default,JSONSchema202012KeywordContains:C.default,JSONSchema202012KeywordProperties:b.default,JSONSchema202012KeywordPatternProperties:j.default,JSONSchema202012KeywordAdditionalProperties:_.default,JSONSchema202012KeywordPropertyNames:N.default,JSONSchema202012KeywordUnevaluatedItems:O.default,JSONSchema202012KeywordUnevaluatedProperties:k.default,JSONSchema202012KeywordType:A.default,JSONSchema202012KeywordEnum:I.default,JSONSchema202012KeywordConst:P.default,JSONSchema202012KeywordConstraint:q.default,JSONSchema202012KeywordDependentRequired:R.default,JSONSchema202012KeywordContentSchema:T.default,JSONSchema202012KeywordTitle:M.default,JSONSchema202012KeywordDescription:D.default,JSONSchema202012KeywordDefault:J.default,JSONSchema202012KeywordDeprecated:$.default,JSONSchema202012KeywordReadOnly:K.default,JSONSchema202012KeywordWriteOnly:L.default,JSONSchema202012Accordion:V.default,JSONSchema202012ExpandDeepButton:U.default,JSONSchema202012ChevronRightIcon:F.default,withJSONSchema202012Context:G.withJSONSchemaContext,JSONSchema202012DeepExpansionContext:()=>W.JSONSchemaDeepExpansionContext},fn:{upperFirst:z.upperFirst,jsonSchema202012:{isExpandable:z.isExpandable,hasKeyword:z.hasKeyword,useFn:H.useFn,useConfig:H.useConfig,useComponent:H.useComponent,useIsExpandedDeeply:H.useIsExpandedDeeply,sampleFromSchema:B.sampleFromSchema,sampleFromSchemaGeneric:B.sampleFromSchemaGeneric,sampleEncoderAPI:B.encoderAPI,sampleFormatAPI:B.formatAPI,sampleMediaTypeAPI:B.mediaTypeAPI,createXMLExample:B.createXMLExample,memoizedSampleFromSchema:B.memoizedSampleFromSchema,memoizedCreateXMLExample:B.memoizedCreateXMLExample}}})},6648:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{booleanSchema:()=>o,objectSchema:()=>a,schema:()=>l});var s=n(580),r=n.n(s);const a=r().object,o=r().bool,l=r().oneOfType([a,o])},9507:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});const s=new(n(674).default),r=(e,t)=>\"function\"==typeof t?s.register(e,t):null===t?s.unregister(e):s.get(e);r.getDefaults=()=>s.defaults;const a=r},2906:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});const s=new(n(4215).default),r=(e,t)=>\"function\"==typeof t?s.register(e,t):null===t?s.unregister(e):s.get(e)},537:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});const s=new(n(3782).default),r=(e,t)=>{if(\"function\"==typeof t)return s.register(e,t);if(null===t)return s.unregister(e);const n=e.split(\";\").at(0),r=`${n.split(\"/\").at(0)}/*`;return s.get(e)||s.get(n)||s.get(r)};r.getDefaults=()=>s.defaults;const a=r},674:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>E});var s=n(1093),r=n.n(s),a=n(6272),o=n.n(a),l=n(6543),c=n.n(l),i=n(4215),u=n(1433),p=n(8509),m=n(4366),d=n(5037),h=n(5709),g=n(4180),f=n(1967);function y(e,t,n){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,n)}var S=new(c());class v extends i.default{constructor(){super(...arguments),y(this,S,{writable:!0,value:{\"7bit\":u.default,\"8bit\":p.default,binary:m.default,\"quoted-printable\":d.default,base16:h.default,base32:g.default,base64:f.default}}),r()(this,\"data\",{...o()(this,S)})}get defaults(){return{...o()(this,S)}}}const E=v},3782:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>S});var s=n(1093),r=n.n(s),a=n(6272),o=n.n(a),l=n(6543),c=n.n(l),i=n(4215),u=n(5378),p=n(6724),m=n(4342),d=n(2974),h=n(5088);function g(e,t,n){!function(e,t){if(t.has(e))throw new TypeError(\"Cannot initialize the same private elements twice on an object\")}(e,t),t.set(e,n)}var f=new(c());class y extends i.default{constructor(){super(...arguments),g(this,f,{writable:!0,value:{...u.default,...p.default,...m.default,...d.default,...h.default}}),r()(this,\"data\",{...o()(this,f)})}get defaults(){return{...o()(this,f)}}}const S=y},4215:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(1093),r=n.n(s);const a=class{constructor(){r()(this,\"data\",{})}register(e,t){this.data[e]=t}unregister(e){void 0===e?this.data={}:delete this.data[e]}get(e){return this.data[e]}}},8338:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ALL_TYPES:()=>r,SCALAR_TYPES:()=>s});const s=[\"number\",\"integer\",\"string\",\"boolean\",\"null\"],r=[\"array\",\"object\",...s]},3783:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{extractExample:()=>l,hasExample:()=>o});var s=n(7104),r=n.n(s),a=n(3084);const o=e=>{if(!(0,a.isJSONSchemaObject)(e))return!1;const{examples:t,example:n,default:s}=e;return!!(r()(t)&&t.length>=1)||(void 0!==s||void 0!==n)},l=e=>{if(!(0,a.isJSONSchemaObject)(e))return null;const{examples:t,example:n,default:s}=e;return r()(t)&&t.length>=1?t.at(0):void 0!==s?s:void 0!==n?n:void 0}},7078:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>S});var s=n(7104),r=n.n(s),a=n(4883),o=n.n(a),l=n(1733),c=n.n(l),i=n(7885),u=n.n(i),p=n(7252),m=n.n(p),d=n(9998),h=n.n(d),g=n(1669),f=n(3084);const y=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if((0,f.isBooleanJSONSchema)(e)&&!0===e)return!0;if((0,f.isBooleanJSONSchema)(e)&&!1===e)return!1;if((0,f.isBooleanJSONSchema)(t)&&!0===t)return!0;if((0,f.isBooleanJSONSchema)(t)&&!1===t)return!1;if(!(0,f.isJSONSchema)(e))return t;if(!(0,f.isJSONSchema)(t))return e;const s={...t,...e};if(t.type&&e.type&&r()(t.type)&&\"string\"==typeof t.type){var a;const n=o()(a=(0,g.AF)(t.type)).call(a,e.type);s.type=c()(new(u())(n))}if(r()(t.required)&&r()(e.required)&&(s.required=[...new(u())([...e.required,...t.required])]),t.properties&&e.properties){const r=new(u())([...m()(t.properties),...m()(e.properties)]);s.properties={};for(const a of r){const r=t.properties[a]||{},o=e.properties[a]||{};var l;if(r.readOnly&&!n.includeReadOnly||r.writeOnly&&!n.includeWriteOnly)s.required=h()(l=s.required||[]).call(l,(e=>e!==a));else s.properties[a]=y(o,r,n)}}return(0,f.isJSONSchema)(t.items)&&(0,f.isJSONSchema)(e.items)&&(s.items=y(e.items,t.items,n)),(0,f.isJSONSchema)(t.contains)&&(0,f.isJSONSchema)(e.contains)&&(s.contains=y(e.contains,t.contains,n)),(0,f.isJSONSchema)(t.contentSchema)&&(0,f.isJSONSchema)(e.contentSchema)&&(s.contentSchema=y(e.contentSchema,t.contentSchema,n)),s},S=y},3084:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{isBooleanJSONSchema:()=>a,isJSONSchema:()=>l,isJSONSchemaObject:()=>o});var s=n(5452),r=n.n(s);const a=e=>\"boolean\"==typeof e,o=e=>r()(e),l=e=>a(e)||o(e)},5202:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{bytes:()=>l,integer:()=>m,number:()=>p,pick:()=>i,randexp:()=>c,string:()=>u});var s=n(185),r=n.n(s),a=n(9989),o=n.n(a);const l=e=>r()(e),c=e=>{try{return new(o())(e).gen()}catch{return\"string\"}},i=e=>e.at(0),u=()=>\"string\",p=()=>0,m=()=>0},6276:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{foldType:()=>b,getType:()=>_,inferType:()=>j});var s=n(7104),r=n.n(s),a=n(4901),o=n.n(a),l=n(2605),c=n.n(l),i=n(6680),u=n.n(i),p=n(7252),m=n.n(p),d=n(3942),h=n.n(d),g=n(9998),f=n.n(g),y=n(8338),S=n(3084),v=n(5202),E=n(3783);const x={array:[\"items\",\"prefixItems\",\"contains\",\"maxContains\",\"minContains\",\"maxItems\",\"minItems\",\"uniqueItems\",\"unevaluatedItems\"],object:[\"properties\",\"additionalProperties\",\"patternProperties\",\"propertyNames\",\"minProperties\",\"maxProperties\",\"required\",\"dependentSchemas\",\"dependentRequired\",\"unevaluatedProperties\"],string:[\"pattern\",\"format\",\"minLength\",\"maxLength\",\"contentEncoding\",\"contentMediaType\",\"contentSchema\"],integer:[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\",\"multipleOf\"]};x.number=x.integer;const w=\"string\",C=e=>void 0===e?null:null===e?\"null\":r()(e)?\"array\":o()(e)?\"integer\":typeof e,b=e=>{if(r()(e)&&e.length>=1){if(c()(e).call(e,\"array\"))return\"array\";if(c()(e).call(e,\"object\"))return\"object\";{const t=(0,v.pick)(e);if(c()(y.ALL_TYPES).call(y.ALL_TYPES,t))return t}}return c()(y.ALL_TYPES).call(y.ALL_TYPES,e)?e:null},j=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new(u());if(!(0,S.isJSONSchemaObject)(e))return w;if(t.has(e))return w;t.add(e);let{type:n,const:s}=e;if(n=b(n),\"string\"!=typeof n){const t=m()(x);e:for(let s=0;s<t.length;s+=1){const r=t[s],a=x[r];for(let t=0;t<a.length;t+=1){const s=a[t];if(Object.hasOwn(e,s)){n=r;break e}}}}if(\"string\"!=typeof n&&void 0!==s){const e=C(s);n=\"string\"==typeof e?e:n}if(\"string\"!=typeof n){const s=n=>{if(r()(e[n])){var s;const r=h()(s=e[n]).call(s,(e=>j(e,t)));return b(r)}return null},o=s(\"allOf\"),l=s(\"anyOf\"),c=s(\"oneOf\"),i=e.not?j(e.not,t):null;var a;if(o||l||c||i)n=b(f()(a=[o,l,c,i]).call(a,Boolean))}if(\"string\"!=typeof n&&(0,E.hasExample)(e)){const t=(0,E.extractExample)(e),s=C(t);n=\"string\"==typeof s?s:n}return t.delete(e),n||w},_=e=>j(e)},9346:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{fromJSONBooleanSchema:()=>r,typeCast:()=>a});var s=n(3084);const r=e=>!1===e?{not:{}}:{},a=e=>(0,s.isBooleanJSONSchema)(e)?r(e):(0,s.isJSONSchemaObject)(e)?e:{}},1433:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(871).Buffer;const r=e=>s.from(e).toString(\"ascii\")},8509:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(871).Buffer;const r=e=>s.from(e).toString(\"utf8\")},5709:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(871).Buffer;const r=e=>s.from(e).toString(\"hex\")},4180:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(871).Buffer;const r=e=>{const t=s.from(e).toString(\"utf8\"),n=\"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";let r=0,a=\"\",o=0,l=0;for(let e=0;e<t.length;e++)for(o=o<<8|t.charCodeAt(e),l+=8;l>=5;)a+=n.charAt(o>>>l-5&31),l-=5;l>0&&(a+=n.charAt(o<<5-l&31),r=(8-8*t.length%5)%5);for(let e=0;e<r;e++)a+=\"=\";return a}},1967:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(871).Buffer;const r=e=>s.from(e).toString(\"base64\")},4366:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(871).Buffer;const r=e=>s.from(e).toString(\"binary\")},5037:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(600),r=n.n(s);const a=e=>{let t=\"\";for(let a=0;a<e.length;a++){const o=e.charCodeAt(a);if(61===o)t+=\"=3D\";else if(o>=33&&o<=60||o>=62&&o<=126||9===o||32===o)t+=e.charAt(a);else if(13===o||10===o)t+=\"\\r\\n\";else if(o>126){const s=unescape(encodeURIComponent(e.charAt(a)));for(let e=0;e<s.length;e++){var n;t+=\"=\"+r()(n=\"0\"+s.charCodeAt(e).toString(16)).call(n,-2).toUpperCase()}}else{var s;t+=\"=\"+r()(s=\"0\"+o.toString(16)).call(s,-2).toUpperCase()}}return t}},4045:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>(new Date).toISOString()},1456:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>(new Date).toISOString().substring(0,10)},560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>.1},4299:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"P3D\"},3981:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"user@example.com\"},1890:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>.1},9375:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"example.com\"},4518:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"실례@example.com\"},273:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"실례.com\"},7864:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>2**30>>>0},1726:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>2**53-1},8793:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"198.51.100.42\"},8269:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\"},5693:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"path/실례.html\"},3080:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"https://실례.com/\"},7856:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"/a/b/c\"},5088:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});const s=require(\"@babel/runtime-corejs3/core-js-stable/string/raw\");var r=n.n(s),a=n(5202);const o={\"application/json\":()=>'{\"key\":\"value\"}',\"application/ld+json\":()=>'{\"name\": \"John Doe\"}',\"application/x-httpd-php\":()=>\"<?php echo '<p>Hello World!</p>'; ?>\",\"application/rtf\":()=>r()`{\\rtf1\\adeflang1025\\ansi\\ansicpg1252\\uc1`,\"application/x-sh\":()=>'echo \"Hello World!\"',\"application/xhtml+xml\":()=>\"<p>content</p>\",\"application/*\":()=>(0,a.bytes)(25).toString(\"binary\")}},4342:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(5202);const r={\"audio/*\":()=>(0,s.bytes)(25).toString(\"binary\")}},6724:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(5202);const r={\"image/*\":()=>(0,s.bytes)(25).toString(\"binary\")}},5378:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s={\"text/plain\":()=>\"string\",\"text/css\":()=>\".selector { border: 1px solid red }\",\"text/csv\":()=>\"value1,value2,value3\",\"text/html\":()=>\"<p>content</p>\",\"text/calendar\":()=>\"BEGIN:VCALENDAR\",\"text/javascript\":()=>\"console.dir('Hello world!');\",\"text/xml\":()=>'<person age=\"30\">John Doe</person>',\"text/*\":()=>\"string\"}},2974:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(5202);const r={\"video/*\":()=>(0,s.bytes)(25).toString(\"binary\")}},3393:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"********\"},4335:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"^[a-z]+$\"},375:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"1/0\"},5243:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>(new Date).toISOString().substring(11)},4692:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"path/index.html\"},3829:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"https://example.com/dictionary/{term:1}/{term}\"},2978:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"https://example.com/\"},8859:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\"},8591:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>s.createXMLExample,encoderAPI:()=>r.default,formatAPI:()=>a.default,mediaTypeAPI:()=>o.default,memoizedCreateXMLExample:()=>s.memoizedCreateXMLExample,memoizedSampleFromSchema:()=>s.memoizedSampleFromSchema,sampleFromSchema:()=>s.sampleFromSchema,sampleFromSchemaGeneric:()=>s.sampleFromSchemaGeneric});var s=n(4277),r=n(9507),a=n(2906),o=n(537)},4277:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>T,memoizedCreateXMLExample:()=>J,memoizedSampleFromSchema:()=>$,sampleFromSchema:()=>M,sampleFromSchemaGeneric:()=>R});var s=n(7104),r=n.n(s),a=n(4901),o=n.n(a),l=n(4235),c=n.n(l),i=n(3580),u=n.n(i),p=n(2605),m=n.n(p),d=n(4883),h=n.n(d),g=n(3942),f=n.n(g),y=n(8344),S=n.n(y),v=n(8920),E=n.n(v),x=n(9699),w=n.n(x),C=n(5452),b=n.n(C),j=n(1669),_=n(7481),N=n(3273),O=n(6276),k=n(9346),A=n(3783),I=n(5202),P=n(7078),q=n(3084);const R=function(e){var t;let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];\"function\"==typeof(null===(t=e)||void 0===t?void 0:t.toJS)&&(e=e.toJS()),e=(0,k.typeCast)(e);let l=void 0!==s||(0,A.hasExample)(e);const i=!l&&r()(e.oneOf)&&e.oneOf.length>0,p=!l&&r()(e.anyOf)&&e.anyOf.length>0;if(!l&&(i||p)){const t=(0,k.typeCast)(i?(0,I.pick)(e.oneOf):(0,I.pick)(e.anyOf));!(e=(0,P.default)(e,t,n)).xml&&t.xml&&(e.xml=t.xml),(0,A.hasExample)(e)&&(0,A.hasExample)(t)&&(l=!0)}const d={};let{xml:g,properties:y,additionalProperties:S,items:v,contains:E}=e||{},x=(0,O.getType)(e),{includeReadOnly:C,includeWriteOnly:_}=n;g=g||{};let T,{name:M,prefix:D,namespace:J}=g,$={};if(Object.hasOwn(e,\"type\")||(e.type=x),a&&(M=M||\"notagname\",T=(D?`${D}:`:\"\")+M,J)){d[D?`xmlns:${D}`:\"xmlns\"]=J}a&&($[T]=[]);const K=(0,j.mz)(y);let L,V=0;const U=()=>o()(e.maxProperties)&&e.maxProperties>0&&V>=e.maxProperties,F=t=>!(o()(e.maxProperties)&&e.maxProperties>0)||!U()&&(!(t=>{var n;return!r()(e.required)||0===e.required.length||!m()(n=e.required).call(n,t)})(t)||e.maxProperties-V-(()=>{if(!r()(e.required)||0===e.required.length)return 0;let t=0;var n,s;return a?c()(n=e.required).call(n,(e=>t+=void 0===$[e]?0:1)):c()(s=e.required).call(s,(e=>{var n;t+=void 0===(null===(n=$[T])||void 0===n?void 0:u()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(L=a?function(t){let s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&K[t]){if(K[t].xml=K[t].xml||{},K[t].xml.attribute){const e=r()(K[t].enum)?(0,I.pick)(K[t].enum):void 0;if((0,A.hasExample)(K[t]))d[K[t].xml.name||t]=(0,A.extractExample)(K[t]);else if(void 0!==e)d[K[t].xml.name||t]=e;else{const e=(0,k.typeCast)(K[t]),n=(0,O.getType)(e),s=K[t].xml.name||t;d[s]=N.default[n](e)}return}K[t].xml.name=K[t].xml.name||t}else K[t]||!1===S||(K[t]={xml:{name:t}});let o=R(K[t],n,s,a);var l;F(t)&&(V++,r()(o)?$[T]=h()(l=$[T]).call(l,o):$[T].push(o))}:(t,s)=>{var r;if(F(t)){if(b()(null===(r=e.discriminator)||void 0===r?void 0:r.mapping)&&e.discriminator.propertyName===t&&\"string\"==typeof e.$$ref){for(const n in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[n])){$[t]=n;break}}else $[t]=R(K[t],n,s,a);V++}},l){let t;if(t=void 0!==s?s:(0,A.extractExample)(e),!a){if(\"number\"==typeof t&&\"string\"===x)return`${t}`;if(\"string\"!=typeof t||\"string\"===x)return t;try{return JSON.parse(t)}catch{return t}}if(\"array\"===x){if(!r()(t)){if(\"string\"==typeof t)return t;t=[t]}let s=[];return(0,q.isJSONSchemaObject)(v)&&(v.xml=v.xml||g||{},v.xml.name=v.xml.name||g.name,s=f()(t).call(t,(e=>R(v,n,e,a)))),(0,q.isJSONSchemaObject)(E)&&(E.xml=E.xml||g||{},E.xml.name=E.xml.name||g.name,s=[R(E,n,void 0,a),...s]),s=N.default.array(e,{sample:s}),g.wrapped?($[T]=s,w()(d)||$[T].push({_attr:d})):$=s,$}if(\"object\"===x){if(\"string\"==typeof t)return t;for(const e in t){var z,B,W,H;Object.hasOwn(t,e)&&(null!==(z=K[e])&&void 0!==z&&z.readOnly&&!C||null!==(B=K[e])&&void 0!==B&&B.writeOnly&&!_||(null!==(W=K[e])&&void 0!==W&&null!==(H=W.xml)&&void 0!==H&&H.attribute?d[K[e].xml.name||e]=t[e]:L(e,t[e])))}return w()(d)||$[T].push({_attr:d}),$}return $[T]=w()(d)?t:[{_attr:d},t],$}if(\"array\"===x){let t=[];var G,Z;if((0,q.isJSONSchemaObject)(E))if(a&&(E.xml=E.xml||e.xml||{},E.xml.name=E.xml.name||g.name),r()(E.anyOf))t.push(...f()(G=E.anyOf).call(G,(e=>R((0,P.default)(e,E,n),n,void 0,a))));else if(r()(E.oneOf)){var X;t.push(...f()(X=E.oneOf).call(X,(e=>R((0,P.default)(e,E,n),n,void 0,a))))}else{if(!(!a||a&&g.wrapped))return R(E,n,void 0,a);t.push(R(E,n,void 0,a))}if((0,q.isJSONSchemaObject)(v))if(a&&(v.xml=v.xml||e.xml||{},v.xml.name=v.xml.name||g.name),r()(v.anyOf))t.push(...f()(Z=v.anyOf).call(Z,(e=>R((0,P.default)(e,v,n),n,void 0,a))));else if(r()(v.oneOf)){var Y;t.push(...f()(Y=v.oneOf).call(Y,(e=>R((0,P.default)(e,v,n),n,void 0,a))))}else{if(!(!a||a&&g.wrapped))return R(v,n,void 0,a);t.push(R(v,n,void 0,a))}return t=N.default.array(e,{sample:t}),a&&g.wrapped?($[T]=t,w()(d)||$[T].push({_attr:d}),$):t}if(\"object\"===x){for(let e in K){var Q,ee,te;Object.hasOwn(K,e)&&(null!==(Q=K[e])&&void 0!==Q&&Q.deprecated||null!==(ee=K[e])&&void 0!==ee&&ee.readOnly&&!C||null!==(te=K[e])&&void 0!==te&&te.writeOnly&&!_||L(e))}if(a&&d&&$[T].push({_attr:d}),U())return $;if((0,q.isBooleanJSONSchema)(S))a?$[T].push({additionalProp:\"Anything can be here\"}):$.additionalProp1={},V++;else if((0,q.isJSONSchemaObject)(S)){var ne,se;const t=S,s=R(t,n,void 0,a);if(a&&\"string\"==typeof(null==t||null===(ne=t.xml)||void 0===ne?void 0:ne.name)&&\"notagname\"!==(null==t||null===(se=t.xml)||void 0===se?void 0:se.name))$[T].push(s);else{const t=o()(e.minProperties)&&e.minProperties>0&&V<e.minProperties?e.minProperties-V:3;for(let e=1;e<=t;e++){if(U())return $;if(a){const t={};t[\"additionalProp\"+e]=s.notagname,$[T].push(t)}else $[\"additionalProp\"+e]=s;V++}}}return $}let re;if(void 0!==e.const)re=e.const;else if(e&&r()(e.enum))re=(0,I.pick)((0,j.AF)(e.enum));else{const t=(0,q.isJSONSchemaObject)(e.contentSchema)?R(e.contentSchema,n,void 0,a):void 0;re=N.default[x](e,{sample:t})}return a?($[T]=w()(d)?re:[{_attr:d},re],$):re},T=(e,t,n)=>{const s=R(e,t,n,!0);if(s)return\"string\"==typeof s?s:E()(s,{declaration:!0,indent:\"\\t\"})},M=(e,t,n)=>R(e,t,n,!1),D=(e,t,n)=>[e,S()(t),S()(n)],J=(0,_.Z)(T,D),$=(0,_.Z)(M,D)},3982:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{applyArrayConstraints:()=>p,default:()=>m});var s=n(4901),r=n.n(s),a=n(600),o=n.n(a),l=n(1733),c=n.n(l),i=n(7885),u=n.n(i);const p=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minItems:n,maxItems:s,uniqueItems:a}=t,{contains:l,minContains:i,maxContains:p}=t;let m=[...e];if(null!=l&&\"object\"==typeof l){if(r()(i)&&i>1){const e=m.at(0);for(let t=1;t<i;t+=1)m.unshift(e)}r()(p)}if(r()(s)&&s>0&&(m=o()(e).call(e,0,s)),r()(n)&&n>0)for(let e=0;m.length<n;e+=1)m.push(m[e%m.length]);return!0===a&&(m=c()(new(u())(m))),m},m=(e,t)=>{let{sample:n}=t;return p(n,e)}},4108:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=e=>\"boolean\"!=typeof e.default||e.default},3273:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(3982),r=n(6852),a=n(4522),o=n(844),l=n(8864),c=n(4108),i=n(853);const u={array:s.default,object:r.default,string:a.default,number:o.default,integer:l.default,boolean:c.default,null:i.default},p=new Proxy(u,{get:(e,t)=>\"string\"==typeof t&&Object.hasOwn(e,t)?e[t]:()=>`Unknown Type: ${t}`})},8864:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(5202),r=n(2906),a=n(7864),o=n(1726);const l=e=>{const{format:t}=e;return\"string\"==typeof t?(e=>{const{format:t}=e,n=(0,r.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"int32\":return(0,a.default)();case\"int64\":return(0,o.default)()}return(0,s.integer)()})(e):(0,s.integer)()}},853:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>null},844:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(4901),r=n.n(s);const a=require(\"@babel/runtime-corejs3/core-js-stable/number/epsilon\");var o=n.n(a),l=n(5202),c=n(2906),i=n(1890),u=n(560);const p=e=>{const{format:t}=e;let n;return n=\"string\"==typeof t?(e=>{const{format:t}=e,n=(0,c.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"float\":return(0,i.default)();case\"double\":return(0,u.default)()}return(0,l.number)()})(e):(0,l.number)(),function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{minimum:n,maximum:s,exclusiveMinimum:a,exclusiveMaximum:l}=t,{multipleOf:c}=t,i=r()(e)?1:o();let u=\"number\"==typeof n?n:null,p=\"number\"==typeof s?s:null,m=e;if(\"number\"==typeof a&&(u=null!==u?Math.max(u,a+i):a+i),\"number\"==typeof l&&(p=null!==p?Math.min(p,l-i):l-i),m=u>p&&e||u||p||m,\"number\"==typeof c&&c>0){const e=m%c;m=0===e?m:m+c-e}return m}(n,e)}},6852:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=()=>{throw new Error(\"Not implemented\")}},4522:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>J});var s=n(4901),r=n.n(s),a=n(600),o=n.n(a),l=n(7104),c=n.n(l),i=n(8344),u=n.n(i),p=n(4292),m=n.n(p),d=n(5202),h=n(3084),g=n(3981),f=n(4518),y=n(9375),S=n(273),v=n(8793),E=n(8269),x=n(2978),w=n(4692),C=n(3080),b=n(5693),j=n(8859),_=n(3829),N=n(7856),O=n(375),k=n(4045),A=n(1456),I=n(5243),P=n(4299),q=n(3393),R=n(4335),T=n(2906),M=n(9507),D=n(537);const J=function(e){let{sample:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{contentEncoding:n,contentMediaType:s,contentSchema:a}=e,{pattern:l,format:i}=e,p=(0,M.default)(n)||m();let J;if(\"string\"==typeof l)J=(0,d.randexp)(l);else if(\"string\"==typeof i)J=(e=>{const{format:t}=e,n=(0,T.default)(t);if(\"function\"==typeof n)return n(e);switch(t){case\"email\":return(0,g.default)();case\"idn-email\":return(0,f.default)();case\"hostname\":return(0,y.default)();case\"idn-hostname\":return(0,S.default)();case\"ipv4\":return(0,v.default)();case\"ipv6\":return(0,E.default)();case\"uri\":return(0,x.default)();case\"uri-reference\":return(0,w.default)();case\"iri\":return(0,C.default)();case\"iri-reference\":return(0,b.default)();case\"uuid\":return(0,j.default)();case\"uri-template\":return(0,_.default)();case\"json-pointer\":return(0,N.default)();case\"relative-json-pointer\":return(0,O.default)();case\"date-time\":return(0,k.default)();case\"date\":return(0,A.default)();case\"time\":return(0,I.default)();case\"duration\":return(0,P.default)();case\"password\":return(0,q.default)();case\"regex\":return(0,R.default)()}return(0,d.string)()})(e);else if((0,h.isJSONSchema)(a)&&\"string\"==typeof s&&void 0!==t)J=c()(t)||\"object\"==typeof t?u()(t):String(t);else if(\"string\"==typeof s){const t=(0,D.default)(s);\"function\"==typeof t&&(J=t(e))}else J=(0,d.string)();return p(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{maxLength:n,minLength:s}=t;let a=e;if(r()(n)&&n>0&&(a=o()(a).call(a,0,n)),r()(s)&&s>0){let e=0;for(;a.length<s;)a+=a[e++%a.length]}return a}(J,e))}},5474:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{SHOW:()=>l,UPDATE_FILTER:()=>a,UPDATE_LAYOUT:()=>r,UPDATE_MODE:()=>o,changeMode:()=>p,show:()=>u,updateFilter:()=>i,updateLayout:()=>c});var s=n(1669);const r=\"layout_update_layout\",a=\"layout_update_filter\",o=\"layout_update_mode\",l=\"layout_show\";function c(e){return{type:r,payload:e}}function i(e){return{type:a,payload:e}}function u(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return e=(0,s.AF)(e),{type:l,payload:{thing:e,shown:t}}}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return e=(0,s.AF)(e),{type:o,payload:{thing:e,mode:t}}}},6821:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(5672),r=n(5474),a=n(4400),o=n(8989);function l(){return{statePlugins:{layout:{reducers:s.default,actions:r,selectors:a},spec:{wrapSelectors:o}}}}},5672:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(4883),r=n.n(s),a=n(5572),o=n(5474);const l={[o.UPDATE_LAYOUT]:(e,t)=>e.set(\"layout\",t.payload),[o.UPDATE_FILTER]:(e,t)=>e.set(\"filter\",t.payload),[o.SHOW]:(e,t)=>{const n=t.payload.shown,s=(0,a.fromJS)(t.payload.thing);return e.update(\"shown\",(0,a.fromJS)({}),(e=>e.set(s,n)))},[o.UPDATE_MODE]:(e,t)=>{var n;let s=t.payload.thing,a=t.payload.mode;return e.setIn(r()(n=[\"modes\"]).call(n,s),(a||\"\")+\"\")}}},4400:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{current:()=>o,currentFilter:()=>l,isShown:()=>c,showSummary:()=>u,whatMode:()=>i});var s=n(6814),r=n(1669),a=n(5572);const o=e=>e.get(\"layout\"),l=e=>e.get(\"filter\"),c=(e,t,n)=>(t=(0,r.AF)(t),e.get(\"shown\",(0,a.fromJS)({})).get((0,a.fromJS)(t),n)),i=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\";return t=(0,r.AF)(t),e.getIn([\"modes\",...t],n)},u=(0,s.createSelector)((e=>e),(e=>!c(e,\"editor\")))},8989:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{taggedOperations:()=>a});var s=n(600),r=n.n(s);const a=(e,t)=>function(n){for(var s=arguments.length,a=new Array(s>1?s-1:0),o=1;o<s;o++)a[o-1]=arguments[o];let l=e(n,...a);const{fn:c,layoutSelectors:i,getConfigs:u}=t.getSystem(),p=u(),{maxDisplayedTags:m}=p;let d=i.currentFilter();return d&&!0!==d&&\"true\"!==d&&\"false\"!==d&&(l=c.opsFilter(l,d)),m&&!isNaN(m)&&m>=0&&(l=r()(l).call(l,0,m)),l}},9150:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(593),r=n.n(s);function a(e){let{configs:t}=e;const n={debug:0,info:1,log:2,warn:3,error:4},s=e=>n[e]||-1;let{logLevel:a}=t,o=s(a);function l(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];s(e)>=o&&console[e](...n)}return l.warn=r()(l).call(l,null,\"warn\"),l.error=r()(l).call(l,null,\"error\"),l.info=r()(l).call(l,null,\"info\"),l.debug=r()(l).call(l,null,\"debug\"),{rootInjects:{log:l}}}},7002:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR_REQUEST_BODY_VALIDATE_ERROR:()=>m,CLEAR_REQUEST_BODY_VALUE:()=>d,SET_REQUEST_BODY_VALIDATE_ERROR:()=>p,UPDATE_ACTIVE_EXAMPLES_MEMBER:()=>l,UPDATE_REQUEST_BODY_INCLUSION:()=>o,UPDATE_REQUEST_BODY_VALUE:()=>r,UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG:()=>a,UPDATE_REQUEST_CONTENT_TYPE:()=>c,UPDATE_RESPONSE_CONTENT_TYPE:()=>i,UPDATE_SELECTED_SERVER:()=>s,UPDATE_SERVER_VARIABLE_VALUE:()=>u,clearRequestBodyValidateError:()=>C,clearRequestBodyValue:()=>j,initRequestBodyValidateError:()=>b,setActiveExamplesMember:()=>S,setRequestBodyInclusion:()=>y,setRequestBodyValidateError:()=>w,setRequestBodyValue:()=>g,setRequestContentType:()=>v,setResponseContentType:()=>E,setRetainRequestBodyValueFlag:()=>f,setSelectedServer:()=>h,setServerVariableValue:()=>x});const s=\"oas3_set_servers\",r=\"oas3_set_request_body_value\",a=\"oas3_set_request_body_retain_flag\",o=\"oas3_set_request_body_inclusion\",l=\"oas3_set_active_examples_member\",c=\"oas3_set_request_content_type\",i=\"oas3_set_response_content_type\",u=\"oas3_set_server_variable_value\",p=\"oas3_set_request_body_validate_error\",m=\"oas3_clear_request_body_validate_error\",d=\"oas3_clear_request_body_value\";function h(e,t){return{type:s,payload:{selectedServerUrl:e,namespace:t}}}function g(e){let{value:t,pathMethod:n}=e;return{type:r,payload:{value:t,pathMethod:n}}}const f=e=>{let{value:t,pathMethod:n}=e;return{type:a,payload:{value:t,pathMethod:n}}};function y(e){let{value:t,pathMethod:n,name:s}=e;return{type:o,payload:{value:t,pathMethod:n,name:s}}}function S(e){let{name:t,pathMethod:n,contextType:s,contextName:r}=e;return{type:l,payload:{name:t,pathMethod:n,contextType:s,contextName:r}}}function v(e){let{value:t,pathMethod:n}=e;return{type:c,payload:{value:t,pathMethod:n}}}function E(e){let{value:t,path:n,method:s}=e;return{type:i,payload:{value:t,path:n,method:s}}}function x(e){let{server:t,namespace:n,key:s,val:r}=e;return{type:u,payload:{server:t,namespace:n,key:s,val:r}}}const w=e=>{let{path:t,method:n,validationErrors:s}=e;return{type:p,payload:{path:t,method:n,validationErrors:s}}},C=e=>{let{path:t,method:n}=e;return{type:m,payload:{path:t,method:n}}},b=e=>{let{pathMethod:t}=e;return{type:m,payload:{path:t[0],method:t[1]}}},j=e=>{let{pathMethod:t}=e;return{type:d,payload:{pathMethod:t}}}},3723:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{definitionsToAuthorize:()=>p});var s=n(4235),r=n.n(s),a=n(9998),o=n.n(a),l=n(66),c=n.n(l),i=n(6814),u=n(5572);const p=(m=(0,i.createSelector)((e=>e),(e=>{let{specSelectors:t}=e;return t.securityDefinitions()}),((e,t)=>{var n;let s=(0,u.List)();return t?(r()(n=t.entrySeq()).call(n,(e=>{let[t,n]=e;const a=n.get(\"type\");var l;if(\"oauth2\"===a&&r()(l=n.get(\"flows\").entrySeq()).call(l,(e=>{let[r,a]=e,l=(0,u.fromJS)({flow:r,authorizationUrl:a.get(\"authorizationUrl\"),tokenUrl:a.get(\"tokenUrl\"),scopes:a.get(\"scopes\"),type:n.get(\"type\"),description:n.get(\"description\")});s=s.push(new u.Map({[t]:o()(l).call(l,(e=>void 0!==e))}))})),\"http\"!==a&&\"apiKey\"!==a||(s=s.push(new u.Map({[t]:n}))),\"openIdConnect\"===a&&n.get(\"openIdConnectData\")){let e=n.get(\"openIdConnectData\"),a=e.get(\"grant_types_supported\")||[\"authorization_code\",\"implicit\"];r()(a).call(a,(r=>{var a;let l=e.get(\"scopes_supported\")&&c()(a=e.get(\"scopes_supported\")).call(a,((e,t)=>e.set(t,\"\")),new u.Map),i=(0,u.fromJS)({flow:r,authorizationUrl:e.get(\"authorization_endpoint\"),tokenUrl:e.get(\"token_endpoint\"),scopes:l,type:\"oauth2\",openIdConnectUrl:n.get(\"openIdConnectUrl\")});s=s.push(new u.Map({[t]:o()(i).call(i,(e=>void 0!==e))}))}))}})),s):s})),(e,t)=>function(){for(var n=arguments.length,s=new Array(n),r=0;r<n;r++)s[r]=arguments[r];if(t.getSystem().specSelectors.isOAS3()){let e=t.getState().getIn([\"spec\",\"resolvedSubtrees\",\"components\",\"securitySchemes\"]);return m(t,e,...s)}return e(...s)});var m},3427:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l);n(580),n(8082);const i=e=>{let{callbacks:t,specPath:n,specSelectors:s,getComponent:a}=e;const l=s.callbacksOperations({callbacks:t,specPath:n}),i=r()(l),u=a(\"OperationContainer\",!0);return 0===i.length?c().createElement(\"span\",null,\"No callbacks\"):c().createElement(\"div\",null,o()(i).call(i,(e=>{var t;return c().createElement(\"div\",{key:`${e}`},c().createElement(\"h2\",null,e),o()(t=l[e]).call(t,(t=>c().createElement(u,{key:`${e}-${t.path}-${t.method}`,op:t.operation,tag:\"callbacks\",method:t.method,path:t.path,specPath:t.specPath,allowTryItOut:!1}))))})))}},6775:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var s=n(1093),r=n.n(s),a=n(4994),o=n.n(a),l=n(9998),c=n.n(l),i=n(3942),u=n.n(i),p=n(6689),m=n.n(p);n(580);class d extends m().Component{constructor(e,t){super(e,t),r()(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:n,name:s}=e.target,r=o()({},this.state.value);s?r[s]=n:r=n,this.setState({value:r},(()=>t(this.state)))}));let{name:n,schema:s}=this.props,a=this.getValue();this.state={name:n,schema:s,value:a}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e;let{schema:t,getComponent:n,errSelectors:s,name:r}=this.props;const a=n(\"Input\"),o=n(\"Row\"),l=n(\"Col\"),i=n(\"authError\"),p=n(\"Markdown\",!0),d=n(\"JumpToPath\",!0),h=(t.get(\"scheme\")||\"\").toLowerCase();let g=this.getValue(),f=c()(e=s.allErrors()).call(e,(e=>e.get(\"authId\")===r));if(\"basic\"===h){var y;let e=g?g.get(\"username\"):null;return m().createElement(\"div\",null,m().createElement(\"h4\",null,m().createElement(\"code\",null,r||t.get(\"name\")),\"  (http, Basic)\",m().createElement(d,{path:[\"securityDefinitions\",r]})),e&&m().createElement(\"h6\",null,\"Authorized\"),m().createElement(o,null,m().createElement(p,{source:t.get(\"description\")})),m().createElement(o,null,m().createElement(\"label\",null,\"Username:\"),e?m().createElement(\"code\",null,\" \",e,\" \"):m().createElement(l,null,m().createElement(a,{type:\"text\",required:\"required\",name:\"username\",\"aria-label\":\"auth-basic-username\",onChange:this.onChange,autoFocus:!0}))),m().createElement(o,null,m().createElement(\"label\",null,\"Password:\"),e?m().createElement(\"code\",null,\" ****** \"):m().createElement(l,null,m().createElement(a,{autoComplete:\"new-password\",name:\"password\",type:\"password\",\"aria-label\":\"auth-basic-password\",onChange:this.onChange}))),u()(y=f.valueSeq()).call(y,((e,t)=>m().createElement(i,{error:e,key:t}))))}var S;return\"bearer\"===h?m().createElement(\"div\",null,m().createElement(\"h4\",null,m().createElement(\"code\",null,r||t.get(\"name\")),\"  (http, Bearer)\",m().createElement(d,{path:[\"securityDefinitions\",r]})),g&&m().createElement(\"h6\",null,\"Authorized\"),m().createElement(o,null,m().createElement(p,{source:t.get(\"description\")})),m().createElement(o,null,m().createElement(\"label\",null,\"Value:\"),g?m().createElement(\"code\",null,\" ****** \"):m().createElement(l,null,m().createElement(a,{type:\"text\",\"aria-label\":\"auth-bearer-value\",onChange:this.onChange,autoFocus:!0}))),u()(S=f.valueSeq()).call(S,((e,t)=>m().createElement(i,{error:e,key:t})))):m().createElement(\"div\",null,m().createElement(\"em\",null,m().createElement(\"b\",null,r),\" HTTP authentication: unsupported scheme \",`'${h}'`))}}},6467:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(3427),r=n(2458),a=n(5757),o=n(6617),l=n(9928),c=n(5327),i=n(6775),u=n(6796);const p={Callbacks:s.default,HttpAuth:i.default,RequestBody:r.default,Servers:o.default,ServersContainer:l.default,RequestBodyEditor:c.default,OperationServers:u.default,operationLink:a.default}},5757:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(8344),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l);n(580),n(8082);class i extends l.Component{render(){const{link:e,name:t,getComponent:n}=this.props,s=n(\"Markdown\",!0);let a=e.get(\"operationId\")||e.get(\"operationRef\"),l=e.get(\"parameters\")&&e.get(\"parameters\").toJS(),i=e.get(\"description\");return c().createElement(\"div\",{className:\"operation-link\"},c().createElement(\"div\",{className:\"description\"},c().createElement(\"b\",null,c().createElement(\"code\",null,t)),i?c().createElement(s,{source:i}):null),c().createElement(\"pre\",null,\"Operation `\",a,\"`\",c().createElement(\"br\",null),c().createElement(\"br\",null),\"Parameters \",function(e,t){var n;if(\"string\"!=typeof t)return\"\";return o()(n=t.split(\"\\n\")).call(n,((t,n)=>n>0?Array(e+1).join(\" \")+t:t)).join(\"\\n\")}(0,r()(l,null,2))||\"{}\",c().createElement(\"br\",null)))}}const u=i},6796:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(1093),r=n.n(s),a=n(6689),o=n.n(a);n(580),n(8082);class l extends o().Component{constructor(){super(...arguments),r()(this,\"setSelectedServer\",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setSelectedServer(e,`${t}:${n}`)})),r()(this,\"setServerVariableValue\",(e=>{const{path:t,method:n}=this.props;return this.forceUpdate(),this.props.setServerVariableValue({...e,namespace:`${t}:${n}`})})),r()(this,\"getSelectedServer\",(()=>{const{path:e,method:t}=this.props;return this.props.getSelectedServer(`${e}:${t}`)})),r()(this,\"getServerVariable\",((e,t)=>{const{path:n,method:s}=this.props;return this.props.getServerVariable({namespace:`${n}:${s}`,server:e},t)})),r()(this,\"getEffectiveServerValue\",(e=>{const{path:t,method:n}=this.props;return this.props.getEffectiveServerValue({server:e,namespace:`${t}:${n}`})}))}render(){const{operationServers:e,pathServers:t,getComponent:n}=this.props;if(!e&&!t)return null;const s=n(\"Servers\"),r=e||t,a=e?\"operation\":\"path\";return o().createElement(\"div\",{className:\"opblock-section operation-servers\"},o().createElement(\"div\",{className:\"opblock-section-header\"},o().createElement(\"div\",{className:\"tab-header\"},o().createElement(\"h4\",{className:\"opblock-title\"},\"Servers\"))),o().createElement(\"div\",{className:\"opblock-description-wrapper\"},o().createElement(\"h4\",{className:\"message\"},\"These \",a,\"-level options override the global server options.\"),o().createElement(s,{servers:r,currentServer:this.getSelectedServer(),setSelectedServer:this.setSelectedServer,setServerVariableValue:this.setServerVariableValue,getServerVariable:this.getServerVariable,getEffectiveServerValue:this.getEffectiveServerValue})))}}},5327:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(1093),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(9003)),c=n.n(l),i=n(1669);const u=Function.prototype;class p extends a.PureComponent{constructor(e,t){super(e,t),r()(this,\"applyDefaultValue\",(e=>{const{onChange:t,defaultValue:n}=e||this.props;return this.setState({value:n}),t(n)})),r()(this,\"onChange\",(e=>{this.props.onChange((0,i.Pz)(e))})),r()(this,\"onDomChange\",(e=>{const t=e.target.value;this.setState({value:t},(()=>this.onChange(t)))})),this.state={value:(0,i.Pz)(e.value)||e.defaultValue},e.onChange(e.value)}UNSAFE_componentWillReceiveProps(e){this.props.value!==e.value&&e.value!==this.state.value&&this.setState({value:(0,i.Pz)(e.value)}),!e.value&&e.defaultValue&&this.state.value&&this.applyDefaultValue(e)}render(){let{getComponent:e,errors:t}=this.props,{value:n}=this.state,s=t.size>0;const r=e(\"TextArea\");return o().createElement(\"div\",{className:\"body-param\"},o().createElement(r,{className:c()(\"body-param__text\",{invalid:s}),title:t.size?t.join(\", \"):\"\",value:n,onChange:this.onDomChange}))}}r()(p,\"defaultProps\",{onChange:u,userHasEditedBody:!1})},2458:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y,getDefaultRequestBodyValue:()=>f});var s=n(3942),r=n.n(s),a=n(8493),o=n.n(a),l=n(2605),c=n.n(l),i=n(7104),u=n.n(i),p=n(6689),m=n.n(p),d=(n(580),n(8082),n(5572)),h=n(1669),g=n(2518);const f=(e,t,n,s)=>{const r=e.getIn([\"content\",t]),a=r.get(\"schema\").toJS(),o=void 0!==r.get(\"examples\"),l=r.get(\"example\"),c=o?r.getIn([\"examples\",n,\"value\"]):l,i=s.getSampleSchema(a,t,{includeWriteOnly:!0},c);return(0,h.Pz)(i)},y=e=>{let{userHasEditedBody:t,requestBody:n,requestBodyValue:s,requestBodyInclusionSetting:a,requestBodyErrors:l,getComponent:i,getConfigs:p,specSelectors:y,fn:S,contentType:v,isExecute:E,specPath:x,onChange:w,onChangeIncludeEmpty:C,activeExamplesKey:b,updateActiveExamplesKey:j,setRetainRequestBodyValueFlag:_}=e;const N=e=>{w(e.target.files[0])},O=e=>{let t={key:e,shouldDispatchInit:!1,defaultValue:!0};return\"no value\"===a.get(e,\"no value\")&&(t.shouldDispatchInit=!0),t},k=i(\"Markdown\",!0),A=i(\"modelExample\"),I=i(\"RequestBodyEditor\"),P=i(\"highlightCode\"),q=i(\"ExamplesSelectValueRetainer\"),R=i(\"Example\"),T=i(\"ParameterIncludeEmpty\"),{showCommonExtensions:M}=p(),D=n&&n.get(\"description\")||null,J=n&&n.get(\"content\")||new d.OrderedMap;v=v||J.keySeq().first()||\"\";const $=J.get(v,(0,d.OrderedMap)()),K=$.get(\"schema\",(0,d.OrderedMap)()),L=$.get(\"examples\",null),V=null==L?void 0:r()(L).call(L,((e,t)=>{var s;const r=null===(s=e)||void 0===s?void 0:s.get(\"value\",null);return r&&(e=e.set(\"value\",f(n,v,t,S),r)),e}));if(l=d.List.isList(l)?l:(0,d.List)(),!$.size)return null;const U=\"object\"===$.getIn([\"schema\",\"type\"]),F=\"binary\"===$.getIn([\"schema\",\"format\"]),z=\"base64\"===$.getIn([\"schema\",\"format\"]);if(\"application/octet-stream\"===v||0===o()(v).call(v,\"image/\")||0===o()(v).call(v,\"audio/\")||0===o()(v).call(v,\"video/\")||F||z){const e=i(\"Input\");return E?m().createElement(e,{type:\"file\",onChange:N}):m().createElement(\"i\",null,\"Example values are not available for \",m().createElement(\"code\",null,v),\" media types.\")}if(U&&(\"application/x-www-form-urlencoded\"===v||0===o()(v).call(v,\"multipart/\"))&&K.get(\"properties\",(0,d.OrderedMap)()).size>0){var B;const e=i(\"JsonSchemaForm\"),t=i(\"ParameterExt\"),n=K.get(\"properties\",(0,d.OrderedMap)());return s=d.Map.isMap(s)?s:(0,d.OrderedMap)(),m().createElement(\"div\",{className:\"table-container\"},D&&m().createElement(k,{source:D}),m().createElement(\"table\",null,m().createElement(\"tbody\",null,d.Map.isMap(n)&&r()(B=n.entrySeq()).call(B,(n=>{var o,p;let[g,f]=n;if(f.get(\"readOnly\"))return;let y=M?(0,h.po)(f):null;const v=c()(o=K.get(\"required\",(0,d.List)())).call(o,g),x=f.get(\"type\"),b=f.get(\"format\"),j=f.get(\"description\"),_=s.getIn([g,\"value\"]),N=s.getIn([g,\"errors\"])||l,A=a.get(g)||!1,I=f.has(\"default\")||f.has(\"example\")||f.hasIn([\"items\",\"example\"])||f.hasIn([\"items\",\"default\"]),P=f.has(\"enum\")&&(1===f.get(\"enum\").size||v),q=I||P;let R=\"\";\"array\"!==x||q||(R=[]),(\"object\"===x||q)&&(R=S.getSampleSchema(f,!1,{includeWriteOnly:!0})),\"string\"!=typeof R&&\"object\"===x&&(R=(0,h.Pz)(R)),\"string\"==typeof R&&\"array\"===x&&(R=JSON.parse(R));const D=\"string\"===x&&(\"binary\"===b||\"base64\"===b);return m().createElement(\"tr\",{key:g,className:\"parameters\",\"data-property-name\":g},m().createElement(\"td\",{className:\"parameters-col_name\"},m().createElement(\"div\",{className:v?\"parameter__name required\":\"parameter__name\"},g,v?m().createElement(\"span\",null,\" *\"):null),m().createElement(\"div\",{className:\"parameter__type\"},x,b&&m().createElement(\"span\",{className:\"prop-format\"},\"($\",b,\")\"),M&&y.size?r()(p=y.entrySeq()).call(p,(e=>{let[n,s]=e;return m().createElement(t,{key:`${n}-${s}`,xKey:n,xVal:s})})):null),m().createElement(\"div\",{className:\"parameter__deprecated\"},f.get(\"deprecated\")?\"deprecated\":null)),m().createElement(\"td\",{className:\"parameters-col_description\"},m().createElement(k,{source:j}),E?m().createElement(\"div\",null,m().createElement(e,{fn:S,dispatchInitialValue:!D,schema:f,description:g,getComponent:i,value:void 0===_?R:_,required:v,errors:N,onChange:e=>{w(e,[g])}}),v?null:m().createElement(T,{onChange:e=>C(g,e),isIncluded:A,isIncludedOptions:O(g),isDisabled:u()(_)?0!==_.length:!(0,h.O2)(_)})):null))})))))}const W=f(n,v,b,S);let H=null;return(0,g.O)(W)&&(H=\"json\"),m().createElement(\"div\",null,D&&m().createElement(k,{source:D}),V?m().createElement(q,{userHasEditedBody:t,examples:V,currentKey:b,currentUserInputValue:s,onSelect:e=>{j(e)},updateValue:w,defaultToFirstExample:!0,getComponent:i,setRetainRequestBodyValueFlag:_}):null,E?m().createElement(\"div\",null,m().createElement(I,{value:s,errors:l,defaultValue:W,onChange:w,getComponent:i})):m().createElement(A,{getComponent:i,getConfigs:p,specSelectors:y,expandDepth:1,isExecute:E,schema:$.get(\"schema\"),specPath:x.push(\"content\",v),example:m().createElement(P,{className:\"body-param__example\",getConfigs:p,language:H,value:(0,h.Pz)(s)||W}),includeWriteOnly:!0}),V?m().createElement(R,{example:V.get(b),getComponent:i,getConfigs:p}):null)}},9928:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(580);class a extends r().Component{render(){const{specSelectors:e,oas3Selectors:t,oas3Actions:n,getComponent:s}=this.props,a=e.servers(),o=s(\"Servers\");return a&&a.size?r().createElement(\"div\",null,r().createElement(\"span\",{className:\"servers-title\"},\"Servers\"),r().createElement(o,{servers:a,currentServer:t.selectedServer(),setSelectedServer:n.setSelectedServer,setServerVariableValue:n.setServerVariableValue,getServerVariable:t.serverVariableValue,getEffectiveServerValue:t.serverEffectiveValue})):null}}},6617:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>m});var s=n(1093),r=n.n(s),a=n(3580),o=n.n(a),l=n(3942),c=n.n(l),i=n(6689),u=n.n(i),p=n(5572);n(580),n(8082);class m extends u().Component{constructor(){super(...arguments),r()(this,\"onServerChange\",(e=>{this.setServer(e.target.value)})),r()(this,\"onServerVariableValueChange\",(e=>{let{setServerVariableValue:t,currentServer:n}=this.props,s=e.target.getAttribute(\"data-variable\"),r=e.target.value;\"function\"==typeof t&&t({server:n,key:s,val:r})})),r()(this,\"setServer\",(e=>{let{setSelectedServer:t}=this.props;t(e)}))}componentDidMount(){var e;let{servers:t,currentServer:n}=this.props;n||this.setServer(null===(e=t.first())||void 0===e?void 0:e.get(\"url\"))}UNSAFE_componentWillReceiveProps(e){let{servers:t,setServerVariableValue:n,getServerVariable:s}=e;if(this.props.currentServer!==e.currentServer||this.props.servers!==e.servers){var r;let a=o()(t).call(t,(t=>t.get(\"url\")===e.currentServer)),l=o()(r=this.props.servers).call(r,(e=>e.get(\"url\")===this.props.currentServer))||(0,p.OrderedMap)();if(!a)return this.setServer(t.first().get(\"url\"));let i=l.get(\"variables\")||(0,p.OrderedMap)(),u=(o()(i).call(i,(e=>e.get(\"default\")))||(0,p.OrderedMap)()).get(\"default\"),m=a.get(\"variables\")||(0,p.OrderedMap)(),d=(o()(m).call(m,(e=>e.get(\"default\")))||(0,p.OrderedMap)()).get(\"default\");c()(m).call(m,((t,r)=>{s(e.currentServer,r)&&u===d||n({server:e.currentServer,key:r,val:t.get(\"default\")||\"\"})}))}}render(){var e,t;let{servers:n,currentServer:s,getServerVariable:r,getEffectiveServerValue:a}=this.props,l=(o()(n).call(n,(e=>e.get(\"url\")===s))||(0,p.OrderedMap)()).get(\"variables\")||(0,p.OrderedMap)(),i=0!==l.size;return u().createElement(\"div\",{className:\"servers\"},u().createElement(\"label\",{htmlFor:\"servers\"},u().createElement(\"select\",{onChange:this.onServerChange,value:s},c()(e=n.valueSeq()).call(e,(e=>u().createElement(\"option\",{value:e.get(\"url\"),key:e.get(\"url\")},e.get(\"url\"),e.get(\"description\")&&` - ${e.get(\"description\")}`))).toArray())),i?u().createElement(\"div\",null,u().createElement(\"div\",{className:\"computed-url\"},\"Computed URL:\",u().createElement(\"code\",null,a(s))),u().createElement(\"h4\",null,\"Server variables\"),u().createElement(\"table\",null,u().createElement(\"tbody\",null,c()(t=l.entrySeq()).call(t,(e=>{var t;let[n,a]=e;return u().createElement(\"tr\",{key:n},u().createElement(\"td\",null,n),u().createElement(\"td\",null,a.get(\"enum\")?u().createElement(\"select\",{\"data-variable\":n,onChange:this.onServerVariableValueChange},c()(t=a.get(\"enum\")).call(t,(e=>u().createElement(\"option\",{selected:e===r(s,n),key:e,value:e},e)))):u().createElement(\"input\",{type:\"text\",value:r(s,n)||\"\",onChange:this.onServerVariableValueChange,\"data-variable\":n})))}))))):null)}}},7779:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{OAS30ComponentWrapFactory:()=>u,OAS3ComponentWrapFactory:()=>i,isOAS30:()=>l,isSwagger2:()=>c});var s=n(4250),r=n.n(s),a=n(6689),o=n.n(a);function l(e){const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.0\\.([0123])(?:-rc[012])?$/.test(t)}function c(e){const t=e.get(\"swagger\");return\"string\"==typeof t&&\"2.0\"===t}function i(e){return(t,n)=>s=>{var a;return\"function\"==typeof(null===(a=n.specSelectors)||void 0===a?void 0:a.isOAS3)?n.specSelectors.isOAS3()?o().createElement(e,r()({},s,n,{Ori:t})):o().createElement(t,s):(console.warn(\"OAS3 wrapper: couldn't get spec\"),null)}}function u(e){return(t,n)=>s=>{var a;return\"function\"==typeof(null===(a=n.specSelectors)||void 0===a?void 0:a.isOAS30)?n.specSelectors.isOAS30()?o().createElement(e,r()({},s,n,{Ori:t})):o().createElement(t,s):(console.warn(\"OAS30 wrapper: couldn't get spec\"),null)}}},7451:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(2044),r=n(3723),a=n(1741),o=n(6467),l=n(7761),c=n(7002),i=n(5065),u=n(2109);function p(){return{components:o.default,wrapComponents:l.default,statePlugins:{spec:{wrapSelectors:s,selectors:a},auth:{wrapSelectors:r},oas3:{actions:c,reducers:u.default,selectors:i}}}}},2109:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(874),r=n.n(s),a=n(4235),o=n.n(a),l=n(66),c=n.n(l),i=n(5572),u=n(7002);const p={[u.UPDATE_SELECTED_SERVER]:(e,t)=>{let{payload:{selectedServerUrl:n,namespace:s}}=t;const r=s?[s,\"selectedServer\"]:[\"selectedServer\"];return e.setIn(r,n)},[u.UPDATE_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{value:n,pathMethod:s}}=t,[a,l]=s;if(!i.Map.isMap(n))return e.setIn([\"requestData\",a,l,\"bodyValue\"],n);let c,u=e.getIn([\"requestData\",a,l,\"bodyValue\"])||(0,i.Map)();i.Map.isMap(u)||(u=(0,i.Map)());const[...p]=r()(n).call(n);return o()(p).call(p,(e=>{let t=n.getIn([e]);u.has(e)&&i.Map.isMap(t)||(c=u.setIn([e,\"value\"],t))})),e.setIn([\"requestData\",a,l,\"bodyValue\"],c)},[u.UPDATE_REQUEST_BODY_VALUE_RETAIN_FLAG]:(e,t)=>{let{payload:{value:n,pathMethod:s}}=t,[r,a]=s;return e.setIn([\"requestData\",r,a,\"retainBodyValue\"],n)},[u.UPDATE_REQUEST_BODY_INCLUSION]:(e,t)=>{let{payload:{value:n,pathMethod:s,name:r}}=t,[a,o]=s;return e.setIn([\"requestData\",a,o,\"bodyInclusion\",r],n)},[u.UPDATE_ACTIVE_EXAMPLES_MEMBER]:(e,t)=>{let{payload:{name:n,pathMethod:s,contextType:r,contextName:a}}=t,[o,l]=s;return e.setIn([\"examples\",o,l,r,a,\"activeExample\"],n)},[u.UPDATE_REQUEST_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,pathMethod:s}}=t,[r,a]=s;return e.setIn([\"requestData\",r,a,\"requestContentType\"],n)},[u.UPDATE_RESPONSE_CONTENT_TYPE]:(e,t)=>{let{payload:{value:n,path:s,method:r}}=t;return e.setIn([\"requestData\",s,r,\"responseContentType\"],n)},[u.UPDATE_SERVER_VARIABLE_VALUE]:(e,t)=>{let{payload:{server:n,namespace:s,key:r,val:a}}=t;const o=s?[s,\"serverVariableValues\",n,r]:[\"serverVariableValues\",n,r];return e.setIn(o,a)},[u.SET_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:s,validationErrors:r}}=t,a=[];if(a.push(\"Required field is not provided\"),r.missingBodyValue)return e.setIn([\"requestData\",n,s,\"errors\"],(0,i.fromJS)(a));if(r.missingRequiredKeys&&r.missingRequiredKeys.length>0){const{missingRequiredKeys:t}=r;return e.updateIn([\"requestData\",n,s,\"bodyValue\"],(0,i.fromJS)({}),(e=>c()(t).call(t,((e,t)=>e.setIn([t,\"errors\"],(0,i.fromJS)(a))),e)))}return console.warn(\"unexpected result: SET_REQUEST_BODY_VALIDATE_ERROR\"),e},[u.CLEAR_REQUEST_BODY_VALIDATE_ERROR]:(e,t)=>{let{payload:{path:n,method:s}}=t;const a=e.getIn([\"requestData\",n,s,\"bodyValue\"]);if(!i.Map.isMap(a))return e.setIn([\"requestData\",n,s,\"errors\"],(0,i.fromJS)([]));const[...o]=r()(a).call(a);return o?e.updateIn([\"requestData\",n,s,\"bodyValue\"],(0,i.fromJS)({}),(e=>c()(o).call(o,((e,t)=>e.setIn([t,\"errors\"],(0,i.fromJS)([]))),e))):e},[u.CLEAR_REQUEST_BODY_VALUE]:(e,t)=>{let{payload:{pathMethod:n}}=t,[s,r]=n;const a=e.getIn([\"requestData\",s,r,\"bodyValue\"]);return a?i.Map.isMap(a)?e.setIn([\"requestData\",s,r,\"bodyValue\"],(0,i.Map)()):e.setIn([\"requestData\",s,r,\"bodyValue\"],\"\"):e}}},5065:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{activeExamplesMember:()=>C,hasUserEditedBody:()=>E,requestBodyErrors:()=>w,requestBodyInclusionSetting:()=>x,requestBodyValue:()=>y,requestContentType:()=>b,responseContentType:()=>j,selectDefaultRequestBodyValue:()=>v,selectedServer:()=>f,serverEffectiveValue:()=>O,serverVariableValue:()=>_,serverVariables:()=>N,shouldRetainRequestBodyValue:()=>S,validOperationMethods:()=>P,validateBeforeExecute:()=>k,validateShallowRequired:()=>I});var s=n(3942),r=n.n(s),a=n(4235),o=n.n(a),l=n(7252),c=n.n(l),i=n(8493),u=n.n(i),p=n(5572),m=n(6814),d=n(2458),h=n(1669);const g=e=>function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r<n;r++)s[r-1]=arguments[r];return n=>{if(n.getSystem().specSelectors.isOAS3()){const r=e(t,...s);return\"function\"==typeof r?r(n):r}return null}};const f=g(((e,t)=>{const n=t?[t,\"selectedServer\"]:[\"selectedServer\"];return e.getIn(n)||\"\"})),y=g(((e,t,n)=>e.getIn([\"requestData\",t,n,\"bodyValue\"])||null)),S=g(((e,t,n)=>e.getIn([\"requestData\",t,n,\"retainBodyValue\"])||!1)),v=(e,t,n)=>e=>{const{oas3Selectors:s,specSelectors:r,fn:a}=e.getSystem();if(r.isOAS3()){const e=s.requestContentType(t,n);if(e)return(0,d.getDefaultRequestBodyValue)(r.specResolvedSubtree([\"paths\",t,n,\"requestBody\"]),e,s.activeExamplesMember(t,n,\"requestBody\",\"requestBody\"),a)}return null},E=g(((e,t,n)=>e=>{const{oas3Selectors:s,specSelectors:r,fn:a}=e;let o=!1;const l=s.requestContentType(t,n);let c=s.requestBodyValue(t,n);const i=r.specResolvedSubtree([\"paths\",t,n,\"requestBody\"]);if(!i)return!1;if(p.Map.isMap(c)&&(c=(0,h.Pz)(c.mapEntries((e=>p.Map.isMap(e[1])?[e[0],e[1].get(\"value\")]:e)).toJS())),p.List.isList(c)&&(c=(0,h.Pz)(c)),l){const e=(0,d.getDefaultRequestBodyValue)(i,l,s.activeExamplesMember(t,n,\"requestBody\",\"requestBody\"),a);o=!!c&&c!==e}return o})),x=g(((e,t,n)=>e.getIn([\"requestData\",t,n,\"bodyInclusion\"])||(0,p.Map)())),w=g(((e,t,n)=>e.getIn([\"requestData\",t,n,\"errors\"])||null)),C=g(((e,t,n,s,r)=>e.getIn([\"examples\",t,n,s,r,\"activeExample\"])||null)),b=g(((e,t,n)=>e.getIn([\"requestData\",t,n,\"requestContentType\"])||null)),j=g(((e,t,n)=>e.getIn([\"requestData\",t,n,\"responseContentType\"])||null)),_=g(((e,t,n)=>{let s;if(\"string\"!=typeof t){const{server:e,namespace:r}=t;s=r?[r,\"serverVariableValues\",e,n]:[\"serverVariableValues\",e,n]}else{s=[\"serverVariableValues\",t,n]}return e.getIn(s)||null})),N=g(((e,t)=>{let n;if(\"string\"!=typeof t){const{server:e,namespace:s}=t;n=s?[s,\"serverVariableValues\",e]:[\"serverVariableValues\",e]}else{n=[\"serverVariableValues\",t]}return e.getIn(n)||(0,p.OrderedMap)()})),O=g(((e,t)=>{var n,s;if(\"string\"!=typeof t){const{server:r,namespace:a}=t;s=r,n=a?e.getIn([a,\"serverVariableValues\",s]):e.getIn([\"serverVariableValues\",s])}else s=t,n=e.getIn([\"serverVariableValues\",s]);n=n||(0,p.OrderedMap)();let a=s;return r()(n).call(n,((e,t)=>{a=a.replace(new RegExp(`{${t}}`,\"g\"),e)})),a})),k=(A=(e,t)=>((e,t)=>(t=t||[],!!e.getIn([\"requestData\",...t,\"bodyValue\"])))(e,t),function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return e=>{const n=e.getSystem().specSelectors.specJson();let s=[...t][1]||[];return!n.getIn([\"paths\",...s,\"requestBody\",\"required\"])||A(...t)}});var A;const I=(e,t)=>{var n;let{oas3RequiredRequestBodyContentType:s,oas3RequestContentType:r,oas3RequestBodyValue:a}=t,l=[];if(!p.Map.isMap(a))return l;let i=[];return o()(n=c()(s.requestContentType)).call(n,(e=>{if(e===r){let t=s.requestContentType[e];o()(t).call(t,(e=>{u()(i).call(i,e)<0&&i.push(e)}))}})),o()(i).call(i,(e=>{a.getIn([e,\"value\"])||l.push(e)})),l},P=(0,m.createSelector)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"]))},1741:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{callbacksOperations:()=>x,isOAS3:()=>S,isOAS30:()=>y,isSwagger2:()=>f,servers:()=>E});var s=n(3942),r=n.n(s),a=n(66),o=n.n(a),l=n(9998),c=n.n(l),i=n(2605),u=n.n(i),p=n(4883),m=n.n(p),d=n(5572),h=n(7779);const g=(0,d.Map)(),f=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,h.isSwagger2)(t)},y=()=>e=>{const t=e.getSystem().specSelectors.specJson();return(0,h.isOAS30)(t)},S=()=>e=>e.getSystem().specSelectors.isOAS30();function v(e){return function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r<n;r++)s[r-1]=arguments[r];return n=>{if(n.specSelectors.isOAS3()){const r=e(t,...s);return\"function\"==typeof r?r(n):r}return null}}}const E=v((()=>e=>e.specSelectors.specJson().get(\"servers\",g))),x=v(((e,t)=>{let{callbacks:n,specPath:s}=t;return e=>{var t;const a=e.specSelectors.validOperationMethods();return d.Map.isMap(n)?r()(t=o()(n).call(n,((e,t,n)=>d.Map.isMap(t)?o()(t).call(t,((e,t,o)=>{var l,i;if(!d.Map.isMap(t))return e;const p=r()(l=c()(i=t.entrySeq()).call(i,(e=>{let[t]=e;return u()(a).call(a,t)}))).call(l,(e=>{let[t,r]=e;return{operation:(0,d.Map)({operation:r}),method:t,path:o,callbackName:n,specPath:m()(s).call(s,[n,o,t])}}));return m()(e).call(e,p)}),(0,d.List)()):e),(0,d.List)()).groupBy((e=>e.callbackName))).call(t,(e=>e.toArray())).toObject():{}}}))},2044:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{basePath:()=>h,consumes:()=>g,definitions:()=>i,hasHost:()=>u,host:()=>d,produces:()=>f,schemes:()=>y,securityDefinitions:()=>p,validOperationMethods:()=>m});var s=n(6814),r=n(3881),a=n(5572);const o=(0,a.Map)();function l(e){return(t,n)=>function(){if(n.getSystem().specSelectors.isOAS3()){const t=e(...arguments);return\"function\"==typeof t?t(n):t}return t(...arguments)}}const c=l((0,s.createSelector)((()=>null))),i=l((()=>e=>{const t=e.getSystem().specSelectors.specJson().getIn([\"components\",\"schemas\"]);return a.Map.isMap(t)?t:o})),u=l((()=>e=>e.getSystem().specSelectors.specJson().hasIn([\"servers\",0]))),p=l((0,s.createSelector)(r.specJsonWithResolvedSubtrees,(e=>e.getIn([\"components\",\"securitySchemes\"])||null))),m=(e,t)=>function(n){if(t.specSelectors.isOAS3())return t.oas3Selectors.validOperationMethods();for(var s=arguments.length,r=new Array(s>1?s-1:0),a=1;a<s;a++)r[a-1]=arguments[a];return e(...r)},d=c,h=c,g=c,f=c,y=c},356:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:s,getComponent:a,errSelectors:o,authorized:l,onAuthChange:c,name:i}=n,u=a(\"HttpAuth\");return\"http\"===s.get(\"type\")?r().createElement(u,{key:i,schema:s,name:i,errSelectors:o,authorized:l,getComponent:a,onChange:c}):r().createElement(t,n)}))},7761:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(2460),r=n(356),a=n(9487),o=n(58),l=n(3499),c=n(287);const i={Markdown:s.default,AuthItem:r.default,JsonSchema_string:c.default,VersionStamp:a.default,model:l.default,onlineValidatorBadge:o.default}},287:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(7779).OAS3ComponentWrapFactory)((e=>{let{Ori:t,...n}=e;const{schema:s,getComponent:a,errors:o,onChange:l}=n,c=s&&s.get?s.get(\"format\"):null,i=s&&s.get?s.get(\"type\"):null,u=a(\"Input\");return i&&\"string\"===i&&c&&(\"binary\"===c||\"base64\"===c)?r().createElement(u,{type:\"file\",className:o.length?\"invalid\":\"\",title:o.length?o:\"\",onChange:e=>{l(e.target.files[0])},disabled:t.isDisabled}):r().createElement(t,n)}))},2460:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{Markdown:()=>d,default:()=>h});var s=n(7390),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(9003)),c=n.n(l),i=n(963),u=n(7779),p=n(2552);const m=new i.Remarkable(\"commonmark\");m.block.ruler.enable([\"table\"]),m.set({linkTarget:\"_blank\"});const d=e=>{let{source:t,className:n=\"\",getConfigs:s}=e;if(\"string\"!=typeof t)return null;if(t){const{useUnsafeMarkdown:e}=s(),a=m.render(t),l=(0,p.s)(a,{useUnsafeMarkdown:e});let i;return\"string\"==typeof l&&(i=r()(l).call(l)),o().createElement(\"div\",{dangerouslySetInnerHTML:{__html:i},className:c()(n,\"renderedMarkdown\")})}return null};d.defaultProps={getConfigs:()=>({useUnsafeMarkdown:!1})};const h=(0,u.OAS3ComponentWrapFactory)(d)},3499:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(4250),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(7779)),c=n(6024);class i extends a.Component{render(){let{getConfigs:e,schema:t}=this.props,n=[\"model-box\"],s=null;return!0===t.get(\"deprecated\")&&(n.push(\"deprecated\"),s=o().createElement(\"span\",{className:\"model-deprecated-warning\"},\"Deprecated:\")),o().createElement(\"div\",{className:n.join(\" \")},s,o().createElement(c.Z,r()({},this.props,{getConfigs:e,depth:1,expandDepth:this.props.expandDepth||0})))}}const u=(0,l.OAS3ComponentWrapFactory)(i)},58:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(7779),r=n(5623);const a=(0,s.OAS3ComponentWrapFactory)(r.Z)},9487:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(7779).OAS30ComponentWrapFactory)((e=>{const{Ori:t}=e;return r().createElement(\"span\",null,r().createElement(t,e),r().createElement(\"small\",{className:\"version-stamp\"},r().createElement(\"pre\",{className:\"version\"},\"OAS 3.0\")))}))},2372:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(4994),r=n.n(s),a=n(5800),o=n(4380);const l=function(e){let{fn:t,getSystem:n}=e;if(t.jsonSchema202012){const e=(0,a.makeIsExpandable)(t.jsonSchema202012.isExpandable,n);r()(this.fn.jsonSchema202012,{isExpandable:e,getProperties:a.getProperties})}if(\"function\"==typeof t.sampleFromSchema&&t.jsonSchema202012){const e=(0,o.wrapOAS31Fn)({sampleFromSchema:t.jsonSchema202012.sampleFromSchema,sampleFromSchemaGeneric:t.jsonSchema202012.sampleFromSchemaGeneric,createXMLExample:t.jsonSchema202012.createXMLExample,memoizedSampleFromSchema:t.jsonSchema202012.memoizedSampleFromSchema,memoizedCreateXMLExample:t.jsonSchema202012.memoizedCreateXMLExample},n());r()(this.fn,e)}}},9503:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(580),n(1669));const o=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectContactNameField(),o=n.selectContactUrl(),l=n.selectContactEmailField(),c=t(\"Link\");return r().createElement(\"div\",{className:\"info__contact\"},o&&r().createElement(\"div\",null,r().createElement(c,{href:(0,a.Nm)(o),target:\"_blank\"},s,\" - Website\")),l&&r().createElement(c,{href:(0,a.Nm)(`mailto:${l}`)},o?`Send email to ${s}`:`Contact ${s}`))}},6133:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(580),n(1669));const o=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.version(),o=n.url(),l=n.basePath(),c=n.host(),i=n.selectInfoSummaryField(),u=n.selectInfoDescriptionField(),p=n.selectInfoTitleField(),m=n.selectInfoTermsOfServiceUrl(),d=n.selectExternalDocsUrl(),h=n.selectExternalDocsDescriptionField(),g=n.contact(),f=n.license(),y=t(\"Markdown\",!0),S=t(\"Link\"),v=t(\"VersionStamp\"),E=t(\"InfoUrl\"),x=t(\"InfoBasePath\"),w=t(\"License\",!0),C=t(\"Contact\",!0),b=t(\"JsonSchemaDialect\",!0);return r().createElement(\"div\",{className:\"info\"},r().createElement(\"hgroup\",{className:\"main\"},r().createElement(\"h2\",{className:\"title\"},p,s&&r().createElement(v,{version:s})),(c||l)&&r().createElement(x,{host:c,basePath:l}),o&&r().createElement(E,{getComponent:t,url:o})),i&&r().createElement(\"p\",{className:\"info__summary\"},i),r().createElement(\"div\",{className:\"info__description description\"},r().createElement(y,{source:u})),m&&r().createElement(\"div\",{className:\"info__tos\"},r().createElement(S,{target:\"_blank\",href:(0,a.Nm)(m)},\"Terms of service\")),g.size>0&&r().createElement(C,null),f.size>0&&r().createElement(w,null),d&&r().createElement(S,{className:\"info__extdocs\",target:\"_blank\",href:(0,a.Nm)(d)},h||d),r().createElement(b,null))}},2562:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(580),n(1669));const o=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectJsonSchemaDialectField(),o=n.selectJsonSchemaDialectDefault(),l=t(\"Link\");return r().createElement(r().Fragment,null,s&&s===o&&r().createElement(\"p\",{className:\"info__jsonschemadialect\"},\"JSON Schema dialect:\",\" \",r().createElement(l,{target:\"_blank\",href:(0,a.Nm)(s)},s)),s&&s!==o&&r().createElement(\"div\",{className:\"error-wrapper\"},r().createElement(\"div\",{className:\"no-margin\"},r().createElement(\"div\",{className:\"errors\"},r().createElement(\"div\",{className:\"errors-wrapper\"},r().createElement(\"h4\",{className:\"center\"},\"Warning\"),r().createElement(\"p\",{className:\"message\"},r().createElement(\"strong\",null,\"OpenAPI.jsonSchemaDialect\"),\" field contains a value different from the default value of\",\" \",r().createElement(l,{target:\"_blank\",href:o},o),\". Values different from the default one are currently not supported. Please either omit the field or provide it with the default value.\"))))))}},1876:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s),a=(n(580),n(1669));const o=e=>{let{getComponent:t,specSelectors:n}=e;const s=n.selectLicenseNameField(),o=n.selectLicenseUrl(),l=t(\"Link\");return r().createElement(\"div\",{className:\"info__license\"},o?r().createElement(\"div\",{className:\"info__license__url\"},r().createElement(l,{target:\"_blank\",href:(0,a.Nm)(o)},s)):r().createElement(\"span\",null,s))}},2718:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(2605),r=n.n(s),a=n(6689),o=n.n(a);n(580),n(8082);const l=e=>\"string\"==typeof e&&r()(e).call(e,\"#/components/schemas/\")?(e=>{const t=e.replace(/~1/g,\"/\").replace(/~0/g,\"~\");try{return decodeURIComponent(t)}catch{return t}})(e.replace(/^.*#\\/components\\/schemas\\//,\"\")):null,c=(0,a.forwardRef)(((e,t)=>{let{schema:n,getComponent:s,onToggle:r}=e;const c=s(\"JSONSchema202012\"),i=l(n.get(\"$$ref\")),u=(0,a.useCallback)(((e,t)=>{r(i,t)}),[i,r]);return o().createElement(c,{name:i,schema:n.toJS(),ref:t,onExpand:u})}));c.defaultProps={name:\"\",displayName:\"\",isRef:!1,required:!1,expandDepth:0,depth:1,includeReadOnly:!1,includeWriteOnly:!1,onToggle:()=>{}};const i=c},263:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>d});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(1815),c=n.n(l),i=n(6689),u=n.n(i),p=(n(580),n(9003)),m=n.n(p);const d=e=>{var t;let{specActions:n,specSelectors:s,layoutSelectors:a,layoutActions:l,getComponent:p,getConfigs:d}=e;const h=s.selectSchemas(),g=r()(h).length>0,f=[\"components\",\"schemas\"],{docExpansion:y,defaultModelsExpandDepth:S}=d(),v=S>0&&\"none\"!==y,E=a.isShown(f,v),x=p(\"Collapse\"),w=p(\"JSONSchema202012\");(0,i.useEffect)((()=>{const e=E&&S>1,t=null!=s.specResolvedSubtree(f);e&&!t&&n.requestResolvedSubtree(f)}),[E,S]);const C=(0,i.useCallback)((()=>{l.show(f,!E)}),[E]),b=(0,i.useCallback)((e=>{null!==e&&l.readyToScroll(f,e)}),[]),j=e=>t=>{null!==t&&l.readyToScroll([...f,e],t)},_=e=>(t,r)=>{if(r){const t=[...f,e];null!=s.specResolvedSubtree(t)||n.requestResolvedSubtree([...f,e])}};return!g||S<0?null:u().createElement(\"section\",{className:m()(\"models\",{\"is-open\":E}),ref:b},u().createElement(\"h4\",null,u().createElement(\"button\",{\"aria-expanded\":E,className:\"models-control\",onClick:C},u().createElement(\"span\",null,\"Schemas\"),u().createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},u().createElement(\"use\",{xlinkHref:E?\"#large-arrow-up\":\"#large-arrow-down\"})))),u().createElement(x,{isOpened:E},o()(t=c()(h)).call(t,(e=>{let[t,n]=e;return u().createElement(w,{key:t,ref:j(t),schema:n,name:t,onExpand:_(t)})}))))}},3429:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(580);const a=e=>{let{bypass:t,isSwagger2:n,isOAS3:s,isOAS31:a,alsoShow:o,children:l}=e;return t?r().createElement(\"div\",null,l):n&&(s||a)?r().createElement(\"div\",{className:\"version-pragma\"},o,r().createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},r().createElement(\"div\",null,r().createElement(\"h3\",null,\"Unable to render this definition\"),r().createElement(\"p\",null,r().createElement(\"code\",null,\"swagger\"),\" and \",r().createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),r().createElement(\"p\",null,\"Supported version fields are \",r().createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",r().createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",r().createElement(\"code\",null,\"openapi: 3.1.0\"),\").\")))):n||s||a?r().createElement(\"div\",null,l):r().createElement(\"div\",{className:\"version-pragma\"},o,r().createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},r().createElement(\"div\",null,r().createElement(\"h3\",null,\"Unable to render this definition\"),r().createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),r().createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",r().createElement(\"code\",null,'swagger: \"2.0\"'),\" and those that match \",r().createElement(\"code\",null,\"openapi: 3.x.y\"),\" (for example,\",\" \",r().createElement(\"code\",null,\"openapi: 3.1.0\"),\").\"))))}},9508:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(6689),c=n.n(l);n(580);const i=e=>{let{specSelectors:t,getComponent:n}=e;const s=t.selectWebhooksOperations(),a=r()(s),l=n(\"OperationContainer\",!0);return 0===a.length?null:c().createElement(\"div\",{className:\"webhooks\"},c().createElement(\"h2\",null,\"Webhooks\"),o()(a).call(a,(e=>{var t;return c().createElement(\"div\",{key:`${e}-webhook`},o()(t=s[e]).call(t,(t=>c().createElement(l,{key:`${e}-${t.method}-webhook`,op:t.operation,tag:\"webhooks\",method:t.method,path:e,specPath:t.specPath,allowTryItOut:!1}))))})))}},4380:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createOnlyOAS31ComponentWrapper:()=>y,createOnlyOAS31Selector:()=>h,createOnlyOAS31SelectorWrapper:()=>g,createSystemSelector:()=>f,isOAS31:()=>d,wrapOAS31Fn:()=>S});var s=n(4250),r=n.n(s),a=n(3015),o=n.n(a),l=n(3942),c=n.n(l),i=n(1815),u=n.n(i),p=n(6689),m=n.n(p);const d=e=>{const t=e.get(\"openapi\");return\"string\"==typeof t&&/^3\\.1\\.(?:[1-9]\\d*|0)$/.test(t)},h=e=>function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r<n;r++)s[r-1]=arguments[r];return n=>{if(n.getSystem().specSelectors.isOAS31()){const r=e(t,...s);return\"function\"==typeof r?r(n):r}return null}},g=e=>(t,n)=>function(s){for(var r=arguments.length,a=new Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];if(n.getSystem().specSelectors.isOAS31()){const r=e(s,...a);return\"function\"==typeof r?r(t,n):r}return t(...a)},f=e=>function(t){for(var n=arguments.length,s=new Array(n>1?n-1:0),r=1;r<n;r++)s[r-1]=arguments[r];return n=>{const r=e(t,n,...s);return\"function\"==typeof r?r(n):r}},y=e=>(t,n)=>s=>n.specSelectors.isOAS31()?m().createElement(e,r()({},s,{originalComponent:t,getSystem:n.getSystem})):m().createElement(t,s),S=(e,t)=>{var n;const{fn:s,specSelectors:r}=t;return o()(c()(n=u()(e)).call(n,(e=>{let[t,n]=e;const a=s[t];return[t,function(){return r.isOAS31()?n(...arguments):\"function\"==typeof a?a(...arguments):void 0}]})))}},9806:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>A});var s=n(9508),r=n(1876),a=n(9503),o=n(6133),l=n(2562),c=n(3429),i=n(2718),u=n(263),p=n(6608),m=n(7423),d=n(284),h=n(7042),g=n(2914),f=n(1434),y=n(1122),S=n(4380),v=n(9305),E=n(2884),x=n(4280),w=n(9450),C=n(3995),b=n(9525),j=n(5324),_=n(809),N=n(4951),O=n(7536),k=n(2372);const A=e=>{let{fn:t}=e;const n=t.createSystemSelector||S.createSystemSelector,A=t.createOnlyOAS31Selector||S.createOnlyOAS31Selector;return{afterLoad:k.default,fn:{isOAS31:S.isOAS31,createSystemSelector:S.createSystemSelector,createOnlyOAS31Selector:S.createOnlyOAS31Selector},components:{Webhooks:s.default,JsonSchemaDialect:l.default,OAS31Info:o.default,OAS31License:r.default,OAS31Contact:a.default,OAS31VersionPragmaFilter:c.default,OAS31Model:i.default,OAS31Models:u.default,JSONSchema202012KeywordExample:w.default,JSONSchema202012KeywordXml:C.default,JSONSchema202012KeywordDiscriminator:b.default,JSONSchema202012KeywordExternalDocs:j.default},wrapComponents:{InfoContainer:d.default,License:p.default,Contact:m.default,VersionPragmaFilter:f.default,VersionStamp:y.default,Model:h.default,Models:g.default,JSONSchema202012KeywordDescription:_.default,JSONSchema202012KeywordDefault:N.default,JSONSchema202012KeywordProperties:O.default},statePlugins:{spec:{selectors:{isOAS31:n(v.isOAS31),license:v.license,selectLicenseNameField:v.selectLicenseNameField,selectLicenseUrlField:v.selectLicenseUrlField,selectLicenseIdentifierField:A(v.selectLicenseIdentifierField),selectLicenseUrl:n(v.selectLicenseUrl),contact:v.contact,selectContactNameField:v.selectContactNameField,selectContactEmailField:v.selectContactEmailField,selectContactUrlField:v.selectContactUrlField,selectContactUrl:n(v.selectContactUrl),selectInfoTitleField:v.selectInfoTitleField,selectInfoSummaryField:A(v.selectInfoSummaryField),selectInfoDescriptionField:v.selectInfoDescriptionField,selectInfoTermsOfServiceField:v.selectInfoTermsOfServiceField,selectInfoTermsOfServiceUrl:n(v.selectInfoTermsOfServiceUrl),selectExternalDocsDescriptionField:v.selectExternalDocsDescriptionField,selectExternalDocsUrlField:v.selectExternalDocsUrlField,selectExternalDocsUrl:n(v.selectExternalDocsUrl),webhooks:A(v.webhooks),selectWebhooksOperations:A(n(v.selectWebhooksOperations)),selectJsonSchemaDialectField:v.selectJsonSchemaDialectField,selectJsonSchemaDialectDefault:v.selectJsonSchemaDialectDefault,selectSchemas:n(v.selectSchemas)},wrapSelectors:{isOAS3:E.isOAS3,selectLicenseUrl:E.selectLicenseUrl}},oas31:{selectors:{selectLicenseUrl:A(n(x.selectLicenseUrl))}}}}}},5989:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(580);const a=e=>{let{schema:t,getSystem:n}=e;if(null==t||!t.description)return null;const{getComponent:s}=n(),a=s(\"Markdown\");return r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--description\"},r().createElement(\"div\",{className:\"json-schema-2020-12-core-keyword__value json-schema-2020-12-core-keyword__value--secondary\"},r().createElement(a,{source:t.description})))}},9525:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(7252),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(9003)),c=n.n(l),i=n(7749);const u=e=>{let{schema:t,getSystem:n}=e;const s=(null==t?void 0:t.discriminator)||{},{fn:l,getComponent:u}=n(),{useIsExpandedDeeply:p,useComponent:m}=l.jsonSchema202012,d=p(),h=!!s.mapping,[g,f]=(0,a.useState)(d),[y,S]=(0,a.useState)(!1),v=m(\"Accordion\"),E=m(\"ExpandDeepButton\"),x=u(\"JSONSchema202012DeepExpansionContext\")(),w=(0,a.useCallback)((()=>{f((e=>!e))}),[]),C=(0,a.useCallback)(((e,t)=>{f(t),S(t)}),[]);return 0===r()(s).length?null:o().createElement(x.Provider,{value:y},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--discriminator\"},h?o().createElement(o().Fragment,null,o().createElement(v,{expanded:g,onChange:w},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\")),o().createElement(E,{expanded:g,onClick:C})):o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Discriminator\"),s.propertyName&&o().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},s.propertyName),o().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),o().createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!g})},g&&o().createElement(\"li\",{className:\"json-schema-2020-12-property\"},o().createElement(i.default,{discriminator:s})))))}},7749:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>m});var s=n(7252),r=n.n(s),a=n(3942),o=n.n(a),l=n(1815),c=n.n(l),i=n(6689),u=n.n(i);n(580);const p=e=>{var t;let{discriminator:n}=e;const s=(null==n?void 0:n.mapping)||{};return 0===r()(s).length?null:o()(t=c()(s)).call(t,(e=>{let[t,n]=e;return u().createElement(\"div\",{key:`${t}-${n}`,className:\"json-schema-2020-12-keyword\"},u().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},t),u().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},n))}))};p.defaultProps={mapping:void 0};const m=p},9450:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(580);const a=e=>{let{schema:t,getSystem:n}=e;const{fn:s}=n(),{hasKeyword:a,stringify:o}=s.jsonSchema202012.useFn();return a(t,\"example\")?r().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--example\"},r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"Example\"),r().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--const\"},o(t.example))):null}},5324:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});var s=n(7252),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(9003)),c=n.n(l),i=n(1669);const u=e=>{let{schema:t,getSystem:n}=e;const s=(null==t?void 0:t.externalDocs)||{},{fn:l,getComponent:u}=n(),{useIsExpandedDeeply:p,useComponent:m}=l.jsonSchema202012,d=p(),h=!(!s.description&&!s.url),[g,f]=(0,a.useState)(d),[y,S]=(0,a.useState)(!1),v=m(\"Accordion\"),E=m(\"ExpandDeepButton\"),x=u(\"JSONSchema202012KeywordDescription\"),w=u(\"Link\"),C=u(\"JSONSchema202012DeepExpansionContext\")(),b=(0,a.useCallback)((()=>{f((e=>!e))}),[]),j=(0,a.useCallback)(((e,t)=>{f(t),S(t)}),[]);return 0===r()(s).length?null:o().createElement(C.Provider,{value:y},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--externalDocs\"},h?o().createElement(o().Fragment,null,o().createElement(v,{expanded:g,onChange:b},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\")),o().createElement(E,{expanded:g,onClick:j})):o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"External documentation\"),o().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),o().createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!g})},g&&o().createElement(o().Fragment,null,s.description&&o().createElement(\"li\",{className:\"json-schema-2020-12-property\"},o().createElement(x,{schema:s,getSystem:n})),s.url&&o().createElement(\"li\",{className:\"json-schema-2020-12-property\"},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"url\"),o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},o().createElement(w,{target:\"_blank\",href:(0,i.Nm)(s.url)},s.url))))))))}},9023:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>y});var s=n(7104),r=n.n(s),a=n(7252),o=n.n(a),l=n(3942),c=n.n(l),i=n(1815),u=n.n(i),p=n(2605),m=n.n(p),d=n(6689),h=n.n(d),g=(n(580),n(9003)),f=n.n(g);const y=e=>{var t;let{schema:n,getSystem:s}=e;const{fn:a}=s(),{useComponent:l}=a.jsonSchema202012,{getDependentRequired:i,getProperties:p}=a.jsonSchema202012.useFn(),d=a.jsonSchema202012.useConfig(),g=r()(null==n?void 0:n.required)?n.required:[],y=l(\"JSONSchema\"),S=p(n,d);return 0===o()(S).length?null:h().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--properties\"},h().createElement(\"ul\",null,c()(t=u()(S)).call(t,(e=>{let[t,s]=e;const r=m()(g).call(g,t),a=i(t,n);return h().createElement(\"li\",{key:t,className:f()(\"json-schema-2020-12-property\",{\"json-schema-2020-12-property--required\":r})},h().createElement(y,{name:t,schema:s,dependentRequired:a}))}))))}},3995:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(7252),r=n.n(s),a=n(6689),o=n.n(a),l=(n(580),n(9003)),c=n.n(l);const i=e=>{let{schema:t,getSystem:n}=e;const s=(null==t?void 0:t.xml)||{},{fn:l,getComponent:i}=n(),{useIsExpandedDeeply:u,useComponent:p}=l.jsonSchema202012,m=u(),d=!!(s.name||s.namespace||s.prefix),[h,g]=(0,a.useState)(m),[f,y]=(0,a.useState)(!1),S=p(\"Accordion\"),v=p(\"ExpandDeepButton\"),E=i(\"JSONSchema202012DeepExpansionContext\")(),x=(0,a.useCallback)((()=>{g((e=>!e))}),[]),w=(0,a.useCallback)(((e,t)=>{g(t),y(t)}),[]);return 0===r()(s).length?null:o().createElement(E.Provider,{value:f},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword--xml\"},d?o().createElement(o().Fragment,null,o().createElement(S,{expanded:h,onChange:x},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\")),o().createElement(v,{expanded:h,onClick:w})):o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"XML\"),!0===s.attribute&&o().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"attribute\"),!0===s.wrapped&&o().createElement(\"span\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--muted\"},\"wrapped\"),o().createElement(\"strong\",{className:\"json-schema-2020-12__attribute json-schema-2020-12__attribute--primary\"},\"object\"),o().createElement(\"ul\",{className:c()(\"json-schema-2020-12-keyword__children\",{\"json-schema-2020-12-keyword__children--collapsed\":!h})},h&&o().createElement(o().Fragment,null,s.name&&o().createElement(\"li\",{className:\"json-schema-2020-12-property\"},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword json-schema-2020-12-keyword\"},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"name\"),o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},s.name))),s.namespace&&o().createElement(\"li\",{className:\"json-schema-2020-12-property\"},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"namespace\"),o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},s.namespace))),s.prefix&&o().createElement(\"li\",{className:\"json-schema-2020-12-property\"},o().createElement(\"div\",{className:\"json-schema-2020-12-keyword\"},o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__name json-schema-2020-12-keyword__name--secondary\"},\"prefix\"),o().createElement(\"span\",{className:\"json-schema-2020-12-keyword__value json-schema-2020-12-keyword__value--secondary\"},s.prefix)))))))}},5800:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getProperties:()=>u,makeIsExpandable:()=>i});var s=n(1815),r=n.n(s),a=n(9998),o=n.n(a),l=n(3015),c=n.n(l);const i=(e,t)=>{const{fn:n}=t();if(\"function\"!=typeof e)return null;const{hasKeyword:s}=n.jsonSchema202012;return t=>e(t)||s(t,\"example\")||(null==t?void 0:t.xml)||(null==t?void 0:t.discriminator)||(null==t?void 0:t.externalDocs)},u=(e,t)=>{let{includeReadOnly:n,includeWriteOnly:s}=t;if(null==e||!e.properties)return{};const a=r()(e.properties),l=o()(a).call(a,(e=>{let[,t]=e;const r=!0===(null==t?void 0:t.readOnly),a=!0===(null==t?void 0:t.writeOnly);return(!r||n)&&(!a||s)}));return c()(l)}},4951:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(4380).createOnlyOAS31ComponentWrapper)((e=>{let{schema:t,getSystem:n,originalComponent:s}=e;const{getComponent:a}=n(),o=a(\"JSONSchema202012KeywordDiscriminator\"),l=a(\"JSONSchema202012KeywordXml\"),c=a(\"JSONSchema202012KeywordExample\"),i=a(\"JSONSchema202012KeywordExternalDocs\");return r().createElement(r().Fragment,null,r().createElement(s,{schema:t}),r().createElement(o,{schema:t,getSystem:n}),r().createElement(l,{schema:t,getSystem:n}),r().createElement(i,{schema:t,getSystem:n}),r().createElement(c,{schema:t,getSystem:n}))}))},809:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(5989);const r=(0,n(4380).createOnlyOAS31ComponentWrapper)(s.default)},7536:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(9023);const r=(0,n(4380).createOnlyOAS31ComponentWrapper)(s.default)},4280:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{selectLicenseUrl:()=>a});var s=n(6814),r=n(3543);const a=(0,s.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t)=>t.specSelectors.selectLicenseIdentifierField()),((e,t,n,s)=>n?(0,r.mn)(n,e,{selectedServer:t}):s?`https://spdx.org/licenses/${s}.html`:void 0))},9305:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{contact:()=>O,isOAS31:()=>E,license:()=>C,selectContactEmailField:()=>A,selectContactNameField:()=>k,selectContactUrl:()=>P,selectContactUrlField:()=>I,selectExternalDocsDescriptionField:()=>J,selectExternalDocsUrl:()=>K,selectExternalDocsUrlField:()=>$,selectInfoDescriptionField:()=>T,selectInfoSummaryField:()=>R,selectInfoTermsOfServiceField:()=>M,selectInfoTermsOfServiceUrl:()=>D,selectInfoTitleField:()=>q,selectJsonSchemaDialectDefault:()=>V,selectJsonSchemaDialectField:()=>L,selectLicenseIdentifierField:()=>N,selectLicenseNameField:()=>b,selectLicenseUrl:()=>_,selectLicenseUrlField:()=>j,selectSchemas:()=>U,selectWebhooksOperations:()=>w,webhooks:()=>x});var s=n(3942),r=n.n(s),a=n(66),o=n.n(a),l=n(9998),c=n.n(l),i=n(2605),u=n.n(i),p=n(4883),m=n.n(p),d=n(1815),h=n.n(d),g=n(5572),f=n(6814),y=n(3543),S=n(4380);const v=(0,g.Map)(),E=(0,f.createSelector)(((e,t)=>t.specSelectors.specJson()),S.isOAS31),x=()=>e=>e.specSelectors.specJson().get(\"webhooks\",v),w=(0,f.createSelector)(((e,t)=>t.specSelectors.webhooks()),((e,t)=>t.specSelectors.validOperationMethods()),((e,t)=>t.specSelectors.specResolvedSubtree([\"webhooks\"])),((e,t)=>{var n;return g.Map.isMap(e)?r()(n=o()(e).call(e,((e,n,s)=>{var a,o;if(!g.Map.isMap(n))return e;const l=r()(a=c()(o=n.entrySeq()).call(o,(e=>{let[n]=e;return u()(t).call(t,n)}))).call(a,(e=>{let[t,n]=e;return{operation:(0,g.Map)({operation:n}),method:t,path:s,specPath:(0,g.List)([\"webhooks\",s,t])}}));return m()(e).call(e,l)}),(0,g.List)()).groupBy((e=>e.path))).call(n,(e=>e.toArray())).toObject():{}})),C=()=>e=>e.specSelectors.info().get(\"license\",v),b=()=>e=>e.specSelectors.license().get(\"name\",\"License\"),j=()=>e=>e.specSelectors.license().get(\"url\"),_=(0,f.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectLicenseUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),N=()=>e=>e.specSelectors.license().get(\"identifier\"),O=()=>e=>e.specSelectors.info().get(\"contact\",v),k=()=>e=>e.specSelectors.contact().get(\"name\",\"the developer\"),A=()=>e=>e.specSelectors.contact().get(\"email\"),I=()=>e=>e.specSelectors.contact().get(\"url\"),P=(0,f.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectContactUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),q=()=>e=>e.specSelectors.info().get(\"title\"),R=()=>e=>e.specSelectors.info().get(\"summary\"),T=()=>e=>e.specSelectors.info().get(\"description\"),M=()=>e=>e.specSelectors.info().get(\"termsOfService\"),D=(0,f.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectInfoTermsOfServiceField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),J=()=>e=>e.specSelectors.externalDocs().get(\"description\"),$=()=>e=>e.specSelectors.externalDocs().get(\"url\"),K=(0,f.createSelector)(((e,t)=>t.specSelectors.url()),((e,t)=>t.oas3Selectors.selectedServer()),((e,t)=>t.specSelectors.selectExternalDocsUrlField()),((e,t,n)=>{if(n)return(0,y.mn)(n,e,{selectedServer:t})})),L=()=>e=>e.specSelectors.specJson().get(\"jsonSchemaDialect\"),V=()=>\"https://spec.openapis.org/oas/3.1/dialect/base\",U=(0,f.createSelector)(((e,t)=>t.specSelectors.definitions()),((e,t)=>t.specSelectors.specResolvedSubtree([\"components\",\"schemas\"])),((e,t)=>{var n;return g.Map.isMap(e)?g.Map.isMap(t)?o()(n=h()(e.toJS())).call(n,((e,n)=>{let[s,r]=n;const a=t.get(s);return e[s]=(null==a?void 0:a.toJS())||r,e}),{}):e.toJS():{}}))},2884:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{isOAS3:()=>r,selectLicenseUrl:()=>a});var s=n(4380);const r=(e,t)=>function(n){const s=t.specSelectors.isOAS31();for(var r=arguments.length,a=new Array(r>1?r-1:0),o=1;o<r;o++)a[o-1]=arguments[o];return s||e(...a)},a=(0,s.createOnlyOAS31SelectorWrapper)((()=>(e,t)=>t.oas31Selectors.selectLicenseUrl()))},7423:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31Contact\",!0);return r().createElement(n,null)}))},284:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31Info\",!0);return r().createElement(n,null)}))},6608:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const n=t().getComponent(\"OAS31License\",!0);return r().createElement(n,null)}))},7042:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(6689),r=n.n(s),a=n(4380),o=n(5800);const l=(0,a.createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t,...n}=e;const s=t(),{getComponent:a,fn:l,getConfigs:c}=s,i=c(),u=a(\"OAS31Model\"),p=a(\"JSONSchema202012\"),m=a(\"JSONSchema202012Keyword$schema\"),d=a(\"JSONSchema202012Keyword$vocabulary\"),h=a(\"JSONSchema202012Keyword$id\"),g=a(\"JSONSchema202012Keyword$anchor\"),f=a(\"JSONSchema202012Keyword$dynamicAnchor\"),y=a(\"JSONSchema202012Keyword$ref\"),S=a(\"JSONSchema202012Keyword$dynamicRef\"),v=a(\"JSONSchema202012Keyword$defs\"),E=a(\"JSONSchema202012Keyword$comment\"),x=a(\"JSONSchema202012KeywordAllOf\"),w=a(\"JSONSchema202012KeywordAnyOf\"),C=a(\"JSONSchema202012KeywordOneOf\"),b=a(\"JSONSchema202012KeywordNot\"),j=a(\"JSONSchema202012KeywordIf\"),_=a(\"JSONSchema202012KeywordThen\"),N=a(\"JSONSchema202012KeywordElse\"),O=a(\"JSONSchema202012KeywordDependentSchemas\"),k=a(\"JSONSchema202012KeywordPrefixItems\"),A=a(\"JSONSchema202012KeywordItems\"),I=a(\"JSONSchema202012KeywordContains\"),P=a(\"JSONSchema202012KeywordProperties\"),q=a(\"JSONSchema202012KeywordPatternProperties\"),R=a(\"JSONSchema202012KeywordAdditionalProperties\"),T=a(\"JSONSchema202012KeywordPropertyNames\"),M=a(\"JSONSchema202012KeywordUnevaluatedItems\"),D=a(\"JSONSchema202012KeywordUnevaluatedProperties\"),J=a(\"JSONSchema202012KeywordType\"),$=a(\"JSONSchema202012KeywordEnum\"),K=a(\"JSONSchema202012KeywordConst\"),L=a(\"JSONSchema202012KeywordConstraint\"),V=a(\"JSONSchema202012KeywordDependentRequired\"),U=a(\"JSONSchema202012KeywordContentSchema\"),F=a(\"JSONSchema202012KeywordTitle\"),z=a(\"JSONSchema202012KeywordDescription\"),B=a(\"JSONSchema202012KeywordDefault\"),W=a(\"JSONSchema202012KeywordDeprecated\"),H=a(\"JSONSchema202012KeywordReadOnly\"),G=a(\"JSONSchema202012KeywordWriteOnly\"),Z=a(\"JSONSchema202012Accordion\"),X=a(\"JSONSchema202012ExpandDeepButton\"),Y=a(\"JSONSchema202012ChevronRightIcon\"),Q=a(\"withJSONSchema202012Context\")(u,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:i.defaultModelExpandDepth,includeReadOnly:Boolean(n.includeReadOnly),includeWriteOnly:Boolean(n.includeWriteOnly)},components:{JSONSchema:p,Keyword$schema:m,Keyword$vocabulary:d,Keyword$id:h,Keyword$anchor:g,Keyword$dynamicAnchor:f,Keyword$ref:y,Keyword$dynamicRef:S,Keyword$defs:v,Keyword$comment:E,KeywordAllOf:x,KeywordAnyOf:w,KeywordOneOf:C,KeywordNot:b,KeywordIf:j,KeywordThen:_,KeywordElse:N,KeywordDependentSchemas:O,KeywordPrefixItems:k,KeywordItems:A,KeywordContains:I,KeywordProperties:P,KeywordPatternProperties:q,KeywordAdditionalProperties:R,KeywordPropertyNames:T,KeywordUnevaluatedItems:M,KeywordUnevaluatedProperties:D,KeywordType:J,KeywordEnum:$,KeywordConst:K,KeywordConstraint:L,KeywordDependentRequired:V,KeywordContentSchema:U,KeywordTitle:F,KeywordDescription:z,KeywordDefault:B,KeywordDeprecated:W,KeywordReadOnly:H,KeywordWriteOnly:G,Accordion:Z,ExpandDeepButton:X,ChevronRightIcon:Y},fn:{upperFirst:l.upperFirst,isExpandable:(0,o.makeIsExpandable)(l.jsonSchema202012.isExpandable,t),getProperties:o.getProperties}});return r().createElement(Q,n)}))},2914:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(6689),r=n.n(s);const a=(0,n(4380).createOnlyOAS31ComponentWrapper)((e=>{let{getSystem:t}=e;const{getComponent:n,fn:s,getConfigs:o}=t(),l=o();if(a.ModelsWithJSONSchemaContext)return r().createElement(a.ModelsWithJSONSchemaContext,null);const c=n(\"OAS31Models\",!0),i=n(\"JSONSchema202012\"),u=n(\"JSONSchema202012Keyword$schema\"),p=n(\"JSONSchema202012Keyword$vocabulary\"),m=n(\"JSONSchema202012Keyword$id\"),d=n(\"JSONSchema202012Keyword$anchor\"),h=n(\"JSONSchema202012Keyword$dynamicAnchor\"),g=n(\"JSONSchema202012Keyword$ref\"),f=n(\"JSONSchema202012Keyword$dynamicRef\"),y=n(\"JSONSchema202012Keyword$defs\"),S=n(\"JSONSchema202012Keyword$comment\"),v=n(\"JSONSchema202012KeywordAllOf\"),E=n(\"JSONSchema202012KeywordAnyOf\"),x=n(\"JSONSchema202012KeywordOneOf\"),w=n(\"JSONSchema202012KeywordNot\"),C=n(\"JSONSchema202012KeywordIf\"),b=n(\"JSONSchema202012KeywordThen\"),j=n(\"JSONSchema202012KeywordElse\"),_=n(\"JSONSchema202012KeywordDependentSchemas\"),N=n(\"JSONSchema202012KeywordPrefixItems\"),O=n(\"JSONSchema202012KeywordItems\"),k=n(\"JSONSchema202012KeywordContains\"),A=n(\"JSONSchema202012KeywordProperties\"),I=n(\"JSONSchema202012KeywordPatternProperties\"),P=n(\"JSONSchema202012KeywordAdditionalProperties\"),q=n(\"JSONSchema202012KeywordPropertyNames\"),R=n(\"JSONSchema202012KeywordUnevaluatedItems\"),T=n(\"JSONSchema202012KeywordUnevaluatedProperties\"),M=n(\"JSONSchema202012KeywordType\"),D=n(\"JSONSchema202012KeywordEnum\"),J=n(\"JSONSchema202012KeywordConst\"),$=n(\"JSONSchema202012KeywordConstraint\"),K=n(\"JSONSchema202012KeywordDependentRequired\"),L=n(\"JSONSchema202012KeywordContentSchema\"),V=n(\"JSONSchema202012KeywordTitle\"),U=n(\"JSONSchema202012KeywordDescription\"),F=n(\"JSONSchema202012KeywordDefault\"),z=n(\"JSONSchema202012KeywordDeprecated\"),B=n(\"JSONSchema202012KeywordReadOnly\"),W=n(\"JSONSchema202012KeywordWriteOnly\"),H=n(\"JSONSchema202012Accordion\"),G=n(\"JSONSchema202012ExpandDeepButton\"),Z=n(\"JSONSchema202012ChevronRightIcon\"),X=n(\"withJSONSchema202012Context\");return a.ModelsWithJSONSchemaContext=X(c,{config:{default$schema:\"https://spec.openapis.org/oas/3.1/dialect/base\",defaultExpandedLevels:l.defaultModelsExpandDepth-1,includeReadOnly:!0,includeWriteOnly:!0},components:{JSONSchema:i,Keyword$schema:u,Keyword$vocabulary:p,Keyword$id:m,Keyword$anchor:d,Keyword$dynamicAnchor:h,Keyword$ref:g,Keyword$dynamicRef:f,Keyword$defs:y,Keyword$comment:S,KeywordAllOf:v,KeywordAnyOf:E,KeywordOneOf:x,KeywordNot:w,KeywordIf:C,KeywordThen:b,KeywordElse:j,KeywordDependentSchemas:_,KeywordPrefixItems:N,KeywordItems:O,KeywordContains:k,KeywordProperties:A,KeywordPatternProperties:I,KeywordAdditionalProperties:P,KeywordPropertyNames:q,KeywordUnevaluatedItems:R,KeywordUnevaluatedProperties:T,KeywordType:M,KeywordEnum:D,KeywordConst:J,KeywordConstraint:$,KeywordDependentRequired:K,KeywordContentSchema:L,KeywordTitle:V,KeywordDescription:U,KeywordDefault:F,KeywordDeprecated:z,KeywordReadOnly:B,KeywordWriteOnly:W,Accordion:H,ExpandDeepButton:G,ChevronRightIcon:Z},fn:{upperFirst:s.upperFirst,isExpandable:s.jsonSchema202012.isExpandable,getProperties:s.jsonSchema202012.getProperties}}),r().createElement(a.ModelsWithJSONSchemaContext,null)}));a.ModelsWithJSONSchemaContext=null;const o=a},1434:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(4250),r=n.n(s),a=n(6689),o=n.n(a);const l=(e,t)=>e=>{const n=t.specSelectors.isOAS31(),s=t.getComponent(\"OAS31VersionPragmaFilter\");return o().createElement(s,r()({isOAS31:n},e))}},1122:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);const a=(0,n(4380).createOnlyOAS31ComponentWrapper)((e=>{let{originalComponent:t,...n}=e;return r().createElement(\"span\",null,r().createElement(t,n),r().createElement(\"small\",{className:\"version-stamp\"},r().createElement(\"pre\",{className:\"version\"},\"OAS 3.1\")))}))},8560:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(9300),r=n.n(s);let a=!1;function o(){return{statePlugins:{spec:{wrapActions:{updateSpec:e=>function(){return a=!0,e(...arguments)},updateJsonSpec:(e,t)=>function(){const n=t.getConfigs().onComplete;return a&&\"function\"==typeof n&&(r()(n,0),a=!1),e(...arguments)}}}}}}},8223:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{requestSnippetGenerator_curl_bash:()=>j,requestSnippetGenerator_curl_cmd:()=>_,requestSnippetGenerator_curl_powershell:()=>b});var s=n(8493),r=n.n(s),a=n(7390),o=n.n(a),l=n(8344),c=n.n(l),i=n(3942),u=n.n(i);const p=require(\"@babel/runtime-corejs3/core-js-stable/instance/repeat\");var m=n.n(p),d=n(7862),h=n.n(d),g=n(2605),f=n.n(g),y=n(7504),S=n(5572);const v=e=>{var t;const n=\"_**[]\";return r()(e).call(e,n)<0?e:o()(t=e.split(n)[0]).call(t)},E=e=>\"-d \"===e||/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/'/g,\"'\\\\''\")+\"'\",x=e=>\"-d \"===(e=e.replace(/\\^/g,\"^^\").replace(/\\\\\"/g,'\\\\\\\\\"').replace(/\"/g,'\"\"').replace(/\\n/g,\"^\\n\"))?e.replace(/-d /g,\"-d ^\\n\"):/^[_\\/-]/g.test(e)?e:'\"'+e+'\"',w=e=>\"-d \"===e?e:/\\n/.test(e)?'@\"\\n'+e.replace(/\"/g,'\\\\\"').replace(/`/g,\"``\").replace(/\\$/,\"`$\")+'\\n\"@':/^[_\\/-]/g.test(e)?e:\"'\"+e.replace(/\"/g,'\"\"').replace(/'/g,\"''\")+\"'\";const C=function(e,t,n){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:\"\",r=!1,a=\"\";const o=function(){for(var e=arguments.length,n=new Array(e),s=0;s<e;s++)n[s]=arguments[s];return a+=\" \"+u()(n).call(n,t).join(\" \")},l=function(){for(var e=arguments.length,n=new Array(e),s=0;s<e;s++)n[s]=arguments[s];return a+=u()(n).call(n,t).join(\" \")},i=()=>a+=` ${n}`,p=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;return a+=m()(\"  \").call(\"  \",e)};let d=e.get(\"headers\");if(a+=\"curl\"+s,e.has(\"curlOptions\")&&o(...e.get(\"curlOptions\")),o(\"-X\",e.get(\"method\")),i(),p(),l(`${e.get(\"url\")}`),d&&d.size)for(let t of h()(g=e.get(\"headers\")).call(g)){var g;i(),p();let[e,n]=t;l(\"-H\",`${e}: ${n}`),r=r||/^content-type$/i.test(e)&&/^multipart\\/form-data$/i.test(n)}const E=e.get(\"body\");var x;if(E)if(r&&f()(x=[\"POST\",\"PUT\",\"PATCH\"]).call(x,e.get(\"method\")))for(let[e,t]of E.entrySeq()){let n=v(e);i(),p(),l(\"-F\"),t instanceof y.Z.File?o(`${n}=@${t.name}${t.type?`;type=${t.type}`:\"\"}`):o(`${n}=${t}`)}else if(E instanceof y.Z.File)i(),p(),l(`--data-binary '@${E.name}'`);else{i(),p(),l(\"-d \");let t=E;S.Map.isMap(t)?l(function(e){let t=[];for(let[n,s]of e.get(\"body\").entrySeq()){let e=v(n);s instanceof y.Z.File?t.push(`  \"${e}\": {\\n    \"name\": \"${s.name}\"${s.type?`,\\n    \"type\": \"${s.type}\"`:\"\"}\\n  }`):t.push(`  \"${e}\": ${c()(s,null,2).replace(/(\\r\\n|\\r|\\n)/g,\"\\n  \")}`)}return`{\\n${t.join(\",\\n\")}\\n}`}(e)):(\"string\"!=typeof t&&(t=c()(t)),l(t))}else E||\"POST\"!==e.get(\"method\")||(i(),p(),l(\"-d ''\"));return a},b=e=>C(e,w,\"`\\n\",\".exe\"),j=e=>C(e,E,\"\\\\\\n\"),_=e=>C(e,x,\"^\\n\")},6575:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>o});var s=n(8223),r=n(4669),a=n(4206);const o=()=>({components:{RequestSnippets:a.default},fn:s,statePlugins:{requestSnippets:{selectors:r}}})},4206:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>x});var s=n(9998),r=n.n(s),a=n(1733),o=n.n(a),l=n(4235),c=n.n(l),i=n(3942),u=n.n(i),p=n(6689),m=n.n(p),d=(n(580),n(1712)),h=n.n(d),g=n(5716),f=n.n(g),y=n(2807),S=n(6068);const v={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(250, 250, 250)\",paddingBottom:\"0\",paddingTop:\"0\",border:\"1px solid rgb(51, 51, 51)\",borderRadius:\"4px 4px 0 0\",boxShadow:\"none\",borderBottom:\"none\"},E={cursor:\"pointer\",lineHeight:1,display:\"inline-flex\",backgroundColor:\"rgb(51, 51, 51)\",boxShadow:\"none\",border:\"1px solid rgb(51, 51, 51)\",paddingBottom:\"0\",paddingTop:\"0\",borderRadius:\"4px 4px 0 0\",marginTop:\"-5px\",marginRight:\"-5px\",marginLeft:\"-5px\",zIndex:\"9999\",borderBottom:\"none\"},x=e=>{var t,n;let{request:s,requestSnippetsSelectors:a,getConfigs:l}=e;const i=f()(l)?l():null,d=!1!==h()(i,\"syntaxHighlight\")&&h()(i,\"syntaxHighlight.activated\",!0),g=(0,p.useRef)(null),[x,w]=(0,p.useState)(null===(t=a.getSnippetGenerators())||void 0===t?void 0:t.keySeq().first()),[C,b]=(0,p.useState)(null==a?void 0:a.getDefaultExpanded());(0,p.useEffect)((()=>{}),[]),(0,p.useEffect)((()=>{var e;const t=r()(e=o()(g.current.childNodes)).call(e,(e=>{var t;return!!e.nodeType&&(null===(t=e.classList)||void 0===t?void 0:t.contains(\"curl-command\"))}));return c()(t).call(t,(e=>e.addEventListener(\"mousewheel\",A,{passive:!1}))),()=>{c()(t).call(t,(e=>e.removeEventListener(\"mousewheel\",A)))}}),[s]);const j=a.getSnippetGenerators(),_=j.get(x),N=_.get(\"fn\")(s),O=()=>{b(!C)},k=e=>e===x?E:v,A=e=>{const{target:t,deltaY:n}=e,{scrollHeight:s,offsetHeight:r,scrollTop:a}=t;s>r&&(0===a&&n<0||r+a>=s&&n>0)&&e.preventDefault()},I=d?m().createElement(S.d3,{language:_.get(\"syntax\"),className:\"curl microlight\",style:(0,S.C2)(h()(i,\"syntaxHighlight.theme\"))},N):m().createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:N});return m().createElement(\"div\",{className:\"request-snippets\",ref:g},m().createElement(\"div\",{style:{width:\"100%\",display:\"flex\",justifyContent:\"flex-start\",alignItems:\"center\",marginBottom:\"15px\"}},m().createElement(\"h4\",{onClick:()=>O(),style:{cursor:\"pointer\"}},\"Snippets\"),m().createElement(\"button\",{onClick:()=>O(),style:{border:\"none\",background:\"none\"},title:C?\"Collapse operation\":\"Expand operation\"},m().createElement(\"svg\",{className:\"arrow\",width:\"10\",height:\"10\"},m().createElement(\"use\",{href:C?\"#large-arrow-down\":\"#large-arrow\",xlinkHref:C?\"#large-arrow-down\":\"#large-arrow\"})))),C&&m().createElement(\"div\",{className:\"curl-command\"},m().createElement(\"div\",{style:{paddingLeft:\"15px\",paddingRight:\"10px\",width:\"100%\",display:\"flex\"}},u()(n=j.entrySeq()).call(n,(e=>{let[t,n]=e;return m().createElement(\"div\",{style:k(t),className:\"btn\",key:t,onClick:()=>(e=>{x!==e&&w(e)})(t)},m().createElement(\"h4\",{style:t===x?{color:\"white\"}:{}},n.get(\"title\")))}))),m().createElement(\"div\",{className:\"copy-to-clipboard\"},m().createElement(y.CopyToClipboard,{text:N},m().createElement(\"button\",null))),m().createElement(\"div\",null,I)))}},4669:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getActiveLanguage:()=>h,getDefaultExpanded:()=>g,getGenerators:()=>m,getSnippetGenerators:()=>d});var s=n(9998),r=n.n(s),a=n(2605),o=n.n(a),l=n(3942),c=n.n(l),i=n(6814),u=n(5572);const p=e=>e||(0,u.Map)(),m=(0,i.createSelector)(p,(e=>{const t=e.get(\"languages\"),n=e.get(\"generators\",(0,u.Map)());return!t||t.isEmpty()?n:r()(n).call(n,((e,n)=>o()(t).call(t,n)))})),d=e=>t=>{var n,s;let{fn:a}=t;return r()(n=c()(s=m(e)).call(s,((e,t)=>{const n=(e=>a[`requestSnippetGenerator_${e}`])(t);return\"function\"!=typeof n?null:e.set(\"fn\",n)}))).call(n,(e=>e))},h=(0,i.createSelector)(p,(e=>e.get(\"activeLanguage\"))),g=(0,i.createSelector)(p,(e=>e.get(\"defaultExpanded\")))},6195:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{ErrorBoundary:()=>l,default:()=>c});n(580);var s=n(6689),r=n.n(s),a=n(6189),o=n(9403);class l extends s.Component{static getDerivedStateFromError(e){return{hasError:!0,error:e}}constructor(){super(...arguments),this.state={hasError:!1,error:null}}componentDidCatch(e,t){this.props.fn.componentDidCatch(e,t)}render(){const{getComponent:e,targetName:t,children:n}=this.props;if(this.state.hasError){const n=e(\"Fallback\");return r().createElement(n,{name:t})}return n}}l.defaultProps={targetName:\"this component\",getComponent:()=>o.default,fn:{componentDidCatch:a.componentDidCatch},children:null};const c=l},9403:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>a});var s=n(6689),r=n.n(s);n(580);const a=e=>{let{name:t}=e;return r().createElement(\"div\",{className:\"fallback\"},\"😱 \",r().createElement(\"i\",null,\"Could not render \",\"t\"===t?\"this component\":t,\", see the console.\"))}},6189:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{componentDidCatch:()=>l,withErrorBoundary:()=>c});var s=n(4250),r=n.n(s),a=n(6689),o=n.n(a);const l=console.error,c=e=>t=>{const{getComponent:n,fn:s}=e(),l=n(\"ErrorBoundary\"),c=s.getDisplayName(t);class i extends a.Component{render(){return o().createElement(l,{targetName:c,getComponent:n,fn:s},o().createElement(t,r()({},this.props,this.context)))}}var u;return i.displayName=`WithErrorBoundary(${c})`,(u=t).prototype&&u.prototype.isReactComponent&&(i.prototype.mapStateToProps=t.prototype.mapStateToProps),i}},9595:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>u});const s=require(\"@babel/runtime-corejs3/core-js-stable/instance/fill\");var r=n.n(s);const a=require(\"lodash/zipObject\");var o=n.n(a),l=n(6195),c=n(9403),i=n(6189);const u=function(){let{componentList:e=[],fullOverride:t=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return n=>{var s;let{getSystem:a}=n;const u=t?e:[\"App\",\"BaseLayout\",\"VersionPragmaFilter\",\"InfoContainer\",\"ServersContainer\",\"SchemesContainer\",\"AuthorizeBtnContainer\",\"FilterContainer\",\"Operations\",\"OperationContainer\",\"parameters\",\"responses\",\"OperationServers\",\"Models\",\"ModelWrapper\",...e],p=o()(u,r()(s=Array(u.length)).call(s,((e,t)=>{let{fn:n}=t;return n.withErrorBoundary(e)})));return{fn:{componentDidCatch:i.componentDidCatch,withErrorBoundary:(0,i.withErrorBoundary)(a)},components:{ErrorBoundary:l.default,Fallback:c.default},wrapComponents:p}}}},2846:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>p});var s=n(66),r=n.n(s),a=n(8344),o=n.n(a),l=n(4129),c=n.n(l);const i=[{when:/json/,shouldStringifyTypes:[\"string\"]}],u=[\"object\"],p=e=>(t,n,s,a)=>{const{fn:l}=e(),p=l.memoizedSampleFromSchema(t,n,a),m=typeof p,d=r()(i).call(i,((e,t)=>t.when.test(s)?[...e,...t.shouldStringifyTypes]:e),u);return c()(d,(e=>e===m))?o()(p,null,2):p}},6132:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=e=>function(t){var n,s;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;const{fn:l}=e();return\"function\"==typeof(null===(n=t)||void 0===n?void 0:n.toJS)&&(t=t.toJS()),\"function\"==typeof(null===(s=o)||void 0===s?void 0:s.toJS)&&(o=o.toJS()),/xml/.test(r)?l.getXmlSampleSchema(t,a,o):/(yaml|yml)/.test(r)?l.getYamlSampleSchema(t,a,r,o):l.getJsonSampleSchema(t,a,r,o)}},1169:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>s});const s=e=>(t,n,s)=>{const{fn:r}=e();if(t&&!t.xml&&(t.xml={}),t&&!t.xml.name){if(!t.$$ref&&(t.type||t.items||t.properties||t.additionalProperties))return'<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n\\x3c!-- XML example cannot be generated; root element name is undefined --\\x3e';if(t.$$ref){let e=t.$$ref.match(/\\S*\\/(\\S+)$/);t.xml.name=e[1]}}return r.memoizedCreateXMLExample(t,n,s)}},9431:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(600),r=n.n(s),a=n(9793),o=n.n(a);const l=e=>(t,n,s,l)=>{const{fn:c}=e(),i=c.getJsonSampleSchema(t,n,s,l);let u;try{u=o().dump(o().load(i),{lineWidth:-1},{schema:a.JSON_SCHEMA}),\"\\n\"===u[u.length-1]&&(u=r()(u).call(u,0,u.length-1))}catch(e){return console.error(e),\"error: could not generate yaml example\"}return u.replace(/\\t/g,\"  \")}},9812:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{createXMLExample:()=>L,inferSchema:()=>K,memoizedCreateXMLExample:()=>F,memoizedSampleFromSchema:()=>z,sampleFromSchema:()=>V,sampleFromSchemaGeneric:()=>$});var s=n(8493),r=n.n(s),a=n(4235),o=n.n(a),l=n(7104),c=n.n(l),i=n(2605),u=n.n(i),p=n(5626),m=n.n(p),d=n(600),h=n.n(d),g=n(3580),f=n.n(g),y=n(4883),S=n.n(y),v=n(3942),E=n.n(v),x=n(8344),w=n.n(x),C=n(8920),b=n.n(C),j=n(9989),_=n.n(j),N=n(9699),O=n.n(N),k=n(1669),A=n(7481);const I={string:e=>e.pattern?(e=>{try{return new(_())(e).gen()}catch(e){return\"string\"}})(e.pattern):\"string\",string_email:()=>\"user@example.com\",\"string_date-time\":()=>(new Date).toISOString(),string_date:()=>(new Date).toISOString().substring(0,10),string_uuid:()=>\"3fa85f64-5717-4562-b3fc-2c963f66afa6\",string_hostname:()=>\"example.com\",string_ipv4:()=>\"198.51.100.42\",string_ipv6:()=>\"2001:0db8:5b96:0000:0000:426f:8e17:642a\",number:()=>0,number_float:()=>0,integer:()=>0,boolean:e=>\"boolean\"!=typeof e.default||e.default},P=e=>{e=(0,k.mz)(e);let{type:t,format:n}=e,s=I[`${t}_${n}`]||I[t];return(0,k.Wl)(s)?s(e):\"Unknown Type: \"+e.type},q=e=>(0,k.XV)(e,\"$$ref\",(e=>\"string\"==typeof e&&r()(e).call(e,\"#\")>-1)),R=[\"maxProperties\",\"minProperties\"],T=[\"minItems\",\"maxItems\"],M=[\"minimum\",\"maximum\",\"exclusiveMinimum\",\"exclusiveMaximum\"],D=[\"minLength\",\"maxLength\"],J=function(e,t){var n;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};var a;(o()(n=[\"example\",\"default\",\"enum\",\"xml\",\"type\",...R,...T,...M,...D]).call(n,(n=>(n=>{void 0===t[n]&&void 0!==e[n]&&(t[n]=e[n])})(n))),void 0!==e.required&&c()(e.required))&&(void 0!==t.required&&t.required.length||(t.required=[]),o()(a=e.required).call(a,(e=>{var n;u()(n=t.required).call(n,e)||t.required.push(e)})));if(e.properties){t.properties||(t.properties={});let n=(0,k.mz)(e.properties);for(let a in n){var l;if(Object.prototype.hasOwnProperty.call(n,a))if(!n[a]||!n[a].deprecated)if(!n[a]||!n[a].readOnly||s.includeReadOnly)if(!n[a]||!n[a].writeOnly||s.includeWriteOnly)if(!t.properties[a])t.properties[a]=n[a],!e.required&&c()(e.required)&&-1!==r()(l=e.required).call(l,a)&&(t.required?t.required.push(a):t.required=[a])}}return e.items&&(t.items||(t.items={}),t.items=J(e.items,t.items,s)),t},$=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e&&(0,k.Wl)(e.toJS)&&(e=e.toJS());let a=void 0!==n||e&&void 0!==e.example||e&&void 0!==e.default;const l=!a&&e&&e.oneOf&&e.oneOf.length>0,i=!a&&e&&e.anyOf&&e.anyOf.length>0;if(!a&&(l||i)){const n=(0,k.mz)(l?e.oneOf[0]:e.anyOf[0]);if(J(n,e,t),!e.xml&&n.xml&&(e.xml=n.xml),void 0!==e.example&&void 0!==n.example)a=!0;else if(n.properties){e.properties||(e.properties={});let s=(0,k.mz)(n.properties);for(let a in s){var p;if(Object.prototype.hasOwnProperty.call(s,a))if(!s[a]||!s[a].deprecated)if(!s[a]||!s[a].readOnly||t.includeReadOnly)if(!s[a]||!s[a].writeOnly||t.includeWriteOnly)if(!e.properties[a])e.properties[a]=s[a],!n.required&&c()(n.required)&&-1!==r()(p=n.required).call(p,a)&&(e.required?e.required.push(a):e.required=[a])}}}const d={};let{xml:g,type:y,example:v,properties:x,additionalProperties:w,items:C}=e||{},{includeReadOnly:b,includeWriteOnly:j}=t;g=g||{};let _,{name:N,prefix:A,namespace:I}=g,D={};if(s&&(N=N||\"notagname\",_=(A?A+\":\":\"\")+N,I)){d[A?\"xmlns:\"+A:\"xmlns\"]=I}s&&(D[_]=[]);const K=t=>m()(t).call(t,(t=>Object.prototype.hasOwnProperty.call(e,t)));e&&!y&&(x||w||K(R)?y=\"object\":C||K(T)?y=\"array\":K(M)?(y=\"number\",e.type=\"number\"):a||e.enum||(y=\"string\",e.type=\"string\"));const L=t=>{var n,s,r,a,o;null!==(null===(n=e)||void 0===n?void 0:n.maxItems)&&void 0!==(null===(s=e)||void 0===s?void 0:s.maxItems)&&(t=h()(t).call(t,0,null===(o=e)||void 0===o?void 0:o.maxItems));if(null!==(null===(r=e)||void 0===r?void 0:r.minItems)&&void 0!==(null===(a=e)||void 0===a?void 0:a.minItems)){let n=0;for(;t.length<(null===(l=e)||void 0===l?void 0:l.minItems);){var l;t.push(t[n++%t.length])}}return t},V=(0,k.mz)(x);let U,F=0;const z=()=>e&&null!==e.maxProperties&&void 0!==e.maxProperties&&F>=e.maxProperties,B=t=>!e||null===e.maxProperties||void 0===e.maxProperties||!z()&&(!(t=>{var n;return!(e&&e.required&&e.required.length&&u()(n=e.required).call(n,t))})(t)||e.maxProperties-F-(()=>{if(!e||!e.required)return 0;let t=0;var n,r;return s?o()(n=e.required).call(n,(e=>t+=void 0===D[e]?0:1)):o()(r=e.required).call(r,(e=>{var n;return t+=void 0===(null===(n=D[_])||void 0===n?void 0:f()(n).call(n,(t=>void 0!==t[e])))?0:1})),e.required.length-t})()>0);if(U=s?function(n){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;if(e&&V[n]){if(V[n].xml=V[n].xml||{},V[n].xml.attribute){const e=c()(V[n].enum)?V[n].enum[0]:void 0,t=V[n].example,s=V[n].default;return void(d[V[n].xml.name||n]=void 0!==t?t:void 0!==s?s:void 0!==e?e:P(V[n]))}V[n].xml.name=V[n].xml.name||n}else V[n]||!1===w||(V[n]={xml:{name:n}});let a=$(e&&V[n]||void 0,t,r,s);var o;B(n)&&(F++,c()(a)?D[_]=S()(o=D[_]).call(o,a):D[_].push(a))}:(n,r)=>{if(B(n)){if(Object.prototype.hasOwnProperty.call(e,\"discriminator\")&&e.discriminator&&Object.prototype.hasOwnProperty.call(e.discriminator,\"mapping\")&&e.discriminator.mapping&&Object.prototype.hasOwnProperty.call(e,\"$$ref\")&&e.$$ref&&e.discriminator.propertyName===n){for(let t in e.discriminator.mapping)if(-1!==e.$$ref.search(e.discriminator.mapping[t])){D[n]=t;break}}else D[n]=$(V[n],t,r,s);F++}},a){let r;if(r=q(void 0!==n?n:void 0!==v?v:e.default),!s){if(\"number\"==typeof r&&\"string\"===y)return`${r}`;if(\"string\"!=typeof r||\"string\"===y)return r;try{return JSON.parse(r)}catch(e){return r}}if(e||(y=c()(r)?\"array\":typeof r),\"array\"===y){if(!c()(r)){if(\"string\"==typeof r)return r;r=[r]}const n=e?e.items:void 0;n&&(n.xml=n.xml||g||{},n.xml.name=n.xml.name||g.name);let a=E()(r).call(r,(e=>$(n,t,e,s)));return a=L(a),g.wrapped?(D[_]=a,O()(d)||D[_].push({_attr:d})):D=a,D}if(\"object\"===y){if(\"string\"==typeof r)return r;for(let t in r)Object.prototype.hasOwnProperty.call(r,t)&&(e&&V[t]&&V[t].readOnly&&!b||e&&V[t]&&V[t].writeOnly&&!j||(e&&V[t]&&V[t].xml&&V[t].xml.attribute?d[V[t].xml.name||t]=r[t]:U(t,r[t])));return O()(d)||D[_].push({_attr:d}),D}return D[_]=O()(d)?r:[{_attr:d},r],D}if(\"object\"===y){for(let e in V)Object.prototype.hasOwnProperty.call(V,e)&&(V[e]&&V[e].deprecated||V[e]&&V[e].readOnly&&!b||V[e]&&V[e].writeOnly&&!j||U(e));if(s&&d&&D[_].push({_attr:d}),z())return D;if(!0===w)s?D[_].push({additionalProp:\"Anything can be here\"}):D.additionalProp1={},F++;else if(w){const n=(0,k.mz)(w),r=$(n,t,void 0,s);if(s&&n.xml&&n.xml.name&&\"notagname\"!==n.xml.name)D[_].push(r);else{const t=null!==e.minProperties&&void 0!==e.minProperties&&F<e.minProperties?e.minProperties-F:3;for(let e=1;e<=t;e++){if(z())return D;if(s){const t={};t[\"additionalProp\"+e]=r.notagname,D[_].push(t)}else D[\"additionalProp\"+e]=r;F++}}}return D}if(\"array\"===y){if(!C)return;let n;var W,H;if(s)C.xml=C.xml||(null===(W=e)||void 0===W?void 0:W.xml)||{},C.xml.name=C.xml.name||g.name;if(c()(C.anyOf))n=E()(H=C.anyOf).call(H,(e=>$(J(C,e,t),t,void 0,s)));else if(c()(C.oneOf)){var G;n=E()(G=C.oneOf).call(G,(e=>$(J(C,e,t),t,void 0,s)))}else{if(!(!s||s&&g.wrapped))return $(C,t,void 0,s);n=[$(C,t,void 0,s)]}return n=L(n),s&&g.wrapped?(D[_]=n,O()(d)||D[_].push({_attr:d}),D):n}let Z;if(e&&c()(e.enum))Z=(0,k.AF)(e.enum)[0];else{if(!e)return;if(Z=P(e),\"number\"==typeof Z){let t=e.minimum;null!=t&&(e.exclusiveMinimum&&t++,Z=t);let n=e.maximum;null!=n&&(e.exclusiveMaximum&&n--,Z=n)}if(\"string\"==typeof Z&&(null!==e.maxLength&&void 0!==e.maxLength&&(Z=h()(Z).call(Z,0,e.maxLength)),null!==e.minLength&&void 0!==e.minLength)){let t=0;for(;Z.length<e.minLength;)Z+=Z[t++%Z.length]}}if(\"file\"!==y)return s?(D[_]=O()(d)?Z:[{_attr:d},Z],D):Z},K=e=>(e.schema&&(e=e.schema),e.properties&&(e.type=\"object\"),e),L=(e,t,n)=>{const s=$(e,t,n,!0);if(s)return\"string\"==typeof s?s:b()(s,{declaration:!0,indent:\"\\t\"})},V=(e,t,n)=>$(e,t,n,!1),U=(e,t,n)=>[e,w()(t),w()(n)],F=(0,A.Z)(L,U),z=(0,A.Z)(V,U)},8883:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>c});var s=n(9812),r=n(2846),a=n(9431),o=n(1169),l=n(6132);const c=e=>{let{getSystem:t}=e;return{fn:{inferSchema:s.inferSchema,sampleFromSchema:s.sampleFromSchema,sampleFromSchemaGeneric:s.sampleFromSchemaGeneric,createXMLExample:s.createXMLExample,memoizedSampleFromSchema:s.memoizedSampleFromSchema,memoizedCreateXMLExample:s.memoizedCreateXMLExample,getJsonSampleSchema:(0,r.default)(t),getYamlSampleSchema:(0,a.default)(t),getXmlSampleSchema:(0,o.default)(t),getSampleSchema:(0,l.default)(t)}}}},7080:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{CLEAR_REQUEST:()=>te,CLEAR_RESPONSE:()=>ee,CLEAR_VALIDATE_PARAMS:()=>ne,LOG_REQUEST:()=>Q,SET_MUTATED_REQUEST:()=>Y,SET_REQUEST:()=>X,SET_RESPONSE:()=>Z,SET_SCHEME:()=>oe,UPDATE_EMPTY_PARAM_INCLUSION:()=>H,UPDATE_JSON:()=>B,UPDATE_OPERATION_META_VALUE:()=>se,UPDATE_PARAM:()=>W,UPDATE_RESOLVED:()=>re,UPDATE_RESOLVED_SUBTREE:()=>ae,UPDATE_SPEC:()=>F,UPDATE_URL:()=>z,VALIDATE_PARAMS:()=>G,changeConsumesValue:()=>je,changeParam:()=>Se,changeParamByIdentity:()=>ve,changeProducesValue:()=>_e,clearRequest:()=>Re,clearResponse:()=>qe,clearValidateParams:()=>be,execute:()=>Pe,executeRequest:()=>Ie,invalidateResolvedSubtreeCache:()=>xe,logRequest:()=>Ae,parseToJson:()=>me,requestResolvedSubtree:()=>ye,resolveSpec:()=>he,setMutatedRequest:()=>ke,setRequest:()=>Oe,setResponse:()=>Ne,setScheme:()=>Te,updateEmptyParamInclusion:()=>Ce,updateJsonSpec:()=>pe,updateResolved:()=>ie,updateResolvedSubtree:()=>Ee,updateSpec:()=>ce,updateUrl:()=>ue,validateParams:()=>we});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a);const l=require(\"@babel/runtime-corejs3/core-js-stable/object/define-property\");var c=n.n(l),i=n(66),u=n.n(i),p=n(7834),m=n.n(p);const d=require(\"@babel/runtime-corejs3/core-js-stable/promise\");var h=n.n(d),g=n(9998),f=n.n(g),y=n(9968),S=n.n(y),v=n(8493),E=n.n(v),x=n(4235),w=n.n(x),C=n(7252),b=n.n(C),j=n(4994),_=n.n(j);const N=require(\"@babel/runtime-corejs3/core-js-stable/date/now\");var O=n.n(N),k=n(9793),A=n.n(k),I=n(5572),P=n(3883),q=n.n(P),R=n(41);const T=require(\"lodash/isString\");var M=n.n(T);const D=require(\"lodash/debounce\");var J=n.n(D);const $=require(\"lodash/set\");var K=n.n($);const L=require(\"lodash/fp/assocPath\");var V=n.n(L),U=n(1669);const F=\"spec_update_spec\",z=\"spec_update_url\",B=\"spec_update_json\",W=\"spec_update_param\",H=\"spec_update_empty_param_inclusion\",G=\"spec_validate_param\",Z=\"spec_set_response\",X=\"spec_set_request\",Y=\"spec_set_mutated_request\",Q=\"spec_log_request\",ee=\"spec_clear_response\",te=\"spec_clear_request\",ne=\"spec_clear_validate_param\",se=\"spec_update_operation_meta_value\",re=\"spec_update_resolved\",ae=\"spec_update_resolved_subtree\",oe=\"set_scheme\",le=e=>M()(e)?e:\"\";function ce(e){const t=le(e).replace(/\\t/g,\"  \");if(\"string\"==typeof e)return{type:F,payload:t}}function ie(e){return{type:re,payload:e}}function ue(e){return{type:z,payload:e}}function pe(e){return{type:B,payload:e}}const me=e=>t=>{let{specActions:n,specSelectors:s,errActions:r}=t,{specStr:a}=s,o=null;try{e=e||a(),r.clear({source:\"parser\"}),o=A().load(e,{schema:k.JSON_SCHEMA})}catch(e){return console.error(e),r.newSpecErr({source:\"parser\",level:\"error\",message:e.reason,line:e.mark&&e.mark.line?e.mark.line+1:void 0})}return o&&\"object\"==typeof o?n.updateJsonSpec(o):{}};let de=!1;const he=(e,t)=>n=>{let{specActions:s,specSelectors:a,errActions:l,fn:{fetch:i,resolve:u,AST:p={}},getConfigs:m}=n;de||(console.warn(\"specActions.resolveSpec is deprecated since v3.10.0 and will be removed in v4.0.0; use requestResolvedSubtree instead!\"),de=!0);const{modelPropertyMacro:d,parameterMacro:h,requestInterceptor:g,responseInterceptor:f}=m();void 0===e&&(e=a.specJson()),void 0===t&&(t=a.url());let y=p.getLineNumberForPath?p.getLineNumberForPath:()=>{},S=a.specStr();return u({fetch:i,spec:e,baseDoc:t,modelPropertyMacro:d,parameterMacro:h,requestInterceptor:g,responseInterceptor:f}).then((e=>{let{spec:t,errors:n}=e;if(l.clear({type:\"thrown\"}),r()(n)&&n.length>0){let e=o()(n).call(n,(e=>(console.error(e),e.line=e.fullPath?y(S,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",c()(e,\"message\",{enumerable:!0,value:e.message}),e)));l.newThrownErrBatch(e)}return s.updateResolved(t)}))};let ge=[];const fe=J()((async()=>{const e=ge.system;if(!e)return void console.error(\"debResolveSubtrees: don't have a system to operate on, aborting.\");const{errActions:t,errSelectors:n,fn:{resolveSubtree:s,fetch:a,AST:l={}},specSelectors:i,specActions:p}=e;if(!s)return void console.error(\"Error: Swagger-Client did not provide a `resolveSubtree` method, doing nothing.\");let d=l.getLineNumberForPath?l.getLineNumberForPath:()=>{};const g=i.specStr(),{modelPropertyMacro:y,parameterMacro:v,requestInterceptor:E,responseInterceptor:x}=e.getConfigs();try{var w=await u()(ge).call(ge,(async(e,l)=>{let{resultMap:u,specWithCurrentSubtrees:p}=await e;const{errors:w,spec:C}=await s(p,l,{baseDoc:i.url(),modelPropertyMacro:y,parameterMacro:v,requestInterceptor:E,responseInterceptor:x});if(n.allErrors().size&&t.clearBy((e=>{var t;return\"thrown\"!==e.get(\"type\")||\"resolver\"!==e.get(\"source\")||!m()(t=e.get(\"fullPath\")).call(t,((e,t)=>e===l[t]||void 0===l[t]))})),r()(w)&&w.length>0){let e=o()(w).call(w,(e=>(e.line=e.fullPath?d(g,e.fullPath):null,e.path=e.fullPath?e.fullPath.join(\".\"):null,e.level=\"error\",e.type=\"thrown\",e.source=\"resolver\",c()(e,\"message\",{enumerable:!0,value:e.message}),e)));t.newThrownErrBatch(e)}var b,j;C&&i.isOAS3()&&\"components\"===l[0]&&\"securitySchemes\"===l[1]&&await h().all(o()(b=f()(j=S()(C)).call(j,(e=>\"openIdConnect\"===e.type))).call(b,(async e=>{const t={url:e.openIdConnectUrl,requestInterceptor:E,responseInterceptor:x};try{const n=await a(t);n instanceof Error||n.status>=400?console.error(n.statusText+\" \"+t.url):e.openIdConnectData=JSON.parse(n.text)}catch(e){console.error(e)}})));return K()(u,l,C),p=V()(l,C,p),{resultMap:u,specWithCurrentSubtrees:p}}),h().resolve({resultMap:(i.specResolvedSubtree([])||(0,I.Map)()).toJS(),specWithCurrentSubtrees:i.specJS()}));delete ge.system,ge=[]}catch(e){console.error(e)}p.updateResolvedSubtree([],w.resultMap)}),35),ye=e=>t=>{var n;E()(n=o()(ge).call(ge,(e=>e.join(\"@@\")))).call(n,e.join(\"@@\"))>-1||(ge.push(e),ge.system=t,fe())};function Se(e,t,n,s,r){return{type:W,payload:{path:e,value:s,paramName:t,paramIn:n,isXml:r}}}function ve(e,t,n,s){return{type:W,payload:{path:e,param:t,value:n,isXml:s}}}const Ee=(e,t)=>({type:ae,payload:{path:e,value:t}}),xe=()=>({type:ae,payload:{path:[],value:(0,I.Map)()}}),we=(e,t)=>({type:G,payload:{pathMethod:e,isOAS3:t}}),Ce=(e,t,n,s)=>({type:H,payload:{pathMethod:e,paramName:t,paramIn:n,includeEmptyValue:s}});function be(e){return{type:ne,payload:{pathMethod:e}}}function je(e,t){return{type:se,payload:{path:e,value:t,key:\"consumes_value\"}}}function _e(e,t){return{type:se,payload:{path:e,value:t,key:\"produces_value\"}}}const Ne=(e,t,n)=>({payload:{path:e,method:t,res:n},type:Z}),Oe=(e,t,n)=>({payload:{path:e,method:t,req:n},type:X}),ke=(e,t,n)=>({payload:{path:e,method:t,req:n},type:Y}),Ae=e=>({payload:e,type:Q}),Ie=e=>t=>{let{fn:n,specActions:s,specSelectors:a,getConfigs:l,oas3Selectors:c}=t,{pathName:i,method:u,operation:p}=e,{requestInterceptor:m,responseInterceptor:d}=l(),h=p.toJS();var g,y;p&&p.get(\"parameters\")&&w()(g=f()(y=p.get(\"parameters\")).call(y,(e=>e&&!0===e.get(\"allowEmptyValue\")))).call(g,(t=>{if(a.parameterInclusionSettingFor([i,u],t.get(\"name\"),t.get(\"in\"))){e.parameters=e.parameters||{};const n=(0,U.cz)(t,e.parameters);(!n||n&&0===n.size)&&(e.parameters[t.get(\"name\")]=\"\")}}));if(e.contextUrl=q()(a.url()).toString(),h&&h.operationId?e.operationId=h.operationId:h&&i&&u&&(e.operationId=n.opId(h,i,u)),a.isOAS3()){const t=`${i}:${u}`;e.server=c.selectedServer(t)||c.selectedServer();const n=c.serverVariables({server:e.server,namespace:t}).toJS(),s=c.serverVariables({server:e.server}).toJS();e.serverVariables=b()(n).length?n:s,e.requestContentType=c.requestContentType(i,u),e.responseContentType=c.responseContentType(i,u)||\"*/*\";const a=c.requestBodyValue(i,u),l=c.requestBodyInclusionSetting(i,u);var S;if(a&&a.toJS)e.requestBody=f()(S=o()(a).call(a,(e=>I.Map.isMap(e)?e.get(\"value\"):e))).call(S,((e,t)=>(r()(e)?0!==e.length:!(0,U.O2)(e))||l.get(t))).toJS();else e.requestBody=a}let v=_()({},e);v=n.buildRequest(v),s.setRequest(e.pathName,e.method,v);e.requestInterceptor=async t=>{let n=await m.apply(void 0,[t]),r=_()({},n);return s.setMutatedRequest(e.pathName,e.method,r),n},e.responseInterceptor=d;const E=O()();return n.execute(e).then((t=>{t.duration=O()()-E,s.setResponse(e.pathName,e.method,t)})).catch((t=>{\"Failed to fetch\"===t.message&&(t.name=\"\",t.message='**Failed to fetch.**  \\n**Possible Reasons:** \\n  - CORS \\n  - Network Failure \\n  - URL scheme must be \"http\" or \"https\" for CORS request.'),s.setResponse(e.pathName,e.method,{error:!0,err:(0,R.serializeError)(t)})}))},Pe=function(){let{path:e,method:t,...n}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return s=>{let{fn:{fetch:r},specSelectors:a,specActions:o}=s,l=a.specJsonWithResolvedSubtrees().toJS(),c=a.operationScheme(e,t),{requestContentType:i,responseContentType:u}=a.contentTypeValues([e,t]).toJS(),p=/xml/i.test(i),m=a.parameterValues([e,t],p).toJS();return o.executeRequest({...n,fetch:r,spec:l,pathName:e,method:t,parameters:m,requestContentType:i,scheme:c,responseContentType:u})}};function qe(e,t){return{type:ee,payload:{path:e,method:t}}}function Re(e,t){return{type:te,payload:{path:e,method:t}}}function Te(e,t,n){return{type:oe,payload:{scheme:e,path:t,method:n}}}},7038:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>l});var s=n(32),r=n(7080),a=n(3881),o=n(7508);function l(){return{statePlugins:{spec:{wrapActions:o,reducers:s.default,actions:r,selectors:a}}}}},32:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>h});var s=n(66),r=n.n(s),a=n(3942),o=n.n(a),l=n(4994),c=n.n(l),i=n(5572),u=n(1669),p=n(7504),m=n(3881),d=n(7080);const h={[d.UPDATE_SPEC]:(e,t)=>\"string\"==typeof t.payload?e.set(\"spec\",t.payload):e,[d.UPDATE_URL]:(e,t)=>e.set(\"url\",t.payload+\"\"),[d.UPDATE_JSON]:(e,t)=>e.set(\"json\",(0,u.oG)(t.payload)),[d.UPDATE_RESOLVED]:(e,t)=>e.setIn([\"resolved\"],(0,u.oG)(t.payload)),[d.UPDATE_RESOLVED_SUBTREE]:(e,t)=>{const{value:n,path:s}=t.payload;return e.setIn([\"resolvedSubtrees\",...s],(0,u.oG)(n))},[d.UPDATE_PARAM]:(e,t)=>{let{payload:n}=t,{path:s,paramName:r,paramIn:a,param:o,value:l,isXml:c}=n,i=o?(0,u.V9)(o):`${a}.${r}`;const p=c?\"value_xml\":\"value\";return e.setIn([\"meta\",\"paths\",...s,\"parameters\",i,p],l)},[d.UPDATE_EMPTY_PARAM_INCLUSION]:(e,t)=>{let{payload:n}=t,{pathMethod:s,paramName:r,paramIn:a,includeEmptyValue:o}=n;if(!r||!a)return console.warn(\"Warning: UPDATE_EMPTY_PARAM_INCLUSION could not generate a paramKey.\"),e;const l=`${a}.${r}`;return e.setIn([\"meta\",\"paths\",...s,\"parameter_inclusions\",l],o)},[d.VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n,isOAS3:s}}=t;const a=(0,m.specJsonWithResolvedSubtrees)(e).getIn([\"paths\",...n]),o=(0,m.parameterValues)(e,n).toJS();return e.updateIn([\"meta\",\"paths\",...n,\"parameters\"],(0,i.fromJS)({}),(t=>{var l;return r()(l=a.get(\"parameters\",(0,i.List)())).call(l,((t,r)=>{const a=(0,u.cz)(r,o),l=(0,m.parameterInclusionSettingFor)(e,n,r.get(\"name\"),r.get(\"in\")),c=(0,u.Ik)(r,a,{bypassRequiredCheck:l,isOAS3:s});return t.setIn([(0,u.V9)(r),\"errors\"],(0,i.fromJS)(c))}),t)}))},[d.CLEAR_VALIDATE_PARAMS]:(e,t)=>{let{payload:{pathMethod:n}}=t;return e.updateIn([\"meta\",\"paths\",...n,\"parameters\"],(0,i.fromJS)([]),(e=>o()(e).call(e,(e=>e.set(\"errors\",(0,i.fromJS)([]))))))},[d.SET_RESPONSE]:(e,t)=>{let n,{payload:{res:s,path:r,method:a}}=t;n=s.error?c()({error:!0,name:s.err.name,message:s.err.message,statusCode:s.err.statusCode},s.err.response):s,n.headers=n.headers||{};let o=e.setIn([\"responses\",r,a],(0,u.oG)(n));return p.Z.Blob&&s.data instanceof p.Z.Blob&&(o=o.setIn([\"responses\",r,a,\"text\"],s.data)),o},[d.SET_REQUEST]:(e,t)=>{let{payload:{req:n,path:s,method:r}}=t;return e.setIn([\"requests\",s,r],(0,u.oG)(n))},[d.SET_MUTATED_REQUEST]:(e,t)=>{let{payload:{req:n,path:s,method:r}}=t;return e.setIn([\"mutatedRequests\",s,r],(0,u.oG)(n))},[d.UPDATE_OPERATION_META_VALUE]:(e,t)=>{let{payload:{path:n,value:s,key:r}}=t,a=[\"paths\",...n],o=[\"meta\",\"paths\",...n];return e.getIn([\"json\",...a])||e.getIn([\"resolved\",...a])||e.getIn([\"resolvedSubtrees\",...a])?e.setIn([...o,r],(0,i.fromJS)(s)):e},[d.CLEAR_RESPONSE]:(e,t)=>{let{payload:{path:n,method:s}}=t;return e.deleteIn([\"responses\",n,s])},[d.CLEAR_REQUEST]:(e,t)=>{let{payload:{path:n,method:s}}=t;return e.deleteIn([\"requests\",n,s])},[d.SET_SCHEME]:(e,t)=>{let{payload:{scheme:n,path:s,method:r}}=t;return s&&r?e.setIn([\"scheme\",s,r],n):s||r?void 0:e.setIn([\"scheme\",\"_defaultScheme\"],n)}}},3881:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{allowTryItOutFor:()=>de,basePath:()=>Q,canExecuteScheme:()=>Oe,consumes:()=>W,consumesOptionsFor:()=>_e,contentTypeValues:()=>Ce,currentProducesFor:()=>be,definitions:()=>Y,externalDocs:()=>L,findDefinition:()=>X,getOAS3RequiredRequestBodyContentType:()=>Ie,getParameter:()=>Se,hasHost:()=>ve,host:()=>ee,info:()=>K,isMediaTypeSchemaPropertiesEqual:()=>Pe,isOAS3:()=>$,lastError:()=>O,mutatedRequestFor:()=>me,mutatedRequests:()=>ie,operationScheme:()=>Ne,operationWithMeta:()=>ye,operations:()=>B,operationsWithRootInherited:()=>ne,operationsWithTags:()=>ae,parameterInclusionSettingFor:()=>ge,parameterValues:()=>Ee,parameterWithMeta:()=>fe,parameterWithMetaByIdentity:()=>he,parametersIncludeIn:()=>xe,parametersIncludeType:()=>we,paths:()=>F,produces:()=>H,producesOptionsFor:()=>je,requestFor:()=>pe,requests:()=>ce,responseFor:()=>ue,responses:()=>le,schemes:()=>te,security:()=>G,securityDefinitions:()=>Z,semver:()=>U,spec:()=>J,specJS:()=>q,specJson:()=>P,specJsonWithResolvedSubtrees:()=>D,specResolved:()=>R,specResolvedSubtree:()=>T,specSource:()=>I,specStr:()=>A,tagDetails:()=>re,taggedOperations:()=>oe,tags:()=>se,url:()=>k,validOperationMethods:()=>z,validateBeforeExecute:()=>Ae,validationErrors:()=>ke,version:()=>V});var s=n(600),r=n.n(s),a=n(4235),o=n.n(a),l=n(8493),c=n.n(l),i=n(3942),u=n.n(i),p=n(9998),m=n.n(p),d=n(3580),h=n.n(d),g=n(66),f=n.n(g),y=n(9247),S=n.n(y),v=n(5626),E=n.n(v),x=n(7104),w=n.n(x),C=n(6814),b=n(1669),j=n(5572);const _=[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],N=e=>e||(0,j.Map)(),O=(0,C.createSelector)(N,(e=>e.get(\"lastError\"))),k=(0,C.createSelector)(N,(e=>e.get(\"url\"))),A=(0,C.createSelector)(N,(e=>e.get(\"spec\")||\"\")),I=(0,C.createSelector)(N,(e=>e.get(\"specSource\")||\"not-editor\")),P=(0,C.createSelector)(N,(e=>e.get(\"json\",(0,j.Map)()))),q=(0,C.createSelector)(P,(e=>e.toJS())),R=(0,C.createSelector)(N,(e=>e.get(\"resolved\",(0,j.Map)()))),T=(e,t)=>e.getIn([\"resolvedSubtrees\",...t],void 0),M=(e,t)=>j.Map.isMap(e)&&j.Map.isMap(t)?t.get(\"$$ref\")?t:(0,j.OrderedMap)().mergeWith(M,e,t):t,D=(0,C.createSelector)(N,(e=>(0,j.OrderedMap)().mergeWith(M,e.get(\"json\"),e.get(\"resolvedSubtrees\")))),J=e=>P(e),$=(0,C.createSelector)(J,(()=>!1)),K=(0,C.createSelector)(J,(e=>qe(e&&e.get(\"info\")))),L=(0,C.createSelector)(J,(e=>qe(e&&e.get(\"externalDocs\")))),V=(0,C.createSelector)(K,(e=>e&&e.get(\"version\"))),U=(0,C.createSelector)(V,(e=>{var t;return r()(t=/v?([0-9]*)\\.([0-9]*)\\.([0-9]*)/i.exec(e)).call(t,1)})),F=(0,C.createSelector)(D,(e=>e.get(\"paths\"))),z=(0,C.createSelector)((()=>[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\"])),B=(0,C.createSelector)(F,(e=>{if(!e||e.size<1)return(0,j.List)();let t=(0,j.List)();return e&&o()(e)?(o()(e).call(e,((e,n)=>{if(!e||!o()(e))return{};o()(e).call(e,((e,s)=>{c()(_).call(_,s)<0||(t=t.push((0,j.fromJS)({path:n,method:s,operation:e,id:`${s}-${n}`})))}))})),t):(0,j.List)()})),W=(0,C.createSelector)(J,(e=>(0,j.Set)(e.get(\"consumes\")))),H=(0,C.createSelector)(J,(e=>(0,j.Set)(e.get(\"produces\")))),G=(0,C.createSelector)(J,(e=>e.get(\"security\",(0,j.List)()))),Z=(0,C.createSelector)(J,(e=>e.get(\"securityDefinitions\"))),X=(e,t)=>{const n=e.getIn([\"resolvedSubtrees\",\"definitions\",t],null),s=e.getIn([\"json\",\"definitions\",t],null);return n||s||null},Y=(0,C.createSelector)(J,(e=>{const t=e.get(\"definitions\");return j.Map.isMap(t)?t:(0,j.Map)()})),Q=(0,C.createSelector)(J,(e=>e.get(\"basePath\"))),ee=(0,C.createSelector)(J,(e=>e.get(\"host\"))),te=(0,C.createSelector)(J,(e=>e.get(\"schemes\",(0,j.Map)()))),ne=(0,C.createSelector)(B,W,H,((e,t,n)=>u()(e).call(e,(e=>e.update(\"operation\",(e=>{if(e){if(!j.Map.isMap(e))return;return e.withMutations((e=>(e.get(\"consumes\")||e.update(\"consumes\",(e=>(0,j.Set)(e).merge(t))),e.get(\"produces\")||e.update(\"produces\",(e=>(0,j.Set)(e).merge(n))),e)))}return(0,j.Map)()})))))),se=(0,C.createSelector)(J,(e=>{const t=e.get(\"tags\",(0,j.List)());return j.List.isList(t)?m()(t).call(t,(e=>j.Map.isMap(e))):(0,j.List)()})),re=(e,t)=>{var n;let s=se(e)||(0,j.List)();return h()(n=m()(s).call(s,j.Map.isMap)).call(n,(e=>e.get(\"name\")===t),(0,j.Map)())},ae=(0,C.createSelector)(ne,se,((e,t)=>f()(e).call(e,((e,t)=>{let n=(0,j.Set)(t.getIn([\"operation\",\"tags\"]));return n.count()<1?e.update(\"default\",(0,j.List)(),(e=>e.push(t))):f()(n).call(n,((e,n)=>e.update(n,(0,j.List)(),(e=>e.push(t)))),e)}),f()(t).call(t,((e,t)=>e.set(t.get(\"name\"),(0,j.List)())),(0,j.OrderedMap)())))),oe=e=>t=>{var n;let{getConfigs:s}=t,{tagsSorter:r,operationsSorter:a}=s();return u()(n=ae(e).sortBy(((e,t)=>t),((e,t)=>{let n=\"function\"==typeof r?r:b.wh.tagsSorter[r];return n?n(e,t):null}))).call(n,((t,n)=>{let s=\"function\"==typeof a?a:b.wh.operationsSorter[a],r=s?S()(t).call(t,s):t;return(0,j.Map)({tagDetails:re(e,n),operations:r})}))},le=(0,C.createSelector)(N,(e=>e.get(\"responses\",(0,j.Map)()))),ce=(0,C.createSelector)(N,(e=>e.get(\"requests\",(0,j.Map)()))),ie=(0,C.createSelector)(N,(e=>e.get(\"mutatedRequests\",(0,j.Map)()))),ue=(e,t,n)=>le(e).getIn([t,n],null),pe=(e,t,n)=>ce(e).getIn([t,n],null),me=(e,t,n)=>ie(e).getIn([t,n],null),de=()=>!0,he=(e,t,n)=>{const s=D(e).getIn([\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),r=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),a=u()(s).call(s,(e=>{const t=r.get(`${n.get(\"in\")}.${n.get(\"name\")}`),s=r.get(`${n.get(\"in\")}.${n.get(\"name\")}.hash-${n.hashCode()}`);return(0,j.OrderedMap)().merge(e,t,s)}));return h()(a).call(a,(e=>e.get(\"in\")===n.get(\"in\")&&e.get(\"name\")===n.get(\"name\")),(0,j.OrderedMap)())},ge=(e,t,n,s)=>{const r=`${s}.${n}`;return e.getIn([\"meta\",\"paths\",...t,\"parameter_inclusions\",r],!1)},fe=(e,t,n,s)=>{const r=D(e).getIn([\"paths\",...t,\"parameters\"],(0,j.OrderedMap)()),a=h()(r).call(r,(e=>e.get(\"in\")===s&&e.get(\"name\")===n),(0,j.OrderedMap)());return he(e,t,a)},ye=(e,t,n)=>{var s;const r=D(e).getIn([\"paths\",t,n],(0,j.OrderedMap)()),a=e.getIn([\"meta\",\"paths\",t,n],(0,j.OrderedMap)()),o=u()(s=r.get(\"parameters\",(0,j.List)())).call(s,(s=>he(e,[t,n],s)));return(0,j.OrderedMap)().merge(r,a).set(\"parameters\",o)};function Se(e,t,n,s){t=t||[];let r=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.fromJS)([]));return h()(r).call(r,(e=>j.Map.isMap(e)&&e.get(\"name\")===n&&e.get(\"in\")===s))||(0,j.Map)()}const ve=(0,C.createSelector)(J,(e=>{const t=e.get(\"host\");return\"string\"==typeof t&&t.length>0&&\"/\"!==t[0]}));function Ee(e,t,n){t=t||[];let s=ye(e,...t).get(\"parameters\",(0,j.List)());return f()(s).call(s,((e,t)=>{let s=n&&\"body\"===t.get(\"in\")?t.get(\"value_xml\"):t.get(\"value\");return e.set((0,b.V9)(t,{allowHashes:!1}),s)}),(0,j.fromJS)({}))}function xe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(j.List.isList(e))return E()(e).call(e,(e=>j.Map.isMap(e)&&e.get(\"in\")===t))}function we(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";if(j.List.isList(e))return E()(e).call(e,(e=>j.Map.isMap(e)&&e.get(\"type\")===t))}function Ce(e,t){t=t||[];let n=D(e).getIn([\"paths\",...t],(0,j.fromJS)({})),s=e.getIn([\"meta\",\"paths\",...t],(0,j.fromJS)({})),r=be(e,t);const a=n.get(\"parameters\")||new j.List,o=s.get(\"consumes_value\")?s.get(\"consumes_value\"):we(a,\"file\")?\"multipart/form-data\":we(a,\"formData\")?\"application/x-www-form-urlencoded\":void 0;return(0,j.fromJS)({requestContentType:o,responseContentType:r})}function be(e,t){t=t||[];const n=D(e).getIn([\"paths\",...t],null);if(null===n)return;const s=e.getIn([\"meta\",\"paths\",...t,\"produces_value\"],null),r=n.getIn([\"produces\",0],null);return s||r||\"application/json\"}function je(e,t){t=t||[];const n=D(e),s=n.getIn([\"paths\",...t],null);if(null===s)return;const[r]=t,a=s.get(\"produces\",null),o=n.getIn([\"paths\",r,\"produces\"],null),l=n.getIn([\"produces\"],null);return a||o||l}function _e(e,t){t=t||[];const n=D(e),s=n.getIn([\"paths\",...t],null);if(null===s)return;const[r]=t,a=s.get(\"consumes\",null),o=n.getIn([\"paths\",r,\"consumes\"],null),l=n.getIn([\"consumes\"],null);return a||o||l}const Ne=(e,t,n)=>{let s=e.get(\"url\").match(/^([a-z][a-z0-9+\\-.]*):/),r=w()(s)?s[1]:null;return e.getIn([\"scheme\",t,n])||e.getIn([\"scheme\",\"_defaultScheme\"])||r||\"\"},Oe=(e,t,n)=>{var s;return c()(s=[\"http\",\"https\"]).call(s,Ne(e,t,n))>-1},ke=(e,t)=>{t=t||[];let n=e.getIn([\"meta\",\"paths\",...t,\"parameters\"],(0,j.fromJS)([]));const s=[];return o()(n).call(n,(e=>{let t=e.get(\"errors\");t&&t.count()&&o()(t).call(t,(e=>s.push(e)))})),s},Ae=(e,t)=>0===ke(e,t).length,Ie=(e,t)=>{var n;let s={requestBody:!1,requestContentType:{}},r=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\"],(0,j.fromJS)([]));return r.size<1||(r.getIn([\"required\"])&&(s.requestBody=r.getIn([\"required\"])),o()(n=r.getIn([\"content\"]).entrySeq()).call(n,(e=>{const t=e[0];if(e[1].getIn([\"schema\",\"required\"])){const n=e[1].getIn([\"schema\",\"required\"]).toJS();s.requestContentType[t]=n}}))),s},Pe=(e,t,n,s)=>{if((n||s)&&n===s)return!0;let r=e.getIn([\"resolvedSubtrees\",\"paths\",...t,\"requestBody\",\"content\"],(0,j.fromJS)([]));if(r.size<2||!n||!s)return!1;let a=r.getIn([n,\"schema\",\"properties\"],(0,j.fromJS)([])),o=r.getIn([s,\"schema\",\"properties\"],(0,j.fromJS)([]));return!!a.equals(o)};function qe(e){return j.Map.isMap(e)?e:new j.Map}},7508:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{executeRequest:()=>p,updateJsonSpec:()=>u,updateSpec:()=>i,validateParams:()=>m});var s=n(7252),r=n.n(s),a=n(4235),o=n.n(a),l=n(1712),c=n.n(l);const i=(e,t)=>{let{specActions:n}=t;return function(){e(...arguments),n.parseToJson(...arguments)}},u=(e,t)=>{let{specActions:n}=t;return function(){for(var t=arguments.length,s=new Array(t),a=0;a<t;a++)s[a]=arguments[a];e(...s),n.invalidateResolvedSubtreeCache();const[l]=s,i=c()(l,[\"paths\"])||{},u=r()(i);o()(u).call(u,(e=>{c()(i,[e]).$ref&&n.requestResolvedSubtree([\"paths\",e])})),n.requestResolvedSubtree([\"components\",\"securitySchemes\"])}},p=(e,t)=>{let{specActions:n}=t;return t=>(n.logRequest(t),e(t))},m=(e,t)=>{let{specSelectors:n}=t;return t=>e(t,n.isOAS3())}},4852:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{loaded:()=>s});const s=(e,t)=>function(){e(...arguments);const n=t.getConfigs().withCredentials;void 0!==n&&(t.fn.fetch.withCredentials=\"string\"==typeof n?\"true\"===n:!!n)}},1241:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>S});const s=require(\"swagger-client/es/resolver/strategies/generic\");var r=n.n(s);const a=require(\"swagger-client/es/resolver/strategies/openapi-2\");var o=n.n(a);const l=require(\"swagger-client/es/resolver/strategies/openapi-3-0\");var c=n.n(l);const i=require(\"swagger-client/es/resolver/strategies/openapi-3-1-apidom\");var u=n.n(i);const p=require(\"swagger-client/es/resolver\"),m=require(\"swagger-client/es/execute\"),d=require(\"swagger-client/es/http\");var h=n.n(d);const g=require(\"swagger-client/es/subtree-resolver\");var f=n(6765),y=n(4852);function S(e){let{configs:t,getConfigs:n}=e;return{fn:{fetch:(0,d.makeHttp)(h(),t.preFetch,t.postFetch),buildRequest:m.buildRequest,execute:m.execute,resolve:(0,p.makeResolve)({strategies:[u(),c(),o(),r()]}),resolveSubtree:async function(e,t){let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const a=n(),l={modelPropertyMacro:a.modelPropertyMacro,parameterMacro:a.parameterMacro,requestInterceptor:a.requestInterceptor,responseInterceptor:a.responseInterceptor,strategies:[u(),c(),o(),r()]};return(0,g.makeResolveSubtree)(l)(e,t,s)},serializeRes:d.serializeRes,opId:f.opId},statePlugins:{configs:{wrapActions:{loaded:y.loaded}}}}}},8525:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>r});var s=n(1669);function r(){return{fn:{shallowEqualKeys:s.be}}}},8347:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getDisplayName:()=>s});const s=e=>e.displayName||e.name||\"Component\"},3420:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{default:()=>i});var s=n(8344),r=n.n(s),a=n(1669),o=n(6194),l=n(8347),c=n(7481);const i=e=>{let{getComponents:t,getStore:n,getSystem:s}=e;const i=(u=(0,o.getComponent)(s,n,t),(0,a.HP)(u,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return r()(t)})));var u;const p=(e=>(0,c.Z)(e,(function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t})))((0,o.withMappedContainer)(s,n,i));return{rootInjects:{getComponent:i,makeMappedContainer:p,render:(0,o.render)(s,n,o.getComponent,t)},fn:{getDisplayName:l.getDisplayName}}}},6194:(e,t,n)=>{\"use strict\";n.r(t),n.d(t,{getComponent:()=>C,render:()=>w,withMappedContainer:()=>x});var s=n(4250),r=n.n(s),a=n(7252),o=n.n(a),l=n(6689),c=n.n(l);const i=require(\"react-dom\");var u=n.n(i),p=n(6695);const m=require(\"react-redux\"),d=require(\"lodash/omit\");var h=n.n(d),g=n(4292),f=n.n(g);const y=e=>t=>{const{fn:n}=e();class s extends l.Component{render(){return c().createElement(t,r()({},e(),this.props,this.context))}}return s.displayName=`WithSystem(${n.getDisplayName(t)})`,s},S=(e,t)=>n=>{const{fn:s}=e();class a extends l.Component{render(){return c().createElement(m.Provider,{store:t},c().createElement(n,r()({},this.props,this.context)))}}return a.displayName=`WithRoot(${s.getDisplayName(n)})`,a},v=(e,t,n)=>(0,p.compose)(n?S(e,n):f(),(0,m.connect)(((n,s)=>{var r;const a={...s,...e()},o=(null===(r=t.prototype)||void 0===r?void 0:r.mapStateToProps)||(e=>({state:e}));return o(n,a)})),y(e))(t),E=(e,t,n,s)=>{for(const r in t){const a=t[r];\"function\"==typeof a&&a(n[r],s[r],e())}},x=(e,t,n)=>(t,s)=>{const{fn:r}=e(),a=n(t,\"root\");class i extends l.Component{constructor(t,n){super(t,n),E(e,s,t,{})}UNSAFE_componentWillReceiveProps(t){E(e,s,t,this.props)}render(){const e=h()(this.props,s?o()(s):[]);return c().createElement(a,e)}}return i.displayName=`WithMappedContainer(${r.getDisplayName(a)})`,i},w=(e,t,n,s)=>r=>{const a=n(e,t,s)(\"App\",\"root\");u().render(c().createElement(a,null),r)},C=(e,t,n)=>function(s,r){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(\"string\"!=typeof s)throw new TypeError(\"Need a string, to fetch a component. Was given a \"+typeof s);const o=n(s);return o?r?\"root\"===r?v(e,o,t()):v(e,o):o:(a.failSilently||e().log.warn(\"Could not find component:\",s),null)}},6068:(e,t,n)=>{\"use strict\";n.d(t,{d3:()=>c(),C2:()=>D});var s=n(7252),r=n.n(s),a=n(2605),o=n.n(a);const l=require(\"react-syntax-highlighter/dist/esm/light\");var c=n.n(l);const i=require(\"react-syntax-highlighter/dist/esm/languages/hljs/javascript\");var u=n.n(i);const p=require(\"react-syntax-highlighter/dist/esm/languages/hljs/json\");var m=n.n(p);const d=require(\"react-syntax-highlighter/dist/esm/languages/hljs/xml\");var h=n.n(d);const g=require(\"react-syntax-highlighter/dist/esm/languages/hljs/bash\");var f=n.n(g);const y=require(\"react-syntax-highlighter/dist/esm/languages/hljs/yaml\");var S=n.n(y);const v=require(\"react-syntax-highlighter/dist/esm/languages/hljs/http\");var E=n.n(v);const x=require(\"react-syntax-highlighter/dist/esm/languages/hljs/powershell\");var w=n.n(x);const C=require(\"react-syntax-highlighter/dist/esm/styles/hljs/agate\");var b=n.n(C);const j=require(\"react-syntax-highlighter/dist/esm/styles/hljs/arta\");var _=n.n(j);const N=require(\"react-syntax-highlighter/dist/esm/styles/hljs/monokai\");var O=n.n(N);const k=require(\"react-syntax-highlighter/dist/esm/styles/hljs/nord\");var A=n.n(k);const I=require(\"react-syntax-highlighter/dist/esm/styles/hljs/obsidian\");var P=n.n(I);const q=require(\"react-syntax-highlighter/dist/esm/styles/hljs/tomorrow-night\");var R=n.n(q);c().registerLanguage(\"json\",m()),c().registerLanguage(\"js\",u()),c().registerLanguage(\"xml\",h()),c().registerLanguage(\"yaml\",S()),c().registerLanguage(\"http\",E()),c().registerLanguage(\"bash\",f()),c().registerLanguage(\"powershell\",w()),c().registerLanguage(\"javascript\",u());const T={agate:b(),arta:_(),monokai:O(),nord:A(),obsidian:P(),\"tomorrow-night\":R()},M=r()(T),D=e=>o()(M).call(M,e)?T[e]:(console.warn(`Request style '${e}' is not available, returning default instead`),b())},1669:(e,t,n)=>{\"use strict\";n.d(t,{r3:()=>Ce,GZ:()=>je,Xb:()=>Ke,oJ:()=>Ae,XV:()=>Re,iQ:()=>fe,J6:()=>Ie,DR:()=>Se,oG:()=>oe,Uj:()=>$e,QG:()=>ke,po:()=>qe,nX:()=>Pe,gp:()=>ye,kJ:()=>pe,O2:()=>Ve,LQ:()=>ce,Wl:()=>ue,Kn:()=>ie,HP:()=>me,AF:()=>le,D$:()=>Me,Ay:()=>de,Q2:()=>he,mz:()=>ae,V9:()=>De,cz:()=>Je,UG:()=>we,Zl:()=>ve,hW:()=>Oe,Nm:()=>Ne,be:()=>_e,wh:()=>be,Pz:()=>Te,_5:()=>ge,Ik:()=>xe});var s=n(7104),r=n.n(s),a=n(3942),o=n.n(a),l=n(7862),c=n.n(l),i=n(4235),u=n.n(i),p=n(9998),m=n.n(p),d=n(7252),h=n.n(d),g=(n(593),n(66)),f=n.n(g),y=n(4994),S=n.n(y),v=n(9247),E=n.n(v),x=(n(600),n(4883),n(5626)),w=n.n(x),C=(n(2605),n(8493)),b=n.n(C),j=n(3580),_=n.n(j);const N=require(\"@babel/runtime-corejs3/core-js-stable/instance/starts-with\");var O=n.n(N),k=n(7390),A=n.n(k),I=n(8344),P=n.n(I),q=n(5572),R=n.n(q);const T=require(\"@braintree/sanitize-url\"),M=require(\"lodash/camelCase\");var D=n.n(M);const J=require(\"lodash/upperFirst\");var $=n.n(J),K=n(541),L=n.n(K);const V=require(\"lodash/find\");var U=n.n(V);n(4129);const F=require(\"lodash/eq\");var z=n.n(F),B=n(5716),W=n.n(B),H=n(7504);const G=require(\"css.escape\");var Z=n.n(G),X=n(9069),Y=n(185),Q=n.n(Y);const ee=require(\"sha.js\");var te=n.n(ee),ne=n(871).Buffer;const se=\"default\",re=e=>R().Iterable.isIterable(e);function ae(e){return ie(e)?re(e)?e.toJS():e:{}}function oe(e){var t,n;if(re(e))return e;if(e instanceof H.Z.File)return e;if(!ie(e))return e;if(r()(e))return o()(n=R().Seq(e)).call(n,oe).toList();if(W()(c()(e))){var s;const t=function(e){if(!W()(c()(e)))return e;const t={},n=\"_**[]\",s={};for(let r of c()(e).call(e))if(t[r[0]]||s[r[0]]&&s[r[0]].containsMultiple){if(!s[r[0]]){s[r[0]]={containsMultiple:!0,length:1},t[`${r[0]}${n}${s[r[0]].length}`]=t[r[0]],delete t[r[0]]}s[r[0]].length+=1,t[`${r[0]}${n}${s[r[0]].length}`]=r[1]}else t[r[0]]=r[1];return t}(e);return o()(s=R().OrderedMap(t)).call(s,oe)}return o()(t=R().OrderedMap(e)).call(t,oe)}function le(e){return r()(e)?e:[e]}function ce(e){return\"function\"==typeof e}function ie(e){return!!e&&\"object\"==typeof e}function ue(e){return\"function\"==typeof e}function pe(e){return r()(e)}const me=L();function de(e,t){var n;return f()(n=h()(e)).call(n,((n,s)=>(n[s]=t(e[s],s),n)),{})}function he(e,t){var n;return f()(n=h()(e)).call(n,((n,s)=>{let r=t(e[s],s);return r&&\"object\"==typeof r&&S()(n,r),n}),{})}function ge(e){return t=>{let{dispatch:n,getState:s}=t;return t=>n=>\"function\"==typeof n?n(e()):t(n)}}function fe(e){var t;let n=e.keySeq();return n.contains(se)?se:E()(t=m()(n).call(n,(e=>\"2\"===(e+\"\")[0]))).call(t).first()}function ye(e,t){if(!R().Iterable.isIterable(e))return R().List();let n=e.getIn(r()(t)?t:[t]);return R().List.isList(n)?n:R().List()}function Se(e){let t,n=[/filename\\*=[^']+'\\w*'\"([^\"]+)\";?/i,/filename\\*=[^']+'\\w*'([^;]+);?/i,/filename=\"([^;]*);?\"/i,/filename=([^;]*);?/i];if(w()(n).call(n,(n=>(t=n.exec(e),null!==t))),null!==t&&t.length>1)try{return decodeURIComponent(t[1])}catch(e){console.error(e)}return null}function ve(e){return t=e.replace(/\\.[^./]*$/,\"\"),$()(D()(t));var t}function Ee(e,t,n,s,a){if(!t)return[];let l=[],c=t.get(\"nullable\"),i=t.get(\"required\"),p=t.get(\"maximum\"),d=t.get(\"minimum\"),h=t.get(\"type\"),g=t.get(\"format\"),f=t.get(\"maxLength\"),y=t.get(\"minLength\"),S=t.get(\"uniqueItems\"),v=t.get(\"maxItems\"),E=t.get(\"minItems\"),x=t.get(\"pattern\");const C=n||!0===i,b=null!=e;if(c&&null===e||!h||!(C||b&&\"array\"===h||!(!C&&!b)))return[];let j=\"string\"===h&&e,_=\"array\"===h&&r()(e)&&e.length,N=\"array\"===h&&R().List.isList(e)&&e.count();const O=[j,_,N,\"array\"===h&&\"string\"==typeof e&&e,\"file\"===h&&e instanceof H.Z.File,\"boolean\"===h&&(e||!1===e),\"number\"===h&&(e||0===e),\"integer\"===h&&(e||0===e),\"object\"===h&&\"object\"==typeof e&&null!==e,\"object\"===h&&\"string\"==typeof e&&e],k=w()(O).call(O,(e=>!!e));if(C&&!k&&!s)return l.push(\"Required field is not provided\"),l;if(\"object\"===h&&(null===a||\"application/json\"===a)){let n=e;if(\"string\"==typeof e)try{n=JSON.parse(e)}catch(e){return l.push(\"Parameter string value must be valid JSON\"),l}var A;if(t&&t.has(\"required\")&&ue(i.isList)&&i.isList()&&u()(i).call(i,(e=>{void 0===n[e]&&l.push({propKey:e,error:\"Required property not found\"})})),t&&t.has(\"properties\"))u()(A=t.get(\"properties\")).call(A,((e,t)=>{const r=Ee(n[t],e,!1,s,a);l.push(...o()(r).call(r,(e=>({propKey:t,error:e}))))}))}if(x){let t=((e,t)=>{if(!new RegExp(t).test(e))return\"Value must follow pattern \"+t})(e,x);t&&l.push(t)}if(E&&\"array\"===h){let t=((e,t)=>{if(!e&&t>=1||e&&e.length<t)return`Array must contain at least ${t} item${1===t?\"\":\"s\"}`})(e,E);t&&l.push(t)}if(v&&\"array\"===h){let t=((e,t)=>{if(e&&e.length>t)return`Array must not contain more then ${t} item${1===t?\"\":\"s\"}`})(e,v);t&&l.push({needRemove:!0,error:t})}if(S&&\"array\"===h){let t=((e,t)=>{if(e&&(\"true\"===t||!0===t)){const t=(0,q.fromJS)(e),n=t.toSet();if(e.length>n.size){let e=(0,q.Set)();if(u()(t).call(t,((n,s)=>{m()(t).call(t,(e=>ue(e.equals)?e.equals(n):e===n)).size>1&&(e=e.add(s))})),0!==e.size)return o()(e).call(e,(e=>({index:e,error:\"No duplicates allowed.\"}))).toArray()}}})(e,S);t&&l.push(...t)}if(f||0===f){let t=((e,t)=>{if(e.length>t)return`Value must be no longer than ${t} character${1!==t?\"s\":\"\"}`})(e,f);t&&l.push(t)}if(y){let t=((e,t)=>{if(e.length<t)return`Value must be at least ${t} character${1!==t?\"s\":\"\"}`})(e,y);t&&l.push(t)}if(p||0===p){let t=((e,t)=>{if(e>t)return`Value must be less than ${t}`})(e,p);t&&l.push(t)}if(d||0===d){let t=((e,t)=>{if(e<t)return`Value must be greater than ${t}`})(e,d);t&&l.push(t)}if(\"string\"===h){let t;if(t=\"date-time\"===g?(e=>{if(isNaN(Date.parse(e)))return\"Value must be a DateTime\"})(e):\"uuid\"===g?(e=>{if(e=e.toString().toLowerCase(),!/^[{(]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[)}]?$/.test(e))return\"Value must be a Guid\"})(e):(e=>{if(e&&\"string\"!=typeof e)return\"Value must be a string\"})(e),!t)return l;l.push(t)}else if(\"boolean\"===h){let t=(e=>{if(\"true\"!==e&&\"false\"!==e&&!0!==e&&!1!==e)return\"Value must be a boolean\"})(e);if(!t)return l;l.push(t)}else if(\"number\"===h){let t=(e=>{if(!/^-?\\d+(\\.?\\d+)?$/.test(e))return\"Value must be a number\"})(e);if(!t)return l;l.push(t)}else if(\"integer\"===h){let t=(e=>{if(!/^-?\\d+$/.test(e))return\"Value must be an integer\"})(e);if(!t)return l;l.push(t)}else if(\"array\"===h){if(!_&&!N)return l;e&&u()(e).call(e,((e,n)=>{const r=Ee(e,t.get(\"items\"),!1,s,a);l.push(...o()(r).call(r,(e=>({index:n,error:e}))))}))}else if(\"file\"===h){let t=(e=>{if(e&&!(e instanceof H.Z.File))return\"Value must be a file\"})(e);if(!t)return l;l.push(t)}return l}const xe=function(e,t){let{isOAS3:n=!1,bypassRequiredCheck:s=!1}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=e.get(\"required\"),{schema:a,parameterContentMediaType:o}=(0,X.Z)(e,{isOAS3:n});return Ee(t,a,r,s,o)},we=()=>{let e={},t=H.Z.location.search;if(!t)return{};if(\"\"!=t){let n=t.substr(1).split(\"&\");for(let t in n)Object.prototype.hasOwnProperty.call(n,t)&&(t=n[t].split(\"=\"),e[decodeURIComponent(t[0])]=t[1]&&decodeURIComponent(t[1])||\"\")}return e},Ce=e=>{let t;return t=e instanceof ne?e:ne.from(e.toString(),\"utf-8\"),t.toString(\"base64\")},be={operationsSorter:{alpha:(e,t)=>e.get(\"path\").localeCompare(t.get(\"path\")),method:(e,t)=>e.get(\"method\").localeCompare(t.get(\"method\"))},tagsSorter:{alpha:(e,t)=>e.localeCompare(t)}},je=e=>{let t=[];for(let n in e){let s=e[n];void 0!==s&&\"\"!==s&&t.push([n,\"=\",encodeURIComponent(s).replace(/%20/g,\"+\")].join(\"\"))}return t.join(\"&\")},_e=(e,t,n)=>!!U()(n,(n=>z()(e[n],t[n])));function Ne(e){return\"string\"!=typeof e||\"\"===e?\"\":(0,T.sanitizeUrl)(e)}function Oe(e){return!(!e||b()(e).call(e,\"localhost\")>=0||b()(e).call(e,\"127.0.0.1\")>=0||\"none\"===e)}function ke(e){if(!R().OrderedMap.isOrderedMap(e))return null;if(!e.size)return null;const t=_()(e).call(e,((e,t)=>O()(t).call(t,\"2\")&&h()(e.get(\"content\")||{}).length>0)),n=e.get(\"default\")||R().OrderedMap(),s=(n.get(\"content\")||R().OrderedMap()).keySeq().toJS().length?n:null;return t||s}const Ae=e=>\"string\"==typeof e||e instanceof String?A()(e).call(e).replace(/\\s/g,\"%20\"):\"\",Ie=e=>Z()(Ae(e).replace(/%20/g,\"_\")),Pe=e=>m()(e).call(e,((e,t)=>/^x-/.test(t))),qe=e=>m()(e).call(e,((e,t)=>/^pattern|maxLength|minLength|maximum|minimum/.test(t)));function Re(e,t){var n;let s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:()=>!0;if(\"object\"!=typeof e||r()(e)||null===e||!t)return e;const a=S()({},e);return u()(n=h()(a)).call(n,(e=>{e===t&&s(a[e],e)?delete a[e]:a[e]=Re(a[e],t,s)})),a}function Te(e){if(\"string\"==typeof e)return e;if(e&&e.toJS&&(e=e.toJS()),\"object\"==typeof e&&null!==e)try{return P()(e,null,2)}catch(t){return String(e)}return null==e?\"\":e.toString()}function Me(e){return\"number\"==typeof e?e.toString():e}function De(e){let{returnAll:t=!1,allowHashes:n=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!R().Map.isMap(e))throw new Error(\"paramToIdentifier: received a non-Im.Map parameter as input\");const s=e.get(\"name\"),r=e.get(\"in\");let a=[];return e&&e.hashCode&&r&&s&&n&&a.push(`${r}.${s}.hash-${e.hashCode()}`),r&&s&&a.push(`${r}.${s}`),a.push(s),t?a:a[0]||\"\"}function Je(e,t){var n;const s=De(e,{returnAll:!0});return m()(n=o()(s).call(s,(e=>t[e]))).call(n,(e=>void 0!==e))[0]}function $e(){return Le(Q()(32).toString(\"base64\"))}function Ke(e){return Le(te()(\"sha256\").update(e).digest(\"base64\"))}function Le(e){return e.replace(/\\+/g,\"-\").replace(/\\//g,\"_\").replace(/=/g,\"\")}const Ve=e=>!e||!(!re(e)||!e.isEmpty())},2518:(e,t,n)=>{\"use strict\";function s(e){return function(e){try{return!!JSON.parse(e)}catch(e){return null}}(e)?\"json\":null}n.d(t,{O:()=>s})},3543:(e,t,n)=>{\"use strict\";n.d(t,{mn:()=>l});var s=n(9478),r=n.n(s);function a(e){return e.match(/^(?:[a-z]+:)?\\/\\//i)}function o(e,t){return e?a(e)?(n=e).match(/^\\/\\//i)?`${window.location.protocol}${n}`:n:new(r())(e,t).href:t;var n}function l(e,t){let{selectedServer:n=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};try{return function(e,t){let{selectedServer:n=\"\"}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!e)return;if(a(e))return e;const s=o(n,t);return a(s)?new(r())(e,s).href:new(r())(e,window.location.href).href}(e,t,{selectedServer:n})}catch{return}}},7504:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>s});const s=function(){var e={location:{},history:{},open:()=>{},close:()=>{},File:function(){}};if(\"undefined\"==typeof window)return e;try{e=window;for(var t of[\"File\",\"Blob\",\"FormData\"])t in window&&(e[t]=window[t])}catch(e){console.error(e)}return e}()},9069:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>u});var s=n(9998),r=n.n(s),a=n(2605),o=n.n(a),l=n(5572),c=n.n(l);const i=c().Set.of(\"type\",\"format\",\"items\",\"default\",\"maximum\",\"exclusiveMaximum\",\"minimum\",\"exclusiveMinimum\",\"maxLength\",\"minLength\",\"pattern\",\"maxItems\",\"minItems\",\"uniqueItems\",\"enum\",\"multipleOf\");function u(e){let{isOAS3:t}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!c().Map.isMap(e))return{schema:c().Map(),parameterContentMediaType:null};if(!t)return\"body\"===e.get(\"in\")?{schema:e.get(\"schema\",c().Map()),parameterContentMediaType:null}:{schema:r()(e).call(e,((e,t)=>o()(i).call(i,t))),parameterContentMediaType:null};if(e.get(\"content\")){const t=e.get(\"content\",c().Map({})).keySeq().first();return{schema:e.getIn([\"content\",t,\"schema\"],c().Map()),parameterContentMediaType:t}}return{schema:e.get(\"schema\")?e.get(\"schema\",c().Map()):c().Map(),parameterContentMediaType:null}}},7481:(e,t,n)=>{\"use strict\";n.d(t,{Z:()=>w});var s=n(7104),r=n.n(s),a=n(7834),o=n.n(a),l=n(1733),c=n.n(l),i=n(874),u=n.n(i),p=n(3580),m=n.n(p);const d=require(\"@babel/runtime-corejs3/core-js-stable/instance/find-index\");var h=n.n(d),g=n(2611),f=n.n(g),y=n(541),S=n.n(y);const v=e=>t=>r()(e)&&r()(t)&&e.length===t.length&&o()(e).call(e,((e,n)=>e===t[n])),E=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t};class x extends(f()){delete(e){const t=c()(u()(this).call(this)),n=m()(t).call(t,v(e));return super.delete(n)}get(e){const t=c()(u()(this).call(this)),n=m()(t).call(t,v(e));return super.get(n)}has(e){const t=c()(u()(this).call(this));return-1!==h()(t).call(t,v(e))}}const w=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:E;const{Cache:n}=S();S().Cache=x;const s=S()(e,t);return S().Cache=n,s}},5102:(e,t,n)=>{var s={\"./all.js\":5308,\"./auth/actions.js\":5812,\"./auth/configs-extensions/wrap-actions.js\":3779,\"./auth/index.js\":3705,\"./auth/reducers.js\":3962,\"./auth/selectors.js\":35,\"./auth/spec-extensions/wrap-actions.js\":489,\"./auth/wrap-actions.js\":2849,\"./configs/actions.js\":714,\"./configs/helpers.js\":2256,\"./configs/index.js\":6709,\"./configs/reducers.js\":7743,\"./configs/selectors.js\":9018,\"./configs/spec-actions.js\":2698,\"./deep-linking/helpers.js\":1970,\"./deep-linking/index.js\":4980,\"./deep-linking/layout.js\":2179,\"./deep-linking/operation-tag-wrapper.jsx\":4584,\"./deep-linking/operation-wrapper.jsx\":877,\"./download-url.js\":8011,\"./err/actions.js\":4966,\"./err/error-transformers/hook.js\":2860,\"./err/error-transformers/transformers/not-of-type.js\":2392,\"./err/error-transformers/transformers/parameter-oneof.js\":1835,\"./err/index.js\":7793,\"./err/reducers.js\":3527,\"./err/selectors.js\":7667,\"./filter/index.js\":9978,\"./filter/opsFilter.js\":4309,\"./json-schema-2020-12/components/Accordion/Accordion.jsx\":7349,\"./json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":6867,\"./json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":2675,\"./json-schema-2020-12/components/icons/ChevronRight.jsx\":2260,\"./json-schema-2020-12/components/keywords/$anchor.jsx\":4922,\"./json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"./json-schema-2020-12/components/keywords/$defs.jsx\":6418,\"./json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":1338,\"./json-schema-2020-12/components/keywords/$dynamicRef.jsx\":7655,\"./json-schema-2020-12/components/keywords/$id.jsx\":3460,\"./json-schema-2020-12/components/keywords/$ref.jsx\":2348,\"./json-schema-2020-12/components/keywords/$schema.jsx\":9359,\"./json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"./json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":5253,\"./json-schema-2020-12/components/keywords/AllOf.jsx\":6457,\"./json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"./json-schema-2020-12/components/keywords/Const.jsx\":7308,\"./json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":9956,\"./json-schema-2020-12/components/keywords/Contains.jsx\":8993,\"./json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"./json-schema-2020-12/components/keywords/Default.jsx\":5148,\"./json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":4539,\"./json-schema-2020-12/components/keywords/DependentSchemas.jsx\":6076,\"./json-schema-2020-12/components/keywords/Deprecated.jsx\":6661,\"./json-schema-2020-12/components/keywords/Description/Description.jsx\":9446,\"./json-schema-2020-12/components/keywords/Else.jsx\":7207,\"./json-schema-2020-12/components/keywords/Enum/Enum.jsx\":1805,\"./json-schema-2020-12/components/keywords/If.jsx\":487,\"./json-schema-2020-12/components/keywords/Items.jsx\":9206,\"./json-schema-2020-12/components/keywords/Not.jsx\":5174,\"./json-schema-2020-12/components/keywords/OneOf.jsx\":3834,\"./json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":6746,\"./json-schema-2020-12/components/keywords/PrefixItems.jsx\":3971,\"./json-schema-2020-12/components/keywords/Properties/Properties.jsx\":5472,\"./json-schema-2020-12/components/keywords/PropertyNames.jsx\":2338,\"./json-schema-2020-12/components/keywords/ReadOnly.jsx\":6456,\"./json-schema-2020-12/components/keywords/Then.jsx\":7401,\"./json-schema-2020-12/components/keywords/Title/Title.jsx\":8137,\"./json-schema-2020-12/components/keywords/Type.jsx\":2285,\"./json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":5828,\"./json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"./json-schema-2020-12/components/keywords/WriteOnly.jsx\":5789,\"./json-schema-2020-12/context.js\":9006,\"./json-schema-2020-12/fn.js\":4121,\"./json-schema-2020-12/hoc.jsx\":5077,\"./json-schema-2020-12/hooks.js\":2603,\"./json-schema-2020-12/index.js\":7139,\"./json-schema-2020-12/prop-types.js\":6648,\"./json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"./json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":2906,\"./json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":537,\"./json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":674,\"./json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":3782,\"./json-schema-2020-12/samples-extensions/fn/class/Registry.js\":4215,\"./json-schema-2020-12/samples-extensions/fn/core/constants.js\":8338,\"./json-schema-2020-12/samples-extensions/fn/core/example.js\":3783,\"./json-schema-2020-12/samples-extensions/fn/core/merge.js\":7078,\"./json-schema-2020-12/samples-extensions/fn/core/predicates.js\":3084,\"./json-schema-2020-12/samples-extensions/fn/core/random.js\":5202,\"./json-schema-2020-12/samples-extensions/fn/core/type.js\":6276,\"./json-schema-2020-12/samples-extensions/fn/core/utils.js\":9346,\"./json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":1433,\"./json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":8509,\"./json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"./json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":4180,\"./json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":1967,\"./json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":4366,\"./json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":5037,\"./json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":4045,\"./json-schema-2020-12/samples-extensions/fn/generators/date.js\":1456,\"./json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"./json-schema-2020-12/samples-extensions/fn/generators/duration.js\":4299,\"./json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"./json-schema-2020-12/samples-extensions/fn/generators/float.js\":1890,\"./json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":9375,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":4518,\"./json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":273,\"./json-schema-2020-12/samples-extensions/fn/generators/int32.js\":7864,\"./json-schema-2020-12/samples-extensions/fn/generators/int64.js\":1726,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":8793,\"./json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":8269,\"./json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":5693,\"./json-schema-2020-12/samples-extensions/fn/generators/iri.js\":3080,\"./json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":7856,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":5088,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":4342,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":6724,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":5378,\"./json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":2974,\"./json-schema-2020-12/samples-extensions/fn/generators/password.js\":3393,\"./json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"./json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":375,\"./json-schema-2020-12/samples-extensions/fn/generators/time.js\":5243,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":4692,\"./json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":3829,\"./json-schema-2020-12/samples-extensions/fn/generators/uri.js\":2978,\"./json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":8859,\"./json-schema-2020-12/samples-extensions/fn/index.js\":8591,\"./json-schema-2020-12/samples-extensions/fn/main.js\":4277,\"./json-schema-2020-12/samples-extensions/fn/types/array.js\":3982,\"./json-schema-2020-12/samples-extensions/fn/types/boolean.js\":4108,\"./json-schema-2020-12/samples-extensions/fn/types/index.js\":3273,\"./json-schema-2020-12/samples-extensions/fn/types/integer.js\":8864,\"./json-schema-2020-12/samples-extensions/fn/types/null.js\":853,\"./json-schema-2020-12/samples-extensions/fn/types/number.js\":844,\"./json-schema-2020-12/samples-extensions/fn/types/object.js\":6852,\"./json-schema-2020-12/samples-extensions/fn/types/string.js\":4522,\"./layout/actions.js\":5474,\"./layout/index.js\":6821,\"./layout/reducers.js\":5672,\"./layout/selectors.js\":4400,\"./layout/spec-extensions/wrap-selector.js\":8989,\"./logs/index.js\":9150,\"./oas3/actions.js\":7002,\"./oas3/auth-extensions/wrap-selectors.js\":3723,\"./oas3/components/callbacks.jsx\":3427,\"./oas3/components/http-auth.jsx\":6775,\"./oas3/components/index.js\":6467,\"./oas3/components/operation-link.jsx\":5757,\"./oas3/components/operation-servers.jsx\":6796,\"./oas3/components/request-body-editor.jsx\":5327,\"./oas3/components/request-body.jsx\":2458,\"./oas3/components/servers-container.jsx\":9928,\"./oas3/components/servers.jsx\":6617,\"./oas3/helpers.jsx\":7779,\"./oas3/index.js\":7451,\"./oas3/reducers.js\":2109,\"./oas3/selectors.js\":5065,\"./oas3/spec-extensions/selectors.js\":1741,\"./oas3/spec-extensions/wrap-selectors.js\":2044,\"./oas3/wrap-components/auth-item.jsx\":356,\"./oas3/wrap-components/index.js\":7761,\"./oas3/wrap-components/json-schema-string.jsx\":287,\"./oas3/wrap-components/markdown.jsx\":2460,\"./oas3/wrap-components/model.jsx\":3499,\"./oas3/wrap-components/online-validator-badge.js\":58,\"./oas3/wrap-components/version-stamp.jsx\":9487,\"./oas31/after-load.js\":2372,\"./oas31/components/contact.jsx\":9503,\"./oas31/components/info.jsx\":6133,\"./oas31/components/json-schema-dialect.jsx\":2562,\"./oas31/components/license.jsx\":1876,\"./oas31/components/model/model.jsx\":2718,\"./oas31/components/models/models.jsx\":263,\"./oas31/components/version-pragma-filter.jsx\":3429,\"./oas31/components/webhooks.jsx\":9508,\"./oas31/fn.js\":4380,\"./oas31/index.js\":9806,\"./oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":5989,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":9525,\"./oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"./oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":9450,\"./oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":5324,\"./oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"./oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":3995,\"./oas31/json-schema-2020-12-extensions/fn.js\":5800,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":4951,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":809,\"./oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":7536,\"./oas31/selectors.js\":4280,\"./oas31/spec-extensions/selectors.js\":9305,\"./oas31/spec-extensions/wrap-selectors.js\":2884,\"./oas31/wrap-components/contact.jsx\":7423,\"./oas31/wrap-components/info.jsx\":284,\"./oas31/wrap-components/license.jsx\":6608,\"./oas31/wrap-components/model.jsx\":7042,\"./oas31/wrap-components/models.jsx\":2914,\"./oas31/wrap-components/version-pragma-filter.jsx\":1434,\"./oas31/wrap-components/version-stamp.jsx\":1122,\"./on-complete/index.js\":8560,\"./request-snippets/fn.js\":8223,\"./request-snippets/index.js\":6575,\"./request-snippets/request-snippets.jsx\":4206,\"./request-snippets/selectors.js\":4669,\"./safe-render/components/error-boundary.jsx\":6195,\"./safe-render/components/fallback.jsx\":9403,\"./safe-render/fn.jsx\":6189,\"./safe-render/index.js\":9595,\"./samples/fn/get-json-sample-schema.js\":2846,\"./samples/fn/get-sample-schema.js\":6132,\"./samples/fn/get-xml-sample-schema.js\":1169,\"./samples/fn/get-yaml-sample-schema.js\":9431,\"./samples/fn/index.js\":9812,\"./samples/index.js\":8883,\"./spec/actions.js\":7080,\"./spec/index.js\":7038,\"./spec/reducers.js\":32,\"./spec/selectors.js\":3881,\"./spec/wrap-actions.js\":7508,\"./swagger-js/configs-wrap-actions.js\":4852,\"./swagger-js/index.js\":1241,\"./util/index.js\":8525,\"./view/fn.js\":8347,\"./view/index.js\":3420,\"./view/root-injects.jsx\":6194,\"core/plugins/all.js\":5308,\"core/plugins/auth/actions.js\":5812,\"core/plugins/auth/configs-extensions/wrap-actions.js\":3779,\"core/plugins/auth/index.js\":3705,\"core/plugins/auth/reducers.js\":3962,\"core/plugins/auth/selectors.js\":35,\"core/plugins/auth/spec-extensions/wrap-actions.js\":489,\"core/plugins/auth/wrap-actions.js\":2849,\"core/plugins/configs/actions.js\":714,\"core/plugins/configs/helpers.js\":2256,\"core/plugins/configs/index.js\":6709,\"core/plugins/configs/reducers.js\":7743,\"core/plugins/configs/selectors.js\":9018,\"core/plugins/configs/spec-actions.js\":2698,\"core/plugins/deep-linking/helpers.js\":1970,\"core/plugins/deep-linking/index.js\":4980,\"core/plugins/deep-linking/layout.js\":2179,\"core/plugins/deep-linking/operation-tag-wrapper.jsx\":4584,\"core/plugins/deep-linking/operation-wrapper.jsx\":877,\"core/plugins/download-url.js\":8011,\"core/plugins/err/actions.js\":4966,\"core/plugins/err/error-transformers/hook.js\":2860,\"core/plugins/err/error-transformers/transformers/not-of-type.js\":2392,\"core/plugins/err/error-transformers/transformers/parameter-oneof.js\":1835,\"core/plugins/err/index.js\":7793,\"core/plugins/err/reducers.js\":3527,\"core/plugins/err/selectors.js\":7667,\"core/plugins/filter/index.js\":9978,\"core/plugins/filter/opsFilter.js\":4309,\"core/plugins/json-schema-2020-12/components/Accordion/Accordion.jsx\":7349,\"core/plugins/json-schema-2020-12/components/ExpandDeepButton/ExpandDeepButton.jsx\":6867,\"core/plugins/json-schema-2020-12/components/JSONSchema/JSONSchema.jsx\":2675,\"core/plugins/json-schema-2020-12/components/icons/ChevronRight.jsx\":2260,\"core/plugins/json-schema-2020-12/components/keywords/$anchor.jsx\":4922,\"core/plugins/json-schema-2020-12/components/keywords/$comment.jsx\":4685,\"core/plugins/json-schema-2020-12/components/keywords/$defs.jsx\":6418,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicAnchor.jsx\":1338,\"core/plugins/json-schema-2020-12/components/keywords/$dynamicRef.jsx\":7655,\"core/plugins/json-schema-2020-12/components/keywords/$id.jsx\":3460,\"core/plugins/json-schema-2020-12/components/keywords/$ref.jsx\":2348,\"core/plugins/json-schema-2020-12/components/keywords/$schema.jsx\":9359,\"core/plugins/json-schema-2020-12/components/keywords/$vocabulary/$vocabulary.jsx\":7568,\"core/plugins/json-schema-2020-12/components/keywords/AdditionalProperties.jsx\":5253,\"core/plugins/json-schema-2020-12/components/keywords/AllOf.jsx\":6457,\"core/plugins/json-schema-2020-12/components/keywords/AnyOf.jsx\":8776,\"core/plugins/json-schema-2020-12/components/keywords/Const.jsx\":7308,\"core/plugins/json-schema-2020-12/components/keywords/Constraint/Constraint.jsx\":9956,\"core/plugins/json-schema-2020-12/components/keywords/Contains.jsx\":8993,\"core/plugins/json-schema-2020-12/components/keywords/ContentSchema.jsx\":3484,\"core/plugins/json-schema-2020-12/components/keywords/Default.jsx\":5148,\"core/plugins/json-schema-2020-12/components/keywords/DependentRequired/DependentRequired.jsx\":4539,\"core/plugins/json-schema-2020-12/components/keywords/DependentSchemas.jsx\":6076,\"core/plugins/json-schema-2020-12/components/keywords/Deprecated.jsx\":6661,\"core/plugins/json-schema-2020-12/components/keywords/Description/Description.jsx\":9446,\"core/plugins/json-schema-2020-12/components/keywords/Else.jsx\":7207,\"core/plugins/json-schema-2020-12/components/keywords/Enum/Enum.jsx\":1805,\"core/plugins/json-schema-2020-12/components/keywords/If.jsx\":487,\"core/plugins/json-schema-2020-12/components/keywords/Items.jsx\":9206,\"core/plugins/json-schema-2020-12/components/keywords/Not.jsx\":5174,\"core/plugins/json-schema-2020-12/components/keywords/OneOf.jsx\":3834,\"core/plugins/json-schema-2020-12/components/keywords/PatternProperties/PatternProperties.jsx\":6746,\"core/plugins/json-schema-2020-12/components/keywords/PrefixItems.jsx\":3971,\"core/plugins/json-schema-2020-12/components/keywords/Properties/Properties.jsx\":5472,\"core/plugins/json-schema-2020-12/components/keywords/PropertyNames.jsx\":2338,\"core/plugins/json-schema-2020-12/components/keywords/ReadOnly.jsx\":6456,\"core/plugins/json-schema-2020-12/components/keywords/Then.jsx\":7401,\"core/plugins/json-schema-2020-12/components/keywords/Title/Title.jsx\":8137,\"core/plugins/json-schema-2020-12/components/keywords/Type.jsx\":2285,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedItems.jsx\":5828,\"core/plugins/json-schema-2020-12/components/keywords/UnevaluatedProperties.jsx\":6907,\"core/plugins/json-schema-2020-12/components/keywords/WriteOnly.jsx\":5789,\"core/plugins/json-schema-2020-12/context.js\":9006,\"core/plugins/json-schema-2020-12/fn.js\":4121,\"core/plugins/json-schema-2020-12/hoc.jsx\":5077,\"core/plugins/json-schema-2020-12/hooks.js\":2603,\"core/plugins/json-schema-2020-12/index.js\":7139,\"core/plugins/json-schema-2020-12/prop-types.js\":6648,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/encoderAPI.js\":9507,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/formatAPI.js\":2906,\"core/plugins/json-schema-2020-12/samples-extensions/fn/api/mediaTypeAPI.js\":537,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/EncoderRegistry.js\":674,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/MediaTypeRegistry.js\":3782,\"core/plugins/json-schema-2020-12/samples-extensions/fn/class/Registry.js\":4215,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/constants.js\":8338,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/example.js\":3783,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/merge.js\":7078,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/predicates.js\":3084,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/random.js\":5202,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/type.js\":6276,\"core/plugins/json-schema-2020-12/samples-extensions/fn/core/utils.js\":9346,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/7bit.js\":1433,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/8bit.js\":8509,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base16.js\":5709,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base32.js\":4180,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/base64.js\":1967,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/binary.js\":4366,\"core/plugins/json-schema-2020-12/samples-extensions/fn/encoders/quoted-printable.js\":5037,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date-time.js\":4045,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/date.js\":1456,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/double.js\":560,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/duration.js\":4299,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/email.js\":3981,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/float.js\":1890,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/hostname.js\":9375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-email.js\":4518,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/idn-hostname.js\":273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int32.js\":7864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/int64.js\":1726,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv4.js\":8793,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/ipv6.js\":8269,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri-reference.js\":5693,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/iri.js\":3080,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/json-pointer.js\":7856,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/application.js\":5088,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/audio.js\":4342,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/image.js\":6724,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/text.js\":5378,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/media-types/video.js\":2974,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/password.js\":3393,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/regex.js\":4335,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/relative-json-pointer.js\":375,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/time.js\":5243,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-reference.js\":4692,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri-template.js\":3829,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uri.js\":2978,\"core/plugins/json-schema-2020-12/samples-extensions/fn/generators/uuid.js\":8859,\"core/plugins/json-schema-2020-12/samples-extensions/fn/index.js\":8591,\"core/plugins/json-schema-2020-12/samples-extensions/fn/main.js\":4277,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/array.js\":3982,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/boolean.js\":4108,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/index.js\":3273,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/integer.js\":8864,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/null.js\":853,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/number.js\":844,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/object.js\":6852,\"core/plugins/json-schema-2020-12/samples-extensions/fn/types/string.js\":4522,\"core/plugins/layout/actions.js\":5474,\"core/plugins/layout/index.js\":6821,\"core/plugins/layout/reducers.js\":5672,\"core/plugins/layout/selectors.js\":4400,\"core/plugins/layout/spec-extensions/wrap-selector.js\":8989,\"core/plugins/logs/index.js\":9150,\"core/plugins/oas3/actions.js\":7002,\"core/plugins/oas3/auth-extensions/wrap-selectors.js\":3723,\"core/plugins/oas3/components/callbacks.jsx\":3427,\"core/plugins/oas3/components/http-auth.jsx\":6775,\"core/plugins/oas3/components/index.js\":6467,\"core/plugins/oas3/components/operation-link.jsx\":5757,\"core/plugins/oas3/components/operation-servers.jsx\":6796,\"core/plugins/oas3/components/request-body-editor.jsx\":5327,\"core/plugins/oas3/components/request-body.jsx\":2458,\"core/plugins/oas3/components/servers-container.jsx\":9928,\"core/plugins/oas3/components/servers.jsx\":6617,\"core/plugins/oas3/helpers.jsx\":7779,\"core/plugins/oas3/index.js\":7451,\"core/plugins/oas3/reducers.js\":2109,\"core/plugins/oas3/selectors.js\":5065,\"core/plugins/oas3/spec-extensions/selectors.js\":1741,\"core/plugins/oas3/spec-extensions/wrap-selectors.js\":2044,\"core/plugins/oas3/wrap-components/auth-item.jsx\":356,\"core/plugins/oas3/wrap-components/index.js\":7761,\"core/plugins/oas3/wrap-components/json-schema-string.jsx\":287,\"core/plugins/oas3/wrap-components/markdown.jsx\":2460,\"core/plugins/oas3/wrap-components/model.jsx\":3499,\"core/plugins/oas3/wrap-components/online-validator-badge.js\":58,\"core/plugins/oas3/wrap-components/version-stamp.jsx\":9487,\"core/plugins/oas31/after-load.js\":2372,\"core/plugins/oas31/components/contact.jsx\":9503,\"core/plugins/oas31/components/info.jsx\":6133,\"core/plugins/oas31/components/json-schema-dialect.jsx\":2562,\"core/plugins/oas31/components/license.jsx\":1876,\"core/plugins/oas31/components/model/model.jsx\":2718,\"core/plugins/oas31/components/models/models.jsx\":263,\"core/plugins/oas31/components/version-pragma-filter.jsx\":3429,\"core/plugins/oas31/components/webhooks.jsx\":9508,\"core/plugins/oas31/fn.js\":4380,\"core/plugins/oas31/index.js\":9806,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Description.jsx\":5989,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/Discriminator.jsx\":9525,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Discriminator/DiscriminatorMapping.jsx\":7749,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Example.jsx\":9450,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/ExternalDocs.jsx\":5324,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Properties.jsx\":9023,\"core/plugins/oas31/json-schema-2020-12-extensions/components/keywords/Xml.jsx\":3995,\"core/plugins/oas31/json-schema-2020-12-extensions/fn.js\":5800,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Default.jsx\":4951,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Description.jsx\":809,\"core/plugins/oas31/json-schema-2020-12-extensions/wrap-components/keywords/Properties.jsx\":7536,\"core/plugins/oas31/selectors.js\":4280,\"core/plugins/oas31/spec-extensions/selectors.js\":9305,\"core/plugins/oas31/spec-extensions/wrap-selectors.js\":2884,\"core/plugins/oas31/wrap-components/contact.jsx\":7423,\"core/plugins/oas31/wrap-components/info.jsx\":284,\"core/plugins/oas31/wrap-components/license.jsx\":6608,\"core/plugins/oas31/wrap-components/model.jsx\":7042,\"core/plugins/oas31/wrap-components/models.jsx\":2914,\"core/plugins/oas31/wrap-components/version-pragma-filter.jsx\":1434,\"core/plugins/oas31/wrap-components/version-stamp.jsx\":1122,\"core/plugins/on-complete/index.js\":8560,\"core/plugins/request-snippets/fn.js\":8223,\"core/plugins/request-snippets/index.js\":6575,\"core/plugins/request-snippets/request-snippets.jsx\":4206,\"core/plugins/request-snippets/selectors.js\":4669,\"core/plugins/safe-render/components/error-boundary.jsx\":6195,\"core/plugins/safe-render/components/fallback.jsx\":9403,\"core/plugins/safe-render/fn.jsx\":6189,\"core/plugins/safe-render/index.js\":9595,\"core/plugins/samples/fn/get-json-sample-schema.js\":2846,\"core/plugins/samples/fn/get-sample-schema.js\":6132,\"core/plugins/samples/fn/get-xml-sample-schema.js\":1169,\"core/plugins/samples/fn/get-yaml-sample-schema.js\":9431,\"core/plugins/samples/fn/index.js\":9812,\"core/plugins/samples/index.js\":8883,\"core/plugins/spec/actions.js\":7080,\"core/plugins/spec/index.js\":7038,\"core/plugins/spec/reducers.js\":32,\"core/plugins/spec/selectors.js\":3881,\"core/plugins/spec/wrap-actions.js\":7508,\"core/plugins/swagger-js/configs-wrap-actions.js\":4852,\"core/plugins/swagger-js/index.js\":1241,\"core/plugins/util/index.js\":8525,\"core/plugins/view/fn.js\":8347,\"core/plugins/view/index.js\":3420,\"core/plugins/view/root-injects.jsx\":6194};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(s,e)){var t=new Error(\"Cannot find module '\"+e+\"'\");throw t.code=\"MODULE_NOT_FOUND\",t}return s[e]}r.keys=function(){return Object.keys(s)},r.resolve=a,e.exports=r,r.id=5102},2517:e=>{\"use strict\";e.exports=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwcHgiICBoZWlnaHQ9IjIwMHB4IiAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIGNsYXNzPSJsZHMtcm9sbGluZyIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IGJhY2tncm91bmQtcG9zaXRpb246IGluaXRpYWwgaW5pdGlhbDsgYmFja2dyb3VuZC1yZXBlYXQ6IGluaXRpYWwgaW5pdGlhbDsiPjxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIGZpbGw9Im5vbmUiIG5nLWF0dHItc3Ryb2tlPSJ7e2NvbmZpZy5jb2xvcn19IiBuZy1hdHRyLXN0cm9rZS13aWR0aD0ie3tjb25maWcud2lkdGh9fSIgbmctYXR0ci1yPSJ7e2NvbmZpZy5yYWRpdXN9fSIgbmctYXR0ci1zdHJva2UtZGFzaGFycmF5PSJ7e2NvbmZpZy5kYXNoYXJyYXl9fSIgc3Ryb2tlPSIjNTU1NTU1IiBzdHJva2Utd2lkdGg9IjEwIiByPSIzNSIgc3Ryb2tlLWRhc2hhcnJheT0iMTY0LjkzMzYxNDMxMzQ2NDE1IDU2Ljk3Nzg3MTQzNzgyMTM4Ij48YW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9InJvdGF0ZSIgY2FsY01vZGU9ImxpbmVhciIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCIga2V5VGltZXM9IjA7MSIgZHVyPSIxcyIgYmVnaW49IjBzIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSI+PC9hbmltYXRlVHJhbnNmb3JtPjwvY2lyY2xlPjwvc3ZnPgo=\"},1733:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/array/from\")},7104:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/array/is-array\")},593:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/bind\")},4883:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/concat\")},7862:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/entries\")},7834:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/every\")},9998:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/filter\")},3580:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/find\")},4235:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/for-each\")},2605:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/includes\")},8493:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/index-of\")},874:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/keys\")},3942:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/map\")},66:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/reduce\")},600:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/slice\")},5626:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/some\")},9247:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/sort\")},7390:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/instance/trim\")},8344:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/json/stringify\")},2611:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/map\")},4901:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/number/is-integer\")},4994:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/object/assign\")},1815:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/object/entries\")},3015:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/object/from-entries\")},7252:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/object/keys\")},9968:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/object/values\")},7885:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/set\")},9300:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/set-timeout\")},9478:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/url\")},6543:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/weak-map\")},6680:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/core-js-stable/weak-set\")},6272:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/helpers/classPrivateFieldGet\")},1093:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/helpers/defineProperty\")},4250:e=>{\"use strict\";e.exports=require(\"@babel/runtime-corejs3/helpers/extends\")},871:e=>{\"use strict\";e.exports=require(\"buffer\")},9003:e=>{\"use strict\";e.exports=require(\"classnames\")},5572:e=>{\"use strict\";e.exports=require(\"immutable\")},9793:e=>{\"use strict\";e.exports=require(\"js-yaml\")},1712:e=>{\"use strict\";e.exports=require(\"lodash/get\")},4292:e=>{\"use strict\";e.exports=require(\"lodash/identity\")},9699:e=>{\"use strict\";e.exports=require(\"lodash/isEmpty\")},5716:e=>{\"use strict\";e.exports=require(\"lodash/isFunction\")},5452:e=>{\"use strict\";e.exports=require(\"lodash/isPlainObject\")},541:e=>{\"use strict\";e.exports=require(\"lodash/memoize\")},4129:e=>{\"use strict\";e.exports=require(\"lodash/some\")},580:e=>{\"use strict\";e.exports=require(\"prop-types\")},9989:e=>{\"use strict\";e.exports=require(\"randexp\")},185:e=>{\"use strict\";e.exports=require(\"randombytes\")},6689:e=>{\"use strict\";e.exports=require(\"react\")},2807:e=>{\"use strict\";e.exports=require(\"react-copy-to-clipboard\")},8082:e=>{\"use strict\";e.exports=require(\"react-immutable-proptypes\")},6695:e=>{\"use strict\";e.exports=require(\"redux\")},963:e=>{\"use strict\";e.exports=require(\"remarkable\")},6814:e=>{\"use strict\";e.exports=require(\"reselect\")},41:e=>{\"use strict\";e.exports=require(\"serialize-error\")},6765:e=>{\"use strict\";e.exports=require(\"swagger-client/es/helpers\")},3883:e=>{\"use strict\";e.exports=require(\"url-parse\")},8920:e=>{\"use strict\";e.exports=require(\"xml\")}},t={};function n(s){var r=t[s];if(void 0!==r)return r.exports;var a=t[s]={exports:{}};return e[s](a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var s in t)n.o(t,s)&&!n.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var s={};return(()=>{\"use strict\";n.d(s,{default:()=>xs});var e={};n.r(e),n.d(e,{Button:()=>nn,Col:()=>en,Collapse:()=>cn,Container:()=>Yt,Input:()=>rn,Link:()=>on,Row:()=>tn,Select:()=>an,TextArea:()=>sn});var t={};n.r(t),n.d(t,{JsonSchemaArrayItemFile:()=>as,JsonSchemaArrayItemText:()=>rs,JsonSchemaForm:()=>ts,JsonSchema_array:()=>ss,JsonSchema_boolean:()=>os,JsonSchema_object:()=>cs,JsonSchema_string:()=>ns});const r=require(\"@babel/runtime-corejs3/core-js-stable/instance/last-index-of\");var a=n.n(r),o=n(9998),l=n.n(o),c=n(7252),i=n.n(c),u=n(8344),p=n.n(u);const m=require(\"deep-extend\");var d=n.n(m),h=n(593),g=n.n(h),f=n(4994),y=n.n(f),S=n(600),v=n.n(S),E=n(7104),x=n.n(E),w=n(66),C=n.n(w),b=n(3942),j=n.n(b),_=n(4883),N=n.n(_),O=n(6689),k=n.n(O),A=n(6695),I=n(5572),P=n.n(I);const q=require(\"redux-immutable\");var R=n(41);const T=require(\"lodash/merge\");var M=n.n(T),D=n(4966),J=n(7504),$=n(1669);const K=e=>e;class L{constructor(){var e;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};var n,s,r;d()(this,{state:{},plugins:[],pluginsOptions:{},system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},t),this.getSystem=g()(e=this._getSystem).call(e,this),this.store=(n=K,s=(0,I.fromJS)(this.state),r=this.getSystem,function(e,t,n){let s=[(0,$._5)(n)];const r=J.Z.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||A.compose;return(0,A.createStore)(e,t,r((0,A.applyMiddleware)(...s)))}(n,s,r)),this.buildSystem(!1),this.register(this.plugins)}getStore(){return this.store}register(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];var n=V(e,this.getSystem(),this.pluginsOptions);F(this.system,n),t&&this.buildSystem();U.call(this.system,e,this.getSystem())&&this.buildSystem()}buildSystem(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,n=this.getStore().getState;this.boundSystem=y()({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getWrappedAndBoundSelectors(n,this.getSystem),this.getStateThunks(n),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}_getSystem(){return this.boundSystem}getRootInjects(){var e,t,n;return y()({getSystem:this.getSystem,getStore:g()(e=this.getStore).call(e,this),getComponents:g()(t=this.getComponents).call(t,this),getState:this.getStore().getState,getConfigs:g()(n=this._getConfigs).call(n,this),Im:P(),React:k()},this.system.rootInjects||{})}_getConfigs(){return this.system.configs}getConfigs(){return{configs:this.system.configs}}setConfigs(e){this.system.configs=e}rebuildReducer(){var e;this.store.replaceReducer((e=this.system.statePlugins,function(e){var t;let n=C()(t=i()(e)).call(t,((t,n)=>(t[n]=function(e){return function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new I.Map,n=arguments.length>1?arguments[1]:void 0;if(!e)return t;let s=e[n.type];if(s){const e=z(s)(t,n);return null===e?t:e}return t}}(e[n]),t)),{});return i()(n).length?(0,q.combineReducers)(n):K}((0,$.Ay)(e,(e=>e.reducers)))))}getType(e){let t=e[0].toUpperCase()+v()(e).call(e,1);return(0,$.Q2)(this.system.statePlugins,((n,s)=>{let r=n[e];if(r)return{[s+t]:r}}))}getSelectors(){return this.getType(\"selectors\")}getActions(){let e=this.getType(\"actions\");return(0,$.Ay)(e,(e=>(0,$.Q2)(e,((e,t)=>{if((0,$.LQ)(e))return{[t]:e}}))))}getWrappedAndBoundActions(e){var t=this;let n=this.getBoundActions(e);return(0,$.Ay)(n,((e,n)=>{let s=this.system.statePlugins[v()(n).call(n,0,-7)].wrapActions;return s?(0,$.Ay)(e,((e,n)=>{let r=s[n];return r?(x()(r)||(r=[r]),C()(r).call(r,((e,n)=>{let s=function(){return n(e,t.getSystem())(...arguments)};if(!(0,$.LQ)(s))throw new TypeError(\"wrapActions needs to return a function that returns a new function (ie the wrapped action)\");return z(s)}),e||Function.prototype)):e})):e}))}getWrappedAndBoundSelectors(e,t){var n=this;let s=this.getBoundSelectors(e,t);return(0,$.Ay)(s,((t,s)=>{let r=[v()(s).call(s,0,-9)],a=this.system.statePlugins[r].wrapSelectors;return a?(0,$.Ay)(t,((t,s)=>{let o=a[s];return o?(x()(o)||(o=[o]),C()(o).call(o,((t,s)=>{let a=function(){for(var a=arguments.length,o=new Array(a),l=0;l<a;l++)o[l]=arguments[l];return s(t,n.getSystem())(e().getIn(r),...o)};if(!(0,$.LQ)(a))throw new TypeError(\"wrapSelector needs to return a function that returns a new function (ie the wrapped action)\");return a}),t||Function.prototype)):t})):t}))}getStates(e){var t;return C()(t=i()(this.system.statePlugins)).call(t,((t,n)=>(t[n]=e.get(n),t)),{})}getStateThunks(e){var t;return C()(t=i()(this.system.statePlugins)).call(t,((t,n)=>(t[n]=()=>e().get(n),t)),{})}getFn(){return{fn:this.system.fn}}getComponents(e){const t=this.system.components[e];return x()(t)?C()(t).call(t,((e,t)=>t(e,this.getSystem()))):void 0!==e?this.system.components[e]:this.system.components}getBoundSelectors(e,t){return(0,$.Ay)(this.getSelectors(),((n,s)=>{let r=[v()(s).call(s,0,-9)];return(0,$.Ay)(n,(n=>function(){for(var s=arguments.length,a=new Array(s),o=0;o<s;o++)a[o]=arguments[o];let l=z(n).apply(null,[e().getIn(r),...a]);return\"function\"==typeof l&&(l=z(l)(t())),l}))}))}getBoundActions(e){e=e||this.getStore().dispatch;const t=this.getActions(),n=e=>\"function\"!=typeof e?(0,$.Ay)(e,(e=>n(e))):function(){var t=null;try{t=e(...arguments)}catch(e){t={type:D.NEW_THROWN_ERR,error:!0,payload:(0,R.serializeError)(e)}}finally{return t}};return(0,$.Ay)(t,(t=>(0,A.bindActionCreators)(n(t),e)))}getMapStateToProps(){return()=>y()({},this.getSystem())}getMapDispatchToProps(e){return t=>d()({},this.getWrappedAndBoundActions(t),this.getFn(),e)}}function V(e,t,n){if((0,$.Kn)(e)&&!(0,$.kJ)(e))return M()({},e);if((0,$.Wl)(e))return V(e(t),t,n);if((0,$.kJ)(e)){var s;const r=\"chain\"===n.pluginLoadType?t.getComponents():{};return C()(s=j()(e).call(e,(e=>V(e,t,n)))).call(s,F,r)}return{}}function U(e,t){let{hasLoaded:n}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},s=n;return(0,$.Kn)(e)&&!(0,$.kJ)(e)&&\"function\"==typeof e.afterLoad&&(s=!0,z(e.afterLoad).call(this,t)),(0,$.Wl)(e)?U.call(this,e(t),t,{hasLoaded:s}):(0,$.kJ)(e)?j()(e).call(e,(e=>U.call(this,e,t,{hasLoaded:s}))):s}function F(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,$.Kn)(e))return{};if(!(0,$.Kn)(t))return e;t.wrapComponents&&((0,$.Ay)(t.wrapComponents,((n,s)=>{const r=e.components&&e.components[s];r&&x()(r)?(e.components[s]=N()(r).call(r,[n]),delete t.wrapComponents[s]):r&&(e.components[s]=[r,n],delete t.wrapComponents[s])})),i()(t.wrapComponents).length||delete t.wrapComponents);const{statePlugins:n}=e;if((0,$.Kn)(n))for(let e in n){const a=n[e];if(!(0,$.Kn)(a))continue;const{wrapActions:o,wrapSelectors:l}=a;if((0,$.Kn)(o))for(let n in o){let r=o[n];var s;if(x()(r)||(r=[r],o[n]=r),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapActions&&t.statePlugins[e].wrapActions[n])t.statePlugins[e].wrapActions[n]=N()(s=o[n]).call(s,t.statePlugins[e].wrapActions[n])}if((0,$.Kn)(l))for(let n in l){let s=l[n];var r;if(x()(s)||(s=[s],l[n]=s),t&&t.statePlugins&&t.statePlugins[e]&&t.statePlugins[e].wrapSelectors&&t.statePlugins[e].wrapSelectors[n])t.statePlugins[e].wrapSelectors[n]=N()(r=l[n]).call(r,t.statePlugins[e].wrapSelectors[n])}}return d()(e,t)}function z(e){let{logErrors:t=!0}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return\"function\"!=typeof e?e:function(){try{for(var n=arguments.length,s=new Array(n),r=0;r<n;r++)s[r]=arguments[r];return e.call(this,...s)}catch(e){return t&&console.error(e),null}}}var B=n(7793),W=n(6821),H=n(7038),G=n(3420),Z=n(8883),X=n(6575),Y=n(9150),Q=n(1241),ee=n(3705),te=n(8525),ne=n(8011),se=n(6709),re=n(4980),ae=n(9978),oe=n(8560),le=n(9595),ce=n(1093),ie=n.n(ce),ue=n(8493),pe=n.n(ue),me=(n(580),n(8082),n(6765));class de extends O.PureComponent{constructor(e,t){super(e,t),ie()(this,\"toggleShown\",(()=>{let{layoutActions:e,tag:t,operationId:n,isShown:s}=this.props;const r=this.getResolvedSubtree();s||void 0!==r||this.requestResolvedSubtree(),e.show([\"operations\",t,n],!s)})),ie()(this,\"onCancelClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),ie()(this,\"onTryoutClick\",(()=>{this.setState({tryItOutEnabled:!this.state.tryItOutEnabled})})),ie()(this,\"onResetClick\",(e=>{const t=this.props.oas3Selectors.selectDefaultRequestBodyValue(...e);this.props.oas3Actions.setRequestBodyValue({value:t,pathMethod:e})})),ie()(this,\"onExecute\",(()=>{this.setState({executeInProgress:!0})})),ie()(this,\"getResolvedSubtree\",(()=>{const{specSelectors:e,path:t,method:n,specPath:s}=this.props;return s?e.specResolvedSubtree(s.toJS()):e.specResolvedSubtree([\"paths\",t,n])})),ie()(this,\"requestResolvedSubtree\",(()=>{const{specActions:e,path:t,method:n,specPath:s}=this.props;return s?e.requestResolvedSubtree(s.toJS()):e.requestResolvedSubtree([\"paths\",t,n])}));const{tryItOutEnabled:n}=e.getConfigs();this.state={tryItOutEnabled:!0===n||\"true\"===n,executeInProgress:!1}}mapStateToProps(e,t){const{op:n,layoutSelectors:s,getConfigs:r}=t,{docExpansion:a,deepLinking:o,displayOperationId:l,displayRequestDuration:c,supportedSubmitMethods:i}=r(),u=s.showSummary(),p=n.getIn([\"operation\",\"__originalOperationId\"])||n.getIn([\"operation\",\"operationId\"])||(0,me.opId)(n.get(\"operation\"),t.path,t.method)||n.get(\"id\"),m=[\"operations\",t.tag,p],d=o&&\"false\"!==o,h=pe()(i).call(i,t.method)>=0&&(void 0===t.allowTryItOut?t.specSelectors.allowTryItOutFor(t.path,t.method):t.allowTryItOut),g=n.getIn([\"operation\",\"security\"])||t.specSelectors.security();return{operationId:p,isDeepLinkingEnabled:d,showSummary:u,displayOperationId:l,displayRequestDuration:c,allowTryItOut:h,security:g,isAuthorized:t.authSelectors.isAuthorized(g),isShown:s.isShown(m,\"full\"===a),jumpToKey:`paths.${t.path}.${t.method}`,response:t.specSelectors.responseFor(t.path,t.method),request:t.specSelectors.requestFor(t.path,t.method)}}componentDidMount(){const{isShown:e}=this.props,t=this.getResolvedSubtree();e&&void 0===t&&this.requestResolvedSubtree()}UNSAFE_componentWillReceiveProps(e){const{response:t,isShown:n}=e,s=this.getResolvedSubtree();t!==this.props.response&&this.setState({executeInProgress:!1}),n&&void 0===s&&this.requestResolvedSubtree()}render(){let{op:e,tag:t,path:n,method:s,security:r,isAuthorized:a,operationId:o,showSummary:l,isShown:c,jumpToKey:i,allowTryItOut:u,response:p,request:m,displayOperationId:d,displayRequestDuration:h,isDeepLinkingEnabled:g,specPath:f,specSelectors:y,specActions:S,getComponent:v,getConfigs:E,layoutSelectors:x,layoutActions:w,authActions:C,authSelectors:b,oas3Actions:j,oas3Selectors:_,fn:N}=this.props;const O=v(\"operation\"),A=this.getResolvedSubtree()||(0,I.Map)(),P=(0,I.fromJS)({op:A,tag:t,path:n,summary:e.getIn([\"operation\",\"summary\"])||\"\",deprecated:A.get(\"deprecated\")||e.getIn([\"operation\",\"deprecated\"])||!1,method:s,security:r,isAuthorized:a,operationId:o,originalOperationId:A.getIn([\"operation\",\"__originalOperationId\"]),showSummary:l,isShown:c,jumpToKey:i,allowTryItOut:u,request:m,displayOperationId:d,displayRequestDuration:h,isDeepLinkingEnabled:g,executeInProgress:this.state.executeInProgress,tryItOutEnabled:this.state.tryItOutEnabled});return k().createElement(O,{operation:P,response:p,request:m,isShown:c,toggleShown:this.toggleShown,onTryoutClick:this.onTryoutClick,onResetClick:this.onResetClick,onCancelClick:this.onCancelClick,onExecute:this.onExecute,specPath:f,specActions:S,specSelectors:y,oas3Actions:j,oas3Selectors:_,layoutActions:w,layoutSelectors:x,authActions:C,authSelectors:b,getComponent:v,getConfigs:E,fn:N})}}ie()(de,\"defaultProps\",{showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1,displayRequestDuration:!1});class he extends k().Component{getLayout(){let{getComponent:e,layoutSelectors:t}=this.props;const n=t.current(),s=e(n,!0);return s||(()=>k().createElement(\"h1\",null,' No layout defined for \"',n,'\" '))}render(){const e=this.getLayout();return k().createElement(e,null)}}he.defaultProps={};class ge extends k().Component{constructor(){super(...arguments),ie()(this,\"close\",(()=>{let{authActions:e}=this.props;e.showDefinitions(!1)}))}render(){var e;let{authSelectors:t,authActions:n,getComponent:s,errSelectors:r,specSelectors:a,fn:{AST:o={}}}=this.props,l=t.shownDefinitions();const c=s(\"auths\");return k().createElement(\"div\",{className:\"dialog-ux\"},k().createElement(\"div\",{className:\"backdrop-ux\"}),k().createElement(\"div\",{className:\"modal-ux\"},k().createElement(\"div\",{className:\"modal-dialog-ux\"},k().createElement(\"div\",{className:\"modal-ux-inner\"},k().createElement(\"div\",{className:\"modal-ux-header\"},k().createElement(\"h3\",null,\"Available authorizations\"),k().createElement(\"button\",{type:\"button\",className:\"close-modal\",onClick:this.close},k().createElement(\"svg\",{width:\"20\",height:\"20\"},k().createElement(\"use\",{href:\"#close\",xlinkHref:\"#close\"})))),k().createElement(\"div\",{className:\"modal-ux-content\"},j()(e=l.valueSeq()).call(e,((e,l)=>k().createElement(c,{key:l,AST:o,definitions:e,getComponent:s,errSelectors:r,authSelectors:t,authActions:n,specSelectors:a}))))))))}}class fe extends k().Component{render(){let{isAuthorized:e,showPopup:t,onClick:n,getComponent:s}=this.props;const r=s(\"authorizationPopup\",!0);return k().createElement(\"div\",{className:\"auth-wrapper\"},k().createElement(\"button\",{className:e?\"btn authorize locked\":\"btn authorize unlocked\",onClick:n},k().createElement(\"span\",null,\"Authorize\"),k().createElement(\"svg\",{width:\"20\",height:\"20\"},k().createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"}))),t&&k().createElement(r,null))}}class ye extends k().Component{render(){const{authActions:e,authSelectors:t,specSelectors:n,getComponent:s}=this.props,r=n.securityDefinitions(),a=t.definitionsToAuthorize(),o=s(\"authorizeBtn\");return r?k().createElement(o,{onClick:()=>e.showDefinitions(a),isAuthorized:!!t.authorized().size,showPopup:!!t.shownDefinitions(),getComponent:s}):null}}class Se extends k().Component{constructor(){super(...arguments),ie()(this,\"onClick\",(e=>{e.stopPropagation();let{onClick:t}=this.props;t&&t()}))}render(){let{isAuthorized:e}=this.props;return k().createElement(\"button\",{className:e?\"authorization__btn locked\":\"authorization__btn unlocked\",\"aria-label\":e?\"authorization button locked\":\"authorization button unlocked\",onClick:this.onClick},k().createElement(\"svg\",{width:\"20\",height:\"20\"},k().createElement(\"use\",{href:e?\"#locked\":\"#unlocked\",xlinkHref:e?\"#locked\":\"#unlocked\"})))}}class ve extends k().Component{constructor(e,t){super(e,t),ie()(this,\"onAuthChange\",(e=>{let{name:t}=e;this.setState({[t]:e})})),ie()(this,\"submitAuth\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.authorizeWithPersistOption(this.state)})),ie()(this,\"logoutClick\",(e=>{e.preventDefault();let{authActions:t,definitions:n}=this.props,s=j()(n).call(n,((e,t)=>t)).toArray();this.setState(C()(s).call(s,((e,t)=>(e[t]=\"\",e)),{})),t.logoutWithPersistOption(s)})),ie()(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),this.state={}}render(){var e;let{definitions:t,getComponent:n,authSelectors:s,errSelectors:r}=this.props;const a=n(\"AuthItem\"),o=n(\"oauth2\",!0),c=n(\"Button\");let i=s.authorized(),u=l()(t).call(t,((e,t)=>!!i.get(t))),p=l()(t).call(t,(e=>\"oauth2\"!==e.get(\"type\"))),m=l()(t).call(t,(e=>\"oauth2\"===e.get(\"type\")));return k().createElement(\"div\",{className:\"auth-container\"},!!p.size&&k().createElement(\"form\",{onSubmit:this.submitAuth},j()(p).call(p,((e,t)=>k().createElement(a,{key:t,schema:e,name:t,getComponent:n,onAuthChange:this.onAuthChange,authorized:i,errSelectors:r}))).toArray(),k().createElement(\"div\",{className:\"auth-btn-wrapper\"},p.size===u.size?k().createElement(c,{className:\"btn modal-btn auth\",onClick:this.logoutClick},\"Logout\"):k().createElement(c,{type:\"submit\",className:\"btn modal-btn auth authorize\"},\"Authorize\"),k().createElement(c,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\"))),m&&m.size?k().createElement(\"div\",null,k().createElement(\"div\",{className:\"scope-def\"},k().createElement(\"p\",null,\"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.\"),k().createElement(\"p\",null,\"API requires the following scopes. Select which ones you want to grant to Swagger UI.\")),j()(e=l()(t).call(t,(e=>\"oauth2\"===e.get(\"type\")))).call(e,((e,t)=>k().createElement(\"div\",{key:t},k().createElement(o,{authorized:i,schema:e,name:t})))).toArray()):null)}}class Ee extends k().Component{render(){let{schema:e,name:t,getComponent:n,onAuthChange:s,authorized:r,errSelectors:a}=this.props;const o=n(\"apiKeyAuth\"),l=n(\"basicAuth\");let c;const i=e.get(\"type\");switch(i){case\"apiKey\":c=k().createElement(o,{key:t,schema:e,name:t,errSelectors:a,authorized:r,getComponent:n,onChange:s});break;case\"basic\":c=k().createElement(l,{key:t,schema:e,name:t,errSelectors:a,authorized:r,getComponent:n,onChange:s});break;default:c=k().createElement(\"div\",{key:t},\"Unknown security definition type \",i)}return k().createElement(\"div\",{key:`${t}-jump`},c)}}class xe extends k().Component{render(){let{error:e}=this.props,t=e.get(\"level\"),n=e.get(\"message\"),s=e.get(\"source\");return k().createElement(\"div\",{className:\"errors\"},k().createElement(\"b\",null,s,\" \",t),k().createElement(\"span\",null,n))}}class we extends k().Component{constructor(e,t){super(e,t),ie()(this,\"onChange\",(e=>{let{onChange:t}=this.props,n=e.target.value,s=y()({},this.state,{value:n});this.setState(s),t(s)}));let{name:n,schema:s}=this.props,r=this.getValue();this.state={name:n,schema:s,value:r}}getValue(){let{name:e,authorized:t}=this.props;return t&&t.getIn([e,\"value\"])}render(){var e,t;let{schema:n,getComponent:s,errSelectors:r,name:a}=this.props;const o=s(\"Input\"),c=s(\"Row\"),i=s(\"Col\"),u=s(\"authError\"),p=s(\"Markdown\",!0),m=s(\"JumpToPath\",!0);let d=this.getValue(),h=l()(e=r.allErrors()).call(e,(e=>e.get(\"authId\")===a));return k().createElement(\"div\",null,k().createElement(\"h4\",null,k().createElement(\"code\",null,a||n.get(\"name\")),\" (apiKey)\",k().createElement(m,{path:[\"securityDefinitions\",a]})),d&&k().createElement(\"h6\",null,\"Authorized\"),k().createElement(c,null,k().createElement(p,{source:n.get(\"description\")})),k().createElement(c,null,k().createElement(\"p\",null,\"Name: \",k().createElement(\"code\",null,n.get(\"name\")))),k().createElement(c,null,k().createElement(\"p\",null,\"In: \",k().createElement(\"code\",null,n.get(\"in\")))),k().createElement(c,null,k().createElement(\"label\",null,\"Value:\"),d?k().createElement(\"code\",null,\" ****** \"):k().createElement(i,null,k().createElement(o,{type:\"text\",onChange:this.onChange,autoFocus:!0}))),j()(t=h.valueSeq()).call(t,((e,t)=>k().createElement(u,{error:e,key:t}))))}}class Ce extends k().Component{constructor(e,t){super(e,t),ie()(this,\"onChange\",(e=>{let{onChange:t}=this.props,{value:n,name:s}=e.target,r=this.state.value;r[s]=n,this.setState({value:r}),t(this.state)}));let{schema:n,name:s}=this.props,r=this.getValue().username;this.state={name:s,schema:n,value:r?{username:r}:{}}}getValue(){let{authorized:e,name:t}=this.props;return e&&e.getIn([t,\"value\"])||{}}render(){var e,t;let{schema:n,getComponent:s,name:r,errSelectors:a}=this.props;const o=s(\"Input\"),c=s(\"Row\"),i=s(\"Col\"),u=s(\"authError\"),p=s(\"JumpToPath\",!0),m=s(\"Markdown\",!0);let d=this.getValue().username,h=l()(e=a.allErrors()).call(e,(e=>e.get(\"authId\")===r));return k().createElement(\"div\",null,k().createElement(\"h4\",null,\"Basic authorization\",k().createElement(p,{path:[\"securityDefinitions\",r]})),d&&k().createElement(\"h6\",null,\"Authorized\"),k().createElement(c,null,k().createElement(m,{source:n.get(\"description\")})),k().createElement(c,null,k().createElement(\"label\",null,\"Username:\"),d?k().createElement(\"code\",null,\" \",d,\" \"):k().createElement(i,null,k().createElement(o,{type:\"text\",required:\"required\",name:\"username\",onChange:this.onChange,autoFocus:!0}))),k().createElement(c,null,k().createElement(\"label\",null,\"Password:\"),d?k().createElement(\"code\",null,\" ****** \"):k().createElement(i,null,k().createElement(o,{autoComplete:\"new-password\",name:\"password\",type:\"password\",onChange:this.onChange}))),j()(t=h.valueSeq()).call(t,((e,t)=>k().createElement(u,{error:e,key:t}))))}}function be(e){const{example:t,showValue:n,getComponent:s,getConfigs:r}=e,a=s(\"Markdown\",!0),o=s(\"highlightCode\");return t?k().createElement(\"div\",{className:\"example\"},t.get(\"description\")?k().createElement(\"section\",{className:\"example__section\"},k().createElement(\"div\",{className:\"example__section-header\"},\"Example Description\"),k().createElement(\"p\",null,k().createElement(a,{source:t.get(\"description\")}))):null,n&&t.has(\"value\")?k().createElement(\"section\",{className:\"example__section\"},k().createElement(\"div\",{className:\"example__section-header\"},\"Example Value\"),k().createElement(o,{getConfigs:r,value:(0,$.Pz)(t.get(\"value\"))})):null):null}var je=n(2611),_e=n.n(je);class Ne extends k().PureComponent{constructor(){var e;super(...arguments),e=this,ie()(this,\"_onSelect\",(function(t){let{isSyntheticChange:n=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};\"function\"==typeof e.props.onSelect&&e.props.onSelect(t,{isSyntheticChange:n})})),ie()(this,\"_onDomSelect\",(e=>{if(\"function\"==typeof this.props.onSelect){const t=e.target.selectedOptions[0].getAttribute(\"value\");this._onSelect(t,{isSyntheticChange:!1})}})),ie()(this,\"getCurrentExample\",(()=>{const{examples:e,currentExampleKey:t}=this.props,n=e.get(t),s=e.keySeq().first(),r=e.get(s);return n||r||_e()({})}))}componentDidMount(){const{onSelect:e,examples:t}=this.props;if(\"function\"==typeof e){const e=t.first(),n=t.keyOf(e);this._onSelect(n,{isSyntheticChange:!0})}}UNSAFE_componentWillReceiveProps(e){const{currentExampleKey:t,examples:n}=e;if(n!==this.props.examples&&!n.has(t)){const e=n.first(),t=n.keyOf(e);this._onSelect(t,{isSyntheticChange:!0})}}render(){const{examples:e,currentExampleKey:t,isValueModified:n,isModifiedValueAvailable:s,showLabels:r}=this.props;return k().createElement(\"div\",{className:\"examples-select\"},r?k().createElement(\"span\",{className:\"examples-select__section-label\"},\"Examples: \"):null,k().createElement(\"select\",{className:\"examples-select-element\",onChange:this._onDomSelect,value:s&&n?\"__MODIFIED__VALUE__\":t||\"\"},s?k().createElement(\"option\",{value:\"__MODIFIED__VALUE__\"},\"[Modified value]\"):null,j()(e).call(e,((e,t)=>k().createElement(\"option\",{key:t,value:t},e.get(\"summary\")||t))).valueSeq()))}}ie()(Ne,\"defaultProps\",{examples:P().Map({}),onSelect:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"DEBUG: ExamplesSelect was not given an onSelect callback\",...t)},currentExampleKey:null,showLabels:!0});const Oe=e=>I.List.isList(e)?e:(0,$.Pz)(e);class ke extends k().PureComponent{constructor(e){var t;super(e),t=this,ie()(this,\"_getStateForCurrentNamespace\",(()=>{const{currentNamespace:e}=this.props;return(this.state[e]||(0,I.Map)()).toObject()})),ie()(this,\"_setStateForCurrentNamespace\",(e=>{const{currentNamespace:t}=this.props;return this._setStateForNamespace(t,e)})),ie()(this,\"_setStateForNamespace\",((e,t)=>{const n=(this.state[e]||(0,I.Map)()).mergeDeep(t);return this.setState({[e]:n})})),ie()(this,\"_isCurrentUserInputSameAsExampleValue\",(()=>{const{currentUserInputValue:e}=this.props;return this._getCurrentExampleValue()===e})),ie()(this,\"_getValueForExample\",((e,t)=>{const{examples:n}=t||this.props;return Oe((n||(0,I.Map)({})).getIn([e,\"value\"]))})),ie()(this,\"_getCurrentExampleValue\",(e=>{const{currentKey:t}=e||this.props;return this._getValueForExample(t,e||this.props)})),ie()(this,\"_onExamplesSelect\",(function(e){let{isSyntheticChange:n}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{onSelect:s,updateValue:r,currentUserInputValue:a,userHasEditedBody:o}=t.props,{lastUserEditedValue:l}=t._getStateForCurrentNamespace(),c=t._getValueForExample(e);if(\"__MODIFIED__VALUE__\"===e)return r(Oe(l)),t._setStateForCurrentNamespace({isModifiedValueSelected:!0});if(\"function\"==typeof s){for(var i=arguments.length,u=new Array(i>2?i-2:0),p=2;p<i;p++)u[p-2]=arguments[p];s(e,{isSyntheticChange:n},...u)}t._setStateForCurrentNamespace({lastDownstreamValue:c,isModifiedValueSelected:n&&o||!!a&&a!==c}),n||\"function\"==typeof r&&r(Oe(c))}));const n=this._getCurrentExampleValue();this.state={[e.currentNamespace]:(0,I.Map)({lastUserEditedValue:this.props.currentUserInputValue,lastDownstreamValue:n,isModifiedValueSelected:this.props.userHasEditedBody||this.props.currentUserInputValue!==n})}}componentWillUnmount(){this.props.setRetainRequestBodyValueFlag(!1)}UNSAFE_componentWillReceiveProps(e){const{currentUserInputValue:t,examples:n,onSelect:s,userHasEditedBody:r}=e,{lastUserEditedValue:a,lastDownstreamValue:o}=this._getStateForCurrentNamespace(),c=this._getValueForExample(e.currentKey,e),i=l()(n).call(n,(e=>e.get(\"value\")===t||(0,$.Pz)(e.get(\"value\"))===t));if(i.size){let t;t=i.has(e.currentKey)?e.currentKey:i.keySeq().first(),s(t,{isSyntheticChange:!0})}else t!==this.props.currentUserInputValue&&t!==a&&t!==o&&(this.props.setRetainRequestBodyValueFlag(!0),this._setStateForNamespace(e.currentNamespace,{lastUserEditedValue:e.currentUserInputValue,isModifiedValueSelected:r||t!==c}))}render(){const{currentUserInputValue:e,examples:t,currentKey:n,getComponent:s,userHasEditedBody:r}=this.props,{lastDownstreamValue:a,lastUserEditedValue:o,isModifiedValueSelected:l}=this._getStateForCurrentNamespace(),c=s(\"ExamplesSelect\");return k().createElement(c,{examples:t,currentExampleKey:n,onSelect:this._onExamplesSelect,isModifiedValueAvailable:!!o&&o!==a,isValueModified:void 0!==e&&l&&e!==this._getCurrentExampleValue()||r})}}ie()(ke,\"defaultProps\",{userHasEditedBody:!1,examples:(0,I.Map)({}),currentNamespace:\"__DEFAULT__NAMESPACE__\",setRetainRequestBodyValueFlag:()=>{},onSelect:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"ExamplesSelectValueRetainer: no `onSelect` function was provided\",...t)},updateValue:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return console.log(\"ExamplesSelectValueRetainer: no `updateValue` function was provided\",...t)}});var Ae=n(1733),Ie=n.n(Ae),Pe=n(874),qe=n.n(Pe),Re=n(2605),Te=n.n(Re),Me=n(3883),De=n.n(Me);class Je extends k().Component{constructor(e,t){super(e,t),ie()(this,\"close\",(e=>{e.preventDefault();let{authActions:t}=this.props;t.showDefinitions(!1)})),ie()(this,\"authorize\",(()=>{let{authActions:e,errActions:t,getConfigs:n,authSelectors:s,oas3Selectors:r}=this.props,a=n(),o=s.getConfigs();t.clear({authId:name,type:\"auth\",source:\"auth\"}),function(e){let{auth:t,authActions:n,errActions:s,configs:r,authConfigs:a={},currentServer:o}=e,{schema:l,scopes:c,name:i,clientId:u}=t,p=l.get(\"flow\"),m=[];switch(p){case\"password\":return void n.authorizePassword(t);case\"application\":case\"clientCredentials\":case\"client_credentials\":return void n.authorizeApplication(t);case\"accessCode\":case\"authorizationCode\":case\"authorization_code\":m.push(\"response_type=code\");break;case\"implicit\":m.push(\"response_type=token\")}\"string\"==typeof u&&m.push(\"client_id=\"+encodeURIComponent(u));let d=r.oauth2RedirectUrl;if(void 0===d)return void s.newAuthErr({authId:i,source:\"validation\",level:\"error\",message:\"oauth2RedirectUrl configuration is not passed. Oauth2 authorization cannot be performed.\"});m.push(\"redirect_uri=\"+encodeURIComponent(d));let h=[];if(x()(c)?h=c:P().List.isList(c)&&(h=c.toArray()),h.length>0){let e=a.scopeSeparator||\" \";m.push(\"scope=\"+encodeURIComponent(h.join(e)))}let g=(0,$.r3)(new Date);if(m.push(\"state=\"+encodeURIComponent(g)),void 0!==a.realm&&m.push(\"realm=\"+encodeURIComponent(a.realm)),(\"authorizationCode\"===p||\"authorization_code\"===p||\"accessCode\"===p)&&a.usePkceWithAuthorizationCodeGrant){const e=(0,$.Uj)(),n=(0,$.Xb)(e);m.push(\"code_challenge=\"+n),m.push(\"code_challenge_method=S256\"),t.codeVerifier=e}let{additionalQueryStringParams:f}=a;for(let e in f){var y;void 0!==f[e]&&m.push(j()(y=[e,f[e]]).call(y,encodeURIComponent).join(\"=\"))}const S=l.get(\"authorizationUrl\");let v;v=o?De()((0,$.Nm)(S),o,!0).toString():(0,$.Nm)(S);let E,w=[v,m.join(\"&\")].join(-1===pe()(S).call(S,\"?\")?\"?\":\"&\");E=\"implicit\"===p?n.preAuthorizeImplicit:a.useBasicAuthenticationWithAccessCodeGrant?n.authorizeAccessCodeWithBasicAuthentication:n.authorizeAccessCodeWithFormParams,n.authPopup(w,{auth:t,state:g,redirectUrl:d,callback:E,errCb:s.newAuthErr})}({auth:this.state,currentServer:r.serverEffectiveValue(r.selectedServer()),authActions:e,errActions:t,configs:a,authConfigs:o})})),ie()(this,\"onScopeChange\",(e=>{var t,n;let{target:s}=e,{checked:r}=s,a=s.dataset.value;if(r&&-1===pe()(t=this.state.scopes).call(t,a)){var o;let e=N()(o=this.state.scopes).call(o,[a]);this.setState({scopes:e})}else if(!r&&pe()(n=this.state.scopes).call(n,a)>-1){var c;this.setState({scopes:l()(c=this.state.scopes).call(c,(e=>e!==a))})}})),ie()(this,\"onInputChange\",(e=>{let{target:{dataset:{name:t},value:n}}=e,s={[t]:n};this.setState(s)})),ie()(this,\"selectScopes\",(e=>{var t;e.target.dataset.all?this.setState({scopes:Ie()(qe()(t=this.props.schema.get(\"allowedScopes\")||this.props.schema.get(\"scopes\")).call(t))}):this.setState({scopes:[]})})),ie()(this,\"logout\",(e=>{e.preventDefault();let{authActions:t,errActions:n,name:s}=this.props;n.clear({authId:s,type:\"auth\",source:\"auth\"}),t.logoutWithPersistOption([s])}));let{name:n,schema:s,authorized:r,authSelectors:a}=this.props,o=r&&r.get(n),c=a.getConfigs()||{},i=o&&o.get(\"username\")||\"\",u=o&&o.get(\"clientId\")||c.clientId||\"\",p=o&&o.get(\"clientSecret\")||c.clientSecret||\"\",m=o&&o.get(\"passwordType\")||\"basic\",d=o&&o.get(\"scopes\")||c.scopes||[];\"string\"==typeof d&&(d=d.split(c.scopeSeparator||\" \")),this.state={appName:c.appName,name:n,schema:s,scopes:d,clientId:u,clientSecret:p,username:i,password:\"\",passwordType:m}}render(){var e,t;let{schema:n,getComponent:s,authSelectors:r,errSelectors:a,name:o,specSelectors:c}=this.props;const i=s(\"Input\"),u=s(\"Row\"),p=s(\"Col\"),m=s(\"Button\"),d=s(\"authError\"),h=s(\"JumpToPath\",!0),g=s(\"Markdown\",!0),f=s(\"InitializedInput\"),{isOAS3:y}=c;let S=y()?n.get(\"openIdConnectUrl\"):null;const v=\"implicit\",E=\"password\",x=y()?S?\"authorization_code\":\"authorizationCode\":\"accessCode\",w=y()?S?\"client_credentials\":\"clientCredentials\":\"application\";let C=!!(r.getConfigs()||{}).usePkceWithAuthorizationCodeGrant,b=n.get(\"flow\"),_=b===x&&C?b+\" with PKCE\":b,N=n.get(\"allowedScopes\")||n.get(\"scopes\"),O=!!r.authorized().get(o),A=l()(e=a.allErrors()).call(e,(e=>e.get(\"authId\")===o)),I=!l()(A).call(A,(e=>\"validation\"===e.get(\"source\"))).size,P=n.get(\"description\");return k().createElement(\"div\",null,k().createElement(\"h4\",null,o,\" (OAuth2, \",_,\") \",k().createElement(h,{path:[\"securityDefinitions\",o]})),this.state.appName?k().createElement(\"h5\",null,\"Application: \",this.state.appName,\" \"):null,P&&k().createElement(g,{source:n.get(\"description\")}),O&&k().createElement(\"h6\",null,\"Authorized\"),S&&k().createElement(\"p\",null,\"OpenID Connect URL: \",k().createElement(\"code\",null,S)),(b===v||b===x)&&k().createElement(\"p\",null,\"Authorization URL: \",k().createElement(\"code\",null,n.get(\"authorizationUrl\"))),(b===E||b===x||b===w)&&k().createElement(\"p\",null,\"Token URL:\",k().createElement(\"code\",null,\" \",n.get(\"tokenUrl\"))),k().createElement(\"p\",{className:\"flow\"},\"Flow: \",k().createElement(\"code\",null,_)),b!==E?null:k().createElement(u,null,k().createElement(u,null,k().createElement(\"label\",{htmlFor:\"oauth_username\"},\"username:\"),O?k().createElement(\"code\",null,\" \",this.state.username,\" \"):k().createElement(p,{tablet:10,desktop:10},k().createElement(\"input\",{id:\"oauth_username\",type:\"text\",\"data-name\":\"username\",onChange:this.onInputChange,autoFocus:!0}))),k().createElement(u,null,k().createElement(\"label\",{htmlFor:\"oauth_password\"},\"password:\"),O?k().createElement(\"code\",null,\" ****** \"):k().createElement(p,{tablet:10,desktop:10},k().createElement(\"input\",{id:\"oauth_password\",type:\"password\",\"data-name\":\"password\",onChange:this.onInputChange}))),k().createElement(u,null,k().createElement(\"label\",{htmlFor:\"password_type\"},\"Client credentials location:\"),O?k().createElement(\"code\",null,\" \",this.state.passwordType,\" \"):k().createElement(p,{tablet:10,desktop:10},k().createElement(\"select\",{id:\"password_type\",\"data-name\":\"passwordType\",onChange:this.onInputChange},k().createElement(\"option\",{value:\"basic\"},\"Authorization header\"),k().createElement(\"option\",{value:\"request-body\"},\"Request body\"))))),(b===w||b===v||b===x||b===E)&&(!O||O&&this.state.clientId)&&k().createElement(u,null,k().createElement(\"label\",{htmlFor:\"client_id\"},\"client_id:\"),O?k().createElement(\"code\",null,\" ****** \"):k().createElement(p,{tablet:10,desktop:10},k().createElement(f,{id:\"client_id\",type:\"text\",required:b===E,initialValue:this.state.clientId,\"data-name\":\"clientId\",onChange:this.onInputChange}))),(b===w||b===x||b===E)&&k().createElement(u,null,k().createElement(\"label\",{htmlFor:\"client_secret\"},\"client_secret:\"),O?k().createElement(\"code\",null,\" ****** \"):k().createElement(p,{tablet:10,desktop:10},k().createElement(f,{id:\"client_secret\",initialValue:this.state.clientSecret,type:\"password\",\"data-name\":\"clientSecret\",onChange:this.onInputChange}))),!O&&N&&N.size?k().createElement(\"div\",{className:\"scopes\"},k().createElement(\"h2\",null,\"Scopes:\",k().createElement(\"a\",{onClick:this.selectScopes,\"data-all\":!0},\"select all\"),k().createElement(\"a\",{onClick:this.selectScopes},\"select none\")),j()(N).call(N,((e,t)=>{var n;return k().createElement(u,{key:t},k().createElement(\"div\",{className:\"checkbox\"},k().createElement(i,{\"data-value\":t,id:`${t}-${b}-checkbox-${this.state.name}`,disabled:O,checked:Te()(n=this.state.scopes).call(n,t),type:\"checkbox\",onChange:this.onScopeChange}),k().createElement(\"label\",{htmlFor:`${t}-${b}-checkbox-${this.state.name}`},k().createElement(\"span\",{className:\"item\"}),k().createElement(\"div\",{className:\"text\"},k().createElement(\"p\",{className:\"name\"},t),k().createElement(\"p\",{className:\"description\"},e)))))})).toArray()):null,j()(t=A.valueSeq()).call(t,((e,t)=>k().createElement(d,{error:e,key:t}))),k().createElement(\"div\",{className:\"auth-btn-wrapper\"},I&&(O?k().createElement(m,{className:\"btn modal-btn auth authorize\",onClick:this.logout},\"Logout\"):k().createElement(m,{className:\"btn modal-btn auth authorize\",onClick:this.authorize},\"Authorize\")),k().createElement(m,{className:\"btn modal-btn auth btn-done\",onClick:this.close},\"Close\")))}}class $e extends O.Component{constructor(){super(...arguments),ie()(this,\"onClick\",(()=>{let{specActions:e,path:t,method:n}=this.props;e.clearResponse(t,n),e.clearRequest(t,n)}))}render(){return k().createElement(\"button\",{className:\"btn btn-clear opblock-control__btn\",onClick:this.onClick},\"Clear\")}}const Ke=e=>{let{headers:t}=e;return k().createElement(\"div\",null,k().createElement(\"h5\",null,\"Response headers\"),k().createElement(\"pre\",{className:\"microlight\"},t))},Le=e=>{let{duration:t}=e;return k().createElement(\"div\",null,k().createElement(\"h5\",null,\"Request duration\"),k().createElement(\"pre\",{className:\"microlight\"},t,\" ms\"))};class Ve extends k().Component{shouldComponentUpdate(e){return this.props.response!==e.response||this.props.path!==e.path||this.props.method!==e.method||this.props.displayRequestDuration!==e.displayRequestDuration}render(){const{response:e,getComponent:t,getConfigs:n,displayRequestDuration:s,specSelectors:r,path:a,method:o}=this.props,{showMutatedRequest:l,requestSnippetsEnabled:c}=n(),u=l?r.mutatedRequestFor(a,o):r.requestFor(a,o),p=e.get(\"status\"),m=u.get(\"url\"),d=e.get(\"headers\").toJS(),h=e.get(\"notDocumented\"),g=e.get(\"error\"),f=e.get(\"text\"),y=e.get(\"duration\"),S=i()(d),v=d[\"content-type\"]||d[\"Content-Type\"],E=t(\"responseBody\"),w=j()(S).call(S,(e=>{var t=x()(d[e])?d[e].join():d[e];return k().createElement(\"span\",{className:\"headerline\",key:e},\" \",e,\": \",t,\" \")})),C=0!==w.length,b=t(\"Markdown\",!0),_=t(\"RequestSnippets\",!0),N=t(\"curl\");return k().createElement(\"div\",null,u&&(!0===c||\"true\"===c?k().createElement(_,{request:u}):k().createElement(N,{request:u,getConfigs:n})),m&&k().createElement(\"div\",null,k().createElement(\"div\",{className:\"request-url\"},k().createElement(\"h4\",null,\"Request URL\"),k().createElement(\"pre\",{className:\"microlight\"},m))),k().createElement(\"h4\",null,\"Server response\"),k().createElement(\"table\",{className:\"responses-table live-responses-table\"},k().createElement(\"thead\",null,k().createElement(\"tr\",{className:\"responses-header\"},k().createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),k().createElement(\"td\",{className:\"col_header response-col_description\"},\"Details\"))),k().createElement(\"tbody\",null,k().createElement(\"tr\",{className:\"response\"},k().createElement(\"td\",{className:\"response-col_status\"},p,h?k().createElement(\"div\",{className:\"response-undocumented\"},k().createElement(\"i\",null,\" Undocumented \")):null),k().createElement(\"td\",{className:\"response-col_description\"},g?k().createElement(b,{source:`${\"\"!==e.get(\"name\")?`${e.get(\"name\")}: `:\"\"}${e.get(\"message\")}`}):null,f?k().createElement(E,{content:f,contentType:v,url:m,headers:d,getConfigs:n,getComponent:t}):null,C?k().createElement(Ke,{headers:w}):null,s&&y?k().createElement(Le,{duration:y}):null)))))}}var Ue=n(5623);class Fe extends k().Component{constructor(){super(...arguments),ie()(this,\"renderOperationTag\",((e,t)=>{const{specSelectors:n,getComponent:s,oas3Selectors:r,layoutSelectors:a,layoutActions:o,getConfigs:l}=this.props,c=n.validOperationMethods(),i=s(\"OperationContainer\",!0),u=s(\"OperationTag\"),p=e.get(\"operations\");return k().createElement(u,{key:\"operation-\"+t,tagObj:e,tag:t,oas3Selectors:r,layoutSelectors:a,layoutActions:o,getConfigs:l,getComponent:s,specUrl:n.url()},k().createElement(\"div\",{className:\"operation-tag-content\"},j()(p).call(p,(e=>{const n=e.get(\"path\"),s=e.get(\"method\"),r=P().List([\"paths\",n,s]);return-1===pe()(c).call(c,s)?null:k().createElement(i,{key:`${n}-${s}`,specPath:r,op:e,path:n,method:s,tag:t})})).toArray()))}))}render(){let{specSelectors:e}=this.props;const t=e.taggedOperations();return 0===t.size?k().createElement(\"h3\",null,\" No operations defined in spec!\"):k().createElement(\"div\",null,j()(t).call(t,this.renderOperationTag).toArray(),t.size<1?k().createElement(\"h3\",null,\" No operations defined in spec! \"):null)}}var ze=n(3543);class Be extends k().Component{render(){const{tagObj:e,tag:t,children:n,oas3Selectors:s,layoutSelectors:r,layoutActions:a,getConfigs:o,getComponent:l,specUrl:c}=this.props;let{docExpansion:i,deepLinking:u}=o();const p=u&&\"false\"!==u,m=l(\"Collapse\"),d=l(\"Markdown\",!0),h=l(\"DeepLink\"),g=l(\"Link\");let f,y=e.getIn([\"tagDetails\",\"description\"],null),S=e.getIn([\"tagDetails\",\"externalDocs\",\"description\"]),v=e.getIn([\"tagDetails\",\"externalDocs\",\"url\"]);f=(0,$.Wl)(s)&&(0,$.Wl)(s.selectedServer)?(0,ze.mn)(v,c,{selectedServer:s.selectedServer()}):v;let E=[\"operations-tag\",t],x=r.isShown(E,\"full\"===i||\"list\"===i);return k().createElement(\"div\",{className:x?\"opblock-tag-section is-open\":\"opblock-tag-section\"},k().createElement(\"h3\",{onClick:()=>a.show(E,!x),className:y?\"opblock-tag\":\"opblock-tag no-desc\",id:j()(E).call(E,(e=>(0,$.J6)(e))).join(\"-\"),\"data-tag\":t,\"data-is-open\":x},k().createElement(h,{enabled:p,isShown:x,path:(0,$.oJ)(t),text:t}),y?k().createElement(\"small\",null,k().createElement(d,{source:y})):k().createElement(\"small\",null),f?k().createElement(\"div\",{className:\"info__externaldocs\"},k().createElement(\"small\",null,k().createElement(g,{href:(0,$.Nm)(f),onClick:e=>e.stopPropagation(),target:\"_blank\"},S||f))):null,k().createElement(\"button\",{\"aria-expanded\":x,className:\"expand-operation\",title:x?\"Collapse operation\":\"Expand operation\",onClick:()=>a.show(E,!x)},k().createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},k().createElement(\"use\",{href:x?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:x?\"#large-arrow-up\":\"#large-arrow-down\"})))),k().createElement(m,{isOpened:x},n))}}ie()(Be,\"defaultProps\",{tagObj:P().fromJS({}),tag:\"\"});class We extends O.PureComponent{render(){let{specPath:e,response:t,request:s,toggleShown:r,onTryoutClick:a,onResetClick:o,onCancelClick:l,onExecute:c,fn:i,getComponent:u,getConfigs:p,specActions:m,specSelectors:d,authActions:h,authSelectors:g,oas3Actions:f,oas3Selectors:y}=this.props,S=this.props.operation,{deprecated:v,isShown:E,path:x,method:w,op:C,tag:b,operationId:_,allowTryItOut:N,displayRequestDuration:O,tryItOutEnabled:A,executeInProgress:I}=S.toJS(),{description:P,externalDocs:q,schemes:R}=C;const T=q?(0,ze.mn)(q.url,d.url(),{selectedServer:y.selectedServer()}):\"\";let M=S.getIn([\"op\"]),D=M.get(\"responses\"),J=(0,$.gp)(M,[\"parameters\"]),K=d.operationScheme(x,w),L=[\"operations\",b,_],V=(0,$.nX)(M);const U=u(\"responses\"),F=u(\"parameters\"),z=u(\"execute\"),B=u(\"clear\"),W=u(\"Collapse\"),H=u(\"Markdown\",!0),G=u(\"schemes\"),Z=u(\"OperationServers\"),X=u(\"OperationExt\"),Y=u(\"OperationSummary\"),Q=u(\"Link\"),{showExtensions:ee}=p();if(D&&t&&t.size>0){let e=!D.get(String(t.get(\"status\")))&&!D.get(\"default\");t=t.set(\"notDocumented\",e)}let te=[x,w];const ne=d.validationErrors([x,w]);return k().createElement(\"div\",{className:v?\"opblock opblock-deprecated\":E?`opblock opblock-${w} is-open`:`opblock opblock-${w}`,id:(0,$.J6)(L.join(\"-\"))},k().createElement(Y,{operationProps:S,isShown:E,toggleShown:r,getComponent:u,authActions:h,authSelectors:g,specPath:e}),k().createElement(W,{isOpened:E},k().createElement(\"div\",{className:\"opblock-body\"},M&&M.size||null===M?null:k().createElement(\"img\",{height:\"32px\",width:\"32px\",src:n(2517),className:\"opblock-loading-animation\"}),v&&k().createElement(\"h4\",{className:\"opblock-title_normal\"},\" Warning: Deprecated\"),P&&k().createElement(\"div\",{className:\"opblock-description-wrapper\"},k().createElement(\"div\",{className:\"opblock-description\"},k().createElement(H,{source:P}))),T?k().createElement(\"div\",{className:\"opblock-external-docs-wrapper\"},k().createElement(\"h4\",{className:\"opblock-title_normal\"},\"Find more details\"),k().createElement(\"div\",{className:\"opblock-external-docs\"},q.description&&k().createElement(\"span\",{className:\"opblock-external-docs__description\"},k().createElement(H,{source:q.description})),k().createElement(Q,{target:\"_blank\",className:\"opblock-external-docs__link\",href:(0,$.Nm)(T)},T))):null,M&&M.size?k().createElement(F,{parameters:J,specPath:e.push(\"parameters\"),operation:M,onChangeKey:te,onTryoutClick:a,onResetClick:o,onCancelClick:l,tryItOutEnabled:A,allowTryItOut:N,fn:i,getComponent:u,specActions:m,specSelectors:d,pathMethod:[x,w],getConfigs:p,oas3Actions:f,oas3Selectors:y}):null,A?k().createElement(Z,{getComponent:u,path:x,method:w,operationServers:M.get(\"servers\"),pathServers:d.paths().getIn([x,\"servers\"]),getSelectedServer:y.selectedServer,setSelectedServer:f.setSelectedServer,setServerVariableValue:f.setServerVariableValue,getServerVariable:y.serverVariableValue,getEffectiveServerValue:y.serverEffectiveValue}):null,A&&N&&R&&R.size?k().createElement(\"div\",{className:\"opblock-schemes\"},k().createElement(G,{schemes:R,path:x,method:w,specActions:m,currentScheme:K})):null,!A||!N||ne.length<=0?null:k().createElement(\"div\",{className:\"validation-errors errors-wrapper\"},\"Please correct the following validation errors and try again.\",k().createElement(\"ul\",null,j()(ne).call(ne,((e,t)=>k().createElement(\"li\",{key:t},\" \",e,\" \"))))),k().createElement(\"div\",{className:A&&t&&N?\"btn-group\":\"execute-wrapper\"},A&&N?k().createElement(z,{operation:M,specActions:m,specSelectors:d,oas3Selectors:y,oas3Actions:f,path:x,method:w,onExecute:c,disabled:I}):null,A&&t&&N?k().createElement(B,{specActions:m,path:x,method:w}):null),I?k().createElement(\"div\",{className:\"loading-container\"},k().createElement(\"div\",{className:\"loading\"})):null,D?k().createElement(U,{responses:D,request:s,tryItOutResponse:t,getComponent:u,getConfigs:p,specSelectors:d,oas3Actions:f,oas3Selectors:y,specActions:m,produces:d.producesOptionsFor([x,w]),producesValue:d.currentProducesFor([x,w]),specPath:e.push(\"responses\"),path:x,method:w,displayRequestDuration:O,fn:i}):null,ee&&V.size?k().createElement(X,{extensions:V,getComponent:u}):null)))}}ie()(We,\"defaultProps\",{operation:null,response:null,request:null,specPath:(0,I.List)(),summary:\"\"});const He=require(\"lodash/toString\");var Ge=n.n(He);class Ze extends O.PureComponent{render(){let{isShown:e,toggleShown:t,getComponent:n,authActions:s,authSelectors:r,operationProps:a,specPath:o}=this.props,{summary:l,isAuthorized:c,method:i,op:u,showSummary:p,path:m,operationId:d,originalOperationId:h,displayOperationId:g}=a.toJS(),{summary:f}=u,y=a.get(\"security\");const S=n(\"authorizeOperationBtn\"),v=n(\"OperationSummaryMethod\"),E=n(\"OperationSummaryPath\"),x=n(\"JumpToPath\",!0),w=n(\"CopyToClipboardBtn\",!0),C=y&&!!y.count(),b=C&&1===y.size&&y.first().isEmpty(),j=!C||b;return k().createElement(\"div\",{className:`opblock-summary opblock-summary-${i}`},k().createElement(\"button\",{\"aria-label\":`${i} ${m.replace(/\\//g,\"​/\")}`,\"aria-expanded\":e,className:\"opblock-summary-control\",onClick:t},k().createElement(v,{method:i}),k().createElement(E,{getComponent:n,operationProps:a,specPath:o}),p?k().createElement(\"div\",{className:\"opblock-summary-description\"},Ge()(f||l)):null,g&&(h||d)?k().createElement(\"span\",{className:\"opblock-summary-operation-id\"},h||d):null,k().createElement(\"svg\",{className:\"arrow\",width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},k().createElement(\"use\",{href:e?\"#large-arrow-up\":\"#large-arrow-down\",xlinkHref:e?\"#large-arrow-up\":\"#large-arrow-down\"}))),j?null:k().createElement(S,{isAuthorized:c,onClick:()=>{const e=r.definitionsForRequirements(y);s.showDefinitions(e)}}),k().createElement(w,{textToCopy:`${o.get(1)}`}),k().createElement(x,{path:o}))}}ie()(Ze,\"defaultProps\",{operationProps:null,specPath:(0,I.List)(),summary:\"\"});class Xe extends O.PureComponent{render(){let{method:e}=this.props;return k().createElement(\"span\",{className:\"opblock-summary-method\"},e.toUpperCase())}}ie()(Xe,\"defaultProps\",{operationProps:null});const Ye=require(\"@babel/runtime-corejs3/core-js-stable/instance/splice\");var Qe=n.n(Ye);class et extends O.PureComponent{render(){let{getComponent:e,operationProps:t}=this.props,{deprecated:n,isShown:s,path:r,tag:a,operationId:o,isDeepLinkingEnabled:l}=t.toJS();const c=r.split(/(?=\\/)/g);for(let e=1;e<c.length;e+=2)Qe()(c).call(c,e,0,k().createElement(\"wbr\",{key:e}));const i=e(\"DeepLink\");return k().createElement(\"span\",{className:n?\"opblock-summary-path__deprecated\":\"opblock-summary-path\",\"data-path\":r},k().createElement(i,{enabled:l,isShown:s,path:(0,$.oJ)(`${a}/${o}`),text:c}))}}const tt=e=>{var t;let{extensions:n,getComponent:s}=e,r=s(\"OperationExtRow\");return k().createElement(\"div\",{className:\"opblock-section\"},k().createElement(\"div\",{className:\"opblock-section-header\"},k().createElement(\"h4\",null,\"Extensions\")),k().createElement(\"div\",{className:\"table-container\"},k().createElement(\"table\",null,k().createElement(\"thead\",null,k().createElement(\"tr\",null,k().createElement(\"td\",{className:\"col_header\"},\"Field\"),k().createElement(\"td\",{className:\"col_header\"},\"Value\"))),k().createElement(\"tbody\",null,j()(t=n.entrySeq()).call(t,(e=>{let[t,n]=e;return k().createElement(r,{key:`${t}-${n}`,xKey:t,xVal:n})}))))))},nt=e=>{let{xKey:t,xVal:n}=e;const s=n?n.toJS?n.toJS():n:null;return k().createElement(\"tr\",null,k().createElement(\"td\",null,t),k().createElement(\"td\",null,p()(s)))};var st=n(4235),rt=n.n(st),at=n(9003),ot=n.n(at),lt=n(6068),ct=n(1712),it=n.n(ct),ut=n(5716),pt=n.n(ut);const mt=require(\"js-file-download\");var dt=n.n(mt),ht=n(2807);const gt=e=>{let{value:t,fileName:n,className:s,downloadable:r,getConfigs:a,canCopy:o,language:c}=e;const i=pt()(a)?a():null,u=!1!==it()(i,\"syntaxHighlight\")&&it()(i,\"syntaxHighlight.activated\",!0),p=(0,O.useRef)(null);(0,O.useEffect)((()=>{var e;const t=l()(e=Ie()(p.current.childNodes)).call(e,(e=>!!e.nodeType&&e.classList.contains(\"microlight\")));return rt()(t).call(t,(e=>e.addEventListener(\"mousewheel\",m,{passive:!1}))),()=>{rt()(t).call(t,(e=>e.removeEventListener(\"mousewheel\",m)))}}),[t,s,c]);const m=e=>{const{target:t,deltaY:n}=e,{scrollHeight:s,offsetHeight:r,scrollTop:a}=t;s>r&&(0===a&&n<0||r+a>=s&&n>0)&&e.preventDefault()};return k().createElement(\"div\",{className:\"highlight-code\",ref:p},r?k().createElement(\"div\",{className:\"download-contents\",onClick:()=>{dt()(t,n)}},\"Download\"):null,o&&k().createElement(\"div\",{className:\"copy-to-clipboard\"},k().createElement(ht.CopyToClipboard,{text:t},k().createElement(\"button\",null))),u?k().createElement(lt.d3,{language:c,className:ot()(s,\"microlight\"),style:(0,lt.C2)(it()(i,\"syntaxHighlight.theme\",\"agate\"))},t):k().createElement(\"pre\",{className:ot()(s,\"microlight\")},t))};gt.defaultProps={fileName:\"response.txt\"};const ft=gt;class yt extends k().Component{constructor(){super(...arguments),ie()(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e))),ie()(this,\"onResponseContentTypeChange\",(e=>{let{controlsAcceptHeader:t,value:n}=e;const{oas3Actions:s,path:r,method:a}=this.props;t&&s.setResponseContentType({value:n,path:r,method:a})}))}render(){var e;let{responses:t,tryItOutResponse:n,getComponent:s,getConfigs:r,specSelectors:a,fn:o,producesValue:l,displayRequestDuration:c,specPath:i,path:u,method:p,oas3Selectors:m,oas3Actions:d}=this.props,h=(0,$.iQ)(t);const g=s(\"contentType\"),f=s(\"liveResponse\"),y=s(\"response\");let S=this.props.produces&&this.props.produces.size?this.props.produces:yt.defaultProps.produces;const v=a.isOAS3()?(0,$.QG)(t):null,E=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"_\";return e.replace(/[^\\w-]/g,t)}(`${p}${u}_responses`),x=`${E}_select`;return k().createElement(\"div\",{className:\"responses-wrapper\"},k().createElement(\"div\",{className:\"opblock-section-header\"},k().createElement(\"h4\",null,\"Responses\"),a.isOAS3()?null:k().createElement(\"label\",{htmlFor:x},k().createElement(\"span\",null,\"Response content type\"),k().createElement(g,{value:l,ariaControls:E,ariaLabel:\"Response content type\",className:\"execute-content-type\",contentTypes:S,controlId:x,onChange:this.onChangeProducesWrapper}))),k().createElement(\"div\",{className:\"responses-inner\"},n?k().createElement(\"div\",null,k().createElement(f,{response:n,getComponent:s,getConfigs:r,specSelectors:a,path:this.props.path,method:this.props.method,displayRequestDuration:c}),k().createElement(\"h4\",null,\"Responses\")):null,k().createElement(\"table\",{\"aria-live\":\"polite\",className:\"responses-table\",id:E,role:\"region\"},k().createElement(\"thead\",null,k().createElement(\"tr\",{className:\"responses-header\"},k().createElement(\"td\",{className:\"col_header response-col_status\"},\"Code\"),k().createElement(\"td\",{className:\"col_header response-col_description\"},\"Description\"),a.isOAS3()?k().createElement(\"td\",{className:\"col col_header response-col_links\"},\"Links\"):null)),k().createElement(\"tbody\",null,j()(e=t.entrySeq()).call(e,(e=>{let[t,c]=e,g=n&&n.get(\"status\")==t?\"response_current\":\"\";return k().createElement(y,{key:t,path:u,method:p,specPath:i.push(t),isDefault:h===t,fn:o,className:g,code:t,response:c,specSelectors:a,controlsAcceptHeader:c===v,onContentTypeChange:this.onResponseContentTypeChange,contentType:l,getConfigs:r,activeExamplesKey:m.activeExamplesMember(u,p,\"responses\",t),oas3Actions:d,getComponent:s})})).toArray()))))}}ie()(yt,\"defaultProps\",{tryItOutResponse:null,produces:(0,I.fromJS)([\"application/json\"]),displayRequestDuration:!1});const St=require(\"@babel/runtime-corejs3/core-js-stable/instance/values\");var vt=n.n(St),Et=n(2518);class xt extends k().Component{constructor(e,t){super(e,t),ie()(this,\"_onContentTypeChange\",(e=>{const{onContentTypeChange:t,controlsAcceptHeader:n}=this.props;this.setState({responseContentType:e}),t({value:e,controlsAcceptHeader:n})})),ie()(this,\"getTargetExamplesKey\",(()=>{const{response:e,contentType:t,activeExamplesKey:n}=this.props,s=this.state.responseContentType||t,r=e.getIn([\"content\",s],(0,I.Map)({})).get(\"examples\",null).keySeq().first();return n||r})),this.state={responseContentType:\"\"}}render(){var e,t;let{path:n,method:s,code:r,response:a,className:o,specPath:l,fn:c,getComponent:i,getConfigs:u,specSelectors:p,contentType:m,controlsAcceptHeader:d,oas3Actions:h}=this.props,{inferSchema:g,getSampleSchema:f}=c,y=p.isOAS3();const{showExtensions:S}=u();let v=S?(0,$.nX)(a):null,E=a.get(\"headers\"),x=a.get(\"links\");const w=i(\"ResponseExtension\"),C=i(\"headers\"),b=i(\"highlightCode\"),_=i(\"modelExample\"),N=i(\"Markdown\",!0),O=i(\"operationLink\"),A=i(\"contentType\"),P=i(\"ExamplesSelect\"),q=i(\"Example\");var R,T;const M=this.state.responseContentType||m,D=a.getIn([\"content\",M],(0,I.Map)({})),J=D.get(\"examples\",null);if(y){const e=D.get(\"schema\");R=e?g(e.toJS()):null,T=e?(0,I.List)([\"content\",this.state.responseContentType,\"schema\"]):l}else R=a.get(\"schema\"),T=a.has(\"schema\")?l.push(\"schema\"):l;let K,L,V=!1,U={includeReadOnly:!0};if(y){var F;if(L=null===(F=D.get(\"schema\"))||void 0===F?void 0:F.toJS(),J){const e=this.getTargetExamplesKey(),t=e=>e.get(\"value\");K=t(J.get(e,(0,I.Map)({}))),void 0===K&&(K=t(vt()(J).call(J).next().value)),V=!0}else void 0!==D.get(\"example\")&&(K=D.get(\"example\"),V=!0)}else{L=R,U={...U,includeWriteOnly:!0};const e=a.getIn([\"examples\",M]);e&&(K=e,V=!0)}let z=((e,t,n)=>{if(null!=e){let s=null;return(0,Et.O)(e)&&(s=\"json\"),k().createElement(\"div\",null,k().createElement(t,{className:\"example\",getConfigs:n,language:s,value:(0,$.Pz)(e)}))}return null})(f(L,M,U,V?K:void 0),b,u);return k().createElement(\"tr\",{className:\"response \"+(o||\"\"),\"data-code\":r},k().createElement(\"td\",{className:\"response-col_status\"},r),k().createElement(\"td\",{className:\"response-col_description\"},k().createElement(\"div\",{className:\"response-col_description__inner\"},k().createElement(N,{source:a.get(\"description\")})),S&&v.size?j()(e=v.entrySeq()).call(e,(e=>{let[t,n]=e;return k().createElement(w,{key:`${t}-${n}`,xKey:t,xVal:n})})):null,y&&a.get(\"content\")?k().createElement(\"section\",{className:\"response-controls\"},k().createElement(\"div\",{className:ot()(\"response-control-media-type\",{\"response-control-media-type--accept-controller\":d})},k().createElement(\"small\",{className:\"response-control-media-type__title\"},\"Media type\"),k().createElement(A,{value:this.state.responseContentType,contentTypes:a.get(\"content\")?a.get(\"content\").keySeq():(0,I.Seq)(),onChange:this._onContentTypeChange,ariaLabel:\"Media Type\"}),d?k().createElement(\"small\",{className:\"response-control-media-type__accept-message\"},\"Controls \",k().createElement(\"code\",null,\"Accept\"),\" header.\"):null),J?k().createElement(\"div\",{className:\"response-control-examples\"},k().createElement(\"small\",{className:\"response-control-examples__title\"},\"Examples\"),k().createElement(P,{examples:J,currentExampleKey:this.getTargetExamplesKey(),onSelect:e=>h.setActiveExamplesMember({name:e,pathMethod:[n,s],contextType:\"responses\",contextName:r}),showLabels:!1})):null):null,z||R?k().createElement(_,{specPath:T,getComponent:i,getConfigs:u,specSelectors:p,schema:(0,$.oG)(R),example:z,includeReadOnly:!0}):null,y&&J?k().createElement(q,{example:J.get(this.getTargetExamplesKey(),(0,I.Map)({})),getComponent:i,getConfigs:u,omitValue:!0}):null,E?k().createElement(C,{headers:E,getComponent:i}):null),y?k().createElement(\"td\",{className:\"response-col_links\"},x?j()(t=x.toSeq().entrySeq()).call(t,(e=>{let[t,n]=e;return k().createElement(O,{key:t,name:t,link:n,getComponent:i})})):k().createElement(\"i\",null,\"No links\")):null)}}ie()(xt,\"defaultProps\",{response:(0,I.fromJS)({}),onContentTypeChange:()=>{}});const wt=e=>{let{xKey:t,xVal:n}=e;return k().createElement(\"div\",{className:\"response__extension\"},t,\": \",String(n))};var Ct=n(9478),bt=n.n(Ct);const jt=require(\"xml-but-prettier\");var _t=n.n(jt);const Nt=require(\"lodash/toLower\");var Ot=n.n(Nt);class kt extends k().PureComponent{constructor(){super(...arguments),ie()(this,\"state\",{parsedContent:null}),ie()(this,\"updateParsedContent\",(e=>{const{content:t}=this.props;if(e!==t)if(t&&t instanceof Blob){var n=new FileReader;n.onload=()=>{this.setState({parsedContent:n.result})},n.readAsText(t)}else this.setState({parsedContent:t.toString()})}))}componentDidMount(){this.updateParsedContent(null)}componentDidUpdate(e){this.updateParsedContent(e.content)}render(){let{content:e,contentType:t,url:n,headers:s={},getConfigs:r,getComponent:o}=this.props;const{parsedContent:l}=this.state,c=o(\"highlightCode\"),i=\"response_\"+(new Date).getTime();let u,m;if(n=n||\"\",(/^application\\/octet-stream/i.test(t)||s[\"Content-Disposition\"]&&/attachment/i.test(s[\"Content-Disposition\"])||s[\"content-disposition\"]&&/attachment/i.test(s[\"content-disposition\"])||s[\"Content-Description\"]&&/File Transfer/i.test(s[\"Content-Description\"])||s[\"content-description\"]&&/File Transfer/i.test(s[\"content-description\"]))&&e.size>0)if(\"Blob\"in window){let r=t||\"text/html\",o=e instanceof Blob?e:new Blob([e],{type:r}),l=bt().createObjectURL(o),c=[r,n.substr(a()(n).call(n,\"/\")+1),l].join(\":\"),i=s[\"content-disposition\"]||s[\"Content-Disposition\"];if(void 0!==i){let e=(0,$.DR)(i);null!==e&&(c=e)}m=J.Z.navigator&&J.Z.navigator.msSaveOrOpenBlob?k().createElement(\"div\",null,k().createElement(\"a\",{href:l,onClick:()=>J.Z.navigator.msSaveOrOpenBlob(o,c)},\"Download file\")):k().createElement(\"div\",null,k().createElement(\"a\",{href:l,download:c},\"Download file\"))}else m=k().createElement(\"pre\",{className:\"microlight\"},\"Download headers detected but your browser does not support downloading binary via XHR (Blob).\");else if(/json/i.test(t)){let t=null;(0,Et.O)(e)&&(t=\"json\");try{u=p()(JSON.parse(e),null,\"  \")}catch(t){u=\"can't parse JSON.  Raw result:\\n\\n\"+e}m=k().createElement(c,{language:t,downloadable:!0,fileName:`${i}.json`,value:u,getConfigs:r,canCopy:!0})}else/xml/i.test(t)?(u=_t()(e,{textNodesOnSameLine:!0,indentor:\"  \"}),m=k().createElement(c,{downloadable:!0,fileName:`${i}.xml`,value:u,getConfigs:r,canCopy:!0})):m=\"text/html\"===Ot()(t)||/text\\/plain/.test(t)?k().createElement(c,{downloadable:!0,fileName:`${i}.html`,value:e,getConfigs:r,canCopy:!0}):\"text/csv\"===Ot()(t)||/text\\/csv/.test(t)?k().createElement(c,{downloadable:!0,fileName:`${i}.csv`,value:e,getConfigs:r,canCopy:!0}):/^image\\//i.test(t)?Te()(t).call(t,\"svg\")?k().createElement(\"div\",null,\" \",e,\" \"):k().createElement(\"img\",{src:bt().createObjectURL(e)}):/^audio\\//i.test(t)?k().createElement(\"pre\",{className:\"microlight\"},k().createElement(\"audio\",{controls:!0,key:n},k().createElement(\"source\",{src:n,type:t}))):\"string\"==typeof e?k().createElement(c,{downloadable:!0,fileName:`${i}.txt`,value:e,getConfigs:r,canCopy:!0}):e.size>0?l?k().createElement(\"div\",null,k().createElement(\"p\",{className:\"i\"},\"Unrecognized response type; displaying content as text.\"),k().createElement(c,{downloadable:!0,fileName:`${i}.txt`,value:l,getConfigs:r,canCopy:!0})):k().createElement(\"p\",{className:\"i\"},\"Unrecognized response type; unable to display.\"):null;return m?k().createElement(\"div\",null,k().createElement(\"h5\",null,\"Response body\"),m):null}}var At=n(9968),It=n.n(At);class Pt extends O.Component{constructor(e){super(e),ie()(this,\"onChange\",((e,t,n)=>{let{specActions:{changeParamByIdentity:s},onChangeKey:r}=this.props;s(r,e,t,n)})),ie()(this,\"onChangeConsumesWrapper\",(e=>{let{specActions:{changeConsumesValue:t},onChangeKey:n}=this.props;t(n,e)})),ie()(this,\"toggleTab\",(e=>\"parameters\"===e?this.setState({parametersVisible:!0,callbackVisible:!1}):\"callbacks\"===e?this.setState({callbackVisible:!0,parametersVisible:!1}):void 0)),ie()(this,\"onChangeMediaType\",(e=>{let{value:t,pathMethod:n}=e,{specActions:s,oas3Selectors:r,oas3Actions:a}=this.props;const o=r.hasUserEditedBody(...n),l=r.shouldRetainRequestBodyValue(...n);a.setRequestContentType({value:t,pathMethod:n}),a.initRequestBodyValidateError({pathMethod:n}),o||(l||a.setRequestBodyValue({value:void 0,pathMethod:n}),s.clearResponse(...n),s.clearRequest(...n),s.clearValidateParams(n))})),this.state={callbackVisible:!1,parametersVisible:!0}}render(){var e;let{onTryoutClick:t,onResetClick:n,parameters:s,allowTryItOut:r,tryItOutEnabled:a,specPath:o,fn:l,getComponent:c,getConfigs:i,specSelectors:u,specActions:p,pathMethod:m,oas3Actions:d,oas3Selectors:h,operation:g}=this.props;const f=c(\"parameterRow\"),y=c(\"TryItOutButton\"),S=c(\"contentType\"),E=c(\"Callbacks\",!0),x=c(\"RequestBody\",!0),w=a&&r,b=u.isOAS3(),_=g.get(\"requestBody\"),O=C()(e=It()(C()(s).call(s,((e,t)=>{const n=t.get(\"in\");return e[n]??(e[n]=[]),e[n].push(t),e}),{}))).call(e,((e,t)=>N()(e).call(e,t)),[]);return k().createElement(\"div\",{className:\"opblock-section\"},k().createElement(\"div\",{className:\"opblock-section-header\"},b?k().createElement(\"div\",{className:\"tab-header\"},k().createElement(\"div\",{onClick:()=>this.toggleTab(\"parameters\"),className:`tab-item ${this.state.parametersVisible&&\"active\"}`},k().createElement(\"h4\",{className:\"opblock-title\"},k().createElement(\"span\",null,\"Parameters\"))),g.get(\"callbacks\")?k().createElement(\"div\",{onClick:()=>this.toggleTab(\"callbacks\"),className:`tab-item ${this.state.callbackVisible&&\"active\"}`},k().createElement(\"h4\",{className:\"opblock-title\"},k().createElement(\"span\",null,\"Callbacks\"))):null):k().createElement(\"div\",{className:\"tab-header\"},k().createElement(\"h4\",{className:\"opblock-title\"},\"Parameters\")),r?k().createElement(y,{isOAS3:u.isOAS3(),hasUserEditedBody:h.hasUserEditedBody(...m),enabled:a,onCancelClick:this.props.onCancelClick,onTryoutClick:t,onResetClick:()=>n(m)}):null),this.state.parametersVisible?k().createElement(\"div\",{className:\"parameters-container\"},O.length?k().createElement(\"div\",{className:\"table-container\"},k().createElement(\"table\",{className:\"parameters\"},k().createElement(\"thead\",null,k().createElement(\"tr\",null,k().createElement(\"th\",{className:\"col_header parameters-col_name\"},\"Name\"),k().createElement(\"th\",{className:\"col_header parameters-col_description\"},\"Description\"))),k().createElement(\"tbody\",null,j()(O).call(O,((e,t)=>k().createElement(f,{fn:l,specPath:o.push(t.toString()),getComponent:c,getConfigs:i,rawParam:e,param:u.parameterWithMetaByIdentity(m,e),key:`${e.get(\"in\")}.${e.get(\"name\")}`,onChange:this.onChange,onChangeConsumes:this.onChangeConsumesWrapper,specSelectors:u,specActions:p,oas3Actions:d,oas3Selectors:h,pathMethod:m,isExecute:w})))))):k().createElement(\"div\",{className:\"opblock-description-wrapper\"},k().createElement(\"p\",null,\"No parameters\"))):null,this.state.callbackVisible?k().createElement(\"div\",{className:\"callbacks-container opblock-description-wrapper\"},k().createElement(E,{callbacks:(0,I.Map)(g.get(\"callbacks\")),specPath:v()(o).call(o,0,-1).push(\"callbacks\")})):null,b&&_&&this.state.parametersVisible&&k().createElement(\"div\",{className:\"opblock-section opblock-section-request-body\"},k().createElement(\"div\",{className:\"opblock-section-header\"},k().createElement(\"h4\",{className:`opblock-title parameter__name ${_.get(\"required\")&&\"required\"}`},\"Request body\"),k().createElement(\"label\",null,k().createElement(S,{value:h.requestContentType(...m),contentTypes:_.get(\"content\",(0,I.List)()).keySeq(),onChange:e=>{this.onChangeMediaType({value:e,pathMethod:m})},className:\"body-param-content-type\",ariaLabel:\"Request content type\"}))),k().createElement(\"div\",{className:\"opblock-description-wrapper\"},k().createElement(x,{setRetainRequestBodyValueFlag:e=>d.setRetainRequestBodyValueFlag({value:e,pathMethod:m}),userHasEditedBody:h.hasUserEditedBody(...m),specPath:v()(o).call(o,0,-1).push(\"requestBody\"),requestBody:_,requestBodyValue:h.requestBodyValue(...m),requestBodyInclusionSetting:h.requestBodyInclusionSetting(...m),requestBodyErrors:h.requestBodyErrors(...m),isExecute:w,getConfigs:i,activeExamplesKey:h.activeExamplesMember(...m,\"requestBody\",\"requestBody\"),updateActiveExamplesKey:e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"requestBody\",contextName:\"requestBody\"})},onChange:(e,t)=>{if(t){const n=h.requestBodyValue(...m),s=I.Map.isMap(n)?n:(0,I.Map)();return d.setRequestBodyValue({pathMethod:m,value:s.setIn(t,e)})}d.setRequestBodyValue({value:e,pathMethod:m})},onChangeIncludeEmpty:(e,t)=>{d.setRequestBodyInclusion({pathMethod:m,value:t,name:e})},contentType:h.requestContentType(...m)}))))}}ie()(Pt,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,tryItOutEnabled:!1,allowTryItOut:!0,onChangeKey:[],specPath:[]});const qt=e=>{let{xKey:t,xVal:n}=e;return k().createElement(\"div\",{className:\"parameter__extension\"},t,\": \",String(n))},Rt={onChange:()=>{},isIncludedOptions:{}};class Tt extends O.Component{constructor(){super(...arguments),ie()(this,\"onCheckboxChange\",(e=>{const{onChange:t}=this.props;t(e.target.checked)}))}componentDidMount(){const{isIncludedOptions:e,onChange:t}=this.props,{shouldDispatchInit:n,defaultValue:s}=e;n&&t(s)}render(){let{isIncluded:e,isDisabled:t}=this.props;return k().createElement(\"div\",null,k().createElement(\"label\",{className:ot()(\"parameter__empty_value_toggle\",{disabled:t})},k().createElement(\"input\",{type:\"checkbox\",disabled:t,checked:!t&&e,onChange:this.onCheckboxChange}),\"Send empty value\"))}}ie()(Tt,\"defaultProps\",Rt);var Mt=n(9069);class Dt extends O.Component{constructor(e,t){var n;super(e,t),n=this,ie()(this,\"onChangeWrapper\",(function(e){let t,s=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{onChange:r,rawParam:a}=n.props;return t=\"\"===e||e&&0===e.size?null:e,r(a,t,s)})),ie()(this,\"_onExampleSelect\",(e=>{this.props.oas3Actions.setActiveExamplesMember({name:e,pathMethod:this.props.pathMethod,contextType:\"parameters\",contextName:this.getParamKey()})})),ie()(this,\"onChangeIncludeEmpty\",(e=>{let{specActions:t,param:n,pathMethod:s}=this.props;const r=n.get(\"name\"),a=n.get(\"in\");return t.updateEmptyParamInclusion(s,r,a,e)})),ie()(this,\"setDefaultValue\",(()=>{let{specSelectors:e,pathMethod:t,rawParam:n,oas3Selectors:s,fn:r}=this.props;const a=e.parameterWithMetaByIdentity(t,n)||(0,I.Map)(),{schema:o}=(0,Mt.Z)(a,{isOAS3:e.isOAS3()}),l=a.get(\"content\",(0,I.Map)()).keySeq().first(),c=o?r.getSampleSchema(o.toJS(),l,{includeWriteOnly:!0}):null;if(a&&void 0===a.get(\"value\")&&\"body\"!==a.get(\"in\")){let n;if(e.isSwagger2())n=void 0!==a.get(\"x-example\")?a.get(\"x-example\"):void 0!==a.getIn([\"schema\",\"example\"])?a.getIn([\"schema\",\"example\"]):o&&o.getIn([\"default\"]);else if(e.isOAS3()){const e=s.activeExamplesMember(...t,\"parameters\",this.getParamKey());n=void 0!==a.getIn([\"examples\",e,\"value\"])?a.getIn([\"examples\",e,\"value\"]):void 0!==a.getIn([\"content\",l,\"example\"])?a.getIn([\"content\",l,\"example\"]):void 0!==a.get(\"example\")?a.get(\"example\"):void 0!==(o&&o.get(\"example\"))?o&&o.get(\"example\"):void 0!==(o&&o.get(\"default\"))?o&&o.get(\"default\"):a.get(\"default\")}void 0===n||I.List.isList(n)||(n=(0,$.Pz)(n)),void 0!==n?this.onChangeWrapper(n):o&&\"object\"===o.get(\"type\")&&c&&!a.get(\"examples\")&&this.onChangeWrapper(I.List.isList(c)?c:(0,$.Pz)(c))}})),this.setDefaultValue()}UNSAFE_componentWillReceiveProps(e){let t,{specSelectors:n,pathMethod:s,rawParam:r}=e,a=n.isOAS3(),o=n.parameterWithMetaByIdentity(s,r)||new I.Map;if(o=o.isEmpty()?r:o,a){let{schema:e}=(0,Mt.Z)(o,{isOAS3:a});t=e?e.get(\"enum\"):void 0}else t=o?o.get(\"enum\"):void 0;let l,c=o?o.get(\"value\"):void 0;void 0!==c?l=c:r.get(\"required\")&&t&&t.size&&(l=t.first()),void 0!==l&&l!==c&&this.onChangeWrapper((0,$.D$)(l)),this.setDefaultValue()}getParamKey(){const{param:e}=this.props;return e?`${e.get(\"name\")}-${e.get(\"in\")}`:null}render(){var e,t;let{param:n,rawParam:s,getComponent:r,getConfigs:a,isExecute:o,fn:l,onChangeConsumes:c,specSelectors:i,pathMethod:u,specPath:p,oas3Selectors:m}=this.props,d=i.isOAS3();const{showExtensions:h,showCommonExtensions:g}=a();if(n||(n=s),!s)return null;const f=r(\"JsonSchemaForm\"),y=r(\"ParamBody\");let S=n.get(\"in\"),v=\"body\"!==S?null:k().createElement(y,{getComponent:r,getConfigs:a,fn:l,param:n,consumes:i.consumesOptionsFor(u),consumesValue:i.contentTypeValues(u).get(\"requestContentType\"),onChange:this.onChangeWrapper,onChangeConsumes:c,isExecute:o,specSelectors:i,pathMethod:u});const E=r(\"modelExample\"),x=r(\"Markdown\",!0),w=r(\"ParameterExt\"),C=r(\"ParameterIncludeEmpty\"),b=r(\"ExamplesSelectValueRetainer\"),_=r(\"Example\");let N,O,A,P,{schema:q}=(0,Mt.Z)(n,{isOAS3:d}),R=i.parameterWithMetaByIdentity(u,s)||(0,I.Map)(),T=q?q.get(\"format\"):null,M=q?q.get(\"type\"):null,D=q?q.getIn([\"items\",\"type\"]):null,K=\"formData\"===S,L=\"FormData\"in J.Z,V=n.get(\"required\"),U=R?R.get(\"value\"):\"\",F=g?(0,$.po)(q):null,z=h?(0,$.nX)(n):null,B=!1;return void 0!==n&&q&&(N=q.get(\"items\")),void 0!==N?(O=N.get(\"enum\"),A=N.get(\"default\")):q&&(O=q.get(\"enum\")),O&&O.size&&O.size>0&&(B=!0),void 0!==n&&(q&&(A=q.get(\"default\")),void 0===A&&(A=n.get(\"default\")),P=n.get(\"example\"),void 0===P&&(P=n.get(\"x-example\"))),k().createElement(\"tr\",{\"data-param-name\":n.get(\"name\"),\"data-param-in\":n.get(\"in\")},k().createElement(\"td\",{className:\"parameters-col_name\"},k().createElement(\"div\",{className:V?\"parameter__name required\":\"parameter__name\"},n.get(\"name\"),V?k().createElement(\"span\",null,\" *\"):null),k().createElement(\"div\",{className:\"parameter__type\"},M,D&&`[${D}]`,T&&k().createElement(\"span\",{className:\"prop-format\"},\"($\",T,\")\")),k().createElement(\"div\",{className:\"parameter__deprecated\"},d&&n.get(\"deprecated\")?\"deprecated\":null),k().createElement(\"div\",{className:\"parameter__in\"},\"(\",n.get(\"in\"),\")\"),g&&F.size?j()(e=F.entrySeq()).call(e,(e=>{let[t,n]=e;return k().createElement(w,{key:`${t}-${n}`,xKey:t,xVal:n})})):null,h&&z.size?j()(t=z.entrySeq()).call(t,(e=>{let[t,n]=e;return k().createElement(w,{key:`${t}-${n}`,xKey:t,xVal:n})})):null),k().createElement(\"td\",{className:\"parameters-col_description\"},n.get(\"description\")?k().createElement(x,{source:n.get(\"description\")}):null,!v&&o||!B?null:k().createElement(x,{className:\"parameter__enum\",source:\"<i>Available values</i> : \"+j()(O).call(O,(function(e){return e})).toArray().join(\", \")}),!v&&o||void 0===A?null:k().createElement(x,{className:\"parameter__default\",source:\"<i>Default value</i> : \"+A}),!v&&o||void 0===P?null:k().createElement(x,{source:\"<i>Example</i> : \"+P}),K&&!L&&k().createElement(\"div\",null,\"Error: your browser does not support FormData\"),d&&n.get(\"examples\")?k().createElement(\"section\",{className:\"parameter-controls\"},k().createElement(b,{examples:n.get(\"examples\"),onSelect:this._onExampleSelect,updateValue:this.onChangeWrapper,getComponent:r,defaultToFirstExample:!0,currentKey:m.activeExamplesMember(...u,\"parameters\",this.getParamKey()),currentUserInputValue:U})):null,v?null:k().createElement(f,{fn:l,getComponent:r,value:U,required:V,disabled:!o,description:n.get(\"name\"),onChange:this.onChangeWrapper,errors:R.get(\"errors\"),schema:q}),v&&q?k().createElement(E,{getComponent:r,specPath:p.push(\"schema\"),getConfigs:a,isExecute:o,specSelectors:i,schema:q,example:v,includeWriteOnly:!0}):null,!v&&o&&n.get(\"allowEmptyValue\")?k().createElement(C,{onChange:this.onChangeIncludeEmpty,isIncluded:i.parameterInclusionSettingFor(u,n.get(\"name\"),n.get(\"in\")),isDisabled:!(0,$.O2)(U)}):null,d&&n.get(\"examples\")?k().createElement(_,{example:n.getIn([\"examples\",m.activeExamplesMember(...u,\"parameters\",this.getParamKey())]),getComponent:r,getConfigs:a}):null))}}var Jt=n(9300),$t=n.n(Jt);class Kt extends O.Component{constructor(){super(...arguments),ie()(this,\"handleValidateParameters\",(()=>{let{specSelectors:e,specActions:t,path:n,method:s}=this.props;return t.validateParams([n,s]),e.validateBeforeExecute([n,s])})),ie()(this,\"handleValidateRequestBody\",(()=>{let{path:e,method:t,specSelectors:n,oas3Selectors:s,oas3Actions:r}=this.props,a={missingBodyValue:!1,missingRequiredKeys:[]};r.clearRequestBodyValidateError({path:e,method:t});let o=n.getOAS3RequiredRequestBodyContentType([e,t]),l=s.requestBodyValue(e,t),c=s.validateBeforeExecute([e,t]),i=s.requestContentType(e,t);if(!c)return a.missingBodyValue=!0,r.setRequestBodyValidateError({path:e,method:t,validationErrors:a}),!1;if(!o)return!0;let u=s.validateShallowRequired({oas3RequiredRequestBodyContentType:o,oas3RequestContentType:i,oas3RequestBodyValue:l});return!u||u.length<1||(rt()(u).call(u,(e=>{a.missingRequiredKeys.push(e)})),r.setRequestBodyValidateError({path:e,method:t,validationErrors:a}),!1)})),ie()(this,\"handleValidationResultPass\",(()=>{let{specActions:e,operation:t,path:n,method:s}=this.props;this.props.onExecute&&this.props.onExecute(),e.execute({operation:t,path:n,method:s})})),ie()(this,\"handleValidationResultFail\",(()=>{let{specActions:e,path:t,method:n}=this.props;e.clearValidateParams([t,n]),$t()((()=>{e.validateParams([t,n])}),40)})),ie()(this,\"handleValidationResult\",(e=>{e?this.handleValidationResultPass():this.handleValidationResultFail()})),ie()(this,\"onClick\",(()=>{let e=this.handleValidateParameters(),t=this.handleValidateRequestBody(),n=e&&t;this.handleValidationResult(n)})),ie()(this,\"onChangeProducesWrapper\",(e=>this.props.specActions.changeProducesValue([this.props.path,this.props.method],e)))}render(){const{disabled:e}=this.props;return k().createElement(\"button\",{className:\"btn execute opblock-control__btn\",onClick:this.onClick,disabled:e},\"Execute\")}}class Lt extends k().Component{render(){var e;let{headers:t,getComponent:n}=this.props;const s=n(\"Property\"),r=n(\"Markdown\",!0);return t&&t.size?k().createElement(\"div\",{className:\"headers-wrapper\"},k().createElement(\"h4\",{className:\"headers__title\"},\"Headers:\"),k().createElement(\"table\",{className:\"headers\"},k().createElement(\"thead\",null,k().createElement(\"tr\",{className:\"header-row\"},k().createElement(\"th\",{className:\"header-col\"},\"Name\"),k().createElement(\"th\",{className:\"header-col\"},\"Description\"),k().createElement(\"th\",{className:\"header-col\"},\"Type\"))),k().createElement(\"tbody\",null,j()(e=t.entrySeq()).call(e,(e=>{let[t,n]=e;if(!P().Map.isMap(n))return null;const a=n.get(\"description\"),o=n.getIn([\"schema\"])?n.getIn([\"schema\",\"type\"]):n.getIn([\"type\"]),l=n.getIn([\"schema\",\"example\"]);return k().createElement(\"tr\",{key:t},k().createElement(\"td\",{className:\"header-col\"},t),k().createElement(\"td\",{className:\"header-col\"},a?k().createElement(r,{source:a}):null),k().createElement(\"td\",{className:\"header-col\"},o,\" \",l?k().createElement(s,{propKey:\"Example\",propVal:l,propClass:\"header-example\"}):null))})).toArray()))):null}}class Vt extends k().Component{render(){let{editorActions:e,errSelectors:t,layoutSelectors:n,layoutActions:s,getComponent:r}=this.props;const a=r(\"Collapse\");if(e&&e.jumpToLine)var o=e.jumpToLine;let c=t.allErrors(),i=l()(c).call(c,(e=>\"thrown\"===e.get(\"type\")||\"error\"===e.get(\"level\")));if(!i||i.count()<1)return null;let u=n.isShown([\"errorPane\"],!0),p=i.sortBy((e=>e.get(\"line\")));return k().createElement(\"pre\",{className:\"errors-wrapper\"},k().createElement(\"hgroup\",{className:\"error\"},k().createElement(\"h4\",{className:\"errors__title\"},\"Errors\"),k().createElement(\"button\",{className:\"btn errors__clear-btn\",onClick:()=>s.show([\"errorPane\"],!u)},u?\"Hide\":\"Show\")),k().createElement(a,{isOpened:u,animated:!0},k().createElement(\"div\",{className:\"errors\"},j()(p).call(p,((e,t)=>{let n=e.get(\"type\");return\"thrown\"===n||\"auth\"===n?k().createElement(Ut,{key:t,error:e.get(\"error\")||e,jumpToLine:o}):\"spec\"===n?k().createElement(Ft,{key:t,error:e,jumpToLine:o}):void 0})))))}}const Ut=e=>{let{error:t,jumpToLine:n}=e;if(!t)return null;let s=t.get(\"line\");return k().createElement(\"div\",{className:\"error-wrapper\"},t?k().createElement(\"div\",null,k().createElement(\"h4\",null,t.get(\"source\")&&t.get(\"level\")?zt(t.get(\"source\"))+\" \"+t.get(\"level\"):\"\",t.get(\"path\")?k().createElement(\"small\",null,\" at \",t.get(\"path\")):null),k().createElement(\"span\",{className:\"message thrown\"},t.get(\"message\")),k().createElement(\"div\",{className:\"error-line\"},s&&n?k().createElement(\"a\",{onClick:g()(n).call(n,null,s)},\"Jump to line \",s):null)):null)},Ft=e=>{let{error:t,jumpToLine:n}=e,s=null;return t.get(\"path\")?s=I.List.isList(t.get(\"path\"))?k().createElement(\"small\",null,\"at \",t.get(\"path\").join(\".\")):k().createElement(\"small\",null,\"at \",t.get(\"path\")):t.get(\"line\")&&!n&&(s=k().createElement(\"small\",null,\"on line \",t.get(\"line\"))),k().createElement(\"div\",{className:\"error-wrapper\"},t?k().createElement(\"div\",null,k().createElement(\"h4\",null,zt(t.get(\"source\"))+\" \"+t.get(\"level\"),\" \",s),k().createElement(\"span\",{className:\"message\"},t.get(\"message\")),k().createElement(\"div\",{className:\"error-line\"},n?k().createElement(\"a\",{onClick:g()(n).call(n,null,t.get(\"line\"))},\"Jump to line \",t.get(\"line\")):null)):null)};function zt(e){var t;return j()(t=(e||\"\").split(\" \")).call(t,(e=>e[0].toUpperCase()+v()(e).call(e,1))).join(\" \")}Ut.defaultProps={jumpToLine:null};class Bt extends k().Component{constructor(){super(...arguments),ie()(this,\"onChangeWrapper\",(e=>this.props.onChange(e.target.value)))}componentDidMount(){this.props.contentTypes&&this.props.onChange(this.props.contentTypes.first())}UNSAFE_componentWillReceiveProps(e){var t;e.contentTypes&&e.contentTypes.size&&(Te()(t=e.contentTypes).call(t,e.value)||e.onChange(e.contentTypes.first()))}render(){let{ariaControls:e,ariaLabel:t,className:n,contentTypes:s,controlId:r,value:a}=this.props;return s&&s.size?k().createElement(\"div\",{className:\"content-type-wrapper \"+(n||\"\")},k().createElement(\"select\",{\"aria-controls\":e,\"aria-label\":t,className:\"content-type\",id:r,onChange:this.onChangeWrapper,value:a||\"\"},j()(s).call(s,(e=>k().createElement(\"option\",{key:e,value:e},e))).toArray())):null}}ie()(Bt,\"defaultProps\",{onChange:()=>{},value:null,contentTypes:(0,I.fromJS)([\"application/json\"])});var Wt=n(4250),Ht=n.n(Wt),Gt=n(7390),Zt=n.n(Gt);function Xt(){for(var e,t=arguments.length,n=new Array(t),s=0;s<t;s++)n[s]=arguments[s];return Zt()(e=l()(n).call(n,(e=>!!e)).join(\" \")).call(e)}class Yt extends k().Component{render(){let{fullscreen:e,full:t,...n}=this.props;if(e)return k().createElement(\"section\",n);let s=\"swagger-container\"+(t?\"-full\":\"\");return k().createElement(\"section\",Ht()({},n,{className:Xt(n.className,s)}))}}const Qt={mobile:\"\",tablet:\"-tablet\",desktop:\"-desktop\",large:\"-hd\"};class en extends k().Component{render(){const{hide:e,keepContents:t,mobile:n,tablet:s,desktop:r,large:a,...o}=this.props;if(e&&!t)return k().createElement(\"span\",null);let l=[];for(let e in Qt){if(!Object.prototype.hasOwnProperty.call(Qt,e))continue;let t=Qt[e];if(e in this.props){let n=this.props[e];if(n<1){l.push(\"none\"+t);continue}l.push(\"block\"+t),l.push(\"col-\"+n+t)}}e&&l.push(\"hidden\");let c=Xt(o.className,...l);return k().createElement(\"section\",Ht()({},o,{className:c}))}}class tn extends k().Component{render(){return k().createElement(\"div\",Ht()({},this.props,{className:Xt(this.props.className,\"wrapper\")}))}}class nn extends k().Component{render(){return k().createElement(\"button\",Ht()({},this.props,{className:Xt(this.props.className,\"button\")}))}}ie()(nn,\"defaultProps\",{className:\"\"});const sn=e=>k().createElement(\"textarea\",e),rn=e=>k().createElement(\"input\",e);class an extends k().Component{constructor(e,t){let n;super(e,t),ie()(this,\"onChange\",(e=>{let t,{onChange:n,multiple:s}=this.props,r=v()([]).call(e.target.options);var a;s?t=j()(a=l()(r).call(r,(function(e){return e.selected}))).call(a,(function(e){return e.value})):t=e.target.value;this.setState({value:t}),n&&n(t)})),n=e.value?e.value:e.multiple?[\"\"]:\"\",this.state={value:n}}UNSAFE_componentWillReceiveProps(e){e.value!==this.props.value&&this.setState({value:e.value})}render(){var e,t;let{allowedValues:n,multiple:s,allowEmptyValue:r,disabled:a}=this.props,o=(null===(e=this.state.value)||void 0===e||null===(t=e.toJS)||void 0===t?void 0:t.call(e))||this.state.value;return k().createElement(\"select\",{className:this.props.className,multiple:s,value:o,onChange:this.onChange,disabled:a},r?k().createElement(\"option\",{value:\"\"},\"--\"):null,j()(n).call(n,(function(e,t){return k().createElement(\"option\",{key:t,value:String(e)},String(e))})))}}ie()(an,\"defaultProps\",{multiple:!1,allowEmptyValue:!0});class on extends k().Component{render(){return k().createElement(\"a\",Ht()({},this.props,{rel:\"noopener noreferrer\",className:Xt(this.props.className,\"link\")}))}}const ln=e=>{let{children:t}=e;return k().createElement(\"div\",{className:\"no-margin\"},\" \",t,\" \")};class cn extends k().Component{renderNotAnimated(){return this.props.isOpened?k().createElement(ln,null,this.props.children):k().createElement(\"noscript\",null)}render(){let{animated:e,isOpened:t,children:n}=this.props;return e?(n=t?n:null,k().createElement(ln,null,n)):this.renderNotAnimated()}}ie()(cn,\"defaultProps\",{isOpened:!1,animated:!1});class un extends k().Component{constructor(){var e;super(...arguments),this.setTagShown=g()(e=this._setTagShown).call(e,this)}_setTagShown(e,t){this.props.layoutActions.show(e,t)}showOp(e,t){let{layoutActions:n}=this.props;n.show(e,t)}render(){let{specSelectors:e,layoutSelectors:t,layoutActions:n,getComponent:s}=this.props,r=e.taggedOperations();const a=s(\"Collapse\");return k().createElement(\"div\",null,k().createElement(\"h4\",{className:\"overview-title\"},\"Overview\"),j()(r).call(r,((e,s)=>{let r=e.get(\"operations\"),o=[\"overview-tags\",s],l=t.isShown(o,!0);return k().createElement(\"div\",{key:\"overview-\"+s},k().createElement(\"h4\",{onClick:()=>n.show(o,!l),className:\"link overview-tag\"},\" \",l?\"-\":\"+\",s),k().createElement(a,{isOpened:l,animated:!0},j()(r).call(r,(e=>{let{path:s,method:r,id:a}=e.toObject(),o=\"operations\",l=a,c=t.isShown([o,l]);return k().createElement(pn,{key:a,path:s,method:r,id:s+\"-\"+r,shown:c,showOpId:l,showOpIdPrefix:o,href:`#operation-${l}`,onClick:n.show})})).toArray()))})).toArray(),r.size<1&&k().createElement(\"h3\",null,\" No operations defined in spec! \"))}}class pn extends k().Component{constructor(e){var t;super(e),this.onClick=g()(t=this._onClick).call(t,this)}_onClick(){let{showOpId:e,showOpIdPrefix:t,onClick:n,shown:s}=this.props;n([t,e],!s)}render(){let{id:e,method:t,shown:n,href:s}=this.props;return k().createElement(on,{href:s,onClick:this.onClick,className:\"block opblock-link \"+(n?\"shown\":\"\")},k().createElement(\"div\",null,k().createElement(\"small\",{className:`bold-label-${t}`},t.toUpperCase()),k().createElement(\"span\",{className:\"bold-label\"},e)))}}class mn extends k().Component{componentDidMount(){this.props.initialValue&&(this.inputRef.value=this.props.initialValue)}render(){const{value:e,defaultValue:t,initialValue:n,...s}=this.props;return k().createElement(\"input\",Ht()({},s,{ref:e=>this.inputRef=e}))}}class dn extends k().Component{render(){const{host:e,basePath:t}=this.props;return k().createElement(\"pre\",{className:\"base-url\"},\"[ Base URL: \",e,t,\" ]\")}}class hn extends k().PureComponent{render(){const{url:e,getComponent:t}=this.props,n=t(\"Link\");return k().createElement(n,{target:\"_blank\",href:(0,$.Nm)(e)},k().createElement(\"span\",{className:\"url\"},\" \",e))}}class gn extends k().Component{render(){const{info:e,url:t,host:n,basePath:s,getComponent:r,externalDocs:a,selectedServer:o,url:l}=this.props,c=e.get(\"version\"),i=e.get(\"description\"),u=e.get(\"title\"),p=(0,ze.mn)(e.get(\"termsOfService\"),l,{selectedServer:o}),m=e.get(\"contact\"),d=e.get(\"license\"),h=a&&a.get(\"url\"),g=(0,ze.mn)(h,l,{selectedServer:o}),f=a&&a.get(\"description\"),y=r(\"Markdown\",!0),S=r(\"Link\"),v=r(\"VersionStamp\"),E=r(\"InfoUrl\"),x=r(\"InfoBasePath\"),w=r(\"License\"),C=r(\"Contact\");return k().createElement(\"div\",{className:\"info\"},k().createElement(\"hgroup\",{className:\"main\"},k().createElement(\"h2\",{className:\"title\"},u,c&&k().createElement(v,{version:c})),n||s?k().createElement(x,{host:n,basePath:s}):null,t&&k().createElement(E,{getComponent:r,url:t})),k().createElement(\"div\",{className:\"description\"},k().createElement(y,{source:i})),p&&k().createElement(\"div\",{className:\"info__tos\"},k().createElement(S,{target:\"_blank\",href:(0,$.Nm)(p)},\"Terms of service\")),(null==m?void 0:m.size)>0&&k().createElement(C,{getComponent:r,data:m,selectedServer:o,url:t}),(null==d?void 0:d.size)>0&&k().createElement(w,{getComponent:r,license:d,selectedServer:o,url:t}),g?k().createElement(S,{className:\"info__extdocs\",target:\"_blank\",href:(0,$.Nm)(g)},f||g):null)}}const fn=gn;class yn extends k().Component{render(){const{specSelectors:e,getComponent:t,oas3Selectors:n}=this.props,s=e.info(),r=e.url(),a=e.basePath(),o=e.host(),l=e.externalDocs(),c=n.selectedServer(),i=t(\"info\");return k().createElement(\"div\",null,s&&s.count()?k().createElement(i,{info:s,url:r,host:o,basePath:a,externalDocs:l,getComponent:t,selectedServer:c}):null)}}class Sn extends k().Component{render(){const{data:e,getComponent:t,selectedServer:n,url:s}=this.props,r=e.get(\"name\",\"the developer\"),a=(0,ze.mn)(e.get(\"url\"),s,{selectedServer:n}),o=e.get(\"email\"),l=t(\"Link\");return k().createElement(\"div\",{className:\"info__contact\"},a&&k().createElement(\"div\",null,k().createElement(l,{href:(0,$.Nm)(a),target:\"_blank\"},r,\" - Website\")),o&&k().createElement(l,{href:(0,$.Nm)(`mailto:${o}`)},a?`Send email to ${r}`:`Contact ${r}`))}}const vn=Sn;class En extends k().Component{render(){const{license:e,getComponent:t,selectedServer:n,url:s}=this.props,r=e.get(\"name\",\"License\"),a=(0,ze.mn)(e.get(\"url\"),s,{selectedServer:n}),o=t(\"Link\");return k().createElement(\"div\",{className:\"info__license\"},a?k().createElement(\"div\",{className:\"info__license__url\"},k().createElement(o,{target:\"_blank\",href:(0,$.Nm)(a)},r)):k().createElement(\"span\",null,r))}}const xn=En;class wn extends k().Component{render(){return null}}class Cn extends k().Component{render(){return k().createElement(\"div\",{className:\"view-line-link copy-to-clipboard\",title:\"Copy to clipboard\"},k().createElement(ht.CopyToClipboard,{text:this.props.textToCopy},k().createElement(\"svg\",{width:\"15\",height:\"16\"},k().createElement(\"use\",{href:\"#copy\",xlinkHref:\"#copy\"}))))}}class bn extends k().Component{render(){return k().createElement(\"div\",{className:\"footer\"})}}class jn extends k().Component{constructor(){super(...arguments),ie()(this,\"onFilterChange\",(e=>{const{target:{value:t}}=e;this.props.layoutActions.updateFilter(t)}))}render(){const{specSelectors:e,layoutSelectors:t,getComponent:n}=this.props,s=n(\"Col\"),r=\"loading\"===e.loadingStatus(),a=\"failed\"===e.loadingStatus(),o=t.currentFilter(),l=[\"operation-filter-input\"];return a&&l.push(\"failed\"),r&&l.push(\"loading\"),k().createElement(\"div\",null,null===o||!1===o||\"false\"===o?null:k().createElement(\"div\",{className:\"filter-container\"},k().createElement(s,{className:\"filter wrapper\",mobile:12},k().createElement(\"input\",{className:l.join(\" \"),placeholder:\"Filter by tag\",type:\"text\",onChange:this.onFilterChange,value:!0===o||\"true\"===o?\"\":o,disabled:r}))))}}const _n=Function.prototype;class Nn extends O.PureComponent{constructor(e,t){super(e,t),ie()(this,\"updateValues\",(e=>{let{param:t,isExecute:n,consumesValue:s=\"\"}=e,r=/xml/i.test(s),a=/json/i.test(s),o=r?t.get(\"value_xml\"):t.get(\"value\");if(void 0!==o){let e=!o&&a?\"{}\":o;this.setState({value:e}),this.onChange(e,{isXml:r,isEditBox:n})}else r?this.onChange(this.sample(\"xml\"),{isXml:r,isEditBox:n}):this.onChange(this.sample(),{isEditBox:n})})),ie()(this,\"sample\",(e=>{let{param:t,fn:n}=this.props,s=n.inferSchema(t.toJS());return n.getSampleSchema(s,e,{includeWriteOnly:!0})})),ie()(this,\"onChange\",((e,t)=>{let{isEditBox:n,isXml:s}=t;this.setState({value:e,isEditBox:n}),this._onChange(e,s)})),ie()(this,\"_onChange\",((e,t)=>{(this.props.onChange||_n)(e,t)})),ie()(this,\"handleOnChange\",(e=>{const{consumesValue:t}=this.props,n=/xml/i.test(t),s=e.target.value;this.onChange(s,{isXml:n,isEditBox:this.state.isEditBox})})),ie()(this,\"toggleIsEditBox\",(()=>this.setState((e=>({isEditBox:!e.isEditBox}))))),this.state={isEditBox:!1,value:\"\"}}componentDidMount(){this.updateValues.call(this,this.props)}UNSAFE_componentWillReceiveProps(e){this.updateValues.call(this,e)}render(){let{onChangeConsumes:e,param:t,isExecute:n,specSelectors:s,pathMethod:r,getConfigs:a,getComponent:o}=this.props;const l=o(\"Button\"),c=o(\"TextArea\"),i=o(\"highlightCode\"),u=o(\"contentType\");let p=(s?s.parameterWithMetaByIdentity(r,t):t).get(\"errors\",(0,I.List)()),m=s.contentTypeValues(r).get(\"requestContentType\"),d=this.props.consumes&&this.props.consumes.size?this.props.consumes:Nn.defaultProp.consumes,{value:h,isEditBox:g}=this.state,f=null;return(0,Et.O)(h)&&(f=\"json\"),k().createElement(\"div\",{className:\"body-param\",\"data-param-name\":t.get(\"name\"),\"data-param-in\":t.get(\"in\")},g&&n?k().createElement(c,{className:\"body-param__text\"+(p.count()?\" invalid\":\"\"),value:h,onChange:this.handleOnChange}):h&&k().createElement(i,{className:\"body-param__example\",language:f,getConfigs:a,value:h}),k().createElement(\"div\",{className:\"body-param-options\"},n?k().createElement(\"div\",{className:\"body-param-edit\"},k().createElement(l,{className:g?\"btn cancel body-param__example-edit\":\"btn edit body-param__example-edit\",onClick:this.toggleIsEditBox},g?\"Cancel\":\"Edit\")):null,k().createElement(\"label\",{htmlFor:\"\"},k().createElement(\"span\",null,\"Parameter content type\"),k().createElement(u,{value:m,contentTypes:d,onChange:e,className:\"body-param-content-type\",ariaLabel:\"Parameter content type\"}))))}}ie()(Nn,\"defaultProp\",{consumes:(0,I.fromJS)([\"application/json\"]),param:(0,I.fromJS)({}),onChange:_n,onChangeConsumes:_n});var On=n(8223);class kn extends k().Component{render(){let{request:e,getConfigs:t}=this.props,n=(0,On.requestSnippetGenerator_curl_bash)(e);const s=t(),r=it()(s,\"syntaxHighlight.activated\")?k().createElement(lt.d3,{language:\"bash\",className:\"curl microlight\",style:(0,lt.C2)(it()(s,\"syntaxHighlight.theme\"))},n):k().createElement(\"textarea\",{readOnly:!0,className:\"curl\",value:n});return k().createElement(\"div\",{className:\"curl-command\"},k().createElement(\"h4\",null,\"Curl\"),k().createElement(\"div\",{className:\"copy-to-clipboard\"},k().createElement(ht.CopyToClipboard,{text:n},k().createElement(\"button\",null))),k().createElement(\"div\",null,r))}}class An extends k().Component{constructor(){super(...arguments),ie()(this,\"onChange\",(e=>{this.setScheme(e.target.value)})),ie()(this,\"setScheme\",(e=>{let{path:t,method:n,specActions:s}=this.props;s.setScheme(e,t,n)}))}UNSAFE_componentWillMount(){let{schemes:e}=this.props;this.setScheme(e.first())}UNSAFE_componentWillReceiveProps(e){var t;this.props.currentScheme&&Te()(t=e.schemes).call(t,this.props.currentScheme)||this.setScheme(e.schemes.first())}render(){var e;let{schemes:t,currentScheme:n}=this.props;return k().createElement(\"label\",{htmlFor:\"schemes\"},k().createElement(\"span\",{className:\"schemes-title\"},\"Schemes\"),k().createElement(\"select\",{onChange:this.onChange,value:n},j()(e=t.valueSeq()).call(e,(e=>k().createElement(\"option\",{value:e,key:e},e))).toArray()))}}class In extends k().Component{render(){const{specActions:e,specSelectors:t,getComponent:n}=this.props,s=t.operationScheme(),r=t.schemes(),a=n(\"schemes\");return r&&r.size?k().createElement(a,{currentScheme:s,schemes:r,specActions:e}):null}}class Pn extends O.Component{constructor(e,t){super(e,t),ie()(this,\"toggleCollapsed\",(()=>{this.props.onToggle&&this.props.onToggle(this.props.modelName,!this.state.expanded),this.setState({expanded:!this.state.expanded})})),ie()(this,\"onLoad\",(e=>{if(e&&this.props.layoutSelectors){const t=this.props.layoutSelectors.getScrollToKey();P().is(t,this.props.specPath)&&this.toggleCollapsed(),this.props.layoutActions.readyToScroll(this.props.specPath,e.parentElement)}}));let{expanded:n,collapsedContent:s}=this.props;this.state={expanded:n,collapsedContent:s||Pn.defaultProps.collapsedContent}}componentDidMount(){const{hideSelfOnExpand:e,expanded:t,modelName:n}=this.props;e&&t&&this.props.onToggle(n,t)}UNSAFE_componentWillReceiveProps(e){this.props.expanded!==e.expanded&&this.setState({expanded:e.expanded})}render(){const{title:e,classes:t}=this.props;return this.state.expanded&&this.props.hideSelfOnExpand?k().createElement(\"span\",{className:t||\"\"},this.props.children):k().createElement(\"span\",{className:t||\"\",ref:this.onLoad},k().createElement(\"button\",{\"aria-expanded\":this.state.expanded,className:\"model-box-control\",onClick:this.toggleCollapsed},e&&k().createElement(\"span\",{className:\"pointer\"},e),k().createElement(\"span\",{className:\"model-toggle\"+(this.state.expanded?\"\":\" collapsed\")}),!this.state.expanded&&k().createElement(\"span\",null,this.state.collapsedContent)),this.state.expanded&&this.props.children)}}ie()(Pn,\"defaultProps\",{collapsedContent:\"{...}\",expanded:!1,title:null,onToggle:()=>{},hideSelfOnExpand:!1,specPath:P().List([])});var qn=n(185),Rn=n.n(qn);class Tn extends k().Component{constructor(e,t){super(e,t),ie()(this,\"activeTab\",(e=>{let{target:{dataset:{name:t}}}=e;this.setState({activeTab:t})}));let{getConfigs:n,isExecute:s}=this.props,{defaultModelRendering:r}=n(),a=r;\"example\"!==r&&\"model\"!==r&&(a=\"example\"),s&&(a=\"example\"),this.state={activeTab:a}}UNSAFE_componentWillReceiveProps(e){e.isExecute&&!this.props.isExecute&&this.props.example&&this.setState({activeTab:\"example\"})}render(){let{getComponent:e,specSelectors:t,schema:n,example:s,isExecute:r,getConfigs:a,specPath:o,includeReadOnly:l,includeWriteOnly:c}=this.props,{defaultModelExpandDepth:i}=a();const u=e(\"ModelWrapper\"),p=e(\"highlightCode\"),m=Rn()(5).toString(\"base64\"),d=Rn()(5).toString(\"base64\"),h=Rn()(5).toString(\"base64\"),g=Rn()(5).toString(\"base64\");let f=t.isOAS3();return k().createElement(\"div\",{className:\"model-example\"},k().createElement(\"ul\",{className:\"tab\",role:\"tablist\"},k().createElement(\"li\",{className:ot()(\"tabitem\",{active:\"example\"===this.state.activeTab}),role:\"presentation\"},k().createElement(\"button\",{\"aria-controls\":d,\"aria-selected\":\"example\"===this.state.activeTab,className:\"tablinks\",\"data-name\":\"example\",id:m,onClick:this.activeTab,role:\"tab\"},r?\"Edit Value\":\"Example Value\")),n&&k().createElement(\"li\",{className:ot()(\"tabitem\",{active:\"model\"===this.state.activeTab}),role:\"presentation\"},k().createElement(\"button\",{\"aria-controls\":g,\"aria-selected\":\"model\"===this.state.activeTab,className:ot()(\"tablinks\",{inactive:r}),\"data-name\":\"model\",id:h,onClick:this.activeTab,role:\"tab\"},f?\"Schema\":\"Model\"))),\"example\"===this.state.activeTab&&k().createElement(\"div\",{\"aria-hidden\":\"example\"!==this.state.activeTab,\"aria-labelledby\":m,\"data-name\":\"examplePanel\",id:d,role:\"tabpanel\",tabIndex:\"0\"},s||k().createElement(p,{value:\"(no example available)\",getConfigs:a})),\"model\"===this.state.activeTab&&k().createElement(\"div\",{\"aria-hidden\":\"example\"===this.state.activeTab,\"aria-labelledby\":h,\"data-name\":\"modelPanel\",id:g,role:\"tabpanel\",tabIndex:\"0\"},k().createElement(u,{schema:n,getComponent:e,getConfigs:a,specSelectors:t,expandDepth:i,specPath:o,includeReadOnly:l,includeWriteOnly:c})))}}class Mn extends O.Component{constructor(){super(...arguments),ie()(this,\"onToggle\",((e,t)=>{this.props.layoutActions&&this.props.layoutActions.show(this.props.fullPath,t)}))}render(){let{getComponent:e,getConfigs:t}=this.props;const n=e(\"Model\");let s;return this.props.layoutSelectors&&(s=this.props.layoutSelectors.isShown(this.props.fullPath)),k().createElement(\"div\",{className:\"model-box\"},k().createElement(n,Ht()({},this.props,{getConfigs:t,expanded:s,depth:1,onToggle:this.onToggle,expandDepth:this.props.expandDepth||0})))}}var Dn=n(6024);class Jn extends O.Component{constructor(){super(...arguments),ie()(this,\"getSchemaBasePath\",(()=>this.props.specSelectors.isOAS3()?[\"components\",\"schemas\"]:[\"definitions\"])),ie()(this,\"getCollapsedContent\",(()=>\" \")),ie()(this,\"handleToggle\",((e,t)=>{const{layoutActions:n}=this.props;n.show([...this.getSchemaBasePath(),e],t),t&&this.props.specActions.requestResolvedSubtree([...this.getSchemaBasePath(),e])})),ie()(this,\"onLoadModels\",(e=>{e&&this.props.layoutActions.readyToScroll(this.getSchemaBasePath(),e)})),ie()(this,\"onLoadModel\",(e=>{if(e){const t=e.getAttribute(\"data-name\");this.props.layoutActions.readyToScroll([...this.getSchemaBasePath(),t],e)}}))}render(){var e;let{specSelectors:t,getComponent:n,layoutSelectors:s,layoutActions:r,getConfigs:a}=this.props,o=t.definitions(),{docExpansion:l,defaultModelsExpandDepth:c}=a();if(!o.size||c<0)return null;const i=this.getSchemaBasePath();let u=s.isShown(i,c>0&&\"none\"!==l);const p=t.isOAS3(),m=n(\"ModelWrapper\"),d=n(\"Collapse\"),h=n(\"ModelCollapse\"),g=n(\"JumpToPath\",!0);return k().createElement(\"section\",{className:u?\"models is-open\":\"models\",ref:this.onLoadModels},k().createElement(\"h4\",null,k().createElement(\"button\",{\"aria-expanded\":u,className:\"models-control\",onClick:()=>r.show(i,!u)},k().createElement(\"span\",null,p?\"Schemas\":\"Models\"),k().createElement(\"svg\",{width:\"20\",height:\"20\",\"aria-hidden\":\"true\",focusable:\"false\"},k().createElement(\"use\",{xlinkHref:u?\"#large-arrow-up\":\"#large-arrow-down\"})))),k().createElement(d,{isOpened:u},j()(e=o.entrySeq()).call(e,(e=>{let[o]=e;const l=[...i,o],u=P().List(l),p=t.specResolvedSubtree(l),d=t.specJson().getIn(l),f=I.Map.isMap(p)?p:P().Map(),y=I.Map.isMap(d)?d:P().Map(),S=f.get(\"title\")||y.get(\"title\")||o,v=s.isShown(l,!1);v&&0===f.size&&y.size>0&&this.props.specActions.requestResolvedSubtree(l);const E=k().createElement(m,{name:o,expandDepth:c,schema:f||P().Map(),displayName:S,fullPath:l,specPath:u,getComponent:n,specSelectors:t,getConfigs:a,layoutSelectors:s,layoutActions:r,includeReadOnly:!0,includeWriteOnly:!0}),x=k().createElement(\"span\",{className:\"model-box\"},k().createElement(\"span\",{className:\"model model-title\"},S));return k().createElement(\"div\",{id:`model-${o}`,className:\"model-container\",key:`models-section-${o}`,\"data-name\":o,ref:this.onLoadModel},k().createElement(\"span\",{className:\"models-jump-to-path\"},k().createElement(g,{specPath:u})),k().createElement(h,{classes:\"model-box\",collapsedContent:this.getCollapsedContent(o),onToggle:this.handleToggle,title:x,displayName:S,modelName:o,specPath:u,layoutSelectors:s,layoutActions:r,hideSelfOnExpand:!0,expanded:c>0&&v},E))})).toArray()))}}const $n=e=>{let{value:t,getComponent:n}=e,s=n(\"ModelCollapse\"),r=k().createElement(\"span\",null,\"Array [ \",t.count(),\" ]\");return k().createElement(\"span\",{className:\"prop-enum\"},\"Enum:\",k().createElement(\"br\",null),k().createElement(s,{collapsedContent:r},\"[ \",t.join(\", \"),\" ]\"))};class Kn extends O.Component{render(){var e,t,n,s;let{schema:r,name:a,displayName:o,isRef:c,getComponent:i,getConfigs:u,depth:m,onToggle:d,expanded:h,specPath:g,...f}=this.props,{specSelectors:y,expandDepth:S,includeReadOnly:E,includeWriteOnly:x}=f;const{isOAS3:w}=y;if(!r)return null;const{showExtensions:C}=u();let b=r.get(\"description\"),_=r.get(\"properties\"),N=r.get(\"additionalProperties\"),O=r.get(\"title\")||o||a,A=r.get(\"required\"),P=l()(r).call(r,((e,t)=>{var n;return-1!==pe()(n=[\"maxProperties\",\"minProperties\",\"nullable\",\"example\"]).call(n,t)})),q=r.get(\"deprecated\"),R=r.getIn([\"externalDocs\",\"url\"]),T=r.getIn([\"externalDocs\",\"description\"]);const M=i(\"JumpToPath\",!0),D=i(\"Markdown\",!0),J=i(\"Model\"),K=i(\"ModelCollapse\"),L=i(\"Property\"),V=i(\"Link\"),U=()=>k().createElement(\"span\",{className:\"model-jump-to-path\"},k().createElement(M,{specPath:g})),F=k().createElement(\"span\",null,k().createElement(\"span\",null,\"{\"),\"...\",k().createElement(\"span\",null,\"}\"),c?k().createElement(U,null):\"\"),z=y.isOAS3()?r.get(\"anyOf\"):null,B=y.isOAS3()?r.get(\"oneOf\"):null,W=y.isOAS3()?r.get(\"not\"):null,H=O&&k().createElement(\"span\",{className:\"model-title\"},c&&r.get(\"$$ref\")&&k().createElement(\"span\",{className:\"model-hint\"},r.get(\"$$ref\")),k().createElement(\"span\",{className:\"model-title__text\"},O));return k().createElement(\"span\",{className:\"model\"},k().createElement(K,{modelName:a,title:H,onToggle:d,expanded:!!h||m<=S,collapsedContent:F},k().createElement(\"span\",{className:\"brace-open object\"},\"{\"),c?k().createElement(U,null):null,k().createElement(\"span\",{className:\"inner-object\"},k().createElement(\"table\",{className:\"model\"},k().createElement(\"tbody\",null,b?k().createElement(\"tr\",{className:\"description\"},k().createElement(\"td\",null,\"description:\"),k().createElement(\"td\",null,k().createElement(D,{source:b}))):null,R&&k().createElement(\"tr\",{className:\"external-docs\"},k().createElement(\"td\",null,\"externalDocs:\"),k().createElement(\"td\",null,k().createElement(V,{target:\"_blank\",href:(0,$.Nm)(R)},T||R))),q?k().createElement(\"tr\",{className:\"property\"},k().createElement(\"td\",null,\"deprecated:\"),k().createElement(\"td\",null,\"true\")):null,_&&_.size?j()(e=l()(t=_.entrySeq()).call(t,(e=>{let[,t]=e;return(!t.get(\"readOnly\")||E)&&(!t.get(\"writeOnly\")||x)}))).call(e,(e=>{let[t,n]=e,s=w()&&n.get(\"deprecated\"),r=I.List.isList(A)&&A.contains(t),o=[\"property-row\"];return s&&o.push(\"deprecated\"),r&&o.push(\"required\"),k().createElement(\"tr\",{key:t,className:o.join(\" \")},k().createElement(\"td\",null,t,r&&k().createElement(\"span\",{className:\"star\"},\"*\")),k().createElement(\"td\",null,k().createElement(J,Ht()({key:`object-${a}-${t}_${n}`},f,{required:r,getComponent:i,specPath:g.push(\"properties\",t),getConfigs:u,schema:n,depth:m+1}))))})).toArray():null,C?k().createElement(\"tr\",null,k().createElement(\"td\",null,\" \")):null,C?j()(n=r.entrySeq()).call(n,(e=>{let[t,n]=e;if(\"x-\"!==v()(t).call(t,0,2))return;const s=n?n.toJS?n.toJS():n:null;return k().createElement(\"tr\",{key:t,className:\"extension\"},k().createElement(\"td\",null,t),k().createElement(\"td\",null,p()(s)))})).toArray():null,N&&N.size?k().createElement(\"tr\",null,k().createElement(\"td\",null,\"< * >:\"),k().createElement(\"td\",null,k().createElement(J,Ht()({},f,{required:!1,getComponent:i,specPath:g.push(\"additionalProperties\"),getConfigs:u,schema:N,depth:m+1})))):null,z?k().createElement(\"tr\",null,k().createElement(\"td\",null,\"anyOf ->\"),k().createElement(\"td\",null,j()(z).call(z,((e,t)=>k().createElement(\"div\",{key:t},k().createElement(J,Ht()({},f,{required:!1,getComponent:i,specPath:g.push(\"anyOf\",t),getConfigs:u,schema:e,depth:m+1}))))))):null,B?k().createElement(\"tr\",null,k().createElement(\"td\",null,\"oneOf ->\"),k().createElement(\"td\",null,j()(B).call(B,((e,t)=>k().createElement(\"div\",{key:t},k().createElement(J,Ht()({},f,{required:!1,getComponent:i,specPath:g.push(\"oneOf\",t),getConfigs:u,schema:e,depth:m+1}))))))):null,W?k().createElement(\"tr\",null,k().createElement(\"td\",null,\"not ->\"),k().createElement(\"td\",null,k().createElement(\"div\",null,k().createElement(J,Ht()({},f,{required:!1,getComponent:i,specPath:g.push(\"not\"),getConfigs:u,schema:W,depth:m+1}))))):null))),k().createElement(\"span\",{className:\"brace-close\"},\"}\")),P.size?j()(s=P.entrySeq()).call(s,(e=>{let[t,n]=e;return k().createElement(L,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:\"property\"})})):null)}}class Ln extends O.Component{render(){var e;let{getComponent:t,getConfigs:n,schema:s,depth:r,expandDepth:a,name:o,displayName:c,specPath:i}=this.props,u=s.get(\"description\"),p=s.get(\"items\"),m=s.get(\"title\")||c||o,d=l()(s).call(s,((e,t)=>{var n;return-1===pe()(n=[\"type\",\"items\",\"description\",\"$$ref\",\"externalDocs\"]).call(n,t)})),h=s.getIn([\"externalDocs\",\"url\"]),g=s.getIn([\"externalDocs\",\"description\"]);const f=t(\"Markdown\",!0),y=t(\"ModelCollapse\"),S=t(\"Model\"),v=t(\"Property\"),E=t(\"Link\"),x=m&&k().createElement(\"span\",{className:\"model-title\"},k().createElement(\"span\",{className:\"model-title__text\"},m));return k().createElement(\"span\",{className:\"model\"},k().createElement(y,{title:x,expanded:r<=a,collapsedContent:\"[...]\"},\"[\",d.size?j()(e=d.entrySeq()).call(e,(e=>{let[t,n]=e;return k().createElement(v,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:\"property\"})})):null,u?k().createElement(f,{source:u}):d.size?k().createElement(\"div\",{className:\"markdown\"}):null,h&&k().createElement(\"div\",{className:\"external-docs\"},k().createElement(E,{target:\"_blank\",href:(0,$.Nm)(h)},g||h)),k().createElement(\"span\",null,k().createElement(S,Ht()({},this.props,{getConfigs:n,specPath:i.push(\"items\"),name:null,schema:p,required:!1,depth:r+1}))),\"]\"))}}const Vn=\"property primitive\";class Un extends O.Component{render(){var e,t,n;let{schema:s,getComponent:r,getConfigs:a,name:o,displayName:c,depth:i,expandDepth:u}=this.props;const{showExtensions:p}=a();if(!s||!s.get)return k().createElement(\"div\",null);let m=s.get(\"type\"),d=s.get(\"format\"),h=s.get(\"xml\"),g=s.get(\"enum\"),f=s.get(\"title\")||c||o,y=s.get(\"description\"),S=(0,$.nX)(s),v=l()(s).call(s,((e,t)=>{var n;return-1===pe()(n=[\"enum\",\"type\",\"format\",\"description\",\"$$ref\",\"externalDocs\"]).call(n,t)})).filterNot(((e,t)=>S.has(t))),E=s.getIn([\"externalDocs\",\"url\"]),x=s.getIn([\"externalDocs\",\"description\"]);const w=r(\"Markdown\",!0),C=r(\"EnumModel\"),b=r(\"Property\"),_=r(\"ModelCollapse\"),N=r(\"Link\"),O=f&&k().createElement(\"span\",{className:\"model-title\"},k().createElement(\"span\",{className:\"model-title__text\"},f));return k().createElement(\"span\",{className:\"model\"},k().createElement(_,{title:O,expanded:i<=u,collapsedContent:\"[...]\",hideSelfOnExpand:u!==i},k().createElement(\"span\",{className:\"prop\"},o&&i>1&&k().createElement(\"span\",{className:\"prop-name\"},f),k().createElement(\"span\",{className:\"prop-type\"},m),d&&k().createElement(\"span\",{className:\"prop-format\"},\"($\",d,\")\"),v.size?j()(e=v.entrySeq()).call(e,(e=>{let[t,n]=e;return k().createElement(b,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:Vn})})):null,p&&S.size?j()(t=S.entrySeq()).call(t,(e=>{let[t,n]=e;return k().createElement(b,{key:`${t}-${n}`,propKey:t,propVal:n,propClass:Vn})})):null,y?k().createElement(w,{source:y}):null,E&&k().createElement(\"div\",{className:\"external-docs\"},k().createElement(N,{target:\"_blank\",href:(0,$.Nm)(E)},x||E)),h&&h.size?k().createElement(\"span\",null,k().createElement(\"br\",null),k().createElement(\"span\",{className:Vn},\"xml:\"),j()(n=h.entrySeq()).call(n,(e=>{let[t,n]=e;return k().createElement(\"span\",{key:`${t}-${n}`,className:Vn},k().createElement(\"br\",null),\"   \",t,\": \",String(n))})).toArray()):null,g&&k().createElement(C,{value:g,getComponent:r}))))}}const Fn=e=>{let{propKey:t,propVal:n,propClass:s}=e;return k().createElement(\"span\",{className:s},k().createElement(\"br\",null),t,\": \",String(n))};class zn extends k().Component{render(){const{onTryoutClick:e,onCancelClick:t,onResetClick:n,enabled:s,hasUserEditedBody:r,isOAS3:a}=this.props,o=a&&r;return k().createElement(\"div\",{className:o?\"try-out btn-group\":\"try-out\"},s?k().createElement(\"button\",{className:\"btn try-out__btn cancel\",onClick:t},\"Cancel\"):k().createElement(\"button\",{className:\"btn try-out__btn\",onClick:e},\"Try it out \"),o&&k().createElement(\"button\",{className:\"btn try-out__btn reset\",onClick:n},\"Reset\"))}}ie()(zn,\"defaultProps\",{onTryoutClick:Function.prototype,onCancelClick:Function.prototype,onResetClick:Function.prototype,enabled:!1,hasUserEditedBody:!1,isOAS3:!1});class Bn extends k().PureComponent{render(){const{bypass:e,isSwagger2:t,isOAS3:n,alsoShow:s}=this.props;return e?k().createElement(\"div\",null,this.props.children):t&&n?k().createElement(\"div\",{className:\"version-pragma\"},s,k().createElement(\"div\",{className:\"version-pragma__message version-pragma__message--ambiguous\"},k().createElement(\"div\",null,k().createElement(\"h3\",null,\"Unable to render this definition\"),k().createElement(\"p\",null,k().createElement(\"code\",null,\"swagger\"),\" and \",k().createElement(\"code\",null,\"openapi\"),\" fields cannot be present in the same Swagger or OpenAPI definition. Please remove one of the fields.\"),k().createElement(\"p\",null,\"Supported version fields are \",k().createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",k().createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",k().createElement(\"code\",null,\"openapi: 3.0.0\"),\").\")))):t||n?k().createElement(\"div\",null,this.props.children):k().createElement(\"div\",{className:\"version-pragma\"},s,k().createElement(\"div\",{className:\"version-pragma__message version-pragma__message--missing\"},k().createElement(\"div\",null,k().createElement(\"h3\",null,\"Unable to render this definition\"),k().createElement(\"p\",null,\"The provided definition does not specify a valid version field.\"),k().createElement(\"p\",null,\"Please indicate a valid Swagger or OpenAPI version field. Supported version fields are \",k().createElement(\"code\",null,\"swagger: \",'\"2.0\"'),\" and those that match \",k().createElement(\"code\",null,\"openapi: 3.0.n\"),\" (for example, \",k().createElement(\"code\",null,\"openapi: 3.0.0\"),\").\"))))}}ie()(Bn,\"defaultProps\",{alsoShow:null,children:null,bypass:!1});const Wn=e=>{let{version:t}=e;return k().createElement(\"small\",null,k().createElement(\"pre\",{className:\"version\"},\" \",t,\" \"))},Hn=e=>{let{enabled:t,path:n,text:s}=e;return k().createElement(\"a\",{className:\"nostyle\",onClick:t?e=>e.preventDefault():null,href:t?`#/${n}`:null},k().createElement(\"span\",null,s))},Gn=()=>k().createElement(\"div\",null,k().createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",xmlnsXlink:\"http://www.w3.org/1999/xlink\",className:\"svg-assets\"},k().createElement(\"defs\",null,k().createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"unlocked\"},k().createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"locked\"},k().createElement(\"path\",{d:\"M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"close\"},k().createElement(\"path\",{d:\"M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow\"},k().createElement(\"path\",{d:\"M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-down\"},k().createElement(\"path\",{d:\"M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 20 20\",id:\"large-arrow-up\"},k().createElement(\"path\",{d:\"M 17.418 14.908 C 17.69 15.176 18.127 15.176 18.397 14.908 C 18.667 14.64 18.668 14.207 18.397 13.939 L 10.489 6.109 C 10.219 5.841 9.782 5.841 9.51 6.109 L 1.602 13.939 C 1.332 14.207 1.332 14.64 1.602 14.908 C 1.873 15.176 2.311 15.176 2.581 14.908 L 10 7.767 L 17.418 14.908 Z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"jump-to\"},k().createElement(\"path\",{d:\"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 24 24\",id:\"expand\"},k().createElement(\"path\",{d:\"M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z\"})),k().createElement(\"symbol\",{viewBox:\"0 0 15 16\",id:\"copy\"},k().createElement(\"g\",{transform:\"translate(2, -1)\"},k().createElement(\"path\",{fill:\"#ffffff\",fillRule:\"evenodd\",d:\"M2 13h4v1H2v-1zm5-6H2v1h5V7zm2 3V8l-3 3 3 3v-2h5v-2H9zM4.5 9H2v1h2.5V9zM2 12h2.5v-1H2v1zm9 1h1v2c-.02.28-.11.52-.3.7-.19.18-.42.28-.7.3H1c-.55 0-1-.45-1-1V4c0-.55.45-1 1-1h3c0-1.11.89-2 2-2 1.11 0 2 .89 2 2h3c.55 0 1 .45 1 1v5h-1V6H1v9h10v-2zM2 5h8c0-.55-.45-1-1-1H8c-.55 0-1-.45-1-1s-.45-1-1-1-1 .45-1 1-.45 1-1 1H3c-.55 0-1 .45-1 1z\"}))))));var Zn=n(2552);class Xn extends k().Component{render(){const{errSelectors:e,specSelectors:t,getComponent:n}=this.props,s=n(\"SvgAssets\"),r=n(\"InfoContainer\",!0),a=n(\"VersionPragmaFilter\"),o=n(\"operations\",!0),l=n(\"Models\",!0),c=n(\"Webhooks\",!0),i=n(\"Row\"),u=n(\"Col\"),p=n(\"errors\",!0),m=n(\"ServersContainer\",!0),d=n(\"SchemesContainer\",!0),h=n(\"AuthorizeBtnContainer\",!0),g=n(\"FilterContainer\",!0),f=t.isSwagger2(),y=t.isOAS3(),S=t.isOAS31(),v=!t.specStr(),E=t.loadingStatus();let x=null;if(\"loading\"===E&&(x=k().createElement(\"div\",{className:\"info\"},k().createElement(\"div\",{className:\"loading-container\"},k().createElement(\"div\",{className:\"loading\"})))),\"failed\"===E&&(x=k().createElement(\"div\",{className:\"info\"},k().createElement(\"div\",{className:\"loading-container\"},k().createElement(\"h4\",{className:\"title\"},\"Failed to load API definition.\"),k().createElement(p,null)))),\"failedConfig\"===E){const t=e.lastError(),n=t?t.get(\"message\"):\"\";x=k().createElement(\"div\",{className:\"info failed-config\"},k().createElement(\"div\",{className:\"loading-container\"},k().createElement(\"h4\",{className:\"title\"},\"Failed to load remote configuration.\"),k().createElement(\"p\",null,n)))}if(!x&&v&&(x=k().createElement(\"h4\",null,\"No API definition provided.\")),x)return k().createElement(\"div\",{className:\"swagger-ui\"},k().createElement(\"div\",{className:\"loading-container\"},x));const w=t.servers(),C=t.schemes(),b=w&&w.size,j=C&&C.size,_=!!t.securityDefinitions();return k().createElement(\"div\",{className:\"swagger-ui\"},k().createElement(s,null),k().createElement(a,{isSwagger2:f,isOAS3:y,alsoShow:k().createElement(p,null)},k().createElement(p,null),k().createElement(i,{className:\"information-container\"},k().createElement(u,{mobile:12},k().createElement(r,null))),b||j||_?k().createElement(\"div\",{className:\"scheme-container\"},k().createElement(u,{className:\"schemes wrapper\",mobile:12},b?k().createElement(m,null):null,j?k().createElement(d,null):null,_?k().createElement(h,null):null)):null,k().createElement(g,null),k().createElement(i,null,k().createElement(u,{mobile:12,desktop:12},k().createElement(o,null))),S&&k().createElement(i,{className:\"webhooks-container\"},k().createElement(u,{mobile:12,desktop:12},k().createElement(c,null))),k().createElement(i,null,k().createElement(u,{mobile:12,desktop:12},k().createElement(l,null)))))}}const Yn=require(\"react-debounce-input\");var Qn=n.n(Yn);const es={value:\"\",onChange:()=>{},schema:{},keyName:\"\",required:!1,errors:(0,I.List)()};class ts extends O.Component{componentDidMount(){const{dispatchInitialValue:e,value:t,onChange:n}=this.props;e?n(t):!1===e&&n(\"\")}render(){let{schema:e,errors:t,value:n,onChange:s,getComponent:r,fn:a,disabled:o}=this.props;const l=e&&e.get?e.get(\"format\"):null,c=e&&e.get?e.get(\"type\"):null;let i=e=>r(e,!1,{failSilently:!0}),u=c?i(l?`JsonSchema_${c}_${l}`:`JsonSchema_${c}`):r(\"JsonSchema_string\");return u||(u=r(\"JsonSchema_string\")),k().createElement(u,Ht()({},this.props,{errors:t,fn:a,getComponent:r,value:n,onChange:s,schema:e,disabled:o}))}}ie()(ts,\"defaultProps\",es);class ns extends O.Component{constructor(){super(...arguments),ie()(this,\"onChange\",(e=>{const t=this.props.schema&&\"file\"===this.props.schema.get(\"type\")?e.target.files[0]:e.target.value;this.props.onChange(t,this.props.keyName)})),ie()(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,schema:n,errors:s,required:r,description:a,disabled:o}=this.props;const l=n&&n.get?n.get(\"enum\"):null,c=n&&n.get?n.get(\"format\"):null,i=n&&n.get?n.get(\"type\"):null,u=n&&n.get?n.get(\"in\"):null;if(t||(t=\"\"),s=s.toJS?s.toJS():[],l){const n=e(\"Select\");return k().createElement(n,{className:s.length?\"invalid\":\"\",title:s.length?s:\"\",allowedValues:[...l],value:t,allowEmptyValue:!r,disabled:o,onChange:this.onEnumChange})}const p=o||u&&\"formData\"===u&&!(\"FormData\"in window),m=e(\"Input\");return i&&\"file\"===i?k().createElement(m,{type:\"file\",className:s.length?\"invalid\":\"\",title:s.length?s:\"\",onChange:this.onChange,disabled:p}):k().createElement(Qn(),{type:c&&\"password\"===c?\"password\":\"text\",className:s.length?\"invalid\":\"\",title:s.length?s:\"\",value:t,minLength:0,debounceTimeout:350,placeholder:a,onChange:this.onChange,disabled:p})}}ie()(ns,\"defaultProps\",es);class ss extends O.PureComponent{constructor(e,t){super(e,t),ie()(this,\"onChange\",(()=>{this.props.onChange(this.state.value)})),ie()(this,\"onItemChange\",((e,t)=>{this.setState((n=>{let{value:s}=n;return{value:s.set(t,e)}}),this.onChange)})),ie()(this,\"removeItem\",(e=>{this.setState((t=>{let{value:n}=t;return{value:n.delete(e)}}),this.onChange)})),ie()(this,\"addItem\",(()=>{const{fn:e}=this.props;let t=is(this.state.value);this.setState((()=>({value:t.push(e.getSampleSchema(this.state.schema.get(\"items\"),!1,{includeWriteOnly:!0}))})),this.onChange)})),ie()(this,\"onEnumChange\",(e=>{this.setState((()=>({value:e})),this.onChange)})),this.state={value:is(e.value),schema:e.schema}}UNSAFE_componentWillReceiveProps(e){const t=is(e.value);t!==this.state.value&&this.setState({value:t}),e.schema!==this.state.schema&&this.setState({schema:e.schema})}render(){var e;let{getComponent:t,required:n,schema:s,errors:r,fn:a,disabled:o}=this.props;r=r.toJS?r.toJS():x()(r)?r:[];const c=l()(r).call(r,(e=>\"string\"==typeof e)),i=j()(e=l()(r).call(r,(e=>void 0!==e.needRemove))).call(e,(e=>e.error)),u=this.state.value,p=!!(u&&u.count&&u.count()>0),m=s.getIn([\"items\",\"enum\"]),d=s.getIn([\"items\",\"type\"]),h=s.getIn([\"items\",\"format\"]),g=s.get(\"items\");let f,y=!1,S=\"file\"===d||\"string\"===d&&\"binary\"===h;if(d&&h?f=t(`JsonSchema_${d}_${h}`):\"boolean\"!==d&&\"array\"!==d&&\"object\"!==d||(f=t(`JsonSchema_${d}`)),f||S||(y=!0),m){const e=t(\"Select\");return k().createElement(e,{className:r.length?\"invalid\":\"\",title:r.length?r:\"\",multiple:!0,value:u,disabled:o,allowedValues:m,allowEmptyValue:!n,onChange:this.onEnumChange})}const v=t(\"Button\");return k().createElement(\"div\",{className:\"json-schema-array\"},p?j()(u).call(u,((e,n)=>{var s;const c=(0,I.fromJS)([...j()(s=l()(r).call(r,(e=>e.index===n))).call(s,(e=>e.error))]);return k().createElement(\"div\",{key:n,className:\"json-schema-form-item\"},S?k().createElement(as,{value:e,onChange:e=>this.onItemChange(e,n),disabled:o,errors:c,getComponent:t}):y?k().createElement(rs,{value:e,onChange:e=>this.onItemChange(e,n),disabled:o,errors:c}):k().createElement(f,Ht()({},this.props,{value:e,onChange:e=>this.onItemChange(e,n),disabled:o,errors:c,schema:g,getComponent:t,fn:a})),o?null:k().createElement(v,{className:`btn btn-sm json-schema-form-item-remove ${i.length?\"invalid\":null}`,title:i.length?i:\"\",onClick:()=>this.removeItem(n)},\" - \"))})):null,o?null:k().createElement(v,{className:`btn btn-sm json-schema-form-item-add ${c.length?\"invalid\":null}`,title:c.length?c:\"\",onClick:this.addItem},\"Add \",d?`${d} `:\"\",\"item\"))}}ie()(ss,\"defaultProps\",es);class rs extends O.Component{constructor(){super(...arguments),ie()(this,\"onChange\",(e=>{const t=e.target.value;this.props.onChange(t,this.props.keyName)}))}render(){let{value:e,errors:t,description:n,disabled:s}=this.props;return e||(e=\"\"),t=t.toJS?t.toJS():[],k().createElement(Qn(),{type:\"text\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",value:e,minLength:0,debounceTimeout:350,placeholder:n,onChange:this.onChange,disabled:s})}}ie()(rs,\"defaultProps\",es);class as extends O.Component{constructor(){super(...arguments),ie()(this,\"onFileChange\",(e=>{const t=e.target.files[0];this.props.onChange(t,this.props.keyName)}))}render(){let{getComponent:e,errors:t,disabled:n}=this.props;const s=e(\"Input\"),r=n||!(\"FormData\"in window);return k().createElement(s,{type:\"file\",className:t.length?\"invalid\":\"\",title:t.length?t:\"\",onChange:this.onFileChange,disabled:r})}}ie()(as,\"defaultProps\",es);class os extends O.Component{constructor(){super(...arguments),ie()(this,\"onEnumChange\",(e=>this.props.onChange(e)))}render(){let{getComponent:e,value:t,errors:n,schema:s,required:r,disabled:a}=this.props;n=n.toJS?n.toJS():[];let o=s&&s.get?s.get(\"enum\"):null,l=!o||!r,c=!o&&[\"true\",\"false\"];const i=e(\"Select\");return k().createElement(i,{className:n.length?\"invalid\":\"\",title:n.length?n:\"\",value:String(t),disabled:a,allowedValues:o?[...o]:c,allowEmptyValue:l,onChange:this.onEnumChange})}}ie()(os,\"defaultProps\",es);const ls=e=>j()(e).call(e,(e=>{const t=void 0!==e.propKey?e.propKey:e.index;let n=\"string\"==typeof e?e:\"string\"==typeof e.error?e.error:null;if(!t&&n)return n;let s=e.error,r=`/${e.propKey}`;for(;\"object\"==typeof s;){const e=void 0!==s.propKey?s.propKey:s.index;if(void 0===e)break;if(r+=`/${e}`,!s.error)break;s=s.error}return`${r}: ${s}`}));class cs extends O.PureComponent{constructor(){super(),ie()(this,\"onChange\",(e=>{this.props.onChange(e)})),ie()(this,\"handleOnChange\",(e=>{const t=e.target.value;this.onChange(t)}))}render(){let{getComponent:e,value:t,errors:n,disabled:s}=this.props;const r=e(\"TextArea\");return n=n.toJS?n.toJS():x()(n)?n:[],k().createElement(\"div\",null,k().createElement(r,{className:ot()({invalid:n.length}),title:n.length?ls(n).join(\", \"):\"\",value:(0,$.Pz)(t),disabled:s,onChange:this.handleOnChange}))}}function is(e){return I.List.isList(e)?e:x()(e)?(0,I.fromJS)(e):(0,I.List)()}function us(){let n={components:{App:he,authorizationPopup:ge,authorizeBtn:fe,AuthorizeBtnContainer:ye,authorizeOperationBtn:Se,auths:ve,AuthItem:Ee,authError:xe,oauth2:Je,apiKeyAuth:we,basicAuth:Ce,clear:$e,liveResponse:Ve,InitializedInput:mn,info:fn,InfoContainer:yn,InfoUrl:hn,InfoBasePath:dn,Contact:vn,License:xn,JumpToPath:wn,CopyToClipboardBtn:Cn,onlineValidatorBadge:Ue.Z,operations:Fe,operation:We,OperationSummary:Ze,OperationSummaryMethod:Xe,OperationSummaryPath:et,highlightCode:ft,responses:yt,response:xt,ResponseExtension:wt,responseBody:kt,parameters:Pt,parameterRow:Dt,execute:Kt,headers:Lt,errors:Vt,contentType:Bt,overview:un,footer:bn,FilterContainer:jn,ParamBody:Nn,curl:kn,schemes:An,SchemesContainer:In,modelExample:Tn,ModelWrapper:Mn,ModelCollapse:Pn,Model:Dn.Z,Models:Jn,EnumModel:$n,ObjectModel:Kn,ArrayModel:Ln,PrimitiveModel:Un,Property:Fn,TryItOutButton:zn,Markdown:Zn.Z,BaseLayout:Xn,VersionPragmaFilter:Bn,VersionStamp:Wn,OperationExt:tt,OperationExtRow:nt,ParameterExt:qt,ParameterIncludeEmpty:Tt,OperationTag:Be,OperationContainer:de,DeepLink:Hn,SvgAssets:Gn,Example:be,ExamplesSelect:Ne,ExamplesSelectValueRetainer:ke}},s={components:e},r={components:t};return[se.default,te.default,Y.default,G.default,H.default,B.default,W.default,Z.default,n,s,Q.default,r,ee.default,ne.default,re.default,ae.default,oe.default,X.default,(0,le.default)()]}ie()(cs,\"defaultProps\",es);var ps=n(7451),ms=n(9806),ds=n(7139);function hs(){return[us,ps.default,ds.default,ms.default]}var gs=n(5308);const{GIT_DIRTY:fs,GIT_COMMIT:ys,PACKAGE_VERSION:Ss,BUILD_TIME:vs}={PACKAGE_VERSION:\"5.1.0\",GIT_COMMIT:\"gc1cc7a3\",GIT_DIRTY:!0,BUILD_TIME:\"Mon, 19 Jun 2023 09:16:14 GMT\"};function Es(e){var t;J.Z.versions=J.Z.versions||{},J.Z.versions.swaggerUi={version:Ss,gitRevision:ys,gitDirty:fs,buildTimestamp:vs};const n={dom_id:null,domNode:null,spec:{},url:\"\",urls:null,layout:\"BaseLayout\",docExpansion:\"list\",maxDisplayedTags:null,filter:null,validatorUrl:\"https://validator.swagger.io/validator\",oauth2RedirectUrl:`${window.location.protocol}//${window.location.host}${window.location.pathname.substring(0,a()(t=window.location.pathname).call(t,\"/\"))}/oauth2-redirect.html`,persistAuthorization:!1,configs:{},custom:{},displayOperationId:!1,displayRequestDuration:!1,deepLinking:!1,tryItOutEnabled:!1,requestInterceptor:e=>e,responseInterceptor:e=>e,showMutatedRequest:!0,defaultModelRendering:\"example\",defaultModelExpandDepth:1,defaultModelsExpandDepth:1,showExtensions:!1,showCommonExtensions:!1,withCredentials:void 0,requestSnippetsEnabled:!1,requestSnippets:{generators:{curl_bash:{title:\"cURL (bash)\",syntax:\"bash\"},curl_powershell:{title:\"cURL (PowerShell)\",syntax:\"powershell\"},curl_cmd:{title:\"cURL (CMD)\",syntax:\"bash\"}},defaultExpanded:!0,languages:null},supportedSubmitMethods:[\"get\",\"put\",\"post\",\"delete\",\"options\",\"head\",\"patch\",\"trace\"],queryConfigEnabled:!1,presets:[hs],plugins:[],pluginsOptions:{pluginLoadType:\"legacy\"},initialState:{},fn:{},components:{},syntaxHighlight:{activated:!0,theme:\"agate\"}};let s=e.queryConfigEnabled?(0,$.UG)():{};const r=e.domNode;delete e.domNode;const o=d()({},n,e,s),c={system:{configs:o.configs},plugins:o.presets,pluginsOptions:o.pluginsOptions,state:d()({layout:{layout:o.layout,filter:l()(o)},spec:{spec:\"\",url:o.url},requestSnippets:o.requestSnippets},o.initialState)};if(o.initialState)for(var u in o.initialState)Object.prototype.hasOwnProperty.call(o.initialState,u)&&void 0===o.initialState[u]&&delete c.state[u];var m=new L(c);m.register([o.plugins,()=>({fn:o.fn,components:o.components,state:o.state})]);var h=m.getSystem();const g=e=>{let t=h.specSelectors.getLocalConfig?h.specSelectors.getLocalConfig():{},n=d()({},t,o,e||{},s);if(r&&(n.domNode=r),m.setConfigs(n),h.configsActions.loaded(),null!==e&&(!s.url&&\"object\"==typeof n.spec&&i()(n.spec).length?(h.specActions.updateUrl(\"\"),h.specActions.updateLoadingStatus(\"success\"),h.specActions.updateSpec(p()(n.spec))):h.specActions.download&&n.url&&!n.urls&&(h.specActions.updateUrl(n.url),h.specActions.download(n.url))),n.domNode)h.render(n.domNode,\"App\");else if(n.dom_id){let e=document.querySelector(n.dom_id);h.render(e,\"App\")}else null===n.dom_id||null===n.domNode||console.error(\"Skipped rendering: no `dom_id` or `domNode` was specified\");return h},f=s.config||o.configUrl;return f&&h.specActions&&h.specActions.getConfigByUrl?(h.specActions.getConfigByUrl({url:f,loadRemoteConfig:!0,requestInterceptor:o.requestInterceptor,responseInterceptor:o.responseInterceptor},g),h):g()}Es.presets={apis:hs},Es.plugins=gs.default;const xs=Es})(),s=s.default})()));\n//# sourceMappingURL=swagger-ui.js.map"
  },
  {
    "path": "data/web/autoconfig.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';\n$default_autodiscover_config = $autodiscover_config;\nif(file_exists('inc/vars.local.inc.php')) {\n  include_once 'inc/vars.local.inc.php';\n}\n$autodiscover_config = array_merge($default_autodiscover_config, $autodiscover_config);\n\nerror_reporting(0);\n\nif (empty($mailcow_hostname)) {\n  exit();\n}\n\n$domain_dot = strpos($_SERVER['HTTP_HOST'], '.');\n$domain_port = strpos($_SERVER['HTTP_HOST'], ':');\nif ($domain_port === FALSE) {\n  $domain = substr($_SERVER['HTTP_HOST'], $domain_dot+1);\n  $port = 443;\n}\nelse {\n  $domain = substr($_SERVER['HTTP_HOST'], $domain_dot+1, $domain_port-$domain_dot-1);\n  $port = substr($_SERVER['HTTP_HOST'], $domain_port+1);\n}\n\nheader('Content-Type: application/xml');\n?>\n<?= '<?xml version=\"1.0\"?>'; ?>\n<clientConfig version=\"1.1\">\n    <emailProvider id=\"<?=$mailcow_hostname; ?>\">\n      <domain>%EMAILDOMAIN%</domain>\n      <displayName><?=$autodiscover_config['displayName']; ?></displayName>\n      <displayShortName><?=$autodiscover_config['displayShortName']; ?></displayShortName>\n\n      <incomingServer type=\"imap\">\n         <hostname><?=$autodiscover_config['imap']['server']; ?></hostname>\n         <port><?=$autodiscover_config['imap']['port']; ?></port>\n         <socketType>SSL</socketType>\n         <username>%EMAILADDRESS%</username>\n         <authentication>password-cleartext</authentication>\n      </incomingServer>\n      <incomingServer type=\"imap\">\n         <hostname><?=$autodiscover_config['imap']['server']; ?></hostname>\n         <port><?=$autodiscover_config['imap']['tlsport']; ?></port>\n         <socketType>STARTTLS</socketType>\n         <username>%EMAILADDRESS%</username>\n         <authentication>password-cleartext</authentication>\n      </incomingServer>\n\n<?php\n$records = dns_get_record('_pop3s._tcp.' . $domain, DNS_SRV); // check if POP3 is announced as \"not provided\" via SRV record\nif (count($records) == 0 || $records[0]['target'] != '') { ?>\n      <incomingServer type=\"pop3\">\n         <hostname><?=$autodiscover_config['pop3']['server']; ?></hostname>\n         <port><?=$autodiscover_config['pop3']['port']; ?></port>\n         <socketType>SSL</socketType>\n         <username>%EMAILADDRESS%</username>\n         <authentication>password-cleartext</authentication>\n      </incomingServer>\n<?php } ?>\n<?php\n$records = dns_get_record('_pop3._tcp.' . $domain, DNS_SRV); // check if POP3 is announced as \"not provided\" via SRV record\nif (count($records) == 0 || $records[0]['target'] != '') { ?>\n      <incomingServer type=\"pop3\">\n         <hostname><?=$autodiscover_config['pop3']['server']; ?></hostname>\n         <port><?=$autodiscover_config['pop3']['tlsport']; ?></port>\n         <socketType>STARTTLS</socketType>\n         <username>%EMAILADDRESS%</username>\n         <authentication>password-cleartext</authentication>\n      </incomingServer>\n<?php } ?>\n\n      <outgoingServer type=\"smtp\">\n         <hostname><?=$autodiscover_config['smtp']['server']; ?></hostname>\n         <port><?=$autodiscover_config['smtp']['port']; ?></port>\n         <socketType>SSL</socketType>\n         <username>%EMAILADDRESS%</username>\n         <authentication>password-cleartext</authentication>\n      </outgoingServer>\n      <outgoingServer type=\"smtp\">\n         <hostname><?=$autodiscover_config['smtp']['server']; ?></hostname>\n         <port><?=$autodiscover_config['smtp']['tlsport']; ?></port>\n         <socketType>STARTTLS</socketType>\n         <username>%EMAILADDRESS%</username>\n         <authentication>password-cleartext</authentication>\n      </outgoingServer>\n\n      <enable visiturl=\"https://<?=$mailcow_hostname; ?><?php if ($port != 443) echo ':'.$port; ?>/admin\">\n         <instruction>If you didn't change the password given to you by the administrator or if you didn't change it in a long time, please consider doing that now.</instruction>\n         <instruction lang=\"de\">Sollten Sie das Ihnen durch den Administrator vergebene Passwort noch nicht geändert haben, empfehlen wir dies nun zu tun. Auch ein altes Passwort sollte aus Sicherheitsgründen geändert werden.</instruction>\n      </enable>\n\n    </emailProvider>\n\n    <webMail>\n      <loginPage url=\"https://<?=$mailcow_hostname; ?><?php if ($port != 443) echo ':'.$port; ?>/SOGo/\" />\n    </webMail>\n</clientConfig>\n"
  },
  {
    "path": "data/web/autodiscover-json.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php';\n$default_autodiscover_config = $autodiscover_config;\nif(file_exists('inc/vars.local.inc.php')) {\n  include_once 'inc/vars.local.inc.php';\n}\n$autodiscover_config = array_merge($default_autodiscover_config, $autodiscover_config);\n\nheader('Content-type: application/json');\nif (strtolower($_GET['Protocol']) == 'activesync' && getenv('SKIP_SOGO') != \"y\") {\n  echo '{\"Protocol\":\"ActiveSync\",\"Url\":\"' . $autodiscover_config['activesync']['url'] . '\"}';\n}\nelseif (strtolower($_GET['Protocol']) == 'autodiscoverv1') {\n  echo '{\"Protocol\":\"AutodiscoverV1\",\"Url\":\"https://' . $_SERVER['HTTP_HOST'] . '/Autodiscover/Autodiscover.xml\"}';\n}\nelse {\n  http_response_code(400);\n  echo '{\"ErrorCode\":\"InvalidProtocol\",\"ErrorMessage\":\"The given protocol value \\u0027' . preg_replace(\"/[^\\da-z]/i\", '', $_GET['Protocol']) . '\\u0027 is invalid. Supported values are \\u0027ActiveSync,AutodiscoverV1\\u0027\"}';\n}\n?>\n"
  },
  {
    "path": "data/web/autodiscover.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/lib/vendor/autoload.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';\nif(file_exists('inc/vars.local.inc.php')) {\n  include_once 'inc/vars.local.inc.php';\n}\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.auth.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/sessions.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.mailbox.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.ratelimit.inc.php';\n$default_autodiscover_config = $autodiscover_config;\n$autodiscover_config = array_merge($default_autodiscover_config, $autodiscover_config);\n\n// Redis\n$redis = new Redis();\ntry {\n  if (!empty(getenv('REDIS_SLAVEOF_IP'))) {\n    $redis->connect(getenv('REDIS_SLAVEOF_IP'), getenv('REDIS_SLAVEOF_PORT'));\n  }\n  else {\n    $redis->connect('redis-mailcow', 6379);\n  }\n  $redis->auth(getenv(\"REDISPASS\"));\n}\ncatch (Exception $e) {\n  exit;\n}\n\nerror_reporting(0);\n\n$data = trim(file_get_contents(\"php://input\"));\n\nif (strpos($data, 'autodiscover/outlook/responseschema') !== false) {\n  $autodiscover_config['autodiscoverType'] = 'imap';\n  if ($autodiscover_config['useEASforOutlook'] == 'yes' &&\n    // Office for macOS does not support EAS\n    strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false &&\n    // Outlook 2013 (version 15) or higher\n    preg_match('/(Outlook|Office).+1[5-9]\\./', $_SERVER['HTTP_USER_AGENT'])\n  ) {\n    $autodiscover_config['autodiscoverType'] = 'activesync';\n  }\n}\n\nif (getenv('SKIP_SOGO') == \"y\") {\n  $autodiscover_config['autodiscoverType'] = 'imap';\n}\n\n//$dsn = $database_type . \":host=\" . $database_host . \";dbname=\" . $database_name;\n$dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\n$opt = [\n  PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n  PDO::ATTR_EMULATE_PREPARES   => false,\n];\n$pdo = new PDO($dsn, $database_user, $database_pass, $opt);\n\n// Init Identity Provider\n$iam_provider = identity_provider('init');\n$iam_settings = identity_provider('get');\n\n// Passwordless autodiscover - no authentication required\n// Email will be extracted from the request body\n$login_user = null;\n$login_role = null;\n\nheader(\"Content-Type: application/xml\");\necho '<?xml version=\"1.0\" encoding=\"utf-8\" ?>' . PHP_EOL;\n?>\n<Autodiscover xmlns=\"http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006\">\n<?php\nif(!$data) {\n  try {\n    $json = json_encode(\n      array(\n        \"time\" => time(),\n        \"ua\" => $_SERVER['HTTP_USER_AGENT'],\n        \"user\" => \"none\",\n        \"ip\" => $_SERVER['REMOTE_ADDR'],\n        \"service\" => \"Error: invalid or missing request data\"\n      )\n    );\n    $redis->lPush('AUTODISCOVER_LOG', $json);\n    $redis->lTrim('AUTODISCOVER_LOG', 0, 100);\n    $redis->publish(\"F2B_CHANNEL\", \"Autodiscover: Invalid request by \" . $_SERVER['REMOTE_ADDR']);\n    error_log(\"Autodiscover: Invalid request by \" . $_SERVER['REMOTE_ADDR']);\n  }\n  catch (RedisException $e) {\n    $_SESSION['return'][] = array(\n      'type' => 'danger',\n      'msg' => 'Redis: '.$e\n    );\n    return false;\n  }\n  list($usec, $sec) = explode(' ', microtime());\n?>\n  <Response>\n    <Error Time=\"<?=date('H:i:s', $sec) . substr($usec, 0, strlen($usec) - 2);?>\" Id=\"<?=rand(1000000000, 9999999999);?>\">\n      <ErrorCode>600</ErrorCode>\n      <Message>Invalid Request</Message>\n      <DebugData />\n    </Error>\n  </Response>\n</Autodiscover>\n<?php\n  exit(0);\n}\ntry {\n  $discover = new SimpleXMLElement($data);\n  $email = $discover->Request->EMailAddress;\n} catch (Exception $e) {\n  // If parsing fails, return error\n  try {\n    $json = json_encode(\n      array(\n        \"time\" => time(),\n        \"ua\" => $_SERVER['HTTP_USER_AGENT'],\n        \"user\" => \"none\",\n        \"ip\" => $_SERVER['REMOTE_ADDR'],\n        \"service\" => \"Error: could not parse email from request\"\n      )\n    );\n    $redis->lPush('AUTODISCOVER_LOG', $json);\n    $redis->lTrim('AUTODISCOVER_LOG', 0, 100);\n    $redis->publish(\"F2B_CHANNEL\", \"Autodiscover: Malformed XML by \" . $_SERVER['REMOTE_ADDR']);\n    error_log(\"Autodiscover: Malformed XML by \" . $_SERVER['REMOTE_ADDR']);\n  }\n  catch (RedisException $e) {\n    // Silently fail\n  }\n  list($usec, $sec) = explode(' ', microtime());\n?>\n  <Response>\n    <Error Time=\"<?=date('H:i:s', $sec) . substr($usec, 0, strlen($usec) - 2);?>\" Id=\"<?=rand(1000000000, 9999999999);?>\">\n      <ErrorCode>600</ErrorCode>\n      <Message>Invalid Request</Message>\n      <DebugData />\n    </Error>\n  </Response>\n</Autodiscover>\n<?php\n  exit(0);\n}\n\n$username = trim((string)$email);\ntry {\n  $stmt = $pdo->prepare(\"SELECT `mailbox`.`name`, `mailbox`.`active` FROM `mailbox` \n    INNER JOIN `domain` ON `mailbox`.`domain` = `domain`.`domain`\n    WHERE `mailbox`.`username` = :username \n    AND `mailbox`.`active` = '1'\n    AND `domain`.`active` = '1'\");\n  $stmt->execute(array(':username' => $username));\n  $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);\n}\ncatch(PDOException $e) {\n  // Database error - return error response with complete XML\n  list($usec, $sec) = explode(' ', microtime());\n?>\n  <Response>\n    <Error Time=\"<?=date('H:i:s', $sec) . substr($usec, 0, strlen($usec) - 2);?>\" Id=\"<?=rand(1000000000, 9999999999);?>\">\n      <ErrorCode>500</ErrorCode>\n      <Message>Database Error</Message>\n      <DebugData />\n    </Error>\n  </Response>\n</Autodiscover>\n<?php\n  exit(0);\n}\n\n// Mailbox not found or not active - return generic error to prevent user enumeration\nif (empty($MailboxData)) {\n  try {\n    $json = json_encode(\n      array(\n        \"time\" => time(),\n        \"ua\" => $_SERVER['HTTP_USER_AGENT'],\n        \"user\" => $email,\n        \"ip\" => $_SERVER['REMOTE_ADDR'],\n        \"service\" => \"Error: mailbox not found or inactive\"\n      )\n    );\n    $redis->lPush('AUTODISCOVER_LOG', $json);\n    $redis->lTrim('AUTODISCOVER_LOG', 0, 100);\n    $redis->publish(\"F2B_CHANNEL\", \"Autodiscover: Invalid mailbox attempt by \" . $_SERVER['REMOTE_ADDR']);\n    error_log(\"Autodiscover: Invalid mailbox attempt by \" . $_SERVER['REMOTE_ADDR']);\n  }\n  catch (RedisException $e) {\n    // Silently fail\n  }\n  list($usec, $sec) = explode(' ', microtime());\n?>\n  <Response>\n    <Error Time=\"<?=date('H:i:s', $sec) . substr($usec, 0, strlen($usec) - 2);?>\" Id=\"<?=rand(1000000000, 9999999999);?>\">\n      <ErrorCode>600</ErrorCode>\n      <Message>Invalid Request</Message>\n      <DebugData />\n    </Error>\n  </Response>\n</Autodiscover>\n<?php\n  exit(0);\n}\n\nif (!empty($MailboxData['name'])) {\n  $displayname = $MailboxData['name'];\n}\nelse {\n  $displayname = $email;\n}\ntry {\n  $json = json_encode(\n    array(\n      \"time\" => time(),\n      \"ua\" => $_SERVER['HTTP_USER_AGENT'],\n      \"user\" => $email,\n      \"ip\" => $_SERVER['REMOTE_ADDR'],\n      \"service\" => $autodiscover_config['autodiscoverType']\n    )\n  );\n  $redis->lPush('AUTODISCOVER_LOG', $json);\n  $redis->lTrim('AUTODISCOVER_LOG', 0, 100);\n}\ncatch (RedisException $e) {\n  $_SESSION['return'][] = array(\n    'type' => 'danger',\n    'msg' => 'Redis: '.$e\n  );\n  return false;\n}\nif ($autodiscover_config['autodiscoverType'] == 'imap') {\n?>\n  <Response xmlns=\"http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a\">\n    <User>\n      <DisplayName><?=htmlspecialchars($displayname, ENT_XML1 | ENT_QUOTES, 'UTF-8');?></DisplayName>\n    </User>\n    <Account>\n      <AccountType>email</AccountType>\n      <Action>settings</Action>\n      <Protocol>\n        <Type>IMAP</Type>\n        <Server><?=$autodiscover_config['imap']['server'];?></Server>\n        <Port><?=$autodiscover_config['imap']['port'];?></Port>\n        <DomainRequired>off</DomainRequired>\n        <LoginName><?=$email;?></LoginName>\n        <SPA>off</SPA>\n        <SSL>on</SSL>\n        <AuthRequired>on</AuthRequired>\n      </Protocol>\n      <Protocol>\n        <Type>SMTP</Type>\n        <Server><?=$autodiscover_config['smtp']['server'];?></Server>\n        <Port><?=$autodiscover_config['smtp']['port'];?></Port>\n        <DomainRequired>off</DomainRequired>\n        <LoginName><?=$email;?></LoginName>\n        <SPA>off</SPA>\n        <SSL>on</SSL>\n        <AuthRequired>on</AuthRequired>\n        <UsePOPAuth>on</UsePOPAuth>\n        <SMTPLast>off</SMTPLast>\n      </Protocol>\n    <?php\n    if (getenv('SKIP_SOGO') != \"y\") {\n    ?>\n      <Protocol>\n        <Type>CalDAV</Type>\n        <Server>https://<?=$autodiscover_config['caldav']['server'];?><?php if ($autodiscover_config['caldav']['port'] != 443) echo ':'.$autodiscover_config['caldav']['port']; ?>/SOGo/dav/<?=$email;?>/</Server>\n        <DomainRequired>off</DomainRequired>\n        <LoginName><?=$email;?></LoginName>\n      </Protocol>\n      <Protocol>\n        <Type>CardDAV</Type>\n        <Server>https://<?=$autodiscover_config['carddav']['server'];?><?php if ($autodiscover_config['caldav']['port'] != 443) echo ':'.$autodiscover_config['carddav']['port']; ?>/SOGo/dav/<?=$email;?>/</Server>\n        <DomainRequired>off</DomainRequired>\n        <LoginName><?=$email;?></LoginName>\n      </Protocol>\n    <?php\n    }\n    ?>\n    </Account>\n  </Response>\n<?php\n  }\n  else if ($autodiscover_config['autodiscoverType'] == 'activesync') {\n?>\n  <Response xmlns=\"http://schemas.microsoft.com/exchange/autodiscover/mobilesync/responseschema/2006\">\n    <Culture>en:en</Culture>\n    <User>\n      <DisplayName><?=htmlspecialchars($displayname, ENT_XML1 | ENT_QUOTES, 'UTF-8');?></DisplayName>\n      <EMailAddress><?=$email;?></EMailAddress>\n    </User>\n    <Action>\n      <Settings>\n        <Server>\n        <Type>MobileSync</Type>\n        <Url><?=$autodiscover_config['activesync']['url'];?></Url>\n        <Name><?=$autodiscover_config['activesync']['url'];?></Name>\n        </Server>\n      </Settings>\n    </Action>\n  </Response>\n<?php\n  }\n?>\n</Autodiscover>\n"
  },
  {
    "path": "data/web/css/build/003-bootstrap-select.css",
    "content": "/*!\r\n * Bootstrap-select v1.14.0-beta2 (https://developer.snapappointments.com/bootstrap-select)\r\n *\r\n * Copyright 2012-2021 SnapAppointments, LLC\r\n * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)\r\n */\r\n\r\n@-webkit-keyframes bs-notify-fadeOut {\n  0% {\n    opacity: 0.9;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-o-keyframes bs-notify-fadeOut {\n  0% {\n    opacity: 0.9;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes bs-notify-fadeOut {\n  0% {\n    opacity: 0.9;\n  }\n  100% {\n    opacity: 0;\n  }\n}\nselect.bs-select-hidden,\n.bootstrap-select > select.bs-select-hidden,\nselect.selectpicker {\n  display: none !important;\n}\n.bootstrap-select {\n  width: 220px \\0;\n  /*IE9 and below*/\n  vertical-align: middle;\n}\n.bootstrap-select > .dropdown-toggle {\n  position: relative;\n  width: 100%;\n  text-align: right;\n  white-space: nowrap;\n  display: -webkit-inline-box;\n  display: -webkit-inline-flex;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: justify;\n  -webkit-justify-content: space-between;\n      -ms-flex-pack: justify;\n          justify-content: space-between;\n}\n.bootstrap-select > .dropdown-toggle:after {\n  margin-top: -1px;\n}\n.bootstrap-select > .dropdown-toggle.bs-placeholder,\n.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder:active {\n  color: #999;\n}\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active,\n.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active {\n  color: rgba(255, 255, 255, 0.5);\n}\n.bootstrap-select > select {\n  position: absolute !important;\n  bottom: 0;\n  left: 50%;\n  display: block !important;\n  width: 0.5px !important;\n  height: 100% !important;\n  padding: 0 !important;\n  opacity: 0 !important;\n  border: none;\n  z-index: 0 !important;\n}\n.bootstrap-select > select.mobile-device {\n  top: 0;\n  left: 0;\n  display: block !important;\n  width: 100% !important;\n  z-index: 2 !important;\n}\n.has-error .bootstrap-select .dropdown-toggle,\n.error .bootstrap-select .dropdown-toggle,\n.bootstrap-select.is-invalid .dropdown-toggle,\n.was-validated .bootstrap-select select:invalid + .dropdown-toggle {\n  border-color: #b94a48;\n}\n.bootstrap-select.is-valid .dropdown-toggle,\n.was-validated .bootstrap-select select:valid + .dropdown-toggle {\n  border-color: #28a745;\n}\n.bootstrap-select.fit-width {\n  width: auto !important;\n}\n.bootstrap-select:not([class*=\"col-\"]):not([class*=\"form-control\"]):not(.input-group-btn) {\n  width: 220px;\n}\n.bootstrap-select > select.mobile-device:focus + .dropdown-toggle,\n.bootstrap-select .dropdown-toggle:focus {\n  outline: thin dotted #333333 !important;\n  outline: 5px auto -webkit-focus-ring-color !important;\n  outline-offset: -2px;\n}\n.bootstrap-select.form-control {\n  margin-bottom: 0;\n  padding: 0;\n  border: none;\n  height: auto;\n}\n:not(.input-group) > .bootstrap-select.form-control:not([class*=\"col-\"]) {\n  width: 100%;\n}\n.bootstrap-select.form-control.input-group-btn {\n  float: none;\n  z-index: auto;\n}\n.form-inline .bootstrap-select,\n.form-inline .bootstrap-select.form-control:not([class*=\"col-\"]) {\n  width: auto;\n}\n.bootstrap-select:not(.input-group-btn),\n.bootstrap-select[class*=\"col-\"] {\n  float: none;\n  display: inline-block;\n  margin-left: 0;\n}\n.bootstrap-select.dropdown-menu-right,\n.bootstrap-select[class*=\"col-\"].dropdown-menu-right,\n.row .bootstrap-select[class*=\"col-\"].dropdown-menu-right {\n  float: right;\n}\n.form-inline .bootstrap-select,\n.form-horizontal .bootstrap-select,\n.form-group .bootstrap-select {\n  margin-bottom: 0;\n}\n.form-group-lg .bootstrap-select.form-control,\n.form-group-sm .bootstrap-select.form-control {\n  padding: 0;\n}\n.form-group-lg .bootstrap-select.form-control .dropdown-toggle,\n.form-group-sm .bootstrap-select.form-control .dropdown-toggle {\n  height: 100%;\n  font-size: inherit;\n  line-height: inherit;\n  border-radius: inherit;\n}\n.bootstrap-select.form-control-sm .dropdown-toggle,\n.bootstrap-select.form-control-lg .dropdown-toggle {\n  font-size: inherit;\n  line-height: inherit;\n  border-radius: inherit;\n}\n.bootstrap-select.form-control-sm .dropdown-toggle {\n  padding: 0.25rem 0.5rem;\n}\n.bootstrap-select.form-control-lg .dropdown-toggle {\n  padding: 0.5rem 1rem;\n}\n.form-inline .bootstrap-select .form-control {\n  width: 100%;\n}\n.bootstrap-select.disabled,\n.bootstrap-select > .disabled {\n  cursor: not-allowed;\n}\n.bootstrap-select.disabled:focus,\n.bootstrap-select > .disabled:focus {\n  outline: none !important;\n}\n.bootstrap-select.bs-container {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 0 !important;\n  padding: 0 !important;\n}\n.bootstrap-select.bs-container .dropdown-menu {\n  z-index: 1060;\n}\n.bootstrap-select .dropdown-toggle .filter-option {\n  position: static;\n  top: 0;\n  left: 0;\n  float: left;\n  height: 100%;\n  width: 100%;\n  text-align: left;\n  overflow: hidden;\n  -webkit-box-flex: 0;\n  -webkit-flex: 0 1 auto;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n}\n.bs3.bootstrap-select .dropdown-toggle .filter-option {\n  padding-right: inherit;\n}\n.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option {\n  position: absolute;\n  padding-top: inherit;\n  padding-bottom: inherit;\n  padding-left: inherit;\n  float: none;\n}\n.input-group .bs3-has-addon.bootstrap-select .dropdown-toggle .filter-option .filter-option-inner {\n  padding-right: inherit;\n}\n.bootstrap-select .dropdown-toggle .filter-option-inner-inner {\n  overflow: hidden;\n}\n.bootstrap-select .dropdown-toggle .filter-expand {\n  width: 0 !important;\n  float: left;\n  opacity: 0 !important;\n  overflow: hidden;\n}\n.bootstrap-select .dropdown-toggle .caret {\n  position: absolute;\n  top: 50%;\n  right: 12px;\n  margin-top: -2px;\n  vertical-align: middle;\n}\n.bootstrap-select .dropdown-toggle .bs-select-clear-selected {\n  position: relative;\n  display: block;\n  margin-right: 5px;\n  text-align: center;\n}\n.bs3.bootstrap-select .dropdown-toggle .bs-select-clear-selected {\n  padding-right: inherit;\n}\n.bootstrap-select .dropdown-toggle .bs-select-clear-selected span {\n  position: relative;\n  top: -webkit-calc(((-1em / 1.5) + 1ex) / 2);\n  top: calc(((-1em / 1.5) + 1ex) / 2);\n  pointer-events: none;\n}\n.bs3.bootstrap-select .dropdown-toggle .bs-select-clear-selected span {\n  top: auto;\n}\n.bootstrap-select .dropdown-toggle.bs-placeholder .bs-select-clear-selected {\n  display: none;\n}\n.input-group .bootstrap-select.form-control .dropdown-toggle {\n  border-radius: inherit;\n}\n.bootstrap-select[class*=\"col-\"] .dropdown-toggle {\n  width: 100%;\n}\n.bootstrap-select .dropdown-menu {\n  min-width: 100%;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.bootstrap-select .dropdown-menu > .inner:focus {\n  outline: none !important;\n}\n.bootstrap-select .dropdown-menu.inner {\n  position: static;\n  float: none;\n  border: 0;\n  padding: 0;\n  margin: 0;\n  border-radius: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.bootstrap-select .dropdown-menu li {\n  position: relative;\n}\n.bootstrap-select .dropdown-menu li.active small {\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n.bootstrap-select .dropdown-menu li.disabled a {\n  cursor: not-allowed;\n}\n.bootstrap-select .dropdown-menu li a {\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n.bootstrap-select .dropdown-menu li a.opt {\n  position: relative;\n  padding-left: 2.25em;\n}\n.bootstrap-select .dropdown-menu li a span.check-mark {\n  display: none;\n}\n.bootstrap-select .dropdown-menu li a span.text {\n  display: inline-block;\n}\n.bootstrap-select .dropdown-menu li small {\n  padding-left: 0.5em;\n}\n.bootstrap-select .dropdown-menu .notify {\n  position: absolute;\n  bottom: 5px;\n  width: 96%;\n  margin: 0 2%;\n  min-height: 26px;\n  padding: 3px 5px;\n  background: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n  pointer-events: none;\n  opacity: 0.9;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.bootstrap-select .dropdown-menu .notify.fadeOut {\n  -webkit-animation: 300ms linear 750ms forwards bs-notify-fadeOut;\n       -o-animation: 300ms linear 750ms forwards bs-notify-fadeOut;\n          animation: 300ms linear 750ms forwards bs-notify-fadeOut;\n}\n.bootstrap-select .no-results {\n  padding: 3px;\n  background: #f5f5f5;\n  margin: 0 5px;\n  white-space: nowrap;\n}\n.bootstrap-select.fit-width .dropdown-toggle .filter-option {\n  position: static;\n  display: inline;\n  padding: 0;\n}\n.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,\n.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner {\n  display: inline;\n}\n.bootstrap-select.fit-width .dropdown-toggle .bs-caret:before {\n  content: '\\00a0';\n}\n.bootstrap-select.fit-width .dropdown-toggle .caret {\n  position: static;\n  top: auto;\n  margin-top: -1px;\n}\n.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark {\n  position: absolute;\n  display: inline-block;\n  right: 15px;\n  top: 5px;\n}\n.bootstrap-select.show-tick .dropdown-menu li a span.text {\n  margin-right: 34px;\n}\n.bootstrap-select .bs-ok-default:after {\n  content: '';\n  display: block;\n  width: 0.5em;\n  height: 1em;\n  border-style: solid;\n  border-width: 0 0.26em 0.26em 0;\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n  -webkit-transform: rotate(45deg);\n      -ms-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle,\n.bootstrap-select.show-menu-arrow.show > .dropdown-toggle {\n  z-index: 1061;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before {\n  content: '';\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid rgba(204, 204, 204, 0.2);\n  position: absolute;\n  bottom: -4px;\n  left: 9px;\n  display: none;\n}\n.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after {\n  content: '';\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid white;\n  position: absolute;\n  bottom: -4px;\n  left: 10px;\n  display: none;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before {\n  bottom: auto;\n  top: -4px;\n  border-top: 7px solid rgba(204, 204, 204, 0.2);\n  border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after {\n  bottom: auto;\n  top: -4px;\n  border-top: 6px solid white;\n  border-bottom: 0;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before {\n  right: 12px;\n  left: auto;\n}\n.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after {\n  right: 13px;\n  left: auto;\n}\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before,\n.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before,\n.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after,\n.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after {\n  display: block;\n}\n.bs-searchbox,\n.bs-actionsbox,\n.bs-donebutton {\n  padding: 4px 8px;\n}\n.bs-actionsbox {\n  width: 100%;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.bs-actionsbox .btn-group {\n  display: block;\n}\n.bs-actionsbox .btn-group button {\n  width: 50%;\n}\n.bs-donebutton {\n  float: left;\n  width: 100%;\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n.bs-donebutton .btn-group {\n  display: block;\n}\n.bs-donebutton .btn-group button {\n  width: 100%;\n}\n.bs-searchbox + .bs-actionsbox {\n  padding: 0 8px 4px;\n}\n.bs-searchbox .form-control {\n  margin-bottom: 0;\n  width: 100%;\n  float: none;\n}\n/*# sourceMappingURL=bootstrap-select.css.map */"
  },
  {
    "path": "data/web/css/build/011-datatables.css",
    "content": "/*\n * This combined file was created by the DataTables downloader builder:\n *   https://datatables.net/download\n *\n * To rebuild or modify this file with the latest versions of the included\n * software please visit:\n *   https://datatables.net/download/#bs5/dt-1.13.1/r-2.4.0/sl-1.5.0\n *\n * Included libraries:\n *   DataTables 1.13.1, Responsive 2.4.0, Select 1.5.0\n */\n\n@charset \"UTF-8\";\ntable.dataTable td.dt-control {\n  text-align: center;\n  cursor: pointer;\n}\ntable.dataTable td.dt-control:before {\n  height: 1em;\n  width: 1em;\n  margin-top: -9px;\n  display: inline-block;\n  color: white;\n  border: 0.15em solid white;\n  border-radius: 1em;\n  box-shadow: 0 0 0.2em #444;\n  box-sizing: content-box;\n  text-align: center;\n  text-indent: 0 !important;\n  font-family: \"Courier New\", Courier, monospace;\n  line-height: 1em;\n  content: \"+\";\n  background-color: #31b131;\n}\ntable.dataTable tr.dt-hasChild td.dt-control:before {\n  content: \"-\";\n  background-color: #d33333;\n}\n\ntable.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc, table.dataTable thead > tr > th.sorting_asc_disabled, table.dataTable thead > tr > th.sorting_desc_disabled,\ntable.dataTable thead > tr > td.sorting,\ntable.dataTable thead > tr > td.sorting_asc,\ntable.dataTable thead > tr > td.sorting_desc,\ntable.dataTable thead > tr > td.sorting_asc_disabled,\ntable.dataTable thead > tr > td.sorting_desc_disabled {\n  cursor: pointer;\n  position: relative;\n  padding-right: 26px;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  position: absolute;\n  display: block;\n  opacity: 0.125;\n  right: 10px;\n  line-height: 9px;\n  font-size: 0.8em;\n}\ntable.dataTable thead > tr > th.sorting:before, table.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:before, table.dataTable thead > tr > th.sorting_asc_disabled:before, table.dataTable thead > tr > th.sorting_desc_disabled:before,\ntable.dataTable thead > tr > td.sorting:before,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:before,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:before {\n  bottom: 50%;\n  content: \"▲\";\n}\ntable.dataTable thead > tr > th.sorting:after, table.dataTable thead > tr > th.sorting_asc:after, table.dataTable thead > tr > th.sorting_desc:after, table.dataTable thead > tr > th.sorting_asc_disabled:after, table.dataTable thead > tr > th.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting:after,\ntable.dataTable thead > tr > td.sorting_asc:after,\ntable.dataTable thead > tr > td.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:after,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after {\n  top: 50%;\n  content: \"▼\";\n}\ntable.dataTable thead > tr > th.sorting_asc:before, table.dataTable thead > tr > th.sorting_desc:after,\ntable.dataTable thead > tr > td.sorting_asc:before,\ntable.dataTable thead > tr > td.sorting_desc:after {\n  opacity: 0.6;\n}\ntable.dataTable thead > tr > th.sorting_desc_disabled:after, table.dataTable thead > tr > th.sorting_asc_disabled:before,\ntable.dataTable thead > tr > td.sorting_desc_disabled:after,\ntable.dataTable thead > tr > td.sorting_asc_disabled:before {\n  display: none;\n}\ntable.dataTable thead > tr > th:active,\ntable.dataTable thead > tr > td:active {\n  outline: none;\n}\n\ndiv.dataTables_scrollBody table.dataTable thead > tr > th:before, div.dataTables_scrollBody table.dataTable thead > tr > th:after,\ndiv.dataTables_scrollBody table.dataTable thead > tr > td:before,\ndiv.dataTables_scrollBody table.dataTable thead > tr > td:after {\n  display: none;\n}\n\ndiv.dataTables_processing {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 200px;\n  margin-left: -100px;\n  margin-top: -26px;\n  text-align: center;\n  padding: 2px;\n}\ndiv.dataTables_processing > div:last-child {\n  position: relative;\n  width: 80px;\n  height: 15px;\n  margin: 1em auto;\n}\ndiv.dataTables_processing > div:last-child > div {\n  position: absolute;\n  top: 0;\n  width: 13px;\n  height: 13px;\n  border-radius: 50%;\n  background: rgba(13, 110, 253, 0.9);\n  animation-timing-function: cubic-bezier(0, 1, 1, 0);\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(1) {\n  left: 8px;\n  animation: datatables-loader-1 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(2) {\n  left: 8px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(3) {\n  left: 32px;\n  animation: datatables-loader-2 0.6s infinite;\n}\ndiv.dataTables_processing > div:last-child > div:nth-child(4) {\n  left: 56px;\n  animation: datatables-loader-3 0.6s infinite;\n}\n\n@keyframes datatables-loader-1 {\n  0% {\n    transform: scale(0);\n  }\n  100% {\n    transform: scale(1);\n  }\n}\n@keyframes datatables-loader-3 {\n  0% {\n    transform: scale(1);\n  }\n  100% {\n    transform: scale(0);\n  }\n}\n@keyframes datatables-loader-2 {\n  0% {\n    transform: translate(0, 0);\n  }\n  100% {\n    transform: translate(24px, 0);\n  }\n}\ntable.dataTable.nowrap th, table.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable th.dt-left,\ntable.dataTable td.dt-left {\n  text-align: left;\n}\ntable.dataTable th.dt-center,\ntable.dataTable td.dt-center,\ntable.dataTable td.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable th.dt-right,\ntable.dataTable td.dt-right {\n  text-align: right;\n}\ntable.dataTable th.dt-justify,\ntable.dataTable td.dt-justify {\n  text-align: justify;\n}\ntable.dataTable th.dt-nowrap,\ntable.dataTable td.dt-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable thead th,\ntable.dataTable thead td,\ntable.dataTable tfoot th,\ntable.dataTable tfoot td {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-left,\ntable.dataTable thead td.dt-head-left,\ntable.dataTable tfoot th.dt-head-left,\ntable.dataTable tfoot td.dt-head-left {\n  text-align: left;\n}\ntable.dataTable thead th.dt-head-center,\ntable.dataTable thead td.dt-head-center,\ntable.dataTable tfoot th.dt-head-center,\ntable.dataTable tfoot td.dt-head-center {\n  text-align: center;\n}\ntable.dataTable thead th.dt-head-right,\ntable.dataTable thead td.dt-head-right,\ntable.dataTable tfoot th.dt-head-right,\ntable.dataTable tfoot td.dt-head-right {\n  text-align: right;\n}\ntable.dataTable thead th.dt-head-justify,\ntable.dataTable thead td.dt-head-justify,\ntable.dataTable tfoot th.dt-head-justify,\ntable.dataTable tfoot td.dt-head-justify {\n  text-align: justify;\n}\ntable.dataTable thead th.dt-head-nowrap,\ntable.dataTable thead td.dt-head-nowrap,\ntable.dataTable tfoot th.dt-head-nowrap,\ntable.dataTable tfoot td.dt-head-nowrap {\n  white-space: nowrap;\n}\ntable.dataTable tbody th.dt-body-left,\ntable.dataTable tbody td.dt-body-left {\n  text-align: left;\n}\ntable.dataTable tbody th.dt-body-center,\ntable.dataTable tbody td.dt-body-center {\n  text-align: center;\n}\ntable.dataTable tbody th.dt-body-right,\ntable.dataTable tbody td.dt-body-right {\n  text-align: right;\n}\ntable.dataTable tbody th.dt-body-justify,\ntable.dataTable tbody td.dt-body-justify {\n  text-align: justify;\n}\ntable.dataTable tbody th.dt-body-nowrap,\ntable.dataTable tbody td.dt-body-nowrap {\n  white-space: nowrap;\n}\n\n/*! Bootstrap 5 integration for DataTables\n *\n * ©2020 SpryMedia Ltd, all rights reserved.\n * License: MIT datatables.net/license/mit\n */\ntable.dataTable {\n  clear: both;\n  margin-top: 6px !important;\n  margin-bottom: 6px !important;\n  max-width: none !important;\n  border-collapse: separate !important;\n  border-spacing: 0;\n}\ntable.dataTable td,\ntable.dataTable th {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\ntable.dataTable td.dataTables_empty,\ntable.dataTable th.dataTables_empty {\n  text-align: center;\n}\ntable.dataTable.nowrap th,\ntable.dataTable.nowrap td {\n  white-space: nowrap;\n}\ntable.dataTable.table-striped > tbody > tr:nth-of-type(2n+1) > * {\n  box-shadow: none;\n}\ntable.dataTable > tbody > tr {\n  background-color: transparent;\n}\ntable.dataTable > tbody > tr.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr.selected a {\n  color: #090a0b;\n}\ntable.dataTable.table-striped > tbody > tr.odd > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.05);\n}\ntable.dataTable.table-striped > tbody > tr.odd.selected > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.95);\n}\ntable.dataTable.table-hover > tbody > tr:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(0, 0, 0, 0.075);\n}\ntable.dataTable.table-hover > tbody > tr.selected:hover > * {\n  box-shadow: inset 0 0 0 9999px rgba(13, 110, 253, 0.975);\n}\n\ndiv.dataTables_wrapper div.dataTables_length label {\n  font-weight: normal;\n  text-align: left;\n  white-space: nowrap;\n}\ndiv.dataTables_wrapper div.dataTables_length select {\n  width: auto;\n  display: inline-block;\n}\ndiv.dataTables_wrapper div.dataTables_filter {\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_filter label {\n  font-weight: normal;\n  white-space: nowrap;\n  text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_filter input {\n  margin-left: 0.5em;\n  display: inline-block;\n  width: auto;\n}\ndiv.dataTables_wrapper div.dataTables_info {\n  padding-top: 0.85em;\n}\ndiv.dataTables_wrapper div.dataTables_paginate {\n  margin: 0;\n  white-space: nowrap;\n  text-align: right;\n}\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin: 2px 0;\n  white-space: nowrap;\n  justify-content: flex-end;\n}\ndiv.dataTables_wrapper div.dt-row {\n  position: relative;\n}\n\ndiv.dataTables_wrapper span.sorting-value {\n  display: none;\n}\n\ndiv.dataTables_scrollHead table.dataTable {\n  margin-bottom: 0 !important;\n}\n\ndiv.dataTables_scrollBody > table {\n  border-top: none;\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\ndiv.dataTables_scrollBody > table > thead .sorting:before,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:before,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:before,\ndiv.dataTables_scrollBody > table > thead .sorting:after,\ndiv.dataTables_scrollBody > table > thead .sorting_asc:after,\ndiv.dataTables_scrollBody > table > thead .sorting_desc:after {\n  display: none;\n}\ndiv.dataTables_scrollBody > table > tbody tr:first-child th,\ndiv.dataTables_scrollBody > table > tbody tr:first-child td {\n  border-top: none;\n}\n\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner {\n  box-sizing: content-box;\n}\ndiv.dataTables_scrollFoot > .dataTables_scrollFootInner > table {\n  margin-top: 0 !important;\n  border-top: none;\n}\n\n@media screen and (max-width: 767px) {\n  div.dataTables_wrapper div.dataTables_length,\ndiv.dataTables_wrapper div.dataTables_filter,\ndiv.dataTables_wrapper div.dataTables_info,\ndiv.dataTables_wrapper div.dataTables_paginate {\n    text-align: center;\n  }\n  div.dataTables_wrapper div.dataTables_paginate ul.pagination {\n    justify-content: center !important;\n  }\n}\ntable.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) {\n  padding-right: 20px;\n}\n\ntable.table-bordered.dataTable {\n  border-right-width: 0;\n}\ntable.table-bordered.dataTable thead tr:first-child th,\ntable.table-bordered.dataTable thead tr:first-child td {\n  border-top-width: 1px;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-left-width: 0;\n}\ntable.table-bordered.dataTable th:first-child, table.table-bordered.dataTable th:first-child,\ntable.table-bordered.dataTable td:first-child,\ntable.table-bordered.dataTable td:first-child {\n  border-left-width: 1px;\n}\ntable.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,\ntable.table-bordered.dataTable td:last-child,\ntable.table-bordered.dataTable td:last-child {\n  border-right-width: 1px;\n}\ntable.table-bordered.dataTable th,\ntable.table-bordered.dataTable td {\n  border-bottom-width: 1px;\n}\n\ndiv.dataTables_scrollHead table.table-bordered {\n  border-bottom-width: 0;\n}\n\ndiv.table-responsive > div.dataTables_wrapper > div.row {\n  margin: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child {\n  padding-left: 0;\n}\ndiv.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child {\n  padding-right: 0;\n}\n\n\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty {\n  cursor: default !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.child:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dataTables_empty:before {\n  display: none !important;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control {\n  position: relative;\n  padding-left: 30px;\n  cursor: pointer;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr > th.dtr-control:before {\n  top: 50%;\n  left: 5px;\n  height: 1em;\n  width: 1em;\n  margin-top: -9px;\n  display: block;\n  position: absolute;\n  color: white;\n  border: 0.15em solid white;\n  border-radius: 1em;\n  box-shadow: 0 0 0.2em #444;\n  box-sizing: content-box;\n  text-align: center;\n  text-indent: 0 !important;\n  font-family: \"Courier New\", Courier, monospace;\n  line-height: 1em;\n  content: \"+\";\n  background-color: #0d6efd;\n}\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed > tbody > tr.parent > th.dtr-control:before {\n  content: \"-\";\n  background-color: #d33333;\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control {\n  padding-left: 27px;\n}\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed.compact > tbody > tr > th.dtr-control:before {\n  left: 4px;\n  height: 14px;\n  width: 14px;\n  border-radius: 14px;\n  line-height: 14px;\n  text-indent: 3px;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control,\ntable.dataTable.dtr-column > tbody > tr > td.control,\ntable.dataTable.dtr-column > tbody > tr > th.control {\n  position: relative;\n  cursor: pointer;\n}\ntable.dataTable.dtr-column > tbody > tr > td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr > td.control:before,\ntable.dataTable.dtr-column > tbody > tr > th.control:before {\n  top: 50%;\n  left: 50%;\n  height: 0.8em;\n  width: 0.8em;\n  margin-top: -0.5em;\n  margin-left: -0.5em;\n  display: block;\n  position: absolute;\n  color: white;\n  border: 0.15em solid white;\n  border-radius: 1em;\n  box-shadow: 0 0 0.2em #444;\n  box-sizing: content-box;\n  text-align: center;\n  text-indent: 0 !important;\n  font-family: \"Courier New\", Courier, monospace;\n  line-height: 1em;\n  content: \"+\";\n  background-color: #0d6efd;\n}\ntable.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before,\ntable.dataTable.dtr-column > tbody > tr.parent td.control:before,\ntable.dataTable.dtr-column > tbody > tr.parent th.control:before {\n  content: \"-\";\n  background-color: #d33333;\n}\ntable.dataTable > tbody > tr.child {\n  padding: 0.5em 1em;\n}\ntable.dataTable > tbody > tr.child:hover {\n  background: transparent !important;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details {\n  display: inline-block;\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li {\n  border-bottom: 1px solid #efefef;\n  padding: 0.5em 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:first-child {\n  padding-top: 0;\n}\ntable.dataTable > tbody > tr.child ul.dtr-details > li:last-child {\n  border-bottom: none;\n}\ntable.dataTable > tbody > tr.child span.dtr-title {\n  display: inline-block;\n  min-width: 75px;\n  font-weight: bold;\n}\ndiv.dtr-modal {\n  position: fixed;\n  box-sizing: border-box;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 100;\n  padding: 10em 1em;\n}\ndiv.dtr-modal div.dtr-modal-display {\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  width: 50%;\n  height: 50%;\n  overflow: auto;\n  margin: auto;\n  z-index: 102;\n  overflow: auto;\n  background-color: #f5f5f7;\n  border: 1px solid black;\n  border-radius: 0.5em;\n  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.6);\n}\ndiv.dtr-modal div.dtr-modal-content {\n  position: relative;\n  padding: 1em;\n}\ndiv.dtr-modal div.dtr-modal-close {\n  position: absolute;\n  top: 6px;\n  right: 6px;\n  width: 22px;\n  height: 22px;\n  border: 1px solid #eaeaea;\n  background-color: #f9f9f9;\n  text-align: center;\n  border-radius: 3px;\n  cursor: pointer;\n  z-index: 12;\n}\ndiv.dtr-modal div.dtr-modal-close:hover {\n  background-color: #eaeaea;\n}\ndiv.dtr-modal div.dtr-modal-background {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  z-index: 101;\n  background: rgba(0, 0, 0, 0.6);\n}\n\n@media screen and (max-width: 767px) {\n  div.dtr-modal div.dtr-modal-display {\n    width: 95%;\n  }\n}\ndiv.dtr-bs-modal table.table tr:first-child td {\n  border-top: none;\n}\n\ntable.dataTable.table-bordered th.dtr-control.dtr-hidden + *,\ntable.dataTable.table-bordered td.dtr-control.dtr-hidden + * {\n  border-left-width: 1px;\n}\n\n\ntable.dataTable > tbody > tr > .selected {\n  background-color: rgba(13, 110, 253, 0.9);\n  color: white;\n}\ntable.dataTable > tbody > tr > td.select-checkbox,\ntable.dataTable > tbody > tr > th.select-checkbox {\n  position: relative;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before, table.dataTable > tbody > tr > td.select-checkbox:after,\ntable.dataTable > tbody > tr > th.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:after {\n  display: block;\n  position: absolute;\n  top: 1.2em;\n  left: 50%;\n  width: 12px;\n  height: 12px;\n  box-sizing: border-box;\n}\ntable.dataTable > tbody > tr > td.select-checkbox:before,\ntable.dataTable > tbody > tr > th.select-checkbox:before {\n  content: \" \";\n  margin-top: -5px;\n  margin-left: -6px;\n  border: 1px solid black;\n  border-radius: 3px;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:before,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:before {\n  border: 1px solid white;\n}\ntable.dataTable > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable > tbody > tr.selected > th.select-checkbox:after {\n  content: \"✓\";\n  font-size: 20px;\n  margin-top: -19px;\n  margin-left: -6px;\n  text-align: center;\n  text-shadow: 1px 1px #B0BED9, -1px -1px #B0BED9, 1px -1px #B0BED9, -1px 1px #B0BED9;\n}\ntable.dataTable.compact > tbody > tr > td.select-checkbox:before,\ntable.dataTable.compact > tbody > tr > th.select-checkbox:before {\n  margin-top: -12px;\n}\ntable.dataTable.compact > tbody > tr.selected > td.select-checkbox:after,\ntable.dataTable.compact > tbody > tr.selected > th.select-checkbox:after {\n  margin-top: -16px;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\ntable.dataTable.table-sm tbody td.select-checkbox::before {\n  margin-top: -9px;\n}\n\n"
  },
  {
    "path": "data/web/css/build/012-bootstrap-icons.css",
    "content": "@font-face {\n  font-family: \"bootstrap-icons\";\n  src: url(\"/fonts/bootstrap-icons.woff2?524846017b983fc8ded9325d94ed40f3\") format(\"woff2\"),\nurl(\"/fonts/bootstrap-icons.woff?524846017b983fc8ded9325d94ed40f3\") format(\"woff\");\n}\n\n.bi::before,\n[class^=\"bi-\"]::before,\n[class*=\" bi-\"]::before {\n  display: inline-block;\n  font-family: bootstrap-icons !important;\n  font-style: normal;\n  font-weight: normal !important;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  vertical-align: -.125em;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.bi-123::before { content: \"\\f67f\"; }\n.bi-alarm-fill::before { content: \"\\f101\"; }\n.bi-alarm::before { content: \"\\f102\"; }\n.bi-align-bottom::before { content: \"\\f103\"; }\n.bi-align-center::before { content: \"\\f104\"; }\n.bi-align-end::before { content: \"\\f105\"; }\n.bi-align-middle::before { content: \"\\f106\"; }\n.bi-align-start::before { content: \"\\f107\"; }\n.bi-align-top::before { content: \"\\f108\"; }\n.bi-alt::before { content: \"\\f109\"; }\n.bi-app-indicator::before { content: \"\\f10a\"; }\n.bi-app::before { content: \"\\f10b\"; }\n.bi-archive-fill::before { content: \"\\f10c\"; }\n.bi-archive::before { content: \"\\f10d\"; }\n.bi-arrow-90deg-down::before { content: \"\\f10e\"; }\n.bi-arrow-90deg-left::before { content: \"\\f10f\"; }\n.bi-arrow-90deg-right::before { content: \"\\f110\"; }\n.bi-arrow-90deg-up::before { content: \"\\f111\"; }\n.bi-arrow-bar-down::before { content: \"\\f112\"; }\n.bi-arrow-bar-left::before { content: \"\\f113\"; }\n.bi-arrow-bar-right::before { content: \"\\f114\"; }\n.bi-arrow-bar-up::before { content: \"\\f115\"; }\n.bi-arrow-clockwise::before { content: \"\\f116\"; }\n.bi-arrow-counterclockwise::before { content: \"\\f117\"; }\n.bi-arrow-down-circle-fill::before { content: \"\\f118\"; }\n.bi-arrow-down-circle::before { content: \"\\f119\"; }\n.bi-arrow-down-left-circle-fill::before { content: \"\\f11a\"; }\n.bi-arrow-down-left-circle::before { content: \"\\f11b\"; }\n.bi-arrow-down-left-square-fill::before { content: \"\\f11c\"; }\n.bi-arrow-down-left-square::before { content: \"\\f11d\"; }\n.bi-arrow-down-left::before { content: \"\\f11e\"; }\n.bi-arrow-down-right-circle-fill::before { content: \"\\f11f\"; }\n.bi-arrow-down-right-circle::before { content: \"\\f120\"; }\n.bi-arrow-down-right-square-fill::before { content: \"\\f121\"; }\n.bi-arrow-down-right-square::before { content: \"\\f122\"; }\n.bi-arrow-down-right::before { content: \"\\f123\"; }\n.bi-arrow-down-short::before { content: \"\\f124\"; }\n.bi-arrow-down-square-fill::before { content: \"\\f125\"; }\n.bi-arrow-down-square::before { content: \"\\f126\"; }\n.bi-arrow-down-up::before { content: \"\\f127\"; }\n.bi-arrow-down::before { content: \"\\f128\"; }\n.bi-arrow-left-circle-fill::before { content: \"\\f129\"; }\n.bi-arrow-left-circle::before { content: \"\\f12a\"; }\n.bi-arrow-left-right::before { content: \"\\f12b\"; }\n.bi-arrow-left-short::before { content: \"\\f12c\"; }\n.bi-arrow-left-square-fill::before { content: \"\\f12d\"; }\n.bi-arrow-left-square::before { content: \"\\f12e\"; }\n.bi-arrow-left::before { content: \"\\f12f\"; }\n.bi-arrow-repeat::before { content: \"\\f130\"; }\n.bi-arrow-return-left::before { content: \"\\f131\"; }\n.bi-arrow-return-right::before { content: \"\\f132\"; }\n.bi-arrow-right-circle-fill::before { content: \"\\f133\"; }\n.bi-arrow-right-circle::before { content: \"\\f134\"; }\n.bi-arrow-right-short::before { content: \"\\f135\"; }\n.bi-arrow-right-square-fill::before { content: \"\\f136\"; }\n.bi-arrow-right-square::before { content: \"\\f137\"; }\n.bi-arrow-right::before { content: \"\\f138\"; }\n.bi-arrow-up-circle-fill::before { content: \"\\f139\"; }\n.bi-arrow-up-circle::before { content: \"\\f13a\"; }\n.bi-arrow-up-left-circle-fill::before { content: \"\\f13b\"; }\n.bi-arrow-up-left-circle::before { content: \"\\f13c\"; }\n.bi-arrow-up-left-square-fill::before { content: \"\\f13d\"; }\n.bi-arrow-up-left-square::before { content: \"\\f13e\"; }\n.bi-arrow-up-left::before { content: \"\\f13f\"; }\n.bi-arrow-up-right-circle-fill::before { content: \"\\f140\"; }\n.bi-arrow-up-right-circle::before { content: \"\\f141\"; }\n.bi-arrow-up-right-square-fill::before { content: \"\\f142\"; }\n.bi-arrow-up-right-square::before { content: \"\\f143\"; }\n.bi-arrow-up-right::before { content: \"\\f144\"; }\n.bi-arrow-up-short::before { content: \"\\f145\"; }\n.bi-arrow-up-square-fill::before { content: \"\\f146\"; }\n.bi-arrow-up-square::before { content: \"\\f147\"; }\n.bi-arrow-up::before { content: \"\\f148\"; }\n.bi-arrows-angle-contract::before { content: \"\\f149\"; }\n.bi-arrows-angle-expand::before { content: \"\\f14a\"; }\n.bi-arrows-collapse::before { content: \"\\f14b\"; }\n.bi-arrows-expand::before { content: \"\\f14c\"; }\n.bi-arrows-fullscreen::before { content: \"\\f14d\"; }\n.bi-arrows-move::before { content: \"\\f14e\"; }\n.bi-aspect-ratio-fill::before { content: \"\\f14f\"; }\n.bi-aspect-ratio::before { content: \"\\f150\"; }\n.bi-asterisk::before { content: \"\\f151\"; }\n.bi-at::before { content: \"\\f152\"; }\n.bi-award-fill::before { content: \"\\f153\"; }\n.bi-award::before { content: \"\\f154\"; }\n.bi-back::before { content: \"\\f155\"; }\n.bi-backspace-fill::before { content: \"\\f156\"; }\n.bi-backspace-reverse-fill::before { content: \"\\f157\"; }\n.bi-backspace-reverse::before { content: \"\\f158\"; }\n.bi-backspace::before { content: \"\\f159\"; }\n.bi-badge-3d-fill::before { content: \"\\f15a\"; }\n.bi-badge-3d::before { content: \"\\f15b\"; }\n.bi-badge-4k-fill::before { content: \"\\f15c\"; }\n.bi-badge-4k::before { content: \"\\f15d\"; }\n.bi-badge-8k-fill::before { content: \"\\f15e\"; }\n.bi-badge-8k::before { content: \"\\f15f\"; }\n.bi-badge-ad-fill::before { content: \"\\f160\"; }\n.bi-badge-ad::before { content: \"\\f161\"; }\n.bi-badge-ar-fill::before { content: \"\\f162\"; }\n.bi-badge-ar::before { content: \"\\f163\"; }\n.bi-badge-cc-fill::before { content: \"\\f164\"; }\n.bi-badge-cc::before { content: \"\\f165\"; }\n.bi-badge-hd-fill::before { content: \"\\f166\"; }\n.bi-badge-hd::before { content: \"\\f167\"; }\n.bi-badge-tm-fill::before { content: \"\\f168\"; }\n.bi-badge-tm::before { content: \"\\f169\"; }\n.bi-badge-vo-fill::before { content: \"\\f16a\"; }\n.bi-badge-vo::before { content: \"\\f16b\"; }\n.bi-badge-vr-fill::before { content: \"\\f16c\"; }\n.bi-badge-vr::before { content: \"\\f16d\"; }\n.bi-badge-wc-fill::before { content: \"\\f16e\"; }\n.bi-badge-wc::before { content: \"\\f16f\"; }\n.bi-bag-check-fill::before { content: \"\\f170\"; }\n.bi-bag-check::before { content: \"\\f171\"; }\n.bi-bag-dash-fill::before { content: \"\\f172\"; }\n.bi-bag-dash::before { content: \"\\f173\"; }\n.bi-bag-fill::before { content: \"\\f174\"; }\n.bi-bag-plus-fill::before { content: \"\\f175\"; }\n.bi-bag-plus::before { content: \"\\f176\"; }\n.bi-bag-x-fill::before { content: \"\\f177\"; }\n.bi-bag-x::before { content: \"\\f178\"; }\n.bi-bag::before { content: \"\\f179\"; }\n.bi-bar-chart-fill::before { content: \"\\f17a\"; }\n.bi-bar-chart-line-fill::before { content: \"\\f17b\"; }\n.bi-bar-chart-line::before { content: \"\\f17c\"; }\n.bi-bar-chart-steps::before { content: \"\\f17d\"; }\n.bi-bar-chart::before { content: \"\\f17e\"; }\n.bi-basket-fill::before { content: \"\\f17f\"; }\n.bi-basket::before { content: \"\\f180\"; }\n.bi-basket2-fill::before { content: \"\\f181\"; }\n.bi-basket2::before { content: \"\\f182\"; }\n.bi-basket3-fill::before { content: \"\\f183\"; }\n.bi-basket3::before { content: \"\\f184\"; }\n.bi-battery-charging::before { content: \"\\f185\"; }\n.bi-battery-full::before { content: \"\\f186\"; }\n.bi-battery-half::before { content: \"\\f187\"; }\n.bi-battery::before { content: \"\\f188\"; }\n.bi-bell-fill::before { content: \"\\f189\"; }\n.bi-bell::before { content: \"\\f18a\"; }\n.bi-bezier::before { content: \"\\f18b\"; }\n.bi-bezier2::before { content: \"\\f18c\"; }\n.bi-bicycle::before { content: \"\\f18d\"; }\n.bi-binoculars-fill::before { content: \"\\f18e\"; }\n.bi-binoculars::before { content: \"\\f18f\"; }\n.bi-blockquote-left::before { content: \"\\f190\"; }\n.bi-blockquote-right::before { content: \"\\f191\"; }\n.bi-book-fill::before { content: \"\\f192\"; }\n.bi-book-half::before { content: \"\\f193\"; }\n.bi-book::before { content: \"\\f194\"; }\n.bi-bookmark-check-fill::before { content: \"\\f195\"; }\n.bi-bookmark-check::before { content: \"\\f196\"; }\n.bi-bookmark-dash-fill::before { content: \"\\f197\"; }\n.bi-bookmark-dash::before { content: \"\\f198\"; }\n.bi-bookmark-fill::before { content: \"\\f199\"; }\n.bi-bookmark-heart-fill::before { content: \"\\f19a\"; }\n.bi-bookmark-heart::before { content: \"\\f19b\"; }\n.bi-bookmark-plus-fill::before { content: \"\\f19c\"; }\n.bi-bookmark-plus::before { content: \"\\f19d\"; }\n.bi-bookmark-star-fill::before { content: \"\\f19e\"; }\n.bi-bookmark-star::before { content: \"\\f19f\"; }\n.bi-bookmark-x-fill::before { content: \"\\f1a0\"; }\n.bi-bookmark-x::before { content: \"\\f1a1\"; }\n.bi-bookmark::before { content: \"\\f1a2\"; }\n.bi-bookmarks-fill::before { content: \"\\f1a3\"; }\n.bi-bookmarks::before { content: \"\\f1a4\"; }\n.bi-bookshelf::before { content: \"\\f1a5\"; }\n.bi-bootstrap-fill::before { content: \"\\f1a6\"; }\n.bi-bootstrap-reboot::before { content: \"\\f1a7\"; }\n.bi-bootstrap::before { content: \"\\f1a8\"; }\n.bi-border-all::before { content: \"\\f1a9\"; }\n.bi-border-bottom::before { content: \"\\f1aa\"; }\n.bi-border-center::before { content: \"\\f1ab\"; }\n.bi-border-inner::before { content: \"\\f1ac\"; }\n.bi-border-left::before { content: \"\\f1ad\"; }\n.bi-border-middle::before { content: \"\\f1ae\"; }\n.bi-border-outer::before { content: \"\\f1af\"; }\n.bi-border-right::before { content: \"\\f1b0\"; }\n.bi-border-style::before { content: \"\\f1b1\"; }\n.bi-border-top::before { content: \"\\f1b2\"; }\n.bi-border-width::before { content: \"\\f1b3\"; }\n.bi-border::before { content: \"\\f1b4\"; }\n.bi-bounding-box-circles::before { content: \"\\f1b5\"; }\n.bi-bounding-box::before { content: \"\\f1b6\"; }\n.bi-box-arrow-down-left::before { content: \"\\f1b7\"; }\n.bi-box-arrow-down-right::before { content: \"\\f1b8\"; }\n.bi-box-arrow-down::before { content: \"\\f1b9\"; }\n.bi-box-arrow-in-down-left::before { content: \"\\f1ba\"; }\n.bi-box-arrow-in-down-right::before { content: \"\\f1bb\"; }\n.bi-box-arrow-in-down::before { content: \"\\f1bc\"; }\n.bi-box-arrow-in-left::before { content: \"\\f1bd\"; }\n.bi-box-arrow-in-right::before { content: \"\\f1be\"; }\n.bi-box-arrow-in-up-left::before { content: \"\\f1bf\"; }\n.bi-box-arrow-in-up-right::before { content: \"\\f1c0\"; }\n.bi-box-arrow-in-up::before { content: \"\\f1c1\"; }\n.bi-box-arrow-left::before { content: \"\\f1c2\"; }\n.bi-box-arrow-right::before { content: \"\\f1c3\"; }\n.bi-box-arrow-up-left::before { content: \"\\f1c4\"; }\n.bi-box-arrow-up-right::before { content: \"\\f1c5\"; }\n.bi-box-arrow-up::before { content: \"\\f1c6\"; }\n.bi-box-seam::before { content: \"\\f1c7\"; }\n.bi-box::before { content: \"\\f1c8\"; }\n.bi-braces::before { content: \"\\f1c9\"; }\n.bi-bricks::before { content: \"\\f1ca\"; }\n.bi-briefcase-fill::before { content: \"\\f1cb\"; }\n.bi-briefcase::before { content: \"\\f1cc\"; }\n.bi-brightness-alt-high-fill::before { content: \"\\f1cd\"; }\n.bi-brightness-alt-high::before { content: \"\\f1ce\"; }\n.bi-brightness-alt-low-fill::before { content: \"\\f1cf\"; }\n.bi-brightness-alt-low::before { content: \"\\f1d0\"; }\n.bi-brightness-high-fill::before { content: \"\\f1d1\"; }\n.bi-brightness-high::before { content: \"\\f1d2\"; }\n.bi-brightness-low-fill::before { content: \"\\f1d3\"; }\n.bi-brightness-low::before { content: \"\\f1d4\"; }\n.bi-broadcast-pin::before { content: \"\\f1d5\"; }\n.bi-broadcast::before { content: \"\\f1d6\"; }\n.bi-brush-fill::before { content: \"\\f1d7\"; }\n.bi-brush::before { content: \"\\f1d8\"; }\n.bi-bucket-fill::before { content: \"\\f1d9\"; }\n.bi-bucket::before { content: \"\\f1da\"; }\n.bi-bug-fill::before { content: \"\\f1db\"; }\n.bi-bug::before { content: \"\\f1dc\"; }\n.bi-building::before { content: \"\\f1dd\"; }\n.bi-bullseye::before { content: \"\\f1de\"; }\n.bi-calculator-fill::before { content: \"\\f1df\"; }\n.bi-calculator::before { content: \"\\f1e0\"; }\n.bi-calendar-check-fill::before { content: \"\\f1e1\"; }\n.bi-calendar-check::before { content: \"\\f1e2\"; }\n.bi-calendar-date-fill::before { content: \"\\f1e3\"; }\n.bi-calendar-date::before { content: \"\\f1e4\"; }\n.bi-calendar-day-fill::before { content: \"\\f1e5\"; }\n.bi-calendar-day::before { content: \"\\f1e6\"; }\n.bi-calendar-event-fill::before { content: \"\\f1e7\"; }\n.bi-calendar-event::before { content: \"\\f1e8\"; }\n.bi-calendar-fill::before { content: \"\\f1e9\"; }\n.bi-calendar-minus-fill::before { content: \"\\f1ea\"; }\n.bi-calendar-minus::before { content: \"\\f1eb\"; }\n.bi-calendar-month-fill::before { content: \"\\f1ec\"; }\n.bi-calendar-month::before { content: \"\\f1ed\"; }\n.bi-calendar-plus-fill::before { content: \"\\f1ee\"; }\n.bi-calendar-plus::before { content: \"\\f1ef\"; }\n.bi-calendar-range-fill::before { content: \"\\f1f0\"; }\n.bi-calendar-range::before { content: \"\\f1f1\"; }\n.bi-calendar-week-fill::before { content: \"\\f1f2\"; }\n.bi-calendar-week::before { content: \"\\f1f3\"; }\n.bi-calendar-x-fill::before { content: \"\\f1f4\"; }\n.bi-calendar-x::before { content: \"\\f1f5\"; }\n.bi-calendar::before { content: \"\\f1f6\"; }\n.bi-calendar2-check-fill::before { content: \"\\f1f7\"; }\n.bi-calendar2-check::before { content: \"\\f1f8\"; }\n.bi-calendar2-date-fill::before { content: \"\\f1f9\"; }\n.bi-calendar2-date::before { content: \"\\f1fa\"; }\n.bi-calendar2-day-fill::before { content: \"\\f1fb\"; }\n.bi-calendar2-day::before { content: \"\\f1fc\"; }\n.bi-calendar2-event-fill::before { content: \"\\f1fd\"; }\n.bi-calendar2-event::before { content: \"\\f1fe\"; }\n.bi-calendar2-fill::before { content: \"\\f1ff\"; }\n.bi-calendar2-minus-fill::before { content: \"\\f200\"; }\n.bi-calendar2-minus::before { content: \"\\f201\"; }\n.bi-calendar2-month-fill::before { content: \"\\f202\"; }\n.bi-calendar2-month::before { content: \"\\f203\"; }\n.bi-calendar2-plus-fill::before { content: \"\\f204\"; }\n.bi-calendar2-plus::before { content: \"\\f205\"; }\n.bi-calendar2-range-fill::before { content: \"\\f206\"; }\n.bi-calendar2-range::before { content: \"\\f207\"; }\n.bi-calendar2-week-fill::before { content: \"\\f208\"; }\n.bi-calendar2-week::before { content: \"\\f209\"; }\n.bi-calendar2-x-fill::before { content: \"\\f20a\"; }\n.bi-calendar2-x::before { content: \"\\f20b\"; }\n.bi-calendar2::before { content: \"\\f20c\"; }\n.bi-calendar3-event-fill::before { content: \"\\f20d\"; }\n.bi-calendar3-event::before { content: \"\\f20e\"; }\n.bi-calendar3-fill::before { content: \"\\f20f\"; }\n.bi-calendar3-range-fill::before { content: \"\\f210\"; }\n.bi-calendar3-range::before { content: \"\\f211\"; }\n.bi-calendar3-week-fill::before { content: \"\\f212\"; }\n.bi-calendar3-week::before { content: \"\\f213\"; }\n.bi-calendar3::before { content: \"\\f214\"; }\n.bi-calendar4-event::before { content: \"\\f215\"; }\n.bi-calendar4-range::before { content: \"\\f216\"; }\n.bi-calendar4-week::before { content: \"\\f217\"; }\n.bi-calendar4::before { content: \"\\f218\"; }\n.bi-camera-fill::before { content: \"\\f219\"; }\n.bi-camera-reels-fill::before { content: \"\\f21a\"; }\n.bi-camera-reels::before { content: \"\\f21b\"; }\n.bi-camera-video-fill::before { content: \"\\f21c\"; }\n.bi-camera-video-off-fill::before { content: \"\\f21d\"; }\n.bi-camera-video-off::before { content: \"\\f21e\"; }\n.bi-camera-video::before { content: \"\\f21f\"; }\n.bi-camera::before { content: \"\\f220\"; }\n.bi-camera2::before { content: \"\\f221\"; }\n.bi-capslock-fill::before { content: \"\\f222\"; }\n.bi-capslock::before { content: \"\\f223\"; }\n.bi-card-checklist::before { content: \"\\f224\"; }\n.bi-card-heading::before { content: \"\\f225\"; }\n.bi-card-image::before { content: \"\\f226\"; }\n.bi-card-list::before { content: \"\\f227\"; }\n.bi-card-text::before { content: \"\\f228\"; }\n.bi-caret-down-fill::before { content: \"\\f229\"; }\n.bi-caret-down-square-fill::before { content: \"\\f22a\"; }\n.bi-caret-down-square::before { content: \"\\f22b\"; }\n.bi-caret-down::before { content: \"\\f22c\"; }\n.bi-caret-left-fill::before { content: \"\\f22d\"; }\n.bi-caret-left-square-fill::before { content: \"\\f22e\"; }\n.bi-caret-left-square::before { content: \"\\f22f\"; }\n.bi-caret-left::before { content: \"\\f230\"; }\n.bi-caret-right-fill::before { content: \"\\f231\"; }\n.bi-caret-right-square-fill::before { content: \"\\f232\"; }\n.bi-caret-right-square::before { content: \"\\f233\"; }\n.bi-caret-right::before { content: \"\\f234\"; }\n.bi-caret-up-fill::before { content: \"\\f235\"; }\n.bi-caret-up-square-fill::before { content: \"\\f236\"; }\n.bi-caret-up-square::before { content: \"\\f237\"; }\n.bi-caret-up::before { content: \"\\f238\"; }\n.bi-cart-check-fill::before { content: \"\\f239\"; }\n.bi-cart-check::before { content: \"\\f23a\"; }\n.bi-cart-dash-fill::before { content: \"\\f23b\"; }\n.bi-cart-dash::before { content: \"\\f23c\"; }\n.bi-cart-fill::before { content: \"\\f23d\"; }\n.bi-cart-plus-fill::before { content: \"\\f23e\"; }\n.bi-cart-plus::before { content: \"\\f23f\"; }\n.bi-cart-x-fill::before { content: \"\\f240\"; }\n.bi-cart-x::before { content: \"\\f241\"; }\n.bi-cart::before { content: \"\\f242\"; }\n.bi-cart2::before { content: \"\\f243\"; }\n.bi-cart3::before { content: \"\\f244\"; }\n.bi-cart4::before { content: \"\\f245\"; }\n.bi-cash-stack::before { content: \"\\f246\"; }\n.bi-cash::before { content: \"\\f247\"; }\n.bi-cast::before { content: \"\\f248\"; }\n.bi-chat-dots-fill::before { content: \"\\f249\"; }\n.bi-chat-dots::before { content: \"\\f24a\"; }\n.bi-chat-fill::before { content: \"\\f24b\"; }\n.bi-chat-left-dots-fill::before { content: \"\\f24c\"; }\n.bi-chat-left-dots::before { content: \"\\f24d\"; }\n.bi-chat-left-fill::before { content: \"\\f24e\"; }\n.bi-chat-left-quote-fill::before { content: \"\\f24f\"; }\n.bi-chat-left-quote::before { content: \"\\f250\"; }\n.bi-chat-left-text-fill::before { content: \"\\f251\"; }\n.bi-chat-left-text::before { content: \"\\f252\"; }\n.bi-chat-left::before { content: \"\\f253\"; }\n.bi-chat-quote-fill::before { content: \"\\f254\"; }\n.bi-chat-quote::before { content: \"\\f255\"; }\n.bi-chat-right-dots-fill::before { content: \"\\f256\"; }\n.bi-chat-right-dots::before { content: \"\\f257\"; }\n.bi-chat-right-fill::before { content: \"\\f258\"; }\n.bi-chat-right-quote-fill::before { content: \"\\f259\"; }\n.bi-chat-right-quote::before { content: \"\\f25a\"; }\n.bi-chat-right-text-fill::before { content: \"\\f25b\"; }\n.bi-chat-right-text::before { content: \"\\f25c\"; }\n.bi-chat-right::before { content: \"\\f25d\"; }\n.bi-chat-square-dots-fill::before { content: \"\\f25e\"; }\n.bi-chat-square-dots::before { content: \"\\f25f\"; }\n.bi-chat-square-fill::before { content: \"\\f260\"; }\n.bi-chat-square-quote-fill::before { content: \"\\f261\"; }\n.bi-chat-square-quote::before { content: \"\\f262\"; }\n.bi-chat-square-text-fill::before { content: \"\\f263\"; }\n.bi-chat-square-text::before { content: \"\\f264\"; }\n.bi-chat-square::before { content: \"\\f265\"; }\n.bi-chat-text-fill::before { content: \"\\f266\"; }\n.bi-chat-text::before { content: \"\\f267\"; }\n.bi-chat::before { content: \"\\f268\"; }\n.bi-check-all::before { content: \"\\f269\"; }\n.bi-check-circle-fill::before { content: \"\\f26a\"; }\n.bi-check-circle::before { content: \"\\f26b\"; }\n.bi-check-square-fill::before { content: \"\\f26c\"; }\n.bi-check-square::before { content: \"\\f26d\"; }\n.bi-check::before { content: \"\\f26e\"; }\n.bi-check2-all::before { content: \"\\f26f\"; }\n.bi-check2-circle::before { content: \"\\f270\"; }\n.bi-check2-square::before { content: \"\\f271\"; }\n.bi-check2::before { content: \"\\f272\"; }\n.bi-chevron-bar-contract::before { content: \"\\f273\"; }\n.bi-chevron-bar-down::before { content: \"\\f274\"; }\n.bi-chevron-bar-expand::before { content: \"\\f275\"; }\n.bi-chevron-bar-left::before { content: \"\\f276\"; }\n.bi-chevron-bar-right::before { content: \"\\f277\"; }\n.bi-chevron-bar-up::before { content: \"\\f278\"; }\n.bi-chevron-compact-down::before { content: \"\\f279\"; }\n.bi-chevron-compact-left::before { content: \"\\f27a\"; }\n.bi-chevron-compact-right::before { content: \"\\f27b\"; }\n.bi-chevron-compact-up::before { content: \"\\f27c\"; }\n.bi-chevron-contract::before { content: \"\\f27d\"; }\n.bi-chevron-double-down::before { content: \"\\f27e\"; }\n.bi-chevron-double-left::before { content: \"\\f27f\"; }\n.bi-chevron-double-right::before { content: \"\\f280\"; }\n.bi-chevron-double-up::before { content: \"\\f281\"; }\n.bi-chevron-down::before { content: \"\\f282\"; }\n.bi-chevron-expand::before { content: \"\\f283\"; }\n.bi-chevron-left::before { content: \"\\f284\"; }\n.bi-chevron-right::before { content: \"\\f285\"; }\n.bi-chevron-up::before { content: \"\\f286\"; }\n.bi-circle-fill::before { content: \"\\f287\"; }\n.bi-circle-half::before { content: \"\\f288\"; }\n.bi-circle-square::before { content: \"\\f289\"; }\n.bi-circle::before { content: \"\\f28a\"; }\n.bi-clipboard-check::before { content: \"\\f28b\"; }\n.bi-clipboard-data::before { content: \"\\f28c\"; }\n.bi-clipboard-minus::before { content: \"\\f28d\"; }\n.bi-clipboard-plus::before { content: \"\\f28e\"; }\n.bi-clipboard-x::before { content: \"\\f28f\"; }\n.bi-clipboard::before { content: \"\\f290\"; }\n.bi-clock-fill::before { content: \"\\f291\"; }\n.bi-clock-history::before { content: \"\\f292\"; }\n.bi-clock::before { content: \"\\f293\"; }\n.bi-cloud-arrow-down-fill::before { content: \"\\f294\"; }\n.bi-cloud-arrow-down::before { content: \"\\f295\"; }\n.bi-cloud-arrow-up-fill::before { content: \"\\f296\"; }\n.bi-cloud-arrow-up::before { content: \"\\f297\"; }\n.bi-cloud-check-fill::before { content: \"\\f298\"; }\n.bi-cloud-check::before { content: \"\\f299\"; }\n.bi-cloud-download-fill::before { content: \"\\f29a\"; }\n.bi-cloud-download::before { content: \"\\f29b\"; }\n.bi-cloud-drizzle-fill::before { content: \"\\f29c\"; }\n.bi-cloud-drizzle::before { content: \"\\f29d\"; }\n.bi-cloud-fill::before { content: \"\\f29e\"; }\n.bi-cloud-fog-fill::before { content: \"\\f29f\"; }\n.bi-cloud-fog::before { content: \"\\f2a0\"; }\n.bi-cloud-fog2-fill::before { content: \"\\f2a1\"; }\n.bi-cloud-fog2::before { content: \"\\f2a2\"; }\n.bi-cloud-hail-fill::before { content: \"\\f2a3\"; }\n.bi-cloud-hail::before { content: \"\\f2a4\"; }\n.bi-cloud-haze-1::before { content: \"\\f2a5\"; }\n.bi-cloud-haze-fill::before { content: \"\\f2a6\"; }\n.bi-cloud-haze::before { content: \"\\f2a7\"; }\n.bi-cloud-haze2-fill::before { content: \"\\f2a8\"; }\n.bi-cloud-lightning-fill::before { content: \"\\f2a9\"; }\n.bi-cloud-lightning-rain-fill::before { content: \"\\f2aa\"; }\n.bi-cloud-lightning-rain::before { content: \"\\f2ab\"; }\n.bi-cloud-lightning::before { content: \"\\f2ac\"; }\n.bi-cloud-minus-fill::before { content: \"\\f2ad\"; }\n.bi-cloud-minus::before { content: \"\\f2ae\"; }\n.bi-cloud-moon-fill::before { content: \"\\f2af\"; }\n.bi-cloud-moon::before { content: \"\\f2b0\"; }\n.bi-cloud-plus-fill::before { content: \"\\f2b1\"; }\n.bi-cloud-plus::before { content: \"\\f2b2\"; }\n.bi-cloud-rain-fill::before { content: \"\\f2b3\"; }\n.bi-cloud-rain-heavy-fill::before { content: \"\\f2b4\"; }\n.bi-cloud-rain-heavy::before { content: \"\\f2b5\"; }\n.bi-cloud-rain::before { content: \"\\f2b6\"; }\n.bi-cloud-slash-fill::before { content: \"\\f2b7\"; }\n.bi-cloud-slash::before { content: \"\\f2b8\"; }\n.bi-cloud-sleet-fill::before { content: \"\\f2b9\"; }\n.bi-cloud-sleet::before { content: \"\\f2ba\"; }\n.bi-cloud-snow-fill::before { content: \"\\f2bb\"; }\n.bi-cloud-snow::before { content: \"\\f2bc\"; }\n.bi-cloud-sun-fill::before { content: \"\\f2bd\"; }\n.bi-cloud-sun::before { content: \"\\f2be\"; }\n.bi-cloud-upload-fill::before { content: \"\\f2bf\"; }\n.bi-cloud-upload::before { content: \"\\f2c0\"; }\n.bi-cloud::before { content: \"\\f2c1\"; }\n.bi-clouds-fill::before { content: \"\\f2c2\"; }\n.bi-clouds::before { content: \"\\f2c3\"; }\n.bi-cloudy-fill::before { content: \"\\f2c4\"; }\n.bi-cloudy::before { content: \"\\f2c5\"; }\n.bi-code-slash::before { content: \"\\f2c6\"; }\n.bi-code-square::before { content: \"\\f2c7\"; }\n.bi-code::before { content: \"\\f2c8\"; }\n.bi-collection-fill::before { content: \"\\f2c9\"; }\n.bi-collection-play-fill::before { content: \"\\f2ca\"; }\n.bi-collection-play::before { content: \"\\f2cb\"; }\n.bi-collection::before { content: \"\\f2cc\"; }\n.bi-columns-gap::before { content: \"\\f2cd\"; }\n.bi-columns::before { content: \"\\f2ce\"; }\n.bi-command::before { content: \"\\f2cf\"; }\n.bi-compass-fill::before { content: \"\\f2d0\"; }\n.bi-compass::before { content: \"\\f2d1\"; }\n.bi-cone-striped::before { content: \"\\f2d2\"; }\n.bi-cone::before { content: \"\\f2d3\"; }\n.bi-controller::before { content: \"\\f2d4\"; }\n.bi-cpu-fill::before { content: \"\\f2d5\"; }\n.bi-cpu::before { content: \"\\f2d6\"; }\n.bi-credit-card-2-back-fill::before { content: \"\\f2d7\"; }\n.bi-credit-card-2-back::before { content: \"\\f2d8\"; }\n.bi-credit-card-2-front-fill::before { content: \"\\f2d9\"; }\n.bi-credit-card-2-front::before { content: \"\\f2da\"; }\n.bi-credit-card-fill::before { content: \"\\f2db\"; }\n.bi-credit-card::before { content: \"\\f2dc\"; }\n.bi-crop::before { content: \"\\f2dd\"; }\n.bi-cup-fill::before { content: \"\\f2de\"; }\n.bi-cup-straw::before { content: \"\\f2df\"; }\n.bi-cup::before { content: \"\\f2e0\"; }\n.bi-cursor-fill::before { content: \"\\f2e1\"; }\n.bi-cursor-text::before { content: \"\\f2e2\"; }\n.bi-cursor::before { content: \"\\f2e3\"; }\n.bi-dash-circle-dotted::before { content: \"\\f2e4\"; }\n.bi-dash-circle-fill::before { content: \"\\f2e5\"; }\n.bi-dash-circle::before { content: \"\\f2e6\"; }\n.bi-dash-square-dotted::before { content: \"\\f2e7\"; }\n.bi-dash-square-fill::before { content: \"\\f2e8\"; }\n.bi-dash-square::before { content: \"\\f2e9\"; }\n.bi-dash::before { content: \"\\f2ea\"; }\n.bi-diagram-2-fill::before { content: \"\\f2eb\"; }\n.bi-diagram-2::before { content: \"\\f2ec\"; }\n.bi-diagram-3-fill::before { content: \"\\f2ed\"; }\n.bi-diagram-3::before { content: \"\\f2ee\"; }\n.bi-diamond-fill::before { content: \"\\f2ef\"; }\n.bi-diamond-half::before { content: \"\\f2f0\"; }\n.bi-diamond::before { content: \"\\f2f1\"; }\n.bi-dice-1-fill::before { content: \"\\f2f2\"; }\n.bi-dice-1::before { content: \"\\f2f3\"; }\n.bi-dice-2-fill::before { content: \"\\f2f4\"; }\n.bi-dice-2::before { content: \"\\f2f5\"; }\n.bi-dice-3-fill::before { content: \"\\f2f6\"; }\n.bi-dice-3::before { content: \"\\f2f7\"; }\n.bi-dice-4-fill::before { content: \"\\f2f8\"; }\n.bi-dice-4::before { content: \"\\f2f9\"; }\n.bi-dice-5-fill::before { content: \"\\f2fa\"; }\n.bi-dice-5::before { content: \"\\f2fb\"; }\n.bi-dice-6-fill::before { content: \"\\f2fc\"; }\n.bi-dice-6::before { content: \"\\f2fd\"; }\n.bi-disc-fill::before { content: \"\\f2fe\"; }\n.bi-disc::before { content: \"\\f2ff\"; }\n.bi-discord::before { content: \"\\f300\"; }\n.bi-display-fill::before { content: \"\\f301\"; }\n.bi-display::before { content: \"\\f302\"; }\n.bi-distribute-horizontal::before { content: \"\\f303\"; }\n.bi-distribute-vertical::before { content: \"\\f304\"; }\n.bi-door-closed-fill::before { content: \"\\f305\"; }\n.bi-door-closed::before { content: \"\\f306\"; }\n.bi-door-open-fill::before { content: \"\\f307\"; }\n.bi-door-open::before { content: \"\\f308\"; }\n.bi-dot::before { content: \"\\f309\"; }\n.bi-download::before { content: \"\\f30a\"; }\n.bi-droplet-fill::before { content: \"\\f30b\"; }\n.bi-droplet-half::before { content: \"\\f30c\"; }\n.bi-droplet::before { content: \"\\f30d\"; }\n.bi-earbuds::before { content: \"\\f30e\"; }\n.bi-easel-fill::before { content: \"\\f30f\"; }\n.bi-easel::before { content: \"\\f310\"; }\n.bi-egg-fill::before { content: \"\\f311\"; }\n.bi-egg-fried::before { content: \"\\f312\"; }\n.bi-egg::before { content: \"\\f313\"; }\n.bi-eject-fill::before { content: \"\\f314\"; }\n.bi-eject::before { content: \"\\f315\"; }\n.bi-emoji-angry-fill::before { content: \"\\f316\"; }\n.bi-emoji-angry::before { content: \"\\f317\"; }\n.bi-emoji-dizzy-fill::before { content: \"\\f318\"; }\n.bi-emoji-dizzy::before { content: \"\\f319\"; }\n.bi-emoji-expressionless-fill::before { content: \"\\f31a\"; }\n.bi-emoji-expressionless::before { content: \"\\f31b\"; }\n.bi-emoji-frown-fill::before { content: \"\\f31c\"; }\n.bi-emoji-frown::before { content: \"\\f31d\"; }\n.bi-emoji-heart-eyes-fill::before { content: \"\\f31e\"; }\n.bi-emoji-heart-eyes::before { content: \"\\f31f\"; }\n.bi-emoji-laughing-fill::before { content: \"\\f320\"; }\n.bi-emoji-laughing::before { content: \"\\f321\"; }\n.bi-emoji-neutral-fill::before { content: \"\\f322\"; }\n.bi-emoji-neutral::before { content: \"\\f323\"; }\n.bi-emoji-smile-fill::before { content: \"\\f324\"; }\n.bi-emoji-smile-upside-down-fill::before { content: \"\\f325\"; }\n.bi-emoji-smile-upside-down::before { content: \"\\f326\"; }\n.bi-emoji-smile::before { content: \"\\f327\"; }\n.bi-emoji-sunglasses-fill::before { content: \"\\f328\"; }\n.bi-emoji-sunglasses::before { content: \"\\f329\"; }\n.bi-emoji-wink-fill::before { content: \"\\f32a\"; }\n.bi-emoji-wink::before { content: \"\\f32b\"; }\n.bi-envelope-fill::before { content: \"\\f32c\"; }\n.bi-envelope-open-fill::before { content: \"\\f32d\"; }\n.bi-envelope-open::before { content: \"\\f32e\"; }\n.bi-envelope::before { content: \"\\f32f\"; }\n.bi-eraser-fill::before { content: \"\\f330\"; }\n.bi-eraser::before { content: \"\\f331\"; }\n.bi-exclamation-circle-fill::before { content: \"\\f332\"; }\n.bi-exclamation-circle::before { content: \"\\f333\"; }\n.bi-exclamation-diamond-fill::before { content: \"\\f334\"; }\n.bi-exclamation-diamond::before { content: \"\\f335\"; }\n.bi-exclamation-octagon-fill::before { content: \"\\f336\"; }\n.bi-exclamation-octagon::before { content: \"\\f337\"; }\n.bi-exclamation-square-fill::before { content: \"\\f338\"; }\n.bi-exclamation-square::before { content: \"\\f339\"; }\n.bi-exclamation-triangle-fill::before { content: \"\\f33a\"; }\n.bi-exclamation-triangle::before { content: \"\\f33b\"; }\n.bi-exclamation::before { content: \"\\f33c\"; }\n.bi-exclude::before { content: \"\\f33d\"; }\n.bi-eye-fill::before { content: \"\\f33e\"; }\n.bi-eye-slash-fill::before { content: \"\\f33f\"; }\n.bi-eye-slash::before { content: \"\\f340\"; }\n.bi-eye::before { content: \"\\f341\"; }\n.bi-eyedropper::before { content: \"\\f342\"; }\n.bi-eyeglasses::before { content: \"\\f343\"; }\n.bi-facebook::before { content: \"\\f344\"; }\n.bi-file-arrow-down-fill::before { content: \"\\f345\"; }\n.bi-file-arrow-down::before { content: \"\\f346\"; }\n.bi-file-arrow-up-fill::before { content: \"\\f347\"; }\n.bi-file-arrow-up::before { content: \"\\f348\"; }\n.bi-file-bar-graph-fill::before { content: \"\\f349\"; }\n.bi-file-bar-graph::before { content: \"\\f34a\"; }\n.bi-file-binary-fill::before { content: \"\\f34b\"; }\n.bi-file-binary::before { content: \"\\f34c\"; }\n.bi-file-break-fill::before { content: \"\\f34d\"; }\n.bi-file-break::before { content: \"\\f34e\"; }\n.bi-file-check-fill::before { content: \"\\f34f\"; }\n.bi-file-check::before { content: \"\\f350\"; }\n.bi-file-code-fill::before { content: \"\\f351\"; }\n.bi-file-code::before { content: \"\\f352\"; }\n.bi-file-diff-fill::before { content: \"\\f353\"; }\n.bi-file-diff::before { content: \"\\f354\"; }\n.bi-file-earmark-arrow-down-fill::before { content: \"\\f355\"; }\n.bi-file-earmark-arrow-down::before { content: \"\\f356\"; }\n.bi-file-earmark-arrow-up-fill::before { content: \"\\f357\"; }\n.bi-file-earmark-arrow-up::before { content: \"\\f358\"; }\n.bi-file-earmark-bar-graph-fill::before { content: \"\\f359\"; }\n.bi-file-earmark-bar-graph::before { content: \"\\f35a\"; }\n.bi-file-earmark-binary-fill::before { content: \"\\f35b\"; }\n.bi-file-earmark-binary::before { content: \"\\f35c\"; }\n.bi-file-earmark-break-fill::before { content: \"\\f35d\"; }\n.bi-file-earmark-break::before { content: \"\\f35e\"; }\n.bi-file-earmark-check-fill::before { content: \"\\f35f\"; }\n.bi-file-earmark-check::before { content: \"\\f360\"; }\n.bi-file-earmark-code-fill::before { content: \"\\f361\"; }\n.bi-file-earmark-code::before { content: \"\\f362\"; }\n.bi-file-earmark-diff-fill::before { content: \"\\f363\"; }\n.bi-file-earmark-diff::before { content: \"\\f364\"; }\n.bi-file-earmark-easel-fill::before { content: \"\\f365\"; }\n.bi-file-earmark-easel::before { content: \"\\f366\"; }\n.bi-file-earmark-excel-fill::before { content: \"\\f367\"; }\n.bi-file-earmark-excel::before { content: \"\\f368\"; }\n.bi-file-earmark-fill::before { content: \"\\f369\"; }\n.bi-file-earmark-font-fill::before { content: \"\\f36a\"; }\n.bi-file-earmark-font::before { content: \"\\f36b\"; }\n.bi-file-earmark-image-fill::before { content: \"\\f36c\"; }\n.bi-file-earmark-image::before { content: \"\\f36d\"; }\n.bi-file-earmark-lock-fill::before { content: \"\\f36e\"; }\n.bi-file-earmark-lock::before { content: \"\\f36f\"; }\n.bi-file-earmark-lock2-fill::before { content: \"\\f370\"; }\n.bi-file-earmark-lock2::before { content: \"\\f371\"; }\n.bi-file-earmark-medical-fill::before { content: \"\\f372\"; }\n.bi-file-earmark-medical::before { content: \"\\f373\"; }\n.bi-file-earmark-minus-fill::before { content: \"\\f374\"; }\n.bi-file-earmark-minus::before { content: \"\\f375\"; }\n.bi-file-earmark-music-fill::before { content: \"\\f376\"; }\n.bi-file-earmark-music::before { content: \"\\f377\"; }\n.bi-file-earmark-person-fill::before { content: \"\\f378\"; }\n.bi-file-earmark-person::before { content: \"\\f379\"; }\n.bi-file-earmark-play-fill::before { content: \"\\f37a\"; }\n.bi-file-earmark-play::before { content: \"\\f37b\"; }\n.bi-file-earmark-plus-fill::before { content: \"\\f37c\"; }\n.bi-file-earmark-plus::before { content: \"\\f37d\"; }\n.bi-file-earmark-post-fill::before { content: \"\\f37e\"; }\n.bi-file-earmark-post::before { content: \"\\f37f\"; }\n.bi-file-earmark-ppt-fill::before { content: \"\\f380\"; }\n.bi-file-earmark-ppt::before { content: \"\\f381\"; }\n.bi-file-earmark-richtext-fill::before { content: \"\\f382\"; }\n.bi-file-earmark-richtext::before { content: \"\\f383\"; }\n.bi-file-earmark-ruled-fill::before { content: \"\\f384\"; }\n.bi-file-earmark-ruled::before { content: \"\\f385\"; }\n.bi-file-earmark-slides-fill::before { content: \"\\f386\"; }\n.bi-file-earmark-slides::before { content: \"\\f387\"; }\n.bi-file-earmark-spreadsheet-fill::before { content: \"\\f388\"; }\n.bi-file-earmark-spreadsheet::before { content: \"\\f389\"; }\n.bi-file-earmark-text-fill::before { content: \"\\f38a\"; }\n.bi-file-earmark-text::before { content: \"\\f38b\"; }\n.bi-file-earmark-word-fill::before { content: \"\\f38c\"; }\n.bi-file-earmark-word::before { content: \"\\f38d\"; }\n.bi-file-earmark-x-fill::before { content: \"\\f38e\"; }\n.bi-file-earmark-x::before { content: \"\\f38f\"; }\n.bi-file-earmark-zip-fill::before { content: \"\\f390\"; }\n.bi-file-earmark-zip::before { content: \"\\f391\"; }\n.bi-file-earmark::before { content: \"\\f392\"; }\n.bi-file-easel-fill::before { content: \"\\f393\"; }\n.bi-file-easel::before { content: \"\\f394\"; }\n.bi-file-excel-fill::before { content: \"\\f395\"; }\n.bi-file-excel::before { content: \"\\f396\"; }\n.bi-file-fill::before { content: \"\\f397\"; }\n.bi-file-font-fill::before { content: \"\\f398\"; }\n.bi-file-font::before { content: \"\\f399\"; }\n.bi-file-image-fill::before { content: \"\\f39a\"; }\n.bi-file-image::before { content: \"\\f39b\"; }\n.bi-file-lock-fill::before { content: \"\\f39c\"; }\n.bi-file-lock::before { content: \"\\f39d\"; }\n.bi-file-lock2-fill::before { content: \"\\f39e\"; }\n.bi-file-lock2::before { content: \"\\f39f\"; }\n.bi-file-medical-fill::before { content: \"\\f3a0\"; }\n.bi-file-medical::before { content: \"\\f3a1\"; }\n.bi-file-minus-fill::before { content: \"\\f3a2\"; }\n.bi-file-minus::before { content: \"\\f3a3\"; }\n.bi-file-music-fill::before { content: \"\\f3a4\"; }\n.bi-file-music::before { content: \"\\f3a5\"; }\n.bi-file-person-fill::before { content: \"\\f3a6\"; }\n.bi-file-person::before { content: \"\\f3a7\"; }\n.bi-file-play-fill::before { content: \"\\f3a8\"; }\n.bi-file-play::before { content: \"\\f3a9\"; }\n.bi-file-plus-fill::before { content: \"\\f3aa\"; }\n.bi-file-plus::before { content: \"\\f3ab\"; }\n.bi-file-post-fill::before { content: \"\\f3ac\"; }\n.bi-file-post::before { content: \"\\f3ad\"; }\n.bi-file-ppt-fill::before { content: \"\\f3ae\"; }\n.bi-file-ppt::before { content: \"\\f3af\"; }\n.bi-file-richtext-fill::before { content: \"\\f3b0\"; }\n.bi-file-richtext::before { content: \"\\f3b1\"; }\n.bi-file-ruled-fill::before { content: \"\\f3b2\"; }\n.bi-file-ruled::before { content: \"\\f3b3\"; }\n.bi-file-slides-fill::before { content: \"\\f3b4\"; }\n.bi-file-slides::before { content: \"\\f3b5\"; }\n.bi-file-spreadsheet-fill::before { content: \"\\f3b6\"; }\n.bi-file-spreadsheet::before { content: \"\\f3b7\"; }\n.bi-file-text-fill::before { content: \"\\f3b8\"; }\n.bi-file-text::before { content: \"\\f3b9\"; }\n.bi-file-word-fill::before { content: \"\\f3ba\"; }\n.bi-file-word::before { content: \"\\f3bb\"; }\n.bi-file-x-fill::before { content: \"\\f3bc\"; }\n.bi-file-x::before { content: \"\\f3bd\"; }\n.bi-file-zip-fill::before { content: \"\\f3be\"; }\n.bi-file-zip::before { content: \"\\f3bf\"; }\n.bi-file::before { content: \"\\f3c0\"; }\n.bi-files-alt::before { content: \"\\f3c1\"; }\n.bi-files::before { content: \"\\f3c2\"; }\n.bi-film::before { content: \"\\f3c3\"; }\n.bi-filter-circle-fill::before { content: \"\\f3c4\"; }\n.bi-filter-circle::before { content: \"\\f3c5\"; }\n.bi-filter-left::before { content: \"\\f3c6\"; }\n.bi-filter-right::before { content: \"\\f3c7\"; }\n.bi-filter-square-fill::before { content: \"\\f3c8\"; }\n.bi-filter-square::before { content: \"\\f3c9\"; }\n.bi-filter::before { content: \"\\f3ca\"; }\n.bi-flag-fill::before { content: \"\\f3cb\"; }\n.bi-flag::before { content: \"\\f3cc\"; }\n.bi-flower1::before { content: \"\\f3cd\"; }\n.bi-flower2::before { content: \"\\f3ce\"; }\n.bi-flower3::before { content: \"\\f3cf\"; }\n.bi-folder-check::before { content: \"\\f3d0\"; }\n.bi-folder-fill::before { content: \"\\f3d1\"; }\n.bi-folder-minus::before { content: \"\\f3d2\"; }\n.bi-folder-plus::before { content: \"\\f3d3\"; }\n.bi-folder-symlink-fill::before { content: \"\\f3d4\"; }\n.bi-folder-symlink::before { content: \"\\f3d5\"; }\n.bi-folder-x::before { content: \"\\f3d6\"; }\n.bi-folder::before { content: \"\\f3d7\"; }\n.bi-folder2-open::before { content: \"\\f3d8\"; }\n.bi-folder2::before { content: \"\\f3d9\"; }\n.bi-fonts::before { content: \"\\f3da\"; }\n.bi-forward-fill::before { content: \"\\f3db\"; }\n.bi-forward::before { content: \"\\f3dc\"; }\n.bi-front::before { content: \"\\f3dd\"; }\n.bi-fullscreen-exit::before { content: \"\\f3de\"; }\n.bi-fullscreen::before { content: \"\\f3df\"; }\n.bi-funnel-fill::before { content: \"\\f3e0\"; }\n.bi-funnel::before { content: \"\\f3e1\"; }\n.bi-gear-fill::before { content: \"\\f3e2\"; }\n.bi-gear-wide-connected::before { content: \"\\f3e3\"; }\n.bi-gear-wide::before { content: \"\\f3e4\"; }\n.bi-gear::before { content: \"\\f3e5\"; }\n.bi-gem::before { content: \"\\f3e6\"; }\n.bi-geo-alt-fill::before { content: \"\\f3e7\"; }\n.bi-geo-alt::before { content: \"\\f3e8\"; }\n.bi-geo-fill::before { content: \"\\f3e9\"; }\n.bi-geo::before { content: \"\\f3ea\"; }\n.bi-gift-fill::before { content: \"\\f3eb\"; }\n.bi-gift::before { content: \"\\f3ec\"; }\n.bi-github::before { content: \"\\f3ed\"; }\n.bi-globe::before { content: \"\\f3ee\"; }\n.bi-globe2::before { content: \"\\f3ef\"; }\n.bi-google::before { content: \"\\f3f0\"; }\n.bi-graph-down::before { content: \"\\f3f1\"; }\n.bi-graph-up::before { content: \"\\f3f2\"; }\n.bi-grid-1x2-fill::before { content: \"\\f3f3\"; }\n.bi-grid-1x2::before { content: \"\\f3f4\"; }\n.bi-grid-3x2-gap-fill::before { content: \"\\f3f5\"; }\n.bi-grid-3x2-gap::before { content: \"\\f3f6\"; }\n.bi-grid-3x2::before { content: \"\\f3f7\"; }\n.bi-grid-3x3-gap-fill::before { content: \"\\f3f8\"; }\n.bi-grid-3x3-gap::before { content: \"\\f3f9\"; }\n.bi-grid-3x3::before { content: \"\\f3fa\"; }\n.bi-grid-fill::before { content: \"\\f3fb\"; }\n.bi-grid::before { content: \"\\f3fc\"; }\n.bi-grip-horizontal::before { content: \"\\f3fd\"; }\n.bi-grip-vertical::before { content: \"\\f3fe\"; }\n.bi-hammer::before { content: \"\\f3ff\"; }\n.bi-hand-index-fill::before { content: \"\\f400\"; }\n.bi-hand-index-thumb-fill::before { content: \"\\f401\"; }\n.bi-hand-index-thumb::before { content: \"\\f402\"; }\n.bi-hand-index::before { content: \"\\f403\"; }\n.bi-hand-thumbs-down-fill::before { content: \"\\f404\"; }\n.bi-hand-thumbs-down::before { content: \"\\f405\"; }\n.bi-hand-thumbs-up-fill::before { content: \"\\f406\"; }\n.bi-hand-thumbs-up::before { content: \"\\f407\"; }\n.bi-handbag-fill::before { content: \"\\f408\"; }\n.bi-handbag::before { content: \"\\f409\"; }\n.bi-hash::before { content: \"\\f40a\"; }\n.bi-hdd-fill::before { content: \"\\f40b\"; }\n.bi-hdd-network-fill::before { content: \"\\f40c\"; }\n.bi-hdd-network::before { content: \"\\f40d\"; }\n.bi-hdd-rack-fill::before { content: \"\\f40e\"; }\n.bi-hdd-rack::before { content: \"\\f40f\"; }\n.bi-hdd-stack-fill::before { content: \"\\f410\"; }\n.bi-hdd-stack::before { content: \"\\f411\"; }\n.bi-hdd::before { content: \"\\f412\"; }\n.bi-headphones::before { content: \"\\f413\"; }\n.bi-headset::before { content: \"\\f414\"; }\n.bi-heart-fill::before { content: \"\\f415\"; }\n.bi-heart-half::before { content: \"\\f416\"; }\n.bi-heart::before { content: \"\\f417\"; }\n.bi-heptagon-fill::before { content: \"\\f418\"; }\n.bi-heptagon-half::before { content: \"\\f419\"; }\n.bi-heptagon::before { content: \"\\f41a\"; }\n.bi-hexagon-fill::before { content: \"\\f41b\"; }\n.bi-hexagon-half::before { content: \"\\f41c\"; }\n.bi-hexagon::before { content: \"\\f41d\"; }\n.bi-hourglass-bottom::before { content: \"\\f41e\"; }\n.bi-hourglass-split::before { content: \"\\f41f\"; }\n.bi-hourglass-top::before { content: \"\\f420\"; }\n.bi-hourglass::before { content: \"\\f421\"; }\n.bi-house-door-fill::before { content: \"\\f422\"; }\n.bi-house-door::before { content: \"\\f423\"; }\n.bi-house-fill::before { content: \"\\f424\"; }\n.bi-house::before { content: \"\\f425\"; }\n.bi-hr::before { content: \"\\f426\"; }\n.bi-hurricane::before { content: \"\\f427\"; }\n.bi-image-alt::before { content: \"\\f428\"; }\n.bi-image-fill::before { content: \"\\f429\"; }\n.bi-image::before { content: \"\\f42a\"; }\n.bi-images::before { content: \"\\f42b\"; }\n.bi-inbox-fill::before { content: \"\\f42c\"; }\n.bi-inbox::before { content: \"\\f42d\"; }\n.bi-inboxes-fill::before { content: \"\\f42e\"; }\n.bi-inboxes::before { content: \"\\f42f\"; }\n.bi-info-circle-fill::before { content: \"\\f430\"; }\n.bi-info-circle::before { content: \"\\f431\"; }\n.bi-info-square-fill::before { content: \"\\f432\"; }\n.bi-info-square::before { content: \"\\f433\"; }\n.bi-info::before { content: \"\\f434\"; }\n.bi-input-cursor-text::before { content: \"\\f435\"; }\n.bi-input-cursor::before { content: \"\\f436\"; }\n.bi-instagram::before { content: \"\\f437\"; }\n.bi-intersect::before { content: \"\\f438\"; }\n.bi-journal-album::before { content: \"\\f439\"; }\n.bi-journal-arrow-down::before { content: \"\\f43a\"; }\n.bi-journal-arrow-up::before { content: \"\\f43b\"; }\n.bi-journal-bookmark-fill::before { content: \"\\f43c\"; }\n.bi-journal-bookmark::before { content: \"\\f43d\"; }\n.bi-journal-check::before { content: \"\\f43e\"; }\n.bi-journal-code::before { content: \"\\f43f\"; }\n.bi-journal-medical::before { content: \"\\f440\"; }\n.bi-journal-minus::before { content: \"\\f441\"; }\n.bi-journal-plus::before { content: \"\\f442\"; }\n.bi-journal-richtext::before { content: \"\\f443\"; }\n.bi-journal-text::before { content: \"\\f444\"; }\n.bi-journal-x::before { content: \"\\f445\"; }\n.bi-journal::before { content: \"\\f446\"; }\n.bi-journals::before { content: \"\\f447\"; }\n.bi-joystick::before { content: \"\\f448\"; }\n.bi-justify-left::before { content: \"\\f449\"; }\n.bi-justify-right::before { content: \"\\f44a\"; }\n.bi-justify::before { content: \"\\f44b\"; }\n.bi-kanban-fill::before { content: \"\\f44c\"; }\n.bi-kanban::before { content: \"\\f44d\"; }\n.bi-key-fill::before { content: \"\\f44e\"; }\n.bi-key::before { content: \"\\f44f\"; }\n.bi-keyboard-fill::before { content: \"\\f450\"; }\n.bi-keyboard::before { content: \"\\f451\"; }\n.bi-ladder::before { content: \"\\f452\"; }\n.bi-lamp-fill::before { content: \"\\f453\"; }\n.bi-lamp::before { content: \"\\f454\"; }\n.bi-laptop-fill::before { content: \"\\f455\"; }\n.bi-laptop::before { content: \"\\f456\"; }\n.bi-layer-backward::before { content: \"\\f457\"; }\n.bi-layer-forward::before { content: \"\\f458\"; }\n.bi-layers-fill::before { content: \"\\f459\"; }\n.bi-layers-half::before { content: \"\\f45a\"; }\n.bi-layers::before { content: \"\\f45b\"; }\n.bi-layout-sidebar-inset-reverse::before { content: \"\\f45c\"; }\n.bi-layout-sidebar-inset::before { content: \"\\f45d\"; }\n.bi-layout-sidebar-reverse::before { content: \"\\f45e\"; }\n.bi-layout-sidebar::before { content: \"\\f45f\"; }\n.bi-layout-split::before { content: \"\\f460\"; }\n.bi-layout-text-sidebar-reverse::before { content: \"\\f461\"; }\n.bi-layout-text-sidebar::before { content: \"\\f462\"; }\n.bi-layout-text-window-reverse::before { content: \"\\f463\"; }\n.bi-layout-text-window::before { content: \"\\f464\"; }\n.bi-layout-three-columns::before { content: \"\\f465\"; }\n.bi-layout-wtf::before { content: \"\\f466\"; }\n.bi-life-preserver::before { content: \"\\f467\"; }\n.bi-lightbulb-fill::before { content: \"\\f468\"; }\n.bi-lightbulb-off-fill::before { content: \"\\f469\"; }\n.bi-lightbulb-off::before { content: \"\\f46a\"; }\n.bi-lightbulb::before { content: \"\\f46b\"; }\n.bi-lightning-charge-fill::before { content: \"\\f46c\"; }\n.bi-lightning-charge::before { content: \"\\f46d\"; }\n.bi-lightning-fill::before { content: \"\\f46e\"; }\n.bi-lightning::before { content: \"\\f46f\"; }\n.bi-link-45deg::before { content: \"\\f470\"; }\n.bi-link::before { content: \"\\f471\"; }\n.bi-linkedin::before { content: \"\\f472\"; }\n.bi-list-check::before { content: \"\\f473\"; }\n.bi-list-nested::before { content: \"\\f474\"; }\n.bi-list-ol::before { content: \"\\f475\"; }\n.bi-list-stars::before { content: \"\\f476\"; }\n.bi-list-task::before { content: \"\\f477\"; }\n.bi-list-ul::before { content: \"\\f478\"; }\n.bi-list::before { content: \"\\f479\"; }\n.bi-lock-fill::before { content: \"\\f47a\"; }\n.bi-lock::before { content: \"\\f47b\"; }\n.bi-mailbox::before { content: \"\\f47c\"; }\n.bi-mailbox2::before { content: \"\\f47d\"; }\n.bi-map-fill::before { content: \"\\f47e\"; }\n.bi-map::before { content: \"\\f47f\"; }\n.bi-markdown-fill::before { content: \"\\f480\"; }\n.bi-markdown::before { content: \"\\f481\"; }\n.bi-mask::before { content: \"\\f482\"; }\n.bi-megaphone-fill::before { content: \"\\f483\"; }\n.bi-megaphone::before { content: \"\\f484\"; }\n.bi-menu-app-fill::before { content: \"\\f485\"; }\n.bi-menu-app::before { content: \"\\f486\"; }\n.bi-menu-button-fill::before { content: \"\\f487\"; }\n.bi-menu-button-wide-fill::before { content: \"\\f488\"; }\n.bi-menu-button-wide::before { content: \"\\f489\"; }\n.bi-menu-button::before { content: \"\\f48a\"; }\n.bi-menu-down::before { content: \"\\f48b\"; }\n.bi-menu-up::before { content: \"\\f48c\"; }\n.bi-mic-fill::before { content: \"\\f48d\"; }\n.bi-mic-mute-fill::before { content: \"\\f48e\"; }\n.bi-mic-mute::before { content: \"\\f48f\"; }\n.bi-mic::before { content: \"\\f490\"; }\n.bi-minecart-loaded::before { content: \"\\f491\"; }\n.bi-minecart::before { content: \"\\f492\"; }\n.bi-moisture::before { content: \"\\f493\"; }\n.bi-moon-fill::before { content: \"\\f494\"; }\n.bi-moon-stars-fill::before { content: \"\\f495\"; }\n.bi-moon-stars::before { content: \"\\f496\"; }\n.bi-moon::before { content: \"\\f497\"; }\n.bi-mouse-fill::before { content: \"\\f498\"; }\n.bi-mouse::before { content: \"\\f499\"; }\n.bi-mouse2-fill::before { content: \"\\f49a\"; }\n.bi-mouse2::before { content: \"\\f49b\"; }\n.bi-mouse3-fill::before { content: \"\\f49c\"; }\n.bi-mouse3::before { content: \"\\f49d\"; }\n.bi-music-note-beamed::before { content: \"\\f49e\"; }\n.bi-music-note-list::before { content: \"\\f49f\"; }\n.bi-music-note::before { content: \"\\f4a0\"; }\n.bi-music-player-fill::before { content: \"\\f4a1\"; }\n.bi-music-player::before { content: \"\\f4a2\"; }\n.bi-newspaper::before { content: \"\\f4a3\"; }\n.bi-node-minus-fill::before { content: \"\\f4a4\"; }\n.bi-node-minus::before { content: \"\\f4a5\"; }\n.bi-node-plus-fill::before { content: \"\\f4a6\"; }\n.bi-node-plus::before { content: \"\\f4a7\"; }\n.bi-nut-fill::before { content: \"\\f4a8\"; }\n.bi-nut::before { content: \"\\f4a9\"; }\n.bi-octagon-fill::before { content: \"\\f4aa\"; }\n.bi-octagon-half::before { content: \"\\f4ab\"; }\n.bi-octagon::before { content: \"\\f4ac\"; }\n.bi-option::before { content: \"\\f4ad\"; }\n.bi-outlet::before { content: \"\\f4ae\"; }\n.bi-paint-bucket::before { content: \"\\f4af\"; }\n.bi-palette-fill::before { content: \"\\f4b0\"; }\n.bi-palette::before { content: \"\\f4b1\"; }\n.bi-palette2::before { content: \"\\f4b2\"; }\n.bi-paperclip::before { content: \"\\f4b3\"; }\n.bi-paragraph::before { content: \"\\f4b4\"; }\n.bi-patch-check-fill::before { content: \"\\f4b5\"; }\n.bi-patch-check::before { content: \"\\f4b6\"; }\n.bi-patch-exclamation-fill::before { content: \"\\f4b7\"; }\n.bi-patch-exclamation::before { content: \"\\f4b8\"; }\n.bi-patch-minus-fill::before { content: \"\\f4b9\"; }\n.bi-patch-minus::before { content: \"\\f4ba\"; }\n.bi-patch-plus-fill::before { content: \"\\f4bb\"; }\n.bi-patch-plus::before { content: \"\\f4bc\"; }\n.bi-patch-question-fill::before { content: \"\\f4bd\"; }\n.bi-patch-question::before { content: \"\\f4be\"; }\n.bi-pause-btn-fill::before { content: \"\\f4bf\"; }\n.bi-pause-btn::before { content: \"\\f4c0\"; }\n.bi-pause-circle-fill::before { content: \"\\f4c1\"; }\n.bi-pause-circle::before { content: \"\\f4c2\"; }\n.bi-pause-fill::before { content: \"\\f4c3\"; }\n.bi-pause::before { content: \"\\f4c4\"; }\n.bi-peace-fill::before { content: \"\\f4c5\"; }\n.bi-peace::before { content: \"\\f4c6\"; }\n.bi-pen-fill::before { content: \"\\f4c7\"; }\n.bi-pen::before { content: \"\\f4c8\"; }\n.bi-pencil-fill::before { content: \"\\f4c9\"; }\n.bi-pencil-square::before { content: \"\\f4ca\"; }\n.bi-pencil::before { content: \"\\f4cb\"; }\n.bi-pentagon-fill::before { content: \"\\f4cc\"; }\n.bi-pentagon-half::before { content: \"\\f4cd\"; }\n.bi-pentagon::before { content: \"\\f4ce\"; }\n.bi-people-fill::before { content: \"\\f4cf\"; }\n.bi-people::before { content: \"\\f4d0\"; }\n.bi-percent::before { content: \"\\f4d1\"; }\n.bi-person-badge-fill::before { content: \"\\f4d2\"; }\n.bi-person-badge::before { content: \"\\f4d3\"; }\n.bi-person-bounding-box::before { content: \"\\f4d4\"; }\n.bi-person-check-fill::before { content: \"\\f4d5\"; }\n.bi-person-check::before { content: \"\\f4d6\"; }\n.bi-person-circle::before { content: \"\\f4d7\"; }\n.bi-person-dash-fill::before { content: \"\\f4d8\"; }\n.bi-person-dash::before { content: \"\\f4d9\"; }\n.bi-person-fill::before { content: \"\\f4da\"; }\n.bi-person-lines-fill::before { content: \"\\f4db\"; }\n.bi-person-plus-fill::before { content: \"\\f4dc\"; }\n.bi-person-plus::before { content: \"\\f4dd\"; }\n.bi-person-square::before { content: \"\\f4de\"; }\n.bi-person-x-fill::before { content: \"\\f4df\"; }\n.bi-person-x::before { content: \"\\f4e0\"; }\n.bi-person::before { content: \"\\f4e1\"; }\n.bi-phone-fill::before { content: \"\\f4e2\"; }\n.bi-phone-landscape-fill::before { content: \"\\f4e3\"; }\n.bi-phone-landscape::before { content: \"\\f4e4\"; }\n.bi-phone-vibrate-fill::before { content: \"\\f4e5\"; }\n.bi-phone-vibrate::before { content: \"\\f4e6\"; }\n.bi-phone::before { content: \"\\f4e7\"; }\n.bi-pie-chart-fill::before { content: \"\\f4e8\"; }\n.bi-pie-chart::before { content: \"\\f4e9\"; }\n.bi-pin-angle-fill::before { content: \"\\f4ea\"; }\n.bi-pin-angle::before { content: \"\\f4eb\"; }\n.bi-pin-fill::before { content: \"\\f4ec\"; }\n.bi-pin::before { content: \"\\f4ed\"; }\n.bi-pip-fill::before { content: \"\\f4ee\"; }\n.bi-pip::before { content: \"\\f4ef\"; }\n.bi-play-btn-fill::before { content: \"\\f4f0\"; }\n.bi-play-btn::before { content: \"\\f4f1\"; }\n.bi-play-circle-fill::before { content: \"\\f4f2\"; }\n.bi-play-circle::before { content: \"\\f4f3\"; }\n.bi-play-fill::before { content: \"\\f4f4\"; }\n.bi-play::before { content: \"\\f4f5\"; }\n.bi-plug-fill::before { content: \"\\f4f6\"; }\n.bi-plug::before { content: \"\\f4f7\"; }\n.bi-plus-circle-dotted::before { content: \"\\f4f8\"; }\n.bi-plus-circle-fill::before { content: \"\\f4f9\"; }\n.bi-plus-circle::before { content: \"\\f4fa\"; }\n.bi-plus-square-dotted::before { content: \"\\f4fb\"; }\n.bi-plus-square-fill::before { content: \"\\f4fc\"; }\n.bi-plus-square::before { content: \"\\f4fd\"; }\n.bi-plus::before { content: \"\\f4fe\"; }\n.bi-power::before { content: \"\\f4ff\"; }\n.bi-printer-fill::before { content: \"\\f500\"; }\n.bi-printer::before { content: \"\\f501\"; }\n.bi-puzzle-fill::before { content: \"\\f502\"; }\n.bi-puzzle::before { content: \"\\f503\"; }\n.bi-question-circle-fill::before { content: \"\\f504\"; }\n.bi-question-circle::before { content: \"\\f505\"; }\n.bi-question-diamond-fill::before { content: \"\\f506\"; }\n.bi-question-diamond::before { content: \"\\f507\"; }\n.bi-question-octagon-fill::before { content: \"\\f508\"; }\n.bi-question-octagon::before { content: \"\\f509\"; }\n.bi-question-square-fill::before { content: \"\\f50a\"; }\n.bi-question-square::before { content: \"\\f50b\"; }\n.bi-question::before { content: \"\\f50c\"; }\n.bi-rainbow::before { content: \"\\f50d\"; }\n.bi-receipt-cutoff::before { content: \"\\f50e\"; }\n.bi-receipt::before { content: \"\\f50f\"; }\n.bi-reception-0::before { content: \"\\f510\"; }\n.bi-reception-1::before { content: \"\\f511\"; }\n.bi-reception-2::before { content: \"\\f512\"; }\n.bi-reception-3::before { content: \"\\f513\"; }\n.bi-reception-4::before { content: \"\\f514\"; }\n.bi-record-btn-fill::before { content: \"\\f515\"; }\n.bi-record-btn::before { content: \"\\f516\"; }\n.bi-record-circle-fill::before { content: \"\\f517\"; }\n.bi-record-circle::before { content: \"\\f518\"; }\n.bi-record-fill::before { content: \"\\f519\"; }\n.bi-record::before { content: \"\\f51a\"; }\n.bi-record2-fill::before { content: \"\\f51b\"; }\n.bi-record2::before { content: \"\\f51c\"; }\n.bi-reply-all-fill::before { content: \"\\f51d\"; }\n.bi-reply-all::before { content: \"\\f51e\"; }\n.bi-reply-fill::before { content: \"\\f51f\"; }\n.bi-reply::before { content: \"\\f520\"; }\n.bi-rss-fill::before { content: \"\\f521\"; }\n.bi-rss::before { content: \"\\f522\"; }\n.bi-rulers::before { content: \"\\f523\"; }\n.bi-save-fill::before { content: \"\\f524\"; }\n.bi-save::before { content: \"\\f525\"; }\n.bi-save2-fill::before { content: \"\\f526\"; }\n.bi-save2::before { content: \"\\f527\"; }\n.bi-scissors::before { content: \"\\f528\"; }\n.bi-screwdriver::before { content: \"\\f529\"; }\n.bi-search::before { content: \"\\f52a\"; }\n.bi-segmented-nav::before { content: \"\\f52b\"; }\n.bi-server::before { content: \"\\f52c\"; }\n.bi-share-fill::before { content: \"\\f52d\"; }\n.bi-share::before { content: \"\\f52e\"; }\n.bi-shield-check::before { content: \"\\f52f\"; }\n.bi-shield-exclamation::before { content: \"\\f530\"; }\n.bi-shield-fill-check::before { content: \"\\f531\"; }\n.bi-shield-fill-exclamation::before { content: \"\\f532\"; }\n.bi-shield-fill-minus::before { content: \"\\f533\"; }\n.bi-shield-fill-plus::before { content: \"\\f534\"; }\n.bi-shield-fill-x::before { content: \"\\f535\"; }\n.bi-shield-fill::before { content: \"\\f536\"; }\n.bi-shield-lock-fill::before { content: \"\\f537\"; }\n.bi-shield-lock::before { content: \"\\f538\"; }\n.bi-shield-minus::before { content: \"\\f539\"; }\n.bi-shield-plus::before { content: \"\\f53a\"; }\n.bi-shield-shaded::before { content: \"\\f53b\"; }\n.bi-shield-slash-fill::before { content: \"\\f53c\"; }\n.bi-shield-slash::before { content: \"\\f53d\"; }\n.bi-shield-x::before { content: \"\\f53e\"; }\n.bi-shield::before { content: \"\\f53f\"; }\n.bi-shift-fill::before { content: \"\\f540\"; }\n.bi-shift::before { content: \"\\f541\"; }\n.bi-shop-window::before { content: \"\\f542\"; }\n.bi-shop::before { content: \"\\f543\"; }\n.bi-shuffle::before { content: \"\\f544\"; }\n.bi-signpost-2-fill::before { content: \"\\f545\"; }\n.bi-signpost-2::before { content: \"\\f546\"; }\n.bi-signpost-fill::before { content: \"\\f547\"; }\n.bi-signpost-split-fill::before { content: \"\\f548\"; }\n.bi-signpost-split::before { content: \"\\f549\"; }\n.bi-signpost::before { content: \"\\f54a\"; }\n.bi-sim-fill::before { content: \"\\f54b\"; }\n.bi-sim::before { content: \"\\f54c\"; }\n.bi-skip-backward-btn-fill::before { content: \"\\f54d\"; }\n.bi-skip-backward-btn::before { content: \"\\f54e\"; }\n.bi-skip-backward-circle-fill::before { content: \"\\f54f\"; }\n.bi-skip-backward-circle::before { content: \"\\f550\"; }\n.bi-skip-backward-fill::before { content: \"\\f551\"; }\n.bi-skip-backward::before { content: \"\\f552\"; }\n.bi-skip-end-btn-fill::before { content: \"\\f553\"; }\n.bi-skip-end-btn::before { content: \"\\f554\"; }\n.bi-skip-end-circle-fill::before { content: \"\\f555\"; }\n.bi-skip-end-circle::before { content: \"\\f556\"; }\n.bi-skip-end-fill::before { content: \"\\f557\"; }\n.bi-skip-end::before { content: \"\\f558\"; }\n.bi-skip-forward-btn-fill::before { content: \"\\f559\"; }\n.bi-skip-forward-btn::before { content: \"\\f55a\"; }\n.bi-skip-forward-circle-fill::before { content: \"\\f55b\"; }\n.bi-skip-forward-circle::before { content: \"\\f55c\"; }\n.bi-skip-forward-fill::before { content: \"\\f55d\"; }\n.bi-skip-forward::before { content: \"\\f55e\"; }\n.bi-skip-start-btn-fill::before { content: \"\\f55f\"; }\n.bi-skip-start-btn::before { content: \"\\f560\"; }\n.bi-skip-start-circle-fill::before { content: \"\\f561\"; }\n.bi-skip-start-circle::before { content: \"\\f562\"; }\n.bi-skip-start-fill::before { content: \"\\f563\"; }\n.bi-skip-start::before { content: \"\\f564\"; }\n.bi-slack::before { content: \"\\f565\"; }\n.bi-slash-circle-fill::before { content: \"\\f566\"; }\n.bi-slash-circle::before { content: \"\\f567\"; }\n.bi-slash-square-fill::before { content: \"\\f568\"; }\n.bi-slash-square::before { content: \"\\f569\"; }\n.bi-slash::before { content: \"\\f56a\"; }\n.bi-sliders::before { content: \"\\f56b\"; }\n.bi-smartwatch::before { content: \"\\f56c\"; }\n.bi-snow::before { content: \"\\f56d\"; }\n.bi-snow2::before { content: \"\\f56e\"; }\n.bi-snow3::before { content: \"\\f56f\"; }\n.bi-sort-alpha-down-alt::before { content: \"\\f570\"; }\n.bi-sort-alpha-down::before { content: \"\\f571\"; }\n.bi-sort-alpha-up-alt::before { content: \"\\f572\"; }\n.bi-sort-alpha-up::before { content: \"\\f573\"; }\n.bi-sort-down-alt::before { content: \"\\f574\"; }\n.bi-sort-down::before { content: \"\\f575\"; }\n.bi-sort-numeric-down-alt::before { content: \"\\f576\"; }\n.bi-sort-numeric-down::before { content: \"\\f577\"; }\n.bi-sort-numeric-up-alt::before { content: \"\\f578\"; }\n.bi-sort-numeric-up::before { content: \"\\f579\"; }\n.bi-sort-up-alt::before { content: \"\\f57a\"; }\n.bi-sort-up::before { content: \"\\f57b\"; }\n.bi-soundwave::before { content: \"\\f57c\"; }\n.bi-speaker-fill::before { content: \"\\f57d\"; }\n.bi-speaker::before { content: \"\\f57e\"; }\n.bi-speedometer::before { content: \"\\f57f\"; }\n.bi-speedometer2::before { content: \"\\f580\"; }\n.bi-spellcheck::before { content: \"\\f581\"; }\n.bi-square-fill::before { content: \"\\f582\"; }\n.bi-square-half::before { content: \"\\f583\"; }\n.bi-square::before { content: \"\\f584\"; }\n.bi-stack::before { content: \"\\f585\"; }\n.bi-star-fill::before { content: \"\\f586\"; }\n.bi-star-half::before { content: \"\\f587\"; }\n.bi-star::before { content: \"\\f588\"; }\n.bi-stars::before { content: \"\\f589\"; }\n.bi-stickies-fill::before { content: \"\\f58a\"; }\n.bi-stickies::before { content: \"\\f58b\"; }\n.bi-sticky-fill::before { content: \"\\f58c\"; }\n.bi-sticky::before { content: \"\\f58d\"; }\n.bi-stop-btn-fill::before { content: \"\\f58e\"; }\n.bi-stop-btn::before { content: \"\\f58f\"; }\n.bi-stop-circle-fill::before { content: \"\\f590\"; }\n.bi-stop-circle::before { content: \"\\f591\"; }\n.bi-stop-fill::before { content: \"\\f592\"; }\n.bi-stop::before { content: \"\\f593\"; }\n.bi-stoplights-fill::before { content: \"\\f594\"; }\n.bi-stoplights::before { content: \"\\f595\"; }\n.bi-stopwatch-fill::before { content: \"\\f596\"; }\n.bi-stopwatch::before { content: \"\\f597\"; }\n.bi-subtract::before { content: \"\\f598\"; }\n.bi-suit-club-fill::before { content: \"\\f599\"; }\n.bi-suit-club::before { content: \"\\f59a\"; }\n.bi-suit-diamond-fill::before { content: \"\\f59b\"; }\n.bi-suit-diamond::before { content: \"\\f59c\"; }\n.bi-suit-heart-fill::before { content: \"\\f59d\"; }\n.bi-suit-heart::before { content: \"\\f59e\"; }\n.bi-suit-spade-fill::before { content: \"\\f59f\"; }\n.bi-suit-spade::before { content: \"\\f5a0\"; }\n.bi-sun-fill::before { content: \"\\f5a1\"; }\n.bi-sun::before { content: \"\\f5a2\"; }\n.bi-sunglasses::before { content: \"\\f5a3\"; }\n.bi-sunrise-fill::before { content: \"\\f5a4\"; }\n.bi-sunrise::before { content: \"\\f5a5\"; }\n.bi-sunset-fill::before { content: \"\\f5a6\"; }\n.bi-sunset::before { content: \"\\f5a7\"; }\n.bi-symmetry-horizontal::before { content: \"\\f5a8\"; }\n.bi-symmetry-vertical::before { content: \"\\f5a9\"; }\n.bi-table::before { content: \"\\f5aa\"; }\n.bi-tablet-fill::before { content: \"\\f5ab\"; }\n.bi-tablet-landscape-fill::before { content: \"\\f5ac\"; }\n.bi-tablet-landscape::before { content: \"\\f5ad\"; }\n.bi-tablet::before { content: \"\\f5ae\"; }\n.bi-tag-fill::before { content: \"\\f5af\"; }\n.bi-tag::before { content: \"\\f5b0\"; }\n.bi-tags-fill::before { content: \"\\f5b1\"; }\n.bi-tags::before { content: \"\\f5b2\"; }\n.bi-telegram::before { content: \"\\f5b3\"; }\n.bi-telephone-fill::before { content: \"\\f5b4\"; }\n.bi-telephone-forward-fill::before { content: \"\\f5b5\"; }\n.bi-telephone-forward::before { content: \"\\f5b6\"; }\n.bi-telephone-inbound-fill::before { content: \"\\f5b7\"; }\n.bi-telephone-inbound::before { content: \"\\f5b8\"; }\n.bi-telephone-minus-fill::before { content: \"\\f5b9\"; }\n.bi-telephone-minus::before { content: \"\\f5ba\"; }\n.bi-telephone-outbound-fill::before { content: \"\\f5bb\"; }\n.bi-telephone-outbound::before { content: \"\\f5bc\"; }\n.bi-telephone-plus-fill::before { content: \"\\f5bd\"; }\n.bi-telephone-plus::before { content: \"\\f5be\"; }\n.bi-telephone-x-fill::before { content: \"\\f5bf\"; }\n.bi-telephone-x::before { content: \"\\f5c0\"; }\n.bi-telephone::before { content: \"\\f5c1\"; }\n.bi-terminal-fill::before { content: \"\\f5c2\"; }\n.bi-terminal::before { content: \"\\f5c3\"; }\n.bi-text-center::before { content: \"\\f5c4\"; }\n.bi-text-indent-left::before { content: \"\\f5c5\"; }\n.bi-text-indent-right::before { content: \"\\f5c6\"; }\n.bi-text-left::before { content: \"\\f5c7\"; }\n.bi-text-paragraph::before { content: \"\\f5c8\"; }\n.bi-text-right::before { content: \"\\f5c9\"; }\n.bi-textarea-resize::before { content: \"\\f5ca\"; }\n.bi-textarea-t::before { content: \"\\f5cb\"; }\n.bi-textarea::before { content: \"\\f5cc\"; }\n.bi-thermometer-half::before { content: \"\\f5cd\"; }\n.bi-thermometer-high::before { content: \"\\f5ce\"; }\n.bi-thermometer-low::before { content: \"\\f5cf\"; }\n.bi-thermometer-snow::before { content: \"\\f5d0\"; }\n.bi-thermometer-sun::before { content: \"\\f5d1\"; }\n.bi-thermometer::before { content: \"\\f5d2\"; }\n.bi-three-dots-vertical::before { content: \"\\f5d3\"; }\n.bi-three-dots::before { content: \"\\f5d4\"; }\n.bi-toggle-off::before { content: \"\\f5d5\"; }\n.bi-toggle-on::before { content: \"\\f5d6\"; }\n.bi-toggle2-off::before { content: \"\\f5d7\"; }\n.bi-toggle2-on::before { content: \"\\f5d8\"; }\n.bi-toggles::before { content: \"\\f5d9\"; }\n.bi-toggles2::before { content: \"\\f5da\"; }\n.bi-tools::before { content: \"\\f5db\"; }\n.bi-tornado::before { content: \"\\f5dc\"; }\n.bi-trash-fill::before { content: \"\\f5dd\"; }\n.bi-trash::before { content: \"\\f5de\"; }\n.bi-trash2-fill::before { content: \"\\f5df\"; }\n.bi-trash2::before { content: \"\\f5e0\"; }\n.bi-tree-fill::before { content: \"\\f5e1\"; }\n.bi-tree::before { content: \"\\f5e2\"; }\n.bi-triangle-fill::before { content: \"\\f5e3\"; }\n.bi-triangle-half::before { content: \"\\f5e4\"; }\n.bi-triangle::before { content: \"\\f5e5\"; }\n.bi-trophy-fill::before { content: \"\\f5e6\"; }\n.bi-trophy::before { content: \"\\f5e7\"; }\n.bi-tropical-storm::before { content: \"\\f5e8\"; }\n.bi-truck-flatbed::before { content: \"\\f5e9\"; }\n.bi-truck::before { content: \"\\f5ea\"; }\n.bi-tsunami::before { content: \"\\f5eb\"; }\n.bi-tv-fill::before { content: \"\\f5ec\"; }\n.bi-tv::before { content: \"\\f5ed\"; }\n.bi-twitch::before { content: \"\\f5ee\"; }\n.bi-twitter::before { content: \"\\f5ef\"; }\n.bi-type-bold::before { content: \"\\f5f0\"; }\n.bi-type-h1::before { content: \"\\f5f1\"; }\n.bi-type-h2::before { content: \"\\f5f2\"; }\n.bi-type-h3::before { content: \"\\f5f3\"; }\n.bi-type-italic::before { content: \"\\f5f4\"; }\n.bi-type-strikethrough::before { content: \"\\f5f5\"; }\n.bi-type-underline::before { content: \"\\f5f6\"; }\n.bi-type::before { content: \"\\f5f7\"; }\n.bi-ui-checks-grid::before { content: \"\\f5f8\"; }\n.bi-ui-checks::before { content: \"\\f5f9\"; }\n.bi-ui-radios-grid::before { content: \"\\f5fa\"; }\n.bi-ui-radios::before { content: \"\\f5fb\"; }\n.bi-umbrella-fill::before { content: \"\\f5fc\"; }\n.bi-umbrella::before { content: \"\\f5fd\"; }\n.bi-union::before { content: \"\\f5fe\"; }\n.bi-unlock-fill::before { content: \"\\f5ff\"; }\n.bi-unlock::before { content: \"\\f600\"; }\n.bi-upc-scan::before { content: \"\\f601\"; }\n.bi-upc::before { content: \"\\f602\"; }\n.bi-upload::before { content: \"\\f603\"; }\n.bi-vector-pen::before { content: \"\\f604\"; }\n.bi-view-list::before { content: \"\\f605\"; }\n.bi-view-stacked::before { content: \"\\f606\"; }\n.bi-vinyl-fill::before { content: \"\\f607\"; }\n.bi-vinyl::before { content: \"\\f608\"; }\n.bi-voicemail::before { content: \"\\f609\"; }\n.bi-volume-down-fill::before { content: \"\\f60a\"; }\n.bi-volume-down::before { content: \"\\f60b\"; }\n.bi-volume-mute-fill::before { content: \"\\f60c\"; }\n.bi-volume-mute::before { content: \"\\f60d\"; }\n.bi-volume-off-fill::before { content: \"\\f60e\"; }\n.bi-volume-off::before { content: \"\\f60f\"; }\n.bi-volume-up-fill::before { content: \"\\f610\"; }\n.bi-volume-up::before { content: \"\\f611\"; }\n.bi-vr::before { content: \"\\f612\"; }\n.bi-wallet-fill::before { content: \"\\f613\"; }\n.bi-wallet::before { content: \"\\f614\"; }\n.bi-wallet2::before { content: \"\\f615\"; }\n.bi-watch::before { content: \"\\f616\"; }\n.bi-water::before { content: \"\\f617\"; }\n.bi-whatsapp::before { content: \"\\f618\"; }\n.bi-wifi-1::before { content: \"\\f619\"; }\n.bi-wifi-2::before { content: \"\\f61a\"; }\n.bi-wifi-off::before { content: \"\\f61b\"; }\n.bi-wifi::before { content: \"\\f61c\"; }\n.bi-wind::before { content: \"\\f61d\"; }\n.bi-window-dock::before { content: \"\\f61e\"; }\n.bi-window-sidebar::before { content: \"\\f61f\"; }\n.bi-window::before { content: \"\\f620\"; }\n.bi-wrench::before { content: \"\\f621\"; }\n.bi-x-circle-fill::before { content: \"\\f622\"; }\n.bi-x-circle::before { content: \"\\f623\"; }\n.bi-x-diamond-fill::before { content: \"\\f624\"; }\n.bi-x-diamond::before { content: \"\\f625\"; }\n.bi-x-octagon-fill::before { content: \"\\f626\"; }\n.bi-x-octagon::before { content: \"\\f627\"; }\n.bi-x-square-fill::before { content: \"\\f628\"; }\n.bi-x-square::before { content: \"\\f629\"; }\n.bi-x::before { content: \"\\f62a\"; }\n.bi-youtube::before { content: \"\\f62b\"; }\n.bi-zoom-in::before { content: \"\\f62c\"; }\n.bi-zoom-out::before { content: \"\\f62d\"; }\n.bi-bank::before { content: \"\\f62e\"; }\n.bi-bank2::before { content: \"\\f62f\"; }\n.bi-bell-slash-fill::before { content: \"\\f630\"; }\n.bi-bell-slash::before { content: \"\\f631\"; }\n.bi-cash-coin::before { content: \"\\f632\"; }\n.bi-check-lg::before { content: \"\\f633\"; }\n.bi-coin::before { content: \"\\f634\"; }\n.bi-currency-bitcoin::before { content: \"\\f635\"; }\n.bi-currency-dollar::before { content: \"\\f636\"; }\n.bi-currency-euro::before { content: \"\\f637\"; }\n.bi-currency-exchange::before { content: \"\\f638\"; }\n.bi-currency-pound::before { content: \"\\f639\"; }\n.bi-currency-yen::before { content: \"\\f63a\"; }\n.bi-dash-lg::before { content: \"\\f63b\"; }\n.bi-exclamation-lg::before { content: \"\\f63c\"; }\n.bi-file-earmark-pdf-fill::before { content: \"\\f63d\"; }\n.bi-file-earmark-pdf::before { content: \"\\f63e\"; }\n.bi-file-pdf-fill::before { content: \"\\f63f\"; }\n.bi-file-pdf::before { content: \"\\f640\"; }\n.bi-gender-ambiguous::before { content: \"\\f641\"; }\n.bi-gender-female::before { content: \"\\f642\"; }\n.bi-gender-male::before { content: \"\\f643\"; }\n.bi-gender-trans::before { content: \"\\f644\"; }\n.bi-headset-vr::before { content: \"\\f645\"; }\n.bi-info-lg::before { content: \"\\f646\"; }\n.bi-mastodon::before { content: \"\\f647\"; }\n.bi-messenger::before { content: \"\\f648\"; }\n.bi-piggy-bank-fill::before { content: \"\\f649\"; }\n.bi-piggy-bank::before { content: \"\\f64a\"; }\n.bi-pin-map-fill::before { content: \"\\f64b\"; }\n.bi-pin-map::before { content: \"\\f64c\"; }\n.bi-plus-lg::before { content: \"\\f64d\"; }\n.bi-question-lg::before { content: \"\\f64e\"; }\n.bi-recycle::before { content: \"\\f64f\"; }\n.bi-reddit::before { content: \"\\f650\"; }\n.bi-safe-fill::before { content: \"\\f651\"; }\n.bi-safe2-fill::before { content: \"\\f652\"; }\n.bi-safe2::before { content: \"\\f653\"; }\n.bi-sd-card-fill::before { content: \"\\f654\"; }\n.bi-sd-card::before { content: \"\\f655\"; }\n.bi-skype::before { content: \"\\f656\"; }\n.bi-slash-lg::before { content: \"\\f657\"; }\n.bi-translate::before { content: \"\\f658\"; }\n.bi-x-lg::before { content: \"\\f659\"; }\n.bi-safe::before { content: \"\\f65a\"; }\n.bi-apple::before { content: \"\\f65b\"; }\n.bi-microsoft::before { content: \"\\f65d\"; }\n.bi-windows::before { content: \"\\f65e\"; }\n.bi-behance::before { content: \"\\f65c\"; }\n.bi-dribbble::before { content: \"\\f65f\"; }\n.bi-line::before { content: \"\\f660\"; }\n.bi-medium::before { content: \"\\f661\"; }\n.bi-paypal::before { content: \"\\f662\"; }\n.bi-pinterest::before { content: \"\\f663\"; }\n.bi-signal::before { content: \"\\f664\"; }\n.bi-snapchat::before { content: \"\\f665\"; }\n.bi-spotify::before { content: \"\\f666\"; }\n.bi-stack-overflow::before { content: \"\\f667\"; }\n.bi-strava::before { content: \"\\f668\"; }\n.bi-wordpress::before { content: \"\\f669\"; }\n.bi-vimeo::before { content: \"\\f66a\"; }\n.bi-activity::before { content: \"\\f66b\"; }\n.bi-easel2-fill::before { content: \"\\f66c\"; }\n.bi-easel2::before { content: \"\\f66d\"; }\n.bi-easel3-fill::before { content: \"\\f66e\"; }\n.bi-easel3::before { content: \"\\f66f\"; }\n.bi-fan::before { content: \"\\f670\"; }\n.bi-fingerprint::before { content: \"\\f671\"; }\n.bi-graph-down-arrow::before { content: \"\\f672\"; }\n.bi-graph-up-arrow::before { content: \"\\f673\"; }\n.bi-hypnotize::before { content: \"\\f674\"; }\n.bi-magic::before { content: \"\\f675\"; }\n.bi-person-rolodex::before { content: \"\\f676\"; }\n.bi-person-video::before { content: \"\\f677\"; }\n.bi-person-video2::before { content: \"\\f678\"; }\n.bi-person-video3::before { content: \"\\f679\"; }\n.bi-person-workspace::before { content: \"\\f67a\"; }\n.bi-radioactive::before { content: \"\\f67b\"; }\n.bi-webcam-fill::before { content: \"\\f67c\"; }\n.bi-webcam::before { content: \"\\f67d\"; }\n.bi-yin-yang::before { content: \"\\f67e\"; }\n.bi-bandaid-fill::before { content: \"\\f680\"; }\n.bi-bandaid::before { content: \"\\f681\"; }\n.bi-bluetooth::before { content: \"\\f682\"; }\n.bi-body-text::before { content: \"\\f683\"; }\n.bi-boombox::before { content: \"\\f684\"; }\n.bi-boxes::before { content: \"\\f685\"; }\n.bi-dpad-fill::before { content: \"\\f686\"; }\n.bi-dpad::before { content: \"\\f687\"; }\n.bi-ear-fill::before { content: \"\\f688\"; }\n.bi-ear::before { content: \"\\f689\"; }\n.bi-envelope-check-1::before { content: \"\\f68a\"; }\n.bi-envelope-check-fill::before { content: \"\\f68b\"; }\n.bi-envelope-check::before { content: \"\\f68c\"; }\n.bi-envelope-dash-1::before { content: \"\\f68d\"; }\n.bi-envelope-dash-fill::before { content: \"\\f68e\"; }\n.bi-envelope-dash::before { content: \"\\f68f\"; }\n.bi-envelope-exclamation-1::before { content: \"\\f690\"; }\n.bi-envelope-exclamation-fill::before { content: \"\\f691\"; }\n.bi-envelope-exclamation::before { content: \"\\f692\"; }\n.bi-envelope-plus-fill::before { content: \"\\f693\"; }\n.bi-envelope-plus::before { content: \"\\f694\"; }\n.bi-envelope-slash-1::before { content: \"\\f695\"; }\n.bi-envelope-slash-fill::before { content: \"\\f696\"; }\n.bi-envelope-slash::before { content: \"\\f697\"; }\n.bi-envelope-x-1::before { content: \"\\f698\"; }\n.bi-envelope-x-fill::before { content: \"\\f699\"; }\n.bi-envelope-x::before { content: \"\\f69a\"; }\n.bi-explicit-fill::before { content: \"\\f69b\"; }\n.bi-explicit::before { content: \"\\f69c\"; }\n.bi-git::before { content: \"\\f69d\"; }\n.bi-infinity::before { content: \"\\f69e\"; }\n.bi-list-columns-reverse::before { content: \"\\f69f\"; }\n.bi-list-columns::before { content: \"\\f6a0\"; }\n.bi-meta::before { content: \"\\f6a1\"; }\n.bi-mortorboard-fill::before { content: \"\\f6a2\"; }\n.bi-mortorboard::before { content: \"\\f6a3\"; }\n.bi-nintendo-switch::before { content: \"\\f6a4\"; }\n.bi-pc-display-horizontal::before { content: \"\\f6a5\"; }\n.bi-pc-display::before { content: \"\\f6a6\"; }\n.bi-pc-horizontal::before { content: \"\\f6a7\"; }\n.bi-pc::before { content: \"\\f6a8\"; }\n.bi-playstation::before { content: \"\\f6a9\"; }\n.bi-plus-slash-minus::before { content: \"\\f6aa\"; }\n.bi-projector-fill::before { content: \"\\f6ab\"; }\n.bi-projector::before { content: \"\\f6ac\"; }\n.bi-qr-code-scan::before { content: \"\\f6ad\"; }\n.bi-qr-code::before { content: \"\\f6ae\"; }\n.bi-quora::before { content: \"\\f6af\"; }\n.bi-quote::before { content: \"\\f6b0\"; }\n.bi-robot::before { content: \"\\f6b1\"; }\n.bi-send-check-fill::before { content: \"\\f6b2\"; }\n.bi-send-check::before { content: \"\\f6b3\"; }\n.bi-send-dash-fill::before { content: \"\\f6b4\"; }\n.bi-send-dash::before { content: \"\\f6b5\"; }\n.bi-send-exclamation-1::before { content: \"\\f6b6\"; }\n.bi-send-exclamation-fill::before { content: \"\\f6b7\"; }\n.bi-send-exclamation::before { content: \"\\f6b8\"; }\n.bi-send-fill::before { content: \"\\f6b9\"; }\n.bi-send-plus-fill::before { content: \"\\f6ba\"; }\n.bi-send-plus::before { content: \"\\f6bb\"; }\n.bi-send-slash-fill::before { content: \"\\f6bc\"; }\n.bi-send-slash::before { content: \"\\f6bd\"; }\n.bi-send-x-fill::before { content: \"\\f6be\"; }\n.bi-send-x::before { content: \"\\f6bf\"; }\n.bi-send::before { content: \"\\f6c0\"; }\n.bi-steam::before { content: \"\\f6c1\"; }\n.bi-terminal-dash-1::before { content: \"\\f6c2\"; }\n.bi-terminal-dash::before { content: \"\\f6c3\"; }\n.bi-terminal-plus::before { content: \"\\f6c4\"; }\n.bi-terminal-split::before { content: \"\\f6c5\"; }\n.bi-ticket-detailed-fill::before { content: \"\\f6c6\"; }\n.bi-ticket-detailed::before { content: \"\\f6c7\"; }\n.bi-ticket-fill::before { content: \"\\f6c8\"; }\n.bi-ticket-perforated-fill::before { content: \"\\f6c9\"; }\n.bi-ticket-perforated::before { content: \"\\f6ca\"; }\n.bi-ticket::before { content: \"\\f6cb\"; }\n.bi-tiktok::before { content: \"\\f6cc\"; }\n.bi-window-dash::before { content: \"\\f6cd\"; }\n.bi-window-desktop::before { content: \"\\f6ce\"; }\n.bi-window-fullscreen::before { content: \"\\f6cf\"; }\n.bi-window-plus::before { content: \"\\f6d0\"; }\n.bi-window-split::before { content: \"\\f6d1\"; }\n.bi-window-stack::before { content: \"\\f6d2\"; }\n.bi-window-x::before { content: \"\\f6d3\"; }\n.bi-xbox::before { content: \"\\f6d4\"; }\n.bi-ethernet::before { content: \"\\f6d5\"; }\n.bi-hdmi-fill::before { content: \"\\f6d6\"; }\n.bi-hdmi::before { content: \"\\f6d7\"; }\n.bi-usb-c-fill::before { content: \"\\f6d8\"; }\n.bi-usb-c::before { content: \"\\f6d9\"; }\n.bi-usb-fill::before { content: \"\\f6da\"; }\n.bi-usb-plug-fill::before { content: \"\\f6db\"; }\n.bi-usb-plug::before { content: \"\\f6dc\"; }\n.bi-usb-symbol::before { content: \"\\f6dd\"; }\n.bi-usb::before { content: \"\\f6de\"; }\n.bi-boombox-fill::before { content: \"\\f6df\"; }\n.bi-displayport-1::before { content: \"\\f6e0\"; }\n.bi-displayport::before { content: \"\\f6e1\"; }\n.bi-gpu-card::before { content: \"\\f6e2\"; }\n.bi-memory::before { content: \"\\f6e3\"; }\n.bi-modem-fill::before { content: \"\\f6e4\"; }\n.bi-modem::before { content: \"\\f6e5\"; }\n.bi-motherboard-fill::before { content: \"\\f6e6\"; }\n.bi-motherboard::before { content: \"\\f6e7\"; }\n.bi-optical-audio-fill::before { content: \"\\f6e8\"; }\n.bi-optical-audio::before { content: \"\\f6e9\"; }\n.bi-pci-card::before { content: \"\\f6ea\"; }\n.bi-router-fill::before { content: \"\\f6eb\"; }\n.bi-router::before { content: \"\\f6ec\"; }\n.bi-ssd-fill::before { content: \"\\f6ed\"; }\n.bi-ssd::before { content: \"\\f6ee\"; }\n.bi-thunderbolt-fill::before { content: \"\\f6ef\"; }\n.bi-thunderbolt::before { content: \"\\f6f0\"; }\n.bi-usb-drive-fill::before { content: \"\\f6f1\"; }\n.bi-usb-drive::before { content: \"\\f6f2\"; }\n.bi-usb-micro-fill::before { content: \"\\f6f3\"; }\n.bi-usb-micro::before { content: \"\\f6f4\"; }\n.bi-usb-mini-fill::before { content: \"\\f6f5\"; }\n.bi-usb-mini::before { content: \"\\f6f6\"; }\n.bi-cloud-haze2::before { content: \"\\f6f7\"; }\n.bi-device-hdd-fill::before { content: \"\\f6f8\"; }\n.bi-device-hdd::before { content: \"\\f6f9\"; }\n.bi-device-ssd-fill::before { content: \"\\f6fa\"; }\n.bi-device-ssd::before { content: \"\\f6fb\"; }\n.bi-displayport-fill::before { content: \"\\f6fc\"; }\n.bi-mortarboard-fill::before { content: \"\\f6fd\"; }\n.bi-mortarboard::before { content: \"\\f6fe\"; }\n.bi-terminal-x::before { content: \"\\f6ff\"; }\n.bi-arrow-through-heart-fill::before { content: \"\\f700\"; }\n.bi-arrow-through-heart::before { content: \"\\f701\"; }\n.bi-badge-sd-fill::before { content: \"\\f702\"; }\n.bi-badge-sd::before { content: \"\\f703\"; }\n.bi-bag-heart-fill::before { content: \"\\f704\"; }\n.bi-bag-heart::before { content: \"\\f705\"; }\n.bi-balloon-fill::before { content: \"\\f706\"; }\n.bi-balloon-heart-fill::before { content: \"\\f707\"; }\n.bi-balloon-heart::before { content: \"\\f708\"; }\n.bi-balloon::before { content: \"\\f709\"; }\n.bi-box2-fill::before { content: \"\\f70a\"; }\n.bi-box2-heart-fill::before { content: \"\\f70b\"; }\n.bi-box2-heart::before { content: \"\\f70c\"; }\n.bi-box2::before { content: \"\\f70d\"; }\n.bi-braces-asterisk::before { content: \"\\f70e\"; }\n.bi-calendar-heart-fill::before { content: \"\\f70f\"; }\n.bi-calendar-heart::before { content: \"\\f710\"; }\n.bi-calendar2-heart-fill::before { content: \"\\f711\"; }\n.bi-calendar2-heart::before { content: \"\\f712\"; }\n.bi-chat-heart-fill::before { content: \"\\f713\"; }\n.bi-chat-heart::before { content: \"\\f714\"; }\n.bi-chat-left-heart-fill::before { content: \"\\f715\"; }\n.bi-chat-left-heart::before { content: \"\\f716\"; }\n.bi-chat-right-heart-fill::before { content: \"\\f717\"; }\n.bi-chat-right-heart::before { content: \"\\f718\"; }\n.bi-chat-square-heart-fill::before { content: \"\\f719\"; }\n.bi-chat-square-heart::before { content: \"\\f71a\"; }\n.bi-clipboard-check-fill::before { content: \"\\f71b\"; }\n.bi-clipboard-data-fill::before { content: \"\\f71c\"; }\n.bi-clipboard-fill::before { content: \"\\f71d\"; }\n.bi-clipboard-heart-fill::before { content: \"\\f71e\"; }\n.bi-clipboard-heart::before { content: \"\\f71f\"; }\n.bi-clipboard-minus-fill::before { content: \"\\f720\"; }\n.bi-clipboard-plus-fill::before { content: \"\\f721\"; }\n.bi-clipboard-pulse::before { content: \"\\f722\"; }\n.bi-clipboard-x-fill::before { content: \"\\f723\"; }\n.bi-clipboard2-check-fill::before { content: \"\\f724\"; }\n.bi-clipboard2-check::before { content: \"\\f725\"; }\n.bi-clipboard2-data-fill::before { content: \"\\f726\"; }\n.bi-clipboard2-data::before { content: \"\\f727\"; }\n.bi-clipboard2-fill::before { content: \"\\f728\"; }\n.bi-clipboard2-heart-fill::before { content: \"\\f729\"; }\n.bi-clipboard2-heart::before { content: \"\\f72a\"; }\n.bi-clipboard2-minus-fill::before { content: \"\\f72b\"; }\n.bi-clipboard2-minus::before { content: \"\\f72c\"; }\n.bi-clipboard2-plus-fill::before { content: \"\\f72d\"; }\n.bi-clipboard2-plus::before { content: \"\\f72e\"; }\n.bi-clipboard2-pulse-fill::before { content: \"\\f72f\"; }\n.bi-clipboard2-pulse::before { content: \"\\f730\"; }\n.bi-clipboard2-x-fill::before { content: \"\\f731\"; }\n.bi-clipboard2-x::before { content: \"\\f732\"; }\n.bi-clipboard2::before { content: \"\\f733\"; }\n.bi-emoji-kiss-fill::before { content: \"\\f734\"; }\n.bi-emoji-kiss::before { content: \"\\f735\"; }\n.bi-envelope-heart-fill::before { content: \"\\f736\"; }\n.bi-envelope-heart::before { content: \"\\f737\"; }\n.bi-envelope-open-heart-fill::before { content: \"\\f738\"; }\n.bi-envelope-open-heart::before { content: \"\\f739\"; }\n.bi-envelope-paper-fill::before { content: \"\\f73a\"; }\n.bi-envelope-paper-heart-fill::before { content: \"\\f73b\"; }\n.bi-envelope-paper-heart::before { content: \"\\f73c\"; }\n.bi-envelope-paper::before { content: \"\\f73d\"; }\n.bi-filetype-aac::before { content: \"\\f73e\"; }\n.bi-filetype-ai::before { content: \"\\f73f\"; }\n.bi-filetype-bmp::before { content: \"\\f740\"; }\n.bi-filetype-cs::before { content: \"\\f741\"; }\n.bi-filetype-css::before { content: \"\\f742\"; }\n.bi-filetype-csv::before { content: \"\\f743\"; }\n.bi-filetype-doc::before { content: \"\\f744\"; }\n.bi-filetype-docx::before { content: \"\\f745\"; }\n.bi-filetype-exe::before { content: \"\\f746\"; }\n.bi-filetype-gif::before { content: \"\\f747\"; }\n.bi-filetype-heic::before { content: \"\\f748\"; }\n.bi-filetype-html::before { content: \"\\f749\"; }\n.bi-filetype-java::before { content: \"\\f74a\"; }\n.bi-filetype-jpg::before { content: \"\\f74b\"; }\n.bi-filetype-js::before { content: \"\\f74c\"; }\n.bi-filetype-jsx::before { content: \"\\f74d\"; }\n.bi-filetype-key::before { content: \"\\f74e\"; }\n.bi-filetype-m4p::before { content: \"\\f74f\"; }\n.bi-filetype-md::before { content: \"\\f750\"; }\n.bi-filetype-mdx::before { content: \"\\f751\"; }\n.bi-filetype-mov::before { content: \"\\f752\"; }\n.bi-filetype-mp3::before { content: \"\\f753\"; }\n.bi-filetype-mp4::before { content: \"\\f754\"; }\n.bi-filetype-otf::before { content: \"\\f755\"; }\n.bi-filetype-pdf::before { content: \"\\f756\"; }\n.bi-filetype-php::before { content: \"\\f757\"; }\n.bi-filetype-png::before { content: \"\\f758\"; }\n.bi-filetype-ppt-1::before { content: \"\\f759\"; }\n.bi-filetype-ppt::before { content: \"\\f75a\"; }\n.bi-filetype-psd::before { content: \"\\f75b\"; }\n.bi-filetype-py::before { content: \"\\f75c\"; }\n.bi-filetype-raw::before { content: \"\\f75d\"; }\n.bi-filetype-rb::before { content: \"\\f75e\"; }\n.bi-filetype-sass::before { content: \"\\f75f\"; }\n.bi-filetype-scss::before { content: \"\\f760\"; }\n.bi-filetype-sh::before { content: \"\\f761\"; }\n.bi-filetype-svg::before { content: \"\\f762\"; }\n.bi-filetype-tiff::before { content: \"\\f763\"; }\n.bi-filetype-tsx::before { content: \"\\f764\"; }\n.bi-filetype-ttf::before { content: \"\\f765\"; }\n.bi-filetype-txt::before { content: \"\\f766\"; }\n.bi-filetype-wav::before { content: \"\\f767\"; }\n.bi-filetype-woff::before { content: \"\\f768\"; }\n.bi-filetype-xls-1::before { content: \"\\f769\"; }\n.bi-filetype-xls::before { content: \"\\f76a\"; }\n.bi-filetype-xml::before { content: \"\\f76b\"; }\n.bi-filetype-yml::before { content: \"\\f76c\"; }\n.bi-heart-arrow::before { content: \"\\f76d\"; }\n.bi-heart-pulse-fill::before { content: \"\\f76e\"; }\n.bi-heart-pulse::before { content: \"\\f76f\"; }\n.bi-heartbreak-fill::before { content: \"\\f770\"; }\n.bi-heartbreak::before { content: \"\\f771\"; }\n.bi-hearts::before { content: \"\\f772\"; }\n.bi-hospital-fill::before { content: \"\\f773\"; }\n.bi-hospital::before { content: \"\\f774\"; }\n.bi-house-heart-fill::before { content: \"\\f775\"; }\n.bi-house-heart::before { content: \"\\f776\"; }\n.bi-incognito::before { content: \"\\f777\"; }\n.bi-magnet-fill::before { content: \"\\f778\"; }\n.bi-magnet::before { content: \"\\f779\"; }\n.bi-person-heart::before { content: \"\\f77a\"; }\n.bi-person-hearts::before { content: \"\\f77b\"; }\n.bi-phone-flip::before { content: \"\\f77c\"; }\n.bi-plugin::before { content: \"\\f77d\"; }\n.bi-postage-fill::before { content: \"\\f77e\"; }\n.bi-postage-heart-fill::before { content: \"\\f77f\"; }\n.bi-postage-heart::before { content: \"\\f780\"; }\n.bi-postage::before { content: \"\\f781\"; }\n.bi-postcard-fill::before { content: \"\\f782\"; }\n.bi-postcard-heart-fill::before { content: \"\\f783\"; }\n.bi-postcard-heart::before { content: \"\\f784\"; }\n.bi-postcard::before { content: \"\\f785\"; }\n.bi-search-heart-fill::before { content: \"\\f786\"; }\n.bi-search-heart::before { content: \"\\f787\"; }\n.bi-sliders2-vertical::before { content: \"\\f788\"; }\n.bi-sliders2::before { content: \"\\f789\"; }\n.bi-trash3-fill::before { content: \"\\f78a\"; }\n.bi-trash3::before { content: \"\\f78b\"; }\n.bi-valentine::before { content: \"\\f78c\"; }\n.bi-valentine2::before { content: \"\\f78d\"; }\n.bi-wrench-adjustable-circle-fill::before { content: \"\\f78e\"; }\n.bi-wrench-adjustable-circle::before { content: \"\\f78f\"; }\n.bi-wrench-adjustable::before { content: \"\\f790\"; }\n.bi-filetype-json::before { content: \"\\f791\"; }\n.bi-filetype-pptx::before { content: \"\\f792\"; }\n.bi-filetype-xlsx::before { content: \"\\f793\"; }\n"
  },
  {
    "path": "data/web/css/build/013-datatables.css",
    "content": ".dataTables_info {\n    margin: 15px 0 !important;\n    padding: 0px !important;\n}\n.dataTables_paginate, .dataTables_length, .dataTables_filter {\n    margin: 15px 0 !important;\n}\n.dtr-details {\n    width: 100%;\n}\ntd.child>ul>li {\n    display: flex;\n}\ntable.dataTable>tbody>tr.child ul.dtr-details>li {\n    border-bottom: 1px solid rgba(0, 0, 0, 0.129);\n    padding: 0.5em 0;\n}\ntable.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before:hover, \ntable.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before:hover {\n    background-color: #5e5e5e;\n}\ntable.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before, \ntable.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before,\ntable.dataTable td.dt-control:before {\n    background-color: #979797 !important;\n    border: 1.5px solid #616161 !important;\n    border-radius: 2px !important;\n    color: #fff;\n    height: 1em;\n    width: 1em;\n    line-height: 1.25em;\n    border-radius: 0px;\n    box-shadow: none;\n    font-size: 14px;\n    transition: 0.5s all;\n}\ntable.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before, \ntable.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before,\ntable.dataTable td.dt-control:before {\n    background-color: #979797 !important;\n}\ntable.dataTable.table-striped>tbody>tr>td {\n    vertical-align: middle;\n}\ntable.dataTable.table-striped>tbody>tr>td>input[type=\"checkbox\"] {\n    margin-top: 7px;\n}\ntd.dtr-col-lg {\n    min-width: 350px;\n    word-break: break-word;\n}\ntd.dtr-col-md {\n    min-width: 250px;\n    word-break: break-word;\n}\ntd.dtr-col-sm {\n    min-width: 125px;\n    word-break: break-word;\n}\n.dt-data-w100 .dtr-data {\n    width: 100%;\n}\nli .dtr-data {\n    word-break: break-all;\n    flex: 1;\n    padding-left: 5px;\n    padding-right: 5px;\n}\ntable.dataTable>tbody>tr.child span.dtr-title {\n    width: 30%;\n    max-width: 250px;\n}\n\n\ndiv.dataTables_wrapper div.dataTables_filter {\n    text-align: left;\n}\ndiv.dataTables_wrapper div.dataTables_length {\n    text-align: right;\n}\n.dataTables_paginate, .dataTables_length, .dataTables_filter {\n    margin: 10px 0!important;\n}\n\ntd.dt-text-right {\n    text-align: end !important;\n}\nth.dt-text-right {\n    text-align: end !important;\n}\n"
  },
  {
    "path": "data/web/css/build/014-mailcow.css",
    "content": "@font-face {\r\n  font-family: 'Noto Sans';\r\n  font-style: normal;\r\n  font-weight: 400;\r\n  src: local(''),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-regular.woff2') format('woff2'),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-regular.woff') format('woff');\r\n}\r\n\r\n@font-face {\r\n  font-family: 'Noto Sans';\r\n  font-style: normal;\r\n  font-weight: 700;\r\n  src: local(''),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-700.woff2') format('woff2'),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-700.woff') format('woff');\r\n}\r\n\r\n@font-face {\r\n  font-family: 'Noto Sans';\r\n  font-style: italic;\r\n  font-weight: 400;\r\n  src: local(''),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-italic.woff2') format('woff2'),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-italic.woff') format('woff');\r\n}\r\n\r\n@font-face {\r\n  font-family: 'Noto Sans';\r\n  font-style: italic;\r\n  font-weight: 700;\r\n  src: local(''),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-700italic.woff2') format('woff2'),\r\n       url('/fonts/noto-sans-v12-latin_greek_cyrillic-700italic.woff') format('woff');\r\n}\r\n\r\nbody {\r\n  min-height: 100vh;\r\n  display: flex;\r\n  flex-direction: column;\r\n  background-color: #fbfbfb;\r\n}\r\n#maxmsgsize { min-width: 80px; }\r\n#slider1 .slider-selection {\r\n\tbackground: #FFD700;\r\n}\r\n#slider1 .slider-track-high {\r\n\tbackground: #FF4500;\r\n}\r\n#slider1 .slider-track-low {\r\n  background: #66CD00;\r\n}\r\n.striped:nth-child(odd) {\r\n  background-color: #fff;\r\n}\r\n.striped:nth-child(even) {\r\n  background-color: #fafafa;\r\n  border:1px solid white;\r\n}\r\n.btn {\r\n  text-transform: none;\r\n}\r\n.btn * {\r\n  pointer-events: none;\r\n}\r\n.textarea-code {\r\n  font-family:Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace;\r\n  background:transparent !important;\r\n}\r\n.navbar-nav {\r\n  margin: 0;\r\n}\r\n.navbar-nav .nav-item {\r\n  flex-direction: column;\r\n  display: flex;\r\n  padding: 0 10px !important;\r\n}\r\n.navbar-nav .nav-link {\r\n  height: 44px;\r\n  display: flex;\r\n  align-items: center;\r\n  padding: 0 10px !important;\r\n}\r\n.navbar-fixed-bottom .navbar-collapse,\r\n.navbar-fixed-top .navbar-collapse {\r\n  max-height: 1000px\r\n}\r\n.nav-tabs .nav-link, .nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:hover, .nav-tabs .nav-link.disabled:focus {\r\n  border-color: #dfdfdf;\r\n}\r\n.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {\r\n  border-color: #dfdfdf;\r\n  border-bottom: 1px solid #ffffff;\r\n}\r\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\r\n  border-color: #dfdfdf;\r\n}\r\n.nav-tabs {\r\n  border-bottom: 1px solid #dfdfdf;\r\n}\r\n.bi {\r\n  display: inline-block;\r\n  font-size: 12pt;\r\n}\r\n.btn .bi {\r\n  display: inline-block;\r\n  font-size: inherit;\r\n}\r\n.btn-group-xs > .btn, .btn-xs {\r\n  padding: .25rem .4rem;\r\n  font-size: .875rem;\r\n  line-height: 1rem;\r\n  border-radius: .2rem;\r\n}\r\n.icon-spin {\r\n  animation-name: spin;\r\n  animation-duration: 2000ms;\r\n  animation-iteration-count: infinite;\r\n  animation-timing-function: linear;\r\n  -webkit-animation: spin 2000ms infinite linear;\r\n}\r\n.dropdown-menu {\r\n  font-size: 0.9rem;\r\n}\r\n@-webkit-keyframes spin {\r\n  0% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n  100% {\r\n    -webkit-transform: rotate(359deg);\r\n    transform: rotate(359deg);\r\n  }\r\n}\r\n@keyframes spin {\r\n  0% {\r\n    -webkit-transform: rotate(0deg);\r\n    transform: rotate(0deg);\r\n  }\r\n  100% {\r\n    -webkit-transform: rotate(359deg);\r\n    transform: rotate(359deg);\r\n  }\r\n}\r\n@keyframes blink {\r\n  50% {\r\n    color: transparent\r\n  }\r\n}\r\n.loader-dot {\r\n  animation: 1s blink infinite\r\n}\r\n.loader-dot:nth-child(2) {\r\n  animation-delay: 250ms\r\n}\r\n.loader-dot:nth-child(3) {\r\n  animation-delay: 500ms\r\n}\r\n\r\npre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;}\r\n/* Fix modal moving content left */\r\nbody.modal-open {\r\n  overflow: inherit;\r\n  padding-right: inherit !important;\r\n}\r\nbody {\r\n  font-family: \"Noto Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n  font-size: 10.5pt;\r\n  line-height: 1.5;\r\n}\r\nhtml {\r\n  font-family: \"Noto Sans\",\"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n  font-size: 10.5pt;\r\n  line-height: 1.5;\r\n}\r\n#mailcow-alert {\r\n  position: fixed;\r\n  bottom: 8px;\r\n  right: 25px;\r\n  min-width: 350px;\r\n  max-width: 550px;\r\n  z-index: 2000;\r\n}\r\n.input-group-sm .btn { margin-top: 0 !important }\r\nlegend {\r\n  -webkit-user-select: none;\r\n  -moz-user-select: none;\r\n  -ms-user-select: none;\r\n  -o-user-select: none;\r\n  user-select: none;\r\n  font-size: 1.2rem;\r\n}\r\n.navbar .navbar-brand {\r\n  padding-top: 5px;\r\n}\r\n.navbar .navbar-brand img {\r\n  height: 40px;\r\n}\r\n.mailcow-logo img {\r\n  max-width: 250px;\r\n}\r\n.lang-link-disabled a  {\r\n  pointer-events: none;\r\n}\r\n.lang-link-disabled  {\r\n  cursor: not-allowed;\r\n}\r\n.overlay {\r\n  background: #fff;\r\n  position: absolute;\r\n  z-index: 10000;\r\n  top: 0; right: 0; bottom: 0; left: 0;\r\n  opacity: 0.7;\r\n}\r\n.bootstrap-select.btn-group .no-results {\r\n  display: none;\r\n}\r\n.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary {\r\n  color: rgb(197, 197, 197) !important;\r\n}\r\n.haveibeenpwned {\r\n  cursor: pointer;\r\n  -webkit-user-select: none;\r\n  -moz-user-select: none;\r\n  -ms-user-select: none;\r\n  user-select: none;\r\n}\r\n.full-width-select {\r\n  width: 100%!important;\r\n}\r\n.tooltip {\r\n  font-family: inherit;\r\n  font-size: 0.8rem;\r\n}\r\n.progress-bar {\r\n  font-size: 0.8rem;\r\n  line-height: 14px;\r\n}\r\n.footer {\r\n  margin-top: 27px;\r\n  margin-bottom: 20px;\r\n  color: #959595;\r\n  display: flex;\r\n  flex-direction: column;\r\n}\r\n.footer .version {\r\n  margin-left: auto;\r\n\tmargin-top: 20px;\r\n}\r\n.slave-info {\r\n  font-weight: bold;\r\n  color: orange;\r\n}\r\n.alert-hr {\r\n  margin:3px 0px;\r\n  border-bottom:1px solid #f5f5f5!important;\r\n  opacity: 0.3;\r\n}\r\n.btn-input-missing,\r\n.btn-input-missing:hover,\r\n.btn-input-missing:active,\r\n.btn-input-missing:focus,\r\n.btn-input-missing:active:hover,\r\n.btn-input-missing:active:focus {\r\n  color: #000 !important;\r\n  background-color: #ff2f24 !important;\r\n  border-color: #e21207 !important;\r\n}\r\n.navbar-nav > li {\r\n  font-size: 1rem !important;\r\n}\r\n.dropdown-menu > li > a {\r\n  font-size: 1rem !important;\r\n}\r\n.label {\r\n  font-size:inherit;\r\n}\r\n[class^=\"bi-\"]::before, [class*=\" bi-\"]::before {\r\n  vertical-align: -0.2em !important;\r\n}\r\nlegend > [class^=\"bi-\"]::before, legend > [class*=\" bi-\"]::before {\r\n  vertical-align: 0em !important;\r\n}\r\ncode {\r\n  font-size: inherit;\r\n}\r\n.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {\r\n  margin-top: 0px;\r\n}\r\n.flag-icon {\r\n  margin-right: 5px;\r\n}\r\n\r\n.dropdown-header {\r\n  font-weight: 600;\r\n}\r\n\r\n\r\n.tag-box {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  height: auto;\r\n}\r\n.tag-badge {\r\n  transition: 200ms linear;\r\n  margin-top: 5px;\r\n  margin-bottom: 5px;\r\n  margin-left: 2px;\r\n  margin-right: 2px;\r\n}\r\n.tag-badge.btn-badge {\r\n  cursor: pointer;\r\n}\r\n.tag-badge .bi {\r\n  font-size: 12px;\r\n}\r\n.tag-badge.btn-badge:hover {\r\n  filter: brightness(0.9);\r\n}\r\n.tag-input {\r\n  margin-left: 10px;\r\n  border: 0 !important;\r\n  flex: 1;\r\n  height: 24px;\r\n  min-width: 150px;\r\n}\r\n.tag-input:focus {\r\n  outline: none;\r\n}\r\n.tag-add {\r\n  padding: 0 5px 0 5px;\r\n  align-items: center;\r\n  display: inline-flex;\r\n}\r\n\r\n#dnstable {\r\n  overflow-x: auto!important;\r\n}\r\n.well {\r\n  border: 1px solid #dfdfdf;\r\n  background-color: #f9f9f9;\r\n  padding: 10px;\r\n}\r\n\r\n\r\n.btn-check-label {\r\n  color: #555;\r\n}\r\n\r\n.caret {\r\n  transform: rotate(0deg);\r\n}\r\na[aria-expanded='true'] > .caret,\r\nbutton[aria-expanded='true'] > .caret {\r\n  transform: rotate(-180deg);\r\n}\r\n\r\n.list-group-details {\r\n  background: #fff;\r\n}\r\n.list-group-header {\r\n  background: #f7f7f7;\r\n}\r\n\r\n\r\n.bg-primary, .alert-primary, .btn-primary {\r\n  background-color: #0F688D !important;\r\n  border-color: #0d526d !important;\r\n}\r\n.bg-info, .alert-info, .btn-info {\r\n  background-color: #148DBC !important;\r\n  border-color: #127ea8 !important;\r\n}\r\n\r\n.bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary {\r\n  color: rgb(137 137 137)!important;\r\n}\r\n\r\n.progress {\r\n  height: 16px;\r\n  background-color: #d5d5d5;\r\n}\r\n\r\n\r\n.btn-outline-secondary:hover {\r\n    background-color: #f0f0f0;\r\n}\r\n.btn.btn-outline-secondary {\r\n  color: #000000 !important;\r\n  border-color: #cfcfcf !important;\r\n}\r\n.btn-check:checked+.btn-outline-secondary, .btn-check:active+.btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\r\n    background-color: #f0f0f0 !important;\r\n}\r\n.btn-check:checked+.btn-light, .btn-check:active+.btn-light, .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle {\r\n    color: #fff;\r\n    background-color: #555;\r\n    background-image: none;\r\n    border-color: #4d4d4d;\r\n}\r\n.btn-check:checked+.btn-light:focus, .btn-check:active+.btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show>.btn-light.dropdown-toggle:focus,\r\n.btn-check:focus+.btn-light, .btn-light:focus {\r\n    box-shadow: none;\r\n}\r\n.btn-group>.btn:not(:last-of-type) {\r\n    border-top-right-radius: 0;\r\n    border-bottom-right-radius: 0;\r\n}\r\n.badge.bg-info > a,\r\n.badge.bg-danger > a {\r\n    color: #fff !important;\r\n    text-decoration: none;\r\n}\r\n\r\n.hr-title {\r\n  display: flex;\r\n  align-items: center;\r\n  text-align: center;\r\n  margin: 20px 0;\r\n}\r\n\r\n.hr-title::before,\r\n.hr-title::after {\r\n  content: \"\";\r\n  flex: 1;\r\n  border-bottom: 1px solid #ccc;\r\n}\r\n\r\n.hr-title:not(:empty)::before {\r\n  margin-right: 10px;\r\n}\r\n\r\n.hr-title:not(:empty)::after {\r\n  margin-left: 10px;\r\n}"
  },
  {
    "path": "data/web/css/build/015-responsive.css",
    "content": ".btn-xs-lg>.lang-sm:after {\n  margin-left: 4px;\n}\n\n.bootstrap-select {\n  max-width: 350px;\n}\n\n.card .apps {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n.responsive-tabs .nav-tabs {\n  display: none;\n}\n\n.dataTables_paginate.paging_simple_numbers .pagination {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n@media (min-width: 768px) {\n  .responsive-tabs .nav-tabs {\n      display: flex;\n  }\n\n  .responsive-tabs .card .card-body.collapse {\n      display: block;\n  }\n}\n\n\n@media (max-width: 767px) {\n  .responsive-tabs .tab-pane:not(.rsettings) {\n      display: block !important;\n      opacity: 1;\n  }\n\n  .xs-show {\n    display: block !important;\n  }\n\n  .recent-login-success {\n    font-size: 14px;\n    margin-top: 10px !important;\n  }\n  .pull-xs-right {\n  float: right !important;\n  }\n  .pull-xs-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .text-xs-left {\n    text-align: left;\n  }\n  .text-xs-bold {\n    font-weight: bold;\n  }\n  .text-xs-bold .small {\n    font-weight: normal;\n    text-align: justify;\n  }\n  .btn.d-block {\n    width: 100%;\n    white-space: normal;\n  }\n  .btn.btn-xs-half,\n  .btn.d-block.btn-xs-half {\n    width: 50%;\n  }\n  .btn.btn-xs-third,\n  .btn.d-block.btn-xs-third {\n    width: 33.33%;\n  }\n  .btn.btn-xs-quart,\n  .btn.d-block.btn-xs-quart {\n    width: 25%;\n  }\n  .btn.d-block.btn-sm,\n  .btn-xs-lg {\n    padding: .5rem 1rem;\n    line-height: 20px;\n  }\n  .input-xs-lg {\n    height: 47px;\n    padding: 13px 16px;\n  }\n  .btn-group:not(.input-group-btn) {\n    display: flex;\n    flex-wrap: wrap;\n  }\n  .btn-group.nowrap {\n    flex-wrap: nowrap;\n  }\n  .btn-group.nowrap .dropdown-menu {\n    width: 100%;\n  }\n  .mass-actions-user .btn-group {\n    float: none;\n  }\n  div[class^='mass-actions'] .dropdown-menu,\n  .card-xs-lg .dropdown-menu,\n  .dropdown-menu.login {\n    width: 100%;\n  }\n  div[class^='mass-actions'] .btn-group .dropdown-menu {\n    top: 50%;\n  }\n  div[class^='mass-actions'] .btn-group .btn-group .dropdown-menu,\n  div.mass-actions-quarantine .btn-group .dropdown-menu,\n  .card-xs-lg .dropdown-menu {\n    top: 100%;\n  }\n  div[class^='mass-actions'] .dropdown-menu>li>a,\n  .card-xs-lg .dropdown-menu>li>a,\n  .dropdown-menu.login>li>a {\n    padding: 8px 20px;\n  }\n  div[class^='mass-actions'] .dropdown-header {\n    font-size: 14px;\n    font-weight: bold;\n  }\n  .top100 {\n    top: 100% !important;\n  }\n  .top33 {\n    top: 33% !important;\n  }\n  .footable-filtering .form {\n    width: 65%;\n  }\n  .btn-xs-lg>.lang-sm:after {\n    top: 1px;\n  }\n  .pagination {\n    margin-bottom: 5px;\n  }\n  .mass-actions-mailbox {\n    padding: 0;\n  }\n  .card-xs-lg .card-header {\n    height: 66px;\n    line-height: 47px;\n  }\n  .card-xs-lg .btn-group .btn {\n    padding-right: 5px;\n    padding-left: 5px;\n  }\n  .bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) {\n    width: 100%;\n  }\n  .btn-group:not(.bootstrap-select) {\n    width: auto !important;\n  }\n  .bootstrap-select {\n    max-width: 100%;\n  }\n  .bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {\n    margin-right: 14px;\n    white-space: normal;\n  }\n  .btn-group > .btn-group {\n    flex-basis: 100%;\n  }\n  .btn-group .btn {\n    display: flex !important;\n    align-items: center;\n    justify-content: center;\n  }\n  .btn-group .btn i {\n    margin-right: 5px;\n  }\n\n  .dt-sm-head-hidden .dtr-title {\n    display: none !important;\n  }\n\n  div.dataTables_wrapper div.dataTables_length {\n    text-align: left;\n  }\n\n  .senders-mw220 {\n    max-width: 100% !important;\n  }\n\n  table.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before,\n  table.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before,\n  table.dataTable td.dt-control:before {\n      height: 2rem;\n      width: 2rem;\n      line-height: 2rem;\n      margin-top: -15px;\n  }\n\n  li .dtr-data {\n      padding: 0;\n  }\n}\n\n@media (max-width: 350px) {\n  .mailcow-logo img {\n    max-width: 250px;\n  }\n}\n\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1600px;\n  }\n}"
  },
  {
    "path": "data/web/css/site/admin.css",
    "content": ".pagination a {\r\n  text-decoration: none !important;\r\n}\r\n.panel.panel-default {\r\n  overflow: visible !important;\r\n}\r\n.table-responsive {\r\n  overflow: visible !important;\r\n}\r\n.table-responsive {\r\n  overflow-x: scroll !important;\r\n}\r\nbody {\r\n  overflow-y:scroll;\r\n}\r\n/* Fix modal moving content left */\r\nbody.modal-open {\r\n  overflow-y:scroll;\r\n  padding-right: inherit !important;\r\n}\r\n@media (min-width: 992px) {\r\n  .container {\r\n      width: 80%;\r\n  }\r\n}\r\n.mass-actions-admin {\r\n  user-select: none;\r\n}\r\n.inputMissingAttr {\r\n  border-color: #FF4136;\r\n}\r\n.rotate {\r\n  -moz-transition: all 0.3s linear;\r\n  -webkit-transition: all 0.3s linear;\r\n  transition: all 0.3s linear;\r\n}\r\n.rotate.animation {\r\n  -ms-transform:rotateX(180deg);\r\n  -moz-transform:rotateX(180deg);\r\n  -webkit-transform:rotateX(180deg);\r\n  transform:rotateX(180deg);\r\n}\r\n.anchor {\r\n  display: block;\r\n  height: 65px;\r\n  margin-top: -65px;\r\n  visibility: hidden;\r\n}\r\n.thumbnail img {\r\n  min-height:100px;\r\n  height:100px;\r\n}\r\n.nav-tabs>li>a {\r\n  z-index: 1;\r\n}\r\n.table-condensed .input-sm {\r\n  width: 100%!important;\r\n}\r\n.table-condensed > thead > tr > th, .table-condensed > tbody > tr > th, .table-condensed > tfoot > tr > th, .table-condensed > thead > tr > td, .table-condensed > tbody > tr > td, .table-condensed > tfoot > tr > td {\r\n  padding: 3px;\r\n}\r\ntable tbody tr td input[type=\"checkbox\"] {\r\n  cursor: pointer;\r\n}\r\n#quarantine_template {\r\n  margin:20px;\r\n}\r\n.regex-input {\r\n  font-family: Consolas,monaco,monospace;\r\n  font-size: 1rem;\r\n}\r\n.label-keys {\r\n  font-size:100%;\r\n  margin: 0px !important;\r\n  white-space: normal !important;\r\n}\r\n.key-action {\r\n  font-weight:bold;\r\n  color:white !important;\r\n}\r\n.dkim-label {\r\n  margin: 0 0 8px !important;\r\n}"
  },
  {
    "path": "data/web/css/site/debug.css",
    "content": ".pagination a {\r\n  text-decoration: none !important;\r\n}\r\n.panel.panel-default {\r\n  overflow: visible !important;\r\n}\r\n.table-responsive {\r\n  overflow: visible !important;\r\n}\r\n@media screen and (max-width: 1280px) {\r\n  .table-responsive {\r\n    overflow-x: scroll !important;\r\n  }\r\n}\r\n.footer-add-item {\r\n  display:block;\r\n  text-align: center;\r\n  font-style: italic;\r\n  padding: 10px;\r\n  background: #F5F5F5;\r\n}\r\n@media (min-width: 992px) {\r\n  .container {\r\n      width: 80%;\r\n  }\r\n}\r\n.mass-actions-debug {\r\n  user-select: none;\r\n}\r\n.inputMissingAttr {\r\n  border-color: #FF4136;\r\n}\r\n.table-lines {\r\n  vertical-align: inherit;\r\n}\r\n\r\n"
  },
  {
    "path": "data/web/css/site/edit.css",
    "content": ".pagination a {\r\n  text-decoration: none !important;\r\n}\r\n.panel.panel-default {\r\n  overflow: visible !important;\r\n}\r\n.table-responsive {\r\n  overflow: visible !important;\r\n}\r\n@media screen and (max-width: 767px) {\r\n  .table-responsive {\r\n    overflow-x: scroll !important;\r\n  }\r\n}\r\n.footer-add-item {\r\n  display:block;\r\n  text-align: center;\r\n  font-style: italic;\r\n  padding: 10px;\r\n  background: #F5F5F5;\r\n}\r\n.mass-actions-user {\r\n  user-select: none;\r\n}\r\n.inputMissingAttr {\r\n  border-color: #FF4136;\r\n}\r\n.rotate {\r\n  -moz-transition: all 0.3s linear;\r\n  -webkit-transition: all 0.3s linear;\r\n  transition: all 0.3s linear;\r\n}\r\n.rotate.animation {\r\n  -ms-transform:rotateX(180deg);\r\n  -moz-transform:rotateX(180deg);\r\n  -webkit-transform:rotateX(180deg);\r\n  transform:rotateX(180deg);\r\n}\r\n#sender_acl_disabled {\r\n  display:none;\r\n  margin-top:10px;\r\n}\r\n"
  },
  {
    "path": "data/web/css/site/index.css",
    "content": "@media (max-width: 500px) {\r\n  #top {\r\n    padding-top: 15px !important;\r\n  }\r\n}\r\n.ui-announcement-alert {\r\n  margin: 10px 0px 10px 0px;\r\n}\r\n"
  },
  {
    "path": "data/web/css/site/mailbox.css",
    "content": ".pagination a {\r\n  text-decoration: none !important;\r\n}\r\n.panel.panel-default {\r\n  overflow: visible !important;\r\n}\r\n.table-responsive {\r\n  overflow: inherit !important;\r\n}\r\n.table-responsive {\r\n  overflow-x: scroll !important;\r\n}\r\n.btn-group {\r\n  width: max-content;\r\n}\r\n.footer-add-item {\r\n  display:block;\r\n  text-align: center;\r\n  font-style: italic;\r\n  padding: 10px;\r\n  background: #F5F5F5;\r\n}\r\n@media (min-width: 992px) {\r\n  .container {\r\n      width: 100%;\r\n  }\r\n}\r\n@media (min-width: 1920px) {\r\n  .container {\r\n      width: 80%;\r\n  }\r\n}\r\n.mass-actions-mailbox {\r\n  user-select: none;\r\n}\r\n.inputMissingAttr {\r\n  border-color: #FF4136;\r\n}\r\n.dns-found {\r\n  max-width: 300px;\r\n  word-break: break-all;\r\n}\r\n.dns-recommended {\r\n  max-width: 150px;\r\n  word-break: break-all;\r\n}\r\n.table-lines {\r\n  vertical-align: inherit;\r\n}\r\n#logText {\r\n  font-family:Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace;\r\n  font-size:smaller;\r\n}\r\ntable tbody tr {\r\n  cursor: pointer;\r\n}\r\ntable tbody tr td input[type=\"checkbox\"] {\r\n  cursor: pointer;\r\n}\r\n.label-last-login .bi {\r\n  font-size: 8pt !important;\r\n}\r\n.label-last-login {\r\n  line-height: 2.2;\r\n  color: #4a4a4a!important;\r\n  padding: .2em .4em .3em !important;\r\n  background-color: #ececec!important;\r\n}\r\n.badge.bg-info .bi {\r\n  font-size: inherit;\r\n}\r\n"
  },
  {
    "path": "data/web/css/site/quarantine.css",
    "content": ".pagination a {\n  text-decoration: none !important;\n}\n\n.panel.panel-default {\n  overflow: visible !important;\n}\n\n.table-responsive {\n  overflow: visible !important;\n}\n\n.table-responsive {\n  overflow-x: scroll !important;\n}\n\n.footer-add-item {\n  display: block;\n  text-align: center;\n  font-style: italic;\n  padding: 10px;\n  background: #F5F5F5;\n}\n\n@media (min-width: 992px) {\n  .container {\n    width: 100%;\n  }\n}\n@media (min-width: 1920px) {\n  .container {\n      width: 80%;\n  }\n}\n\n.mass-actions-quarantine {\n  user-select: none;\n}\n\n.inputMissingAttr {\n  border-color: #FF4136;\n}\n\n.modal#qidDetailModal p {\n  word-break: break-all;\n}\n\nspan#qid_detail_score {\n  font-weight: 700;\n  margin-left: 5px;\n}\n\nspan.rspamd-symbol {\n  display: inline-block;\n  margin: 2px 6px 2px 0;\n  border-radius: 4px;\n  padding: 0 7px;\n}\n\nspan.rspamd-symbol.positive {\n  background: #4CAF50;\n  border: 1px solid #4CAF50;\n  color: white;\n}\n\nspan.rspamd-symbol.negative {\n  background: #ff4136;\n  border: 1px solid #ff4136;\n  color: white;\n}\n\nspan.rspamd-symbol.neutral {\n  background: #f5f5f5;\n  color: #333;\n  border: 1px solid #ccc;\n}\n\nspan.rspamd-symbol span.score {\n  font-weight: 700;\n}\n\nspan.mail-address-item {\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  border: 1px solid #ccc;\n  padding: 2px 7px;\n  display: inline-block;\n  margin: 2px 6px 2px 0;\n}\n\ntable tbody tr {\n  cursor: pointer;\n}\n\ntable tbody tr td input[type=\"checkbox\"] {\n  cursor: pointer;\n}\n.label-rspamd-action {\n  font-size:110%;\n  margin:20px;\n}\n.senders-mw220 {\n  max-width: 220px;\n}\n"
  },
  {
    "path": "data/web/css/site/user.css",
    "content": ".pagination a {\r\n  text-decoration: none !important;\r\n}\r\n.panel.panel-default {\r\n  overflow: visible !important;\r\n}\r\n.table-responsive {\r\n  overflow: visible !important;\r\n}\r\n@media screen and (max-width: 767px) {\r\n  .table-responsive {\r\n    overflow-x: scroll !important;\r\n  }\r\n}\r\n.footer-add-item {\r\n  display:block;\r\n  text-align: center;\r\n  font-style: italic;\r\n  padding: 10px;\r\n  background: #F5F5F5;\r\n}\r\n.mass-actions-user {\r\n  user-select: none;\r\n}\r\n.inputMissingAttr {\r\n  border-color: #FF4136;\r\n}\r\n#logText {\r\n  white-space: pre-wrap;\r\n  white-space: -moz-pre-wrap;\r\n  white-space: -o-pre-wrap;\r\n  word-wrap: break-word;\r\n}\r\nbody {\r\n  overflow-y:scroll;\r\n}\r\n\r\ntable tbody tr {\r\n  cursor: pointer;\r\n}\r\n\r\ntable tbody tr td input[type=\"checkbox\"] {\r\n  cursor: pointer;\r\n}\r\n.label-keys {\r\n  font-size:100%;\r\n  margin: 0px !important;\r\n  white-space: normal !important;\r\n}\r\n.key-action {\r\n  font-weight:bold;\r\n  color:white !important;\r\n}\r\nsvg {\r\n  display: inline-block;\r\n  vertical-align: middle;\r\n}\r\n.c-1-color, .label-ham {\r\n  background: #28b62c;\r\n  background: -webkit-linear-gradient(to right, #28b62c, #fff233);\r\n  background: linear-gradient(to right, #28b62c, #fff233);\r\n  color: #000;\r\n}\r\n.c-2-color, .label-spam {\r\n  background: #fff233;\r\n  background: -webkit-linear-gradient(to right, #fff233, #ff4136);\r\n  background: linear-gradient(to right, #fff233, #ff4136);\r\n  color: #000;\r\n}\r\n.c-3-color, .label-reject{\r\n  background: #ff4136;\r\n  color: #fff;\r\n}\r\n#spam_score {\r\n  margin-bottom: 10px;\r\n}\r\n.noUi-handle {\r\n  border: 1px solid #e2e2e2;\r\n  border-radius: 0px;\r\n  background: #eee;\r\n  cursor: default;\r\n  box-shadow: none;\r\n  border-top-width: 0px;\r\n  border-right-width: 1px;\r\n  border-bottom-width: 4px;\r\n  border-left-width: 1px;\r\n}\r\n.noUi-handle:hover {\r\n  background-color: #eee;\r\n  border-color: #e2e2e2;\r\n  margin-top: 1px;\r\nborder-bottom-width: 3px;\r\n}\r\n.noUi-handle::after, .noUi-handle::before {\r\n  background: #c6c6c6;\r\n  width: 2px;\r\n}\r\n.noUi-target {\r\n  background: transparent;\r\n  border-radius: 0px;\r\n  border: 1px solid #D3D3D3;\r\n  box-shadow: none;\r\n}\r\n.noUi-connects {\r\n  border-radius: 0px;\r\n}\r\n.label-ham,\r\n.label-spam,\r\n.label-reject {\r\n  padding: .1em .5em .1em;\r\n  font-size: inherit;\r\n  font-weight: 400;\r\n}\r\n.clear-last-logins {\r\n  cursor: pointer;\r\n  font-size:90%;\r\n  font-style: italic;\r\n  color: #158cba;\r\n  user-select:none;\r\n}\r\n.ip-location-flag {\r\n  border-radius: 4px;\r\n  top: 3px;\r\n}\r\n.recent-login-success {\r\n  margin-top:2px;\r\n  margin-right:10px;\r\n}\r\n.label-protocol-access {\r\n  line-height: 2;\r\n}\r\n.help-block-mt-0 {\r\n  margin-top: 0px;\r\n}\r\n"
  },
  {
    "path": "data/web/css/themes/lumen-bootstrap.css",
    "content": "@charset \"UTF-8\";\n/*!\n * Bootswatch v5.1.3 (https://bootswatch.com)\n * Copyright 2012-2022 Thomas Park\n * Licensed under MIT\n * Based on Bootstrap\n*/\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n\n/* source-sans-pro-300 - latin */\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-style: normal;\n  font-weight: 300;\n  src: url('/fonts/source-sans-pro-v21-latin-300.eot'); /* IE9 Compat Modes */\n  src: local(''),\n       url('/fonts/source-sans-pro-v21-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n       url('/fonts/source-sans-pro-v21-latin-300.woff2') format('woff2'), /* Super Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-300.woff') format('woff'), /* Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */\n       url('/fonts/source-sans-pro-v21-latin-300.svg#SourceSansPro') format('svg'); /* Legacy iOS */\n}\n/* source-sans-pro-300italic - latin */\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-style: italic;\n  font-weight: 300;\n  src: url('/fonts/source-sans-pro-v21-latin-300italic.eot'); /* IE9 Compat Modes */\n  src: local(''),\n       url('/fonts/source-sans-pro-v21-latin-300italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n       url('/fonts/source-sans-pro-v21-latin-300italic.woff2') format('woff2'), /* Super Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-300italic.woff') format('woff'), /* Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-300italic.ttf') format('truetype'), /* Safari, Android, iOS */\n       url('/fonts/source-sans-pro-v21-latin-300italic.svg#SourceSansPro') format('svg'); /* Legacy iOS */\n}\n/* source-sans-pro-regular - latin */\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-style: normal;\n  font-weight: 400;\n  src: url('/fonts/source-sans-pro-v21-latin-regular.eot'); /* IE9 Compat Modes */\n  src: local(''),\n       url('/fonts/source-sans-pro-v21-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n       url('/fonts/source-sans-pro-v21-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-regular.woff') format('woff'), /* Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */\n       url('/fonts/source-sans-pro-v21-latin-regular.svg#SourceSansPro') format('svg'); /* Legacy iOS */\n}\n/* source-sans-pro-italic - latin */\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-style: italic;\n  font-weight: 400;\n  src: url('/fonts/source-sans-pro-v21-latin-italic.eot'); /* IE9 Compat Modes */\n  src: local(''),\n       url('/fonts/source-sans-pro-v21-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n       url('/fonts/source-sans-pro-v21-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-italic.woff') format('woff'), /* Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */\n       url('/fonts/source-sans-pro-v21-latin-italic.svg#SourceSansPro') format('svg'); /* Legacy iOS */\n}\n/* source-sans-pro-700 - latin */\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-style: normal;\n  font-weight: 700;\n  src: url('/fonts/source-sans-pro-v21-latin-700.eot'); /* IE9 Compat Modes */\n  src: local(''),\n       url('/fonts/source-sans-pro-v21-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n       url('/fonts/source-sans-pro-v21-latin-700.woff2') format('woff2'), /* Super Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-700.woff') format('woff'), /* Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */\n       url('/fonts/source-sans-pro-v21-latin-700.svg#SourceSansPro') format('svg'); /* Legacy iOS */\n}\n/* source-sans-pro-700italic - latin */\n@font-face {\n  font-family: 'Source Sans Pro';\n  font-style: italic;\n  font-weight: 700;\n  src: url('/fonts/source-sans-pro-v21-latin-700italic.eot'); /* IE9 Compat Modes */\n  src: local(''),\n       url('/fonts/source-sans-pro-v21-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */\n       url('/fonts/source-sans-pro-v21-latin-700italic.woff2') format('woff2'), /* Super Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-700italic.woff') format('woff'), /* Modern Browsers */\n       url('/fonts/source-sans-pro-v21-latin-700italic.ttf') format('truetype'), /* Safari, Android, iOS */\n       url('/fonts/source-sans-pro-v21-latin-700italic.svg#SourceSansPro') format('svg'); /* Legacy iOS */\n}\n\n:root {\n  --bs-blue: #158cba;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6f42c1;\n  --bs-pink: #e83e8c;\n  --bs-red: #ff4136;\n  --bs-orange: #fd7e14;\n  --bs-yellow: #ff851b;\n  --bs-green: #28b62c;\n  --bs-teal: #20c997;\n  --bs-cyan: #75caeb;\n  --bs-white: #fff;\n  --bs-gray: #999;\n  --bs-gray-dark: #333;\n  --bs-gray-100: #f6f6f6;\n  --bs-gray-200: #f0f0f0;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #999;\n  --bs-gray-700: #555;\n  --bs-gray-800: #333;\n  --bs-gray-900: #222;\n  --bs-primary: #158cba;\n  --bs-secondary: #f0f0f0;\n  --bs-success: #28b62c;\n  --bs-info: #75caeb;\n  --bs-warning: #ff851b;\n  --bs-danger: #ff4136;\n  --bs-light: #f6f6f6;\n  --bs-dark: #555;\n  --bs-primary-rgb: 21, 140, 186;\n  --bs-secondary-rgb: 240, 240, 240;\n  --bs-success-rgb: 40, 182, 44;\n  --bs-info-rgb: 117, 202, 235;\n  --bs-warning-rgb: 255, 133, 27;\n  --bs-danger-rgb: 255, 65, 54;\n  --bs-light-rgb: 246, 246, 246;\n  --bs-dark-rgb: 85, 85, 85;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 34, 34, 34;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: \"Source Sans Pro\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #222;\n  --bs-body-bg: #fff;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth;\n  }\n}\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25;\n}\n\nhr:not([size]) {\n  height: 1px;\n}\n\nh6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2;\n}\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n  h1, .h1 {\n    font-size: 2.5rem;\n  }\n}\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n  h2, .h2 {\n    font-size: 2rem;\n  }\n}\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n  h3, .h3 {\n    font-size: 1.75rem;\n  }\n}\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n  h4, .h4 {\n    font-size: 1.5rem;\n  }\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-bs-original-title] {\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  cursor: help;\n  -webkit-text-decoration-skip-ink: none;\n  text-decoration-skip-ink: none;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul {\n  padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: 0.5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall, .small {\n  font-size: 0.875em;\n}\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\na {\n  color: #158cba;\n  text-decoration: underline;\n}\na:hover {\n  color: #117095;\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em;\n}\npre code {\n  font-size: inherit;\n  color: inherit;\n  word-break: normal;\n}\n\ncode {\n  font-size: 0.875em;\n  color: #e83e8c;\n  word-wrap: break-word;\n}\na > code {\n  color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #222;\n  border-radius: 0.2rem;\n}\nkbd kbd {\n  padding: 0;\n  font-size: 1em;\n  font-weight: 700;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n  vertical-align: middle;\n}\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #999;\n  text-align: left;\n}\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n}\n\nlabel {\n  display: inline-block;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n  outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n[role=button] {\n  cursor: pointer;\n}\n\nselect {\n  word-wrap: normal;\n}\nselect:disabled {\n  opacity: 1;\n}\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n  -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n  cursor: pointer;\n}\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none;\n}\n\ntextarea {\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit;\n}\n@media (min-width: 1200px) {\n  legend {\n    font-size: 1.5rem;\n  }\n}\nlegend + * {\n  clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0;\n}\n\n::-webkit-inner-spin-button {\n  height: auto;\n}\n\n[type=search] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n  padding: 0;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n}\n\n::file-selector-button {\n  font: inherit;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\niframe {\n  border: 0;\n}\n\nsummary {\n  display: list-item;\n  cursor: pointer;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[hidden] {\n  display: none !important;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-1 {\n    font-size: 5rem;\n  }\n}\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-2 {\n    font-size: 4.5rem;\n  }\n}\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-3 {\n    font-size: 4rem;\n  }\n}\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-4 {\n    font-size: 3.5rem;\n  }\n}\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-5 {\n    font-size: 3rem;\n  }\n}\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2;\n}\n@media (min-width: 1200px) {\n  .display-6 {\n    font-size: 2.5rem;\n  }\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n.list-inline-item:not(:last-child) {\n  margin-right: 0.5rem;\n}\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n.blockquote > :last-child {\n  margin-bottom: 0;\n}\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #999;\n}\n.blockquote-footer::before {\n  content: \"— \";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #999;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container-sm, .container {\n    max-width: 540px;\n  }\n}\n@media (min-width: 768px) {\n  .container-md, .container-sm, .container {\n    max-width: 720px;\n  }\n}\n@media (min-width: 992px) {\n  .container-lg, .container-md, .container-sm, .container {\n    max-width: 960px;\n  }\n}\n@media (min-width: 1200px) {\n  .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1140px;\n  }\n}\n@media (min-width: 1400px) {\n  .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n    max-width: 1320px;\n  }\n}\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-0.5 * var(--bs-gutter-x));\n  margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n  flex-shrink: 0;\n  width: 100%;\n  max-width: 100%;\n  padding-right: calc(var(--bs-gutter-x) * 0.5);\n  padding-left: calc(var(--bs-gutter-x) * 0.5);\n  margin-top: var(--bs-gutter-y);\n}\n\n.col {\n  flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%;\n}\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.6666666667%;\n}\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n}\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333333%;\n}\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66666667%;\n}\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%;\n}\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333333%;\n}\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66666667%;\n}\n\n.col-6 {\n  flex: 0 0 auto;\n  width: 50%;\n}\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333333%;\n}\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66666667%;\n}\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%;\n}\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333333%;\n}\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66666667%;\n}\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%;\n}\n\n.offset-1 {\n  margin-left: 8.33333333%;\n}\n\n.offset-2 {\n  margin-left: 16.66666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.33333333%;\n}\n\n.offset-5 {\n  margin-left: 41.66666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.33333333%;\n}\n\n.offset-8 {\n  margin-left: 66.66666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.33333333%;\n}\n\n.offset-11 {\n  margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n\n  .offset-sm-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-sm-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n\n  .offset-sm-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-sm-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n\n  .offset-sm-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-sm-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n\n  .offset-sm-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-sm-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-sm-0,\n.gx-sm-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-sm-0,\n.gy-sm-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-sm-1,\n.gx-sm-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-sm-1,\n.gy-sm-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-sm-2,\n.gx-sm-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-sm-2,\n.gy-sm-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-sm-3,\n.gx-sm-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-sm-3,\n.gy-sm-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-sm-4,\n.gx-sm-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-sm-4,\n.gy-sm-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-sm-5,\n.gx-sm-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-sm-5,\n.gy-sm-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-md-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-md-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-md-0 {\n    margin-left: 0;\n  }\n\n  .offset-md-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-md-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n\n  .offset-md-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-md-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n\n  .offset-md-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-md-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n\n  .offset-md-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-md-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-md-0,\n.gx-md-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-md-0,\n.gy-md-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-md-1,\n.gx-md-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-md-1,\n.gy-md-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-md-2,\n.gx-md-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-md-2,\n.gy-md-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-md-3,\n.gx-md-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-md-3,\n.gy-md-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-md-4,\n.gx-md-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-md-4,\n.gy-md-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-md-5,\n.gx-md-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-md-5,\n.gy-md-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-lg-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n\n  .offset-lg-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-lg-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n\n  .offset-lg-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-lg-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n\n  .offset-lg-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-lg-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n\n  .offset-lg-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-lg-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-lg-0,\n.gx-lg-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-lg-0,\n.gy-lg-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-lg-1,\n.gx-lg-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-lg-1,\n.gy-lg-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-lg-2,\n.gx-lg-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-lg-2,\n.gy-lg-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-lg-3,\n.gx-lg-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-lg-3,\n.gy-lg-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-lg-4,\n.gx-lg-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-lg-4,\n.gy-lg-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-lg-5,\n.gx-lg-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-lg-5,\n.gy-lg-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-xl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n\n  .offset-xl-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-xl-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n\n  .offset-xl-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-xl-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n\n  .offset-xl-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-xl-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n\n  .offset-xl-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-xl-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-xl-0,\n.gx-xl-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-xl-0,\n.gy-xl-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-xl-1,\n.gx-xl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-xl-1,\n.gy-xl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-xl-2,\n.gx-xl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-xl-2,\n.gy-xl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-xl-3,\n.gx-xl-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-xl-3,\n.gy-xl-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-xl-4,\n.gx-xl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-xl-4,\n.gy-xl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-xl-5,\n.gx-xl-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-xl-5,\n.gy-xl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%;\n  }\n\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.3333333333%;\n  }\n\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%;\n  }\n\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.6666666667%;\n  }\n\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto;\n  }\n\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333333%;\n  }\n\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66666667%;\n  }\n\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%;\n  }\n\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333333%;\n  }\n\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66666667%;\n  }\n\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%;\n  }\n\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333333%;\n  }\n\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66666667%;\n  }\n\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%;\n  }\n\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333333%;\n  }\n\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66666667%;\n  }\n\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%;\n  }\n\n  .offset-xxl-0 {\n    margin-left: 0;\n  }\n\n  .offset-xxl-1 {\n    margin-left: 8.33333333%;\n  }\n\n  .offset-xxl-2 {\n    margin-left: 16.66666667%;\n  }\n\n  .offset-xxl-3 {\n    margin-left: 25%;\n  }\n\n  .offset-xxl-4 {\n    margin-left: 33.33333333%;\n  }\n\n  .offset-xxl-5 {\n    margin-left: 41.66666667%;\n  }\n\n  .offset-xxl-6 {\n    margin-left: 50%;\n  }\n\n  .offset-xxl-7 {\n    margin-left: 58.33333333%;\n  }\n\n  .offset-xxl-8 {\n    margin-left: 66.66666667%;\n  }\n\n  .offset-xxl-9 {\n    margin-left: 75%;\n  }\n\n  .offset-xxl-10 {\n    margin-left: 83.33333333%;\n  }\n\n  .offset-xxl-11 {\n    margin-left: 91.66666667%;\n  }\n\n  .g-xxl-0,\n.gx-xxl-0 {\n    --bs-gutter-x: 0;\n  }\n\n  .g-xxl-0,\n.gy-xxl-0 {\n    --bs-gutter-y: 0;\n  }\n\n  .g-xxl-1,\n.gx-xxl-1 {\n    --bs-gutter-x: 0.25rem;\n  }\n\n  .g-xxl-1,\n.gy-xxl-1 {\n    --bs-gutter-y: 0.25rem;\n  }\n\n  .g-xxl-2,\n.gx-xxl-2 {\n    --bs-gutter-x: 0.5rem;\n  }\n\n  .g-xxl-2,\n.gy-xxl-2 {\n    --bs-gutter-y: 0.5rem;\n  }\n\n  .g-xxl-3,\n.gx-xxl-3 {\n    --bs-gutter-x: 1rem;\n  }\n\n  .g-xxl-3,\n.gy-xxl-3 {\n    --bs-gutter-y: 1rem;\n  }\n\n  .g-xxl-4,\n.gx-xxl-4 {\n    --bs-gutter-x: 1.5rem;\n  }\n\n  .g-xxl-4,\n.gy-xxl-4 {\n    --bs-gutter-y: 1.5rem;\n  }\n\n  .g-xxl-5,\n.gx-xxl-5 {\n    --bs-gutter-x: 3rem;\n  }\n\n  .g-xxl-5,\n.gy-xxl-5 {\n    --bs-gutter-y: 3rem;\n  }\n}\n.table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #222;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #222;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #222;\n  --bs-table-hover-bg: rgba(0, 0, 0, 0.075);\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #222;\n  vertical-align: top;\n  border-color: #dee2e6;\n}\n.table > :not(caption) > * > * {\n  padding: 0.5rem 0.5rem;\n  background-color: var(--bs-table-bg);\n  border-bottom-width: 1px;\n  box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);\n}\n.table > tbody {\n  vertical-align: inherit;\n}\n.table > thead {\n  vertical-align: bottom;\n}\n.table > :not(:first-child) {\n  border-top: 2px solid currentColor;\n}\n\n.caption-top {\n  caption-side: top;\n}\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem;\n}\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0;\n}\n.table-bordered > :not(caption) > * > * {\n  border-width: 0 1px;\n}\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0;\n}\n.table-borderless > :not(:first-child) {\n  border-top-width: 0;\n}\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color);\n}\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color);\n}\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color);\n}\n\n.table-primary {\n  --bs-table-bg: #158cba;\n  --bs-table-striped-bg: #2192bd;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #2c98c1;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #2795bf;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #2c98c1;\n}\n\n.table-secondary {\n  --bs-table-bg: #f0f0f0;\n  --bs-table-striped-bg: #e4e4e4;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #d8d8d8;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #dedede;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #d8d8d8;\n}\n\n.table-success {\n  --bs-table-bg: #28b62c;\n  --bs-table-striped-bg: #33ba37;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #3ebd41;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #38bb3c;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #3ebd41;\n}\n\n.table-info {\n  --bs-table-bg: #75caeb;\n  --bs-table-striped-bg: #7ccdec;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #83cfed;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #7fceed;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #83cfed;\n}\n\n.table-warning {\n  --bs-table-bg: #ff851b;\n  --bs-table-striped-bg: #ff8b26;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #ff9132;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ff8e2c;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #ff9132;\n}\n\n.table-danger {\n  --bs-table-bg: #ff4136;\n  --bs-table-striped-bg: #ff4b40;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #ff544a;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #ff4f45;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #ff544a;\n}\n\n.table-light {\n  --bs-table-bg: #f6f6f6;\n  --bs-table-striped-bg: #eaeaea;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dddddd;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e4e4e4;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dddddd;\n}\n\n.table-dark {\n  --bs-table-bg: #555;\n  --bs-table-striped-bg: #5e5e5e;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #666666;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #626262;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #666666;\n}\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n}\n.form-label {\n  margin-bottom: 0.5rem;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n}\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #999;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control {\n    transition: none;\n  }\n}\n.form-control[type=file] {\n  overflow: hidden;\n}\n.form-control[type=file]:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control:focus {\n  color: #222;\n  background-color: #fff;\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n.form-control::-webkit-date-and-time-value {\n  height: 1.5em;\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control::placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:disabled, .form-control[readonly] {\n  background-color: #f0f0f0;\n  opacity: 1;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #222;\n  background-color: #f0f0f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n.form-control::file-selector-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #222;\n  background-color: #f0f0f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n  .form-control::file-selector-button {\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e4e4e4;\n}\n.form-control:hover:not(:disabled):not([readonly])::file-selector-button {\n  background-color: #e4e4e4;\n}\n.form-control::-webkit-file-upload-button {\n  padding: 0.375rem 0.75rem;\n  margin: -0.375rem -0.75rem;\n  -webkit-margin-end: 0.75rem;\n  margin-inline-end: 0.75rem;\n  color: #222;\n  background-color: #f0f0f0;\n  pointer-events: none;\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0;\n  border-inline-end-width: 1px;\n  border-radius: 0;\n  -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-control::-webkit-file-upload-button {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n  background-color: #e4e4e4;\n}\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0;\n  margin-bottom: 0;\n  line-height: 1.5;\n  color: #222;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::file-selector-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n.form-control-sm::-webkit-file-upload-button {\n  padding: 0.25rem 0.5rem;\n  margin: -0.25rem -0.5rem;\n  -webkit-margin-end: 0.5rem;\n  margin-inline-end: 0.5rem;\n}\n\n.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::file-selector-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n.form-control-lg::-webkit-file-upload-button {\n  padding: 0.5rem 1rem;\n  margin: -0.5rem -1rem;\n  -webkit-margin-end: 1rem;\n  margin-inline-end: 1rem;\n}\n\ntextarea.form-control {\n  min-height: calc(1.5em + 0.75rem + 2px);\n}\ntextarea.form-control-sm {\n  min-height: calc(1.5em + 0.5rem + 2px);\n}\ntextarea.form-control-lg {\n  min-height: calc(1.5em + 1rem + 2px);\n}\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.375rem;\n}\n.form-control-color:not(:disabled):not([readonly]) {\n  cursor: pointer;\n}\n.form-control-color::-moz-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n.form-control-color::-webkit-color-swatch {\n  height: 1.5em;\n  border-radius: 0.25rem;\n}\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-select {\n    transition: none;\n  }\n}\n.form-select:focus {\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n.form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n  padding-right: 0.75rem;\n  background-image: none;\n}\n.form-select:disabled {\n  background-color: #f0f0f0;\n}\n.form-select:-moz-focusring {\n  color: transparent;\n  text-shadow: 0 0 0 #222;\n}\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem;\n}\n.form-check .form-check-input {\n  float: left;\n  margin-left: -1.5em;\n}\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  -webkit-print-color-adjust: exact;\n  color-adjust: exact;\n}\n.form-check-input[type=checkbox] {\n  border-radius: 0.25em;\n}\n.form-check-input[type=radio] {\n  border-radius: 50%;\n}\n.form-check-input:active {\n  filter: brightness(90%);\n}\n.form-check-input:focus {\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n.form-check-input:checked {\n  background-color: #158cba;\n  border-color: #158cba;\n}\n.form-check-input:checked[type=checkbox] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\");\n}\n.form-check-input:checked[type=radio] {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\");\n}\n.form-check-input[type=checkbox]:indeterminate {\n  background-color: #158cba;\n  border-color: #158cba;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\");\n}\n.form-check-input:disabled {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.5;\n}\n.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n  opacity: 0.5;\n}\n\n.form-switch {\n  padding-left: 2.5em;\n}\n.form-switch .form-check-input {\n  width: 2em;\n  margin-left: -2.5em;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n  background-position: left center;\n  border-radius: 2em;\n  transition: background-position 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-switch .form-check-input {\n    transition: none;\n  }\n}\n.form-switch .form-check-input:focus {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%238ac6dd'/%3e%3c/svg%3e\");\n}\n.form-switch .form-check-input:checked {\n  background-position: right center;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\");\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem;\n}\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.btn-check[disabled] + .btn, .btn-check:disabled + .btn {\n  pointer-events: none;\n  filter: none;\n  opacity: 0.65;\n}\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-range:focus {\n  outline: 0;\n}\n.form-range:focus::-webkit-slider-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n.form-range:focus::-moz-range-thumb {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n.form-range::-moz-focus-outer {\n  border: 0;\n}\n.form-range::-webkit-slider-thumb {\n  width: 1rem;\n  height: 1rem;\n  margin-top: -0.25rem;\n  background-color: #158cba;\n  border: 0;\n  border-radius: 1rem;\n  -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -webkit-appearance: none;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-webkit-slider-thumb {\n    -webkit-transition: none;\n    transition: none;\n  }\n}\n.form-range::-webkit-slider-thumb:active {\n  background-color: #b9ddea;\n}\n.form-range::-webkit-slider-runnable-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range::-moz-range-thumb {\n  width: 1rem;\n  height: 1rem;\n  background-color: #158cba;\n  border: 0;\n  border-radius: 1rem;\n  -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  -moz-appearance: none;\n  appearance: none;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-range::-moz-range-thumb {\n    -moz-transition: none;\n    transition: none;\n  }\n}\n.form-range::-moz-range-thumb:active {\n  background-color: #b9ddea;\n}\n.form-range::-moz-range-track {\n  width: 100%;\n  height: 0.5rem;\n  color: transparent;\n  cursor: pointer;\n  background-color: #dee2e6;\n  border-color: transparent;\n  border-radius: 1rem;\n}\n.form-range:disabled {\n  pointer-events: none;\n}\n.form-range:disabled::-webkit-slider-thumb {\n  background-color: #adb5bd;\n}\n.form-range:disabled::-moz-range-thumb {\n  background-color: #adb5bd;\n}\n\n.form-floating {\n  position: relative;\n}\n.form-floating > .form-control,\n.form-floating > .form-select {\n  height: calc(3.5rem + 2px);\n  line-height: 1.25;\n}\n.form-floating > label {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  padding: 1rem 0.75rem;\n  pointer-events: none;\n  border: 1px solid transparent;\n  transform-origin: 0 0;\n  transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .form-floating > label {\n    transition: none;\n  }\n}\n.form-floating > .form-control {\n  padding: 1rem 0.75rem;\n}\n.form-floating > .form-control::-moz-placeholder {\n  color: transparent;\n}\n.form-floating > .form-control::placeholder {\n  color: transparent;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:-webkit-autofill {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-select {\n  padding-top: 1.625rem;\n  padding-bottom: 0.625rem;\n}\n.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:focus ~ label,\n.form-floating > .form-control:not(:placeholder-shown) ~ label,\n.form-floating > .form-select ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n.form-floating > .form-control:-webkit-autofill ~ label {\n  opacity: 0.65;\n  transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem);\n}\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%;\n}\n.input-group > .form-control,\n.input-group > .form-select {\n  position: relative;\n  flex: 1 1 auto;\n  width: 1%;\n  min-width: 0;\n}\n.input-group > .form-control:focus,\n.input-group > .form-select:focus {\n  z-index: 3;\n}\n.input-group .btn {\n  position: relative;\n  z-index: 2;\n}\n.input-group .btn:focus {\n  z-index: 3;\n}\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #f0f0f0;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-lg > .form-control,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-sm > .form-control,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem;\n}\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #28b62c;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(40, 182, 44, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28b62c;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328b62c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n  border-color: #28b62c;\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.25);\n}\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #28b62c;\n}\n.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328b62c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n  border-color: #28b62c;\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.25);\n}\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #28b62c;\n}\n.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n  background-color: #28b62c;\n}\n.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.25);\n}\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28b62c;\n}\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:valid, .input-group .form-control.is-valid,\n.was-validated .input-group .form-select:valid,\n.input-group .form-select.is-valid {\n  z-index: 1;\n}\n.was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus,\n.was-validated .input-group .form-select:valid:focus,\n.input-group .form-select.is-valid:focus {\n  z-index: 3;\n}\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #ff4136;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: 0.1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(255, 65, 54, 0.9);\n  border-radius: 0.25rem;\n}\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ff4136;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff4136'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff4136' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n  border-color: #ff4136;\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.25);\n}\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem);\n}\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #ff4136;\n}\n.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n  padding-right: 4.125rem;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23333' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff4136'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff4136' stroke='none'/%3e%3c/svg%3e\");\n  background-position: right 0.75rem center, center right 2.25rem;\n  background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);\n}\n.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n  border-color: #ff4136;\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.25);\n}\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #ff4136;\n}\n.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n  background-color: #ff4136;\n}\n.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.25);\n}\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ff4136;\n}\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: 0.5em;\n}\n\n.was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid,\n.was-validated .input-group .form-select:invalid,\n.input-group .form-select.is-invalid {\n  z-index: 2;\n}\n.was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus,\n.was-validated .input-group .form-select:invalid:focus,\n.input-group .form-select.is-invalid:focus {\n  z-index: 3;\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 700;\n  line-height: 1.5;\n  color: #222;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .btn {\n    transition: none;\n  }\n}\n.btn:hover {\n  color: #222;\n}\n.btn-check:focus + .btn, .btn:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n.btn:disabled, .btn.disabled, fieldset:disabled .btn {\n  pointer-events: none;\n  opacity: 0.65;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #12779e;\n  border-color: #117095;\n}\n.btn-check:focus + .btn-primary, .btn-primary:focus {\n  color: #fff;\n  background-color: #12779e;\n  border-color: #117095;\n  box-shadow: 0 0 0 0.25rem rgba(56, 157, 196, 0.5);\n}\n.btn-check:checked + .btn-primary, .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active, .show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #117095;\n  border-color: #10698c;\n}\n.btn-check:checked + .btn-primary:focus, .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus, .show > .btn-primary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(56, 157, 196, 0.5);\n}\n.btn-primary:disabled, .btn-primary.disabled {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n\n.btn-secondary {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.btn-secondary:hover {\n  color: #000;\n  background-color: #f2f2f2;\n  border-color: #f2f2f2;\n}\n.btn-check:focus + .btn-secondary, .btn-secondary:focus {\n  color: #000;\n  background-color: #f2f2f2;\n  border-color: #f2f2f2;\n  box-shadow: 0 0 0 0.25rem rgba(204, 204, 204, 0.5);\n}\n.btn-check:checked + .btn-secondary, .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active, .show > .btn-secondary.dropdown-toggle {\n  color: #000;\n  background-color: #f3f3f3;\n  border-color: #f2f2f2;\n}\n.btn-check:checked + .btn-secondary:focus, .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus, .show > .btn-secondary.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(204, 204, 204, 0.5);\n}\n.btn-secondary:disabled, .btn-secondary.disabled {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #229b25;\n  border-color: #209223;\n}\n.btn-check:focus + .btn-success, .btn-success:focus {\n  color: #fff;\n  background-color: #229b25;\n  border-color: #209223;\n  box-shadow: 0 0 0 0.25rem rgba(72, 193, 76, 0.5);\n}\n.btn-check:checked + .btn-success, .btn-check:active + .btn-success, .btn-success:active, .btn-success.active, .show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #209223;\n  border-color: #1e8921;\n}\n.btn-check:checked + .btn-success:focus, .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus, .show > .btn-success.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(72, 193, 76, 0.5);\n}\n.btn-success:disabled, .btn-success.disabled {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #63acc8;\n  border-color: #5ea2bc;\n}\n.btn-check:focus + .btn-info, .btn-info:focus {\n  color: #fff;\n  background-color: #63acc8;\n  border-color: #5ea2bc;\n  box-shadow: 0 0 0 0.25rem rgba(138, 210, 238, 0.5);\n}\n.btn-check:checked + .btn-info, .btn-check:active + .btn-info, .btn-info:active, .btn-info.active, .show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #5ea2bc;\n  border-color: #5898b0;\n}\n.btn-check:checked + .btn-info:focus, .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus, .show > .btn-info.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(138, 210, 238, 0.5);\n}\n.btn-info:disabled, .btn-info.disabled {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n\n.btn-warning {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #d97117;\n  border-color: #cc6a16;\n}\n.btn-check:focus + .btn-warning, .btn-warning:focus {\n  color: #fff;\n  background-color: #d97117;\n  border-color: #cc6a16;\n  box-shadow: 0 0 0 0.25rem rgba(255, 151, 61, 0.5);\n}\n.btn-check:checked + .btn-warning, .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active, .show > .btn-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #cc6a16;\n  border-color: #bf6414;\n}\n.btn-check:checked + .btn-warning:focus, .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus, .show > .btn-warning.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 151, 61, 0.5);\n}\n.btn-warning:disabled, .btn-warning.disabled {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #d9372e;\n  border-color: #cc342b;\n}\n.btn-check:focus + .btn-danger, .btn-danger:focus {\n  color: #fff;\n  background-color: #d9372e;\n  border-color: #cc342b;\n  box-shadow: 0 0 0 0.25rem rgba(255, 94, 84, 0.5);\n}\n.btn-check:checked + .btn-danger, .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active, .show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #cc342b;\n  border-color: #bf3129;\n}\n.btn-check:checked + .btn-danger:focus, .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus, .show > .btn-danger.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 94, 84, 0.5);\n}\n.btn-danger:disabled, .btn-danger.disabled {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n\n.btn-light {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n.btn-light:hover {\n  color: #000;\n  background-color: #f7f7f7;\n  border-color: #f7f7f7;\n}\n.btn-check:focus + .btn-light, .btn-light:focus {\n  color: #000;\n  background-color: #f7f7f7;\n  border-color: #f7f7f7;\n  box-shadow: 0 0 0 0.25rem rgba(209, 209, 209, 0.5);\n}\n.btn-check:checked + .btn-light, .btn-check:active + .btn-light, .btn-light:active, .btn-light.active, .show > .btn-light.dropdown-toggle {\n  color: #000;\n  background-color: #f8f8f8;\n  border-color: #f7f7f7;\n}\n.btn-check:checked + .btn-light:focus, .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus, .show > .btn-light.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(209, 209, 209, 0.5);\n}\n.btn-light:disabled, .btn-light.disabled {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n.btn-dark:hover {\n  color: #fff;\n  background-color: #484848;\n  border-color: #444444;\n}\n.btn-check:focus + .btn-dark, .btn-dark:focus {\n  color: #fff;\n  background-color: #484848;\n  border-color: #444444;\n  box-shadow: 0 0 0 0.25rem rgba(111, 111, 111, 0.5);\n}\n.btn-check:checked + .btn-dark, .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active, .show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #444444;\n  border-color: #404040;\n}\n.btn-check:checked + .btn-dark:focus, .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus, .show > .btn-dark.dropdown-toggle:focus {\n  box-shadow: 0 0 0 0.25rem rgba(111, 111, 111, 0.5);\n}\n.btn-dark:disabled, .btn-dark.disabled {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n\n.btn-outline-primary {\n  color: #158cba;\n  border-color: #158cba;\n}\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n.btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.5);\n}\n.btn-check:checked + .btn-outline-primary, .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n.btn-check:checked + .btn-outline-primary:focus, .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.5);\n}\n.btn-outline-primary:disabled, .btn-outline-primary.disabled {\n  color: #158cba;\n  background-color: transparent;\n}\n\n.btn-outline-secondary {\n  color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.btn-outline-secondary:hover {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.btn-check:focus + .btn-outline-secondary, .btn-outline-secondary:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 240, 240, 0.5);\n}\n.btn-check:checked + .btn-outline-secondary, .btn-check:active + .btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n  color: #000;\n  background-color: #f0f0f0;\n  border-color: #f0f0f0;\n}\n.btn-check:checked + .btn-outline-secondary:focus, .btn-check:active + .btn-outline-secondary:focus, .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(240, 240, 240, 0.5);\n}\n.btn-outline-secondary:disabled, .btn-outline-secondary.disabled {\n  color: #f0f0f0;\n  background-color: transparent;\n}\n\n.btn-outline-success {\n  color: #28b62c;\n  border-color: #28b62c;\n}\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n.btn-check:focus + .btn-outline-success, .btn-outline-success:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.5);\n}\n.btn-check:checked + .btn-outline-success, .btn-check:active + .btn-outline-success, .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show {\n  color: #fff;\n  background-color: #28b62c;\n  border-color: #28b62c;\n}\n.btn-check:checked + .btn-outline-success:focus, .btn-check:active + .btn-outline-success:focus, .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(40, 182, 44, 0.5);\n}\n.btn-outline-success:disabled, .btn-outline-success.disabled {\n  color: #28b62c;\n  background-color: transparent;\n}\n\n.btn-outline-info {\n  color: #75caeb;\n  border-color: #75caeb;\n}\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n.btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n  box-shadow: 0 0 0 0.25rem rgba(117, 202, 235, 0.5);\n}\n.btn-check:checked + .btn-outline-info, .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n  color: #fff;\n  background-color: #75caeb;\n  border-color: #75caeb;\n}\n.btn-check:checked + .btn-outline-info:focus, .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(117, 202, 235, 0.5);\n}\n.btn-outline-info:disabled, .btn-outline-info.disabled {\n  color: #75caeb;\n  background-color: transparent;\n}\n\n.btn-outline-warning {\n  color: #ff851b;\n  border-color: #ff851b;\n}\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n.btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 133, 27, 0.5);\n}\n.btn-check:checked + .btn-outline-warning, .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff851b;\n  border-color: #ff851b;\n}\n.btn-check:checked + .btn-outline-warning:focus, .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 133, 27, 0.5);\n}\n.btn-outline-warning:disabled, .btn-outline-warning.disabled {\n  color: #ff851b;\n  background-color: transparent;\n}\n\n.btn-outline-danger {\n  color: #ff4136;\n  border-color: #ff4136;\n}\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n.btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.5);\n}\n.btn-check:checked + .btn-outline-danger, .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n  color: #fff;\n  background-color: #ff4136;\n  border-color: #ff4136;\n}\n.btn-check:checked + .btn-outline-danger:focus, .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(255, 65, 54, 0.5);\n}\n.btn-outline-danger:disabled, .btn-outline-danger.disabled {\n  color: #ff4136;\n  background-color: transparent;\n}\n\n.btn-outline-light {\n  color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n.btn-outline-light:hover {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n.btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n  box-shadow: 0 0 0 0.25rem rgba(246, 246, 246, 0.5);\n}\n.btn-check:checked + .btn-outline-light, .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n  color: #000;\n  background-color: #f6f6f6;\n  border-color: #f6f6f6;\n}\n.btn-check:checked + .btn-outline-light:focus, .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(246, 246, 246, 0.5);\n}\n.btn-outline-light:disabled, .btn-outline-light.disabled {\n  color: #f6f6f6;\n  background-color: transparent;\n}\n\n.btn-outline-dark {\n  color: #555;\n  border-color: #555;\n}\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n.btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 85, 85, 0.5);\n}\n.btn-check:checked + .btn-outline-dark, .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n  color: #fff;\n  background-color: #555;\n  border-color: #555;\n}\n.btn-check:checked + .btn-outline-dark:focus, .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n  box-shadow: 0 0 0 0.25rem rgba(85, 85, 85, 0.5);\n}\n.btn-outline-dark:disabled, .btn-outline-dark.disabled {\n  color: #555;\n  background-color: transparent;\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #158cba;\n  text-decoration: underline;\n}\n.btn-link:hover {\n  color: #117095;\n}\n.btn-link:disabled, .btn-link.disabled {\n  color: #999;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.fade {\n  transition: opacity 0.15s linear;\n}\n@media (prefers-reduced-motion: reduce) {\n  .fade {\n    transition: none;\n  }\n}\n.fade:not(.show) {\n  opacity: 0;\n}\n\n.collapse:not(.show) {\n  display: none;\n}\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing {\n    transition: none;\n  }\n}\n.collapsing.collapse-horizontal {\n  width: 0;\n  height: auto;\n  transition: width 0.35s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .collapsing.collapse-horizontal {\n    transition: none;\n  }\n}\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative;\n}\n\n.dropdown-toggle {\n  white-space: nowrap;\n}\n.dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.dropdown-menu[data-bs-popper] {\n  top: 100%;\n  left: 0;\n  margin-top: 0.125rem;\n}\n\n.dropdown-menu-start {\n  --bs-position: start;\n}\n.dropdown-menu-start[data-bs-popper] {\n  right: auto;\n  left: 0;\n}\n\n.dropdown-menu-end {\n  --bs-position: end;\n}\n.dropdown-menu-end[data-bs-popper] {\n  right: 0;\n  left: auto;\n}\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-sm-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-sm-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-sm-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-md-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-md-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-md-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-lg-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-lg-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-lg-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-xl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start;\n  }\n  .dropdown-menu-xxl-start[data-bs-popper] {\n    right: auto;\n    left: 0;\n  }\n\n  .dropdown-menu-xxl-end {\n    --bs-position: end;\n  }\n  .dropdown-menu-xxl-end[data-bs-popper] {\n    right: 0;\n    left: auto;\n  }\n}\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem;\n}\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid;\n}\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropend .dropdown-toggle::after {\n  vertical-align: 0;\n}\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem;\n}\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n}\n.dropstart .dropdown-toggle::after {\n  display: none;\n}\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent;\n}\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.15);\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: rgba(0, 0, 0, 0.5);\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0;\n}\n.dropdown-item:hover, .dropdown-item:focus {\n  color: rgba(0, 0, 0, 0.55);\n  background-color: #f0f0f0;\n}\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #158cba;\n}\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #adb5bd;\n  pointer-events: none;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #999;\n  white-space: nowrap;\n}\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #333;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item {\n  color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n  color: #fff;\n  background-color: rgba(255, 255, 255, 0.15);\n}\n.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n  color: #fff;\n  background-color: #158cba;\n}\n.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n  color: #adb5bd;\n}\n.dropdown-menu-dark .dropdown-divider {\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.dropdown-menu-dark .dropdown-item-text {\n  color: #dee2e6;\n}\n.dropdown-menu-dark .dropdown-header {\n  color: #adb5bd;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  flex: 1 1 auto;\n}\n.btn-group > .btn-check:checked + .btn,\n.btn-group > .btn-check:focus + .btn,\n.btn-group > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn-check:checked + .btn,\n.btn-group-vertical > .btn-check:focus + .btn,\n.btn-group-vertical > .btn:hover,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 1;\n}\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start;\n}\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: -1px;\n}\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:nth-child(n+3),\n.btn-group > :not(.btn-check) + .btn,\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n.dropstart .dropdown-toggle-split::before {\n  margin-right: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group {\n  width: 100%;\n}\n.btn-group-vertical > .btn:not(:first-child),\n.btn-group-vertical > .btn-group:not(:first-child) {\n  margin-top: -1px;\n}\n.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group-vertical > .btn-group:not(:last-child) > .btn {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn ~ .btn,\n.btn-group-vertical > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav {\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #158cba;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .nav-link {\n    transition: none;\n  }\n}\n.nav-link:hover, .nav-link:focus {\n  color: #117095;\n}\n.nav-link.disabled {\n  color: #999;\n  pointer-events: none;\n  cursor: default;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #f0f0f0;\n}\n.nav-tabs .nav-link {\n  margin-bottom: -1px;\n  background: none;\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n  border-color: #f0f0f0;\n  isolation: isolate;\n}\n.nav-tabs .nav-link.disabled {\n  color: #999;\n  background-color: transparent;\n  border-color: transparent;\n}\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #222;\n  background-color: #fff;\n  border-color: #f0f0f0;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem;\n}\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #158cba;\n}\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center;\n}\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n.navbar > .container,\n.navbar > .container-fluid,\n.navbar > .container-sm,\n.navbar > .container-md,\n.navbar > .container-lg,\n.navbar > .container-xl,\n.navbar > .container-xxl {\n  display: flex;\n  flex-wrap: inherit;\n  align-items: center;\n  justify-content: space-between;\n}\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap;\n}\n.navbar-nav {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n.navbar-nav .dropdown-menu {\n  position: static;\n}\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .navbar-toggler {\n    transition: none;\n  }\n}\n.navbar-toggler:hover {\n  text-decoration: none;\n}\n.navbar-toggler:focus {\n  text-decoration: none;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%;\n}\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto;\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-sm .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-sm .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-sm .offcanvas-top,\n.navbar-expand-sm .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-sm .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-md .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-md .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-md .offcanvas-top,\n.navbar-expand-md .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-md .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-lg .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-lg .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-lg .offcanvas-top,\n.navbar-expand-lg .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-lg .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-xl .offcanvas-top,\n.navbar-expand-xl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start;\n  }\n  .navbar-expand-xxl .navbar-nav {\n    flex-direction: row;\n  }\n  .navbar-expand-xxl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xxl .navbar-nav .nav-link {\n    padding-right: 0.5rem;\n    padding-left: 0.5rem;\n  }\n  .navbar-expand-xxl .navbar-nav-scroll {\n    overflow: visible;\n  }\n  .navbar-expand-xxl .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto;\n  }\n  .navbar-expand-xxl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas-header {\n    display: none;\n  }\n  .navbar-expand-xxl .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none;\n  }\n  .navbar-expand-xxl .offcanvas-top,\n.navbar-expand-xxl .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0;\n  }\n  .navbar-expand-xxl .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible;\n  }\n}\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start;\n}\n.navbar-expand .navbar-nav {\n  flex-direction: row;\n}\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n}\n.navbar-expand .navbar-nav-scroll {\n  overflow: visible;\n}\n.navbar-expand .navbar-collapse {\n  display: flex !important;\n  flex-basis: auto;\n}\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n.navbar-expand .offcanvas-header {\n  display: none;\n}\n.navbar-expand .offcanvas {\n  position: inherit;\n  bottom: 0;\n  z-index: 1000;\n  flex-grow: 1;\n  visibility: visible !important;\n  background-color: transparent;\n  border-right: 0;\n  border-left: 0;\n  transition: none;\n  transform: none;\n}\n.navbar-expand .offcanvas-top,\n.navbar-expand .offcanvas-bottom {\n  height: auto;\n  border-top: 0;\n  border-bottom: 0;\n}\n.navbar-expand .offcanvas-body {\n  display: flex;\n  flex-grow: 0;\n  padding: 0;\n  overflow-y: visible;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n  color: rgba(0, 0, 0, 0.7);\n}\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55);\n}\n.navbar-light .navbar-text a,\n.navbar-light .navbar-text a:hover,\n.navbar-light .navbar-text a:focus {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n  color: #fff;\n}\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n  color: rgba(255, 255, 255, 0.75);\n}\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\");\n}\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55);\n}\n.navbar-dark .navbar-text a,\n.navbar-dark .navbar-text a:hover,\n.navbar-dark .navbar-text a:focus {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n.card > .list-group {\n  border-top: inherit;\n  border-bottom: inherit;\n}\n.card > .list-group:first-child {\n  border-top-width: 0;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.card > .list-group:last-child {\n  border-bottom-width: 0;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.card > .card-header + .list-group,\n.card > .list-group + .card-footer {\n  border-top: 0;\n}\n\n.card-body {\n  flex: 1 1 auto;\n  padding: 1rem 1rem;\n}\n\n.card-title {\n  margin-bottom: 0.5rem;\n}\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link + .card-link {\n  margin-left: 1rem;\n}\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%;\n}\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-group > .card {\n  margin-bottom: 0.75rem;\n}\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap;\n  }\n  .card-group > .card {\n    flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group > .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group > .card:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-top,\n.card-group > .card:not(:last-child) .card-header {\n    border-top-right-radius: 0;\n  }\n  .card-group > .card:not(:last-child) .card-img-bottom,\n.card-group > .card:not(:last-child) .card-footer {\n    border-bottom-right-radius: 0;\n  }\n  .card-group > .card:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-top,\n.card-group > .card:not(:first-child) .card-header {\n    border-top-left-radius: 0;\n  }\n  .card-group > .card:not(:first-child) .card-img-bottom,\n.card-group > .card:not(:first-child) .card-footer {\n    border-bottom-left-radius: 0;\n  }\n}\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #222;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button {\n    transition: none;\n  }\n}\n.accordion-button:not(.collapsed) {\n  color: #137ea7;\n  background-color: #e8f4f8;\n  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125);\n}\n.accordion-button:not(.collapsed)::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23137ea7'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  transform: rotate(-180deg);\n}\n.accordion-button::after {\n  flex-shrink: 0;\n  width: 1.25rem;\n  height: 1.25rem;\n  margin-left: auto;\n  content: \"\";\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23222'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-size: 1.25rem;\n  transition: transform 0.2s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .accordion-button::after {\n    transition: none;\n  }\n}\n.accordion-button:hover {\n  z-index: 2;\n}\n.accordion-button:focus {\n  z-index: 3;\n  border-color: #8ac6dd;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.accordion-header {\n  margin-bottom: 0;\n}\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.accordion-item:first-of-type {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n.accordion-item:first-of-type .accordion-button {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.accordion-item:not(:first-of-type) {\n  border-top: 0;\n}\n.accordion-item:last-of-type {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.accordion-item:last-of-type .accordion-button.collapsed {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n.accordion-item:last-of-type .accordion-collapse {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.accordion-body {\n  padding: 1rem 1.25rem;\n}\n\n.accordion-flush .accordion-collapse {\n  border-width: 0;\n}\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n.accordion-flush .accordion-item:first-child {\n  border-top: 0;\n}\n.accordion-flush .accordion-item:last-child {\n  border-bottom: 0;\n}\n.accordion-flush .accordion-item .accordion-button {\n  border-radius: 0;\n}\n\n.breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #f0f0f0;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem;\n}\n.breadcrumb-item + .breadcrumb-item::before {\n  float: left;\n  padding-right: 0.5rem;\n  color: #999;\n  content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */;\n}\n.breadcrumb-item.active {\n  color: #999;\n}\n\n.pagination {\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  color: #555;\n  text-decoration: none;\n  background-color: #f0f0f0;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .page-link {\n    transition: none;\n  }\n}\n.page-link:hover {\n  z-index: 2;\n  color: #555;\n  background-color: #f0f0f0;\n  border-color: #dee2e6;\n}\n.page-link:focus {\n  z-index: 3;\n  color: #117095;\n  background-color: #f0f0f0;\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n}\n\n.page-item:not(:first-child) .page-link {\n  margin-left: -1px;\n}\n.page-item.active .page-link {\n  z-index: 3;\n  color: #fff;\n  background-color: #158cba;\n  border-color: #127ba3;\n}\n.page-item.disabled .page-link {\n  color: #999;\n  pointer-events: none;\n  background-color: #f0f0f0;\n  border-color: #dee2e6;\n}\n\n.page-link {\n  padding: 0.375rem 0.75rem;\n}\n\n.page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n}\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n}\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible {\n  padding-right: 3rem;\n}\n.alert-dismissible .btn-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  padding: 1.25rem 1rem;\n}\n\n.alert-primary {\n  color: #0d5470;\n  background-color: #d0e8f1;\n  border-color: #b9ddea;\n}\n.alert-primary .alert-link {\n  color: #0a435a;\n}\n\n.alert-secondary {\n  color: #909090;\n  background-color: #fcfcfc;\n  border-color: #fbfbfb;\n}\n.alert-secondary .alert-link {\n  color: #737373;\n}\n\n.alert-success {\n  color: #186d1a;\n  background-color: #d4f0d5;\n  border-color: #bfe9c0;\n}\n.alert-success .alert-link {\n  color: #135715;\n}\n\n.alert-info {\n  color: #46798d;\n  background-color: #e3f4fb;\n  border-color: #d6eff9;\n}\n.alert-info .alert-link {\n  color: #386171;\n}\n\n.alert-warning {\n  color: #995010;\n  background-color: #ffe7d1;\n  border-color: #ffdabb;\n}\n.alert-warning .alert-link {\n  color: #7a400d;\n}\n\n.alert-danger {\n  color: #992720;\n  background-color: #ffd9d7;\n  border-color: #ffc6c3;\n}\n.alert-danger .alert-link {\n  color: #7a1f1a;\n}\n\n.alert-light {\n  color: #949494;\n  background-color: #fdfdfd;\n  border-color: #fcfcfc;\n}\n.alert-light .alert-link {\n  color: #767676;\n}\n\n.alert-dark {\n  color: #333333;\n  background-color: #dddddd;\n  border-color: #cccccc;\n}\n.alert-dark .alert-link {\n  color: #292929;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem;\n  }\n}\n.progress {\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #f0f0f0;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #158cba;\n  transition: width 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar {\n    transition: none;\n  }\n}\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: 1s linear infinite progress-bar-stripes;\n  animation: 1s linear infinite progress-bar-stripes;\n}\n@media (prefers-reduced-motion: reduce) {\n  .progress-bar-animated {\n    -webkit-animation: none;\n    animation: none;\n  }\n}\n\n.list-group {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem;\n}\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section;\n}\n.list-group-numbered > li::before {\n  content: counters(section, \".\") \". \";\n  counter-increment: section;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #555;\n  text-align: inherit;\n}\n.list-group-item-action:hover, .list-group-item-action:focus {\n  z-index: 1;\n  color: #555;\n  text-decoration: none;\n  background-color: #f6f6f6;\n}\n.list-group-item-action:active {\n  color: #222;\n  background-color: #f0f0f0;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #222;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n.list-group-item:first-child {\n  border-top-left-radius: inherit;\n  border-top-right-radius: inherit;\n}\n.list-group-item:last-child {\n  border-bottom-right-radius: inherit;\n  border-bottom-left-radius: inherit;\n}\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #999;\n  pointer-events: none;\n  background-color: #fff;\n}\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #158cba;\n  border-color: #158cba;\n}\n.list-group-item + .list-group-item {\n  border-top-width: 0;\n}\n.list-group-item + .list-group-item.active {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n\n.list-group-horizontal {\n  flex-direction: row;\n}\n.list-group-horizontal > .list-group-item:first-child {\n  border-bottom-left-radius: 0.25rem;\n  border-top-right-radius: 0;\n}\n.list-group-horizontal > .list-group-item:last-child {\n  border-top-right-radius: 0.25rem;\n  border-bottom-left-radius: 0;\n}\n.list-group-horizontal > .list-group-item.active {\n  margin-top: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item {\n  border-top-width: 1px;\n  border-left-width: 0;\n}\n.list-group-horizontal > .list-group-item + .list-group-item.active {\n  margin-left: -1px;\n  border-left-width: 1px;\n}\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row;\n  }\n  .list-group-horizontal-sm > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row;\n  }\n  .list-group-horizontal-md > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-md > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row;\n  }\n  .list-group-horizontal-lg > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row;\n  }\n  .list-group-horizontal-xxl > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item.active {\n    margin-top: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0;\n  }\n  .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n    margin-left: -1px;\n    border-left-width: 1px;\n  }\n}\n.list-group-flush {\n  border-radius: 0;\n}\n.list-group-flush > .list-group-item {\n  border-width: 0 0 1px;\n}\n.list-group-flush > .list-group-item:last-child {\n  border-bottom-width: 0;\n}\n\n.list-group-item-primary {\n  color: #0d5470;\n  background-color: #d0e8f1;\n}\n.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n  color: #0d5470;\n  background-color: #bbd1d9;\n}\n.list-group-item-primary.list-group-item-action.active {\n  color: #fff;\n  background-color: #0d5470;\n  border-color: #0d5470;\n}\n\n.list-group-item-secondary {\n  color: #909090;\n  background-color: #fcfcfc;\n}\n.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n  color: #909090;\n  background-color: #e3e3e3;\n}\n.list-group-item-secondary.list-group-item-action.active {\n  color: #fff;\n  background-color: #909090;\n  border-color: #909090;\n}\n\n.list-group-item-success {\n  color: #186d1a;\n  background-color: #d4f0d5;\n}\n.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n  color: #186d1a;\n  background-color: #bfd8c0;\n}\n.list-group-item-success.list-group-item-action.active {\n  color: #fff;\n  background-color: #186d1a;\n  border-color: #186d1a;\n}\n\n.list-group-item-info {\n  color: #46798d;\n  background-color: #e3f4fb;\n}\n.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n  color: #46798d;\n  background-color: #ccdce2;\n}\n.list-group-item-info.list-group-item-action.active {\n  color: #fff;\n  background-color: #46798d;\n  border-color: #46798d;\n}\n\n.list-group-item-warning {\n  color: #995010;\n  background-color: #ffe7d1;\n}\n.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n  color: #995010;\n  background-color: #e6d0bc;\n}\n.list-group-item-warning.list-group-item-action.active {\n  color: #fff;\n  background-color: #995010;\n  border-color: #995010;\n}\n\n.list-group-item-danger {\n  color: #992720;\n  background-color: #ffd9d7;\n}\n.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n  color: #992720;\n  background-color: #e6c3c2;\n}\n.list-group-item-danger.list-group-item-action.active {\n  color: #fff;\n  background-color: #992720;\n  border-color: #992720;\n}\n\n.list-group-item-light {\n  color: #949494;\n  background-color: #fdfdfd;\n}\n.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n  color: #949494;\n  background-color: #e4e4e4;\n}\n.list-group-item-light.list-group-item-action.active {\n  color: #fff;\n  background-color: #949494;\n  border-color: #949494;\n}\n\n.list-group-item-dark {\n  color: #333333;\n  background-color: #dddddd;\n}\n.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n  color: #333333;\n  background-color: #c7c7c7;\n}\n.list-group-item-dark.list-group-item-action.active {\n  color: #fff;\n  background-color: #333333;\n  border-color: #333333;\n}\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #fff;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.4;\n}\n.btn-close:hover {\n  color: #fff;\n  text-decoration: none;\n  opacity: 1;\n}\n.btn-close:focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.25rem rgba(21, 140, 186, 0.25);\n  opacity: 1;\n}\n.btn-close:disabled, .btn-close.disabled {\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n  opacity: 0.25;\n}\n\n.btn-close-white {\n  filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n.toast.showing {\n  opacity: 0;\n}\n.toast:not(.show) {\n  display: none;\n}\n\n.toast-container {\n  width: -webkit-max-content;\n  width: -moz-max-content;\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none;\n}\n.toast-container > :not(:last-child) {\n  margin-bottom: 0.75rem;\n}\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #999;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n.toast-header .btn-close {\n  margin-right: -0.375rem;\n  margin-left: 0.75rem;\n}\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none;\n}\n.modal.fade .modal-dialog {\n  transition: transform 0.3s ease-out;\n  transform: translate(0, -50px);\n}\n@media (prefers-reduced-motion: reduce) {\n  .modal.fade .modal-dialog {\n    transition: none;\n  }\n}\n.modal.show .modal-dialog {\n  transform: none;\n}\n.modal.modal-static .modal-dialog {\n  transform: scale(1.02);\n}\n\n.modal-dialog-scrollable {\n  height: calc(100% - 1rem);\n}\n.modal-dialog-scrollable .modal-content {\n  max-height: 100%;\n  overflow: hidden;\n}\n.modal-dialog-scrollable .modal-body {\n  overflow-y: auto;\n}\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - 1rem);\n}\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  opacity: 0;\n}\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #dee2e6;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n.modal-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin: -0.5rem -0.5rem -0.5rem auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: 1rem;\n}\n\n.modal-footer {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 0.75rem;\n  border-top: 1px solid #dee2e6;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px);\n}\n.modal-footer > * {\n  margin: 0.25rem;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto;\n  }\n\n  .modal-dialog-scrollable {\n    height: calc(100% - 3.5rem);\n  }\n\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem);\n  }\n\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg,\n.modal-xl {\n    max-width: 800px;\n  }\n}\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px;\n  }\n}\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0;\n}\n.modal-fullscreen .modal-content {\n  height: 100%;\n  border: 0;\n  border-radius: 0;\n}\n.modal-fullscreen .modal-header {\n  border-radius: 0;\n}\n.modal-fullscreen .modal-body {\n  overflow-y: auto;\n}\n.modal-fullscreen .modal-footer {\n  border-radius: 0;\n}\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-sm-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-sm-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-sm-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-md-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-md-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-md-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-lg-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-lg-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-lg-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-header {\n    border-radius: 0;\n  }\n  .modal-fullscreen-xxl-down .modal-body {\n    overflow-y: auto;\n  }\n  .modal-fullscreen-xxl-down .modal-footer {\n    border-radius: 0;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n.tooltip.show {\n  opacity: 0.9;\n}\n.tooltip .tooltip-arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n.tooltip .tooltip-arrow::before {\n  position: absolute;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] {\n  padding: 0.4rem 0;\n}\n.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow {\n  bottom: 0;\n}\n.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before {\n  top: -1px;\n  border-width: 0.4rem 0.4rem 0;\n  border-top-color: #000;\n}\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] {\n  padding: 0 0.4rem;\n}\n.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow {\n  left: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before {\n  right: -1px;\n  border-width: 0.4rem 0.4rem 0.4rem 0;\n  border-right-color: #000;\n}\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] {\n  padding: 0.4rem 0;\n}\n.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow {\n  top: 0;\n}\n.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before {\n  bottom: -1px;\n  border-width: 0 0.4rem 0.4rem;\n  border-bottom-color: #000;\n}\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] {\n  padding: 0 0.4rem;\n}\n.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow {\n  right: 0;\n  width: 0.4rem;\n  height: 0.8rem;\n}\n.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before {\n  left: -1px;\n  border-width: 0.4rem 0 0.4rem 0.4rem;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.25rem 0.5rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n.popover .popover-arrow {\n  position: absolute;\n  display: block;\n  width: 1rem;\n  height: 0.5rem;\n}\n.popover .popover-arrow::before, .popover .popover-arrow::after {\n  position: absolute;\n  display: block;\n  content: \"\";\n  border-color: transparent;\n  border-style: solid;\n}\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px);\n}\n.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before {\n  bottom: 0;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after {\n  bottom: 1px;\n  border-width: 0.5rem 0.5rem 0;\n  border-top-color: #fff;\n}\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before {\n  left: 0;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after {\n  left: 1px;\n  border-width: 0.5rem 0.5rem 0.5rem 0;\n  border-right-color: #fff;\n}\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow {\n  top: calc(-0.5rem - 1px);\n}\n.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before {\n  top: 0;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after {\n  top: 1px;\n  border-width: 0 0.5rem 0.5rem 0.5rem;\n  border-bottom-color: #fff;\n}\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #f0f0f0;\n}\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem;\n}\n.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before {\n  right: 0;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after {\n  right: 1px;\n  border-width: 0.5rem 0 0.5rem 0.5rem;\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #f0f0f0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #222;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel.pointer-event {\n  touch-action: pan-y;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-item {\n    transition: none;\n  }\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%);\n}\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%);\n}\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none;\n}\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1;\n}\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n    transition: none;\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-control-prev,\n.carousel-control-next {\n    transition: none;\n  }\n}\n.carousel-control-prev:hover, .carousel-control-prev:focus,\n.carousel-control-next:hover,\n.carousel-control-next:focus {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: 0.9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%;\n}\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none;\n}\n.carousel-indicators [data-bs-target] {\n  box-sizing: content-box;\n  flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  padding: 0;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 0;\n  border-top: 10px solid transparent;\n  border-bottom: 10px solid transparent;\n  opacity: 0.5;\n  transition: opacity 0.6s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n  .carousel-indicators [data-bs-target] {\n    transition: none;\n  }\n}\n.carousel-indicators .active {\n  opacity: 1;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center;\n}\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100);\n}\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000;\n}\n.carousel-dark .carousel-caption {\n  color: #000;\n}\n\n@-webkit-keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */;\n  }\n}\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  -webkit-animation: 0.75s linear infinite spinner-border;\n  animation: 0.75s linear infinite spinner-border;\n}\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em;\n}\n\n@-webkit-keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0);\n  }\n  50% {\n    opacity: 1;\n    transform: none;\n  }\n}\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  -webkit-animation: 0.75s linear infinite spinner-grow;\n  animation: 0.75s linear infinite spinner-grow;\n}\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem;\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n.spinner-grow {\n    -webkit-animation-duration: 1.5s;\n    animation-duration: 1.5s;\n  }\n}\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: transform 0.3s ease-in-out;\n}\n@media (prefers-reduced-motion: reduce) {\n  .offcanvas {\n    transition: none;\n  }\n}\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000;\n}\n.offcanvas-backdrop.fade {\n  opacity: 0;\n}\n.offcanvas-backdrop.show {\n  opacity: 0.5;\n}\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n}\n.offcanvas-header .btn-close {\n  padding: 0.5rem 0.5rem;\n  margin-top: -0.5rem;\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n}\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto;\n}\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.1);\n  transform: translateX(-100%);\n}\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.1);\n  transform: translateX(100%);\n}\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  transform: translateY(-100%);\n}\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  transform: translateY(100%);\n}\n\n.offcanvas.show {\n  transform: none;\n}\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5;\n}\n.placeholder.btn::before {\n  display: inline-block;\n  content: \"\";\n}\n\n.placeholder-xs {\n  min-height: 0.6em;\n}\n\n.placeholder-sm {\n  min-height: 0.8em;\n}\n\n.placeholder-lg {\n  min-height: 1.2em;\n}\n\n.placeholder-glow .placeholder {\n  -webkit-animation: placeholder-glow 2s ease-in-out infinite;\n  animation: placeholder-glow 2s ease-in-out infinite;\n}\n\n@-webkit-keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2;\n  }\n}\n.placeholder-wave {\n  -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);\n  -webkit-mask-size: 200% 100%;\n  mask-size: 200% 100%;\n  -webkit-animation: placeholder-wave 2s linear infinite;\n  animation: placeholder-wave 2s linear infinite;\n}\n\n@-webkit-keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n\n@keyframes placeholder-wave {\n  100% {\n    -webkit-mask-position: -200% 0%;\n    mask-position: -200% 0%;\n  }\n}\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.link-primary {\n  color: #158cba;\n}\n.link-primary:hover, .link-primary:focus {\n  color: #117095;\n}\n\n.link-secondary {\n  color: #f0f0f0;\n}\n.link-secondary:hover, .link-secondary:focus {\n  color: #f3f3f3;\n}\n\n.link-success {\n  color: #28b62c;\n}\n.link-success:hover, .link-success:focus {\n  color: #209223;\n}\n\n.link-info {\n  color: #75caeb;\n}\n.link-info:hover, .link-info:focus {\n  color: #5ea2bc;\n}\n\n.link-warning {\n  color: #ff851b;\n}\n.link-warning:hover, .link-warning:focus {\n  color: #cc6a16;\n}\n\n.link-danger {\n  color: #ff4136;\n}\n.link-danger:hover, .link-danger:focus {\n  color: #cc342b;\n}\n\n.link-light {\n  color: #f6f6f6;\n}\n.link-light:hover, .link-light:focus {\n  color: #f8f8f8;\n}\n\n.link-dark {\n  color: #555;\n}\n.link-dark:hover, .link-dark:focus {\n  color: #444444;\n}\n\n.ratio {\n  position: relative;\n  width: 100%;\n}\n.ratio::before {\n  display: block;\n  padding-top: var(--bs-aspect-ratio);\n  content: \"\";\n}\n.ratio > * {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%;\n}\n\n.ratio-4x3 {\n  --bs-aspect-ratio: 75%;\n}\n\n.ratio-16x9 {\n  --bs-aspect-ratio: 56.25%;\n}\n\n.ratio-21x9 {\n  --bs-aspect-ratio: 42.8571428571%;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.sticky-top {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 1020;\n}\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch;\n}\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch;\n}\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important;\n}\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\";\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.float-start {\n  float: left !important;\n}\n\n.float-end {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n.opacity-0 {\n  opacity: 0 !important;\n}\n\n.opacity-25 {\n  opacity: 0.25 !important;\n}\n\n.opacity-50 {\n  opacity: 0.5 !important;\n}\n\n.opacity-75 {\n  opacity: 0.75 !important;\n}\n\n.opacity-100 {\n  opacity: 1 !important;\n}\n\n.overflow-auto {\n  overflow: auto !important;\n}\n\n.overflow-hidden {\n  overflow: hidden !important;\n}\n\n.overflow-visible {\n  overflow: visible !important;\n}\n\n.overflow-scroll {\n  overflow: scroll !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-grid {\n  display: grid !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: inline-flex !important;\n}\n\n.d-none {\n  display: none !important;\n}\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;\n}\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;\n}\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important;\n}\n\n.shadow-none {\n  box-shadow: none !important;\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.top-0 {\n  top: 0 !important;\n}\n\n.top-50 {\n  top: 50% !important;\n}\n\n.top-100 {\n  top: 100% !important;\n}\n\n.bottom-0 {\n  bottom: 0 !important;\n}\n\n.bottom-50 {\n  bottom: 50% !important;\n}\n\n.bottom-100 {\n  bottom: 100% !important;\n}\n\n.start-0 {\n  left: 0 !important;\n}\n\n.start-50 {\n  left: 50% !important;\n}\n\n.start-100 {\n  left: 100% !important;\n}\n\n.end-0 {\n  right: 0 !important;\n}\n\n.end-50 {\n  right: 50% !important;\n}\n\n.end-100 {\n  right: 100% !important;\n}\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important;\n}\n\n.translate-middle-x {\n  transform: translateX(-50%) !important;\n}\n\n.translate-middle-y {\n  transform: translateY(-50%) !important;\n}\n\n.border {\n  border: 1px solid #dee2e6 !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top {\n  border-top: 1px solid #dee2e6 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-end {\n  border-right: 1px solid #dee2e6 !important;\n}\n\n.border-end-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom {\n  border-bottom: 1px solid #dee2e6 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-start {\n  border-left: 1px solid #dee2e6 !important;\n}\n\n.border-start-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #158cba !important;\n}\n\n.border-secondary {\n  border-color: #f0f0f0 !important;\n}\n\n.border-success {\n  border-color: #28b62c !important;\n}\n\n.border-info {\n  border-color: #75caeb !important;\n}\n\n.border-warning {\n  border-color: #ff851b !important;\n}\n\n.border-danger {\n  border-color: #ff4136 !important;\n}\n\n.border-light {\n  border-color: #f6f6f6 !important;\n}\n\n.border-dark {\n  border-color: #555 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.border-1 {\n  border-width: 1px !important;\n}\n\n.border-2 {\n  border-width: 2px !important;\n}\n\n.border-3 {\n  border-width: 3px !important;\n}\n\n.border-4 {\n  border-width: 4px !important;\n}\n\n.border-5 {\n  border-width: 5px !important;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.w-auto {\n  width: auto !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.vw-100 {\n  width: 100vw !important;\n}\n\n.min-vw-100 {\n  min-width: 100vw !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.h-auto {\n  height: auto !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.vh-100 {\n  height: 100vh !important;\n}\n\n.min-vh-100 {\n  min-height: 100vh !important;\n}\n\n.flex-fill {\n  flex: 1 1 auto !important;\n}\n\n.flex-row {\n  flex-direction: row !important;\n}\n\n.flex-column {\n  flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n  flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n  flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n  flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important;\n}\n\n.gap-0 {\n  gap: 0 !important;\n}\n\n.gap-1 {\n  gap: 0.25rem !important;\n}\n\n.gap-2 {\n  gap: 0.5rem !important;\n}\n\n.gap-3 {\n  gap: 1rem !important;\n}\n\n.gap-4 {\n  gap: 1.5rem !important;\n}\n\n.gap-5 {\n  gap: 3rem !important;\n}\n\n.justify-content-start {\n  justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  justify-content: center !important;\n}\n\n.justify-content-between {\n  justify-content: space-between !important;\n}\n\n.justify-content-around {\n  justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n  justify-content: space-evenly !important;\n}\n\n.align-items-start {\n  align-items: flex-start !important;\n}\n\n.align-items-end {\n  align-items: flex-end !important;\n}\n\n.align-items-center {\n  align-items: center !important;\n}\n\n.align-items-baseline {\n  align-items: baseline !important;\n}\n\n.align-items-stretch {\n  align-items: stretch !important;\n}\n\n.align-content-start {\n  align-content: flex-start !important;\n}\n\n.align-content-end {\n  align-content: flex-end !important;\n}\n\n.align-content-center {\n  align-content: center !important;\n}\n\n.align-content-between {\n  align-content: space-between !important;\n}\n\n.align-content-around {\n  align-content: space-around !important;\n}\n\n.align-content-stretch {\n  align-content: stretch !important;\n}\n\n.align-self-auto {\n  align-self: auto !important;\n}\n\n.align-self-start {\n  align-self: flex-start !important;\n}\n\n.align-self-end {\n  align-self: flex-end !important;\n}\n\n.align-self-center {\n  align-self: center !important;\n}\n\n.align-self-baseline {\n  align-self: baseline !important;\n}\n\n.align-self-stretch {\n  align-self: stretch !important;\n}\n\n.order-first {\n  order: -1 !important;\n}\n\n.order-0 {\n  order: 0 !important;\n}\n\n.order-1 {\n  order: 1 !important;\n}\n\n.order-2 {\n  order: 2 !important;\n}\n\n.order-3 {\n  order: 3 !important;\n}\n\n.order-4 {\n  order: 4 !important;\n}\n\n.order-5 {\n  order: 5 !important;\n}\n\n.order-last {\n  order: 6 !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important;\n}\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important;\n}\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important;\n}\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important;\n}\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important;\n}\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important;\n}\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important;\n}\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important;\n}\n\n.mt-0 {\n  margin-top: 0 !important;\n}\n\n.mt-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n  margin-top: 1rem !important;\n}\n\n.mt-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n  margin-top: 3rem !important;\n}\n\n.mt-auto {\n  margin-top: auto !important;\n}\n\n.me-0 {\n  margin-right: 0 !important;\n}\n\n.me-1 {\n  margin-right: 0.25rem !important;\n}\n\n.me-2 {\n  margin-right: 0.5rem !important;\n}\n\n.me-3 {\n  margin-right: 1rem !important;\n}\n\n.me-4 {\n  margin-right: 1.5rem !important;\n}\n\n.me-5 {\n  margin-right: 3rem !important;\n}\n\n.me-auto {\n  margin-right: auto !important;\n}\n\n.mb-0 {\n  margin-bottom: 0 !important;\n}\n\n.mb-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n  margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n  margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n  margin-bottom: auto !important;\n}\n\n.ms-0 {\n  margin-left: 0 !important;\n}\n\n.ms-1 {\n  margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n  margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n  margin-left: 1rem !important;\n}\n\n.ms-4 {\n  margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n  margin-left: 3rem !important;\n}\n\n.ms-auto {\n  margin-left: auto !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important;\n}\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important;\n}\n\n.px-2 {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important;\n}\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important;\n}\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important;\n}\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important;\n}\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n}\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important;\n}\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n  padding-top: 0 !important;\n}\n\n.pt-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n  padding-top: 1rem !important;\n}\n\n.pt-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n  padding-top: 3rem !important;\n}\n\n.pe-0 {\n  padding-right: 0 !important;\n}\n\n.pe-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n  padding-right: 1rem !important;\n}\n\n.pe-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-0 {\n  padding-bottom: 0 !important;\n}\n\n.pb-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n  padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n  padding-left: 0 !important;\n}\n\n.ps-1 {\n  padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n  padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n  padding-left: 1rem !important;\n}\n\n.ps-4 {\n  padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n  padding-left: 3rem !important;\n}\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important;\n}\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important;\n}\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important;\n}\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important;\n}\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important;\n}\n\n.fs-5 {\n  font-size: 1.25rem !important;\n}\n\n.fs-6 {\n  font-size: 1rem !important;\n}\n\n.fst-italic {\n  font-style: italic !important;\n}\n\n.fst-normal {\n  font-style: normal !important;\n}\n\n.fw-light {\n  font-weight: 300 !important;\n}\n\n.fw-lighter {\n  font-weight: lighter !important;\n}\n\n.fw-normal {\n  font-weight: 400 !important;\n}\n\n.fw-bold {\n  font-weight: 700 !important;\n}\n\n.fw-bolder {\n  font-weight: bolder !important;\n}\n\n.lh-1 {\n  line-height: 1 !important;\n}\n\n.lh-sm {\n  line-height: 1.25 !important;\n}\n\n.lh-base {\n  line-height: 1.5 !important;\n}\n\n.lh-lg {\n  line-height: 2 !important;\n}\n\n.text-start {\n  text-align: left !important;\n}\n\n.text-end {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n.text-decoration-none {\n  text-decoration: none !important;\n}\n\n.text-decoration-underline {\n  text-decoration: underline !important;\n}\n\n.text-decoration-line-through {\n  text-decoration: line-through !important;\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.text-wrap {\n  white-space: normal !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important;\n}\n\n/* rtl:end:remove */\n.text-primary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-secondary {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important;\n}\n\n.text-muted {\n  --bs-text-opacity: 1;\n  color: #999 !important;\n}\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important;\n}\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important;\n}\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important;\n}\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25;\n}\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5;\n}\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75;\n}\n\n.text-opacity-100 {\n  --bs-text-opacity: 1;\n}\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-success {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;\n}\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important;\n}\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1;\n}\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25;\n}\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5;\n}\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75;\n}\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1;\n}\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important;\n}\n\n.user-select-all {\n  -webkit-user-select: all !important;\n  -moz-user-select: all !important;\n  user-select: all !important;\n}\n\n.user-select-auto {\n  -webkit-user-select: auto !important;\n  -moz-user-select: auto !important;\n  user-select: auto !important;\n}\n\n.user-select-none {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  user-select: none !important;\n}\n\n.pe-none {\n  pointer-events: none !important;\n}\n\n.pe-auto {\n  pointer-events: auto !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.rounded-1 {\n  border-radius: 0.2rem !important;\n}\n\n.rounded-2 {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-3 {\n  border-radius: 0.3rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-pill {\n  border-radius: 50rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important;\n  }\n\n  .float-sm-end {\n    float: right !important;\n  }\n\n  .float-sm-none {\n    float: none !important;\n  }\n\n  .d-sm-inline {\n    display: inline !important;\n  }\n\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-sm-block {\n    display: block !important;\n  }\n\n  .d-sm-grid {\n    display: grid !important;\n  }\n\n  .d-sm-table {\n    display: table !important;\n  }\n\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-sm-flex {\n    display: flex !important;\n  }\n\n  .d-sm-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-sm-none {\n    display: none !important;\n  }\n\n  .flex-sm-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-sm-row {\n    flex-direction: row !important;\n  }\n\n  .flex-sm-column {\n    flex-direction: column !important;\n  }\n\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-sm-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-sm-0 {\n    gap: 0 !important;\n  }\n\n  .gap-sm-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-sm-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-sm-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-sm-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-sm-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-sm-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-sm-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-sm-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-sm-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-sm-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-sm-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-sm-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-sm-center {\n    align-items: center !important;\n  }\n\n  .align-items-sm-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-sm-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-sm-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-sm-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-sm-center {\n    align-content: center !important;\n  }\n\n  .align-content-sm-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-sm-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-sm-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-sm-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-sm-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-sm-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-sm-center {\n    align-self: center !important;\n  }\n\n  .align-self-sm-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-sm-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-sm-first {\n    order: -1 !important;\n  }\n\n  .order-sm-0 {\n    order: 0 !important;\n  }\n\n  .order-sm-1 {\n    order: 1 !important;\n  }\n\n  .order-sm-2 {\n    order: 2 !important;\n  }\n\n  .order-sm-3 {\n    order: 3 !important;\n  }\n\n  .order-sm-4 {\n    order: 4 !important;\n  }\n\n  .order-sm-5 {\n    order: 5 !important;\n  }\n\n  .order-sm-last {\n    order: 6 !important;\n  }\n\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n\n  .m-sm-auto {\n    margin: auto !important;\n  }\n\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-sm-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-sm-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-sm-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-sm-auto {\n    margin-top: auto !important;\n  }\n\n  .me-sm-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-sm-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-sm-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-sm-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-sm-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-sm-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-sm-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-sm-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-sm-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-sm-auto {\n    margin-left: auto !important;\n  }\n\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-sm-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-sm-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-sm-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-sm-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-sm-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-sm-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-sm-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-sm-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-sm-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-sm-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-sm-start {\n    text-align: left !important;\n  }\n\n  .text-sm-end {\n    text-align: right !important;\n  }\n\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important;\n  }\n\n  .float-md-end {\n    float: right !important;\n  }\n\n  .float-md-none {\n    float: none !important;\n  }\n\n  .d-md-inline {\n    display: inline !important;\n  }\n\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-md-block {\n    display: block !important;\n  }\n\n  .d-md-grid {\n    display: grid !important;\n  }\n\n  .d-md-table {\n    display: table !important;\n  }\n\n  .d-md-table-row {\n    display: table-row !important;\n  }\n\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-md-flex {\n    display: flex !important;\n  }\n\n  .d-md-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-md-none {\n    display: none !important;\n  }\n\n  .flex-md-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-md-row {\n    flex-direction: row !important;\n  }\n\n  .flex-md-column {\n    flex-direction: column !important;\n  }\n\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-md-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-md-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-md-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-md-0 {\n    gap: 0 !important;\n  }\n\n  .gap-md-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-md-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-md-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-md-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-md-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-md-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-md-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-md-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-md-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-md-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-md-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-md-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-md-center {\n    align-items: center !important;\n  }\n\n  .align-items-md-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-md-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-md-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-md-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-md-center {\n    align-content: center !important;\n  }\n\n  .align-content-md-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-md-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-md-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-md-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-md-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-md-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-md-center {\n    align-self: center !important;\n  }\n\n  .align-self-md-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-md-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-md-first {\n    order: -1 !important;\n  }\n\n  .order-md-0 {\n    order: 0 !important;\n  }\n\n  .order-md-1 {\n    order: 1 !important;\n  }\n\n  .order-md-2 {\n    order: 2 !important;\n  }\n\n  .order-md-3 {\n    order: 3 !important;\n  }\n\n  .order-md-4 {\n    order: 4 !important;\n  }\n\n  .order-md-5 {\n    order: 5 !important;\n  }\n\n  .order-md-last {\n    order: 6 !important;\n  }\n\n  .m-md-0 {\n    margin: 0 !important;\n  }\n\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n\n  .m-md-auto {\n    margin: auto !important;\n  }\n\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-md-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-md-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-md-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-md-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-md-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-md-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-md-auto {\n    margin-top: auto !important;\n  }\n\n  .me-md-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-md-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-md-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-md-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-md-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-md-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-md-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-md-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-md-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-md-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-md-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-md-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-md-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-md-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-md-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-md-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-md-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-md-auto {\n    margin-left: auto !important;\n  }\n\n  .p-md-0 {\n    padding: 0 !important;\n  }\n\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-md-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-md-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-md-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-md-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-md-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-md-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-md-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-md-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-md-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-md-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-md-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-md-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-md-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-md-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-md-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-md-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-md-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-md-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-md-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-md-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-md-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-md-start {\n    text-align: left !important;\n  }\n\n  .text-md-end {\n    text-align: right !important;\n  }\n\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important;\n  }\n\n  .float-lg-end {\n    float: right !important;\n  }\n\n  .float-lg-none {\n    float: none !important;\n  }\n\n  .d-lg-inline {\n    display: inline !important;\n  }\n\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-lg-block {\n    display: block !important;\n  }\n\n  .d-lg-grid {\n    display: grid !important;\n  }\n\n  .d-lg-table {\n    display: table !important;\n  }\n\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-lg-flex {\n    display: flex !important;\n  }\n\n  .d-lg-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-lg-none {\n    display: none !important;\n  }\n\n  .flex-lg-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-lg-row {\n    flex-direction: row !important;\n  }\n\n  .flex-lg-column {\n    flex-direction: column !important;\n  }\n\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-lg-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-lg-0 {\n    gap: 0 !important;\n  }\n\n  .gap-lg-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-lg-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-lg-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-lg-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-lg-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-lg-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-lg-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-lg-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-lg-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-lg-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-lg-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-lg-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-lg-center {\n    align-items: center !important;\n  }\n\n  .align-items-lg-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-lg-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-lg-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-lg-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-lg-center {\n    align-content: center !important;\n  }\n\n  .align-content-lg-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-lg-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-lg-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-lg-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-lg-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-lg-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-lg-center {\n    align-self: center !important;\n  }\n\n  .align-self-lg-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-lg-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-lg-first {\n    order: -1 !important;\n  }\n\n  .order-lg-0 {\n    order: 0 !important;\n  }\n\n  .order-lg-1 {\n    order: 1 !important;\n  }\n\n  .order-lg-2 {\n    order: 2 !important;\n  }\n\n  .order-lg-3 {\n    order: 3 !important;\n  }\n\n  .order-lg-4 {\n    order: 4 !important;\n  }\n\n  .order-lg-5 {\n    order: 5 !important;\n  }\n\n  .order-lg-last {\n    order: 6 !important;\n  }\n\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n\n  .m-lg-auto {\n    margin: auto !important;\n  }\n\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-lg-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-lg-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-lg-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-lg-auto {\n    margin-top: auto !important;\n  }\n\n  .me-lg-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-lg-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-lg-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-lg-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-lg-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-lg-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-lg-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-lg-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-lg-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-lg-auto {\n    margin-left: auto !important;\n  }\n\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-lg-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-lg-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-lg-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-lg-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-lg-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-lg-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-lg-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-lg-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-lg-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-lg-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-lg-start {\n    text-align: left !important;\n  }\n\n  .text-lg-end {\n    text-align: right !important;\n  }\n\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important;\n  }\n\n  .float-xl-end {\n    float: right !important;\n  }\n\n  .float-xl-none {\n    float: none !important;\n  }\n\n  .d-xl-inline {\n    display: inline !important;\n  }\n\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-xl-block {\n    display: block !important;\n  }\n\n  .d-xl-grid {\n    display: grid !important;\n  }\n\n  .d-xl-table {\n    display: table !important;\n  }\n\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-xl-flex {\n    display: flex !important;\n  }\n\n  .d-xl-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-xl-none {\n    display: none !important;\n  }\n\n  .flex-xl-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-xl-row {\n    flex-direction: row !important;\n  }\n\n  .flex-xl-column {\n    flex-direction: column !important;\n  }\n\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-xl-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-xl-0 {\n    gap: 0 !important;\n  }\n\n  .gap-xl-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-xl-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-xl-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-xl-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-xl-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-xl-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-xl-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-xl-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-xl-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-xl-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-xl-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-xl-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-xl-center {\n    align-items: center !important;\n  }\n\n  .align-items-xl-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-xl-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-xl-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-xl-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-xl-center {\n    align-content: center !important;\n  }\n\n  .align-content-xl-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-xl-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-xl-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-xl-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-xl-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-xl-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-xl-center {\n    align-self: center !important;\n  }\n\n  .align-self-xl-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-xl-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-xl-first {\n    order: -1 !important;\n  }\n\n  .order-xl-0 {\n    order: 0 !important;\n  }\n\n  .order-xl-1 {\n    order: 1 !important;\n  }\n\n  .order-xl-2 {\n    order: 2 !important;\n  }\n\n  .order-xl-3 {\n    order: 3 !important;\n  }\n\n  .order-xl-4 {\n    order: 4 !important;\n  }\n\n  .order-xl-5 {\n    order: 5 !important;\n  }\n\n  .order-xl-last {\n    order: 6 !important;\n  }\n\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n\n  .m-xl-auto {\n    margin: auto !important;\n  }\n\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-xl-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-xl-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-xl-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-xl-auto {\n    margin-top: auto !important;\n  }\n\n  .me-xl-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-xl-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-xl-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-xl-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-xl-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-xl-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-xl-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-xl-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-xl-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-xl-auto {\n    margin-left: auto !important;\n  }\n\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-xl-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-xl-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-xl-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-xl-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-xl-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-xl-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-xl-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-xl-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-xl-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-xl-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-xl-start {\n    text-align: left !important;\n  }\n\n  .text-xl-end {\n    text-align: right !important;\n  }\n\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important;\n  }\n\n  .float-xxl-end {\n    float: right !important;\n  }\n\n  .float-xxl-none {\n    float: none !important;\n  }\n\n  .d-xxl-inline {\n    display: inline !important;\n  }\n\n  .d-xxl-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-xxl-block {\n    display: block !important;\n  }\n\n  .d-xxl-grid {\n    display: grid !important;\n  }\n\n  .d-xxl-table {\n    display: table !important;\n  }\n\n  .d-xxl-table-row {\n    display: table-row !important;\n  }\n\n  .d-xxl-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-xxl-flex {\n    display: flex !important;\n  }\n\n  .d-xxl-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-xxl-none {\n    display: none !important;\n  }\n\n  .flex-xxl-fill {\n    flex: 1 1 auto !important;\n  }\n\n  .flex-xxl-row {\n    flex-direction: row !important;\n  }\n\n  .flex-xxl-column {\n    flex-direction: column !important;\n  }\n\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important;\n  }\n\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important;\n  }\n\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important;\n  }\n\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important;\n  }\n\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important;\n  }\n\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important;\n  }\n\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important;\n  }\n\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important;\n  }\n\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important;\n  }\n\n  .gap-xxl-0 {\n    gap: 0 !important;\n  }\n\n  .gap-xxl-1 {\n    gap: 0.25rem !important;\n  }\n\n  .gap-xxl-2 {\n    gap: 0.5rem !important;\n  }\n\n  .gap-xxl-3 {\n    gap: 1rem !important;\n  }\n\n  .gap-xxl-4 {\n    gap: 1.5rem !important;\n  }\n\n  .gap-xxl-5 {\n    gap: 3rem !important;\n  }\n\n  .justify-content-xxl-start {\n    justify-content: flex-start !important;\n  }\n\n  .justify-content-xxl-end {\n    justify-content: flex-end !important;\n  }\n\n  .justify-content-xxl-center {\n    justify-content: center !important;\n  }\n\n  .justify-content-xxl-between {\n    justify-content: space-between !important;\n  }\n\n  .justify-content-xxl-around {\n    justify-content: space-around !important;\n  }\n\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important;\n  }\n\n  .align-items-xxl-start {\n    align-items: flex-start !important;\n  }\n\n  .align-items-xxl-end {\n    align-items: flex-end !important;\n  }\n\n  .align-items-xxl-center {\n    align-items: center !important;\n  }\n\n  .align-items-xxl-baseline {\n    align-items: baseline !important;\n  }\n\n  .align-items-xxl-stretch {\n    align-items: stretch !important;\n  }\n\n  .align-content-xxl-start {\n    align-content: flex-start !important;\n  }\n\n  .align-content-xxl-end {\n    align-content: flex-end !important;\n  }\n\n  .align-content-xxl-center {\n    align-content: center !important;\n  }\n\n  .align-content-xxl-between {\n    align-content: space-between !important;\n  }\n\n  .align-content-xxl-around {\n    align-content: space-around !important;\n  }\n\n  .align-content-xxl-stretch {\n    align-content: stretch !important;\n  }\n\n  .align-self-xxl-auto {\n    align-self: auto !important;\n  }\n\n  .align-self-xxl-start {\n    align-self: flex-start !important;\n  }\n\n  .align-self-xxl-end {\n    align-self: flex-end !important;\n  }\n\n  .align-self-xxl-center {\n    align-self: center !important;\n  }\n\n  .align-self-xxl-baseline {\n    align-self: baseline !important;\n  }\n\n  .align-self-xxl-stretch {\n    align-self: stretch !important;\n  }\n\n  .order-xxl-first {\n    order: -1 !important;\n  }\n\n  .order-xxl-0 {\n    order: 0 !important;\n  }\n\n  .order-xxl-1 {\n    order: 1 !important;\n  }\n\n  .order-xxl-2 {\n    order: 2 !important;\n  }\n\n  .order-xxl-3 {\n    order: 3 !important;\n  }\n\n  .order-xxl-4 {\n    order: 4 !important;\n  }\n\n  .order-xxl-5 {\n    order: 5 !important;\n  }\n\n  .order-xxl-last {\n    order: 6 !important;\n  }\n\n  .m-xxl-0 {\n    margin: 0 !important;\n  }\n\n  .m-xxl-1 {\n    margin: 0.25rem !important;\n  }\n\n  .m-xxl-2 {\n    margin: 0.5rem !important;\n  }\n\n  .m-xxl-3 {\n    margin: 1rem !important;\n  }\n\n  .m-xxl-4 {\n    margin: 1.5rem !important;\n  }\n\n  .m-xxl-5 {\n    margin: 3rem !important;\n  }\n\n  .m-xxl-auto {\n    margin: auto !important;\n  }\n\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important;\n  }\n\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important;\n  }\n\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important;\n  }\n\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important;\n  }\n\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important;\n  }\n\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important;\n  }\n\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important;\n  }\n\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n  }\n\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important;\n  }\n\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important;\n  }\n\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important;\n  }\n\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important;\n  }\n\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important;\n  }\n\n  .mt-xxl-0 {\n    margin-top: 0 !important;\n  }\n\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important;\n  }\n\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important;\n  }\n\n  .mt-xxl-3 {\n    margin-top: 1rem !important;\n  }\n\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important;\n  }\n\n  .mt-xxl-5 {\n    margin-top: 3rem !important;\n  }\n\n  .mt-xxl-auto {\n    margin-top: auto !important;\n  }\n\n  .me-xxl-0 {\n    margin-right: 0 !important;\n  }\n\n  .me-xxl-1 {\n    margin-right: 0.25rem !important;\n  }\n\n  .me-xxl-2 {\n    margin-right: 0.5rem !important;\n  }\n\n  .me-xxl-3 {\n    margin-right: 1rem !important;\n  }\n\n  .me-xxl-4 {\n    margin-right: 1.5rem !important;\n  }\n\n  .me-xxl-5 {\n    margin-right: 3rem !important;\n  }\n\n  .me-xxl-auto {\n    margin-right: auto !important;\n  }\n\n  .mb-xxl-0 {\n    margin-bottom: 0 !important;\n  }\n\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important;\n  }\n\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important;\n  }\n\n  .mb-xxl-auto {\n    margin-bottom: auto !important;\n  }\n\n  .ms-xxl-0 {\n    margin-left: 0 !important;\n  }\n\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important;\n  }\n\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important;\n  }\n\n  .ms-xxl-3 {\n    margin-left: 1rem !important;\n  }\n\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important;\n  }\n\n  .ms-xxl-5 {\n    margin-left: 3rem !important;\n  }\n\n  .ms-xxl-auto {\n    margin-left: auto !important;\n  }\n\n  .p-xxl-0 {\n    padding: 0 !important;\n  }\n\n  .p-xxl-1 {\n    padding: 0.25rem !important;\n  }\n\n  .p-xxl-2 {\n    padding: 0.5rem !important;\n  }\n\n  .p-xxl-3 {\n    padding: 1rem !important;\n  }\n\n  .p-xxl-4 {\n    padding: 1.5rem !important;\n  }\n\n  .p-xxl-5 {\n    padding: 3rem !important;\n  }\n\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important;\n  }\n\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important;\n  }\n\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important;\n  }\n\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important;\n  }\n\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important;\n  }\n\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important;\n  }\n\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important;\n  }\n\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important;\n  }\n\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n  }\n\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important;\n  }\n\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important;\n  }\n\n  .pt-xxl-0 {\n    padding-top: 0 !important;\n  }\n\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important;\n  }\n\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important;\n  }\n\n  .pt-xxl-3 {\n    padding-top: 1rem !important;\n  }\n\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important;\n  }\n\n  .pt-xxl-5 {\n    padding-top: 3rem !important;\n  }\n\n  .pe-xxl-0 {\n    padding-right: 0 !important;\n  }\n\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important;\n  }\n\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important;\n  }\n\n  .pe-xxl-3 {\n    padding-right: 1rem !important;\n  }\n\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important;\n  }\n\n  .pe-xxl-5 {\n    padding-right: 3rem !important;\n  }\n\n  .pb-xxl-0 {\n    padding-bottom: 0 !important;\n  }\n\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important;\n  }\n\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important;\n  }\n\n  .ps-xxl-0 {\n    padding-left: 0 !important;\n  }\n\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important;\n  }\n\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important;\n  }\n\n  .ps-xxl-3 {\n    padding-left: 1rem !important;\n  }\n\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important;\n  }\n\n  .ps-xxl-5 {\n    padding-left: 3rem !important;\n  }\n\n  .text-xxl-start {\n    text-align: left !important;\n  }\n\n  .text-xxl-end {\n    text-align: right !important;\n  }\n\n  .text-xxl-center {\n    text-align: center !important;\n  }\n}\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important;\n  }\n\n  .fs-2 {\n    font-size: 2rem !important;\n  }\n\n  .fs-3 {\n    font-size: 1.75rem !important;\n  }\n\n  .fs-4 {\n    font-size: 1.5rem !important;\n  }\n}\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n\n  .d-print-block {\n    display: block !important;\n  }\n\n  .d-print-grid {\n    display: grid !important;\n  }\n\n  .d-print-table {\n    display: table !important;\n  }\n\n  .d-print-table-row {\n    display: table-row !important;\n  }\n\n  .d-print-table-cell {\n    display: table-cell !important;\n  }\n\n  .d-print-flex {\n    display: flex !important;\n  }\n\n  .d-print-inline-flex {\n    display: inline-flex !important;\n  }\n\n  .d-print-none {\n    display: none !important;\n  }\n}\n.navbar {\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n.navbar.bg-primary {\n  border-color: #137ea7;\n}\n.navbar.bg-secondary {\n  border-color: #d8d8d8;\n}\n.navbar.bg-success {\n  border-color: #24a428;\n}\n.navbar.bg-info {\n  border-color: #69b6d4;\n}\n.navbar.bg-warning {\n  border-color: #e67818;\n}\n.navbar.bg-danger {\n  border-color: #e63b31;\n}\n.navbar.bg-light {\n  border-color: #dddddd;\n}\n.navbar.bg-dark {\n  border-color: #4d4d4d;\n}\n\n.btn {\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n  text-transform: uppercase;\n}\n.btn:not(.disabled):hover {\n  margin-top: 1px;\n  border-bottom-width: 3px;\n}\n.btn:not(.disabled):active {\n  margin-top: 2px;\n  border-bottom-width: 2px;\n}\n.btn-primary:hover, .btn-primary:active, .btn-primary:focus {\n  background-color: #158cba;\n}\n.btn-primary, .btn-primary:not(.disabled):hover, .btn-primary:not(.disabled):active, .btn-primary:focus {\n  border-color: #137ea7;\n}\n.btn-secondary:hover, .btn-secondary:active, .btn-secondary:focus {\n  background-color: #f0f0f0;\n}\n.btn-secondary, .btn-secondary:not(.disabled):hover, .btn-secondary:not(.disabled):active, .btn-secondary:focus {\n  border-color: #d8d8d8;\n}\n.btn-success:hover, .btn-success:active, .btn-success:focus {\n  background-color: #28b62c;\n}\n.btn-success, .btn-success:not(.disabled):hover, .btn-success:not(.disabled):active, .btn-success:focus {\n  border-color: #24a428;\n}\n.btn-info:hover, .btn-info:active, .btn-info:focus {\n  background-color: #75caeb;\n}\n.btn-info, .btn-info:not(.disabled):hover, .btn-info:not(.disabled):active, .btn-info:focus {\n  border-color: #69b6d4;\n}\n.btn-warning:hover, .btn-warning:active, .btn-warning:focus {\n  background-color: #ff851b;\n}\n.btn-warning, .btn-warning:not(.disabled):hover, .btn-warning:not(.disabled):active, .btn-warning:focus {\n  border-color: #e67818;\n}\n.btn-danger:hover, .btn-danger:active, .btn-danger:focus {\n  background-color: #ff4136;\n}\n.btn-danger, .btn-danger:not(.disabled):hover, .btn-danger:not(.disabled):active, .btn-danger:focus {\n  border-color: #e63b31;\n}\n.btn-light:hover, .btn-light:active, .btn-light:focus {\n  background-color: #f6f6f6;\n}\n.btn-light, .btn-light:not(.disabled):hover, .btn-light:not(.disabled):active, .btn-light:focus {\n  border-color: #dddddd;\n}\n.btn-dark:hover, .btn-dark:active, .btn-dark:focus {\n  background-color: #555;\n}\n.btn-dark, .btn-dark:not(.disabled):hover, .btn-dark:not(.disabled):active, .btn-dark:focus {\n  border-color: #4d4d4d;\n}\n\n[class*=btn-outline] {\n  border-top-width: 1px;\n}\n\n.btn-group-vertical .btn + .btn:hover {\n  margin-top: -1px;\n  border-top-width: 1px;\n}\n.btn-group-vertical .btn + .btn:active {\n  margin-top: -1px;\n  border-top-width: 2px;\n}\n\n.text-secondary {\n  color: #555 !important;\n}\n\n.blockquote-footer {\n  color: #999;\n}\n\n.form-control {\n  box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.075);\n}\n\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link {\n  color: #222;\n}\n.nav-tabs .nav-link, .nav-tabs .nav-link.disabled, .nav-tabs .nav-link.disabled:hover, .nav-tabs .nav-link.disabled:focus {\n  margin-top: 6px;\n  border-color: #f0f0f0;\n  transition: padding-bottom 0.2s ease-in-out, margin-top 0.2s ease-in-out, border-bottom 0.2s ease-in-out;\n}\n.nav-tabs .nav-link:not(.disabled):hover, .nav-tabs .nav-link:not(.disabled):focus, .nav-tabs .nav-link.active {\n  padding-bottom: calc(0.5rem + 6px);\n  margin-top: 0;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified > li {\n  vertical-align: bottom;\n}\n\n.dropdown-menu {\n  margin-top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n  border-top-width: 1px;\n}\n\n.breadcrumb {\n  border-color: #d8d8d8;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  top: 0;\n  font-weight: 700;\n  color: #555;\n  text-transform: uppercase;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n.pagination > li > a:hover, .pagination > li > a:focus,\n.pagination > li > span:hover,\n.pagination > li > span:focus {\n  top: 1px;\n  text-decoration: none;\n  border-bottom-width: 3px;\n}\n.pagination > li > a:active,\n.pagination > li > span:active {\n  top: 2px;\n  border-bottom-width: 2px;\n}\n.pagination > .disabled > a:hover,\n.pagination > .disabled > span:hover {\n  top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n.pagination > .disabled > a:active,\n.pagination > .disabled > span:active {\n  top: 0;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n\n.pager > li > a, .pager > li > a:hover, .pager > li > a:active,\n.pager > li > span,\n.pager > li > span:hover,\n.pager > li > span:active,\n.pager > .disabled > a,\n.pager > .disabled > a:hover,\n.pager > .disabled > a:active,\n.pager > .disabled > span,\n.pager > .disabled > span:hover,\n.pager > .disabled > span:active {\n  border-right-width: 2px;\n  border-left-width: 2px;\n}\n\n.btn-close {\n  text-decoration: none;\n  opacity: 0.4;\n}\n.btn-close:hover, .btn-close:focus {\n  opacity: 1;\n}\n\n.alert {\n  color: #fff;\n  border-style: solid;\n  border-width: 0 1px 4px 1px;\n}\n.alert-primary {\n  background-color: #158cba;\n  border-color: #137ea7;\n}\n.alert-secondary {\n  background-color: #f0f0f0;\n  border-color: #d8d8d8;\n}\n.alert-success {\n  background-color: #28b62c;\n  border-color: #24a428;\n}\n.alert-info {\n  background-color: #75caeb;\n  border-color: #69b6d4;\n}\n.alert-danger {\n  background-color: #ff4136;\n  border-color: #e63b31;\n}\n.alert-warning {\n  background-color: #ff851b;\n  border-color: #e67818;\n}\n.alert-dark {\n  background-color: #555;\n  border-color: #4d4d4d;\n}\n.alert-light {\n  background-color: #f6f6f6;\n  border-color: #dddddd;\n}\n.alert .alert-link {\n  font-weight: 400;\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-secondary,\n.alert-secondary a,\n.alert-secondary .alert-link, .alert-light,\n.alert-light a,\n.alert-light .alert-link {\n  color: #222;\n}\n\n.badge.bg-secondary, .badge.bg-light {\n  color: #555;\n}\n\na.list-group-item-success.active {\n  background-color: #28b62c;\n}\na.list-group-item-success.active:hover, a.list-group-item-success.active:focus {\n  background-color: #24a428;\n}\na.list-group-item-warning.active {\n  background-color: #ff851b;\n}\na.list-group-item-warning.active:hover, a.list-group-item-warning.active:focus {\n  background-color: #e67818;\n}\na.list-group-item-danger.active {\n  background-color: #ff4136;\n}\na.list-group-item-danger.active:hover, a.list-group-item-danger.active:focus {\n  background-color: #e63b31;\n}\n\n.modal .btn-close,\n.toast .btn-close,\n.offcanvas .btn-close {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e\");\n}"
  },
  {
    "path": "data/web/css/themes/mailcow-darkmode.css",
    "content": "body {\n    background-color: #1c1c1e;\n    color: #f2f2f7;\n}\n\n.card {\n    border: 1px solid #2c2c2e;\n    background-color: #2c2c2e;\n}\n\nlegend {\n    color: #f2f2f7;\n}\n\n.card-header {\n    color: #8e8e93;\n    background-color: #1c1c1e;\n    border-color: transparent;\n}\n\n.card-body {\n    --bs-card-color: #bbb;\n}\n\n.btn-secondary, .paginate_button, .page-link, .btn-light {\n    color: #f2f2f7 !important;\n    background-color: #5e5e5e !important;\n    border-color: #4c4c4e !important;\n}\n\n.btn-dark {\n    color: #f2f2f7 !important;\n    background-color: #242424 !important;\n    border-color: #1c1c1e !important;\n}\n\n.btn-secondary:focus, .btn-secondary:hover, .btn-group.open .dropdown-toggle.btn-secondary {\n    background-color: #444444;\n    border-color: #4c4c4e !important;\n    color: #f2f2f7;\n}\n\n.btn-check:checked+.btn-secondary, .btn-check:active+.btn-secondary, .btn-secondary:active, .btn-secondary.active, .show>.btn-secondary.dropdown-toggle {\n    border-color: #5e5e5e !important;\n}\n\n.alert-secondary {\n    color: #f2f2f7 !important;\n    background-color: #5e5e5e !important;\n    border-color: #4c4c4e !important;\n}\n\n.bg-secondary {\n    color: #f2f2f7 !important;\n    background-color: #5e5e5e !important;\n}\n\n.alert-secondary, .alert-secondary a, .alert-secondary .alert-link {\n    color: #f2f2f7;\n}\n\n.page-item.active .page-link {\n    background-color: #3e3e3e !important;\n    border-color: #3e3e3e !important;\n}\n\n.btn-secondary:focus, .btn-secondary:hover, .btn-group.open .dropdown-toggle.btn-secondary {\n    background-color: #5e5e5e;\n    border-color: #4c4c4e !important;\n    color: #f2f2f7;\n}\n\n.btn-secondary:disabled, .btn-secondary.disabled {\n    border-color: #5e5e5e !important;\n}\n\n.modal-content {\n    --bs-modal-color: #bbb;\n    background-color: #2c2c2e;\n}\n\n.modal-header {\n    border-bottom: 1px solid #999;\n}\n\n.modal-title {\n    color: #bbb;\n}\n\n.modal .btn-close {\n    filter: invert(1) grayscale(100%) brightness(200%);\n}\n\n.navbar.bg-light {\n    background-color: #1c1c1e !important;\n    border-color: #2c2c2e;\n}\n\n.nav-link {\n    color: #8e8e93 !important;\n}\n\n.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {\n    background: none;\n}\n\n.nav-tabs, .nav-tabs .nav-link {\n    border-color: #444444 !important;\n}\n\n.nav-tabs .nav-link:not(.disabled):hover, .nav-tabs .nav-link:not(.disabled):focus, .nav-tabs .nav-link.active {\n    border-bottom-color: #1c1c1e !important;\n}\n\n.card .nav-tabs .nav-link:not(.disabled):hover, .card .nav-tabs .nav-link:not(.disabled):focus, .card .nav-tabs .nav-link.active {\n    border-bottom-color: #2c2c2e !important;\n}\n\n.table, .table-striped>tbody>tr:nth-of-type(odd)>*, tbody tr {\n    color: #f2f2f7 !important;\n}\n\n.dropdown-menu {\n    background-color: #424242;\n    border: 1px solid #282828;\n}\n.dropdown-menu>li>a:focus, .dropdown-menu>li>a:hover {\n    color: #fafafa;\n}\n\n.bootstrap-select>.dropdown-toggle.bs-placeholder, .bootstrap-select>.dropdown-toggle.bs-placeholder:active, .bootstrap-select>.dropdown-toggle.bs-placeholder:focus, .bootstrap-select>.dropdown-toggle.bs-placeholder:hover {\n    color: #fff;\n}\n.bootstrap-select>.dropdown-toggle.bs-placeholder, .bootstrap-select>.dropdown-toggle.bs-placeholder.btn-secondary {\n    color: #d4d4d4 !important;\n}\ntbody tr {\n    color: #ccc;\n}\n.navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:focus, .navbar-default .navbar-nav>.open>a:hover {\n    color: #ccc;\n}\n.navbar-default .navbar-nav>.active>a, .navbar-default .navbar-nav>.active>a:focus, .navbar-default .navbar-nav>.active>a:hover {\n    color: #ccc;\n}\n.list-group-item {\n    background-color: #282828;\n    border: 1px solid #555;\n}\n.table-striped>tbody>tr:nth-of-type(odd) {\n    background-color: #424242;\n}\ntable.dataTable>tbody>tr.child ul.dtr-details>li {\n    border-bottom: 1px solid rgba(255, 255, 255, 0.13);\n}\n.label.label-last-login {\n    color: #ccc !important;\n    background-color: #555 !important;\n}\n.progress {\n    background-color: #555;\n}\n.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 {\n    color: #ccc;\n}\ndiv.numberedtextarea-number {\n    color: #999;\n}\n.well {\n    border: 1px solid #555;\n    background-color: #282828;\n}\npre {\n    color: #ccc;\n    background-color: #282828;\n    border: 1px solid #555;\n}\n.form-control {\n    background-color: transparent;\n}\ninput.form-control, textarea.form-control {\n    color: #e2e2e2 !important;\n    background-color: #424242 !important;\n    border: 1px solid #999;\n}\ninput.form-control:focus, textarea.form-control {\n    background-color: #424242 !important;\n}\ninput.form-control:disabled, textarea.form-disabled {\n    color: #a8a8a8 !important;\n    background-color: #6e6e6e !important;\n}\n.input-group-addon {\n    color: #ccc;\n    background-color: #424242 !important;\n    border: 1px solid #999;\n}\n.input-group-text {\n    color: #ccc;\n    background-color: #1c1c1c;\n}\n\n.list-group-item {\n    color: #ccc;\n}\n.dropdown-item {\n    color: #ccc;\n}\n.dropdown-item:hover {\n    color: #616161 !important;\n}\n.dropdown-item.active:hover {\n    color: #fff !important;\n    background-color: #007aff;\n}\n.form-select {\n    color: #e2e2e2!important;\n    background-color: #424242!important;\n    border: 1px solid #999;\n}\n\n.responsive-tabs .card-header button[data-bs-toggle=\"collapse\"] {\n    color: #c7c7c7;\n}\n\n.navbar-toggler {\n    color: #fff !important;\n}\n\n.form-control-plaintext {\n    color: #e0e0e0;\n}\n\n\n.breadcrumb {\n    color: #fff !important;\n    background-color: #7a7a7a !important;\n    border-color: #5c5c5c !important;\n}\n\n\na {\n    color: #6fc7e9;\n    text-decoration: underline;\n}\na:hover {\n    color: #3daedb;\n}\n\n.breadcrumb-item.active {\n    color: #ccc;\n}\n\n\n.list-group-item.disabled, .list-group-item:disabled {\n    color: #fff;\n    background-color: #a8a8a8 !important;\n    border-color: #a8a8a8;\n}\n\n.card.bg-light .card-title {\n    color: #000 !important;\n}\n\n.card.bg-light .card-text {\n    color: #000;\n}\n\n\n\n\n.accordion-item {\n    background-color: #3a3a3a;\n}\n.accordion-button {\n    color: #bbb;\n    background-color: #2c2c2c;\n}\n.accordion-button:not(.collapsed) {\n    color: #6fc7e9;\n    background-color: #2c2c2c;\n}\n.accordion-button::after {\n    background-image: none;\n}\n.accordion-button:not(.collapsed)::after {\n    background-image: none;\n}\n\n\n.toast-header {\n    background-color: #4c4c4c;\n}\n.toast-body {\n    background-color: #626262;\n}\n\n.nav-pills .nav-link.active, .nav-pills .show > .nav-link {\n    color: #fff !important;\n}\n\n.tag-box {\n    background-color: #282828;\n    border: 1px solid #555;\n}\n.tag-input {\n    color: #fff;\n    background-color: #282828;\n}\n.tag-add {\n    color: #ccc;\n}\n.tag-add:hover {\n    color: #d1d1d1;\n}\n\n.btn-check-label {\n  color: #fff;\n}\n.btn-outline-secondary:hover {\n    background-color: #5c5c5c;\n}\n.btn.btn-outline-secondary {\n  color: #e0e0e0 !important;\n  border-color: #7a7a7a !important;\n}\n.btn-check:checked+.btn-outline-secondary, .btn-check:active+.btn-outline-secondary, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show {\n    background-color: #7a7a7a !important;\n}\n.btn-check:checked+.btn-light, .btn-check:active+.btn-light, .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle {\n    color: #f2f2f7 !important;\n    background-color: #242424 !important;\n    border-color: #1c1c1e !important;\n}\n.btn-input-missing,\n.btn-input-missing:hover,\n.btn-input-missing:active,\n.btn-input-missing:focus,\n.btn-input-missing:active:hover,\n.btn-input-missing:active:focus {\n  color: #fff !important;\n  background-color: #ff3b30 !important;\n  border-color: #ff3b30 !important;\n}\n\n.inputMissingAttr {\n    border-color: #ff4136 !important;\n}\n\n.list-group-details {\n    background: #555;\n}\n.list-group-header {\n    background: #444;\n}\n\nspan.mail-address-item {\n    background-color: #444;\n    border-radius: 4px;\n    border: 1px solid #555;\n    padding: 2px 7px;\n    display: inline-block;\n    margin: 2px 6px 2px 0;\n}\n\ntable.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before:hover,\ntable.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before:hover {\n  background-color: #7a7a7a !important;\n}\n\ntable.dataTable.dtr-inline.collapsed>tbody>tr>td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed>tbody>tr>th.dtr-control:before {\n  background-color: #7a7a7a !important;\n  border: 1.5px solid #5c5c5c !important;\n  color: #e0e0e0 !important;\n}\n\ntable.dataTable.dtr-inline.collapsed>tbody>tr.parent>td.dtr-control:before,\ntable.dataTable.dtr-inline.collapsed>tbody>tr.parent>th.dtr-control:before {\n  background-color: #949494;\n}\n\ntable.dataTable.dtr-inline.collapsed>tbody>tr>td.child,\ntable.dataTable.dtr-inline.collapsed>tbody>tr>th.child,\ntable.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty {\n  background-color: #414141;\n}\n\ntable.table, .table-striped>tbody>tr:nth-of-type(odd)>*, tbody tr {\n    color: #ccc !important;\n}\n\n.table-secondary {\n    --bs-table-bg: #282828;\n    --bs-table-striped-bg: #343434;\n    --bs-table-striped-color: #f2f2f7;\n    --bs-table-active-bg: #4c4c4c;\n    --bs-table-active-color: #f2f2f7;\n    --bs-table-hover-bg: #3a3a3a;\n    --bs-table-hover-color: #f2f2f7;\n    color: #ccc;\n    border-color: #3a3a3a;\n}\n\n.table-light {\n    --bs-table-bg: #3a3a3a;\n    --bs-table-striped-bg: #444444;\n    --bs-table-striped-color: #f2f2f7;\n    --bs-table-active-bg: #5c5c5c;\n    --bs-table-active-color: #f2f2f7;\n    --bs-table-hover-bg: #4c4c4c;\n    --bs-table-hover-color: #f2f2f7;\n    color: #ccc;\n    border-color: #4c4c4c;\n}\n\n.table-bordered {\n    border-color: #3a3a3a;\n}\n\n.table-bordered th,\n.table-bordered td {\n    border-color: #3a3a3a !important;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n    border-bottom-width: 2px;\n}\n\n.table-striped>tbody>tr:nth-of-type(odd)>td,\n.table-striped>tbody>tr:nth-of-type(odd)>th {\n    background-color: #282828;\n}\n\n.table-hover>tbody>tr:hover {\n    background-color: #343434;\n}\n\n.table>:not(caption)>*>* {\n    border-color: #5c5c5c;\n    --bs-table-color-state:#bbb;\n    --bs-table-bg: #3a3a3a;\n}\n.text-muted {\n    --bs-secondary-color: #8e8e93;\n}\ninput::placeholder {\n    color: #8e8e93 !important;\n}\n\n.form-select {\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%238e8e93' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e\");\n}\n.btn-light, .btn-light:hover {\n    background-image: none;\n}"
  },
  {
    "path": "data/web/domainadmin/index.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.domainadmin.inc.php';\n\nif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'domainadmin') {\n  // Only redirect to mailbox if NO pending actions\n  if (empty($_SESSION['pending_tfa_setup']) && empty($_SESSION['pending_pw_update'])) {\n    header('Location: /domainadmin/mailbox');\n    exit();\n  }\n}\nelseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'admin') {\n  header('Location: /admin/dashboard');\n  exit();\n}\nelseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'user') {\n  header('Location: /user');\n  exit();\n}\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n$_SESSION['index_query_string'] = $_SERVER['QUERY_STRING'];\n\n$template = 'domainadmin_index.twig';\n$template_data = [\n  'login_delay' => @$_SESSION['ldelay'],\n  'custom_login' => customize('get', 'custom_login'),\n];\n\n$js_minifier->add('/web/js/site/index.js');\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/domainadmin/mailbox.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.domainadmin.inc.php';\n\nprotect_route(['domainadmin']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] .  '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n\n\n\n$js_minifier->add('/web/js/site/mailbox.js');\n$js_minifier->add('/web/js/presets/sieveMailbox.js');\n$js_minifier->add('/web/js/site/pwgen.js');\n\n$role = \"domainadmin\";\n$is_dual = (!empty($_SESSION[\"dual-login\"][\"username\"])) ? 'true' : 'false';\n$allow_admin_email_login = (preg_match(\"/^([yY][eE][sS]|[yY])+$/\", $_ENV[\"ALLOW_ADMIN_EMAIL_LOGIN\"])) ? 'true' : 'false';\n\n// domains\n$domains = mailbox('get', 'domains');\n\n// mailboxes\n$mailboxes = [];\nforeach ($domains as $domain) {\n  foreach (mailbox('get', 'mailboxes', $domain) as $mailbox) {\n    $mailboxes[] = $mailbox;\n  }\n}\n\n$template = 'mailbox.twig';\n$template_data = [\n  'acl' => $_SESSION['acl'],\n  'acl_json' => json_encode($_SESSION['acl']),\n  'role' => $role,\n  'is_dual' => $is_dual,\n  'allow_admin_email_login' => $allow_admin_email_login,\n  'global_filters' => mailbox('get', 'global_filter_details'),\n  'domains' => $domains,\n  'mailboxes' => $mailboxes,\n  'lang_mailbox' => json_encode($lang['mailbox']),\n  'lang_rl' => json_encode($lang['ratelimit']),\n  'lang_edit' => json_encode($lang['edit']),\n  'lang_datatables' => json_encode($lang['datatables']),\n];\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';"
  },
  {
    "path": "data/web/domainadmin/user.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/triggers.domainadmin.inc.php';\n\n/*\n/ DOMAIN ADMIN\n*/\n\nprotect_route(['domainadmin']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n$_SESSION['return_to'] = $_SERVER['REQUEST_URI'];\n$tfa_data = get_tfa();\n$fido2_data = fido2(array(\"action\" => \"get_friendly_names\"));\n$username = $_SESSION['mailcow_cc_username'];\n\n$template = 'domainadmin.twig';\n$template_data = [\n  'acl' => $_SESSION['acl'],\n  'acl_json' => json_encode($_SESSION['acl']),\n  'user_spam_score' => mailbox('get', 'spam_score', $username),\n  'tfa_data' => $tfa_data,\n  'fido2_data' => $fido2_data,\n  'lang_user' => json_encode($lang['user']),\n  'lang_datatables' => json_encode($lang['datatables']),\n];\n\n$js_minifier->add('/web/js/site/user.js');\n$js_minifier->add('/web/js/site/pwgen.js');\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/edit.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\n\nprotect_route();\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/header.inc.php';\n\n$template = 'edit.twig';\n$template_data = [];\n$result = null;\nif (isset($_SESSION['mailcow_cc_role'])) {\n  if ($_SESSION['mailcow_cc_role'] == \"admin\" || $_SESSION['mailcow_cc_role'] == \"domainadmin\") {\n    if (isset($_GET[\"alias\"]) &&\n      !empty($_GET[\"alias\"])) {\n        $alias = html_entity_decode(rawurldecode($_GET[\"alias\"]));\n        $result = mailbox('get', 'alias_details', $alias);\n\n        $template = 'edit/alias.twig';\n        $template_data = [\n          'alias' => $alias,\n          'goto' => (preg_match('/^(null|ham|spam)@localhost$/i', $result['goto'])) ? null : $result['goto'],\n        ];\n    }\n    elseif (isset($_GET['domainadmin'])) {\n      $domain_admin = $_GET[\"domainadmin\"];\n      $result = domain_admin('details', $domain_admin);\n      $template = 'edit/domainadmin.twig';\n      $template_data = [\n        'domain_admin' => $domain_admin,\n        'da_acls' => acl('get', 'domainadmin', $domain_admin),\n      ];\n    }\n    elseif (isset($_GET['admin'])) {\n      $admin = $_GET[\"admin\"];\n      $result = admin('details', $admin);\n      $template = 'edit/admin.twig';\n      $template_data = ['admin' => $admin];\n    }\n    elseif (isset($_GET['domain'])) {\n      if (is_valid_domain_name($_GET[\"domain\"]) &&\n        !empty($_GET[\"domain\"])) {\n          // edit domain\n          $domain = $_GET[\"domain\"];\n          $result = mailbox('get', 'domain_details', $domain);\n          $quota_notification_bcc = quota_notification_bcc('get', $domain);\n          $rl = ratelimit('get', 'domain', $domain);\n          $rlyhosts = relayhost('get');\n          $domain_footer = mailbox('get', 'domain_wide_footer', $domain);\n          $mta_sts = mailbox('get', 'mta_sts', $domain);\n          if (count($mta_sts) == 0) {\n            $mta_sts = false;\n          } elseif (isset($mta_sts['mx'])) {\n            $mta_sts['mx'] = implode(',', $mta_sts['mx']);\n          }\n          $template = 'edit/domain.twig';\n          $template_data = [\n            'acl' => $_SESSION['acl'],\n            'domain' => $domain,\n            'quota_notification_bcc' => $quota_notification_bcc,\n            'rl' => $rl,\n            'rlyhosts' => $rlyhosts,\n            'dkim' => dkim('details', $domain),\n            'domain_details' => $result,\n            'domain_footer' => $domain_footer,\n            'mta_sts' => $mta_sts,\n            'mailboxes' => mailbox('get', 'mailboxes', $_GET[\"domain\"]),\n            'aliases' => mailbox('get', 'aliases', $_GET[\"domain\"], 'address'),\n            'alias_domains' => mailbox('get', 'alias_domains', $_GET[\"domain\"])\n          ];\n      }\n    }\n    elseif (isset($_GET['template'])){\n      $domain_template = mailbox('get', 'domain_templates', $_GET['template']);\n      if ($domain_template){\n        $template_data = [\n          'template' => $domain_template,\n          'rl' => ['frame' => $domain_template['attributes']['rl_frame']],\n        ];\n        $template = 'edit/domain-templates.twig';\n        $result = true;\n      }\n      else {\n        $mailbox_template = mailbox('get', 'mailbox_templates', $_GET['template']);\n        if ($mailbox_template){\n          $template_data = [\n            'template' => $mailbox_template,\n            'rl' => ['frame' => $mailbox_template['attributes']['rl_frame']],\n          ];\n          $template = 'edit/mailbox-templates.twig';\n          $result = true;\n        }\n      }\n    }\n    elseif (isset($_GET['oauth2client']) &&\n      is_numeric($_GET[\"oauth2client\"]) &&\n      !empty($_GET[\"oauth2client\"])) {\n        $oauth2client = $_GET[\"oauth2client\"];\n        $result = oauth2('details', 'client', $oauth2client);\n        $template = 'edit/oauth2client.twig';\n        $template_data = ['oauth2client' => $oauth2client];\n    }\n    elseif (isset($_GET['aliasdomain']) &&\n      is_valid_domain_name(html_entity_decode(rawurldecode($_GET[\"aliasdomain\"]))) &&\n      !empty($_GET[\"aliasdomain\"])) {\n        $alias_domain = html_entity_decode(rawurldecode($_GET[\"aliasdomain\"]));\n        $result = mailbox('get', 'alias_domain_details', $alias_domain);\n        $rl = ratelimit('get', 'domain', $alias_domain);\n        $template = 'edit/aliasdomain.twig';\n        $template_data = [\n          'alias_domain' => $alias_domain,\n          'rl' => $rl,\n          'domains' => mailbox('get', 'domains'),\n          'dkim' => dkim('details', $alias_domain),\n        ];\n    }\n    elseif (isset($_GET['mailbox'])){\n      if(filter_var(html_entity_decode(rawurldecode($_GET[\"mailbox\"])), FILTER_VALIDATE_EMAIL) && !empty($_GET[\"mailbox\"])) {\n        // edit mailbox\n        $mailbox = html_entity_decode(rawurldecode($_GET[\"mailbox\"]));\n        $result = mailbox('get', 'mailbox_details', $mailbox);\n        $rl = ratelimit('get', 'mailbox', $mailbox);\n        $pushover_data = pushover('get', $mailbox);\n        $quarantine_notification = mailbox('get', 'quarantine_notification', $mailbox);\n        $quarantine_category = mailbox('get', 'quarantine_category', $mailbox);\n        $get_tls_policy = mailbox('get', 'tls_policy', $mailbox);\n        $rlyhosts = relayhost('get');\n        $template = 'edit/mailbox.twig';\n        $template_data = [\n          'acl' => $_SESSION['acl'],\n          'mailbox' => $mailbox,\n          'rl' => $rl,\n          'pushover_data' => $pushover_data,\n          'get_tagging_options' => mailbox('get', 'delimiter_action', $mailbox),\n          'quarantine_notification' => $quarantine_notification,\n          'quarantine_category' => $quarantine_category,\n          'get_tls_policy' => $get_tls_policy,\n          'rlyhosts' => $rlyhosts,\n          'sender_acl_handles' => mailbox('get', 'sender_acl_handles', $mailbox),\n          'user_acls' => acl('get', 'user', $mailbox),\n          'mailbox_details' => $result,\n          'iam_settings' => $iam_settings,\n        ];\n      }\n    }\n    elseif (isset($_GET['relayhost']) && is_numeric($_GET[\"relayhost\"]) && !empty($_GET[\"relayhost\"])) {\n        $relayhost = intval($_GET[\"relayhost\"]);\n        $result = relayhost('details', $relayhost);\n        $template = 'edit/relayhost.twig';\n        $template_data = ['relayhost' => $relayhost];\n    }\n    elseif (isset($_GET['transport']) && is_numeric($_GET[\"transport\"]) && !empty($_GET[\"transport\"])) {\n        $transport = intval($_GET[\"transport\"]);\n        $result = transport('details', $transport);\n        $template = 'edit/transport.twig';\n        $template_data = ['transport' => $transport];\n    }\n    elseif (isset($_GET['resource']) && filter_var(html_entity_decode(rawurldecode($_GET[\"resource\"])), FILTER_VALIDATE_EMAIL) && !empty($_GET[\"resource\"])) {\n        $resource = html_entity_decode(rawurldecode($_GET[\"resource\"]));\n        $result = mailbox('get', 'resource_details', $resource);\n        $template = 'edit/resource.twig';\n    }\n    elseif (isset($_GET['bcc']) && !empty($_GET[\"bcc\"])) {\n        $bcc = intval($_GET[\"bcc\"]);\n        $result = bcc('details', $bcc);\n        $template = 'edit/bcc.twig';\n        $template_data = ['bcc' => $bcc];\n    }\n    elseif (isset($_GET['recipient_map']) &&\n      !empty($_GET[\"recipient_map\"]) &&\n      $_SESSION['mailcow_cc_role'] == \"admin\") {\n        $map = intval($_GET[\"recipient_map\"]);\n        $result = recipient_map('details', $map);\n        if (substr($result['recipient_map_old'], 0, 1) == '@') {\n          $result['recipient_map_old'] = substr($result['recipient_map_old'], 1);\n        }\n        if (substr($result['recipient_map_new'], 0, 1) == '@') {\n          $result['recipient_map_new'] = substr($result['recipient_map_new'], 1);\n        }\n        $template = 'edit/recipient_map.twig';\n        $template_data = ['map' => $map];\n    }\n    elseif (isset($_GET['tls_policy_map']) &&\n      !empty($_GET[\"tls_policy_map\"]) &&\n      $_SESSION['mailcow_cc_role'] == \"admin\") {\n        $map = intval($_GET[\"tls_policy_map\"]);\n        $result = tls_policy_maps('details', $map);\n        $template = 'edit/tls_policy_map.twig';\n        $template_data = [\n          'map' => $map,\n          'policy_options' => [\n            'none',\n            'may',\n            'encrypt',\n            'dane',\n            'dane-only',\n            'fingerprint',\n            'verify',\n            'secure',\n          ],\n        ];\n    }\n  }\n  if ($_SESSION['mailcow_cc_role'] == \"admin\"  || $_SESSION['mailcow_cc_role'] == \"domainadmin\" || $_SESSION['mailcow_cc_role'] == \"user\") {\n    if (isset($_GET['syncjob']) &&\n      is_numeric($_GET['syncjob'])) {\n        $id = $_GET[\"syncjob\"];\n        $result = mailbox('get', 'syncjob_details', $id);\n        $template = 'edit/syncjob.twig';\n      }\n    elseif (isset($_GET['filter']) &&\n      is_numeric($_GET['filter'])) {\n        $id = $_GET[\"filter\"];\n        $result = mailbox('get', 'filter_details', $id);\n        $template = 'edit/filter.twig';\n    }\n    elseif (isset($_GET['app-passwd']) &&\n      is_numeric($_GET['app-passwd'])) {\n        $id = $_GET[\"app-passwd\"];\n        $result = app_passwd('details', $id);\n        $template = 'edit/app-passwd.twig';\n    }\n  }\n}\nelse {\n  $template_data['access_denied'] = true;\n}\n\n$js_minifier->add('/web/js/site/edit.js');\n$js_minifier->add('/web/js/site/pwgen.js');\n\n$template_data['result'] = $result;\n$template_data['return_to'] = $_SESSION['return_to'];\n$template_data['lang_user'] = json_encode($lang['user']);\n$template_data['lang_admin'] = json_encode($lang['admin']);\n$template_data['lang_datatables'] = json_encode($lang['datatables']);\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/footer.inc.php';\n"
  },
  {
    "path": "data/web/f2b-banlist.php",
    "content": "<?php\n\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\n\nif (isset($_GET['id'])) {\n    header('Content-Type: text/plain');\n    echo fail2ban('banlist', 'get', $_GET['id']);\n} else {\n    header('HTTP/1.1 404 Not Found');\n    exit;\n}\n"
  },
  {
    "path": "data/web/inc/ajax/container_ctrl.php",
    "content": "<?php\r\n\r\n// Block requests by checking the 'Sec-Fetch-Dest' header.\r\nif (isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] !== 'empty') {\r\n  header('HTTP/1.1 403 Forbidden');\r\n  exit;\r\n}\r\n\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\r\nif (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'admin') {\r\n\texit();\r\n}\r\n\r\nif (preg_match('/^[a-z\\-]{0,}-mailcow/', $_GET['service'])) {\r\n  if ($_GET['action'] == \"start\") {\r\n    header('Content-Type: text/html; charset=utf-8');\r\n    $retry = 0;\r\n    while (docker('info', $_GET['service'])['State']['Running'] != 1 && $retry <= 3) {\r\n      $response = docker('post', $_GET['service'], 'start');\r\n      $response = json_decode($response, true);\r\n      $last_response = ($response['type'] == \"success\") ? '<b><span class=\"pull-right text-success\">OK</span></b>' : '<b><span class=\"pull-right text-danger\">Error: ' . $response['msg'] . '</span></b>';\r\n      if ($response['type'] == \"success\") {\r\n        break;\r\n      }\r\n      usleep(1500000);\r\n      $retry++;\r\n    }\r\n    echo (!isset($last_response)) ? '<b><span class=\"pull-right text-warning\">Already running</span></b>' : $last_response;\r\n  }\r\n  if ($_GET['action'] == \"stop\") {\r\n    header('Content-Type: text/html; charset=utf-8');\r\n    $retry = 0;\r\n    while (docker('info', $_GET['service'])['State']['Running'] == 1 && $retry <= 3) {\r\n      $response = docker('post', $_GET['service'], 'stop');\r\n      $response = json_decode($response, true);\r\n      $last_response = ($response['type'] == \"success\") ? '<b><span class=\"pull-right text-success\">OK</span></b>' : '<b><span class=\"pull-right text-danger\">Error: ' . $response['msg'] . '</span></b>';\r\n      if ($response['type'] == \"success\") {\r\n        break;\r\n      }\r\n      usleep(1500000);\r\n      $retry++;\r\n    }\r\n    echo (!isset($last_response)) ? '<b><span class=\"pull-right text-warning\">Not running</span></b>' : $last_response;\r\n  }\r\n  if ($_GET['action'] == \"restart\") {\r\n    header('Content-Type: text/html; charset=utf-8');\r\n    $response = docker('post', $_GET['service'], 'restart');\r\n    $response = json_decode($response, true);\r\n    $last_response = ($response['type'] == \"success\") ? '<b><span class=\"pull-right text-success\">OK</span></b>' : '<b><span class=\"pull-right text-danger\">Error: ' . $response['msg'] . '</span></b>';\r\n    echo (!isset($last_response)) ? '<b><span class=\"pull-right text-warning\">Cannot restart container</span></b>' : $last_response;\r\n  }\r\n  if ($_GET['action'] == \"logs\") {\r\n    $lines = (empty($_GET['lines']) || !is_numeric($_GET['lines'])) ? 1000 : $_GET['lines'];\r\n    header('Content-Type: text/plain; charset=utf-8');\r\n    print_r(preg_split('/\\n/', docker('logs', $_GET['service'], $lines)));\r\n  }\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/ajax/destroy_tfa_auth.php",
    "content": "<?php\r\nsession_start();\r\nunset($_SESSION['pending_mailcow_cc_username']);\r\nunset($_SESSION['pending_mailcow_cc_role']);\r\nunset($_SESSION['pending_tfa_methods']);\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/ajax/dns_diagnostics.php",
    "content": "<?php\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';\n\ndefine('state_good', '<i class=\"bi bi-check-lg text-success\"></i>');\ndefine('state_missing', '<i class=\"bi bi-x-lg text-danger\"></i>');\ndefine('state_nomatch', \"?\");\ndefine('state_optional', \" <sup>2</sup>\");\n\nif (isset($_SESSION['mailcow_cc_role']) && ($_SESSION['mailcow_cc_role'] == \"admin\"|| $_SESSION['mailcow_cc_role'] == \"domainadmin\")) {\n\n  $alias_domains = array();\n\n  if (isset($_GET['domain'])) {\n    $domain_details = mailbox('get', 'domain_details', $_GET['domain']);\n    if ($domain_details !== false) {\n      $domain = $_GET['domain'];\n      $alias_domains = array_merge($alias_domains, mailbox('get', 'alias_domains', $domain));\n    }\n    else {\n      echo \"No such domain in context\";\n      exit();\n    }\n  }\n\n  $ch = curl_init('http://ip4.mailcow.email');\n  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);\n  curl_setopt($ch, CURLOPT_VERBOSE, false);\n  curl_setopt($ch, CURLOPT_HEADER, false);\n  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\n  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);\n  $ip = curl_exec($ch);\n  curl_close($ch);\n\n  $ch = curl_init('http://ip6.mailcow.email');\n  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);\n  curl_setopt($ch, CURLOPT_VERBOSE, false);\n  curl_setopt($ch, CURLOPT_HEADER, false);\n  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\n  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);\n  $ip6 = curl_exec($ch);\n  curl_close($ch);\n\n  $ptr = implode('.', array_reverse(explode('.', $ip))) . '.in-addr.arpa';\n  if (!empty($ip6)) {\n    $ip6_full = str_replace('::', str_repeat(':', 9-substr_count($ip6, ':')), $ip6);\n    $ip6_full = str_replace('::', ':0:', $ip6_full);\n    $ip6_full = str_replace('::', ':0:', $ip6_full);\n    $ptr6 = '';\n    foreach (explode(':', $ip6_full) as $part) {\n      $ptr6 .= str_pad($part, 4, '0', STR_PAD_LEFT);\n    }\n    $ptr6 = implode('.', array_reverse(str_split($ptr6, 1))) . '.ip6.arpa';\n  }\n\n  $https_port = strpos($_SERVER['HTTP_HOST'], ':');\n  if ($https_port === FALSE) {\n    $https_port = 443;\n  }\n  else {\n    $https_port = substr($_SERVER['HTTP_HOST'], $https_port+1);\n  }\n\n  if (!isset($autodiscover_config['sieve'])) {\n    $autodiscover_config['sieve'] = array(\n      'server' => $mailcow_hostname,\n      'port' => array_pop(explode(':', getenv('SIEVE_PORT')))\n    );\n  }\n\n  // Init records array\n  $spf_link = '<a href=\"http://www.open-spf.org/SPF_Record_Syntax/\" target=\"_blank\">SPF Record Syntax</a><br />';\n  $dmarc_link = '<a href=\"https://www.kitterman.com/dmarc/assistant.html\" target=\"_blank\">DMARC Assistant</a>';\n  $mtasts_report_link = '<a href=\"https://mxtoolbox.com/dmarc/smtp-tls/how-to-setup-smtp-tls-reports\" target=\"_blank\">TLS Report Record Syntax</a>';\n\n  $records = array();\n\n  if ($_SESSION['mailcow_cc_role'] == \"admin\") {\n    $records[] = array(\n      $mailcow_hostname,\n      'A',\n      $ip\n    );\n    $records[] = array(\n      $ptr,\n      'PTR',\n      $mailcow_hostname\n    );\n    if (!empty($ip6)) {\n      $records[] = array(\n        $mailcow_hostname,\n        'AAAA',\n        expand_ipv6($ip6)\n      );\n      $records[] = array(\n        $ptr6,\n        'PTR',\n        $mailcow_hostname\n      );\n    }\n    $records[] = array(\n      '_25._tcp.' . $autodiscover_config['smtp']['server'],\n      'TLSA',\n      generate_tlsa_digest($autodiscover_config['smtp']['server'], 25, 1)\n    );\n  }\n\n  $records[] = array(\n    $domain,\n    'MX',\n    $mailcow_hostname\n  );\n\n  if (!in_array($domain, $alias_domains)) {\n    $records[] = array(\n      'autodiscover.' . $domain,\n      'CNAME',\n      $mailcow_hostname\n    );\n    $records[] = array(\n      '_autodiscover._tcp.' . $domain,\n      'SRV',\n      $mailcow_hostname . ' ' . $https_port\n    );\n    $records[] = array(\n      'autoconfig.' . $domain,\n      'CNAME',\n      $mailcow_hostname\n    );\n  }\n\n  // Check if domain is an alias domain and get target domain's MTA-STS\n  $alias_domain_details = mailbox('get', 'alias_domain_details', $domain);\n  $mta_sts_domain = $domain;\n  \n  if ($alias_domain_details !== false && !empty($alias_domain_details['target_domain'])) {\n    // This is an alias domain, check target domain for MTA-STS\n    $mta_sts_domain = $alias_domain_details['target_domain'];\n  }\n  \n  $mta_sts = mailbox('get', 'mta_sts', $mta_sts_domain);\n  if (count($mta_sts) > 0 && $mta_sts['active'] == 1) {\n    if (!in_array($domain, $alias_domains)) {\n      $records[] = array(\n        'mta-sts.' . $domain,\n        'CNAME',\n        $mailcow_hostname\n      );\n    }\n    $records[] = array(\n        '_mta-sts.' . $domain,\n        'TXT',\n        \"v={$mta_sts['version']};id={$mta_sts['id']};\",\n    );\n    $records[] = array(\n        '_smtp._tls.' . $domain,\n        'TXT',\n        $mtasts_report_link,\n    );\n  }\n\n  $records[] = array(\n    $domain,\n    'TXT',\n    $spf_link,\n    state_optional\n  );\n\n  $records[] = array(\n    '_dmarc.' . $domain,\n    'TXT',\n    $dmarc_link,\n    state_optional\n  );\n\n  if (!empty($dkim = dkim('details', $domain))) {\n    $records[] = array(\n      $dkim['dkim_selector'] . '._domainkey.' . $domain,\n      'TXT',\n      $dkim['dkim_txt']\n    );\n  }\n\n  if (!in_array($domain, $alias_domains)) {\n    $current_records = (array)dns_get_record('_pop3._tcp.' . $domain, DNS_SRV);\n    if (count($current_records) == 0 || $current_records[0]['target'] != '') {\n      if ($autodiscover_config['pop3']['tlsport'] != '110') {\n        $records[] = array(\n          '_pop3._tcp.' . $domain,\n          'SRV',\n          $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['tlsport']\n        );\n      }\n    }\n    else {\n      $records[] = array(\n        '_pop3._tcp.' . $domain,\n        'SRV',\n        '. 0'\n      );\n    }\n\n    $current_records = (array)dns_get_record('_pop3s._tcp.' . $domain, DNS_SRV);\n\n    if (count($current_records) == 0 || $current_records[0]['target'] != '') {\n      if ($autodiscover_config['pop3']['port'] != '995') {\n        $records[] = array(\n          '_pop3s._tcp.' . $domain,\n          'SRV',\n          $autodiscover_config['pop3']['server'] . ' ' . $autodiscover_config['pop3']['port']\n        );\n      }\n    }\n    else {\n      $records[] = array(\n        '_pop3s._tcp.' . $domain,\n        'SRV',\n        '. 0'\n      );\n    }\n\n    if ($autodiscover_config['imap']['tlsport'] != '143') {\n      $records[] = array(\n        '_imap._tcp.' . $domain,\n        'SRV',\n        $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['tlsport']\n      );\n    }\n\n    if ($autodiscover_config['imap']['port'] != '993') {\n      $records[] = array(\n        '_imaps._tcp.' . $domain,\n        'SRV',\n        $autodiscover_config['imap']['server'] . ' ' . $autodiscover_config['imap']['port']\n      );\n    }\n\n    if ($autodiscover_config['smtp']['tlsport'] != '587') {\n      $records[] = array(\n        '_submission._tcp.' . $domain,\n        'SRV',\n        $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['tlsport']\n      );\n    }\n\n    if ($autodiscover_config['smtp']['port'] != '465') {\n      $records[] = array(\n        '_smtps._tcp.' . $domain,\n        'SRV',\n        $autodiscover_config['smtp']['server'] . ' ' . $autodiscover_config['smtp']['port']\n      );\n    }\n\n    if ($autodiscover_config['sieve']['port'] != '4190') {\n      $records[] = array(\n        '_sieve._tcp.' . $domain,\n        'SRV',\n        $autodiscover_config['sieve']['server'] . ' ' . $autodiscover_config['sieve']['port']\n      );\n    }\n  }\n\n  $record_types = array(\n    'A' => DNS_A,\n    'AAAA' => DNS_AAAA,\n    'CNAME' => DNS_CNAME,\n    'MX' => DNS_MX,\n    'PTR' => DNS_PTR,\n    'SRV' => DNS_SRV,\n    'TXT' => DNS_TXT,\n  );\n\n  $data_field = array(\n    'A' => 'ip',\n    'AAAA' => 'ipv6',\n    'CNAME' => 'target',\n    'MX' => 'target',\n    'PTR' => 'target',\n    'SRV' => 'data',\n    'TLSA' => 'data',\n    'TXT' => 'txt',\n  );\n\n  ?>\n  <div class=\"table-responsive\" id=\"dnstable\">\n    <table class=\"table table-striped\">\n      <tr>\n        <th><?=$lang['diagnostics']['dns_records_name'];?></th>\n        <th><?=$lang['diagnostics']['dns_records_type'];?></th>\n        <th><?=$lang['diagnostics']['dns_records_data'];?></th>\n        <th><?=$lang['diagnostics']['dns_records_status'];?></th>\n      </tr>\n      <?php\n      foreach ($records as &$record) {\n        $record[1] = strtoupper($record[1]);\n        $state = state_optional;\n\n        if ($record[1] == 'TLSA') {\n          $currents = (array)dns_get_record($record[0], 52, $_, $_, TRUE);\n          foreach ($currents as &$current) {\n            $current['type'] = 'TLSA';\n            $current['cert_usage'] = hexdec(bin2hex($current['data'][0]));\n            $current['selector'] = hexdec(bin2hex($current['data'][1]));\n            $current['match_type'] = hexdec(bin2hex($current['data'][2]));\n            $current['cert_data'] = bin2hex(substr($current['data'], 3));\n            $current['data'] = $current['cert_usage'] . ' ' . $current['selector'] . ' ' . $current['match_type'] . ' ' . $current['cert_data'];\n          }\n          unset($current);\n        }\n        else {\n          $currents = (array)dns_get_record($record[0], $record_types[$record[1]]);\n          if ($record[0] == $mailcow_hostname && ($record[1] == \"A\" || $record[1] == \"AAAA\")) {\n            if (!empty((array)dns_get_record($record[0], DNS_CNAME))) {\n              $currents[0]['ip'] = state_missing . ' <b>(CNAME)</b>';\n              $currents[0]['ipv6'] = state_missing . ' <b>(CNAME)</b>';\n            }\n          }\n          if ($record[1] == 'SRV') {\n            foreach ($currents as &$current) {\n              if ($current['target'] == '') {\n                $current['target'] = '.';\n                $current['port'] = '0';\n              }\n              $current['data'] = $current['target'] . ' ' . $current['port'];\n            }\n            unset($current);\n          }\n          elseif ($record[1] == 'TXT') {\n            foreach ($currents as &$current) {\n              unset($current);\n            }\n            unset($current);\n          }\n          elseif ($record[1] == 'AAAA') {\n            foreach ($currents as &$current) {\n              $current['ipv6'] = expand_ipv6($current['ipv6']);\n            }\n          }\n        }\n\n        if ($record[1] == 'CNAME' && count($currents) == 0) {\n          // A and AAAA are also valid instead of CNAME\n          $a = (array)dns_get_record($record[0], DNS_A);\n          $cname = (array)dns_get_record($record[2], DNS_A);\n          if (count($a) > 0 && count($cname) > 0) {\n            if ($a[0]['ip'] == $cname[0]['ip']) {\n              $currents = array(\n                array(\n                  'host' => $record[0],\n                  'class' => 'IN',\n                  'type' => 'CNAME',\n                  'target' => $record[2]\n                )\n              );\n              $aaaa = (array)dns_get_record($record[0], DNS_AAAA);\n              $cname = (array)dns_get_record($record[2], DNS_AAAA);\n              if (count($aaaa) == 0 || count($cname) == 0 || expand_ipv6($aaaa[0]['ipv6']) != expand_ipv6($cname[0]['ipv6'])) {\n                $currents[0]['target'] = expand_ipv6($aaaa[0]['ipv6']) . ' <sup>1</sup>';\n              }\n            }\n            else {\n              $currents = array(\n                array(\n                  'host' => $record[0],\n                  'class' => 'IN',\n                  'type' => 'CNAME',\n                  'target' => $a[0]['ip'] . ' <sup>1</sup>'\n                )\n              );\n            }\n          }\n        }\n\n        foreach ($currents as &$current) {\n          if ($current['type'] == \"TXT\" &&\n              stripos(strtolower($current['txt']), 'v=sts') === 0) {\n            if (strtolower($current[$data_field[$current['type']]]) == strtolower($record[2])) {\n              $state = state_good;\n            }\n            else {\n              $state = state_nomatch;\n            }\n            $state .= '<br />' . $current[$data_field[$current['type']]];\n          }\n          if ($current['type'] == 'TXT' &&\n              stripos($current['txt'], 'v=dmarc') === 0 &&\n              $record[2] == $dmarc_link) {\n            $current['txt'] = str_replace(' ', '', $current['txt']);\n            $state = $current[$data_field[$current['type']]] . state_optional;\n          }\n          elseif ($current['type'] == 'TXT' &&\n                  stripos($current['txt'], 'v=spf') === 0 &&\n                  $record[2] == $spf_link) {\n            $state = state_nomatch;\n            $rslt = get_spf_allowed_hosts($record[0], true);\n            if (in_array($ip, $rslt) && in_array(expand_ipv6($ip6), $rslt)) {\n              $state = state_good;\n            }\n            $state .= '<br />' . $current[$data_field[$current['type']]] . state_optional;\n          }\n          elseif ($current['type'] == 'TXT' &&\n                  stripos($current['txt'], 'v=dkim') === 0 &&\n                  stripos($record[2], 'v=dkim') === 0) {\n            preg_match('/v=DKIM1;.*k=rsa;.*p=([^;]*).*/i', $current[$data_field[$current['type']]], $dkim_matches_current);\n            preg_match('/v=DKIM1;.*k=rsa;.*p=([^;]*).*/i', $record[2], $dkim_matches_good);\n            if ($dkim_matches_current[1] == $dkim_matches_good[1]) {\n              $state = state_good;\n            }\n          }\n          elseif ($current['type'] != 'TXT' &&\n                  isset($data_field[$current['type']]) && $state != state_good) {\n            $state = state_nomatch;\n            if ($current[$data_field[$current['type']]] == $record[2]) {\n              $state = state_good;\n            }\n          }\n        }\n        unset($current);\n\n        if (isset($record[3]) &&\n        $record[3] == state_optional &&\n        ($state == state_missing || $state == state_nomatch)) {\n          $state = state_optional;\n        }\n\n        if ($state == state_nomatch) {\n          $state = array();\n          foreach ($currents as $current) {\n            $state[] = $current[$data_field[$current['type']]];\n          }\n          $state = implode('<br />', $state);\n        }\n        echo sprintf('\n        <tr>\n          <td>%s</td>\n          <td>%s</td>\n          <td class=\"dns-found\">%s</td>\n          <td class=\"dns-recommended\">%s</td>\n        </tr>', $record[0], $record[1], $record[2], $state);\n        $record[3] = explode('<br />', $state);\n      }\n\n      unset($record);\n\n      $dns_data = sprintf(\"\\$ORIGIN %s.\\n\", $domain);\n      foreach ($records as $record) {\n        if ($domain == substr($record[0], -strlen($domain))) {\n          $label = substr($record[0], 0, -strlen($domain)-1);\n          $val = $record[2];\n\n          if (strlen($label) == 0) {\n            $label = \"@\";\n          }\n\n          $vals = array();\n          if (strpos($val, \"<a\") !== FALSE) {\n            if (is_array($record[3]) && count($record[3]) == 1 && $record[3][0] == state_optional) {\n              $record[3][0] = \"**TODO**\";\n              $label = ';' . $label;\n            }\n            foreach ($record[3] as $val) {\n              $val = str_replace(state_optional, '', $val);\n              $val = str_replace(state_good, '', $val);\n              if (strlen($val) > 0) {\n                $vals[] = sprintf(\"%s\\tIN\\t%s\\t%s\\n\", $label, $record[1], $val);\n              }\n            }\n          }\n          else {\n            $vals[] = sprintf(\"%s\\tIN\\t%s\\t%s\\n\", $label, $record[1], $val);\n          }\n\n          foreach ($vals as $val) {\n            $dns_data .= str_replace($domain, $domain . '.', $val);\n          }\n        }\n      }\n      ?>\n    </table>\n    <a id='download-zonefile' class=\"btn btn-sm btn-secondary visible-xs-block visible-sm-inline visible-md-inline visible-lg-inline mb-4\" style=\"margin-top:10px\" data-zonefile=\"<?=base64_encode($dns_data);?>\" download='<?=$_GET['domain'];?>.txt' type='text/csv'>Download</a>\n    <script>\n      var zonefile_dl_link = document.getElementById('download-zonefile');\n      var zonefile = atob(zonefile_dl_link.getAttribute('data-zonefile'));\n      var data = new Blob([zonefile]);\n      var download_zonefile_link = document.getElementById('download-zonefile');\n      download_zonefile_link.href = URL.createObjectURL(data);\n    </script>\n  </div>\n  <p class=\"help-block\">\n    <sup>1</sup> <?=$lang['diagnostics']['cname_from_a'];?><br />\n    <sup>2</sup> <?=$lang['diagnostics']['optional'];?>\n  </p>\n  <?php\n}\nelse {\n  echo \"Session invalid\";\n  exit();\n}\n?>\n"
  },
  {
    "path": "data/web/inc/ajax/qitem_details.php",
    "content": "<?php\r\nheader(\"Content-Type: application/json\");\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\r\n\r\nfunction rrmdir($src) {\r\n  $dir = opendir($src);\r\n  while(false !== ( $file = readdir($dir)) ) {\r\n    if (( $file != '.' ) && ( $file != '..' )) {\r\n      $full = $src . '/' . $file;\r\n      if ( is_dir($full) ) {\r\n        rrmdir($full);\r\n      }\r\n      else {\r\n        unlink($full);\r\n      }\r\n    }\r\n  }\r\n  closedir($dir);\r\n  rmdir($src);\r\n}\r\n\r\nfunction addAddresses(&$list, $mail, $headerName) {\r\n  $addresses = $mail->getAddresses($headerName);\r\n  foreach ($addresses as $address) {\r\n    if (filter_var($address['address'], FILTER_VALIDATE_EMAIL)) {\r\n      $list[] = array('address' => $address['address'], 'type' => $headerName);\r\n    }\r\n  }\r\n}\r\n\r\nif (!empty($_GET['hash']) && ctype_alnum($_GET['hash'])) {\r\n  $mailc = quarantine('hash_details', $_GET['hash']);\r\n  if ($mailc === false) {\r\n    echo json_encode(array('error' => 'Message invalid'));\r\n    exit;\r\n  }\r\n  if (strlen($mailc['msg']) > 10485760) {\r\n    echo json_encode(array('error' => 'Message size exceeds 10 MiB.'));\r\n    exit;\r\n  }\r\n  if (!empty($mailc['msg'])) {\r\n    // Init message array\r\n    $data = array();\r\n    // Init parser\r\n    $mail_parser = new PhpMimeMailParser\\Parser();\r\n    $html2text = new Html2Text\\Html2Text();\r\n    // Load msg to parser\r\n    $mail_parser->setText($mailc['msg']);\r\n    // Get mail recipients\r\n    {\r\n      $recipientsList = array();\r\n      addAddresses($recipientsList, $mail_parser, 'to');\r\n      addAddresses($recipientsList, $mail_parser, 'cc');\r\n      addAddresses($recipientsList, $mail_parser, 'bcc');\r\n      $recipientsList[] = array('address' => $mailc['rcpt'], 'type' => 'smtp');\r\n      $data['recipients'] = $recipientsList;\r\n    }\r\n    // Get from\r\n    $data['header_from'] = $mail_parser->getHeader('from');\r\n    $data['env_from'] = $mailc['sender'];\r\n    // Get rspamd score\r\n    $data['score'] = $mailc['score'];\r\n    // Get rspamd action\r\n    $data['action'] = $mailc['action'];\r\n    // Get rspamd symbols\r\n    $data['symbols'] = json_decode($mailc['symbols']);\r\n    // Get fuzzy hashes\r\n    $data['fuzzy_hashes'] = json_decode($mailc['fuzzy_hashes']);\r\n    $data['subject'] = mb_convert_encoding($mail_parser->getHeader('subject'), \"UTF-8\", \"auto\");\r\n    (empty($data['subject'])) ? $data['subject'] = '-' : null;\r\n    echo json_encode($data);\r\n  }\r\n}\r\nelseif (!empty($_GET['id']) && ctype_alnum($_GET['id'])) {\r\n  if (!isset($_SESSION['mailcow_cc_role'])) {\r\n    echo json_encode(array('error' => 'Access denied'));\r\n    exit();\r\n  }\r\n  $tmpdir = '/tmp/' . $_GET['id'] . '/';\r\n  $mailc = quarantine('details', $_GET['id']);\r\n  if ($mailc === false) {\r\n    echo json_encode(array('error' => 'Access denied'));\r\n    exit;\r\n  }\r\n  if (strlen($mailc['msg']) > 10485760) {\r\n    echo json_encode(array('error' => 'Message size exceeds 10 MiB.'));\r\n    exit;\r\n  }\r\n  if (!empty($mailc['msg'])) {\r\n    if (isset($_GET['quick_release'])) {\r\n      $hash = hash('sha256', $mailc['id'] . $mailc['qid']);\r\n      header('Location: /qhandler/release/' . $hash);\r\n      exit;\r\n    }\r\n    if (isset($_GET['quick_delete'])) {\r\n      $hash = hash('sha256', $mailc['id'] . $mailc['qid']);\r\n      header('Location: /qhandler/delete/' . $hash);\r\n      exit;\r\n    }\r\n    // Init message array\r\n    $data = array();\r\n    // Init parser\r\n    $mail_parser = new PhpMimeMailParser\\Parser();\r\n    $html2text = new Html2Text\\Html2Text();\r\n    // Load msg to parser\r\n    $mail_parser->setText($mailc['msg']);\r\n\r\n    // Get mail recipients\r\n    {\r\n      $recipientsList = array();\r\n      addAddresses($recipientsList, $mail_parser, 'to');\r\n      addAddresses($recipientsList, $mail_parser, 'cc');\r\n      addAddresses($recipientsList, $mail_parser, 'bcc');\r\n      $recipientsList[] = array('address' => $mailc['rcpt'], 'type' => 'smtp');\r\n      $data['recipients'] = $recipientsList;\r\n    }\r\n    // Get from\r\n    $data['header_from'] = $mail_parser->getHeader('from');\r\n    $data['env_from'] = $mailc['sender'];\r\n    // Get rspamd score\r\n    $data['score'] = $mailc['score'];\r\n    // Get rspamd action\r\n    $data['action'] = $mailc['action'];\r\n    // Get rspamd symbols\r\n    $data['symbols'] = json_decode($mailc['symbols']);\r\n    // Get fuzzy hashes\r\n    $data['fuzzy_hashes'] = json_decode($mailc['fuzzy_hashes']);\r\n    // Get text/plain content\r\n    $data['text_plain'] = $mail_parser->getMessageBody('text');\r\n    if (!json_encode($data['text_plain'])) $data['text_plain'] = '';\r\n    // Get html content and convert to text\r\n    $data['text_html'] = $html2text->convert($mail_parser->getMessageBody('html'));\r\n    if (empty($data['text_plain']) && empty($data['text_html'])) {\r\n      // Failed to parse content, try raw\r\n      $text = trim(substr($mailc['msg'], strpos($mailc['msg'], \"\\r\\n\\r\\n\") + 1));\r\n      // Only return html->text\r\n      $data['text_plain'] = 'Parser failed, assuming HTML';\r\n      $data['text_html'] = $html2text->convert($text);\r\n    }\r\n    (empty($data['text_plain'])) ? $data['text_plain'] = '-' : null;\r\n    // Get subject\r\n    $data['subject'] = $mail_parser->getHeader('subject');\r\n    $data['subject'] = mb_convert_encoding($mail_parser->getHeader('subject'), \"UTF-8\", \"auto\");\r\n    (empty($data['subject'])) ? $data['subject'] = '-' : null;\r\n    // Get attachments\r\n    if (is_dir($tmpdir)) {\r\n      rrmdir($tmpdir);\r\n    }\r\n    mkdir('/tmp/' . $_GET['id']);\r\n    $mail_parser->saveAttachments($tmpdir, true);\r\n    $atts = $mail_parser->getAttachments(true);\r\n    if (count($atts) > 0) {\r\n      foreach ($atts as $key => $val) {\r\n        $data['attachments'][$key] = array(\r\n          // Index\r\n          // 0 => file name\r\n          // 1 => mime type\r\n          // 2 => file size\r\n          // 3 => vt link by sha256\r\n          $val->getFilename(),\r\n          $val->getContentType(),\r\n          filesize($tmpdir . $val->getFilename()),\r\n          'https://www.virustotal.com/file/' . hash_file('SHA256', $tmpdir . $val->getFilename()) . '/analysis/'\r\n        );\r\n      }\r\n    }\r\n    if (isset($_GET['eml'])) {\r\n      $dl_filename = filter_var($data['subject'], FILTER_SANITIZE_STRING);\r\n      $dl_filename = strlen($dl_filename) > 30 ? substr($dl_filename,0,30) : $dl_filename;\r\n      header('Pragma: public');\r\n      header('Expires: 0');\r\n      header('Cache-Control: must-revalidate, post-check=0, pre-check=0');\r\n      header('Cache-Control: private', false);\r\n      header('Content-Type: message/rfc822');\r\n      header('Content-Disposition: attachment; filename=\"'. $dl_filename . '.eml\";');\r\n      header('Content-Transfer-Encoding: binary');\r\n      header('Content-Length: ' . strlen($mailc['msg']));\r\n      echo $mailc['msg'];\r\n      exit;\r\n    }\r\n    if (isset($_GET['att'])) {\r\n      if ($_SESSION['acl']['quarantine_attachments'] == 0) {\r\n        exit(json_encode('Forbidden'));\r\n      }\r\n      $dl_id = intval($_GET['att']);\r\n      $dl_filename = filter_var($data['attachments'][$dl_id][0], FILTER_SANITIZE_STRING);\r\n      $dl_filename_short = strlen($dl_filename) > 20 ? substr($dl_filename, 0, 20) : $dl_filename;\r\n      $dl_filename_extension = pathinfo($tmpdir . $dl_filename)['extension'];\r\n      $dl_filename_short = preg_replace('/\\.' . $dl_filename_extension . '$/', '', $dl_filename_short);\r\n      if (!is_dir($tmpdir . $dl_filename) && file_exists($tmpdir . $dl_filename)) {\r\n        header('Pragma: public');\r\n        header('Expires: 0');\r\n        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');\r\n        header('Cache-Control: private', false);\r\n        header('Content-Type: ' . $data['attachments'][$dl_id][1]);\r\n        header('Content-Disposition: attachment; filename=\"'. $dl_filename_short . '.' . $dl_filename_extension . '\";');\r\n        header('Content-Transfer-Encoding: binary');\r\n        header('Content-Length: ' . $data['attachments'][$dl_id][2]);\r\n        readfile($tmpdir . $dl_filename);\r\n        exit;\r\n      }\r\n    }\r\n    echo json_encode($data);\r\n  }\r\n\r\n}\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/ajax/qr_gen.php",
    "content": "<?php\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\r\nheader('Content-Type: text/plain');\r\nif (!isset($_SESSION['mailcow_cc_role'])) {\r\n\texit();\r\n}\r\nif (isset($_GET['token']) && ctype_alnum($_GET['token'])) {\r\n  echo $tfa->getQRCodeImageAsDataUri($_SESSION['mailcow_cc_username'], $_GET['token']);\r\n}\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/ajax/show_rspamd_global_filters.php",
    "content": "<?php\r\nsession_start();\r\n$_SESSION['show_rspamd_global_filters'] = true;"
  },
  {
    "path": "data/web/inc/ajax/sieve_validation.php",
    "content": "<?php\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\r\nheader('Content-Type: application/json');\r\nif (!isset($_SESSION['mailcow_cc_role'])) {\r\n  exit();\r\n}\r\nif (isset($_REQUEST['script'])) {\r\n  $sieve = new Sieve\\SieveParser();\r\n  try {\r\n    if (empty($_REQUEST['script'])) {\r\n      echo json_encode(array('type' => 'danger', 'msg' => $lang['danger']['script_empty']));\r\n      exit();\r\n    }\r\n    $sieve->parse($_REQUEST['script']);\r\n  }\r\n  catch (Exception $e) {\r\n    echo json_encode(array('type' => 'danger', 'msg' => $e->getMessage()));\r\n    exit();\r\n  }\r\n  echo json_encode(array('type' => 'success', 'msg' => $lang['add']['validation_success']));\r\n}\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/ajax/syncjob_logs.php",
    "content": "<?php\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\r\nheader('Content-Type: text/plain');\r\nif (!isset($_SESSION['mailcow_cc_role'])) {\r\n\texit();\r\n}\r\n\r\nif (isset($_GET['id']) && is_numeric($_GET['id'])) {\r\n  if ($details = mailbox('get', 'syncjob_details', intval($_GET['id']))) {\r\n    echo (empty($details['log'])) ? '-' : $details['log'];\r\n  }\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/ajax/transport_check.php",
    "content": "<?php\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';\r\nrequire_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';\r\nuse PHPMailer\\PHPMailer\\PHPMailer;\r\nuse PHPMailer\\PHPMailer\\SMTP;\r\nuse PHPMailer\\PHPMailer\\Exception;\r\n\r\nerror_reporting(0);\r\nif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == \"admin\") {\r\n  $transport_id = intval($_GET['transport_id']);\r\n  $transport_type = $_GET['transport_type'];\r\n  if (isset($_GET['mail_from']) && filter_var($_GET['mail_from'], FILTER_VALIDATE_EMAIL)) {\r\n    $mail_from = $_GET['mail_from'];\r\n  }\r\n  else {\r\n    $mail_from = \"relay@example.org\";\r\n  }\r\n  if (isset($_GET['mail_rcpt']) && filter_var($_GET['mail_rcpt'], FILTER_VALIDATE_EMAIL)) {\r\n    $mail_rcpt = $_GET['mail_rcpt'];\r\n  }\r\n  else {\r\n    $mail_rcpt = \"null@hosted.mailcow.de\";\r\n  }\r\n  if ($transport_type == 'transport-map') {\r\n    $transport_details = transport('details', $transport_id);\r\n    $nexthop = $transport_details['nexthop'];\r\n  }\r\n  elseif ($transport_type == 'sender-dependent') {\r\n    $transport_details = relayhost('details', $transport_id);\r\n    $nexthop = $transport_details['hostname'];\r\n  }\r\n  if (!empty($transport_details)) {\r\n    // Remove [ and ]\r\n    $hostname_w_port = preg_replace('/\\[|\\]/', '', $nexthop);\r\n    preg_match('/\\[.+\\](:.+)/', $nexthop, $hostname_port_match);\r\n    preg_match('/\\[\\d\\.\\d\\.\\d\\.\\d\\](:.+)/', $nexthop, $ipv4_port_match);\r\n    $has_bracket_and_port = (isset($hostname_port_match[1])) ? true : false;\r\n    $is_ipv4_and_has_port = (isset($ipv4_port_match[1])) ? true : false;\r\n    $skip_lookup_mx = strpos($nexthop, '[');\r\n    // Explode to hostname and port\r\n    if ($has_bracket_and_port) {\r\n      $port = substr($hostname_w_port, strrpos($hostname_w_port, ':') + 1);\r\n      $hostname = preg_replace('/'. preg_quote(':' . $port, '/') . '$/', '', $hostname_w_port);\r\n      if (filter_var($hostname, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {\r\n        $hostname = '[' . $hostname . ']';\r\n      }\r\n    }\r\n    else {\r\n      if ($is_ipv4_and_has_port) {\r\n        $port = substr($hostname_w_port, strrpos($hostname_w_port, ':') + 1);\r\n        $hostname = preg_replace('/'. preg_quote(':' . $port, '/') . '$/', '', $hostname_w_port);\r\n      }\r\n      if (filter_var($hostname_w_port, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {\r\n        $hostname = $hostname_w_port;\r\n        $port = null;\r\n      }\r\n      elseif (filter_var($hostname_w_port, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {\r\n        $hostname = '[' . $hostname_w_port . ']';\r\n        $port = null;\r\n      }\r\n      else {\r\n        $hostname = preg_replace('/'. preg_quote(':' . $port, '/') . '$/', '', $hostname_w_port);\r\n        $port = null;\r\n      }\r\n    }\r\n    // Try to get MX if host is not [host]\r\n    if ($skip_lookup_mx === false) {\r\n      getmxrr($hostname, $mx_records, $mx_weight);\r\n      if (!empty($mx_records)) {\r\n        for ($i = 0; $i < count($mx_records); $i++) {\r\n          $mxs[$mx_records[$i]] = $mx_weight[$i];\r\n        }\r\n        asort ($mxs);\r\n        $records = array_keys($mxs);\r\n        echo 'Using first matched primary MX for \"' . $hostname . '\": ';\r\n        $hostname = $records[0];\r\n        echo $hostname . '<br>';\r\n      }\r\n      else {\r\n        echo 'No MX records for ' . $hostname . ' were found in DNS, skipping and using hostname as next-hop.<br>';\r\n      }\r\n    }\r\n    // Use port 25 if no port was given\r\n    $port = (empty($port)) ? 25 : $port;\r\n    $username = $transport_details['username'];\r\n    $password = $transport_details['password'];\r\n\r\n    $mail = new PHPMailer;\r\n    $mail->Timeout = 15;\r\n    $mail->SMTPOptions = array(\r\n      'ssl' => array(\r\n        'verify_peer' => false,\r\n        'verify_peer_name' => false,\r\n        'allow_self_signed' => true\r\n      )\r\n    );\r\n    $mail->SMTPDebug = 3;\r\n    // smtp: and smtp_enforced_tls: do not support wrapped tls, todo?\r\n    // change postfix map to detect wrapped tls or add a checkbox to toggle wrapped tls\r\n    // if ($port == 465) {\r\n      // $mail->SMTPSecure = \"ssl\";\r\n    // }\r\n    $mail->Debugoutput = function($str, $level) {\r\n      foreach(preg_split(\"/((\\r?\\n)|(\\r\\n?)|\\n)/\", $str) as $line){\r\n        if (empty($line)) { continue; }\r\n        if (preg_match(\"/SERVER \\-\\> CLIENT: 2\\d\\d.+/i\", $line)) {\r\n          echo '<span style=\"color:darkgreen;font-weight:bold\">' . htmlspecialchars($line) . '</span><br>';\r\n        }\r\n        elseif (preg_match(\"/SERVER \\-\\> CLIENT: 3\\d\\d.+/i\", $line)) {\r\n          echo '<span style=\"color:lightgreen;font-weight:bold\">' . htmlspecialchars($line) . '</span><br>';\r\n        }\r\n        elseif (preg_match(\"/SERVER \\-\\> CLIENT: 4\\d\\d.+/i\", $line)) {\r\n          echo '<span style=\"color:yellow;font-weight:bold\">' . htmlspecialchars($line) . '</span><br>';\r\n        }\r\n        elseif (preg_match(\"/SERVER \\-\\> CLIENT: 5\\d\\d.+/i\", $line)) {\r\n          echo '<span style=\"color:red;font-weight:bold\">' . htmlspecialchars($line) . '</span><br>';\r\n        }\r\n        elseif (preg_match(\"/CLIENT \\-\\> SERVER:.+/i\", $line)) {\r\n          echo '<span style=\"color:#999;font-weight:bold\">' . htmlspecialchars($line) . '</span><br>';\r\n        }\r\n        elseif (preg_match(\"/^(?!SERVER|CLIENT|Connection:|\\)).+$/i\", $line)) {\r\n          echo '<span>&nbsp;&nbsp;&nbsp;&nbsp;↪ ' . htmlspecialchars($line) . '</span><br>';\r\n        }\r\n        else {\r\n          echo htmlspecialchars($line) . '<br>';\r\n        }\r\n      }\r\n    };\r\n    $mail->isSMTP();\r\n    $mail->Host = $hostname;\r\n    if (!empty($username)) {\r\n      $mail->SMTPAuth = true;\r\n      $mail->Username = $username;\r\n      $mail->Password = $password;\r\n    }\r\n    $mail->Port = $port;\r\n    $mail->setFrom($mail_from, 'Mailer');\r\n    $mail->Subject = 'A subject for a SMTP test';\r\n    $mail->addAddress($mail_rcpt, 'Joe Null');\r\n    $mail->Body = 'This is our test body';\r\n    $mail->send();\r\n  }\r\n  else {\r\n    echo \"Unknown transport.\";\r\n  }\r\n}\r\nelse {\r\n  echo \"Permission denied.\";\r\n}\r\n"
  },
  {
    "path": "data/web/inc/footer.inc.php",
    "content": "<?php\nlogger();\n\n$hash = $js_minifier->getDataHash();\n$JSPath = '/tmp/' . $hash . '.js';\nif(!file_exists($JSPath)) {\n  $js_minifier->minify($JSPath);\n  cleanupJS($hash);\n}\n\n$alertbox_log_parser = alertbox_log_parser($_SESSION);\n$alerts = [];\nif (is_array($alertbox_log_parser)) {\n  foreach ($alertbox_log_parser as $log) {\n    $message = htmlspecialchars($log['msg'], ENT_QUOTES);\n    $message = strtr($message, [\"\\n\" => '', \"\\r\" => '', \"\\t\" => '<br>']);\n    $alerts[trim($log['type'], '\"')][] = trim($message, '\"');\n  }\n  $alert = array_filter(array_unique($alerts));\n  foreach($alert as $alert_type => $alert_msg) {\n    // html breaks from mysql alerts, replace ` with '\n    $alerts[$alert_type] = implode('<hr class=\"alert-hr\">', str_replace(\"`\", \"'\", $alert_msg));\n  }\n  unset($_SESSION['return']);\n}\n\n// map tfa details for twig\n$pending_tfa_authmechs = [];\nif (array_key_exists('pending_tfa_methods', $_SESSION)) {\n  foreach($_SESSION['pending_tfa_methods'] as $authdata){\n    $pending_tfa_authmechs[$authdata['authmech']] = false;\n  }\n  if (isset($pending_tfa_authmechs['webauthn'])) {\n    $pending_tfa_authmechs['webauthn'] = true;\n  }\n  if (!isset($pending_tfa_authmechs['webauthn']) \n      && isset($pending_tfa_authmechs['yubi_otp'])) {\n    $pending_tfa_authmechs['yubi_otp'] = true;\n  }\n  if (!isset($pending_tfa_authmechs['webauthn']) \n      && !isset($pending_tfa_authmechs['yubi_otp'])\n      && isset($pending_tfa_authmechs['totp'])) {\n    $pending_tfa_authmechs['totp'] = true;\n  }\n  if (isset($pending_tfa_authmechs['u2f'])) {\n    $pending_tfa_authmechs['u2f'] = true;\n  }\n}\n\n// globals\n$globalVariables = [\n  'mailcow_info' => array(\n    'version_tag' => $GLOBALS['MAILCOW_GIT_VERSION'],\n    'last_version_tag' => $GLOBALS['MAILCOW_LAST_GIT_VERSION'],\n    'git_owner' => $GLOBALS['MAILCOW_GIT_OWNER'],\n    'git_repo' => $GLOBALS['MAILCOW_GIT_REPO'],\n    'git_project_url' => $GLOBALS['MAILCOW_GIT_URL'],\n    'git_commit' => $GLOBALS['MAILCOW_GIT_COMMIT'],\n    'git_commit_date' => $GLOBALS['MAILCOW_GIT_COMMIT_DATE'],\n    'mailcow_branch' => $GLOBALS['MAILCOW_BRANCH'],\n    'updated_at' => $GLOBALS['MAILCOW_UPDATEDAT']\n  ),\n  'js_path' => '/cache/'.basename($JSPath),\n  'pending_tfa_methods' => @$_SESSION['pending_tfa_methods'],\n  'pending_tfa_authmechs' => $pending_tfa_authmechs,\n  'pending_mailcow_cc_username' => @$_SESSION['pending_mailcow_cc_username'],\n  'pending_tfa_setup' => !empty($_SESSION['pending_tfa_setup']),\n  'pending_pw_update_modal' => !empty($_SESSION['pending_pw_update']),\n  'lang_footer' => json_encode($lang['footer']),\n  'lang_acl' => json_encode($lang['acl']),\n  'lang_tfa' => json_encode($lang['tfa']),\n  'lang_fido2' => json_encode($lang['fido2']),\n  'lang_success' => json_encode($lang['success']),\n  'lang_danger' => json_encode($lang['danger']),\n  'docker_timeout' => $DOCKER_TIMEOUT,\n  'session_lifetime' => (int)$SESSION_LIFETIME,\n  'csrf_token' => $_SESSION['CSRF']['TOKEN'],\n  'pagination_size' => $PAGINATION_SIZE,\n  'log_pagination_size' => $LOG_PAGINATION_SIZE,\n  'alerts' => $alerts,\n  'totp_secret' => $tfa->createSecret(),\n];\n\nforeach ($globalVariables as $globalVariableName => $globalVariableValue) {\n  $twig->addGlobal($globalVariableName, $globalVariableValue);\n}\n\nif (is_array($template_data)) {\n  echo $twig->render($template, $template_data);\n}\n\nif (isset($_SESSION['mailcow_cc_api'])) {\n  session_regenerate_id(true);\n  session_unset();\n  session_destroy();\n  session_write_close();\n  header(\"Location: /\");\n}\n$stmt = null;\n$pdo = null;\n"
  },
  {
    "path": "data/web/inc/functions.acl.inc.php",
    "content": "<?php\r\nfunction acl($_action, $_scope = null, $_data = null, $_extra = null) {\r\n  global $pdo;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'edit':\r\n      switch ($_scope) {\r\n        case 'user':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          foreach ($usernames as $username) {\r\n            // Cast to array for single selections\r\n            $acls = (array)$_data['user_acl'];\r\n            // Create associative array from index array\r\n            // All set items are given 1 as value\r\n            foreach ($acls as $acl_key => $acl_val) {\r\n              $acl_post[$acl_val] = 1;\r\n            }\r\n            // Users cannot change their own ACL\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)\r\n              || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin' && $_SESSION['access_all_exception'] != '1')) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            // Read all available acl options by calling acl(get)\r\n            // Set all available acl options we cannot find in the post data to 0, else 1\r\n            $is_now = acl('get', 'user', $username, $_extra);\r\n            if (!empty($is_now)) {\r\n              foreach ($is_now as $acl_now_name => $acl_now_val) {\r\n                $set_acls[$acl_now_name] = (isset($acl_post[$acl_now_name])) ? 1 : 0;\r\n              }\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'Cannot determine current ACL'\r\n              );\r\n              continue;\r\n            }\r\n            foreach ($set_acls as $set_acl_key => $set_acl_val) {\r\n              $stmt = $pdo->prepare(\"UPDATE `user_acl` SET \" . $set_acl_key . \" = \" . intval($set_acl_val) . \"\r\n                WHERE `username` = :username\");\r\n              $stmt->execute(array(\r\n                ':username' => $username,\r\n              ));\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('acl_saved', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'domainadmin':\r\n          if ($_SESSION['mailcow_cc_role'] != 'admin') {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          foreach ($usernames as $username) {\r\n            // Cast to array for single selections\r\n            $acls = (array)$_data['da_acl'];\r\n            // Create associative array from index array\r\n            // All set items are given 1 as value\r\n            foreach ($acls as $acl_key => $acl_val) {\r\n              $acl_post[$acl_val] = 1;\r\n            }\r\n            // Users cannot change their own ACL\r\n            if ($_SESSION['mailcow_cc_role'] != 'admin') {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            // Read all available acl options by calling acl(get)\r\n            // Set all available acl options we cannot find in the post data to 0, else 1\r\n            $is_now = acl('get', 'domainadmin', $username);\r\n            if (!empty($is_now)) {\r\n              foreach ($is_now as $acl_now_name => $acl_now_val) {\r\n                $set_acls[$acl_now_name] = (isset($acl_post[$acl_now_name])) ? 1 : 0;\r\n              }\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'Cannot determine current ACL'\r\n              );\r\n              continue;\r\n            }\r\n            foreach ($set_acls as $set_acl_key => $set_acl_val) {\r\n              $stmt = $pdo->prepare(\"UPDATE `da_acl` SET \" . $set_acl_key . \" = \" . intval($set_acl_val) . \"\r\n                WHERE `username` = :username\");\r\n              $stmt->execute(array(\r\n                ':username' => $username,\r\n              ));\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('acl_saved', $username)\r\n            );\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'get':\r\n      switch ($_scope) {\r\n        case 'user':\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT * FROM `user_acl` WHERE `username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if ($_SESSION['mailcow_cc_role'] == 'domainadmin') {\r\n            // Domain admins cannot see, add or remove user ACLs they don't have access to by themselves\r\n            // Editing a user will use acl(\"get\", \"user\") to determine granted ACLs and therefore block unallowed access escalation via form editing\r\n            $self_da_acl = acl('get', 'domainadmin', $_SESSION['mailcow_cc_username']);\r\n            foreach ($self_da_acl as $self_da_acl_key => $self_da_acl_val) {\r\n              if ($self_da_acl_val == 0) {\r\n                unset($data[$self_da_acl_key]);\r\n              }\r\n            }\r\n          }\r\n          if (!empty($data)) {\r\n            unset($data['username']);\r\n            return $data;\r\n          }\r\n          else {\r\n            return false;\r\n          }\r\n        break;\r\n        case 'domainadmin':\r\n          if ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin') {\r\n            return false;\r\n          }\r\n          if ($_SESSION['mailcow_cc_role'] == 'domainadmin' && $_SESSION['mailcow_cc_username'] != $_data) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT * FROM `da_acl` WHERE `username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!empty($data)) {\r\n            unset($data['username']);\r\n            return $data;\r\n          }\r\n          else {\r\n            return false;\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'to_session':\r\n      if (!isset($_SESSION['mailcow_cc_role'])) {\r\n        return false;\r\n      }\r\n      unset($_SESSION['acl']);\r\n      $username = strtolower(trim($_SESSION['mailcow_cc_username']));\r\n      // Admins get access to all modules\r\n      if ($_SESSION['mailcow_cc_role'] == 'admin' ||\r\n        (isset($_SESSION[\"dual-login\"][\"role\"]) && $_SESSION[\"dual-login\"][\"role\"] == 'admin')) {\r\n        $stmt = $pdo->query(\"SHOW COLUMNS FROM `user_acl` WHERE `Field` != 'username';\");\r\n        $acl_all = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n        while ($row = array_shift($acl_all)) {\r\n          $acl['acl'][$row['Field']] = 1;\r\n        }\r\n        $stmt = $pdo->query(\"SHOW COLUMNS FROM `da_acl` WHERE `Field` != 'username';\");\r\n        $acl_all = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n        while ($row = array_shift($acl_all)) {\r\n          $acl['acl'][$row['Field']] = 1;\r\n        }\r\n      }\r\n      elseif ($_SESSION['mailcow_cc_role'] == 'domainadmin' ||\r\n        (isset($_SESSION[\"dual-login\"][\"role\"]) && $_SESSION[\"dual-login\"][\"role\"] == 'domainadmin')) {\r\n        // Read all exting user_acl modules and set to 1\r\n        $stmt = $pdo->query(\"SHOW COLUMNS FROM `user_acl` WHERE `Field` != 'username';\");\r\n        $acl_all = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n        while ($row = array_shift($acl_all)) {\r\n          $acl['acl'][$row['Field']] = 1;\r\n        }\r\n        // Read da_acl rules for current user, OVERWRITE overlapping modules\r\n        // This prevents access to a users sync jobs, when a domain admins was not given access to sync jobs\r\n        $stmt = $pdo->prepare(\"SELECT * FROM `da_acl` WHERE `username` = :username\");\r\n        $stmt->execute(array(':username' => (isset($_SESSION[\"dual-login\"][\"username\"])) ? $_SESSION[\"dual-login\"][\"username\"] : $username));\r\n        $acl_user = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        foreach ($acl_user as $acl_user_key => $acl_user_val) {\r\n          $acl['acl'][$acl_user_key] = $acl_user_val;\r\n        }\r\n        unset($acl['acl']['username']);\r\n      }\r\n      elseif ($_SESSION['mailcow_cc_role'] == 'user') {\r\n        $stmt = $pdo->prepare(\"SELECT * FROM `user_acl` WHERE `username` = :username\");\r\n        $stmt->execute(array(':username' => $username));\r\n        $acl['acl'] = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        unset($acl['acl']['username']);\r\n      }\r\n      if (!empty($acl)) {\r\n        $_SESSION = array_merge($_SESSION, $acl);\r\n      }\r\n    break;\r\n  }\r\n}"
  },
  {
    "path": "data/web/inc/functions.address_rewriting.inc.php",
    "content": "<?php\r\nfunction bcc($_action, $_data = null, $_attr = null) {\r\n\tglobal $pdo;\r\n\tglobal $lang;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\r\n    return false;\r\n  }\r\n  switch ($_action) {\r\n    case 'add':\r\n      if (!isset($_SESSION['acl']['bcc_maps']) || $_SESSION['acl']['bcc_maps'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $local_dest = strtolower(trim($_data['local_dest']));\r\n      $bcc_dest = $_data['bcc_dest'];\r\n      $active = intval($_data['active']);\r\n      $type = $_data['type'];\r\n      if ($type != 'sender' && $type != 'rcpt') {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => 'invalid_bcc_map_type'\r\n        );\r\n        return false;\r\n      }\r\n      if (empty($bcc_dest)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => 'bcc_empty'\r\n        );\r\n        return false;\r\n      }\r\n      if (is_valid_domain_name($local_dest)) {\r\n        if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $local_dest)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'access_denied'\r\n          );\r\n          return false;\r\n        }\r\n        $domain = idn_to_ascii($local_dest, 0, INTL_IDNA_VARIANT_UTS46);\r\n        $local_dest_sane = '@' . idn_to_ascii($local_dest, 0, INTL_IDNA_VARIANT_UTS46);\r\n      }\r\n      elseif (filter_var($local_dest, FILTER_VALIDATE_EMAIL)) {\r\n        $mailbox = mailbox('get', 'mailbox_details', $local_dest);\r\n        $shared_aliases = mailbox('get', 'shared_aliases');\r\n        $direct_aliases = mailbox('get', 'direct_aliases');\r\n        if ($mailbox === false && in_array($local_dest, array_merge($direct_aliases, $shared_aliases)) === false) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'access_denied'\r\n          );\r\n          return false;\r\n        }\r\n        if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $local_dest) &&\r\n          !hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $local_dest)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n        }\r\n        $domain = idn_to_ascii(substr(strstr($local_dest, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);\r\n        $local_dest_sane = $local_dest;\r\n      }\r\n      else {\r\n        return false;\r\n      }\r\n      if (!filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('bcc_must_be_email', htmlspecialchars($bcc_dest))\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->prepare(\"SELECT `id` FROM `bcc_maps`\r\n        WHERE `local_dest` = :local_dest AND `type` = :type\");\r\n      $stmt->execute(array(':local_dest' => $local_dest_sane, ':type' => $type));\r\n      $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n\r\n      if ($num_results != 0) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('bcc_exists', htmlspecialchars($local_dest_sane), $type)\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"INSERT INTO `bcc_maps` (`local_dest`, `bcc_dest`, `domain`, `active`, `type`) VALUES\r\n        (:local_dest, :bcc_dest, :domain, :active, :type)\");\r\n      $stmt->execute(array(\r\n        ':local_dest' => $local_dest_sane,\r\n        ':bcc_dest' => $bcc_dest,\r\n        ':domain' => $domain,\r\n        ':active' => $active,\r\n        ':type' => $type\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n        'msg' => 'bcc_saved'\r\n      );\r\n    break;\r\n    case 'edit':\r\n      if (!isset($_SESSION['acl']['bcc_maps']) || $_SESSION['acl']['bcc_maps'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = bcc('details', $id);\r\n        if (!empty($is_now)) {\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n          $bcc_dest = (!empty($_data['bcc_dest'])) ? $_data['bcc_dest'] : $is_now['bcc_dest'];\r\n          $local_dest = $is_now['local_dest'];\r\n          $type = (!empty($_data['type'])) ? $_data['type'] : $is_now['type'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        if (!filter_var($bcc_dest, FILTER_VALIDATE_EMAIL)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('bcc_must_be_email', $bcc_dest)\r\n          );\r\n          continue;\r\n        }\r\n        if (empty($bcc_dest)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('bcc_must_be_email', $bcc_dest)\r\n          );\r\n          continue;\r\n        }\r\n        $stmt = $pdo->prepare(\"SELECT `id` FROM `bcc_maps`\r\n          WHERE `local_dest` = :local_dest AND `type` = :type\");\r\n        $stmt->execute(array(':local_dest' => $local_dest, ':type' => $type));\r\n        $id_now = $stmt->fetch(PDO::FETCH_ASSOC)['id'];\r\n\r\n        if (isset($id_now) && $id_now != $id) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('bcc_exists', htmlspecialchars($local_dest), $type)\r\n          );\r\n          continue;\r\n        }\r\n\r\n        $stmt = $pdo->prepare(\"UPDATE `bcc_maps` SET `bcc_dest` = :bcc_dest, `active` = :active, `type` = :type WHERE `id`= :id\");\r\n        $stmt->execute(array(\r\n          ':bcc_dest' => $bcc_dest,\r\n          ':active' => $active,\r\n          ':type' => $type,\r\n          ':id' => $id\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('bcc_edited', $bcc_dest)\r\n        );\r\n      }\r\n    break;\r\n    case 'details':\r\n      $bccdata = array();\r\n      $id = intval($_data);\r\n\r\n      $stmt = $pdo->prepare(\"SELECT `id`,\r\n        `local_dest`,\r\n        `bcc_dest`,\r\n        `active`,\r\n        `type`,\r\n        `created`,\r\n        `domain`,\r\n        `modified` FROM `bcc_maps`\r\n          WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $id));\r\n      $bccdata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n      if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $bccdata['domain'])) {\r\n        $bccdata = null;\r\n        return false;\r\n      }\r\n      return $bccdata;\r\n    break;\r\n    case 'get':\r\n      $bccdata = array();\r\n      $all_items = array();\r\n      $id = intval($_data);\r\n\r\n      $stmt = $pdo->query(\"SELECT `id`, `domain` FROM `bcc_maps`\");\r\n      $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n      foreach ($all_items as $i) {\r\n        if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $i['domain'])) {\r\n          $bccdata[] = $i['id'];\r\n        }\r\n      }\r\n      $all_items = null;\r\n      return $bccdata;\r\n    break;\r\n    case 'delete':\r\n      if (!isset($_SESSION['acl']['bcc_maps']) || $_SESSION['acl']['bcc_maps'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        if (!is_numeric($id)) {\r\n          return false;\r\n        }\r\n        $stmt = $pdo->prepare(\"SELECT `domain` FROM `bcc_maps` WHERE id = :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n        $domain = $stmt->fetch(PDO::FETCH_ASSOC)['domain'];\r\n        if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        $stmt = $pdo->prepare(\"DELETE FROM `bcc_maps` WHERE `id`= :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('bcc_deleted', $id)\r\n        );\r\n      }\r\n    break;\r\n  }\r\n}\r\n\r\nfunction recipient_map($_action, $_data = null, $attr = null) {\r\n\tglobal $pdo;\r\n\tglobal $lang;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    return false;\r\n  }\r\n  switch ($_action) {\r\n    case 'add':\r\n      $old_dest = strtolower(trim($_data['recipient_map_old']));\r\n      if (substr($old_dest, 0, 1) == '@') {\r\n        $old_dest = substr($old_dest, 1);\r\n      }\r\n      $new_dest = strtolower(trim($_data['recipient_map_new']));\r\n      if (substr($new_dest, 0, 1) == '@') {\r\n        $new_dest = substr($new_dest, 1);\r\n      }\r\n      $active = intval($_data['active']);\r\n      if (is_valid_domain_name($old_dest)) {\r\n        $old_dest_sane = '@' . idn_to_ascii($old_dest, 0, INTL_IDNA_VARIANT_UTS46);\r\n      }\r\n      elseif (filter_var($old_dest, FILTER_VALIDATE_EMAIL)) {\r\n        $old_dest_sane = $old_dest;\r\n      }\r\n      else {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('invalid_recipient_map_old', htmlspecialchars($old_dest))\r\n        );\r\n        return false;\r\n      }\r\n      if (is_valid_domain_name($new_dest)) {\r\n        $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46);\r\n      }\r\n      elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) {\r\n        $new_dest_sane = $new_dest;\r\n      }\r\n      else {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('invalid_recipient_map_new', htmlspecialchars($new_dest))\r\n        );\r\n        return false;\r\n      }\r\n      $rmaps = recipient_map('get');\r\n      foreach ($rmaps as $rmap) {\r\n        if (recipient_map('details', $rmap)['recipient_map_old'] == $old_dest_sane) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('recipient_map_entry_exists', htmlspecialchars($old_dest_sane))\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      $stmt = $pdo->prepare(\"INSERT INTO `recipient_maps` (`old_dest`, `new_dest`, `active`) VALUES\r\n        (:old_dest, :new_dest, :active)\");\r\n      $stmt->execute(array(\r\n        ':old_dest' => $old_dest_sane,\r\n        ':new_dest' => $new_dest_sane,\r\n        ':active' => $active\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n        'msg' => array('recipient_map_entry_saved', htmlspecialchars($old_dest_sane))\r\n      );\r\n    break;\r\n    case 'edit':\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = recipient_map('details', $id);\r\n        if (!empty($is_now)) {\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n          $new_dest = (!empty($_data['recipient_map_new'])) ? $_data['recipient_map_new'] : $is_now['recipient_map_new'];\r\n          $old_dest = (!empty($_data['recipient_map_old'])) ? $_data['recipient_map_old'] : $is_now['recipient_map_old'];\r\n          if (substr($new_dest, 0, 1) == '@') {\r\n            $new_dest = substr($new_dest, 1);\r\n          }\r\n          if (substr($old_dest, 0, 1) == '@') {\r\n            $old_dest = substr($old_dest, 1);\r\n          }\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        if (is_valid_domain_name($old_dest)) {\r\n          $old_dest_sane = '@' . idn_to_ascii($old_dest, 0, INTL_IDNA_VARIANT_UTS46);\r\n        }\r\n        elseif (filter_var($old_dest, FILTER_VALIDATE_EMAIL)) {\r\n          $old_dest_sane = $old_dest;\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('invalid_recipient_map_old', htmlspecialchars($old_dest))\r\n          );\r\n          continue;\r\n        }\r\n        if (is_valid_domain_name($new_dest)) {\r\n          $new_dest_sane = '@' . idn_to_ascii($new_dest, 0, INTL_IDNA_VARIANT_UTS46);\r\n        }\r\n        elseif (filter_var($new_dest, FILTER_VALIDATE_EMAIL)) {\r\n          $new_dest_sane = $new_dest;\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('invalid_recipient_map_new', htmlspecialchars($new_dest))\r\n          );\r\n          continue;\r\n        }\r\n        $rmaps = recipient_map('get');\r\n        foreach ($rmaps as $rmap) {\r\n          if ($rmap == $id) { continue; }\r\n          if (recipient_map('details', $rmap)['recipient_map_old'] == $old_dest_sane) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n              'msg' => array('recipient_map_entry_exists', htmlspecialchars($old_dest_sane))\r\n            );\r\n            return false;\r\n          }\r\n        }\r\n        $stmt = $pdo->prepare(\"UPDATE `recipient_maps` SET\r\n          `old_dest` = :old_dest,\r\n          `new_dest` = :new_dest,\r\n          `active` = :active\r\n            WHERE `id`= :id\");\r\n        $stmt->execute(array(\r\n          ':old_dest' => $old_dest_sane,\r\n          ':new_dest' => $new_dest_sane,\r\n          ':active' => $active,\r\n          ':id' => $id\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('recipient_map_entry_saved', htmlspecialchars($old_dest_sane))\r\n        );\r\n      }\r\n    break;\r\n    case 'details':\r\n      $mapdata = array();\r\n      $id = intval($_data);\r\n\r\n      $stmt = $pdo->prepare(\"SELECT `id`,\r\n        `old_dest` AS `recipient_map_old`,\r\n        `new_dest` AS `recipient_map_new`,\r\n        `active`,\r\n        `created`,\r\n        `modified` FROM `recipient_maps`\r\n          WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $id));\r\n      $mapdata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n      return $mapdata;\r\n    break;\r\n    case 'get':\r\n      $mapdata = array();\r\n      $all_items = array();\r\n      $id = intval($_data);\r\n\r\n      $stmt = $pdo->query(\"SELECT `id` FROM `recipient_maps`\");\r\n      $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n      foreach ($all_items as $i) {\r\n        $mapdata[] = $i['id'];\r\n      }\r\n      $all_items = null;\r\n      return $mapdata;\r\n    break;\r\n    case 'delete':\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        if (!is_numeric($id)) {\r\n          return false;\r\n        }\r\n        $stmt = $pdo->prepare(\"DELETE FROM `recipient_maps` WHERE `id`= :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('recipient_map_entry_deleted', htmlspecialchars($id))\r\n        );\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.admin.inc.php",
    "content": "<?php\r\nfunction admin($_action, $_data = null) {\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_data_log),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  global $pdo;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  !isset($_data_log['password']) ?: $_data_log['password'] = '*';\r\n  !isset($_data_log['password2']) ?: $_data_log['password2'] = '*';\r\n  switch ($_action) {\r\n    case 'add':\r\n      $username   = strtolower(trim($_data['username']));\r\n      $password   = $_data['password'];\r\n      $password2  = $_data['password2'];\r\n      $active     = intval($_data['active']);\r\n      if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username)) || empty ($username) || $username == 'API') {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('username_invalid', $username)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `admin`\r\n        WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n\r\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `domain_admins`\r\n        WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n\r\n      foreach ($num_results as $num_results_each) {\r\n        if ($num_results_each != 0) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('object_exists', htmlspecialchars($username))\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      if (password_check($password, $password2) !== true) {\r\n        return false;\r\n      }\r\n      $password_hashed = hash_password($password);\r\n      $stmt = $pdo->prepare(\"INSERT INTO `admin` (`username`, `password`, `superadmin`, `active`)\r\n        VALUES (:username, :password_hashed, '1', :active)\");\r\n      $stmt->execute(array(\r\n        ':username' => $username,\r\n        ':password_hashed' => $password_hashed,\r\n        ':active' => $active\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => array('admin_added', htmlspecialchars($username))\r\n      );\r\n    break;\r\n    case 'edit':\r\n      if (!is_array($_data['username'])) {\r\n        $usernames = array();\r\n        $usernames[] = $_data['username'];\r\n      }\r\n      else {\r\n        $usernames = $_data['username'];\r\n      }\r\n      foreach ($usernames as $username) {\r\n        $is_now = admin('details', $username);\r\n        if (!empty($is_now)) {\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n          $username_new = (!empty($_data['username_new'])) ? $_data['username_new'] : $is_now['username'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        $password     = $_data['password'];\r\n        $password2    = $_data['password2'];\r\n        if ($active == 0) {\r\n          $left_active = 0;\r\n          foreach (admin('get') as $admin) {\r\n            $left_active = $left_active + admin('details', $admin)['active'];\r\n          }\r\n          if ($left_active == 1) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'warning',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => 'no_active_admin'\r\n            );\r\n            continue;\r\n          }\r\n        }\r\n        if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username_new))) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('username_invalid', $username_new)\r\n          );\r\n          continue;\r\n        }\r\n        if ($username_new != $username) {\r\n          if (!empty(admin('details', $username_new)['username'])) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('username_invalid', $username_new)\r\n            );\r\n            continue;\r\n          }\r\n        }\r\n        // Check if this is a self password change via forced update\r\n        if ($username == $_SESSION['mailcow_cc_username'] && !empty($_SESSION['pending_pw_update'])) {\r\n          // Forced password update: only change password and clear force_pw_update flag\r\n          if (!empty($password)) {\r\n            if (password_check($password, $_data['password2']) !== true) {\r\n              return false;\r\n            }\r\n            $password_hashed = hash_password($password);\r\n            $stmt = $pdo->prepare(\"UPDATE `admin` SET `password` = :password_hashed,\r\n              `attributes` = JSON_SET(COALESCE(`attributes`, '{}'), '$.force_pw_update', '0')\r\n              WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':password_hashed' => $password_hashed,\r\n              ':username' => $username\r\n            ));\r\n            unset($_SESSION['pending_pw_update']);\r\n          }\r\n        } else {\r\n          // Normal admin edit: update all attributes\r\n          $force_tfa = intval($_data['force_tfa'] ?? 0) ? 1 : 0;\r\n          $force_pw_update = intval($_data['force_pw_update'] ?? 0) ? 1 : 0;\r\n          if (!empty($password)) {\r\n            if (password_check($password, $password2) !== true) {\r\n              return false;\r\n            }\r\n            $password_hashed = hash_password($password);\r\n            $stmt = $pdo->prepare(\"UPDATE `admin` SET `username` = :username_new, `active` = :active, `password` = :password_hashed,\r\n              `attributes` = JSON_SET(COALESCE(`attributes`, '{}'), '$.force_tfa', :force_tfa, '$.force_pw_update', :force_pw_update)\r\n              WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':password_hashed' => $password_hashed,\r\n              ':username_new' => $username_new,\r\n              ':username' => $username,\r\n              ':active' => $active,\r\n              ':force_tfa' => strval($force_tfa),\r\n              ':force_pw_update' => strval($force_pw_update)\r\n            ));\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"UPDATE `admin` SET `username` = :username_new, `active` = :active,\r\n              `attributes` = JSON_SET(COALESCE(`attributes`, '{}'), '$.force_tfa', :force_tfa, '$.force_pw_update', :force_pw_update)\r\n              WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username_new' => $username_new,\r\n              ':username' => $username,\r\n              ':active' => $active,\r\n              ':force_tfa' => strval($force_tfa),\r\n              ':force_pw_update' => strval($force_pw_update)\r\n            ));\r\n          }\r\n          if (isset($_data['disable_tfa'])) {\r\n            $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active` = '0' WHERE `username` = :username\");\r\n            $stmt->execute(array(':username' => $username));\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username\");\r\n            $stmt->execute(array(':username_new' => $username_new, ':username' => $username));\r\n          }\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('admin_modified', htmlspecialchars($username))\r\n        );\r\n      }\r\n      return true;\r\n    break;\r\n    case 'delete':\r\n      $usernames = (array)$_data['username'];\r\n      foreach ($usernames as $username) {\r\n        if ($_SESSION['mailcow_cc_username'] == $username) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'warning',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'cannot_delete_self'\r\n          );\r\n          continue;\r\n        }\r\n        if (empty(admin('details', $username))) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('username_invalid', $username)\r\n          );\r\n          continue;\r\n        }\r\n        $stmt = $pdo->prepare(\"DELETE FROM `admin` WHERE `username` = :username\");\r\n        $stmt->execute(array(\r\n          ':username' => $username,\r\n        ));\r\n        $stmt = $pdo->prepare(\"DELETE FROM `domain_admins` WHERE `username` = :username\");\r\n        $stmt->execute(array(\r\n          ':username' => $username,\r\n        ));\r\n        $stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `username` = :username\");\r\n        $stmt->execute(array(\r\n          ':username' => $username,\r\n        ));\r\n        $stmt = $pdo->prepare(\"DELETE FROM `fido2` WHERE `username` = :username\");\r\n        $stmt->execute(array(\r\n          ':username' => $username,\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('admin_removed', htmlspecialchars($username))\r\n        );\r\n      }\r\n    break;\r\n    case 'get':\r\n      $admins = array();\r\n      $stmt = $pdo->query(\"SELECT `username` FROM `admin` WHERE `superadmin` = '1'\");\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      while ($row = array_shift($rows)) {\r\n        $admins[] = $row['username'];\r\n      }\r\n      return $admins;\r\n    break;\r\n    case 'details':\r\n      $admindata = array();\r\n      $stmt = $pdo->prepare(\"SELECT\r\n        `tfa`.`active` AS `tfa_active`,\r\n        `admin`.`username`,\r\n        `admin`.`created`,\r\n        `admin`.`active` AS `active`,\r\n        `admin`.`attributes` AS `attributes`\r\n          FROM `admin`\r\n          LEFT OUTER JOIN `tfa` ON `tfa`.`username`=`admin`.`username`\r\n            WHERE `admin`.`username`= :admin AND `superadmin` = '1'\");\r\n      $stmt->execute(array(\r\n        ':admin' => $_data\r\n      ));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (empty($row)) {\r\n        return false;\r\n      }\r\n      $admindata['username'] = $row['username'];\r\n      $admindata['tfa_active'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];\r\n      $admindata['tfa_active_int'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];\r\n      $admindata['active'] = $row['active'];\r\n      $admindata['active_int'] = $row['active'];\r\n      $admindata['created'] = $row['created'];\r\n      $admindata['attributes'] = json_decode($row['attributes'], true) ?? array('force_tfa' => '0', 'force_pw_update' => '0');\r\n      return $admindata;\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.app_passwd.inc.php",
    "content": "<?php\r\nfunction app_passwd($_action, $_data = null) {\r\n  global $pdo;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  !isset($_data_log['app_passwd']) ?: $_data_log['app_passwd'] = '*';\r\n  !isset($_data_log['app_passwd2']) ?: $_data_log['app_passwd2'] = '*';\r\n  if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {\r\n    if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => 'access_denied'\r\n      );\r\n      return false;\r\n    }\r\n    else {\r\n      $username = $_data['username'];\r\n    }\r\n  }\r\n  else {\r\n    $username = $_SESSION['mailcow_cc_username'];\r\n  }\r\n  switch ($_action) {\r\n    case 'add':\r\n      $app_name = htmlspecialchars(trim($_data['app_name']));\r\n      $password = $_data['app_passwd'];\r\n      $password2 = $_data['app_passwd2'];\r\n      $active = intval($_data['active']);\r\n      $protocols = (array)$_data['protocols'];\r\n      $imap_access = (in_array('imap_access', $protocols)) ? 1 : 0;\r\n      $dav_access = (in_array('dav_access', $protocols)) ? 1 : 0;\r\n      $smtp_access = (in_array('smtp_access', $protocols)) ? 1 : 0;\r\n      $eas_access = (in_array('eas_access', $protocols)) ? 1 : 0;\r\n      $pop3_access = (in_array('pop3_access', $protocols)) ? 1 : 0;\r\n      $sieve_access = (in_array('sieve_access', $protocols)) ? 1 : 0;\r\n      $domain = mailbox('get', 'mailbox_details', $username)['domain'];\r\n      if (empty($domain)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      if (password_check($password, $password2) !== true) {\r\n        return false;\r\n      }\r\n      $password_hashed = hash_password($password);\r\n      if (empty($app_name)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'app_name_empty'\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"INSERT INTO `app_passwd` (`name`, `mailbox`, `domain`, `password`, `imap_access`, `smtp_access`, `eas_access`, `dav_access`, `pop3_access`, `sieve_access`, `active`)\r\n        VALUES (:app_name, :mailbox, :domain, :password, :imap_access, :smtp_access, :eas_access, :dav_access, :pop3_access, :sieve_access, :active)\");\r\n      $stmt->execute(array(\r\n        ':app_name' => $app_name,\r\n        ':mailbox' => $username,\r\n        ':domain' => $domain,\r\n        ':password' => $password_hashed,\r\n        ':imap_access' => $imap_access,\r\n        ':smtp_access' => $smtp_access,\r\n        ':eas_access' => $eas_access,\r\n        ':dav_access' => $dav_access,\r\n        ':pop3_access' => $pop3_access,\r\n        ':sieve_access' => $sieve_access,\r\n        ':active' => $active\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => 'app_passwd_added'\r\n      );\r\n      break;\r\n    case 'edit':\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = app_passwd('details', $id);\r\n        if (!empty($is_now)) {\r\n          $app_name = (!empty($_data['app_name'])) ? $_data['app_name'] : $is_now['name'];\r\n          $password = (!empty($_data['app_passwd'])) ? $_data['app_passwd'] : null;\r\n          $password2 = (!empty($_data['app_passwd2'])) ? $_data['app_passwd2'] : null;\r\n          if (isset($_data['protocols'])) {\r\n            $protocols = (array)$_data['protocols'];\r\n            $imap_access = (in_array('imap_access', $protocols)) ? 1 : 0;\r\n            $dav_access = (in_array('dav_access', $protocols)) ? 1 : 0;\r\n            $smtp_access = (in_array('smtp_access', $protocols)) ? 1 : 0;\r\n            $eas_access = (in_array('eas_access', $protocols)) ? 1 : 0;\r\n            $pop3_access = (in_array('pop3_access', $protocols)) ? 1 : 0;\r\n            $sieve_access = (in_array('sieve_access', $protocols)) ? 1 : 0;\r\n          }\r\n          else {\r\n            $imap_access = $is_now['imap_access'];\r\n            $smtp_access = $is_now['smtp_access'];\r\n            $dav_access = $is_now['dav_access'];\r\n            $eas_access = $is_now['eas_access'];\r\n            $pop3_access = $is_now['pop3_access'];\r\n            $sieve_access = $is_now['sieve_access'];\r\n          }\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('app_passwd_id_invalid', $id)\r\n          );\r\n          continue;\r\n        }\r\n        $app_name = htmlspecialchars(trim($app_name));\r\n        if (!empty($password) && !empty($password2)) {\r\n          if (password_check($password, $password2) !== true) {\r\n            continue;\r\n          }\r\n          $password_hashed = hash_password($password);\r\n          $stmt = $pdo->prepare(\"UPDATE `app_passwd` SET\r\n              `password` = :password_hashed\r\n                WHERE `mailbox` = :username AND `id` = :id\");\r\n          $stmt->execute(array(\r\n            ':password_hashed' => $password_hashed,\r\n            ':username' => $username,\r\n            ':id' => $id\r\n          ));\r\n        }\r\n\r\n        $stmt = $pdo->prepare(\"UPDATE `app_passwd` SET\r\n          `name` = :app_name,\r\n          `mailbox` = :username,\r\n          `imap_access` = :imap_access,\r\n          `smtp_access` = :smtp_access,\r\n          `eas_access` = :eas_access,\r\n          `dav_access` = :dav_access,\r\n          `pop3_access` = :pop3_access,\r\n          `sieve_access` = :sieve_access,\r\n          `active` = :active\r\n            WHERE `id` = :id\");\r\n        $stmt->execute(array(\r\n          ':app_name' => $app_name,\r\n          ':username' => $username,\r\n          ':imap_access' => $imap_access,\r\n          ':smtp_access' => $smtp_access,\r\n          ':eas_access' => $eas_access,\r\n          ':dav_access' => $dav_access,\r\n          ':pop3_access' => $pop3_access,\r\n          ':sieve_access' => $sieve_access,\r\n          ':active' => $active,\r\n          ':id' => $id\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('object_modified', htmlspecialchars(implode(', ', $ids)))\r\n        );\r\n      }\r\n      break;\r\n    case 'delete':\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $stmt = $pdo->prepare(\"SELECT `mailbox` FROM `app_passwd` WHERE `id` = :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n        $mailbox = $stmt->fetch(PDO::FETCH_ASSOC)['mailbox'];\r\n        if (empty($mailbox)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'app_passwd_id_invalid'\r\n          );\r\n          return false;\r\n        }\r\n        if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $mailbox)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          );\r\n          return false;\r\n        }\r\n        $stmt = $pdo->prepare(\"DELETE FROM `app_passwd` WHERE `id`= :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('app_passwd_removed', htmlspecialchars($id))\r\n        );\r\n      }\r\n      break;\r\n    case 'get':\r\n      $app_passwds = array();\r\n      $stmt = $pdo->prepare(\"SELECT `id`, `name` FROM `app_passwd` WHERE `mailbox` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $app_passwds = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      return $app_passwds;\r\n      break;\r\n    case 'details':\r\n      $app_passwd_data = array();\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `app_passwd` WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $_data));\r\n      $app_passwd_data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (empty($app_passwd_data)) {\r\n        return false;\r\n      }\r\n      if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $app_passwd_data['mailbox'])) {\r\n        $app_passwd_data = array();\r\n        return false;\r\n      }\r\n      $app_passwd_data['name'] = htmlspecialchars(trim($app_passwd_data['name']));\r\n      return $app_passwd_data;\r\n      break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.auth.inc.php",
    "content": "<?php\nfunction check_login($user, $pass, $extra = null) {\n  global $pdo;\n  global $redis;\n\n  $is_internal = $extra['is_internal'];\n  $role = $extra['role'];\n  $extra['service'] = !isset($extra['service']) ? 'NONE' : $extra['service'];\n\n  // Try validate admin\n  if (!isset($role) || $role == \"admin\") {\n    $result = admin_login($user, $pass);\n    if ($result !== false){\n      return $result;\n    }\n  }\n\n  // Try validate domain admin\n  if (!isset($role) || $role == \"domain_admin\") {\n    $result = domainadmin_login($user, $pass);\n    if ($result !== false) {\n      return $result;\n    }\n  }\n\n\n  // Try validate app password\n  if (!isset($role) || $role == \"app\") {\n    $result = apppass_login($user, $pass, $extra);\n    if ($result !== false) {\n      $real_rip = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);\n      set_sasl_log($user, $real_rip, $extra['service'], $pass);\n      return $result;\n    }\n  }\n\n  // Try validate user\n  if (!isset($role) || $role == \"user\") {\n    $result = user_login($user, $pass, $extra);\n    if ($result !== false) {\n      $real_rip = ($_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR']);\n      set_sasl_log($user, $real_rip, $extra['service']);\n      return $result;\n    }\n  }\n\n  // skip log and only return false if it's an internal request\n  if ($is_internal == true) return false;\n\n  if (!isset($_SESSION['ldelay'])) {\n    $_SESSION['ldelay'] = \"0\";\n    $redis->publish(\"F2B_CHANNEL\", \"mailcow UI: Invalid password for \" . $user . \" by \" . $_SERVER['REMOTE_ADDR']);\n    error_log(\"mailcow UI: Invalid password for \" . $user . \" by \" . $_SERVER['REMOTE_ADDR']);\n  }\n  elseif (!isset($_SESSION['mailcow_cc_username'])) {\n    $_SESSION['ldelay'] = $_SESSION['ldelay']+0.5;\n    $redis->publish(\"F2B_CHANNEL\", \"mailcow UI: Invalid password for \" . $user . \" by \" . $_SERVER['REMOTE_ADDR']);\n    error_log(\"mailcow UI: Invalid password for \" . $user . \" by \" . $_SERVER['REMOTE_ADDR']);\n  }\n  $_SESSION['return'][] =  array(\n    'type' => 'danger',\n    'log' => array(__FUNCTION__, $user, '*'),\n    'msg' => 'login_failed'\n  );\n\n  sleep($_SESSION['ldelay']);\n  return false;\n}\n\nfunction admin_login($user, $pass){\n  global $pdo;\n\n  if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'malformed_username'\n      );\n    }\n    return false;\n  }\n\n  $user = strtolower(trim($user));\n  $stmt = $pdo->prepare(\"SELECT `password`, `attributes` FROM `admin`\n      WHERE `superadmin` = '1'\n      AND `active` = '1'\n      AND `username` = :user\");\n  $stmt->execute(array(':user' => $user));\n  $row = $stmt->fetch(PDO::FETCH_ASSOC);\n\n  // verify password\n  if (verify_hash($row['password'], $pass)) {\n    $admin_attrs = json_decode($row['attributes'], true) ?? [];\n\n    // Check force_pw_update\n    if (intval($admin_attrs['force_pw_update'] ?? 0) == 1) {\n      $_SESSION['pending_pw_update'] = true;\n    }\n\n    // check for tfa authenticators\n    $authenticators = get_tfa($user);\n    if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0) {\n      // active tfa authenticators found, set pending user login\n      $_SESSION['pending_mailcow_cc_username'] = $user;\n      $_SESSION['pending_mailcow_cc_role'] = \"admin\";\n      $_SESSION['pending_tfa_methods'] = $authenticators['additional'];\n      unset($_SESSION['ldelay']);\n      $_SESSION['return'][] =  array(\n        'type' => 'info',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'awaiting_tfa_confirmation'\n      );\n      return \"pending\";\n    } else {\n      unset($_SESSION['ldelay']);\n      // Reactivate TFA if it was set to \"deactivate TFA for next login\"\n      $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active`='1' WHERE `username` = :user\");\n      $stmt->execute(array(':user' => $user));\n      // Check force_tfa: only force setup if NO TFA exists at all\n      if (intval($admin_attrs['force_tfa'] ?? 0) == 1 && !tfa_exists($user)) {\n        $_SESSION['pending_tfa_setup'] = true;\n      }\n      $_SESSION['return'][] =  array(\n        'type' => 'success',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => array('logged_in_as', $user)\n      );\n      return \"admin\";\n    }\n  }\n\n  return false;\n}\nfunction domainadmin_login($user, $pass){\n  global $pdo;\n\n  if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'malformed_username'\n      );\n    }\n    return false;\n  }\n\n  $stmt = $pdo->prepare(\"SELECT `password`, `attributes` FROM `admin`\n      WHERE `superadmin` = '0'\n      AND `active`='1'\n      AND `username` = :user\");\n  $stmt->execute(array(':user' => $user));\n  $row = $stmt->fetch(PDO::FETCH_ASSOC);\n\n  // verify password\n  if (verify_hash($row['password'], $pass) !== false) {\n    $admin_attrs = json_decode($row['attributes'], true) ?? [];\n\n    // Check force_pw_update\n    if (intval($admin_attrs['force_pw_update'] ?? 0) == 1) {\n      $_SESSION['pending_pw_update'] = true;\n    }\n\n    // check for tfa authenticators\n    $authenticators = get_tfa($user);\n    if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0) {\n      $_SESSION['pending_mailcow_cc_username'] = $user;\n      $_SESSION['pending_mailcow_cc_role'] = \"domainadmin\";\n      $_SESSION['pending_tfa_methods'] = $authenticators['additional'];\n      unset($_SESSION['ldelay']);\n      $_SESSION['return'][] =  array(\n        'type' => 'info',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'awaiting_tfa_confirmation'\n      );\n      return \"pending\";\n    }\n    else {\n      unset($_SESSION['ldelay']);\n      // Reactivate TFA if it was set to \"deactivate TFA for next login\"\n      $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active`='1' WHERE `username` = :user\");\n      $stmt->execute(array(':user' => $user));\n      // Check force_tfa: only force setup if NO TFA exists at all\n      if (intval($admin_attrs['force_tfa'] ?? 0) == 1 && !tfa_exists($user)) {\n        $_SESSION['pending_tfa_setup'] = true;\n      }\n      $_SESSION['return'][] =  array(\n        'type' => 'success',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => array('logged_in_as', $user)\n      );\n      return \"domainadmin\";\n    }\n  }\n\n  return false;\n}\nfunction user_login($user, $pass, $extra = null){\n  global $pdo;\n  global $iam_provider;\n  global $iam_settings;\n\n  $is_internal = $extra['is_internal'];\n  $extra['service'] = !isset($extra['service']) ? 'NONE' : $extra['service'];\n\n  if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'malformed_username'\n      );\n    }\n    return false;\n  }\n\n  $stmt = $pdo->prepare(\"SELECT\n      mailbox.*,\n      domain.active AS d_active\n      FROM `mailbox`\n      INNER JOIN domain on mailbox.domain = domain.domain\n      WHERE `kind` NOT REGEXP 'location|thing|group'\n        AND `username` = :user\");\n  $stmt->execute(array(':user' => $user));\n  $row = $stmt->fetch(PDO::FETCH_ASSOC);\n\n  // user does not exist, try call idp login and create user if possible via rest flow\n  if (!$row){\n    $result = false;\n    if ($iam_settings['authsource'] == 'keycloak' && intval($iam_settings['mailpassword_flow']) == 1){\n      $result = keycloak_mbox_login_rest($user, $pass, array('is_internal' => $is_internal, 'create' => true));\n    } else if ($iam_settings['authsource'] == 'ldap') {\n      $result = ldap_mbox_login($user, $pass, array('is_internal' => $is_internal, 'create' => true));\n    }\n    if ($result !== false){\n      // double check if mailbox is active\n      $stmt = $pdo->prepare(\"SELECT * FROM `mailbox`\n      INNER JOIN domain on mailbox.domain = domain.domain\n      WHERE `kind` NOT REGEXP 'location|thing|group'\n        AND `mailbox`.`active`='1'\n        AND `domain`.`active`='1'\n        AND `username` = :user\");\n      $stmt->execute(array(':user' => $user));\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\n\n      if (!empty($row)) {\n        // check if user has access to service (imap, smtp, pop3, sieve, dav, eas) if service is set\n        $row['attributes'] = json_decode($row['attributes'], true);\n        if ($extra['service'] != 'NONE') {\n          $key = strtolower($extra['service']) . \"_access\";\n          if (isset($row['attributes'][$key]) && $row['attributes'][$key] != '1') {\n            return false;\n          }\n        }\n        return true;\n      }\n    }\n    clear_session();\n    return false;\n  }\n\n  // check if user has access to service (imap, smtp, pop3, sieve) if service is set\n  $row['attributes'] = json_decode($row['attributes'], true);\n  if ($extra['service'] != 'NONE') {\n    $key = strtolower($extra['service']) . \"_access\";\n    if (isset($row['attributes'][$key]) && $row['attributes'][$key] != '1') {\n      return false;\n    }\n  }\n  switch ($row['authsource']) {\n    case 'keycloak':\n      // user authsource is keycloak, try using via rest flow\n      if (intval($iam_settings['mailpassword_flow']) == 1){\n        $result = keycloak_mbox_login_rest($user, $pass, array('is_internal' => $is_internal));\n        if ($result !== false) {\n          // double check if mailbox and domain is active\n          $stmt = $pdo->prepare(\"SELECT * FROM `mailbox`\n          INNER JOIN domain on mailbox.domain = domain.domain\n          WHERE `kind` NOT REGEXP 'location|thing|group'\n            AND `mailbox`.`active`='1'\n            AND `domain`.`active`='1'\n            AND `username` = :user\");\n          $stmt->execute(array(':user' => $user));\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\n          if (empty($row)) {\n            return false;\n          }\n\n          $row['attributes'] = json_decode($row['attributes'], true);\n\n          // check for tfa authenticators\n          $authenticators = get_tfa($user);\n          if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0 && !$is_internal) {\n            // authenticators found, init TFA flow\n            $_SESSION['pending_mailcow_cc_username'] = $user;\n            $_SESSION['pending_mailcow_cc_role'] = \"user\";\n            $_SESSION['pending_tfa_methods'] = $authenticators['additional'];\n            unset($_SESSION['ldelay']);\n            $_SESSION['return'][] =  array(\n              'type' => 'success',\n              'log' => array(__FUNCTION__, $user, '*', 'Provider: Keycloak'),\n              'msg' => array('logged_in_as', $user)\n            );\n            return \"pending\";\n          } else if (!isset($authenticators['additional']) || !is_array($authenticators['additional']) || count($authenticators['additional']) == 0) {\n            // no authenticators found, login successfull\n            if (!$is_internal){\n              unset($_SESSION['ldelay']);\n              // Reactivate TFA if it was set to \"deactivate TFA for next login\"\n              $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active`='1' WHERE `username` = :user\");\n              $stmt->execute(array(':user' => $user));\n              // Check force_tfa: only force setup if NO TFA exists at all\n              if (intval($row['attributes']['force_tfa']) == 1 && !tfa_exists($user)) {\n                $_SESSION['pending_tfa_setup'] = true;\n              }\n              $_SESSION['return'][] =  array(\n                'type' => 'success',\n                'log' => array(__FUNCTION__, $user, '*', 'Provider: Keycloak'),\n                'msg' => array('logged_in_as', $user)\n              );\n            }\n            return \"user\";\n          }\n        }\n        return $result;\n      } else {\n        return false;\n      }\n    break;\n    case 'ldap':\n      // user authsource is ldap\n      $result = ldap_mbox_login($user, $pass, array('is_internal' => $is_internal));\n      if ($result !== false) {\n        // double check if mailbox and domain is active\n        $stmt = $pdo->prepare(\"SELECT * FROM `mailbox`\n        INNER JOIN domain on mailbox.domain = domain.domain\n        WHERE `kind` NOT REGEXP 'location|thing|group'\n          AND `mailbox`.`active`='1'\n          AND `domain`.`active`='1'\n          AND `username` = :user\");\n        $stmt->execute(array(':user' => $user));\n        $row = $stmt->fetch(PDO::FETCH_ASSOC);\n        if (empty($row)) {\n          return false;\n        }\n\n        $row['attributes'] = json_decode($row['attributes'], true);\n\n        // check for tfa authenticators\n        $authenticators = get_tfa($user);\n        if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0 && !$is_internal) {\n          // authenticators found, init TFA flow\n          $_SESSION['pending_mailcow_cc_username'] = $user;\n          $_SESSION['pending_mailcow_cc_role'] = \"user\";\n          $_SESSION['pending_tfa_methods'] = $authenticators['additional'];\n          unset($_SESSION['ldelay']);\n          $_SESSION['return'][] =  array(\n            'type' => 'success',\n            'log' => array(__FUNCTION__, $user, '*', 'Provider: LDAP'),\n            'msg' => array('logged_in_as', $user)\n          );\n          return \"pending\";\n        } else if (!isset($authenticators['additional']) || !is_array($authenticators['additional']) || count($authenticators['additional']) == 0) {\n          // no authenticators found, login successfull\n          if (!$is_internal){\n            unset($_SESSION['ldelay']);\n            // Reactivate TFA if it was set to \"deactivate TFA for next login\"\n            $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active`='1' WHERE `username` = :user\");\n            $stmt->execute(array(':user' => $user));\n            // Check force_tfa: only force setup if NO TFA exists at all\n            if (intval($row['attributes']['force_tfa']) == 1 && !tfa_exists($user)) {\n              $_SESSION['pending_tfa_setup'] = true;\n            }\n            $_SESSION['return'][] =  array(\n              'type' => 'success',\n              'log' => array(__FUNCTION__, $user, '*', 'Provider: LDAP'),\n              'msg' => array('logged_in_as', $user)\n            );\n          }\n          return \"user\";\n        }\n      }\n      return $result;\n    break;\n    case 'mailcow':\n      if ($row['active'] != 1 || $row['d_active'] != 1) {\n        return false;\n      }\n      // verify password\n      if (verify_hash($row['password'], $pass) !== false) {\n\n        if (intval($row['attributes']['force_pw_update']) == 1) {\n          $_SESSION['pending_pw_update'] = true;\n        }\n\n        // check for tfa authenticators\n        $authenticators = get_tfa($user);\n        if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0 && !$is_internal) {\n          // authenticators found, init TFA flow\n          $_SESSION['pending_mailcow_cc_username'] = $user;\n          $_SESSION['pending_mailcow_cc_role'] = \"user\";\n          $_SESSION['pending_tfa_methods'] = $authenticators['additional'];\n          unset($_SESSION['ldelay']);\n          $_SESSION['return'][] =  array(\n            'type' => 'success',\n            'log' => array(__FUNCTION__, $user, '*', 'Provider: mailcow'),\n            'msg' => array('logged_in_as', $user)\n          );\n          return \"pending\";\n        } else if (!isset($authenticators['additional']) || !is_array($authenticators['additional']) || count($authenticators['additional']) == 0) {\n          // no authenticators found, login successfull\n          if (!$is_internal){\n            unset($_SESSION['ldelay']);\n            // Reactivate TFA if it was set to \"deactivate TFA for next login\"\n            $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active`='1' WHERE `username` = :user\");\n            $stmt->execute(array(':user' => $user));\n            // Check force_tfa: only force setup if NO TFA exists at all\n            if (intval($row['attributes']['force_tfa']) == 1 && !tfa_exists($user)) {\n              $_SESSION['pending_tfa_setup'] = true;\n            }\n            $_SESSION['return'][] =  array(\n              'type' => 'success',\n              'log' => array(__FUNCTION__, $user, '*', 'Provider: mailcow'),\n              'msg' => array('logged_in_as', $user)\n            );\n          }\n          return \"user\";\n        }\n      }\n    break;\n  }\n\n  return false;\n}\nfunction apppass_login($user, $pass, $extra = null){\n  global $pdo;\n\n  $is_internal = $extra['is_internal'];\n\n  if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'malformed_username'\n      );\n    }\n    return false;\n  }\n\n  $extra['service'] = !isset($extra['service']) ? 'NONE' : $extra['service'];\n  if (!$is_internal && $extra['service'] == 'NONE') {\n    return false;\n  }\n\n  // fetch app password data\n  $stmt = $pdo->prepare(\"SELECT `app_passwd`.*, `app_passwd`.`password` as `password`, `app_passwd`.`id` as `app_passwd_id` FROM `app_passwd`\n    INNER JOIN `mailbox` ON `mailbox`.`username` = `app_passwd`.`mailbox`\n    INNER JOIN `domain` ON `mailbox`.`domain` = `domain`.`domain`\n    WHERE `mailbox`.`kind` NOT REGEXP 'location|thing|group'\n      AND `mailbox`.`active` = '1'\n      AND `domain`.`active` = '1'\n      AND `app_passwd`.`active` = '1'\n      AND `app_passwd`.`mailbox` = :user\"\n  );\n  // fetch password data\n  $stmt->execute(array(\n    ':user' => $user,\n  ));\n  $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n\n  foreach ($rows as $row) {\n    if ($extra['service'] != 'NONE' && $row[strtolower($extra['service']) . '_access'] != '1'){\n      continue;\n    }\n\n    // verify password\n    if (verify_hash($row['password'], $pass) !== false) {\n      $_SESSION['app_passwd_id'] = $row['app_passwd_id'];\n      unset($_SESSION['ldelay']);\n      return \"user\";\n    }\n  }\n\n  return false;\n}\n// Keycloak REST Api Flow - auth user by mailcow_password attribute\n// This password will be used for direct UI, IMAP and SMTP Auth\n// To use direct user credentials, only Authorization Code Flow is valid\nfunction keycloak_mbox_login_rest($user, $pass, $extra = null){\n  global $pdo;\n  global $iam_provider;\n  global $iam_settings;\n\n  $is_internal = $extra['is_internal'];\n  $create = $extra['create'];\n\n  if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'malformed_username'\n      );\n    }\n    return false;\n  }\n  if (!$iam_provider) {\n    return false;\n  }\n\n  // get access_token for service account of mailcow client\n  $admin_token = identity_provider(\"get-keycloak-admin-token\");\n\n  // get the mailcow_password attribute from keycloak user\n  $url = \"{$iam_settings['server_url']}/admin/realms/{$iam_settings['realm']}/users\";\n  $queryParams = array('email' => $user, 'exact' => true);\n  $queryString = http_build_query($queryParams);\n  $curl = curl_init();\n  curl_setopt($curl, CURLOPT_TIMEOUT, 7);\n  curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);\n  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\n  curl_setopt($curl, CURLOPT_HTTPHEADER, array(\n      'Authorization: Bearer ' . $admin_token,\n      'Content-Type: application/json'\n  ));\n  $user_res = json_decode(curl_exec($curl), true)[0];\n  $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);\n  curl_close($curl);\n  if ($code != 200) {\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', 'Identity Provider returned HTTP ' . $code),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n  if (!isset($user_res['attributes']['mailcow_password']) || !is_array($user_res['attributes']['mailcow_password'])){\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', 'User has no mailcow_password attribute'),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n  if (empty($user_res['attributes']['mailcow_password'][0])){\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', \"User's mailcow_password attribute is empty\"),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n\n  // validate mailcow_password\n  $mailcow_password = $user_res['attributes']['mailcow_password'][0];\n  if (!verify_hash($mailcow_password, $pass)) {\n    return false;\n  }\n\n  // get mapped template\n  $user_template = $user_res['attributes']['mailcow_template'][0];\n  $mapper_key = array_search($user_template, $iam_settings['mappers']);\n\n  if (!$create) {\n    // login success\n    if ($mapper_key !== false) {\n      // update user\n      $_SESSION['access_all_exception'] = '1';\n      mailbox('edit', 'mailbox_from_template', array(\n        'username' => $user,\n        'name' => $user_res['name'],\n        'template' => $iam_settings['templates'][$mapper_key]\n      ));\n      $_SESSION['access_all_exception'] = '0';\n    }\n    return 'user';\n  }\n\n  // check if login provisioning is enabled before creating user\n  if (!$iam_settings['login_provisioning']){\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, \"Auto-create users on login is deactivated\"),\n        'msg' => 'login_failed'\n      );\n    }\n    return false;\n  }\n  // check if matching attribute exist\n  if (empty($iam_settings['mappers']) || !$user_template || $mapper_key === false) {\n    if (!empty($iam_settings['default_template'])) {\n      $mbox_template = $iam_settings['default_template'];\n    } else {\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*', 'No matching attribute mapping was found'),\n        'msg' => 'generic_server_error'\n      );\n      return false;\n    }\n  } else {\n    $mbox_template = $iam_settings['templates'][$mapper_key];\n  }\n\n  // create mailbox\n  $_SESSION['access_all_exception'] = '1';\n  $create_res = mailbox('add', 'mailbox_from_template', array(\n    'domain' => explode('@', $user)[1],\n    'local_part' => explode('@', $user)[0],\n    'name' => $user_res['name'],\n    'authsource' => 'keycloak',\n    'template' => $mbox_template\n  ));\n  $_SESSION['access_all_exception'] = '0';\n  if (!$create_res){\n    clear_session();\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', 'Could not create mailbox on login'),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n\n  return 'user';\n}\nfunction ldap_mbox_login($user, $pass, $extra = null){\n  global $pdo;\n  global $iam_provider;\n  global $iam_settings;\n\n  $is_internal = $extra['is_internal'];\n  $create = $extra['create'];\n\n  if (!filter_var($user, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $user))) {\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*'),\n        'msg' => 'malformed_username'\n      );\n    }\n    return false;\n  }\n  if (!$iam_provider) {\n    return false;\n  }\n\n  try {\n    $ldap_query = $iam_provider->query();\n    if (!empty($iam_settings['filter'])) {\n      $ldap_query = $ldap_query->rawFilter($iam_settings['filter']);\n    }\n    $ldap_query = $ldap_query->where($iam_settings['username_field'], '=', $user)\n      ->select([$iam_settings['username_field'], $iam_settings['attribute_field'], 'displayname', 'distinguishedname', 'dn']);\n\n    $user_res = $ldap_query->firstOrFail();\n  } catch (Exception $e) {\n    // clear $_SESSION['return'] to not leak data\n    $_SESSION['return'] = array();\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', $e->getMessage()),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n  try {\n    if (!$iam_provider->auth()->attempt($user_res['dn'], $pass)) {\n      return false;\n    }\n  } catch (Exception $e) {\n    // clear $_SESSION['return'] to not leak data\n    $_SESSION['return'] = array();\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', $e->getMessage()),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n\n  // get mapped template\n  $user_template = $user_res[$iam_settings['attribute_field']][0];\n  $mapper_key = array_search($user_template, $iam_settings['mappers']);\n\n  if (!$create) {\n    // login success\n    if ($mapper_key !== false) {\n      // update user\n      $_SESSION['access_all_exception'] = '1';\n      mailbox('edit', 'mailbox_from_template', array(\n        'username' => $user,\n        'name' => $user_res['displayname'][0],\n        'template' => $iam_settings['templates'][$mapper_key]\n      ));\n      $_SESSION['access_all_exception'] = '0';\n    }\n    return 'user';\n  }\n\n  // check if login provisioning is enabled before creating user\n  if (!$iam_settings['login_provisioning']){\n    if (!$is_internal){\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, \"Auto-create users on login is deactivated\"),\n        'msg' => 'login_failed'\n      );\n    }\n    return false;\n  }\n  // check if matching attribute exist\n  if (empty($iam_settings['mappers']) || !$user_template || $mapper_key === false) {\n    if (!empty($iam_settings['default_template'])) {\n      $mbox_template = $iam_settings['default_template'];\n    } else {\n      $_SESSION['return'][] =  array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__, $user, '*', 'No matching attribute mapping was found'),\n        'msg' => 'generic_server_error'\n      );\n      return false;\n    }\n  } else {\n    $mbox_template = $iam_settings['templates'][$mapper_key];\n  }\n\n  // create mailbox\n  $_SESSION['access_all_exception'] = '1';\n  $create_res = mailbox('add', 'mailbox_from_template', array(\n    'domain' => explode('@', $user)[1],\n    'local_part' => explode('@', $user)[0],\n    'name' => $user_res['displayname'][0],\n    'authsource' => 'ldap',\n    'template' => $mbox_template\n  ));\n  $_SESSION['access_all_exception'] = '0';\n  if (!$create_res){\n    clear_session();\n    $_SESSION['return'][] =  array(\n      'type' => 'danger',\n      'log' => array(__FUNCTION__, $user, '*', 'Could not create mailbox on login'),\n      'msg' => 'generic_server_error'\n    );\n    return false;\n  }\n\n  return 'user';\n}\n"
  },
  {
    "path": "data/web/inc/functions.customize.inc.php",
    "content": "<?php\r\nfunction customize($_action, $_item, $_data = null) {\r\n\tglobal $redis;\r\n\tglobal $lang;\r\n  global $LOGO_LIMITS;\r\n\r\n  switch ($_action) {\r\n    case 'add':\r\n      // disable functionality when demo mode is enabled\r\n      if ($GLOBALS[\"DEMO_MODE\"]) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n          'msg' => 'demo_mode_enabled'\r\n        );\r\n        return false;\r\n      }\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      switch ($_item) {\r\n        case 'main_logo':\r\n        case 'main_logo_dark':\r\n          if (in_array($_data[$_item]['type'], array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/x-png', 'image/png', 'image/svg+xml'))) {\r\n            try {\r\n              if (file_exists($_data[$_item]['tmp_name']) !== true) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                  'msg' => 'img_tmp_missing'\r\n                );\r\n                return false;\r\n              }\r\n              if ($_data[$_item]['size'] > $LOGO_LIMITS['max_size']) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                  'msg' => 'img_size_exceeded'\r\n                );\r\n                return false;\r\n              }\r\n              list($width, $height) = getimagesize($_data[$_item]['tmp_name']);\r\n              if ($width > $LOGO_LIMITS['max_width'] || $height > $LOGO_LIMITS['max_height']) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                  'msg' => 'img_dimensions_exceeded'\r\n                );\r\n                return false;\r\n              }\r\n              $image = new Imagick($_data[$_item]['tmp_name']);\r\n              if ($image->valid() !== true) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                  'msg' => 'img_invalid'\r\n                );\r\n                return false;\r\n              }\r\n              $image->destroy();\r\n            }\r\n            catch (ImagickException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                'msg' => 'img_invalid'\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => 'invalid_mime_type'\r\n            );\r\n            return false;\r\n          }\r\n          try {\r\n            $redis->Set(strtoupper($_item), 'data:' . $_data[$_item]['type'] . ';base64,' . base64_encode(file_get_contents($_data[$_item]['tmp_name'])));\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n            'msg' => 'upload_success'\r\n          );\r\n        break;\r\n      }\r\n    break;\r\n    case 'edit':\r\n      // disable functionality when demo mode is enabled\r\n      if ($GLOBALS[\"DEMO_MODE\"]) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n          'msg' => 'demo_mode_enabled'\r\n        );\r\n        return false;\r\n      }\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      switch ($_item) {\r\n        case 'app_links':\r\n          $apps = (array)$_data['app'];\r\n          $links = (array)$_data['href'];\r\n          $user_links = (array)$_data['user_href'];\r\n          $hide = (array)$_data['hide'];\r\n          $out = array();\r\n          if (count($apps) == count($links) && count($apps) == count($user_links) && count($apps) == count($hide)) {\r\n            for ($i = 0; $i < count($apps); $i++) {\r\n              $out[] = array($apps[$i] => array(\r\n                'link' => $links[$i],\r\n                'user_link' => $user_links[$i],\r\n                'hide' => ($hide[$i] === '0' || $hide[$i] === 0) ? false : true\r\n              ));\r\n            }\r\n            try {\r\n              $redis->set('APP_LINKS', json_encode($out));\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n            'msg' => 'app_links'\r\n          );\r\n        break;\r\n        case 'ui_texts':\r\n          $title_name = $_data['title_name'];\r\n          $main_name = $_data['main_name'];\r\n          $apps_name = $_data['apps_name'];\r\n          $help_text = $_data['help_text'];\r\n          $ui_footer = $_data['ui_footer'];\r\n          $ui_announcement_text = $_data['ui_announcement_text'];\r\n          $ui_announcement_type = (in_array($_data['ui_announcement_type'], array('info', 'warning', 'danger'))) ? $_data['ui_announcement_type'] : false;\r\n          $ui_announcement_active = (!empty($_data['ui_announcement_active']) ? 1 : 0);\r\n\r\n          try {\r\n            $redis->set('TITLE_NAME', htmlspecialchars($title_name));\r\n            $redis->set('MAIN_NAME', htmlspecialchars($main_name));\r\n            $redis->set('APPS_NAME', htmlspecialchars($apps_name));\r\n            $redis->set('HELP_TEXT', $help_text);\r\n            $redis->set('UI_FOOTER', $ui_footer);\r\n            $redis->set('UI_ANNOUNCEMENT_TEXT', $ui_announcement_text);\r\n            $redis->set('UI_ANNOUNCEMENT_TYPE', $ui_announcement_type);\r\n            $redis->set('UI_ANNOUNCEMENT_ACTIVE', $ui_announcement_active);\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n            'msg' => 'ui_texts'\r\n          );\r\n        break;\r\n        case 'ip_check':\r\n          $ip_check = ($_data['ip_check_opt_in'] == \"1\") ? 1 : 0;\r\n          try {\r\n            $redis->set('IP_CHECK', $ip_check);\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n            'msg' => 'ip_check_opt_in_modified'\r\n          );\r\n        break;\r\n        case 'custom_login':\r\n          $hide_user_quicklink        = ($_data['hide_user_quicklink'] == \"1\") ? 1 : 0;\r\n          $hide_domainadmin_quicklink = ($_data['hide_domainadmin_quicklink'] == \"1\") ? 1 : 0;\r\n          $hide_admin_quicklink       = ($_data['hide_admin_quicklink'] == \"1\") ? 1 : 0;\r\n          $force_sso                  = ($_data['force_sso'] == \"1\") ? 1 : 0;\r\n\r\n          $custom_login = array(\r\n            \"hide_user_quicklink\" => $hide_user_quicklink,\r\n            \"hide_domainadmin_quicklink\" => $hide_domainadmin_quicklink,\r\n            \"hide_admin_quicklink\" => $hide_admin_quicklink,\r\n            \"force_sso\" => $force_sso,\r\n          );\r\n          try {\r\n            $redis->set('CUSTOM_LOGIN', json_encode($custom_login));\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n            'msg' => 'custom_login_modified'\r\n          );\r\n        break;\r\n      }\r\n    break;\r\n    case 'delete':\r\n      // disable functionality when demo mode is enabled\r\n      if ($GLOBALS[\"DEMO_MODE\"]) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n          'msg' => 'demo_mode_enabled'\r\n        );\r\n        return false;\r\n      }\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      switch ($_item) {\r\n        case 'main_logo':\r\n        case 'main_logo_dark':\r\n          try {\r\n            if ($redis->del(strtoupper($_item))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n                'msg' => 'reset_main_logo'\r\n              );\r\n              return true;\r\n            }\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'get':\r\n      switch ($_item) {\r\n        case 'app_links':\r\n          try {\r\n            $app_links = json_decode($redis->get('APP_LINKS'), true);\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n\r\n          if (empty($app_links)){\r\n            return [];\r\n          }\r\n\r\n          // convert from old style\r\n          foreach($app_links as $i => $entry){\r\n            foreach($entry as $app => $link){\r\n              if (empty($link['link']) && empty($link['user_link'])){\r\n                $app_links[$i][$app] = array();\r\n                $app_links[$i][$app]['link'] = $link;\r\n                $app_links[$i][$app]['user_link'] = $link;\r\n              }\r\n            }\r\n          }\r\n\r\n          return $app_links;\r\n        break;\r\n        case 'main_logo':\r\n        case 'main_logo_dark':\r\n          try {\r\n            return $redis->get(strtoupper($_item));\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case 'ui_texts':\r\n          try {\r\n            $mailcow_hostname = strtolower(getenv(\"MAILCOW_HOSTNAME\"));\r\n\r\n            $data['title_name'] = ($title_name = $redis->get('TITLE_NAME')) ? $title_name : \"$mailcow_hostname - mail UI\";\r\n            $data['main_name'] = ($main_name = $redis->get('MAIN_NAME')) ? $main_name : \"$mailcow_hostname - mail UI\";\r\n            $data['apps_name'] = ($apps_name = $redis->get('APPS_NAME')) ? $apps_name : $lang['header']['apps'];\r\n            $data['help_text'] = ($help_text = $redis->get('HELP_TEXT')) ? $help_text : false;\r\n            if (!empty($redis->get('UI_IMPRESS'))) {\r\n              $redis->set('UI_FOOTER', $redis->get('UI_IMPRESS'));\r\n              $redis->del('UI_IMPRESS');\r\n            }\r\n            $data['ui_footer'] = ($ui_footer = $redis->get('UI_FOOTER')) ? $ui_footer : false;\r\n            $data['ui_announcement_text'] = ($ui_announcement_text = $redis->get('UI_ANNOUNCEMENT_TEXT')) ? $ui_announcement_text : false;\r\n            $data['ui_announcement_type'] = ($ui_announcement_type = $redis->get('UI_ANNOUNCEMENT_TYPE')) ? $ui_announcement_type : false;\r\n            $data['ui_announcement_active'] = ($redis->get('UI_ANNOUNCEMENT_ACTIVE') == 1) ? 1 : 0;\r\n            return $data;\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case 'main_logo_specs':\r\n        case 'main_logo_dark_specs':\r\n          try {\r\n            $image = new Imagick();\r\n            if($_item == 'main_logo_specs') {\r\n              $img_data = explode('base64,', customize('get', 'main_logo'));\r\n            } else {\r\n              $img_data = explode('base64,', customize('get', 'main_logo_dark'));\r\n            }\r\n            if ($img_data[1]) {\r\n              $image->readImageBlob(base64_decode($img_data[1]));\r\n              return $image->identifyImage();\r\n            }\r\n            return false;\r\n          }\r\n          catch (ImagickException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => 'imagick_exception'\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case 'ip_check':\r\n          try {\r\n            $ip_check = ($ip_check = $redis->get('IP_CHECK')) ? $ip_check : 0;\r\n            return $ip_check;\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case 'custom_login':\r\n          try {\r\n            $custom_login = $redis->get('CUSTOM_LOGIN');\r\n            return $custom_login ? json_decode($custom_login, true) : array();\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_item, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.dkim.inc.php",
    "content": "<?php\r\n\r\nfunction dkim($_action, $_data = null, $privkey = false) {\r\n  global $redis;\r\n  global $lang;\r\n  switch ($_action) {\r\n    case 'add':\r\n      $key_length = intval($_data['key_size']);\r\n      $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';\r\n      $domains = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['domains']));\r\n      $domains = array_filter($domains);\r\n      foreach ($domains as $domain) {\r\n        if (!is_valid_domain_name($domain) || !is_numeric($key_length)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n          );\r\n          continue;\r\n        }\r\n        if ($redis->hGet('DKIM_PUB_KEYS', $domain)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n          );\r\n          continue;\r\n        }\r\n        if (!ctype_alnum(str_replace(['-', '_', '.'], '', $dkim_selector))) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n          );\r\n          continue;\r\n        }\r\n        if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('access_denied', $domain)\r\n          );\r\n          continue;\r\n        }\r\n        $config = array(\r\n          \"digest_alg\" => \"sha256\",\r\n          \"private_key_bits\" => $key_length,\r\n          \"private_key_type\" => OPENSSL_KEYTYPE_RSA,\r\n        );\r\n        if ($keypair_ressource = openssl_pkey_new($config)) {\r\n          $key_details = openssl_pkey_get_details($keypair_ressource);\r\n          $pubKey = implode(array_slice(\r\n            array_filter(\r\n              explode(PHP_EOL, $key_details['key'])\r\n            ), 1, -1)\r\n          );\r\n          // Save public key and selector to redis\r\n          try {\r\n            $redis->hSet('DKIM_PUB_KEYS', $domain, $pubKey);\r\n            $redis->hSet('DKIM_SELECTORS', $domain, $dkim_selector);\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            continue;\r\n          }\r\n          // Export private key and save private key to redis\r\n          openssl_pkey_export($keypair_ressource, $privKey);\r\n          if (isset($privKey) && !empty($privKey)) {\r\n            try {\r\n              $redis->hSet('DKIM_PRIV_KEYS', $dkim_selector . '.' . $domain, trim($privKey));\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              continue;\r\n            }\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_added', $domain)\r\n          );\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n          );\r\n          continue;\r\n        }\r\n      }\r\n    break;\r\n    case 'duplicate':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $from_domain = $_data['from_domain'];\r\n      $from_domain_dkim = dkim('details', $from_domain, true);\r\n      if (empty($from_domain_dkim)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('dkim_domain_or_sel_invalid', $from_domain)\r\n        );\r\n        continue;\r\n      }\r\n      $to_domains = (array)$_data['to_domain'];\r\n      $to_domains = array_filter($to_domains);\r\n      foreach ($to_domains as $to_domain) {\r\n        try {\r\n          $redis->hSet('DKIM_PUB_KEYS', $to_domain, $from_domain_dkim['pubkey']);\r\n          $redis->hSet('DKIM_SELECTORS', $to_domain, $from_domain_dkim['dkim_selector']);\r\n          $redis->hSet('DKIM_PRIV_KEYS', $from_domain_dkim['dkim_selector'] . '.' . $to_domain, base64_decode(trim($from_domain_dkim['privkey'])));\r\n        }\r\n        catch (RedisException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('redis_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('dkim_duplicated', $from_domain, $to_domain)\r\n        );\r\n      }\r\n    break;\r\n    case 'import':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $private_key_input = trim($_data['private_key_file']);\r\n      $overwrite_existing = intval($_data['overwrite_existing']);\r\n      $private_key_normalized = preg_replace('~\\r\\n?~', \"\\n\", $private_key_input);\r\n      $private_key = openssl_pkey_get_private($private_key_normalized);\r\n      if ($ssl_error = openssl_error_string()) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('private_key_error', $ssl_error)\r\n        );\r\n        return false;\r\n      }\r\n      // Explode by nl\r\n      $pem_public_key_array = explode(PHP_EOL, trim(openssl_pkey_get_details($private_key)['key']));\r\n      // Remove first and last line/item\r\n      array_shift($pem_public_key_array);\r\n      array_pop($pem_public_key_array);\r\n      // Implode as single string\r\n      $pem_public_key = implode('', (array)$pem_public_key_array);\r\n      $dkim_selector = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : 'dkim';\r\n      $domain = $_data['domain'];\r\n      if (!is_valid_domain_name($domain)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n        );\r\n        return false;\r\n      }\r\n      if ($redis->hGet('DKIM_PUB_KEYS', $domain)) {\r\n        if ($overwrite_existing == 0) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_domain_or_sel_exists', $domain)\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      if (!ctype_alnum(str_replace(['-', '_', '.'], '', $dkim_selector))) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n        );\r\n        return false;\r\n      }\r\n      try {\r\n        dkim('delete', array('domains' => $domain));\r\n        $redis->hSet('DKIM_PUB_KEYS', $domain, $pem_public_key);\r\n        $redis->hSet('DKIM_SELECTORS', $domain, $dkim_selector);\r\n        $redis->hSet('DKIM_PRIV_KEYS', $dkim_selector . '.' . $domain, $private_key_normalized);\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      unset($private_key_normalized);\r\n      unset($private_key);\r\n      unset($private_key_input);\r\n      try {\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data),\r\n        'msg' => array('dkim_added', $domain)\r\n      );\r\n      return true;\r\n    break;\r\n    case 'details':\r\n      if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data) && $_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        return false;\r\n      }\r\n      $dkimdata = array();\r\n      if ($redis_dkim_key_data = $redis->hGet('DKIM_PUB_KEYS', $_data)) {\r\n        $dkimdata['pubkey'] = $redis_dkim_key_data;\r\n        if (strlen($dkimdata['pubkey']) < 391) {\r\n          $dkimdata['length'] = \"1024\";\r\n        }\r\n        elseif (strlen($dkimdata['pubkey']) < 564) {\r\n          $dkimdata['length'] = \"2048\";\r\n        }\r\n        elseif (strlen($dkimdata['pubkey']) < 736) {\r\n          $dkimdata['length'] = \"3072\";\r\n        }\r\n        elseif (strlen($dkimdata['pubkey']) < 1416) {\r\n          $dkimdata['length'] = \"4096\";\r\n        }\r\n        else {\r\n          $dkimdata['length'] = \">= 8192\";\r\n        }\r\n        if ($GLOBALS['SPLIT_DKIM_255'] === true) {\r\n          $dkim_txt_tmp = str_split('v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data, 255);\r\n          $dkimdata['dkim_txt'] = sprintf('\"%s\"', implode('\" \"', (array)$dkim_txt_tmp ) );\r\n        }\r\n        else {\r\n          $dkimdata['dkim_txt'] = 'v=DKIM1;k=rsa;t=s;s=email;p=' . $redis_dkim_key_data;\r\n        }\r\n        $dkimdata['dkim_selector'] = $redis->hGet('DKIM_SELECTORS', $_data);\r\n        if ($GLOBALS['SHOW_DKIM_PRIV_KEYS'] || $privkey == true) {\r\n          $dkimdata['privkey'] = base64_encode($redis->hGet('DKIM_PRIV_KEYS', $dkimdata['dkim_selector'] . '.' . $_data));\r\n        }\r\n        else {\r\n          $dkimdata['privkey'] = '';\r\n        }\r\n      }\r\n      return $dkimdata;\r\n    break;\r\n    case 'blind':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $blinddkim = array();\r\n      foreach ($redis->hKeys('DKIM_PUB_KEYS') as $redis_dkim_domain) {\r\n        $blinddkim[] = $redis_dkim_domain;\r\n      }\r\n      return array_diff($blinddkim, array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains')));\r\n    break;\r\n    case 'delete':\r\n      $domains = (array)$_data['domains'];\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      foreach ($domains as $domain) {\r\n        if (!is_valid_domain_name($domain)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('dkim_domain_or_sel_invalid', $domain)\r\n          );\r\n          continue;\r\n        }\r\n        try {\r\n          $selector = $redis->hGet('DKIM_SELECTORS', $domain);\r\n          $redis->hDel('DKIM_PUB_KEYS', $domain);\r\n          $redis->hDel('DKIM_PRIV_KEYS', $selector . '.' . $domain);\r\n          $redis->hDel('DKIM_SELECTORS', $domain);\r\n        }\r\n        catch (RedisException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => array('redis_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('dkim_removed', htmlspecialchars($domain))\r\n        );\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.docker.inc.php",
    "content": "<?php\r\nfunction docker($action, $service_name = null, $attr1 = null, $attr2 = null, $extra_headers = null) {\r\n  global $DOCKER_TIMEOUT;\r\n  global $redis;\r\n  $curl = curl_init();\r\n  curl_setopt($curl, CURLOPT_HTTPHEADER,array('Content-Type: application/json' ));\r\n  // We are using our mail certificates for dockerapi, the names will not match, the certs are trusted anyway\r\n  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);\r\n  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);\r\n  switch($action) {\r\n    case 'get_id':\r\n      curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/json');\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n      curl_setopt($curl, CURLOPT_POST, 0);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n      $response = curl_exec($curl);\r\n      if ($response === false) {\r\n        $err = curl_error($curl);\r\n        curl_close($curl);\r\n        return $err;\r\n      }\r\n      else {\r\n        curl_close($curl);\r\n        $containers = json_decode($response, true);\r\n        if (!empty($containers)) {\r\n          foreach ($containers as $container) {\r\n            if (isset($container['Config']['Labels']['com.docker.compose.service'])\r\n              && $container['Config']['Labels']['com.docker.compose.service'] == $service_name\r\n              && strtolower($container['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {\r\n              return trim($container['Id']);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      return false;\r\n    break;\r\n    case 'containers':\r\n      curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/json');\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n      curl_setopt($curl, CURLOPT_POST, 0);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n      $response = curl_exec($curl);\r\n      if ($response === false) {\r\n        $err = curl_error($curl);\r\n        curl_close($curl);\r\n        return $err;\r\n      }\r\n      else {\r\n        curl_close($curl);\r\n        $containers = json_decode($response, true);\r\n        if (!empty($containers)) {\r\n          foreach ($containers as $container) {\r\n            if (strtolower($container['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {\r\n              $out[$container['Config']['Labels']['com.docker.compose.service']]['State'] = $container['State'];\r\n              $out[$container['Config']['Labels']['com.docker.compose.service']]['Config'] = $container['Config'];\r\n              $out[$container['Config']['Labels']['com.docker.compose.service']]['Id'] = trim($container['Id']);\r\n            }\r\n          }\r\n        }\r\n        return (!empty($out)) ? $out : false;\r\n      }\r\n      return false;\r\n    break;\r\n    case 'info':\r\n      if (empty($service_name)) {\r\n        curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/json?all=true');\r\n        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n        curl_setopt($curl, CURLOPT_POST, 0);\r\n        curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n      }\r\n      else {\r\n        $container_id = docker('get_id', $service_name);\r\n        if (ctype_xdigit($container_id)) {\r\n          curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/' . $container_id . '/json');\r\n        }\r\n        else {\r\n          return false;\r\n        }\r\n      }\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n      curl_setopt($curl, CURLOPT_POST, 0);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n      $response = curl_exec($curl);\r\n      if ($response === false) {\r\n        $err = curl_error($curl);\r\n        curl_close($curl);\r\n        return $err;\r\n      }\r\n      else {\r\n        curl_close($curl);\r\n        $decoded_response = json_decode($response, true);\r\n        if (!empty($decoded_response)) {\r\n          if (empty($service_name)) {\r\n            foreach ($decoded_response as $container) {\r\n              if (isset($container['Config']['Labels']['com.docker.compose.project'])\r\n                && strtolower($container['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {\r\n                unset($container['Config']['Env']);\r\n                $out[$container['Config']['Labels']['com.docker.compose.service']]['State'] = $container['State'];\r\n                $out[$container['Config']['Labels']['com.docker.compose.service']]['Config'] = $container['Config'];\r\n                $out[$container['Config']['Labels']['com.docker.compose.service']]['Id'] = trim($container['Id']);\r\n              }\r\n            }\r\n          }\r\n          else {\r\n            if (isset($decoded_response['Config']['Labels']['com.docker.compose.project']) \r\n              && strtolower($decoded_response['Config']['Labels']['com.docker.compose.project']) == strtolower(getenv('COMPOSE_PROJECT_NAME'))) {\r\n              unset($container['Config']['Env']);\r\n              $out[$decoded_response['Config']['Labels']['com.docker.compose.service']]['State'] = $decoded_response['State'];\r\n              $out[$decoded_response['Config']['Labels']['com.docker.compose.service']]['Config'] = $decoded_response['Config'];\r\n              $out[$decoded_response['Config']['Labels']['com.docker.compose.service']]['Id'] = trim($decoded_response['Id']);\r\n            }\r\n          }\r\n        }\r\n        if (empty($response)) {\r\n          return true;\r\n        }\r\n        else {\r\n          return (!empty($out)) ? $out : false;\r\n        }\r\n      }\r\n    break;\r\n    case 'post':\r\n      if (!empty($attr1)) {\r\n        $container_id = docker('get_id', $service_name);\r\n        if (ctype_xdigit($container_id) && ctype_alnum($attr1)) {\r\n          curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/containers/' . $container_id . '/' . $attr1);\r\n          curl_setopt($curl, CURLOPT_POST, 1);\r\n          curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n          if (!empty($attr2)) {\r\n            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($attr2));\r\n          }\r\n          if (!empty($extra_headers) && is_array($extra_headers)) {\r\n            curl_setopt($curl, CURLOPT_HTTPHEADER, $extra_headers);\r\n          }\r\n          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n          $response = curl_exec($curl);\r\n          if ($response === false) {\r\n            $err = curl_error($curl);\r\n            curl_close($curl);\r\n            return $err;\r\n          }\r\n          else {\r\n            curl_close($curl);\r\n            if (empty($response)) {\r\n              return true;\r\n            }\r\n            else {\r\n              return $response;\r\n            }\r\n          }\r\n        }\r\n      }\r\n    break;\r\n    case 'container_stats':\r\n      if (empty($service_name)){\r\n        return false;\r\n      }\r\n\r\n      $container_id = $service_name;\r\n      curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/container/' . $container_id . '/stats/update');\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n      curl_setopt($curl, CURLOPT_POST, 1);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n      $response = curl_exec($curl);\r\n      if ($response === false) {\r\n        $err = curl_error($curl);\r\n        curl_close($curl);\r\n        return $err;\r\n      }\r\n      else {\r\n        curl_close($curl);\r\n        $stats = json_decode($response, true);\r\n        if (!empty($stats)) return $stats;\r\n      }\r\n      return false;\r\n    break;\r\n    case 'host_stats':\r\n      curl_setopt($curl, CURLOPT_URL, 'https://dockerapi:443/host/stats');\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n      curl_setopt($curl, CURLOPT_POST, 0);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, $DOCKER_TIMEOUT);\r\n      $response = curl_exec($curl);\r\n      if ($response === false) {\r\n        $err = curl_error($curl);\r\n        curl_close($curl);\r\n        return $err;\r\n      }\r\n      else {\r\n        curl_close($curl);\r\n        $stats = json_decode($response, true);\r\n        if (!empty($stats)) return $stats;\r\n      }\r\n      return false;\r\n    break;\r\n    case 'broadcast':\r\n      $request = array(\r\n        \"api_call\" => \"container_post\",\r\n        \"container_name\" => $service_name,\r\n        \"post_action\" => $attr1,\r\n        \"request\" => $attr2\r\n      );\r\n\r\n      $redis->publish(\"MC_CHANNEL\", json_encode($request));\r\n      return true;\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.domain_admin.inc.php",
    "content": "<?php\nfunction domain_admin($_action, $_data = null) {\n  global $pdo;\n  global $lang;\n  $_data_log = $_data;\n  !isset($_data_log['password']) ?: $_data_log['password'] = '*';\n  !isset($_data_log['password2']) ?: $_data_log['password2'] = '*';\n  !isset($_data_log['user_old_pass']) ?: $_data_log['user_old_pass'] = '*';\n  !isset($_data_log['user_new_pass']) ?: $_data_log['user_new_pass'] = '*';\n  !isset($_data_log['user_new_pass2']) ?: $_data_log['user_new_pass2'] = '*';\n  switch ($_action) {\n    case 'add':\n      $username\t\t= strtolower(trim($_data['username']));\n      $password\t\t= $_data['password'];\n      $password2  = $_data['password2'];\n      $domains    = (array)$_data['domains'];\n      $active     = intval($_data['active']);\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => 'access_denied'\n        );\n        return false;\n      }\n      if (empty($domains)) {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => 'domain_invalid'\n        );\n        return false;\n      }\n      if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username)) || empty ($username) || $username == 'API') {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => array('username_invalid', $username)\n        );\n        return false;\n      }\n\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox`\n        WHERE `username` = :username\");\n      $stmt->execute(array(':username' => $username));\n      $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `admin`\n        WHERE `username` = :username\");\n      $stmt->execute(array(':username' => $username));\n      $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `domain_admins`\n        WHERE `username` = :username\");\n      $stmt->execute(array(':username' => $username));\n      $num_results[] = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n\n      foreach ($num_results as $num_results_each) {\n        if ($num_results_each != 0) {\n          $_SESSION['return'][] = array(\n            'type' => 'danger',\n            'log' => array(__FUNCTION__, $_action, $_data_log),\n            'msg' => array('object_exists', htmlspecialchars($username))\n          );\n          return false;\n        }\n      }\n      if (password_check($password, $password2) !== true) {\n        continue;\n      }\n      $password_hashed = hash_password($password);\n      $valid_domains = 0;\n      foreach ($domains as $domain) {\n        if (!is_valid_domain_name($domain) || mailbox('get', 'domain_details', $domain) === false) {\n          $_SESSION['return'][] = array(\n            'type' => 'danger',\n            'log' => array(__FUNCTION__, $_action, $_data_log),\n            'msg' => array('domain_invalid', htmlspecialchars($domain))\n          );\n          continue;\n        }\n        $valid_domains++;\n        $stmt = $pdo->prepare(\"INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`)\n            VALUES (:username, :domain, :created, :active)\");\n        $stmt->execute(array(\n          ':username' => $username,\n          ':domain' => $domain,\n          ':created' => date('Y-m-d H:i:s'),\n          ':active' => $active\n        ));\n      }\n      if ($valid_domains != 0) {\n        $stmt = $pdo->prepare(\"INSERT INTO `admin` (`username`, `password`, `superadmin`, `active`)\n          VALUES (:username, :password_hashed, '0', :active)\");\n        $stmt->execute(array(\n          ':username' => $username,\n          ':password_hashed' => $password_hashed,\n          ':active' => $active\n        ));\n      }\n      $stmt = $pdo->prepare(\"INSERT INTO `da_acl` (`username`) VALUES (:username)\");\n      $stmt->execute(array(\n        ':username' => $username\n      ));\n      $_SESSION['return'][] = array(\n        'type' => 'success',\n        'log' => array(__FUNCTION__, $_action, $_data_log),\n        'msg' => array('domain_admin_added', htmlspecialchars($username))\n      );\n    break;\n    case 'edit':\n      if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => 'access_denied'\n        );\n        return false;\n      }\n      // Administrator\n      if ($_SESSION['mailcow_cc_role'] == \"admin\") {\n        if (!is_array($_data['username'])) {\n          $usernames = array();\n          $usernames[] = $_data['username'];\n        }\n        else {\n          $usernames = $_data['username'];\n        }\n        foreach ($usernames as $username) {\n          $is_now = domain_admin('details', $username);\n          $domains = (isset($_data['domains'])) ? (array)$_data['domains'] : null;\n          if (!empty($is_now)) {\n            $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\n            $domains = (!empty($domains)) ? $domains : $is_now['selected_domains'];\n            $username_new = (!empty($_data['username_new'])) ? $_data['username_new'] : $is_now['username'];\n          }\n          else {\n            $_SESSION['return'][] = array(\n              'type' => 'danger',\n              'log' => array(__FUNCTION__, $_action, $_data_log),\n              'msg' => 'access_denied'\n            );\n            continue;\n          }\n          $password     = $_data['password'];\n          $password2    = $_data['password2'];\n          if (!empty($domains)) {\n            foreach ($domains as $domain) {\n              if (!is_valid_domain_name($domain) || mailbox('get', 'domain_details', $domain) === false) {\n                $_SESSION['return'][] = array(\n                  'type' => 'danger',\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\n                  'msg' => array('domain_invalid', htmlspecialchars($domain))\n                );\n                continue 2;\n              }\n            }\n          }\n          if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $username_new))) {\n            $_SESSION['return'][] = array(\n              'type' => 'danger',\n              'log' => array(__FUNCTION__, $_action, $_data_log),\n              'msg' => array('username_invalid', $username_new)\n            );\n            continue;\n          }\n          if ($username_new != $username) {\n            if (!empty(domain_admin('details', $username_new)['username'])) {\n              $_SESSION['return'][] = array(\n                'type' => 'danger',\n                'log' => array(__FUNCTION__, $_action, $_data_log),\n                'msg' => array('username_invalid', $username_new)\n              );\n              continue;\n            }\n          }\n          $stmt = $pdo->prepare(\"DELETE FROM `domain_admins` WHERE `username` = :username\");\n          $stmt->execute(array(\n            ':username' => $username,\n          ));\n          $stmt = $pdo->prepare(\"UPDATE `da_acl` SET `username` = :username_new WHERE `username` = :username\");\n          $stmt->execute(array(\n            ':username_new' => $username_new,\n            ':username' => $username\n          ));\n          if (!empty($domains)) {\n            foreach ($domains as $domain) {\n              $stmt = $pdo->prepare(\"INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`)\n                VALUES (:username_new, :domain, :created, :active)\");\n              $stmt->execute(array(\n                ':username_new' => $username_new,\n                ':domain' => $domain,\n                ':created' => date('Y-m-d H:i:s'),\n                ':active' => $active\n              ));\n            }\n          }\n          $force_tfa = intval($_data['force_tfa'] ?? 0) ? 1 : 0;\n          $force_pw_update = intval($_data['force_pw_update'] ?? 0) ? 1 : 0;\n          if (!empty($password)) {\n            if (password_check($password, $password2) !== true) {\n              return false;\n            }\n            $password_hashed = hash_password($password);\n            $stmt = $pdo->prepare(\"UPDATE `admin` SET `username` = :username_new, `active` = :active, `password` = :password_hashed,\n              `attributes` = JSON_SET(COALESCE(`attributes`, '{}'), '$.force_tfa', :force_tfa, '$.force_pw_update', :force_pw_update)\n              WHERE `username` = :username\");\n            $stmt->execute(array(\n              ':password_hashed' => $password_hashed,\n              ':username_new' => $username_new,\n              ':username' => $username,\n              ':active' => $active,\n              ':force_tfa' => strval($force_tfa),\n              ':force_pw_update' => strval($force_pw_update)\n            ));\n            if (isset($_data['disable_tfa'])) {\n              $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active` = '0' WHERE `username` = :username\");\n              $stmt->execute(array(':username' => $username));\n            }\n            else {\n              $stmt = $pdo->prepare(\"UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username\");\n              $stmt->execute(array(':username_new' => $username_new, ':username' => $username));\n            }\n          }\n          else {\n            $stmt = $pdo->prepare(\"UPDATE `admin` SET `username` = :username_new, `active` = :active,\n              `attributes` = JSON_SET(COALESCE(`attributes`, '{}'), '$.force_tfa', :force_tfa, '$.force_pw_update', :force_pw_update)\n              WHERE `username` = :username\");\n            $stmt->execute(array(\n              ':username_new' => $username_new,\n              ':username' => $username,\n              ':active' => $active,\n              ':force_tfa' => strval($force_tfa),\n              ':force_pw_update' => strval($force_pw_update)\n            ));\n            if (isset($_data['disable_tfa'])) {\n              $stmt = $pdo->prepare(\"UPDATE `tfa` SET `active` = '0' WHERE `username` = :username\");\n              $stmt->execute(array(':username' => $username));\n            }\n            else {\n              $stmt = $pdo->prepare(\"UPDATE `tfa` SET `username` = :username_new WHERE `username` = :username\");\n              $stmt->execute(array(':username_new' => $username_new, ':username' => $username));\n            }\n          }\n          $_SESSION['return'][] = array(\n            'type' => 'success',\n            'log' => array(__FUNCTION__, $_action, $_data_log),\n            'msg' => array('domain_admin_modified', htmlspecialchars($username))\n          );\n        }\n        return true;\n      }\n      // Domain administrator\n      // Can only edit itself\n      elseif ($_SESSION['mailcow_cc_role'] == \"domainadmin\") {\n        $username = $_SESSION['mailcow_cc_username'];\n        $password_old\t\t= $_data['user_old_pass'] ?? '';\n        $password_new\t= $_data['user_new_pass'];\n        $password_new2\t= $_data['user_new_pass2'];\n\n        // Only verify old password if this is NOT a forced password update\n        if (empty($_SESSION['pending_pw_update'])) {\n          $stmt = $pdo->prepare(\"SELECT `password` FROM `admin`\n              WHERE `username` = :user\");\n          $stmt->execute(array(':user' => $username));\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\n          if (!verify_hash($row['password'], $password_old)) {\n            $_SESSION['return'][] = array(\n              'type' => 'danger',\n              'log' => array(__FUNCTION__, $_action, $_data_log),\n              'msg' => 'access_denied'\n            );\n            return false;\n          }\n        }\n        if (password_check($password_new, $password_new2) !== true) {\n          return false;\n        }\n        $password_hashed = hash_password($password_new);\n        $stmt = $pdo->prepare(\"UPDATE `admin` SET `password` = :password_hashed,\n          `attributes` = JSON_SET(COALESCE(`attributes`, '{}'), '$.force_pw_update', '0')\n          WHERE `username` = :username\");\n        $stmt->execute(array(\n          ':password_hashed' => $password_hashed,\n          ':username' => $username\n        ));\n        unset($_SESSION['pending_pw_update']);\n        $_SESSION['return'][] = array(\n          'type' => 'success',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => array('domain_admin_modified', htmlspecialchars($username))\n        );\n      }\n    break;\n    case 'delete':\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => 'access_denied'\n        );\n        return false;\n      }\n      $usernames = (array)$_data['username'];\n      foreach ($usernames as $username) {\n        if (empty(domain_admin('details', $username))) {\n          $_SESSION['return'][] = array(\n            'type' => 'danger',\n            'log' => array(__FUNCTION__, $_action, $_data_log),\n            'msg' => array('username_invalid', $username)\n          );\n          continue;\n        }\n        $stmt = $pdo->prepare(\"DELETE FROM `domain_admins` WHERE `username` = :username\");\n        $stmt->execute(array(\n          ':username' => $username,\n        ));\n        $stmt = $pdo->prepare(\"DELETE FROM `admin` WHERE `username` = :username\");\n        $stmt->execute(array(\n          ':username' => $username,\n        ));\n        $stmt = $pdo->prepare(\"DELETE FROM `da_acl` WHERE `username` = :username\");\n        $stmt->execute(array(\n          ':username' => $username,\n        ));\n        $stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `username` = :username\");\n        $stmt->execute(array(\n          ':username' => $username,\n        ));\n        $stmt = $pdo->prepare(\"DELETE FROM `fido2` WHERE `username` = :username\");\n        $stmt->execute(array(\n          ':username' => $username,\n        ));\n        $_SESSION['return'][] = array(\n          'type' => 'success',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => array('domain_admin_removed', htmlspecialchars($username))\n        );\n      }\n    break;\n    case 'get':\n      $domainadmins = array();\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data_log),\n          'msg' => 'access_denied'\n        );\n        return false;\n      }\n      $stmt = $pdo->query(\"SELECT DISTINCT\n        `username`\n          FROM `domain_admins`\n            WHERE `username` IN (\n              SELECT `username` FROM `admin`\n                WHERE `superadmin`!='1'\n            )\");\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n      while ($row = array_shift($rows)) {\n        $domainadmins[] = $row['username'];\n      }\n      return $domainadmins;\n    break;\n    case 'details':\n      $domainadmindata = array();\n      if ($_SESSION['mailcow_cc_role'] == \"domainadmin\" && $_data != $_SESSION['mailcow_cc_username']) {\n        return false;\n      }\n      elseif ($_SESSION['mailcow_cc_role'] != \"admin\" || !isset($_data)) {\n        return false;\n      }\n      if (!ctype_alnum(str_replace(array('_', '.', '-'), '', $_data))) {\n        return false;\n      }\n      $stmt = $pdo->prepare(\"SELECT\n        `tfa`.`active` AS `tfa_active`,\n        `domain_admins`.`username`,\n        `domain_admins`.`created`,\n        `domain_admins`.`active` AS `active`,\n        `admin`.`attributes` AS `attributes`\n          FROM `domain_admins`\n          LEFT OUTER JOIN `tfa` ON `tfa`.`username`=`domain_admins`.`username`\n          LEFT OUTER JOIN `admin` ON `admin`.`username`=`domain_admins`.`username`\n            WHERE `domain_admins`.`username`= :domain_admin\");\n      $stmt->execute(array(\n        ':domain_admin' => $_data\n      ));\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\n      if (empty($row)) {\n        return false;\n      }\n      $domainadmindata['username'] = $row['username'];\n      $domainadmindata['tfa_active'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];\n      $domainadmindata['tfa_active_int'] = (is_null($row['tfa_active'])) ? 0 : $row['tfa_active'];\n      $domainadmindata['active'] = $row['active'];\n      $domainadmindata['active_int'] = $row['active'];\n      $domainadmindata['created'] = $row['created'];\n      $domainadmindata['attributes'] = json_decode($row['attributes'], true) ?? array('force_tfa' => '0', 'force_pw_update' => '0');\n      // GET SELECTED\n      $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\n        WHERE `domain` IN (\n          SELECT `domain` FROM `domain_admins`\n            WHERE `username`= :domain_admin)\");\n      $stmt->execute(array(':domain_admin' => $_data));\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n      while($row = array_shift($rows)) {\n        $domainadmindata['selected_domains'][] = $row['domain'];\n      }\n      // GET UNSELECTED\n      $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\n        WHERE `domain` NOT IN (\n          SELECT `domain` FROM `domain_admins`\n            WHERE `username`= :domain_admin)\");\n      $stmt->execute(array(':domain_admin' => $_data));\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n      while($row = array_shift($rows)) {\n        $domainadmindata['unselected_domains'][] = $row['domain'];\n      }\n      if (!isset($domainadmindata['unselected_domains'])) {\n        $domainadmindata['unselected_domains'] = \"\";\n      }\n\n      return $domainadmindata;\n    break;\n  }\n}\nfunction domain_admin_sso($_action, $_data) {\n  global $pdo;\n\n  switch ($_action) {\n    case 'check':\n      $token = $_data;\n\n      $stmt = $pdo->prepare(\"SELECT `t1`.`username` FROM `da_sso` AS `t1` JOIN `admin` AS `t2` ON `t1`.`username` = `t2`.`username` WHERE `t1`.`token` = :token AND `t1`.`created` > DATE_SUB(NOW(), INTERVAL '30' SECOND) AND `t2`.`active` = 1 AND `t2`.`superadmin` = 0;\");\n      $stmt->execute(array(\n        ':token' => preg_replace('/[^a-zA-Z0-9-]/', '', $token)\n      ));\n      $return = $stmt->fetch(PDO::FETCH_ASSOC);\n      return empty($return['username']) ? false : $return['username'];\n    case 'issue':\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data),\n          'msg' => 'access_denied'\n        );\n        return false;\n      }\n\n      $username = $_data['username'];\n\n      $stmt = $pdo->prepare(\"SELECT `username` FROM `domain_admins`\n        WHERE `username` = :username\");\n      $stmt->execute(array(':username' => $username));\n      $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n\n      if ($num_results < 1) {\n        $_SESSION['return'][] = array(\n          'type' => 'danger',\n          'log' => array(__FUNCTION__, $_action, $_data),\n          'msg' => array('object_doesnt_exist', htmlspecialchars($username))\n        );\n        return false;\n      }\n\n      $token = implode('-', array(\n        strtoupper(bin2hex(random_bytes(3))),\n        strtoupper(bin2hex(random_bytes(3))),\n        strtoupper(bin2hex(random_bytes(3))),\n        strtoupper(bin2hex(random_bytes(3))),\n        strtoupper(bin2hex(random_bytes(3)))\n      ));\n\n      $stmt = $pdo->prepare(\"INSERT INTO `da_sso` (`username`, `token`)\n            VALUES (:username, :token)\");\n      $stmt->execute(array(\n        ':username' => $username,\n        ':token' => $token\n      ));\n\n      // perform cleanup\n      $pdo->query(\"DELETE FROM `da_sso` WHERE created < DATE_SUB(NOW(), INTERVAL '30' SECOND);\");\n\n      return ['token' => $token];\n    break;\n  }\n}\n"
  },
  {
    "path": "data/web/inc/functions.fail2ban.inc.php",
    "content": "<?php\r\nfunction fail2ban($_action, $_data = null, $_extra = null) {\r\n  global $redis;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'get':\r\n      $f2b_options = array();\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        return false;\r\n      }\r\n      try {\r\n        $f2b_options = json_decode($redis->Get('F2B_OPTIONS'), true);\r\n        $f2b_options['regex'] = json_decode($redis->Get('F2B_REGEX'), true);\r\n        $wl = $redis->hGetAll('F2B_WHITELIST');\r\n        if (is_array($wl)) {\r\n          foreach ($wl as $key => $value) {\r\n            $tmp_wl_data[] = $key;\r\n          }\r\n          if (isset($tmp_wl_data)) {\r\n            natsort($tmp_wl_data);\r\n            $f2b_options['whitelist'] = implode(PHP_EOL, (array)$tmp_wl_data);\r\n          }\r\n          else {\r\n            $f2b_options['whitelist'] = \"\";\r\n          }\r\n        }\r\n        else {\r\n          $f2b_options['whitelist'] = \"\";\r\n        }\r\n        $bl = $redis->hGetAll('F2B_BLACKLIST');\r\n        if (is_array($bl)) {\r\n          foreach ($bl as $key => $value) {\r\n            $tmp_bl_data[] = $key;\r\n          }\r\n          if (isset($tmp_bl_data)) {\r\n            natsort($tmp_bl_data);\r\n            $f2b_options['blacklist'] = implode(PHP_EOL, (array)$tmp_bl_data);\r\n          }\r\n          else {\r\n            $f2b_options['blacklist'] = \"\";\r\n          }\r\n        }\r\n        else {\r\n          $f2b_options['blacklist'] = \"\";\r\n        }\r\n        $pb = $redis->hGetAll('F2B_PERM_BANS');\r\n        if (is_array($pb)) {\r\n          foreach ($pb as $key => $value) {\r\n            $f2b_options['perm_bans'][] = array(\r\n                'network'=>$key,\r\n                'ip' => strtok($key,'/')\r\n            );\r\n\r\n          }\r\n        }\r\n        else {\r\n          $f2b_options['perm_bans'] = \"\";\r\n        }\r\n        $active_bans = $redis->hGetAll('F2B_ACTIVE_BANS');\r\n        $queue_unban = $redis->hGetAll('F2B_QUEUE_UNBAN');\r\n        if (is_array($active_bans)) {\r\n          foreach ($active_bans as $network => $banned_until) {\r\n            $queued_for_unban = (isset($queue_unban[$network]) && $queue_unban[$network] == 1) ? 1 : 0;\r\n            $difference = $banned_until - time();\r\n            $f2b_options['active_bans'][] = array(\r\n              'queued_for_unban' => $queued_for_unban,\r\n              'network' => $network,\r\n              'ip' => strtok($network,'/'),\r\n              'banned_until' => sprintf('%02dh %02dm %02ds', ($difference/3600), ($difference/60%60), $difference%60)\r\n            );\r\n          }\r\n        }\r\n        else {\r\n          $f2b_options['active_bans'] = \"\";\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return $f2b_options;\r\n    break;\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      // Start to read actions, if any\r\n      if (isset($_data['action'])) {\r\n        // Reset regex filters\r\n        if ($_data['action'] == \"reset-regex\") {\r\n          try {\r\n            $redis->Del('F2B_REGEX');\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          // Rules will also be recreated on log events, but rules may seem empty for a second in the UI\r\n          docker('post', 'netfilter-mailcow', 'restart');\r\n          $fail_count = 0;\r\n          $regex_result = json_decode($redis->Get('F2B_REGEX'), true);\r\n          while (empty($regex_result) && $fail_count < 10) {\r\n            $regex_result = json_decode($redis->Get('F2B_REGEX'), true);\r\n            $fail_count++;\r\n            sleep(1);\r\n          }\r\n          if ($fail_count >= 10) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('reset_f2b_regex')\r\n            );\r\n            return false;\r\n          }\r\n        }\r\n        elseif ($_data['action'] == \"edit-regex\") {\r\n          if (!empty($_data['regex'])) {\r\n            $rule_id = 1;\r\n            $regex_array = array();\r\n            foreach($_data['regex'] as $regex) {\r\n              $regex_array[$rule_id] = $regex;\r\n              $rule_id++;\r\n            }\r\n            if (!empty($regex_array)) {\r\n              $redis->Set('F2B_REGEX', json_encode($regex_array, JSON_UNESCAPED_SLASHES));\r\n            }\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('object_modified', htmlspecialchars($network))\r\n          );\r\n          return true;\r\n        }\r\n\r\n        // Start actions in dependency of network\r\n        if (!empty($_data['network'])) {\r\n          $networks = (array)$_data['network'];\r\n          foreach ($networks as $network) {\r\n            // Unban network\r\n            if ($_data['action'] == \"unban\") {\r\n              if (valid_network($network)) {\r\n                try {\r\n                  $redis->hSet('F2B_QUEUE_UNBAN', $network, 1);\r\n                }\r\n                catch (RedisException $e) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                    'msg' => array('redis_error', $e)\r\n                  );\r\n                  continue;\r\n                }\r\n              }\r\n            }\r\n            // Whitelist network\r\n            elseif ($_data['action'] == \"whitelist\") {\r\n              if (empty($network)) { continue; }\r\n              if (valid_network($network)) {\r\n                try {\r\n                  $redis->hSet('F2B_WHITELIST', $network, 1);\r\n                  $redis->hDel('F2B_BLACKLIST', $network, 1);\r\n                  $redis->hSet('F2B_QUEUE_UNBAN', $network, 1);\r\n                }\r\n                catch (RedisException $e) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                    'msg' => array('redis_error', $e)\r\n                  );\r\n                  continue;\r\n                }\r\n              }\r\n              else  {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('network_host_invalid', $network)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            // Blacklist network\r\n            elseif ($_data['action'] == \"blacklist\") {\r\n              if (empty($network)) { continue; }\r\n              if (valid_network($network) && !in_array($network, array(\r\n                '0.0.0.0',\r\n                '0.0.0.0/0',\r\n                getenv('IPV4_NETWORK') . '0/24',\r\n                getenv('IPV4_NETWORK') . '0',\r\n                getenv('IPV6_NETWORK')\r\n              ))) {\r\n                try {\r\n                  $redis->hSet('F2B_BLACKLIST', $network, 1);\r\n                  $redis->hDel('F2B_WHITELIST', $network, 1);\r\n                  //$response = docker('post', 'netfilter-mailcow', 'restart');\r\n                }\r\n                catch (RedisException $e) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                    'msg' => array('redis_error', $e)\r\n                  );\r\n                  continue;\r\n                }\r\n              }\r\n              else  {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('network_host_invalid', $network)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('object_modified', htmlspecialchars($network))\r\n            );\r\n          }\r\n          return true;\r\n        }\r\n      }\r\n      // Start default edit without specific action\r\n      $is_now = fail2ban('get');\r\n      if (!empty($is_now)) {\r\n        $ban_time = intval((isset($_data['ban_time'])) ? $_data['ban_time'] : $is_now['ban_time']);\r\n        $ban_time_increment = (isset($_data['ban_time_increment']) && $_data['ban_time_increment'] == \"1\") ? 1 : 0;\r\n        $max_attempts = intval((isset($_data['max_attempts'])) ? $_data['max_attempts'] : $is_now['max_attempts']);\r\n        $max_ban_time = intval((isset($_data['max_ban_time'])) ? $_data['max_ban_time'] : $is_now['max_ban_time']);\r\n        $retry_window = intval((isset($_data['retry_window'])) ? $_data['retry_window'] : $is_now['retry_window']);\r\n        $netban_ipv4 = intval((isset($_data['netban_ipv4'])) ? $_data['netban_ipv4'] : $is_now['netban_ipv4']);\r\n        $netban_ipv6 = intval((isset($_data['netban_ipv6'])) ? $_data['netban_ipv6'] : $is_now['netban_ipv6']);\r\n        $wl = (isset($_data['whitelist'])) ? $_data['whitelist'] : $is_now['whitelist'];\r\n        $bl = (isset($_data['blacklist'])) ? $_data['blacklist'] : $is_now['blacklist'];\r\n        $manage_external = (isset($_data['manage_external'])) ? intval($_data['manage_external']) : 0;\r\n      }\r\n      else {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $f2b_options = array();\r\n      $f2b_options['ban_time'] = ($ban_time < 60) ? 60 : $ban_time;\r\n      $f2b_options['ban_time_increment'] = ($ban_time_increment == 1) ? true : false;\r\n      $f2b_options['max_ban_time'] = ($max_ban_time < 60) ? 60 : $max_ban_time;\r\n      $f2b_options['netban_ipv4'] = ($netban_ipv4 < 8) ? 8 : $netban_ipv4;\r\n      $f2b_options['netban_ipv6'] = ($netban_ipv6 < 8) ? 8 : $netban_ipv6;\r\n      $f2b_options['netban_ipv4'] = ($netban_ipv4 > 32) ? 32 : $netban_ipv4;\r\n      $f2b_options['netban_ipv6'] = ($netban_ipv6 > 128) ? 128 : $netban_ipv6;\r\n      $f2b_options['max_attempts'] = ($max_attempts < 1) ? 1 : $max_attempts;\r\n      $f2b_options['retry_window'] = ($retry_window < 1) ? 1 : $retry_window;\r\n      $f2b_options['banlist_id'] = $is_now['banlist_id'];\r\n      $f2b_options['manage_external'] = ($manage_external > 0) ? 1 : 0;\r\n      try {\r\n        $redis->Set('F2B_OPTIONS', json_encode($f2b_options));\r\n        $redis->Del('F2B_WHITELIST');\r\n        $redis->Del('F2B_BLACKLIST');\r\n        if(!empty($wl)) {\r\n          $wl_array = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $wl));\r\n          $wl_array = array_filter($wl_array);\r\n          if (is_array($wl_array)) {\r\n            foreach ($wl_array as $wl_item) {\r\n              if (valid_network($wl_item) || valid_hostname($wl_item)) {\r\n                $redis->hSet('F2B_WHITELIST', $wl_item, 1);\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('network_host_invalid', $wl_item)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n        if(!empty($bl)) {\r\n          $bl_array = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $bl));\r\n          $bl_array = array_filter($bl_array);\r\n          if (is_array($bl_array)) {\r\n            foreach ($bl_array as $bl_item) {\r\n              if (valid_network($bl_item) && !in_array($bl_item, array(\r\n                '0.0.0.0',\r\n                '0.0.0.0/0',\r\n                getenv('IPV4_NETWORK') . '0/24',\r\n                getenv('IPV4_NETWORK') . '0',\r\n                getenv('IPV6_NETWORK')\r\n              ))) {\r\n                $redis->hSet('F2B_BLACKLIST', $bl_item, 1);\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('network_host_invalid', $bl_item)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n          }\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => 'f2b_modified'\r\n      );\r\n    break;\r\n    case 'banlist':\r\n      try {\r\n        $f2b_options = json_decode($redis->Get('F2B_OPTIONS'), true);\r\n      } \r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        http_response_code(500);\r\n        return false;\r\n      }\r\n      if (is_array($_extra)) {\r\n        $_extra = $_extra[0];\r\n      }\r\n      if ($_extra != $f2b_options['banlist_id']){\r\n        http_response_code(404);\r\n        return false;\r\n      }\r\n\r\n      switch ($_data) {\r\n        case 'get':\r\n          try {\r\n            $bl = $redis->hKeys('F2B_BLACKLIST');\r\n            $active_bans = $redis->hKeys('F2B_ACTIVE_BANS');\r\n          } \r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            http_response_code(500);\r\n            return false;\r\n          }\r\n          $banlist = implode(\"\\n\", array_merge($bl, $active_bans));\r\n          return $banlist;\r\n        break;\r\n        case 'refresh':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            return false;\r\n          }\r\n\r\n          $f2b_options['banlist_id'] = uuid4();\r\n          try {\r\n            $redis->Set('F2B_OPTIONS', json_encode($f2b_options));\r\n          } \r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log, $_extra),\r\n            'msg' => 'f2b_banlist_refreshed'\r\n          );\r\n          return true;\r\n        break;\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.fwdhost.inc.php",
    "content": "<?php\r\nfunction fwdhost($_action, $_data = null) {\r\n  require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/spf.inc.php';\r\n  global $redis;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'add':\r\n      global $lang;\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $source = $_data['hostname'];\r\n      $host = trim($_data['hostname']);\r\n      $filter_spam = (isset($_data['filter_spam']) && $_data['filter_spam'] == 1) ? 1 : 0;\r\n      if (preg_match('/^[0-9a-fA-F:\\/]+$/', $host)) { // IPv6 address\r\n        $hosts = array($host);\r\n      }\r\n      elseif (preg_match('/^[0-9\\.\\/]+$/', $host)) { // IPv4 address\r\n        $hosts = array($host);\r\n      }\r\n      else {\r\n        $hosts = get_outgoing_hosts_best_guess($host);\r\n      }\r\n      if (empty($hosts)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('invalid_host', htmlspecialchars($host))\r\n        );\r\n        return false;\r\n      }\r\n      foreach ($hosts as $host) {\r\n        try {\r\n          $redis->hSet('WHITELISTED_FWD_HOST', $host, $source);\r\n          if ($filter_spam == 0) {\r\n            $redis->hSet('KEEP_SPAM', $host, 1);\r\n          }\r\n          elseif ($redis->hGet('KEEP_SPAM', $host)) {\r\n            $redis->hDel('KEEP_SPAM', $host);\r\n          }\r\n        }\r\n        catch (RedisException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('redis_error', $e)\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => array('forwarding_host_added', htmlspecialchars(implode(', ', (array)$hosts)))\r\n      );\r\n    break;\r\n    case 'edit':\r\n      global $lang;\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $fwdhosts = (array)$_data['fwdhost'];\r\n      foreach ($fwdhosts as $fwdhost) {\r\n        $is_now = fwdhost('details', $fwdhost);\r\n        if (!empty($is_now)) {\r\n          $keep_spam = (isset($_data['keep_spam'])) ? $_data['keep_spam'] : $is_now['keep_spam'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        try {\r\n          if ($keep_spam == 1) {\r\n            $redis->hSet('KEEP_SPAM', $fwdhost, 1);\r\n          }\r\n          else {\r\n            $redis->hDel('KEEP_SPAM', $fwdhost);\r\n          }\r\n        }\r\n        catch (RedisException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('redis_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('object_modified', htmlspecialchars($fwdhost))\r\n        );\r\n      }\r\n    break;\r\n    case 'delete':\r\n      $hosts = (array)$_data['forwardinghost'];\r\n      foreach ($hosts as $host) {\r\n        try {\r\n          $redis->hDel('WHITELISTED_FWD_HOST', $host);\r\n          $redis->hDel('KEEP_SPAM', $host);\r\n        }\r\n        catch (RedisException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('redis_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('forwarding_host_removed', htmlspecialchars($host))\r\n        );\r\n      }\r\n    break;\r\n    case 'get':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        return false;\r\n      }\r\n      $fwdhostsdata = array();\r\n      try {\r\n        $fwd_hosts = $redis->hGetAll('WHITELISTED_FWD_HOST');\r\n        if (!empty($fwd_hosts)) {\r\n        foreach ($fwd_hosts as $fwd_host => $source) {\r\n          $keep_spam = ($redis->hGet('KEEP_SPAM', $fwd_host)) ? \"yes\" : \"no\";\r\n          $fwdhostsdata[] = array(\r\n            'host' => $fwd_host,\r\n            'source' => $source,\r\n            'keep_spam' => $keep_spam\r\n          );\r\n        }\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return $fwdhostsdata;\r\n    break;\r\n    case 'details':\r\n      $fwdhostdetails = array();\r\n      if (!isset($_data) || empty($_data)) {\r\n        return false;\r\n      }\r\n      try {\r\n        if ($source = $redis->hGet('WHITELISTED_FWD_HOST', $_data)) {\r\n          $fwdhostdetails['host'] = $_data;\r\n          $fwdhostdetails['source'] = $source;\r\n          $fwdhostdetails['keep_spam'] = ($redis->hGet('KEEP_SPAM', $_data)) ? \"yes\" : \"no\";\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return $fwdhostdetails;\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.inc.php",
    "content": "<?php\r\nuse PHPMailer\\PHPMailer\\PHPMailer;\r\nuse PHPMailer\\PHPMailer\\SMTP;\r\nuse PHPMailer\\PHPMailer\\Exception;\r\nfunction is_valid_regex($exp) {\r\n  return @preg_match($exp, '') !== false;\r\n}\r\nfunction isset_has_content($var) {\r\n  if (isset($var) && $var != \"\") {\r\n    return true;\r\n  }\r\n  else {\r\n    return false;\r\n  }\r\n}\r\nfunction readable_random_string($length = 8) {\r\n  $string = '';\r\n  $vowels = array('a', 'e', 'i', 'o', 'u');\r\n  $consonants = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z');\r\n  $max = $length / 2;\r\n  for ($i = 1; $i <= $max; $i++) {\r\n    $string .= $consonants[rand(0,19)];\r\n    $string .= $vowels[rand(0,4)];\r\n  }\r\n  return $string;\r\n}\r\n// Validates ips and cidrs\r\nfunction valid_network($network) {\r\n  if (filter_var($network, FILTER_VALIDATE_IP)) {\r\n    return true;\r\n  }\r\n  $parts = explode('/', $network);\r\n  if (count($parts) != 2) {\r\n    return false;\r\n  }\r\n  $ip = $parts[0];\r\n  $netmask = $parts[1];\r\n  if (!preg_match(\"/^\\d+$/\", $netmask)){\r\n    return false;\r\n  }\r\n  $netmask = intval($parts[1]);\r\n  if ($netmask < 0) {\r\n    return false;\r\n  }\r\n  if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {\r\n    return $netmask <= 32;\r\n  }\r\n  if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) {\r\n    return $netmask <= 128;\r\n  }\r\n  return false;\r\n}\r\nfunction valid_hostname($hostname) {\r\n  return filter_var($hostname, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME);\r\n}\r\n// Thanks to https://stackoverflow.com/a/49373789\r\n// Validates exact ip matches and ip-in-cidr, ipv4 and ipv6\r\nfunction ip_acl($ip, $networks) {\r\n  foreach($networks as $network) {\r\n    if (filter_var($network, FILTER_VALIDATE_IP)) {\r\n      if ($ip == $network) {\r\n        return true;\r\n      }\r\n      else {\r\n        continue;\r\n      }\r\n    }\r\n    $ipb = inet_pton($ip);\r\n    $iplen = strlen($ipb);\r\n    if (strlen($ipb) < 4) {\r\n      continue;\r\n    }\r\n    $ar = explode('/', $network);\r\n    $ip1 = $ar[0];\r\n    $ip1b = inet_pton($ip1);\r\n    $ip1len = strlen($ip1b);\r\n    if ($ip1len != $iplen) {\r\n      continue;\r\n    }\r\n    if (count($ar)>1) {\r\n      $bits=(int)($ar[1]);\r\n    }\r\n    else {\r\n      $bits = $iplen * 8;\r\n    }\r\n    for ($c=0; $bits>0; $c++) {\r\n      $bytemask = ($bits < 8) ? 0xff ^ ((1 << (8-$bits))-1) : 0xff;\r\n      if (((ord($ipb[$c]) ^ ord($ip1b[$c])) & $bytemask) != 0) {\r\n        continue 2;\r\n      }\r\n      $bits-=8;\r\n    }\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\nfunction hash_password($password) {\r\n  // default_pass_scheme is determined in vars.inc.php (or corresponding local file)\r\n  // in case default pass scheme is not defined, falling back to BLF-CRYPT.\r\n  global $default_pass_scheme;\r\n  $pw_hash = NULL;\r\n  // support pre-hashed passwords\r\n  if (preg_match('/^{(ARGON2I|ARGON2ID|BLF-CRYPT|CLEAR|CLEARTEXT|CRYPT|DES-CRYPT|LDAP-MD5|MD5|MD5-CRYPT|PBKDF2|PLAIN|PLAIN-MD4|PLAIN-MD5|PLAIN-TRUNC|PLAIN-TRUNC|SHA|SHA1|SHA256|SHA256-CRYPT|SHA512|SHA512-CRYPT|SMD5|SSHA|SSHA256|SSHA512)}/i', $password)) {\r\n    $pw_hash = $password;\r\n  }\r\n  else {\r\n    switch (strtoupper($default_pass_scheme)) {\r\n      case \"SSHA\":\r\n        $salt_str = bin2hex(openssl_random_pseudo_bytes(8));\r\n        $pw_hash = \"{SSHA}\".base64_encode(hash('sha1', $password . $salt_str, true) . $salt_str);\r\n        break;\r\n      case \"SSHA256\":\r\n        $salt_str = bin2hex(openssl_random_pseudo_bytes(8));\r\n        $pw_hash = \"{SSHA256}\".base64_encode(hash('sha256', $password . $salt_str, true) . $salt_str);\r\n        break;\r\n      case \"SSHA512\":\r\n        $salt_str = bin2hex(openssl_random_pseudo_bytes(8));\r\n        $pw_hash = \"{SSHA512}\".base64_encode(hash('sha512', $password . $salt_str, true) . $salt_str);\r\n        break;\r\n      case \"BLF-CRYPT\":\r\n      default:\r\n        $pw_hash = \"{BLF-CRYPT}\" . password_hash($password, PASSWORD_BCRYPT);\r\n        break;\r\n    }\r\n  }\r\n  return $pw_hash;\r\n}\r\nfunction password_complexity($_action, $_data = null) {\r\n  global $redis;\r\n  global $lang;\r\n  switch ($_action) {\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $is_now = password_complexity('get');\r\n      if (!empty($is_now)) {\r\n        $length = (isset($_data['length']) && intval($_data['length']) >= 3) ? intval($_data['length']) : $is_now['length'];\r\n        $chars = (isset($_data['chars'])) ? intval($_data['chars']) : $is_now['chars'];\r\n        $lowerupper = (isset($_data['lowerupper'])) ? intval($_data['lowerupper']) : $is_now['lowerupper'];\r\n        $special_chars = (isset($_data['special_chars'])) ? intval($_data['special_chars']) : $is_now['special_chars'];\r\n        $numbers = (isset($_data['numbers'])) ? intval($_data['numbers']) : $is_now['numbers'];\r\n      }\r\n      try {\r\n        $redis->hMSet('PASSWD_POLICY', [\r\n          'length' => $length,\r\n          'chars' => $chars,\r\n          'special_chars' => $special_chars,\r\n          'lowerupper' => $lowerupper,\r\n          'numbers' => $numbers\r\n        ]);\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data),\r\n        'msg' => 'password_policy_saved'\r\n      );\r\n    break;\r\n    case 'get':\r\n      try {\r\n        $length = $redis->hGet('PASSWD_POLICY', 'length');\r\n        $chars = $redis->hGet('PASSWD_POLICY', 'chars');\r\n        $special_chars = $redis->hGet('PASSWD_POLICY', 'special_chars');\r\n        $lowerupper = $redis->hGet('PASSWD_POLICY', 'lowerupper');\r\n        $numbers = $redis->hGet('PASSWD_POLICY', 'numbers');\r\n        return array(\r\n          'length' => $length,\r\n          'chars' => $chars,\r\n          'special_chars' => $special_chars,\r\n          'lowerupper' => $lowerupper,\r\n          'numbers' => $numbers\r\n        );\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return false;\r\n    break;\r\n    case 'html':\r\n      $policies = password_complexity('get');\r\n      foreach ($policies as $name => $value) {\r\n        if ($value != 0) {\r\n          $policy_text[] = sprintf($lang['admin'][\"password_policy_$name\"], $value);\r\n        }\r\n      }\r\n      return '<p class=\"help-block small\">- ' . implode('<br>- ', (array)$policy_text) . '</p>';\r\n    break;\r\n  }\r\n}\r\n\r\nfunction password_generate(){\r\n  $password_complexity = password_complexity('get');\r\n  $min_length = max(16, intval($password_complexity['length']));\r\n\r\n  $lowercase = range('a', 'z');\r\n  $uppercase = range('A', 'Z');\r\n  $digits = range(0, 9);\r\n  $special_chars = str_split('!@#$%^&*()?=');\r\n\r\n  $password = [\r\n    $lowercase[random_int(0, count($lowercase) - 1)],\r\n    $uppercase[random_int(0, count($uppercase) - 1)],\r\n    $digits[random_int(0, count($digits) - 1)],\r\n    $special_chars[random_int(0, count($special_chars) - 1)],\r\n  ];\r\n\r\n  $all = array_merge($lowercase, $uppercase, $digits, $special_chars);\r\n\r\n  while (count($password) < $min_length) {\r\n    $password[] = $all[random_int(0, count($all) - 1)];\r\n  }\r\n\r\n  // Cryptographically secure shuffle using Fisher-Yates algorithm\r\n  $count = count($password);\r\n  for ($i = $count - 1; $i > 0; $i--) {\r\n    $j = random_int(0, $i);\r\n    $temp = $password[$i];\r\n    $password[$i] = $password[$j];\r\n    $password[$j] = $temp;\r\n  }\r\n\r\n  return implode('', $password);\r\n\r\n}\r\n\r\nfunction password_check($password1, $password2) {\r\n  $password_complexity = password_complexity('get');\r\n\r\n  if (empty($password1) || empty($password2)) {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_type),\r\n      'msg' => 'password_complexity'\r\n    );\r\n    return false;\r\n  }\r\n\r\n  if ($password1 != $password2) {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_type),\r\n      'msg' => 'password_mismatch'\r\n    );\r\n    return false;\r\n  }\r\n\r\n  $given_password['length'] = strlen($password1);\r\n  $given_password['special_chars'] = preg_match('/[^a-zA-Z\\d]/', $password1);\r\n  $given_password['chars'] = preg_match('/[a-zA-Z]/',$password1);\r\n  $given_password['numbers'] = preg_match('/\\d/', $password1);\r\n  $lower = strlen(preg_replace(\"/[^a-z]/\", '', $password1));\r\n  $upper = strlen(preg_replace(\"/[^A-Z]/\", '', $password1));\r\n  $given_password['lowerupper'] = ($lower > 0 && $upper > 0) ? true : false;\r\n\r\n  if (\r\n    ($given_password['length'] < $password_complexity['length']) ||\r\n    ($password_complexity['special_chars'] == 1 && (intval($given_password['special_chars']) != $password_complexity['special_chars'])) ||\r\n    ($password_complexity['chars'] == 1 && (intval($given_password['chars']) != $password_complexity['chars'])) ||\r\n    ($password_complexity['numbers'] == 1 && (intval($given_password['numbers']) != $password_complexity['numbers'])) ||\r\n    ($password_complexity['lowerupper'] == 1 && (intval($given_password['lowerupper']) != $password_complexity['lowerupper']))\r\n  ) {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_type),\r\n      'msg' => 'password_complexity'\r\n    );\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\nfunction last_login($action, $username, $sasl_limit_days = 7, $ui_offset = 1) {\r\n  global $pdo;\r\n  global $redis;\r\n  $sasl_limit_days = intval($sasl_limit_days);\r\n  switch ($action) {\r\n    case 'get':\r\n      if (filter_var($username, FILTER_VALIDATE_EMAIL) && hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n        $stmt = $pdo->prepare('SELECT `real_rip`, MAX(`datetime`) as `datetime`, `service`, `app_password`, MAX(`app_passwd`.`name`) as `app_password_name` FROM `sasl_log`\r\n          LEFT OUTER JOIN `app_passwd` on `sasl_log`.`app_password` = `app_passwd`.`id`\r\n          WHERE `username` = :username\r\n            AND HOUR(TIMEDIFF(NOW(), `datetime`)) < :sasl_limit_days\r\n              GROUP BY `real_rip`, `service`, `app_password`\r\n              ORDER BY `datetime` DESC;');\r\n        $stmt->execute(array(':username' => $username, ':sasl_limit_days' => ($sasl_limit_days * 24)));\r\n        $sasl = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n        foreach ($sasl as $k => $v) {\r\n          if (!filter_var($sasl[$k]['real_rip'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {\r\n            $sasl[$k]['real_rip'] = 'Web/EAS/Internal (' . $sasl[$k]['real_rip'] . ')';\r\n          }\r\n          elseif (filter_var($sasl[$k]['real_rip'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {\r\n            try {\r\n              $sasl[$k]['location'] = $redis->hGet('IP_SHORTCOUNTRY', $sasl[$k]['real_rip']);\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              return false;\r\n            }\r\n            if (!$sasl[$k]['location']) {\r\n              $curl = curl_init();\r\n              curl_setopt($curl, CURLOPT_URL,\"https://dfdata.bella.network/country/\" . $sasl[$k]['real_rip']);\r\n              curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n              curl_setopt($curl, CURLOPT_USERAGENT, 'Moocow');\r\n              curl_setopt($curl, CURLOPT_TIMEOUT, 5);\r\n              $ip_data = curl_exec($curl);\r\n              if (!curl_errno($curl)) {\r\n                $ip_data_array = json_decode($ip_data, true);\r\n                if ($ip_data_array !== false and !empty($ip_data_array['shortcountry'])) {\r\n                  $sasl[$k]['location'] = $ip_data_array['shortcountry'];\r\n                    try {\r\n                      $redis->hSet('IP_SHORTCOUNTRY', $sasl[$k]['real_rip'], $ip_data_array['shortcountry']);\r\n                    }\r\n                    catch (RedisException $e) {\r\n                      $_SESSION['return'][] = array(\r\n                        'type' => 'danger',\r\n                        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                        'msg' => array('redis_error', $e)\r\n                      );\r\n                      curl_close($curl);\r\n                      return false;\r\n                    }\r\n                }\r\n              }\r\n              curl_close($curl);\r\n            }\r\n          }\r\n        }\r\n      }\r\n      else {\r\n        $sasl = array();\r\n      }\r\n      if ($_SESSION['mailcow_cc_role'] == \"admin\" || $username == $_SESSION['mailcow_cc_username']) {\r\n        $stmt = $pdo->prepare('SELECT `remote`, `time` FROM `logs`\r\n          WHERE JSON_EXTRACT(`call`, \"$[0]\") = \"check_login\"\r\n            AND JSON_EXTRACT(`call`, \"$[1]\") = :username\r\n            AND `type` = \"success\" ORDER BY `time` DESC LIMIT 1 OFFSET :offset');\r\n        $stmt->execute(array(\r\n          ':username' => $username,\r\n          ':offset' => $ui_offset\r\n        ));\r\n        $ui = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      }\r\n      else {\r\n        $ui = array();\r\n      }\r\n\r\n      return array('ui' => $ui, 'sasl' => $sasl);\r\n    break;\r\n    case 'reset':\r\n      if (filter_var($username, FILTER_VALIDATE_EMAIL) && hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n        $stmt = $pdo->prepare('DELETE FROM `sasl_log`\r\n          WHERE `username` = :username');\r\n        $stmt->execute(array(':username' => $username));\r\n      }\r\n      if ($_SESSION['mailcow_cc_role'] == \"admin\" || $username == $_SESSION['mailcow_cc_username']) {\r\n        $stmt = $pdo->prepare('DELETE FROM `logs`\r\n          WHERE JSON_EXTRACT(`call`, \"$[0]\") = \"check_login\"\r\n            AND JSON_EXTRACT(`call`, \"$[1]\") = :username\r\n            AND `type` = \"success\"');\r\n        $stmt->execute(array(':username' => $username));\r\n      }\r\n      return true;\r\n    break;\r\n  }\r\n\r\n}\r\nfunction set_sasl_log($username, $real_rip, $service){\r\n  global $pdo;\r\n\r\n  try {\r\n    if (!empty($_SESSION['app_passwd_id'])) {\r\n      $app_password = $_SESSION['app_passwd_id'];\r\n    } else {\r\n      $app_password = 0;\r\n    }\r\n\r\n    $stmt = $pdo->prepare('REPLACE INTO `sasl_log` (`username`, `real_rip`, `service`, `app_password`) VALUES (:username, :real_rip, :service, :app_password)');\r\n    $stmt->execute(array(\r\n      ':username' => $username,\r\n      ':real_rip' => $real_rip,\r\n      ':service' => $service,\r\n      ':app_password' => $app_password\r\n    ));\r\n  } catch (PDOException $e) {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_data_log),\r\n      'msg' => array('mysql_error', $e)\r\n    );\r\n    return false;\r\n  }\r\n\r\n  return true;\r\n}\r\nfunction flush_memcached() {\r\n  try {\r\n    $m = new Memcached();\r\n    $m->addServer('memcached', 11211);\r\n    $m->flush();\r\n  }\r\n  catch ( Exception $e ) {\r\n    // Dunno\r\n  }\r\n}\r\nfunction sys_mail($_data) {\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  $excludes = $_data['mass_exclude'];\r\n  $includes = $_data['mass_include'];\r\n  $mailboxes = array();\r\n  $mass_from = $_data['mass_from'];\r\n  $mass_text = $_data['mass_text'];\r\n  $mass_html = $_data['mass_html'];\r\n  $mass_subject = $_data['mass_subject'];\r\n  if (!filter_var($mass_from, FILTER_VALIDATE_EMAIL)) {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'from_invalid'\r\n    );\r\n    return false;\r\n  }\r\n  if (empty($mass_subject)) {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'subject_empty'\r\n    );\r\n    return false;\r\n  }\r\n  if (empty($mass_text)) {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'text_empty'\r\n    );\r\n    return false;\r\n  }\r\n  $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));\r\n  foreach ($domains as $domain) {\r\n    foreach (mailbox('get', 'mailboxes', $domain) as $mailbox) {\r\n      $mailboxes[] = $mailbox;\r\n    }\r\n  }\r\n  if (!empty($includes)) {\r\n    $rcpts = array_intersect($mailboxes, $includes);\r\n  }\r\n  elseif (!empty($excludes)) {\r\n    $rcpts = array_diff($mailboxes, $excludes);\r\n  }\r\n  else {\r\n    $rcpts = $mailboxes;\r\n  }\r\n  if (!empty($rcpts)) {\r\n    ini_set('max_execution_time', 0);\r\n    ini_set('max_input_time', 0);\r\n    $mail = new PHPMailer;\r\n    $mail->Timeout = 10;\r\n    $mail->SMTPOptions = array(\r\n      'ssl' => array(\r\n        'verify_peer' => false,\r\n        'verify_peer_name' => false,\r\n        'allow_self_signed' => true\r\n      )\r\n    );\r\n    $mail->isSMTP();\r\n    $mail->Host = 'dovecot-mailcow';\r\n    $mail->SMTPAuth = false;\r\n    $mail->Port = 24;\r\n    $mail->setFrom($mass_from);\r\n    $mail->Subject = $mass_subject;\r\n    $mail->CharSet =\"UTF-8\";\r\n    if (!empty($mass_html)) {\r\n      $mail->Body = $mass_html;\r\n      $mail->AltBody = $mass_text;\r\n    }\r\n    else {\r\n      $mail->Body = $mass_text;\r\n    }\r\n    $mail->XMailer = 'MooMassMail';\r\n    foreach ($rcpts as $rcpt) {\r\n      $mail->AddAddress($rcpt);\r\n      if (!$mail->send()) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'warning',\r\n          'log' => array(__FUNCTION__),\r\n          'msg' => 'Mailer error (RCPT \"' . htmlspecialchars($rcpt) . '\"): ' . str_replace('https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting', '', $mail->ErrorInfo)\r\n        );\r\n      }\r\n      $mail->ClearAllRecipients();\r\n    }\r\n  }\r\n  $_SESSION['return'][] =  array(\r\n    'type' => 'success',\r\n    'log' => array(__FUNCTION__),\r\n    'msg' => 'Mass mail job completed, sent ' . count($rcpts) . ' mails'\r\n  );\r\n}\r\nfunction logger($_data = false) {\r\n  /*\r\n  logger() will be called as last function\r\n  To manually log a message, logger needs to be called like below.\r\n\r\n  logger(array(\r\n    'return' => array(\r\n      array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__),\r\n        'msg' => $err\r\n      )\r\n    )\r\n  ));\r\n\r\n  These messages will not be printed as alert box.\r\n  To do so, push them to $_SESSION['return'] and do not call logger as they will be included automatically:\r\n\r\n  $_SESSION['return'][] =  array(\r\n    'type' => 'danger',\r\n    'log' => array(__FUNCTION__, $user, '*'),\r\n    'msg' => $err\r\n  );\r\n  */\r\n  global $pdo;\r\n  if (!$_data) {\r\n    $_data = $_SESSION;\r\n  }\r\n  if (!empty($_data['return'])) {\r\n    $task = substr(strtoupper(md5(uniqid(rand(), true))), 0, 6);\r\n    foreach ($_data['return'] as $return) {\r\n      $type = $return['type'];\r\n      $msg = null;\r\n      if (isset($return['msg'])) {\r\n        $msg = json_encode($return['msg'], JSON_UNESCAPED_UNICODE);\r\n      }\r\n      $call = null;\r\n      if (isset($return['log'])) {\r\n        $call = json_encode($return['log'], JSON_UNESCAPED_UNICODE);\r\n      }\r\n      if (!empty($_SESSION[\"dual-login\"][\"username\"])) {\r\n        $user = $_SESSION[\"dual-login\"][\"username\"] . ' => ' . $_SESSION['mailcow_cc_username'];\r\n        $role = $_SESSION[\"dual-login\"][\"role\"] . ' => ' . $_SESSION['mailcow_cc_role'];\r\n      }\r\n      elseif (!empty($_SESSION['mailcow_cc_username'])) {\r\n        $user = $_SESSION['mailcow_cc_username'];\r\n        $role = $_SESSION['mailcow_cc_role'];\r\n      }\r\n      else {\r\n        $user = 'unauthenticated';\r\n        $role = 'unauthenticated';\r\n      }\r\n      // We cannot log when logs is missing...\r\n      try {\r\n        $stmt = $pdo->prepare(\"INSERT INTO `logs` (`type`, `task`, `msg`, `call`, `user`, `role`, `remote`, `time`) VALUES\r\n          (:type, :task, :msg, :call, :user, :role, :remote, UNIX_TIMESTAMP())\");\r\n        $stmt->execute(array(\r\n          ':type' => $type,\r\n          ':task' => $task,\r\n          ':call' => $call,\r\n          ':msg' => $msg,\r\n          ':user' => $user,\r\n          ':role' => $role,\r\n          ':remote' => get_remote_ip()\r\n        ));\r\n      }\r\n      catch (PDOException $e) {\r\n        # handle the exception here, as the exception handler function results in a white page\r\n        error_log($e->getMessage(), 0);\r\n      }\r\n    }\r\n  }\r\n  else {\r\n    return true;\r\n  }\r\n}\r\nfunction hasDomainAccess($username, $role, $domain) {\r\n  global $pdo;\r\n  if (empty($domain) || !is_valid_domain_name($domain)) {\r\n    return false;\r\n  }\r\n  if (isset($_SESSION['access_all_exception']) && $_SESSION['access_all_exception'] == \"1\") {\r\n    return true;\r\n  }\r\n  if (!filter_var($username, FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {\r\n    return false;\r\n  }\r\n  if ($role != 'admin' && $role != 'domainadmin') {\r\n    return false;\r\n  }\r\n  if ($role == 'admin') {\r\n    $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n      WHERE `domain` = :domain\");\r\n    $stmt->execute(array(':domain' => $domain));\r\n    $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n    $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain`\r\n      WHERE `alias_domain` = :domain\");\r\n    $stmt->execute(array(':domain' => $domain));\r\n    $num_results = $num_results + count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n    if ($num_results != 0) {\r\n      return true;\r\n    }\r\n  }\r\n  elseif ($role == 'domainadmin') {\r\n    $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain_admins`\r\n    WHERE (\r\n      `active`='1'\r\n      AND `username` = :username\r\n      AND (`domain` = :domain1 OR `domain` = (SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain2))\r\n    )\");\r\n    $stmt->execute(array(':username' => $username, ':domain1' => $domain, ':domain2' => $domain));\r\n    $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n    if (!empty($num_results)) {\r\n      return true;\r\n    }\r\n  }\r\n  return false;\r\n}\r\nfunction hasMailboxObjectAccess($username, $role, $object) {\r\n  global $pdo;\r\n  if (isset($_SESSION['access_all_exception']) && $_SESSION['access_all_exception'] == \"1\") {\r\n    return true;\r\n  }\r\n  if (empty($username) || empty($role) || empty($object)) {\r\n    return false;\r\n  }\r\n  if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {\r\n    return false;\r\n  }\r\n  if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') {\r\n    return false;\r\n  }\r\n  if ($username == $object) {\r\n    return true;\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT `domain` FROM `mailbox` WHERE `username` = :object\");\r\n  $stmt->execute(array(':object' => $object));\r\n  $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n  if (isset($row['domain']) && hasDomainAccess($username, $role, $row['domain'])) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\n// does also verify mailboxes as a mailbox is a alias == goto\r\nfunction hasAliasObjectAccess($username, $role, $object) {\r\n  global $pdo;\r\n  if (isset($_SESSION['access_all_exception']) && $_SESSION['access_all_exception'] == \"1\") {\r\n    return true;\r\n  }\r\n  if (empty($username) || empty($role) || empty($object)) {\r\n    return false;\r\n  }\r\n  if (!filter_var(html_entity_decode(rawurldecode($username)), FILTER_VALIDATE_EMAIL) && !ctype_alnum(str_replace(array('_', '.', '-'), '', $username))) {\r\n    return false;\r\n  }\r\n  if ($role != 'admin' && $role != 'domainadmin' && $role != 'user') {\r\n    return false;\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT `domain` FROM `alias` WHERE `address` = :object\");\r\n  $stmt->execute(array(':object' => $object));\r\n  $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n  if (isset($row['domain']) && hasDomainAccess($username, $role, $row['domain'])) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\nfunction hasACLAccess($type) {\r\n  if (isset($_SESSION['access_all_exception']) && $_SESSION['access_all_exception'] == \"1\") {\r\n    return true;\r\n  }\r\n  if (isset($_SESSION['acl'][$type]) && $_SESSION['acl'][$type] == \"1\") {\r\n    return true;\r\n  }\r\n\r\n  return false;\r\n}\r\nfunction pem_to_der($pem_key) {\r\n  // Need to remove BEGIN/END PUBLIC KEY\r\n  $lines = explode(\"\\n\", trim($pem_key));\r\n  unset($lines[count($lines)-1]);\r\n  unset($lines[0]);\r\n  return base64_decode(implode('', $lines));\r\n}\r\nfunction expand_ipv6($ip) {\r\n  $hex = unpack(\"H*hex\", inet_pton($ip));\r\n  $ip = substr(preg_replace(\"/([A-f0-9]{4})/\", \"$1:\", $hex['hex']), 0, -1);\r\n  return $ip;\r\n}\r\nfunction generate_tlsa_digest($hostname, $port, $starttls = null) {\r\n  if (!is_valid_domain_name($hostname)) {\r\n    return \"Not a valid hostname\";\r\n  }\r\n  if (empty($starttls)) {\r\n    $context = stream_context_create(array(\"ssl\" => array(\"capture_peer_cert\" => true, 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true)));\r\n    $stream = stream_socket_client('ssl://' . $hostname . ':' . $port, $error_nr, $error_msg, 5, STREAM_CLIENT_CONNECT, $context);\r\n    if (!$stream) {\r\n      $error_msg = isset($error_msg) ? $error_msg : '-';\r\n      return $error_nr . ': ' . $error_msg;\r\n    }\r\n  }\r\n  else {\r\n    $stream = stream_socket_client('tcp://' . $hostname . ':' . $port, $error_nr, $error_msg, 5);\r\n    if (!$stream) {\r\n      return $error_nr . ': ' . $error_msg;\r\n    }\r\n    $banner = fread($stream, 512 );\r\n    if (preg_match(\"/^220/i\", $banner)) { // SMTP\r\n      fwrite($stream,\"HELO tlsa.generator.local\\r\\n\");\r\n      fread($stream, 512);\r\n      fwrite($stream,\"STARTTLS\\r\\n\");\r\n      fread($stream, 512);\r\n    }\r\n    elseif (preg_match(\"/imap.+starttls/i\", $banner)) { // IMAP\r\n      fwrite($stream,\"A1 STARTTLS\\r\\n\");\r\n      fread($stream, 512);\r\n    }\r\n    elseif (preg_match(\"/^\\+OK/\", $banner)) { // POP3\r\n      fwrite($stream,\"STLS\\r\\n\");\r\n      fread($stream, 512);\r\n    }\r\n    elseif (preg_match(\"/^OK/m\", $banner)) { // Sieve\r\n      fwrite($stream,\"STARTTLS\\r\\n\");\r\n      fread($stream, 512);\r\n    }\r\n    else {\r\n      return 'Unknown banner: \"' . htmlspecialchars(trim($banner)) . '\"';\r\n    }\r\n    // Upgrade connection\r\n    stream_set_blocking($stream, true);\r\n    stream_context_set_option($stream, 'ssl', 'capture_peer_cert', true);\r\n    stream_context_set_option($stream, 'ssl', 'verify_peer', false);\r\n    stream_context_set_option($stream, 'ssl', 'verify_peer_name', false);\r\n    stream_context_set_option($stream, 'ssl', 'allow_self_signed', true);\r\n    stream_socket_enable_crypto($stream, true, STREAM_CRYPTO_METHOD_ANY_CLIENT);\r\n    stream_set_blocking($stream, false);\r\n  }\r\n  $params = stream_context_get_params($stream);\r\n  if (!empty($params['options']['ssl']['peer_certificate'])) {\r\n    $key_resource = openssl_pkey_get_public($params['options']['ssl']['peer_certificate']);\r\n    // We cannot get ['rsa']['n'], the binary data would contain BEGIN/END PUBLIC KEY\r\n    $key_data = openssl_pkey_get_details($key_resource)['key'];\r\n    return '3 1 1 ' . openssl_digest(pem_to_der($key_data), 'sha256');\r\n  }\r\n  else {\r\n    return 'Error: Cannot read peer certificate';\r\n  }\r\n}\r\nfunction alertbox_log_parser($_data) {\r\n  global $lang;\r\n  if (isset($_data['return'])) {\r\n    foreach ($_data['return'] as $return) {\r\n      // Get type\r\n      $type = $return['type'];\r\n      // If a lang[type][msg] string exists, use it as message\r\n      if (isset($return['type']) && isset($return['msg']) && !is_array($return['msg'])) {\r\n        if (isset($lang[$return['type']][$return['msg']])) {\r\n          $msg = $lang[$return['type']][$return['msg']];\r\n        }\r\n        else {\r\n          $msg = $return['msg'];\r\n        }\r\n      }\r\n      // If msg is an array, use first element as language string and run printf on it with remaining array elements\r\n      elseif (is_array($return['msg'])) {\r\n        $msg = array_shift($return['msg']);\r\n        $msg = vsprintf(\r\n          $lang[$return['type']][$msg],\r\n          $return['msg']\r\n        );\r\n      }\r\n      else {\r\n        $msg = '-';\r\n      }\r\n      $log_array[] = array('msg' => $msg, 'type' => json_encode($type));\r\n    }\r\n    if (!empty($log_array)) {\r\n      return $log_array;\r\n    }\r\n  }\r\n  return false;\r\n}\r\nfunction verify_salted_hash($hash, $password, $algo, $salt_length) {\r\n  // Decode hash\r\n  $dhash = base64_decode($hash);\r\n  // Get first n bytes of binary which equals a SSHA hash\r\n  $ohash = substr($dhash, 0, $salt_length);\r\n  // Remove SSHA hash from decoded hash to get original salt string\r\n  $osalt = str_replace($ohash, '', $dhash);\r\n  // Check single salted SSHA hash against extracted hash\r\n  if (hash_equals(hash($algo, $password . $osalt, true), $ohash)) {\r\n    return true;\r\n  }\r\n  return false;\r\n}\r\nfunction verify_hash($hash, $password) {\r\n  if (preg_match('/^{(.+)}(.+)/i', $hash, $hash_array)) {\r\n    $scheme = strtoupper($hash_array[1]);\r\n    $hash = $hash_array[2];\r\n    switch ($scheme) {\r\n      case \"ARGON2I\":\r\n      case \"ARGON2ID\":\r\n      case \"BLF-CRYPT\":\r\n      case \"CRYPT\":\r\n      case \"DES-CRYPT\":\r\n      case \"MD5-CRYPT\":\r\n      case \"MD5\":\r\n      case \"SHA256-CRYPT\":\r\n      case \"SHA512-CRYPT\":\r\n        return password_verify($password, $hash);\r\n\r\n      case \"CLEAR\":\r\n      case \"CLEARTEXT\":\r\n      case \"PLAIN\":\r\n        return $password == $hash;\r\n\r\n      case \"LDAP-MD5\":\r\n        $hash = base64_decode($hash);\r\n        return hash_equals(hash('md5', $password, true), $hash);\r\n\r\n      case \"PBKDF2\":\r\n        $components = explode('$', $hash);\r\n        $salt = $components[2];\r\n        $rounds = $components[3];\r\n        $hash = $components[4];\r\n        return hash_equals(hash_pbkdf2('sha1', $password, $salt, $rounds), $hash);\r\n\r\n      case \"PBKDF2-SHA512\":\r\n        // Handle FreeIPA-style hash: {PBKDF2-SHA512}10000$<base64_salt>$<base64_hash>\r\n        $components = explode('$', $hash);\r\n        if (count($components) !== 3) return false;\r\n\r\n        // 1st part: iteration count (integer)\r\n        $iterations = intval($components[0]);\r\n        if ($iterations <= 0) return false;\r\n\r\n        // 2nd part: salt (base64-encoded)\r\n        $salt = $components[1];\r\n        // 3rd part: hash (base64-encoded)\r\n        $stored_hash_b64 = $components[2];\r\n\r\n        // Decode salt and hash from base64\r\n        $salt_bin = base64_decode($salt, true);\r\n        $hash_bin = base64_decode($stored_hash_b64, true);\r\n        if ($salt_bin === false || $hash_bin === false) return false;\r\n        // Get length of hash in bytes\r\n        $hash_len = strlen($hash_bin);\r\n        if ($hash_len === 0) return false;\r\n\r\n        // Calculate PBKDF2-SHA512 hash for provided password\r\n        $test_hash = hash_pbkdf2('sha512', $password, $salt_bin, $iterations, $hash_len, true);\r\n        return hash_equals($hash_bin, $test_hash);\r\n\r\n      case \"PLAIN-MD4\":\r\n        return hash_equals(hash('md4', $password), $hash);\r\n\r\n      case \"PLAIN-MD5\":\r\n        return md5($password) == $hash;\r\n\r\n      case \"PLAIN-TRUNC\":\r\n        $components = explode('-', $hash);\r\n        if (count($components) > 1) {\r\n          $trunc_len = $components[0];\r\n          $trunc_password = $components[1];\r\n\r\n          return substr($password, 0, $trunc_len) == $trunc_password;\r\n        } else {\r\n          return $password == $hash;\r\n        }\r\n\r\n      case \"SHA\":\r\n      case \"SHA1\":\r\n      case \"SHA256\":\r\n      case \"SHA512\":\r\n        // SHA is an alias for SHA1\r\n        $scheme = $scheme == \"SHA\" ? \"sha1\" : strtolower($scheme);\r\n        $hash = base64_decode($hash);\r\n        return hash_equals(hash($scheme, $password, true), $hash);\r\n\r\n      case \"SMD5\":\r\n        return verify_salted_hash($hash, $password, 'md5', 16);\r\n\r\n      case \"SSHA\":\r\n        return verify_salted_hash($hash, $password, 'sha1', 20);\r\n\r\n      case \"SSHA256\":\r\n        return verify_salted_hash($hash, $password, 'sha256', 32);\r\n\r\n      case \"SSHA512\":\r\n        return verify_salted_hash($hash, $password, 'sha512', 64);\r\n\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n  return false;\r\n}\r\nfunction formatBytes($size, $precision = 2) {\r\n  if(!is_numeric($size)) {\r\n    return \"0\";\r\n  }\r\n  $base = log($size, 1024);\r\n  $suffixes = array(' Byte', ' KiB', ' MiB', ' GiB', ' TiB');\r\n  if ($size == \"0\") {\r\n    return \"0\";\r\n  }\r\n  return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)];\r\n}\r\nfunction update_sogo_static_view($mailbox = null) {\r\n  if (getenv('SKIP_SOGO') == \"y\") {\r\n    return true;\r\n  }\r\n  global $pdo;\r\n  global $lang;\r\n\r\n  $mailbox_exists = false;\r\n  if ($mailbox !== null) {\r\n    // Check if the mailbox exists\r\n    $stmt = $pdo->prepare(\"SELECT username FROM mailbox WHERE username = :mailbox AND active = '1'\");\r\n    $stmt->execute(array(':mailbox' => $mailbox));\r\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n    if ($row){\r\n      $mailbox_exists = true;\r\n    }\r\n  }\r\n\r\n  // generate random password for sogo to deny direct login\r\n  $random_password = base64_encode(openssl_random_pseudo_bytes(24));\r\n  $random_salt = base64_encode(openssl_random_pseudo_bytes(16));\r\n  $random_hash = '{SSHA256}' . base64_encode(hash('sha256', base64_decode($password) . $salt, true) . $salt);\r\n\r\n  $subquery = \"GROUP BY mailbox.username\";\r\n  if ($mailbox_exists) {\r\n    $subquery = \"AND mailbox.username = :mailbox\";\r\n  }\r\n  $query = \"INSERT INTO _sogo_static_view (`c_uid`, `domain`, `c_name`, `c_password`, `c_cn`, `mail`, `aliases`, `ad_aliases`, `ext_acl`, `kind`, `multiple_bookings`)\r\n      SELECT\r\n        mailbox.username,\r\n        mailbox.domain,\r\n        mailbox.username,\r\n        :random_hash,\r\n        mailbox.name,\r\n        mailbox.username,\r\n        IFNULL(GROUP_CONCAT(ga.aliases ORDER BY ga.aliases SEPARATOR ' '), ''),\r\n        IFNULL(gda.ad_alias, ''),\r\n        IFNULL(external_acl.send_as_acl, ''),\r\n        mailbox.kind,\r\n        mailbox.multiple_bookings\r\n      FROM\r\n        mailbox\r\n        LEFT OUTER JOIN grouped_mail_aliases ga ON ga.username REGEXP CONCAT('(^|,)', mailbox.username, '($|,)')\r\n        LEFT OUTER JOIN grouped_domain_alias_address gda ON gda.username = mailbox.username\r\n        LEFT OUTER JOIN grouped_sender_acl_external external_acl ON external_acl.username = mailbox.username\r\n      WHERE\r\n        mailbox.active = '1'\r\n        $subquery\r\n      ON DUPLICATE KEY UPDATE\r\n        `domain` = VALUES(`domain`),\r\n        `c_name` = VALUES(`c_name`),\r\n        `c_password` = VALUES(`c_password`),\r\n        `c_cn` = VALUES(`c_cn`),\r\n        `mail` = VALUES(`mail`),\r\n        `aliases` = VALUES(`aliases`),\r\n        `ad_aliases` = VALUES(`ad_aliases`),\r\n        `ext_acl` = VALUES(`ext_acl`),\r\n        `kind` = VALUES(`kind`),\r\n        `multiple_bookings` = VALUES(`multiple_bookings`)\";\r\n\r\n\r\n  if ($mailbox_exists) {\r\n    $stmt = $pdo->prepare($query);\r\n    $stmt->execute(array(\r\n      ':random_hash' => $random_hash,\r\n      ':mailbox' => $mailbox\r\n    ));\r\n  } else {\r\n    $stmt = $pdo->prepare($query);\r\n    $stmt->execute(array(\r\n      ':random_hash' => $random_hash\r\n    ));\r\n  }\r\n\r\n  $stmt = $pdo->query(\"DELETE FROM _sogo_static_view WHERE `c_uid` NOT IN (SELECT `username` FROM `mailbox` WHERE `active` = '1');\");\r\n\r\n  flush_memcached();\r\n}\r\nfunction edit_user_account($_data) {\r\n  global $lang;\r\n  global $pdo;\r\n\r\n  $_data_log = $_data;\r\n  !isset($_data_log['user_new_pass']) ?: $_data_log['user_new_pass'] = '*';\r\n  !isset($_data_log['user_new_pass2']) ?: $_data_log['user_new_pass2'] = '*';\r\n  !isset($_data_log['user_old_pass']) ?: $_data_log['user_old_pass'] = '*';\r\n\r\n  $username = $_SESSION['mailcow_cc_username'];\r\n  $role = $_SESSION['mailcow_cc_role'];\r\n  $password_old = $_data['user_old_pass'];\r\n  $pw_recovery_email = $_data['pw_recovery_email'];\r\n\r\n  if (filter_var($username, FILTER_VALIDATE_EMAIL === false) || $role != 'user') {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_data_log),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n\r\n  // edit password\r\n  $is_forced_pw_update = !empty($_SESSION['pending_pw_update']);\r\n  if (((!empty($password_old) || $is_forced_pw_update) && !empty($_data['user_new_pass']) && !empty($_data['user_new_pass2']))) {\r\n    // Only verify old password if this is NOT a forced password update\r\n    if (!$is_forced_pw_update) {\r\n      $stmt = $pdo->prepare(\"SELECT `password` FROM `mailbox`\r\n          WHERE `kind` NOT REGEXP 'location|thing|group'\r\n            AND `username` = :user AND authsource = 'mailcow'\");\r\n      $stmt->execute(array(':user' => $username));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n      if (!verify_hash($row['password'], $password_old)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n    }\r\n\r\n    $password_new = $_data['user_new_pass'];\r\n    $password_new2  = $_data['user_new_pass2'];\r\n    if (password_check($password_new, $password_new2) !== true) {\r\n      return false;\r\n    }\r\n    $password_hashed = hash_password($password_new);\r\n    $stmt = $pdo->prepare(\"UPDATE `mailbox` SET `password` = :password_hashed,\r\n      `attributes` = JSON_SET(`attributes`, '$.force_pw_update', '0'),\r\n      `attributes` = JSON_SET(`attributes`, '$.passwd_update', NOW())\r\n        WHERE `username` = :username AND authsource = 'mailcow'\");\r\n    $stmt->execute(array(\r\n      ':password_hashed' => $password_hashed,\r\n      ':username' => $username\r\n    ));\r\n    $_SESSION['pending_pw_update'] = false;\r\n\r\n    update_sogo_static_view();\r\n  }\r\n  // edit password recovery email\r\n  elseif (!empty($password_old) && isset($pw_recovery_email)) {\r\n    if (!isset($_SESSION['acl']['pw_reset']) || $_SESSION['acl']['pw_reset'] != \"1\" ) {\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n        'msg' => 'access_denied'\r\n      );\r\n      return false;\r\n    }\r\n\r\n    $stmt = $pdo->prepare(\"SELECT `password` FROM `mailbox`\r\n        WHERE `kind` NOT REGEXP 'location|thing|group'\r\n          AND `username` = :user AND authsource = 'mailcow'\");\r\n    $stmt->execute(array(':user' => $username));\r\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n    if (!verify_hash($row['password'], $password_old)) {\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => 'access_denied'\r\n      );\r\n      return false;\r\n    }\r\n\r\n    $pw_recovery_email = (!filter_var($pw_recovery_email, FILTER_VALIDATE_EMAIL)) ? '' : $pw_recovery_email;\r\n    $stmt = $pdo->prepare(\"UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.recovery_email', :recovery_email)\r\n      WHERE `username` = :username AND authsource = 'mailcow'\");\r\n    $stmt->execute(array(\r\n      ':recovery_email' => $pw_recovery_email,\r\n      ':username' => $username\r\n    ));\r\n  }\r\n\r\n  $_SESSION['return'][] =  array(\r\n    'type' => 'success',\r\n    'log' => array(__FUNCTION__, $_data_log),\r\n    'msg' => array('mailbox_modified', htmlspecialchars($username))\r\n  );\r\n}\r\nfunction user_get_alias_details($username) {\r\n  global $pdo;\r\n  global $lang;\r\n  $data['direct_aliases'] = array();\r\n  $data['shared_aliases'] = array();\r\n  if ($_SESSION['mailcow_cc_role'] == \"user\") {\r\n    $username = $_SESSION['mailcow_cc_username'];\r\n  }\r\n  if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {\r\n    return false;\r\n  }\r\n  if (!hasMailboxObjectAccess($username, $_SESSION['mailcow_cc_role'], $username)) {\r\n    return false;\r\n  }\r\n  $data['address'] = $username;\r\n  $stmt = $pdo->prepare(\"SELECT `address` AS `shared_aliases`, `public_comment` FROM `alias`\r\n    WHERE `goto` REGEXP :username_goto\r\n    AND `address` NOT LIKE '@%'\r\n    AND `goto` != :username_goto2\r\n    AND `address` != :username_address\");\r\n  $stmt->execute(array(\r\n    ':username_goto' => '(^|,)'.preg_quote($username, '/').'($|,)',\r\n    ':username_goto2' => $username,\r\n    ':username_address' => $username\r\n    ));\r\n  $run = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($run)) {\r\n    $data['shared_aliases'][$row['shared_aliases']]['public_comment'] = htmlspecialchars($row['public_comment']);\r\n    //$data['shared_aliases'][] = $row['shared_aliases'];\r\n  }\r\n\r\n  $stmt = $pdo->prepare(\"SELECT `address` AS `direct_aliases`, `public_comment` FROM `alias`\r\n    WHERE `goto` = :username_goto\r\n    AND `address` NOT LIKE '@%'\r\n    AND `address` != :username_address\");\r\n  $stmt->execute(\r\n    array(\r\n    ':username_goto' => $username,\r\n    ':username_address' => $username\r\n  ));\r\n  $run = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($run)) {\r\n    $data['direct_aliases'][$row['direct_aliases']]['public_comment'] = htmlspecialchars($row['public_comment']);\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT CONCAT(local_part, '@', alias_domain) AS `ad_alias`, `alias_domain` FROM `mailbox`\r\n    LEFT OUTER JOIN `alias_domain` on `target_domain` = `domain`\r\n      WHERE `username` = :username ;\");\r\n  $stmt->execute(array(':username' => $username));\r\n  $run = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($run)) {\r\n    if (empty($row['ad_alias'])) {\r\n      continue;\r\n    }\r\n    $data['direct_aliases'][$row['ad_alias']]['public_comment'] = $lang['add']['alias_domain'];\r\n    $data['alias_domains'][] = $row['alias_domain'];\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT IFNULL(GROUP_CONCAT(`send_as` SEPARATOR ', '), '') AS `send_as` FROM `sender_acl` WHERE `logged_in_as` = :username AND `send_as` NOT LIKE '@%';\");\r\n  $stmt->execute(array(':username' => $username));\r\n  $run = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($run)) {\r\n    $data['aliases_also_send_as'] = $row['send_as'];\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT CONCAT_WS(', ', IFNULL(GROUP_CONCAT(DISTINCT `send_as` SEPARATOR ', '), ''), GROUP_CONCAT(DISTINCT CONCAT('@',`alias_domain`) SEPARATOR ', ')) AS `send_as` FROM `sender_acl` LEFT JOIN `alias_domain` ON `alias_domain`.`target_domain` =  TRIM(LEADING '@' FROM `send_as`) WHERE `logged_in_as` = :username AND `send_as` LIKE '@%';\");\r\n  $stmt->execute(array(':username' => $username));\r\n  $run = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($run)) {\r\n    $data['aliases_send_as_all'] = $row['send_as'];\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT IFNULL(GROUP_CONCAT(`address` SEPARATOR ', '), '') as `address` FROM `alias` WHERE `goto` REGEXP :username AND `address` LIKE '@%';\");\r\n  $stmt->execute(array(':username' => '(^|,)'.preg_quote($username, '/').'($|,)'));\r\n  $run = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n  while ($row = array_shift($run)) {\r\n    $data['is_catch_all'] = $row['address'];\r\n  }\r\n  return $data;\r\n}\r\nfunction is_valid_domain_name($domain_name, $options = array()) {\r\n  if (empty($domain_name)) {\r\n    return false;\r\n  }\r\n\r\n  // Convert domain name to ASCII for validation\r\n  $domain_name = idn_to_ascii($domain_name, 0, INTL_IDNA_VARIANT_UTS46);\r\n\r\n  if (isset($options['allow_wildcard']) && $options['allow_wildcard'] == true) {\r\n    // Remove '*.' if wildcard subdomains are allowed\r\n    if (strpos($domain_name, '*.') === 0) {\r\n      $domain_name = substr($domain_name, 2);\r\n    }\r\n  }\r\n\r\n  return (preg_match(\"/^([a-z\\d](-*[a-z\\d])*)(\\.([a-z\\d](-*[a-z\\d])*))*$/i\", $domain_name)\r\n       && preg_match(\"/^.{1,253}$/\", $domain_name)\r\n       && preg_match(\"/^[^\\.]{1,63}(\\.[^\\.]{1,63})*$/\", $domain_name));\r\n}\r\nfunction set_tfa($_data) {\r\n  global $pdo;\r\n  global $yubi;\r\n  global $tfa;\r\n  global $iam_settings;\r\n\r\n  $_data_log = $_data;\r\n  !isset($_data_log['confirm_password']) ?: $_data_log['confirm_password'] = '*';\r\n\r\n  // skip password check if this is a forced TFA enrollment after login\r\n  if (!empty($_SESSION['pending_tfa_setup'])) {\r\n    $username = $_SESSION['mailcow_cc_username'];\r\n    if (empty($username) || !isset($_SESSION['mailcow_cc_role'])) {\r\n      $_SESSION['return'][] = array('type' => 'danger', 'log' => array(__FUNCTION__, $_data_log), 'msg' => 'access_denied');\r\n      return false;\r\n    }\r\n  } else {\r\n    $username = $_SESSION['mailcow_cc_username'];\r\n    $access_denied = null;\r\n\r\n    if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) $access_denied = true;\r\n\r\n    // check admin password\r\n    if ($access_denied === null) {\r\n      $stmt = $pdo->prepare(\"SELECT `password` FROM `admin` WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if ($row) {\r\n        if (!verify_hash($row['password'], $_data[\"confirm_password\"])) $access_denied = true;\r\n        else $access_denied = false;\r\n      }\r\n    }\r\n\r\n    // check mailbox password\r\n    if ($access_denied === null) {\r\n      $stmt = $pdo->prepare(\"SELECT `password`, `authsource` FROM `mailbox` WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if ($row) {\r\n        if ($row['authsource'] == 'ldap'){\r\n          if (!ldap_mbox_login($username, $_data[\"confirm_password\"], $iam_settings)) $access_denied = true;\r\n          else $access_denied = false;\r\n        } else {\r\n          if (!verify_hash($row['password'], $_data[\"confirm_password\"])) $access_denied = true;\r\n          else $access_denied = false;\r\n        }\r\n      }\r\n    }\r\n\r\n    if ($access_denied) {\r\n      $_SESSION['return'][] = array('type' => 'danger', 'log' => array(__FUNCTION__, $_data_log), 'msg' => 'access_denied');\r\n      return false;\r\n    }\r\n  }\r\n\r\n  switch ($_data[\"tfa_method\"]) {\r\n    case \"yubi_otp\":\r\n      $key_id = (!isset($_data[\"key_id\"])) ? 'unidentified' : $_data[\"key_id\"];\r\n      $yubico_id = $_data['yubico_id'];\r\n      $yubico_key = $_data['yubico_key'];\r\n      $yubi = new Auth_Yubico($yubico_id, $yubico_key);\r\n      if (!$yubi) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      if (!ctype_alnum($_data[\"otp_token\"]) || strlen($_data[\"otp_token\"]) != 44) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => 'tfa_token_invalid'\r\n        );\r\n        return false;\r\n      }\r\n      $yauth = $yubi->verify($_data[\"otp_token\"]);\r\n      if (PEAR::isError($yauth)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => array('yotp_verification_failed', $yauth->getMessage())\r\n        );\r\n        return false;\r\n      }\r\n      try {\r\n        // We could also do a modhex translation here\r\n        $yubico_modhex_id = substr($_data[\"otp_token\"], 0, 12);\r\n        $stmt = $pdo->prepare(\"DELETE FROM `tfa`\r\n          WHERE `username` = :username\r\n            AND (`authmech` = 'yubi_otp' AND `secret` LIKE :modhex)\");\r\n        $stmt->execute(array(':username' => $username, ':modhex' => '%' . $yubico_modhex_id));\r\n        $stmt = $pdo->prepare(\"INSERT INTO `tfa` (`key_id`, `username`, `authmech`, `active`, `secret`) VALUES\r\n          (:key_id, :username, 'yubi_otp', '1', :secret)\");\r\n        $stmt->execute(array(':key_id' => $key_id, ':username' => $username, ':secret' => $yubico_id . ':' . $yubico_key . ':' . $yubico_modhex_id));\r\n      }\r\n      catch (PDOException $e) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => array('mysql_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      unset($_SESSION['pending_tfa_setup']);\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => array('object_modified', htmlspecialchars($username))\r\n      );\r\n    break;\r\n    case \"totp\":\r\n      $key_id = (!isset($_data[\"key_id\"])) ? 'unidentified' : $_data[\"key_id\"];\r\n      if ($tfa->verifyCode($_POST['totp_secret'], $_POST['totp_confirm_token']) === true) {\r\n        //$stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `username` = :username\");\r\n        //$stmt->execute(array(':username' => $username));\r\n        $stmt = $pdo->prepare(\"INSERT INTO `tfa` (`username`, `key_id`, `authmech`, `secret`, `active`) VALUES (?, ?, 'totp', ?, '1')\");\r\n        $stmt->execute(array($username, $key_id, $_POST['totp_secret']));\r\n        unset($_SESSION['pending_tfa_setup']);\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => array('object_modified', $username)\r\n        );\r\n      }\r\n      else {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => 'totp_verification_failed'\r\n        );\r\n      }\r\n    break;\r\n    case \"webauthn\":\r\n        $key_id = (!isset($_data[\"key_id\"])) ? 'unidentified' : $_data[\"key_id\"];\r\n\r\n        $stmt = $pdo->prepare(\"INSERT INTO `tfa` (`username`, `key_id`, `authmech`, `keyHandle`, `publicKey`, `certificate`, `counter`, `active`)\r\n        VALUES (?, ?, 'webauthn', ?, ?, ?, ?, '1')\");\r\n        $stmt->execute(array(\r\n            $username,\r\n            $key_id,\r\n            base64_encode($_data['registration']->credentialId),\r\n            $_data['registration']->credentialPublicKey,\r\n            $_data['registration']->certificate,\r\n            0\r\n        ));\r\n\r\n        unset($_SESSION['pending_tfa_setup']);\r\n        $_SESSION['return'][] =  array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_data_log),\r\n            'msg' => array('object_modified', $username)\r\n        );\r\n    break;\r\n    case \"none\":\r\n      // Block TFA removal if force_tfa policy is active\r\n      $is_forced_tfa = false;\r\n      if ($_SESSION['mailcow_cc_role'] === 'user') {\r\n        $stmt_check = $pdo->prepare(\"SELECT JSON_EXTRACT(`attributes`, '$.force_tfa') FROM `mailbox` WHERE `username` = ?\");\r\n        $stmt_check->execute(array($username));\r\n        $is_forced_tfa = ($stmt_check->fetchColumn() == '1');\r\n      } else {\r\n        $stmt_check = $pdo->prepare(\"SELECT JSON_EXTRACT(`attributes`, '$.force_tfa') FROM `admin` WHERE `username` = ?\");\r\n        $stmt_check->execute(array($username));\r\n        $is_forced_tfa = ($stmt_check->fetchColumn() == '1');\r\n      }\r\n      if ($is_forced_tfa) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data_log),\r\n          'msg' => 'tfa_removal_blocked'\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => array('object_modified', htmlspecialchars($username))\r\n      );\r\n    break;\r\n  }\r\n}\r\nfunction fido2($_data) {\r\n  global $pdo;\r\n  global $WebAuthn;\r\n  $_data_log = $_data;\r\n  // Not logging registration data, only actions\r\n  // Silent errors for \"get\" requests\r\n  switch ($_data[\"action\"]) {\r\n    case \"register\":\r\n      $username = $_SESSION['mailcow_cc_username'];\r\n      if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) {\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_data[\"action\"]),\r\n            'msg' => 'access_denied'\r\n          );\r\n          return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"INSERT INTO `fido2` (`username`, `rpId`, `credentialPublicKey`, `certificateChain`, `certificate`, `certificateIssuer`, `certificateSubject`, `signatureCounter`, `AAGUID`, `credentialId`)\r\n      VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\");\r\n      $stmt->execute(array(\r\n        $username,\r\n        $_data['registration']->rpId,\r\n        $_data['registration']->credentialPublicKey,\r\n        $_data['registration']->certificateChain,\r\n        $_data['registration']->certificate,\r\n        $_data['registration']->certificateIssuer,\r\n        $_data['registration']->certificateSubject,\r\n        $_data['registration']->signatureCounter,\r\n        $_data['registration']->AAGUID,\r\n        $_data['registration']->credentialId)\r\n      );\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_data[\"action\"]),\r\n        'msg' => array('object_modified', $username)\r\n      );\r\n    break;\r\n    case \"get_user_cids\":\r\n      // Used to exclude existing CredentialIds while registering\r\n      $username = $_SESSION['mailcow_cc_username'];\r\n      if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) {\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"SELECT `credentialId` FROM `fido2` WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      while($row = array_shift($rows)) {\r\n        $cids[] = $row['credentialId'];\r\n      }\r\n      return $cids;\r\n    break;\r\n    case \"get_all_cids\":\r\n      // Only needed when using fido2 with username\r\n      $stmt = $pdo->query(\"SELECT `credentialId` FROM `fido2`\");\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      while($row = array_shift($rows)) {\r\n        $cids[] = $row['credentialId'];\r\n      }\r\n      return $cids;\r\n    break;\r\n    case \"get_by_b64cid\":\r\n      if (!isset($_data['cid']) || empty($_data['cid'])) {\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"SELECT `certificateSubject`, `username`, `credentialPublicKey`, SHA2(`credentialId`, 256) AS `cid` FROM `fido2` WHERE `credentialId` = :cid\");\r\n      $stmt->execute(array(':cid' => base64_decode($_data['cid'])));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (empty($row) || empty($row['credentialPublicKey']) || empty($row['username'])) {\r\n        return false;\r\n      }\r\n      $data['pub_key'] = $row['credentialPublicKey'];\r\n      $data['username'] = $row['username'];\r\n      $data['subject'] = $row['certificateSubject'];\r\n      $data['cid'] = $row['cid'];\r\n      return $data;\r\n    break;\r\n    case \"get_friendly_names\":\r\n      $username = $_SESSION['mailcow_cc_username'];\r\n      if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) {\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"SELECT SHA2(`credentialId`, 256) AS `cid`, `created`, `certificateSubject`, `friendlyName` FROM `fido2` WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      while($row = array_shift($rows)) {\r\n        $fns[] = array(\r\n          \"subject\" => (empty($row['certificateSubject']) ? 'Unknown (' . $row['created'] . ')' : $row['certificateSubject']),\r\n          \"fn\" => $row['friendlyName'],\r\n          \"cid\" => $row['cid']\r\n        );\r\n      }\r\n      return $fns;\r\n    break;\r\n    case \"unset_fido2_key\":\r\n      $username = $_SESSION['mailcow_cc_username'];\r\n      if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data[\"action\"]),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"DELETE FROM `fido2` WHERE `username` = :username AND SHA2(`credentialId`, 256) = :cid\");\r\n      $stmt->execute(array(\r\n        ':username' => $username,\r\n        ':cid' => $_data['post_data']['unset_fido2_key']\r\n      ));\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => array('object_modified', htmlspecialchars($username))\r\n      );\r\n    break;\r\n    case \"edit_fn\":\r\n      $username = $_SESSION['mailcow_cc_username'];\r\n      if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_data[\"action\"]),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"UPDATE `fido2` SET `friendlyName` = :friendlyName WHERE SHA2(`credentialId`, 256) = :cid AND `username` = :username\");\r\n      $stmt->execute(array(\r\n        ':username' => $username,\r\n        ':friendlyName' => $_data['fido2_attrs']['fido2_fn'],\r\n        ':cid' => $_data['fido2_attrs']['fido2_cid']\r\n      ));\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => array('object_modified', htmlspecialchars($username))\r\n      );\r\n    break;\r\n    case \"verify\":\r\n      $role = \"\";\r\n      $tokenData = json_decode($_data['token']);\r\n      $clientDataJSON = base64_decode($tokenData->clientDataJSON);\r\n      $authenticatorData = base64_decode($tokenData->authenticatorData);\r\n      $signature = base64_decode($tokenData->signature);\r\n      $id = base64_decode($tokenData->id);\r\n      $challenge = $_SESSION['challenge'];\r\n      $process_fido2 = fido2(array(\"action\" => \"get_by_b64cid\", \"cid\" => $tokenData->id));\r\n      if ($process_fido2['pub_key'] === false) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(\"fido2_login\", $_data['user'], $process_fido2['username']),\r\n          'msg' => \"login_failed\"\r\n        );\r\n        return false;\r\n      }\r\n      try {\r\n        $WebAuthn->processGet($clientDataJSON, $authenticatorData, $signature, $process_fido2['pub_key'], $challenge, null, $GLOBALS['FIDO2_UV_FLAG_LOGIN'], $GLOBALS['FIDO2_USER_PRESENT_FLAG']);\r\n      }\r\n      catch (Throwable $ex) {\r\n        unset($process_fido2);\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(\"fido2_login\", $_data['user'], $process_fido2['username'], $ex->getMessage()),\r\n          'msg' => \"login_failed\"\r\n        );\r\n        return false;\r\n      }\r\n      $return = new stdClass();\r\n      $return->success = true;\r\n      $stmt = $pdo->prepare(\"SELECT `superadmin` FROM `admin` WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $process_fido2['username']));\r\n      $obj_props = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if ($obj_props['superadmin'] === 1 && (!$_data['user'] || $_data['user'] == \"admin\")) {\r\n        $role = \"admin\";\r\n      }\r\n      elseif ($obj_props['superadmin'] === 0 && (!$_data['user'] || $_data['user'] == \"domainadmin\")) {\r\n        $role = \"domainadmin\";\r\n      }\r\n      elseif (!isset($obj_props['superadmin']) && (!$_data['user'] || $_data['user'] == \"user\")) {\r\n        $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `username` = :username\");\r\n        $stmt->execute(array(':username' => $process_fido2['username']));\r\n        $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        if ($row['username'] == $process_fido2['username']) {\r\n          $role = \"user\";\r\n        }\r\n      }\r\n      else {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(\"fido2_login\", $_data['user'], $process_fido2['username']),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n      if (empty($role)) {\r\n        session_unset();\r\n        session_destroy();\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(\"fido2_login\", $_data['user'], $process_fido2['username']),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n      unset($_SESSION[\"challenge\"]);\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(\"fido2_login\", $_data['user'], $process_fido2['username']),\r\n        'msg' => array('logged_in_as', $process_fido2['username'])\r\n      );\r\n      return array(\r\n        \"role\" => $role,\r\n        \"username\" => $process_fido2['username'],\r\n        \"cid\" => $process_fido2['cid']\r\n      );\r\n    break;\r\n  }\r\n}\r\nfunction unset_tfa_key($_data) {\r\n  // Can only unset own keys\r\n  // Needs at least one key left\r\n  global $pdo;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  $access_denied = null;\r\n  $id = intval($_data['unset_tfa_key']);\r\n  $username = $_SESSION['mailcow_cc_username'];\r\n\r\n  // check for empty user and role\r\n  if (!isset($_SESSION['mailcow_cc_role']) || empty($username)) $access_denied = true;\r\n\r\n  try {\r\n    if (!is_numeric($id)) $access_denied = true;\r\n\r\n    // set access_denied error\r\n    if ($access_denied){\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => 'access_denied'\r\n      );\r\n      return false;\r\n    }\r\n\r\n    // Block key removal if force_tfa policy is active\r\n    $is_forced_tfa = false;\r\n    if ($_SESSION['mailcow_cc_role'] === 'user') {\r\n      $stmt_check = $pdo->prepare(\"SELECT JSON_EXTRACT(`attributes`, '$.force_tfa') FROM `mailbox` WHERE `username` = ?\");\r\n      $stmt_check->execute(array($username));\r\n      $is_forced_tfa = ($stmt_check->fetchColumn() == '1');\r\n    } else {\r\n      $stmt_check = $pdo->prepare(\"SELECT JSON_EXTRACT(`attributes`, '$.force_tfa') FROM `admin` WHERE `username` = ?\");\r\n      $stmt_check->execute(array($username));\r\n      $is_forced_tfa = ($stmt_check->fetchColumn() == '1');\r\n    }\r\n    if ($is_forced_tfa) {\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => 'tfa_removal_blocked'\r\n      );\r\n      return false;\r\n    }\r\n\r\n    // check if it's last key\r\n    $stmt = $pdo->prepare(\"SELECT COUNT(*) AS `keys` FROM `tfa`\r\n      WHERE `username` = :username AND `active` = '1'\");\r\n    $stmt->execute(array(':username' => $username));\r\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n    if ($row['keys'] == \"1\") {\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_data_log),\r\n        'msg' => 'last_key'\r\n      );\r\n      return false;\r\n    }\r\n\r\n    // delete key\r\n    $stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `username` = :username AND `id` = :id\");\r\n    $stmt->execute(array(':username' => $username, ':id' => $id));\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'success',\r\n      'log' => array(__FUNCTION__, $_data_log),\r\n      'msg' => array('object_modified', $username)\r\n    );\r\n  }\r\n  catch (PDOException $e) {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_data_log),\r\n      'msg' => array('mysql_error', $e)\r\n    );\r\n    return false;\r\n  }\r\n}\r\nfunction tfa_exists($username) {\r\n  global $pdo;\r\n  if (empty($username)) {\r\n    return false;\r\n  }\r\n  $stmt = $pdo->prepare(\"SELECT COUNT(*) as count FROM `tfa` WHERE `username` = :username\");\r\n  $stmt->execute(array(':username' => $username));\r\n  return $stmt->fetch(PDO::FETCH_ASSOC)['count'] > 0;\r\n}\r\nfunction get_tfa($username = null, $id = null) {\r\n  global $pdo;\r\n  if (empty($username) && isset($_SESSION['mailcow_cc_username'])) {\r\n    $username = $_SESSION['mailcow_cc_username'];\r\n  }\r\n  elseif (empty($username)) {\r\n    return false;\r\n  }\r\n\r\n  if (!isset($id)){\r\n    // fetch all tfa methods - just get information about possible authenticators\r\n    $stmt = $pdo->prepare(\"SELECT `id`, `key_id`, `authmech` FROM `tfa`\r\n        WHERE `username` = :username AND `active` = '1'\");\r\n    $stmt->execute(array(':username' => $username));\r\n    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n    // no tfa methods found\r\n    if (count($results) == 0) {\r\n        $data['name'] = 'none';\r\n        $data['pretty'] = \"-\";\r\n        $data['additional'] = array();\r\n        return $data;\r\n    }\r\n\r\n    $data['additional'] = $results;\r\n    return $data;\r\n  } else {\r\n    // fetch specific authenticator details by id\r\n    $stmt = $pdo->prepare(\"SELECT * FROM `tfa`\r\n    WHERE `username` = :username AND `id` = :id AND `active` = '1'\");\r\n    $stmt->execute(array(':username' => $username, ':id' => $id));\r\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n    if (isset($row[\"authmech\"])) {\r\n        switch ($row[\"authmech\"]) {\r\n          case \"yubi_otp\":\r\n            $data['name'] = \"yubi_otp\";\r\n            $data['pretty'] = \"Yubico OTP\";\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `key_id`, RIGHT(`secret`, 12) AS 'modhex' FROM `tfa` WHERE `authmech` = 'yubi_otp' AND `username` = :username AND `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':id' => $id\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $data['additional'][] = $row;\r\n            }\r\n            return $data;\r\n          break;\r\n          // u2f - deprecated, should be removed\r\n          case \"u2f\":\r\n            $data['name'] = \"u2f\";\r\n            $data['pretty'] = \"Fido U2F\";\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `key_id` FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = :username AND `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':id' => $id\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $data['additional'][] = $row;\r\n            }\r\n            return $data;\r\n          break;\r\n          case \"hotp\":\r\n            $data['name'] = \"hotp\";\r\n            $data['pretty'] = \"HMAC-based OTP\";\r\n            return $data;\r\n          break;\r\n          case \"totp\":\r\n            $data['name'] = \"totp\";\r\n            $data['pretty'] = \"Time-based OTP\";\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `key_id`, `secret` FROM `tfa` WHERE `authmech` = 'totp' AND `username` = :username AND `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':id' => $id\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $data['additional'][] = $row;\r\n            }\r\n            return $data;\r\n          break;\r\n          case \"webauthn\":\r\n            $data['name'] = \"webauthn\";\r\n            $data['pretty'] = \"WebAuthn\";\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `key_id` FROM `tfa` WHERE `authmech` = 'webauthn' AND `username` = :username AND `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':id' => $id\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $data['additional'][] = $row;\r\n            }\r\n            return $data;\r\n          break;\r\n          default:\r\n            $data['name'] = 'none';\r\n            $data['pretty'] = \"-\";\r\n            return $data;\r\n          break;\r\n        }\r\n      }\r\n      else {\r\n        $data['name'] = 'none';\r\n        $data['pretty'] = \"-\";\r\n        return $data;\r\n      }\r\n    }\r\n}\r\nfunction verify_tfa_login($username, $_data) {\r\n  global $pdo;\r\n  global $yubi;\r\n  global $u2f;\r\n  global $tfa;\r\n  global $WebAuthn;\r\n\r\n  if ($_data['tfa_method'] != 'u2f'){\r\n\r\n    switch ($_data[\"tfa_method\"]) {\r\n        case \"yubi_otp\":\r\n            if (!ctype_alnum($_data['token']) || strlen($_data['token']) != 44) {\r\n                $_SESSION['return'][] =  array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $username, '*'),\r\n                    'msg' => array('yotp_verification_failed', 'token length error')\r\n                );\r\n                return false;\r\n            }\r\n            $yubico_modhex_id = substr($_data['token'], 0, 12);\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `secret` FROM `tfa`\r\n                WHERE `username` = :username\r\n                AND `authmech` = 'yubi_otp'\r\n                AND `active` = '1'\r\n                AND `secret` LIKE :modhex\");\r\n            $stmt->execute(array(':username' => $username, ':modhex' => '%' . $yubico_modhex_id));\r\n            $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            $yubico_auth = explode(':', $row['secret']);\r\n            $yubi = new Auth_Yubico($yubico_auth[0], $yubico_auth[1]);\r\n            $yauth = $yubi->verify($_data['token']);\r\n            if (PEAR::isError($yauth)) {\r\n                $_SESSION['return'][] =  array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $username, '*'),\r\n                    'msg' => array('yotp_verification_failed', $yauth->getMessage())\r\n                );\r\n                return false;\r\n            }\r\n            else {\r\n                $_SESSION['tfa_id'] = $row['id'];\r\n                $_SESSION['return'][] =  array(\r\n                    'type' => 'success',\r\n                    'log' => array(__FUNCTION__, $username, '*'),\r\n                    'msg' => 'verified_yotp_login'\r\n                );\r\n                return true;\r\n            }\r\n            $_SESSION['return'][] =  array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $username, '*'),\r\n                'msg' => array('yotp_verification_failed', 'unknown')\r\n            );\r\n            return false;\r\n        break;\r\n        case \"hotp\":\r\n            return false;\r\n        break;\r\n        case \"totp\":\r\n          try {\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `secret` FROM `tfa`\r\n                WHERE `username` = :username\r\n                AND `authmech` = 'totp'\r\n                AND `id` = :id\r\n                AND `active`='1'\");\r\n            $stmt->execute(array(':username' => $username, ':id' => $_data['id']));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            foreach ($rows as $row) {\r\n              if ($tfa->verifyCode($row['secret'], $_data['token']) === true) {\r\n                $_SESSION['tfa_id'] = $row['id'];\r\n                $_SESSION['return'][] =  array(\r\n                    'type' => 'success',\r\n                    'log' => array(__FUNCTION__, $username, '*'),\r\n                    'msg' => 'verified_totp_login'\r\n                );\r\n                return true;\r\n              }\r\n            }\r\n            $_SESSION['return'][] =  array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $username, '*'),\r\n                'msg' => 'totp_verification_failed'\r\n            );\r\n            return false;\r\n          }\r\n          catch (PDOException $e) {\r\n            $_SESSION['return'][] =  array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $username, '*'),\r\n                'msg' => array('mysql_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case \"webauthn\":\r\n            $tokenData = json_decode($_data['token']);\r\n            $clientDataJSON = base64_decode($tokenData->clientDataJSON);\r\n            $authenticatorData = base64_decode($tokenData->authenticatorData);\r\n            $signature = base64_decode($tokenData->signature);\r\n            $id = base64_decode($tokenData->id);\r\n            $challenge = $_SESSION['challenge'];\r\n\r\n            $stmt = $pdo->prepare(\"SELECT `id`, `key_id`, `keyHandle`, `username`, `publicKey` FROM `tfa` WHERE `id` = :id AND `active`='1'\");\r\n            $stmt->execute(array(':id' => $_data['id']));\r\n            $process_webauthn = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n            if (empty($process_webauthn)){\r\n              $_SESSION['return'][] =  array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $username, '*'),\r\n                  'msg' => array('webauthn_authenticator_failed')\r\n              );\r\n              return false;\r\n            }\r\n\r\n            if (empty($process_webauthn['publicKey']) || $process_webauthn['publicKey'] === false) {\r\n                $_SESSION['return'][] =  array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $username, '*'),\r\n                    'msg' => array('webauthn_publickey_failed')\r\n                );\r\n                return false;\r\n            }\r\n\r\n            if ($process_webauthn['username'] != $_SESSION['pending_mailcow_cc_username']){\r\n              $_SESSION['return'][] =  array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $username, '*'),\r\n                  'msg' => array('webauthn_username_failed')\r\n              );\r\n              return false;\r\n            }\r\n\r\n            try {\r\n                $WebAuthn->processGet($clientDataJSON, $authenticatorData, $signature, $process_webauthn['publicKey'], $challenge, null, $GLOBALS['WEBAUTHN_UV_FLAG_LOGIN'], $GLOBALS['WEBAUTHN_USER_PRESENT_FLAG']);\r\n            }\r\n            catch (Throwable $ex) {\r\n                $_SESSION['return'][] =  array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $username, '*'),\r\n                    'msg' => array('webauthn_verification_failed', $ex->getMessage())\r\n                );\r\n                return false;\r\n            }\r\n\r\n            $stmt = $pdo->prepare(\"SELECT `superadmin` FROM `admin` WHERE `username` = :username\");\r\n            $stmt->execute(array(':username' => $process_webauthn['username']));\r\n            $obj_props = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            if ($obj_props['superadmin'] === 1) {\r\n              $_SESSION[\"mailcow_cc_role\"] = \"admin\";\r\n            }\r\n            elseif ($obj_props['superadmin'] === 0) {\r\n              $_SESSION[\"mailcow_cc_role\"] = \"domainadmin\";\r\n            }\r\n            else {\r\n              $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `username` = :username\");\r\n              $stmt->execute(array(':username' => $process_webauthn['username']));\r\n              $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n              if (!empty($row['username'])) {\r\n                $_SESSION[\"mailcow_cc_role\"] = \"user\";\r\n              } else {\r\n                $_SESSION['return'][] =  array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $username, '*'),\r\n                  'msg' => array('webauthn_role_failed')\r\n                );\r\n                return false;\r\n              }\r\n            }\r\n\r\n            $_SESSION[\"mailcow_cc_username\"] = $process_webauthn['username'];\r\n            $_SESSION['tfa_id'] = $process_webauthn['id'];\r\n            $_SESSION['authReq'] = null;\r\n            unset($_SESSION[\"challenge\"]);\r\n            $_SESSION['return'][] =  array(\r\n                'type' => 'success',\r\n                'log' => array(\"webauthn_login\"),\r\n                'msg' => array('logged_in_as', $process_webauthn['username'])\r\n            );\r\n            return true;\r\n        break;\r\n        default:\r\n            $_SESSION['return'][] =  array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $username, '*'),\r\n            'msg' => 'unknown_tfa_method'\r\n            );\r\n            return false;\r\n        break;\r\n    }\r\n\r\n    return false;\r\n  } else {\r\n    // delete old keys that used u2f\r\n    $stmt = $pdo->prepare(\"SELECT * FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = :username\");\r\n    $stmt->execute(array(':username' => $username));\r\n    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    if (count($rows) == 0) return false;\r\n\r\n    $stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `authmech` = 'u2f' AND `username` = :username\");\r\n    $stmt->execute(array(':username' => $username));\r\n    return true;\r\n  }\r\n}\r\nfunction admin_api($access, $action, $data = null) {\r\n  global $pdo;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  if ($access !== \"ro\" && $access !== \"rw\") {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'invalid access type'\r\n    );\r\n    return false;\r\n  }\r\n  if ($action == \"edit\") {\r\n    $active = (!empty($data['active'])) ? 1 : 0;\r\n    $skip_ip_check = (isset($data['skip_ip_check'])) ? 1 : 0;\r\n    $allow_from = array();\r\n    if (isset($data['allow_from'])) {\r\n      $allow_from = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $data['allow_from']));\r\n    }\r\n    foreach ($allow_from as $key => $val) {\r\n      if (empty($val)) {\r\n        unset($allow_from[$key]);\r\n        continue;\r\n      }\r\n      if (valid_network($val) !== true) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'warning',\r\n          'log' => array(__FUNCTION__, $data),\r\n          'msg' => array('ip_invalid', htmlspecialchars($allow_from[$key]))\r\n        );\r\n        unset($allow_from[$key]);\r\n        continue;\r\n      }\r\n    }\r\n    $allow_from = implode(',', array_unique(array_filter($allow_from)));\r\n    if (empty($allow_from) && $skip_ip_check == 0) {\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $data),\r\n        'msg' => 'ip_list_empty'\r\n      );\r\n      return false;\r\n    }\r\n    $api_key = implode('-', array(\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3)))\r\n    ));\r\n    $stmt = $pdo->query(\"SELECT `api_key` FROM `api` WHERE `access` = '\" . $access . \"'\");\r\n    $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n    if (empty($num_results)) {\r\n      $stmt = $pdo->prepare(\"INSERT INTO `api` (`api_key`, `skip_ip_check`, `active`, `allow_from`, `access`)\r\n        VALUES (:api_key, :skip_ip_check, :active, :allow_from, :access);\");\r\n      $stmt->execute(array(\r\n        ':api_key' => $api_key,\r\n        ':skip_ip_check' => $skip_ip_check,\r\n        ':active' => $active,\r\n        ':allow_from' => $allow_from,\r\n        ':access' => $access\r\n      ));\r\n    }\r\n    else {\r\n      if ($skip_ip_check == 0) {\r\n        $stmt = $pdo->prepare(\"UPDATE `api` SET `skip_ip_check` = :skip_ip_check,\r\n          `active` = :active,\r\n          `allow_from` = :allow_from\r\n            WHERE `access` = :access;\");\r\n        $stmt->execute(array(\r\n          ':active' => $active,\r\n          ':skip_ip_check' => $skip_ip_check,\r\n          ':allow_from' => $allow_from,\r\n          ':access' => $access\r\n        ));\r\n      }\r\n      else {\r\n        $stmt = $pdo->prepare(\"UPDATE `api` SET `skip_ip_check` = :skip_ip_check,\r\n          `active` = :active\r\n            WHERE `access` = :access;\");\r\n        $stmt->execute(array(\r\n          ':active' => $active,\r\n          ':skip_ip_check' => $skip_ip_check,\r\n          ':access' => $access\r\n        ));\r\n      }\r\n    }\r\n  }\r\n  elseif ($action == \"regen_key\") {\r\n    $api_key = implode('-', array(\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3))),\r\n      strtoupper(bin2hex(random_bytes(3)))\r\n    ));\r\n    $stmt = $pdo->prepare(\"UPDATE `api` SET `api_key` = :api_key WHERE `access` = :access\");\r\n    $stmt->execute(array(\r\n      ':api_key' => $api_key,\r\n      ':access' => $access\r\n    ));\r\n  }\r\n  elseif ($action == \"get\") {\r\n    $stmt = $pdo->query(\"SELECT * FROM `api` WHERE `access` = '\" . $access . \"'\");\r\n    $apidata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n    if ($apidata !== false) {\r\n      $apidata['allow_from'] = str_replace(',', PHP_EOL, $apidata['allow_from']);\r\n    }\r\n    return $apidata;\r\n  }\r\n  $_SESSION['return'][] =  array(\r\n    'type' => 'success',\r\n    'log' => array(__FUNCTION__, $data),\r\n    'msg' => 'admin_api_modified'\r\n  );\r\n}\r\nfunction license($action, $data = null) {\r\n  global $pdo;\r\n  global $redis;\r\n  global $lang;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  switch ($action) {\r\n    case \"verify\":\r\n      // Keep result until revalidate button is pressed or session expired\r\n      $stmt = $pdo->query(\"SELECT `version` FROM `versions` WHERE `application` = 'GUID'\");\r\n      $versions = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      $post = array('guid' => $versions['version']);\r\n      $curl = curl_init('https://verify.mailcow.email');\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n      curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);\r\n      curl_setopt($curl, CURLOPT_POSTFIELDS, $post);\r\n      $response = curl_exec($curl);\r\n      curl_close($curl);\r\n      $json_return = json_decode($response, true);\r\n      if ($response && $json_return) {\r\n        if ($json_return['response'] === \"ok\") {\r\n          $_SESSION['gal']['valid'] = \"true\";\r\n          $_SESSION['gal']['c'] = $json_return['c'];\r\n          $_SESSION['gal']['s'] = $json_return['s'];\r\n          if ($json_return['m'] == 'NoMoore') {\r\n            $_SESSION['gal']['m'] = '🐄';\r\n          }\r\n          else {\r\n            $_SESSION['gal']['m'] = str_repeat('🐄', substr_count($json_return['m'], 'o'));\r\n          }\r\n        }\r\n        elseif ($json_return['response'] === \"invalid\") {\r\n          $_SESSION['gal']['valid'] = \"false\";\r\n          $_SESSION['gal']['c'] = $lang['mailbox']['no'];\r\n          $_SESSION['gal']['s'] = $lang['mailbox']['no'];\r\n          $_SESSION['gal']['m'] = $lang['mailbox']['no'];\r\n        }\r\n      }\r\n      else {\r\n        $_SESSION['gal']['valid'] = \"false\";\r\n        $_SESSION['gal']['c'] = $lang['danger']['temp_error'];\r\n        $_SESSION['gal']['s'] = $lang['danger']['temp_error'];\r\n        $_SESSION['gal']['m'] = $lang['danger']['temp_error'];\r\n      }\r\n      try {\r\n        // json_encode needs \"true\"/\"false\" instead of true/false, to not encode it to 0 or 1\r\n        $redis->Set('LICENSE_STATUS_CACHE', json_encode($_SESSION['gal']));\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return $_SESSION['gal']['valid'];\r\n    break;\r\n    case \"guid\":\r\n      $stmt = $pdo->query(\"SELECT `version` FROM `versions` WHERE `application` = 'GUID'\");\r\n      $versions = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      return $versions['version'];\r\n    break;\r\n  }\r\n}\r\nfunction rspamd_ui($action, $data = null) {\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] =  array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  switch ($action) {\r\n    case \"edit\":\r\n      $rspamd_ui_pass = $data['rspamd_ui_pass'];\r\n      $rspamd_ui_pass2 = $data['rspamd_ui_pass2'];\r\n      if (empty($rspamd_ui_pass) || empty($rspamd_ui_pass2)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, '*', '*'),\r\n          'msg' => 'password_empty'\r\n        );\r\n        return false;\r\n      }\r\n      if ($rspamd_ui_pass != $rspamd_ui_pass2) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, '*', '*'),\r\n          'msg' => 'password_mismatch'\r\n        );\r\n        return false;\r\n      }\r\n      if (strlen($rspamd_ui_pass) < 6) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, '*', '*'),\r\n          'msg' => 'rspamd_ui_pw_length'\r\n        );\r\n        return false;\r\n      }\r\n      $docker_return = docker('post', 'rspamd-mailcow', 'exec', array('cmd' => 'rspamd', 'task' => 'worker_password', 'raw' => $rspamd_ui_pass), array('Content-Type: application/json'));\r\n      if ($docker_return_array = json_decode($docker_return, true)) {\r\n        if ($docker_return_array['type'] == 'success') {\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, '*', '*'),\r\n            'msg' => 'rspamd_ui_pw_set'\r\n          );\r\n          return true;\r\n        }\r\n        else {\r\n          $_SESSION['return'][] =  array(\r\n            'type' => $docker_return_array['type'],\r\n            'log' => array(__FUNCTION__, '*', '*'),\r\n            'msg' => $docker_return_array['msg']\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      else {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, '*', '*'),\r\n          'msg' => 'unknown'\r\n        );\r\n        return false;\r\n      }\r\n    break;\r\n  }\r\n}\r\nfunction cors($action, $data = null) {\r\n  global $redis;\r\n\r\n  switch ($action) {\r\n    case \"edit\":\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $allowed_origins = isset($data['allowed_origins']) ? $data['allowed_origins'] : array($_SERVER['SERVER_NAME']);\r\n      $allowed_origins = !is_array($allowed_origins) ? array_filter(array_map('trim', explode(\"\\n\", $allowed_origins))) : $allowed_origins;\r\n      foreach ($allowed_origins as $origin) {\r\n        if (!filter_var($origin, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) && $origin != '*') {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $action, $data),\r\n            'msg' => 'cors_invalid_origin'\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n\r\n      $allowed_methods = isset($data['allowed_methods']) ? $data['allowed_methods'] : array('GET', 'POST', 'PUT', 'DELETE');\r\n      $allowed_methods  = !is_array($allowed_methods) ? array_map('trim', preg_split( \"/( |,|;|\\n)/\", $allowed_methods)) : $allowed_methods;\r\n      $available_methods = array('GET', 'POST', 'PUT', 'DELETE');\r\n      foreach ($allowed_methods as $method) {\r\n        if (!in_array($method, $available_methods)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $action, $data),\r\n            'msg' => 'cors_invalid_method'\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n\r\n      try {\r\n        $redis->hMSet('CORS_SETTINGS', array(\r\n          'allowed_origins' => implode(', ', $allowed_origins),\r\n          'allowed_methods' => implode(', ', $allowed_methods)\r\n        ));\r\n      } catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $data),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $action, $data),\r\n        'msg' => 'cors_headers_edited'\r\n      );\r\n      return true;\r\n    break;\r\n    case \"get\":\r\n      try {\r\n        $cors_settings                  = $redis->hMGet('CORS_SETTINGS', array('allowed_origins', 'allowed_methods'));\r\n      } catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $data),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n      }\r\n\r\n      $cors_settings                    = !$cors_settings ? array('allowed_origins' => $_SERVER['SERVER_NAME'], 'allowed_methods' => 'GET, POST, PUT, DELETE') : $cors_settings;\r\n      $cors_settings['allowed_origins'] = empty($cors_settings['allowed_origins']) ? $_SERVER['SERVER_NAME'] : $cors_settings['allowed_origins'];\r\n      $cors_settings['allowed_methods'] = empty($cors_settings['allowed_methods']) ? 'GET, POST, PUT, DELETE, OPTION' : $cors_settings['allowed_methods'];\r\n\r\n      return $cors_settings;\r\n    break;\r\n    case \"set_headers\":\r\n      $cors_settings = cors('get');\r\n      // check if requested origin is in allowed origins\r\n      $allowed_origins = explode(', ', $cors_settings['allowed_origins']);\r\n      $cors_settings['allowed_origins'] = $allowed_origins[0];\r\n      if (in_array('*', $allowed_origins)){\r\n        $cors_settings['allowed_origins'] = '*';\r\n      } else if (array_key_exists('HTTP_ORIGIN', $_SERVER) && in_array($_SERVER['HTTP_ORIGIN'], $allowed_origins)) {\r\n        $cors_settings['allowed_origins'] = $_SERVER['HTTP_ORIGIN'];\r\n      }\r\n      // always allow OPTIONS for preflight request\r\n      $cors_settings[\"allowed_methods\"] = empty($cors_settings[\"allowed_methods\"]) ? 'OPTIONS' : $cors_settings[\"allowed_methods\"] . ', ' . 'OPTIONS';\r\n\r\n      header('Access-Control-Allow-Origin: ' . $cors_settings['allowed_origins']);\r\n      header('Access-Control-Allow-Methods: '. $cors_settings['allowed_methods']);\r\n      header('Access-Control-Allow-Headers: Accept, Content-Type, X-Api-Key, Origin');\r\n\r\n      // Access-Control settings requested, this is just a preflight request\r\n      if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS' &&\r\n        isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) &&\r\n        isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {\r\n\r\n        $allowed_methods = explode(', ', $cors_settings[\"allowed_methods\"]);\r\n        if (in_array($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'], $allowed_methods, true))\r\n          // method allowed send 200 OK\r\n          http_response_code(200);\r\n        else\r\n          // method not allowed send 405 METHOD NOT ALLOWED\r\n          http_response_code(405);\r\n\r\n        exit;\r\n      }\r\n    break;\r\n  }\r\n}\r\nfunction getBaseURL($protocol = null) {\r\n  // Get current server name\r\n  $host = strtolower($_SERVER['SERVER_NAME']);\r\n\r\n  // craft allowed server name list\r\n  $mailcow_hostname = strtolower(getenv(\"MAILCOW_HOSTNAME\"));\r\n  $additional_server_names = strtolower(getenv(\"ADDITIONAL_SERVER_NAMES\")) ?: \"\";\r\n  $additional_server_names = preg_replace('/\\s+/', '', $additional_server_names);\r\n  $allowed_server_names = $additional_server_names !== \"\" ? explode(',', $additional_server_names) : array();\r\n  array_push($allowed_server_names, $mailcow_hostname);\r\n\r\n  // Fallback to MAILCOW HOSTNAME if current server name is not in allowed list\r\n  if (!in_array($host, $allowed_server_names)) {\r\n    $host = $mailcow_hostname;\r\n  }\r\n\r\n  if (!isset($protocol)) {\r\n    $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';\r\n  }\r\n  $base_url = $protocol . '://' . $host;\r\n\r\n  return $base_url;\r\n}\r\nfunction uuid4() {\r\n  $data = openssl_random_pseudo_bytes(16);\r\n\r\n  $data[6] = chr(ord($data[6]) & 0x0f | 0x40);\r\n  $data[8] = chr(ord($data[8]) & 0x3f | 0x80);\r\n\r\n  return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));\r\n}\r\nfunction identity_provider($_action = null, $_data = null, $_extra = null) {\r\n  global $pdo;\r\n  global $iam_provider;\r\n  global $iam_settings;\r\n\r\n  $data_log = $_data;\r\n  if (isset($data_log['client_secret'])) $data_log['client_secret'] = '*';\r\n  if (isset($data_log['access_token'])) $data_log['access_token'] = '*';\r\n\r\n  switch ($_action) {\r\n    case 'get':\r\n      $settings = array();\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `identity_provider`;\");\r\n      $stmt->execute();\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      foreach($rows as $row){\r\n        switch ($row[\"key\"]) {\r\n          case \"redirect_url_extra\":\r\n          case \"mappers\":\r\n          case \"templates\":\r\n            $settings[$row[\"key\"]] = json_decode($row[\"value\"]);\r\n          break;\r\n          case \"use_ssl\":\r\n          case \"use_tls\":\r\n          case \"login_provisioning\":\r\n          case \"ignore_ssl_errors\":\r\n            $settings[$row[\"key\"]] = boolval($row[\"value\"]);\r\n          break;\r\n          default:\r\n            $settings[$row[\"key\"]] = $row[\"value\"];\r\n          break;\r\n        }\r\n      }\r\n      // set login_provisioning if not exists\r\n      if (!array_key_exists('login_provisioning', $settings)) {\r\n        $settings['login_provisioning'] = 1;\r\n      }\r\n      // return default client_scopes for generic-oidc if none is set\r\n      if ($settings[\"authsource\"] == \"generic-oidc\" && empty($settings[\"client_scopes\"])){\r\n        $settings[\"client_scopes\"] = \"openid profile email mailcow_template\";\r\n      }\r\n      if ($_extra['hide_sensitive']){\r\n        $settings['client_secret'] = '';\r\n        $settings['access_token'] = '';\r\n      }\r\n      // return default ldap options\r\n      if ($settings[\"authsource\"] == \"ldap\"){\r\n        $settings['use_ssl'] = !isset($settings['use_ssl']) ? false : $settings['use_ssl'];\r\n        $settings['use_tls'] = !isset($settings['use_tls']) ? false : $settings['use_tls'];\r\n        $settings['ignore_ssl_errors'] = !isset($settings['ignore_ssl_errors']) ? false : $settings['ignore_ssl_errors'];\r\n      }\r\n      return $settings;\r\n    break;\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      if (!isset($_data['authsource'])){\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $data_log),\r\n          'msg' => array('required_data_missing', '')\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $available_authsources = array(\r\n        \"keycloak\",\r\n        \"generic-oidc\",\r\n        \"ldap\"\r\n      );\r\n      $_data['authsource'] = strtolower($_data['authsource']);\r\n      if (!in_array($_data['authsource'], $available_authsources)){\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $data_log),\r\n          'msg' => array('invalid_authsource', $setting)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `mailbox`\r\n          WHERE `authsource` != 'mailcow'\r\n          AND `authsource` IS NOT NULL\r\n          AND `authsource` != :authsource\");\r\n      $stmt->execute(array(':authsource' => $_data['authsource']));\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      if ($rows) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $data_log),\r\n          'msg' => array('authsource_in_use', $setting)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $_data['ignore_ssl_error']    = isset($_data['ignore_ssl_error']) ? boolval($_data['ignore_ssl_error']) : false;\r\n      $_data['login_provisioning']  = isset($_data['login_provisioning']) ? boolval($_data['login_provisioning']) : false;\r\n      switch ($_data['authsource']) {\r\n        case \"keycloak\":\r\n          $_data['server_url']        = (!empty($_data['server_url'])) ? rtrim($_data['server_url'], '/') : null;\r\n          $_data['mailpassword_flow'] = isset($_data['mailpassword_flow']) ? intval($_data['mailpassword_flow']) : 0;\r\n          $_data['periodic_sync']     = isset($_data['periodic_sync']) ? intval($_data['periodic_sync']) : 0;\r\n          $_data['import_users']      = isset($_data['import_users']) ? intval($_data['import_users']) : 0;\r\n          $_data['sync_interval']     = (!empty($_data['sync_interval'])) ? intval($_data['sync_interval']) : 15;\r\n          $_data['sync_interval']     = $_data['sync_interval'] < 1 ? 1 : $_data['sync_interval'];\r\n          $required_settings          = array('authsource', 'server_url', 'realm', 'client_id', 'client_secret', 'redirect_url', 'version', 'mailpassword_flow', 'periodic_sync', 'import_users', 'sync_interval', 'ignore_ssl_error', 'login_provisioning');\r\n        break;\r\n        case \"generic-oidc\":\r\n          $_data['authorize_url']     = (!empty($_data['authorize_url'])) ? $_data['authorize_url'] : null;\r\n          $_data['token_url']         = (!empty($_data['token_url'])) ? $_data['token_url'] : null;\r\n          $_data['userinfo_url']      = (!empty($_data['userinfo_url'])) ? $_data['userinfo_url'] : null;\r\n          $_data['client_scopes']     = (!empty($_data['client_scopes'])) ? $_data['client_scopes'] : \"openid profile email mailcow_template\";\r\n          $required_settings          = array('authsource', 'authorize_url', 'token_url', 'client_id', 'client_secret', 'redirect_url', 'userinfo_url', 'client_scopes', 'ignore_ssl_error', 'login_provisioning');\r\n        break;\r\n        case \"ldap\":\r\n          $_data['host']              = (!empty($_data['host'])) ? str_replace(\" \", \"\", $_data['host']) : \"\";\r\n          $_data['port']              = (!empty($_data['port'])) ? intval($_data['port']) : 389;\r\n          $_data['username_field']    = (!empty($_data['username_field'])) ? strtolower($_data['username_field']) : \"mail\";\r\n          $_data['attribute_field']   = (!empty($_data['attribute_field'])) ? strtolower($_data['attribute_field']) : \"\";\r\n          $_data['filter']            = (!empty($_data['filter'])) ? $_data['filter'] : \"\";\r\n          $_data['periodic_sync']     = isset($_data['periodic_sync']) ? intval($_data['periodic_sync']) : 0;\r\n          $_data['import_users']      = isset($_data['import_users']) ? intval($_data['import_users']) : 0;\r\n          $_data['use_ssl']           = isset($_data['use_ssl']) ? boolval($_data['use_ssl']) : false;\r\n          $_data['use_tls']           = isset($_data['use_tls']) && !$_data['use_ssl'] ? boolval($_data['use_tls']) : false;\r\n          $_data['sync_interval']     = (!empty($_data['sync_interval'])) ? intval($_data['sync_interval']) : 15;\r\n          $_data['sync_interval']     = $_data['sync_interval'] < 1 ? 1 : $_data['sync_interval'];\r\n          $required_settings          = array('authsource', 'host', 'port', 'basedn', 'username_field', 'filter', 'attribute_field', 'binddn', 'bindpass', 'periodic_sync', 'import_users', 'sync_interval', 'use_ssl', 'use_tls', 'ignore_ssl_error', 'login_provisioning');\r\n        break;\r\n      }\r\n\r\n      $pdo->beginTransaction();\r\n      $stmt = $pdo->prepare(\"INSERT INTO identity_provider (`key`, `value`) VALUES (:key, :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n      // add connection settings\r\n      foreach($required_settings as $setting){\r\n        if (!isset($_data[$setting])){\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $data_log),\r\n            'msg' => array('required_data_missing', $setting)\r\n          );\r\n          $pdo->rollback();\r\n          return false;\r\n        }\r\n\r\n        $stmt->bindParam(':key', $setting);\r\n        $stmt->bindParam(':value', $_data[$setting]);\r\n        $stmt->execute();\r\n      }\r\n      $pdo->commit();\r\n\r\n      // add redirect_url_extra\r\n      if (isset($_data['redirect_url_extra'])){\r\n        $_data['redirect_url_extra'] = (!is_array($_data['redirect_url_extra'])) ? array($_data['redirect_url_extra']) : $_data['redirect_url_extra'];\r\n\r\n        $redirect_url_extra = array_filter($_data['redirect_url_extra']);\r\n        $redirect_url_extra = json_encode($redirect_url_extra);\r\n\r\n        $stmt = $pdo->prepare(\"INSERT INTO identity_provider (`key`, `value`) VALUES ('redirect_url_extra', :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n        $stmt->bindParam(':value', $redirect_url_extra);\r\n        $stmt->execute();\r\n      }\r\n\r\n      // add default template\r\n      if (isset($_data['default_template'])) {\r\n        $_data['default_template'] = (empty($_data['default_template'])) ? \"\" : $_data['default_template'];\r\n        $stmt = $pdo->prepare(\"INSERT INTO identity_provider (`key`, `value`) VALUES ('default_template', :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n        $stmt->bindParam(':value', $_data['default_template']);\r\n        $stmt->execute();\r\n      }\r\n\r\n      // add mappers\r\n      if (isset($_data['mappers']) && isset($_data['templates'])){\r\n        $_data['mappers'] = (!is_array($_data['mappers'])) ? array($_data['mappers']) : $_data['mappers'];\r\n        $_data['templates'] = (!is_array($_data['templates'])) ? array($_data['templates']) : $_data['templates'];\r\n\r\n        $mappers = array_filter($_data['mappers']);\r\n        $templates = array_filter($_data['templates']);\r\n        if (count($mappers) == count($templates)){\r\n          $mappers = json_encode($mappers);\r\n          $templates = json_encode($templates);\r\n\r\n          $stmt = $pdo->prepare(\"INSERT INTO identity_provider (`key`, `value`) VALUES ('mappers', :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n          $stmt->bindParam(':value', $mappers);\r\n          $stmt->execute();\r\n          $stmt = $pdo->prepare(\"INSERT INTO identity_provider (`key`, `value`) VALUES ('templates', :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n          $stmt->bindParam(':value', $templates);\r\n          $stmt->execute();\r\n        }\r\n      }\r\n\r\n      // delete old access_token\r\n      $stmt = $pdo->query(\"INSERT INTO identity_provider (`key`, `value`) VALUES ('access_token', '') ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $data_log),\r\n        'msg' => array('object_modified', '')\r\n      );\r\n      return true;\r\n    break;\r\n    case 'test':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      switch ($_data['authsource']) {\r\n        case 'keycloak':\r\n          $url = \"{$_data['server_url']}/realms/{$_data['realm']}/protocol/openid-connect/token\";\r\n          $req = http_build_query(array(\r\n            'grant_type'    => 'client_credentials',\r\n            'client_id'     => $_data['client_id'],\r\n            'client_secret' => $_data['client_secret']\r\n          ));\r\n          $curl = curl_init();\r\n          curl_setopt($curl, CURLOPT_URL, $url);\r\n          curl_setopt($curl, CURLOPT_TIMEOUT, 7);\r\n          curl_setopt($curl, CURLOPT_POST, 1);\r\n          curl_setopt($curl, CURLOPT_POSTFIELDS, $req);\r\n          curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));\r\n          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n          if ($_data['ignore_ssl_error'] == \"1\"){\r\n            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);\r\n            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);\r\n          }\r\n          $res = curl_exec($curl);\r\n          $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);\r\n          curl_close ($curl);\r\n\r\n          if ($code != 200) {\r\n            return false;\r\n          }\r\n        break;\r\n        case 'generic-oidc':\r\n          $url = $_data['token_url'];\r\n          $curl = curl_init();\r\n          curl_setopt($curl, CURLOPT_URL, $url);\r\n          curl_setopt($curl, CURLOPT_TIMEOUT, 7);\r\n          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, \"OPTIONS\");\r\n          if ($_data['ignore_ssl_error'] == \"1\"){\r\n            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);\r\n            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);\r\n          }\r\n          $res = curl_exec($curl);\r\n          $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);\r\n          curl_close ($curl);\r\n\r\n          if ($code != 200) {\r\n            return false;\r\n          }\r\n        break;\r\n        case 'ldap':\r\n          if (!$_data['host'] || !$_data['port'] || !$_data['basedn'] ||\r\n            !$_data['binddn'] || !$_data['bindpass']){\r\n              return false;\r\n          }\r\n          $_data['use_ssl'] = isset($_data['use_ssl']) ? boolval($_data['use_ssl']) : false;\r\n          $_data['use_tls'] = isset($_data['use_tls']) && !$_data['use_ssl'] ? boolval($_data['use_tls']) : false;\r\n          $_data['ignore_ssl_error'] = isset($_data['ignore_ssl_error']) ? boolval($_data['ignore_ssl_error']) : false;\r\n          $options = array();\r\n          if ($_data['ignore_ssl_error']) {\r\n            $options[LDAP_OPT_X_TLS_REQUIRE_CERT] = LDAP_OPT_X_TLS_NEVER;\r\n          }\r\n          $provider = new \\LdapRecord\\Connection([\r\n            'hosts'                     => explode(\",\", $_data['host']),\r\n            'port'                      => $_data['port'],\r\n            'base_dn'                   => $_data['basedn'],\r\n            'username'                  => $_data['binddn'],\r\n            'password'                  => $_data['bindpass'],\r\n            'use_ssl'                   => $_data['use_ssl'],\r\n            'use_tls'                   => $_data['use_tls'],\r\n            'options'                   => $options\r\n          ]);\r\n          try {\r\n            $provider->connect();\r\n          } catch (Throwable $e) {\r\n            return false;\r\n          }\r\n        break;\r\n      }\r\n\r\n      return true;\r\n    break;\r\n    case \"delete\":\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->query(\"SELECT * FROM `mailbox`\r\n          WHERE `authsource` != 'mailcow'\r\n          AND `authsource` IS NOT NULL\");\r\n      $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      if ($rows) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $data_log),\r\n          'msg' => array('authsource_in_use', $setting)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->query(\"DELETE FROM identity_provider;\");\r\n\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $data_log),\r\n        'msg' => array('item_deleted', '')\r\n      );\r\n      return true;\r\n    break;\r\n    case \"init\":\r\n      $settings = identity_provider('get');\r\n      $provider = null;\r\n\r\n      switch ($settings['authsource']) {\r\n        case \"keycloak\":\r\n          if ($settings['server_url'] && $settings['realm'] && $settings['client_id'] &&\r\n            $settings['client_secret'] && $settings['redirect_url'] && $settings['version']){\r\n            $guzzyClient = new GuzzleHttp\\Client([\r\n              'defaults' => [\r\n                \\GuzzleHttp\\RequestOptions::CONNECT_TIMEOUT => 5,\r\n                \\GuzzleHttp\\RequestOptions::ALLOW_REDIRECTS => true],\r\n                \\GuzzleHttp\\RequestOptions::VERIFY => !$settings['ignore_ssl_error'],\r\n              ]\r\n            );\r\n            $provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\r\n              'authServerUrl'         => $settings['server_url'],\r\n              'realm'                 => $settings['realm'],\r\n              'clientId'              => $settings['client_id'],\r\n              'clientSecret'          => $settings['client_secret'],\r\n              'redirectUri'           => $settings['redirect_url'],\r\n              'version'               => $settings['version'],\r\n              // 'encryptionAlgorithm'   => 'RS256',                             // optional\r\n              // 'encryptionKeyPath'     => '../key.pem'                         // optional\r\n              // 'encryptionKey'         => 'contents_of_key_or_certificate'     // optional\r\n            ]);\r\n            $provider->setHttpClient($guzzyClient);\r\n          }\r\n        break;\r\n        case \"generic-oidc\":\r\n          if ($settings['client_id'] && $settings['client_secret'] && $settings['redirect_url'] &&\r\n            $settings['authorize_url'] && $settings['token_url'] && $settings['userinfo_url']){\r\n            $guzzyClient = new GuzzleHttp\\Client([\r\n              'defaults' => [\r\n                \\GuzzleHttp\\RequestOptions::CONNECT_TIMEOUT => 5,\r\n                \\GuzzleHttp\\RequestOptions::ALLOW_REDIRECTS => true],\r\n                \\GuzzleHttp\\RequestOptions::VERIFY => !$settings['ignore_ssl_error'],\r\n              ]\r\n            );\r\n            $provider = new \\League\\OAuth2\\Client\\Provider\\GenericProvider([\r\n              'clientId'                => $settings['client_id'],\r\n              'clientSecret'            => $settings['client_secret'],\r\n              'redirectUri'             => $settings['redirect_url'],\r\n              'urlAuthorize'            => $settings['authorize_url'],\r\n              'urlAccessToken'          => $settings['token_url'],\r\n              'urlResourceOwnerDetails' => $settings['userinfo_url'],\r\n              'scopes'                  => $settings['client_scopes']\r\n            ]);\r\n            $provider->setHttpClient($guzzyClient);\r\n          }\r\n        break;\r\n        case \"ldap\":\r\n          if ($settings['host'] && $settings['port'] && $settings['basedn'] &&\r\n            $settings['binddn'] && $settings['bindpass']){\r\n            $options = array();\r\n            if ($settings['ignore_ssl_error']) {\r\n              $options[LDAP_OPT_X_TLS_REQUIRE_CERT] = LDAP_OPT_X_TLS_NEVER;\r\n            }\r\n            $provider = new \\LdapRecord\\Connection([\r\n              'hosts'                     => explode(\",\", $settings['host']),\r\n              'port'                      => $settings['port'],\r\n              'base_dn'                   => $settings['basedn'],\r\n              'username'                  => $settings['binddn'],\r\n              'password'                  => $settings['bindpass'],\r\n              'use_ssl'                   => $settings['use_ssl'],\r\n              'use_tls'                   => $settings['use_tls'],\r\n              'options'                   => $options\r\n            ]);\r\n            try {\r\n              $provider->connect();\r\n            } catch (Throwable $e) {\r\n              $provider = null;\r\n            }\r\n          }\r\n        break;\r\n      }\r\n      return $provider;\r\n    break;\r\n    case \"verify-sso\":\r\n      if ($iam_settings['authsource'] != 'keycloak' && $iam_settings['authsource'] != 'generic-oidc'){\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, \"no OIDC provider configured\"),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      try {\r\n        $token = $iam_provider->getAccessToken('authorization_code', ['code' => $_GET['code']]);\r\n        $plain_token = $token->getToken();\r\n        $plain_refreshtoken = $token->getRefreshToken();\r\n        $info = $iam_provider->getResourceOwner($token)->toArray();\r\n      } catch (Throwable $e) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $e->getMessage()),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n      // check if email address is given\r\n      if (empty($info['email'])) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, 'No email address found for user'),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      // get mapped template\r\n      $user_template = $info['mailcow_template'];\r\n      $mapper_key = array_search($user_template, $iam_settings['mappers']);\r\n\r\n      // token valid, get mailbox\r\n      $stmt = $pdo->prepare(\"SELECT\r\n        mailbox.*,\r\n        domain.active AS d_active\r\n        FROM `mailbox`\r\n        INNER JOIN domain on mailbox.domain = domain.domain\r\n        WHERE `kind` NOT REGEXP 'location|thing|group'\r\n          AND `username` = :user\");\r\n      $stmt->execute(array(':user' => $info['email']));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if ($row){\r\n        if (!in_array($row['authsource'], array(\"keycloak\", \"generic-oidc\"))) {\r\n          clear_session();\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $info['email'], \"The user's authentication source is not of type OIDC\"),\r\n            'msg' => 'login_failed'\r\n          );\r\n          return false;\r\n        }\r\n        if ($mapper_key !== false) {\r\n          // update user\r\n          $_SESSION['access_all_exception'] = '1';\r\n          mailbox('edit', 'mailbox_from_template', array(\r\n            'username' => $info['email'],\r\n            'name' => $info['name'],\r\n            'template' => $iam_settings['templates'][$mapper_key]\r\n          ));\r\n          $_SESSION['access_all_exception'] = '0';\r\n\r\n          // get updated row\r\n          $stmt = $pdo->prepare(\"SELECT\r\n            mailbox.*,\r\n            domain.active AS d_active\r\n            FROM `mailbox`\r\n            INNER JOIN domain on mailbox.domain = domain.domain\r\n            WHERE `kind` NOT REGEXP 'location|thing|group'\r\n              AND `username` = :user\");\r\n          $stmt->execute(array(':user' => $info['email']));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        }\r\n        if ($row['active'] != 1 || $row['d_active'] != 1) {\r\n          clear_session();\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $info['email'], 'Domain or mailbox is inactive'),\r\n            'msg' => 'login_failed'\r\n          );\r\n          return false;\r\n        }\r\n        set_user_loggedin_session($info['email']);\r\n        $_SESSION['iam_token'] = $plain_token;\r\n        $_SESSION['iam_refresh_token'] = $plain_refreshtoken;\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role']),\r\n          'msg' => array('logged_in_as', $_SESSION['mailcow_cc_username'])\r\n        );\r\n        return true;\r\n      }\r\n\r\n      // user doesn't exist, check if login provisioning is enabled\r\n      if (!$iam_settings['login_provisioning']){\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, \"Auto-create users on login is deactivated\"),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      if (empty($iam_settings['mappers']) || empty($user_template) || $mapper_key === false){\r\n        if (!empty($iam_settings['default_template'])) {\r\n          $mbox_template = $iam_settings['default_template'];\r\n        } else {\r\n          clear_session();\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $info['email'], 'No matching attribute mapping was found'),\r\n            'msg' => 'login_failed'\r\n          );\r\n          return false;\r\n        }\r\n      } else {\r\n        $mbox_template = $iam_settings['templates'][$mapper_key];\r\n      }\r\n\r\n      // create mailbox\r\n      $_SESSION['access_all_exception'] = '1';\r\n      $create_res = mailbox('add', 'mailbox_from_template', array(\r\n        'domain' => explode('@', $info['email'])[1],\r\n        'local_part' => explode('@', $info['email'])[0],\r\n        'name' => $info['name'],\r\n        'authsource' => $iam_settings['authsource'],\r\n        'template' => $mbox_template\r\n      ));\r\n      $_SESSION['access_all_exception'] = '0';\r\n      if (!$create_res){\r\n        clear_session();\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $info['email'], 'Could not create mailbox on login'),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      // double check if mailbox and domain is active\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `mailbox`\r\n      INNER JOIN domain on mailbox.domain = domain.domain\r\n      WHERE `kind` NOT REGEXP 'location|thing|group'\r\n        AND `mailbox`.`active`='1'\r\n        AND `domain`.`active`='1'\r\n        AND `username` = :user\");\r\n      $stmt->execute(array(':user' => $info['email']));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (empty($row)) {\r\n        clear_session();\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $info['email'], 'Domain or mailbox is inactive'),\r\n          'msg' => 'login_failed'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      set_user_loggedin_session($info['email']);\r\n      $_SESSION['iam_token'] = $plain_token;\r\n      $_SESSION['iam_refresh_token'] = $plain_refreshtoken;\r\n      $_SESSION['return'][] =  array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role']),\r\n        'msg' => array('logged_in_as', $_SESSION['mailcow_cc_username'])\r\n      );\r\n      return true;\r\n    break;\r\n    case \"refresh-token\":\r\n      try {\r\n        $token = $iam_provider->getAccessToken('refresh_token', ['refresh_token' => $_SESSION['iam_refresh_token']]);\r\n        $plain_token = $token->getToken();\r\n        $plain_refreshtoken = $token->getRefreshToken();\r\n        $info = $iam_provider->getResourceOwner($token)->toArray();\r\n      } catch (Throwable $e) {\r\n        clear_session();\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__),\r\n          'msg' => array('refresh_login_failed', $e->getMessage())\r\n        );\r\n        return false;\r\n      }\r\n\r\n      if (empty($info['email'])){\r\n        clear_session();\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role']),\r\n          'msg' => 'refresh_login_failed'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      set_user_loggedin_session($info['email']);\r\n      $_SESSION['iam_token'] = $plain_token;\r\n      $_SESSION['iam_refresh_token'] = $plain_refreshtoken;\r\n      return true;\r\n    break;\r\n    case \"get-redirect\":\r\n      if ($iam_settings['authsource'] != 'keycloak' && $iam_settings['authsource'] != 'generic-oidc')\r\n        return false;\r\n      $options = [];\r\n      if (isset($iam_settings['redirect_url_extra'])) {\r\n        // check if the current domain is used in an extra redirect URL\r\n        $targetDomain = strtolower($_SERVER['HTTP_HOST']);\r\n        foreach ($iam_settings['redirect_url_extra'] as $testUrl) {\r\n          $testUrlParsed = parse_url($testUrl);\r\n          if (isset($testUrlParsed['host']) && strtolower($testUrlParsed['host']) == $targetDomain) {\r\n            $options['redirect_uri'] = $testUrl;\r\n            break;\r\n          }\r\n        }\r\n      }\r\n      $authUrl = $iam_provider->getAuthorizationUrl($options);\r\n      $_SESSION['oauth2state'] = $iam_provider->getState();\r\n      return $authUrl;\r\n    break;\r\n    case \"get-keycloak-admin-token\":\r\n      // get access_token for service account of mailcow client\r\n      if ($iam_settings['authsource'] !== 'keycloak') return false;\r\n      if (isset($iam_settings['access_token'])) {\r\n        // check if access_token is valid\r\n        $url = \"{$iam_settings['server_url']}/realms/{$iam_settings['realm']}/protocol/openid-connect/token/introspect\";\r\n        $req = http_build_query(array(\r\n          'token'    => $iam_settings['access_token'],\r\n          'client_id'     => $iam_settings['client_id'],\r\n          'client_secret' => $iam_settings['client_secret']\r\n        ));\r\n        $curl = curl_init();\r\n        curl_setopt($curl, CURLOPT_URL, $url);\r\n        curl_setopt($curl, CURLOPT_TIMEOUT, 7);\r\n        curl_setopt($curl, CURLOPT_POST, 1);\r\n        curl_setopt($curl, CURLOPT_POSTFIELDS, $req);\r\n        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));\r\n        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n        curl_setopt($curl, CURLOPT_TIMEOUT, 5);\r\n        $res = json_decode(curl_exec($curl), true);\r\n        $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);\r\n        curl_close ($curl);\r\n        if ($code == 200 && $res['active'] == true) {\r\n          // token is valid\r\n          return $iam_settings['access_token'];\r\n        }\r\n      }\r\n\r\n      $url = \"{$iam_settings['server_url']}/realms/{$iam_settings['realm']}/protocol/openid-connect/token\";\r\n      $req = http_build_query(array(\r\n        'grant_type'    => 'client_credentials',\r\n        'client_id'     => $iam_settings['client_id'],\r\n        'client_secret' => $iam_settings['client_secret']\r\n      ));\r\n      $curl = curl_init();\r\n      curl_setopt($curl, CURLOPT_URL, $url);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, 7);\r\n      curl_setopt($curl, CURLOPT_POST, 1);\r\n      curl_setopt($curl, CURLOPT_POSTFIELDS, $req);\r\n      curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));\r\n      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n      curl_setopt($curl, CURLOPT_TIMEOUT, 5);\r\n      $res = json_decode(curl_exec($curl), true);\r\n      $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);\r\n      curl_close ($curl);\r\n      if ($code != 200) {\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->prepare(\"INSERT INTO identity_provider (`key`, `value`) VALUES (:key, :value) ON DUPLICATE KEY UPDATE `value` = VALUES(`value`);\");\r\n      $stmt->execute(array(\r\n        ':key' => 'access_token',\r\n        ':value' => $res['access_token']\r\n      ));\r\n      return $res['access_token'];\r\n    break;\r\n  }\r\n}\r\nfunction reset_password($action, $data = null) {\r\n  global $pdo;\r\n  global $redis;\r\n  global $mailcow_hostname;\r\n  global $PW_RESET_TOKEN_LIMIT;\r\n  global $PW_RESET_TOKEN_LIFETIME;\r\n\r\n\t$_data_log = $data;\r\n  if (isset($_data_log['new_password'])) $_data_log['new_password'] = '*';\r\n  if (isset($_data_log['new_password2'])) $_data_log['new_password2'] = '*';\r\n\r\n  switch ($action) {\r\n    case 'check':\r\n      $token = $data;\r\n\r\n      $stmt = $pdo->prepare(\"SELECT `t1`.`username` FROM `reset_password` AS `t1` JOIN `mailbox` AS `t2` ON `t1`.`username` = `t2`.`username` WHERE `t1`.`token` = :token AND `t1`.`created` > DATE_SUB(NOW(), INTERVAL :lifetime MINUTE) AND `t2`.`active` = 1 AND `t2`.`authsource` = 'mailcow';\");\r\n      $stmt->execute(array(\r\n        ':token' => preg_replace('/[^a-zA-Z0-9-]/', '', $token),\r\n        ':lifetime' => $PW_RESET_TOKEN_LIFETIME\r\n      ));\r\n      $return = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      return empty($return['username']) ? false : $return['username'];\r\n    break;\r\n    case 'issue':\r\n      $username = $data;\r\n\r\n      // perform cleanup\r\n      $stmt = $pdo->prepare(\"DELETE FROM `reset_password` WHERE created < DATE_SUB(NOW(), INTERVAL :lifetime MINUTE);\");\r\n      $stmt->execute(array(':lifetime' => $PW_RESET_TOKEN_LIFETIME));\r\n\r\n      if (filter_var($username, FILTER_VALIDATE_EMAIL) === false) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $pw_reset_notification = reset_password('get_notification', 'raw');\r\n      if (!$pw_reset_notification) return false;\r\n      if (empty($pw_reset_notification['from']) || empty($pw_reset_notification['subject'])) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'password_reset_na'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `mailbox`\r\n        WHERE `username` = :username AND authsource = 'mailcow'\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $mailbox_data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n      if (empty($mailbox_data)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'password_reset_invalid_user'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $mailbox_attr = json_decode($mailbox_data['attributes'], true);\r\n      if (empty($mailbox_attr['recovery_email']) || filter_var($mailbox_attr['recovery_email'], FILTER_VALIDATE_EMAIL) === false) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => \"password_reset_invalid_user\"\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `reset_password`\r\n        WHERE `username` = :username\");\r\n      $stmt->execute(array(':username' => $username));\r\n      $generated_token_count = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n      if ($generated_token_count >= $PW_RESET_TOKEN_LIMIT) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => \"reset_token_limit_exceeded\"\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $token = implode('-', array(\r\n        strtoupper(bin2hex(random_bytes(3))),\r\n        strtoupper(bin2hex(random_bytes(3))),\r\n        strtoupper(bin2hex(random_bytes(3))),\r\n        strtoupper(bin2hex(random_bytes(3))),\r\n        strtoupper(bin2hex(random_bytes(3)))\r\n      ));\r\n\r\n      $stmt = $pdo->prepare(\"INSERT INTO `reset_password` (`username`, `token`)\r\n        VALUES (:username, :token)\");\r\n      $stmt->execute(array(\r\n        ':username' => $username,\r\n        ':token' => $token\r\n      ));\r\n\r\n      $reset_link = getBaseURL() . \"/reset-password?token=\" . $token;\r\n\r\n      $request_date = new DateTime();\r\n      $locale_date = locale_get_default();\r\n      $date_formatter = new IntlDateFormatter(\r\n        $locale_date,\r\n        IntlDateFormatter::FULL,\r\n        IntlDateFormatter::FULL\r\n      );\r\n      $formatted_request_date = $date_formatter->format($request_date);\r\n\r\n      // set template vars\r\n      // subject\r\n      $pw_reset_notification['subject'] = str_replace('{{hostname}}', $mailcow_hostname, $pw_reset_notification['subject']);\r\n      $pw_reset_notification['subject'] = str_replace('{{link}}', $reset_link, $pw_reset_notification['subject']);\r\n      $pw_reset_notification['subject'] = str_replace('{{username}}', $username, $pw_reset_notification['subject']);\r\n      $pw_reset_notification['subject'] = str_replace('{{username2}}', $mailbox_attr['recovery_email'], $pw_reset_notification['subject']);\r\n      $pw_reset_notification['subject'] = str_replace('{{date}}', $formatted_request_date, $pw_reset_notification['subject']);\r\n      $pw_reset_notification['subject'] = str_replace('{{token_lifetime}}', $PW_RESET_TOKEN_LIFETIME, $pw_reset_notification['subject']);\r\n      // text\r\n      $pw_reset_notification['text_tmpl'] = str_replace('{{hostname}}', $mailcow_hostname, $pw_reset_notification['text_tmpl']);\r\n      $pw_reset_notification['text_tmpl'] = str_replace('{{link}}', $reset_link, $pw_reset_notification['text_tmpl']);\r\n      $pw_reset_notification['text_tmpl'] = str_replace('{{username}}', $username, $pw_reset_notification['text_tmpl']);\r\n      $pw_reset_notification['text_tmpl'] = str_replace('{{username2}}', $mailbox_attr['recovery_email'], $pw_reset_notification['text_tmpl']);\r\n      $pw_reset_notification['text_tmpl'] = str_replace('{{date}}', $formatted_request_date, $pw_reset_notification['text_tmpl']);\r\n      $pw_reset_notification['text_tmpl'] = str_replace('{{token_lifetime}}', $PW_RESET_TOKEN_LIFETIME, $pw_reset_notification['text_tmpl']);\r\n      // html\r\n      $pw_reset_notification['html_tmpl'] = str_replace('{{hostname}}', $mailcow_hostname, $pw_reset_notification['html_tmpl']);\r\n      $pw_reset_notification['html_tmpl'] = str_replace('{{link}}', $reset_link, $pw_reset_notification['html_tmpl']);\r\n      $pw_reset_notification['html_tmpl'] = str_replace('{{username}}', $username, $pw_reset_notification['html_tmpl']);\r\n      $pw_reset_notification['html_tmpl'] = str_replace('{{username2}}', $mailbox_attr['recovery_email'], $pw_reset_notification['html_tmpl']);\r\n      $pw_reset_notification['html_tmpl'] = str_replace('{{date}}', $formatted_request_date, $pw_reset_notification['html_tmpl']);\r\n      $pw_reset_notification['html_tmpl'] = str_replace('{{token_lifetime}}', $PW_RESET_TOKEN_LIFETIME, $pw_reset_notification['html_tmpl']);\r\n\r\n\r\n      $email_sent = reset_password('send_mail', array(\r\n        \"from\" => $pw_reset_notification['from'],\r\n        \"to\" => $mailbox_attr['recovery_email'],\r\n        \"subject\" => $pw_reset_notification['subject'],\r\n        \"text\" => $pw_reset_notification['text_tmpl'],\r\n        \"html\" => $pw_reset_notification['html_tmpl']\r\n      ));\r\n\r\n      if (!$email_sent){\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => \"recovery_email_failed\"\r\n        );\r\n        return false;\r\n      }\r\n\r\n      list($localPart, $domainPart) = explode('@', $mailbox_attr['recovery_email']);\r\n      if (strlen($localPart) > 1) {\r\n        $maskedLocalPart = $localPart[0] . str_repeat('*', strlen($localPart) - 1);\r\n      } else {\r\n        $maskedLocalPart = \"*\";\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $action, $_data_log),\r\n        'msg' => array(\"recovery_email_sent\", $maskedLocalPart . '@' . $domainPart)\r\n      );\r\n      return array(\r\n        \"username\" => $username,\r\n        \"issue\" => \"success\"\r\n      );\r\n    break;\r\n    case 'reset':\r\n      $token = $data['token'];\r\n      $new_password = $data['new_password'];\r\n      $new_password2 = $data['new_password2'];\r\n      $username = $data['username'];\r\n      $check_tfa = $data['check_tfa'];\r\n\r\n      if (!$username || !$token) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'invalid_reset_token'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      # check new password\r\n      if (!password_check($new_password, $new_password2)) {\r\n        return false;\r\n      }\r\n\r\n      if ($check_tfa){\r\n        // check for tfa authenticators\r\n        $authenticators = get_tfa($username);\r\n        if (isset($authenticators['additional']) && is_array($authenticators['additional']) && count($authenticators['additional']) > 0) {\r\n          $_SESSION['pending_mailcow_cc_username'] = $username;\r\n          $_SESSION['pending_pw_reset_token'] = $token;\r\n          $_SESSION['pending_pw_new_password'] = $new_password;\r\n          $_SESSION['pending_tfa_methods'] = $authenticators['additional'];\r\n          $_SESSION['return'][] =  array(\r\n            'type' => 'info',\r\n            'log' => array(__FUNCTION__, $user, '*'),\r\n            'msg' => 'awaiting_tfa_confirmation'\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n\r\n      # set new password\r\n      $password_hashed = hash_password($new_password);\r\n      $stmt = $pdo->prepare(\"UPDATE `mailbox` SET\r\n        `password` = :password_hashed,\r\n        `attributes` = JSON_SET(`attributes`, '$.passwd_update', NOW())\r\n        WHERE `username` = :username AND authsource = 'mailcow'\");\r\n      $stmt->execute(array(\r\n        ':password_hashed' => $password_hashed,\r\n        ':username' => $username\r\n      ));\r\n\r\n      // perform cleanup\r\n      $stmt = $pdo->prepare(\"DELETE FROM `reset_password` WHERE `username` = :username;\");\r\n      $stmt->execute(array(\r\n        ':username' => $username\r\n      ));\r\n\r\n      update_sogo_static_view($username);\r\n\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $action, $_data_log),\r\n        'msg' => 'password_changed_success'\r\n      );\r\n      return true;\r\n    break;\r\n    case 'get_notification':\r\n      $type = $data;\r\n\r\n      try {\r\n        $settings['from'] = $redis->Get('PW_RESET_FROM');\r\n        $settings['subject'] = $redis->Get('PW_RESET_SUBJ');\r\n        $settings['html_tmpl'] = $redis->Get('PW_RESET_HTML');\r\n        $settings['text_tmpl'] = $redis->Get('PW_RESET_TEXT');\r\n        if (empty($settings['html_tmpl']) && empty($settings['text_tmpl'])) {\r\n          $settings['html_tmpl'] = file_get_contents(\"/tpls/pw_reset_html.tpl\");\r\n          $settings['text_tmpl'] = file_get_contents(\"/tpls/pw_reset_text.tpl\");\r\n        }\r\n\r\n        if ($type != \"raw\") {\r\n          $settings['html_tmpl'] = htmlspecialchars($settings['html_tmpl']);\r\n          $settings['text_tmpl'] = htmlspecialchars($settings['text_tmpl']);\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      return $settings;\r\n    break;\r\n    case 'send_mail':\r\n      $from = $data['from'];\r\n      $to = $data['to'];\r\n      $text = $data['text'];\r\n      $html = $data['html'];\r\n      $subject = $data['subject'];\r\n\r\n      if (!filter_var($from, FILTER_VALIDATE_EMAIL)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'from_invalid'\r\n        );\r\n        return false;\r\n      }\r\n      if (!filter_var($to, FILTER_VALIDATE_EMAIL)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'to_invalid'\r\n        );\r\n        return false;\r\n      }\r\n      if (empty($subject)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'subject_empty'\r\n        );\r\n        return false;\r\n      }\r\n      if (empty($text)) {\r\n        $_SESSION['return'][] =  array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => 'text_empty'\r\n        );\r\n        return false;\r\n      }\r\n\r\n      ini_set('max_execution_time', 0);\r\n      ini_set('max_input_time', 0);\r\n      $mail = new PHPMailer;\r\n      $mail->Timeout = 10;\r\n      $mail->SMTPOptions = array(\r\n        'ssl' => array(\r\n          'verify_peer' => false,\r\n          'verify_peer_name' => false,\r\n          'allow_self_signed' => true\r\n        )\r\n      );\r\n      $mail->isSMTP();\r\n      $mail->Host = 'postfix-mailcow';\r\n      $mail->SMTPAuth = false;\r\n      $mail->Port = 25;\r\n      $mail->setFrom($from);\r\n      $mail->Subject = $subject;\r\n      $mail->CharSet =\"UTF-8\";\r\n      if (!empty($html)) {\r\n        $mail->Body = $html;\r\n        $mail->AltBody = $text;\r\n      }\r\n      else {\r\n        $mail->Body = $text;\r\n      }\r\n      $mail->XMailer = 'MooMail';\r\n      $mail->AddAddress($to);\r\n      if (!$mail->send()) {\r\n        return false;\r\n      }\r\n      $mail->ClearAllRecipients();\r\n\r\n      return true;\r\n    break;\r\n  }\r\n\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $action, $_data_log),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n\r\n  switch ($action) {\r\n    case 'edit_notification':\r\n      $subject = $data['subject'];\r\n      $from = preg_replace('/[\\x00-\\x1F\\x80-\\xFF]/', '', $data['from']);\r\n\r\n      $from = (!filter_var($from, FILTER_VALIDATE_EMAIL)) ? \"\" : $from;\r\n      $subject = (empty($subject)) ? \"\" : $subject;\r\n      $text = (empty($data['text_tmpl'])) ? \"\" : $data['text_tmpl'];\r\n      $html = (empty($data['html_tmpl'])) ? \"\" : $data['html_tmpl'];\r\n\r\n      try {\r\n        $redis->Set('PW_RESET_FROM', $from);\r\n        $redis->Set('PW_RESET_SUBJ', $subject);\r\n        $redis->Set('PW_RESET_HTML', $html);\r\n        $redis->Set('PW_RESET_TEXT', $text);\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $action, $_data_log),\r\n        'msg' => 'saved_settings'\r\n      );\r\n    break;\r\n  }\r\n}\r\nfunction clear_session(){\r\n  session_regenerate_id(true);\r\n  session_unset();\r\n  session_destroy();\r\n  session_write_close();\r\n}\r\nfunction set_user_loggedin_session($user) {\r\n  session_regenerate_id(true);\r\n  $_SESSION['mailcow_cc_username'] = $user;\r\n  $_SESSION['mailcow_cc_role'] = 'user';\r\n  $sogo_sso_pass = file_get_contents(\"/etc/sogo-sso/sogo-sso.pass\");\r\n  $_SESSION['sogo-sso-user-allowed'][] = $user;\r\n  $_SESSION['sogo-sso-pass'] = $sogo_sso_pass;\r\n  unset($_SESSION['pending_mailcow_cc_username']);\r\n  unset($_SESSION['pending_mailcow_cc_role']);\r\n  unset($_SESSION['pending_tfa_methods']);\r\n}\r\nfunction protect_route($allowed_roles = ['admin', 'domainadmin', 'user'], $redirects = []) {\r\n  // Check if user is authenticated\r\n  if (!isset($_SESSION['mailcow_cc_role'])) {\r\n    if (isset($redirects['unauthenticated'])) {\r\n      header('Location: ' . $redirects['unauthenticated']);\r\n    } else {\r\n      header('Location: /');\r\n    }\r\n    exit();\r\n  }\r\n\r\n  // Check for pending actions (2FA setup, password update)\r\n  if (!empty($_SESSION['pending_tfa_setup']) || !empty($_SESSION['pending_pw_update'])) {\r\n    $pending_redirect = '/';\r\n    if ($_SESSION['mailcow_cc_role'] === 'admin') {\r\n      $pending_redirect = '/admin';\r\n    } elseif ($_SESSION['mailcow_cc_role'] === 'domainadmin') {\r\n      $pending_redirect = '/domainadmin';\r\n    }\r\n    header('Location: ' . $pending_redirect);\r\n    exit();\r\n  }\r\n\r\n  // Check if user's role is in the allowed roles for the route\r\n  if (!in_array($_SESSION['mailcow_cc_role'], $allowed_roles)) {\r\n    if (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'admin') {\r\n      header('Location: /admin/dashboard');\r\n      exit();\r\n    }\r\n    elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'domainadmin') {\r\n      header('Location: /domainadmin/mailbox');\r\n      exit();\r\n    }\r\n    elseif (isset($_SESSION['mailcow_cc_role']) && $_SESSION['mailcow_cc_role'] == 'user') {\r\n      header('Location: /user');\r\n      exit();\r\n    }\r\n    else {\r\n      header('Location: /');\r\n      exit();\r\n    }\r\n  }\r\n}\r\nfunction get_logs($application, $lines = false) {\r\n  if ($lines === false) {\r\n    $lines = $GLOBALS['LOG_LINES'] - 1;\r\n  }\r\n  elseif(is_numeric($lines) && $lines >= 1) {\r\n    $lines = abs(intval($lines) - 1);\r\n  }\r\n  else {\r\n    list ($from, $to) = explode('-', $lines);\r\n    $from = intval($from);\r\n    $to = intval($to);\r\n    if ($from < 1 || $to < $from) { return false; }\r\n  }\r\n  global $redis;\r\n  global $pdo;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    return false;\r\n  }\r\n  // SQL\r\n  if ($application == \"mailcow-ui\") {\r\n    if (isset($from) && isset($to)) {\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `logs` ORDER BY `id` DESC LIMIT :from, :to\");\r\n      $stmt->execute(array(\r\n        ':from' => $from - 1,\r\n        ':to' => $to\r\n      ));\r\n      $data = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n    else {\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `logs` ORDER BY `id` DESC LIMIT :lines\");\r\n      $stmt->execute(array(\r\n        ':lines' => $lines + 1,\r\n      ));\r\n      $data = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n    if (is_array($data)) {\r\n      return $data;\r\n    }\r\n  }\r\n  if ($application == \"sasl\") {\r\n    if (isset($from) && isset($to)) {\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `sasl_log` ORDER BY `datetime` DESC LIMIT :from, :to\");\r\n      $stmt->execute(array(\r\n        ':from' => $from - 1,\r\n        ':to' => $to\r\n      ));\r\n      $data = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n    else {\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `sasl_log` ORDER BY `datetime` DESC LIMIT :lines\");\r\n      $stmt->execute(array(\r\n        ':lines' => $lines + 1,\r\n      ));\r\n      $data = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n    }\r\n    if (is_array($data)) {\r\n      return $data;\r\n    }\r\n  }\r\n  // Redis\r\n  if ($application == \"dovecot-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('DOVECOT_MAILLOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('DOVECOT_MAILLOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"cron-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('CRON_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('CRON_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"postfix-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('POSTFIX_MAILLOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('POSTFIX_MAILLOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"sogo-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('SOGO_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('SOGO_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"watchdog-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('WATCHDOG_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('WATCHDOG_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"acme-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('ACME_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('ACME_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"ratelimited\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('RL_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('RL_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"api-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('API_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('API_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"netfilter-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('NETFILTER_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('NETFILTER_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"autodiscover-mailcow\") {\r\n    if (isset($from) && isset($to)) {\r\n      $data = $redis->lRange('AUTODISCOVER_LOG', $from - 1, $to - 1);\r\n    }\r\n    else {\r\n      $data = $redis->lRange('AUTODISCOVER_LOG', 0, $lines);\r\n    }\r\n    if ($data) {\r\n      foreach ($data as $json_line) {\r\n        $data_array[] = json_decode($json_line, true);\r\n      }\r\n      return $data_array;\r\n    }\r\n  }\r\n  if ($application == \"rspamd-history\") {\r\n    $curl = curl_init();\r\n    curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n    if (!is_numeric($lines)) {\r\n      list ($from, $to) = explode('-', $lines);\r\n      curl_setopt($curl, CURLOPT_URL,\"http://rspamd/history?from=\" . intval($from) . \"&to=\" . intval($to));\r\n    }\r\n    else {\r\n      curl_setopt($curl, CURLOPT_URL,\"http://rspamd/history?to=\" . intval($lines));\r\n    }\r\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n    $history = curl_exec($curl);\r\n    if (!curl_errno($curl)) {\r\n      $data_array = json_decode($history, true);\r\n      curl_close($curl);\r\n      return $data_array['rows'];\r\n    }\r\n    curl_close($curl);\r\n    return false;\r\n  }\r\n  if ($application == \"rspamd-stats\") {\r\n    $curl = curl_init();\r\n    curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n    curl_setopt($curl, CURLOPT_URL,\"http://rspamd/stat\");\r\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n    $stats = curl_exec($curl);\r\n    if (!curl_errno($curl)) {\r\n      $data_array = json_decode($stats, true);\r\n      curl_close($curl);\r\n      return $data_array;\r\n    }\r\n    curl_close($curl);\r\n    return false;\r\n  }\r\n  return false;\r\n}\r\nfunction getGUID() {\r\n  if (function_exists('com_create_guid')) {\r\n    return com_create_guid();\r\n  }\r\n  mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.\r\n  $charid = strtoupper(md5(uniqid(rand(), true)));\r\n  $hyphen = chr(45);// \"-\"\r\n  return substr($charid, 0, 8).$hyphen\r\n        .substr($charid, 8, 4).$hyphen\r\n        .substr($charid,12, 4).$hyphen\r\n        .substr($charid,16, 4).$hyphen\r\n        .substr($charid,20,12);\r\n}\r\n\r\nfunction cleanupJS($ignore = '', $folder = '/tmp/*.js') {\r\n  $now = time();\r\n  foreach (glob($folder) as $filename) {\r\n    if(strpos($filename, $ignore) !== false) {\r\n      continue;\r\n    }\r\n    if (is_file($filename)) {\r\n      if ($now - filemtime($filename) >= 60 * 60) {\r\n        unlink($filename);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nfunction cleanupCSS($ignore = '', $folder = '/tmp/*.css') {\r\n  $now = time();\r\n  foreach (glob($folder) as $filename) {\r\n    if(strpos($filename, $ignore) !== false) {\r\n      continue;\r\n    }\r\n    if (is_file($filename)) {\r\n      if ($now - filemtime($filename) >= 60 * 60) {\r\n        unlink($filename);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n?>\r\n"
  },
  {
    "path": "data/web/inc/functions.mailbox.inc.php",
    "content": "<?php\r\nfunction mailbox($_action, $_type, $_data = null, $_extra = null) {\r\n  global $pdo;\r\n  global $redis;\r\n  global $lang;\r\n  global $MAILBOX_DEFAULT_ATTRIBUTES;\r\n  global $iam_settings;\r\n\r\n  $_data_log = $_data;\r\n  !isset($_data_log['password']) ?: $_data_log['password'] = '*';\r\n  !isset($_data_log['password2']) ?: $_data_log['password2'] = '*';\r\n\r\n  // Track mailboxes affected by alias operations for incremental SOGo updates\r\n  $update_sogo_mailboxes = array();\r\n\r\n  switch ($_action) {\r\n    case 'add':\r\n      switch ($_type) {\r\n        case 'time_limited_alias':\r\n          if (!isset($_SESSION['acl']['spam_alias']) || $_SESSION['acl']['spam_alias'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            else {\r\n              $username = $_data['username'];\r\n            }\r\n          }\r\n          else {\r\n            $username = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          if (isset($_data[\"validity\"]) && !filter_var($_data[\"validity\"], FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 87600)))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'validity_missing'\r\n            );\r\n            return false;\r\n          }\r\n          else {\r\n            // Default to 1 yr\r\n            $_data[\"validity\"] = 8760;\r\n          }\r\n          if (isset($_data[\"permanent\"]) && filter_var($_data[\"permanent\"], FILTER_VALIDATE_BOOL)) {\r\n            $permanent = 1;\r\n          }\r\n          else {\r\n            $permanent = 0;\r\n          }\r\n          $domain = $_data['domain'];\r\n          $description = $_data['description'];\r\n          $valid_domains[] = mailbox('get', 'mailbox_details', $username)['domain'];\r\n          $valid_alias_domains = user_get_alias_details($username)['alias_domains'];\r\n          if (!empty($valid_alias_domains)) {\r\n            $valid_domains = array_merge($valid_domains, $valid_alias_domains);\r\n          }\r\n          if (!in_array($domain, $valid_domains)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'domain_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          $validity = strtotime(\"+\" . $_data[\"validity\"] . \" hour\");\r\n          $stmt = $pdo->prepare(\"INSERT INTO `spamalias` (`address`, `description`, `goto`, `validity`, `permanent`) VALUES\r\n            (:address, :description, :goto, :validity, :permanent)\");\r\n          $stmt->execute(array(\r\n            ':address' => readable_random_string(rand(rand(3, 9), rand(3, 9))) . '.' . readable_random_string(rand(rand(3, 9), rand(3, 9))) . '@' . $domain,\r\n            ':description' => $description,\r\n            ':goto' => $username,\r\n            ':validity' => $validity,\r\n            ':permanent' => $permanent\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('mailbox_modified', $username)\r\n          );\r\n        break;\r\n        case 'global_filter':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $sieve = new Sieve\\SieveParser();\r\n          $script_data = $_data['script_data'];\r\n          $script_data = str_replace(\"\\r\\n\", \"\\n\", $script_data); // windows -> unix\r\n          $script_data = str_replace(\"\\r\", \"\\n\", $script_data);   // remaining -> unix\r\n          $filter_type = $_data['filter_type'];\r\n          try {\r\n            $sieve->parse($script_data);\r\n          }\r\n          catch (Exception $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('sieve_error', $e->getMessage())\r\n            );\r\n            return false;\r\n          }\r\n          if ($filter_type == 'prefilter') {\r\n            try {\r\n              if (file_exists('/global_sieve/before')) {\r\n                $filter_handle = fopen('/global_sieve/before', 'w');\r\n                if (!$filter_handle) {\r\n                  throw new Exception($lang['danger']['file_open_error']);\r\n                }\r\n                fwrite($filter_handle, $script_data);\r\n                fclose($filter_handle);\r\n              }\r\n              $restart_response = json_decode(docker('post', 'dovecot-mailcow', 'restart'), true);\r\n              if ($restart_response['type'] == \"success\") {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'success',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'dovecot_restart_success'\r\n                );\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'dovecot_restart_failed'\r\n                );\r\n              }\r\n            }\r\n            catch (Exception $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('global_filter_write_error', htmlspecialchars($e->getMessage()))\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          elseif ($filter_type == 'postfilter') {\r\n            try {\r\n              if (file_exists('/global_sieve/after')) {\r\n                $filter_handle = fopen('/global_sieve/after', 'w');\r\n                if (!$filter_handle) {\r\n                  throw new Exception($lang['danger']['file_open_error']);\r\n                }\r\n                fwrite($filter_handle, $script_data);\r\n                fclose($filter_handle);\r\n              }\r\n              $restart_response = json_decode(docker('post', 'dovecot-mailcow', 'restart'), true);\r\n              if ($restart_response['type'] == \"success\") {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'success',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'dovecot_restart_success'\r\n                );\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'dovecot_restart_failed'\r\n                );\r\n              }\r\n            }\r\n            catch (Exception $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('global_filter_write_error', htmlspecialchars($e->getMessage()))\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'invalid_filter_type'\r\n            );\r\n            return false;\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => 'global_filter_written'\r\n          );\r\n          return true;\r\n        break;\r\n        case 'filter':\r\n          $sieve = new Sieve\\SieveParser();\r\n          if (!isset($_SESSION['acl']['filters']) || $_SESSION['acl']['filters'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            else {\r\n              $username = $_data['username'];\r\n            }\r\n          }\r\n          elseif ($_SESSION['mailcow_cc_role'] == \"user\") {\r\n            $username = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'no_user_defined'\r\n            );\r\n            return false;\r\n          }\r\n          $active     = intval($_data['active']);\r\n          $script_data = $_data['script_data'];\r\n          $script_desc = $_data['script_desc'];\r\n          $filter_type = $_data['filter_type'];\r\n          if (empty($script_data)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'script_empty'\r\n            );\r\n            return false;\r\n          }\r\n          try {\r\n            $sieve->parse($script_data);\r\n          }\r\n          catch (Exception $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('sieve_error', $e->getMessage())\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($script_data) || empty($script_desc)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'value_missing'\r\n            );\r\n            return false;\r\n          }\r\n          if ($filter_type != 'postfilter' && $filter_type != 'prefilter') {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'filter_type'\r\n            );\r\n            return false;\r\n          }\r\n          if (!empty($active)) {\r\n            $script_name = 'active';\r\n            $stmt = $pdo->prepare(\"UPDATE `sieve_filters` SET `script_name` = 'inactive' WHERE `username` = :username AND `filter_type` = :filter_type\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':filter_type' => $filter_type\r\n            ));\r\n          }\r\n          else {\r\n            $script_name = 'inactive';\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `sieve_filters` (`username`, `script_data`, `script_desc`, `script_name`, `filter_type`)\r\n            VALUES (:username, :script_data, :script_desc, :script_name, :filter_type)\");\r\n          $stmt->execute(array(\r\n            ':username' => $username,\r\n            ':script_data' => $script_data,\r\n            ':script_desc' => $script_desc,\r\n            ':script_name' => $script_name,\r\n            ':filter_type' => $filter_type\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('mailbox_modified', $username)\r\n          );\r\n        break;\r\n        case 'syncjob':\r\n          if (!isset($_SESSION['acl']['syncjobs']) || $_SESSION['acl']['syncjobs'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (isset($_data['username']) && filter_var($_data['username'], FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data['username'])) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            else {\r\n              $username = $_data['username'];\r\n            }\r\n          }\r\n          elseif ($_SESSION['mailcow_cc_role'] == \"user\") {\r\n            $username = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'no_user_defined'\r\n            );\r\n            return false;\r\n          }\r\n          $active               = intval($_data['active']);\r\n          $subscribeall         = intval($_data['subscribeall']);\r\n          $delete2duplicates    = intval($_data['delete2duplicates']);\r\n          $delete1              = intval($_data['delete1']);\r\n          $delete2              = intval($_data['delete2']);\r\n          $timeout1             = intval($_data['timeout1']);\r\n          $timeout2             = intval($_data['timeout2']);\r\n          $skipcrossduplicates  = intval($_data['skipcrossduplicates']);\r\n          $automap              = intval($_data['automap']);\r\n          $dry                  = intval($_data['dry']);\r\n          $port1                = $_data['port1'];\r\n          $host1                = strtolower($_data['host1']);\r\n          $password1            = $_data['password1'];\r\n          $exclude              = $_data['exclude'];\r\n          $maxage               = $_data['maxage'];\r\n          $maxbytespersecond    = $_data['maxbytespersecond'];\r\n          $subfolder2           = $_data['subfolder2'];\r\n          $user1                = $_data['user1'];\r\n          $mins_interval        = $_data['mins_interval'];\r\n          $enc1                 = $_data['enc1'];\r\n          $custom_params        = (empty(trim($_data['custom_params']))) ? '' : trim($_data['custom_params']);\r\n\r\n          // validate custom params\r\n          foreach (explode('-', $custom_params) as $param){\r\n            if(empty($param)) continue;\r\n\r\n            // extract option\r\n            if (str_contains($param, '=')) $param = explode('=', $param)[0];\r\n            else $param = rtrim($param, ' ');\r\n            // remove first char if first char is -\r\n            if ($param[0] == '-') $param = ltrim($param, $param[0]);\r\n\r\n            if (str_contains($param, ' ')) {\r\n              // bad char\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'bad character SPACE'\r\n              );\r\n              return false;\r\n            }\r\n\r\n            // check if param is whitelisted\r\n            if (!in_array(strtolower($param), $GLOBALS[\"IMAPSYNC_OPTIONS\"][\"whitelist\"])){\r\n              // bad option\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'bad option '. $param\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          if (empty($subfolder2)) {\r\n            $subfolder2 = \"\";\r\n          }\r\n          if (!isset($maxage) || !filter_var($maxage, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {\r\n            $maxage = \"0\";\r\n          }\r\n          if (!isset($timeout1) || !filter_var($timeout1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {\r\n            $timeout1 = \"600\";\r\n          }\r\n          if (!isset($timeout2) || !filter_var($timeout2, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {\r\n            $timeout2 = \"600\";\r\n          }\r\n          if (!isset($maxbytespersecond) || !filter_var($maxbytespersecond, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 125000000)))) {\r\n            $maxbytespersecond = \"0\";\r\n          }\r\n          if (!filter_var($port1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 65535)))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!filter_var($mins_interval, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 43800)))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          // if (!is_valid_domain_name($host1)) {\r\n            // $_SESSION['return'][] = array(\r\n              // 'type' => 'danger',\r\n              // 'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              // 'msg' => 'access_denied'\r\n            // );\r\n            // return false;\r\n          // }\r\n          if ($enc1 != \"TLS\" && $enc1 != \"SSL\" && $enc1 != \"PLAIN\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (@preg_match(\"/\" . $exclude . \"/\", null) === false) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT '1' FROM `imapsync`\r\n            WHERE `user2` = :user2 AND `user1` = :user1 AND `host1` = :host1\");\r\n          $stmt->execute(array(':user1' => $user1, ':user2' => $username, ':host1' => $host1));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('object_exists', htmlspecialchars($host1 . ' / ' . $user1))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `imapsync` (`user2`, `exclude`, `delete1`, `delete2`, `timeout1`, `timeout2`, `automap`, `skipcrossduplicates`, `maxbytespersecond`, `subscribeall`, `dry`, `maxage`, `subfolder2`, `host1`, `authmech1`, `user1`, `password1`, `mins_interval`, `port1`, `enc1`, `delete2duplicates`, `custom_params`, `active`)\r\n            VALUES (:user2, :exclude, :delete1, :delete2, :timeout1, :timeout2, :automap, :skipcrossduplicates, :maxbytespersecond, :subscribeall, :dry, :maxage, :subfolder2, :host1, :authmech1, :user1, :password1, :mins_interval, :port1, :enc1, :delete2duplicates, :custom_params, :active)\");\r\n          $stmt->execute(array(\r\n            ':user2' => $username,\r\n            ':custom_params' => $custom_params,\r\n            ':exclude' => $exclude,\r\n            ':maxage' => $maxage,\r\n            ':delete1' => $delete1,\r\n            ':delete2' => $delete2,\r\n            ':timeout1' => $timeout1,\r\n            ':timeout2' => $timeout2,\r\n            ':automap' => $automap,\r\n            ':skipcrossduplicates' => $skipcrossduplicates,\r\n            ':maxbytespersecond' => $maxbytespersecond,\r\n            ':subscribeall' => $subscribeall,\r\n            ':dry' => $dry,\r\n            ':subfolder2' => $subfolder2,\r\n            ':host1' => $host1,\r\n            ':authmech1' => 'PLAIN',\r\n            ':user1' => $user1,\r\n            ':password1' => $password1,\r\n            ':mins_interval' => $mins_interval,\r\n            ':port1' => $port1,\r\n            ':enc1' => $enc1,\r\n            ':delete2duplicates' => $delete2duplicates,\r\n            ':active' => $active,\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('mailbox_modified', $username)\r\n          );\r\n        break;\r\n        case 'domain':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $DOMAIN_DEFAULT_ATTRIBUTES = null;\r\n          if ($_data['template']){\r\n            $DOMAIN_DEFAULT_ATTRIBUTES = mailbox('get', 'domain_templates', $_data['template'])['attributes'];\r\n          }\r\n          if (empty($DOMAIN_DEFAULT_ATTRIBUTES)) {\r\n            $DOMAIN_DEFAULT_ATTRIBUTES = mailbox('get', 'domain_templates')[0]['attributes'];\r\n          }\r\n\r\n          $domain       = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);\r\n          $description  = $_data['description'];\r\n          if (empty($description)) $description = $domain;\r\n          $tags         = (isset($_data['tags'])) ? (array)$_data['tags'] : $DOMAIN_DEFAULT_ATTRIBUTES['tags'];\r\n          $aliases      = (isset($_data['aliases'])) ? (int)$_data['aliases'] : $DOMAIN_DEFAULT_ATTRIBUTES['max_num_aliases_for_domain'];\r\n          $mailboxes    = (isset($_data['mailboxes'])) ? (int)$_data['mailboxes'] : $DOMAIN_DEFAULT_ATTRIBUTES['max_num_mboxes_for_domain'];\r\n          $defquota     = (isset($_data['defquota'])) ? (int)$_data['defquota'] : $DOMAIN_DEFAULT_ATTRIBUTES['def_quota_for_mbox'] / 1024 ** 2;\r\n          $maxquota     = (isset($_data['maxquota'])) ? (int)$_data['maxquota'] : $DOMAIN_DEFAULT_ATTRIBUTES['max_quota_for_mbox'] / 1024 ** 2;\r\n          $restart_sogo = (int)$_data['restart_sogo'];\r\n          $quota        = (isset($_data['quota'])) ? (int)$_data['quota'] : $DOMAIN_DEFAULT_ATTRIBUTES['max_quota_for_domain'] / 1024 ** 2;\r\n          if ($defquota > $maxquota) {\r\n            $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'mailbox_defquota_exceeds_mailbox_maxquota'\r\n            );\r\n            return false;\r\n          }\r\n          if ($maxquota > $quota) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'mailbox_quota_exceeds_domain_quota'\r\n            );\r\n            return false;\r\n          }\r\n          if ($defquota == \"0\" || empty($defquota)) {\r\n            $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'defquota_empty'\r\n            );\r\n            return false;\r\n          }\r\n          if ($maxquota == \"0\" || empty($maxquota)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'maxquota_empty'\r\n            );\r\n            return false;\r\n          }\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $DOMAIN_DEFAULT_ATTRIBUTES['active'];\r\n          $relay_all_recipients = (isset($_data['relay_all_recipients'])) ? intval($_data['relay_all_recipients']) : $DOMAIN_DEFAULT_ATTRIBUTES['relay_all_recipients'];\r\n          $relay_unknown_only = (isset($_data['relay_unknown_only'])) ? intval($_data['relay_unknown_only']) : $DOMAIN_DEFAULT_ATTRIBUTES['relay_unknown_only'];\r\n          $backupmx = (isset($_data['backupmx'])) ? intval($_data['backupmx']) : $DOMAIN_DEFAULT_ATTRIBUTES['backupmx'];\r\n          $gal = (isset($_data['gal'])) ? intval($_data['gal']) : $DOMAIN_DEFAULT_ATTRIBUTES['gal'];\r\n          if ($relay_all_recipients == 1) {\r\n            $backupmx = '1';\r\n          }\r\n          if ($relay_unknown_only == 1) {\r\n            $backupmx = 1;\r\n            $relay_all_recipients = 1;\r\n          }\r\n          if (!is_valid_domain_name($domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'domain_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          foreach (array($quota, $maxquota, $mailboxes, $aliases) as $data) {\r\n            if (!is_numeric($data)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('object_is_not_numeric', htmlspecialchars($data))\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n            WHERE `domain` = :domain\");\r\n          $stmt->execute(array(':domain' => $domain));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain`\r\n            WHERE `alias_domain` = :domain\");\r\n          $stmt->execute(array(':domain' => $domain));\r\n          $num_results = $num_results + count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('domain_exists', htmlspecialchars($domain))\r\n            );\r\n            return false;\r\n          }\r\n          if ($domain == getenv('MAILCOW_HOSTNAME')) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'domain_cannot_match_hostname'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `external` = 1 AND `send_as` LIKE :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => '%@' . $domain\r\n          ));\r\n          // save domain\r\n          $stmt = $pdo->prepare(\"INSERT INTO `domain` (`domain`, `description`, `aliases`, `mailboxes`, `defquota`, `maxquota`, `quota`, `backupmx`, `gal`, `active`, `relay_unknown_only`, `relay_all_recipients`)\r\n            VALUES (:domain, :description, :aliases, :mailboxes, :defquota, :maxquota, :quota, :backupmx, :gal, :active, :relay_unknown_only, :relay_all_recipients)\");\r\n          $stmt->execute(array(\r\n            ':domain' => $domain,\r\n            ':description' => $description,\r\n            ':aliases' => $aliases,\r\n            ':mailboxes' => $mailboxes,\r\n            ':defquota' => $defquota,\r\n            ':maxquota' => $maxquota,\r\n            ':quota' => $quota,\r\n            ':backupmx' => $backupmx,\r\n            ':gal' => $gal,\r\n            ':active' => $active,\r\n            ':relay_unknown_only' => $relay_unknown_only,\r\n            ':relay_all_recipients' => $relay_all_recipients\r\n          ));\r\n          // save tags\r\n          foreach($tags as $index => $tag){\r\n            if (empty($tag)) continue;\r\n            if ($index > $GLOBALS['TAGGING_LIMIT']) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])\r\n              );\r\n              break;\r\n            }\r\n            $stmt = $pdo->prepare(\"INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n              ':tag_name' => $tag,\r\n            ));\r\n          }\r\n\r\n          try {\r\n            $redis->hSet('DOMAIN_MAP', $domain, 1);\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          $_data['rl_value'] = (isset($_data['rl_value'])) ? intval($_data['rl_value']) : $DOMAIN_DEFAULT_ATTRIBUTES['rl_value'];\r\n          $_data['rl_frame'] = (isset($_data['rl_frame'])) ? $_data['rl_frame'] : $DOMAIN_DEFAULT_ATTRIBUTES['rl_frame'];\r\n          if (!empty($_data['rl_value']) && !empty($_data['rl_frame'])){\r\n            ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $domain));\r\n          }\r\n          $_data['key_size'] = (isset($_data['key_size'])) ? intval($_data['key_size']) : $DOMAIN_DEFAULT_ATTRIBUTES['key_size'];\r\n          $_data['dkim_selector'] = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : $DOMAIN_DEFAULT_ATTRIBUTES['dkim_selector'];\r\n          if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {\r\n            if (!empty($redis->hGet('DKIM_SELECTORS', $domain))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_add_dkim_available'\r\n              );\r\n            }\r\n            else {\r\n              dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $domain));\r\n            }\r\n          }\r\n          if (!empty($restart_sogo)) {\r\n            $restart_response = json_decode(docker('post', 'sogo-mailcow', 'restart'), true);\r\n            if ($restart_response['type'] == \"success\") {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('domain_added', htmlspecialchars($domain))\r\n              );\r\n              return true;\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_added_sogo_failed'\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('domain_added', htmlspecialchars($domain))\r\n          );\r\n          return true;\r\n        break;\r\n        case 'alias':\r\n          $addresses       = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['address']));\r\n          $gotos           = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['goto']));\r\n          $internal        = intval($_data['internal']);\r\n          $active          = intval($_data['active']);\r\n          $sender_allowed  = intval($_data['sender_allowed']);\r\n          $sogo_visible    = intval($_data['sogo_visible']);\r\n          $goto_null       = intval($_data['goto_null']);\r\n          $goto_spam       = intval($_data['goto_spam']);\r\n          $goto_ham        = intval($_data['goto_ham']);\r\n          $private_comment = $_data['private_comment'];\r\n          $public_comment  = $_data['public_comment'];\r\n          if (strlen($private_comment) > 160 | strlen($public_comment) > 160){\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'comment_too_long'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($addresses[0])) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'alias_empty'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($gotos[0]) && ($goto_null + $goto_spam + $goto_ham == 0)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'goto_empty'\r\n            );\r\n            return false;\r\n          }\r\n          if ($goto_null == \"1\") {\r\n            $goto = \"null@localhost\";\r\n          }\r\n          elseif ($goto_spam == \"1\") {\r\n            $goto = \"spam@localhost\";\r\n          }\r\n          elseif ($goto_ham == \"1\") {\r\n            $goto = \"ham@localhost\";\r\n          }\r\n          else {\r\n            foreach ($gotos as $i => &$goto) {\r\n              if (empty($goto)) {\r\n                continue;\r\n              }\r\n              $goto_domain = idn_to_ascii(substr(strstr($goto, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);\r\n              $goto_local_part = strstr($goto, '@', true);\r\n              $goto = $goto_local_part.'@'.$goto_domain;\r\n              $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox`\r\n                WHERE `kind` REGEXP 'location|thing|group'\r\n                  AND `username`= :goto\");\r\n              $stmt->execute(array(':goto' => $goto));\r\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n              if ($num_results != 0) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('goto_invalid', htmlspecialchars($goto))\r\n                );\r\n                unset($gotos[$i]);\r\n                continue;\r\n              }\r\n              if (!filter_var($goto, FILTER_VALIDATE_EMAIL) === true) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('goto_invalid', htmlspecialchars($goto))\r\n                );\r\n                unset($gotos[$i]);\r\n                continue;\r\n              }\r\n            }\r\n            $gotos = array_unique($gotos);\r\n            $gotos = array_filter($gotos);\r\n            if (empty($gotos)) { return false; }\r\n            $goto = implode(\",\", (array)$gotos);\r\n          }\r\n          foreach ($addresses as $address) {\r\n            if (empty($address)) {\r\n              continue;\r\n            }\r\n            if (in_array($address, $gotos)) {\r\n              continue;\r\n            }\r\n            $domain       = idn_to_ascii(substr(strstr($address, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);\r\n            $local_part   = strstr($address, '@', true);\r\n            $address      = $local_part.'@'.$domain;\r\n            $domaindata = mailbox('get', 'domain_details', $domain);\r\n            if (is_array($domaindata) && $domaindata['aliases_left'] == \"0\") {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'max_alias_exceeded'\r\n              );\r\n              return false;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `address` FROM `alias`\r\n              WHERE `address`= :address OR `address` IN (\r\n                SELECT `username` FROM `mailbox`, `alias_domain`\r\n                  WHERE (\r\n                    `alias_domain`.`alias_domain` = :address_d\r\n                      AND `mailbox`.`username` = CONCAT(:address_l, '@', alias_domain.target_domain)))\");\r\n            $stmt->execute(array(\r\n              ':address' => $address,\r\n              ':address_l' => $local_part,\r\n              ':address_d' => $domain\r\n            ));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results != 0) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('is_alias_or_mailbox', htmlspecialchars($address))\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n              WHERE `domain`= :domain1 OR `domain` = (SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain2)\");\r\n            $stmt->execute(array(':domain1' => $domain, ':domain2' => $domain));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results == 0) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('domain_not_found', htmlspecialchars($domain))\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `address` FROM `spamalias`\r\n              WHERE `address`= :address\");\r\n            $stmt->execute(array(':address' => $address));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results != 0) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('is_spam_alias', htmlspecialchars($address))\r\n              );\r\n              continue;\r\n            }\r\n            if ((!filter_var($address, FILTER_VALIDATE_EMAIL) === true) && !empty($local_part)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('alias_invalid', $address)\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"INSERT INTO `alias` (`address`, `public_comment`, `private_comment`, `goto`, `domain`, `sogo_visible`, `internal`, `sender_allowed`, `active`)\r\n              VALUES (:address, :public_comment, :private_comment, :goto, :domain, :sogo_visible, :internal, :sender_allowed, :active)\");\r\n            if (!filter_var($address, FILTER_VALIDATE_EMAIL) === true) {\r\n              $stmt->execute(array(\r\n                ':address' => '@'.$domain,\r\n                ':public_comment' => $public_comment,\r\n                ':private_comment' => $private_comment,\r\n                ':address' => '@'.$domain,\r\n                ':goto' => $goto,\r\n                ':domain' => $domain,\r\n                ':sogo_visible' => $sogo_visible,\r\n                ':internal' => $internal,\r\n                ':sender_allowed' => $sender_allowed,\r\n                ':active' => $active\r\n              ));\r\n            }\r\n            else {\r\n              $stmt->execute(array(\r\n                ':address' => $address,\r\n                ':public_comment' => $public_comment,\r\n                ':private_comment' => $private_comment,\r\n                ':goto' => $goto,\r\n                ':domain' => $domain,\r\n                ':sogo_visible' => $sogo_visible,\r\n                ':internal' => $internal,\r\n                ':sender_allowed' => $sender_allowed,\r\n                ':active' => $active\r\n              ));\r\n            }\r\n            $id = $pdo->lastInsertId();\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('alias_added', $address, $id)\r\n            );\r\n\r\n            // Track affected mailboxes for SOGo update\r\n            if (!empty($goto)) {\r\n              $gotos = array_map('trim', explode(',', $goto));\r\n              foreach ($gotos as $g) {\r\n                if (filter_var($g, FILTER_VALIDATE_EMAIL) &&\r\n                    !in_array($g, array('null@localhost', 'spam@localhost', 'ham@localhost'))) {\r\n                  $update_sogo_mailboxes[] = $g;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        break;\r\n        case 'alias_domain':\r\n          $active = intval($_data['active']);\r\n          $alias_domains  = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['alias_domain']));\r\n          $alias_domains = array_filter($alias_domains);\r\n          $target_domain = idn_to_ascii(strtolower(trim($_data['target_domain'])), 0, INTL_IDNA_VARIANT_UTS46);\r\n          if (!isset($_SESSION['acl']['alias_domains']) || $_SESSION['acl']['alias_domains'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_valid_domain_name($target_domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'target_domain_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $target_domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($alias_domains as $i => $alias_domain) {\r\n            $alias_domain = idn_to_ascii(strtolower(trim($alias_domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n            if (!is_valid_domain_name($alias_domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('alias_domain_invalid', htmlspecialchars(alias_domain))\r\n              );\r\n              continue;\r\n            }\r\n            if ($alias_domain == $target_domain) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('aliasd_targetd_identical', htmlspecialchars($target_domain))\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n              WHERE `domain`= :target_domain\");\r\n            $stmt->execute(array(':target_domain' => $target_domain));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results == 0) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('targetd_not_found', htmlspecialchars($target_domain))\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n              WHERE `domain`= :target_domain AND `backupmx` = '1'\");\r\n            $stmt->execute(array(':target_domain' => $target_domain));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results == 1) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('targetd_relay_domain', htmlspecialchars($target_domain))\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain` WHERE `alias_domain`= :alias_domain\r\n              UNION\r\n              SELECT `domain` FROM `domain` WHERE `domain`= :alias_domain_in_domain\");\r\n            $stmt->execute(array(':alias_domain' => $alias_domain, ':alias_domain_in_domain' => $alias_domain));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results != 0) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('alias_domain_invalid', $alias_domain)\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `external` = 1 AND `send_as` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@' . $domain\r\n            ));\r\n            $stmt = $pdo->prepare(\"INSERT INTO `alias_domain` (`alias_domain`, `target_domain`, `active`)\r\n              VALUES (:alias_domain, :target_domain, :active)\");\r\n            $stmt->execute(array(\r\n              ':alias_domain' => $alias_domain,\r\n              ':target_domain' => $target_domain,\r\n              ':active' => $active\r\n            ));\r\n            try {\r\n              $redis->hSet('DOMAIN_MAP', $alias_domain, 1);\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              return false;\r\n            }\r\n            if (!empty(intval($_data['rl_value']))) {\r\n              ratelimit('edit', 'domain', array('rl_value' => $_data['rl_value'], 'rl_frame' => $_data['rl_frame'], 'object' => $alias_domain));\r\n            }\r\n            if (!empty($_data['key_size']) && !empty($_data['dkim_selector'])) {\r\n              if (!empty($redis->hGet('DKIM_SELECTORS', $alias_domain))) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'success',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'domain_add_dkim_available'\r\n                );\r\n              }\r\n              else {\r\n                dkim('add', array('key_size' => $_data['key_size'], 'dkim_selector' => $_data['dkim_selector'], 'domains' => $alias_domain));\r\n              }\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('aliasd_added', htmlspecialchars($alias_domain))\r\n            );\r\n          }\r\n        break;\r\n        case 'mailbox':\r\n          $local_part   = strtolower(trim($_data['local_part']));\r\n          $domain       = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);\r\n          $username     = $local_part . '@' . $domain;\r\n          $authsource   = 'mailcow';\r\n          if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'mailbox_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($_data['local_part'])) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'mailbox_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if ($_data['authsource'] == \"mailcow\" ||\r\n              in_array($_data['authsource'], array('keycloak', 'generic-oidc', 'ldap')) && $iam_settings['authsource'] == $_data['authsource']){\r\n            $authsource = $_data['authsource'];\r\n          }\r\n          if (empty($name)) {\r\n            $name = $local_part;\r\n          }\r\n          $template_attr = null;\r\n          if ($_data['template']){\r\n            $template_attr = mailbox('get', 'mailbox_templates', $_data['template'], $_extra)['attributes'];\r\n          }\r\n          if (empty($template_attr)) {\r\n            $template_attr = mailbox('get', 'mailbox_templates', null, $_extra)[0]['attributes'];\r\n          }\r\n          $MAILBOX_DEFAULT_ATTRIBUTES = array_merge($MAILBOX_DEFAULT_ATTRIBUTES, $template_attr);\r\n\r\n          $password     = $_data['password'];\r\n          $password2    = $_data['password2'];\r\n          $name         = ltrim(rtrim($_data['name'], '>'), '<');\r\n          $tags         = (isset($_data['tags'])) ? $_data['tags'] : $MAILBOX_DEFAULT_ATTRIBUTES['tags'];\r\n          $quota_m      = (isset($_data['quota'])) ? intval($_data['quota']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['quota']) / 1024 ** 2;\r\n          if ($authsource != 'mailcow'){\r\n            $password = '';\r\n            $password2 = '';\r\n            $password_hashed = '';\r\n          }\r\n          if (!hasACLAccess(\"unlimited_quota\") && $quota_m === 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'unlimited_quota_acl'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          if (isset($_data['protocol_access'])) {\r\n            $_data['protocol_access'] = (array)$_data['protocol_access'];\r\n            $_data['imap_access'] = (in_array('imap', $_data['protocol_access'])) ? 1 : 0;\r\n            $_data['pop3_access'] = (in_array('pop3', $_data['protocol_access'])) ? 1 : 0;\r\n            $_data['smtp_access'] = (in_array('smtp', $_data['protocol_access'])) ? 1 : 0;\r\n            $_data['sieve_access'] = (in_array('sieve', $_data['protocol_access'])) ? 1 : 0;\r\n            $_data['eas_access'] = (in_array('eas', $_data['protocol_access'])) ? 1 : 0;\r\n            $_data['dav_access'] = (in_array('dav', $_data['protocol_access'])) ? 1 : 0;\r\n          }\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['active']);\r\n          $force_pw_update = (isset($_data['force_pw_update'])) ? intval($_data['force_pw_update']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['force_pw_update']);\r\n          $force_tfa = (isset($_data['force_tfa'])) ? intval($_data['force_tfa']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['force_tfa']);\r\n          $tls_enforce_in = (isset($_data['tls_enforce_in'])) ? intval($_data['tls_enforce_in']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_in']);\r\n          $tls_enforce_out = (isset($_data['tls_enforce_out'])) ? intval($_data['tls_enforce_out']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_out']);\r\n          $sogo_access = (isset($_data['sogo_access'])) ? intval($_data['sogo_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['sogo_access']);\r\n          $imap_access = (isset($_data['imap_access'])) ? intval($_data['imap_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['imap_access']);\r\n          $pop3_access = (isset($_data['pop3_access'])) ? intval($_data['pop3_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['pop3_access']);\r\n          $smtp_access = (isset($_data['smtp_access'])) ? intval($_data['smtp_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['smtp_access']);\r\n          $sieve_access = (isset($_data['sieve_access'])) ? intval($_data['sieve_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['sieve_access']);\r\n          $eas_access = (isset($_data['eas_access'])) ? intval($_data['eas_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['eas_access']);\r\n          $dav_access = (isset($_data['dav_access'])) ? intval($_data['dav_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['dav_access']);\r\n          $relayhost = (isset($_data['relayhost'])) ? intval($_data['relayhost']) : 0;\r\n          $quarantine_notification = (isset($_data['quarantine_notification'])) ? strval($_data['quarantine_notification']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);\r\n          $quarantine_category = (isset($_data['quarantine_category'])) ? strval($_data['quarantine_category']) : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);\r\n          $quota_b    = ($quota_m * 1048576);\r\n          $attribute_hash = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : '';\r\n          if (in_array($authsource, array('keycloak', 'generic-oidc', 'ldap'))){\r\n            $force_pw_update = 0;\r\n          }\r\n          if ($authsource == 'generic-oidc'){\r\n            $force_tfa = 0;\r\n          }\r\n          $mailbox_attrs = json_encode(\r\n            array(\r\n              'force_pw_update' => strval($force_pw_update),\r\n              'force_tfa' => strval($force_tfa),\r\n              'tls_enforce_in' => strval($tls_enforce_in),\r\n              'tls_enforce_out' => strval($tls_enforce_out),\r\n              'sogo_access' => strval($sogo_access),\r\n              'imap_access' => strval($imap_access),\r\n              'pop3_access' => strval($pop3_access),\r\n              'smtp_access' => strval($smtp_access),\r\n              'sieve_access' => strval($sieve_access),\r\n              'eas_access' => strval($eas_access),\r\n              'dav_access' => strval($dav_access),\r\n              'relayhost' => strval($relayhost),\r\n              'passwd_update' => time(),\r\n              'mailbox_format' => strval($MAILBOX_DEFAULT_ATTRIBUTES['mailbox_format']),\r\n              'quarantine_notification' => strval($quarantine_notification),\r\n              'quarantine_category' => strval($quarantine_category),\r\n              'attribute_hash' => $attribute_hash\r\n            )\r\n          );\r\n          if (!is_valid_domain_name($domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'domain_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `mailboxes`, `maxquota`, `quota` FROM `domain`\r\n            WHERE `domain` = :domain\");\r\n          $stmt->execute(array(':domain' => $domain));\r\n          $DomainData = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $stmt = $pdo->prepare(\"SELECT\r\n            COUNT(*) as count,\r\n            COALESCE(ROUND(SUM(`quota`)/1048576), 0) as `quota`\r\n              FROM `mailbox`\r\n                WHERE (`kind` = '' OR `kind` = NULL)\r\n                  AND `domain` = :domain\");\r\n          $stmt->execute(array(':domain' => $domain));\r\n          $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $stmt = $pdo->prepare(\"SELECT `local_part` FROM `mailbox` WHERE `local_part` = :local_part and `domain`= :domain\");\r\n          $stmt->execute(array(':local_part' => $local_part, ':domain' => $domain));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('object_exists', htmlspecialchars($username))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `address` FROM `alias` WHERE address= :username\");\r\n          $stmt->execute(array(':username' => $username));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('is_alias', htmlspecialchars($username))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `address` FROM `spamalias` WHERE `address`= :username\");\r\n          $stmt->execute(array(':username' => $username));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('is_spam_alias', htmlspecialchars($username))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain` WHERE `domain`= :domain\");\r\n          $stmt->execute(array(':domain' => $domain));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results == 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('domain_not_found', htmlspecialchars($domain))\r\n            );\r\n            return false;\r\n          }\r\n          if ($authsource == 'mailcow'){\r\n            if (password_check($password, $password2) !== true) {\r\n              return false;\r\n            }\r\n            $password_hashed = hash_password($password);\r\n          }\r\n          if ($MailboxData['count'] >= $DomainData['mailboxes']) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('max_mailbox_exceeded', $MailboxData['count'], $DomainData['mailboxes'])\r\n            );\r\n            return false;\r\n          }\r\n          if ($quota_m > $DomainData['maxquota']) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_quota_exceeded', $DomainData['maxquota'])\r\n            );\r\n            return false;\r\n          }\r\n          if (($MailboxData['quota'] + $quota_m) > $DomainData['quota']) {\r\n            $quota_left_m = ($DomainData['quota'] - $MailboxData['quota']);\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_quota_left_exceeded', $quota_left_m)\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `mailbox` (`username`, `password`, `name`, `quota`, `local_part`, `domain`, `attributes`, `authsource`, `active`)\r\n            VALUES (:username, :password_hashed, :name, :quota_b, :local_part, :domain, :mailbox_attrs, :authsource, :active)\");\r\n          $stmt->execute(array(\r\n            ':username' => $username,\r\n            ':password_hashed' => $password_hashed,\r\n            ':name' => $name,\r\n            ':quota_b' => $quota_b,\r\n            ':local_part' => $local_part,\r\n            ':domain' => $domain,\r\n            ':mailbox_attrs' => $mailbox_attrs,\r\n            ':authsource' => $authsource,\r\n            ':active' => $active\r\n          ));\r\n          $stmt = $pdo->prepare(\"UPDATE `mailbox` SET\r\n            `attributes` = JSON_SET(`attributes`, '$.passwd_update', NOW())\r\n              WHERE `username` = :username\");\r\n          $stmt->execute(array(\r\n            ':username' => $username\r\n          ));\r\n          // save delimiter_action\r\n          if (isset($_data['tagged_mail_handler'])) {\r\n            mailbox('edit', 'delimiter_action', array(\r\n              'username' => $username,\r\n              'tagged_mail_handler' => $_data['tagged_mail_handler']\r\n            ));\r\n          }\r\n\r\n          // save tags\r\n          foreach($tags as $index => $tag){\r\n            if (empty($tag)) continue;\r\n            if ($index > $GLOBALS['TAGGING_LIMIT']) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])\r\n              );\r\n              break;\r\n            }\r\n            try {\r\n              $stmt = $pdo->prepare(\"INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)\");\r\n              $stmt->execute(array(\r\n                ':username' => $username,\r\n                ':tag_name' => $tag,\r\n              ));\r\n            } catch (Exception $e) {\r\n            }\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `quota2` (`username`, `bytes`, `messages`)\r\n            VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';\");\r\n          $stmt->execute(array(':username' => $username));\r\n          $stmt = $pdo->prepare(\"INSERT INTO `quota2replica` (`username`, `bytes`, `messages`)\r\n            VALUES (:username, '0', '0') ON DUPLICATE KEY UPDATE `bytes` = '0', `messages` = '0';\");\r\n          $stmt->execute(array(':username' => $username));\r\n          $stmt = $pdo->prepare(\"INSERT INTO `alias` (`address`, `goto`, `domain`, `active`)\r\n            VALUES (:username1, :username2, :domain, :active)\");\r\n          $stmt->execute(array(\r\n            ':username1' => $username,\r\n            ':username2' => $username,\r\n            ':domain' => $domain,\r\n            ':active' => $active\r\n          ));\r\n\r\n\r\n          if (isset($_data['acl'])) {\r\n            $_data['acl'] = (array)$_data['acl'];\r\n            $_data['spam_alias'] = (in_array('spam_alias', $_data['acl'])) ? 1 : 0;\r\n            $_data['tls_policy'] = (in_array('tls_policy', $_data['acl'])) ? 1 : 0;\r\n            $_data['spam_score'] = (in_array('spam_score', $_data['acl'])) ? 1 : 0;\r\n            $_data['spam_policy'] = (in_array('spam_policy', $_data['acl'])) ? 1 : 0;\r\n            $_data['delimiter_action'] = (in_array('delimiter_action', $_data['acl'])) ? 1 : 0;\r\n            $_data['syncjobs'] = (in_array('syncjobs', $_data['acl'])) ? 1 : 0;\r\n            $_data['eas_reset'] = (in_array('eas_reset', $_data['acl'])) ? 1 : 0;\r\n            $_data['sogo_profile_reset'] = (in_array('sogo_profile_reset', $_data['acl'])) ? 1 : 0;\r\n            $_data['pushover'] = (in_array('pushover', $_data['acl'])) ? 1 : 0;\r\n            $_data['quarantine'] = (in_array('quarantine', $_data['acl'])) ? 1 : 0;\r\n            $_data['quarantine_attachments'] = (in_array('quarantine_attachments', $_data['acl'])) ? 1 : 0;\r\n            $_data['quarantine_notification'] = (in_array('quarantine_notification', $_data['acl'])) ? 1 : 0;\r\n            $_data['quarantine_category'] = (in_array('quarantine_category', $_data['acl'])) ? 1 : 0;\r\n            $_data['app_passwds'] = (in_array('app_passwds', $_data['acl'])) ? 1 : 0;\r\n            $_data['pw_reset'] = (in_array('pw_reset', $_data['acl'])) ? 1 : 0;\r\n          } else {\r\n            $_data['spam_alias'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_spam_alias']);\r\n            $_data['tls_policy'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_tls_policy']);\r\n            $_data['spam_score'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_spam_score']);\r\n            $_data['spam_policy'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_spam_policy']);\r\n            $_data['delimiter_action'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_delimiter_action']);\r\n            $_data['syncjobs'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_syncjobs']);\r\n            $_data['eas_reset'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_eas_reset']);\r\n            $_data['sogo_profile_reset'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_sogo_profile_reset']);\r\n            $_data['pushover'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_pushover']);\r\n            $_data['quarantine'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_quarantine']);\r\n            $_data['quarantine_attachments'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_quarantine_attachments']);\r\n            $_data['quarantine_notification'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_quarantine_notification']);\r\n            $_data['quarantine_category'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_quarantine_category']);\r\n            $_data['app_passwds'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_app_passwds']);\r\n            $_data['pw_reset'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['acl_pw_reset']);\r\n          }\r\n\r\n          try {\r\n            $stmt = $pdo->prepare(\"INSERT INTO `user_acl`\r\n              (`username`, `spam_alias`, `tls_policy`, `spam_score`, `spam_policy`, `delimiter_action`, `syncjobs`, `eas_reset`, `sogo_profile_reset`,\r\n                `pushover`, `quarantine`, `quarantine_attachments`, `quarantine_notification`, `quarantine_category`, `app_passwds`, `pw_reset`)\r\n              VALUES (:username, :spam_alias, :tls_policy, :spam_score, :spam_policy, :delimiter_action, :syncjobs, :eas_reset, :sogo_profile_reset,\r\n                :pushover, :quarantine, :quarantine_attachments, :quarantine_notification, :quarantine_category, :app_passwds, :pw_reset) \");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':spam_alias' => $_data['spam_alias'],\r\n              ':tls_policy' => $_data['tls_policy'],\r\n              ':spam_score' => $_data['spam_score'],\r\n              ':spam_policy' => $_data['spam_policy'],\r\n              ':delimiter_action' => $_data['delimiter_action'],\r\n              ':syncjobs' => $_data['syncjobs'],\r\n              ':eas_reset' => $_data['eas_reset'],\r\n              ':sogo_profile_reset' => $_data['sogo_profile_reset'],\r\n              ':pushover' => $_data['pushover'],\r\n              ':quarantine' => $_data['quarantine'],\r\n              ':quarantine_attachments' => $_data['quarantine_attachments'],\r\n              ':quarantine_notification' => $_data['quarantine_notification'],\r\n              ':quarantine_category' => $_data['quarantine_category'],\r\n              ':app_passwds' => $_data['app_passwds'],\r\n              ':pw_reset' => $_data['pw_reset']\r\n            ));\r\n          }\r\n          catch (PDOException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => $e->getMessage()\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $_data['rl_frame'] = (isset($_data['rl_frame'])) ? $_data['rl_frame'] : $MAILBOX_DEFAULT_ATTRIBUTES['rl_frame'];\r\n          $_data['rl_value'] = (isset($_data['rl_value'])) ? $_data['rl_value'] : $MAILBOX_DEFAULT_ATTRIBUTES['rl_value'];\r\n          if (isset($_data['rl_frame']) && isset($_data['rl_value'])){\r\n            ratelimit('edit', 'mailbox', array(\r\n              'object' => $username,\r\n              'rl_frame' => $_data['rl_frame'],\r\n              'rl_value' => $_data['rl_value']\r\n            ), $_extra);\r\n          }\r\n\r\n          // Track affected mailboxes for SOGo update\r\n          $update_sogo_mailboxes[] = $username;\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('mailbox_added', htmlspecialchars($username))\r\n          );\r\n        break;\r\n        case 'mailbox_from_template':\r\n          $stmt = $pdo->prepare(\"SELECT * FROM `templates`\r\n          WHERE `template` = :template AND type = 'mailbox'\");\r\n          $stmt->execute(array(\r\n            \":template\" => $_data['template']\r\n          ));\r\n          $mbox_template_data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (empty($mbox_template_data)){\r\n            $_SESSION['return'][] =  array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'template_missing'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $attribute_hash = sha1(json_encode($mbox_template_data[\"attributes\"]));\r\n          $mbox_template_data = json_decode($mbox_template_data[\"attributes\"], true);\r\n          $mbox_template_data['domain'] = $_data['domain'];\r\n          $mbox_template_data['name'] = $_data['name'];\r\n          $mbox_template_data['local_part'] = $_data['local_part'];\r\n          $mbox_template_data['authsource'] = $_data['authsource'];\r\n          $mbox_template_data['attribute_hash'] = $attribute_hash;\r\n          $mbox_template_data['quota'] = intval($mbox_template_data['quota'] / 1048576);\r\n\r\n          $mailbox_attributes = array('acl' => array());\r\n          foreach ($mbox_template_data as $key => $value){\r\n            switch (true) {\r\n              case (strpos($key, 'acl_') === 0 && $value != 0):\r\n                array_push($mailbox_attributes['acl'], str_replace('acl_' , '', $key));\r\n              break;\r\n              default:\r\n                $mailbox_attributes[$key] = $value;\r\n              break;\r\n            }\r\n          }\r\n\r\n          return mailbox('add', 'mailbox', $mailbox_attributes);\r\n        break;\r\n        case 'mta_sts':\r\n          $domain       = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);\r\n          $version      = strtolower($_data['version']);\r\n          $mode         = strtolower($_data['mode']);\r\n          $mx           = explode(\",\", preg_replace('/\\s+/', '', $_data['mx']));\r\n          $max_age      = intval($_data['max_age']);\r\n          $active       = (intval($_data['active']) == 1) ? 1 : 0;\r\n          $id           = date('YmdHis');\r\n\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($version) || !in_array($version, array('stsv1'))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n              'msg' => array('version_invalid', htmlspecialchars($domain))\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($mode) || !in_array($mode, array('enforce', 'testing', 'none'))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n              'msg' => array('mode_invalid', htmlspecialchars($domain))\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($max_age) || $max_age < 0 || $max_age > 31536000) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n              'msg' => array('max_age_invalid', htmlspecialchars($domain))\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($mx as $index => $mx_domain) {\r\n            $mx_domain = idn_to_ascii(strtolower(trim($mx_domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n            if (!is_valid_domain_name($mx_domain, array('allow_wildcard' => true))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n                'msg' => array('mx_invalid', htmlspecialchars($mx_domain))\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n\r\n          try {\r\n            $stmt = $pdo->prepare(\"INSERT INTO `mta_sts` (`id`, `domain`, `version`, `mode`, `mx`, `max_age`, `active`)\r\n              VALUES (:id, :domain, :version, :mode, :mx, :max_age, :active)\");\r\n            $stmt->execute(array(\r\n              ':id' => $id,\r\n              ':domain' => $domain,\r\n              ':version' => $version,\r\n              ':mode' => $mode,\r\n              ':mx' => implode(\",\", $mx),\r\n              ':max_age' => $max_age,\r\n              ':active' => $active\r\n            ));\r\n          } catch (PDOException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n              'msg' => $e->getMessage()\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case 'resource':\r\n          $domain             = idn_to_ascii(strtolower(trim($_data['domain'])), 0, INTL_IDNA_VARIANT_UTS46);\r\n          $description        = $_data['description'];\r\n          $local_part         = preg_replace('/[^\\da-z]/i', '', preg_quote($description, '/'));\r\n          $name               = $local_part . '@' . $domain;\r\n          $kind               = $_data['kind'];\r\n          $multiple_bookings  = intval($_data['multiple_bookings']);\r\n          $active = intval($_data['active']);\r\n          if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'resource_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($description)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'description_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (!isset($multiple_bookings) || $multiple_bookings < -1) {\r\n            $multiple_bookings = -1;\r\n          }\r\n          if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'resource_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_valid_domain_name($domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'domain_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `username` = :name\");\r\n          $stmt->execute(array(':name' => $name));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('object_exists', htmlspecialchars($name))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `address` FROM `alias` WHERE address= :name\");\r\n          $stmt->execute(array(':name' => $name));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('is_alias', htmlspecialchars($name))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `address` FROM `spamalias` WHERE `address`= :name\");\r\n          $stmt->execute(array(':name' => $name));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('is_spam_alias', htmlspecialchars($name))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain` WHERE `domain`= :domain\");\r\n          $stmt->execute(array(':domain' => $domain));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results == 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('domain_not_found', htmlspecialchars($domain))\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `mailbox` (`username`, `password`, `name`, `quota`, `local_part`, `domain`, `active`, `multiple_bookings`, `kind`)\r\n            VALUES (:name, 'RESOURCE', :description, 0, :local_part, :domain, :active, :multiple_bookings, :kind)\");\r\n          $stmt->execute(array(\r\n            ':name' => $name,\r\n            ':description' => $description,\r\n            ':local_part' => $local_part,\r\n            ':domain' => $domain,\r\n            ':active' => $active,\r\n            ':kind' => $kind,\r\n            ':multiple_bookings' => $multiple_bookings\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('resource_added', htmlspecialchars($name))\r\n          );\r\n\r\n          // Track affected mailboxes for SOGo update\r\n          $update_sogo_mailboxes[] = $name;\r\n        break;\r\n        case 'domain_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($_data[\"template\"])){\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'template_name_invalid'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          // check if template name exists, return false\r\n          $stmt = $pdo->prepare(\"SELECT id FROM `templates` WHERE `type` = :type AND `template` = :template\");\r\n          $stmt->execute(array(\r\n            \":type\" => \"domain\",\r\n            \":template\" => $_data[\"template\"]\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n          if (!empty($row)){\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => array('template_exists', $_data[\"template\"])\r\n            );\r\n            return false;\r\n          }\r\n\r\n          // check attributes\r\n          $attr = array();\r\n          $attr['tags']                       = (isset($_data['tags'])) ? $_data['tags'] : array();\r\n          $attr['max_num_aliases_for_domain'] = (!empty($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 400;\r\n          $attr['max_num_mboxes_for_domain']  = (!empty($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 10;\r\n          $attr['def_quota_for_mbox']         = (!empty($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 3072 * 1048576;\r\n          $attr['max_quota_for_mbox']         = (!empty($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 10240 * 1048576;\r\n          $attr['max_quota_for_domain']       = (!empty($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 10240 * 1048576;\r\n          $attr['rl_frame']                   = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : \"s\";\r\n          $attr['rl_value']                   = (!empty($_data['rl_value'])) ? $_data['rl_value'] : \"\";\r\n          $attr['active']                     = isset($_data['active']) ? intval($_data['active']) : 1;\r\n          $attr['gal']                        = (isset($_data['gal'])) ? intval($_data['gal']) : 1;\r\n          $attr['backupmx']                   = (isset($_data['backupmx'])) ? intval($_data['backupmx']) : 0;\r\n          $attr['relay_all_recipients']       = (isset($_data['relay_all_recipients'])) ? intval($_data['relay_all_recipients']) : 0;\r\n          $attr['relay_unknown_only']          = (isset($_data['relay_unknown_only'])) ? intval($_data['relay_unknown_only']) : 0;\r\n          $attr['dkim_selector']              = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : \"dkim\";\r\n          $attr['key_size']                   = isset($_data['key_size']) ? intval($_data['key_size']) : 2048;\r\n\r\n          // save template\r\n          $stmt = $pdo->prepare(\"INSERT INTO `templates` (`type`, `template`, `attributes`)\r\n            VALUES (:type, :template, :attributes)\");\r\n          $stmt->execute(array(\r\n            \":type\" => \"domain\",\r\n            \":template\" => $_data[\"template\"],\r\n            \":attributes\" => json_encode($attr)\r\n          ));\r\n\r\n          // success\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('template_added', $_data[\"template\"])\r\n          );\r\n          return true;\r\n        break;\r\n        case 'mailbox_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (empty($_data[\"template\"])){\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'template_name_invalid'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          // check if template name exists, return false\r\n          $stmt = $pdo->prepare(\"SELECT id FROM `templates` WHERE `type` = :type AND `template` = :template\");\r\n          $stmt->execute(array(\r\n            \":type\" => \"mailbox\",\r\n            \":template\" => $_data[\"template\"]\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!empty($row)){\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => array('template_exists', $_data[\"template\"])\r\n            );\r\n            return false;\r\n          }\r\n\r\n\r\n          // check attributes\r\n          $attr = array();\r\n          $attr[\"quota\"]                       = isset($_data['quota']) ? intval($_data['quota']) * 1048576 : 0;\r\n          $attr['tags']                        = (isset($_data['tags'])) ? $_data['tags'] : array();\r\n          $attr[\"tagged_mail_handler\"]         = (!empty($_data['tagged_mail_handler'])) ? $_data['tagged_mail_handler'] : strval($MAILBOX_DEFAULT_ATTRIBUTES['tagged_mail_handler']);\r\n          $attr[\"quarantine_notification\"]     = (!empty($_data['quarantine_notification'])) ? $_data['quarantine_notification'] : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_notification']);\r\n          $attr[\"quarantine_category\"]         = (!empty($_data['quarantine_category'])) ? $_data['quarantine_category'] : strval($MAILBOX_DEFAULT_ATTRIBUTES['quarantine_category']);\r\n          $attr[\"rl_frame\"]                    = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : \"s\";\r\n          $attr[\"rl_value\"]                    = (!empty($_data['rl_value'])) ? $_data['rl_value'] : \"\";\r\n          $attr[\"force_pw_update\"]             = isset($_data['force_pw_update']) ? intval($_data['force_pw_update']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['force_pw_update']);\r\n          $attr[\"force_tfa\"]                   = isset($_data['force_tfa']) ? intval($_data['force_tfa']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['force_tfa']);\r\n          $attr[\"sogo_access\"]                 = isset($_data['sogo_access']) ? intval($_data['sogo_access']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['sogo_access']);\r\n          $attr[\"active\"]                      = isset($_data['active']) ? intval($_data['active']) : 1;\r\n          $attr[\"tls_enforce_in\"]              = isset($_data['tls_enforce_in']) ? intval($_data['tls_enforce_in']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_in']);\r\n          $attr[\"tls_enforce_out\"]             = isset($_data['tls_enforce_out']) ? intval($_data['tls_enforce_out']) : intval($MAILBOX_DEFAULT_ATTRIBUTES['tls_enforce_out']);\r\n          if (isset($_data['protocol_access'])) {\r\n            $_data['protocol_access'] = (array)$_data['protocol_access'];\r\n            $attr['imap_access'] = (in_array('imap', $_data['protocol_access'])) ? 1 : 0;\r\n            $attr['pop3_access'] = (in_array('pop3', $_data['protocol_access'])) ? 1 : 0;\r\n            $attr['smtp_access'] = (in_array('smtp', $_data['protocol_access'])) ? 1 : 0;\r\n            $attr['sieve_access'] = (in_array('sieve', $_data['protocol_access'])) ? 1 : 0;\r\n            $attr['eas_access'] = (in_array('eas', $_data['protocol_access'])) ? 1 : 0;\r\n            $attr['dav_access'] = (in_array('dav', $_data['protocol_access'])) ? 1 : 0;\r\n          }\r\n          else {\r\n            $attr['imap_access'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['imap_access']);\r\n            $attr['pop3_access'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['pop3_access']);\r\n            $attr['smtp_access'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['smtp_access']);\r\n            $attr['sieve_access'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['sieve_access']);\r\n            $attr['eas_access'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['eas_access']);\r\n            $attr['dav_access'] = intval($MAILBOX_DEFAULT_ATTRIBUTES['dav_access']);\r\n          }\r\n          if (isset($_data['acl'])) {\r\n            $_data['acl'] = (array)$_data['acl'];\r\n            $attr['acl_spam_alias'] = (in_array('spam_alias', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_tls_policy'] = (in_array('tls_policy', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_spam_score'] = (in_array('spam_score', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_spam_policy'] = (in_array('spam_policy', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_delimiter_action'] = (in_array('delimiter_action', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_syncjobs'] = (in_array('syncjobs', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_eas_reset'] = (in_array('eas_reset', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_sogo_profile_reset'] = (in_array('sogo_profile_reset', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_pushover'] = (in_array('pushover', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_quarantine'] = (in_array('quarantine', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_quarantine_attachments'] = (in_array('quarantine_attachments', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_quarantine_notification'] = (in_array('quarantine_notification', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_quarantine_category'] = (in_array('quarantine_category', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_app_passwds'] = (in_array('app_passwds', $_data['acl'])) ? 1 : 0;\r\n            $attr['acl_pw_reset'] = (in_array('pw_reset', $_data['acl'])) ? 1 : 0;\r\n          } else {\r\n            $_data['acl'] = (array)$_data['acl'];\r\n            $attr['acl_spam_alias'] = 0;\r\n            $attr['acl_tls_policy'] = 0;\r\n            $attr['acl_spam_score'] = 0;\r\n            $attr['acl_spam_policy'] = 0;\r\n            $attr['acl_delimiter_action'] = 0;\r\n            $attr['acl_syncjobs'] = 0;\r\n            $attr['acl_eas_reset'] = 0;\r\n            $attr['acl_sogo_profile_reset'] = 0;\r\n            $attr['acl_pushover'] = 0;\r\n            $attr['acl_quarantine'] = 0;\r\n            $attr['acl_quarantine_attachments'] = 0;\r\n            $attr['acl_quarantine_notification'] = 0;\r\n            $attr['acl_quarantine_category'] = 0;\r\n            $attr['acl_app_passwds'] = 0;\r\n          }\r\n\r\n\r\n\r\n          // save template\r\n          $stmt = $pdo->prepare(\"INSERT INTO `templates` (`type`, `template`, `attributes`)\r\n          VALUES (:type, :template, :attributes)\");\r\n          $stmt->execute(array(\r\n            \":type\" => \"mailbox\",\r\n            \":template\" => $_data[\"template\"],\r\n            \":attributes\" => json_encode($attr)\r\n          ));\r\n\r\n          // success\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('template_added', $_data[\"template\"])\r\n          );\r\n          return true;\r\n        break;\r\n      }\r\n    break;\r\n    case 'edit':\r\n      switch ($_type) {\r\n        case 'alias_domain':\r\n          $alias_domains = (array)$_data['alias_domain'];\r\n          foreach ($alias_domains as $alias_domain) {\r\n            $alias_domain = idn_to_ascii(strtolower(trim($alias_domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n            $is_now = mailbox('get', 'alias_domain_details', $alias_domain);\r\n            if (!empty($is_now)) {\r\n              $active         = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              $target_domain  = (!empty($_data['target_domain'])) ? idn_to_ascii(strtolower(trim($_data['target_domain'])), 0, INTL_IDNA_VARIANT_UTS46) : $is_now['target_domain'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('alias_domain_invalid', htmlspecialchars($alias_domain))\r\n              );\r\n              continue;\r\n            }\r\n            if (!is_valid_domain_name($target_domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('target_domain_invalid', htmlspecialchars($target_domain))\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $target_domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (empty(mailbox('get', 'domain_details', $target_domain)) || !empty(mailbox('get', 'alias_domain_details', $target_domain))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('target_domain_invalid', htmlspecialchars($target_domain))\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `alias_domain` SET\r\n              `target_domain` = :target_domain,\r\n              `active` = :active\r\n                WHERE `alias_domain` = :alias_domain\");\r\n            $stmt->execute(array(\r\n              ':alias_domain' => $alias_domain,\r\n              ':target_domain' => $target_domain,\r\n              ':active' => $active\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('aliasd_modified', htmlspecialchars($alias_domain))\r\n            );\r\n          }\r\n        break;\r\n        case 'tls_policy':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!hasACLAccess(\"tls_policy\")) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $is_now = mailbox('get', 'tls_policy', $username, $_extra);\r\n            if (!empty($is_now)) {\r\n              $tls_enforce_in = (isset($_data['tls_enforce_in'])) ? intval($_data['tls_enforce_in']) : $is_now['tls_enforce_in'];\r\n              $tls_enforce_out = (isset($_data['tls_enforce_out'])) ? intval($_data['tls_enforce_out']) : $is_now['tls_enforce_out'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `mailbox`\r\n              SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', :tls_out),\r\n                  `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', :tls_in)\r\n                    WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':tls_out' => intval($tls_enforce_out),\r\n              ':tls_in' => intval($tls_enforce_in),\r\n              ':username' => $username\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'quarantine_notification':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!hasACLAccess(\"quarantine_notification\")) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $is_now = mailbox('get', 'quarantine_notification', $username, $_extra);\r\n            if (!empty($is_now)) {\r\n              $quarantine_notification = (isset($_data['quarantine_notification'])) ? $_data['quarantine_notification'] : $is_now['quarantine_notification'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (!in_array($quarantine_notification, array('never', 'hourly', 'daily', 'weekly'))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `mailbox`\r\n              SET `attributes` = JSON_SET(`attributes`, '$.quarantine_notification', :quarantine_notification)\r\n                WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':quarantine_notification' => $quarantine_notification,\r\n              ':username' => $username\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'quarantine_category':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!hasACLAccess(\"quarantine_category\")) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $is_now = mailbox('get', 'quarantine_category', $username, $_extra);\r\n            if (!empty($is_now)) {\r\n              $quarantine_category = (isset($_data['quarantine_category'])) ? $_data['quarantine_category'] : $is_now['quarantine_category'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (!in_array($quarantine_category, array('add_header', 'reject', 'all'))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `mailbox`\r\n              SET `attributes` = JSON_SET(`attributes`, '$.quarantine_category', :quarantine_category)\r\n                WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':quarantine_category' => $quarantine_category,\r\n              ':username' => $username\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'spam_score':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!isset($_SESSION['acl']['spam_score']) || $_SESSION['acl']['spam_score'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if ($_data['spam_score'] == \"default\") {\r\n              $stmt = $pdo->prepare(\"DELETE FROM `filterconf` WHERE `object` = :username\r\n                AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')\");\r\n              $stmt->execute(array(\r\n                ':username' => $username\r\n              ));\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('mailbox_modified', $username)\r\n              );\r\n              continue;\r\n            }\r\n            $lowspamlevel = explode(',', $_data['spam_score'])[0];\r\n            $highspamlevel  = explode(',', $_data['spam_score'])[1];\r\n            if (!is_numeric($lowspamlevel) || !is_numeric($highspamlevel)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'Invalid spam score, format must be \"1,2\" where first is low and second is high spam value.'\r\n              );\r\n              continue;\r\n            }\r\n            if ($lowspamlevel == $highspamlevel) {\r\n              $highspamlevel = $highspamlevel + 0.1;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `filterconf` WHERE `object` = :username\r\n              AND (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"INSERT INTO `filterconf` (`object`, `option`, `value`)\r\n              VALUES (:username, 'highspamlevel', :highspamlevel)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':highspamlevel' => $highspamlevel\r\n            ));\r\n            $stmt = $pdo->prepare(\"INSERT INTO `filterconf` (`object`, `option`, `value`)\r\n              VALUES (:username, 'lowspamlevel', :lowspamlevel)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n              ':lowspamlevel' => $lowspamlevel\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'time_limited_alias':\r\n          if (!isset($_SESSION['acl']['spam_alias']) || $_SESSION['acl']['spam_alias'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_array($_data['address'])) {\r\n            $addresses = array();\r\n            $addresses[] = $_data['address'];\r\n          }\r\n          else {\r\n            $addresses = $_data['address'];\r\n          }\r\n          foreach ($addresses as $address) {\r\n            $stmt = $pdo->prepare(\"SELECT `goto` FROM `spamalias` WHERE `address` = :address\");\r\n            $stmt->execute(array(':address' => $address));\r\n            $goto = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $goto)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (empty($_data['validity']) && empty($_data['permanent'])) {\r\n              continue;\r\n            }\r\n            if (isset($_data['permanent']) && filter_var($_data['permanent'], FILTER_VALIDATE_BOOL)) {\r\n              $permanent = 1;\r\n              $validity = 0;\r\n            }\r\n            else if (isset($_data['validity'])) {\r\n              $permanent = 0;\r\n              $validity = round((int)time() + ($_data['validity'] * 3600));\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `spamalias` SET `validity` = :validity, `permanent` = :permanent WHERE\r\n              `address` = :address\");\r\n            $stmt->execute(array(\r\n              ':address' => $address,\r\n              ':validity' => $validity,\r\n              ':permanent' => $permanent\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', htmlspecialchars(implode(', ', (array)$usernames)))\r\n            );\r\n          }\r\n        break;\r\n        case 'delimiter_action':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!isset($_SESSION['acl']['delimiter_action']) || $_SESSION['acl']['delimiter_action'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!filter_var($username, FILTER_VALIDATE_EMAIL) || !hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (isset($_data['tagged_mail_handler']) && $_data['tagged_mail_handler'] == \"subject\") {\r\n              try {\r\n                $redis->hSet('RCPT_WANTS_SUBJECT_TAG', $username, 1);\r\n                $redis->hDel('RCPT_WANTS_SUBFOLDER_TAG', $username);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            else if (isset($_data['tagged_mail_handler']) && $_data['tagged_mail_handler'] == \"subfolder\") {\r\n              try {\r\n                $redis->hSet('RCPT_WANTS_SUBFOLDER_TAG', $username, 1);\r\n                $redis->hDel('RCPT_WANTS_SUBJECT_TAG', $username);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            else {\r\n              try {\r\n                $redis->hDel('RCPT_WANTS_SUBJECT_TAG', $username);\r\n                $redis->hDel('RCPT_WANTS_SUBFOLDER_TAG', $username);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'syncjob':\r\n          if (!is_array($_data['id'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['id'];\r\n          }\r\n          else {\r\n            $ids = $_data['id'];\r\n          }\r\n          if (!isset($_SESSION['acl']['syncjobs']) || $_SESSION['acl']['syncjobs'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($ids as $id) {\r\n            $is_now = mailbox('get', 'syncjob_details', $id, array('with_password'));\r\n            if (!empty($is_now)) {\r\n              $username = $is_now['user2'];\r\n              $user1 = (!empty($_data['user1'])) ? $_data['user1'] : $is_now['user1'];\r\n              $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              $last_run = (isset($_data['last_run'])) ? NULL : $is_now['last_run'];\r\n              $success = (isset($_data['success'])) ? NULL : $is_now['success'];\r\n              $delete2duplicates = (isset($_data['delete2duplicates'])) ? intval($_data['delete2duplicates']) : $is_now['delete2duplicates'];\r\n              $subscribeall = (isset($_data['subscribeall'])) ? intval($_data['subscribeall']) : $is_now['subscribeall'];\r\n              $dry = (isset($_data['dry'])) ? intval($_data['dry']) : $is_now['dry'];\r\n              $delete1 = (isset($_data['delete1'])) ? intval($_data['delete1']) : $is_now['delete1'];\r\n              $delete2 = (isset($_data['delete2'])) ? intval($_data['delete2']) : $is_now['delete2'];\r\n              $automap = (isset($_data['automap'])) ? intval($_data['automap']) : $is_now['automap'];\r\n              $skipcrossduplicates = (isset($_data['skipcrossduplicates'])) ? intval($_data['skipcrossduplicates']) : $is_now['skipcrossduplicates'];\r\n              $port1 = (!empty($_data['port1'])) ? $_data['port1'] : $is_now['port1'];\r\n              $password1 = (!empty($_data['password1'])) ? $_data['password1'] : $is_now['password1'];\r\n              $host1 = (!empty($_data['host1'])) ? $_data['host1'] : $is_now['host1'];\r\n              $subfolder2 = (isset($_data['subfolder2'])) ? $_data['subfolder2'] : $is_now['subfolder2'];\r\n              $enc1 = (!empty($_data['enc1'])) ? $_data['enc1'] : $is_now['enc1'];\r\n              $mins_interval = (!empty($_data['mins_interval'])) ? $_data['mins_interval'] : $is_now['mins_interval'];\r\n              $exclude = (isset($_data['exclude'])) ? $_data['exclude'] : $is_now['exclude'];\r\n              $custom_params = (isset($_data['custom_params'])) ? $_data['custom_params'] : $is_now['custom_params'];\r\n              $maxage = (isset($_data['maxage']) && $_data['maxage'] != \"\") ? intval($_data['maxage']) : $is_now['maxage'];\r\n              $maxbytespersecond = (isset($_data['maxbytespersecond']) && $_data['maxbytespersecond'] != \"\") ? intval($_data['maxbytespersecond']) : $is_now['maxbytespersecond'];\r\n              $timeout1 = (isset($_data['timeout1']) && $_data['timeout1'] != \"\") ? intval($_data['timeout1']) : $is_now['timeout1'];\r\n              $timeout2 = (isset($_data['timeout2']) && $_data['timeout2'] != \"\") ? intval($_data['timeout2']) : $is_now['timeout2'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            // validate custom params\r\n            foreach (explode('-', $custom_params) as $param){\r\n              if(empty($param)) continue;\r\n\r\n              // extract option\r\n              if (str_contains($param, '=')) $param = explode('=', $param)[0];\r\n              else $param = rtrim($param, ' ');\r\n              // remove first char if first char is -\r\n              if ($param[0] == '-') $param = ltrim($param, $param[0]);\r\n\r\n              if (str_contains($param, ' ')) {\r\n                // bad char\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'bad character SPACE'\r\n                );\r\n                return false;\r\n              }\r\n\r\n              // check if param is whitelisted\r\n              if (!in_array(strtolower($param), $GLOBALS[\"IMAPSYNC_OPTIONS\"][\"whitelist\"])){\r\n                // bad option\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'bad option '. $param\r\n                );\r\n                return false;\r\n              }\r\n            }\r\n            if (empty($subfolder2)) {\r\n              $subfolder2 = \"\";\r\n            }\r\n            if (!isset($maxage) || !filter_var($maxage, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {\r\n              $maxage = \"0\";\r\n            }\r\n            if (!isset($timeout1) || !filter_var($timeout1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {\r\n              $timeout1 = \"600\";\r\n            }\r\n            if (!isset($timeout2) || !filter_var($timeout2, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 32000)))) {\r\n              $timeout2 = \"600\";\r\n            }\r\n            if (!isset($maxbytespersecond) || !filter_var($maxbytespersecond, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 125000000)))) {\r\n              $maxbytespersecond = \"0\";\r\n            }\r\n            if (!filter_var($port1, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 65535)))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (!filter_var($mins_interval, FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 43800)))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (!is_valid_domain_name($host1)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if ($enc1 != \"TLS\" && $enc1 != \"SSL\" && $enc1 != \"PLAIN\") {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (@preg_match(\"/\" . $exclude . \"/\", null) === false) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `imapsync` SET `delete1` = :delete1,\r\n              `delete2` = :delete2,\r\n              `automap` = :automap,\r\n              `skipcrossduplicates` = :skipcrossduplicates,\r\n              `maxage` = :maxage,\r\n              `maxbytespersecond` = :maxbytespersecond,\r\n              `subfolder2` = :subfolder2,\r\n              `exclude` = :exclude,\r\n              `host1` = :host1,\r\n              `last_run` = :last_run,\r\n              `success` = :success,\r\n              `user1` = :user1,\r\n              `password1` = :password1,\r\n              `mins_interval` = :mins_interval,\r\n              `port1` = :port1,\r\n              `enc1` = :enc1,\r\n              `delete2duplicates` = :delete2duplicates,\r\n              `custom_params` = :custom_params,\r\n              `timeout1` = :timeout1,\r\n              `timeout2` = :timeout2,\r\n              `subscribeall` = :subscribeall,\r\n              `dry` = :dry,\r\n              `active` = :active\r\n                WHERE `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':delete1' => $delete1,\r\n              ':delete2' => $delete2,\r\n              ':automap' => $automap,\r\n              ':skipcrossduplicates' => $skipcrossduplicates,\r\n              ':id' => $id,\r\n              ':exclude' => $exclude,\r\n              ':maxage' => $maxage,\r\n              ':maxbytespersecond' => $maxbytespersecond,\r\n              ':subfolder2' => $subfolder2,\r\n              ':host1' => $host1,\r\n              ':user1' => $user1,\r\n              ':password1' => $password1,\r\n              ':last_run' => $last_run,\r\n              ':success' => $success,\r\n              ':mins_interval' => $mins_interval,\r\n              ':port1' => $port1,\r\n              ':enc1' => $enc1,\r\n              ':delete2duplicates' => $delete2duplicates,\r\n              ':custom_params' => $custom_params,\r\n              ':timeout1' => $timeout1,\r\n              ':timeout2' => $timeout2,\r\n              ':subscribeall' => $subscribeall,\r\n              ':dry' => $dry,\r\n              ':active' => $active,\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'filter':\r\n          if (!isset($_SESSION['acl']['filters']) || $_SESSION['acl']['filters'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $sieve = new Sieve\\SieveParser();\r\n          if (!is_array($_data['id'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['id'];\r\n          }\r\n          else {\r\n            $ids = $_data['id'];\r\n          }\r\n          foreach ($ids as $id) {\r\n            $is_now = mailbox('get', 'filter_details', $id);\r\n            if (!empty($is_now)) {\r\n              $username = $is_now['username'];\r\n              $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              $script_desc = (!empty($_data['script_desc'])) ? $_data['script_desc'] : $is_now['script_desc'];\r\n              $script_data = (!empty($_data['script_data'])) ? $_data['script_data'] : $is_now['script_data'];\r\n              $filter_type = (!empty($_data['filter_type'])) ? $_data['filter_type'] : $is_now['filter_type'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            try {\r\n              $sieve->parse($script_data);\r\n            }\r\n            catch (Exception $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('sieve_error', $e->getMessage())\r\n              );\r\n              continue;\r\n            }\r\n            if ($filter_type != 'postfilter' && $filter_type != 'prefilter') {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'filter_type'\r\n              );\r\n              continue;\r\n            }\r\n            if ($active == '1') {\r\n              $script_name = 'active';\r\n              $stmt = $pdo->prepare(\"UPDATE `sieve_filters`\r\n                SET `script_name` = 'inactive'\r\n                  WHERE `username` = :username\r\n                    AND `filter_type` = :filter_type\");\r\n              $stmt->execute(array(\r\n                ':username' => $username,\r\n                ':filter_type' => $filter_type\r\n              ));\r\n            }\r\n            else {\r\n              $script_name = 'inactive';\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `sieve_filters` SET `script_desc` = :script_desc, `script_data` = :script_data, `script_name` = :script_name, `filter_type` = :filter_type\r\n              WHERE `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':script_desc' => $script_desc,\r\n              ':script_data' => $script_data,\r\n              ':script_name' => $script_name,\r\n              ':filter_type' => $filter_type,\r\n              ':id' => $id\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n          }\r\n        break;\r\n        case 'alias':\r\n          if (!is_array($_data['id'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['id'];\r\n          }\r\n          else {\r\n            $ids = $_data['id'];\r\n          }\r\n          foreach ($ids as $id) {\r\n            $is_now = mailbox('get', 'alias_details', $id);\r\n            if (!empty($is_now)) {\r\n              $internal = (isset($_data['internal'])) ? intval($_data['internal']) : $is_now['internal'];\r\n              $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              $sender_allowed = (isset($_data['sender_allowed'])) ? intval($_data['sender_allowed']) : $is_now['sender_allowed'];\r\n              $sogo_visible = (isset($_data['sogo_visible'])) ? intval($_data['sogo_visible']) : $is_now['sogo_visible'];\r\n              $goto_null = (isset($_data['goto_null'])) ? intval($_data['goto_null']) : 0;\r\n              $goto_spam = (isset($_data['goto_spam'])) ? intval($_data['goto_spam']) : 0;\r\n              $goto_ham = (isset($_data['goto_ham'])) ? intval($_data['goto_ham']) : 0;\r\n              $public_comment = (isset($_data['public_comment'])) ? $_data['public_comment'] : $is_now['public_comment'];\r\n              $private_comment = (isset($_data['private_comment'])) ? $_data['private_comment'] : $is_now['private_comment'];\r\n              $goto = (!empty($_data['goto'])) ? $_data['goto'] : $is_now['goto'];\r\n              $address = (!empty($_data['address'])) ? $_data['address'] : $is_now['address'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('alias_invalid', $address)\r\n              );\r\n              continue;\r\n            }\r\n            if ($_data['expand_alias'] === true || $_data['expand_alias'] == 1) {\r\n              $stmt = $pdo->prepare(\"SELECT `address` FROM `alias`\r\n                WHERE `address` = :address\r\n                  AND `domain` NOT IN (\r\n                    SELECT `alias_domain` FROM `alias_domain`\r\n                  )\");\r\n              $stmt->execute(array(\r\n                ':address' => $address,\r\n              ));\r\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n              if ($num_results == 0) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('is_not_primary_alias', htmlspecialchars($address))\r\n                );\r\n                continue;\r\n              }\r\n              $stmt = $pdo->prepare(\"SELECT `goto`, GROUP_CONCAT(CONCAT(SUBSTRING(`alias`.`address`, 1, LOCATE('@', `alias`.`address`) - 1), '@', `alias_domain`.`alias_domain`)) AS `missing_alias`\r\n                FROM `alias` JOIN `alias_domain` ON `alias_domain`.`target_domain` = `alias`.`domain`\r\n                    WHERE CONCAT(SUBSTRING(`alias`.`address`, 1, LOCATE('@', `alias`.`address`) - 1), '@', `alias_domain`.`alias_domain`) NOT IN (\r\n                      SELECT `address` FROM `alias` WHERE `address` != `goto`\r\n                    )\r\n                    AND `alias`.`address` NOT IN (\r\n                      SELECT `address` FROM `alias` WHERE `address` = `goto`\r\n                    )\r\n                    AND `address` = :address ;\");\r\n              $stmt->execute(array(\r\n                ':address' => $address\r\n              ));\r\n              $missing_aliases = $stmt->fetch(PDO::FETCH_ASSOC);\r\n              if (!empty($missing_aliases['missing_alias'])) {\r\n                mailbox('add', 'alias', array(\r\n                  'address' => $missing_aliases['missing_alias'],\r\n                  'goto' => $missing_aliases['goto'],\r\n                  'sogo_visible' => 1,\r\n                  'active' => 1\r\n                ));\r\n              }\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('alias_modified', htmlspecialchars($address))\r\n              );\r\n              continue;\r\n            }\r\n            $domain = idn_to_ascii(substr(strstr($address, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);\r\n            if ($is_now['address'] != $address) {\r\n              $local_part = strstr($address, '@', true);\r\n              $address      = $local_part.'@'.$domain;\r\n              if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'access_denied'\r\n                );\r\n                continue;\r\n              }\r\n              if ((!filter_var($address, FILTER_VALIDATE_EMAIL) === true) && !empty($local_part)) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('alias_invalid', $address)\r\n                );\r\n                continue;\r\n              }\r\n              if (strtolower($is_now['address']) != strtolower($address)) {\r\n                $stmt = $pdo->prepare(\"SELECT `address` FROM `alias`\r\n                  WHERE `address`= :address OR `address` IN (\r\n                    SELECT `username` FROM `mailbox`, `alias_domain`\r\n                      WHERE (\r\n                        `alias_domain`.`alias_domain` = :address_d\r\n                          AND `mailbox`.`username` = CONCAT(:address_l, '@', alias_domain.target_domain)))\");\r\n                $stmt->execute(array(\r\n                  ':address' => $address,\r\n                  ':address_l' => $local_part,\r\n                  ':address_d' => $domain\r\n                ));\r\n                $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n                if ($num_results != 0) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => array('is_alias_or_mailbox', htmlspecialchars($address))\r\n                  );\r\n                  continue;\r\n                }\r\n              }\r\n              $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n                WHERE `domain`= :domain1 OR `domain` = (SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain2)\");\r\n              $stmt->execute(array(':domain1' => $domain, ':domain2' => $domain));\r\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n              if ($num_results == 0) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('domain_not_found', htmlspecialchars($domain))\r\n                );\r\n                continue;\r\n              }\r\n              $stmt = $pdo->prepare(\"SELECT `address` FROM `spamalias`\r\n                WHERE `address`= :address\");\r\n              $stmt->execute(array(':address' => $address));\r\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n              if ($num_results != 0) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('is_spam_alias', htmlspecialchars($address))\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            if ($goto_null == \"1\") {\r\n              $goto = \"null@localhost\";\r\n            }\r\n            elseif ($goto_spam == \"1\") {\r\n              $goto = \"spam@localhost\";\r\n            }\r\n            elseif ($goto_ham == \"1\") {\r\n              $goto = \"ham@localhost\";\r\n            }\r\n            else {\r\n              $gotos = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $goto));\r\n              foreach ($gotos as $i => &$goto) {\r\n                if (empty($goto)) {\r\n                  continue;\r\n                }\r\n                if (!filter_var($goto, FILTER_VALIDATE_EMAIL)) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => array('goto_invalid', $goto)\r\n                  );\r\n                  unset($gotos[$i]);\r\n                  continue;\r\n                }\r\n                if ($goto == $address) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => 'alias_goto_identical'\r\n                  );\r\n                  unset($gotos[$i]);\r\n                  continue;\r\n                }\r\n                // Delete from sender_acl to prevent duplicates\r\n                $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE\r\n                  `logged_in_as` = :goto AND\r\n                  `send_as` = :address\");\r\n                $stmt->execute(array(\r\n                  ':goto' => $goto,\r\n                  ':address' => $address\r\n                ));\r\n              }\r\n              $gotos = array_unique($gotos);\r\n              $gotos = array_filter($gotos);\r\n              $goto = implode(\",\", (array)$gotos);\r\n            }\r\n            if (!empty($goto)) {\r\n              $stmt = $pdo->prepare(\"UPDATE `alias` SET\r\n                `address` = :address,\r\n                `public_comment` = :public_comment,\r\n                `private_comment` = :private_comment,\r\n                `domain` = :domain,\r\n                `goto` = :goto,\r\n                `sogo_visible`= :sogo_visible,\r\n                `internal`= :internal,\r\n                `sender_allowed`= :sender_allowed,\r\n                `active`= :active\r\n                  WHERE `id` = :id\");\r\n              $stmt->execute(array(\r\n                ':address' => $address,\r\n                ':public_comment' => $public_comment,\r\n                ':private_comment' => $private_comment,\r\n                ':domain' => $domain,\r\n                ':goto' => $goto,\r\n                ':sogo_visible' => $sogo_visible,\r\n                ':internal' => $internal,\r\n                ':sender_allowed' => $sender_allowed,\r\n                ':active' => $active,\r\n                ':id' => $is_now['id']\r\n              ));\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('alias_modified', htmlspecialchars($address))\r\n            );\r\n\r\n            // Track affected mailboxes for SOGo update (both old and new goto addresses)\r\n            // Old goto: to remove alias from their view\r\n            if (!empty($is_now['goto'])) {\r\n              $old_gotos = array_map('trim', explode(',', $is_now['goto']));\r\n              foreach ($old_gotos as $g) {\r\n                if (filter_var($g, FILTER_VALIDATE_EMAIL) &&\r\n                    !in_array($g, array('null@localhost', 'spam@localhost', 'ham@localhost'))) {\r\n                  $update_sogo_mailboxes[] = $g;\r\n                }\r\n              }\r\n            }\r\n            // New goto: to add alias to their view\r\n            if (!empty($goto)) {\r\n              $new_gotos = array_map('trim', explode(',', $goto));\r\n              foreach ($new_gotos as $g) {\r\n                if (filter_var($g, FILTER_VALIDATE_EMAIL) &&\r\n                    !in_array($g, array('null@localhost', 'spam@localhost', 'ham@localhost'))) {\r\n                  $update_sogo_mailboxes[] = $g;\r\n                }\r\n              }\r\n            }\r\n          }\r\n        break;\r\n        case 'domain':\r\n          if (!is_array($_data['domain'])) {\r\n            $domains = array();\r\n            $domains[] = $_data['domain'];\r\n          }\r\n          else {\r\n            $domains = $_data['domain'];\r\n          }\r\n          foreach ($domains as $domain) {\r\n            $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);\r\n            if (!is_valid_domain_name($domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_invalid'\r\n              );\r\n              continue;\r\n            }\r\n            if ($_SESSION['mailcow_cc_role'] == \"domainadmin\" &&\r\n            hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $is_now = mailbox('get', 'domain_details', $domain);\r\n              if (!empty($is_now)) {\r\n                $gal                  = (isset($_data['gal'])) ? intval($_data['gal']) : $is_now['gal'];\r\n                $description          = (!empty($_data['description']) && isset($_SESSION['acl']['domain_desc']) && $_SESSION['acl']['domain_desc'] == \"1\") ? $_data['description'] : $is_now['description'];\r\n                (int)$relayhost       = (isset($_data['relayhost']) && isset($_SESSION['acl']['domain_relayhost']) && $_SESSION['acl']['domain_relayhost'] == \"1\") ? intval($_data['relayhost']) : intval($is_now['relayhost']);\r\n                $tags                 = (is_array($_data['tags']) ? $_data['tags'] : array());\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'domain_invalid'\r\n                );\r\n                continue;\r\n              }\r\n\r\n              $stmt = $pdo->prepare(\"UPDATE `domain` SET\r\n              `description` = :description,\r\n              `gal` = :gal\r\n                WHERE `domain` = :domain\");\r\n              $stmt->execute(array(\r\n                ':description' => $description,\r\n                ':gal' => $gal,\r\n                ':domain' => $domain\r\n              ));\r\n              // save tags\r\n              foreach($tags as $index => $tag){\r\n                if (empty($tag)) continue;\r\n                if ($index > $GLOBALS['TAGGING_LIMIT']) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'warning',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])\r\n                  );\r\n                  break;\r\n                }\r\n                $stmt = $pdo->prepare(\"INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)\");\r\n                $stmt->execute(array(\r\n                  ':domain' => $domain,\r\n                  ':tag_name' => $tag,\r\n                ));\r\n              }\r\n\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('domain_modified', htmlspecialchars($domain))\r\n              );\r\n            }\r\n            elseif ($_SESSION['mailcow_cc_role'] == \"admin\") {\r\n              $is_now = mailbox('get', 'domain_details', $domain);\r\n              if (!empty($is_now)) {\r\n                $active               = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n                $backupmx             = (isset($_data['backupmx'])) ? intval($_data['backupmx']) : $is_now['backupmx'];\r\n                $gal                  = (isset($_data['gal'])) ? intval($_data['gal']) : $is_now['gal'];\r\n                $relay_all_recipients = (isset($_data['relay_all_recipients'])) ? intval($_data['relay_all_recipients']) : $is_now['relay_all_recipients'];\r\n                $relay_unknown_only   = (isset($_data['relay_unknown_only'])) ? intval($_data['relay_unknown_only']) : $is_now['relay_unknown_only'];\r\n                $relayhost            = (isset($_data['relayhost'])) ? intval($_data['relayhost']) : $is_now['relayhost'];\r\n                $aliases              = (!empty($_data['aliases'])) ? $_data['aliases'] : $is_now['max_num_aliases_for_domain'];\r\n                $mailboxes            = (isset($_data['mailboxes']) && $_data['mailboxes'] != '') ? intval($_data['mailboxes']) : $is_now['max_num_mboxes_for_domain'];\r\n                $defquota             = (isset($_data['defquota']) && $_data['defquota'] != '') ? intval($_data['defquota']) : ($is_now['def_quota_for_mbox'] / 1048576);\r\n                $maxquota             = (!empty($_data['maxquota'])) ? $_data['maxquota'] : ($is_now['max_quota_for_mbox'] / 1048576);\r\n                $quota                = (!empty($_data['quota'])) ? $_data['quota'] : ($is_now['max_quota_for_domain'] / 1048576);\r\n                $description          = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];\r\n                $tags                 = (is_array($_data['tags']) ? $_data['tags'] : array());\r\n                if ($relay_all_recipients == '1') {\r\n                  $backupmx = '1';\r\n                }\r\n                if ($relay_unknown_only == '1') {\r\n                  $backupmx = '1';\r\n                  $relay_all_recipients = '1';\r\n                }\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'domain_invalid'\r\n                );\r\n                continue;\r\n              }\r\n              // todo: should be using api here\r\n              $stmt = $pdo->prepare(\"SELECT\r\n                  COUNT(*) AS count,\r\n                  MAX(COALESCE(ROUND(`quota`/1048576), 0)) AS `biggest_mailbox`,\r\n                  COALESCE(ROUND(SUM(`quota`)/1048576), 0) AS `quota_all`\r\n                    FROM `mailbox`\r\n                      WHERE (`kind` = '' OR `kind` = NULL)\r\n                        AND domain = :domain\");\r\n              $stmt->execute(array(':domain' => $domain));\r\n              $MailboxData = $stmt->fetch(PDO::FETCH_ASSOC);\r\n              // todo: should be using api here\r\n              $stmt = $pdo->prepare(\"SELECT COUNT(*) AS `count` FROM `alias`\r\n                  WHERE domain = :domain\r\n                  AND address NOT IN (\r\n                    SELECT `username` FROM `mailbox`\r\n                  )\");\r\n              $stmt->execute(array(':domain' => $domain));\r\n              $AliasData = $stmt->fetch(PDO::FETCH_ASSOC);\r\n              if ($defquota > $maxquota) {\r\n                $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => 'mailbox_defquota_exceeds_mailbox_maxquota'\r\n                );\r\n                continue;\r\n              }\r\n              if ($defquota == \"0\" || empty($defquota)) {\r\n                $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => 'defquota_empty'\r\n                );\r\n                continue;\r\n              }\r\n              if ($maxquota > $quota) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'mailbox_quota_exceeds_domain_quota'\r\n                );\r\n                continue;\r\n              }\r\n              if ($maxquota == \"0\" || empty($maxquota)) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'maxquota_empty'\r\n                );\r\n                continue;\r\n              }\r\n              if ($MailboxData['biggest_mailbox'] > $maxquota) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('max_quota_in_use', $MailboxData['biggest_mailbox'])\r\n                );\r\n                continue;\r\n              }\r\n              if ($MailboxData['quota_all'] > $quota) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('domain_quota_m_in_use', $MailboxData['quota_all'])\r\n                );\r\n                continue;\r\n              }\r\n              if ($MailboxData['count'] > $mailboxes) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('mailboxes_in_use', $MailboxData['count'])\r\n                );\r\n                continue;\r\n              }\r\n              if ($AliasData['count'] > $aliases) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('aliases_in_use', $AliasData['count'])\r\n                );\r\n                continue;\r\n              }\r\n\r\n              $stmt = $pdo->prepare(\"UPDATE `domain` SET\r\n              `relay_all_recipients` = :relay_all_recipients,\r\n              `relay_unknown_only` = :relay_unknown_only,\r\n              `backupmx` = :backupmx,\r\n              `gal` = :gal,\r\n              `active` = :active,\r\n              `quota` = :quota,\r\n              `defquota` = :defquota,\r\n              `maxquota` = :maxquota,\r\n              `relayhost` = :relayhost,\r\n              `mailboxes` = :mailboxes,\r\n              `aliases` = :aliases,\r\n              `description` = :description\r\n                WHERE `domain` = :domain\");\r\n              $stmt->execute(array(\r\n                ':relay_all_recipients' => $relay_all_recipients,\r\n                ':relay_unknown_only' => $relay_unknown_only,\r\n                ':backupmx' => $backupmx,\r\n                ':gal' => $gal,\r\n                ':active' => $active,\r\n                ':quota' => $quota,\r\n                ':defquota' => $defquota,\r\n                ':maxquota' => $maxquota,\r\n                ':relayhost' => $relayhost,\r\n                ':mailboxes' => $mailboxes,\r\n                ':aliases' => $aliases,\r\n                ':description' => $description,\r\n                ':domain' => $domain\r\n              ));\r\n              // save tags\r\n              foreach($tags as $index => $tag){\r\n                if (empty($tag)) continue;\r\n                if ($index > $GLOBALS['TAGGING_LIMIT']) {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'warning',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])\r\n                  );\r\n                  break;\r\n                }\r\n                $stmt = $pdo->prepare(\"INSERT INTO `tags_domain` (`domain`, `tag_name`) VALUES (:domain, :tag_name)\");\r\n                $stmt->execute(array(\r\n                  ':domain' => $domain,\r\n                  ':tag_name' => $tag,\r\n                ));\r\n              }\r\n\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('domain_modified', htmlspecialchars($domain))\r\n              );\r\n            }\r\n          }\r\n        break;\r\n        case 'domain_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_array($_data['ids'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['ids'];\r\n          }\r\n          else {\r\n            $ids = $_data['ids'];\r\n          }\r\n          foreach ($ids as $id) {\r\n            $is_now = mailbox(\"get\", \"domain_templates\", $id);\r\n            if (empty($is_now) ||\r\n                $is_now[\"type\"] != \"domain\"){\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n                'msg' => 'template_id_invalid'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            // check name\r\n            if ($is_now[\"template\"] == \"Default\" && $is_now[\"template\"] != $_data[\"template\"]){\r\n              // keep template name of Default template\r\n              $_data[\"template\"]                   = $is_now[\"template\"];\r\n            }\r\n            else {\r\n              $_data[\"template\"]                   = (isset($_data[\"template\"])) ? $_data[\"template\"] : $is_now[\"template\"];\r\n            }\r\n            // check attributes\r\n            $attr = array();\r\n            $attr['tags']                       = (isset($_data['tags'])) ? $_data['tags'] : array();\r\n            $attr['max_num_aliases_for_domain'] = (isset($_data['max_num_aliases_for_domain'])) ? intval($_data['max_num_aliases_for_domain']) : 0;\r\n            $attr['max_num_mboxes_for_domain']  = (isset($_data['max_num_mboxes_for_domain'])) ? intval($_data['max_num_mboxes_for_domain']) : 0;\r\n            $attr['def_quota_for_mbox']         = (isset($_data['def_quota_for_mbox'])) ? intval($_data['def_quota_for_mbox']) * 1048576 : 0;\r\n            $attr['max_quota_for_mbox']         = (isset($_data['max_quota_for_mbox'])) ? intval($_data['max_quota_for_mbox']) * 1048576 : 0;\r\n            $attr['max_quota_for_domain']       = (isset($_data['max_quota_for_domain'])) ? intval($_data['max_quota_for_domain']) * 1048576 : 0;\r\n            $attr['rl_frame']                   = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : \"s\";\r\n            $attr['rl_value']                   = (!empty($_data['rl_value'])) ? $_data['rl_value'] : \"\";\r\n            $attr['active']                     = isset($_data['active']) ? intval($_data['active']) : 1;\r\n            $attr['gal']                        = (isset($_data['gal'])) ? intval($_data['gal']) : 1;\r\n            $attr['backupmx']                   = (isset($_data['backupmx'])) ? intval($_data['backupmx']) : 0;\r\n            $attr['relay_all_recipients']       = (isset($_data['relay_all_recipients'])) ? intval($_data['relay_all_recipients']) : 0;\r\n            $attr['relay_unknown_only']          = (isset($_data['relay_unknown_only'])) ? intval($_data['relay_unknown_only']) : 0;\r\n            $attr['dkim_selector']              = (isset($_data['dkim_selector'])) ? $_data['dkim_selector'] : \"dkim\";\r\n            $attr['key_size']                   = isset($_data['key_size']) ? intval($_data['key_size']) : 2048;\r\n\r\n            // update template\r\n            $stmt = $pdo->prepare(\"UPDATE `templates`\r\n              SET `template` = :template, `attributes` = :attributes\r\n              WHERE id = :id\");\r\n            $stmt->execute(array(\r\n              \":id\" => $id ,\r\n              \":template\" => $_data[\"template\"] ,\r\n              \":attributes\" => json_encode($attr)\r\n            ));\r\n          }\r\n\r\n\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('template_modified', $_data[\"template\"])\r\n          );\r\n          return true;\r\n        break;\r\n        case 'mailbox':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('username_invalid', $username)\r\n              );\r\n              continue;\r\n            }\r\n            $is_now = mailbox('get', 'mailbox_details', $username, $_extra);\r\n            if (isset($_data['protocol_access'])) {\r\n              $_data['protocol_access'] = (array)$_data['protocol_access'];\r\n              $_data['imap_access'] = (in_array('imap', $_data['protocol_access'])) ? 1 : 0;\r\n              $_data['pop3_access'] = (in_array('pop3', $_data['protocol_access'])) ? 1 : 0;\r\n              $_data['smtp_access'] = (in_array('smtp', $_data['protocol_access'])) ? 1 : 0;\r\n              $_data['sieve_access'] = (in_array('sieve', $_data['protocol_access'])) ? 1 : 0;\r\n              $_data['eas_access'] = (in_array('eas', $_data['protocol_access'])) ? 1 : 0;\r\n              $_data['dav_access'] = (in_array('dav', $_data['protocol_access'])) ? 1 : 0;\r\n            }\r\n            if (!empty($is_now)) {\r\n              $active               = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              (int)$force_pw_update = (isset($_data['force_pw_update'])) ? intval($_data['force_pw_update']) : intval($is_now['attributes']['force_pw_update']);\r\n              (int)$force_tfa       = (isset($_data['force_tfa'])) ? intval($_data['force_tfa']) : intval($is_now['attributes']['force_tfa']);\r\n              (int)$sogo_access     = (isset($_data['sogo_access']) && hasACLAccess(\"sogo_access\")) ? intval($_data['sogo_access']) : intval($is_now['attributes']['sogo_access']);\r\n              (int)$imap_access     = (isset($_data['imap_access']) && hasACLAccess(\"protocol_access\")) ? intval($_data['imap_access']) : intval($is_now['attributes']['imap_access']);\r\n              (int)$pop3_access     = (isset($_data['pop3_access']) && hasACLAccess(\"protocol_access\")) ? intval($_data['pop3_access']) : intval($is_now['attributes']['pop3_access']);\r\n              (int)$smtp_access     = (isset($_data['smtp_access']) && hasACLAccess(\"protocol_access\")) ? intval($_data['smtp_access']) : intval($is_now['attributes']['smtp_access']);\r\n              (int)$sieve_access    = (isset($_data['sieve_access']) && hasACLAccess(\"protocol_access\")) ? intval($_data['sieve_access']) : intval($is_now['attributes']['sieve_access']);\r\n              (int)$eas_access     = (isset($_data['eas_access']) && hasACLAccess(\"protocol_access\")) ? intval($_data['eas_access']) : intval($is_now['attributes']['eas_access']);\r\n              (int)$dav_access    = (isset($_data['dav_access']) && hasACLAccess(\"protocol_access\")) ? intval($_data['dav_access']) : intval($is_now['attributes']['dav_access']);\r\n              (int)$relayhost       = (isset($_data['relayhost']) && hasACLAccess(\"mailbox_relayhost\")) ? intval($_data['relayhost']) : intval($is_now['attributes']['relayhost']);\r\n              (int)$quota_m         = (isset_has_content($_data['quota'])) ? intval($_data['quota']) : ($is_now['quota'] / 1048576);\r\n              $name                 = (!empty($_data['name'])) ? ltrim(rtrim($_data['name'], '>'), '<') : $is_now['name'];\r\n              $domain               = $is_now['domain'];\r\n              $quota_b              = $quota_m * 1048576;\r\n              $password             = (!empty($_data['password'])) ? $_data['password'] : null;\r\n              $password2            = (!empty($_data['password2'])) ? $_data['password2'] : null;\r\n              $tags                 = (is_array($_data['tags']) ? $_data['tags'] : array());\r\n              $attribute_hash       = (!empty($_data['attribute_hash'])) ? $_data['attribute_hash'] : '';\r\n              $authsource           = $is_now['authsource'];\r\n              if ($_data['authsource'] == \"mailcow\" ||\r\n                  in_array($_data['authsource'], array('keycloak', 'generic-oidc', 'ldap')) && $iam_settings['authsource'] == $_data['authsource']){\r\n                $authsource = $_data['authsource'];\r\n              }\r\n              if (in_array($authsource, array('keycloak', 'generic-oidc', 'ldap'))){\r\n                $force_pw_update = 0;\r\n              }\r\n              if ($authsource == 'generic-oidc'){\r\n                $force_tfa = 0;\r\n              }\r\n              $pw_recovery_email    = (isset($_data['pw_recovery_email']) && $authsource == 'mailcow') ? $_data['pw_recovery_email'] : $is_now['attributes']['recovery_email'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            // if already 0 == ok\r\n            if (!hasACLAccess(\"unlimited_quota\") && ($quota_m == 0 && $is_now['quota'] != 0)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'unlimited_quota_acl'\r\n              );\r\n              return false;\r\n            }\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $DomainData = mailbox('get', 'domain_details', $domain, $_extra);\r\n            if ($quota_m > ($is_now['max_new_quota'] / 1048576)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('mailbox_quota_left_exceeded', ($is_now['max_new_quota'] / 1048576))\r\n              );\r\n              continue;\r\n            }\r\n            if ($quota_m > $DomainData['max_quota_for_mbox']) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('mailbox_quota_exceeded', $DomainData['max_quota_for_mbox'])\r\n              );\r\n              continue;\r\n            }\r\n            $extra_acls = array();\r\n            if (isset($_data['extended_sender_acl'])) {\r\n              if (!hasACLAccess(\"extend_sender_acl\")) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'extended_sender_acl_denied'\r\n                );\r\n              }\r\n              else {\r\n                $extra_acls = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['extended_sender_acl']));\r\n                foreach ($extra_acls as $i => &$extra_acl) {\r\n                  if (empty($extra_acl)) {\r\n                    continue;\r\n                  }\r\n                  if (substr($extra_acl, 0, 1) === \"@\") {\r\n                    $extra_acl = ltrim($extra_acl, '@');\r\n                  }\r\n                  if (!filter_var($extra_acl, FILTER_VALIDATE_EMAIL) && !is_valid_domain_name($extra_acl)) {\r\n                    $_SESSION['return'][] = array(\r\n                      'type' => 'danger',\r\n                      'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                      'msg' => array('extra_acl_invalid', htmlspecialchars($extra_acl))\r\n                    );\r\n                    unset($extra_acls[$i]);\r\n                    continue;\r\n                  }\r\n                  $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));\r\n                  if (filter_var($extra_acl, FILTER_VALIDATE_EMAIL)) {\r\n                    $extra_acl_domain = idn_to_ascii(substr(strstr($extra_acl, '@'), 1), 0, INTL_IDNA_VARIANT_UTS46);\r\n                    if (in_array($extra_acl_domain, $domains)) {\r\n                      $_SESSION['return'][] = array(\r\n                        'type' => 'danger',\r\n                        'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                        'msg' => array('extra_acl_invalid_domain', $extra_acl_domain)\r\n                      );\r\n                      unset($extra_acls[$i]);\r\n                      continue;\r\n                    }\r\n                  }\r\n                  else {\r\n                    if (in_array($extra_acl, $domains)) {\r\n                      $_SESSION['return'][] = array(\r\n                        'type' => 'danger',\r\n                        'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                        'msg' => array('extra_acl_invalid_domain', $extra_acl_domain)\r\n                      );\r\n                      unset($extra_acls[$i]);\r\n                      continue;\r\n                    }\r\n                    $extra_acl = '@' . $extra_acl;\r\n                  }\r\n                }\r\n                $extra_acls = array_filter($extra_acls);\r\n                $extra_acls = array_values($extra_acls);\r\n                $extra_acls = array_unique($extra_acls);\r\n                $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `external` = 1 AND `logged_in_as` = :username\");\r\n                $stmt->execute(array(\r\n                  ':username' => $username\r\n                ));\r\n                foreach ($extra_acls as $sender_acl_external) {\r\n                  $stmt = $pdo->prepare(\"INSERT INTO `sender_acl` (`send_as`, `logged_in_as`, `external`)\r\n                    VALUES (:sender_acl, :username, 1)\");\r\n                  $stmt->execute(array(\r\n                    ':sender_acl' => $sender_acl_external,\r\n                    ':username' => $username\r\n                  ));\r\n                }\r\n              }\r\n            }\r\n            if (isset($_data['sender_acl'])) {\r\n              // Get sender_acl items set by admin\r\n              $current_sender_acls = mailbox('get', 'sender_acl_handles', $username);\r\n              $sender_acl_admin = array_merge(\r\n                $current_sender_acls['sender_acl_domains']['ro'],\r\n                $current_sender_acls['sender_acl_addresses']['ro']\r\n              );\r\n              // Get sender_acl items from POST array\r\n              // Set sender_acl_domain_admin to empty array if sender_acl contains \"default\" to trigger a reset\r\n              // Delete records from sender_acl if sender_acl contains \"*\" and set to array(\"*\")\r\n              $_data['sender_acl'] = (array)$_data['sender_acl'];\r\n              if (in_array(\"*\", $_data['sender_acl'])) {\r\n                $sender_acl_domain_admin = array('*');\r\n              }\r\n              elseif (array(\"default\") === $_data['sender_acl']) {\r\n                $sender_acl_domain_admin = array();\r\n              }\r\n              else {\r\n                if (array_search('default', $_data['sender_acl']) !== false){\r\n                  unset($_data['sender_acl'][array_search('default', $_data['sender_acl'])]);\r\n                }\r\n                $sender_acl_domain_admin = $_data['sender_acl'];\r\n              }\r\n              if (!empty($sender_acl_domain_admin) || !empty($sender_acl_admin)) {\r\n                // Check items in POST array and skip invalid\r\n                foreach ($sender_acl_domain_admin as $key => $val) {\r\n                  // Check for invalid domain or email format or not *\r\n                  if (!filter_var($val, FILTER_VALIDATE_EMAIL) && !is_valid_domain_name(ltrim($val, '@')) && $val != '*') {\r\n                    $_SESSION['return'][] = array(\r\n                      'type' => 'danger',\r\n                      'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                      'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])\r\n                    );\r\n                    unset($sender_acl_domain_admin[$key]);\r\n                    continue;\r\n                  }\r\n                  // Check if user has domain access (if object is domain)\r\n                  $domain = ltrim($sender_acl_domain_admin[$key], '@');\r\n                  if (is_valid_domain_name($domain)) {\r\n                    // Check for- and skip non-mailcow domains\r\n                    $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));\r\n                    if (!empty($domains)) {\r\n                      if (!in_array($domain, $domains)) {\r\n                        $_SESSION['return'][] = array(\r\n                          'type' => 'danger',\r\n                          'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                          'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])\r\n                        );\r\n                        unset($sender_acl_domain_admin[$key]);\r\n                        continue;\r\n                      }\r\n                    }\r\n                    if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n                      $_SESSION['return'][] = array(\r\n                        'type' => 'danger',\r\n                        'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                        'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])\r\n                      );\r\n                      unset($sender_acl_domain_admin[$key]);\r\n                      continue;\r\n                    }\r\n                  }\r\n                  // Wildcard can only be used if role == admin\r\n                  if ($val == '*' && $_SESSION['mailcow_cc_role'] != 'admin') {\r\n                    $_SESSION['return'][] = array(\r\n                      'type' => 'danger',\r\n                      'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                      'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])\r\n                    );\r\n                    unset($sender_acl_domain_admin[$key]);\r\n                    continue;\r\n                  }\r\n                  // Check if user has alias access (if object is email)\r\n                  if (filter_var($val, FILTER_VALIDATE_EMAIL)) {\r\n                    if (!hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $val)) {\r\n                      $_SESSION['return'][] = array(\r\n                        'type' => 'danger',\r\n                        'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                        'msg' => array('sender_acl_invalid', $sender_acl_domain_admin[$key])\r\n                      );\r\n                      unset($sender_acl_domain_admin[$key]);\r\n                      continue;\r\n                    }\r\n                  }\r\n                }\r\n                // Merge both arrays\r\n                $sender_acl_merged = array_merge($sender_acl_domain_admin, $sender_acl_admin);\r\n                // If merged array still contains \"*\", set it as only value\r\n                !in_array('*', $sender_acl_merged) ?: $sender_acl_merged = array('*');\r\n                $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `external` = 0 AND `logged_in_as` = :username\");\r\n                $stmt->execute(array(\r\n                  ':username' => $username\r\n                ));\r\n                $sender_acl_handles = mailbox('get', 'sender_acl_handles', $username);\r\n                $fixed_sender_aliases_allowed = $sender_acl_handles['fixed_sender_aliases_allowed'];\r\n                $fixed_sender_aliases_blocked = $sender_acl_handles['fixed_sender_aliases_blocked'];\r\n\r\n                foreach ($sender_acl_merged as $sender_acl) {\r\n                  $domain = ltrim($sender_acl, '@');\r\n                  if (is_valid_domain_name($domain)) {\r\n                    $sender_acl = '@' . $domain;\r\n                  }\r\n\r\n                  // Always add to sender_acl table to create explicit permission\r\n                  // Skip only if it's in allowed list (would be redundant)\r\n                  // But DO add if it's in blocked list (creates override)\r\n                  if (in_array($sender_acl, $fixed_sender_aliases_allowed)) {\r\n                    // Skip: already allowed by sender_allowed=1, no need for sender_acl entry\r\n                    continue;\r\n                  }\r\n\r\n                  // Add to sender_acl (either override for blocked aliases, or grant for selectable ones)\r\n                  $stmt = $pdo->prepare(\"INSERT INTO `sender_acl` (`send_as`, `logged_in_as`)\r\n                    VALUES (:sender_acl, :username)\");\r\n                  $stmt->execute(array(\r\n                    ':sender_acl' => $sender_acl,\r\n                    ':username' => $username\r\n                  ));\r\n                }\r\n              }\r\n              else {\r\n                $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `external` = 0 AND `logged_in_as` = :username\");\r\n                $stmt->execute(array(\r\n                  ':username' => $username\r\n                ));\r\n              }\r\n            }\r\n            if (!empty($password)) {\r\n              if (password_check($password, $password2) !== true) {\r\n                continue;\r\n              }\r\n              $password_hashed = hash_password($password);\r\n              $stmt = $pdo->prepare(\"UPDATE `mailbox` SET\r\n                  `password` = :password_hashed,\r\n                  `attributes` = JSON_SET(`attributes`, '$.passwd_update', NOW())\r\n                    WHERE `username` = :username AND authsource = 'mailcow'\");\r\n              $stmt->execute(array(\r\n                ':password_hashed' => $password_hashed,\r\n                ':username' => $username\r\n              ));\r\n            }\r\n            // We could either set alias = 1 if alias = 2 or tune the Postfix alias table (that's what we did, TODO: do it the other way)\r\n            $stmt = $pdo->prepare(\"UPDATE `alias` SET\r\n                `active` = :active\r\n                  WHERE `address` = :address\");\r\n            $stmt->execute(array(\r\n              ':address' => $username,\r\n              ':active' => $active\r\n            ));\r\n            try {\r\n              $stmt = $pdo->prepare(\"UPDATE `mailbox` SET\r\n                  `active` = :active,\r\n                  `name`= :name,\r\n                  `quota` = :quota_b,\r\n                  `authsource` = :authsource,\r\n                  `attributes` = JSON_SET(`attributes`, '$.force_pw_update', :force_pw_update),\r\n                  `attributes` = JSON_SET(`attributes`, '$.force_tfa', :force_tfa),\r\n                  `attributes` = JSON_SET(`attributes`, '$.sogo_access', :sogo_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.imap_access', :imap_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.sieve_access', :sieve_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.pop3_access', :pop3_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.relayhost', :relayhost),\r\n                  `attributes` = JSON_SET(`attributes`, '$.smtp_access', :smtp_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.eas_access', :eas_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.dav_access', :dav_access),\r\n                  `attributes` = JSON_SET(`attributes`, '$.recovery_email', :recovery_email),\r\n                  `attributes` = JSON_SET(`attributes`, '$.attribute_hash', :attribute_hash)\r\n                    WHERE `username` = :username\");\r\n              $stmt->execute(array(\r\n                ':active' => $active,\r\n                ':name' => $name,\r\n                ':quota_b' => $quota_b,\r\n                ':attribute_hash' => $attribute_hash,\r\n                ':force_pw_update' => $force_pw_update,\r\n                ':force_tfa' => $force_tfa,\r\n                ':sogo_access' => $sogo_access,\r\n                ':imap_access' => $imap_access,\r\n                ':pop3_access' => $pop3_access,\r\n                ':sieve_access' => $sieve_access,\r\n                ':smtp_access' => $smtp_access,\r\n                ':eas_access' => $eas_access,\r\n                ':dav_access' => $dav_access,\r\n                ':recovery_email' => $pw_recovery_email,\r\n                ':relayhost' => $relayhost,\r\n                ':username' => $username,\r\n                ':authsource' => $authsource\r\n              ));\r\n            }\r\n            catch (PDOException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => $e->getMessage()\r\n              );\r\n              return false;\r\n            }\r\n            // save delimiter_action\r\n            if (isset($_data['tagged_mail_handler'])) {\r\n              mailbox('edit', 'delimiter_action', array(\r\n                'username' => $username,\r\n                'tagged_mail_handler' => $_data['tagged_mail_handler']\r\n              ));\r\n            }\r\n            // save tags\r\n            foreach($tags as $index => $tag){\r\n              if (empty($tag)) continue;\r\n              if ($index > $GLOBALS['TAGGING_LIMIT']) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('tag_limit_exceeded', 'limit '.$GLOBALS['TAGGING_LIMIT'])\r\n                );\r\n                break;\r\n              }\r\n              try {\r\n                $stmt = $pdo->prepare(\"INSERT INTO `tags_mailbox` (`username`, `tag_name`) VALUES (:username, :tag_name)\");\r\n                $stmt->execute(array(\r\n                  ':username' => $username,\r\n                  ':tag_name' => $tag,\r\n                ));\r\n              } catch (Exception $e) {\r\n              }\r\n            }\r\n\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $username)\r\n            );\r\n\r\n            // Track affected mailboxes for SOGo update\r\n            $update_sogo_mailboxes[] = $username;\r\n          }\r\n          return true;\r\n        break;\r\n        case 'mailbox_rename':\r\n          $domain = $_data['domain'];\r\n          $old_local_part = $_data['old_local_part'];\r\n          $old_username = $old_local_part . \"@\" . $domain;\r\n          $new_local_part = $_data['new_local_part'];\r\n          $new_username = $new_local_part . \"@\" . $domain;\r\n          $create_alias = intval($_data['create_alias']);\r\n\r\n          if (!filter_var($old_username, FILTER_VALIDATE_EMAIL)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('username_invalid', $old_username)\r\n            );\r\n            return false;\r\n          }\r\n          if (!filter_var($new_username, FILTER_VALIDATE_EMAIL)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('username_invalid', $new_username)\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $is_now = mailbox('get', 'mailbox_details', $old_username);\r\n          if (empty($is_now) || ($is_now['active'] != '1' && $is_now['active'] != '2')) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $is_now['domain'])) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          // get imap acls\r\n          try {\r\n            $exec_fields = array(\r\n              'cmd' => 'doveadm',\r\n              'task' => 'get_acl',\r\n              'id' => $old_username\r\n            );\r\n            $imap_acls = json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true);\r\n            // delete imap acls\r\n            foreach ($imap_acls as $imap_acl) {\r\n              $exec_fields = array(\r\n                'cmd' => 'doveadm',\r\n                'task' => 'delete_acl',\r\n                'user' => $imap_acl['user'],\r\n                'mailbox' => $imap_acl['mailbox'],\r\n                'id' => $imap_acl['id']\r\n              );\r\n              docker('post', 'dovecot-mailcow', 'exec', $exec_fields);\r\n            }\r\n          } catch (Exception $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => $e->getMessage()\r\n            );\r\n            return false;\r\n          }\r\n\r\n          // rename username in sql\r\n          try {\r\n            $pdo->beginTransaction();\r\n            $pdo->exec('SET FOREIGN_KEY_CHECKS = 0');\r\n\r\n            // Update username in mailbox table\r\n            $pdo->prepare('UPDATE mailbox SET username = :new_username, local_part = :new_local_part WHERE username = :old_username')\r\n              ->execute([\r\n                ':new_username' => $new_username,\r\n                ':new_local_part' => $new_local_part,\r\n                ':old_username' => $old_username\r\n              ]);\r\n\r\n            $pdo->prepare(\"UPDATE alias SET address = :new_username, goto = :new_username2 WHERE address = :old_username\")\r\n            ->execute([\r\n              ':new_username' => $new_username,\r\n              ':new_username2' => $new_username,\r\n              ':old_username' => $old_username\r\n            ]);\r\n\r\n            // Update the username in all related tables\r\n            $tables = [\r\n              'tags_mailbox' => ['username'],\r\n              'sieve_filters' => ['username'],\r\n              'app_passwd' => ['mailbox'],\r\n              'user_acl' => ['username'],\r\n              'da_acl' => ['username'],\r\n              'quota2' => ['username'],\r\n              'quota2replica' => ['username'],\r\n              'pushover' => ['username'],\r\n              'alias' => ['goto'],\r\n              \"imapsync\" => ['user2'],\r\n              'bcc_maps' => ['local_dest', 'bcc_dest'],\r\n              'recipient_maps' => ['old_dest', 'new_dest'],\r\n              'sender_acl' => ['logged_in_as', 'send_as']\r\n            ];\r\n            foreach ($tables as $table => $columns) {\r\n              foreach ($columns as $column) {\r\n                $stmt = $pdo->prepare(\"UPDATE $table SET $column = :new_username WHERE $column = :old_username\")\r\n                  ->execute([\r\n                    ':new_username' => $new_username,\r\n                    ':old_username' => $old_username\r\n                  ]);\r\n              }\r\n            }\r\n\r\n            // Update c_uid, c_name and mail in _sogo_static_view table\r\n            $pdo->prepare(\"UPDATE _sogo_static_view SET c_uid = :new_username, c_name = :new_username2, mail = :new_username3 WHERE c_uid = :old_username\")\r\n              ->execute([\r\n                ':new_username' => $new_username,\r\n                ':new_username2' => $new_username,\r\n                ':new_username3' => $new_username,\r\n                ':old_username' => $old_username\r\n              ]);\r\n\r\n            // Re-enable foreign key checks\r\n            $pdo->exec('SET FOREIGN_KEY_CHECKS = 1');\r\n            $pdo->commit();\r\n          } catch (PDOException $e) {\r\n            // Rollback the transaction if something goes wrong\r\n            $pdo->rollBack();\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => $e->getMessage()\r\n            );\r\n            return false;\r\n          }\r\n\r\n          // move maildir\r\n          $exec_fields = array(\r\n            'cmd' => 'maildir',\r\n            'task' => 'move',\r\n            'old_maildir' => $domain . '/' . $old_local_part,\r\n            'new_maildir' => $domain . '/' . $new_local_part\r\n          );\r\n          if (getenv(\"CLUSTERMODE\") == \"replication\") {\r\n            // broadcast to each dovecot container\r\n            docker('broadcast', 'dovecot-mailcow', 'exec', $exec_fields);\r\n          } else {\r\n            docker('post', 'dovecot-mailcow', 'exec', $exec_fields);\r\n          }\r\n\r\n          // rename username in sogo\r\n          $exec_fields = array(\r\n            'cmd' => 'sogo',\r\n            'task' => 'rename_user',\r\n            'old_username' => $old_username,\r\n            'new_username' => $new_username\r\n          );\r\n          docker('post', 'sogo-mailcow', 'exec', $exec_fields);\r\n\r\n          // set imap acls\r\n          foreach ($imap_acls as $imap_acl) {\r\n            $user_id = ($imap_acl['id'] == $old_username) ? $new_username : $imap_acl['id'];\r\n            $user = ($imap_acl['user'] == $old_username) ? $new_username : $imap_acl['user'];\r\n            $exec_fields = array(\r\n              'cmd' => 'doveadm',\r\n              'task' => 'set_acl',\r\n              'user' => $user,\r\n              'mailbox' => $imap_acl['mailbox'],\r\n              'id' => $user_id,\r\n              'rights' => $imap_acl['rights']\r\n            );\r\n            docker('post', 'dovecot-mailcow', 'exec', $exec_fields);\r\n          }\r\n\r\n          // create alias\r\n          if ($create_alias == 1) {\r\n            mailbox(\"add\", \"alias\", array(\r\n              \"address\" => $old_username,\r\n              \"goto\" => $new_username,\r\n              \"active\" => 1,\r\n              \"sogo_visible\" => 1,\r\n              \"private_comment\" => sprintf($lang['success']['mailbox_renamed'], $old_username, $new_username)\r\n            ));\r\n          }\r\n\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('mailbox_renamed', $old_username, $new_username)\r\n          );\r\n        break;\r\n        case 'mailbox_from_template':\r\n          $stmt = $pdo->prepare(\"SELECT * FROM `templates`\r\n          WHERE `template` = :template AND type = 'mailbox'\");\r\n          $stmt->execute(array(\r\n            \":template\" => $_data['template']\r\n          ));\r\n          $mbox_template_data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (empty($mbox_template_data)){\r\n            $_SESSION['return'][] =  array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'template_missing'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $attribute_hash = sha1(json_encode($mbox_template_data[\"attributes\"]));\r\n          $is_now = mailbox('get', 'mailbox_details', $_data['username']);\r\n          $name = ltrim(rtrim($_data['name'], '>'), '<');\r\n          if ($is_now['attributes']['attribute_hash'] == $attribute_hash && $is_now['name'] == $name)\r\n            return true;\r\n\r\n          $mbox_template_data = json_decode($mbox_template_data[\"attributes\"], true);\r\n          $mbox_template_data['attribute_hash'] = $attribute_hash;\r\n          $mbox_template_data['name'] = $name;\r\n          $quarantine_attributes = array('username' => $_data['username']);\r\n          $tls_attributes = array('username' => $_data['username']);\r\n          $ratelimit_attributes = array('object' => $_data['username']);\r\n          $acl_attributes = array('username' => $_data['username'], 'user_acl' => array());\r\n          $mailbox_attributes = array('username' => $_data['username']);\r\n          foreach ($mbox_template_data as $key => $value){\r\n            switch (true) {\r\n              case (strpos($key, 'quarantine_') === 0):\r\n                $quarantine_attributes[$key] = $value;\r\n              break;\r\n              case (strpos($key, 'tls_') === 0):\r\n                if ($value == null)\r\n                  $value = 0;\r\n                $tls_attributes[$key] = $value;\r\n              break;\r\n              case (strpos($key, 'rl_') === 0):\r\n                $ratelimit_attributes[$key] = $value;\r\n              break;\r\n              case (strpos($key, 'acl_') === 0 && $value != 0):\r\n                array_push($acl_attributes['user_acl'], str_replace('acl_' , '', $key));\r\n              break;\r\n              default:\r\n                $mailbox_attributes[$key] = $value;\r\n              break;\r\n            }\r\n          }\r\n\r\n          $mailbox_attributes['quota'] = intval($mailbox_attributes['quota'] / 1048576);\r\n          $result = mailbox('edit', 'mailbox', $mailbox_attributes);\r\n          if ($result === false) return $result;\r\n          $result = mailbox('edit', 'tls_policy', $tls_attributes);\r\n          if ($result === false) return $result;\r\n          $result = mailbox('edit', 'quarantine_notification', $quarantine_attributes);\r\n          if ($result === false) return $result;\r\n          $result = mailbox('edit', 'quarantine_category', $quarantine_attributes);\r\n          if ($result === false) return $result;\r\n          $result = ratelimit('edit', 'mailbox', $ratelimit_attributes);\r\n          if ($result === false) return $result;\r\n          $result = acl('edit', 'user', $acl_attributes);\r\n          if ($result === false) return $result;\r\n\r\n          $_SESSION['return'] = array();\r\n          return true;\r\n        break;\r\n        case 'mailbox_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_array($_data['ids'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['ids'];\r\n          }\r\n          else {\r\n            $ids = $_data['ids'];\r\n          }\r\n          foreach ($ids as $id) {\r\n            $is_now = mailbox(\"get\", \"mailbox_templates\", $id);\r\n            if (empty($is_now) ||\r\n                $is_now[\"type\"] != \"mailbox\"){\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_extra),\r\n                'msg' => 'template_id_invalid'\r\n              );\r\n              continue;\r\n            }\r\n\r\n\r\n            // check name\r\n            if ($is_now[\"template\"] == \"Default\" && $is_now[\"template\"] != $_data[\"template\"]){\r\n              // keep template name of Default template\r\n              $_data[\"template\"]                   = $is_now[\"template\"];\r\n            }\r\n            else {\r\n              $_data[\"template\"]                   = (isset($_data[\"template\"])) ? $_data[\"template\"] : $is_now[\"template\"];\r\n            }\r\n            // check attributes\r\n            $attr = array();\r\n            $attr[\"quota\"]                       = isset($_data['quota']) ? intval($_data['quota']) * 1048576 : 0;\r\n            $attr['tags']                        = (isset($_data['tags'])) ? $_data['tags'] : $is_now['tags'];\r\n            $attr[\"tagged_mail_handler\"]         = (!empty($_data['tagged_mail_handler'])) ? $_data['tagged_mail_handler'] : $is_now['tagged_mail_handler'];\r\n            $attr[\"quarantine_notification\"]     = (!empty($_data['quarantine_notification'])) ? $_data['quarantine_notification'] : $is_now['quarantine_notification'];\r\n            $attr[\"quarantine_category\"]         = (!empty($_data['quarantine_category'])) ? $_data['quarantine_category'] : $is_now['quarantine_category'];\r\n            $attr[\"rl_frame\"]                    = (!empty($_data['rl_frame'])) ? $_data['rl_frame'] : $is_now['rl_frame'];\r\n            $attr[\"rl_value\"]                    = (!empty($_data['rl_value'])) ? $_data['rl_value'] : $is_now['rl_value'];\r\n            $attr[\"force_pw_update\"]             = isset($_data['force_pw_update']) ? intval($_data['force_pw_update']) : $is_now['force_pw_update'];\r\n            $attr[\"sogo_access\"]                 = isset($_data['sogo_access']) ? intval($_data['sogo_access']) : $is_now['sogo_access'];\r\n            $attr[\"active\"]                      = isset($_data['active']) ? intval($_data['active']) : $is_now['active'];\r\n            $attr[\"tls_enforce_in\"]              = isset($_data['tls_enforce_in']) ? intval($_data['tls_enforce_in']) : $is_now['tls_enforce_in'];\r\n            $attr[\"tls_enforce_out\"]             = isset($_data['tls_enforce_out']) ? intval($_data['tls_enforce_out']) : $is_now['tls_enforce_out'];\r\n            if (isset($_data['protocol_access'])) {\r\n              $_data['protocol_access'] = (array)$_data['protocol_access'];\r\n              $attr['imap_access'] = (in_array('imap', $_data['protocol_access'])) ? 1 : 0;\r\n              $attr['pop3_access'] = (in_array('pop3', $_data['protocol_access'])) ? 1 : 0;\r\n              $attr['smtp_access'] = (in_array('smtp', $_data['protocol_access'])) ? 1 : 0;\r\n              $attr['sieve_access'] = (in_array('sieve', $_data['protocol_access'])) ? 1 : 0;\r\n              $attr['eas_access'] = (in_array('eas', $_data['protocol_access'])) ? 1 : 0;\r\n              $attr['dav_access'] = (in_array('dav', $_data['protocol_access'])) ? 1 : 0;\r\n            }\r\n            else {\r\n              foreach ($is_now as $key => $value){\r\n                $attr[$key] = $is_now[$key];\r\n              }\r\n            }\r\n            if (isset($_data['acl'])) {\r\n              $_data['acl'] = (array)$_data['acl'];\r\n              $attr['acl_spam_alias'] = (in_array('spam_alias', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_tls_policy'] = (in_array('tls_policy', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_spam_score'] = (in_array('spam_score', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_spam_policy'] = (in_array('spam_policy', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_delimiter_action'] = (in_array('delimiter_action', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_syncjobs'] = (in_array('syncjobs', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_eas_reset'] = (in_array('eas_reset', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_sogo_profile_reset'] = (in_array('sogo_profile_reset', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_pushover'] = (in_array('pushover', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_quarantine'] = (in_array('quarantine', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_quarantine_attachments'] = (in_array('quarantine_attachments', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_quarantine_notification'] = (in_array('quarantine_notification', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_quarantine_category'] = (in_array('quarantine_category', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_app_passwds'] = (in_array('app_passwds', $_data['acl'])) ? 1 : 0;\r\n              $attr['acl_pw_reset'] = (in_array('pw_reset', $_data['acl'])) ? 1 : 0;\r\n            } else {\r\n              foreach ($is_now as $key => $value){\r\n                $attr[$key] = $is_now[$key];\r\n              }\r\n            }\r\n\r\n\r\n            // update template\r\n            $stmt = $pdo->prepare(\"UPDATE `templates`\r\n              SET `template` = :template, `attributes` = :attributes\r\n              WHERE id = :id\");\r\n            $stmt->execute(array(\r\n              \":id\" => $id ,\r\n              \":template\" => $_data[\"template\"] ,\r\n              \":attributes\" => json_encode($attr)\r\n            ));\r\n          }\r\n\r\n\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('template_modified', $_data[\"template\"])\r\n          );\r\n          return true;\r\n        break;\r\n        case 'mailbox_custom_attribute':\r\n          $_data['attribute'] = isset($_data['attribute']) ? $_data['attribute'] : array();\r\n          $_data['attribute'] = is_array($_data['attribute']) ? $_data['attribute'] : array($_data['attribute']);\r\n          $_data['attribute'] = array_map(function($value) { return str_replace(' ', '', $value); }, $_data['attribute']);\r\n          $_data['value']     = isset($_data['value']) ? $_data['value'] : array();\r\n          $_data['value']     = is_array($_data['value']) ? $_data['value'] : array($_data['value']);\r\n          $attributes         = (object)array_combine($_data['attribute'], $_data['value']);\r\n          $mailboxes          = is_array($_data['mailboxes']) ? $_data['mailboxes'] : array($_data['mailboxes']);\r\n\r\n          foreach ($mailboxes as $mailbox) {\r\n            if (!filter_var($mailbox, FILTER_VALIDATE_EMAIL)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('username_invalid', $mailbox)\r\n              );\r\n              continue;\r\n            }\r\n            $is_now = mailbox('get', 'mailbox_details', $mailbox);\r\n            if(!empty($is_now)){\r\n              if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $is_now['domain'])) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => 'access_denied'\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n\r\n\r\n            $stmt = $pdo->prepare(\"UPDATE `mailbox`\r\n              SET `custom_attributes` = :custom_attributes\r\n              WHERE username = :username\");\r\n            $stmt->execute(array(\r\n              \":username\" => $mailbox,\r\n              \":custom_attributes\" => json_encode($attributes)\r\n            ));\r\n\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', $mailbox)\r\n            );\r\n          }\r\n\r\n          return true;\r\n        break;\r\n        case 'mta_sts':\r\n          if (!is_array($_data['domains'])) {\r\n            $domains = array();\r\n            $domains[] = $_data['domains'];\r\n          }\r\n          else {\r\n            $domains = $_data['domains'];\r\n          }\r\n\r\n          foreach ($domains as $domain) {\r\n            $domain       = idn_to_ascii(strtolower(trim($domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            $is_now = mailbox('get', 'mta_sts', $domain);\r\n            if (!empty($is_now)) {\r\n              $version               = (isset($_data['version'])) ? strtolower($_data['version']) : $is_now['version'];\r\n              $active                = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              $active                = ($active == 1) ? 1 : 0;\r\n              $mode                  = (isset($_data['mode'])) ? strtolower($_data['mode']) : $is_now['mode'];\r\n              $mx                    = (isset($_data['mx'])) ? explode(\",\", preg_replace('/\\s+/', '', $_data['mx'])) : $is_now['mx'];\r\n              $max_age               = (isset($_data['max_age'])) ? intval($_data['max_age']) : $is_now['max_age'];\r\n\r\n              // Update ID if neccesary\r\n              if ($version != strtolower($is_now['version']) ||\r\n                  $mode != strtolower($is_now['mode']) ||\r\n                  $mx != $is_now['mx'] ||\r\n                  $max_age != $is_now['max_age']) {\r\n                $id           = date('YmdHis');\r\n              } else {\r\n                $id           = $is_now['id'];\r\n              }\r\n\r\n            } else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            if (empty($version) || !in_array($version, array('stsv1'))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n                'msg' => array('version_invalid', htmlspecialchars($version))\r\n              );\r\n              continue;\r\n            }\r\n            if (empty($mode) || !in_array($mode, array('enforce', 'testing', 'none'))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n                'msg' => array('mode_invalid', htmlspecialchars($domain))\r\n              );\r\n              continue;\r\n            }\r\n            if (empty($max_age) || $max_age < 0 || $max_age > 31557600) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n                'msg' => array('max_age_invalid', htmlspecialchars($domain))\r\n              );\r\n              continue;\r\n            }\r\n            foreach ($mx as $index => $mx_domain) {\r\n              $mx_domain = idn_to_ascii(strtolower(trim($mx_domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n              $invalid_mx = false;\r\n              if (!is_valid_domain_name($mx_domain, array('allow_wildcard' => true))) {\r\n                $invalid_mx = $mx_domain;\r\n                break;\r\n              }\r\n            }\r\n            if ($invalid_mx) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n                'msg' => array('mx_invalid', htmlspecialchars($invalid_mx))\r\n              );\r\n              continue;\r\n            }\r\n\r\n            try {\r\n              $stmt = $pdo->prepare(\"UPDATE `mta_sts` SET `id` = :id, `version` = :version, `mode` = :mode, `mx` = :mx, `max_age` = :max_age, `active` = :active WHERE `domain` = :domain\");\r\n              $stmt->execute(array(\r\n                ':id' => $id,\r\n                ':domain' => $domain,\r\n                ':version' => $version,\r\n                ':mode' => $mode,\r\n                ':mx' => implode(\",\", $mx),\r\n                ':max_age' => $max_age,\r\n                ':active' => $active\r\n              ));\r\n            } catch (PDOException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => $e->getMessage()\r\n              );\r\n              continue;\r\n            }\r\n\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data, $_attr),\r\n              'msg' => array('object_modified', $domain)\r\n            );\r\n          }\r\n\r\n          return true;\r\n        break;\r\n        case 'resource':\r\n          if (!is_array($_data['name'])) {\r\n            $names = array();\r\n            $names[] = $_data['name'];\r\n          }\r\n          else {\r\n            $names = $_data['name'];\r\n          }\r\n          foreach ($names as $name) {\r\n            $is_now = mailbox('get', 'resource_details', $name);\r\n            if (!empty($is_now)) {\r\n              $active             = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n              $multiple_bookings  = (isset($_data['multiple_bookings'])) ? intval($_data['multiple_bookings']) : $is_now['multiple_bookings'];\r\n              $description        = (!empty($_data['description'])) ? $_data['description'] : $is_now['description'];\r\n              $kind               = (!empty($_data['kind'])) ? $_data['kind'] : $is_now['kind'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('resource_invalid', htmlspecialchars($name))\r\n              );\r\n              continue;\r\n            }\r\n            if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('resource_invalid', htmlspecialchars($name))\r\n              );\r\n              continue;\r\n            }\r\n            if (!isset($multiple_bookings) || $multiple_bookings < -1) {\r\n              $multiple_bookings = -1;\r\n            }\r\n            if (empty($description)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('description_invalid', htmlspecialchars($name))\r\n              );\r\n              continue;\r\n            }\r\n            if ($kind != 'location' && $kind != 'group' && $kind != 'thing') {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('resource_invalid', htmlspecialchars($name))\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $name)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `mailbox` SET\r\n                `active` = :active,\r\n                `name`= :description,\r\n                `kind`= :kind,\r\n                `multiple_bookings`= :multiple_bookings\r\n                  WHERE `username` = :name\");\r\n            $stmt->execute(array(\r\n              ':active' => $active,\r\n              ':description' => $description,\r\n              ':multiple_bookings' => $multiple_bookings,\r\n              ':kind' => $kind,\r\n              ':name' => $name\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('resource_modified', htmlspecialchars($name))\r\n            );\r\n\r\n            // Track affected mailboxes for SOGo update\r\n            $update_sogo_mailboxes[] = $name;\r\n          }\r\n        break;\r\n        case 'domain_wide_footer':\r\n          if (!is_array($_data['domains'])) {\r\n            $domains = array();\r\n            $domains[] = $_data['domains'];\r\n          }\r\n          else {\r\n            $domains = $_data['domains'];\r\n          }\r\n\r\n          $footers = array();\r\n          $footers['html'] = isset($_data['html']) ? $_data['html'] : '';\r\n          $footers['plain'] = isset($_data['plain']) ? $_data['plain'] : '';\r\n          $footers['skip_replies'] = isset($_data['skip_replies']) ? (int)$_data['skip_replies'] : 0;\r\n          $footers['mbox_exclude'] = array();\r\n          $footers['alias_domain_exclude'] = array();\r\n          if (isset($_data[\"exclude\"])){\r\n            if (!is_array($_data[\"exclude\"])) {\r\n              $_data[\"exclude\"] = array($_data[\"exclude\"]);\r\n            }\r\n            foreach ($_data[\"exclude\"] as $exclude) {\r\n              if (filter_var($exclude, FILTER_VALIDATE_EMAIL)) {\r\n                $stmt = $pdo->prepare(\"SELECT `address` FROM `alias` WHERE `address` = :address\r\n                  UNION\r\n                  SELECT `username` FROM `mailbox` WHERE `username` = :username\");\r\n                $stmt->execute(array(\r\n                  ':address' => $exclude,\r\n                  ':username' => $exclude,\r\n                ));\r\n                $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n                if(!$row){\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => array('username_invalid', $exclude)\r\n                  );\r\n                  continue;\r\n                }\r\n                array_push($footers['mbox_exclude'], $exclude);\r\n              }\r\n              elseif (is_valid_domain_name($exclude)) {\r\n                $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain` WHERE `alias_domain` = :alias_domain\");\r\n                $stmt->execute(array(\r\n                  ':alias_domain' => $exclude,\r\n                ));\r\n                $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n                if(!$row){\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'danger',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => array('username_invalid', $exclude)\r\n                  );\r\n                  continue;\r\n                }\r\n                array_push($footers['alias_domain_exclude'], $exclude);\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                  'msg' => array('username_invalid', $exclude)\r\n                );\r\n              }\r\n            }\r\n          }\r\n          foreach ($domains as $domain) {\r\n            $domain = idn_to_ascii(strtolower(trim($domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n            if (!is_valid_domain_name($domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_invalid'\r\n              );\r\n              return false;\r\n            }\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n\r\n            try {\r\n              $stmt = $pdo->prepare(\"DELETE FROM `domain_wide_footer` WHERE `domain`= :domain\");\r\n              $stmt->execute(array(':domain' => $domain));\r\n              $stmt = $pdo->prepare(\"INSERT INTO `domain_wide_footer` (`domain`, `html`, `plain`, `mbox_exclude`, `alias_domain_exclude`, `skip_replies`) VALUES (:domain, :html, :plain, :mbox_exclude, :alias_domain_exclude, :skip_replies)\");\r\n              $stmt->execute(array(\r\n                ':domain' => $domain,\r\n                ':html' => $footers['html'],\r\n                ':plain' => $footers['plain'],\r\n                ':mbox_exclude' => json_encode($footers['mbox_exclude']),\r\n                ':alias_domain_exclude' => json_encode($footers['alias_domain_exclude']),\r\n                ':skip_replies' => $footers['skip_replies'],\r\n              ));\r\n            }\r\n            catch (PDOException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => $e->getMessage()\r\n              );\r\n              return false;\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('domain_footer_modified', htmlspecialchars($domain))\r\n            );\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'get':\r\n      switch ($_type) {\r\n        case 'sender_acl_handles':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\r\n            return false;\r\n          }\r\n          $data['sender_acl_domains']['ro']               = array();\r\n          $data['sender_acl_domains']['rw']               = array();\r\n          $data['sender_acl_domains']['selectable']       = array();\r\n          $data['sender_acl_addresses']['ro']             = array();\r\n          $data['sender_acl_addresses']['rw']             = array();\r\n          $data['sender_acl_addresses']['selectable']     = array();\r\n          $data['fixed_sender_aliases']                   = array();\r\n          $data['fixed_sender_aliases_allowed']           = array();\r\n          $data['fixed_sender_aliases_blocked']           = array();\r\n          $data['external_sender_aliases']                = array();\r\n          // Fixed addresses - split by sender_allowed status\r\n          $stmt = $pdo->prepare(\"SELECT `address`, `sender_allowed` FROM `alias` WHERE `goto` REGEXP :goto AND `address` NOT LIKE '@%'\");\r\n          $stmt->execute(array(':goto' => '(^|,)'.preg_quote($_data, '/').'($|,)'));\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($row = array_shift($rows)) {\r\n            // Keep old array for backward compatibility\r\n            $data['fixed_sender_aliases'][] = $row['address'];\r\n            // Split into allowed/blocked for proper display\r\n            if ($row['sender_allowed'] == '1') {\r\n              $data['fixed_sender_aliases_allowed'][] = $row['address'];\r\n            } else {\r\n              $data['fixed_sender_aliases_blocked'][] = $row['address'];\r\n            }\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT CONCAT(`local_part`, '@', `alias_domain`.`alias_domain`) AS `alias_domain_alias` FROM `mailbox`, `alias_domain`\r\n            WHERE `alias_domain`.`target_domain` = `mailbox`.`domain`\r\n            AND `mailbox`.`username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($row = array_shift($rows)) {\r\n            if (!empty($row['alias_domain_alias'])) {\r\n              $data['fixed_sender_aliases'][] = $row['alias_domain_alias'];\r\n            }\r\n          }\r\n          // External addresses\r\n          $stmt = $pdo->prepare(\"SELECT `send_as` as `send_as_external` FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as AND `external` = '1'\");\r\n          $stmt->execute(array(':logged_in_as' => $_data));\r\n          $exernal_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($row = array_shift($exernal_rows)) {\r\n            if (!empty($row['send_as_external'])) {\r\n              $data['external_sender_aliases'][] = $row['send_as_external'];\r\n            }\r\n          }\r\n          // Return array $data['sender_acl_domains/addresses']['ro'] with read-only objects\r\n          // Return array $data['sender_acl_domains/addresses']['rw'] with read-write objects (can be deleted)\r\n          $stmt = $pdo->prepare(\"SELECT REPLACE(`send_as`, '@', '') AS `send_as` FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as AND `external` = '0' AND (`send_as` LIKE '@%' OR `send_as` = '*')\");\r\n          $stmt->execute(array(':logged_in_as' => $_data));\r\n          $domain_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($domain_row = array_shift($domain_rows)) {\r\n            if (is_valid_domain_name($domain_row['send_as']) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain_row['send_as'])) {\r\n              $data['sender_acl_domains']['ro'][] = $domain_row['send_as'];\r\n              continue;\r\n            }\r\n            if (is_valid_domain_name($domain_row['send_as']) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain_row['send_as'])) {\r\n              $data['sender_acl_domains']['rw'][] = $domain_row['send_as'];\r\n              continue;\r\n            }\r\n            if ($domain_row['send_as'] == '*' && $_SESSION['mailcow_cc_role'] != 'admin') {\r\n              $data['sender_acl_domains']['ro'][] = $domain_row['send_as'];\r\n            }\r\n            if ($domain_row['send_as'] == '*' && $_SESSION['mailcow_cc_role'] == 'admin') {\r\n              $data['sender_acl_domains']['rw'][] = $domain_row['send_as'];\r\n            }\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `send_as` FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as AND `external` = '0' AND (`send_as` NOT LIKE '@%' AND `send_as` != '*')\");\r\n          $stmt->execute(array(':logged_in_as' => $_data));\r\n          $address_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($address_row = array_shift($address_rows)) {\r\n            if (filter_var($address_row['send_as'], FILTER_VALIDATE_EMAIL) && !hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $address_row['send_as'])) {\r\n              $data['sender_acl_addresses']['ro'][] = $address_row['send_as'];\r\n              continue;\r\n            }\r\n            if (filter_var($address_row['send_as'], FILTER_VALIDATE_EMAIL) && hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $address_row['send_as'])) {\r\n              $data['sender_acl_addresses']['rw'][] = $address_row['send_as'];\r\n              continue;\r\n            }\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n            WHERE `domain` NOT IN (\r\n              SELECT REPLACE(`send_as`, '@', '') FROM `sender_acl`\r\n                WHERE `logged_in_as` = :logged_in_as1\r\n                  AND `external` = '0'\r\n                  AND `send_as` LIKE '@%')\r\n            UNION\r\n            SELECT '*' FROM `domain`\r\n              WHERE '*' NOT IN (\r\n                SELECT `send_as` FROM `sender_acl`\r\n                  WHERE `logged_in_as` = :logged_in_as2\r\n                    AND `external` = '0'\r\n              )\");\r\n          $stmt->execute(array(\r\n            ':logged_in_as1' => $_data,\r\n            ':logged_in_as2' => $_data\r\n          ));\r\n          $rows_domain = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($row_domain = array_shift($rows_domain)) {\r\n            if (is_valid_domain_name($row_domain['domain']) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row_domain['domain'])) {\r\n              $data['sender_acl_domains']['selectable'][] = $row_domain['domain'];\r\n              continue;\r\n            }\r\n            if ($row_domain['domain'] == '*' && $_SESSION['mailcow_cc_role'] == 'admin') {\r\n              $data['sender_acl_domains']['selectable'][] = $row_domain['domain'];\r\n              continue;\r\n            }\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `address` FROM `alias`\r\n            WHERE `goto` != :goto\r\n              AND `address` NOT IN (\r\n                SELECT `send_as` FROM `sender_acl`\r\n                  WHERE `logged_in_as` = :logged_in_as\r\n                    AND `external` = '0'\r\n                    AND `send_as` NOT LIKE '@%')\");\r\n          $stmt->execute(array(\r\n            ':logged_in_as' => $_data,\r\n            ':goto' => $_data\r\n          ));\r\n          $rows_mbox = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($row = array_shift($rows_mbox)) {\r\n            // Aliases are not selectable\r\n            if (in_array($row['address'], $data['fixed_sender_aliases'])) {\r\n              continue;\r\n            }\r\n            if (filter_var($row['address'], FILTER_VALIDATE_EMAIL) && hasAliasObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['address'])) {\r\n              $data['sender_acl_addresses']['selectable'][] = $row['address'];\r\n            }\r\n          }\r\n          return $data;\r\n        break;\r\n        case 'mailboxes':\r\n          $mailboxes = array();\r\n          if (isset($_extra) && is_array($_extra) && isset($_data)) {\r\n            // get by domain and tags\r\n            $tags = is_array($_extra) ? $_extra : array();\r\n\r\n            $sql = \"\";\r\n            foreach ($tags as $key => $tag) {\r\n              $sql = $sql.\"SELECT DISTINCT `username` FROM `tags_mailbox` WHERE `username` LIKE ? AND `tag_name` LIKE ?\"; // distinct, avoid duplicates\r\n              if ($key === array_key_last($tags)) break;\r\n              $sql = $sql.' UNION DISTINCT '; // combine querys with union - distinct, avoid duplicates\r\n            }\r\n\r\n            // prepend domain to array\r\n            $params = array();\r\n            foreach ($tags as $key => $val){\r\n              array_push($params, '%'.$_data.'%');\r\n              array_push($params, '%'.$val.'%');\r\n            }\r\n            $stmt = $pdo->prepare($sql);\r\n            $stmt->execute($params);\r\n\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], explode('@', $row['username'])[1]))\r\n                $mailboxes[] = $row['username'];\r\n            }\r\n          }\r\n          elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            // get by domain\r\n            $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE (`kind` = '' OR `kind` = NULL) AND `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $_data,\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $mailboxes[] = $row['username'];\r\n            }\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE (`kind` = '' OR `kind` = NULL) AND (`domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role)\");\r\n            $stmt->execute(array(\r\n              ':username' => $_SESSION['mailcow_cc_username'],\r\n              ':role' => $_SESSION['mailcow_cc_role'],\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $mailboxes[] = $row['username'];\r\n            }\r\n          }\r\n          return $mailboxes;\r\n        break;\r\n        case 'tls_policy':\r\n          $attrs = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `attributes` FROM `mailbox` WHERE `username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $attrs = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $attrs = json_decode($attrs['attributes'], true);\r\n          return array(\r\n            'tls_enforce_in' => $attrs['tls_enforce_in'],\r\n            'tls_enforce_out' => $attrs['tls_enforce_out']\r\n          );\r\n        break;\r\n        case 'quarantine_notification':\r\n          $attrs = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `attributes` FROM `mailbox` WHERE `username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $attrs = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $attrs = json_decode($attrs['attributes'], true);\r\n          return $attrs['quarantine_notification'];\r\n        break;\r\n        case 'quarantine_category':\r\n          $attrs = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `attributes` FROM `mailbox` WHERE `username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $attrs = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $attrs = json_decode($attrs['attributes'], true);\r\n          return $attrs['quarantine_category'];\r\n        break;\r\n        case 'filters':\r\n          $filters = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `id` FROM `sieve_filters` WHERE `username` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while($row = array_shift($rows)) {\r\n            $filters[] = $row['id'];\r\n          }\r\n          return $filters;\r\n        break;\r\n        case 'global_filter_details':\r\n          $global_filters = array();\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            return false;\r\n          }\r\n          $global_filters['prefilter'] = file_get_contents('/global_sieve/before');\r\n          $global_filters['postfilter'] = file_get_contents('/global_sieve/after');\r\n          return $global_filters;\r\n        break;\r\n        case 'filter_details':\r\n          $filter_details = array();\r\n          if (!is_numeric($_data)) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT CASE `script_name` WHEN 'active' THEN 1 ELSE 0 END AS `active`,\r\n            id,\r\n            username,\r\n            filter_type,\r\n            script_data,\r\n            script_desc\r\n            FROM `sieve_filters`\r\n              WHERE `id` = :id\");\r\n          $stmt->execute(array(':id' => $_data));\r\n          $filter_details = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $filter_details['username'])) {\r\n            return false;\r\n          }\r\n          return $filter_details;\r\n        break;\r\n        case 'active_user_sieve':\r\n          $filter_details = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $exec_fields = array(\r\n            'cmd' => 'sieve',\r\n            'task' => 'list',\r\n            'username' => $_data\r\n          );\r\n          $filters = docker('post', 'dovecot-mailcow', 'exec', $exec_fields);\r\n          $filters = array_filter(preg_split(\"/(\\r\\n|\\n|\\r)/\",$filters));\r\n          foreach ($filters as $filter) {\r\n            if (preg_match('/.+ ACTIVE/i', $filter)) {\r\n              $exec_fields = array(\r\n                'cmd' => 'sieve',\r\n                'task' => 'print',\r\n                'script_name' => substr($filter, 0, -7),\r\n                'username' => $_data\r\n              );\r\n              $script = docker('post', 'dovecot-mailcow', 'exec', $exec_fields);\r\n              // Remove first line\r\n              return preg_replace('/^.+\\n/', '', $script);\r\n            }\r\n          }\r\n          return false;\r\n        break;\r\n        case 'syncjob_details':\r\n          $syncjobdetails = array();\r\n          if (!is_numeric($_data)) {\r\n            return false;\r\n          }\r\n          if (isset($_extra) && in_array('no_log', $_extra)) {\r\n            $field_query = $pdo->query('SHOW FIELDS FROM `imapsync` WHERE FIELD NOT IN (\"returned_text\", \"password1\")');\r\n            $fields = $field_query->fetchAll(PDO::FETCH_ASSOC);\r\n            while($field = array_shift($fields)) {\r\n              $shown_fields[] = $field['Field'];\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT \" . implode(',', (array)$shown_fields) . \",\r\n              `active`\r\n                FROM `imapsync` WHERE id = :id\");\r\n          }\r\n          elseif (isset($_extra) && in_array('with_password', $_extra)) {\r\n            $stmt = $pdo->prepare(\"SELECT *,\r\n              `active`\r\n                FROM `imapsync` WHERE id = :id\");\r\n          }\r\n          else {\r\n            $field_query = $pdo->query('SHOW FIELDS FROM `imapsync` WHERE FIELD NOT IN (\"password1\")');\r\n            $fields = $field_query->fetchAll(PDO::FETCH_ASSOC);\r\n            while($field = array_shift($fields)) {\r\n              $shown_fields[] = $field['Field'];\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT \" . implode(',', (array)$shown_fields) . \",\r\n              `active`\r\n                FROM `imapsync` WHERE id = :id\");\r\n          }\r\n          $stmt->execute(array(':id' => $_data));\r\n          $syncjobdetails = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!empty($syncjobdetails['returned_text'])) {\r\n            $syncjobdetails['log'] = $syncjobdetails['returned_text'];\r\n          }\r\n          else {\r\n            $syncjobdetails['log'] = '';\r\n          }\r\n          unset($syncjobdetails['returned_text']);\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $syncjobdetails['user2'])) {\r\n            return false;\r\n          }\r\n          return $syncjobdetails;\r\n        break;\r\n        case 'syncjobs':\r\n          $syncjobdata = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `id` FROM `imapsync` WHERE `user2` = :username\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while($row = array_shift($rows)) {\r\n            $syncjobdata[] = $row['id'];\r\n          }\r\n          return $syncjobdata;\r\n        break;\r\n        case 'spam_score':\r\n          $curl = curl_init();\r\n          curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n          curl_setopt($curl, CURLOPT_URL,\"http://rspamd/actions\");\r\n          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n          $default_actions = curl_exec($curl);\r\n          if (!curl_errno($curl)) {\r\n            $data_array = json_decode($default_actions, true);\r\n            curl_close($curl);\r\n            foreach ($data_array as $data) {\r\n              if ($data['action'] == 'reject') {\r\n                $reject = $data['value'];\r\n                continue;\r\n              }\r\n              elseif ($data['action'] == 'add header') {\r\n                $add_header = $data['value'];\r\n                continue;\r\n              }\r\n            }\r\n            if (empty($add_header) || empty($reject)) {\r\n              // Assume default, set warning\r\n              $default = \"5, 15\";\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'Could not determine servers default spam score, assuming default'\r\n              );\r\n            }\r\n            else {\r\n              $default = $add_header . ', ' . $reject;\r\n            }\r\n          }\r\n          else {\r\n            // Assume default, set warning\r\n            $default = \"5, 15\";\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'warning',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'Could not determine servers default spam score, assuming default'\r\n            );\r\n          }\r\n          curl_close($curl);\r\n          $policydata = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `value` FROM `filterconf` WHERE `object` = :username AND\r\n            (`option` = 'lowspamlevel' OR `option` = 'highspamlevel')\");\r\n          $stmt->execute(array(':username' => $_data));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if (empty($num_results)) {\r\n            return $default;\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT `value` FROM `filterconf` WHERE `option` = 'highspamlevel' AND `object` = :username\");\r\n            $stmt->execute(array(':username' => $_data));\r\n            $highspamlevel = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            $stmt = $pdo->prepare(\"SELECT `value` FROM `filterconf` WHERE `option` = 'lowspamlevel' AND `object` = :username\");\r\n            $stmt->execute(array(':username' => $_data));\r\n            $lowspamlevel = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            return $lowspamlevel['value'].', '.$highspamlevel['value'];\r\n          }\r\n        break;\r\n        case 'time_limited_aliases':\r\n          $tladata = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `address`,\r\n            `goto`,\r\n            `description`,\r\n            `validity`,\r\n            `created`,\r\n            `modified`,\r\n            `permanent`\r\n              FROM `spamalias`\r\n                WHERE `goto` = :username\r\n                  AND (`validity` >= :unixnow\r\n                    OR `permanent` != 0)\");\r\n          $stmt->execute(array(':username' => $_data, ':unixnow' => time()));\r\n          $tladata = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          return $tladata;\r\n        break;\r\n        case 'delimiter_action':\r\n          $policydata = array();\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          try {\r\n            if ($redis->hGet('RCPT_WANTS_SUBJECT_TAG', $_data)) {\r\n              return \"subject\";\r\n            }\r\n            elseif ($redis->hGet('RCPT_WANTS_SUBFOLDER_TAG', $_data)) {\r\n              return \"subfolder\";\r\n            }\r\n            else {\r\n              return \"none\";\r\n            }\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n        break;\r\n        case 'resources':\r\n          $resources = array();\r\n          if (isset($_data) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $_data,\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $resources[] = $row['username'];\r\n            }\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role\");\r\n            $stmt->execute(array(\r\n              ':username' => $_SESSION['mailcow_cc_username'],\r\n              ':role' => $_SESSION['mailcow_cc_role'],\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $resources[] = $row['username'];\r\n            }\r\n          }\r\n          return $resources;\r\n        break;\r\n        case 'alias_domains':\r\n          $aliasdomains = array();\r\n          if (isset($_data) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          elseif (isset($_data) && hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain` WHERE `target_domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $_data,\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $aliasdomains[] = $row['alias_domain'];\r\n            }\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT `alias_domain` FROM `alias_domain` WHERE `target_domain` IN (SELECT `domain` FROM `domain_admins` WHERE `active` = '1' AND `username` = :username) OR 'admin' = :role\");\r\n            $stmt->execute(array(\r\n              ':username' => $_SESSION['mailcow_cc_username'],\r\n              ':role' => $_SESSION['mailcow_cc_role'],\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $aliasdomains[] = $row['alias_domain'];\r\n            }\r\n          }\r\n          return $aliasdomains;\r\n        break;\r\n        case 'aliases':\r\n          $aliases = array();\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `id`, `address` FROM `alias` WHERE `address` != `goto` AND `domain` = :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => $_data,\r\n          ));\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while($row = array_shift($rows)) {\r\n            if ($_extra == \"address\"){\r\n              $aliases[] = $row['address'];\r\n            } else {\r\n              $aliases[] = $row['id'];\r\n            }\r\n          }\r\n          return $aliases;\r\n        break;\r\n        case 'alias_details':\r\n          $aliasdata = array();\r\n          $stmt = $pdo->prepare(\"SELECT\r\n            `id`,\r\n            `domain`,\r\n            `goto`,\r\n            `address`,\r\n            `public_comment`,\r\n            `private_comment`,\r\n            `internal`,\r\n            `active`,\r\n            `sogo_visible`,\r\n            `sender_allowed`,\r\n            `created`,\r\n            `modified`\r\n              FROM `alias`\r\n                  WHERE (`id` = :id OR `address` = :address) AND `address` != `goto`\");\r\n          $stmt->execute(array(\r\n              ':id' => $_data,\r\n              ':address' => $_data,\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` = :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => $row['domain'],\r\n          ));\r\n          $row_alias_domain = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (isset($row_alias_domain['target_domain']) && !empty($row_alias_domain['target_domain'])) {\r\n            $aliasdata['in_primary_domain'] = $row_alias_domain['target_domain'];\r\n          }\r\n          else {\r\n            $aliasdata['in_primary_domain'] = \"\";\r\n          }\r\n          $aliasdata['id'] = $row['id'];\r\n          $aliasdata['domain'] = $row['domain'];\r\n          $aliasdata['public_comment'] = $row['public_comment'];\r\n          $aliasdata['private_comment'] = $row['private_comment'];\r\n          $aliasdata['domain'] = $row['domain'];\r\n          $aliasdata['goto'] = $row['goto'];\r\n          $aliasdata['address'] = $row['address'];\r\n          (!filter_var($aliasdata['address'], FILTER_VALIDATE_EMAIL)) ? $aliasdata['is_catch_all'] = 1 : $aliasdata['is_catch_all'] = 0;\r\n          $aliasdata['internal'] = $row['internal'];\r\n          $aliasdata['active'] = $row['active'];\r\n          $aliasdata['active_int'] = $row['active'];\r\n          $aliasdata['sogo_visible'] = $row['sogo_visible'];\r\n          $aliasdata['sogo_visible_int'] = $row['sogo_visible'];\r\n          $aliasdata['sender_allowed'] = $row['sender_allowed'];\r\n          $aliasdata['created'] = $row['created'];\r\n          $aliasdata['modified'] = $row['modified'];\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $aliasdata['domain'])) {\r\n            return false;\r\n          }\r\n          return $aliasdata;\r\n        break;\r\n        case 'alias_domain_details':\r\n          $aliasdomaindata = array();\r\n          $rl = ratelimit('get', 'domain', $_data);\r\n          $stmt = $pdo->prepare(\"SELECT\r\n            `alias_domain`,\r\n            `target_domain`,\r\n            `active`,\r\n            `created`,\r\n            `modified`\r\n              FROM `alias_domain`\r\n                  WHERE `alias_domain` = :aliasdomain\");\r\n          $stmt->execute(array(\r\n            ':aliasdomain' => $_data,\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $stmt = $pdo->prepare(\"SELECT `backupmx` FROM `domain` WHERE `domain` = :target_domain\");\r\n          $stmt->execute(array(\r\n            ':target_domain' => $row['target_domain']\r\n          ));\r\n          $row_parent = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $aliasdomaindata['alias_domain'] = $row['alias_domain'];\r\n          $aliasdomaindata['parent_is_backupmx'] = $row_parent['backupmx'];\r\n          $aliasdomaindata['target_domain'] = $row['target_domain'];\r\n          $aliasdomaindata['active'] = $row['active'];\r\n          $aliasdomaindata['active_int'] = $row['active'];\r\n          $aliasdomaindata['rl'] = $rl;\r\n          $aliasdomaindata['created'] = $row['created'];\r\n          $aliasdomaindata['modified'] = $row['modified'];\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $aliasdomaindata['target_domain'])) {\r\n            return false;\r\n          }\r\n          return $aliasdomaindata;\r\n        break;\r\n        case 'shared_aliases':\r\n          $shared_aliases = array();\r\n          $stmt = $pdo->query(\"SELECT `address` FROM `alias`\r\n            WHERE `goto` REGEXP ','\r\n            AND `address` NOT LIKE '@%'\r\n            AND `goto` != `address`\");\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while($row = array_shift($rows)) {\r\n            $domain = explode(\"@\", $row['address'])[1];\r\n            if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $shared_aliases[] = $row['address'];\r\n            }\r\n          }\r\n\r\n          return $shared_aliases;\r\n        break;\r\n        case 'direct_aliases':\r\n          $direct_aliases = array();\r\n          $stmt = $pdo->query(\"SELECT `address` FROM `alias`\r\n            WHERE `goto` NOT LIKE '%,%'\r\n            AND `address` NOT LIKE '@%'\r\n            AND `goto` != `address`\");\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n          while($row = array_shift($rows)) {\r\n            $domain = explode(\"@\", $row['address'])[1];\r\n            if (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $direct_aliases[] = $row['address'];\r\n            }\r\n          }\r\n\r\n          return $direct_aliases;\r\n        break;\r\n        case 'domains':\r\n          $domains = array();\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\r\n            return false;\r\n          }\r\n\r\n          if (isset($_extra) && is_array($_extra)){\r\n            // get by tags\r\n            $tags = is_array($_extra) ? $_extra : array();\r\n            // add % as prefix and suffix to every element for relative searching\r\n            $tags = array_map(function($x){ return '%'.$x.'%'; }, $tags);\r\n            $sql = \"\";\r\n            foreach ($tags as $key => $tag) {\r\n              $sql = $sql.\"SELECT DISTINCT `domain` FROM `tags_domain` WHERE `tag_name` LIKE ?\"; // distinct, avoid duplicates\r\n              if ($key === array_key_last($tags)) break;\r\n              $sql = $sql.' UNION DISTINCT '; // combine querys with union - distinct, avoid duplicates\r\n            }\r\n            $stmt = $pdo->prepare($sql);\r\n            $stmt->execute($tags);\r\n\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              if ($_SESSION['mailcow_cc_role'] == \"admin\")\r\n                $domains[] = $row['domain'];\r\n              elseif (hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['domain']))\r\n                $domains[] = $row['domain'];\r\n            }\r\n          } else {\r\n            // get all\r\n            $stmt = $pdo->prepare(\"SELECT `domain` FROM `domain`\r\n              WHERE (`domain` IN (\r\n                SELECT `domain` from `domain_admins`\r\n                  WHERE (`active`='1' AND `username` = :username))\r\n                )\r\n                OR 'admin'= :role\");\r\n            $stmt->execute(array(\r\n              ':username' => $_SESSION['mailcow_cc_username'],\r\n              ':role' => $_SESSION['mailcow_cc_role'],\r\n            ));\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            while($row = array_shift($rows)) {\r\n              $domains[] = $row['domain'];\r\n            }\r\n          }\r\n\r\n          return $domains;\r\n        break;\r\n        case 'domain_details':\r\n          $domaindata = array();\r\n          $_data = idn_to_ascii(strtolower(trim($_data)), 0, INTL_IDNA_VARIANT_UTS46);\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain` WHERE `alias_domain` =  :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => $_data\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!empty($row)) {\r\n            $_data = $row['target_domain'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT\r\n              `domain`,\r\n              `description`,\r\n              `aliases`,\r\n              `mailboxes`,\r\n              `defquota`,\r\n              `maxquota`,\r\n              `created`,\r\n              `modified`,\r\n              `quota`,\r\n              `relayhost`,\r\n              `relay_all_recipients`,\r\n              `relay_unknown_only`,\r\n              `backupmx`,\r\n              `gal`,\r\n              `active`\r\n                FROM `domain` WHERE `domain`= :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => $_data\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (empty($row)) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT COUNT(`username`) AS `count`,\r\n            COALESCE(SUM(`quota`), 0) AS `in_use`\r\n              FROM `mailbox`\r\n                WHERE (`kind` = '' OR `kind` = NULL)\r\n                  AND `domain` = :domain\");\r\n          $stmt->execute(array(':domain' => $row['domain']));\r\n          $MailboxDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $stmt = $pdo->prepare(\"SELECT SUM(bytes) AS `bytes_total`, SUM(messages) AS `msgs_total` FROM `quota2`\r\n            WHERE `username` IN (\r\n              SELECT `username` FROM `mailbox`\r\n                WHERE `domain` = :domain\r\n            );\");\r\n          $stmt->execute(array(':domain' => $row['domain']));\r\n          $SumQuotaInUse = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $rl = ratelimit('get', 'domain', $_data);\r\n          $domaindata['max_new_mailbox_quota']  = ($row['quota'] * 1048576) - $MailboxDataDomain['in_use'];\r\n          if ($domaindata['max_new_mailbox_quota'] > ($row['maxquota'] * 1048576)) {\r\n            $domaindata['max_new_mailbox_quota'] = ($row['maxquota'] * 1048576);\r\n          }\r\n          $domaindata['def_new_mailbox_quota'] = $domaindata['max_new_mailbox_quota'];\r\n          if ($domaindata['def_new_mailbox_quota'] > ($row['defquota'] * 1048576)) {\r\n            $domaindata['def_new_mailbox_quota'] = ($row['defquota'] * 1048576);\r\n          }\r\n          $domaindata['quota_used_in_domain'] = $MailboxDataDomain['in_use'];\r\n          if (!empty($SumQuotaInUse['bytes_total'])) {\r\n            $domaindata['bytes_total'] = $SumQuotaInUse['bytes_total'];\r\n          }\r\n          else {\r\n            $domaindata['bytes_total'] = 0;\r\n          }\r\n          if (!empty($SumQuotaInUse['msgs_total'])) {\r\n            $domaindata['msgs_total'] = $SumQuotaInUse['msgs_total'];\r\n          }\r\n          else {\r\n            $domaindata['msgs_total'] = 0;\r\n          }\r\n          $domaindata['mboxes_in_domain'] = $MailboxDataDomain['count'];\r\n          $domaindata['mboxes_left'] = $row['mailboxes']  - $MailboxDataDomain['count'];\r\n          $domaindata['domain_name'] = $row['domain'];\r\n          $domaindata['domain_h_name'] = idn_to_utf8($row['domain']);\r\n          $domaindata['description'] = $row['description'];\r\n          $domaindata['max_num_aliases_for_domain'] = $row['aliases'];\r\n          $domaindata['max_num_mboxes_for_domain'] = $row['mailboxes'];\r\n          $domaindata['def_quota_for_mbox'] = $row['defquota'] * 1048576;\r\n          $domaindata['max_quota_for_mbox'] = $row['maxquota'] * 1048576;\r\n          $domaindata['max_quota_for_domain'] = $row['quota'] * 1048576;\r\n          $domaindata['relayhost'] = $row['relayhost'];\r\n          $domaindata['backupmx'] = $row['backupmx'];\r\n          $domaindata['backupmx_int'] = $row['backupmx'];\r\n          $domaindata['gal'] = $row['gal'];\r\n          $domaindata['gal_int'] = $row['gal'];\r\n          $domaindata['rl'] = $rl;\r\n          $domaindata['active'] = $row['active'];\r\n          $domaindata['active_int'] = $row['active'];\r\n          $domaindata['relay_all_recipients'] = $row['relay_all_recipients'];\r\n          $domaindata['relay_all_recipients_int'] = $row['relay_all_recipients'];\r\n          $domaindata['relay_unknown_only'] = $row['relay_unknown_only'];\r\n          $domaindata['relay_unknown_only_int'] = $row['relay_unknown_only'];\r\n          $domaindata['created'] = $row['created'];\r\n          $domaindata['modified'] = $row['modified'];\r\n          $stmt = $pdo->prepare(\"SELECT COUNT(`address`) AS `alias_count` FROM `alias`\r\n            WHERE (`domain`= :domain OR `domain` IN (SELECT `alias_domain` FROM `alias_domain` WHERE `target_domain` = :domain2))\r\n              AND `address` NOT IN (\r\n                SELECT `username` FROM `mailbox`\r\n              )\");\r\n          $stmt->execute(array(\r\n            ':domain' => $_data,\r\n            ':domain2' => $_data\r\n          ));\r\n          $AliasDataDomain = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          (isset($AliasDataDomain['alias_count'])) ? $domaindata['aliases_in_domain'] = $AliasDataDomain['alias_count'] : $domaindata['aliases_in_domain'] = \"0\";\r\n          $domaindata['aliases_left'] = $row['aliases'] - $AliasDataDomain['alias_count'];\r\n          if ($_SESSION['mailcow_cc_role'] == \"admin\")\r\n          {\r\n              $stmt = $pdo->prepare(\"SELECT GROUP_CONCAT(`username` SEPARATOR ', ') AS domain_admins FROM `domain_admins` WHERE `domain` = :domain\");\r\n              $stmt->execute(array(\r\n                ':domain' => $_data\r\n              ));\r\n              $domain_admins = $stmt->fetch(PDO::FETCH_ASSOC);\r\n              (isset($domain_admins['domain_admins'])) ? $domaindata['domain_admins'] = $domain_admins['domain_admins'] : $domaindata['domain_admins'] = \"-\";\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `tag_name`\r\n            FROM `tags_domain` WHERE `domain`= :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => $_data\r\n          ));\r\n          $tags = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($tag = array_shift($tags)) {\r\n            $domaindata['tags'][] = $tag['tag_name'];\r\n          }\r\n\r\n          return $domaindata;\r\n        break;\r\n        case 'domain_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\r\n            return false;\r\n          }\r\n          $_data = (isset($_data)) ? intval($_data) : null;\r\n\r\n          if (isset($_data)){\r\n            $stmt = $pdo->prepare(\"SELECT * FROM `templates`\r\n              WHERE `id` = :id AND type = :type\");\r\n            $stmt->execute(array(\r\n              \":id\" => $_data,\r\n              \":type\" => \"domain\"\r\n            ));\r\n            $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n            if (empty($row)){\r\n              return false;\r\n            }\r\n\r\n            $row[\"attributes\"] = json_decode($row[\"attributes\"], true);\r\n            return $row;\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT * FROM `templates` WHERE `type` =  'domain'\");\r\n            $stmt->execute();\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n            if (empty($rows)){\r\n              return false;\r\n            }\r\n\r\n            foreach($rows as $key => $row){\r\n              $rows[$key][\"attributes\"] = json_decode($row[\"attributes\"], true);\r\n            }\r\n            return $rows;\r\n          }\r\n        break;\r\n        case 'mailbox_details':\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          $mailboxdata = array();\r\n          if (preg_match('/y|yes/i', getenv('MASTER'))) {\r\n            $stmt = $pdo->prepare(\"SELECT\r\n              `domain`.`backupmx`,\r\n              `mailbox`.`username`,\r\n              `mailbox`.`name`,\r\n              `mailbox`.`active`,\r\n              `mailbox`.`domain`,\r\n              `mailbox`.`local_part`,\r\n              `mailbox`.`quota`,\r\n              `mailbox`.`created`,\r\n              `mailbox`.`modified`,\r\n              `mailbox`.`authsource`,\r\n              `quota2`.`bytes`,\r\n              `attributes`,\r\n              `custom_attributes`,\r\n              `quota2`.`messages`\r\n                FROM `mailbox`, `quota2`, `domain`\r\n                  WHERE (`mailbox`.`kind` = '' OR `mailbox`.`kind` = NULL)\r\n                    AND `mailbox`.`username` = `quota2`.`username`\r\n                    AND `domain`.`domain` = `mailbox`.`domain`\r\n                    AND `mailbox`.`username` = :mailbox\");\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT\r\n              `domain`.`backupmx`,\r\n              `mailbox`.`username`,\r\n              `mailbox`.`name`,\r\n              `mailbox`.`active`,\r\n              `mailbox`.`domain`,\r\n              `mailbox`.`local_part`,\r\n              `mailbox`.`quota`,\r\n              `mailbox`.`created`,\r\n              `mailbox`.`modified`,\r\n              `mailbox`.`authsource`,\r\n              `quota2replica`.`bytes`,\r\n              `attributes`,\r\n              `custom_attributes`,\r\n              `quota2replica`.`messages`\r\n                FROM `mailbox`, `quota2replica`, `domain`\r\n                  WHERE (`mailbox`.`kind` = '' OR `mailbox`.`kind` = NULL)\r\n                    AND `mailbox`.`username` = `quota2replica`.`username`\r\n                    AND `domain`.`domain` = `mailbox`.`domain`\r\n                    AND `mailbox`.`username` = :mailbox\");\r\n          }\r\n          $stmt->execute(array(\r\n            ':mailbox' => $_data,\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n          $mailboxdata['username'] = $row['username'];\r\n          $mailboxdata['active'] = $row['active'];\r\n          $mailboxdata['active_int'] = $row['active'];\r\n          $mailboxdata['domain'] = $row['domain'];\r\n          $mailboxdata['name'] = $row['name'];\r\n          $mailboxdata['local_part'] = $row['local_part'];\r\n          $mailboxdata['quota'] = $row['quota'];\r\n          $mailboxdata['messages'] = $row['messages'];\r\n          $mailboxdata['attributes'] = json_decode($row['attributes'], true);\r\n          $mailboxdata['custom_attributes'] = json_decode($row['custom_attributes'], true);\r\n          $mailboxdata['quota_used'] = intval($row['bytes']);\r\n          $mailboxdata['percent_in_use'] = ($row['quota'] == 0) ? '- ' : round((intval($row['bytes']) / intval($row['quota'])) * 100);\r\n          $mailboxdata['created'] = $row['created'];\r\n          $mailboxdata['modified'] = $row['modified'];\r\n          $mailboxdata['authsource'] = ($row['authsource']) ? $row['authsource'] : 'mailcow';\r\n\r\n          if ($mailboxdata['percent_in_use'] === '- ') {\r\n            $mailboxdata['percent_class'] = \"info\";\r\n          }\r\n          elseif ($mailboxdata['percent_in_use'] >= 90) {\r\n            $mailboxdata['percent_class'] = \"danger\";\r\n          }\r\n          elseif ($mailboxdata['percent_in_use'] >= 75) {\r\n            $mailboxdata['percent_class'] = \"warning\";\r\n          }\r\n          else {\r\n            $mailboxdata['percent_class'] = \"success\";\r\n          }\r\n\r\n          // Determine last logins\r\n          $stmt = $pdo->prepare(\"SELECT MAX(`datetime`) AS `datetime`, `service` FROM `sasl_log`\r\n            WHERE `username` = :mailbox\r\n                GROUP BY `service` DESC\");\r\n          $stmt->execute(array(':mailbox' => $_data));\r\n          $SaslLogsData  = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          foreach ($SaslLogsData as $SaslLogs) {\r\n            if ($SaslLogs['service'] == 'imap') {\r\n              $last_imap_login = strtotime($SaslLogs['datetime']);\r\n            }\r\n            else if ($SaslLogs['service'] == 'smtp') {\r\n              $last_smtp_login = strtotime($SaslLogs['datetime']);\r\n            }\r\n            else if ($SaslLogs['service'] == 'pop3') {\r\n              $last_pop3_login = strtotime($SaslLogs['datetime']);\r\n            }\r\n\t\t\t      else if ($SaslLogs['service'] == 'SSO') {\r\n              $last_sso_login = strtotime($SaslLogs['datetime']);\r\n            }\r\n          }\r\n          if (!isset($last_imap_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) {\r\n            $last_imap_login = 0;\r\n          }\r\n          if (!isset($last_smtp_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) {\r\n            $last_smtp_login = 0;\r\n          }\r\n          if (!isset($last_pop3_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) {\r\n            $last_pop3_login = 0;\r\n          }\r\n\t\t      if (!isset($last_sso_login) || $GLOBALS['SHOW_LAST_LOGIN'] === false) {\r\n            $last_sso_login = 0;\r\n          }\r\n          $mailboxdata['last_imap_login'] = $last_imap_login;\r\n          $mailboxdata['last_smtp_login'] = $last_smtp_login;\r\n          $mailboxdata['last_pop3_login'] = $last_pop3_login;\r\n          $mailboxdata['last_sso_login'] = $last_sso_login;\r\n\r\n          if (!isset($_extra) || $_extra != 'reduced') {\r\n            $rl = ratelimit('get', 'mailbox', $_data);\r\n            $stmt = $pdo->prepare(\"SELECT `maxquota`, `quota` FROM  `domain` WHERE `domain` = :domain\");\r\n            $stmt->execute(array(':domain' => $row['domain']));\r\n            $DomainQuota  = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n            $stmt = $pdo->prepare(\"SELECT IFNULL(COUNT(`active`), 0) AS `pushover_active` FROM `pushover` WHERE `username` = :username AND `active` = 1\");\r\n            $stmt->execute(array(':username' => $_data));\r\n            $PushoverActive  = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            $stmt = $pdo->prepare(\"SELECT COALESCE(SUM(`quota`), 0) as `in_use` FROM `mailbox` WHERE (`kind` = '' OR `kind` = NULL) AND `domain` = :domain AND `username` != :username\");\r\n            $stmt->execute(array(':domain' => $row['domain'], ':username' => $_data));\r\n            $MailboxUsage = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            $stmt = $pdo->prepare(\"SELECT IFNULL(COUNT(`address`), 0) AS `sa_count` FROM `spamalias` WHERE `goto` = :address AND (`validity` >= :unixnow OR `permanent` != 0)\");\r\n            $stmt->execute(array(':address' => $_data, ':unixnow' => time()));\r\n            $SpamaliasUsage = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            $mailboxdata['max_new_quota'] = ($DomainQuota['quota'] * 1048576) - $MailboxUsage['in_use'];\r\n            $mailboxdata['spam_aliases'] = $SpamaliasUsage['sa_count'];\r\n            $mailboxdata['pushover_active'] = ($PushoverActive['pushover_active'] == 1) ? 1 : 0;\r\n            if ($mailboxdata['max_new_quota'] > ($DomainQuota['maxquota'] * 1048576)) {\r\n              $mailboxdata['max_new_quota'] = ($DomainQuota['maxquota'] * 1048576);\r\n            }\r\n            if (!empty($rl)) {\r\n              $mailboxdata['rl'] = $rl;\r\n              $mailboxdata['rl_scope'] = 'mailbox';\r\n            }\r\n            else {\r\n              $mailboxdata['rl'] = ratelimit('get', 'domain', $row['domain']);\r\n              $mailboxdata['rl_scope'] = 'domain';\r\n            }\r\n            $mailboxdata['is_relayed'] = $row['backupmx'];\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `tag_name`\r\n            FROM `tags_mailbox` WHERE `username`= :username\");\r\n          $stmt->execute(array(\r\n            ':username' => $_data\r\n          ));\r\n          $tags = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($tag = array_shift($tags)) {\r\n            $mailboxdata['tags'][] = $tag['tag_name'];\r\n          }\r\n\r\n          return $mailboxdata;\r\n        break;\r\n        case 'mailbox_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\" && $_SESSION['access_all_exception'] != \"1\") {\r\n            return false;\r\n          }\r\n          $_data = (isset($_data)) ? intval($_data) : null;\r\n\r\n          if (isset($_data)){\r\n            $stmt = $pdo->prepare(\"SELECT * FROM `templates`\r\n              WHERE `id` = :id AND type = :type\");\r\n            $stmt->execute(array(\r\n              \":id\" => $_data,\r\n              \":type\" => \"mailbox\"\r\n            ));\r\n            $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n\r\n            if (empty($row)){\r\n              return false;\r\n            }\r\n\r\n            $row[\"attributes\"] = json_decode($row[\"attributes\"], true);\r\n            return $row;\r\n          }\r\n          else {\r\n            $stmt = $pdo->prepare(\"SELECT * FROM `templates` WHERE `type` =  'mailbox'\");\r\n            $stmt->execute();\r\n            $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n            if (empty($rows)){\r\n              return false;\r\n            }\r\n\r\n            foreach($rows as $key => $row){\r\n              $rows[$key][\"attributes\"] = json_decode($row[\"attributes\"], true);\r\n            }\r\n            return $rows;\r\n          }\r\n        break;\r\n        case 'mta_sts':\r\n          $stmt = $pdo->prepare(\"SELECT * FROM `mta_sts` WHERE `domain` = :domain\");\r\n          $stmt->execute(array(\r\n            ':domain' => $_data,\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (empty($row)){\r\n            return [];\r\n          }\r\n          $row['mx'] = explode(',', $row['mx']);\r\n          $row['version'] = strtoupper(substr($row['version'], 0, 3)) . substr($row['version'], 3);\r\n\r\n          return $row;\r\n        break;\r\n        case 'resource_details':\r\n          $resourcedata = array();\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT\r\n              `username`,\r\n              `name`,\r\n              `kind`,\r\n              `multiple_bookings`,\r\n              `local_part`,\r\n              `active`,\r\n              `domain`\r\n                FROM `mailbox` WHERE `kind` REGEXP 'location|thing|group' AND `username` = :resource\");\r\n          $stmt->execute(array(\r\n            ':resource' => $_data,\r\n          ));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          $resourcedata['name'] = $row['username'];\r\n          $resourcedata['kind'] = $row['kind'];\r\n          $resourcedata['multiple_bookings'] = $row['multiple_bookings'];\r\n          $resourcedata['description'] = $row['name'];\r\n          $resourcedata['active'] = $row['active'];\r\n          $resourcedata['active_int'] = $row['active'];\r\n          $resourcedata['domain'] = $row['domain'];\r\n          $resourcedata['local_part'] = $row['local_part'];\r\n          if (!isset($resourcedata['domain']) ||\r\n            (isset($resourcedata['domain']) && !hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $resourcedata['domain']))) {\r\n            return false;\r\n          }\r\n          return $resourcedata;\r\n        break;\r\n        case 'domain_wide_footer':\r\n          $domain = idn_to_ascii(strtolower(trim($_data)), 0, INTL_IDNA_VARIANT_UTS46);\r\n          if (!is_valid_domain_name($domain)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'domain_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          try {\r\n            $stmt = $pdo->prepare(\"SELECT `html`, `plain`, `mbox_exclude`, `alias_domain_exclude`, `skip_replies` FROM `domain_wide_footer`\r\n              WHERE `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain\r\n            ));\r\n            $footer = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          }\r\n          catch (PDOException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => $e->getMessage()\r\n            );\r\n            return false;\r\n          }\r\n\r\n          return $footer;\r\n        break;\r\n      }\r\n    break;\r\n    case 'delete':\r\n      switch ($_type) {\r\n        case 'syncjob':\r\n          if (!is_array($_data['id'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['id'];\r\n          }\r\n          else {\r\n            $ids = $_data['id'];\r\n          }\r\n          if (!isset($_SESSION['acl']['syncjobs']) || $_SESSION['acl']['syncjobs'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($ids as $id) {\r\n            if (!is_numeric($id)) {\r\n              return false;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `user2` FROM `imapsync` WHERE id = :id\");\r\n            $stmt->execute(array(':id' => $id));\r\n            $user2 = $stmt->fetch(PDO::FETCH_ASSOC)['user2'];\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $user2)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `imapsync` WHERE `id`= :id\");\r\n            $stmt->execute(array(':id' => $id));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('deleted_syncjob', $id)\r\n            );\r\n          }\r\n        break;\r\n        case 'filter':\r\n          if (!is_array($_data['id'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['id'];\r\n          }\r\n          else {\r\n            $ids = $_data['id'];\r\n          }\r\n          if (!isset($_SESSION['acl']['filters']) || $_SESSION['acl']['filters'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($ids as $id) {\r\n            if (!is_numeric($id)) {\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `username` FROM `sieve_filters` WHERE id = :id\");\r\n            $stmt->execute(array(':id' => $id));\r\n            $usr = $stmt->fetch(PDO::FETCH_ASSOC)['username'];\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $usr)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sieve_filters` WHERE `id`= :id\");\r\n            $stmt->execute(array(':id' => $id));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('delete_filter', $id)\r\n            );\r\n          }\r\n        break;\r\n        case 'time_limited_alias':\r\n          if (!is_array($_data['address'])) {\r\n            $addresses = array();\r\n            $addresses[] = $_data['address'];\r\n          }\r\n          else {\r\n            $addresses = $_data['address'];\r\n          }\r\n          if (!isset($_SESSION['acl']['spam_alias']) || $_SESSION['acl']['spam_alias'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($addresses as $address) {\r\n            $stmt = $pdo->prepare(\"SELECT `goto` FROM `spamalias` WHERE `address` = :address\");\r\n            $stmt->execute(array(':address' => $address));\r\n            $goto = $stmt->fetch(PDO::FETCH_ASSOC)['goto'];\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $goto)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `spamalias` WHERE `goto` = :username AND `address` = :item\");\r\n            $stmt->execute(array(\r\n              ':username' => $goto,\r\n              ':item' => $address\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_modified', htmlspecialchars($goto))\r\n            );\r\n          }\r\n        break;\r\n        case 'eas_cache':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!isset($_SESSION['acl']['eas_reset']) || $_SESSION['acl']['eas_reset'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('eas_reset', htmlspecialchars($username))\r\n            );\r\n          }\r\n        break;\r\n        case 'sogo_profile':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          if (!isset($_SESSION['acl']['sogo_profile_reset']) || $_SESSION['acl']['sogo_profile_reset'] != \"1\" ) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/\" . $username . \"/%' OR `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('sogo_profile_reset', htmlspecialchars($username))\r\n            );\r\n          }\r\n        break;\r\n        case 'domain':\r\n          if (!is_array($_data['domain'])) {\r\n            $domains = array();\r\n            $domains[] = $_data['domain'];\r\n          }\r\n          else {\r\n            $domains = $_data['domain'];\r\n          }\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($domains as $domain) {\r\n            if (!is_valid_domain_name($domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_invalid'\r\n              );\r\n              continue;\r\n            }\r\n            $domain = idn_to_ascii(strtolower(trim($domain)), 0, INTL_IDNA_VARIANT_UTS46);\r\n            $stmt = $pdo->prepare(\"SELECT `username` FROM `mailbox`\r\n              WHERE `domain` = :domain\");\r\n            $stmt->execute(array(':domain' => $domain));\r\n            $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n            if ($num_results != 0 || !empty($num_results)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('domain_not_empty', $domain)\r\n              );\r\n              continue;\r\n            }\r\n            $exec_fields = array('cmd' => 'maildir', 'task' => 'cleanup', 'maildir' => $domain);\r\n            $maildir_gc = json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true);\r\n            if ($maildir_gc['type'] != 'success') {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'Could not move mail storage to garbage collector: ' . $maildir_gc['msg']\r\n              );\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `domain` WHERE `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `domain_admins` WHERE `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `alias` WHERE `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `alias_domain` WHERE `target_domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `mailbox` WHERE `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `logged_in_as` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@'.$domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `quota2` WHERE `username` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@'.$domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `pushover` WHERE `username` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@'.$domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `quota2replica` WHERE `username` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@'.$domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `spamalias` WHERE `address` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@'.$domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `filterconf` WHERE `object` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `bcc_maps` WHERE `local_dest` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `mta_sts` WHERE `domain` = :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => $domain,\r\n            ));\r\n            $stmt = $pdo->query(\"DELETE FROM `admin` WHERE `superadmin` = 0 AND `username` NOT IN (SELECT `username`FROM `domain_admins`);\");\r\n            $stmt = $pdo->query(\"DELETE FROM `da_acl` WHERE `username` NOT IN (SELECT `username`FROM `domain_admins`);\");\r\n            try {\r\n              $redis->hDel('DOMAIN_MAP', $domain);\r\n              $redis->hDel('RL_VALUE', $domain);\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              continue;\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('domain_removed', htmlspecialchars($domain))\r\n            );\r\n          }\r\n        break;\r\n        case 'domain_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_array($_data['ids'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['ids'];\r\n          }\r\n          else {\r\n            $ids = $_data['ids'];\r\n          }\r\n\r\n\r\n          foreach ($ids as $id) {\r\n            // delete template\r\n            $stmt = $pdo->prepare(\"DELETE FROM `templates`\r\n              WHERE id = :id AND type = :type AND NOT template = :template\");\r\n            $stmt->execute(array(\r\n              \":id\" => $id,\r\n              \":type\" => \"domain\",\r\n              \":template\" => \"Default\"\r\n            ));\r\n\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('template_removed', htmlspecialchars($id))\r\n            );\r\n            return true;\r\n          }\r\n        break;\r\n        case 'alias':\r\n          if (!is_array($_data['id'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['id'];\r\n          }\r\n          else {\r\n            $ids = $_data['id'];\r\n          }\r\n          foreach ($ids as $id) {\r\n            $alias_data = mailbox('get', 'alias_details', $id);\r\n            if (empty($alias_data)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            // Track affected mailboxes for SOGo update (capture before deletion)\r\n            if (!empty($alias_data['goto'])) {\r\n              $gotos = array_map('trim', explode(',', $alias_data['goto']));\r\n              foreach ($gotos as $g) {\r\n                if (filter_var($g, FILTER_VALIDATE_EMAIL) &&\r\n                    !in_array($g, array('null@localhost', 'spam@localhost', 'ham@localhost'))) {\r\n                  $update_sogo_mailboxes[] = $g;\r\n                }\r\n              }\r\n            }\r\n\r\n            $stmt = $pdo->prepare(\"DELETE FROM `alias` WHERE `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':id' => $alias_data['id']\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `send_as` = :alias_address\");\r\n            $stmt->execute(array(\r\n              ':alias_address' => $alias_data['address']\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('alias_removed', htmlspecialchars($alias_data['address']))\r\n            );\r\n          }\r\n        break;\r\n        case 'alias_domain':\r\n          if (!is_array($_data['alias_domain'])) {\r\n            $alias_domains = array();\r\n            $alias_domains[] = $_data['alias_domain'];\r\n          }\r\n          else {\r\n            $alias_domains = $_data['alias_domain'];\r\n          }\r\n          foreach ($alias_domains as $alias_domain) {\r\n            if (!is_valid_domain_name($alias_domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_invalid'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `target_domain` FROM `alias_domain`\r\n              WHERE `alias_domain`= :alias_domain\");\r\n            $stmt->execute(array(':alias_domain' => $alias_domain));\r\n            $DomainData = $stmt->fetch(PDO::FETCH_ASSOC);\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $DomainData['target_domain'])) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `alias_domain` WHERE `alias_domain` = :alias_domain\");\r\n            $stmt->execute(array(\r\n              ':alias_domain' => $alias_domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `alias` WHERE `domain` = :alias_domain\");\r\n            $stmt->execute(array(\r\n              ':alias_domain' => $alias_domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `spamalias` WHERE `address` LIKE :domain\");\r\n            $stmt->execute(array(\r\n              ':domain' => '%@'.$alias_domain,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `bcc_maps` WHERE `local_dest` = :alias_domain\");\r\n            $stmt->execute(array(\r\n              ':alias_domain' => $alias_domain,\r\n            ));\r\n            try {\r\n              $redis->hDel('DOMAIN_MAP', $alias_domain);\r\n              $redis->hDel('RL_VALUE', $domain);\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              continue;\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('alias_domain_removed', htmlspecialchars($alias_domain))\r\n            );\r\n          }\r\n        break;\r\n        case 'mailbox':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          foreach ($usernames as $username) {\r\n            if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $mailbox_details = mailbox('get', 'mailbox_details', $username);\r\n            if (!empty($mailbox_details['domain']) && !empty($mailbox_details['local_part'])) {\r\n              $maildir = $mailbox_details['domain'] . '/' . $mailbox_details['local_part'];\r\n              $exec_fields = array('cmd' => 'maildir', 'task' => 'cleanup', 'maildir' => $maildir);\r\n\r\n              if (getenv(\"CLUSTERMODE\") == \"replication\") {\r\n                // broadcast to each dovecot container\r\n                docker('broadcast', 'dovecot-mailcow', 'exec', $exec_fields);\r\n              } else {\r\n                $maildir_gc = json_decode(docker('post', 'dovecot-mailcow', 'exec', $exec_fields), true);\r\n                if ($maildir_gc['type'] != 'success') {\r\n                  $_SESSION['return'][] = array(\r\n                    'type' => 'warning',\r\n                    'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                    'msg' => 'Could not move maildir to garbage collector: ' . $maildir_gc['msg']\r\n                  );\r\n                }\r\n              }\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'Could not move maildir to garbage collector: variables local_part and/or domain empty'\r\n              );\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `alias` WHERE `goto` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `pushover` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `quarantine` WHERE `rcpt` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `quota2` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `quota2replica` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `mailbox` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sender_acl` WHERE `logged_in_as` = :logged_in_as OR `send_as` = :send_as\");\r\n            $stmt->execute(array(\r\n              ':logged_in_as' => $username,\r\n              ':send_as' => $username\r\n            ));\r\n            // fk, better safe than sorry\r\n            $stmt = $pdo->prepare(\"DELETE FROM `user_acl` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `spamalias` WHERE `goto` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `imapsync` WHERE `user2` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `filterconf` WHERE `object` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/\" . str_replace('%', '\\%', $username) . \"/%' OR `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `bcc_maps` WHERE `local_dest` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `oauth_access_tokens` WHERE `user_id` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `oauth_refresh_tokens` WHERE `user_id` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `oauth_authorization_codes` WHERE `user_id` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `tfa` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `fido2` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $username,\r\n            ));\r\n            $stmt = $pdo->prepare(\"SELECT `address`, `goto` FROM `alias`\r\n                WHERE `goto` REGEXP :username\");\r\n            $stmt->execute(array(':username' => '(^|,)'.preg_quote($username, '/').'($|,)'));\r\n            $GotoData = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n            foreach ($GotoData as $gotos) {\r\n              $goto_exploded = explode(',', $gotos['goto']);\r\n              if (($key = array_search($username, $goto_exploded)) !== false) {\r\n                unset($goto_exploded[$key]);\r\n              }\r\n              $gotos_rebuild = implode(',', (array)$goto_exploded);\r\n              $stmt = $pdo->prepare(\"UPDATE `alias` SET\r\n                `goto` = :goto\r\n                  WHERE `address` = :address\");\r\n              $stmt->execute(array(\r\n                ':goto' => $gotos_rebuild,\r\n                ':address' => $gotos['address']\r\n              ));\r\n            }\r\n            try {\r\n              $redis->hDel('RL_VALUE', $username);\r\n            }\r\n            catch (RedisException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => array('redis_error', $e)\r\n              );\r\n              continue;\r\n            }\r\n\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('mailbox_removed', htmlspecialchars($username))\r\n            );\r\n\r\n            // Track affected mailboxes for SOGo update\r\n            $update_sogo_mailboxes[] = $username;\r\n          }\r\n          return true;\r\n        break;\r\n        case 'mailbox_templates':\r\n          if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if (!is_array($_data['ids'])) {\r\n            $ids = array();\r\n            $ids[] = $_data['ids'];\r\n          }\r\n          else {\r\n            $ids = $_data['ids'];\r\n          }\r\n\r\n\r\n          foreach ($ids as $id) {\r\n            // delete template\r\n            $stmt = $pdo->prepare(\"DELETE FROM `templates`\r\n              WHERE id = :id AND type = :type AND NOT template = :template\");\r\n            $stmt->execute(array(\r\n              \":id\" => $id,\r\n              \":type\" => \"mailbox\",\r\n              \":template\" => \"Default\"\r\n            ));\r\n          }\r\n\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => 'template_removed'\r\n          );\r\n          return true;\r\n        break;\r\n        case 'resource':\r\n          if (!is_array($_data['name'])) {\r\n            $names = array();\r\n            $names[] = $_data['name'];\r\n          }\r\n          else {\r\n            $names = $_data['name'];\r\n          }\r\n          foreach ($names as $name) {\r\n            if (!filter_var($name, FILTER_VALIDATE_EMAIL)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $name)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `mailbox` WHERE `username` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_user_profile` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_cache_folder` WHERE `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_acl` WHERE `c_object` LIKE '%/\" . $name . \"/%' OR `c_uid` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_store` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_quick_contact` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_quick_appointment` WHERE `c_folder_id` IN (SELECT `c_folder_id` FROM `sogo_folder_info` WHERE `c_path2` = :username)\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $stmt = $pdo->prepare(\"DELETE FROM `sogo_folder_info` WHERE `c_path2` = :username\");\r\n            $stmt->execute(array(\r\n              ':username' => $name\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n              'msg' => array('resource_removed', htmlspecialchars($name))\r\n            );\r\n\r\n            // Track affected mailboxes for SOGo update\r\n            $update_sogo_mailboxes[] = $name;\r\n          }\r\n        break;\r\n        case 'tags_domain':\r\n          if (!is_array($_data['domain'])) {\r\n            $domains = array();\r\n            $domains[] = $_data['domain'];\r\n          }\r\n          else {\r\n            $domains = $_data['domain'];\r\n          }\r\n          $tags = $_data['tags'];\r\n          if (!is_array($tags)) $tags = array();\r\n\r\n\r\n          $wasModified = false;\r\n          foreach ($domains as $domain) {\r\n            if (!is_valid_domain_name($domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'domain_invalid'\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n\r\n            foreach($tags as $tag){\r\n              // delete tag\r\n              $wasModified = true;\r\n              $stmt = $pdo->prepare(\"DELETE FROM `tags_domain` WHERE `domain` = :domain AND `tag_name` = :tag_name\");\r\n              $stmt->execute(array(\r\n                ':domain' => $domain,\r\n                ':tag_name' => $tag,\r\n              ));\r\n            }\r\n          }\r\n\r\n          if (!$wasModified) return false;\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('domain_modified', $domain)\r\n          );\r\n        break;\r\n        case 'tags_mailbox':\r\n          if (!is_array($_data['username'])) {\r\n            $usernames = array();\r\n            $usernames[] = $_data['username'];\r\n          }\r\n          else {\r\n            $usernames = $_data['username'];\r\n          }\r\n          $tags = $_data['tags'];\r\n          if (!is_array($tags)) $tags = array();\r\n\r\n          $wasModified = false;\r\n          foreach ($usernames as $username) {\r\n            if (!filter_var($username, FILTER_VALIDATE_EMAIL)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'email invalid'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            $is_now = mailbox('get', 'mailbox_details', $username);\r\n            $domain     = $is_now['domain'];\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n\r\n            // delete tags\r\n            foreach($tags as $tag){\r\n              $wasModified = true;\r\n\r\n              $stmt = $pdo->prepare(\"DELETE FROM `tags_mailbox` WHERE `username` = :username AND `tag_name` = :tag_name\");\r\n              $stmt->execute(array(\r\n                ':username' => $username,\r\n                ':tag_name' => $tag,\r\n              ));\r\n            }\r\n          }\r\n\r\n          if (!$wasModified) return false;\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n            'msg' => array('mailbox_modified', $username)\r\n          );\r\n        break;\r\n      }\r\n    break;\r\n  }\r\n  if ($_action != 'get' && in_array($_type, array('domain', 'alias', 'alias_domain', 'resource', 'mailbox')) && getenv('SKIP_SOGO') != \"y\") {\r\n    try {\r\n      if (($_type == 'alias' || $_type == 'resource' || $_type == 'mailbox') && !empty($update_sogo_mailboxes)) {\r\n        // INCREMENTAL UPDATE: Update only affected mailboxes/resources\r\n        $update_sogo_mailboxes = array_unique($update_sogo_mailboxes);\r\n        foreach ($update_sogo_mailboxes as $mailbox) {\r\n          update_sogo_static_view($mailbox);\r\n        }\r\n      }\r\n      else {\r\n        // FULL REBUILD: For domain and alias_domain operations or if no tracked mailboxes\r\n        // Domain operations affect all mailboxes\r\n        // Alias_domain operations affect entire target domain\r\n        update_sogo_static_view();\r\n      }\r\n    }catch (PDOException $e) {\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n        'msg' => $e->getMessage()\r\n      );\r\n    }\r\n  }\r\n\r\n  return true;\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.mailq.inc.php",
    "content": "<?php\r\nfunction mailq($_action, $_data = null) {\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_data),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  function process_mailq_output($returned_output, $_action, $_data) {\r\n    if ($returned_output !== NULL) {\r\n      if ($_action == 'cat') {\r\n        logger(array('return' => array(\r\n          array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'queue_cat_success'\r\n          )\r\n        )));\r\n        return $returned_output;\r\n      }\r\n      else {\r\n        if (isset($returned_output['type']) && $returned_output['type'] == 'danger') {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'Error: ' . $returned_output['msg']\r\n          );\r\n        }\r\n        if (isset($returned_output['type']) && $returned_output['type'] == 'success') {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'queue_command_success'\r\n          );\r\n        }\r\n      }\r\n    }\r\n    else {\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'danger',\r\n        'log' => array(__FUNCTION__, $_action, $_data),\r\n        'msg' => 'unknown'\r\n      );\r\n    }\r\n  }\r\n  if ($_action == 'get') {\r\n    $mailq_lines = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'list'));\r\n    $lines = 0;\r\n    // Hard limit to 10000 items\r\n    foreach (preg_split(\"/((\\r?\\n)|(\\r\\n?))/\", $mailq_lines) as $mailq_item) if ($lines++ < 10000) {\r\n      if (empty($mailq_item) || $mailq_item == '1') {\r\n        continue;\r\n      }\r\n      $mq_line = json_decode($mailq_item, true);\r\n      if ($mq_line !== NULL) {\r\n        $rcpts = array();\r\n        foreach ($mq_line['recipients'] as $rcpt) {\r\n          if (isset($rcpt['delay_reason'])) {\r\n            $rcpts[] = $rcpt['address'] . ' (' . $rcpt['delay_reason'] . ')';\r\n          }\r\n          else {\r\n            $rcpts[] = $rcpt['address'];\r\n          }\r\n        }\r\n        if (!empty($rcpts)) {\r\n          $mq_line['recipients'] = $rcpts;\r\n        }\r\n        $line[] = $mq_line;\r\n      }\r\n    }\r\n    if (!isset($line) || empty($line)) {\r\n      return '[]';\r\n    }\r\n    else {\r\n      return json_encode($line);\r\n    }\r\n  }\r\n  elseif ($_action == 'delete') {\r\n    if (!is_array($_data['qid'])) {\r\n      $qids = array();\r\n      $qids[] = $_data['qid'];\r\n    }\r\n    else {\r\n      $qids = $_data['qid'];\r\n    }\r\n    $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'delete', 'items' => $qids));\r\n    process_mailq_output(json_decode($docker_return, true), $_action, $_data);\r\n  }\r\n  elseif ($_action == 'cat') {\r\n    if (!is_array($_data['qid'])) {\r\n      $qids = array();\r\n      $qids[] = $_data['qid'];\r\n    }\r\n    else {\r\n      $qids = $_data['qid'];\r\n    }\r\n    $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'cat', 'items' => $qids));\r\n    return process_mailq_output($docker_return, $_action, $_data);\r\n  }\r\n  elseif ($_action == 'edit') {\r\n    if (in_array($_data['action'], array('hold', 'unhold', 'deliver'))) {\r\n      if (!is_array($_data['qid'])) {\r\n        $qids = array();\r\n        $qids[] = $_data['qid'];\r\n      }\r\n      else {\r\n        $qids = $_data['qid'];\r\n      }\r\n      if (!empty($qids)) {\r\n        $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action'], 'items' => $qids));\r\n        process_mailq_output(json_decode($docker_return, true), $_action, $_data);\r\n      }\r\n    }\r\n    if (in_array($_data['action'], array('flush', 'super_delete'))) {\r\n      $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action']));\r\n      process_mailq_output(json_decode($docker_return, true), $_action, $_data);\r\n    }\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.oauth2.inc.php",
    "content": "<?php\r\nfunction oauth2($_action, $_type, $_data = null) {\r\n  global $pdo;\r\n  global $redis;\r\n  global $lang;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  switch ($_action) {\r\n    case 'add':\r\n      switch ($_type) {\r\n        case 'client':\r\n          $client_id = bin2hex(random_bytes(6));\r\n          $client_secret = bin2hex(random_bytes(12));\r\n          $redirect_uri = $_data['redirect_uri'];\r\n          $scope = 'profile';\r\n          // For future use\r\n          // $grant_type = isset($_data['grant_type']) ? $_data['grant_type'] : 'authorization_code';\r\n          // $scope = isset($_data['scope']) ? $_data['scope'] : 'profile';\r\n          // if ($grant_type != \"authorization_code\" && $grant_type != \"password\") {\r\n            // $_SESSION['return'][] = array(\r\n              // 'type' => 'danger',\r\n              // 'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n              // 'msg' => 'access_denied'\r\n            // );\r\n            // return false;\r\n          // }\r\n          if ($scope != \"profile\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n              'msg' => 'Invalid scope'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT 'client' FROM `oauth_clients`\r\n            WHERE `client_id` = :client_id\");\r\n          $stmt->execute(array(':client_id' => $client_id));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n              'msg' => 'Client ID exists'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `oauth_clients` (`client_id`, `client_secret`, `redirect_uri`, `scope`)\r\n            VALUES (:client_id, :client_secret, :redirect_uri, :scope)\");\r\n          $stmt->execute(array(\r\n            ':client_id' => $client_id,\r\n            ':client_secret' => $client_secret,\r\n            ':redirect_uri' => $redirect_uri,\r\n            ':scope' => $scope\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n            'msg' => 'Added client access'\r\n          );\r\n        break;\r\n      }\r\n    break;\r\n    case 'edit':\r\n      switch ($_type) {\r\n        case 'client':\r\n          $ids = (array)$_data['id'];\r\n          foreach ($ids as $id) {\r\n            $is_now = oauth2('details', 'client', $id);\r\n            if (!empty($is_now)) {\r\n              $redirect_uri = (!empty($_data['redirect_uri'])) ? $_data['redirect_uri'] : $is_now['redirect_uri'];\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            if (isset($_data['revoke_tokens'])) {\r\n              $stmt = $pdo->prepare(\"DELETE FROM `oauth_access_tokens`\r\n                WHERE `client_id` IN (\r\n                  SELECT `client_id` FROM `oauth_clients` WHERE `id` = :id\r\n                )\");\r\n              $stmt->execute(array(\r\n                ':id' => $id\r\n              ));\r\n              $stmt = $pdo->prepare(\"DELETE FROM `oauth_refresh_tokens`\r\n                WHERE `client_id` IN (\r\n                  SELECT `client_id` FROM `oauth_clients` WHERE `id` = :id\r\n                )\");\r\n              $stmt->execute(array(\r\n                ':id' => $id\r\n              ));\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => array('object_modified', htmlspecialchars($id))\r\n              );\r\n              continue;\r\n            }\r\n            if (isset($_data['renew_secret'])) {\r\n              $client_secret = bin2hex(random_bytes(12));\r\n              $stmt = $pdo->prepare(\"UPDATE `oauth_clients` SET `client_secret` = :client_secret WHERE  `id` = :id\");\r\n              $stmt->execute(array(\r\n                ':client_secret' => $client_secret,\r\n                ':id' => $id\r\n              ));\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => array('object_modified', htmlspecialchars($id))\r\n              );\r\n              continue;\r\n            }\r\n            if (empty($redirect_uri)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => 'Redirect/Callback URL cannot be empty'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"UPDATE `oauth_clients` SET\r\n              `redirect_uri` = :redirect_uri\r\n                WHERE `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':id' => $id,\r\n              ':redirect_uri' => $redirect_uri\r\n            ));\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n              'msg' => array('object_modified', htmlspecialchars($id))\r\n            );\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'delete':\r\n      switch ($_type) {\r\n        case 'client':\r\n          (array)$ids = $_data['id'];\r\n          foreach ($ids as $id) {\r\n            if (!is_numeric($id)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `oauth_clients`\r\n              WHERE `id` = :id\");\r\n            $stmt->execute(array(\r\n              ':id' => $id\r\n            ));\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n            'msg' => array('items_deleted', htmlspecialchars($id))\r\n          );\r\n        break;\r\n        case 'access_token':\r\n          (array)$access_tokens = $_data['access_token'];\r\n          foreach ($access_tokens as $access_token) {\r\n            if (!ctype_alnum($access_token)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `oauth_access_tokens`\r\n              WHERE `access_token` = :access_token\");\r\n            $stmt->execute(array(\r\n              ':access_token' => $access_token\r\n            ));\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n            'msg' => sprintf($lang['success']['items_deleted'], implode(', ', (array)$access_tokens))\r\n          );\r\n        break;\r\n        case 'refresh_token':\r\n          (array)$refresh_tokens = $_data['refresh_token'];\r\n          foreach ($refresh_tokens as $refresh_token) {\r\n            if (!ctype_alnum($refresh_token)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            $stmt = $pdo->prepare(\"DELETE FROM `oauth_refresh_tokens` WHERE `refresh_token` = :refresh_token\");\r\n            $stmt->execute(array(\r\n              ':refresh_token' => $refresh_token\r\n            ));\r\n          }\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_type, $_data),\r\n            'msg' => sprintf($lang['success']['items_deleted'], implode(', ', (array)$refresh_tokens))\r\n          );\r\n        break;\r\n      }\r\n    break;\r\n    case 'get':\r\n      switch ($_type) {\r\n        case 'clients':\r\n          $stmt = $pdo->query(\"SELECT `id` FROM `oauth_clients`\");\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while ($row = array_shift($rows)) {\r\n            $oauth_clients[] = $row['id'];\r\n          }\r\n          return $oauth_clients;\r\n        break;\r\n      }\r\n    break;\r\n    case 'details':\r\n      switch ($_type) {\r\n        case 'client':\r\n          $stmt = $pdo->prepare(\"SELECT * FROM `oauth_clients`\r\n            WHERE `id` = :id\");\r\n          $stmt->execute(array(':id' => $_data));\r\n          $oauth_client_details = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          return $oauth_client_details;\r\n        break;\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.policy.inc.php",
    "content": "<?php\r\nfunction policy($_action, $_scope, $_data = null) {\r\n  global $pdo;\r\n  global $redis;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'add':\r\n      if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      switch ($_scope) {\r\n        case 'domain':\r\n          $object = $_data['domain'];\r\n          if (is_valid_domain_name($object)) {\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              return false;\r\n            }\r\n            $object = idn_to_ascii(strtolower(trim($object)), 0, INTL_IDNA_VARIANT_UTS46);\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if ($_data['object_list'] == \"bl\") {\r\n            $object_list = \"blacklist_from\";\r\n          }\r\n          elseif ($_data['object_list'] == \"wl\") {\r\n            $object_list = \"whitelist_from\";\r\n          }\r\n          $object_from = trim(strtolower($_data['object_from']));\r\n          if (!ctype_alnum(str_replace(array('@', '_', '.', '-', '*'), '', $object_from))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'policy_list_from_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if ($object_list != \"blacklist_from\" && $object_list != \"whitelist_from\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `object` FROM `filterconf`\r\n            WHERE (`option` = 'whitelist_from'  OR `option` = 'blacklist_from')\r\n              AND `object` = :object\r\n              AND `value` = :object_from\");\r\n          $stmt->execute(array(':object' => $object, ':object_from' => $object_from));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'policy_list_from_exists'\r\n            );\r\n            return false;\r\n          }\r\n\r\n          $stmt = $pdo->prepare(\"INSERT INTO `filterconf` (`object`, `option` ,`value`)\r\n            VALUES (:object, :object_list, :object_from)\");\r\n          $stmt->execute(array(\r\n            ':object' => $object,\r\n            ':object_list' => $object_list,\r\n            ':object_from' => $object_from\r\n          ));\r\n\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n            'msg' => array('domain_modified', $object)\r\n          );\r\n        break;\r\n        case 'mailbox':\r\n          $object = $_data['username'];\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          if ($_data['object_list'] == \"bl\") {\r\n            $object_list = \"blacklist_from\";\r\n          }\r\n          elseif ($_data['object_list'] == \"wl\") {\r\n            $object_list = \"whitelist_from\";\r\n          }\r\n          $object_from = trim(strtolower($_data['object_from']));\r\n          if (!ctype_alnum(str_replace(array('@', '_', '.', '-', '*'), '', $object_from))) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'policy_list_from_invalid'\r\n            );\r\n            return false;\r\n          }\r\n          if ($object_list != \"blacklist_from\" && $object_list != \"whitelist_from\") {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"SELECT `object` FROM `filterconf`\r\n            WHERE (`option` = 'whitelist_from'  OR `option` = 'blacklist_from')\r\n              AND `object` = :object\r\n              AND `value` = :object_from\");\r\n          $stmt->execute(array(':object' => $object, ':object_from' => $object_from));\r\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\r\n          if ($num_results != 0) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => 'policy_list_from_exists'\r\n            );\r\n            return false;\r\n          }\r\n          $stmt = $pdo->prepare(\"INSERT INTO `filterconf` (`object`, `option` ,`value`)\r\n            VALUES (:object, :object_list, :object_from)\");\r\n          $stmt->execute(array(\r\n            ':object' => $object,\r\n            ':object_list' => $object_list,\r\n            ':object_from' => $object_from\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n            'msg' => array('mailbox_modified', $object)\r\n          );\r\n        break;\r\n      }\r\n    break;\r\n    case 'delete':\r\n      if (!isset($_SESSION['acl']['spam_policy']) || $_SESSION['acl']['spam_policy'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      switch ($_scope) {\r\n        case 'domain':\r\n          (array)$prefids = $_data['prefid'];\r\n          foreach ($prefids as $prefid) {\r\n            if (!is_numeric($prefid)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `object` FROM `filterconf` WHERE `prefid` = :prefid\");\r\n            $stmt->execute(array(':prefid' => $prefid));\r\n            $object = $stmt->fetch(PDO::FETCH_ASSOC)['object'];\r\n            if (is_valid_domain_name($object)) {\r\n              if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                  'msg' => 'access_denied'\r\n                );\r\n                continue;\r\n              }\r\n              $object = idn_to_ascii(strtolower(trim($object)), 0, INTL_IDNA_VARIANT_UTS46);\r\n            }\r\n            else {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            try {\r\n              $stmt = $pdo->prepare(\"DELETE FROM `filterconf` WHERE `object` = :object AND `prefid` = :prefid\");\r\n              $stmt->execute(array(\r\n                ':object' => $object,\r\n                ':prefid' => $prefid\r\n              ));\r\n            }\r\n            catch (PDOException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => array('mysql_error', $e)\r\n              );\r\n              continue;\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('item_deleted',$prefid)\r\n            );\r\n          }\r\n        break;\r\n        case 'mailbox':\r\n          if (!is_array($_data['prefid'])) {\r\n            $prefids = array();\r\n            $prefids[] = $_data['prefid'];\r\n          }\r\n          else {\r\n            $prefids = $_data['prefid'];\r\n          }\r\n          foreach ($prefids as $prefid) {\r\n            if (!is_numeric($prefid)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            $stmt = $pdo->prepare(\"SELECT `object` FROM `filterconf` WHERE `prefid` = :prefid\");\r\n            $stmt->execute(array(':prefid' => $prefid));\r\n            $object = $stmt->fetch(PDO::FETCH_ASSOC)['object'];\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            try {\r\n              $stmt = $pdo->prepare(\"DELETE FROM `filterconf` WHERE `object` = :object AND `prefid` = :prefid\");\r\n              $stmt->execute(array(\r\n                ':object' => $object,\r\n                ':prefid' => $prefid\r\n              ));\r\n            }\r\n            catch (PDOException $e) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => array('mysql_error', $e)\r\n              );\r\n              continue;\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('items_deleted', implode(', ', (array)$prefids))\r\n            );\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'get':\r\n      switch ($_scope) {\r\n        case 'domain':\r\n          if (!is_valid_domain_name($_data)) {\r\n            return false;\r\n          }\r\n          else {\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n            $_data = idn_to_ascii(strtolower(trim($_data)), 0, INTL_IDNA_VARIANT_UTS46);\r\n          }\r\n\r\n          // WHITELIST\r\n          $stmt = $pdo->prepare(\"SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='whitelist_from' AND (`object` LIKE :object_mail OR `object` = :object_domain)\");\r\n          $stmt->execute(array(':object_mail' => '%@' . $_data, ':object_domain' => $_data));\r\n          $rows['whitelist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          // BLACKLIST\r\n          $stmt = $pdo->prepare(\"SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='blacklist_from' AND (`object` LIKE :object_mail OR `object` = :object_domain)\");\r\n          $stmt->execute(array(':object_mail' => '%@' . $_data, ':object_domain' => $_data));\r\n          $rows['blacklist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n\r\n          return $rows;\r\n        break;\r\n        case 'mailbox':\r\n          if (isset($_data) && filter_var($_data, FILTER_VALIDATE_EMAIL)) {\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n              return false;\r\n            }\r\n          }\r\n          else {\r\n            $_data = $_SESSION['mailcow_cc_username'];\r\n          }\r\n          $domain = mailbox('get', 'mailbox_details', $_data)['domain'];\r\n          if (empty($domain)) {\r\n            return false;\r\n          }\r\n          // WHITELIST\r\n          $stmt = $pdo->prepare(\"SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='whitelist_from' AND (`object` = :username OR `object` = :domain)\");\r\n          $stmt->execute(array(':username' => $_data, ':domain' => $domain));\r\n          $rows['whitelist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          // BLACKLIST\r\n          $stmt = $pdo->prepare(\"SELECT `object`, `value`, `prefid` FROM `filterconf` WHERE `option`='blacklist_from' AND (`object` = :username OR `object` = :domain)\");\r\n          $stmt->execute(array(':username' => $_data, ':domain' => $domain));\r\n          $rows['blacklist'] = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          return $rows;\r\n        break;\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.presets.inc.php",
    "content": "<?php\nfunction presets($_action, $_kind) {\n  switch ($_action) {\n    case 'get':\n      if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\n        return false;\n      }\n      $presets = array();\n      $kind = strtolower(trim($_kind));\n      $lang_base = 'admin';\n      $presets_path = __DIR__ . '/presets/' . $kind;\n      if (!in_array($kind, ['rspamd', 'sieve'], true)) {\n        return array();\n      }\n      if ($kind === 'sieve') {\n        $lang_base = 'mailbox';\n      }\n      foreach (glob($presets_path . '/*.yml') as $filename) {\n        $presets[] = getPresetFromFilePath($filename, $lang_base);\n      }\n      return $presets;\n    break;\n  }\n  return array();\n}\nfunction getPresetFromFilePath($filePath, $lang_base) {\n  global $lang;\n  $preset = Spyc::YAMLLoad($filePath);\n  $preset = ['name' => basename($filePath, '.yml')] + $preset;\n  /* get translated headlines */\n  if (isset($preset['headline']) && strpos($preset['headline'], 'lang.') === 0) {\n    $langTextName = trim(substr($preset['headline'], 5));\n    if (isset($lang[$lang_base][$langTextName])) {\n      $preset['headline'] = $lang[$lang_base][$langTextName];\n    }\n  }\n  return $preset;\n}\n"
  },
  {
    "path": "data/web/inc/functions.pushover.inc.php",
    "content": "<?php\r\nfunction pushover($_action, $_data = null) {\r\n  global $pdo;\r\n  switch ($_action) {\r\n    case 'edit':\r\n      if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      if (!is_array($_data['username'])) {\r\n        $usernames = array();\r\n        $usernames[] = $_data['username'];\r\n      }\r\n      else {\r\n        $usernames = $_data['username'];\r\n      }\r\n      foreach ($usernames as $username) {\r\n        if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        $delete = $_data['delete'];\r\n        if ($delete == \"true\") {\r\n          $stmt = $pdo->prepare(\"DELETE FROM `pushover` WHERE `username` = :username\");\r\n          $stmt->execute(array(\r\n            ':username' => $username\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'pushover_settings_edited'\r\n          );\r\n          continue;\r\n        }\r\n        $is_now = pushover('get', $username);\r\n        if (!empty($is_now)) {\r\n          $key = (!empty($_data['key'])) ? $_data['key'] : $is_now['key'];\r\n          $token = (!empty($_data['token'])) ? $_data['token'] : $is_now['token'];\r\n          $senders = (isset($_data['senders'])) ? $_data['senders'] : $is_now['senders'];\r\n          $senders_regex = (isset($_data['senders_regex'])) ? $_data['senders_regex'] : $is_now['senders_regex'];\r\n          $title = (!empty($_data['title'])) ? $_data['title'] : $is_now['title'];\r\n          $text = (!empty($_data['text'])) ? $_data['text'] : $is_now['text'];\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n          $evaluate_x_prio = (isset($_data['evaluate_x_prio'])) ? intval($_data['evaluate_x_prio']) : $is_now['evaluate_x_prio'];\r\n          $only_x_prio = (isset($_data['only_x_prio'])) ? intval($_data['only_x_prio']) : $is_now['only_x_prio'];\r\n          $sound = (isset($_data['sound'])) ? $_data['sound'] : $is_now['sound'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        if (!empty($senders_regex) && !is_valid_regex($senders_regex)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'Invalid regex'\r\n          );\r\n          continue;\r\n        }\r\n        $senders = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $senders));\r\n        foreach ($senders as $i => &$sender) {\r\n          if (empty($sender)) {\r\n            continue;\r\n          }\r\n          if (!filter_var($sender, FILTER_VALIDATE_EMAIL) === true) {\r\n            unset($senders[$i]);\r\n            continue;\r\n          }\r\n          $senders[$i] = preg_replace('/\\.(?=.*?@gmail\\.com$)/', '$1', $sender);\r\n        }\r\n        $senders = array_filter($senders);\r\n        if (empty($senders)) { $senders = ''; }\r\n        $senders = implode(\",\", (array)$senders);\r\n        if (!ctype_alnum($key) || strlen($key) != 30) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_data),\r\n            'msg' => 'pushover_key'\r\n          );\r\n          continue;\r\n        }\r\n        if (!ctype_alnum($token) || strlen($token) != 30) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_data),\r\n            'msg' => 'pushover_token'\r\n          );\r\n          continue;\r\n        }\r\n        $po_attributes = json_encode(\r\n          array(\r\n            'evaluate_x_prio' => strval(intval($evaluate_x_prio)),\r\n            'only_x_prio' => strval(intval($only_x_prio)),\r\n            'sound' => strval($sound)\r\n          )\r\n        );\r\n        $stmt = $pdo->prepare(\"REPLACE INTO `pushover` (`username`, `key`, `attributes`, `senders_regex`, `senders`, `token`, `title`, `text`, `active`)\r\n          VALUES (:username, :key, :po_attributes, :senders_regex, :senders, :token, :title, :text, :active)\");\r\n        $stmt->execute(array(\r\n          ':username' => $username,\r\n          ':key' => $key,\r\n          ':po_attributes' => $po_attributes,\r\n          ':senders_regex' => $senders_regex,\r\n          ':senders' => $senders,\r\n          ':token' => $token,\r\n          ':title' => $title,\r\n          ':text' => $text,\r\n          ':active' => $active\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'pushover_settings_edited'\r\n        );\r\n      }\r\n    break;\r\n    case 'get':\r\n      if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"SELECT * FROM `pushover` WHERE `username` = :username\");\r\n      $stmt->execute(array(\r\n        ':username' => $_data\r\n      ));\r\n      $data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      $data['attributes'] = json_decode($data['attributes'], true);\r\n      if (empty($data)) {\r\n        return false;\r\n      }\r\n      else {\r\n        return $data;\r\n      }\r\n    break;\r\n    case 'test':\r\n      if (!isset($_SESSION['acl']['pushover']) || $_SESSION['acl']['pushover'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      if (!is_array($_data['username'])) {\r\n        $usernames = array();\r\n        $usernames[] = $_data['username'];\r\n      }\r\n      else {\r\n        $usernames = $_data['username'];\r\n      }\r\n      foreach ($usernames as $username) {\r\n        if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $username)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        $stmt = $pdo->prepare(\"SELECT * FROM `pushover`\r\n          WHERE `username` = :username\");\r\n        $stmt->execute(array(\r\n          ':username' => $username\r\n        ));\r\n        $api_data = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        if (!empty($api_data)) {\r\n          $title = (!empty($api_data['title'])) ? $api_data['title'] : 'Mail';\r\n          $text = (!empty($api_data['text'])) ? $api_data['text'] : 'You\\'ve got mail 📧';\r\n          curl_setopt_array($ch = curl_init(), array(\r\n            CURLOPT_URL => \"https://api.pushover.net/1/users/validate.json\",\r\n            CURLOPT_POSTFIELDS => array(\r\n              \"token\" => $api_data['token'],\r\n              \"user\" => $api_data['key']\r\n            ),\r\n            CURLOPT_SAFE_UPLOAD => true,\r\n            CURLOPT_RETURNTRANSFER => true,\r\n          ));\r\n          $result = curl_exec($ch);\r\n          $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\r\n          curl_close($ch);\r\n          if ($httpcode == 200) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_data),\r\n              'msg' => sprintf('Pushover API OK (%d): %s', $httpcode, $result)\r\n            );\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data),\r\n              'msg' => sprintf('Pushover API ERR (%d): %s', $httpcode, $result)\r\n            );\r\n          }\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data),\r\n            'msg' => 'pushover_credentials_missing'\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.quarantine.inc.php",
    "content": "<?php\r\nuse PHPMailer\\PHPMailer\\PHPMailer;\r\nuse PHPMailer\\PHPMailer\\SMTP;\r\nuse PHPMailer\\PHPMailer\\Exception;\r\nfunction quarantine($_action, $_data = null) {\r\n\tglobal $pdo;\r\n\tglobal $redis;\r\n\tglobal $lang;\r\n\t$_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'quick_delete':\r\n      // Dont return results, just log\r\n      $hash = trim($_data);\r\n      if (preg_match(\"/^([a-f0-9]{64})$/\", $hash) === false) {\r\n        logger(array('return' => array(\r\n          array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          )\r\n        )));\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`\r\n        WHERE `qhash` = :hash\n          AND user_acl.quarantine = 1\r\n          AND rcpt IN (SELECT username FROM mailbox)');\r\n      $stmt->execute(array(':hash' => $hash));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (empty($row['id']) || !is_numeric($row['id'])) {\r\n        logger(array('return' => array(\r\n          array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          )\r\n        )));\r\n        return false;\r\n      }\r\n      else {\r\n        $stmt = $pdo->prepare(\"DELETE FROM `quarantine` WHERE id = :id\");\r\n        $stmt->execute(array(\r\n          ':id' => $row['id']\r\n        ));\r\n      }\r\n      logger(array('return' => array(\r\n        array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('item_deleted', $row['id'])\r\n        )\r\n      )));\r\n    break;\r\n    case 'quick_release':\r\n      // Dont return results, just log\r\n      $hash = trim($_data);\r\n      if (preg_match(\"/^([a-f0-9]{64})$/\", $hash) === false) {\r\n        logger(array('return' => array(\r\n          array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          )\r\n        )));\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare('SELECT `id` FROM `quarantine` LEFT OUTER JOIN `user_acl` ON `user_acl`.`username` = `rcpt`\r\n        WHERE `qhash` = :hash\n          AND `user_acl`.`quarantine` = 1\r\n          AND `username` IN (SELECT `username` FROM `mailbox`)');\r\n      $stmt->execute(array(':hash' => $hash));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (empty($row['id']) || !is_numeric($row['id'])) {\r\n        logger(array('return' => array(\r\n          array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          )\r\n        )));\r\n        return false;\r\n      }\r\n      else {\r\n        $stmt = $pdo->prepare('SELECT `msg`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');\r\n        $stmt->execute(array(':id' => $row['id']));\r\n        $detail_row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        $sender = !empty($detail_row['sender']) ? $detail_row['sender'] : 'sender-unknown@rspamd';\r\n        if (!empty(gethostbynamel('postfix-mailcow'))) {\r\n          $postfix = 'postfix-mailcow';\r\n        }\r\n        if (!empty(gethostbynamel('postfix'))) {\r\n          $postfix = 'postfix';\r\n        }\r\n        else {\r\n          logger(array('return' => array(\r\n            array(\r\n              'type' => 'warning',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('release_send_failed', 'Cannot determine Postfix host')\r\n            )\r\n          )));\r\n        return false;\r\n        }\r\n        try {\r\n          $release_format = $redis->Get('Q_RELEASE_FORMAT');\r\n        }\r\n        catch (RedisException $e) {\r\n          logger(array('return' => array(\r\n            array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('redis_error', $e)\r\n            )\r\n          )));\r\n          return false;\r\n        }\r\n        if ($release_format == 'attachment') {\r\n          try {\r\n            $mail = new PHPMailer(true);\r\n            $mail->isSMTP();\r\n            $mail->SMTPDebug = 0;\r\n            $mail->SMTPOptions = array(\r\n              'ssl' => array(\r\n                  'verify_peer' => false,\r\n                  'verify_peer_name' => false,\r\n                  'allow_self_signed' => true\r\n              )\r\n            );\r\n            if (!empty(gethostbynamel('postfix-mailcow'))) {\r\n              $postfix = 'postfix-mailcow';\r\n            }\r\n            if (!empty(gethostbynamel('postfix'))) {\r\n              $postfix = 'postfix';\r\n            }\r\n            else {\r\n              logger(array('return' => array(\r\n                array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('release_send_failed', 'Cannot determine Postfix host')\r\n                )\r\n              )));\r\n              return false;\r\n            }\r\n            $mail->Host = $postfix;\r\n            $mail->Port = 590;\r\n            $mail->setFrom($sender);\r\n            $mail->CharSet = 'UTF-8';\r\n            $mail->Subject = sprintf($lang['quarantine']['release_subject'], $detail_row['qid']);\r\n            $mail->addAddress($detail_row['rcpt']);\r\n            $mail->IsHTML(false);\r\n            $msg_tmpf = tempnam(\"/tmp\", $detail_row['qid']);\r\n            file_put_contents($msg_tmpf, $detail_row['msg']);\r\n            $mail->addAttachment($msg_tmpf, $detail_row['qid'] . '.eml');\r\n            $mail->Body = sprintf($lang['quarantine']['release_body']);\r\n            $mail->send();\r\n            unlink($msg_tmpf);\r\n          }\r\n          catch (phpmailerException $e) {\r\n            unlink($msg_tmpf);\r\n            logger(array('return' => array(\r\n              array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('release_send_failed', $e->errorMessage())\r\n              )\r\n            )));\r\n            return false;\r\n          }\r\n        }\r\n        elseif ($release_format == 'raw') {\r\n          $detail_row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $detail_row['msg']);\r\n          $postfix_talk = array(\r\n            array('220', 'HELO quarantine' . chr(10)),\r\n            array('250', 'MAIL FROM: ' . $sender . chr(10)),\r\n            array('250', 'RCPT TO: ' . $detail_row['rcpt'] . chr(10)),\r\n            array('250', 'DATA' . chr(10)),\r\n            array('354', $detail_row['msg'] . chr(10) . '.' . chr(10)),\r\n            array('250', 'QUIT' . chr(10)),\r\n            array('221', '')\r\n          );\r\n          // Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php\r\n          $smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1); \r\n          if (!$smtp_connection) {\r\n            logger(array('return' => array(\r\n              array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => 'Cannot connect to Postfix'\r\n              )\r\n            )));\r\n            return false;\r\n          }\r\n          for ($i=0; $i < count($postfix_talk); $i++) {\r\n            $smtp_resource = fgets($smtp_connection, 256); \r\n            if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {\r\n              $ret = substr($smtp_resource, 0, 3);\r\n              $ret = (empty($ret)) ? '-' : $ret;\r\n              logger(array('return' => array(\r\n                array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => 'Postfix returned SMTP code ' . $smtp_resource . ', expected ' . $postfix_talk[$i][0]\r\n                )\r\n              )));\r\n            return false;\r\n            }\r\n            if ($postfix_talk[$i][1] !== '')  {\r\n              fputs($smtp_connection, $postfix_talk[$i][1]);\r\n            }\r\n          }\r\n          fclose($smtp_connection);\r\n        }\r\n        $stmt = $pdo->prepare(\"DELETE FROM `quarantine` WHERE id = :id\");\r\n        $stmt->execute(array(\r\n          ':id' => $row['id']\r\n        ));\r\n      }\r\n    logger(array('return' => array(\r\n      array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => array('item_released', $hash)\r\n      )\r\n    )));\r\n    break;\r\n    case 'delete':\r\n      if (!is_array($_data['id'])) {\r\n        $ids = array();\r\n        $ids[] = $_data['id'];\r\n      }\r\n      else {\r\n        $ids = $_data['id'];\r\n      }\r\n      if (!isset($_SESSION['acl']['quarantine']) || $_SESSION['acl']['quarantine'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      foreach ($ids as $id) {\r\n        if (!is_numeric($id)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        $stmt = $pdo->prepare('SELECT `rcpt` FROM `quarantine` WHERE `id` = :id');\r\n        $stmt->execute(array(':id' => $id));\r\n        $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n        if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin') {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        else {\r\n          $stmt = $pdo->prepare(\"DELETE FROM `quarantine` WHERE `id` = :id\");\r\n          $stmt->execute(array(\r\n            ':id' => $id\r\n          ));\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('item_deleted', $id)\r\n        );\r\n      }\r\n    break;\r\n    case 'edit':\r\n      if (!isset($_SESSION['acl']['quarantine']) || $_SESSION['acl']['quarantine'] != \"1\" ) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      // Edit settings\r\n      if ($_data['action'] == 'settings') {\r\n        if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          );\r\n          return false;\r\n        }\r\n        $retention_size = $_data['retention_size'];\r\n        if ($_data['release_format'] == 'attachment' || $_data['release_format'] == 'raw') {\r\n          $release_format = $_data['release_format'];\r\n        }\r\n        else {\r\n          $release_format = 'raw';\r\n        }\r\n        $max_size = $_data['max_size'];\r\n        if ($_data['max_score'] == \"\") {\r\n          $max_score = '';\r\n        }\r\n        else {\r\n          $max_score = floatval($_data['max_score']);\r\n        }\r\n        $max_age = intval($_data['max_age']);\r\n        $subject = $_data['subject'];\r\n        if (!filter_var($_data['bcc'], FILTER_VALIDATE_EMAIL)) {\r\n          $bcc = '';\r\n        }\r\n        else {\r\n          $bcc = $_data['bcc'];\r\n        }\r\n        if (!filter_var($_data['redirect'], FILTER_VALIDATE_EMAIL)) {\r\n          $redirect = '';\r\n        }\r\n        else {\r\n          $redirect = $_data['redirect'];\r\n        }\r\n        if (!filter_var($_data['sender'], FILTER_VALIDATE_EMAIL)) {\r\n          $sender = '';\r\n        }\r\n        else {\r\n          $sender = $_data['sender'];\r\n        }\r\n        $html = $_data['html_tmpl'];\r\n        if ($max_age <= 0) {\r\n          $max_age = 365;\r\n        }\r\n        $exclude_domains = (array)$_data['exclude_domains'];\r\n        try {\r\n          $redis->Set('Q_RETENTION_SIZE', intval($retention_size));\r\n          $redis->Set('Q_MAX_SIZE', intval($max_size));\r\n          $redis->Set('Q_MAX_SCORE', $max_score);\r\n          $redis->Set('Q_MAX_AGE', $max_age);\r\n          $redis->Set('Q_EXCLUDE_DOMAINS', json_encode($exclude_domains));\r\n          $redis->Set('Q_RELEASE_FORMAT', $release_format);\r\n          $redis->Set('Q_SENDER', $sender);\r\n          $redis->Set('Q_BCC', $bcc);\r\n          $redis->Set('Q_REDIRECT', $redirect);\r\n          $redis->Set('Q_SUBJ', $subject);\r\n          $redis->Set('Q_HTML', $html);\r\n        }\r\n        catch (RedisException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('redis_error', $e)\r\n          );\r\n          return false;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'saved_settings'\r\n        );\r\n      }\r\n      // Release item\r\n      elseif ($_data['action'] == 'release' || $_data['action'] == 'learnham') {\r\n        if (!is_array($_data['id'])) {\r\n          $ids = array();\r\n          $ids[] = $_data['id'];\r\n        }\r\n        else {\r\n          $ids = $_data['id'];\r\n        }\r\n        foreach ($ids as $id) {\r\n          if (!is_numeric($id)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            continue;\r\n          }\r\n          $stmt = $pdo->prepare('SELECT `msg`, `action`, `qid`, `sender`, `rcpt` FROM `quarantine` WHERE `id` = :id');\r\n          $stmt->execute(array(':id' => $id));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            continue;\r\n          }\r\n          $sender = !empty($row['sender']) ? $row['sender'] : 'sender-unknown@rspamd';\r\n          if (!empty(gethostbynamel('postfix-mailcow'))) {\r\n            $postfix = 'postfix-mailcow';\r\n          }\r\n          if (!empty(gethostbynamel('postfix'))) {\r\n            $postfix = 'postfix';\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'warning',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('release_send_failed', 'Cannot determine Postfix host')\r\n            );\r\n            continue;\r\n          }\r\n          try {\r\n            $release_format = $redis->Get('Q_RELEASE_FORMAT');\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          if ($release_format == 'attachment') {\r\n            try {\r\n              $mail = new PHPMailer(true);\r\n              $mail->isSMTP();\r\n              $mail->SMTPDebug = 0;\r\n              $mail->SMTPOptions = array(\r\n                'ssl' => array(\r\n                    'verify_peer' => false,\r\n                    'verify_peer_name' => false,\r\n                    'allow_self_signed' => true\r\n                )\r\n              );\r\n              if (!empty(gethostbynamel('postfix-mailcow'))) {\r\n                $postfix = 'postfix-mailcow';\r\n              }\r\n              if (!empty(gethostbynamel('postfix'))) {\r\n                $postfix = 'postfix';\r\n              }\r\n              else {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('release_send_failed', 'Cannot determine Postfix host')\r\n                );\r\n                continue;\r\n              }\r\n              $mail->Host = $postfix;\r\n              $mail->Port = 590;\r\n              $mail->setFrom($sender);\r\n              $mail->CharSet = 'UTF-8';\r\n              $mail->Subject = sprintf($lang['quarantine']['release_subject'], $row['qid']);\r\n              $mail->addAddress($row['rcpt']);\r\n              $mail->IsHTML(false);\r\n              $msg_tmpf = tempnam(\"/tmp\", $row['qid']);\r\n              file_put_contents($msg_tmpf, $row['msg']);\r\n              $mail->addAttachment($msg_tmpf, $row['qid'] . '.eml');\r\n              $mail->Body = sprintf($lang['quarantine']['release_body']);\r\n              $mail->send();\r\n              unlink($msg_tmpf);\r\n            }\r\n            catch (phpmailerException $e) {\r\n              unlink($msg_tmpf);\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('release_send_failed', $e->errorMessage())\r\n              );\r\n              continue;\r\n            }\r\n          }\r\n          elseif ($release_format == 'raw') {\r\n            $row['msg'] = preg_replace('/^X-Spam-Flag: (.*)/m', 'X-Pre-Release-Spam-Flag: $1', $row['msg']);\r\n            $postfix_talk = array(\r\n              array('220', 'HELO quarantine' . chr(10)),\r\n              array('250', 'MAIL FROM: ' . $sender . chr(10)),\r\n              array('250', 'RCPT TO: ' . $row['rcpt'] . chr(10)),\r\n              array('250', 'DATA' . chr(10)),\r\n              array('354', str_replace(\"\\n.\", '', $row['msg']) . chr(10) . '.' . chr(10)),\r\n              array('250', 'QUIT' . chr(10)),\r\n              array('221', '')\r\n            );\r\n            // Thanks to https://stackoverflow.com/questions/6632399/given-an-email-as-raw-text-how-can-i-send-it-using-php\r\n            $smtp_connection = fsockopen($postfix, 590, $errno, $errstr, 1); \r\n            if (!$smtp_connection) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'warning',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => 'Cannot connect to Postfix'\r\n              );\r\n              return false;\r\n            }\r\n            for ($i=0; $i < count($postfix_talk); $i++) {\r\n              $smtp_resource = fgets($smtp_connection, 256); \r\n              if (substr($smtp_resource, 0, 3) !== $postfix_talk[$i][0]) {\r\n                $ret = substr($smtp_resource, 0, 3);\r\n                $ret = (empty($ret)) ? '-' : $ret;\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'warning',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => 'Postfix returned SMTP code ' . $smtp_resource . ', expected ' . $postfix_talk[$i][0]\r\n                );\r\n                return false;\r\n              }\r\n              if ($postfix_talk[$i][1] !== '')  {\r\n                fputs($smtp_connection, $postfix_talk[$i][1]);\r\n              }\r\n            }\r\n            fclose($smtp_connection);\r\n          }\r\n          $stmt = $pdo->prepare(\"DELETE FROM `quarantine` WHERE `id` = :id\");\r\n          $stmt->execute(array(\r\n            ':id' => $id\r\n          ));\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('item_released', $id)\r\n          );\r\n          // Item was released and deleted from quarantine, now learning ham\r\n          $curl = curl_init();\r\n          curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n          curl_setopt($curl, CURLOPT_POST, 1);\r\n          curl_setopt($curl, CURLOPT_TIMEOUT, 30);\r\n          curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));\r\n          curl_setopt($curl, CURLOPT_URL,\"http://rspamd/learnham\");\r\n          curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);\r\n          $response = curl_exec($curl);\r\n          if (!curl_errno($curl)) {\r\n            $response = json_decode($response, true);\r\n            if (isset($response['error'])) {\r\n              if (stripos($response['error'], 'already learned') === false) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('ham_learn_error', $response['error'])\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            curl_close($curl);\r\n            $curl = curl_init();\r\n            curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n            curl_setopt($curl, CURLOPT_POST, 1);\r\n            curl_setopt($curl, CURLOPT_TIMEOUT, 30);\r\n            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 11'));\r\n            curl_setopt($curl, CURLOPT_URL,\"http://rspamd/fuzzydel\");\r\n            curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);\r\n            // It is most likely not a spam hash, so we ignore any error/warning response\r\n            // $response = curl_exec($curl);\r\n            if (!curl_errno($curl)) {\r\n              curl_close($curl);\r\n              $curl = curl_init();\r\n              curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n              curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n              curl_setopt($curl, CURLOPT_POST, 1);\r\n              curl_setopt($curl, CURLOPT_TIMEOUT, 30);\r\n              curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 13'));\r\n              curl_setopt($curl, CURLOPT_URL,\"http://rspamd/fuzzyadd\");\r\n              curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);\r\n              $response = curl_exec($curl);\r\n              curl_exec($curl);\r\n              if (!curl_errno($curl)) {\r\n                $response = json_decode($response, true);\r\n                if (isset($response['error'])) {\r\n                  if (stripos($response['error'], 'No content to generate fuzzy') === false) {\r\n                    $_SESSION['return'][] = array(\r\n                      'type' => 'warning',\r\n                      'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                      'msg' => array('fuzzy_learn_error', $response['error'])\r\n                    );\r\n                  }\r\n                }\r\n              }\r\n              curl_close($curl);\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('learned_ham', $id)\r\n              );\r\n              continue;\r\n            }\r\n            else {\r\n              curl_close($curl);\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('ham_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))\r\n              );\r\n              continue;\r\n            }\r\n            curl_close($curl);\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('ham_learn_error', 'unknown')\r\n            );\r\n            continue;\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('ham_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))\r\n            );\r\n            curl_close($curl);\r\n            continue;\r\n          }\r\n          curl_close($curl);\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('ham_learn_error', 'unknown')\r\n          );\r\n          continue;\r\n        }\r\n      }\r\n      elseif ($_data['action'] == 'learnspam') {\r\n        if (!is_array($_data['id'])) {\r\n          $ids = array();\r\n          $ids[] = $_data['id'];\r\n        }\r\n        else {\r\n          $ids = $_data['id'];\r\n        }\r\n        foreach ($ids as $id) {\r\n          if (!is_numeric($id)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            continue;\r\n          }\r\n          $stmt = $pdo->prepare('SELECT `msg`, `rcpt`, `action` FROM `quarantine` WHERE `id` = :id');\r\n          $stmt->execute(array(':id' => $id));\r\n          $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) && $_SESSION['mailcow_cc_role'] != 'admin' || empty($row['rcpt'])) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => 'access_denied'\r\n            );\r\n            continue;\r\n          }\r\n          $stmt = $pdo->prepare(\"DELETE FROM `quarantine` WHERE `id` = :id\");\r\n          $stmt->execute(array(\r\n            ':id' => $id\r\n          ));\r\n          $curl = curl_init();\r\n          curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n          curl_setopt($curl, CURLOPT_POST, 1);\r\n          curl_setopt($curl, CURLOPT_TIMEOUT, 30);\r\n          curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));\r\n          curl_setopt($curl, CURLOPT_URL,\"http://rspamd/learnspam\");\r\n          curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);\r\n          $response = curl_exec($curl);\r\n          if (!curl_errno($curl)) {\r\n            $response = json_decode($response, true);\r\n            if (isset($response['error'])) {\r\n              if (stripos($response['error'], 'already learned') === false) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                  'msg' => array('spam_learn_error', $response['error'])\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            curl_close($curl);\r\n            $curl = curl_init();\r\n            curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n            curl_setopt($curl, CURLOPT_POST, 1);\r\n            curl_setopt($curl, CURLOPT_TIMEOUT, 30);\r\n            curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 13'));\r\n            curl_setopt($curl, CURLOPT_URL,\"http://rspamd/fuzzydel\");\r\n            curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);\r\n            // It is most likely not a spam hash, so we ignore any error/warning response\r\n            // $response = curl_exec($curl);\r\n            if (!curl_errno($curl)) {\r\n              curl_close($curl);\r\n              $curl = curl_init();\r\n              curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n              curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\r\n              curl_setopt($curl, CURLOPT_POST, 1);\r\n              curl_setopt($curl, CURLOPT_TIMEOUT, 30);\r\n              curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: text/plain', 'Flag: 11'));\r\n              curl_setopt($curl, CURLOPT_URL,\"http://rspamd/fuzzyadd\");\r\n              curl_setopt($curl, CURLOPT_POSTFIELDS, $row['msg']);\r\n              $response = curl_exec($curl);\r\n              curl_exec($curl);\r\n              if (!curl_errno($curl)) {\r\n                $response = json_decode($response, true);\r\n                if (isset($response['error'])) {\r\n                  if (stripos($response['error'], 'No content to generate fuzzy') === false) {\r\n                    $_SESSION['return'][] = array(\r\n                      'type' => 'warning',\r\n                      'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                      'msg' => array('fuzzy_learn_error', $response['error'])\r\n                    );\r\n                  }\r\n                }\r\n              }\r\n              curl_close($curl);\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'success',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('qlearn_spam', $id)\r\n              );\r\n              continue;\r\n            }\r\n            else {\r\n              curl_close($curl);\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('spam_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))\r\n              );\r\n              continue;\r\n            }\r\n            curl_close($curl);\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('spam_learn_error', 'unknown')\r\n            );\r\n            continue;\r\n          }\r\n          else {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('spam_learn_error', 'Curl: ' . curl_strerror(curl_errno($curl)))\r\n            );\r\n            curl_close($curl);\r\n            continue;\r\n          }\r\n          curl_close($curl);\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('spam_learn_error', 'unknown')\r\n          );\r\n          continue;\r\n        }\r\n      }\r\n      return true;\r\n    break;\r\n    case 'get':\r\n      if ($_SESSION['mailcow_cc_role'] == \"user\") {\r\n        $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE(\"VIRUS_FOUND\", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` = :mbox');\r\n        $stmt->execute(array(':mbox' => $_SESSION['mailcow_cc_username']));\r\n        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n        while($row = array_shift($rows)) {\r\n          $q_meta[] = $row;\r\n        }\r\n      }\r\n      elseif ($_SESSION['mailcow_cc_role'] == \"admin\") {\r\n        $stmt = $pdo->query('SELECT `id`, `qid`, `subject`, LOCATE(\"VIRUS_FOUND\", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine`');\r\n        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n        while($row = array_shift($rows)) {\r\n          $q_meta[] = $row;\r\n        }\r\n      }\r\n      else {\r\n        $domains = array_merge(mailbox('get', 'domains'), mailbox('get', 'alias_domains'));\r\n        foreach ($domains as $domain) {\r\n          $stmt = $pdo->prepare('SELECT `id`, `qid`, `subject`, LOCATE(\"VIRUS_FOUND\", `symbols`) AS `virus_flag`, `score`, `rcpt`, `sender`, `action`, UNIX_TIMESTAMP(`created`) AS `created`, `notified` FROM `quarantine` WHERE `rcpt` REGEXP :domain');\r\n          $stmt->execute(array(':domain' => '@' . $domain . '$'));\r\n          $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n          while($row = array_shift($rows)) {\r\n            $q_meta[] = $row;\r\n          }\r\n        }\r\n      }\r\n      return $q_meta;\r\n    break;\r\n    case 'settings':\r\n      try {\r\n        if ($_SESSION['mailcow_cc_role'] == \"admin\") {\r\n          $settings['exclude_domains'] = json_decode($redis->Get('Q_EXCLUDE_DOMAINS'), true);\r\n        }\r\n        $settings['max_size'] = $redis->Get('Q_MAX_SIZE');\r\n        $settings['max_score'] = $redis->Get('Q_MAX_SCORE');\r\n        $settings['max_age'] = $redis->Get('Q_MAX_AGE');\r\n        $settings['retention_size'] = $redis->Get('Q_RETENTION_SIZE');\r\n        $settings['release_format'] = $redis->Get('Q_RELEASE_FORMAT');\r\n        $settings['subject'] = $redis->Get('Q_SUBJ');\r\n        $settings['sender'] = $redis->Get('Q_SENDER');\r\n        $settings['bcc'] = $redis->Get('Q_BCC');\r\n        $settings['redirect'] = $redis->Get('Q_REDIRECT');\r\n        $settings['html_tmpl'] = htmlspecialchars($redis->Get('Q_HTML'));\r\n        if (empty($settings['html_tmpl'])) {\r\n          $settings['html_tmpl'] = htmlspecialchars(file_get_contents(\"/tpls/quarantine.tpl\"));\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return $settings;\r\n    break;\r\n    case 'details':\r\n      if (!is_numeric($_data) || empty($_data)) {\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE `id`= :id');\r\n      $stmt->execute(array(':id' => $_data));\r\n      $row = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $row['rcpt']) || $_SESSION['mailcow_cc_role'] == 'admin') {\r\n        return $row;\r\n      }\r\n      logger(array('return' => array(\r\n        array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        )\r\n      )));\r\n      return false;\r\n    break;\r\n    case 'hash_details':\r\n      $hash = trim($_data);\r\n      if (preg_match(\"/^([a-f0-9]{64})$/\", $hash) === false) {\r\n        logger(array('return' => array(\r\n          array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => 'access_denied'\r\n          )\r\n        )));\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare('SELECT * FROM `quarantine` WHERE `qhash` = :hash');\n      $stmt->execute(array(':hash' => $hash));\r\n      return $stmt->fetch(PDO::FETCH_ASSOC);\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.quota_notification.inc.php",
    "content": "<?php\r\nfunction quota_notification($_action, $_data = null) {\r\n\tglobal $redis;\r\n\t$_data_log = $_data;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_data_log),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  switch ($_action) {\r\n    case 'edit':\r\n      $retention_size = $_data['retention_size'];\r\n      if ($_data['release_format'] == 'attachment' || $_data['release_format'] == 'raw') {\r\n        $release_format = $_data['release_format'];\r\n      }\r\n      else {\r\n        $release_format = 'raw';\r\n      }\r\n      $subject = $_data['subject'];\r\n      $sender = preg_replace('/[\\x00-\\x1F\\x80-\\xFF]/', '', $_data['sender']);\r\n      if (filter_var($sender, FILTER_VALIDATE_EMAIL) === false) {\r\n        $sender = '';\r\n      }\r\n      $html = $_data['html_tmpl'];\r\n      try {\r\n        $redis->Set('QW_SENDER', $sender);\r\n        $redis->Set('QW_SUBJ', $subject);\r\n        $redis->Set('QW_HTML', $html);\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => 'saved_settings'\r\n      );\r\n    break;\r\n    case 'get':\r\n      try {\r\n        $settings['subject'] = $redis->Get('QW_SUBJ');\r\n        $settings['sender'] = $redis->Get('QW_SENDER');\r\n        $settings['html_tmpl'] = htmlspecialchars($redis->Get('QW_HTML'));\r\n        if (empty($settings['html_tmpl'])) {\r\n          $settings['html_tmpl'] = htmlspecialchars(file_get_contents(\"/tpls/quota.tpl\"));\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return $settings;\r\n    break;\r\n  }\r\n}\r\nfunction quota_notification_bcc($_action, $_data = null) {\r\n\tglobal $redis;\r\n\t$_data_log = $_data;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\r\n    $_SESSION['return'][] = array(\r\n      'type' => 'danger',\r\n      'log' => array(__FUNCTION__, $_action, $_data_log),\r\n      'msg' => 'access_denied'\r\n    );\r\n    return false;\r\n  }\r\n  switch ($_action) {\r\n    case 'edit':\r\n      $domain = $_data['domain'];\r\n      if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $active = intval($_data['active']);\r\n      $bcc_rcpts = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['bcc_rcpt']));\r\n      foreach ($bcc_rcpts as $i => &$rcpt) {\r\n        $rcpt = preg_replace('/[\\x00-\\x1F\\x80-\\xFF]/', '', $rcpt);\r\n          if (!empty($rcpt) && filter_var($rcpt, FILTER_VALIDATE_EMAIL) === false) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('goto_invalid', htmlspecialchars($rcpt))\r\n            );\r\n            unset($bcc_rcpts[$i]);\r\n            continue;\r\n          }\r\n      }\r\n      $bcc_rcpts = array_unique($bcc_rcpts);\r\n      $bcc_rcpts = array_filter($bcc_rcpts);\r\n      if (empty($bcc_rcpts)) {\r\n        $active = 0;\r\n        \r\n      }\r\n      try {\r\n        $redis->hSet('QW_BCC', $domain, json_encode(array('bcc_rcpts' => $bcc_rcpts, 'active' => $active)));\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => 'saved_settings'\r\n      );\r\n    break;\r\n    case 'get':\r\n      $domain = $_data;\r\n      if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $domain)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      try {\r\n        return json_decode($redis->hGet('QW_BCC', $domain), true);\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.ratelimit.inc.php",
    "content": "<?php\r\nfunction ratelimit($_action, $_scope, $_data = null, $_extra = null) {\r\n  global $redis;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'edit':\r\n      if (!hasACLAccess(\"ratelimit\")) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      switch ($_scope) {\r\n        case 'domain':\r\n          if (!is_array($_data['object'])) {\r\n            $objects = array();\r\n            $objects[] = $_data['object'];\r\n          }\r\n          else {\r\n            $objects = $_data['object'];\r\n          }\r\n          foreach ($objects as $object) {\r\n            $rl_value = intval($_data['rl_value']);\r\n            $rl_frame = $_data['rl_frame'];\r\n            if (!in_array($rl_frame, array('s', 'm', 'h', 'd'))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'rl_timeframe'\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (empty($rl_value)) {\r\n              try {\r\n                $redis->hDel('RL_VALUE', $object);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            else {\r\n              try {\r\n                $redis->hSet('RL_VALUE', $object, $rl_value . ' / 1' . $rl_frame);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('rl_saved', $object)\r\n            );\r\n          }\r\n        break;\r\n        case 'mailbox':\r\n          if (!is_array($_data['object'])) {\r\n            $objects = array();\r\n            $objects[] = $_data['object'];\r\n          }\r\n          else {\r\n            $objects = $_data['object'];\r\n          }\r\n          foreach ($objects as $object) {\r\n            $rl_value = intval($_data['rl_value']);\r\n            $rl_frame = $_data['rl_frame'];\r\n            if (!in_array($rl_frame, array('s', 'm', 'h', 'd'))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'rl_timeframe'\r\n              );\r\n              continue;\r\n            }\r\n            if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $object)\r\n                || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin' && $_SESSION['access_all_exception'] != '1')) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                'msg' => 'access_denied'\r\n              );\r\n              continue;\r\n            }\r\n            if (empty($rl_value)) {\r\n              try {\r\n                $redis->hDel('RL_VALUE', $object);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            else {\r\n              try {\r\n                $redis->hSet('RL_VALUE', $object, $rl_value . ' / 1' . $rl_frame);\r\n              }\r\n              catch (RedisException $e) {\r\n                $_SESSION['return'][] = array(\r\n                  'type' => 'danger',\r\n                  'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n                  'msg' => array('redis_error', $e)\r\n                );\r\n                continue;\r\n              }\r\n            }\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'success',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('rl_saved', $object)\r\n            );\r\n          }\r\n        break;\r\n      }\r\n    break;\r\n    case 'get':\r\n      switch ($_scope) {\r\n        case 'domain':\r\n          if (!hasDomainAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)) {\r\n            return false;\r\n          }\r\n          try {\r\n            if ($rl_value = $redis->hGet('RL_VALUE', $_data)) {\r\n              $rl = explode(' / 1', $rl_value);\r\n              $data['value'] = $rl[0];\r\n              $data['frame'] = $rl[1];\r\n              return $data;\r\n            }\r\n            else {\r\n              return false;\r\n            }\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          return false;\r\n        break;\r\n        case 'mailbox':\r\n          if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $_data)\r\n            || ($_SESSION['mailcow_cc_role'] != 'admin' && $_SESSION['mailcow_cc_role'] != 'domainadmin')) {\r\n            return false;\r\n          }\r\n          try {\r\n            if ($rl_value = $redis->hGet('RL_VALUE', $_data)) {\r\n              $rl = explode(' / 1', $rl_value);\r\n              $data['value'] = $rl[0];\r\n              $data['frame'] = $rl[1];\r\n              return $data;\r\n            }\r\n            else {\r\n              return false;\r\n            }\r\n          }\r\n          catch (RedisException $e) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n              'msg' => array('redis_error', $e)\r\n            );\r\n            return false;\r\n          }\r\n          return false;\r\n        break;\r\n      }\r\n    break;\r\n    case 'delete':\r\n      $data['hash'] = $_data;\r\n      if ($_SESSION['mailcow_cc_role'] != 'admin' || !preg_match('/^RL[0-9A-Za-z=]+$/i', trim($data['hash']))) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_type, $_data_log, $_attr),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      try {\r\n        $data_rllog = $redis->lRange('RL_LOG', 0, -1);\r\n        if ($data_rllog) {\r\n          foreach ($data_rllog as $json_line) {\r\n            if (preg_match('/' . $data['hash'] . '/i', $json_line)) {\r\n              $redis->lRem('RL_LOG', $json_line, 0);\r\n            }\r\n          }\r\n        }\r\n        if ($redis->type($data['hash']) == Redis::REDIS_HASH) {\r\n          $redis->delete($data['hash']);\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'success',\r\n            'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n            'msg' => 'hash_deleted'\r\n          );\r\n          return true;\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'warning',\r\n            'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n            'msg' => 'hash_not_found'\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      catch (RedisException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_scope, $_data_log),\r\n          'msg' => array('redis_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      return false;\r\n    break;\r\n  }\r\n}"
  },
  {
    "path": "data/web/inc/functions.rspamd.inc.php",
    "content": "<?php\r\nfunction rsettings($_action, $_data = null) {\r\n\tglobal $pdo;\r\n\tglobal $lang;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'add':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $content = $_data['content'];\r\n      $desc = $_data['desc'];\r\n      $active = intval($_data['active']);\r\n      if (empty($content)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'map_content_empty'\r\n        );\r\n        return false;\r\n      }\r\n      $stmt = $pdo->prepare(\"INSERT INTO `settingsmap` (`content`, `desc`, `active`)\r\n        VALUES (:content, :desc, :active)\");\r\n      $stmt->execute(array(\r\n        ':content' => $content,\r\n        ':desc' => $desc,\r\n        ':active' => $active\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => 'settings_map_added'\r\n      );\r\n    break;\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = rsettings('details', $id);\r\n        if (!empty($is_now)) {\r\n          $content = (!empty($_data['content'])) ? $_data['content'] : $is_now['content'];\r\n          $desc = (!empty($_data['desc'])) ? $_data['desc'] : $is_now['desc'];\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('settings_map_invalid', $id)\r\n          );\r\n          continue;\r\n        }\r\n        $content = trim($content);\r\n        $stmt = $pdo->prepare(\"UPDATE `settingsmap` SET\r\n          `content` = :content,\r\n          `desc` = :desc,\r\n          `active` = :active\r\n            WHERE `id` = :id\");\r\n        $stmt->execute(array(\r\n          ':content' => $content,\r\n          ':desc' => $desc,\r\n          ':active' => $active,\r\n          ':id' => $id\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('object_modified', htmlspecialchars(implode(',', $ids)))\r\n        );\r\n      }\r\n    break;\r\n    case 'delete':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $stmt = $pdo->prepare(\"DELETE FROM `settingsmap` WHERE `id`= :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('settings_map_removed', htmlspecialchars($id))\r\n        );\r\n      }\r\n    break;\r\n    case 'get':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        return false;\r\n      }\r\n      $settingsmaps = array();\r\n      $stmt = $pdo->query(\"SELECT `id`, `desc`, `active` FROM `settingsmap`\");\r\n      $settingsmaps = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      return $settingsmaps;\r\n    break;\r\n    case 'details':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\" || !isset($_data)) {\r\n        return false;\r\n      }\r\n      $settingsmapdata = array();\r\n      $stmt = $pdo->prepare(\"SELECT `id`,\r\n        `desc`,\r\n        `content`,\r\n        `active`\r\n          FROM `settingsmap`\r\n            WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $_data));\r\n      $settingsmapdata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      return $settingsmapdata;\r\n    break;\r\n  }\r\n}\r\nfunction rspamd_maps($_action, $_data = null) {\r\n\tglobal $pdo;\r\n\tglobal $lang;\r\n\tglobal $RSPAMD_MAPS;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, '-'),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $maps = (array)$_data['map'];\r\n      $valid_maps = array();\r\n      foreach ($maps as $map) {\r\n        $is_valid = false;\r\n        foreach ($RSPAMD_MAPS as $rspamd_map_type) {\r\n          if (in_array($map, $rspamd_map_type)) {\r\n            $is_valid = true;\r\n            break;\r\n          }\r\n        }\r\n        if ($is_valid) {\r\n          array_push($valid_maps, $map);\r\n        } else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, '-'),\r\n            'msg' => array('global_map_invalid', $map)\r\n          );\r\n        }\r\n      }\r\n      foreach ($valid_maps as $map) {\r\n        try {\r\n          if (file_exists('/rspamd_custom_maps/' . $map)) {\r\n            $map_content = trim($_data['rspamd_map_data']);\r\n            $map_handle = fopen('/rspamd_custom_maps/' . $map, 'w');\r\n            if (!$map_handle) {\r\n              throw new Exception($lang['danger']['file_open_error']);\r\n            }\r\n            fwrite($map_handle, $map_content . PHP_EOL);\r\n            fclose($map_handle);\r\n            sleep(1.5);\r\n            touch('/rspamd_custom_maps/' . $map);\r\n          }\r\n        }\r\n        catch (Exception $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, '-'),\r\n            'msg' => array('global_map_write_error', htmlspecialchars($map), htmlspecialchars($e->getMessage()))\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, '-'),\r\n          'msg' => array('object_modified', htmlspecialchars($map))\r\n        );\r\n      }\r\n    break;\r\n  }\r\n}\r\nfunction rspamd_actions() {\r\n  if (isset($_SESSION[\"mailcow_cc_role\"]) && $_SESSION[\"mailcow_cc_role\"] == \"admin\") {\r\n    $curl = curl_init();\r\n    curl_setopt($curl, CURLOPT_UNIX_SOCKET_PATH, '/var/lib/rspamd/rspamd.sock');\r\n    curl_setopt($curl, CURLOPT_URL,\"http://rspamd/stat\");\r\n    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);\r\n    $data = curl_exec($curl);\r\n    if ($data) {\r\n      $return = array();\r\n      $stats_array = json_decode($data, true)['actions'];\r\n      $stats_array['soft reject'] = $stats_array['soft reject'] + $stats_array['greylist'];\r\n      unset($stats_array['greylist']);\r\n      foreach ($stats_array as $action => $count) {\r\n        $return[] = array($action, $count);\r\n      }\r\n      return $return;\r\n    }\r\n    else {\r\n      return false;\r\n    }\r\n  }\r\n  else {\r\n    return false;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.tls_policy_maps.inc.php",
    "content": "<?php\r\nfunction tls_policy_maps($_action, $_data = null, $attr = null) {\r\n\tglobal $pdo;\r\n\tglobal $lang;\r\n  if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n    return false;\r\n  }\r\n  switch ($_action) {\r\n    case 'add':\r\n      $dest = idn_to_ascii(trim($_data['dest']), 0, INTL_IDNA_VARIANT_UTS46);\r\n      $policy = strtolower(trim($_data['policy']));\r\n      $parameters = (isset($_data['parameters']) && !empty($_data['parameters'])) ? $_data['parameters'] : '';\r\n      if (empty($dest) || in_array($dest, array('.', '*', '@'))) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => 'tls_policy_map_dest_invalid'\r\n        );\r\n        return false;\r\n      }\r\n      if (!empty($parameters)) {\r\n        foreach (explode(' ', $parameters) as $parameter) {\r\n          if (!preg_match('/(.+)\\=(.+)/i', $parameter)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n              'msg' => 'tls_policy_map_parameter_invalid'\r\n            );\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n      $active = intval($_data['active']);\r\n      $tls_policy_maps = tls_policy_maps('get');\r\n      foreach ($tls_policy_maps as $tls_policy_map) {\r\n        if (tls_policy_maps('details', $tls_policy_map)['dest'] == $dest) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => array('tls_policy_map_entry_exists', htmlspecialchars($dest))\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      $stmt = $pdo->prepare(\"INSERT INTO `tls_policy_override` (`dest`, `policy`, `parameters`, `active`) VALUES\r\n        (:dest, :policy, :parameters, :active)\");\r\n      $stmt->execute(array(\r\n        ':dest' => $dest,\r\n        ':policy' => $policy,\r\n        ':parameters' => $parameters,\r\n        ':active' => $active\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n        'msg' => array('tls_policy_map_entry_saved', htmlspecialchars($dest))\r\n      );\r\n    break;\r\n    case 'edit':\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = tls_policy_maps('details', $id);\r\n        if (!empty($is_now)) {\r\n          $active = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n          $dest = (!empty($_data['dest'])) ? $_data['dest'] : $is_now['dest'];\r\n          $policy = (!empty($_data['policy'])) ? $_data['policy'] : $is_now['policy'];\r\n          $parameters = (isset($_data['parameters'])) ? $_data['parameters'] : $is_now['parameters'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'access_denied'\r\n          );\r\n          continue;\r\n        }\r\n        if (empty($dest) || in_array($dest, array('.', '*', '@'))) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n            'msg' => 'tls_policy_map_dest_invalid'\r\n          );\r\n          return false;\r\n        }\r\n        if (!empty($parameters)) {\r\n          foreach (explode(' ', $parameters) as $parameter) {\r\n            if (!preg_match('/(.+)\\=(.+)/i', $parameter)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n                'msg' => 'tls_policy_map_parameter_invalid'\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n        $tls_policy_maps = tls_policy_maps('get');\r\n        foreach ($tls_policy_maps as $tls_policy_map) {\r\n          if ($tls_policy_map == $id) { continue; }\r\n          if (tls_policy_maps('details', $tls_policy_map)['dest'] == $dest) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n              'msg' => array('recipient_map_entry_exists', htmlspecialchars($dest))\r\n            );\r\n            return false;\r\n          }\r\n        }\r\n        $stmt = $pdo->prepare(\"UPDATE `tls_policy_override` SET\r\n          `dest` = :dest,\r\n          `policy` = :policy,\r\n          `parameters` = :parameters,\r\n          `active` = :active\r\n            WHERE `id`= :id\");\r\n        $stmt->execute(array(\r\n          ':dest' => $dest,\r\n          ':policy' => $policy,\r\n          ':parameters' => $parameters,\r\n          ':active' => $active,\r\n          ':id' => $id\r\n        ));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('tls_policy_map_entry_saved', htmlspecialchars($dest))\r\n        );\r\n      }\r\n    break;\r\n    case 'details':\r\n      $mapdata = array();\r\n      $id = intval($_data);\r\n      $stmt = $pdo->prepare(\"SELECT `id`,\r\n        `dest`,\r\n        `policy`,\r\n        `parameters`,\r\n        `active` AS `active`,\r\n        `created`,\r\n        `modified` FROM `tls_policy_override`\r\n          WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $id));\r\n      $mapdata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      return $mapdata;\r\n    break;\r\n    case 'get':\r\n      $mapdata = array();\r\n      $all_items = array();\r\n      $id = intval($_data);\r\n      $stmt = $pdo->query(\"SELECT `id` FROM `tls_policy_override`\");\r\n      $all_items = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      foreach ($all_items as $i) {\r\n        $mapdata[] = $i['id'];\r\n      }\r\n      $all_items = null;\r\n      return $mapdata;\r\n    break;\r\n    case 'delete':\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        if (!is_numeric($id)) {\r\n          return false;\r\n        }\r\n        $stmt = $pdo->prepare(\"DELETE FROM `tls_policy_override` WHERE `id`= :id\");\r\n        $stmt->execute(array(':id' => $id));\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data, $_attr),\r\n          'msg' => array('tls_policy_map_entry_deleted', htmlspecialchars($id))\r\n        );\r\n      }\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/functions.transports.inc.php",
    "content": "<?php\r\nfunction relayhost($_action, $_data = null) {\r\n  global $pdo;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'add':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $hostname = trim($_data['hostname']);\r\n      $username = str_replace(':', '\\:', trim($_data['username']));\r\n      $password = str_replace(':', '\\:', trim($_data['password']));\r\n      if (empty($hostname)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('invalid_host', htmlspecialchars($host))\r\n        );\r\n        return false;\r\n      }\r\n      try {\r\n        $stmt = $pdo->prepare(\"INSERT INTO `relayhosts` (`hostname`, `username` ,`password`, `active`)\r\n          VALUES (:hostname, :username, :password, :active)\");\r\n        $stmt->execute(array(\r\n          ':hostname' => $hostname,\r\n          ':username' => $username,\r\n          ':password' => str_replace(':', '\\:', $password),\r\n          ':active' => '1'\r\n        ));\r\n      }\r\n      catch (PDOException $e) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('mysql_error', $e)\r\n        );\r\n        return false;\r\n      }\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => array('relayhost_added', htmlspecialchars(implode(', ', (array)$hosts)))\r\n      );\r\n    break;\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = relayhost('details', $id);\r\n        if (!empty($is_now)) {\r\n          $hostname = (!empty($_data['hostname'])) ? trim($_data['hostname']) : $is_now['hostname'];\r\n          $username = (isset($_data['username'])) ? trim($_data['username']) : $is_now['username'];\r\n          $password = (isset($_data['password'])) ? trim($_data['password']) : $is_now['password'];\r\n          $active   = (isset($_data['active'])) ? intval($_data['active']) : $is_now['active'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('relayhost_invalid', $id)\r\n          );\r\n          continue;\r\n        }\r\n        try {\r\n          $stmt = $pdo->prepare(\"UPDATE `relayhosts` SET\r\n            `hostname` = :hostname,\r\n            `username` = :username,\r\n            `password` = :password,\r\n            `active` = :active\r\n              WHERE `id` = :id\");\r\n          $stmt->execute(array(\r\n            ':id' => $id,\r\n            ':hostname' => $hostname,\r\n            ':username' => $username,\r\n            ':password' => $password,\r\n            ':active' => $active\r\n          ));\r\n        }\r\n        catch (PDOException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('mysql_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('object_modified', htmlspecialchars(implode(', ', (array)$hostnames)))\r\n        );\r\n      }\r\n    break;\r\n    case 'delete':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        try {\r\n          $stmt = $pdo->prepare(\"DELETE FROM `relayhosts` WHERE `id`= :id\");\r\n          $stmt->execute(array(':id' => $id));\r\n          $stmt = $pdo->prepare(\"UPDATE `domain` SET `relayhost` = '0' WHERE `relayhost`= :id\");\r\n          $stmt->execute(array(':id' => $id));\r\n        }\r\n        catch (PDOException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('mysql_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('relayhost_removed', htmlspecialchars($id))\r\n        );\r\n      }\r\n    break;\r\n    case 'get':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\" && $_SESSION['mailcow_cc_role'] != \"domainadmin\") {\r\n        return false;\r\n      }\r\n      $relayhosts = array();\r\n      $stmt = $pdo->query(\"SELECT `id`, `hostname`, `username`, `active` FROM `relayhosts`\");\r\n      $relayhosts = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      return $relayhosts;\r\n    break;\r\n    case 'details':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\" || !isset($_data)) {\r\n        return false;\r\n      }\r\n      $relayhostdata = array();\r\n      $stmt = $pdo->prepare(\"SELECT `id`,\r\n        `hostname`,\r\n        `username`,\r\n        `password`,\r\n        `active`,\r\n        CONCAT(LEFT(`password`, 3), '...') AS `password_short`\r\n          FROM `relayhosts`\r\n            WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $_data));\r\n      $relayhostdata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      if (!empty($relayhostdata)) {\r\n        $stmt = $pdo->prepare(\"SELECT GROUP_CONCAT(`domain` SEPARATOR ', ') AS `used_by_domains` FROM `domain` WHERE `relayhost` = :id\");\r\n        $stmt->execute(array(':id' => $_data));\r\n        $used_by_domains = $stmt->fetch(PDO::FETCH_ASSOC)['used_by_domains'];\r\n        $used_by_domains = (empty($used_by_domains)) ? '' : $used_by_domains;\r\n        $relayhostdata['used_by_domains'] = $used_by_domains;\r\n        $stmt = $pdo->prepare(\"SELECT GROUP_CONCAT(`username` SEPARATOR ', ') AS `used_by_mailboxes` FROM `mailbox` WHERE JSON_VALUE(`attributes`, '$.relayhost') = :id\");\r\n        $stmt->execute(array(':id' => $_data));\r\n        $used_by_mailboxes = $stmt->fetch(PDO::FETCH_ASSOC)['used_by_mailboxes'];\r\n        $used_by_mailboxes = (empty($used_by_mailboxes)) ? '' : $used_by_mailboxes;\r\n        $relayhostdata['used_by_mailboxes'] = $used_by_mailboxes;\r\n      }\r\n      return $relayhostdata;\r\n    break;\r\n  }\r\n}\r\nfunction transport($_action, $_data = null) {\r\n  global $pdo;\r\n  global $lang;\r\n  $_data_log = $_data;\r\n  switch ($_action) {\r\n    case 'add':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $destinations  = array_map('trim', preg_split( \"/( |,|;|\\n)/\", $_data['destination']));\r\n      $active = intval($_data['active']);\r\n      $is_mx_based = intval($_data['is_mx_based']);\r\n      $nexthop = trim($_data['nexthop']);\r\n      if (filter_var($nexthop, FILTER_VALIDATE_IP)) {\r\n        $nexthop = '[' . $nexthop . ']';\r\n      }\r\n      preg_match('/\\[(.+)\\].*/', $nexthop, $next_hop_matches);\r\n      $next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;\r\n      $username = str_replace(':', '\\:', trim($_data['username']));\r\n      $password = str_replace(':', '\\:', trim($_data['password']));\r\n      if (empty($nexthop)) {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('invalid_nexthop')\r\n        );\r\n        return false;\r\n      }\r\n      $transports = transport('get');\r\n      if (!empty($transports)) {\r\n        foreach ($transports as $transport) {\r\n          $transport_data = transport('details', $transport['id']);\r\n          $existing_nh[] = $transport_data['nexthop'];\r\n          preg_match('/\\[(.+)\\].*/', $transport_data['nexthop'], $existing_clean_nh[]);\r\n          if (($transport_data['nexthop'] == $nexthop || $transport_data['nexthop'] == $next_hop_clean) && $transport_data['username'] != $username) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => 'invalid_nexthop_authenticated'\r\n            );\r\n            return false;\r\n          }\r\n          foreach ($destinations as $d_ix => &$dest) {\r\n            if (empty($dest)) {\r\n              unset($destinations[$d_ix]);\r\n              continue;\r\n            }\r\n            if ($transport_data['destination'] == $dest) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('transport_dest_exists', $dest)\r\n              );\r\n              unset($destinations[$d_ix]);\r\n              continue;\r\n            }\r\n            // \".domain\" is a valid destination, \"..domain\" is not\r\n            if ($is_mx_based == 0 && (empty($dest) || (is_valid_domain_name(preg_replace('/^' . preg_quote('.', '/') . '/', '', $dest)) === false && $dest != '*' && filter_var($dest, FILTER_VALIDATE_EMAIL) === false))) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('invalid_destination', $dest)\r\n              );\r\n              unset($destinations[$d_ix]);\r\n              continue;\r\n            }\r\n            if ($is_mx_based == 1 && (empty($dest) || @preg_match('/' . $dest . '/', null) === false)) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('invalid_destination', $dest)\r\n              );\r\n              unset($destinations[$d_ix]);\r\n              continue;\r\n            }\r\n          }\r\n        }\r\n      }\r\n      $destinations = array_filter(array_values(array_unique($destinations)));\r\n      if (empty($destinations)) { return false; }\r\n      if (isset($next_hop_matches[1])) {\r\n        if ($existing_nh !== null && in_array($next_hop_clean, $existing_nh)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('next_hop_interferes', $next_hop_clean, $nexthop)\r\n          );\r\n          return false;\r\n        }\r\n      }\r\n      else {\r\n        foreach ($existing_clean_nh as $existing_clean_nh_each) {\r\n          if ($existing_clean_nh_each[1] == $nexthop) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('next_hop_interferes_any', $nexthop)\r\n            );\r\n            return false;\r\n          }\r\n        }\r\n      }\r\n      foreach ($destinations as $insert_dest) {\r\n        $stmt = $pdo->prepare(\"INSERT INTO `transports` (`nexthop`, `destination`, `is_mx_based`, `username` , `password`,  `active`)\r\n          VALUES (:nexthop, :destination, :is_mx_based, :username, :password, :active)\");\r\n        $stmt->execute(array(\r\n          ':nexthop' => $nexthop,\r\n          ':destination' => $insert_dest,\r\n          ':is_mx_based' => $is_mx_based,\r\n          ':username' => $username,\r\n          ':password' => str_replace(':', '\\:', $password),\r\n          ':active' => $active\r\n        ));\r\n      }\r\n      $stmt = $pdo->prepare(\"UPDATE `transports` SET\r\n        `username` = :username,\r\n        `password` = :password\r\n          WHERE `nexthop` = :nexthop\");\r\n      $stmt->execute(array(\r\n        ':nexthop' => $nexthop,\r\n        ':username' => $username,\r\n        ':password' => $password\r\n      ));\r\n      $_SESSION['return'][] = array(\r\n        'type' => 'success',\r\n        'log' => array(__FUNCTION__, $_action, $_data_log),\r\n        'msg' => array('relayhost_added', htmlspecialchars(implode(', ', (array)$hosts)))\r\n      );\r\n    break;\r\n    case 'edit':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        $is_now = transport('details', $id);\r\n        if (!empty($is_now)) {\r\n          $destination = (!empty($_data['destination'])) ? trim($_data['destination']) : $is_now['destination'];\r\n          $nexthop = (!empty($_data['nexthop'])) ? trim($_data['nexthop']) : $is_now['nexthop'];\r\n          $username = (isset($_data['username'])) ? trim($_data['username']) : $is_now['username'];\r\n          $password = (isset($_data['password'])) ? trim($_data['password']) : $is_now['password'];\r\n          $is_mx_based = (isset($_data['is_mx_based']) && $_data['is_mx_based'] != '') ? intval($_data['is_mx_based']) : $is_now['is_mx_based'];\r\n          $active   = (isset($_data['active']) && $_data['active'] != '') ? intval($_data['active']) : $is_now['active'];\r\n        }\r\n        else {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('relayhost_invalid', $id)\r\n          );\r\n          continue;\r\n        }\r\n        preg_match('/\\[(.+)\\].*/', $nexthop, $next_hop_matches);\r\n        if (filter_var($nexthop, FILTER_VALIDATE_IP)) {\r\n          $nexthop = '[' . $nexthop . ']';\r\n        }\r\n        $next_hop_clean = (isset($next_hop_matches[1])) ? $next_hop_matches[1] : $nexthop;\r\n        $transports = transport('get');\r\n        if (!empty($transports)) {\r\n          foreach ($transports as $transport) {\r\n            $transport_data = transport('details', $transport['id']);\r\n            if ($transport['id'] == $id) {\r\n              continue;\r\n            }\r\n            $existing_nh[] = $transport_data['nexthop'];\r\n            preg_match('/\\[(.+)\\].*/', $transport_data['nexthop'], $existing_clean_nh[]);\r\n            if ($transport_data['destination'] == $destination) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => 'transport_dest_exists'\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n        if ($is_mx_based == 0 && (empty($destination) || (is_valid_domain_name(preg_replace('/^' . preg_quote('.', '/') . '/', '', $destination)) === false && $destination != '*' && filter_var($destination, FILTER_VALIDATE_EMAIL) === false))) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('invalid_destination', $destination)\r\n          );\r\n          return false;\r\n        }\r\n        if ($is_mx_based == 1 && (empty($destination) || @preg_match('/' . $destination . '/', null) === false)) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('invalid_destination', $destination)\r\n          );\r\n          return false;\r\n        }\r\n        if (isset($next_hop_matches[1])) {\r\n          if ($existing_nh !== null && in_array($next_hop_clean, $existing_nh)) {\r\n            $_SESSION['return'][] = array(\r\n              'type' => 'danger',\r\n              'log' => array(__FUNCTION__, $_action, $_data_log),\r\n              'msg' => array('next_hop_interferes', $next_hop_clean, $nexthop)\r\n            );\r\n            return false;\r\n          }\r\n        }\r\n        else {\r\n          foreach ($existing_clean_nh as $existing_clean_nh_each) {\r\n            if ($existing_clean_nh_each[1] == $nexthop) {\r\n              $_SESSION['return'][] = array(\r\n                'type' => 'danger',\r\n                'log' => array(__FUNCTION__, $_action, $_data_log),\r\n                'msg' => array('next_hop_interferes_any', $nexthop)\r\n              );\r\n              return false;\r\n            }\r\n          }\r\n        }\r\n        if (empty($username)) {\r\n          $password = '';\r\n        }\r\n        try {\r\n          $stmt = $pdo->prepare(\"UPDATE `transports` SET\r\n            `destination` = :destination,\r\n            `is_mx_based` = :is_mx_based,\r\n            `nexthop` = :nexthop,\r\n            `username` = :username,\r\n            `password` = :password,\r\n            `active` = :active\r\n              WHERE `id` = :id\");\r\n          $stmt->execute(array(\r\n            ':id' => $id,\r\n            ':destination' => $destination,\r\n            ':is_mx_based' => $is_mx_based,\r\n            ':nexthop' => $nexthop,\r\n            ':username' => $username,\r\n            ':password' => $password,\r\n            ':active' => $active\r\n          ));\r\n          $stmt = $pdo->prepare(\"UPDATE `transports` SET\r\n            `username` = :username,\r\n            `password` = :password\r\n              WHERE `nexthop` = :nexthop\");\r\n          $stmt->execute(array(\r\n            ':nexthop' => $nexthop,\r\n            ':username' => $username,\r\n            ':password' => $password\r\n          ));\r\n        }\r\n        catch (PDOException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('mysql_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('object_modified', htmlspecialchars(implode(', ', (array)$hostnames)))\r\n        );\r\n      }\r\n    break;\r\n    case 'delete':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'danger',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => 'access_denied'\r\n        );\r\n        return false;\r\n      }\r\n      $ids = (array)$_data['id'];\r\n      foreach ($ids as $id) {\r\n        try {\r\n          $stmt = $pdo->prepare(\"DELETE FROM `transports` WHERE `id`= :id\");\r\n          $stmt->execute(array(':id' => $id));\r\n        }\r\n        catch (PDOException $e) {\r\n          $_SESSION['return'][] = array(\r\n            'type' => 'danger',\r\n            'log' => array(__FUNCTION__, $_action, $_data_log),\r\n            'msg' => array('mysql_error', $e)\r\n          );\r\n          continue;\r\n        }\r\n        $_SESSION['return'][] = array(\r\n          'type' => 'success',\r\n          'log' => array(__FUNCTION__, $_action, $_data_log),\r\n          'msg' => array('relayhost_removed', htmlspecialchars($id))\r\n        );\r\n      }\r\n    break;\r\n    case 'get':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\") {\r\n        return false;\r\n      }\r\n      $transports = array();\r\n      $stmt = $pdo->query(\"SELECT `id`, `is_mx_based`, `destination`, `nexthop`, `username` FROM `transports`\");\r\n      $transports = $stmt->fetchAll(PDO::FETCH_ASSOC);\r\n      return $transports;\r\n    break;\r\n    case 'details':\r\n      if ($_SESSION['mailcow_cc_role'] != \"admin\" || !isset($_data)) {\r\n        return false;\r\n      }\r\n      $transportdata = array();\r\n      $stmt = $pdo->prepare(\"SELECT `id`,\r\n        `is_mx_based`,\r\n        `destination`,\r\n        `nexthop`,\r\n        `username`,\r\n        `password`,\r\n        `active`,\r\n        CONCAT(LEFT(`password`, 3), '...') AS `password_short`\r\n          FROM `transports`\r\n            WHERE `id` = :id\");\r\n      $stmt->execute(array(':id' => $_data));\r\n      $transportdata = $stmt->fetch(PDO::FETCH_ASSOC);\r\n      return $transportdata;\r\n    break;\r\n  }\r\n}\r\n"
  },
  {
    "path": "data/web/inc/header.inc.php",
    "content": "<?php\n\n// CSS\nif (preg_match(\"/mailbox/i\", $_SERVER['REQUEST_URI'])) {\n  $css_minifier->add('/web/css/site/mailbox.css');\n}\nif (preg_match(\"/admin/i\", $_SERVER['REQUEST_URI'])) {\n  $css_minifier->add('/web/css/site/admin.css');\n}\nif (preg_match(\"/user/i\", $_SERVER['REQUEST_URI'])) {\n  $css_minifier->add('/web/css/site/user.css');\n}\nif (preg_match(\"/edit/i\", $_SERVER['REQUEST_URI'])) {\n  $css_minifier->add('/web/css/site/edit.css');\n}\nif (preg_match(\"/(quarantine|qhandler)/i\", $_SERVER['REQUEST_URI'])) {\n  $css_minifier->add('/web/css/site/quarantine.css');\n}\nif (preg_match(\"/debug/i\", $_SERVER['REQUEST_URI'])) {\n  $css_minifier->add('/web/css/site/debug.css');\n}\nif ($_SERVER['REQUEST_URI'] == '/') {\n  $css_minifier->add('/web/css/site/index.css');\n}\n\n$hash = $css_minifier->getDataHash();\n$CSSPath = '/tmp/' . $hash . '.css';\nif(!file_exists($CSSPath)) {\n  $css_minifier->minify($CSSPath);\n  cleanupCSS($hash);\n}\n\n$mailcow_apps_processed = $MAILCOW_APPS;\n$app_links = customize('get', 'app_links');\n$app_links_processed = $app_links;\n$hide_mailcow_apps = true;\nfor ($i = 0; $i < count($mailcow_apps_processed); $i++) {\n  if ($hide_mailcow_apps && !$mailcow_apps_processed[$i]['hide']){\n    $hide_mailcow_apps = false;\n  }\n  if (!empty($_SESSION['mailcow_cc_username'])){\n    if ($app_links_processed[$i]['user_link']) {\n      $mailcow_apps_processed[$i]['user_link'] = str_replace('%u', $_SESSION['mailcow_cc_username'], $mailcow_apps_processed[$i]['user_link']);\n    } else {\n      $mailcow_apps_processed[$i]['user_link'] = $mailcow_apps_processed[$i]['link'];\n    }\n  }\n}\nif ($app_links_processed){\n  for ($i = 0; $i < count($app_links_processed); $i++) {\n    $key = array_key_first($app_links_processed[$i]);\n    if ($hide_mailcow_apps && !$app_links_processed[$i][$key]['hide']){\n      $hide_mailcow_apps = false;\n    }\n    if (!empty($_SESSION['mailcow_cc_username'])){\n      if ($app_links_processed[$i][$key]['user_link']) {\n        $app_links_processed[$i][$key]['user_link'] = str_replace('%u', $_SESSION['mailcow_cc_username'], $app_links_processed[$i][$key]['user_link']);\n      } else {\n        $app_links_processed[$i][$key]['user_link'] = $app_links_processed[$i][$key]['link'];\n      }\n    }\n  }\n}\n\n// Workaround to get text with <br> straight to twig.\n// Using \"nl2br\" doesn't work with Twig as it would escape everything by default.\nif (isset($UI_TEXTS[\"ui_footer\"])) {\n  $UI_TEXTS[\"ui_footer\"] = nl2br($UI_TEXTS[\"ui_footer\"]);\n}\n\n$globalVariables = [\n  'mailcow_hostname' => getenv('MAILCOW_HOSTNAME'),\n  'mailcow_locale' => @$_SESSION['mailcow_locale'],\n  'mailcow_cc_role' => @$_SESSION['mailcow_cc_role'],\n  'mailcow_cc_username' => @$_SESSION['mailcow_cc_username'],\n  'is_master' => preg_match('/y|yes/i', getenv('MASTER')),\n  'dual_login' => @$_SESSION['dual-login'],\n  'ui_texts' => $UI_TEXTS,\n  'css_path' => '/cache/'.basename($CSSPath),\n  'logo' => customize('get', 'main_logo'),\n  'logo_dark' => customize('get', 'main_logo_dark'),\n  'available_languages' => $AVAILABLE_LANGUAGES,\n  'lang' => $lang,\n  'skip_sogo' => (getenv('SKIP_SOGO') == 'y'),\n  'allow_admin_email_login' => (getenv('ALLOW_ADMIN_EMAIL_LOGIN') == 'n'),\n  'hide_mailcow_apps' => $hide_mailcow_apps,\n  'mailcow_apps' => $MAILCOW_APPS,\n  'mailcow_apps_processed' => $mailcow_apps_processed,\n  'app_links' => $app_links,\n  'app_links_processed' => $app_links_processed,\n  'is_root_uri' => (parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) == '/'),\n  'uri' => $_SERVER['REQUEST_URI'],\n];\n\nforeach ($globalVariables as $globalVariableName => $globalVariableValue) {\n  $twig->addGlobal($globalVariableName, $globalVariableValue);\n}\n"
  },
  {
    "path": "data/web/inc/init_db.inc.php",
    "content": "<?php\nfunction init_db_schema()\n{\n  try {\n    global $pdo;\n\n    $db_version = \"19022026_1220\";\n\n    $stmt = $pdo->query(\"SHOW TABLES LIKE 'versions'\");\n    $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n    if ($num_results != 0) {\n      $stmt = $pdo->query(\"SELECT `version` FROM `versions` WHERE `application` = 'db_schema'\");\n      if ($stmt->fetch(PDO::FETCH_ASSOC)['version'] == $db_version) {\n        return true;\n      }\n      if (!preg_match('/y|yes/i', getenv('MASTER'))) {\n        $_SESSION['return'][] = array(\n          'type' => 'warning',\n          'log' => array(__FUNCTION__),\n          'msg' => 'Database not initialized: not running db_init on slave.'\n        );\n        return true;\n      }\n    }\n\n    $views = array(\n      \"grouped_mail_aliases\" => \"CREATE VIEW grouped_mail_aliases (username, aliases) AS\n        SELECT goto, IFNULL(GROUP_CONCAT(address ORDER BY address SEPARATOR ' '), '') AS address FROM alias\n        WHERE address!=goto\n        AND active = '1'\n        AND sogo_visible = '1'\n        AND address NOT LIKE '@%'\n        GROUP BY goto;\",\n      // START\n      // Unused at the moment - we cannot allow to show a foreign mailbox as sender address in SOGo, as SOGo does not like this\n      // We need to create delegation in SOGo AND set a sender_acl in mailcow to allow to send as user X\n      \"grouped_sender_acl\" => \"CREATE VIEW grouped_sender_acl (username, send_as_acl) AS\n        SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl\n        WHERE send_as NOT LIKE '@%'\n        GROUP BY logged_in_as;\",\n      // END\n      \"grouped_sender_acl_external\" => \"CREATE VIEW grouped_sender_acl_external (username, send_as_acl) AS\n        SELECT logged_in_as, IFNULL(GROUP_CONCAT(send_as SEPARATOR ' '), '') AS send_as_acl FROM sender_acl\n        WHERE send_as NOT LIKE '@%' AND external = '1'\n        GROUP BY logged_in_as;\",\n      \"grouped_domain_alias_address\" => \"CREATE VIEW grouped_domain_alias_address (username, ad_alias) AS\n        SELECT username, IFNULL(GROUP_CONCAT(local_part, '@', alias_domain SEPARATOR ' '), '') AS ad_alias FROM mailbox\n        LEFT OUTER JOIN alias_domain ON target_domain=domain\n        GROUP BY username;\",\n      \"sieve_before\" => \"CREATE VIEW sieve_before (id, username, script_name, script_data) AS\n        SELECT md5(script_data), username, script_name, script_data FROM sieve_filters\n        WHERE filter_type = 'prefilter';\",\n      \"sieve_after\" => \"CREATE VIEW sieve_after (id, username, script_name, script_data) AS\n        SELECT md5(script_data), username, script_name, script_data FROM sieve_filters\n        WHERE filter_type = 'postfilter';\"\n    );\n\n    $tables = array(\n      \"versions\" => array(\n        \"cols\" => array(\n          \"application\" => \"VARCHAR(255) NOT NULL\",\n          \"version\" => \"VARCHAR(100) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"application\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"admin\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"password\" => \"VARCHAR(255) NOT NULL\",\n          \"superadmin\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE NOW(0)\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"attributes\" => \"JSON\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"fido2\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"friendlyName\" => \"VARCHAR(255)\",\n          \"rpId\" => \"VARCHAR(255) NOT NULL\",\n          \"credentialPublicKey\" => \"TEXT NOT NULL\",\n          \"certificateChain\" => \"TEXT\",\n          // Can be null for format \"none\"\n          \"certificate\" => \"TEXT\",\n          \"certificateIssuer\" => \"VARCHAR(255)\",\n          \"certificateSubject\" => \"VARCHAR(255)\",\n          \"signatureCounter\" => \"INT\",\n          \"AAGUID\" => \"BLOB\",\n          \"credentialId\" => \"BLOB NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE NOW(0)\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"_sogo_static_view\" => array(\n        \"cols\" => array(\n          \"c_uid\" => \"VARCHAR(255) NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"c_name\" => \"VARCHAR(255) NOT NULL\",\n          \"c_password\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"c_cn\" => \"VARCHAR(255)\",\n          \"c_l\" => \"VARCHAR(255)\",\n          \"c_o\" => \"VARCHAR(255)\",\n          \"c_ou\" => \"VARCHAR(255)\",\n          \"c_telephonenumber\" => \"VARCHAR(255)\",\n          \"mail\" => \"VARCHAR(255) NOT NULL\",\n          // TODO -> use TEXT and check if SOGo login breaks on empty aliases\n          \"aliases\" => \"TEXT NOT NULL\",\n          \"ad_aliases\" => \"VARCHAR(6144) NOT NULL DEFAULT ''\",\n          \"ext_acl\" => \"VARCHAR(6144) NOT NULL DEFAULT ''\",\n          \"kind\" => \"VARCHAR(100) NOT NULL DEFAULT ''\",\n          \"multiple_bookings\" => \"INT NOT NULL DEFAULT -1\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_uid\")\n          ),\n          \"key\" => array(\n            \"domain\" => array(\"domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"relayhosts\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"hostname\" => \"VARCHAR(255) NOT NULL\",\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"password\" => \"VARCHAR(255) NOT NULL\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"hostname\" => array(\"hostname\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"transports\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"destination\" => \"VARCHAR(255) NOT NULL\",\n          \"nexthop\" => \"VARCHAR(255) NOT NULL\",\n          \"username\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"password\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"is_mx_based\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"destination\" => array(\"destination\"),\n            \"nexthop\" => array(\"nexthop\"),\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"alias\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"address\" => \"VARCHAR(255) NOT NULL\",\n          \"goto\" => \"TEXT NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"private_comment\" => \"TEXT\",\n          \"public_comment\" => \"TEXT\",\n          \"sogo_visible\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"internal\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"sender_allowed\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"unique\" => array(\n            \"address\" => array(\"address\")\n          ),\n          \"key\" => array(\n            \"domain\" => array(\"domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"api\" => array(\n        \"cols\" => array(\n          \"api_key\" => \"VARCHAR(255) NOT NULL\",\n          \"allow_from\" => \"VARCHAR(512) NOT NULL\",\n          \"skip_ip_check\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE NOW(0)\",\n          \"access\" => \"ENUM('ro', 'rw') NOT NULL DEFAULT 'rw'\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"api_key\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sender_acl\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"logged_in_as\" => \"VARCHAR(255) NOT NULL\",\n          \"send_as\" => \"VARCHAR(255) NOT NULL\",\n          \"external\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"templates\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"template\" => \"VARCHAR(255) NOT NULL\",\n          \"type\" => \"VARCHAR(255) NOT NULL\",\n          \"attributes\" => \"JSON\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"domain\" => array(\n        // Todo: Move some attributes to json\n        \"cols\" => array(\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"description\" => \"VARCHAR(255)\",\n          \"aliases\" => \"INT(10) NOT NULL DEFAULT '0'\",\n          \"mailboxes\" => \"INT(10) NOT NULL DEFAULT '0'\",\n          \"defquota\" => \"BIGINT(20) NOT NULL DEFAULT '3072'\",\n          \"maxquota\" => \"BIGINT(20) NOT NULL DEFAULT '102400'\",\n          \"quota\" => \"BIGINT(20) NOT NULL DEFAULT '102400'\",\n          \"relayhost\" => \"VARCHAR(255) NOT NULL DEFAULT '0'\",\n          \"backupmx\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"gal\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"relay_all_recipients\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"relay_unknown_only\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"domain_wide_footer\" => array(\n        \"cols\" => array(\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"html\" => \"LONGTEXT\",\n          \"plain\" => \"LONGTEXT\",\n          \"mbox_exclude\" => \"JSON NOT NULL DEFAULT ('[]')\",\n          \"alias_domain_exclude\" => \"JSON NOT NULL DEFAULT ('[]')\",\n          \"skip_replies\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"tags_domain\" => array(\n        \"cols\" => array(\n          \"tag_name\" => \"VARCHAR(255) NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"fkey\" => array(\n            \"fk_tags_domain\" => array(\n              \"col\" => \"domain\",\n              \"ref\" => \"domain.domain\",\n              \"delete\" => \"CASCADE\",\n              \"update\" => \"NO ACTION\"\n            )\n          ),\n          \"unique\" => array(\n            \"tag_name\" => array(\"tag_name\", \"domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"tls_policy_override\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"dest\" => \"VARCHAR(255) NOT NULL\",\n          \"policy\" => \"ENUM('none', 'may', 'encrypt', 'dane', 'dane-only', 'fingerprint', 'verify', 'secure') NOT NULL\",\n          \"parameters\" => \"VARCHAR(255) DEFAULT ''\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"unique\" => array(\n            \"dest\" => array(\"dest\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"quarantine\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"qid\" => \"VARCHAR(30) NOT NULL\",\n          \"subject\" => \"VARCHAR(500)\",\n          \"score\" => \"FLOAT(8,2)\",\n          \"ip\" => \"VARCHAR(50)\",\n          \"action\" => \"CHAR(20) NOT NULL DEFAULT 'unknown'\",\n          \"symbols\" => \"JSON\",\n          \"fuzzy_hashes\" => \"JSON\",\n          \"sender\" => \"VARCHAR(255) NOT NULL DEFAULT 'unknown'\",\n          \"rcpt\" => \"VARCHAR(255)\",\n          \"msg\" => \"LONGTEXT\",\n          \"domain\" => \"VARCHAR(255)\",\n          \"notified\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"user\" => \"VARCHAR(255) NOT NULL DEFAULT 'unknown'\",\n          \"qhash\" => \"VARCHAR(64)\",\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"qhash\" => array(\"qhash\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"mailbox\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"password\" => \"VARCHAR(255) NOT NULL\",\n          \"name\" => \"VARCHAR(255)\",\n          \"description\" => \"VARCHAR(255)\",\n          // mailbox_path_prefix is followed by domain/local_part/\n          \"mailbox_path_prefix\" => \"VARCHAR(150) DEFAULT '/var/vmail/'\",\n          \"quota\" => \"BIGINT(20) NOT NULL DEFAULT '102400'\",\n          \"local_part\" => \"VARCHAR(255) NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"attributes\" => \"JSON\",\n          \"custom_attributes\" => \"JSON NOT NULL DEFAULT ('{}')\",\n          \"kind\" => \"VARCHAR(100) NOT NULL DEFAULT ''\",\n          \"multiple_bookings\" => \"INT NOT NULL DEFAULT -1\",\n          \"authsource\" => \"ENUM('mailcow', 'keycloak', 'generic-oidc', 'ldap') DEFAULT 'mailcow'\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          ),\n          \"key\" => array(\n            \"domain\" => array(\"domain\"),\n            \"kind\" => array(\"kind\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"tags_mailbox\" => array(\n        \"cols\" => array(\n          \"tag_name\" => \"VARCHAR(255) NOT NULL\",\n          \"username\" => \"VARCHAR(255) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"fkey\" => array(\n            \"fk_tags_mailbox\" => array(\n              \"col\" => \"username\",\n              \"ref\" => \"mailbox.username\",\n              \"delete\" => \"CASCADE\",\n              \"update\" => \"NO ACTION\"\n            )\n          ),\n          \"unique\" => array(\n            \"tag_name\" => array(\"tag_name\", \"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sieve_filters\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"script_desc\" => \"VARCHAR(255) NOT NULL\",\n          \"script_name\" => \"ENUM('active','inactive')\",\n          \"script_data\" => \"TEXT NOT NULL\",\n          \"filter_type\" => \"ENUM('postfilter','prefilter')\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"username\" => array(\"username\"),\n            \"script_desc\" => array(\"script_desc\")\n          ),\n          \"fkey\" => array(\n            \"fk_username_sieve_global_before\" => array(\n              \"col\" => \"username\",\n              \"ref\" => \"mailbox.username\",\n              \"delete\" => \"CASCADE\",\n              \"update\" => \"NO ACTION\"\n            )\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"app_passwd\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"name\" => \"VARCHAR(255) NOT NULL\",\n          \"mailbox\" => \"VARCHAR(255) NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"password\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"imap_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"smtp_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"dav_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"eas_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"pop3_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"sieve_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"mailbox\" => array(\"mailbox\"),\n            \"password\" => array(\"password\"),\n            \"domain\" => array(\"domain\"),\n          ),\n          \"fkey\" => array(\n            \"fk_username_app_passwd\" => array(\n              \"col\" => \"mailbox\",\n              \"ref\" => \"mailbox.username\",\n              \"delete\" => \"CASCADE\",\n              \"update\" => \"NO ACTION\"\n            )\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"mta_sts\" => array(\n        \"cols\" => array(\n          \"id\" => \"BIGINT NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"version\" => \"VARCHAR(255) NOT NULL\",\n          \"mode\" => \"VARCHAR(255) NOT NULL\",\n          \"mx\" => \"VARCHAR(255) NOT NULL\",\n          \"max_age\" => \"VARCHAR(255) NOT NULL\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"user_acl\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"spam_alias\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"tls_policy\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"spam_score\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"spam_policy\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"delimiter_action\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"syncjobs\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"eas_reset\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"sogo_profile_reset\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"pushover\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          // quarantine is for quarantine actions, todo: rename\n          \"quarantine\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"quarantine_attachments\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"quarantine_notification\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"quarantine_category\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"app_passwds\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"pw_reset\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          ),\n          \"fkey\" => array(\n            \"fk_username\" => array(\n              \"col\" => \"username\",\n              \"ref\" => \"mailbox.username\",\n              \"delete\" => \"CASCADE\",\n              \"update\" => \"NO ACTION\"\n            )\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"alias_domain\" => array(\n        \"cols\" => array(\n          \"alias_domain\" => \"VARCHAR(255) NOT NULL\",\n          \"target_domain\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"alias_domain\")\n          ),\n          \"key\" => array(\n            \"active\" => array(\"active\"),\n            \"target_domain\" => array(\"target_domain\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"spamalias\" => array(\n        \"cols\" => array(\n          \"address\" => \"VARCHAR(255) NOT NULL\",\n          \"goto\" => \"TEXT NOT NULL\",\n          \"description\" => \"TEXT NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"validity\" => \"INT(11)\",\n          \"permanent\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"address\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"filterconf\" => array(\n        \"cols\" => array(\n          \"object\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"option\" => \"VARCHAR(50) NOT NULL DEFAULT ''\",\n          \"value\" => \"VARCHAR(100) NOT NULL DEFAULT ''\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"prefid\" => \"INT(11) NOT NULL AUTO_INCREMENT\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"prefid\")\n          ),\n          \"key\" => array(\n            \"object\" => array(\"object\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"settingsmap\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"desc\" => \"VARCHAR(255) NOT NULL\",\n          \"content\" => \"LONGTEXT NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"identity_provider\" => array(\n        \"cols\" => array(\n          \"key\" => \"VARCHAR(255) NOT NULL\",\n          \"value\" => \"TEXT NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"key\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"logs\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"task\" => \"CHAR(32) NOT NULL DEFAULT '000000'\",\n          \"type\" => \"VARCHAR(32) DEFAULT ''\",\n          \"msg\" => \"TEXT\",\n          \"call\" => \"TEXT\",\n          \"user\" => \"VARCHAR(64) NOT NULL\",\n          \"role\" => \"VARCHAR(32) NOT NULL\",\n          \"remote\" => \"VARCHAR(39) NOT NULL\",\n          \"time\" => \"INT(11) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sasl_log\" => array(\n        \"cols\" => array(\n          \"service\" => \"VARCHAR(32) NOT NULL DEFAULT ''\",\n          \"app_password\" => \"INT\",\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"real_rip\" => \"VARCHAR(64) NOT NULL\",\n          \"datetime\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"service\", \"real_rip\", \"username\")\n          ),\n          \"key\" => array(\n            \"username\" => array(\"username\"),\n            \"service\" => array(\"service\"),\n            \"datetime\" => array(\"datetime\"),\n            \"real_rip\" => array(\"real_rip\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"quota2\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"bytes\" => \"BIGINT(20) NOT NULL DEFAULT '0'\",\n          \"messages\" => \"BIGINT(20) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"quota2replica\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"bytes\" => \"BIGINT(20) NOT NULL DEFAULT '0'\",\n          \"messages\" => \"BIGINT(20) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"domain_admins\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"username\" => array(\"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"da_acl\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"syncjobs\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"quarantine\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"login_as\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"sogo_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"app_passwds\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"bcc_maps\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"pushover\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"filters\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"ratelimit\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"spam_policy\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"extend_sender_acl\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"unlimited_quota\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"protocol_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"smtp_ip_access\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"alias_domains\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"mailbox_relayhost\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"domain_relayhost\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"domain_desc\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"da_sso\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"token\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"token\", \"created\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"reset_password\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"token\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"token\", \"created\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"imapsync\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"user2\" => \"VARCHAR(255) NOT NULL\",\n          \"host1\" => \"VARCHAR(255) NOT NULL\",\n          \"authmech1\" => \"ENUM('PLAIN','LOGIN','CRAM-MD5') DEFAULT 'PLAIN'\",\n          \"regextrans2\" => \"VARCHAR(255) DEFAULT ''\",\n          \"authmd51\" => \"TINYINT(1) NOT NULL DEFAULT 0\",\n          \"domain2\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"subfolder2\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"user1\" => \"VARCHAR(255) NOT NULL\",\n          \"password1\" => \"VARCHAR(255) NOT NULL\",\n          \"exclude\" => \"VARCHAR(500) NOT NULL DEFAULT ''\",\n          \"maxage\" => \"SMALLINT NOT NULL DEFAULT '0'\",\n          \"mins_interval\" => \"SMALLINT UNSIGNED NOT NULL DEFAULT '0'\",\n          \"maxbytespersecond\" => \"VARCHAR(50) NOT NULL DEFAULT '0'\",\n          \"port1\" => \"SMALLINT UNSIGNED NOT NULL\",\n          \"enc1\" => \"ENUM('TLS','SSL','PLAIN') DEFAULT 'TLS'\",\n          \"delete2duplicates\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"delete1\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"delete2\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"automap\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"skipcrossduplicates\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"custom_params\" => \"VARCHAR(512) NOT NULL DEFAULT ''\",\n          \"timeout1\" => \"SMALLINT NOT NULL DEFAULT '600'\",\n          \"timeout2\" => \"SMALLINT NOT NULL DEFAULT '600'\",\n          \"subscribeall\" => \"TINYINT(1) NOT NULL DEFAULT '1'\",\n          \"dry\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"is_running\" => \"TINYINT(1) NOT NULL DEFAULT '0'\",\n          \"returned_text\" => \"LONGTEXT\",\n          \"last_run\" => \"TIMESTAMP NULL DEFAULT NULL\",\n          \"success\" => \"TINYINT(1) UNSIGNED DEFAULT NULL\",\n          \"exit_status\" => \"VARCHAR(50) DEFAULT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"bcc_maps\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"local_dest\" => \"VARCHAR(255) NOT NULL\",\n          \"bcc_dest\" => \"VARCHAR(255) NOT NULL\",\n          \"domain\" => \"VARCHAR(255) NOT NULL\",\n          \"type\" => \"ENUM('sender','rcpt')\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"local_dest\" => array(\"local_dest\"),\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"recipient_maps\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"old_dest\" => \"VARCHAR(255) NOT NULL\",\n          \"new_dest\" => \"VARCHAR(255) NOT NULL\",\n          \"created\" => \"DATETIME(0) NOT NULL DEFAULT NOW(0)\",\n          \"modified\" => \"DATETIME ON UPDATE CURRENT_TIMESTAMP\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"local_dest\" => array(\"old_dest\"),\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"tfa\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"key_id\" => \"VARCHAR(255) NOT NULL\",\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"authmech\" => \"ENUM('yubi_otp', 'u2f', 'hotp', 'totp', 'webauthn')\",\n          \"secret\" => \"VARCHAR(255) DEFAULT NULL\",\n          \"keyHandle\" => \"VARCHAR(1023) DEFAULT NULL\",\n          \"publicKey\" => \"VARCHAR(4096) DEFAULT NULL\",\n          \"counter\" => \"INT NOT NULL DEFAULT '0'\",\n          \"certificate\" => \"TEXT\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"forwarding_hosts\" => array(\n        \"cols\" => array(\n          \"host\" => \"VARCHAR(255) NOT NULL\",\n          \"source\" => \"VARCHAR(255) NOT NULL\",\n          \"filter_spam\" => \"TINYINT(1) NOT NULL DEFAULT '0'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"host\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_acl\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"c_folder_id\" => \"INT NOT NULL\",\n          \"c_object\" => \"VARCHAR(255) NOT NULL\",\n          \"c_uid\" => \"VARCHAR(255) NOT NULL\",\n          \"c_role\" => \"VARCHAR(80) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          ),\n          \"key\" => array(\n            \"sogo_acl_c_folder_id_idx\" => array(\"c_folder_id\"),\n            \"sogo_acl_c_uid_idx\" => array(\"c_uid\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_alarms_folder\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"c_path\" => \"VARCHAR(255) NOT NULL\",\n          \"c_name\" => \"VARCHAR(255) NOT NULL\",\n          \"c_uid\" => \"VARCHAR(255) NOT NULL\",\n          \"c_recurrence_id\" => \"INT(11) DEFAULT NULL\",\n          \"c_alarm_number\" => \"INT(11) NOT NULL\",\n          \"c_alarm_date\" => \"INT(11) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_cache_folder\" => array(\n        \"cols\" => array(\n          \"c_uid\" => \"VARCHAR(255) NOT NULL\",\n          \"c_path\" => \"VARCHAR(255) NOT NULL\",\n          \"c_parent_path\" => \"VARCHAR(255) DEFAULT NULL\",\n          \"c_type\" => \"TINYINT(3) unsigned NOT NULL\",\n          \"c_creationdate\" => \"INT(11) NOT NULL\",\n          \"c_lastmodified\" => \"INT(11) NOT NULL\",\n          \"c_version\" => \"INT(11) NOT NULL DEFAULT '0'\",\n          \"c_deleted\" => \"TINYINT(4) NOT NULL DEFAULT '0'\",\n          \"c_content\" => \"LONGTEXT\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_uid\", \"c_path\")\n          ),\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_folder_info\" => array(\n        \"cols\" => array(\n          \"c_folder_id\" => \"BIGINT(20) unsigned NOT NULL AUTO_INCREMENT\",\n          \"c_path\" => \"VARCHAR(255) NOT NULL\",\n          \"c_path1\" => \"VARCHAR(255) NOT NULL\",\n          \"c_path2\" => \"VARCHAR(255) DEFAULT NULL\",\n          \"c_path3\" => \"VARCHAR(255) DEFAULT NULL\",\n          \"c_path4\" => \"VARCHAR(255) DEFAULT NULL\",\n          \"c_foldername\" => \"VARCHAR(255) NOT NULL\",\n          \"c_location\" => \"VARCHAR(2048) DEFAULT NULL\",\n          \"c_quick_location\" => \"VARCHAR(2048) DEFAULT NULL\",\n          \"c_acl_location\" => \"VARCHAR(2048) DEFAULT NULL\",\n          \"c_folder_type\" => \"VARCHAR(255) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_path\")\n          ),\n          \"unique\" => array(\n            \"c_folder_id\" => array(\"c_folder_id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_quick_appointment\" => array(\n        \"cols\" => array(\n          \"c_folder_id\" => \"INT NOT NULL\",\n          \"c_name\" => \"VARCHAR(255) NOT NULL\",\n          \"c_uid\" => \"VARCHAR(1000) NOT NULL\",\n          \"c_startdate\" => \"INT\",\n          \"c_enddate\" => \"INT\",\n          \"c_cycleenddate\" => \"INT\",\n          \"c_title\" => \"VARCHAR(1000) NOT NULL\",\n          \"c_participants\" => \"TEXT\",\n          \"c_isallday\" => \"INT\",\n          \"c_iscycle\" => \"INT\",\n          \"c_cycleinfo\" => \"TEXT\",\n          \"c_classification\" => \"INT NOT NULL\",\n          \"c_isopaque\" => \"INT NOT NULL\",\n          \"c_status\" => \"INT NOT NULL\",\n          \"c_priority\" => \"INT\",\n          \"c_location\" => \"VARCHAR(255)\",\n          \"c_orgmail\" => \"VARCHAR(255)\",\n          \"c_partmails\" => \"TEXT\",\n          \"c_partstates\" => \"TEXT\",\n          \"c_category\" => \"VARCHAR(255)\",\n          \"c_sequence\" => \"INT\",\n          \"c_component\" => \"VARCHAR(10) NOT NULL\",\n          \"c_nextalarm\" => \"INT\",\n          \"c_description\" => \"TEXT\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_folder_id\", \"c_name\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_quick_contact\" => array(\n        \"cols\" => array(\n          \"c_folder_id\" => \"INT NOT NULL\",\n          \"c_name\" => \"VARCHAR(255) NOT NULL\",\n          \"c_givenname\" => \"VARCHAR(255)\",\n          \"c_cn\" => \"VARCHAR(255)\",\n          \"c_sn\" => \"VARCHAR(255)\",\n          \"c_screenname\" => \"VARCHAR(255)\",\n          \"c_l\" => \"VARCHAR(255)\",\n          \"c_mail\" => \"TEXT\",\n          \"c_o\" => \"VARCHAR(500)\",\n          \"c_ou\" => \"VARCHAR(255)\",\n          \"c_telephonenumber\" => \"VARCHAR(255)\",\n          \"c_categories\" => \"VARCHAR(255)\",\n          \"c_component\" => \"VARCHAR(10) NOT NULL\",\n          \"c_hascertificate\" => \"INT4 DEFAULT 0\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_folder_id\", \"c_name\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_sessions_folder\" => array(\n        \"cols\" => array(\n          \"c_id\" => \"VARCHAR(255) NOT NULL\",\n          \"c_value\" => \"VARCHAR(4096) NOT NULL\",\n          \"c_creationdate\" => \"INT(11) NOT NULL\",\n          \"c_lastseen\" => \"INT(11) NOT NULL\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_store\" => array(\n        \"cols\" => array(\n          \"c_folder_id\" => \"INT NOT NULL\",\n          \"c_name\" => \"VARCHAR(255) NOT NULL\",\n          \"c_content\" => \"MEDIUMTEXT NOT NULL\",\n          \"c_creationdate\" => \"INT NOT NULL\",\n          \"c_lastmodified\" => \"INT NOT NULL\",\n          \"c_version\" => \"INT NOT NULL\",\n          \"c_deleted\" => \"INT\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_folder_id\", \"c_name\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_admin\" => array(\n        \"cols\" => array(\n          \"c_key\" => \"VARCHAR(255) NOT NULL DEFAULT ''\",\n          \"c_content\"  => \"mediumtext NOT NULL\",\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_key\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"pushover\" => array(\n        \"cols\" => array(\n          \"username\" => \"VARCHAR(255) NOT NULL\",\n          \"key\" => \"VARCHAR(255) NOT NULL\",\n          \"token\" => \"VARCHAR(255) NOT NULL\",\n          \"attributes\" => \"JSON\",\n          \"title\" => \"TEXT\",\n          \"text\" => \"TEXT\",\n          \"senders\" => \"TEXT\",\n          \"senders_regex\" => \"TEXT\",\n          \"active\" => \"TINYINT(1) NOT NULL DEFAULT '1'\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"username\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"sogo_user_profile\" => array(\n        \"cols\" => array(\n          \"c_uid\" => \"VARCHAR(255) NOT NULL\",\n          \"c_defaults\" => \"LONGTEXT\",\n          \"c_settings\" => \"LONGTEXT\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"c_uid\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"oauth_clients\" => array(\n        \"cols\" => array(\n          \"id\" => \"INT NOT NULL AUTO_INCREMENT\",\n          \"client_id\" => \"VARCHAR(80) NOT NULL\",\n          \"client_secret\" => \"VARCHAR(80)\",\n          \"redirect_uri\" => \"VARCHAR(2000)\",\n          \"grant_types\" => \"VARCHAR(80)\",\n          \"scope\" => \"VARCHAR(4000)\",\n          \"user_id\" => \"VARCHAR(80)\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"client_id\")\n          ),\n          \"unique\" => array(\n            \"id\" => array(\"id\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"oauth_access_tokens\" => array(\n        \"cols\" => array(\n          \"access_token\" => \"VARCHAR(40) NOT NULL\",\n          \"client_id\" => \"VARCHAR(80) NOT NULL\",\n          \"user_id\" => \"VARCHAR(80)\",\n          \"expires\" => \"TIMESTAMP NOT NULL\",\n          \"scope\" => \"VARCHAR(4000)\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"access_token\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"oauth_authorization_codes\" => array(\n        \"cols\" => array(\n          \"authorization_code\" => \"VARCHAR(40) NOT NULL\",\n          \"client_id\" => \"VARCHAR(80) NOT NULL\",\n          \"user_id\" => \"VARCHAR(80)\",\n          \"redirect_uri\" => \"VARCHAR(2000)\",\n          \"expires\" => \"TIMESTAMP NOT NULL\",\n          \"scope\" => \"VARCHAR(4000)\",\n          \"id_token\" => \"VARCHAR(1000)\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"authorization_code\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      ),\n      \"oauth_refresh_tokens\" => array(\n        \"cols\" => array(\n          \"refresh_token\" => \"VARCHAR(40) NOT NULL\",\n          \"client_id\" => \"VARCHAR(80) NOT NULL\",\n          \"user_id\" => \"VARCHAR(80)\",\n          \"expires\" => \"TIMESTAMP NOT NULL\",\n          \"scope\" => \"VARCHAR(4000)\"\n        ),\n        \"keys\" => array(\n          \"primary\" => array(\n            \"\" => array(\"refresh_token\")\n          )\n        ),\n        \"attr\" => \"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC\"\n      )\n    );\n\n    foreach ($tables as $table => $properties) {\n      // Migrate to quarantine\n      if ($table == 'quarantine') {\n        $stmt = $pdo->query(\"SHOW TABLES LIKE 'quarantaine'\");\n        $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n        if ($num_results != 0) {\n          $stmt = $pdo->query(\"SHOW TABLES LIKE 'quarantine'\");\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n          if ($num_results == 0) {\n            $pdo->query(\"RENAME TABLE `quarantaine` TO `quarantine`\");\n          }\n        }\n      }\n\n      // Migrate tls_enforce_* options\n      if ($table == 'mailbox') {\n        $stmt = $pdo->query(\"SHOW TABLES LIKE 'mailbox'\");\n        $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n        if ($num_results != 0) {\n          $stmt = $pdo->query(\"SHOW COLUMNS FROM `mailbox` LIKE '%tls_enforce%'\");\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n          if ($num_results != 0) {\n            $stmt = $pdo->query(\"SELECT `username`, `tls_enforce_in`, `tls_enforce_out` FROM `mailbox`\");\n            $tls_options_rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n            while ($row = array_shift($tls_options_rows)) {\n              $tls_options[$row['username']] = array('tls_enforce_in' => $row['tls_enforce_in'], 'tls_enforce_out' => $row['tls_enforce_out']);\n            }\n          }\n        }\n      }\n\n      $stmt = $pdo->query(\"SHOW TABLES LIKE '\" . $table . \"'\");\n      $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n      if ($num_results != 0) {\n        $stmt = $pdo->prepare(\"SELECT CONCAT('ALTER TABLE `', `table_schema`, '`.', `table_name`, ' DROP FOREIGN KEY ', `constraint_name`, ';') AS `FKEY_DROP` FROM `information_schema`.`table_constraints`\n          WHERE `constraint_type` = 'FOREIGN KEY' AND `table_name` = :table;\");\n        $stmt->execute(array(':table' => $table));\n        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);\n        while ($row = array_shift($rows)) {\n          $pdo->query($row['FKEY_DROP']);\n        }\n        foreach ($properties['cols'] as $column => $type) {\n          $stmt = $pdo->query(\"SHOW COLUMNS FROM `\" . $table . \"` LIKE '\" . $column . \"'\");\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n          if ($num_results == 0) {\n            if (strpos($type, 'AUTO_INCREMENT') !== false) {\n              $type = $type . ' PRIMARY KEY ';\n              // Adding an AUTO_INCREMENT key, need to drop primary keys first, if exists\n              $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE Key_name = 'PRIMARY'\");\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n              if ($num_results != 0) {\n                $pdo->query(\"ALTER TABLE `\" . $table . \"` DROP PRIMARY KEY\");\n              }\n            }\n            $pdo->query(\"ALTER TABLE `\" . $table . \"` ADD `\" . $column . \"` \" . $type);\n          } else {\n            $pdo->query(\"ALTER TABLE `\" . $table . \"` MODIFY COLUMN `\" . $column . \"` \" . $type);\n          }\n        }\n        foreach ($properties['keys'] as $key_type => $key_content) {\n          if (strtolower($key_type) == 'primary') {\n            foreach ($key_content as $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE Key_name = 'PRIMARY'\");\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n              $is_drop = ($num_results != 0) ? \"DROP PRIMARY KEY, \" : \"\";\n              $pdo->query(\"ALTER TABLE `\" . $table . \"` \" . $is_drop . \"ADD PRIMARY KEY (\" . $fields . \")\");\n            }\n          }\n          if (strtolower($key_type) == 'key') {\n            foreach ($key_content as $key_name => $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE Key_name = '\" . $key_name . \"'\");\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n              $is_drop = ($num_results != 0) ? \"DROP INDEX `\" . $key_name . \"`, \" : \"\";\n              $pdo->query(\"ALTER TABLE `\" . $table . \"` \" . $is_drop . \"ADD KEY `\" . $key_name . \"` (\" . $fields . \")\");\n            }\n          }\n          if (strtolower($key_type) == 'unique') {\n            foreach ($key_content as $key_name => $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE Key_name = '\" . $key_name . \"'\");\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n              $is_drop = ($num_results != 0) ? \"DROP INDEX `\" . $key_name . \"`, \" : \"\";\n              $pdo->query(\"ALTER TABLE `\" . $table . \"` \" . $is_drop . \"ADD UNIQUE KEY `\" . $key_name . \"` (\" . $fields . \")\");\n            }\n          }\n          if (strtolower($key_type) == 'fkey') {\n            foreach ($key_content as $key_name => $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE Key_name = '\" . $key_name . \"'\");\n              $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n              if ($num_results != 0) {\n                $pdo->query(\"ALTER TABLE `\" . $table . \"` DROP INDEX `\" . $key_name . \"`\");\n              }\n              @list($table_ref, $field_ref) = explode('.', $key_values['ref']);\n              $pdo->query(\"ALTER TABLE `\" . $table . \"` ADD FOREIGN KEY `\" . $key_name . \"` (\" . $key_values['col'] . \") REFERENCES `\" . $table_ref . \"` (`\" . $field_ref . \"`)\n                ON DELETE \" . $key_values['delete'] . \" ON UPDATE \" . $key_values['update']);\n            }\n          }\n        }\n        // Drop all vanished columns\n        $stmt = $pdo->query(\"SHOW COLUMNS FROM `\" . $table . \"`\");\n        $cols_in_table = $stmt->fetchAll(PDO::FETCH_ASSOC);\n        while ($row = array_shift($cols_in_table)) {\n          if (!array_key_exists($row['Field'], $properties['cols'])) {\n            $pdo->query(\"ALTER TABLE `\" . $table . \"` DROP COLUMN `\" . $row['Field'] . \"`;\");\n          }\n        }\n\n        // Step 1: Get all non-primary keys, that currently exist and those that should exist\n        $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE `Key_name` != 'PRIMARY'\");\n        $keys_in_table = $stmt->fetchAll(PDO::FETCH_ASSOC);\n        $keys_to_exist = array();\n        if (isset($properties['keys']['unique']) && is_array($properties['keys']['unique'])) {\n          foreach ($properties['keys']['unique'] as $key_name => $key_values) {\n            $keys_to_exist[] = $key_name;\n          }\n        }\n        if (isset($properties['keys']['key']) && is_array($properties['keys']['key'])) {\n          foreach ($properties['keys']['key'] as $key_name => $key_values) {\n            $keys_to_exist[] = $key_name;\n          }\n        }\n        // Index for foreign key must exist\n        if (isset($properties['keys']['fkey']) && is_array($properties['keys']['fkey'])) {\n          foreach ($properties['keys']['fkey'] as $key_name => $key_values) {\n            $keys_to_exist[] = $key_name;\n          }\n        }\n        // Step 2: Drop all vanished indexes\n        while ($row = array_shift($keys_in_table)) {\n          if (!in_array($row['Key_name'], $keys_to_exist)) {\n            $pdo->query(\"ALTER TABLE `\" . $table . \"` DROP INDEX `\" . $row['Key_name'] . \"`\");\n          }\n        }\n        // Step 3: Drop all vanished primary keys\n        if (!isset($properties['keys']['primary'])) {\n          $stmt = $pdo->query(\"SHOW KEYS FROM `\" . $table . \"` WHERE Key_name = 'PRIMARY'\");\n          $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n          if ($num_results != 0) {\n            $pdo->query(\"ALTER TABLE `\" . $table . \"` DROP PRIMARY KEY\");\n          }\n        }\n      } else {\n        // Create table if it is missing\n        $sql = \"CREATE TABLE IF NOT EXISTS `\" . $table . \"` (\";\n        foreach ($properties['cols'] as $column => $type) {\n          $sql .= \"`\" . $column . \"` \" . $type . \",\";\n        }\n        foreach ($properties['keys'] as $key_type => $key_content) {\n          if (strtolower($key_type) == 'primary') {\n            foreach ($key_content as $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $sql .= \"PRIMARY KEY (\" . $fields . \")\" . \",\";\n            }\n          } elseif (strtolower($key_type) == 'key') {\n            foreach ($key_content as $key_name => $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $sql .= \"KEY `\" . $key_name . \"` (\" . $fields . \")\" . \",\";\n            }\n          } elseif (strtolower($key_type) == 'unique') {\n            foreach ($key_content as $key_name => $key_values) {\n              $fields = \"`\" . implode(\"`, `\", $key_values) . \"`\";\n              $sql .= \"UNIQUE KEY `\" . $key_name . \"` (\" . $fields . \")\" . \",\";\n            }\n          } elseif (strtolower($key_type) == 'fkey') {\n            foreach ($key_content as $key_name => $key_values) {\n              @list($table_ref, $field_ref) = explode('.', $key_values['ref']);\n              $sql .= \"FOREIGN KEY `\" . $key_name . \"` (\" . $key_values['col'] . \") REFERENCES `\" . $table_ref . \"` (`\" . $field_ref . \"`)\n                ON DELETE \" . $key_values['delete'] . \" ON UPDATE \" . $key_values['update'] . \",\";\n            }\n          }\n        }\n        $sql = rtrim($sql, \",\");\n        $sql .= \") \" . $properties['attr'];\n        $pdo->query($sql);\n      }\n      // Reset table attributes\n      $pdo->query(\"ALTER TABLE `\" . $table . \"` \" . $properties['attr'] . \";\");\n    }\n\n    // Recreate SQL views\n    foreach ($views as $view => $create) {\n      $pdo->query(\"DROP VIEW IF EXISTS `\" . $view . \"`;\");\n      $pdo->query($create);\n    }\n\n    // Clear old app_passwd log entries\n    $pdo->exec(\"DELETE FROM logs\n      WHERE role != 'unauthenticated'\n        AND JSON_EXTRACT(`call`, '$[0]') = 'app_passwd'\n        AND JSON_EXTRACT(`call`, '$[1]') = 'edit'\n        AND (JSON_CONTAINS_PATH(`call`, 'one', '$[2].password')\n          OR JSON_CONTAINS_PATH(`call`, 'one', '$[2].password2'));\");\n\n    // Mitigate imapsync argument injection issue\n    $pdo->query(\"UPDATE `imapsync` SET `custom_params` = ''\n      WHERE `custom_params` LIKE '%pipemess%'\n        OR custom_params LIKE '%skipmess%'\n        OR custom_params LIKE '%delete2foldersonly%'\n        OR custom_params LIKE '%delete2foldersbutnot%'\n        OR custom_params LIKE '%regexflag%'\n        OR custom_params LIKE '%pipemess%'\n        OR custom_params LIKE '%regextrans2%'\n        OR custom_params LIKE '%maxlinelengthcmd%';\");\n\n    // Migrate webauthn tfa\n    $stmt = $pdo->query(\"ALTER TABLE `tfa` MODIFY COLUMN `authmech` ENUM('yubi_otp', 'u2f', 'hotp', 'totp', 'webauthn')\");\n\n    // Inject admin if not exists\n    $stmt = $pdo->query(\"SELECT NULL FROM `admin`\");\n    $num_results = count($stmt->fetchAll(PDO::FETCH_ASSOC));\n    if ($num_results == 0) {\n      $pdo->query(\"INSERT INTO `admin` (`username`, `password`, `superadmin`, `created`, `modified`, `active`)\n      VALUES ('admin', '{SSHA256}K8eVJ6YsZbQCfuJvSUbaQRLr0HPLz5rC9IAp0PAFl0tmNDBkMDc0NDAyOTAxN2Rk', 1, NOW(), NOW(), 1)\");\n      $pdo->query(\"INSERT INTO `domain_admins` (`username`, `domain`, `created`, `active`)\n        SELECT `username`, 'ALL', NOW(), 1 FROM `admin`\n          WHERE superadmin='1' AND `username` NOT IN (SELECT `username` FROM `domain_admins`);\");\n      $pdo->query(\"DELETE FROM `admin` WHERE `username` NOT IN  (SELECT `username` FROM `domain_admins`);\");\n    }\n    // Insert new DB schema version\n    $pdo->query(\"REPLACE INTO `versions` (`application`, `version`) VALUES ('db_schema', '\" . $db_version . \"');\");\n\n    // Fix dangling domain admins\n    $pdo->query(\"DELETE FROM `admin` WHERE `superadmin` = 0 AND `username` NOT IN (SELECT `username`FROM `domain_admins`);\");\n    $pdo->query(\"DELETE FROM `da_acl` WHERE `username` NOT IN (SELECT `username`FROM `domain_admins`);\");\n\n    // Migrate attributes\n    // pushover\n    $pdo->query(\"UPDATE `pushover` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;\");\n    $pdo->query(\"UPDATE `pushover` SET `attributes` =  JSON_SET(`attributes`, '$.evaluate_x_prio', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.evaluate_x_prio') IS NULL;\");\n    $pdo->query(\"UPDATE `pushover` SET `attributes` =  JSON_SET(`attributes`, '$.only_x_prio', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.only_x_prio') IS NULL;\");\n    $pdo->query(\"UPDATE `pushover` SET `attributes` =  JSON_SET(`attributes`, '$.sound', \\\"pushover\\\") WHERE JSON_VALUE(`attributes`, '$.sound') IS NULL;\");\n    // mailbox\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.passwd_update', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.passwd_update') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.relayhost', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.relayhost') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.force_pw_update', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.force_pw_update') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.force_tfa', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.force_tfa') IS NULL;\");\n    // admin attributes\n    $pdo->query(\"UPDATE `admin` SET `attributes` = '{}' WHERE `attributes` = '' OR `attributes` IS NULL;\");\n    $pdo->query(\"UPDATE `admin` SET `attributes` =  JSON_SET(`attributes`, '$.force_tfa', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.force_tfa') IS NULL;\");\n    $pdo->query(\"UPDATE `admin` SET `attributes` =  JSON_SET(`attributes`, '$.force_pw_update', \\\"0\\\") WHERE JSON_VALUE(`attributes`, '$.force_pw_update') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.sieve_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.sieve_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.sogo_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.sogo_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.imap_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.imap_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.pop3_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.pop3_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.smtp_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.smtp_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.eas_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.eas_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.dav_access', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.dav_access') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.mailbox_format', \\\"maildir:\\\") WHERE JSON_VALUE(`attributes`, '$.mailbox_format') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.quarantine_notification', \\\"never\\\") WHERE JSON_VALUE(`attributes`, '$.quarantine_notification') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.quarantine_category', \\\"reject\\\") WHERE JSON_VALUE(`attributes`, '$.quarantine_category') IS NULL;\");\n    foreach ($tls_options as $tls_user => $tls_options) {\n      $stmt = $pdo->prepare(\"UPDATE `mailbox` SET `attributes` = JSON_SET(`attributes`, '$.tls_enforce_in', :tls_enforce_in),\n        `attributes` = JSON_SET(`attributes`, '$.tls_enforce_out', :tls_enforce_out)\n          WHERE `username` = :username\");\n      $stmt->execute(array(':tls_enforce_in' => $tls_options['tls_enforce_in'], ':tls_enforce_out' => $tls_options['tls_enforce_out'], ':username' => $tls_user));\n    }\n    // Set tls_enforce_* if still missing (due to deleted attrs for example)\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.tls_enforce_out', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.tls_enforce_out') IS NULL;\");\n    $pdo->query(\"UPDATE `mailbox` SET `attributes` =  JSON_SET(`attributes`, '$.tls_enforce_in', \\\"1\\\") WHERE JSON_VALUE(`attributes`, '$.tls_enforce_in') IS NULL;\");\n    // Fix ACL\n    $pdo->query(\"INSERT INTO `user_acl` (`username`) SELECT `username` FROM `mailbox` WHERE `kind` = '' AND NOT EXISTS (SELECT `username` FROM `user_acl`);\");\n    $pdo->query(\"INSERT INTO `da_acl` (`username`) SELECT DISTINCT `username` FROM `domain_admins` WHERE `username` != 'admin' AND NOT EXISTS (SELECT `username` FROM `da_acl`);\");\n    // Fix domain_admins\n    $pdo->query(\"DELETE FROM `domain_admins` WHERE `domain` = 'ALL';\");\n\n    // add default templates\n    $default_domain_template = array(\n      \"template\" => \"Default\",\n      \"type\" => \"domain\",\n      \"attributes\" => array(\n        \"tags\" => array(),\n        \"max_num_aliases_for_domain\" => 400,\n        \"max_num_mboxes_for_domain\" => 10,\n        \"def_quota_for_mbox\" => 3072 * 1048576,\n        \"max_quota_for_mbox\" => 10240 * 1048576,\n        \"max_quota_for_domain\" => 10240 * 1048576,\n        \"rl_frame\" => \"s\",\n        \"rl_value\" => \"\",\n        \"active\" => 1,\n        \"gal\" => 1,\n        \"backupmx\" => 0,\n        \"relay_all_recipients\" => 0,\n        \"relay_unknown_only\" => 0,\n        \"dkim_selector\" => \"dkim\",\n        \"key_size\" => 2048,\n        \"max_quota_for_domain\" => 10240 * 1048576,\n      )\n    );\n    $default_mailbox_template = array(\n      \"template\" => \"Default\",\n      \"type\" => \"mailbox\",\n      \"attributes\" => array(\n        \"tags\" => array(),\n        \"quota\" => 0,\n        \"quarantine_notification\" => strval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['quarantine_notification']),\n        \"quarantine_category\" => strval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['quarantine_category']),\n        \"rl_frame\" => \"s\",\n        \"rl_value\" => \"\",\n        \"force_pw_update\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['force_pw_update']),\n        \"force_tfa\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['force_tfa']),\n        \"sogo_access\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['sogo_access']),\n        \"active\" => 1,\n        \"tls_enforce_in\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['tls_enforce_in']),\n        \"tls_enforce_out\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['tls_enforce_out']),\n        \"imap_access\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['imap_access']),\n        \"pop3_access\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['pop3_access']),\n        \"smtp_access\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['smtp_access']),\n        \"sieve_access\" => intval($GLOBALS['MAILBOX_DEFAULT_ATTRIBUTES']['sieve_access']),\n        \"acl_spam_alias\" => 1,\n        \"acl_tls_policy\" => 1,\n        \"acl_spam_score\" => 1,\n        \"acl_spam_policy\" => 1,\n        \"acl_delimiter_action\" => 1,\n        \"acl_syncjobs\" => 0,\n        \"acl_eas_reset\" => 1,\n        \"acl_sogo_profile_reset\" => 0,\n        \"acl_pushover\" => 1,\n        \"acl_quarantine\" => 1,\n        \"acl_quarantine_attachments\" => 1,\n        \"acl_quarantine_notification\" => 1,\n        \"acl_quarantine_category\" => 1,\n        \"acl_app_passwds\" => 1,\n      )\n    );\n    $stmt = $pdo->prepare(\"SELECT id FROM `templates` WHERE `type` = :type AND `template` = :template\");\n    $stmt->execute(array(\n      \":type\" => \"domain\",\n      \":template\" => $default_domain_template[\"template\"]\n    ));\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\n    if (empty($row)) {\n      $stmt = $pdo->prepare(\"INSERT INTO `templates` (`type`, `template`, `attributes`)\n        VALUES (:type, :template, :attributes)\");\n      $stmt->execute(array(\n        \":type\" => \"domain\",\n        \":template\" => $default_domain_template[\"template\"],\n        \":attributes\" => json_encode($default_domain_template[\"attributes\"])\n      ));\n    }\n    $stmt = $pdo->prepare(\"SELECT id FROM `templates` WHERE `type` = :type AND `template` = :template\");\n    $stmt->execute(array(\n      \":type\" => \"mailbox\",\n      \":template\" => $default_mailbox_template[\"template\"]\n    ));\n    $row = $stmt->fetch(PDO::FETCH_ASSOC);\n    if (empty($row)) {\n      $stmt = $pdo->prepare(\"INSERT INTO `templates` (`type`, `template`, `attributes`)\n        VALUES (:type, :template, :attributes)\");\n      $stmt->execute(array(\n        \":type\" => \"mailbox\",\n        \":template\" => $default_mailbox_template[\"template\"],\n        \":attributes\" => json_encode($default_mailbox_template[\"attributes\"])\n      ));\n    }\n\n    // remove old sogo views and triggers\n    $pdo->query(\"DROP TRIGGER IF EXISTS sogo_update_password\");\n\n    if (php_sapi_name() == \"cli\") {\n      echo \"DB initialization completed\" . PHP_EOL;\n    } else {\n      $_SESSION['return'][] = array(\n        'type' => 'success',\n        'log' => array(__FUNCTION__),\n        'msg' => 'db_init_complete'\n      );\n    }\n\n    // fill quarantine.qhash\n    $pdo->query(\"UPDATE `quarantine` SET `qhash` = SHA2(CONCAT(`id`, `qid`), 256) WHERE ISNULL(`qhash`)\");\n\n  } catch (PDOException $e) {\n    if (php_sapi_name() == \"cli\") {\n      echo \"DB initialization failed: \" . print_r($e, true) . PHP_EOL;\n    } else {\n      $_SESSION['return'][] = array(\n        'type' => 'danger',\n        'log' => array(__FUNCTION__),\n        'msg' => array('mysql_error', $e)\n      );\n    }\n  }\n}\nif (php_sapi_name() == \"cli\") {\n  include '/web/inc/vars.inc.php';\n  include '/web/inc/functions.inc.php';\n  include '/web/inc/functions.docker.inc.php';\n  // $now = new DateTime();\n  // $mins = $now->getOffset() / 60;\n  // $sgn = ($mins < 0 ? -1 : 1);\n  // $mins = abs($mins);\n  // $hrs = floor($mins / 60);\n  // $mins -= $hrs * 60;\n  // $offset = sprintf('%+d:%02d', $hrs*$sgn, $mins);\n  $dsn = $database_type . \":unix_socket=\" . $database_sock . \";dbname=\" . $database_name;\n  $opt = [\n    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,\n    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n    PDO::ATTR_EMULATE_PREPARES   => false,\n    //PDO::MYSQL_ATTR_INIT_COMMAND => \"SET time_zone = '\" . $offset . \"', group_concat_max_len = 3423543543;\",\n  ];\n  $pdo = new PDO($dsn, $database_user, $database_pass, $opt);\n  $stmt = $pdo->query(\"SELECT COUNT('OK') AS OK_C FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'sogo_view' OR TABLE_NAME = '_sogo_static_view';\");\n  $res = $stmt->fetch(PDO::FETCH_ASSOC);\n  if (intval($res['OK_C']) === 2) {\n    // Be more precise when replacing into _sogo_static_view, col orders may change\n    try {\n      update_sogo_static_view();\n      echo \"Fixed _sogo_static_view\" . PHP_EOL;\n    } catch (Exception $e) {\n      // Dunno\n    }\n  }\n  try {\n    $m = new Memcached();\n    $m->addServer('memcached', 11211);\n    $m->flush();\n    echo \"Cleaned up memcached\" . PHP_EOL;\n  } catch (Exception $e) {\n    // Dunno\n  }\n  init_db_schema();\n}\n"
  },
  {
    "path": "data/web/inc/lib/CSSminifierExtended.php",
    "content": "<?php\n\nuse MatthiasMullie\\Minify\\CSS;\n\nclass CSSminifierExtended extends CSS {\n\n    public function getDataHash() {\n        return sha1(json_encode($this->accessProtected($this,'data')));\n    }\n\n    private function accessProtected($obj, $prop) {\n        $reflection = new ReflectionClass($obj);\n        $property = $reflection->getProperty($prop);\n        $property->setAccessible(true);\n        return $property->getValue($obj);\n    }\n\n}"
  },
  {
    "path": "data/web/inc/lib/JSminifierExtended.php",
    "content": "<?php\n\nuse MatthiasMullie\\Minify\\JS;\n\nclass JSminifierExtended extends JS {\n\n    public function getDataHash() {\n        return sha1(json_encode($this->accessProtected($this,'data')));\n    }\n\n    private function accessProtected($obj, $prop) {\n        $reflection = new ReflectionClass($obj);\n        $property = $reflection->getProperty($prop);\n        $property->setAccessible(true);\n        return $property->getValue($obj);\n    }\n\n}"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/AttestationObject.php",
    "content": "<?php\n\nnamespace lbuchs\\WebAuthn\\Attestation;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\CBOR\\CborDecoder;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\n/**\n * @author Lukas Buchs\n * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT\n */\nclass AttestationObject {\n    private $_authenticatorData;\n    private $_attestationFormat;\n    private $_attestationFormatName;\n\n    public function __construct($binary , $allowedFormats) {\n        $enc = CborDecoder::decode($binary);\n        // validation\n        if (!\\is_array($enc) || !\\array_key_exists('fmt', $enc) || !is_string($enc['fmt'])) {\n            throw new WebAuthnException('invalid attestation format', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('attStmt', $enc) || !\\is_array($enc['attStmt'])) {\n            throw new WebAuthnException('invalid attestation format (attStmt not available)', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('authData', $enc) || !\\is_object($enc['authData']) || !($enc['authData'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('invalid attestation format (authData not available)', WebAuthnException::INVALID_DATA);\n        }\n\n        $this->_authenticatorData = new AuthenticatorData($enc['authData']->getBinaryString());\n        $this->_attestationFormatName = $enc['fmt'];\n\n        // Format ok?\n        if (!in_array($this->_attestationFormatName, $allowedFormats)) {\n            throw new WebAuthnException('invalid atttestation format: ' . $this->_attestationFormatName, WebAuthnException::INVALID_DATA);\n        }\n\n\n        switch ($this->_attestationFormatName) {\n            case 'android-key': $this->_attestationFormat = new Format\\AndroidKey($enc, $this->_authenticatorData); break;\n            case 'android-safetynet': $this->_attestationFormat = new Format\\AndroidSafetyNet($enc, $this->_authenticatorData); break;\n            case 'apple': $this->_attestationFormat = new Format\\Apple($enc, $this->_authenticatorData); break;\n            case 'fido-u2f': $this->_attestationFormat = new Format\\U2f($enc, $this->_authenticatorData); break;\n            case 'none': $this->_attestationFormat = new Format\\None($enc, $this->_authenticatorData); break;\n            case 'packed': $this->_attestationFormat = new Format\\Packed($enc, $this->_authenticatorData); break;\n            case 'tpm': $this->_attestationFormat = new Format\\Tpm($enc, $this->_authenticatorData); break;\n            default: throw new WebAuthnException('invalid attestation format: ' . $enc['fmt'], WebAuthnException::INVALID_DATA);\n        }\n    }\n\n    /**\n     * returns the attestation format name\n     * @return string\n     */\n    public function getAttestationFormatName() {\n        return $this->_attestationFormatName;\n    }\n\n    /**\n     * returns the attestation public key in PEM format\n     * @return AuthenticatorData\n     */\n    public function getAuthenticatorData() {\n        return $this->_authenticatorData;\n    }\n\n    /**\n     * returns the certificate chain as PEM\n     * @return string|null\n     */\n    public function getCertificateChain() {\n        return $this->_attestationFormat->getCertificateChain();\n    }\n\n    /**\n     * return the certificate issuer as string\n     * @return string\n     */\n    public function getCertificateIssuer() {\n        $pem = $this->getCertificatePem();\n        $issuer = '';\n        if ($pem) {\n            $certInfo = \\openssl_x509_parse($pem);\n            if (\\is_array($certInfo) && \\array_key_exists('issuer', $certInfo) && \\is_array($certInfo['issuer'])) {\n\n                $cn = $certInfo['issuer']['CN'] ?? '';\n                $o = $certInfo['issuer']['O'] ?? '';\n                $ou = $certInfo['issuer']['OU'] ?? '';\n\n                if ($cn) {\n                    $issuer .= $cn;\n                }\n                if ($issuer && ($o || $ou)) {\n                    $issuer .= ' (' . trim($o . ' ' . $ou) . ')';\n                } else {\n                    $issuer .= trim($o . ' ' . $ou);\n                }\n            }\n        }\n\n        return $issuer;\n    }\n\n    /**\n     * return the certificate subject as string\n     * @return string\n     */\n    public function getCertificateSubject() {\n        $pem = $this->getCertificatePem();\n        $subject = '';\n        if ($pem) {\n            $certInfo = \\openssl_x509_parse($pem);\n            if (\\is_array($certInfo) && \\array_key_exists('subject', $certInfo) && \\is_array($certInfo['subject'])) {\n\n                $cn = $certInfo['subject']['CN'] ?? '';\n                $o = $certInfo['subject']['O'] ?? '';\n                $ou = $certInfo['subject']['OU'] ?? '';\n\n                if ($cn) {\n                    $subject .= $cn;\n                }\n                if ($subject && ($o || $ou)) {\n                    $subject .= ' (' . trim($o . ' ' . $ou) . ')';\n                } else {\n                    $subject .= trim($o . ' ' . $ou);\n                }\n            }\n        }\n\n        return $subject;\n    }\n\n    /**\n     * returns the key certificate in PEM format\n     * @return string\n     */\n    public function getCertificatePem() {\n        return $this->_attestationFormat->getCertificatePem();\n    }\n\n    /**\n     * checks validity of the signature\n     * @param string $clientDataHash\n     * @return bool\n     * @throws WebAuthnException\n     */\n    public function validateAttestation($clientDataHash) {\n        return $this->_attestationFormat->validateAttestation($clientDataHash);\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        return $this->_attestationFormat->validateRootCertificate($rootCas);\n    }\n\n    /**\n     * checks if the RpId-Hash is valid\n     * @param string$rpIdHash\n     * @return bool\n     */\n    public function validateRpIdHash($rpIdHash) {\n        return $rpIdHash === $this->_authenticatorData->getRpIdHash();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/AuthenticatorData.php",
    "content": "<?php\n\nnamespace lbuchs\\WebAuthn\\Attestation;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\CBOR\\CborDecoder;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\n/**\n * @author Lukas Buchs\n * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT\n */\nclass AuthenticatorData {\n    protected $_binary;\n    protected $_rpIdHash;\n    protected $_flags;\n    protected $_signCount;\n    protected $_attestedCredentialData;\n    protected $_extensionData;\n\n\n\n    // Cose encoded keys\n    private static $_COSE_KTY = 1;\n    private static $_COSE_ALG = 3;\n\n    // Cose EC2 ES256 P-256 curve\n    private static $_COSE_CRV = -1;\n    private static $_COSE_X = -2;\n    private static $_COSE_Y = -3;\n\n    // Cose RSA PS256\n    private static $_COSE_N = -1;\n    private static $_COSE_E = -2;\n\n    private static $_EC2_TYPE = 2;\n    private static $_EC2_ES256 = -7;\n    private static $_EC2_P256 = 1;\n\n    private static $_RSA_TYPE = 3;\n    private static $_RSA_RS256 = -257;\n\n    /**\n     * Parsing the authenticatorData binary.\n     * @param string $binary\n     * @throws WebAuthnException\n     */\n    public function __construct($binary) {\n        if (!\\is_string($binary) || \\strlen($binary) < 37) {\n            throw new WebAuthnException('Invalid authenticatorData input', WebAuthnException::INVALID_DATA);\n        }\n        $this->_binary = $binary;\n\n        // Read infos from binary\n        // https://www.w3.org/TR/webauthn/#sec-authenticator-data\n\n        // RP ID\n        $this->_rpIdHash = \\substr($binary, 0, 32);\n\n        // flags (1 byte)\n        $flags = \\unpack('Cflags', \\substr($binary, 32, 1))['flags'];\n        $this->_flags = $this->_readFlags($flags);\n\n        // signature counter: 32-bit unsigned big-endian integer.\n        $this->_signCount = \\unpack('Nsigncount', \\substr($binary, 33, 4))['signcount'];\n\n        $offset = 37;\n        // https://www.w3.org/TR/webauthn/#sec-attested-credential-data\n        if ($this->_flags->attestedDataIncluded) {\n            $this->_attestedCredentialData = $this->_readAttestData($binary, $offset);\n        }\n\n        if ($this->_flags->extensionDataIncluded) {\n            $this->_readExtensionData(\\substr($binary, $offset));\n        }\n    }\n\n    /**\n     * Authenticator Attestation Globally Unique Identifier, a unique number\n     * that identifies the model of the authenticator (not the specific instance\n     * of the authenticator)\n     * The aaguid may be 0 if the user is using a old u2f device and/or if\n     * the browser is using the fido-u2f format.\n     * @return string\n     * @throws WebAuthnException\n     */\n    public function getAAGUID() {\n        if (!($this->_attestedCredentialData instanceof \\stdClass)) {\n            throw  new WebAuthnException('credential data not included in authenticator data', WebAuthnException::INVALID_DATA);\n        }\n        return $this->_attestedCredentialData->aaguid;\n    }\n\n    /**\n     * returns the authenticatorData as binary\n     * @return string\n     */\n    public function getBinary() {\n        return $this->_binary;\n    }\n\n    /**\n     * returns the credentialId\n     * @return string\n     * @throws WebAuthnException\n     */\n    public function getCredentialId() {\n        if (!($this->_attestedCredentialData instanceof \\stdClass)) {\n            throw  new WebAuthnException('credential id not included in authenticator data', WebAuthnException::INVALID_DATA);\n        }\n        return $this->_attestedCredentialData->credentialId;\n    }\n\n    /**\n     * returns the public key in PEM format\n     * @return string\n     */\n    public function getPublicKeyPem() {\n        $der = null;\n        switch ($this->_attestedCredentialData->credentialPublicKey->kty) {\n            case self::$_EC2_TYPE: $der = $this->_getEc2Der(); break;\n            case self::$_RSA_TYPE: $der = $this->_getRsaDer(); break;\n            default: throw new WebAuthnException('invalid key type', WebAuthnException::INVALID_DATA);\n        }\n\n        $pem = '-----BEGIN PUBLIC KEY-----' . \"\\n\";\n        $pem .= \\chunk_split(\\base64_encode($der), 64, \"\\n\");\n        $pem .= '-----END PUBLIC KEY-----' . \"\\n\";\n        return $pem;\n    }\n\n    /**\n     * returns the public key in U2F format\n     * @return string\n     * @throws WebAuthnException\n     */\n    public function getPublicKeyU2F() {\n        if (!($this->_attestedCredentialData instanceof \\stdClass)) {\n            throw  new WebAuthnException('credential data not included in authenticator data', WebAuthnException::INVALID_DATA);\n        }\n        return \"\\x04\" . // ECC uncompressed\n                $this->_attestedCredentialData->credentialPublicKey->x .\n                $this->_attestedCredentialData->credentialPublicKey->y;\n    }\n\n    /**\n     * returns the SHA256 hash of the relying party id (=hostname)\n     * @return string\n     */\n    public function getRpIdHash() {\n        return $this->_rpIdHash;\n    }\n\n    /**\n     * returns the sign counter\n     * @return int\n     */\n    public function getSignCount() {\n        return $this->_signCount;\n    }\n\n    /**\n     * returns true if the user is present\n     * @return boolean\n     */\n    public function getUserPresent() {\n        return $this->_flags->userPresent;\n    }\n\n    /**\n     * returns true if the user is verified\n     * @return boolean\n     */\n    public function getUserVerified() {\n        return $this->_flags->userVerified;\n    }\n\n    // -----------------------------------------------\n    // PRIVATE\n    // -----------------------------------------------\n\n    /**\n     * Returns DER encoded EC2 key\n     * @return string\n     */\n    private function _getEc2Der() {\n        return $this->_der_sequence(\n            $this->_der_sequence(\n                $this->_der_oid(\"\\x2A\\x86\\x48\\xCE\\x3D\\x02\\x01\") . // OID 1.2.840.10045.2.1 ecPublicKey\n                $this->_der_oid(\"\\x2A\\x86\\x48\\xCE\\x3D\\x03\\x01\\x07\")  // 1.2.840.10045.3.1.7 prime256v1\n            ) .\n            $this->_der_bitString($this->getPublicKeyU2F())\n        );\n    }\n\n    /**\n     * Returns DER encoded RSA key\n     * @return string\n     */\n    private function _getRsaDer() {\n        return $this->_der_sequence(\n            $this->_der_sequence(\n                $this->_der_oid(\"\\x2A\\x86\\x48\\x86\\xF7\\x0D\\x01\\x01\\x01\") . // OID 1.2.840.113549.1.1.1 rsaEncryption\n                $this->_der_nullValue()\n            ) .\n            $this->_der_bitString(\n                $this->_der_sequence(\n                    $this->_der_unsignedInteger($this->_attestedCredentialData->credentialPublicKey->n) .\n                    $this->_der_unsignedInteger($this->_attestedCredentialData->credentialPublicKey->e)\n                )\n            )\n        );\n    }\n\n    /**\n     * reads the flags from flag byte\n     * @param string $binFlag\n     * @return \\stdClass\n     */\n    private function _readFlags($binFlag) {\n        $flags = new \\stdClass();\n\n        $flags->bit_0 = !!($binFlag & 1);\n        $flags->bit_1 = !!($binFlag & 2);\n        $flags->bit_2 = !!($binFlag & 4);\n        $flags->bit_3 = !!($binFlag & 8);\n        $flags->bit_4 = !!($binFlag & 16);\n        $flags->bit_5 = !!($binFlag & 32);\n        $flags->bit_6 = !!($binFlag & 64);\n        $flags->bit_7 = !!($binFlag & 128);\n\n        // named flags\n        $flags->userPresent = $flags->bit_0;\n        $flags->userVerified = $flags->bit_2;\n        $flags->attestedDataIncluded = $flags->bit_6;\n        $flags->extensionDataIncluded = $flags->bit_7;\n        return $flags;\n    }\n\n    /**\n     * read attested data\n     * @param string $binary\n     * @param int $endOffset\n     * @return \\stdClass\n     * @throws WebAuthnException\n     */\n    private function _readAttestData($binary, &$endOffset) {\n        $attestedCData = new \\stdClass();\n        if (\\strlen($binary) <= 55) {\n            throw new WebAuthnException('Attested data should be present but is missing', WebAuthnException::INVALID_DATA);\n        }\n\n        // The AAGUID of the authenticator\n        $attestedCData->aaguid = \\substr($binary, 37, 16);\n\n        //Byte length L of Credential ID, 16-bit unsigned big-endian integer.\n        $length = \\unpack('nlength', \\substr($binary, 53, 2))['length'];\n        $attestedCData->credentialId = \\substr($binary, 55, $length);\n\n        // set end offset\n        $endOffset = 55 + $length;\n\n        // extract public key\n        $attestedCData->credentialPublicKey = $this->_readCredentialPublicKey($binary, 55 + $length, $endOffset);\n\n        return $attestedCData;\n    }\n\n    /**\n     * reads COSE key-encoded elliptic curve public key in EC2 format\n     * @param string $binary\n     * @param int $endOffset\n     * @return \\stdClass\n     * @throws WebAuthnException\n     */\n    private function _readCredentialPublicKey($binary, $offset, &$endOffset) {\n        $enc = CborDecoder::decodeInPlace($binary, $offset, $endOffset);\n\n        // COSE key-encoded elliptic curve public key in EC2 format\n        $credPKey = new \\stdClass();\n        $credPKey->kty = $enc[self::$_COSE_KTY];\n        $credPKey->alg = $enc[self::$_COSE_ALG];\n\n        switch ($credPKey->alg) {\n            case self::$_EC2_ES256: $this->_readCredentialPublicKeyES256($credPKey, $enc); break;\n            case self::$_RSA_RS256: $this->_readCredentialPublicKeyRS256($credPKey, $enc); break;\n        }\n\n        return $credPKey;\n    }\n\n    /**\n     * extract ES256 informations from cose\n     * @param \\stdClass $credPKey\n     * @param \\stdClass $enc\n     * @throws WebAuthnException\n     */\n    private function _readCredentialPublicKeyES256(&$credPKey, $enc) {\n        $credPKey->crv = $enc[self::$_COSE_CRV];\n        $credPKey->x   = $enc[self::$_COSE_X] instanceof ByteBuffer ? $enc[self::$_COSE_X]->getBinaryString() : null;\n        $credPKey->y   = $enc[self::$_COSE_Y] instanceof ByteBuffer ? $enc[self::$_COSE_Y]->getBinaryString() : null;\n        unset ($enc);\n\n        // Validation\n        if ($credPKey->kty !== self::$_EC2_TYPE) {\n            throw new WebAuthnException('public key not in EC2 format', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if ($credPKey->alg !== self::$_EC2_ES256) {\n            throw new WebAuthnException('signature algorithm not ES256', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if ($credPKey->crv !== self::$_EC2_P256) {\n            throw new WebAuthnException('curve not P-256', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if (\\strlen($credPKey->x) !== 32) {\n            throw new WebAuthnException('Invalid X-coordinate', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if (\\strlen($credPKey->y) !== 32) {\n            throw new WebAuthnException('Invalid Y-coordinate', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n    }\n\n    /**\n     * extract RS256 informations from COSE\n     * @param \\stdClass $credPKey\n     * @param \\stdClass $enc\n     * @throws WebAuthnException\n     */\n    private function _readCredentialPublicKeyRS256(&$credPKey, $enc) {\n        $credPKey->n = $enc[self::$_COSE_N] instanceof ByteBuffer ? $enc[self::$_COSE_N]->getBinaryString() : null;\n        $credPKey->e = $enc[self::$_COSE_E] instanceof ByteBuffer ? $enc[self::$_COSE_E]->getBinaryString() : null;\n        unset ($enc);\n\n        // Validation\n        if ($credPKey->kty !== self::$_RSA_TYPE) {\n            throw new WebAuthnException('public key not in RSA format', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if ($credPKey->alg !== self::$_RSA_RS256) {\n            throw new WebAuthnException('signature algorithm not ES256', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if (\\strlen($credPKey->n) !== 256) {\n            throw new WebAuthnException('Invalid RSA modulus', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if (\\strlen($credPKey->e) !== 3) {\n            throw new WebAuthnException('Invalid RSA public exponent', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n    }\n\n    /**\n     * reads cbor encoded extension data.\n     * @param string $binary\n     * @return array\n     * @throws WebAuthnException\n     */\n    private function _readExtensionData($binary) {\n        $ext = CborDecoder::decode($binary);\n        if (!\\is_array($ext)) {\n            throw new WebAuthnException('invalid extension data', WebAuthnException::INVALID_DATA);\n        }\n\n        return $ext;\n    }\n\n\n    // ---------------\n    // DER functions\n    // ---------------\n\n    private function _der_length($len) {\n        if ($len < 128) {\n            return \\chr($len);\n        }\n        $lenBytes = '';\n        while ($len > 0) {\n            $lenBytes = \\chr($len % 256) . $lenBytes;\n            $len = \\intdiv($len, 256);\n        }\n        return \\chr(0x80 | \\strlen($lenBytes)) . $lenBytes;\n    }\n\n    private function _der_sequence($contents) {\n        return \"\\x30\" . $this->_der_length(\\strlen($contents)) . $contents;\n    }\n\n    private function _der_oid($encoded) {\n        return \"\\x06\" . $this->_der_length(\\strlen($encoded)) . $encoded;\n    }\n\n    private function _der_bitString($bytes) {\n        return \"\\x03\" . $this->_der_length(\\strlen($bytes) + 1) . \"\\x00\" . $bytes;\n    }\n\n    private function _der_nullValue() {\n        return \"\\x05\\x00\";\n    }\n\n    private function _der_unsignedInteger($bytes) {\n        $len = \\strlen($bytes);\n\n        // Remove leading zero bytes\n        for ($i = 0; $i < ($len - 1); $i++) {\n            if (\\ord($bytes[$i]) !== 0) {\n                break;\n            }\n        }\n        if ($i !== 0) {\n            $bytes = \\substr($bytes, $i);\n        }\n\n        // If most significant bit is set, prefix with another zero to prevent it being seen as negative number\n        if ((\\ord($bytes[0]) & 0x80) !== 0) {\n            $bytes = \"\\x00\" . $bytes;\n        }\n\n        return \"\\x02\" . $this->_der_length(\\strlen($bytes)) . $bytes;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/AndroidKey.php",
    "content": "<?php\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\nclass AndroidKey extends FormatBase {\n    private $_alg;\n    private $_signature;\n    private $_x5c;\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n\n        // check u2f data\n        $attStmt = $this->_attestationObject['attStmt'];\n\n        if (!\\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {\n            throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('sig', $attStmt) || !\\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('no signature found', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('x5c', $attStmt) || !\\is_array($attStmt['x5c']) || \\count($attStmt['x5c']) < 1) {\n            throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\is_object($attStmt['x5c'][0]) || !($attStmt['x5c'][0] instanceof ByteBuffer)) {\n            throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n        }\n\n        $this->_alg = $attStmt['alg'];\n        $this->_signature = $attStmt['sig']->getBinaryString();\n        $this->_x5c = $attStmt['x5c'][0]->getBinaryString();\n\n        if (count($attStmt['x5c']) > 1) {\n            for ($i=1; $i<count($attStmt['x5c']); $i++) {\n                $this->_x5c_chain[] = $attStmt['x5c'][$i]->getBinaryString();\n            }\n            unset ($i);\n        }\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string\n     */\n    public function getCertificatePem() {\n        return $this->_createCertificatePem($this->_x5c);\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        $publicKey = \\openssl_pkey_get_public($this->getCertificatePem());\n\n        if ($publicKey === false) {\n            throw new WebAuthnException('invalid public key: ' . \\openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        // Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash\n        // using the attestation public key in attestnCert with the algorithm specified in alg.\n        $dataToVerify = $this->_authenticatorData->getBinary();\n        $dataToVerify .= $clientDataHash;\n\n        $coseAlgorithm = $this->_getCoseAlgorithm($this->_alg);\n\n        // check certificate\n        return \\openssl_verify($dataToVerify, $this->_signature, $publicKey, $coseAlgorithm->openssl) === 1;\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        $chainC = $this->_createX5cChainFile();\n        if ($chainC) {\n            $rootCas[] = $chainC;\n        }\n\n        $v = \\openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);\n        if ($v === -1) {\n            throw new WebAuthnException('error on validating root certificate: ' . \\openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n        return $v;\n    }\n}\n\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/AndroidSafetyNet.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\nclass AndroidSafetyNet extends FormatBase {\n    private $_signature;\n    private $_signedValue;\n    private $_x5c;\n    private $_payload;\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n\n        // check data\n        $attStmt = $this->_attestationObject['attStmt'];\n\n        if (!\\array_key_exists('ver', $attStmt) || !$attStmt['ver']) {\n            throw new WebAuthnException('invalid Android Safety Net Format', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('response', $attStmt) || !($attStmt['response'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('invalid Android Safety Net Format', WebAuthnException::INVALID_DATA);\n        }\n\n        $response = $attStmt['response']->getBinaryString();\n\n        // Response is a JWS [RFC7515] object in Compact Serialization.\n        // JWSs have three segments separated by two period ('.') characters\n        $parts = \\explode('.', $response);\n        unset ($response);\n        if (\\count($parts) !== 3) {\n            throw new WebAuthnException('invalid JWS data', WebAuthnException::INVALID_DATA);\n        }\n\n        $header = $this->_base64url_decode($parts[0]);\n        $payload = $this->_base64url_decode($parts[1]);\n        $this->_signature = $this->_base64url_decode($parts[2]);\n        $this->_signedValue = $parts[0] . '.' . $parts[1];\n        unset ($parts);\n\n        $header = \\json_decode($header);\n        $payload = \\json_decode($payload);\n\n        if (!($header instanceof \\stdClass)) {\n            throw new WebAuthnException('invalid JWS header', WebAuthnException::INVALID_DATA);\n        }\n        if (!($payload instanceof \\stdClass)) {\n            throw new WebAuthnException('invalid JWS payload', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!$header->x5c || !is_array($header->x5c) || count($header->x5c) === 0) {\n            throw new WebAuthnException('No X.509 signature in JWS Header', WebAuthnException::INVALID_DATA);\n        }\n\n        // algorithm\n        if (!\\in_array($header->alg, array('RS256', 'ES256'))) {\n            throw new WebAuthnException('invalid JWS algorithm ' . $header->alg, WebAuthnException::INVALID_DATA);\n        }\n\n        $this->_x5c = \\base64_decode($header->x5c[0]);\n        $this->_payload = $payload;\n\n        if (count($header->x5c) > 1) {\n            for ($i=1; $i<count($header->x5c); $i++) {\n                $this->_x5c_chain[] = \\base64_decode($header->x5c[$i]);\n            }\n            unset ($i);\n        }\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string\n     */\n    public function getCertificatePem() {\n        return $this->_createCertificatePem($this->_x5c);\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        $publicKey = \\openssl_pkey_get_public($this->getCertificatePem());\n\n        // Verify that the nonce in the response is identical to the Base64 encoding\n        // of the SHA-256 hash of the concatenation of authenticatorData and clientDataHash.\n        if (!$this->_payload->nonce || $this->_payload->nonce !== \\base64_encode(\\hash('SHA256', $this->_authenticatorData->getBinary() . $clientDataHash, true))) {\n            throw new WebAuthnException('invalid nonce in JWS payload', WebAuthnException::INVALID_DATA);\n        }\n\n        // Verify that attestationCert is issued to the hostname \"attest.android.com\"\n        $certInfo = \\openssl_x509_parse($this->getCertificatePem());\n        if (!\\is_array($certInfo) || !$certInfo['subject'] || $certInfo['subject']['CN'] !== 'attest.android.com') {\n            throw new WebAuthnException('invalid certificate CN in JWS (' . $certInfo['subject']['CN']. ')', WebAuthnException::INVALID_DATA);\n        }\n\n        // Verify that the ctsProfileMatch attribute in the payload of response is true.\n        if (!$this->_payload->ctsProfileMatch) {\n            throw new WebAuthnException('invalid ctsProfileMatch in payload', WebAuthnException::INVALID_DATA);\n        }\n\n        // check certificate\n        return \\openssl_verify($this->_signedValue, $this->_signature, $publicKey, OPENSSL_ALGO_SHA256) === 1;\n    }\n\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        $chainC = $this->_createX5cChainFile();\n        if ($chainC) {\n            $rootCas[] = $chainC;\n        }\n\n        $v = \\openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);\n        if ($v === -1) {\n            throw new WebAuthnException('error on validating root certificate: ' . \\openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n        return $v;\n    }\n\n\n    /**\n     * decode base64 url\n     * @param string $data\n     * @return string\n     */\n    private function _base64url_decode($data) {\n        return \\base64_decode(\\strtr($data, '-_', '+/') . \\str_repeat('=', 3 - (3 + \\strlen($data)) % 4));\n    }\n}\n\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/Apple.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\nclass Apple extends FormatBase {\n    private $_x5c;\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n\n        // check packed data\n        $attStmt = $this->_attestationObject['attStmt'];\n\n\n        // certificate for validation\n        if (\\array_key_exists('x5c', $attStmt) && \\is_array($attStmt['x5c']) && \\count($attStmt['x5c']) > 0) {\n\n            // The attestation certificate attestnCert MUST be the first element in the array\n            $attestnCert = array_shift($attStmt['x5c']);\n\n            if (!($attestnCert instanceof ByteBuffer)) {\n                throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n            }\n\n            $this->_x5c = $attestnCert->getBinaryString();\n\n            // certificate chain\n            foreach ($attStmt['x5c'] as $chain) {\n                if ($chain instanceof ByteBuffer) {\n                    $this->_x5c_chain[] = $chain->getBinaryString();\n                }\n            }\n        } else {\n            throw new WebAuthnException('invalid Apple attestation statement: missing x5c', WebAuthnException::INVALID_DATA);\n        }\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string|null\n     */\n    public function getCertificatePem() {\n        return $this->_createCertificatePem($this->_x5c);\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        return $this->_validateOverX5c($clientDataHash);\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        $chainC = $this->_createX5cChainFile();\n        if ($chainC) {\n            $rootCas[] = $chainC;\n        }\n\n        $v = \\openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);\n        if ($v === -1) {\n            throw new WebAuthnException('error on validating root certificate: ' . \\openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n        return $v;\n    }\n\n    /**\n     * validate if x5c is present\n     * @param string $clientDataHash\n     * @return bool\n     * @throws WebAuthnException\n     */\n    protected function _validateOverX5c($clientDataHash) {\n        $publicKey = \\openssl_pkey_get_public($this->getCertificatePem());\n\n        if ($publicKey === false) {\n            throw new WebAuthnException('invalid public key: ' . \\openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        // Concatenate authenticatorData and clientDataHash to form nonceToHash.\n        $nonceToHash = $this->_authenticatorData->getBinary();\n        $nonceToHash .= $clientDataHash;\n\n        // Perform SHA-256 hash of nonceToHash to produce nonce\n        $nonce = hash('SHA256', $nonceToHash, true);\n\n        $credCert = openssl_x509_read($this->getCertificatePem());\n        if ($credCert === false) {\n            throw new WebAuthnException('invalid x5c certificate: ' . \\openssl_error_string(), WebAuthnException::INVALID_DATA);\n        }\n\n        $keyData = openssl_pkey_get_details(openssl_pkey_get_public($credCert));\n        $key = is_array($keyData) && array_key_exists('key', $keyData) ? $keyData['key'] : null;\n\n\n        // Verify that nonce equals the value of the extension with OID ( 1.2.840.113635.100.8.2 ) in credCert.\n        $parsedCredCert = openssl_x509_parse($credCert);\n        $nonceExtension = isset($parsedCredCert['extensions']['1.2.840.113635.100.8.2']) ? $parsedCredCert['extensions']['1.2.840.113635.100.8.2'] : '';\n\n        // nonce padded by ASN.1 string: 30 24 A1 22 04 20\n        // 30     — type tag indicating sequence\n        // 24     — 36 byte following\n        //   A1   — Enumerated [1]\n        //   22   — 34 byte following\n        //     04 — type tag indicating octet string\n        //     20 — 32 byte following\n\n        $asn1Padding = \"\\x30\\x24\\xA1\\x22\\x04\\x20\";\n        if (substr($nonceExtension, 0, strlen($asn1Padding)) === $asn1Padding) {\n            $nonceExtension = substr($nonceExtension, strlen($asn1Padding));\n        }\n\n        if ($nonceExtension !== $nonce) {\n            throw new WebAuthnException('nonce doesn\\'t equal the value of the extension with OID 1.2.840.113635.100.8.2', WebAuthnException::INVALID_DATA);\n        }\n\n        // Verify that the credential public key equals the Subject Public Key of credCert.\n        $authKeyData = openssl_pkey_get_details(openssl_pkey_get_public($this->_authenticatorData->getPublicKeyPem()));\n        $authKey = is_array($authKeyData) && array_key_exists('key', $authKeyData) ? $authKeyData['key'] : null;\n\n        if ($key === null || $key !== $authKey) {\n            throw new WebAuthnException('credential public key doesn\\'t equal the Subject Public Key of credCert', WebAuthnException::INVALID_DATA);\n        }\n\n        return true;\n    }\n\n}\n\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/FormatBase.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\n\n\nabstract class FormatBase {\n    protected $_attestationObject = null;\n    protected $_authenticatorData = null;\n    protected $_x5c_chain = array();\n    protected $_x5c_tempFile = null;\n\n    /**\n     *\n     * @param Array $AttestionObject\n     * @param AuthenticatorData $authenticatorData\n     */\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        $this->_attestationObject = $AttestionObject;\n        $this->_authenticatorData = $authenticatorData;\n    }\n\n    /**\n     *\n     */\n    public function __destruct() {\n        // delete X.509 chain certificate file after use\n        if ($this->_x5c_tempFile && \\is_file($this->_x5c_tempFile)) {\n            \\unlink($this->_x5c_tempFile);\n        }\n    }\n\n    /**\n     * returns the certificate chain in PEM format\n     * @return string|null\n     */\n    public function getCertificateChain() {\n        if ($this->_x5c_tempFile && \\is_file($this->_x5c_tempFile)) {\n            return \\file_get_contents($this->_x5c_tempFile);\n        }\n        return null;\n    }\n\n    /**\n     * returns the key X.509 certificate in PEM format\n     * @return string\n     */\n    public function getCertificatePem() {\n        // need to be overwritten\n        return null;\n    }\n\n    /**\n     * checks validity of the signature\n     * @param string $clientDataHash\n     * @return bool\n     * @throws WebAuthnException\n     */\n    public function validateAttestation($clientDataHash) {\n        // need to be overwritten\n        return false;\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        // need to be overwritten\n        return false;\n    }\n\n\n    /**\n     * create a PEM encoded certificate with X.509 binary data\n     * @param string $x5c\n     * @return string\n     */\n    protected function _createCertificatePem($x5c) {\n        $pem = '-----BEGIN CERTIFICATE-----' . \"\\n\";\n        $pem .= \\chunk_split(\\base64_encode($x5c), 64, \"\\n\");\n        $pem .= '-----END CERTIFICATE-----' . \"\\n\";\n        return $pem;\n    }\n\n    /**\n     * creates a PEM encoded chain file\n     * @return type\n     */\n    protected function _createX5cChainFile() {\n        $content = '';\n        if (\\is_array($this->_x5c_chain) && \\count($this->_x5c_chain) > 0) {\n            foreach ($this->_x5c_chain as $x5c) {\n                $certInfo = \\openssl_x509_parse($this->_createCertificatePem($x5c));\n                // check if issuer = subject (self signed)\n                if (\\is_array($certInfo) && \\is_array($certInfo['issuer']) && \\is_array($certInfo['subject'])) {\n                    $selfSigned = true;\n                    foreach ($certInfo['issuer'] as $k => $v) {\n                        if ($certInfo['subject'][$k] !== $v) {\n                            $selfSigned = false;\n                            break;\n                        }\n                    }\n\n                    if (!$selfSigned) {\n                        $content .= \"\\n\" . $this->_createCertificatePem($x5c) . \"\\n\";\n                    }\n                }\n            }\n        }\n\n        if ($content) {\n            $this->_x5c_tempFile = \\sys_get_temp_dir() . '/x5c_chain_' . \\base_convert(\\rand(), 10, 36) . '.pem';\n            if (\\file_put_contents($this->_x5c_tempFile, $content) !== false) {\n                return $this->_x5c_tempFile;\n            }\n        }\n\n        return null;\n    }\n\n\n    /**\n     * returns the name and openssl key for provided cose number.\n     * @param int $coseNumber\n     * @return \\stdClass|null\n     */\n    protected function _getCoseAlgorithm($coseNumber) {\n        // https://www.iana.org/assignments/cose/cose.xhtml#algorithms\n        $coseAlgorithms = array(\n            array(\n                'hash' => 'SHA1',\n                'openssl' => OPENSSL_ALGO_SHA1,\n                'cose' => array(\n                    -65535  // RS1\n                )),\n\n            array(\n                'hash' => 'SHA256',\n                'openssl' => OPENSSL_ALGO_SHA256,\n                'cose' => array(\n                    -257, // RS256\n                    -37,  // PS256\n                    -7,   // ES256\n                    5     // HMAC256\n                )),\n\n            array(\n                'hash' => 'SHA384',\n                'openssl' => OPENSSL_ALGO_SHA384,\n                'cose' => array(\n                    -258, // RS384\n                    -38,  // PS384\n                    -35,  // ES384\n                    6     // HMAC384\n                )),\n\n            array(\n                'hash' => 'SHA512',\n                'openssl' => OPENSSL_ALGO_SHA512,\n                'cose' => array(\n                    -259, // RS512\n                    -39,  // PS512\n                    -36,  // ES512\n                    7     // HMAC512\n                ))\n        );\n\n        foreach ($coseAlgorithms as $coseAlgorithm) {\n            if (\\in_array($coseNumber, $coseAlgorithm['cose'], true)) {\n                $return = new \\stdClass();\n                $return->hash = $coseAlgorithm['hash'];\n                $return->openssl = $coseAlgorithm['openssl'];\n                return $return;\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/None.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\n\nclass None extends FormatBase {\n\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string\n     */\n    public function getCertificatePem() {\n        return null;\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        return true;\n    }\n\n    /**\n     * validates the certificate against root certificates.\n     * Format 'none' does not contain any ca, so always false.\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/Packed.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\nclass Packed extends FormatBase {\n    private $_alg;\n    private $_signature;\n    private $_x5c;\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n\n        // check packed data\n        $attStmt = $this->_attestationObject['attStmt'];\n\n        if (!\\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {\n            throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('sig', $attStmt) || !\\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('no signature found', WebAuthnException::INVALID_DATA);\n        }\n\n        $this->_alg = $attStmt['alg'];\n        $this->_signature = $attStmt['sig']->getBinaryString();\n\n        // certificate for validation\n        if (\\array_key_exists('x5c', $attStmt) && \\is_array($attStmt['x5c']) && \\count($attStmt['x5c']) > 0) {\n\n            // The attestation certificate attestnCert MUST be the first element in the array\n            $attestnCert = array_shift($attStmt['x5c']);\n\n            if (!($attestnCert instanceof ByteBuffer)) {\n                throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n            }\n\n            $this->_x5c = $attestnCert->getBinaryString();\n\n            // certificate chain\n            foreach ($attStmt['x5c'] as $chain) {\n                if ($chain instanceof ByteBuffer) {\n                    $this->_x5c_chain[] = $chain->getBinaryString();\n                }\n            }\n        }\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string|null\n     */\n    public function getCertificatePem() {\n        if (!$this->_x5c) {\n            return null;\n        }\n        return $this->_createCertificatePem($this->_x5c);\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        if ($this->_x5c) {\n            return $this->_validateOverX5c($clientDataHash);\n        } else {\n            return $this->_validateSelfAttestation($clientDataHash);\n        }\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        if (!$this->_x5c) {\n            return false;\n        }\n\n        $chainC = $this->_createX5cChainFile();\n        if ($chainC) {\n            $rootCas[] = $chainC;\n        }\n\n        $v = \\openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);\n        if ($v === -1) {\n            throw new WebAuthnException('error on validating root certificate: ' . \\openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n        return $v;\n    }\n\n    /**\n     * validate if x5c is present\n     * @param string $clientDataHash\n     * @return bool\n     * @throws WebAuthnException\n     */\n    protected function _validateOverX5c($clientDataHash) {\n        $publicKey = \\openssl_pkey_get_public($this->getCertificatePem());\n\n        if ($publicKey === false) {\n            throw new WebAuthnException('invalid public key: ' . \\openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        // Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash\n        // using the attestation public key in attestnCert with the algorithm specified in alg.\n        $dataToVerify = $this->_authenticatorData->getBinary();\n        $dataToVerify .= $clientDataHash;\n\n        $coseAlgorithm = $this->_getCoseAlgorithm($this->_alg);\n\n        // check certificate\n        return \\openssl_verify($dataToVerify, $this->_signature, $publicKey, $coseAlgorithm->openssl) === 1;\n    }\n\n    /**\n     * validate if self attestation is in use\n     * @param string $clientDataHash\n     * @return bool\n     */\n    protected function _validateSelfAttestation($clientDataHash) {\n        // Verify that sig is a valid signature over the concatenation of authenticatorData and clientDataHash\n        // using the credential public key with alg.\n        $dataToVerify = $this->_authenticatorData->getBinary();\n        $dataToVerify .= $clientDataHash;\n\n        $publicKey = $this->_authenticatorData->getPublicKeyPem();\n\n        // check certificate\n        return \\openssl_verify($dataToVerify, $this->_signature, $publicKey, OPENSSL_ALGO_SHA256) === 1;\n    }\n}\n\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/Tpm.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\nclass Tpm extends FormatBase {\n    private $_TPM_GENERATED_VALUE = \"\\xFF\\x54\\x43\\x47\";\n    private $_TPM_ST_ATTEST_CERTIFY = \"\\x80\\x17\";\n    private $_alg;\n    private $_signature;\n    private $_pubArea;\n    private $_x5c;\n\n    /**\n     * @var ByteBuffer\n     */\n    private $_certInfo;\n\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n\n        // check packed data\n        $attStmt = $this->_attestationObject['attStmt'];\n\n        if (!\\array_key_exists('ver', $attStmt) || $attStmt['ver'] !== '2.0') {\n            throw new WebAuthnException('invalid tpm version: ' . $attStmt['ver'], WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('alg', $attStmt) || $this->_getCoseAlgorithm($attStmt['alg']) === null) {\n            throw new WebAuthnException('unsupported alg: ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('sig', $attStmt) || !\\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('signature not found', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('certInfo', $attStmt) || !\\is_object($attStmt['certInfo']) || !($attStmt['certInfo'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('certInfo not found', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('pubArea', $attStmt) || !\\is_object($attStmt['pubArea']) || !($attStmt['pubArea'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('pubArea not found', WebAuthnException::INVALID_DATA);\n        }\n\n        $this->_alg = $attStmt['alg'];\n        $this->_signature = $attStmt['sig']->getBinaryString();\n        $this->_certInfo = $attStmt['certInfo'];\n        $this->_pubArea = $attStmt['pubArea'];\n\n        // certificate for validation\n        if (\\array_key_exists('x5c', $attStmt) && \\is_array($attStmt['x5c']) && \\count($attStmt['x5c']) > 0) {\n\n            // The attestation certificate attestnCert MUST be the first element in the array\n            $attestnCert = array_shift($attStmt['x5c']);\n\n            if (!($attestnCert instanceof ByteBuffer)) {\n                throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n            }\n\n            $this->_x5c = $attestnCert->getBinaryString();\n\n            // certificate chain\n            foreach ($attStmt['x5c'] as $chain) {\n                if ($chain instanceof ByteBuffer) {\n                    $this->_x5c_chain[] = $chain->getBinaryString();\n                }\n            }\n\n        } else {\n            throw new WebAuthnException('no x5c certificate found', WebAuthnException::INVALID_DATA);\n        }\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string|null\n     */\n    public function getCertificatePem() {\n        if (!$this->_x5c) {\n            return null;\n        }\n        return $this->_createCertificatePem($this->_x5c);\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        return $this->_validateOverX5c($clientDataHash);\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        if (!$this->_x5c) {\n            return false;\n        }\n\n        $chainC = $this->_createX5cChainFile();\n        if ($chainC) {\n            $rootCas[] = $chainC;\n        }\n\n        $v = \\openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);\n        if ($v === -1) {\n            throw new WebAuthnException('error on validating root certificate: ' . \\openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n        return $v;\n    }\n\n    /**\n     * validate if x5c is present\n     * @param string $clientDataHash\n     * @return bool\n     * @throws WebAuthnException\n     */\n    protected function _validateOverX5c($clientDataHash) {\n        $publicKey = \\openssl_pkey_get_public($this->getCertificatePem());\n\n        if ($publicKey === false) {\n            throw new WebAuthnException('invalid public key: ' . \\openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        // Concatenate authenticatorData and clientDataHash to form attToBeSigned.\n        $attToBeSigned = $this->_authenticatorData->getBinary();\n        $attToBeSigned .= $clientDataHash;\n\n        // Validate that certInfo is valid:\n\n        // Verify that magic is set to TPM_GENERATED_VALUE.\n        if ($this->_certInfo->getBytes(0, 4) !== $this->_TPM_GENERATED_VALUE) {\n            throw new WebAuthnException('tpm magic not TPM_GENERATED_VALUE', WebAuthnException::INVALID_DATA);\n        }\n\n        // Verify that type is set to TPM_ST_ATTEST_CERTIFY.\n        if ($this->_certInfo->getBytes(4, 2) !== $this->_TPM_ST_ATTEST_CERTIFY) {\n            throw new WebAuthnException('tpm type not TPM_ST_ATTEST_CERTIFY', WebAuthnException::INVALID_DATA);\n        }\n\n        $offset = 6;\n        $qualifiedSigner = $this->_tpmReadLengthPrefixed($this->_certInfo, $offset);\n        $extraData = $this->_tpmReadLengthPrefixed($this->_certInfo, $offset);\n        $coseAlg = $this->_getCoseAlgorithm($this->_alg);\n\n        // Verify that extraData is set to the hash of attToBeSigned using the hash algorithm employed in \"alg\".\n        if ($extraData->getBinaryString() !== \\hash($coseAlg->hash, $attToBeSigned, true)) {\n            throw new WebAuthnException('certInfo:extraData not hash of attToBeSigned', WebAuthnException::INVALID_DATA);\n        }\n\n        // Verify the sig is a valid signature over certInfo using the attestation\n        // public key in aikCert with the algorithm specified in alg.\n        return \\openssl_verify($this->_certInfo->getBinaryString(), $this->_signature, $publicKey, $coseAlg->openssl) === 1;\n    }\n\n\n    /**\n     * returns next part of ByteBuffer\n     * @param ByteBuffer $buffer\n     * @param int $offset\n     * @return ByteBuffer\n     */\n    protected function _tpmReadLengthPrefixed(ByteBuffer $buffer, &$offset) {\n        $len = $buffer->getUint16Val($offset);\n        $data = $buffer->getBytes($offset + 2, $len);\n        $offset += (2 + $len);\n\n        return new ByteBuffer($data);\n    }\n\n}\n\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Attestation/Format/U2f.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Attestation\\Format;\nuse lbuchs\\WebAuthn\\Attestation\\AuthenticatorData;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\nclass U2f extends FormatBase {\n    private $_alg = -7;\n    private $_signature;\n    private $_x5c;\n\n    public function __construct($AttestionObject, AuthenticatorData $authenticatorData) {\n        parent::__construct($AttestionObject, $authenticatorData);\n\n        // check u2f data\n        $attStmt = $this->_attestationObject['attStmt'];\n\n        if (\\array_key_exists('alg', $attStmt) && $attStmt['alg'] !== $this->_alg) {\n            throw new WebAuthnException('u2f only accepts algorithm -7 (\"ES256\"), but got ' . $attStmt['alg'], WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('sig', $attStmt) || !\\is_object($attStmt['sig']) || !($attStmt['sig'] instanceof ByteBuffer)) {\n            throw new WebAuthnException('no signature found', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\array_key_exists('x5c', $attStmt) || !\\is_array($attStmt['x5c']) || \\count($attStmt['x5c']) !== 1) {\n            throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n        }\n\n        if (!\\is_object($attStmt['x5c'][0]) || !($attStmt['x5c'][0] instanceof ByteBuffer)) {\n            throw new WebAuthnException('invalid x5c certificate', WebAuthnException::INVALID_DATA);\n        }\n\n        $this->_signature = $attStmt['sig']->getBinaryString();\n        $this->_x5c = $attStmt['x5c'][0]->getBinaryString();\n    }\n\n\n    /*\n     * returns the key certificate in PEM format\n     * @return string\n     */\n    public function getCertificatePem() {\n        $pem = '-----BEGIN CERTIFICATE-----' . \"\\n\";\n        $pem .= \\chunk_split(\\base64_encode($this->_x5c), 64, \"\\n\");\n        $pem .= '-----END CERTIFICATE-----' . \"\\n\";\n        return $pem;\n    }\n\n    /**\n     * @param string $clientDataHash\n     */\n    public function validateAttestation($clientDataHash) {\n        $publicKey = \\openssl_pkey_get_public($this->getCertificatePem());\n\n        if ($publicKey === false) {\n            throw new WebAuthnException('invalid public key: ' . \\openssl_error_string(), WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        // Let verificationData be the concatenation of (0x00 || rpIdHash || clientDataHash || credentialId || publicKeyU2F)\n        $dataToVerify = \"\\x00\";\n        $dataToVerify .= $this->_authenticatorData->getRpIdHash();\n        $dataToVerify .= $clientDataHash;\n        $dataToVerify .= $this->_authenticatorData->getCredentialId();\n        $dataToVerify .= $this->_authenticatorData->getPublicKeyU2F();\n\n        $coseAlgorithm = $this->_getCoseAlgorithm($this->_alg);\n\n        // check certificate\n        return \\openssl_verify($dataToVerify, $this->_signature, $publicKey, $coseAlgorithm->openssl) === 1;\n    }\n\n    /**\n     * validates the certificate against root certificates\n     * @param array $rootCas\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    public function validateRootCertificate($rootCas) {\n        $chainC = $this->_createX5cChainFile();\n        if ($chainC) {\n            $rootCas[] = $chainC;\n        }\n\n        $v = \\openssl_x509_checkpurpose($this->getCertificatePem(), -1, $rootCas);\n        if ($v === -1) {\n            throw new WebAuthnException('error on validating root certificate: ' . \\openssl_error_string(), WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n        return $v;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/Binary/ByteBuffer.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\Binary;\nuse lbuchs\\WebAuthn\\WebAuthnException;\n\n/**\n * Modified version of https://github.com/madwizard-thomas/webauthn-server/blob/master/src/Format/ByteBuffer.php\n * Copyright © 2018 Thomas Bleeker - MIT licensed\n * Modified by Lukas Buchs\n * Thanks Thomas for your work!\n */\nclass ByteBuffer implements \\JsonSerializable, \\Serializable {\n    /**\n     * @var bool\n     */\n    public static $useBase64UrlEncoding = false;\n\n    /**\n     * @var string\n     */\n    private $_data;\n\n    /**\n     * @var int\n     */\n    private $_length;\n\n    public function __construct($binaryData) {\n        $this->_data = $binaryData;\n        $this->_length = \\strlen($binaryData);\n    }\n\n\n    // -----------------------\n    // PUBLIC STATIC\n    // -----------------------\n\n    /**\n     * create a ByteBuffer from a base64 url encoded string\n     * @param string $base64url\n     * @return ByteBuffer\n     */\n    public static function fromBase64Url($base64url) {\n        $bin = self::_base64url_decode($base64url);\n        if ($bin === false) {\n            throw new WebAuthnException('ByteBuffer: Invalid base64 url string', WebAuthnException::BYTEBUFFER);\n        }\n        return new ByteBuffer($bin);\n    }\n\n    /**\n     * create a ByteBuffer from a base64 url encoded string\n     * @param string $hex\n     * @return ByteBuffer\n     */\n    public static function fromHex($hex) {\n        $bin = \\hex2bin($hex);\n        if ($bin === false) {\n            throw new WebAuthnException('ByteBuffer: Invalid hex string', WebAuthnException::BYTEBUFFER);\n        }\n        return new ByteBuffer($bin);\n    }\n\n    /**\n     * create a random ByteBuffer\n     * @param string $length\n     * @return ByteBuffer\n     */\n    public static function randomBuffer($length) {\n        if (\\function_exists('random_bytes')) { // >PHP 7.0\n            return new ByteBuffer(\\random_bytes($length));\n\n        } else if (\\function_exists('openssl_random_pseudo_bytes')) {\n            return new ByteBuffer(\\openssl_random_pseudo_bytes($length));\n\n        } else {\n            throw new WebAuthnException('ByteBuffer: cannot generate random bytes', WebAuthnException::BYTEBUFFER);\n        }\n    }\n\n    // -----------------------\n    // PUBLIC\n    // -----------------------\n\n    public function getBytes($offset, $length) {\n        if ($offset < 0 || $length < 0 || ($offset + $length > $this->_length)) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset or length', WebAuthnException::BYTEBUFFER);\n        }\n        return \\substr($this->_data, $offset, $length);\n    }\n\n    public function getByteVal($offset) {\n        if ($offset < 0 || $offset >= $this->_length) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);\n        }\n        return \\ord(\\substr($this->_data, $offset, 1));\n    }\n\n    public function getJson($jsonFlags=0) {\n        $data = \\json_decode($this->getBinaryString(), null, 512, $jsonFlags);\n        if (\\json_last_error() !== JSON_ERROR_NONE) {\n            throw new WebAuthnException(\\json_last_error_msg(), WebAuthnException::BYTEBUFFER);\n        }\n        return $data;\n    }\n\n    public function getLength() {\n        return $this->_length;\n    }\n\n    public function getUint16Val($offset) {\n        if ($offset < 0 || ($offset + 2) > $this->_length) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);\n        }\n        return unpack('n', $this->_data, $offset)[1];\n    }\n\n    public function getUint32Val($offset) {\n        if ($offset < 0 || ($offset + 4) > $this->_length) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);\n        }\n        $val = unpack('N', $this->_data, $offset)[1];\n\n        // Signed integer overflow causes signed negative numbers\n        if ($val < 0) {\n            throw new WebAuthnException('ByteBuffer: Value out of integer range.', WebAuthnException::BYTEBUFFER);\n        }\n        return $val;\n    }\n\n    public function getUint64Val($offset) {\n        if (PHP_INT_SIZE < 8) {\n            throw new WebAuthnException('ByteBuffer: 64-bit values not supported by this system', WebAuthnException::BYTEBUFFER);\n        }\n        if ($offset < 0 || ($offset + 8) > $this->_length) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);\n        }\n        $val = unpack('J', $this->_data, $offset)[1];\n\n        // Signed integer overflow causes signed negative numbers\n        if ($val < 0) {\n            throw new WebAuthnException('ByteBuffer: Value out of integer range.', WebAuthnException::BYTEBUFFER);\n        }\n\n        return $val;\n    }\n\n    public function getHalfFloatVal($offset) {\n        //FROM spec pseudo decode_half(unsigned char *halfp)\n        $half = $this->getUint16Val($offset);\n\n        $exp = ($half >> 10) & 0x1f;\n        $mant = $half & 0x3ff;\n\n        if ($exp === 0) {\n            $val = $mant * (2 ** -24);\n        } elseif ($exp !== 31) {\n            $val = ($mant + 1024) * (2 ** ($exp - 25));\n        } else {\n            $val = ($mant === 0) ? INF : NAN;\n        }\n\n        return ($half & 0x8000) ? -$val : $val;\n    }\n\n    public function getFloatVal($offset) {\n        if ($offset < 0 || ($offset + 4) > $this->_length) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);\n        }\n        return unpack('G', $this->_data, $offset)[1];\n    }\n\n    public function getDoubleVal($offset) {\n        if ($offset < 0 || ($offset + 8) > $this->_length) {\n            throw new WebAuthnException('ByteBuffer: Invalid offset', WebAuthnException::BYTEBUFFER);\n        }\n        return unpack('E', $this->_data, $offset)[1];\n    }\n\n    /**\n     * @return string\n     */\n    public function getBinaryString() {\n        return $this->_data;\n    }\n\n    /**\n     * @param string $buffer\n     * @return bool\n     */\n    public function equals($buffer) {\n        return is_string($this->_data) && $this->_data === $buffer->data;\n    }\n\n    /**\n     * @return string\n     */\n    public function getHex() {\n        return \\bin2hex($this->_data);\n    }\n\n    /**\n     * @return bool\n     */\n    public function isEmpty() {\n        return $this->_length === 0;\n    }\n\n\n    /**\n     * jsonSerialize interface\n     * return binary data in RFC 1342-Like serialized string\n     * @return string\n     */\n    public function jsonSerialize() {\n        if (ByteBuffer::$useBase64UrlEncoding) {\n            return self::_base64url_encode($this->_data);\n\n        } else {\n            return '=?BINARY?B?' . \\base64_encode($this->_data) . '?=';\n        }\n    }\n\n    /**\n     * Serializable-Interface\n     * @return string\n     */\n    public function serialize() {\n        return \\serialize($this->_data);\n    }\n\n    /**\n     * Serializable-Interface\n     * @param string $serialized\n     */\n    public function unserialize($serialized) {\n        $this->_data = \\unserialize($serialized);\n        $this->_length = \\strlen($this->_data);\n    }\n\n    /**\n     * (PHP 8 deprecates Serializable-Interface)\n     * @return array\n     */\n    public function __serialize() {\n        return [\n            'data' => \\serialize($this->_data)\n        ];\n    }\n\n    /**\n     * object to string\n     * @return string\n     */\n    public function __toString() {\n        return $this->getHex();\n    }\n\n    /**\n     * (PHP 8 deprecates Serializable-Interface)\n     * @param array $data\n     * @return void\n     */\n    public function __unserialize($data) {\n        if ($data && isset($data['data'])) {\n            $this->_data = \\unserialize($data['data']);\n            $this->_length = \\strlen($this->_data);\n        }\n    }\n\n    // -----------------------\n    // PROTECTED STATIC\n    // -----------------------\n\n    /**\n     * base64 url decoding\n     * @param string $data\n     * @return string\n     */\n    protected static function _base64url_decode($data) {\n        return \\base64_decode(\\strtr($data, '-_', '+/') . \\str_repeat('=', 3 - (3 + \\strlen($data)) % 4));\n    }\n\n    /**\n     * base64 url encoding\n     * @param string $data\n     * @return string\n     */\n    protected static function _base64url_encode($data) {\n        return \\rtrim(\\strtr(\\base64_encode($data), '+/', '-_'), '=');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/CBOR/CborDecoder.php",
    "content": "<?php\n\n\nnamespace lbuchs\\WebAuthn\\CBOR;\nuse lbuchs\\WebAuthn\\WebAuthnException;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\n\n/**\n * Modified version of https://github.com/madwizard-thomas/webauthn-server/blob/master/src/Format/CborDecoder.php\n * Copyright © 2018 Thomas Bleeker - MIT licensed\n * Modified by Lukas Buchs\n * Thanks Thomas for your work!\n */\nclass CborDecoder {\n    const CBOR_MAJOR_UNSIGNED_INT = 0;\n    const CBOR_MAJOR_TEXT_STRING = 3;\n    const CBOR_MAJOR_FLOAT_SIMPLE = 7;\n    const CBOR_MAJOR_NEGATIVE_INT = 1;\n    const CBOR_MAJOR_ARRAY = 4;\n    const CBOR_MAJOR_TAG = 6;\n    const CBOR_MAJOR_MAP = 5;\n    const CBOR_MAJOR_BYTE_STRING = 2;\n\n    /**\n     * @param ByteBuffer|string $bufOrBin\n     * @return mixed\n     * @throws WebAuthnException\n     */\n    public static function decode($bufOrBin) {\n        $buf = $bufOrBin instanceof ByteBuffer ? $bufOrBin : new ByteBuffer($bufOrBin);\n\n        $offset = 0;\n        $result = self::_parseItem($buf, $offset);\n        if ($offset !== $buf->getLength()) {\n            throw new WebAuthnException('Unused bytes after data item.', WebAuthnException::CBOR);\n        }\n        return $result;\n    }\n\n    /**\n     * @param ByteBuffer|string $bufOrBin\n     * @param int $startOffset\n     * @param int|null $endOffset\n     * @return mixed\n     */\n    public static function decodeInPlace($bufOrBin, $startOffset, &$endOffset = null) {\n        $buf = $bufOrBin instanceof ByteBuffer ? $bufOrBin : new ByteBuffer($bufOrBin);\n\n        $offset = $startOffset;\n        $data = self::_parseItem($buf, $offset);\n        $endOffset = $offset;\n        return $data;\n    }\n\n    // ---------------------\n    // protected\n    // ---------------------\n\n    /**\n     * @param ByteBuffer $buf\n     * @param int $offset\n     * @return mixed\n     */\n    protected static function _parseItem(ByteBuffer $buf, &$offset) {\n        $first = $buf->getByteVal($offset++);\n        $type = $first >> 5;\n        $val = $first & 0b11111;\n\n        if ($type === self::CBOR_MAJOR_FLOAT_SIMPLE) {\n            return self::_parseFloatSimple($val, $buf, $offset);\n        }\n\n        $val = self::_parseExtraLength($val, $buf, $offset);\n\n        return self::_parseItemData($type, $val, $buf, $offset);\n    }\n\n    protected static function _parseFloatSimple($val, ByteBuffer $buf, &$offset) {\n        switch ($val) {\n            case 24:\n                $val = $buf->getByteVal($offset);\n                $offset++;\n                return self::_parseSimple($val);\n\n            case 25:\n                $floatValue = $buf->getHalfFloatVal($offset);\n                $offset += 2;\n                return $floatValue;\n\n            case 26:\n                $floatValue = $buf->getFloatVal($offset);\n                $offset += 4;\n                return $floatValue;\n\n            case 27:\n                $floatValue = $buf->getDoubleVal($offset);\n                $offset += 8;\n                return $floatValue;\n\n            case 28:\n            case 29:\n            case 30:\n                throw new WebAuthnException('Reserved value used.', WebAuthnException::CBOR);\n\n            case 31:\n                throw new WebAuthnException('Indefinite length is not supported.', WebAuthnException::CBOR);\n        }\n\n        return self::_parseSimple($val);\n    }\n\n    /**\n     * @param int $val\n     * @return mixed\n     * @throws WebAuthnException\n     */\n    protected static function _parseSimple($val) {\n        if ($val === 20) {\n            return false;\n        }\n        if ($val === 21) {\n            return true;\n        }\n        if ($val === 22) {\n            return null;\n        }\n        throw new WebAuthnException(sprintf('Unsupported simple value %d.', $val), WebAuthnException::CBOR);\n    }\n\n    protected static function _parseExtraLength($val, ByteBuffer $buf, &$offset) {\n        switch ($val) {\n            case 24:\n                $val = $buf->getByteVal($offset);\n                $offset++;\n                break;\n\n            case 25:\n                $val = $buf->getUint16Val($offset);\n                $offset += 2;\n                break;\n\n            case 26:\n                $val = $buf->getUint32Val($offset);\n                $offset += 4;\n                break;\n\n            case 27:\n                $val = $buf->getUint64Val($offset);\n                $offset += 8;\n                break;\n\n            case 28:\n            case 29:\n            case 30:\n                throw new WebAuthnException('Reserved value used.', WebAuthnException::CBOR);\n\n            case 31:\n                throw new WebAuthnException('Indefinite length is not supported.', WebAuthnException::CBOR);\n        }\n\n        return $val;\n    }\n\n    protected static function _parseItemData($type, $val, ByteBuffer $buf, &$offset) {\n        switch ($type) {\n            case self::CBOR_MAJOR_UNSIGNED_INT: // uint\n                return $val;\n\n            case self::CBOR_MAJOR_NEGATIVE_INT:\n                return -1 - $val;\n\n            case self::CBOR_MAJOR_BYTE_STRING:\n                $data = $buf->getBytes($offset, $val);\n                $offset += $val;\n                return new ByteBuffer($data); // bytes\n\n            case self::CBOR_MAJOR_TEXT_STRING:\n                $data = $buf->getBytes($offset, $val);\n                $offset += $val;\n                return $data; // UTF-8\n\n            case self::CBOR_MAJOR_ARRAY:\n                return self::_parseArray($buf, $offset, $val);\n\n            case self::CBOR_MAJOR_MAP:\n                return self::_parseMap($buf, $offset, $val);\n\n            case self::CBOR_MAJOR_TAG:\n                return self::_parseItem($buf, $offset); // 1 embedded data item\n        }\n\n        // This should never be reached\n        throw new WebAuthnException(sprintf('Unknown major type %d.', $type), WebAuthnException::CBOR);\n    }\n\n    protected static function _parseMap(ByteBuffer $buf, &$offset, $count) {\n        $map = array();\n\n        for ($i = 0; $i < $count; $i++) {\n            $mapKey = self::_parseItem($buf, $offset);\n            $mapVal = self::_parseItem($buf, $offset);\n\n            if (!\\is_int($mapKey) && !\\is_string($mapKey)) {\n                throw new WebAuthnException('Can only use strings or integers as map keys', WebAuthnException::CBOR);\n            }\n\n            $map[$mapKey] = $mapVal; // todo dup\n        }\n        return $map;\n    }\n\n    protected static function _parseArray(ByteBuffer $buf, &$offset, $count) {\n        $arr = array();\n        for ($i = 0; $i < $count; $i++) {\n            $arr[] = self::_parseItem($buf, $offset);\n        }\n\n        return $arr;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/WebAuthn.php",
    "content": "<?php\n\nnamespace lbuchs\\WebAuthn;\nuse lbuchs\\WebAuthn\\Binary\\ByteBuffer;\nrequire_once 'WebAuthnException.php';\nrequire_once 'Binary/ByteBuffer.php';\nrequire_once 'Attestation/AttestationObject.php';\nrequire_once 'Attestation/AuthenticatorData.php';\nrequire_once 'Attestation/Format/FormatBase.php';\nrequire_once 'Attestation/Format/None.php';\nrequire_once 'Attestation/Format/AndroidKey.php';\nrequire_once 'Attestation/Format/AndroidSafetyNet.php';\nrequire_once 'Attestation/Format/Apple.php';\nrequire_once 'Attestation/Format/Packed.php';\nrequire_once 'Attestation/Format/Tpm.php';\nrequire_once 'Attestation/Format/U2f.php';\nrequire_once 'CBOR/CborDecoder.php';\n\n/**\n * WebAuthn\n * @author Lukas Buchs\n * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT\n */\nclass WebAuthn {\n    // relying party\n    private $_rpName;\n    private $_rpId;\n    private $_rpIdHash;\n    private $_challenge;\n    private $_signatureCounter;\n    private $_caFiles;\n    private $_formats;\n\n    /**\n     * Initialize a new WebAuthn server\n     * @param string $rpName the relying party name\n     * @param string $rpId the relying party ID = the domain name\n     * @param bool $useBase64UrlEncoding true to use base64 url encoding for binary data in json objects. Default is a RFC 1342-Like serialized string.\n     * @throws WebAuthnException\n     */\n    public function __construct($rpName, $rpId, $allowedFormats=null, $useBase64UrlEncoding=false) {\n        $this->_rpName = $rpName;\n        $this->_rpId = $rpId;\n        $this->_rpIdHash = \\hash('sha256', $rpId, true);\n        ByteBuffer::$useBase64UrlEncoding = !!$useBase64UrlEncoding;\n        $supportedFormats = array('android-key', 'android-safetynet', 'apple', 'fido-u2f', 'none', 'packed', 'tpm');\n\n        if (!\\function_exists('\\openssl_open')) {\n            throw new WebAuthnException('OpenSSL-Module not installed');;\n        }\n\n        if (!\\in_array('SHA256', \\array_map('\\strtoupper', \\openssl_get_md_methods()))) {\n            throw new WebAuthnException('SHA256 not supported by this openssl installation.');\n        }\n\n        // default: all format\n        if (!is_array($allowedFormats)) {\n            $allowedFormats = $supportedFormats;\n        }\n        $this->_formats = $allowedFormats;\n\n        // validate formats\n        $invalidFormats = \\array_diff($this->_formats, $supportedFormats);\n        if (!$this->_formats || $invalidFormats) {\n            throw new WebAuthnException('invalid formats on construct: ' . implode(', ', $invalidFormats));\n        }\n    }\n\n    /**\n     * add a root certificate to verify new registrations\n     * @param string $path file path of / directory with root certificates\n     * @param array|null $certFileExtensions if adding a direction, all files with provided extension are added. default: pem, crt, cer, der\n     */\n    public function addRootCertificates($path, $certFileExtensions=null) {\n        if (!\\is_array($this->_caFiles)) {\n            $this->_caFiles = array();\n        }\n        if ($certFileExtensions === null) {\n            $certFileExtensions = array('pem', 'crt', 'cer', 'der');\n        }\n        $path = \\rtrim(\\trim($path), '\\\\/');\n        if (\\is_dir($path)) {\n            foreach (\\scandir($path) as $ca) {\n                if (\\is_file($path . DIRECTORY_SEPARATOR . $ca) && \\in_array(\\strtolower(\\pathinfo($ca, PATHINFO_EXTENSION)), $certFileExtensions)) {\n                    $this->addRootCertificates($path . DIRECTORY_SEPARATOR . $ca);\n                }\n            }\n        } else if (\\is_file($path) && !\\in_array(\\realpath($path), $this->_caFiles)) {\n            $this->_caFiles[] = \\realpath($path);\n        }\n    }\n\n    /**\n     * Returns the generated challenge to save for later validation\n     * @return ByteBuffer\n     */\n    public function getChallenge() {\n        return $this->_challenge;\n    }\n\n    /**\n     * generates the object for a key registration\n     * provide this data to navigator.credentials.create\n     * @param string $userId\n     * @param string $userName\n     * @param string $userDisplayName\n     * @param int $timeout timeout in seconds\n     * @param bool $requireResidentKey true, if the key should be stored by the authentication device\n     * @param bool|string $requireUserVerification indicates that you require user verification and will fail the operation\n     *                                             if the response does not have the UV flag set.\n     *                                             Valid values:\n     *                                             true = required\n     *                                             false = preferred\n     *                                             string 'required' 'preferred' 'discouraged'\n     * @param bool|null $crossPlatformAttachment   true for cross-platform devices (eg. fido usb),\n     *                                             false for platform devices (eg. windows hello, android safetynet),\n     *                                             null for both\n     * @param array $excludeCredentialIds a array of ids, which are already registered, to prevent re-registration\n     * @return \\stdClass\n     */\n    public function getCreateArgs($userId, $userName, $userDisplayName, $timeout=20, $requireResidentKey=false, $requireUserVerification=false, $crossPlatformAttachment=null, $excludeCredentialIds=array()) {\n\n        // validate User Verification Requirement\n        if (\\is_bool($requireUserVerification)) {\n            $requireUserVerification = $requireUserVerification ? 'required' : 'preferred';\n        } else if (\\is_string($requireUserVerification) && \\in_array(\\strtolower($requireUserVerification), ['required', 'preferred', 'discouraged'])) {\n            $requireUserVerification = \\strtolower($requireUserVerification);\n        } else {\n            $requireUserVerification = 'preferred';\n        }\n\n        $args = new \\stdClass();\n        $args->publicKey = new \\stdClass();\n\n        // relying party\n        $args->publicKey->rp = new \\stdClass();\n        $args->publicKey->rp->name = $this->_rpName;\n        $args->publicKey->rp->id = $this->_rpId;\n\n        $args->publicKey->authenticatorSelection = new \\stdClass();\n        $args->publicKey->authenticatorSelection->userVerification = $requireUserVerification;\n        if ($requireResidentKey) {\n            $args->publicKey->authenticatorSelection->requireResidentKey = true;\n        }\n        if (is_bool($crossPlatformAttachment)) {\n            $args->publicKey->authenticatorSelection->authenticatorAttachment = $crossPlatformAttachment ? 'cross-platform' : 'platform';\n        }\n\n        // user\n        $args->publicKey->user = new \\stdClass();\n        $args->publicKey->user->id = new ByteBuffer($userId); // binary\n        $args->publicKey->user->name = $userName;\n        $args->publicKey->user->displayName = $userDisplayName;\n\n        $args->publicKey->pubKeyCredParams = array();\n        $tmp = new \\stdClass();\n        $tmp->type = 'public-key';\n        $tmp->alg = -7; // ES256\n        $args->publicKey->pubKeyCredParams[] = $tmp;\n        unset ($tmp);\n\n        $tmp = new \\stdClass();\n        $tmp->type = 'public-key';\n        $tmp->alg = -257; // RS256\n        $args->publicKey->pubKeyCredParams[] = $tmp;\n        unset ($tmp);\n\n        // if there are root certificates added, we need direct attestation to validate\n        // against the root certificate. If there are no root-certificates added,\n        // anonymization ca are also accepted, because we can't validate the root anyway.\n        $attestation = 'indirect';\n        if (\\is_array($this->_caFiles)) {\n            $attestation = 'direct';\n        }\n\n        $args->publicKey->attestation = \\count($this->_formats) === 1 && \\in_array('none', $this->_formats) ? 'none' : $attestation;\n        $args->publicKey->extensions = new \\stdClass();\n        $args->publicKey->extensions->exts = true;\n        $args->publicKey->timeout = $timeout * 1000; // microseconds\n        $args->publicKey->challenge = $this->_createChallenge(); // binary\n\n        //prevent re-registration by specifying existing credentials\n        $args->publicKey->excludeCredentials = array();\n\n        if (is_array($excludeCredentialIds)) {\n            foreach ($excludeCredentialIds as $id) {\n                $tmp = new \\stdClass();\n                $tmp->id = $id instanceof ByteBuffer ? $id : new ByteBuffer($id);  // binary\n                $tmp->type = 'public-key';\n                $tmp->transports = array('usb', 'ble', 'nfc', 'internal');\n                $args->publicKey->excludeCredentials[] = $tmp;\n                unset ($tmp);\n            }\n        }\n\n        return $args;\n    }\n\n    /**\n     * generates the object for key validation\n     * Provide this data to navigator.credentials.get\n     * @param array $credentialIds binary\n     * @param int $timeout timeout in seconds\n     * @param bool $allowUsb allow removable USB\n     * @param bool $allowNfc allow Near Field Communication (NFC)\n     * @param bool $allowBle allow Bluetooth\n     * @param bool $allowInternal allow client device-specific transport. These authenticators are not removable from the client device.\n     * @param bool|string $requireUserVerification indicates that you require user verification and will fail the operation\n     *                                             if the response does not have the UV flag set.\n     *                                             Valid values:\n     *                                             true = required\n     *                                             false = preferred\n     *                                             string 'required' 'preferred' 'discouraged'\n     * @return \\stdClass\n     */\n    public function getGetArgs($credentialIds=array(), $timeout=20, $allowUsb=true, $allowNfc=true, $allowBle=true, $allowInternal=true, $requireUserVerification=false) {\n\n        // validate User Verification Requirement\n        if (\\is_bool($requireUserVerification)) {\n            $requireUserVerification = $requireUserVerification ? 'required' : 'preferred';\n        } else if (\\is_string($requireUserVerification) && \\in_array(\\strtolower($requireUserVerification), ['required', 'preferred', 'discouraged'])) {\n            $requireUserVerification = \\strtolower($requireUserVerification);\n        } else {\n            $requireUserVerification = 'preferred';\n        }\n\n        $args = new \\stdClass();\n        $args->publicKey = new \\stdClass();\n        $args->publicKey->timeout = $timeout * 1000; // microseconds\n        $args->publicKey->challenge = $this->_createChallenge();  // binary\n        $args->publicKey->userVerification = $requireUserVerification;\n        $args->publicKey->rpId = $this->_rpId;\n\n        if (\\is_array($credentialIds) && \\count($credentialIds) > 0) {\n            $args->publicKey->allowCredentials = array();\n\n            foreach ($credentialIds as $id) {\n                $tmp = new \\stdClass();\n                $tmp->id = $id instanceof ByteBuffer ? $id : new ByteBuffer($id);  // binary\n                $tmp->transports = array();\n\n                if ($allowUsb) {\n                    $tmp->transports[] = 'usb';\n                }\n                if ($allowNfc) {\n                    $tmp->transports[] = 'nfc';\n                }\n                if ($allowBle) {\n                    $tmp->transports[] = 'ble';\n                }\n                if ($allowInternal) {\n                    $tmp->transports[] = 'internal';\n                }\n\n                $tmp->type = 'public-key';\n                $args->publicKey->allowCredentials[] = $tmp;\n                unset ($tmp);\n            }\n        }\n\n        return $args;\n    }\n\n    /**\n     * returns the new signature counter value.\n     * returns null if there is no counter\n     * @return ?int\n     */\n    public function getSignatureCounter() {\n        return \\is_int($this->_signatureCounter) ? $this->_signatureCounter : null;\n    }\n\n    /**\n     * process a create request and returns data to save for future logins\n     * @param string $clientDataJSON binary from browser\n     * @param string $attestationObject binary from browser\n     * @param string|ByteBuffer $challenge binary used challange\n     * @param bool $requireUserVerification true, if the device must verify user (e.g. by biometric data or pin)\n     * @param bool $requireUserPresent false, if the device must NOT check user presence (e.g. by pressing a button)\n     * @param bool $failIfRootMismatch false, if there should be no error thrown if root certificate doesn't match\n     * @return \\stdClass\n     * @throws WebAuthnException\n     */\n    public function processCreate($clientDataJSON, $attestationObject, $challenge, $requireUserVerification=false, $requireUserPresent=true, $failIfRootMismatch=true) {\n        $clientDataHash = \\hash('sha256', $clientDataJSON, true);\n        $clientData = \\json_decode($clientDataJSON);\n        $challenge = $challenge instanceof ByteBuffer ? $challenge : new ByteBuffer($challenge);\n\n        // security: https://www.w3.org/TR/webauthn/#registering-a-new-credential\n\n        // 2. Let C, the client data claimed as collected during the credential creation,\n        //    be the result of running an implementation-specific JSON parser on JSONtext.\n        if (!\\is_object($clientData)) {\n            throw new WebAuthnException('invalid client data', WebAuthnException::INVALID_DATA);\n        }\n\n        // 3. Verify that the value of C.type is webauthn.create.\n        if (!\\property_exists($clientData, 'type') || $clientData->type !== 'webauthn.create') {\n            throw new WebAuthnException('invalid type', WebAuthnException::INVALID_TYPE);\n        }\n\n        // 4. Verify that the value of C.challenge matches the challenge that was sent to the authenticator in the create() call.\n        if (!\\property_exists($clientData, 'challenge') || ByteBuffer::fromBase64Url($clientData->challenge)->getBinaryString() !== $challenge->getBinaryString()) {\n            throw new WebAuthnException('invalid challenge', WebAuthnException::INVALID_CHALLENGE);\n        }\n\n        // 5. Verify that the value of C.origin matches the Relying Party's origin.\n        if (!\\property_exists($clientData, 'origin') || !$this->_checkOrigin($clientData->origin)) {\n            throw new WebAuthnException('invalid origin', WebAuthnException::INVALID_ORIGIN);\n        }\n\n        // Attestation\n        $attestationObject = new Attestation\\AttestationObject($attestationObject, $this->_formats);\n\n        // 9. Verify that the RP ID hash in authData is indeed the SHA-256 hash of the RP ID expected by the RP.\n        if (!$attestationObject->validateRpIdHash($this->_rpIdHash)) {\n            throw new WebAuthnException('invalid rpId hash', WebAuthnException::INVALID_RELYING_PARTY);\n        }\n\n        // 14. Verify that attStmt is a correct attestation statement, conveying a valid attestation signature\n        if (!$attestationObject->validateAttestation($clientDataHash)) {\n            throw new WebAuthnException('invalid certificate signature', WebAuthnException::INVALID_SIGNATURE);\n        }\n\n        // 15. If validation is successful, obtain a list of acceptable trust anchors\n        $rootValid = is_array($this->_caFiles) ? $attestationObject->validateRootCertificate($this->_caFiles) : null;\n        if ($failIfRootMismatch && is_array($this->_caFiles) && !$rootValid) {\n            throw new WebAuthnException('invalid root certificate', WebAuthnException::CERTIFICATE_NOT_TRUSTED);\n        }\n\n        // 10. Verify that the User Present bit of the flags in authData is set.\n        $userPresent = $attestationObject->getAuthenticatorData()->getUserPresent();\n        if ($requireUserPresent && !$userPresent) {\n            throw new WebAuthnException('user not present during authentication', WebAuthnException::USER_PRESENT);\n        }\n\n        // 11. If user verification is required for this registration, verify that the User Verified bit of the flags in authData is set.\n        $userVerified = $attestationObject->getAuthenticatorData()->getUserVerified();\n        if ($requireUserVerification && !$userVerified) {\n            throw new WebAuthnException('user not verified during authentication', WebAuthnException::USER_VERIFICATED);\n        }\n\n        $signCount = $attestationObject->getAuthenticatorData()->getSignCount();\n        if ($signCount > 0) {\n            $this->_signatureCounter = $signCount;\n        }\n\n        // prepare data to store for future logins\n        $data = new \\stdClass();\n        $data->rpId = $this->_rpId;\n        $data->attestationFormat = $attestationObject->getAttestationFormatName();\n        $data->credentialId = $attestationObject->getAuthenticatorData()->getCredentialId();\n        $data->credentialPublicKey = $attestationObject->getAuthenticatorData()->getPublicKeyPem();\n        $data->certificateChain = $attestationObject->getCertificateChain();\n        $data->certificate = $attestationObject->getCertificatePem();\n        $data->certificateIssuer = $attestationObject->getCertificateIssuer();\n        $data->certificateSubject = $attestationObject->getCertificateSubject();\n        $data->signatureCounter = $this->_signatureCounter;\n        $data->AAGUID = $attestationObject->getAuthenticatorData()->getAAGUID();\n        $data->rootValid = $rootValid;\n        $data->userPresent = $userPresent;\n        $data->userVerified = $userVerified;\n        return $data;\n    }\n\n\n    /**\n     * process a get request\n     * @param string $clientDataJSON binary from browser\n     * @param string $authenticatorData binary from browser\n     * @param string $signature binary from browser\n     * @param string $credentialPublicKey string PEM-formated public key from used credentialId\n     * @param string|ByteBuffer $challenge  binary from used challange\n     * @param int $prevSignatureCnt signature count value of the last login\n     * @param bool $requireUserVerification true, if the device must verify user (e.g. by biometric data or pin)\n     * @param bool $requireUserPresent true, if the device must check user presence (e.g. by pressing a button)\n     * @return boolean true if get is successful\n     * @throws WebAuthnException\n     */\n    public function processGet($clientDataJSON, $authenticatorData, $signature, $credentialPublicKey, $challenge, $prevSignatureCnt=null, $requireUserVerification=false, $requireUserPresent=true) {\n        $authenticatorObj = new Attestation\\AuthenticatorData($authenticatorData);\n        $clientDataHash = \\hash('sha256', $clientDataJSON, true);\n        $clientData = \\json_decode($clientDataJSON);\n        $challenge = $challenge instanceof ByteBuffer ? $challenge : new ByteBuffer($challenge);\n\n        // https://www.w3.org/TR/webauthn/#verifying-assertion\n\n        // 1. If the allowCredentials option was given when this authentication ceremony was initiated,\n        //    verify that credential.id identifies one of the public key credentials that were listed in allowCredentials.\n        //    -> TO BE VERIFIED BY IMPLEMENTATION\n\n        // 2. If credential.response.userHandle is present, verify that the user identified\n        //    by this value is the owner of the public key credential identified by credential.id.\n        //    -> TO BE VERIFIED BY IMPLEMENTATION\n\n        // 3. Using credential’s id attribute (or the corresponding rawId, if base64url encoding is\n        //    inappropriate for your use case), look up the corresponding credential public key.\n        //    -> TO BE LOOKED UP BY IMPLEMENTATION\n\n        // 5. Let JSONtext be the result of running UTF-8 decode on the value of cData.\n        if (!\\is_object($clientData)) {\n            throw new WebAuthnException('invalid client data', WebAuthnException::INVALID_DATA);\n        }\n\n        // 7. Verify that the value of C.type is the string webauthn.get.\n        if (!\\property_exists($clientData, 'type') || $clientData->type !== 'webauthn.get') {\n            throw new WebAuthnException('invalid type', WebAuthnException::INVALID_TYPE);\n        }\n\n        // 8. Verify that the value of C.challenge matches the challenge that was sent to the\n        //    authenticator in the PublicKeyCredentialRequestOptions passed to the get() call.\n        if (!\\property_exists($clientData, 'challenge') || ByteBuffer::fromBase64Url($clientData->challenge)->getBinaryString() !== $challenge->getBinaryString()) {\n            throw new WebAuthnException('invalid challenge', WebAuthnException::INVALID_CHALLENGE);\n        }\n\n        // 9. Verify that the value of C.origin matches the Relying Party's origin.\n        if (!\\property_exists($clientData, 'origin') || !$this->_checkOrigin($clientData->origin)) {\n            throw new WebAuthnException('invalid origin', WebAuthnException::INVALID_ORIGIN);\n        }\n\n        // 11. Verify that the rpIdHash in authData is the SHA-256 hash of the RP ID expected by the Relying Party.\n        if ($authenticatorObj->getRpIdHash() !== $this->_rpIdHash) {\n            throw new WebAuthnException('invalid rpId hash', WebAuthnException::INVALID_RELYING_PARTY);\n        }\n\n        // 12. Verify that the User Present bit of the flags in authData is set\n        if ($requireUserPresent && !$authenticatorObj->getUserPresent()) {\n            throw new WebAuthnException('user not present during authentication', WebAuthnException::USER_PRESENT);\n        }\n\n        // 13. If user verification is required for this assertion, verify that the User Verified bit of the flags in authData is set.\n        if ($requireUserVerification && !$authenticatorObj->getUserVerified()) {\n            throw new WebAuthnException('user not verificated during authentication', WebAuthnException::USER_VERIFICATED);\n        }\n\n        // 14. Verify the values of the client extension outputs\n        //     (extensions not implemented)\n\n        // 16. Using the credential public key looked up in step 3, verify that sig is a valid signature\n        //     over the binary concatenation of authData and hash.\n        $dataToVerify = '';\n        $dataToVerify .= $authenticatorData;\n        $dataToVerify .= $clientDataHash;\n\n        $publicKey = \\openssl_pkey_get_public($credentialPublicKey);\n        if ($publicKey === false) {\n            throw new WebAuthnException('public key invalid', WebAuthnException::INVALID_PUBLIC_KEY);\n        }\n\n        if (\\openssl_verify($dataToVerify, $signature, $publicKey, OPENSSL_ALGO_SHA256) !== 1) {\n            throw new WebAuthnException('invalid signature', WebAuthnException::INVALID_SIGNATURE);\n        }\n\n        // 17. If the signature counter value authData.signCount is nonzero,\n        //     if less than or equal to the signature counter value stored,\n        //     is a signal that the authenticator may be cloned\n        $signatureCounter = $authenticatorObj->getSignCount();\n        if ($signatureCounter > 0) {\n            $this->_signatureCounter = $signatureCounter;\n            if ($prevSignatureCnt !== null && $prevSignatureCnt >= $signatureCounter) {\n                throw new WebAuthnException('signature counter not valid', WebAuthnException::SIGNATURE_COUNTER);\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Downloads root certificates from FIDO Alliance Metadata Service (MDS) to a specific folder\n     * https://fidoalliance.org/metadata/\n     * @param string $certFolder Folder path to save the certificates in PEM format.\n     * @param bool $deleteCerts=true\n     * @return int number of cetificates\n     * @throws WebAuthnException\n     */\n    public function queryFidoMetaDataService($certFolder, $deleteCerts=true) {\n        $url = 'https://mds.fidoalliance.org/';\n        $raw = null;\n        if (\\function_exists('curl_init')) {\n            $ch = \\curl_init($url);\n            \\curl_setopt($ch, CURLOPT_HEADER, false);\n            \\curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\n            \\curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\n            \\curl_setopt($ch, CURLOPT_USERAGENT, 'github.com/lbuchs/WebAuthn - A simple PHP WebAuthn server library');\n            $raw = \\curl_exec($ch);\n            \\curl_close($ch);\n        } else {\n            $raw = \\file_get_contents($url);\n        }\n\n        $certFolder = \\rtrim(\\realpath($certFolder), '\\\\/');\n        if (!is_dir($certFolder)) {\n            throw new WebAuthnException('Invalid folder path for query FIDO Alliance Metadata Service');\n        }\n\n        if (!\\is_string($raw)) {\n            throw new WebAuthnException('Unable to query FIDO Alliance Metadata Service');\n        }\n\n        $jwt = \\explode('.', $raw);\n        if (\\count($jwt) !== 3) {\n            throw new WebAuthnException('Invalid JWT from FIDO Alliance Metadata Service');\n        }\n\n        if ($deleteCerts) {\n            foreach (\\scandir($certFolder) as $ca) {\n                if (\\substr($ca, -4) === '.pem') {\n                    if (\\unlink($certFolder . DIRECTORY_SEPARATOR . $ca) === false) {\n                        throw new WebAuthnException('Cannot delete certs in folder for FIDO Alliance Metadata Service');\n                    }\n                }\n            }\n        }\n\n        list($header, $payload, $hash) = $jwt;\n        $payload = Binary\\ByteBuffer::fromBase64Url($payload)->getJson();\n\n        $count = 0;\n        if (\\is_object($payload) && \\property_exists($payload, 'entries') && \\is_array($payload->entries)) {\n            foreach ($payload->entries as $entry) {\n                if (\\is_object($entry) && \\property_exists($entry, 'metadataStatement') && \\is_object($entry->metadataStatement)) {\n                    $description = $entry->metadataStatement->description ?? null;\n                    $attestationRootCertificates = $entry->metadataStatement->attestationRootCertificates ?? null;\n\n                    if ($description && $attestationRootCertificates) {\n\n                        // create filename\n                        $certFilename = \\preg_replace('/[^a-z0-9]/i', '_', $description);\n                        $certFilename = \\trim(\\preg_replace('/\\_{2,}/i', '_', $certFilename),'_') . '.pem';\n                        $certFilename = \\strtolower($certFilename);\n\n                        // add certificate\n                        $certContent = $description . \"\\n\";\n                        $certContent .= \\str_repeat('-', \\mb_strlen($description)) . \"\\n\";\n\n                        foreach ($attestationRootCertificates as $attestationRootCertificate) {\n                            $count++;\n                            $certContent .= \"\\n-----BEGIN CERTIFICATE-----\\n\";\n                            $certContent .= \\chunk_split(\\trim($attestationRootCertificate), 64, \"\\n\");\n                            $certContent .= \"-----END CERTIFICATE-----\\n\";\n                        }\n\n                        if (\\file_put_contents($certFolder . DIRECTORY_SEPARATOR . $certFilename, $certContent) === false) {\n                            throw new WebAuthnException('unable to save certificate from FIDO Alliance Metadata Service');\n                        }\n                    }\n                }\n            }\n        }\n\n        return $count;\n    }\n\n    // -----------------------------------------------\n    // PRIVATE\n    // -----------------------------------------------\n\n    /**\n     * checks if the origin matchs the RP ID\n     * @param string $origin\n     * @return boolean\n     * @throws WebAuthnException\n     */\n    private function _checkOrigin($origin) {\n        // https://www.w3.org/TR/webauthn/#rp-id\n\n        // The origin's scheme must be https\n        if ($this->_rpId !== 'localhost' && \\parse_url($origin, PHP_URL_SCHEME) !== 'https') {\n            return false;\n        }\n\n        // extract host from origin\n        $host = \\parse_url($origin, PHP_URL_HOST);\n        $host = \\trim($host, '.');\n\n        // The RP ID must be equal to the origin's effective domain, or a registrable\n        // domain suffix of the origin's effective domain.\n        return \\preg_match('/' . \\preg_quote($this->_rpId) . '$/i', $host) === 1;\n    }\n\n    /**\n     * generates a new challange\n     * @param int $length\n     * @return string\n     * @throws WebAuthnException\n     */\n    private function _createChallenge($length = 32) {\n        if (!$this->_challenge) {\n            $this->_challenge = ByteBuffer::randomBuffer($length);\n        }\n        return $this->_challenge;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/WebAuthnException.php",
    "content": "<?php\nnamespace lbuchs\\WebAuthn;\n\n/**\n * @author Lukas Buchs\n * @license https://github.com/lbuchs/WebAuthn/blob/master/LICENSE MIT\n */\nclass WebAuthnException extends \\Exception {\n    const INVALID_DATA = 1;\n    const INVALID_TYPE = 2;\n    const INVALID_CHALLENGE = 3;\n    const INVALID_ORIGIN = 4;\n    const INVALID_RELYING_PARTY = 5;\n    const INVALID_SIGNATURE = 6;\n    const INVALID_PUBLIC_KEY = 7;\n    const CERTIFICATE_NOT_TRUSTED = 8;\n    const USER_PRESENT = 9;\n    const USER_VERIFICATED = 10;\n    const SIGNATURE_COUNTER = 11;\n    const CRYPTO_STRONG = 13;\n    const BYTEBUFFER = 14;\n    const CBOR = 15;\n\n    public function __construct($message = \"\", $code = 0, $previous = null) {\n        parent::__construct($message, $code, $previous);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/apple.pem",
    "content": "    Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number:\n            68:1d:01:6c:7a:3c:e3:02:25:a5:01:94:28:47:57:71\n\n    Signature Algorithm: ecdsa-with-SHA384\n\n        Issuer:\n            stateOrProvinceName       = California\n            organizationName          = Apple Inc.\n            commonName                = Apple WebAuthn Root CA\n\n        Validity\n            Not Before: Mar 18 18:21:32 2020 GMT\n            Not After : Mar 15 00:00:00 2045 GMT\n\n        Subject:\n            stateOrProvinceName       = California\n            organizationName          = Apple Inc.\n            commonName                = Apple WebAuthn Root CA\n\n        Subject Public Key Info:\n            Public Key Algorithm: id-ecPublicKey\n                ASN1 OID: secp384r1\n\n        X509v3 extensions:\n            X509v3 Basic Constraints: critical\n                CA:TRUE\n            X509v3 Subject Key Identifier:\n                26:D7:64:D9:C5:78:C2:5A:67:D1:A7:DE:6B:12:D0:1B:63:F1:C6:D7\n            X509v3 Key Usage: critical\n                Certificate Sign, CRL Sign\n\n-----BEGIN CERTIFICATE-----\nMIICEjCCAZmgAwIBAgIQaB0BbHo84wIlpQGUKEdXcTAKBggqhkjOPQQDAzBLMR8w\nHQYDVQQDDBZBcHBsZSBXZWJBdXRobiBSb290IENBMRMwEQYDVQQKDApBcHBsZSBJ\nbmMuMRMwEQYDVQQIDApDYWxpZm9ybmlhMB4XDTIwMDMxODE4MjEzMloXDTQ1MDMx\nNTAwMDAwMFowSzEfMB0GA1UEAwwWQXBwbGUgV2ViQXV0aG4gUm9vdCBDQTETMBEG\nA1UECgwKQXBwbGUgSW5jLjETMBEGA1UECAwKQ2FsaWZvcm5pYTB2MBAGByqGSM49\nAgEGBSuBBAAiA2IABCJCQ2pTVhzjl4Wo6IhHtMSAzO2cv+H9DQKev3//fG59G11k\nxu9eI0/7o6V5uShBpe1u6l6mS19S1FEh6yGljnZAJ+2GNP1mi/YK2kSXIuTHjxA/\npcoRf7XkOtO4o1qlcaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJtdk\n2cV4wlpn0afeaxLQG2PxxtcwDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA\nMGQCMFrZ+9DsJ1PW9hfNdBywZDsWDbWFp28it1d/5w2RPkRX3Bbn/UbDTNLx7Jr3\njAGGiQIwHFj+dJZYUJR786osByBelJYsVZd2GbHQu209b5RCmGQ21gpSAk9QZW4B\n1bWeT0vT\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/globalSign.pem",
    "content": "Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number:\n            04:00:00:00:00:01:0f:86:26:e6:0d\n    Signature Algorithm: sha1WithRSAEncryption\n        Issuer: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign\n        Validity\n            Not Before: Dec 15 08:00:00 2006 GMT\n            Not After : Dec 15 08:00:00 2021 GMT\n        Subject: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign\n        Subject Public Key Info:\n            Public Key Algorithm: rsaEncryption\n                Public-Key: (2048 bit)\n\n-----BEGIN CERTIFICATE-----\nMIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G\nA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp\nZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1\nMDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG\nA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL\nv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8\neoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq\ntTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd\nC9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa\nzq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB\nmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH\nV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n\nbG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG\n3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs\nJ0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO\n291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS\not+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd\nAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7\nTBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==\n-----END CERTIFICATE-----"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/googleHardware.pem",
    "content": "Google Hardware Attestation Root certificate\n----------------------------------------------\n\nhttps://developer.android.com/training/articles/security-key-attestation.html\n\nCertificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number:\n            e8:fa:19:63:14:d2:fa:18\n    Signature Algorithm: sha256WithRSAEncryption\n        Issuer: serialNumber = f92009e853b6b045\n        Validity\n            Not Before: May 26 16:28:52 2016 GMT\n            Not After : May 24 16:28:52 2026 GMT\n        Subject: serialNumber = f92009e853b6b045\n        Subject Public Key Info:\n            Public Key Algorithm: rsaEncryption\n                Public-Key: (4096 bit)\n                Exponent: 65537 (0x10001)\n        X509v3 extensions:\n            X509v3 Subject Key Identifier:\n                36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12\n            X509v3 Authority Key Identifier:\n                keyid:36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12\n\n            X509v3 Basic Constraints: critical\n                CA:TRUE\n            X509v3 Key Usage: critical\n                Digital Signature, Certificate Sign, CRL Sign\n            X509v3 CRL Distribution Points:\n\n                Full Name:\n                  URI:https://android.googleapis.com/attestation/crl/\n\n    Signature Algorithm: sha256WithRSAEncryption\n\n\n-----BEGIN CERTIFICATE-----\nMIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV\nBAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy\nODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B\nAQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS\nSxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7\ntv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj\nnar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq\nC4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ\noVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O\nJtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg\nsTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi\nigHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M\nRPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E\naDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um\nAGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD\nVR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO\nBgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk\nLmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD\nggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB\nPb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m\nqC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY\nDBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm\nQUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u\nJU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD\nCdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy\nZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD\nqwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic\nMDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1\nwDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk\n-----END CERTIFICATE-----\n\n\n    Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number: 15352756130135856819 (0xd50ff25ba3f2d6b3)\n    Signature Algorithm: sha256WithRSAEncryption\n        Issuer:\n            serialNumber              = f92009e853b6b045\n        Validity\n            Not Before: Nov 22 20:37:58 2019 GMT\n            Not After : Nov 18 20:37:58 2034 GMT\n        Subject:\n            serialNumber              = f92009e853b6b045\n        Subject Public Key Info:\n            Public Key Algorithm: rsaEncryption\n                Public-Key: (4096 bit)\n                Exponent: 65537 (0x10001)\n        X509v3 extensions:\n            X509v3 Subject Key Identifier:\n                36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12\n            X509v3 Authority Key Identifier:\n                keyid:36:61:E1:00:7C:88:05:09:51:8B:44:6C:47:FF:1A:4C:C9:EA:4F:12\n\n            X509v3 Basic Constraints: critical\n                CA:TRUE\n            X509v3 Key Usage: critical\n                Certificate Sign\n    Signature Algorithm: sha256WithRSAEncryption\n\n\n-----BEGIN CERTIFICATE-----\nMIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV\nBAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAz\nNzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B\nAQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS\nSxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7\ntv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj\nnar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq\nC4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ\noVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O\nJtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg\nsTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi\nigHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M\nRPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E\naDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um\nAGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud\nIwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnu\nXKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83U\nh6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cno\nL/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2ok\nQBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vA\nD32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAI\nmMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoW\nFua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91\noeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09o\njm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUB\nZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCH\nex0SdDrx+tWUDqG8At2JHA==\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/huawei.pem",
    "content": "-----BEGIN CERTIFICATE-----\r\nMIIFZDCCA0ygAwIBAgIIYsLLTehAXpYwDQYJKoZIhvcNAQELBQAwUDELMAkGA1UE\r\nBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UECwwKSHVhd2VpIENCRzEbMBkG\r\nA1UEAwwSSHVhd2VpIENCRyBSb290IENBMB4XDTE3MDgyMTEwNTYyN1oXDTQyMDgx\r\nNTEwNTYyN1owUDELMAkGA1UEBhMCQ04xDzANBgNVBAoMBkh1YXdlaTETMBEGA1UE\r\nCwwKSHVhd2VpIENCRzEbMBkGA1UEAwwSSHVhd2VpIENCRyBSb290IENBMIICIjAN\r\nBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1OyKm3Ig/6eibB7Uz2o93UqGk2M7\r\n84WdfF8mvffvu218d61G5M3Px54E3kefUTk5Ky1ywHvw7Rp9KDuYv7ktaHkk+yr5\r\n9Ihseu3a7iM/C6SnMSGt+LfB/Bcob9Abw95EigXQ4yQddX9hbNrin3AwZw8wMjEI\r\nSYYDo5GuYDL0NbAiYg2Y5GpfYIqRzoi6GqDz+evLrsl20kJeCEPgJZN4Jg00Iq9k\r\n++EKOZ5Jc/Zx22ZUgKpdwKABkvzshEgG6WWUPB+gosOiLv++inu/9blDpEzQZhjZ\r\n9WVHpURHDK1YlCvubVAMhDpnbqNHZ0AxlPletdoyugrH/OLKl5inhMXNj3Re7Hl8\r\nWsBWLUKp6sXFf0dvSFzqnr2jkhicS+K2IYZnjghC9cOBRO8fnkonh0EBt0evjUIK\r\nr5ClbCKioBX8JU+d4ldtWOpp2FlxeFTLreDJ5ZBU4//bQpTwYMt7gwMK+MO5Wtok\r\nUx3UF98Z6GdUgbl6nBjBe82c7oIQXhHGHPnURQO7DDPgyVnNOnTPIkmiHJh/e3vk\r\nVhiZNHFCCLTip6GoJVrLxwb9i4q+d0thw4doxVJ5NB9OfDMV64/ybJgpf7m3Ld2y\r\nE0gsf1prrRlDFDXjlYyqqpf1l9Y0u3ctXo7UpXMgbyDEpUQhq3a7txZQO/17luTD\r\noA6Tz1ADavvBwHkCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF\r\nMAMBAf8wHQYDVR0OBBYEFKrE03lH6G4ja+/wqWwicz16GWmhMA0GCSqGSIb3DQEB\r\nCwUAA4ICAQC1d3TMB+VHZdGrWJbfaBShFNiCTN/MceSHOpzBn6JumQP4N7mxCOwd\r\nRSsGKQxV2NPH7LTXWNhUvUw5Sek96FWx/+Oa7jsj3WNAVtmS3zKpCQ5iGb08WIRO\r\ncFnx3oUQ5rcO8r/lUk7Q2cN0E+rF4xsdQrH9k2cd3kAXZXBjfxfKPJTdPy1XnZR/\r\nh8H5EwEK5DWjSzK1wKd3G/Fxdm3E23pcr4FZgdYdOlFSiqW2TJ3Qe6lF4GOKOOyd\r\nWHkpu54ieTsqoYcuMKnKMjT2SLNNgv9Gu5ipaG8Olz6g9C7Htp943lmK/1Vtnhgg\r\npL3rDTsFX/+ehk7OtxuNzRMD9lXUtEfok7f8XB0dcL4ZjnEhDmp5QZqC1kMubHQt\r\nQnTauEiv0YkSGOwJAUZpK1PIff5GgxXYfaHfBC6Op4q02ppl5Q3URl7XIjYLjvs9\r\nt4S9xPe8tb6416V2fe1dZ62vOXMMKHkZjVihh+IceYpJYHuyfKoYJyahLOQXZykG\r\nK5iPAEEtq3HPfMVF43RKHOwfhrAH5KwelUA/0EkcR4Gzth1MKEqojdnYNemkkSy7\r\naNPPT4LEm5R7sV6vG1CjwbgvQrWCgc4nMb8ngdfnVF7Ydqjqi9SAqUzIk4+Uf0ZY\r\n+6RY5IcHdCaiPaWIE1xURQ8B0DRUURsQwXdjZhgLN/DKJpCl5aCCxg==\r\n-----END CERTIFICATE-----\r\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/hypersecu.pem",
    "content": "HyperFIDO U2F Security Key Attestation CA\nhttps://hypersecu.com/support/downloads/attestation\n\nLast Update: 2017-01-01\n\nHyperFIDO U2F Security Key devices which contain attestation certificates signed by a set of CAs.\nThis file contains the CA certificates that Relying Parties (RP) need to configure their software\nwith to be able to verify U2F device certificates.\n\nThe file will be updated as needed when we publish more CA certificates.\n\nIssuer: CN=FT FIDO 0100\n\n-----BEGIN CERTIFICATE-----\nMIIBjTCCATOgAwIBAgIBATAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxGVCBGSURP\nIDAxMDAwHhcNMTQwNzAxMTUzNjI2WhcNNDQwNzAzMTUzNjI2WjAXMRUwEwYDVQQD\nEwxGVCBGSURPIDAxMDAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASxdLxJx8ol\nS3DS5cIHzunPF0gg69d+o8ZVCMJtpRtlfBzGuVL4YhaXk2SC2gptPTgmpZCV2vbN\nfAPi5gOF0vbZo3AwbjAdBgNVHQ4EFgQUXt4jWlYDgwhaPU+EqLmeM9LoPRMwPwYD\nVR0jBDgwNoAUXt4jWlYDgwhaPU+EqLmeM9LoPROhG6QZMBcxFTATBgNVBAMTDEZU\nIEZJRE8gMDEwMIIBATAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0gAMEUCIQC2\nD9o9cconKTo8+4GZPyZBJ3amc8F0/kzyidX9dhrAIAIgM9ocs5BW/JfmshVP9Mb+\nJoa/kgX4dWbZxrk0ioTfJZg=\n-----END CERTIFICATE-----\n\n\n    Certificate:\n    Data:\n        Version: 3 (0x2)\n        Serial Number: 4107 (0x100b)\n    Signature Algorithm: ecdsa-with-SHA256\n        Issuer:\n            commonName                = HYPERFIDO 0200\n            organizationName          = HYPERSECU\n            countryName               = CA\n        Validity\n            Not Before: Jan  1 00:00:00 2018 GMT\n            Not After : Dec 31 23:59:59 2047 GMT\n        Subject:\n            commonName                = HYPERFIDO 0200\n            organizationName          = HYPERSECU\n            countryName               = CA\n\n\n-----BEGIN CERTIFICATE-----\nMIIBxzCCAWygAwIBAgICEAswCgYIKoZIzj0EAwIwOjELMAkGA1UEBhMCQ0ExEjAQ\nBgNVBAoMCUhZUEVSU0VDVTEXMBUGA1UEAwwOSFlQRVJGSURPIDAyMDAwIBcNMTgw\nMTAxMDAwMDAwWhgPMjA0NzEyMzEyMzU5NTlaMDoxCzAJBgNVBAYTAkNBMRIwEAYD\nVQQKDAlIWVBFUlNFQ1UxFzAVBgNVBAMMDkhZUEVSRklETyAwMjAwMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAErKUI1G0S7a6IOLlmHipLlBuxTYjsEESQvzQh3dB7\ndvxxWWm7kWL91rq6S7ayZG0gZPR+zYqdFzwAYDcG4+aX66NgMF4wHQYDVR0OBBYE\nFLZYcfMMwkQAGbt3ryzZFPFypmsIMB8GA1UdIwQYMBaAFLZYcfMMwkQAGbt3ryzZ\nFPFypmsIMAwGA1UdEwQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMC\nA0kAMEYCIQCG2/ppMGt7pkcRie5YIohS3uDPIrmiRcTjqDclKVWg0gIhANcPNDZH\nE2/zZ+uB5ThG9OZus+xSb4knkrbAyXKX2zm/\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/microsoftTpmCollection.pem",
    "content": "A collection of trusted TPM root and intermediate certificates\npublished by Microsoft.\n\nhttps://docs.microsoft.com/en-us/windows-server/security/guarded-fabric-shielded-vm/guarded-fabric-install-trusted-tpm-root-certificates\n\nAMD fTPM ECC ICA CZFamily 35F45AAB781751FE7C24D5EDAABAB507\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIDTDCCAvKgAwIBAgIQNfRaq3gXUf58JNXtqrq1BzAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw\nMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE\nBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj\ncm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLUNaMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEBlpn+AdLBGvcVI3hOEA6W0KVi47yRZJpDGoFzjymztysYVGK14hcP2Ou\n+PVGyXC3jCWeuRxwA72VdrqoSeHuJ6OCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB\nggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t\nL3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB\nBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh\noB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK\nKwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w\na2kvY3BzMB0GA1UdDgQWBBQozldJxrgWZhsi/R/V1m1UPKEA7TAfBgNVHSMEGDAW\ngBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG\nSM49BAMCA0gAMEUCIF8AlJl2lptIKpgL43QRxzExH5XRWITmH7fNrT2WK35AAiEA\n96iA8KaxcEVV2y6HNXM7EQZWNvqCLtKrtuvKBWYefYA=\n-----END CERTIFICATE-----\n\n\nAMD fTPM ECC ICA RNFamily CA6EA09EB84853EC720CD9BE5AAE73BF\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIDTjCCAvSgAwIBAgIQSm6gnrhIU+xyDNm+Wq5zvzAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEwNTAw\nMDBaMHgxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIGA1UE\nBxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNlZCBN\naWNybyBEZXZpY2VzMQ8wDQYDVQQDEwZQUkctUk4wWTATBgcqhkjOPQIBBggqhkjO\nPQMBBwNCAAQ5fkz4KonekKk4By4PVu900jts2g37esRAHdwgwvMXIxRHf1lBqmCm\niuT2MEHZi21VRFdcVUr+3cEdP9E6etEIo4IBYDCCAVwwDgYDVR0PAQH/BAQDAgEG\nMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6Ly9mdHBtLmFtZC5j\nb20vcGtpL2FpYS8yMzQ1MjIwMUQ0MUM1QUIwNjQwMzJCRDIzRjE1OEZFRjAoBggr\nBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2NzcDAsBgNVHR8EJTAj\nMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmwwQwYDVR0gBDwwOjA4\nBgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vZnRwbS5hbWQuY29t\nL3BraS9jcHMwHQYDVR0OBBYEFEUUrnBzWAfx5JAHoyxeDgcTefraMB8GA1UdIwQY\nMBaAFPIa0Pjoowbpy804foZyYxfbwb65MBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYI\nKoZIzj0EAwIDSAAwRQIgahQcXdsmgv2bVQ6mvRbmjYAZXIgRGzTkvNp9KHkdSaQC\nIQCXNY98DRYBugeGd3BB9DgG1dAj8lPmHx5klhYCijzSYQ==\n-----END CERTIFICATE-----\n\n\nAMD fTPM ECC ICA RVFamily 7ABAE76EBBA151415337F49A77CB1C3E\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIDTTCCAvKgAwIBAgIQaJK2kr7QVTNAD9X6rjYYgjAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw\nMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE\nBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj\ncm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVJWMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEgjqHAi3VGlHTA8AMKMiE4w150DBQssiBN5CXW6OkjXRdzW0AcbBsf4+p\nVWPyRfpVtszns6GC2mB+9R/DgsCzEKOCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB\nggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t\nL3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB\nBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh\noB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK\nKwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w\na2kvY3BzMB0GA1UdDgQWBBR6IqVx7p7wpEU4i+tS38xSxwZdvDAfBgNVHSMEGDAW\ngBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG\nSM49BAMCA0kAMEYCIQCuX4QBN4CPlmsuwENURCNvdQjvPvgTetx8kIsqvwos3wIh\nAKU9cWLmxsLNLWFrCAwNFybGzkUtAzAdx8Culc0/sFeG\n-----END CERTIFICATE-----\n\n\nAMD fTPM ECC ICA SSPFamily 282772bd68af58ba6b13477a89bb1a04\n===========================================================\n-----BEGIN CERTIFICATE-----\nMIIDTzCCAvWgAwIBAgIQKCdyvWivWLprE0d6ibsaBDAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEwNTAw\nMDBaMHkxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIGA1UE\nBxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNlZCBN\naWNybyBEZXZpY2VzMRAwDgYDVQQDEwdQUkctU1NQMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEl6IO1QcWF2hjA9bVwvfQCf/M9i7KNA5O/D5ypbdVVpifwwMwSwMG\nBmO9mmK56g6EPvDXpFmMg50FmQ6jU7LcKaOCAWAwggFcMA4GA1UdDwEB/wQEAwIB\nBjCBggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQu\nY29tL3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYI\nKwYBBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUw\nIzAhoB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDow\nOAYKKwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNv\nbS9wa2kvY3BzMB0GA1UdDgQWBBSMWXd2hTue25DGGoyvyinxvqBKxjAfBgNVHSME\nGDAWgBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoG\nCCqGSM49BAMCA0gAMEUCIAhSltSJhcMQa1BK+AuC4et0wxo1DnDIdrXn13tEkxet\nAiEA9ddrkfrmDpH7mMTJR1ejntr+m0sUTDJ9OtPzz+gthTA=\n-----END CERTIFICATE-----\n\n\nAMD fTPM ECC ICA STFamily 4A7A7EC532E35402724A2BB4501011CE\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIDSzCCAvKgAwIBAgIQSnp+xTLjVAJySiu0UBARzjAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw\nMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE\nBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj\ncm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVNUMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEuqTQcmuKG6lBH2pZ8FcFUVrdkesyyX/cIl7eWyhLQGUehJDrshpaX4uT\nzYTrwiyo+JVDCEz0SGqxF10DmP0kUqOCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB\nggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t\nL3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB\nBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh\noB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK\nKwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w\na2kvY3BzMB0GA1UdDgQWBBSMlQK6u0nLp8P7+HwwzcGysubG6zAfBgNVHSMEGDAW\ngBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG\nSM49BAMCA0cAMEQCIDz6Mytrfm+ihk744RkVAPPxkefsMZcUxdhGqnrv7owiAiBr\nq+LoaHiiDgfNpbeQlElRIu9c2y2FmhOYrt6STGQjQw==\n-----END CERTIFICATE-----\n\n\nAMD fTPM ECC ICA ZPFamily 1425A264BB595F9469645F3B7AA30209\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIDTTCCAvKgAwIBAgIQFCWiZLtZX5RpZF87eqMCCTAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEwNTAw\nMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE\nBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj\ncm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVpQMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEUs7cHYxm8jLp3GOE4MVnvVx5U0AKrTeLyBMwSstWX3VnUQM8oMeTh5eY\n4Zfis0MDpVxXVE3JcGGr45iOkkWSYaOCAWAwggFcMA4GA1UdDwEB/wQEAwIBBjCB\nggYIKwYBBQUHAQEEdjB0MEgGCCsGAQUFBzAChjxodHRwOi8vZnRwbS5hbWQuY29t\nL3BraS9haWEvMjM0NTIyMDFENDFDNUFCMDY0MDMyQkQyM0YxNThGRUYwKAYIKwYB\nBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL29jc3AwLAYDVR0fBCUwIzAh\noB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvY3JsMEMGA1UdIAQ8MDowOAYK\nKwYBBAGceGUVCjAqMCgGCCsGAQUFBwIBFhxodHRwczovL2Z0cG0uYW1kLmNvbS9w\na2kvY3BzMB0GA1UdDgQWBBQ2sLcQwBDRgZIhwpvc5T5QAzwpFTAfBgNVHSMEGDAW\ngBTyGtD46KMG6cvNOH6GcmMX28G+uTASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqG\nSM49BAMCA0kAMEYCIQDoFZIeUSnF7cDRjJb+iojim+QnaGsa63mDnJVaGc5UfQIh\nAIzqZvY5zohbdv+OWKibF2rEh9+bOQkuE1M7I43JDcZy\n-----END CERTIFICATE-----\n\n\nAMD fTPM ECC RootCA\n===================\n-----BEGIN CERTIFICATE-----\nMIIDAjCCAqigAwIBAgIQI0UiAdQcWrBkAyvSPxWP7zAKBggqhkjOPQQDAjB2MRQw\nEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1bm55\ndmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERldmlj\nZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNjAxMDEwNTAwMDBaFw00MTAxMDEwNTAw\nMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAGA1UE\nBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQgTWlj\ncm8gRGV2aWNlczEPMA0GA1UEAxMGQU1EVFBNMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEKLNGw0F3uq7kcoZazSAm46NUyiIJC5DgNAPo1CfrPsn3UtRni1DxC1xa\nsMtvIo3jAVHZlVsmAT1g0r5XiNb5mqOCARYwggESMA4GA1UdDwEB/wQEAwIBBjAj\nBgkrBgEEAYI3FSsEFgQU8hrQ+OijBunLzTh+hnJjF9vBvrkwHQYDVR0OBBYEFPIa\n0Pjoowbpy804foZyYxfbwb65MA8GA1UdEwEB/wQFMAMBAf8wOAYIKwYBBQUHAQEE\nLDAqMCgGCCsGAQUFBzABhhxodHRwOi8vZnRwbS5hbWQuY29tL3BraS9vY3NwMCwG\nA1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL2NybDBDBgNV\nHSAEPDA6MDgGCisGAQQBnHhlFQowKjAoBggrBgEFBQcCARYcaHR0cHM6Ly9mdHBt\nLmFtZC5jb20vcGtpL2NwczAKBggqhkjOPQQDAgNIADBFAiEAgaCRgPGIA9/8xEVy\ntJ1YK0ERBDGHxPT0igzycASqDhACIDWbPtOXQG3Z4W09OjRtWwLwdCEkelKfPazb\nyhIHIT4m\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA ICA CZFamily 01F7DE3D30F15BE252C0AFCC1A0A562C\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIE2DCCA8CgAwIBAgIQAffePTDxW+JSwK/MGgpWLDANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw\nNTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG\nA1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg\nTWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLUNaMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAvMx6GldSnmqFRVWG3oUBIb4D/Go7LFSnnU9Tvtn8rT97\nFoqxQRQN4a2Frx90tTXnvakc/bF5fWjB1lZauToCpgkUWVFSuIQe5Mw1IEK/aY0v\n/cQYSHrwnpmPoJa0oSKUrX7d8E3okAFCbDXyuKBzGnci9toQcWNMHoNAf6AbcpVD\nFGmsSmukSNzyiolgtkvPEZxhINl4zvQh0wYnKaU6/Ah6TzW1+TRyeiGNHkiccgh+\nYdSEwcvHUsZYI7QSd2d3IcX6b0wqubiE4jWoWkKmPiuX8BOu1YOjnKhTbq8rbpGq\nRKRV7SPyJqgTbXtUg9dZ9m28C92/iTdbaeFkgUvTTwIDAQABo4IBYDCCAVwwDgYD\nVR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6\nLy9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0\nRUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz\ncDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww\nQwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v\nZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFBSC/Zy4ivu3+RfKFCJfiRbz\nEEANMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAJRBWLzYJ5MPlxOHGGGm4881vTey\nLG8UvARg3+q0DvFs8T7piBtFXAOb0tu1kNquHWGJCNeJWcsNbi4Buzc63fbptt4j\nJh9ckLQnp1SK3mn5xo+O+5mgF5G9dN+kE910FEntH5k5Ox1bTKZzrSRSTP5cNacB\ne9FCVddjjH4yAOUKywMDbZipyX0GwNgJJYskYr/n7WG4vRCf9WFNMdeuTm8b8HPM\ni8Q0+5+0tl0X9Y7Mzds2ciwdlNI6COWXnels1Zy3Pex7Uc8KiU6q51EAl/YJEdca\n5zR/1B9i9pukRo9Pz096SqX8sjqXq6roHhkaXllniOYr6zaeTuRuUJpT8KY=\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA ICA RNFamily CC5AB663EE845CA9654A582121F50381\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIE2jCCA8KgAwIBAgIQTFq2Y+6EXKllSlghIfUDgTANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEw\nNTAwMDBaMHgxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIG\nA1UEBxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNl\nZCBNaWNybyBEZXZpY2VzMQ8wDQYDVQQDEwZQUkctUk4wggEiMA0GCSqGSIb3DQEB\nAQUAA4IBDwAwggEKAoIBAQCr2nNY0tQPp2mEX75pycX0XVqCCraSmUzFhPoiNPI8\n2OSmH8XhFsXelR84fukJrvnVEqtMimxhWkTguSBTf+dBTWbOfKnfzc7SJbQqblly\nNjs9RCppU/fN+NjYnoSqgGNl0mT/TiHZZozWcgaKTtkezxDi7czedY2Bk4z0SS98\nCYX7FcAHwK2ZOZHHs+AAwf4M9Ijf5FeTuU4m3T0Le9VBvoYak6VC7MHJ0MQecU26\nTDgVWzUu0wyncwS6fqFtbftNLfp8FsmdG+Oser6RDz/Pkl5R9KkhEQBwyhiMtwAR\npSCUeP3xCYSAQQ00Arl+HXvNda54tID56p0UatoTyi0vAgMBAAGjggFgMIIBXDAO\nBgNVHQ8BAf8EBAMCAQYwgYIGCCsGAQUFBwEBBHYwdDBIBggrBgEFBQcwAoY8aHR0\ncDovL2Z0cG0uYW1kLmNvbS9wa2kvYWlhLzI2NEQzOUEyM0NFQjVENUI0OUQ2MTAw\nNDRFRUJEMTIxMCgGCCsGAQUFBzABhhxodHRwOi8vZnRwbS5hbWQuY29tL3BraS9v\nY3NwMCwGA1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9mdHBtLmFtZC5jb20vcGtpL2Ny\nbDBDBgNVHSAEPDA6MDgGCisGAQQBnHhlFQowKjAoBggrBgEFBQcCARYcaHR0cHM6\nLy9mdHBtLmFtZC5jb20vcGtpL2NwczAdBgNVHQ4EFgQUUvtZ4pqoOpYvue7w/ltI\nEd5rdR4wHwYDVR0jBBgwFoAUV4xUX3lpUUISIaSleKzbX2gvicgwEgYDVR0TAQH/\nBAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEAl9N/5lOIvJpbOgfiIqKFHZRy\njVaTUi0qdQzrQD54KWto+jfurZIDTb1d6hfkLNC2gJcu+SAidknBoaw5GB1EBFsV\nwHI7hVSuXJ7fBw828NyvQKymacm4JdxeVc+GR6UItG9dUVCV6LjMFodSLJuL8a2e\n9Cxz6s09scV9AB2162Ls56CRAc+6TM1HA+q21EpSgWGXweDf7kP8+LicWr9uSS9p\noLH5zJoJ9PC0IySgVQc0LtErR2oSAyi8lPSQaUj3dQTpd054roGcTlyPsM5PGZsI\ndL43XMLMhNtn2h/fV3RZOUtxSIiMm/i62xsDIi742rQ3ZPmTbiTDqzPVk18NdQ==\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA ICA RVFamily 7ABAE76EBBA151415337F49A77CB1C3E\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIE2DCCA8CgAwIBAgIQerrnbruhUUFTN/Sad8scPjANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw\nNTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG\nA1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg\nTWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVJWMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAxPCInsP6UJTB9APCZcXBT+XQS9SGiw5yZtM5eSPGvDDa\n7FQRtxwiA6m386xXQhZplz9F0GDwc6iVcf/yh2W7203cDKbbKXjc6KLPUAnRSMen\nNeIj9bmSut2Epi5Z8RMMd6M11b0f/bxJGMmttM8y0kpzn+u0qK06wyeo+ZqnQFoX\nDQzlenGstpCGj5MyTd0ATSu7yrjp0cdQeTRbl4bF/9PQ3gqKzLCbHtFnnTN19bkU\njKM0GQ4AY+tMu3WRsQW0hFHK0q+HQDijkCGw62wvKlakpTVxg9zC28kmaab+RPxJ\nIYyAoNR8D5C5xscBM7nhGZLN2DjBg5paW+5yk/UZdQIDAQABo4IBYDCCAVwwDgYD\nVR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6\nLy9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0\nRUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz\ncDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww\nQwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v\nZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFIoFeM9WFG/qOZr5A/tbCsNu\nsnhqMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAJ9TlFKslPxTCEsde9ZuM74ZV/ih\npzO+89jTQaIlNgIkkKeDX6q7Oy0XATvQGeNpQ4sifhEd4EAi45A6ZpowZyflezDE\ntuyG7KMmFpLuE5IL1msuEy9+LGyRSmX+TIhvMcOBPPGvLZJ3YV0UUvvSFwhhbJ5C\nYlD0grQN27feVXuqoj7MjgkZ5ZNrYz4yTcpljfta1oFs7zVrA7nmjtB7J6/fy5y7\nt85iJZujW4YG8dskch28PBJ28v5kW1FHJfVj/0hH759b2DDc0w0iaA9aj0PYj3Vm\nigYAcR4XCQWNADt8a5acm/y5/7t+wW1XSKDxochM8Evb7eNsUlTTFT+eL4Y=\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA ICA SSPFamily 8f557bf02fba534642df289ff945cd40\n===========================================================\n-----BEGIN CERTIFICATE-----\nMIIE2zCCA8OgAwIBAgIQD1V78C+6U0ZC3yif+UXNQDANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xOTAxMDEwNTAwMDBaFw00NDAxMDEw\nNTAwMDBaMHkxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzEUMBIG\nA1UEBxMLU2FudGEgQ2xhcmExCzAJBgNVBAgTAkNBMR8wHQYDVQQKExZBZHZhbmNl\nZCBNaWNybyBEZXZpY2VzMRAwDgYDVQQDEwdQUkctU1NQMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA3Ew91HKxCZ1CY0Joh3EslBzLWZPagldUqYRxEJDR\nZaz+pSZ51UkMgKmj81FZACEjCpB1rnvky6GLpa/NZMv7vAx8MirXlu7kaV6h0hCl\nQtmebe17eSsux9VvMvOBgyOMZzjQYQSiBYKZtyCPFIKryTAMxmozfRVTwOt3JpWE\ntXRutkP6RRzJGYGSe5j/44Dn6MhXc+uUoQcprMqrsmItAepGYxXOWC/AZ6c9Qi+h\ncysRxdyMqsRfekF38q8pxHcb+2czshxYxnxes/K7zAQfs8i+vYuvbq1LRiRTwz0p\n0Bf3MmjiPYpwyGHOa/lW7vFXZu+YBtpx4B/HB6m9VvgxcQIDAQABo4IBYDCCAVww\nDgYDVR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0\ndHA6Ly9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEw\nMDQ0RUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kv\nb2NzcDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9j\ncmwwQwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBz\nOi8vZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFJB9Zem1YjFZl91a0Iay\nt1mJV7ksMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBADLIOVF6Wu8rI7FypvQys+T5\njoQ3TrLvNfpy1QK1R/m8VLANglZXECLpVvSs4pqopuM5yWN1NPA3nJoTRpacqDFs\nzXbZ+nh5fBhBfiaF1n2jYkGafG6nSdqvWhUazK9klHyTvXRKEZEJExVXpvcN31hI\nMZ/kpGhMoF90rcUzoKajM6zHZtuDT1KFd2I/NFf+yQxOGtrOP98q+RXuFfXWVBVB\na+LAmFuAHsn/Pqqiu5YdGAbVAfEPht/QEdB1+BpQ7mry7NiHi5w5z28qsQYGcgyo\nK6qPRxQgHT8/CqI3Fx1C/UoHq+4TH88EMxIB9knyydVipIQZWdf5zjmxVSRmhkU=\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA ICA STFamily 1EEA5C967B0557D56AC61D4EE4DB235C\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIE2DCCA8CgAwIBAgIQHupclnsFV9Vqxh1O5NsjXDANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw\nNTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG\nA1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg\nTWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVNUMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEA6T3q1dRWVLt1a/26XhXMNb74HDe9B2p1rQ/MNCOdbta0\ngSGZYokQwEQWA7M7UpZ8UffV60/GDVHcMtaucVjkCwrySnI1Cul0cV8Wi/NYlOnK\npEy1TUmiJQnETPTP5yyoQ08wzv91hHD/uL3HRvIycpCAasoJP2Tvd80D/hTKEUtG\n7wo1qjbQKk2zVBDihJB9wGms2TQ8kIJnuO782FXYe5mBUE4FlMBEQorKVPLEY/aV\nDVfZJMmC1HA45eFEKg9bliVsDrAl1AdULTJvOSB8fv79klJa1usqRlZuDw94Iiko\nGRegGdy+P4wCHZa63oaFfW2gwMsTtE94Awocaex67wIDAQABo4IBYDCCAVwwDgYD\nVR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6\nLy9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0\nRUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz\ncDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww\nQwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v\nZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFJDgB+F1V0IBp6jayTsyMRSo\nh+HoMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAFEH+eXMomVzTr17dIOhIlJeTG+A\nzFb4DhU01k0aOhpiCyS/09FJ7NOOOPfuzfGz69xpEuTbCJTwR/waVHiaYh4WWRdH\nnRAphoJaFCgvleIblhweJXtbhbNZZqVn4Cu+zyXmjs5lJyidEzMexPXcUdo/05xE\nNTM8MS2z/pJpxeLuvdz3FUb4iTZt2gLy3EswjxPD7QXezkRkPCf5ODNeYKjT7H3f\nqX4bXuaGh6mOm9F8dQe1p28FLG7zAkqbmrokXrSrmkAvNhao2Gc3Y3IvQQw6KTPh\ndGwGLQQkY5vtUKrK4kcWcvTtUQlVLAIQAnJscQgTu6Ix5oV57KSe3Cij4CA=\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA ICA ZPFamily 2BDEA5B81C045B536EE60CA3653E4B1B\n==========================================================\n-----BEGIN CERTIFICATE-----\nMIIE2DCCA8CgAwIBAgIQK96luBwEW1Nu5gyjZT5LGzANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNzAxMDEwNTAwMDBaFw00MjAxMDEw\nNTAwMDBaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG\nA1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg\nTWljcm8gRGV2aWNlczEPMA0GA1UEAxMGUFJHLVpQMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAuCTPvBEZF+063jnTNkxbUpppwyi4E+Ckj03xf7XDHPFP\nh+3q3zHvsamIXRncYM9jQHkNYDHdR9z+4oLfspBfP5o/Ks8nFvrGsL7vSHzxBJy7\n3eunsREP8Ca2TE4oaXn5hbDSBaF+kYwlrqHLE5PzVF2piShomR9mkZyRYk1l9+sb\n2Nv6rpFd+eaFjLMgD2xc1BLqNGH2ICvjBDMaZ27YmcZK7gwUpfDXhipzG59JLSm4\nfJ3THFW8ZdP64zt6H1zKaQ4ou7EEHh9qs5UgKzXwEG3MzE03nMedmUzBoC26VqbI\naDGzLzO0I5kUNZlyBomkN/MamcJcvqsaal5xoDPujwIDAQABo4IBYDCCAVwwDgYD\nVR0PAQH/BAQDAgEGMIGCBggrBgEFBQcBAQR2MHQwSAYIKwYBBQUHMAKGPGh0dHA6\nLy9mdHBtLmFtZC5jb20vcGtpL2FpYS8yNjREMzlBMjNDRUI1RDVCNDlENjEwMDQ0\nRUVCRDEyMTAoBggrBgEFBQcwAYYcaHR0cDovL2Z0cG0uYW1kLmNvbS9wa2kvb2Nz\ncDAsBgNVHR8EJTAjMCGgH6AdhhtodHRwOi8vZnRwbS5hbWQuY29tL3BraS9jcmww\nQwYDVR0gBDwwOjA4BgorBgEEAZx4ZRUKMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v\nZnRwbS5hbWQuY29tL3BraS9jcHMwHQYDVR0OBBYEFMuz9ybnLDe/fpxs+qbvBviP\n0fxMMB8GA1UdIwQYMBaAFFeMVF95aVFCEiGkpXis219oL4nIMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwDQYJKoZIhvcNAQELBQADggEBAEvK4x3Ea5XIGTEfnjlPyvoHJgMw\nuJnnyKJ02xfgAULfF6NgI5ZFsa1z+pqPhOHVTR2X4oxPeaA/TiBB7MWMYOTU8pc+\n6L8fOE+6W7q96iGNXUESiC68Nxy3cH6r3QFnfP8KJy4pTw7nF4uB+N92VZdf4PHq\ncTjKGnDXw+zjuooqhq+QIjM77wvlPg8d65BT8fnnTlTWMuBkaNpkknukMM/rt6R5\n6hDehYwNiHoZejF9jPF0DXacuLhOrmUbtWyyN8I52eo72X4WYO7dd9ELXOSANndv\n8RyOND5a9I6RO199XSNZHvZ4XxaD8eqcJ3Q99obAexDoR64Ri0ovbibmAFw=\n-----END CERTIFICATE-----\n\n\nAMD fTPM RSA RootCA\n===================\n-----BEGIN CERTIFICATE-----\nMIIEiDCCA3CgAwIBAgIQJk05ojzrXVtJ1hAETuvRITANBgkqhkiG9w0BAQsFADB2\nMRQwEgYDVQQLEwtFbmdpbmVlcmluZzELMAkGA1UEBhMCVVMxEjAQBgNVBAcTCVN1\nbm55dmFsZTELMAkGA1UECBMCQ0ExHzAdBgNVBAoTFkFkdmFuY2VkIE1pY3JvIERl\ndmljZXMxDzANBgNVBAMTBkFNRFRQTTAeFw0xNDEwMjMxNDM0MzJaFw0zOTEwMjMx\nNDM0MzJaMHYxFDASBgNVBAsTC0VuZ2luZWVyaW5nMQswCQYDVQQGEwJVUzESMBAG\nA1UEBxMJU3Vubnl2YWxlMQswCQYDVQQIEwJDQTEfMB0GA1UEChMWQWR2YW5jZWQg\nTWljcm8gRGV2aWNlczEPMA0GA1UEAxMGQU1EVFBNMIIBIjANBgkqhkiG9w0BAQEF\nAAOCAQ8AMIIBCgKCAQEAssnOAYu5nRflQk0bVtsTFcLSAMx9odZ4Ey3n6/MA6FD7\nDECIE70RGZgaRIID0eb+dyX3znMrp1TS+lD+GJSw7yDJrKeU4it8cMLqFrqGm4SE\nx/X5GBa11sTmL4i60pJ5nDo2T69OiJ+iqYzgBfYJLqHQaeSRN6bBYyn3w1H4JNzP\nDNvqKHvkPfYewHjUAFJAI1dShYO8REnNCB8eeolj375nymfAAZzgA8v7zmFX/1tV\nLCy7Mm6n7zndT452TB1mek9LC5LkwlnyABwaN2Q8LV4NWpIAzTgr55xbU5VvgcIp\nw+/qcbYHmqL6ZzCSeE1gRKQXlsybK+W4phCtQfMgHQIDAQABo4IBEDCCAQwwDgYD\nVR0PAQH/BAQDAgEGMCMGCSsGAQQBgjcVKwQWBBRXjFRfeWlRQhIhpKV4rNtfaC+J\nyDAdBgNVHQ4EFgQUV4xUX3lpUUISIaSleKzbX2gvicgwDwYDVR0TAQH/BAUwAwEB\n/zA4BggrBgEFBQcBAQQsMCowKAYIKwYBBQUHMAGGHGh0dHA6Ly9mdHBtLmFtZC5j\nb20vcGtpL29jc3AwLAYDVR0fBCUwIzAhoB+gHYYbaHR0cDovL2Z0cG0uYW1kLmNv\nbS9wa2kvY3JsMD0GA1UdIAQ2MDQwMgYEVR0gADAqMCgGCCsGAQUFBwIBFhxodHRw\nczovL2Z0cG0uYW1kLmNvbS9wa2kvY3BzMA0GCSqGSIb3DQEBCwUAA4IBAQCWB9yA\noYYIt5HRY/OqJ5LUacP6rNmsMfPUDTcahXB3iQmY8HpUoGB23lhxbq+kz3vIiGAc\nUdKHlpB/epXyhABGTcJrNPMfx9akLqhI7WnMCPBbHDDDzKjjMB3Vm65PFbyuqbLu\njN/sN6kNtc4hL5r5Pr6Mze5H9WXBo2F2Oy+7+9jWMkxNrmUhoUUrF/6YsajTGPeq\n7r+i6q84W2nJdd+BoQQv4sk5GeuN2j2u4k1a8DkRPsVPc2I9QTtbzekchTK1GCXW\nki3DKGkZUEuaoaa60Kgw55Q5rt1eK7HKEG5npmR8aEod7BDLWy4CMTNAWR5iabCW\n/KX28JbJL6Phau9j\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 01\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEjCCArmgAwIBAgIUWZRTybphJ0L8eMcF+mnAEpwxmMkwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAwMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAOWvuMl7bm1JxiT8+2VY1rKRoXuU6/QYa1kPUDnw6FZZJovrYNhqnPagPUd/\nVoYohJirkN/uFyLzvlxRa1Qr/vGLhJwSCLuOhRF9SwRuy51CW5IAFdKcxzFjoIS4\nQyBnBoP+pDvXx/uynMH8DWofmS5H234rN3JtPUZThvEUqvC8ivGXNO0B9jOy//Dx\nZ0UUOTJwIFu77pPIfzOtk08vsg1blpf454d76yoFTKDsi/4jNxHRRyFfq/5STiPx\n0QJZIngkRoidZCSOLUKVF4i/rStogdcgMZ6nEkM1lsZTbrurAFFdrSPqjFTNqOnk\n9X/zDO/m+J5srga3TiDuXb03pO8CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBT3YaOh9AjxCQeXuHEnwqI5fArKJDAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA\nMEQCIFEnpOFkOJnm2Occa/pRpqIO+xMWna+3GHQ7hdak1oS5AiBdjJ9CEBMWRgNd\nMXeyfubNfOA9rcIsxM18ODwiXw6WcQ==\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 02\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEzCCArmgAwIBAgIUVxemUjurjw1OiJWUZ3lLwvPhRJQwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAwMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAOnv6DDMr+zT5TSqPQO5bMCQ5BNeC2RkrCokcs8iXtqhwqAcLGRKt0FdsOHb\nnJ4HDsrEWnMw3fApLvWd99nW4vU6ukWWqZP3i+5nARf1wTbu1n7dzw0U87PIKTN8\nRR6OffjgI3msd0xPMkej4YoqaeNriPX9fOL0LIMMxFjc+pDFD+ZsHtx5vcvEZU86\n6SQLVbVvcOy5qEnjhx4M7BBhvauRdj5GOl9BbfXg0GiDpU6H5Eh87xtlS7/DCSDT\nI516z57xfHaht/JcwCLw3ySisROTI2NmqBXNXXyEkA7+LGMdNm+o8Hw5fKRQq8As\nx+3FpiBNIQ9gVdi6bq1EU4vpJDECAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBSBtdmcv6yYxdYajr8mqGoIa/o+zjAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA\nMEUCIGtXLUfjDHdNbmtLSjuamOhml4OIvINSUdwUHBfSAiJ/AiEAzBUigNgggA9s\njAoDiVeUXqT5N097WlQjGPlhO4exl3M=\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 03\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEjCCArmgAwIBAgIUaEzk01H7UPLd9cdjrm8SGNM5dQYwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAJhQFAEyf/MSHrhVtGijWXMArQywzkKBiHs/rIOuBJifqxCjR3z0I+3nt1MY\ngEVqC75qzMDGRR11bh2+kOkFAR9jplGX4XAV5veGW16xUMg8aLEd5VPiWbuSStF+\n+pGQELYgSNv1JCTLdMUVJtT+6SJyp6pPR2MNh6cKwmGSCO/EdjfG3xiQFzqc9aDq\nSO41R3sLSWP4Lp9Y4F7jsDVvtaLg2lKwf/LfZtJb7KHqnbqtDYb5eAC+pMVRaeLE\nl94BbkjkXGxT+Ibu1DCcuoOfXW7IKbpW5bXdvhw6sRGuFTzntyJQuIlLKNPdb6vl\nePU4WDmdE1xY5NXTXXExbitjvJECAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBTNNAGsbhxvk93YadRqUYMRs3R4lTAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA\nMEQCIAikYRQQ9utw0dyX9nMT5hCCqRIWshNyzwJ7ixSDJFKzAiBHE2YmS4ilCQuO\nJuTeDJYWPWyfb5Cl3JwXdDNlaM3vvw==\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 04\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEzCCArmgAwIBAgIUa3uAQUxkKpWg/Y7HTiCoypgW74IwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAwNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAMbZdbGpbv9kl3qghjLWnNBjAqsekHoeCra74j3xlXTm5LLshkTz7mltuf6G\nDRi5X9sf5A5ZJwdnmRTIlvKLSl1fsTudLhXMaEx12dcJzA/MegoDNM9I9w0OXdHr\nubEUQ3exh2BKbrzI9MfKYJGZPgvlMdoVpY/MRIhAx/KucMj+QF/dhpKaFAC9HuL1\nFe/3AhAXLCzrPDquqys5ooPNpLA4i/05//E7bEplAME/xczP4Iu/cdA9YR7V8izh\nTwyKzst3d3M+UDDkkiwxxo5qGgwRdPq3AUSQglNogbXyDAXryTtSAVJo/xIHqx1l\nmn+aTTSQC+tngHnmlipuTml+m1UCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBSghUvRl/ghL6y6OJkb/dv10TzpzjAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA\nMEUCIQC/qQV5ZAFBIoKvCDKNfIeimdZJHWhlLNxRDJs6VIfR+AIgQdLz5oU0ZWix\n17vP0kgii5i1CmLfjvOeajfa8SXD8tI=\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 05\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEzCCArmgAwIBAgIUSU3KWn2tz8G9sFtsBnlCUIXlQNAwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAwNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAKoNRY4TkPxrKoFC/lkgXH2K94ZMcZdRAWgiKoqJXNUeU5mWm2h6AlCCZocF\n3xRoRb4WayNAHBKiGADS4GNK4r5+Ier1fq68LcTNV+1/IZk/gHb8S9qfZTgqe1za\nUNkcPqP9iYbgUlL/qKVuyusD7psFKcuIC/nQKM2cgY2p+QqPbD+WId5HRt/ns0bH\n8X9wp0u+jYYx4JSvQFlHTNXOphRqkz/n1Pckk6aGm65w1MyHHnbuTrDGWuS9S3iy\nh66q2zN2/feWlPUT6yEKDt8fgUmrvQG9HeteM6Q9E3lsIwU+2OayINeGyMew4gPu\nJBkROXx2baXUlqYCZpZHDm0knb0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBTW9W7Pz37dt/2H7QHhJ+4AmkY7yTAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA\nMEUCIQCDW3rnSU5hck1n9vfuxl6IiY/wlDDs0P/qHjWXPa9k/AIgeR1Y4NGdhzgW\nNwHWGepWPddzcD/UxQ9I63ZJDqYHeYg=\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 11\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEzCCArmgAwIBAgIUbxTqjeOwQnxp4/enilmqXAQCYkkwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAMPbPcpKYMx9QYq8/CVZh3P41zUmhbA0GDPYXEt+ddz+2q0vq/5rrJlKn3cm\n2PxkPPmKgAOiGavsZRme1lBJsb6Px5Z5vxUI93qWRg967gKZvvHS1eB77OEY2Qkv\nHH6ZEWcoIfp0Xa2d2gMGUY0G4b5fJgCTkNkafQDWmTM2I63u2nZLqiBQ2vN5yoJ+\nF5DCH7fjLYTr3DGJmbUi+uILwDWez4q8gdnDIUvtMgDBivzqptBCyEZPMKgEf5d7\ncUVcaEBKgPXwZNm7xjYlr2vdnIcQi6RF/fgnGVr1Hh+lKeWthA8cPAYMRNC+rKoy\nDVp9rjdMe45SsrIPlxMqO6lKTEUCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBRGZt52YgTnTdKbtP3FhSOhQD1qMjAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA\nMEUCIDHF6nImxBvotQNGm8a+izHSkadrP+qlSHHUlk4Mrv75AiEA3p0ecSdX0hM3\n701WulPqT7V9Fvb1r+VEpvQBiJEzvHM=\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 20\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEjCCArmgAwIBAgIUdbpNMUXEGTxeQxEIRMR8jFViQfMwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAyMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAJWEXww92zCQe8OhZfins6CGhJM8/tlQnhfL96IbDZ0igoHMfLpO0nsqedGx\nLSwerzs8IHDOVoxSLSsmC2Wh7T+N6t4h7LyEowBjXGBnENzazOImuqXNoHla2rqZ\nXT03UBTkI8HftD/0Nv0TG1mOoPrG4yA7SLRHNb4X+myN04p0/mxscV3UfQeqloCz\nXPx99cLATTdpz79SuMBPDFnwFe4XCtjaCHNcxhGPiIlj7V0ruPM5r0tpcSllmLoh\nwcAreZ7P1OzPF0o5Go+0m4Q9NsisIjGr7u0jAHHklljAboY4Jvf83zADyjvcHkIs\nVQnrl7KQcnn7HpD7pOaIW1jkv28CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBTgAo2HzmxnqHUcxLXXT1diLnXkKjAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA\nMEQCIENnp5oVvHCerJeUTpl6TLgzZmOr1erz5miO4o0lFrxlAiAyIt7Bc3G26GjR\n0y5/4fUicKo9xnhXKNxFZFyXc6gaJw==\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 21\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEzCCArmgAwIBAgIUUMytw8rGzN8RC77Wdf03M/PTMeAwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAyMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAMpV2oOCZs6KmkyvHgnEow0jhkXK1/CCv3wWsIBFigID8v8rvvBRl1ytdFw3\niNX5pQHnw6+9+PQp/r/f8vjH31yHbigqkeWT/TNfnwZO5OZeMdkngvTXyDBvnNMi\neptZBJrEjdOJ5SpPH6KOeC+w2PipI34ehD8cs8bDA6qk6zInwU4RdpKqOSlAQ3QY\nyJDlB9XWy1hoxIFKSqHArtjONVO45o06GrZAPnd1fj8kEReP5SZE2Ir+ictWZdaq\nRJC70dKiq86B5Doo+8waUP+OgdgVtaQEY1OwCKdzbX0uUxy+fZqV8abso+stodMM\nTVUZD2aZ1QNGVh4M/SeE3CIADT8CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBQtYFzYgrK9cWzOcckLx3TT1byx1DAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA\nMEUCIQDoOiYGiPcrHJjH2Kb7Wmqvesv9CXaDekyjMbKjCKBgsgIgW0qsMympS+Rk\nGzxdH7cnLlwmB+hArEf+9S8nETRHY0M=\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 22\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEzCCArmgAwIBAgIUXdnnM6tgfyJOezwERoiMm2102wQwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAyMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAMWtFwSJQY/beW2AfNQnmppVdyN602rYYMlJ9lS+/8J4NryucewQd2tcI17e\nZP7sEfzObXyAzko7oP0nQ301pGUXvNiI/6GCTsrXKxcxM6LiGVQO7f7inV80cM+3\nWeiz5zVZKfBollAwg6UzTZp74nmXI6qH2ow3HNBAu9tDU/jappACXdKmDLPouEwN\nqJtgti8aZKvmHSadqSTggkKrgsJi1wfDsa3XY1+EFuZh84oMeH2pwvxiXF7kUD16\ni67h2ZVplKlO0pesmRJbiLR2wa4uAcQ90O3lx9LDN62RlAi695TD14xrH6aIGU+M\ny69O+UCMbcHuTlKZ7JVOtXN+FwcCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBQ1ruc2ybTShhMJ54FcD6TOQNhl9jAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0gA\nMEUCIQDcUaA0rdKJWzumgJ0hevRoj0b3PWThtplRdhhS2QGotAIgF0ZXSGWMQswQ\nUvwooDAveOY2Mh147/Px5XZR47nfDpI=\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 23\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDFDCCArmgAwIBAgIUQwWvul0AgI+EMR5YMnHQ6UcNhcgwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBANRxHgp/Nq/Fa4OuIaML7bP9mI+crl4RL+xcFGiEqO62BZwG7LcjFRjbC9uK\n3kVu2oso+uYhxKI8dQmq9yZbvIWH06omoBZhCv6nvHqxGrcIOYxUNBnSt2vU8O54\nWGY46XvfLEYy/w0JSOTYigpTxeGTaiONfDBps5jzf0DcUZyiQK+S0xPBWQjEoZuV\nfXoHu9qC4+FXz7s9vX0CwWViQNvjVMuoAqXFEoXoxn5vQ0xgZNJt8K7qsl7sysye\nFNF6OZ06qe2VfyS20lp0ycbO9oWeA9Z24tKWj0IHCuRWGyMENVrhKTeUDH4pbAGR\nW6JEJ0Gvo19kc5XqGtJlEVRJxk0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBRV9No5ymW2aB8rdxG8PvIIqGedHjAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0kA\nMEYCIQDcDy9hL5tv2dnKG5F0QAUDyPjFpM2oXT+7+65lhXEZVQIhAM8nWy0r2RPn\n/it+ZY4TUGbji7rKab2tAC6YcagHvFiw\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 24\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDEjCCArmgAwIBAgIUUkbrM0nja86+VltbnRvVSPQKYe0wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAyNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAKq0tRItVby8VWFjb/7N+WmJh2uTDp70Mm4Fv4tV7iDWbj0KmDcNNsK1kQOX\nn7drbPhZCQ728+nnbah99Ao8fqZhPTr6LWOzu626K7s9ltj6XENP4py1IsTYqvwP\nIIikViWkzbIhelSzRFhHubH963uvgv2UFH8LqTOem1NCayDMRIKfEghYLkLDcHKt\nrcba9bo4F+DzegznregXK06bGL8SoUD2y/035f5DKmFc6qsqwRoJIPPthUcTum1U\niQsK8qwN+2cJICZd5P6om0xc8CVXyZxmk+ey/01FSUcAA7VTfqCRXEGpkezelSLq\nIce36e1PLfJ6yoWaSMCuNOYSxNcCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBQWs0Hjgc1cPnmayDjKF/H38/dDHjAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0cA\nMEQCIDyZXKar+bsQIZHVGtcTLpMqi35eoF7pqjOhFIv1FHZ6AiBrBZyelmYzR2i3\n3IYua7i/IisumKWp5EQZFAQkOXZZYA==\n-----END CERTIFICATE-----\n\n\nAtmel Signing Module 25\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDFDCCArmgAwIBAgIUV0h4consbzOZTBM8CEnTXqqohHwwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTEwMTAxMDAwMDAwWhcNMzEwMTAxMDAw\nMDAwWjBtMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSAwHgYDVQQDExdBdG1l\nbCBTaWduaW5nIE1vZHVsZSAyNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBANUeH1QW1CO7bGkbktFbx04qLmey/xwKJByLKM3iymporLZ6AjSjMs+NKcBn\npyvJdF57yb3qAJU/t7WyppnqO4kdUD9vLITfIIJzmx2aQTdnD4skodAPLmCBF2N7\nCTKzWf4djDG42A9p1Mq3labo/psrUm75gdXqnI/aeCQWNWqsFwa5tA6sWVybFTQZ\nIye3PZBct83vMnHExSsf8F3u7zx4KFigO0S7TNov6aSXUIE/yLmzq4WU8lj6by0A\n6TX9Kf0g5gcsN/0c4pzxZcVJgHgc70w8DO4xLGSFEBg2SAYYnyuOVSy60Ig00zi/\nHlcPQ/B9M5/ACbu3BfcPaGEI+n0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgEGMB0G\nA1UdDgQWBBQndjHQWfp6lVP7Wd/W6FvBIjAP8DAfBgNVHSMEGDAWgBQx0F0Qba/k\n7RndCq/TW+oio3gcVzASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMCA0kA\nMEYCIQCHfFzFzq1oxXvOHV7Pfv+NN/BF+TEJ/NS7gkhmXvqCuAIhAKN6WGiht+ZX\n0q0wktHHVdePVJ7vxsw42t/0oqu1je0B\n-----END CERTIFICATE-----\n\n\nAtmel TPM Root Signing Module\n=============================\n-----BEGIN CERTIFICATE-----\nMIICKzCCAdCgAwIBAgIUcD8hGhUZbtWr/R0SMo4rBkmgVHgwCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxETAPBgNVBAgTCENvbG9yYWRvMRkwFwYDVQQHExBDb2xv\ncmFkbyBTcHJpbmdzMQ4wDAYDVQQKEwVBdG1lbDEmMCQGA1UEAxMdQXRtZWwgVFBN\nIFJvb3QgU2lnbmluZyBNb2R1bGUwHhcNMTAxMjMxMDAwMDAwWhcNNDAxMjMxMDAw\nMDAwWjBzMQswCQYDVQQGEwJVUzERMA8GA1UECBMIQ29sb3JhZG8xGTAXBgNVBAcT\nEENvbG9yYWRvIFNwcmluZ3MxDjAMBgNVBAoTBUF0bWVsMSYwJAYDVQQDEx1BdG1l\nbCBUUE0gUm9vdCBTaWduaW5nIE1vZHVsZTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABH2Mc2ZzwulHWuF8a+EMpey51ZrMiF78oQywMFzGCmV4CmfpSQVpJqw23np8\nQveCQOt7n/zsBMRsqk1bsAfYKwqjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBQx0F0Qba/k7RndCq/TW+oio3gcVzAKBggqhkjO\nPQQDAgNJADBGAiEAyNu4sBDbRURcVGhKysdHGYidk5H2Bia+yo5mDryJ3hMCIQCs\nlDkUE4T1jHHwzSxca6KCXzgtpyui78G742CdYm9W5Q==\n-----END CERTIFICATE-----\n\n\nBXTEPIDA0PROD EK Platform Public Key\n====================================\n-----BEGIN CERTIFICATE-----\nMIIDwDCCA2agAwIBAgIUJrmq4T0WF+KN0GBFY1nQZekcmZYwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nOTE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xMTAvBgNVBAsMKFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F\nUElEX0EwX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIB\nBggqhkjOPQMBBwNCAATlW6lYkjRqfJcDgYYIF4Aj+5grglb5Rndr70jShDj4cDRL\nSNkToyuHhQIEmsa+gd3r3bH9kVb83Jzj7nrhrlKMo4IBnDCCAZgwHwYDVR0jBBgw\nFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFLmel5quSHdOou/Km/mt\nWwQEDcEKMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud\nJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIG\nCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JM\nL2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAw\nTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50\nL0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+\nhjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9F\nS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIhAOTeL3SQOpcJcUfg4ZAJ\nL0lK7kiLrx98zD5PcAYOof0OAiBy6x20LwfMKNQc2fQecc9NHDiYqzowUIHXldhz\n/m86tA==\n-----END CERTIFICATE-----\n\n\nBXTEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDvTCCA2OgAwIBAgIUNY8XaQcdQQmxADTKueN39ZzWIXswCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nMzE5MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F\nUElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAAQblrtMsCNzHUAZTZ6vQGJjMWlS73/DhZ98HaEb/8HDDwm9CdOA\nIjTYsRcZKDnLufP0tiTqAZ7H38RJx4/K6nu6o4IBnDCCAZgwHwYDVR0jBBgwFoAU\n6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFDFzTW+K6pE6CjEYC3hcwGMI\nlMx7MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB\n/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG\nAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr\nY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM\nBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo\ndHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q\nbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIgZgs69p123xjRxvnkZ03i2gNw\nFAVq0i0YUGQifKr8BygCIQC7ldmSv4N2yejCvlM1Bl0q9X0ZHiTk5avr35/JYJMn\nWA==\n-----END CERTIFICATE-----\n\n\nBXT EPID A0 PROD RK 0\n=====================\n-----BEGIN CERTIFICATE-----\nMIIDxTCCA2ugAwIBAgIUGIWdGeQ7GqOClckr+/OQPqXezKQwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nOTE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNjA0BgNVBAsMLVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F\nUElEX0EwX1BST0RfUktfMDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqG\nSM49AgEGCCqGSM49AwEHA0IABJntoU9et71cNVj1/QhhSd7YIWdJIBbN9OOfo1b/\nySHC4oaXDypNoWWryX/YX0a35ySUW7nBo9hXJ6ZZ6bysCFSjggGcMIIBmDAfBgNV\nHSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQU1zz+Wp4BgIAR\ngaFETeNu+/iLoW4wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYw\nEwYDVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0BBQIB\nMFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVu\ndC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYBBQUH\nAQEEUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv\nbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRGMEQw\nQqBAoD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtj\nZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNIADBFAiEAwaHTAqCWvTbG\nVJOELR/gWmyM+gbAvLxhgxs/16kz9KQCIAU21IF1QZwJS1j0+X2cMWINm6tDj+1w\n473Z2vx0JxZI\n-----END CERTIFICATE-----\n\n\nBXT EPID A0 TEST RK 0\n=====================\n-----BEGIN CERTIFICATE-----\nMIIDxjCCA2ugAwIBAgIUWKo1AFwaYLTyc9BRshwgTyQC4DUwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nOTE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNjA0BgNVBAsMLVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEJYVF9F\nUElEX0EwX1RFU1RfUktfMDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqG\nSM49AgEGCCqGSM49AwEHA0IABNsUeT+lNMvpewq8JB1WrgPtcG5u2uLdSsEOYQrC\nFL5yGN1Qyz+nZ0j7a0GblIsxWB6vDDOQ+ByY0lCpTuq/WN2jggGcMIIBmDAfBgNV\nHSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQUFLjnE3+plSbE\ncX36iBskk2u8a9AwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYw\nEwYDVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0BBQIB\nMFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVu\ndC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYBBQUH\nAQEEUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv\nbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRGMEQw\nQqBAoD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtj\nZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNJADBGAiEAmcHDePxSjZrw\nTRQT/UzIvjJbpEcWcSW/wdJGs3DFoRACIQDBcehub2+ysFpZ8TnoZ3c8d0AcPVC4\n6hfaQ1ej3zKk0Q==\n-----END CERTIFICATE-----\n\n\nCHVEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDvTCCA2OgAwIBAgIUMoXQN7fpvlMh+EaakFHIPEncyIEwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nODIyMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENIVl9F\nUElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAARV46h+ExRcpu1wKs5TPMCB68LT07TgFz5gl96xCRDe/ezW0PEB\n6gpJelw06KCONPrlgiBuAzlBPm1HXgBiTGXDo4IBnDCCAZgwHwYDVR0jBBgwFoAU\n6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFA+ntJUEgSYSDhJzFgZ3bz1o\noDfAMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB\n/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG\nAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr\nY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM\nBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo\ndHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q\nbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIhAOCv9lgVGKQjhwKbXmyjRac5\nPPxL6tFKlwuw19AijVaUAiBFM7VCxiZh2CZoCAYd95CU+Qi1UhglyV5v9LN2uGXp\njg==\n-----END CERTIFICATE-----\n\n\nCLPEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDvDCCA2OgAwIBAgIUXaavSNGtxrLKxvmH7yH49yMw2AowCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nMjA2MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENMUF9F\nUElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAAQJMoQnAKAb2Pf0c+1FIBq973Jobw1Xyi7lGiGOxN4XJqxQ4g/Q\nAUsZdBrB9irC/9mZPLiVeeC5gmX1t+h74M4Uo4IBnDCCAZgwHwYDVR0jBBgwFoAU\n6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFBQJK194FOybcT6am5CkxRnf\nCOaIMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB\n/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG\nAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr\nY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM\nBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo\ndHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q\nbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgOgE2XZ69IS6mmUGqQhWWxEUA\ndHEVz7iBBGt2IU99uIoCIEYlzTKUCBBLVqAhHNUxVS75owLH10/g9ktM+Lu4yIc2\n-----END CERTIFICATE-----\n\n\nCMLEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIID3TCCA4KgAwIBAgIUJJYdv83l0uoZXqKPrcJr/zFNRtQwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgx\nMTEzMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENNTF9F\nUElEX1BST0QgcGlkOjEzMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAERUv5VuJeLq+kowdxzthg1RXIva2wIXx8QTyDpohD\nH/6iycf6vXrbhwOBt1ol7siMJUslPCRKhGpAQ+5Z/L5DQ6OCAbQwggGwMB8GA1Ud\nIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBSar1ke4mPKrhD1\ne6BPqNHdZhP56zASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT\nBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEFAgEw\nXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29t\nL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMGQG\nCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vydmlj\nZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXku\nY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmlu\ndGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqG\nSM49BAMCA0kAMEYCIQCKMvSG3LUNthJYfcl93+GbGvLNldo6Qcc60WcBuY5FvgIh\nAIDvu80EGqYvcUn74n5S10pTOsDJNLRipPPQoMepPeO0\n-----END CERTIFICATE-----\n\n\nCMPVEPIDPROD EK Platform Public Key\n===================================\n-----BEGIN CERTIFICATE-----\nMIID3jCCA4SgAwIBAgIUZqPOgb6Fz4HkCYS4cY4AWWHfg0swCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTkx\nMDExMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnTELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNzA1BgNVBAsMLlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENNUF9W\nX0VQSURfUFJPRCBwaWQ6MTQxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcq\nhkjOPQIBBggqhkjOPQMBBwNCAAQ9neK8IMs5NI0+ZEZ0EvttzM0ekPGeWwJxzLzG\nS34hmhc+q9tlEqNs3bijktSy/mC0QeZU+GMD8qYAIRjkXneVo4IBtDCCAbAwHwYD\nVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFHhqN19NVLMU\nVFHUvpN2D3QkJP54MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG\nMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHgGA1UdIAEB/wRuMGwwagYKKoZIhvhNAQUC\nATBcMFoGCCsGAQUFBwIBFk5odHRwczovL3RydXN0ZWRzZXJ2aWNlcy5pbnRlbC5j\nb20vY29udGVudC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYw\nZAYIKwYBBQUHAQEEWDBWMFQGCCsGAQUFBzAChkhodHRwczovL3RydXN0ZWRzZXJ2\naWNlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tl\neS5jZXIwVQYDVR0fBE4wTDBKoEigRoZEaHR0cHM6Ly90cnVzdGVkc2VydmljZXMu\naW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYI\nKoZIzj0EAwIDSAAwRQIhAPr/fdeTCoVIPz8lL/tciWI/RBlFF2kSRMt7Ug/QicIe\nAiBFSWsm9yySkuTMbl02+epNubtWHQajtdUw1e0mlkkqoQ==\n-----END CERTIFICATE-----\n\n\nCNLEPIDLPB1PROD EK Platform Public Key\n======================================\n-----BEGIN CERTIFICATE-----\nMIIDyDCCA2+gAwIBAgIUTbSNk7/j6+rpa3ruoB5Ztu1x7KkwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcx\nMDIzMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBoDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xOjA4BgNVBAsMMVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F\nUElEX0xQX0IxX1BST0QgcGlkOjYxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTAT\nBgcqhkjOPQIBBggqhkjOPQMBBwNCAASvNtcFYyHUv4dJOmSsJe6Ld96fdiK5R3s5\nwkFN/q89JyFI4GufLTvvFXkVDsGs+ttNrDGzQbeYRnEBcdlzBo1Ro4IBnDCCAZgw\nHwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFCM2Do4Y\nmU2r6RxCR8s7gm7YCJILMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD\nAgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhN\nAQUCATBUMFIGCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv\nbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsG\nAQUFBwEBBFAwTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNv\nbS9jb250ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8E\nRjBEMEKgQKA+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JM\nL2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgOoyT3aM2\nKOecmnycl1gmrQGAgzZbCx9dZQxIsVJLmxMCIFnIlM1RJhaogvrAc+8fqUuVUmDy\n7c3XLnqZ2iGys4KB\n-----END CERTIFICATE-----\n\n\nCNLEPIDPOSTB1LPPROD2 EK Platform Public Key\n===========================================\n-----BEGIN CERTIFICATE-----\nMIID0TCCA3igAwIBAgIUC1r2BxSKTnCjf+IE/EUFMplADIUwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcx\nMTE0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBpjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xQDA+BgNVBAsMN1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F\nUElEX1BPU1RfQjFMUF9QUk9EXzIgcGlkOjkxFjAUBgNVBAMMDXd3dy5pbnRlbC5j\nb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASZYf1VqIEVg2HPaCvFOxHvXKEK\nXxIm9S0FTDHCcNxVr+O4XstUP5Py2qU8sCbsvzPhYiJx/vTs2TBU+9LJtFoUo4IB\nnzCCAZswHwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYE\nFBegBXXQXljjiBIQu5ixBFu0wwY5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0P\nAQH/BAQDAgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHEGA1UdIAEB/wRnMGUwYwYK\nKoZIhvhNAQUCATBVMFMGCCsGAQUFBwIBFkdodHRwczovL3VwZ3JhZGVzLmludGVs\nLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBk\nZjBdBggrBgEFBQcBAQRRME8wTQYIKwYBBQUHMAKGQWh0dHBzOi8vdXBncmFkZXMu\naW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2Vy\nME4GA1UdHwRHMEUwQ6BBoD+GPWh0dHBzOi8vdXBncmFkZXMuaW50ZWwuY29tL2Nv\nbnRlbnQvQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAw\nRAIgXsUtnUUfU90GerQubnLQ/NSRrAkjUKjHiphIdgzNRpcCIEJ7yKGSsVDkE++Z\ncJigMhp/OGd+UI8GtBRnPe0RiNyR\n-----END CERTIFICATE-----\n\n\nCNLEPIDPOSTB1LPPROD EK Platform Public Key\n==========================================\n-----BEGIN CERTIFICATE-----\nMIIDzDCCA3OgAwIBAgIUI7MycK2I3XPBTYo4V78C5VKvQ9gwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcx\nMDI1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBpDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xPjA8BgNVBAsMNVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F\nUElEX1BPU1RfQjFMUF9QUk9EIHBpZDo2MRYwFAYDVQQDDA13d3cuaW50ZWwuY29t\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKJo/Rz9gEbTHZRlf1rFUmWh4vkhY\n6YdWx29rRdiAKBo9GWtaAqysXZJS8l3UE3C20I3uR3q0sLBsMRBP5nt+BqOCAZww\nggGYMB8GA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBQU\nGXumXWM7W3FzRF3uGruj7z1gXTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB\n/wQEAwIBBjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqG\nSIb4TQEFAgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNv\nbS9jb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBc\nBggrBgEFBQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRl\nbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYD\nVR0fBEYwRDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50\nL0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0cAMEQCIEiL\nqfQE1ISepbRb4/1amUkZILNm5JQc1ssyzRa0qB8mAiAGocAQVjAF2uLo6tCSUrof\nZo+PQtRTQ849fA4Ok8HWcA==\n-----END CERTIFICATE-----\n\n\nCNLEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDyDCCA26gAwIBAgIUHroxX5HAoxWX+7O/H+VOxwBdRGwwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTYx\nMjA1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xOTA3BgNVBAsMMFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENOTF9F\nUElEX1BST0QgIHBpZDozMjc3NDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMG\nByqGSM49AgEGCCqGSM49AwEHA0IABCIM11xTzlVED9XOuSi1yLjWDk4XcAFJTi4b\nK84RsM5yDXygW0RyutWunVGYFgWcbmhtdZd/FMTeUFHTrETpI0ajggGcMIIBmDAf\nBgNVHSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQULTzs/mWU\ngpcZ1lVrYAVB50n8Y1swEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMC\nAQYwEwYDVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0B\nBQIBMFQwUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29u\ndGVudC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYB\nBQUHAQEEUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29t\nL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRG\nMEQwQqBAoD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwv\nZWtjZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNIADBFAiEA+07aI19y\nRxzeCkhZirRjkYFRcCfiuchnlt8tobXycekCIBfdj8hqroYXETn8hzq64Wn/t9tx\n917kHW8lBxE3lbzl\n-----END CERTIFICATE-----\n\n\nCloverviewEPIDPROD EK Platform Public Key\n=========================================\n-----BEGIN CERTIFICATE-----\nMIIDwzCCA2qgAwIBAgIUZ4oCAoWl3AhuVgPUXJbkaZ55W+owCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nMzEyMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIENsb3Zl\ncnZpZXdfRVBJRF9QUk9EMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEYjYfgF37t9HFczTzesvwKGh1+biqUE7UAD89GXb5\njgCEXqS7mQKPkGAzeR6wBSNgQjEBosn1JgcrBBPrnZj5HqOCAZwwggGYMB8GA1Ud\nIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBRJlMEp8aVI1IhY\nbyKi34YDc5s70zASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT\nBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEw\nVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50\nL0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcB\nAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29u\ndGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBC\noECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2Nl\ncnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0cAMEQCIB8Mx7/ClbTKy8IU\nUZ/waaekl6Y4aAz/pQZX1sEqhcSCAiBmO5wSipqHOj66P3VMrrDC+VQOAkKRKcn4\n/mbEsFXpRA==\n-----END CERTIFICATE-----\n\n\nDNVEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDvDCCA2OgAwIBAgIUeXOWB5FJbPbe+/Hs+POfNMKKcNcwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTYw\nMTIwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEROVl9F\nUElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAARAJiJHEDHXQppRQJBvJyqycjHV201mVYIxCFD9u9ulqNJrWBTv\n1TGPMHESl7T2foiDJdlsfR2vI3OZGbzfmo7eo4IBnDCCAZgwHwYDVR0jBBgwFoAU\n6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFLuYBeMZp42676iItFYVlXIF\nF5GBMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB\n/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG\nAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr\nY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM\nBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo\ndHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q\nbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgah8QuU+rWzNfp52vfywQF+J+\nO/6rnzjbPMQYONUDEIgCIEbDzUQn14z4JlymYCaDT4mnzR97kzEBoO8VoI0WTknK\n-----END CERTIFICATE-----\n\n\nEKRootPublicKey\n===============\n-----BEGIN CERTIFICATE-----\nMIICdzCCAh6gAwIBAgIUB+dPf7a3IyJGO923z34oQLRP7pwwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nMTE1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBhzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xITAfBgNVBAsMGFRQTSBFSyByb290IGNlcnQgc2lnbmluZzEWMBQG\nA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJR9\ngVEsjUrMb+E/dl19ywJsKZDnghmwVyG16dAfQ0Pftp1bjhtPEGEguvbLGRRopKWH\nVscAOlTFnvCHq+6/9/SjZjBkMB8GA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtb\nuncPMB0GA1UdDgQWBBToUgXCT9jS1aUhRxa2zgx7W7p3DzASBgNVHRMBAf8ECDAG\nAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAgNHADBEAiAldFScWQ6L\nPQgW/YT+2GILcATEA2TgzASaCrG+AzL6FgIgLH8ABRzm028hRYR/JZVGkHiomzYX\nVILmTjHwSL7uZBU=\n-----END CERTIFICATE-----\n\n\nEUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWhkCVHhqXAZpQAAAAABaDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgzMDIxMjgwMFoXDTI5MTIzMTIxMjgwMFowQTE/MD0GA1UEAxM2RVVT\nLUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG\nQzRDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4b2fVSWFeXjREUf7\nMBIO6f56is9utoucFSNUpCNN/K3X+iGZQWoi58cXm6rK/6WmYgs/t2ehTo6u/wFW\n+IfKF8lAxfnny038x7DOu9z4KFldSbQGXK8fqqMqH5zqBT742uNYqFrMpG9fxZbL\n3OeuZP2NIrJKNzpU8ZFxA64ByRrdbwhe67AJxUjJgG2omnrSGiplHCdzjsJ/Dfvv\n9FIFvG0A+tlS7eACr+AQKVHSPro5NQ90+XKELZ4RTpXVVc0bBMdATUG5b5CVJ4yE\n5d3EAu/XhLJY7XlieZZHNd2I17V5ymU8a9RA/HO/X3/1CimQVdnEYuCkfqNgT2+b\n4F8e+QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUKFK5R4UknKp2kMAX476nrUUrDfgwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBwTrLJ\nBMzzL+R0soMDJrCWhNQPQ4E6Mf6xKlNjdI/OiieFG/RLlv9C/MQZp+Juuyu8gAsV\nISLMKXDw9Msbr7/sZyviIIG5i5PzJLDAdJE468VwDY69fBE26BZCi30dguA0lqCY\nojlmk/m7poqnJAFj/G6+9S+IXYlMxi/8cFLMqtDRD51E2PyRIDvbjl8XPkGnkvsA\nl1tmUsqyDLk+Ng7rw4WF7BBVYfBDs0EUrxzSZipEXipyGiBk8nJWN4+BVqjSJsjM\nm5/gMnqcyY9kQjczA6E2lZVDCBKqZsys7WC9DBPqX3Vcni1QLX0RKWUWrylraJUx\n87xOFzM3fFIkLUpFvMvq+2jTXLzPXjiJiyzpk3mYpMXqwOVqOcAfPKfKBdGhxhgh\nD7I2of/Hi0mQ6ira3kv8DbnlTs5MoE0mwY9+aKK6tzN8zcvNIpIwdPZfefmjxwgu\n9jUokIizbuowv3bXp2PIYc8AH8i1vUfaOlzDZjtU39W4B0HEhy2EJCNBjUz5/ne8\nJpokFaZTU64PFABhbk1g6uoYqOmt77zMw5LRYtWssqk+9+HsClW/8Os9FPPHpTnj\nbPtJCxrthVDD5+QWXycqGlasi4ipiuGsONjMN8Dd4/r4lVEJLWdlZ3e7t4lHP4hE\nOeaSBIBBHa8/3mpvaqb3VzmlKed+3pU06AlBmw==\n-----END CERTIFICATE-----\n\n\nEUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAlEoQg1LONsbAQAAAAACUTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzNFoXDTI1MDMyMTIwMjkzNFowQTE/MD0GA1UEAxM2RVVT\nLUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG\nQzRDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyyvmjfcX5CmLjn8V\niDmaFYkc5lREOVML6sKozgirRGwROjYxNSduvU2beXQRlcNP7jCJOQm3o850OGL2\nkJIiN0GjEob4DDPnKG4XQyqW0SyjFHoYAYKNawVqGD54hoXy4yFQOJkGmBI0XCsE\nlj/Euy3hqYp9PsrJIEYj0uabmIDNrFstQ0zSDssXxUNCJXITZAeXZpPlw7VBFXWY\nefrOJ8Lh88dud0bklypLZoiohzYIkQJKUvGGj6LBpFQkJc3rhXDM8AbRbqd8HmTF\n3DVVgAIL4vIunMoWTCflR3A0lxe+Moa6BXS27J4CSLH6XD7Uk6Q0/XJj1hBFXFWx\ncr4XSV2i1QKT6lQs8gw5St67Lt7W9heptqYXkw6qcsRQCszxJyY+7kfpvYPwmLNK\nuqCybrN7RgwMN6g4s7wlIiOWFgJDofZop9uc1KeJFXtMyKVZN0V5AkTEgR6fWBvt\ndJOPxB+IMPO+PiTAoXexOGXrbWAeosoJlFs51yr5LOkA6eZMTRexSNzslZAvDwdd\nCriR5LbHnjbQnNZVBmVXLbi69CUQleG9pMG04UFPJUNoAAPcEiQENKYhg+Fe6p30\nU7VzGNIYt41n9t/+WFu54f+3WqAZqR5OJEhhVLucgzaNxLVxddieUSI6eaJ5u0FK\nlbl5XKKRGpV297+ux8KKHLq4sKMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNNp4qXdGCH3pCMw\ntFakl+9AYRXFMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJ5lAfQZ6zIOcOrEYdp7A7iGx38WMkkjP1CEjrwH/IivH\nmT9IiPjW4PdNTzDPrhGeq9oHbBG1RE4+sW2K6pp+2EXrm13chQhiArtE7EQU9C5Y\npaEPdfG5b869biZVkjhyeJC1ptbv7GW1dqaeMxMZ3vqblWA1nYrsUD+m8i/05lEW\nk6CXl1M6Lf/S8LMBgMe7LbLNr78+1AEVTkjiTpLL05wHbHDaEcndvoad/X+05U8T\nJK05NmVa37Rl7R3HxwsMS9ZUbbeRalEVRp5fTOfUBzU/4JEgKyQDyCg+mgVUEIV9\nTJXqcgrgHsCHlaYWyT6kM6juhYbzWRPTHMEnrqCOR3vzzQzXtPR6QI20uE4GHQgY\n3K77PR2k//7tlz3LuHhIqd7z4toTFrRs5R/rzyCDQ/LTWzKkKKT/daqPDTiWOELd\nemBNAFkAy7rd96Si334vF3V33t68K7yOviQJdjSE6Xtous0Q24LfMfLMK8yoMe0e\nyhRTME+lsdzBB2j5C0aGBz3xkTYeJcfMvcFxqLfLpiGt4oL5G5ZNyxNZzfj9S7Ci\nMUL72sztTUzo/O+4nB3EsKQk9xcpXDN07P7LeXl7Tbmpzw1w469cdXhGUlLbg20M\nj9dpz7IeE+6vjczsi9Bf2Jber+R3tj/MOT6fUt4vhDOnzxgJ6qs6IsmajMJW7F4=\n-----END CERTIFICATE-----\n\n\nEUS AMD KeyId 578C545F796951421221A4A578ACDB5F682F89C8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAFZ4FBI2r3n/cwAAAAAAVjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEzM1oXDTMwMDIxODIxMTEzM1owQTE/MD0GA1UEAxM2RVVT\nLUFNRC1LZXlJZC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4\nOUM4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoJRE6Jg2ABZLY8A0\no+iKAvqaMzcWKYS8hBzyZYrSCggDNZKs7M8FvbPF+6LlsYkKGlolTvD03+yZwIdP\nNgLq8CAJnoa/ezHZrdm7fmxJVrpzF3UjYh6AGVvJwV51HPXfMzHS9Val8N7Y0h2j\nYmi8Myvo5lUSKMX9/hqHQyk/5T7YfJZaOHz+QGK6W/0doVPVKr6dokrt5ZlpTxWD\nIJ1jh4DQhclxdc6VIFvtaXL87yCb60rXlwqylU0bfcaPNRYXZXNQRssikRwDSTLz\nzXNctG2Ui70nNbOkNM24b1Xpf2XLbU4d2EgTAkAgUAo+PEnNsQAOLp5PcJwkBgkv\nQ2FVQwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUnSq/EMxVcExBgWKBjoPE16Wo2z8wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA0XziO\nqkXigBCZ8NE5Way1fm8L8XtylnEUKXMUH3iyCb6R0BxNXJuT9Y+6MPp4fQufppNi\nPTYxBjaWomtXoxKOEmmqrFbAYjcsXzf6CXgjR8K7fGmFdxtBajp82LDLyLgqkYXt\njgipfjzJWa15hCcLr1qF4vooWK6WO4dfvGN76MhD1d3BaYjCv6QMCW5rghyrHMud\n8ggtIfyCytAFIu0jc0fhXy/qGbbSYY1jWWkGh4Nk313a7wiLl8CDeMNStk/kfGpm\ntDHb41ILNXDDL4B6wqS6teZLMNIZnYsFHONNgFSQ/690/cQki/vsP5pDbNL0Bw2I\nGbKeo7n0wBiwLavk5LbHz6CDBqe3HSquc2bqdRQme1gIm669ikdK/De5SXwLJECL\nDvhzyy5G3YksW5SF1QqTwvUvVT4V7Xid00FtENpP2iZscZAmc2ViECvqUpQzcEBh\nJiBOlKh4HTxX0o6mcfTAUMGay6H0NwXEpZK2SRO2ia0QUCDwa+vrarMspga6T/6x\ne7VFjj5CuLivoeMnqqyg35Uk29SiBMR7lHPZZFwXh0/rlcyButw0vo/T03omRQii\n3Li85y/cVg19Tdxva2M3YqObeshtyxGRbjKiAqyOu/IhZDz1+jc7Q+0Nv8p34Zji\nM82r845KWUzZIrUeCpbxe6nk2rib3I23rgVisA==\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 16B341E381CD5C3E799AC838CA17F1F7F3F7431E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlPun/3oGq3sHQAAAAACUzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzNVoXDTI1MDMyMTIwMjkzNVowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtMTZCMzQxRTM4MUNENUMzRTc5OUFDODM4Q0ExN0YxRjdGM0Y3\nNDMxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMQlMuijD4cuFikM\nhbiO7Kk+WkTuVpOmKlFfe+VhcwdAMEKjg+gT+udRlId1CeMKW9hH+nqX/6/zXQra\nPKOl04w+WWCphHyw5EfysKhnk4HaHxgLB8KM43sIUZYMY7H7C/SlSr+PK3c+c7Bs\nLpKwWUWKzAJk/sbRn03XjskJDp76TPV4+ftItx0nUHIl8EV6AGyC2+oi0XVI4Q1q\nKlmRM+ZWId2AT5Ii6i6wjEW52yJHgppKISwybyiCHdq5zj8XGOt0FZxo/ahkGhyJ\nuWhilvosyyspj7PliDqU0WxguHfK7zDOuELOZFWU665iYNzc/SLrbKTkDd3iCv2p\nPN2+ZcLjTVQQqI6BDwCsIP+5lkfD7h1lxW2sgt9pqsy1l8Gj/V7RXSvPxR2tlRCC\nHkrpPwRj9nj4sdSNXPVUhHtj8FxIl0fBY/DgzLfnRKVV7ioh6bnKOVSdJ0jKt6UQ\n/GazAhJNdSr9V2Sdh8JYp4IUWVwdMIBAO+ORdw5jKsEudSTNc3dMQ6wnSQmhwC97\nGnw0GGJdgHU0w9rL6J/g8IctIL0CGPY1GwGxuKgu6O5sTWRHv4yVmNRifkuw57/c\novIM2ckGfVBjADpprWww+tYBJrCy8/hvWbReOkl5MbVIQbwc0PxE5NI6JmGlN4QH\nQ8NrcQf4/rXSnHqs16iHS2/Yi4LZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSXSNLWZuAc+TOF\nPfDxKg0hNvU8uzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEL+6sq2ypnyucF3Cl4evYB4UbNFXsjGy9BxzDhyJONA\nqbPtpztcY/0TXMibuScODkzh0whlqYCHGfEWDUu9WIzuXfWTsc5zfYL/GV7Dd/u1\n5yoGzQHvm3uY96XdXntHyFmrn+cY4CoVbZtBXdRM72g5fR+tU4/MpKJYOGJ2DQ8e\n9gjyiDr9+sXD/GMwUIiwwAE162dWsL9HRX40pgU3tFp8gCVRhrXZInjGwKGvNHYb\n0D80f0tFUxE1LiUTaQ5dVxBxwNLIjQv7a23Mr9CRmSP6BWYeoTnf613U4YEM+HBq\nuzJdQ4nBuWqtKbDpMSyMLX7yqDe0eBEXASoyeFKajhaN0xun8Ic0QAXVgJG8mk3+\nOkywn6Ixh+1waLFYc55Y/O9VKLMg9gOe7LjI0kQaCQfpmNzqTJ0ZUfjza0imt8GN\n0DXJANNdFBGxLGt0Xv3y2iWlogSaW1Wj1PAavFcD53snXwYkMopEoTFCipuM5pKC\nKzpAPvJUiOWdvEpbl+T8kxcOj5220hORmBt9JrjuRfWgJRDbW9BsrBhdgbYM4AAx\nWfMnZJ2zSGWXqMNaVYnBj0suyx+WGi+Fbhwh00/LScM8x7zvkskki99WDMrmn4OY\n4XzNi5dVE4Xme4UQVp4aDQHKXVNT+6Hf/OPC3VPc0DPQ37GnXQ4J1bjsQ3JzmAnd\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 277631D059FA7A9553FB59DFD6E85BC122300FF0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlj0RobHZjv56QAAAAACWDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0MVoXDTI1MDMyMTIwMjk0MVowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtMjc3NjMxRDA1OUZBN0E5NTUzRkI1OURGRDZFODVCQzEyMjMw\nMEZGMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALgXu21ePkSPO49d\nKWgr8ppJJ2MwGTTNyRsrI0WIYGpzFTN/vXpKwZ/kK9r9GZq8Gkrxs/+yG9waWHpA\nL+44QniJPZVJJsCQ0xnP5TZ0toBI/095Q322VorHsnOPM77+hqCcEkyE7zl64rVG\npWZ5Y1WM1xXWQF6M1mMSWWQos1gH7dQX5w2vdvJetKTPYXvzjm3QM76oZ14M2tCi\nAn0O6FGUfZj8GeMPbnhVMotSfYDGVZsyA9FgBvv/veoecLBuNocL+J/NrE/h4PWa\n5LSvaWD1Tp3f3g+XKxk9JtjWoIN844o2mtadpJmsJG2HRdKHetPPx1gJDsz20mFS\nPnFrKxqirT7wYOuFbkw7me7LN9OEs80FPDjY3Jtr/Hwk1pV2HeVeUUmpNKeBUvGZ\nxjJLpeCdI1T6kTDqvgbH4/nOOGoef3WeH+xOJYZKZr1YdiLhLmU0ZkjlpqaaWhxb\nEMPpj8dlqPzu6nyAt2zkXI+B3MJ7nYfXKFd77jsx4+4R1RB1t9mGvhwbpA6IgNf9\nDb6IhnMxiZCMVEiYUuPyIsxfo/5pMa2/Oyw9bKdDoXFRZbrPgM7T1oiVp1UI+xdi\nU7/KiSqB8iGxwOGAajSDMI0pIvEhtBOBoAd+9lLN2FT0dgE6LJmZxaEAV405J7YL\ng+RtqQ0rrTF1p4OI4+Aniz+q8htnAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQsURuJ2FxqGGoh\nwLcYAEnmWI6BXTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEZ7m7pzQ9/JoFHRJK5oOoCL48rXhvq/wZjS6QVEiu/M\nBKrMVVVHK7V1m1LD2KMScXhRlQlVZDGRmxXhFizScblWok9lFGeWnXuZcoEgIUZx\npuw+wW+mA4dyKtuAZHLvVUFiHA/mPFjh+3q7djnVaK6YDdHr9OtEWyMJ/1MsAv+i\naqpAWMf6rVdifQ/Pdlc2sK7FSZcZIuD4QN/Y1mXpaSsNJDclzQjQsAAnfbL207RI\nTauNBj4QtbR/kyi7TwaRz23QJLhxg86jmH5nQJUve+v9S/jpDvN/dq90BpVpoXGl\n2+qVoAqDEzyk0LuwbIur11WQQfVHGuusdA1oWHtJ1P/gLVNhqNhSlSoIaLySZ09S\n0PLXNIxmmOqBKgvJfr3oz0ly/4GHwMIYKBU3OmN6Q+8i6fL/UpO2bq3euTbRHddz\nOf7kc481M3bgFuSCkjhnzPWcO9QOkSH4mzWNblfxJoBb+FmxTt2DQiB8zt0ducy4\nhE3gfsmYyj/SBxF7Ui7O9lKa9wQKUm6qbkufnlH5CPcGvD0lW/2qdY8JHslfJSa9\nHY4GONcs7YmLaV/JRJT9+XR0XQ9fMkwnxobqzSz7YHVSiXIQBRzAuiTZUjvFqo4N\n+/6CJLqIRVgUpWkc8CYROu/oe4u1+VccVTmvK/Zr4qZl8ZkLgznLHqVts+00oq9b\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 2D605CD882B2BD716CCE71C90BC774D3D5BCB1D4 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlIQhEc8mPS27AAAAAACUjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzNVoXDTI1MDMyMTIwMjkzNVowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtMkQ2MDVDRDg4MkIyQkQ3MTZDQ0U3MUM5MEJDNzc0RDNENUJD\nQjFENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKJ4CpXBUvk+lFRW\nd1sUKv7fC5fHo4SjwsgC5RCUjlK/q6RANm8CKlzjgkXbKBgkL7/QQUBs71dvUx9O\nPuDoz44R5JjLshXlSppqatQcvbFJqWKaU93dRTXW6Bd61y1ealYfqN146o/DQbwH\npJyGGAOaRSB5KYjB2GJqfW0B39UOpMIAIQWtfjuZzSh8i++VlpsuRgGEminvFmOa\ntOVznCBwg2P7bXoLRFlaGInHPLvVIzqOuBkv745E/MX9b9Vq7PNrrsjSje4aVLyM\nuL3MCKw/WwqPMu1HrQ4s7OeHJA68FhH+1/QYBowreXIPwt0qwhGF9cz95nnwDjRa\nzk3VSMWY5jaMVanW9Qvx63FOkKHTDDsbPHDdtyLFDBrSl9zFlQ69Fr5gkbc+uFBr\nYxZb+LOjgs3M6H2BnsC2Zj0CUu7rhXFzvT/dgWqyGSDr0ULI515jFZMwJac2Ux1c\nXKaRJPuQDlA4t23wJ0gsp7PZrowHT8JfGhJPm6pVwglFtjnoCqf+Ls8zpwKmOwCg\n4osiQ5P2jbwXVRkAYRApAuC1W3hBW0q7KFMAAPHhmcrpIhgphybBgFQrFkB0/vAD\nz2hEo3Eibpfmxs5wIRRdr/F5Ug6XubVf5k+Vd8dxaVImKnRlB/wb0oLquXw08paR\nyI5GURh982h9EfN9TK+LQJkA1gntAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRFL9sGscp2CsBl\nptPZ+FEj6ec+NzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAIJVUJtdWJ0cUnUeEMZMT768aloAhO8p352fZ+yp6mj5\nn2jfX3kZWvXCStuHiNq0Jtxd3IoJIFmyqx+TigSGywGyZeP1qh8HM3yGyd2hA+gn\nXQIM7fdbbJRJLz+As09xk7SmBDxQnUVEQ9uKaJ1CDHRgn5yUvOxw5XVFiClaRilj\nZf6g1njdR9wCuWmSuHqHa3UJEQltS9Q2npDMYI6Ug86OBSn+myX2XlBzMdIWCPGc\nbkOs9k/Hvc8hNg6KNROoqU2VsbXhe4av0k7quri20dqBTpA3hkgqp2TVw18DDjr0\nfQd+7a5O/gdcML8wLU7HkPP94zuADEGx7/2/AACDxkn92Rs2qs8VMji03hE4Xkgs\nJKfCoIobEaX2znzn+8Qr/GSl91O9YlZNHTQC+HdD+NWHvzHtl4NELD3J92G0cP7A\nXhfzrOfFlX053vRhiFrG08Jwi5urj7yK+BgSZ8WecgyGRrccNXKGaCvAp8MzcfKo\nPYkWCuKse/kPrqzmzHZ6+V3jmDlHuvQd8jT9NMUMAl9Afe1ELZaKcRDYrJhcPzaD\nSkYg8KuSJqo9zinlHGYA6hStRXmta3ud0/xAiLckVikqe/rKCGXNmnYSbF+1wNkn\n5q2FXPbhox/AE78ZbcbSx59+r8pqiWiZHbp8q4RYyM8Iy0rAv5xcroIDq9yWksMM\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 35AEE736C9B4D2861309E7815C0FA4CE40D865F6 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlQam3oKt2IfRQAAAAACVDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzNloXDTI1MDMyMTIwMjkzNlowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtMzVBRUU3MzZDOUI0RDI4NjEzMDlFNzgxNUMwRkE0Q0U0MEQ4\nNjVGNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM5kvEGZXlL5weKM\n848Vdj4w9tTNOGm7nu/Ec+Y1yK8pKWHkQ/I8E9duOH0+LWSB42Yj/x8cBLIcd+2r\nt6X7vH81XU4ShVwMJHrAaNAMPKeu4zdzWx32r9bSCSFih+n+xJ42fNSQr8ouYKCn\nD+dDwrgqqIs0FNUDx5UKQ2144NVBDQrlBRsX26roIi/ld7fFNVojB924plIGM7so\npy7q+FqlObjGWrC+bpspxr0G00aqSrnYEMTgOeP6NxorXjwZnQJi/U7tZZPqQIU4\np4pce/xLK997EBvf9e5SaUAJudBZVMjS5/dsePfNGqiar3a1ifFnm3QSSvbELV0M\nM9a+RA+oKVlY0O4pCCJ8gmE8N2x9DUog1Y1autdzNTJPhxBgrFUQx/c91mxxjw6Z\nQPUPBWxsH9Hi6Eisza4cXag33auzGs2v19ledRpQ9LARlwRatgSbP0lCFXBA9mmL\nWX7e2WIKd02FyrdzEuZjzpXmqsdPAd3RmLiHP3L1yuQln4h7hNbcpwnzSO9bKQzu\nhwdVnJXbj64sYh3zDQ6FsaV/NiMAgQ6jjqmc17uaCMxm9InSya42jVRjRl1C80C+\nMOkx89dD04GNRsyTEGrmR7Q5DzQn1URoJcvq6dYO1+nC4+6hHcQ718n+oUhfMQuP\ntGpoIX3gr5wHFsbM1ddaqJn9lRO9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBScAUtJ8FtbVm7p\nQE2uFIwSb0K9pjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAF9FdT5ONLsNbIlB/oED1Fl+YIxtSAo5s1rWnxJ4ztqV\nanU7V1BnIp9YaJT6jpf2ozFNcu4+bl0PDv5jP1mB/pEyPl7S60V4s4HBy2mH9XHf\nE0bVN20OhHDBnzaI4u5DJaKZ3mqYIaDroDNZs71BWOdT7vyfBu8SecUG0ZLpJNWs\nTbm6mIRxSKQs85xqPsVmBok2iDV9H4aLvx9b13e05wPD7YeH96SKi/3snjsnSII2\nuT4wRu4iDKmlMghYPO0/zrMxbAqS1vGwr5YzZqIDjKX+cbcgxVDMKuG/miGgSkqj\nikhngnuyVkrnZLiqUoYGtbtU9yYFbTwOcsYUYSqPP6qbKvKtCpN08rc7Kmvmu6R/\nu8HKnzPtxMP7TmdMTY91xwUdNCVSN4th/6H/jYeT9k6wH0YQ9RtaFU/KwqhtKRQU\n6RNFH8bHifPeaFMB3+jBeiLE43cAQOKT8DfnygFkN0eDkQWkecvi6CmKkTyuAcGP\nUPEE+4XVb0ybXI7Qewls1ENH6ZJhUFMk21SNrHJMZsbFVuUr/ybEmf7WcEI5caev\nUA+cCPMSXOFqxDbpR6nEuQmHGMt/y5fAN5QlQRYZKawh9hzqXaUibpA7KVTafFUy\nL2ToXGpESzH5ADJe7dAOvuD+XyeJaA/5CGD8StBjilz+XJrsLJ7KXFKBcm+XUsg3\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 4666DE766204E74DD29BB4FDC58523A1403D6A32 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAle1vdoUCKmKrQAAAAACVzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzOVoXDTI1MDMyMTIwMjkzOVowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtNDY2NkRFNzY2MjA0RTc0REQyOUJCNEZEQzU4NTIzQTE0MDNE\nNkEzMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALHcyMaqEXJ4aFo4\nVId0Qj0qfNdUOLhcpOz4B76amFJ6l9r86B4Ap7QX9OOSwuY+Myy8hp0MWl2YWSE/\nazNyp9BVYt82BnMRW44Pm1xbuX2Hmlc/JFbiBXj4BMg1D3ipIasPWtiZZxeYBVLX\ncn+lCW7u18V6mMDxnxKY7c3ixE1gnJ5NrXCh9u/O3QqTsfiyJr+BcvF+0OUIxMi0\nEEraVxb89Ij72eqrZ9NzYgeGcrDVF3JSEftoshL/mXawCa3C82ctTc8inro2t7iM\nocvmhTv4hQoiYOM4+f2hoTSWBEUxqvwIlreudCXRCa1Hi06K9NoCJgi8iA8gTMh4\nYYYdywc7r779tilwVdau4PZNyWBzAZBek+YgSdQe58Z9+ohodKsnM2JPK2LCICRd\nLxv+Nq6pkmyNlIvh6pKeJUsUSbv9uGQPbnlC7CGft3dDhVSG+BUeDcxfS4tjTesU\n1uAyXJXHbvzzaxBXF7kp5haMz5ykgkRE4J3sRCzvxme3/GQALmluUJ9wY0+bA2q3\nYz9iBKnK+Vs7NaPYNVz/slXShLMCAJzwQyOxTVZQcATRnJHpNoFL8QsJFgXvptec\nS0nj95dL0+LHV0eLPQWLqRcxbJe0KY1T96wKQevJS/ShbBb8nidbbtG64QEiqqMx\n69SglZnviKUbEUm90xD9MldRJ2olAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSKWX3Jh+vKZkHX\nonJDbK7sUu4QEjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAIaLvEpPmJ/98Jxgk4PWcAUPXViJhpqJGYPgzc2h6kGT\n/hTAem/MnukSRjSpVx8LhO0WjcAPeBNJc1FTYCKI0pwWywWAoM82Gi2VG+GM3av6\n1tVLkA3IWtrPvbmT5G+vFTOffxrcb2PqKuVTDzeZHspJfcIKxC3yY5d/Yg72ixJx\nmPqpKhvgmWFRXnNnrFhHvCh3QwoRjV0IFV9xSKyTbcXdc6LmTV+LETsXXc49uAR5\n7IBvDtMoGgbDIGWR1J7MJhVabU7n78emK5otajqLjjaAsQVr6R7vGNPYRRntrXLC\nUGJUY459lrdvJZjA9ysBbOZWxV4O+VPvGIqrMdBK1tSegYW2AwAriEGAkVrqY/zI\nboRqlsqkkZp8BV5TfGc2r43cg7bYre95VIbM2KJK49nMPRMftBANH+19sCOmGDnQ\nGrhLovlA6U/66gIKqq5+aISM3C4QwZ5hoOr52K99dneTggKERd/i5MUPM978D0Wj\nriIdCYv6QXV2iOqq0U18UyZr5+GLAwbKQJkTx7qDqtQ8us8d7Y7017gN74prRYRz\nItK9WawfHmwpDMY9Vqz4rH+j95ayJKl0sF0rUYjcB+mpQTce+SeBG2CUEixCIXKk\nsSzvbmI1K+ur0CjM7/ILMEOi0n7fkK0FEptUmYCcrSZnzxXWClIuMKgX202OLybD\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 55F4DA39CA65B6681F2B7711BC3EF208A8679D1E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlVB4xMV592EuAAAAAACVTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzN1oXDTI1MDMyMTIwMjkzN1owQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtNTVGNERBMzlDQTY1QjY2ODFGMkI3NzExQkMzRUYyMDhBODY3\nOUQxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANsmxurXRFjjP5UI\nThu7au1Y+lWdKXsLN7XrVwkgRYg0nUkmBVTJ03hnq52wdvvGIvKdGEytJ8hRPNtH\n5smbdmxSS9q+HqOHbjm/3gDHo5tKdpgTM7MHoyJaTv7umL1+UDbv4XmJxJovEV+o\nDXou2eFnJkiDKJsCNUj2RxuhuqzWZHGDt6bI5tKozsepqn3E35PJcrx9RMcLyK/V\nIASb4SULQvZ2LOV488ID0WCL6XIxY47+ab3foHFszqJ3iHcTyDIIrkjHYRtkxWkk\nj1QKHviWyIeIatnHzQQ0gr4tBB/PvZoy3BMYLuzpOMuIj6nS5VNo99sRWvaMtGKW\nNERb8+yI6h0YzLRbYIZ3dxVkduiK1nBX1LkdUp8+yq3Py52gbyKc1eslbKm2kkym\nyBnW8o2wofcahcTILL+RKT4zS+dbFFYKvkDKCXsj9K6Qg8ytkc9Jf2UAIVNMvvqx\nF18B8INRV7//FcT8SgbHoXEvYrGkNuZ1OMRBVQJIQ9ou8yKIz7kWryk9KD/PDQm0\nsqKlFD3lIeK3qvhkDIqHHKg5lBPOcvLi3l73kajus1Z0k+87PqvZdnUemH4XZ/Yr\n84GpuidczCu515KvheTAhMhItFZB1f0PjZM2eA/2VVW1wtzoNYhjG7WI2Kgqo6Gx\nwgHW6LqOuheB42xC5BKVdaLMTLY9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRgxj3VGnKALHiv\nCQ0XzJNh9SFqzTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADX6IH4rt6iRD1Nf7xC56mY1tove/Rxme8OG/+0Edk+E\neMALD7TnAanfeZC76F+dy+O1/cwFPwRUNyJxBXBahhTDqBz23cKXW6orYPZc5VTS\nZ61lPobVB6cDNSqHKs8is9WGFTqHk5IoRn+qO6hHaV+/CdPrZ2O1NImmkcDJ+qjQ\nNe8p123PeIJ0JBuL0a8Hv758vy5+4UflAhEUT638HC5VoaZtQKvK38rK7MxoOmMp\nWfLm5XDW3pad7x/opvetelUQBX/2CLFH+/5QFrcqxI3amK/sE8Lbi/7X7k2st0WY\naiAcoEhiVqzqQWszEwyYXAA68Ra1LurzYU++4pbZ4mFmS4naVSLkEOkFMNYa3z7J\n6Caa2lWy5H//4z1Me2d6DhZINdQu0I7n1wOxY+CxnYXkdE8yYaRr+Z+a2aiurywn\nTKdSVyfrXnxQHvK5ZlO/h1cYnEHW3DW2RV3o19YHyd0SpWgH4wWRGkgkjCNbKYRA\n75om2CFwZXwbFM6Z82MEL9bCsDjCUMmqe7mSCQ3jsnci0i2WYgNU+2xJZlkoQ9Fi\n6J2+sC6LZjK/7cuys8/dK9kehvO44EnsMDx0Yp4tR6ZM0KOXQ1BStwsAP2TbAEtm\nGoDsdIrwhgMHQd3TUvi3gedrBpzT+5iEK/+JJCJt2IqJqtZ3bgb4apJL1KuaRU04\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID 81B5D99CBFAC98C5D61A8EBF26A86A086BFA3ECE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlaNRJm/QE9H+wAAAAACVjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzOFoXDTI1MDMyMTIwMjkzOFowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtODFCNUQ5OUNCRkFDOThDNUQ2MUE4RUJGMjZBODZBMDg2QkZB\nM0VDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAN1ccX60UUQtteAR\n7cHE+9isqoSwaYDGaD/hnFRv4CGh8oehBdmZ+AD5Dj35dmSNuqxVS6c1EuIi7Quz\nl52dSl8PXel8c6wfF66obgHYxBmwhLqzvjqosOCDXyE0a3/PhNLXNjWdOP9vFY4F\ncJS3Cf6Q+RvNi42qhHrEkmgIKPu6dR3fmtfh1FQzr1TMS6uqiAwDjMSjNFn6ANni\nUcodrpFqlaN0Etvj8AshowReKzFmX25HBduv59s96RXtU3g8BflllQtUJ0AaYk6C\nsgG9Ci2s2FR+dzt3T1gI3U9jiuiHSR2/5wDPN+ZGRPp5o1qYe0fUYO4MJ4z/iPeo\n/qu7SOSMuG6/zFpZNf37HAm6/iu9rwPyhfdMU1BL5QLLc8z6Z8VOlZHXGzWAie3H\nw1Ktdi/DP1qKUOsm5n7Jw3wlKsD3nnV/TBZwU+KyUr4dllkH6qDAeBT4orVWhN9Y\n9X+ZtpqMLJEDvsxKt9ZW1KbxrgIZAkK5ZLivraKz/L5fgh48NAmZe/NaVSqLd3ws\nvLSIv9U4pws7uniK6JTK2TWX6Xd1xEex/ra8ouuKLtB+OadUrZAhtAAAuVWT2qj5\ndY85KGEY2cHAhNDBapaS3StlWI67CYO7JMfzPvW/gMVOZzoIXy+XyvNyUAYObVmU\nXNyoGh6W/EukBDbJTXJMHMLlXevXAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRZL5YAw6zvM4yt\nZuwp4JOGzAmISzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADm6JRGaVIghH4sZeoWknLI9C8g6+tyrn1jmd08zwjKG\nFNoKo4o/cimEMb97VpKaAyOfsIXGQg7wUwxBuBwlc7EbrSIZBXj3KUSURcZTj14w\nkNGQ/xrdxlgBBZwepNWpZTRE1AaOHfaO6YexF67ZuDAh6cODyleK4dRwBjHBR0OR\ndxJUaIN//caNYGnoEAolcrqZ+Snc9yKEGNs34VxPd30GYFgzQOom88u2aivFBmFe\nt4pRg8kgy12/gGDGtQjNPjftL/TBE9vlpETCw2cFpKUZUX7Ole78b9/pMvWoL4oA\noiLUHnoyi65I76mXYgxt3qvrx/ZXCiRRnZ2uTFLgJPkBU3rcdcLDTMZC0uVh4+2B\nQL3oj68yKa3re0H51H8tX1aGGJPDjl/O6gfEYqwAb5RdGfIq/2GproXIkPQAfQ+G\nhUlAuIHjy2rRTBw9TodSpTzIC/hjFNxLLuhCdG8DZsBCj+Sk0U8ACLYnHkucf54i\n3HtGGdx6qrJEHGYzR72wGzupOCjgyjMTvF5sUw92MX5XlUMT5vTKkXnZH3R2aCG1\nG/DMGhdll94uyNs4OxMN4SjNnFb+lxSQrLAnytCwLwkhjBA9lBq8tpiwas3Yq8IJ\n/zaFQVNt+pJ3Oldx3cPnNLxivo6AgBmF6yVIS6BqUz1x1BSKCbel0mZJ/2LCrpKt\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID A0854BD197F8212FACBA38991BFDDBF5D13CE9CE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlnG1yZUqZIc8wAAAAACWTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0MloXDTI1MDMyMTIwMjk0MlowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtQTA4NTRCRDE5N0Y4MjEyRkFDQkEzODk5MUJGRERCRjVEMTND\nRTlDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJkhRYdCsaKSLJq3\nZGYjigq2BYvu/6eAOfm9CzHnOvdOB3ehpFCU2mdQ1xN9oZHDEXUhA+AjJLttvQsh\n7CfYsaJD51rxbOklLpi6RH7bExxWTJP+FcLyYzD/vQvOlgEhTPJ4Ke9VI7NBpDaR\niicKkLh7M/Z0vuZoQ2Ceu8RKOYgybuBShqC0NKZZpWi5Z/zMt6vwTwAw9uDyuzHs\nl1ZdUtkyrEuBOaz5d8V5URpAAGcGc/LAOUgKkYz6cNWZI+kcFoEjSA4ovA/FK8mb\n3AzUK7hea8K5TbBjnAA8GVNsUnLECZMdoboWSXqTXVISJKX/BD/g5DjShMnNLYg6\n7ENYT08KI7E3Xl74cUIgjM+7Fc6pMjhaCjLsVhMsXd/wX1zMSMWCjJnfYQVcu+uK\ndEGUdXaXD8ATvffIdNN79Y0ClWBRRO+xomOq7wb/wexy6Ey8kToPYM6MvXDFwl4n\nYYJLXL2+oH3CwUG4DKp39fdHzn/jJbW94UkM8GFVfEH5DdUVgXWj121GTym2xmt3\neW0z5+hzlHnDYIewLqsVQpVg02+5og8XhhpZFnI2emAgRQp+PKjCby/LYLHTCiR2\nEqYWrCx+/QnzB4INCz9e7aXNnPjJ2Cs8bPxEalLFQ5zOc01Crqfg9qbAbTrFaDJR\nwYKUOVG3drrDiXCRWiYxNu3ZQgFtAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTfG7r5WNnoL/0U\nhqtd2P0Po41bWDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADjdhcH6w1wBpbwZH8+8gYakANFavZg1A0vk582dw6xS\nwsV5YWhDJ/5LjnLQQMfxI98Z3R9dzt/hfWoM53fcBs/paJcggyi7GfkwLNThPNKC\nbQQC5kAuOenL37d0TzxC1SjyDx334t10gjxptVDUn/ah4hTYkvy0iYmOQ0ntilll\nPreUNpueV1HeD21h0PJt8kmpzpX9CO7SLw75krVhrmQo1hpUvGcWcFu4GmEH1UWl\nzanHwOoOOlSA6bAc8PxhI8M8IE2o+7PwIvFHo99doXfv36TpGU8/Da8r62gAa9l/\nUVTzRtD7OtAkOEScpLPhqAqNC6qqb4HogbbMZcFFpm1b/SYRAz8jn2azEIhRI9rn\nv+8F0VVN2Vtcl6dbGWzpXZ4h7ImmzBRf2vqJ3FDro8Si1LcJT4K8SERtxzfItAzB\nhkfN37TSYSsqskrErhGKTvGrnIXkD2qYZkdIT0TFYaPIZZSDnSELGJfZKFQwDhg+\n5Hm6rsm+bDFhF1I4j8neg9ykHmXDBwAfbrRt0/uOuYZq/3D+QexOgCnogHsJwTeQ\nchuvPW8I3rvcqNMPVoud8Wx4qxGgLyBHbEeleqeFiS1KObMdYbyTPavqezMZyKpU\nBqDXz+7PdITaFv5GULB6+p7VJ6X4kjEPKvQGB4DR7wk8M9Qrhk0Aq7imkbCm/9C2\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID CD3401AC6E1C6F93DDD869D46A518311B3747895 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlosVy8J4D8CJwAAAAACWjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0M1oXDTI1MDMyMTIwMjk0M1owQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtQ0QzNDAxQUM2RTFDNkY5M0RERDg2OUQ0NkE1MTgzMTFCMzc0\nNzg5NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANnS+i2lVuEFiJ+O\n8QiffeuPsVtffdjeRcNlCVTqna+2SSPRg1hQb7GLG2/oBFS5lle+FtAk91X0REHq\nGkf6FOWACN+LY1A5rhb9PGlvpv/u3epWLbDFF2dqi13OIpmRfxz0xSjsHwwc4TlH\n+SfTDstr11Tfha6JE/Oh39ESI8PiXNWPfKeGPXYtjG6UKqEbo6gedRMPeUKWn1v7\nxVuZwQzeGeG/06qFhXft4fuLuNpIRjwrfLOOX+NGsfmx4x1hovpi7AocniggXhk3\nXnjpCr9wSHGHWZFaXOW88plsW8CeMlTsabkN9OMiWTByE1LJK8N7mJ1w2f/7LjKZ\n467oo7nL/Os83qYEdEl++zP69bZCQGb/Yzn+v71ecG1R9/vqd7Jph3NK5zqgsY0Q\n1PRyjTJggxzaxXtc75brTOE4mXh2Qo1NAOCFdoKlFhLboTzu2A9ijUPNfK1YKagr\nth9DCzweVygiwVuA1PqudiaIWVBPBUcgnoGkHQP8nR2url/A6y7xuCn9cdKk+28J\nq7vHhWPrlkLDAKIwn8R3SowGrILDFNT/YED7ScUo2LtCheuDN2pl1LzUxgJGauF6\nJQFKhLegC1a7dnFJiVE+0Og4laK9D/jIMtHEUlm8iOlOelUNS72TK9xapaWdlFxm\nP+GYR/QkloWQ6j6owt2/DFIcGzrbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQs5mHaTU7dPkKD\nQEeSbjn9++yL6DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHcTF+psxRI3IMfsXh9+Kc05nFhNImxum212SscfHlNy\nZ7E92hmFK1hJWqaXjAJStdTeqymo/NfymmWhvDLhrcIS1Ud5oR6ukn8yC3D/qNBS\nj4kxVcFWiLGhuctafXF5xmIzcsCTTu7rt485eoRqml/8E6E69yoFFIpxRI1TqAEZ\nF6HkzAd38TJoj6TW+XerCozjt0vKtInCLiBmUH+elVBF8OsFDxtu9J/QTUw6XWcW\nQT5xgxMXfjqDU0bMTRn/2LeDVGZAc++oVIKs/zMKpDZV0umobSZ9pFskHVLWX2LC\nlwzAkb5rYxW6jthvS4d9g9aVp77VHqrH0URasE0nsIcX0aMqaQoILkbp+gghNpXj\nIdPy7Ss33OlnyLhTv9A7gwtvlEVQOkjMJpjuIKNaDuk7mMJbhfH3lOpjJYD2SnAm\ngM125R1EsyfBxZg+xJcIcnkjc0qnDg1/+4G6ddocC8slHMmm7pcSP+cqDGCr6/6z\neQ6Olnim9F/7LpLv+Z25T/ndTG6EV+IG8VL0OI3QWD6QuE60ARRAyqjpKJpXh4qT\n9iWwp63UlHvvQkmrqDuytx3gQcXyLC3K1uC7I0AJ/tcbLiHN+6Fn3ZY0Bl95TZ2h\n14Da/N5vByJI1YaaawmQQsRLPS8HK4wcEwU7sTbcUjgU3oWeaY4aOH51gwvajHoU\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID D6F56ECFCF7EDDB7FD87ED01E127EE009A463BC9 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlt6O133sCTZbQAAAAACWzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0NFoXDTI1MDMyMTIwMjk0NFowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtRDZGNTZFQ0ZDRjdFRERCN0ZEODdFRDAxRTEyN0VFMDA5QTQ2\nM0JDOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMYQ0MC+6ur6O234\n+o9vyh951ljCqEgWuj+KfEHdizMHCY3XTpn8wZ4znqPL87wRUyOPB2/ghkjn+cS/\ny9Y8ky8LVseqKouwg7KTYUAInC9U0VPbyF5FcdwxRId0uJ0NMulyu/+loENcgc/6\n5fq2loO/bOaNEnpoFT5chy2FCO5EXpqIevDf3u6z+sB0RKRpajabZ3blDzW1XYv8\n2+BB6b/bP+JtwEkBcoAlVceCS2JDLjTJUaVAFZJlOuyiOtxvdcyHtBOPI0xqf0es\nDzg7iu8dZH/ftqrhY56DsaFnK2mknqlLE3VoCpHl70I2FsRj5gNl534JRnR+NX+q\nahSXusbcq+BdRBpBOobuOJs7GhYG8C/aNKafqfy7m2trsHUlzZx28SSj9H2qNHk+\nl9t3w+E77QNkYg5fCLt/1eAcGp4uS7bzuUhtEXoie1HlhLak7bM2c687VkRPAjoU\nWdcrIj5Y5aolxF3WlD/Cu5YtPT/qUOevP2m2+7zKaq5NRx3esGMtdE60ytJcqbSB\nljbp1hVSjkwoLwOsJkEHN1SylzYYHiHTaefCJYuyTQOtoHttH89ExvBMzsa1Vbj6\nFp05wgv1Z4XC4MBhu6rpbnj3seO/Qhw/Q6IZIiPrMDZCH0IxrlKtIQEshjEGfhVl\nvN+UBIwwbS6fqRI743DdEDklJh5lAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfthvQSUEhRn+q\nzE2azzYTDss+8DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJfr+6agfBufsnCpO06sX+5tdrErHH1j+BXR+DOeoS7Q\nYoGCUAqxR5OoOZP28+NWc8ioNFeyKfWHk2+lt+zumFXEz5/tJK0D5J5c0e0M6IJ/\nnjfmWYPmpqmHK9LfGrhBsmCtX1xbqHFjrFB1YRsJLHYlGTtOrCie3zwHJVInaK8Z\nqUSLQbxddg8BCFJJcIrMfRtVYffoQQCAX/Do/ViAZ5BlBSStcq1t04eSxwhs0eOB\nTkuApIoExhcAwt7dVOxyFEEf88qIvfnXvVX1ZTQjlPd/F7QcmMDHWvWSpBiUUlAz\nCUiTWPEA6cnCFweSLImKKJFBquGM39RQUiwsNPJrFsNevMYNt90nKklzYwbdspsb\nOOvCPW/qE83xhykqF+jBVK4gKyCq0sbx8FN+q5Fiu4RjOtaTkMVtfrcQ2QDW86iZ\n2IxqH3r2eGpSGmOV8+Gy4GtlvtkG7egkR/0v0Rndu8YjH2uyukRj+f9WjZMAQ49f\nDo+B2SkaXHc/7JUwVG56u3WnbXySXNL5JGCmRkCZq6o9V2NtkOmrUpWbDq+vzyp4\nMK2RKVIr5f7NI4+bq92fPKqz4oRL3X6J/pqv6UfiWl98yYMT4Y0oPDIfWmFzvro4\ngOlAW7sty1Ey1wR1lzogPuhAG97hPkt//Y2SqkBBc34Fz9u+diZZaSlxhmRNaZBY\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID E0028D87CE6C67A8751CC4B5D74F57622E75E42A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlyYHFbSWlizQgAAAAACXDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0NVoXDTI1MDMyMTIwMjk0NVowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtRTAwMjhEODdDRTZDNjdBODc1MUNDNEI1RDc0RjU3NjIyRTc1\nRTQyQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAN0AAqFEnjv7Gom2\nDqfb4TWNf9Fzv7ixxWGbmvVmA4gwMv+S7XwrY97a0yTs1UKO/EvqR9z9r5EHZnES\njqY5zJ4tIKbz2qjd23qjKT6qBNmsFjU8Oddho3ECom/DpmQF3iBLUl29IyEJaTm4\nkEl1jKufRyl008zoPXARRIMknJ4hAGiBbi4o6HI1M8nPL6xuuxjRvTDQW8GMxABQ\nWgceYs78Z7MDD+MNfv8NzEjslYPdicEDTM82TpgG3e3n7VhBp79jddRTSW8Lhn6W\nSgKh8WLVOXzdK/mfpQW6TO8eKuJ/GepHTA0y3AHLCHHc1wIxEQuzoBGsGnCEUNRQ\nB7hhjAkrMdrwcQdFzq1f45O9iVAxljZhywW0F7JPbGQicLoqw4t6y8LoO7gwivkg\nDyPZKWbtdkRVoGJwvKBMtHHG//CtVCzN9PbZfORizCK3R8ArpAhG2YZcuaSjGmpC\n+eSCkbSsEI2alKlMhyga7TmhR8F5ertpRbDPRG5f0m3Hr7nNcS8sJkCibchGtsyN\nHAcpmQsI9Pgbuj26+woMAT6zJ5jhmrznZaKckULWimdCWAAPXAQcHN735wrDzwP3\nn8y38b1b210SBbxXEM3wCTrSyg+d6xI1YDM5xV1WeVon5zvP/650Tz1uAPwzHQEf\nSO9zKVXejdjQ+thfS06BQ8FikJf3AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTFncVSfAyXzbLK\ninR2jMjQ122BSzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEfS/IrePpho1AUmhq0kPlvfVPws8qoOTUprofXLgrf3\n8b85xYBbyOYUFhsrKEI9Yvz92NGuEUMYp1Wwu3cUsB2YyeH732ducHsDyXXcoZYH\n5uJx3yZnq9tFSupkcZj6ZQWgKOwL3PKfMDs284ddTxztFP+M3hClfF54qyisVqeP\nvXGS7Hn6syWPnABu5gNUb6eit1fa4GNo7GPWWCeXogzI6IA9YWdlqabxbM/ZlYrZ\nwLfEKWupaR3HhV/m6DpIZa6oUFmqvcQqlQhk9y/XrapMbkq03KbnrnkEt3r1yPoG\n/yH5v8vTl7YVmSW9uy7Ag1ozBUowHJCzo63JniC6jtRO8ELMHqvifMAlpcYbcrY0\n2R2CKpVO2k8OjWToRn1r7zMYdHfBPL+hypem4fk9zKeFXmnklnekmwRDu8JZ6Luy\nV+ndYS5Zo2snPsa9OPFn3l6rp5Sgt8683qrtPz9N0XiZDGx88ldDGF3r3SN0onKe\nsSSD+e2v8oAMOGyfvPMntuKdgjV69lLHCIVGFpJ0l5F0aPff7oy8St3QBQNDK73x\njNRFl4Xl3gN0Iyf13wnE7k+I/iAQ5D5WFnk2oisoIeJKN5PQ3meuskUQHbhJC4Z2\n37baoE5wxa4ap9pZHjT7HcgfGAxy9sGPC0/1raNEqe6Zo5d2nYOUwyYk/bknkzhV\n-----END CERTIFICATE-----\n\n\nEUS ATML KEYID F761A3A1F408F1090797B87127C2A2397C0ACA24 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAl23M+v3G5a9PQAAAAACXTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0NloXDTI1MDMyMTIwMjk0NlowQjFAMD4GA1UEAxM3RVVT\nLUFUTUwtS0VZSUQtRjc2MUEzQTFGNDA4RjEwOTA3OTdCODcxMjdDMkEyMzk3QzBB\nQ0EyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXG8rmLP8vvAfAw\nq3NGTUa8MLY8Rj4G6p//GpRBTNDK/Utv9U1ruXG6wFlfJJ22axxDkrzxHIEwZN09\n9v4KvECIUZNNdOeEpUS0gslTw7Z+ikHSBRODfN3j5rnTkwug31dJ9KnWKoHqCB+b\nU6D+Y/5KiaKJATVLdz90oKXIfdm+ysKaZjYAb/iTI1BBOZ8ZpPERshWIubcEDkPs\nbCbs9O02MsPp4prZ/L8X74QVsu33Z65qDCP6f8YNqnfMKmKwszUR9vySxgGpF2+c\n4S/D5btvyK+SYD4vB4TneX2KOsWBkmGpWlzcPPtx4DKL1FeMbwHWumlj/ykZZRo+\nJWbNJkXkOBDd1/iYz1pfWdOvkMETrsfSCk9r5p9F3YwARbtmhtYATtY4mwSEhUO1\nUp8z5sh9BYKJYup4PCx6RYQgNbDVJ0D9gcrnV4LdFptOEiWd2itE+Qy/8l/FBy9J\njNYL4FtGN5i620F4Wtjha4r2jKYl0zBahgIEFg4z7KjO6QyMnZ14jfCjdEJVqStO\nNufOV6tlza0TPVVzQ2ZQpW9BTjNi8mnUoOIuMhteXDef8JFJVUH3SSm8k64HiOAM\nH5+U3a5c/+G8nILZZy5jTBbXV6LtLDgM9LqLf8nuSgn7p4DYp2H0WgF2/yc8z3Zs\n6GASVzi4aCwp00pQ7Usb87XKNpFtAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTctR0aFx13GNry\nbNmZSE9hJRMDZDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHycRusJ4FmWMj0Igu4aaXG1R1v3IwbRZIJho3i4idT/\nj533JxwXOTfK8s6MVmjIr+I7+nHtCxYv52lCcjxRJ/1Rnoz0LycQuu+rFti/lJbE\nrlsFgxG9hWu7BTbGwUSPuA9kM4DTtELPJNxpsuec16hOebru1n5+ynExm87DG+HI\nWf/G3BgM4PRy60ifpwldqN3f1pJH8jSyJfheqqx3jQaa7ytHRvYKLaLvHhJn5Ha2\nZumTwmIEsU6R/E8GR1QJhjQicehsUGciEp7qzVEejKLXqkbJMhoj+GvYN0BDn2Ej\nt25cL+hvUGRSJR3U3jHwV1B4U7nc0oFeCdZBcA4+/vifgrhAkSwWVB6p/6/8Cn6G\npDdc2AF7g+Ao+WJbYO0KYKZqWjwS5Z6iKJBY+u88iz3fDx5Rn08djoNroWcub88w\n+1WWuyCMj3ce4og1tN371z+1Cy7Ck/YxVkJmJAA8fddyr2szumqlKdLen8VEufKO\n9KO+YDGgHQNmyPOGEI+vjLCyOK+qzTonDf2ao75xhYEwRbCS40vv0o07ln47UkuX\n2LyYm8iP4hfnpmHtMaUSEsmu+DER5JAQ82F5QxEwklAlXtVCttgfEHBYnyTCU3Kn\nXp6Q73AF6KdiDAoeCyqeILPsOf5u6WZvYvcAL46CytUwXxOCSZRStl1MNZqaLPd6\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 090CAAE1858A3C3A3B6D4DF8978916FB205FCA90\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARsTlNAY2cDUJQAAAAABGzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjM1OFoXDTI5MTIzMTE4MjM1OFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0wOTBDQUFFMTg1OEEzQzNBM0I2RDRERjg5Nzg5MTZGQjIwNUZD\nQTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAifhM15G4CTA0jZT+\nKOiN/cmUIWA6fKv8T69ABsR55FZ5Ll0MWcuSx1crx66qmTx1Am5UR1aRM+93CyHs\ncIBLSYq07Tu7ASu2JMrHJWmw/7Qfr8u1h7u1ttdt721QKmmuzLPRE6ebc+fwDWrr\nI5qQ42zh3+o2RFmiZGmNqrEas01TIz9NxxW4qFJha6AitGtph+L4PU/3yXf+iRIH\ndh+qnEZIatn16j/q7A4gVU02oIPUnLXVb+fIHi+mrB9Jzxe3LFE8s7EGzXBKM3hQ\nEnDPqk5c8XRMo+WBsxjs44MwdFPJovggKSbVlNPqDV2fT5YzcfePShXRDmoN4/Dd\nGNTXUQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU2TfQ4oe9B48sxwyeinFxwy2Pet4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBPpfB7\nFWLfV+1OA087YBAOXH4OQcUNeiblKquRY5xu99QSJkp3jarBKx/Mq29u//oEy+/P\nMSymhC+fT+CTmuejxDZgc+s0rIgZoVi9HDuBD4sq8StkThsRuD3x5RY83d0xncMi\nZnSNPMV725RyTRV0Yxo9I5tTONGJSpBYJXyxnW7xI72y99IHP9TScq9shaEMD2kp\n4I3q+bPTSaVAU1i+Yi2PfVoYgcAtrHQzOJiIh3FcBhUxvZ0SlPJMMh4j6C0QGrxP\nhHn5v8wx02LDG9W/RjeX19pPgklgkD31FfhRkQwUq3J7PkKprw1O6zJutwvFr/q1\nScOpQB5E+NuBQzANAqxjvFhD+3RKQG1Tnu7ir8qJ5AsL4lcgxvQpQo6Qxiik2O+t\nrCanuxWot8nOUSp/dgD+bmjZB3UV2CWjAIdk8GzxDuNcAZF56lwYdbecywKyy0H1\ngXtff9hTZkrH/b9AWSbWmRrBuz8UBCo29xPKaeDbaVX1+ZcY7GbiBCEwaCaAs8Bq\nJNcfGcFMay7Ozv5qaUpptj5qw2g7HawINcfFyjXjSV/2nq/PQ+CtxI61XOlyGDk0\nhbb1kOk0QJj3QkVfo2zKYN0RgtDrl8PFpmqGJYHkq/CGr/pd9Q49jNAwMLgCjzVi\nGcu9WNN2XAeEYwojqaMAcKWfkDunB5FQjAut8Q==\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARw5hpDDIAE1dwAAAAABHDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjM1OFoXDTI5MTIzMTE4MjM1OFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5\nMkY2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjzFu7ZqP++8YecNH\nKarHsVTFujdMQW6oQ9E/kuUzqSl+IUhgwEN8RZsvTteRWC0NukhT1N3osnc6yd/S\nYBMMbJzm5H6JAlmxXtoaBfNLV18k1J4DZzMFl3upbcorn0rGz0uAi4HdiDabpONb\n8vK+rWFQibfs2XjDVm1IZkm3MZXtfFhWDGDyIYlQ88pyOU61zrEtci/ZPaXllKNy\nzI+ZKD/ukDa/Ku3PoH7av5iKAqk/wg9Xc+Ni5I3y89nO64KhSqUwbaHrrquIC1qp\naqa2tYWDDvufhBZYjTeCLpQPxi7/YPzYB18P/UOH++whcyCWuJ6rJuB7zIraRuRN\nKCpJCQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU2nrCJvqFh8XeIOabudMDqJIGYKYwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA72Yob\nByQrTnXaStPfn+gsWCU/mEbYxV5PwQxh/RrEo7+6Z2BZ1MB6DkaE0naykktueEe1\nn76kbF9d21BMBsYqCh9n5pmsp6G9gQVKCK2WyvM+S2MsbyN01+q30Gf06QOGP8Ic\nOmCQfYZrD6DaF24om6FllUrmQhHlFsb+hClnCQEYuL891NZaIgJSvfj+jYn3bBwP\nJKZh7KvqM9LjSsxCTrON/T+eh7qdsGPWlJZEJUOARP+7f4rsggH67T7vBqjSpKrU\nSesBZt1I8A8weteaIeTAGA5JsNBzskrpBOtSqSzN2gbAcddY7ktuscKQTujB24b3\ng4d4eOv3HFaYNygWVeECAtQ+pkEB45pQtynvmfB0iwXWtlk1LPHc8Dy0tYij47+0\nPGMARooCoD8sTYR0akcdKghZYGgikt9DqlypKwGq3i7cQnWumCf3+YACXS8YIHYf\nnYGo6+NlWD+N5JrzFrVFGMWxndCizLKNHKcxR5r/rYBHcLHrYZBg8u+A6JsXcXt7\n8J6bld83jKbBai0aCd95llQgtP2Rnz75TBEC9LZJZbBENU8fwngbS8ha0h8iAC4G\nR+5iY5ETASPib907Pj7tQsVIetZVN1HG7ouCJAGgvTe3Yii95f7RWefhGQGUKI8P\nhrWiC298Sgj09DrMtWFVfKwk8ti2bH6cyRGIqA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhoZJ6vf/8RoMgAAAAACGjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxOFoXDTI1MDIxNDIxNDMxOFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5\nMkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApeOrMza4KgqnxXC5\nEUuY9Y+aRWmi/eTEynIdsnPL7hEQu3gJtQLMrfVyfCzeFwygZqKKVxdc7hDa7XDS\n6w1N9lRqqYlqnl44bsJs4MnHy/I0XPMIFiVtRxwJchT3fNdZOR4Kit9vsxquHwHL\npB3elWeDUEW4H8nMevb8D3gz578Fd6NlFZQy29fd9jkK9HV7qPBcSh8RXD6dTQXb\n7JjG8Gh5SYI1AXCSf33xkJ+Boz4pMysi9kWrIcd0QQq6hpY1iEuXbIKwWjMhuRLl\noU2p9VPUFoI15KN/JxQFrGZz6XF1OxQwEXxUJh6kw+iyvICxDc2UMPnpLwelAGbu\nhPuaYFCqj20yCi67ZNk5C4kLj3ac1eUSN1IeXjl6Reag8yBrkLmNTReMXnHz+g8z\n0TBDNfyZA78jF0D7EOPzqGLXmjOr6oPxfPjRTDELmyT3/fVaygsmonkaniQPlula\nbJ2x7gg37JOTUTsc89lxcfBE8jzByV7HpqxgnTSCx3Zga/fuzACENGV/N5/FJUza\nLPiUWhO0t8HJFa3HKUi2SSUGTY0pDrnOzw793Ebq88UP6AKK/rRA5UHqDbd7/7jb\nMH644ML8lZ0QeuuKn1oj4wOyvL0YCvpIyNHbOHSqcQaZhATdDomJdRVcx87YHvyZ\nE2nQi4xJyup5dY2vrP8ENRHcaWsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFBlJ3woeZpFT1N9\n1cJRdcKNM+iYMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAHkqhwmv+BB0A1LMPsULW3OoZ5ddO4qiRlHwIqC2rSdHr\nLn81GwB2EGM38CtMxznnxSz0KvaYyMnTlYZj5FRxV7jZdIpeJnb6/pSYcbNX7kna\nf++qnnAccdW8B09vEhxacz6tAVCc0ozAFrrFBmxEVpVFzcuGHD3NB0MhrTerlZmX\ncJTLx71BKz6o4EIUgN/m1uomNpNl7WdIpqTBKiYQ0NY1K4t81TbzkUGqdTRnY7rz\n0/ReGv92Z4FUwSKjykldbGOATM3/Q5wpu6Dw6U5YtJgtg2gVBmqh/+Kc3xt7UZkp\nATxveEJ9RYw8Z7CWl+bIunjPNwVzOTkHG46xnmeTd9Yu3F+PY+EN09hplPiZKoLN\nTIrxm63O7LciqIgAhUBBv07IRCUgnuZ/w6Ef24KWjQvD8spzSIlSNd43UX4vrDER\np/M2CNNt37R2YmA+4u3QyTq28KJ7I+zL1o0G+khQhmJFEBy6MjgY+M6gfDiv1TI8\nhaPVAunn1MPWIX/cmyeRDnMg/JQLc4GfJQqdpi3i9668hpxMLPSDajyUtXrlBROj\nBuoz5XW2AbETtEE1cKZcqoOFN01jY7YNm6JucZfzhCX5QdhMGi1w3JTStAzV5a+E\n898pXUno6HFc7/qInkXVk8RTUwCsWwMrFWENDSU8HyHhjLGGIkRQuKP5Uub20ns=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 128462F2A0D16CDE1946F1000544B055BC113D10 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAba9a5cZbUQtBAAAAAABtjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwM1oXDTI1MDEzMDE5MDkwM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xMjg0NjJGMkEwRDE2Q0RFMTk0NkYxMDAwNTQ0QjA1NUJDMTEz\nRDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArzH+FvA0Ieu6A4Sl\nZkUQD3/JuigC+tnVxK6kG8YcQld7EXS9+tKRWDLqU+6A4/uHoSVn8k42V333B8fB\ngkcUzmZAH9fOuoXzWhIYp30xUmBhb6TiZn/gPA1zrCyEX8Z78RXk0amowKlCLypH\n2XKJ0HYpW/GfIYr+t0kY/2+3w1ZMg+J9Fu186rNh5OKIMicD14s1XmZvTAY4Lb3m\nBjLQU0cgBxKejrH/sG1kc+v4rHAAIzBKuAii+rJlloSW3HAhxPQpy70JlHcQdc//\nPkDTRjk+6D90nuPxGcZBltJBkNPbSlhc4M249QTV9tCHrPysAGbK4WQGWk2bz8gG\n0wZRQ5j61AjdZcs3+cnBhlGi2+CW7XTWbhdlA1K5qwicveDtQOpv2ebbHzaDfJG0\nxB694PR5y0P7nrEdMNLdHAo0Nv/yFf0IpKzomfF0+MOQy1Ai0Kn6zwaNYy3cdrnI\ndEfo2VCl/PhwvP98LGY4/JsjSc4uGUdGmc6X69KP+GqznUOO8obBixsSGe2g4cV5\nE0ETC3fHp/O844H9kbZnzX2u7xetdXYfLzJOmo+/RfgDiT5f3nx5Lxyp91NWb3B/\nbkcnYBSUsjkA3o1xbUR1QIoAPLH8ded8ZEJB5yQHsXEV4jAFYw7YDK/7qj/BFz83\ney2GIPmYRDpPGZ45q4UJCBCzQPsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBFefSGesNeSe4zM\nRuRkRYZK+QaIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnBJ0DJreJ6JSkEc1erludO8nioAOu2rBsVBQ7r46ybV5\n7WJd7Wmd7nbNYbK8+vlbtrsazU6o5hEd0Z9l2AIkt7sLwot57WP2e+wMI+gkf/w8\nxkWPu3Bq+wOwYRzRPM+5SzheM7KB8mXUK0j+cptth98v35KE6gI58K/IdbatX4Cp\nouyqxoVeW90JrUJi5qGlpsS54SsHlzc9X4OISHU8HhH7KXqHxSjgh6I2iq7cpcIJ\n6L5kZEQ6nc1/t2JC/L88/tAZU0MA8QRaQ37vQx9EmGC9b2K5GyjbOmaVUPgrUI3F\ndxnDLwYRQY7uUtKl1+4w4DFBJxRWToIRXH+kgMlE264eoOmM9s4jDnYnaKvBk4VN\niFa/O55xDLcJxWUaB0PaLadFV1DnuGJF46B7oMofr8WkCB3hZyZH1lGpQ/h+/pZC\nvuwuVxhT5VkRwp4oOrEODmEUG4S4Vg6GD8HBuIkDCcNi8WxxsuV6qvc4HbrPbXQx\nX96NqpyrhkMS9BQKezjZFl0a1Q0j39gTbkeyGU/OK0UQHMWZewgrH0wCccEPhxGq\nID8IQKkom1LGlseVmRFIRZVCHzJY7pFt7+W9GbhfuRHpKQIb3doPYUCF5omGBKWm\nEXK3ZwL4vrUlXtCUlwLo8VcVipmQQqpqmV/WyB0A93RvPOTvsprOjbIuEv5DtmU=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 1BD645FC1F90827C283E6CB526859FFAB0E0C62B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhF4Xdp0sMlSNQAAAAACETANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxMloXDTI1MDIxNDIxNDMxMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xQkQ2NDVGQzFGOTA4MjdDMjgzRTZDQjUyNjg1OUZGQUIwRTBD\nNjJCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo8JYyj6mHAGiMjqz\nkVqvKMoambQ2WLUR3m7cr7TcUB4hWhASJZRSa4elIBwr0vatcFSIFtBQqSOOJCsn\nXaHhTVLTDsCDCcaa/AU2ZlFRCHrUrhNU5Rh6mtgKm97MLWcFEY88nBxLr6rjp/t6\n5F/Yag2n8feGsIrkErNz00VWbg+uf2z41b+3haEG0Yk8F6KHOcVyIZvFavWmuUlt\nQKX4c0V0byR2wdsuAxEx5bY/7dQ0DGQR3N6Ft/IH7/J3zXbmgJ652xA0h15ZrWDr\nawZgQ7fDiqCl6y6fp1O/+2DUTBYb2OF0LU80wObSDpaf+dq8lIzJ70hDvx0iFNvT\nmvsA5mf8hTcQUWpziXcNOlkEJdLVXUNGkmvUPgr+S22oqOy1G1ZPHBe8F2pp14qv\nYD0LyS3tuhOTTnPNAZeV2MtjZBuJrVaxbj0Fehudu5jsbFN9pIyCfZt804D/+fwh\njGRvGmziT7B1GXlnM4FQg2//QtDJXq8kRrB9WHRHg81LfN/JXLzZAp6mdfbtYwWZ\nAiJTzH3T83NAvIzcnWf6iRSVHblpnFuqWe98aVpCqtwrrIXTRbKZBuHG38PIDfWq\nX7hN+mOpPAdjI1+Z8NusxuUN8mxVvSXhpOZYYA2yoaaSH3BA7VVBbNx6OrI/Amso\nYjeSNWKXMO2nxXjUL2SfdhF/x8sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDLGCjJEsQQBnsQT\navwIDKQHmvySMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAekTOl6SjZQvTIuRVTQSIxzHVfxgaHW9xHDzRtt5El8Oi\nd9BKK9WCGxYM7JSBjTLqzzbwpoF+sILLNlMqHK7PdfSUStrYEZh4sjFxDpmkqyYo\nDrG7Bx1bMJG3Lj1WARoj6m530p4zyu1rmFo5DU40Wnwe9FLgedo6cjdrZMuofJSQ\nPWTkm7UY9ow8FayrDPu7mezyGXjnvBgcB14BkDLymbVouBmvciU1/l7oYw5hsf/z\nG/+xlxth993s/JbbOS+wySs/IQk5PNN+X6c+bA+465pB/2QlQMKINaSj0Vn3+BOM\nf+sI6e/8vpWNRT/qsiVM05+ef1Z8RO+YehaIHhTCv1hpDSHkXcBu3tFRCnNjJeWO\nalMYoAF2wnHD0QRS3v4Jz+qogrClTzqXTpyM00jTyJ2n/LoBHr8vmN1ZlhJyE2Zs\n36yu30OPLqvbs47CdI0clbr/zb3I8gEc+4EiX4jaFbEq31qxm8LRtht0aYePE5HJ\nHHp/QfFGsaXAQZ4qbavVEVWbxZGiIbULWYQJw7ckijTGvbnRHEHZkZKfylkhqpNH\nzpMR/lMPpRAdaGXb1xRoLTpk0ZWF+vFjAEIWUUbxjQsHgflhwOOi0mEoYCODVcpR\nx9idUZnJdGWN6uaAXwahPIUN4xIToFEgG0Xf33U1jQ4UiJ7qbwxt0mR5SVLCwFg=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 1DDE0F406D122C3E5A4F861F94876C9E1ACDD37E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbDFOAd/UZ+ewAAAAAABsDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDg1OFoXDTI1MDEzMDE5MDg1OFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xRERFMEY0MDZEMTIyQzNFNUE0Rjg2MUY5NDg3NkM5RTFBQ0RE\nMzdFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn13QOPVww49WXH86\nJ8y5N6LX5mxCsnYQY4+4m9nyXrwiQfZbyLTfPCw9LFebgvYq/Y+vUMIcQPt1g33K\nBMmyLzI5gZFoifdJSdWiG6UoIxq5yPAbW/TIlZZ2/uBSepmVy14RHaZFql9/zq81\ncmhlvrmLzcbZR0zLeNbuHuIzhQ3Jw+9i85LyOsDpmF+CkRu9Uk1WM8gcu/ba+fyh\nPb+roYrMtI/ThwbG1A28fJAc69OkiTrTW2WsSLjjiEZ4mJ6pRg8yWEY6iiVIsaVL\no5ZAEG1Oycpyg8V8NfB8rtigOH6dHxKtQDhN6Ibtcav8PP+Rv2S0PyuisHrCbE7e\nV8i7Wz+7yJ6Ok1jXX63uqyUsWd4tOa9JFwk+NYprXVKkDkoAfOUOo/4iDFmfvv5O\nljrBJhjp5rYBkEZHh4G+RPnrwyk4WK8zCe6Wr218MMfSvDxU+eed8gtrNFwlwUQ3\nHLCcoHHs3v36kHlUe3f0H/rc6RWXSVfitJuBCCFHprXkj9nJooLLp3HEOyGFeBhh\nFWLpO7Jy1luvyEX/1AmQxk6mUQvwddTbrGuwaIq/t8sG3hBvPqCrzXmMxMIuLa9v\nadlVdayLsp90Gcjt7fQsDVGbheqd7aFdhKZ6D8GdE9LypZEV+YApbIdu/ldbqccW\n0xmSVuB9p0bkwRaNUOr4BAiu3CkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFLKP8Wqss9HB+LR\nHIKPdYL7IG19MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAPA93Nv2HmtBBmt+inM8+Fhjmx8rBS82rcQpllkEeWflA\neMfKQ1cAUVc2OuZ2joHwlwoYufDaXJ4st1kye13HBxV9rYQrdBDv0oBcHumUBhJW\n8nui+f38nYcFvMeVlt2E352UbpihJiIvCEBq0oU6/oH89atBJ6fSgj4icrmP2+wO\n7PCr/l0MRN8s+PybWlMpBCYVjIcSrWsVGuzCZcbxfvVddHqWy7xNmHDh8Q5s4Cim\nriU2A8hUehWF6IbtVzLQwSYeibLfVFFdeH7ZceC1szMgpyAKzAx3WgpAaAab3KQ2\nhzXBmNMTNsVp2hyJKQ+0VVqX/D3KoQ6zb+68OT2ml4a4aIj41/rCKThxmPloZ+xh\nojm9N/r7/ab2Nl8mv09IGAxlCZGEuXZe7fgrDMTi8niXG2YgwhPC7wxZ2oZgemky\nTolZ1qrNrTM8apwzp24QhXGxsEIoLIinfNuzw9er0cRjwBfrp4U5M5ODOgih1V37\nsXkZlhfpae6GTKVufhY5312RIBUpNihZqebXzycmSldIH+/AE2/cZlj4aNdsEifo\noZ74WKneBuCArgXFyO+mhartskzWwGqvvwtz2kxJLIkdWZtlh+zIay9eIOr6oVrf\nvqlV09cFyW/EBVwuv/0GJFP1GL7G7Q0UzuIVRRadF96N888tSunpjw5WzNFlrSM=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 1FCDFB8ECE408675D963E5E5108D55C984DD797A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAl4ad5Nz0f006wAAAAACXjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0NloXDTI1MDMyMTIwMjk0NlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xRkNERkI4RUNFNDA4Njc1RDk2M0U1RTUxMDhENTVDOTg0REQ3\nOTdBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt9o7/FLymjs82bAw\nnGsA4gjvoyIc5jc6YNLCRpzVZMljnOwjtdbIr2gHYN29z8sAiHiTtzTVUxAStVIV\nHMKilbDYdMW+NwaqcMy+XUfOREEC5yQVCgnZjju8qwTW7fu0xO6Ebiy5fdnFapl6\nwrYszPuEf3Q0Gds1JKMz6Bcr35DaoSzb1YAEYvdM4y+VSOuPca4M4oKH1W1rtLuy\nVQ7k79zz2297B2//f+KPGWXlMQxn8EVitta+DJKemS6aw9nyG0RSsBsmsRT4uKP6\n/Wv/DwXMLODU2obn2WPT9M4rFUwmD4O3rZGoqeYXTo2paIsM11EaGJQ68W3/7wWl\nW3p6t5mY9eOpsgX08Bdnr+fkvIxe0N1YvOKIyqLDqVyYvhC9FXCTeA6hrC1dVyMq\n/Vnn23XFKFLQjJVpKebSoX2CnIdzuOPWjdV1fsGiv7PF4QxJ9ZiLB9qeReoWLIry\nI04QscjeHKNhzrkxqAO+rUob1lZm2U8atH8xtQIgKBRTQkSJvHxYzMXmG7Nlc5nd\nFjNa3nt0oCvKtex+RmxKpF2Lv40RveGaZQe2OvRb+1+fGU+GiR0lmZt0DmfFo+mt\n+6F3onEAam8J/EM2szX0z8WgCr19KnG9mGVXUGOiMkz4TRK+OJ5T5GHO6vrT8BGL\nO15acBCgOWdwZY1E9Dl2nJ0E9RECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGJws0chYaQ4IgV0\naA77ygndFW01MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAcLfZyPBeGJFBdSeU4fAxukIMr8kfP0pdevXjUKUKogeQ\n4uunojJ68lGGjvmZjRm5yxP53qdPsLvaVnVu9abOo7E+AoTk1mOk8kzfUBeQ7Tpk\nAByUeW3BhqVY4ci2Fx0J8G78s0Gp8FzFGMcTQXdKKZqEhvnxMWILIDqMg4ViXs1Q\nZmdwJMihsGNCBixHyp1T/AqUAf+4rd6Bm9AP1BlJ1SUT2UPohW7H9P+6zY5Tl+lA\naURBdOcnw5eiQYSdmrq641/G1IR6ZeWq8dk42l7HJgCzvxSsu/mKNBNOVxPhVPeu\nnw1UfYYuUIuGKgdDHQomW5Xv6zr092CST/yA/xxomqgTIa+wluWqOawqxBux6MK/\nDcjnJeDCyepulJq9qq2phwuR0YYpuc1Y+VUU3VMO6Nn7qv61e/igM+zeNcwh5wxt\neD7w0/ybHWhL6Ol8ssYEbzRi9fozeNGnix9ZtcKbsS50SXTly+Jomu5cg4QtZEDI\n+yqhs8eZ7q0sj4eF0k0gWMrRxSLGAD0kar1DHQQgt7NTpmq5t3JTL2C1RUUBeAxc\nYMDc+5Tz1iOOzwRPHF/aNiC6oWxrb44W1tvsIGi775qjVufDTpjVxEwV/jy6R2tC\nj/CAp2kUM9CdbI9kOstNj/eiPPpPF9HjJtr8z0MpRCIHWi+DwSv73KV8qBs3MHA=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 22BF9BF4978F4F45A4E9DBF729D8A08ADCA0A82C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbO6/Zrd5mkC3gAAAAABszANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwMFoXDTI1MDEzMDE5MDkwMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yMkJGOUJGNDk3OEY0RjQ1QTRFOURCRjcyOUQ4QTA4QURDQTBB\nODJDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAl9VnCiGZ4p+6rPjO\n5C7RYOrAxQXour7xr/w+Zwa27OM4WyrW5DXe/SUWxht6/qbELqr5JGtBRxsfzKnH\nl8od+kc7VGWqEU2NB31HTFyzGtnx+YcvstteT2wX6wwItyhWHGDmh2a0/B7OaKA+\nnbsW1/UP83hTkTh+6i6EpH3QFsCAOT/rBaI2QEQ6mKVVEw6U3+1My9x9dN8hmGiU\nwbH/K60VC6QVOf+npjOBh6cpB018P82wSZPI3qbUb3GEW2CbMlUTzvwR7P7E/ogh\nj0qqgGdgOwHsrNHWSMEVuCiWSKXRU/pP9/5poy5vwYNTyWPuB211+VqBdqVzK3lm\nRJNlO0evLG8hF0nokcc0HoqRW8EXpw1u8upzsQLWalvd2Gh0WB09jYU383J4MOGt\nfMQZSu7Y+XNWbvouDh2Wu1KlEATqALHaYkV9hm/W2XsTEg5W0iz1eCWPFF4v2etL\nvZJB9YlsyjV53PXOsxnUijDVjmiUZER5B+YB1pHO+U8WULmi9TdnvoY6eLQZCeOv\nNWcVSQUG29w+lnTngyF/yfPUbDIa7cMWgQwoSJhN9XeBldjPlTrA266FQQpsN8JH\nQQOZHsjVCIPbs9H5HN564d9v8x7jJGK7Vrv8wyLXKBWke6VlU4tHw7GE6z0SV3gd\nigAq8CAP3mGToi+vilnsUbyUif8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFnDcc1UhjZeadCH\nTBhevU+8qALvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAi3lP0tMGvGbrAdMCF/D7tv+iI/bn3I9MKvHmD70YWal5\nlIboCCeuo+PoMbTxUnSAbN65H9K+Jq1hDlkMgyAMRI6xzwepi3bnUmzA4wLP5/Db\nwcfyrzUrvV4W5jw3FGeCr7e74pdfemm3xxgE9/ZIhjEuXW7JMPNmAXhucwTSb7x1\nScdaa7EV9eq93GdzqG5EhcY5HQkFqY+kRPCecAXq6Op7oYR8mdmun0HSHgdyW+BJ\nyktLW60V47lLTDLfMNTFUl8B9x2g+Y2/WuhpW3zNPoxn/HVOE+zvyX45sBxcucfw\nrxhBhd+0KKqMWpzlvnBiF7fW9nv67XMGEDkFIZEryAGdEK3Cjg9w4WipHLd66Hwv\nV2ZKk80T9h6WWdjuwyqcBzw8TtScDoQlwhmfvsSKbPlohFrf5Se9NLd8PXdTfPYK\nQ7RzHk2C6mwP1+jks3EbhixBjvUhmWOoTOufLRKxV8t+AjGx9B+oK8earCtdvuZS\naKQWqCxUrvIOJVSLrW6OmY7eH9yc81w3dCvDRafXmqm9IE8U2+rCRkTLBt9wHu2H\nD0LHBcPR9nmEiYSR5pvHVqfJ+pmMaU6S03gh3xCJWINRE56vY/DMGuCzFFvfFZNf\nPcvLll8JDU7VDyhuJk6AG1dYvfhJ8SznOpfFLxZQrpAYR7kvgAC+1qT0cTgTe6c=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAVw35o+1HkiHwwAAAAABXDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUyNloXDTI5MTIzMTIwMjUyNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0\nNTRCMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3ugFBOGbLl7FGWQM\nGYTMNpRyyotnMfeZL5SToO5TBojIvYEP9NEgdeXkUWdeY12Bjy9B87Wv+5V6pOF7\n3h9DVN/zh4i9x6S5VkilS08FwfkaSM4JUqDDYz4/l4Nl5wbbAqrBwfWfgPdI1OpN\nzvxaXDxENP8dKns9+c6Q+tSljrgg7jf7yHD1i0eNnW2mpXLMCPKKoAoS2Qsv/ShZ\nx53yQJepf+V2dXrO4Z9nfFxqLZeODbffJAdfw2Jcg1zDdZcQBR1zxQHNg8K/JJd+\neaOCvgQQbuSOTCU3K0jm4zYmIG9XFJrRuPWTpS5HKwSHSXZZHAa32b+gQrSwrZBw\n6myvbQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU8fBaQPZiIagiLGA5Ybubt8p54+4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB/9QQa\nnAp5I1C6bL70X79y1137RVtTmoxTPF9UAjwxqSNuSqtmwrciguzals344fu5+/Ej\nrgSjnyrpL2V3co6/pmVvqFIBIopRd+ZJCfS4tkeXxAXjRxptq2XY4XIMS+366339\n/29uWbs9o+BQi5Ub2K9aYVjWB3ckACSc1UAl9M05aROYznTjn4TkjdQIrVTWNEL7\n4vrluNQWwbw8ydlFydmsSZZO9tWw2HfNGGTT2wiirCGd0ZnsNVeENvmI/0uEoAa3\nla3L66EKuOVyL514vUTkjXYQT8FuYDvPa+cvp29kalY1Pw+wxnZHJWBsvOj7PP9c\nrj7tsZnwwmD0DWqO9V8I0Pw7Hvhlv/FQDHCNajan/vrg1h4QGyZvDHdkfyQSlcp6\nF93gOGN/ECaSvfFz8wz7mPKy4PnRML5gASJ2vn/bU5LP6qcK3EKz4DnxSWplhWue\nI8nCU/R/IuxiUUmCPXNBvFUeKXA2+DYHEF8ATPxdtLD2Q43YODl3jpnASbEaIj7F\nsHPGDkrrWycEcDwqTO7BSV5UrjPITYxgsgPTjsxTQIoatqRWzn8rPGhfY8hj/0Cm\nkOYPRcjXgdTOmrwbiIG00yUNcmJGL+Slr4963EEXE7TcXQv/4JHpVjTen79BiIWg\nSaSOdRJ/r1qg/PTLu4CDGI0Ih9lRwOecRZnRPg==\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhgAsnpTYYvQ+gAAAAACGDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxN1oXDTI1MDIxNDIxNDMxN1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0\nNTRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6nMsPde/ShFrg3lK\nBScyB5XdWtgdef7sAaVj6UDm/oqUGDAo2oQ2wRJV8iQH/BIVevOwfBlV8LM3bNeY\nL2XGPIQHfimTL9HbcvJvmjTiDAXrphCNSfbfwY/mF9t8R/w8BEtf0VYYU1T4Btkw\nNrtAyZE8eFcuVT2Yv8XrJ+8WqkozV1jscoveVqYrI1oTNfKSuVgNLO7H8t4WNdFg\nMqDMXqlyw7N5MB+0l1uGuVHvahbdxq60+Lkii1ujlFrjJhW8PVfegy+aej6cRRLt\n6bW+Uc8GevZ1zLaCZxdP0gGoaSUKLXbB64ukPqcSCI0zlzWGY/OnE/iwEW0Vaq76\ngumzLN/T/bXxrc31P4SKM+rdXUjQr2IJMukYQtS5CjOaf02lMd/vlEsacqv0FGmt\nmU3utLKXkpNjWxrprCm4PC2KA1pXcjTdCDs8CsqWtHfknonBI9HXArXRsBiYUYMf\npKoYfmm+0U0PV+x7k5CyNvnTFHGoju58v8Dus3toGtdVAcsrAS2x1D0L/VG9vHtq\nSgMtoxH2qq014HtIaaWp4QBoB/Xg5pjPkLcrv5uYDnYKdcU0IS2WGRhyCHCu8DRm\n6/MLrCRBLfQ+ipsK737CpNmcUQu/570mR1xIa3djPYxf+A9aKqPK5tdVVYSEwaXC\n9W+SX061UV87T6EsSpDTrYXrY/0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD7q6cZ2atp1HMNf\nup+agPZ4lak2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAlInaGMl/Re9ol7iiMCzSLoZSSLjHQC8cwTB4TdJMeiSF\nstmw1H5v/PKGSGDr+FF/pklXnR7AqnZqVH+6+4MU3YoV4SZyXg2PEMdwtaFAr7eQ\nCEOLsllSsX6aM8NYeKWG295BJjn7HhjRqy4N20LlZKpGySAqbK7qyfhJCOTqTUwX\n3TDbXw02VWtFT+jtRiIhBdCu7TUh7i+oqLJfd+KZoPUd1MYoDSIueD+az8/NtNkh\nIF7ST6dN9dhKBPz9a2c/AQIYtF1YCvvOm7Et7oXc+d2R+0rgkXw4iOPOM94+va+Y\nc7K+vCdMw8YAkuhYQIgax7QHAtvdl6KumA2aVQBYAk1uor43LAlY1bz6fO4AhvOq\n0RFkesifY3+owNn/Mg43bEeUe3i2PVr5QUMWtFrRNGv9budR6eQJUr9HDjmIQOrK\neijPl28+2bLvBN+YAqAdmFco3AO/r6Jf9sgdYyDQxD1VzK7pxjsRxarFCzc8yHtB\nb9bdrkshlf1A5/IF58rr2+bUzTc8JCBCdwz/CPIfqq6zNRcgbChhsE3RBR4l0e4g\nP8kRBOxuWoLKnICNGuX6GELg/2DjPaIfujaMwu3dt/VbNXqtn6apiP3zYmx3/8rw\nsBhAJrSQ3MCJudFe3nI1xOulXFwib/hlKYxU6ynWlh/c6SxyJJfnsGhdIYZsit8=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 2A4A698325A1B220464EF009B01892268B25F84F 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeG5LvuOBnNz8wAAAAAB4TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyMFoXDTI1MDIwNjIxMzAyMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yQTRBNjk4MzI1QTFCMjIwNDY0RUYwMDlCMDE4OTIyNjhCMjVG\nODRGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqvwC3tjccndFWSKP\nQLT8I3M5Rgs7UMDemNelcvkf5noXqg1ZdjSwQkIkjCn/oQVlnc3x9Rlh75l3hAj6\npzLSA99oQpRBogdh+vT3ocOyD46plj+98janTPcyHc0Ha1MhWUBxmnTYhkxWhWar\njHe6/8QqYN5FePvq+91YbkIe9gtfCZyKw8FpTzA61701YX50oelD3oEt90BDUe/1\namEzdom5xhLSinAouqKRLo3LVOWHeL0sjIVXEOxYR6zP19nqytM6L1Kg9hZz+773\nBbrcqGy9Ki/1v7jA1M/H5KbROmMTwO15K0tFbTD29YpqMncSBJRQyI3JoB1mkTPn\nGGlXDCGthrZDIDgRtrG7zGW6SYJ6ajzUFn1O2MRZ3S+qtlkJybNJiQqmbcDXruHF\nX4mgQ0bdiI4za+ypyjjurjL3+uYUZKGmEldjQykZpO5Igh8Xka8vaepN2ck5RJRi\nr8ZzNyqNgWFwPAtNVyhsfv5O0nfFmtSF9purzf5+utmzA+/YZUCRIN1+50yDvtqn\no5o3npkJbVDIM9tc5Aua873qSw6Z+siA/4FEhUs/8LJtB+CXCSEBVgPp6WFGz5lR\nNHxDRJH7VtP5UKqYVpZ5ijnkiQO4deBpvLc3aEr/QBvBsfY8Hh/Dm+hG2XPx26it\nMDCPfg4IzqVN5QyExbe+kmwK5/sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDRpy3Wj6iJe1SXw\n5sPAFYrmzwgGMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAZs/MWIO5coC8zZrAoJ/vi4NjIqMQKOUDRZjIy3gr+tRU\nDnxg4jvhh2ytCZinq0nk9zMpQGqb3vKuFd23bRUFdh2MR0U/2oL57XgcqbU5WXOr\nsUa7UtWANOK1ezX0j7HsLxiXurkBDmG/UQiUkO5FS/cMvbWiZIrNByw6DS/VrzaR\nYnCLdnDk9luhC30xw77mLqrxr3gQDCM2tlWqgPQXRWZkiyFVGn5Dm5ZvxDBMGLZe\n+RYvSOk/est8BoqEveX9LkZj5S7TwH6qFcgiwSUeSOx/3zXxgUuC2NVyQhBxn19l\nkogOW3M+JSryLX3uZaIzcl2mVKYWOyFmF1sqm60iooAkkjRDKtbPI0Edhj3UTOny\nlnn8Mb4Wm2oHwxYDk3C040a2FPuglIkmmOwaNC5LqaaSerCehn5pQUEHzbWTwrbN\nDrWOURnLEZmcG6nR+wuiryF2dFUBNJ+xexhGP0rrowyWY7tbIHt8N9NrMylkiVJF\ncWJN05b1zJjoXchsktqyu8a2FE93QM4ffhUfycS12wxPwot5bfVhV/lY1/DkAAxT\n0+C1NDf+Is+5Nu1P4nnF/LZ2tNO84kp2QvhiPTJvUrY8s3EBxXyyHWjdzjRjvMIG\nXDVfwIbFJ/h0oxMnxJGH7txaTqctrcA+QdY4exbAcAbxujF1T7T6HBIOfCNUtrA=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 2AD70EB90962C541A55E2D15B85BFAD286154F0D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbFXjbiCUzl5KQAAAAABsTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDg1OVoXDTI1MDEzMDE5MDg1OVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yQUQ3MEVCOTA5NjJDNTQxQTU1RTJEMTVCODVCRkFEMjg2MTU0\nRjBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuzaGe1Su+WrNfgaX\noAF44ooRPUwB2aEmCLVq6IZOcLUifzs9MzAo40kRH+JbiULfQMy63CLlAyXxCjT5\nqtm5FN2YjlHHXporUujGIwrajvUKiWi/zCELchvPoRJJBAXcQ0UAKWLTGnf+IOsT\nVqaNT0UQNDCT1i9HD1MplOzIceh2VK4IHo4MQtLHiv0jTGvOfz7Dk1SWPoqNgO27\nTQyCSJZjd2kSCiCXKgOqMwydoh1KuAFSW27sQfjmAFDD2V+01IYshBjsBJDmG7/s\nlD6rBJ8nxC4q1paSC8aR9e3zwKKxf0W3OKeQUKtpWYXRE8qs4em2KSJZ4nm3so7P\nyH3QBe7qpH8vMMaIQYWtARSf1CeJE5ZkNYIQehylXs4tBA5MsCf/JeAhntdLSn8W\nSR8dkzRHGkroifnpviJzxZNJrMZP5FwNpThO8UcPI8QSO5UlnnL0ex8BcjKmqdkk\n0bF8kXm/z8l7NRsyD1CYXqsIyVR/sdQrTtZPzNaaj903VUP0OUu6Xit13Hvbo1ho\nCwZj8uI00tH9ZG+jhmH75hflwWJb+/wblp58iUZz4Z6j36owjWuc/W60+CnXpQjY\nPtqjZMRMV2RyW0hbGTM422Fr3eGzB+FKlscwbbqhfPQsNOBqIeZszEGxifiDfEI2\niqxan92BsRELr/5YC8h+n1vuansCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOJfc1lZK9SdcHiD\nelGSrEDCM3cgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARktesFKL1/xgMzNBri1G2rhsVBK1kkbth0yI64azHzqh\n98BqxalIxYvDJvypmLfapqcKA+aUyh/kfa17myIbab6C1A25WXypuNF8ayclQWLm\nyiDxo9M8bnjf1drmdic4h4Rlpk00fPw+1v+DiDu9qhZPDyyOC6XQs5N1wzowtQeY\n8133H7efF/1jXtoDMstABmSRkSGJxawZa1mUsvhJEpOtl5Zwj64pMT/eT4HwvMfT\ngEpOK/0ef7HkJnFiPA0KUFWqyzFTTxfkDnTFcXaW1AKINLKqi/Fet2Vrb4hc71al\n1K3/OxeoEUtZeyILiTT9RUmSkku/imaSLOTVbmB8QGatMiLmMMX8Ah7uCZ4Zou7c\nzw2Drx3SmB1swke/gOZfiK+2eToTx9Wy48gSind86qsVe7CvWTtgMU9y8X1Ufl9E\n6XLeAp7fPocD76jZ26QD6gVrPmrRG6Z5RqXCGcisHgQKKIG5EedGOInq4ZtsJJ2l\nBey7dSqQ9zL3yLS0HO6PN22eh6YJlMRuKPGC5/m+Gl2UJGeql/G52jAeRioH07XY\n6XARKyO3OH+x2MHJxONEW6Og8Ycis67OgJ93gp0/2sYQTZYdYuFUtihGSsp2D/pn\ndjMd4Xg5AahdlrS4K1pwFck6tXmJHUZHwfxU5bSrtWpAVdMq7JotzFoIfhD++7M=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 3735DDC8E300B817AEBE03503A92EDDFDF1AC71A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbX3dfz6HsQdxQAAAAABtTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwMloXDTI1MDEzMDE5MDkwMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0zNzM1RERDOEUzMDBCODE3QUVCRTAzNTAzQTkyRURERkRGMUFD\nNzFBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqcAmfLVFmGjvu2dD\nAV2kFuIgMLdKrzgEbDkrzA0SwV2bdoZydjsNN4dvTkFh2dDc+FSxSN4digNIZsY0\nET1PeQrVqo0QSm7v3fPWb1Cm8IbvuuRvU91mw8ffq3xc8xV0F8laUiz6j4vHECC/\n17ayuwJs+GYYES3I42S7eDXpVIl2A6X0mWKRp7EoSor4fDYn9LCHzumF7Cx5jnFV\nheCH71qODkyk9RGcFRPRPcmusFOkWn/3jfjBZO7wSvTT46HeTOcurpJAm4Zr6meO\ndO9rl9s5ElxTwgdyotZ+Ejjv9xt+v4x0keANTvr33HznsyDGP1dqNCILsQrNPC/h\n1aq5uxFX3npDrJrcBAhwoZmxsIlcSRbxekggFirIMTs+EZ/pWVPPZDhlwe0L9nKM\nVx3f/uS7Emtuxy9H7LxeomWhkLK8sUo5BuO2Hq2fB6biJ+ILCuAd13KxSCJ30B3P\nkPJileD02Nz3GlvNC3Yb8CSBQhRasn8ya2RaBZ2RaTLeXPk11X2rRcwD2MBOIyoK\nGMLw4Nnp7ImUbKrtoK2o3K8RK8rOAbNs1XskAco6ByGEvVEsDdR02aFKUHSV/nX4\nHdL48VofGPkGgwkf9dbMUkbH9yfVO/JQvvv3asHj77ScU1favpRBKYd5lFGUnYm9\n5XUJMLBL/oZYGk0OmkBiouyvqIcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPiLVnAI8eSo6Mpz\nJPcZKiQzuz4+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAIc5PXbdKxnaAc4Y+I6B5j2fGGB1aAFxLQRqryJeQldvq\nM5rzxetAn1vPRaZg3OgslpajiedV87R3miwhUqZOWPwOLQOY7VI0CW1AQgDYTFBI\nDrK+Fp/hWU0lgIzEu/lk4Tp8K+HPuJHRyuwJFMGdfR8w7mYIRrszfmMZlgVSY/Ry\ni/pwkSQlp84KiP6FQfzMkDoaDNw456Md748P5JRSn2F5A1UeSHEVRuQT3+vXx5Yu\n5rR0sWogyBZtKT53HP8BatnCt/SwtfUP8INq1PC6z4NT7BzVstdTRdQbRSf8s2/m\nLCdwoJUrElr3NogLIC9hrFa80u0ov0QWvIjuFmaHpFh++GoWyZ9mPp4xTk2R4Ksr\npuxFJu6oA1NLxs6+6f8AigopyBCSvzP5DFXlZBKk5S7sqpHXTlsqMHh99gkOd6lS\n2x3GYJLt0Qf9G7eQnRt3X3irYvg+9PNCv1RnrGHUbpoXS74zklG/AvhQ4/p0HCmc\n6S0cK5ZLCC19TltqkgzbohZjrerQUAfmAcRVCdFLigTKkOjoWUmxLDQiSuqmqtQ8\nODRDgusmbOCGh3j+GpSEecJE2WI0/JsBEtKbl9GNHlZzrN4AK/jtDLyQQwL4+Oyu\nd/gua3PamUK3aYg/A3kLyukP2UDndiSRsyJscd4EVnZOV48qcMXpDernmwqUJ2o=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 3FE3E3E0383ECB899118188F4E2B9644DBD39A3C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhIHRTLb2n6DyQAAAAACEjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxMloXDTI1MDIxNDIxNDMxMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0zRkUzRTNFMDM4M0VDQjg5OTExODE4OEY0RTJCOTY0NERCRDM5\nQTNDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAk+Ixzym8EMhYVNKT\nob59A2Wa7m44r5Fbs/v2Uweopfc/2R6sLG8Vfv24GW/III7unDf+6s6iji8OlL36\nUL6iLzH+6tZt7RJnpZytr+IyR/HrX0XO7RGznhpNBhJyiL5qr98PTRQX4ql9EIAo\n2lg86VYB7AkpvCvew4sz3F4YR9uuD9LBSnPMhmloIixRv5BkUppXRJjyCtaRVIVA\np9JS7Ts5wtCcST+ca/t+Cg2+IJBfSFCUUKwhMXLx1TqXogSjaug953uPm3OMp7ve\nXD3tvFiqAVozxqx+I/Nk2gnbGtAVpD4wKmAPGTSbzkcaAWOdRHfdUnombQvSPA7Z\nVYPIXS2mxU7esxGkJ6n7OvXVl9HiIka4PbQnDyIXr/dCFkiZdGS+lXo4YDbCcx9z\nPuV/eGUj6lKvSn+c2unkO7KFtbuByrQwp8gLZ6GY5Hhn4QWb4CIneB5eSXKb3mBr\nBv6+CHVy4ETxMHLYDPuLE1GAoUELDfqbRr8lSg4MSeADl53lf45Q/MmyJZY7Pfs0\nc5hD0piVotTRHFS4HUaLC81L9EqRjQNMjRgJUT9mfj+0/R1esbnKPSv17IfRQXix\ne5z99G+UkV1UO0+Ch5R5f9o8zysoxrW69tvROXaQ7OIwdVVLbhvHE1em3MvRMVUi\nhh/Vg7G6NYdpCfO4daESPatY1JkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDV9fV4eRb1xgejd\nsKa/fh15SqX2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALiAchulMI7D2qGDOZGkW45cxdaPAnen0i0EONpNvX1K7\nKoTyDKUqqJHJQN3xDu5tXM2XmNAAKZOifTy0yHdAhCk6ucN8761VqBohv8F5XA3r\nNK8jOjH0XvERBhKcTwSYaq9mnmz3f1NKBAUMvUGdJpfgoNPZQmLRvBYWkXOuBJA7\nXucYXOMwbe9mu9u/tJ9db53ZzetPhSg9sPzBhZQ/ogndchBYGPkiWethwqaniBlY\nXYS8h66fzX1vnGx0u0g2eoaybM7+AfjXaLdY3guB3vuokJu+Lb0cq0ldCoJeKb9P\nfgjM7y0VonzpAVi6Y9HVk16UqDupqeqrNkIDmKYNS6wbsLflnyuNcbaGjLSWjvH+\nSrKFA7Z0H9LjPCtN1zi18HyMOymKKljzMPrk58pILmRW0EzyY66JJqEgj7wX6SOV\nvw/zZ5zNW3YqdulbJQtobKkdIBWKAmXYfit7F4Pb6ntSJdA0ghaKDa75tC6HXGax\nLkKQrbg/gmN7XwEhn69tgMu35I3XnTNNp6eeoAjId60r7n8/O8+uP/vou4SmDnw5\nvOnHPwqof3++CUwt/1Cht1s70jaEYtbhqNXQuE4ZZSnbzd7BZphNJgPQ+evXFbiT\nptZRiJ5RXzm+/zcHc9oYXb+2bRCKCsW80EI6eVhKJ8FfCzSfpg4e9XqwQWlb0sY=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 4AC90CEE68D4B5729DE4357D2C475884F409B7A6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeLMJMNdSTq4LwAAAAAB4jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyMVoXDTI1MDIwNjIxMzAyMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC00QUM5MENFRTY4RDRCNTcyOURFNDM1N0QyQzQ3NTg4NEY0MDlC\nN0E2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8o7p/92sE6L5Re0Y\nGwY6hQHQX0oVURSBD0/EpPien8iNZAxx1Q+3NEcMJXW8t6+tBvuPFx3T7ybjTx7v\n5zEJwK0H9tYSLvms7I0zAs0rFSq7W2EoplZS3+UFAKMA2Wyx6LXxyqeebqOM7G3z\n/BaxibvPLW3ZCDFTYSUUHCZpiRIOOhNq9wwwGUZvs6tC6x+H18Od7TaWhfN49IWx\nMXzwlnEggORxTKs6Cv4Mu3C8HY6x8vHJieJwfh2AfOL3KQyVs1pWq4oY68o6vph1\nV2lqKn0jECB/54QKYJ86mDzqWlxNJvOi/d3aANX82pPNVEl/4FUtyTunwXi+GSU/\nkEOGeBuly50PPkD9FwCm/Xtjx78H0sfWzDcg6LQChezukE0t4zwIQ1e6W+hzUOhp\n4Vd6ibcvUUqimQWO269IzSzmGHbdQfEJKuUU1+SKvC32r9mPUvDP+w60X6LmvvKH\nmft6bJScWWGObzNE9VgIOjHsYh+Ix0urNzOR0zxSVDfIgJAHVghDR+hbk/JVH4Si\n6kicbDKXvSrSlMzNv9OoFzjUbaEdfLct/9Vys1T1m4jOghM4b28pLkDsKd1DDCTt\n3F9UwKlQxZZTjWqFT9rG7Xe8ztgygn71W/8jWADGRxLMkv8xx0TDUpj+sjIrpGYA\nxzsy9Z4ZI4qOtolBW0sx+A8r3AkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLWrHXnQ1+TO9hyf\nMtUD6gbWONdFMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAVfKB0ujmse1pDjbDgY0Htl0bxQeIpdvJcL702BnJ8hSX\nQgxJps+OktSxSQi26kd9+ZNvOeEioBgGCZcColDpkHH1FcY0zj0x8A2M58+b9YVl\nBjK3eEsqB6CDdTt8D94eoaVMvrRqTNTVjslZbZP239URqGI6HGzA7+i8Wf8EnjJo\nIX9TEdc0sjAhmANccDWgy0iphzH3i6yJYfBraUMD62jV4yxNa/dnlrDWdvt547Jq\nCMcZ8A/eLXcDeDftd7Km41gmNaYm9XOW1l/neTNAcrpssB7URFNo87ndmWAUlSMt\nqDMq/9J3SOytNRohS14q08uy/Nmt0oSb+RSA3TsIBvisxHYJPCymil6hHw89BQ3C\nppqWTDdnpEt2hYsUf+hNvCIodO0NxarX1Xh+BHy84d+dr+9P6ZctRUlA1wnkQ5ab\nldhlos0BAWwmAbZod/poeYVIaBTauU/XYPJuS+S7YEH4r95GPB35VK3A0mwB4CNl\nRSqTX85AqDdds1nfQkhy0wdQwGWTFf0vbYnnxtkyV1NaepMRL5XUkxksRr/AF9hq\nJpbq0We9TRGwqcj9EkiLHW7wQ8ei29Dj5QDIAx3d/5tGb5DGJ1w1L9Tm/tIS+ZKa\nj7vl/eid/aESG+uTsIxhb63ZE85jS6lg+f39bMcLVBQvQQ4hgO3Ps+Y0wxV01xI=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 6DED70AB841AE9C22A03647FC8D1482188D3DAE3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbJopnOuDqQd0QAAAAABsjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwMFoXDTI1MDEzMDE5MDkwMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC02REVENzBBQjg0MUFFOUMyMkEwMzY0N0ZDOEQxNDgyMTg4RDNE\nQUUzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4GFTrjd+XXVDjAZG\nEGZ4/xMdMr7/diubUilkrfAKZlNX2YwZOTLHUkh9NlxttdRI/PJPzjeTtJQDEf8b\nsvJ4s902QM+Lt9mmrN3KHudCi9SEVG71XpzZf8ROUsOzZSdaTw7Js9ef480Z6kQP\nYLzjrV1l+20xcs5/hioQMbQtweUXo+UNOAw4l1zGa3Lq23JyscgWm93B422vz2DN\nK/tVDyhdHmsruIGPERtfabDorggrL8f5MGGCcoi3BULhUUxicIvG++VvwVV/QrF4\nkEYEKljGykzeB/j5Bmoxq2ueUH3w46DLXSIwbRrnxmlyCSggWhWgpv/f+sDifFv2\nyOVc4xWOWTxZ60irhOHAoSvA45a3DYe6d5g1gx2WnLraJmcL1Qw++vSDff/d2ItL\ncLbtgfxnjxSLEmZghB9YFHxBGlYBtKh1xmSxAGq0lu+4MQ5T5Gj2rSaW7mYB6pUw\n63NbG9trIgXKOEVdsAC2oTFJKjlHMwwK4fnhzYb/EI5X8N0qEMUtYuRTvulIxoI2\n0j3D4B1c+K+6aInriknM82/xnhSKfYM88EMlK4UAVK5vFMBEbjY3Plo+jSAqIcdp\n8WupX2yuhUvzWdhXNSHwGhCFvGrwXGK8Mk/9DjwKK2cYJzirgD+e/zdohMShyolU\nG0DjH+r8eMGrp6B53FH8u4RHed8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNTMYqdLpbLcNFbq\n3g48fOGf5HR4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAiNqGEUPr/d/BthJymLArvn6wETqh7LejR9sts+7SGmhm\ng1W6n84RFUMKMwUrn64nCXnmbuVR65Or8xi7ttyj1PEM+/FJ1UV5M27SBIUZiZ2I\n4S5zj6zU/NNdav10WWCS5LzcGAhx4V8bjsLU/FeyJUxlb71llo63jsKhm9FOUov9\nC5jgHPGlFCKTVUYuvWc7VmOfsd8tKFbxFLzvq9YbzUdkO4giJcEyp+X2eQ6dNcxM\nsE8Af1zTYtvHSoGmvNkMJKRaYa903wc1Ffw/cWeeFotxoi+EkklYces0mRcxoHF5\nFJpef+j/U69qtzpcvnIqD6Iv0Y69rxKwkBfAztybupk6KKfU7eUPnj2u5TCkQqY4\nEwAiK1PzKXOR78ow28vdq07cZHGg6zEQB6RZ6QGBP7i97XY114UzBnfxGIabhUZK\noC87iJxOq4D61sZazKZW6o3ydzp2WN3/VvzsSj4KVn6G7WqeocuSJugqeqLQvnNb\n+mOBUBfd7ym7jAwSDC0vNjp7bTSCBKKo2Hd5xa6LGEeav99J1bmoqR0z00eeJTm8\nLb2QozKRAJ9MpYz9YEIF51IIctONREJVCIMSyUB4vRaJOqiSAzRrFLUyW6nktMTD\nmuxWa0E+nPTldeYpTLB5Vgk1R4twp2F1g/9Da1UbifP0wzJizs/U8YdUQTU/5kE=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 73ABB81A0225456337F02B25BD39E658B90F00FF 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhbdbTd45TewqQAAAAACFjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxNVoXDTI1MDIxNDIxNDMxNVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC03M0FCQjgxQTAyMjU0NTYzMzdGMDJCMjVCRDM5RTY1OEI5MEYw\nMEZGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4W8OcyWSdzaeZiMj\njY1H6RAVp9h04W/WL3KvITEPVUGkVdEovykzVgDRfZKwCiZvNV6/+9+C7tjaZGMG\n90Pp2MxypyvKW3dAJQJYXbX8/dzlhejDSnQCNjwck8ksZQyUW2p7auvJ+wDP4jhR\nsmk8oON0DZUl71uiO3YJVBbwYGuL8sEA4aES1xs+oakj+6tAbrhZvhJQlJwOdI73\nHdcRHxIHGywbWnoxzSWY4gRn1QCNvz7J1qdQz3HvzGKEsH7/hauN2acnhaIieB1W\n5FxCxM3tthRgzen+iYoXL8AuNf6aWuvs8LpAlVaWqjWYgpiKJlNWqSrxc/svg/Qa\n8aM49CQyg7YrO/x/tOPYik5/9gNqfMqrtwMxuR4vss6S+NktlkSrATdydgwh06ma\nLq8lX08bYMRUwODXhYDSS/rLx+avA2jBi5qIDw43NilLJDAkex7Mrk2dSRqqFGIN\nBv6cerUpESWbJggMp/t44o811Iwm8NY7vC3oNPq7Pg7OM02HcsBjRmlWWvlbDnbb\n4fiVareUcg5a4MMiRrj+VcFrobPRWjUBCaOa8+wx/AsqRUxgQISnjsi1EE5LQzQ9\nM4SvppuUhf5qGt3tyfRhxJ5S7AnKfD0pmtOJe7OzxSYJYyxMKO7OE1AIsB14EDAR\nHwPAFlpCqn+mrQG3iQWMmt0Sa2MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLVuhljNo5X7sxVf\ntjoYuVTkZVMeMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAc6CvPKN6EEx5HAmQ7kq2ERyRdDZDWxXSnYpf8kkSwUnZ\nzjNoKYdxhv+PrK9X2PjX9b/up+jg4DYjlpP5j4dOUIV1wlxssbzK+WPwweNgZ/Pg\nIOXyQGgWyfmgGivm3+6Sm9zp+EgiSgrzilTx1n4PJqR9Z2d2ngTIEMZ/DPLb6tbf\n+ipCDAs0DtrdUpmgNo9nTG6PuQiN3LMsbkvcu4ceRYdmSNz4P4qVMV1GiwPHpwnF\n64fOgHsCAEhqgaTuHkfBLEGBWIaEQyibrFvB4guDRT3hzPdMrMtqan4hA31f2CA5\nuFjYwUom9sQFg6xGP5ZJKxpzEDo4XZskBdFPtUC9Xn2TO8P/gkxA1/RmUCULKvqF\nb1Et98/cM6Nbs3B37Czd7HTo072R6An9Tylmv195rxxsSkWq/71TM7Bj48WwygBD\ncDOF4iuM9f8e4SpFebX9Ps1k7xXBsldEqpQ2Kq5q5EdwNt7oQBP4AgjZXNMYBLK8\n25+HHsR0iHgU6VPwbLB9rjqHEyEJnK4DDf8QSm71FIUCYgKkOnI5535waI8N+XC6\nnRr1srMWrarjx0r7CuuAgMYRSVPRpl06mNupvQ6jPjV70RhbKnEFapRjdhUKnYHy\npMo8tqzL4hdoc2358kGssBjLjF/BWOSVPWNjAb+GROqDoeSUfeqGrYghM6VyoFw=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 8E1F3B1E129D4ADED7631F5B4A2B75828AF28128 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeS1aH/+dYpZzwAAAAAB5DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyMloXDTI1MDIwNjIxMzAyMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC04RTFGM0IxRTEyOUQ0QURFRDc2MzFGNUI0QTJCNzU4MjhBRjI4\nMTI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr8IlW/VPTym+H3FT\nFk4Z8ENQJAvRuS9emdA25Ahy9ROc+mii/Yfw4fDWc0c6wbGuUy+QELf6q8k+t6uR\n2D9Cr8ZXKuXmZzt8ziG/GtUtxT6idjA1DEY8UCgk706DnL+YivWYnwqMMYEWEgip\njmMWk5S3R/mWZ5RVptkaxeywgWcYme009Xzf0XkyZWHwxf7DHNXmDKP3o5E2H++A\nzIJC5Kfhxo/H5YqbdSMvfNWrbu3kaTKOiW3yZqK2jo34IuOvNezGCZ4/JWenc3fT\nFOnoZnTHQd7OiQ2031K5RBl2gQgLij89mnGSOpiYZLEx/ELOtsO6yNKJOuqyVAZW\nb4JFN3X5n4HqdpcWVcWNyRpjFEhPtcLoopTNHm4H5ExEYIUw9oQA/musV/6YtYmY\nsb83soIjtzjYpFDzrncKkyCRdZTdqXVcuZFFi6qolHPzfFo9RWU1SI8Im2/T3HpA\n/6OmZV4ZWhjgAXoAO/KRdRrssrcxvnIpuYwvjY76xzb2lKbFttsr0Pvp1UriH+Yk\nvB9x2HnyuA9es17x86OnkFwHx7Q+TYRvIYOotDtqLAQazcyaVxCjCFXMUuCaUcQ6\nPW5JFXJ7hZOIX2U0zdEwKFly2w/fAzVXi88pSauGJ5vcTHyY5j9HiH2Jb+ZWmeMN\n2CUq9PfBHLYNGbEZ9quWnoJopXkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCWxwNyAjjAHd/gF\nfpUJigpj0kwHMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMS2CPRpGkUVp+rMwCRwOPcm7ytLismnR+z+Mb2jv5vCS\nAL1zeiSYFKJ0Nq9L5Glo8jvxrEE9RRTnK2C11Dl9RQ3i1sRoqS95TAe4VuKsB0+m\nS8VTV1bCIKzmINAbFly69rpT1vu7ihhqzFnttnmtktMo+w0bZVUtQ5eEh1hjut70\nuYbVTMZ2G1sQZEYQA3oVQzjwCuOTKgJFAVs8tV/LSYgjDG2RBoNdxeH5mtLZ4QZ3\nTQp2+7ONihfSQ/1N0lvWPBbCdSOtw4C3xV2cEXcSrJKKXaVDqYdDJZN7JjygGFpU\nNzb8PZWrA85G+fTDf0P+kUTMU74XAOAf872IFzVpobugB1yX/0vOJjtyh1gmvquf\nhzUVdKuRIULB4OSfu+6EJsd3TrkKOUMiDBD0b0bSZ4J2qQ3qdSxbp9ClHz8cprl+\nD9II394tme6wRnjanR6mrWQbUv0di/pcOkuX1yhNTzOiSwTRQrY85vSCye7Rc4DS\n6S0kt21Tcvhzy82T91EWfhOnkzQAmskk1yBUnKAKYKziuksswgv3x95W5mfvMMg0\na85ZTjMkUMe5ipdgZAJcBcIbXYkmXXNENerGitEQVmra6zROI/E8VcxOtiAi8eEP\ncHxPNcwgxBCzvMXgN7maog2aRtuiqNqekXoPJSjeuEe/DSeLR97JYLoMcRLmUao=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 9532153BAA9D74482D275B1A3E475309D3CFE507 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhzIHHQPc/zxxgAAAAACHDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyMFoXDTI1MDIxNDIxNDMyMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC05NTMyMTUzQkFBOUQ3NDQ4MkQyNzVCMUEzRTQ3NTMwOUQzQ0ZF\nNTA3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwZqwNx7IPA/c9AtH\niTgATiXO74DsBuXGk1T0p/ZEkxVqGk5iVZF1BsMl/yQ9jG9lqeNeHCb4EUCkHXyv\ncsCug0HzjrBReVCmvepg0kbNvHO1GpXeHafCNMaVrUyUJyGupyQ9AUzCPBkWW9Ty\n68bFsBq3FCtk8MSa7g9mV/M/XRWa54nXrJwsTCzrRs1Doa7S1E+nnDBa5CmRsFef\nyKU6PX7kvOLdOs1Pn31AlhRL/QBgNxGkVP5YFneqOiWvmckU0AXA0xBinmH6HRfZ\nnSZDiMKz3PEazF5qZtQ8N6PIe2E41FwpwOxfdomYWkIQwLWWs7N5alycMiK3oFb/\ndg9apFIckiFDDrsUa5z6NfsAvF6gyffZMwxS+ORYaJWUrvxJ2MG34fWAX2BpFafA\nL/NVdxSA53rCdIhVDBsChgU/+PDddqyW8T3Ina9XY9IN9WbSsRRFUvoBan0G83CZ\nKh/IuIiQGf2kdpHksCnp3+q6A5pnpGbuhoCdy2VVUtyK1Ry6aug0cHfhiZWSZy2j\n5QyYT9Z8oz+Yfbouc/Eu8tRsv0wTTcYi13A3/0TF1qTi+/AaaY9zwaZUheZ/kENb\nd2ta7lxXyZ5ytfPAnqYQwRxc7+UN2U8+oWF4w4M9PrlrQEw5dmDM2VCFUwRxGx7I\no/UomWy5MVWkULL/6wE/OrW7aNUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAjmUmd4HIVvQqIn\n7oO0q2c8AM2GMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAe9/V77pzXrVIwJYrQkIfDemcIoKp0xSdenHLal0O8ynV\nh27GaaFay8Xwsfpeoq9ZdS5gdVm5JY2S9eIGyge++tArrf4nYf/vzcfof3pRG5kz\nFGgXMJ/6NgzpDF0qGeBJjkSEudXr5trZdBRqjmK1MHkk8N92KYyIqEtW/87znjDN\n7lZ9gHfEAb/gg0gBss6Zx30tan7QbgcamYpJg1AIu1GcMVFx0/bgtR+itI3vm42f\nn4WGIl9wt03kD4nbmYTUrI6stgKoScf1SChGSUV/xh83l5Knc1YRh2h5pYcO/amn\nMk49mQRd54b8fM3GyXiovj+WxGmbIyzMSSENtqMY2PDMXmVWoKWFgM+nS5qzcejy\nHIWblK+GzWfIDVwp0jHex2FADDHsCMkiX1SpIirdPhSpZanV0djVTvizqx50biwM\n5rZoDb7xdzlqXy3rJ9xKmRJz35zgksJMb41NikkJJHEGyFzExayMJ5Usw/fT2OfC\nFYYkwWjFvsIzTNNOjmSF4QzTQQ+B6dSG5y9U5nJWqcAZkq/oF3mbsvS2YrpcZGX/\naZdbpXdd4zUPxV6d00EgPe5cDf7pL3UYUoFuksNDUbD3U2YZtWvrBdwrW8hGPcxQ\nt7QQ0djgZzFkisDA1bFQ1o3kU9RrRD3gtGmiBui89NbepucThnwYQlbnvx2HM0k=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 97E5D1CD8B0497C04B4655A869C8F30EFA89388D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAmEzYHlRZupoHgAAAAACYTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0OVoXDTI1MDMyMTIwMjk0OVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC05N0U1RDFDRDhCMDQ5N0MwNEI0NjU1QTg2OUM4RjMwRUZBODkz\nODhEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAml1LspKnlhOAnmqX\n+45iTA9V3XDinetqRLCtYhSJL3zmSYDPLAVf8Uz0q8e9pqyLignG8fW09LP5Yb34\ngHxgd/+cYLsRmJnlffK0CnU2VsWvRZQVBsltsfxLzOaLjg73U0CAyA7HSig9pMQU\nn4mD4cZGSMaZOAnWwEzYlKHROsnNzK2jrO9ml7TRvN1Z8Nb27D43Nv0TouMPjxKe\nE1zLHNLyE5Ylw8onNWc4z4PH/PwaiomkDOoRvOWTi9bKMbpStF0apyV8Jb/+kJU+\nrSHacpdVTUXwFEjeotDUYgsf/iXMUQ3v3ObiioQjpmEA5PZOoVqI5PFZdotY3nT4\nYI5KVYXV11iZcJMirYczGJMPfpB7cJuVNWo/LQxB4OgN0TP0OhackB+tl/dqOzKt\nUFdgRdW7OQ6C52SjJ+kNI+6KFixHxkKpj/cbMlqWXbLBU4O/+fvITPpScZWgRT1h\nbBtwMmg6Fi/ADAEyTeiGRkxsHRiYx3k+ldVRj4vZTw1lw4pdcqMum6Fa54Bh/5DS\ni1zEM0Q5HavPluQs9jyDBEX/2zMjG3QIf6Nr/sN8hOHTe/dSUHkoPOI4Qrs01wwk\nuPS9kixEwIrIOMXRT0O7LvBzuXk3UkdGrHcS1N1BE8fCCsURLcTJoxH1zoBQ53Bq\nxUw4RYjox9x8/Ahs9XrncIQgFfkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFsXalQTDjBC1Dfg\ngcG2Nc+N6ZhBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAG6G/CFhaKFmW0h7ngvlzhcYdXqAGXkCUfWDY0yZ42cdN\nPtJmuxriWsqdMEjCGYNglnjW0p5Or/jrQcqT7HVLW9t523xlcpkc/1lUE+J0c42Q\nMYNZgtMfPwPSSup89R/9b7ML4roNBAht/1PDgU4fe9sT4gkwuvErqd7oIXyPxCkN\nLxvGyjNc7pglmdxbqIFwA3CC6Lx9hJOaPR6xVl53VzaJNFanf/tV6eIlYUPSdIMe\nCzo92BHwhVBWqkl4MKwBMwSTsLVMKY/15EISZxWnA6iD86OR4c936l+X1uHTNBmd\nr+rq2zD5QkD860NM6QRpk/46zHznBVug/E3OzOJ2OHxa7bF4m5KGyKOI/PvG0+nV\nZzg9QeCbp/lUa0cIXvnhdBzMgs7C1f8E8Lq1HUi1LLwYPqsEhU1H/TowCHLh5H6o\n54bZG+XVu4uCViBPM0s929cPYrNxO2kH7j8fPOlMI9usQxhqDbQtWEAT7vuIMjO6\nvJnjSS4dTNZ9PHY6IbYAXQ27VkBQ047Uyp5g5yKXRPC8WR/5Ag2hnxpPHhepmxWL\nDreYUdnz50XgHj5nIBcXyzG2UMuBpiYZAiONRNIR65xQS0gfXlfgdUu4dE3mN5/N\nWj2EQqDZ9nRWTwKDjqysum4znM1Gxpat0057Ug5BQov2F4wiAEAvHcEDt8Of2HE=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAVvwBylrlMCGKwAAAAABWzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUyNloXDTI5MTIzMTIwMjUyNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD\nMDc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvZKTvPfvu0ULoCAd\n5cxEBTFdggx1J+qv1QgEGAD22wR9J7+DjjvpMvCYnbt/r1Ak5sWZVNg+1preL5Qt\nAULc/DsZ4w3CUPm6KqbOfbkhgVszgtGnQCadLOEQ3GrbN2vFDyYY0dVW0do/UJCO\nObwJgK/5jmHt9sXlsEp7wsGl+8GJnd7T2kH8p98we6gg9WdNwDEd0DXMQWrEtkBR\nlDn9NHZUHnk2+NQo7zkmJBQ1rYoz8L/fRLsvmn/IpEmPAkG7eR0hoUkvCPV+431f\n3Bx4h6pec2Em9y+YGCY385YePY0HYfMQEvSvmvNC+tleVzCWd7/3bvxe15pG1Grt\ni1RjsQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU8fXM4XLtEjNa6EijImtvgpL/keAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCF3/Lp\np3lwKJr+HboD2UC92+O6QHQlZ0iLFnSKPAXWsnKD+ug6TolimOSIbPJMG6fVY52p\nukkzeJ5/RrjL4ZNXJxY23Jq8R5i7uftH/mt+OhhAoeufLl1i8duYakL+X/jWgfvN\n0XDXmX8mMfJGkBbuNUugFV6vz8dwQuW+o1PZNqliakozsy7OjcqK1wM05Q44GSkN\nD0DxvIbMMnZmf1ZgKJ6rpI4tqvfip4fe2UmikQAwmeNMCFoJi7uoWk2KsJppKPrb\n273Z6YZZlpkDWmBjvqkJ32E1ATDCGHiKnqxsR9PY8ZAg6NlmdhzE4xy/SNj7yumR\n3mtnHxnsveKShlJAcJ3dqVAp7rNOrxgDa9wVgjvTE8IbkM+IZT/PpO+f9RUY+ROo\nt719QbzLgKEa51DuF8HWzbASmb9vg2swrlavzC9f5EX5V2OjBpBp1VbJgOZhqkMl\nGBY7qbDzKGGsLi2GlI3NDyGeeTQqcTwJwHo5Os/stg+Ih2h//PtO8fwn8o6Eccyj\n3/Rh+3UKjRPCLM3PAAiQT79rXx/dWwVILh/vCQtYTC6cHzxUJJgjxA69vsEAXxAR\nmcuLihKb9kQREWpd5yWwyQF3gi0vDCz3qqCygBBgQs+2dJfUMhpi3uqaSgNgsyz7\nKKxAB7Mb/3a8vVy+fmRu3gEROrTu3vlMCmKWcw==\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhUHMuG/tQqfjwAAAAACFTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxNVoXDTI1MDIxNDIxNDMxNVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD\nMDc3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwEGIMJHe2tEPF8K5\nbLKr2SWyIgmKjXp5TJXqQrBb6z5fvndfst0mjOVMG/bHobL4WIJa8CAA3xDBW8i0\nvY4+j3qr0DnM8/F80KloCfhYW3y6h6pW7GGKAdYUsVvh31JkPQsQ2DZMs83JsTt2\nhdnhbmNlCqw8WT10w+B9NfOGolOivSnxSN1uAZ+aMD17cQ4ZHA4MmWsrAv6Zv1ZB\nAIBktHw48hND7JdOtCxM7bDGQLZpqZC+wE9BCbtdZ8TxpDHtKdIBXM+yzcYzbBC1\nrvgWXTaSDFEV3i3GrFMyGch76Ntc6DkH7QrxIWgQibgiu/bYphuxiQVQWymyxrXH\nrnLcCCOVRvND+MSL9Y5l24c+Hg62xM0HnyuLeh2/L1btib+5dgmFUYse3NcMxqcL\n0OxtMkE0tcazR6ckG57ETgfTySe1rfs2KkAMzukwCRT2wGDC+40RL19R+ABeYgVy\nMRJMmOSjKefACAAd1nS0LT5Z0Sna1fVFS232f6xrZlOfvDYztZYcPAn/q68rQgSo\nDI8Sbx6QYKqCDJNkuS2I7pQJ4T0tx1TmjK+/3gifSzs3OpNyqdIvIa/qfYyZeKel\nG5CdJ3q2PLK4KfJV80hPEwbH7rN4uXJWXUkKQWZA3AVq8kMMsZB+zBd3MQ+0OcPj\nLpChz4b8tQg+QfYKQGaaj+K0MOkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEEqEpk/Nqmh1dXC\ny3xLx+10+VpRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMkZaYcpU3iIaq/brsm0NuQ/8vDW3Lx0xIYLQKjLsPCFP\nRJwS8eCBQKUiDk+J4ZUxp+Jo1M5ZWIDz7NQ309gTXTO3TdbLUls+4bDxMSZC32pJ\n6HFQjKp3C0790H48xGpmrRntO1LLTT9tZonkcp5oOS6JASn4xy2ELdMAHPEzm+ZI\n5cl+hx9rXxM+tLg+n4M4KjUywSv0k9eYcZwW/RtCK2LbUIWDqUyT5hYlSsYhohEd\n2y3RHOS6xJsl2XFjr1catNGS7xo0MIrmpCH4/gH1OE4BxFSSPGpd+QawjrCsLbxx\nmGv5xdeDgaPQ/M3BlStbyegWQoEeIM6IfroDI6Oh6OZ5/Ejfhj5WupqwGHjpAyBF\ns0xgNgAHhkK1nwd69LPCiZoytyY6AMg3eYlz55fbMJDrsZjOiQ5wZRLEg4lNRq9Q\n73CC0rOmj2HzfltFXLS5aaeW5I4UPHCComw0RffVb4CemNUn0BZUX6lGuCSTz+G6\nxzuXxE18ZfvzWUbaW8F65hP6R1ZzDvBJNKiAxFSkiJIffTbF2W3Tjnbb+whLjBcv\npdydPvi6mtHqUIDqE/5WdPe00AtthV8hTb+63RjyL1QfdfQcHYzLlNJOp7IAshLf\n2RhX80P8VGgnNvpBb+BIRjbIDmRyrNVZQFjflE8fOtBFx6aN80id5O2P6feUp/M=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID A4384BEE3966533539CD0A736D1DD2C213538DBE 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbhG8SH5lEOeigAAAAABuDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwNFoXDTI1MDEzMDE5MDkwNFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1BNDM4NEJFRTM5NjY1MzM1MzlDRDBBNzM2RDFERDJDMjEzNTM4\nREJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsgRKeHAhAXsYF/SO\nwDxam4JMH+sxnhVU7ZvlS/+RMv/bfYXJBMv7PZ+EvK5vdv3pDBgtauiY9h6NVchJ\n6IJwXwEnsWOv7aAMAUlLH0DqwTcUDH3y/bDsPgPyTn6ET/mUVqvi2VR33f4LzNNB\nXl0DpPxJNdBAQuAwtfWczS9DFSJpj4yCgvvibAlkEMuNbftsPNiBHYOBoh6pHSMp\nbkjskygrB91ke+tZXnWcUgWtlpncPt7cIxn8NGN70mbWttZce+Jqg/eQ9xFGHP5l\nNCJRTvul5eHlQmVs7JA0dRW8s5sWH3IVGq1q393AwytAcoKfsZTKEs46A4m859Ks\nIN4fY0twM2lUp7pMCzldhihlYRc5qMlD2QUVvSXkPeGhf6UgLr/PLnqfZ9XhFnT5\n1huV2w0oz333MT41JLHQl4bmeEOPdv1+aM4wUYQCmaZrUbv1/WgcWW8A7S6NmBeA\n7pl4FlpRetSk2Qo8oAPP/NY9UXk4skvkgSVABnG05nsrevg/BmI/hlDtBSw5++xs\n1BboFvZ7QohBHdTndLNt2z83ATadqtSv3Ta6kXl5uXp/QFCdnrj3mi7Gz0W28xiY\nFTyfb9lwkH4/7BjBxnAVWp2sLp7LWafo68trfGFjxmfNEl7prWm7QWPK9YhdfiyI\nyYSfcf+oVlchwLUbLqtYV+WFJA8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOp84Xt5b9ylb91S\nJV60gaKBNtgiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAj1zipxQFij7kmeUnyZS8F6pWr3DqIIM4qMOlFg8EOzrv\ni7slkxAdUe41M2vE2+L9egU0Ud6uqn60e5buPDRj8lYdIH8lEh5ke9JzXgc7yODF\nmNfNU9JZZWFzZVUdjK7SAywzCxEdngwUx+/J9tb0EL8jTBv03n8JxHT+wWK28QcS\nogvtZW1p3Gh+cE8SM+RGDf7q2xZKxSNxf+UX0Cx3XxG4JebuzBx44SCaUG0xfNPF\nuFQ5RZSnQZGC3EL/QWZyCbl1jSGb6MXyQsTcGkmXzhO93pqO4G0qhp7oiDgqD7OD\n/bbFPBtOjoGlLXqxK6kP57P5ieTu8xKqkS/oRTxPldndKDoSeW0DPMVxouz7V4hJ\nz4feOfW6mvWyfVxsW9676v0GqZ4m8s+rqJTQd8YgDebqxt1cFnNfrxLG3aRuHepr\nWIRvE3Nj2O+/bKZsf3MZ/eDS6u8hUGWWnarwoLvoxbGjAEyndsjLikjBwjGpQtNJ\n1DXzajRODRXVn+77qMXWvXbUzckSq3PlTb2h0QuvrN0kLN4ZI9qykvtEEphb1MoE\n1n7wMIHOVR+4LgfE23BS2pSSs9rPywMzZvmsogcygCPba2EbLqAKn+9Inz5SoLm7\nKEVKnV43jIsHtjUTBF7UUknLxJRjq4rqUhXK1ZeH2FzsBf0KTdMBmEcfbkdJqJk=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID A4D18726364EA2E3B278464CDC7FAD968E015D4B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbfmoZNUb7mAnwAAAAABtzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwM1oXDTI1MDEzMDE5MDkwM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1BNEQxODcyNjM2NEVBMkUzQjI3ODQ2NENEQzdGQUQ5NjhFMDE1\nRDRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtjb+TdYaTIWtcMbO\n17KuOMZ30CJz5Y2eNHGHZlD4gq1TjRikF62dW2dBWOseWoVfBDgO9RiUqMzd43aX\nbp3o35DP2FGqFGjU5LZJInasMUrQK5lkm4phjk6oSF3c0LGIHugiOWoYoXFISm3o\nqbWZiiG66snWKUi8jVNwSmwVGM79AgfegvVbc1QFpKEQdwofPjzQInyDazOtbq+7\n0+OOzU2I62nEdTATUKSbZGUqtBdiZU2rtwVBUb0r4K6yOtpIVUchlo41vIits82j\nmBhXEYZoF8UTQ3f7PYOu+5WlNOF6/u3eHwwvdvSpczqLh+ioWtCzrWLEh/94S0cI\nbT0Y6XUzTGR4IQy0Svf2eoSE27UzHn6BG1S6MlFMO2Sl80kqgA7GDmJVG7B0VfAG\nKG8nWwNTLN2jEt3KJac0QpQmdjGAvx3uI4cB5SAPSDSnhSUfd/Ee7zD7s71J++c5\nYmzxRHRdiE9ppqeA2qHSy7laQRmG8ELYhRBNTjn+MTNkYwRS14rjISoH9sw6PNvP\nH50c/wNIDK8u7W00UVTHUWN2Kf3oQPkQvkE3dg1THeEwnTr0ez5fGGnCZUaX6PY8\nPncJRMQiQdH3bh/HCuKE4maStpjHwy0pem9dc0m7fRMkeRT3irvLWjafe/uP1FLM\n/mMby9LpY8M5hi3q30AN8pMW5dUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPl1Oxfb2rNfgIg2\nXa0Mgx8KzT14MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAGG7roj3mv9KlllYs+zvGSYmjxFalqB7O6QfKxJDOBEF7\nndjkdjajX4Xo1xPNwobMUwnE+1Daaf4MoTsKwgMg/ht3nMXWBL2qpBv1CtGRlPXE\nwcoB9O88ufkUKi5u5BCwrQlKXToVCeHimBOLsr+ktnWvnCY2lKm+LfsgzzbW8Xku\necK0KPTznci7XHMrnYrFqfCleMGeiUqKnx3CTKygZelQa5fTj+weB1yHIHyifD15\nV0TxpZz7mZpBvQoZmMmA1YMsZRLJ5kXQiy+q0xykDm4Nb/e+HkU35Pu6ZLR5lwAc\ncpy8GdvTloQ9UNY2ey/OQWisPnHl6P9rc/KnNIwcEkHoUHsjXDD2yMdc9Jb6oQ+J\nwFMv2d7nX0v9sx2CPIazB3v57rjIdB4WyuTNxOXcXGkf/9fD9rQg95ru9HxuYPvP\nHvKlMgOBKChNNmhojjjGY2WJ0+EfoM5UdukYASR8RUv2WpXOnNNVPxfspi26z8Sl\nUZ+TFg7X2vyc1GK4OafAtuvcO8lZZtFdxxXBjFMCN977X8UsHLl062tlCf17KygP\njIL636pm+fxr6CdiEH0jgxTYmCXoXoVB7PrzXa3hQaoLEGBcDKFsCYhnfFi2Spn5\nkkbCI8LdsosEsOVin7WDIdtUxBSW30ezikkz+/D/WQemhjRdL9ysNCxUnot+3Hc=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID B02981157B6D7CC3210016380B898950524350E6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbprjOwG43pYeQAAAAABujANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwNloXDTI1MDEzMDE5MDkwNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1CMDI5ODExNTdCNkQ3Q0MzMjEwMDE2MzgwQjg5ODk1MDUyNDM1\nMEU2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwqaeUAppMAnryxZO\nDlJhqo4fyLuVpifQESv3wUqm7jN/IEjQxoB1Uf9rUci/leAAgMI5oD3qc2MIfe3/\nRtaDKWOftpVt/eqEWf5lYRX2MJV0So+Gxn+PpTk4IasNi8lAp8v9A9CDxQGyoN+f\n0426kC25k9ur5ZHCYXQDDAB20ZbOjH4gq2M9w1HDaQYtw5u6iqY9rEEZD+e4gynE\nacGC65VDsKVQYVVnWjOUOxhy8dLDz72hTzI/+aI/axpYTYWjjfpDcC+RbQw3HOPm\nmenvsHJj4GpOjjDoZEmTs4PcH2kJHPePQBRxvQfh/LlPjndmPCznNdaGwvDsvn/k\niyQHhtghK22eUri52G5ZpRMduLQpmbvrRj/DWvx+aoC68HhWysECQcdp9FMd5r2w\n/ve/LGpBa+t7/h6110aZXwLM5jc4AvF9Vo6CjG4heZsQFScLwi+FWfNwXWBa4hEX\npFGwiSSgxCUW7t3oM9ViWiEljR/K6AZZiBX47tQewQe3bNHlkGNLi5Mpgp3RNJ0k\ntfy0ilvXU6Oy9UQBrftoP4N25OBcFFnppHjo/vkcEUvpXkGAcpm6J5NOsEdChTpU\nfrt5OEff+i6kDPoTjbIlH1TMbBZdXPkxQFuTKRm5bU7zKoyq+v+2D6VarcvkduU5\nOYYeRHha0d2bU8Ldll4FnBH1OcMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPIF31M/moHZLaQt\n/hi9q4M9bnAoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAHoJoUimNsgpJqxpYuJicFuyThl/yjXdyBarzMP+hC26e\nTHH5kXG5NM+EKAuDbSDArOtO49zx5oxtSpnWVUfMJezyR9q8I5sL0ury8eJ3gr/Q\nqB6CQeirt8kUgm5jVza1FWBqRJeFh+zUruSmOCsYAWobvpFS30gpCp4XLdRIsHM/\n40kNLToO/Gt6vMFltmjI9itXp5hc4MeucQpoOIeNpJLp47NiMav0K+P2xUFX9kDB\nk0JTnJuHJEpF2XPo2lsZU39MurHGlDKCaNFCgSH28rem5hYgpNeXvCKjszQ4TcaZ\n26qH+1OA1/Ocm1KaBSB6Df5GuDfR0ZMV2PRHhbEIDwUR+wUVZ15ciUbS6wHwfaso\nj7WBo9pDhvaxLiKkC73iawwQD53Kwutfro5D4qoulsk8kI17Ovy3mqqo5e1kIS1c\nGFjTp9vSY5hu1qEbQnKbNpa+Nq1X4ywzAw+OewyGtomIy2lc6G7loaHTDm5c3Nf/\nQ5nmD0LJK1NFjpVduGZaxHD6trITTeXz8yvWN8k/FepSWbAP+LAgkhmAvk1yjTkr\n5j/dgE/NjVKswpnraFdjkbyUVkrppl+bsOIpgmZW4Y9Wmgw9SshtQ69+xiJ3jWvH\nTIL2BqEIOgDTf+iibTkjbSalyagl8w+RlmKJ5Yyx2hyLU4/8NBniwtYl/ihFMek=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID B080359B59AA938800A4AEBFD10CC70CF01B1B37 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbmYElIbXpPhcgAAAAABuTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwNVoXDTI1MDEzMDE5MDkwNVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1CMDgwMzU5QjU5QUE5Mzg4MDBBNEFFQkZEMTBDQzcwQ0YwMUIx\nQjM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1bypPi4gSD+YnEvb\nYn7UFuG8p5DBf/ANllT7ofpsAAtAmiFn6IbhquezpbaXfbPAWyWD5Kw5W8CTIbAs\nbhlV4XQcecZ7zwGJ290ovFabdGNjQavqF1f+GUG+xSPFvJnFaRlt2BFmiN/0w8VI\nGC/pnGHGrSupp7TeBX/YIuCU0BYWkRFOPITjRfOMLfHw1K65JvvF2qk4KBIU6p+2\n/jCfnQ4+tKLV5krgv3MZYlraQYjAl4OkycJXG26CL04eNOSwQjIazGCIX83ZywZb\nVb5cOwKOOZEvtobvRjREC6jud165DCDDOXvrF4tzdQ+vx3wcuyvpCUjEKOlq9YQm\n7laEOLze8nk3MBjb1ETE3EJkMUQUBz/+2g2yfeg41Pr3tBB+kiPa1eI1NB43p5NW\nwGIz9Apxwfi6BHb+enSHaDfNtDpvwHFVFZ5smvHr40Cttf0qCs6pEzdBFCvia1+U\ngMifOEppGlZ2kKhz8O9SLZhBpWyBezl1wlBKGlyKsLTpBdqYX9gRsjzNKFRkZetF\nitouHgYAejiC0lgHt/rFniK8KrMwoFFhnGV2ADjX3tSTX/4np1nH/pHLm/1hpW9T\nSaoaAdsaQTCyXgCIz2qH+r+LPSJeC6xIOx9NYm5ZhWt91Gx17dgsm0ksDRLPY1i3\ns12JO/cJBL6c01xlnY/7HgsBDpUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIUqjwQr7Tx7+T9Q\nA7sZeSQAqY1VMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmYKQlD5wvPhvVVJMKqsYWQ8imyaRYs+fGY4awaaglbil\nlChmD6j4PIBaNMzcI+GwEAJ73AWNXlbJeMy1iBBbJbMCrH/ZSdP/NrxcXJU5vH7L\njNzP3TLinxGfURdf5v0rc59epAHGkVltD/de4TM6HlAEBL7lwGwWst6jreWJOFqY\n87fH77FK2+L5DSCy3IqMtLYKcwIFqTWqrGJo3EzTEY7WP/8ENRLtotzczZOg6wkB\nUdt/esMzjC4l5ZDYuTZO3JwP3N1uBXu+CRSjPfesBKA0nMtKxGdGZ5tHwFzGkjPq\nt+ZI1E4iF/4kAhT5HOvK4CpnG06gEzozOk5fxhY6gwugdJ5zjbVWomjn1W+mranJ\nazeblO193OQMhNzedIecAwyLD2RLWZFyt8+vuAFukGLDzkzDWoVOrUFeaQPgaoNn\nDnroHO18d6CCWT8tKIXSZi882IyxH9ycpH8JMNKl58OvOIrzU1bpSJkqiy27phKd\njYT3VSYMEK2IvAv5VqyKoSo48OGQspuTyhAPU1eH61ejSgmtLJYwpcsXUTjf44FE\nbPhgAEO9thCrT+tVMcyWAZOe3J2itjDiROazrdhSiF8PVgipVXDAUxrL6mhLLGrs\nIXr/EJmgsEwW7tZHPD6pc0NjXnNL+j3AruUOwOX5HkO4JxNvO6nEC7uphHo5XtY=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID B2D3CC08144C50808C289D119627479BFFC0E4A3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAh2nqiZC+P6b0AAAAAACHTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyMVoXDTI1MDIxNDIxNDMyMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1CMkQzQ0MwODE0NEM1MDgwOEMyODlEMTE5NjI3NDc5QkZGQzBF\nNEEzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnozSsyyOOLPoivfF\nLaKWHaldpKBOkTQb0c3h1jC8lA3WHfkihH6LVcJUQheqWIHZvMEt4FUFYM7Br59V\n/JCf5j7VI6ID0jgwZ5QqCjckWgh/x1iUB0V+piedDJj0IueRNfFgZx5wPtPBom/7\npHmMrp88Hgg0er0IGSnInpVelftZUWz+KbyRwDjMfQe7G+vLL2sfwBZjyWoflhAo\ntEClxF6tYQM9T/bI/Rl/GECQsCB3Q3751MTnM1Y1Bwqm/NTRYX+5t43WS35mRIiU\n1c5QbyL6j9gT1DyVp1y2WfpR6to+kErmsgt5VLY0OfdOPtu8yPBPF6GbCTyj42wN\n4vTdlK/OGRTznKnfshw06Tq8OrZquhAagkvgsVW3YcIYoVCsI2kYHgb0X7Mw/fkw\nxHIkASAq36qhJK7uNXj4s2CNnYl6Bmfh/86rod41QzrRBQ8WEF+LAQD9AxeUtb9i\nyljZjt3slLdcr5jWqarYAPLR5jMNAcfNQDwcXvigciR3IG/zf4AX60qu0plLfC4y\n6brnYfkb4Lk940PAVxTITvR9W9gwennpK+L3CPLWZNXE13fBhhA09RVtZdXgVCSO\nmuOeyCnDBC5s7oEDaYKP1TVGk6daAC5LV9Two1+izi5/63D+GKqiOWKhCrYDQzum\n32S+P+C7zoIKGgxHUyXxl1Hyrk0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJXrVsG0R/OYr75B\nfqLnec1JvHYMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFoJQF0xyrQwJDGT+joG47zhZwpfIztwNCMyyx9KBTNXa\nB+Uqk6s123cZLb/MqC8WHDUui4Tz9l3ebzP02MXBwpZzTA0nLuOfjucZM0JCjtim\n6+HOUV6wF8v0uf5OXsoQ00J5nVb33m7e9Zreygs+RELfiINaegkpTwuh962xe9x0\nue3ihaAE7+6NUw+9h1aSKscYb8gZCpZk9l6ktRY+IyD0XyRqQ6zNEJCnQ8yfV3Cu\nOa/uHK0p4OlSehGlAhI4/TIWcY4JFyUelLOeJSnPBoJBZwK1XjZ/Nqtyt1Br3H+0\nZGs1BzfmFXs0XTNNVP9d7zOTYHZmqRNVgZJ76B1CUuj+p6SFUiy1DuD/y28GA4B3\ngkgggjWQzruKNCCB3NG1cw1esCa7J8YflcmioTfbuB4zzQyYFEsTKDC8+ycvzCTJ\nawYcrMYgCbVdLQMwrYiYWRnBIFZPxEg4Ibs21erLO5mFNCSJVw/ub6F5sIhSzmm9\n9a/f+M08aKxszk8wikXYaqMOS7E4Bs/5oHgMaSX903uqg77WrFcKw5iJDptNWpiF\nPIp0OvMoXSKDyxKPPLq/h6KMvq6t2sgxA9yFB/Lccnww+orHqcDzOLLmfB4Sj8Kg\nCvzxs47B1uuaYbR41kIh3udshGG4LQP+OloV0AbHlW9ZT0YamaXvrAlxUyuXows=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID BD6C69C0759EAA95DD6D156EA64170C4B9B36C78 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAh5wG73syWAFZgAAAAACHjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyMVoXDTI1MDIxNDIxNDMyMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1CRDZDNjlDMDc1OUVBQTk1REQ2RDE1NkVBNjQxNzBDNEI5QjM2\nQzc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApo26K+S/VkF/g1YJ\no7In1DjP18sl52TG+4SFuzTCQXi1nqCZnM16MfihtlU6gXFqsT8Kbinug30szWb1\nIu+wv7wt4L+OPjUAIql9OkkdO1iF8AauPsuce9aoJZorvKys/FLbKzz11uG9sI3R\nY07r1CclHZ5rZm4CB3olLfTPa+kOyUQuQlr521TKQceEBkrBq68DW162gydeMIT7\npLTPU7IXp5TV4gu7n6ay5b2SWAQ9jKIeadVtwL8x4BVgndo2YPk9NwT0XBAcWg7J\nV7OMdp31nmvTa5D691TIvIj2pdNiS4SjQhjS2hGkx+0qRq2rWzdC12WZ4dGgSu02\nIEijp9YQaG1tNkyrIWgjk9rQO23lkdk0Bgk3LwZ6J4O7CNXN1KH4FyEIiBayb+dV\nrhXP6H4reAifhpoVbJf/Lly4/NsbcVaz0KsusFXyNIgxyTkfEdhE0a9YMOnHxkP2\nl/HqpBqvDVoeGlGKz5Cc2aotwZeZf/Tj7qqgnk8BnXcGaZp4mP+V1GPPO0X1Ym9a\n5Yerx7/m9MM/RS8Q5pzle3RKxIuVp7ikh6p9ozDo6ErEn2QtCpvj2rxipKezArm7\nEoueGt9vs/JjWNieLUxjl8efWSKkBeaqxSFHVijkDjsknW9Ez+NPfZB1LK8utBdq\nlyVBpjr6MjbYqvnRiNZrbM/g9LcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNQuq8LF21ld+XI8\n0PPDn/UJUhlgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAm5lnUjOaO4WarV95hFb2FSeFP71m4YacRPrS/yPbbgXt\n0UYcPmP0KTKySjF7RZdJG3ohv6KeSL6H7b3fJLAtv5KrZFrvATymvDWL1ZhNYcHK\nJpYrL3cmf8HJqNaMZTmBsEEjc93tpaLAYmcBElO2c1jO8lZ6M2Fl8H6GkhCemfnq\nSfpW3ig2N9jxryKMtcUZCnXhOdeL9ggfa02DNMbmO2tSsCLyq1AtEqIgi1yb9dSM\n1hqEDBw4fU+j/zZAuqO2inFOv0AwtaSZU+1Sq8bQ4lLNBNNDrZByttTfMD31OsXv\n0TYo8KJkGHRJooJVITDrahzPDSNh9eDJcW73GpM+9tfpzw4y+Wed8Bm7CmihkXy/\nprt0LH1rYUJz3gc6iLBZR6fK4h0ENXG4sPA+iDxqxFcLuRQxA2mIO+iXW2jKtZha\nqWqYKwrJBuYAEiJzJgdtU/9f4RtqCwBgyqRAUkrYl/eGLHZNbvPQBSv9neilpz1X\nR253HkKltVpi+ZhHrOwN5kmv20DT3V9jX6FGgmzXjqttmrZpxzhhRrsLWPA3r8oO\nhGZsfLlkh/DEsw4wYzLVPco/33fmoCdw99VfS34zbfg3z124KxIITftQzwh2B4Cw\nHJgc4dqhbHN8oVWIRkfW8fVt9Q+MvdbS4eXRaY15nfQwJjmbV/1S7NhApxT2JRE=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID C0044E3B23F43B2854BB76AD4FDD79BC62986C55 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAewQ31pmy1+G4AAAAAAB7DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyOVoXDTI1MDIwNjIxMzAyOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1DMDA0NEUzQjIzRjQzQjI4NTRCQjc2QUQ0RkRENzlCQzYyOTg2\nQzU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzRz/CAboDH/n6OBg\n9Y8V21M9HYUEYhHxnP3oyOSzndLy7fzX2+NeT3YrLQ8HY5VYytcku2CTYgparoWA\nkxgUNqouQAx+l6qVx/F0fFb9GrJDJ7JO0ux7v6RU2xCSn/MkRhlD5wM6CjaRyQiZ\n80stVonjzeS2a15bK3t4mleI57NDu8+naclcqWa0lHeykyTyHr/u3m2io8eAoJ8L\n4guq3TFbsqfMCn5VMEZfW1iTWTnfQUarZmNQALiDCrT5ixWAaoy3cm4jCBg8YYWB\nr4VeN0JvnXk8KAoPzOvG9lhbo4hCoGmT0FaVwcxbAorNfz+GrJxe/YteOv86cX0g\nNYD+nmlrfzqPP4yLA7SVcHz2tk8WgzN7VRf41pa2TbR1GYbpWjxIamxZUHx16nMA\nhjI020SNqg3m2cIMdmpDNV6JkwwlhxUfDwMxNiW0/m+faX2NBqWkVqPa1xagj07g\nMzUMg/jPrmRU4IWjpHjBf6GjSUeC6l4+GU/vf2c+Kx33naNMVuRWbBLzK1UPXIZe\nKxIBEMYRWwYOUyM6mKwlh2Jt+JYe00qfgBFqQYFBRazwD2Alvcc/fhTnH50aI8T6\npq8P4l82wcNCt+0+y37gMMH/Ax6a/9XiaKswj7TgMZrGwlJrlgtQA3GUPWZLt3rn\nZbuLPr3LwBtl7lk61r671AHT5LECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCH6SxvRf0uDkA0B\nOqDyiXFSBVwVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARR94rn7/BMqAqx1cYmrua34SAUBb9vkE0MQbVBIgWJ+s\ni8tInkjUHTxC1PRHggR6CO2tkhZ3zZw4CxUgc4zenoKkw4vE09P/Pa5fl6i74Ixa\nMJ4hRyhvRqSLwF32Tsg+qZuawLKCqzFjKuY/lfwdGtbVMFK/V3YnlwZmcPCzhin1\nOBwKHVYmqBwKxtDSJpm9MmOmhRpGbLgD+5+n5gS3LMJgqo/qNrsOLMWtKc3XFIV5\nx9BmgtQRG1/aIjkNagMUTzryfyLgdKattpHbZA2tPG8jbNAW4/fn+1JCqud0x/eO\nEP94L066w/AoixIRh/rZWio+0/hzJf99qetaq05IUkDFqAHJzBvP1z7s9KKRnYX0\nOvsOL/T8mgMeEFWTm2xhNpaMh8VseCgfVT8gb++D6xHo9Mfn78EdHAFgCnWpGSwJ\nIN9lhKKkqag5LasaTJz0oSKm/sQYDgpqNVqNFoOAcZDeCkYYi7kS9VnM+fO2XRdU\nwM+Oe0wpBNfEdjwqzMBULDc91ouf+ZSzOtO/twpjlDIGf2yxKMovWJsdYSMeUpxh\nPoT2B5CE2DbFt17EvpX4NQYGnHBadtA5bBxd3aajYYvFvj6wnMKJpgY3XglF9AQe\nkrAVlqbnBbrNO40isOalty5b6S0ZHXCTgu15lqQBt0hy579lGR06Q1X5qTt3l8M=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID C7EE1D9CF6A291A06E4F5B88CEB25CAEE12F827B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAh9rELZR3/6dvQAAAAACHzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyMloXDTI1MDIxNDIxNDMyMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1DN0VFMUQ5Q0Y2QTI5MUEwNkU0RjVCODhDRUIyNUNBRUUxMkY4\nMjdCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjdVs2vYpXXYaZ+Un\nZE7jGE78j0FuJo9AxopzWK9l/V/UaRNaIlCDXIVYfq7MH2qs1gU9Q9EhMUKk5PCN\nFZ3xx34kcw2bLBi59dubM165HBjigAhkdHPsMg0JmxhQO24rh2ZknFmkFVxfR/HJ\n6ZmYKPdXvQ7bhmATJvg+spafENAQOCFSCgvWUh3BS6tv+pJe1ag8uT+e9JVSuZ5n\nbXSmZKsxQzLZLHBFUxD9W2IUqoT1gsuA7YvM6GkrnK5bA++pfMXuKS8BcKDmtPHE\nF2fE5ZRmBcR1ny9OGgwmxlfRXuxProrHjYDa5M5CLam8etWwTy5LVPEkw5UNjPMW\nEPfC3X1OH2CQO/YZtfUnljVhh9tRkrpedvPvQLlNogAAPKxuyqR0+MIhRv1cgL2Q\nYBwPmTtxlg15YFgS6kJaGVNaK7PIqWTlWrtHWGFfeL3JQSmm+oQR1DwhL7ELeu7d\nGXQdYyUZugzLhnNZh3xZr0usNDxD0mAEpVkrVecuLMrwDJ61uB8guB22PfyYN63G\nH6p4cbOwATYOjE2OOfKYTlyQ3Xu93zz0Y0iyVtcrOH4qTr04nu6HWtg3YezLWxNL\nFT/Bg6tWZlVGmHdbIPz5LNY9W7ID3PFMW14jCbw6s0LzL42bTI/fsXzlwE/28C1U\ntrrvNRzknvnNU0JrAKXD1wFCSocCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJNFYRM8Dj9cPO9+\nQzxUqugaX/n4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAW920HYL4Dun+d7XatjTPs0NUmu5IHxSn+DjIdbpwaQT/\nCOO1PVcgH5c5wRoPJEJHlYzk5PQJJiX1Va70j2zLkS4VGA1oXML6f5vuI3gEui3C\nB343L0EhPD3Fq49HhV39Rxz4szHd0zSUgsVGV07Celb5aO3wz0N4d6Ur7IHK58Cn\n0k8eh7R7VZkTZ9J2FNxb7yIy6UP4Na/rQ03ijHuk7U7y7X8iBpTDpgUoSBW+YyKD\no2LVq0ubWlY7Hgf0IFu2aYyw7KRBn5vkVTfenCXhNL48WZxmEYVZfCN4loj5yIpj\ncHdGdxnPJ88U+WRYd84U3rwqIHmK5zxICti812tDsCNSlb5JaCRK9nkNkr24SkzQ\nfk8oQXiH73eH5Te4MxQWUsFUhB+rzMsgkWvW4jkS8X27NVnaCW366YLw7OyobSth\nissQ9gwfp0ZH4+GWRi9hCByFHvUK1y2v5iHL4fXvZxJGP3/rBDX669ECZSMQ8/7+\ngejKMJ2WNJUzIj6kfuYuuIqsmtoTtJza53lN40BbDvEUUvuqtZbPDFsg0CfLxqQ4\noZLstgiodN/qd9t9hp5habjTJx799HXidXteNIgYUWdBQrn16HfrpF72k2rI86pk\nn1CkwPWGxiScpzmJb3R99FhTpf2wVISnCcm0kHPiVAy4YjKgm/0paoBawB8ME/4=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID C88C75FB06270BF7EA1244FB9C25DFD209B7ABCD 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiACiQN0FP3++wAAAAACIDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyM1oXDTI1MDIxNDIxNDMyM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1DODhDNzVGQjA2MjcwQkY3RUExMjQ0RkI5QzI1REZEMjA5QjdB\nQkNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAg6mmrQuFEozu545L\n4TdngguKDkUh9I7wEMAuYotFYo1srUDo/mZlo810RfeqUf8g6DBjizDhIFMrx6zC\nGkuDQ1ontVxLV2pje1KQWihOwR18APz/DbZdUzclH2ryCvFpQxmWi8s4WSJWxIjp\nu5Dbi1mbpdhAC83vo6EDIx6HLYjLP0sxEgY0Vdaroh5Cl2yb24Xkh2J6qXyISZnv\n0gHOKox/XM3EdM1vTEZdB6EkZ1DGWP+8hQYJRFuQNU5h5lEtpX6FL9+NzGfDzT9W\nJkR7PXrx8dpDM4+rxU40lM0G7QrI1KhwpW6uI/58SDCnBLc3DP/qofl4xLwqkHMY\nDF+oDfJABmPBMdiR5TUiF6zrZL+zvYWgN3MLJo7fg2zCozqixTIb82jCVmqhrxB4\nWyEi1nCAh0AOTZQQh8l/gTFWrdlqV8NogkV1RQIclXqq4p4Mz5nkpHCiUGkR7/cf\naFu1TnF8SIujH6xeSMjMzYFA9Ku25xifvjEkoRxwZsPAJa28eEJZLBRv49J4xGl5\nGz+qOYwI0WTZsTf4WWCfpisoy0BlZnArSTe3uRYT/ZIjnzz0lCqcVzJsUNze1sCw\nkUY1vUCCXeS5rm4/lvZu7NdrXv2LRUtw/jFzDqHBtWw2vokc9eUYa/1Ospu216hD\nLGRwx03xBLiCsU+7YLWpFVabHAMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKsryFRwnB0QRESK\nQ5vhJ4jP4h2JMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARCv64m2aFqti9/nBt5Zd2q0EQEPrsvesemPXW/5/eTul\ncDse4ZiQaLufP0GVEgOdgecYVb+iNClE1RD0+oXTIJsoJOVkrMiacNvqWmDLDHQF\n+Ch6IlzvCxuIeZsYhx7tw4qomtw7I6MRNFmvZyGwzKnEVNiplT/IAKzpJcgDeVCO\num3ZEU7c6ze/VseIonBpunMTEWr0RdcPkfcjaakmfPEhDxhKxzoU+1EJlkiceYib\n0CYhWexCSyF9+hZWqtPTr65Jgk8ldliqZIBui+X3ij+WV6Ni0IxuQZCX7IOXEmG1\nzUty8/kaG2cFH1f4+rVtakW3ScPoMfq3Dxq8Qk5vaAhLzO2sxAuKeFo3Yp1X19Us\nyZT8k8pMGLrG73tZqS4XOvxIsONedbIbVlWBL1mZ565bQhPtrDK7mD80gCGgFBSM\nzJ85jMWAiV3IS67IWLP1DlPB0231Wl1sm9aOKNntOO2b3nrm24IZAbF9O61IEz15\nz9hseEWuw7W8UtuEzltJtsxWsLKbwPqJiI14+Fy/aNDpYK71gtrYEgIeqjYoE6Se\nqhsUmGi2pkoC74Lv0Th69Cwva2Zteh7xCJObMEScOroeclLwgLDHtVpFLirqjCpM\nWhh+7SAbOnv5yw2t5Yqbtr1m2iU+8qnuRvpGlh2JQqpEotUa2bCI8wzEDz+nyCM=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAV3+LbnqAUAvlwAAAAABXTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUyN1oXDTI5MTIzMTIwMjUyN1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD\nQzhFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0+7/982F6FhgILeb\nsL+C6Gh2vJ5ijiYDAXTD62In0RQq7MQ4aOLg79VvtEy5oFRoRnz84iQuTYO4RPeh\nL4p0QIQGDGTpwjbLQmAgRm7U2gbmrSJCxd5r3L3a4O0UZlbD428XQrIbNDfdP+8r\nxSQIY3otH2E8yl7pO4p6KSInNxRyJ/qyqxzuUlFS1BjfnAtK8tqPUUQz9SMDkXO3\nzyjispEtTuym/xqx4jX/usZR1g4ixqN95eY2tVORI8HklCQzl22h++I4biVW0LB9\ndihPmbtI2QD4eVW9JeqjVlj1k+OSbBc4UiKDAjCr5iA9apcoOlNH7nuOu9foFoJP\nDxAqZQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUF0zFnpzucr/JtyFeUfsRIpDdszEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBJNJ/8\niVY2ZMNwLu3mmAPTVU4oUcch0CudJvXvKIkHL52xIYbYYPiJfAdSSXVd9a6n4An6\nss+sbWQA1kc3iptM99Ca9nAWgEe8f722Uju9oQ8r2kZ+K21HQVgxuvSFKHO7cRR+\n91bnFPb+dfaKln8KFRYrxRsfncf6mTUHG2oIUC64Bv+cx5HjpL9rOKyOi+Tsvgxg\nGxwKR+IYxLW9yHtCFllPHqT2ul6+1FFY+1Zw2bm7H4XKkZg3PI0Lrb0kjNu7s6O0\nKpO0jHbAey4wx0L58o8gbwdAi1RN/puyXFe8xpTUxGRVvKiiJ/3SMNW+WI61sMln\n6hG82rwQPR/g1rzRxmcnrULz4W2Sxun2g3FlCkeo/NU/+3SzqVxKicflcG+KfSsR\nIaTggv+57aJaFRM1FpnQdGOmRoX8Dr95yVgYJsh5meqeD8rOuSZRIdTs6PSh6azg\nsQDHRSJ8noBjLSgr92nKOCzI2JT4P3QytYbnY+b4lW7QlVJ+zlRmIDFpLokz7IyJ\nU1HpHt9W7AwfuGG0Bw/RWcMetEsfYVE/p4c5tXCMoFt4bvmgMWpjA9szZ4iYsh16\njPBs6Fu5g4xh6bPUaENv5DW8s4E1EBYdecOwqtOT1+R34LsCsjqNkxC3j7TQSFvO\n7YmG/EJ2Gg4uga0TCHCMcvtfd9vtR57g00aNGA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAmL7QKxricDTFgAAAAACYjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1MFoXDTI1MDMyMTIwMjk1MFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD\nQzhFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqDg2hcJIAJyJjEQc\ntTARk6Mu8UjVTqkoZomqYAcAQmphehcJUD5nBmWPMG69fFERqdgUAQX0akjsFABC\nQ/Vk4BNcKJqPpz6iwK+A0iv9jPPzhVpaT7Ouo8mIEDdlX5/wtHB/bQSbQ9iKiYyK\nHxJZC6Y8GMdO9D4xK/L8LJGCUBUdxzHtIqsomb4CxcXDLcOm8l1V+sWSn9Y75ftK\nk8yhrnil1foQqtrhGk/PMT+8u+s45VrUgtfqbzzsRdSaWT95qIY6Cnf95wao5F0J\nNNTGOksz3n7SJnEz6xBKERcs8Q/6hlFV2LIWssGU8QtzEafWhPoPP+kfcbVrjI2d\n9K5H9tcRbcbf3THdDm4mUVsPGGKpMvBWven/OF1WuCCogDI41zwpXE2520BYfDw+\n4eX40zjI+g24oaPi+653Xjklv/9ONbNjjRLZFICyB3+KgO+vyTfrpeI9nnyMel+F\niUnlsr1vFaJqWKBoFYsDkJWcxLz3Sv8H/oKHf8bhsg1CaAX5Daekk/dMDScAV6pW\nsf20+AC3GF0avdLjcWjb2x7JwmmDqkDdn7yHcKurKZIff/fD2hJ/3wa7vzxaAOO1\ncnpAMjrjoFOJSseJhDa9hI1VCecqEKEHI5sKL/BE4JUAVyI/Ax166gT7n1iwUlmu\nH/uErYF96qtlHJyr096CeSdPc2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLFEDoOCirru4aB5\nlk+1wwA6zIiGMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAC4NYgBdWOwxnlLfFnxx8l6lYcSE7ap1xvHIHxHjr4jPg\n8FbVcDNPje/HDVHfDs2e9vtbTsvxRrM97/B2/vbbRc+iArczffvwap12ypq+Oo+T\n9bj2tqHPxFvKN1i2HvhWT4LJNoce4h3CI5XHrTTTCfJSJYD3EX2dT+mexLbe0hh/\nsyIb3UpxvREED1KxZ6lOrmGQzX+dWQNhen4zpftTfxnKjrv8q3w+DF/Kn+MkMtA0\nbx9tgspadm2rZCOloYtOoL9IIHjAdMxmfmsppnoiJa0f8h8xkHC45R4YoAL4nOIX\n4Z1O5HAqU1yZmuzD56vW3Fwgrcpdj0crOW68EWTVIQnFoWgLj65e0KOyRe7FOmma\nKylL9VFBjy3wAEJ25gAkeSy9NW+Zrv1Nz0ExmJ2UubGMo3jF+at/xgfB0+NP1eja\n8BoI6Agtk5j7LmIwc/Xnf2ASQRfThFbWvl36v2jTN8k0YLSU0cEViejYA3cFRqxx\n9I/BKegu08Wof4CHbSLPpHvuNWL4PQR+teXZ8LVqNXDufg5+ceCbnGtYQuqauMIY\nZrkN38aoW3gK6faGITE32emPVVvfZlntjAc8x796P1HcXZgiijVZsIofUqhPCoJq\nzbvogC2erImViudzquE9d9bkpY98QxaeqCI8Ht97yXrh3PI6kNrukHv32iZlILE=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID DF5D6DAB5102DF18A1F77113F4983C62CBAF7385 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAe7ZL7TfYaBbWgAAAAAB7jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzMFoXDTI1MDIwNjIxMzAzMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1ERjVENkRBQjUxMDJERjE4QTFGNzcxMTNGNDk4M0M2MkNCQUY3\nMzg1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApctcZCxvW0nx2zNg\ngFDWc83oA8JuxfhAiCNVaYK9zUsHc0mDOtn6kVswKfstK5etoGMGHtBeIKsWxXtB\nID3la2PMo5F6MVh+p+Ixqne3N5Z8Qs85ff8JZAWO0jgHvCDRX4SswM9qXjASjsOF\n3jFlrLVpfGIxtr3EMD2n7Slc5y8oQ5ekBxscx6MuvYOP6D9eddXaLC9Mvht+nqaN\nrWJrK21H7WpR0f3wlvBVrxI3X1/k1BiKmJA6/q4e1fXBi2KPFAbh2NArlWnTgv5t\nmUpkM4+H/YpiZwYgzTNNhP1cRFUsqAccrto//dXHKKjjhYhGpuqWaOBO0Di8llFg\ncPWsVxkdiD6rzVkrcNdhCLYeU2JGclJZH6Xili/SzBXzK+GER4cB9SNQbKHALg/n\n4UGzVBZVI0K2Aq+wnj31xMFhY2RcUWF07d2K3ztyRBUpUPKqeUXrBQD2PSgsrBMQ\nXWXy0caKpl8nHebtemghOZhtZG58Tj/C55QKeGcMOsp4PP6IVXXcisr7JogLZhYs\nz/fH44n/FqA1IpxOnRyaFIMYIJm21gCCJzMMx+dLp0NL7ePZUPiJNLDhIAhd1caZ\nJK36Qq+ukHUiVuG6mKGZU9LJs9GkbhBG5Dj9jnBMjHEEqTBfNHWHPxiZwhuwEKe6\nRg7ljxojT3rEK1u5wB31DQUoAHsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFImizg1r42zZvZYe\nps7CD4wWZnryMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEPLfacVyDfZhUaGNCOTJiXFU+86dDIwYK9hQxX+DAPdH\n6ZI+LFFxGNXTik5i2uVaIrmG7u4OnTojtbJ6biTXsfNAGHcjTOKH8zlj2j9NvQxF\nm2eJnl1KE+87KTE9D3ovtOa0uv3pUpm21as9rdCmjDQLC94mAbQNUrTOOdm/bYvQ\nsbk8zzQFvU8rf9AbDQBGop8362y4MaXPUx0RV5zoXgJz7lzTRoGcPFTHrHgM3DoA\nBOxrazcTRFxzw1WCdyxc9tOZbii4gjAAGT/jqfuLb1bVAcXOwhCVoqFZE/5QUz0x\nae1RCMkU/V1g4Gi4GDuu1ih3YhqcVuRYOfPu28VwnS9/x3EUg7DaTe1v+EwNiJGV\no04S9yaI5Ec/6awIFzm1rlMtY5rAPh1+c4sBt2W7NaeNZjSfa6Gi2ieaLUKLbK6m\nTbgzlXaPt+NCcIXFITrYg1ppaQ8bU/1ErJgo0MIru5HOc3igMCzVFW/2xEx7inil\n1Qwl3hzE2zF2mcq1y1t8eMp+MZRoSFmHOLVLAnzrd5+4DzmuA87UCGfUPem+wF9J\nQxj12+0Pb+nZyTht7QRDAstc+7UT14jzPzyli6Z9FaVls86cH/KBkzvQJFk+aGyK\nLKwu/aIswBLkJx3rLaIweQABQb0y/eOdoJcp85lW1pxDSs2gybIMY02vlx23GLo=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID E9061797E8E5E8C68F935EE5E976BC8FA17D7523\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAASAAOjnYxKJpHwAAAAABIDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwMVoXDTI5MTIzMTE4MjQwMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1FOTA2MTc5N0U4RTVFOEM2OEY5MzVFRTVFOTc2QkM4RkExN0Q3\nNTIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsIAR+gs7phLxIuFg\nZ08gUqTN8aOoAZcLpCUgJDF/XTQ2FVuASr8EuhUTdXtYHOz7xBUOJDE/vwqvb6FF\nr2lI4a5wqKrvEs6ZVk9OPoX/TgpZUlawQk0qNkQlzV9aAmKa6ofitoLzMAbP9N/n\nmO4rKjyF/x9BR1P+4/iW7yLh9l0DvBQj0k0O8VLrIv7j3Si4WHOIzNuN1xZ7slDG\nvXe8bHcI5rYjmQHeCiaf0PCL2kQbpti48v6KdkLdqyloyXK2sAhvxRB3OJnlqDz/\nJJ626QfuisGQk+YBjOVxx6etka0IvgiRncY9qEL5N2Eucms57yUyaWRDMnqTGqMX\nWzG6pwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUR6E/W4K0+qyiwwWa64nYQ3aHoEswHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCAWgyH\nO01PB7H6WrTn8OH1eLOB/E+mc+t0wk1zgpVBkdQ2SlHT6ApK9Hx77S9bg0tfTFpK\nrdZb+2aekQu9cPMHhE/8WnS/vwy7/kz75pSKPGJoy4gi7cIjufM+jv+U5Dako3XE\nE7bhHdNEQOheTCDenGVLnz3sLVIXb2TnmAudhqC3QNp8/LI1fLGtvfEJ05Z4STCE\n9GpdnCYQVROOglc1TGp8C/hP8fwuLzl+jNPyoBnY7k08tOBlLpWq8EMtkkTBtToa\nR540Q5/s0D8gumXEIxLZ+Ei15SMJghwqKsZ6O0EtM5zxGW0KJwGCDAxeiMt4gLdZ\nQJHOhZlYAdhwbarVsN77q/zeBSUaFNa1+Mgt3WgV7lSQCvfvjhp5xufKrLP28p7S\nwkta4zgyw38nmNIozwhk9DYUlrqX13iOzKCRxI1/I8Q6Mj3KzGQLwjt2JJI9PMCC\nJjt+K3XBpQl46UO9liQhgtOszrbUNGrVBGR76BbE5UnEbOrCklWu7NBjmfumvHM9\n6gQubXfPs8seRUxkDcpyAPj5UTN/DtwQqSzLohriikPlpI6LlbVKialauAb3XuWr\nAodxzQJJ+F76U7eCcBz8PIZcu+JjpHUWtTSQ8Z1MAzOcGoty8h9lBuH5UBAnHckJ\nGDrWPLMe9MR1SkL+ximdW1P+YtEiRhSNPHVO1Q==\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID EFFEEC5E01610082C0E311CBD07A3204408B32B8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAmN6EEZ2nnXbvwAAAAACYzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1MFoXDTI1MDMyMTIwMjk1MFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1FRkZFRUM1RTAxNjEwMDgyQzBFMzExQ0JEMDdBMzIwNDQwOEIz\nMkI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxptYhuma1sIdGvpw\nZQZonESYPdsFlxbJiAazNE2Gvc1jFwciis24nPn3UT8hp+v0GTLCRpL0QQvqaVXx\nShwyJBKxeKcv34eFjw/2aOUNWdKq9WVlX1asBsgS6B4KaZBHqOKGQCiTGa/F9ECR\nyRV6ng1o3YAB+zwmsZcwuWxtwwn7JPE05kucRVaL1GRTsXZKFwzilOOGZ9pCkNAq\nRtcYs7xnN4Q1UxiZuXGo89gXQ+mTOK7rNy2I4hqV78tk28giT3k7iIvsDbELMigu\nof/WPhiXPdQguNT4uTrRE3fEK1gulvoY423/EXRKa9H4oSKVq6NX1keu3ynY4DCB\nYWwGcqeY1cZ7xBTvtxbTnD/JKfHlCA2O9wx6E+q8wBCMwH2CCkmcldMZCjfjoyin\nJmW4Diwge96SE2jBxsr7sNwAMUPfrn7wXIUrfGgp2GBTE3CNGToa4x0xHw9yUHSi\nJr5T7qZ6uJPcCUUaRhDFvSD9V/fJzSh7Fsfndsa7S1OoS0450M+36QQRnWkkOJsq\nDqgToHYuvTMtUOArC0uSKaHJIqgTqhPJDhMR7KEcyTeTlt2MZ7vgGVmbKghCTcx5\na1/5gfcVcN8LZF+lnQ0HePdeJfkVSOhwAu/PkNhPGi8/m/6X1fOQkQtSC6wXFgOG\nH+5EnLiTMm6WGOEjTqgduv5SOzsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNmk/INDlitzMhBU\nue45jCBmx4jBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAbiwFK8lJYei7FHvrn38JoPKuxNA3NnCrDVKB7/ZYcaud\nuuFQ5PAk1IO7vcnIKwB0eLH+p2PUoro9VzRJn+Uxx050wcpjcNphPA1k6gjRlQ5j\nZdALr4f2wuOputrS5quhegy8AKuANhyyrrrmeSaDVJaHx3QCU+ygwqMJom4RRe9a\naFfRAAS7+ObtcTJ0BQTiqIdpQW8URUUz2eiTsTyqKbIkKDq/C/kKMQA0LXTVb+j+\n0O50VN4B02PZGbyiANRmooQHSxs/jY3DUXOIDyoMForb3tJg/UAg63fXsR6JnqXj\n3fW4RA3e1GHJGprMWUCr+fvK5+AMc4G29R1LCfZOw94Unx1INKnZtsf/m4RqAV9S\nmAlm8DOGcvu/hxs6DEakPRdY8faQqU5dFAnqPPPJpaqkVumUCzg0WQxdK1/bhY9Y\nfydypunv4tykzFqxycyCRJKZqnj24EuM5bSIUi4/AmmJTa0meHohXv+v62cFg3Pu\nBNjwKGSRQ5cMryeATONzz49CCxtq8H/acpb1/sFjXlmQiYSFCphx1Vi72CiiKR7Y\nXHPN+62PPDNB8DMB5aDDvIhkGuSEbkLrFyoNjGdPmslRJU09tc5i/PxpK+cjyB3w\nhOCjOfJ1IUOJfTibGG+LFCWq6tRJ5Tx+6wvNbeer7LSdCQFci4MKlnrbJIAvPL4=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID F53E4F475E0D3C6E2B3E56E3AE8ABB953122617F 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbvERC68yQGBUAAAAAABuzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwN1oXDTI1MDEzMDE5MDkwN1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1GNTNFNEY0NzVFMEQzQzZFMkIzRTU2RTNBRThBQkI5NTMxMjI2\nMTdGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyA/l9loLSPez0tx6\nFn9e8hzd8kKOdXqfnqiqLbfGhAi7KYSbRpeFHj4b1HbYX8L3pfKAuvE42xkWCSrG\n/T+h0HLlMP+aimYu5oqqCE2cwiljCgLpBePErOEZkDsKH8TZXrQifuNjc5Q5nrHM\nKWiheu9/8DWiM3JIIK98TbFT4xmSIcyIG8OfnSZqagqtXdvxUA8M92rdTrmxHumS\nW3lgv1LH/FTpJKitNfWsU1/fVk1riGWIRyT+eAy3mXP0xWco89PiPfYCUGqkG43a\nq51v+1jmO3lE55ipi2+5yS9AQnCefBdLk+7P78gGrBRAs1vQAQWlESksBhfnelxo\nWE74BGkzKOQIF/cb6sDP4gjBWxbZz7rpr0qTLscAycx10bAfTCS5ZGy/wEB5iBVP\n56xDVzt0XyKndFeBSfWuc6NluNJzZHtVhmqpAI2xjGjoYomacgzFF5BkL22ARJjY\n0g1FZ0iwymxPCSuamk8J21pDWGh8NMFZan6JZxPzbgunwoa/QDoDcTiMpXCrpgdu\nc7Lb8u2he3s2XeIcHwM8LwtpO91rCaZrKmgoaMO1mpqKHdF2f8Q+9idisTNE2eX+\nfYZSgwbueQSNiZwa6XmyP5X4g+0sJEfvGgYDqPVPVcV9EEp7jQthyS8unXIfJhkB\nqMn7DJ1ouLL2Ugymd1paYCF6MEECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPm1HqXFPleEQlsR\nZ5Nf/pviKNtIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEATb2c5VVQ1KO7td7tuyw7u9TfiVhZqMIodHIIsyf4hmz4\nBStlTbEQmWRJUCryUvpeLQrmUcZ7LTc4r48D8Alh/u/B2Grh/lroyGfP9l/+REXW\n1ah12mgbd+bVd1KeDZWZHQlKlDTSqEr0AOmg3uFA600UayZXV4YAMCdUpds1NTbN\nWaxNxjMtGd3vKwa1ZenV2i22xUapz50qfpAyGG55MihsrOBD4pmMaVR95dzMbkX9\nMGfDD2LWd3ndIgvFNrcVv3j8qyTzk52hbNqTvL8qfZ8qZx3VaxyJUjX+M71AoETI\nVRFTseBQRBdCJ7k4hinrNZSG8E1SUyH3v+JuzuHygInBt3ZxyCsMlu4lhmui3Eq7\no4VElxrHGwTBWkLXSA032z+rCaQgVAHhw5DeE/7Z+odKKZvY1U72b3mRXL6F/xeT\nkrIMsyAbmxsJVOEGYxWpsSEK//YOc/vV8+/cb6oGcr7QcWvssw7g5nQqd9O6I53w\n+FbnlWyfeV6rAnkuTPsTuFnrazsBsJ82A1MHShW2FqdYGYW3hfaffOIY1fZ24Mq4\nQXqDLoWCxn62hHhc4OpwDXylOzEDW8FD1ln3XYR4vkMJcg0lEhk+bdbs+XPPmIiB\nXTsfZ9Ow8uT/roUa1u7VRVOGIaaK4Hnjwlqvactlrz+j0f8RH5JAy7awUhdqHas=\n-----END CERTIFICATE-----\n\n\nEUS IFX KEYID F65C289B3D93B78F978AC8D017B7947DA93637A5 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAmTZn5LC8gyqLAAAAAACZDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1MVoXDTI1MDMyMTIwMjk1MVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1GNjVDMjg5QjNEOTNCNzhGOTc4QUM4RDAxN0I3OTQ3REE5MzYz\nN0E1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlH1t4xR4Hp+n4DTP\n7wNpC0CmIzBZG/LoLvsjrufR/GjDlvYQC73Lv+CwhaOnH3J6Y/3ujIMd+uxDsnT1\nVox41qAiwXTIbILSuBi9/OlB8eOUUxtNBMsslaTnvzhKIyuH3wXn0k04RX0324zQ\nM8uVmmu2WgQ9rv760rfIfdx3SM8F36xAwN0rZVL8W6PfgdcY4ajRxL9jLBwp1k8h\nihcRd/IhGOmmUse+MqNNMfYH1re3XMtjUpLncqhn1cawDey34RDc469K+gJFKNKv\n8e2RXUa7GLTLu1Jt0g35RnOOSdHxcl3xjRIZkNcW2PVi5xfFtTYlyE5OQHn5wvLL\nBJVk6x3ScpgcqW1Gwj2fgAcXC5GPOwnLg24iYsrxFJ043G0AEsqn/kD0Zzn2H9B0\nBLiswBNnoXPmOPOMo7NfBUMi3HcytFTVIIJCZjFkVn8eFTK7P5RP0qpeNcU1zHWD\n6yuIuVqKY+x2FhZqeeboK6doVsVyoJKcIUlUxZ/XmBE5cJLuqzYp5pWBlXDfjRar\nSyqjlCyXTtgh1po5GAmyxcP8JJUwP+6NPLV6AxzbvbmP7whX2Utl2p5rOVkFyGNn\n37EPEBM5G/SbJtL6AcN/4RVg8cK8Y2xFb2IxpHzW7TAhQ7RCgT6iw02Q04WJBch6\nsogoPgiqqbyMeRR82zHmrOFV3S8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIRoMJT4xuK2mSLk\nGkvXpIekKyhfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAQn3/NzXwOtqOE6N57S+X6TQ0c3DM2LgtSROQczzmD8ee\nu6tsuhd8RNq7Zodpwd8hJ+zhc6hPm0S0YzSptU+gcmSyWp2bYC4IW/Iy3Nwo5xPV\nBkOBA+R8IBXwFf/Isiq4RpgSkvbcx9zE2R2mDSkr4SiN0hpcYrYyiDJIOrYVd4VY\nPmShfxVKI5017+V0i7zg7oh4pjHD8nmt9rVW2bS3Oo3OHDi9at1y0Aq1fG7V+/yD\njXGt0JfMIsflkqqfqRJ9kowyXSZoN0bhyfv5x2x3FqoxdAIvb+WyVlIKNLsU05cq\nP6y+rJhl117z2ZCD+dReuIv5VKx+yVqAhPcPnccbxWkaMbg/wnc8fzHqFENb2CNU\npg16IkNW3FxNh1ImGpa5OFp3g918SUS280hK626risQnADzxfPNmm8YC6irZcP75\nWHKcvkfGw3kGAAIIjAljcCxj4KGrxKgwHL1dW4FnAzN8t5i8U0c24uH2zSNumQHA\nGwTbfCU6a5FMBPV4c2Vb3cJsRRFyqHB171ouDWTo8iYreYA+JmP6Namy7TYDSz3I\nWnFpjqFF9ciOQb1lT8YygejIrD/wNHu5wIHvcQWO1lFi1gnyTEoh9XATBVEB1fKA\nJF48xGulFG+2FhbxwOZQGcQvZnwTwfpWIaMFfm4X8x9fjz4KGeckQ9c2uvpeMQQ=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAA7UFlfjFeNs/gAAAAAADjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgyMVoXDTI5MTIxOTE4NDgyMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB\nRjk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn4Wrp5ztDKLZNUdE\nb6RmW2fSKfEkjjpwKPYwRNz4Iz9QTLOaXH828yXUf2sQsfajyzNjWyZwwrDCLJOc\n+h8PbW1u2D31xJUUa18EZsSiDHFD80VFttEpNMusjgXfryn/SYQsV3m+bAq8C8iE\nQncxdcPW34oPcfGghSGjd3uTKknvcvLeEqQzfBoVo9jOOQl0apkWII6J1dxQCz7u\ns5q6sEprCY1ZpQAx5T7nc32EXSuAvpaXhkITHF2moyy/qBHCEnt33H9kNKkYu/vV\nmAFDmaKUOkdWtQa6l+GN7eS32UqYvtCt/vf7Q3d8M5QktJOHiQ99swf+SdrVLiID\n3zow8wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUQZ8NUUdjcnm5bxxU1g+k3p1H5YIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAf27Yh\nDKoRm+/1gjXZPPYhGJz4u5dttUqzIer8lrgIVNKVWccJNCXdCJ8Eu8TTMATfcnsK\nNfk3ukzrFGJJzJYKXrFcyXA6cnG1j1A3jgo3i3GyyyCKz/kO7LnkNA1Uo9aiE1NP\npVcLGUWlg8c7b+varGfP9kiUR6N/VSvwpn6Ccul9TOE8RtmW53yc4B6S0G3NxdaI\nJ5KHauJmJDqjd4fSZ7ZFISz7Tcumz0MCqr4zte48TNcDTdGPDWMBGAgkxkJFoSz5\nG8cVUgBR9mag3OBI2ChiRBPWX2iVSvgCiHjlM4Uo5rlduEGoh0MJYwxFh3x4teeE\nuoVWlpfI6RA8hjIb+14uxQehNHpcaVdkCfM6NOuH5UIcOOOYAPWCoqSsU4JjZjfa\nCx4oci1uH6BJ2ZX7eZZChfG5/oauK3DFi/Iw0N5+WaRAU/1/VAUTuEeA0ChG+Xjl\nNP5ddmixkXRsor2eabhDsfbKnasEGfwDfWPzmVwOSUPMo+NL7BKVN+Ia94KUO6u7\n6JYs+Sx1/1DVnFAwRrhZ9IpkIbKyDDvtO85lWj2XmM4ZU+EBcxiqBmbHRN8srtjb\nStRzT60WoFrZz+TMnY178WX0Hz4mrtIh9l3Wm2hJlPkeduDC0Tp4MNlxgdq2lRBP\nBX2i0qsPwSucB/RczT+owwWy6GbQQsdtO44vVA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhl5kekrk7NsPQAAAAACGTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxOFoXDTI1MDIxNDIxNDMxOFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB\nRjk4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs8I7HP8MptPa7e43\nc+3uf+UZxFkErI2fHhFLyGi6hnKqMPMfAZz3P+ct85dZ3/ESIp2DsIdTZ20AQAuG\nTYLVOvqvp5dfdq4xc2atQdFAKx0WvCGEyr1TTCcj6JFVBJPvNlaWzZbgjB8ftcr7\nGKNOr2BqFdqbxOfSTqDXVBvdFFui5wZOu23b4I0xTa4U5cOiOJvMr/J1E7FC7p7y\n1Sj16NdrGuhGXJykbu2rGHsax5CIp6IQjipb6EDO8Bv494X3Db1geoBEVAcQFURh\n41eBjkcGiNIF6t0HoXu0LfVaenNFwyg5sUUdirZQjYajLyw92NVJk5+w+vuPwlnu\n/BNm/knqwm62Wm0z0L4jM8zGOx7C/eVslw17H3ti3AQ5VmUwAueWr+QJO0zxIURn\nLjvHiyIjxkTP9MlGiyDVFBmYgVPoSrcI5aS/bSkQyFFoaCmooNjd3p4LIn/QW7hl\nJ8cWM6Y2wXR1gFysdN4UEcnKXrSFUsbJOQ8ZwFIFeWx8YTVSe47hcvGUkLUWjkI+\n2ZXXHhNjEIcKrt0/JaVADVXTylsH5D3ounPPfrXZXhj6mDEuGFsGzi9O6Qj5/dwJ\nRnirLGA3O4uXbMYnNFIdZbrPBnjSmb9MhmdlpkbSpQeBmSmoAfwv8+pbetL0e5qz\n/8vEqfvyHaDUTREs4FDhluFiwucCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDmIBeLrjewc9vGM\nKeWrZ97515iqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAQ0kw2rca+GqOMz0y3HU79CfFi5Zx13/bLjAYApDVvpjG\n1ILkk+LYQ6pIXIIBr3XFtOYpswHVoRifbC2bkynvzqQ+mYDPhlQQwbN5ORkxZyGS\nPaHAHCSHgZc3ZtP0apTgfdWDd1jE4+u9rTrNCRtbdG4giwGgm+/oIZqWoZQvdoaJ\nDCvkqM3sMS6r8BKxc2ZtnfYJFqN0iAw2NY9Dm3DpLxNB2EFa9AyvjarQv1Ptj5yj\n3pexJLTdesDuZNoZ9z0Ulj8HS+kX/8bxwavTjGfBXUz/m/TVhPNTePbGHzVGWImS\nNkjW3OlKHvadUiXBrN1tfpqCJ3K4EOlmjMmJWfidpa11wn/RUtPSEt+tpigqS1Aw\nBkID2MLMVvIOydXO5hmSJ2ELB9bIZZeJs9T+3KlGa5qTKIMg0iWQLVizgvMmxAXV\nS78MNUBmB2rhvPHj/HcuKEaAwAlzpC3AZ3d6cU9yfJ4mJDJ/nBH33pf7UikM+27u\nO9NFn9t+jGBRFfO/4KSqsoolVDsSEOhFD+JxZJjNPaHyUUcGPOWhQuhhUsSE9PHi\nn/FrdaNUk6dhnepWIT6mJTkvmzRMIusSCgqPgy5A44UCay/7vMc/m53DsRnbs6Js\nFcDXn4H6FAbxLKzn4vsy1y4uuiNCjrs3+4M69lx9Mdvhj1X5Ris50d020q5710c=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 32C6E576663FEE80D64CDD7B18E5603863B3BC8A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAebMRcDwui5MxwAAAAAB5jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyNFoXDTI1MDIwNjIxMzAyNFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0zMkM2RTU3NjY2M0ZFRTgwRDY0Q0REN0IxOEU1NjAzODYzQjNC\nQzhBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2gBq1WQM4mQVnS7a\nAlcmqUZVjDhM9mJbH5cDQQu/ypjPiMFgLF8Kju+dhv2RaGsqm0zUK9MtRVAB4kOm\nMHTU8ud/PyNFdYmCuA2AJXQt4E7bC/trADa4ZzysXwBAqm4xh96gVxKmcrsUrj5t\ndNsZjaBkuBOK3/RFhiN/z1TaHe7rqwUNKw7zhXNndV3D+3KM3ppp9KxNI3hP2zDs\n32uYcYCQMFyNkvf6w6K/Slevy0M5kICQcQ/HDaUTTdbIjD08Hy2b3GMSD6Gb87BB\ntT+U1aS6WEtyJun1cR+4avPlPD1hrQfsIg5XDbVeRwKu1AwERogE3EcgQE5giFcq\n1zpbYFd+7RGztxiVIyj8xHEtufhe9xSeYG1asMX/ahWaEVP2Z3bHaU310rZTuVcD\n5A1iYWllnO6kYYQysSYpAWr/fvh+r+wQc3u2pmPlr9JX5HZ3P6j+gulU6a8U7A4S\n6AjeNhewLVjRkYI6uS7eMf9x1Mip1HawiGzFZBTvm0s6FJDd1XcRu152NqQ4TLO7\nPBALOcwPPf5Ob+afNyCsSjDBd/KnefCk0DGHsn7ORG0QZvLkeaK+Lq++mKhsn/D9\ngeRemP1E1hbUq9P3ecZ+wp6wbMN/kvopj/6hc/HvjuW5dPylO6JVPpq0ZjTM5EE5\n0RuYNiVgAD3ZrzSILZuq2oyyXt8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAYPlXAAriJfQYtW\ntCzNx86Gaft0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAhgyrjkJuDyxYcOTyAhx26nRJLbF7uLSmgORLkl5n0/oH\na/WsNP6PFQaFAGwWe6VNJuTzS8K8B0vbs6o8edqRxZh96+OTVu4nvU7z9bft9ASc\nAUY07Cqd+Hd4iP+8X0iDenbP+bwsLDhjZMfL3FQFTS0tWN0XN6eZ7zF0GkJYCG8g\n0/IiH9YZtgBxHaiQ1DNWSKxGag/EXwWboXK9Lj22jT7tI6+hL/aeDVSPwUvRAXW2\naHmW7iQKQlWWtMswUpzpg4TJsbIjhZTVG1reZ1o3remytZwrdZYX/e6I9vWLsRfr\n5LVvplFUf0/G6KZXZHgde27+JRjsOlf8wo66lY2GjlIIxmAR6FwkINItwwTMKqvu\nxz9zEApzY24ZmfV/gVBlAgGyh6QvBBQMNPKXTwRug1alqwWRWLRug40CyowBnETo\n1mawMm0q+ucKIxJqDl/6shUePwH01TZrU9O/v63HtPAoOrqjykNC8U/3PerBvMMt\nToFroRDnWGqWVu3n8nXiXLMD2cW2ipjJ4HH8SrHThlOiToCfadFX77tgrEhez62v\ne2Hf6H5HyRrDKx1RqJVts+uGx+NJT2JDGPmnBhb9Brw+BZMl9qoca+RXixww5Cao\nA9OiZN/JA9yW6VXiWIzYqNnF/Iv7k1rYU8xLgLKzztOPUb8X4hOd3NNcjsfPEk8=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 3893cdbdd873c4233315e1b13ba96a0d23cc10c7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABFmpxFUhvCQSQAAAAAAETANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgzOFoXDTI5MTIxOTE4NDgzOFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC0zODkzY2RiZGQ4NzNjNDIzMzMxNWUxYjEzYmE5NmEwZDIzY2Mx\nMGM3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6OvFiZrgcA/+eMVc\nBqRpTEonNqTPqTzeeWVvrMlewCWGK7yf+ngc+1HHO4DnQQpMcqj1Eo4Xl+zvXL+6\nIDPR/+ddzWZpnJSFG+kSnJk4dphWwXXQSqpYPTJQtC9RG5umJJBhXANQmIPLPvC4\nKPDQrc1jw/UPMAeKGRUuEUXZ416GFg4J5V1C0+T+93ZjyHmIBdIREri3t2KkQBnR\nqbWrch5JY4kBVMZZkIwv9rOOaaU/BTUR73rxV9Pb0OBLtKgEkU6Rs9ftt9h/XkoY\nU/5omf+FW0wrKtCSKUDP03PQrYaohvntkMlnaZczw8QztmOqsQVS4O7pTcQh/6zp\nukezdQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUczhTk0TT5Ert/JrrE6LG1RWC9N8wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAVaKvr\n9khOLlv1C5GxVcbQeVWfHKImR/6d0PlZaCWeej3oAkTxLoM3hrj12o5DddNxby/t\n+6kFez6EZ8EbPinWipzz4NGQACnbSpc1AKcxRg1ry/Mwf5WB44w97NclLRJsfP/r\nKBTSxL/nsHYdUbXnnVpJscJ8X6NWXoDrB3M6cCna4AKWF5yQ9XiHRxOJA0shJK0l\n5H+i4YASIzD++w9T1be+B4kCCv/vkG/ua3388vJFM+CUJipouN3AU/jH4q8nlRQh\n5fzx0jNojHY7EIfxYyVRMSDTrRubz/8qCeeoC7hQSKFCf9qqNaEgl42m235FMlg/\nlbRQwltCP5r2Q+QXkZrjQu2fLIRVMUhM3EmSgbxgInUr9h5mdPBAcvDLsxynRLRh\n1AsnQQaUTGUhCJ4FncvrDg3mkTbGBD1357hNMC4iJGFEog7Ha2rcsGtxBCujRZDV\n8i72ZnxC1ch0DIbdu6jHRATJpPT0U+4QDS89OdJrqG5fvGFuBMeXKl95DmgvkXhR\nyrIVaC6kMRsBuS3L+NKgLeDEW3f45q3LIpgy6ycG7h4F7/c4eFcDjQyRftsHNrmu\nSp1e1q/Vsey+2O2x/O31rsf5UQcz+swJqOx2NfwAWKaObUPxz90kq0t1+/panaux\n3WP98A+xufBgQOG1520itDxD/7CXd3KtlT2Z8Q==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 43325af5500406548930cda9a67dc78067b97801\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABcsNmRo1ykEngAAAAAAFzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkxMloXDTI5MTIxOTE4NDkxMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC00MzMyNWFmNTUwMDQwNjU0ODkzMGNkYTlhNjdkYzc4MDY3Yjk3\nODAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnPOinc27FaDLO1IZ\nvjb/rcm1xbUz+g0n06U5cCLBDEQieEB4DT3iqmDDVlSSaK7sfTkeQ5ryUSZQrO/0\n7QO9Ano95/Fy8TzID/2rRrA/nno9RcbUDrw+U0PJhMxhHRw9B9sGQARV6ZZJyPB4\nj435YuAbIpAlbt2vceiwdYlrQ8JREcDng+/cFk2aNv2ORbXY0V3u03Psul5JwpfH\nOxK3D4H0oQSM+OaLW0qeCsILJmM7NCrFUIzedst+vp0SiOMdBOY3IO5jerWh3VUj\nrjaDKEmwbHkhA1LlfTq9Yv15kuzoxx8PE9MnJ6iiyiZ3K+c69+Fd1j9kr90436cp\nhagpPQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU5+40RgVcuyqOQg1jDA1nFFodCkUwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdJ+St\ngkqE2S1HcAWnSvbd6kJ7W4MJuJv6BYcJtezXy93aJrmWkitIJPklzsGl0OrEq2W9\n8PgBHatFIAwAm94apusd8Po3HvSFP9LiZirfd64WhQidFkE8ckvFYXUdE2/GxXni\n1GwoF971UHlbvU2hbLtl4YMODCCG3XWPpKhWHD5iyuwOXQJdS9wYCCW4jn1QOvhK\nNWOfslQZNuRzVuzoGKAvh7xMSRDNv6U3f3lBo+QE9QR/IwkrP4lLSWvzX4HpbTFq\nYuIcPCKWS3NU5eTdc2dpxYihiXKTK3eayUCuieJ0XFUH49fZPlHzKTDftzsaFzX7\nOuC5OFFaFip4BeRUULjZaETzUIg+dEJ+tov3wr8hhQTntdhgGWz0UDqLgj6r4wAb\ngIGEzhwR7dC/L/qD0w8O8HcYTNjV2IbpWNt+ssZdjkQUnF1GK0roz7D/DyFeSnkQ\nO4b3vzuTYLMuVthmuOQj3F4CBJAJWGjyo3oruElj60Z5YMyqPQhgoD0E7zfNedXA\nHxC9no8SPdoSByjBjGQ8BJUmTAwVKwGAMf17ifB0IZp9M/MIabDseVbXpy8cK3jV\np8SWlaNHahtQqk77kN/qZLzQg/4os9QaAgGEzVVwiIL7JakXB4LTIKdXf7HWMPrn\nmtx+yKnEMQq14CVHJ/pTj1dj+YhSzJb21JrlBA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAFoM8T+juAbhNwAAAAAAWjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgwNVoXDTI5MTIzMTIwNTgwNVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF\nQjNEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqgeo5YaVOVQovR9N\nLARoKG/9OW7PGRZMEma7qLI/f6kXR+oMSsT7ZsxWH5l8CT12XFjwImW8KQOchivY\nBSWeswHnDgTvI2VJ+LBHwTtst0ViOBGS75YQZ6Dg5Yqym3nqSYRUG4YRctN9u8Cc\n3mE4SBetcntwjAP2xf/5B35aoLOjOm81arS3id9wblYoQ99kv48Na0Dshm14+EXd\nAt628OBUUylgc1NItZiRGw5dgu45ZrEVGtTS/iq+pY1NNJB9GdagueIom+y+2K64\nw0+1YcTxbxrOBGhG2bLfBbyN7l1gUdijaMT5z0VwBu7HgyKIWqWRlczJ3Rc1DB/I\nVRl4jwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUjU9X/XbEGQDdjiqD5ps4RuMb8A4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAQN2Dh\nRgwLWWNeBAgtEu8eIcIF6Lj3SL5+Xjtv6tiKz6wG7ChHcz+P+lzvTx2ohxVKlnaS\naWxOpy5U6ONaU+rW5PgwXOFPGiBczeP7rw90R/dxc8SvQJtV53Rw1vXU+nfD1vVa\nZ/tstGqo5kgWZO8p2hnaa6XNdBe8kZKQp0FXG4cdUTvABXNYvj1QHhjm6pQpUrXr\nypYWKdvkRucC7yihwHqaL2wpRVqPs6PcnCftiviRgTGFLu+6HaPEksQF++6IWDtg\nzHr1ETV24TtP3UsRMWM+1u5AlVj3lkNLzlCkhafNdXviQ+RTmMVjxdZWj2uzG2DJ\nT63uVpQ0PR7sMnuvJxYRdnMO9L16L6sxDvkO7rrYPlDHCyTqgleVCd9uSWcVc8mm\nXe74s62A9j59sbFEC+FSvuuPXT4AU5TQlmpVDyp7KJn//iEdyeot769IgH2R4Bzy\nKQjAv3oDcH5Ubm5lbL267whO6FO4qvgwZcwjEF6EHqRycWfFR/UE/aSzYOc+HyV1\nWi6yilKJVyLPhun2l6+hYm4DBuAA0aQHWrHHvoAW0fZyBOA0If0qJNtVDmpNbs4l\ngGIqVy+5vbRQXotlKMqO03YcCuHIQSSJfwaZ4NRu/OT5869Ml/D2ULmlFZvog8fj\nrfqMiegTcmahfohOqnDk1aVgu+bwnH+6b8NZPg==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhNGtZVcULt05AAAAAACEzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxM1oXDTI1MDIxNDIxNDMxM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF\nQjNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnIVmLPLEkgjVXV8h\nbdeYSRqUm5LXJdsb7HkyTfhpPBiD/gLu6lW2jQriT3J6zRtaIBPHLjJbrFEZn3qw\ndmQA8YwAj67WHV22M8dYDobxseK8SgWIYVBnlxLPeCyPI9Vu9IBMVNjd+P5z2GHs\n0KqVT4t9lCFyaBoAGYdDzf3XNaFz7bFkHWiVybr9kMQ4EdflW/p9M/ilz6yCr7H1\ncD6h7Uh+kCVw1Jn1cGxqYpQc3uVFUAUSz20TmT1JokvxMNejaRQN7XjdGeAsGwnG\n4pnQoRIsjsD5+qyutQRUf0iSs48irSw1GxbCvDTbNcosCm0n3QA727DoJC1NkTVD\nVKrWh5ScwJVfmtpeqknHUT88xA8SI78F5JNPCnlpdyGt1Yr7SdHuvCGfKThC1llo\n3lc4oyuU+4/e3na+gsPzPZCC5Vgx1/xivpi2+25PGHTmKIvGGy37DsBl5tod9FdH\nc9rukA8a4uAWYoX1QfB/SWZLRG6nzwVZKzYctC+mWn4hyMfUihwjwy/z+yO9BYX7\nuWi7Y17FTagbE4/yw8u0hRlnYrHXhmUesI9bg+zFvST4SRRBbz3u0Z/O8Oat0oFU\nrmcrcD7jLEDx+egNYDCZzAjakb/w+cSKlgn4t+Rn/AoKjDJM03sdw6ps+Yt3WXnN\nQv3WGlA38kc4K4WRN3xaYgO09dMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJgbfGgDv5WtqITm\n0hCeqlyLRdlMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAT/hdervkzJ9JjxqtseAXOXQd8VNY2S5Bl1GbhaxEj3zo\no+vDkyR+65zi/oVYmW3RRXS2YrOX7LMV7R/pMEwkp6Gkkc/K8p/g0L9YzkjYlNuK\n4clP9IaIbGFFl6YmqAifQoFYZmxrJThHLlLfP4iqWMP1EFZKv9XXqBPYuWm3Imy5\nOAy1jPyQS6SbdPhxLaCqUuumxT65p82QGlQkz5P5p5RmSwPFxzm/U2fqq60iEgSt\nYXLf1QzL5JszQ2kWLEdOwhVbmHKEpbX9RXoosnBB/1QLZh6Wrm2YF0x72V1zKunn\nZNRWqgRLvLkBR5E/v+2T/HdWQrctra+DPyVuP23eOXrWIqdA7kBfAvp1HrkHU1Lh\ner/3S18NSJINY802jnlAbNP0JV/Tn70D5wQhN58dW+zJiJR/FYbUYKypcLRk48TH\ny+BiCbwLSGWoj5m5kdcewx7DC54QpcVtj9G2BUHLFPW6s/aVu4KpUs1FoRNAFeTa\nhR3flXZXYoSCvOg/fDR5sZi1iHKul7tZVb0Fxo7h3OLRIpaGXVEKn5u3EEmzkXxD\nq3Y3AsK610P6dpKRGcHFJ06R04NI95GgwX9RXNPILDELB7A3awT6IwceG76HFkuM\nExu188NHR7OK4pgN1EV3inpHBz8aQ6pvYvaIVzZsBJek2EeplqpfBQTJ1Ym4gAE=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 4c4b4d648908e45bfe5a10d36387a688aec1cf78\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAL0WmwUyZ6aeQAAAAAAAjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDcxMVoXDTI5MTIxOTE4NDcxMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC00YzRiNGQ2NDg5MDhlNDViZmU1YTEwZDM2Mzg3YTY4OGFlYzFj\nZjc4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAseU08dQ8TkTP4vn+\n51IBHoLM4+HiaHP4q9+hUHmS99mUt5zjwFeP0tFtDRaBgHMI9BTOpOCfhpa1cGNh\nRVVOvlW40vKDnVsZ7hVDarczS8mPGcLznpCVdjPOzmRt8Rj8J8NFF3fZJlFuy2rB\nfrlVsroIm++fDwZioyoop0015Je30SUlSFr+qd81OFOs11xPwDV2kmvto5+tnmlf\nkZkWz7aFFc8Hqqu+YXDKncJmlx+6JzJxwLlaLWQkDDJvxSdf6W9vC8GkfZsmR9CB\nMgF4ezQZWbKsYZsr93nJjHCrd2fOf1NJhWO6C3AtBNkbJ0HV/jbK0M+5yKwmsRoB\n+iUF0QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUSPLJqPDlLkKIu2QnxccAO3TKQzkwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCOhKbv\nudkFOEOOir6BXOh1bvsDMobr0Sth079hOe/NtPHsSAHqBO4b7lSEzixSfLhfIQBI\n3WtLXU86WmpGR1OnuM2VOFnCDEpsqDCUoWOgd0F5jRVqZWV8MEIL7Ua+GKsWMlqj\n9zPsWkYNX0hx1oGejp12wMGKvYI0+PDN211MmOzFxksNoZG9476ltTD47w5RUCLL\nUc+1l02Ty2AP8HOviLjl6o5JchXbYiKQWHMhbGD9VMBlsEME7+N7aIxZo62KXPNF\nGc8iyLNfSTaqFVsIRsRVSbFCX3klKPj6J9naHMx5XLZ2smpqDWvYTBDZVshNGy0w\nOkhwsvnJLzPygiTxlZDpKUzIxVvKUt0RsutgrML66zBWRoRDoO0a5zDzxsb+F4Mw\n5CtQVE7vClbdVxTHBp+dxg+pzgzmhzjekZWF5WzBGik6VFBTgfz9r5KyxtByuOk+\nOUtDQZTFnuEFNNn+GCaMg6NKHOVk61DjRGMGsUI8g29VwPJd3AsL/V6vf+SiU73f\nzBYpydBitZzrRe5KPc1NkDPVgmHCygrXU75Q1NXtVJ2TSh4wwxfG8h9JwI6T9Osa\neMlhsAYNG6bvklrEOqoPCUyTyCDYHKLUFtdQfg1vYBBuYbhWPENGugsb5WV1025D\nBPIpU/vJLwNvGphtijrzH7S2hBqczP+RHYxNdA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAGCPeJuMtBw8KgAAAAAAYDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgwOFoXDTI5MTIzMTIwNTgwOFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz\nQkQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA94EKp/Wp4GLPOTyA\nB6tFZfKI0AUjXAD/SloSJcLoiumW85qNA+zUwyJSaYletTynLuUezjbmfhrKXm0N\nQ+lKzZkPIAZPLemf2cXe7shaqu6lGjo82LyZRh+S9/e2yybiFkXMJLfQUb5pmO1F\nOsJQgMAZ3Hp9tIoBcTMA/sedG188/iQ0vbiK7GxmWJFd+M6TPPHW5x9j0WxowHUi\nJx1sHVCFQQ6D0qFJCaDNocWZRBJuxSQZx+9qW+VS2R/3/M3DVMYcWT7EagOuT/aU\nul2zi8XdKcBjX3htrgGybqaQshrmk3w5n+9lE0CyqltwoABBABuJhAxAPSOfG0A+\nOz+R+wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUiquI8B+w6NlmpHjRhAy9bce05qAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCPMJsi\n6wfuDSr1aqKEbYrVt9xTKKcU7BNo5QhQqfXjdsQI5lHpyMVwdCFDyGRIm20fpE0b\nDcRk44eo6oVSJ8P68RUo/5puKX4JkkkKcAhQ6khPxTC1V92BEsKYefDtjmlTDxRV\nVCYV0Jam/C/OtR11wTtVIp7DV3NVYbQrRqnggzjTYJp+lV0D33YTY48Io9QnrTqA\nUZPYuxfBsB67yuG0SFuherbl0FK6X65ufClazjnJ57Lh12wqtaJfU2atiVFNrDMa\nyMgQEeEFgC1nyqGBcMPjvvnjDBp3KjBHBHZrxY6SEvm60CogtYUJMsoDKg+Iuc2f\n08ayeF1hnrYT99xeMHm5kAfGKbvdmX14TYnRGuTt9xNhcKDa6Hr3QUjF+amskJxm\nfzNZU7io+JyWCo2O12QA/uJv0DFk+9iPjer8d6JAEzZneI1N0KzIHKeB0gSybrWM\npyMIh3t15rBiGvY5JXTyfmTvAJwQMawlw9fdsOR+vLGu+Zf1eyCdb0Lck5kmDbyS\n7qBn1SIUR+oqVfE5Ql6G11jt3y4QbvshdPjTmsvWkTy5jzFIoj7n6n4SzAVKPoRB\nLouPZ2c02yIy6PMX6RuAHh/eqAIpjXQV0zN2co86q8WcheYe7+hdJI5GVhGkTt2H\nSVKm9czwaxXoOPRbvEib7ynN8+5XnuKJIi9T9A==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhtKc3+DmFZf/gAAAAACGzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxOVoXDTI1MDIxNDIxNDMxOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz\nQkQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvFiYG5Sm5jVrx2cm\nHqw96/92xgOTAerND/3zEqmGAa42ZnL8dNGpSyRxlLq0HYbJ4zWfhSFmOHEkzRNQ\nBDe/TeAxnb7ylE2huKLICRiIb23ASGrfTi98IS6ddd70V1U1zAbZkQ1KZMieE1Ut\nEM6SUQ22Z51yAf2leF2yIMmy7CjxXx/zRGFA6CbvFC5KaeVq3ttM4xM5Kff69UAu\nof038smoRs2ajN4jlTL6ql9rmxbLcEcODM4vn2dQS3o8r+dib7FzMs5gxizdsDUQ\ndaewL50Ld3j2znhuqaXh9Jtt4/oy8dYX5131NfiiDdRbKD1H7uWT1m9PzAMlhdYs\nFp+dAw0ikSjZq5DKEFK+TQTqcFA/9AyhUFVDFHp/SwgcziRJk49/1vK/Oz7Ok62e\nZmAw+SnxwG6ghwVQgf1JIS37+PUzodyzkNVH4PndCaMj0+2vQhsrA8rIMHDIRr+q\ngA5scYqotaGpdPdiRoN6t1NZ3pVcgCeec3LRWawh78gQEv4JRZEDR46mj9umLJTp\no84vQjOnttGzohM7BQIYhMGMDv3xj3Jwfk/FjuZZANWR1mlpkXZ5uNgI1rWgTePi\nN6O7eNbCrYbg/gg8XdxHk2N+gLv9VsgctNRTqdbbou1dDbHm3FHsk5QTbfIPVRTe\nFTiX7QRi4ilYnJXfoiZ+KFY0Th8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDpVjY0+ij/p9uV5\nhuMNmMVSl6EPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAP4IK/oZaBHVhDUJD+IVoaKUwSfV7efIkYZuTEzWnQHkG\n4WeCnzaqo4tnsRha+SGJPSW7atwT18UGucfs+vSheKlcVJd1+1j9AWdUcTFz5oIj\noqDp7hr37ubg7YhkyVccl0Kdu2s+v2bfq+cgLSGnBUOp0A3GBfqdXDZVi2GjMWar\n7gMf8+SVviJKJqao4CYVL5fF0Q1kNyjq4qwVkcU5yvsCasMD0TbSVOrP8gdJTmLY\nGYizYICO0CXG/L9068SxMvBQ0QTKgqgIouRjgEoJUU3Wzejn1PsETnyzMKarIybd\nmKVJ888jX+j53wi5ZM3JF2P1mpydUpgY1jGnUPVkUTeINm3BK4vcgA0lLPOCMs8I\nS5WOQtaXqpqDSqr3u27iS8PO8ZN3GW3Mex2V3QISqfZzGpZxCtAf525pqrNoUvmX\nb5pB+visa5jQIqvzeCGaaoedOIIC2lTHCXF36b9Erm0hqqfVQh1n5WLoWidPOLfu\n3xcRnH2OmXwyDp1YiiBhnIhZ8SzkudI2EM7YW7Ht5ompfBgr+JO+7jh6FsIuTDwR\ncEuHiJuq3splL749TDDPTKHYac/5FtAdPzSNv1ZJMoZL1QEO14lR3EmkVbGJ9uc4\n5uUTs9X7DqTxvTBnVOmLhuRDSh49R6gTX7gWBPihPnG2qTv2CoX22bnsoDyAAeQ=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 7026D09ED935DCDC44D84D7DA75CCF0ABC1FDE0A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAekk3cpnhteHPQAAAAAB6TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyNloXDTI1MDIwNjIxMzAyNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC03MDI2RDA5RUQ5MzVEQ0RDNDREODREN0RBNzVDQ0YwQUJDMUZE\nRTBBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzIv27m4a/xMxgD5j\nSm+ljZ0zP7dLR8KlOUtEm8X3DBHbbNtFjzimWKj+MRiTyjaFAl9iPlFxwppQFu1d\n9jALJMxGmC4UsSkDi5FY1S8RhTJ5uhe8okr9oqcRpm3Vgqm9FD/h6x4rXUDfZGdV\nVnt5gY1SPGcd3yUzM3XA8N2x7tYuUJQNA19q9QINiQd9PyC5sgY4hh0i+3OaFt5W\nIT/etLFHk+x4L8sFHBR/d4DSDSW/IaOQPrhsHqU+CfqIWdVRjPmnqCiBU/G5IhW6\n9cB87JvXlhJrv5PoaWzKcgQiQuWcW/YEiqLa4WbaDTwolcC+G3Ku03opFj3GIBMt\n2TJ68I9tnTTIaJ5GdxBE5RE5QSq1dFXYIuGW82y4tzKU+rKPZxWKsi4ISrM6ppFJ\ndOShZ3Dwc/DDJJzvsgq6wVhDHjIAIfcpqbu+KmWcPlfsSG5UgRxhkIJkoAobQlwg\nK20BIzOy4ozgVMGdXSuXVpKkJpTtV6wE70YgNii18dU+HoQskTBlsg5J0xsqzTd+\nBbBWvdiFSelKqTWlYmusWciOBlIEWAJd63NH5M81MF7Yx5T/kzwni+99FLIy8fnW\nqxIn2+mSjnLNyNgxSYrqzDPLoqAY/1pck+yD5FVG+dk6Nk+u8meq39lP4pHSFHfQ\nYFMRFMhovazlCuWgLih6TDmcA2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJYPXyLArNHiIk1B\nVDkE5fnl6kztMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAOCf25Xfmw1EbYD2qZLkh5FN/EWl1uCHnwudJ+Ll37RBs\n9A6coHZvo6oObdgoNmoYHIB01qjvF+ZejM9k30jX5SJ7AssdKycL4vgoZ0+Ogxxu\nLC6eI4YrxHv2ldb9ugo4NMaJw62Ktp6x2ZhFUZ1K02iYFgmbjDpRwbYSl8do+fMY\nBNHxFPLqRmBPrIzKVsjr9Q9I1U/2e3FK30aw7x6gm1imWcsmZd6qSARZst4XBNSd\n0jYej9JmTkOQKmZVzXx+iciCi4Z1c4NacerLXdd9M/WXft+L74NGZruye+YFtmGt\ncwBd/Ot0FLOqfuYqZb+tVK1koCnZX6XKFDmvQMxR/J4AVj7J23FDxcuJkK4vaeju\nw6VFMa3Q0PWkTTDIMhJb7ow/WGN3qf44MNxqsmm6IIRBJcWxAnKRn52fSE5bP0dy\n2FCuZ8ckc8tXUc8C5rbuKzylQK2ijBUDmOF7pGVga4LZwUTSTTQMgut5HGBSlmo+\nVec8NS6HwYb87tIRZfAFZF4B2s3ahxr0PBBQ6va2BufUXOKwB6TsPzRo/6rozZR5\nJf7eQpgpnpjGuWY+YAc2H97RXgKQsv9PXI703tjqtqJko60xPr3g9rzfBwbjXIpS\nUKbbnYMKdGxp4gOqNVRK/czmIhatCDPd7G2hCFSD731RVvqCijrtK5Lebza2fQA=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 7568FF26F37D11268567B6864EC72A08C818891E\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABRKf77/xwrt+wAAAAAAFDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDg1NVoXDTI5MTIxOTE4NDg1NVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4\nOTFFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwYFutgck4T/xD8+l\nV1jzyK8UQfSCI2BrCbY39BN0vMiTnwndEGcoBNPO9ZT2VRsFxFm219tiaj3mPkmm\n+dm1UON7sjh4y60+mGbINdo2VUIyagazgWN39rdoiLoyswCe3f8VQckl9Q9ZEUSa\n5SjGEOXWMSSRf0rlroLWT7VlAO4pWmAQW0sfgjmd+DtCJ6eAZg4vLeCCqukp06BY\nPiaQ9d8vDDEzmPWXMPTyg6CNSG61GoQlvgL6to8lbUmoBhvllNZvHaQNcOVS8/45\npPRFZQmipQbTBBS83Z/S3vx9WkYYe/82jgAzO9OK6b4gZUUdfRQACRBjgnvnkrg4\nd5ZCUQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUEYOgijF+x/HPHx0kBWWVxx5jQNIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAV2ive\nLX1TKD7R9Vp6wb3SghwfX3enaa+u7D3RdlCvH3Fr3yMXT2f6TVDGXgchZkoehcDO\nTKCLiG81g48edYtey3G4ja/x4uiorXpllEt0xgGjMut4raix6UlbdYa7LWan3rNN\n6NIht+AVyCnU1dueYZ4cfr6VQmAc4sbwgyYvRm+etsi4wdmpkhNRBfajYLZ0RnZM\nIUHV5yxBlJUdWI3nXnkC3LofYFLSI7Mh/rBqg20B3Jm0WNYrzDeCLio/GbpkrO8N\nIKYezc5njxr/w4ZgtkSUe62wdjuaWP+mm6OP5EGW/CXoFzFP1C7aZUwyUdSpn9dj\nMavuYonWSNsGOGWxf66DBlJgoTRdM93mC8okdQAsdkVIckUsl1J/XabL//YfEBuK\nKj5hli+QQ5JUklWQl37x8J5R8htUpkLBDqqLiFft9AtlCdP6MppNsNU4vkmNDoTr\nwJWA2S4VGjui8vDQKFG2Bd3/nRKpvBZsnZYygKzJiGvTjLaIEM/WfzL9bMBDyKNb\nrSlaryyB6A4Y6jgJYmVAyP1M4CRzfw0/n/qwwcFn3zriN8TKr1havAXx4tubd4V3\nWkRAcbaoZ7mZRj7LH72h+3OOg6VZq2OlyCCKbAj++p9oGFm1thBjRqztQKaF3Uiv\n3lZjPoO/cYLe9gWEQr1Jd6MQzdQWocuQqU5Otw==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAVGTdpP0T5xpugAAAAABUTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDcyNTIwNDU1NFoXDTI5MTIzMTIwNDU1NFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2\nOERBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm3I/JYk90zn9XdtY\nkTp9Cftggw7zgz5t6tDw3W42CylkealKYUkFfE7bfWK/pya+YM3c0i+tx2OHxfNB\nwtaJuPwHoGRBc0ADsCizYn6ce0yKxBt0rSwwJnv6jiGwcuvYFxfMY1igXqoOL5Jv\nJKQU4redNaKDyQ2SOF1PdxdeHtKkhhFk31BdB0SE1Roei0S1BJFqvRa/3MXK8Eq+\nvX07yNyp45o60xMEpSFBysaiMZDfnmbTeu/EoqBE7npRTHqX8jZJCOUBWNwyAj8C\njLBpEN2Ur2O8zKVcJ5e26noVgWjSNF33G1nWW+S3UymzFOKc5R/MffQJ8U7R6FQ3\noht39wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUqOdpZLXNttbIODWhcjYHccNqG3MwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBk+Ubb\nGK9WHEUnV3iNr7KwgLP2aktlabYUBNFF/Zms0sMgBiImWh07jal7b5Seh2jka27H\nBKcTZTmytUvu0kuZ8zap8ITYyrpgbLq0QxGhFDgzw78XsKBD+EqLczVCIZ1oMETF\nVTK8V4evWNNW94FdzkjQVeNl4KqZsrgcMadpNZYQKpaAWAJHJbFazAulXEH9yFJU\n9IPUTUbGdWnOdUbs4zVcXO6rWO7lPhw7kIb8YD0iO/bB7N9xhW8bgyRAXh3bJRte\nl+g+MChitbe+RuxFW49rheN1XxSHhGqFiSJdXqDpofSIvskB/S/byAbX4KWsZByk\n4RzsKBfm3MhfLkbEmm/u9MPjGjc9ouSpYrMXknBjFOmOnBner33WmdtCNn9fOFqm\n2yQwI1go14cir25yZDoVJnnn1lgPQ735toBgqVEb+ZWH8B4Gal6kzJQHDSdHodUf\nuk2vRgKyglVgDfYGZSyabYsNoLFpikt3VKkP6jAMcGZAPmFjZ8ozqzvZUAmJ0wxx\nzu4O3CZroF8m52adxF3ICOwbN6ldGwF+kuYLDLwbx5wpDf+tNBB6eKZIrB0djlP8\nmVC0esd0/jfeahJCG0EXk0BI7MLV/XUi94bZEzNH4edHOMm1cJBZgmnDGBZ8JQV0\n+MUgS6o45OOkZ5a7uFnCRYPod/5PAe+kUYDRxA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAbQJxYLTELC3mQAAAAABtDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwMVoXDTI1MDEzMDE5MDkwMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2\nOERBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArMo+Pe293PZSBty9\n3L34M2WnEhKzZVm9V1ZINZQqfLxpke/tyyW2tN7QOFd7/Hl/l16VfWVLZQ5rMbuU\nQ8//10PvtcZt4JS2sFAeRk6hzEyHyuFZ4c/OZbVBkjb/WR2BW5+tuDCkBtStbfrv\nV+Dtu0jU9EchcrwQrQnfOAvXBfPtkEAq28cqNBuJcZqZUskUjeugEK8hHCJKh6dF\nN7jCJJuasMwnwpQU2XRDDWdTYQtnfhHCCuTH9zay1g4Wgv0VQnEE1bQvAa+ru7S+\nvFFSM9LSvpYJ9sGCyUCHM+iJnn6DGdXzXtIh7W4Cn5Bjwnzk/5fScyCfWhYPkP0X\n6Y2AHSvdqqcYuKIbeO/5mtLDmcjDnK40sdFF03u7W7gPIJ7Msu82SGSw5nOa+lS3\nfPSbtLVEI8TqagDKzSaE1J1ldG41KAaUtIwr1QtsDgisuhwxUh8Fr6QEDtZ3dDAq\n6Sk+Ea+BPqE+Qsu9BRd+y/uDjZO8qAEhGC0jluGSfruOKW0JYHvci5AswkrXfGL2\nsOyDdeDDzNC0rjSfhwlB6Tn6avwkp+/EV9Cv7GSVrsErkop47/z8cP272DK/5+aT\nu8mjzNxebCYdn6GDvKUGDLmwWA1m2OALuH2CDg1kGASqTy4FtR7EQB4EQTlAA0fM\nQGG1J4D+SrZzG7dJu1S9jQwM5MsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCs502EEmHFNPr0x\nGYBZS+bP+FiXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAj3UYpNKR827/hkfnZsIIn15gqc1bYinT1swGy40bERL8\n1W4Yxh4KufBkYr/ZbdcQiHacK55NK7K5iPORlk3epfVw1MFv6VfiHfthtag17HKn\nAoztG6m6f8crmkXhtpsRq8pddFWtclsP73YmGcWc+cAVFLXif+hSZqphsGnIZq2R\nZv1e652vNtpsmTPAGAP4EjBlPem9A87zQGQ3gGgjZd6QpMNn9RPS1ExSVpEOjGt5\nH5IqI5Nr6eieQTsC7ovTPJb54SkhDqL/tPGJROcHmSzKoJr3iAX0HpWmf3O8ElDc\n2w8EVshjjZd7xJKp22zU5GB0RnE9mnPtZN5OtpJYJDGuIP2Lb1i14SrblvWUWDLM\njy57LjwvSlhZXKfdNtVUL7/ZyqE0apm1lwB1vgLUiBtY/Qb9YqopIlcj3IaKEnny\nUIXxvSVOeKmneBbiClZpjG1PIP2kgr1DNpoFAXWqXethTAay9F8Wggnv0W7zT5Lc\n9fRXoW5k/lL/ebQqdr3RFkx87d5l/p21IMyn6Xe68AnL09ofpgEepds/fc0/2zGv\nRopf3PxfUTTM1VfTEI2As7gm3gVwy0nBUpFQrf5RK7aIiV7ti8+bYy8YutA27nDT\nDxmouB72jtRx8KT3+skvAG3qYAtXL5LDElqtWo5U3tD6ycYjRMmsuF5w48MyL5U=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAg3etGcgjZYJwAAAAAACDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDc0NloXDTI5MTIxOTE4NDc0NlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1\nNkU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApC8bT99CvAKli6p8\n6BqwCIQfUR9GBUf+2X2QNsrSHwNaAHKiAsc8YeqnOsvDcMdR1fTLxpYsctkKNBkT\nMjWN0oVOS41U/Bx8FRSe+Bo1zztWufrIWKqcFPselzseLUpoDOPSig1pxoyLupU/\nuxmVbiFeSq50UT9gzZeYiYOqnVAzHWm/ULvagYNS7tXEpaU0C02m7PEqkEtdNRpL\nn5bjHP+ZXZd08IoqfGTqcHuohsliZwMh4C5U4JlaHfev7vNgO/5IFV8ZQ1zBfS1V\njBMkeYyAWdruPzxCr3/DJ8aTGOFzguZiDGlDFgLvBAB8kycTBvsv0FVqM+MJKoxQ\nLuyscwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUQhI8YNfKS6s6YLEXGvBled0FRiIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAeXH2m\n1ZYuBV11imrPYY9401qEQH4bK1ksl8zGpkPnwZlPikeCW3nJaV1mydzy51ZAxVhF\nOZ9BgbjPKovf4mM2nX1HrczvCS27z6piC/5PGLjlR0BPmNK97nQHUrIh38HIugbD\nVOxcClorwcEdpIOdfdChGICAPg81X0SzmCj+WJ2rdGhZrUykpaQwwo/GH5RsLsk5\n6fkOh+NDMpXiwjhcUJPDnILSSSd2yl+xm2KjSKc+bRS5nxRGmqN5Lr5rVRU5ogYx\niub1qWBDVBXSsZVYxPtLVKRHLAjbutg/cxIhQ/yzciRxHHmjZ/uHZjQlZ4G8UODx\n5VwvIJrt6dVy7DZf5GseV/vhvZe/kba8CroGxFje1KmbjReOyaNJ8rKB4mPqXY3q\nEwZZF/hF+h8SXRjz/FpjYhnMYiTZa40OaEX6i1jE/Vs5hYxAk5LQpWBECLOw14Nr\nXDbz/oqGQndu2MSYLUKEENJl0CXRCIH8g2NLvzJ7Ad9DCPhHr+ra1njuCOm0SM9v\nQuGRBrb3Ju3rdQqjtCooYgc4QPqLZlxyFqxE6XSht9fcfKVvAfsp05k2LhpOqmHV\nzyZR61eednlW2rG8aPzuLyhYoC0fLmazVMkxx5L0SGM7xpzpy0k9G0NCzOWgXOuy\nSvXEtGADUBbutaftaSuwQ5JDHBAuCC//yqwRJw==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhcacaNiWEfa/gAAAAACFzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxNloXDTI1MDIxNDIxNDMxNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1\nNkU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArIaw6F01+0J2PXwD\nHms26sTh2X2QHlb2oVsZIiS7s7BZM6+eCOuGy8rPryUwC5P3TkADtzJs7/9jrzqw\nt+dJPQ8dGHQK3mp+cLb3xf4WDupVnYOTcLmDD9ypg1Kldc084xQB04yf/FVHKPWk\nqdpNM7rMTBZeqikzOdxpH3KEDqnbskdT4jdfKQFlX4IymkuNX823XkJHZfxtPOV0\nWstFkTJjyZFn+RKnRMBYMnjwzGDQ+cMCWsxeEAFcFzmCRUC22VBQdh7eJrxMHSX9\nOTEJjqQ1x7BOOZk8unimoGGCI2D56GSF7YvqAFXnf11TF38uiIyQkbjNipHszlfG\npdq1F2ut9KtcmYM+Cy15R9X31PBHoKjgPw3Q7gJjVW/4JUNC6e+45AH721bNZ4yv\nYrTW+V6Eeo5pvJDIElp1Rw+u47xGsFhgdCYdIAjryQgWW+xOIlHmuek7xxVbkAoM\nswlnKNHV/eOYYolCnGvHJmxnl5r6Obc2qrVPi5EWJzxjeTQe/CI/5x63bpHkoDDP\nhEwpGo7XT5WgJLpapt9skGZFvm/KL7PLiIOvJNIO5yUzCgSuIm34+FgwvHk7wh3x\n3PGdD/ekwDepk9NyYBMAimBpFraC+Z4q9aAHcoV8B7JKzsfAUpkCFZgfYF4IsfOk\nwHYoAvSiBEsdYZoNL/z8OSPhowECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAe2wq6bxr2Iu8ea\nv5abU3tXSutqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAE8qwd1UAdcMFAvOdgpf9JnRNQs+ZkVfmgCdoGiUirCdQ\nl4ZOyiO0wmvgCN5EXYhvqI0kFhJbK9N3B+YwL3n9CZ4MIGaua6If+3lONyibg3wM\nPu0pODCW2Mc/2n2jvYpX/eqC1/wkF91rIsnhyJhb2s5jomzBBKRAqHJgXwLO2/Y3\nrE5lQLzoAAzmgJfnC84LzpJL2ngnV2emTcZbNOTf4VNsK9bNUUG0V9IrLLArMOm+\nYoiCK5nj6359oqi0alnxMzpf0qc3sSKISvP7xr2h8u8tOmkmZH3ZyTzlFvR8nPBD\naF3AcKn1EdnKPF2lgrn0Spkr9F0Jv1SKMwoO9XVRg0I+NPqhKfrftgiO9J4+Jc6n\njscLeC48vs79aQ4iGCDJtM12Vf9aYcATg7tB0Z7VyvGJimEbEZLNIi0xa533ra/4\nivR/k5q8lso3DLRULEGHG47L8yya/kxiwd/WQaR5fnSl/S3loIjS8iCai5KNwrh3\nMy6nGQ5j1IM1QXbCiljKN+5zP93PsziHy2HaWSOdT1mEJ5o0HISWoMNStVAOYdc5\nNvvpYG6K8OXeyaPvT5ED7Ia9OKIFDT0k/DkwolSeqt512JPiDUIEfLS+tB099Zqf\n7uCklOgR7Df/SnMnEzhv7r7ymTm7DXOGZFpLOzhDtu10zfAJNaycgmaLRk83/XM=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 88b3c13f6105d104229f5ac0eb499564acd473bd\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAswdhspDj1wpgAAAAAACzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgwM1oXDTI5MTIxOTE4NDgwM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC04OGIzYzEzZjYxMDVkMTA0MjI5ZjVhYzBlYjQ5OTU2NGFjZDQ3\nM2JkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmyw30YmumKxVt9a7\nu6jp0MPM6gqzF9O+Lxn4X75+2m1TR4aJimBFn1VqX4h3v8fX94gp8c19lUF95Nje\n5WKc8FB+EhjZrCgvBSpzXf9BBetJjaxTqyrZbd0enlWFSlrVb045fSn/p8JgXTt0\ngQJoEkCaAx/bLICPw0Z7PWIxrS6+KmPAURUljXvspFO7K1iacLArlRD1ZS4AbPDH\n3xQ7Q+KtdGVlnceZVNNmdQ1UQWSnv73Esij4b02dQ4NrQtqKQ+44q6SUu/v08QFA\nYP1UGzFkmnSIl295bS0jm1cMAe5v7PQt2Ik+FC69FhQ0TBTF0ILMZHYOQoASma6/\nBuEYswIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUIZUetMmqcacuIrG6lS89UVENMIowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBy2vwp\nnQOIpDE8sIUWL44STZL9BasPWONSUzS4/VFCHeIJ1KlzroXe+kQLn9bO9rIfeENa\nSyTfvDwBHa+VKBprGZ8LsahtXZ+lLgCBUEjJi3DsVp5HtHUSog7/BL5LjtBMoeHW\nLNtSHskFqa0hl3Pnw5S9Z7a33q9stjVVxCuYn1/vG2Id0Se7zN5/yN3A/JepONgY\n5kCYxkuiXZDYrp3kNPZ9LoHhceT3BALziInA4XrD/CkZ71nVPTfWvCBb9KwBWwRo\n7Jb2/pOBuHyLmDHqAVI/sPBA7AXG7duKm6/1lBiSEfKWtf4at1Yvw4BROqL6XHHf\nV+S1fIMbkVIEnrVMYSwPEFGTjpTVQIt5NwRY11IybPGOqaUCUNRp6D+65NuKgcTd\nlnT/lZo7aAYLy+40Yv0jM3eN8ZYwmIq6IkBqQbEoJilsberfDkVD66oT6s+vclVK\nlD15EX/qz35gY/qjgjlsxZsGkM5jGPjrksBtyC0s9DiPFrMO98V9fpZxvYiRKhwZ\nKbYbeYCpUvx3jgH/LvxmOGD2TXyBXduassZjCbtmVubXoN50JYPQ6B87G3WSiE9T\nauUFP2FHRJYsBpYiu0Gc7Y6M12svLMzTrODNjsnZh+aCqNBFPNocNCl+2iF767Yz\nmIvKH5XkqvcZJrBD+vrkNlcNO2GSBjprEZ6eBA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAASdSINaB9kmSQAAAAAABDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDcyM1oXDTI5MTIxOTE4NDcyM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE\nMjFEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqUT8B8DZdwt4wXOZ\nBUc3PNCrfuIsyEntSx/C1wk6m7dbYXiWXZVgfHssCjVcjhMZe4ou0P0PK8gr3FMh\n0eW4pCgdGjailV15lrwdmX5Cshrda1vXaEwjRzhsNkn94uZW1g3ycgGj7pzmWhYn\nyJDCfHK2a+9EAIpIln9bfglSNPCpBnIhga6KGxn6RSOIi42KYxLaPiApG4kjCNEz\nEmxlO0/7Xos6NbqrzhYcqq4D9gsSyG6c9xf+73HSdbsKhURVhpZIYJfozBKmaqCF\nXsIOpDIWvf62I+yp5v4BlSXx13mgCEmJPJ76JO0UX+orla1UPL7S1bYbA38JUNN6\npmuWBQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUPuphYa6suRIZ529x3WdTqs68BqEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBVtiIA\nnAl+VolZyFOQVRoYnqW1yerM9IGbBx35vafmLYErHizK9oct5uZNvj4eIG+q269y\ngIp78s0feu/MmwhyeXP/JVzGRsqVaxyPL/K6mXpJ8H2EoBUYXX8udqIgOKU3vSqA\nE9PUskBJYUoLSFaLov8Do+gSa9ljyE4yMyIvP8730Nx1HChgoColHtbXdIS6CvdI\nUF6piLK1TIDNmeqmXfaL93rFizvIC3pFvW+kLdDGSpD1fnSKAwOPqxasvbo1LcgP\n1SGcr9qz1ud8KBp/9wx06PdMMw/sgpOVHlHyIIPTpZibnda0vvtYIeXNG47BaKaJ\nvbli8JSUJ55HubYjH7AxyQyungVN1zutAulo7ldzusXY42pxoGYRxtz+E5jJ2pnk\nub3/WHZc9fF0jQvlxfZlOYLiczQKwSG63EHQIRh48gwymC/2066eXpygfCoYaGJo\n0t6tk0JbEy4KZFK+fgP45I5RCwsCncHk338+NBFjHiX7SrLB/HaW/GWOId61NEBF\n1H1Ybefs3j0kUqFWGKlXx2SZHTmiC1gLQ56f/tgKxCf5TQV350maYyfG49DUDzE3\nUftraqhCcUJWdP3cpWdy2hCMO0q5eTNep/e2HI0O8n1ICUgyHO9uPoU7+hiO2j24\nC0tMR2rD8pVYE8s5/LCzTj9TlhiMpNkI9Hytlw==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhSYz5UxlWraggAAAAACFDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxNFoXDTI1MDIxNDIxNDMxNFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE\nMjFEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1fVZSH3oK0tDYRon\n4DdL4x2dMKsUeM/SDe2sMUVE9wXRUYn3aB+Wm/Prs+aepxezAV2w7bf9tJNR8ICC\nahwCUhmHJ8/jc2maNdXT8y237M+j3XYeDUwKJLwWuNkqHXujOJmBR5rl0yre7o9s\n3ongKGW2giamOrumelWN9nUxRZ0us+3woZuHlHR22nExekRrcCHdiDaYIc6c7nNl\n122kHmwjOEkKXz7Lu39GJfNTfprI/c31AS5sjBd6qRnNlZOPANpO5hA0srdnM044\nJ3ajiW1pHdxxwXlZ45HI+xT5Ka85LLjNzr4KUX58TOlIzkxgp3aqrwmOLBw1h/DJ\ndDAEDdMC23mGdLaFFeljXwkwGvp6uqNitnjnpK7hgpNuISut2bOuvwSu0fBToY+J\nB1ApgGvIGKCG/MsRzyFoOJq479Sn4VHe7vvk0JFrWoE1GJGEeQMFZ0gAJGJRIEKw\nBic919/wLgKUsmUAh4xMMa7gs7sQYEtlxVM6gM5greWPbC4mTmdn6hNQEA+AZPUb\nFeiKfflofnVy3SQ8BR2yhdkGLSkTCIaSUYzaR2qVt0Eo1aU/1MvFLQEZgBn+Jmso\nXNcCkDQTXYFy9PMREGyAX5MA6uazRhguIqFTzZwkJ6RMg7v8iHs5xTpVObcmvbX9\n8QYUls/G5viWqMvCc1VqQKj/VhUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP9FxCQNiJsJHj8Y\neI3tPJd12bFbMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAE9ondZOTI57eYARh+sxH3AR8kmpU6d6BEROI9zdY7611\nTB2KBtGkJZTBxTdgGbZaLULIHa9/d3UlWdebW9xXi4VpeYVIelpGGluLvZssXfAy\noBvhoYl19fb1t9lqvof2ElUsHqMkMrvfI1C1lV3NIHq9lrstx2RSsKX+MNADGCUp\nSQTvbW3caO+v5n6fheMq4v9ax/H2NzYa+B3JkM5DWIsrdGXhH6nvDQP6f6oXzNSD\n8jA5cQMVwUkTi1RCBbrTLeF0bG5lhdEVQ5iIk5ogY4g5smUQ1JkUM/Ao0C70wXvf\nFmzo9GpgsBISnXUYQaLnj2X5zF3mwt2lCqIAWUO24EaD/qyVg9xaQ0yG0XPRxVUW\n/GxitfqhXVLbJ+tSEz/YOf1hrnATWhBr8djfQ3g5PAV93WzhgDHpOutSiSezInnB\ncNLLO36mqoLqrHWD3r8cbiSCrLvagEuU0thOEvBMdiMzBtxBvf9logirVnxSXFhW\nGmj5GllQV1iJC8g5gxLP2MZtW9Drw/limWv8t2iaM+ycSRHmWxgFKyLrc4ixvm2m\nIi2idlSGW/kBPUs75dEXWc8eHbcb8TRLpkKJRuWtX22YzUp9+Nn1C1IfFQczDNAx\n6URFtej5KXHaL8jkCSTrFWDkcTnks60NVimb+Doc1rTp89o3sEo8mjc1F0xFHGI=\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABodkYGmth8dtgAAAAAAGjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkzMFoXDTI5MTIxOTE4NDkzMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG\nOTcwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2TMd26m9d9f9GwrB\n5gU7JxQPq1PGqL1ZcGfew41AyscsT4fWGCqPfrwGC6YlkXWR+PNox0h2lXktRvGW\nbxhJw0xRS2c3z/9CNfWEux+exkkowH8lt+84zRwKKoSnYihXgFhJrJycmcyvByz/\nqnsUKts5c3/PNKwStUsfCYB5ozAI7cdPQm4vK4IUD8Th1HplIC2svQslgLt8Kl76\nW1sY1uklg2Be/jpNhZg9ayMSvlvm1F+0ZFzLizCMn3RUU/qaA4GNnRfcC3yjCmic\ncDcBDd92yAUIHnAsspVliphyXmkhSp5zU9jDYKmjbq1L9CyL6emyIc4Pr0m5jl9Q\nDurRKwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUL3SiVXr3GkhTI5chLyncNYbBx4kwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCVr0l9\nwRrUjOBNvKqXXl9cRyku3L7fUMbvnbUuIxj8aTm1v4gLhr0V3P6gA2iuuX1RydnZ\nuRSS3011YoUeNO7k+rqeRamphXg87X+B5OsbT0FK/um9/aCldXlE4zjHW6WmHSNC\n594VatM104MKyEMPRRfpL2+bCg3ahD0XxtNNuq4OzphtiCUS3NZ7HyP0DGPeMVOE\n9166m2c7lbIgWSCXptwlS4lcc7oYciKTTlGe+Jh8gSPHsugdHJIe2jN59Yfu2aED\n24OQGe7bo4klUzfHQKRPgIXKDNSw6A3lr+3o7Q+zUnU61ok3E5DwkHX+YiByMkB9\n9YIqTzN2YJ9y4z8i6uZcZL3UCZp/ykCjB9kQXdqhAvgnMVIOKfdRxvRPOxURnrfE\nfSbdTxqhL5k1nBuwcUh95sW+scYUmsmWTxWCIN92drGRFz/KU+u/txosApOm8Ngm\nOwW19mP8bIA8BH34Wub5wrExujjXsVFdpkZnRnPAOhhnAvK6WZrvqbL4zhIvHG8F\nCFlqW3+ixDr6g4BnKHTRwmaNv6y76hFBJKdJgQAe7RD8BwSVgPNmr1OZi9Qhsui+\nCg4S6m9uTTrSqhZb1/BigOkqGdgCz86AgfXc7GmC+50qfLo5Gz03JyvYSgMdSklN\nS69fko0b9R8Php8jWIyeUtPfrqWJnBBn9sJXeQ==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId CA6970458673493A8AE1994EF1E29238F27F4518\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAClyORA+QqiYiAAAAAAAKTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTA1NloXDTI5MTIxOTE4NTA1NlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0\nNTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAo8TbiRVYoe5KWb0s\n1QSsgo47IZtBKmLSubYX7SMY7KhdIyRTE8SwKkp7z3lmF/CWUXB10gih6cxnFw7K\nNPNdo/dNLcnCobLtqfffJTo+auFnzU20hk/0zfJHFlom75wVqnEAlS2hDMlwYEq7\njxhJ+4Sq2HD4OINS8K32k9z3uoJtCkfy1dMJpRJgG3ZK5CWTqKgcOF+jB259i4Nq\nKv0mj5KRCHt1bmPGXS2LIfRb1xLIiS4LpYtTadCYFeyFAMZUJGRbQjAVUhLqPnNV\nlK//7SxF51gBYHZ1c7sOlKyRm3qqvL7nqJP3zKQz6aJ9+Yu30QWXFbRnhwnOH6zE\nl7mgTQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUJLwHsvTLE2a9oGkGq7zxnczlJqkwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQATMdfA\nQuauXelo6dxPCDdabtf1EUD47hjEpxfkrKQncxpwHgUD7m7YFLqxN5ddXwVHm05n\nwKpAlhlmkk+ZRGxIPAysLyTDfIpzNlHMZYaJTe+JDSGR2uRFsBlQ4yf75S3eR81k\n0XGwokLiqPWAe2OVNr7sxYoIWJLuVFwVf/RPeFcB44B3jWjX3JnXUG3Fex2sulq7\nrlCXNzwRwrpU+A2ASMlfnz+2T/YIWfxcUxxjR5l8Q+7/Yf9pHewO2j9zDoDniH5e\nKCAoIvpGu5c9OcncTIy1b4446ycGCG6YLia/lZIVQ7dk6KCTzmC/Rliu5mkQjIqq\nVUBPrUths9k2qx+uaXXPue+C5HQHrLyjqRbEf3XYYrImfUCfX1gKZzmTEngg8NrL\nWJ+deECg/6FjxYS2hFVZfdu04sXKkuoH997nZ/CDXplh9v9ERiCG6P20V+SgL/3p\nK+9mgGqa0e0vLF7f1Eb9uPJ1O8Rn9LUaz1GP7lIMzQZ9XwOKHJa96+3avPXqvlG1\nX/wRoFHhSMqFtQTiTLRSTFR8FMCsT5mPBKcVvuT+hFTCGW3uZGkAOM8KiaPsTKqE\nJWTa1bMZhINzaKBUIs7Kg8CENzuz0rVJL+Np0qz+eeajirRS6Kx6JNZHECTh16ux\nB+njmy7+2Ck1ot62M7NCe71vWADE8BYmXNvuHA==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId EC3F8D4CC12ABE88A019064E8A62B7018FA2E359\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAC/B/SbTNs7xoAAAAAAALzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTEzMFoXDTI5MTIxOTE4NTEzMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF\nMzU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAocch2Ww7ks51HUOq\nxehio/ftHLKQQTxQjSQCb4WNwLPWMMtIY5vRTGGKK4FwyI1N1nIvYcbNIayQzN4r\nUlDdGH+vQ0MJHj589StrYdU9C/hkqozuWsWtZ3NV1M/POzoq1n5xA14kxoWJZ4k2\nfadFASEy+139LMS/qGyHp60KPU2fd+NA6wVxAAYagvQd5XBcTAVa7CpjVuYw3PDW\np1pyx5VCRwrTfwX+6qCv5e4LCR0tnl9vNkdTo07xPHVlhj85X9c/tgEOhRnQQI+J\nr1vEv/pOPwRl1w/QlBhlrKoHueSKsTHLdd2SxhBVwspCGbrr+HsYr/Gvk7xPatTc\nbWlMMQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU+uz8QMtH8DtEAakyGOo/EELm+2EwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBWp4bq\nHLMF27b/b9LfzDXPikAWNlSGocDH1VN54dYAe8du56OFOvXRbd4EbyOaB2YALy1y\n3KKRhXmqGBOKL+k/kwT/Je50ivJUaflld8p2CBzwC2b7j1JyEoqr4UKrDwO4Nolv\n90eIbpzqyt/x0Ran15o9wP9Qxyawokl+wrOt3EnA0u8k9WMDMDMC97Eg5pZ6BdV7\n5WU/bqUAGIynphtdZtYSQY3SIGCUuI7I+7GthJaatiLiqWv1+pV9tvDawf3xPr9Q\nXiEUJwXlN3v6JAm8S5+wxFAww3hqIqRo0dGAwV8IuFVju3pVwY14kSSYNn+gg3FF\nN+vtedZfHlu2WXny+ZhjyTpslahQpvb0eFDhdEwRlnAyu/8jbJ5GCaqCgYs2aZ3p\n9mN2SfbV7uol62452f6+Rb9m/TzyV6K49FD3P6k6uSHMSZQOmZTMGVle37LBZU1X\nqLUm0JLkauY86OnAbxXRnzaXBorkzWfSHL3R2jB7reH3YKpQQ0UvkXUVhlvcakfY\nHvIbdVN/SFkCoohBZTjUx6Po0kwR0bd8MGExwulsSTk1oZERQXo/jr1bURVFd36R\nqw+CxlbzZvsXXn63R8MR3F1bqI7YaapoIiYU6AMu9RER36lMc2NF7d3h+oRwVKvH\nH7jMZexBdVVTFab5SDmBXh7sk9gW0IuQFnqxyQ==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAB0I7G5UzdkyOQAAAAAAHTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDk0N1oXDTI5MTIxOTE4NDk0N1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1hNzU1OThiODAyNmZhNTQ0YWZmY2JjNGI5MTA2YzEyZjk2ZDNm\nMGI4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwV1GHsVAbIL6Ep3r\nkCTA+TdlfFC6jndhDf6J3/nBOqz0/G60phkdbFmC9gQw+EkR0OjsyZ6JWB4c2dug\nSAeB61LXeJsIYZllKGUGPhscv4bKcBxP/EBLL6LoadOBi1sF8OjQr4egyd2WQdRc\nAqJqF62q5o4UPzODsoftiAsCPoBL8BDPkan/tI90ScQXJjXXHBbQ8lxUPlHx+3Ty\nFlOcVcPtn//ZULNh1zPc3Q7yQoKLVvKhMgkGZcQnvaKSi4QMA6S54WqCdpp/EesN\nQloMRguzxSVnW2EJx/Th/cxN8DA/PRWDU1N1Kk/+ZNxLZa5CxdpjE+UnX1xv0YtI\neYyNPQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUMeSSVkjTNcqhUEUNIaHaJ+zSBU4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQArAdiJ\ngSlfJrkfhbrezXks/gcvKa5zjhwmDwE42Gv6VAq8OqbBUQIVr6ufpSvMFmwzQzS3\nQtGFTNgXlrpl1JEkGX62a7qZMjGyRQsOD/ehk4sEln2O9nNaEeEsJr3/s9sWzKS7\neoFSXaas4G/g5elai7yFbj5sC4BnCZ3XzDpJXlXYHn9GCtNnIq2TgqDElhdh8DRD\nR+UrjcPY1W1Psexv6HYzLcIJnDjkSRYKReS92eXE6nFtRZScW4h6nRPBh126M5s/\nr4ftUD+MfP5efC5U8cnX5ZOyaM1Xpmdg7dVcPWn8ooepwYWDGOteFjNTTD2XWPbA\nII73E8QyrozinuFciR7SQe+O0a77WTUfCyBBg2QCsMNSrFZA4X9su5eMeGzh0YiU\nZUxY2oZTzpy3Ys2paRiuXYpItusvZlnrHkX4M2/QvfbTiDU8YpvgZ3qIZieCTVt5\nvl3tRmffD+o5xGbXybIASNCWa6PJQOW/vzJVl1uX+PljbL0jKeyJutKxW2aqXSEc\nL5Oqa6Jv6KpDli1fjeGZHEsmXCCTcXcCjuspHLFZa2QN4/HONQZFr6IOKnopCtzz\nozsRrJ7uRdj/8IgGlgIOllb6hT38cdqM0FjyrZOoQ2drNXOpdHXy0xNzhqQ1a9Ij\nJywXTOSldn/YwMQCAgLuHfhAucM5veoMgzXiyw==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId bbcf7cc184213166dab5be53a87014ddd348d8cc\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACDIUbHcZtCC3AAAAAAAIDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTAwNFoXDTI5MTIxOTE4NTAwNFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1iYmNmN2NjMTg0MjEzMTY2ZGFiNWJlNTNhODcwMTRkZGQzNDhk\nOGNjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsCuSNfloE3CQKykL\na4x4nHVXISra4cS5eYJ+I7uFfAOU2TZXviwfFEb9ZxXcluAdFk8UVI7SgcyZhKoH\n3WKqqLO9rN6JQ47e7wrvurOVa+YRV0aHpOMCXmkTq6zRQiuJuT9pVEhQ0vyjMtqa\nXyvHFTXkIylHyeJtADGpxuAwyAl4vQGPx3O408f2DvOua4BDlbazGMz92DDt+Bxk\nnifKiW6NVOUgzQEt0ygOGEwGClpiIPlv934G+/k8Xt0z29pa7dFUUGNjfCp0DZCV\nSO+BVUEBUIu39qBfFAL2BJshw0ERaX7QZTNm4zKGEOLFGqyqsrUnm5E3dK91jY6m\npHYy+wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQULKThEoZu9nZDkjX0G0BVH+h6sHAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBl5cGh\nvDXr3U2fVfNjklgqrn9O7/cFRIgf0mx4tJBWfR1sqXngIOXPP9tSoUtl8AE6JghI\nPcIpwP+5KIdg5ca6TOmOL28qh4kaye39lL18V7aLIdid13kwLmvyv8K6GmV/dbJL\nhLMDtrZTlgNh9saKUinbssSFcwiBSWISQG+4M1NBbzOg0+1YCYQ15E+ApRk436Y0\nTUBX5MtUXP5NdlYKIDJi+lQNzCnQ85cx/Rh7cDr0hTp7Kd0R23FLGn8ca2KAIEzO\n1Q/TGFj88Wdo2MweWtgK7LDUq753SN3H/WzPQSKKg0tK2+nNnsIYgzqr5EN9cUWG\nqiv995ViA8WY00+R097jxoK2Bb3DIRyFUNRH7v/9Y28EIw8+EkC1dd1VfZLknSFk\n1i0Lk1RL6z2eaRw1ktUOVAqIwkRpCfo/xotTXIEg/SAsFN+0WwKQ+7Bc0qXipt0U\nj2U6eJpVDRtCB0YHSJcejB88lnEVQRAybF4VLluHdB0ri8Zh/HrgJl20QAZ4nzG1\n7PLHaaXqDSawErMVPammCzFvpr81OiwIqYfEAsaryC/n704xH+z7+jOCPpS36DuM\nOUVd6LCfPiez7VAW/HLm3s1Itt1M1saOEI+Kdh/6S4wTgu/jOez/vVyKLiEZgUmo\nVWwJ+m+Hxi2Egk2+FkGJstvayYltZAZXu0+Csg==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId c6cb2a4db7294be911724f5041310b4c42f89bb2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACZkpQ87aBlKPwAAAAAAJjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTAzOVoXDTI5MTIxOTE4NTAzOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1jNmNiMmE0ZGI3Mjk0YmU5MTE3MjRmNTA0MTMxMGI0YzQyZjg5\nYmIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjZ3yEU5SCsYRWtD\nwDw1RX0lzckp/k7RNIbXmKo4TAdtsbgHKIt3s0Y2HVtyRcXP6NsIy+P4h0oah39B\nX5qFXFZOyBIb966VlQDmKjIckqh7tavc8Duh4Y+dysIqkXIqIb0vwQHqkMe0qKCy\nXaYvw/TCiZq/jfbnu34mB8XHDSPJTfWHFOAm0VqDj1ZIE0uH0ESA5zJil2AvZs0d\nSMCeHgbck/OkwiDZoVK63AmKUnvjnTlHoazUn6k2s2yE3Xn5HD6vIHAs3H75dC/Y\nrkYYaCbvJXyJdFeZjkqajhXd+TniVY/YwFhRBbp6zZRi1FjQEoNB3H+bs79LFs5f\nK1krPwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUpA/aEZT5TYXMRYqdGmLfgv7L34cwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAyU/9f\nw/xlImm6Vi6HURiBvjhlJECoSS1hsbkWJU2CCuvFyWNEQwS6aVbraehSTm6fSfOW\nmiVM+vu23pfVLT0fd02KJ3ygAjI1ud3LS2nKl7qBE2o0M5CRv2P/63t3xLNKw0L4\ncHwILPPwqm36G1D8ULrXXhp88rWyxeSGCZQcgj56kOB7fsVKCn5CXfuhjjHTU1ow\nKRdFyK0D+djJtfkOPKYyrH4Oxypvi5zddTvOl1fgd+0Taz9NRNuyxOiqGqpY/2Jx\nXJDkd337kwndffuuCPVdP1OifoT2lEzsLQrFzx+BhooUl4cbxcOCw2qWK/FLONJf\n9+bSpw3AIswnDXz7lt4xfmbs+x+oZKh5u2wrnA4g+DdQ7zqhWFfWmqUOJEhtGfJI\nAkXQiypM0KOLxnPTXZc2JUuLZrIX7SSbYrqgKQVlkfeX1KJ+aG3sFdN+IK4uP3kz\nCnsq53S8NdORJniFfxGXYM7GI/0zzu4BnhnCT6OzxY/eg78K3l/M4tMUjVMMh5s5\nnCfF2znRl0KBUat/xQVaOZXdO32TssxzhhFT1o8qs6vWJuzflqbz5EU1qHuyTXhP\n2krfKvN3sQtOCCZp+N1YqutV6F57FOBPJvAiJRX/dVoOQPOVrCJe7d6H7p7mRhYr\nvF6O7NA5dZX0tCvEUapabxMO9GdTFQBbBndC6Q==\n-----END CERTIFICATE-----\n\n\nEUS IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACyhVhy9N1pAOQAAAAAALDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTExM1oXDTI5MTIxOTE4NTExM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LZXlJZC1lODI2NjljZDlmMjA5ODI3MDI5NzQ5OWVhZWI4ZGZhN2U2OGIz\nNDIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0NGNi9RlmSa7nE6n\nZe6OWGDTwnl+Iu9SLzMdyqRvUATu5K4HbCENNQxWGB2VPJrNEK9+G/iEElVtNjBZ\nA1cJ0hwAplWnFGqUVt+gHwQNze+5vCZ1/JhKIkgMLlwfBEasNl9l10o1AIoBQQg0\n8p/isoI3U0X0VblMIrY82S2fvOoswb1Jzcpa3y4VX8nJp8xAhCWp+0poYSXIVxHu\nBiPh3zSuYCgpsUqb+f/5e8mAL7e66YV8uHfxYugb/jtwWzTRGIzIjCBVw/tSCeeM\nBVPDFhhcmJlhp0uj66W4zGTQVRjAeEKQwT62jdZThx7J1pWZDIt6vudaRKMua0ZV\nCh5aGwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUgLWG+JtSPDI4nRuwkZtDSbDW9MUwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCVD24j\neIzi56zvsiBijO3DHdkwN2wWUB6+PRG4hRIYYuOk0Sa9FVUam3b1TsJ0PBnPF3LI\n7qhsU2yAcKAHR8JPM2rNzWcomGYbSANfRtOcDT7onB9myJgtRsqgRWA58jm88LG9\nyO9bFdngx04chxsoSPm0P0tXDW3w4KmQN9KtNhLquvZrBJ32Y0FZyqH1N281eflq\ng05xRmyesmS5i367waH5rdTXsiRWPOX6V3Hnatd2z4bqZbn6jfwRgFfeRPnkRu5M\nAUuzpmDz/xxB8qOF5c1logJ7EKKCUxQnVFYXRZKPsAzrtObH9+K+/gnnpBKIQxeq\newPNvcJu6+FzrJKhyK6jO3Br0lW3hcoFg5+6IR7ebe5cEuXrT6SRoasyYQ/Lzs63\nrGWtSFc0ul6Jm9UAoNyaaz22xJonmMK2mgLZEnbATogqMAy6CBy4dOqdwLm7bUiD\nyI4v1Oek8n/StKcaePn0ag2Pj/xvLTRNECw2aZYCRLocSArUq+qD5HICd1Ar+MDa\nCsk/axIMdGvZbhM/P7V2ctzroIjdwy+Z38WfdYL8VGl5WTmtt7+rM9jcDrfN2/OG\nkSr7XEwUBFjqkWtm8vgceFTJfukf+RPBqEneZADqfSY9FVnp6ksY7wqZMi700WjO\nkHN5i4UY9dO1dOBZ2ruhTK3fzBnIUxIQlkxhCQ==\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAWz3eM0Ti4VNrQAAAAABbDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQzN1oXDTI5MTIzMTE5MTQzN1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD\nNkJEMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANnNzKJ3iA5MYg0W\nAODybUV6b1Jk/TU0EhCzUd/ggN2cX0zB//bXJwLk809s+T3SSNAKC6JdtKgDM+9k\nyt9kZwKzM7wuU8JY36xh6LoTaez51spUk/axqsh+E8W1UdARTk5anHT9d84iekJL\n19U1mV+jZGGckOb6wheOzXlTK/RxxxEAHHCZwZy9tOFc7nuQH/KKwqjYsQ3UVm07\nYvhQTUnRWURKSTlrR3ubF/irXIlyM9edhOB3QEwc4QK+AAxF0b501w6hM5IXmvmP\nXFtqDP5RW4Qyyb2szSUt3i1FSwaK8fVO2RmzDLBF1rTtlzbeMdTFWBiRuvfAOJnp\nre4VOC8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFAdqFRppjR2aoLPIE4KipYTxP1dJMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeNKl\nw0j+exleM9ZMGPBKY37d5BajBOYUnf06bKKQA2Ht2C9+9yjxNBEKbI2Jijv23l42\n3Z02XCrpkmxN1YL/OiDvxcvT8iobV0jYkvUTGupZWOnmxtQZZb7NtbM3/44E9SOK\nrPyER7xkMyMZ44DVJvBaNNbnKWgSFemwP+zutMKkmYEGHMYzaDv6ZFxMthBNCtJs\nr68OacRCW1XsSb4gQLddrahaZWRUZRo0J0X6jwUxmwLJ5jcSJ34DcS88O0yAUjHv\n1NvESEiN3O9th5HruV0RvLTTaMnO1qzPBLRxoJCJVyJIu9uCTouO+k0XfYmPm2ZV\neXTrt5+0w1nv4+sFZQbQtJyGQhG1py6DNU47kR3C3vSzYQOMXsp1hTJvAXkek7fw\ngKzbYZYmCiywIQdsBq/d1O1/aTdIAPfR6GHeT6Gsv20x0eUmaXZCo2osBMOalKoR\nadbZfg7Y3sVrWlF5ZkFyBE4MggQty5BtIEvzJMnignQd274aW4HNtmg3jB5QCuqd\nf9Wf7xpmGoQid3x0GgxIjjL9FbC/lAQAYhIcOpJ/BHf2aJWuOLRtYe7lD4E7E2F9\nTmzLEQ3nkVPxRikBq8B0AW5l9UR2/SfSg9P+h9ja8YZPU10rLsVUQNFcadOVaLym\nlhI2ofSozt3JA5M7ybJ8MxZ6n6GHqxud0NwaeR0=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmj3jQKSorqWZwAAAAACaDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1NFoXDTI1MDMyMTIwMjk1NFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD\nNkJEMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOAqzJU49i6O/V2k\nVcxr8m/RdiRUWkQaz2JOUM80thxq7o9/Uq6lJ7D4jUyrTO3gxFrIOpejlaqUPnbj\n+rJRCG5jpl2uFYWSqzMq+HZb9n3HLeu8rAt/y5rlyvKdS3UZZKAc0+2dMNiGJkh7\n9z8QfReX8xMdb2w8aJJXZX1sAqTfOoXpH1tjqqf0sQL6TfOX6EWQG8eYfAcvcI4d\n5gSgKVup4vDrTNlP0dO1YFQvl0hLdLE/44hPxL7TnihS/afvlVD2nGXkKeDHyGZY\nA8AVL4qQQEqR/n7NFqFO3QBEoIrLMzm4F3vyug+haEpPhNTX4x+VDA2v2lGJwjC4\nwG/obSYE8DJG21PE+mB6Xi2pdvfkgQ0zhCW7rQ6PPz3B1d1x+JfmGFVhv3Q50fKm\nSgl9oT4QaBjO0vUJ1e/8RXmSDVRrJoaCK7e/OcZvhZvzd/yGNdeXDEmWufWHbAbN\nyQ/X8Wq1ktstQC/iuOyUnJDsgH5Db5DvHrFlDpJ3svr0RRij33nkNHxNEr2ZA4KQ\nI8DlRgrPsEwpPA2pELj8VhNKHPmQwUu0kxYCxamfK6yaIqh8dtaOtYVEQekWvzJP\nxT0Pe0qgORWxzOIcJqyzgDylEFppwP44jCSieO/2ADKcTJ6JpCuaOVY0PPMPoyUK\n+WvkPy7iyo64zdhFMpdUSVh85GSbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR6oo9hoOCWWHna\n4XovlYAqDocmjTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAInT2go/UY0iGAJDcI9OCT3fiMz7gn7O7fkosqq5H61D\nyjQApZdwKt0/Wlxa6VALBpGcz8VQCstwd7Cp6jy2czuOjwcmHKtIndvJTJ7B/cU7\nN8IWaq5zSv7jg8M8jKKuAW7wzSEnHF5QOuTu+P0o0d0QBKGp1nTXC2G0MZZU99An\nJosD2nbZ68eKVXAY3uP+rGwKclHp1unrcoC7v07Yu8J4xM+E4KHga0muXNbyr0jZ\nQiZ23QXa78CGE6FDodozp6xZmZWBfKmbcN+XSntNFKsxjSMwItcnKh+4KXbTIwUD\nA0Cp0KuJBOy3oAafWu8SZbI7NUqEojiy1StWxlhOshx+vagb9r2SGeMWv4RqnbHO\n2ai/6bohcS+5YQCesiYG4azJ+Ki0DiA55mpdOFy9KpmURLJfUzhFUVSvIV61Uos0\nuLD6r4kvfforZ8+nLYYlbMQhZsLpjJ8hg5KOM0YBGEnwj9QoYUjkdXkQlbXgjIDN\nSYcRVBCGfmzgyyVOSBVhadGP8tk1T2wiou95s8MR8jTJ+jrLWCC/Br3LHnX6sBmD\niEJ9TQHGyweOYq7O48CnSmVorqR3+3sawu666NCKrVcdP+mivGAB0wNwC61TUjBa\nUwVMgp6FIUcpyf8Q95VOXNNX165ykTwVkiYXTZ2VkmBVemhvbz729oroM8PR1rjI\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAUGqAMW+COb7ggAAAAABQTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDYyMTIwMDQ0MVoXDTI5MTIzMTIwMDQ0MVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5\nRjA3OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoep2G4F/Ca7YdK\nTBeN3Q19clOQppmUEXsI3673nv8hcANemB0jjAeAnt+bF85WIy5hh0YYRnqiX3At\nGJQ7fCyaB8YbOxT9PS6ikaMiKiRcHn0w6Uz1yauE9o2CBqVEquCnN55Pis9xYCF9\nH6q062XSyLebaBvBCrRmSz+lCxjm9vvd04wHcP+1eGBqpey4W4Y9YwPg6iswekFm\nmZnT/5/NWjVqn2nH8Ac7rBg2yYnUvbXUEo40xaC31IOW0Eq1vT8mknUGVOQoNrs+\nkeC21ZgRxdpQbjN5/jShdyxot1GiRYIipwZiDvv2zQZ2Dxd+P3wq02hdUbXgoTn1\n6Uzrt2cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFAqln0vXBVsTAmJ4fKb0/WJdOeQxMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAA3HT\nXSv9eHp1RWdXbPBx222QQDxu9zqVsvVKiRrpx86Scn8JEuK9HJLqRe6jwMfcCuX7\njOruI+jcEQXWyxIuCNTE+rgoJsvKePMpzHUfhH75WunVKHv0bB9jgBMeoSLreduU\njFIZcthyD2tvW9CT4gImG/uREmtUZ2QZorDQNgvwHLfJ3rHfnmP9DwvzN48unMNh\nfpauDMd5dt/0GAQY7VCpiUabp7WPxGCYEGL3NRQAfzSPAJIS8zyEWwBeK8ObBNEd\n/s7EiJdwDh90kkkpdhIc4ySsu0HVceEoNQ57a9iewkBDYpWO4/NmUkLwTCXk3o9O\nk2QDKS0hlajEhQ773RZnl7IdIap5uz5QYzFDW5VW1lfM+o5bDynPhHr+6RcX4dly\nb9m1su8GMeJGJxD9cTJ+BCkFhPHknWGFRCx8NvIk+DG1M3deNcIlUabGW/aqwgIo\ngMcQpZvbrA6vxwY2+69HwQC/EQ/jr5SmuJtFKsMWzm9oBmTCXs7hu5c3QsDr3/gz\nTUtNXs5Gd0XtSsQTT1DZp/IHUKHrvz+GbQpxBegseoYCdq7ADVIEMRGvr7nrCjy1\nxeInytFORLiWmxAfgTYkGpkl2FYorfyVVGU7q0G42h46dwGId/peb5ByrT/6wFBF\nKa9pLTKNExPJPWQcH83Zk6OVo6/lEfOQmldTDII=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmXQ1TM9wlZhYwAAAAACZTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1MloXDTI1MDMyMTIwMjk1MlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5\nRjA3OTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKZqWeGDTsxQ3bnT\nO08WefuGXkKZ8Z4iYzt3TrX3hjNTo2eIKWysGmS3Vp8baYuNxL6wOvKTRd6JjFs4\nLILjzWrGibud/D0FvNeaDbGvPlo5HbBy5xqpm7E6hSxV41MozePPgZW7MCOtzrED\n9cuYBwB5U1AfAD08p7BIXqN/Sph4LjktgR45fJDUBu5I/ZggONj7p7VLnht4y2gk\nlYitj3gnvQLDo8p9EG8OFvO1ft8SxYFXRLlkXqEpkKppCP7/oM981n3QOZ+1I2GT\nhYWrTYihcXdKApG86AQpda2N5oPjNY1KxdrwWR7W5jIbI08rvck0gjLNxULs3wB7\nhIk9/tg+6N0B6M/SLpnCkBSoCz3/bkOLi42tAs92vmYq5CntWpdkTD8RkLbpu2MH\n3318IICLcS38wF4BkJhtyLevhLT6d+E6dxfZiD79Va6+E2b3945eSHi++A91pzQ3\nYO9qzLebYZBdMEFAAZ0ssD4CUPWucEl/7/iGrirCt768eBzJmNFRC2fD6SK/bgNQ\nSCtzWzmyABuysiJZzxxo0mAMkjc4Kp+9V+d7SOhh2mtLubLF2n+BoWEKybhKRDPu\nJQekoEvdXED3mPsrDknemvC+6+0LCd66+gUhFvV65zliPO3yhnyk3JLYLcMTlOTH\nMGMCeGKwqb0LFyATM6sXJ2CrWx37AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSnozOqqzPTiOLr\nS3V8h7ReMQnxEjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADt0XT8KW2RArG4lDX6TmIDig1jpY+h9JUfSA9OB7wM9\n7I8qOU/mf1RfrAuE8bL3aA3UvU7e2/Sp38L7g506eQtJjk4yyzjTJcPULJwnwWqW\n8mwC/Vt3aJbPfJ0puYxR8D6hcuVqB9fAToUBsTng0WD+Ho2Vjeq4BNNisOSWVSsf\nGXeLbwl53xTmsm8ieXfTozg7A4oO1/XW+v5fujEMyJftuZWNlaYH11JtwSsbuN6r\n8yE+oTb/RRT47t9XpzJWEtGi/4UBPof8rXKJb1M0mWFovEh69BNB5wSfArtGwVye\n8QRHbjlgmzgfQJYSZRp/8pdWxeCJnPgWz/QraX+48ssOC9cL0J4NEXUXe3dqDe90\nqEYCDY4HDYGUcOikskZ7frByItgBbMyBavYINOUDcYMawStVkw6aMEU/HP3cKlEs\nLSgyJq4ceECnTYfWv3zTHOJEHuwPQhStMt6osAX53VoelpIqu+NAWYO/aynuK16e\nsfu0HUXqiizSlMX+fFnyVcIZgyLeol+RG4Flmt7gS15Yjk38HDaIgok44ZX0x8wk\nFu+8UWVNRh1+cAxynW+4NuQ6+B5OhVZYT04lR8r4LNeUvsx72UpuNlCu8qi8nAlq\nS3g+bAuJVwTPMU4oNhQf6RuCNs6Of5V9GmKpZPOEYsLGNf4evZQNKMufRGtP783X\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 2D3CECFE6594829719D6556B600541E749FC635B\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAASIoHogeI+b2egAAAAABIjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwMloXDTI5MTIzMTE4MjQwMlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMkQzQ0VDRkU2NTk0ODI5NzE5RDY1NTZCNjAwNTQxRTc0OUZD\nNjM1QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALgUMc9LO+738FXS\n2IjrAP0MzfhxeeA+HSBEhzfYDtZWWyOHsrxvn6eKa3RwKuEHJCaZjGUxWAa0UAvY\nW74z6Jbrd1ImZhCNea85avwlELUUi7+MvQTp5A2js2bIR9p9/E5D/4wX+HnE3fa3\nc9esDbmtxs760WQdiuvx3NNDh4jqfoGssKFcmfZmLPBdwFOYfqt4zseu9kEddvAd\nfncgSWSTtfySPd9MYCikurlZrVnjA6Z4wNPSpOuGA0qPmccNYYd1+7vJ4tAVPMvy\nqlZSXTm30LjJLttQTRqRZWcJjuUGdKSLYZIl6OzInnefulStGZVi39vZKVSHUN9/\neRSadDcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFLMz/hTpwwK3iY6+ma8B+k9UjL0wMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAPs5S\nBUlVZK8U7cRbOv0R3AHJ3UqPo6HWuI8aWn5svp1s7QKyYIcM/oapVWnGGEhIKmVf\nr+zrLR34SDx0/Wup2Al81JgkMKp7TosSepHveMPcV8s2WCK4xaLfJatyf3gkSzJM\nz913ukXHd79q2LcFlPF/z8Z+epubMyxKskYUN5DOn8Z8zvbC9DZBVh6jQHcrvRu2\nOR3id4/an039Fk1acCYoWCKX/jIo/I/q7Jv6WokSFBnTRWbFbsctiMTclQUuAS+Z\n9ewDjBLKGgMo/XDrSz6BnT6/42iPPvaA1h2QLTIV0kNYSBoCkZJ0+kE7LfJ0TimE\nuBauJsub9ivR/g9qz64f9BiG64HSPK8TWYsXM/BIguPgtv3XBSw14NJxf28sWg8T\ndy9Q4WHH7dAPD5ZHzdHuC6iHTKPr4PHz01gplqVCWXP0bWWPt5PgsgXTu7X0XC7r\naJxP6vFJU+tLnlyMM9yMXgVefK/jlJtoWSNhvITAFUeuhC4t2y+2AzbpobNJA3mD\nVMs8YZ5lqcw2+s3509DlOE3exfEVNxBpxHyFktoOTfJHJjPh0m5xDVNJ2CtS2ZDj\nNAew+HzjXqHhuNo/V6+id74907FplhRZeFdsQbbaAcHuzi0Gax+D5tTAx/kKC+lL\nO3l8de/Oi2UDjS5pCe/7ywXTdNF6vK6uuCD6Lvs=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAW2LgKsizWpnPwAAAAABbTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQzOFoXDTI5MTIzMTE5MTQzOFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG\nMEU2NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALxKFRVkAmy3oss9\nF+e8fkUukVznNib6IwqCyizalGa4Ss/GdLOs/Bm+v/R7chQoW9wH9jB2/8in+4UA\n+7it8QfabM1g9fn5qwZ4RsR6yahV3G31NmcYtEC5VOVOfu/QR1NY5mk2NFMhdfbM\n527UdfAXkuU9hDnHmVdrbi/WLC6JsIuXSe93Pkg0q5MC7VONgGmFY0pSJjj2in05\n/J6Lp8J6nyUuU9N35+C4ajcTzdgEkqhA7KkxvZ/ENBAawegBGdVfR6LckdyHmmxZ\nNl6fgXuJvP3Vkrq6hnNzVEk+kTy+OTag+FtMyeyczU8cwQPWBG3aS0U52nB5VJVH\nrkqJpxcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFIhGUaLkTsCUhxtm+Ht+n/FFnAoxMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAO0t1\nVP58YSW2b64bEbHKIEG8PMKNDtSXl5Mmo5F9fM0ir1VtOMfRAvjgRPnvBvFKVmwH\ne2GnAyqCSeK1FrTUPrpmvbD/45f+iuydKfM7ZMW0NRDSiDmZNdcvseqlksXlgbop\nJ0JR59TwzvZWAnnfhNtT9G1MnIs6eU/uSyOvrSAZeXrVoY7twv9Qpp11+5lUC8rf\nlUd/aE5ukx4ceu3xJI21cm0253er+joBVeAxDDUg88hlSbrUew+hEFjr5rxhCpl8\n0+KXBk3y/7Z63QwgDUBeZ9PwRLw5YgF/ThEgYXc8058606fXKsL8vAorZmB8zbhQ\nm9smeEpNTem4lo6ddrdo6mwt2O+cI4epNBqulIZLsfJIlL+TBNMJINM7dxObu3kD\nZCecTpjgMruPNv12ZspL8+e8I/mFUvV70sd6blaotwfYOsRSX47krZhViGdGu9t3\nSgLctrT2ix2WUG0ddAptVI4KfgrqsPzIDSuiZTuHe2k7DY8BTrzv5uNfRjaL+opa\ntnHq7iGuTQxRnfRHS2J94q1ZkB/Hkm18E+SjSma/fXtDmo7rDQgttT+Fkw8K34d4\n5+YRUNSPQA0SXuv7/Jj5JcbQn9QXWCnt8pLrwYvVbPPeOqVg1iNKP/bPPZfE+hTV\nRWgQ+ZvAWcnAy2rAwRjSx+FLMceJwmc7LNBPvV8=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmliMcKBaDdd2AAAAAACaTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1NVoXDTI1MDMyMTIwMjk1NVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG\nMEU2NjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOehxxCDQIwiWzrY\nmqj4wnVqK6ActsuKxg8XFVyeQuwzMutCVJNdS+49fhsXf2wzy5ucrjobCAl3ZHDb\ncHrK3cYE6GZL1qYVbiyNVaUAknuNJnqKJx0E/F8e6ZphLvazxLacnyOvJ38qylGy\nJwISvp5l6MfmvYrFkaESgaIYlg5sOYICQrqNVb0H3U8WN6RgAQLvwR0OspIqH3ZE\nV2glELb3U31Iuz4Xi9rYSpMcWyOmp9m85EkoLqks+P8PpwM3eK/rwRmVYMauMj1h\ncZtHEpz4Fdo2TJaN5RWT4hk/dtEKuniiBO67dr4SQCJE/Lc+itbCTKU5DnJ8bQ0E\n4lUSD2nPTefPk09b+Mq3pHFdii038Fzxv2sNdQ99M1/9HYkwkc8UlqfOHDYJfj1p\nz133umIDQtlBMEOpVccqQZdsfMCKlFTgkPGaonNwd1wbuKVHGFdGRpJWOg2c6fZU\nUFegSSZAHXktWsQ0dFF7KxxA+NfeuhNLI5VGxHMTVIkk4Y5qmbf0NYN+DkP63LEJ\n4XTvyO3KP1RKt4ohLaUTTjd78m8H0Np2dJ4qMoHSgl1ShMdfqSByMyRvmmiR1Yth\nBh+WBtQboqmK15A/1iNlw7lIVJJGkMupgexiwofhC7KIEpGowbj6I7sGFBcPt0ZE\n7piI3v97CHtq2DgZBxVQyXkcBbqhAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfojVJ7xoP+Oa/\neZkgksMa/LdrgTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAF3ASYRHbqu558QeoYw9k5EpCxuelWlw5YggoMLy/O4U\nffj0Qybd6Wbv00mTrIsfeZU2bkhzsI1M7+BaPiLC8wl8dvAGikPd9cGvGEEZnF8K\n5NdKvbN1bA3+LKx3/lAULbKm7QOt9xLDlwzUFxP6P3IjQGwnhv63kP5klulznZcE\n+2/wOzG0FAyyG8mAM82wmQyZXEouenLwcaIrE1e8Q8UmJWVMQ66VVF8yMTnsPe7o\n5nvm7uO8aES/agHIaKCx54TjsnN7GG2W9cKLoCis+FD9TN3GikW46QN3gcIizErQ\nGCytybjd17p0gQQ+Q/kRNrvLpR5Ah5+7pQYP9YSR0Ed9JJLvJMZTnvNx1tuQ2m1a\nb1CfARxbvfC6tT8EAxrRv4/qnF9RnCXIpsrn0DitJLQEy47jKa7JnZGxedVBYmTX\nAWNVVdyLlzMnBaV7WA8CMDdDx2afGOMvAmLTPtYzUaVemhkFJTvXCMD2bTSTW7YZ\nda48+jjJaDBqGAhu88IRv5+HKcafOS89vdjcpricaGN4FAg7qNwex07VCvSNswTt\n4YghJMF53HiR+jxO8uWI/7NCgoe6Yki7k4/XQhtr5GExUxYaDREu5fAQ1wZTRGrE\nFOZ9hNEc8C7RnBKrEBLU1Cg5KtHXXpCpg7ORMimD/dKQ6UPhIUtR27Qqnh8W8h1+\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQKYexESldX2wgAAAAABAjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzNFoXDTI5MTIzMTE4MjUzNFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0\nQ0M3QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKpdS5Cb1l+kIsge\n28S1LPYXLi/WLV3GhKBW9KiBMOLeLb4paufsYxG3UPUiJt1dUclnPK5xNhdIHwXM\nIJBFusy4clDAVVhhIfQRiS0q4pU7D8+xLolxsWMY6UNRGs4MTmXSHPTLvuI2alXJ\nnpMYTMDHQnV9lKQEkCDEIgEyDpqEIHFHdASpfnSiqlEEvmUwTJm5UBI/7uNlTU+X\nMeHuYx2PWhagB5vB3GVfUJA3cSLDzYXZijScL1xfejo5rXEXXK6QESndJ/iOvVBh\nDDodXgbBQcBk7YP1kQiwsv+AubsrGWH9kR7HccX/uOsTRnU+ultj30Wqvgv2FgoB\n2M15v98CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNQivBn0T8ccIMhiekaPsBmTPb9/MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEJYT\nuv4L7lktotmj9tnGrgJQPC1NCKRoJB0BlS46I1JRm74C9X3BfjKNGdbueDP4AenK\nNNrxeEbb/XqvtdBdO1JDyciovWCFs3GXzhKtH4aozH8WL9ARoCgWhfu3E7iooXSi\nrNJERNiPWo+lcnrHbmakOTxvOM83JGyv2uXa7z/Jl/axlhYWmyeOioo9vwAx07cI\ncW7oB0ZNXKetfMyhoU1sl6YJEd1rI/9dkaC7CyyMpvy52dNdVpmKi3Xa1285G6G5\np2yleQpNSkvtmtMXsJztT1PloQhhtYaJnG3AvhI1RBMGX8A3D4ezlDWWPRsX9D2w\nCL9pncyrwrtjeY64UfOGh48r2iyqfBfDaF1ecCQR6dnGCDhSLjWCxkAaxYJsRFXU\n1uYw9DZz0zjc0CqGPkNIpE8lr33u+dhVt5y9TrhwMeZekq+1JiWe6q7Dcb23quIP\nItV6eIKlZ5NPI6D++nWQnea18ExKEN8A132hmM2+15EhlLJLh4FmJf7qNsQcDnWN\n05GcGtUNzpcB2+sU+ZfyeQrN0RYpIOK/ApEz48ovuKk4zr1C2lFH6u1G75KCQ37U\npcgTtK00Bosgn2dIcDFwv/heO1X79jySABUtNvAzP3aM6FHd1EKdos8pjcSppC9m\nRDLZqQGgE3pQzRSfQI4o38Hy3U5JXhJm0ntfVcE=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmqUDKDexS/+6wAAAAACajANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1NloXDTI1MDMyMTIwMjk1NlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0\nQ0M3QjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ9OYr3h+Puo+hQN\nsWAOC4t6Lw+61B7XQDbhJUlQ2b6TH84CFb0leFGwom5MOI1kEaBKpEchZ+QjPO/A\nV3c3V3tbqHFOcj33I3vBYugHtbbgYUmPX1kcoRTf3Mb8PqSsMrJlOj/Q9/KGoX92\nZi4YITXRXJh+ttLt7FB5gTw4xYu6Zy4cKBzONKptxcn53d2cNl+308Uq/+nIhA9o\nJOgJjPb3g93HseQ1/rpkWRCTdjpQ7hSIZ/hwuegTe8ddjiaCzFk0V4pdMtiOjfSP\nzdbbiqpQcbkm1cCKW1JeAS/d2gbTqCJjr0m0L1jDMxyJ9MHzxQhEq5CkBd89y4at\nqy2Z4OfK0AVe7h2y0pHkw2RNgWB4X7mKr6BvLaTIToqA5NnR/q+BQ3KdtOYKb0NK\nwau98ga6IrmTu9u41RxjqsbywtVSc7RslnRS9MnlMpGIfCfTwtbMytbVRlx0hOdN\nqKhAzfZNYms/2tjOZe7v2k6QToLcjO0l5UizD4Ws0qJixzr/JDLaeEODpaMtUntD\nM0UxOD6i1qixc/jQkzb7WFCMgbSF4tkcvlmeNhY+4IIFtVtMiMr4bEm4bi5BcurD\nVywEeqLgA9+EC0otYPeHz3CzGJrvNlbIom7rSNZOqnmESrkzDGrm7d6Q5HySXZIJ\nHPWgGhlz5ey+gFWcNXitJqfZgWXbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRP5QnhlyTrEyzl\nu5GIqkdXDyCs3DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACzqCU73CMaeIlQoEyEeqU51llw+HWG7bcJPrzlh/jHV\nJrrIMS7IANM44uCx08bNQAQRpiFzaz4hlXeQA9RUIVxyK8eNCrwS6pKyXa0L3mKs\nzOZA4gGkSR12fuuyvlWbEt6+gdsMdWcqVybAaHmFrHCXe4fh7aKcRyVF4OxRBKkG\n4qbLhgkk20d6ijAouwjyxFIIyl50AErmbzhYDRPmXlhDCrWSYLWG9dYbWfBwk93K\nNUDWYundai++/prBV7Uj8MR6f7w8cNPDYXd+JeSUdXL8kf9I2kgdKLPrDZME+vke\nEm9daTTaZam5Ye/BYx4epTIJwHi+on6aQMXswGNxrQgBmwkIbz6Vq6OB7xqtNwSw\nwCcHjtcC84fY0LjyFd8iycNQCPG7t7QHyk2oEY2yJj0e+eEeB8z19eFKf62GY2av\nVwbSdiw3RTYG5gbNlzSbvPDbKr2Ac49M8z2m/gmb21mYZssct3/j5TSAtuvDcdcR\nzTNGooA7PrnQ/VLLUgzHUNcclkCLs1AUj05t0nAXJAWff8OP1utDql7N2LyHAJPA\n/6pVcmvbN+KHVMt8ph2UGd9fFLwOp8jFxsxbvwc8B9ctQ3KnYlObLZfk3TFAV9+c\n41LxJmyl5rhk5eJWKFqcezGi93riWpzAbQdNfdxdDNmksSBDZMxsebuPVBPvBck7\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAASPiq0oHKWwGrAAAAAABIzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwMloXDTI5MTIzMTE4MjQwMlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4\nRDczMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJndpYu7G0SEmZkF\nYVshljO9wHHYC+wTS9fDgjAp5FLdl4CTFSjnJgPg3vLCH4E2xRpi4MQkzwX2E2U1\n11M9/9M/5NkbeqOx4vnZ3P5pleuVV1h8nisyXxB2MaMJMe5aoO/jIJ8dMKvTqB8I\nuKpBU96Zvmli7Z/+kQnXFwAqL/Z37s39RSav6HPscPfhP6W1MliMbsNXcz9fUzt2\nxtfhbRDsw2bPOmzehVw+1jY5cLWRAcIA2AbGM/nDTjVUBR2b6q7zWvBwlnUv9Os3\n938xKfRoYjxsnXGBSGW7QQ9mbpkiTlueiMey/2iZixVaCwt9Cc8im2JazapRYANs\n9g9SIVcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFPFjkvb6mpbIdghxEUxZ6LkilNbqMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVBX5\nsQD4ymhbVyVOQ6/1rV6HYEC05rxZJ9vHB02EDCjRKBpdExaxg18OnYBNsJc4eM6r\nhde20pue4j1K4UUlG42nbQdgd5W5FQPZUWJ6W+KXc6OXpiqlfPbbVBeWCxvkJp//\n5cmwMYoIQF5waeBIYRp6pLPUIy8gcrUKewKFs2mciB7GBsBJDk+D2spuqmZLbOBC\nV6rdJKBREXnsPwzf8yqnolm7qjtKhQtcyiUal93XUcUIxLQKOIp1e4MWBJJxv7Tz\nrA2gpCRg17WlBiWp43SI3WJS1L1eak4rup5TGD4/llk6+twdgIbRKGb5iDzkKs3P\nHaGWdtXjKfl4+5wlOd3JLCmROQiVul4M1yTMMmZ3/BNNaPs7fVPCoe+b6ez/Ypeu\nMCoD04DdUM56Uxursb9oqyWxcd2nZxHDb+HMV0VvuP9QPtyvAxWul21qWx4QLF8s\nAjwF3OTsntnFL0yjwZs3vjUt1Qs9X+zgcKRqVZslRN8Z4+WQMmz0pAToJMcj+xGw\nPogB5lFIw/QCzodu1lnUBSLOIq9q01ZmwxZ21QIiUtknSmL8sRDTzcXyf5mB6dzb\nVQA0NT5MyX3w9lr3r6AHftVuMSjzwRz6Y7/8VAItyP6tDUNlSqPqnBtsuxYe7m/2\nWfI9d+OyiG5TByZHsm8KkE0CY2BYeJUrEFAe8FQ=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAbxc47LGle3tmwAAAAABvDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwN1oXDTI1MDEzMDE5MDkwN1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4\nRDczMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMkKdXDZkj6VASjH\nZcDrJsgBqHgXx8cD7U0I2IEoubbSo2Xb4d8SfryOYQl9ByGXS/nwAfJ1sBF/ljFb\nOWUcqh0OPFpsRsjRgl7CADDxBeGktwHCU7jAx72OpV/TnKxe/cK0xEEHBoqUepoW\nfdLdSxuE5ZpINWaXfDgyjfuk7O0Jtb7GVJQlVDeV9Yermbjuv4Dd/YuKPMRNa2vF\nPi817hn5ghhI49EUdEOhg3sZHStR2tM87/W7kImYW0nJvPkvyo7tC2or/1iY2qSw\nFHwuxmOexlp8y94D6HriJyXG+D9eXofGRE0KmDO31xiIF1nyl087QETUEuy7j9iE\ntJK/4eoZROI1si+IdOXgb69OPzYE3NdqfWDB2IPgB8yTnQe5PzbWLB80zL6ldWa0\nTS2uwJqgN8v0fsMb1MweC8XswylaNZLwDz2vH3D7Z9VaMFMpRfMgVg7rRWNViryu\nwhXE+mpUjwdyaqTCBG6V9X75iptC/cF87umWybrJCvwYgbFvMJsJbATP8pLzenVL\nlJHiFaJ3k2x1H7g4TpTsfpW86ehcGzuBcZeP87ciOH6SWmEjGtGfJl+ppm7jTPFu\nJJZTPKGe3DAv4xzqT9KZypouNetqTKXcytibfdQfqZoBO/6k84VSeY97bGTJGgPw\nygRbjNs7BXAbkojizPAaYwH+eHilAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSOzIlOWBiKYthD\n+x4PSg8PY0kJtzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFw/zNYcvDkvyRy7wMJdruzAuS+LgIAgn2TDj5OQmMsL\nq+UJkQjh+mELaVM695hw2NWr5jt+5TKN9o+m/pkYDglIGB5kPCluJgcjG7bUMdgc\nf8OBUJY9REuQdfEDnOjInBHoc2m4nKjW8NHdVtJyYM5tkkL7U0lxfzAHgerJmUbQ\n+dSnLWcnckHchG2u1G6/yAbpV3wC87RL1XhU0eAKv19fVsZZudpBBSPhcRmQE1P6\nUneWuGJlMI8zJxqydpeljVZMfLl670+KbPe7u09rqqk4yi20f1Rqjt+0TeXmWryj\ngOdOKBGZsQzIr3GKxLYKKrAcU8Hz4gMnnpzq4397SxW09xr2VXrqG7jG4Yv7PhmR\nBnIxyrE/yPCRRL0GQfBAaWqYIrvfsW+O76zc3L9Qul72tH5Ps3ORn2m5GNf7XC/0\nrUZ5GOiZR4zrDBDFbGTZIJJLChKgNlG1Bc3Oq/aQ8LOxj7jswY/9rrxlCH6C3l/g\niulc7kp2nKDid5FQlKUEf/GDxdvsdqlF2WoB0ANGN/MZeh7UrM2lDOWfCTnonxm7\nZ0bcWstVxuoBAfhqYWZd5JxY6nckReCbPflHXKHQ/wH5f8ruBtc0r4jlPValdpRw\nRvGvGXVF5kcgWc96rtx3hf4S+T4LIXp5MqhUjXqzTW2gElJCR0a7xflv6UTt8EkI\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAGkXDAadazM/6wAAAAAAaTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0MVoXDTI5MTIzMTIyMTg0MVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD\nNzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAODKD2O5FH5Sb1gp\n2YCbwI0t8kB+xd+BsD0ZVyjfAniZJrqzujj0z81Fc3oF0XeJHZylyNA0qCwK24mp\ntfjoCzTf36OnqvEV1duJXT/SizX31r8G7IUbeYeTyoB45QnjbRdiUowKH+sGMcJQ\nDKwveVq41neo9zaqPf1rpm6fEQBQmFYB3V5W9aCledguEyG4fLy50E/4yVqEta81\nm4PiPO99ob+43+9lVpDeS+flXO8vqV52FAu2T0OkdGGjTBG0v8QtKzDQdLFWROl0\nDs0zUmu6fiCKo00eH1KIqRu1UGXFUmb2jS8IP4g4Dm1/FZ1t29SwLEpLSs8cNUlJ\n68dYCCMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFMdk740jGUSWBLMjWRBPabISbsfmMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeKk0\nc3n8BHY8JdHgWHOLF8CxDGJiwPXFoNqJOaIr/j53sWIMjgkHPyMHe1XYJYAm/ZPx\nD0UDU0Xd1S7JTidzWvsWtl2NdsJBhbRUQM7lhhqE/ALZfmtKUkJsMud9U8S96jT1\nE6qz7UNrobu4kFZxiKzhfO8PoaL6TP7CsNmjO4hfL0epKlYY1DYxN+a7o1olNDJ3\nVAZi8yXJ8LfC+p6WM7AqtBwTu5QDymM7+vzRoBQZEzEQwlxilfOR6uehm6MXfSUf\nJo35+oVCsny6HHT7K7m7WjnhsOG3YQRif9xxjs/r3YdzEGUsotT7rXRw4ng/EMFJ\nnmWRh+ZY6cexC+Nyh92bTY0866RV3RIDhslxk/szG+EMkAzIKRSsCbeqPA2TPss7\nPF54x99h55X+19VQmxdyfpKVNGN5G6wZHeULZctrW6CBRjyd3ZNLQJ12w5gT3KJT\n2T4mCtEGVI2vlyWO09PU9+7owg+Jtbpd/nmlH8w/ZJ0hL+Tj1QIJzfgmD8N06De/\nem30DU1EufrKbxBsXnM41Tic3SPluzApTrZeGcD86Z7XZQjcxaAfqM15eaMRMtD3\nmGd2d86GGEqUxB5nPk/x8FioKxYzGIcbls7BcxXSX+pJzvdCx8hYHoKr3/LccRkm\nENcfR/xK1Pg3uP14U2964yEJ/ANsp9CxvdAh+sk=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmZQwZw90C9GuAAAAAACZjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1M1oXDTI1MDMyMTIwMjk1M1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD\nNzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL17VBKe3m+/8pe9\nIuDB4VGTxivtDiDLY3aO9pwze6z4Qu3DVr6OIZLe8zJ8sZXF2ccNlL4gQlL3tX6j\nt7QTXljRPIlIiNOYs1+Ory+HWog4tO0nK/YDFSDT2jU7h2e7TCdImjYr+ljHtcfU\n7OK4rkGJ2Ua9itW+BueKxzkKE/Bcp1Dqp6braO/QHlHgTzusaLf9rTEw+ZZVRw1o\n/iPNiVf3s6+Eu8GQcz/fgUVokvB/97gwT9XCrGswba4Qm0V7/oziqtzM1z91nzi3\nKBQ7kRCEK1l2TAzReASMOlVuWHLRA0hTsfcnPiNYYKlYU1VVCwAoC5ZrXqiAtV14\n2JsbgvCmiw55trGOYKLpJJ2rqO6VDw3djFP6S/yoLV7l/DAG08A47pJDys/9pkDP\niZpuhY1t+bmm6Qf0/zdlRJtZbmsLY+m6jniBOs07WV4X9lIbMZWdhz+Fk93manws\nR/6XC0MjEh2ZkK9KyC5RavNxluNES8ENtvVfJJGDX/oZ2YmRWHAdPD8PDauWImvm\nsO0mDPYlApoabrAkyhl0wrOtJjlIYST8e0B5kPdVGxotJO1NhcehSZ1XGxhp868X\nYrs3bOlevSap3REXMdbSyUBI5raddt6g62VIqRfOyOOneHQvHr2JkCHttlnXiyh5\n387SZjTANJDagj6bCO4U8lwGlLIbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTNh1XW6YqdXrCU\nTfxApobm1TlRNDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBABsfig4Hetcsydbdn7lA3Nvp0ENGLJaJAdBsvXKfKPP1\ngp+58LQ0GoJH/N38BswGJJ0dBs9sSDN5ZmV0ObZuNKFNDmWztEGJOB0mSDZ2LLgL\nusfO9AntC5fN6JcCmunQexBjh+jM7jtHdqN0Pv2XtXdpbN6+NpxxqPWiXX22O0eH\nSw2TOAoG9BNxqgpJvfh256v4E53C7f0mAx2tTeQV4F96SlE4DTe/dO34hpX2k6za\nNPpgR5AWSVGnuZc/EmclvNjy8datPPkIzTwMeGT9QlTPahULPP6dXPT7E/CBZaZ3\nsxB/upYkju0MCkI3eNK0KvRHNDzqSnLyGgHxqRE/tcyNN2g9vFFh5sVtRFh7COEZ\nKPhulCvpRtxPJfA1as7b7PmAwGU/PIdd413bFedXEwGvCfRtgj80kD1M1XIOnuwg\ng0IifZIdmc4Qnuz3prA7dPahFBsXnRzRFc8+uEBJpClSncvXMy6my3p4ZlamK9Zy\nqz/NgKcLKaXzqKuBr8KmxDoVpHIxj98AdUVJZThAPYLWI7Zd9mXhsUpzkJwThEhw\n6q69qnRFjo501vIh4R4fYVkHZ3j8GzsP7N1vML+n087dYdK4LAhX+RH1ZrPFHazq\nlAFqjHl6QibbCbYN9pvaMtWfUAgkrqNbkRFp1sGlARdDIYFjGVOVmioR531dasaH\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAWt1syLJ7EikpwAAAAABazANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQzN1oXDTI5MTIzMTE5MTQzN1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx\nN0NCNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIshp0qIP9yhGvWx\nlwe2Hn06i1ysyjgJPrTmPc+XLXXDnk2mE/gVwqhzcWVEu5U8yVx3mMJ+lOS2IL2f\nUJ3EoeKlppHlk0/LwQcuHDnbrc8LH2k8hsxmPfcDuu3cNeyWwVOPEDaGEy26+fU8\n97kpubI7Y16Zm2nI9lZroaYjJ/hcBbPIYxnwQWf9Pk07dNS8F0gSYqM0UblClU+s\nqYHRR23MEgglPMFbcvdnBZ3ye6xvmEw+t0rnqJj/XecnWefR3kMpmEcoRbv1VbXH\n3dW1vs3W8/DY45blIbtpXDPc6WhX7POSMs38W4XTNvL19D0ad6rt4fQbIbvFNHqx\nc//CNIMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFARTzJSfwZ+rWVgbXHwChigL7IQLMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQ9Ld\npEQOa7vyKkWGpO7XDsfp3pwcUonGwjpatTaA47xtPu8yUVPw317Fu+dpRbdWRRHG\n9fzFUqQFr4NyX1tGumyFzoKEgZA5bAPRk2DE/FddIqisxOpOZy3q12DKHM9dE7+J\nYKwtoH1TacpsCRNh343m4wXidPqs5Kywl60pMWv/wGyy3lX3TGjYsuJM3yeFEv09\n1vmqU87guDc1Z2bbZyOw5TPHawBJVWroB7Jaj0rTwz2zoub0zcvwrhBLoiyqRqKL\nUPvSbclLNl2Fl26WIaZEOR2XhaqpNqG/QA+rEe4PYst6oFnjLAN8KCDtyTitiSgQ\n907vYovPx9m2bOi+x/D90rVPP7v8LkjFZMUEUMh4F33vVen3scQz1nfmumpc7/YP\nNEWm9StH4b7R3I2WBBwlOyZtXCIrWKvhEjsjhyowfnTuqN+Wog1gMLbMqnQfwGXk\npv8iOFr+ZV8Xtoo1+OA7eyQtSJqFVBOnca4/TOybCE9/GsQ0fTaMlnlPyFxoi0SN\nOKUkl1hKi6rzks1ZCPgsNr32SFFu0UXC+16hivUkuSGZxWScaKygTXRIXF8ECurg\nCVfdpjzi4cv83WP24UFBH5kG/XjWrOb9FHmlzpMmkxByoDHF01SehksK2wwaumHG\nAniUb5FaZF3ssOJcQlJ9MlNKApkutTPJtiTrwkg=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmeWmvjRGFAuLwAAAAACZzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1M1oXDTI1MDMyMTIwMjk1M1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx\nN0NCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJZxnhSQVjPuahLz\nV/TQ+HZHfJ+CUGSkq5ofvY1M9w9cq0ZHSeTHqEUDEHCSPtjoOscjq640x4xJ/Xa9\n88vz8koMbW8cF03JoV21nCz1GcTXxCiKMaYP33RrCmbwj1CchTNw3b8TGRHqp8aG\ntdvEK6sSNZDVHs5EocL5pbLBGwSq6Ej7oXHacn5085oaSQR8pbEJ8uOkejeo1jGO\nIMnG8M1MdokL7xCpo2xwJdfpX2hlywVRwHWpbFsSwTB8pdlEyG+hCshiaIEZA2Ei\njneI3TQMhsz5Uplssqlt37W+SpaAffjAFMej5LqEqEODNgVSnA4alokTl1NzE4tG\n0MiJoAjO4n7HJ0ThZ19oswyQ2CKP+nRXEnHVAKHk7+dPI8LbM6ro8uxc42Gsn3Oa\nMfuzqq3mr/REKKZbpukujW/3+IfJpS3uFuK/wvVdT5F0Eb1mQSF7t0xNXPrC+BzD\nEVp+jTIDACJ+MwO22zE99yp5Aq++twYIGQ1emt9S0QvFLBGNX4gXh3XC3o67gDV4\nv8AgwxNbePRua4XIkMlx58eOoSPHKTo8y7BovXIxaaV2vkP5PubGMf+r3otTyMey\nTRmOm0lb49Vztw1HStDAmqOyF6c7omgW32MGj7g/04KOnypngsz8QzKm0V+fKR+O\nOzaJgbJosTVbNaPY0YWHkMq+PcqXAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQfN+QmXq2NMPQ9\ngEgtn5DSw097ljAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEUI0l8+ytuapQijCWDZylZ423Xlw8tR5vp+N67u75qR\niJIxt37Fr8jNOF+4qRi39aIPry23IMQwsQhCecb4IjkyWLtMNMKjRi2YD4c4SGcB\njWis1Yl0IOfb2nTFYtx2VV3E8bmDXL3eKnqmhh0fs9BIx5NjKJvg1AwSg59n6Tco\nPC/fsXg8NodfhwA6UPoFEdVQnoXZUEyn6h6K1NJn1tr4S58KyaUvWqxzdYvtGSJB\nEMflNvCiSyXnliMHGtIPbXePfS5OO4o7rI9aP5asTVj2MvXdz8gJ/F2Cp6e7+QsS\n1qe6YbtkCfoKFioc8v+yYo4tk2fW2OiwcM3pq3KlkJqTtFTcz1b7TuMkG1HiqO4y\nMtarlTHduCYC6ZgUNNSnuTWIq45onksUM4NcAzfWajbVz+89GmfEgi2tInViOR/K\ned2jgRIbaec9YwD3bTFI7AXJErT9PqHdLOKFh/iyzhu5m09TZP/sg+J+hYeKHXjJ\nfQFU9mdaC9WdEiBruWPKXfqEEegtNzLACrQ0sCljlDRdy2CbW1iQ29B49DtO6pve\nwPacGCvGCLTMHWwhsCzfa1X+ciebFQiESkVWorsBv1jhjTEeGzSoXhWVh49PNHP7\nnZLBwlPgRCblOLNTznAz43J4jFoJbgS0Y4Xed8v9hXuLJfCRmfeB4mcGdtoVEk3e\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQO2gYLKFKCTLwAAAAABAzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzNFoXDTI5MTIzMTE4MjUzNFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE\nQzEwQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALm4jGtP1v9LF9fc\nsU6a+3frz51lypwCfk+Q21OcMcbNh2DHvfC1Q55dTzTZwrpq2RQdrZMJLHj9BR44\nNYRI3pIo1FLS3jqiGf+zALa4kHiUtBzE/eJErS2MoLSpVrp8ab8L67DY+1aZFp+4\nM7982BVFmaga6nw24vnz4icsKgzZX56WmP+xSQz8GfVKyEJ28TBL754iZO5VMPrt\n6jEGZcadcj9LOcrRSr8gN+TqByLsDzEgfNEpfR1dzi8kCyWmM309Bn37peFDxeIn\nQ0NMXwn5rd4IbCfdTEMzXZD5oa/AypbDzqruQyLDXZLM2Mf5eyXY2tODaZcTATUu\n9q9//H8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDJO04/f38alU27sOGRDk/RAUF0UMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAdlEo\nCjJdkHIPNWD7xgmf225WgjukJHd+CbZuDxmonydTxmhmJG1hQALGYMGNrFQGQfIc\ncwLkFl8EThsPf1ZKkzNUP+j2xT9xv+3KfedoiZBPI9NPtiofpPitoyLNYNtnAwhe\naesEE94oKIWOIFEqJIUksftEiJwj5n7YjmG0PB736DNQsWciSVOZivkNMICPWEQa\nzaS3N3SAAML/CviZud9VQmREzpk2Y4WVy7ULlTyNuTZ1d2TsRx5bnBDYbgAJyW56\nEaZhVpkRV6Ad+6Hljr/LbA2DYfXUmjqjXcJujnj3XKeSwaf9hTj5U4TDaMHkiNaK\niV1Y+/SKxKYzl0nhv3TeBYaM7CCtxblCO5dSJRkmW/uvKroljs+ca+6JJ9BDmd4U\neU/g+0+EPycOy7mJz+TF0mG9INST4bhAxA33RtbOX+ZQ0NPMNzUlv+RvklZhii7O\nU0BdhF9sxlNlGO3IjKKmY7ww/IGOrRaK+uUAVoCzuxshFahd4AEI/8LwMcoDL4yK\ntAzCV/oaPPY8sGPQG9fHwzJC9h7DGe0rPlRWAi/SMzye3UFrPZrasKv/GZ579jmC\nOkE1H3HMgTSOk5a+Ydb/n22/exEFZFmkXS52ka2ZWtZOHWfOKI/ljzKY2DviiOfP\n21Y6dn6/jUxW9ooxTQeMn4M1JekCeKWdZ9/sDnA=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmvJ9tckw+A/RwAAAAACazANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1N1oXDTI1MDMyMTIwMjk1N1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE\nQzEwQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALXRkANb99uA7pp+\nquh4pSJhpbE/mJLRA2+4el/lYhgfasZMwMug41KMc8+BiV3AtouVojAoTe5HYdgf\n8Nzz4GsZkkYzpDjeEqxE9HCyf9rNerzkABDBcKLxp4CalWQ4nbSOeXTwQazOYjWv\ni0wWKhJZcXGnHPAuWA6RzHGQKetKUggOXO7TADHKpL4fpLvOch82nePo1MekoHmk\nWh7fCGTgEaPZ1loGzYHV9fHwmAo5SUFsrvlgkJu/RItelhkBuU5OVeVStQ9NMUSl\nzC56Q/R5kgi/zfV96tayhkOM4WX54vKWQPM7VmairqAy83K9fKg0OGITdG8ce/rB\nzEJuQwsSORmyxLR8051ZWtjxQ50Q2KwNNmyZt4YsLOJOjRIJBrsnhHzy78cyZxp6\na3hzMLSKhasx/NY/r3uOvMEBzWMRs4u6SP8nBsO9pwbFAPIkFA8KmRRYgb257dzR\nA3tdfh4tfXBVCuQPs6ASGh6qe5WjDDa9i95kXLR8rz98arUfZOibjAA5PlDYGIke\naIHppfWb6zDT1icfJI+oXjy6zTUcGdXFv101hyGp81yTdHhCFZAPAHd9gxIMS2ie\nY7HWj6gl1YV6mJprXmGwt4mp1vH/VoKPNkYCq9g5yULyKvEtR9lL8QFibfK9CY2K\nPj5L/ZOTle0qidzW4GVxU4d15ZOTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfjOXvIStzRXAB\nZAUahOITcljQPjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACqDQ2/4HKhRdoA+hntoZMEU6LQu6o+SxTJQAcm+eDmn\nxiTQwsDj4W5RJpZ0+qL9mN9BU6WTJGyv5lAM3TiiEMLOEY/p2yTDOBJWTFTgtxAM\nWFfHLhn+SBb+3x4LkT/HgK9/7VH7IdvqV7ACBROiv1Uaon+eHKjM7YZ5+Pw80ouB\nJVodI9919J7mZRHjLt3Ax7jM8VAj7clqjm28/C7nDhOH7Vu8FlAuMfMqepS439cX\nZAS8ukuA2AiN0ELOyyMyJ0HT57rqT/AyPFQdNY7R02HeRYsgMN7ZY/UZb+6/egRQ\nugUMZb9fSGPIr1FgeiksF3whoKYfVwNJf5w1eQGhorRk2C+7wof8k3ta8LHDP/2e\nfhmH8JNC84zU9I1vjI63pzQl+URRT1PQ6fsKMm4l6yhaDnce351Q3rWVj8ZMjA/o\ncr7VJOx1Rr/Z9FsELniyHvLq6rx3/jkIxGOaSmB+pHuj3BqW35WQas1lVeR0VL90\n8r4UdCiLNGVU5JpyaldAw8jJNQd/+HT4n+I8Po4/LqOLIAAIOmxDjXkB82ZiKyg9\nvlOFIJMPZLDWqzzFxo2YWhdUSJbIc7IKZX2HZ5KOBap6kkJZKxkpUMB7fibw4tZ9\njOGxdThKbDNr6ATLWKdOX+jJcHukJtuDg2KeoaA4dW3ChxpDpH1awBLkU9oek2y9\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID BB9805E319A78DBAEFA888B45615957205179181\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAASRhqjcE58u/3gAAAAABJDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwM1oXDTI5MTIzMTE4MjQwM1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtQkI5ODA1RTMxOUE3OERCQUVGQTg4OEI0NTYxNTk1NzIwNTE3\nOTE4MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJtgIoPzMQPe8IkM\nJOyXxG4BVb7gb6mXdsOoCu3SEOcZeVITS6wtSFAk6cZrM60T6aayu7rDUjUpiHBc\ne1Q40Hwt0RWWLa5yJDUZ1FxKb+Wdk6lA22CezwDoUbLwKHAhzMS3p89/uInFYFIb\n9WGu67eW7h93i+F5rHAPhVx0An3ZX4DczHsg1H2vzhV1r4IYPsfT678fmY/YN/GK\n6A2T2b9mCLEwg/h+b7shdNQH2nljpDwI0C+YNqvKfn6qKwGjwjGj7CBmeAW2IJmC\nkdSfQ01t7RbqZIFlSKWVj4e/GUyJMO7UZPW1ur6K9d7fYZRIoAjjGPiuPw3ZeMkX\nsDScYcUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFI4VfbeyWKcT4CHqpmskXPjczzeWMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAgFvS\nEGAuSiekS1hQBtlJPZxWsZfFwCmvcVl/pvE1gPHneE/UEGD7Yts+oqfYj5FIhi24\n7/wjjOHNGFQmjO84AXkme9HNk/I5aKOOcEda45bnTeD4XaJLAMV6ZNNMmUoitdBc\nSFTbrbcGnw9plI0yvdZsUqszEFrmVf2CqNYO/Bkr3K1iL37E2SibAX/pACLpnwaf\nYkz+IC+FoVx3Eefvonrx4GHJ0KhuJ9PQBUbxJZlpoHaItPgMK3DU+iy376aq0VXT\nwcSJs6dY2BujpAj6KKY3xrcRgtqGZWz9K7tHQl5OOZEr9fqxc9KVA1ffLVnKcvbG\nSHPnTNAYv7jHpNNPe/63nsMu3COOKBh5qXGZqBmY1eTxRYWdXi2gJMidu3EXpmNO\nFaxo11YyyuDcvoe/Dw/vJhTA2y9nIjBV7MAbvh3b3KllSfwJXy1SH7byAtnDbQAW\ngy8ft5lWdaaYBNIilfFMHjEomtMmSlH0vm3ZVOznS+0XmMBhWSkae4aY/pI93i0B\nPKGs/gw0d1/OmhSyLjwiJN1ivhISSsixI+PeNtlUI3oT6pmwIu2lmnnIFz4HKKma\n/K25fgn8nJMiNTvhUGbZPVP79igiGZDVQMA1J63q/+rP3MtoF9ub7Dc5KwbVT4HI\nmXq/Eu1D6tf0TlevVij5Ob/PuFAmEAhs50AGPpI=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID CEFE333390733C6727C7880DFE429AFEB557A892\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAASWvbYh6E56iTQAAAAABJTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwM1oXDTI5MTIzMTE4MjQwM1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtQ0VGRTMzMzM5MDczM0M2NzI3Qzc4ODBERkU0MjlBRkVCNTU3\nQTg5MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALoWkqSQkFPFbxBq\nS3k95SZxOT4DmnbxYm8vP1KIuofT1CjK+fkOkXCPmTNKUvtDE5gn3kKdSDUqYp+I\nJjHbOviyKI8GbMQjoayR806sHJLdVDCK3u+QIEt3/7dror1qt8dj9AcH/4E+tLJ7\n5MDTsgECG0warGuckTV9PVp2IKCuy02d4iM7+M/VzS2/UuYWuTqra/3cw3E80eUJ\n+hYNKjskW0D07a/WGbPkFNkJYoxYmfAjOh+Zs+6X2thsqXcMS/tNXo341HMeXH5k\n1t+dNYpsuB8kJ/BNbUBfjspmxgaQKzIXUFhadW8Ht+vOaV1Y3ChIbKXRWsri0rgM\nbao+Q18CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFOuxdw4MaTuiSkzl7rafmohpSTJlMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAHiYS\n1VMhleu57q4x0M4oWlUyZGwr1IgdFKqKckqKAQxrfUErHvClLiLHkg8EXq1opxu1\nkpDptjx/zBKLAsvvlmyl5y4wqw9K73mP59EqbhZMyhyJRWDHg5S6fXQZn7zqrEec\nqgrcH87QEK2X4LtWRVNpEbxxgCCvq8pyfm0QtKQYzmdCKwCRgfZD5Msm1BkhxGHe\nLyPV+E8kWTJGAoRJgUtJiFmZ+SD3a2jlGXHxN7LXE/Tc/eB5TMe6tDCxwOS7mavk\ncGVd+DtintQrUcvQG6jsAH0tfpbetZChkALPzpn0/K+V8qRF79jcXHY+C/mtI3c/\nFJ4fwuuuL8X9N3jbrlL3+xcNXjOKGx3TW5SWaDbKuc3IRHH5FDYF1jBnh64ZCC4+\nn3QcG7UWuSaXFp0Ko/hjQL1Tbgd5RSvpszRrHMPyX9D8PxBxeCTUUMB4c5ijhJuQ\n/8W7NBVEssje2TdXd+YSThVzr4AGjmWB9vT2jNKhSDNJJqnZj5deip9Hj2Uae1ju\nGR/jgIXuA0FsOVYefHyGUES3thFmSLB7zP9cDnjBBt8I0KCmRNAuExZdo/DWoMdt\neQzWHKCoQUzcPL5MSev0NJtz0SfO0FWdrJ1lO1MXTYdhqNRMc9S+Kc5bak7Xqa91\nWNpFmOP+d5MyVyG1s5J5rIAguIu4BUaiy7xsC/M=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAW4WRfQvFvs4KAAAAAABbjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQzOFoXDTI5MTIzMTE5MTQzOFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC\nQTE2RTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALlasK7KO575EZy1\nAnLAqACYte7eJy+z7LSunk0Ag3gFFkdsl4gqy8fkqMSi7eC7M74RYU+VaPR0N2z2\nwKnDbwaPUMcPFEBWK8UvmtoAgPMThZ25fv0Q0DiGWGvjdJnJP5Xw63vNP4xrAtnE\nX/NL50sv/qNRFb7wUBZXFXP9uTsmn1wdo47anGs56dV+XS+q54h+rt1i/rcJlzfm\nNdBO4x/ypA24Y0OfZ0/sMvAspfWZIaSZ2CAUebc5pZWZTPoSIzt8Pl0jVZVdAJfj\npfsIj9XQYh/M3naMM+kmKW9bEzT36grwrFZJ+KHCJGzTJe1SyecAIyJ88C/HTqrA\nsRp5KycCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFBX1K+JicCI/w4d9cXBMvvGbddjtMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEy14\n6S9qljBwVc9259Sc8izzfwXTwDxYmtt7NQJA80KxqFodguJwfS089Vb6Kw/fOhLV\nuHrIN94Jt1eXLOpo0j3qikqZB7qkORy/DjsRKnzfyFmpoAwOUZwgmMBwPUDS9fil\nilS5gXUKxzGTdjzbmWJ6iq0N2Re7LZ+xZOmQbz2I7+nOmlBTaxPh1IWpn/MHusGW\n4Gn/EwpTExM1OL7bNKJYRo2HQrlDMm8wWSz6rNyWJttArlYZPTAmjGvNo1nxtQnp\nl8I9dR6I8LwnAXw/joG7CGmMV3xVZjM33HaC59np30MaS/4M7k05HHtYr+DjMPDs\nsAJ/anN7vOYoNK9x+8edYT4qEhZMgTC+qx9UUZ77sk5gEdVZENdLvfzgzZl9i2Wd\npvRms9AGnyx3pcwrLPDs1ZfiIeqewJ3IfYabkvConSW9iprMkyVEunubtg+91tnU\nm7oDkMQicp4uNLP59jBZoo89YH04P+bCeytrSpCDNU2p+Ao77XRF1VA3ERLItU7X\n9Jg8beIK7lyKhOp7XbVK/eEszlFYZaNS08iwOCtdE/qKHT52U9XaLMrJt7kvfc95\n2Nzr6UTXO5zZ4DsTXJivJiKdJRgbf73TlQy2tthTwFvno6sP1Of511FXygWD0/Ql\n1sj3DgOrxXyZ2nFUswZJc7rfukFFPCkCy1R1m2U=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAmws9mj8kuDmPgAAAAACbDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1OFoXDTI1MDMyMTIwMjk1OFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC\nQTE2RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANJy5bw/RP3L62ig\n2xgZD6du9KYbrjJAM7soQ67/WhJ4i9GV6HFp511ly07n2WQsI+zTtGYGMiQepdTS\nflAnfZASgiUMeoe3vQDIqY4fu74gpGjGV6NiFSBbgquZcWJI6yza49Nj8lY+Swhw\noaHNtcw0muls76rGXxoj3rXLYtG/xqcokugE6e6gF1bgAZaEeNcETkqmM2+0mVBN\nNSfcQn7GTSZLd8GfwnL4/vCh/oGRMegAOo7Xj3CbexElLXQfXsz34BqNPyB2pd/U\ndbGbS1mDwnadE0J79Mx4BCsbHXPk4Wa2wH37cU6XWQqbjKYF2XZZCBLX4nta1j1Q\ntIkzG4ReA+/JSMA0BpzYydbOhADoOaLUuX8wlrAZF8v9wyOJ4IIf8+aPuvJV2Xoj\n+BG5KrRxltwjYA2+Eo4TG34N8FGwZQhg7NWgWQMR75COFm3LHfFncKxE41l83O6N\noUrqVh9fizYV7B2Qx2qbKfpAUulsOQyXSX1TtuLSYKOmyudb2WwstGhHaRRJu7nt\nmepPk1wyTjk0/mc/IIzdBLqrgAX5voa/5Rim46jBbNuOfFcMElTuMZlpEJdK1LaW\nkFX5GSXVjuC9dMmNXtq0KRMDjpEPHhAs4fjq/exzJBG2X2FQ+koRHsfr+j3m/dUl\nUVZrmclZDKfeE3bskLwY1aaCAvwrAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSz85vups9Npg3X\nkbPy4JA6X3LYmjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGFRnEpAi4ywKYFaiXtsqgZDupLMSyQBWoluWgu3iMTt\nLDEKwTZOAF4AEdCuGWuAgczcWwMk/WdnRnmyJn5eNeu8DuqDXF+EJ8tMflOW6gkE\n7R5iFBdoA/WaKXNdCRDE+jT80FT/kD+l/y/v/DpYTkTZlYuQagLgLqXjIJLGj1vT\n4tQ0QJFq+5EAKiZ9qFgIQFEvBIoNWti6dFUW9T6sGS5vLSAFyERvNE6x+UX//jaF\n0wzwvmLQ4BF0jKSkIVQLIeG8z0ZhjOV7cjg3lKCR/tG6x/280WJsqakoeCYn/5vO\nvlAQraaEBjAyhzlw6Ek5nsd0kpaW6H75qFD3QcxOS+mxUq9HhWkDmR33/vwtdooc\nWniFBIP8CExyO5C4gNtY3W2pI+lTc/GlvQe0BDhjmDHfCYsgAei9bn5J9GEEp9hz\nuy3PiBPMH42AQXsBybEh98BLje9f39+2HUzOUn9pC0hUALyC5ok2FPn2dJuPIcH8\n5z5Mpw60VMN1xC50h1UtOpxL6OPEQXVxoNkg6ADEqq/cnWl4YvOlx/TU095w55YA\nWm4lVKvIz6ilo7aL8WWloaN+ruxtYY3YKz8YPd7DCrEt0+5D9f52gCiVK+dHGcAk\n4XukM3+af9VHSTJZ4S9gfK14yE+rYNmxj9MJl9cyVaVnoIb2DYa85qwr7Jc23vSc\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAGqjH07qY5O6IAAAAAAAajANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0MloXDTI5MTIzMTIyMTg0MlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz\nMTBCODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALXzy5moh5thA1Wb\n7zGaLOGahwroG+Bfdxk/J3Ed5P3yonllAlJ6rEpw8/F/4TkY1uoyJh4GAxKF5BaX\ny7Ibx0ZYL8ZYsy3GMhB9z7WgkUKtq9arQbmMvgKBW/eEolt8njJawuVYFntPV6A9\nnnLulTEXM/gP6n7KkOOoXffnj17fwrUh52odlGWyPpGlobPOUQvYzZXTzIZ79AuH\nP03yXZjoHk7QVJ0z3Xid0cxWD6mUY7csaGOB2O0ZF5HuP5GYTC9VWyfFeSo2PxVF\nlzwldkN3Sii9vHH0NYBosiUn9JvdpDVv89X5+pET0RGE2L2ZrrzYS1nxOok/r72W\nnw6TQfkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFOasLuA6cLa16YU5scaCUYaD+UIxMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAAxVn\nxv9XLvIoKBvIFGW8RFZjP6Bua8A8f8LlNyBTEsoFCdBXgpl13dYXM45ClmRdBu1H\npTHjF6Ms3Pc1X0aEMoiICyPxSQpPZbg5IPrSbsuH3EbYMYwSic/wUqbklUttSxeN\nZ/qrDR8ysuAcZ8urV9mmyPRQW9N1w2m3m4sweqV/c6Uw7VYLn/2cd5qJ7W9RAbRF\ngKVvpB17Rup6iw2l2BzyJDJUqCCWUXkWb5QdrapgjRXHwzWro9UOlj2pynr24uVA\nb7r6u3OAHhtQoYoe1pF7/GUqQYMwA/FJ55+RNpmH7ldmUWXUdVxw8u9rnuwCHkMt\nvOWlbgErwLys+tW+6uCw/LMmrFUIe+w/mgmr3RuyX6Up/ry1LPwEz4wIBlMcBt2S\nw1Qei3fOHpNawCx3eku1pv4DOxJ0aCByLaqfSm+aN+xGMkXC5DeQ5rXIFDz0WX1j\nyoGjZl4YLYwLJDSri7NWbga1cFAbeIQutDdMT4PBFtq7g9Uf3qH2Uu6b7JuiuhFt\nW6qxm/LwiRk6ClqnpJ48ZOuwBPc+QOhknychSWORtPAAeLhLuqWyAHZlM4BtlWlO\ntnwEcihNKDMCHA+VGpMBIDEk4idZLkMrswh0LpDvQyIwZXLsWRMaeIMnAEfzTRAg\nYUMhjCaAR/wBONp9cLf1Pa9HEehZOGeB1sNYNsM=\n-----END CERTIFICATE-----\n\n\nEUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAm3fuaUlRccFZAAAAAACbTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1OFoXDTI1MDMyMTIwMjk1OFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz\nMTBCODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOsDql4x/x+P5gMZ\nbtHMM6bCUgdNaQJ7fA5FylL5YoX7ltA5q+CnmNhjHLrzSY3EdsIgpTdsaJ0IXe6Z\nwULSLE0H74nUIi4AfaIP2lreJHr+kRur4TivdWJJj1TEUhuaszsur125FxgEEtCM\nAjfwwmwe0Y/SjUUJCl5YxU1sxC4nuggIwtTB/Wg6bZ3ORZWNrVw7qxE9VTqXc2XY\nk7xsIrvy+DMEx/5wJHrmb3uEShQQqy3RTJlJUxQWe7fuLVEztna+tRLhQ9JqybXX\ne7gTAbRsrIhUep0C/aLx0RmaDqNC7QNw4t6+XeL3du57DMBX/7RCAm60CHJxztqw\nxlSHJtDn4NF21HSOoDwQP7a9gPStV0lqbjk1Q+xqqPQ1Ornva7tqbVtbgCeMlLXZ\nVIXSAhwhQUKPp6c0P5LcSV4EnFY9Wsl5TalONgV4mFxegvh+FHuRCq7WD/KvF7iF\nSErmAa9YxEKejsazMo5lQ8kEiS0t4B0zpz57sBEvMij+30JEoOiekIiT78uayfvQ\nYVVzPioUKGhtbYpC1i6+PsdOd58WQDdep4SNeZdw4sUCBiYBd4BQ6YB0UREIs1m6\nGEPez5KTZzb/PaVvizbgpH9DGSoUiCzh9rmVvQYHrfW1mYP8q1LJsc86TARhY95m\nH1pkVeaGPAa+RZaiY+0E8zmsjT+FAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRTK86uZoRzCmVH\n9oej6ur+HiBJnDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAD8GECeJ4fKONZJr7Eb06S6v5rTSSr55xueVCMoS8NV0\n1bDFClu7NXi/sgsIlbTDRWlj8aIWnTwdFw/ZnpM34BrDpmG8bU55yZHgCxIOStB1\nxd2ONFA5m4eqES6WdISymZhav/ubiqymTuM6IwORQ8I1PTNPnMKOWrSrRdumrTR2\nIZITdNC1OAQIggNgouXbNRFeIekNja2WRpypoToiuwmUrVIOldokncUtfF1yZZph\nnj93ur0Q0BcQfaZdsKcMYKVcqwwSpX50xOKMWfA/71l57eX6D6YStr/sae/AeQGu\npNfSVWwKsg+q/kBsQOU59SmPyexCaddlVvuUOzLnf0KuWyRIJNVZa3zZiAbA4BcN\nhwUxb95f8MBdj4GI162x1slREbeowqFR4YM5BkTDyLZCH7eRWF5UhQ0Km/m3AkrM\nS8od/rDQkYKjVEgBMMjbbVJnn9ctPTK+StvP5llvrkQY+UcJvmmwpQ17XfCEpPnG\neew6HSqdub11RpPui6Q7jqnODVni7qwmSJE1zRay0N/s0iCYV7b0xEublFzZjuaX\nD26L4hwzJJnC8bU1b6ZiUGjvaTTM+aspPjgrfRlOUIyKM/2iABioZZec3sOy+edZ\n2R8wYIg9g3twR9Dw+TfRQmZrZMybQNvNtsQnoNngdQ7NNbukwOg/uknnmGCmvHWU\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId 0FA7B495048126120E12731606776F3D68A037C0\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAD5lrGsT0ZkSDwAAAAAAPjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExNVoXDTMwMDIxODIxMTExNVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw\nMzdDMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALY7KvW132KuoR39\nHWpoh+enn5TuUdl+b2HfU20iReZJwpgBaBxA6CtY7yU7+R5zQTaPGHSqrd6YF4EK\nMuraqIpSN+PHu5hY0JPV1PR6qC/KlcmcQRI8XNfiIRBgvX7yvireFn2tfUflmFW5\n+g/oHq+ZWBDMdH0lENv78ZzOu4+Tr1fvUK+zWkXM/pqBnYodkmenpgWf27rddXrq\nCIWxjPVtjK/+O4seg63q2HsT69wsxj94hbHlq3ZF792Dr6QoOmHL8Ic2VMPXapes\n9vgxRiXC5d1N7wVQuql9sNuX5JPRK6OE/pCHOp2VZH0fol9mXx/NCCGiXrMM3+aq\nhWVFyl8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFJTBdEneydtC/3G4ZGjITtepUcqCMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVNOj\nIokMCDlXnT5pkEV4e/uZYvgsfiY/o1c8p6g5JbQ+AoeB5udLv87HzPO1dXcKHn5Y\nbSey0VInwzTat56KZ4hNM2dGnWAOeJHHpmgqEfhj+ah+09lh2e29fuS5fmuKBYhq\nbcFwGjh9l5J/I9f7jH2K3U/hxkHcoJyBvriCtYAsMU8OHr3VkElXw312gjPFEeSH\nK54VWjPkY9CDL8DZMi+hWgQI5iepx+dpD/ZQciAe050ShaxsBOCCxSoEvD4Gath9\ntw1vG3jpH75DqPrDllqKHOAKg9w8floCYwB0n1TCi+0mVtnRKLZGpJZf2ezmUsOB\nvgEn1ZYgmqyc6iZM5WjFph8b3ChpTdXHJ3bx7Sj8UB/eBby9rDGXxDOAhUcAEMVO\nqRXABS8g/pQrbPfIozxWXSJWWphlBEX/QauTmpp6K09yZohM7ucQ4M9q2+3ZNDFU\nM0A+7oZmRkBvjLUN0Zeh45l6Du47LGIp4tCWhn0gMS02s8U9wno8wFwne8rCT4Wu\nUxsY2m9zGSfuuMeaL2kBZeWBjiJ66H05q5ew9SiseeE5U0a6krkc5o5fVGd4hDeI\nDy+Juu/fztvkAs4YQoNawRq7wd7m8y1grxpK7/TurKqLqVTKiV7rXCswsooL979k\nRMpVsejowG9BjnoPy56h8odpanki9XDtLMotq2c=\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId 14092B5F7814EC9B713E9A9B90A4C519DF08E688\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEe8NnwqbYOfyQAAAAAARzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyMFoXDTMwMDIxODIxMTEyMFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4\nRTY4ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALGCVEHmjf5IeJ0I\n1KOy3yTciqahVrWiq+TQLNKmFAFCNzLBDZ6o8IvsVEQzXYpycoibpnYzVSngcwMV\nd6TAySgMDu0lWnzy3TGufT51OmxyaH17UGhFDrxAGon7JAxGkHAkLtrVWpupyD5l\ne+wUYl1U57ellGp7En85H3EtleSZrXgTyWnHBYY2XMa91tfH8GC/evpYmbfFwxj7\nrmMyd3en3pJougiNQ2V4njvadGgIp3ZFTrx2XwFGBsKlglMz+pkFU3CczQeb+Zjz\nqv7c2luITcWlCl5Y/PqFQl5iyRxafhr7Qe1q20SExbMLJr3LX057ogsWNO7xqWyn\n6u90pWsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFFCruxTyDEx1ZoYLWPW/wJnA9RmWMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAUT8B\nkCuz9Ki/we8FzHDypoEmX6XxuD6PBiMAB2WMH4weXc2sMx2BSDGPvprf/BXgaRTH\noXEZV2MYzLeiPVJPoGoiG6rSpg+vld3mz2w0+Tr8vQ0zh7vUPJNGrzh6EVsiX+cm\ns35aLVk622yUePRrGkP/YOlLJdeqtVB+6yzQv2jQ7Fn9I9XhGnlU0xLwsuKA+sLV\nrKa1ZQGTfl3wZ7D0Klej9/1YBiYtuRtv/2b7skUHV8s/PuwsaTUEVxPbKaOE6Lum\nx6H+6YvFbAhXZIRckp+nNmZdUrX1cylpoMsRXspvqvv4DgTjNW23Zv2SrepuCmTN\nl4of4jt+ciBRzSMf9Sx/sXioGdbaWCTMopW4noLJfte6SSyNw0vBR+HIMQ07AIAp\n7QN6pM6srwPttj+lnn49sa1cH14P3Wes16nj4igMHpDy35jFsxYyziebdZmFznNs\nIZN3v1aGgME/7+i2Uv2jmFy69U7K14rQQRujVtx/zUhYNdReZAoJ7webh+pwQ6UK\n0Jv+EhZWU6td9Hlaw4DdS5EamwLDBs4bp13BGuU2bwedBFTpgVPbsXUjadOrqdmU\njh1y6aIlc8K2TNQn3bjhdcTMgkDr5Qgkf2VduQWwXWjDnE6u/C7h+AiJfXnS0r/S\nZyvG9yPf9oWRJYXS7WEykF/ZK4VWgHmHgr2vpD8=\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAE32aIQICL9eBQAAAAAATTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyM1oXDTMwMDIxODIxMTEyM1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANDSCb2X0ZBntFva\ng0s0j9OQ6g/hJ0QRDUAdPJeRpsJYj3DnBo4roTRFapRJG42/IOWWRcTkysQMpWK0\nup8g1msDntgKbIkSQuAD4TOYqA+bAoBzKDw3Ql89+RlbdCnLlnTqjK4nlG7R1sVv\ntl/f/bGPksGoYjXB8gZSGk3NxQkyVoHuUsk92Tsp25NDSTfPn71p7jU4CBHU7fVt\nrZfsaa2TqYmTQ2nvOeO4BP35OjZ9XHqBNuf4eH7dW2J9dOP243vLtLyhf1y8ewxj\nvPpS8Aw8e1mFFt7OUu54Z96KBt++DAkjlXDbncn9vhZ6KZFu5h52KatP5AxpzLmy\ngLJ3W80CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFCKlwuHQP3bD5+gETLbOc9iQA6m6MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJIpG\nLRosRQq/h8Ya0GKFzej7JajGlecboFRt/zNnB7tl5hqGU1Vf+rOVw/GD/x1SYyZc\nPuHSwiVxwQx8lVL1G2ydp/2t/NhUe7jRPdfo32/ukBaNDOvJ0uB4wLc0Mu5p8I5K\nTcjf/WMjcxZ+NMEEU1+01eRW6G3dKIuoVgy3LqzWJ7Ka9JB91EsBkC1PApicN+Jx\nIhs1kBeFZHY0YD8AG/fQ3X1XoA6GESoBlabB0/c8+eFftwnvTolsp8kXqXrIpmAq\ns0rmloHl1TN2W1waIpW/GCZeyZz6vM2zvlJani5CXL1ylblgcKauEWkL9aQCgQXT\nsefsvP6JgjQDWeK5hl1ywYOzN/MxzyLs4ke0rNeUOsZYcOC5PItPK56/nh7IqUps\nWQuGFHlMktd8B+UqPoPz91jTywwYqB86adYt6Az7pjq8zKexC/fASE1T5kMc4L/P\n/2dbMfvwg5uE3wSYkNDjH3ScsribsX7CQbMVeSL9gkUUShtLIj+lnXlFQxfAqkL/\njmoZJT8ArvXAeWM3bDKCiM2BMCKhdFDQSRlh8f+M8DtWMMyZmp7MGFsP/JOtq99q\nl2C7B76kg5eO2oLmLiYmsF7yU8uuoovFv8KGIO4oDw0IqwZO1rCHuJELSStnFnWb\nQGBnwS2Qb/IQREeYJgJoKAD/7alTGSgPPCmWMQ4=\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId 4994C129F1A548D488586F22A2DF8603739B3BD3\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAET918QcELhHvgAAAAAARDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExOVoXDTMwMDIxODIxMTExOVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC\nM0JEMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJSBZIHbSgg3i032\nSgs11OljWxeOu4But/MWE+J5LN3O3taOEUzxKphAIYYflMplayW7gesOsb2OJfD5\nYMYojqGMITgGEhuraAmPBbdwkOuujb9q3zo7U2+9wi4APFjJ91LdhHod0goywz5S\n5D/0jTGu3vPw06j2lWMjXc7TWre5yban4wUo7iiuC9gl3aaXzjmtDx0IppdppFlL\nH4GL3JrRws3EUAexf3noXL1dM1RIj9B/R0qYJIFAmeZ0N5YoK65iygLlsu90zbJ8\ny21h8SKaZi8NRhUQjcFMCYBuVMuCFIpMbhaOWRXL+zSrPa41RTz5MeiIK63K6WPR\n8Rn38R0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFJtqshoymT3a8pmubGGtyor7qJtWMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAdXZd\nj0PEnZhwDQo90dj2XuFJRWLHIqylKNV8tB1C8rkJOKR1plnEDZFDs9r3FrAoGazf\nr6dmTeZsffgfm1pUfitKNoeSYnoNHkzUyloXA/ckOXHidGZPUO2UeTH46EcLhFRi\nVX9aQ8GOUJhQNBQ5XWIFxu+kifD+iv5/4SZ/7luSlzxaQZewOXZ2OcXQf//bK4Me\ndXfhq/6bKZqx4N3/ePqIs1bstxNSgq0gbjtMq/eTdfnYK8wA/v+SiERKiccbV/K1\nnzbrkrWql/cv9a5VswPEXPXhsXXTXD4XUthdpb9JGHEMawMxHCb86yqeM0bH4z2t\nnCJO9agcjLXWwy6XQ7gA5LJDF9HmFX8O4EXH4snShqzESRiB6nIzJRNY8qArCgZe\nZxW5fczFGgNgiK8pbMQpIzPk/nhFKWPN7P42dtKsJE2xSvOrwtSkvVybBai7eGmi\naKu1onCgTii3rYRBqL4E8pPaCE0r+9W+VqwMvME2dmocIGi1vURAPGnTTouNSssW\n5Wsohedpfqwc1QH5sJjOMkwtu0OFN3XMdZ+oDEXL7Ga1NFEjXI1oToTZJgUeSig0\n3LqoJqEOYQngX1pa4ZMm1DfSdyYNoVPXtx+1mbSIP8OiSNzoMvLV2Y3Z2QlMCGKn\nEqe2zpePod9HNLVz2QYILAtBPTGR21WYDptWGmQ=\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId 72750C52CA3E250E701DED65CC69204494A8573A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEry6QOa+4iLBAAAAAAASjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyMloXDTMwMDIxODIxMTEyMlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtNzI3NTBDNTJDQTNFMjUwRTcwMURFRDY1Q0M2OTIwNDQ5NEE4\nNTczQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKHbVI1KG+tpC+F5\nWt673uDUd4i3gCJZZ2nnSA+a3R6DQFHc9ZoUcmf9Gol5U8IiwRaZYFLjMrL9/JNm\ncU46cIhluTp6/CgYtem12HAqiBTGpesSMI8ZeISBePiFN7mqRvOucwei3gsqMuva\nY7kGQMbJOzDAAzfqNr0S1ZFYXkNJepATbFuMGgXLlfl7FlT2ar9BAscZf+/207Up\npUPd01D2rfPbiFrC+2AKcIqAbgH5njRRMFdooNRYXlpWhlmQ/UeR/gz3FnUsCOCA\naraiAf+zA1PzoZPenE3MpHrkJ8lEWmQ3UlvFmz/efMYfN6wKNXYuSl3ch2luvf+x\nd+F5OLkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFFvEgnzMPJGA4OXEF/tWRCuFu5dVMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEACTx4\niZ/bFe7QBMc6q+t6z5EbzfmqkTjF8EFZVLjmwHOjliv/HdHVMtc9VtkjhnP+QCHa\nGT68p1fD/EzEtiX8EfmEHREDkI9M8s6Bansxk7mPQSIO7TyXTZZVLE+65BdY4xUX\nLvXFj09rdWDeu9bnu1Brgel8kOi+d/QY5fAx3cNkiWyR/NEKKoeyUg5PS82TwTuT\nFTvoYL6oBgwFrPEeaLYz1ogUzrguGvxgafp97bTIm3G33yVTQv6+2hTbucDBOAnA\nMmoxdtLV9fq3ThUvXIi64hVg0yGpuxRGKWtGlT94/7XF7bTowfgf1PplZgsADpac\n6R9WVTqR5w/4yXCjE3bzzN8Pf5AdKG/9pxODxqJgxk5dT/Fj36/RMcOPrJ8BZNjt\nRccqXh16oFt9Y6ROnbkVdStWqBaa9KEBCm/Dr1LvPD5km1obn2udZal5adXbpRu1\nxy4u41vZWs/t7v8FJsD4/NEixHxDRDolb42iBQSDAgwgUNHRmEdk/ITbLZ3ZC/fQ\nBBZgWqvnGrC0WhWWKId8rNGgE73fKydOhOhYP65fxpATglN1lQ6j/nj8DADrkC3w\ns+2tLBikHOYV54Y4pR9N1+M6KflWFdqQyLYb8UPzH5zogdJOG3x8TfCvIN2r0Nae\ntHw22cR8IACWqcBDFUbtyn9Ar+oiN0iRxjaOxq4=\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId 8E1AD84693D5D89B1472CD8F999076EDC4115400\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEHcqGIJXpg50wAAAAAAQTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExN1oXDTMwMDIxODIxMTExN1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx\nNTQwMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOkh47uQVQXhO7VT\nuUBsMapiDQtHJRsqTxlrvCcPO0hvMwz5Go2yeQgNnzQhWn2rE125KUHa+EaiQGNH\nJ5Y5Jf74HiG/xX8I9uiJ+9vTBO5Kmjqb0qtV50OppzG3acnvvRxSnNrNs39QX3+C\n4/z/TESZwEWC8/8omowS2nMonE7tESShaUi4izBtnHIW0wkRFsVznTLTiRMUeU3A\nJadU7RXYTnZNJEoH7LrDFXHYY3zRs+r/VB/LVd6frHj9bgzxYL/tgnLEf88Tmql4\nE56oG2ZRK6ArA33Qk5KrVwZrMD+8lXZZBwXzn9MQqzr189Bs0oJx9JQGn7YtVmCA\nNEOq9h8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFPc8ECss5t3rccoGvqSoyzD8RnbhMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANKjD\nv/HCXKAtv11jKwAPdJbWcX51nbGYO2BSqMhCOVw8VAt2f/gz2a5qTeJ9OEwTv2yE\nrcpEaKQhwfEEdVU6ujVq9ROfKRNLEVQHryMNGDeEc2uXdEt0ORWkMJn0KYcYMaTA\n6aX1MepHfBomuA+2IIYn2zUXbtJ+Cz7MuNyYPY6EsNhZD6gDHouCk2fGKPhfQ1+9\ngXK4NuorCW9aOAlauoV6fOKf+aNuhAJxDmxRUB7jq3xuhkVt/SzhwxL+5dE7+epW\nLdUk/U7nB+8y1evre4v/xZ2aEeF4NT/YQHv/OMGSdRYyRIM5Pa+hpo50ugIiAV9l\nRrg/CVy5TyOU4lyfshIc+4A5hKAMvHyfA+XleqZYZLbE6twwuGJH+vGR7Jmuza/l\nInmnvle/rRcnANrJ5JoLedF91XvhFhS5E5PPS+Y2h8OGz2k0mKiY11fXRjdMQVti\ng3KJg9jd5p6+xZ1YXttFMZnwX8QMxxPzk4Gns51n2ioZRmb76CgoKRQdVFur1Wke\nPOgHQqqTCMOjdZric+XYAugcw+exon8zq2BlG6ll/xYxphMfISA8H5AGuv0K1bry\nExRLDso4l3wOmZxBl8L1WOSzuHVYlfedxbFIiCFcC6lkaBMTcH1Aybd7MSabIcVR\nZcYPwI3Ty/teHn1Xi8DQJf/qCXKdLS4pg8/s0Sk=\n-----END CERTIFICATE-----\n\n\nEUS INTC KeyId BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAFAzbiD6Y4QKiwAAAAAAUDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyNVoXDTMwMDIxODIxMTEyNVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS2V5SWQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB\nNjYwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKttX+wXWqpHDOkC\n4dWXht80fd6fiTEvZqRjtsGUMb1ceXCVFjPXda+1l+MG1qrg7mGJT0qRH5EAezpj\nO/SgS+4bT00WWDDq3Mcugxmk2tznKBebfNUzGgsMYP03I4SVJ45gqCkt0KjdYcEw\nagpEPbeMWDxJ6LZgrUFZJfDlN1X74UHo7tr96lZmsZxy8ni5bxhbZ+OsiqQAR4zn\nRUV05b4eET7LH+mIqyvL2JNHKAgEgAv11awLxOTD7POw5XDVQ4+TnZuw2o+9zbSV\nOe9lyXdJEykk1m4aVGzA6MG4QXn3A+Y3qKSjayAoHFz8rZrutOoRUZBH2C3miGzL\npXW8Ci0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDb6Pl4eRSn7KOQWGnAELjAQJ3fZMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAOfOw\nObTJLC2ewPQu4yu7v1xmQLAf2pwsjTpLN5JUX2D/7ApErztVB4rMtPpYvOMhcT2K\nV95J/S7Fa6TMUD8ieLfmngX5sVEHcRRD49KGDfF6Tt7V2SmNJvp+wigf+CopTMXW\nH75jV4bXqDz7sCzPohAG+hN3HGZIUQQDaR/sOB5csuP4nx59RpfBbutmjv004HGR\n7ckixmMkdyluRExw/VSFzq9+1dXxeio/SfZO+ZF5I7JLMbxA0ZIbZoIoH6xfrtBt\nkXhT3SakP3I6MSNphvIc4416pKFNerrIhICkdMLRr8bYkoHCwNW6zsB5gAA1XQmk\nQ6N5pEgGbSuPeRDan32OxFy3vzbQzBnUbV4pfok6KbWNTZDol7O7usAeY+vpZ//h\nSiaq5uNfHg0R8ItQAH3xRgnuZBEBUS1f3GpRJDqg0TA9OgFJHwhf+0CyyREJ/2sl\n4KdcrREVfH8rzVp94/8Zhz4Nr+uldyvkOWT2UWN5PNzitRDKmtGnJ7WvlFbt6POh\n/u6zM+awkEp4/hWCHl6uPT5UV08zyNMctWCIuwWXDmKxdXcL0MWhMsjKKDLctP7W\nMlMH4q6t/2J5VbUY2d7RyFbFcpR5h6Nx0sE5kX5lyM5s3zOKEMfHqGXSzSWatTvX\ndslTmIqOOa6BKlRXLe6nSftCAwe1b7phsjPcMEo=\n-----END CERTIFICATE-----\n\n\nEUS INTL KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAADtiAUvFZn/F3gAAAAAAOzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDEyODIxNTgwOFoXDTMwMDEyODIxNTgwOFowQjFAMD4GA1UEAxM3RVVT\nLUlOVEwtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMMdDmxluQEqk2Sf\nV0UF+9fB+EDV/uazh7cekCi6oQ70anGZInuIynibRoL+G5rvM1V04sdmzZ3MTOa4\nU2Vq1unCKo3yMcPCDWCTWip9C20yp4JuKtuiDicDhOA6WIjVdgkvU8pxy3op76kB\nxOeYnfic+eUKD7i/mzQVlAom/7jcBWAXr3iVYeveU0N9SmSTfl5unG6KZ8xKjeF5\nhVIawr9G+aHrGxlaY4GI4qsZhLJVCyOHrpEn5JfyZcGlB7uUU84wQ1MLCkBiu+na\nUrMfaXzhA4L9Ane7S7ra8QcLJfgGKDGaE51UKuzTWntP/bQatgoMzjTWBwwryykl\nU0XHcOkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFJi6GyVCnPw80qYmtd/zWhXvBbalMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJ0t/\nJx41HVNSMBFe3mzjWCRSBxQCaHlRCLkP9mZGYoVX5SQGUrRK56ubnKAd0GlJGWP9\nrI6rDrbmH7kWF4TLpfVNb22teJm4Q4gWBHxL6pWX7gLbe5p7P8PCnGTG3MR7mAsp\nqfdzGMF8aCBEA28baVZsMDzKkdN/In7pVhZ05vmF/QmMG76KvvJEPYcMipOLW4Ga\nmQRLA7esITLTryEzhjgY9QvJWILC/h2ogDViFFOYL+Q0epvxdjoP2O9hDAFp59CA\nKO8hAMsYDV6YrFNbdoCCyedumQJdssZJnYBhaGIxxumAZjNmjSLLb4PHq20n1cG4\nH0l8Tv1b2q1pXNqIXoc3A4FLirKpl8fUTX4q0yA5k1IzIDx37hNSNP1j1k4GpSSH\nuN6qUn3Dv7HgOxLQw+v6STxnlA0nMYAMLkYUlx9Tm+6vcjgtNmFdkn7YxyJ+YeNJ\nwmwwFJFI2d/D0tC3xTgloiJkO4s9/VoeW3PjYZi3PLxNnZo3LLz76ecrSYp7gfqD\nzekYVtBSk96vsg4tACK3C0fkyfZu/hlXsdS7sPw+YUxPb7V7R9qafrHU5EA7OOJE\nnBK8/4YERUhoMeu+7dGs9PLqD2MpZ78D7uAeebb1mLPX6AVWvhJIaPdNXLio5sxn\ngzRjcrSXvEVsxxoHkenZkdQlY5i3SzUhs8WNRzA=\n-----END CERTIFICATE-----\n\n\nEUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAGtKhJumYBl2sQAAAAAAazANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0M1oXDTI5MTIzMTIyMTg0M1owQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx\nNUU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvoWKtWSo9zzYUZbJ\nxWgfUDhOyfwh/y8Wiu2SQq+W7cb9ocza06svQi+JDvxAWCxkMVv+cq62G5c/Dagg\nexbzDe05vX/utlwHRSzTchKfKE0Kyvnpfp411lJFSGldPkXlmqYljW7mGMxMdJ9B\nUzrje1D+1DQMCkxsukO/IiizpwpL4gqwLk3iALff+szSChJGPumeYTa7uq++5FAK\nd/xWkcSi3HE8UG+ah2GF4RRlJbMxPwAtlNc109Nr3VkTCQMI2g38+mSsDooUn7Sw\ns669K+pMw5rUeAZA8zOGxloXhABr+786wxcATGDJ5qVv0Pq8Dc9gHnAu/NE0DRAc\nodXxowIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUKgXemerGcdyrvJdHyvRnIxqW6FswHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCcU3x1\nFmdC703o3cYARTJOtKtElfUZA40FhvZfxIgqOOfJDCvKPs2g5pzQhp4V3uhwperD\n/5woMwM6PhIvmZVZE9sXudbTkfLg2Y2PpkHIgRmt9MlqMIrXSvHtG5f4f6CkV2Ze\naIqtYJ5Ah/zzcfj9MyDrqSvpqaddaCgue3w/CJG/Rf8AaIivGdZfvk6jy8Js6IQA\n4WRN+3dAIfZpz4MgCs9MaXBzPt881WJqIqsScbEPLW5SH6/5q85cRsdKYez908pv\nbWHHA0B1hOEq90zYBgKMcuMOGkfKu3Cl6LmIxq5laM8pKoZ0OxwYu9HVB0ko/O+t\nwG7HN9jyrW5msQh+UJuQTUAK4FBcfOWsmr9quf4TbRtDYrg6domzM8Ej/gSAkUjZ\nDuYKck8AXtCL2bUc/zYYfMKw4Wq0m7KE83eW87WYQnvXleVV0uTLCXx1tuRN/Xlu\n5enwuFjGXJ+l/QVxu4YCsFq1kIuy9IihQ5hkRS8CTyeOhVm5dhDA/5o3JUe8RFvY\nec/3UjO1fOBAsdNunuqu/JBUtrUyzHfi8fLVWAz3kTUdGiqd1bOCeidwTQD302EL\nRcjwuknzUwMk2TheYl7Ogs7FwlOUKPJENNFVUdnRRH5WTQKdqgw6jvcV4eOCeAvl\nrxWyHpSUbauRC0BhanxPsGJY0N6ymI6ShQCdSQ==\n-----END CERTIFICATE-----\n\n\nEUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjKq+Eg9faHAaQAAAAACMjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxMFoXDTI1MDMyMTIwMjkxMFowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx\nNUU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkgKOc5fQOU/BkEVy\nuRr1lo2CoLMM+UAQHcQJHDEioiskpeLk2C67QaQeqL58iFC6sjq53mKDGBDrW3Wx\nbl8rmJ8I8juXxA7oInWrVn4hWazQgHXpycrR5JOrjYS54nVCe82f55DDaoi1cLrK\nAJWqyBjEQ/SrQHx9qU5MaKP0Qswlo70R3qm4i/Ly93XgItWejU90FUeKTGwp2ZuO\n0ECuxoMC1pcIf0P34yaP/ZXj+tue+I9tTvmYicjXP3XFxhsmE1Cc/9o/YmDMBvum\nt7cQhink1kCyMgrqERkUr/NJhdXyIt50Qb/xNPr5H7IXHcqTNy5d8HCGbgNr94vz\nGchOWypTaDnuPY7t1uJBpxCW5qZLHKbUbc07LeIqQ5tW94uSIHgDH3E/LZ+0rUqb\n45FystFTYvs2W9ynUzfRjtVC69S79x777lz69SsJdc2vdY7FZcu4laS6D1h0jBmB\n1OfUqZA44GylDyaddeLmweIxrsny8I8gKtOTg+NtOgw2iaVL17oibDTY3wK69qyi\n61M4dNrK7ggLkskgO0s9UWalbE7VFBd/KVJeRb2acBUTDzvT/k9qXWmJep2FRqQT\nCmX3xaFoZw+5DqFvmaYFV2UtDDw/Eh5/zx7vmKaaDJ4Jrp4yYpm8n4R7+OEC93C/\nEiILi01XTDQttdcGPPBLySQctO8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKts369VMlrV+okC\nJ7oF/dsWlonEMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAlfRE4CJE+Jg0ZXN8EipjGiUk0sGnjXeSKekpOMAWLQ12\nSCppeQ9VgiUTkSahB8vwS1GsfxpUjbOZBV1CbRFGYl0eKngS9XaHpk83YgihHJAC\nm356Xfb86KlVsiQc0sSn9tj/ThHY2dCQIiiZxe1IdU0T0h583RKllGbjGat+CvDc\nwIanmljzxhnwJk0T2acqDpBnSvcdxAEjTX7DjY3VHNehuHkZ3OIDlwGPTTORfhtk\n0mAPNLx6C2AQZQ1xY/3IOiL/f0c/a/zkBCvJqstPBMEjpbPz0Bxa9aLhLAfN0L9t\n5GOEPEGVrAOBatTGNnuXPAAYLcaXr8FvCZBThczwN9U1ftArJfN+feWZZt/VkB4T\n1uy7sbKPXNcT9/WPi1RXJq6Ov0kzKtUhdFbkM7uC5LxDu6R6KcAjVP3fdQwfOkev\nUhH/OEWwM6aNajGtLpPJre15A+tTl5rvmJ+AYW1Q+hNX6XPXT9OELTT6FilFlYzl\nzp1oPaQOJLOcs/Qi+X/v0zPBwwF9hnL3oXiLvo2W9z2INOwQYPAT4b1e/Q6TVDWH\nhzgu8DIq/lAF2QKNZLbXnCrOcOMIlsK7ZGZxIVBk/Qu8RCYsxMhrecWwtHx7dnoM\n+b6Df87PPwLPhYHYjDAbMX0eQnNBy3lDY6KE5iSe9CxvdSfr6RYYdHq1VyJdsLI=\n-----END CERTIFICATE-----\n\n\nEUS NTC KEYID 1591D4B6EAF98D0104864B6903A48DD0026077D3\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAP/BJ0QbynxwswAAAAAA/zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDIwMTE3NDAyNFoXDTI5MTIzMTE3NDAyNFowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3\nN0QzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxd1X2PhH30KIEao+\nlu36RBCtd9yod+v9gpTokamoCZcdHWVBdR92eb9NmItO+NLz4w/4rHtaQYk1vA9P\nYmWY+lcHLp9lUDLnuaPhM0VgGkhHQ92pfTE10kl657Mb9Xs+9UehkRg3NY2nWQGq\nM8NO8jmJBNASw4QPwHUwPfswnM2FZ/d1uRwr1hNLv/qn62SJQxhPgTe1YeqY79h1\nsLJEKnBluMN6L4jGx5fnyUxTyFsg3SIS7Aab5lAGEGbIia6cR3e6iLHfg3Kh/+nV\nIhxd9bkKyA4FLJBpycaAOHEU4K+7JGAR4mX8Y26ObGxIoeer5Ea+fiIb7gZ+uQBY\n6ywDXQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUQd+bdLyrcQXwp8G/RNbA/JsRV9kwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA0n+jg\njI3X/eNS45m4d1yQ2OFNzE+Ah8YzC24EtXUUQsVj36O+tJ98NSZAAusZWac9BhGp\nZn4QdzP91xT4Uznw1LV9v8fVr81ZmcfjYqOZMfu2HU3dxDZT8RAet9gzeC45qsjT\n/rvBr+bVf/JTn2YdNub0XkHOq+mAaK3d4d/1AWbyaIMqxzJIgj/aElqBiL5kU1rf\nMrysSenJUM5bctUgoOPk6N4RKYwe/PMpHssV0jNKk5aIUKiPc6QnDKqabaZEOfCi\nCzXdCnYAevxCL5+rsJk27pqo5F9S+OhBFfFQM4aqirua9uzsEEdL7dyhC23E2PoX\nqMUj1vsU+1OFbCjOJV+0N72oZPLmiKon/3C/XhFvgBCtJubzspwQilrKI4ePbS7N\nfZDGduX1BLNnr1YJ4DeHpZUmCkRSwQKqfLCdSCxSGyZuEO4elDunDGqtnlYNHynL\n2nJ81CqWhPi/TGN1Ubn64/DVliYNwc8vRYZEM3FEYT6z3pA+jTnVAAjz1HyYid6S\n/FjhvVQK10Tq+Fjc0HHSlWZqIlOdD3UVxDTpQue8WPdMMrZLz6wlgRU/VqAoJSUF\nndM0RI7TCGfhOnWzlm7h95AtY5rShnUrygtvptt4EVxdXgz9WD5sKwjiH2omrasS\nwu5q5hQuWwuYR4D405Q2VR587EvH4wC9m5B7Zw==\n-----END CERTIFICATE-----\n\n\nEUS NTC KEYID 9FBB79AA0F526278BED150929A7171E96A35BEF7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAm4PIEVQrRctOgAAAAACbjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk1OVoXDTI1MDMyMTIwMjk1OVowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC05RkJCNzlBQTBGNTI2Mjc4QkVEMTUwOTI5QTcxNzFFOTZBMzVC\nRUY3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr/eQkvV6uhzpj2bS\nABtGkcsm6E4y776qGriBgvAHCejKEHwlgSrDb/0P9totScuDgNCibB0CUBFLFjSd\nWpr2tPaUp47v7YLp+hfdOSsyCn/snKtd2/0/P0s298pGZ64ILOgAXiTSkJfN5d2A\nJZVFpBHowCFFz2dXrXbwZGxenLp7xMvoHcHuqWVRFZOHe/YuyvpykQEDOGLeXSBU\nqHlhTxaS2U3KAtR+KWtHrRxQOWkTxZ4/WQFOSUoTJKY3NVDP47h6TC+Bv1TZls2q\n9wzvQ+6Mc9NwsIxnDLsxVhK3WTtZq4gN4dKp2vKMVdIX+xavMVMyQBZsMIPEsn5H\nE2iEXn200FSV4iJujG9iiBr1NpZ4TxvrZryxQC/GBMRCOzT0L8NGwA6/2wjYgNCQ\nubm6KW2hbgMMALyxKOb0y2uRH9RTJCUVHvAZRrP0vxGWfC0QAI/w7U6ja8WG5+mN\nLKOx5G1Uj1R8hj9IC6RtQrKsoGcqhWiAaHrwYoJN8VYXqMRk55TS/hYhbSXyYJMw\nraHWIW/eKibiUu/TfsRKPhElzSxfhVsVl75Nj/KVaZP1+OK6YvH5hF2j+R3k3ZCf\nJNYhUuuW8DOgltEXeaTdlyebR9cFjDWnt5sDbVV9Mtf9ffQzQs3NP9oi9ajsJBEN\nrzbVbnyNtVgRxZYa9sA0cROq3SsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOL9pzpCjZKS6VQg\nH6ysWFw07pI9MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAC2s+ZR/tmuxisQOFH0A0AdVGR34bToJY/oWAjyrFjtFZ\nV8wAGFpH/Y07l+UnFxTb9gvquD1G2Gc/dtCR7gcP4kFlRz/1o6WvZ35wBGrV7WW7\nkSTRONl6SFZWs2fvHTX5ebKVq6hDGvj0dyvtphZf+iOqLpsIEA+QSmucY2FWDWqW\noP6P7OPOf/Z8V3v3izA5m4oNBzqEnnJM1akF/xdto+quIu70ucqmAgbzlcOrOHXP\nhtYXMk7OxzfuVEmv5oTr14tKe8pKDktnsfInoRB6b2QlBH61VBhDbdWmu7+/wV5N\nlOs6T/bBr5gEeafOjKZ8TT0dB7U67ouPwDI7TLgRlyhkd5WqGphVPbLPRLOxyaCv\nSsTmPEXmMJmTyOWpCGF0FMK3qbmxdzTjJE/cU9FDPWIZMMToud/ZBuBc3byWu/w/\nFjg6YPa/mLOnctj9PT6F23DZi897psH1ZRtuooVcqaoMxj9CtZTJwyYK8zUA+yws\n6cZjQa9/sWZoVPS0lIxDVI7Hs+kHsfU8gWnVBgRo47FtCcvm4Ct5dlvfcd4pQVBw\nWSrPtXGHkY/VGRd6S3rwVwZ3ETdLKVH4MoWr1xkrNu0c2HNShNe+Dc+LZU3pmd59\nZZnQGCgctOPkBqVbHsNUIee1lQmVtUQw1zanGAc8h6t06BFyb2AbRfrGQZiZRTg=\n-----END CERTIFICATE-----\n\n\nEUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAQQ5TDyLHjCIYQAAAAABBDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzNVoXDTI5MTIzMTE4MjUzNVowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG\nMDQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn06NkIBJ+6jzAzhl\n9p/IE3S+iWIKRJn79r+cTapuWwyLKDaZVZoogjIYZn/tCjIsNN0SCBXp1npK5Zxr\nSBNXq9marMjczff3MtsDC/K0d+HFcKWC+agcuvJ5qGqNEQAXyXXGkHDyJOicRBlx\nmEeC5Rao/kWK86XDSB2+cjXeOgx2RYXV9GqY/aoKbX6IZ1b5gd1+NUC9iez1tuLA\npa5dVjSJio3HFH90bn64e5OrTCzx3s39v/cXfYHvVKXDlaijkJ7ejKF9blAKmQIP\nBDMrzh4wYGvPPWpySeslPm1ZAdJQIOE/eZ4LuAMUvUFTmE0isP5XJn4vKHEaYTME\nQqggWQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUGY/YewSAAwl3GM5sybgr0TengigwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA9Fbaa\nQn7c7AUUYba9XvVVwFearLx4eI1/X1obDGrRBAC5eIxnp6dVT6lBHzfo1a1iSbCY\nUg5q9gMoY9xK9dKKrFNwetvlYnWkH3O/DPs5NAWMxtXdyMsIWGHKjozCMbZL6tld\neRQI10nGF5YLApVTX265tB9QMrZ4YpDieEnhwy5GlyJKGrBdPcjg8St3D20SYn5P\nTp6DNI+qLQwvvlUlqHyBDFEWBimv2mR9/jKMPrVKZlFDP9Kif7G/CJjwID4CVhTK\nAD+GGW+jcqKCV3tvCqCe6+cj2qrQOO8wPET9QGInXe/F00NqfA8+4v1GUZADBQPw\nDTmlaPCQsLTB1+u493aPbP5eLk3iEvR0IiXtb3VLW2Y2rKzri547lmwtXr46pLl9\nu2Eod8ZmTSRXshsHdkmQBq1Vby0woi/J3NLj2wBy/SvXEBIiWkZ0qT2srASM0rfb\nIz5oXFNx42jc6b/aWktfP7r3RMQlUidi0OpLENJ6S9TGC9bLz71eb16+7APtc+EE\neeYOAmc9fmoFk/VkxWc0zxoHSQfMVypLMAGVqPCP4Zfwhsu9l3f4+ad97/M9vEdf\nstri+BFAhaeCumR9vQX/0RtmBEE8q/xCFXOqR14xgEWmPQE5lX+uEUUlT+VnPY7b\nZgsyO7MQDZL0MoRWnv7Gp43xTxTe705zyNbqrg==\n-----END CERTIFICATE-----\n\n\nEUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjPtFVetiD6TuQAAAAACMzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxMVoXDTI1MDMyMTIwMjkxMVowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG\nMDQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApk1ETPo/42Cc5FLH\n/8tr4/BaRQw1WaNiFqyKC9jbW51jloyGIuZuPUwbb8zRB/1TBUGY60R8odMSrCVl\nEJ9JqCcyoTx3hFH6ntEY3FZ4MXCv7vH7nGaMPEscnZsKL19dMGhBPFq7p+u3SXO1\nPhoOtoB0sXu6xsXTRzfoTiR2oZnwz6ZnOGcZod44CG9tJ35/xoQBMghYZGQONyho\n3JdP6FPJNPQvg9IgxfQr4/XFss5Z1A8dYiHKOuvf4QLPbEcxTxxyYnMGwZyMpv3X\nh6E7V5KIohyG+WSVof/R9G5mTw92NzJS2Cpw4UnTuqRtxnC8/SwEWsR46NSK8Et/\nYOcsfdo1Ufp8XIBNdj07LQ8+xHScmBThlPMK9oNhDsqmWDYXsA+LGXLZKj7B2Q7/\nTtY+faGQ1+0Y2lC4UR2XTBS0gWBRnk/QapOGeZjKA8JSoQNcgkZ8OPVoPx44OfWw\n2nYmqJ2k5nT12RUzOpyQcOtbj702ILoxpQeJ+5IILAlrWys0AnWlrkmJGxA7pEdy\n0iaJEwfKQxvb5whbmFioOTCHbEepeP8GxiXugKQKIKQMtDOvULL7jIXLvyrV5uw2\ncDM2bN+7RRUJS2i0xCHFwGrB6nMtK7er1QX3I/StjKZZgv0Ic/ihJOXmTq9gdCCa\nGgBAFXwyWH0P6tWbo/IWbCPIKvMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOWM4nBo1pDmsmSS\nZMVkBnJP0DMrMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAUUuTWFBJuvy+KMl+J/Vjs/vpz0D+oCjsai4LWsvXqwoW\n92vf75t3U+6ybE8joeJQFzLZpeLz7Gg+ngIPoKTDKvt7Ld+QQRKA/WSsN+7R6cd3\nZFTzjJhJ0oKLfOjUtCXqllMmijAz3YEhWiN98fqytenocAaxSQHqaUclkctijXxQ\n1y5so8aQuUzZYVgTafpkPT+h7I3fiTpo0TqMnnXA5rOymLHaiePeNDunIjUOa3gb\n9pvypEAgiarzbV5HwAFsISBFKtaDadEh01E54hfSEPl5m2SIUZJeKAxjHjdsOm7G\nsKo4XwzPu7/A6VwrOhohYrXD8j1GXOAgrq3p3Q6CgMLQm9TdR0/rexX0LxYZwYSH\nxMcXxtTu92HaOUiXXKUqQOMtk8JJSJzI9JKlF84/jZmmJFQ+ctLK0YKk9kxWJzrV\n1gu1RZx6qz089VfZmXnqvoyW2yfv0mzmTJFBHhWahMpgRR8jWb9ZId+g+NQZnmb5\nVHi2jBXnara9OCWpKAwQEB7Vrzhr5o+4g9DCsOQDQwlfQhYwhQK6tUguD0aF70AD\nrzbyNMS4aZTktnjFJtl7swjaJazPVN+CEb8/2CXh3SlEgUWoy4QuLN1PU0ExZAMA\nWoIlniQtOS4YU5bNw39J2Vpg5gFk9EPeu5kW5v0N8KKJnBrCwt6kUpC/N/Ys2to=\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQW52ti1yf2aeAAAAAABBTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzNVoXDTI5MTIzMTE4MjUzNVowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND\nQzhFRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJYTWn6nZxBpNTKr\nNYhlkbwF7D1jmEDg0lf14r2oxyxYagfRrvcBuC1Ns4fU0XTR4uKK01nD2gQ3mgJr\nYUaXhZ6yTpqEMOQmaUYDu8DV4mVGaUy73216sztoG3L/adLgJQ7tTyFwXCnxXezT\nxs+dsw/rUFLeI38/AvQpY6lhYBgKYA6gm4Q95zF/7TwVhOduKlvbptkLe3VHl0UU\ncezof0d4jLDN0o4y5s1+Tk0GI/xwt4V4dXXlKd5mzAMXvrbQLyCBhRZght1Pt6YC\nzH60ahn6aiRKNZrGmQ0CM9CcjkRmhfwE+aLtsiHQtmMMGTUUDrQtz0YcYLfaiCIq\nto4Oy9kCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFJ0MZKyGHd4DJDOQNGTZOFzwn8W+MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQy1Q\n54flGDjr8wHBT1nN50ZlNihVSr6Nyn1kdwOO5gLbO8O+59SDXmYouBwUUQUv8aMx\niIqijCts1WkhtvtsmZlrVxxknPsL/FX3eJYK9qf2qSV8DrDC10Aae6cvkMj0Ok/w\nX1fywem/JU6LaMU1Uodk9HguUhcjMYl3mKOfL1HysHjBHeRzBe0yvnE8YhkqPFCj\nwbRGcMbMFdbFhLun4l/BoMXBTxqtv1vM4QEXyM8r9x5tAlZIMChwSm4P09JBYCg+\nDSwphM3lAUDRDGIkVdj+r59bbyrWskR/8cLrzBFaikgO/Pok6pyU6Rikw7+gKdBz\nDqQLtchddDXFfZwfEVJeS+911zp5I/fZ0LaPC0QVjFMl/uGOJ3DfLqTW+Hwm+5SH\nTx9TDKEModijrQG2Gk9/jM3HIxh1PSQSdO9enX9hdkmTZ3BY9cX2XdDhXMiBOX8G\n4Fjm7nhmUPSxStB6210HfPMhLK/DYWmI5plKDxkuVQGnDb5bCDzxco5Dx8uZpcXf\nB+4FGbR0FaMlrh17wJB2HXslZc+ffz10HI62JiCRjpbN3c0GQDGuRbpVSGZgG7j8\nQ7NJzyydDIIZeDTnE76L0F6XaOrWgPM4a6346ZbGJUs2XPAigSFyEDnw/3QK2kga\nw+v7nP0ncaPOpb9u0pIgCQNvU83Y3PusVepPoBU=\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAjQu1vQy01PqXQAAAAACNDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxMVoXDTI1MDMyMTIwMjkxMVowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND\nQzhFRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK246r1mE2v65zju\nPvoV7xkK4coKagXl4YnUfNTqHhZjM6+gdsCHMa8SNFxLfs2Qg9LHS88TxJXMYwzf\n0mmnliL+hlGioIm91wpAAlnQppLjiJLDkxkrSZsXEB/kQ0TDTCydhAUu5wtbrKP8\ndTDMHoRTRD7Lq9+1tHJL6qrrRR6AS44nYulYMM9Mw8nPz7YhG1OTilRnVoSnX3zT\njn+Em3OD2Fljo1D0T/PxXtNy1TyHOGaYeUc1jbPPep/DTxx5AO7om8oz+TzIrVfH\nrl6jMNQg83I6+w2G4yBlk67dhGPnW9rBvg4IMLq73OmugpyxXH/qjlldfFfWC9QI\nCMU1g7pGPMXNMdRwPv/Xb1oI/U3H7cIlF9AvLdq8qZxT143rHHWozBALA2oVwwcA\nitoKoJRQJRJ3tiHmzAbnws5AoCa7xWH411NdYMM+cXq7EoiNX02+mphg3cWlA/hT\nFyrOFvaZLk4P1Wlu0oL1eUHggjzlkO6cT68IAGKy63MQeh6prc7137Nnkp0KgCm4\nUqBcRcDDBMnteZBOdXXcEz89t1bld0OqULU4jE+ba0aiNYbB7Fy7iUx69WLq2/0d\nItbfyINSb+3OEpKL3XotYuiTb1MXZLl1fbQAYMNkhvFJRt4BtSS71NGzTS0n6RVN\nq0oVLvMqSNvvsQcwu3G2vuLja8dLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRt8LOjdrURSTpG\n8iLGRs21qF8m4zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADtPVlJaf0fPgvRX5632qo6bBEg9gfPDQpm+VW0AUqEl\nMy7vmVKTqtzbIQaJbMLo9eRnJ8zR84dvwxirmw5j1ZRoO4zLKE8PqdGiQ9UM5PtM\nq+b6emD3X9US6YZYiOj+vgM5z7a/DqgJl/RArm8c6MGiX6RGx/LaQnqjHDDzczki\nnECfFKzs8vJemnSbu0IOnwX0fazuf6OphVt3cJEbmKuFuttYkSQETnmuulw8TTLP\nYsFWFwNgeQhjtDiM7jYXKZjD6ML4bx1QeMbO9kiZEVYxpM8iwd5iWfYcabNku46h\nzFFXAhDYG10//u+bddSq+GyaFAyeCUr64KYcH6MBHeAyY0kG2W8a7Xr4urX2PzEr\nX4E245is0l9RLnpFx2+/8g6ni1/tVXaQLZaGO+2HEvGclOG1DF9FY+WP4frL4MKy\nsKLZP9kIWE2c9wrpZtW8tpnJvQzqeczg7voevLt7L/wl7ew0tJMbhUqVIBR2u3i0\n8Wg+FNMeK+4bLqpx0GeAH6kKFuqS4NkLJmCQQofjgGE89sy6VDKMZpZtDyJiCx1H\nTEicMi1Yk0+f7Tq9y6wPLYxdxSavGPDZ+Cx6UMDSYHzrAnNQ1haVhza9wUX7sJUX\nuaCSd1rb98ywmAw64JtMZ7uU2UMaieNahASGldtGajE112YUjCIGQYdwks57m+72\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAGzWGLboghYK+wAAAAAAbDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0M1oXDTI5MTIzMTIyMTg0M1owQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG\nQUQ2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMD56te00Wibc9XT\nH+BGgPta0Elrw/xWYcxtpdJIUqZqei9Tzx7Wg1OzcMXISXEwWdSsCJfDOwj1Wm23\nVI53zt2tQ8KTXrbAK77LV8uhvlNLmSndqNrKdrDeYGe371QrEkFLVIILsmT+oIyt\n0zhgnp/TGrp8ox1mY8xdbdasomK2i7qrGpisOefoHsdHeIajN0VTugbcFvY3LpMc\nxSazmjrPMEMJsCaRKnxw5zypQ9RHlVkd0+LlQWxP/PSPe/dLPXo9hLEwVFRlzASs\nA1SoZtS4x8m2zToIKTX8hU0XqaKjMFvdin0Mi5wizr+15cxu8Rvz8hlNz9SXV/dW\nsJBssZcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFP8pClsDD0vhoP/5Sheer7e0ZDECMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeEJi\nC+h+uUHL8ASBiOLvNwS3y762D+kT/utmzSH934QxvOfOVZCvU/9mLU8PXZAHsIPs\nfa/2L8nYyr6PxRbcEMD6oLpVC31sfiHKo9Oq6ZBLH6u4awJZGt/PIeSZmsMTvMfL\n3+Fa2WYvlfJQ7Bh6xoTjZBSDSz13RgbSwzHnRn8S+yY63JEl192Je6q9m0KZih3J\n671tx50YJzoOSX1d6jxPqkOxYXgxIegu8Z4AC0dPTEQGDmA1TgE0hc77F5cBNhAG\nYq/9q8gLro8zrOAr4owLe46d8TgGcnzt7T4cmcJlHA7IGvO0ma7/H980XlgNu2ec\nDPCbI3nYKtTba3ZMh/km8Wn7btQM5caUV+/sVqBlW5R1dxtF6yGVHobfpZAqpyra\njf/xJQWx5G5BUib8kbtpvp2h4UWbkJbJbg3rotYlyMKKdGMhYK1axmulBn1MgPcm\nG+j1Pv6BGgt8jpraFuEPDFj8dGGfYOlVOOCR9pVXh5JmcG27R08IXTTM/XjBdBJo\nS6vM8yXUTpHpSwfFqMwtdQCnjxg4uPNCevymftD8JY4O37/NV0AODh3PZcNhu3Zb\n9Y4h2S/ODloVO0W4h9zK6OEQXDcmYiW6mp7PHlXnT1Qv3oSdpdskPAKmcKJU9a1F\n0aRDXNzfPDicQQC4eh8fD9JZd9Ffrlfyscj7JNg=\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAjZQ6MOtf8ynOAAAAAACNjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxM1oXDTI1MDMyMTIwMjkxM1owQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG\nQUQ2NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKjrgb6+9ImqqzZk\nhChHsCDjesdSPDruMCOeepk+uZjctWNEVK13N8x43v5O+E9SllauWnxKBvu5Om+d\nc/+KTbhzMpSSJNa3DeCsymLtAABedofEgf7Z7XgWF9O5Kx0yzE2ZNtJ+XKXujWHm\n9wm0TudbUt2no56FMvj1hcP4u6lQY5hwSd291cs3MaMIJJL2dXBMyn7yoIBsfOm9\nxug6y8/SG+Yc554ERNwLHhWimZich5QGERafXDqZMx72GsByO/dCArk2eDk24+Ap\ne7uUrwzYczrW13bJ9GOofLJQWoJY2eEHpQ5NkXDXmHLNLqMIKTwAhxLdr1t0gbru\npxcyF2N4k2TwMNWruKIHZfrDdoKRbOPBC2lewzZkNTPokwJojuSf1VHOrFwzJx//\nnaHDkFNc1b/MAf6VlIK+AWVNa74F9AVxpqTFhdVs9jWXDO6/uTP5dc9gkRu6GWXZ\neVSINhxdEQy7diTRYgyCBiyX4QGMNrvekyqn9nIUf+dbHbus6UD/h4Uxf6zyWUQC\nkl7j+COh5Hx2zLlp5VsazoKMqBr18FDLBPnTyV0nb41/EJ2Qt2Svt2cm0GlW6Wnf\noafcVi8plbf98jpHw8BI6ydQSke80naDZJrO2b6d4DzcqiVx4MBzx8DbIXXjrFlY\nD/vo1XhcRN6r23cjHb7id/67JCSlAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRwhIVzb/xesz3s\n72yaADCp9iXqzjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFTBiEs/TXF9fSi7coyITmGEquCPalyFtM+iSHQ2VKru\n9UX6nEujplEPYTQOAoTvhUlms1HwXB/ttnpzrVo+uOr9WNKkuynD8NMfQBZ2GOXR\nbM47CP57b7l1EvqpW472px21sE27YCpokVf2/jtD1ridpoREgre26CHrWHQ8hfk1\nBlbfwBj94VsX8wSCDI2O2jDHVJJLkhjDXv2BV5VNsCEwQ6927z2tOE1NuyhChUcg\n35KLz4sCIYS0YLVHfslUbfiXMw96qhJMfs6Q2tAKQP0V/a/5sycutcT54hvyQJXz\nwux1cqZ7UtdiGjdOxr7O5mWzlKKtvOZC5BXVgasE5J2UPiA7plG+5Kijrq4eLwqy\nujZLGac08BnBpj1UyUSvNfJ/dNXh0v8n/1QTStblT2ipLNki9nkcEVRQpM0dfJyi\nGRY9wkXy8Vlsu+KZ0HZCE8raCerWn501nzZjAUUplnV91pX0M+N/Z379EZaFS2a8\neWaCDdeQukCuqi8T2Z7vVtWV3hb+vFDknpuO0OHGQjMet3STn23MRAHnTwLDkSuf\nga9EFHShWRwdn4gpD+UXBX6OFSxUIzV6S3kL0K6DRZlY38rIIwxsBJQIjW0DmR8g\nizDAkL9jF0eFaXjEaVhJvCQnnGFlbSTipPETK3f1aYdt2C6Qfj9N2VSFAOlkxDx6\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQbwgKcEMPrzTgAAAAABBjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzNloXDTI5MTIzMTE4MjUzNlowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz\nRTMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK86o16n5Ja993I8\nXxOQYFeWZnMPTQeD45IZppDnHK6kEMPqpo1mmWf7ddfWAjIcQ6hqsqEWFMHNS65G\nfNbfwAzRB4FRnXAEPfxUqCwc7XptxVxUs8li6u/vgFmoP8clya3ng1QT1NDMUgCD\nEI3a6kfHCHkrPzDw0Sp4K2CvRTzbfqoH81/Pl2Rbayo742TFBvQU5d9bgiLuBXTP\nPK8u3clJlukPbMhPM5YltOAwBjrCKsFSv9QwOfzotE/KcmMf3ih42m3/woh3cLw8\nQO84Ojjq+4/8xHLYJIrjukPb1il7WVYe4JaqqZGFTp0cEmFjOB8ns1BLlHRzhZkc\nP85URScCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFHyODLqSi/vMK4BXgpOqWhkVljaMMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAmuXw\nuZ5tkOA9asncl8f64fywmzaGFujy1FaN9VLYmrucbM8xth1/MBXsh1kna9zip597\nHXl1oXmSpHCawuXlrRTefRU+8VoUCiqyXkUR0MzjUdOapUlVIYaENpr+zHgk0/sv\nKQiE6/qcnZsuPkwpcqXBfViiSzyWW4jyXNGkTZpHK+me1cmhAdx3onjAukxF94n/\n8ej8ep3RNaCX5Yq3jKPeR11txkpiFwyFXG3P+nuExJm60VLtqsBWJr/nxv5HCMIK\nF0SiXzOW8FzpQpKznMgTi/YUiqJlVjYRb5MtsvC1+sze4wPvS2fRpgWMJlVSc5pr\nZ8dXOMD6lqsT2k4bcVMp0c/D1+vtcfGiHzClJ7j5HeXlo6P3qJTSgLbyLbG0yEwK\nf0//PRqtGdQGUrWds0uwSnzoVaNbGGZv3vsrbbjzTQLqdTarHYEc05Pzafcg/iXI\njVbspuQt3rCrBpbY25/rQQZ0Xz2sam1sXMhw/m1vHTUnZLAQRSMnu5xQozHNqxFt\nYoh+sLCcXNf/84LB6p3+WNdiXkHPzxUO+WzjJk+xt+FeQkspE31/RY65p2WAJSLl\nAy9jcLUX8EtY+P+4llWVr/p/v+1begAZsLJrcwbf8QsUju2IK7/sfCtTXz8pMXqg\nWJGMGcU1XzIeC0tfbn2u7rs96ZkXcZyk4/4F+jg=\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAje0BL1cqHqc1AAAAAACNzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxNFoXDTI1MDMyMTIwMjkxNFowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz\nRTMwMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUBOPqTTYFxsUAI\n2or83Ti+3xps5p4k67wUpQIVx7UBSO9I2sPNJ3ySjg8gyGSuuMCzu/FBrnsZo84i\nqtMpOYpmB/gSJbfEBkNJBmrRsBv/jyuGonDLTQEVHzP17VZBZVe7+FFfOKP4m621\nfg5kwIGQ+McUracESqcjuLSBlXkSrYQ/GX2ZdYu228oquubN2ANXy+Efz7HjofsQ\nOHVJtzXEmQkd/iD+ZhvjZNQWjc7nW7TiWHuh7mVVBc3O6d9goWRrhVvZn26vUNXD\nqS6jUXk+okiKXJQrTFN7MXeWdaJmgiiyNuzNFAi/D323WIIYAPi2owODbuOq1XSF\nJ+bYfRpK6bu8b8QRjfhs19IZ/R2c87bDSs0TjwhH4zrCESQ6KTToxqKw0Mbv/nBO\nwG2HwlTs0r4LOTQK28JxQOk9GJdAzLnKGpXfAEyWH4jIcTVFBL6VPwSjIKzzVNwh\njdVazd/8L0vXmajPhkfHhPD/Py8qIYUhTHMPNC+Stl+6mMEZi01k6Zdc2jbjuqDK\nshZZxhI3yjKriMzzFdnRUxF9o5AQEJKhYUNTzt9VhH5mxSPz6tLKoKi18GTc4ICH\nW5Ym4dSzcR7hBBJrB15SCCfBUoENK3ASnFA8mmEfLeCYdXvxCRzoIGEdXtWdIg85\nHyDWLPwFXgWoAJUZOMkVX2cLx8sRAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQJ918h4MSMnR1c\nOzS03xneH8/eUzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAIxRO8hpSs1mRHB4sNHaiiqkPT/Wk4BOk/TkY3awIRY\n7OUfiLBVLs6qU+CH8TsQdaloLwt5PV/q85Z5bJnCsgd9r7fRtnJUQ+BvRVKmukmu\n1EIRdQAg6D584ng9VqCgaJQbXRkZG2QN2/KZCYrw4Al8aIdpBxauKhv8j6QyfR2Y\nxvPyHBHdLArBn/FFsHic8h3bm4BRQ2y8XYQsm9y6/GqVLg7/tsy65csFd+1XGhmw\nfWCZfYdA095W+Dcn8oeAqSa/4Nns7pNm977FAqlqhdTGkSErBfmqOYBtSS4g0pkZ\naFlHBvVSYtxuUt9Kimptu4uQSpzX8tJmsk0BCXRWd/mvJN0shz4yo/KB9g2N0TXW\n9Xecnl7Tu0ycESwvLMVuKqqfycZE7R2geJm/R4l4P94a8sb9egZYDGnCievcQGAK\n8DgKYMrYKkXeyNfhgqoTJKYgbnXnuUkkFxoSTvwwY334KULinrADLrLAcGtPE/au\n2bC9C2CkUiNYas5uW1J4tuRFE4hMWvWHyqv2ohjLgVYn7eQtfBfFzdju14nCqCJj\n18Si7IuRJXOEODgoPlXvguk75KcY0m8REjBEXhuL/Hj32mJlxFR1vAvmSEPInrar\n5TbfuwXv0t46ZXtYueChN0hZzaC/yweWBUfdStrcilYmZN66ZEK+lDknBNaXf8GR\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQdBgatll3kwegAAAAABBzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzNloXDTI5MTIzMTE4MjUzNlowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy\nQjYyRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK+8j99n8F6ckr+8\n6jPXNzqQQhusQau8hXYtXVe4+naeEBRX49UoFpogTq9vMXIBhZXYb7lPtfRW18Wi\nmmIOyEikfmDF8jDwUKY8rZOwu7vVvfRWheCNs04vdtzbbj2S24WxdvkrowGecwAu\n1GAY2i2SXXXQQHscnmLhjNaPsDGua0y6zp+qOKTw2eheuPsXU8ckYOyNkutoyNks\nPri+aVk8erzMX1x8/D9qZHLCCDZWy+XC2v1rAkMoqhHSL79q0gT4tlv7AKUvUxa/\ngI8vtqa6uRmgM4ZzRr3FkIja9cNP/Zj//h+VNQgOGP+8lKZ6IDgwtwtKuMstYoin\nEGHbzvkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFFxAPzpBG4a0EmmC+Yn0nkFCqFc0MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAZLx5\nztOQa2sNKR6RxEFq8ATJaeXX749UYu710WZE1Ec0BmNwlifBVLyxQ4DBMPIDN4Rf\n0/JA7jAcO5jErJOo+lN8dtEmk8ZxQQb7QVUEPPpMdD/Stw4hvC04TMwLjv/CEis0\ntSNEvHgnwtlHUbyzW5z361n1lYCe+78AfRNUGJjdocaEDc8muT8Bv5mJT2UW1off\nd71giTZN+k4cGgxAXOlismYMHjpmiYcB/KckbpSzRvNVt7aD7FAjqNnnRBlEEYK6\nzugQz2wsFBLrouAXrfdTXuDrOkAHF8pTxpyqcqWSI/5xLyZCf/u7YnPBKKg8A01R\n983ijCbr7F8jJUHLwnPN+f1xpIhmi/gLodSBOjmS85LJzDpsuaz30WShFnSpnIgJ\n2MIvjfxogAo/k0yIoyOsFlB3v9kZxKASP1SLaK5VP5HwAOYdJNyI9dv9zubMo+0t\njsjjruDAUFvDjhc3KErOnyX2iKaA236mm9e3X3+6ta8ObfK2zXfT9KliS26mUXzB\nmOalLEHqNO3v4IsG03KjQ5/G1mJGTt/qZ84//bH9kqVsTfWI132Cmv4A6lS6i8rB\nO6hFhzv6UMv7C6/Y67DpeUAHDAEjsOLfLfkuediV9/g0y0unhw+pMT3a4qAZWM8o\n+JT6hCH9mU4GjJm5asM3Gro4zIlRfKl3bu53X8s=\n-----END CERTIFICATE-----\n\n\nEUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAjitwd1vskIoWwAAAAACODANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxNVoXDTI1MDMyMTIwMjkxNVowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy\nQjYyRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCoDho+jCoftg6n\nTmgILV2Vmt3LprN61A910Cj9IDSm57Lz9wsJz7ZwNNzJw5214Vm5QogNSQ+wLkB0\n1X22kO/pGcwvNW0H4IFA7pbwTwfvV0nwzYXEUSRhutWLKO8eLdvfdM3C8Qz2JK8g\n5o/JMHLxzhJjAcB7SxCJCHYrYoRYI4L2l08MFgkyJcfk7wDyUgLh0bDi0D7yJbwA\nivhTlnDcr+OJgmNOqX4CY2zJxF1RMli9zYaICUnK4IV9SOCgodHEhcaS6SMIgWfx\nf9iks2SHSzSd6VGntsRC2jTOkNbFSCPpbPMGvDCXNdPLS+Xo00XHYJH05Bnta4ug\nMHTXAnnND9QtRyYPdFpnCjtv96V+eDP3ISxEbCIS70My5ClY6IhOW/ZcD8tVyyx7\ng+grrdWDz80Mh1SCGzVUPBeSWJntsOhtfNYG0BU98apObdVIduwSYc4eMi6dTvGv\nxHv0AeQC4POCTYCOpCCyzjUJHQda510NJMCcl5wuSc0boYxfdnMVya2Lyo7HBQVc\noKuq1lJNXc3S6wmgq7h5PFo9cd4YOFGBfSA4FJsDMoEiNAtVHiW5Wqh89/G5Y6Eo\nN6y6USy0cRb9Q41ju3qPT1A37xSBqoenTouOmM8U0EAr59D8W/LymapsE5CWgjyt\n3ZfL7YEL/QylVpqtdsxfIvDmo7S9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRkHXul0Od/cloJ\nH5877f4kZR3BeDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAA52a4DIfG5p0Mt8VCSHlcml01px7PHxKlUmkUGTBvsl\noeGYP7nyW7KQ2XZBpp2N0ZUgWRI/GParyrbaVF7sEbnfMMAXhqtQm6pcfANk+/WI\nOr0u1hmWHb+9oAsGMORn5OszoTg6jqy7JVOQAsrqZ6Y3K33k+8GUjMEpi9UkSX03\nP4uYKrt9pJlHQ74Jg+q6KTdnsSG5lxk8egRhEJgQc+lbpYgDcocirCCMdcM2gQQ4\n7szXEPw1tDph7Tgqju3wNJLn+XZVH7OJrsdxZbXHVvlGJ4wYAENeBsSjob1h30HE\nUNZoyAmbXCS32ik1Xk+1FuqM0c85edCyMhqd4FDtxDbCb4yoZE6TvACHeYuP2VXJ\nDh1/dc30ksntHFDxBoSSbRRf/z5BvyR70xt4Npl/nSSbN63ca8TxstEq8MTplcyo\n8deDlVqg7+spY/khECXM22vuTzkCDkTkSBPArWQg2YHayh5vlyR+FTYCLOCFN3vb\nzOt5cGs9ECQJ/yslmQDFyoj7R43z3B+f7TsgkxYxuQNuBAAQrReXkTLzBSLGadPj\naXKECmOKyysdwisSi90uVifIOWuDMhdSPojVBUTCMNapdtOWtWT+fxImyJGC0qBH\ny4VI2BsjaVKFwcPId7JdHRnP6Gg3rnz5ynSI5bcoXMxncEUbsxonrX1uj2ToCfc/\n-----END CERTIFICATE-----\n\n\nEUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAU1E5QLy66wgwgAAAAABTTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDcxMDIwMTEyM1oXDTI5MTIzMTIwMTEyM1owQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3\nNUNBRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKUeL9jRkg6dk3Ta\nIABNWZ0RmevTQerrzBaN+3em92A+tA7Aa/ubDt4gFnxxp3TcEBkmIsIR5F9PEH+Z\nl6tSg5CPb5Pi2N2ufjrGMeUTFKfausEXqi+GmTadPLzjvDi0l56s8TMJRG4+0tmV\n0bK9TEBHiuCdf4bD3bHdN0mcEla0vvZ9mCWrxlCVNyJpHk5/MeXG848VqHqGbU5n\nASWBjUJHLVOo3myvCh7hm7EUUNSNfdETEIHLO9oN/1E5zPI/DYQt1lUGe2qwgS0o\nyKREK1vjsWzaEleIwrz+p15lKhGse0kVrUKDd00Z3T11CcKJSpI882G+ogcUhZNW\n6K0XM4cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFIQLF3/s8HuVwQx2JVZEJMpFMCiwMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEALfHi\nlMOShim5ui+xXv6AE6dFQKPYXHiqTI0Nnf2m0qHJVTc14rZcRmNlCfUD5nmUdEkI\nR2RVRtnX2Om2hXTgsySkyM7uYfUcHpt89EvOoqZ3Vm+mlYxOaEwJVHQfJJe3oNr/\nKvqWTMDykfGyYlTOkHRFtz2mEoKlBs8qtFtcPnx0CoX4owMV7SU7DvlTtV7CMci3\n43QIPw+iYJ4Q1XfoZpXc3W4xweC9Q1eKrj/i62n53Uf4uR4JK5X0fwxy4OeWKNLV\nXo8Mxo3kAqDjDBVmO5af9EIXbl+lIiURNB6HNkL++NPZfg5ieg7sfv7mVikxKRDY\npJDNY58aK/N/c3FJB7v/x1h5SBnUJM/H2FQDyt2QCsZ2MJ3R15k30t7Il7EpPBAl\nCxjVIeCmVQ+4aMboUqJHi/xbhOLqy3iErnmxaZvUhjRTJzoHRbGPKBXF+ciNXV3m\nAEPKP0jriH7QtLLN6IW1auQfW9Z1GQzHKmLqCVqQ46Ql3IOHzncUbdxo2Jm/QXky\nBHbe17RLpjLCAJfFBI0J3nypwgBvNxHZ1ks7M3TYpJGz2/+7D+sDpAGHv8F2FyB2\nmMg3HsDNHqSq0DNTSnYVYOOMlIR9AFSvEDdrw90qxjv5kPiZoYbUFll0xKTtPvnU\nkLuivKvCr3W0FsX1nOgUzQX1Cu4MWcyK75Nclx0=\n-----END CERTIFICATE-----\n\n\nEUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAjX/w9/ZMQnzqQAAAAACNTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxMloXDTI1MDMyMTIwMjkxMlowQjFAMD4GA1UEAxM3RVVT\nLU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3\nNUNBRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVT5NDF46h3QRqD\nEceM60f8fnm1qpeArCK0jEYvBGbM2COoHpoR6aHr9fzh6Gl6QkCpC5+vTrWuepvf\nLz02vFRvjasn7lAh4Nwlarl6/GiraaJdbzkvZMs2dNkZ5YeAOm9SL4f59126WUsI\n57275QYDUO5ZhCfYY91bnpTJ9I3tL5QrfGvFRXfKv/P+2UCZ2mo/FPW+Ged+3Ivl\nD2y4ElLKyJKgsvfVUqGinGHhHq2rJ7aee66luaeu512Lg3MQxgYvBMOqyROgucdd\nInom/azP0Vp+px+SOhZXThwLPDURHdi/Wq4SN2NbBgRPvuzW+KwPI4fKdyjoOxbR\npYyH2qBF0FPQLJv4Bm3NArTH0qwX4oKvC0bZsBFB9L/UhDWp/gK8fBEjk54gOgmy\nO2u1tWd4fxhpvsQzeZSAbVQx40qZ5kYKXIdLcgK6IdAUQ+uDs2WpxAJhg4QfFVuD\nlW/fjAW2pbLPz2hyP3nl/h1b/HM7X+0q/CJ0aOJzhVyOFdNTuNNpSqqVGf7ItRLL\nZ32WEJfTtBMoGfU3noYwOcC+tEQp01w4P0S6ToCgRfIkwig4NnN7OWHKjRLROoMA\npp48i/qIstDEfh+sThS+xd5evlhYfhjB0A7UccYjE94KqwX/ZTDumlRHVyV+Q+KT\nFDBUzgZbj4YQdFuayJ9AQLmbF4CNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRl60rllVO0Pk8y\nHpB2Nqpse5+szTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADlmNDeQp94NaR0wHJU0CO86ZRESxa1MOlXzd6D5Aa5N\nsChpIwXPXU3R+BCv9CDuxEScl+oUzRfDJMozv/uTqCJoAxiCmynOE6aTIcRZzniI\nXmADMZKKlxscd0RZXJ6Y/R/tzj6qNz/JLARbnrYrm8fyRJasWzUffGfadvgOLykX\nuzvkjycVLFJAZl6dLPAuNz1VEiEfsJyn10A2yh9fNOZE6mQYDpgi+jELizxvaFJv\nKfaypstgL/p66frTn58G/ak43AbQkuMS9+IVBb3iRKHbLFsIU5HL1iUNzzcNEa6p\nECJM04poO2urCtzY8SfpX4s6RSrRflHetY1U8gvam6iglVj8ohStb7U0ICr/Np0l\nrFUI8wf5YAf3hWzwFR4gcmsmlhlqH3S4ezsOtU+KS+wxbe5LeL+8Hw2T2fqzWI2M\nFVn2kKh0jT5WJKCgdkgg3pNV7qbfnXKYxLOxUEbbV033K17c0/7UDpBV8CdocErR\nlaxi00TiJfZNX2Wz7JyWXT9bYDzmO52UkhNV2iux6FzEE+2IPzaCLtLQJBatK681\noueTnxkF5hcGMUR6FgPsh8xynt6rRKftuNQw+xfw1SPOlPPV2oYXVKNScd/oVWez\nCa/RD0lOeLDX6X/wXhYoi+1FYSiqmWivRdGRDRvio+pMtsSUzrCQd0CghlHER2DE\n-----END CERTIFICATE-----\n\n\nEUS Ntz keyid 022cbeed5d77060f2833e9d5376ba8bc308cd9ba\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsihWy3btd9PuQAAAAACyDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxM1oXDTI1MDUyMjIwMzIxM1owQTE/MD0GA1UEAxM2RVVT\nLU5UWi1LRVlJRC0wMjJDQkVFRDVENzcwNjBGMjgzM0U5RDUzNzZCQThCQzMwOENE\nOUJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyt9FG0XYvPMKdTF1\n0JTqEkwFWya1+VZEfqGwd2Au/k/CWrkb9wStXC1PRBDHUw/0xysCPapl9QmiVOAU\nRfMhyknC//W88IQzcY/dxym55O2QP/HDcgkeGGxSbhFhTPxbT7E4gADIrzRYHNUV\noLDYeefyLGkCiRYJ+dk9BW7Gygmm818ziJevB1pidcJg8qAW+4ORx5+VZB8fY2Ak\nsSfrx/UtDBWcC4CKc4SregY4RVBZQY0UYPDD7Wuwpcldr+rpffE616IHEGcCdTmk\nKNgPoFCGr/ua9YndiM2/m10WsoAnrYep0fniN6hHMGZR8kZS1+4AkphFULk04dfd\nwbtjKESZlcQfHr3Tf1/VVljoYhqy36yKa9yorR+VXUkY7YUnnbF8TBhHGEmn8AsD\nH5G6DfRYyV9ZBukzp+AmWfsvZSjdAgyGzCLDvN4drBr8mW78Xbgex7IPIgfF7Amr\nSy2tsySgSaDOxilDuByhowLe7H8DTkvx8MPA9vtWmQt21fkiIb4plasNYzhxaiCW\njf3f+x1XqfpTP019bE7U/Rel3Nf4UBzn7vBlEtTpSsckVYzEV3Zkko4T+leEDITz\nRsFxk1N4cYbeyQoso8JHq/BdXXzXw4IFfUqnKe1WadRuJTmEY+S0Nnj0SxXeyuom\nvj2gD2MRZLeSyZLrylLBpg8q+i8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHw0u/rB0GHJiz4G\nNSDf+FEpZ7AtMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAWmzjQqxonHglNbo7ZlNyqEiu6S018oOxFsknzq7Hz+6K\nqN2JwWs7PO9UXUBfm1eBA18xF+dd4ss4b/BsKGfSrhEtNdx7kqk/UHW26CCabZLE\n61NYp0OZWOB91TIlaw2iod65u9Ip8ugWnRKi8qPo+A87xwDQJzrU7CBquThpGbHh\n7fyV9vz6AxGo1F2r92yPJ4r3onF3S+hlbQHFA7UUqS0tzv/Gil03v+DnC7/34W3o\ngPlHzN0bM+jy3e+2QzaBACuIvqJWWKj2AEHM3agrPzaBVogSHypSblP36MayDj9q\n5fHjMrdgK+4qmxauKVKK37H2LJER4NVkd8h0DACUaAM0vUwNSBcxkDKP1y4LieJ5\nv62trl1XX67GZLAKVWHAnUyNiger8iFYy/58s94yK4C+G4b3HXdYRwdISixKPFrG\nHgXZRoWGbUPHaFPffWr8GzttcDVnMmAkF9+YJGjJfAyDIsBaNFs4Kpp5u22JmZXh\nvTqSDmG4tNlCS5DuViFMFZe+VABNZLTejy0okQR6YnfIcbCRq1sQ/QbJ8VxzmrwW\nzvyZZENU1TdXhPn+JdNK/WmaT0z19Khi1sEv/xnNyySJyxI7NrkM1vN/hbtt4cpa\nVz9gr/gMzHQWfCX4iU1h5xWuNVpBRU+qAVZJVTyX2y7NyBtzV8Vg1feDOhjNFdU=\n-----END CERTIFICATE-----\n\n\nEUS Ntz keyid 03d1cde438ea3db34d943181c1cd517d688062ef\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsd08uJHHlceYgAAAAACxzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxM1oXDTI1MDUyMjIwMzIxM1owQTE/MD0GA1UEAxM2RVVT\nLU5UWi1LRVlJRC0wM0QxQ0RFNDM4RUEzREIzNEQ5NDMxODFDMUNENTE3RDY4ODA2\nMkVGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmxYZPVt+k46N5+qi\nLeCAhSyIwVi1k7AU9vkG/yg0hA5kmR0wIzqTMRyfl14E+aTogCXfwywv3Uo9FSdW\nSvfL9CmMDrZI4Jtmhh20yZBzpVy45lDIVKp0WXP5MlP2F4errPLp9700+zmi/+tE\nA2E11NX+lQt0kWz4XMezFrGfXgVlDwqRG7Qr6vBxkapfEkI6hlO6iH9snkvNk5pR\n5XrYhyoDnAuhNlYBdkzmA8gIof8YiIhjSDTYINshL+gO7Avp15OQGk8t9bIIeO99\nwWXMwDsOXWuCHgT+keZzP5ukqvSjArGDAO1SVXt1GSL5HtXKETqbZ0ZkqUL+88Rm\nVI/B+E2Vu8jiWGN7eO/b0uN1Io5Z9C5OSV4b/sl7nnZ8mzgsbauhC1GYa5/vlNNx\nls0Nqlu6QoNLenpx+0fLxjes5dVHgvjTIR+LZs+OsXrwtWRh/vS2FxD7ZNlKSBHR\nanV4PQfwuDG/6LbAA8abxgWX2XnzT2KHswEaJbSP7zf5Oet83/gR7ccpsQKpPhjE\n9//ipuCSNNa6dJ7xT2sNVyUfusqG4A2wkz6oOOUB6n2DEQAloaPvMIUp5VBjGsWu\nNMKucDrgcRdTsgbT3yBlHcXpkP5W8Tnax+dq++0+0zff/jDIoEubgNKT2Ztck/8G\nQDDh+oEJB2LPoDjtT6Fmu7mX5KcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKXvxE2EQok2iinW\naEZE6tvbAMTQMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjeckwsYACNsO+rSJI7NFfVNLeSTGwaWEVKOn2mTrT1hc\nnSsiHPkTkMCRB+XUFTXRDRFDl3EtfglCd7c7yxOabBsXmE4W5J1fXy9daUuPY2G+\nIujsHUwKQki/VogAb27hsQVZ17hTxaeaZJDBP5MZbJgzLGyeDkYHHxSdNDYxVvAS\nN4UZtdqLxAo4nnszrPCh7jzkbTNB+EagrO7xSllWG/guNZEqlqZj00ypbHU/DTPl\nC3vW9nPBrVJvQQOkS6xWKtnTvu23VsbyZsj/mWf3DF7OMFWwf3wUye/mQsiLg/Xy\ndbaNrlytXzp3Gc2FlwEGivJCPDqqo8M6zqWd7BuLRpNOUEtDmdNawHcBCjSba/yv\n+AXwqIXAWeZYKRDs5K++nlr1o9ohhDUvxKtUl86ml4mNEHQvI4AkPQgdatNmgLo6\nxCG8YEkLPAu+y8pElLK/zUMdIIiX6leD5O4F81lh1K2h8hw8jgEYl1p0mX2loELJ\nMgYHysFe+Dnrry+vLM6vC/5z5jHP0kpEkUhYlbo2NlVpYSpcIjjDKqYYtkOaAvVq\n1q0iI6UD3nSqyruEWSqN2Sjy9BCIq1QBKcTKkFTONjLyI6ldBn5B6rCJBWk1rb3B\nRCOBKo8OSa/K4e9xRjJTk3deSJ4kpsPCh5FWwGRXLywxdX5o3jv+HdvyDTCegBE=\n-----END CERTIFICATE-----\n\n\nEUS Ntz keyid ebb2f4e312e6529c4ed0cdb68228580ae5203d45\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsl2ucn4ZGzTBQAAAAACyTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxNFoXDTI1MDUyMjIwMzIxNFowQTE/MD0GA1UEAxM2RVVT\nLU5UWi1LRVlJRC1FQkIyRjRFMzEyRTY1MjlDNEVEMENEQjY4MjI4NTgwQUU1MjAz\nRDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArvXdfXA7YBKeYidc\nzLvZKBHkXivf4Nz21u8y51OFdAB3GT5D+UXeGDNKs9vpDWceZ3Y0eksEOnmVzWcW\npnt3uyg0Ki/ri9QYoqlWwFEuIKI+SOowOL4aE32Sp9N7F0Mt3xYFqosHMgsRgYXy\nbuYhFXButO6kuPQn7CKo1YUa6qXmfqQ9sOSAwQBwjfWIqNV5QKAwlSKg5uNKqtUK\nnzVeRIlFXnAMohloPbw80u7ZV34UtEntB3PPFpJdpn8xMOY4QQ0rlPvj3KL/ROMW\nE81YtwDAAnnDvzQpZ/W0lPpkbErGmzBHtT4WxYwPEmrR8xdlR9jPv/54h9JSm1E6\nZBvs7PPB4hr5rKbNjOPfKHAUxGPlweAPw5xWEvzVbun1NS9l00PJwRJFxunM6nEO\nrr1urSO9aODt/UrYvW4Fht/syGNLax6DV1XJbR7XeASseMnbSPN+Owo0JIZxGrvf\n/snz+XXzgkqirLgC8tI10v2nOPhKqwfUBHIf/MYdul9//LTGWA5nthZAuAHCzNMG\n5w9HgJj6l2/TqNVL/0fjyjf+opurrAxNf37xx0FC3t1pbqdavfyO4yRvVDa3ym0a\nXVhXm4f11NRbYQ17ndDPgbFojAqtsmhEDoVKuYHRzon7+YdtSi0lGmnBDzM96AUa\nPexNqJv0UXy3jeuvDrycUpHckfMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKnlilf+31+yXz6j\nyeSBrxhnLGtXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmyqS6qavV5Gvg7Mk09qgMQ5+e6n9Q98zTkyQvp71EnJX\nzZ84zOudX/qFiHo9qP+fsB42fe2eqYsRpHdkLLdTiBSkENghiyF6pjPy+f5+YXTq\nzAsE7rkGNhNCUiz2Fo/GdKQw2HB3+fc9oNn19adGldL6JrrEGUiD9c62pMWV4S7u\nAnaCB27nfcwIa0ABBaiaHqz8mCgR43bx9oiHNrdi4TEdX0enEP+nRV+hzTEjKNxy\nqdG6677D5ZRt//3bW3w9Xc571fyCSkAAHZ6gmqlfgiIuNyeeLUpyGC2F+9ARAH99\nkBNBFiMQoFyzaN8TqqA7q0a8DYTJFZA0DlTle+bRC8FlEtBOvRKgDPwuL3BL7aWq\n0pIaqG185Up1KDJrNYNvNwDMsXADaSS9c8WMDz79kdrxR0qZ/xomgWcqQnMWN7X6\nbfnQ5gkUAFuHWfVS3yayANA36h0oMdteFRzORgZiAR0DxSybxtaQ9rYIs/oUVgGD\ne2+1pdeHR2lIKJiCtiC4osvNwJXWQ5Iitr8PxzQ6/PArtvljJS8c1AXhelo5fYFs\nfX7YG2nHoZDFy5h63mYGIceJvXjBaVgvjEueQxgNNsRijTfH5/4tGYyvRmwmhwuI\nHuChptfQvoo3rnR7DmFpPJHZRa6MYmMfjlJ2MoOJIb+pAFfv4Dhf0WiJ11KdAFA=\n-----END CERTIFICATE-----\n\n\nEUS QCOM KeyId 79100C2EA35C4FC14BDE159B56326FB731D1D512\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAGaJjZ/eOI6nzgAAAAAAZjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgxMVoXDTI5MTIzMTIwNTgxMVowQjFAMD4GA1UEAxM3RVVT\nLVFDT00tS2V5SWQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx\nRDUxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMPaZJdOrwQCfJ6u\ngUp+iHNIGlpxYuJnNBh0fcJajgyYNTVpHt0C5Zsw1sjQqL+sAZXLSNEs0vp2X6Og\n+doBiVUVBdXRh2hrbSsI3NRqWP6qcdxg8XJR+rus/9JVz6JzuIEFjRTNIq7JJn8L\n+/JwfNPEjF1NYLm4uS6H1m/5A4KtwG2DQ2ouP4Qf4b0RuqKPdQHs1jhXBtUTAUYR\nTTaZHCpyn0cIQT4KHIDc3tP4xLkFuwywdhIA7lg3WFm5h+T88+LzH8J82mtGPEWH\nRLOYPcb8fQcZJVcX+C3WGcRBMGVJ0kz63kI60mjmvkZZ5Z5rCT80g7ig2xwiVN7g\n8F8LLNkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFGOvUFZBSJ+Z/7QGuzTXVaTXzNtBMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAdpiJ\nbMsAALIIbG644A0Izqwi0PlRcOtlCHpX70NLfVKqnZHUzF6wTr5JmDuN1ljUOoDd\n503M/3md9JXw98nBRWG+BJSVK2JVQJHFwCLh4s70wPPWsRJg+AEjXnHxww/KKkcs\nAPMcCTVhVRMNXwH7YQqDJsSCtum2Oh4UVR0uYWN0JK2vKxPUT+zCX4Xts1PZ+Fhp\n5+IOdSON08FAbl+cgqHbLdNwoHg01dqSpsSl2HElw1NvUE6CrLQaCswgu3T/Ydk4\n9Lg3AZRaMg69ol2g6QuawT3eZTUKc8T6FsDVtuwOW84MPyqHDpBx383JxVpZ/Osm\nqoiiXwEsvXr4AVgnj+QJ6hNTB1m6dMIfWcDOdoopZXV5cHwsmgP/lpQCAw+BMn6m\n+fP4ceAlNKP/tVLymqp2cLL9hV/EhZPjnp/Q7T3p9N/tJRN5+cNpN9V+hf44v3+0\nLUKtGLnCHs58PL1dZ7uAT5XT3tXe5VYy8lGpgGeGnxwvKdmCCkPArZWYkr8FaHMI\nrU/3W8vFC1Ejxqnv1D2/kJ4w5m5LeMMtulg9zN8regr55yEeorQoUTNo8QB7kEcQ\nsbQ9y9zsdZYUBKK5f3hPcGSCzS1ruRjR4igv2QM0AmvtEn52Ugn/Uva1JEmM3mbe\nH+R/zjmqvKOz53+ezORej/XmG6dn72+UXk0GLNk=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID 08CBB05CA4510B2A73299184EDDC9CCE42911211\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAt0qtrSuQ36cqgAAAAAC3TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYyOVoXDTI1MDYxODE5MTYyOVowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC0wOENCQjA1Q0E0NTEwQjJBNzMyOTkxODRFRERDOUNDRTQyOTEx\nMjExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EK0uRm9kplSrj05\nAghoxYZrhF6zq4Sh7YkRyFwgl88bkimSwSBEr/tZARSdp6mzOrXKEM71OI9lwCNb\nbiQvgIFZy49l6Hxmcdj19VfllIVyocpqK7q87VSyGfUuBbXqut+JuCcCCnJBBOjm\nUVrBjJni9P5mSQOziwYVeVvCUGRVIFd5xC2nuODWag0rJrr/Dn1uS6cApKd+utiJ\nX3J196AsDrhzs7n+tjVOxdj3Kk8/fmj0k2bXP0bgyXkhPsrBR6LE+/qLt9WwMj+E\nh2lM9KU49e/eBEEWCgcpMIC+xwyyf3Yin4Wg4yGmGNfL0zoGK4ogYsMQMbeJYYjm\n3j0gP5Z0zsc8rbweQoOVEjaB5Z3xDGBYBY9QOT2bSvpjlE4E4PNQLIYDl4PHfab7\njrFIgSgZnkiHWfXlCUISZ9w/eJKG7WsUTVrtDtVzV5c+NJ/mpkiOkpaml+614g1L\nFpUkb7BXl7U7ZdTolyUr8/UfK86PSQwlAR9W6QKakxVr74+Ki0M8h0OwQCRSzfQq\nWySHMUinzqP5fvZ79r4fvrdCNrTv5m16MxXRSnv7ecSmnmOoHIsQvahNe4hhR42I\ncpJ8EGP/HCzxy1atcJ2wStcbOoVvlZHI9vwTqF9Zn8g4N/dvGoumEq3suL1hff93\nCronRT/loSBAgc922EBQmsk+i5sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOG19Fwjr9WvIqK4\n3gKzkIAMW/gZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAOyLYuC3xmS5TpVubmYVAgv/pYgu/l9D2w0b/B6zeAk0p\n4mzt85T5uAHjn1U39GWgYGiRBAqBMwWsw8VkbNAWjuHRmcOIilBzaWBeVhlhjI4W\nMGBU0gtgb7EA1lnZWeJ4ShcgVML3RlJHSBo+bMQc2zX9Rg51crX8gluRfwzeh+p3\nVmP11aRzLHa+hzomCf0ggvFN8ynZUYGm7SMKnLHg0r1Ltya5/hHOhkKFpHZTUbVR\nfylxPyYYe7mY7ym1VFklNbgOU0X+dM8w9yaHySPZnHXsYvWl1u+vLAY1S27CgaD7\nRhDLEtIA/JTvmVwNJjb18GoOlpJrL3TUfGUCK/RwBgqBWjqHqZ5cH6rNkP123uZl\nFxGLdWdCG96vAO5psufExlYnD1GCEIw1wbqHTiRgL/7HF0ZtzWZG+rgqo6CNuLIj\nj20gm8C2P+s5ajnXf9tQOdc0t36bpY8nP1qEhJVLPMFf9iCvJAycDVRujzpyq83M\nl3SqReUrLCbw4qGz6RIv3LGjoqL6OP6mfzHsvkiki2aXp0+tIyGANzju7Ewr+N7F\n6mx0EI6n2DR6u4WZ3mMQOS1K+BkSBAdmUPa9uTzWv43PaGyJFRs832U6YbjkiLHN\nPSwqEjPs2BNFbpmcUMzqz4u/hOwTVkCMmWf2KfQbH9Q4yzeb28n7VF0LsriXEf0=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAQjCmL7EEWKHxAAAAAABCDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzN1oXDTI5MTIzMTE4MjUzN1owQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4\nNjYwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmWPfZZEgPJQyEQWh\n4WgoZ31OKbtV4gDUfYrzObzQrUVZih0wHqKbjKvlb6ZnEryf0ygnZbn7RUggkftJ\nnMzjOn4uqoysCJMTybG1C12HHiSFQll+F88I8gtPwSY436URV4SkH8JIQRyKH0rQ\nU7DdCEc1+Pj8sqhOj3yg8Cx6JcSFEpbyGyq4mneJ/5+iT30vefqXbMv7P6tEnfa7\nix6GBErlUyo+kiqyGtK0x5S7I9w+oNNManZHcVYGnbXVnowNWPEa5/sG4VIUJg5n\nVhKJq2uK+5qTetfquYowhyC2Y0xJKBUQGXAGc1qDZJ6udReihV/ibCYz1x2k9EWu\n56w7SwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUD508kav3b7tlXDZCstZQRz0yNdowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBjYN8w\nIviKh2SWtsB9L3PEA9eQZJPthcyn8BfgefQjPTar7bmT2B2OV/0IqpIAtyT4nlgu\nW3oI6M8YlHYYKF8vDYKInC/wqWkOLNnijzYcJIkMAEHixbHgNqx9E/qQGk9uCgLK\nMJhoENN+HTEzOOeJMqnpOU8wmePD3ejwxV3oJlKZ9jX5D9LcuHz385eI4OePgIVg\nQbE4gLtdCSzeOJXSn8K1vJgvQctnvEmtWdRGH61GQ0iM8423rC4KARZCQzWGJ4OT\nH5u4jT56snbi62nVEs9U25cJXpspCiGsXKJMytF8CmfkPmw1dotiWdahctCOx1wW\nBUdyZQZp4FdCcxHRYknFBd4KnqbnIhZEFQFcBLJVOgm0JhXV9j+lQo2vi9Z8+2TM\n6wh34QhEZhE9ZjE9eOMm9r9syoUqahvx9ZbczHWDoZtzjbCgoz+B5/d6J1Cqus/F\n8VQ68JO1YlWmaPVOLQ2ecaAarBYafRI/bpYoOsX8m7C8nTTPNwjIJ/1lyOdTQDHF\nuHcv/Ck/TL6dI5VaU6AiIjZyMLZS7SejkDwNRj2APXicrOmL/toDqYmAWY5xp225\ndClh/e2hWPv5LbkJRUeed4UYqlD/EPCyMvBZkjiA4lzoRXvu2r1tmuQ2xStJ14Hu\nNOb1l+q11XUTnPvxIxAFEq+NOZGQZCoj/SkKvA==\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjn5u2odSWRHfwAAAAACOTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxNVoXDTI1MDMyMTIwMjkxNVowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4\nNjYwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2+Ij+YaPqXGfi/l8\n6UUtWVZelvTdmhLNkBoMtQO/Cb6/91VS6DlMviooiHg5p8v5TFXSMZY7SKLz9tMa\ngX+QYqvsWsegf4EyJ5spdX0elsX6DnzgYJZ6ypS65rJp3cR9u9PEtG4Ahh+dJeiu\nxxCE3MA0JG73/N09MnpDltbIe/SbPaceuk3QOz2EmtElIl0ARLBZt0DFo1NTr4+e\n/Y8eAtNP9wnOxcZxXOnoerVrpL8L2bb6JLDNUiIdfugVLx5eouzTqAJ3uVWaz8zX\nCCCl2jmaMHaQN6dg3xgSZReq3UjVEh1Mg12BBx0YgUBVYI+jazQe1ebPUnN3SlBP\nGw85ww0W+btMd/ZOrJz+6LtSpQoOm/AN7/tviTR9R+wUavQK4WBEc3ugq1uMQ6YF\nQmFGqhz17CyGhSGZ30WO9NEe+82blDLgoMxPra5Ei4Ynkf5gn/JjMGxdjbyr1PWi\nsnTo1JXy1gOLyaNS52MFZFDlCmqgbFDNN5iohwI4W2wCaT0flXRNRnYqnWLUxxv5\nMaZR7nvI5G46z09PSYr1TyWTIwLveaYnvlrndLfXqMGuVYikx023YvD5W79HW/7M\nC4kZZUtv3099TZZCDSqhvT5wkrrIWdUdOphTdaYyyHIDRl9cE6Tbx1U1Ig3GF4W9\nRkv6HknC/h75YolWhN+g+/2TpCUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLhf1WfKksQOzwzY\nH20/A1VvOKZRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAQar+KGz3a1Ped8CAUJTZ20aOapOpEDcnH/Vw8ajPoUWG\nKt2PuLXB5s+K+jKhS7ekvwpIy0JjccGWuTo3hA4kOetYzj23qUSSWbn/2xi+al7n\nzu+4QFOvwZv7Qpl+nQUrcQp6ekTRMcrwX3SFqeK8yAytV9HpSJCIV4bXxcnmsl5f\nE9wQf99jitWekMJ1Ux5oFysDKRUDxYxmPq69SjJ+WYkLhMLZkPoCIpCNnLYMTeEo\ndteCwzbCoypS5f48j+NL2mrbwHo8V/qFj/tiw6E4zoTyuhL0MCpKlKk1LH0Rx2gf\nR6pXQwZweYy2O11X8/PALMXeQZn23VWK5BPKyexpkxNI8F/aLv37qRuS3klxN4w/\nwggKgyXxbgrjVYWWmi2iwKHu/iM7aSID/cyK3bRTjYSmrOAeB+XX+cu545q3hHCh\nk9YCHv7bKHz31GJvgHXI2DUmDMuE7buV33/VuwCWlzLnuugptRpRgbsE0SF2NG0e\nk5YfllNfXJ7znYIcOTZZrsk8U0pnZW6/pqw+2rKnYwcX4VvaajGf+7TqoZcIbrJo\n83J2megARogm4TwHK3hJ2nk6vW/KXKCo7TTM2xPiUZs9A6zH9jLhEV3hxf2ees0G\nueb84AMx9EqpO3kBsGRon252oczsF0Gd1FtOneVG1GtgKiO1eol8J5Zll1bsmOM=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID 662D8F1CECDFF147A8B6F0EA296AF7F24CADF9CF\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAt/MAwg1kiPdsQAAAAAC3zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzMFoXDTI1MDYxODE5MTYzMFowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC02NjJEOEYxQ0VDREZGMTQ3QThCNkYwRUEyOTZBRjdGMjRDQURG\nOUNGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwnBn2oPMuRmIFgLl\n7An4G5qc/Fn+itWOP0HAemugHqtpHOK1q1ORz8noWBwiscKYgFD+frk4/nYYk7Ki\nQhoshvZn/ySqAgldk6H6zyVSs51JQOz0DhERHIcwX0ezryuZbxIqKOu4Krch502w\nHqntc19Hvm7MXUPgqGOJopnCBxNypCJsvzy/z81Kl/Q+kLHI1UomnYDfm5g2NYKw\ngJ2/pXJOLTXoO8GCN2ayRA7cKp+lFgs+5+hISaWQeOWBfM9o50TDAig6hP8yfMG1\n/8Gz17bTAZfK/PSi6q/RorDoI850opGQ274lwCOeUil2Ryu1RV4LSs1+WSFUKuB3\nhju6mvWWKRX1GqqGoEH9QMZN8oRb3UIsuxOWOIPYC6vpXNlcl9ia0axK9ggl0X/3\nciQkhUQOmyBfLsMPfQcX5ZiEuF4iCMPC7/ZSX5P6ppLGOZWJ5nmhdBLHCkJiczFk\nSJ4gRMP0x7eczG69YIxqmxOXW8ZSwlTcEKWzEtmhpuUUtLskfmfDwbamXOGb9IZJ\n03lP3rm9zuuz5JYeBobBVxxVXgxIei+Q+YgZyPdnCT2XmAn8QcKTmrdEO0o/mOSD\nf0OKOVLCEfroVtAxPe9Y4YkVMNibBexrNmVLAtG8w/L+D0Ts/4gfE0tKSNGs23ZH\nWK1UJ0uWxhbKpm75d76f7C0g6okCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKPMQ0hh00kg//1Z\nZj1bRHPyld9dMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAIQntUhVmHC9zWlLnrT/qeFwWjHSi8tRAxDYoIj/hbYqQ\nUpFlSyjJAixnOifO/YQmHbW+43Vv2vXDN9DurMCdeojD0OuB1ctz3YFOJ7k7spTE\nmChENIrIToWC1O7kEse5gSPB5DEducKDxARaw+9ee2DkWvl0Wh7TJll62ovz/daW\nlmSJPpTkkebTskTebX/zWCXmEJ5prgTToHejlDX/LbiGjWManHKWustHFY5jebZR\nFT9ITAT6kR5zfS1WEfCfiyOZQg3/Izo2SntsnHtBDKWolxkrv4dPSZcWokARtS4r\nDK5MeaJW+mlNStOLznhhdYkMogO3ihEmS44j9g7kzAwGEtHR9ORm52xZTGthx1nr\n6f1pmEaUJizB5UFomqvmnxI25t9WUO/pAoCTpF1rW1NWifePBf8s0mky1xdOkPfC\n5Gbr+HYiIi3kUaEsFTac/+qDPYgIJ0mRfPwO8GtnXB64fYuheWXVgEPWnzViU+4Y\nTRSrFkr3YiNCwr1446/PGbTtAGMuu0XbZJGiRPYbmTWIgGa4vOkPUe+i6Wyxex5D\nkf4tl+uqUARGSy7aM6mWS5FWV6yNVyne9N4MbmZHiuCPJ4oNlMNEi80U1Xsn/5Ma\n7Tt/3fyLobcOslYU7YB9zu4MYL7yhPqP82Jqm1Mc8bZFDfihAchLeR7Zhh9ev0g=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID 6B2780800A941CB47EFBCABDD8D1F01D529BF36C\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtySoWzQjY2ijwAAAAAC3DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYyOFoXDTI1MDYxODE5MTYyOFowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC02QjI3ODA4MDBBOTQxQ0I0N0VGQkNBQkREOEQxRjAxRDUyOUJG\nMzZDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsDYMuLAww70CgUBb\nB/QT0EiBvwcE+bq9qwKi1cYNrgnpgrgJZf7dZUGoyiFJLs+r481elwToABfbHE9M\nfHW5aTYjG9iKrtSuzrEIOnHFZVNZZfo5UJc2A6U0bZ1Ik5p3llKEQSV1Gi6rngN4\ngpo0KTRuuyVAO5ovwHWiPMpRj42IQz88tdK+T5/QengkDFzXyY2oJrZLyfWJ9Aib\nn2e7ncEMLkcKdBUe/g8Jqtp/yzD0HP7AlMb6Xi74x5uVPIuW+Y0gvhBBl80u3vnz\ncUpNYQzB+4NaMXzU7DaFAsMaW8EGMBCuAdgQ20piyJkDkHVs9hW29hLAdQcQQQ/s\nUAybHqHf5p69E+U3Miv14oRXOJdabVZg9+zEIrPXm1AqfnCG9gWb69n0XnLLz4VM\nGDrXI05Afwx7j1+jsXhL2qmVexrkz1Z6fyuFtidILmgCgiGdAY891YuPWGbV2sGp\ngwVlX30s1iDW+h/iR58nPy3kuOF1cQfvoCY8pv7zeydbPmnX2KRibwmorZTiqd+J\nMw+6gvynIhW+GHBQD1RX7EoGF+mtTQEg5gMkyYRGi1cWD1adRWkiYypz+GMBHs4/\nzaQnQvpeAMBGkDrNwWWmohnTFVoFw5R8s3K0eT/RSySl7xVrBzLdWlrRsbhrtxHO\nklpFFKJPHz0FbrnUMBku6DRUzxMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCBY05FUrXOCUvlU\nH0wnnkh42EqUMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAgqTDdvG9I8b+3kc8bao4Z29QjZ4uZdTkjP2q9GZB8jHf\nfkJTUWrDwWGK6/ckcZ2nsk5nMEOKINR86kKqbkQAAB6inKi82J1gnoODrvLD7c7x\n47qDDSNwDM1Pe5P4RmBUHoIDuZiRFUp0yAincXu5D1izVlRwVCM+VdiVgTKZ6Smk\nW2Esd91g93MUTKi56pH7hB2AcpOPrt/qZjLam2cGaNn0dbs/5myhtll9801efGmF\nXapn/4+ZUh9aJIqE84XKkIjfMixaPqtew59B4XQFyb9rY6wzuPbmoLnkEScmVkqM\ntzXpdK9FDT5N9AfgtoEgfhkYO5EvZqa0UsKWHId6xtxZ9jaaUTmA2DcUbWM/Yh1x\nN/x3zz6v/GQnK2j0CCdWG+5aKiRIbKH6OLEGj6dW7ExtFXhRhJLTIfFDkxoSgZHZ\nBjWRDPk3H/5ViTkBVD379tDoDo52UhHamoDokVkXJ6pj1pQSAjl9SAWzzEWEiFmG\nBisH7cxYZQHWL7PoKH05cg/Dac4A5DQ1nNfvzqgyDo2zl8X2YwNDM/rebEaR1cX6\nOKTvx+v7NF8fAPmMET01czBWgKfQGtj49NEXCgtw77d+sv5Vl4i7DLd8/QVAKSeL\n4xZHxxNFdM1WZejmXPeycWdrgSAwmuHRuYLSJz7blCjiSS9WDlK/SkGPO1/JxkM=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID 9DA5C72CA00BE14B85B3E535C8B07C83E85BDFF6\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAt5MuegjmoFIVwAAAAAC3jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYyOVoXDTI1MDYxODE5MTYyOVowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC05REE1QzcyQ0EwMEJFMTRCODVCM0U1MzVDOEIwN0M4M0U4NUJE\nRkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvgG2WQ+UWfdeFmRO\nk/W0eJDWAp9Ov1zwMNIssrPKLsWP0Bi9AcdTVAFgJABiPka3hCf2Fhr2tzcyNARq\npzVsT+pU/JOtnEAasVf7cG1F2XrmZs68YRzNWhgOt8IX6Xg/KnCImAiGQnvLWAcV\ngW1RSH+9nAZb3w9ulsX8gJXZJSQ70f2/gsPOe4z8/kNzFpxvXYKHRIvW0SWAutzW\nH3mPum2TJj4Y6c35J+WTyv4FYrZ2mNk5xel9T1BktdQYTpG0vGmlNIAbPvRyiTe7\ny0DVCsttuY0buzwRPDKMcpKhTVVTDQMX7GerPMxRCRWMZ7ihX6Z1luSN6G7yKIyE\n9i4hF1oqi5kQgmd3h3XeyW1KhjJc3wCEQuD7Id1Adcf70DQ56JyPW+ZbDYJzXqsh\nVWSBad6+2atTkdDU7kS5QF95iKE2qvYa1XxTA+rjCw58w/XyH+q9uX4pZoaCMVeH\nEIE11G18OPvq7fKuuXMv5ky4LyZB7i+uiBZgCZRiQ78cQ+Z6OwbME8lpmdFacBvu\nqw6MU66yizNtCFhFmx7k8qnlrWEQDXRySsD/NlV5QmgSrgCWfi29q2lrIVLhHpzU\naFTyr2e1sck84VwSKER23bEuSIvpaFcmn1NTjJS7en5pkAoW7JnYiiifTMta5uOq\nD+gf5EnJXzHDrtl2iTyYHBUovA0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCGqEQN1izKsPHds\nuSSSimVqqH+ZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjaY1gfoPF/RKP+kU9HggH5V5mkEyw8ezxV8dNFYI81TR\n/WxVyxSmqUfSK6Nt1HgHGysl6s1mZGhDLufxrGAf+GqFPWdvQM3f6eTIpo+1sRcT\nDdX2vfqaO7O/EMXWrg6ePjU82YdKLW7apGyVI0A20L3rl5I3xwb8RtE/45qU3U4N\nvHs2oUtcgoyvZolhU5K+a+g7v7yCmP8L+k79IpHXIrCdeyAWiJCaOAKULdNbS2qM\nYnK9Zw7CD+h5hzKKaRzpHuNiDiNyCHAQ2CVJ8xD/NtThOPANj+allQe5uUVxdXAY\ntRHwKOwda3fXHTHysUwYordSCrBzHqjF96QvB6jhzG59zzVe4MOtiOAt29p2k3rK\nipnycEzDldM7LDIAJzVpPpnGD6UBu7kFW8mzmNIVgbjZP67VuZCy+p5XK2eV6rYg\nRm55BSn8qu3zl/4k0cvoFfc8az+E5KX+2mKSALtJxBnoW/bQg7OVaeiIS7yisySu\nEwmq2f6qvoRTIzTv3U4O0VzWBzGdbJ48tskFLmS1FSf2Nr+r/x1+MJhpOyh3JErb\nkh2TkHsdqvO1p1BSE12Ojnuf1QkPF16eB8Mt5ITITtc0Uu1Wa9oQE8rpM8f3AV/e\nRPoKYf9Ijq+N3wXkN3sTCIwsLskWF85O5A1LhnXVoo6JS/vHWVgCC1/N+WhIhGA=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID BD963E9AD574AAD94FAD6CBF416DD85B4A559942\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuBSL3BNOU2C0gAAAAAC4DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzMVoXDTI1MDYxODE5MTYzMVowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC1CRDk2M0U5QUQ1NzRBQUQ5NEZBRDZDQkY0MTZERDg1QjRBNTU5\nOTQyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsl4kT0dH1l6E5TTB\nQSnOPtSr06sS8OxpID1o2d0Bjvy+IMckQZvDGOZQfY1CIrPXYuGDKfxnohjX4Lwg\nJSRPP0sr2iVvWdlKiqKUb0qM0m2P2pjSeLaTW4cG6IUmi4GIz18Y1Wn3Ycfi3Z6E\n3NIm/WDEMJeJhOonyKDdoo6xXq6oUzDRUVPYvGwRwjM7Avmry0ZFaOzrJnlY7o9O\nKvyYWYDtt3gdydJVEeJBYvV87IF1CODLfy/9pITGRxP+Wa2c9R+nw0KlbGquEEVd\nr6pdSr6cJqdMfVKK1S+WpfGUk38dy80wZRIWx69E1A+cUKp9vlAhwVEHNgmbmI1c\neQO3X1Yy7jwKF7+jqMBkOrt4d5hLvb23KnHk4MQ3RFDUIFnLb8j4jbjb0/bbPgOq\nUU0JhQ+8Yx2Xc2CPEw9If4m4IrK4ihkx4w79zX5PVT6YlgG1B8Kbgo/Vlr96raMj\nB9c/5zJ87i9N9aLDh79gH9bXRfjWJKEIRKOhvsdiUllCE0/LVyK1BVHYzvPyT4Uq\nJSB+cUQ44GRmK/GQ/0afUVX+8mGWI1oLYbYf9z5ddSiZGPeMzQlpo6vzyHpr9mDG\nSIA/X8XfyHH+85vzvIaeKDRe2hOphBRRQ6c6bxT5zTnyElkNraSAA/qSiKDqYxqM\n9eXhW/4u3g2hcrXBZwGwvMClU30CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN2MeNtl43s04CTb\nj92JS/eS3Ao5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAe8XE2Xfp9DYA09TZqyiM11ZpF8u7jeKu4kHvC/hbaeHh\nPUAirQocfDAzDTbGpqMGD00aAS31hdk6NdLnTXtwHnFu5c2i2MRGliiK8T5JrVOE\nObj+gRuTkotCszcxBPeIBWkCFf8XXBbvkKasx/NsbcgQIqyvoJNZ9JiABwJv3EXK\n+JA9pK1u61BFBYrAsAGankfMLGFJNQxlkski2/YsRWH6edjT8O6KiW7Cf8KUUvpy\nkpySWHURcDSeITbt2S+ZTQAyLQVyyhE3yENcrpJ5U/gIm4KAqE95GeARDvsJpOzO\n3Va3AT2e84KpAXcpHS5aY55sIng/bKw2fFnsp9/xT9Wiow+8wi+R/5TwdofgUkW1\nJRU5QCquvw+ThfRfwo+mUqi3dYMpEdW6TkO5ZRnomav9Z276NdR7mWkeXpTWgJ62\nBquRXll0kuyliK0WWM2mu9+rYai+3wNbIS4SW5+LjmkfyEOB+UnTU8R/L8bPBrrv\nkE6VrvaRSurU+IDgvyLDQDWu6Y3UybfBvMVQ4ALnBYTxQAQTHtaQoFnfd3jcDfg2\nrBkhOZz7LzhMheET9Ar8f0kfgGmqSnud1TrW4Np2CCqm9H+4JYcrAujQ5kUThpBo\nXSpFKx9uOZn2t9h10BBHQOdW6PAF7IveG+U/LLb+2t6+/ijGQGcTjrBisw0mGRo=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAQm9Vn5zfo6ucAAAAAABCTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzN1oXDTI5MTIzMTE4MjUzN1owQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw\nNUYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2A+ppYSeqPKBdmgt\neSiydSSkw5KAWugshi8iRJ2kCe8CGVFnSsiVeG5mlu4f+ZvqSCHA7UgnWzbLpPC9\nqH65qZ2ZeNpHhu3gCWCKdTxCDpamvowtBXaDTpEMz9eGMMCJ05TsbhmOGDZBS665\nXqT9TvTEbOVuE36WiurHo6yOKM5znDd8YZ24U3clq5K712jz6WhlDfAITfJyqI83\nF6Lqh8Xsd92aUSJ9X//ww8sUe/hR1DAzpXDRvu+2c59vay/2a0DiJA6YH6hP6kZo\nCvkjnJDF/pJM/MxGkVMOKdOOROTpRDnWLCmRyjn03rIP6Wo+hPR2Jy6KrH518YQ6\nbFCVswIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU1S9+iNOnxxvQwuvuqCdkbMr3xa0wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB+CT0f\ndYMg2kDG8uK94DF8fqikbUrQAcA7YP9qerTwJunxlVEk3Qgq4iR8/XAekflxNFZp\nHzeROCAdsU5lJKljby14y2tbDy1MewvuRK/6DafCC6HQuJP95TitNkO+7OoDsMdp\nZ35pahYVXu64cjcZCqAO4u3NhmV3C6+8XxSwTIbYe+5I6mnsJWjY9C11+DvwiJri\nj21xsK3BpuPteSCITZXt9Le9+1cNRnVm7AsKeDwkkcyHEupdvXYIggEgHP4lygg8\n/ShwPw/OB6uUqIQHUQYYlfWfripVpDbKyDoqbkYn4celYdj+xfOqJX1nzxo0Opj2\niadPyAuHNxIWPkLJOKgr9Q7HV3OPgGv4ndMrwrn7mlwt56obFkp8avVrdAXMvIT4\nzdzk8grXc/fWZBOaKnq/rMLHBavLvVEaT2uue7AfBOYW3X5F2TRX/mLTF8G8XNqt\nPwpeCNwaJSKvEi6s/izwS7cCdvjWjzT9WrwTJbfGgCBZwqkXN9xwGzjVV2Auk0vH\nl5TwsR7+MJ7ECSLBDsF5a3gNxVqlYq8zPVURr7ZSLWM68JEf6nB+Cvyyks4ukaB1\nMjg+XLomBPP1PQ+qsT6zlILNGipK+AP27GUsAGqEbrY1E6k+M4IV5jDDYCJYSERd\n/9c6B/RIEOrjBAizD+vm6W8uitdDUtHdcb230Q==\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjowVWWAySzRKQAAAAACOjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxNloXDTI1MDMyMTIwMjkxNlowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw\nNUYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnvzYirB8407gAINy\nYDuDGg3FQ1Lh/sYKpwOSunzRlkPSzYBLPe/KNNBdfKnptvc/NMx+ylkxRJrZacFZ\nVcRQsrB3AAvaG9kmag83EdxD9TlV8Zc4X0T5H5vf4o4LrL/pLjmMD+wRI6FOdEXR\nJF88/lcvxTTGD7a8tAW5/gbHJagIXkKgdAUb7rl93c4QIkrLfMRo9t1TvX7GxSQF\nAk4Y2I1QF6bqKHBBzPVE/OatV4mPyus8Vr8kHvT8AorCqc43W38dj5mlHnbPR6AY\nrmww0NY2bgi3zjK0R9vkBJHT42bZ0/caFSpswpwSUuaufgMPgisV+3Z0x9U9rHDh\ngwzcFLyv1ukwn5uxFZJuz/hoj98iZa/7orTGkN9p39YoT34ClH0qrgQdz+m6HwPQ\nk6ijBlBQTr9d343V903wqfUzJQsqPdalWyKnlGS2nPy8DRpmHu/8RdGbCRIMNdeT\nzcioF0T6rMPtpJbShxq25apG41Jk+xKKD3FWe8TKUefv58QouY/aUYMs+WfFBeA5\nMbJnnjdCiCgGAQJYIm17wQDs1VWtd+S/jwbyaeim2CbbVgJSFlnB7D5XHva3/LQa\njg8LWJJSsUWT/TJhxBtFDoho9DDMg7qx3Lqqh1Ht4Ktl7GGgKW1TT25adSP8Ug2i\nV4jmC7X2covYVXvxslvV5YPRxBUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIDvG/PBCdSeL8VK\nVE4YZOijZKqVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnI5HGgefnX391S+8YTkbMkUQMz5QY9uIAAf0PoqBgtwq\nqrpjuUaEsNbkXr8LfHTaCiHUgePg73cUzmUMfqbItdZisA9uGvyFjfSZLCEkvdQ5\nG2hsVemtTPP6QHF+Xn1bD1SEaOoTpm/i7XVInTap+6Oz0DRB+doOnHTbx7ZRgJ+F\npjXCEVGEejr5a/G1Dd5/Zjxowbf3FWlhK1alaW+Um0V0GmsJMHuqj0IL4qtE+Cvj\nQoqqZpEAikNp3d2uQR+To1fTQd5/6L4LyEgu9O4J9/sZUCDT2So85KqpEjpvCHbe\nfFiFMPLvWdE1IElPgJTwTfK6toNLXkVgRhKol5QGG1ks06SjH48/SsTc5Q+j0sd0\nlvgyvPEQgOMn9SfzJnYng+I5qTKAZwARMNHHf+2qRcxJgd7fMrim6E2QKvCoetcP\ntJfuYSALbqIS62GhQcWMivESraOvfd70rXQ/njCS1APBkO9umiBqW3ZEuHwnhPQ1\n2v7q9skdjmdPxUGTLX6mfqCvj5XSZatIMCXWKJu2a+ZnpfyrqTW/zVjupCQBWnX6\n1sXPQgYOSpYM/5xb0khaHjOGdaUX2gQiyEp8hUQY3Tqhzah1UUQIIHo7B/7yePos\nkwL3tG/0HR5VtwWVvNi8QE69Z0q4my6jBN7hC+Sx6HgKSag40mJHTHO06AwbWvs=\n-----END CERTIFICATE-----\n\n\nEUS STM KEYID FB17D70D734870E919C4E8E603975E664E0E43DE\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuFdC5FFVhw1xgAAAAAC4TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzMVoXDTI1MDYxODE5MTYzMVowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LRVlJRC1GQjE3RDcwRDczNDg3MEU5MTlDNEU4RTYwMzk3NUU2NjRFMEU0\nM0RFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAj9PEvkl6sHE1+aij\nI2w5SAwqh9QSYI8zvPc1bAjF3Wo0eDT3Wg1gxYgGmCD3jx4fwCLzEqu9didlvRVw\n/N12BkwX8suKKaJ0kNsv3Fp9e3H98mRkY6yjFRCmCCqDydqCxqCyeGWSE5GjYHaD\nF3dIGL/wMx+TJQlqAluNvctrqQbWqtkp7vLm7PPN+itf2vmudNJQ/rLNzjvnSKxP\nBfhq/FKgkP9EivzWV/zxudN+gHC9lga5SCh1splL91ZpXkdiZ3iN4/kSBvWO8C7/\nzhwILBlVR6pXq3CLKFSvPYGBQ1NUt+p4GZOBOS1dFDvvJEwp0HzkrqoTzFLGJRlu\nGVy2sRVjjHPieFA7b1kwVaseCP8ohDwx62hulbScuPlRGs6Y7drPDKxnqENii1K6\nEwwEqzkFTEWchh4ID09oMRGQ7tpaRn7vEYWldSJmL4JfTeHYPXMjyCCL+j+ARIuZ\nW6ApXjAZrUOdKPcy8BXTIyu/RD3SrQSSsKi652/Zb/BZlfo0sXLo+twG0/vX5LhD\n5/wd0vnywmlWTGBQ3U3yJfPhLJfjHTbsp6kGw5JQtVWLvkqqRH7koBNXA9xfqBG5\n3RrX4HZU/GfpWQwh4xlCTYACbeCOfP6lsCfZD+IolviYpiXaHahLIBOe8g9Ub0KW\ne8NZpEnZ2cvWgYqrMpOb9VJfW5sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIqxF+rWvu+7aikS\n+a3hTfT3pDm2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkIvFLoMymFtCiOgoh47Gv9NOpxkCO/FIT0KCZdNicVEQ\nh8EMSXvxIUDOL2jxasYGQExDoH0WRdwkquFxLPThNvpkroSQ0V3/Z7eb8DnnRml6\nl0DTiDErin/7V3MB3tuTrFyn1whnOBaKivP966CXVy+YfmZ213bqF/sXJQJ3VSMh\nDoCKnCTjeNlDWA6IY6hcqFEfw3HkegufsqpzSFlL7FqhkQIkfhEaihB6j8UhBQc5\nVAXeUYoUbS4zder0G1+YJxt5gGiBah3pUcEd9Y0xM+1gQ3JulYc713zImpktBBap\n5CNB2EQqh2FjLe40csX+MRvmQJrprybBiasIP9IeVWCnJREwbr7vqPzMjnEzb2s+\n3rbybvbRMLlyXBSzmoVFaSWZ5xI5ww2fnzw99CX5h3UnoDVItVJDQ2+ydZkDpHqG\nLZ6HUuXtQpfGf0E1Cjp78Evv1tU20kWv2WdfcjNKNkHF0GMjSnBAc2lRk2aooOT+\n/9joD/vvMmiIweOehicdJzoMUkkEE7H9e3qLE7mqsV40rf3FJR52YadyHA8MKBA3\nGFe1rZQDYVLQIy6jL8wBtO5NFu7U1t6QSg5VPdSYagcIo6p188GtjOLBeDf6k4bf\njJtACIHz/eo8oojK6bsZRCA0nuHFaJFLPMioi4y2NaucuHnmqkTRZEkUBoSfeRE=\n-----END CERTIFICATE-----\n\n\nEUS STM KeyId 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADLBtjRHGBY+QAAAAAAAMjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTE0OFoXDTI5MTIxOTE4NTE0OFowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LZXlJZC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2\nRUQwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn1SPasolqGKkFmKl\nqxsAJRawPsXgGwfrP4kNn6fKuMyyYNqQq7jE/ViSyAjaiIddaKvTDKs6FB2ts+sF\nO8iNJIRQLLQDwYzFW7AJ/AnfnLyMFGGr9umq7T7KL/bbr1kUlfiH2T91bOh7ZW2f\nvj/FNeVEncDIRv0TIwQQcFqqvdMLmTRY6+RMHgaT2Sx9U51OGGZh/TfEdEY6ia6K\nb4hG3MoyHcTaBqFaFgM/N28OWfVSx5CsmVwm6ni5kZotr+zSMmMZjVj8vnkNmMke\nOo7byt+D9vLbvjotrBryeF5o9zwVvvWjSwQyGeZRbia/FsBeLmgseWwHOuMaQfsO\nLG1vjQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU0Ua8rd4q3PcsNh8ct0FqiJjrEUAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQADb5vA\nhHPd4xvj3ZsTlVG61LBJ/DS85Avn6xsGu7GhcEkHVb8w18G0xoSwHTqGQT2ujRc+\nT7GXKar8Kzfg2pjwsLEHeylMSmJzfxVRtfT+Uw5VjD55o/J4XnWx5RYmWieJTFAL\nwiMjcBUvLopkZt6tLpDdKqSmJxcd70ZrS4/GPcg8JQricHj72G4WIKVDH/rTVKxQ\nHAMt63xL7DR1gHBuP4SSqaBMBOBpzoRrwAkQykqkT94F1bF83PSF1hS7iLgmx1bU\nX7x42T6GGomWtj0J54Epv+hs48aUM0SOcqOBfUt2P8HGepIa4n7N2cR1cHqlHhU7\nMRQ18v9E2Y64nEwkXgHaqysmlh+pBH+AaKCLxUNj4v7+PvDNZiumqRM1K2wS5lO3\n3exRTKLVJjoD+t26C5gw7DasrZrIb8CxBVil5gQf4LW0+MUjiOcuRMDqZ6tScQX1\ndRNbxy55tny5rXAmXztCpMcq4pTHPyl+AQ3c4bLaGIsoSQ7dXPQuh35SOuUdqS+V\nonGVVYd3pAQ5lh6dVFAc2rH2Tk3FBWjYkQtX0rOGl9COW6pclFcgqjRkouHGYL0u\nT34g8u1THbKNMzSVtUbqezw8zk3dd6+7oS5+l1ze61wNrpmzwUm/L9We96hMv82s\nqw9Z7SFiI9f4NKmvws6TX6Z3xrWYLBhg/lJiUw==\n-----END CERTIFICATE-----\n\n\nEUS STM KeyId 571f806b47cce79bfa35947ced88b8d1005ae09e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADVHvjrRtNcwGQAAAAAANTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTIwNVoXDTI5MTIxOTE4NTIwNVowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LZXlJZC01NzFmODA2YjQ3Y2NlNzliZmEzNTk0N2NlZDg4YjhkMTAwNWFl\nMDllMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApuq3dqWshuM7VDm+\nTYEF6FTIFhl9n9u5JBBEpRLn92tw65iC3ErDZkLXoWvv61NlLoj0J4i30m9dik8q\nARnyELUuIv9y45KIqNiiPiR71ViRTTpEI7GJjlgPXViAksWimPOE/hGrqeGauM82\npzcbY+ERIyjQgxoEBtL909yjvKq3Y7HFaGIfdHGPfJ1Odgy+wzVUtBC5ljU0zLN1\nGMsoXG5Qm4If9+7WoF9h3asZjizSMpf8AOX2IMiH+JAEtzRtsv4DSyZAH6NS+Inx\nM64uafa60q8CKjyrBxpCauVWRO3ryDH44dmnDS1fpPH07y0qcrl+NsNo6bz24qz1\n5S1+cQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU2g674DMuFkUWdiL/RuP3mnlsvwcwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB3hsNn\nKY3ZW2T30lHv2UEy8iiNA14VOOunU2gmMuXQp52bAjSPP3XYgkhQHbuqWBSW9mbA\nUH9kwYccsFI1FhLr6/kpSuKwFvpn6qLq3bdYQG02y0+IvbmTepdAyj5OMhTJ+7e7\nSRHQ62nIMFDcjSlKiWiKpTL63EZ5rvfjF5GrBMfwnDmGnDpag8rjRlnb9YPbXqJf\nkBvJAA7uJI8H7RPkK9XaE7q81SKtU7VjqHwgHC+0rbUhCz4BOVRat15m9+4qFeKb\nf+kj8U19CgMhUTf4HrKZEJAfrCbFTwuBLudt6z960SD3UDXvUiJZ/cqJ268aCk+j\nxK03t7oSQIkL31CyfY9GBzK8m2BeXEUW5C01ag/9DPHCLnayRGGWEIOyTYwyBBfO\nXLLjDM2E88cpJ9KHKYvkN5R4rZ3gtMjulY+tiZ5ooxUIy5cdhmbe3P4IEgH3aoP4\nnPmd1NPreSWaUI7a0qqiUEyV0c5RqFMBVmul1BQ9V/s8CaNCy7yF/NrXH4/KmdNS\nfxh5J1Ll5AhRQOKiwXyIcHGJExCYYjRnLCJfmeLgsxcAwwyzSu1N8UP6f0/y3G9a\nxADLWvbir4vrLVmbP6BSB8rYyLsUy1ceAhX4ZDB9z49MKa9DvbNgRiGL8cTZRoZl\nSmAC3iBMs+goAZ2PaNuyr5rKZIhGJfVGu8v+JA==\n-----END CERTIFICATE-----\n\n\nEUS STM KeyId F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADhXMfiL+XfM2QAAAAAAODANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTIyMloXDTI5MTIxOTE4NTIyMlowQTE/MD0GA1UEAxM2RVVT\nLVNUTS1LZXlJZC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3\nODIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuq0u8iHw3wzfI+rn\nLQhIba9AhpLFFzEkCj2ehlp+i7P5d2laW4kgH7q64D08TWttdcIsQaqpfvV7ipHE\nqKSor8+QVA6fQd3OVp16TfJCMI4bbtplTceFtPl78WEaGsrl7KxTFnal2Dq56wze\nsnXcEdKdu4mW45fOobSikWl3R+LFoIY97l0abSVoAtMGnJdG7bfiqlJECCRlmXEL\nwZLjXwZ37lOtwhtA0whA57PNAsiqTOyKKmOwN5/A6be8uQFCkG7MZPZvIGSUOFQs\nfxo1MmHWS+UyBM8WKaXqtpcTrAsJaOthsnA2ZFeiTV7Dpn/xTkSqjOP+BLS7g/eD\nNeUE+wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUUSgPgRiknlD/P20o87itsDPpdjwwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBL10XD\n7jF/ybJ+keL4jISYYFZ7fviwgleXe8my7Xhuvsn6n9WfAbWBGP6ITmfQo38ltbYj\n9jZuMZGPxn9d4Bx2ioMYD9XnIQ1QrDz3fviEaBECNfGm/Ayw/0u7ojcMmW21cUrS\nnf0dkfesV54KoVi6Ju4AAa0FL6vMconxMth2ozJKir5hveezv0ixITYaobqlG/oe\n8YF7xBvuSHfIazBBtyQzKJB0GMwoXNxCz+mPfqV3GzzUbS9TquJjBqnCnow0V3qg\nCbUrtP9jTir1y6MVyBRRCKq51jOQjf7HDrmEADKiw7TX5oJ1hNlRGqEUAaB8EIlb\na1hz13jDOLRalBz6fJ82RLGrZImck4gEUTtAOTJw7wwvqNshO2gArfEdAD/JaqBf\nnO4OEZodIxL/hOcBVWJkBr+iI6EFqy1fYQUapgKGZTRXe5jvPBg/b5rMp8gqfGYq\nGLUlwG1LvphBpWk1RV/JYHkdCYkbWoxEW+ApZ67tjqJnZIYD403mouY8fS/vlAA0\nlex1oOKpe2zS1Rs8NlvdhDuFdJhgkJIh0P84IH4gTlNJyfk2Hzl/sOM9wf2DegVA\njid7cZkAWnDJu6+Bt0TZqeFws9mzL1hJAulv3F8SF5l0NmIH1d+2TY1LbOn2CFHa\nHRIzSztV2q5uFyNzhtRnVnu/GfH+c6L4JaORSg==\n-----END CERTIFICATE-----\n\n\nEUS WEC NameId 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAFMFrVQ6qzGBmQAAAAAAUzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyN1oXDTMwMDIxODIxMTEyN1owQjFAMD4GA1UEAxM3RVVT\nLVdFQy1OYW1lSWQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1\nNkIwRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOX9MM0ZkYCLj+FE\nyGZur5rBMeFBMbr7zyMTppNyC1D9afbiPcJ9huBId9zEQSrtmjg4wSa9mkqbkpH0\n5dCvytYnwpNQ4EmX70pXEncnG8ZccRnMO+LgZF2kJkuPMpAIAsvvvh7XhPPNL4Q5\n2ZbFUC2lPOppXXtQgrVm335i75B1AsCpDc6o87hPQ/IYdJr+KD3ABExrdyvFHSch\nrma0/Cp4mWgdVa8IQBrG/ngrq8asZ7CPG7AfRgimwqUMEVW9Jd+5GuiHFZbQtd0x\n+gQJQwv9av48N5tvhEDDO4KmKypirpeEnsKaZjkkbao0sCXuMtQhQeyZIlJkaRDs\nCIlQxrECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFAKAPpFYPfEdheKWk0hdNrMgs8UTMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJBga\njucw416OL15Kl9iVYgfU4cEjOH9Zx5OtlcX6d6a5Z7FKDov4cDecVV/F7FToN4MM\nCMlHsQ/kLFzgdzgmvgy+UcITrRXAY9oEDJX7J4/4b4P720WW3xHt+W5biTiwVzWT\nZf/725HUhhy+FzSP5mHWALYt9JFEMhoi/aCLT2A2p2rW/N0TeGBUq1ANlh3zOSKX\n9/LmdRvoWG/1kW29Pnmxbf/SaeACop//kNV+xBGrtoCi+SP3pqW7rH2sPv1pBXhz\ncLpIojZFeo2P1htaJqMBuR2lNoa+FViQaVqd/06g4jHuiPnIF5wIWVUFX24g+Xqr\njp8Av9zMYH1zR+hudQaCzCzlSG+ltqEuOEQ4TiiIIgmiMUT4LX51L9SnApUru7T2\nzHsMCQC1PUARTLIxInkUKdYX4oF07H+5AOsw1cMBBD2lzaZY1m3D9ZchVR+maNID\nTSzD0uUp8O9XRu3kKfn487hLOiukQtjIlYuvD2t/L/EcqYRzAojeqXXNq5MmYsXY\nScrK/znmYZftUHXSyqyrINcyxNqjsZFRMdR21Gc2QwY2+Ks+MlPy+O90ze6hkGHe\n/U2zcmYlvjBFBKp7X25d94Fe+XbhL3sCHutJ8FiPSI06Dni4dXhUYRVnJocN+Hnb\nTpgRjItdSvUDEIPMr/XROBgmg8QHGuGS2N3lLsc=\n-----END CERTIFICATE-----\n\n\nEUS amd keyid 8a0578cf56146fea399af903fb5b0ac36eb2786a\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtaLKSUISz4oPwAAAAAC1jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDgyMDE3NTE1N1oXDTI1MDgyMDE3NTE1N1owQTE/MD0GA1UEAxM2RVVT\nLUFNRC1LRVlJRC04QTA1NzhDRjU2MTQ2RkVBMzk5QUY5MDNGQjVCMEFDMzZFQjI3\nODZBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7k1klA4MZ/n+7nnt\n92OcGw1HKBE+nkobS8wlgO6ambMFwAOmUzqR+tEWgHG3ghFs9suBkhqp9QwoXCVg\nT1LQTytyWBZmn9KxJsO5dIgFKn/bWvrsKz8gHCKQPLHhbJE/bDAKcJvH5harM413\nk8H5RYcm2rgxHRm0I2eAVFfEFRsS/iZ0vsA09Wh5SJ4Gh/qe0fmHFu08RbbRdQEa\nqfTieazOLJdYDPiTMQpUoyAYEwi+dJCDgy1LcdQeRfiOW46pNoh43F0+DRft28He\n0AyV7jh8owagGVs9cyE5A9FpZe9lZ8DMEQxTvC9y+cgVwL9BetN0idSl+XA4ZNd8\nq0rlNPXSXWPUJVnfhgVO2e+55DFiOEUZvHKThUdIpwilL/1Q0lZ11Wsfj3nedtYx\nP8zHGedLRV54XVmFP39nBKvuokzMPY130cpAlM3vaRXnMNjLbWUcteXANuWVDEAG\nyKp3AN6Dn8IjO3okgGFVtWAOqRUNrzjFwttLjGq8xfv0DYNT/9DPaT5A4cV+HOer\nHLnOwL63lBRwGCWtpa4aBKw3FAti5qUEl0eMY2xygSN3hgvUvP5u/v2NTxVcAQL/\nAOmzTJDZWyaipqAn75mmoGs3csYSF3psXpsInFADrJK3D/w7cdaMFwlkpHNWuK7y\nCXRaXDqWAjIKQKsuWc0gBA5fm9UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJoeUEIVxj7ZnWb1\n4IUGABcQwHfCMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAabY9u+d0nd7e5YukBSwxdDX1wLBXOW32jbroJ4HfOOKs\nZIjIZZy3UKdcJgeZ6cElCTlme6IfmB4vcpzMXXrY/Uvnj4wNiyY6sqCvK1lINZ8u\nlTGe9MLawJU1iEC4Ws5N7P9aEjwQslGjaZcqMNpG9DLA7U+BilJO5CLhoNOIMB3F\na39nuA2WME+rlgSDhdwRnctsO9mYX1Z6ugo/bOC3mfbpRkfa4DFX6nOgxKr4/AVq\nwNRKSPpA4/kMefqg6UPfs360dNza6zVJ30eGI4AgTrPi0dLJ+Sd5hDGkc/bHRIvs\nFCSRDvPosd89V3euq2dqza6HOnBJsrJ+RsqSEIdl7zAmVa52WGFMhq/Ik0n0mgT8\nVfwYzQyawxTfXTGaYaSu/2lUNhFzr4hHem1xDjq0U587exoSpBRCvFQmmN+rRWsP\nAiSFBB3ApgdKpqNT4b6MbB6zqxaF5DpKxzld9Num9NoPqzPUAnMxqA0JDmO6lo5b\ngnpy1d6bz5k5lpgZK2PXo3zfbu12tSYFwPVzDCQj6rjl8CHKUZYFrN7F6FdQym62\ndzMBGNA6va/FSXb0QOzjsCS0CETMI1uQ8r0Q3rORRc3M0AEEMndH6NuudLgTxnfH\nOuNC6WoZ8hla/xIc9HFkI0QVbkTyHKmYYvN14RU7dML5owcqJ63segyzrPiE7nQ=\n-----END CERTIFICATE-----\n\n\nEUS amd keyid 90e007e175574201a7a8dac93b323114a887e1e8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtcCz/QGTnSE8AAAAAAC1zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDgyMDE3NTE1OFoXDTI1MDgyMDE3NTE1OFowQTE/MD0GA1UEAxM2RVVT\nLUFNRC1LRVlJRC05MEUwMDdFMTc1NTc0MjAxQTdBOERBQzkzQjMyMzExNEE4ODdF\nMUU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoyLPbYhW5DvSSW6T\nPlq7LwaUrsss8fFToRX4z/HFNsHbSFsUsdDb5B4JqVqD8zsOQ6hXTurmEJNqEDwm\n3Whz4Tk6MLE0AyPbHW7Ip4XwGm00jGYOTyT67uZdIRhUvjnMKtf3VjQMoBBbjzGm\nf+uNlwLF6Ugiam0j4/strPkDHygOXVcCUUqbsnvgxkFKzbcTYXdn2WjYAFsfn/td\nFpXMvfn+zsQae2yLz0pZPYHe20FSsEZQ+9u0UeokK0qUe2hcJY7S/oCyNLUB8oO/\nHlVWXmtzT0Oh8n2L8dwRyYhI0aAbl+AVgTNaECsswpnDA4zeHvVbuSYdIFdBBt/z\n7VKC7WROncrFTgpnzVcTaEIyGMsL2EbCtMA3QZsM5xKKU7TjmHRH8OzAtQBPx4Rh\n7GiiCymXOUmTpkn2fcp2oLUwuETUKOJfD+5eB6LKNe23qimaMtj3JfOLs4i9wDWk\nYdeX7Evh+NdI5Ue30hQ7XpNTzLob+Lwcae5Jb3waSYrqds4QTAqDC7DpRBhyhce7\nQWWUd0J9PLPvHp3kkjLnrIFGghR8jkGDXxAcmStqKZ7WeaHIDgoMbZ5IED7B36NT\nH+eUsUY0gEc6yLPNbZjQChuj2ynrsvALsGkLF7guKA6ljTKt73byoBvb63EjVGGi\nijMVDaX9wKJBv8Pf3NkfCxuTw5MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFC3YMEWa1fk11Iqx\nvj3WKg3FHoT2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAeBI2vynf5Cyl75z4oTo75Ap7zB8PelfQRSzUqImFqoek\njTD4YSCiTCqpe+brL2GTLN1jMGldG1w/jqxQQAQwFdvFR21xyXewft1SgEtbKJMT\nsaclbTy0CwOttxGgNyT5KOMrHR4/wIPLILEZRjLm/f2maaHoGJ+8P8VLePhAUXVj\nOIqiBRJsMnrsicHnwWcBY1u/7gKSoy/f3w7EkEfyAccc7/R+Sv2hPPI1Bt1dgw1f\nR1kG2u2+fHDKvMa48/+OUkTLtv2jtjzhMySTI615cvjSehj2wbDiofx1zkWhdErc\nriasg1VHR8jYrgWbRrHzbC3oruyHnutW6OafaqTOW61mLJBeDgtfCyt3muuFRtrx\ntI2+XwkqrcX2AMg+CxHA1hg2BXIeI+VNTs4Ef0jm9BmrPWv9NMzPYDuDJHnKtDx7\nPH7vrO/xphVqLHp2ZeNKcjt90zXZcm6IQvoNu8Q2k7S25odIzgARih+B0tySAIt6\nQPRKKKqJanDTIi2e59OAUPgz5BSJRw3VQqtYGGuF0ip+ghX6xxBbVc4gGd3CIj3h\npsSJuG7nr0AUIR3HzyAn/HYD6eTZDQRtXdtr45bikgjnbCyziB23riCw75rSWUxs\nlh3Xhea6+uoIE1mY16F62A78L/bwJ6/qo1UJbJDD6ypmnS3Y8r1VeB05V0cVZdE=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 0d9969519b979d32ee4b803165664e9cc86f9d0d\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYwbZZZqZBtxPwAAAAABjDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcwOVoXDTI0MTIwNzIxMTcwOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0wRDk5Njk1MTlCOTc5RDMyRUU0QjgwMzE2NTY2NEU5Q0M4NkY5\nRDBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA62tT6AspodVmCSzv\n7aqoNJwNHka/5GqT4pRG02t4+XMZhqIkk7955kJxrfUOc2Fsls3//YTc8k5T1P/e\niQiJtpk80a++712DuY8oqDwOqNbOk3b+Ur7krIJ1L0koaVi7JQ67gI4jWFlPLvsf\nm3Lt7RluHGmHC9ZYja0SGdTK3q8C6W7NgTC5xe2YT+3c5GxsX8bb9H121MUWXPhJ\neXUo5Tef99xrLAvHCh323JLl8xxUNeSWGLN5BAByYwvM8HFTAIdEQjRblK8H1ex3\nM+9dHlfWchI5Xys9ka5cNKbEvz4UIphdspS189pibSWZZqSMGF5mTN10DBM3x4jt\nRrZMS48ceUoBGcE/JHW4rd/VBHyHw1njPAP9r10W9aSIFNRHYGWAfdKpdj+kYfr5\nBk+SP2mrhmq9RyYw416IguARDrcrzixiIT0rIiiUkq1ek3QGQh0fA3UFzeObbaTV\n5bhhAwQIDx62IYdHsN2KUeANQluWSd2IFisTjPBh5EyVGU1YXaU28Z80orcMZ4ZU\nIF97AJrbGxWEd7o+Swtx8ppDW9PMwgm7UiufzYEdyYkmYH0JNCXrCkXq7So0/rKG\nLflmm3C946DU7/1DHD423SoRolfKwK5ZqWFMQU8waibqUADXpmeiKTI7560kYwrV\nge4zlh9Nl1Tyhw9w9EuPp0d/vxcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEtri//YB16uNi2X\nBdMtdhwUNb9lMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARDqTkzRKXBx9ZH8kiGEJjLYdUhn8Bnh/rPblK8Q7Ku9R\n3IYUtNvs6H7uumQdtCwswUL9LZ1YRaI+SbPNWDry50psx4mBFo7gMunrJqxcMdQz\ndyitGXKbGIJ2rTKUrhJ4NL5k+mtAGCFznWwfezhdHLGOd6y3uxRwAEvcj0YuuwqC\nUoBjPdScrf5L/ijdqpSYngSL3B+kFn98vo5RDh1kDTVIB1Q75HKG+e2sNxlH2Hnw\n4tstqT8OeBRVZaDqMBB8YCneEwPBWoaXz8LmFJZZ4KaS3qoFaGBydHoaN6vCRQb3\niu+b4m0ZqkETJBAQdEGZXsvDq1UPwDdCQqKZqjWDGODzkKhIfdccCeTpfOKlkH3x\nhVe6fEmVd20686//lhUm5fH4MF2UGPIDvd0eOZ5ewZK0Q1XpEyksCReBap3Whvgd\nwITvlPLFq2cJGp/rypO0QEstNGIwc7Vk8vSatWGqokcH3TQiuLrTcTyaAG/p6RzG\nMi/FDz7itpg0WjIHjZBq2GQGhqISfVPBUXG3x2aaLw5669vCQ6/LnyFeoYo6Y0v5\nxxzMHZ8DOw4hPIPVSMbWcal3j14JhD9pfjj8rDsFwlkIcU6NEhMKqnzeujUJqpLu\nB96jY6GTlAg8+cU08nooFk35VldTnpSHqHI+UlSQq4j6Y96LwCcb7ZWpPC7ukjY=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 18b1af70b93f991972f362556a9a3fbf4bb24e0d\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZvWko6fkkAwtgAAAAABmzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxNloXDTI0MTIyMDIxNDkxNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0xOEIxQUY3MEI5M0Y5OTE5NzJGMzYyNTU2QTlBM0ZCRjRCQjI0\nRTBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArp8J/R1qO3DQx8Fq\nSqteql286drxo2MNLXh4ukWxAkmdvtGjghUcajeQBP+3X21kfm3qpwPMao1agp2G\nb8lDLla6DQQXQ31JwV6DP+sij1UjE8WadNwKIQfnWsmjnvSIrV7kgAGiNGlkEjhT\nVaJQVEMRMQIB0E/h9vZ6l1asd+YQpodFQHJBoIT6cHT5V5erZyWbMdRC1RrL+HUg\naIL5OJjRAdmTyIATNxwJL8fA4aPOjh8Kjf3f+XA3birPWT0vlSAiRKSErwJNafQc\njTI10ybS+gsaGw4fHnDP0mYxUtWT3eDsIOf1JB2MFITlAThzyvDJQgW8IIu06+C9\n8eUA5ePNDyS1w3qML+cyzxTu/OWLuYxoniBSywTj6CTn7YYyFxhZvYQdwQoG+Qdu\nXlwJI5tyGEnmSidI4A3Dr0Uuk1sobakX9TyPVLcDE2dLr3pYYShw3wHMvpSczqOg\nhn93afQXouYyXGm9eQKxihYVhsVQWE8Gv8Dxwi7ugebdoW/yCB8/CpYJZ6aIzD0F\nX2WMEnHR8aibLj7nvCiGQVnkiVm8HiKPwgXMd1bmUUrvuCFakpiL1c4XFKcwZsq6\nJJPKg1eatGqHx4c4QSanKgXiSKku0+Vhpd6pm79sXRZ78TToWYqvSn5dAuKApj4d\nxzgIb5NsgX+d3Z5R9mnLcKnotpECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPtSHZIO1Fg4YQd3\nLk+KaQJnp9wZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjUfwiUMX6Kx9ZXhInn0OycphJl6wLlpQVG2Kw3mKnzXv\nLzTTi33QWSytFVPeSTe4g2lDQEIuNc1HRlGHJH5QWSwI3+zTo5Le7ThqbH/mQSIf\nX5icJrGjA5XdW6KPIDJ1P74MTs4VPppFqsuWE2GoIB+O+wOq7Jz1rtZJOLwxFmSI\nPg2Is26S72KBWYol73tIYX0QYx8vfZBsnChFowe2GhaM8IcHDG7UnCE3qbDUzk3h\nkRp2S3StFx735kz+vxCLX5UZDRvfnsg/ZQFm5tNaL3FjBze2M1ct6KPFrHx7AUvB\nW0inq0bAPDrfKg8AoeTC4mjRaxNBzTnE6UmAB9i2C9wvn3OlFkNmjM9zhEm3lU2k\nBHMsOo31qEIP5O8zItFF1drhF8JbGJ6PBsrxR6LfX0s+GaijVydLD3wO+IQV0SHP\nJBHDILeYG4mVywVEzJfwZAWD0RFTle7QR0EErwIj5ujHbTKo8tHOV3BKzXXHdB71\nzMFrZ0pJn6LaBuLnMP6nYYesVboo4ivbnMo85cf496akzl2A70TQyfUksvk/FaVC\nAaTzUo9Zenx11xKdlhC9+xEhpIaEOs2z6TeuaPiJh6StlsJTxcjnWDL0bHojvhOM\notORmR2DuAc8FBopnQlnDZ33OZIXT9q9TU6HfKHTYnbxN/vVfPcGzY70aJrW2bI=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 263b744d85412bae6e13e94a53c235185ba4eeec 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAejj+BtOWd/TawAAAAAB6DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyNloXDTI1MDIwNjIxMzAyNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yNjNCNzQ0RDg1NDEyQkFFNkUxM0U5NEE1M0MyMzUxODVCQTRF\nRUVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApSGRwEfDv7B2XNpr\noYXTLtGo9gwBB64w8Qwyaqjlj1ZkwJ9uFzYXYVptB60WezzkTbnn8WTEyCt2nrT+\nR+allzCg6SUfCd5YOjVPA7EcEarI3G7Sq2u1+r5uuNLgJeXYeZ1tSr9t3bpQFzvJ\n8JoiMdXXMERw1/RKjEzNWdp8mJ7iZL66NDcEibRUx9CI+QVbcOqam0iJ6FvyxS2g\njw9iIFPscmWJhGTeF1UxupIVxkCyCXizAdjkhKoCcMTs4xa8FMrxoz0F0/5aFxz2\n/Z9po5b9lZCsOX4mQ8qRDz2dmdJQBwdppwhR+Fo25cCMW6nq+ZwpILcWNKiEyrSD\n51OmS7vNed+RAOqkkkzHdMHYV9gj35iCXhVXWhoAuHUHOW5wslGGGLvbHiJMjjnT\nr9iCeKr5+UMDkKE7XKQ1P6GBXBQJq9QG0LDlez35XOc/IO8hE4/4huG8H90Jw4bi\nPouCGDLwEhdkIjpah8YkIBX6AtG5uvgwWVGtw1yA0Q3UJ02y6GtxdpeW45iAbuIm\nHnj713zNXpxCqiTMv2XMzG1H/76JgK536kfaj0S0E+qD9s8hRJm3HEBQKNmy8MSU\nykTv00ye1hnwT2MvRRz0OYrtFWW9zkohZXyW5CohwovSHzo4NPQjt8nDsyzjDnjR\nNT6LkwHynZ5+1l3KuGN2OIoAmEkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFM1aJUVst+5OqPK3\nt3hOBjX62CBWMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAndRMUg81zae49Mliv5NW+zBoU2LEZPz1qzek5ihf+xR8\nEtyIeqOR9X4daukMUkjiRTAVCGkAxEOqKeZdaU7fp9jJgc2wexw0ol5Zrwe8pbRd\njk9Eos0UJMEthGjhssjZNUZJYxj1Nojf0wafCIABK6JlrTAxRbGzAWaI5s2pwVGK\nEAYpCv56mt1hHRBB2cIlw6TGw1aOjXdoiITkZbcidzCCWIXcyDw+ru/TxWU8I/CO\nQV1Gs4K/bONXuc9Hs4Skyuqe4po7/+5g53Cwwj60Eb1gzhnM+x3aXb3UdzkxQZ2o\nvS/qjKN36a0Pf/PQ/cfIhMHD734fUy5hEME9EwllTIydigz4AzP4koAiWwGwZDzd\nEr/ykp+0FPHpXLtf+mwoN49kSv+QtsURmnoZ/I89JUNruGxrUKMTJRVspzVeqfyE\nIBEzYndYhMXE9kGuA57gKW/W2/1z2RQvaUYx9BT9v99SCCvEzfMjeEXm/0PrGtqe\nOaCwTIGqBlLwsXns7D3/z/4SrxG4cuJYLwKQBBuf6sX8Rsk2KEOKrNOnfxThn4hi\nR/Rt08vNQz0VvGTmpWDZJZj27l4u3JM3Y1u9nc9zch0JmsQdHcnf5hmgfZT8pJP2\npVvcrzNfejR6w8B/WyfcecATuOXTKrEGqwCE2i+L+5mQde1z7hMQsG+Fd2Gpkwo=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 29fe69630e853a4cd3575f84392a9bed2d7e8ca2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeUYOXPv9WpipQAAAAAB5TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyM1oXDTI1MDIwNjIxMzAyM1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yOUZFNjk2MzBFODUzQTRDRDM1NzVGODQzOTJBOUJFRDJEN0U4\nQ0EyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAskajnggLuj8fiZrp\nY6pVF4MIu91lDK5psn25/m8ip0UQ3PWRC6R4ttrjnw0f9vIfirUkaxsSUAYuFmME\nD91XvtHouj0oCn+CZmogVKkt788XqjxJmm0VlZvcf9nqOB1BHP4Qp5G2JhFImsAF\niMpvgZIfLdacxNKFEG2/eWIC70VZmPvmG1XDNqwyoS3a2SdHrpp/d2QCOLYVK0LV\nY7FHA+auetAG4YgDMSqDc+VstTvQmbyv0cderD14+6SRkp0xYI9HioBnpZKyEYma\ntc1DjktWjmKmpBYYiAzBaG6dUgWMU80rWcVnG+1XPfPnPMoJwA6qbz+wJ8HmBQCP\n5s2gTW+IYu8ssutgr7Wd2Oi0NK9KuSy/FuUmIgR35gPbOL/QRV05d2NvU1u5t2pa\nLddecFXJGnfoUGzbvRtT9mX2e3X855ngw//yKmywUFLdbjJ5sff8uZTrGkk3K7DU\n/CTyCN7t72YdRASLd/ueZSVdUgA0BCDTL1DCaPY/vL9NIaRwcFqqmURlkx9gKfg5\nIzA2EwlNAeSrzgQCGMPK/pvKfkNWD3PGg+rVy+0igzPM64reLZd0Xaq890vaC+7D\njC1Y9fPsx+4RXw2+K2FAPT/PKLxWxTSfJczJEFmcnoOyuCdbR/VwLS12CT3GVELe\nG1SYgNdCBk1/lNmW9mS8PxIzL2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNTnaDzWF5JY8vWL\nKP7TQ1BLJQB+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFXJhPPu7LLO2prsW9uJwP7s4rHlIMaBokzsKLAXE2loW\n8vHyEJv2MW+ahwNbw6krvn7PXGFptt3MizJKqaz7xbqjeFMpNFao55F3sLciJ2VM\nq/NX2sslGcCXcCHmUB+1rO2ZzUun6wGq+qfUXcctKtEvgvz7aBJOjWtJ3NrLxXsQ\nd7anBzUPk4nqPAaCXQKjtvxCxiYsaOFSyyCBQ2XQNzSCvD0a32CwTRkF/Rr1viZM\nsz1uhAtnca/U9DHtfDXek1AgVDcG7/BiVCrJVFdOrAP+sYJ2tiRVoOWKySygymQW\nnHWxDcd/sM2htRTDuj1HOx+1+oi+f5YdBVMrJWS2pCuhGpaF5xX0jQKedZTsSOPf\n7c9yKB3Dc/yJk74iTLUAcEW5srGUnlfUK3O+NeBpaVeR3xi40epqYK4SDX8tp/VI\ntr2Khlw3aAVALuifY/y/KTmUYaPYUZ+wvyZwdTRmSYFR5wGu0IvHX+J3hlbg8KyO\nV15rdvUpaHjKAgQ/xrn2kE/o0qN/wuutCBhjhxLX6LRPKeC7ZWQ0LG/dMZxFXiGH\nPG3ElDIhH9BS88sQnLRn0wxN/IhClnYS8NJj4QPS5HcIxqt6EV538cS699+kBbwn\npRJBWSrgVMd9rxRblc5Wku5HG0aBDB/ocm7LKD9N51m2P8CMp4tQByYr95/1nV8=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 2a77a0e342cbc6c72ee3fafc3b0a7bcea7c9ce4e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZjWCbvU2YLDUgAAAAABmDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxNFoXDTI0MTIyMDIxNDkxNFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yQTc3QTBFMzQyQ0JDNkM3MkVFM0ZBRkMzQjBBN0JDRUE3QzlD\nRTRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoqOgGv6ANGBIj2nG\nFIYQz62A1oAYP9UvKI6ckGV/n1MVjuKk0cHYhUUwfLWrhMu3tq1fFA6MP5RHym+r\nYwj0GN2x2RxDCBQ18YdZf79sbd9u69xlsmBXXVjClYTJIlR4JuN76TqEYniXv2UF\nSdDU8roPjzMYadlP+VG4Tcot6D9eJ+6SbwR10g/Ka4wIqcZl3w4YEPYuvyzM85sk\n0xz9zIZv4lRa6E1z/w+/Q5RfB6GauuhSqza32ypQfD0xQFCjYBDPTgDJcaN6kzwJ\n6z298K4uasJ8P0VLxpTAQHM//cDbZmCJ2DQRQQjqc/jJSkj81bpPhaeRqGF5MoCI\nbqdH3cOi3GPI7n5lXtI9Z/4tHt7bq8ld4l9SNFudPRrAd5e/f3N3PXK0iCybKRgC\ndgp3Oxv8eiH4smh17SBLPVk4LALhoCie3E6F1WqRlfCpp51vQSwvVhI8nTlz9my9\nL1Nv8l3WHJfWvhHWhx17uLF/NSrQRoJCrjpgjJAYairSg7qkLCqCwIuoNhGQHqou\ndJIvCqyvyDFj76Plt9aNS2uYw63fjoaJxnNWwm8gEB5i/BC2mxhs54vO832ZeXHJ\nArhWFe1nb+w0+LogUYxlWOVxeCqleGrhGTxlVGUVc/6CFqFdosaunNblq8aMo4AE\nGji6XjY+gfdo4FdLKUUDEGT4f0sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFM/rLqmwlelaSa3y\n9PElVbJqYA/uMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnUZ+o/c0u9eJ26Ry02ttoYaOa3K6+jVlTIAmL8TJAyUm\nM/7fvcewXD8+qB+goQtvv402xt1EZUGYzkHWHUG4qCveo+mtKVjUoUm69T/6ao17\niMLoSLEb587NuipAQCgbGEaUSZoVpAcvNaFoR3pYWVrCpfGCxR58xpV3wVYtfcmN\nxWTVCtDJ6rDzd/+byx1atZ9ugR5O7R7ywktBfpBUe/GQFUXqqLF7GJP2eghLbt1Z\nLs8PxyZzHy2lsi8UugNlGnHJRvZN9ghw42cNlE81QGyBg1+C3+rdaEVQSf1mey9v\nd3WMn5r6Tx+s625AdStTGa7PdnQUU+UGgncVh/U9aQ7Tv5DpjlHsUHjlu4yb+eX3\n/A7i6XUUwbC66y3Km+fTxqq24xHRJnhyjcWXiyCrJ/wnx1WXHed13W7VT+Yk/Qzx\nxXY+Ch7OkeUefd1wamixvTcoAlnaGlDsDsg/QdmY2yWeApHCBxk5QGo2cE9lIHs8\n7W6htWoh61U6C01FnvA0YxY30bhmzUfd3XY1LIqWjEOBFvvxvDPBcb6wRgXi+kMF\nTnDOWnAkJCZ3d8g7QuD0p2DYsnitLOTMkbB4LkLFX6gXAwLo49v3mqkAvbtr2DsL\nsjJzbgNCY5/BSxVee0FgCfaS5oqPU/2qR58lfBqFIwa53a13KF8nTGMR3naxzfg=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 2f572bbadec4d18e0d91ff4375fb468c61b8c7af\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZljuiAslaNNEAAAAAABmTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxNVoXDTI0MTIyMDIxNDkxNVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0yRjU3MkJCQURFQzREMThFMEQ5MUZGNDM3NUZCNDY4QzYxQjhD\nN0FGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxv1mlg1wFzSrNPbb\nq9D9Z0X4cyOC9H9sYqtLtHyRuC+03DWuORKiL5wGajdJp+mv2Ym9euehEzZ7NS2P\n0QY8jImRD+yRM3Qv2NfrUgQPDiGKQ08vjEpJgQBeQ0qR+7YHUDGf8ZfFCm2dA1Bq\nT23I2E1o/YkLQTWWF4RMeUW7fWGzrF81n60x8NoG/ZByrxflu6R+rIsEAESfMh7O\nfHqFQn9huokrIzOp+BnFCEAT1FzXPqrQltgs4dV0OiQQv86EJ0M6lTGEbCJeakDx\n+FRYaqCzmklwqp7VomKRk23aSIb8IuifylrDqBWL8dzUZaXUHcAhowqGDkOF+FF6\nbEfe3Xo88aBoyTFK6yKnx2Ik/sdzMwHByqRpIEGJONnAWCBx02O8qTrJ7gUdknp2\naFBBCYX/hYM5nyDjeGqHUq5RtPjL6YZ+ydStK3n3uXXy0hXUN/Fo31lK3Yz3eNN2\nhSaI2nV2vF2XOJMTtxpUDXXdpFEOsCW8Z07SNhqYxDiM2Yn7jdipN2e5r8UdBeQi\noBfMnUJQKdVASpqYeeKies3T5n2aB+0ciwH0uLtcW+3OT6nHTN1pLbeKiuG5cHB7\nQM9VzwaCGw7y3rnEbXHeo14v4Rc6FSJAhM/8llnAReGYFPiVhm77KRrlt4G7GnWE\n9Jb1n7pH8iM3PlgAxlroCHFlhd8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDc21KrYy23xx5TT\n9kLHEfUkKFo5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAdQU7R9DTOJE77F+jRl9vjeFwu1HOqeo9OeMoJY1/Ag66\ngsg8cCr+6crmcVrwtoHw4bCeE/CIVkRh0XrzNoDnn1XXKY2AuwG3vN0FuxofHwi6\nvHYvEhoypgsWgwxG+5mFXjXcVMaAoHD8oySLvYmIXBNR3AGywCvG4sK0d4mb1c4V\n0Ey+ySoPpyeYP/s6QRSRAaN9rb/T/YkTaqRzGnMYMfq0WQzy+0hLS8jvceR/FcsK\nRd8wBuKc9IdH/aeqDtWDdfGygXKZ5AQavYFh/wU2dj0JKY9ab9JeDGuOIpjo88Oj\nciArzx8V/7XJpxWxLkc7uD6v9nfiHgqqFyqQEvhka2bztZoRUcnGCUr9SBFB5bQE\n6F+IxNTGFKBzrQ+E9LkSOEzbZyvc6clL2VW+kC1l/FTb2B4zpy0OwH4mOoW7rs8G\nXEQkk7hCAwiLtLa/bTsyoDBzJaMkmFN10TySwrLejwp22UQgFeMfvOJ/GAlRd1lJ\nDuPQT21hCgoo03En2wr/X6ZGcBGa2AocOpcg19Sqv9v4c94iwZlxF32ZVis71RW0\n3vZ2TC0ZtNjp4zlXyA7pTvjYHjuTsdwPzcZAVA41Adng7aocDvsU+P8Clt/BAmGT\n+HwSmbA+cdr8WhJPzJ2wZwge3RczaaZA6FBvi13QCGdQghgZMtqEI4HMT29UwPc=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 347c93cabded6168c61fdc8740a7353e46751616\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZzE3FQDQjGTbwAAAAABnDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxN1oXDTI0MTIyMDIxNDkxN1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0zNDdDOTNDQUJERUQ2MTY4QzYxRkRDODc0MEE3MzUzRTQ2NzUx\nNjE2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnc29Yr6ewQjYTeHU\nKHSBe/wiN4KJgC4heMHUx8mOVofuCIOcUhVDN7UDoz5bx7oKpnxCsi6aEdIVP8Y1\nNKI2h8y8jp6X8GXvB8Q3BBdyFmwYwxU6GRAzBcwMk7lWSx2MI50q2MwMvf70l+6M\nT9E7UDMcJVIZAbrhA0iGJ7dcg9cXAcUwgQ57FlOx3RGNhx5Z0haD/kj05zdXoKLg\n0AvuLEVsoEbDfzYNEFuyQHf3oGoLRqMr/YedVQWqQUtGqvEL/x5snOc3Ai+3OoEq\nep3uNpavnOTc8IoYmPAN8kbUSz8t+zj7Hzq6MtVu700vMquOZZLg/MXvQRdwt7hN\nwRGaHPB4iEh7dd7tOdo3vaLjA0MGxtp7sh2TAknGPm7bYBIP8WCqIYiLmGC9R4iL\nuAwGqoob1eAL/IS4qCFbRasKpOINs8orAXQOqbY1zAg5D4DaJI/J1ewh+ExADQ2E\n0nsck7Z7TJj7Sd4uLxffQbHgyyfh7GFl/K6PW2zHiEYEXv9HTMrAAAy8hFIcYCao\nrYx0pagozoYRH+0PpP8Lo3YUeZ8Azh3XH/dKSTOzjnpa2hl3I8fqxiRkg6qT17CR\nfxJXBF61Rm/xMdlhn4LS06RMJRnugLWIR72FKst5CzQuOMOZ9yn8CQ0m6GsrG1Az\nsWok+JnwszW5wdolA7uw7z9aTXMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBPVWlbN8iEzPSFc\n0j/+om356sm4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEABHsIT2dX7uiwCjDRnRPz/vZfluGSGnYFXTnvGMe3NNMw\nZCL/aonhapQqw/bFxTA2DZJyGjP+/wGgTWiLRx5Ahzbx8+46Rr/9hLwfDVcJNU1t\ncAtLUcO33gICuAeEma+ll+js5t2ur5hAqAuk/1l1YBuD8/EsK4cTij/McLQ4ou15\nF7W/0wU8wiBUe9lrOFaR1TYO98Q/hnxpanwcyMz8QnnAL3i9hJqHKDqnKHHY4vIR\nmhID8emHp0CK/Vogrb8HWZAO8vU+0gImf835OtMNrSJM7RjmL37V0Sgf94gYFIsE\nPXYvwHOlvTobUWu50xDMl+T+JoTeaN7lKWXo9zJJWs2Dn5Cxopn2CVnHkQjcu8kQ\n74L+vx4Jrl3arpaFBX3O3tM8OSrfkY/jlnDaKEnSaI7vygar20awcNIet9cy1kYH\n0V70mSdAE40kWiSyxuEQftgc2PopKJVUjZfYjbBFBJclZ6W/AUM+voXCwM/AB/xS\nPUXBpo6Y5pM74WKPf1nZK7SleGXiYyZgGnlwWTt2uPTLY4+tHY2ylms3jjCOrYRs\nIzbRa57XLW3SARzCUdEr6fAH3/W/Jc3YVat38sVvkQXuc8TAB6T7QQH0utKPPbeD\nZGbkyt0N1vnxXu2q0pJzyojbtVSHj8M2rwwYK17u5ELYmBt7I7zZfgclI3JoKNs=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYGJIvhGas10mQAAAAABgTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDkyMDIwMDk1NFoXDTI0MDkyMDIwMDk1NFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB\nOEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqIal0K5MaeUAE2aK\n0mSzLmLeEFRKc8JfmYi8YzWtNHZbCVdAV/ec0rDg1i6cKB2ONgQ1lEuHsqEzh8sa\nEjdj+gTABJRoAEweOXVXyCzDyJcjkXSi4VnJ9p0nk12An5EO+xIkrDzQKI2fWQ+P\ndot4m7eCo1MClN/r7uHh8XP/EQtjMLAkyk6tnhvGX7CBkoq9MukPcpd9MjmwtAaG\nkQ08JIpkTblajRx/VAFdE2xT0JZq8Q6VDsG5dO0FRAajOVY8LujyuQSrjcg/L4WM\nrHz7MJfOfUjWwDMSas0cUzxAfQIORVUf4T17thb2t/wWVNDxvpWkUvGGp59oNdY2\n9XhryZzYgyhkui/Hi1q83LEz2hb3Vi9pJ2lE4r04fHyRIioFVNT6CvKfPQTWvbNX\ncnFlZAg3j0HYC7lbDBhEFpb/WLHsrjRRz4Sf3qms/1jDSwhuNKAFg7T2wHu/sy4s\n2StXD6EkpLYRSgSHwxjdyaRldv7NCrqCW3gx8cE1sviT2S4TCLpPavkg68pgg8mS\nSYGXKo/v1dBq/hDbs19JlSAJy7MrgAzvyL3U/RzpiPEv7w1SNGcU8H/4tzW42e+J\n0gk4c73YCTG6jXDpl+XGzTr9DsjefIw+V1v+p+w4RhcX1e8pWYg1Sz0aBsOOXHo2\nUy4wbqoKx3zsOy9NWP4R6zNvqrkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGhTrcDZxsjgTl8J\n19XWRrR0/PlSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFudveZB4eDO3imhTcehiHt2zar2jkzS3i1byHQte06gz\nsqpDbNdogo/7NsQA9btrUQ68WH6lRo2MoXpNVSCNji4DsHoudcwaACwQOYgCJ4ng\nrbU6ZHpJEZkWCp44S5nK9J5atyoNynzyy/8G8Lb7MwmpFyN+p5kOvb/qsibJ7Vui\n5P7ncEHzYhdHy99pfSlGkkJ+Tay73uuXAZ7lwC+LCzY1RdQM/8Pr4uwkkyYtXSGh\n24aLjxQgVzGb1rtcvw5oRHY3f8UBMRhaoqYC6zw4tbp1dWrPz/AYmxoHIWCuF/Sf\nEWvhzoRzu+6DZHaqtaOmqh8JG1sMLj9+cYihzW24GmeZFhduAN2gHp/0pkxZHN8H\nbTJWXrH5cb+HIvxP240gXADNFNiOqZnSeqoecuWoNS3WBc3JKixyC1G57lPtttQY\nxrV/dVwIQ1oyM0aeKtf8Q82sFq3VAmaOGjG7SCHkTYo9BhuNlcEDcsGK6/T0LUGl\nSbkf3JcNpkbhnW6SxTzAlHv7MAlU4CBvxRWUGzD7ExADGTkEW/eZh2qomxw0gGZR\n9wA29xRu3ds/CBWOXLvHhFDIvRZkiiLUEO1Tstu8puCIwtcjJGlDZL95HmeB8sEQ\nFBlLNq4ph9nfX7EBrrF4LXyryGHK5pPiWcUK5X1favk4uwSCYCYZ8cBc0Q3b/SE=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAmA4J/S31Km5egAAAAACYDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0OFoXDTI1MDMyMTIwMjk0OFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB\nOEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAn01zwYJ2lBnVbOJF\ntCaRbWMxD/8C40AWJc1qRQJV3dwVZQ4N3JxUF0uvmlMmgxszNjnXfX3L7saypNtY\nPNmDpdxa6DgRz+b1KjxUC0ANZ6UzXU47dgNey7E+to6lWRyDJC44bZf8re8K4S9X\n40ET13mynw0JKJL/YNNdwxp7vUhhiQJdpsGt1hBlffNtg1Pg+CES5fpxSvAJSVvn\nVmj+807jGGhJYdrVSJzQX8My3sSCvpsbofP479sgab/7admkuPUfIke6wH6ZAAmi\nCEh3ARSj1wbFRdQQECb+eS88LcfycVaaySd+WQp87re/byBBmuLu9oidl4+YKjuj\nMCocGQjd75u5qqW0OMIqgq13A+Nd5+QKHoG/NVGHNfZfkiLS3/13hH3AbxyDb7vj\nX4Fgsd1zpH83BcyE1mq3Fe9hiHM0OzXITcNbiwXFYA02zY7CXWu+nVm8NkELrNv+\nR0CPNB0pqMNv0AaSQgiaWDpCc9ZNB4VcquqeLCd4OJDtYrRB+X9EA3N2eSUTsErd\nx6csO/99T7s+SlZpr5vVNw+e488f7mGD/gQXBbWQWZYtk55ymM3ChQsED5xK/DCJ\nZYetKe+phiF17l1H9XQEO07vTrhRXbKdp2OTgnYZ1pTmjMIALMzg3LwhXrAuoy8I\n3xLQh22Bo10koraHkcJe3uAvtDECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOp3ludHKhBE8aK0\nvkuT5aIKcR3rMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEABW9FwOSh/WpTw6HE7MdEmGua08jDlQ/L8gb9Zn3L5EQP\nKHK89a1X7eC2t4mOkUhcK7rH5ES6J7o2K8AIvfQQi7kuJPphFQO+epxvNC9DrbsD\nbmGh0yWxvpkjSWxrfYu1cEdOJGFWIcFaiYq0mSAURSloj1Talf7y/14kacmw0q3n\nwkXQFPWEvowQfA71nN6H0GG6Tl7/DApj0qM8vki9+QnRt8kiB/p+cpuCgjLcIpQB\nSKWqoAIQBe/uKCBLQKVPvtXXtz2BY0DXzL25U0e1eDnTN4Kud6wHDyCvXBMNiV3j\n65YfWwqROuQ3bwUeQxoxCtNiUgfaW2uIcEnisljOk7s9mBtng80eOKLSggX3a//g\nRZwODqSoIJLWFHBfvJ1kqozJo9aPVGG5w+DngfjVwRxZU4TJt6Y58IR/KE/mAIuz\n+57zyvEKiCiDbw5uYO4miACNGvEvoq+hYG4iI6gK/yvC4KahwFCi2Bl9rHpIurYh\n+LEduqe04cxBk/PIbcViIfPrW7UbMk92aGJTRWEIeVN6T7mpbSLgW7OPHKR2/ZW0\nhHjhX9LLs4Zg/Al1B8REcRIdP9WCcllX90KIKOaEkrLbTT4ajuHhsbKFVKddc1An\nEVS0Q+Fl19FBrUuUDaUb86fXpQcsVMFXqcN1rjAHUrn60qq/nRbY/x4VESFz6JU=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 40b8682b8d18450a2b06849d9b5cd96f4cddf4be 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeczyC5YV0MCEAAAAAAB5zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyNVoXDTI1MDIwNjIxMzAyNVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC00MEI4NjgyQjhEMTg0NTBBMkIwNjg0OUQ5QjVDRDk2RjRDRERG\nNEJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzMxdjJ++Z91Zdvjl\npW3Q19zKp6UZxiEEngSvoW1tHaWFfhGhM6cKZRpTjFPJ9HS669Bh27f9XKVgulDW\nsw/kZTOLBihJR17bItE1xTWT6i2oHVywnzduAsgZaVSkXYu7Zihj+LvIiSC0qxkU\nqASFVSVq9ytX0bgrMXFZELmVGwTCFGA+K2y+2lsvqw+bhTMy1qwzrcL9h1f8Onbp\nX4fBY1hvDXXxKTCqHMOE/phuo9KG3Np6Lz2+7kz/IVDndlolUKJdDUEVOhgV3rap\nUfmmTVhUkz55mS89w0dxZhcLd4ZSXTnIeagltSymnDEJTLUoOXV6BDyGuvxDP1Vo\nmmKKCdqGU3nRGP80PNzhavbj8UrOwlnEVyDkce9DOD+nIZ++387zNIsFTiykB4d6\nZRxnesnf6fWLZ408KhpRDEE7cqHkVPfpwGXcnPlhBBg+Xzg1DjkNagCFpfRiy+Aj\n+XQz5DvP9qQ81y5X3HrpA3NNcFQf3qyDfQDNgEXxuL5SRuL6l/TWoZ9vHyGhsR9u\nXdnVRI0Y5wy/uQCVB10kkrLtIouK79Qlf0fh6GNB7ayPWHBE0LSB28ipQRluOFWc\nPlKyPAGZOT8NsV0E4pbYP3nlX22Yr34Z18Pu4S07W11lfZQaZ9qluxnEKX2psAGz\ngWMcIwu/hs5uPziW2zSXHY9F1jECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGifELXJZTmOBoh3\njt3Wgm7tWu3fMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAc7NGn9nTT6X1W2eueWtoSWHG1KoWwQ4apCI0S8iwTkP/\nS4q8B0+UoWjMcXTDBGypev1uyKXcQAF7DGmW06IXxqbZ2qJDDcrpgpdYCZyh8xqY\nD0IMZlT6CLcIRUH8VQHv4a0S9BB/o4gC5Hw9yyYzirZt8zGk7e+osMNr5z2xDIYv\nvmIaVDwMRYTix9vILBb5KPgUElWlEr0Zi/HVMLa3p7wAN6pBpAuVjDY4YiXyNcV1\nRx6EdL9+KimiGcxFbiZYGFXH6vE+p1cceBebbOG9pj6QswQUcM4n7f7GIB52IaCL\nrn64v44jAXQ1gDSt0OFiyVowp6o3xsMxPoTYePllqzLRPf7x5S6bTyTtcrBsiSOx\nwf/T1BNlaQccaf2Acx/qDA8VIqWSNBOplW0Ywq1HmJu6ZFF6hTa2+c5h7Tu6ApqK\nobAyg+fMz2865vOfpVgD3c3VD6fRHC1CQSTW9ngF29MP/kNfrDfr9DsB5sECOPb9\n0fxGFltv/z0wlZi2XSn5HiH3FLMtUfMl2voyTQ/3fK7Q71a3+9VdZBWAUMnjCOk4\nnsffAehnq5+kl/gWlALlujSO4tcsGCvrkL9Aj4dGJ01VInXsfQu7nol3ICX5rT3f\nzt/km8zZbh6sITNjgzQebLF4JAlJzbbHSkvA/TPoxGwdiikfCiSYDFgJ894Xumg=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 46f26f96330691e561b72f7a63dce3a0517039fb\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAY6CqJ3bPhxvggAAAAABjjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxMVoXDTI0MTIwNzIxMTcxMVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC00NkYyNkY5NjMzMDY5MUU1NjFCNzJGN0E2M0RDRTNBMDUxNzAz\nOUZCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw2S1CFj7VYhlEfp6\nPsxfVAPMeCVe2osGNQqmUQBL16B9jEiwwmGL0zi0+B8cVZWde1ssiHqVkkzYMK82\nv/E5GR3v1/zUgNYHOwP6ouJ4BfzuttM1rui903z3XdZZU2Dy+gijd4e7yZLN9wot\nuQqeRnqj4ecCquFXsU4Xc+fzLMuLVVChDWZgTHXBejvyCOCFy/B7Enhk4Auiqc8H\nhQ8MVpQE7j/Y1dXu667LowDvjoS0HAZBm1LYtKw3O3EOLjHBrPa87xbnPA9KfUp8\nzC4eCZ24n6O4x5usi6BuXVXJRCTqyervAxslvjJF5bKxL7abfprnD7ELCDZY+Jhx\njAZwjjDNXawsQmllBeFFxR0ru7PERLzLU0upYGiSp2x5oNMwHmDVpmTFwb99kig8\n9YNpA8/vKja+KkxolQl8YVhGnouwv52/q4QJbXsoD16EBxI4uhPa4OUlbjcRlyxi\n9JttUVWtoKcdOjs7hhaDis6yy5Wv2xxV937kmUxfoinjHL5g/5/2qRHuQpW3aek4\n//HZ6FsgSRm5bpty3vXnA9+N5ebPmMyFQtiQVcSXeEwBY+yxU81zAyk2uFcVoTJN\nJ4tvvs3E33cfhPYch3SvXJvkKUDpXdj/NY4VBlIX11NKtMVHw0oyWG57YVOij55T\n2pa6M6afQ1ujz8BKDG/2xrCO+LECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFG/bAV6GUhuh06mV\nPuJs99Qtj7kuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAfOXDZPbDR7wvJUpoTF4opB+YEy73NvItRaAfPCCIoQSI\nUQwVjXsnrQCqVcvGzMqvhdBYUbi/hgknvYP0ecfs76XY7J8Mfz1oHvvZA/XStOv1\nz8DpQdqqICFUWsiGizhvwMD4FZQWZAHsahZadz5wJ7W34DFzGkwxpEwYBdvGrgEz\n4nIxS9JQ7XWjtjlKrVP4UA9punECKX48Z3CWH19bvvgmSnfx1xssHDuKh/QVx6rS\nytZoi1O6+FSj3QqsS1EyS0nNYgR4TKx2G4O+cPH/perQoFtDBL9cIMtcasrQbhTk\nSEc4pJvhCOQXV6BEt8zifjHZ+t2SvQWo8M8lUrOndWo+hLgl5wXgvFNJITCdSdaC\nufVFjhqtAh8h70fAAkJxAM+D4NU+/kVBBUlqVk8kUeKMhQ61C9k9Dqu7jm9ZIQ9e\npl7/LwV0VgrtCPWroRRswFPjss2ovJJtYKLXHzyLYQcDWy/CofjYmIvutdD4VXzW\nqJfF44+HpEUY4B8fL+GoOgfr7byuPciDkFzgLrCn/dceNRCDBd8w72zh6lXvsdmx\nV5BXcNHBXx+kzC/bXV/C34Ce0scCFwXEfWmP5EDptNGZHkTvrp4RcDbMTmW6xyGv\n0eq4nEah51S2nz1rtZwb8oZZu+JDF93nGcjla4PfH5uo0a6swSLp5jDL+x1GiX0=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 5c2920742179bc704db1d8c54c34ca94405617ca 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeMR8u59Iwo3zAAAAAAB4zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyMloXDTI1MDIwNjIxMzAyMlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC01QzI5MjA3NDIxNzlCQzcwNERCMUQ4QzU0QzM0Q0E5NDQwNTYx\nN0NBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp1GZxEAQUOm+hN4s\nC5Orf/rJHYfj7zLgjD7x1iRTCbVMgBcLOMTSptr4LR+rUsG/3eqZVPU5VodDwcxW\nFdsuJlwCazhNQGKVU8XvtTe9Vdm6mNxmzLOykA2AvAymacw6teIg+3SVBPX5YWV3\ny49ReKf8G4mdBNXgT24t6u6BUQpKKQyA94IeMnmlj4Jf68put8gg3FaQ0WrJFS+Q\ndqM73QcZx+Ek+9EEe1xFd7w0RUjJdhB1z4PwoE1B2/yFujsZIujbaMkqPKt/C9hs\nnz3MTYnJCPajdkXi5L0evKRAwfceDBk0SqrSwZZcaNf9HfLx+DCDJaY/9MOz4sE/\nlmOs3FrHWHwIynjALQZ69cdonLxV8+3fBVlT0NBTzouKqMMkBm1SGgGNpgzrtbPu\nI8wWhNnWEVKF20u9V8Nqz+rWk0rWGwdP1ajnwn0K3YUWUWjP7jcJU4x63xg+E27k\ncShxMAztN7/zypoLarmMYsnupR5++J+GAt53krYyhBDO56oAlH/OEF5TOeYpHBRA\nZrpEXfYrrD3jc3hUB08OmQYJnYinXXQ8JvwPPC70gW2gQmnpgaP5HEeA2mq5HI7f\nMIRsBcVbRU/cs/PqIn3fDhMi4XeDRl4k6vbiCN6hH4lu//1yfnVaijEhtIJ8Z5hn\nCSnqxFqzaY3okc09eW8qZUh8gF0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOTOt/LydYw5kX5S\nzHcwzr7BXwE6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjw4SqhhoEk3BmDLWg+cuBScNgNrK+YNQRNW3tRba70en\nQyCIEOVT9/EfXYe6Y9pbZYUE2GEICRprUuxQAFXMAa/MwJCW7+pxncSgf7TcZTBO\nr5K/0lk8XaAIo+wjZA2rKJciS0xYSXfqt/vtXYLyJrI8wY4MM/3PSXIWE9qXLZYL\n/+At+NfVv501yWG5jG9nao0LdkyznyTexi6dO2TPGm6urZEr6PHbKOEm7kjtq/DP\n47WPAX4JQn43x//Fay3rsh6HLgQ7hz6OCqekPQg9BKowJmL/UWJKNWjdRNGUQOmL\nqQqIjUlCM+IDp4Ja+h7X7KEYB8dV/PrJmHhZGCj/WVapS1lbjw6lBaQonuBiBs6f\nlQcuXKDNE9ltguLUCdrkwCujrL/vYNwGnh1BvqkeHEsmxpoTMBE43pQzcgFXiJ9A\nxZ0C4w5qCjq0ZISdKEIJxsJNDM3LVPcNa8yGwyra2Pu7L67Cy771UVx1xNyfjXo/\n3AnnQyoj3eV2IhDyOe72uZBWQfc6IexsUe++qet2ViJxqUAC4pg+1kdDdYxM0ZVd\nFCMigXFQRJUL8w3s3f50dVlVlkkEH5oidrmPDRYM2RoMog0B/nlmyoRPDeXDP8SA\noiLnx17RG7DQLk2HkUEmEcmbmHPb4/q0AYWpI5xIgzOXrM0lyHLQbJeKOSkaGXI=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 5d0815951f5f60638a69e7252f3ec4becd7554b2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAY3oagM+yyLjeAAAAAABjTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxMFoXDTI0MTIwNzIxMTcxMFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC01RDA4MTU5NTFGNUY2MDYzOEE2OUU3MjUyRjNFQzRCRUNENzU1\nNEIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA53AhavR9E2ozZ1EE\nSDOsGCAR74Jw6Ibk/2QA7x1/XscGsHVJpGlSd8Np5DrQwUR79CNKnof20CdfgZQb\nkDYS4DIyiZXtlhysCBw88vh700okwMwtn8bhBkvR98gP5ePRz9k7rDtGuPPdN4e8\n0pKsHaxEXJFXdYnTgWq/XZZ2dvrsHWyTS47tc5ZpEIlJJZWpHE6Okh8R3U1pYnUP\nvhkj2vsCrz6ve87XG79g51lHRH0iD8vaR1tTemt+Anpz/3YsYWE73m1pk/iFI5mC\nty/3ZW6Ost8wdJ2cRnTNHHU1Vl68iWun5TbnL2OFTA/eAv0dJQMFa7QXf96f/iUz\nXRiHfDyj6SLRkUHuGlF0bG66uBTEgyPnf8xIzOQpStMYL4t/396hqInGEql6Mi6M\nvhmqk1gXRkW9v/Skq8qyE89a9LWDd/Zsw8a7mmNi+fAJZHS5DRoI3QdxihiP0B/0\n7ig7ck8yKqNiNjyXqdtZy2ezC2QOftpUQoyCGK7SvHgO9ypaoERhxgGIly3+bixc\niEt6PmKDcPr8C5e6Ovl9HhI9Ec+dUvvxFeo8E2uyzpcUMkqCgt+VfPhz7VesI/GV\n8eLCxDOF+nx1ICNs8xBMwDmiTDFb1Kb9Vdha9mBYWxNkbwz+MpZJdTXnv5sT3w25\naUyGTX1bzT658WZ7trGL1BDm+/MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHTN+6CHYVyAvldX\npn4OwbRGs+h7MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAljC9uUGmSI4Xuw5SVTQSu8/k8fcY4+KubCck1CUEpCg\nP1f2fHdeMFBGHZMImQWFl7O4KmpqRi4lGn48+wRVm6N+4XNZWRAjzn8l/A1t6ioV\nQbRDCZctTm9Efek/u5eTXYoikcIG59qr6SVkR8xX2o12DfLIfjlj/EHEuFjnn7J2\nS95fXQmr15P+w40AR6shl3QgsnEBM3/S8LAG9I3YyFAvikqutqJ4TT58TjbheubD\nd2MJ0lcv6tWSdxBGdUHSCKXoSEI12l3WsVGOKuicLR9x4wTAB1Vat29XtWDh2Qw0\nSc77N4eOXuFjGad7W9xwmRD4HvktECdk2bs8wTBqjre4q4H6Ch52+es7s5wN/neA\nsck0rR1ttSZ7b0Ha2xoNtqxK4IrQvaxyiBkvUpSM/4E0U1Zt0n1k9yvmPOG++vk2\nvmMXmsjpPtMRj7M10qhig+jFBV5IbMWXsqn99vmRaCaYT1UyGTgXqYLM3G1g8hmb\n0y876R9rO521zqD3XDi4Af/YjJhOKBKLjjIaN/FA8eSx0vhMxCnQt8XwxzuICS5h\nCpUMaTjIofym5Tiya+7gsUT4NU7BA7yYBKLoddmyVOXl9KuAcax3VCy/t3Ne6Snh\nL2nGL662tLbMdz/h1AZyUq28n48cHbO+OH2au8dFUbIyHAQrfTTzIyjMgVWR6Ow=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 69146ac3cfb3665c7ae78101cca5c14255ca2bc8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAepx/LwaJlacTwAAAAAB6jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyN1oXDTI1MDIwNjIxMzAyN1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC02OTE0NkFDM0NGQjM2NjVDN0FFNzgxMDFDQ0E1QzE0MjU1Q0Ey\nQkM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzZiYCp8NFzYryZW3\n2fl6yZAu4OuDVdqR6FS/Qf9FjHqSwXBsoM+KLPV8NDF2N9788ji8Lji0Cwwr81EB\neJXlgrxp0P/ceeQ/eFMH53mUGvMnHo5QOBmsP3MNyI52s7pg2BDoKI/0YLM1z6bf\noteJynoCInUjqVm3Hw0Eez+UJFuxurmNkTXArWzZZhroNuBs3udP4PhpWbGQzo0y\nnS226HESyofguOwdppYqW2M4HM0TqPr2rtFBTUyEtqeXtiO8iyX7UtEL5Osvu71O\nnySzlPygyZG0HX9xOt6rCDjeP9kQ4WuDMq4wsgE0AQblgqvHWUh+59qPE9/eoVwt\naPbF2Ilxg2qm0JObsXneeMD/pFOoJ9hKu04WKcA9sUSwIEaPldJDC3R0UWwA6pGe\nOb+OYEWtBD9rBj967pFiV77+yMQOCxmdy0uqXZVUrFCCWAiziMFxdYL601jnLBVE\nLDyansmd4lBuWw6kVk+0Ga9XRvhAQCBP/oHfb2LxqvrE/5YspcgLWzJBNXMQiFl6\nSfuz+vFOvpm4wV2PFmMNXA50KtpEN/cJH208IxRXc8f3UA3X7+2df7Ijh1hnMAS1\nlUpeqzPvLUECxnIiujGWCR0utNrg1DeljBRMuiUPSZfMtqyM0f0x+uSSWkDxUJ+s\nmEbmVfMKEHshbeygwsppMgJS7gECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJKSTU7JQHfefLvA\n2OdUn1fz/3FxMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkJhWCwqwgsWrR7WyCZO5kUnDbVbN7Krl1AETbcX30yJN\nF3nD5EzwQpJlGtO9sLO1DtTJnDVLiYO4oUkYOh8IwNGMEi1njTYO06MAwI919nZn\n6aO5zuFX6oD4g3rEK1pbrDx2HE6k2lkwjMomisnzp+UdVKORojz62MS4PanIxLRk\n4esv6XKfSBpHDh+3jRBSUVO/SNk6fls7ZCrvMRircy/avUPJeN76kdGGOfE5k+ty\nnSiWto42xsUOJw8SVkWo5+GzWEyfBwN+0WSmj97PCG6Khh0CwVoMqvbeulz/wkqt\ndnD3eRBWoWil8zAzyPU3YpeLH/cYJIuEqQi7CKhY/OGKR7XMQuv15INCUSWgiexQ\nFR1Qfd6mBiU2Pp42cZfeP78JzY8iWAp/DhQfNVlDUM6NBK70LaW4TK6sD6Dw9gvD\nQ0Z3OzfnSzKFXWzZqmks6qEUnVCfrH3Ll1ZzQGFPWF+pNKdyOL1z1qPGrOAPXHXM\nbA47iv4Zd6GmdjkL12mbuIhmXTkM2iE7zL5XlUwtVOtUsQH0MO//0fPKdSdx91R1\niRik3zVs1hrC2FEuD+JgqsJgQM3wNjLy8RJq8fnKh+7E17Ngu9H8W12tT7Erjqgp\nCRA7awl0De25Q7C9VZeKj6/ggXdQ2nWOYmfK9MQVCzLq4vAHYxQFxva1o1aU91o=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 7cb4b78e688614be4421c5858f15b96d5eab51ee\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZrDRs0tLqM0rAAAAAABmjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxNloXDTI0MTIyMDIxNDkxNlowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC03Q0I0Qjc4RTY4ODYxNEJFNDQyMUM1ODU4RjE1Qjk2RDVFQUI1\nMUVFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuAtdvdB59xUfhRbo\nQMP41nJ9sasWg+KHa28dWOHTQFDkDIAoWmw5wNvxUW2xx3E/p5glBpZBVVKLoSuM\nriP7JsxKuoXyBrFRqmkk1YEEzUafMQq43jtASwX064rMjojUsEWnJYvKoFj6xQ0s\ntqsMAcLDjPC8ENvaWaZjAubUquyDNCi0QRFxtRocI4bKlQ+s8j1kQqtRjJAoYiWE\n7R2rS3llb5vfw21NumdwxseWjfJN9ENkcX1Dq+cgyBa0ZX/oqkXrSBhtaOmTqCTu\n/VQMQKa6cvpTzfa+nVVzrZvCYMhukdeaG/kCQ6S+YMhAp8bFGpreD2tK/XvFZx3N\nh9Djgv8yqvNjbI1mZre24Uyg8EBOreADY9hmeQWfpFWDdrHrUZS5XBNy/bFWxSF9\n3vwl1S/uhffS4LWL4bdzQY76udcPqm7wM6H9de8orj6DOgTm6cPHvhHUQl/Ak1Xa\ncgcNQU3ALXFZo551N6rdxMzoH6FlymanZw7GuEZra+628ER0iFIRWi/4pbYjHnB4\nKX/oaNBxASMCBRvU8IgpGPecyMDy0z2bBWcK/Pn5l2SmzTf+MjUhnPbKY3TN8g/W\njR0jX1xlnpIuGoUXtjeBtB8h8uGyX9bnXNbVj0opTF7ifCQkYBZOIThtjJTkBd6F\nwwYGwbIFUe0rxaMvO+V8poyhbS8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOJF654rK9YS+FTE\nMgRSkA47Ek/AMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAkxnrG1p4yCEL7NuYf9l8MHD0VN/0AJjaqKFK+665C8o\nhtk82I1IJvQpdYnBkuOYePz9FbHT+wJfRwVNp1swa0vNdVK+/G6Q/n2z4pURWiqF\nHeZt5jHZzeLMI2e7NHNUI6nAfJEBXkLpU8IPMCE605WRraXix9EvZqUR9AdMy1vE\nyK2ntivKckKIyejC9YJDEKsQqZn+nqi5XDtyx2/g2jko3ewrfto6ohtQ8Klxczjw\n05DxSbSbgA/FpNaAXEqgQIrURLSXnJk2siJS/FjOlrsY1NuzKqTSe5chnXecCek8\nqNpNhn9o/W/VLLjdToxvAEFE3SEFaCQYSPqqMjSaZ88t4SHbbNc1m9kVgrb/lB/9\noHrV0IKrqzEV1WmAanpCZAAR4UP1hyebq9b3BJPz8iWKf7Lu9k3ZRPp6DV30xoIf\n0sA59rNkmkTqg/sR/sn+ltpDSqGAKVDa/zR7uTMnHm8Jmb+AJpdLz8iMo2DI3rXc\nQC5ZlUYvcBTtnKf2Sadebd02TcVR9DWihg5XYYrrvhUaXBYDrRlkTPa6DyDJT3Km\nsEuPz5xhKdzTkMcnZG3zhbAm1LI0Gkb1wancRdCHQwKBWhNyG4ciOS9w6YmWfAxB\nrJJ2L4aE0qwcd+gaBCLiCQ+EvLTdArehsphEGeLkIvzmjgWf+yjAsz0lHvem5SQ=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 8343bac2129d78299c4b513cc3de61037bfcc955\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZ0RAuYeSagmNgAAAAABnTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxOFoXDTI0MTIyMDIxNDkxOFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC04MzQzQkFDMjEyOUQ3ODI5OUM0QjUxM0NDM0RFNjEwMzdCRkND\nOTU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArd3H2UWOha7b5vf3\nZrnxPY59u2vo5yhEKc23T6Va23MLYOAUqpMQm/Dbnb8zsd1MZMTYlP2nS4+j0qlW\n1hTNU9O18ZmgRHdGmwSnAD/4CaF7Nz7NRQ7h1LcvjBbuCEP28eLQXbAZRGIl5z/B\nyhGfSHbodlKRjxBVUpn7wQ9xBNziNiVj98B7uO4TfPwB0kr0iqlz+mwW1jR+ZZXS\nZM+3jjJgbZoH5lGD7t4tPOL1gy3mKU+GSBgorstgeLPpYYvnYvsXK72Wk5LFOKKB\ntLldrplbT4yOa/WDp+UjoM70gnFsc3ThkEvJAHJXPrhBWq3uGSGOoW/xifEu+qca\nb1A2DQWcDlcovAkKp8Rhk4Cn0KwkwDzu6KU3j9Ij7S68sFa1AfMr+hzURDPV36XT\nCIeGfbBdz3kU4cm9pgvrVZZle1yhmu1CoOg5ZBYSfl47CsUtbsmgeLh+A0P7O8Ui\nBwf/9PF/CZjEpQu9lyXKiGOgZBtaL8+qLoo4Iuamx1u11FuOAzzRmj2WYQOTkZvM\ny7PX6jgM02lQe3OzCEQIiZWjSzO6Th6VCzlzrt0A1+0E4aSmmke826rhmb/hgodT\nfIjSGfHrYj92ocobomrJdzaeaVzydln8pJfvGOIemflVud9AYaq/2FKadlVF/cPZ\nOPkdW/VF76Il7JZy65m3Q9EYlr8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK/zt7i4rBHF1iBZ\nvplpdbZ+cHOJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAZcB9V5azBzUb3uCfhzX80LSu6NkOE3EH1ZueatY5nmN\nLf/xIWNxiH5sSkaihJxMSC+4xuv6bG3PF/6n7Ek2VKw8+wC27WrZU6Ol2A+Nu9vW\nAHEb8bMeu/E8ZdzQ4Q76pRa1wHcW9TokkQtXvWowzfWJGAP/HChefhKw2i5cwv2k\nS+7ixM0kfbu3ni3JjLqzDQ71EAGavyScYjdH6psiV23vLg1ZXFz9gG1WBbKnLBg5\nV8bfj8TGT8wO3VgpdoMOgeI9+LA23bdLNZfoRlB3SnScw4+yVckWQbmd8S59U1zW\nOpFbKcgWcgUHFE6WvECL553IYxTrQUYpNZJ3Rgpi1W0+WvQt/wopfQ4FQRbZD4mI\noFRc+HuscyI58Hk3K4YKJTtSGiS3HpvPl5kB49O8t7L9WjOxYCRBLHoD2iNMTFy8\n6x0M76OrSPB1gohduLHYb97ciNnNA/lT1t6xbU1FvQ2fDExE0uzKGpwlo0sNuAzY\nbCVNSWtTaFvWZbiOI6FDZbGDQlBvFNlZmdOnNy1VGEOKKy7z3/fxCv1vJ4ql9vXB\nmXP+Xyx9S3yU8+ldf5QAKFcMlcZB7gPvGoLUJ0sdpQ/IQFZ2tdoFoyGUlnb4qz7C\nu8mow/alqbF+/pdrCVqnec4NsZlkBKGTJbC0+Krynj72/xZXI207oib/rK+dj+4=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYB07g4HB2RasgAAAAABgDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDkyMDIwMDk1NFoXDTI0MDkyMDIwMDk1NFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE\nNzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwt0CQy6lJbtd2wmr\nUuXb1rhKxIrsgJdvC7z9gAdQIqSnISw/ZWR3U7ncQpYwx6RgZ+UHPPnCrsdOaoqb\nfTn2hNNYM/KDuMfHfgUtjb1HSJvGJSgXbVmHLuRuzlhsBdr7KR2zBYhWcP5pd09v\nYXS+zsGJw/BHsmL0/W+JAC3+C8Pu/gHOMZiP3c91CbhAdl2wYPT4TmCDY8E/ZikN\nLZ3Tz5Y/0JMGMCyGj4nbRLpEZ9v88CPJogovRmoYo/SOgk7DOZx8yPupPpUc0k+M\nyyTcLmaUHtCUohSTQI/bFV4CXABphE6NLS7o0McWovE141Vky0YNDsp5EJUUnMeU\n/JVOqUVpWn4sLzF5yH9/tb2db57s78izGjoL72dHNZUWh9F1YLls/TYtMa8nwe1t\n7L7Tq8PMDYelR5I4KSMiW9M06mA1DOxmI2+hWV2vb8w6hw2jpizhqgNMZvIH6VUq\n/Kmp8f01f17V4Grwug27Ve+KU0D1E2yADCEyvicQJeb2KLzCArftnU/KESGGujou\nqocQmATm2ScqbSE2AjYWgymDkc8XUwZD65TALTbT52jwCdJeGqQqeQbhH0kP4suM\ntZ0NSIJfvWZ/zGQZABsEIGMn40OwaTy8kR1ZwHqbzzgXdktZCY3GGgFHg696Vt+M\nSBlQaZ9igiwbXw2RdOoKSKmGObkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDy1BUBbk8+JUqcU\n/lxEBomP4rkRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAamefbKHAJ6DAWp2/f/KcPvSPMTM3vdLX5ouSo9a79n+c\nbeH7YMO1Qtr1UolBRY4RU31fsEpCMW9mSDznCq96aPnPx43vJCGfQroO/V6i7eJX\nHYi+LxTn+4wNoXbj0fVsnF7dkXdF25ZQGOsB2mqmyk5BZgA8SBoXJ0t6U5gEqbh9\nVrXX+X3iSIpwmeoES/6tzvu1ExGXjc2OpMp5n0r/bguVziDojGtlkS9xbMxsPEsA\nHwFa5Yz7gJk4oJmTQPo3nJG9P2q2TNmrbGISkjcx5FuhVRMGhAn+QgBTzxDx/jQw\ny267IcYIgngkdoqi0e6MOXl3gVPtVPHVjZKMJYLKOun4Qb4rG/M6yDnjgQIsAwKt\nV6GkVRfHQFZpw8+SJMMWKOv8ZygnMARNF0fF/5XE0DXCZ+J4Xp2jnsFa+HnPj8XO\njMG51x8vpzkvPZeelWAhRwv14F8Ds43GSVF1IAmmluHPzJx85uTzncUmWExDm3Kv\n1JUTMVliUXKrwOxJU4lgbiHgPwmBVwKZHJVjKGDCm82HkPYOqOt9Vx4woMjAQORn\ncBuwMp4YBbjbflxltyy6motCBOKyYKHbxjJHGdoxZelDlrzY1n6nHJSESTNYlN0B\nt6Wr9nn5qsjluphpKhYbDEO8oiXS+jX8OaSt0V5p9v6yqgevVym6doo2nak9QmE=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAl89DNMjCa+gRgAAAAACXzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjk0N1oXDTI1MDMyMTIwMjk0N1owQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE\nNzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzKXEO/ul5NDLydgx\nnEr64MRYlR6Asi2lmJlI45ibNXVq3O2gvgqoRJu3NfRFWUnivm0s0xpU/j5UbsQE\nVehMQvjxYf0nc48MOsJ5gFV9kBD4ElS1J9QoA3cVD5Kcd4GmuUpvnd7RCQY7RMca\nCClwqE1H9fi+P9cC2/dZXGiE60Xqj+f3JtFGzJFOG+x1d/OFxefxqaC9Ob3GGIzU\nAz5bnzAUmZga3exszcHSKKeTJ1l7G3SVc/Qb9d6h+JzfiDJ/IEKPkfCpKbHA2IoC\nViRdozz6Ct/ZFcTnkN36NInVpsRFbUhkMQmIz5s+juc6+n/jeEaz8XKxCEJdMa8H\njTwcbV73BWG5ZV+V/eA99dm1NbICvJ2mpO/AhNP1KEhaoQ1T7xK2koD2FNzOOI8x\nrCBOfdrftOUACjabVpSPXv6vZvnPVn7EPv+WowMxA7R+Q3pyx0ytCbaMWT4M6Q2P\nt89d6uxfQ8EKUMZJjW/dUx8jtE5Q/CrFLq7MLZpAPDFc+C4EhI3bqSLdID4MFOQB\nY1iQCHHAZYPvv/CEIXNVTuu1j+i2tHCv6LgAW09tF4uTtwbpGB7ILHjLnLDQyYT+\n68Rud0MU6/LQtKOCtpEVaThIXV9SG1dQ99+m2HDZ43TGNRzLNcBf/4P17X9RhvRO\nZINr60h9ZriMlLP8ieR6WtSvDHsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFO1TOVS2Mf0M7NWo\nxCMl/i03Fb95MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEnS194k0RTctTV6eC1XTqOOHPqFzrBuSahMCf75G+Wnn\n+RwXxAdkVSyOVC2DAlv8VMz5D0re0HYyxw+7/esWTzEVMNX3T3AzQwDb7bd2H33P\nEB1OIN0e6yrIDU92pZeF/nqLGIzKFHBdKJLf8rGU7KyDWSPB0B+qbAahd1xz2mFs\nglGbf3HocGjQ0Nm0zVMbUgt3FpQyJ1ltD+NG0Gt3ugjerhLkzTJqeLAuIn3ghWG3\nPF0Gg0ar3OroCed2vcAh+/UdwywtO/6Je06bfAPqe2v4wX0J9gyNJJ5h/LtBpjQY\nm7vogdOOIShuXjTHiQj0hOEk18EGX3OIpF6SLns4nLcydWFVv1vXhyKdGh4XYb43\nh+pxcBDmVqvVy0+xDOc38w2rK3lcSxSc3Bo9ai/WSyh5chzKrSNlQfmXGWu50Xk0\nEzgVsZg6gNHousWL2a7r2hqASGl4VMYS+sgzybLefibxReqZk5hdOzCtCpOXd4fW\nmaFvO2VPcXa59cioKToNeKXBOmoqQGI5Ek8jjcuv13x5c+pQ2ut7FKGeEWtl42od\ndShNViCmn7JuS3++IErMQiT8Ws/fRESmai123LXvo/2/k0IzXygphlYqarkF1Agi\nIE2dARdw7Co84Ks2n8Bo0ag+GKltjyMhD4tvzQCQygSlGsB3gBd/ptapjwXHvCk=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid a26ceeac95fa33673219d0c2a77637102fb53ff2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZ5J6uFGPAQ9gwAAAAABnjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxOVoXDTI0MTIyMDIxNDkxOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1BMjZDRUVBQzk1RkEzMzY3MzIxOUQwQzJBNzc2MzcxMDJGQjUz\nRkYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwXMX0Es6C9FFejSC\niGHd0J3oIq1C49MSgX4eOxU1lR/Kc7CM358wMbVM/2ZXGwhoYofvRwXlqqL8n+bL\nDjwt4rLyGnabTCSoqZ4TZFS7EFgh9J36YxjfjgDukhgGOwkz4N9Uq1qSW/zyQIYu\ni1ZnKv8J5UHH1bXZu3JOfTJ1CmJPjJJLR0dCNqLaOuwafnC4kwlwv3iP4UnhqefZ\np0ct+tfLi302vp68+RTylzQb9JvsLax80vd6zEUHezrE3dSk/uPhYwS6BqDGur5u\npGbKdqMOWEpVS72ryae710oCDoo2qZ3KcOU6Tera3noAh24y5Ek6G9vRjCpsYITC\nFJXvS1Pgtlb/qGyJ2naN1DD/g1dFCR0KWO2Q9NqyOrMHpd3UBl4p+zYJAXXsXMbO\nF6G2MZ6iqPtGi9OilS7LWKv3ao2vuCQzsMRM5i2/Vn7LvXbX5tiIZQTyhsSZduh+\n0tWj4bFdQYGyyhuStLow5zVHYYqkES6QJTpGow0+2ccn4SDKTe0m+la86DwAG58t\ncq15K2bfGq78jRgY4CV9NGLlNu/ld1jXZxob3AGkrStUq7H97lpKwslgqJ9yfg+6\n3eQEbuviCNNh6AfZgN1I01wvcsKG+gxF3oJ63wWqLt+Hawz5PCgMtjYTXkAYM1hQ\nd1XyRBWS6YTNGJYgvTd8jS7sQT0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNVuoOGHd1WdIMw8\ngfDm2yAU5F5vMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAG6rbyunqDGKCBXFq9CqiVHJ+mQ05t+iSF4v3U9dEN4Rj\nyxoVx9qYWp7UfQoviGFoPpyV+SH2fL2AFcjexdb77VaW6WCJ5VBoBG6qplX4JZy2\ndZwigZK1AmwBaAjILNqwf3Pnt68hh0h/mYhuBDfnSrXd0MZNmB5SbzL6YuyJd/5A\nv0/pJ+pibj43tWDz59Vrdt3M3NUK0r/V1M5fN2G7Tgtf7kZpV/VAKSk4geW0spKW\nUBGw8SMxYIeTJ5DD5SWah4SaEYVCEizr3Cdn/mzpFbS6ttR9Ab2t2g/rcKWVQVEb\nm3CBCUyWJ12C7NwG1mKjUm4VNLwcmbVmsktMAJ3gkDm+8u7xSL9OeP0a1r0J/OWG\nPf7/HmGh4Srb6yj3d82O9fF5YBV9UDsXq01o1Ee+cPah9m2sC+KInBLSnEBGAY5r\nzJcS2Qqciivbn9SfLWEStnu4OTvR+MpevOYKMudA++wjLWr0K0Eham9/UUwbjBSM\n37vyIN1W181H71HydP1W0xvt4HyevFENTIm2UuTj75ZWRJIIMXTI24Xnl+AzttlF\nwdNUtoaTH0ulJtc7VQhFzhPe1r80ahLt+5PLnKz/pdJ6YZ8twQyZzMzuQyhKOGiT\nQzGNj5MmpV05gsUiqDIZz5Pdz8/oNH2/S0FcTt10Clmrm1laKdZEvsW1K2nUQG8=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid c2ef641c329cb0a9f2eae04bfb10c99b89c34614 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeuFrJsGrLzgcAAAAAAB6zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyOFoXDTI1MDIwNjIxMzAyOFowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1DMkVGNjQxQzMyOUNCMEE5RjJFQUUwNEJGQjEwQzk5Qjg5QzM0\nNjE0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsf/5zbYJctlToaUW\ns7TnRI4k92SikAYuQ/hobsgpi76Ls6gs0ftBOT2O3oeZ3/a6JJ2k9t+pQYMqUq5U\nkH1E1tekFx/BPs9ZiJ1a3cnVrMUu6e2SVcChRnKr0sfJ2c9PmwO5MYBFJXXW1NoN\nGJOz6W7TXRVFQyNdzjSg3Odn+73aOW8rVctQ30EIUQWeOLl50LAQIVSPLV1CjwS7\nEyNhojM5T9iqE3yxjYscC8aSTedn/nSZiXH7hdgAKIPuK6YJ01X0l/BPVmV9JZC7\nxGUiDH96ofGwviwo8h8jP/NGNeWrePwGCYN/WQXesS9SjZNU18BEOiG44HsKd8IR\nDVBorqgZAMewp0RrbUfCUzVa49yQvsieEiH2oYtpRW6aTzbYSyvGP3MzJbg3wALN\nDDNWCMVQYRGCSiBaLQc6H94posRMQvI+Yb6C7ZzKVGJZnoHk3XN5TUYBxHsc1DdS\nBOrT3ncXfMpq+f0KBkuoB7C5b8M/HKjS0Llzq5iW2A6tycVJQDdFEPrbVj6V3Thk\nDtNWolVxNG8w4MDLOPW0AAx8RZUepFwNVVsnh0pBewdhxGKU1RWqnmV7qFeaCLJI\nBw6bIT83TzhSzJDZsVbYo4WCM7KNdPWJlZTj2Rdl/77a9XU14DEJQZkpp65sMi4w\nh7lgi1CVcfTB+QSh0VfbISnXe3UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHjT4jVmyYqJNXDP\nQD/nxqCUQt7TMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAiIa2qqGL5G8Ew2b8N4z1ge1ZTUDrl08Crn1YUypDAMjl\n536Gz5OylsQneEEjq1CXEtWpmXsakKbbAsCLwYvq+6ySH8yKa8EwSVUd0RH5s+cT\nfxnmQ4yXYrejxIsKehfCJFwXnm78gHJL2XYqdQ02TXqg3EsVCRhCou81P0IjQiGC\nYdBnmVol0PuheOEKK1lEVsw0hUg8XVVtzNEuH6ej3BQGaIAinwvltHYJs/lOVPvh\nI3SH7agCGII6P93DL/9Qj0UPdGUP9s2rwiQ0GFSEtaTTwUB8ic8D2+uHbPcOZiC9\nlxXmrtMl6q0v9oypCxp5gNrDdqvuKkn59Q4nWMf+GX5g/UygDbKWdmwVMGE3YcyS\n2fIklW+zqR0ojZOksddi0XpJacVlNS8h3lYwBV7YtnskrBnhy1ASHfXUyTuUv2Jp\nigwHvXn/KltFdvAf1ZcnKugejF9/yihLVNvDsDCGwi/NkfNFvVKwKHg0rk2NP4XZ\nIAzLzDagx8efSocE2QK3vXzJbJSPdIvyBT9Rw7vbkGy6SKmFIy4JaUK5MfwiJFxZ\nXtZysfdQ6KD4qgX8yaSLymZosAtgwcgqUZt57vgfCtp2AGPVvexqUB69SFJZ+wyl\nLvPxh/Il2vXSQX2idg30ZdFcktO+9LQ5ShdbPehvmyqoGWWiLZsVEgpXObXbz4c=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid ce77153b6e110ca4ae2971a09851ef499326202a\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZ/WmjOKcPUG+AAAAAABnzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkxOVoXDTI0MTIyMDIxNDkxOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1DRTc3MTUzQjZFMTEwQ0E0QUUyOTcxQTA5ODUxRUY0OTkzMjYy\nMDJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnQyYPaQgvyk/vqch\nyj0A7Al+NKk7w78mwVv4uoQ+yQJWHNO+UgQNOMP9leYGlnfVL3BmjN8LCiKoNyNZ\non+AoiLviDRsE6kPwvdCd7lB7r/qqDTvOZEdMweKZF7jqNHQtLgpX4p1eGaC8okM\n58ZQZk/GMdxoF/oUSkWjgtrBDlLBATZz1awXcvZWBAj/LtC4vHQ0zC68oa3vqk1L\nPpP/WPXrqaPfWDnhlu/4FbYZMA9MoC9yi008pP3iAEk6wa0c9eUrM54mmvxQV6AY\nbsstiR9YI25oemYiRZDnyzJ/Tu+14XyVvsf2Ng12j3EIO85zf7mQzT0t3NS3wVDG\nmIjkJ8de2t9K5K372mEWj5LwipuHfvQ++4klyfoYvaR4ycvUbSs7orum4RNRo4gZ\n9B74kHTZ0ghRIRCG+Zeewa3Lqj005cdBOz7j99Neo1wdEPxBQX1v/qRc3Sc9lSVN\nVXJ5hqkGHOcEjtWNI+fRTJ1v21uZBKzCKbnegR7LL9Xj9jJjMZCCZGjhiPpLqeLh\nSW5cZctLJZGIA+eSMU0UFwBVVmvfCZkQx1sks4ms/BrIMJHB6m5Dz3mkfmL4eyr2\n/cASpps/73V5HlzsHApG+D3DQ00InLXXh0urReEzDHjTjMzUkdl84hAbS0ys+r03\nozp8ybgoQtfIE/DgglHXSWOzqgcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMzMIwHny8iST35W\n/fxF50/8YnMhMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARD0jbqsA8fAxrmS1I5sjtNeAlUh+XL6nED+7IpefH2YA\nGOycaxjX6jqWZxZkyldUZ7IiYLWmCHKGY/PFt7y9Hj0958x0Dx+KmTugtFjzpY/i\nri4C8vUkZIFbeQecT3PSM9vxZbM3QigLDQRnQReMMAcecGxNHvu+3q/IM/0NOst5\nWq0NpAweHp5A4IZ7c17yp0oeqJaU5YOH1iSn57/OJCQO61juasBX0mmKNDnNXm8t\n/wXwGwSPl+Tps5HyuTKJBK9JM8Jp1gFd+0MiGuZrfzxPJJUXOY+Dyjoal+LPfoCw\nS1fTizc07gPxmwtMQ+t07/yg/nSi6SbWXhGrLPbZ7ygwKCC653E1jyM+jSZ184/J\nwtakxS+0C1W1ukvxFtXGW4jdwCPITfEuRywHK9zMlH322aW07IWqeeEc18vSgQ+c\nGGolFCwtJGQdfgGpyzekVZnYKP6ASaDIdl6YdltTryhZBXf+uPT+Gg+g8lqAUmJs\nTDA155kQMO2oIiEXQq2Wx/buFDsktiytKFQUkCEzHCfW/YwPUQTgE6LY0ZRyO1B8\n6EOAK2UpoLCe60MG9BaClLqNVM2kAhUeaPRXK2YfwYQDwvi53IOele0RyrAkiovv\nZe46E4tXA16GuWCa0FMQEDLulprijXVIGonYNdzPfM2CZlySJM1qquC2/mhfExw=\n-----END CERTIFICATE-----\n\n\nEUS ifx keyid d8a3f556085a68c8aa5d5fe079bcc6e9c6d37764 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAe0aF+W4Bo5YigAAAAAB7TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAyOVoXDTI1MDIwNjIxMzAyOVowQTE/MD0GA1UEAxM2RVVT\nLUlGWC1LRVlJRC1EOEEzRjU1NjA4NUE2OEM4QUE1RDVGRTA3OUJDQzZFOUM2RDM3\nNzY0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuMvnOZiDJkjlhCFD\nF/F1APodbhWNyJJxrpGsUsoV5Ltx+HoVuNr1IykcF4QcRKFLIl59ceijlQ4y8Zcg\nQA5PNNF1NDGuimzvZDO9CUVJxrrjtoSVYtuWDDNWVg8lHYhflDmr7TAmbn4oP99s\nxFZ18qzvR0UuhYoc1ddSYDu8a5BZQqk6im7v5FvkY023GSTqmbz4RWxAWREl5y1V\nNul8quxH6RE/fDld+6CsBiudzRCQNhgc4QDFwiIbKS+VIBIsU97I6hZFDuQuPc/Q\nDLmMQKmxvQ19hCUvEPzXJOCqXi6EIZzi3qbjoGlah7llxMtfcXVLMM2iKmFWsUZ9\n/sTptwqzBsc9WTgTrEGKN51XqmyNtJiEDKopqra49e19/T5nvtWCXIovteqD0rTS\np85gzcWRGa2Wr0toJMpZ3o7Hw1WnSe9xulM0QlIJzEEKTRPmIjRTQRUo2Taej7vj\n6ORmRVWUqHFQroITnZcBsy1J04iuOFCGuQsIEJiVVW1qGMUMImTKSgyD7uuxUgj6\ny2VwYq5eUFK3iHT7WHJsM7SUJCtDo2HlPY06W1VUt9KB/KP7lLcrFSNqJJ0dNNAm\nQ4xYG3aE6Uo5VaeSDVOUgKPGl4kWapM5wxramYZ3RMQucHcng3nG1HRTaKoumULP\nRCWRXo6j2DcEWsouLkXuaWBZ9NsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGPGpzdaUAsXOOAC\nbUQ2BzAgwavoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAWDXwC42s4etnrN2k6m6rVU5zBd1IuC9YdDQGglL2FpTa\nyXyfvCICvPVWzBXPb4kJKwBILuXIJfysVeARo+kHzi4uaZXcJ05s6Os3Dg+76zwC\n1hzluSkL+GRa4ykqeqk4cWXgQuYKXb2IpgRPTT/nagcsAOtIqlNis8QqYqN9zPOY\nj1dj0AzMZOVFWKQb6JPZlml9/n9zXm9H1FjW7BXbjnDgh9KzPbOewmZbHMXKeIBQ\nR8yaselDVQwUy4y0/LriSmube6yo5bx+ierd8vpbhN2uXmKVQ4JAWvA12C2iDdSY\nDMKCYwKv8fPIikbwGGxVfwEAir4aHKRdG137ohJR0xnZBGRNnprW1YD0jnYE8yj5\nW4+sSJCcnGoX6x1gy4sCIMy+QGhMwUAX+8QrUUW5Q4UxOT4JmjdXkf5mUAM7fLmp\n4C+j8um4kpWQgMFvzTniWOXwgWeibR2cywdX/P+VI9abvvk4sqpCoHUa/ZHoh0dp\ncMGpBc8MKAez1FTonUjlYq/f+VuHkpoCdsBaPcykRVdq4yyEPlqu9iAyTzRIVW8z\nX26U9v6kXr+GXDgd9SbWa1dFngaswkcL7Ec62nfqRJcXu2wC7ePUfC6lb1AF4kF0\n8sGIsA5UPF2PVMZUax9fZAAv9K+G2AI2bgmFNM14IIiYe51cEdSFh15kIKLmv6U=\n-----END CERTIFICATE-----\n\n\nEUS intc keyid 17a00575d05e58e3881210bb98b1045bb4c30639\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAY/chjxkIqfWXQAAAAABjzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxMloXDTI0MTIwNzIxMTcxMlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtMTdBMDA1NzVEMDVFNThFMzg4MTIxMEJCOThCMTA0NUJCNEMz\nMDYzOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMayXN4egz7FmHL8\nRA9tIjnh/iz0fJLlyZaX+TbzkpeuByFFA06aflkCDJH+GmGegDzyUkEKpGe9o2Oo\nQP4JLxliv+gDlZ3OaXlY5al8EBrdLp+ORj1TJTeWCkEQ98VI5XpHYO2JCvgqAOO4\nZWcdyGbSQKIq7nrheHMUVSfQ4plVB/Oc+Ggl0TALNFqL/Y6Hrhk52FBCrK2eBfA6\nRzwbOVAAu8DVkOZ+QQN9qeStP9/vkdpvcwEvNkyhMND5qtUsoR09VR8+FCPKaSvP\nwmd+R7Ld1vwFNty2sE/TgZyE96WdqMUkOGxKEHEuvAeRntBPdSW44Wbu7Pf/Cqje\n3pdQ9YTiLyJOEUbugSf0lZNsKqFgtxtu4JR9zoLzUyXSxX4GcreKn4ZWq2/bBNzP\nYHHShOn8GL3Y/GvyOf3laXUpG8xzeEYdrJl/kg/Zcy/45wg3b2tk0pjCzdumZfoN\naT5a8rSof/wmPGjJQBAMU1jo0cliIPt46xXoho9UJfPxMExe6SndUCqdK2AIAaeg\n12CIbu+c3TXaMHJs/ssbTL0mkYI2A2KhlxRmnaqKwDW2dpFlh6KUJsS8xEwxY22w\niDpIaA9s033H3fLW/bbKWdnA4VNMPv2yMoJuhJKLoMszp5sBWx4Lcz+tblTP+466\nOLm9mroUXLfxa18hfrqJKkPRQe6nAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQDKmudOzx1N+wX\nL+ALK2LmK/sLsjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFtVoU17wSMcHvOh9HaIcLVdz6TuIBERHsSEVyruSoEf\nrrcMgZY3ejySz7jPLkmSD6W7Sd5WMFTWeSFZGZuK/vEHcJ6hMSE5wrCUa82AFC+m\nBNWzb7GbApmLBZG1IMfi52xiqIL0JwsAKPNZ2YvnRAW4bDUlPXHClV013VZlR3tV\nmBXIxNHF+6seECZqmXVAV6NG7RiK+zjSj14b7R9V1vCg5RP/yHXixQnEWfxvtxxV\n4XYoAwtAOtO6wt6WkGBs2E0Nqly8mgKPnmOYCk8mKWVxstNEAKWvJZrpikv0voWl\nRSxlSgLHLb+oTmKwb9kLbj9rdErM+GAmbjVALUMNoKZd8jeXwy34/dRbNnzqSkKg\n1qK+GLb1RwYsrwYesPJDqdYJxO/C4Pf5nODHmyKAfemYZKwRB+7poinpGqhDyH/F\ntqc53Dmc5yMc/qwOZM1mwT/HYdkQfuC6uY2ezFQVaT9iRzNVJHMFh3BWTnJmefjH\n6kj9BmR4uZ9iT9CCgDQg7XDbxn4YJFpT7/7CG3W/AQIT+2l7Us7n3bZaG0MMt0ke\nvAqrnqEDLRNZ7A36iKid1Sw0Vc+7q0UyOXedJa50ulrfR6PEyphaeJtePlBvEuCf\nvvmlYyNN7v5vv6L0ROz2FpOWtMbCLplkoX6X7mBZWG0hj11CLvsoXfFsOiaIoRcH\n-----END CERTIFICATE-----\n\n\nEUS intc keyid 9aaf591ee263caae10f57ba04fa8d1dd6613f9eb\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAsWg+ouaZocuNAAAAAACxTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxMVoXDTI1MDUyMjIwMzIxMVowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtOUFBRjU5MUVFMjYzQ0FBRTEwRjU3QkEwNEZBOEQxREQ2NjEz\nRjlFQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKERnCcGtTkmD7f1\nCtug0xZfbhp6zPNLZ4QWv4lfSNsyHEbEC1QxB+l/6EqJLQ6GALaYQwvse1fhxhd9\noFuX2aGZWOONzVdFDuzm4Q7ON4PKQ3RvRk1M5i/cdb5GyC/SxHkXXkGljC7fsCrX\nBi1/MNn3eS5h+/nUf+xOiFKZL/RTT+c8b8P9Pnjum/QvNFj9WcD4XiArzBnYWcAQ\npPvZs3wvUtJqKkXHxmsa5g4dbS8uTMivW20oAUqFeN+UH4vkLalQ/0im5AUpMWgn\nwUamSE6cOTa4t7jI/Npq3YhnG95bIIUEx3HG3iLLCsFV3Ohmwyeomhmw25W7BU2u\n3HLoKTqv0fYhTVTyFQQy7GFBS87jZ/1030FztqT1SitByYjgc/02l6jmP4QoPvY2\nO+DHqfgDGzRAwgS8GnppBu0i5OtIE2HK8KIU2QlgD5wOvROyC9E9IuX+qJyEN6gn\nuaOSDqeB1J73JUZOgBLDC9rszo0xnP6S/kOvJ8cBUv28tjdxXrB2l4XREMJNQZSJ\n6z0YWGZYiS5wK/yPXWrRoOCJndcrfOk05bLKCVwUy8ANDF/O4a4iMbT4IwpWzx7J\nKvjOiSbi0HJKMvRe/Z8fYF5Fndv2WLrYMWIZWpkLTsw/x3di0Q/gyubAViaPHL3U\nCsvtNjSXzLUrWwanrdrfVtdqGyrnAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+UaAiJ+2tks/P\nfXcoMtDUI7N5ojAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEB7j727lUpvV62MC1+R05EWpR0g7Z/Uu/CXBSGnbhyc\n+k8Ofhi6UFOMi+n15vqe5Zmm8gN2ifFw7wK5lDbwZ7EyNT1IPgPv65rxNi9GO4j0\ni3W3ICnezFWwt8SOoFbTmJSql8q4mhfrLyOXAG04kbDCB9H4gDTtjLZwaT1+BKsj\ntWSdVldTpIY8N8u6jXZyhCx2vDBf5P+joBIEzFdCVV/U42v9InQdQqVOlsxprAZe\nXINpCX58/Ve71pjurVt1ryus73E/ZrF/uYKUdWZSgVFzbjeCjiET2POwBwkt5FP5\nc9hWLMoMu59xrCK1bFACGdCVld1uvXn4pVHs5oSFUnw/42vBVOk7C6WtupraX9qq\noQXOuE8/w7P6ZYd3/5FI1XCp9QaG/OsiIXEN8XE2Eb7oBFmQIi/xJ5lpRyyFtAzQ\nV0lgmpqYO3psdfqrXWmyG6rPemHoLu/ZK3AitDUtWTJhTaK9GmQp1APeXZ5JsbmN\nEGcgsASEDFACsdS72Gw5yyPCB15vxlTw/ws5++i4NKZ58G/mPfcbtR34Vg7lwbP7\nyeN27i0RXAEM9B9v73wQbvmuJ5igyDeRy6N4jTAOljeeGS83e9gZGgPnEeM98Qbe\nVBfHi+UZt6+bzHlJ2K2+MWOJGYCmjMIfQS37i5pH6lY7pajMeK8SE8K0eHuvfC3K\n-----END CERTIFICATE-----\n\n\nEUS intc keyid b066d9697f5d3a07b425c10f587cceecf16ffe58\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAu4cDP0+WFkU0wAAAAAC7jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAwNloXDTI2MDkxMDE5MjAwNlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtQjA2NkQ5Njk3RjVEM0EwN0I0MjVDMTBGNTg3Q0NFRUNGMTZG\nRkU1ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJv185zrZvs4LfTe\nQz+e17WrbS0d86563WD+sc5JS6sXNkBD+JbUjSkx8bd0i9ZeAtivqXqmemX/K6Tp\n+5HZCZHmrtqyubeqExF6icyGSfdtA6dvggE7ItTnINhFRItgvjks5YM4QkHYzppw\nZtWa0DFxPkzRfLXwJWz1plYDpZ4zki+jFBVRpITqQ4xvFvtIA2cCbmkIa/p7a9It\nrixkerBYcb89+kqnok0XqthIMWiCbvDgYAXZUrtN2eKs915jLibAlWAh82G0P0/o\nae4bT2lDmYJMreoWGIMrUcB+2I1wVFDCPlYpi3vKvj+ykMdMk+zLMb23fSfiY4Pc\n7PeYCO7YpR1wAZt5wNZZHsyF2GP1a7WYMyx70oIuVe6T1AxWuq/e4I79/s0YW8gL\nvkSfA9dCoCyqQk6/mxazFbUJueZi7KA9W05yUBqEe1zrcHXWJ3gNw1cvf0EbwNfG\nna4beab3Cj3/dRQcizOdXBHfQ5R79tM8txYsk5wFMz643eZbAtz8nmO3UZHeKQv+\n+VoklX7sgwexesPlcuhxsrA0CXPkFvuvi9d7hAMpqantQ8LWJE4J+6Az3pUm1TUm\nVQEiOFZVb197z9bstKkQIhJRYJ4UkkxfBBjnArN+MyKWoS0UV6Q2r9ItS5pdImXL\n5Sunnt5quBhlbpi8ySnwWC7Zec1FAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR0O47u8N0rw+mR\nZvRX47RdTE+KUTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGsrq39bMPHdu3MbypiGeF1YGqSOP3j70j6GPaIzcz2B\nwP4Z12p8DVKf5x3IQgF1pq/Am050E1G9KbV6lwzYlNxeiwzs4/wYoucqOvO/mraX\nvhrARvSaJltuVJj2wQLTrPYnaJ7zrXo2LJRks5Q/PK7vyQu/orWb97w3sFb+v+c4\nohSobk4ajf7nPguRj9R3jfgFIbH9fIDeg3H8oVQopSKev6WjiQXd0rPSGuZqmazb\nUJ1kiXsrzRbj0sd8jeNyGZsM4d4J8jk80WRXfMuc+In8Va8tnPH64YjPYw88FTPF\nIA90XyYG0i3lnjIRmVoA4Js9NWrOkA7nn/bMxzdf+4L9AurDmiwNl90c2oh8+TJL\nQPACSnysyP9L+7mliP5b5LseUgu2Pzmq+xCJ0Jg4Cz9m7JyOD5fkIHPX3PyZwtkr\n2gYLp6lBZJWllcqjsnYbd9squXPSJps8qtFt/TD5HbOJHkgKoAwNvoEhxNaKml8H\njICOayMKwtkPBjaqj0VafaWNjz+VWQAtN9VACaHw6mQaylnbR8EuVmivMukadUc1\nJn377m/JEsxaqLwHqmd9CGrFziFuTJRcC3ymNdvWrks8NcbZxCxVN8TbNO05M1dp\nrp1c6YwTmTWb0SYWo4zJfuwlxgUTuDVT5IyDb4aoqLxKnhkIIeJBMf1av6xxyQEA\n-----END CERTIFICATE-----\n\n\nEUS intc keyid e7083f22152a7492ec59b0c4243437648b15dbb7\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAsY/lib3TLHDigAAAAACxjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxMloXDTI1MDUyMjIwMzIxMlowQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRTcwODNGMjIxNTJBNzQ5MkVDNTlCMEM0MjQzNDM3NjQ4QjE1\nREJCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJygcdLHanufJkYU\nYjV2/0OkoVw+pOjEiBzJdpjYdQOlL6M5eNxSIzwvxk0QOV96V/R9vMsApbMIwBzR\nenI3Jakdv8IRO0firjiDR9pi/YnylNfdnoX/e+butL8bbXzVT8ct5CfaMDV1p0zt\nd+4Rpr6Uqi6ELjC8ZuMjInAsnAaN4kpR+C4Nh9ZXtyNz1bvSmcCinbFbymTk/bxx\nCLtf+QmYxmPJgxAraN5M0/jL8Aw+lXFRgSRTeS9bMEn2nGxnpQxhcfWW9wr2Vu9U\nQCDri7ifa/4Ul6ZGNv2XOYQCkAybpN6qMEN5FEuyq79Q7DZ3yF4i6iB8aqfyrw5x\nBgklIEq3U9+ovud30pwBDGfSp7TLdmyXQ4A8r+R/FLxvsujZr+C2anBpGI+QiF4y\nV73kEGWRVinJeO61tWpDb6cBv7PpLPiDBwg4HLwJTumw54/7xKr3q6tAGRMv+fUx\n5JR7PoVOsjQypu7Lrtdc07rHrB2jDsTeFVe11uEj7WOpEjS4Tqz9LlR2aUnIHBvq\ny8V73qFwR4nPMhTU8kv9mAhh+mFlTw0EnJML7Lx030MMCKmMgizmGrw/n258RHGg\nMUGZeV6pzHW5G7pLj2y6VS6ZtyctME27uxeBuer0/qqqzC1dfh8r3FGGzNc3ucV2\nLsk4dVNLM+g8mJiiA8NFNEAnfqJTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTyqeMuLv06VUsA\n0QrU2MoioIBi6jAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGBoH4kOrAuQwMXZ4rugm2A2gmAAAB9jKpQOW9UxFME7\nZDdnUBJKV3taH8vyHv6Z55585RRhBR02ufjfgtpshXdMngGvGny90miIi3EwPTCf\n/R5SSpyONf7QABZ/DA324Pzi4nfwLpbFj/eQL34J8iL25oLDJPoOMcyaeOjPQMGU\nShlHfwzOqp7AtT1Rn4IJI8fbqxujO4kfn/OndZKvWNNnh0jzRGYlxOQC8yWDMT1B\nw2XJOaeP1cQVzGh8C5eb2ZH5Vs+ybBuTuZ/tw0ghwUfGWWGDBSnWm4yIZ+Ik2/HR\nFdcjdw8nggtbFdOXxh4VCYyMFq/hMsJfR0w8QY3P4pZ5G8Bb3RA7ckSrMtyZBNF7\nX9kuwy272qaWu5lKzys9YYyFeS/0JzCPelURLOn1iKaBVc+4pM1UrdEFWuUSD9oL\nco1ZGoUNytQMj2Z41GOwNkxx4cWXn8VWBr5BJp/KD7D1etYGGeUSjzbSIjbBfWGJ\n7DZQJFObZIKLga5GAmGg1aKyQd3C91CZif0mKC4F/Bhw6VTeNEXV404NDSpzS607\nlowSEeJl/5AtCWQqDLy00Tktv5I1ZL635PLe9dBSF/FDdpr580jVTz8aU/0T7XK0\n3Clz9VRU7WSXcNjdTK/JRFj8/ewVoDHnkJl5Ysje6pwiTb5JGFNlrC9eHKrenJAu\n-----END CERTIFICATE-----\n\n\nEUS intc keyid f307ba33347c283a1e0c1508ad02f5c8ca06f45e\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvDzBPe74D5/EAAAAAAC8DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAwN1oXDTI2MDkxMDE5MjAwN1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRjMwN0JBMzMzNDdDMjgzQTFFMEMxNTA4QUQwMkY1QzhDQTA2\nRjQ1RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK7i66vOe6lKAdk3\nnJBxRM59qJvFWVsCbTmclOFYlmjldETZLy0vxWMX/ykA/KxHH/D7E+9NxyHIiMin\nHpXoknU8YTJjB971uXvI6wx1r7nG0zckHe/qDQpUj8lyq2UX8xmryiQNcQjEtsfK\ndU6ZbnSI6BLJ3GMDUSzGTDkQcY7ztA/C8a2K4H+qw+GRaoGqgdOM7CuQV4EtBucW\n4wGyhYo+H8Xs6wScs+ScAO0slPhyZaIesgMKGxbmIbu1RPfHgSYvLuIcEJjbmzDh\nZa/8pGuGBZBFgnKvCO7GT1BIE0Ki3GM7+6lsndKgHxPqzbR0Wm42S3d8jA0YetG2\ntsJNIuXNH2RpIS/DrqHxmhauuHPUA9joZ/36TahjNR1qCyBaHUE1Ni/cm36Ki7Fv\nmjrj8OOnFtT4EE99UyFniISt2GTSHcMCpadhPUv3JhbpyUiCv9cGT2FLPUHsO/2E\ntm04LP1Vw0KOf+Uq2GQ0+d/R+p5Zk6Q2Njq7RLGxHbIV+XclpOSWa8RBN79fe8PJ\nL1443zgcwtRa7+CEBJkLQbTffLE/w9XNdHVJlEWWf6xddYV/d1uqa7aNLY1q+ZWh\nySUuCHT22RYmVqOa/QB87fG8MvIP0ykCc/000jztZSUYecM3dVXTK/977Fdh6nBU\nmfOHQNZgcdwD8cq8/MPsCRU3JT5RAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT5F9mkAm/cZ++g\nJ+sRwElmMIHC8TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEph0T36OZKg+eX1AHAIvWYCKxudf2vyBc6WOQm7HbRa\nwe7qRk3n5cwa/+/ox3tjFuKcBnWqfiHHjqFCkz8GztR4S9OToRShG2uTNAxdIFbU\npJ1JwJzgy8Cdg66lUafBlDDMEu/KHiX8fQCqnGv75xrR08GMjmB9M8nQBAk/19yI\n9rU44BK1BEsZM5GlsHLVrLpGFKg9JO/txoed4uuMcSvsav503eIYiyFNe0C8Av68\nQ+ZEeJMieKxGMLZAzIXY4CzBdsboN5FPaT1o2YhsFh1CIZf5GVaCWpJOIPzdUNbT\nXXuqQPhFVwqoik1eA29n32I+PT92bOTIXUTSxUZhuPID8cbpOxV5ex4IVtEEE522\nDrR+5I8erabsNUhoi49FLhmGFy6/wzbAhkSFxJLj68+MMNprFNlyvKyrbnlP6BSW\nACveaGRa0bcpmkz2a/GFlijnaeM3TW2boEFBTjqI2KocicE0XP+8NxLn6JVKrnRv\nXexz5ksncOQjTit6ozS38+BJF/vfvegA3AWNbERP6E6pfkqDzwcGxuJB6brEShIs\nufhlimUQg5O/QdwbYhCNRBjemze+NVSTbsqvKvE9a4EWEOnIG4sedRmaOZJnHh47\n82DRtvp3B/FQOKl1QlnYh6R9MRtpammNnNSVMl0BNjtNELX2yzzlgDo2RTEw3ksy\n-----END CERTIFICATE-----\n\n\nEUS intc keyid f6dcae3808326f10a46a62d55fe0a9cbe841a3d4\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAu9qru4sEpDw+AAAAAAC7zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAwN1oXDTI2MDkxMDE5MjAwN1owQjFAMD4GA1UEAxM3RVVT\nLUlOVEMtS0VZSUQtRjZEQ0FFMzgwODMyNkYxMEE0NkE2MkQ1NUZFMEE5Q0JFODQx\nQTNENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKlQJlVxkA+DBNlq\n0grUoktXY8wtAsCQ+o/0TQrjRK4X3owQ2Qt2xb2LLYEDlf200m6LH0sK20vSBwOo\nofOZT0BKLVmsl8BE/yHAqv60pcOEiGqU3vcffAZlf5U2++K/Eft6xUBXF14P4YHe\n1OZVBKnqGr4LPf+plrxPo+YZ2t5q65o+GRo8DylwR0myLWV7uBbEXTcOrBKtUyJ3\nw6NwgKiFDzGIo/+O/tEZ4Smu2M+y3zRQarR4nvkrbkJItTlH54kSxdSpmtH0v67W\n43YmdtunMlni/wi7qomtCjegGKwJ44h5GJqrG3GYEORwAwO+t3Es5sScZxUdDAUJ\n8EnWgViGZpV5CEFx30q4ni1cUHSSzNZLUY1A7HiwhoPe6LxYEOYB4V/YCvTh7ruR\nkJUeadr4ZDK0qaVb3cXXBz1zoQuqb3tFIXZZl9eMWiSG/guWX9GJQxVFmIcOB90W\n0okg+4X+QgLRPjad57Dmc4QYo+oazBN8G/LvKF7M6Vs8GkRaBZMXY1kW812yM7bH\nAICAutJozQGgTPnHleI5QxPX/EgN65jG6cfuRwQUKOJl4cEyVEO6Ev1ChhG0F/ii\nh1AonB2RSIYFr6bWAZ5Ugu9R3KXYSBpF8cMq3dxVViIyMkn2s9c2IPgtEjmy/CWB\nkdnzPtcgvONlBTOmN3yYzhDCeFa9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT6hHlJwUWDvA97\neVy9Z8Q2TCjRbTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFr0lmb2yoXyfXEL42FulRfR13nLUh5bhOAwcilFT6Ea\nu51BY3fV1xboCDrj+vkm7aeB2kjRKR7yDxOh2efA2nlWPXzq+ubysillpE3WKMFG\nQKNsv4VsSiC3/EQmbrXQjA3+3R+4ZPCWwphXXHElukvRmLO6P1K8nE6m9dlZGeWR\nap0BQIMJG65Mf/KeuwNQtCZmn9Jyi8CjhTUvByGFGzBDCsPhs8b8HVapXElxpQNL\n9nbZba1BPv3xawyCOPHSTh3lQ4ytb5lCTVZbHg2uvCR9IhAX928IvG+LKUo78nsI\nWwyn5BGrNKE7jJt6BMgV99aJPHEc4vnZg0/ZswQ5iIG+ix27mOyw0nufl1G1Ye7q\nNBgDfDL00+rAkRPIN5/RRwYclyaVKfVOWlUBp4sDxixYV/MofUwSNyRDApv23dfu\nbF6Wx9LqepdZWBsjTaXYu7k9VIwfdUqK380rKR+DoO2uNas8B1tEIKxpW3BKGIGu\nX9900zm2oXyZ1GgAtE5rGosBU3XOUndS6aTRv2A2AE4mURfy57HDFB83kmX0JJs+\notwwbUW2DpuLtvwwB9K69q8p3rRCGqPzICNK2WEqQ8o1U0kYdxCoftlovAK26IKg\nhZG2MeGiNk23RS4NtQwE7MIAusX8qJPIZWrI4OKqKO7ss9Q/OAT5MMYk6X2RU1aa\n-----END CERTIFICATE-----\n\n\nEUS ntc keyid 1591d4b6eaf98d0104864b6903a48dd0026077d3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjGqiNBrvJ6QVAAAAAACMTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkwOVoXDTI1MDMyMTIwMjkwOVowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3\nN0QzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzXDrKuMW2PE5+yun\nPSWQUZO0RlQ9pT9kuB0Ttz+AreR+MXj7zTeIHsjsgb6tMXA9NgyeCHgA2ux2D0GG\nv+BvTXDHd7mIyM4/kI4t8X7ZHAipKTAVuASu3Y7mAawMEnmhCx1zROo1qgLU+l43\nXuF9Gvl7F45COHMNNy83WY8mbsoGFS2V7EmUmIjRbWfyDTShQu3f2k6N0B8jp/Zn\n9VOT4CNU72AR22sbkgnhdRdd/Buvpq0ChrQCYScKoW78SlAJXQie9xxRf8MF+d21\nm4wt034bq4daLvqcLRVU2uuAoawf7/LMgm9dYKWtrXXr5wvsciN+RgY0VqPpUBex\nxhxq+Wt1wxdarlIUjvWcmWvKhoUtddOx7w/9K5FI8BEZaYvbO8JcakQgxkmmrtbL\n5b7IEUkshN7sYUtSN6muoxJjXrakhs1nAp3LKLAyElLzROoCvZH5wpCYCA51LDAM\neler9preRa7OVlIjEdIQM/EB+VJjOhH7jfj+X22fr370bbtXgmaeEpbEh4CkzGfE\n55hoLFmNR5jayJhAPCrmHWoDI5+XFvFAw+k0cizpmTfb1wZfBqfA9GbuZlb3ni4Q\nJH4M3Jw1G8cFZZMln00MslPLC3auGlp3yX7wGSE1PGO6bod/Ua/MhWu7sZLgArLR\nx5HtnpDDdOFOz8ysD+VyHL5Q6qkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFB0GLu54Vnz9pHJP\nK7RSSIlW0EunMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAinx1JuQ5WJYppnVgVYFW18pUrN8U29xb5bJ/+PQXGii2\nF57OrlZ93UPcVrsBu+Xy+QJ5ubKhuEmyqje7cCQHVt2DsSPockX4Y8dgq1f2TwRw\n/YZ3gvPSzJqmcUSPN0YByS+obxLKKl5uDy0N2HoR3HserYgSZzzmArd2xGLDs53B\nV0HP0fDdw4wfRCt0FSTwZYlNeIuWCtZgA9iy0eoCn/PV85ycFkzPVzsbet7AZcJQ\nJqowhnDP8LDfDLSV2+4eUps40OQkPnc/R/sbRrf/iZvb0y3cpnDbY2V7la/ml0f2\n4emtTTQQQkzKAip/MulPDBgTVvKtREBfvR3hmkRL6nClIYGb2mXcLQd+RK3XlNVW\nu9NxpRV6jPFl93CKlL9Nyco8zzl+lgt5f2wY+k8FU5OmybKet0Nkms4rWFcfVEqU\nsyTYLgT3EwFu4RX3Bl1YGCWCAYL5Xj4cSHYTAYz7T20MaAsmJV+Q0q3hNMCnBaB1\nTXfyuFdq9PNq3jFamb1iTd/IdAr8bjlov7l92F/bsxx7yIRl1ti1SEccmZqC/Fnl\nXf0BhRWIiirMBbOiBU1jHLJUpRZli5wbSKUF6x/IBlFDo05xg+K8YC5XPFLvhlWn\ndkkuEFZsbxrTdqHjOgjdm7GsenWGYAoMl/XPKh/z+rFi4lzQiPH/+CROZjGFvHQ=\n-----END CERTIFICATE-----\n\n\nEUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAXro61VCJKtVFgAAAAABejANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDgwMjE3NTE1NVoXDTI0MDgwMjE3NTE1NVowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1\nNzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxizFnfn1egyOJ6Mu\nT3VY5FecD24kcysaP0TrIl3wHjRySVHW3Bb3rzbp+B0wzAU8jp9exgzs+5fyZyoM\nYsKyI8VO6hdBE8GfZUR9kSlOX3KFgFGzZqzi+kXig5yzYoJTrvfQLN6SxzsWL1l0\ntaz+GqfjCSuqXpy/17l+Hf8FJO9bTHv3kUu7ul3SOrUUD2hAy9n3bVFmQ/hf8mzc\nu1VBQ85gnpjMEZ2HVKgqnk+kv4WQQzbOR3UFd2peVStN808m8nB5PUJjwLVxFZm1\nmWSSaypalxOcUpOe7agwLEleJCy4atkC7iVmY4tpwNE1rcM+0l1BhUGJn2UeT3vW\nMHCz0eJeZVfSzgWTxFWoQFxLJTt9R+m7K7bCu4WAkPfZOjUtvC9YZqesGGQJP59W\nl/8OErDBH1rMf4V/Nn3B6H/vvoYdMhCYXaOTLgEPp9IjMHRT6XkE3+/T/a6jaQcR\nrP1OUWHjGDNRwWWt5jRU4NhZuYwB1aXK43cLtc/h/AFVu2sD5z9NJr8K6oUip8Vw\n8KeKKH7hqMIFDl3A8s2uLmF9A8vxEmxfQoezTAED8AN/w7ZLjzLcrVHxFgjPwQ1y\nQ3DMU/sp7dkLMU5809p4OHRx4WpF5wQ7+rh6LCKD+lyIwhF5wx4mJPXY7+mElQpY\nl0Pc/Wn75IG5VnvI8PQUaP5pCfUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJehpIeAAYGVmmY1\nVYxaisMMNOdsMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEASqgjS0E/ZS6uOWaCjueIzgyhdPoq9CUmDDRdw43WDRIZ\nn5ZNmTfYao8TtNmqA0RUy5nAKKZ/ClM8qlsxqCdkEggixE4ltkWOvyr6kqk91iOS\nRWuGYyU5bR3XF7S+XjGxz7oDBDkw+H2p2ZteAhDCkNQjM4hPfykKFfbpr9x2Rg6X\nNtLDiBlG1B7Lj4BqRrMjcxdAKjO+Fc6pn/17yR1c+12wKmQTna+il0YC1PQirKFv\nekUyYieCximqmjOsYR7xeUBZ/t81PNRH5mb/QWqFqgNz7DRXFFHsMX6lwdlT4yby\nnuIMu0Xwhnq6xrJyLucKDfJJ1uIudXSieZfm+7mJ4wb6kv/hFSluGZ2W8grTXCm/\na1L2hYxVa9b5XD71OeQDbiT3C3oe47eJvez3Ir4hptERS/pc2QolQTnBk2j/QfE7\nUgz0ShaA0LRAsyg29TPE0EDLofAbRnJzI50bVueTAxTuBQc4YFW2L8UH1G2jxOnS\nWFRCC/z62AyYFzPsD2GSaJTRqw3dnh357S+H+u2L6mModMjOkRRT9OOj41N2oEit\niOtoELO3mtmLLBLy/oCWADbJSQAMDG1Q1JyYjqhLgDOqsr4HsejuqWu8eIYNOg+i\nkW4plyMJnb5Hs0H2hVgRBsfIHpOc3FHC2mTMPFvYfED+FsyOUSx7hLlBYnix/GQ=\n-----END CERTIFICATE-----\n\n\nEUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAm+aT1VMuZQTgQAAAAACbzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwMFoXDTI1MDMyMTIwMzAwMFowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1\nNzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0en2pJ/IxDvcecmV\nyUZGzxoBiZUNfm/yyp1r/Rr6Vtg2E6ibDbjnCwb2DNQJqiUAF8+GtaW1VukYYKk4\ncxO3PUb9ceI2cA/v7dJXvOh9bxhi9iHpdNbPDIM3PpHVS2Tq3cl4mOLTzORAjNqG\nkfx7Shm6fKqVklCCsgeqsrcKthQv5LJDBgduVXAvwZmMDHFl6uxO/Exnzvij2bDl\nnpMGera4637VP1dUKcAeKePzNfg2f6wuBBAeDbX1rRhLAC3+uL//q0vZTH/10lRS\nTtDTMSoaqrmIC/Pr2lZvRj3+sPRdpQs+Y/d1WM0pHEixI749HdxtVmN6wuZFbmND\nZgX8LFUR3WOyH4hQOPAlTkvkXp2JZ4IRcCURQg7Jxg6OEQkKIS5LLF8sxVMXcXyE\nb90dN+uzq2dzIMhYNHUeohCVhkjY0CLYINAsaaAEJSrHDiXdDljCuViwDi/TSzqa\njbrhYf+tGgFicLcZ2IXKBrYJfLvHWyMALvQRWx1NxMBSjR2CiwUmKJEyTy3VQpDV\ngWFW1GggR3UVbZFOqZ6O6UsXRsr1qNhLMBe+JaHKC1q7oO7fkZNcCjNpLKcMVq8z\nrhyCWjaJx7tD63/wVn1Ef1O+OaYSr5YeHCNbvYq/4OxmRTto1okuJzy4XSX8SBPW\nAu0oLBwNBACToZpqQaj7grwzS+kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPHpo8CVyttIkDcU\nZ/bW+RX9SeW5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAETYPUCpA6Oc+xBWTT6gJ/3Mecfw17FHyu/tbuI+GQb9S\n2GBt+RhNQg6UTFygbIr7/olKH5eHQrHXder5ZlvztMY9AKuCfGTGnkA84K3Ts+z8\noE6JlnYG+RpdY+AL93HvYnL8ZWgtLlZkXRgZMg+nuoflKKePopGd+Y2YT45ELzTl\nf/zXvm07zwWvybrDXbA9h+oFXpLPrr98dU8N3sw5kpczR++0y/aveVS1c6YalbWN\nyfzjmXGyJrKeLLKg9Az4vB75aXg/2ig4APC36Nu/UloxXvm/1SQ9Kfl8qVSy3g0K\nTFxmj1ZzYKLaziu26qW1Hg68p9kzwfDL66esrZ0hTqSMImY47Hzstrnc2kRDwT5T\nFeGzaexBXFT+fd0sf8zcxISCvcdQEh4QybxHw+SqElgZNl6zdaA2+XOfguvslAlZ\njnRy5ycEcDb/zgyA5w2dxQs2NFEIXK1tRC0H9v6wSSYz5pLT0wNvTeWKfNU4AWVS\nNQd3L1NyIXEkeUUZd+5p2FhunkJ+U5F3wOlbAHMgFAmOclBs87EOtR77QOFzY20+\n8fx2paeeAmkDLqJm0joOEdCpcrRREUAmG1xlt7xSvvG32C03SN1r5mASlAMCAukB\n2vDkVStYB5mVAC1dRQsnc/I6xcMj2BuYMkSDhHhrrebdrkR1gZ+Ni4sIDw7KHT0=\n-----END CERTIFICATE-----\n\n\nEUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAXvh3ypb0eTPegAAAAABezANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDgwMjE3NTE1NloXDTI0MDgwMjE3NTE1NlowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0\nNzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5GZWRrhChWOrEnuA\npcH6Y8zgL5sZol/Jhwg8fx5q/cd7gfqYFqw1Cz7p1hHW8cNT54EsLMXyHxImzAVr\nSiAcgvNOH7JpyDTM1JDue1aLwOZFsGBGxTBK9LY7TwOJyRGMwiFgazNa4337EYck\nSrIMGykKsXiv2Af9RNKQgp+aeLNNHcnEUVM/lhutixsR75QTPFwQC8UUIP6AS2w5\nytuLlHxAjbDRTFkPkgiAa1KeFmKLSkpBldwEvnvJhejzmj+j7qZ4leGHhbjJqZEK\nlEtKlytNxbGsVKMf6Nvor0Tgg3MCFbkP8y1HY/rauy6AYNxmsTQZCM7RZtAF2CyA\ni6b7ZDdyYJCM9VHcc+U4FP/DF69sSOr+oSnad6TbCaLBL8b07R5gapvIIOclVFvE\nPrfGIpldvY/+blhpK5OePldYn/bmgHlub1DmFaNt9nEp8udTcXrIOskxlrguwFI3\nUwq0xC3Sz7iha/c7L5GbPehWvSlHeXRRM5omx5R8N+AUYjsm1EjOEkTMLJGHCbGM\ne0NsPpv3FdcQqinpNoTs08YcxsADBassJWGbJSzaWs9V46gReh2PgQoruhdWg3Z4\nU3Fp13Gq/3E0l998SqfiftrWS7+BCqSnkmqWEf+alorcpNU1eIinU/rPtjYVWI3v\ntXYj/u2VLdbG+ilMuFxPre7dgyUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKEnCgBZ1WyeLkZB\nAWY+AQ8GfqbBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAP3Jqbci9LfFN0Fo2j4D2XwT9Fyh6a0ARRuOzWGmfMz+v\nhzT26eiQOk4BXhMEtanCjrNjY8/qUrorRWafw4pVjZiGoogMxh63adKIewmvg9sg\nZG1eURau+U5pw9chFVk1AJu4EnGndc7xKQ7iJkc+DAdCNAqM1Ez4afeyjeAV3CDf\nAqr5Dj5dpI6+g8MGvjwX+9EYG/pQg2hYjqm5iNe5QTBebpS1CfdEltTC3CU68c33\nZ0esuUqiR2gfGgD73hhFqGYMzxD62uihUD7ki/IvAZ/Bqa2ujpDrpFUnEh7YWzyD\nQepF14ZZt1mu5IxypVyqwhfB2Ff1ouqDX0rndUZYwqbShaalthiSDUspITrKPY6k\nOrohxYsGzPIhyYI9HwiIIf8d3ABYAKsPqcsgImEGT7RxG9A7HFwDZ4XPmYsM3G54\nNKv6DxbqAMiwMrvFPES1KPMAQSehKuD9RE/pX3W1OYaIaU51bPR7DCmmKGwo09QP\nU4W6J3u9F5T6ay3H8wYsJmMLMRhUhs0FKvmqEV1NVRkgToQK1ubkWEkPwbOPSZhH\nVkIZ/iSIt2Q9R0JrSMLv0vJNzKDvkkXqVP8JTYIGUailx9DMrq1hrrBZv4mbA2K4\nyTRSvHoHykfh7FiJbduRl73MVGw7JMJHRTSuX3ooUsw5zhsXfwZU6TNXwMr7rWA=\n-----END CERTIFICATE-----\n\n\nEUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAnDvB5f8m1gXpwAAAAACcDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwMVoXDTI1MDMyMTIwMzAwMVowQTE/MD0GA1UEAxM2RVVT\nLU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0\nNzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr2C4AaMpHp3xv4GE\neODWbPUP2rXcvCiE1KM+OHUq84P4fjk+AUT1tlsrCj/6Udh0RfMDl4U7E6KxmrUU\nBc4TI1pnY8B4AX9xhEzTReZv3RcFFTM9n7Sgb0VLMrJMy/tF4bi7FiNQK8B3ndGc\nO1cxTL6rlwIdN9R1eIJLV7dW/Z8PoAo5xbe1YuiO2eZaF77R1QLTt2qZCCZlRD9W\n32JIOG5l4YGqG5n/sU7P/ZFvX20pcYZkHNx5I2GOXWa4GWwuj3jOA6Vdh3hWjUeb\nQt/QXQd32W/dhpHQMTYWz/YNBHcjveQHVplRKchRCpaA5wCagV6/dK8aWtw8oxuh\ne+LQ0QG3yaZ5U7sZFI+CKGYfEjDOt0on0+fqV3ffsBFIb/tyZXHBHlt7XjuOq8ku\nn3LVzck4yMl547sKBm1PTMfTYkfIGs11Pk08fa+Tog62Km3DGnWBo+LYepmVFEMn\nExCCKswxxYjtEBKHj3nt5K5gSkTEM7s55qijpnVeyYkMWh6rTnIAV+eM1tVwUbBE\n4xVmDra/D0UVnmQm9gJc9/0hCsathvXe6O+LgOJ9kx0OzblEnMOEVUu4VXLUPyUX\nXkOTEnKBOyjBLIzfI3YTkBVyTBW4Zl3Y6yUB+ew7IZisvBgfXify3UEMaVp04KE+\nmepipINN1NmZJ5PjAxuNqYebv00CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDNpwso/h5JRhYp6\n1mod4WkAxEaoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAH1OygGMJuCtoF9F6AoJibtRnklMaNjWNzRIi2PqNti9r\nmAj8RO504aVdPqFsLNzqlRmPFVj5cblywoZJV5yzP0pwdIIyLoY/aSIZJuD1QtGF\nJTZ7p8mFEFlSt0IwO7h87+cdwpxdRFooArTKb5PBdm3F5MwPOjfS2qvckogt6cPW\nL/kYU0ZXxkozIjIHXNe8O1kTTdikrHlT7IiIztJkm8LCfKCkmjM3VpGIbY5nNt9b\nI/7aN7KCUvJnG+KH91xH3D2dvRZhq7uVPdradoBuTG/RGyXd70A9utq8W1jGRnf3\nEWAyNg9Pwf/2JaA8dvs58F+KI4+q4TkUivAGsKdQT+4PX0O5E+pMQL/NmwlReiMX\ndnskct/SmkZoNkfpS5lCpEcGIXHlc9tb6ygQuvgNVa568B/YPecBQG+tuU8OV4Ut\nUrxJOrlXKGlO3ZxZ2YtAdUUqaNulVMN1gRU8sK6b2+W8GpoB2uevZ2Wuk1sUy6ty\nTdJq52xfzZipbznQzxC0tVQErLd7EV5S2kpGLycOANECPjB0Svzfu3D67Qied00a\n9dMUGdBHo1RTUn/rnOzf5ekdyVrGXknYRJiaVksjaVRliv4MjuyAAp0FXb89c/1s\nvcA0MjSNXFO1Evrq67DLm527WSXRHc93NcsSWtODpAVLu9QTT5xXAk8zDJHXqrc=\n-----END CERTIFICATE-----\n\n\nEkMfrCA001\n==========\n-----BEGIN CERTIFICATE-----\nMIIDNDCCArmgAwIBAgICEAAwCgYIKoZIzj0EAwMwazELMAkGA1UEBhMCQ04xITAf\nBgNVBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9u\neiBUUE0gRGV2aWNlMRwwGgYDVQQDDBNOYXRpb256IFRQTSBSb290IENBMB4XDTE3\nMDUxMzAwMDAwMFoXDTM3MDUxMzAwMDAwMFoweDELMAkGA1UEBhMCQ04xITAfBgNV\nBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9ueiBU\nUE0gRGV2aWNlMSkwJwYDVQQDDCBOYXRpb256IFRQTSBNYW51ZmFjdHVyaW5nIENB\nIDAwMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABA8ri4sMjK5RoF9LOA8eZs9ZHKJ1\ndXT/w28Vtwe6yBA4Op5w0n0o3+9NPPKJfsw1YDoeKZ9kwvpxTVM7kBtpKOw6NRRq\nbUAkzAfYqIwpHPPhN25JSOXhl3bn36dSCfUCfqOCASEwggEdMEsGCCsGAQUFBwEB\nBD8wPTA7BggrBgEFBQcwAoYvaHR0cDovL3BraS5uYXRpb256LmNvbS5jbi9Fa1Jv\nb3RDQS9Fa1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAIsvu1ddwYPKDPp1TdrqLwwjNm6\nMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wa2kubmF0aW9uei5jb20uY24vRWtS\nb290Q0EvRWtSb290Q0EuY3JsMBYGA1UdIAQPMA0wCwYJKoEcho0hAQUBMB8GA1Ud\nIwQYMBaAFDq8/wjfXgEMK2QHi8fOlQb0CP3kMBAGA1UdJQQJMAcGBWeBBQgBMA4G\nA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMDA2kA\nMGYCMQC3Z7rH2wyIAhKM/2TopTbWUzrTTlwyjHw1ShOcovNEMgevVM/+AV1SAGSL\n+n3LengCMQCYnzH/Wk4o4+0lOrnUDLNT4L7N6d3IIFGs0XARk1S/RCBoyGSlHUP3\n7JhNd0voDIc=\n-----END CERTIFICATE-----\n\n\nEkMfrCA002\n==========\n-----BEGIN CERTIFICATE-----\nMIIDMzCCArmgAwIBAgICEAEwCgYIKoZIzj0EAwMwazELMAkGA1UEBhMCQ04xITAf\nBgNVBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9u\neiBUUE0gRGV2aWNlMRwwGgYDVQQDDBNOYXRpb256IFRQTSBSb290IENBMB4XDTE3\nMDUxNDAwMDAwMFoXDTM3MDUxNDAwMDAwMFoweDELMAkGA1UEBhMCQ04xITAfBgNV\nBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9ueiBU\nUE0gRGV2aWNlMSkwJwYDVQQDDCBOYXRpb256IFRQTSBNYW51ZmFjdHVyaW5nIENB\nIDAwMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABLq7H/y6uXdkXZWYlGAHJGjaPsS6\ncnLxp+oMnOQhr/wuTviTiCWA7gFaPOeEg5JSC944VG54M+JS0jKnlM38CMPWBKQQ\nnNEaWWMkJbhI/DychOqZ9bHVN0DmsrBWeSzFdKOCASEwggEdMEsGCCsGAQUFBwEB\nBD8wPTA7BggrBgEFBQcwAoYvaHR0cDovL3BraS5uYXRpb256LmNvbS5jbi9Fa1Jv\nb3RDQS9Fa1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAPRzeQ46j2zTZQxgcHNUX1ogGLv\nMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wa2kubmF0aW9uei5jb20uY24vRWtS\nb290Q0EvRWtSb290Q0EuY3JsMBYGA1UdIAQPMA0wCwYJKoEcho0hAQUBMB8GA1Ud\nIwQYMBaAFDq8/wjfXgEMK2QHi8fOlQb0CP3kMBAGA1UdJQQJMAcGBWeBBQgBMA4G\nA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMDA2gA\nMGUCMFWbhtvZOP+xqrxC2N5ArgiBBfheFTWM5rectLY50LQJpOMaiVSFs72PUrhz\nIFX6ewIxAPL7H/hDyflrnB1kUrcbMaRxjuV8xP6h6bT6hrz5x4Y+nORKkxbz2KLU\nG3zS/IDHOQ==\n-----END CERTIFICATE-----\n\n\nEkMfrCA003\n==========\n-----BEGIN CERTIFICATE-----\nMIIDMzCCArmgAwIBAgICEAIwCgYIKoZIzj0EAwMwazELMAkGA1UEBhMCQ04xITAf\nBgNVBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9u\neiBUUE0gRGV2aWNlMRwwGgYDVQQDDBNOYXRpb256IFRQTSBSb290IENBMB4XDTE3\nMDUxNTAwMDAwMFoXDTM3MDUxNTAwMDAwMFoweDELMAkGA1UEBhMCQ04xITAfBgNV\nBAoMGE5hdGlvbnogVGVjaG5vbG9naWVzIEluYzEbMBkGA1UECwwSTmF0aW9ueiBU\nUE0gRGV2aWNlMSkwJwYDVQQDDCBOYXRpb256IFRQTSBNYW51ZmFjdHVyaW5nIENB\nIDAwMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABCtznQzLxTR4YGov53b3NXkjNBcb\niWeC7XsukpYkm61dxCw+bsP+jm1soaN9/WDcodzN8hlBFVYWwL79K+S5w9Xojnik\nrrnadWfCJ/LwmY1esyjQEmSbCXiukCZGfB8Nq6OCASEwggEdMEsGCCsGAQUFBwEB\nBD8wPTA7BggrBgEFBQcwAoYvaHR0cDovL3BraS5uYXRpb256LmNvbS5jbi9Fa1Jv\nb3RDQS9Fa1Jvb3RDQS5jcnQwHQYDVR0OBBYEFOuy9OMS5lKcTtDNtoIoWArlID1F\nMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9wa2kubmF0aW9uei5jb20uY24vRWtS\nb290Q0EvRWtSb290Q0EuY3JsMBYGA1UdIAQPMA0wCwYJKoEcho0hAQUBMB8GA1Ud\nIwQYMBaAFDq8/wjfXgEMK2QHi8fOlQb0CP3kMBAGA1UdJQQJMAcGBWeBBQgBMA4G\nA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMAoGCCqGSM49BAMDA2gA\nMGUCMBFkhoH7ATgC8Z9QAsWJ6YZzI9wsXMcLjytBY1Ae9gWkFQEnfrx43gd+/pRl\n2Mpy5AIxANhHc4NyRsFsZ828jOUthQIH0A8rckSDwNkoGWGVAuny/S9Gww6k5EM4\nEwQq9W0Syw==\n-----END CERTIFICATE-----\n\n\nEkRootCA\n========\n-----BEGIN CERTIFICATE-----\nMIICRDCCAcqgAwIBAgIBATAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJDTjEhMB8G\nA1UECgwYTmF0aW9ueiBUZWNobm9sb2dpZXMgSW5jMRswGQYDVQQLDBJOYXRpb256\nIFRQTSBEZXZpY2UxHDAaBgNVBAMME05hdGlvbnogVFBNIFJvb3QgQ0EwHhcNMTcw\nNTEyMDAwMDAwWhcNNDcwNTEzMDAwMDAwWjBrMQswCQYDVQQGEwJDTjEhMB8GA1UE\nCgwYTmF0aW9ueiBUZWNobm9sb2dpZXMgSW5jMRswGQYDVQQLDBJOYXRpb256IFRQ\nTSBEZXZpY2UxHDAaBgNVBAMME05hdGlvbnogVFBNIFJvb3QgQ0EwdjAQBgcqhkjO\nPQIBBgUrgQQAIgNiAATvuDTN8TNvp3A9fSjWpDARLmvz7ItQrDq/mmuzvzInwQfs\nYKUUJza4MXB3yS0PH1jjv1YMvaIBIalAgc+kahScQUy6W2fy6hd36pazmc/vQfG3\nGdhw56gGwRHx4rn4TuqjQjBAMB0GA1UdDgQWBBQ6vP8I314BDCtkB4vHzpUG9Aj9\n5DAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo\nADBlAjApzqSmd4cCMKC7slJ4NE/7zweXZx89JzSEnEWGcq78jbbXCw6yM+R4nCNX\nphflI9QCMQCeFOAvyR+DQvThfGFINABej+1zeDVIjuZHat3FHVyV0UQVClPgMlZu\nTntipXwGOVY=\n-----END CERTIFICATE-----\n\n\nGLKEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDxDCCA2qgAwIBAgIUeJCm5DJJ3LZLjf31LBZG2MOb7gswCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTYw\nNDI1MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEdMS19F\nUElEX1BST0QgIHBpZDo3MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEdPvHsaWD2zyRR1J7mw9BrOWxq/uUKsIcktxwUGPA\nhHiCK/Y43Vv7ndo5XwSAIsOyP564zLeocOMp8RS+lj0L0KOCAZwwggGYMB8GA1Ud\nIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBRRxzy838mQqmd0\nF81feLo31KjXMTASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT\nBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEw\nVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50\nL0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcB\nAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29u\ndGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBC\noECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2Nl\ncnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0gAMEUCIHrLbdmf3dL7SIiA\n7Fntln2cX/Kg4oOxVpH5MJhiSaDRAiEAtsITmuEnCPCT0Xrelv/xNm1vD3VYOPLG\nT4O4Jh5soec=\n-----END CERTIFICATE-----\n\n\nGlobalSign Trusted Computing CA\n===============================\n-----BEGIN CERTIFICATE-----\nMIID1zCCAr+gAwIBAgILBAAAAAABIBkJGa4wDQYJKoZIhvcNAQELBQAwgYcxOzA5\nBgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg\nQXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTMwMQYDVQQDEypHbG9iYWxT\naWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIFJvb3QgQ0EwHhcNMDkwMzE4MTAw\nMDAwWhcNNDkwMzE4MTAwMDAwWjCBhzE7MDkGA1UECxMyR2xvYmFsU2lnbiBUcnVz\ndGVkIENvbXB1dGluZyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxEzARBgNVBAoTCkds\nb2JhbFNpZ24xMzAxBgNVBAMTKkdsb2JhbFNpZ24gVHJ1c3RlZCBQbGF0Zm9ybSBN\nb2R1bGUgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPi3\nGi0wHyTT7dq24caFAp31gXFDvALRGJrMiP+TunIYPacYD8eBVSNEiVoCUcVfYxzl\n/DPTxmRyGXgQM8CVh9THrxDTW7N2PSAoZ7fvlmjTiBL/IQ7m1F+9wGI/FuaMTphz\nw6lBda7HFlIYKTbM/vz24axCHLzJ8Xir2L889D9MMIerBRqouVsDGauH+TIOdw4o\nIGKhorqfsDro57JHwViMWlbB1Ogad7PBX5X/e9GDNdZTdo4c0bZnKO+dEtzEgKCh\nJmQ53Mxa9y4xPMGRRnjLsyxuM99vkkYXy7rnxctSo7GtGIJJVabNuXZ0peaY9ku0\nCUgKAsQndLkTHz8bIh0CAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB\n/wQFMAMBAf8wHQYDVR0OBBYEFB4jY/CFtfYlTu0awFC+ZXzH1BV6MA0GCSqGSIb3\nDQEBCwUAA4IBAQCVb7lI4d49u7EtCX03/rUCCiaZ64NMxxqRmcSVdUx6yRrbl8NN\nFNr6ym2kTvwe1+JkTCiDxKzJsOR/jcPczAFiYpFbZQYLA6RK0bzbL9RGcaw5LLhY\no/flqsu3N2/HNesWbekoxLosP6NLGEOnpj1B+R3y7HCQq/08U5l3Ete6TRKTAavc\n0mty+uCFtLXf+tirl7xSaIGD0LwcYNdzLEB9g4je6FQSWL0QOXb+zR755QYupZAw\nG1PnOgYWfqWowKcQQexFPrKGlzh0ncITV/nBEi++fnnZ7TFiwaKwe+WussrROV1S\nDDF29dmoMcbSFDL+DgSMabVT6Qr6Ze1rbmSh\n-----END CERTIFICATE-----\n\n\nGlobalSign Trusted Platform Module ECC Root CA\n==============================================\n-----BEGIN CERTIFICATE-----\nMIICszCCAjqgAwIBAgIORdycjBUV21nQRkudeekwCgYIKoZIzj0EAwMwgYsxOzA5\nBgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg\nQXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTcwNQYDVQQDEy5HbG9iYWxT\naWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIEVDQyBSb290IENBMB4XDTE0MTEy\nNjAwMDAwMFoXDTM4MDExOTAzMTQwN1owgYsxOzA5BgNVBAsTMkdsb2JhbFNpZ24g\nVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MRMwEQYDVQQK\nEwpHbG9iYWxTaWduMTcwNQYDVQQDEy5HbG9iYWxTaWduIFRydXN0ZWQgUGxhdGZv\ncm0gTW9kdWxlIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENTps\n86FDUD+bep3kd1U5pnita316zBktOVNWxZQ+Ymua0oaR66ItzHrl19zYSGbW6ar0\n1V91kktxWDJ6UFl3MyH3yXKsCHS2O5vxMlfmdRp8tpebMorHtIWf9u1+ctNFo2Mw\nYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUYT78\nEZkKf7CpW5CgJl4pYUe3MAMwHwYDVR0jBBgwFoAUYT78EZkKf7CpW5CgJl4pYUe3\nMAMwCgYIKoZIzj0EAwMDZwAwZAIwd02iAb5aN/pQGWdTJ7/lgMhFCuOLGtQ+ocdV\n/xmoxdIWLtggAuq9fFDfsu/vzeJ7AjAGhdk03AjHpLl0dAp7aCI8D8qupwyYTBaL\nrSJCZDMHhvNhETbbLu8uEPKt/U6/mGM=\n-----END CERTIFICATE-----\n\n\nICLEPIDA01PROD EK Platform Public Key\n=====================================\n-----BEGIN CERTIFICATE-----\nMIIDzTCCA3KgAwIBAgIUa2PTGhcW1ntLDO+ZVX/qS9PxLecwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcw\nNzI0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBozELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xPTA7BgNVBAsMNFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9F\nUElEX0EwLTFfUFJPRCBwaWQ6MzI3NzYxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20w\nWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATXfDh6DUGnty9I+Mzh03wtMy+dJYAs\nkQ0hSvi0r1i6oK4xKY2AM2tc8AuYk+8/BMPOMBQ1SZQ/h/tVEP8Bv7Qmo4IBnDCC\nAZgwHwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFAmS\nFlOcyOe9A3cFdQK8j8/xBz+fMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/\nBAQDAgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZI\nhvhNAQUCATBUMFIGCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29t\nL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwG\nCCsGAQUFBwEBBFAwTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVs\nLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNV\nHR8ERjBEMEKgQKA+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQv\nQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSQAwRgIhAPwE\nqdbnrfr9ocymzXuOO2eg6CX1co6ClXm2I0kRiuCeAiEA7Co/yzwlHl1tGRxFNse5\nGYJcINeg1jak4KIt2oARTAA=\n-----END CERTIFICATE-----\n\n\nICLEPIDA0PROD EK Platform Public Key\n====================================\n-----BEGIN CERTIFICATE-----\nMIIDyzCCA3CgAwIBAgIUO81yle53sU/x6H0c2k9h0xFcEv4wCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTcw\nNDEzMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBoTELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xOzA5BgNVBAsMMlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9F\nUElEX0EwX1BST0QgcGlkOjMyNzc2MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEiJpjt4It5CWUwac/MzKEwsKIgNuuxCKE\nQdXogNlUif2glKt4POgzIcJkVLJLyyM2Ec/140ru5BoZhDMgOA9RGaOCAZwwggGY\nMB8GA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBQxmbXW\nLVfTBnuVPBDED3t3wGHH5TASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQE\nAwIBBjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4\nTQEFAgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9j\nb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggr\nBgEFBQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5j\nb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0f\nBEYwRDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDyG/Yl\njsq10e2sL/Zt8nMS3qX/A8QGEEEQoLXhylrAnAIhAMpXdvsHgjSf1cnvNHTe/AJI\nJPt4OouB+++pjcIFBgJa\n-----END CERTIFICATE-----\n\n\nICLEPIDPRODPRQ EK Platform Public Key\n=====================================\n-----BEGIN CERTIFICATE-----\nMIID4DCCA4WgAwIBAgIUK2W4+9mqRBEoaVZRcTqjTJGlG0AwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw\nNDExMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9F\nUElEX1BST0RfUFJRIHBpZDo4MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEAT0wyOmzp6qeiNa01wnbVbjqa7ghrOVSUGsP\njPRui9Pv5ppneRpIWX46DRqLlccuhQ8zyWT+8WRvaYVjFbI3Y6OCAbQwggGwMB8G\nA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTnCD8iFSp0\nkuxZsMQkNDdkixXbtzASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nBjATBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEF\nAgEwXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwu\nY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRm\nMGQGCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vy\ndmljZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNL\nZXkuY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoG\nCCqGSM49BAMCA0kAMEYCIQC1AP9ZtoaRdXQ1PbDCdXRV18T6CgycsEWuLD8FMOH5\npQIhAKK2OjBsvdJ/02nR2NA/nn+HCE7J6KcBGnrXgrBNhJqD\n-----END CERTIFICATE-----\n\n\nICLNEPIDPREPROD EK Platform Public Key\n======================================\n-----BEGIN CERTIFICATE-----\nMIID4DCCA4egAwIBAgIUXkxuzZRHJyFImHICvQUSWQzc2rwwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw\nNzIwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBoDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xOjA4BgNVBAsMMVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9O\nX0VQSURfUFJFX1BST0QgcGlkOjgxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTAT\nBgcqhkjOPQIBBggqhkjOPQMBBwNCAASIKflBTHgWAfxZ7s0DDJzHr4P+NRIOij0T\nl+3j87YOQnUupf9b11ungwK1xu7OEAMkXAZOrgC6Quh2N7D35FpCo4IBtDCCAbAw\nHwYDVR0jBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFF/F5tdR\nfOAWxhYRC1AU2CW+MXp+MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQD\nAgEGMBMGA1UdJQEB/wQJMAcGBWeBBQgBMHgGA1UdIAEB/wRuMGwwagYKKoZIhvhN\nAQUCATBcMFoGCCsGAQUFBwIBFk5odHRwczovL3RydXN0ZWRzZXJ2aWNlcy5pbnRl\nbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5w\nZGYwZAYIKwYBBQUHAQEEWDBWMFQGCCsGAQUFBzAChkhodHRwczovL3RydXN0ZWRz\nZXJ2aWNlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1Ymxp\nY0tleS5jZXIwVQYDVR0fBE4wTDBKoEigRoZEaHR0cHM6Ly90cnVzdGVkc2Vydmlj\nZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19QbGF0Zm9ybS5jcmww\nCgYIKoZIzj0EAwIDRwAwRAIgIQlaL2ssGlrBMigtnjoaYdC4PaCBTZabfonH/mSf\nWuwCICS+0WCezJI4q9Uli/NNd2QbIOXCws6uYm82mf1ug3ql\n-----END CERTIFICATE-----\n\n\nICLNEPIDPROD EK Platform Public Key\n===================================\n-----BEGIN CERTIFICATE-----\nMIID3jCCA4OgAwIBAgIUfijEolWRI6DskStNws7uEjWMXmcwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw\nNzE3MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNjA0BgNVBAsMLVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIElDTF9O\nX0VQSURfUFJPRCBwaWQ6ODEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqG\nSM49AgEGCCqGSM49AwEHA0IABFe2JNAM1HZE7a3Cot3iSiNWYdz6/tIWI0uYpQEK\nbT69DWnxId2gA9hBxeiCPzVUgwDIhMdNIn5IUYFQfnegAWCjggG0MIIBsDAfBgNV\nHSMEGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQUHPj6cjkwo+cx\nKc19nzqEXXHKcmgwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYw\nEwYDVR0lAQH/BAkwBwYFZ4EFCAEweAYDVR0gAQH/BG4wbDBqBgoqhkiG+E0BBQIB\nMFwwWgYIKwYBBQUHAgEWTmh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmludGVsLmNv\nbS9jb250ZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBk\nBggrBgEFBQcBAQRYMFYwVAYIKwYBBQUHMAKGSGh0dHBzOi8vdHJ1c3RlZHNlcnZp\nY2VzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5\nLmNlcjBVBgNVHR8ETjBMMEqgSKBGhkRodHRwczovL3RydXN0ZWRzZXJ2aWNlcy5p\nbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0L0VLX1BsYXRmb3JtLmNybDAKBggq\nhkjOPQQDAgNJADBGAiEAjdzufne0DyVRp08H8+BeyDTN4XZLfrcZ/4flZWgeK1wC\nIQCzAiEENj2VsvBvnic8m65EtUl80yjxgVS+fHLCWW9Ylw==\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Root CA\n==================\n-----BEGIN CERTIFICATE-----\nMIIEUDCCAzigAwIBAgIQRyQE4N8hgD99IM2HSOq5WjANBgkqhkiG9w0BAQUFADCB\nljELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTswOQYDVQQL\nEzJWZXJpU2lnbiBUcnVzdGVkIENvbXB1dGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv\ncml0eTExMC8GA1UEAxMoVmVyaVNpZ24gVHJ1c3RlZCBQbGF0Zm9ybSBNb2R1bGUg\nUm9vdCBDQTAeFw0wNTEwMjUwMDAwMDBaFw0zMDEwMjQyMzU5NTlaMG0xCzAJBgNV\nBAYTAkRFMRAwDgYDVQQIEwdCYXZhcmlhMSEwHwYDVQQKExhJbmZpbmVvbiBUZWNo\nbm9sb2dpZXMgQUcxDDAKBgNVBAsTA0FJTTEbMBkGA1UEAxMSSUZYIFRQTSBFSyBS\nb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1yZqFFg0PLDo\ncW7Fyis2Xe5vERxnJ+KlEMUOQnrw5At9f0/ggovDM8uCVW71T6e24T6HH6kUQZCt\nyddtsaf0tebmA3TxjiuBzBAtT6qyns35+sXuL6uZaLnjGKXDv+uByOzpmBXUSwq1\ntdSTPQ0wWWQ6v/qwKofZdxAaPCTIBw61G08rkUT42a1hPESmVFrmc5hcnn4AQmJE\ncjcOhClwIKE9OQw8TzI+7ncgCZlY3FZFKqHp7NRNnaihpmKbHvn5wXIUnKuvS4iZ\nHqSbzGBuZ0ogqJ22ruDJi+JWYUWBmgI1JO85CPJ1Q58t0ME3hM3oWeqV6adWUcIc\nIpclkYQWlwIDAQABo4HBMIG+MBIGA1UdEwEB/wQIMAYBAf8CAQEwWAYDVR0gAQH/\nBE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3LnZl\ncmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwDgYDVR0PAQH/BAQDAgIE\nMB0GA1UdDgQWBBRW65FEhWPWcrOu1EWWC/eUDlRCpjAfBgNVHSMEGDAWgBQPFPXj\nIIhEFsomv40fzjcV6kVvBjANBgkqhkiG9w0BAQUFAAOCAQEAWKL5zsV8p/TZk3mt\n9m9NAqXWBDVHBnDgBE+Qphf25s+3s098vkWVLTddH3PtddF3MEYC4W8+dn4tyFe9\nmQ+96q8dwJdNabwBokrZy2beL71CXt/4jYNN0j/N9uYO4vIDBFDKRMWCtUO217+w\nxQTSOv5+mpgFw7UML/QpgpdmZy2i+eZPxDo8dzT+YJXC5vsHVSooA3rWDDzvnoLC\ncmDDiT3pG6AdjAN61MeeHHmoJavV8Tvdoa3g14Sn1lL+TQ1xaznyh520sX0dXPTp\nGqZbDzqEMiVbG7vFECqINE96/rwppJlWK91F1MZikGXr7FeF5C0JutGLb0gaYOmv\nYau4DQ==\n-----END CERTIFICATE-----\n\n\nIFX RootCA\n==========\n-----BEGIN CERTIFICATE-----\nMIID9zCCAt+gAwIBAgIQc3HALwPpy5ENrJ49S+Yo0TANBgkqhkiG9w0BAQUFADCB\nljELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTswOQYDVQQL\nEzJWZXJpU2lnbiBUcnVzdGVkIENvbXB1dGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhv\ncml0eTExMC8GA1UEAxMoVmVyaVNpZ24gVHJ1c3RlZCBQbGF0Zm9ybSBNb2R1bGUg\nUm9vdCBDQTAeFw0wNTEwMjUwMDAwMDBaFw00NTEwMjQyMzU5NTlaMIGWMQswCQYD\nVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xOzA5BgNVBAsTMlZlcmlT\naWduIFRydXN0ZWQgQ29tcHV0aW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw\nLwYDVQQDEyhWZXJpU2lnbiBUcnVzdGVkIFBsYXRmb3JtIE1vZHVsZSBSb290IENB\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2VBrQOh7Y1WHczxt1IGn\nrlBKKr0K6OZXVllr6F5vuF0lneajCRpxZJUne7v7/apxesr59LrQcDbOktlrGXXz\nOXjKBaXZBkKOO8ROIE2Ae6rslOMynlPHWP4HKdogZe3LPPViuC14uhgz5iXJ8pFf\nUQdKxCdKWTzICg0B+l46pp42Fxr83eR72O9kSzEqijkaYdoDx06yxWALguUGzS7H\n5sycnu2tAGDGFrmsQoh8mK4FUi5vce8JuWuhirCXZzmP/fV4tYndw+HJS/D7XuWk\nBWcbm0clLTbmYZ7Ae1rl1XTP5pd8Q3cHGB6R0HcXyACyE4Vjp/g0J3HJjHd3L6Tr\nwwIDAQABoz8wPTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4E\nFgQUDxT14yCIRBbKJr+NH843FepFbwYwDQYJKoZIhvcNAQEFBQADggEBAH6Ujdhq\nL8b38+swPJ2Jowu7UxcgzRWr2ayLqx8MwQkN1giSLsxcj6sHseMwqHLz2fCFfK2W\nSi5ZeyIWlB1TOJtwdpcmafFNPs0hOWWyl3D4uY2kfiQFu+GdpRtM7T+lsgDLlXvz\nt6nW2TscwGRKZA34hhvtE7294JJ56DlIcdSm3CY9MBvJ+pF2LyOC1NddHDf8ywKE\nXA9CXVmu3dpvwE+s7flQPS2E+y5EaWkXtKso2JTaHMS3PSwSJRhmknf/QtEkPZfb\njzbhZZxVu48EZKOJL8lXzqm4hgpf7kX+WrVsCAny6AJkNn1xsQfvT0Y5OaVNH2RF\nj4ORjyt4A5du3H4=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 01\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEMV64bDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0wNTEwMjAxMzQ3NDNaFw0yNTEwMjAxMzQ3NDNaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALftPhYN\nt4rE+JnU/XOPICbOBLvfo6iA7nuq7zf4DzsAWBdsZEdFJQfaK331ihG3IpQnlQ2i\nYtDim289265f0J4OkPFpKeFU27CsfozVaNUm6UR/uzwA8ncxFc3iZLRMRNLru/Al\nVG053ULVDQMVx2iwwbBSAYO9pGiGbk1iMmuZaSErMdb9v0KRUyZM7yABiyDlM3cz\nUQX5vLWV0uWqxdGoHwNva5u3ynP9UxPTZWHZOHE6+14rMzpobs6Ww2RR8BgF96rh\n4rRAZEl8BXhwiQq4STvUXkfvdpWH4lzsGcDDtrB6Nt3KvVNvsKz+b07Dk+Xzt+EH\nNTf3Byk2HlvX+scCAwEAAaOCATswggE3MB0GA1UdDgQWBBQ4k8292HPEIzMV4bE7\nqWoNI8wQxzAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBABJ1+Ap3rNlxZ0FW0aIgdzktbNHlvXWNxFdYIBbM\nOKjmbOos0Y4O60eKPu259XmMItCUmtbzF3oKYXq6ybARUT2Lm+JsseMF5VgikSlU\nBJALqpKVjwAds81OtmnIQe2LSu4xcTSavpsL4f52cUAu/maMhtSgN9mq5roYptq9\nDnSSDZrX4uYiMPl//rBaNDBflhJ727j8xo9CCohF3yQUoQm7coUgbRMzyO64yMIO\n3fhb+Vuc7sNwrMOz3VJN14C3JMoGgXy0c57IP/kD5zGRvljKEvrRC2I147+fPeLS\nDueRMS6lblvRKiZgmGAg7YaKOkOaEmVDMQ+fTo2Po7hI5wc=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 02\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEaItIgTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0wNjEyMjExMDM0MDBaFw0yNjEyMjExMDM0MDBaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6KnP5R\n8ppq9TtPu3mAs3AFxdWhzK5ks+BixGR6mpzyXG64Bjl4xzBXeBIVtlBZXYvIAJ5s\neCTEEsnZc9eKNJeFLdmXQ/siRrTeonyxoS4aL1mVEQebLUz2gN9J6j1ewly+OvGk\njEYouGCzA+fARzLeRIrhuhBI0kUChbH7VM8FngJsbT4xKB3EJ6Wttma25VSimkAr\nSPS6dzUDRS1OFCWtAtHJW6YjBnA4wgR8WfpXsnjeNpwEEB+JciWu1VAueLNI+Kis\nRiferCfsgWRvHkR6RQf04h+FlhnYHJnf1ktqcEi1oYAjLsbYOAwqyoU1Pev9cS28\nEA6FTJcxjuHhH9ECAwEAAaOCATswggE3MB0GA1UdDgQWBBRDMlr1UAQGVIkwzamm\nfceAZ7l4ATAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAIZAaYGzf9AYv6DqoUNx6wdpayhCeX75/IHuFQ/d\ngLzat9Vd6qNKdAByskpOjpE0KRauEzD/BhTtkEJDazPSmVP1QxAPjqGaD+JjqhS/\nQ6aY+1PSDi2zRIDA66V2yFJDcUBTtShbdTg144YSkVSY5UCKhQrsdg8yAbs7saAB\nLHzVebTXffjmkTk5GZk26d/AZQRjfssta1N/TWhWTfuZtwYvjZmgDPeCfr6AOPLr\npVJz+ntzUKGpQ+5mwDJXMZ0qeiFIgXUlU0D+lfuajc/x9rgix9cM+o7amgDlRi1T\n55Uu2vzUQ9jLUaISFaTTMag+quBDhx8BDVu+igLp5hvBtxQ=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 03\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEH7fYljANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0wNzA0MTMxNjQ0MjRaFw0yNzA0MTMxNjQ0MjRaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJWdPAuH\nz/p1tIwB1QXlPD/PjedZ4uBZdwPH5tI3Uve0TzbR/mO5clx/loWn7nZ5cHkH1nhB\nR67JEFY0a9GithPfITh0XRxPcisLBE/SoqZ90KHFaS+N6SwOpdCP0GlUg1OesKCF\n79Z6fXrkTZsVpPqdawdZK+oUsDO9z9U6xqV7bwsS75Y+QiHsm6UTgAkSNQnuFMP3\nNqQyDi/BaWaYRGQ6K8pM7Y7e1h21z/+5X7LncZXU8hgpYpu2zQPg96IkYboVUKL4\n00snaPcOvfagsBUGlBltNfz7geaSuWTCdwEiwlkCYZqCtbkAj5FiStajrzP72BfT\n2fshIv+5eF7Qp5ECAwEAAaOCATswggE3MB0GA1UdDgQWBBTGyypNtylL6RFyT1BB\nMQtMQvibsjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAGN1bkh4J90DGcOPP2BlwE6ejJ0iDKf1zF+7CLu5\nWS5K4dvuzsWUoQ5eplUt1LrIlorLr46mLokZD0RTG8t49Rcw4AvxMgWk7oYk69q2\n0MGwXwgZ5OQypHaPwslmddLcX+RyEvjrdGpQx3E/87ZrQP8OKnmqI3pBlB8QwCGL\nSV9AERaGDpzIHoObLlUjgHuD6aFekPfeIu1xbN25oZCWmqFVIhkKxWE1Xu+qqHIA\ndnCFhoIWH3ie9OsJh/iDRaANYYGyplIibDx1FJA8fqiBiBBKUlPoJvbqmZs4meMd\nOoeOuCvQ7op28UtaoV6H6BSYmN5dOgW7r1lX2Re0nd84NGE=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 04\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEDhD4wDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0wNzEyMDMxMzA3NTVaFw0yNzEyMDMxMzA3NTVaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN3UBmDk\njJzzJ+WCgrq4tILtE9KJPMGHwvCsbJOlo7eHiEb8JQzGK1prkPQ3dowFRXPnqONP\nWUa36/J3R32xgvuZHqAdliZCt8IUb9qYhDenuXo1SSqJ8LWp30QIJ0vnkaQ2TCkO\nbveZZR3hK2OZKRTkFaV/iy2RH+Qs4JAe3diD8mlIu2gXAXnKJSkrzW6gbMzrlTOi\nRCuGcatpy7Hfmodbz/0Trbuwtc3dyJZ3Ko1z9bz2Oirjh93RrmYjbtL0HhkAjMOR\n83GLrzwUddSqmxtXXX8j5i+/gmE3AO71swOIESdGugxaKUzJ1jTqWKMZcx0E6BFI\nlDIfKk0fJlSxHfECAwEAAaOCATswggE3MB0GA1UdDgQWBBSIs8E/YQXRBCKfWsDr\nSZVkrNRzvTAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAFtqClQNBLOzcGZUpsBqlz3frzM45iiBpxosG1Re\nIgoAgtIBEtl609TG51tmpm294KqpfKZVO+xNzovm8k/heGb0jmYf+q1ggrk2qT4v\nQy2jgE0jbP/P8WWq8NHC13uMcBUGPaka7yofEDDwz7TcduQyJVfG2pd1vflnzP0+\niiJpfCk3CAQQnb+B7zsOp7jHNwpvHP+FhNwZaikaa0OdR/ML9da1sOOW3oJSTEjW\nSMLuhaZHtcVgitvtOVvCI/aq47rNJku3xQ7c/s8FHnFzQQ+Q4TExbP20SrqQIlL/\n9sFAb7/nKYNauusakiF3pfvMrJOJigNfJyIcWaGfyyQtVVI=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 05\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEVuRoqzANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0wOTEyMTExMDM4NDJaFw0yOTEyMTExMDM4NDJaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL79zMCO\nbjkg7gCWEuyGO49CisF/QrGoz9adW1FBuSW8U9IOlvWXNsvoasC1mhrsfkRRojuU\nmWifxxxcVfOI9v1SbRfJ+i6lG21IcVe6ywLJdDliT+3vzvrb/2hU/XjCCMDWb/Pw\naZslV5iL4QEiKxvRIiWMYHW0MkkL7mzRBDVN/Vz3ZiL5Lpq7awiKuX9OXpS2a1wf\nqSGAlm2TxjU884q9Ky85JJugn0Q/C3dc8aaFPKLHlRs6rIvN1l0LwB1b5EWPzTPJ\nd9EhRPFJOAbJS66nSgX06Fl7eWB71ow6w/25otLQCbpy6OrF8wBVMtPMHqFb1c32\nPaaNzpCBnIU7vaMCAwEAAaOCATswggE3MB0GA1UdDgQWBBS7z3zBhCExZtq1vlOo\ncBTd00jYzDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAHomNJtmFNtRJI2+s6ZwdzCTHXXIcR/T+N/lfPbE\nhIUG4Kg+3uQMP7zBi22m3I3Kk9SXsjLqV5mnsQUGMGlF7jw5W5Q+d6NSJz4taw9D\n2DsiUxE/i5vrjWiUaWxv2Eckd4MUexe5Qz8YSh4FPqLB8FZnAlgx2kfdzRIUjkMq\nEgFK8ZRSUjXdczvsud68YPVMIZTxK0L8POGJ6RYiDrjTelprfZ4pKKZ79XwxwAIo\npG6emUEf+doRT0KoHoCHr9vvWCWKhojqlQ6jflPZcEsNBMbq5KHVN77vOU58OKx1\n56v3EaqrZenVFt8+n6h2NzhOmg2quQXIr0V9jEg8GAMehDs=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 06\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEDhD4wDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMTAyMTYxNDE4NTJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6eWKNT\nMT0h1oPGh9aqqrJAJIcXVXwHcWHF5RX0HY76SDKfRWWPtVD0P5HRugwlGUKftu+W\nT4llcJjJCpeDrW07rqYl2wRHNMR4do21O2AixVbYF07XRL1uRFVmVxXNXL63w/y4\nIqs9+rHs7hpijD1T9ghZg0MVmPtkbwQ0fVrgAh1XV8xuMCfB4T8QYzrki7+YcywH\nnBdoSw21i9ApGt3id7A33RP6PbkQ6BpJaWIqechax2jYcPB5tUwrmMhW5xXvC6nA\nHuHaEkGDihMH/pSx3fplzffuqn5bS4qUw9zQKbtevPyTXlZkH0yMtecmxo+d1rQf\nhgLvbceNhwp3NXECAwEAAaOCATswggE3MB0GA1UdDgQWBBToJmnNnyCYJwKXSZ6u\nuN+n5os0IjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAKx96oNsigWFgO/1yFhTL0LAEIpfI0TZnHBSsQrU\nez6xeDQUDxWNE0fiFEAFtzWN7JNIjhbuX4+d9zpN1h/ylsXGDj11QY+O2JnCkf3+\njdllCJBTyV9tigIkYO8Z604R2Tl7Jv/9QQmuhcRZF13qTMrOsx6zhtOvpcX+Q28L\nFUkc6fpxiwQpTbBeoakEpmo2DJQM4Uo1NbcOij44q9TJyoyLIeTNUpykIGu7/PDu\nZhgHSpy2zgGGtr8pKMhzwrJ+zd3UrIve+9odJfzsasILU7/YXLKAgh4PBQzTq/qz\nrTOkBix7tGVbOA2A/wSoSseL5nbk3gM8OYxuten6f5spGfY=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 07\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIERT2I1TANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTE0MDVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPBMm1uf\nPLwlCRefXg8x3OswKQD1KEWOACw+kU1rKeXgkksLyrLdBT9l2dSo7qgmnIXEGdum\nQKiOFNxfjIwaQml6WsRZSzb5IxEPkdGAPThVQMAaQzFAsGBUx3oUTuOmpllQwg+S\nFb40c7EALraxdWoi+8GNIe+su8jCcMZs90mC4k8FeCXKtRwN2ECk8tBZAyI5wz4/\nUsbKBv5Jv09gzCig+xFz0u4FoUHTDo/6Mtu4bBrrWzCfdsLkYpZWEuySmg07BKz6\nRSWRLHb3ZelIvnH1BdYZzGc6iJ8O2eHXXyN7evamhVAlPLTDqP8WyAkdvL3qD/ju\n49W9kvScU8WhXJMCAwEAAaOCATswggE3MB0GA1UdDgQWBBSnVZi4Am+lRK/8vEuR\nBsEvltPwuDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAIwzS8afUzJKdbXnNbzbz1JAtUQkBghhtjr1C3ms\nT3at37EbsQqMXwMTE9xPNpfC1dKzLHRjczMogYU3RouKXfGofx0AjH64rmGUYNIa\nwwujWjrAgtMXFu6Ko3yHvN0yigp297SS5f1hdwrStSUl6oY7KouAuTF0dUf/dQX4\nyMvgSkOP4Adtw06/pPRkV1JWPTP+uGV7wKC6Pz6ynKocssWGOtjitlxhF/lNM3zZ\nkpStYV9yXkbC62r36vHhmi0EV46iJ8RkzRiDOI5wD13nHFan8b08m6vXaP9sQ3FM\nmowj63pQl3M9yi3OrFdYb9ELhnHpURELD8khVfBkqIih7mg=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 08\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEfGoY6jANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTI0NTJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAwODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJaIJu6\nr/betrMgWJ/JZ5j8ytoAA9RWq0cw7+W0e5L2kDLJMM288wYT+iEbfwx6sWSLAl7q\nokXYDtTB9MFNhQ5ZWFLslFXbYigtXJxwANcSdPISTF1Czn6LLi1fu1EHddwCXFC8\nxaX0iGgQ9pZklvAy2ijK9BPHquWisisEiWZNRT9dCVylzOR3+p2YOC3ZrRmg7Bj+\nDkC7dltTTO6dPR+LNOFe01pJlpZdF4YHcu4EC10gRu0quZz1LtDZWFKezK7rg5Rj\nLSAJbKOsGXjl6hQXMtADEX9Vlz1vItD21OYCNRsu6VdipiL0bl0aAio4BV3GMyjk\n0gHnQwCk9k/YPU8CAwEAAaOCATswggE3MB0GA1UdDgQWBBRMS01kiQjkW/5aENNj\nh6aIrsHPeDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBALMiDyQ9WKH/eTI84Mk8KYk+TXXEwf+fhgeCvxOQ\nG0FTSmOpJaNIzxWXr/gDbY3dO0ODjWRKYvhimZUuV+ckMA+wZX2C6o8g5njpWIOH\npSAa+W35ijArh0Zt3MASJ46avd+fnQGTdzT0hK46gx6n2KixLvaZsR3JtuwUFYlQ\nwzmz/UsbBNEoPiR8p5E0Zf5GEGiTqkmBVYyS6XA34axpMMRHy0wI7AGs0gVihwUM\nrr0iWOu+GAcrm11lcYzqJvuEkfenAF62ufA2Ktv+Ut2xiRC0jUIp73CeplAJsqBr\ncamV3pJn3qYPI5c1njMRYnoRFWQbrOR5ADWDQLFQPYRrJmg=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 10\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEM5ao/zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTI5MTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKRlTuyM\n988TVLch/7OdoQpY019PVwqniuplnAGaS7C+NxQonCcjh6dLekLdGYkYEv8QlmG5\nKf2117ft7AEJQCS+oa5TBJmfIZilvlu3IkbssMkqR7Fpw5yzC5qRF07xo7IURgwX\n6iSeli2kg1cPj0lUwxQMmgOVZsayHLz83Bd0hPiJzOkYs5oRvbXZvXdE7W1uumqu\nufJPxpHezlbIHfMw1nLFKBIm0O9FfOtAmE63Iw/i6Flouz05QWo6uzRSPiwKlkfX\n44u+G1TKfMzj/g18uU4Im+xrq07WyIZ1tyTXgEHfUW9kreWHudO0DKpgQ680VGNd\ndRYjYFPMPCzuGqcCAwEAAaOCATswggE3MB0GA1UdDgQWBBSwgDWbWaqTiACkrr/R\nDMcM8BsbNzAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAI1H2eG4Wpv/GQ41omXwBPANExcgxZZIPIFqFws4\npAM7o1w/RBCFLaCINrCITbxSGE2YbKOMj5VUY84IbCkQqemlLVmMHoRZmP6StQ8/\nDeSeFquVCRrKCwfdHxSKV+sYjCnVmwGjkQi/VYsILsQUN8V3m3bjBp5xpJhQXYSe\nsRap/3moZ5lgPAhQg7AC/ezATwvOSbYxKn8Ib5c59+c2q27U8/nMOj6eqUxRjUNZ\nDjF5iN8j8CQdOrJJQpRvfSflceyh2jUjMWwC2kdON6WrBwSk0OQGK6ljaUFp4B0I\nBE4Mub0MirzHqc2B+NLeJ5bmgPTTP1CKH9YR4Nn04QYcT6o=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 11\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEasM5FDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTM0NDJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANpJ19VO\nasFjdFHwNZWj0RWszzqYaFooM3Ewj7GOmDpIWLwNZt5hCmegtZb2pI16XXKjmNt6\nlPMk/N+SU7kqxVjJ+zf26IUa//KPalrbQ9hHM8r4uFQpqrsmV/C5jA/v0CtsTFYZ\na1CNhyfeiDGKOkJmvSQO5Td2ADg8eEu/ojU9k7hFt/21aKFVK5sguqpWkhSnJELq\n3X4IvhPqcKekxj5PL61otJonLsJQPSeSZcmTd09GN/I9ISFwCLjFhsjprjViJHXu\nSBYwqw+fqAD1CUB3cFYpLMrlnW+yJFxyLXPAkU5dqSu9Z7K1c2cvFGkx2fp8z8IE\nQGqU9umJ8mnvHh8CAwEAAaOCATswggE3MB0GA1UdDgQWBBSwKYEVe218wyEAFjgL\niYlQUkNQ5jAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAAnneKcE6RRyN+IKxCqcGK/HfRjn+aRLTzDrKmPt\nmjLSfzWcDGUZZ3gcb5cnedduQYqPVblpOk+k0JzaEs/bFxdbYUZ4VpyNNWeSuHkS\n0nZMXVGFMhzoYnlbZFR/zURgKW8SFPMpyzVej1rqfj3SJlDc7A6nFdX91f4ZUbNp\n/bNvMFueCiS3geZy8lzkoHLQNc/TPfmcLkaY+3VxBr3CnezRh6w99FIelL49qFbg\njFBEmnshVu5gI0TP6arOUpP+LCyulo/Hb3lBKLxgWAnp7EEy4ooFLJUWdHG1yWF/\nwq+62bUqNS3Xo0aHRYn7xOxvDYLTUHvrLJ+AUtcAWz7MzZU=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 12\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEIe/JKTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTM2MjRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALULsMl0\nTB+WYghzTlkDDYZ47nCLznJTMwcZB39cuE5WEEVaya1nulYxZeD5wcDmRQnootxD\nDZefiFHP/lcmiWomA/qnwobFFRYpORmt8JYTjbVO3cjF1wWiF8O3u2M6jRF8rW2V\nwYy97qvEaHLsuGepTwZmv5d1hntizHh1v+NP4zzltMO4VRSicP8PdxS3rekVmXQZ\n3qG17+KBwJHnQyibxIS0Vez7Bz6K9DIyNfnUtrTlwfOVwTJObhaI7wUrx2s7kh+G\nvxxSr6Rx77ezxSrDEjm6XVgjLBMIqb7se3scNwllG6M3qWqmZjuFYkKiuTDwRSYL\ndQ7TrWFfFbG3xPkCAwEAAaOCATswggE3MB0GA1UdDgQWBBQ3Nd3I4wC4F66+A1A6\nku3f3xrHGjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAJX/SG76Ix0sw0Dys1Hl+DxBUltgxDYYeCa3Fa6Y\nt81JmvMmSoXRa15v6h+FwiETaAJP4vR2VxSxiyeX3mQfk25NXWGuwP4Vu3EVY86l\nwmefN7S5waLRoTE1uRjbD7LeHdi8tRzZdgBSbw1xePBZ/qc1bJC49LRQqWnf8OIS\nXOD/2MThp26AwZeka3qGhwVghEBdwgwqFLHy0ZeanmX2hRFn+la15K35mxajKZWl\n1qS/c0u8/wIWvO2bU2KkPWtrKW78w7cm3ht+lUEQANjocnR+gzdk14f6B07SY/Bd\ngmwVMhcrp/E9DK8TQvjxDbTTs/bfHC66ZbPOgqIeXNYguk8=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 13\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEWRxZPjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTM3NTFaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIz8Rlvr\nxEWhF8znIg3h2zT7jQyvKhglxxEmcjkmL7qvqeWRwNptqSV2yIkFfKdhGAv2oHNu\nlmM0fkk9apiOehVR/vLvoEAdXFqLp8l5+TpLGRTcLyTu+ON6zOIr827j2jw1no+L\nqbsB3C5u8F/ngbx+x2XTYWFJIGBJh0x8v4nGH8LZWftnXHQk4Ere78nQBzlF8Yud\n8XTZD99J/MrK1twuYFT+3fFu82DTqVpkw4F2ZPozlX+j2XnLGTK7arTkEMpX1EWa\n13+VM9Fp9mWmUrrah4qMop4hhTogc/l/p2rDp9gP5QPUm3Rg+TkERKCrx7Zrw/u3\nBSDhrPkGcJGMq6cCAwEAAaOCATswggE3MB0GA1UdDgQWBBQlg8reNo9pyA9Y00pI\nst5lPf6vmDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBABQm3vpFSEoU3htlSbQ18X7Jnv5DbeTmoEi8NXfc\nW4qTaRYKC1+efgH5ChWpBi9xqGrSK7xls5n9xlJc4CVuKkkN7fd9EiP5MxNZP7wW\nZ+Zbd4NIdiyyXtHdI9mQsV01A1qilhXNNTxSmTgjQPZU4i8Pt6zujzmUkSZq8GS+\njuH/O1Fjr9qeH8tFOQdHH96L2W7eWW5xHGF7udUCkGIiBcLPPgNxz46VW9q4Ycj8\nuxg2E5XULwFTzbJXa8uqaN8R+T2S8NqJBVO+gkh/purXXbrlkhLCMeWtWOrDiTXR\nWpiTv4ENvd8RP2vlzO2AaVYR/EumoR/qwdIcovppwgTyyOQ=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 14\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEEEjpUzANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjA3MTcwOTM4NTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANWy64+P\nI90LXKDBXUN24noDgP2OseUsLCcNlh6MD2b9YubtazZg/72LBzUXlHb16cLqTHYv\nX+7dO165F4WnJLxMBhe4OWYzbdncQHZAhxv5nfThcB61ofVkf8V4ecu5c7KnK6uo\nU2smRqN6pbc+MqTI8D41yINLORrTY/H30d8r7jkjP0c4Tz4tLo74PJU5tN/DYMiu\nuIthEedXr2RtwBpo2qkIx/gGiJTp6ZHFkAUGjdmw+HET5qgKsEXbTBsj/zihBgmM\nLhhOHPQqQ+podT8mSZmQSOijw0BgMr6xRXBwvL46k+EiY49vGP9QXDX7gnzl0MEv\nJ/RcD1nIpKhpeEkCAwEAAaOCATswggE3MB0GA1UdDgQWBBQiv5v0l49PRaTp2/cp\n2KCK3KCoLDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAKE+bzD+G1DZhqUCnaLUAlN+ZMFJsPIGwjPRzZFb\nMQLZcvkc9M3KV2pKsg3MrD+6kK/+XEYL49C9eWRNrUtkZl1SORzUELnUm2E3kezx\nplnCU5lzsuCS+iYptVD17uFYcybYMOAMulCRyjMkYG1cQCdDczST3VWPzON5+6+v\neo5Og9RRPsVByHGoHf5lcmTi0vNKvX4QtoyZ78VQ012c5Q3A1fEldLl4IFN+sfu9\nAf3o/as2GQs3KvgCOB3usgnRvojBu+MLxw4pk6ju46rCNTe1XIwHi0Y2nxZbUowL\ndldRwQEbQhhma2FCecsgBmMKqzLsi1B/fkKeiF2fE7mo7YA=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 15\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIER3V5aDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjExMTQxNDQzMzRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKS6pgcg\nOQWSozVbMkdf9jZkpGdT4U735zs0skfpjoKK2CgpLMO/+oGKbObm/DQPRQO/oxvq\njJNBKz55QBgKd+MoQ6t+2J8mcQ91Nfwqnm1C4r+c4zezJ1Utk/KIYNqpFDAzefBA\n/lK8IxQ6kmzxcIFE4skaFsSgkearSZGG6sA9A51yxwvs8yUrQF51ICEUM7wDb4cM\n53utaFdm6p6m9UZGSmmrdTiemOkuuwtl8IUQXfuk9lFyQsACBTM95Hrts0IzI6hX\nQeTwSL4JqyEnKP9vbtT4eXzWNycqSYBf0+Uo/HHZo9WuVDUaA4I9zcmD0qCvSOT0\nNAj4ifJ7SPGInU0CAwEAAaOCATswggE3MB0GA1UdDgQWBBR4pAnEV95pJvbfQsYR\nTrflaptW5zAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAAnZDdJZs5QgAXnl0Jo5sCqktZcwcK+V1+uhsqrT\nZ7OJ9Ze1YJ9XB14KxRfmck7Erl5HVc6PtUcLnR0tuJKKKqm7dTe4sQEFYd5usjrW\nKSG6y7BOH7AdonocILY9OIxuNwxMAqhK8LIjkkRCeOWSvCqLnaLtrP52C0fBkTTM\nSWX7YnsutXEpwhro3Qsnm9hL9s3s/WoIuNKUcLFH/qWKztpxXnF0zip73gcZbwEy\n1GPQQpYnxFJ2R2ab2RHlO+3Uf3FDxn+eRLXNl95ZZ6GE4OIIpKEg2urIiig0HmGA\nijO6JfJxT30H9QNsx78sjYs7pOfMw6DfiqJ8Fx82GcCUOyM=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 16\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIENc6ZkjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMjExMTUxMDE4NTdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmNQtUo\nRiADamYT7QWhvhFDGufeQ17FX3KBRlK5Jl7CkDXUAbU4qchLtbh1RQ+uj77e80MM\nQQjYUWQE895NRhUvRxATZzp8fyNjBMc2O5HA4P2fx6nsdRUhpgpgQoOc93rt4yQ9\nD1H0esw5Z20ja9Upjhi5pHg8YLKhzRsyEkkJ1YRGSe5FOdaqBaWQLBR7TwYtUUVw\njq4iTsZai1HXpBhjJ9qPO558eW+LLbPSvbObgpveuo0r+ILLrdt112+o+jE2gmiL\nzSg1Uzo6aKSv335ZfYuWVAL/IqWkpBj9tLVJ8hjDkI5mvc6rPi/l7gpKHZ60Gihu\n0HtsESWB/a6giNkCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUEoRi8qDRbN4ZRvEABUSw\nVbwRPRAwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAJjJENKPWl9U\nOlDLwzJNyAO+9QW311+7QhH2cQv8LOPXv+s+3/5uMNhOCmCfJieUoq4Vo6Pibo8K\nbf0b0D0DHVM5SpOucjXinCcX18g6M7IPr3/ABx0hWP5NQkAExcm5R2XGsBua2hUj\nBKzjqe7zgHLugt0V7DDPC7jmdElOHTHmK5COItL0QysrOrWdhrLTrP+HbLRRJbO9\nWsYNWb4w6m7X2rvd9CJmjr43aShAYX3s42EmjvBI7ddlHQUwAcbrgt3zmrAtYzIW\n2Zg/BQARfBJIPuyvcLJVzDjJJBjUxQsUYYSZAp4I1hRK8tTWBf/tcKN4jfIiGTfz\nH0PQrjHMW64=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 17\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEJCe5vDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMzAxMTgxNDE4NTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDzzG8C\n6MBIZQEQJzEGlkSoFfYx7UFnbAXOP35eXkDfs79tmXh/Kpvo+LgDXAPVwiJgcphS\nMNTOhAes1kA/cuGk2/BpUE5W+owIB6cEUm6sHjea5VnrS7rZ205lKzsU5ThJel53\naLzgv/r4AMYfHyJid1xSbheQor7PmgcqWPag8wQrUnn+mVe8rcPJclQotmsV1SY/\nAMUorEdxbeaTgZkP8jvCjywzty2Jtfju75BTtg0jBDEIHWVuqOwWx879nvWpBho8\nkhOU1FPZrHc5fVm0w7ryWCZvZVWUacMAeYfVqDOOEPxUzZMDA8NwB9bh5sY/Nrz7\noeSUr7Ps2aJAf/kCAwEAAaOBwTCBvjAdBgNVHQ4EFgQU7D+NTMEqvoigGQZOimK3\nAY+i41kwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAJ1qznUH6nCB\n1akxmhMYWBEjQsqHdy+lwYYMNHl98s9AnHWMXzpGcGUJg695D9hQrw4kHpjn9a1L\nyxTA4NPz3W3k5gk4Jtp20yJeClGXEIcf86WsJwyC1gDGQfV2k+vdzlhpfCJLVq1i\nEc0I/AlwOJBgRvLmldPuYAqtDTE0drffAkhaMoEr5d+X5cC1iAsvpPw0dL+AqqFh\n3+YVDtrjdmhcHtopQfzM4/voZr9F+t+WBdg+NIfZHJZud/ZX+4FrNco91wDueryU\nAz7W27Cet2fUk9zv/GYMRVrS8lO7K76Leawt4fNtLDBVQLlj+3RYyU5cK8aj8yAe\nKboVHBoSukQ=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 18\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEW1RJ0TANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMzAxMTgxNDMyNDBaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANs3+XqT\nS/vs4eR8quyXIgPFixBg75cWbSjl7yXHylta8sLrmog5xtMdtjtUZIE6ko34PQ0r\nb2nLnviHzmKsVGcEgVqB5DYR4p1/WcuQXY+POaWeWnHUVI8wErvjfuCBkkofL5lE\nwD+HaznTRE9ZMFpmRGGbC5oVsGSd1OGefjeaIK3DMZFQle5YQgbFh5CccQ8nTOHK\ncPqcgEI/ncAZMecGMZFmXvgxn24tQ+PCutuBvmY1BYt76US5MnKr9rKpcBtmygRY\nxTMWmEETr3lTlElvEzDuMmj+cjrbweMZldS1r3Vf+hCGrDidcQidu3BY5v+ZifUL\nDb0ekQBo2NVFUTcCAwEAAaOCATswggE3MB0GA1UdDgQWBBR1aP8m830RJoVntoZO\nxyoIyBiJHjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAMuw0E9SWAmRoMyYeH4QfA0Eu2DHHsAVvpTWICqN\nYCWCnDku3PEUJpAS02Iu4MN2EUjywgIgccYjawfiI1xQ+qKJWVVXo1rScfRn3g4a\nLyfBzZDo/ka7dK1azNDI2ieRrh6pPvIgYAriipX6kVTNV2tTpQVF+OoeXOvqMyIY\nsIpwZCIwSTvgwMIQblik9IQt+rxh3fqESlAZ9NztFnA+ftTS1YeeQR/OjLxUtUX0\nlbKHtjIuvokyEAj1C+TMASt2CMsRuSf5U0nVA4Ekci+XzCIhvPnB2860TMvq+hzy\nANAzLSZsSZOo8KYY9ZgBdksLpPPrOYTFSMXO+oom5xh5r/Q=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 19\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIEEoDZ5jANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMzAxMTgxNDMzMzhaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAxOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKGIVvI\nWUB2oSXmfiSzIzKWcBiUabZRK9wBSyidvI+EYOplPfuH+rzSHiz/kh20pM8bu6c+\ngK+79gp5p4K9P4egK2zsqph9zYzFwNmIBjOaQiYUPp9QFtZ5RP6XMH1eyYK8UWVq\n/6WDmDKGgWrK22MAxV2LYCCQaEa2LSN1MkVFEeRC1lRDc7RoCEW2dR4tbiDCdFjO\nWznX1nBctU8uupPdaiPclL8PH0bX9L9XuH/OJ8HN1zns/6v4c1SokJYfHqOYn89R\nuynjnV3X79+65mm2BVZFsCPV0Q+i6dj8faVvjLA9hubpILw74g/hOA1FSnOfl95Q\nyVTEffwXijRd8qcCAwEAAaOCATswggE3MB0GA1UdDgQWBBQd3g9AbRIsPlpPhh+U\nh2yeGs3TfjAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBANAH4pGKFW0codMGIaPVYWmsWz1zCe+AM+e24dKQ\nSx6VXDrYYoMdoO3D+loqVDs+zQHguJij93R0k4VgZRRIruODk8EDhppobt0boXl4\nhB2U6uwERND/8rUtF08WzA1opau1R46p7Wgyo1yNYcYKSSd21+YgiKMglYH4bz1T\n+Tvse5I5ujZ1BvTlfkFBNnx09wUmGaL7qn/FG8bnXy+oakkIJk0OhGjVyQ/nRw1Q\nHSRcKv11cfpqhHR4ekZsJ3RiHWRZgD7uVXuHV6LNcKKK3pJHBSLWaVnPtCG3a5iZ\nAjKPQ3bIOLfNC+k1TcA3z3FjX/SBKo18D0/Y3HWN8UzTg1Y=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 20\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEnzCCA4egAwIBAgIESa1p+zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMzA4MjcxMzU4NTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAISatv1/\nC6U9+bRoGnFIRJP99ETyRdBaZZbjMzomJ0+n6VsyZKU8HshD1D56e7td3nOqMixg\nygaBK3Fq6jgR4nEDafH8bXvhY+6nLYzqgWub8htqAjOxyw9AVSJaeByr1Xo9OZJX\n06exrdSikAW6ANcn9khpEpl3kUB/z4qY+tDgabIYQokVvEZ1KCYXbAKTQaV1j2CJ\nDYExo82lQJepEATiVpXlM71UCxpdpeudiWKYRWY7oV5EpyOcMzolYVfQ6c/2EDhj\n6CxlYALKzu7xgNLXfhUCJWPjCK7NDr86n5s1tKHmJUdbHyqnes8h5p/7MVAn+BuA\nauk5MR7GY5TfkwECAwEAAaOCATswggE3MB0GA1UdDgQWBBSP/UeIDiOaOjog3hPt\n8QHogqnSHTAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADBYBgNV\nHSABAf8ETjBMMEoGC2CGSAGG+EUBBy8BMDswOQYIKwYBBQUHAgEWLWh0dHA6Ly93\nd3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvaW5kZXguaHRtbDCBlwYDVR0jBIGP\nMIGMgBRW65FEhWPWcrOu1EWWC/eUDlRCpqFxpG8wbTELMAkGA1UEBhMCREUxEDAO\nBgNVBAgTB0JhdmFyaWExITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEMMAoGA1UECxMDQUlNMRswGQYDVQQDExJJRlggVFBNIEVLIFJvb3QgQ0GCAQMw\nDQYJKoZIhvcNAQEFBQADggEBAJWePIX29bPvG9qnOWWGOuIsUhChgOzaLA/LkJEQ\nHnRMPUU8hO9RGMuFW0QN62eSKel/H0M1ty3XtjMMxRg7DqJiRN7FgPkEN6gCX9TZ\nlyNyxz8gNULrhQ5fB3oorQd0Miwo4zJ+GjW3tmCkfPzoXz8h6gRlIRtY+6mvaVw1\nad0QgF3Dp6R1yY1jmCHqG0w26PU97G6Lk6l+y9cJzmgVxVgmYdRXQvsb0HVn0Vg7\nCYcq9L+VXwRmLH5YkehVS5r+VBXYCMiTCOLZ4GAtYkSQIUqZZk4lgM2uBXBdqqyo\n0JAQaJMmyFG7GkB1SItEl3RGdLIX4pdbwRcRecB+TOE/dWM=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 21\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEANn6EDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xMzA4MjcxNDAyMjFaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIFJOXEJ\nl01sCFDIpgME7X0gmxuI9DW2lTlNrZ+05kGAAqOUCWbS8EEDyIZZYA7qjipcaXxf\nmJ9i0zoG2hC1AHXzfzzmrQcEE6DhCeFv5lKzk8Ta/FV5zLmRXppw9cBbzg00HWuI\nf0PEM0vY7GopP/q3N/d6RQac0DRdPVNOhNApApw3omfAzC2Nzj4sdvIaQPXY1GOI\nKoy7ktgjVoUmZ1Po8FHni2geh4EKWyHvcZZiqCCN/ZTFWhJqES454Ncy1zxZkJX6\n/1K7wOjFs9zZBNBd4A1cURLz33t2YCq+XcD4+JtViJokxU7boSNK5Ji+mwLLXIBI\n0dyQIQcFuvwOKDcCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUoMnewI/TmotZxGvL6H/Z\nlIxV+XAwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAMvISZvt0QDC\n8OW67Lcn6FKjl95hm/MdhNX3QwkRaSYFCpVDW8dk622SFrwlzKoMAnNSlpwf7MOl\n9n5Fkd4gSlyMOdBIwtd53mAOVRCRIhHgrrfmi76saLsaNQci3kjnCDYL4U68o1dQ\n41zlCko8vb7EO5/2fBKG/DS1gzGW1y3ctEpYNn38TunrDYgkUksNKaSZtmrfXNeI\nZavtFtxRQo5v5VNUqOkyfvn4dB/og+xFnqOCpi7FLNAfG/1DnLhvheHk5Ii51oKs\niOIcij0vGiyKbozlNvHl+0xe7UOT1s1U6YdzWz6YmzyCEjOkz720TenG99l89UZX\n71FyouYrMhw=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 22\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEbzMaOjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNDA3MTYxNDI5MjJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP3SruH\nYcDDzDP2QOwNd6RGhb/C8zO+37ifQeiDC4ZxMc5chxZiJN6N67R8xdwWftmM7W5G\nd3kFipZAFwxDJr0ndoVyhMLLsugdV3hBi1u5i2KkT1RPsZuigpEekFE8fR/D5G6z\nbNlu9gejaLDQpAfGB1ouVZekKuDoA9nSxKVGyZWJaObMfBnmUse5KZKOrQjBu7sq\nAljlipp5vK+c6pCb/x2ntSgLJzef7GrrQDCgUfs7OLq65VAhnyW5hhRTy52wUp6g\nmaTPnL+NPWallVlEwVdayO9hMMBCnb6c67VsbRQvaAi9hfXGXZY/+WmpOIpUgB0Q\nEy+91F8R20wpt7cCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUKtcOuQlixUGlXi0VuFv6\n0oYVTw0wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAADJyV2Sc1nZ\nP8nEvTa0E6cYu4+PRnLLqdDRmAM3oNjx0Vg7lq/Vdg61xvZ4SpKig+3qVGsM3pYJ\nK8BriSU+uFiUzKyeMdz5O8B9Sf/oW9EiVidq15juRGEIrQmewA/rZsTlPiHg8gUv\ngWc6YzLbicKtlwmg2tQDNDAoDc1212aG/XI8ZXzgC+9IS7Gtgkqx9tV81gw/jO5H\nmWQ3ti1ps9Olvd4cQWmpYPFmcIv+vklzfnIumLLl94JUL2Zp72D8aL9ZPDjLKj5R\nzuEzciOHcoE8Gp5YR35syM0sRzBUMKKqCI2GmRSODV8MMI1jnSjIfVSAvpsgaC8b\ngAA4qxUCCHk=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 23\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEXYw6ZDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA1MTkwODM3NTdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK6fFwMe\n1o2UdDbcqcVPGPAU/5E7j2n0OrUYOFOiL+QxER3HSkV3NJLuuVRDWF371+RsSJpf\n/Q84Zh6xNj2Cz44nlkswhU7oFcxUSzJK22OJ/HvEP0uXk4CZvzOtQ6nL3lVUlO/A\nj+NvvKCx4/kRQjRswPHTqs+iLmY02QljexW7bwLzUkpJI3+XuYmfdWVFDg7XDJ/p\n5DJ7hT5y7bpfyJ4AhJg5gTLG0iwO1u/L2861mbSBF1Y3K1fw2tJUH1BNuEvs+7qF\njQgJFYgLlp8KhfVh+LJT5Cs5L3Z/mM2ONxAacmXMhwAgMTfoxhRwVv+JPnY+h257\ngxM64v9KgzI0k3UCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUpNGHJjZOouOyeEZM3H+t\nlo4BXUswDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAHSJf3zl9/hn\nXhfH+Ijq47GjiUJJnvJwkhA3OogrFw7/uuJXgsVGKS+jAto7GacgqxAqdoOY+RWk\n1p31x53ezE+WpJMV70Po69hXPhFtLo/Z0K9GCyodw8URwatVSTK1Jm3FVRcvs/QM\nbdNFyX2nzqLL32hkw+B3/hvEalqtHxlaq6Q2w83IViZLpM8zhB19zDuZrHOi0HMd\npjcT1GXBYmUY9IdxGVpyuFXSEYkmTpS/xE4m9zmxhKXCI1XYnZVupKfmVkN/ZUcd\nOV3SXCQBQsNJE5+KpY1pEaQvzqlFACH3TOvr7eeG1PCeqrThCYEluSxYTv0ITGyt\nI0umB61/vwU=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 25\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEFLjKeTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA1MTkwODQwNDdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANtaHXlX\nJprVsWAKov/mD3JPCnD9pKnoI1ODtdgOfVNk7IHHHuqeX4GezJ062wzT4HXfbwLu\nkZ34+fyUbWgaq/Ig3MYpLwfF/V/0S+XOiFpJiIYK8Vr7404Cw5Inu0gkGUbN8+1F\nJXC2jjtvVA5CbzqHjcA+KRNc9PnTyhguSCFMcTxpVLAemIlOX5uvDnAF3yfJG7HI\nQtyUm+E757DxRX2MKe+/BALh5IgPyBDS38b2t7G9c5gA6jH7XVMd/7zEtWogHhWE\n7lNXqlgJFxYGkDDT8toy3qiOusagHz0yTnFS2R4Hv9BGItdnM/MxzFNN2AnIvz4H\nhkuOtutced3o+y0CAwEAAaOBwTCBvjAdBgNVHQ4EFgQUl+XRzYsEl8BLRlWoacjz\nDvqJOI0wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBABKmY19oBOwZ\nfJPhhjTGmxJsUM2mYAb7HvmLPp7iE0iGjqgzMRl6xCCpd77kO+m9sr4OFf2JygCS\nwO0F+ZaBWJOFtlHhyHGyjvspP3tbpGqCO+HO+JAICjtD78MzJZBMbpDRBsccKe1I\nWvBkP2h5QHBmaw6ACTbFBOrPv/1VQiP2nLF5QzHfyHAVIzemxLVlhptk/Fnr8gR6\nronVPD7EYTdc4SgIxQaKuktrrnXZ2O6XALLUkW3WjOLetCR1HdoBpBiHfgxYNg6b\nzHFZ7HdLTWnzVAHia/BhIfFlucNNo6DrHk4yKVOy5/yIXgI3pjR+HlRXz9WEtTiu\ndQh/7jQ9tss=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 26\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIES+VajjANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA1MTkwODQxNTdaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVaDtMJ\nCHVl6pnnRAPGGlZ/LoIXC2j74FH/e8FJvFmtb1FGDLkbtBJvjym8QrFC9eU8Ljqc\nPcu/hquZZTrDl997847fvxFjkX4rIlCUSjoZlrKhVFvoQdHhD9XaIwAj2rTzWGwj\n2tgJYd8PGVOHKW2dShlAthCsfzahXlli4G7okfHCgQqV60/uHXPQ8Ep0oif+119I\ngfmZRdRfQ2Hy1c5W0mBlR7CgCtw0kE2S0xNWo/uVByK0Ivmv7tGoTOlmwtV825H2\nShQL3SiHoU3cf6OQV76x0UuhrMfk+mz9gwXFm84kXUeu8T/NbNiUiydDx0hbjlr8\nVjv0e/qN9EoWVlECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUSnaetdk8gzpVAPHygTJO\n7wP76z0wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAKmCYBT716GH\n7tvkl2nAyw39ksJ2AIuqVMZuMkN9TAVAGbSzZ7NfMP9WNoaFG6/5CBvvISV4KB+x\n8SF1cBzziwV9RUNSNNK8rfkaHhPqZTQfQd2faBfAxJlP59EpLME0mI4/2tp26tXi\nvxbHAGBzfJQQmMmIDSc5Q/QzIFUsfQ9Z1LaPoZwg0oww0OVlVtWwbZh2Zdv9uSlx\nUgAhip0BKL9HCLSXBo77e2UpjybACypV4aPYBvoSLeGe2D1QIZEpQPNtSXG9q5Oc\ncuSdjfj4eqEwaKHCMLKBt+GiDNLR+Eo/eI0qMDoYww30e7V7bMVWATilgjgCy7KW\naWHAjatvTm4=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 27\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEAxHqozANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA1MTkwODQyNTRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMZ9YGRD\nueNdXAEeWAjS3yF9/atwqG//kJl+Hxmgk848qv7HfQyTymTuUM10lgFdDxo329Gc\ne0vuo2nNINVlHc7x0VTNvSwQxDFNG5GqWebX9mUSbK9FRdpNyAWBvHmY5nfVeiNl\nqQY8nDW4QmLlLJLy4XwxPLLblyu6OMXzFJbl/4DqaBEm1lJcgNMLQrKIzHbqY6P2\nxg6T3zBy5H0FARvQ4QJU+Wjhw74BdWHntGl5v5Hp7uRlkEnPs/HsB1DZ7hzBWeHU\n8OPTwZIdporTeYDkz2vv4K17j0e7phJkrzUSD2Y4CKn023jmPgvr0ShBFxdOhUde\nF13ovzZU0w/8GBsCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUZZV8rhLvGxqHXZUalCWx\nvB0rO9MwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAE5SYxLxwnfa\nkCfnOQGPwn2P7Cf1OUAyheX1XDIO4sv8Qt2T/2uobVCk6oW1Grg1cgKLZzhPnG7u\nF305hlqNmVhM3kWXN+RpQvASHV5yszyOVXEGagGTDJJNsvqqOHU/og4TjwDU4kh/\nXPYo/u3xZQCsveXX2pwD06NNCmJyqXY4fPrc06qzPy3Ukqm4Tod533aEZJeikO7l\nfvPp/X3diDCO4+xPdULW72iQnPoowG7265jFiK6eJPc69mlH7fHBCl6DBplWDdn9\nx4yGYNVIa8fmWFVoiUSFK94kt8aQczBXSULS9b2OjWTL8p7FPq7kWwCR/wcDigFB\nUwrYTF+zN0Y=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 28\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEOj56uDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA1MTkwODQzNTVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJaB6YDb\nsqxxKtzlf4e2AJNERvNn8ZtfAoia0V2Cx1ODPr9DOBlyJ2axY+g5orNCd3W7CIMt\nbBb91c2ssi71u2y4dav2Mjyr/7pp6cPT0BrpYE9wNml1+5ROYb5OjUGgMvBUlhxC\n7uDFWHShZ1fgTKWdklgdzYN9mUFc2Z3cHrmGpF7bfk4mEQdpb2qrTu5k38IW40vz\n1VxIFlkSPXtOaxhjmi+qbOlLzlMz1/tYAPXiJBcrKECOLwB5v52eAhCEDGi/SiK5\ng4SAE8qHfoX9XVPZ/b09bH/sSIJ5lJBe7t/kHh4xSKOaLZPeXjpP+DzFXfe1OhXQ\nOdwqqvuhxgfLB4ECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUbe1wq4Qa6cIqA2R/yNFI\nIYjT2uMwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAKLEoVWuOdoN\n+eMatz8x/CUBDdbqgcPamaR1XzFBiYEPx7S59nL3rOxbRlx6YEDqIh3BoJNaIBZt\nNG5XEVioiAxJP+r1MGSdOHAK55fEkgcsuyofzjuWCFJwgPkBglCB1Fs4zL37ngat\nzPsGnHuqyG4huZN8U4CX5CadRlJ/cpLP4qrVxCGKUIQtZdGawcGA9V0qZjr2OyOm\nhvSB23JRJglrQ3FwdX3CqjapDzalLnSzaQBLhlIIlf3UifORDWxAEevnH3TShkBR\nlSVNB3GXRn1T35b8chPKu9aIYCBW94yVG07uVm/UE0SnwE5YIxMsG161TpgTYw61\nQzoKKOCDmKI=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 29\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEcWsKzTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA1MTkwODQ0NTVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAyOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1CQ3B3\naJCs4znGLX+q6EO7LHZdJ2hcBEHSeDYakpBitMlcxXITyGTpHLuSsRUfF6NGpOdU\nxmbyo+B+qf+5yA/lTZR59zRYxkv3sMpOOIId0xjoLW/jh5A8pzyj5Z20jv47PHyJ\nWZvoe7XkOab1hDpBLUoyHxVJVUSLccoLX9pHXIahyZnd56AaoWQ25l8LBIdMDbOX\nBUa9gGFXBYxVdqXACyvOcXPIh/OI3E1SZ8aPpcR/zuPYSRBxzXdC1DFiyyhfW6Xg\n2qDpEP3OVmxbv3s3AdUWYAkDRBlf1yeEVr2YSDgvxfzq6/k6LsiMVyJyNRlpLpDS\nP4acNNixr0mdQScCAwEAAaOBwTCBvjAdBgNVHQ4EFgQU9T5PR14NPG4rPlbjroq7\nlTEiYX8wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAE32RSaqKXQY\n09Oqvl0RnpmnqXd4X7opdam1XxbohB7tsC1hjsvZ0zSXZ68MJUhqaoEZRAShS9xp\nJZ04yiaYB6cqMPa/APlR1+CW/Ff7FroRRaxF4Jia4EBVooWb18uR4YBZkCyJNBkn\nch0YltTMKpBga6+n8nJUuS7idTyw38cts+gPZIs8jS6+J4/3Bkq25V1OmbQvjwcA\n6xZ7Y5PPGPUCWhIS2C1syRGjOG8xVEjRwC8KwbQ9tiH+LjbWsyJHC7rltt7bp4L6\nYNmtpBF3sdtUopVbw1d3zXi/nJydqpXJJhgp6gsj1lFqE98oBwamuAUq6SlW7o1r\nMCA/Va9Mn6E=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 31\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEX8Qq9zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA4MjcxMjU0NTBaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAzMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxXFBma\nvasFsED5VxnkRpjuLhuEV6yf/m7Y6Iv7RwZlxEoNOvLd6pbbhZIHIbWlnRlurOff\nA03nhGoX71Dg6yG1OPl3cHpWczOc1Y0mAp+0+IdTcmFJ/nh4+TS7CgIXCYVB81eP\nc7DLhFhRV9BU3JJlsAh0EEVboiixIfL34gV0QvKAzEj9i36gbxeBX1/OLR8tOZYA\nt8BLKOdt4WRQoI9Zakvs6BCoxcffz2JMyhAx6Ys9+H/WCnlVc+9ytCStQ4Hlmfee\nfge4HHJQK45EDFoIz4sTdDMVYz3NNn16MJVNrbleZ4rLdgTij/52OBy5ORogfj6v\nR34oYyWmsTv1J9MCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUpDhL7jlmUzU5zQpzbR3S\nwhNTjb4wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAMXxs2M/TTJu\nyq9Zy0ftbNhmgIClw0FpnDs9JlDs8rVAlbYsH1G5QtHOoYS0FZiNioJMAEphsSHv\ng2FSA2P2F8G2mZRKcj+GR77YwSpPlnD7qg9wHXjw9y0bsmUrVqAJTJsikL5VVRyW\nl4tzM3TQylZWztDK8mXd9XbthD4bGxNmSeo1bhC11vUNplU8sQNZwwhCTIptc4jF\n1MmuAC8DhjMFdiXDnN40fq00tW6y0I3STVnbIg5jm4u1+4Xw8vJGT02SR/tVJT4Y\nXMYLgCg8syHAfPZt+McGsH8OHw7mD695SFNOv6x41R9WZS04DM/ETJC1pzYNAcWO\nFuW5d3CuMCU=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 32\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEFvC7DDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNTA4MjcxMjU1MzhaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAzMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANXP/Ytm\noI/kJjA092EE6+RQ/Oh24AWtJwJEz5i6cmlEZYMcqrUR8AlhqaJqOZgZrTrh6A/T\ncfJT2z+4E/x1jKHdNQH0y/P7Td8uubl1hfY/1AT8lSKbw0ObBHSwRVnjt6XhELec\n+4ULU2HivNpiBxrGSkm4hB/fEyfh0k/WL3GXgmcqXVxlpG/9gBuJ4JYRc1PLZZP7\nHkdCUY4EBseSpVAyQcjkIngAQtNxehbHFCAKek3LUfxoTP6Uunl+tKLRQA1uxsxI\ni1OHZb0f0FRQ3wxeDmpy2Z3HEO/4powLbzTPQDSpxrOSZ3wj8u+ES/m6tK5Em+sl\nlVNeffcu455R0LcCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUg0O6whKdeCmcS1E8w95h\nA3v8yVUwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAKpqbtAIm8Sr\n5NZDeDECSCF3XHO49Z+il/Zfvv/5woT8/PFZMdm3nl6L5Aekq3LehYiuSfptnna+\nE850eJg1EpX2cxD8MgTc2iajS6I8CO1I+lINyEuYuIQYsYlfse8Llmw+cc0YoyZb\n+fqgZaSkClroYPpASfqSjaWjUxUq4OfJFdxMvSftgaJa+z3DuUO0yQ1L7EkmIAW/\nMRsgl5vFaCiGxpJkEHxzKlfaSbw+6K9RW6i0eY4X/EY2P+97TxEwGMpmZlovuz1j\nV2SHlAopMyqGj+LT9WchxfGCzTnYRGuEsBfS7tFBC4EmTlDr1jgEdi/zeLIOPWS0\nshWiMlG+0BE=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 33\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIETh1LITANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNjA1MTIxMjAzMTVaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAzMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPfxxGeU\nblTNpv2K9ZS2m9Abqm3s5ouDOk1K1rMmuNSBa1VbcdE9/qaeR6LHCXI2j5WX+kdw\nA/yjwXeAZSV8yA7ygblRAnvlPCznQbQ1dY7QMcG4mW1J7i5eABAegxi3ZRCaVEDZ\nWCpKhZfqzfRknC5uF0aMMAgL8V91/IoEl0YFO6i8Rg3joJLdMEvOK8bYEFjJWYc7\nYEObcviconBA7u8P6b2qdS3aIh2df/s0+/+uiPjKVj51EGhR0tIIK+pM0nCKcpjr\nmOj8yTZEr6offdqRR2NBiZfBoJDFE7LKFpt+PzM3l4n5BACNwBAzVmZZTh5JQnga\npOKnX/h+aUqwnUECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUdvp98MB3M9yM4k6O/xlt\nJ3iGaNowDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAMp8iDz7KC4J\nE275CZjm9wh+Mv+jDUeg0LPIcch8A7wnwX1i8hXlQUO8q0+as3bbBizGo+KUMTUp\nDJ9hsH7YqBbW1QcLJnOAGynOz0wIvQmqrPUTwoQTjaoEKVjT8SeNPluFGukb22kz\njW/K3584JIXgRF3MeVWAKqF2SuH+aB/kzZXZQ1NH072ZEomV2i+R7JQdRg+As+xG\n8n/o5x/iPdGq+A5w3lr9VlHZ5APAV7EiUJjDKFyeUU1k9WA1TmDww5KL0JvNA8fn\nk8cwHaxdJ63UEevSAN/vx+0CPZ1T+KxTN0nOff+hLjYvtVU7Bght+KRIi9j/zn9I\nnQRoO5KMhnU=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 37\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEB4HLyTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNjA4MDIxMzEwMDZaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAzNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMLailaY\n24SX+8A3SLQW1ny1gtHXO9cQcvEBtWyoIGdKbDWQ1Bx1q8wQQBYhIFTQepXPotQL\nvcwAQFae14bdLl/hi7gXiqvWHX3O7HWWvswSW3UXV6EjaCH6YRuhfTnZavFBYP6h\nDc+k+u5Wq9y/q/nS0niYcFZpbJ1BL+3G3e0ZMsxnqtdGxhMQOrDNMahtisiBDLE/\njvEsoXtrn/GXttUAZ3nxx1MYCazaeVmF59g1zaBpzuRjg0yYPYTP6RolTK0Xf74w\nhfY63F61PSYHEdoRj9mB0JO7VE6cJGbGsGgEDyLzi2Dt1hodMNtnpegd+je7ns7j\npExQSTYCGig4AeECAwEAAaOBwTCBvjAdBgNVHQ4EFgQUL1crut7E0Y4Nkf9DdftG\njGG4x68wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAL4rq9HarSij\nLQK3hDSOsojjRI4w7H9v+onyh8Cz68IVgLDkPtbVIAe//ElyByB8lecamHb+qY4s\nSjnEydotMbvZSeEDMOOWqBgDzubqN2RU2FWDZeHcMXIruWVAKKrB+YtKoZeNlo4+\nIx+a6TD1krBxcW5VENtWlBdXUxLqgRvXdwGZ/hG0QAfwNACxMlBAJruoLLatk8gt\nFSjiuir7a9a5vDykJBVQc7Wp4ZQJhuctaGo7BOjEDS4lAmniAf7rYJjuixPbYsqD\nXpZuBODkdGwnty9qc3vWfxDU1zlpXFnBuHCGgVdk4Ab0Pm/1mWbMCLdUSpt26LkT\nMC5345ECIDg=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 39\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEddrr8zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNzAzMjExNDI0MDJaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSAzOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIoklAvm\nGqTgeYk4pxLXG0hE9DUc8hpICF/lwI80g8SNU1mleSQpFqW5kK24rXhRE/ebix4A\nFi9UoPhBGhBcW9TPytMWsUwGy9OqU+ZnX9CSGFtRAT+Z62fpe0mDcooYeTrieyKe\nC9nT4ILbPRrrV0LHU8XBLBVoapYkKrhZ6ePTFdb+RAbibpoQVLrDErRG6RaTkwGs\n2lyle/MAfPFAgMsom5z7MsYze8DzqcRCOLLxm3Wj8dvVst+TA5gEJ+4mcps3+MmJ\nRDvubFK0eZphIBi60/Jq4PW8K8O6WS1ZgGQAKiTCkz7pRjRp6x2ecfWlKjD/zUW3\nZJysSoCgqsV9xwsCAwEAAaOBwTCBvjAdBgNVHQ4EFgQURvJvljMGkeVhty96Y9zj\noFFwOfswDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBACIOSV4IDxBI\nQ653+Ry3GZ0MmEDOK83J5uhjmQsXMc2mQr81mwuJt8YAd/en2jC5QcErB9FRj/SK\n1xyqwcJJFhpq+VkGEJR8kiggHrbQQA7hhpGCprqzF14MqsMzz0bKFza1uREZC6fd\nDBzpvADDcuvMPm9d3xK6YcEpypxN99E/yhiyM3H840FkqyOati6HXTr0qdcC+tAp\n2yN2m/iM4X8mS4XfEmVHRmvblutBEN6848mQqm/eb0XAAZzgMkEquTiAEuTj+FHp\nNN1qZYkAqXWAimZcEeQQWlkZIbGoD8QOpHOGx/rNBWUkJKFI4ipr+OgVfiHPQoEg\n3gPpvPKMZXU=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 53\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEC/Gs7zANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNzA4MjExMzM4MjFaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSA1MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJWs4L3V\nUiRqEu9B/aIcIU19FA9tnhyFG4mYTUBt4ho4FfeYbE3uAzxpNo819VlzId/pt7FD\nv46Da3vs+ut29keREQovnS1HpOxZhWVh8j67Kr3BFVSzd9OZRyCDMe435cRHwP/3\nW0LXkpADFwaF/4O7/i2vzK04HK0Wb2vwIZFIixrQGVwavn/7YFeh5NQm8OU51XLE\nn7GIXhHAyUXV4RpKcHhbDPuw67obUqkvulswEHe1M/hsqtPaY5cWeIl+Jjv9/kp2\nIkl6eDclp7yHXc13Xvh2vqfrfeC2Bz3SPWLX4h9qptyC5td0tONfCMbzE9wk7D+C\neeM9b6W9kRE+f1MCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUKneg40LLxscu4/r8Owp7\nzqfJzk4wDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAGhDSonPnyer\ngyjkb0D/mejWOyOWAlM2YCktqx99hxWg8m/aIMRBP/xlVkd1GR4pp3TdP//EE4JQ\nSwwk4A81K+HY/WRflX8R5+SdaskKAXWqIwmXILVuxgXJCnAkWAoX3ZK+eneWSZ9i\npGp0n33b2lyNh110IitPpgip73Amj7Jp5oRfN7SxeAxLYgxnjjvsnWOd+OZ+/K2A\nGX+rGzlGZ36RvaiGUY4cJyHSdoQh3sGm8xjqTf2pddoWydoxmgifzG+01jLRi5Uh\nGbyq7M+wuG7aFlZuPMN4tBltBZAqxk9o4Vsf5uT/wjdWjWP+V62lutDM8lFdq3Tq\negGHxNUN5IY=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 55\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEekrNGTANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNzA4MjExMzQxMjRaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSA1NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqqd07P\nhld0loCD1hMlbAW9F9jflzb8uwWdc3mzCpmmPAE3qGUFq3IyBMxUzJKi1AQrjr51\nczUc5UukP7EpNeD+ewv31xvv5ZDpLbXmJhLfkq9tD/hSn3Ipkl+JH4r+ho2m2pGf\nRW4N2z+YJjLO0Y2KKdcFT8ErpQDciepZVY/cPRjYei9H2AR4gTSm4CnAfWdli/BW\nUkm2ApDo5iz1Sis4eysUen62Mgi3zFEnjEa0C1jLhJJfrUZvSfqDckYDRNrVWO+D\niIu/Dso9D9bzAfYoRK756J/nflqqaRLStTgQK/6RF0+SIuRIGylxZNDjAid1MabE\nlTg1AltwZ5quwDcCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUNHyTyr3tYWjGH9yHQKc1\nPkZ1FhYwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAJzWoFwYEuLk\nRbVjk8OarbaPwNJ0vqE6FXgMCaChoFTMk7I900LAymJ2d7ymfMDyCe3YPEi2Dg3D\nkeZQUeJ50rki6vzVQgVbRy77oBQ3JEY+E0q1kSu4ifBKJ7Otpbiri4vOnCuc6TGn\nlsHQBFR49gYdk7H6+o3DmUCNl4of1b6/cvFOl2YAxujjeQhd+G5gYR/QIW3bCt8m\ndg2DgLuVqOVmpVqajdafh6LygfQPkKwmycyVsTrlIDprnvD7iXsRCJZyZiz0u6ZG\nFPBeWiEUXlkjOUoR1EvU3NNpWkkFXiLeZwog6aNX5dQ9OgIhvcnpz/gzltm31/Va\n4FQyxfGuToQ=\n-----END CERTIFICATE-----\n\n\nIFX TPM EK Intermediate CA 63\n=============================\n-----BEGIN CERTIFICATE-----\nMIIEJDCCAwygAwIBAgIEH9B9WDANBgkqhkiG9w0BAQUFADBtMQswCQYDVQQGEwJE\nRTEQMA4GA1UECBMHQmF2YXJpYTEhMB8GA1UEChMYSW5maW5lb24gVGVjaG5vbG9n\naWVzIEFHMQwwCgYDVQQLEwNBSU0xGzAZBgNVBAMTEklGWCBUUE0gRUsgUm9vdCBD\nQTAeFw0xNzA4MjExMzQ0MTlaFw0zMDEwMTgyMzU5NTlaMHcxCzAJBgNVBAYTAkRF\nMQ8wDQYDVQQIEwZTYXhvbnkxITAfBgNVBAoTGEluZmluZW9uIFRlY2hub2xvZ2ll\ncyBBRzEMMAoGA1UECxMDQUlNMSYwJAYDVQQDEx1JRlggVFBNIEVLIEludGVybWVk\naWF0ZSBDQSA2MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALkHRgiW\nVjfv9aSAZ1+5jqsOBr+02Ki2X0fCZL71YSNiz90P2vud+iSeVBTSjDGrHLd3DlGa\nMYxe1DPF3PVk0QNMXVledT52wOuGp5s+6uoSX+4W/zU3efC4zEJvvGz9qiwwDO4W\nH6FgjTvVE+Rrn2pbrzW8n2lIvHnJLVGzHiSZfayQrmS0rAHrrbJSFvts1x/Al4GL\nky7RyCgqJw+KxDNZ16x4k0Gv9PhboKyUc+h/Hn+2w5RcAlKTZukLCfujg6KRUJek\nv51ekPQzRf8mw4z5x2Bd5nmxNNWJ+4CGoG+/N+mP/n2gaYMZdadQzn6l+/WtIKhr\n6QWnAYye++AKbEMCAwEAAaOBwTCBvjAdBgNVHQ4EFgQUomzurJX6M2cyGdDCp3Y3\nEC+1P/IwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQAwWAYDVR0g\nAQH/BE4wTDBKBgtghkgBhvhFAQcvATA7MDkGCCsGAQUFBwIBFi1odHRwOi8vd3d3\nLnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L2luZGV4Lmh0bWwwHwYDVR0jBBgwFoAU\nVuuRRIVj1nKzrtRFlgv3lA5UQqYwDQYJKoZIhvcNAQEFBQADggEBAEVQDi0bnfgY\nGaCMLvCnwhtqgc/rCSk2VYGlZ2QS8q+MmnegR9Lb3vZAsDT8c2TgvrnK1pHrFbsx\nvZ9xloJkUt+aCIZ/8PR+wFZrsX0P7mLT9HgJDrCciN4b/giDto9IQ5WBtp/Fr3oM\nWg91QZdONHDtR/X7UYZMm6Ev6vQAdnZkSHnZApR+0yKoBJYININZfI9ePZ+s5Bll\nmeTVjyKtCG8LgcGDDq8Vaodl36VQya5TEkT3e6rLvl9XyhxG4R3xzNEK/0x5Rh4C\nZQLB4V09fbciSfsXpOflmO5rF7kDBIJyLhwWONtnsW8m3hGI0qhwb0MoLQ/OW4CA\n7wYXq7TEzK4=\n-----END CERTIFICATE-----\n\n\nIFX TPM RootCert 008\n====================\n-----BEGIN CERTIFICATE-----\nMIIFCzCCA/OgAwIBAgIDB71yMA0GCSqGSIb3DQEBBQUAMIGIMQswCQYDVQQGDAJE\nRTEPMA0GA1UECAwGU2F4b255MRAwDgYDVQQHDAdEcmVzZGVuMSEwHwYDVQQKDBhJ\nbmZpbmVvbiBUZWNobm9sb2dpZXMgQUcxFTATBgNVBAsMDEluZmluZW9uIFNNUzEc\nMBoGA1UEAwwTSW5maW5lb24gVFBNIENBIDAwODAeFw0wMzExMjAwMDAwMDBaFw0x\nODExMjAyMzU5NTlaMIGIMQswCQYDVQQGDAJERTEPMA0GA1UECAwGU2F4b255MRAw\nDgYDVQQHDAdEcmVzZGVuMSEwHwYDVQQKDBhJbmZpbmVvbiBUZWNobm9sb2dpZXMg\nQUcxFTATBgNVBAsMDEluZmluZW9uIFNNUzEcMBoGA1UEAwwTSW5maW5lb24gVFBN\nIENBIDAwODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKdYBZJDm3wk\n4f43wHZFbUy7gawds0C615qSx7nxxsObjo8hFbGIiLEqU3NQUQlpxmuC45iOgjZZ\nGcEkdUfJJGMevybeSzDZD43EAU+k84FOnYDM2z6SpJmxzfwjpflVR9Hc4SAzqpsQ\n7qrnIvtBJNZKjCzMvnKkI3lCZrSRS0fT0FK6SQmFCL+oPy+IwQvSK2kqkdXRBjGt\nKQPvMWK1JccVOGCjX3IcIPkTgchfQCYBd73DajFjKxpGzNv0L0RHJ/8Rbl9zJqto\nQoRstt9V7uAs5k5iwk2/7j7z284i71pgjSlhx5ZnBj/1Fai+w2iiZVpwiX7UhqSx\nQfFF6FiuS+ECAwEAAaOCAXowggF2MB0GA1UdDgQWBBTRoAWWqkeklbC3hkoHGjpM\nrdu+uzALBgNVHQ8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBATCBjwYDVR0gAQH/\nBIGEMIGBMH8GCCqCFABEAQEBMHMwOQYIKwYBBQUHAgEWLWh0dHA6Ly93d3cuaW5m\naW5lb24uY29tL3RwbS9DZXJ0aWZpY2F0ZVBvbGljeTA2BggrBgEFBQcCAjAqDChU\nQ1BBIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIEVuZG9yc2VtZW50MIGhBgNVHSME\ngZkwgZahgY6kgYswgYgxCzAJBgNVBAYMAkRFMQ8wDQYDVQQIDAZTYXhvbnkxEDAO\nBgNVBAcMB0RyZXNkZW4xITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBB\nRzEVMBMGA1UECwwMSW5maW5lb24gU01TMRwwGgYDVQQDDBNJbmZpbmVvbiBUUE0g\nQ0EgMDA4ggMHvXIwDQYJKoZIhvcNAQEFBQADggEBABlv8CyAoWqgyMTm++2CXEbt\n9xI/XboYAkk6BR5QJgbRBFVyaMPzQ0UZd/EXbML2i37jhM+C8ZvZH55gnJSxMgCZ\nZ0PWKJMD+jwGB6oMGO9uNq0JYiY2xto+akWrR12FO4dE7JuuSQeCjoaeh69+jl0B\nqw38lUFadM9hEHCU+1sPm5CgnBp3o/5ynD0DOB5lOVuE1orHFckvteq8yXWuKYiR\nFV0iin115/1Pi5SsvfKyIxR83EqklPoxyn9gYQmcKg4TDcJwM2ag37AfyAuQDctL\nq4F8q/AXBPWMMXId+6KPIYDXn7P7tOPMBAG47vr3ow9kgKCF42lGb/M7hRhw6gM=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Root CA\n===============================\n-----BEGIN CERTIFICATE-----\nMIICWzCCAeKgAwIBAgIBBDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEhMB8G\nA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJR0Eo\nVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUNDIFJv\nb3QgQ0EwHhcNMTMwNzI2MDAwMDAwWhcNNDMwNzI1MjM1OTU5WjB3MQswCQYDVQQG\nEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQL\nDBJPUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShU\nTSkgRUNDIFJvb3QgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQm1HxLVgvAu1q2\nGM+ymTz12zdTEu0JBVG9CdsVEJv/pE7pSWOlsG3YwU792YAvjSy7zL+WtDK40KGe\nOm8bSWt46QJ00MQUkYxz6YqXbb14BBr06hWD6u6IMBupNkPd9pKjQjBAMB0GA1Ud\nDgQWBBS0GIXISkrFEnryQDnexPWLHn5K0TAOBgNVHQ8BAf8EBAMCAAYwDwYDVR0T\nAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjA6QZcV8DjjbPuKjKDZQmTRywZk\nMAn8wE6kuW3EouVvBt+/2O+szxMe4vxj8R6TDCYCMG7c9ov86ll/jDlJb/q0L4G+\n+O3Bdel9P5+cOgzIGANkOPEzBQM3VfJegfnriT/kaA==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 029 Issued by RootCA\n=============================================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEVv0NbTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMDUzWhcNMzcwODIxMTMwMDUzWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI5MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAxmiJEQsOfFoZlRzWl2jwooUjcKloAgTk4wQmWZqW\nBhqY5HG5jBDmik8sSCLTvEraNRgl1fkMQn5f80Oc6HWveLV4yKPZtI46N2nhoVak\nli3shZZLdblA2w8Vs50nBq+ARyssbmSY3n/K1u6AblnEA6socaNvvlEX9YzJUuAA\nCyQkez3/u7LE7HmUi9rbkPnziJs0v48Nuf/f3wJAJMyalkgk3hZpZU+Ky+bpiaLG\nvcb4V7/2o4KPdtFK3xaBKI2Cx1jpCQIR/2x7BN73jOzjDSeFGB+dNwAoRFN+tYX2\n1/Tp5qQ8RvQ//E7YlybuPd9LRG7j9ybvFPpPF93sgNtkDQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUGLGvcLk/mRly82JVapo/v0uyTg0wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAgQiOzCuv7EMV\nrjwH9usWev5aAVCgk8sxVqKcSqfzGzlf8X7ihVnJyQI5vmZK+go97rCOfpr3mOMN\nKjEdbD9y5mYeQseakrUnzk//futdAoMOoRgMb7iEzNKY735YhTlqqPTno8OXjuhF\nSeMhrPHUZfjWXkiNoyc6eahNEQ4Z232LyFrCEwRMIi1TdYoKGHxDe9CegU0Eu9Qy\nax5ETcMHr/3PMJ8w2gPBsQMnBzFyahSDnZJBB44Xn54wv+qiy59xl9SvaAJgrK0y\n4MWDrmQlrEUguxLBUOMcvfDXZTEh72jbFoV6vA9HzQbaLFyvx5DteP2XwTiTE0+p\n3wQNaFszdwLCwOHARQ32+TzpFWO+4cSTFhLyEW008CyYNwAMx0UJqG39+W7BNtDH\nTtyfIa+WLS/LczVe/eF7TomQCUri3hWWGwgHP4HnEH8zEUA8MeGpZtBomF5itXKH\nvpeuuYBII9CWgaVhaJEs9jYu8cck60sToLzQIaYgyZQ9ICZo5lSdpGfuXxufvP2G\n+0NaGeCc8m57lTHgKuXClvJ9lVkJZDUvAkHkjK8lix7NYs3QHYkkefS+Hobx0gOE\ntrp0pGqLBe7zn3pJdJbvmm+s3l+2n8Nk/xzHjUuMFnZNunnYDCacrdFtbk4uFnFJ\ncNrPezJSJUEnjXlfJxctJ+nsFApPRfI=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 030 Issued by RootCA\n=============================================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEDimdgjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMTIwWhcNMzcwODIxMTMwMTIwWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDMwMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAqvKSP8pXtgp8vsgoB63mJmlV0vjN3PHPVeVY+zxn\nKxCcOwjP5BY807tKDmqpjcpxoFDLM0qaMOugqnqkCTdQg6LTcml53m8n46u/ncZC\nNZP1f+oFe4TbboZA3svKLMS92OuuV27fgyZMWJ2VZmIXsXfaO+UtsNqpUe2Hxif5\nirSREkL/o6Y1Pm7sYzxHNmmapV6vi4NwK4oJ7fcWjT+ZDc21beeqAGQuuMTOZBoV\n6GuwdHJqHnDqkgd57ZHp6qQ9zky1nwRuzyjN0/PLCaDVRMmTiw7EEQXmdveqP39o\n7ITy67PVD/YnUf+uWT3xIV8whyGxZ1UxnRVV0hSBJgih+QIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUlCdhTT1IqwPZR0/vqpIoMSGpAzUwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAfIfXVR0CT2sJ\nhUSx50XP8s0RPvhPIgOSZunBJ3x8H1YeDGBMChdk25gZY6VzlAR26hqCT4BDds3Z\nr8X0aoafPpzkNIjhLKdCAWIDSrGpa4gfrbj9r+Hu1qq3Fsl0dDdqHOpxb6xF/cb9\nbcj3av9XzWA2osSPk/v8FwV6muXj16sCWTsnaz8qPx064NhH2RuE/AuePHy/qDS+\nUPo4KidQNoSaZzw0647fAqkj/8McX4TohjhGF9exAezUu7MOVl/zHaRhu16LJQx0\nOLR9mn+gGeAurT2sDyX1Ci/HaCojwjbY7xvakqfiTiJ9iC9bAcE2ig459jU47X28\npcbr/HAudddt3FzaP1aAt6FWxJaBMw/guXw8AE/MhLXYwQyWWMeWPof9CCW4oSem\ns1o87jwSYq5XsdKR28ULYK5K/iKoyCq3/eXQltU4DNHPAPbGzWw2Ocm1WXdDkqdv\n19jVv7y/XXPeXxfvxDgmGrSKBcJlBZlHy2Bx/M48UAb1munD66ZDHTIoooqc5JEh\nlJaTxIGP1oQWuOWDBn2WHnbgA5iv8p4SLoYC1FM4skmCOy+57iERY4hbUKSbJd2I\ndInT8TNgqgMjGKX0E+1/dVGfR90MrE3i8jqtBz4G1mRNAuYUkgTMYChjqwiCMh5i\nCTEHdj7wd385OyhwgXHPzf1XPSXpqgo=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 033 Issued by RootCA\n=============================================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIERVYtlzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMTQ5WhcNMzcwODIxMTMwMTQ5WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDMzMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAqF6yFNXvXGQt/HDujfvXtvzHZWkuUGX7PAv6BJ9F\nYZBQmMu6TstJDZYjMJPVOT3rNmCgrqt5wSl7l3VeA+R3yUAejIIK7tkUPqoR7dKp\nmoUtblbtjn+aD1lMQypmiaWwMAGwI84i2dGwRbQp91W4n2pp9ZMVQ5euwMjSspbL\nH+f2wnvXF1N6wSELeVV+P2/V3liSI/d4Cjr0zJ2NFSY0jNPgtBV4zZMJ1XhmixiR\nJib3ZLXjNL6bFTKq8JxO/9MaIocj/ZHGHT8vB4Us5rwz7N3PZt1YPATmSD+NWHke\nhq7xLxVtlmLVROKXlfeaKnUL+CHCRlhz21wdwmUJSQ5K/QIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUX+YYDCV/JhMLmLDg9aNHaDZ385EwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAj5PDj/b/UfZa\ntES6DdviiuO3lHIcV//pvG2QTSijvgoqfqDuAaNdqqJyEjD6eZokOij/pmPnAWux\n9nGTbUWYmApHW7iPR4Hvcp8IZGRmoXfL3I4dqb7+zkA5Dl1Qzxh96fZaCE9q1OaO\nWMk1yK4m3ky5fKHa8KifMrzAvygRl0Ctra0VoziHlobyBpLjnf1exCtzUpaqmNe/\nexefBTbzjmjKUk9xsdy8xynDeQCs5Hu658CilusQExDoDVagkp/ezzhcu4NX3tAO\n+1y1ri3VzNSSgox7HOqb86+5Rv8kdvhvKrYrSAlu07PUUULKXgt3F15Q/LoJMRFF\nvFTl1tstn2Gq8ru8xaSrmk5KnKwPeRx7v4mNezj+dEma5LqNf6uBmHqD2XACh+xs\nzWHNvqsfSNfLxhRhXOE4apdXqwCEiQhX//8U57Mz/UIlBdqCsX9hJeWAgleKQeHg\nVcQzLAwsNUX1fqJht3toI+WCXSWIrqx6OXbu8wYJpsUUElu3ww+zHHVlCubyr/tf\naCNOH5jSZxOSXTa9EKwmBmffs0OMloUgTfcCqcoCmF59fH9kLf6k8gMRNn1IZP9A\nM+AqrPw8trApPCyD1oY1wAPerh9CHGyViL1hh/2LE8AEpuEy6BHDzTNKgCRhL0Bd\nUmfkXFd8zcOy+Opgj7lQN+OQDCNNCWc=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 034 Issued by RootCA\n=============================================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEfIK9rDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMjE4WhcNMzcwODIxMTMwMjE4WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDM0MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAyLdb1TmP6fhElRQMq5voDKwFKZhacbR18Gp3E01K\n9s4YcsdWnwcYHhtv7Q/LHkpI3WamRVOTTKVO5IZVJ/Pf/Inm71xz2flFeorQGgyu\n/mzlIJ8JwQv8zZZXX9VsFK65FdLRDQbwWFceXMMld+bP7g/f3tN26EaEVOkpWGHU\nRRGS6h6BoVtysgnVJOSHqUmUnuGR93Hrb7HAZAqk6pIM7cS4eDwXfHwCRoymc5OF\nnHzC1hqh8oFd2lHpMMxrg0CVm63i4LsuDUXCA/Cb9rZhzhBa+WLr8tYnFMFTWZoy\nqGQk3ld1si8mrt4EvcuRclhJxsyQQB0F1Fj6iWuvRYj47wIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUN640a6pUxRPP8CkLsyGiKjSkqMQwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAKVvVDf/S8h6a\nkbGwXKUYZrGbtlg2dWVkMD4vuDMyNhuGWNTjgaWyN9nGeSfppb6lu/60jdi602DW\nDnyIPzGCRCzkl+7AAjLAK5IH01odeFEXRHCP8oS5lCjYrrRRKn78+j9G4PlqS+kF\nzT93nY0ttll/prx4VRrYKX+59CJv2vGxWutBo635AstQo115yEdgH8OobVNvJFLA\nZsJ5FssnZdQ45dNNFHiEZJ5cQK5SswAPZeu3iuhVuwofao4BZedCZE+rkUEL3Cgm\nIXzaez+LN6ggDC6+vSHNgKpwyGc3PR83CQwgnT2vXWsacG1pileOL6IkeRBFa10O\nSwOY9tqY2WEaP12T19/5UG/j+KrWZc01Ho8JYJaMZz2pSHiMi5edxGN79Mdftnl2\nRbEimP6ZbqJ1JkTsq0akvwynWh9uCTo62FtdiWTk691aKsZxL7wY9vhdlF3Va4Qj\n2aGYVwyId2BRMeCZTSdltz61nzbZgjdaB71/FE2mXq05H0W+klwxVGXALZPltMNe\noLhH4D+pUXKIyZ56zmRfGHJffiTDJ8yGsa7NOwvU9NzM/BLmdKrR5O81+ml4QeP9\n3fJxLLGVhffcuEQW4zDE9qmK8HU2pHJpOj1Y13Z8/FirHdkqTk/VLhcl31QZIpFL\nPM8oF8K1AyvTdS7qKqjsB/9kHUshy0o=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 035 Issued by RootCA\n=============================================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEM69NwTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwODIxMTMwMjQzWhcNMzcwODIxMTMwMjQzWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDM1MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAqjmSiRVBk4MEMDzI7vyyObVhQx/NL59pLFzuYDnI\nFX8Lez+XLLC4FTvQQGov/PPrx37ZrZefhyuNoB1tVZCj22QZcWG+GEXKt1rXTgRb\n7/VT78PbmZehjMgs8cGQM0oWkbrHqastkkfScn2NR6oxNlUFjW/tl/Cw6L1Hjto7\nl0Du1/0Zgty4vm+tD3Xbelzcp9lpnKCYOnYY2vPE+LEG4711wIvRszdww5lGEBLG\nkNI7ALFbI/SnLIXyZFE7fGGiSPElpjirjSmXsGDhfa5cQfVR28YD5dpUh/De5u4A\nObM0TjUvW+vnytOPs9vh5hYj9AAk8/X/UfhayE6lwYsrfQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUzncVO24RDKSuKXGgmFHvSZMmICowDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAFUoMlK6p29cR\nVUpX67g1Yb8j0ei61L3olwGMEO3OCtGrWEFI/icQtxgoSLx1h8GSVBHAJQt1Ji8u\nOjA4s8GjQQ6V0GIRK3ixvO12RiF9qjRK2IeYL/4ggG7U/xGho76LhWre3yTtCwTQ\nsCn8EtTbfgAPMARkzk9S5yiGbxoy2WNxRbEzcYrc6M90+6TCNx5RbA+z4Q9ZTFC+\nrE+CDBf+x3UCjxPQe+VMVhhNgYvlg4S6O9Ql0qLYVUW+QdR9IQfHgJ9PQHy1Y0Ue\nEuXGhnpQGPkagAEeK51w6AuFijAmr0y39LLc00Qe0b2LIgP11XZU66h4uF74OVHu\ns8cNgqo5UP3jZLd+7QAtBv/L7Jk4fKNT/Qd98NSOdJJu2Mt4pAk/nEU07TNgrK5y\nHNqnIZt3681gK9633H61WC9hHEPW9D1WQlIhK/FzuCWdI+hD1ny2BlAOsABfaxQR\n2sXmj1SYtRfKHGEXAlA6+mdnE1GHPLxmQjqWf6skE6+aY1Ge8oWd20M0D2gU3ECr\nGnzBFt55bCv3Yh2MujOQmimcrspa3MpNgNK5Z6O1cWfBZGec/84K+Jz83GKofzNl\n/NHFN5to2Ex47JzEAWh1BDUHfIEDPZ4ZVQr/2mT/PgzPqCu4snasVWPz80CwyMAY\nA3VriCkcBwy8VsmJweQUSe/8JLxZVtQ=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Root CA\n===============================\n-----BEGIN CERTIFICATE-----\nMIIFqzCCA5OgAwIBAgIBAzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgUlNB\nIFJvb3QgQ0EwHhcNMTMwNzI2MDAwMDAwWhcNNDMwNzI1MjM1OTU5WjB3MQswCQYD\nVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYD\nVQQLDBJPUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElH\nQShUTSkgUlNBIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC\nAQC7E+gc0B5T7awzux66zMMZMTtCkPqGv6a3NVx73ICg2DSwnipFwBiUl9soEodn\n25SVVN7pqmvKA2gMTR5QexuYS9PPerfRZrBY00xyFx84V+mIRPg4YqUMLtZBcAwr\nR3GO6cffHp20SBH5ITpuqKciwb0v5ueLdtZHYRPq1+jgy58IFY/vACyF/ccWZxUS\nJRNSe4ruwBgI7NMWicxiiWQmz1fE3e0mUGQ1tu4M6MpZPxTZxWzN0mMz9noj1oIT\nZUnq/drN54LHzX45l+2b14f5FkvtcXxJ7OCkI7lmWIt8s5fE4HhixEgsR2RX5hzl\n8XiHiS7uD3pQhBYSBN5IBbVWREex1IUat5eAOb9AXjnZ7ivxJKiY/BkOmrNgN8k2\n7vOS4P81ix1GnXsjyHJ6mOtWRC9UHfvJcvM3U9tuU+3dRfib03NGxSPnKteL4SP1\nbdHfiGjV3LIxzFHOfdjM2cvFJ6jXg5hwXCFSdsQm5e2BfT3dWDBSfR4h3Prpkl6d\ncAyb3nNtMK3HR5yl6QBuJybw8afHT3KRbwvOHOCR0ZVJTszclEPcM3NQdwFlhqLS\nghIflaKSPv9yHTKeg2AB5q9JSG2nwSTrjDKRab225+zJ0yylH5NwxIBLaVHDyAEu\n81af+wnm99oqgvJuDKSQGyLf6sCeuy81wQYO46yNa+xJwQIDAQABo0IwQDAdBgNV\nHQ4EFgQU3LtWq/EY/KaadREQZYQSntVBkrkwDgYDVR0PAQH/BAQDAgAGMA8GA1Ud\nEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAGHTBUx3ETIXYJsaAgb2pyyN\nUltVL2bKzGMVSsnTCrXUU8hKrDQh3jNIMrS0d6dU/fGaGJvehxmmJfjaN/IFWA4M\nBdZEnpAe2fJEP8vbLa/QHVfsAVuotLD6QWAqeaC2txpxkerveoV2JAwj1jrprT4y\nrkS8SxZuKS05rYdlG30GjOKTq81amQtGf2NlNiM0lBB/SKTt0Uv5TK0jIWbz2WoZ\ngGut7mF0md1rHRauWRcoHQdxWSQTCTtgoQzeBj4IS6N3QxQBKV9LL9UWm+CMIT7Y\nnp8bSJ8oW4UdpSuYWe1ZwSjZyzDiSzpuc4gTS6aHfMmEfoVwC8HN03/HD6B1Lwo2\nDvEaqAxkya9IYWrDqkMrEErJO6cqx/vfIcfY/8JYmUJGTmvVlaODJTwYwov/2rjr\nla5gR+xrTM7dq8bZimSQTO8h6cdL6u+3c8mGriCQkNZIZEac/Gdn+KwydaOZIcnf\nRdp3SalxsSp6cWwJGE4wpYKB2ClM2QF3yNQoTGNwMlpsxnU72ihDi/RxyaRTz9OR\npubNq8Wuq7jQUs5U00ryrMCZog1cxLzyfZwwCYh6O2CmbvMoydHNy5CU3ygxaLWv\nJpgZVHN103npVMR3mLNa3QE+5MFlBlP3Mmystu8iVAKJas39VO5y5jad4dRLkwtM\n6sJa8iBpdRjZrBp5sJBI\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA ECC Manufacturing CA 036 Issued by RootCA.crt C v01 00 EN\n=========================================================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEfrquPzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTgwMzIzMTE1NTQ3WhcNMzgwMzIzMTE1NTQ3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDM2MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEus+QlTFxQlmsyFp4vbjrrtQVJn/WhaqxZPDmtZzwSOEL3dRO0vIa\nyDpG7If66k4jcTnA7/bdu/kSfkWmMGcvpKOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFDYrAhZcqvUXEOuN\npEPtXnoHqWXLMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwDXTuJnPXYmuS1KSJ5loZ4Tq2ydcNXFUN\n0fPST8/WWqPAyipDa7H3q66sablvN092AjA2uFtBfwNr+S5KMh9qedkArG5CW6Zy\n4nkMEez14v97SfWe/MONY0eFbGNTfbSUstA=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA RSA Manufacturing CA 036 Issued by RootCA.crt C v01 00 EN\n=========================================================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEIght6zANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTgwMzIzMTEzNjM0WhcNMzgwMzIzMTEzNjM0WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDM2MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAq1qEAbBxprGQ7XTXh8d3RrKOdllPtAZPdXzwBe5O\nsi9D9xwhVnl5Yer77KU0HKIrymZMIxd7LiJ11+GLFIqPeTwQr/w4o48QHmalQMCa\n9/ESj03T5v1yDe4l8O8vycmkGGlP59MIFpWC41j4TrhVYrBskeU2zsH7kBEUSzNR\n5Z585sx+PvM9f/s06d2FcjihBe7zXZPMeMtGhIp8J9nXEITnYwZzJ+RsW4kALwBV\nlZp1HXuvGjH3IhTUhXIIEvYdJ7KOd4XhtPq348oOrScyMjxQXkw+kcgzDuL39MB/\nfwqo7YQ3qi+8hsnqlZE1Uds+ILiGiK0EHQ8ixJQND/nDDQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUfLS3jmiGFL5EIcWFjxW5bV6rUe4wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAokHQ/1UR+BDr\nV75MjThS71x3Cv5SU8s+KGg46wES841xo79fMkNfST735VOskVBOoY4FbKRftHMr\nIGZBsVtCZGSMVvbOVwEeXIfLFlAw+2ngvrGdqJ+hkqndF97JQLnLMhBgnW29/u3E\nN/81GfAPpMbQyiIhmeRFQGYgsWwRXF73XrwtlGNGmAgY8DFP5ekKJlf0vwOMGS/r\n9vtRIHZbiVCPDIY29bAC96vmfVtFoxTxDoojKwrnKjo6eIa7kzSVa5G7Sv7MVcns\nwdHqWptLEWeEqnCPDthJiXNQ4f9I6BtwVnnuF/QHPQCYc7WkEKhsqYruEbEx3W/Y\nfg7z1vTgkjq1rXip6R8GFm7FjztA31QL9aHcoj5JPSAsEbuyjv0EGlPHGqAnZF9Z\nrksB2k8X1wMpQIl53kGZC6gx+ryOxzGowd6Fy6xQejLUwVOjXk2HbhO1VC1k6NWx\nDZ1YVPV3i3yrekQ1dekhVXY50h3u385b1lER1zqraIRfTq4L4znt1kLkhuyZptPj\nQXReZrZ16KmAZYCo6u0aSnWN5T4g5gNyz6yDonC75X18urh/m7D6dAtPhda8iRJY\n8MYGqqkDJ2kaCle1pwcR/DdFuxKUatJXZU5UP9Eh2bWif/0ey6j0PLddg/vzUmSr\n9x3S5qahN8S35J7GTDp8WK+L1VgV74U=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 000\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEH7fYljAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTMwNzI2MTM1NjI2WhcNMzMwNzI2MTM1NjI2WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAwMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEgjgiLxUMtWktzkf1glqbegCSR/k8z8prL0bLxlU/06KlCR+q6cqh\ny0bDX3u577mxJQ9z0jEXoWQG7sUlDHmMZaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFHOruBoCJUVjN/Ar\nJb055li5DwD/MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwGT4kzJwmpfto2RR3JQTV3kPJ0HoVUBCg\nYo83ehnBnxj0PHuzH9UBEshqgTRGqxvBAjEAk10of8yeeS8b1Rmk2aSceZDEOEpF\nXHWOBQYTjqvliBomaEQEaYPogpHUTYKIm+XY\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 001\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIERT2I1TAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTMwNzI5MDgxNjI2WhcNMzMwNzI5MDgxNjI2WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAxMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAESAXhqsOQZFWz1EIJ7QFVYjVha2NJZ/uBOSRzFhO+akmaSmAN1xX9\nDo8KR5OoLiofunDiewGO1LcSQ4Dp3/Aj+qOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFD/j4+A4PsuJkRgY\nj04rlkTb05o8MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwEq4g5bzryxKAQXrV1/xSg5ST5dzPT8eZ\nFuN2TvKbWoh0qVZSwagytT4KQ1JZrw+XAjEAriM6Wole0yJOQK+vKVDTuUVsRFCx\nC4xpQBZML3p5Bgx+JNcgooBCagIBSV9sAKY3\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 002\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEM5ao/zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTMxMDA3MDgwNzQxWhcNMzMxMDA3MDgwNzQxWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAyMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEfhDta1mpOBvEM03eU6dh4BXc0WW8RIoEayH/Xj55B3i8sPBI9orj\n0Bdee+FFBJGoiLRGNbnS+jlXWLDGmrbq66OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFMppcEWGc0k6iuGZ\nTvHikjjyf0UYMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAJnQmCqeG7ibKhgQztdl3q/vyET+VvVf\nEZZFadCznGTCkMKWrNocqSSs8sH2HKGaWwIwHf4mh5VrDTwDNBRLhas5tn3UUlEP\npfZ6pk2SDIX0+G4uuPr0//Q5u/IXzub6IA2D\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 003\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIER3V5aDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTQxMTI0MTU0OTQ3WhcNMzQxMTI0MTU0OTQ3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDAzMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAECjK/9FKtsbnyopQGwokCmiJARyiyr4/G9Lthttr86gWbZ3MQsQ5V\nw+Api4ZrS01BO1F54Qc3aI2Ji3yPEE2U0qOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFFVd72wz+DBEi62s\n/+yx03ut8eeGMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwZ9HqVEOTXAk1RGCLWk0aLfppEwQk2/VP\nAuQumUi48hbpfK41ZjB3IYoS9lgfEC+QAjAvWrLXq1v7rIm8Pcf6iZ+rlI72d/39\nq4sIXNmXHqUWrIegp+usDAGjAYDpBffEbow=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 004\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEfqIJfTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTQxMTI0MTU1MDE1WhcNMzQxMTI0MTU1MDE1WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA0MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEU4vVtCu+sc2VldUl0QToWhbfRiAhumb2S3Seqm1P56agXPJsXw2h\nssA8ic0Jw7h1bGpM6+EzNBesTpGksBYuLqOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFL1sacB1nqqV3W0V\nbqZBcMS5s2x4MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwTJ3astNZ2hyRMPG3RO1BeKieoANrv0jr\nn5GONNPGZ11mVZYgFVSiheBZ9xqOFMvZAjEA9Qk+Dwmei1FuY/ztnGeRLw7bJ7lo\nu+rdhyvlzIO6aI8x5wgJsbcX6ST5QEncz99t\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 005\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIENc6ZkjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTQxMTI0MTU1MDQwWhcNMzQxMTI0MTU1MDQwWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA1MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEucLf6j2YEKqnWByXqcHECwNKzEDMtriPScrXaP/5G6qeJgzYgIFI\n9kXeaTRa8uGsyYnqhIqkjQx7CKoOJM42KKOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFBvWRfwfkIJ8KD5s\ntSaFn/qw4MYrMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAMTfYD1Y7mRiquCTRLMhkfYVUEeuGpW/\nfYwVZP6rZVTbPCC7Ak2c+GS7mdanU4NfMQIwTqjSj8HxgtidkhOGXh5vIfdOZKN2\nuAgvKaFoMewKrB9HWqL2fxyfw6ThGAF/f7Wt\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 006\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEbPsppzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTQxMTI0MTU1MTA2WhcNMzQxMTI0MTU1MTA2WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA2MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAElzqNqZ2XgsaL6hZirvgHr+E0Xaif1BlI5t3fNAWVGzUAKHhIpja3\n7AobOMWvUxYj+OYs1Dt/LP3TNq8o4pz7iKOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFLLTzAgUTFCAjCid\nEZYnR5v/wOSjMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAKp47gU65/w36GmA0STe4eJXcfHuzkza\nLPin+gTJBhHvNDUB139tfHQxB81Hw3AZyAIwc7kOzw5qr+EntqPlWBZciXrx5ISo\n2OQeQiNkjI5t8ng22+VQQvgU3GyOh2On7WwH\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 007\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEEoDZ5jAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTUwNDIwMTUzMTQzWhcNMzUwNDIwMTUzMTQzWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA3MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAE17ITpvjV5tEaD/9X83lNW7dkEv2ynWmXk6kxUF9yWbuwWzdogpOK\nZXOLaVEGPIiwu+MyrfEuccgkkw1c0KEhhaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFPZcKJs9k7ePl4rI\n0Be3lH2pNjelMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwMAhAKzoKbb0YB48gUSLnxJ5BKHi/9Vor\nh/8XCYbdY8mOREGD2iH+le0Il5CDPp4vAjBfsnbHqpTsXWCUhv8mHVwojbm3e6P1\nxsp/k8Cil24vmrfNN7tJOqwiB3U3L7Pn9ms=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 008\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIESa1p+zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTUwNDIwMTUzNDQ3WhcNMzUwNDIwMTUzNDQ3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA4MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEsOw61JbODkPWdM7hSgj9RowIrGVhP0sieh4HWgP9FlMMKoyKSYwR\njxr0/xoIYzWdJ5gwnQSNtRj8CU1V4zFXTKOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJUyFTuqnXRILSdb\nGj5HUwnTz+UHMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwDb+D8PxfcmwLrjzU7ujv+tugIXiUeYUN\nYVYcmKsQ1Z/dKb1KpKgsVX2s6MMjtymAAjEA21sgUQ5ftsXQRL3kIRK+wymyBSAw\n4J20zn3eeUf9sqDnE9t+iiF7UNxuRdNSm6D2\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 009\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEFLjKeTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTUwODI3MTIzMTQ2WhcNMzUwODI3MTIzMTQ2WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDA5MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEYVkDEvkG3vXJQKrfnkPXndhKFO04BTQu2srPbx4fbdBxjQlZ5Oaj\ncqugXAJy1z4zkO6mQJMQgcEczvRfgMb6eKOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJK7UcuXkAxM41C+\nL0qy0qW/ZF05MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxANij6ey5HFMcpP6155Bx4TEzlqoM2xOp\nC21B4/BQDpysARH4cqtDzNtz3r6bUjvv/QIwf4vgrStUGjOO2bMWfvkK2y9fLj5S\nWDq8vuIRd1L5/XdeJDuGIumbItoXs0s6u0wb\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 010\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIES+VajjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTUwODI3MTIzMjEzWhcNMzUwODI3MTIzMjEzWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDEwMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEmNM2OAm+Z8nWW8uHW1r2td77f6n1J6nQt8tT4PG6nx/PInVVpo5z\nCB0wlYJhZT/bwWM5fgaYBe/KsruY7tUea6OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFB/N+47OQIZ12WPl\n5RCNVcmE3Xl6MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwQm072iAm/wOXnhC0Zn632aUqJZESMNfy\n/iA9jmpWqfiDq3mpIni+nYz8FJ0E5qM2AjEAtFT6U066B4jGvuK2uMDcP8IHxSle\npjHLOVkOV0MoZ6CkK4enQu8p0qn1PqNOqSGT\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 011\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDSDCCAs2gAwIBAgIEAxHqozAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTUwODI3MTIzMjM5WhcNMzUwODI3MTIzMjM5WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDExMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEEFSwmnoHF+cFvvzNGm8WrWz7Dja7KFVsiSYeZzE9Svn9AduLqbfC\nhhlUF/JntiuWgn5LK6Z3ITHPEg9DgCa/3KOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJF3PLhoJOHBlUnt\nisEz3ManNpuFMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAPjxzTlhPxleoQE9IGaEXWP5w4OjC+Zw\n2aaSk+f46h8O4FZK3Csf1XzIoa0tLG4O3wIxALssqv1PeM0rotzWRTjTF4cJ9GfX\nTvSHONnkZyiiOxMJGgjPmW6fRZshWROK7eU7uw==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 012\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEKJea4jAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTYwNTExMTM1NzAyWhcNMzYwNTExMTM1NzAyWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDEyMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEYqL3MCTPWnY/zRKxE7mVU99FeoZcWXoSt8cCN/Wf4nT14/izfULM\nRGhiOnjCBt5BTrh0yuTEY1FGd7IZJjoho6OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFFUu4WTtyGmy9qNe\n7aKEUSlLH318MA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwURIrS2Egg8/ch3NyXxNRRCTqjhB0z/kt\nxo2HcYZGQqQrntZG1jG5Qe/GkVW/H5iEAjEAswUat1IN7i9Qv4S7Gpwx2diuBEdG\nPWwHsN8it9wublUnSNbcXp/mGEeHajzmoLod\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 013\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEX8Qq9zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTYwNTExMTM1NzU5WhcNMzYwNTExMTM1NzU5WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDEzMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEZ0AYmyso6QQUfTUmJWYCfc/ULgPC1zZaJlFefWAJd5VWnWYS1HTL\n433jR7E78yiyQqMayx6CWsv5epCYl5ktiaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAHZJmCgGreK3A5x\ntI4ygAWIO6aMMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwVNWonYIAladCUPYQ125cbghpnX2w0t6/\ntLCSG2ukE/KqNlsrVu65SW/y5FMOsswgAjA1tGjUM1xjQp5/KVL1dLyECwppV7E4\nPH0DE2uw15liowUsMS0XO/2NrguI9HLg0FE=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 016\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEc6L7YDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTYwODAyMTM1NDUzWhcNMzYwODAyMTM1NDUzWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE2MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAE3w3hoSHbvd9mTyx88k62+eX6ff7Uz4XnTkQhtzQDyJ/cQu6dDqm5\nxgcZOV0rslfUo4lwAlC0cuXTBA9kohXD6aOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFGNTWbC3f9X8QSDL\nxSCwlXWKkiIHMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwcvlWT1oNXG1c2ybwZ+sTxCBudlDQkW45\nMJIWQKtX/rAJ4/vDrL4aRJZ1VaGTSBrnAjEAr1QOmvVFkRqUlFkAn6uwE20RZHai\nmFOa+uAUNoQxKtCDoBYCug6SsqAAkEbe9olr\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 017\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEKs+LdTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTYwODAyMTM1NTE3WhcNMzYwODAyMTM1NTE3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE3MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEmpQH+8nM1cCHRoJAIv8FpdSBLYK/C7OTbBkYSATJv7wFglopOUz1\nBv5ZY3/szKKagWJ5vR0d4YHcbUg37d6O8qOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFF6n6KrNLG9YR3RK\n6WDBp49Gb93fMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwUU/5Zgx58MLFnvIqWGFxF6//7TyLkrpE\nwybMDhR5AIKnb6oWGVcOAXu1nJOtb/tDAjBvDwcl/Cca6jjGrCGQsKXirjrKyE7z\nFPgVny9iHdFzqpXFfZjDCcbAxMoxSJbQr80=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 018\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEYfwbijAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTYwODAyMTM1NTM3WhcNMzYwODAyMTM1NTM3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE4MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAELhEPzcyxRpTxZX6UO5SbBknnpFtvZrftZhyZQ7JMDl3TznGsye1J\nxa8PgI0az8Kc5XpS1fI6ERfzyN7zbdE01KOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFI/SdpH2FM8T5Yk1\nmmg/9CJK1kCIMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwQ+HTwWourWY9A4TLPLNUlR2TXO4OAPat\nqF5EWVzSi98czvfnF4wSpjGIqJZ9gaqeAjEAzJnP2ZWr0v+QXXTuOQpAOE5Rt2lm\nDODb/RTpm4cp6AOEscy69nThOxhdoNrBzZA/\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 019\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEGSirnzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTYwODAyMTM1NjA2WhcNMzYwODAyMTM1NjA2WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDE5MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEO4lkvFv9iH2hQVjcln1pixkf5G3FRlILgoEwz/SgvgS7RoIt6IwB\nbG4U/x0v7i71TWtBoHhlUdbOHFRhraXqi6OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFNYVpU0in5zGEpIR\nyO027m4xvBCAMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwSwLaf9295b5HxZCdSU0FyU9m4wSeWuLg\ngSOT/I3ISIHo/5qwjCVmxKcwBQ/iKkMQAjBGSEOPbWmJAmoNug4po/+A5j8ABgWy\ngzzyzCilbc6CQYtQ6vX5rMu8tVMzSK/CR2w=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 020\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIECbm8XDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwMzIxMTMzODAyWhcNMzcwMzIxMTMzODAyWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDIwMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEzKTn7nVzQe2AdMdg9qxZz0QL++TGcgA/rjBVvMW0eERlPkZqXpeH\n8gfBbEJsh9+Gbbi5A/bCw8V1uIG5xdm2MaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFAqMF3ZmfO6YhXaN\nrEAeAguYV2FjMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwb+IGlAhFgotHys/m+6SWE3nrkq3TF8BB\nGR+RVTwR3BNQ2qiEy3rwrlihQ1hochslAjEAplp51dndKI84th82A/ec/PpXy7Q8\nYWg/t8ZPq6EnSDiVAD1ba8JA6fbjk78i8ZOU\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 022\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEeBLchjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwMzIxMTMzOTA3WhcNMzcwMzIxMTMzOTA3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDIyMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEt+5SPdxvaWHAUKuv0gtia7dbIQSaVslB3aqHkzhfS1930P+FZCmp\nTVbIxXkDTza+Wwtrofi6Iv+NCnQBslJu/qOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFIzH4wB9wx8/J0OF\nyzCHkzmb1p0bMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAJPeOMJc0a3JD0BHPbLphFHMXlz8cd57\n5aE1sFnU3DYSkasKcZLs/UCJNpPJ44jR/wIwJ0gbuL+rSQ6DsBkJZvByyIQ2bwI0\n3InIj4rhlXOCqCcsgSQ93oE+Z4v7rTPjm9HI\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 023\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDSDCCAs2gAwIBAgIELz9smzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwMzIxMTMzOTQxWhcNMzcwMzIxMTMzOTQxWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDIzMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEChCyxDkQ5gqPnb0rxjHC0J1CVYS5EoD3N5hYibRO9Cz7zY1rTmId\n99hqLReSGwp1MTF33puR7iMhl9J9mooMKqOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJVGDFA8bnCROXQ2\nIJWDYLUZLDDaMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAN0sm9rM09N7nls64JUNt+oZw5+LbGj5\nkMQtv5eCeTf48+shuxg5bLo8exVvo+HfwAIxAL00c3Q2+HZdaVxxwJ8xTHHYh0sq\nSFxF7Klf6Xm3YdUaD7Gv6zZnenuvmBnXanlP2w==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 024\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEZmv8sDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwMzIxMTM0MDEwWhcNMzcwMzIxMTM0MDEwWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI0MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAE3N2ifVI147v9Ob45NgYIOx/AVYtiNlBOeqdgHDkvrGakG07xLo9+\noqgeT5URbs1nF4DXcELHdhabJczZHg91saOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFG385NAcN8MLrEer\nyKoLzgWn5FfgMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAI+jH78HK81/l3Y/UlTkTVQ3qedvSvLo\nCgzouT4rtQwso6ELJGmWGGHpy3YG+4ervAIwWo9A62/8RApgHP07d36EQigY6oA6\nNvjGTKw4gU32QFtpjFbzX8tTOktmTLBY0aI8\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 025\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEHZiMxTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwMzIxMTM0MDQ1WhcNMzcwMzIxMTM0MDQ1WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI1MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEmWe4heeMd71Kv8KyxqFCuDLpJHA0CKCHUlfY6tF397N/sdcH1MMy\naVOgZSpldr53EvBhbQVbtXePZCQTBb2Cs6OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFJwktsi2Ra81b1Z5\nyUgrZfDmlojIMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwfT6ZwuMZXp5wMpxVI4Pjoe2xH/K+3KQy\nRhJ1RYo8/twdYXbIEiBOqkIBOVuhGjwkAjA1KEquyQEil6Wx110ha5Wr8sZsLngZ\n2HZdQT0jmZw/iWhTfBbenRatzXyT9Cnt+ik=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 026\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDSDCCAs2gAwIBAgIEVMUc2jAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwMzIxMTM0MTExWhcNMzcwMzIxMTM0MTExWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI2MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAE0g4Rom+SJ6wArAW94cN2OL2dg+o5OOV7aYODJHeY85wESoc0+CQn\n0cBGfusJg5GWWK33yD4ac/V1RqZdv/MD26OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFDHFzkyTLGGOORqE\nIP5exrRxRr+LMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAIVABxnsbmjgjJlpst+VaZJnp6kS4pTs\ni+pBos+G7VbzjF6LsxuR7sfcWdmmYLc1NQIxAMZO6aXxyo1KO4PFzMbxsc423C4S\n1qExK809xBth2b5TauKDHffiZ0lyJCtkv3ckVg==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 029\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEQx49BDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwODIxMTI0OTIxWhcNMzcwODIxMTI0OTIxWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDI5MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEMuIACikHeix/6rU9HfN1T30Jqz6IGYJkYmdPkEwArIvkMeiKjQ9x\nnjQJy6DIikRlRpeZmqBwUP/IyFRCfvWAbaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFO9r2jKd8yLAZa4P\n2boDZkXAewMBMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwN/s6YRS0ZSKi+u4fNqhAbmmOWg24Arx9\n2EmbIMREUQTT6UIlImq3L9vmt0iSqrAnAjA5aP5J8Ww10Vba3Xji19Bd/NADTkgV\nQT8M1T+suR1/MFXMFnTcx1jPDcO1HWS400Y=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 030\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRjCCAs2gAwIBAgIEekrNGTAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwODIxMTI1NDA1WhcNMzcwODIxMTI1NDA1WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDMwMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEviCrDW4/G6BBhxd9PCEOG//OXL+NeAV5DrbZiY/Jik5dl0pVMwxN\n7PAv1y2vcN0e2i7a6VGAUDT0y1PxlKQzAqOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFCWeXLxPA08cre+c\n4+SONC4kt2ksMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwYld+v8sE8M93lCm+M06LCGHi9E+6YvpM\nOl4NzEq6VPBm2xKqmdPx12iqmPANWXdTAjB5BB7H3aSXuvidxNlf3y7SaamV5Dps\nRt1C2treh4G5OgNU2ds/ChZHVpAY4YlfMHE=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 033\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEMXddLjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwODIxMTI1NDQ0WhcNMzcwODIxMTI1NDQ0WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDMzMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEjnIhe+AWszJCCSgIp33E7JZxztqFUldI1lIkVaPGFQSv4aIeEnh2\ns0a2yJqE8b0OA0Ory8Fheh++Lb/QvxjOPqOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFBAyeHmv8qcFQOBf\nVQOeMYVIviWPMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIxAJ9HvAUP5vwRJuB5J8UX4ppHsESLIscO\nsRka1R26MO4gOQhmhMd3132/K3gm0ixR+wIwaXGX3eeO6Wx/QFhFO/rZghw+kUJK\nLmzsz1G44uDv1ZEuueBGDX97Vpons8TRxTiz\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 034\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDSDCCAs2gAwIBAgIEaKPtQzAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwODIxMTI1NTExWhcNMzcwODIxMTI1NTExWjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDM0MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAELEOSkTcpnmdVWp+UfC8XpkEujQrVpQuOkUdaxJx4YVILBxH6euHq\nAZSo9NMfvNHTa5QLOm1m3DQJLaxWVf9Jx6OCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFGSdpbdhn73Tltnw\n6G21cW68rnecMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaQAwZgIxAJ5nBp67z9ZhR/+xAd8QMJOiQ2byRVyc\nuxlRkC1+551Z/pzddQz54IXOkrcxjhPk8gIxAN86bh1QpCun7fYzrxCnxkWrroA/\nRVwrwKHbtmu/YgUlqEN0WKuDeIwO77aY9SKEqg==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) ECC Manufacturing CA 035\n============================================\n-----BEGIN CERTIFICATE-----\nMIIDRzCCAs2gAwIBAgIEH9B9WDAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTcwODIxMTI1NTM3WhcNMzcwODIxMTI1NTM3WjCBgzELMAkG\nA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEaMBgG\nA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9QVElH\nQShUTSkgRUNDIE1hbnVmYWN0dXJpbmcgQ0EgMDM1MFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEInKYHLxvJcrYn88LkUlsw5qxb/tZt6IPodtzwxqHxrpDIjlEPqrU\nysq13/gQ0gZQMRJX6YaiE6jghmvPJDFYkqOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhRWNj\nUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0OBBYEFDZZjyLshMPE9kDS\nHBZ9C5ETe5CkMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVj\nY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+StEwEAYDVR0lBAkwBwYF\nZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwAmzO1C8gimZcFnV6K0wvtdlajkNiw+1y\n9x3J3i547hvGvoaCKm9nTkcaxcS1FiSlAjEAu/p9+RJKhGUzLm7nMXf1YqvKkC7G\n0vjwKQEotnxRWvGvD+m3PV7sJvyrYBDVDVMP\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 000\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEVuRoqzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTMwNzI5MDgxMTQwWhcNMzMwNzI5MDgxMTQwWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAwMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAlT0/sSQRTPxm2js3OayWqzZQZGyyV256pCKJZbJg\nYHyLzOjlwZvenaexI4pPn8aetl2v01onsFSqsoAD37UW2FtfX34PM1FAtL6MYLpZ\np4/B2/8CHlXi3fPND3fBfRaMCHNy2JbTWB9dUaaAHjSL7DlODYMeWr594/wbfDex\n/x1b2A0HeKFgqIapT0uYo6MLFtQOtdRdyf0ocqzC6wJrHXA87xZilKpwuGmG+hBM\nJ/Eugkk3rZLSWFGVx7qvaK1Y7purnMXG+/bkByRpkWJPbH8E867DDrMNm8ySh0xd\n7ugx3h+BME3Jxap8vNzmA74oHlluCTnIcYulNQ6io4jTwwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUaRRqw8+zZlx654EBzKXBQlXKK8gwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAnKGIqDQFYlDi\nzCPtIUq4pYBpqrlIGCIK3Cfcfbgc7HOpoT28MpifZf0SjhdiXNv0s3ur51thnsSj\nt1M0M7OB1LP58crCDPMAJHfafHlEUCTkWf9PD578YIYepXpHXvXJJGlejK49r3V/\nHTdNK1E6xhrGQtUHwaf2f+fT0BnU5k+cdtOn5SG76N5Wp/wBXROTWX9uAdxPgN+y\nk+u20FCs0ON6dnnp2dMyEADBn3zBgHqGLya5om3ZKi3skrE9ZOF/P1y/SXvsXcbw\nDRLmptvuKiYg++qJhxA3bErHfvpo2unuq1JoZsDO98CBl0lql6beq2JNBYemVWis\n7P5YBSJ7oKPb8/5suGHn5gYlJ6UfcsHmc9Qqki/XbYQPjGXsqtlf9cnCimrudGOM\nztvIXq7a4H5Khim029p0Rifobmu7ZbjvrQ9vxtZDhDN6SqQGiZhsi0jT5BisjAY6\nXMfXIFmItwL8GEFEN2A04v6AgQfBIVR/y7+paINQdgNZ6s/utLVXRVjvFOQOBl65\n8rw6k+uZMMC5LkSTYqFXrRoDKIZMpKEZcPsHPE3LHzQBd+EWGAiTOHPVatBIigal\nV1MtHOpUvpvinwXj36KTN52OpvoEQAd4ixW9BWSL/dXO1BO/HnXC4AvGc7EAVuL5\ndlqgUo825Gqt5BBm3OOlwVTVY/saBEs=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 001\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEDhD4wDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTMwNzI5MDgxMzM2WhcNMzMwNzI5MDgxMzM2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAxMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA06qoUKCYkWAXMEtP7vwjNwiEYY+imalziY9q5z39\n6UlJ1AUE8+gsxDBTxeZzKgsDW8z+5Io7UpPDLLNTVuQtqZDsjBfWh1iH4FcQm1yt\ntrS2O4H5untO9HUX9uGHZpTsxYtTeriTfENnLRswenTd2GJ/NOpl7WW+YJCFpvBl\nQ9F0PHF/NWZrh+8j+fFJ0p2+VRt0E1I2O6v6nM5FIK77G1rXCvl2I5tmLs3GS9hj\nREI3wc/6sI8Uu+m7i1XyMAkQ3m2TYugoBzDuMVDbP9sZcAQSVyJeqciGLvcNAk3N\nY1IAnqo2r9u2fh6OWAm4dcg6Mf8s9jEHIwHr+OBKZf5wTwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUyIx1+wYnC/fqEkT7nCXf0gm3q80wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEALF/p3utcdpkn\nBiu8nz7o8+n9/v2F70cdeecEzJL3YmZiapbmeoas7Xj1bcZmlyu++ta2v28x9vwZ\nRmZjwqVI3VcsEGXnYqATSLWUHO/cNI8U20JE/xeXhOV36ZnTjewBJyZGcX+J1J67\nX9GkbkwTOvewhJ9PA6oI/uXY8OQ43PRSZZHExA3TtnucculgBhBGJNOClM5PfLuf\nG3WwaJE8ejM7DeN8RSmw5bpauMbUw5J0/NtdDAWB25uIokKzQS7UULVTRSkSqPj0\n/YV66sFOc6i7lGfYYcxX1xlL7xegW87IuxdQWe5dY8CzCLC6t5jWKzMdNBz5tKTa\ntX73GVIcX8Wtha4VmZ1woftjYIz7oZ4NY3FWPxYxlNGrzXj775jnxKipuXFiB8ao\np2SEnEuYh1vtUqMnH35xzHLVQh1magAT57H+eKCx3dZ4y8/bcksf5uAjrHBizv3w\nT/udd1PLuJ4zEtfXTCaMV6yeShI9FAo1ewODDPOx+ZuCn4Iov3l7IkXViVuCTWlr\nZJb6CShnCtzcf0hsfXVgKJbYOY3MxIpYu80H6+Qk1A62COCecpABigCQqwjtvJFt\n8lL0AJ7lo0nZwSSBjBQecrZ/E7bM1VxCGd/HcZbKBzx4Pn+Sla8eXNBxD4TNBTjJ\nadInH2PBaVZwyNKiMuadenzOrWg0k4w=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 002\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEfGoY6jANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTMxMDA3MDgwNDA3WhcNMzMxMDA3MDgwNDA3WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAyMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAs3ScABjzini2dUqiGn+i2EnipmaMJz9zKhe5qXvA\nyh1kp0ekrVYr89lRq3jmIeOdwDD+3Ax77ANLHRdCHFIhpsMzHvltU736unNfmO5A\nhAAxcXNwEi+u7IxyPM2sqcjPm2aCqJoiph9n2rIOs6OJD9NbV2msdxsG4on/2E9U\nHHv+PgHcg6OqqMotfoI2XYr9WYWXgl/tprE4CcpM13fWvZ0RRyHNexlTg31s+PJ6\nbXbdf2w3OaIspSBi8EB4JtwKbhhjW6CHvnq3xM/05Sj7rORMGc9lXa90JuzjAxtH\nRzi2DbRRApiQHP8DCUtCRQH1vXwq5OUyJVVVGaDgsAyUJwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUwu9kHDKcsKny6uBL+xDJm4nDRhQwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAse5qdigWczhx\nJcahxsbuWzOzlMNRPo42zkQmENnaNkBaCIWFqRU82REljuN+yU/cLud01sKN0KqU\nUtyeTDnOdNSWPBCR0VfXgxor68np90bGplJmhFOAahUM9yFdIzGfu/Akzielohnr\nPCRwlvCcCVlvuN+9uoFd/vOiINR00Esn9/ITpDMHgGIW+dIvoDCm3Guu9Q9RbPso\nC46fPPN7lfEW7BzxM+bSqA2xR7NrTJ9HFMVx0FgM7Dx3amfL9cBUi2uZwSmwDtCL\nAMjqDUiu1Lizyzvl/v4LxpK4ZfJQlbVZrKRcW9UuyWYOGgegkMJTSdNOZ2cDFOxz\nT1m9SC4yFNoPGgO6vAufuH3v8BDBIwAvc+V0zf1L5XKiDvXjU2vgqcusnloy8LQI\nExhZnLo5Fri4IdjJrlCFSysgEdwLB2V9N11goxZaknPsqg1+MNJqrbFv5BBPaawo\nZxxgRKlT+a2axFQc3+jA3sC3zDZrBTZeH7CK4MPndBYSrsU5edE6ylripaUivNCB\nTQ9cBHo8l7I+7neSl1V9U7g2OXtUKE1CclYfKCeduRfjXGUXStI3t64Mmt5XqREh\nWExC6lv3UTGYrd0+WYYWc34ebQPTd+73OA5L91L0FE29FZkUUlfpokXxvCNRy7Ma\nAwywUAgHORd6y2cYsNa9WCzeBE9Vxcw=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 003\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEasM5FDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTUzNzE2WhcNMzQxMTI0MTUzNzE2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDAzMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAuUD5SLLVYRmuxDjT3cWQbRTywTWUVFE3EupJQZjJ\n9mvFc2KcjpQv6rpdaT4JC33P1M9iJgrHwYO0AZlGl2FcFpSNkc/3CWoMTT9rOdwS\n/MxlNSkxwTz6IAYUYh7+pd7T49NpRRGZ1dOMfyOxWgA4C0g3EP/ciIvA2cCZ95Hf\nARD9NhuG2DAEYGNRSHY2d/Oxu+7ytzkGFFj0h1jnvGNJpWNCf3CG8aNc5gJAduMr\nWcaMHb+6fWEysg++F2FLav813+/61FqvSrUMsQg0lpE16KBA5QC2Wcr/kLZGVVGc\nuALtgJ/bnd8XgEv7W8WG+jyblUe+hkZWmxYluHS3yJeRbwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUQLhoK40YRQorBoSdm1zZb0zd9L4wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAeUzrsGq3oQOT\nmF7g71TtMMndwPxgZvaB4bAc7dNettn5Yc1usikERfvJu4/iBs/Tdl6z6TokO+6V\nJuBb6PDV7f5MFfffeThraPCTeDcyYBzQRGnoCxc8Kf81ZJT04ef8CQkkfuZHW1pO\n+HHM1ZfFfNdNTay1h83x1lg1U0KnlmJ5KCVFiB94owr9t5cUoiSbAsPcpqCrWczo\nRsg1aTpokwI8Y45lqgt0SxEmQw2PIAEjHG2GQcLBDeI0c7cK5OMEjSMXStJHmNbp\nu4RHXzd+47nCD2kGV8Bx5QnK8qDVAFAe/UTDQi5mTtDFRL36Nns7jz8USemu+bw9\nl24PN73rKcB2wNF2/oFTLPHkdYfTKYGXG1g2ZkDcTAENSOq3fcTfAuyHQozBwYHG\nGGyyPHy6KvLkqMQuqeDv0QxGOtE+6cedFMP2D9bMaujR389mSm7DE6YyNQClRW7w\nJ1+rNYuN2vErvB96ir1zljXq0yMxrm5nTeiAT4p5eoFqoeSYDbFljt/f+PebREiO\nnJIy4fdvKlHAf70gPdYpYipc4oTZxLeWjDQxRFFBDFrnLdlPSg6zSL2Q3ANAEI3y\nMtHaEaU0wbaBvezyzMUHI5nLnYFL+QRP4N2OFNI/ejBaEpmIXzf6+/eF40MNLHuR\n9/B93Q+hpw8O6XZ7qx697I+5+smLlPQ=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 004\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEIe/JKTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTUzOTE2WhcNMzQxMTI0MTUzOTE2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA0MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAhFAEamE+AGtKlpCDU1ILU3NUVjkrU2MiD+RcYM44\n/+t6Ho90lVLIarwpjUC9E6skZDwSfjDFv1yR+xJ6nnfK05PX6CcW4I6xIYsPLESQ\nPe988Ug9FoTvqgQ/yy+5Ru16xFNWWCCF1KgMwyxgaX2hnkUU7aOIVPD1pHS/17TN\n6F2zl46OL8qX9z9yHi+DRtjWZrQhQQ6lvi+hU+fgtFKGUUdZL/jyZXALVMvTt9hO\no7HPJDbzAIfCY5TZQByTbUwN+61twPw3m8QzNI79GlDDewD2nVzomDJUvV02Dbrb\ne+NiLnZ/jZcHzWmF0ERqXM/sNnsWxSx7ECQV9mb4LPscCwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUJjt0TYVBK65uE+lKU8I1GFuk7uwwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEANY49i1/+6S9J\nVS/yaHfxn49uVFMwJNeM7Ez6sANMxZ6UlSW5tz1xcwBo9ysViyt9W45MmKbXz0jz\nHQBTuq3jq+aDjYJAtpvlQoqARSa0P6hXPMYXXLas7z/DwUeWomV+iYczG067Swsh\njQ4WKtg3o4f82Zmd39oJpYgIbJJPC7KyaNuDionRw5fiVfgEPRmUsB1jQGWz/d/r\nYWjFU6zr6kqrVoostGls6PXxfyYcw9iiMsHWgsekyW3q+4mDRSaLJMyixw1Vwfy0\nTmYjrwg6hi9+JrIJpnFCb8aCjZvZ0JZj+tWgjGnmw0acej2SEFItMBz0UHQNXn0j\nBLVYfu9RwulqFWd52pumJVHECoDEQn93MdzippYAqEE9kaEl5wt8cd+9uRCcBuy2\nOPleKXWvuYEEjqH7SbBxHiZuqdHZvFkfRdSNc1dW7sKE6N4UZ+b8+UoCha2pUzE2\nyYeE3dkv/E1K+6uq38Fe42Iz22hlZrEeA3aGrHopOFvUY2MOM8ksdDBwQZ5YzBQ4\nHcD5RHrvsYUbkcPnnVVkN+M8IKJ+6LVowx3EG+ytzVixHrSVJ91ooG9ocD2vxZAU\nbY8gLugWaRbOZkgYaHTj4Rjq3ZxuEPXEDKrSm7nUgMMlq5BDYhVzBWXrJtyYIv37\nQHaD0AfWGx+CiPbtXWmvkhC+QLzYnWI=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 005\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEWRxZPjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTUzOTUyWhcNMzQxMTI0MTUzOTUyWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA1MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAlfxzOag9lbqDszEJONeUFuI7i0ai6knYlGyaiAiV\nkxT3dQ1RNIkypxayrZsJ7kosQ2AtS88YzQUpkq6iBqANkyH6HedXtZg5pnKYUrt5\nalIcTxb5SQi6swokkBuDS+FzW+/e7tw/GwhGW5mbaCAVTE0KB/efe5RGkbpBZULA\nQ5BIIAJdwylGq/BjPBLElNa5L4WLbKHsErG1TXKjG3Jx0PcSIpXNxe+QOv8wfT8A\nIfEtlaW5kroKplO/dd95gCDpGrYmKI2jEq0h7YR/HBzNFnB41v/QHmUYmOp9Ko66\n6BnnP5lEnK4WdGmceX+nQX9uoXkQQxvKrUbDqvcZB3/tjwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUKf5pYw6FOkzTV1+EOSqb7S1+jKIwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEABvP9TBP5I3mE\nN3kx0NJVf1ugDWLV9mWzwC1sM6pTH1i7V6GvD0tMFi6hCnwug4DUZV6wCObys2aY\nNhp7kAqSs6vzBZ9tFMdoiXX8ozqCx1SojgPDqXdrBsjY/v8COBKfDuKuVY2SlmgB\noE7msFFTIhm27SqPS7o/u2oyQCvIVjMt6uzmZ1lVIxtjCDDb3Ps1Xwp0g2BAJr2y\n/2EJB5WnRU1FG0rjG+GXMMWxRMZb6UUFfOuWdouemHBfvZqesAVDBRqd5HYX9xKG\n6Abl4YxcvJUYSPwwhA1ysxPnWLQmtJW9vtLfuaoPadDETwmZdPz69eS+5MfVmVNi\nes338/AygwibpA2g4ym0le0nTKyPSJDkDHtjdQKQLxKBCZNQMzuzn5FdjuU9Tmpx\n97tNEgYbKcjQ1oOD0Eji4ik3EVRulb8XvY8DD7SXzntHTRHfmWR52AQuX06GhvfW\n3ENiCQPtgro9js8snOD2CCvKOp1eW4eT6/t/5/Pa0YcbvcBBzJ5Uk+QetayjNh3x\nojTmNVFyXnL8iht5S5Mh2f42RPhMpN+lNBQrNx63rL9IRuC7fP5MWH0IZl0ngvW9\n0tcSInFqdw7ubtey6O2DeeYQZs5up3hc2DISnHohypgSW1gqksL2oG4mF/FJO6io\nh42jrWytzG9zPXJ0y8aviHaqDgz7qJQ=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 006\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEEEjpUzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTQxMTI0MTU0MDI1WhcNMzQxMTI0MTU0MDI1WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA2MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAkjXzEvxdokqQEvdnL7mssJ8fIkBYIleYHjYpCYMy\nzQGzKXjA8G81A4tj6zTIq8hfECnM4cafDoJw/RypvbIpdBBleCbZpm5CYUKLB4zY\naf0ru5KQQaQwDzYaDLA466l394s9r4/htNp6FETMAsuUOmefFfiyfe/p8zeOB4Wa\nI2RegtRfqZw4P6v7zoyHSLq7z44BFwuQb6Jq1MnU04NT49dpAGabvOIycJPWsvlh\ng3wnSWtapO37dYZxYkUdRmL/ihp49d3QBYlvUnZCVQeFEA+X/w56LANtMJH/8DQx\nGrdMnN78Tw1+yjoqmw9rlr0qnehgi5bBPnz1WB5rbER/4QIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUx+4dnPaikaBuT1uIzrJcruEvgnswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAP6rKaBGv9Avo\nkjEZvDyBgajuZhPcM3iD3AeBslUImSnxXPnlm2oyUPtEunriPU4Qmfon4QeDMvPS\n2tig2GAokmDPmFZyBURaOpc1uDa8t5TEKyZqUo3sq1n/H5x4VBJ3wc7VzfUZ51Pw\nN5sYqOftuI0R6VnlFeUgce4jbf8nMESmPUAFqxYkD6kq7g57UGQT/NaTFaUIugFX\nL+8RxCXEhZYDQgWyQTQFlBB49xZMdqPbnMI08Np5gFVXeo4HigW6pZNohBDgt6cg\n5OvOfPypE/kNKcWCZfihOHjdyrI/+FWgThvzcZYmLX1DYziNqdZOsyZushYAznxZ\nrA6HuCh01vN9zGrbD8q+2Ht3CFCu9ffKcSqDRrc4xWulyysDcOW8vPeqTuAlF1H2\ns70iwEWFvMmxR943iBr/5TO2eg6gmZdbVSEkxKYnoU10MuAfajQdy/P7KK4Nhoe2\nW87h3NNgVickFfKIdiGFRHqbtVOxMEvfMpZtIAC18lP2sF5inSAiLtFRSkmUXLw0\ndV8GcCqaXwYgbmuDHgG8RlYXOEkknMtT6MOxU3ocQb90HTL8hnqEEVrVfwSvG1ra\nhJqBE5i9RFD6tTeDl6Z4NNC9UpYXYK1sl7Kp3evFagl/y6TLspmjC1/zp03aZeaT\naHV9ERAp5P/XaY6KpbgdiqHas1gdAZY=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 007\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEJCe5vDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTUwNDIwMTUyMzM2WhcNMzUwNDIwMTUyMzM2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA3MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAi3cytYnPPgOFX3dzERwxtvj7sJ7/ZwAySgvUc2+1\nkvPxHq0lxoaLNcDen0tMaUScEb8TkgRKK9HOOVwpMm8IzxTr4s3SFzk9dQVSouNt\nqqArgagPVfvgAeGw/kzdQo42WWcUCdK5BSaymv8HQBIUR6d3zE1O5u/d1pWaYo9x\nIsmLj/R1Q1kI7KcMF1LWkSfOUg+YpZO+qL+mKP7qy1fcf4OnqfdVr4j8dkchCp+D\nj/aUksKlzrWoFFZH5AxsCZiu424A88kXHXevVtq3zZ8nZfaVt4FEgv3daEHaSzei\n2z+i3ldMJsW3+5Xw68ApG2A4PZHsiRLWz0chJtH45fjIzQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUnH31qRw9SbvnN41KuhL/jnii11wwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAoUK5UZA1P1Qq\nQpAOAAlykC7E2+x8+rjfubRX9BYsZjOuMWtJA5pbtgl0vhDQd5lmrU6F6M6HXWil\nxOEpJ0rtTgOvDRJNeaVzAsrtjFo97m/H2nAaBk1FlVOIn6fLip7fRuPwKG5m19E3\nF2DPC3sqltYH82YaSBItYFrOWbdy6XzE9l0CydMYKNbf33+KB6T+WqfrW0TWWlAP\nAylyG4EN7yf+etW4QYbDOIJKPqecPkms2UbV6QWcDoVI1DaR+vOVvkaLcCRODTUz\nj3ga9NTeFBE4w9BUEtngNMK+man7WwAPLt/nzt7/uv3hJPDUVTdFBJB+Di8Ike40\nm4xBrqp5xsHdaML6cTnjUukUZIuacIiLIj9B2I5j9Kh+YtVaxO23Fkqv000fv5BB\nLQYBEle01vVm0enfuJawHKICzgGIIylfuK62utdgGNFkxSDVD1l7C5fo0vPwcU2Q\n7j+RAg8n1UVwY5XTz4gnvz1qby9Lgw/h7jfqswEOgYa5It41cSzsRbJXajEvczPB\nXXkeA6RMEtb0ewEjceWsqvxZ9IDWlEbahFWP8nHnXZwelcxLTWG3tDh6Pe9xPD0D\nfKOBEw5vnCQtiHW+OIv+oC8bFAkDLe5dczckIbwzDdFhnh3j+opATirdjyTsmkpk\nNF1yp4dtA/CQ7EONkPu75lLFxY3T0zA=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 008\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEW1RJ0TANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTUwNDIwMTUyNzUyWhcNMzUwNDIwMTUyNzUyWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA4MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAqmjZb/MgXagN1uQaLtroNt6Uy98SRsWsJSElrVk+\nym9JSFuNzei0Whh8KjMO2OVAHbViZM8Rw4CxGnbTqlu5X5vjLWhx+7f9a/CsimKO\nXAeU8cmjORRPAnqrg12Q4a5tKYL/dsiRoQTK/u2NZ/G7f7DMm0MtCuyUThV8SPSq\n8oDZM7FXqmwF9WCLRfHitXAcAqoSrFpRSZ/rTmz9bil58NE+5MDB+cAwsD5SNXZN\nRc6Q4Ddr8PizwW/dk/vMZ6BAbS9bYUmwGdgdZ5yJ5s1hx5HqTvy9RVfG3dxuJX1z\nvZjvalxBeCJoqEDPjXuwPd1okUwkvfXvwj0MzH2Jni/+hwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQU7/7sXgFhAILA4xHL0HoyBECLMrgwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEABE1sRK9RYbpA\ndPjCNiBd9SowEOhoQx9j48snWbcv6gMatcCtdggUTZUHpVB/K4uTjm6+Y9JX04Fe\nYriXkS20UdbRz51Xx9ZZyTz/7UhISkpnAZ4nQ6wIqdOlN/Db+0q8i0jBnITPmw+C\n21qjHccbWIsFcpPUsXWniG4/pUfnMhFBSu9z3uAGH5qAzbQvvtygAamvtUTTue7j\n0fo8SOmrcmnHDXnEJdYjiIpxh56+rJncPaJq3xFUQnGz+Ml9fizQCgwuf5pU9hTK\nn+MdZ6cqZVpD8RtJjyQAr2GcqvcJw834uiKpTyOC9qI+LM0fr0levkGDMUW2SYxm\nLM3+vvfrUIp+jbaHYir4l3DUx5HTeFWsRjXdN6wn956FgKdjw+4cMltfqfVrIW+a\nTLOn5ki9jBl3/ynKJcC31LDOlKI7i9IBHMOSrSFf8y8kH5KvNEKmbeRGSxNpvUYZ\nHaGemroeVyXLDd8Ulfpw82EmOT7bZnPieSZRjnonBA6tv6nlvpvDLlQYbuFzpnNk\niFc+AXgUfrdGsUANzxbjYBxkWRS5Eu6fKUqA+F3Ii0IbVAdEqwOcrogKh6PgS514\n6gJ664llmx3m8tBsPPdzQUSUxKgcVcmwLkKJGeGTmV9SmcoCd8LWvZDDn2+zFugi\nqStrGPW9mdEpSKtQxUVv6uLxVKV6uxw=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 009\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEbzMaOjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTUwODI3MTIyNzM4WhcNMzUwODI3MTIyNzM4WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDA5MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAukUY4AlHEhX92oaJaEdagOpl1GD3SWZ4ukutrzpb\nyw8Kbq2lqRFbx0WYePHlMNqe314wpXhtjMcJVG42RpZDCTOZxaFnsGThPrpLlTlN\ne0SSIbek9oU8+a0KLet74Y9KTBF32SLv+6Kibt2POtLVOiVTdeZgOZ64jjb3DHQc\nPSGNTWZ/OhIqXWRIr7pnuvqltEbftmFNB3kGoDNWLIawPqflN4mI+YZuv1xPz2M9\nld+83l0LmpGoPbmgYwMhKFeVfYI6jiDPFEk+I//FrXo30GZ6wZUX10ox8aOa2UOS\nI3XPNOBaYyOzKQZr2ed8jK9ySmyVAqkIkZoNx1xx2ORn6QIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUCQyq4YWKPDo7bU34l4kW+yBfypAwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEApUpo0VkZDFDK\ngUU5fKY/Zb16IkTUb/IFt6T7epGB+mTv+lrg3RPWNYecWcMGFFYLSDnkeYQ4G7C6\nubkneBiOq9PKEJpv8Eip/sID4JcLiV28NCpq8EqqC5FRygcAaPR/BtqP/Zje9sJL\n8fjl9PryzfV7l41uTIxn8Gu2OMnqs/oTUdiHUcLYVTaBBolHhsJ22++Jfxvk32q3\nUiX5X6BDn5YXHrSSm89lsXk4P9fgLmjOPVunYejnX8JdedoV/JCFO6YJDbYrllmV\nhb9s/pWWKYcWcLCOuHKfBfbpoP5wSEg3iPRAW8L7SEc9JQk8kQ+Z+WJyR3DkBe2h\nE0RyPbZWefTY9fnZPI3LSYp3jCCwNz4tjb18wlaPz8xS2cqNdKHuIsrwhXN77XKZ\nNzSiHREfrlOQNzsC2M0f8TPqh4B0DXH6cHZHCQOk/2FBvtdallRWR/UeD5WOOUQ8\nuzwi2c1vXTAZDR1bM/lxitg23OrqQwc6PDCN10mnrqRdaDq+uAwdSpiSjiIN6AoM\nCG7Q21vsbvT+JdM5rhYDLQuHxCPM4uciclnCDHsOBjPXKW/FzAIt6llcSG0kLlp0\nMfzA8P8kw0bcePFq8xMr6FDpd9E9CGCxkXyMn2jLyOOz+tJB/rwTKifhWyscUl0y\n9YYumbJ6vVq2dAwyhAWL5YYW2Y/zZwo=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 010\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEJl+qTzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTUwODI3MTIyODIyWhcNMzUwODI3MTIyODIyWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDEwMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAwEtScKQB4zjh2Ci7OOxmnIhSVCncEZYYc9daievb\nXPn8fsWp39O9RG+27tGWQgTrxtNnm12dOEVUWCG2azr3o1DREr/ESOHQ8/3kXhY2\n86DmGZS4M02rya7uv+DWcKuZi9KR3NmbFHfqp2zp9S9xjUaugDVQYqsFJ2EYC89J\n7obFHcfw0KYiUili1NDGzcYnnTSKhKPTsVloTezq6HgqeZArkOX/O1NIZX9RRpAb\nDnJ8GgVLqZ4gCkbFTbA9FY1S5fQsTTU3nv7HB7LkAsY+BPNbOjY4nq8nLc3LP4x1\nwj7iisx9Icn/fIgFldYFDHy09hlOQntWM94hLXIT0nc/1QIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQU2KP1VghaaMiqXV/gebzG6cbTd2QwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAo2BsBPPBEiXO\n/fp4Lj00Dz+nb4g0SZLC0zIp0xvzM/ibGZufYb854+kq9RY1SeFz7It+DVOgdoCh\nGdFc6CXHqZdZoFpFkQY7I31OPkzy65uQnIzsRLce+Ct4Lts5+I0XHDpxtGOCLaWo\nMs1bTleWljsxgmw3CWY9V14tIF5dEEmnUgjgbDo7Ai5nLahgfqNU4XfXK9zSRX+R\nV0IiYDVFDQqfzJ4GroB4ttYthzr1x1e+vJd4Bh9ErF3v9L8cCthKytOwu65npYBG\nUGH+aWRoaX/3pROjXEZFhFHfNETFc+gVXesIfYeJJQPygudADNYfVtAsDF4qx3JT\nUUlgmzC3z7YivGGBD1Uoj2b7x1DCCy0x0v8ibXbgd7nT0g6a0lZGt4i4gvbUUbEm\n463Vr8Bb1XgA5bsbevUdR8SmuIY0PiS7qioQs4cRGagOSVG0MlKtDD9E/jZ5PUZI\nRpTduKG/lLwH0HHeNgKmDt/pTQWa4/sUgp/KHqg1E82J7sCu4vB/Bk1pTybe4GV/\nYDSc1NGABsWRzZnrIHrIVsXYM5rQzV9+/+BxRmhEqUVUGNzsFYW/RRieNWyojYG6\nv54K9BtAELt1tWXBDE/2Np/RFZQNeEFh2pkLxRNOXytuVoXwII7QNr4TDef2PmE+\nthsvOkC60E8ZEsKZ8GU3Q32lT5CExWI=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 011\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEXYw6ZDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTUwODI3MTIyODU3WhcNMzUwODI3MTIyODU3WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDExMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAue1NnPP7ZWDRj1of4h/vyabVX9ZLHiwuBIZkheDk\nNF4jsn+uR8xud3RXZrNd6lga6kmJPBwwa60HNc4bJ1XuFVy6Ch2V6yYNqzrIHgTB\nzfc5GqfjVXir47tRws2Em01lv+hLPcx0wdJLw1WVadwjPjKDVauNMTaWcZbQryXn\nZQkDTlNJqMEwCdYrnSxpNtgvmM/OqvdgQyGTV+N1A1uHGTqMyaRVzuq9BGyLfLrd\nbCgum4OUTlwmhVkRXCoo4loa6Mx3qlP4WsPLe0pnGnBNXzUO2Y+F2Ye2S45R58ox\nkeP2fznHY0z/7FDAJSYZSmfnjGwuNGANhoqzkjmAvfDOXwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUXCkgdCF5vHBNsdjFTDTKlEBWF8owDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAYeUbnJWPImxO\nyGYdc9kPj9xGd59U0Y4bypm3z2YW4tPLr2c5MP8Tte0Cpq3AD+V9MlWQW3VRhcv8\nATEcKyWoOEBSPzNcSMDekjwAnS4mAOEdlJ5rG+bbixH5116QYUCkJvdVYIb3sZTy\n02hj2Z3zofmz/9CSCuKqeQdoF4l/3olR8k46Pd/Z9DUZSCxW26WYzviYORzAusoi\nH9qGgO7NLkFeYBlKFrkplOWlNTpM1psfAYhIuhhnIGarcp+59owc99n/f3VS6mQn\n789KMaVPJYqOC2/t1R5P/hgwoDxbjoRmy74f+nUmMdp7lF55GsN/APQ71LgqDg8V\nLuVVuaFSW5kb8DWDjG/z5fNR46/TBI2VFAAabuYmfC2y9n4CYRNdSHH8FnDOGdxl\nll6VJi3x84ywPxNf3m9ok8j+lmoiGm82YUlZbAnjFIoNtNvFIh5NoPzf6/LHEKYD\nzOaK3TimuJESzPuxjTumUj06rceOokczl2oVvGzvHqWYAWU8gJQa1aY3LkQ0fK5q\n+Vc/+uenilJEXEQZX2Y5Px8dLDcr9rPiMuxY76sEcg+PFvJLg9QIhKkgzt74v8Ih\naeDhrhAwKgDKcWAohYA/WQluxQommKp0N0s/Oi6yICpV73l41ea7kKzrjMu40IUS\nbefqsgmXOcuz+HHnTsINAd1EK+kMoFI=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 012\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEOj56uDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTYwNTExMTM0ODAwWhcNMzYwNTExMTM0ODAwWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDEyMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAmRofX7r38HF1HfxgMgmjSvbUTA/PzJy2+cFlXqyR\nUzqh94FRupAD8zpBD1D+qyjr3VDhEhfc0aBmhpQTytMIzWb9SJl5ZDXRlqY+o993\n4bkpetcCBFvfTheA4dIopNr9+N7v7m4MvWriTc4QAQKl04QZj0NEyZSW5e+yD3u6\n4d1a+xw25basgJCAgHb4l5bkkOL5DVAIMmUXiFWFRXa65hMSm1YBGzPmfi7ufkaW\ndokdXZJjV6asff799x39Y2PlvisZcWEvL7qhSUvXvwI/6JDU1RWoTuJMw6OkWGY7\nt8hP+I9zFSXQZTwuER5oE4BSqZU8FmKIUvJ1OVZ2pmTuFwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQU311tq1EC3xih93ET9Jg8Ysuvc4UwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAofgkjR4XQMxV\n891IQs3jKjie2IZvEqPFsBOnkMwp0Yb/82f4HVe3A7c5YGnmrN04rOAl1xB063xK\nm3Bfm6y10p2NHyTbI7japuITYG0fZP50LEQT+AtNyUh6iRXLxeGROD5HMLcF/k1n\nBuZ8SJ2XO+HTmMqsaAsP/l1EUmhMUlQkgOhwdN/ELnRqM9/RYVdSk56I+RVp+b4E\nzuqhIFfas6wfC+XoZIqXpVljux33na/6v+A/dSxR6uFcc5m1NPVv5KKQaB4Jkze+\nUlaVm98jKJbV1N1FvL5T9EoKN5EZq2KmODvqhn0JO6gu5D/35aR87BHUuW8vDoSb\nDWkbi2Y89BJ3eNTPR03k6uniBzHwFYuTvuDNPIVG237HsQnK1PT947aGE531M4jT\nYd4DQqSBCgKc3T2a89MDfosN7Qg+OqlA1nA1eHVWyRuRdk3kr/fy6rWK4DotZWFH\nwkN029E5PQNd1cAVFioSTwPT34qPd4wxEw9FMnZ9eu0QpyXBQwJO3sKrN8czyk43\n5zeIuH4wRz6RC25RVqRKm/OufIcJKRAdsuryTBb97KwRRtVpD7amPaceGWkLCcgH\n/6iGnsVP+MKDA3Wzw0xn7LxYC29/TcNZZbVXcVxe/N+IUSeZNhekOqvjpQtPsG4r\nRHaB/fhyBjos8Emj9y/jvLbMQ/ypYMQ=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 013\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEcWsKzTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTYwNTExMTM1NDM0WhcNMzYwNTExMTM1NDM0WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDEzMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAl2EhmwUjS2q7V6oFKcnBvB1NIzGWUx69wF0Fn/89\ndgovVwZ3hYqyGvZaMaojcJa8UtdlFq0FrS3G30VZlIwAcaVQA2I6LjftvVdYUiC1\nlvmyjVFsO8pXMIN8azbhDBTAclOqIgAWToMKjmoaLfgY4c400+GnOlMFezUAwGze\nEdhv7IHaVO2kS2fbA97bzAzXJiFWMW1A0V4/yBrLHr7hBm5SJdjgFYPuAqfr7aeA\ndmWnR7ZPlcN+48r2K4JAjic5qbQAWJ9pUVOw8/i1KAyo/IchDG0sID4dHI2atOLg\nukejlUaIlGiUbqCEdY1jB0GZICuy4wg7rIvyNZvzm2uSIQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUESJ6siiYMomtLn7mhBMhkB71kvYwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEApfzZ2HRYpPua\nH9KLRfYMg2AOLxxcZfKhvBPIF2E9jQ2I4H0wE23nWRHWbs/fR2LOY4tKTtKQkSpw\nl7Lu/zBri2iogp/X0i4/FTlx0OTKkfXbgoMa4W6a84DB3bIcpx+uWgqU9y5IZnym\nBnJrHyRNgln3rxualgTkH9SJ2dgCWjVxd4ekM9tgEXrz/DNN0AxkJqjb29AxboGq\nPCOlb5bLVODUaC4UjiEMTOlXPYiu6cf0zto9KCkV7TpvlX8SfFYwds6dIjcn4px+\nibnFk8Odi1Zjv/FGu2QC/b29jhEgzLQlhfaBBhOcA8cw27Xi6K7R7oxlsi/yC7nZ\nFEXtR+Smq4HE1FFWGQCBzg+kN0T0L5mB8ud472cMJ7XAGH7odlHAbF8kqHOuTyqR\nBYNgJA6SldVFLtaXaF/2J8PtZe+qQkaHqW554GJRKSR1Y6D8geWIFJkv+3mvK1rA\ndvzmeYEf1PcI7PR8JeHMOEw9JwE8VqtXTH32zWJn+d4QuU3pgX9Icb+2yHHCwz8i\nySGAvhIb7/h/nWN4LmHQ+hdQ1UFxvYQOMSsL1c69ahAAX84s8XZrv4lkTigFV1gV\nHpcMGjtfKUsoEo6gA07+DVSM8C/1F6YnElide3GWLEY+LnBoloB0ka9K6ytXTjYI\nJdpqp4BhblKl466LOKmsKm3VqKshehk=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 016\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEFvC7DDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MDI0WhcNMzYwODAyMTM1MDI0WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE2MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA07bl13XpI1uk8IOcJ99Z/G47J7SFTL5cr0U/lAOY\nd3hu5CLywtoXv/1BZwlflhLA+4OLX+LfnoGTLyr7KoXBsJyIDEYeoa/edTpdEhRE\nCp2zPKaSKQiCwQncGgDIjBYr0bop2GtZoTmb3njCA27vIEKo1iN3IKJrHGdcQZH5\nqoCGPVDMj6LN0fMR9ypzhi6xemye6Frm+sRE7vdzYslHizQIhmuxXGyU6dmj5aVV\nrqmfdKAhG/AIvRYpf4nwxbaoXNExaEIxA3INkxwP8/dPEj6VdjlPMv8EuzTZ6M1w\nOj4t3VPSM+wU+MzQnnAwUo+e9GRSMjGIvfocgq2vabPZUwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUxm79LEkkbmB90J4XLlp/jj2mD2IwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAX4En48dnljkW\nrdC1OECq+6nFTlPPDYpfcXz0rKjGC/wpKTlvWVVA0dLj41y7Asev8+bAR7J67ma0\nyDwvAYsRHUmpR2cN8VPUPp4hdksAQWD78laWO3/oRSjcTjEnTN/Z8tMt0ROG6yGx\n1vh3JidEz0nzBGhyuX1yfzYlDCeCWZQPJTghf45KRKsZYq6gbSPcvWX3XzHDmzd6\n+y/fWivl1LUqqBWD7F9nEnocCjYqGXHHJKjMC63XLrk4ilc2UrNpDJuo8jMdMM/w\n/gJjk8qWMJ9BlGoybs803QYv1dWkayDNTOiqU1Fwod8SjtV38BZIf1DrwVxNQl7S\njQicbh5Zrgp4VtHNaZWOE2/6B8P+KiKf7Nzollb+tn5c46NF0A6PJxkekpItAALn\nU+AynGMLIfDw0HwdZ+1Opn02YbCh3rno3JbymJP0DLOgGwtS7b4EIJuQ9FY003wg\nyJ6g5b24y2KsBhgdEDZiHodiylje6UVkGMMrvHdWLEPGtNUylzTq9sgXoIB6JW52\nd2oM2FGpdwvgJBcP0zgBlD0JUG0VgoqzwUAXwzOWWCv3TtwAngMwpH8b87aq8DQN\nurKZJKPI0i7mhw+1yQ5Iv5QbB6H4d9KwzS03IqksJD+HuBGLTzkWTZj8/xWOkD91\n4tRRYXiS8KNhZiIahOBz52dNt+yPy7g=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 017\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIETh1LITANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MTAzWhcNMzYwODAyMTM1MTAzWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE3MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA5A0BkjXsH/WNUL8O+YlAPQcXwHbM2SCt7jfY+xA0\nuCzBAn6a7q1ggyyJHqIEWdWEhlXyE8EYK4/6v7cWg/h+TdZmlLPF/0YaF1zNV78V\nW2S/Z0wrgHfZzjVj8ihbSFd7BdmbrS3sKmyf8OWk3LJgoRY8cwiKv2fsTP3iC1tx\n05+/2TsHPI1lngA6taSZtT6kA8Xcld6mUnbzGwhRwtZH/oPaD/7OAq57p5VkdMws\nqGBjy9CG1UXUshLsJzuFVezT7JxEiUrxhOFbC4NlhhDheD4jZXMNPFUzIhD79g4f\n6rPl/3WtbzdWjOxZkSlnAQsMUsQGGw/Z2stv2eYCRBcAKwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUwAROOyP0OyhUu3atT915vGKYbFUwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAtHI/O0RgS8HQ\n2QIPWF3zjWK7v+TN/R+t4K1uTSeS9g5Pzj8JMTwsNAmjU+kgZY5WxbCIVszF8sXi\nyTAJIz2G2gwuEqhnoYQ5JKbzxol8ulpNELfExtMsAveX/tn1MbgtBpcw94VoNDcR\n4P3RxpYcZ9qg8vAV7uvUD1JJni4VmULHGGdzXvtV2sCw3OGzrle3lfIoBF5Vs6Od\n0+wHb2igK62aJQkgQIFN2ZBaWRxSwyrZgXlc7CTX7oEV/KoHdyJH0fjVyLUAs+Yk\nYyirg7eF/BPD1sztVQI31eabaiBKk+brUZkFyiBHTsLozH5snzaAQSesSSF+OKHg\nMZ2qH/xdl0XwH7qDW5iSf9Rw+vVnofiX+TIS8J5iMRV5PMB7Zq23j6vMtf4BN67r\nR7oUioPy0z+gcm12GzTIZ6yZsX05D/PQ9KsreO1LP1SeqZ3rGo2mzFGIPIuKqkVg\n415pIqzArFSTi365u43KRitWrFHLVqbNIrfO5iBEjufuwoLchCUfK1OiW6u9Ycj3\nL/XgTm+hGxnyc6DIK5QJOqbEFn1nIIcxIIRdXzDb55IIx3+LLcNrNqY/pwe8g4gG\nXl83tSIK2r/C18P7/JRNYSp398LcN/so21I/XcG6qtFsqCFwODJnx+9ed3A1bcg1\nAAk0rA06qGwW27QA9NGfW+Bozk5NNo0=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 018\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEBUnbNjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MTI0WhcNMzYwODAyMTM1MTI0WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE4MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA13d8bhc6JlHZaW5lk/1W8jYSFxAJPfw8vCfbbGlR\nrrlfJjHplcRTiq9/+YIJnKepyu9ZGpfVZR8++NcxJ0gPw9opaQ4A8LC+d2ZL80g2\nQ8Hu9ZNbCBD9p/eau925d8Z023JxVZkSFYAQaAHGbiYbfpwWgyG7x1OgEO6kqKjK\ncOw3kuu+tDQBVwS39B9SBALXlY44j1CvBxa4OkG44Sq9SvrTTBmjCsNBrnMIbjWn\nt4cTHMsZMT23Od7Hd2qvP7Zl2MlmAlrA0AiFrXJ9/WXsglMEA6H16jnzWvl/NQ66\nU2a/Accsc+j8gC0HheGFIP3zuPxTuQGFjtU4O0/LitUOvwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUjh87HhKdSt7XYx9bSit1gorygSgwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAPZIS+i38p80Y\nWdqcSe0dN1sepE5Q7ibhCy8/6sfXPSh4H96usBReYmfHzx456iy8pkwaBBRDG9OF\n8U8UDDSAAre7Vec2uSBg+N4dyzFTU/82HhnppYdb0K+s3jA2suHsz90ORZ4zaG73\n322bIXnLmj1ftSFrdCPDKb4b9gY6+A4nG+Jk0gjGblr8WJqcbq8nQ0bMbtoqWgvR\nqb1FFAqtgKGB4krr9xfLDdTWH3Xha24qzkk2s0Noll7Y7aAx/PfPTQOW/sWgzWri\nh26e6EUbgUkKL2Pw0KbsypqVBKE4BhNYf38WFQ4KcUkNH042BAlwU2zFWXvJ6nhk\nlXON7YeLT5bg+fbIjU4e+jEm7IroCK9p6KURWjoOz1ErdvagXcXDifUf8WLV5rX3\nmOouPYzDbxPVKsQqetA2kKE07QCcjuNGdDAP1eME34ntL+3JbUpQ4JYNUu6NdXYB\ntwVwA91W0Nx9H1Rlbf+GGq7+WOGsEPkdnRN3zyGTJst0eaYZbRZtIH4SvccDFXr+\ndFCZQzpQW3M6rIf8KKS7IkqvUDqd95SiyyVfM5QxFEefweMFl+EMi497gVGJR2/t\nyc+4zrXOmwXEJxdIZueJmSyO1zVkH0jF8G+skyJ4wv1ZXghn/Chm9IVpW95JTm5a\nHl3ICSVYBbGFDUIC67t6BJprXy33fms=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 019\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEPHZrSzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTYwODAyMTM1MjA0WhcNMzYwODAyMTM1MjA0WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDE5MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEA21/GD5Jk7IgyuVi/coUHHYN890HpShCa48WVhi/+\nD9Pvc8avo585MYIHHqFz4VZh6RUyBPLIxxvg4Zt7E3P+edxx4Ov6DrnuIGuhA726\ncDLn9tynWonacFG5q+XiLpyHaEmxdWK/LEWKMT1TlEwnSDSB7cF+eOWbrCt9tCQG\n+gqWVj6SAvTqT37ZGFOywU579KaYEaI01Lf81Wu5bifoHwicV420PqcDsHyG4+q0\nLntEcmZCck4XFce2Kwk0rt6sKg2yKf+PKU06QbAGTtJEMY9q7hWLboAuZ31tMfV8\nrQN1if/dJVeVuGQg5e1iDkC3BkyKef+0bPWKMOtPQ6irMQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQU6QYXl+jl6MaPk17l6Xa8j6F9dSMwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAJwFGx73+ZMAq\nzaa9EroKhK7ECSx+8InpjdSUm/y8GRUtR70SKoJuJHK14rWVOC5Lanrwp0gXsa0S\nquiGBDL0bzG1JTtNGBIvwD1C/8L6vQlxgbwFuB2Dah1YdPgmvCck4xyYua4qlwav\n0hF1nxccYzmGvbxxYJH2zyz6/Tees3PIw28Zhujsa3W2xUHd1lqazxvOchDR6P0u\nBvKIZZ1XXlgMnhaVd+ZYW6nYAKrGh5/d6fIp7CJMP1QFTIj7OHkXZPAvEarjo8Iw\n54UeKM/t5axLP7hXBrYS84pbnni5aJ1C0LsjKsi/goMV1O16eQ+UOg7huJR8rQm+\nuSVjVaI5cq4tdRytGNix401TRLHfn2XQ4ea6EUSbbFR6STioKB7HrMqISrbbwdNj\naa2TFNkcC/GZ70v+UsKoYmwqoOh1rqPGlnajaSE7bU+2uLXDYYqLtsjPg4vNE9IN\nLXwEvW+YcKjB8ZMPCfh6gSbUmZ0j86WXXCgPCWUEQgeyT1oRoTkB4Ie4KpkSBUsk\nwyg/mKHFN/edv1wZPUCz/npaK/XBQdkHiGLmp3oMscwuPgBHXOlU1EHH2QpnQr0f\nzFpBgzeC0P8d0fK2LFj33tvJcHgZnLLI+d1Zw1MAJL8xnH7QR+jRoNR1sNRjqUG6\nEqbwVM0ToXnZ/umHXLI5ZicMb+fdz28=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 020\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEUFU7tDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyMTA3WhcNMzcwMzIxMTMyMTA3WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIwMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAhLyPhpe3CcmBDqyufzYyX159EYaxCxeO0GsSQkzo\nK503UaukVqxlbLFmj0WVuDvDK3Z0YzELq3OFCZlHBORok4uUpWFXtW99anDSW7xP\nXfQ7X+JGwEi/RAGw26UwjHnfYxWpxTPmzm2NsfXvwEVAA2/h1yv3wxIntq0cB+Sq\n52r9kCALfEEScZaoO0f97a5wyiKnmHkP6WVLVCm6CYrBRkgAgBTpk+O7Il9l8dg+\n/28bAPt86exBVD4kTvZDq+3OLviQquHvOObDNl1FZimpJV5oVKxjyjE/mf0FmNPs\nb8xjcIvpWHQXjDAaxBo3WQKdFKUQW2Uzqyxw5GHCujpV0QIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUMsbldmY/7oDWTN17GOVgOGOzvIowDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAQBrZVZFzHZdG\n0dJPwphGzsXV5b/zBVX0wA0BGWh0TYzffqlSOmkrN1SXceDxgaUyi/ZQ5bEhvJys\n0BsHl6Ovq44Xk3hLfbFVKQ8aLV1mfwWSEYREZMCleJmleBi+FD9dDxCFem6UBe2a\ngiibX9Am65XYtGGL9F48A/WHq4bcs5frM+Aq6BqFNUU1785cNWCTjpLmCbDVxwYs\nprk61dGD8L0uQrFGZWZHJ4EUlBtezHAHTOat3tg5SrxkCs6D5ThNl27TDItRqCCB\nROhueR2TDAvBVJpG3Xeg6AGhNwDv9MWd/kQFjUDD0I9leWhpdTQmRb8DpVhXTxwB\nf8yiOIGh/Ry9m6kdxeMcbExUyW/XZBiEXFE1qlPPuJsmPTddYtL1X0aaefeN/Wik\nkKoE3vKvN6QduyIpPI24pybgzyExJz9N6asLxvN59ECb4Hpt/dkJUhCU6d+eB2OW\nKnMLdTHLjxPy5ijJN0frnX2s0p++TV690ZPwJJhP3+qGzy7pk89BVNRbKSEfRJCk\n3/5gWo8S5O2Us1PFsN3gkTG9wUCakhmNRJjWDNxmU1vnTtBP2Z3zYps2/K1SZRxh\n8vz5iT8goxi7iW+jpSZ5Pa1/q4rmPv0OBbkUg5mSf1F68drGfUtnEkiTRo4g3SGX\nHJsfLGq5sTYivqQONogTY/8yGT9bLDw=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 021\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEB4HLyTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyMjEzWhcNMzcwMzIxMTMyMjEzWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIxMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAlB5EbbHJlUM0PuUeNVQfPrGaVm7t5UwYrbgU4loi\ncjYA+7pDJND39g34LJecBXe6csr48QmWc5gj+watzIelr/XBOSGfXO9fX5Uueuis\ny5rlQH0jo6VD2qCZHcF4GT8theCx/fxNdWX+U7EYjbmfvTFFqEIRMwvjGgmUHGoi\nW92xoIl/Td/h6u/2IG/W9lud33ghWdVPnNo8UyNyDS+zpS7CRo0ufYGYun8I0LxL\nILceKtVdHdzsgA/UWXx+5x9d4z/5NxNumyBGb2yw3q2FLVzW6cDGPCNJo71nbXX8\n6McLdoo6/WqPoAZ38Lmg5uE3EXGMFLxvQlQuWETUbjPl3wIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQU2iBu9dps95yuk8Xkcv/pSAFyzI4wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEASvYoQD5PVK9n\n70uR8krUDYoqcW+JPvK4zYoPL9mjpFfWGMpvQWaxqqgJujb52VVoRs5svyj3m+lt\nv4f+MwaB5MbNt8RzX6PqFSd7ckAuaMAnEe8jvKABG2kHAzvECKQYttEt+NpE9O0i\nQQqDiCXBUH32EFfeXkvcDTwUF+hnBLZ9R1cg0eQfowr0n+yqkbWxbon63WoIJVNK\nrctQ1Uzn8KIOZnZNQYIqhLEeRaTZ6DMCRETLYIIn62/n6ya7JCRt239rQA/jAOt6\n/oaKit/M+rfZX7zKVIlp7Lw6tFVkN/3v5SdUjmGq6Sm2d8mm4LOVEcMINuL4PrSn\nuEMvFen7TwhZa3u68dNjYubB1C7pKBDZCvgS1r074/Gj+dwGhbS13wDHa+ne4MHB\nWX+8bj7IOPqt7HI3aG07YhjGgvZfnJ7JDkzHRXo1ab6FAg5/6mRagWnwyn6TFsPT\nf/O0Xo7txKxahndlolifGKSO74BEwZytCD2CpC6Mb7VdLRczQrgs9l81LqW2lkXe\nxGmoGmpe8ZuNsEoAKMbXmjVe3YdyBnpy0gHsYseFNGtXRKRb5mtKyQgKiJfqwjkK\nIYpUGaAs5gOQvJseHbSAz+k9R3yC6PrJpX1FXUK9xo6dR8IvGkdz7NELPWZ7UqLQ\n50BKxd6gCYJpW76RaC8lAoCJ/I7UVbE=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 022\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEddrr8zANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyODA2WhcNMzcwMzIxMTMyODA2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIyMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAnFpFSA+DGquMUBFXwRPfuqD7xt8iM0P5erFCkhqW\nzt9DRzHt8ZP6+oPa+rlKncXyvpPAZckchkMRI9c6VRLWMFtMKxgnp19Z1aZKHWNo\ndcLACmHQWVaw7KRraVrGLg/v7oZB7Hlqd/OByP83r1WoR4hWzhYS98bSIYAlZYOk\nbvGpyilwkKBBiuhyBylGg1PS06b5sbEUgxlb0YA8pWrWICDYIwQTRXcrXZqqXct5\nwnuhoTHnxGnhBmbrnGkhAoTomXcFdzBchk/NBdUsIWZ3J1RE+1rLftcODqZ79hpd\nIxi3ltYfVBrBsAKTrP+7Qh4o/xncu1cZTYO4Kj4dQ++RCQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUcCbQntk13NxE2E19p1zPCrwf3gowDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAiPpFXHrY2Br9\nz4Uw9+7YLlyEWgZfH6BRrDzXUHzuePRSa8odikOrDX/UcZYjzjJOOmDZhMDH9RGC\nxf5ZmJgDBirgk6GF27qgKyGi6TM2SMPp1EfPC/QigAEeBdSeHJPqfDSiaHaFRCuB\nMZSdy6oIXZhfaKd6iT//m2eYMHu7bVWBB/g9fwTvmSkim8EGjMOkiBrZWsejkbwu\n/Z9rTTw/fsZs1gCLLIiCB9oQbnsz07VIPqucup+rhv9XVJ/cWs4qo0GeWKuExGuk\nZfjXSqIlmldb/SnGoX8U+GhweElMLWTYAResAtaEMDg2vPek87PXywnRWbMEt68t\nPSwxAM5bqeD7eSl4WR+kRgx8harnDrBi2mwch4C4IqMHn6bP/OysDODw72o62nXu\n5jqR0UIz4zGvkkYlMuPcQ1izfYcd7m+MB5spZe9vxbVaXkPa+XF2b0uZNMyyOuME\nvMubFylnNiqmcAl8U+8RVRlLxG2Hh35KK9qIlQ2lZ7hTPRmQpFC9S4uRIzonXnL8\n7L6BVkn8zjCtL3xu9S7Br77y5DQCR++WLACS+tKY6NXmW4pXEcDBqwWsKTwaXjvP\nICAGfLGQZ+uFoKhRM5w3OySzsWV5l2U7hxBrrag2L6cNkUbVvSrEjXxaDq9xQTS6\n8OY/sm8ZOVzgfXKihvQuMr9uE8wq3s4=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 023\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIELQd8CDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMyOTQyWhcNMzcwMzIxMTMyOTQyWjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDIzMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEArC6DMuXAKAHFjEfXCBzSolXaP7y45XRAZeEJ9lqR\nsj9DCvSJZYutu88cY/ZS3bMGlteQL0ugb9VuaNXb6aPU/yhykkx+r7Hv+xivIcIn\n9cpTgp4fxJMcoajWbUyQf8iRLF7kODr8tdqU/BYJAkhc7CpKI95SBFcCZ8Zp9wpR\nUJV5nyuXWYeluTIrAYWlza8PTqs+cQYi+eXkbEhVazol1gdhEP4alPkZElJwKOGb\nAULGDRAzZV6kAyjFpR36eQHF8mPlVP5ZaknoEXHimKrd2aZFF+ppjwUuFsuwg336\nlP7Gtzit3gtAQXH65nXz+UETdcbXIP18uGnu3cZWOfLEaQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUSskM7mjUtXKd5DV9LEdYhPQJt6YwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAOBr/pWHv8eZt\nQLema7QWJUFG6CkV643c/94zNMMFWxvkx595B2t7jZsp41zBzEGI+m7XYFk9HDVF\nl2ZJrGXwMEYwLjkrDJ7uorFvmCv0By2H7XbC1eWBAr8eFl+AQqr//Mqt8FjFBs7B\nLvK8cUMRico+39/aaa6iNTJaAv5hBjOBkMNQOaNmsI7XPh0T87rpcD0pK/XEprg0\n/xi3OnjkeMMTJ+98Va4Udg/EFcg/PSwhnQOi0y/uEvz8g3ps8RSEAVFw+4is3Z3z\nJ1YQ+Omb4muk0/M6n1AZ2vWWgTHTFV/a+zkS4p2fcw7/p4u3THDFiGrxS845Ps3g\nflrd09HtuukkAl1iI/UuhigT1COGdtaZq7pWUPmrm8QtFA6zNPcOKx5Ox7DZ0xJc\nK3skfIJb3BmqIj06MYFEbOJYYt4Ac4gfTWg+JPJjmEzqCr0+sNGgGmCOw8SelTtc\n/KIN8MhesIFzuRnqYJ1SrIBLOROehYbFEdK8OZEGCkRpYkVqXn4CM8ypvxa5wggM\nif1t5rDPVRAZddJj7zlPms4mEf0nx7HDua16Fg5TYpb5RP7ev6k+EmvvPIopHk2J\nSrvMVNjlMicx7NvPCa3oUMffso5OjQIv2nE3/FmVdVtmT2RQxGKfh/vWq0kmGF0t\nVMmzMSa6dSLvRaDJcl515LeVS9tZvEs=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 024\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEZDQMHTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMzMDM2WhcNMzcwMzIxMTMzMDM2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI0MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAlxFity2Oj+nLDYbvoLMjqmgv3/UQFTVWfhDUpywt\n+DeMQq8JteJmxWXZMKsMMRHG/1FzOWjnqBWcyUCqVNBSFqkU5GOw66Y1ahVrdtFg\nbG7FqqOcFOFHN3RljRDEboh26ORlrMB9h8XkB9VaHkYcLvWu5w2VtXyiP6LSVWq4\nsbErcYwpsdFupR47PKbqUg6DSJzZV43U2ypiGQxw10Yz1KXGOXZhtozY5nmX1W4r\n78Vb+R6t0wfFE9BpraE94NvzKUMAkZddgf3uDL1BzKaTCMe9pK6VkWnUU9Yfnzu4\nSBiG3DF1P8ZFCXyiJlG2isD4LnuEvW1y11jpJSjX9JQYOwIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUJlzzJHD8TZPHAi+jSrTICHlIRUswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAIVJNce2jrlnC\nnXc1TZ09ztr53mVC8E5PJwlf9mo3bM1DQjjcK6Lqehm/O+2pxEOllLt2txaYBWUc\nanuDdLitxbSq0o+CnQ/KR8nfxwEEuxI886tlIA34UIh4Fs9O+6wKS8xoJ5quI5wp\nR4m+hAy8b1QUmTTum0mbBf0VDgHW2KmcaFnawjjAzGKNQRgqAI3WfSKWFiImTPtZ\neMb65U5WxVC9Vv2Ge+wQIkx80Ppm1jKV9jRaXG0C0ssciI2IXdIcLLMDgREOAEyw\nv7JMu/k9Vqr2nj8hTk4ZjoXOk4K4GxOb3qmTRKFKY0PLIn+C4skPoy+l06WgC60P\nbcPmV+UxYaKPbTK8XuDqwjra8eZjE2glUNvY8VVRDWsqR43Efqf7dAM9mC5hu2yd\nt33BJHkweOosoJfuDVWVZlQBqrRvr4j/P7rVW16fSv3ddqUlwkV9/fE1pG3K1ak8\nWBxlx0jARAt+Wt3CHYZ6eS+txdnSyREDxFM2SeN7PRNIKOeOb3WKRLrshdLaFH/j\nHujysgv2TnEWJowLe/KIPx3SYnaRF0UvT50lbWAryIja7LJrFNl4JAawDx9ANC+X\nmwc7yKo2vd16zcX3pG1+4sAD1+9JyqPOMP4VU8VqWKz2cD61CwwIBYnXxS9KGz+V\n8s8K1sKzv9rxJExbFtBhTlNiVKFJvdc=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 025\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEG2CcMjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMzMTA4WhcNMzcwMzIxMTMzMTA4WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI1MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAmPGDHLCw1mubjm7m4vlAa8uN1AviYgFwjiaqjBg7\nubye56UskBqSZcvWVaP9ep54vxDZE2L1RrVy47kGQMc4HUjrMAv7O+kqJ0gZKU/S\npimoC87RiXILuQrC3SQfWiajHAMkZ3IIUz8wwTHSR86gjgc1/fj90skwOL4MG3tP\n8Rqh36ETtVfTaeLd25bhgckDVw5rLH/PigI7d3WFh6S8eE+21wWSloHLMpBqqKoM\nzYeBInlDtBfnryps8FBmhbbOg0RUHcTRKONW7A5T0aHgyf2b+7P0jlywqDXRWi5O\nfbLOIHUj2lZvaDcufETeuCOboxTHWLRbZDSlxuRqxP8BawIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUKkppgyWhsiBGTvAJsBiSJosl+E8wDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAIWXOlu07AR5i\nbefH/JKbJVZKywvQDn4w5Pi5SpaV98dfICFMNCCD0I3u6WMTA6UNAcad1XfPrNt5\n0mXYZxispIOTxYJ4tzQ0YpuaCulULklKoaWD58rPjRMbLjPwJiasV3LbDl8WVilo\nDry/BmKiBUrP343xngS5TkyF7Xpl2NXkqWyV8nuYOjqAAY5prXnFdaPCamya1MGI\n/Hh6fNcJAyLlyrxfDzJZ2kJKiO2KtdNIa77wl7YsxibW85WYudzM4+gbKgMhb8pQ\nacHL/cL78Py9DgyKneHz+8LbWYHuLN7BR5vFa3C1Flv/e22yWUwSI8FWCf/oyf4X\nwPgJGWoW6BH3HYjrfzjqLuM/r9nZG7FfMrvAoiD+fVj/Ou217bynxAoQszeGjMDd\nVx1LFVje6m7diPXiCauLO0+JFC50c51oUWyoYtvl5cX1weWa0E4vSeJ/hc60ddfR\n3Sbn298kmWIe1AxW3bNbfzPJRDaxkeACcbjTcXpLp1C0uK3rBUrbfX2xXwsyQ0GF\nfR/cxAFaAhJhRt7K0fijhEmaI0r/pBtsKCwkcg9E2HWmeiMCBHcVR4+ZATqWe6u2\nej4e82bAe3QoH/SzzI2Gipj20YEncIuN8KHFIg4mjuMLRFD2bGHGx2uKSJAOSiUp\nucbI8QJL7ZjckWXXR4Cj7micglXK4/k=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) RSA Manufacturing CA 026\n============================================\n-----BEGIN CERTIFICATE-----\nMIIFszCCA5ugAwIBAgIEUo0sRzANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTcwMzIxMTMzMTU2WhcNMzcwMzIxMTMzMTU2WjCBgzEL\nMAkGA1UEBhMCREUxITAfBgNVBAoMGEluZmluZW9uIFRlY2hub2xvZ2llcyBBRzEa\nMBgGA1UECwwRT1BUSUdBKFRNKSBUUE0yLjAxNTAzBgNVBAMMLEluZmluZW9uIE9Q\nVElHQShUTSkgUlNBIE1hbnVmYWN0dXJpbmcgQ0EgMDI2MIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAtCO6bM6wy0aNEmYNXK34bMfimGQJMTlfu72qqJBv\nytkRClYYl50myAAGu5/mCkzjlaUrGSld2f8MCr0514O3lVkFQOdaf7zHFBxcEfvy\nZ0fv8O1/OhoNN+9GEnPkXfpoNysQNa5JApCKXNrFw8JOfHjxQ5tzSZ1god5uMCSr\nG/H10SP/YDjpWHw9BgYdhVE+wvJSnsPa3k3k+UGQEuUdm7LOTFEElCUrLESTCfo7\nLs9N7dxdP3OGUZQW4tfkw/ZebJ7blcQTvk95ROh/SUoKMRIe3NNkNIwyZLJkHa+N\nIKINZ7PvuR67EHxZocBPzf8FfRVkljQP37o5LakS+LTxIQIDAQABo4IBODCCATQw\nVwYIKwYBBQUHAQEESzBJMEcGCCsGAQUFBzAChjtodHRwOi8vcGtpLmluZmluZW9u\nLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNydDAdBgNVHQ4E\nFgQUmmQ7xIAH4IJHmEMANrZYQZtwwHcwDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB\n/wQIMAYBAf8CAQAwTAYDVR0fBEUwQzBBoD+gPYY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhUnNhUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcmwwFQYDVR0g\nBA4wDDAKBggqghQARAEUATAfBgNVHSMEGDAWgBTcu1ar8Rj8ppp1ERBlhBKe1UGS\nuTAQBgNVHSUECTAHBgVngQUIATANBgkqhkiG9w0BAQsFAAOCAgEAkt7WWZQeuoEa\nKUgjTdR+hFowYDmowa/zebc/g7knMOL2GVx1F47p93wiR4wxMsfYUb9gJMXJ2w/F\n4e5yXTJav7F/YIdRxRB3LLaFlT/kBcCCfOOsDNiTE1jkn+ZaTP4mgA7vMoZbej9o\nn85moqYzSxj9Vj8fs0z3tA5lnbpX3mDd/YQ9h7GZZVpsJ895k+030r6uP+qfV7hO\nyzLYQWbwf74NUd9iN8S+xvO/JNOWMtrgaZs9PQiDy4zrK1f2VveCOqYXpEkHQZYS\ns6VU2wvjpL3YAdtyc6djCDx8300xSnxSwZn2tEypgGjBnNXBD7zwl7odbRAWj7Hr\nWEPBEueSFQzojU0V0YmnidSpx/+HvDPL2Fv/7HQbSJ6rifcKYOOY/LbMylWY204c\n634eAP1nf/e0eVoO2LFM8vcwH55CMGtojyYOXoqWz/fImbCm9Ts5HID+YKwYRE+v\n0cZxw6Uyib6ibxbiOs8w6VqX1JxUUa/Z5ocl4HP9V5tkt/WiK+I67ZhpKhcxez9I\nxQcJj56P+W4F3PyVAhFUyE5cFoJ0LdZ756q9OK1gzUVk92r+CvZCXqQ+Ii6c37am\nZ9Vm+8c3CH1dne4oLpZvSnrBU6Ndjb02a3tAFGIJqXQAtG07cmBBbm8NPvSE+65U\n4nlf2WMqom/qnrExKAqVFojOHAKg/Ps=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 ECC CA 039\n======================================\n-----BEGIN CERTIFICATE-----\nMIIDOjCCAr+gAwIBAgIEJEBefjAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTgwMzIzMTIwMDQyWhcNMzgwMzIzMTIwMDQyWjB2MQswCQYD\nVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD\nVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ\nTSAyLjAgRUNDIENBIDAzOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH/VmArA\nLCMF8yt4fOpgFDNtQIByMchULOXfAiYaQRfYQ4jSDfu5L5UomXpssdFcPSYd2a05\nxmd2A/HeSmP2mC6jggE4MIIBNDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKG\nO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FF\nY2NSb290Q0EuY3J0MB0GA1UdDgQWBBQ5tVhLfPFnAecwmOIUup5lehAJMjAOBgNV\nHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9\nhjtodHRwOi8vcGtpLmluZmluZW9uLmNvbS9PcHRpZ2FFY2NSb290Q0EvT3B0aWdh\nRWNjUm9vdENBLmNybDAVBgNVHSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaA\nFLQYhchKSsUSevJAOd7E9YsefkrRMBAGA1UdJQQJMAcGBWeBBQgBMAoGCCqGSM49\nBAMDA2kAMGYCMQCKyV90uLjYXeG+waQjv8BbsLUaGGbwgCbN6vnOShE8eZOv+UI9\nlpnddzQAOvH3F/oCMQCNDn9PgbwAa6PdG4wOGJo2qojMXwRLz59SHpGvRYi2Jv8X\nBIYjvam/7uzBzX/b3d8=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 ECC CA 040\n======================================\n-----BEGIN CERTIFICATE-----\nMIIDVTCCAtygAwIBAgIEOB8u5zAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTgwODIwMTMxMjI3WhcNMzgwODIwMTMxMjI3WjB2MQswCQYD\nVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD\nVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ\nTSAyLjAgRUNDIENBIDA0MDB2MBAGByqGSM49AgEGBSuBBAAiA2IABCCw6GpgdnzD\nrmjpcdnveQuwWnzi3PzC4ZwYcTHIoIcFIvZKnfyN0iABuU/DNEkIiBufNqNk0VBW\nNzva1kY7BwyyyfHQMDQF9/pITYfFnH46YPQ73hC8z6WQvGy7fWZilqOCATgwggE0\nMFcGCCsGAQUFBwEBBEswSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhRWNjUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0O\nBBYEFBwh6YfjojX5mLh/5xE11xsf+M2OMA4GA1UdDwEB/wQEAwIABjASBgNVHRMB\nAf8ECDAGAQH/AgEAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5l\nb24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1Ud\nIAQOMAwwCgYIKoIUAEQBFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+\nStEwEAYDVR0lBAkwBwYFZ4EFCAEwCgYIKoZIzj0EAwMDZwAwZAIwPrqpvvkaAbsw\nmnER/VAo4g7BuH+sHpltd/pz26eyCtr1xsHTkQr14jMAaCCFdw+jAjBaP3vGR9KW\nvSFo7xsgohrnLwW/qmX5MweP2SU9TjfFpfOzIR63hkVsop32FboV/8Q=\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 ECC CA 041\n======================================\n-----BEGIN CERTIFICATE-----\nMIIDVjCCAtygAwIBAgIEb0u+/DAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTgwODIwMTMxMzA2WhcNMzgwODIwMTMxMzA2WjB2MQswCQYD\nVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD\nVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ\nTSAyLjAgRUNDIENBIDA0MTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMSnWthFA/js\n2tVanRDB5jfjeS2FJ1WD+k5HH+528782K0ssIGAMM0EekBM4K/saYA5VjXujVh50\noejmBi4SLMhesgMX9yTedaDQ67WtgnCEKGUl6HC59SRry0XvsGYt6qOCATgwggE0\nMFcGCCsGAQUFBwEBBEswSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVv\nbi5jb20vT3B0aWdhRWNjUm9vdENBL09wdGlnYUVjY1Jvb3RDQS5jcnQwHQYDVR0O\nBBYEFBwyRK/0EsRTBMDIdgnsRecewlYQMA4GA1UdDwEB/wQEAwIABjASBgNVHRMB\nAf8ECDAGAQH/AgEAMEwGA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5l\nb24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FFY2NSb290Q0EuY3JsMBUGA1Ud\nIAQOMAwwCgYIKoIUAEQBFAEwHwYDVR0jBBgwFoAUtBiFyEpKxRJ68kA53sT1ix5+\nStEwEAYDVR0lBAkwBwYFZ4EFCAEwCgYIKoZIzj0EAwMDaAAwZQIwT9sh6m7Rndjy\nxRH3njazRrYgQwICvdNDQ9P80z1BE3003SkCZxoN20IpDercWZwZAjEA9cHtFcbX\n7JzThD5sXiibq/cwoCFfqY+ih4iwsQzdDhAZ5+w0fTQAP+4H6iXxq5FD\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 ECC CA 042\n======================================\n-----BEGIN CERTIFICATE-----\nMIIDOTCCAr+gAwIBAgIEJnhPETAKBggqhkjOPQQDAzB3MQswCQYDVQQGEwJERTEh\nMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJPUFRJ\nR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkgRUND\nIFJvb3QgQ0EwHhcNMTgwODIwMTMxMzQ2WhcNMzgwODIwMTMxMzQ2WjB2MQswCQYD\nVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMwEQYD\nVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0pIFRQ\nTSAyLjAgRUNDIENBIDA0MjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHy6yq3F\n3TCvBXY63AGJzHxRf45Gipj7C+W9mnAyz3LAEMTIVBtS4XcvHR6oQBt7RRvrpwLe\nTJjg1Ngg0F4zHPGjggE4MIIBNDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKG\nO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYUVjY1Jvb3RDQS9PcHRpZ2FF\nY2NSb290Q0EuY3J0MB0GA1UdDgQWBBSxHzPMpgZWuiWcLpBaO1Q/UkSXkTAOBgNV\nHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9\nhjtodHRwOi8vcGtpLmluZmluZW9uLmNvbS9PcHRpZ2FFY2NSb290Q0EvT3B0aWdh\nRWNjUm9vdENBLmNybDAVBgNVHSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaA\nFLQYhchKSsUSevJAOd7E9YsefkrRMBAGA1UdJQQJMAcGBWeBBQgBMAoGCCqGSM49\nBAMDA2gAMGUCMQDtid0qUz8rNZM6RL6rZJFkp/TnGK02NDJxagGxALYb/fopOFTi\no7vPa5tK3AkUTYkCMGPRO189BXa1pCHN+f5504WalgQtwCXBVGuDRikyMGQlQ+pl\nbj1WIHraEHemKemcSA==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 RSA CA 039\n======================================\n-----BEGIN CERTIFICATE-----\nMIIFpTCCA42gAwIBAgIER44eKjANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTgwMzIzMTE1MDM2WhcNMzgwMzIzMTE1MDM2WjB2MQsw\nCQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw\nEQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p\nIFRQTSAyLjAgUlNBIENBIDAzOTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBALWm5gz88K3Sy/isxkOOI6CgwdMarVGWyplY5lA4IuFVBXhzAPkJ9j7V2J1r\n0MYWFN316C7CSq0Egzl4lhorCWxBwAzRtJyze1O/whfhDIt+vz5Y0oWZf6VJ+Hm8\nxUGC3Y4kiOOoxwcRj2O6je4pG2IQFNOjWJRptedpVxs40FfwPzQyQ02QlbKCimxm\nfv2j2QWbe5/zXZDvu1tit+VpsdArlVY/50d1yZtristSNAJDSqujYv9e1P7p3HWn\n0u+Pu39RLmVUdkxZhmc5BlEjsicA9J6Vc43/OPrHSbTjHtR5TjuQE+Jikw+qOlsX\nHNSu+7IX8fJD+VLUWpYBELrseBUCAwEAAaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhUnNh\nUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcnQwHQYDVR0OBBYEFA2ZaVGbl50y7kuA\nMWVmTpzIb50NMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYVJz\nYVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAU3LtWq/EY/KaadREQZYQSntVBkrkwEAYDVR0lBAkwBwYF\nZ4EFCAEwDQYJKoZIhvcNAQELBQADggIBAESxfFGILeC/800JE3wk6d9n/1miLP/T\npPDgET2a2zA+oTzuwTYwURM9zenYFJtooN8WWs/DbYUbUJlIHvnUDHtsBjycCHry\ndGqLzK5695YZjVOfQQaMAZTYX+DbQnD/yGO8d9mOfvJ60daakjAM/vUcuJBWckN+\ny6vTMMNM8XNX6g5Clq1wwKqJfZrYGc0WBAl7Ce1PnW3JrL8fFjghPKJqx1tyEUIk\n06DYktk+SMp2nZzpqu/jQeADNnTWNS6U4kPIO5za9QflknMVoOcLHzi8R1VeuhC4\n9JHaTjvQDOG3vu5cAI3B0Pcwjra7D2XIhevZMXKFwG2c917LtTBs2eSdX96veu1w\nAUcSm0mdkJsasV2GtPzBuidA1da2VreHZbj++WMFA9b/RPvDVuZb4OTSRlZ4bsy2\nHgZm9emRv81xPt+w7FRsDvHRh9IXeuQLSuRTyasuiwjuzGbshLeZ+3TgH/D+3Ahv\ngNzCtQgc3DH/zklADnbndVS6B6Y+8OoCwhKRTNwhESPObYr/jD0LyU9+cYW6hHG/\nMt3w33Ot4Zl5YlGH5tWGOputa075PKGUKB66tOVLqtiU3A/T8iO4TxAk5r3u+WcN\ndp/KYlZfHphTyxL76jUpdhOg5vq3KIiNOo0B0DPBrI9hu0zv2ixQ9VrrTNmSqPfm\nlS0hAEXMzh1T\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 RSA CA 040\n======================================\n-----BEGIN CERTIFICATE-----\nMIIGpTCCBI2gAwIBAgIEEpl+qDANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTgwODIwMTIzNjI0WhcNMzgwODIwMTIzNjI0WjB2MQsw\nCQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw\nEQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p\nIFRQTSAyLjAgUlNBIENBIDA0MDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\nggIBAIvCHKesblOFZ8vmu0+E9ymDL1ebAXShjihlfPB52Zul1GsSzkGZjikIMAUE\nE8WsSCl4mNIzDKm76bfTPfjEo06Ztp327LwGor49sucp8S4aS6WiEJ9Ni2YuP+v4\npPSckv7t9Hzf732YDIrahZA6RSc+Vza+g3j7bf5J7F7M/OoKrUDlgXXna4wmjsgK\nkVTv/Mnqc1i8eEMaKIswmr2ZD8kEtA6OK95Q0/TaBDmIs/keGiFtokMT0/OL3xLn\nnoI8dVISWKCy4JYYj4yYs7IToAz2NhX1iS2T/L99AzNZIegw1hQ4cUTvL/yIuM9e\n+e3+dQws0N5Vgcvfp/KMUKPq9aku8B053Gz3fL3jNCF+bT6uBxB9OE0dTW74go8Q\nKO8TACNryjpGe1NdZGcnNjmY3LySDLMTwPwBBjin7BFYkQYLMT391ZG7LPO7Hv2h\nmWjGHZ/Fjv7SY1xSCvFL0Ll+R4Z7WNOKDNIH0wSEHOW6k3tBQkYgaQO/+blbkWsn\nYSCzLCuxntw0X2j9MSHABRzycw+Jfjp/6ya/bjL32FU9RGQRO1aOvYvOIWvOCr/l\nZN0LZn22C6LWi+J/V3P4Fx9CIcO0daNwdozbDwKBDG3OP3gLSFbksoSgN3xtXbem\n36xuJCRSjxl1lSFfbJ+GmjW7U3hA3Z2qo35tqGO/UEkI1uUNAgMBAAGjggE4MIIB\nNDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKGO2h0dHA6Ly9wa2kuaW5maW5l\nb24uY29tL09wdGlnYVJzYVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3J0MB0GA1Ud\nDgQWBBRE9bvUvZBBpOhb94vU3dAIBUA5sDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0T\nAQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vcGtpLmluZmlu\nZW9uLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNybDAVBgNV\nHSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaAFNy7VqvxGPymmnUREGWEEp7V\nQZK5MBAGA1UdJQQJMAcGBWeBBQgBMA0GCSqGSIb3DQEBCwUAA4ICAQB3Bj9GzKLs\ny5r41nMa69j+Jg3FPq0uQk8XQY9xzDserF0kK0j6wEHYP47OJ749pxn9a+e//VMJ\ncdfw/dDF/nPFlZ0pOA1XsdEpJZTt5j+OHDg4Z0ToAWSbul8gd/cOZa59RJlnvqjk\nz8627Z3L/V9opIcMvgONgU+e1tLvjhu8zLL0U8EW+nHCJKH4bTY2r36baWyXa7nZ\nXewzFl24zq5qweLRfx6fi58mEu8cqzDRwkbqb3obwZVW9fRagv5T1CWQInlMbbET\nAln0WH1Kw1XvqOBkQ00dw8EOzbxxuD+JSqjBbqGzh1qeL/HDIRh+v4Qpbcaz6r5y\nCRFxu/nEchIBGjdUkVdGD0AblHV7joBWnr9eK+qD6uBNyAIl3rfjVNgG/M77YrZT\naCF29ONfXoHjVPMovDJAjCJyW0/HZkSKIoPK1ZkVNNotHQCHOhHSNScy/B1HvMTh\noQKkWLegoonMVDwzDqFT2H65e0FLVO/XWKTEW/z8WRbQ8812J1BSXGdU4jLWunmR\nxlGDYdxaet1j2LXvOOsyxfoyVi5SgDnHWyHGX6071s5p3rQcpiyxJEh0+4khuV5V\n1P7YXig5hiAEXlYrNByRGiQg4hUSEBQehuvnhJB0ZiLyoXaCulmT9o4ctvM2WThd\n2sieTn6+DW9ln0H27BBN+AvkIhTKP1ChMw==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 RSA CA 041\n======================================\n-----BEGIN CERTIFICATE-----\nMIIGpTCCBI2gAwIBAgIEScYOvTANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTgwODIwMTIzODQ0WhcNMzgwODIwMTIzODQ0WjB2MQsw\nCQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw\nEQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p\nIFRQTSAyLjAgUlNBIENBIDA0MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\nggIBAIP4Z5VoOlFJqvY966nmrBRV4RH0KRC/aW6E2+Cq+aT09+JSAOqEDg0TE6Fb\nTb7Q/fn3FlRCIC0MCyl7p7y5E8+VDd+og6cZ3E0ppPVsTEjHplIq9QnxnrKu5D8o\nyn9g/VGBogAsm1UTNN4G3f5l6fQft3XsX8vH5k1g7QcEVNXNE9a8gw6NDNr8ZCLO\nyvg5Sa88v6kq9CghNVjiSIQlKaJ+9uwJO7SyCAINlL9ChJNNTP2jD75H/6ZCGZdX\ncSZNNNPW/wAyY7zkZ57BFkBakMVeKmmMnaJWF0xV2BlbHFgcm1PHMTc2qV32hBeJ\npA4Secgr/RzvrC6M/Vk4kgclxIQU865TP06w2xTLVx9bE841cho9NCiXG8xgEzZ3\nyOuQ+97K/5+LBNGr8kOdYxEXkiL1ywjEYKQDzfSQJMjI6AunycUqLQgkH6T38rEc\nFGJQ2/EbAD8zj/HkMjPzSQdqzYSlqcmKZ74FBsfl7yf4H1f8rj++NlIL94VAmj9W\nI4WmnMy7MsgUfRfaZN/kyT1s/qwK5bwpv9oLfIVU780F2FjvBJFSytPZGjKsDYiC\n3wIw0XdWv9VMws39ECiId8J6d+NnadCW+JLVLPl/AskdJhscELQdfgF2/TyI3EqS\nA/2UySeF5OZ385VLsXiF+ASNKjv8nwwheQsqx5/qsRydKa15AgMBAAGjggE4MIIB\nNDBXBggrBgEFBQcBAQRLMEkwRwYIKwYBBQUHMAKGO2h0dHA6Ly9wa2kuaW5maW5l\nb24uY29tL09wdGlnYVJzYVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3J0MB0GA1Ud\nDgQWBBRW9rWXOWMBGFuR2ACs7pFiGeOmuzAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0T\nAQH/BAgwBgEB/wIBADBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vcGtpLmluZmlu\nZW9uLmNvbS9PcHRpZ2FSc2FSb290Q0EvT3B0aWdhUnNhUm9vdENBLmNybDAVBgNV\nHSAEDjAMMAoGCCqCFABEARQBMB8GA1UdIwQYMBaAFNy7VqvxGPymmnUREGWEEp7V\nQZK5MBAGA1UdJQQJMAcGBWeBBQgBMA0GCSqGSIb3DQEBCwUAA4ICAQCqOpPQfLil\nRakU9Uv1gzhCK1UZJsLMDtk1aD4tRGgFqZB9QsBjBpaD+LwCsgSfmUgCdiYoBY/d\nNMRDxqacXqX6FRun9v8JjfBd5iFDZ8rtPTNZv2grWqc9Hug7mgYIp3/+6bTIi6c0\npEq+nsKIkHjIzDvgqv6iLGxzgJm9OjDmYp7k1zuax8dICVvafilp0rK1yieWpaAj\nw31ns9Txm4Hruh51Y9uzNFNj9EC5StbjVxg8qeZCk5hS76mU2fPsa17iHpLU7Vft\nVvKyPMjgpSxbIVWLt+XQbnVZdqAva5gGzxEY7TOlTUq6Y7VjC3k1R76uP64AXmIx\nOpZ4wN5gs1vdqs1SjG6qRLg9qmYjvxbDHlHg4MDRTkLxDjvbllWS2Fi3tNPU/U48\ne3ZA3N2JTxD4wSfiFOvWtYIUgkyHVVgZFfJOY/jCpCnMVJSbw4ZWwDdemsQX/0cz\n+UyaxM/FnvYuoQBBzyP0kISwhf7NkqtKWsbPROFuasc5QoEL/9XrLymXfGvnH6yz\ni9Wr2vKLkpRASz3To0Pvr/fXMH7fyFL6wmtPvYoZ6xcXQdPRC55254oDxGwY0KbG\n2m2793RJBNbWVy5IWHgLpRGum4PpJ4Lq66SYKqLAENqC4BytzcW+rpo8gPlbHVu/\nlzSuZgod3dAJpbdiYsm6GqRokX3/X9Uwjg==\n-----END CERTIFICATE-----\n\n\nInfineon OPTIGA(TM) TPM 2.0 RSA CA 042\n======================================\n-----BEGIN CERTIFICATE-----\nMIIFpTCCA42gAwIBAgIEAPKe0jANBgkqhkiG9w0BAQsFADB3MQswCQYDVQQGEwJE\nRTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRswGQYDVQQLDBJP\nUFRJR0EoVE0pIERldmljZXMxKDAmBgNVBAMMH0luZmluZW9uIE9QVElHQShUTSkg\nUlNBIFJvb3QgQ0EwHhcNMTgwODIwMTI0MDAxWhcNMzgwODIwMTI0MDAxWjB2MQsw\nCQYDVQQGEwJERTEhMB8GA1UECgwYSW5maW5lb24gVGVjaG5vbG9naWVzIEFHMRMw\nEQYDVQQLDApPUFRJR0EoVE0pMS8wLQYDVQQDDCZJbmZpbmVvbiBPUFRJR0EoVE0p\nIFRQTSAyLjAgUlNBIENBIDA0MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC\nggEBAIVUeKYRnVu2bZCwKKd5zH3oOYz73J3ZPoMviq90y51mccnCiydAwR5k+uSr\nNBjIUUVpQc11K005HbU42lA02XHBlchHVAd1rHPUp55Qvscsh/OU0MTV7Cb7LLnS\nMm9hD7K5bwdNjnSxD6gayoBwAOa5p23FBuqCiUPNzUD+1rtrkYyFD3t8WmnDbfxe\nUWh5wWzIV0PGV7sKPOov+IXEfXFF+fWAwsGXTPi5+cibRLwoy88Rk/+vRLVxg0eZ\nOnxH8B+qcpEIPmXfxbdGqUoY82icT1Nj1EjCjkyMTAxH5Q+8PVDHDjyRLNg+6aYt\nMXYTX0D6MxhobOVjYLgZAnQPlkcCAwEAAaOCATgwggE0MFcGCCsGAQUFBwEBBEsw\nSTBHBggrBgEFBQcwAoY7aHR0cDovL3BraS5pbmZpbmVvbi5jb20vT3B0aWdhUnNh\nUm9vdENBL09wdGlnYVJzYVJvb3RDQS5jcnQwHQYDVR0OBBYEFF0IFZUfX2Bjimnn\nJS8+xL7NdVSyMA4GA1UdDwEB/wQEAwIABjASBgNVHRMBAf8ECDAGAQH/AgEAMEwG\nA1UdHwRFMEMwQaA/oD2GO2h0dHA6Ly9wa2kuaW5maW5lb24uY29tL09wdGlnYVJz\nYVJvb3RDQS9PcHRpZ2FSc2FSb290Q0EuY3JsMBUGA1UdIAQOMAwwCgYIKoIUAEQB\nFAEwHwYDVR0jBBgwFoAU3LtWq/EY/KaadREQZYQSntVBkrkwEAYDVR0lBAkwBwYF\nZ4EFCAEwDQYJKoZIhvcNAQELBQADggIBAEbItIpYAO2jCA78oqKiTxuMnUr6uUzi\nEKrzKe9nss4FfJbqx9s7E4WKlUW51TnJ1rysE15WHi71k80qNXhwZTykBmzmd6qH\nJsR17e1JqnotdmA16z5Y6vC3kp9gGa46Jxqz+8SFkGfkwKNzvBwjlixWMcWdWw0A\naBKhoyM0WGNZgUvuSvCSL8l4rwyuCcLBp2ls7hnU1p8tvvgZSlbAjp4ulSNUTfIK\nA4PQGLW9YMKhBjq+q7S6ZmWp5080nikyk7bvfI1wXWqlPmIwiSn8+7zKmgjbMxd8\nHN/gKNGXuNhQbG9h0tKFgsDufQIffzEZY0rNrRAkunOJTZrCG6PVJntP7MGfrtbN\nRJVAqb5T2+WMiaJj4iaflP12aStL0DoHnM53uNQ6lcWe/uqzLHMnjc49tYWCf/Um\n7yeboZF22bebjkseeKhjoOlm+lnm+3FcJrgwXEBq9/5EnrKc9zuZhmuwMB5JFtOn\nVhRxDXvI3qj88PRt9CNoQMV3MFS6xofYTyoCqcG8Fe5XpZhLRRKLaMaK3VW+4mMj\n67/QGXfGdF7f79SrTjsxGM8LNxcQnqURbWEbw2LQ24B5qdxjB2UnlzxSgq9LDpmx\nWUcE/gwzHxlU/VOsYZPqpZoe8qHYALtZgnoNK8U49TMz/nqWpRp/rw0SkI/HTFpJ\ntczrRcnoB1PW\n-----END CERTIFICATE-----\n\n\nJSLEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIID3DCCA4KgAwIBAgIUTunPNQNF02rDLKnlu+pbcfYgrRcwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMjAw\nMTI3MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIEpTTF9F\nUElEX1BST0QgcGlkOjE5MRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEnYB3CwWkfFdnJ9vHIxlxy9MYbbzB6jQ0PyUzlkTF\nGZgEAafbmGoWdoO8j5qQHwTLe441dO8fTwyRDjKjyuNdZaOCAbQwggGwMB8GA1Ud\nIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBT23K44CDJvEKRq\nYtVf4KnL6EGj1DASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT\nBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEFAgEw\nXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29t\nL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMGQG\nCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vydmlj\nZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXku\nY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmlu\ndGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqG\nSM49BAMCA0gAMEUCIQC35k/pck256qAn3p0KVsodOk1Rv9Uw6oYewjJSR7ddewIg\nVzJh3HspyWfCM0RWCfRem4f+6tmvu//747agNqcHHFI=\n-----END CERTIFICATE-----\n\n\nLBGEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDvDCCA2OgAwIBAgIUJMaOmkBae0m0M3onhTGMSyi5URAwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nNDAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExCR19F\nUElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAARj1wH3vjpz0n7HixEdu/Q8iA3XjCcDterGhwRBKnuFu/uQ250j\nS3Vrf9VYlTmUPD9EHdUwwCrPeuRbrJJ8+DKmo4IBnDCCAZgwHwYDVR0jBBgwFoAU\n6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFCz89DsWyL/HgknMlx7lcyTW\nOfB5MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB\n/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG\nAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr\nY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM\nBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo\ndHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q\nbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDRwAwRAIgdfPUh1wH/eKcByB2BxrEP7/4\nbt3FyVJvQBhfPnBOmkoCIDFkZmbIDhXdlPOAvJiejUgHG+KaREnUxSKeDk+XgMDS\n-----END CERTIFICATE-----\n\n\nLKFEPIDB0PROD EK Platform Public Key\n====================================\n-----BEGIN CERTIFICATE-----\nMIID3jCCA4WgAwIBAgIUSuGA1U3y0XMcqbGsJZXvvFkfCyQwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTkw\nNzMwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExLRl9F\nUElEX0IwX1BST0QgcGlkOjEwMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEj9WEZ+vecTwkNMPfCswILr2P4rqdDduq/GdS\nkKY+U8AnqeOpWh4uDbc8VmSZ9rs6yAG5dqd12r4h/oKdUfQtp6OCAbQwggGwMB8G\nA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTKcSqfh15I\nzee/ZX+3JixwPv9f4jASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nBjATBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEF\nAgEwXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwu\nY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRm\nMGQGCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vy\ndmljZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNL\nZXkuY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2Vz\nLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoG\nCCqGSM49BAMCA0cAMEQCIGx/iZo9bQm6PjZNlkkvvlys2L9ZvRxnzg27zVrvkOIK\nAiAMMcXHdgsuLfQtUNep+uycG95uBc6zu05gZMTVMhA21w==\n-----END CERTIFICATE-----\n\n\nLKFEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIID3DCCA4KgAwIBAgIUAu3ZmDsi1KQeQl9cM6ifUHuup2YwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTgw\nNDA0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNTAzBgNVBAsMLFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExLRl9F\nUElEX1BST0QgcGlkOjEwMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEiUVjU37rsmLCoQ7MYeOCXxbOvE7yJZ5jYkFvF1tL\nstZyPkVPTUS7wkMg72pweWAVCuNYBY+3OdtT3XEzL2YJ/qOCAbQwggGwMB8GA1Ud\nIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTxi/gccYC9QSOG\nRsIW779umVLPGjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAT\nBgNVHSUBAf8ECTAHBgVngQUIATB4BgNVHSABAf8EbjBsMGoGCiqGSIb4TQEFAgEw\nXDBaBggrBgEFBQcCARZOaHR0cHM6Ly90cnVzdGVkc2VydmljZXMuaW50ZWwuY29t\nL2NvbnRlbnQvQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMGQG\nCCsGAQUFBwEBBFgwVjBUBggrBgEFBQcwAoZIaHR0cHM6Ly90cnVzdGVkc2Vydmlj\nZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXku\nY2VyMFUGA1UdHwROMEwwSqBIoEaGRGh0dHBzOi8vdHJ1c3RlZHNlcnZpY2VzLmlu\ndGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqG\nSM49BAMCA0gAMEUCIFSuATZaoaWDRvFFN+0Wvzwg1rJqzQvNdtLKrDRUeRlsAiEA\nlKo7/80b1x/0w7rYYY3N26Zd3IWTYMpJGL5OCvjUzfc=\n-----END CERTIFICATE-----\n\n\nLPTEPIDLP EK Platform Public Key\n================================\n-----BEGIN CERTIFICATE-----\nMIIDvDCCA2GgAwIBAgIURR2MSilWjn/sh8LzdhFy5KEdm2YwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nMTIwMDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBkjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLDAqBgNVBAsMI1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIExQVC1F\nUElELUxQMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZIzj0CAQYIKoZI\nzj0DAQcDQgAEcuwvyNIK+oJU1UovTP2L2QXVQkWmWpUO+QrNNk5F3q4t8PbnEiFi\nTRj5SUcKq6lcfvLzxJr0d7NpjfICAvBELaOCAZwwggGYMB8GA1UdIwQYMBaAFOhS\nBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBSOGthGk9XYmxRyzY+ZkHbtxBFU\nADASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjATBgNVHSUBAf8E\nCTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEwVDBSBggrBgEF\nBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2Nl\ncnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcBAQRQME4wTAYI\nKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwv\nZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBCoECgPoY8aHR0\ncDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtfUGxh\ndGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDnoZ1uLFe35n9Sy2piGvcJj6Ma\nlpdPJfEogmZLu+SrAQIhAP0B4jPnWcFHPDIlXh2WoOysRbOOkOff78W8a2/9td68\n-----END CERTIFICATE-----\n\n\nMCC PROD 00001881 OnDie CA\n==========================\n-----BEGIN CERTIFICATE-----\nMIIC8DCCAnWgAwIBAgIUZi+xu0T2Z9Z3QmBZ6iOovdIWCc4wCgYIKoZIzj0EAwMw\nQDEmMCQGA1UECwwdT25EaWUgQ0EgQ1NNRSBJbnRlcm1lZGlhdGUgQ0ExFjAUBgNV\nBAMMDXd3dy5pbnRlbC5jb20wHhcNMTkwNTAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5\nWjBIMS4wLAYDVQQLDCVPbiBEaWUgQ1NNRSBQX01DQyAwMDAwMTg4MSBJc3N1aW5n\nIENBMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMHYwEAYHKoZIzj0CAQYFK4EEACID\nYgAEAyt8PUvNaHB0Z+a8lZbzruMMTSZRdAPbyP5rso75X8zD8bRaLd2Imj/Nsqfn\nkcweLFjp/DSQrDErBOy90DBzLnvLQUv5tcm7nBmuYudcnZHFmTYWm8p1aPy3lS9r\n6IoCo4IBJjCCASIwHQYDVR0OBBYEFPMHujM0fCg6HgwVCK0C9cjKBvReMB8GA1Ud\nIwQYMBaAFGGaCniWiAPMYZCopT+QbXV8n2lqMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgEGMGcGCCsGAQUFBwEBBFswWTBXBggrBgEFBQcwAoZLaHR0cHM6\nLy90c2NpLmludGVsLmNvbS9jb250ZW50L09uRGllQ0EvY2VydHMvT25EaWVfQ0Ff\nQ1NNRV9JbnRlcm1lZGlhdGUuY2VyMFYGA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8v\ndHNjaS5pbnRlbC5jb20vY29udGVudC9PbkRpZUNBL2NybHMvT25EaWVfQ0FfQ1NN\nRV9Qcm9kdWN0LmNybDAKBggqhkjOPQQDAwNpADBmAjEAjz1UnT4SgJglAgJtSvpQ\neIrtmNHeA03tlwNxgGoTm+8jPLd/59E/2mwIZT2eeQ2ZAjEA91DbMoWvfI0mYR0Y\n08hIx3A4C0+39WPcNv+uirNnBOn09EACxfVfWijYLFljXL0A\n-----END CERTIFICATE-----\n\n\nMicrosoft TPM Endorsement Key Service\n=====================================\n-----BEGIN CERTIFICATE-----\nMIIGCTCCA/GgAwIBAgITMwAAAFm4K9/t6wIyPgAAAAAAWTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDMyMDE3MzEzNVoXDTMwMDMyMDE3MzEzNVowgYQxCzAJBgNVBAYTAlVT\nMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK\nExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLjAsBgNVBAMTJU1pY3Jvc29mdCBUUE0g\nRW5kb3JzZW1lbnQgS2V5IFNlcnZpY2UwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\nggEKAoIBAQCbi5fATDXjleuXc21QiMyPmeUCjF4CJ8VHFvJHxllsgpNJJ8Wgt7wd\nIF1HMbldCf3EL6HIzRI4PSZYD0QdO9SkDRH5ptQ8FOrSwYHaNh1BIduYk8L0xEre\nq07zwmmUKMMoyyA3FniS1VbYMv2wFzJaqs5RofDq4zEZq0WVC+GIvv88sUoMmsUg\nKgjB2VjSs9v0tJmi74HQM9RSayAmnjUHeFAegpYkXCfrB+OEXefmjNBQlMeFqY00\no+LmfwRyoe37UTwXo2AiZeMUZ9nccRlCi85pStx4vcwxuxJgxB5cjlDW4xHRU+EL\nXTEtvNmIfNtQRbcngVXhjUfYT13cUbzbAgMBAAGjggFoMIIBZDAQBgNVHSUECTAH\nBgVngQUIATAdBgNVHQ4EFgQUeRAMLqNcT8FL3hWbVjJvtzHR1RIwEgYDVR0TAQH/\nBAgwBgEB/wIBADALBgNVHQ8EBAMCAYYwHwYDVR0jBBgwFoAUeowKzi9IYhfilNGu\nVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQu\nY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIwUm9vdCUyMENlcnRpZmlj\nYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsG\nAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01p\nY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUy\nMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCHdUGF2gHV7TW18ElZrOCRBrVJ\nyu3wDmt8dsTlTHaFyUA1cut3baIAansPFue5afbWpXNOe9VZakPQABm2P2BBtpEV\ntVGl98/Ifxgq/QRyln4gDCGWOb49hnDmyX+kn54cFnLLb47LxSSEpnAQEfrRTvsg\nks7b/drzQa8lp5kJkW+KxPL0r9ajvcA08UJmK6znKA/Oye4UBTzavs2axKoaWm+o\n8K3EBDOSAj9CZIaLgAeJNO2DGAyFBgzGbBL9MZR0lMyHeOzWMCST3L50g3yrCiVf\nX86bUV3bAYE3Kqa3oCHw5Mw50gvcFNPHmMbxcVXRlQ3PtfvdSpw3mDGGm05fFycy\n2omOSdMfKj6PgvcUkLet12xzAHeW+K8ikpZdHNJkQoRoBNcZX1Ek1aTuA/hn+0m/\nVnqd7+ohNVpknpRcrXjwuWNrDLavkcoQlY3JX2dYG0Nc6QHEjsVEi052EfIt5urD\nAUEXcdYydBxoMf/6MLSGiKiSsfQbOrYBz/nrbRsoWeM/xf1iQD00Qw2ANw3TdTY+\nfi4MiwReUu3B5o2SkgxmHnV1y6H+bQqkLmOPLc0qtAWFq8+PkPo5G7fj063djT5M\nUkcw+dZ9iMawOAyzP0EbNIgY7GaB9nlV4zzIZlqst4I1orhG9hujaOjWGYtBfTZt\nJlC5INCx6XHHd6Q27A==\n-----END CERTIFICATE-----\n\n\nMicrosoft TPM Root Certificate Authority 2014 (1)\n=================================================\n-----BEGIN CERTIFICATE-----\nMIIF9TCCA92gAwIBAgIQXbYwTgy/J79JuMhpUB5dyzANBgkqhkiG9w0BAQsFADCB\njDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl\nZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UEAxMt\nTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0MB4X\nDTE0MTIxMDIxMzExOVoXDTM5MTIxMDIxMzkyOFowgYwxCzAJBgNVBAYTAlVTMRMw\nEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN\naWNyb3NvZnQgQ29ycG9yYXRpb24xNjA0BgNVBAMTLU1pY3Jvc29mdCBUUE0gUm9v\ndCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxNDCCAiIwDQYJKoZIhvcNAQEBBQAD\nggIPADCCAgoCggIBAJ+n+bnKt/JHIRC/oI/xgkgsYdPzP0gpvduDA2GbRtth+L4W\nUyoZKGBw7uz5bjjP8Aql4YExyjR3EZQ4LqnZChMpoCofbeDR4MjCE1TGwWghGpS0\nmM3GtWD9XiME4rE2K0VW3pdN0CLzkYbvZbs2wQTFfE62yNQiDjyHFWAZ4BQH4eWa\n8wrDMUxIAneUCpU6zCwM+l6Qh4ohX063BHzXlTSTc1fDsiPaKuMMjWjK9vp5UHFP\na+dMAWr6OljQZPFIg3aZ4cUfzS9y+n77Hs1NXPBn6E4Db679z4DThIXyoKeZTv1a\naWOWl/exsDLGt2mTMTyykVV8uD1eRjYriFpmoRDwJKAEMOfaURarzp7hka9TOElG\nyD2gOV4Fscr2MxAYCywLmOLzA4VDSYLuKAhPSp7yawET30AvY1HRfMwBxetSqWP2\n+yZRNYJlHpor5QTuRDgzR+Zej+aWx6rWNYx43kLthozeVJ3QCsD5iEI/OZlmWn5W\nYf7O8LB/1A7scrYv44FD8ck3Z+hxXpkklAsjJMsHZa9mBqh+VR1AicX4uZG8m16x\n65ZU2uUpBa3rn8CTNmw17ZHOiuSWJtS9+PrZVA8ljgf4QgA1g6NPOEiLG2fn8Gm+\nr5Ak+9tqv72KDd2FPBJ7Xx4stYj/WjNPtEUhW4rcLK3ktLfcy6ea7Rocw5y5AgMB\nAAGjUTBPMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR6\njArOL0hiF+KU0a5VwVLscXSkVjAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0B\nAQsFAAOCAgEAW4ioo1+J9VWC0UntSBXcXRm1ePTVamtsxVy/GpP4EmJd3Ub53JzN\nBfYdgfUL51CppS3ZY6BoagB+DqoA2GbSL+7sFGHBl5ka6FNelrwsH6VVw4xV/8kl\nIjmqOyfatPYsz0sUdZev+reeiGpKVoXrK6BDnUU27/mgPtem5YKWvHB/soofUrLK\nzZV3WfGdx9zBr8V0xW6vO3CKaqkqU9y6EsQw34n7eJCbEVVQ8VdFd9iV1pmXwaBA\nfBwkviPTKEP9Cm+zbFIOLr3V3CL9hJj+gkTUuXWlJJ6wVXEG5i4rIbLAV59UrW4L\nonP+seqvWMJYUFxu/niF0R3fSGM+NU11DtBVkhRZt1u0kFhZqjDz1dWyfT/N7Hke\n3WsDqUFsBi+8SEw90rWx2aUkLvKo83oU4Mx4na+2I3l9F2a2VNGk4K7l3a00g51m\niPiq0Da0jqw30PaLluTMTGY5+RnZVh50JD6nk+Ea3wRkU8aiYFnpIxfKBZ72whmY\nYa/egj9IKeqpR0vuLebbU0fJBf880K1jWD3Z5SFyJXo057Mv0OPw5mttytE585ZI\ny5JsaRXlsOoWGRXE3kUT/MKR1UoAgR54c8Bsh+9Dq2wqIK9mRn15zvBDeyHG6+cz\nurLopziOUeWokxZN1syrEdKlhFoPYavm6t+PzIcpdxZwHA+V3jLJPfI=\n-----END CERTIFICATE-----\n\n\nMicrosoft TPM Root Certificate Authority 2014\n=============================================\n-----BEGIN CERTIFICATE-----\nMIIF9TCCA92gAwIBAgIQXbYwTgy/J79JuMhpUB5dyzANBgkqhkiG9w0BAQsFADCB\njDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl\nZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UEAxMt\nTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0MB4X\nDTE0MTIxMDIxMzExOVoXDTM5MTIxMDIxMzkyOFowgYwxCzAJBgNVBAYTAlVTMRMw\nEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN\naWNyb3NvZnQgQ29ycG9yYXRpb24xNjA0BgNVBAMTLU1pY3Jvc29mdCBUUE0gUm9v\ndCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxNDCCAiIwDQYJKoZIhvcNAQEBBQAD\nggIPADCCAgoCggIBAJ+n+bnKt/JHIRC/oI/xgkgsYdPzP0gpvduDA2GbRtth+L4W\nUyoZKGBw7uz5bjjP8Aql4YExyjR3EZQ4LqnZChMpoCofbeDR4MjCE1TGwWghGpS0\nmM3GtWD9XiME4rE2K0VW3pdN0CLzkYbvZbs2wQTFfE62yNQiDjyHFWAZ4BQH4eWa\n8wrDMUxIAneUCpU6zCwM+l6Qh4ohX063BHzXlTSTc1fDsiPaKuMMjWjK9vp5UHFP\na+dMAWr6OljQZPFIg3aZ4cUfzS9y+n77Hs1NXPBn6E4Db679z4DThIXyoKeZTv1a\naWOWl/exsDLGt2mTMTyykVV8uD1eRjYriFpmoRDwJKAEMOfaURarzp7hka9TOElG\nyD2gOV4Fscr2MxAYCywLmOLzA4VDSYLuKAhPSp7yawET30AvY1HRfMwBxetSqWP2\n+yZRNYJlHpor5QTuRDgzR+Zej+aWx6rWNYx43kLthozeVJ3QCsD5iEI/OZlmWn5W\nYf7O8LB/1A7scrYv44FD8ck3Z+hxXpkklAsjJMsHZa9mBqh+VR1AicX4uZG8m16x\n65ZU2uUpBa3rn8CTNmw17ZHOiuSWJtS9+PrZVA8ljgf4QgA1g6NPOEiLG2fn8Gm+\nr5Ak+9tqv72KDd2FPBJ7Xx4stYj/WjNPtEUhW4rcLK3ktLfcy6ea7Rocw5y5AgMB\nAAGjUTBPMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR6\njArOL0hiF+KU0a5VwVLscXSkVjAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0B\nAQsFAAOCAgEAW4ioo1+J9VWC0UntSBXcXRm1ePTVamtsxVy/GpP4EmJd3Ub53JzN\nBfYdgfUL51CppS3ZY6BoagB+DqoA2GbSL+7sFGHBl5ka6FNelrwsH6VVw4xV/8kl\nIjmqOyfatPYsz0sUdZev+reeiGpKVoXrK6BDnUU27/mgPtem5YKWvHB/soofUrLK\nzZV3WfGdx9zBr8V0xW6vO3CKaqkqU9y6EsQw34n7eJCbEVVQ8VdFd9iV1pmXwaBA\nfBwkviPTKEP9Cm+zbFIOLr3V3CL9hJj+gkTUuXWlJJ6wVXEG5i4rIbLAV59UrW4L\nonP+seqvWMJYUFxu/niF0R3fSGM+NU11DtBVkhRZt1u0kFhZqjDz1dWyfT/N7Hke\n3WsDqUFsBi+8SEw90rWx2aUkLvKo83oU4Mx4na+2I3l9F2a2VNGk4K7l3a00g51m\niPiq0Da0jqw30PaLluTMTGY5+RnZVh50JD6nk+Ea3wRkU8aiYFnpIxfKBZ72whmY\nYa/egj9IKeqpR0vuLebbU0fJBf880K1jWD3Z5SFyJXo057Mv0OPw5mttytE585ZI\ny5JsaRXlsOoWGRXE3kUT/MKR1UoAgR54c8Bsh+9Dq2wqIK9mRn15zvBDeyHG6+cz\nurLopziOUeWokxZN1syrEdKlhFoPYavm6t+PzIcpdxZwHA+V3jLJPfI=\n-----END CERTIFICATE-----\n\n\nNCU AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWkcYoIEaHN2cwAAAAABaTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgzMDIxMjgwMFoXDTI5MTIzMTIxMjgwMFowQTE/MD0GA1UEAxM2TkNV\nLUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG\nQzRDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApMsmpNyIsRavY6bK\nSgq9DUsxBzZprBXhH+8lUTaf4K+H/hxOuoMURu+PQI6cB2OUQN2/BbE6LtLqjE2O\nkCpdyn2Xi4WZ/Mg0vUMKcYqmH3LAdFMzzzHYBO3F6SS70ByAuw9hOujOX0zR+Ac2\nxzW9qrE2EhhntKgQM7meWbTocZnJv0G3+yVpZ5j1yrNhq0aupjNYF9/kGxR1Y4rh\nNezWJrZ+lZYSoLlXEC6ZJalbAaVW8QKFRXO1WZP+yuv40WOghhcj7pGYDwRA0lqn\n5Q4kRBiAwrUNoEOMrMHKjgacguvNRo9sYgKT4AMVuDMNGgRqxzMh7wbSkUB6dvw4\nXm2A9QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUwdnka1fhtc5jJH7otmouFzdnAKAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCLuDv4\nTUueSp5xu4uXZuNY03OOUhvPD8yabEq9I3BXIxoQ5DUQsKpBrFjl0MnOQSX+Fboz\nYitPg3mk0eTdPuB2N1RUrCgufb0gtoNTcOCmq59VEQYNpoYXvhEhs0KWgTSPce/l\nS1vBWqq0fDRET+Vy1aZLjG+dWrCfhyRXBoEtboFhJXLWKverg+pdR2DDagptE0mo\n+qtNejSJqPE1sMfVPTDZw0yW7qEcC4J1uKyW3PYGthxc2rqVENzPo4FbAe6RDOhd\ntbphwt7m67VtWEEGB+CqS5NcQ3pmhqssBZUclqvi7IjQLPpnKo8uceIeZjXg0DAK\n9Zf9xVrC43/WpjYfSlOeUPT4fk822uR4m4wqh9Rd2To9CBb1FK/GI2vZ05eMf5px\npMQxcnk06K/Qwz1fPS/tFO2Gy7+CAer4lIgRjLvWl8l+fqeq2pbHIOgFx+NjBltt\nXSIstkLltSCmEMipZQT1hkLF9o0nhRAKP2wMQfdCXWS/LN1St7uWceOxufHbMlr6\ncWxK1pjgb0K+NPvEJKnvOxW+MK3T19u+FC1MopKPIlvWLVxT5qnK1vALqj9ESLlQ\nsd/I9YSDS/SofHIf7ihhZqpADn8DDCY296/VUfhCN/LK5Tkg4oiRuc4f4FVC6PVD\nKhTnNrB6O9eBLlikwOlLiExDSn2EZxWMMfELrQ==\n-----END CERTIFICATE-----\n\n\nNCU AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjvxJ+z8nFelVwAAAAACOzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxN1oXDTI1MDMyMTIwMjkxN1owQTE/MD0GA1UEAxM2TkNV\nLUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG\nQzRDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA44Ysh/JqZGAX4efo\nBUEKmddcfKobewbboTmqWoi88FGVJ21NiLjHvc98FvL/ct1Ve5XZe0d59XogLRE/\nVncmfGQnw1lGghdzO53khxmqEZW31f6/xCnBSEvCSnrNJYbwi0BFzvz0OUq+6yW8\nZdzpQrAGy3zYURv417UXblIkJ2eveLTq3Z3tiib3gmINU8aJC+hFLsxcuN9hki6K\nVlJq3lh12q+pbZJEgAzh7Apu3RANNlcZTrMePQ2BrrhMYuGbQux9S7q7Crec8AZ0\nwaen5yebH9XOFLOft5Xg7FrVV+FIghEC2tZHEXYp702bCQHsSEROFyL8XST0mL0+\nSbJwDEO1HbU+ODNmFskldtb7N5XoFZgodutC2etpic3UgqmhltqeecKbL9BPYj+4\nfraJpbdzAkPTlbSd+egoB+dsRS4Xvlw3NOcQWfkSl6yTqvf4Os570jJV0heYKtX/\nyro6j5Giw4/tEaVcn7U7Lc91MXLjEc6ADrcOYVfstij+oGKECag+kHhzyyqbB/fP\nyxCVVtVvYnoQq2DrOgIOkCDhdGWI3raPjcUCp4fJ+C84/zMn/lfr6k8nDedQh5EA\n0rPGCGyp2QHB+uhGAVNBFeAnhyD+z0aeli+osIO6LdDO1or1yAOjc/x040Yhx01/\nfEWayU7xHx1DX8ytaK3gG+54YrsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCwoFMt1mK+5bD86\nEiICUVxCDtqaMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAO3QK0myjXT/HVVxGPV1scRE6InKkMwAnUPd/GCg+x0Jz\nrsNy1NAq/h51oKok36lQ3UwDVOfv9AEHgRKlzjR3fS39GQAkmh40K55dQq+o+JQQ\nvmEqNNnPrVaGQASA8M3gA1elZ/qGGlggF+zjvt3awtMtncMDpN9CV5Eji18y9Otr\nf3oYNcVLLBYHB1AJtpz5C+/ski77fOQgP0MiabXVTZc7lFSVGs1d2R8BpzYwa6p2\nkTSlayg0sT9Nl4uPoQwn6AFSLikU5G6lUjmfmh+/YwPLwHQSxEkKGH9pzE9o17MD\nMFFal8/1uLrbZBbSLRg7A8sUE6a5bpEJzLHAAfLUluglkW8efVCA1cQ0F90orwmT\njcClgq8TLz8w4q3TlOur4LMMd/dpfJoTlj5/FyFlo13x+BgqFdGFxj/fEiaSArEE\n9/vjpPvAOr35UdRNoiJ0PJXLBWGnhxA8/RjP5CzWFRpS25hW+DM1qHaVVWdooMGo\nTUs8vmzRfnj7KoBRsnSspP2RmXgxB0fO5EWw+YXaRLAJJpSFwIH92x7YA4bnZdlP\n6j+48jY/XmijWeWvDKudqBjEhv6pEQdKfNWTXObgAsHBS3b35cL8korN5rtMyykS\ncCazP8hjuDZi55cwO/wYu1IZD7RMsKBMb7UwSFq9QQkXkgqxwMHttigEsKfyc+g=\n-----END CERTIFICATE-----\n\n\nNCU AMD KeyId 578C545F796951421221A4A578ACDB5F682F89C8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAFcmpejOhVyE4AAAAAAAVzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEzM1oXDTMwMDIxODIxMTEzM1owQTE/MD0GA1UEAxM2TkNV\nLUFNRC1LZXlJZC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4\nOUM4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAougXj6NuBrlwzXIJ\n8MzPVH6zaSo37uBnVeRsFnncZqYgz7hKk66U/TrMxhkRN8SGnRCKBx+sNujxVNWT\n9sH0p+LDP3ElG+IZ1mQ4EwzIhjzGO0CsGLnKQbEmAKVi0YTTr35TbqMFlT1xOmHo\n+fmYiZSFd+Rm7ql8nOh5ipbkaMmBzUD0+oO5K+DOm9Y3NC2N97+npOkPAlGM6cIB\nGc6rbNf9CVYB+/PsEbit97YB19PrVhYNd00REynyJyOS2giKQ3J/QyLFniDGyBxF\nCTQQY5itqXlM815NBSdI5jyy5grT4CnXzabeM7GQNh8oZmypVmx7j7O7lUDb7JTq\npCV8SwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU0EVRTP7Zl3hIzNsSYr6WUWcPVfswHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBVoWrp\nsWC5REVdYYFJo6iadOgdCmxDxLtdbBsefZTZo4EYkcyISavzf7FD2VYJlbRDRfv0\nM36AqfPPQhyi0H10mVB7p8kLCQUjO1RsZzLKwbR15w5h0HoJTnjT+r//chPNn6t7\ndvIARCVXiyjmhVM1ggPtHdl7C3C9yn61HlKP79VuPAtLBM0ky+TPj0DkcgmvFxT9\nXhXd5rk1Wm6dk2LsYoCoMm2RcU/Tp5aVwTpducMBBPiZXZVRrVXlTI2Jent0/grd\n7a+BcbXWLBAdhF0XWpB6d0IHK+QRyF0vTwfWjpirdf90woXFZrIVqufKJZCOmNvG\nfB/uD4xaLQ2106IZ5avl9STGSsjRs7CSats/QBmbAuaZqOsNbmP+5JvnABwVYiNf\nl1j72pGCRT5jDx9gJwUV6g65urGydOwMH7wNYLY+xAiyiqz9mykReS/17FXSkzGR\nYvkcRPSKYl+CSq82d67Sez8ZUpnMYgKdnmPd/qBb0xFKmNQ9XI1h8xFZd9hs7MN0\nzZanILieV7Qdlyrtovy4Ngeqh9dJs6KQRBSAkgKBcAK0kiTNlBqL7Sz++Y+Ni5LM\njiq3x7uiL/9HKQZbMfAeHHpCg/6bbTufdQAH+YXQQnGG51XfRl5zllUY3PXyir//\nxdTnjo0xwnWDEn0TInnBEUbRWl/cTgO8gUYSxA==\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 16B341E381CD5C3E799AC838CA17F1F7F3F7431E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAj0e0edm04AMmgAAAAACPTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxOFoXDTI1MDMyMTIwMjkxOFowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtMTZCMzQxRTM4MUNENUMzRTc5OUFDODM4Q0ExN0YxRjdGM0Y3\nNDMxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ1M6N+Pb2XwUj1i\nQofMfv9VCt5EZc9mbnN1RFhVyoLqeAsGQ0sGT/xGl13/JiZ6sqUC7r+kpxUJFjnP\nVNbcHXFg8QYFkG4AVbj41AbY8+inRX5lYqeQafu7EZWM2qhADFjiPlG1phEXaVnD\nFRF3A5qlgPVZdo46vGjHLNWDP71XlXPjZVQMJyj5ysddme5Q89tCJZzUpH3/QiZS\nKYgR2AdMQaqOFIWuwXrpwteZiI42iKV00GPPvgX3fwbkbDV9fLIjtzgGMJ740azD\nWV4o0r/LeKmx448O1hr/wYLkwwC3/FsgiGYqWJ0Cf+nukMWKcdvNVwLxDbKDyUJQ\nyxs4VJfhBGYC/iqLLn2Q9Wj8kZwiZpDTL8UTv91JIxFilRYid1kJoN43VpRrUS1j\nLpNpGUVXbc/rIxqKruvodXKut60GTRiBXWppwk6eN5fHYYobkQM0GnzSZ8pr7xo6\n3jXHONIQ/6RyBiXX44XtX9cxGMu0D4n5Z78fUsGpr8X7Ag6CbJnKb/R4HXh9BK3H\nCg3iJrhjbCDq9WB/Weh9KUYQtq8IZRGTOyt0OYEa38+lNr1RHTqWgYVMLhO6+BPO\nIMr7IimeRvRRXbyyF+PWK0w81aJG2JotZUR3R7jnQjoL1HzZAjyMlnELeAF4EuUM\n6sGiRl8L86hI0DrFuU6QK3K/gCIbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSfKDm9EFbvQ4YL\nhva5Xu2JPFwMxDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAG1ypRqEL3zaXeQ7oqoCPWRwhPcwrRISPnhe8dt5Boew\niYwOMzLgzmyzllZiMDzJa8kajt5rGPrD4li0Jj+DsVDa9cpSlhJBtVW9G1cAN/Td\nxQ6DJEKoSw8xNixbb1sCbaxLfhzaOLBlK6XRE6nh/tF5ivpmTo7k4A1B6OujEt7V\nkc3JzoW0Khac7XPvz0MgF0VN71IuYTaWl8CrUaErc5D4OUlh1gyFdqZXWJWYegQM\n7dd3ONWYfLaiXz1GLD/WdcoMO2hAXHZMrJdSbeY4K7MBK7XdD17HdZAVqtCdGLkk\niVSGI1YGexpDbi/WZtH10R8AYUKK5phaSeL46agI4jpOyd6gmqn+OdjhPm2PolkD\nsBONwVeqBzdEghiIXQuNV17G9v9KfqWfKVIe1d0ATB709RUOwfE+C5bYA4TzMwN4\ne+F7DRgbNKbF6398MTZIxz52pdQuAf7SKPnDq3Y20jSfIDMQdzR3lu7Q5dtaP7Zl\ni3BNdfePdzuaXt7CakLHteskX0F5uqXPI4f7sm4ov/wC/6bB9OrU6N6KoiymNo0S\nUkNVt9wHChoBDhn6vEmfCMpdfd1PLHfVP9SDqUMJBhQSNTcMwlCdg6LT66ka2Y2O\npGpK8ShqBh7RFQcUoLN+54D9TzkLKJt9gqpqo/cdsuVtmcGLSCbJy4X0ysUljb40\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 277631D059FA7A9553FB59DFD6E85BC122300FF0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkLpeBGbckgOXQAAAAACQjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyMloXDTI1MDMyMTIwMjkyMlowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtMjc3NjMxRDA1OUZBN0E5NTUzRkI1OURGRDZFODVCQzEyMjMw\nMEZGMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO7O9f+oe3b20lh3\nuHTSmutODxtV4XTSH6sy10nejkbDEwXAxgr6ywW5vLoV6JVNG7ixauwEU4gyDJ2Q\nNOXgk3uZ8Zta+RTYyCiG84BG4nD/mLjHYB9BXs396Sgt8GMjbTb5CXkX3LoMhsZv\npMLihDBNVXAH2YMhHli9h40sdLdppyk67Fn0EN1+6gJrOuE6k7+m0qNrG8JxnuHG\nxHrp5nPJdQpRhnyJ4bfKFipbhs1FqW0CNVKbNe3MktcETx+jP/8tFM6+CkxxziuV\npjGGg7sdvijB6AqW+M0UjCAmNbfGKa0uWzeWZEFDB1nd0c+qM4MComDQ0JdEjQAC\nh8eFLGQxfFaVdIM1F1P/r5k6kYKDZRiZv77UWZbgHiL5198MFU3t/pPlLR3A3QJ7\nVBZsWuY+Ela+6kdzaEBZFKEUt879/BKMftMFMVCX77cy7IdJOQYvIMCRkPiUGIIm\nNWXevE7ckZWd+TUi1bLgRbfni1w0RF45ViOOqa81moVfu4ol0BfK5oWXFlTLIZD3\nvyI8na+pcjQJ2DHYx+ZJAQkhjjgyn9HiL0fDaU29degJNn5Qw+FKlA5Lk5rlqwu4\nvMGuZVuwLPjbhygHjv87GD7qayOQ8fxp4qwjUvaC/1b0wReqnxG16UqP7IWk++dt\n3wLb/gfjWFg9cmNf2g8pyOW9weo/AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSBPP+9Xb4QOExP\ngnR1hLtzWtM/MDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHoJ4kuMaHW2ZXSindUSwKb/3bjzU9WUiV5N3JQr2mM/\nXE+Yoasy6vHrzCC9MKZ/mWPikADxvY1tXKGMneaEs62im3SxPijkbeKaByD5cGkP\nQ0eBE+lO6+wgVH0JofDxiMJ4LkGKq62hfxRNSHIDvipYVlNwwN8ZVhlNYbsDyJD6\n3k0lJk/Hhl6XkEXCcZQGUIon3Qel3U6ibeqP0DpxVQ9XcHLLJV+n/k04F4aFuTsD\n/epaeiJQr4mxZEnpCZB33AimHzj4OhV98nVWQETZyQ22QclUsRUtjdqQxu8TysZm\n3K8LdbHOH0ViWhoudUVM7Mn2wqswEkAWz51+0wgu1BQ7342bvRAB373fBpKvH2B6\nEaTg9A/vHefCSBI21DUSZvLp1K5PZtlrKeYPdNdM863MHdEL6/ux+C3ya5sBjFsE\nxEbUDp2E3kC9sS4rVGiDFil+hzE6dcZJEcvx5lvFtfHTaLum+SBFMG6lNKXlANdi\n/XVFe1cDfAwYgg8NgD4v6YSrdrumev5B16pk3uFSWHPN+8hv28JX0zqQrVjRj5gO\nVQTkYy9BQpDlMpYax1FdZCFJ/Cpz3Mi1YUjodnK2DAlA75ALOJHrNNwvCJDZbu+G\ne/M/psklytrVQ/LunbO4ojTdgrd4e8chHg0YeT9N5uc56yxTDcru9JUjBqo118mf\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 2D605CD882B2BD716CCE71C90BC774D3D5BCB1D4 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAjyDKOZAblaD6gAAAAACPDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxOFoXDTI1MDMyMTIwMjkxOFowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtMkQ2MDVDRDg4MkIyQkQ3MTZDQ0U3MUM5MEJDNzc0RDNENUJD\nQjFENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMp8k1D76qIlGClK\nFk2yKIrpMwhyY+EOgw7Cn4soT/VYehHnnRgcikGZjbGnTIMOP7BWDa3TdIdguyp2\nxo5ozlbovaCuJiN83ulQFVXutuWQ3ilLwBkKnWruOTm3VgUIP+5P09qi3PcX1YX1\nMvqPvxf13wZjiVVsN5vMxBEICH5D2WbFBVmXf+nMybI4LbPzpJr8F9QtZ5aKKGfd\n6yJ9iVKfthm94dkGXWNfUN8FIXNj4vPPN0eL9VfESD7PaPxMZeZqqZG++74Y62xb\nRsgXyr+HV7vFS/xUA+JtQ3BCXU/2iZSCNdgkt86Me/SPcsTbHzsJEzwwHhSjAzOQ\nymSU4A3qb0hjh9A27uXy5ntKS/sR3NecMuxnqk1FVBpWe6nHGfJNVu3H6XNleq4Y\nDwSWG+4FsH6JcVqhO7cdFbUf3ZggRHGFcxpkamkrQ60w84j//IG4a2hfZbe67sDS\n4U+rmPcY6fB+mIQEcygj4qv2K9yFbLsPcKZoeltgH/0pCEN7vyLsRS7WArfZPdt8\nXQXDV3kctCHJAGH4kSeY1KB82NpLha/NkSTNwLwt8v9wQ37adB+2zcT7BO7gLZB+\nRkoVj0FkEa4VOvDvDtr8y9WQgTlYjVzoK5EQ5Pll0NbWNGl16o6Oonh9z49vWyII\nkbM3dnfUZdW6cHRPwXqUWEO8nmgjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRCoDUP1NVc1Knh\n2FbPsAzu8GCIBzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBABEti63k1V1WQJEJCdUYWsURQCUKliS+0yiItc7o5wNF\nF4M+HTzEq7oZH4eF7ZCv+FY0mx8lKvQq4jcW9avus3wIGk7ClGISLrD68vWZMjzM\nJh/cyDpOxOA+mV890oz0qhxPZdKtUZTQWjxE705O53+UpbWUexvmjv1YLQF5vlwM\nTUIP9z1BpcSWFSm/DB+m9Wf2+sr73MxgfGP2TAHk2kFDl3j/mpd8HBJ5SayiGILe\n1po4lxn9dhQAYktvzcC9nUM3q2tdVhC/FJSGDi95jcc9BXsozHiw7457Xktf5pSz\nncPPA95MOM5yj+VBfQQWtD1a1Qqy/GMQHiL4MOC+qSkyhx28usVZhX165hrH2T9Y\nZVxEFceygUV0+DZWyoQ6eMmPOzxPkMpvYl+mohQvB6pQkj2QPjxQjKT2A7DY1lu9\nFH1LxlISFAQvHPQkPacv4KiY1AOFkiEm04zNSWN2Oo1mdMO+luWcLtMx4JEE5FeN\nAq4BqB9NCg20kz9cSUpcpMBOjfVtiCapLcikqfFtA8z48rNatsbe2VfLPk3vZQWm\nypuRNKKkeGhoh+Yku26TZezoQL9MMxAsrkmpeE9o7ryxa/TeL692iiFAYG5UInzw\nu5RGKLWpiazJZz2hVF08yIn8S7LwiFUKUcaxrauUGeKQdHu9StOK1ysK0vT5atYc\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 35AEE736C9B4D2861309E7815C0FA4CE40D865F6 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAj7xqYC/HZ81KgAAAAACPjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkxOVoXDTI1MDMyMTIwMjkxOVowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtMzVBRUU3MzZDOUI0RDI4NjEzMDlFNzgxNUMwRkE0Q0U0MEQ4\nNjVGNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANrCXCjyWyYRTmkd\ndSQ1+yX2V4FcMqOnjot2YSniFfPZ7fGwfDfXfJyeT5CVXcV0rOvtSw5hSH3Qb9V5\nUgJ973wkh6bE/y8pQ52KzXysGf5VACE7cxA4Lr5rXCRRbaX3RizB/qtvS3dc4MTj\nIz3cZ5r1NZvvuF0ECjKsDAb6Zv7v8ywbcR3OWC8n9BjVEZ5H40ohhIc3tgGlbtra\nrBQ+wZat1rbhzh6Mp3kQONAPuy/ZeK3PCoEvINfsnd9JKUJOeyr/JzUTLwBnDS0z\nHjj0E7gspdR/Vp+eTD67y4czlYhQQ3LHIC24dckOxFaRfAjfDUGE46WxUYFf+XWT\nRmHfYo7+GRfanlRsCYaALMT1gBqyDc2dnTZJPikd57wFGe9qcFPw6RsNHzopAUqo\noD4RhVMSAvGADwvviZ+AvS6r6i2XCsiDdNlujr9tOb1AgDY58oVy+c923ITNW4O4\nXKVBz+Sagxao0m6uIk4Bt4FSuRrvy1tfPp0/3bxyJoROu2mzLbwjQCQGk6qlJZLc\nnKOBW6DunaXmDQuJivaN0b/zTtcRgnMrrebmm7hBbUspzirHhSVJ9r6HoQVAExjw\ni2XZUBoRG3mew5KPYB+d26CZt74GpN/cG+K5wxBVi18xjLWInMeniyVnv7MBSB1X\nk+AbccgLIb5F+QBZ+FbQyJ0eQtrZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBREW20obHJN09w7\nhc9LLN7lO6ebcTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJmmwj4oxZnoIuD6brxRZh6VP8DQ+7N0zpahXMwCZhsc\n52JG8y0eY1gV/0VG5bzJDrJYFQimv7ZPcY6u0W6Jl02F6onv6PnYJqcOwRfnYkzx\n8A4aAPxDC52i8o9bN19iweXIjjqc2ivaVKPSaeKH4lWmcrgq5oD+yLYJnhgYYlw1\nJyHB5FLP+98MG3a6beM3Yos7QI/PjzIFQx9PxFzCivWZPj29B3mVTLpDaBAT1v0C\nGlZdmEWWP3sACcae7EcGDDzXWndmagxWb4F7x4kRuGwV4eSCb1QygaZeUNcvTceW\nZTgJdlp5rAn89CpyieBAYwEqJuRE4NDnnvi/CLvgtgOs/WrTMrLr9hiLufoX8iLm\noXYPkh6yZzZ/WmeHbUzvcdSOtl97001j1XKFOAYxjP6CRBQ9+OuKucxyxXorQN7P\nXzX8LDly0W7Uj7crmi69MMMF8clZU5D8buyNSBjvnuLLJfUnj9NSVQpCXidyzkba\nS+rfW1zr/Ny1dqOYMCvY12V1ePmcJVltlGRy8DxOtiynTJ0C7ObPe22VGpJ3RIjj\nMVuBHgpqe5uWtYSzjH0Ox+2QdE/ywN8w7AfIccCj9pC9uvfziSwYyVgfQjkxvx9g\nVON12786ze8WM74NX/D5s7sj29lMRZoU3LNfUcI6ekSobQDUl/ISp8xth3A6kxyU\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 4666DE766204E74DD29BB4FDC58523A1403D6A32 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkEVizcaAjIhPQAAAAACQTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyMloXDTI1MDMyMTIwMjkyMlowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtNDY2NkRFNzY2MjA0RTc0REQyOUJCNEZEQzU4NTIzQTE0MDNE\nNkEzMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL7fgCYS8NIlRSkH\nH7rycsqUOANooIsWlD00aRUuKjCO+8FINgZsETGdW8soLrmscfHG7wg8c23btoCK\n6THRD2cuGwG8gmuZIXi5Vkw2H6lLKqHxj4JqQoyP9904XU6PsAmipybOuM1SaqwQ\nYOI80Aa6w9AT7N30QvG/AsQAMu40xMs5PmpO3T3WJXUnOB0IiBgqBpVHesQpQ79a\ndGGMu00gv6EqWKpjs4IlFhUqm/erGxtVv9tD78Et/qTMH6vR3RLW7NvhepPh2keN\nzeZjW/tbyaNmuvKoc9pUKoLmJyWBsIcSZE5oUJyuYFDTJa7y94Zz2G1KLgMR26y+\nzwvVq6Wc1ZnVB91qy35LS1YxLGoK0k897EgtXhTidA7j1fYAdoJF8y+JN042kYkh\nw6hymotkRcV30G6V/XKeToLE4JmafIdXzHq7XgUx+l1hhVWRTTVnjb8hz9gZ6hXu\nA6P/+/c2SpHpXtKSp95mSpdg5Dl6crsGG0CPiJiWlkcaFnvGvKIihAiYWkhgGI64\nL2QTWtuG50kp2zOVNsT+albqEen+sLxZ78FLt9IUBP6HRfGkAQJxQG8fDvp9Cxwc\n3oWacwI3O98sdSJBnnueBIl7XdShzHWy0mFskT8Eg9Re45HNDVrWAOB2pUWR/sCV\n6AJN0zDPCj3A5P3eIOEXNONhxmglAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRYGsv0YsORhZIz\n4VmOpQw3HCLFsDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAzDdCF9ZHlMcBLzu9DCz5EKYSkxoV2oY9FAnjnjCbcJ\nd2sdZWcMdCwHGAUmv+8heCSK139hX8GBfHHun7C8jSAQgLXTj1AvKRrfAGVrd4Wb\nVNAz9JkGYw8QifgcgtZV18kz2KNk3zt+X4YIqHPKXNpzgmUJT3fApbo5fmUDDTd0\n4g5mQsjnUl6AJ2RC8FAIKBT8AVxVS8cf29V8wemcq2QiFKzDRsdVwI0t6zrKl0FS\nAnImP/uYutf7EOaQWBgNajnnTSRq0ekStPx4KNLQgiHH7B221JUK8t7qqRyimoH5\n6iT1VykwGEDW7YXUu4wT8O3LbMMeBNT72R/04ioEOQHzKQkltiPDVf7gvYsr8H4B\ncIfcNXCTqi8utfwMuVHxb9ssUzrFWBQBjHBdKny5jWBM1ogycPzJg5F1lsPP+fI+\ni+9ew6/MdgI4CNn5iP0OXnSA/XsFW1K1WGbBiutcIsUyFZpntT7jfYp3nrpplcp9\nxXvbjcF+RngAijMNfwQDliCKCHor3iz4gQIXkDwvoJKe+dWpoyDcfosgmidxx8nr\nkeM2pSdumxQAsZLMbip245lPRlWXJ9lrPxg8rPmA2q4tfOprcepY/Gwf7rE6TzAW\nz7NBW1V2sEn0Vhs9zSksVIAOlV0mxcRnTzHCKY8H3Pu+iR7e9PtHe1nqfA+xqUNL\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 55F4DA39CA65B6681F2B7711BC3EF208A8679D1E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAj8MWKqvd4x8kgAAAAACPzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyMFoXDTI1MDMyMTIwMjkyMFowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtNTVGNERBMzlDQTY1QjY2ODFGMkI3NzExQkMzRUYyMDhBODY3\nOUQxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOtDhDtIzu/l+k0K\nHqq9Yf56tCT9WSz6idcRr1yISRQWZjtQh4O8fZCwb92Kzu3Hd5OysKljqzPcMZ6+\nNqy5laFYtC7ijOfCm/yTtdDOidHG+mpGM3rdwMD2sPu20MZHt5RRLW8AJ0zM6u/k\nEH+A5S450glnEyvEOtv8HO4EqRC7r/6WP/KhAR0xSYQebWvtLH7LT0HQh5ymnNNN\nzdvxRBKof3+F4XvE0CGOIRtu8QHyarMUHJJuXHd4npIE3gQHBHAkdvc33qCm4OfO\niFwNBZgVWU9id9SUEjXmUgxjSgnAblW2MqBJLtVKKLvvbdqOqZlbOYHfG1x4gM02\nLvUCIaK4Xht2B2zYsW9ChZKZb/mObx0Xn7EoY0G3j1abrJr6Ezg6gMrzS0moMFTV\nUspBTLKwgqV73ydkYUoiGAYr0u6j/LWJRdoIVBATiIClGkVhaMRZaSqIGTA5ls2T\nxW8w7WX7WumWYTqHetQ32VVejiisknMHB8NLerAdPN4QbbGDE/s6batpUy3/FlPU\n9bxrGqiCgbvmpMcGwJp3+5K+AnExWMwMTkLSunR0ccSYXLtEtCLVeBPWRfUhdSRR\njQdV+PEHcfxJrcrb8MsaC6PJkVpSE/T16YN8Xm1DpjT73rYFEuws4ZvaF/6biZ9M\nB0OXj00qSnOUwJdGKGBe9IiZlvQjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT5X/ejvCQdj0n8\nBSrvFe/arOI9KDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAF2eKrjyqWrS+aWsY+QuiC8P3T8BYhwJh6mFOdOo0LQL\neN+VcjXVp3kV818BdmjjRzEKp5FSGqu1O/C87StTdUwOyECbJaBKIgskYCSIcJ2u\nD0u9krDcsZlNn+Sl08o5H/eOR2P6Y5KVW1KIVWb3MI1qnHpwKzqtWpnHMmWsIFqr\nNQTbTl8bLupIXJorwre3AwAnaAjiwJxX069bEYlfr7BwmkjiB31qRQ9i9r3Usg8P\nnPYfgaTYxnNV8gKLv67rR+5Z+GsCvY8cYglZ+sFmfYEnv5Qrlp06C83NCBQFDqrv\naPMVC3o5YoDPE3ITZlVBw+QTZEO3m8oby8nkqm7QI95Y33FYIHOVwHWIxeZnIhEL\nIE9ubYeurKqzVNR0lyqoqRsTqm2FuPgERNip2BK3+hs9OiqnB9tGl2cDoIHR0iTJ\nWfoPfOt+yuRYNn1ZYuxDq7loWZxLzkRXiODuebkjWTYmSurLUiMdEm6CCKLff5Jl\nFMaK/KXeESKckVFF0vQzcfBsM88+sRt8sqJLKZycEcmNVQGoF/0Sce6ePJ6GO68O\nuj0EH6fjUfegu2nsdvzjOvff3MdEO9ra98us8GHaCRlu6AMFHhONQtmZHyPkYmrE\nc/zmRxR/XZIkKtfUhzrdJH+GT1PQSwdsoUtSRyILm5WYPPEiseIFjA1Ak3StMzy5\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID 81B5D99CBFAC98C5D61A8EBF26A86A086BFA3ECE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkBe0qkUhlPZyQAAAAACQDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyMVoXDTI1MDMyMTIwMjkyMVowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtODFCNUQ5OUNCRkFDOThDNUQ2MUE4RUJGMjZBODZBMDg2QkZB\nM0VDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKGXhIATpLe4gtQ6\nQ2GHSJDPsM4ETVvPXNxNC1Q46reBAMDOzKslpTPsE54kpa41LATgM8WQVZz/KScz\nNeEDDyQ0sTAWxUGQcnEnzdIKoBTYbdgzgetfd0eY93nzjm0dNAMa9osjY0FTI1r9\nJzGEPoZUiEa+rejqCzVZgCOpatQVum9jXS+/p3yHnxi32KvTcc0ksYtlgRbqzIdV\nNNP3FJOVr/wwMoOZhfIg6/bbyIjjRUcA+wXmG+CAAKUqxfadbKITZGJtZY0vYWq7\nEmNmAM1gLY9FpPp1y8pHotKQNuR0p2+mpLp5YHeJnmGx6nXnli60ShTg+7SNoXpt\nEwisxHIrvCK6oCK1+KO8qDkLdVzeTCdfHnN5xZYleWe6TR23lpFF4oByUubZre7P\nRv8eywelwb96oYXbMLOo2UBFbfMG2fzuaeIHe9TrmVs5tVYqug7038tvQvuiYkdR\nJRy85Ugoh8dncQEKwdmycl5B/l/s0v3hX0DquHqSDS7WZTC8veVrSLGPlkWDhrv1\nZ4c443pQP2+R8d85g1/V+EIb/bCc8QNIqzWIS/8bKHHlSG/7cFFfMYYRTe1igZ0W\nyjT0TbJrYKfgqrAtKVW/cNRdDj5JBFspS3y6vf+FHCn+AW8vTnsX1ht7yWB9zr70\n8WFkdttxkg/h3oAIMrCamfHOZVzxAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSril4E0PFFqVed\nKblxC+BgEjlJijAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAcKspoJMOfNXFlDN3AMOB2uszKW9UcZtKzx12x/WhIn\nPJfNqluC0sy+U7KLxRO8lnko3o37SJmxzzToYKp6kLU6MwLjwK6Kdw8fJ9AOSNmX\nL1f4I4G1UVjvdctqHoycNbzBRG/QGohyyk91IsSJ4mm4fiVSqVPWGeS+NEiOyHUS\nvNgK033RjuDC9Aj42puA6bK+OMLQK9pDctae5JHfjuXjx7fMHumoXR8eIiZPKeXD\nGdLVOOH90tlbh+AR15J8vrMVW7FuwfGKU8sMGNWUQWgudeAbcZ+9WPuXkuoX4ntZ\nK3DxCDSkfvC80nDYfTEjW2zy2l3THisDY6gAWd9EmKQvwk1kS9H/smN8MVJiRZDX\n6uavMjjKGZ3bhasvTQ3fnqhvsTS3vOxOH+lVdQjzDRYX5L00YZTBnHVJQSfDgZ0Q\npYElmuD5XA2Bm85yXrKu8NPjzbUhaGGV87MHGknige7tnDndrFP32o8iKf6dWJX/\nHuK+8y9KYL2162Zla2RLrQBrz1J1rV+WAkDLX+LZRmiVByiUGBR5jtjwAIukj9LC\nmo4OkaUbmYrgjhxZfoyDH4KqW7xip3gNtUdJbhCFZweoUmkkbKzKtvCSrXHoGZnr\nR4xlyYt8bFh4EoLLXH4vfRV5oQ7IStxAthQXD0VVikU3lHVLubCtGTTIMMzIOPUW\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID A0854BD197F8212FACBA38991BFDDBF5D13CE9CE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkNY9jHHWJRg/QAAAAACQzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyM1oXDTI1MDMyMTIwMjkyM1owQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtQTA4NTRCRDE5N0Y4MjEyRkFDQkEzODk5MUJGRERCRjVEMTND\nRTlDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJx2Uw4ANaC1bSfl\nH6BLhB6Sd9ZUknEC4hxsRhB2lH3KxAPeDxIM/4ZySkIkRhd6uMajJIkVPonX+2RL\nvnzEy2xJHyQvbWVyZ6gVXi/oObmmM2cMEkAyrCBXIp2JSXNdaWDozxFWoR4nLhnQ\nz0Kj0EBv28JNW8718h1mi8ItgZ3C88Cej4KPmr6KRG6Q6ahq5Ov1knAjXPk5WroW\nR7j4KQoMkGKqYf0R3lpzakJUEMkpvcbydA6IKYydl72kDHbqNmSW6ZU7YUheF9xZ\nYRWOYgAhEpTcve5WZxsn0OyHLmqjSj150EDbkT5k7o+XZvIde8I9NEPbwW2usNPv\nP9k2SD6XGn1BCNoZvhQNpVq0LpoGayh8CRRG48vEkg1K52Jj7iZw5jYteIrmiJRh\nqxMiHFDH07Sd+MHDD5KN4kEMBc99ZfdtFYwtfOWAMPX+L9g+vQplHEwpc26exVat\ngB1yZBg49WSZ+h2/kelPMc1F9OCjezcPcsdHiueYWrPS7OwJ9/wyvvsQmHaarLy3\nph4knllQV5myWvjqDnUD/f1b5txP2dXdYNBxBeB2nERfYEUEevCVrErBCNNbioVP\nfrC87yk4ae9CXES71gPDVi1dmciOEjFO8xMfOacY3j7pS7FuFKT3hnPFj907rdNf\nkR5Fgs/dlhczVcRoQnSHVhZRoh5NAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTOuY8zcJeBZXrH\nL0q+UIRZxQ8fOTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAI/OAQwtMMCbpfJLzCqpeVOWhfIxOg/rm4efYndgY17/\nHx1YDkgJoKbWH5j4NhdxqWzKgfiW9/HJ2a5SfM3e778LOITp78s8eso71qiqTkgH\nKBCgzT3uaNt7pwLMNMpxNjQmpByGflzM/AJQuYsa41uHN3Zx0gJSPCozZC5tb5C+\n9nQvVauhfLiSPhXe6jfmlVat/HnlTWVrnb2NTxsAFOtOes111mxqGlW3DkcvVwH/\nRUsRPnrv6/joljv3uxjbNwbix5kvxUa2D3HslAPZFDyzt9omb3HJB4K4FDZ9sMX2\nSVgEaYIoVKeFSqkeK5RZ5WLJy5YaJh3bLOvYGeqPZAs53E1IfcLK7udRG+OrZ1qs\nIZjZNt7xlQ+n2DMIf1+s0hmcn1Vz0jR8R0FV+CdW6iGZl3diGUnUrOHgh+e85jXQ\nAc1nnT9RwfSj1yCtyNNqLbmg/3HS2ydOARVIFu4FewRzUHY430zH8yH4vcTv7iO3\n5ve5FzcDugIW55z4f83TcKheIFs5WKZVgtMJIik1+7utAu7tzQ4hbQZQEGF+kZry\nuUQ86eYQjs5unqPxkcLo1b4El/xlrlOH1R5aVi3nX/ZgOY4WSPR1zLQ+oT+kPnrE\nFfhBzeZtM9+ox/jA9qygc/UajZtQaZ6DbX4H85RFedfBxxjMOLkpV16Xb/+0gM1E\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID CD3401AC6E1C6F93DDD869D46A518311B3747895 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkQKr+ZQtHWMDgAAAAACRDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyNFoXDTI1MDMyMTIwMjkyNFowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtQ0QzNDAxQUM2RTFDNkY5M0RERDg2OUQ0NkE1MTgzMTFCMzc0\nNzg5NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ8LFl8UTZ2Ga6p7\npWcderDhkaavthmTUEIckucrLEj599C9ggwY6cB+VIyVUuy9e9LjvCOKaSAYblQ0\nLWIFCfGu07eBw5LE8bpEsDrqw1AHSapvRFWsYZQA16CX2vhvUguxrW0UZ+LKJd9P\nhMPFdtMuKeas24jbReuE2F988lDjpG0qltVV29Bd6m7uSkYT0qB+Dh/nEeYuKS1I\n2mEiYS8YzO5sLOKg7fA1UnrSP4StnzgnWtuJZWYOcrpS6v2eEkOCpPwcwNOK6a2y\nVDhOUgt/EFyZLYwEwjrZRDOtt/KT7MONGlmjusNRCyyS5yRH4eMOebZfuH3mzD3d\nNyxpiiKTaSJghan6yutSQTI+Azj97Vrf7eZESsrdn9QQtUmlzLiIIRFnIrOxBgdo\nWPyiH2BMlpYRutcJC2a0OBnwNqRihOeyJWhe8cdPTJdNPAlCSf8+E2BFM+qRSsOs\ntT/PEa35XM7CRXOV8KcawWNIN530vojE5Tl0nhkAX/ghm6aqjwXsyZbReKIwE0R4\ndRxzHNCS8dQ3Bo6n9wiOERp9YNKPlMczNl0Im41+8L8wH5mhR7+77xOCvGsJKrgZ\naQqiCjT1/q4Uyrc3eW+U7tsUoW+X/cCPFUo+5NRlJJEcCSrr6FW0Rr7PZf8xf0EE\ng3PaMzhZtq9smbemhZQ/MskdNUANAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ3gzNFzq/ujWeA\n4TYmNDmGocv0RjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAR0ecpVaQhMCgcAHoN7Dq4xhKlRTSj1uToevx+RcoKl\n6TuyQCkAMZ6mPC/uAJcQKHfZqs3+e4kp5r81sSs5wAKcve31AcY7MY2nRCLmdcTs\n4UIoCBofYafmItLLsv29g7ZFYHRSuzgErFrxTHqj+HcsU8LlTVuQzkr93ymfJtPJ\nswILHzCp0XttZe5Go16xUoWaZqLl1ca2myW/VvKAZtuowXnrRmc+mB46DdxnIutR\nV5k/QX7q/p6D3WAibc8/fQwzokrq2CKZFGWuePEymz+5c5Y+Ull8l1h+ZuygvPsP\nkPRRlvD990UhOUw1eRW2ZOwz0UGJqBduWS+Tq+ZzZrY0gL/G2PKsxJqHphKYWok8\n2mOzNqdVDN8VJfSCbaFZtPWaUo3GKlnC/8bYisC4JXOWQ0tdjwl0mSFeRvMaSHyT\n6rBcMPlQLRBjbByFyfWpiHwZtiBobIQoCLsHDNLRYVfJpzQ8Zp4nkpaVBKhEV8x1\nDGhb6ii4pKEHdSVxCkUlMkOoSVcPjtwGsCPZpkvmfjn4D18fOjHxTdNxAr0z/Z5U\n3t9i+SxnFDbE4mO5scqhBWScg5ejX284Nx4c17yCF7O4W08YNhiE8XeD03Ag9EcY\n3E7QQi2u8IVuOdzVaQAW17PQfbHq/TE9kAEwR6idbmGMTIg2cx1CfHGxJb+e/PpL\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID D6F56ECFCF7EDDB7FD87ED01E127EE009A463BC9 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkV5Ycs+IuqUCgAAAAACRTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyNVoXDTI1MDMyMTIwMjkyNVowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtRDZGNTZFQ0ZDRjdFRERCN0ZEODdFRDAxRTEyN0VFMDA5QTQ2\nM0JDOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKCxkUFwQUiRsQ9e\n5vviwZFxYrEwgFYLZbHUUFw1WkA+GH0pfvE0ReWlGSrjlI2Zip977kPqyMJxh7gw\nrWsQblATO/Om4WaxwObnsdN+0+btMOh0C2rTY601YRjuUnJXPdGmQBdc/4pFBjLz\nakM3LvG4+7caaRHl0lfSIwkShoFrghQFvjpXCZWD//g/mj0tFweulYKcvypnpcNc\nnFwc6jixff6/J9IkcAdEDvTODn2lX59xJj3scL2Rh4Eg8EAA4xqjlK/2qs4NjWGY\niEQyRhpoIlOFX8jmuZRMVWX/iXhohMGBwtgdD75J5BZMzlSpVmLQLDU7EqALoIVb\nuOFMoyE1toltIBlWWSfrKiEmNqbTqBDvlOjXlC15y5zWng1GeipHiZQoMipIQZCg\nH9lhy/ISqk650qkfmyrNuqxKWsTOKU87qEC3BrX3JBQs6NINz0kcPsgltO3POUea\n26gowu+ECPyeS5ZHOSSU02UqFqFARw1W+Qlr7GQ7T9xbO2IwiCo7tC7x7v2Pu0E6\nFQ3bLSErScyqzhF+nEKUDMZtukw+ASD4xO4r59xzvkWPeruyEL3Wx7NvMPSgatqA\nUz4z9hxrW4tqXoa497rhaAIt4VjpEE4M7PV3BZT860g9xRt2+deJukS0zS1e2Gew\nVlN1k5Z3Itqc9AA8taUX1foMxQpDAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSkBYVZlFUvysx1\nqLCpTjYsUNVkjzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGxXjluOIKxLtOnaQjdYnpDHuNoGXJDF2m7CVedV5RTo\nZP9tty/20BD3DPltyrzqN87DNmmMGycVan3DZaKMATIIIZF73T4J3biv6rm6Q1Vj\nldWk+uJw9+s4yUsTekF5iUbuEU8vywNYTF2pjtML5et/FxU39Fwiw2OvDQntbKmH\ns1i6kP1QlBvmxXkMPud56DdrnHMJOPbQoEIxxYpe/qh+iYyZKKhPktOKobiDfqTZ\nEywN+E7gzbB3Nz7V/P4qZJOTDVRVu2tx81Ms3zphcrgV9gL4e1NyVcunQXHesPGE\n4yMqvtLfEUYaLspxrItV1+Vks4vsa99JEqEmyJI0Kwqxt0Sb3wykdrzPelFYZ5sI\ndVzg3HcyWYrUKovjDcuN494DzYeaEyI69AP9qCwiMOE61IGB+wF+O4HONrjo4rW+\nKXJz5JdtzDylMf3Xx7zDqhsWuYbARmldqI/vx9e+dVEpwRiMBro8trmlcWWQ5nub\n//nBZsTee2tBeocmH9zhOae0YEpjIxrJ4Wq+yHS1rpOE7wxOSe/IfC4b5UfnbSKc\nv0oU360PinNGslOGZR4ZiJYk9+2WgTiwDm2iMJvoCMZGZPhWZ0LEb+srAW5ItUOD\nkasckXjwnYbgCpI0gX90FvbFutQij+n0zz+n4VHSRO1UrQK3FdzQXzz5f6641VyY\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID E0028D87CE6C67A8751CC4B5D74F57622E75E42A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkb93pmfvR28bgAAAAACRjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyNVoXDTI1MDMyMTIwMjkyNVowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtRTAwMjhEODdDRTZDNjdBODc1MUNDNEI1RDc0RjU3NjIyRTc1\nRTQyQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMf3rofE/aQglSpB\n0N9JUYLomwX7TLdCtzCJScCKfW5SptgZX97KxhuFba6R2qqfE1NbABvw7ZK86cY3\n8DRNtKFxG5rcA/MW5QY1fhMrwsI/2yLSwRPrgUUmip7NDTWfjKSIYN6Yso72t/Zf\nr3STqckd+VZxWbhDcsTRW7uMJk/UC65A9o5Q0j0eQyRtKSrgiBOCwAXHZCZTMN+j\nZzJD4RY6DXF4YusjlrzMwsY8PR1MtUwc425VeKH7m6NYX89lKgUI+EaYW9M99uuy\nz6W9DR8yKQ29aIR2LJHEdByTXx3wCrayLiHewTGegZmOb8/gtv6UQt3TEvVATli1\nLoXWq3xVMCbPuoMZQPAnmElJbKoujX4Q7AJrZtUSwezHW1ElUK41ewm5HaR3lQ/X\nH+1dtLfijP0jd7ZtLwkrh5CSSOdflol6nOuPcsMD7tm8bhJXFpnDwGcz+zQYKduZ\nC4HnY5LM2ENmS8TFZGevfntAUOsXkktjklXOxoTrKNjPy34aKU5dsex5tRWZHX7d\nlscvaBlfgt1m+H1eEQyBn1fc6EW/NcHx8GWxk+Tnl9sgqUi/hdm42VqXHahGqa00\nWe4iQRSGDPH8+jac0GLAQkvBTxeNM35v0TCUHmwXIHYWGoWaZ9cOBvRW///hX4PH\nE4PPu0danDG/iCbTQ+wgDbODra9dAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQcMKsf5wMtFrKw\ngJuiECRz0LZj9TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAATnGMLwWBOChKJMnPacAydTuvIIJeW/gFZ/pYIqmaaP\nO3I7YWxg2lmoej39uaB0Mdr+3XINrj9+XNwRnwOs5jamdU4tKccSGYgkb/UGI/xK\ng+KCA0RFf98dNuKjwe6Go0vXryJddw/+CELR3FGJ+BFDK+/fwIWillNe5WrVGDAp\nnKPu2W+9mHe8SPjC8xyq4IFZJtRSAsZX0kskqrhD2LMmfdDB4vabwzk2c86qcuMu\nDVLmOsvhwBogcnCekabBt17LPEMnxuEe3Awln8Ofrhm+wwK3YVMxoy/7g4NnyFB2\nozYvs6Ll5wfFtvdCZT0PmVQ/WgzYCyjiENRqMWLImQ1fIQhNaK3PObOa+3cXkGpP\nf5RFdbf4tlcF2ICKmyCf1wbbvTnuLj9yOwjRAWX7l/8DTg0nq6QOTCJaSO84VmfG\no+PTRZq7KixM6rkkVu5enLvCamFscR7WYJKlcjdD/MYly9rA36ZVQpWIBGmTCW0y\nRDxgvMcupM5AWmELlCkSbRj4R6cEqMl+njgI8h0yCrv8oezatCftaCZQYWDP7Y3M\nE1mqBfaA/B09P4lpBzspc8ia/54zqdrjONFn6kjvN1jy00TQyoR07oP488zRccgH\n+P1sDGXqEL/wZi9prxyqz8tIln3BJKUbbyuvmxZuc09X+WIb41Tqp/VphieXHyKw\n-----END CERTIFICATE-----\n\n\nNCU ATML KEYID F761A3A1F408F1090797B87127C2A2397C0ACA24 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAkdNFvLkryvG2QAAAAACRzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyNloXDTI1MDMyMTIwMjkyNlowQjFAMD4GA1UEAxM3TkNV\nLUFUTUwtS0VZSUQtRjc2MUEzQTFGNDA4RjEwOTA3OTdCODcxMjdDMkEyMzk3QzBB\nQ0EyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANs8lDS2GbB0NTyE\nbsXHnm6+o/ObYxuQiXmDIRrEKxE9QLEGNAJUmkG8HG9gKpzcYjvCIRTjwh3HiGXM\nqGqqF7opqQSoFHziXWEamnDRHqA3uOdp3zP61Cyse0cf0hv7VK237PDwfw138a0P\nglB6H0Y9efhX6+pCpFnjEcOkr4t6QHwDF9CBb0FLlQz39hKO9hs2j416b0nCOVnH\nnRHACjsa+P1txvIGbiIR+Z87+4j//INxu5FdtTllxCvVYtbNl+iJTaN4fvyI04M3\nYOaDFTXxl0y8D6o98upwdKuS9PzFIW0c6e2LSte1xLV72Vcf+tTD1+OxMMMDt7Oo\nzg2+PURno5aQSq0hkJxXrABWSr2JKsnsWnDFQ3Trc/gV9ZfCl0fwWYCV5AMAZauy\nd1T4CQSm1t9B3pYGbXxVDWjefzGrhNcVaKq/HMI3qDoU8DznhK/HXMPuT0PX0eds\nA09PMlHheb/zKOyq3lPk+blSObDpvr7ZBVpS89zyUT3rwxpAQ7z8ycUagNqkh/oB\nLZgegL8Xjg8PN5TdYpLtWf8MpXV8lDZMVhNNQduU02GY+PZEMJXAjcUg3I8qT9y+\nhE7oxu0cgomebwAaCwJPOuDZC+cZUMTl0vPKHIm0nBDxmCPTZmdoYl9wv2ElNffD\nlhrgB8ZgfZKU8goTB2S4ct2wKgp5AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSm/r+jTrzBvknN\n5iMz/iA0e2lo+zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADMBAxNM3mEkTlF5roAPApr/B61eDOIRdYasbA7FEllj\nsJn+wwXG9ItH6chflM/Ws8C1qlL/c27OawUnDfyM+CZvY9qbUuRhxWoGxiIvl7Rz\n4pWNx+HtMMNShLjyQq7/XUxgUgnjJHT5iro71t969s9zFhMJICybngDOnwUxxC9k\nUe5RPBWEEX3IwKWRiLBIyKraWALNWED4tjUKGXnEyOghJdTBzP54ITdz8+AsreYw\nQqP6j4BHsNUFgL1RMuoKzwXIYOYdNZMAQlyrv3K5Y/SQ10iRI9t25nHDDoeVpLU0\nOpVYJG7Na+DD447jkC1UhPFJExgCfSDjz6GMKsHKSArLBvmNuV/M3Htccz5n1b7o\nCqMvsjDq0gC6hVkIwUTPxBFZJgM/TNkF7fQ7PD1QvbUPDZxr7tPS3UhSYhDjXo9r\n6QFqVAKbMaCKPUy2PG5bybF2M5/yaJGlcO++4K/9RE0vy7D3f9erHqk5nc73R/Iv\n+7awcEyXISIdEuC1zzLsa6pVN+SBjWuPpLdRPJtILq/7g/VLVE5RsGOCEDzLuTkZ\ngUx0OG1NxzN/xzxSlIpLzlDmstEHT7cBGRYaBHtHJ1wl1l7z4vTga1IaytWBSbQU\n/aXwTzLettXl4awZtW9kVk/KWBE5oLIN+YYUffd3wukHn9LK40ijaU2zxlbdrLWj\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 090CAAE1858A3C3A3B6D4DF8978916FB205FCA90\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAASe6KDbNAcwMjgAAAAABJzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwNFoXDTI5MTIzMTE4MjQwNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0wOTBDQUFFMTg1OEEzQzNBM0I2RDRERjg5Nzg5MTZGQjIwNUZD\nQTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU+sVQ3vDjf15IqQ\no8iomkxYZLmJQdPsXmxSjLtTkEEAtLeCHVylU4fXkYaGQc820TyI9vWH01sNIKsu\nC7VDiYtA5hh2jJEEIO6gx0B5CllGIr4ejgoHVF9uItHgk66RQF4WToEwJPydF5og\neiV1kS2NdoMuyqJTFQH+S30udG9AoCMyLgfkbuyUK0Yx82XWcIGPoWuJcAj+I+ky\nysnDpHN0Wu6SRfrF84zKODm/wRfmVTpBil61Q7azhwTyQtwZYbkmpAFAVJjyqC3n\nHXUZS6qFGS2rNt98JTv7oDOb7Fudb+YOyZkimBv7jGDB0UwxJZ4k2eVMsPniDnU9\nxRZz3wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUQ6/C9JJ+TKS7QSmBt8ddZmlM5MIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBzpdT7\nU6Rx+MDogaa+aBSDNouqdNU79KFvwXcFTkPNeB6+Az7z7Ej/4M8PBu8SAyV2w3CD\nGl9OXx0i80CUaTamUBvDkDmljMADuc5358r4nOIlOj3u/m8E33OO2pEGuCUnlavY\nx/V6wkqDZUVw3vyRQsQuzb1fkYixqFBt+5PyV3VFEr9tVVkaFveFy4MU+egYNKC0\n+tlI11HDNtVtxFn8/82QMTlyuo8X4o6T5sWoI4z5z7L6HyEpgdI3zT94iDd+6EnD\nzGFOSPR8mRtPWhuWGn8g0a9xefSLMDfVEFMG7mQ7ripkDlKmKE1S2F1r0yoZRkA3\ndeP2r88eh+oK2F0fvHpFdU5V/cHAdwTPq7C0ForBJEKZ0gHxG1tZ4dYeIMwZgaK1\nZe3Ngzlwr7I643P87fZZoWw+3kSiraE7EA8dWiJMZpD2kUGUp4R5CDDdboWOHZRz\nSK1bq4Ojv7mVmeHULBBv9chsZrmaDRU9h6AZFkNw4xGCVz9+1tyTo6UJG5L3tPld\nLdgmzKg7F5WAQKpXZw+Hn6x6m1j7DIuhMJrIDRg+mBy0Li9WfvrT/AwPFFxYS1fZ\nBvZjim86tP4/LNM3dRdktfwWQDGBmiwHLsdIXyRJLFhhRThZCZtSjGCnfFTKKN4F\nCRJwNflhgf5/sA3NcxNLsXVvHtg/J8rtexa3OQ==\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAASgIRo0C9c4MtQAAAAABKDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwNVoXDTI5MTIzMTE4MjQwNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5\nMkY2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp3ySaJvd1eWUTJHM\nliYUhy7q4vJ45Y8mnk3G6IKUuVHSZ5IFO2UlBebDM433VnjmDyZl6xBQk58zjvH4\nwFWiftdHjh6mXXsqcG744qHYqJdM0dEvYMzVM+HPDCRByX/L2DONCxXgGwo5Tz9T\nAKq1zoqBX3wZ+BkpgTj3LOBG2MXWUa/W4+RJ6jQVZyCgmGWeKwc1o+S3IshWywwS\nRR3mGMq+YkAXaQ06qGC5X+GyE7sMNYFQHZexSJYsQpEIIh713Mk8kv/8YZ9g5DxE\nn8FQVAbGEHaP1WZQ7MrMvh0KfX8yeEz/FEnOaF2kkgv0nU3E7H4lf6E4oldld+mt\nUSUl2QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUqGvNsVSHQCTLsw8qQGUwiabSF5YwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBgbJkK\n9W34NGFYcoxsgOKHHzBsljHSgCvXDj1/SpulbyL4lX10MwLBVwuKZK3B1XGxgQR/\n5P87C+7LPRQ5eUGbnPeGMcGMRl58Brt4FbaPdwjc+t7g7m/+46TwDwikSRbA+Tt2\nFFZ2cJEWVuqKW2YVEwjy+qxBVI+0LkF5aBSeUDEiVMyZwppfMSk+bd+CzEpYIRCF\nSp0IjPptuND6zzSjC8gt7XnEWCzg14V96nlw9ACoP6LXqdQRMGPOm/0QZvbCsi9D\nrvbJ5455I3dnzuKJFdCl3CtzLfAtg/+iulMhoRCWd8QC85e8JchW0jnKxVnpMvp9\nMnoj5TWbDBAaXRQ3MO31ShAjL/0aRqEvVX7PB/I6H/boM/PTpV1NemgGiRSdERWj\n8Klef8BvG1OPtQgX3sB3MyNBW7BTUZ5GEuUcEF0AFuAWmCO2vhDvVxTsXE1v7qVL\nlHBgOG3c+9+WCGduQjdrX9dvRbrTehsB4tl19XAhCc3FQKCwJdXDRDXh0NOwEpBd\nSFWFm3dh5rYa65Tubb7+uLUTU2RwvxfyfNgCtIuOsKaD7Muph9WjZnAUZbt5MiLI\nfU08gU9ynxlJ1Cl2xmLoK70++fMvc86OBopiNg9InnYteu4mPXQg35lTW3V7KAJ3\n9J548UGkoDP24pEKZ4XDRiS21WBXqvPRMPt75Q==\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAip2ufBOXMTpWgAAAAACKjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzMFoXDTI1MDIxNDIxNDMzMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5\nMkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8kc7oVR3WP/+EGi9\nD+TuDk5YrH6mHblI17eSelKDcPJi77Ry75asJ0weC/4n3CKsWlj6+sdNslcw3P3l\nqLZUiX9FMYM3RkARZ/F2mmDlw7brM6gGIa5m3T1rGXU6WNQqaoHsj5LRDnRXLTtF\n3zSwA4SUfnclNqhEJvmGkV74Mjjeedz1gHO1abhyWeiHiAcY8uGRCJ29G8yVkUgI\nHBC/HGTrYEKNGywubrT6dw22LrzGOwpKJyh5taffM5NC1oab4OvX2HlAgjC+dRG8\nGcSoD1W4yiGpPRJfoTHAD/3gMO8G0yxX3Ts4/Jy25CiUjDVbE0Lgwe96B3nkiaE/\nVxWl6ZW5tY6TMtHS3iL0rgpJr2tkeYeXy7GocYQCKWtIVqQ5S4hVVonDPwXy2+LY\nW5VDoZEujYN/pmU4XWqKboqATFbYR+ClgE177eWiGLVl5zGNnkjalNBq2qrbG3Pc\nDw4o1mTQ8SmIxcDUy5heTtd3WOdGq3jG8Ylqrj7EnEs6xonSzfXRjSdfeNGh3VkM\nnQMfEGP5JDKbS1VGWjFrNaMiMXGe9b2729RHNRQYu8g77MR/4XwRzSaMghkal7Bq\nI2WmHr+xMaltZ+TO4gTjPw07D4IriRPoe/8+AU5U6gBtX1svqvlUHTbacn2X5s6A\n086kieEnAlz7wJC+iPgXlHkeHnsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMeKiqbiod9dz20y\ngev9sVNJnGIJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAiLYecsRcFEx1UzBtpgcRyTJDf3ORxq8+FPWdfcDQscKh\narWcU7fTlCXscHyGRRCMZyWeGsUEzuZVoBDL+4WHedACiA0tfyMVPGtKbdF6CirX\n/GgbxJ2jBB85C0g0apNxgqHiulmmEOYECSDaeDvjne8iXOFoL3Q+68eSQtZhSDrh\nw7TKWmtpFDH7uCQmicl1d1D+F6/+M5TmHrcBXFoyM5DZ19oKGSre7OpoHt5d/K22\nkJV6Tohm/YTZhARywE69akUGcQe9Ez66uKoEJCz/YCgcEc6+dzMqIOux5DBMIdmj\nlJW5I++ppFQyYAWpNDInT7fv2fh/0BU9OvoEgFCSgDNv7hy9x36bFkwvHcXVcPhq\nqjhMATp5mXcXhCFiwtA17B8z+PdMt1uIX2gOcXG23dJzhGYwatbeSMstiYdMrGmk\njIbkV8ARXrnYD8gPtyx+xM5OW3bzzh3kTMBfYwYdNUmHAZosxe3eTGHumLytEiIF\nb0EoFGMr9zY9KVDS6JjHDPaQKyEBD7G5bB3V1+Q21ZJXZbpP3G5G7BBiEMyepw7R\nqavvxGWW13f6WOyL8aecdoGtbebr7I4Rk7j/vmYpcx9DZ+XT758EBuK+tYnvBaOO\nkvzaJryPCkFgxz1JYWPooxWTbhOu2VeOfWn5UABN8zdYkbQa8rSjegvsmjqch6Y=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 128462F2A0D16CDE1946F1000544B055BC113D10 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcNgQhpbR3xXcQAAAAABwzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxM1oXDTI1MDEzMDE5MDkxM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xMjg0NjJGMkEwRDE2Q0RFMTk0NkYxMDAwNTQ0QjA1NUJDMTEz\nRDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApvlOh/AEQf7Jl9Qn\nE2oirapvpksApPqbfdQX7KZeewqudvNyAJUHo7PMWOrUAro9cCl0G8cQZH1HEBs4\nuGqD92M2zJ9Yu3OWVlPV9e6phR7jzzA4UkvfTIz58NqCErlDBkLnNNdeqy9Ap3WX\nZkKl27lPKmEVsPAJ80b26ziVSL+DsWs8jM30thgKCqsm+vsh1SyA4noj1m8Jb0Od\n7unzzf3d3T6JvmWeBDm7/b5/lzerq1qSPQFrMZYAedmAlx3omvDo1ZqhLnnGBnJd\nmEODFbwZrDwNJvGnFgxXpuUwBlVBzU1vcwmxUhs8KQ47ATFSC3Sx3UEhe8eT5WEE\ntLWOX7xRx/8HekMS+s6tyifEKy4tF8sHRpiVs/VRM56ufdkGYC6KE5XVB45JoLYs\nxDaYyV2DBIm5q4iCgHA+07ci3ZgG+A6x1OvuTWStFeojDY8tUwczkxDUSZASqNJU\nYgh4c0hMt8IL5Z8ig166MJRROJWLPmJL9SobL5Xu+JXrQHCVl82Ccrm/udnU4zI/\nX4RH5xs6Sqn5uNyjRzBrYB7eZ5c0sYz9e2gPb3bVSMfPo3dJZzkVtl+z7Q/q9TBq\nI3MLYshCby3zsJMI2V2LQE7MPls7Uk13jcSWHvf1yGD+xNXmBZ88GnnYNi+XhpJd\nJMO1T8G0eSGpjB8/dMAufWleD9MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDtGHKrO22sIwLAD\n5XVh9qMAhQ39MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEACP1D6HRrXmZtsaa9up4xHPWZXFhDi60jISZ7Ylqovgxl\nhO52rM6FJpedKJ2AXSzSrTyuutZWS1bHDHxm8X3jDMwPQKFd5o6opJ5mJkpUSDiT\nwoBSNVwolnubXLoAU3DKx8DZfNDinMklMmRiz+3wpQOu5hHpO+RiMZLg3HlbX3Mi\nV+OibeBfCp4q5/8/DOnYM5KQrlwE46+lyPIJAN9DMheC1AHxkd2FWbyhYArEhk8w\n3o2//dp+vkVTaAC2VZjAPGtLmRsE/UJvTzAM6csCD7vBva2e0EfKzceR3cTQUwMf\nzI2SIOIdZnwsyKu00Bu6P5FxnBXxRDBlnnhIuz1Ib7roF6u05yVqlqGJiiceFBMV\nnGCHqlocv//uodoKamuDDU8LUks1GC/wveCuhw3y5OIpd004cbRPDoGTW7TmEWB0\n01ncFN+IU1XPM5rYH/qycjkSnoznJJwW/taVO29QvQAjNfbo1j3sKkJzQhQtwrCO\n1AG4LKoUe5VHVzbkkzUr4s/nrs2coQ2szUPm9mXQQBUrtYTm2p827yN4mrQeE0FZ\n07Dfo8ilCieo+AUtWOxgquP5OGeQd579MZoo9Pg/NiRk2RQhP/QVg+nK9/hwbcY2\n16rMhs6ImBRPFgdEwdFTKwPOeY0wXRBrlkVrA8f+OCeOyLMn05Mcydy5FetPgDQ=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 1BD645FC1F90827C283E6CB526859FFAB0E0C62B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiHpBqkjgsLvNQAAAAACITANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyNFoXDTI1MDIxNDIxNDMyNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xQkQ2NDVGQzFGOTA4MjdDMjgzRTZDQjUyNjg1OUZGQUIwRTBD\nNjJCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoFjp+IyVhdkcDiwN\nnc35YIeM2aGV2CjmJeCkuWofgg6dnurduU9LtBVrbkavRyAAm37bGnWGwqwSawWn\nKLrrAcQ1pTEH9OSDKSW8h8mr8HQYvk2TQMBXsulIDpdf53HMp3LclIoy9oAly//o\nGT3NImX0b8K05ahuzfDNjgHOrwfO+koOphkl8AGLQV3KIATJGoCpN5/Jwu+sbeP6\n5sUkmhNqKJ5ZXYlhlCx1clcka1CWD8j7tDosVoEO4bxhCRFBMyZ/253p0hq3havu\n+y8GT1l6ezYCFjt5HyN0sssnZit5JEusRMHzrzLLUWIgYF5aioszaX30HlnTfp5i\nVWQIgIXW5fQWZNmLRCEYEYPuk8X/lpxA8cTGOyTO9FmttshcPe4hitwi8cMBm0Xh\nTuI1jkw7jZIwuwzJASaJbQaqjKMCCkQP3uxSnmZ1/FSwRc61x9QSDSk5jf46caOb\nJQgI7+RebcaKs6cNNg6jCyDOAI3RpGDPUC5aQx6SaIu/NM3mCKnJcjZuNHmIPMfL\nQZJ5WuBLRvu2sccFCo3otxu1k/qLZ9g91XzuY3qx2BcPFzA+jSrexPcpSedE6Rjc\nKhGU6yVzzgnqGhP3gcqEiQkR1fRetKdyIPdARqd0MofK61bxjOzoZJ7UW3ewEj/C\nWcnCYs5qK8P0o/rbRafmTAWgQL8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJEnOMDnmQurpg50\nU69aejpM5rYkMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEATNW02iu2/fmf9tECjZ2uL24Vo7oJjG8k4RrmZV6zwULa\nbKPsInqL+lyYWN5Ccv18aPZq7iWUp+CJOvjK3Mh+w48NnG/fk5DSBZFbI99XF2cX\n1dKINrF+DYHEM7z7183N/aGEym9L+VnK+SPV8n5HZn+VAkpZxkjWLUMeCP3ZL0sW\n03jv+vmuOMfMHPYKMu2GXnklYsbXUWlVysU+VEI6nFFthcWKJ/QWyzvkUypG3trj\n6ggbW9Lf14dETLMUkxx2HwiKbg76VHO/i1OsJEmknlrmawwEN7iWZx0y2jpQXncN\nVR0n/83KnsTdYVFH32AoS/PS536x3TlgCvcRrWl+lwX6f1N0mcneir+c3MNyt0Ds\nXRWSNhywCTPEqxo6qS/Ff+s4EjQp8G46gg28gXRQom8esU2erjaCo3r0+wo+Gc1l\nhbHBz6fDuTWpns7w5B4NGZujPv4M5ayU+ysvHWzKf9Y7WKBiHVwmO826P9ugOFMR\nYCE5ZThPzczBpW4oY4WiZnpvhuwOTseXUggy4bLQKBWyCKeYhiQwGn7MV1r/YZZ0\nnLsGLzSRDy88xP1qks83t6XqJRzjjfrJiWH3ejojpYvDDsW9aNJvnMXXK6aCoMSz\nlhuFtx+8GVJQRfDiiT5s+GJUEJC5ffJChS+t7izAK8rgYP6qC7zRhllmCbhDLkc=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 1DDE0F406D122C3E5A4F861F94876C9E1ACDD37E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAb2uiwYFoGvC6QAAAAABvTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwOFoXDTI1MDEzMDE5MDkwOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xRERFMEY0MDZEMTIyQzNFNUE0Rjg2MUY5NDg3NkM5RTFBQ0RE\nMzdFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAy5aPaOnaFCPdBRJE\nvkRNQtNJe5odMYOXQ0eL6kYtNN6Rng/URDzZvRPp6jN9I6fx54Kg+wmQftW+mAxH\nvQOGddZ+iaCZcKuOOhTEFf+l+8inxLUR+LAR9LLDvK1SYCndaT0YVVK951rYr/Qg\nxXJx1rsO8kgf163vbCKPw8sIQ2bhynCyrwNBT4BHfHwn+sljMR9joem2EBilcz7U\ndHx9jCHtlpd+UVbz/C2Whj2jeEWNS5bHXJ5sVWXecALEqt8C0a1IAKATTUear4BY\nRjvKOMSo2Cqt2ibmrbId1gjfm0fhjUf3SR1N5AJCmpmdHveNSwMmStMuOZ9OxObg\n9vjrLP4OUDPro4Yz0jymYGbPfG1JaEn6In7OJnAh9uD2B9RWzxprq4Bg/J8C1Ks6\n2fafTSCbGdEpGdiUWPo+ug2CrAgcWvYcPj9TNcbAeiCLbXj+5H3gddZpIjCXwjYk\nfPwW+kK8BL/X6p/LUqMYHW/FzfUVsGmWGASVq+Gbk8k78q0k0zNNqtWNCPyiHw97\nQT8wD/J3JyKFHLj2eL1KqRZWkfzn9cU2EMOXV88+XP66B/1A2qBI8kCZiFrRbyAk\nrd0Dcs5bF8XpghaWigJWpLv87xY+U4ZuOnLros/47QdEhcztdwbVu5WR26pqD66+\nqNBCKSh5hxy6WebHEJm7oB6jJ4UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKJYFAEu6Zb5oA0I\nh76P/Dx2gcaDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAG5nzFdzx9pbwSmCRroesluBhiGnYs3ZDs+FcOEc83U08\n0MrTrUS/JYIoa5vIgYbxUGLEvlcN6P1/sLyFg5Q8pF6rFnYOF2gPKZyw27xTH2J/\nQIJWMlcKF8SVeNzBrD6dAX4AqsIS8ZMbDvR3p/0BTGzdSnqOkvJnNShjfp5tfhbm\n2q3i5BzkX+lO4/5EofzCPRKaQ8x4LxqgEEnQkS+1sz+UamPbI3ryLMvczBerK9xy\nppD1uTiOTJqvaEhF0A1jE7nqJm/0gqAuv4q3At4M2KtdcB9TjcbDvOLT2EHrBxYn\nUIlFpDIRgUl9u/YmDhK+DUtLfZ+Lfp9XUek5mFoeokr2oLU5YjKwX/p1uIaKau0k\nLteHkXwhKB35r7g6ImyWL818cLJK6socMA90u3eVQUQkqgqqol99mY6TCvtHueLG\n/6l6XYD+yaMnwWDe9y8KJNZbndC3lS+ahN/LCcHm/Xh6mn1hwXuCqFuWzu5EWfiE\nmEWS9NRtiodfNLkyyDoH0NNNgdG0kpIo1IL9WMLViuRNQ+LhaMaUdOMpLXB1xxRG\nvHBVIOfvWV8Tw4tIkVVp9TG17iWm9ANXT0mFWvsDjaEq+o5B5TLg0bBucCM81jXl\n6DA8dCSwuQkX2qoAwf49fs6DvBhL6VpSZR3N4MJAuACQqH/oIADpVv9IV3eu8aQ=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 1FCDFB8ECE408675D963E5E5108D55C984DD797A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAkj2ViSQW/0leAAAAAACSDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyN1oXDTI1MDMyMTIwMjkyN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xRkNERkI4RUNFNDA4Njc1RDk2M0U1RTUxMDhENTVDOTg0REQ3\nOTdBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6u2xB6faiUDrt3bH\ni1EWptqoRcX00O2GqLi0MTd4Kc9zQqp1ZxaLFb0DavJyK+mjNU9jvKFPqVMSGYQs\nXBBXmhbX6j9d59h8xzRMUPH4zjny45u5B5TnleFj4GT5jLfs8UZq7+FQis0j4Ooy\nfoW80aXSb8FhxWcX8/fF0qJgHHRJOiFxn16SEeF0xIUfrNvcsDfEoiTliDc6G0yR\nf0nfrPJGjzH5gAwCFBfkNhDpXMCa3pKTA8MBsCla8ckFIHfTgQd/4ZG6LyuPKnCT\nSVWi1fg3rWpUgwBFjs0+i2XlyLiVbMrJaXKSrDcP8N72k1Ijbszcd4oNi4ilbL8M\nHEKVoire5Fj1Yr8Ks3+uvLCxImcBTx5STEU6jZ8owcPqcEaqWmCGmQ1dwHiYEd7v\nHBjN4PjkuR96xfTlCkqZ6M3n/wWlBZEcJmfCq+wUQTWS13rx5vsITRadJhm3+l0G\nVYRmfhVEoIvcF6cRqJRbUSJA2dL2Z2IrFTfC/P0qRbN7NTSsBd7uaJauLHImAlw0\nvZZ3UmATGwVmvICLxouPWkOYWul/HKjbcyxwz39kX9D5SzVYbLpj59zo7xuOUYZK\n8r/Bt1od/fV5PYo39eZNKVw6TD172W7FRGjPWn12KqkEI3sKuwCthc792hYCt6Ns\nlU71jlM1UeGjckxUevRVohgCYBkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCVPPx3dXP4HGJGz\nZ5LAIb4kAYz/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAXdlg8mcknVqCGMKcVNPc69OOUarmsXg6AHV7qt6J/LLq\nWffGDqbIARJvt0DO3FNBiRqc7fZOzexRBFak0xNriooZ/v2PNCcOK/RWedJvE8ti\nR5Os2VHduFqvSboRW5aSagr08BaL0rV+IJTWeHZK57xXks720tcxgC9d7MRBKxms\nuqXtV8YO+D0FuS5BxL53q32a9ame+VctpzhvNVC9IIpEWESco0GxzWbUVO/hxQuQ\nwdzVfzJfjDRTmLMUg7cWSqcinxwNXaBvbqZyfDZMwj66lQ3xR4+OZf1KZ+fYVy0D\n8TcOsMkk0VJrToOEDkixRcMTQ9AkOsI5jmxssHRJmMwSwHKISkRzbtb7u2DWPQl+\nHoidCz8T2vVJx+BjmRjOeJLlK21EntD5X/MgBdLufVoBgjlDDHlyOW8jAKNFnsia\nfUabxdxbEL091CxJRcktyu6HDUUWWZXEiXl18d81ANiUZKO7VEe3TZpwcMQFIsHH\nBb+N8O9gWy9E4uIwql2VdQqOipLmWbDgB17RpItGmsunshxfT1GxqEBQBULRrUv+\nShmBXPm54wWfo68NHpKwtGE3pBs3FabyyGK9GMBnQ1/KkMgqqNVlPY5YyxQPxGYW\nlvQtWEHb2udsu/mWesepOBLZpXwJLenwq0311TPenIuahFhKVRBIBNxtwdXfGEo=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 22BF9BF4978F4F45A4E9DBF729D8A08ADCA0A82C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcBUxQeXvFAGugAAAAABwDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxMVoXDTI1MDEzMDE5MDkxMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yMkJGOUJGNDk3OEY0RjQ1QTRFOURCRjcyOUQ4QTA4QURDQTBB\nODJDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkNJnQCWtlai3wVPu\njUodNI2hbxrhWIH8I0a9nNtxfpmE64ifRIggih+WT8oJyZsrX5OudTUkF//7kvoi\nIvA4Qo53LjW28AMVKVTx5YKIjJ7jB3rBRWnEmZzwVZ3XJ9euo0jiQvLy4BUtf33X\nui8P1DtO741q92CG2dd+xnzqNtLjr6uTxJAEg4Bi2q0NAcSpiGsImkSf2rxaG/Tz\nGR5Wx3g6aYehynYUMfi5m+mgFdnR/k0ZovM1umA3Y6ynCkmktEw71hINAhNUZDCf\nfh1jallGwMq66hUidRCaxmRLdXFhPcl1WLajSDzUiV1cDIn3AWZ5KnKr8GKOrwkT\nYTjLGxOLwtQesWqN1dTIXvBUfdxlwoGdtOTtlzIwXdqMLIF/f4OSCMsEOf3LZhda\nH2530qrtEAu6YbK31p3nBHqWl9kXNC1wjk3niRSQ8N6PObwX2yZOG+mKMJBr/n88\n3Petegw6NU/GJvSrFZxIIICv6iHoS2M3EV+7fyodPwbV2kDfdLUOmv1OAjSvsr7z\nzCxacyyfsgb32KhRPoD8GLffpTsqIXSIW7HREV8DDLNNAKLDsjP50vCM6v7rqnlT\nZGCOjlH06EKfunCVe1RQIf3XPG1MI6nRQUsIuALZzMHdZdAtCTdGRI1Yctn9nhXB\nilYD7cpZ9rCuywyNoV3WcFOLPksCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHuq67yA1sw0gTgy\nBOd97z2lyOh0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADMdqbOSeOs2G3dhU0EMoh33E4oU/l6Bt5Extfv4pw4xz\nz1W/+/BSvGjXGPOMh5YMS5FN3tgEdmDirG5n0FCi5MTLbQ9Bq0mir0yHY5fGeHev\n6I1WhmH+PaIt+muHTCSyDSwjWp2pdGy592rIY+ck0U4Oxdgb0+gAFjONe9hXtD5Y\naIu7PyLOQazPolToiQs+OtZGEy7+nIIwm39/HZuStCxmUsn3Y3EdCGCuyqG5l9Ul\njIjtxgG5s61bEziiHqHIrIzSgVUGRogMYovgoMD9tbrSrizN1bYz7r5edgqPOAIR\nPQgsScJMzwKQ8mHGZ2CGPeRcp0/RsG5Zq3b6QFXmEQBOTXvLnaSL4aJSsUq6+ZRT\nkPXOmlY7AUEqcrOTzyHgFhWTTG/UBQBm+Szy5uWR5Pg4CWGmcLNOHHAj94fdlOqI\novruFbgOaoh1O7nzHzIri3lGBRxWUk0hUuDxz3p5m+jTXOI8q7swL1oTAuHf98Xf\nBNOLu9+ON5BdfMa+KnmtosBFD7CjrxVk5DBh7tb/a0QnKI/b7lGOnCT6raMfbvr0\nCN/85VWD41mA61vEtq8+rVugamN81hOnIDYZMF8+6dFsKEMdrHbytHvax+LntjnU\n5UxQm3XiL2bvKbOmHilD/yQ+GH84LfaO8C+eMvnFoLaKTXZO7phJHvEwEa9098s=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWHMraUqvIwtdQAAAAABYTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUyOVoXDTI5MTIzMTIwMjUyOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0\nNTRCMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzWsVw0kiY2FmguFW\nFc1eJCmvWPdPgvcQNjsJKPVSIJMvNuDHFkh1ntcoPl0LObNvIM+AtBbG64bPLld+\n2LOttaNidMj3vmRpu5zKFpIDaIYIrhBmWpAgh7IgfzcnapVjI1NABN1z0PEzuMBn\nMo4VZZtpht+9jeAASSvbZhLXeRd8zytx0X9OkasN8AZ22ejiSQQnCfQu1bPQIKEk\nI6qtIR518D8H9pPIvi0rxwPPlbgkNMum2xOedph0wssUXP85E/do6DNrJIwDlHdB\nGlN3ZXQ0aFPW4igXevXEF6Dy4zAJRQ1cev1oFjMIeHKzJ5ydvU6vdBrasfJXCRbD\n4XYYWwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUvj+Re68yxJ/hkycj3v1Lj9VW4pUwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCY91DX\nuOzt8ByEPqXW/MJvEN9oX6yPHTRvK0sZkBO70XtnR6BtZmCn5OGcK8K9WH8AJnFJ\ndwmEyC9iSJuNkNZVCaqxjFfmDzQ8IjaAH/ZxM7Z/JF4TRNfEI84j/vgR6vDYHBUa\nyuG5phUL0hU7cQkDiWxHp/a0zZry4jObq4tQ7rbJZTLxkxSseOE6vOndVir7nqEB\nUuHZdwH7TvmSxMOYoKLLLXpEQrlTI/XYvAYStNSRm0cprzVSkl7nmz5s23PSET34\nHP71C4vMr7sSYFPxkD2dW4nQYVIguiDWFwzoREKeCWbpFMGUH+5b/8NKqj3R8Vic\nYOwj08w3G2S1+hIUW7zsP4jfko3HqyBXvU91zOFYXWsGiGHnHOXcGvkIp75Y39ce\n4rhfWIkZw+Y/IFNpNWXPG48MhgS/NdtsdDJgNd94G8oQDbXgMPwrxs/4bD84H+y2\n7B36c/iBQSmwk410XuLCBp8x1Ja1VCBnuvW9pkfQnMwksGRwJE1iL9jbtRgG5gN4\nx4+DsGijccPeC6NprGFKcNMgbIOFdRmQssVIsxDGkXyjobpzIf/lR6zv8YI/zd3S\nYTwmBnQjORHF28R/xmArHJBz0ppdYG15k4s5Lwz9GICfoVo1gKP22i3ZyUNN2+1A\nDrMHOsWh6jzKO/H/LdBFRKVeJ9LMDh8xdbxfjw==\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAii2xsZ5NZi2yQAAAAACKDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyOVoXDTI1MDIxNDIxNDMyOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0\nNTRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx/yjQgGWenToHZmM\nBLfkVMbz/gw//2Oi881jpaRTqBVL8sYCPCziVJ39K4qAU69dymH42XhOIii/c7KA\n+I4XSv0QLjZ5YkNQj/BHzutz6tTcVolVHdLHHuDjmJ+FRqnajm8mAVurLEAaDrL9\nYvE+DXFHon87hDDM/O8fZ68vkjB/iuE/DIOuZo2L8gTDrDXaIj0qTYDu3RzSfX9h\nh64CrAZiwNW9f3Sn5Kahk2CfMls5RY8BOpv6nccvWmjejMYQKTs/2WcjHI15//Uk\no2KMVMbC02NRTN2r6MJVuLcSuvu6dNg+JM+F8nsJqW2QY7LW6Lnm+qZ0T2s36mQF\np1n62NzC3K023nYwbvjyC8CeUXYngnYJxB4b1+2siKo7NlwuUtYJOme0ictglDjN\nz5fBFM/kt97/aAaWdizr8+W81NjFhMq2Q+SVsDr8R7ACXe1CQ3diuiaJcPXw6O8e\n6BKb2L2nlaJOCXakEQvOhMMDQNCnVDMeWSUo20RRa4S90//ovNpdMrso+KimYyTc\nY18EDFsNwf5NU3bKvLqTyIRMWqHH+fdlENrcu5GeD493r8DrNBiiBaRMR3jTfkJv\nwzXDyOz74oVGzjrcjqBHQDcz/Umun9yGemLFIjy+WmcoGV8mzwWt24+gjRAdmCVt\nbxDVyfyohjyl2YzT4smQZFWiXhECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK8Gi54eLqRi8yGv\nvnHo0jmuQN6TMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkfT/vFSy7rGiPi5re+s0ziLs86vaI4g/1/eUuki4tmOa\nunCGjxWWb5ccsHMpEKeNKRX9a5MUpF0jVh1FOuZJsl/sZdboMSgMj2b7aILSwQAm\nljZrmlzwicZuyuPZDef4WD27xEo/m2eOdjdk0iA8HlOYVwRYyOW0t3SlApZ8aDBs\ndC+11BngJLqcyuiWgkI5v8FaU+mj8QmEckwxUTJSNM5ftgAKfIhGjuTsHuELPGXo\nlNhQroUjmYrjA+YoZbCsvgx3Zcq627Thvv7KVwkwf/LxYDpBeF2vSZ118OsMsXng\nuYC6Uv8rzEubCHDAtE178darVhVigQMkQR1yXQ8ADMItJ9Wx9zYfL2tMRiDsIm8r\nPZvL6bx2AyCnO9D7tLbl+A1YHHBj6iWm5taxP8ayZlcu41eBZvdHoMFv62q5cUTc\nACs1R3d5z53CNWTqXgJvWbpGmakh7YXtC62k9c0Q2t6IiswjUl4JtlghRYtBz/bv\nKvUVkU5v1Ni988bdX2dz+hJKx6onPi/0PHoaYWkvG+r6B+Tvz4xPk0D3OA7rF+/B\nx8VRQ46BWPHDFUjuLOQSBDgUBh+Tt2a2d8QKzq3aNg+3IxpTHcOgR0K5VP3ql89w\n/iQA7ej5Ksk0FjJH6VXZAPctOGFWVvPrbr5hjnQqYN6GRZtJJb7uaWAk3ngstB8=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 2A4A698325A1B220464EF009B01892268B25F84F 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAe8Bi0/yZRroYwAAAAAB7zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzMVoXDTI1MDIwNjIxMzAzMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yQTRBNjk4MzI1QTFCMjIwNDY0RUYwMDlCMDE4OTIyNjhCMjVG\nODRGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsWjmHwGFb3JEdf5e\n1+Ut2CsavMC92HZz4dqUuUs+QaYTDo+USEnslmw5xOhRaH6WdHOTS1uXXLBLP0Xx\n1clWjAqvvPxQlNb3a2rny32lF2bXZaagEJhw5x7jXPrNt1lfC7qZAsVN8qmAstA8\nrG+K1Nv13bQNvLUcnxS7DqOVhv8B0rR+mMcnNPESFEtAmNg2tZPbTbLOGt1Trf+V\n9sVAmVtOJJZspgJtNarQiCoIzeDJ2q6vTOr3Vp2q2mtvAEHRxNUgO2CWjTmFrMKd\nitNlz8P58IL4+1fmdDkcHf0vKcEWjPMwaptoWBwy6jP4OEdwXn9yBRZORfoggjnk\n0sm/VUTW1WVEOjzaMm6bvPx7n2Ntv7Vbs2fGuX6rkFIqkEQFYzfHf6emFofg62Dw\nGAVMYRqfH7IOy7n0ksnngKLDyKASpp2mjEb16FwjVD3UGlYbBbFGZ1Tgw8xZluYu\nXtIYNXqxdbrI9h1ojmJf3CHRL2J7ie4M7m4Qxr+RvjhFQE2s3WXjiFNjp73wbJjX\nmijZAlC4p/Q7mvo99JYpWndpo9FvgpcdwtMzFpni4B5U5HGM37sXIyH30J3GSjHe\nMfoboP70OgiW8Nel/5IMwhCIQ4sOodhwo5TJ/04k6Pzv41CxxKkCEISv7Ym/B85T\nHRi9jjn4Qdnyn4D+I0pIMVocJMMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFC3woPGoInsQJj97\ntuKiY3i8MoSNMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAXDYiZ0dXxfHb7VxWEzF2XKGC2zd+F2RvvDDvO4m+uhXg\nk7TI2XLgmo92slFhXzhx/ioRig6g3MyWwaF1VsKvt3F+H9VtYh+9E0SXhQFzilZb\nF5zU5UZELj3gUQgJtLZPXUtnJGLQAI2lWLzq1IIiuLXngdQCqnR8skUaFeoUWF8K\nAVoq8VI+PnHhq/3SDjUm4BQhQEDpUItSITDpRhMtcZt486e6i62BokGqlx+vD8CA\nOQ1yxs2z+TF8+OW3LmpjnWaP0fxXca+xid0WqXs7Y4DZ1Sk6EOEw2CoIOnHL/6Wp\nKDtr2qXRjjytEaaVM4RafSYmN1ssrCYtF/0yZ/+iHr69fjbVF/8b+fILQ2mTU4io\nZV68IWPSuj85NXZ1e+EmO/U9GWSjXSAQAOUEEpU+v3m2yqjKDFSJRUtPYUO0rpEX\nUzJ7ps6fpoE24PpVscAtBa+PaCnCl//6wXadvf1KW7mQIMYbsuvWOhddcwwm1Dnq\nHmTIlGfqlCExz+7TVssxvLfBF3In/BSgPCJLKh5KiOeZHcV2ixXDbrPS1hxUVdYF\nVfaJDGWBlmss0mIhkcNGYUE1wtvyp+6h3DOrvQYgz4BH3BAdrWLc3dRBP+lzvrNk\nAp2xxqKrInSyP83TlBjAAxRvy5Uk22hcEDgsvrJZPRA8KwfonHabctCFUI4qIdE=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 2AD70EB90962C541A55E2D15B85BFAD286154F0D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAb7AhPYiZ/Sl8AAAAAABvjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkwOVoXDTI1MDEzMDE5MDkwOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yQUQ3MEVCOTA5NjJDNTQxQTU1RTJEMTVCODVCRkFEMjg2MTU0\nRjBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkH3VtXXJAfsfy4Kn\nBpqw7d1E+ORM1s6RpswLQOQDB6W2h1b+8/btf8tOG2NttI6kQ5Cp9GPV7a4fupFZ\n32VvuJs+mdlr0XAbx6NeCSTf6jWekPJ4odzMESAnYhxkybOiJjaeYi+3F5TlNtVt\n+d4+hVnE1Wx30DeFAgViptK3JlpEB7qZFm4PgM+s5ej57YjYBGMRkNQ36JDfIOve\n9jQGxs9Nk0WcWRUQhou4ptUdwGn9EHuy2Lr6FrJb5fMv0Y/hFudhYMN3bhxp3mUd\nBgGSEJByFOyN8vdMt9jxyCxVFcV23MsRjV2vLdxZSILAEC6zVQqVF8YAeiHozw3E\nDaQ/tuQZJAVsyZ6WNmqzavAv35KxTXVTv18w/K6D2cQ5RJPWWoKizfOA8t22BZ2Q\npGKyZcP70nbu/m6nHjtYPl49beFyTpfZNFe5DAJs2wLWreEVqCaIQHvF5Sr2X5nX\nsXkO72Ag/AG/W0ynPoR7lLLuhhtKtwfOhDZo7bANY1hK2hld6nAVvtAG+0RNPMkW\niMZB+2RkVV/fnLjsJEK1Uh+INZUMSv7AE1A0ezDmAj3YR3nM8jOYeA+7TeVfCfH1\nCZCYsa23R85OxjNir1dqadpvWPVoZfQ7WvmVlO9I4oBp2S33ZPZI2sB3d1LL+pK3\nS6NNLQML+p/hGe/HpHtgbhaoIIECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN9+mefVLWPIp/bD\nTqFmfUfWGOopMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAYyjDy2JmRpiu65GuMp+27FpbTg0nDemP03tSNEbwRiB+\ntPkUMgG7XKXbJp2AP+3eZ7QUZ1CwZe96v9aNXu7QzzT2D7Ah7iUtoGN9DQxb9R3P\nGk5rctmd3cET66jt5seHSzBaVyQrz5WMFPeIIlnS207XL8FAQAbG5jnJu9qb13pw\neiUfVXxOyF+acCQFmjwz5uRqO2yXVexWsr/zus77NbL9pw1LrOXU4OA/5GZyaTwL\ng1KqPz38YRCLzyitUELvYRN6+1h1pkRW2/qHRWywxiF4mgiSr5UmtghtdF/EzfWW\nqmH4f+e9Bveeb/5WNvx1kqYeWbH05rnBuZPUd924ViZY1w6vOeBTjTDsPUWkXzzD\nYl40/Bvr6+vPeZgULLOuTw37wJy8Evbdq0sHO8XeVp+f+h+omXifG2YzIpiddM4z\nU0yyzuH+ENFLBVn90dkVO1C6pJiEpx6zO5cp6lUgRchBMV1qJ4uDyuNDMUfy5rSi\nXyFNI6DX0Xb+eFwPAYcsKkqvSAjRrxmDY7bPk72hPl+9I6fP1/PLPmQpyDErFh00\n6HsCNB3nNRfW2/T1ZHe517X6UAlXkyUeNFA8n0Mf9J31WTbJqXq/q1KJDQnQZTlP\nuT9Yp0gXIuuCbwmAU+S5ETjGrtaDSlj85YuBWXAhqyXyvxbpCBr2bRbkbwdotUw=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 3735DDC8E300B817AEBE03503A92EDDFDF1AC71A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcKqOtLNsmiUsgAAAAABwjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxMloXDTI1MDEzMDE5MDkxMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0zNzM1RERDOEUzMDBCODE3QUVCRTAzNTAzQTkyRURERkRGMUFD\nNzFBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzbCD7k7V8uEQSjE/\nGDSwQxluR64FtTctk8OeWK9NNjZWiAxwRItm0e+ZuStJ4sloadVzLJwd8TJQ6iRp\npCAOvx5nPGTMBe5cmMTis6qjqe+w8s/dKIR0xig7pg9i1SaRNeZ90t7XoEebo9L+\nuUP0DH0/wc1s00dw1X9XpKp7M9pUpfAZKfWiGFoAKkJvevpTbqCaiZ2yJFqs+Q6w\nf4Uskt4bFQ+dpr2y/luevttOmoohNBsK4Zw7Bv0zEc4IhWlhWb9S85pMxu14i7oS\nC5Z8wLya2gp33Zf/zuvN8+JUYh03gEb5AJVq9LbjxYQMADJAptCSHRJWJnI6nPrz\nux0nURCQhWBGNAWyoeD6uaXj0WQdivv+GuCJefv3FXkeviPr8B+wRGTaeEmb0LuA\n1TnbLnJrKHoFcaXlKZ93Org/U7h7NlIF01M8mdqt2JvnINS0IstYGOsRXMJ4Kfgu\nJVAMX/CW/c0iNvdZJvJZy+fiVLwbHXVLwJZLpgLUeIM028h8kii7jAL3hrRes9ap\numTTeZPjH/kHcD2ydPzcbQQmoGxKN78vlV52KbHIFriRxoGAdiNmzfDngonmQS2I\nI459btnc05jm/AlDg4VKfLG3A22JkwM/jdHivUWY58QY6IVC3OF9+cU66H47kf2J\nto/uXf4xILITs9V48rr2TvUJSzUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPJJWGLyKlVsPfA+\noOl0w8+49km0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjykhN1exY7MjB3DvUhevnthSlYNAwHVw4r47m6Z/7USt\n/UecCoqNe7B65eJrcSQMIgCXOCRPpryqry49PJ5eqImZalwNZYdT+0YyatbM/URP\n88ksJ38asUIZDnGxQkDRp3VeBWCTnyv6VsELOqj5b3v8immrU1wwt/v9qe4ti5tM\nn3rTSmwtMQxwpxezJkJQMNWJq/XgstiJINpLfKEjiN/MPr/8B5msqWUEOy1uyxqO\npnYMJ8TwIO/3UNEEGeGNcl2mwIhuy7MLpeLVcFgETXQ/0BP/cKAfR5cqKFuxC4Jp\nB4E4ZXQuxL6pvcYmtySi0pwjcLd4ZK7efvPyGATfd5r1GX3cU6He7soHc8nycMeb\nRMOamQUlPOwdeqj9J/ifrG2EBl45rrzK9z0/M1kikBmDdWRnduT1ez2ze5c3xmnB\netPdoi3abDLc+XczYNUIqVDRelSqpOmJfARIqKiZkXokUvWh0TywHm0JjOE/25mt\nXJopQ3AHWnK9Y+3LdGUxsOiBazzjOjOkdP1LDAUMb1QZAvhHNFRQhLbcs1eihLWr\n2xiONaVU6J6B4ao+vqyAnB2t2zBMIzlm8G7olRUkQaEDRT4iEEBgU46EzvO1zLFd\nQTXl4gHveBnbaFJlvxdIsUhdWcsMim9452vid3a0XoCJUpIIrSZcUPTVDEdBtds=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 3FE3E3E0383ECB899118188F4E2B9644DBD39A3C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiKPhhZJa0zfxQAAAAACIjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyNFoXDTI1MDIxNDIxNDMyNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0zRkUzRTNFMDM4M0VDQjg5OTExODE4OEY0RTJCOTY0NERCRDM5\nQTNDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxgIOkt6d4FznVKJC\n5mMM0jvYRmp3flwZ3CeGxIFZW155LoQIafjEkjj4QEZcYSdUi7uHFSr6y+UcLYaK\n+RLLHl6ItvDbNhO/ycj8Lb4tP1UnSITZrOyGmzwlRENDk/0u6lC8AYdXQtqvcYWd\nzqdR+8tU+97B3zuyDjXIBso3J+7x9UGMyrLV5jsb128sHsUR2coH6ojG5KbiErR6\nRoMaCHdstqxcgpsL0dxSBQYBxDgVWHjxjoTrJEL5yDffnZIqYoYdgZ//+K23WBC3\niyhnXwR4VwqaAo0aX09D6xX79ZIrM57uEVobbHi0gqRQFT1NUdpkxBe4VIUb7CS3\nqpW7DEEeZ2L/8fMg7rTssodO2diCJSYkYh29Huc2Efn1vYGgPraNHghHXG8fG/Gs\nWySSqqbj3BKmG3UKl9t8o5qyzVs8WZMZ0WCzm/gGDZCYfGKYvCF3S+5PuqxQS7mo\nPl8fO0VBLeMNKAOWJxEbSiGo0gq5GwEEm/yvZFZEQwZr+ElWh3fpnDtXkYaCz7f/\nyIQ0ThH9O29SCqTScz1NXHfRodtdU6dob326T8jy51Ol6u12NFCKGJDFtUWKYC5h\nrb6XKQpuvLOpDkEaH0xcdw1H8rA5ZwsdPWUZUPHdAt5aZc89SXEWrJGL5FBWCN0X\n6FIF0xgE5O6s2LXWhdqMU+FmdckCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHMqhk9V77llaJPC\nXtLMVasy6XoeMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAe/3SKmjnilM/uMmTHbsyV3+V336IxfG75kWpvVMQAGGl\nna6ziab0XwhaKslwtFWqRsjAvfsoVpK28oLO2lRm8/efCmCBZcP5vOFwuyMoOiYl\nSIUJhFT84QvPGv97qAjZSpZXe1szgIehBt4Zmfj0EYWmRIvgJmqadPNpErzsc7Oa\nNLuFGtWxygH1irxUlc4Txo/MGiDHSUTSDDqrYMPeodrmld2QFRxcilx66+4EOpeh\nejqFiRWsC5CedmA/s2+M2fpyXRzeBBguU+mSORyhdoAVScLY0uXLHqq0Ci3bsm1v\nH0DFFBXr/rByfjvf/7J6YrjSH60SJqckMyr7PPVzi9TFMttYj0p4TS9dercFi9dN\n4TQJW7Fkdg4vdrMMdPS6ZZkQbb8hLpwPQg1i0vRmvD35RwSJEZ1WdUA/bZNG3IaR\nmVmWb9vhUbRw+fF9PDrC806ED/hHQScypVzbDwg2CMqSZXlZXyaxKk9TPIbVFQGt\nPaEDWMl1Dr83fbJp0DPnv9Gcx+ADkTqQAOw+oRoVeIC7nA6/qkgSjuuRsT6hYMac\nIwAFHMC4FcjOM01Ky1TTjrEzK6+Ln5pIE6NeZOuNt8PaWhbLgokvaf9xCH/pKraq\nyTuO6X2e+YdFP/D/pzG/rSNSQIpP9/yvSujZId9FXf+rM5aEHBMVWWKme+9IpDM=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 4AC90CEE68D4B5729DE4357D2C475884F409B7A6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfDHblfnn3wwdQAAAAAB8DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzMloXDTI1MDIwNjIxMzAzMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC00QUM5MENFRTY4RDRCNTcyOURFNDM1N0QyQzQ3NTg4NEY0MDlC\nN0E2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx42cPZMGWhs/vKzv\nlqRuwRgEOWXapEL69NunPCIx6u02JIl6yVWHRx+dL3kN4HmMZnG6Dk+I9lUfTtPa\nsbLQIp4CGM2/ai+TfxSkiGOe3z/34EFZF52O4uDPvUO2t7R0m+7Vw8i7lIaZBpQT\n0R9SFK1M0VGoF+ehXOp6rXk47EhxLJb/wphBEURWR/qK1aPcTzYz4oSmpHPLq2ow\n0QnDRwMfxLf+v3Dei54xq9oOMqSy0K8WNiI4qpkR7/rfy31jAnuCHnGcaBR14WQe\n0j4eXjT/HoxFlU40ks73UmklFjzaAHEshkNTPpj4cxva1jUZAqvZsMQ9CeuO4JSK\nsK80A/qgJS838LqMnIVp0tsW145tE3n8QPhsRao5jl6A19c9mrzv/5gPGEMrq7Ba\nBbOdhg+srm0/c/UZAgw4ybLgnhH2YN9xnglN2cSj7BbJ2rcfuwDK2Na8yaWKrmOw\nOI0USsSQsuUdFveJXgVY14e0Po1wzQ7wsbMBPiGW3HhCLfPIk3LpVQ2vIigVncxW\nQHoMrwEbgzK/G0Ud4vfZl2UQ/MqXtjnwcogdTXPBCNSOIJs2NyhAPjIBuFkT7/Mb\np5XMbNsicKujF2ig81Uyk3U6VECXKjC4Pa5n4RQ9xPDMW16IbS3q94UtQnOq6Ajh\nWV37tL9wCVY0ynvZO2HaAUc7KTsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFC4y0aYbBM3BfOe1\n7hR4RVXjQkMAMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkxc5kX1frvGH29mn8CJPrAz8h9pZ7Otz6ya8AxxNaqE/\ncvLKvuUCaP145P60dJ8jL87KWS6hstu0hmME6mLwN8KSj1rkmHyHMJUmXIHw0efO\nSNuanJ80ulDR9O57qG3Hh1bx/scA94CzTLkm5sDU0OqreLEvqboO5VqOHMt55TiM\njZ2EUaeIpX5bV3WqDy+nDh3eKOvt4d00KfQ7LST45tC59KDVtG46z+Mt6VwKKP1F\nw7A+t51XMCKE1lYc98MdT6RySSRHLIr8Qm1YArcZo9pfZbt9AygoeK5QM9NPZDOm\n31O1eCsn0I1e3L+ZLBimB7iPL18GEORDai714qlf40yTvVskPlmZPIRHUVq5j/kQ\na2+0XCbcnMo/88qRiQ/QnssBezkI56uiGucasNn8W2vHnqpDmTGG/KZc5m55e2ii\nEei3AmgTUgDuuO4J5BeKCaMfziYEcEX9bZOs2zT5ZzHR0TbCSxFQ1AUbivNwMXAo\nYugMHpYk2Bi8pbhkM0TEPC3+/9UfVKsvbBL0nw6nJjE1KSWWZsJa8apUEQwlt2YG\nT1TBeobtNg8tQwYu3SvT3zH0TNNxbHS2iLt1UBCmYqxOACvg5DzPqR65yxb0QPp1\nxwHllmljiIBVIclGvqOyV/bPlkxoZ/lDsSU2aYS10JGnKvcOiqLRfjh3ygkiUE0=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 6DED70AB841AE9C22A03647FC8D1482188D3DAE3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAb//DDsdTa3NRAAAAAABvzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxMFoXDTI1MDEzMDE5MDkxMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC02REVENzBBQjg0MUFFOUMyMkEwMzY0N0ZDOEQxNDgyMTg4RDNE\nQUUzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlV4z+sVgWQQMKZFn\nj3naJ5Fb7ZzU3JdsYVpJC4TFGzP4G3etr/vqguPwmxAUMD7B32lx54h/2dQVWsAK\nHxwKDlZ9ZhKLykE3pOcyf8vTmCn5laOk6+0J639m2+D/rlmPPwgBTu9GmQ+7yRbz\nmtXgSfOyYcV85a+HlJsD4OgAlsWgMIihTdDNIG2rtvxIzQynqr5ly56Tu2mK+EpW\nFcWgIZWfXEXELd4H8Ej9M4Nb/Z5hURAljikVfzz77Z2RkvYV9BTxRqEV4VkNwAod\nhYIVJwmLjct5+XeFHB4msn56iSrvedhPkyoZnYaGgO1KOyeayuePFlz5+U2JedNZ\nbfoUev+6RBIzdaYMsiAX6oRLSKb/f7S5W1UIxswkgTu42ZVRmVdVOURbmu69mSPe\nQG6xa+TebRne5/KzYsnMXaXB2h2A1LBBZ3Ap+CFo8M3HRPGl03ylFThgrQwnbFKP\nlBdGdeyaPmQiVFtfiIrOh5DtESWE6luNN07nTBF+cRWXhjh0z84zpXeAyjZVKcCw\npSYu/pgavJlrgMiVzauBCUz6QJTYGnJbTR96TQVFbeL8mbC41GqW/Mczp8RcQfTx\nQgra1e3N9Ij84sxG8l1FlOUzxSN6PwvsiHBoQEe+PUTOJQjSuKu733BhGdJ1QerP\n6UvSP1by2vBIp2Y05NS1RFJR58cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNWmt/QqsR0JLf7i\nVaPs5B8+3gdwMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnViyRMRm49cWSrTtdIc3+62u2SXvB3T9mFqt2OMoTQQf\nYegEkOn2C2O/RoOBPbYwlRAf+6pGxkZi/gApwzzpjcU9T2zUudgPLCFBreB6hHKM\nJOyopCrrg4H5cK1kPVBFqRdFARJXPPHt4dUKbJAWR0qrafVfu1bq6HlNxseK5sFS\n43ekcn1t0UPnGa7EpflI6MamFzh5Wv0LkrzxCUrvKHfUsOaGIrIBbu8Vci8tklcR\nV7NO69053vPpfYCZqHrlQ4J5W35He9BVAS/ubHQyECRWfidkz40y/boYewyI2Azj\nHscRA5Xo+6+rmFtNuOJd0+IHVgK0hceZNQwerzuylxODO744xEeQs+sga4dKdtDg\ncbqnxsP4RF2MVZWEJ5TvUDsxc3O0KjpfblcZGL3fky2nNFyAMTy6fZg0KD/OYFf8\nsa61Tij3AsM4RW/QL0sI+1AyViv7P6CuwpH5BrIkSIafBBcdvtx5tb9YUOV5lm8N\nZQHUfaBr/obh81OnGJOe5MSpZq2E51S4BL/NK/ZAojXfmNTjxFR9hJVg9K/MBI0X\n2qntxAAae8rs3wNOZqceVXXdhKZSU1V1rI/ydMzh5y15FzpXV0BlzSwfHrpGof2d\n7Kv3TCR58wFWuXgjP3v7M4fgEomP7Re7RYm9EdtcJfR+F65OYaV7GMfQ9M4mXq4=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 73ABB81A0225456337F02B25BD39E658B90F00FF 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiZAzVGio/SVEAAAAAACJjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyN1oXDTI1MDIxNDIxNDMyN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC03M0FCQjgxQTAyMjU0NTYzMzdGMDJCMjVCRDM5RTY1OEI5MEYw\nMEZGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtMKHEzdnQR64AkpD\n1+4k5LNKWbZsN4pXzGQ2SlFAuiVllsKD6N/6H8Zb4Y3VjYP6DgNkERorabFvs5tN\neAARpUSP7owB7HcThANikbEJQSwheEP/auQyKYvn6/kx7sNlv4wA2j73Zu1x1uH5\nbdkrTJeUzTXQtqEG4d/Jmqdu8EZ3hAaaprZE52p4EllWthzC0X6wClC0ZcfOaRXg\nO/dIUI2ZKahDCxr1UJ0CdY+VS0PcVcKo+eVn08ajeSA6h/cAcW32ecTwxulrALMv\noHEuzb8xcvxMR8orzNA91r2hg9ejDO4raC0yd3u/bhhEQUwYRtzbMxkKGleH8Yy2\ngrrsX/U1NXP0B7PvTJVZcZbjG75nhQMB7kz/PvZ7UcQD3BdADBhcXE+MpoNIFSEE\nsm1PdEZTj0zVV2RU7DuKRXaPmRiTVigY9qVNBOPVrcxAfpE6lM/3WQnA5m7tTKqe\n/lybni96yIIKvzZfj3VmmolOXdwLqiRhzlN+IIziwwLvrKq1faPWXDOoxCLovhdc\nF7QhjXKVm0PWwXHzF8mSowALXHH3wkl4uEYeKi++EkoIGDVs1UFGyC08SiWw4/Nm\nA/7OyxisIYgx/2cMlyl7omrE5h0JzjskdNezCF1cOqbBYXm0N9vxWJhe1dTqbEyV\nh4q8UQdoFaPC0RAaC8T14StyjzMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEZYTfQGVgmhij8c\nXfQNbA8pVAEwMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJdXZbZwoSoKcvYHTOWjigELIFUFyeGxCgFan94TLBFvi\niQGDbTxGWE8CIxPJHuvLFbAqQV/58PvDsFGMjWBjrlRFURmVHC4mfq/4WRr1REv/\nv10IApUiA9t8lvqjOzIKpa9QGEBzP/KPcx6DkpnhR1PDfuSjNMNg4/7iTTXD2IIK\n9rTJJk/2ASViJzmRnWfYkzgsGIlTumaKxd643eLKEzCCBcmJfr/BRupJbfLvH6IQ\nXTNnY8NXj184iVw9us7EwSDOTWOA5GqBel8TqMgVAkm4OhhmS1Oah030NOFMMVCi\nyo/w+Zvo2jqkkUNXHJA6HLF6MaRyeIlqdDCQDK8N/2PUaPqCpEGjhzvgN5Imm9PU\nUhsycRdjiLmistzDq2VxxqyQtZGtBfC3FM8VE0OZfP25Uhnd57YBBzO7vliQdwr6\noFkAGJFTjTmhAnY4oaeZybmU7fxBF7ZNJOATN0KfUtP0Fj649d38TlMtr++jBIkc\nWTT+oPR4Pii+8L41sdqxuC9qeBdol3SQ3hNd1GK07VutTmu+2eWS3cpByoeTnRYI\ngmGE9CsJbAXsslgd1vodNvQFgbXzxAJZo5p0YjIx5UfQCYjbnzmxp9T9Qv2qbcbI\nMrg2mqzef6g9glnKl3eyjXHe3VyC8DhJPaN9SG8fXTTWVZy8/uMsFHsqqhoqhkE=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 8E1F3B1E129D4ADED7631F5B4A2B75828AF28128 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfI5wHyFXFnLvgAAAAAB8jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzM1oXDTI1MDIwNjIxMzAzM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC04RTFGM0IxRTEyOUQ0QURFRDc2MzFGNUI0QTJCNzU4MjhBRjI4\nMTI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzOJjkcakOG69w7S\n8bFoXlQi2OF73uimgSUwl5skAIfyWZYkNlq4hBIyusv0jf5ivPmjc3GhI4tBi1cm\nFvZqXFV+88lZbd+2NoyPeOrqHUYUJCbzU3pyaxWQ84zv8QFQ3vjpc5+N2USWj6O9\n2vxno+xTrSmUiBP/G+duQdMd8MDubvpaO/Hk7MFz9+zK3K4/ogOruLqBSOzeoCav\nK1msngTNr7XIPFJqJefvZEv4a45QlR+oqWnNm4rGXu2/z0Q6H1k4JIIxxIN+MT7e\nRalG6uDQ0OulEaBI3u1+ILWcSh91OzfnxA++K23nixSFZQjdL79UTaVJI6/E/w/m\ncpAIwjil9yCF0+EJ46RGixRMhrTLjAkpD15IXazP09x8dVJpvoqHH+lPyBz/ogq1\nSxZ0IE6R+neuYe9w0sG+DP6eB4Hr5Q1Zjm4vIWfRo1bnXmlfVxe68PnSPvcidx0z\n7ruRGoYN/zp7IQge+JR8yhDxV6YnWrdwpRW7fG5x0dpaWAmny3U33avG6exCH1gw\nktgHcbR5ia54NkwjQ5uo9RFe7pMzttUB/dG8dGMnnCaTu4V+ABguLakeUEZf4Khh\nQYDSOFgajb9vKZL0TYUSYEJ8Beut70rM+9ZX71FKmdemTqFdr5t2n0Hel8LhotxV\nG8DYdWyd9QkKzcVuF3z6vK3utY0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAXRSYQZHiDZBPfW\nVmlBSDOHb7IoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFKCJUKArEkEMoMKt3t+dxvAtWyNnP8aK5i3uw8VwUd70\naACp2fmiD1lvYiYASwp3YS41ZsH12sUPPgy9sGNdbxtUNCXZbkyhLw1frI3c2VwY\nofPP1ueAbBE9cHAA9un817nk9CHLjHNKUbRb8KWMdCmBQgOk25Ck3OttRk/kJ1LV\nerSaPEEB+V7XFJ1lo2/cLIW6+9vWMXp3nF/Ucy82Cga9QgCbQkgns4rxFeDg8/HS\noodYt8Hoa2LMrn1Dae09tqLv3CgQF7ORM3hmosUKbDJpV13Aqzz8fIo+Dx6GJyYm\nmg+qM1sHRg+LIgaD7d7qiHmAuKR7hiuqehCN7wogbLAVhIZ5Hat2lohO4mfn+JAj\nu0Q56XgZsyh7+3fPtoXRTmDIc3Sg2d3AecO5fff9taH42WiGfDLi0/cy+QyZv2wt\nLdKp1D/tyU6ckK6rK1aX7oYtaOEWcG6Ce2epmYEETimapOweB706iYCCRFOZwsox\ncnxyfWY6QDLmOjx8lY3Yi/ECmjnBqBSq++vkN2dOF3MnzDcRpkmIWp/P1boMt+Oh\nR+2mJM6Vz+rvPwmGpXhAmYJjMT/XzWM4enJzD4SqIt3UYfKAZUr0KwRbrDtYwAlF\n8fbXXZRW1/o2JiznBuo+j++lEbOwC+Cy1HoppiTikR9nGmBsz3k/ce0SrdrZk8E=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 9532153BAA9D74482D275B1A3E475309D3CFE507 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiyFiU/kZcMBiQAAAAACLDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzMloXDTI1MDIxNDIxNDMzMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC05NTMyMTUzQkFBOUQ3NDQ4MkQyNzVCMUEzRTQ3NTMwOUQzQ0ZF\nNTA3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnACWioM+WxkcsHEZ\nUdWz18Zv6LAtuJ/OkMxAweNT9SJkjTv69PHvGIcpgPBXww61+0fBMRSK86D0N1WF\nMpMPXz/KIB+smxdkou8R1Ntfb0377NHExwPc/S88P9voddpzebAEyp/CfXGXLG4u\nP3eiPwfbx69Ljxl2sEzLzbyPopNelFW1PJrwDOk+cZQZ4chCuvYReEFALcfPLokB\n/ZwJjDBR87xIL3TeZH5lpRazRFGCbEYIjBvh6Ml56EQ81dsr3ZXIZI4OETWGDBds\n6GVwiAhErx/t9gx8bzlZa2rdSaBDZykEnzCZA9+TOzpmHW2TQJFoTDEOI8BSnykZ\n9oUXLDJPMIKPv6Dz54RROyq8/DF385KDPM0FO8fV7Tc0hp+WQ6KnPsmYzwYld4LY\nrbBvQGCQOH1gphR9WkmviFKBuG5DHwlIljNCrxXAEvShYw5aFHmVO706k/nRrM+v\ntwwrgNuP9wgYIPduSmYF3pHX/KWZWfQWiJGxdj4On6WUgEY7vHjYNzi7fW2Y6rKr\n9dQ4M82DIkuNGRCjIwJMWvMxtKrNpopFF+MtDRxP4L4Z//U5GB1ddj7Pe4n4ReM+\n+Me3yvqZrKlgzebkEvZYdKewn+lAF2PU/xajVU4s+gtlR64RbHvg/kbdwd+g5npI\n9f8IA3Xxkv6lREYLv432QNbpkP8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKlyh/aJYynf1Nr4\nAtuBOqMMkIJMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAB1iQy9kRB5jjC9dRHNkmCBp3+JE/iGRyGwxAKURkgal/\n15f4yhFEhe53gvmypZimsyMxjX/UKxQavHI/WNivd9nxv5+fASvDxJpHcUWJePkP\nZxXleaflthwKNt3qg6cylGB9d9srHR8vPpZ+yMix4h5oP/OoMOQwoPhMwAdpmRve\n+gQwgjiiZW9q/dTyfOD1zpHEToblP3jx9fSQUGav1M42wsT3ooxwbRYKJosh1Txt\nbqTRlck9zSEHClEs/1iL8KnLAAqkRpHiIX+RKpJHTnhSBM8GYA1QAFCteLRDiaxW\nmVTUZuflpEbwKhhWJ0y7HWdAerIRKgdHlj/w0jrMttDa4jwO8tu5jrpYIj2bvmI7\nGbfGSo84F1t/+DChJYi0lGTO68EANk7vPdTxHHxo1XXq7B2JOfyNPaHrTRS8nnSr\nNQnMhMaIpSyC9lLsqWSMpiCjwc5tvj5TxJE1BB89SrP7wEdLHhizZ/Q/YnKheSrm\n0m358EDiG9VI9msoiO/RcILZD7AVpH9ilH8j6QDdyl5ev9MsILb+ap+LLobHwcH9\nTIzMIaRLdYfhNWLcSyfp2bc0wxedmV6P3x7z80srv89Ri/52xbt7KLFl9jpKABr0\ngniDGH3e2bncbgqLaTuGUOhXvXdlH6bl1/03EH9GAWQwalGrJIz49Ng18wE7GDQ=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 97E5D1CD8B0497C04B4655A869C8F30EFA89388D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAkvDCLzrOQVfXAAAAAACSzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyOVoXDTI1MDMyMTIwMjkyOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC05N0U1RDFDRDhCMDQ5N0MwNEI0NjU1QTg2OUM4RjMwRUZBODkz\nODhEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsE34NWb/TMEUwcK1\nY5nlkXLuMkXzU58wAgOBD5HAOx/CjGS6n1hQVQzeovEHl/s43KhhQ8YdHqYx113j\nvnstmF/NFjAxH/A1LMPKm4C5ntEqHHDwCfzaZligoO4qGmszNersyD6Ap9LvAoFo\nmGZl8UZoYSBIezBw4Ohvz5shBwti7kA6h1SyWDyjU+PIoz3xbuSDbyU8iNqoA/CK\noaPy40hESBFg744HVYGBc1AH7tl4jOf0jehynOQr/sKkFAmk7vD3UePJAeyi2+Jb\nbXLUfoHfC2z5hiubXZAoofgiT+sYj6Km1Bf9sYD32Gh/2FN1kpwudQyzxy5x0LLr\nQmAtbr5QE/6XepmF8J2KXZKrJTct5Fwp0GlRrAmWyC+w158DersQPA5YOeMHNmYT\nC71Rvt3aJ8+WKwojvuLBnk2icOfYL6vxseZlKphditT9gTx/tCFXPBtrT0fGpRUr\n4W2dwZj+paxTfefXyWtdbVIm6VLqvInC56dh87YhkTiFq1LW/4VE+U0DksKkoCoF\nBQo5jp45XEJeUg5zUzBbYm2harIRwrYHWyg8p92ZwWwvEwGbGHnBZriO+G7jS4km\nvVSq4/bB6zCCJ5/6LucfN7K0jmARmg5RcCPochXgZCXE/bKwSxtqjQAZValtcRiI\nG4wDB8s/FC6A7A/rcO8SF/ZtgkkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDDkR0nTqAevTfRN\neIyN7ng4T6C0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARvDIm1h4PYOTvrzgXoQ9taRWNWLKGvBo6GU9ou1GkNTn\neez4S97BIMDzIw9DOJOSJZVZE/YB5bRdcc8DOoofmRhHeQ9cf2bghvTc2fElbSYr\nNlscxs/w7hk4H/7kV3/5zQ4XdHijKQAND8D786PPH5Ad0eFBgf+tkf1Ak5+/CqlC\nusHQSeWQHe4M1p7wtuIh8U1o4Lk7eqwErh/fgmFtszKep0gBC2D+XmYCYWt+A5jE\n5MoF+umKdmrCHv4/JN7sKOrf9bUPCCK8fr+FhPloi1hOHbI7cliSCZinl+vq6ZHn\nbd94GlMNMNnmBPgObHq4ZCGwCzWGxEua4nLpkzYroEluMldGc9jcESjyw5vAmKs1\nC4jXNjx2xx8j1FK5w0brvCSKjlP7DkyP2dCNhWFUFxtVS2dlOFifK78Kt17gS6S7\nJlpcwn+jLTCc7E7ErsFKS26VKGccVvqZ1+iu14gPzdQk6PPxvPYhTxEHmQkgWe82\nsw41WxC6YLi4u2p2DcUR6Ad26lfwi63hOOQ4wTYWwzjdYgKGD3g5keoVYC/i5Uv+\nCmNiOLLx1Zw6kiZXAklD++zPn1E5JQXGrmDqnuwFAX6mNbaIjrhDlSy2Xg7TVGZJ\nqC70uNamLksg6umnzTu4b/oCUg6flo+pqfnWW0q089e4soO8VGGWr6LIuuORqnI=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 9A643BC48007E0824798430036B658419B70C077\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWBHOZt2t7ZOqgAAAAABYDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUyOVoXDTI5MTIzMTIwMjUyOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD\nMDc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArBAnstCNkbE5mx1B\n20b5RvBAYOOtNWtFMHFwB9Iiz96MArb17VEvaMYubPn2hC4WIs0aJua/ODjFsapJ\n304XihPICKvBLgR5yarUJm5zO63926GF11Yu0GyhjXbhom9WUADrgV6Sq0xS7AKE\nebxsGC5k8FRisPnNS/jBvf6VEhs5KMGfOahfORUi7+e2AaXt2MxV2rP2p1eFFumJ\nRaNA1mEJ6K1NvoobDK8FdXHvROBT2yU8H9ZNKlgVCdZWFa0icpMOnJZAU8SAPnnb\nWnS0H9fxOTvdlj8pe25YnGZRvQ8PwxRlkCU3TinrMcFygMzomgoVMQA3fKCVBkbj\nG7lkdwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUjFOc94mE1Zi5D/sCmARRevS0VuowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA98OIE\nYvBUYVn5fhulFNrfbwwsctC3qjLBP/tRbeKPkZHmGyTcSoiLZlohpHeDn1nkvHH/\ngquGZpipste1lalVsf+HhBUI64jN4ySUApxIk3eFYtCsjQorQ0zupWzARDI/Pzrl\nVNx5pzpzbSgpI11qCYCxWUoRSV4YiazZmzVTIIWK2n50dJ8l2GBuih7laN3kihpA\nCIsmgG5iLmX+4tvRC76gUfhBvhkclmsGVf83DmVgbw/DRc/9Q8rbyNro0qne6hXQ\nkHS/tFne/H+z833Ypv4od6nCl7qFRFRL4SHr7lF7DWP6bR8nlifcEaoDxE5xp9Nm\neWBeUkzmZ+BMnfw4WeU6L+/0BSbojS/2YYn3/1xvyZ7RXt5PmUFTK/NivNy/qGqZ\nel2YFRPHif1jn5nq75SvEcGd6OkCMybKXGK6UO/YGDg2cg7J3IAX6i4/G9fJQXkJ\nB5h/wAJFTFG/gQCW/CL1HZ4wzzT2TN/c6mut/fNHWbQvHSHJaImEgVgeuJAHXuW4\nKA0YEDRT1WtrfAXuruY7ZDzwXlu6vM7X9oVTLhbWxQiYCfFw2NWY8vTYWC1osfev\nAUIX1zQ9pPPwGw/DBPuhmkged3TbdvXv+XUMejjUl+4oQYEYuzZwtI7nOpe5lp2i\nREAmAisWY/OKMlC3MIiGzMGKWxUM0jwMPXZzOQ==\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID 9A643BC48007E0824798430036B658419B70C077 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiX+rIyU6r+dKAAAAAACJTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyN1oXDTI1MDIxNDIxNDMyN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD\nMDc3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApLwx+d0ftgNX9qsG\ni6l//XRxlfS4k2V9cQFn8zCBHdj9RT72q+KdXyTojNNTXiPf9hSqpuaP1g7phhj+\npXEpu4m0nDI1mXNno3tPXowFzlbQE2vmPAtpnEBdDHBJbJtiDwS3zgzqZfTuCg1r\neWV1mdomu6+ublinFQipPyhFre4Ocp6XroOgWj/jbL/NI/KHo5+6wVK8Cp/bcgX5\n8h2yjuTsJQBNaeCY9TABrhiGKnwccGiXWj/VxWjLqnlqdR+7n4LjDy84SQ3ybERV\nUOP3lxXCL8s0LvPR/fTD2Fh2GNE9jTpHvpJO2Uq4kFFolfyzHgHZwO5NtZNSU2+d\ncLHkjk6NILsfIsPMxq7fO9ieeuekwWDj4P+Ju0VQDN2AM16mQFo8whMnV0FDqeW6\nV+0D05afu3QEyapKBrE0G6AuX5ahJd1VLhWix+BCFsgqU2+d30nM5raKtAUMwxNI\nNwIUoSP40wmYJS7gN4qTr+O07tiGwJjp19LGxPIFl2HvwBrOQ9mM6tERRpeXHSzN\nXgt3UqyetF2k3KtiZ9Eh9ygaTvxlaNoy2ztr9CJ7uxa8+B6Too7f+grfAUTDev1t\nNPZme6PbuBfK605jwhS5c2wT6GzWlZ2B1Z+SgggVQ/fgwQAw5SbJoPOukib4fU25\nApYvRqTHMoDgvJLMa8VgcY9+iXECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJ7M8BW0UYDDZt+m\nq88vxVPmY3myMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAW5UHTMBNIBMB9EUnmNY7Wa68i8vpyaGGhX5bxsCGhnP9\np2rAfqT9Gydrf6dUXUi42jpUpJSRt0XvgAZD4iS3qmpIc+QJaB09tY02LCT9SVNJ\nEeYpgAAVq3btxqS69NFn6UY/Vw2AygjXqByZQR+a6NforSqlPDeFh5N7tYWGY8gZ\nYPsnZOXVbogHPgsLwD5mMySpgl6oWMUQwPrKkAUSUBuNvRBTSjCpPi1yj3CoZcSq\nUFTINfbK5qVGfw6j3j/JJfHaVDz2Dx1Oe9WNGVupkQm6w8GSpxz9WvyVL1uurzrd\nEOpzVbjaY3KZ5SzpRRRZJmfd5xBWGZgGTk1wDVvVBENw2oEjzUH4W9PPAYUmpi6k\nLw6e2wKiBvYakhekAyClBYaYCC/EUcTC+ijgAEW9vDJ/SUz9HJCxR56r0ZPYoSAt\nnwAeliMzTvEGs/hrGBQ+6cWE/avDrfF0VoppLz8npl0EPZXV2MwkLyC+EdK93frN\ngGRQ/zSVfqDSQrlbOZTv2dXM7LtqrX/HrfX35Hi+zIzzUc4TldPnVdW53eU25IZQ\nLEifGRBa4s5wYGbBmIrKLgELZv0uFRH21RVJPDrZFTY1HZ+3D8gds0/19FClHAU8\nzlGqE9iZMWqBLtoNkPO7PBWAsGDxy/F6biO1nWPRwWUKFJsmmRL26A795KBvtro=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID A4384BEE3966533539CD0A736D1DD2C213538DBE 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcWL4tnoXfjHbwAAAAABxTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxNFoXDTI1MDEzMDE5MDkxNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1BNDM4NEJFRTM5NjY1MzM1MzlDRDBBNzM2RDFERDJDMjEzNTM4\nREJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvnRLTsWlaMDcMxxM\nw4diMNBjrTCDL5Vv37fckhGznnw9eXwlRRfo+jZMHhbUqgPRLgrbTJY6TdUVTKDv\nX/1Sf899sRYnc5c+sDE1NMAAXSpDxKvTIsphWlVrMlRZp0uaMT0aSAAdCG0KotgT\nQ5aWdI71qo1qy0XIGcaIZQ0OucAgQFP8VHoSUPuIKvXxm1SJ2yaUFNBUiv7cqt/W\nDNZVgXdGTu8ooSLsZYE7MOVGZCKOa/HAuITIfydSlnktl29IsTa00C6pRSCyzjXw\no/21+BfDmOsTI5k/K4I/rkPA+T+5Ut8V72b4DSNVIKhLcKmiGhfCnikcMO5zw6xj\njIj36nn+eImCNS5zVW3+CFFJAopG5NYfocA4jVLCvMuMZKIn7ul931mkZBSkWmxn\nKrIog2f223VfQ4lGEUTJLwpuoxiT3Ufu4BYbWLBaJTjG3/F8ENVdtgJGggs8tZl/\nxuuY1VD2gULVuj5Yp7gAtd8++YXnRiPazvEE5YWA6ztymklVDCoHF4LBIRSbRFV9\nUmvtc1gmFJUTyk0uZvTakHEERi1w58QFYwqvpRzEcOfe06VGfgSxFVpbX2WooVwD\nUXUQ9km113449uGQDlvnXaMUBe8QSwfRikds8ASgmnjJIwgEIfBNBf+KGv4tMvM/\nXGAkCVA2h+umLKJ2GIAFbZO/UP8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMw0ujhUut37/vUN\nDIDA4dhKZS1aMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmalBI511Xt1IpwsO7sR09pitnpJ96Bo9FSC6F3srVnco\npOIkrLmZdtXHGpdu9EDoyQtRuNtH7Ih1y4QFG0v0AsWjCZADv/zjzhTikzD81FyY\n6THTIYa73upl3KsEKdPSxLLqv8MX5Hvvs643y4BHQ5/VKylitnPM2D/6b74fK52L\n8kkfeN9qHa0UzwoQG2uuRnh9RTruxsvxVnXUIkNnOrifB0IlDkzvsICx0bxfWIzs\nAEvvBOdMDLQe+mow7xlaZPwGMDtm5ul3sd0CETfnEf7Lx1RGZDdgYnEeTT0KED+R\nPp95f2hxOEcjvpY2dz22DeY+NxnyzUIsA8TWW2dY3kpSYkYEMHS/iBp7aRzQXIIc\nM3tbq4CJgS/3KoTZ+qPZO5dI9L/9DUNSD0Z2Zt7jfqH/UdmeppdBA4RqM/1qwdjG\nDsCBQcDpCy2xWHXXlx9UBguoVf+J+w9+xVYFKFNpvesYzpfgFmoSrCZGTaUpV5U4\nbT8GG6zayFnFVOGm4kus6AiGhz4//oNBPoRk5ndwcpfglx1U3FVFncQxH81J+mqA\nuhnzLHTDuvOIosZpL+yaiVyWFxc7TJIfTMrDqY/BbRX22aH7xs0iU1iPvUX7tJoO\nPdRHDs5XTFrQmNkZRTW2sFruxVD5VDJ7DVu8qv65sTYmUEKZ/LReTbOOGyDKOmg=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID A4D18726364EA2E3B278464CDC7FAD968E015D4B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcSzImw9Xze1RwAAAAABxDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxNFoXDTI1MDEzMDE5MDkxNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1BNEQxODcyNjM2NEVBMkUzQjI3ODQ2NENEQzdGQUQ5NjhFMDE1\nRDRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwv2KWljw2531GWl4\ny+AbT9pMaEjeAnmqLcIA0/K2nrv/fYZ9OS9mY4KvP9mQtEjaSYg4lpBInKKkE4la\nIVjKIe0ZFio/vUB2nd92pKSLnzyq8HuCcFzkib3JEDTPTQ/0xOox04HJQG1cWOTr\nJjgDziVXrG9h0bSk5BH2BLboFSIy/ylM48mhE1/ArQlvlIZIlsx+pwJvMRQx2UZU\nxw96aBOqJj5wa9xmoT/Oh1JLZIirrVfL8natb5GPChoEzypknOUSru8ZHLAC5aI9\nhlY5xc7Ksv3UQWVHlXfdkjZzBAv7yATABvANcxmkrr4AbqIdu1o4ez+QieahkigT\nsDtIugWI/xiMy6e9WNDHpuTwPd3zFhvXLeBXounTJVZhoEjFXPrnwN7cP2vx/6zw\nEQ2e1Kh0uzOkjK9afz0vg2ce5hXrdbRAW8CTMhj+ggmeU/mPiy89fpGXQrUBbLmo\ngmcSoXrfX65vUuqpsEzXvEv1A1+szSfIkz/LaA0UUhUYSIkb9VPqi/bcD0iXBIvt\ng+1HqeC8sPtSHm0Eg+8HXqtSi8Noh4Tno02UA407M8+ic86ABBD04D7pHpDGwsUu\n05isU20/aXnFV7SBICn/2E1J24571UFfpO94A1GdUkk6L1t1bsxS6QfBxv4aMXT8\npVmCq8ZVM4xw5QX4XsnKY482Es0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLKHqjYzghOPyyg+\n6A3jajMlEDbSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnV5iS8oT05StLjuAJmKSAZ0i7X3aS2vv4wzTFczKncU5\nbe6cR9/Lp8MxZpzAOMUBqqaudXfYsDi8N7HXaaBQudEFCQr3fuGEvh1QjSP2x5l7\n1QMcCtlXUfTZl16O+y+OnqM/EPwWZTDC0KTie9Nbw6TVwYjH09h4O+OE3sIOsa0w\nGX2Gi91/iqjSvsPx9OVr+HHyohBaAKTgaL/qgmNuqdo9jJkXYf+cZYihsoxUI6b9\nV1Nw/LOlArQgcIssr4oI+OUsV42m5P7c04Emn6kAbhxwfWNfG3LhNSxy3mfHWUH/\ndRF55Wnd7t2Dq1x4zG29ko2nTMZURZ52cT2gbiyqaobnNhVNkGuLJZoxFE/oDHtk\n7Vgz0VY78dtwSVrEMBc73352CmKwo4luSKz4Wz1MDAoNenLhKtqxYlTBTS82uH5N\nBS//tDAUaow0wZOaNZHS6e2rYKeCLJpTsuI/OeOS4l4plGPTx12BppYoVWGvq8D/\nVNDXXN/tSt9to+oCcbou+IJDMYC8cYlXEd8dQE9gtwZBgMlN420Fi+Wu5Ps0KF3X\nIWXyfAT2jufjR1bGWOd8C8rOf+nFN1ktvbbyIg50FObt6e22hxsbZcX2aSIvlIZG\nMuDeYlDDFhlaycWDeaZ0Wd/NSZPO6W6LvKrktRvGV45diYGtgknH4psG77qJHi0=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID B02981157B6D7CC3210016380B898950524350E6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcfBIpiWu8SLkQAAAAABxzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxNloXDTI1MDEzMDE5MDkxNlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1CMDI5ODExNTdCNkQ3Q0MzMjEwMDE2MzgwQjg5ODk1MDUyNDM1\nMEU2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAm1duihpHvjo0O+9v\nvQn4/M6vnhbIfhBbJ85IggC1b2hQLQiqiHaKEpUDT1kxcO6mTFACcTgOmTcrpY7D\nm7M/wjq00e56eukRpM9KnD4efTwOkC0fp0V3NfGN/cATPPzJmXzFCe0JY4T8qudj\n2CdNC35sp5qY1X1A/vgi0ldxHnNaiwEOT/HEQzdeF9+6MqJr6Lj9KBxe7NbEIbsw\noAuZjZDMe2V5EL5Wy5JzBEYF4DClMM99SXYTdOj7gm5X1wU8mUz37aULznvt/EkU\nkW3hwNVnqY60Q3D1mb3l9+I0pY0/TRc96P1Tg4D8OFVDhb8Ra//3Cm0DzTzAbabF\nv70rSehoh5UBWpbhu3hpgUfnyMVtLZCpKvjKcZaeVMCIIOEeXagACRz4pteu/tMT\nbwuk1NXW+yb1VzAneaKz80CYU6Q05f0e04Kh2KNzAuvfFbT5EoXK49TJH+F3lYbe\nyBRYIJ8QUZJthhCeD8Qj9fvZIV6vtzCcEhtktLbb9jpbz22Vocg9pVRLyOrYMi/K\nvO0AeYW5lT1lgAo8Z8zSUirKOEmChqrSLSKp2hHhgWlkMNdU0RIGd2b0393ZxN1s\niiANXjlObLFLm6s0sDVSVVoYGWIKnkCj46lWskFE60Nx9EhSwSvPXsRZRpacmeUl\n6FB6Cb8bj1V6Bj/1etknNTMACu0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOR2xV0mQ5qNQGqR\n/33dGdgUzQADMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAI7lTFCIQVP9otT+sDzuF20phV/cPrgLZbieSouq1Fg5\n+jNLKXCSbTXEFUwo8tdP+ZHfBoyfynXfqSqIxQGh+w9nlAU2gSXaWgW2Rr92Jfi+\nuYcp4HhcfmgtPSSCz9/BRW7DGCPNqCJi+6uMrQE0M0DNX9pwSi7S/YtRzUrmD2SA\nI5spCmPFxhSwVIt56zzvtmo6wgFh8PeYYIULu03kFdUa48+wi8+wKke4PV9hWOms\nPBIYR+0gwDBu4C+DEpkwprXWrZbJ6IhFGBlAeZDQ/CUGFNvnbd+3639mZOCIIvNs\n2vzyRwCbHy7RaK4ELSLenN3j2K0InfURe/4/zS0FHQohAjjuW6XyPboBWsRuAFef\nA4QqVD4DHA3tbUqKFZQDAD8YQGE3KAOJ36t9yKqYfUllyYDDsHAGeGtxsb2tV7F6\nSUv9sUxOvNAKeMk59Ht7F92HKDVfy+UsIdJsWxxL7QIuMl1j474MwFgDmdhHDKGo\nObbXFnwJdwBjxw9GIZr/jAxyTUA0oCS88sWX7Pt2T74kqi2z9jtgVQBLMRKAQ12o\ny8O2o47o60pe4D7DLUS42zOBPsXBLHidDx6dVyVz1m0ZlMWA7tjnNtUwIORl5ghE\nWjQYfaqPAd/jgJ2PTigsli8vXM3Dkk5YTG67W8kmlTIkxEZk3LLAe1j6hTfJarE=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID B080359B59AA938800A4AEBFD10CC70CF01B1B37 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcbezU5hP+Vt+QAAAAABxjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxNVoXDTI1MDEzMDE5MDkxNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1CMDgwMzU5QjU5QUE5Mzg4MDBBNEFFQkZEMTBDQzcwQ0YwMUIx\nQjM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8k1WoS96+eBd9DBX\njm+Vtbo5FCO07fNmXvbsIINUpPJr9b5jroaTUsEvmVUHdGFQRJknNegRWGRGC5LK\n/ILJpjh9yWKv/NiuAC9LslLwYGPnjfyX473HvxzZ1qcDuKvyeFUtGQIisWgmL3L6\nvrJ+4ImxRvdeT0jf2zGLbCFY6v495CcJEZM5ZMMW5y0WOukjMNcos2/U9c570rGj\njg9YV6kqpQBH+CwULpRHaka+D3LASL9aaL7Divs8rPJfC32S8BOekqVXF2DBRC8r\n/2/kwXjuX4IR98xmnSSH4c3xtnQflqKYkH3Wr8jQbCqZI+QXCRcF1oVaTHDplzst\nM2KWTAZwtWVOcMFRzD7pIxewDq5X/2/vsb37F2QMeT6aXUqCwkBsCfZQ0OIuV8QF\ncAi3zzJJ7O1F/l8JJIGibanvLtINU3GN1DsTDv+jkOcQhNA4mliUxSAa/IJBjhHU\nxTW5bwwEljXAMT2IdV+xY9EhdS3lhx0pT9GrC5L+l626sfPTfuouzcOzIjzS+sTu\nntSeCQ7Pta695PBlsQk+0sPBMoAXjlGOTRbbRMc89Xn8m9VuL50lXSHXcfDSvt7d\nZOewhjQhvyY1y1YQPglNXrd80l/c712YlyRwIXdY6R9Ha6IAfXuPk4t9hn1rKeIf\n8bKF8Q0AwYjmOQd8ZA4qLGHKTeMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL8VJNRHP/aNvMbN\np6rx5Gq5FFCkMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEACtaCoCHgAQIWf3D72cAu1LS/cMznA8DN4M29s0IxOa3D\nMLn9h9N9gcaBaXKecUjddGTWKYHkiCCaIOXs9VnFfuGu4p/fe03mOcldJXQUEiPo\nX23G0+MLZElgIvMr2hvUZExc+muqUf8dAq+sRlVYRmKD7s3eGryhzKEgAe1oabdE\n8DUamP3bBJaEiKMC0J+JC5rN28Z4ubNwXouwYJ0wDsgzWOLEmybeMoXbfB8kX1uc\naeDL1e8N92Sga2BB7lIHuogQkHnNeL33f5MGGNBKbzjc3hmHxgpC7x8liHNImYVb\nZ4a75QYd2gR6V2xI4pD7DqkPYowxqfL7hjgRvV5rclXtJI0QeoLzrR5HqCFQKQdb\nsdNpLKf3uPl5UC9PVXSKVOMvLz4GIa7c6k76Bybfw2T7zdGCeVk/BhpefsxswTZY\nY2cB61gfv3oSFYsVPjuF+iKpITOd7Em238tzWrlxR0AdTkqildytDkco6Wt6pILV\naiT9r4YGKMXCs9aCRP4NGzNmy0HbcNcp/HWqY5xrqjPEZJO5pE3CZLEYmCzyeNJS\nfE1qU+S3ZuSuC+3v3W5ZwHmjpcN7XxbRcZMbT5mieJpynAZSt0zmqgaoMBAVSnGO\neVNktjKt2eNEKNjzuLb/bRYa2MRIIUGRi0BoHUIDKx8Jhh3lAC5YB/gJBKEnego=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID B2D3CC08144C50808C289D119627479BFFC0E4A3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAi0YZ4Vu9a5RWgAAAAACLTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzM1oXDTI1MDIxNDIxNDMzM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1CMkQzQ0MwODE0NEM1MDgwOEMyODlEMTE5NjI3NDc5QkZGQzBF\nNEEzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2D6AJHh9aOqBrAyF\nX/qX7604yk7k44GxnsmT1ZHA0owj9unuj7wQDtdfn5FjQKh/Rn1ERNgfYccmAwNt\nWIlVSrGABL/2tKlHe9o3tkK0262hZ+WR9a5M8Bob0LV8isqbBcrmvelPoME9Bhum\n0HaAwh5CwHDUvAQiwAuH4LuU+gl6csIGASpsytE3/OOruwFuoanthwlKnfVHE3LT\n/THDqlE8Xn7L4PWR1kJjARPPHYeKfxNbBgBEry7EL7/F8w0lVdXl2x5XgQ4/jbFI\nE8slGwICgS/IdoIY4/d1QcLUVxKeHe1Av9GO7pYGuybHvEmKwTemMPQ+00N3JTIQ\nUa3Mt9FjkTPRk6ZGdnXy3dQ2U34BQj/lQCJdRfgjqYuSCVNtCR6mV+vta2uh0f4G\nljLM5JvhzjERpSpuOdFithnYptaNhIB89QcaW9oJYMF407LRrXrDwQq3hJNjiHXl\nhsdlBn40o/ov/rthn66DvPTe+4rabkLZ0XbFvGXSS7MzqeSzANLdhmvm45WpI2UI\nn4ZTutZ6d6BZ2DCMtv8aIflgfqb/XTL/yZ5enyqoecm7DeHvozo3WE4c8QrR/Xaj\nU+i1x1oTSk735uUge/Qgwf25boysn35RSq37dZvwUTSPL8ODvzZOS2Nqle+dPZNX\nKXZ1lYj1YRzvdxLBLPqhhV1VYxcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLFQWwmfvfBLLGQm\nFTDa9ahGYN2mMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEWiaLGJtd4zX6t/G6394D07HPPfbRGB6xncI3f+PUiy+\nrKZgoHJvjXtD922uLui00y7Gg3w2POEA7jK+9LHT9QEAsDpdHaViqO72/FQSaLP/\n/Smf6mjpfIrq35cY01c4Ye4YD9J/SjKE2UfP2YB9zzK6PiWLMlyadAQzPxFm0rvF\n3KYFLWpN4qGzvv/zGkL3Wp8oUVx/Y/bz1MMHOM0c4CIZIAP3zED24RLokfvbIPHe\nDjCBtKjDMFwRGqjVwT2R/kJNJS3O1FsKuUAMBpLtC3wRcHGzFI8nYnopMKG3lXOQ\nyDAd8TeDGahxpsM5lFe2dLg1gtp9MzGXJ/mJ31DHgkB4d2K8a3WqPi1bw+AtuxKU\nFSPH2cztzfqDr8jRCGGPwO+M6uk/nutrUxWs915CSdE3ctMB67MYqTV0PPkES5as\nxlnA/wM/HaZ44Vm8Dbe0RANOwa3gRkwZPvIk0AyNPm5JAZVzULDsinGNLMrhMfzz\n/KRCuIFeqvX9nv1MuM2wvwoIxgryLNrn4BJX/oZD45Nl52yAx7iocSH8sFlGOCyF\n7Szn9AcKWksJtGiNQ1C2nYAFNs7JBAfvxARjWT+RM5hJ+e+JORvGFnwbcYcMHVUS\nFWWMuhP3i3BHQAjxQQC+EDnU0uvushD6t40k32DtguR+faNZu1Hx3PWQE6v9aLA=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID BD6C69C0759EAA95DD6D156EA64170C4B9B36C78 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAi5FC5WcZKTAwgAAAAACLjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzM1oXDTI1MDIxNDIxNDMzM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1CRDZDNjlDMDc1OUVBQTk1REQ2RDE1NkVBNjQxNzBDNEI5QjM2\nQzc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1O1LpBnw/LFn+j17\nZtK/DLwpyTsYYAyEn4YVX3rbLHhxVTD7yX7fAWY3yOhB7VRRR6H0MwhPTXncClmT\n+MswgHd6feLeg2qHf1E7IZSKFpbJW9c71K2Y4raOiWrC2szS5otl8FQ3HheyEXpN\nKGYSl3jZV34oFidCr+vE8rnSFv304Jtugd31fCQChGfoJzkg3lP+pOyL3SYvGFwP\njwgSkIAICwymDVhCtrB1Dzv/nps7uyqFFlP1GIIRGc/HxKuwgPSTZ3FTYGBfemcs\nI+igQZxYV9L5cMUoKylzz/eybU5l2i9MClAxANrpSL7tvhdc/GASzio7IrucP9fZ\nyVb2ctXr2Vs2R28YPS1eRuIG5zc+zYhwBwpL8eNwBpdFWDFTCmtUBjeE08sKQ/G5\nznNc4Bzx9C0m176SHjo1SK1ykQ++ixNjbvzISXOKoKgSTSZm8GncQosmuI00eQ8P\n9ofQVYYoN1TvfTp8PDMaLhloLPxPadFGXyyS5yqkNXPYgDh9/uk5yh/FXRp6mybp\nJXOucbSZoG4/77Kc96qN+2xk4JPU6dcpizrV1MheOFARZ9I8/pbpXUbSkap3FzS4\n3j/4dHls9fChUMeJkpyoXwcEFHz/awgyQrlAiLvyVvlnDbjuxQMGCyf09haMh4ZS\nTSlAyH6Ih86cn/jpKxQcKYlMoRECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIXpIcHyrroXrF2Q\nCVGGrYO3jz9NMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAOf0+vS8FLlvlo8fSn/gdxRqxoKHErqlT08kb3iOm/QGO\nu+jyKQuvd3lycQ6FO87cj79G+pKSRaWrsYOUIC3xtvgrIwJkgYmOy9piapKbWd8+\nI/QSFhlw1L2JKsm4ReAL9R4e6IjeEu9CLN7518wANEgWUtKOxonYTN2Ga0ejo4rU\n79hWQ5v8NoI7C/25VG3PPH4drkLyv2TTgwt7NnnOsexDihBW7/cSTE/w0O6BHMTR\nFI7wlRbh3rFH6lqCaS8Wh4QG5jPUFSuru5qo1k6M5YYzEeQequ9nODuzN+KeIUDu\nyhLztjNqKpQQXKS119eoTnjL+3TXt493wthUx0wVIgsGfvMe8MgGCqibxPp6H3En\nXTnADB27TpcU/6c9qZk0ViqDIEoNOPXn3mIYng0+aqJ5SwP8jxXDwsCgfL5TMH6j\nTBFFRUR1ZXuIv8YMOwg/hrAWPYCftlkueeT/OUmAMPYJ0/zjwJobzAbX7RTLI2bi\nToDOlhrxvoEuoMQD4cioAvxC/ssdgEiUgt/9XgNyfEVAmcqQ/yR+qIgi9a4wReva\n+KsXfDgl4U+P1eLPbiQelH/zquS6cZzAhsw6IKSN6QlBDwQc39kTsZsOzNAWoCfN\no+BvQc5RcHrUTDMvpICdlr2Ka7YbIBTcEtKD5vHh6sB4fxDSuHGmgnYyjTCQ8kc=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID C0044E3B23F43B2854BB76AD4FDD79BC62986C55 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfqcTrAQj/qPAwAAAAAB+jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0MFoXDTI1MDIwNjIxMzA0MFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1DMDA0NEUzQjIzRjQzQjI4NTRCQjc2QUQ0RkRENzlCQzYyOTg2\nQzU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyQBvi5CRRS+QtKhN\niLuTpMQ+zf88hUOTRU6z6QFwc+bj9W1E38wcHIAaJk0XCXAavnp+Hkv8wlJZSD0s\nvC//ALCiV0r7r18mMWeMLk87DN6skRoAbywHWC8VQ2g3sATE1Fox1IOW/ZyeIDUY\nVHakk29f6qce9lHYovVZmsxuYs7MCu0bKf4cVlFLGIVaV/LsnWtvtPVRDWIkVGRd\nQEIscdK+fWLsWvS1JIzFH+ZU/9SyaKIzFEMD1CV0JjxmPcEdEFm+uT8rsMQtEZMD\no0PMgNVdiGtMQ1l3OYjsYx2qFx0OIDwakVNyX+DEVv6NrpJ3BYoPrSljZFkGSs5L\n+BHUYbeb21SyPIkH9bx2zksRoDv0qMpR21JBHU2mzfyMIMmRs7bQa4lRXNKA0v3l\nNWvx9vLyi/HPTSt2hLyo9dy+APgUhgOsjYl9hitiMWvYOa2Jgp8N05s680r05mH3\nCgrBzR9wvgpeC+1LBZBahOv3OHKrkSNK3nAKDneqIm9N68xrMwAXaWQ0NP0WXsmX\nASVlXoeU4GbSIkfY1HBbunJ/xkG8ow5XorqjxapSAG+2Zz6tr2AkByaJ79aRMUGx\n1TcOgMD+hzEACb5+uueggMQqdODtZe2UEVoO2t61eeKEQOugr2wS2XPJxh/h2+Tl\n9obkQZNzzK0TeUldCrD7oW+jINMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCKkyWCFqPAxxo3q\nhMMAEuF2kZqyMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALhea3qI0/lblf48IyUOz0AWx4PTzbADsxtgEM1B3c0OQ\naf7nn0jODNxeElqniA2fdP+pISdkl/fg3xroD4ztaRizlmSHfZCbDc1idPdnm1F3\n8BDzMaYOuW51YBaGyi6tylYydTUMDvr6U5LRIPDpfSHKzDe+fsXo4ss2cFeNT5Qa\nB+6ButdOsafwTh5A4cteb/yiatL5eYPVhN1es/FrHhx+qGbOxgZADz59XTs2YZhg\nQP6HOYD81sHQDxfYfyRPjIrELe1waj3sKwSoAU89OyFLYuB0otCR6XJBkDD5wckx\nwBXnFF00mDKCdIhXdoeXFn7u6wn/R4U1bWEAphzxwWKmgjFBv0JBL0hh8cdX4vHT\nVuGJMbd+elOiuXiL0bxCv9WeZfCtr7D3HroFWon7pad5ljGfaK/Ci/Wu/DYNVo/H\nQZ2EG6khRWSbT20YSWJp1BZPJsEYR4rvE297eRKiGpfI+rTDZhOia9vV/vZHu8NS\nQ0Q+ObwrFpSqUFtVwgLCazGx1y72LQTqukZ9g7Q+ETAr2QcsOuLcrgkgwhZDELxe\ns/vyA4RqKXTIvAZhOExJDYX3ztUUZ6ljr51VP2r7P9K3f44Z2v564Uszj+/Jyuqy\naTR7s+BFEQWR8py5WmsOTkZpLDvpaw+Uv3ymGM9rT384SNtcXBhwebssQ3Y/K/4=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID C7EE1D9CF6A291A06E4F5B88CEB25CAEE12F827B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAi+eV0qbx6IwTQAAAAACLzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzNFoXDTI1MDIxNDIxNDMzNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1DN0VFMUQ5Q0Y2QTI5MUEwNkU0RjVCODhDRUIyNUNBRUUxMkY4\nMjdCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7HluUbth3895/6Ux\nFryo7zpHEF5ZDpFI0MkvSvm+FHgAQ2OYg4dtKX0R6ef263id5UDXh+7cE7fxP4HH\nt/D9HvXB1toGGpLi7Fj+R72E5CfXjMt5F+An49bW88hPQbQZIKaKt7RDF8ozeMNs\nMzDzZ7VZnjKvryJiQ4KzX4DiWch+UzGIjcTwvYcNsYGrpGwIeRfucmSHOFOKVe86\nFC58yZHrt0W+Rjlj4AO3wjsLPkrFDOppSh7RgcbEf/+LjzowbN3yHmNLcy+pHEQo\neiFbLQlvC3ILS+nX2z+szwxzcxn0+wxiQcUb7ZnKPY2T2EziPMYxrVjh553mItIA\nbwjFTyy7byoeMzHKwfFswdrrG0h3RF/3u6E8iWLh2nfFquSdLLqgkJ5d3al+tJ77\nKAjryhXTr1QszwTyhaOXljskGDuyHqQuf4FZZsOI+LfD73Kfyqwe0egOpw8ECHpm\n45WJvUq/cI1PvJRcNAe1RZ3NCm9el8LNMStLj/MUoeg81EeCEuEx6skd/vxyu0LQ\nruJpx/QFCmBeRHKNEnm6hJ8jVjUmf3KtbtJ473kNzxW8ZLPaXwJt9h6rpucQabgN\nYkJaNWFzvYvBbAcfM1q6jwEAggDpufjRhh2+4+dbMrS07b0Jesx4VOtpXheo7FJp\nPyWa4oVi0FSUxoDb/PdbwZerD98CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMuWcy53kQoBEGRW\ntCxHzWAfLkYpMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAGUHLlDxzXE0ROuszLIlGx92Hzu6iWWSwzqwgSxCtk2cI\nydU9LPWumbyT1SIUVLZD3myByCfLZpE9sKXL3MUsObbcudnvOtvhOJfkbgkHOWwJ\nezNFbUg8HjgghdcNNVKx3p7BFUQIrA0sxz5qh4RF1tnCft6zNmJoCQUs3uqswtAV\nUIcWThjlhvO2lD0+KUnq6Sy9yKysY4wGzdjlvweFUuOAedGL1YlYXdlxI1JNe6MF\nrCNOEHoovd+HQuTwk/2aJaxYsmRIMnXpFx6BZ9EH83P7xZqDLJAjJ2aGyzM91lfe\nSUW6FB2mDmIX/fPikD6M9J9YEeIAYdneCGfSvriP35076n93zviWQFsJ6alQJe3D\neOZ+o/EFZJm0Sv9iAkkPzeEMohF5Uq8w3n9/eMoivfs0YcK0gsMJ82KfE9b6tiLF\nNuctcdPkKDkW92Ij07VXMwlr6rGCRUooKk3OZUM3DxpapP5bXCpSOoJ4ShGxZxyW\nStP4A+m+0yZKdAAFxQmBpjfiSLcCP0K3tVsyxwhcQgm7cOI9wTfNuuCu+sk+WaOE\nKCkTJkp72F6gEYDhhB5XSDiiV4SyjKhdPrxGm0ySb235OfZN504+gX/bE72VcKs6\n5BefXnwOTtsWKlIHyCG4iz/bG2t59UF2ByUCb1zQs5Wcj/YLo/RRxBS3tScuRGI=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID C88C75FB06270BF7EA1244FB9C25DFD209B7ABCD 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAjD1WO8fjZXzdAAAAAACMDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzNVoXDTI1MDIxNDIxNDMzNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1DODhDNzVGQjA2MjcwQkY3RUExMjQ0RkI5QzI1REZEMjA5QjdB\nQkNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz7rp/taxx1rQYUG+\nMdgLJPqQSREINJqXB4hnr69H8pfBY2eayu7D4Yd98ZwSt0SkEgkC9ThDRPmLzY2+\nzM/JWs04uyZOF3qjl68KdQ3d4qcZURP4dvw2SsVVH5ioCNscqpGoQSrvAGhYkHbt\n4qBQFctZaiE/jkxiLzkMMcWW0ETS2s4/fES9u9X5jGA6cfev9Y8S9vbYkEwe7lIx\nNecqLmXqt1Pgcne1xkGZHpQJdbTuXBpprAMb1iNl8MfeNwHYe2TzLk+J4eJYZvRI\nwD9qMl3nANV4KZJez4EhDS5KRSqKIK1Y7MTs7VB+XWWvuL2GKtLSPGmtUtF/E+ME\nXST25yX80arSxgSqFhox/chxfk0D+MwIUAb1P2sOghITP0zwmZHVoTYeAr2zep97\nMVncwP8lh0SaHpeDvVZoiyQdwM48DawU8xWZmC4ZWMjoCsrQashdKC4hsMrhJ+vg\nxs2clMeLvCwvadToH1o3Y2o3UY/DHptXQRuiqk8Z2YqPpsCtXb24Sn6retIUsvas\ndAbWOdq0fdjE+4tHw3NkEqcZHS+mBZW905zStRObho5EzUC/0os4jvBQVi68U7o2\nG+7JmY6iK4IQJRzCh5CR2v0RaxBeTA6oGZ+sQ+neb/iYvss0ExJjsro5VnzInnBd\nvxDs0aDpkmvk7pwvhiTAZW2k+x8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLId0MskBrvuq4f2\nIl0grQ5gddp3MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAA2F0gw7faEhUoITRrVRdwURylxp80GeOul1QvUhl7WKQ\n2gUVPxHwqJ9lkG6UARZccwfUrqnwl76wCNBjBdUtRkesUG51WS49RpJVrjTwcYUD\nKCxxZjUBItzfgizzwUqGPHwqoN4snqsBzwChTXCWw6cazocLlYc56tah04HaodDo\nlvjcrK1be/KPuTHXe4YEguLIn+5RCWprkvoivucsQ7GbwElM6sYdENZ7Rx3AoCU0\n43aJYjd44CTGDh/j0WEqGSEYU67Xsw8uxE8kiditSBajq/qUn/I9yZaMGDUWEIqw\nSHcsexsDuZKDLMu1O+qD+3HSiVbVVwt1SNLpmz3BttWapJs8ssPeOAN/C97i4fUJ\n3fytasklrBwb6GK3wiu+xNW4K8l5neNYyBBYsjtkAWC2Y3pkzJ9cmncfudNgU7F0\nx+6VjV6nbioM5C7EC0IvUfXctvKD+zGH06ZdjX9tgkuL8UKf+7f1hUMIuE/x8h4c\naIzoRsFNgROvBfOsTNXmRIYjlSnc9Rp3CW/EpBFOLMSNNQWuUGruzQFD9ocwiCo7\n1S9ax4dAwKWVG/QRw/fXBz7pKh/xe4ZXlGltW446yQKh0kXbidhUJ6R/4ZNG2s0G\nvODrKAVEmgSda8l1DnRHaphDKA790DuhltapS7dxXnpuVZ0rm1VVfoDFCzKPgss=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWJsX0zGUaMAPwAAAAABYjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUzMFoXDTI5MTIzMTIwMjUzMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD\nQzhFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwbYHyXlrc6z2iWdf\nFgA9Dwv42WRLeh7eedDGsCyS+Pw4oQywh5n0ExKsfHcaEmkJYGZlC4YhMjcA2VHy\n0/dGGf3pcmY0mPkzR5cPygordFrGMk1vMv1Jjm1mn2UTdTQlLYHo1gkFG1eX7nQ6\nBsfswWfrxiZ1uIjey9fvElFh98/CgaB6AjJHn3rQMuZj6EtYocAJgWk7+sTEICR9\nq/qc6Q76o9AvPGVCYVlN1GS1RPH3JhHOwHsKeuK9oh207yeWwGFBbpUtB0zs1cPB\nsb6HndMOQiZHtJOVGj/0nxChGKtHI+5LiMRnnuwYMdJWRyYhiBa4oRleRSSE1JMW\n28VaFQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUUz+vIiS5iyALHEAJ8/mOSYYS6FEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA5OgmX\nwbWNdO6Syjm7rrgbe+Fd+0FgyTA/0tfkcOpsvo+cwFfmpy8a4/3P9Epm/1hFWeUH\nSUwxsVfElxfTYdCPWdydY1xvBG2u7gKJyagGWQeK3CLcn3vwN1HdEM+9gZeiOrSN\nfYNTAoH/RtwQEyDW6s2yovXIBDGTMQnkVzOODm3kxEQA1+lcQxAubW5xxXl/Oqg/\ng2oDeXQIG+aZ8QfD5WnzBPIJDx/jC2r+fTfHsWLeCUbfWwrJNZtdgzsIyvtzT2+3\nbCgnVq38EawdlUlaCziWEd0VIVZ6dbo3KzVMfsU3jhbUCGe1fshoFEUvVPgtmTHn\nuh9/Tw8gIig2YlYg/GSVR3d0mE+cwxQUtxDSoMN7zX9InnHff8G+fJfMrRPJWulr\nWXUU6hTC+7C/XXNJeYys7Hx/w/6qZPUy7R1QgNdzuC9YG17IWohzWqUxK5CL9hYD\nfT4E1Kj75xNHeegDVUGtOzakD9ZQ/Lb7y9GfUpKKAOlFs9qiOYk17nvIglDtb3nw\nxWrf7xLpFSqLUbBDHrbHCW2fxWXM0Ys1UcW2o9RSb53ucbsJmSlu0qcszyix2+AA\nffQGhCoJMKEf63PTMVwByUrUPS2XFjb9YbR7kgGIRYYobK610E22KYhUGyRfp79H\nOKsC5BV9CxynGwjurmkcJwSKF488MCV1vfVb0g==\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAkx+O9MVXgwqXgAAAAACTDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzMFoXDTI1MDMyMTIwMjkzMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD\nQzhFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqtU9ls4rjU3z8ssF\nR4gtQqjSdtKWi5dJPcV1xLdAWTMbIjlKOJhaLjDP1wuLYjO7Py0SUBb2mrG1WLGD\nYi5x3EH43OSUwkX8blD5Lm2EanrtRwTVgVyAApNyURiDOGlTpDUOwHd7Koomo94I\naSLthgR2tvzt9Qs9Abmt7QnOaWsi/ci8YYCSRHoLEcjDgQIKWHBvxZaap1TwrfCi\nxjIeVeH5L4XUZFdQPlA8P8PGn/DWi2HUR4t6tkfFeeViDGkd+gdrhel5O8/HX/ty\n+aPvjJVt1T/jiANbe43VXzBuQj+mirD0EwN893/380GxM/cbVudZAdVtr5Y8ItZA\n4AOT7zX7bu3vaTvv0IqLeIcjL6yIKtfINUELKi03gIyikt2KBsiwK9QoEaId3LrA\nYKTV9Tc6am4Yv1Y1gmngfInGr9lrBG+sMsMdrFoj1RPjnZTM9BoRAw+ip7SXxA56\n7UhVMHL9Cvc16ijY8y+4CsH7ghh+PoDng0Y5f/5h1cT0kjF046KX21NkYRcxzkk6\nJ72DvzyGNbrLRUaJ1VyUuUEThEUyl4tFN/vFvApTYoFsvBoCYXZ4KbExJRUNwm4Y\nEtdTlCnXk9OA69PyO2PzNxpC/f3uGvSgHVaoZkGxRBW9Z/ERo6gdLOzjxjlKUopn\nbO7tvhP+mNMOqNZHwE9f/ts5CzkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDEWpx8qumTbZ2VK\nuQTtymmoGayIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAN+t8OfUVCFqGxBc367kuG9rklOcr2VqNUqKb5ITS4eQK\ngSswWJwKmpgKPERCtM0hGRvjCafFAMVMZ9jdC/f9X/CsqBZlXUbRq8++AvKKrafR\nRdaXf8hT6dZSEkfZa/oPAT+2RvWrEfK4EQeCEpgJ2trBVjQrVFkFexlNgU9mLhaE\nzT9Y0uLSDOM//ZpAvTJHxh8ZmxBAp8n6E0Sk7RRyEJ3XkYj0LcLVOzeXp7otJNrb\n2wLFXX2qddhzi3CoWOLicMIkruOQgDJ9BkzJtfmwIgzkzd8A4eOv0vCexTYEmZXG\nfuwZ7ZaDkTAebQkwg06yj7/pt0L1/Bjvlafi9ul5QmQ/M+nQWqk6kHXcr0EGGo2+\n7D9VPZSq9irmLIV1ChHW+Mfmy+00zAKTM0PGwpr3WB/6BGU5cS7YAE3uaec7Sb1V\nPLadqVqhnLb7+9ypXUHj8GceF3CI3u50eowNOPBcHWtcczP90+fVT9z1TnFWhxx/\nEMN1Z1yBtTchHnU8hYVhlYWTXAy1F8bJ6dnvMj0tAMyryQGgcUAeupi9Ad85ukn+\nCXWNiQHwqCG71rV+NNbtPHt3pAbAgvP4Oq/yeD7yuLyqfdKhKLosK++XTxDShKV7\n4weSG6qaT9DP3dLOj432TIMq+0RwszOaJ9XHZR+n/C0DEVM8qd7q6B13WAfpe2I=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID DF5D6DAB5102DF18A1F77113F4983C62CBAF7385 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfxPJS7w4ZicegAAAAAB/DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0MloXDTI1MDIwNjIxMzA0MlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1ERjVENkRBQjUxMDJERjE4QTFGNzcxMTNGNDk4M0M2MkNCQUY3\nMzg1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs4arT94EUeF2eNqC\nRoDx0Md0qYA8j4zcsstr6l7Qo8BS0ElOJ1q6saL3aaTiMIl4N3Z6gbY+JZbMRSe4\nMkgwzCXbLrFiKDq6vE1+ZIoiDZ9HJefiukhn7dt9JDBupPR8+ccbZPaCdoFjHlhu\n9m+CGV4qEz1fAGwOBcYDmlmerKJIHpAPFG6jyVl50EKgoCaG9G5UTvtTZZWUCOyH\nssIjjG7cdU/biveW0BboF7BfZ0TcuDDpGrqaoaH3GaoXRsAzWEKon4s9r6dZp/48\n4+KVZeEINcu3kXQtvIYPkyqkATHiALBycXKnZYZjhI1lKjG+e8BwyQNnnIVh3u+O\n8kD6UgMe5k4e4Yl72D6rFEh6Gq/UbJXas8pC0jfCApMvMwdUXvhAhZYK/Jdj8K1P\nIUiNLMROnEul/0FRxrIbvOppB6LiS/ohoLI6/5nKsbzOVIc87zxqn6rORVYmTe1k\nQs0Itbznk02+IpAdYu6xQXgSdvYPF8MuHilln6RkkZ5LkWbF9f29Pttgl2gtFE5j\nb7R+GfUCQbB5pnFb/VodXWJZ8N8muOeiQCydEz0up9OtyoVBsdKgTPpaR0OS7o/I\nEz1Vnfq7sspu41VjBLmGszgHXUoiVuyyHq3uSBu39WIvXQ6T/E5M/k6J7G76NsiA\nM//Rng/aEl9GohYAhU/LnmY+pUECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFISdnlQAnS+85Uw0\nlx4s2SsoNZ4YMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAb0ddhgAQXyRKmPy57iJgHL94NLYsrogT3q7KOCgtZ/tP\nhnO1owNHfrzz8+J6fnipMh9hfcPylgIDDOVB2SEhoxPtoR2tjJDAjz4RVVtW3mLL\nPogzLareTe6EWZ0hREY5/WFVTyh0e2gR+FMeUjnJ5p9ifY2+RUqxcv67iAVV5Kw4\nUXPEab9EAlFV6G7At8Y3LJMfBpfPANTSHTA/aPbflzPnPLbsDxDK8p/as8BPOIIG\n7snzlYbd3bbUcPhMAuJD2Du9Q5RthFLTAG3T1qjvgXEANTB/d7rl/6MRWCc0bGv4\nAHPIHdKyn43lR/omnGIvOJDJs2Riu85iyWYtFsSg+oqBcTxSfooYOoa7jsI50dQO\nhODYwIlrL92MdrywFJfycLLshWUAhZExPDpD3EC5FTPnkoNRO9Mqauk6BnsEQIUH\nBz6q+qCikkfaPjytvzEOZRnsuSU3GsgHjAEjl4dhiw1Ax3ontSsCBCRymoBAfDu4\nYLwkRUKuVLRBOSfMYLrFmHthTGdRMwVoqJirITtWM3Eua8XiM6AB38husvLgq7l5\ntQig8QbCHHTlNsFAgoMx9GXnqqesWFgSEGByio6GbQGaAvRb2tiTxjNyH2Juwa7r\nSzYrZRSbGbG3O0ZxHtfU9h5vB4e5gWo/PUBBIuHVVrt3XMma/Xj0YY82Uir62eQ=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID E9061797E8E5E8C68F935EE5E976BC8FA17D7523\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAASwwtCT/DnFVSwAAAAABLDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwN1oXDTI5MTIzMTE4MjQwN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1FOTA2MTc5N0U4RTVFOEM2OEY5MzVFRTVFOTc2QkM4RkExN0Q3\nNTIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8HBg41Omuwz7NphI\nx2fE5uX77xY0YsHZAUhYI49V6bwDb7GFeO4JnAfn7wgrg4TkdAhVFRsvhpCuG68P\nvizqe6YTNsqbk7D5kEqt21s4BMyV2g+lZgr+H7WMFgGtfNtRQBUjKrFozTRRDRqT\nmBc4HRjDXd6+WFK8XGzLr20fYl6lGviNj58g4DGneePgCggn/zEmXRYB9yl/Hhjx\nQ1nMElw/CjAeSIiEhCgHB8DZDvSKfgZHFWSttchdPUvuRz7GKsis9C+vJsyKL3xr\nhTB5j6j6ulePyq88zT3tkn0j29jt7wMH8qJK+8n0SX0vlBxygTP1vkn/3rMcl0WD\nHADFLQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQULB312pe1s+xuXOtHYrSC3nCa8MYwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBiSA07\n0TayJ9L3ltLywSolmFfhEtI4sBzeiOu6c5MxZyLQ+uC50gKVgWrYCBFJ0tdqSTFo\ndF5YlPA+U8jRwysLANC3URiU1eH6Jir/PRI+SzYu1MikBd/kZLsaH4ySMaUFqNGM\ngKJlygBx8rGzI1OwzijVCmXYf9ZeYnBkY4BHss9ZG5KCxJtbfwV0IhY9bnF38QS3\nSnnnKaCBtrHk0xUxI6su+0r+l63uA7G9EdMrchDg2944nFE2whAYahXvBW/viCUG\nngWUR5ka/UVrP1UP/smawRtd1GXQyO9hSZJlP6uGGGLZPisbrwWkZ9cqV9vsQsks\naaYAC40ulZY/Q6tfGaEiE9lhRMxyaPI0qaMsNJVQraX/5hVrZmjH8YR+aI2iQDbs\nxnT07Dp/apXclYU5N9zi3YJNaqrEjVidrU1OlAi08vU8zN5+quTTXZ6uN1tQ9Dbl\nCczRhTSR6FZMB/zVNZQ4wy7My+PklS1nliWmEpt8Nfyq2FVDvzrQvCEzos9lCLmO\nxAYwSzeUYWP2ulTwt7sT1G1l8aCYlKuQqIuTH4qCxiEFhKtRdPqwGcN9Bdm9hr8g\nfKEhEmRmTsCMkvL2kbWyMr3+f3tFtzz8O3axtiyagBu4BuzB2CclwowsMtq/jX1E\n7aHg82O4Ix1N+epn95tEG8Orherke4E3fD/lrw==\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID EFFEEC5E01610082C0E311CBD07A3204408B32B8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAk0XwRlfK6KBtgAAAAACTTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzMVoXDTI1MDMyMTIwMjkzMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1FRkZFRUM1RTAxNjEwMDgyQzBFMzExQ0JEMDdBMzIwNDQwOEIz\nMkI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAot3v+77+w18G1Jyg\nmHDJ2n9g1gndkPUi44uL3mvDctcPrWiFgaxR7m7Cet+LfTqDqUyg4oKLotR0nDk2\nGJEPTmB8qwyvy+RusQ7IsXR50zIJxvHqPxBfZE8UCarhjgpdnpm6cYEFcUDC7Ye5\n5LK4yo5913t9QASwc0pSfPTHrBqlVdZ2L6ZX4+DdXpOwDnZJgPIcVyOGA8jzEgNj\nJduRO+Oii6XEQ6CFxgGg6U+oMwzJs25qJgS41x7Z52tY2gPXZgkWwDZfgrKO2qLJ\nqn+oVr9t8ANCFEIPB3UBJzb0qgzz1C6KaX6tCbp5TvK+0dBftx/GH4V/gECxOiQD\nOE0lfzwCY1W3OtDXL7qQmIWXQvfIUaZFjaHacOv6rpRX6LaF0EMaijjF3ubaSGbt\nAAHXRXLt55xZVc/QQ9cbDxRac501UmVQ/5g9Eh1MpsUJoDlqrAIVKdgz1AIsxt86\nFcCLJ1IrlOl/++YDvSbYQ/Win1GmKtWHeAVoOCyR5rVv/bL+2ml8Fvgv760ewfDy\npni70CDj4oTsi2nCZANxZUtTcf731zazGNKz/fimF6eLfQA73P68K2tsvjdQhF2i\nuOlXhXbEeXVw4IjSN66WhoQZ0E9JUUVTq//nxkDZzL0WKELdyMHtK9KqcM3KAmfJ\naHn9Ycdx6v6OkwQNf0k3vAIfTq0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMZtF7SgJCTC/NqH\nNq0BiDHPLg9pMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADa7g7U/sOuvAu8tSvM1dw5ImsVMDOAE3v1VY1hIh8b9P\nxDMZAiTskt3UicYjvAqUX0Orl6jV0KrD5KeRo7inBX6InvFSLBP6/m3iVJIfmrT/\nrOx79rDldUKoj8MPaZxrRoYdzNddpyjfqQspWLM0z1nNkDtgkEZPrBX8XP0GG8RS\nTOIkkR+PiJy1/jbasEkgXLuNY/wQcVMwewHteJF5l+YwkgOxF1EewzCNIXVH1VBF\nhMcZVc+yK0nshtMnf5Qa6ingZHoOcF0xa0iArgxdAmU9IdzvK57i/xsHteNlBzcf\ncuJZuTB5M6e5vL/IU7QsxAvRiYFQepRgrHy9trKuGQxg7DReuv7Xx+wDPCgHBVRM\nynPdYVT4i51fy8zVDQ1n4EpJvKu/jShArB5HusSM3m/5foLkNcBN/xiMU/wO/4Kc\nemmpjuxIjB5GZNpMiQfc+LaJQCLQycqI/TvmhmtUn3BBg3cGfsDT+qUH45CYyh8Y\nhx2O+Hqw9TjVDb/R1OWDS/b6hLXD14MKDRe74DYlBXSobtpDSSnPeQXJXrHasYjF\nNbRo2IiKyfEkGAu32marTIv1g/GwtassSscQexl4/Sl7bw/7mdkAPTXLUhqdX6UG\nqBWIgCCnZNM1Qf6Nb083rKmTb52ykIa4d/X0oSaV+cXWwatJH81IjxpdmNPMUsk=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID F53E4F475E0D3C6E2B3E56E3AE8ABB953122617F 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAchHtZAjKGBA4QAAAAAByDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxN1oXDTI1MDEzMDE5MDkxN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1GNTNFNEY0NzVFMEQzQzZFMkIzRTU2RTNBRThBQkI5NTMxMjI2\nMTdGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuf5gkglMAhVmtGRR\n2yS0vTZ7eZwwBHsHYel9RBgPJudFqQCZ4PovJgd/6B0SuRiZ4+RYjfSO3KJts9vQ\nSpwJ6OrmnvGAdRpuhEBtp2l8gQROp/9cZLKfd23KveyxXgbNkHuj7ARfJU4cwJu/\nABnUQpRN45v1+bfOE4hxPeXCaecJtXggIEWycauaRUJ2vRPCLkXgSy+x0bVAvzSH\nk5Abn8o9cXKudEQixhBO/WzffPrtERfUSXN5uSD0/TgW+qcnAZKr+6CdIsQvz8+H\nuSS00SyvAanxGscWFjcOoZcbqoC7jw1upbfFjCMmDnYa5YcZoQTiBxdPmonnwqCS\npc48QWsPTwkEMPZjxRvwWh+pQPUJD/WdsY9Gz8H7puFr2zxjoXm74tpAPWateaU2\nNCga5VuhVSvAncj1rJWPxFvzPKJ6Y6Rk1hW+BaY4DoXuWaEcgwXyibYX+6cImV6r\nhT+9V1bdcIzPOH1MmTlLo/Acrfpxg9a+AORq4JNG4qnCKB+8u+NXNyRt8ZmMCaz5\nZl6laWssWhLwfVSNKPGe1GTrPYJ2c/o0USlkMsEY9CrezIT7j2ORUvsrLnlK4OT0\nyG/as2thqNgSWOv+HOvG9hA81u0F9BU9+U3gz49OYUVRbpCc4ZhvA4QR7WUlU4vn\nBevD8RdBTGIkgnNrpWdeqydcI2kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKgCEFPeT2tmx2lA\nZxNyDZ94NdRVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMMRVaOjn+azoBWVBj2zp90ErOHr6USboYlcJFWXrgeY+\nsMOZzyUMqGgA8Kq4iRlSWo9VEv2i9ReslFhgwsU9nd0OtGwgain4jX21kEHs5AUJ\nt4JE6tq/JrpiWvR9gvrALXrAyHTmzRSmmPtRetXj7v0ZxVkKNlxknbOrt2DyFoNH\nJ/DBEQIVWOBTy9hEX3vkt+3FCPDaMorJr/lE85DoVN2B8UFMIa6bxN3EwCiVOUMd\n+P17IgaiOqh4meoEbHi0kstCN/Q/+CB9VRZo1WdKhWCevwIe6UbEKTvkE6U6IfTt\n/FJo7IWNCR2EFBnsMC5f9zMot1+M/MkYKLTuG75gq1uHjDWY+0H3WufHHdoUmfsA\nkVNTZIP6pr5nJC+A0y+sODC+7t5DwGgXaQ9UWKBiUBdOcdk7eqTEIa1T58TgX+ak\ntU3SyWw1wh/W8BnF91bg9EsA/z1DpcO4fJx9aZcLgwnM52JOb+x6p59h+LcONu/Y\n79CGmfFwx4rjzu03s2Dbmfac6bCezqXF4vU72B4aTpt++wD9qzJ/qpFmavOPHeL0\nW1NgywaLnVdR5QosFyziv1cEA6xNKetyHZyOONfb5lAG4sVntcDxgRTOaUfpv84R\nEMjs6iqA+pRacq66Tl8O6s8Z1Yp0zJi+4VP0n9HKYpTnxBY4zC5FTsXZ0e7eyG0=\n-----END CERTIFICATE-----\n\n\nNCU IFX KEYID F65C289B3D93B78F978AC8D017B7947DA93637A5 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAk5iPpINfFok4QAAAAACTjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzMVoXDTI1MDMyMTIwMjkzMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1GNjVDMjg5QjNEOTNCNzhGOTc4QUM4RDAxN0I3OTQ3REE5MzYz\nN0E1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0HC5Y5ge00mASJHL\nODn1eREQru5Tqa6E34hUZ1f1QAbjDtsFioqzzgbpHWWVbil+fv2fP4EJgs0FgkYJ\nZ5uTJl0QRObWAbDNkwciZNsXj0XwhF8/676o3lgWU0NeSNsq7PEjzlku+7aWZpF/\nwBz5Isna8zNERAeW+SuYUG1MZyMmmnO9UcpAgvaucESlRMnUR+6Zrg5JoMzAwAci\nJUNJrUbxWlWUOpCTuSJoRVQD+nuJSQxQYRt/f4SAITvuc5TB1QgWphxkIBOW+2xA\nxqbdVNcrXENbH6grWkCyYCN0rAKJw6HL0TIgTJ9XB0fqSULddw4dCEsn9FXwc4XF\nZL5jPirq7Z5W4tYQLe6KtkOC00gq53bpVSGGPz0z9GsDln0ElqeIO8Ivc40ZNhim\nP6rcGwvgEV6eQIRcTi1fRxp1jwcQhpFOaq8bLcPODyRpYbffRU6f5gwxHgyCNclR\n1tA9rKXNZdJw7NFqBuwJ2zI3lv6G3HnijMouZuTTb+ODkTRP+pVPKEmubnZldScH\ngzCFcVt5NBKH4e3l8oVJqBB3Qhs2IP+dFLPdgqG4uBYhjnCw7W1QxI8Q2Wn7jg57\npPoqTkty+hIvrrJXo2lEjCMm1b7ar0mxaQdhbBCw1Ir8BbFyhfSh1BW7exaUkEtq\noGjDg5L29ds6XQcjyMKw0RttQlUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAeiwIjLvflqwN03\njCfMpCTkyc0FMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAndmDv4auyYRGZR5Kqo0wK8hqORC7R4QSHtDEbTLGV+Fg\n4Xd4x2AGO9lO1ENK5guXolq+fvibVlqgUzCXJmAU4JiMhVj6grC0H4/opU+YaQJ4\nu1P+QWVRDDI5AYk8A6529+hdjJEhe1URaNKGPlBn0xFwGQKud8pNw7OgEi/u/5Hy\nP3an/3UFts/dnQwbv9Y2eedexgX98v2wh6k5CC4uIdKK1ZtLpGbL9e5p5K7YxTmT\nhcxOSCZOF4ItIM7ngIs4MVI3GqmvW+i6jouPIZkxmamxMUN2mlyqQsmhKWocQ4z2\nrTrGX4pQdJ+bZE7S+kGcIfg3Sp8+o4bmeUo4KVlvukTKCXC/Fit8yyIEDJ2XqwEj\n0E/3lHlshzZWWW9Dcmp0xBGnOQydm3d4PJQC636Zu95AI+f/9A1cFyOqiUntbpeo\n5Djzl8els+nASrlAFgQpYi3hC8xirQhWxWg6IxlfbkUCxJu4v4VyMB55StwLETjh\nFo+Flh70+bKx15cuffrCuf5nk3lwdDS6y9aD2F019g5VwAAKbQhffyvdn2lXl0jU\nI/LRY5+yMioFHzEzpceHOpyYBG3u+0p3C9cOC7j3dWFbVfgnv+0qe5dp5eRA+rGZ\n8AfqgmR6kL/kVn2puNLACEqwNLpXd/E2W6Ios8SCA/z+lrUe9fLLGTRgWSVtbfY=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAA/xTsdFvw2KGQAAAAAADzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgyNloXDTI5MTIxOTE4NDgyNlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB\nRjk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkHcsO22QUP9WTZug\nuqppRRn5cVKQ3bLMbkJMvJsHwmkPevU5CHpzGBXCCsTOwDV3uxNwNZW3uY372T3a\nmjO+rpXNYteunhaImjPRa+vwFRIps3skoxmgVYyBbZ4qgvyGmzCHLAQoy5bJcdUn\nutqsaCZagV/x6cBN4V0cY5rC4n0CjJVY0tnKxJdduhkMA8YUBF0+Np2LDX0Xq576\n8fnXmBoI5fVU5oxk0JdqOifTcGGEJfqmEPREIAUfb6+NGH8f1E+0ZmcQKNVHMbVo\nUdhAxjSyU9VRKex2gas5wsoQPZt+/lEYI98gtNiUs8m443Qe570wRm8o2J/H5Dpo\noG0gNQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUI+9teAZw4UuRbM2taISutc6WW/4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCcoW2l\nUeRUUTZCf9lhwXYogiuWTW7ICD6SbdRQxbxAAxlvsJzuFbq0ejSLJYKrJKCRrdEV\nk7t38HHiVzRnQJApCeUHAmcA+Jm9GTcbrtAiqnSE++Y8FT13XTQ4iSo4IZpFOpXA\ny3JWT2ic7Tk1AFOBKy5xhk9I9fAu2/L3XkWZiH2qQiJyNnj0F/xIwucvzHgC3mXo\nt1yga4qscjM2k7l86nNyDCxioF0QSYYzHXLcLzUtU/LjsJlG77ubvURhWtnNRTCB\nt4TcZaqDFHwp/fCilOhk6tO7535LS8pv9FdN0VGY3lp2l5nrjkhbaS3I+TVc0ZUJ\nAygBtsUkyRS7fLLnRT8MNu5pRqUO4S0M67owo+fMAB1OYt7z556sxZbz2lKHt8Ry\n3GLngBGDBgm2/g4ONGt3h9DJOjmiXfvIt3oV0U3q/wlSYZabFcuUcIJttqn36YCk\n8pt6hB8v0dMdGsZWTOdDv8h0VEyyYNqNlTnDtpmOZcoQ+u0LbNJQ4xxD28XNMmAc\nVwe2bChWHpym0Q/yHJ/9Hbj6HNlZW4EgNYGpbUeWECgbbJ5rwzi12itaiqPWs48F\nGOwweVcPJwvRZAvmeHAvV9JIooFD8YUgYf1dvIIKiHWWjN4QgPdPYVimUnt9u6qZ\nKFvFA8UAWwxCMsK7Wv16bpBWALTgWhL5L4UQsw==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAimSTVa3V3JiAgAAAAACKTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzMFoXDTI1MDIxNDIxNDMzMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB\nRjk4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw+Pdsh9/5Pv+zaOJ\nmdD9B0irVA17ZwPQ1XKmLZeiu79iCqN5MLapEqIdPm5rTRBX85AxBY+MaiKv1VuH\nRO9SgeIpVHrASKo0mv7LXRNfXRQVt8HTCkYVcZ9882Lhw2Q4cmmsmqDK1OBFx7Gy\nu1SgBLX1LlOWNKvfk0DPOIhh/NbfBG8hIBOm8XEwyckTwtWwGYjxkH2Y5geE1yvv\n6/6x/aa6oJ845204KvTyUQcKrpstYzW1QR+jHcqcsi7e4OrORFu1tUdAhLEe+ZDz\n/dtW3ZM8Vn4/aVgo78OZIN0qSPm2KEbc0f0eEVyo++7UfsW+WcnvS2PCGSuSrl1b\n9pNVCQ6lWCWYHLd/09HbgSiR65jTgS/M7Cogtt/bVheH68oltNnXIeO5k4eWGRMJ\nUMaVSFK6GjXrxoDZooKx2G7QadYjhuDEQDJBrQOoeYIhieYQT2yR8FRhMTnaE+Lz\nMD01xPHXO4YTyPRIDFBE4jdQo97ld+xAdR+XDHNADa3lwyExIJHMSVqzRxCGf6l1\nIjoYGViaVT11V42jnNlMH6KtFaBx6dhZq2raG3F/8IQnGh3qzKXfBsFIYaK8u5RY\nXqgwJyFUwcON1Q131KonfeEei4rNrjQjRg7sIMVy68JKskh+ncPVEhSR3yk2weUL\nw9i/wHMQPC75KE1LQgtDnPRm4gUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJ1674iOn+cSxt5v\nLyirFWTXAm40MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEABbdaIzd3vGbZQrrfy4P6wte/OrilLWgD5yCuLnqnJ/7C\nCuH+9/6kjg+SoQrLcw6Dgq4YIOCPnf6slHYJQ83yBx4waK8ZEcZSmCvUuj+HzeuO\nDdck18uUjkP91vfHVQ17tKntDAeYhJ/OXyYz9dWD5sx4q5yV8UFE1Zo5wgLNNgWH\nNGjAhWVbczw6Z1HESWJemKgjnk237fgrGF3Jwilt4zniRlzZLIvD2XnX7nPMdWAy\nGz9WTWgnnufRKua0X49vZO2bKTKgbHpOt4zeRFMXU/gDSCmWE8Ty3km67bluHkeg\n9+W6N/zuJfMENdRdUDVNGizhZ2zg1WprFUAvsQBTKl9NbqL9IRgHXfaBaSJWh/wa\nkYKtXvskD1YzmUU16T8f/ymdhUFV1ab0OMaE0oPGa5QrfdSHqn2rVb2L21Wmn3C3\nYkwn0NaniE2zzjhlJGXCEnmJ23LNKJYx8IVrkAkEC4jl1JWdpRMQy4HVVnyJuUow\n7uLF2nuo4oMvBDx8vm98RvNiTTRnc+nl/FxXdPuc9izLMjkCBBz9l94HlBcRH4BB\nzHXVpRYgxzpstoNPSjt+P9oE0eqmG9A7EsybXY4tjw2maQxJF2DUmcGkYIWxZBFn\nE1fv2VIxEBUapJ9cGBc92zFqI0rUQxAEd1z9lnC4STWElKdo/xhpROXWAuDLZCM=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 32C6E576663FEE80D64CDD7B18E5603863B3BC8A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfR0YGdIcMwmcwAAAAAB9DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzNVoXDTI1MDIwNjIxMzAzNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0zMkM2RTU3NjY2M0ZFRTgwRDY0Q0REN0IxOEU1NjAzODYzQjNC\nQzhBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzmTBHyELrpLEvbNy\nSyyxKvSn8JroiF7Sbkys+8Ho6iBvzZpo2YeuFZ5C7qVhOoh0OI1omA6L2alz4ZdE\nOjEP/cv8vzNZIJjwiLnT5umigIEGK7QvA2QpyNEHZ1eiMkj91dE3VXfVO7UWWla6\n/qzjc4nhQzRyNiAVfpf61Dt42sB92j9c9vu9449XNLVhGw8mq6uGp3osbqfAxIss\np+trkoMBDVBqrdBMiBpsP9DLxf6d/zDlCWTOYGVuvXLGbGmag1rovI8Ik1rWbL0n\nN9O7ZsgjOboE7CVdyhYq3NgL+0GnYeOBZGS5a0HVrzHGfVjFy+px9idWb7hGFiQP\nrnq4tczpKMTxLhJw/b+84sPCrNjwgy2UkgAQkSW3unAHe6GZAtYtousdeaa45UrV\n4UM4/2eaune/3cPbmu7O31iKSGwrNzOUr0hqtg7azXFf8Uw5wd3aJLBogkT2d2Xu\n9NbRdA09y1emVff1NJe7xKI6y9CapMr9N17OsUJ971CweS9CUrcEnvI4VDMFixnn\n3rt5SmJ/S6pQWxnAs/+49eklG8L44dWBSZ0uc2qcI00IqNv20s9XpXrr9hSJbQQP\nFTPztEqjdHFSsm6MoCH3Msli6/FDpteZIT65EZ29TkfzmnvgSuTbyhgZGficpzo6\nI5owVBo/o2yIoeoEAykwymVB3TsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHnwHV+kUDrHXj9C\npbVSh6uBq+pHMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMGl7OSBvKemq/ZZOspocQECRIA64HELmrgKC1U2rsCFR\natVeeahgaAast81OUDJmhpCKeVILi5/I0wXfr5M0rSZE8rywDCsYc5vNTtPik7xI\nts+oKPrVVV8cyOE6V2G6VuPHotnQ3j+c+kqxpC1U7mDw75ySziVpSXEge54Jkewp\nn++Kq+wbBqoWEpq0SGYJAHNUlv69jkkVTWmH4CAVyb/GeaRLOwar+fXXOgTD7Ulr\nTP7/S5ezJ1y9/4B2FYTsrxm7BwqKv/3092OhRtb+DzWXIBMgSSrFHWtBgR02IC2p\n9GTfjCe+XlPKcyW3uVBWfWp3r+7iB6RFvo1Ye//KutrWwSalhtR6iuzVSZAa36B2\nAxTdHDLkc29+vgY7FOlTGjSV7UFlCMXJz9nn23kce6DCrxkCgSkWj6/LupnDZKu9\njfRBKeRl2C728IJjoE3m9CyzMstE1aDxNHZAEpVRNIik4pKE/UzlYCDTrfoDOEc0\nctujbzS40qDrz+SxxA11ulIPUha6aoDsyTPEJzyoQDICPgn6uIbvy8L7aK8DVyDh\nBYrpGp++8LERDk998mndP9ilMezbO529EgnlFQfplVjaPZH8nNWswezTSj0u0bFt\nu7OWNx0MqzwtqdQU3FqtizVNt1F47WHwuI3y0thqFCM316WmCNSIE50fsGJWaUo=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 3893cdbdd873c4233315e1b13ba96a0d23cc10c7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABKybt6sVbTB3gAAAAAAEjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDg0NFoXDTI5MTIxOTE4NDg0NFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC0zODkzY2RiZGQ4NzNjNDIzMzMxNWUxYjEzYmE5NmEwZDIzY2Mx\nMGM3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2sCwYI4jrU//qGQw\nvfypSifHlzMU7DH2CbnLuWxiUlifulNHTINeC/K0Rt9VvMWsdpyzSFsCVuXj/YhE\ndWJME/w4WvSsnPQ67TN06eiQYXPaOvfpGMwDrKAyVMQIKSA6blFPLFgOIuuMLBt5\nDlHw5CL8ZZtm9fLf4xfWgxeDkYMwcxgo91hqdLlW3PHuCWSQVEDjPEssTS2XaTHr\nuHqUEYmBvzCo7gQiRsfUJVHoJe6gTjvAmB1Wg520nxpdEwQsNznLXW1a6sM2/vUQ\nwQ9nvAqsTXXmiKTO4oDRcTrmcVb6im5HU6t6phMmqjLJtJTm0wiLEuX5QDaLDawC\nJGokfwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUQU5gpjg5bBlPx/TCpWEQ+lq22fgwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBQEBE0\nEkmDybn9pa+121YALG1AFQ6mOOAcoQqfyKxKF45Y+Biq9PCndAQfguPF/2/uaRD9\n2o6G0sAVCgS1oTO6MaaeYbAHt9f2UoTEhQr6Y2Pd8pTidbwRp9Ry6mi/YMDHU3Vd\nKvPESaQypEpfF8DXrfjBBdFN/3LwB7XEH9z+JPdkyBHhiJkftFYIx4QukpSOinp8\nTqA3cAsjZI5VdmZ7pLARmGjSrwDTlqT5BPGt2GTr3XePh3jmjH53il5pPZdzwWe1\ny4sDXmCIWPx1WRiZblw75Ei7bxG6Ju3FINrpSxjhZoJ7reojTbvkzTD8hP87Rb+v\n2Hqz/D0emTV4f6UNL7AT5sFiTG+Hizo/3dVEHjLzv+03B6xFVekWYYPwkvrRBvMp\nSzDUvtru5oEJ57AK31UrYTwmAQBYFn+5JX3wE4zKFotrRksfg+1/4dp7fXLwNBxA\n/6nYF9YvEquMcWq+qIC+ioZfK+YHdzk20NeWYFIeSamLXAg8FbmndhZTzvne8jh7\ndAkxzSFdLjOqxvo4QRb8VlKQEAs/yYup/lxTioyGIE1c2QbqCPszQS2sbSPffqAG\nS6dpHfEe6TKAAAIbIqng4kznxZ61mY9qfd9wtxB69adiUluXLXEpU4XPmolM5tuz\n6AUxKVT7HfQX49p+3PTzKAeaDqfsKG/ffPheag==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 43325af5500406548930cda9a67dc78067b97801\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABjRJA6P9eWDkwAAAAAAGDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkxOFoXDTI5MTIxOTE4NDkxOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC00MzMyNWFmNTUwMDQwNjU0ODkzMGNkYTlhNjdkYzc4MDY3Yjk3\nODAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1Sl/b0nCPT9gkCnM\nzLQ7F3rhs3D8Jx1eH6SgJ7ox2eKJQK1VYu2CI0QqeUm/rJoVLYnWoVmbY5jywRl1\nAliKg27Gl5fR6Too9Pr0jXycd6tRpb6e0aCONT6PHzZrmncu8iGQWyzPs2mBl0o+\nRWDti6WWvs0DJa88fy6IZ+9WFzRBX7/fvhmo8v4YeCZVRrMefD0KPwt6mycAH9fV\nOkm/bYcAEbqp7t9xEW5bMbDuTqqRf0DyYAsgwC/DVkNj/kR4g1u/cqE2t2OgGPd3\n3nu2VMx9NutvABpCB645MjyN+UfdWffKSgJvlxggIZTaKuNXUSFyISgt5mddj3WG\n8M09KQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUoR293aI1X9HXAx/ThC9tOKoxyPwwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCTxttT\nBsmetJOxiy1sF9wB7hXj1qXwDhHCAdvDFAQxmat9QNrpZxKKjRwn8ZDROTfRCroX\nMue7wdF4yF9dkPAKMH59sEqtJbT+ZE/fxEs1GhPVkRVQ2JlrH50iyh9v9XQ7rVRM\n3zI3HRjxD7moWuJkxKhx5/WN1rE9bX/SwinB8ntp7SI2JY0U9U+GhdyY7W6c/5cH\ncqAWgcOPhvar62tnFoxXRd9GbH5tolMbVJdQTqJh9iNGsj9K4PbJAOt4I9A4yMVw\ncewDkVBi6Ae068iGQyrHmMnAHkjchUU9o+I7CRk7tPiTWcIUPrZYQvu66hKcmUGV\nRW2bEnzCEsY0jjCFl81NxKexAOvbz4vckbHBfrjO9JDV/6QtiA68zHrk53h3ro3U\nMRgiXNuOuCqgn9dBNuR3Pl4YCzT2OCQPeAVvL+YhUC4mKrsFChoWW8AaHPq+P7Ti\ntYqyt3mUv5JGFlUAlQHkBIFqQivQtQ+Thy6D8VUNB8tYLeK5gY2az54M49kKU5UN\nli9uTTbhCipMnJQYGrrSdAQkFNRPs+oPVz6s4UfD8s/pz9H2OmU/G3e3OyoIKz5w\nL22JJFSpSvy0R/hmpNoQadHFfjReJpte6UUNtsp46i3+lmqXuk5yfFkJec0FGJDb\nQBu1xpXV6I36GuPf0p6ONUqsVFPsqNAmkqLIZA==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAFs+ZhNWartvlwAAAAAAWzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgwNVoXDTI5MTIzMTIwNTgwNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF\nQjNEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0COSzgikrMWzQT3x\nS7EwPhkp+bdROT3HkN7knCLkIEyDGu3owxPWZ1hBiRo05K/Iv5UaARWAiN525kWc\nUWs0yM1IPYLTNJVEGMQGoZRKsweHFQB0q5V/BK1hD0u2xwaCblBNT5Zd/+Seq0xZ\nnpNsD4TsUPRxNST+xbHi4odxrUizSwllXexInKg445vdG6y2YW1PEvdwBMi0lLRP\nwd1Yd7eYo0S+qSBrqTSGhBgCal4vM8RCe3CAcLxJZzq37MGrMkPW7HYt7laxKT9g\nrLrWGye54/8ig4Maf1kvCYbvtWapZFIMcpNilCioNJqykqy6zkHo4bqd2RD8i8Ma\n0O8dvQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUY6qiPN6id7QR/S7xIitGjOMA1kQwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA8jdxR\nLnK8fBk5CLC/9cPMw2TjuoiJl57fHv+9xajcDFCI3ZXOBIhPu2S1VXFFJNsmRRBU\nbE+Z+yeRJEk/X+yImY1rkb5fBUbF3QMkapuXI9zkYyu99LnMd+D1jzbJn5+DOPdr\nuzZKCzciPcj9nOTTLNuvgMOeJB553hT5H30rgHhEad9nuvgPeUQQdNoA9MPjIE6R\nj5IIYCO0jwFvok3njCCZdtj/I0i4KqCSukCPNLok3g95t4xOsaG+Eg3o1JKyOIas\nPM1Ggb9aItbtzZ5v8X/4nwRHefGY9nfD5h8RxXYIuHVNQAi3E8q2u0m+Su/4vnBa\nnRHQkOZCZWB2b6770YohDMYLDjPhEhnTeH5DpWtZdNwHhNZvoAfxfFNU+vxYejb3\n9AvTrheWdj5sWUPKc3YRaQ4e3PJIusOvUi17PDhc6OnNHYi0HU1g48vC4CI2Pw8x\nsUaVU7pLlF6IP6nbw7WkVFXP6jSWMoChJsfMiyoiVe4wby25c+Oep9gdwqMyz9hE\nzj/icVs/lquzqw7CvvuTbMcsz8A+0NKrXGjQDh0tSe5oeNlWR1IJBEw5FJxE37Nv\nPBAW22lBVSKtPybXHcPZey/PgYja9Auw68e/yBum24sBMfnUfxLRAAtMb6FVZGUv\nAMei/QCAzZPCrTdFfQpdy3jpBw+vudKm+FnuHA==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiOERLFHg721SAAAAAACIzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyNVoXDTI1MDIxNDIxNDMyNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF\nQjNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApbShaE2l7gbW2Qt6\n3DZVqZ3lRszJ0cp+YAgif1/SRe32EjLv0VJ7xlQxIbohdV7UlzF76y7jJNPKDIps\nImBWjacJ0NLxHNk5cJ+Uiv5t9IDFfpCMV/1ODmTlJE41/Keo8oXqqiVh1N9/FJ8B\nYcPKoVujKGZIWpGjlyrVPSfsyW48cAS2RX6Zf9bpX0eLyTLYDcUFfv07+Bow6FPQ\nZ/3jZkVbS+6NTY4LJCUrPYZTtLCDqsWPRMVPO4+ifJQYZUBNKaio8PekGaliIP2C\nK2n8XMzza75kx4rxsEK2ZJJ/WmW8hO6IydUqCc9BCnUvxXAE5wlVFXGwLu78vqtK\nOFpTLc1xwscfd1UkEOvj7Ok0ypGpnw9wHAZcR0E/FwhB7D2NMzFIeQ08n/63G8F5\n4gZ2X9at6GiL5Ithlsa0lIUQOj4w1Lv8aGfUtBYpudidPbLQSqI+aaiK6/SUXq6g\nOevwj1gecDCbJWOb4CEiiuFxWYOCoS03YNOf0Xcjmdtrk1JJ08Mi5fDdKq7yNN7n\n3cAjhomyWINITzGSieX2GatXrJF7KDoXD7NFRoWjVqjVc8KbfIuD2d4lhgNLf7YQ\ncqqsy4iLP0Y4RBQm0w80eIeEkXjnQsAvBAvLnX1/+gJfzmjUAqxLrpJFOMLJsUsv\njW+9mI2ohOpm4YXFTMseO9MAT2MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHuym96qNtIYxqQg\nRprt3NEge01kMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmuNNzRwL4JSicpQCyzbLPlqxUCoorxetD+1BMjmGmNE0\nyiWy4ylYJ4LbZVf+G+mydSEgP56hJi9AVc03Ef+ZWQezxwX3RVQUy0RfZ68/N+Vn\noGelkjC+ok3sTFg29sTLUZ5XIqovuKsgfs8K/xFGFTxwGs8BOhypmR32XuckqcGg\nRsQMHi1D7fZn/WGyWzF12VZf2x05F7NIWu6o3UrQsKSeket1K5i3FOjYqDEUWYSZ\nxbuZhiScmqZJEwO1++2vE8Z/PrVg2vHQarkKb8BEKB1U19kPA8TSLxwuIgX17j3H\n4awqgNNhTh83GkCJqbfbPfYJRPwhYkb6L4XupB/kQ7tG5dGVGRtKuFyx9TwWQi9N\n3Dld3n+vNDJv+pG4oAzoEYkRMoOf30MRcXoIF7AEvgbeyGEnHYCvuQaqk8jZ5RTh\nQFzSh90r2IrqdB1XKg50aI/BPLk0g013/uvu2Ec8T7SBP9XavRNmVmSL3Eq2s92p\nEvNcsKayDlnNDVMAebGwVCRW0FJzVWlSbE5IAhag5rO+/tisKL2f2Jm+nxQDtQvi\ny0MI3rtOykhySL1cOmQAhjhyeZ8aheP+NX8wwsWwzHgdFc1Qb0/K1YCduzOvQXdh\nvLvD5MQfr0xKV13r4Gp1CVoOIdt6fFka9cOvP01Q43+W1FJtszJyVNrnkuTad90=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 4c4b4d648908e45bfe5a10d36387a688aec1cf78\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAO7cJBmW3TbggAAAAAAAzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDcxN1oXDTI5MTIxOTE4NDcxN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC00YzRiNGQ2NDg5MDhlNDViZmU1YTEwZDM2Mzg3YTY4OGFlYzFj\nZjc4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvdhgAKbS9mrN7+yF\nIU+Wqw8RlU+75L04zpIY2p6ASwRzo8oV3fUwxMooX6CKzADrCKypLRd+T7UyT4hg\nKAtVS3hvzeaU1FZD4jm7/2CwevFtDq6VqjgmAffSuqs9ma5hCG0VZd3ngxrKvFaD\n9s8t4a094dusCrdVyLuCKMMy3GWFSsg9913qSykJClgFsEBmtVCR1F5RvWzZpCMz\nYgq6gEshM5KzW9JEj5gcfE+0gkQzUNhvk9XM7/5qdOlg5fuCdFhvh6PcIn1Z8De1\nvzTN3PMYykxKNa3ZUSxL7FKZtBFycKnylHD+XKE8sbNoBm59/LqauQLFwuo7YfeU\nR4MUQQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUjAVON+vj4wf+vsPQGv/AbhJfA2kwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBG2lUI\n0H5ueR/eFXf2eYeS7K9gMbGjz+O3tDOrWCDLuk7GEOD2TaJv9Z0FeTRMjpMsg3Sn\nJWa3oRb6xjeA7l6ojhNh9nio7EHZpiK6vECCvI4lDU9hjLdW8dMaO0FKOLyOPeYn\nlI36RPtW03pEjGiQ6tcwF290c3QF5WdpzAMIqdL5RlIswg1XCdEHZ0XyfnYNOFZU\nX7rXcEucmTzZi5GcWrt6bECV+EfOFKAs6eyI2uDy2bdpxHoGugwZyh49YmBi7g+t\nrRfMwA+8j81EfAluC8upoju/Dms39mgaZYZjTAo8/HeCngoMvEuSUUS1XU9Nj/Jx\nKXWZZwFmFEp2jRA1h+8d7XV7pWrq5aUt7u1UENhyDoiCSEa2S8e2IZzTfaxokywj\nr7QVarYZPp6Ml8cYVPCLAGZLIOVFsUjLAUR0k2O6nbkSKUtH85YSsdpTA9142Kvr\nSM3RNda9s+cOzUW+q55B/tK/WciBT7NJj3kfR7bxTi/hnA8qDNntrhPySVrL9e1i\nwaffTQLhgQeIZfP0IwnksKMOAPqTGnsRW1cOE3D7/2Rn4tKDHlJmiI3pLsy9QBMK\nSytoEdHdxzBLIIbo5zXs5Fh6trszEWdqh4EWnbQOvtYCSyJTEYQ3VEL3guUqkZoD\n4Jkcp2rIk7UORHYN47BqS+Z+GPMONt1D9MnPJw==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAGEt23sn6nf7QwAAAAAAYTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgwOVoXDTI5MTIzMTIwNTgwOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz\nQkQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtMxcH88ZB9hblylC\n4fnPFy4uSMYlVNRx8gTi51iiCxM5L/783xvgae9rdiGP8x0BDjBNHHm5/2m3yGoq\n0qPv3mW4KsFuoZqFe9LSlmsXUlstCS9jqulm6mBACX5jmHHZdfZD+1/+3vlV4P7Z\nxbLqygcIjqO/659oOXP2vvlZTi3eA8QSGMuowhSDKWkNDmy6o7ntBGZUThWW11rp\nx2k2Qa0WpIu7kpn1oH6PG/EulygaL3L7vpLZtEoFzYiOq/8LksgaDhEpyvK8wAbG\nmGWvkwq9PdTlnCSZP0MfLhdXNrRORENmKKzkQGDCxXAi3gLp6N0OsbBQRI8tBH3x\nJTlGqwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQULGp/EUZJ0nsBzDQeFckAsErFjfMwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAdk9gc\nOu9GblaU8RqXTg4qyP8WqsSWh8tFKuL5vNX+M0UnwaNXVFuCQsx5HDH9cYYa9n/i\nwKeT8Ke43shX4krqLHBjigtKOvUXzkYFxR9bFgr9UgZKRkVnDwyR4v9cGUhwJkeR\n83dbKUymaQbJoi9iEZv6UkqwgYnQjGAo4pKmmvLy7B6+vYiEX89EcMyrtlpr5bYC\n420/2KFnemq6QG1FJ00HBIqdCk5OOaPAiHANXPQ3V/hMkZr1LlYHgXtsUYiOetb0\ncDUP39TwJChkKv5HWbUtlQpbWb7uMKMySE6+8SujCXkmI3lsAviXC6U8vraNYSj3\nUzHuD6XCd5q5EUq3WgZzpytSwq6nXK1qxa5tElSkmDs+2HeCT1OYDm71kejFMf3x\nsuFRQa91oMLul8zFagZ2YxHn1GYI6mFjg8L3BEhPkyOsfRAAYM9GuWOfzdzdxHYQ\npXEUtvF7BOiTo+KsT7NyjRTh2LoMb6w1divNVCU2hV8dC97D9ms43GwbYqnvVSno\nj2vWogH+85466dGCbsxBbj9NstrfYzl7U2TiqANslKCxqxXguZGN4sAlirYqgQx9\nltdpSC8fvvs2XVYy9UfbHyb6QdmJ/zzlJ7FSaJ/VEePX0Y5rMyaY+efEGEU5wBB/\ne7UQ9IHxSZv68/t3W8XcLXafVTiPwSYlOzL9vQ==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAitcE/GvRDoztQAAAAACKzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMzMVoXDTI1MDIxNDIxNDMzMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz\nQkQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtBFuX51q/Cfknh7L\ncAmutBM6M9SI0ZMdSDb3nC05Y8Ky4isGRC8SU5uiAB1LqQy4JtaQkEwZHG9H5d8O\nXL6cOdy4Il4Qs5W5AZw8et5Im8KyQxFE1o6qVw1vmMrG1vH/hXp9t+wG5hl1UTac\nnqZnqoZ2887gQ7VodIRACfTHSqLLsWx1SS11E5hle/MhCwnLIRBuipDAUnobH46a\nPwSsnK3yx+Eio337nEgxPdO2MkG1kQnf7AifCUgITdGu1qgDw8Ixv6gGBEQQuxCY\nnVYSb4jYfzy6M1Bdmad5/HFJbrkeC1EwzihTKqFsLioMSRz+sEYePAs6X1P/XOQR\nYM3uMMN+QR6yGchXUQtvqeCdN+JJGwdGC5rE88qy2T8O105MipG4T6U9ZU6t7Mhi\nl3Mu65oikYQOIO1/+tgzQ+FbeGsA3lgO3HgWCWzvkEZ+HemYoxXw0+E3Wts8RLFS\ni9FvO/aht8XK+Cs6Iflx9uALrp/WE1Em5TUMkm4A6Ma3Pt3GNMCG/CWxYIsLooYT\n8oVkoOg0N9oJKewMYz3B6yWY0jYLc5ABHBF2JUeCy0LZSC7EXwV8Ytdfyi9gs1PK\nNqU7x8NRxpoGCEnGbNPUHGcEiUHv7Yv6mk4Him33Y94KrocdwXHX9TkO3dAHmOA3\npFJV79+xgmsxAK8fdKZ6a0417ckCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDs33rLBzVmOz72g\ntm1CmV0d3zHZMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAYfjMWysNLihFEF8fmD533eQrvUwaUG3AiHkFKKRWQuIf\nr8TET0Vq+9TZmNUudbPygdKlKKuDKRlaHnY8xYqD0TH7jsolqD3TFSfZhbXizJNg\nJXx1GWY5mJab3qPMEKJiLCEakkGaHczyHk/EXa9FcDCoSP24w9hyhHB6mBdg2Wjs\n2CdR2ybnI/9NrNsAPVTNavdmiRuDw5R9nmJeHiCP5QvWVwWhz+dXzEOkSjQ8S/mT\nj8sVZAEBUjQGT/KVto9hj05oMNv2DJiY2CcJNWAF+QS6WL3Q1iDvzzJRWnUcuUNc\njXUeiUZGO9Ljf4MHRS2tqLlgjJNu8JvRhDnasHEgYMIldqgkrbjihSvxAoOC0aDx\ntAaB9QkkuJC38+jM4ivmmvAg7SVMrcxhMHlADLr7N02++0IKwl5bg85RcwUVztzr\n6e2duj76XT1KtVuXsg6KafhRUXL4iyaZVkg53hdV8NiIdqxny+Cn3Iz0ky/hQOU8\nYyf6PP+DXXevu0HTAv7TRnTmggkt68cqrQWlIhdcE6m0EsweoS38BkuZ1xXiy+tl\npAvoVIvmtsB0VDDSyLRuaevR8QlZSPZFy4/rI9/WacT4EfWQXa8TSej9+YamI0Zm\nXrdUQJ6XYXoQDa2Tds0dQhJQ4XB6Zoctmm9bk+VeKHBq1xMckl6WSb5ZTRPHVw4=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 7026D09ED935DCDC44D84D7DA75CCF0ABC1FDE0A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfdKp/WcH+r42QAAAAAB9zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzOFoXDTI1MDIwNjIxMzAzOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC03MDI2RDA5RUQ5MzVEQ0RDNDREODREN0RBNzVDQ0YwQUJDMUZE\nRTBBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1JGM15/ekXdzozhJ\n1idiPmj8jYMuKheY2x/V0AbixeD3ZH3NdC4tnbGaqycNPKv9anOgV+F6CMPMiqa6\npupFIF90ks9fTgXtk00leZ8LRpy2WW5uQQPLprJH8VZw1NQS5A/8XPYH3biCGJYb\nAlP9bEJPmW92LUqk1rOy22ccqkhAMqRscksZn0iVts4eWv0oLev4xv1N6Uyr/th+\nIZaj33lL3DLXvrsvhUIylwV47sgVwRC1KK6r9P3/omRCh+oWq4k8XvUvJ0LyROtp\nPff9aMF1MD06dMkLIjlX/pOi16x6yEN+aqZlkFx//WBGokeIADaf75wTl1bj7IW5\nUFwQS9zwoHA/FjyIQ0RYJcQpQtO0tpBiIXlShzKjrbAEhkbaTs3rWMP2ILUyidJD\nDO0cbFFWWBa9d+AjAVExlf5EYRB0YoDroUSnrH6EzmU6US9QYUQBoaBMHS197RKb\n48ad4Bum48F1mQuSvRq02uaUr7loqr3h7Mu4Vk3aS6YwMWQVq0kD1A/9XIPOgCPf\nCMnFe1/oIjuRFaxu2Sj9W0fXfBFicJCKoSAc5j65/Hil0VdSfoTbfg7R0Jy34Baf\nOOhyE9im6ls5kPoh6BRD48VpGiF+ZViQd8nh5pK+HJZM3nD7nx2CyyseEY/O6F0j\nVF5f9Gr41M58fjZ4WIEEKrt4wYUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAQULcqbIFTm/33L\nDxPqf4jF00bvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAjbCKvToJSC5UBUIH0J/9kf7m5FOk1oHkDH7YHsp/3Pk\n7gvpY44uKumVY1uNK/ko/IrkFfR/aV4LNVuV43gMUC1gpjzJn/sxcAK+YOCU+R4H\nnww/eKljrh4KQ3vjbqRvAVcqAsIsW7QaCy24cKxqnomiWy/BmV3v0u8kwKYD0QBh\np5CWzOEhiVdObXl+0aXy8aOb94HSC1AxkU3CqdRB2ITMFoxcO6oWPT95cds/D1Uo\nuvYWgtXahU9Ccra8c+iy4OZqNKotBAtUNa2d52sCxDQo8DDdtDRzWv60YmK3F8mL\nwIKTMbMVT42nRKeA4AkYZiGboaf7M8U9MkJXGJRizra+TJ6agrSWyU2o/ZYgcKq9\nV8+x8rs1Rkwdu1A+VPA7UDGLGdFQloqqmCyC2Y56nqXyea2rv1rjCYo7BLDBXTo9\nfNF8oYnwfaDP5v+IPg1OqmZaJTDe6W3j5c2lZC4sXK7A3XW5yWY33JGyg3i5U9/r\n+xI8MSqEfSQdWJxVqxVeueCtUqWbopTFsScgOu8MuNdGVy6DUQDglL7gCFeW4JZS\nFG0G94kU2CmvCSo2gZAHj78X4FlM8Fr1GJHDQnMZvh49tFyI8Wv/xGJNSgBquql4\nWEgn9Hf3gBJirY3W4CMjTZXa58ZVKdIUBSIUDMq9b8Q3tVIijlYIcUYK559Dcwc=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 7568FF26F37D11268567B6864EC72A08C818891E\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABUoAw1d/7kjYwAAAAAAFTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkwMVoXDTI5MTIxOTE4NDkwMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4\nOTFFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxNwtpERAQhxlfasX\nnRuRVaWdtLLMjIBhziCTzmW0nCybZrqkqxBBzo31t9OqYlANmo7r6wUYMXDteSFO\nnZOaEOXtEtE9L1glxohpJ2DQjEUTrn/4fZQsoBKttYwWjoLrAI/yCl5GjBxyig/q\nJGNLTDiYarX3PhREIXccrws+tBKhTB+KOXlSufDusk8+cBtVDW5XzNrBV/euwJwx\nMw+lkq62nynp8rvYaO4XnH6oPaZd6YEO7f7EU6AjEtUMfyYquHQjjQif7TKN0EeP\n9faXp7f5jYVdFjYaZQz/8GB3lyrs0+1ogfV5wrjW9v+PaZnMMUYW5X6r1J5RcFze\nTQKM6wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUzRxe9GhIO84Y3yftIufJKwcpEFcwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAO8jgl\nSWn4LQhRPgh7K5TzGgZhhkRxAJLUemWVd8ItI24rrhN7vWDEdelZbOKc5Guro9uK\nfznJiXogRSGA5W1updTpHODvDX0M9Kg9Un0A9kSlXry+TGP7bRpEI2qOClBKgDcQ\nf2ePum6ZWDMjo21ISV1NYtcIpSzNlUzAZzT55roHKEmsEoCiFbo5tcrLrRLyiRnx\n483+h88YZU6FV3aVfTnkWRGwe3c/M6GvrMdk53jyAixf485ne3EhHVOTl5/JT+89\nlfk49SiS87KjTbxZIIksW9hKjzSutNd/eaRWYWW9M/FONwAfu6/Kyiw61NDoioeI\nKSFt/MlaAQU0m8B/vWPz0m9/E1w+QEKE5F8A7/nU6p+EpIYaA+OxfsHkHZwRqTJM\npsuuK8TSrOC0ae1P4WVLe7Tuis5fPSqD6fFM5lSalph2WbRZSNlxOzolPa9dctxG\niHJEOCoWBCrbwDdNEZoCMuKNUydgt/+zrgqBGjFiUL1RkZpwisTQWnRUSSWFGhw6\nvpVbH8ab28hXAurG2yA03BcI0XkOdRcmqn146v13jRfQQJ6iSwushQPs95Og28q4\nQr4+ljnDiaNOubSRcuIZnVHcFpo+VmXOzoEbuhj8bPWcK46oWKjxBqxJvuYxGDsb\nqDPd314rkEbKcVwZmuJ2HVKz5NXRpJUDFEQo2A==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAVRUrDQQYItr9AAAAAABVDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDcyNTIwNDU1NVoXDTI5MTIzMTIwNDU1NVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2\nOERBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzaK7q2UfYFM7lv2H\nxhzOD7/aXf3QNrO5b3mFKRgfeYuOCOQo21jgCsQiQnMdSA1yo9zb07Dba8Ltvwcq\nOimgXSfwfFkv3ZazTHca0KFZ5LYMLzDBhAPBAmNglhPy1sQ7PK1ilNgPyJkZ0U6l\nnJxJgeeEx0x6klTLzIybrYJhFaunbyFZ3NPGVyCnpbg/SROjjq8hqOMH/iKLODrA\n/Qw10T4kHxzKNNy2TCObwihT83i014KaOJUAO/NYjuBE1snibRhiVc+Z1YTGRwQH\ntrl6CB+e8JhvU1FBWKSPZBdgnctz6QYoeXV7JT/c9dY+B04PoIvbfZGzpn84cd/j\npEDmcwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU1fONquTrj3/nfTVJFaz5dIZwPE0wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAk4EU1\nB/cv15H0j2/j+1VSveA2yhM6nMiEZR+0pMyQwlvfPveHUUvs71RfVa0T8FC0w15Y\nOnKuS35L+NMeLJ7yteAJkUU+sDwaW53PvynTFyTjGE1JMVn5MnmUDvWuIzAaTpij\nBj6ZyqSrvFXvdObilu8gSmxKa1F9VgY7pgG9MrAy4Vp1kIQ+YPAqzHJph4Y02M0b\nK0PbZCVeO7JIJ0i2V0vwt3cTpu19c/xBwFIuDTBWTQ96dz1tcgpw1R5w6zXYImpv\nxIosUJEBtM610XR9UCLWOEUp5ywaxxhmzUbpTQmkJKb2+GNp3AKPkLyxlHWjHcxx\n4Xwp/t4eG72Td6vxuYrx1AyMA40W0HULgVFniKQtWjXyiJPTcXloVMgJAgwsmtU3\nDSMQ00G4Ig4WKF1fRR5IXoT6+w5V0HkCu9BfrYqT2C3YDAdpS96NZg0kYSoTrTq+\nRptfsUEm9dLwmIhjEyKvatqfPU7t8ZxqI4Hxp6ISm/XPWm763Fj74A5qmDgnz7bD\nundmph/IXSA0B3yj07HaaTF6w3Wx4BBlKbF3xCIV+K1wUzhJRXG5FZvFjuFYSWYb\nknlSmAlcUHLh6QMAsHCisgs287e/2Kf2hAPrBl18ERiCy8JT2ygifRynYWu7Nswo\nAGSKxCiAvwysM08MnGzSONV5HoYSO2/j9YrMPw==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcEFaX8RLnJVhAAAAAABwTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxMVoXDTI1MDEzMDE5MDkxMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2\nOERBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2AnezVVus6ElFh35\nb+fAV937USpGCJ8msKU2AzL1v3FGHoXmy6ERQFNFy8nAOv7T404VwJEdLlovQ1Xe\nN7f3LIAyhjCuE/p8QL2+TnaFwKkZdpARL+NYsnrA0ng1RrPwGoeljax6Sio/P+ya\nY4F3bFUaC/MYAuRQpv/HdK1fUsFAZpkggpOfSrZglgx3tmIa3gIFSfB7jtyRw0BW\nrB1cFWSlKNKcyfG6FDor4KuZvVol423U1M/upNiM41PljK5HS+YuMdn7ZgPY2hgl\n/xPVUJD3pPgN9o97YaiwbJ0yeWE79GeyKjc6VCkSIPlXTvAegV30HXG1RAnD40OZ\n+NsebpaDwv1D7WsdwnkyqwFrSsBmtBndDPPU5e1kpzxymYA1eeFEkZRPVZi3/7D2\nAT06fYbMxb8gNkyA/YyeHadOYKpOqOV53x9oMvqnz1qJgujwcC8Figr2EvEhqN8V\nyy5M8Za708aNigAXbxWcWAvOO/N6vmz3jc2A6+OrulJyCdZTNf25YIRvO1Uot9+V\nMAXKnsE7cTPh1ZMsC/sQZJQ4L5BDKZqPr6qh2ncvXZj1rDfPFjEwtXXR0D4+QNYM\nN+JObkFG1aLTlnBYPZZOkWgbNQxlMyYk3QeE3g/NUBUxoioSo4zq0336J4+mLcvZ\nyU4AnI7tU8QzwooWg5r0rnlvUWECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFE3XTfS95GHBVgF\n7xiZcmzMwVTSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjrU8R28/PdmKm4S+XPQKB2xg3oFgrcr0GdHsJeFDxH1D\npn2hs7FF0AbqkSL0SwK1fdmX8wH88LvAC37so9OoLwv4/fz7sAoKZzQRbsZlBXSP\nf8ALN1xk1PVximZnwCOCLcd3p5LicqwOpwDsJo7hOj1n/10IocXgGQ62b89wR7/m\nLyJ9rz4iLxPBDXL79VKjsDZpzdEgEYEeuKntT8Xjpzz2LcqDZ1+abcFAoP+Czn/e\noNsrjp+k0i+dacrhRAEoM5PvRze27jDDzUdv69i1ojY3JMfM0jivexPVhivRpmbV\n8qhZnnOnwCVSSFDVxEFB2GI6GYkNmExGcZHMIMX9sWycWjwXgMxYYetQnu3mJU1B\n5j1/cGslEsHzaeelfHRKvl4T29RrvFf+zZEgOjegY60g4UN86Gpvj/6NYAGym+1C\nJsXMgpo3HPelD+1pIIY3DOzOxv2o+k7CrJam43kzCK7hoWZe2kwdQoYW5D3dLnQc\ndTRShdNjOfOfRnfpecjasNNlaktcMeTjcTbMpkjiH10+N3HlHfPHZfI4v3ltQI+Z\nhkfa/+TDtXZIwK+cYt3Daq20u4vZOJbOaKwpPJ2Xr1R8+SFhHTpQOS2giPl/IoYO\nsOHMXaK4PFo/XcbeFhapE1tuGA+l37+/p621pHIIbC8C6a/Flptxf4a2bXaE6/U=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAkt3xPKTWp2iAAAAAAACTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDc1MloXDTI5MTIxOTE4NDc1MlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1\nNkU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlOVrc4ZONFwof4f\n0fOd1enhLfiG3tErY4Y5DJOu8P+Ey2SWNS7FCv7ul3x5BDzAqteVMHXpEuGiSDZ6\nUngTT6pu/VcEoI+XejK9LH73CmpYPcvSDHDEUOtpbzMfkaFZbTlL/pOMkxezTpHh\nlLLUWj51vYFx7mDtNscIJ5i1bzg4cLKNVNaF2yFq87VquHItJfAV/2ErYRaG7txS\na6xEPzbMIeP+5Xpfw+D8LV8uejSqJztIArxmlURRhk/AUWQiNpl4UwuiPon625Zb\nTCrvtakq1Q+riktUpZENW9avAs1/HetxGtWC22eSU+CdUAZyaH1izYBZ0ixPNku9\n9b4JZwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUaq4mLbZKCkjBqeahYc6GWswJHyowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKZCCX\nYacQaSPuG4mGsY490DRGs0h1CuBE8pgn/edWb/BAc7L8Q3AwhKUyb5ixH6dVF+6y\nTKHXzo/4QWNCyrc1W4atHTJgcIi8MGSWP2eI+y68y82ZFrTprmXc/hMd1+OAkbIq\nU7rqrKwLMbXU4BqxRPBHevvkKSEABeL5sMyniVp1onFINNXs9iAd9bCjmwrYQ5hW\nk9d/TJ5r5p7/o2Jt9ePQGWmjk7za6SnkEghtBTV9IzriElOOauC0Chve3XAh7ZCJ\n0998bYqDOURuH++CLYPxEsg89KuanUUZ1yYOhjQq/CUV5NknCejFLNzlLEgy91uw\nhLUOk8Oa/6lEJA/qEPdXFfhPmZTMJxiH46WXxPZJk0L/uniElJmUqNS3uz1XaWUn\nLLpZN6Hqq3xU3pYJAEucNihAVxWscH/Rd7GkB//7Si968FPFFhCXsZ9S0S8FiKf7\nk821wDvdpNLs+Qn0J7wUPiUDFxDeKyVGg+u4iyPsSJxAzJrychZQUkQ++dnDYQp6\n23E1zmtPyWEd3M7vonHWMvrp6wdm1yTrMKWimXFoLofwDRtS7bSc3aQm3WJgddlF\nXy+QV8u/OGLU7GfSVtdWE0mxSlmtOknE/yhDg1fJYyHmi6Hj99wWi3D6Bp/bklqc\ntslhu44kwetWQPMKyLC2OMdnITqYbZhzC6uYQA==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAic77JyLcyNGbAAAAAACJzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyOFoXDTI1MDIxNDIxNDMyOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1\nNkU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0Elw+arL5oUlDT11\nGifVBUIMBeo3EcBEtSjjJ5mIRsEt8U4CRu0UO/mfrayQ5ZIyzt8eEpoanksSYt35\n3bChuUtiJ/EmM5Em1MUZTx2yGOUbNmhgrLh3mPWgGg924UILZ9SgHKCN0NeYqFnT\ncdzqiWySeYX5GSQlpoc6jQmA4PBpJv1JY/4sQxi7Xrb5J68osOmCflH/Gt0Hhnkn\nYEI6YXv9y1/xMFcOCy3nYE53eCxtAFyBu1+9z07gyzwBRdbgMrVTpqK/zXovjNSN\nEw2shcUCmUFGwjRwdc/nI5gIcmHh/EdEdhDI1jMMDU9bfdI/G3iWFsO23ZAjmtlO\n6GMSgzmRG9189alv1lKK/gqFZtqVy76edNZdo4lthTzjL0iNLVsV5gnxxwsVkV5w\nik3fGbT007+NVOg5E2zpSW09SktCo6D449w1nnepqKgzyyBIT5Zbft9f0P3ivLnt\nXAQAjaqPALNj4q8Hkbdkf+xhHSSN62fJp+t24zXYuzg/kviglsh+hv1HZKXnrVtT\nh3CTj8IN+IvVHrSNX4hCD+axIbrRiMSlnbcCbhQB2/hvziuFevEyR9BAW+RCOumA\nt0yNE9e6yst/mhL/fHZsd49KLBLYc98dW7756M5ikQiVSieTAzD3boZDw+a3GbGY\n5ZBr9P/LAJ4xkh1NSPAsoMf6RrkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFH37korFgKQufprF\nsanJZOsWbSa4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJ+ZSDg1Jei3/hGFHj0JtVIR7a6Lc+MF13gyR6z1sI4HV\nDReqbfF8QY8z/zY+26y/U4cCy7BqgYcOMQrB4s7rcx1TZyga946leUmbAwkdiP+T\nHU/Z9AChLxfja31kXZ/iWdgP1IJxWbXPJN2lBU9ODnIGDfUY+eFwvvT0E2xKIYhI\n3wb2xPEv24N3P+qOx7pf+wR1iFyXsKb3xUiO5AIZr11a3SX2UZqfZ//8J2FbH3+W\nPKTIt+jD6kr+lein3EUnASRM36DDfjitbf+vIezijpCNXpNi3KtTCu1opEzCRI1C\nia18q58JuItJFZVd95RMQ6DJykH4Z/7u1HsS45s1r7GAFuKmqJqELXOtjmMqzm3I\n6dY+4XdwExpQJX2I9QmioFfI8Jr6in29wzb5J0IA8ICKNUpDQwrfInO1Ga5zThqa\nrPWUM6bWJmFG4yGjA0rfGf4Q+n5zpcQzCXn4asXOhOVnrokjOagkI/iidRhwXP+y\nDeXCXyS8V5JRDHXH+0sZLzdMD7bdi09zzvaNtQ8wg9vYNmm9b+9jv2U84VPeUEQf\nVtQlwCTXjHb0C7xWIR/ZcRPvsp9tSBGeEEd4JzBAs8RPTrc9huwV5lyV4CakwXvE\nwnj8I+ErhBla8A5RLEataAxUivtcd7VWpz+H6WrXL6GBjo/46J62aDlkyMxgzgw=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 88b3c13f6105d104229f5ac0eb499564acd473bd\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAxAyb9OgfbrVwAAAAAADDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgwOVoXDTI5MTIxOTE4NDgwOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC04OGIzYzEzZjYxMDVkMTA0MjI5ZjVhYzBlYjQ5OTU2NGFjZDQ3\nM2JkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAosj2IRXHXPaLa9ts\n9GtPEkiQ1JCBHRVdaBIVwcWeoXak3i52Xd1JB+UnZY9Hyz99LYL0t4JEhngNA+6u\nViC0R0POUmX9eojsDYIuTqleKFXqr9yBAP/61s9txntpmWvEe44C2fGD8PncDWT9\nRjMSxzOlkWzVqLwvwkMC+bYnsztdTHcyrZ2CEBFirMtem788PQ/nuCGhmDPEPuWJ\nl4t0yoCDA1MKz5FxyFHRKjctwmTMF+pJtKxz7OJGTAcGfVnlFP6sKCGL+e8x/sI3\nhkQyO8+/J7eM9DyFq+DbwKrKWnJl28gEOK3gnmhesWEpn8aMzUmKcIkwFAB1E8Uc\njytC4wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUJdOcnFJS3tDjODxotIwPQK+EYPAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAxJvCQ\nvy93XE3kH/F+5V2hpoksHc8157bzZd+zR/bisG9ycxjxNaa0CempD+s3G4XPY7X6\nOUGNQZJKBEEK9NtZqrc2qqFMETg/a7UNljLWqXsV4Mdemk/Lfqy60vmEjY+cvm5o\n/18mFcoeVgBgHPX/YXU3G/m95lJiU6RrfowESt2BO7GosIfW3wnH92gpnaSn5w/y\nJaszI6ezx4JjhNPLHgGrh1okiR7SZtpReDhdOyErmy0t+AKP7sJ50VDVsdqCPhDx\nlT3YJyJwNUNox0CQlqeo02xByN43NaWTnNJnYKsEJJDjQPXJvs54yM88EMySvj0U\ncXENyVPGC5s8CEnVUzMi24n4xknufzVEyOak2ioy92IqRMS9JCYgzNc9K5Lr1IJI\n2LLoR1Cj4/EVKN9yc0ehHriQ+siCbByzi24UoLgzoUar3kI1pHAVmPZ/Tm3h75uA\nxMn3yXFjM1gU7rCG7Khq37mV5Q87L0ZUgnJ2kO9D0h7o4lmNtnr4acsMEQaxW0jf\ncFwXx7lpW3asI9b2zWE4AUL3YweoiuoD7aGHpTI3sx1sWXCv6OBTct9r4qhhgYWa\nisTsWRo1lxiA+aq2Ukq+1Z7vL+vq8fmjR+sLhwMIpfWJh3azs/6DqL7uOsGfz7Lh\nRkWH7ye+mBL58fqQFlnvqSntg9bOz0T1Xf5T9w==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAb41ruv3asx7gAAAAAABjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDczNFoXDTI5MTIxOTE4NDczNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE\nMjFEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9+gyT4WaI0KLIEPd\nDg5fAxjIW03T/cPzVagRbK+W5VZxUR+YoFYyRC9s58FZbj39LULB1pyC3xaXsOpS\nXQPN3AykkkbhsZFLQvxluAnOei7qY8QTEB5ZBPtzB/ouLfVt/HwAKA5SggJr1HvL\nyhn0ausP1K6pg0aUiHG5ryPtpK07b7WlU3D32S5O/0u8fc4mdxGG4AINY5emCz4y\nggMZt/LqyWrkUwk6gFKWvZ7mK3NdXywCcx+n8k8aCYl8Mt9rrbdp0Gb3fYm0MOmB\ncmsxdV/BTCvo12QP39VFtQikS4aW2CxLWLBgcPq9rCSYRFSJu37nnywY5uWjmHse\nzGJKZwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUTSQynj9+Fc49oSqJCZhd1uDx//QwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBLLcU7\nsxy9DZC1GqQUnLx8Mr/wddbtC1HmdGjNxiL7zXHJHIZ6/9Ex0UemCH5QTNXqQG8J\ncSIa9LZDSgtN476F3EfI2RaSgq2RRj6CP99liPGi75J0zItVsrwsqL3bfcjbYnsW\nj3E+/xVVcR/7BddTboq9qnGS2PcCIJSqmhYRM3QLY4AC6ZftCA7VeFksdLO5Ko/5\ndGiQA8a5vV1TdQlus+z+zFT7nej0Nm/uraU4kTSYd9KM9l5c9rrVjBOP5DsnUZCL\npc9tHho3qCCbQYeSd0hazik1QsTtL9AlagmZ9maHQomN7/LEktrxUzPDKK9bwK4d\n2Rtrt01lUsu5oCxDccsCFmyxkiwqdGYFJVJt45C4IjhtEq+3Q2uNaZ1f38exJTtk\njFd5OvcIe5CcSybahHZTqt8Z6G3174P6DsEJfnzfKSCyl4s+Xdu5CaYbI74KZULT\n8dEpRPV6dj4UwFmQ/VegKBPpavPvLfC8lVq0opkKaYXMfrtCStwEJg3A+zsN3LJD\ngC5R67hr+8m1NQKEMUXalQFNTx4vAN2TuT/jBPBFsBbMloUDGUCLAxzWjndL+rPR\n36GDCozqFFASn8PScs+nnuDUc/flwVVRTtIdYgDc2u+YcFCfpQ48wr53mUvTOydq\nSW4s/XTzEFqoRizYaQXbg8WrjhP8LkboVc0yUQ==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAiQx/rOtBKdBRwAAAAACJDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMyNloXDTI1MDIxNDIxNDMyNlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE\nMjFEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtCi2tS004DHL2a06\nmyt1jg/WVun8bb5IoWr/fBpgx80cqimAIC0SnBbCAPeKsZReev1bb1RA7dpT8UNr\nW4ZmcHY/yIZJvBP9YmwNpRZU8XMZ1TNSFqdHmwuAB1hdJZWI+l5l8aT2F1Fx6oiu\n/RRyrT7FItPtHQCXzTQegTp3HcEM2S4wlf/htqW6biY7gh/IKv+2LIMnPC42AvdJ\n3YbHC24Tb8Ijkznt07EBa5j2X/yQ/bPEy2j46csbPvqRxAF1wyM+GGUnqmLfzo2m\n+wKPgbc/FWzJLSt3y7gO/a9/67B6YfR4h0sh4Q3QyJ7k9EhTDWDt25dS6uqz+ssk\nDusybcTLaa/29ymycCdEVDqBodkKs+yPnJhpqtMBhrMcjvkwUZxEZzC2Vh0aPP7O\n7CY+tCvmb372KXU5HZbLoFkHShqiiajYmS8B892QcmiPYMW57ORpP4WpsrCDDlcy\n0ojdzrm8Bt30XzwWRRHiz+rYU1oY4tOqmGzcNMYo7JuacDsychhP8pmGJZTaeaZr\nfC1L+4/VmgaNtFCZYWSJxyB8th1GkxTb6gv1ykZpnVY1Xyg+DYDRAhHZgEURCetu\nLVoHCHO/q4FLTBZCx1StkbQ0U2G1OR2Y1skIxMx/JVYShVPZYDRaAeIrZ+aBST+L\nHD2QWzvBXYStPBckPh7/4kPW+PUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEQKRXDT2wuYLeWj\n8VVsfnhP82+/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAAugTDXx42XliuJUEN5RYxi0UCj53lf2+GkWlgM8PYFs\nilAFecE6NMS+fAbwkSbVNQ1KB6Fa+htijcp/ptBPQUcs3mTzY7bzo0DEgnkYqiPv\npUOxnoqPlohegaYMZSKDxogUHBQ0aM1sCNqvL0VERgzk0J1frfpFChDsmQrzlutj\nyz3hK6IIvMRUIUh444DnHKED5nqP013sH6YWHuDHOBO7p1+a2KhSHxpKvHl4c89I\ntYe/Hf3i8mCBa2Nl0Rl0L+C0YD73Ojn+k2bZOr0SBOXgJsEyuvcYGgv5axHOkKIM\nddZgAH+GxrgzAZ/xBiQawc7jv0thb5Bar7O3L1Mk1lE4f/8OoepQxGTxVPO6mbS4\nGW5fnc1Y1A2BaMrIxf1y/9/rv/Ef+WEo/ANMk6ZMm6b1G0ZlbskjdpuOVmRa2GMJ\n+JE7QYRJt2XF8W9LKHkWtmNk/kRLNCes8PK9RZt+RMm61rjE6nZMwRJbjBgalJ9x\nsf8gQtSkpEh78LlWCQ4WDyqml6VcADEqFlgWpKwXrvs+8g0TDPAMJMyt/nIEZbA6\nodaNQbGuEUYZRZxZW+HUxKXmbUxUELUsTZJy1x4CFX2XP39BtmkiIUrkRQVQp1FN\nHDaduLs9IDLjxdR31p+c2YyeM9pZ3y4bLxsEte4yQ3CuKpROhaBGqRpdXTs4n1s=\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABvhVcvzHrOHzwAAAAAAGzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkzNVoXDTI5MTIxOTE4NDkzNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG\nOTcwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwfEFWwiAankldPUZ\nFCZYfm3QhPuFm9ocGwSfZWfDrNU5HKSbZOjHV5xmHfZ8/fQVNXIQcbXR3ya+iyUd\nxJEtDhnUBLuOYb+MUMVRNtmQtuIxxL1y1aD0NF5oEhHGnMGbSwZnVXK+SZQfWgw7\nq0tpySxJ2JHsgCI+LVGSFMoBKSXqGMqJL8yxhTZm9vpZQhgsB2qq1T3NANCIMx06\n+mbN542Rh4Wr7xmGH5SW0j8wLXiD/WujTyC/X2uo0bqe/OXgbpdCQuHPkq/e5duw\nd4EaPhtanXTkviMyWSb6iwUVpnbTEH5u0Qesb2zSxtp50xSYdnA9Gxlz27Hp0sT9\nMkTJAwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUg7u88gecv0N9qvWf+yl4e2JuZy4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBSRNr0\nKicOPgmz8BfET1U6PSGWqm5ww5U38Qch37+8ttdCdZAEzSsJ3u7S/uPJ4AvZLuoe\ncLMkc7c5FREzu3P4fCVnXUfaStHR38+Bj4C/dHmNY8BdOFwoF1jSOmkTNqw4efwJ\nMGf7zComN9zYy/GzgF7lW/hM9pHSPv74q+z5e7oKxDx0plDEG2LUNm57I2hCjMXH\nLcMpuKMCIa+/Pf6LDRj8zPz6dbeUjpzOgWe43Ii/W8i4Jm3/Zv3fLRhf15JFGCkF\n6apA06zJ0AXHcypkmEt7eH2v9Ur302NX5+ePzIKyjBMxcrqoUmMKLAbcYekiWH60\n3lBej8hLLFXDtFK6I9hjmu7u0ZXvjUV//vmicJlTj/1sH1kLhJLeosLi8m3SWAPn\nPr1yUSRXjzVI2Fq0FZ/1DlWEtR2ZnYxJudEUUel7EHbL7f5vDr3L+vemHoOlqyr7\nsLLDd3nVAbygMnGwSs7MrKYLVAtEypHTbjImrNR2dXB/nYAum5DdGLQz136j9lm/\n2y679ZDhpiPIc5VwsD97C1ifi/CIjipUaY+t5/GAHmKmLUAK44hH5i/Hw/OBUkPJ\n5eC5wEGWd/brmLnlkhPvlHF3LYE9a5vbumlBeMlkD6DKR6GlrSnwDWTn4EJp8qeC\nET+hWnMnb329dG9NoXSK8AVkTcNMOs8Q+M1Jfg==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId CA6970458673493A8AE1994EF1E29238F27F4518\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACpzgO4SpYHlzQAAAAAAKjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTEwMloXDTI5MTIxOTE4NTEwMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0\nNTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwp64rEuL+nktq2NG\nY+1Owi55MmVCbm19APK9uXpxM1ZLmChEv6Hd6fddArmZ5Wfnv8+TwS7d10EJu5A8\n9DAwYrgLXmcwI1LiWtVwQ8tS5Bwy/pnZfPXmpv4jPyrgqe7Nps0yQL9bEAe32RbU\nJmfrW1ophnfIL5jKHbL0Ttmn7KfkZRmSu9zOoxnf1pOuU6IjJLHQzUM9DLskPeKy\nXjiBDFoxDZNVh3Ks+VZFvI9hGh7RYWNPRbt455z0wVCp/gAnN0FZVRoacx+DBg/n\nXKtDmKAAWN1zy/AO00vrUpryPL/k0h6v0+U/PSsu3ssO5HCYqOh6ogGB4KYjAWpp\niI2X0QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUw2DdMCjR1LNzS0YBUrGu2NXNLf4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAZx7dS\nVUP+O+MGrI8DDP4yTap+8QqnYAW8QJQKx8Z+8h1XtuTOHu34SLBWCyR6cZlQExkm\nBMyroGv1jXxsnM2/SIrt/jrubjgSoPS9fTvotDE1ER/BV6y/3xCBFYlRyvGxZTBV\n7uGoESSij+a+ghvJmFGrUb7JcVgtl66SUfV+SiRBqOJMEhkaJrEDMHwohewOvNxD\nyvls58D8kIyuWK87q48N7MRxj57DsXPkv9tc+YICRBuK81GE/j73bmHRbDAZX3ep\nzwT05TqrYtChZNfm+6lZ7hURzoV7eGe0ixlWk0ZtAiKPCbb7fB0RePF3Jw6S6MIy\nhCSX8qgU8KuKLObz6NKu9KWY4+K+wmlPAKZw73wLrcuejDV4r4P2uVLKIDCpmE9O\ndQU4ro902c7eN2q30jyGtYyWCSTzOmTt+deNtBq99wMH6S3n/Wsuqo1V2gx98Lw6\nUcrdqAetV21eYD41bpckaGpWFuEg/olVcZVk/kUPfUlEJmDZgKd18XiDMypepLk/\n4vTJ+MiLbw/WKqYe/wt5C5/MlfR3PTEfQ2d86OIXhxWF0nOvv8Eie3F8rDsakkZx\n5Qoi1W+zDRNKZo+PC9GxoAn/RNxw7Is61j/wjXWZjKe9/79TDW6h7OllRmA0FtIU\nnKELQ41zr0pqF6ExO7j7Ft13IU29V7bD7+f44Q==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId EC3F8D4CC12ABE88A019064E8A62B7018FA2E359\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADCTUF7UHaHSFQAAAAAAMDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTEzNloXDTI5MTIxOTE4NTEzNlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF\nMzU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs7TgdsEbD8Ucc8wm\nBz/39RSdKGSCvivstcnTSIXVHmkOQ1VhvXZ8vvNPcwFyV8jtzwTAAo0XY5nJXJ2X\n55mDgPLRYR6T7wEqVPWqpxkhw6yvr3gaGXXERySwjc4WDhn8fiG5YM6EmKvdKLA4\nXTBOLQehROb8KZQA4vA6cHzvxjWOjaYRaAk6LaNPMbPGlsa1OoID/yAEXY+juZrF\nMHlOeKLIrnNKJU3WUrSHWBflvUqplCpG/59+//tWaaGm390wwqVYHdbEn7SLmcdM\nlvYuBo82Xm0c34fLBB5n0nDWl54Bg5woioRm0zBosCfTs1WQpbVKU0+iRbWyy6N8\n3anXUQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUf8eNQLNICwJKJIyEp9QvbEqJgsIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBDQoa8\ndBYvSXShOyTJXwCPDno2sE8kcSz7Od22w3a2Uh9SgGWz7stlw4ZB3nMPkYi+l/aH\nchxoAwK1vn5ICfEhmB3kGe6tAyO+64De6se66uqOxk4pdySiNftXrJ9ucqD85LU1\ny3nmxrfOFywSKH+xUJXOHs/wudg3bfe50hRp41sP8xmVjZsX1zP7me8+/xi3Hor9\n6c1bDa3hfeguJa2pQt3ZhGKmYMPH5D113w6nzzoXGCrWtE6nIrtuM2wDEz5KofPB\nmkJEb/U6UwpVuttvmUrHihbEoHcYVUHiQvlfZzQy0w6esCeKDtp8W4wEodwy9p6e\nKfqaAuDmwpOi+qlzx9CcdhdswirDpdSUIoQ8HebASxfNI3dEpcdZWEAR3I34fKpR\n9yo8IPku1rlb5CtMvDziFEMqsWS7dunsdTgKJH+h95b4w9t7yFaisr3U9ncJy5/t\nBSjsSQoY5+biWP2YSFvcZQtZULpCOLFLM/Xw/K6AAr2iSjWll8m4gwzL6qtS37it\nCtLFC3cB65NFa8IqJvZ/wXoT5m0HOxqaFM02D2pFsmDnhfvnxK9pPLqHsautk3VJ\nkyRvRmREXLIr85vmC72OB0L2VlyQoIzKQ6WHlD3Is3Qan0EmTr2rdij/rFVzZexo\nQuh1fb/3Z7H6vFS6VGBTfV1dqUqaP9P2q/j/JQ==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAB4K/1md2wI4hQAAAAAAHjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDk1M1oXDTI5MTIxOTE4NDk1M1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1hNzU1OThiODAyNmZhNTQ0YWZmY2JjNGI5MTA2YzEyZjk2ZDNm\nMGI4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxHyvkAQz9jWWwJQ\nqb/4E5YETXPwu+Tj3Hq/RYw5soVC04TDolKMGPZyxH2AMskAVy14rYrESLAxSTOp\n+IH9oUmMk+/bf0YURT7F2pbWDiCq8reyHkZ+VUGY/eBzC3QRLTESJU1rhpBRZ3Ep\nBSCrPKrayLMPy8h/8jF+Hy1M7eJPhItSMuQiEYFRlSrdBnEp5jB21OOqi8oETWU8\n9IYleCP01ENl5EiQYYN5KRqGvknHFaHW8INCsmo+yWFmBm1JQM3Bt2WIz9E9SVex\nAwQek8HhIx3NsiG7PHQUMWivR/sPhaplwAZuKZ18s3udqye43fW/eS0FByse2D0r\nyIYNCQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUjJf1xEZadxthWCHyNaDlmNeo16cwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBlNrFg\nEl25hhLCmksaN4LNNnjytGFbh5mf5m1bc8nHoT9PhnE+pWf3zUiwq3NoKmolBPc2\nUEhdswE6oY213j804ga/oziow1t5u3h1DMVUrvrJiZTuLqgh4mPFOUi+U7rj6+4G\nLnMD3DWm6DV6hmXWwKCBejvFrJKPBKlQpltcYnqCeozSsUbfTg7fdzD0E5EQKw89\n2Ymj1OwqTm7oc4gGe8qCbd2aH7dFbcevPRN8t/3/iEyfm5LKCnNbgyoUoJi84IbR\nUFRMGZ87Hu8GHIe4UQj1/00Zpz38ZQKULpYN7m7LTBwQ3bmj069NCfSjwA4H3QNN\nJfa8hx7svkYXqsryzpePEQtthdXLK5VJBxyrpHjxLmIw3icsa5P8L9Ck9/TL1QZy\nl+PMwZ0RGpDVnKrzrvHsvXg5T+la3jpKb75I3phSpHKfxWwzsY0QsL/LWjtg1Mnz\nrONghxxW9CVuAqQxcLhxowJxNKEfFHN0Ki9W4PySta6q8LTRr3Lud2YJXkpUVHoB\nR4yXsfX2hSHgqnC8o7lyDKWaQYaVIWFh/pSdN1wOQE8uSLe71PVLtKNkf+VA7Qob\nQLQMkXRWUCCVgr4c8+wBV2VxuL2qM/36MQBqVxCaY3LpPWmLmJcDRMfbndiJIguJ\n9DiGeBuW7MPpwTodi81zCpLe/HtKyLeWnpb2iA==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId bbcf7cc184213166dab5be53a87014ddd348d8cc\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACEFKjJGkFsmaQAAAAAAITANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTAxMFoXDTI5MTIxOTE4NTAxMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1iYmNmN2NjMTg0MjEzMTY2ZGFiNWJlNTNhODcwMTRkZGQzNDhk\nOGNjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiLCPXvAM4d1C26cl\nCPRqya/WBDIQd2lCtzKHgDCn3oDRK+GFAiDDLLYpIBoDkJ20bJOVHFs8A9lnt+9Z\nkdjuJcPmvdv2WjdZfBiF7HBh/Z8OrGoo4xOfAvudUDtLn9dlc2V3Js95UiPAF0Iu\nJfjuq2V6vS6+aEy5RCt9/cVi7p//DOmD544+8r6rCDBhT9GaVz1IT07TRXsyTAHm\n93m1gjW07riFPKEgvX4OtcV0KaxC7z9AYrq8HVIblOkLIYYYsOzeDOGtgs2gXu52\nCYFgwUonLoBjrvRvtSIVwZ3gzHUDWu+aOyVxe0ey9DtvdKajeGWhYXweFKMuvhNr\nne/DMQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUqQIAWhO6d7O7EWDmvUw8ZXQczwIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBKmDCA\nOJL7Ch8tE+lIAreH0C4L2gLPAjRWzyMb/dnfzxAJ/k2QvBfifszpfl7FyETN8w1L\nOsIFXkYJbTxhISWDJ4/x0Ah8PbXdSOIxBTIel/Qx66mJOhfReXNsT93ZkMJeTjAW\nswkldiSw7JXqsRoh6VMGhvvW1b/8wC+hqfcPj40KA/LQH7zRtHiystU1matAl6LK\nD7aV69w4razt0vECJOxD0AZDz1M6tQLiMO8vJMiUjSUzep4pRfHBiZHJTE1zpCBB\nXLQ7tozlytU4UNb4QPVBtCpE46P6ZJrduS1lrbwqWuA9iP+IE49UDBuWxtkl+55W\n2YPSjdqjqZ8GUIowF62x0tM4Y9xLJq2vK5eu/Wv5yJmuVAezk0VirEcWo7tfh0jX\np8PI8/wGoYeN/WqG2kghuAYEjNN/NcxxjjPk/IS9ohGZH/azZsx5BL/oKf8acRDv\ne/SEPRIwsjw994RshvldAop0pVTBxlZxYg1YfJDj6Vz1NALg2cne/pddUSKNiSqA\nhvb8ycmB5Iki706u0Hw8AYv3Tyw0mQUqhuNBggC9QtMiLbwQ48qogTIFXm+zxfFy\nlcch6yNnKs/c8ezq45Wb447x7QLNupXxWrLFfIfTaUIIWmaEFGF2OflW7ec3PMH+\n6u6Tdq4pw7jUrVA/2u8dP4Oj3f3CHaGrnluq7A==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId c6cb2a4db7294be911724f5041310b4c42f89bb2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACeAEIHltSKmVQAAAAAAJzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTA0NFoXDTI5MTIxOTE4NTA0NFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1jNmNiMmE0ZGI3Mjk0YmU5MTE3MjRmNTA0MTMxMGI0YzQyZjg5\nYmIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwzArwO7kziXmsWfi\ne6VrfhWYm3YizKWmHyb1XLxPFRpu/mwgInerdIf7/p69bmjnhfbmCh0xQwcL+sU0\nkQ+spJuTSNOk3gUwqtNCkNtr2547MfV+DCPxcE7D6OX8Xkt0pb53KSRBYMSkl/ye\nB3oVvYV7ZCyd7CYZARw8ATLKmBUDQZtt+wAeZT7YgswJALEs2j0MNQxrADPByHup\ntGKYkKO29Ey4gjwfAw1DNdK4TTC1C/EaZwPxyaHnSGQz+FWLbyAuqT4OA7vxVRUS\n3od8uURnQbsSP0J38OGFpg7jRpbN0dZ68OosZBzI9TWo/nbWff3hRjBxBVBuDL+w\n8VQXkwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU5FerUi+yesG/NQ0HYEePJqVRe5cwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBJtQ5v\nrcJ5NVdLIQktnsKkwl8iIH6T4Zd7H7K1vhVadpqSPVLY8eUlzVfshMYbv80vr4ah\nB3r+XbdZfI2e6NAyXeD35cNxxebsNw9AZXKHk3y32PC3x/aWr58Ky+VDOaTo5dBx\nz41J2+lbkn7k7aKj6tD48IJQcPl/w9u9/W51kS4eR5sbcQpKJ/+FZt0mbOPt7H/S\nGMQ2Ih1SHIjVrcU+Q1c9pOk625UfSdfP5PpFS1duV0pYCrRPyKwDnZ5DvU3UgDsd\nNj58M7bp9xjv3V96U9oYQkFzIpRyeLTungjUFM36sl4WaBNBaPY4ATlK8sTkQq0t\nXKbtKiDx6gknijuvNjtaK32TT21geerfjmlm2hrTILeaaB7mtCcLvQpNYDKDll9k\nlNUFmqpXBUUZJLfQaSFZwbhDvqEpzDz7uBnRvrvzIRu5Q1VoT+ixnVYs9GOCqPVd\nFQYpUM81pqkMu7CpNPjwmSQA/lx3x1a+Krn+2ZuJcIaoZokiUZCrOZOC7D3kkrht\n3C/xSOmggjSCqxv+0uHAos0q7mPMZMGDA0lYw3zfeQrNmkXLbrzeZ/t+0xfo+F3X\noY7MVYLncq25uZ0hqr/1C5XtMwJ0Hnpr8wdffB82njPXq3aZWkTXuo8/TiNKKLN7\nN888n7HrYCHO2JX12lohjD3OkW6/3kTXN3rS/A==\n-----END CERTIFICATE-----\n\n\nNCU IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAC3cA3YwyDr0AgAAAAAALTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTExOVoXDTI5MTIxOTE4NTExOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LZXlJZC1lODI2NjljZDlmMjA5ODI3MDI5NzQ5OWVhZWI4ZGZhN2U2OGIz\nNDIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqNDqktSy3KawY61n\nM1T/cc2PwcG279Z6w5Yttd1JcvI+wgzfgBUtwf0bmpBZXA5hKnbxe78lTAqftLGo\nyt7ZMVpvnh51FMKn8AdQo2nGXLmtKFbYDiIBXnKHJ7kY0sA163mxlphZJcjhF94O\nNqmoMi6H7ycfspFDn5m94fS/XZzGY18L7//9rN85B6m21ZI3ps5hl61wZlw8tGFx\nnKjPXOUP01Eez5JOXHkr7XnYFbij6Byl6NTfGEZinGx2Yk8IrWGxXNkmKtlpyLUh\ndtMJrkjp/TV9OdPcHpnF2cI85BN1erFCr7YMpALUBEQZ6XFp/Dt7x0XmgvFYqfj/\n5kYAKwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUhVyFqP+9JiqyPrttwM80KQnfxVIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAQoe3a\nEuGwaTqNGZvCL4XN6zM7TfvF7XnhY0qtTBbir6BN4M8NrynM+nFFJ8/muvTr0zsA\nZf+1UaBaXDkfETE5vXgtAJr8mIkG+UgHqKlfrsohu9XLsPFVEISn4MODjmJkdCGb\nRV/WLbUairppPtpZtO3bhx8+ugPWVYBh96VqjdoLH+MupKUp8G7tIiPEm7ly2nsC\n8ZyX4rofw78MspCMYN0yb0YkBCs22kHLpDqFMrR1mVTK+Zq3/nNnVIcpo+g7bTrv\nEH9w9y4bhxK+oVHsLatKqIHHP6VLHBjSEqbAROpM3XYXTWnWxbCldZN39+6Iznp/\n129dFEyOMhRkJAZY/hUxfNlcm1t3LVPjM62dNJRGgVMza6JHzZ6aKboEkwCLohn9\nbWrOP3S1sWUfO7KEoDU9rbRFTi5fUu2d16yXhq9FmNFTVeBruWeJ7tws9v7gnGlq\nChdVQb4oQBlI0/sVWK5aGcpnjq6g7pQ5sqSlqO/MVeGMxsL6yGV7w4wshjEGrDst\neA/JTiL1IugeokAYcxbP0pN535uy4gnLatUpcIpwIjkQhGObfqfiskXM6nCJ+Dgr\nmMa+OiUsF6OL3QSYF9vmYttpDUbcBVjmUOIDUOJn2zDB1sF2K3VDgIwvTyCNw9pp\nj2dBVw5fsN+YKt0MCeASq2lzJlzpcphNJ8UiyQ==\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXChs01NipgP0wAAAAABcDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQzOVoXDTI5MTIzMTE5MTQzOVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD\nNkJEMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMgEeMwnqMRXs4xJ\n7NbRYGJrJeC2InS6KZ2o0W6t7VefraYW3+TBVNWtehy+kvm8e3Jt+30hlP+1p5Ig\nl4qckvhcpWh5CPc+93stl4OgoWsERmfTwuuauRPhVUg0DagVa+QZ34iQYRaVlIBF\nPT8KhliRaheRHkNqkJ4lUagTNfCZatOwu2fBEQkgbqSvfmbRI38njLePY4PtTg5/\naZCq9Fr3JzIM4KNQgrcO9kSA6AWbQ+OiyvCOUCNTmJG4HRBbU9xwikjpwAIp2ua6\nr7TuiBXJBYk/HVp8SCkya+Cu/Zdvmtc5SRuR+VYGVhNfSjsVJ67U2bh/fy8XBChB\nll64gXkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFGu11Z8uuCi0BP49RPxcRDmj+8mIMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAGfZ4\nnecexgWhVrvAbWQ1Ci4tWpZPjZMGrtehd+dWjxOZ55vJ8JuiAhhQVoXnzzfJo3E9\nHvGyasdOzy+4yG8vvlorV/20yq2TG0HzgHimN32QU21v5Sus20crWTusrWYLHAHt\nq8Xv36hPR1cUYu+Df6/yHr1TW/k8oQqG0XMAnfSdu+/jRlFRKxKq74EGNsf2eFon\nSGbv9tsa9fUDAjK9DyqYIRewsEEC81ojmqLOV2fK322XTUp1tdAtFZhVjyyUSoeY\n+ZBz3uN+uvj0vkOyfFIGO8POcrzs7zcIhVwKsbggxNZExONCrD1eupCFDI6FblG8\n3wGHvfThdDVVzs8wtuxEdzNb/duScKeSwuLNnUc+GEFoOCfNpTlxt9Ve/x56zuse\nZ+i1FnjPw6wksm3W2BeiflywGohX/05Fj9CXZfjG6nfWgv4tRXSBQTcl9UL2p/bh\nQjSGU2Kw/2xFNzBWV2RbShPDSq4QGWoDIcoSQBGP9qd56aNS0oToZn+KM1gaeeZs\nYU4r0D9mTgenoeE/cZYTjBDDq1sL/QsNDIXH8VHgXEy5X8Le7SHgaIrmr/ebYTDs\nZub2R7cEVpTnHmZ6kZwAOHcPFDH5Z+lZnfGz27EOGYNyIW1vdeT4tnNYWI7bAEdq\n6HzGQtVM7kGYnI1Mb7qLtfvZWe6xEmZR/P3UT4E=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAnIFC3d4gy0QMgAAAAACcjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwMloXDTI1MDMyMTIwMzAwMlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD\nNkJEMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALJQf0DDJViFvp/H\nmyMzI800vWXBYNiZsIClcpdF1FCpqemrxu2r686xO5XjFq97kqxu/b1grZFuhCDr\nO8c09FJ17TwrM+ri1Z/MrW19lX/YXQxElCtgGbcxENsLcngHYWk2SQ/Sed2Oqglq\ntMmi403Q3WA/ronjtNcosN/8ERrglCN6Y+wXMtqHVbTV9AJdxEhwG704anbzzgAL\n3Zy9s+Ue5u8PIXkZC66wBFbsjSvT4+Ugsim16dHmGW9caIUX8wVjlbop0w64WYwz\nRjaGzUNtl/G3Q6v2/894hgK8oCvbks7qhW8lenFrYM4L8Gxl2FN0usKIBOsxyrLa\n7XzsgeUkDDo1JczQwU5Stemn+a9C2dJRJx7i1l5FwCSHqc+O/N80tDg51bQgtMIg\n6coOSJy5G10Nvkb6cio3lbvEsIHCIPxFfg0RPW6Z+1gweQhP1fzbxMjVDlGuhvtm\nnoZO0pZRiyYjygFof1gPyyaqZkCkCmnQj+fzwxev/PqzZx9gDycVbHx5YibTspbv\nMhvGxe5rSlWRjBKzfvvJdk7SlShSXoihCApDkGbtXmq9LSv2i7E30rT6IoP+jXDa\nGmaC/K//BJF4nOnD6l70DtnH8Ibxv8yHeq1ljJu1kIP0RYkDTkPcwbhpHIOJ0bN/\nCh0DcKyNIKYEdgdB33GcZRXVtwixAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQPQKq+ZQI5KZuS\nz99ymfQz8t/ayzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAECf4m28qwjsXchDiqbMxEKotGAUkHiTkDhU3fXIp315\nDXgfzUuTwJNZkGye+aUACTAU3ktEGqvYQn37DYWETiFkWlrE/Kv1fq7oc313oa7y\nvCKdMstvwldgg7Zno1MUc7Rx4RopsZqQIGVLheUmKqUX4GjCgD5epPsPrO4j7lqI\nMlZwsXK5QrFHxHgl5biXuuOMEcsIeRyc4Ysb2PWi8u9zZfrEd3FTMO5aq8Oxc3Pu\nZIqkxL4BDce4yajNkk2NBWnp23Y2WevF9k5ddc5LjUXZlm7ma9/WW7G56Co9DCok\n2fBw3GI/Vw5n0ZaTYCE4STjJg51Cmf+63PL7SZhTt1bGP4T86sjBviaXkkpzrkCR\nDFZi3Fgsx4YtS+OqPej66RM41T77gved7BM6GHBlMjsK8/HecMj6kw08yZJpq6Qw\ncuSbf9ZTGH5UMxBhrPi03/N46L25Qckq/FHiovK/TK+QxmKBwvO0IiF/q8UvZnGu\nqc8zgtaJI8Ax0rmrG65E9wXUoJiHNvkwtT4c8UTVTKmjtgbV7kQoT5Zkc6rc/XhJ\nxBWzVZpG4LSqEE/cpD4Nse1hjKE8qw18zuP/KvDXT1pqcQBBtsjt7k7m0NMLa5gk\nEmQqgQOLeH5buTv04QO9OACluwzrQ4LKNGblNwfySdglvpoWlHLfmfgqaot3Q61W\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAUUccwTE8/U2lgAAAAABRTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDYyMTIwMDQ0M1oXDTI5MTIzMTIwMDQ0M1owQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5\nRjA3OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALvGFL+z712uwcUq\nPBxH2NZd7HDrjeKXuuXpxfT4bMazdZWn4PV091wCWZHw9Q5FpH0F34KwjF+bmoQd\nqzlZ/K2XLnFYZ++PpVcsjUvMkqeDiGISq6bmQ151oK3l3+POlFAwzJgENN9t0Tkv\nZiU+mv9hVdG2M0mBVt0DqA85RBZfv3YCCCqkH+J22q7w7VdVoxH0b0suOSEdalOY\nrirK40fFSNhLebAGB3phI2qz9IM6n7kxuJUT//k6pcmYqhg2UmDYv01yGjms13E7\nFK5FQQOU/cqfxN8QaL67fWoqo5QUUzCbumpT0bFRaRwaOJgWVR0hkJvFwDBcMMoq\n7wmEIVUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFJs/f0rCaEe53J/YE69kQ+JqGxqpMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAlYWB\naUvnZR0Td9PozILFBWYTNNC5aGMz6CB9rAMOZCxKNwsHrvI9up7mQyuGaKekTBJv\n7mWY13MtX1QN7wnkOg9dMjYzAQ8kMuoQVF1MjPClc/iG97ZT4wYJ9gNVxTXfQYHc\nf8XJ9Gzya1dAAaIQdjscvuWzCDqMbqAKsVCLdpwWcsIxzqdlkKifkLw5PMleQfZQ\nTrevhcAbfyIE7bfLLTqVJOxpfG7mWYpb144qBKhN7KjAY+PRE7Bkmyf6VhQic9m1\nVV62YGB00oMY7uqk6AADE+Jf+dFapUcoVoh5PL/FGaBU+HqRTOxBkElEFpBlM3Bk\nxC6X5GekQ4wy2T6uKRZz2MBHVIvRH6Tqe45DIA++IkpHmjwcQQEj6OKD++AXHMFz\nxQOaAnVVb50Dk0Ep84XL3+6OLCUSWy86RhcpfsH91RaIeIfQta1FKe9y+d6ObG7M\nmuoEQipeuaiTkxOajN+EGMkQIBN+7yGdzjFtXrWZISB6AArKW73Kt7usgnIDGN9T\nPWh+dIcq5nMDsxXfZan4W0Bfsm+tcLQWEl6qa665xVNRdsMzC+9pHBx+jNZ8Lxg+\n5h19oIRvae09UKw5qH7bPcEyLIjhW0968pAnRUhDKdyEQukKPHRMDTlHNQ7QaZGU\nvVPLIL5kt7ZtKSz5T4F1nvtc0VLooYpawfQ+vMA=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAk+jSthDIGGiVgAAAAACTzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzMloXDTI1MDMyMTIwMjkzMlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5\nRjA3OTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM8DhJ0v93u7jldl\ntmSuE1eNyp0em4MxKRstbsu3nIurbooXbtiV5dK5ah9/ZBZfLzbiep+Li8Gqz057\n5774Ipg3jTAzF/6tLxp7R/hBCBBv9NFL4OVsnOv5SgEdYq/yMh1FHppnkTWQrne8\ndTDMmGcr73T477H6flkYxKLhu9aifAv8ryZX1tTrMmhRuFKgQNPstLmYCe8sm89S\n+YpSXDddmEpSrjs81AIsHz/GmDHHhnluG64gRiKqb9zH5A2kQsOzi8OKTmUNK0Tq\nBIeJmoZt6nDnzwDKxHD1lOIoukAWTbO3IomLjvaIrZx7iHFS/psocuDLdFJTDrSt\n4HFAYoOe6Bzoq2An8wt6F+wKWqZ49fn+L9wOvaIDBbuBRScuGRFPisSlOZ6IRQYI\ng7eC8cwdqOhY9mzEFJVi4HBqGHEu7MHBjrt2PCRDCfjvLrchiuPHI1Pf0xF+nCHv\nvidwklKOg+WEIq8blej319UXN2lekg469Ngi2U6kxkgkzj851e8ZgwLL2ky3xFeh\n11+k0wWaTTe/ytXSgHKAd2hgmP5dkQy2lhbRCR1I3gcI8B7zLdBkA1QNd6OEZ+bc\nEAp7UH16RZFbH+EoBXCjmTDA5mG96SiMURLssad2nTangZixizeYVZhHr2htAWqY\nr4w0nbs3b1rFULsea3M1h7AYlVA9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvcZchP5DKGoKs\nDLZ1deJ+PHykCzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAB+04naK8xucgDa4Z1Bv8pjyABPasYdj3eM7juTbJBLN\nQ4N2MaESQm0eZp5LH6LAbDPseXO+ddaDrdjZhVehtKyNYKspcKg3ABE3DWha2yYt\nejmjbZECMorydj4yvLvm5zkuTYsqWnzuQoYsVPIOpl0UXWsXymZ584DX0qiLGRaQ\nuCNX8TFKN38Pq8nWmOwrE53rirLGRVbpC+j4XpNcKwtpkjlii2rbzOiKKomRLbm7\nNoVNwh2GueHgUQHbWfAAKRqs1waExtw9vHfn/MnrwEENDvAMIG3IoVpCbXvah9Yy\n5tObTcKq+6DCNzosRhgIDPjrpBRMRRt/QMwt9/NjLTfUfSxkZ2NkhyBYeToIeBMI\n9hcM/xgMXoZHHEYQ9eCPVpXYT4CrGLeVTq8B2thYLHjrOFtruoyIeblLuAXXi6C+\nOBZ3BX9AVO54tydHjDovd3UD5BKKCHwYZhPMAdyv+wk9tf+R80t52yzGgkMm6i2A\nnt7H/lEmjTKcFfeY19PIiQh0PMJpaXrl4Dr20APpiL7yW1zYd+MaTES8kZrym0yq\nuzTvDWyp5CkEOyfDEwg6UEHokTzIdKFZYPvoShzH6YztfBIndi7pOaxo+AZ8yosu\nMNopl6kcCrC9xHXFleq+1ugpvRxNMBsP43pxMRfnEWHipK2TcVsL11Z9Kue70Pwb\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 2D3CECFE6594829719D6556B600541E749FC635B\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAS4ZUZ6JMrp8bwAAAAABLjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwOFoXDTI5MTIzMTE4MjQwOFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMkQzQ0VDRkU2NTk0ODI5NzE5RDY1NTZCNjAwNTQxRTc0OUZD\nNjM1QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANlqx5U+nNK9yUmV\ng3VaYfmA07CQse9sSG9Nl/1THhH1GH6o0jaPReBQnUhIfT0/oLD8OQkDfDrQRFgu\n3afGUX7MiwDnxeDOK7Tm1EDvWgZsUGloimXNbgb9W30BWzaABOGtqPVvlh33IBAO\nqZD+wDC2tR0hXWUbGgnZDHfmA5HU/eSAH33467wm93if0DkT36WCctYgyzE9Qubt\nCLW5QM+YWglUpJxHxI+nSvq9iNtq+3UA/QfRjdIk1bIASoRp1rshtfRBYTfow5RA\nLA5+Z2kJSn/E+q2liOYDRlT0yDC2HPVoXf2OHXW8r4lbXhQXNlzH02vedbf+0hsj\nkUrRi8kCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFGNrmdUwGuZwHJGm+8bGq42P0OStMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANsU8\nHnQeZYpzFigXg6db03n3vWZCKhCfDCoIbFQ+NE6afvs/alL6lS+KLpOxGVWAPJ3z\nGbMBeKtamFVcgCQXU5ShjogwZlO30sfIeH2mbH0ArEXF95W9etZAYMp9SFmbK75Z\n6y6Y29a+VBVG1Zo0MB4IlzEWAAL9/ERE11Dnx/NZkZz+l73uv6PK8D7IrLiaE/bq\ncnqv9Rhf6c14wW6l7P0YhEzK+5I1Xndwh1ImwF4LcIyw6SRECa32FA/T1lHL27//\nOkTsZB92NVTqwJ1M4ghiwpSh+VuqJZRMObfBlloc9/wgxoH8BFir0jbpZmBmHMlH\nvxrO6/SpzmnzjEre0Y7rZ7G/TG96OIzOdEmY9HAJC2HxaVOa3A/fqOe8uEgwyRxJ\nqoZY7vRqzmDm6z76rJijmu2OsMCW5mKhIaUh+VvzexHE3P1WsxtCV0PJKEKgNZip\nnKZoWKdRY0ZJJDIXUe6vnJeDsZz4sijVHboglCfHtOJ2cvqgVfDRt9TxdiFWsQrB\nCfiLDoiB10qCUTh/80uDOKjZSuMWIrGn4svHgmkQVJzEuSDpakQRYjV8E8k3IMoi\n8FBjcLFwMl7mFeB+YHw4C69J0FhkcDb5sjcVdx9/sfMGrpRnCquCI+ySDYrE/UqH\nMp1/Pst8Dh/ZeJNOsX42BN6dBoy8zPLtEVWrTGc=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXF0rbJiMCYD1QAAAAABcTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQ0MFoXDTI5MTIzMTE5MTQ0MFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG\nMEU2NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKaDJ5oUOFdYe01E\no/VTtY3IrwnHs1adpEV2X6cary3uPa3ljxpPHLU/msdArn0un+LRRTtF12iNEYJA\nhtHzMc8oCI+rcQG6MmMmsSnQ2qgC4BNk5YLoMz+SMH0DATqEVmCyjkvrmBp8JoqT\nx0MWWIGAU2xc1xY5D7QtL7eiizdg4KGq5jJZncmdzHe4e3lOt4i71kvurf2dRE0T\nl4GRCLuErx/P8+8s8Y9W4C5ObWadWJMQNJQPsidB2MkRiV11a1HoY5uWdzptKZW9\nBUsIglqRPuwmKcghMa6fKQumtCPFO12xwoBds+RrV9N6N0B+HHajNdsSFuSm+TNl\n25yEhzsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFMyKl4mh9Dl+yEBJK8A1MTPlNvPfMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAd8fT\nFPj4cq5UIsH+B5+t9BEYeHa5qhJ9J8wl6Gg7DyZgZjkN5hiO4XIBYD8NfLRyThDW\nTc4mBN8jDrKwFw8zlICzU32hc3pDQUuDVr5aUSGrKdi8LKBHny50t7WQQGXMvmJU\nNoshoexV+YZ4Lg1VKzexZ+onHMvR4GfXDlsRtusIm8Hze3mq13wG3NAGUu3CqeQL\n6D1q35L0Jt5Ite23mLnkzhHA1DjdHdi8LyxOCG5pzcliJDrz1C2KdLkaVyPU3Zf0\nAI9e/KUfRCzNCe7fh2UnSVl759EZXaRSHaV7qRB5PzGZlTSL4J1PFO/SOqfvGDa2\n7MPJ8B+lyRAJB4e6ByNk1OCcymyLCjRf9o28DHNJhL5foD+KhIY47K7pQJp0dRB5\nNSHdv7Y3iNWhiuZ2xh2w/U3N9HICEQTdBntVfQ7pnwTbvkrhWcz8dc6v9A1zRJtQ\nPcUPyB5yffFrg40Lx0FtNTzZHSHpPPw3PFLLuZzupd4vh7s98NSbKh4qdC0Mhn6a\nA9X2IVfT9s4tZas0AfT1LtMrfjVnGeA86cbYGlQhd78yK7OGLuKqhAZlZpcB2m5I\nyFy19JfjWeskbj/UMFLR3bSg1rZEZD6lIRoD0IO9nu9QRplXaX+A+8sZmMrJFoZH\nuzQncmC6YiIDQ9FGzGuBUlcrzI0G8NF3IZ8l6So=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAnMyiRhCgCemTgAAAAACczANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwM1oXDTI1MDMyMTIwMzAwM1owQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG\nMEU2NjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANnWluPvXJTvYMvz\nabzc0aVW8eDsI1qWHpUv0soBaS/+km8wfM2XAPqNq399Fy1RfoIEdQYOz79kpghd\nYYoXRrJD7UXanmOCVevwqZNMInRjVO7SvHsFDMZl3hZ2fv5zo5RtWGsJsOIGLHoD\n9BvcycL2cxwgyIN5/J/lKlVTVTmj6hZRt+zFpcB6rv7GgaQ2L89kDSB4wZum4Px0\nPkbt50lCVC5/qEsERjGVC+sM5DJfWxrd/G/9EyeRWf+OPH+51sKxlKcWZ8lwaR/W\nUkiSFNeXY4KjTyIzQk3eFaXEZWWLRV7WCub5QvRqtFfCU90j1LmkqrwKp8qZr/J3\nkX6E/NW61nKoPJGQnGMXjOHr/xxCJtb1MOshEF03iYOp1C2c4Z+yZSTt4futwjhH\nx277gIhdvRLdYdT1ePfP2C+XFPt4U2pb9/59EC7x5kIyElATRrYSSZX7xd0UC5gj\naTuzcaNNw2Ruz2dC2CuW1/o2MPKHIONLIk1wSRWaYwkBesVxJa/bZ0O5gIPqGQaQ\n1bu3JlFLyMslwJd3r2sIvuGF2pWFJ6xxdeI6Eq/dbymIVs5JeZ86O88t7dUdNZAe\ndOa5Syj/Gv6hEWzMgDe6BknncKnGi9Cm+814uOWPhs+KYiOY6H+/zyx2AeMSuzT2\nA6VsLdzN/mMBq38ATwfZLpfAw8ErAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQep7PrbNZU23l5\nt4PSSKhChTULqjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADM0S5k5fzaFlMgGcWYd4IICAXnuuJ69BFhghjML8nno\ncDFBUJEbotZzbFk6rTLCgaWV9Vo4VfiLDbOsrDSVDBgX44xB9m5gOPC8aNrz5t1G\nOOawJrGlWYEYt+QLmNN6EZql6mzICV4V22PBI4dAuTsRifrMZZQYUkx9weeQnEm2\nEvz+T9nRgo6+i632MwwTEiHLMUEvp2vhFXuC6RgKmXqy77TprujeZN9td0vRjCOJ\nFmPXH+zGIHlpzAj7V4xbWA1+mjSBnbtVHCLtzYHU+FUYko2C5QUCeIPVZRBQN4kN\nmaTCVRXgeNTZxyhNeeHL/toTRY5xEXsNg3w5QRiEtvzKV8mJwFpQI0eNnadJqi/m\nF1eCjjQHnnCKO7jnUslVkKwq1SLdt3JwISoI1WHIfBLrCFKURiuuqdv5jhXbV7Fd\nTyCjteUf1QqS1QgGC2m0dv9zRg5jEoZQ8bV82jQhkLb8X2qZ1InApGB+rQJ12v3h\nyX/7nEUtEI4qm8DWcmRNYgPDP/DU4gzznrEDZC5Gtm1wd62eINtoU2aFrh0OGBy9\ncBNB40hAZVtcs+KbzullR0/D+oFYizAiCOKQ5FfjTZFM4hEA6ncCkr/17GieFKNy\n+W3d1GTIKVqzm8Wuv9GDgGPumeG8dP7nP3sWwiTBs3TklvcltPjZVaylEjD1lRH/\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQqMJENfdaGaowAAAAABCjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzOFoXDTI5MTIzMTE4MjUzOFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0\nQ0M3QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZYHJRB0oeiFL1W\nh6mujB4xd7cl9unjWWrV68X7A/CwvRDjyde+uZo8y2gc1LF+bQt7ZpEl7NinMnUz\n5rFrR0lj+NN3qUgvVvcuaJP4bUlzcRpm41MLuvotcUi9+3X/TPyS8XbngRABe1fL\nJ1C08wOsNNwQgcwsNx1v9V+dZt1zoZjKOxFG7zcXtDL5TA1LzXZ+pmpUB0vre3bG\nQtDPVjzdEFHT7B/7gUxbnPoWucikq80DAPlCtlZrN0SF1Nzfj/zopUwwUQOe3NS+\ni9r4xi/ShAm/dYPTRcN/t8LW/35A2LHfAXSh52BGVf9YqK4McM9J5f1PD1bfU7cd\njgDt940CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFAXzL8dajB1rCFmLOREHc7dl3Z8IMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAeTS4\nSUMw3c/3+TCMFrSsbRgILanFFelMk+Q8cE7gMZ2CZ+bL7PwOeoZGSfBlTEBHfagz\ncT251+J4apxb4INgiI1+mk8gEJAptrnZZBf1I1hk5HMEk6BKqdGsmE1xDbL7MIJb\n49Lj4XjhTNkT0gjg1KzOorpnYf8XoZXPd4oR+iIuwpyn9XNxhMp3ORyEUXcNJngx\nbVxV+fdvW6YlSkwOu+SDuA/meVEa4ySYto+w/4WraWsg+E/jvw0PJhzpieq+fQs/\njK9RDjMFZ/DILNuDz7iaf2S+T3KFQ9Ot5aUk01EruXiVw4dwBQW7aL82jK3NJqnJ\nOYwRnC07hLKeYIHxJpzz7kbxyFL1RrNOgtLocve5F7LC1CxmC/zEc1Z2QHzXxCX3\nRNwTOIeD6/jKGnfop+2m5rLc0ApksvLZiDQ1Ub3ruErtDH4S4xcYp4dSwbAp8rcM\nT7QkThz+ulc3i+iNf7fN0yKoJFLnFvvDFn8EypYjg3395YiYk4yedFXKIsN7WVnq\nQpm3zOUcmD2C3bnUukxm1D+aru0V0jQ7fVOpviKTiDFwtVkxXpbVW80CaXY2O7dn\ngU9icMoIryMepxLYlwZ+3tJ8gv2Fu+Ob9u6Syucfjv8p2hPaInpEwK92HzQaYwIS\nFEDVzeyMzpD2cEk7MNMSUbRO9xJSSko6gslxcUE=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAnRudzat5qElNQAAAAACdDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwNFoXDTI1MDMyMTIwMzAwNFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0\nQ0M3QjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKPzjJhxR1U1zan7\n69WtoUpCzWF13Y1jAwDGr+nnDxx14OKc2XjURip8L0//hZ3aJ19B2iNfwon81cfk\nBhII6h+CVY3hVAhvys2yGdMrSRaj2Pmc+eTlpG4amD3Vleqn5mea1ZW14CmX46SQ\nZX1GyrR3zcTsLDrOwa5Q2itg/yvPT8j9Bu+G52FJNwWIIOkjY13bsDxsE1ZaxQuY\nr8d2JrF5u032Dr9Lts/g8wcV9mKzrEHhJWLklEWbSNFRsB9eD/HWw0iv2WJwL2AZ\ncZF6VLLnJ/Zn6CvHHpzhvQnvV+W0UeFxhvEYuCUgEHtj6LawuDffbm6b94Hc3I4s\n9Ypg/gfpcjKpL8+PPz2Q9bCkYfW6jehM5xJf6kYq6nqMzV4I0U2BCjbud7PYi4A4\nI9LHX/DJWIeH2vsuAeyWO1Icd1yi1b6apaQDIFO370KcSZ73F2p6u0FsN6oMomDZ\ni4il/pmSopm2R6rBtnM+HRAG+V1Jj0Gfq/VkLja52GweVC0pl9roZT5uVtmpf96A\ne+OMEm90zYTGKAYgfN4up1kENfpUDLavKksWVtEjVWFbJ1BZi5bkZDWfrzDebSCX\n98bfrhmD/0kZdouRURGSg9XUYEEYrQGciDnwv3jRAVC1+jCYIe8HNhjKdiQ0ZhEZ\n5xiyTqAqrkJf546FIjYZYIlf76oLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS8ly8oYtl8Q/Ft\nZme76opMliH3xzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAid6NHQOTgPAkwA5y7x2nh6rhU3XWucFx7+Zf2O2ock\n/OBNE6gX88dRxhSn/y3TCco4l/vmUl3+ujJvl//G27hLiXXbFMaQdmDXyg10ZKBQ\nvN30f0q2XX5+e6Gu/BkpYwcA9hrIgq6RGfVbXhz0WIqGWKxodT14mg5MSKzoByH0\nNCximKmfibi7We5NAXmVWnlXeZn7PZguzLiXX1JWqajw+WOmYI8IEn6ivDDkJX6D\nlEJA3L7Oh/E3yqRD5KAUqa5gtX3daas7GPS1HB1YtACS4veFswIHWTyMbIke+ead\nUFYObtkNC1OnkwKjlhpYw8f0c3pnqUc48HNTAdBbvDcwUcopsA8SEjSJDtSdwRKK\n+TdlWCixYL0tmwj94w3k1cGwo4EgS75IFH0XlsSGcxGRzgmJsoU32YCxXpjVBNNT\nb82LNRa+4zJXFKpfbsitYNhnN+yP9AmvkSe0Zqscl7PDzNWsHbVfOQoZkwydarBg\n5TPS749PjPTDOfQBP7QzkaEcQIusOeKs7aKUOpuPAMjmjYO1fF33p1pMXOAt9aG/\n2PTblUoL1YPu9KsNIhlzm2ozuMamIkfuvs5qXhaRmv8kPLuI0/8RJZhZ5WLXNwm6\n/fUMs+neP/u5RPC1L1VhPBVgMQ8nEEduUZQA/+wF6SoGI2b865CHlw3BzWSgew/F\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAS/nxUEbCHUEKAAAAAABLzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwOVoXDTI5MTIzMTE4MjQwOVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4\nRDczMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPbp+JV9q3NPjGfq\nxBx5xXxSgho5lm5mw0BGilTRRJvIyrdu7IY66wmgAuQIXHNC/NU5zHSR0oe2Ctre\ndDEEXSlZU3lVXMvmhKrGmgM+S78pwgKbuQm3EbVflk4eCktFHfsLyyOjm2tJEG31\nYbETECH1gPndqoW2tQnF/t5ja78RLsKJNVZQ+Ve4ZHH/lyA7D2VZzSS+ycMOAFso\ndSRnFAUgkX+hosY1klxOn82TY2IlBoWtwgh1Q/b9fXGc4sLdlboNpRrfahiaFMBa\ntgvmeh8og+yn8GtUV0HwLoxO39nQguUPp60C728ZvEDVbPT7/e7juNFHgcqyUoVp\nZSnKcBECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFPCMkia2Ud/OlYLqKHNSOGPlWze4MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAFNSQ\njAfmlQfG+y/VGBKJaAvsbEtZTgzOdBeuNGVHNAnLsIu3olfaWKOjxMjP7fr1r8wd\n7CGaJnLiF7J8DXgovklTdQneFUPzKWMqE3cvDncf/M2fdzk/pKMDkaojYo08b8UT\nBAUTpNlFC9ONphHzc1NZbfq3AxNLt1/8NHvTEh2mwqc2K/Bp0aqmT5l75IZnV2mb\nXn7pQIS09Ds8zWCywkA4IcviTKuQczYbFV+ZdJzZDqyVNVQLtShvHIbp10m2FQ5w\n9RpbavrzwemCoi5jk1TYpcR6EfqcDd5AUP5cZM/G2lOax5UA5vrK+8JlyZEm+ZAc\nPQ7hnPrB5KAciuKvEj1HhWlDF5MlsoPauTNjN0PZ+nlo8xgi9ku7ZssSD+U+Cisl\nzzp5seXb8uCq+XMf1nMUF0i5GeSI2fbpt6RfhApUoRfnumsSBtZBcfMO8+f5X4eo\n2XBPw9rQfj762hb+J0S+yUXosVGyNTpq5rbmMUGA3q1OoQv8HSVNXWgQlSuLQs+5\nuG5sNc2zRiHbUkmdbyOKhu4Pzv8c4xX0jhNOplhEqff/+BrNPyESF02ygfGBJZVS\nIUebi9EP32T17hGh6SlmF9cn3fLAZDANn7ZtGE0mnGRYIFzw9oC+FLKjyTukgo3K\nb3V77ZRsxTQUUrMX7Gniow6ZiQhCSocMQ4eIcqA=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAcmzQIF4ABKnmwAAAAAByTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxN1oXDTI1MDEzMDE5MDkxN1owQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4\nRDczMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMOnqgloyCLYm13P\n/xtWEEY57KaA1o+i2wrd/hhbeOUOCYRIwhSoieJ0sNEy9HQVgYjZVGaZZeIP7+PG\n2aPJX9fC084akqgQJE75wKnVRsXaphaXEL46Nr5ToIpmY4xmFIgw0/OfufknijJW\nXn7wsVI+jV/TWyEDR4YNfh5bLfqXPEwUFSYZmUCRNrNJPsjJ3T5GED0ZmjK4g8XQ\nVAwwF0VYr04R0+w9xddhbkgshMYkzPFnP8MexOrY2XiAmAdqKVlBZml9WHHf0rke\n5PwPexSVm8WzdOiaYAl5GqIeDWFM4ttaACHvHSOODlrr4kjRyWTTial7JIMoX+3u\nbfb72gPpsWvTRHPoDfMPvHZKa7nLivmMrbq2XIZ+OglOFE9EsRC8+ICMBrYexmkg\n+2X+tVnB+FIzQsYrzrqcvQwBUg5N7utvxPYAlhZf2z6vglBn6m7kJ5PjcwBC8uBV\nAwvi2+Em9VUwgeRPtgGGpfXjnPZ7OToHTL9r3rfAeiJJl8pBxzS1/N01eEPt2pXb\nuqCEh8O1Kkp6OkNHM8mlDLYE5VprXtY5lsHfnaIEdHFo4s5dXDbODqXgfUtpEM84\ns4KbRTZCkmrJvE+pf2b10pvXoK2ghQ1rRHydwfbYxpo9HvBokDWyNUHkREcqvAK4\npvHA/xCkIhFpRqjdqiFs1t5eowvpAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRGjWxudfNm+UdI\nwxPK6xlumF+GGjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADLIYYNIiUZuMxJPTIK5qDuyWbGteT5U7toQCiz75Ziz\nuxAM9ksmDq/o3UbnyeCJfWD7JYfYGien8afXYHhAP6i6SXFHj8Pj926LnQZn7ItE\nOUeOsiMgiUNQ4KtsCMf6zd6eq8iL3UoDvlcyZcZOt6AZ4XHJY2OSpQGiRycrMxkb\ng3WvL5lTweTSMZ/X2bAS/4SsYMAB1+HynB7OY8aeiBQcR/+I+b5KAqVmN2YZBaoe\nr/NEImo+5u+t0My7VvH8Tsd41V5xSw1+v4ZOZ5YVXGGpk/gkPq14IELRPg8XojFQ\n0xx+u69Yig+tRqrMS0M3bVoS/l++58QApNRqAJMY55K16r4O94NXzXfQ6oODXIc0\nYaFcphSzjgSbacpdYgYEYUNHTooVeujpSB6MRjdrj0O21rdoguCGLu3i6N1m9Rt2\nGwv87rmmf30xAXZZUrkhI/w+/sDusncmdN3Ez1krbBHCYeJmV5c4lqow5W2A/dFt\niybozZ95ny51dZPk/tR2JlowjuduxSv7Txs+cYjAuEgic2oNl9omgTnwAgqOaIF5\ndSM13TFmaKgBlcfTRfJFLCF2ltOSyMfbaiaoImBUlg+M4htor0wTyUfRnrSd3djG\nUDDX/YJ41c3xGoFW7HvEf6pEXohNw1KFCmO3vNf1uR7qLiGBB3obLcenTyzUNqox\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAG1RgIPNu8TG4gAAAAAAbTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0NFoXDTI5MTIzMTIyMTg0NFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD\nNzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxAMgQASvjtrfJ4\nANK0RihfMjkVTy2D1ZLi0aCYcRRTf8too0fGPY42SnCNTEG65JndAhhQfyWKc9YL\npRNChgwLCibFaXYBPpXHqFuh79YmftSlGqEz3mZn26ysf1J11xwPAX0W0gQCWNuL\nEa4wGzkuJCuBt4Z3i+z9dGRXuemFMEBtgXXD61AI5DHZtnFCQR68+dT85T/6wxXM\nARwUylWuBOeIgv6Lk/5hZlCTl2rOLt2K7Z6b20WN7eZIwAkV6dAbkMMkOMBBV9Rd\ntSNI3nqQRgNHgunRMWM6XBOGzSt+pj/JKZIHxRyn77uCYJ5H14iDCgq6S7v63u+3\nFHo1tNMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFHwOaU7LvhQ2+GeDDi9s9TNkbxFfMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAExS4\nTiqL+cT6/ZfyNcwNnrAyZm7uKoeotFJZ71H7GrkIgiXpXDgRgTuTTySvvl+HaUCm\nq+ZIKGtDKCYi6rMCqTlU6BsUsFe4Jy2mX992sRyxuUF9MpY+CrT2TeNwGy1Lif6D\n9QeFrk9Ug3XZb4wBfUdte5eqgRMBfqwyAUFv512wKrpJdTMdG/kmMNkzCT1LNhWl\nim5ZoepUA14oMM83Xav0wumykUygXPSy6VjS83PJ/YpUWDrWSLtQaROVPe0FQQ5G\nKLtj3Fd+it3qU5uBxDwmmsEWMfe5c6w/uXGE4f8G2awloaesVgZSsxflp+AOKQhp\nRv6CnX9P9HbZbVPIy4bQfM+jpZgOcm/bLeqeAS+XqYwgGe1ZEdXYIX8bszjA+rHt\n79wFfSk70+u0GsCWZiAO1xkTiRAIiboKKYNd4rhO2agcVsZc/XCsgkFhnm9KfAEW\nn7X5YyAg83LYYBsHJeafuSuBDixdIWle/BVuiQyOzIShJfdhg7C+wctXITvBrEqv\nfDB2uCD2P4cLoaIlU9+QoKTHij3ZdIitxj2/YkCIgU4HmmfHNYRA9Qj39xqGpeeM\nNIdibCE3YPisQvPjqIy+U4RE1HJXfmFt1mrDyDu1rr0g+0gf8ZoN89h/P5cIWPfK\nTT25RoVSNUl3CjYbNIZ1wDlwiD9aPq1u/3quYWc=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAlC+l3/zUaemXgAAAAACUDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkzM1oXDTI1MDMyMTIwMjkzM1owQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD\nNzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANPm0mnZbAfOoThY\nttvnKleg5wODxk2SRNE6TtTh5u+zdG1e96sgvc5kSfynYzacT8DMUniMBeR35ehh\n/ncDVGH3WGgt+Fa3y5Mo6Xj8675bPpkE8xXi77PsYZI4NtKudeVqlZW3RT0XnKek\nENLbBtFSiHSqPX67HkYlktpPvBLeKmLnbU2DzJmdT2YUZf98RGj6HAawvuVMEkKd\ntFyLO6JdlLHTP6+TFNIhmdGNQ2cE868CQZ6e0KBVs/eoQ+ZKrnSS2ZEHpsVsAYIz\nJX+zyy1Sb86+GTs+SdaqOgCJXSkAfxjneAX5aiJFnWQk7q4sRHoqPmVMktAL7qDn\n5Hn3EJYI5fd6eaJXGtGrnIOgPPJPMDO1BDVNSYj7ICYQuUGP5Tbf4ZR2QpvCCNHz\n7V4pLH4cUTPBxBTre3weTVbVzwrIs3zEvHoj0dLuv1iAqpRFvM09HG5Udx76K1kR\nkcOqwZdI3lpO/5EuvTnA545FKh9FNgQ0qGlHwgTR98H7ksOnER6OPkqvV2agYwaB\nXrqFdccTG4VZ7OKNKXwtbcSZZgMuxbFga519i8H60Ja9mTmX7p5s0E0lO9Rcu8lw\nIh7SeVJoxKJb6z7osgj18Jxozx+vGN4VES+h9ViCvutoElIlfb8lYhXSBHs/kSNl\nrBzwmmWpBernDzL6MbaiQLYAIFfNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT2wqW3Ib0xl/Na\nhoEBBdB94tlM+TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGHd7ZvIjchygqN5sRBMKApblLtFvqfgVQtAAbw6q1DN\nKB495ZwxUmm5P+3TnvslFJojoDsAxQbFxKFrQDBugjsZygfKgNYKjdDbDPqYmFBM\neNQC1BN0AvJY3d+QXvifCNqHx6GHIGmDoIHh6qo9Xq5ypZwshPFgR1XDR+UGNmui\nokRtY0CaYVcHt9ygKwDcmA4X6j8W/F9ifjhOZ7r3YY3zatS6SSTUZRFkV5FQdnC/\nfxC8763637mzlYI6ixttTMx9IkRGQAr63sVOZzPgtc1E0PjuFiBprqPJEtvwAAe5\nUXtvAdnAe7BYU1rlZ0MREFsyiYxrIUI5QhRi3AKDFAWF5CxWkRd6Pv2MqiHscysm\n6ERfUMZNTEvmx1L6PBOS6ZBLrkhp0YmBYxH+PAFo2FpZ0UUt0RZ8WXmCllXd2Jle\ndMfrAjc10i5F+Kr+M14tmYszOeoufy6nTGGl8iuCOdIDuFRjNPlcFHDHU/7+Dj7N\nFAvu5EYC0Jsgxd5IgwLLy0s9a90fvMO6Gq1+4/MvpzdjMWQzhNnwgs+Rrjxzom2G\nzqS2v+qdQoPSYfwjCr3Gpwoy4M3hBHXQq4uOUMCHrke0gw+sqtoN6K2T2/zjLj6U\nhFU0e3iwXI1QhySm+U4zqtri1tF7PAaPg23/W6kAQ7Pb9q8NYoKa2NEg9pk/o46B\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAW/BfJ5U86RK6AAAAAABbzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQzOVoXDTI5MTIzMTE5MTQzOVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx\nN0NCNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANtplkmh3iVKauvO\nw1a5PE6IDzZxtvWEhQBIiuWaluYdmn/LtyVQqrZchVT0JTIRzklTcRDsIx5OOmKR\nVbHpNOS1FCNL/PUkpUdp7owNw5X6X2AUesqfHYAYgeQhXIRHJ+4dO0FGan/rT5U6\nPL/8Z8UcNXioPYlK3hsVNHWGMxdV/mz2nM64nIdZq0mC2wSSIJHWQerE1MMwR9Do\nPedy8Zv/yVeRfIyA8Tv/9UmziFZyCUM1fumIXGaf708O5l933CtLGcy2Q0vyXrEn\nUGzOZ8dv3eRn2Ruj+GrFNZ64auKGcB6yU6GP/o4mxMUDoyuTihGZj8BLexSunNC3\nn7jdZ48CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFCPDBmszHYFkhsNbr9NKz7OkF52LMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAftAn\ncwJphGgrNaQw3aeGioQioUGM/wgkKR0a7vQlH1jL8UenjW6u1WGgHkxpj1YJ++xY\niuCtlpQIJslPXMk6gB5AgECedUi8jYkgQlpSylx4YqJOG0h3csjD41sJ613bpclq\nWKXEWaBoZtqiHGI/lhDphN0SctBbaXkkGjXHX5qhHI0Puquiy84mCypQtnA2P+et\nTnGdKz9d9DuwlK0ZkCa1tx5X6IeIryNIUhpk0lUWkQr+SBEaFZLZ6RJZM0lkADc9\n+jyhrSo5hnH6qmngptVv7IaIopdMMshgRTZQM6Z0BzSJ0BdKqmWq6VDmzS17kCKs\nLnBHlEhfXWAt5z7VQ+I0l9koCpHermRXdXuDNSB4nTWxkA3WszQHZpYjphKr5XqK\n2DXmdABseT8CO4mhTrFHASticpFmBKjs2HPf3zZyjsDbxSGvknWiGoVyP+ufK6mF\nBEwAWRYn2Z0DyypGRXT+tfps+kswM4zCTSlykGM/MYErNqK/4CzH/A1Ah2saW0eC\n2Hn1JtvusgpSbVoJ/tA9HEtuA/rMlHVh54StDcmTFr9n5pd+bUpSW+/J2tErm5Jv\nQBQ04nVHVNO/nYVH1sGfhMwQuvVjGmWZAalEO4rbKLSrFWBMJZTtB/hSMBoHTUlN\nLflEp/cOea06cgQnDK9u6fXtT8petuqg1QB5qLg=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAnFSIjeDCns4rgAAAAACcTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwMloXDTI1MDMyMTIwMzAwMlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx\nN0NCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJgra62xNaOjXZr4\nbN5QBXpX7PzhMjR5ER3oEj8HnLEil9ZcN5XM6IEymmmA3b6dwTQwQZda+jCgGYYu\nJE1+MIHmfay9nPeTH+8U5k4Ekns2ra/T+BJ9U24lQ5OYAHmwplf4HwOb6zWGCGnU\n9O+qKV63UY8iwXt9uzCVO2PwDyZsrMjeRj5iUKMgExq1v5yL+L5ugTjEMhBZj5Yp\nrO+IQZEAXd7iddC3dFWmXfcXJ6eCL0lxGmbFZNSwIo9iaQXOwni+yTFmxxmh5gu9\nV7xmqyw3wbTQrPrWwiSUcc5Qn3yH9/YzCsLM6CwhQLc/0eFIw8FHZa7xKtlc1nXH\nZUsqkZG7cZaKHD16n1aYKVNBUJ6lw2D/hyJaoUWtSsaTYFUoZIC/hwsbVpWVEme2\nbv9HL+PwDkKJ+9PdvyKdmOZ5wymUsNuGPrK1WQemb1FV3lXaYDB4h2N3PKrsIimt\nE1uMHNwUjEfsdQ3R+JOCTX0LbY4rX931mkj6mCRrTa+F9+lN4Xs12RAn2iwHYVkP\n8QcPuszjhLV4PtjoVC2O8VbR/v/QLVjy78YfNp+HjhE0jjp+UXbnF9EwC1DCfPjN\nULsMpntZr8nU76xNl2t/XKEl9tH9pgjmmQ42b63UCCo8sb9hghwzsiiBLrMYLRoZ\nOz1eBJGVKj8x94h+Bc5msRwaVpQjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTk01CDrezoQJu\nenEjBhBS6FhYszAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEnrpgcQWYMyQx9xsAkQ0ZLofNzsF/kQ1fb055P4jV2e\noN6xoHPJEAvklxXRPr8mmV+yFMqWGKpVZJtseMvyle1H/EeV9RLem/Y44nT1r8S7\neQLUdcHemsmFEOirlf/WxtTFQSIbNxA2W/tfNI1x63eTTgH+w3vwC0+3i6ffY6zy\n5fwwfpIBqm/YwxoJt7IgxV45IQGlM3k/BDUkw2pFF/RKADRdLegPkOSiPSBJnJML\nRet7rM+i5Oqg6sEjvUblfgM/sg/g62fLSiUlkl4re7M/2JaQx+D/eYQmPACrH+yo\n/quSdGMr67r5sIfDoDMn/M1MFr2N8MQCdMHTT0Y/DiU1quDzh/tVjppjejsAYNcG\nysaJMnojwhGA14H53FXgGhgIyMYNaSBRCCLGId5PoTynafbD8gV+RRc2Tqa5/WuY\npQ4Ins1RcRI9ZV4JJMvogtPmLdEDZAWfQ5gaX7x9XI37Pkgoy3RZDo0IeOgT61Uj\nZRj3lcXXZBYlkD6tT3vGP4jsUfJa570pzIMOlkNsWHvSndj7IMFbUgNrx7Sb8wwX\nTaLn43hII15pqGYjGwDLaBPUS7GtJkSck+RQ13n6ozH1mwIPoDF1SmQrdyUaF2C8\nkJvTuaZ7+tPywXpDnyNCIZl66aC1vHL6RqViH6VUfi1qpN05ZJcXUS52+ytkycx5\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQuxBOb6lBJcmQAAAAABCzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzOFoXDTI5MTIzMTE4MjUzOFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE\nQzEwQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJLpBUwCrqB9QBu7\nYv8iHZlMmgOcMSZLgW8Wi8zNVcdiT3hl+s8D5oaLS/yuT5Wzk5RzOR1dIi19I0g0\nthPnS2h0EKtkad7pEh2u5/iUHf4g9C8cqnOWJUaXJmjZzvPNdYUWMMAOXRvFuSrf\nHjVQZdjKttIJr4IP9G7c0R50JrW6ip0TiDv2rfqsfLOO0TEo+V27R9Cnj5qdWWKs\nZkZPDBNNic0A8K9cYkrJ3CxssbmATPLVh5CgBdH6A31iYlgXNZH2APk9WtMN91O+\nwjtM6O+oC2HwpUzYQObw8zG0Pb4dV9vY6q+k+5rdmX51mu5E05cT222PlmSGoBfq\nNQ35hdUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFIagI5wBK3aq5mNI3LLOkhN/3yLUMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAL8bK\nn8Wabbx+B/L5ogl06DzEu3JSVDAZ2QRKecbCwPnIY4euZQ65KJ3GzTZQkDrxxIlx\numwfPgOn6l6yPDqr6aQQUbWXSrVUFWlOaClaQPVuhwqFK6bIhE2RJ13hrpMLBKr6\nmq0Mi3+63nnrF106/gWMgn7Er/sT4954QtJ9Z61o70rCrZOgI17yp1MXOz3jjkr0\nI5QtoqAAzgzlTegZTh7F6Ghx1zxcsBIiRep+CCyCJqMbeU19Rz16AsX3YOXnJccT\n8uUSvc1OZv7kGrOe3XCP0nObymWeLfZL0avqKV+S5skmdYG1JKQ77I9/miFhgre9\nT2tBeD4NRta00aOo0AXXAqmjMW6umX14fjYx21ylRqLLX0K7TDtzxoWPMfgrGgDu\nhH5IQB2i6iql3Dv+olZ88Urc26OKX4ifqSnXfUqDB2N0SH3K1c7K2lsHvUfwkxyA\nWgsDEAnSNHq0HkmBbX4fMma5WqxX7hKvaa7GBUMZxLVmyvPjWvtJ9X6wXn8J7qii\na1ThX6Y05kBZTGVndy0ZxKoIRvgZQeMuP9iABVDj6Wm9CLOtey4FLfzXxHC4+tA/\nA/SjTwJUZ2sGO9QX4+yyJ7x1qPk9Ac+6mluu8N9uGttU7r3On1rDUOhotGklGU2v\nnItRC8vU0o0ft8d1HZ4v/pYqjtpB+phhjRpJIno=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAnUxHNIhxsXScQAAAAACdTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwNVoXDTI1MDMyMTIwMzAwNVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE\nQzEwQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALfAXMtJ2m5Gkr1v\nRDW3frkgye3ABds8o1qKcTn+kqkL4wkb24BwLGrPZUnyOBESVlgVX7xhonJ/sHKa\n7HBqdi/NYvbbhKJ9h3xr3cVTsRrUiDH4THvrr0nG1Iv/CZBAiaZRAROFQ7EBd7u8\nC1bWRthH3cd8XQWdONEGLlze8Gf478Jb4GgWSegno7xqJF/lItFMPvQRe14C47+o\nApZIAP6ET2/bRYRl5UK3t0MtCBWd9/ZekuBUpOjkczp6mAL7amoDiPcCDtheUsJj\nRGLLcKFCdQA+Df56bLp93rRkLoRlPPglQhru/NpQZE5owz7l7tJiWJlH50w3AkpZ\nVE1t/7roCKafNgk4DBw1asSDIk7+KhrqUijmIZFYKsZpfdHRQxzVbNyICukkN0aE\nHCjPX1M8zy+gZi7GwFamTAQw6olyAyp3UoBEW9NlupqzbWG3HqYynVuVwI4ttdiA\nt/X/c5A9kgqE0iukSw2wjs9xB4qREFo9yfD4kr+yjd25zRELPhKYRRBOqxuPedCr\n+lBTEuTXilvvGLVe9+y0fwGxVT1yiBvWwi8FBoG9qJUyBzEa4FaEgpcbCk2FmM94\n4z3qKBBvnGCoLL8gM3ejPQIo97GwNdd/XtD3BdxLRd4mKnCY2He7oE7qwrzWXytM\nxobCuR84kWarjW9Tf37w3kNHy2lXAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQgZg/WgfDgm7AW\nsHcoqrC/pgXDZjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADFnL1ecraifsEmStz0g4jwvTVxiacNdBB/rkuDj+TGp\nBz/yNK1wV2j0niH1oFy1CS4uOcRd/n1xbbwkXw2GyH52/DBOExq5Dcgulvy6N7S+\nRjDJa6YvikZASrL1ZwcuJc/Fc5Dm5LpiKHSYA3G+9H1Cp6GKptoJqsWEwp5P/jYV\nJi2jAPZpQ7khG9qXW6m0cpj76d7nNgQPpWoc4UGfpjmVc+Of4wFntqkModWxK5JN\nMQbE5WA1uQba92pd/yAvMjjyAhchatEqNexTbEuudsBVtVZ1hxSccrAXnCZdZevq\nlfuACMwlZRF0mCiqjnUaUeGJC6E0O+wpGwZTSviP/Eus/BdEQ74vxol+G8DVJj+1\nGihbJUkXUp1F040aiQ/KKGPmq/I806C00fqNv5Np+32npnW/2D9MMBRW6Sikxdng\nLgxyAA/q+U714i62e4BTrqEv3MCR+NJMLZHKuDFoqeHe73gJRnOY9X9MV6VP/N9R\nlGNtLWEBX0zKVXXCS94pUIXMyeULFU0qGVdXvyMXaCQSabRI7Otf8vH1fLpzUTEF\n5JrEGreZC9cgMabflgR3SbThsGUNjIse5N1UGwtyPfAlA202GGj3xLWZD3mqWdcJ\nFXuw6G7CZnkQ/VnhS5fAaZnphPGYIYuMw3MNR5xtKbtUV8NdwH1O7b45FABkq8qG\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID BB9805E319A78DBAEFA888B45615957205179181\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAATBsqIRUBYt+4gAAAAABMDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQwOVoXDTI5MTIzMTE4MjQwOVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtQkI5ODA1RTMxOUE3OERCQUVGQTg4OEI0NTYxNTk1NzIwNTE3\nOTE4MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPIfQ/gq0ISlYby4\n622t6LpH+Zkpcn73+nvd8o7GOvgpUT2NPQaQNsiDns3q6nvbXeEen+d+3ucDbMFU\naO+7g+PsCMirV+hvvtIPA0lTQwQmTfkh6LvQ+ajo/mTLIBL1HYDnwMajJk6mtMtp\nwgv+eVJclAXbxlW+xLyz+bED50vqPUxgzXhLzM21lbojreC5G044dxQbvxclcQ6W\nOtWqiNzGUKUhYuimjx8NzJ1ozsxjA/VMdxn10+BP/6PE91sqGm0pX+wy2o3HduOc\n0fmtxiEp07vynrKZDK0F5zWAjmlwVUgiGFbEFzEDVtt9XYcVYkJ6FqfLrtwvoMSG\n8styAEECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFG1DkNmPqM0INpIYM/HcweNWqcNFMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAYd+P\nmoVgXHLw72Zt9V0BtlpBQVfULI5bmEPH8JwpBg9tXKlfgGtyui9vmOP+LHzSp9Mo\n67WZ4Yc+voWy+LD+TGg1zixBP/VIz4VmDbkbpUO+RN/viMhJhKeTjtahYAlgHmec\nEnenxlqYxSsw7Fu4qclE0LTb9/09Hu5kHVHYxxVeOMEAzVp0MKuQzDwp75XDqoaN\nxxCHxTOu1S0YulqQLKLS+mk5F0uHNpuwLV26dXn4cQiWRjhAotn9RlZVnM7htVdw\nw2gTOU5IVUSkQTfjErPv3Rpy6TDlphz20F4tGXE2FJowmodGeuexCM0VkE2nxJuR\nrmcOcSJOCV64ZchzahPGsFrt9gI4TTUt3LSzadQRD2g/4sufsaKknluJmZISBwah\nxfPnIwCBBDfCc1LeD9qQ0IRm+2F3G0w3+N44ZB2QW6Hmr+1aibFpQ+9w012GHSRd\ngYDzl83jwe46LmVKaMYRI6ymdmorMQNw5s1eNVZ+m1TkXwvLcVZpYrXcet1bu5AK\nehM6DnFsHdLFox6bDinpMCzBHBZvHPHk5J7w68oqSrBlQG14BY8hpvj/Qysutp+X\nWflmI/Q3gva400878ZeM/CEvZJ01HfL9ixArhcBBHqEyyWRP7E6jlkZ9H0pVxZa1\nG+7F3cOOs0BOB/ZseWRuyeGg5TJfDVyJMLrWKJk=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID CEFE333390733C6727C7880DFE429AFEB557A892\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAATEdABsmHshNmgAAAAABMTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxMFoXDTI5MTIzMTE4MjQxMFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtQ0VGRTMzMzM5MDczM0M2NzI3Qzc4ODBERkU0MjlBRkVCNTU3\nQTg5MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJeYp9SL/9/8Kbkh\nCL/H6Egs5OsXj8y8JNWrwCefthA/olkiFRL1heqSoMBvtCq0AxiKjTb5EuSBdqNj\n/1hC+gHllqRJX7TWJRVtB7lSsadEvnzFcUbdHwHiYfVhkz3X+dw3/vhNAJUH8RnJ\nz3Rfu4DUs3CxivjRxUKpvaJd1Y3I92cwfLerVWzeVl6rQpMtRAU5/y54V/m6H4r+\n9oJ9Ce8yvnsA2H5BiWUzHwpUSIfNLlpEK5TC6Jvql+d8DyxfQLT90MStZVnccGK3\nssqmsomxoA6/CH0yqE0N6OSJPIiUjGwzoyZgzDUNHjpUI5W1ipoIBXU2OSZJS7S8\npZ7UtUcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNtCGgS8Z/Phu9V+ffPUmii42p93MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAkfvM\nTYu+FU2dxZFzBu2LEEpmddcHaw73Pbo5T7k6drtoLkN6JNtdDgODAdprTY5Ev01X\nLSsqQ1fPWF6+6hCYbM8DH8Osr+7CPE+lpWcO6dA+GXzBUlOD/5xl2hoa79zG2/AR\nUHpX+Inl6XKHFebjqCwsFM7LRUcejk25bkkYZ9MbZHjXfIvXz5vT+t2WjO8xb4fL\nR7fkOob31EEHU0GznrFgTDEFxRQ8eLmqrtnFagiuWCBCRXEPDto932nZu2W+H60l\ng0j5BMTpE4i7XomeyXAUJkS66k3SRYMc3cAzhe+70Qj1fWXMtpGFFDrp+XHiYz9K\nozTIcvcumxNC1g5ovKe8H+eT8FQ7RYiLm8hCB5UhkSD9NWOLis3mEpBQZLLcbRDl\nhdhjQwtGiu2Fl5r4uVTzCi28KPynXeSGNGdleEunZBovTTdPYfsrzf7IGqgN0pdA\nnOaKVGmzHoACRJmX2TkzKE8rELQ3Z99xqnnJ5NhOWQOKxciMhINi6ZDrH7d048mO\n3WD0pSLl550kOkPMaXaXHQp11cuP8WqrnBxTN/G2XnVvl6s29QFSJo2DXU0fKjUP\ncaTpaxEfeF56DOyavGDnQjBFvc8thqxf42xPz42QAU3uClp7orgAaF8lXzJ1bMwZ\nwXEh/P0AOGfBeFJB/PHVD8fHqUdfGyBQNsajL0U=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXLwMMtkh5fiOAAAAAABcjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQ0MFoXDTI5MTIzMTE5MTQ0MFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC\nQTE2RTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJQLD7W/nqygJ3HG\ntT2pepdTfnsg/cRqtXM2oor5zy/DVjSXqfcS22URWBU91uiZj9AKyU0Fphhf7EO/\nGXk5Zm2AFRJDN6KvPPZeBNauW6o/vRbKQaUAXfSVfdOUzG+kMyGiOkaFsrgy+kQ+\nke+2UhPDoLiye2t2G3fYEaXtI150M5fFdNMM6rYYD3xTqKebr34dg8ZzUznHKOS0\nMbfVxhK0oBuMkVip7xr5hUly2tZM0ovqT6j+JAc1u8V8VykEKeX3UqCM5tAjbskO\nPkngO8JMeDhLOaR6GSGHj4QI1UoPe6vRPWNbZ63sQLpZcqaOd+s6dY8VJSjklXIC\nBiJxUBMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFHOclvrsyWMhihPNC/TTTjW6CD+4MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAa5VH\n6WmfP+FTpUQij6Bh/6/ogFWIUxpD513fFL7Wk1JCeQ3cLCFV7/hqIcFoCKoiTvC/\nIg/lugnPbAaRQptlU7ZA76pDQ6p32U+XPgsYU38+W6FDNmgJRT2Y3JlGdG/gCDDW\nXRcMbjSL7flhYKnyn9lN0t8MKQ7l4UE7iyCr+3N4fAlEWdxpix93+0v824VqLg9q\nsuXE8ab1SjyxUBPy/ozJKovQGjShkcw9sDGcYWuzRTyHEbcB/j2guRWf22V8GuUC\ngAfwp0JZSnb5hlC4fO7F5M8Fui7iXP6jtiWpSoIWbB/frHzndtkM6EGw3NUQOs+L\nguQLCcKUpR709w7CnvmHE9AtMAB3ZAygmS/s/oAEf09fd2yiSzRc+fzUPxbYeWcP\nEbPx8YCag+sx/ZfhCDXsi4m4tY7nyv61oVWu9m1vwl3akl8ZeiSPvFwXjk3a6OOZ\nzE69lIFcPE6H9r2QXWYBkc1NbquJ110fHcUBImh8lpJifJ4iY9jvomes31B0vNva\nbtOwubqK6xCk8jfbD72xFSWNO/33UsXDTExLiyYnGe1TNr6G3+PX0WD0NIceI58M\nQ6xbM5VXEV1dyLsOKXnTvTLsQmd9hdE49ORUmYV9fHUcQenHXBS9kJbTPOA+5Hp0\nrzpdp8olv8HD6Sf4P++ry4IPcia+/AMoJNddY3Q=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAna2JTbUaMfmOAAAAAACdjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwNloXDTI1MDMyMTIwMzAwNlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC\nQTE2RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJPfjldq2YQNA5xn\n0qy4haIcKujDbnoNvxil5lebOXRgBIvxg49YIez/dl7e9fhRd4pTsUr3F+cDFPZf\nSYksChFOBGMzhKr3rCoe2oxm+JgjI0o4hNfpM9oh/sJ6M485LuiddJUtv39L4hMh\ntNOVOD3Z0MNZmmEMuNjvpwlnfb/1zxqdy8z2lFJJ/Q2hwgDeLKBH6yy80eufu4Lh\nZ7Xh2MPmN+c1ABTkBjv+2FwIKylpmsvYyDUIlYuqK7wMx+1oF7DzTsGo9su2l0yw\nKOkYkSb82NUMFs4xZ3lisCwv4XzcBu2FMXwkraEd4Oxm15++MfkLrG8i+PpBQh22\n0nqHwO1ED2AxFilJgZ6DbL9dnuUVz5KpeAhyP0kB3kwVp3JR674gahAljiZASmSm\nxsEiB6PcVcxZ5S57DMpoJPFhjhxi6ywG5ilQIP2ozIoqiF+sWfIeWcjQMODW0TDG\n+K+gLvJAU49QHMgqp1qgvyPmPzvrUIzOlWDaSY+dxuPBy4ycGZPxthbiRQ1Ea+ro\njc7HDa86EZRsJylLPUDtvsO0ai8ehcGek4HWT0JhrEWGYQI4GrkDVlZB5sLP+/wK\nkb9wH5z4TudviTnFCcmZhNNtbUMx0GjnnbKDPWXv9t32JHhK/GV2o0umk4JqVJbo\nJwQjvanCpm6JNAd1ntG8YnkTCinNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6gn0vRBrLjYG3\ncz89WTCcTtZL5TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHNlkd9mowLEn4xWPt7OQ6xy9ExSfASNRNsjfJfvwqPF\naOxx6/MG8R1qAfFerU+2gNZ+kA4ds6QdfZEtD72idjFTWEZwehEDvODVfjIYBRtp\nvxDNiueEdiye/DQRsJhrdp+xRLo+ln2ZWoJ7kAIvXDgRZT7qc/TifDdKCROle1O/\nozG+7FPpm3Mfl8S1XARzIfcwiD73g8felns7aSHC0iZ7OcK3AES3lBcGXmoLoEE6\nCMCBieS0SASqAaboIOb6c0RxHfkcCBF/rhnZm6QMr5NZJFIa/JngwXOEzhU+Q/2C\nQiFbdrH3uXmwJBG6uatO1FoUm5TPE2WQntxXOJH58sn3orcmQuKKglPBOiTPUNCj\ny3jlkc7fNHJEKlVU70G04WDH3BD/OAaL9UONhfJDnSp+J8F7+p+bY9T2a2lZIvkj\nrxF3Wp65IDC3NovCk6rw7zosKHuk6NqB5iSrL+hQUVq5OtrAMLrZuMn1U1B+ykNv\n5JxKyqO+ukqNZtT8p0hl79HjLRrkEOxn8Ggc50pZglQLIcVVs6Rds9l7uFHlLcET\nPIufvMmeeECd4TbYSJIQHzynB+rn6+dgag48naGeQZ4UDysg/GDsLURCDBeh25zB\nU2WeEox4EEvNSCRMNaWJjBXD5GJnYL9WuAdRcJL3uXu4VZKmkXe0Ikiv+kOJ6E8z\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAG7ciKpx0AvpcwAAAAAAbjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0NFoXDTI5MTIzMTIyMTg0NFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz\nMTBCODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxB/aFgRVKFjwUu\nELEwZ0jE5aHaydRVd9T4+KQCNkFEXw1CAs2cU03gdfz9209EiRAMJc4Hd3DWI5Ru\nz9uSD8+CvZULvH7Er7GaoPq8kBG+d2TJtbHITGvX14++zuvzUAyXW6ho5vuAIO9Y\nINWYaRdljAxUO2TgvxGZdy+bZsf5t7gm+cZj9DnGx+r2Al3i61zgDhyV9cix0ahn\nzWEkoS75UvXIb6SWo+L0O5W/gNuWrAkOfu4BMXzNndDRWCLqwbNWV/iz02HUci6o\nGLWpr01VFLGiH8vQL5CGmH7ubYMLTQ3+ADBWn+dy6Ef5ASCY0ZKJibOE3BpjThBG\nsY2F230CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFPahi3c37UZuXLU0WJYyLj5Ok6w1MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANQMF\nhp2iXr0Xi7nGjL5dclOP5qa0d4xp738dih3Fu4YV6fzX9c1wY6EWTBoiTEUff4LG\nP0B0gC++TFYy9zDAYOovoVYwq/iCW518DTQgIZFBtrwgrersWliRwN2+YYt78bEw\n8e34X2wOOsPac5v7aGU+H+dbA3LSlmVW+p3gxUXm/0VWfBcQOsG30PSqF76p/P/E\nlWGjCmHC7m3jYRxvQbm7YGeftCgeaaCwvc9+sSKzGqx9PqWCOzk3IT1TuB89+5Dw\nvrNq7l2GFVAEj/lQ7sZJ08bpjo4qzj3VS5TiOhCL5Tw4lecyqATsNXstTdVL9VUh\nNZdK1XhvXGvfeJFh4lEN/X9a4HjB4clAqMKV95JcuXUEpNNqPr0CdMqdLm2yA90o\nlVM1OOWe31EZupBhNhut4HuKiPF3vb0ak9Q3Asf+bv/LtuzxGAun1cCzfpFhEc1X\ncqqekOh+GjqZGaJj3j7yvLgPvpPW6ovyLhSANkgTGnQBucmc8VzaWESVCJgebMpj\nQEmn8rAqKWakmyyzo4DLeJ7c26C80xtxhaOanJJVAU1hf5/zt8bOTGKi2LLxi7v7\nGhPQnL802iOtm+WaK1Tq3EPTAccVoOWKxLGqQs+xx5vuU9gKN2R/rIe0jZwIro0r\naMwOqCC9vl3yNcqVhRAyoOWPSY9A6GF/Znj1LQk=\n-----END CERTIFICATE-----\n\n\nNCU INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAndwfDVyRwdeXQAAAAACdzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwNloXDTI1MDMyMTIwMzAwNlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz\nMTBCODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMZn+BtLRnwdovRB\nh8nF18hXaHvPyWkQxKjixtkGbkti0P7lCJlssywrzNyooEOsA1lUbC56jEVWamBi\nWtNhVdIoYEPLPhKj/o+KjMdHLLDxxv6r7368Y37ubiY6Tz38+5lcKFG3vV3FCyey\nnIomQ8cbKGsu3j9snHOHR8hTNFAkGKVU817OaXrFO3AB27zURO99oBfFnhT6IjqD\nj98Qeu5l1SQL8A9HIgknvmJCKEMzv3S5TFKkzHQOXsrWxta4YYecgmJGXTG8tHTk\nfevj28R4CRAuuldolercdTJ0XR/Q7G7ylPeXl6mx5bKtpfxPQCcxJbtEl9O3zBWu\noR0iiycG0dCiNQYvyeliprIWCB4NLxqfVuHcnhswsu/RtwXWaRX8O1Lnt8PRbEme\npctzFAR/CuNXcabEHHJ572Mb/W6INtwDcCq5EtwPnT/4aZEr3Z/NUm4K+FbNIkdv\nvbZxUorU49aziBIu1LP19pbvirKACPnFvTUerp1mwIkbvJ1HDwI9QuqaRLqa8kpN\nO1dy7VsoRJdf/TvN/RwkFPH5WbHVnBu8++hh9FnA1lYerMQ60GVxltwUYTAPH5ex\nEAcPZh+RiBPHCRPO4f4Tq9+wqEfJhf9TsMoHzrVs6gGx7r2Jnt6/OP4ePBhhXrhO\n6pUKcRk30BPnjdTu0yRy++Lz8QuHAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQBWj93xiOoarhe\n2I6ZTUZEg9zN0zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFInt7KNPgYXY9JE+aCsPEf5sFkjzO4RA+dkUntnm2nH\nXTmNhYhUpL1s2ol4IuBgQCB1WOn25Z+acIHP8OVeZnWStS2Wc0E+jtOr4aPZXJwa\ng0k8qc/rGPgSHYCbxHi9VGA/3Ft9BUF4K8fqxtP+sUkAKqpOqhEpUXlMzAlRGoi/\nyWgyN4ed3DfADPlhDC5TGHHGA5B1uzdhv4hvX4JHNg+rW4OUS2ya4C/4KrrpSNB6\n5CBRp5TMfk+XfoQs7IqI39hZLl4sOI4699TGmVt5YmOM1zFSs4qwB6wL7jJJy4Ef\nw7w4NqGX4TpVHElWALwUi8V2mQ1kqqIUdrluKCC6XKkbLJm8E1+1Rw01UTI7pJTi\nbiNT9tZ/w3zPSuYsZfu4gWdgMhkO6IdORh7TiW03IO/iFxFNA0ZWNUsJaPChA/Y0\noTODrCVwfKAjseZNqj0xaukvnPOZXvAqSSf+p/GsR+YLJkd2NedLdBdtbKuESQPT\nKjHRDr+w1pNtZU/etZK59JfhPed2fYZd6yPCou/H7xAdmVSNt/Nznr1eInvR2bT8\noDuLGqgqRRQByycPeZbbAK2XVpT2iYfG6pjVOEvlrb8ctPbVsYi+BlW6/NYjlxpA\nanSWL/XtPlULxiEoYzzKrdxZwjr9w3x50tB+8W235TtG6cyfkVmQJ0T5Df4QDXFK\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId 0FA7B495048126120E12731606776F3D68A037C0\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAD8S5pSJztECMwAAAAAAPzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExNloXDTMwMDIxODIxMTExNlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw\nMzdDMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPSjnDK7Zu5auISe\nNRjmtu8nujXm9kGwV6zaoxQTJVDmQeFDyPz+EQOoh577KdSdXKh0eq7jUrQ0WkqW\nf7EBDPoDl+5n2ejsSCrBEk5OsigtL6pQnHo6pspGOHvrFsih4ruP5xfLK0WUj7yw\nIwATlEMFeiOYu4RwygBZ0ZdvSMGXRgsUjHCTNv+Z5eZJdiF7oe6kj1yrfq3jDSTK\npeBkr0sGON9QzE5CgSVJNNyGPrT49PFfvwSExezWsXGewfcKnqMBCjNJ6Lg0kaZA\nCe+A4PdF/M1nHZY5DQgN/Jjm/2qgDtDVFsOS9wHiEUOb30tm9cV6ZGuAs+gj3xom\nOkFAW6cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFK+PYnsQkh19FFkltqAv0oJGc1lHMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEARjm8\nnN0MYcakDeAGDO40jbNm2F9SINVEKjSGhihir8i3IHaJbgfWUtqPaNQOZg27ae2C\n8ohaJ034EnQh6y/rFnqZSi7+LXFN/QxuSvPkjYO+tVHUsJ3jhZB8ABWk3CWKMF3U\nN++zfBWxH8QUg/T4SV/9pBLGEwme7Lc47JvEcq578VhMhHIQ83FLKejXc4hl/C8l\nTxFK5nBdJQ6sDMyAs19guaTCr8aUHPCHR0bLorPUfstysEphAb24Y7Sb2NLHe7Gf\nprCtamkprJYpVE/xnm3yQAq2+AfXa6reXgvb77egV2r8hIztNty4Ai4Mgzetcijh\n7vJJTOcrogXkFlBM9GEvwzv1LpKfJwcxp92J4Nda50rEiCsZ+WrzTTsRfiUmMnL+\nyjW06FpJwUXcd2GKsAzKKsYo0uF1oyQ9QWWAMU3DjnhDH7mc01RHARhVGo/lJeTv\n1pucfSSZJEjtOJY410+S1HU/WV2pJy+qbaio6WwtJ1A5zmOlgzalTmKdvAZ1bNen\n4IVOre4NCsPjJazc8Jf5E+82cNQie7ThzXF5xLFmwDA+hQfO9WXDicPfsIogPD/L\nme+MHFYNjG/tbhghJDefGnxVURtcfrrqRYEfMG4kyIIAqYAIn+UY5Riiki9D7XZe\n3lO4Cecw6u3oI3/emAii7q53k/cYhiOoeouAzVA=\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId 14092B5F7814EC9B713E9A9B90A4C519DF08E688\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEj+j7POBE6W9AAAAAAASDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyMVoXDTMwMDIxODIxMTEyMVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4\nRTY4ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqQ8LurxYzB7Chs\n78i0caPu5Gj7rOS+Kh4Ozpz0CRgjqAN7wiYrmqbk26MTDWW/dox6Jbqc1KWnrG9G\nNiyM9ayxALCpy42l1evbi24G5yZAJpFlsBqN/+mf0YqeSQ/9ZDJqC8lri8Y9Fwoj\nS/a4qkXnCOg28Cmg1Pp6xz2RbFfwZ6TaZdRJHBNTANu/A4Ybxrjw2EUm9SzHOZ3Y\nfujcFuqbRebHI/40MJTmlqM2XAf+jFzie7B+VUWuoHqkqDAGYVsPInckkIxGWVio\n4zEnzyxNR+73aoXZu5xA1Yx2ov+5Tgqp/huPcN3/x4BT2Jgo0XPYFpMrVJutuv5Z\nZwEgP60CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDoZmoCDKXYVZdmni2DSSwdaLyWiMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAfyVe\nOyEReI/fQ1jetIPfj6UyKWYa5FhvTJK75X2905+xe9Lwk7dccSER16hxixzEyAZ0\nslaoq557xPdMVyGcuNvlfDr1HXdEpJqhOk/4hsJAfI6VewX7hTrmWdP2mFkj6V2Y\nXaheLuk0PE0hqO0HBgANcX4fbDGgLuN2j12B1lXuj1M3mPg2Ny0zbpr54jWEdS5Q\nAV4mz9XG8MugUvePKQrxvZTo73MnKvp+WjzdyCIi96FC3NKByPK918F1TsM1pTrt\n1ibBGImzl+eU8itO3tPtrbfIHGZermGQhZE3J4+0PvKn4KTUMDEX5MPwFlJ59gmW\nU2oldzJlflJikQuIeSpoRL1st+R7FDd7o1If2bBkqE/AkOD+qiO2olux/HRWpDsh\nEkT2Jsw/zwnuoi/IOGHfJ/vwWu9/BWcGcKAPv0/zoGW6bu1FWpWMNcD1wmXqaJDv\nVuT9K6YAqmMQh/qQHYR47buG2BIbS67iTNL1jEH8o6fceQkwUvOsSkQ+80yUew62\nvtOVNg/Zyi/omSLhHTUvxOrMOcgZpikqs7DZ2b+ciptli3VG0MX/WGk4TIkM0coJ\nYqMuV7geB6ozLpADBvHTfGgb+T9pBH4REHkAIHmOltL5u2VrY8RR3Tb1ql5sqfTp\n4trtQxcnpwRQ2V725EO/vDD9UPdWHZ3hgAxFARk=\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAE6UNHOT/ez2VwAAAAAATjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyNFoXDTMwMDIxODIxMTEyNFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM8eUcrNMrR64+aY\nMNVcqQAb2Hl7xG30kJhGvycexQP8vd5KGASknG3hKxcHLNZJeXOK4w6FMtdxuZ6G\n8OJVPUc6PmnzvqtJQhidoW7XkmYmeo/IvHZcS1QNq3QK7JJ/1lZE08IOqJ1LAngm\n2/hUGNDqYnQCsJ+btreolq703IsKnbCzOtTxjhL+EB6zUWs1UwlXjngp0Tb36LL2\nEUjX8wd5Bgtdgvbfnymgax1zS0n28zrnAAvb0wKAYvaxnmefVznKOeJAMeZ2YqbL\nOv30UPpP4n27Nch+y5ayeFHBjNFuQxhb8ReejLP3dy6fqdGyKnA5ddE3Ffeb8R5e\neak9c9cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFGlTxvGRz0Do4M0b2Cvrshb/HW0uMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAn4E7\nlLtZXhLjNMqp/jRrw86s8UWVmSlg/NBb2GSLn1dBrv5/TgJTZQayHXd5zg+Yg5yQ\n/YhME7HnS7Y5Q5LRAFDW3+wOdK5GbBY+dc9qD4E/aa9dmSOuwjiAA8Ez6nAdH7on\n+x/UkTQh44UevIyf92nJogLl5HDLLD+rgXn1sNUxP9Ep3DWN0gdrH+9sDIw2lQ8s\nNg8l3o55x3hGGcNp4PHTqK4a3wIQHsZzNU0dAofES8fPiV6DXzPaaFPIeM19lJaA\nswmgWrRJkQcIhhPiqkSQ6dUDJW9Rb+YDvKGhLMX8a20aQE7eae13IBntFglFjAtT\n7VitTd68SBsAcU4+Rt3nkhnOwOnjMH4PcfRCFeax0Mw1dttovHVVtOf0plZALF12\nuBAy+GXaO8scEdUvVpRT+M/rUkNEFbvl/x84j1j1+nZwQK8Nd5/XTAvglvPJsQL9\nDkJd9HtysrSClNlflR5sRsBZh/K/fpPC0i71Q32ysgIAYymJPOR2sedU6a88Mx4G\nEuGEUF1saKmLK4YZAAlcfZ6Uy1/W7CifLEjILBQpopi4gEI3Rq8AioF+AjyDVCwH\nrRYAhqxEXopkh0+90nGJWFYlvN8hNp7jerrJM9VfFyTSmwjchzEQWrWS2aSaOCoP\nenae6sb5QP9SpIFDwAD+rYyS5rCSQTO+k2aXWj4=\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId 4994C129F1A548D488586F22A2DF8603739B3BD3\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEV15H+k+1K02wAAAAAARTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExOVoXDTMwMDIxODIxMTExOVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC\nM0JEMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJtnDiAmVf7HUNSJ\ntGxA6W06MJY8OELuyDCARV5yVuHCFLzwHm3VQ307CIrdo0v28wlGk/zLmsisRJmV\nGOOjDEzLeUNnoI5vi+BSkDoUBY4+IW2SDS9H7IycI9E4YYGgmOzQaY/HJdDphcYH\n4nGetfF07iJ+jJx56vsKxvfVqDQCEGUARTWsGcMuP6bHkOkKzXKeDM0c6ROJ5dhu\nt3Aqy6Xu6uaWNlvbToUPzimp7OG6zY9eCFfK2bwcC/yf45UhoSACGlOhHFxK18FA\nixDq+54VcBytrP82CWt3MDpg97JoEFJTYb0HtEmfMFD8kPDDUyVYBy3cJ9SoLv9g\nagWm8RsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNDbgr5lXh8vqVks8BBJ774J/AzXMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAJ5nE\nb4GngVmrom3JCvfubPqr58hQl0tppQS9aaJPXhvXt9Hpy8aBDk9KAUSDbXkTCYa0\n/TTmOxmjspdKDYdw4DjGV+ngp32PD22DHskckMQ2ycKY5yhbAwVT9QkMTVAXRlNE\n4tTcQ/1hYhA8X9xa0g+ujpawyiLnGmHpBvHWo4p0GssoKuYvu/fJvGV65Qk+5Ge6\nKesGoDFFB+PT+tXy/+lXovQMk2wyGZOweuS126fDphUWfkyUtHynbqrkA0SvaB2m\nvtYsRFKcLYmDmcVVxq9VeV/ZhQdwCT0l6gw7ZElO8f/0LuEMzPr1CCKKaEVgJZWA\n8JJhojKUhHFj2gwCbzMviLfKZtDLAbPj41j/N2yRojkr1gRR+BE+R9mk+9r7eXUc\n0dCm0VC4tMu3hPwnxtfEGWxP3rylSXWv+7MQqOrEmLQnmmsH23FtZ3zY1uz7Hc22\nob5H9YEGNifAyeKzhfYPQWehF3pW142uPrpFmuy4dMw36IDamzy6jT3MbxE9K5E4\nTfe2p6scgcaxu04nJtfQVeO5wy9+UQhv5YAp7Rvb1MPuakMGNRvzb5BjeVO0bnX9\nNELmqePKP5CExyV+OeCR//0OgYeyAKyyZ9VXn6wLGB1SG5JLXKtRmQqVwqXSeFN3\np0Eg7EBQdZEOPXhRoejbPhr7uNB1If1HGKHHTYc=\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId 72750C52CA3E250E701DED65CC69204494A8573A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEsJtaK/IloASgAAAAAASzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyMloXDTMwMDIxODIxMTEyMlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtNzI3NTBDNTJDQTNFMjUwRTcwMURFRDY1Q0M2OTIwNDQ5NEE4\nNTczQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANkI6qrMDZto6eVu\nsfsrzslIts+wEu6kt8ALi62mKbQYyp3L7KHzCWh0MupmouMm1an6MDU1P1j0lUlb\n3uovU246Zg0U4XfNjqiYOwxapAvNaDCblytpimpxe0QoMaspQsFSkabHs1UTbl7R\nZHKqm0Wh5+rDjiHDe0dbCwGEPLRh7F78ivr/6sgVbpmHfYdpVwWbkgwE+VfvRlzl\nW1yGBHVM/yKV3oJIdb1f3CjVHp5AxmC0XLwYrT9jNf77/n/A3bm0N9NHsGgm+nCs\nqIpDHhSd9WJninwO0rfgfUt4Gf6u8WreeMMNcJgzNPU2G1LucyH4iEEV94DJV+tq\nw3tchQsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFLQF/BHsVuMQ6UPSfeKisokhOodBMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEyQg\n9jtwWROJ7IBqaH6tCyYRJNIRnHTD8jarV8KJUNYW3q0PvhTvo4f76PfQIOF+ur4r\nL2wB/cjU84+0mnwhFpV7UyDVmAlN5ykkBkyvLiPoS+w5S+hlXtODswwwhinfYV8z\n/5G5rn1Nza1OZQrvoa4j9KicdUZUjNzabXCyMpVOC7qrCQ3cHx5hMVD+auiYFLNc\nA6CgaLbOpzhUfXknBVbt8cjocQXmVHSEAN9hGwtyIFHoJcWyHWA6MyrFzrYSbbCE\nszb92jaPEYKF24v1QIWqT3gruVS47XXGzU7hKHljmB5TU7Gkdf9iUVhVJnieTitT\nP0r9WudI9eJ/sUM2WLMX8n40pAtrW6/dpETGcVyVRs+05kVgXM/5BVe69memppEL\niE2iBU7c46ZRVLtGXBdTpYDfYW7h17pcVTBQB0p5MFsR2h9inSemOEmAWdqsqCXu\n9Oa74P/C5Px/kOVqmLPaE3Oh8wu3dQSXVYp2H4GrJEEw940YOKFwVxH/Rwu/dmgE\nT5AKEXedS7NFzB99SoXqOUiCztpRqYtagvPdD0fiednAeArZBvO4gutmhlWrdSqH\nkqghnw1V0ArlCwk1Bsqz1Tog9dowmtShgvV2xW08Al0pLNSbG2ao3BbbHCLqlbZm\nU06fzmAtoX4DoEYctEPSR1j+GxOwz0ZISeHjoAw=\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId 8E1AD84693D5D89B1472CD8F999076EDC4115400\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEJCEHQTpbvoEAAAAAAAQjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExOFoXDTMwMDIxODIxMTExOFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx\nNTQwMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKfp2HP4MLRJ6bmm\nfgCK3Pxezy/WcKp1QRvJD5OKVz07cIsBklO5/TwbAwXaRFe5/EfDHG5FuhcQ8NUB\nVbZQ6mh8cbwLXvU2mEuxKrjn85Ar67I3g/wOLOW0HgeWn3JwYyrpvPDac2+Dczcs\n365fMcveSbT1eHg2dK2zuEPA+kIFnD8rilITc8chVJUtlRaP1BgAX3otEI00u54C\nuQXNZLR61lwwgV4/DuRmWvqFjgpYf1UtcUUqEO1wTufj4TxjFgnkvPAxZxyE9w02\nAU6lxE2P9eaUrRYdIFJ5XCLM3I/pOuoK7UUp6zqWEArWK1QELy5y3RTZP3F3EaX7\nXN9MKuECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFFElu+d7/VHmSdjfOrHk8vAnfIh3MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEATYaF\nUC7GMPGiPZrxWR6DJihaIOg+0R6xCQu9stIidUhLFwMATsprggXnT6nQx+O16OqB\nRr3QZvIge/HMNXJY9aFpEYYLzrNGsARDB+xBhgAg2iK8qJvpl0n2o+bd3oqSdtXO\n2PkGzPPYGUeAFMPg42wMEzoMHxDMTFQLpKu/yfVlrn13uS1VTCUXS0Meuwx1rYSL\n2CZsbUv5E4Nw8fTguweOs4SGp8R1n7Rehn9aACYIt1Nr3PZXGzkQC4x2hMjjW1DF\nu7B2Xt/xZl0FzFOOFaxhGMBGogv0pmcnq9T0nNbmkVi8dvkRabpWRAtPjl07UFRw\nWLNlBmpYKJbSEnPk4qey1MoDW/EwirhxOot2kgVPskbLqC4ClKjhl3iZ4qMRixBj\nTPABaeWOcsRymtSw6booe8hkn6FbdW+3gXGdNDQyKxqeWRgr6YsAlcvzXshjxiNx\nMX/9ozJ2mcbjxwuKMjDCevDLayX5utnQmZvjgyaGB1DfMFvCAtiePE4fylgonkPm\nw0gjEQpC2v+JI3iBYEychw1hXPDXS+1iWbynGOI29bBDWTQOckqN/7jDyLVyFPOC\n8f9ANKIZYY4hg9SeY93dGgSVcKE/H0ygju2cpWrw6hUx7xQ4J1G2G/EtqBtw/Ef7\nK16L/IjN6LDXzTiH9C3zCePBqKbBIHrArLmEZRs=\n-----END CERTIFICATE-----\n\n\nNCU INTC KeyId BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAFFAZMbW1AltBAAAAAAAUTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyNloXDTMwMDIxODIxMTEyNlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS2V5SWQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB\nNjYwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALL20ryeezk+xJ3x\n07lf672PE2f0hpoUoPmo2DQhVJRRpuCVvDJhddhnrwa91o0coP3rRG18MkcN0E9Q\ndAbgI7heiOkelP0YUe9+jtK04dEjbrW/3xoCoK80f138LxITy/HE1hE5CWjVIBgu\nWSkCUQgZdcR5YVbpUljpnIv2jVaZxqsPElJLcko4XcQnEqYG23qF5e+1Jo8y2sk/\n7fjpowT+QDGVLUUIpRP1YLB7sohQi4JMEOxGtitf+DJ3WXhMLsT0+SJ8gJ+e3yxR\nRhUot+f8xVzgbkMvRl8I3+vFzAw9Z4Q16IucI6JX3U2yOw8Fa166znuL1bceSPTl\n+09QhukCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFF+0/V3bWqLAFnngeVv82clbTn5QMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAk4nN\nF0gYDJHGFPgFrrBtDGn9q9hO0XKB+hp24L0XjL45KlnLxS45Kd9Op7xfxAJ4+jtK\nve+qYaDAdx7ecrNNq+TyGUCS3JgZP4JhsOgXCKoqM6ynA8O6BZyxg38CrvNatJYL\neeTxWy7I0qdU8fwyS9i749AToQOMBTMR9dpKK/Dff2IdypwJv1jlXPLATJYLMkCQ\nP0TEDo/4eMiMkYxEiw2kZCdxrVFcSX33vNz0DEZ6ndeenJmdMsRjW7YdNdkiC4tz\n9b4LCZvXK9mnYSirtZSO6Yw4ztDE1Xrh0248APN9JSRLsT4xrkajep+sYrPuF1jb\n69Yuzcxr7UbZa6ZuzU0SMFqWyDJqYY9vYxxr3K96xLxZTvY4SWOHNCRG7/znlGtM\nmkuGieNOwogzw6A+5sujcvP87S9Nxuw4zPGZfWme6uj2K275Gysa9ac4OT1t5QZZ\nu395hHQi1wMBdHfJoFPNcVZgKEyKJ7JMIhRk9PngSkHFY+giTvjqlqt4Lq+Zz/G3\nGocq46o5pMJTT7VPIO3mbbDWqrCoMaZ2xJy9X4wA4Gw/HTCL09S0WwUSbULXjBC4\nMJ7TsMH7tpoWRv+6qS4LCME+vCuQ0cTi9h9mKa0hjq9uTJHQ9MPxArfDmTdPSVh9\nIPRsvvIsb1nSGRalG2EiaDSTm6nX0SXo98vf0ec=\n-----END CERTIFICATE-----\n\n\nNCU INTL KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAADxtBSPo83gNHAAAAAAAPDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDEyODIxNTgxM1oXDTMwMDEyODIxNTgxM1owQjFAMD4GA1UEAxM3TkNV\nLUlOVEwtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN+IytHl8oMgHHaC\nIlwC4NXGx77T2SuRvUN4D1oaelY6C1NDxOERUOug/ybGxanrOlXpp2vQa5cqy/Rw\nNh2bxvlWDYOADx/LwDeyZalmu5f8MzSzU1sKD8g0VV5uGy5ASH2FnJekVrNqltif\nNbBPJzjXiAq/p+sFtwoDcdBumq5Zdh/zkwyBpUyLSmX/+fobDepo1/eIPc5dRsdB\nYbKMDAjNdDFs5eFoyyDcB2mKTTrqv9+mlc2Neqe8oPeiWW/mN0R1O6aAmtRDWRki\nUBbg0APWYMEqrzU1lvAZ9cSQNxCm7sFm2x/ZX95EsKDQUxraGlLLt7agr028W8uz\nJi5XduUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFCN9VL7n7ZcsEvnASwEnwTV+JElVMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAXSjM\nHwLx3BUkaEWH//kA9WLGrC9ZGxhgzGczjdRqKHVgW9VE9legTN/2DbqyABva1Jl+\ni8PfOBZqTRxOWZJ6PQgbiZsrfj4qK/HRSwhNyH6/cv+i7CATMB4hg9YMQOnXov9e\nb9L2cjkqpOYDx9iq/4/Ee7cvyhUXx2VA7tNzj9iqPVIkOD5wbdkXNyZMU9rfkkSR\nuTTmAbRYfGbnUdUKCuE8ZZZkdlG5HMxOjitlsg8Xf5KZFrBKHhqdefg7+UryVPK8\nBhoqTCO0JJedtB99PjNXsH9/22IYntdBPZU6gRs7kGmbPI7l8atKn4ICdMi5pIkf\n2XwOOQEerL1rHAaRmR9byaFeK6BbEf4X0Hewrw4dEsmDiKxv2E2Q07DzpG9o/Wpc\nlrKcKplF/0Sm2jhoFm5hXTVRKERLXOrUvKqxsldLezCxcTcfuf+6i63/k008Nxge\nFeywt02Hv+3HvfL4AVIQ3NIbWTTKuwvsLYzUD96Uw1qDt5eKWIINeCwMT9BO1SWO\nxt202+URuNatMQrqEZjLX0mLhKJckIm6ZAzrJUTUaur67k5tMHi4pItCG39QpH60\nw7mvbBntOeZEu7+blbg7q7V75/Vq7GVQd/MgkhmFurvojOFcco+ti4xhg7l45HrR\nPaZmFLmOkKT7EeYLCsD8roK9O7fRVVPBHuogAZI=\n-----END CERTIFICATE-----\n\n\nNCU NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAG+OKCOooKgoowAAAAAAbzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0NVoXDTI5MTIzMTIyMTg0NVowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx\nNUU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs3vREQbW6nU5yBLs\nCdvBXqJCLmkUYUt2PzQUg9a2euT/2CDBCVNCM5InsvkR3shmgGP00EBDuKRS/MgH\nhseQN7VOeZpI4OJkl4hd6PwyKOEwbLBhK58/hOl8+SY1YZspWQxVM1aWfRTC6iLa\nt1DFUnnnCkMF4jz17UlW6UXKsa+6acUFaNR3HMMXnggl7wOCB3eS0DxqTwYBczdz\nxrburUiXOBsWeA6LkuH6OgQeLepUcBprBhRzkDaOkyXaIWs+BmVZeavNcW+myMcq\nqq6eLgqTzGzdYnqTva92Z09aeOkrAlpgEmnTsCtHW4e7PnhemplbNhQmQb82n4cm\n+tfLgQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUR+ISF/V1q+8emRuQIi+8N9Ju9FEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBvdu94\ntnJrt1H2Tb2hq++elacdMWPDd0nNfDEB3Cu5S+8erE3QkBI/7SiViYeGLjy7BmBy\neDjWVx/ud+vmjeIbKR+0MmULQATp8pd3hwtzS8mTbtvnsQgsZAgsSgYn/m11oxEG\nEIkRsrV6swEHxlHUeghKgxKnRCF5ubtRWn1925FmRxrS3meATaD8IsM4glSZzb5+\nVgRZ4SK1RLFId0gQ5qjsumilFPViMc1FRMykLlLmNoDchw29aLCXmxJ15NeQ8D8U\neUoAaRJWe8riLCw+y2dGnesQgUueVw5teBcVrXFi8+lckqZiqx7GW9xn3XQ5t5Kb\nqcgLtaKHMpqcoYns3WkTlKYaUmSkEtfbfGBdjQZHywNkFiwJxkxcNOFRzWj8HbuN\nDKq57qeAS7d3nwy0hg4JH5lnLbzHyZRwRxsOsEFSLk+slt2qPKnRzAz72TcFofKf\nTYAsHg49g2sgep8Hg3XApcyBBqYQvwICvVYu1WwyLnRHL6tpf4Cvlvp8I7uDrx8H\nGZVqAVFonmwWyBG8GDNLTw9Ij9/+AgO0Pc5IX2D2a5ZTTUysoj4Q8YnqSJmHJKzB\newVPlfZMsZxCGP4Ut7nh+ldbR0h7omOsuBh8cfUG9SXUV3vFF6WGmdlU7JWZBhoP\nCVeQqmOMuluhL9KwGIdAjqd9MbgbqBOIkQuX0A==\n-----END CERTIFICATE-----\n\n\nNCU NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAnxYDSvxsZdj1gAAAAACfDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxMFoXDTI1MDMyMTIwMzAxMFowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx\nNUU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxMbh7pe2YOAGWFtG\nR6CB8QQW8SG+ZOM51sF3GoUMZAdkW/OIXOzWwnpGNyvSAICTS+zVZfhuNSObnons\nOrHS7w5ftQZ9S65z6WT9yqDX4WYIOFbWgezt/Y48GLN7ePrV6gEGHERE4kYWEWcP\ncNxV4YFpsanKyXQN7kuEvAmFA5dcyTRCD8ywVoBMRwelohbgZhP63So6HW6OVHFx\n4zrs5BTja8PJgCvT6AkGrhcfqepKdAdo4w9GIb5G6tKvBtBOTck7moX9uO23uMDX\neLqZzabEpnPkv519lhMn/9YN2Z1VooRjYI0j0lcTp7GpTdavQnxAJAUuLIDsH96M\nnijuJEiqXTuRq+WJZHgPJdIMeffIuFmUriMY3EaTfMaPyST6sZECDcrOf0fMbOy2\naZ0setEFeopS2SfD/a+7XwyeKChBQOARXd3iggxRRwVInTjM9gw3F4dOWOrpH0MC\nXX/LL9W/FPg0BSvtHkdhl/c5nyByXRdFdzK7PrWKAjKVCvPGabdMzUiV0i8PzF1o\newu/un0HSVZmQCgYn9sVgkbCK9/aLV3VxJLPIP0YwJUcDRx64/cN/7x7/vi+T+Pd\nNzZLfjnsICqBdTq/0I/iKplV3Gm/T0oWfFk8nJhlESxbeLvjvVd6CgKX4hf+Dduq\nQ0H2BxwdFXMuIf8qShLWawnP9RECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHZhRYUiVNBWCaP2\n37szWgXpGs6FMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFmZ/8XQ5UjdGhZE3EJ6xzFo4aniVm1w2CfEQTVKeZf2K\nT38C5+AMEuD0Ol3YoHecNrsVb2RXS0vGqwloZLSQfvrDTJcfChrkMUJIY9uSNT84\nsh5Urv9qmLwD3ybsH1vi8BsLEfaSKV/Mflwaib0V4NeO3JsNMMc4v4wf/xvVyw/D\nY6rXcLV+ypK3wSv8GXmYHm/VkuqtOdtselmT4zf+i9fEt3Wqa/2b3T37F1Qe3kEL\n5ONDHqd1hhVlvr1w/hpwqBJHcpaFaTfl4COa+W3d28iHZ2OzVxpLOf3ov6ZCCYSG\nWw8IcrJt59wDCJLMibDndt7ClbqLJ1yZcHieRqVlMwAimYs2s/UoO/OfjR6oGnC+\nzQKPmfp9/ZCuIOpzgV20kPF/0bTYKPsRDoE8HSzXs+nQ/wvUjB5jOxx0Ba3Dfa8I\n6ThBEE8iB0t9tanaa3bKHQJ1Umf6czAcYRfwYr3+0RPcYH7j/ZjjEBV9sfN1qwzm\n3s59XDqtYZ9BG3lfLq/WQPElCqe0X2Iz+iyBZCbQm4VLLqRQnguTRtqVmxEE6N1d\np30gkxOLkjWJPcWCGvYOwImwANRYGwTWkJbIAoS45fvzpHEudKa8E14gFgguaA86\nV6ryF9IVJP4y1S7u/IJhOzZatBHGso5XHh2cKm6B++TViH/M76kEAg5pAm/zQUg=\n-----END CERTIFICATE-----\n\n\nNCU NTC KEYID 1591D4B6EAF98D0104864B6903A48DD0026077D3\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAQDiBsSROVGXhwAAAAABADANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDIwMTE3NDAyNFoXDTI5MTIzMTE3NDAyNFowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3\nN0QzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9IwUMSiQUbrQR0NL\nkKR+9RB8zfHYdlmDB0XN/m8qrNHKRJ//lBOR+mwU/h3MFRZF6X3ZZwka1DtwBdzL\nFV8lVu33bc15stjSd6B22HRRKQ3sIns5AYQxg0eX2PtWCJuIhxdM/jDjP2hq9Yvx\n+ibt1IO9UZwj83NGxXc7Gk2UvCs9lcFSp6U8zzl5fGFCKYcxIKH0qbPrzjlyVyZT\nKwGGSTeoMMEdsZiq+m/xIcrehYuHg+FAVaPLLTblS1h5cu80+ruFUm5Xzl61YjVU\n9tAV/Y4joAsJ5QP3VPocFhr5YVsBVYBiBcQtr5JFdJXZWWEgYcFLdAFUk8nJERS7\n+5xLuQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUwhKpW876VvjAwW+xW90DNEezeqMwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAKc9z1\nUUBAaybIVnK8yL1N1iGJFFFFw/PpkxW76hgQhUcCxNFQskfahfFzkBD05odVC1DK\nyk2PyOle0G86FCmZiJa14MtKNsiu66nVqk2hr8iIcu+cYEsgb446yIGd1NblQKA1\nC/28F2KHm8YRgcFtRSkWEMuDiVMa0HDU8aI6ZHO04Naj86nXeULJSZsA0pQwNJ04\n+QJP3MFQzxQ7md6D+pCx+LVA+WUdGxT1ofaO5NFxq0XjubnZwRjQazy/m93dKWp1\n9tbBzTUKImgUKLYGcdmVWXAxUrkxHN2FbZGOYWfmE2TGQXS2Z+g4YAQo1PleyOav\n3HNB8ti7u5HpI3t9a73xuECy2gFcZQ24DJuBaQe4mU5I/hPiAa+822nPPL6w8m1e\negxhHf7ziRW/hW8s1cvAZZ5Jpev96zL/zRv34MsRWhKwLbu2oOCSEYYh8D8DbQZj\nmsxlUYR/q1cP8JKiIo6NNJ85g7sjTZgXxeanA9wZwqwJB+P98VdVslC17PmVu0RH\nOqRtxrht7OFT7Z10ecz0tj9ODXrv5nmBktmbgHRirRMl84wp7+PJhTXdHbxZv+Oo\nL4HP6FxyDbHxLB7QmR4+VoEZN0vsybb1A8KEj2pkNY/tmxHH6k87euM99bB8FHrW\n9FNrXCGL1p6+PYtiky52a5YQZGT8Hz+ZnxobTg==\n-----END CERTIFICATE-----\n\n\nNCU NTC KEYID 9FBB79AA0F526278BED150929A7171E96A35BEF7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAnheUdXpduruTgAAAAACeDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwN1oXDTI1MDMyMTIwMzAwN1owQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC05RkJCNzlBQTBGNTI2Mjc4QkVEMTUwOTI5QTcxNzFFOTZBMzVC\nRUY3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2M9jF8tBt3Mvg00W\njmSyZHxV+k3y8+oJ/CFh8qLFLNU8nEQZWE2x70dv8fvSBFK1RErUcExRXHBRiRmU\nT0kl9shluI+5uyB7WNlCwfw8cnuB358AIBrvQoMlnegNdPOqSM7iOlX00ZxYML3Q\nCZpP1M3T5Ge0BRCY9WsQ+cP0eyVinUX/+uf2jaHZSfp0YnI1WMCOtO039f5CxJPo\nY1SNrMBb07mH3x8ks7sZIQQj39tV/mAPYPcppqqAIPUyU4tPm4iRjSgk0rxO75Xx\naXRLXAHKd5hxSy6BZXtntjiZ6SLsFRjFsmros8cyfRwQ+oXXUZHvrXOYb62fXGkW\nlvQW7vJdQtD/10MowXeiCoLqtHR50zMIqB1qN2kYztGAKtmrWPWP0+2bHQ6xSuax\nOHYoEBbnCEiG/RmgY8izA7Fx/Z9HJn/HijxMDYXKi4s9+i0D+lvdJTuLRnZJGqyI\nv4UZOD2L9Yx6pgy8NTi3CwqwJ7bGEiGO3bbg5xorzgZffmbSf8MH8AGT+mqAw5TM\nDU/wjj20qxAPI9DNsDlgOvKIRJihrIrN3GvO5b/mlgzlBOwvuSoyA2EyHynbTi9w\n3gQlF2/nHl5A3rlVOUGYhb+NFYnAhtxtfK5MpDINBlmCStlyz6CavH3ALR3WlITk\njHpiUb2HveFzadPDlyG951aICNcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFg6GnRmveZMu5g+\nCAAnOW2E+hncMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAdgMa9yh6d62viFpr2U/Qi3/BcN47JS84xPRFfFTIMaV8\nr1/vK1h91ktDTPnjDpHzw9SAEo5JP5s1UptDRWZ9PDF42hId6HBUK0J7+ZLjfY7d\no472aHNBHUzJ1oFzlOPtyJZaNvoQuwmUNQRzNWx08JhHqJ+ZvqWmg2/7uJ01o+Ck\n1nDzK7SsOky5HYrNRghpFhA15lquGOxEcto8WFt4XFyLsFVA1UtRIm5G1/xjvDQ4\nXy9CefvH6jqRC3j2Jtzxvvo9zCo3/J3UHZ94cTjmfj4TBFsOK1tBt1uZYBj3VCxs\n0YAyPQKebfGRfIXpSsZ0GpE/Ldy3qEETAdS4njJpNNLoGoOZcDIbErJsgNeOyPyd\nkuq4Qa0aEfUeCae6Iwy6MEQlmwqyEXiQr6oKIPyd/eXQXMg7QSXg3ZT2TV/yz/XY\n70mAH048hnPUDkcoySbaTO0A+G/V4jtuKMPLLgOvMKzC/EooMV+5mbrO1jEDh1Wj\n8cGd5srxrgf2LU4s5rJsYsMxEuVcC/dizOgCkWfBjvOlz23ooOGKVjv+zwUhXYi8\nsEbC9rX5DaNzDHHes+yXfgIlpFviH77ehIa8d9PwbbDaV5lBFNWaQsOBQiRFyxgN\n3drw+6BWf3sAB9D9O0EgKG+2wNuCRYtqz1ebbf7KKaBWBEZZRDXpw/Vim9g0LSI=\n-----END CERTIFICATE-----\n\n\nNCU NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAQzejnI3diMv1QAAAAABDDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzOVoXDTI5MTIzMTE4MjUzOVowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG\nMDQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAttEtrR6v32u8zXJj\n/lNvjcTR1F6H8rsG+czTRyGwH1vrL0mV10HWEkNHUZdrSmdFBpQDfJNBwbDjXsND\nYjQaDUe0pnCVdgsQ/tiyFSt3hl6P5CLDx6kKN3Djf5cs/ZxDODJWZkbIPhg5SEqZ\nX/LqGDfx4znfie9OshdCtWf4sKzgJtwrc5QGlIeH+5MsijbEiKWFqD7g+e31XVHf\n+5VgBKhsPdbwDDhGkXUPuDnXvSSc9nMNsFTUCW7CHZeFTaqt4B1x9Iw2adC5Q8z2\nQHqo+G1huFFsZ3xxQpEUp8Mcfo+fbLS8ngk8/0P+HaVhphgpWSXnzYN6jUhDxddH\nLqEbVQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUrlZRz+ScmB8Nyt+/GUH2+aPGZ6IwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA88Tqq\nsxeKdQRK7HWr6eXcERv1YJ3sBUaOwXbpufT/XjU/dPSCe/tmXPUrt4tjEByYNSzr\nSihPx9EzNtlpJkcrn1zFOn3IaVuijPEmFAoSDL+Mr+evUiLnTVWQihEw8nuIVQL8\nZlPuDncY+UqdiWwkblicxSArWKY9vWRUgZYnhGCIRZrvLwjeAIGAf+q1gGQkOUTO\niC6X+gwv+OjcvjqtSZA34Fxe3/HFXZDH+YgE6L3HdQCIKsa3lrPYmDQx+xPOTlAu\n7sjnW1cDhyVQjultjEK8vVAUYp+ebDla4MSBykd2B9OcuSEH7cz3YB2vGG8aSOfR\nxqjKvZQdCnUfQHHXYDKEQrL8uS8FdtHmKe5uzLJHUNHofcrAcbwPdlOjljXUz7Vn\nfFVAkuVKNFT/9IziyAfwdzXWllE1k779d1mlJ49/IxU1Wf+qTaZ5VEOUtxJYs2sv\n3IQLZbqQIJ+hxEgN9RF8cfyTWWIh0PAWJu8ttZ2PawtcLTHrlQmsK2ElCHh+QIM2\nKiS0uyqAI4WCVmxBv5HnVYgW4qSLCmdfcphSnDFFS5eWZHk3K48gjDvGwIiu9eFe\nAln2QYFVXH7R3KDarWmREI+H0I8B/1OF6CTerZ9oNfaHKjqSCNmlJzj8eP4k+AxZ\nkKCI5Zgwfy4FCu7J7yzUs9UKsFYc4n69pTtAHw==\n-----END CERTIFICATE-----\n\n\nNCU NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAn2hFZyGekxCzgAAAAACfTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxMVoXDTI1MDMyMTIwMzAxMVowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG\nMDQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoK58OPQBp1AGhi8/\nSFjPAxnwZrvU9tGThp9QFawftVQT7/EKkjizXhgZc2TMnS/y9HIkdH92wOl3SvVJ\nCz16yuCD3vWD5uXanXrU9GZ3D/YYziyazlpy35EbU/tV96518UXouy3Yj7+ogo77\nZD2pvh3wltESkY+Ao0dieDFzkNi7TN9jZBTv5VkWfBNTZo20CTq1DYpwLP4/xqVz\nOmLdE9FaWa7WXmpPhcj+1UH8tG8YN5ujfn9BLWylM7aUV6FjB8cTf4NJLDqcMMrA\n+MoD5GeofgyoycB4jwzgBe9og6q7/78MAcg1hEeiR+rvWmZ+KniUqO9FR374ioAv\nwZ4giFZjOXrgUXf9r+9RiHstaiqheqCBrqnBuaqrs7dq5ZsGwit6tAZTnaMD+p2P\nL72QXHJkk1mZskVuVkkT08AGY3BSczhEdpQ+9N4xqqHrlVm4iewXpme5B07Lkl3q\nu/qq9gpJlYxU0R5bQSCqa7t8kKOj6aJw6PxQxpixOo9JmqvjVjdfLXiCtva4U+4a\nxT/xP0+0bXDq70s79SHNTg3/pVJknAivW77g7iXMJlzJKsj0Js0zvo3XNvAjaBkS\nEF7RpDb5ysUtcRB3fh0dixT4ufEOi1pTvUmxMmK/NUNgzlYWVDOF3cd9limKCx/I\nzA6gqHKFbs23/sMg1GrL6FiJprkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNSiLlwHhlB11nr6\nTX78abvbAKZmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALsWzyIojvugrcIH1culbqoL+o93M3UsbTGzEznGuSBiO\nX2C44NFhpSIJ4RZeFRDBRYX6nTgqs9PpZSf9KCTBQqgzyX0L4xA5oZzZBiW1DTUz\nAg3PUDiBL94o6QynZicT8r2U18xK2saRKuhN/+rN3eCHuLoi0dpH43x6J/t7bVFC\nyYlztaE5Cwmojyg1n9MtfnUbOODZe80j1bK2ny4TyxvJsko6RdOSnovHflqYuvhQ\n0tOLFVnngEcO39Z0xxvawY75mJOn2dQq/rHftJ52S+fA3BH99CK/A/nBNcmwRhqO\nPmJN7JHffPEijhb9XwGpTLQGlz3PJ/NcKqWDQjY3F3qHC+sSnD5x+g46aX8rI3Ju\n/l4M3Pe5I0WBWFWncFAKJxwQyVuJfMoi/t8fvm0pKiqUwPb0E/LTBIuKd572Nsin\nRINx+ni4sHNnvB59TM6toYX6SUWUtyd//6VmPIoXN6WBWsy70aT7+YaWU9n9lzuX\nyzraa4vPZleaPLmsXNsWZwMTDmKD4u0oLXN/3V6/z7YyI4BM8C4XItChieHy+AP5\nyFdeDAltPrwRhOkGpsyH/Dy2eFW79hpvYPIQLWE+rkk/utO6S+dnKtZdqmRFni3P\nIfGMeUcMpuwDT/hDnTVvcgPiUDSxGUx2ihijLGUd4OqN8mXDX2VMx9QmItTq40Y=\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQ2Jgj9/2xmiiAAAAAABDTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjUzOVoXDTI5MTIzMTE4MjUzOVowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND\nQzhFRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMM8p52GsQsXt5Wd\nfz0dIosflZeppXfbG1wNHimHoaAELye4PHASFbZU6B44GLsjZ5XGx9uzQvfd1yNd\n5GcQatIHq7uwEQk7aA8DpjuZDIAOQ5q1+N9tpAQDep4vaDyLt34lb9l27LYyQJEm\ncSoDARDwaCrMseUJBjZa4jfaKD8wn+NAxD9g3VrxuS0j70ewcbWMAq7YzFuR5/K+\nPWhI23LmRcHI4sBIfjOm08N6LcE1M3a38RGYp/TcZewiFUzaT5pkrqZY2E6cInan\n8J4tcrykNpTvIfRGC6YTAukDYHOUiZynD32aOIv64gFpLASEul7B7pwRKbQlB+tP\nmKzloD8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFFgp3Cn2JV86ic+dJr9LOB0sJ3L4MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAHexu\nonUQrWWb0fI99fnezGZI//ENg3x9TTjbzhUQzaA9SijtapTlnrUrDsVMUBEJlVTf\n8zK7/E/EP6os7ndp1H2PokLW3O5WQA5cSFgW0WPdSadBkYoM6ujjZrJSBgsEzR3i\nWMwGL8LBCv7uWupEX7LcIUk1ZWpUhNwT7MFAdF4Bt1FVcAzxSyUaQlZR5/Ji6Myw\nHsMuUjm35jYBppMiTTlQ6nIxV6f/fFrZn7kAdrpQ5IqjWLkO9JJ7n1iw06AksZRB\nZRIeCS3iS84DTNSD7JMqomY8DmK58drSgZgDVB5u73kO6uFXgTXcwHAutziGTEDk\nCiDlRRDJD8rFmiZUeg/Y6kz8P7wlAtX/QEEWPTEc0CifOnIF5XYRMPvWMAiP+Z23\nkedtIrGn7jYxZpzzUKtA65PmQzKI1dQ69zmOUqk/63EH12uVmIE0r8nabIE4YKwG\n2CmrUbHOWbbHWK2797pb7Dggo2ef0lRTKXlHK6MsFRO75l1B+wgAqlV8TC6SqFNH\nssWHrX0tVo1uBEX7n5RHjIyOEPcf8OuB5pXc+vO86QIm+BsB7N7GrQ716bD2CCpM\nt+3HER1NDqpQdyPfbAJkzznZSJKEM9d7bcWZXIQrjkiJ8SnDg6BAQWwP/VTUAB8k\nn25W4+iHFky2CVlDPBeVIzj5XQUplxm/uBMnGAs=\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAn7YRX13AriphQAAAAACfjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxMloXDTI1MDMyMTIwMzAxMlowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND\nQzhFRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKVnX+EKnSDsiSPo\nSYe3dKEO7fL9jz/ojOG6FbevR2+DyaFvIbRC9xR7bvKtQ0p2/n7b5uI65ksOZJY1\nWTAejNmn1mn5MyYUjuYxLpTw5ooYYwVW+Bni11gFDOILftvPDUJB+dt4zB1fhkzD\nCuV4tqrN4YwWlnE7RWXIAsJYcmnAkcS0RUivUtyra1nt2fD94iNqI6P8kRDpYAHd\nbNpWrJIYhh8rJa78ygbuhMYz2HYb4+TpRVu29EMXlgTu56861i24ruAos9aCONuu\noK7ud/uDNZk0mXUhwQ9O8LX3lCwczdMih1jMDwtVp/oFiW0QYswqFcO1LSAH5W5d\nt8A0GWpk19RDM527IIIjNiNrtxGQOUsWLk1LWztw5lBNsCUKi+OMcnAJpbARJ3dS\nzMiXRbf3E/vFd36xHG9J43jfB9m5HZpiIQNGdo1m9ofy2BcLu8ku3JQU4QwBR69e\nR6v5XdRmcKjP21xJuA4BAJVs+9cEB+fpoDH6uF6UASJqqVCPyv50QpJ0jFkuRqE3\njYrgScoXxDGaoq7sFLCKQ10TvFnLTiYCN8b54sDaOX9dI7BOuq+maxfi7MAgfyRC\n8aruVMKePvYWqUI7VXYfo469MYEo5+48DZP9AOnVGh3OvxBDqAtt2Kou29WSlgpq\nDnJ/4gJ9T8BAVHfv296uWCQl/YerAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTBrrV7Hgac5bS4\nJK0JLjbjy5d2BDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACAvxcjLolPAdBa2FaezyJiRq8WU7IpeOZy7ofSjtFfQ\nJABGdrNdfXGN4qVjpvnIYYH4pYbdZMeJ8p0J5q4ZgKYFQioiktjOQK1ncR6ZZrNu\nZNYpel54EE+331olEdSvfBfBpYSL6EEcKxBEVdfkgk/8ELeW/AlXPrpRQix85LiQ\n7YjboukyxFgW9zNNzclDPJ/C6v52FKpm/8XOM1Kh4BnthbggCxnYq4JxwfvFirUE\nfSplFMSe6BZjcbJrA4UZm658ZPjkFEAyZ0Jb8DqSqMdcItq/yuBKvqafEWnTKWQf\nx2e9zWWp/b8LT24ps1NhyKHpI6sDz7v/0GBzG76KfUp1WuSdOFefw6TeaHlkMaFK\nxDCndZkW03rybJ3vXqDz+hHq+J1bKbGES4ZJakERhUZb+CUHtZAj8Nt3FD+HuBLt\nI0aDJmWFyac15jHaHSHXUf7FaQiRyjSamgLxE4M1sfKxFlyu0gg+qanB3EXfUIST\nrzpSwEZNempu7yV8cM7gtR21i+fqv8CJ4qv9XDC1Z/p0wn/G6SfnMbhypA6KRqAN\nZyOC2Evv6Do6ESe1r5NHid7S2x2xG1g0As347SBLA+L86+1vkQ6pxgOvYnQjdij5\nEcZXsl0bYgV+q9PUIw2Fw2DzohZ2w4rHSH0KL/nT0Z4z6guu5laFOsz863nWXE3r\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAHD5T/srsObALgAAAAAAcDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0NVoXDTI5MTIzMTIyMTg0NVowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG\nQUQ2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWvGmkdupOBx9EN\n8ome4UZATQoAB/53g0cwXx/rRntCbbd2rOFmjijFJSfgnScbrXTK7IPXL6LF6SZt\naMIZgUKT7UAKmgORXZVE40x69g8AhgnvhH7xRmFHeXAshi/kFiZ3xXIHT1QlpPSi\n2Y8RcmixqI4Q1J8Va2Vz8cDONPjrNvct5DiXlfDDO+o/T6JhG8d+vSp6zP+/GEBT\nBx/wmSql2qWFpy46PEOXqE00HaWSgQe2KbKHgULooVySArhs/HQHAteZRt+YiryL\nBPNIInpypMGY3XPEC7X9ynjUPYyTVpVrHOfFIOYeR+RhxY/Tpgz6Ap+xSZoSlTXE\n4WOgBrsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNv/zI54f+WaA7PxRWAPdc2iKpaAMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAIoYf\nmRD7mbeUMKy6DReWUo1w39s6h2YbYAXp8/K3oAtlb0oGiHINemewXVO3jKKLnuSz\nB0QJrRVxMV8UF8D5KAFhfzNaxNh3+GWal7r6RdB0EI5IYjHDlfYUNxiBeftZCKFX\nM0ukeBLHzeroEZZZVSLRpnun0xG9S8306wP+hh3ZobHNl8uORlIol+qr0TrWP0wn\nUckrpEON8BWxVMC86njrDcf71euZRjHEFbTCbShU9gy7XHD2BiwCRmdDs+B4feQp\nWjw8XxfjCiNlTuJcbpYr4AZZhm0EWHwPBAXcS/b//ML1aJmjfWduQvRXcGDnVdj/\n3Iavzme1voimP7rwVlEr6BidbCtQ+CEmeybkTvrjc+yv370WKQwBHnrh8UNNRGrA\nPuTggbWTe4WzKm+aI8c9GCOmsu3lkQSOXpbmwtKXtUVvn8mNYpvFa0TRLoGSLhQ8\n4S4Y2B25vv5eWXtXq1zQhJDQHVnj4cOkGtJlpHlMFSuzR1S/CWzzQLOikAdEPCIM\niIrX5Pg4FQdQkgJe4YVnROLQAJ9rFTemeYFNfMLnUT/e7AoDsMm9J8gA+M79LDTO\nbX8uAXbGe/ZvVIZyqjnBG5C5G728H/o5bcoVwkRJCYBvPb6oLrakoQuk/a1Ty84J\nrM5kxhjfqVOnfJKtTaOYKvZ4setXKe/3CbcwzxM=\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAoANGNTRMSszWwAAAAACgDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxM1oXDTI1MDMyMTIwMzAxM1owQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG\nQUQ2NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDWRoCL+KepHrMh\nNu07/1/3OgrTtWFlMB1WGowHM7lKDZZgBzks1eiKulPx9MEwImOEEzFA7e4ssxle\nLcsx9pdym+GKBLxEst3rG/fAkLmAmLI6TVNAzFUr2vs6ZOA2Svp+ldKB/r6tpQC/\nXQqAVd81RRBAW8JwgRjR3O1CaobcmyTuQ0+g1GgcWaPrp+IX/whMrw5ZIMfZkjtG\nmZFcoF/8W5hLto/mp4xuvFUk4SiGSH0cmUJboA3MHZaRzPWtrScE3Ql8PBu0umsx\nHM3iKEU4/W20L63gisz5c44zlnfPw9TZxA2wWInheQAh5SIAJhaNNC3g6i78Vwmj\nJ25exi1zAJc2orFYmarYlKd5dvkGXYavup9TBnJ7skAl34IKv/21ArvVXzlPXdTG\nhcUaKSIt91/PKZecbYZy2btXN4IRtPJY6boWwmiTZwalKyaU2vxnKX56UQ2fqaFY\njgqJ1FnAawx83kE7nkDlrVAqX7SXmXZGKByqxUgQTu4Hbq/OwGdFQmEuDbM1sG60\nz+PSHH2T/3kNH6hhn7S6Iy1T/ZE/lkSAzmNQN0JAw5g77YLYRQ/QQsFYRg0psY7b\ntT5dn6IfNHt7YRwM1DphFfcHQn8hEYuJMIpKGrdlQ44lzHd5IYoQV9Ea4COmCh9i\nFuUmzgBEzyJZhUr636rjOCGTiEMfAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS4Y3leWpyTbZu4\nBJUTSV4baP0ZdTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAB30NY3bputsqtmK5AT8cp3jabGfrASB8u0GNmvDF76C\nW/NULy5kyIUIGV/Me8pF6UJjmk6BKikackj9O0Rv++/NyAb9r3UFRt80Zu2KHKtU\nAjhfDbN66TxPL6/Z194Yk0Wxld3T7iammSqE+yLI4Cg4X1uTJySha/s8YZ+W+F1n\nkDEQHzFZR54coVdKac9Rq9AG2asFhp9XR3MJbH54oYLRr/BahCUw9JN7j/NqCGBx\nHvCcwkya9fOpEm1YxyM+q9pqoapO0p4AlPU4INOfFGkcIw6GWd5m9MaOUGHvV9ta\n17Ma/iX1sugeDSrnu+FWXRsySG4/SXG3R/KsxtFRCMu154eDaj1VrNWBy713RBks\nb7XyEzrU2sf07xE9V/fxMzYWt9zm/QVewT4KmUREV7Q6SwJkr8MxN1Wv5/YI0dKU\n9c1rECwzWsocGK6RyJgxBRlSuv+6ul4IQpqYyYNjkrF43K3oVcX1wAt2x7G1hvAV\nifAFpXNOM/z1I578bP1rQLmfzlEtgxxt7QdxMc+DOuuJzmo9mMiN2mRD+EBhvNpJ\nSV0fX9xJ10WR0DDOIHyGX9usjhtcZDsrhTzu9CCvupWxIhyKkMz+yRiSIPJlHt7D\nTGPglvhSxqiHpPqlRl6Z+eWXonx5Fa2Dwy5+h+yWnRxU40wj8wIEeqQJ/guH67zz\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQ4cTR5sK8yOZQAAAAABDjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0MFoXDTI5MTIzMTE4MjU0MFowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz\nRTMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJkAdtJF9LH3DWlx\n/jVy1x17xz8kWnONKIRE9xNj32whoyRZogVM7zhWV1vUdWSJ981aZn8XuSPDND2h\nj9kxxvgOTzi2tBT7Zk+qz53XX/5i5ld6N+2BfPRI1b6Wbrt9g5qOzLJ9aEqPS4Tu\nAfuVwmGdWKpRBrsxlYgsI+X+eC7mlIwKDjhQkr0pJY/meWs1sPJyOGQ2gu1wT5jj\nAEOIZJfUxzujO4PJw9BctIvt9Xxactf3bc7cqPaQWGAJQFwBWwi13rlel0LMBa76\nHz178r7zpsjEcWf6xv29VdxEBOEq0SopU2IA5QvvbEbh2Eubl1My4wmIIvDt5lPd\nODzSsDsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFE7QFS30dZPuwU6txPLc32VplX4lMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAGT5Q\nuGxD8K5NFcV2KsUO/p/WoBLTXaDWPuXQGcYFSHtWdvfdrv1cj03sg43+vhz1U+a5\nz/H3QQeqaMx2tX6DM/I7mHrDuo4+Bo6cAshV+ik9zWdiB3mDTmX9Ot6TfGtAInWE\nqVM/5MsApZJNifeAZP6wg4ka0RvMLTvqe/ZVXVW+eEWXt07PgcBr1go4XlRMQ5Jd\n9D5FUSkVtVmYB5Czz86yTSZkW6J+QeYLKVh+NG+MQlla4YxVqp6oTJd7J0pSKS3E\n2wXrs1jRtrzIzctWdfQGKT2eugTvXuY8OOr11r5QI4CzEF4PT0mpDV++gYIAjWbx\nHMhn/J4rQx6a0R+N+f8mzaGgcpuk35VGxiE4u8PD7SimLqZoq4MQ/UIyKZOBFJX/\nwAitwD8wt+p1ML62CWROitrminipkW64j/krgm1Eo+XdRVGkC/juVsUU4O7BhMuj\ns7gXspXYEjwGoLnbkmGPaIoAPMgV985TlVITmMluF33bzIefJ+NCiGEFxaczo1PK\nqfKsmKU162d5997K3byld9c/wth3Q3HTM5z0Olr7z7HZuEptbtT/dUD3SLiB/8co\nb7vRs7H6v+Q/gc2YwBJdEdNp8jHtSQh61aL27k4jd+3zj4paRdnr48cPHa1x4wja\nNvDU3qqeEMHXdU25lovHyrqpAy2iZ8UALCapAUI=\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAoHC2EVAZRmS0wAAAAACgTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxNFoXDTI1MDMyMTIwMzAxNFowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz\nRTMwMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANbSN5W7QMa8j97k\nyqwklAsAbn/304+VmMl2vOIZP5MoLYBfCGBgH8QMJGt/Di6lUh3ht9CiTOoVh54v\nl6PUvt6SoinAYeTkzD3nsUnkF4WQdWNLoVSZoIvpeowNc1wPwsztnAvLohKAupGL\nbwkOzmWgGAyWd9GOmgp74/F4JFnK34UdAp7iMoRTRJCmggSyR/hMqVIHrlCtuuod\nsX28QNWfPZugcSEANtVNvfODpzuHDzPTocI/xcGFBPrwckqYA482Qwnfh0tK1g2i\nliGXY3pzyQnQWqMl3rVJHmW9rUT8D1YAxD7m4AGuwd+Qx2h0cIgQo3TZgVKJC7x5\np++OlvzWRdAxSunMMXhG1I62eBsXGh6WKASHKzsAJX/zpzSWwgXcJcqpeXLZacF1\nWJauNnOiPS2OREY26vWuq6C05W/J6NGW+enbNxGbOd42JbXap+hDC7W8Wd+NkoKv\nM9ThvtB/kHHASI0YcJjoXTmJ10Z8v0iPikEafLxdM3OLsopkmeYckZawJXs0M25E\nbh69ymreFzsxZaNNQeremS4Sy92I5CW9ELo9/CbHPtxwaa+vYaPa20gaU+J8s+OP\nVcQpKZYhPn7aEB6gzno60uQygZEzVTLoTucekDH7FbvkEW3rKBv0FKudVd26wXWv\nGFuBzwYxkmf/y/83ePvWOg33ZWx3AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTK01ITNJ5k0WXX\nPENdgPqioNE2TjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACU65owdn7yjWx4b2q63sQkUmxdGna/tZQ4CwYO/BZRX\n+816Jg05WFI/7z40xqE8WzVDrzpFuh3d3UpFwssKiq7K8P3SaC0FLMIhk4dYGDNp\nGzDMxge1KyB/IY+34bMTqJLUjbUfxl4/OoAaLwO2MEj1TBIJmwnWFU4ssGw/rC2d\n2ObcK90KCf/NRsUQr7GHyt1FmvttdpMzq8NYxRKmfu5Z45PSdnfRsx+rLAeqKQXb\nKE0cqLmHF2tKLTJNg+THiPj6uoTCOlNLa6BYCeF9b3GXHOGFAMlYQr3Amni4TDlO\n/gGzHpP7Kcy9sELoMrj5lckk1/YIXWY9X2x7uXxlPQzj1eLZTZZ/3t2yr5i24FWW\nQB7ozAtEOJRFoeufigTr1lYupqe73xJtr/SoOFtTmSlBJvSEa8yLGXLPyRmn1eCZ\nemx5xL1NTXN4gwi1MODfT2WFb+JQuhx/c45aZamIwTLJkEn5C3+J/E/8/9Lk1TDt\n1PdKGm/MT9KCn0m2dQQeHjFG68DEjXvTzLPIWiOnbu/PD0LzNATzhT/ewfak66IV\ncBSdVvcmIZYwGLYqXlTICu0XnQtIh1fktK7mcoSE1Gj24hA8Jw4B8FPZrBkOBd5R\n0KssTt96pdx4/F97TEsnkaB21Eww/DhMwrNYGiTZsh2pCq9ZSJQ6P9vcvx3njCHH\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAQ8Bpa5smr9xOAAAAAABDzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0MFoXDTI5MTIzMTE4MjU0MFowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy\nQjYyRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/kTC8JZSfSFQOZ\npulbf0RJbD3QthTTairuVo3G904mNM+Bg9wMcOGIUomEJokNYV0k5psKMo3YhqdM\nQmFgbxmzd/H0p5ofC9/hV0sCm0yMVpWht7ppSuXiE5+PD6PSji6Y0Tdt+5R5zH4h\nH4lObmsSKHE6W6E/+X4mzYNb7oTbmM//7/tw653H6r2T6rqw5gsNCL+/HvjVGDpz\nXXQG+ecjS/JhFWZGc1FS+LhHPeq+GfDqsf2O/dMPa2knk7klckBz9ss8oJZ00MLH\nCAkIzcq/CMPnRVDC7uWN9M+qCvEalSneA2QPtfDgpvc+mX6Ymvms59BBYbJI0+FI\ng7yVvI8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDCzd7yl4dt1GUp3bHRUc/sbP6d1MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAg7+E\n/ffMcvc8zP6O95MAi+0WMT0Gwf0gSW9/30yUhXu4bJJYVJzC3r2LfpPRBXaTSfa0\nhKGh9vxYQA3tZiVKkg8Rmi+58iXEpdprhiwUcRlSOaBLKPu+wo2x34juE48/+PGj\n+cAzjWv2UZa4ONQOwrCTlXkK2frGMhe4VhUUFsV7BXB3BnJ9PvVqikgYiOB1sEeK\nBda/S2gC+l2KD/AKMjRBkiQ6TPMu0uupiLObBtJeK8wbh0W4G0LNVZAaPEbR+Yef\n5H5ReVzAisFregPCoCwsJPIUQYB7LsK+/bRShQkF8ZU1YBLTrRKhFGsaGMHMUiP0\nQDV9JfbMLyPnzwUboBvgmOl4EyAbK6qq/Em/DXezY39avc/Hat+xth8o0bdPfghD\nUZH1CrVbithsEIOS1u9qkgDT6om/S2BWWMrIYmk4klfrJUWZZDLwLuBcMCn0SeFK\n3IrOjSOlMneQRF+FEKWb0OdPSb/y0z8lHFLQB8f0kGvZZqA+IC8IS6eah66QhAy+\nO2BebkvLPfeihOrl8fQc0Fyb8NuunJ8e3igEr3TbMotmrpmVGoivqlZp+BQ/ZtJC\ndUDCIDW+/Bc7gS6+F6zFXfMdMHYwDDBm/eakv8YHE8uk01+YKfhBT601OCuCKxy4\nXoh1ETe7Cn03u1C6jttheUMA92bRUzJ3yEcoj8s=\n-----END CERTIFICATE-----\n\n\nNCU NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAoKBOXvkmWgB9AAAAAACgjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxNVoXDTI1MDMyMTIwMzAxNVowQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy\nQjYyRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPkln6tHTGYwW0K9\nmyVALhgV2e4vo6lCh1DcStH2aU8siAyQCW/bDTSMY4Z+Ri/HRvtXEMNsIFjqC1mC\niPB0ixj5Y2PgPw7A3kYffTnIeedQtoy2/2XOvbIU+tId37KRshgw9t1yIlzWe4JG\n9c+MEQsQjSTNh9ssFMcMAnj5PnNi63iI+rsmw5m8TZkd78D4kZPNfiXQoN+dTkLF\ntwQC/0J62L3f7kufRe1NbjfvipipviiVk5P7UPlZ8mSgfUSXN2TLSGaw/JlcBSb6\nGQe7Euj6WWGfxoktX1S2aZAZXNDL6NmgHJ1rKro/uDq82lKw82uNmwDNmBISttQQ\nVsSporJxQEww4E+5oMRuDcHJ4b1SlkfH1xTrr4TfjNhhboZwYtbkRsTDX9oVSvsJ\n1LqrNITqfFcwXpUQBJAPd+138xrFB6SnZLNTFYA0xtlvzn9jZE9cvcLKaL2oe8UI\nfcWWxa/IrSqNl71CuSDDZWIDPcN8aVUR6/2/2crlAtQ9NRNj/jKXtyYJBadZD9HD\n4saHKVreaYqNp2cmhmYggJwxCGTIYn93LV14E9qzfURpPuB7GiRzxL9v9NY5N8CJ\nMpezaZkpDyTUYuTuZ7cJFxDuGRl/fvG9rN5zSXFbO5TNfoASaB1qpMYz/U6hLnY3\nENe+8H+CWIRkcL7naa6H+1qur+Y9AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBThJJaX9TZKRYoP\nSvSL40b3yRmimTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFS/6LC5CB4UlA82DJRsJ290EoO8QzuOyM8OYYP6c7dn\nkjJH/J700rGuyHtWNUCJSdrTUvv9wToJ18wDnUG4wc94xyOhCv5HXZSa9VgnV3iN\nEWvC3GT+NFJLoc1jbGbGakiaTmP52tUdEl1yoAO26XyU2fsZ5IzhKynfcexrWX17\nR1Yc9h6NnBE+PS/GnNLUMVLyIPY5EmXg6b8wqa4xApZfY1P5WnXr3yF9J3SXsB1X\ne9a+DiCL0oprB7/FjDsPRNj7PPjXUDenubr9qlH4GcXct2KjdFbifUQ78kn1nzDL\nsUvv5r5BAAd89DqVBC04sjJ04HcAOI9qW8aNW77ng6WPr/wMenmeFkXZ66+Anbbu\nDwZTn/r80D/YvYIiZPxORepFfV4XDXHZPMCHFL8BYN/aFhpGDsnVXrLhPRqshi5V\nNjE1BWXuhYRwPJ0wkMO4CBv/Ybd2Cu8HgGLMJd2/47eQb+k0icG9EuaddgC33sAz\nn24wiZI1SJEHFcHrDcSOOKMKDKo3o/VPMuYCu7zDXDrv94+GTCHKApHyXmeyyfVQ\nnTkvHGL5X45gd520cgJ6I5FKsxV12yS1jQmYwpBZL2mfmK53RleQSbUAyR4zTALH\nR/J7dIquxwjvhyZTm2xJMHT/fbG3K2r+EIb98Kta9pynDLK0sYdnqqHOEqcx8hRz\n-----END CERTIFICATE-----\n\n\nNCU NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAU48RDja7yUgAAAAAAABTjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDcxMDIwMTEyM1oXDTI5MTIzMTIwMTEyM1owQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3\nNUNBRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKD7ErORTdbJrgVV\nIwH9h0Hh4XaHmeq4K/jA8rVifb7QyP9R8mRyxRv5o2/AV8/nglvws7+lP/cE3yKo\nKZgDeo1GMfZguHhoQOJsKzKUFRIcxUAAYi0yXlMl193N9bv79GdMN5ekMqkFW7GQ\nqmr5wjQp51joMdhcOl7mYCy5bnFk7iGgtwODmxf+ZqfHhvC7JksI9oGygZoGxcEP\nM/zb3zNq/NK+VMrq2lvJBBqcYU3atmYp2Ip5yec2H0oqfcIl3WEmeI4OkdJQPlTE\nsSCbkBrEpv42jn/pWVDFM10hlbMhIVm2XNYMQoaD8f89gpL5D04cpnc98cncnALT\njvGHSLUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNxWmY2/Q6DiQRpOgPjTU4QrUuJ0MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAGlEP\nxX2gZjBAVDnJmwRFKdcUIp8ZdxbCKLeNAgG6eArFKfqg+YjjzR+EDRqKTIvkBQvg\n1ySjRsC9WEMiuJReoaLIbkFaW5cQ8oZKBmoQYnySU44xzsXVD8pfVDknoLvAGTUA\nLYGvGUPVrJROVSYOc2nh6ZDMkqLw4gMvIJLnv2nprgsXYlfdgJyo//+ZLb9nwObS\ndKuVLY7bWsgwdHMe7TDDdtLZ2tgaQylInyHNZXIPdFgE03OPDgr4g0t1p4VR5MlA\noQzgsppvNYUfcAvQsga+ldkx93T9D9e59ldc2r8o9NowZ6bS53/xE6k565l7S7zl\nBkSCUk/bF/R/1WJK4/7YtkfbpUDoR8c373jA9tMaZFgshlzbEQBXUh9tQ2PjG7fg\n+57EUBMOxCvijQVsr77sXA4sHntS0w3DkOa4gPhOcwteb785q/1+66PETpYV6/5r\ntdNNTwrlaA4UO8GXk4eBkSSqkeCyhtluXycwJSRYcyBwmMlKYPEB5EFetS20tPXh\na/hZTbRCtbpNkutg0nMk6m/rtIqdPzrY49dClrXUmTtfh6N7Mn8OZ84moneSq3y8\nWFUSyjldShIUFPPu5rrjrhbw6J2lJCvmaNh/P+BPVE8HmonefhU+JkEmM0tAjoSt\nXTSPr4sD20OKoAWju0n5r5wT7Et0FAlGyDdFpUg=\n-----END CERTIFICATE-----\n\n\nNCU NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAn8723KGhUY9tgAAAAACfzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxM1oXDTI1MDMyMTIwMzAxM1owQjFAMD4GA1UEAxM3TkNV\nLU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3\nNUNBRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJNPYxMV71LoCXmE\neFQf4sfeJQIJQydCPRoFQRPLBu7LdyFZeBpIiAmlwPykv97Mj8YsYIAakHJGKJV1\nFNiAIuJ6H9f2ww8pdhpIIwlYrP1P92l3X1HXLl2Vlx8VIyKE9Y+VgTJcV/le8JdB\nKH+sAhd2ut7Nhz1l05rxRE/pxh387L/mNWFsJOeDaJ7ECdIwD0VPFws+lSYdMgWi\nmgV6HbDbge7mtGHA76VT/1dnSHNnhB8SkOHXYys1f5aGJPcsBNZAG/VdKN9IsO9G\nvkRVNWm0XT+EjxWgm5N6XlNSeG4d8UcM1Gst0hNi2WS3ZF/TXVcN8mk3mzfn0JB0\nzi/jkzs+2n+HkhTp+R3k1vCazo1WqVZeycu7O54Y88LLVw+A4FOibaSDUTFvR+5o\n3uNYO17dmSyw3Rf7BjqN/NKYLuK3TN//RyqeRPja2sPLqauxqHERvymYPEffgrp+\nb5LWbX/l1vfBDPOkVD0CFA9xeikL72QA4KxJkmT39E3kxDKJwILG1ZniWTpUzNQH\n/YbTGXJNTE6W8y9rfaVhf+Ip5CsD8ZDMsjfqoDlESdCX+ywFgOfUttgSzhHpdwLa\nZCqXZDDqxfMWl/pzBVQn3H6f8U2tmd0dl5IXnsrMi2syvg5C4ZWFbWA15+0Ml331\n4ZetJn2mtIZ36DKO6m69ahruxFMRAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+xciOo3ZpreWG\nhyISkCxoSlAg+zAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAIWSTfq8/L0xrkgp8ZCuD6DGWxRMga33Ma6FPhEhp0Hh\nr5I9lqCZQJM919EmsY4YGYoNKlZ7M65XBUY06NvtLrPtQuJJXt2xEDqJAuTRKgco\nkcPZIWO0L8rh7no/yXmXO3w6RH8eAiHOm+eQ1ELv41MOT8gR4WvNmsCHoU7lDlR2\nU+tkFEjMHNg+gzJbmdbBVtnvKE2d0YlOyhwsrqvsVMCu+B/zk1v9078E68DoXSh2\nKWzcvDytfzv7gV2r/1IXlfG2t/7RUUdtkrjYML0KlXE8vOIWZnFMV1pw+2hQYFLY\nPHyvBybdfjEcdI0tWvgYtCkfVsCe+0dWi4VhadA2K88DXagGCzS5FfLyrv4smjIk\nt7uvutMPS9R6MsaKMC9NzsQ5lnKWUfmEm6tDsx2sb3Zq0H6Epch7ox8ORK63ZdbM\neDETMKnZ8R/DL54ABc3S5mJkftBK/3StVDVqo1ks2nndnjWc5OP+x1ZGixu9KPMI\nAMDYP5angOjL8KLoaKRdH9MkF+xCgzNv2Xo0CJUUSnrGMWbk4gu25ol01ry5tToL\nbA98piH/kEEnAn/XiSoEMmvQhj9DRmMynnP/E1bqOWnI4ZaBypF3rcnW/A7yrYUq\nj+tuxhVhrsLOtNQ4k1Ccou1MZt6AQxgJK8NpbTvDABVeluWK5womkEMqySQE1g0y\n-----END CERTIFICATE-----\n\n\nNCU Ntz keyid 022cbeed5d77060f2833e9d5376ba8bc308cd9ba\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAs0ODXDoF1cLtgAAAAACzTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxN1oXDTI1MDUyMjIwMzIxN1owQTE/MD0GA1UEAxM2TkNV\nLU5UWi1LRVlJRC0wMjJDQkVFRDVENzcwNjBGMjgzM0U5RDUzNzZCQThCQzMwOENE\nOUJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqERb96FkKKCAweVJ\nCuXHWBGD58/JlKRjoDGwO7Ll4ff0tWIJ+ioA+w3eZGrC79LYyKOsVuAVRnQR1TIg\nf+FMjd5zzQnxjeTtEDJmlCc1T/WDyr3QenJQLhecjt12SxScTMgAelnTPD2OyLdE\n5RhxHDu+yXuoWgu4dJ+DhbEmOW8G1ktKLj+Ji0z5glutP8+qgzatK75DHq7jj9Wy\n0Pq8JAaygMhpZCgfxluTpew1AOrovOdDJIddbXT8G52pLhkWFY20sc/WKOGybTng\nL+m9y2BhnPB8ZKt6IwdijY9Gur/KlDPGfUjV4wsTPzq4aU1769Lccam4cOQceMCG\nLO/h8QFNqt3Cg8Mkz/Dr4/hBfpNGC9RQ7Go4D4EfKboNxv3r85bRUrQX/NmY0uff\n4vcu6nHf0lnG40ClEubtF5AkMBZVBuUgP/CPExcm0GPCJFSnoUhkTket0DkJA8mr\nt9rCv/27qCqeUenoEpIJ7b5F0cZ0VlFyBsdNXfcr8SLUbIxxahNGDhsKB7UQj8RY\nBP0vVlK9hqk44YoahoSpxAU7Q87TlYIwjurypvhsomavCcue8sHbtyeLsibUqtYy\nMtnh9nMrL6MQ2eDWH8RVi8Bu29eQ5ENXLLLKcuFp1XfWkysAVx2Ahde2LkIlgGeA\nTDDhPzuFOmCgHMg7y7TmAlPGpm8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCiBghoor3Nr8rRz\nseCZN7G7Dq0zMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAHWZAEt8Ix0IGcBsbwhRyul00PrzASZz+XN+q4JIicXYp\nXfb84CEisuEFrlGsWivZBMtuESnDAVNcOFjloMNa4CeDPIhR21HyiUrrjeKvgt/8\npUe0+7mm6J+Qw6CDUmdobxhIFEqYNj06KCpYzRQ+CIvFBGeaFoto7VhQovMcuVoF\nKioUgdD8H2E4MLzoh30YnONQ20Y8xQhWLBoUFRBIqjR3Wd3RX5UIlzwo1U/CGGOv\neoRz/1koL0pxS6uRC7btIACeGXvgSQ4UnLQFC2GHlarA6wLa6LyUwt42sbQIpi1d\nbu21da3Mwa5LOpHeMz0UlwkaM35WEVi5wItuAHvolmI5vIJHPtrjx+4IAHY8TiIG\nfq8iqt8l5hIrbnn95bt1pIZ/D/W+3BLkmxzdvg9TV4cChp8Dia4ETBZZ7Q1lmJC1\n4/TTlAwsFMMfRcp94VuZZe7o0Cy23Vs5X1HNJ7urMxQdj2wQvvIc8PbV1ZlwF7pm\nj8HdaJmgXYwz3AucILbOqS36rZQz72c0cODFajSLso3Hn2SP/6jFwpU2bgED+owM\n5tZsidzWXMQRKBjt+csxKh+X7IaiHErD2594Ok6Nf+W5h9rtCU3c+HWX8zWbhKV6\n/dsBNDsvszO/dEpmy+4EQx6cpqdXs6T/sS3z6bBa3H1kaIdMHNCkRve9Z3JMLGA=\n-----END CERTIFICATE-----\n\n\nNCU Ntz keyid 03d1cde438ea3db34d943181c1cd517d688062ef\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsw8/v+2L2r8LAAAAAACzDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxNloXDTI1MDUyMjIwMzIxNlowQTE/MD0GA1UEAxM2TkNV\nLU5UWi1LRVlJRC0wM0QxQ0RFNDM4RUEzREIzNEQ5NDMxODFDMUNENTE3RDY4ODA2\nMkVGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmC5cXdSjxj8+qhnv\nmfZ840yThIyJ7HRQPWS4NcnilxSZdqNxrgMOj5HmDcq3qZRlG80b6Cy39HnPRakP\nq7RiUgmE0K6Hj5uh94UZXyQbl4aITWZfxXCwo/zTTPO60+gqDrBU7O+LTkjdXuua\nU4KlA4bT0X62D4hWgiLCAA5RJWnCxTX2dMGQjJ07+dkNI9VEdPhdSh2VqsVo0dI+\nX5PtbTcdD0pHa3KNmmKEYTprhpEc6YCkTpg78yjaFYmOtNZDvZ8m6kvZyTkaiScA\nkSgN+59OCpemDHuZHGUXVfeRuy+M50/OZcU/Sg1GwIERly3l0uYXObA4JAC083z7\nbxpwh2Y73H7v7BFmBNCrvwoQytekQMwvvhNqSxQii/U4yv7SPZgs+oo/fmWRa3WI\njHggTUFlis2nhnAUSH5XbPvGgFlFatOzrjbNjxmKZ1n3676cQkQ63qf6RkJuF08M\n6p66tYVolGs37AnZTRVnUm9xXhXMTUx05OySW8FEbFGLym93ZUKVx86re9ueQ6/y\n5HILgtgSfUpNPsgji/O4ZrjZ5p0p2XdHc9A0oop/zeT0gulU9eWCKUlMDwhn8quv\nd2h7YcsZOyW3gpWXfE7vJIKL+5LfdvF8y3GWrgXj8HzvnJsUg6dpH770vtN2oY/N\nlNM5KJrLvY8nnfsbUBDFrN9Af5cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFADWUoQ9kUju2F5H\np9VeDFeJTlKmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnJZAoy6SKEn8eUyL7dwG3Kuj255/Xo2MS6mbQI4WnTrP\nofuecThVMhbR51MY/pbi/6LLywyd8zA65fOmUHn1DAcV2MERyO0lwY1f2ri7Tsv6\ntC6UAW37dWadC8te0/nYQw0vQ8DVc8pYPgGNIgViYuw/1Fn+ZGEOM1BIBWSXF8JA\nFz/4PiYzZ17Cur7zqLQk7Sp+5MzF1AqD7dFD9GgWrQa4ecCw8skw+uTR8xPYhcgO\nQK4biDtZRKCwZy7cE2x9Kr0YPXECbmIVZI76+wFnT9m9woluEJKis2eLPFpiw9MQ\nOE7NViVnd09z0lk1cLCOx336o1VKDi2hjsFbEWoqEp40OMIlKOORSFVluVSBO7I5\n4ELuCMSB6bu/bCSsvh23A7fewbhd1B7rscbXpZeW7SfiTxHUHC82bjn+Fd8uqA6t\nF2aYbOnQgZdpB38aXeYrhuMZ9mWIyY43Boe5mPpEGP2BmbFR02+Z/RR6jf7Ku4+f\nE/+cvWaN2HvHYNVzvVZ/0RzGKwn8yRadKqP3vzf0nEN94vsvKDaJxsxLbG55D4r+\n5jxkF5vyfbGhre6zMjJcQ11AOFzfq3xc1VHZasVs7JHnmCsIz6GlqVfl4+PDV3/q\neTLxUvgX0/LHHv9v4+Ha4lbmgaizTMQOmTjMm4RxiRjhhpJu9/XFTLu/nCt0qE0=\n-----END CERTIFICATE-----\n\n\nNCU Ntz keyid ebb2f4e312e6529c4ed0cdb68228580ae5203d45\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAs4nlgaQXkAouQAAAAACzjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxOFoXDTI1MDUyMjIwMzIxOFowQTE/MD0GA1UEAxM2TkNV\nLU5UWi1LRVlJRC1FQkIyRjRFMzEyRTY1MjlDNEVEMENEQjY4MjI4NTgwQUU1MjAz\nRDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnAKMyBqxM8krItuN\n0LyBLUZaF2hfkuWoJ5Ql5NcRZjB8KswaPpIrXzdE8Ball32d27xURFTPk/N9FjL1\n8VRnvC9o7In1bobbu/g3aBWLIQSmqLVIC7HZ6hwzsiYgKrEBM712cJibE+FDWqmO\nxhnx1NP3Y7tklri8LJcdVoWALjPbSAaYAkCgG+EHzNc/GWInfYipuBoWH0MTbgbo\nCTnQhNlB3Mk830GZVGRIQ9gifm1Fj7gIz+yLZYR1vIaIrv/P1uoCltjTFVx99w5p\n+9D6g7z5s0wmm4Fwt3V66rApA6oyDzAnzagtqPQ/PVuwMCYNHX5xm4kkBxrYcXqg\nrxmhf0CqbyNLrnsPQnKKR+w+jjxWJcGVNuH453laZX0vsm1RQCn8sw0QTFY0xT2R\nrERsYqIAe2qQELIBmUGlRI1+s6B8CXd1ZJQzdJ8+SKVoI5WVJ+AsK49e61ud66TY\nGTqmSVzWnTKgsCe0l87QNBfTZ4dL2FPCYWre7M4fKQJUrGEqo5mvokg6MjE/uGCu\nFZIa+zo/mzOBphmtGr9pH1xCdE55hHj8HtRQQsdnyko320e6vyfjtFpj3moZvQwE\nbX4KUHpqW6GmzV690SZzSD5HUMmfv2u2/RV3wbzhuUNAC9Ga975727NBaIz1quXx\njvuZ2s9ljqVxSBDEuA7LT7Zi8JUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKiK9ZDhkYL9KqCQ\nyrcdzeVRMbsTMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFKv9+79fu38BSlescAcd+KiLQC0LXS8o39BuXnzKopMz\ntGvKhRnwMZYVV5anvEQYmdrGzhkOETC2EuX3YGNy63ONc7M054BGvvGU6TzvT4Vp\nTJLKyuhIdgZSrnEOM9hKvEUa2PKImd2VIg13b8mWZVJyZwvVlCzx23jQiHq043Us\nvrgsde0UpmQnD41stCdyHlUSmJz2kUIf5eslmeDecwGmvlFWA8VlYy0uWLB+WyuO\nDgDjCNUsdnR2rrah8UwvQPvmOT+6S3UGUXEOmUFKnuIKPLn6L04EjXhwQ5x5k46v\nBHpNbxLzaLxz/86Hd9ZSr2aK664ok33njiJOE0PS7Fu93VKtnRifKWIHXp3QY6YO\n9NnHF09w88Ops0uGawpWOA5Yg6/D2OPtpOuBDNuBcSk5kV818oN5ddTJTQZBPZni\n73yP0ul+Hf0iCZQwE+mr62I/lPqP5qnncn4LBgRA5YXBF64c5CIOqnBG0L2F8TGz\nglUDw62FQsxQ7OBqP0qXM1IM/LO0Wr2I61EpsOZpdrz+knBPmldqqkqCqGGSVASO\nVMHu1fdWb+DXd/8OpiuG9e50kCsVmObzpiEYRCHXEXSvFskZYADjknsxrelQnxK9\nOKlszf58gYDrF6cvqQ8dtfWidMDPisLYdTzsX2+GgmSKoOxhunxGg5iDTvnSL/I=\n-----END CERTIFICATE-----\n\n\nNCU QCOM KeyId 79100C2EA35C4FC14BDE159B56326FB731D1D512\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAGeszGWXcuHxJwAAAAAAZzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgxMloXDTI5MTIzMTIwNTgxMlowQjFAMD4GA1UEAxM3TkNV\nLVFDT00tS2V5SWQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx\nRDUxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOvx/D9shcI+lcy6\n7Gf8NYVB+hJE7SfuU2O0RiWmfsOUTX1FsgNWqz+pxlNld9/6iDcQdM3s4cndq35y\nSm8cLjwhYZUgs8/4wJ9GDaIEuIlJM6QcCdC0q4VXJZOsXu7Res2U8s5uygVFA6+p\ngpPo649cmiMJvVD2/G31bG0ddJZEoshfd+8uGUzgnf1Abm+WVdLN+UFlWUhRW1Qa\nywK1KbsvgzqH5ArX0blGW+/1J9NLNnERnSBwmHwIDGyxXumuDFtZ6BxxVxJlMGzJ\nby0pOSr3s3b775nTTBigZ/HjMOC+ofecVCHs08oRn9Yv0jDcigRw2/5ZxKl5RNEv\neVMGWb8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFARlutcftqqDpf9HPc5M+J+jkVIyMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAOMVR\nRKo8PSVwtl+QjjAIQD8MwGTzk/35t8tSeOaU/qipe8rBUrOdduhEgphXRlbXBNjc\nszMVMJqwrDz2JfhqifRGuOflfFSyQZyZzW7CTrEv1eaCS7MS8Ev7DedNVao/cOyJ\n9dwDx0T6K3kXdUDju+TcvQa/IHTQ1v/BKdzSmwUPoD3nx6QqNvLxopw7MV6ykRQW\n2niUQtdij5AIxsGApFbw9ffUnOO9mrv2veimrcGcjDXk2QDF2WYIfg0BKlifvmkq\nbmREva8B6zrX7KnWgFrNh20805JRVYfSNwAiwzaWyMMmNlR9od70NkRaw9EpeWJv\nU8tcWTf4OeUqX6IEYFBdmB+zbEg8Nf8V+bN6x/4XSwp5u9T3e70Y5RFa3ZjlAtxW\nDE1jJdUVGeBlOf0WHeZ7ZQ2CvlLjE/t/ZzndgNWj3p22cFE+OE54SEO1Wc0Dcxp/\nFHAKEnFXyt6G6Kzd/PnAvxcHozgadekQP8/7cCjmnxBE/2Ak7msb6kINGOzOFoEn\nCCFL7HeF/oZgU9xC3dqQ7Sxd83lN6SDq7fWNHAYq1L2Sq9eIBKGV28XwWJ/ZqTcC\nzdYR7KZUAn4MYIwaeZdCO84ehVCi22hcrr5JkgGN2y+wxIVFoQHKU0kxN1l/PXrn\n/AX6WMJZ2FWOFiZU7LTvykbGBoZ4n7oXOnfJQdk=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID 08CBB05CA4510B2A73299184EDDC9CCE42911211\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuPOTkfU1tMgSQAAAAAC4zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzM1oXDTI1MDYxODE5MTYzM1owQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC0wOENCQjA1Q0E0NTEwQjJBNzMyOTkxODRFRERDOUNDRTQyOTEx\nMjExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtAV9g7TDzfzep4bh\nX49BFfnJKhxRMMaZ//V4h9Y8888Sxtv+oEYkhIbTNrLrl/BXolcjWNFrw6sHIL6w\nxS9MEjgsaDKRSEdmYR/925awHuXvTEDltOIju3TnUSsDRjY+N8N1993MOP9w8yoE\nkzvPorA7LARiY+wBQ5n7qPORQBbNjO9F+Gl7m/GWSbxrbOoZu5FK4LGgoV6GVaRa\nRJR8JI1nl5ymlAqLTXALdaoohJ3y7vGava7fFbchMm6zxgLHJ9mhZp57TmT2X8AT\nH23WUFaszMWawZAJ8j3lpLql31uZXawmliDZxrf6fg9GrEz71uPlQsXYyxoC0/Jm\n563LgIsbyOXPIRGx3lf6lyFQwm2PIX+ic1WT1EDLhRZHLaNAcPtIgiYuvOr8VGR4\noke6PnIpJH3S+4qfrPAbxhjkCWYVKx961PZbEKsD+Pi8MjcsOiMRHodm0qTw1HGp\nog4hALgrCgsc5/RsOMyt0LnuWpxoQG89HXyGiMHp2dbcqCxEYe9sldsS1o1/1wBv\nQRnfeOOUG1tQn41edRH7GyxhfPSrepHxEPV0PMLf0I8rd4+mDeMj78z5Hy//MFDx\nLGWmMnM8ucOoQ7Tpfv2y7Hk6vIBHMYYJ5LL05zMwjXo/SMhG91eEBU8x65c09AhV\nXfqLmtfuWyMQS9rzYS3SXlkPopsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAD0Rx2dHFNm9uoF\nzhGudu9JIzCfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAhExEq/hk3niqfQkTlfumRWuONMFTmkFznz7CHHJjf5os\nYh0AVsiuhS3+c48JjAzv2hZUrZ9z9fLgBkMqpW+7eEs98Sq7lh+plz3C/JlYSnJg\nmG6YwhaWiWZGvLBsXK3V0pi9Op9OXDh3oxJbw7uR6xYsTiI10zOdVx509gahbKxt\nxQTlbHggUQ3e6rQ031QFgDSaeSzx2uGG3JiPoqYkFcpQ4C6/eLoKsSmGwZwY04HS\nMKAxxXodwwjS0SWSIQnZKYYcA7IKydKHR9iNxV72FUYJdx9YmmYSie7sqYO5IV3c\nmDLkEPTSZ6xxUiqIsOImxPjWD4/n5R9i2wuqKOH4MuUrWbDsM402plAzAd0BY1eV\nvZY6SWqrIQSMQW1Nj/Ni9qlhIpYa9RqbJM76ydDFnxSiGUgbqOtLMyv54CQG1zjg\nK82w6EJ5gVIaQs7awxQ+1XCV4F42ICDeBC0ETPyVkLnLQmBk5tcmmf6kqEpZi8EV\nBjevwgKIP0Un6RJvZv9wKJmaavOs5h1tmez4cDcq0JKvo3IssOQddc+BfFFEakPQ\n7m7QO5wvvsXaGoJJFgIetd2MG0lR6TmXg0nPepzoGfSY4NDNlUpTCw8+AeQZdBe5\nYzwuvLi1Y3xuy21VwILKRfpbnlirGOtwczyIx9BsetNkrDt80ULjdQRi3OKblTA=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARCCxa+8dw8FRgAAAAABEDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0MVoXDTI5MTIzMTE4MjU0MVowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4\nNjYwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvD/+RcOOs0mhy+Rt\npNqF2rETLDO7MEEwxWKV5H1/eC3iZGQr8zXk3NEy+CmV59Q3rwwa7MlJtwKxCkjA\ngaWQ1MtnxiyPDO2saZVKgBYvkJPq+fPDZxgTVAxIiOUElm3KyPRqJ1REtJWVvvj3\n40FgOlPs8JNioaO6n7FfPin4sF8utVSC8ek4WCTB2/p8NvqiJJMwDt4lCzjJ04Up\nqwjT72FcYIZwoaF+DOxgWnABX4mGbS+o2t/2HtDUUE4f6wrYOBbPqyqnaN5Uyopt\nGuI8doCypFHg17PowipaifR1gZNjTU3BsXfN5J7h06Znb0AJ939ttaAB+dKYtDK1\nUHz79wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUm2JdAHEKONCoWh9AM2ULqAbVnW0wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAqO1ko\nkuj7CbuShgq1VZf95iqT64OlNsQPnvkC1usCDOvvFR1+hOJ716J0qJBDx9HltNVN\nQE8mkQUOzKFLgpu87kMOlapAv65DmG+yePnQpbGp4q4UsdG1YbW/DeRCXvmEKaAZ\nY8wlsemr8ffdTCKxe66IeZ8O5tELgWbw71asIyn6NXWcfxmlY8qZtALHNAsv2y1e\nk19iaowgmmAnBH2LdHr5YNvHIB2/v7dG0s32wo/qIMAdt2sNilw2k74Lq4tm8s0+\n9V+YSw9250QpO9QSixcBLvspctptEa+gnW4WUf3JnoVPcePEsUe8ct3O6WKc6fub\nmBa3leurvA0wyhG3tGHxqVnu34nKI1DNlT5rO+gimGzdKLYnbdU3PLH9NYZDg18+\nxHgonmWcPDSLNWzbP++JpIkpcgan9/ZTggf+93AbQMw8X6cy4v7pyv6Esy1lq1fb\nW/c647SdE0diR5/LtUUInxbcw7uQBdwaPKQ0cmK+BNnsxlbWKZOmruFA6X3kYCLh\nkrv+ITi5YFQGTVXTrV4YfdfiV02tPLgrCAzasOwmM/YJdHTKVO96ksReg7VHivCb\nRwhRTaeR6i/FaNwqOhRSSJzhwobmB3tQrap9cuLoTgKWuv3IQtTsGYoS5JCJhoeL\nek4wydzXJkuDuhS90kHBzUjB6FfJfXdiIi2QHw==\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAoOhrhRmGH+3pgAAAAACgzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxNloXDTI1MDMyMTIwMzAxNlowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4\nNjYwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz6hEM1LygD1Jcf9h\nErwcAQxtP5GrTd4hiC1ZLyo12EG3XjhbEsIRjuSgWFhNUr3qdAkTARVzQ/XfVspr\ni8+QUPU6l8wmUNSsF00C+wTDdQerewF+4MhD+8g58Q+Be0peTb6WDIuG9UTBHRKy\nlMo+k6h+ZjGOedWUWhTQ4C9cyrO900ShP8GnTo6kExuoEBHbtYEbauf9k/GHhKDi\nW356HGCJ7uq1mijjqBhEUVJ/qeu9uqFQd8dv31JqgPoXtdi87LF4+FTrEcErfgW1\nqmq+M4ujENILucOzD9Kab/KeUXOoEjISChN2phvBBcwu1EwefgDJrzOSr5xgYcE0\n4jI0Lvj0b4XeZQJClB8rX6c5peTnpPLnZWU8pI9VAcoy5V9/k49hovKghuhpsydP\nudl6aUn6QCOY23/5Wxb2Ke+w1fLJy43BhEiRcSi0kh9ouYp3ecSjCe1y1WxRguWW\nJFoA0tfHTQ32aG177qQGfmEPtVW9aMdSvjN1AICMcwx3SYz3SVmfg98yaLPkv89Z\nzfVRswJ97/RMv3p2H6zY9YAgIamj5bV65U9kld7oMdEwzpoEc+mLLMu7zPJJbFmx\nN64QPFUm9hBgatZGAPhy76mS7R3vct6KpQyJd2fI2obaAMdRExIHhGHM0l6pRiRD\nJSWTILEy8KGPVqRMXXoanFanXKECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEh0NqalB29FEkHd\n8osmQu7DgJE3MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAOEGfTAHps7wzySb/iWORBkWr66iL1xcHIsolzJqJfpIE\nRLc2BvaHiRSrGv4BSG4Jj7VDl7SDpWgbhyOihaou+3bnpxShDhj7dK6hFN0uQBu0\nJ0Xj4dqiZjcIHfsDujvyaYCqwQrBVZ3lOo8FSCNVEnei4R+vDrmBwmLGg5PNpXWD\nFdEJdH6+/Rv01lSm/+VDeEADgqbziLFfpmoS2arp6qUJWpdwQLYoFmyeAd1fXFoX\n8IGp+2qCfcE/R81Mo2gnIJ7HSKwKQ4lVK1IsB7QLHf6bgb9BDGE74rceKB0h5TH+\nNA2kQNyJMOdLv9yFFrMOopH83t5CFmctp+76G3VQgMaACDOt1mNXY0ScG6HbWItg\nZOrRW9XDy3nHYVSmyLGwSokO0ZdOeC/DhrpARKa2zlJkOjaupiGHnluskJVUEJso\nyGRMq//zEtriwMQiPcXCKdjBrU3X0KojTg/zCMKXYhym8WB7dj3Qn3sJCF/1zbjP\nMEog1L74QJ+RIwaPN2rnzrzh/qcBvZk1Adpow/7XQDyTtZUPuIttdkLYjG8bdS7C\nfipndkRTiVewmRcXlU9EtJe/VfUSGSQdiSPrHpKJsEP4gsoRIoSjfGhXXz//JZyH\nGjzO8g5XCL1B3bqgTOXDwjRhVcUxLUzZLB4Fh1dUvh422eWUKSSM+Su5RXgRyBs=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID 662D8F1CECDFF147A8B6F0EA296AF7F24CADF9CF\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuWFA6XBdDE2bQAAAAAC5TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzNFoXDTI1MDYxODE5MTYzNFowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC02NjJEOEYxQ0VDREZGMTQ3QThCNkYwRUEyOTZBRjdGMjRDQURG\nOUNGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuEm7silR9WXAYkea\nD8pHQ3g67RuDfGa4KMZwgq72z0ba+cm0PN3fkjTif98WnjB0ari2v99GyGXhuYE3\ngv7qobLf1yA8mlda2mJOKCb4Ii2Ggg24d229QAfpZqY9JO9myHaV4Gq20vec6G/N\n+8IFo/4/Whh7wiM4GOjR3c347E+CoNaoyk/MrkhkXmJXHYVf1VypjsYVf5v0mRhj\nCPfMyWFddNyVhkoS+Qj8lxk3mT3jG27hCuRvAldjLY0T2aCYoCpelqNYwsR2xicH\n/tWsv7Co7pMYinmIRYY/lNKrQwGSNWNXSRQR9ZpE9S6FzmjNIlSgXYDqY6JBnYj0\nmMlcv1Xbues3NgALOsq5pOSwf7iJ5/F0BUiMqigD3fypTwqOtFGJclLO9Y8yA/jf\nLUJIo5sMhFR6/bIxcFDN5bctpXpxvrAxUqwjSys3VjrrvXhQLfwwKnnvKTF51aRR\n//5msmoHYfOoG8ZBFioZhAoPy6fgsdklw2dUzDmH/iygjfjOjKIpdoenKYpHJDPf\n/Sv2N+NhXw9x1LCbVm/R6RDe4jlY3Cw5p4niflfaazECK/57hh9USpeom8NAVkyH\nJW5PAwBIk6HcteOlGEKX2TqBWdbjvwZbykZc9j5+yO/87nnF6JWYGd2T2ZV92mkX\nV9wzGnLuWtBNkhyIxDlRiX+0QSUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFA/xDSw8g5cVcTJs\n5E6NDpcZCf3GMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAiARSAvYq5L6tT7ZHFu1HBHGhIEItrqHLTy4rKumYpLoz\nAYeOrcb94DznA7m2gV6+PqmekIW9c1/aGxxOM4LhUzNxtdv+zlaOEYs4u1Ed0vXg\nCc8K4mf3QYwzyY4nksh1wXXFzeFcECzmLVvR/LzVH3B9dEX81OnmQyx/f45YjMsy\n44juVDlU2sqKXYRan+SNpDRC29GDeSQpr3q/L550FzRcP0W+0H65vFxM134+TxiI\nk+U0WSVfytxuDPxUxtVRzAdtTtJaFEiZb9v0XuDgzUriuHY2dXECw37lZ4ccR7Ua\nMpTfK11/Iarf+ngJ65smKpZSEolPwq3K0o/HLZ7EndkyMAW4KNzk2/891ssu47+Y\nayUw8us5Lp10N7Hy2rkNW0vVuxSS0Dc958Ch8B/y1yu5kzjVIuaTUXK1W3QmF/oq\naOm7n95hOk3S4bong535efgjbHp3pU3ne04RIl0bqrFfCHtulR6/ycVJir70KRl+\nSxXVuLU8sJKXm2fdbnX1rCD7mePSrwwLrQQznEdhHHJUtmjBGaV7I9Z6n+zIwWTz\nTUxL65wysig2QWx3FnxQPCk2jxwZOwbnwAnh0kr/hMtCh77kxeVp9DDj2yDou0AO\nDCp3UjoPMWtxFFzLfS0DbIq5SEuYUQ2JIUKZANGIafsn3yEXYS4n9hyvFj5VNdw=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID 6B2780800A941CB47EFBCABDD8D1F01D529BF36C\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuJ/ZYtypitM3QAAAAAC4jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzMloXDTI1MDYxODE5MTYzMlowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC02QjI3ODA4MDBBOTQxQ0I0N0VGQkNBQkREOEQxRjAxRDUyOUJG\nMzZDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsawDFWi/0qPpJzCH\ndHwVwe2gZolll2Zd02jabZGdyD1JkXGJhXc+DdJrcSUwADKqOEjJptG2vARPWB0n\nlz5hSXdHc4OcDy8LUxoiIG0wUysMBUW653YD0s8Q3Axj97F2AanSOSuQ7MuUXpIh\nOjII42SxVVNWRWHb4owgt6YC88oNitkoINlSZmvnzlu9m3y0m7NClEdmwMgP+i4a\nG5QnwoHX65j+CtNkzI4JnxY9ynFpTVcFCTyDQh4couwBF10E8fn8ScmC8El7m9Ki\ndJBaWPMHSPv4YSVUHNO26y7CALybho8004Pv2xzfuOTvHKEuainEpj4WMTSNxcXW\nteOqLWvP+RxeOwJwRbaBA89ZCeLPwG3gdCyDtNGcOLIUK7rh/LmfakbC9WHydMON\nBVEGXwFlBr14df4SnE+DeZ1GEuqEWIl6k30XkkYTv17y+kwC3tOnb1bD66zKY9wA\nd3Adb+GbesFumWfmOB6ikc6G2m3iqOTrkZuudQh6bMkiFLAmlYKgEHNrYvNSMu04\nJkCHaNq7rr9kwnvVSb+X795EQWg5Cz0MKcX78HQKSToNlVqNwdbMQSjh1qrPz/3M\nR9NnEe3/bk9CdvCXlHDFR6xu4w6JUf3CRp/Z0QfXG6vKJBnIQZ3YVw56lR8uRTYt\nwNbnn5LrjcYlAKhpUWhcTkIbPCMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPlDIyBEyaVan00r\nly2w5kJiI5aXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAgaiArybMN+tIplAiOLku40NymENP7Zhg0JPzmtdMQXye\nNcsKPJOhcMFI9AnxEGy5yjoWlX4FYEDkolLGWqo8VRKH812J4b9KOzjOzk0Q975/\nYTFT9dwv0e/j4EwkRdUjNZ+0KqkZpTqHLiBRStGEez7BvpegP6QoN5prEo5CTgva\nIRwH5BqSk2D7zB58KkEYOJ9ERPqE4BPb7qh2+0E6oOYP4Z7WJVOTB643KHbJE+7F\n/gArVgvnhn9We5sgIScSz8iy6CMWS3p3OKluBzhoTHLJ2Ju3flEScMFvU1wUJHRZ\n8boNy53Fw4sRU7tYRnSlrLyq0dgd4BZYpKF5kkUgkTVzFNvlO7pXiqVvtHt8ufB0\n1LRqg5eaHkSuvZ+mRyA7o4PsbLDv4ShxFJ9vnTT54hG5iI06Y97onUlbifRhlbqR\n1GtdXD0DiS7XUpazhmTX8z3EdeXPojlMEiQsvLLBGs1B3nzXlqxn5mjM6SK0HJgl\njsDPy/LCBiqnVN3cVJ64+2kwTQYUsvPuOB9YxcGOv0PM+DhBcaq5Kid2ObnAtRhg\nVWGHAyNnNoQNVbHoXQbq+MxxDP19egwgW91YzMKdfEWR5Vwj3RnmSlGtcaPU2AQC\n9rB8LrS04FC5g8EQaXH71nCOC+6IO+IcsYonjaPX9KOg3mmfQE9yYqdSYQCUj80=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID 9DA5C72CA00BE14B85B3E535C8B07C83E85BDFF6\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuQsUTCeIQe9AAAAAAAC5DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzNFoXDTI1MDYxODE5MTYzNFowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC05REE1QzcyQ0EwMEJFMTRCODVCM0U1MzVDOEIwN0M4M0U4NUJE\nRkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA31g4sJEbAWaYrU2l\nkH6Pa7+xRDvr3JP7JsQFGRSV5ok9tolxJ160QyNuWIq0c42NRswOGtGKbI/Kgqy0\noaYd+Qs/29YURiiu2EzEhDTKDpcoPNkhZys0artLyKSy27NjIYs1OREjik2QyCRN\nZnR/XRDgT2bi7Oj5mwMSt/i6Rk7UnVkRCcJaVbcuMBPw/XVCMjCWjOp26GGwlEI2\nZTz3coXQbaQ++V/+jA/blCQ+2t6bCVd1Gzy5ZF+WpE5mPkVVztcqdi/yLE3txqdF\nsuRsSrW6yrS8w0sm5HsJDsLfAuCObgL4FneZi5M9t3u6BstSOKzrPydsEHIgCd68\neeH3xljq/A/xZnQ0cmi/ftsBy9MTJ0q5bvEOWw9agBdfR3Rheu5w9sBeIf+1JUEI\nKGOiY15uBp09jIboIr8WwjzxWKfDrBPhdP92Zsmrr/UX2k2NW6kN8FxK8yiUQ8zb\n9iUvPqh73KpFyyiZ71c0/LUGGhHgjDgxXQ0ycpto7R3ZdZ48nbAjD0ETBLfOLChD\ntKQLO9rr5SoAIac6r+I/4fHin4WGmv+xi35zHy9yPAbh7XL6NUL7P7hnsPNxpbys\ncTWRE5gVnSPXT6MXQu0YnbsPgWbjvjKDKuycuH1PxA1v5aGfzEXYvzIWaSohjEnX\nk3QxXo65G2/HNw4SxfCQjESDt8kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNPD6lqYVaWPQ9SV\nv3MLK+ZsyrR2MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEACUuV4Bp8b2rL1Ekzu8eQEZBd8UUuiDcBubHYNRjcEXjw\nstHz8t1AQze/3eVhRnFdcnzuITlu1ZJCa3IK7NZrws8DeKugWxOSHweATH2t5v6M\nioiR3S/725QFjZr7RCZDVH+FXkj8vVxGmU9NqH1kO56JO0gmk/nzuPs2C7SyevbZ\nXrB+2BT16BIxGLVVthUcDeSV59U9/AoE/D794Ln4AJe+5//4GqWLpWU96sNntXH6\nW1PuB6ZtUxbLEy0tjWashEBIIDl5htncxt3CM8JhnGbApACob+BItbkUH9g8cUWp\nCc38t8ZhgnBF5XJ4PBo26vOXrIDCntiL4XncU31mJg9JKK6IK2DdIVn2mR9nYsP/\nqZkUHw5ms3ifgLn/roYRq0nLiVWaMkS5gaZRnvpMtkCOi1jrAS0UIhuGNyTGzFBY\nk0EUSBTMJpTSLkzHcUnzYueNijaxGSD9cv0MDweA1lLpB2raeusv4J1KHwseh5VT\nFSEkZ5gNWuNJl4XUNqrW8is0qe8sH2Hr7T3bcx3D77gcMwYGIQKMI8V5Gwc/ygpy\nLmpBaeJrN6U2Qhe5101zojduaAwlMmIfuF2nu66iYQzwM5MZ9NcD07e7VUVAlYHK\nUzBfNT53eoW03+CZltBUTP3S/ew0Aaegj+aVdC1dv7MI8utg1sEcbRIg27YsKaA=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID BD963E9AD574AAD94FAD6CBF416DD85B4A559942\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAubIolwyT7ZT1QAAAAAC5jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzNVoXDTI1MDYxODE5MTYzNVowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC1CRDk2M0U5QUQ1NzRBQUQ5NEZBRDZDQkY0MTZERDg1QjRBNTU5\nOTQyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAluuYcYaM+pb++9TP\n6mzEniemOPipO2F73qpK2wYLXBM3uRILolRjKXzrCxvYAfYqZ8SAaY/mIa0HBQaI\nUTwQu6F3BK2PO8jjYeJ/1HAdP55Uh/0p0ds0Bp5sS57ukNpjlB1r2ggCrynd6ayj\nAO3SpjDX8OUOaTyFO/N4PZw1y0TAmzOIzCxjfQrACMs0vdvAkKJ4UveDsrsRq8rU\nIYeqDMCPJDnCPzHxvP/vLMVV8i9hvaHhMyw5wiCuyQtrkaPcsAzor/Os1y2I9wsN\npAxiKH70uo8TgyTHNObAY4v+StIyWm2Jkx7RWOcTzV+pFGOBmIbavM2CLviRq7y8\no90BdZh0akNMGCfgc6Ay+BlUGasRasC/7p0+fPkCUcr9eVxZAmM/PFB/E4iHsIMr\n3IaPSyBEch2JjuhHaxH2ymY5GBvh5WYdSHCZqez6M+efTn7ohjj039xZhcr946hw\nlWuhM7FekhD0wJCAB2pngCG9/8rYfp4TswF2vc8c/p2VNUwMuAi9Nrj6spFnnlE1\nSIVXRmB+P8jFofDlKRykxoS9ES2Tyq/7+IeSAcZBNwx1M4T/AQ5uU9mkZ7Q7Do7K\n4UCr0evt9sGuF4r3n7jzm/aruPHlff1Nuxt8+I5v6Jv2p3FepVzL0XqXhH7gRb65\nD3dhn3R1ObYVQlrGkPvEOifZzDsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMA8MDFO8hv7WfFS\nYbXM93B/pEYPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAA4PEgMwelUTaHr9c64aFyp9mreaAYmBt6eOzrIlMMyxu\nFLsCNjp+nUdhUR7Slo1dEuB/KVhRQIsK6D12+acRRkPijH8orTpH/jDnnIgJy1wy\nTCNKdzIaqyGDjIzPVXVRMqCzhV4laizTApuvoT2GdRkznabF+77OJJEZLRsBaj1V\nUOZO+KziNt301J+698gr9DFTFkAHjQxoqQB8UtKPdwmL15/+ZxoM5dvEckCeq4r4\nfGTqlHOZd0t6Xi7YNg+mKFxEC/5zbyYDwOSD1xPv4kKPq/elNXnIeS95AuNBb7z0\n095EcFKZCSGs5K+bNQQAJ7hEQHMzpOvou9oWg/sEoo3Bss/QXPQKIEN3buYWn7Zm\nvcuSwf8o0DjvyV1cyAEWZyi0JtxPHZ456UBsyHi8albRmqFfSyVBeidHtnkwUlww\nyRNn3k6NovlFDnEKaIeZr5zX/DD1v/+pP9dqVm1LQQKLANdvM3xLKNoaxIYq3hpp\nYs74h9vIZjpcmyDB15DAg9Mefe+cfvj2qN/Q8IVc49N+2uCg2sc9sE5u4mNBQq0P\ng3Wa0WPAjfNxKC+BUGdgErmMFSrUfdD8qyovhUK8/T1fUqHEPVNi6CysS785erfb\nanrt1EOdtrM0+VwYxqixNSlV5yfYAHU2BQ61fi0OVTuJ9sdd9crhgs2d+YYKuvc=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARHh5MqhrVrbtAAAAAABETANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0MloXDTI5MTIzMTE4MjU0MlowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw\nNUYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7kudFfo5X9GuWChi\nPoBtC31Jcc7jaKjsYb+ZIOcIa2RNBItOUsZ2vVr3+xmbYVyg4mrnF7ZdXj6p12LJ\nx8wFG/ZcjzPpbKZugysD6/ZiD71uIto52c+nmh0dKYqc7J9O3QM5NEY6OuG1z5Gi\nLxYg6lmwz9upRS5pO4TnDWJA5kbbTrxRYa0Zyff606Rz3uJF2w+sTJuByi+HBJU0\nVKZbgGyAcxa+cpq1WKWq73tOCcPbznXWlEIZvkAJbjLI2EVeaSdq4H8RskX5nJQM\nUaxwWBL6rR0HICt+qHYJR0pcSrqUmpCpmSMcDFA1+C8/XEPY0wUog7946YiRe/YP\nB6I61wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUNgeqqIe7TO9P5oQRTUxS+6JIP0MwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBxpGnG\nWF83fjuABSoi2d+TzGIH5Mrd5tT7mSUf09ZVfy3crnB1l/vWCZpMS+UeZbAkfKB+\nEl56qBaFBGY0BgNOwKSsLUOrWID729a52VX5PyzZQh4u48qbQbeiStR9A3PstedQ\n67Jwv5U5ptZGM7+N8clWJ9z0AGEgkQCn5R2MPtB+REfBaENnvYepBc6DO72Fc9Iz\nSyItdsjMPwxGrVSMCZvWid5KsTK9oMf0U3wq2ZCxCcXey4E8iNsyPf91Zq3IQXog\not0hv4vKpt14Sa+toCPL8WnQ0BK4InXqhA4UAkdEk17N84DbdDDqUtcuOa891Mav\nz1cOSc4iXMEC6TQ7CDcs6q58oObQ7kC44HeHhWBzax5XmaHfWbIglNKiPSxHwyvN\nd2pbF6gkhgqaOG8nw8fEty3rtHy6orquFLx22Ty1YGgei8G56+snUiP8J7xgwycH\nouS0HNYaZHk/x0SUnbsufwab9I+mnu8QCt15ZMQp+t9WKT5oGocwokSp21KxqM4i\nk6ssaiuImfgri8d5wOCz7L4IzP441thnB78+Q66SPSLlP4k+k7OlkrBY89jN+AHk\nEnurwm4lZRd3IiLhBpzYKAo4yuCf0BR7sp3R8jrc6YKyXl3ugJFu6J7i1xKImlXQ\nnd0AWxnwNU+cPx0tG/cEKEUHj/8C72cPRLdp/Q==\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAoSlssUL0Ws5dwAAAAAChDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxN1oXDTI1MDMyMTIwMzAxN1owQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw\nNUYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5PWFbvS9NMpe7WsY\nl11K8lQNEKS/jfm82cdNcXoP/N6dNlkLjyAX1xEEu3MMGVbkxLOJ6BzhUlWb5zh+\nSThkrpSV6DKPYPOaD3xBWmthk+C9+T+R+nrcQc6vsqZxo6UrncXMaTK26h821Dxb\nYP6Ggq5pnOp6lRCX/D9vjHg4WQXq5z4o8lrsWt0T3yTSVo/HgVELjrI5bJrVPGGU\n8yX0mZRpYwCPDLS2RnYIGpzpVSdYhVZv6Or4DOGEPQqwQZgaod9Pllx58nQVTDHN\n7iWr+off78z0/oUjI+H3UfLEdbqgO+uTqcoiUGhtdEVITuegGIuyR2XRGMGkzxTs\nlcdXiXvzYy3Bt8igmgmmT+C3wQko6OmM6v4nHjmrt2toIgVWRN6Ccm+kyKw7j/3m\n7zMjC2ZrDazvXM41iuWWEZBeKSJNlTYfuGxxuLDWHWUP/kfz88j1pUVhL90I/z9k\nwZTSIu3SOkRvJw7pWchvbf8DCAVtLQchKTkfzUW3nyBPFEyND0QZnTzTOwNxhibX\nQy+QuQitt1AqmbGVT1TTGZRQzLbOVoMfnH2g5NXuzl+Lf9NAY87lyWfIQc7Cy8ce\n7HL1RLUO0S5KGVfwQR8be2JKjsCGH4PeaJD4Nt7OC5rZPTMxFXvepoxsMXruKOVR\nE89K2EMZgqhIEZztnb9oSBk7XpcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJAdawE61UwnOd5t\nxMKK3YeACwqoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAh9WoDcM6FDuWeRLFPk0DtW8OsEF7Kuo7G3JVt6JUqagZ\nC0QlvtFobjTnng4ESsSr3PS5NSfYabU8mPKpakLXAoUmAg+OrJTq//yWG+g63yb7\ncz6dgtZ0Hp4Iwu2UbTUIMG1lGqriscwLPPnqKMQI5hZBgly0blxoqXqICZdpXFz5\ndH8Esaig7csUjLf3j3h1se1IfaTzUO07hAEAkw2eRLxDhs6NGHxGPswQLXVhGUXD\nd7dJSK5ITGOe82tQWQwp+FouKpLQo+Pa6jhsVVgALrliWZwUgU5KnHUh5X7Rqppu\nDEVxn3lrbAxWATcMWSEjDmyq1w6kD8Xy3mxm+JKQvxpmTzYIB6Li9aP+uLHGIytj\nUIG/4TYYdICPjpW6HW9a4QXSat8HqHhOl/Wsw4aLllJXCIjNheGc5Hy5AHTyt/dA\nbZBmRwvdi5/eiIlZHbOBYXi+6D8/bf3i3AJOkPAsYLEOY2KGoXaf6VmNsEDWfqqF\nJld9ggS16+mOD4nlDe4szaTke5NuvahTi1gwAPfAemoONbETC6wH2PSWWm+cB6hM\nuQkA6PXk8EunpSdJeOKJikazJ5+Rkwp2BL/yObK782jrMjxMzak9J/TLh8Qc5IKv\nM61RMptdzP4u+csnrLBtuQZ1AUIgdEy6ANIqBtt8jgQ18RquOmazVDfXc7HEw1A=\n-----END CERTIFICATE-----\n\n\nNCU STM KEYID FB17D70D734870E919C4E8E603975E664E0E43DE\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAudirr4J7m+zRQAAAAAC5zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzNloXDTI1MDYxODE5MTYzNlowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LRVlJRC1GQjE3RDcwRDczNDg3MEU5MTlDNEU4RTYwMzk3NUU2NjRFMEU0\nM0RFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7opxbz7RjQBihWTQ\nHzLSqIK1MN4LMS+lI5TKEBwjXk+QieqL4uRwZ6b9XOKlVPCK22HskseCu+f3v5ZA\nM1fb4jnzotbblUh+XmVDXojpJKG1Tp+elqpxat3wgNBFo9eBkWGLiiFt3ZC8T0d8\nvxYBOHH8hgvIScTBbqdG3Q9vSCKVTMQMC14CBdVqQ17r2FuOvphHrNBkfGvE9TI8\nRehdFTqPyzN1GSI69ed9CqMO1mOfpHvq1mkJei9CVnOOBobwCgyViT2P/odzdZ0b\nE+Mr7k+s3yteqGb2snUQt/SzCDnoWvFet6OAtjXfT8/jNEbdUaRfMv+wh9+hVa07\nceQZ3HrIwpBSsj3G7UZqnOja4LulgCnJvDCjWwlVoQzapEq8oSwp8XJt20bI3WHk\nfL0+V48iCCISwZluvy8lODTjmtbneqK81oHCdVLw6OjofRK7jTJyVp+DuIW20o7K\nG8qf84cqDdcOJE7HFm2RmCNi/umVHhm4ULYYhhJD/hkYW5eWLWuTEAiFwIf8HA3H\nUnXL2SxP3p8YZOdno7hs3t696M2QH6Bl6qu77zHPgGNFfzr6nNihcxCtQVBihRsf\n5aAF2Q9t+g1ff7gDH0cZjwZl6KEzVcOjCLmvUI5sihEjOzWjLCDeBbGFWDKoMkQO\nkES8jPc31wkL8F0d3Bm4Qi6wcAMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGxjwg9jW16Bo6HD\nmqaOZqiHlwQiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEASDN4MQXOSZ3fdwjIRYLE/KsMjB9TqnpeIpeUCKTFTvUH\nnH/q9BH5XYtqOMX4Xhb/N6qwYONpDK8N5UG7YkKaqIEZ18Snzeo/2RnK4sdp0Dt7\nW8YFw8wNPMjUEwp8vXgelnbJGNPnQ7vsL6S86xIEpPyza/tBdrGR2lkLBUOUPHTc\nkZwUGZa35fTNNYBFLMSEtfh3NpHyQl6u8yJf/oywhumI7r9VKgzLoQY1z9j4szzp\nVZDe7e8Aen26A17pA4NYTzPfsm2vPDyYdlp5/Hz1CJ7onxn3W9hAJawxes1URR1i\nmQXW9bOc8+CmsxO6eJL8T/TNWbomTu6xDUOx3eXDHIktFANPqe3i8iJny1Fanp4r\n3KMlB8Wr74W2t7bMJo9vhx7egMgeIHL6oE+hhCqQGNecLR1DqRVrosouTA0cp3jL\nPectRA1LqadffETGS7KWIhAj4YvtEhon0VkxeFYRCh9eOU2Tl8Qw+2BT4DGnLGpy\n2WXOBkpzwPFzq2iACbaaBAwOtEGScuThVjwlWscrwhwwaV2lbYoveWWQEZVt8SsR\nnyyKc17CtO2y4QTjH9tZEAJmNkQzZnn5qi96PGC0FVVAA01V58occrfWvejUGyyI\nbD6MqH7G+aFepvjtWHarYaAJK2RLVhr5TunM0h9Z3C64sfWY0atNu4dIUNjLwaQ=\n-----END CERTIFICATE-----\n\n\nNCU STM KeyId 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADNF32F2v5IcTQAAAAAAMzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTE1M1oXDTI5MTIxOTE4NTE1M1owQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LZXlJZC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2\nRUQwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7RpZ6ZyvUKlAjkV3\nUf9ORAhpETHsQ23YpaOwLUf2SMNMPjRKj+10RHZj1u7pAB5RdzFbfVtPHYlAoE+7\nDIgAawbhO/XRsiwPsljAev5tzLN9jxmxeE2Y3bdyhlK0fuKwHIl0tH2i6Rsmawgd\n/CsvHz+ErJr4fLitWsfGpmJ6ZXsU6UDI6bmNVp3+DukWpGwRoQrJ2yh9dkbzmmku\noZOThLM5zm3aWLBJqNus+QUqvj/8Xm2C0uzwicRJFA4N52Vn9A6r/9o0yGnuMWhk\nLbhWRSckzTw0ATtnY/5ajPwxojcAHEASRxuJnPrvHqbmxSqpYV/ZBEjV6iJS52RN\nIBhHuwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUBjM1HEcTnbFGaxkIk2nvX8xShIIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAAgS3q\nv+kvDHe86uLuD+mN5SKv1C6rbvAp39C8pylhd4FXqxofYhq7OXGslk8Z3abLFvQk\nnr/4kLh/6/snfoqZzghYX2Zye3diJYXI1EWgIdlHkSYUBaA7PpbAhXsGMLfvP52f\nDNxLzFMdCqyiei5UFpPdommnwOuD6A6M0DJuY+kPu2W6AzMW5t6vZejorUf5TZne\nKDoMyOtV5qow9vitd+GvopDlav7S74NyuvoGL5fWMN1Uq+CooJ2if9T/z7ALvzPx\n+3CeZwFtUzaXrW10mTf7HKIlyR2duyTaGshZ18PIz+urq+xJwwDu0WX5VPsSCebc\nCHeKXJhcLPu64Ql+QwJTepDaFPSUbaypGyxrgLx2tFM93znotK0HXdDsyhZEr9I7\n/TWVcdwP7khbNolV6nzmStXVlcXhJQ8F1KZXF8uH/eaDGwPsgREnUcig+xY5GJz/\nMsz301pMZKkgRWDoSeg52Su5s8C3kh4PpX9CDI9l30A4zN9SH1Xbusrpg1rzsl0V\nzTxAGQ/b0R4WKeHjrBq36/r+ww+LRK30KiZnswLeaEc0BzS49epbyocPrQPDtKHr\ntPPE6wEW9aewKJ7/TJc+AnWzApUSrujLfrsTBcR6C6QzBmius5IzXQG3HSWQHkOW\nYPCjccjW/UThYHdRc157bNab3dZiWUjMRN+V/g==\n-----END CERTIFICATE-----\n\n\nNCU STM KeyId 571f806b47cce79bfa35947ced88b8d1005ae09e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADbqd8i4juySEgAAAAAANjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTIxMVoXDTI5MTIxOTE4NTIxMVowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LZXlJZC01NzFmODA2YjQ3Y2NlNzliZmEzNTk0N2NlZDg4YjhkMTAwNWFl\nMDllMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUc9QrIge1pr91RJ\nA3GmVcUTxsmIBLoMtlQqeSkldiAGTQulvxrRBsYW4On1/KvTObryNrpJzIUm9FZS\nEndQNKzpBm+lJ0q0BEWCjtfqFGGDH8E322tTVkoMPHSqng+9isrvFAx3g1brNDWq\nsWgg8M/zTZHNk6D0JOTbniwNhT1VAlaqIzxIRxJOnkZjMND592VcvQlosmFto0Wx\ngontNDp0bhO5kTsf709lV7zgf/F1eNVXH3FcFKROsXSmmkDK58VXz7tQU4S/H/1H\nVc9pXR/RM9GsYIZJ2KQjTDOLp1ueFMClQvgf0UVJKbGqoAg8HZ3+AavV+Sbg8LhD\nJ3iqSwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUL5w0I0frKOTO/4bvyc2FryqO1p8wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBUd3S8\nEfXvSHSeTsRlO5SJhtTvBHKtgM3soOfgv9JM9QCVv/3+NvWQgFeiKEAtsFXwfy3n\n+JCkU72kfgqwUV53AcjygwOVaWt+ttqXvES/V4PFJDCBELj6eGmk3iu1sx+FKjN8\ndjO5A2GftVvvQaCMS3DdxwEuCdzJKsFwuT4ugFxQfx8a6OhYLaheJa8fR8hsVBZ9\nCRWfgUEpuJJP51Htrt6TRmGjLqBbs0x6wWG42/RC3xVTMKzarR73xi2aRieXfeqK\njvVFm6WVYqYoAVPEt7nIzcsoFd4idCBrwS2M+T4A8NF/Fot/QY0u1rPfYXa+CgTi\nYeP1UiRe2DVW1SkpAEcKwfQiVnzaXb1DMbdqQr9Rn66MCgzp6T+wdUu0PztXd4E8\nxb0Q8W5Z8TYhD7EyfEtrPpqyZzkGtT1LK/IAyNxiNFGUY5eEIWdH80BNz7szabwO\nXbMB7yENyJcnce9PLEh2tBYjsjUt2Rk5LBLxAVYAHfhCvCe4guMC0b/ZzyV6LyWq\nICAZhqSh9FzET00EOtSQnAGAa7Xrdn0xyzHvqGVJyI5wdfhQsyNawD+HeJ0mCW0Q\ncMCiUP5VvxK4TPAOWYweJofxoxgL6XzcIcVrzMDyglcbwDSIBqUBaN7oi3edWUAC\nyQGAFYV9M1edyM/x04qtJjEvqCsBvgRCVQf2Ig==\n-----END CERTIFICATE-----\n\n\nNCU STM KeyId F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADmLLDdqvg+eXwAAAAAAOTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTIyOFoXDTI5MTIxOTE4NTIyOFowQTE/MD0GA1UEAxM2TkNV\nLVNUTS1LZXlJZC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3\nODIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwkxNXtvoXKacz4CY\nUqQWmjjaZtDjSUERttzjh8tn0j+t7W2KCYnBM8I/pli8bq5/7rDa2HcamsQxzbKC\nliGSID4XqKPxAhe9hGRLReu3QrZndnjeGuu/Uxq3qhbI7lX9YoRbdU0fqm+Gb6cH\nHzmKJosjjmncDShb/pwD1MFPK/oURA4oxq6aGGIPDOsnnU9kxU4p7PIWBiiuweCK\n+lKZee6NuVDRVprMcrPMEhQ+UpkovELVKEWssM5Fvt+JM/Fdg7VKAGrkQO54sndC\nAM0qrqrfQF4Dy1N97OUvUWZ/pELT92XraUGiiAqXrBXko0uukJFbZrAIPlw3zhJN\nSQizNwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUCgjUHgw46Ud2QCBf9XwoWaGT++IwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBPX1/f\n58J9RfGM9NFajbH+emsfB2WnhTypibUdFNCdonVqC7PnbOl8sayFc9sVvMk2ikj/\nLEgbpLH9RPRu0FDqb5ltlKzqefEW3bzHPot3BW703+ntrLvgyGFU7Tpy0nfoLqXy\nYdmKEZvtYM0aF1EIRGdblTkexzidH1rV3kk0fvS5KrGrCDrtRWa+ydyx5p/gXp9v\n+S6Q7s5SGpLvly7PREksFe+R8sN63abgn2xRMqLi7o8CJ5BaHgJcQGf0xjePdKzJ\n4sbL/z5irUQPNPvsDk+A37MR6/evKsICsOuwi3MVb1NDtLyC/zTJkv4o1tmAeUZI\n4RjB3FXfLAIKXGQXqMhsPtjtTxiGaR/mi8J02I11e6MOdLXqlUIVggh9o+cfUvd1\nLVWULKGLElkVL7VeSRAZEg3f2Sua/oQh+p01Au7RxrN8u8dxLoQiux9sA0HiPRQO\nR1YFRj0Z6SZJjj2g5LWjNz5FUAgZl8vu7WS4FPrKMVOqO9LbuANdjwYCAleIaewD\nH0pFc7t0hJ66y5BBakcmUKucRTO5yjeYWxUzdCVhqrofHZscgmlr/1az/7aSDpyK\nw9/PnEtUSgCEq3I4Z8hKgYPxZIvkPUejzrUYgo6albkkp0tB8vIhLrmuk7ThL9wm\nj24s6T4rKagFATcnRfIKmMbKroxaTo/GdMPDLw==\n-----END CERTIFICATE-----\n\n\nNCU WEC NameId 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAFStmYspu5DnXwAAAAAAVDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyN1oXDTMwMDIxODIxMTEyN1owQjFAMD4GA1UEAxM3TkNV\nLVdFQy1OYW1lSWQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1\nNkIwRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALz8iOFxFOzvJZy9\nZh4J+YTvYswQJQPq1jLjq88rFomujZRi++ZboCi/hHmjyJLra5FwPhVleHOzoAGz\nE9Kll92bNn8j2EJqEVcQL/G+56ZagO5Pm6o1sllGZElmi0rofLZHFl2PflxFM3dq\nOSGpxOv7Qj8HLaoujpDcgWZ4NozrxtzvRhgym1qg8iPVbgMa5FNXWDYLjqdQi4eA\n50+BHndm7/yRxi+ImTh8hgcJpAQTSz8o2fIrZgx0py2FopqKuXqUGme/mMowltWj\nPT2NTfZdkMjZtFoZM8A/Tq+IOntf+nJPCKgcZtSSw6stOqDqCU23B/wfQhgju7rx\nw0IoGj0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFHsT8EXEc3v88ZYpcZjAjTPk5j0qMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAYh5C\nWCRrCmy7J1xLAqcBkPKJb9EfxypjOCkWagObZ+zTshitGEfDc8iVPkDhYypNbuWj\nfldlDM8JLVt7wUf6O9M4IAZpsL6jQmmep02cyEfURH5O/AQpopdWA9az5A0oaY4y\n5UkMCw8oQd3LKznyDxZhFfIKLj6s5/7/koQ1auKQCBhSp+EuR4GKp5d+ut4tsWKE\nVb5FcJZWud0kmWQXqAJj4pC/ZHnbnrVk1ZRtX4gr9xSbVsv1lYV887hHv6pL2LRH\nme2uR3t7dh/P3hEj5LAfStpiiWCGKC6X/rUlxzvGXXDqq/YoglMLvCLOSEr0g77W\n+hzDtW6z9GYR29YV3GHGkQd2OEaAoCMi7OK2OmTky0dQWDZ4zNwXvFMm+7nYTVd6\nezgpuJzmxq+2JTnKx4xlWXXS6c3gGMzYD5+treTJcS8sET2T+Y3v3WFwjZnSJmcG\nH0W7eMdyA5gSnb0f1WbKw6hecfYMJTBllROWwxSk7P/TxMcrjRiVAOxjtENy/Y7J\nikDcNddpvS79+8PO6VobSrpHQpwhZfrv4H5601fZNBwYbLDpGnB0DeNweEQZI9dv\noOEg0Qoo00btDEAYO8lCMdnaizzo2nsTt7TXYvZmzkRLtqbUUjlG8nEMHikLdmix\no9PVQlHVjmcwtKXJVp82F+BVfJsVoxW6jJoJTUQ=\n-----END CERTIFICATE-----\n\n\nNCU amd keyid 8a0578cf56146fea399af903fb5b0ac36eb2786a\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtgc6/n27fdGUwAAAAAC2DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDgyMDE3NTE1OVoXDTI1MDgyMDE3NTE1OVowQTE/MD0GA1UEAxM2TkNV\nLUFNRC1LRVlJRC04QTA1NzhDRjU2MTQ2RkVBMzk5QUY5MDNGQjVCMEFDMzZFQjI3\nODZBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0C64sknHcTVUL18o\nrfAg9BHKGV2tnv+dS36CR15g6Vz9ih/austomQHvJ0jI9cXGSo7Wgnbc/kheHtb6\n13X+MI4Potf8Du9TIxRM7xNpe9s4QdcYrBxzOgx/GogD6EpyFPwMY+G18l3IsOPC\nbT3BJufvQd+mZc6qlRyjLHKNNBFlev0hex1geieCO6JoiCD7Sn4yJr731py+VR6V\n40OcIqIYNutispwAYUFAb5sOlNjD0rfYGiLSH6d/tzSmox9Lm9YeiSXSyumsPKra\n3VK2YWfZ6dR1AL2/6JUOTyJ9F60EFMKVXlalteZ/OV3dEF+f14oP1qGXYWiGUp4W\nPzgT3fF4YcumLcYXLgA1YEZV/TixJj1PBt360nSDaNGRNgpbhouy9KuBBwSMpgTV\nqtBR8nwovSG9kwqXbrl2M1nNLVK/JgMJoijPxSIPq3AQYqLDZBkoq8anuVxzbvqq\n1G6rEAW/KASL07gPGLWnNgBXTpCTSySdTn/wxTqw2PnrGJE25cg7NnwnHEpQuKop\nDQgJhLucy9IslUG+tKTcrDA2f7llB/ubHDq8R0nTC0CqAKySRMs22A3Q+GP+cbaX\nY6Iu9PTjx4WbGcFb0aBnUF/7QQyhqen7c548lD2j7FceGPdtIGN7UrDQisMgsrP1\nekjPqvF9dirctZBQImd0r+qJVekCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFAbUMZJZUUpy4KZ\nca28JgwoLrNlMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADz9I6fa+sW+I/fEPG4lNqZvlU7zU+itGdC8KBS1fO2fz\nz2KWTfg2jMbUdsa/0JIaKHyr8EVreAcGL72L6KEGcp0uDrG3Y2w/bPUJ4FWhtB6N\n/O2m62jr4QSx2XdWgDFxPzVhGKRqKzmJOkJBi51ovHfovToxon6sQ6JUfQRKNnuV\nIE9bKbYnn5zooRwu7PfeXwlxN50aKXjz8cbMvPxLQUQCQ4pYsogMoVz5dif8gyPK\nFMJpY6edapJIzz/gfd8oD9zEOYI0M4OcAHjC/QTvWwkLOjIWrW192XtVpbS/V7Bh\nuhYujG/gjGJC7uicf74DJuT2FtDZCDzC7n066erHOuI63o9QcW0xTTQqD4x62R56\ndowlHz6J/AX64wr24U7mt0Tl2EiVH479cwYcHLIsG2k19Q+R9V4HoYnHqS5gnzvp\nDCcdj3jVbC6ke+wYiscXYxYbHiipxHAZtfRfUByl/SnyjmJjKfLNXeMeunzsKhcm\nB7LfXlifx3GeavRcvDf4JVqmJOFwcxIqUsRypZWkmIVDJaV6TChOzcBRLFDuFKwH\nCKSNGXGq2u2PD77yX7xYqjrRDKtRiBTkf3x7pUF5HZLVEpGtBWNWmPUv52sC0xV6\nYKQwFC2hfqOz7rT9Qso0RGTOJBIeaF6TbRm6yrd+J+2k3TAXL1FgoORc7Z241RQ=\n-----END CERTIFICATE-----\n\n\nNCU amd keyid 90e007e175574201a7a8dac93b323114a887e1e8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtlVbEUtyFB4jAAAAAAC2TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDgyMDE3NTIwMFoXDTI1MDgyMDE3NTIwMFowQTE/MD0GA1UEAxM2TkNV\nLUFNRC1LRVlJRC05MEUwMDdFMTc1NTc0MjAxQTdBOERBQzkzQjMyMzExNEE4ODdF\nMUU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAosGzKCXtIm3DVz4z\nH75N+p7JNoNJEi9hu1/i2VjjJDsMPr+bRXswr1d1aYZja4KaWH+3iq71Fi4uthpi\nY+nm7PSkcO808heNYgvjOPXX6aeDx6L019SI8VidLKdKXcUGcXI1z90WJbvmvREp\njdCutj+qLEBzanTujNERiSDvC/74K8IpktCvsOPruATIU2f6+sWAPHeoNZq/Zw/E\nSA39Aw0gv0UFi322DkPAEmFIhyo27rC1PQoLKKrZfQfqFmx486m4EZTsCB3V7GBi\nAlq8DKj2Mtcb6eZC6r0BKbCTxwyAfh8cf88i+labsmlCEjd+XUF5Co1cHcN6c/ZK\nbVt1CY0cGAMeeLNuYbNErcqwQPnlI5SeD0llIyTQEBQP1kzeGP3LSJ8WL2rl0nrL\nuMtGaVC0m+OXX2yqjcD43OaxDpS7Hp39xu66S7zDp68CoXp78t6v5XbP/J/4A3/6\n9AOAEN8RG678c4Cp7xfuMNYiiLmJ6N3CBGKM/ktKltcPzq15DLws2Fbvu8ayMpc/\n9D25Ec/WiBP6HHYuEPfKQqwXhc4waRHi95I+TYuivVruY0UXfmGMYn0csOehAnZ7\nT8iUi1Wd+kGdaW1VzPnf7HIVPWo6CW5G17wzPLqo8rVE88ueqvG+LmB08uzbRcJg\nTwldpwxQYHvOFh9plD3FOIsBBU0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP/hRQL6KXZ5Swe3\nxaxDNx6ybb3WMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAfMUA3RtJSpk7zynDCZRQCr1g2TvHbX0LN7unQHePPLXu\ng/hGCYiCmLk0QKZtn9Mg2hayqdfCvcN1EIBWCDAV2SXdbwSjZiPHHgrDdP9uNg03\nVFS7na8NHfY74MwZjV7wTQAfncDnT0chtksO6n6+kdGnVPrF4HybMl7PebauehBH\n4ZSWZ8Lg6m0/28fcLIvbF1bafko4i+YqGVBJTQ2coYRmlM0bKhJZiVXoIN2YoYRA\njeuLc7GZ+u30nfMrqXbL0RjRJpielrZzh/cGOB6X/saHdMbkN1mPaMccBrCowLH8\nfY/5MqNSNXBIxE8uXkrW2x5yo6EeJtEH/tSIMoQLxmZ6BrgKRQK1u5TIrE/XnHyE\nK1+bYRMZTV59TBhj1vWB6oy4Qr1zZTJ7wCpXV2GJbNoAp5UBdcTORPU8v7eydQgi\nTfPhbMQb/nKDQev0Z6Vz2ljJaq1KY4ktVkjQzh2io3Bfo43vHym9F68wOgULO/7K\n0l4Qhsddj3eka04QGVUDF1NVe4DNxOklaAFkI3G4daTwUNcyP3fOGl84U0MBY+vG\nftnoFV+KPKSgR1pDivw7H6rZPpc7EK6he5Sl4gCjrwuiuOKO6uT+6snc9xMF5/KD\n0Ae5FmHhR2R3JTLsTbLi0VWdh5B7uLOD1BO6jvDZ2u398f/OSgBHlXZ9UaI+QMY=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 0d9969519b979d32ee4b803165664e9cc86f9d0d\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZAiwzO0EGFr1AAAAAABkDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxMloXDTI0MTIwNzIxMTcxMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0wRDk5Njk1MTlCOTc5RDMyRUU0QjgwMzE2NTY2NEU5Q0M4NkY5\nRDBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAovb318JJMJKAPtnu\na1P03kXdh5vTiNWMoA79SX63m+mo5MrpJ2xuqcU9MHGp1LiCm0echC8TdqBhxXhF\nYL8+CC58CC5oErjZpOBkgaO1ufjJaWBQnxPAd+8xr6c/vZASITjxJSV7Y1g0gXHZ\nkoO2GlSlpEjtNi1YedJcHNLdhpiKaxJzfSFK8W7LHnFsnIqzCyLdx3rdZbTP4bNZ\n2E7qA5snWeQsfSENZi5XTUN+Ep6zCRwY21EpOjhuXIrNW6M+DTSP60iHqDShYxtp\nvVSaC31IrlWACmjSDKPUT7I2yxSAQkI1/9eLUsn9GqkjP2GzJzz8pngEjnNAxyO2\ngclNtK+xS4DrPFtPG47tkSuPdlvxjWskFTiWGDIGi1xxHI/Y+8jy9d364avq6ycq\nyBWS/3D2UW/s4p9bgjLtJMs3flF1KLdo/ahdHrFXAl0P5s3/xxDRI9Iox63aWncJ\neTXYDEvE5oGRGXcR+C1aWGHHlKT6bCmnaI90jZHXkfcOqOs5k3J+aWHnxzcznzxw\n3eVvvpdkgOv9Rt7j4Kw1MTk7zWQXHHLJL1uxCYqlx/7lIS0uP6mNW5GY1voJXDFS\nc5U3dDyfhJX9FlIMW1HdPwfcEZdsyFN6Jk7bX9yS7WHcXF+OC2RrhpE2q2f+1mKs\nPJifn3XBGvInfA5Tr+VMrM2uuzsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNjs2XGTx9VAnsQ2\nGmJzi5DZVvO+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMD9jflNQGzOr7qcR3fo68HafsIzjcemP3yj158lEDVQr\nKgQD2cBNgwi1RhYiEAVKpF6G8omVcsOjt8sf2QpxeS4Ij51yoSCEYRnOA8sjd6Ci\nE10cM9L5qoBcPXlgctOFajoR2KEKE9C+mOjN17OzNjj6XiRP8ptAlX8mX/1TDs6N\n/aqRrze05WdHx0xV1SmQc8vPLwhlyFg1d+PbXkemzkPyIi5oXLIb6rb+0k4Br/s6\nXuUrQvjv1Hq6HBem+yM3SaMToebcGos1zmnDlmgpqZ76iCf734V5DexvudkzrKxK\nqLlIiX0f18LPNdtznEu9UmbNKbYhM9Ae/718+kYvbHfU0wGJ2dqTCF1dhuQ0gnxO\nY9RKiwGuH3+2Evx6saYVg7HimLCC0rH4jyQJDeoW5ec4ZYi4SnoaM5t7uo/tH3wj\nS1SnzW4S5teM7QVOlzJZNudSEOB1igbapyixBMGR43OBA/J1EoMJwBjDNNQp2Jb4\n/u2nZ6BUmwRJJyo9Wkuvr9OZaxv9OClsVveUZzFhsCqyaGL0MC+yxzthSpG2gs3Y\nGoWNYGKpwTLD3KzIDNFIl9SJn+dPgdfVb21ZL8MAEZO3bevkEc4ZbXrzLvhpAwwh\n/BdXNSSXn2jc7Lyg1MZ4TCZ/1rNQq4D/a34XOXXBKlQbsq+RICEjVlxHMJPSm9k=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 18b1af70b93f991972f362556a9a3fbf4bb24e0d\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaPFuOy2OT7EmgAAAAABozANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyMloXDTI0MTIyMDIxNDkyMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0xOEIxQUY3MEI5M0Y5OTE5NzJGMzYyNTU2QTlBM0ZCRjRCQjI0\nRTBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq0u4Iuwn+AbQ+55z\nI85V3WMTwBjRmNbq9KiHTxJQZrC/HV7aKKo1qEG1ElhQRMMb45FI+4Xl+Rbu7EWX\njkW735UbQX9ltO5Zj4m47jNU92zIh6tGVjOXiL1xKlxrjeEa2EpIQUa1ALJIcXmK\nxxJzv9EisRfTauuCR9td5sS40xfzC/supDBv4VtVNLaDlwyG9GOXae9XsSQRQyXx\nXRzt78NIHGdwCB8/0vNewl+xwLW/H4dqOGBIv5pOIqtMUThT+hEffsB94MT/rZkh\nNMmjDRZdj170kYeMppcmqZyYd5z/aEfXy3RxUqfvkVeKmaO62XaSm49lNwnscMtn\nhQJBmr9gnUOvgIppxhOHyQ5teyfl8U1Qmdw+3GRdItsDkovxzTwkPuOVX+/q0mkW\nmNxbUJW4CyaLivaSzL8lw1s/lHaz6TWKKYqYbOF88hKyq0dyQ5IPcZM3Ll4L4Z1a\nhRgkWVblEXC9gwIRgrC1KBjhTS/rfOvnDKLP7XosVC6VCV5CMD8RkrMWR+rqSUNY\n+XzZ6voYzebXGrVis/pRBZ2wc14iiGi4lcWFSzYMW37sJYSV3BWFpb93DuJtJOq9\nyTPFG7WIBRsXYaxHBYTSQzzSEprkYXdWYdWWrwx1r2BGwt0NiaV/DatrWVeTrpIN\nb4I9gHHE0rVvqZR4fbU74gtuL+cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHpbiYVgjZA6Z0DF\nHhXYieUiRTeaMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAcnmn7fc6yfO7tWxEOI/9bsVAACNe9l4BPQX6SCJqsyyW\ni8nNnO6W8VNrQIEYBqM6CAvlE/P9HDUrnspR7s/uPlBK1GnNLMQ4BLcbEVlTHk8p\n29C5u0MsNypoxTH2DuyyM4K/Zqqz9uBfsNkSGEVkQ4LPqtmV5Xkw+a+HrE5E9OmG\nuX8puW+590i1C+3azDAdi0UjBiD6V/ArcLArCU4bix6eQJyJsACeQwN4sa0AiPNR\nsRRSq24A4Ez0kwms/jceAxyrKeb9QU0bYlE2AkNlYv1+NV9+vOtKsj/cyMRmr1od\nCmA0fG9rJRNKHf3pDYOSGeHrmX6ZUGA1tE/TZozlDZFyzt7F1iVqfYVZ26WWf9XR\nfwUlPrxbVhVuGHGumWDJLjS/eFteHLnebtIdQHoyJ1C8kpbFDmWIJK2qllzVkYUK\nDKOmrsTo4j83TMZcT++3jUeZfKUD4gJ0aH3ALkXwmsCJk20eMSKbtkz5Ebg8C7Vl\ntk7Gh5WQggyZstVLOSRcYgWOY2fgTLK1mnQ0M5lVMYWdSLJGmQz5ii0nwCUTUt6Q\njwfWB+Dn5ev6t3DeuBP/PS8BZFAP7uLYmpwDuIA8iHcuZdbJNTiei09Gx8Yiv9Mi\nGWAG4lH4qbd50ZJ+SIR3mYqBglBMojFrj2MsSvEnhUQ4Uvh915um7HZdnTiRq58=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 263b744d85412bae6e13e94a53c235185ba4eeec 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfbKD6Tu+yy59QAAAAAB9jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzN1oXDTI1MDIwNjIxMzAzN1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yNjNCNzQ0RDg1NDEyQkFFNkUxM0U5NEE1M0MyMzUxODVCQTRF\nRUVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1U72dto4YWE0nEza\nomkNXUrx8bnmq3CImPpM83U40bGibs3lSsZb4HNv0gzmTECv2ctxQ8d4kvXbvqkr\nVAuoIuYyiurBgoRUvZcza0iATei8Z+7mIVYUtjNAQeulZHXKlB3vPdZqL591oljT\n9CuOPY2rNYarc7U70tUkbUok0ikOSmobJ1X0mFSfl3Fxi3a/dwe2u2DFxMaqrg0f\nJF78n9/aEmljoDCMex60DiaEWMQjAYR1pHdy3ngeHTZDejQUzrM/9iCnJpX1j7Th\nsozW+YBdOU/xcttRWLnUz7rQLO8sGAEJxLbp1Zz8bcVdoCXzwCzZYCSZbwjcxUdz\ntUK4a2Ns1/Q6a7n08SXqq19eZeUBZOx1E3GOXB6/mlw6h6SHjxQ3wRirZvwt46Zj\nvBTa3jNRvC0k7C8V0lv8sxyOqkFQwlM1V5PaCL2OTrhbq5GBxW6pa8x803sgBpj6\nPzRBHXLyGOy1By2I3SNGoOFUOEZ9Ub5H+bUTkqcCwOdIkKUF/VhXvsTkC5ccv96+\nSarhAw/SW9yBUSTo9EXblCuVBf2+P8u9rZReitUwW0Mk+Atll84ME2N03fnXMg1w\nwYz2VF995C/erKYW+vAmi5SDhrRCvgLRYbc2YO+fCjh+6I7Mhdi1DFGdNBFZGRDL\nW6j0OpMXF70Lh+V5ovnmYgPALccCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPpu38S/uRS1CPQ5\nPa3UjZLbOZCYMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAUa5wgjWZ/+WM0jadLHW5MgpVs46Nbv0dsipR89NMNsxi\nwToO5EcB6OdkWXxo8xRVip6YN7kPtjonryrfRosBL0Bh0p9glZF8+Fm3pEPoAs7A\nOQ7JkPCWq8kZ3Zp3uiCmqpH8cyxY0HU2bA73DwVZ7vbI69/ScU3CK0Hgp++92ZQb\ndZbm1JR/OgOXs7WqLxumTyTSL08/DoofPincB9WuUtanxTL4/Byux0Y5ZATpQh43\n390+CSytLFKeV/MwmoDjGnBFaiOxY2HTp/rIwMpVQRxVvHTIrYTpa+XkbW9CFXXW\nRNWBP5whbmNgf+bsmPxr4uHh/VmtTkeJgW79Zfl/1K2myJkbYoiXbpxbmNAkcBFp\nZKNidr13ARdBzQ79VgzfqFwXqmJKuAPqs2QgOrKRC9D71s1xlfeSAuFOHzrVxk8q\n9c4LlGR/dpIBxPPzVPJtaFUOrAZoazDX2OhTy2ui6ifQUSiK41K7DhM1yRStxFh8\nUYEyhHeYAruuf0CWlle7jWR4X3Gv5wtWtbR4tjbeuPh6jGqD80gOSpEiAL0wl2um\n0VVOFFgD6oza8T/vQ2p2b7JkQ/izWuJbSUaqxEUw2E8cmu3FN9XdIqT7Ee80VFv0\ncO/ZE6PdJYhnaKDbmcPSz60M/38WKQ/If0o/UDNlSS66wSi4fmnQOYWnGIg2rOs=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 29fe69630e853a4cd3575f84392a9bed2d7e8ca2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfMxvZgZaII34AAAAAAB8zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzNFoXDTI1MDIwNjIxMzAzNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yOUZFNjk2MzBFODUzQTRDRDM1NzVGODQzOTJBOUJFRDJEN0U4\nQ0EyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA15yGmoeTP30fCK4A\nXqCRbt4I/kbpvoowjFEDPiTxuKzG0Ke4hvKxkyDgefGGyeW2B/cmCMBvzjz1bfdo\nIBdeJH13r93TAkMK8IVaA9NM6sLHNW+2M5ZosGZdSFwjAF9H9NEF6dgZgW4tT38u\nkYcz2RbenzYvSK/EMTDLFJKMsaePcgYiJuQTTKcuL18IneSDZ5dOB8tgenpZrzED\nhpqCXUQBtfpEvorAI2LSJAyLYY7h9zIMbznksI2ZMJwpxMO/XpNKbWerYeXxYrpF\n65qUn+iMdsgKQMsZsng6fv7DrcbxBqv7SOVTIpbr3vq5Iln3npo5sC0axiLJ5Plh\ntN2mbE7Eh6wpsV6emDvnQ2UZwJPisRMY95x8Vn5MkyzckwOM0vKaauP7AzuRT/8W\nYn8QzZgHyO9uCKrhruQ5QaYEI4d5RQk6KYX386nIo0Jw8C3owUt4dTY/et05j5ZZ\nAD0qHj2GsglbI/uxF33RIQwV2GlI8iI2PLSW2m2lxZK+1s+PzUaTLC7KVuErbYj6\n5p1a11MIYqhyE6mo1IEC2OQWnzMhZqQZEG3Q/pAFB5wGz45jR9OEE5TZC4m8xj7w\nIKDL2rhEvnD/YHGa1YOV/f9wDVI6ksvbMvIHk493DSP3epmcAPlxXIYEb3VaQjkD\nGK2gzitcmZa2AhMu23CFRqLNukkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDfDI1nsX7eKPuAA\n60cK4AQ6MA2bMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAa5GBvM/WLAly0pfDgFyXi/RE5IJvoihtScvxf/kmbJOg\nqdDg0Wz29ZkltVn58vWUO/RLNnXUAn1ToxUaiujMFaLc0z0+5oCLlHgVqI0QMDmU\nw35vMEdB0lszA5KrzBXWNEMnullW0qP6eHQZEiMUBYeuUGbbjtFmCgJ1wLOn8dbF\nW51CoGV2NhGUeOpMIuEKr6Nk+bpQQeK77j4TK2K7NN13SMISi8DpndBL5NA6L6Is\nPXnOus7Eia+96mdv6ZFV/SCL0XvYATMwDyIhQcCZKpyN9tlAU0Lf1rgxdSDjnz/8\nSGNnu6F+PL+UNtIjvMScFvfRUFTm3gGsMBSAKKnPqlDf3MS/DK2J2Wc2YieUfxfv\nPTsi2vrEaA6XY/cub69oc7o5jolK49aTxZL1F8G8SQv08ieWgv97C8gQ+ESCd7FY\nD3PNo/QsnBXH/hJ5aqKJVkOYnebdZPFPI02VYMLVXoTukEIolTOWuXoEwD8VuiKZ\niLa0ogfAznjDS8QrWFHlNtkJ7UgS3wzSFn89/+rVI0sLdRntQqgH1AMILPq2xZmp\nESUFmF0TOU8KgVQQdWzJxuh/oJ/Y5TczfVbmoebfUODTxtlDGMqDquWwr64fieK6\nnHMfd77ifuyWIE6hAZSOIEgG8V2P+PN88BeYvFGHNuEQ2gSUdoThxykGC6jUwe4=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 2a77a0e342cbc6c72ee3fafc3b0a7bcea7c9ce4e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaBzNlNpRzzL6QAAAAABoDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyMFoXDTI0MTIyMDIxNDkyMFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yQTc3QTBFMzQyQ0JDNkM3MkVFM0ZBRkMzQjBBN0JDRUE3QzlD\nRTRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4700ljyZ4aG5T+LX\n38bQkpNzrX3WHcazukuXRsBtwBYEHRb2h0Gk/k2KgS1TYyoOIo2xgoOs+hNYbVzR\n9wCzy4M2eeBbT2eAZi4VBxFZF0JQ5z7KCNp4e6ob1cFccYzWVOWOayMf3nd8BplA\nh4YkqPLPYHF/CK/qYFrklBQW0JY54TxPaqvidWkGJN9YzWB05G9hI96Ygv9EHwq3\nFKd8P46daWQP0gQnIO9P6MtQ0ngxEo7CkXNPlTS4Q0T4zQGUPSNZ2p2B0x+bUH9e\nil+LP1xUeOQMf9FtkzXVG377WV47SsG3JE8H7+yEwgx6i1pwtRq+2pQJOa+Ffx65\nCbqMERNh/9IZbU6/chjNS5OjzbzytddgPCW1oP9VAkQHUfsvL1VA8KkijGk1DUBP\n3Sq42Z1d5VxHyIl9LaUP8XDpnilkBqry2us4h2sWL/EdNP848zrc0cPUVUBpsGkV\n2AvEVFzuH4nmEEUJGES0F+XT1JOf+G1MQbSD9w0lAVmNrdYwYrhCKaO1e3jRoerR\nH8wlr7X0XWlyCVe8Mv1NJCjd6IjXJPwdqlHe5BcmdPA7FLkwKEj87w0LNzaoHrg7\nZFcpuV8TXfw9lND3c3SZpRH1QwEJQz2JcmZ1bSlfCNpCX9KC8ZzJP+HwA3ovGeiQ\nIjDu+8bPQKj4xZ6PhCsX9UHgAa0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAtZtpddPVeKspOQ\nWvSCE3s10wAJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAHbwuS4n2JO8a4Pr13Uz0Y9sWIRvb99whcbHJpntMX58A\nT/SGk0mPfiYfLJh1vqCL3X1zhXtzgwYrKzEF6S0m89gWses/BotOWfXOybak0u/E\nOifO0PzlDEIrTPiwGirmIigeSeF+1gZ1Psilom3Ljy7IdHCjya0xOb3I6iwdg2rW\nSIIyxgvs0BXrw0hWJFwevqGYXdbFbwSAytBhgLS6iabAK8tYN0jM0ZwvqkcJOF0z\nO1VJ1nvBrOC0ZoPT5zyWVro+WnCmJIPW9xTj0v4J285yRQgE+jp6S5gEdquTIKpw\nARuOIxZwQ8sgmLBU8ylHbqNnmmWughqAvrdUxnDemPZaX/YJNIqBislSbXYDXl9C\nyZYqgeF4yc95pvNNWDrawYB5XLCQbtNBm8RBiOcnee55AdVBQCFBMUEWd3rc0sF+\noJy32W4WFfDWZiql6+gQkPg0v1wEo8n8sFeFMKclydIL1mg5XZ17IxHh7rxX6Qj8\nZqOrAn0GH9N1+bFn1kRHt7eaFz6T+e+/nv4KPr+5fm+ee84yY0EEJLQCH5Zph7vA\nTrWu6ASN/rlmFfwl+sgvPLMIDAFlhLSd8FkMdBsNq5lE7rh3fKvstbeMeE20eXYq\nKePW+wk/Xkrx74EM9dEzi/3qHmOZt+xHZ7a9ogv22bg/qLfIi46kzhHBEIJ+oUQ=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 2f572bbadec4d18e0d91ff4375fb468c61b8c7af\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaEdKvySpIZKXQAAAAABoTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyMVoXDTI0MTIyMDIxNDkyMVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0yRjU3MkJCQURFQzREMThFMEQ5MUZGNDM3NUZCNDY4QzYxQjhD\nN0FGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2MXrp/RIDvNFRHri\n3P0+Q0waDra1AI5/QNJet9igeJnSY7Xi+zhCwv+Dg/D+4G6CrGMF2f/wWfUNnUPR\nwlCOoD104sN3UHnwELDnGyL6V7ATVHB9q6MR4+edHp6WRvcN7vxbMw0nMhW+xeMO\na5YoitA1072FGH+rjeDaq/B08XnHq/rcMVKmElH42SWwriLizpcJjTcHRR5/HDDL\n/IafIRxS4/gn51m2Z/SH3J3kyLAunCGuKTC0zKHskl2RYNxEJrCD5vgcG0p3XEOF\nW5k1zJniXWT2u9QsnC8Q7bTunAkjluR0Wpc2T3NXJ9rJZRZ99TI5sWSmxUwEIk4g\nHqMheSFPMSRdGWp3ysvS4GmSZuykpnkO0hJrO0YXBJ9AZRTZlb1jJ/xk5oC9WtKy\nFANdQDnpGmJMwTzGwNFCi0P2ni9+vCUIq4azLZBBeBLeK4EWevrjvy7bP0/NjNPg\nHXDQOWBZajY0HCTBJATJ3YdTZb5CKrcWkYdknNIchkZcuYqcnyk0OU1b/aBTnaad\nwRMV/GPTPOfzRw09I5fUIRUOu6aFZHnC7owfkPEwTBF/N8qG9LOQkLPLadyCgMMF\n6W89cwxotkTBg7R9I4zQSj1yNFFy3aB36A2/teRpN8nMb0Hcyf8kb0CpedZcubrw\nRTeCebaOvqhhYeqiFv32rtLQAe0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMi0nJtzJ4FXhImu\n3hyqVEwr5GlBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAIaOnBmK1DYMdj8UQHo67IeFwcnFZ/a73Pk48hgtu8XEO\nFsPrCcegBz53Kutb8wn1MQVed2lIURK6ckcj1zdCQ+3qybM2DaD/avcujfzGw1E1\nF0kFro5eIqMdssW70ZjBsinfBIsCLVMQ21ZzIHtABustbFQnqTo4Gfd/TuvkGQiT\nEBKHOBaJP2ikOK7iQ4HayC89kdN84m8KSNAha+yZj9Mv0YoE7TiCCQh87qvZboX0\no0E3URnv8iODljZxxm14FScUU9t2XXkhVLg2jBI0sdCUolVTl0t5YOvKv1f52tAB\n5as+2JlOhQJD2avsefX9UkEhr2p/Owejj5i+SU/NYSdmbRlbtCLI1wj8MvOsEO6s\n6US2brXq5L3MqPfW0C45AsQQRkAtt99yhY0m3cm+HBnWb3uvPxPBRJkHPEIKot7A\nGsvNtXEzZIqCyIQ/sZ8fZZoVJE62B+OlADWKVI0VJ4KsInUpgI0vRLBj2l9xTFgP\nRBk0yjWPsisKiAgTfJUEU09LJStEZvgYr2MBHvpdSyR9FNLoDMjy8BpRnn0yvFbQ\n54eJatOC0SxvWcgC4I4SrRof969DU78ZtBsTp0onkh/YMnodzCaEvrD+9WlBK8Ck\n5a0k3GzLySUH2VW8Qmsmnp1eX7JA2TV2PQmj02tG75NyHPmI3vPXV40B19zCMZo=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 347c93cabded6168c61fdc8740a7353e46751616\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaR4vSB+2Rda8gAAAAABpDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyM1oXDTI0MTIyMDIxNDkyM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0zNDdDOTNDQUJERUQ2MTY4QzYxRkRDODc0MEE3MzUzRTQ2NzUx\nNjE2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA45ULxri2B6MLO+1s\nqJn1WtiOuj1DDkfAjdZGZqhchDzFwG1lgSAEDQFrIMZArrGj2T6MwuqY/nz8cCW0\nnj1Rq1stDTySDFoQx6cU+ViTuQBneb7Cx08jF9Y0emTxYimrbFU6Z+cXEEl1dgQ7\nyB3Fv2RhDZfz0MjBvEc3oT92B1sp6a2+ALM1Qj7BMbglGdAuJK0BTtiE8Navkzzd\nh3o5Wk91mUhTn1SpNHH4QwLk685i0prrN0prSYSYZPQMye9jnyzK6o3ndQWkZm1e\nfRM7YlaVH99QRA9Af8pBZGRJRVzYZPXETk69IEMBAO7/MQFB8lr+nh4ZKkIGwXsu\nNISrtfsN7isKhi7ITHRhnmkvNf/IsYfPDzZ/DKoSzUGZrlLUlsfhw95JFc8Tmo/L\n2hiW+h9mg0jS4N/OFuVWl9uOdoaX5WfJEkSJ4sE0gP2GaORWdoEYqcboQzLJ6yDM\nD2utuMQd32x7zx7JQtPlHnkwu49CAI8v+m/SlINgyJ+adyGRawpHaUFRtpMU27Wn\n0bu9gA1KiHkJ3aLKZj2x33aJzVGRyVaUedRLEp4EGyK3x/uPZPFvNoRtFOmRnRDl\nv49EDnQ0Ra9GJabz2F684pad9+HyItsdqUgpI6Lw5T198YgrnXAdoAZCZqTXUPQP\nu4+OgMh+xbnlHwxUi6PMl5grWKsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOPCezgyV9Y7cig6\n4tct2pmaiH/pMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMi/gZScbOZMD0FSuHKoEpiEFXbgwatc1b6nchzhrCQcA\nhlQgbrLnG3MI90Fz77RSO5hs2pZF/CSz3BKZYOOu/48cQfH8SwM8pHyvor8mhYlW\nlm8fKjaz+0vNh4H4mmN74LWH+dBXVRSuYlmjBIUomf5ieU1szHr5OHwXE38eCEau\nRTpRchcWjpGKbSakcW0HknYJCIk8jAj8siTpFQP6gTK6JpjhS3Y5KJBvqKnMsPMn\nY7Sr8tGUcpC/wZYpJEL9HXVJc6oFj0BilJyXOBZ4PFiFNml4sdatnTBL49+WtBfb\nDm1uR7H67WjqUfSJNwasyataFkdloMWJM6PaWP0gahD+OuRZ8Q66XlBbqJroDwC3\nEUg9WyZpWx4ch8UK2H3ephkf3Cp/SAm3lkNj/H69/xku84zw/3O8WlM/C7KctpMS\nGaNJqb6eMkzydymIJpG1B0ihUt36dWxlYFZxlKAgEvzoG7yf2siWKkwrSd4g0Kyv\n11xTMrNdlO2d3fjzDCsrcs7cbsu1EWfVk5IlVWcwZi9UoXveZ20HbWopspC9x0j6\n6qi/JZMxfvXZT3nzEtdTnkxuKv8hs1/zvsQyrUukwawXN3Hhu+N2wNoeCLIVWd89\nFppt/54B/TSB1YItSZ73dPUp4kahvjggPr0arQX5bGNr8ytKqXLiqIcg6oSj6Tc=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYXSVhiSoZasRwAAAAABhTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDkyMDIwMDk1OFoXDTI0MDkyMDIwMDk1OFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB\nOEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp3A2WODP4Lq6L8F3\nN16pT7Q9j/rNW94/hWxXkN5ldxA96DFAneXaBf5RCPdks4fT7danLcO/i7Lc8LXf\nuE/tYZ75Em5YFPrO33tXB8HcRJlmoLOO0NQ4GfAV5HQfrR0EJpdUO/7/ijg0bjpn\nr65OpHXV6op7i/W7kcwg7rRZP2dLV2vFCE/v7lUQ0R1WyRDYy68Rx5spiI5AxqXH\nspZqia2707SiWu3COK2MGEvLowxGqYvyAMzTGyCvbezvWzznkyYpn6+g7wHrRw2J\nfwAbS3JEr0thk2Kc75TLLxqnoXBNw+G5H/TY9zNWqSM7j1IZHefQyDdqrXLUABmE\nHfCqCU3dQ0WWBCVBSSCV4rqASOgH1lVnfnU3UlMRTZ4EUpFjszhygUob1nodR0eJ\nwIJ6ss4DxpngwO2FGuxyvTqEnhIGd41fm4M3YJ9MOquAfHRHmo8SGxbiE85puH2v\n7Nj/dGXEFD5wb2V4pAX7OVBlcGGlnrJBhAzRWBU4rxccKCx+cE6USTD0mD4qMdK9\nRmBvD1b+KjKrCN9Qz95mzrBqk/esg1t7Pw3YUD0fPSVJzkxy88H1yAaOzvmZXEJs\n5wfiVtJZlRQxdalhwP1rk89+NNDy8I1baLtWig3+v1lXvUXxrjql9RB7C9x5R6Nd\nZbbYXTX9kg/bs6sERPdaa7cUQrcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJzxZiC1DJZ0i1Qw\n/Eow07Ae7fDgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnJxKephjyrbKv7WarTXNuV3yK8AOiSg9aIDaS86chJGX\n7D4dQAzdwvVZmVNy9uAwBVRD55RXNGRf9hSqzAMsbuutXQtGjoOBaSh0xWwcDV2X\nb/rF8gj8VBXWEemuGZpr9N1lSVXjM6NRPf6/oyMT1Bhzwk5DvcEJ5kWH2WUpYfrc\nNMLllq707JEX6lWZvkD5nFFPsBPuQ+lfcLafq6U7uA2DWONuk5vqdww8X9fBw2xf\nOgGhqP2IhYxgIxoem9G1SS/IbD7X8qg2k8hUWMxC1sysm5ZyXT/w4x1/CEbgsd8g\n15Z7ISMuMRhsHvvVPnC1sp0mOPBKTT02Pb3Ia9PUEEJUko6Mr1hhJ1FUF2uH8bTg\nd2w2/qeTfYAmCwEgAildVJUoCUtvT2/RetHft8bSJz2ydRiogs5IBqIuMcbQGOlJ\n2aZxl28/2n1n63rrTHrPsSUaexQMXCsRqF+O6qOfxFsE7+IZDK5+6vDwdHq7xi4S\nMM1o/jhe6rvvdg4QfFy+eNDoe1VQSwveXqEWCNXlKUDqkDVOH4DoCcPbRS+hyXda\nWjPCJYBMmd36NXV0GJhatHQ/M+XScSdxGNVPMzcYrVI6lSKwSwrdxdQ4xZJd3faH\noXi55ml+YCI7uljRz0s1CxATs7fPHCw/P8gSU8dk+Uk4la6G3tQlB66ggT7HhFA=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAkreM5bPd3V3LgAAAAACSjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyOFoXDTI1MDMyMTIwMjkyOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB\nOEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAslVWYnkGudNtbSKy\n50GB/+5m4ZJKZJltoqGaLFD+FWPMdkqnnbbbkakHmUmOWwAkDyEe+9/dUhaKJAyY\n5B6ku5PKpCXgVZVM3HSU/FIznAhv/O+LxNxWVdASVI+nrs2T5kRZRB7bix12s47T\nmGIGI2KtGywyJzW8wvBgCOWBuASYxmYQwUq+5jHwfAhiTX9xeWMiRcGk+iyDxs2d\n1sLBQExVWBwmUEnQ6GFgijISYFCk2XKvINgu+dFt3QwuWj+nQx9owlrnWW4e7Ajc\nFN3bbpo+gIICatUKKcK/UNT76hgh+nnb3jXVwt6oarX+aTvOwUZLgWeAe/9Rg85j\nPBJoyo3oFuD1KjuaD7gOpfAYsQb0ivnZ02l9xEQPzo2Xhwko0EESsjsFh+FoF+Vb\nhOtTQQMP3tZswxYo2OZQdktVYJ/rqvklDLl7pYlfO8ySEGwEiGrFr82WcXjVpkx8\nZiB+5iFjJGJwOJtg8Ff9V5/jgaJBmwO53sNW/LB88S4fviRod1SSgh22bOdKgcBR\nKB8rwm1a00F1jGEjYCNZRdv9Se7BhPDNnJaiS0oGFB1M3IPH5S3YHNs5JcxAhyma\nK5ySiDZiw3Sm7O6rmd5G2yg2tZABC6O8fXxm4YtAXYzO8P07rd8rJup8cjt0vuMA\nng7rerD+v3dQtdGT56KX/fKwsLMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFA2iXy5zU0abaoS7\n8bfMjv6EbLbBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAZMZIamP6pwJAAb2YRY6FEda0NY1xidKgZoDPb3SuTYOw\ndv8A4O+t7EWop+iRx9KdOcAa5gkVupglbuDhSBZQ1x8hvuWN+4r/gWg77TDtOdh5\n3o09/JxO/2a5xa8z3T/IzpJE/ZKeIKM2EkTvCm075ZX2cy5QCVEpJkWgF4FdozVk\n9+pNDTE4n8Hp5nW3iDBlanYQ7TIfQV5aglJ8HEiDdwafascNZt7GpgAT9ADqQj58\ndXYNp0RAYaRZHIECi2+JpoY5+xg2dyPnciCREK/5Q9TUiW4HDqhiGnJz09+MSHmV\n5+pKfgoRYsqx1zl3CxcGQ7EKzEgKr1L8MxErPN6Pxuozl6XPD2aefUkwUBplHuLZ\nbKy3VZFcktoWa+eu94TqXFqMFpO0WBN4QICEh6KHEQt8intTEPnuAaofW2jv2sue\nZMKKr8HGC1TGrCGHrKjD0smYNj8zjx/V4Wz+zDeLJNreUHIib+TpSebcHBtBWD92\nYEDbCyd5niTeG+Ssq7bO6XLUSipemB3bI8GWlcNIXMtYE3v3oDwRjzO1ViLdgFTM\nN2cQVt62MgAlCb7kYMQz6RqF1uKm1RTaBs8hFURzgBYZbAvq+Z29sX1D/RxLDGAu\n7RrTQg2/6OU1/mumv9cYQB0wDDshrQ96tbFqPDpPO4z9wMCJvCsS3eZ5auMqkgk=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 40b8682b8d18450a2b06849d9b5cd96f4cddf4be 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfURImtVOAjr7QAAAAAB9TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzNloXDTI1MDIwNjIxMzAzNlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC00MEI4NjgyQjhEMTg0NTBBMkIwNjg0OUQ5QjVDRDk2RjRDRERG\nNEJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsdhIcdy5JpkYygdh\nC1fzaeq7RnNCrFdCx/za6kDxq9bYZ4+xEIwwPDzuCAGiHUpN5x5ZtFGTT7TyF65b\nQVyBCxrmAp0Qlt9f5LkfjB2kaCtvziMXsxUwQHbhopIVXvmTFlHQrpPGhEaYPHPu\nDWxpMUFtlUD+jQpP15uIxsGGklBMRVmp5D2DTFEtn5Wk7m5+d2WtoSOeGidjnAjR\nUdP/MziYp2rP1q08/TkQCcFFFqy8FonGLKPK1O2FCMwmL+8IBeY+M/QYpF4ku4SA\nee/b1cGhC3ji3XzamBvhWCBgVXpaln4uyKjlYVVtXV2OiIwS+XFII7weseHmtq4D\n3dqF0b/9yH0m2zuKmLTFHTauHRUap/m3P+RCpP1hW9/58WZjk6B3YlfvWml/mh+O\n4zbNz2DNpgpqEJpT3x4s12W4mZbTrTIVVXwuDUHPVOEuNSSErfhp5ppbRevb+OLQ\nMr/lSPk2EyrnuyVI7H/uhkZUo9WbAHQA3QJT7BOyX+bVt4Bk5UDo232hXkg7vJEH\nhhegUXmxLiTLcjLCgU79Qfp2MlImQLbrLrLROQwKtVNVaNz0DrYO+VDhARfWcAN9\ncSnpLqS05wqTtL3bwznca7qLb9hSMkY+u3mDC7j/xpaD/dayIpvuKFrUfZbsNxnc\nKKzEi0/Qd6aFrPko2n+9La4CcDUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHTM+OQNreEdZGls\nWQNjBMXls43JMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAKZ3SPY7IuXiP0HVjthngLdS9WSUu1lwOHiqyfbuujQ/U\nnVwnzxb70XKIyum0wlh0hJ0wa51eoWNMKhBlIvrzBcF1BfISWWgmlceTrgfnfVg1\n2XZGGF68j5TYc0PDx8quonhvcPCbxB/peCis0hdHUJ+8TKW9in72aSKAlQnZAtyD\nw9Mu7LnZRr8HYg7KL2FfCg2W56/cOjsI6cylajAxlemV9zYKn8pr90qh3ZiuQKjK\n3VOeNqIbwJ8WltPgtCUcAZfmxRBHttt/O/YN/oYColNpxOOb3mbJJ74V2xkR49FH\nlMUhhI9ljVQ+wzjeEoXCKI6RT1E9c2VOm0IMifPYIDDMo+6bEvyCCgZsr9z4ms6T\n/+UP6pDCCUZZU5jyxH/mJ2h+NClUsO12GtYMZ4P+//5NM0PzryCVESabNSesBDMj\nEPMCYyb8GfxXDcmn1KPLzU6wH5l2PavK11NR41s06nATKFVi1SaF9BXZUeBHNdeb\nEFykOb9MKKbcBn9DtWSc+oCE9MnGKzreZoQFSG/Oa5rskD2nL1YsXu0/7BHlyBqQ\nnKJefzi9E5rnlKTKeN8SYHSHQICUXmYOs3m8O8xngeRaPUfPKgPW3ongTCAFXbPE\n7MVaN/Ttg0gPRRvkJEABQvNVEnjG3wA978yfsqqI+fdspbqFW3F1clqTJ9TvabE=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 46f26f96330691e561b72f7a63dce3a0517039fb\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZILimNEnRi3DQAAAAABkjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxNFoXDTI0MTIwNzIxMTcxNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC00NkYyNkY5NjMzMDY5MUU1NjFCNzJGN0E2M0RDRTNBMDUxNzAz\nOUZCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAumC5DOsN0yDpnMm+\nkDpwgFbxSVlWe9vtBrRS8oSL5Od9SPrXB1ytARj2rzwU/61QoCemaGN92lGqCmmj\nyrP/mQAFwT4jrRvsA09M3X2ZNn+VzOSEgItp9sC62cNM9Z4m7mnz0VLIftJBDYUe\nFJyuH5yT+ciTxdFwus6/ROUQ0HSB3OlhC7wAGIbXdOHDTXs7q/Jvpt1cSG9i7lgM\ne1BDa+kMmJYtOKYjRrhRIr6YsR+477INPQebHEthcPLqpBP3UdJRxXp+WiUjjO5V\n+5gckpXK7dfE7gX3TqZimPqhqHZUEBDby8mtcisoy3m/SIQqh9QYtANeAp97N0iR\n7o4fdavqN2giV7SsIXSJLsZJjpF0w2X7skq5jfVboKsul8Xd2jG4wz4cpWI7GZx6\nuOApDppvB3rY+h+WGRZLIWXu+VLC9zIcoktZTavPhO+YTouMBeMvs909+KyEE/yt\nfqUK5j9YOVunYvq6JvjYbh71jUZxvLCDODhm8ShtLxKNb7oS7lu/1rLIpRJvx3d6\nOLivSnZlgxv0uS/YVxUvxLjC51hn8ERxobicyH48bBMnw+fD3Etx5NqERFmqKhr5\nOY073oczWoUmIO2b/Z61cyYSjw2T2byKSLoYaj1Di4zUfQfsLWtSXr2d4hWb4gSx\nlHRHV5dIqmp3niFpb0h0ZBh/GkcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL4geF51UemUpXWU\nyCkWtI3d6vDCMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAljO/miWmaM4Qvy/URLWyzH6YMillDfhmjAG/77hFWYgr\nD/dDwdKiWZblv/8g+2cnO/xi5K0d0DaAltfBMs+E7krR43JYxDnWdW8CHQNCr4+q\npDeB1YuIU3XB4wDhpqUVAMkj7YuhDx+7DaoqIW+25eaaUssmy2OFc9hPyXp3xB88\n3jgYCHRCqmO4P3bBhrVWrTD29oFMw8beVnLCqnJO+qfZXgREdQWzn8+/rylUkte7\n6KeGHV4pSQ0NPMYIj9UeGoRsbaMP6QvIW2UugIL9qbOClmGMjwCkvKViOWzycdXl\nJTCwozYu5nEmVndZjDUtIbsFL6EDO/nbgYtt/am23ysEMOFbqGG0iTZ/I6IsCA3O\njjypLI7WCZDH6KLSHvTLu4NDoK9WWXzYuM29RITVY2awuZLpbGjFczuov847ZUjk\nEjOR2FVw8fx1CExEht90wO0dipK7OMktfwpcE0SQmKurqeD1SIWcpcAmDflRF+w0\nEVTLEH16hxRVwarklgYxXntbMqpj8yKTj/rE5PK/991lGU71ACn8CQb5bZs0AHNg\n6Kg8N7PvGTX8ae+SsD/XO9ofip/fsdo9+Y4IPu8tB6m8Ayx06BA+/gyM1bAECGGi\n03WPGpRVhbsWRknZf/c0F1Z1k2f3xjSpdXcqbMw1OV0HlO5xo8rF9wtFgPrh5sI=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 5c2920742179bc704db1d8c54c34ca94405617ca 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfEbgc2APojrBwAAAAAB8TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzM1oXDTI1MDIwNjIxMzAzM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC01QzI5MjA3NDIxNzlCQzcwNERCMUQ4QzU0QzM0Q0E5NDQwNTYx\nN0NBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5w2QBmImh2cLWHaq\nnehf+IRlE6QdaXTHfuveUiPve3s7qvO8xp1GZVHgXDrHthngTk1NgMZIgANvBUNK\nmx4zKGo0vF8m7o9RpmwcaFTYMtK1qxHTi5BxKY7KqMt61m6KUFJlZo8l9UTzAHoH\nIjyn556x1pGYAa6SyyaUzVvfL7go21XYsLi3Bkw68IDUba45Cd2fZqC53zd5tPz+\nzSV0+LbpsoPEKuqvSzbiQmGKWaDq074MPxu3c/3sX83/2fxvZyTLCkaDWaXb1Vo2\nT4EabC4u9WBZUCcbLUclw8g4Ka4vFKaDJJRYmidz+Wf//gBraAXSvmhcZ3yUemZZ\n4aO8nuGNow5LCwjhFDLqosuJ504llagrgVBLROsRhuIwNXpwVIzbN4afoayyD1N0\np7mIK2/p2rK7cH6zZ6JvFrOQ3jTQwGloPCnkPCfmqcfmWpLdOWYjNMku321WfZLY\nS4BCexAVtYb3OMinuHdbqGuVjvmqKxP8pnP9Vc2yz9DpLNXlRzza3wowu3vEYaZY\niRmhAGVq7Y5Y8WlLHv82Q9+/RNBxwXK8rPdc1vM12xtLLG8uruWOEI5sVHAeNN2T\n3DoG0NjU8xABHWfl9NuIX9GTaRTVdSfyrsUk82vuAg0Ms6UYjhKaoL612e4pU6kl\noiTu+DEe2a5vrj+cyHTnoZS0L0kCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFF7buRqoYLuSeldZ\nVSNjcbz3G4UuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAibJ+VgZza7M/EMrP3AdDsaEFIK0pgGobYyUP5jO4C80R\n0o7NMJ5S+Z+S4mePrNzbHWC4zAXrQ4ydwCPyTe2lg3i3yfQDhB6mfuokrsQuzS0B\nas5xVWPDzN2JNB4jJVC+Pt3iE9uKOXdf5snbDxixXeS0qDFZZ8iPs+wjQpJlowBd\nf/1CQZ1qjMCAvSw73YN199UOS4xk/PothLrTLJ0FoNp6TS+Tdun7ujWnuUVjiaqK\nMiyUxY8eyd4eHVwBXzjyOctCZibIOKSARA0bDat6RjTWAcTsAlQ133r+aLlyQvqg\nnJUgY/tZKwAc0Y8a+sEPpEROIVTedE9OG+XmOGn75rve7TUL5FhogcOO3Cgl81k7\nOcPegvYXXG3aHfpLY63ylcOld2eu42jwAEG0V7CJR8h6s7TOjApGkSB532nMH6t6\nbLXB/opXcdBo9RDHUSYyChlfYA6on2G2o75BwAl9HvgsffHw0P7qeOoZ5/ssz2al\nfTnXr2BfEMIXYyCEosEzDvIW8ytz4zKccgjikJzKcagzOrNWBZl9KvHzXSp5oPLH\nWY4WLWGPqWgx4/r6aPBHz9ps2F3x4tJoB9nP/YF8PwedLdvIBITRnat5b6vH6OQ5\n9Rwu6SSwj/fhcKQFwHU7vmHBRsaX7jWtfFAnaDJNA7Mw7OInNcOys7R0n8gbtUc=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 5d0815951f5f60638a69e7252f3ec4becd7554b2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZF8TrMaFhE1XgAAAAABkTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxM1oXDTI0MTIwNzIxMTcxM1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC01RDA4MTU5NTFGNUY2MDYzOEE2OUU3MjUyRjNFQzRCRUNENzU1\nNEIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt34Q7TaV+emAL0mc\nz7kFIUKl8bQV1bJ7s/qF3dcdS/ijRrLPEC5i6Ltv0L4LHNDqsH+Ed0GfRx5rWGfZ\njAnafF7dlQ6yivWVnb7sWcXIIfolBxcWOvt9s036HaJQobMMLExTjjAhEyjkd5xw\nixZYzpY1QZbkS0QjL1KWQhPjrE7KQg6nvBR/oAbe7vyc/cYl3MicSUg33OGrlK3m\nlyE9yF2YL4b+gtNp3zaz+LFYupLurW7yI1XAsYg+SNJHNDLqETWsbF7sdWJiUyDU\nfxEufScm5qpBixU5GwNRygjrhBu6z2o8gnOQsUfxtBhQLpwI6RGWm0jX7Dlo4Wlb\nX2dHueubGHRgxftTTjnoP5p/3fGsImZLdlfx/u27uC6nx1uGliMuIyvue9flgYuI\nuFsL/tvE0R0kTGB+2ZKDjJ6m2hSm0yvNPq1lskuUrRPFklZxeR9bJNtX3ekZptty\nQudkYvuJoo08EsQRhX5RJ8oYMZ6mQJ7/1HWXNem/+QsYn06tGZE4NJwMtMow+uXD\nzkXkgtpy7PGfB9bQvlBpAx4o5I73JDBpRztuyD8aixsgQzuXmtZ/iPGy6vtkpo1w\nSsrY/fcF+RBE13Uy0Ne9P0CwFe0xc9ii5BfZF2CTDce0Zd+mExzHZ/sBAt4PkDWB\nulOCqnDGZyMgYFahQBOa5vMDM+ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPYm8ihg4JMPGxSR\nJoc9YvNERILSMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAnA5D2OEYA6yKi3C4/Wvk3Ea4gwS13HDsRSEML12nRWYk\nQ/IlC6mgCT9lHU2XFQq9IQPimNBXneX09b1xLDo4Pjiuk77Rl82PcC3oO1goucry\n4JBEXx9ZzDOpLE3eph+h0xFLge/91AyAMPEy0nuNON6Vo/PtIwC1QQSfAU7ljXxD\nKfq3SHi0TID/jZ1wxuC2b2rw4iAxhcTdNIXYMC16PnnZN7FNL7qdUVfZ9ymNrm94\nBxBuWV5/3cRaadhNP9sw2CbJIQVaO7bDPWsfYCCQf4HOH3zIdBNOo/i8VMzExpmE\nv74kKH0b2h1PEYvvxXxZ30/6lZ/StHMRfhJl4ds+TQKuNOpvTbUyd4p+73LWNMcY\nJflJVhCwH0zUVC3T+0VjAjA0qwyLL/qUk874zz2sspwFAYLDJLoj4n/EqhgHa3qZ\nNm6vQbqXLb1upyGFqwwBtLm0xI4bs7dzfs2FNQvVQbahd4yL0KYOUI/P7oxNULSY\nDhA+7uwko/25dpCTv4IXMr22GrNXEkF0/rAKZHbHq4ku0VKwSO3kTDb80Dyc98mT\nHz1BDoMUqFjcjaiwC8bCZUEIKYPCzIv0/X7zqBCY6yuKhJm8+/KAPk3+scau8QD6\nN9ke7mHYdC1O9D/Hx/yF55MIczR/Bx20CX35FcL+kMZlU5Opde+TXLDrCpiesZU=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 69146ac3cfb3665c7ae78101cca5c14255ca2bc8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfi1t0klvplC1QAAAAAB+DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzOFoXDTI1MDIwNjIxMzAzOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC02OTE0NkFDM0NGQjM2NjVDN0FFNzgxMDFDQ0E1QzE0MjU1Q0Ey\nQkM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv27xC+OhQesZJXoZ\nrEaf0QZs5sk3Q5v0qMH7tju3qPUJXs3S6VZLrJ/Y9mFp0wPo1k6g1TWSJ5OzNklS\nV9K8QhnJSDQ/XLjsBJ8DWXFQQy1A7xtdo4Wk8iWzybupJ8wTmHmdQ0SQHFeXldsu\nlA3nEMNzVr7nDKwYzio9bcbHpeWyjVXjmb5Va+8Poqqjx+Fw/pT/YEYMASPBWoSe\n45L5tcMbjlX9KelHe0wVXvwzT+miBbX3+9hSLcWC7Vx1nSy2V13th3QAgSIXAMM0\nLnMvr49MzHQ9G9Pmf5t5MZIkVrq67UB5PDladKwSFp67smaNLOFCv35lHrt2w5Aa\nkbsG778AVCgYHXG2vlY8vKOIJh8HeQmmrtxoE/45jeciIF1Tvy2rVxDi+lsRKdv9\nquY82B3wFPeF2a7AOSuCzKve1hA6cVst1p06Go5Yehkzgx4HVeYAgh0shY/2D473\n7Gpw0Y0NqLbKEXrGfv8wVfAd7T4A4gqhqmRWLcSPcsWAWbB0aQ7n0plViTrSfs3H\nE5XvZBwtJQqYZWBNndaSolSswxgdcCacEyoI29/1xvUJ+iY86+S7YtA4YghQbWOb\naqIzzR2HQMvxod1xckb+qCdVJhEiqP/qaM+Cla2sJiGVeQ8VgyeuUgJQ1fD5K7PA\nztxf8rkPdCSLccVG5DCghdrY/U8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD2BBmWuBGNpFiHJ\n/riZ9tr5aGXsMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAIyOZyocD1SLNrTUeRlKU+/gq1TM04ZADeBpyhNSGp88b\ngRMJ6nX7GxVndmx2lrj7c0S7R/pwhzzVQgNvthJ1rwauh3LKVxlVx2L9NrjDWL6a\nwdsCydc5qDgFR5J8OeuQwe/lHYe3xvmUvGLyWvhCywZ1UT3vE5+Ed6wbGBeNlbV2\nYbhhUCRxAD81gJ8ETtXenLzEp2I+4cTsJsnam2LdZTwkGOm/vdAaVA8Jjfa9eGxY\n14/kACBLdAXRIMnP4DCxOG1THfudx9BfnEBIOGSDm87Pjk4UEQoZPMEzgUjIlhwP\nKlrUfsIG7bsjwzdoF2zQ/VPEBot/Xy9VQyAeSYTWnOA77qcAFO+sLWQk2wb3hlGD\n4JnjVeSKJWGcC6e5HqyC5Bb+KXzYEhJTwF1QT10LziLCIVHr/2skEN0CzYGeHDVF\n6oe18mt3heTs6rCIU9BMss2LqigoQIjd9qavUNQKMTZRInNSRxe590DJ64O47Hiq\n+nNFoK4mCsCjL7BGvMuIWFsXHAgqzu+q9PeF4cPCqDKwms4BbCW3xWtHM1dzyCQB\neS0ZTkW9+VhX7jjNvZgMlgKblkVJpJKDTTaB87PlmQvuvyQ7RUfxzK23YYAqI6EI\nUprY0LyNGVgx9ZlBB6qf/I5hJMIbjf+PLWbfTV3ZnAVGvcrNmoDf9HplxgBt7KI=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 7cb4b78e688614be4421c5858f15b96d5eab51ee\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaINbH8COolecwAAAAABojANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyMloXDTI0MTIyMDIxNDkyMlowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC03Q0I0Qjc4RTY4ODYxNEJFNDQyMUM1ODU4RjE1Qjk2RDVFQUI1\nMUVFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAu7h3RX/rsvj9UQbN\nlt3VieMtf6JqZIaObA8ntkGAkBbwgrd9rdJZgcG3uwCm+TKFQ3Sdrroaqo6BN4fJ\nl5Sug2cRISNKiWBoABAfTF8o258/lSyBU5h3jO7/UzrgZFxzExbhhWovLh2PDLXI\nsdeiLBq96TC6gC36GW+vY3bB+F8ZXYskAxhv1VXb093oRnmZYohXLv3sDu1sng4e\nXfW6yJeUz044UIrtBm6la3hih4MWN+hD3jbkoWn9pwqbLRnurM9asI4SJKjWoIjU\n2HEtJEqUhCyewIfZdWBvsJNpMuQk2hRztNk4ffedwXzDF24omZgJguCy8DC41XXW\nYdxKR4VLBnFbJj0vV5kcvnZaaqfol5oNr9fW//4du+hlJXTOnYoT0nuRJoaz21SN\nPWSTdhui5473YLyV4EpGf44JfF8gl/klN0DiMudkyvKKiGhFt6GiRiPBIju4Wu+3\niA2yMxhbKGhq9owU4f5U45ln68sry9qC1MYBuQmcVdeJB9bLiUBrqaTbQ0ckLqVo\nlSEauf2Zcn3oNs6r4p4CYOlXYXNiIKYhm7Gr/pOVBxMtU+nc2rdmNQNMCVzf8FGl\nD9O0kqBmquy2xv88ubsxiodBwbvepif2TJGHQduFMylh+wcle+uP6H6d5fuK7IiN\nfg7LrNVGuh3DjUh29WuBmws8J/sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPyws8Ll/6Tjvn/2\nqK477mGY0d1uMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEABezkoiFYkObjLLaKfykjdhgU1HKMgunaxk1GZY64kD96\nuALgMZzydetDSPHhJPCBOjNLkto4FHN9qOQJHLTQ2cGfClmP4vo9mCBJy8gourwz\nP+WgdBuEknYazBVHdS58G1/WsHDolzvryksh13YRnLvafNymGv2Wy0b7PebWYNpl\nuN0QCiNbt1Sgw/I4s8FrVTZ5/Gc/KWmwIaPIrQ5zjFS1qjOKqrzkHsmQZpdmIDA9\nxrTmf158JdiUNTogwv+8xoJeo4JBstKR7ZKG4debMIIirP99SZRGFng7cAAuDJjt\nu7PWNJDh4IUi22SP5CjhvHbOwcBm0uR69eb/hs05H7eEM0dh7lKAGXtRljcvu9+x\nyqA0b0VV/Jk3Kmkpa9/3kZ6U2envPuEBRkVws9wPg1qGzZEq+AMujfhY2lXF9qmI\nOdo22CO0ywMt0d+5yi6sBJazCFOJ6s7cxR9HOjpT4JzPR61/n6930WshZAkDuCNB\nutqPNxqAi9XFSdsezd7BFnN/Br6aj8cTL1PDU7VLmNy5OzY912tdCCgN7Eyyqv1+\nuRlAB5fmO7E5fQlvpTYqRieOCYvpnWEiDsMotINe73VvUGDKM17+qUYgvYkysm2Q\nEIdQRdyPdV8WcOSYeHm9UKHaj4FDHjBCen/Voi9pLH6nvYLmCwnxNSOP6EmMT0Y=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 8343bac2129d78299c4b513cc3de61037bfcc955\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaUp9C8wcOlKngAAAAABpTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyNFoXDTI0MTIyMDIxNDkyNFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC04MzQzQkFDMjEyOUQ3ODI5OUM0QjUxM0NDM0RFNjEwMzdCRkND\nOTU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsZVe88753AUM4cRf\nKGZs7C6t/vo/AHXJaWDjtTOh9k5PD4B6PywkmlVWfpEsJVZtyeHmD9lMtuiYvn6J\nATPPXiI1pmD00Sog6idBHyEHX/8gYVtSmxbQA4P2G3i6g6MlDEkMol1e7LwHSqfA\n7z773cYroiw/pzHzgghVNxjR4bW7Y6dUYgUKJv1KTv0Rm2tlI5zULKylDIRvrtQ6\nQZGp5ZhpMMBNFFqObv6NdAmGW8/PWEQl999ZLs8pXJTAlDlB21485mAa3R0hpm3h\nR0UCqVXt2EtTViKYv2ZRTfMWiyP/F0iqk+qLkby87ZqJgVYXLCYAa+vjz8np28Mu\nGxG3iXgSIvSvVE923Ekg0r1MuUWyFURvqeA+KXGNSnupPD+Yq/FxJa/UkIcNEUG1\nHgOtr7ZR6sQjyRpTWCdTR3LEjY84mPKbpGheuvrhg4un+WJOQi31P08J4OK+PaxM\nOB/wKqVE5NK27u45P0XJ/riVAV6bZKITDKj5QlQpwBTIjex0m5vu2JofH7A+zsPY\nroX6jvghA6kGRAz2yYiFX7ehCGPR6AiUn7q00FKNskEf7SSrcXxIdXiCKqVjgE6Y\nWUL2o0vDqGJZGcsFYhOn+gz1vf+8jEDMYPTR9jnQ2ARts10NFCctF/DQiwJPlNHq\nAhspZZbPo+BYUu1965mAlHsQgl0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFF7s6x8dB5PdMiNl\nnixgjsEPD2qeMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADL+ilY9+8002dJ7cLDYV2yf/Ql/6HXh5/03wNxlusBM0\n56PNImTT57jxYzqU+rVQveijkTGWrr/GGjrcDfVHzx9haZDyoeRRdKDOH5UUOM/6\n9KNBZgeyeUuLNR3Uq6XYWD0NJvaaODuRlmPOQ1akTAZhog7IeUJMw0rZUhZqA3yT\ni4j9XjR6tj2iEbdhbmNXKWtuFkA3XmsiZzKZObSlad5ypapzOJdfv2e+TZObsmY7\nRvzrmBUvU5BP+0DENy2+H7lVxFBwIFLJ+ty0GolBTLwFGg4nfrbeNwxKKTV97/Ux\nHau53uZcOY3YTY+DbjC8VlQoc8Ob68G03btaErChAggbxML4ZZaIor3PuQIKc1iy\nV6w5zqSE/weSMxzIL9DTJnnOCPZfy3SGmZ+KR3MULcCgXZw/j/2x74jwn3dAHY5b\nuLl47TtkO/EeYtLmF+j3xDBiMitrG/u1iiEKE3oyzc2jNdQ7XC8bInJA2ftpYPcM\nDHE9Pib1CQnB5KJBf4JgxGU37DegCIimh1C9cd4kL3p5kkysxtZk+jL1MxuuOqWm\nVj3thxRFeXsMjDb3yzoaqDxYuIa2UuT6+ruygf/x2BwUhZr5Ter4LalOdLhaJIaD\nziGkINcB0ms+vPuWxjANKzgAPCeQ+IWUyPD50UqLgQ7PCqA/Bu5DR20vwdc4Rm8=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYSnW3VLBWa63gAAAAABhDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDkyMDIwMDk1N1oXDTI0MDkyMDIwMDk1N1owQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE\nNzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmdv8mISEof9Ba2IZ\nxycotwOXtORcy6CwID67sNeg1/6NRoFuq1Z7Ti8ciZKvJygGGwTn8wDB/Bsh0i9X\nWtUtH1lZxz/P6/dSoHhYIvM8cEwRPmwSCOxczS111oqDq48QIIXSDB1wbwP2xlI0\n99OMnx5ia05iIA5QT5jV3aBOrNSqW2T5KyVgcs7J/AViJoDfrusg+0/MOEXBpEhw\nY4NltgvLMYTAUg/jvn1tIzBPOQhygiCiGkH0oQ7QwOsmG4q/+qry+kD0iJ1pCw2s\nix4xxRdH9APrBGXWSrD6yd3hKo0oOf6zvHUHebrfjxUH+qcEs6rz06iB1/zQk5Nq\nUt/uInvbiYitlUZ1nuMRmysLMgvNWcyvnzN0/R7iZl+1Q7rf5QzFiTvrZwdkHMtQ\n6Q9V1qrRDk5DutXosgXqUUxWG1f6PaHj+4XRIJRqpdQtAYK6TDNrMNZMMS9Q5sON\n+dg+2MRRZt+6W2nVGqJNRoIZiYkA5F2B+zHXQY4DVt5CdBbYXPxIhppRYMoFuWcG\n4Gv1x2uBSDuueW19DJTnx9x+yN673bBUfiKyItWxuMLtClIlCCmCgFDz9kWvfDaZ\n0kdJhYmlt58wnP7oJScdMBIDXJcFyuqqvQX06r0agF/mgUdsb4KlAye07pLxkgVI\nAsR+PrNs1j60giPRJVG4WTICwdkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1BUp2LiT1AKVLX\nSH8lHfxlYyHqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEN6UhqgyUO22Pxg0qN7j0jnwh5zcII/8QwyeSjnRujDk\n8PWyE7k2tq5h2d5aB36HvuYBS4OexWU1PzdKp+Vd3zbNOyazEEmhLqABbP/0lgG5\nAn2mp+2DWGZdyFprxLMG8TNIjBeNcZd404m5AaVRc2BhVOaIW2URkuxwy8t/ASuB\nF1BAQ/3VEy161xNfQrcD889Bzh/IDiITeAKDpSiYuDHeaE+smnpf6U/B31FLNiqR\nsq2exD+U79Tq0NVPqi0R4fxbbrRH6vYEQAQHMZypxGvmlCF6N6PczARg5i/+XUjz\nDTvh7CjQfRSZGjf+OZg4oz8uNNzZcb6M+7pYY8QoXS5ngFkeJOb7AKAn6ppzdcx1\neeKaCswtj1/IYIjjel4EDHD5YqpbOfJmvw/Ywas+CiGp4HitGMW2WKsuGmatLJJM\nTwX2yXDINjvt1525Vsmgwkf7pwA7MiXc01FsbmYD6VemXEkrB4roJm5CWdd0SMoF\nmJ0wfqXhJPB9NIPXx7SCaxJpg4B00s0Ky7nzIj4uMNihIwlH7pqtx/fmdXhVFwRo\n00KhZ8/IuN3vD5+djSRHZFPpIJAM/xIdoa4bMfY5KmzaVaSsENoZOb+haHl3RUvf\nCHSw+nuvQLHCyghsT4ANF4cB3zpN4Siflq3cpkfBx0h1WFPUfQ2zwqqqT6IhuuI=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAklQ+rhJgQedegAAAAACSTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMjkyOFoXDTI1MDMyMTIwMjkyOFowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE\nNzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuFcxIh5MQGn3YKPc\nKmrPuhfiwp9ZZdlRdxFKvO4nKjluwvod3I67/1XUMMwV3qdYI76WOghlfHc0cnlO\njDUNzo2UbInQYa+EthS5lS5g2UotMSPHZFhI8LWbaEmJ8WgmAYPAGuE5ikhk9w21\nzDlzbNPTr+8NzpXg3noL8kNJX2aG/oeD5auTDyv8zyJVrQdEmQDN9JtWMRZ48wN5\n450fMzeMXrLcNQjaQ89X+/SOIB1p3sKFisy8LcvvPP3pIGHm3n5nIN4WFpOQEPBB\nDcPzjCihZLruWBraubZZbkCpFn4DbE1733SDOjWYLfZA3z7nO+Y/lfwK5v7oHGds\n47DDaP05ZI8lN3aNx0K37p0PUoYbgz7ocRXG1HlotvzpDPLTA0icmm19QxS4lNPO\naVC1VlzLqqg/NYF4Xx31wfUUIF3cNtnow6REp7oRyIM7C1BgBjJxYp4FCCcsmwDl\nCxuqiBG8pzCNPbDhrz6H3qEo3QnuNDNl9Vhvp+rku8WSSZVbLZvannvn0BNo5QeP\nJuCLtpVWDprNj2ecPByM2P60iDC9LWrypAlsgQFuLT48MwTSexRjMJ8+5WZmtDDm\nnesb6yVv+36qzy7vTaqFmt/gJUXNmhEj2Ek38MxburRQHwFXuC8zucwn8pt9LSCV\nkCKP8yHQf/HW+eMmVy933s6N+1ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOUEJAlAz+cSmpmt\nI2hYWxILKaU+MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAWcuLUGXNf/A0+Gus0pkRw3ZYacKO6eQPdDdj0lsYWhKi\nNgLxEsCsDu7KhDYtSjlNPH6kKGv1Fdg0y2ubp9Kd5IKaMmANrf+jk6i2fKoB5Eld\njXKAUxqJbenprwUDj6NXV5sipQOxfoIFeZqc+kbcb3lKKCpCZHojJIyArodwkICk\nyvLxh6QQ8ZF8LfVP9er0iXUp7KHoPz7t16RyQGpGPxxjKLaD7GeMGvdHlZtmw+I3\n5gnFGH8kULg4YrtXK6FcT29q9dcZnspGqN+qMDa5W3OpIK9UrGEonT1OPDNXMGbS\ns28admAO7azz1atqMQ8ZcQdXmG6YUCBGgBahpk5Mh005aulH5usGziNiwc//Vo/u\n5Tfw+mF8xzrFx54StItHmb7uctHArIo54ByK52hxWGTMMWYWROvvhlSbuzBCQsvL\ntUfV0CLPrvFhSuPTOBIhhlTC8Dk9f/2mlx4rDTOBuTa5cILKZzKw1BhZM5WhVcG+\nk1IQkm+auwYvy2Df+Pq2qB99xBg+OUFlcT1pXxO+i2uiMmP8pasjwI8Qy+Hr6wig\nprceUUtlX5dLDmCrx0wVYufPmJmEx4Stq13NFO3oTzuBaeBrHfFQEaocUibc+s9u\nxnVQDjXLW85Yx/702X0PduY5jDje8dsf/CPNKvKo1DzO/j5VAI6ycseZZHYYwME=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid a26ceeac95fa33673219d0c2a77637102fb53ff2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAabSvtnbtqsCOAAAAAABpjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyNVoXDTI0MTIyMDIxNDkyNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1BMjZDRUVBQzk1RkEzMzY3MzIxOUQwQzJBNzc2MzcxMDJGQjUz\nRkYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsxRFoSZDxlWw0LJa\nA5ZMW/0ZqevWiBpWHvHoPGVC+imFKzWR4VBBQYrE++O3ZjVJkS54z0bVHc0JOcdY\nacEj6YYJByJWNiL/xFZQ+a7V+/Q1a7LOFYcCOvzM6rtaPCOFTZOShpztn/j57jI4\nyZ60uGAJiBz7MK+ORWpkq+2yWanQYHVAUqEFyXv1OqW9hZeb/z5gOZ39Om86ai0q\nahCJKXkmILYnk76i3UFwK49BuJj9rZdA3J+f872DSpS7GxT5MmMv0dczwZjpnIyM\nb0cuns2UPC0fpo8tnJxxAT4P/1A8PQNzBHaQtLDmHAL0bMQmWxaEvgweiNdzxc3Y\n3RC4RryZ/SRJo6A9ibZLWRYcNCQFtutH0TMHQRVsX7/9CH1LnftwICpax0Kot2/l\nf/3SF6BmocBlD24RrSNWZ1MqxMalK/6jRFzagRR88qiU/vhRoBs4cl5vsZADtCEW\n3/g6YAfJ2LSNM9Vr7yiyZkQ1IB4dPOXdIMjTBdv9l+swEjsuFCAMIvXN5QG2uzeu\nihdk8fl+xzy3mIsP+6w6jfj3l+zOXXftjJU83fjYKrK9LDwilfBh8Vr6WKkzcbCu\nIoH104oFs+tuDqMDCjZre0n71yGMOc1NBjnOc6cMTv94pEHyvMChoKCdY2QrReIw\nwQHYIW02ggFBxeVhRZRoiMqtKKECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGYbJZwej6B6vX2X\nfsm/PyGzuSE/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAM6tOfJBfi9u04IsQ3QO09DWOR57/BmO7+7koIW0LT7h1\n7sRPGDa/xGXUkeXhEhHo1rP5bbkr5/t1UkitBR6jqISuI57WKSIcuiPOvFtfuh3J\nI2yqa1yTH9jyRuxbxqD64zsAg3WLKkc7PfKrcQRnp8K9Jn0aWFn3CQXs+Um3ewns\nV36PkA7BO2yo/FrMHqb9pmNp8z1BkRk8/4aQl6FPx0OMCtPGBhJY1F60F/a7LkGK\nEL4EEXrozUkpYxO3fVsk7y5AC8aFR4P7v9Gzssld/DWgZq1pLp6kXZmx4V4OqOn3\nI6vlWv8soGoB7xuaH4axaonIcSfBBB8YH6kTi8p8NUFnCuyCHR31rW7JTIoBv1h6\nldKtb9kg7aecAXnR6C3L5MIeUYTPuJBs+s3rnfWkv0JxtvKP6XCqfh5AovsPwWvl\noKjrey2Lgcob8du5FjBlaMwMzpCZlUVq+Nqil6EwctJCs9fLPZlEPuN4DZTf6gnm\n/5BYFV3k3LOnS1KbgGUi2YkYdasLhthVw74RuNQlvxWy/wa5NDxbvd413bhlDCH9\nl4SDGLN4RwV+ihWYANPQ3FvAc7YzxTVsQFtU+/WRCUPTHc6HtFNnVGFcXplhIVu8\ny5R3DdkFksBQG/k30qhc7Bc2A1Edp+kLxnLKFXPc3+tBnADL4veGHTU9mb1mkcA=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid c2ef641c329cb0a9f2eae04bfb10c99b89c34614 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAfm/v4xgdMUBbgAAAAAB+TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAzOVoXDTI1MDIwNjIxMzAzOVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1DMkVGNjQxQzMyOUNCMEE5RjJFQUUwNEJGQjEwQzk5Qjg5QzM0\nNjE0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2SiJyoJZOAwuofvb\nXJmsrqht2QBHEVbgm4O26dGnyJ/C1rvsEd2kfc2qFBOwYBD10OU7volt8LpyQW1s\nElvGwvC+kACn+NBIQKNIMLipWyZZyXFe/EVo5XLvWrZhuJtH1ACgDAkgoZGFrYxL\n4OmeCdEcwMUzYsl5nykzxBZWwrI8TbgG7EbWWdG/MOd42W0psEayxW0vCF7x11CO\nTFXcOjD3n+cviMp/V9VAi6tIHgbBsxcINgqZiksB1h3pFarjJcS+JEePYPZRQkho\n+QcC+1R1G9UUs5jUW8tMjAxoH58/DkSg8Bx5ECGIPiWU3GhorlCegqRuhGKicWCb\nyirsJmtFSiiPbxGoz/FRzIQKRcL7WTeZyquLpcKK2e1BqeT96D+SKmnpYwH8XTVL\n0nmJDP6gKlqVn6/Ilzftek9SNsILHA3gt9WZYCvIQqy0gatdEFwSuc519lpB2xMU\n8t/8CMixTvJTkTmSqXb5jY8WlqYP4f0zM+z/CGEdy6KBCBhKIKpOQGDVu1E1n1c8\ntgjZ1sCM3GyKrBSafJjqfvpEyAnE30HJ1CkJDBkEAx83u2YDwHqGRIqBOqJJCkoO\nvnyngg6sS8Q2zXPXvb8fNNlj2iZUkO0nODvt0WZ4hFHSHL1I49Nrq2z+RbyFL1Bk\nA07gr0xUt8JaHCkmV8g51e9BaH8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJayZvkwcTtN+Ut1\nSFaPNMNOpH3IMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAfHvWlRgcM/jvApqUnlBQROjwmj1Ggb5Iwq5JGeeQOSTj\npkakExWh6OB3JWQGfiNjKoIrNGX78VURYiHBz3j3fofQZdpQlPb1svkeg93+6t8B\nKLRq/GvMufCpypSHA5KrF5M3qvSm+XXXbLWF3cZFtzs3StEYP3RZ/kPRo4dCrAD2\nbdv29aZmcsjVjWmogyO3XIlvKo2vtU7BMsJQ/X2GgMr+dFai9btlIEY38tyaEPOR\navIAfwPQO+F/oIqMFJ6IzMRxop5zAuPPv3cnl//SfJFnuqLgyuzSTwIQwlG14qSB\n7SfiHA7XqB3y6g98RHgyh99ocKJ+0kt+BuF15YQrqbrzeNXISrA4lFKAzM5SuJXl\nKKktIX7WE72GpmwMgQRpeu3dlTWnTjY64CCw8XgIaMOXgBkYJO2YM2h639Z1A4aq\nn9Y8iKNC6V7PsXDBvk2p9OANcqGf/CwTLDZ+hLcg+HufyYng7e3DCJnE0WQLClcI\n8P6BbkylcVbN/kJbfj2w0H14r4WIlExZAvipFj18YkhsoB+qlUtlHKyh2N8lff26\nHo62eDbxvsM79LcFBj3kn0A3rxR39Z73F8NO8GSxpXkxkjHqzdPjBGKQysMyAKaM\nUPRZdeWYJtmXgaLRbszWHNFbTqc8AEP2nXKuses5eNi9Z2UmSd8YJSdZESjeajc=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid ce77153b6e110ca4ae2971a09851ef499326202a\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAac2kP2yiGEFCwAAAAABpzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyNVoXDTI0MTIyMDIxNDkyNVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1DRTc3MTUzQjZFMTEwQ0E0QUUyOTcxQTA5ODUxRUY0OTkzMjYy\nMDJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Lh11ARCKHnKBrlM\npcVPZmlFUSuR5S3ef+drR17CicsdQPK3+WQCiMKtMI60vW17bWRfl0L8Ut3suxxR\nfmBMNc2YJmCOPAeHuO+3QJmPyWmaJz81JUEI/HsONPVAQPANOo3ex5MuIPmdklFu\nqQ7A8OmxViJC40kh8GgrVq843yQbnEgPa37IUu/6yMhuG3aVLhHAyKuugA9MyhrY\nEPQQ5Mdc+s/F722d9/JcyIYIu8JBo1S7x1C8P//vy71bNiq/KD4/LuWVOA57vqIj\nl44W/tciNUbuZCxIIghX/rYlFUPMJr5HeOPeuLRWfrPZI6nXkniU0PApst5wpXAS\nJjo/07LIPT2999s7vCQoaut1IJ4Fi66pVkbqbs1s6c9Ocx5g/I7OiZzZWK7ixygp\nCT0MAm0tz3RezUD8EvThTpypfMJ1DlGPNQ4upbI7urjgC6/NmhvZmb0TAsyhvl3H\nKwAEAn6ujFyNgY6mz0CrkiXTf6JTE/tBC/hKUUO+mr57y1il4z5VMhdSj2X/Vmfh\nn40j5jW+3DbaZ+cRD0mdtuq8/WihQDuZoOWnOrvLRvdMlMHZ4blM73qdRn6QvvSi\nhwwrLD6pY9lKDG/mQ0U0O3Gk+FkK2NEBxRyGRUyoL1Tw5nqlxIH2A4AngdrFcG9e\nG9W+FqCTwMUtpZJygjPaRhUgyKMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHd4yC2BwvtWKpTF\nRpUI86Ed1kT4MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAPNA5xCLNB3pJ4b8yY4XwVqL6XVlFbPJDu/1GJF0uQeWn\n6f+dXkiOSuq4g+R0243Ehd2ye31PWYOdgFfAZwiNfzL4ebWrEAZeVWwAPDe6Es80\nSeE7eA8VApF7ZApy0ohetEtPuajajDVgGB8If7HtdEvfiBVETV30QJKsuccdj1h1\n9nWo+OWwOCbWMaDF9U21bwAiv4xAW8scFwkomTQszQq5hMt7je/1jRgG4sGXtSDQ\nofr35T+vd7IpuQMalD7Vl0juG3uyVvtkcE9azq3s9MnDNx3MmmEXN293Lqt7D74M\nxOMY0wQ344bYdok5OTYU6R1jZwSuo4qqlpRp8AP1TpEGls56vzL4aX0gcglI9f2d\nQwzGea1O95jiINfEMsWFJ7hWLRjDfVJ2w2b9d1bNzr4eYkdq37AEvAa/NW+aCNBS\n33TrgcvrDhrNo9470lQNbJIq3b3aRtN/SgxSJlyrfSI53uBKv9DrBw0H8bqkl3ps\nU7boBdsVa+xQJ+SXPbBJlW36VpBlp55BpwxW8oqQT5s81CarDrOlaNAz7gsosKC1\n/dplsLePh4IEJ1kdoI33Tbj26N7WxNUW/RhofABDEpN4K2vSry2+0n05XC07ceIX\nh2HyodvyuHBxlwx1XtfiTUK8410/cKqPCeT0dicTlQt2OJzpB3RWNIFcgvi+v9U=\n-----END CERTIFICATE-----\n\n\nNCU ifx keyid d8a3f556085a68c8aa5d5fe079bcc6e9c6d37764 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAftrS1/q8wvU8wAAAAAB+zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0MVoXDTI1MDIwNjIxMzA0MVowQTE/MD0GA1UEAxM2TkNV\nLUlGWC1LRVlJRC1EOEEzRjU1NjA4NUE2OEM4QUE1RDVGRTA3OUJDQzZFOUM2RDM3\nNzY0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApavI2Kejp6LIUTdt\nIwNl6ruIi+dRHuzgpixIbhi27R0tbXJzkyK6/TlgOB632qwaAW50jetcxz4JBNRu\n4GDYmZ9JRPoErmDl1DaCDIpk/+pA5LAl2skRGrzitV2HJz+rommVGpMXhP1HXTfN\nwRkL5GaSUJQT8gA9eUC6NIErSRKvK2kWBdnJitP1ip4JTp+QRogtoehq73CoGYtd\nEwppH4+yvimWhe7IkgV0J0P2aOUbe+t8bDFc+8QaeiQUYHp7JsD7tGrusAFJjPWS\nsSMlNAAsnbWrbH9u/5cdiWmSLPEomNwYjhDuuVBeo3ToLSWcQPPkTcZOxuyvHTDa\nAiwD7eWe8qMJNti0PmZ25d0sPUe44KSgEs6xUd3cYPdtl0XgwLft1lSi+nzZFHzA\nq9I/EgQRG2jPWHXNacKnBvbZNQAUzXNLrK/dyTK7Fv0uuBH3NYXYL0E31dkCg9s1\nF2ynbHm/tu+dJkeBr7C/9gdtHzc6bZ7y2K1diceZcnBUYt2LTDN6ZXH8DXaBZOQZ\nkLT3WpUBspp1uRZsmpL5JV2nL7ifWHhisKS92w4fBWXO3UROT52RZN5xMDqLj6t6\nRQ2vDO64cQCslOo3mNNf6Q6SmeZs9RC2/VOjsbHZCxpy1T7M6ZwjN3tLBvqVjZJy\naQ20M+weyzWyJwoedvZ/BmaY4kECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMBYZyW5Gic4ziZL\nFaTtfS2dwOXJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAX+Z6vuypja0Uv5BrO1+2Ai2gPCUSyotK/smOiNOCfelq\nfBfxcxl6KnME3V8UQJa6TyHUzHxvJ9Wh/SbwuyQ/CO+8y38vYmPrXtbt+0GpIBlJ\nsk13Bji8/xDRHeW7xFop5t+7b1TwZGf6gOdB2EIhVhuTChNHnFQtvP+m+HhLgbVd\nIPo+KBXpvGBm3LODgaI1h3qMhCldSc9s3OabqD/Rg6GePQrRgE/qf6EGeT3MYpj0\ntfs/kpeTQPOlmislZQsPnB0Ne+OgP4KRd/8GohSUcrod7YOfW3a+crB2zfYlF3aX\nByQTxyXw3WhbSOVd26XMWarxOimDqgs5DVSU8lHmFbz+zfK6QYziwFCgGnzcmg9n\nDYoXz3/PtcN+k/9Kx1CwceGk/Zv4QJdHBPr21+ty6E7IRBxrGaRc3hKmmqBVGGDZ\nEn0en/Ivo1KCnWBrAbpJYtfbRdJcb2yscgCYxelMgHuAZKiXwmr6YZo8ZH3qs/8Y\nAIolKHvKC14d1ZyjC+7v8FxJdfVHBLd52REcdd92LOgIA0uXwlivxFkKUnW/vSZG\nbZrnjwTIcMe685rP+ch5JH9TDP91eC8B36NTSMqIhuYDZk4C2juVAVDf0+yYEugL\nLOWtDF5kFU6wVMpF7GUw+4WC3HJonshjOE1W50fB0T9OJWmeubm1DF50Sl+WMn4=\n-----END CERTIFICATE-----\n\n\nNCU intc keyid 17a00575d05e58e3881210bb98b1045bb4c30639\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAZNS7c281AOuoQAAAAABkzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxNVoXDTI0MTIwNzIxMTcxNVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtMTdBMDA1NzVEMDVFNThFMzg4MTIxMEJCOThCMTA0NUJCNEMz\nMDYzOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMEw2Toz5lLSv4eq\nmavnL/KqmAUlUK5HdJD9FzUCZwtPHKHPsRVSoGc92o5xe/t5Em8RSOOPTWKdJYPL\nc9DbTjWELjTGRUsTCVaBuUb/wFcpv50JlfDuLtXrQYVveNEjlBuqUw55kDvRFwKl\n/np6A2aD3//XUTdBfV5T+lQxJV2as7VHF5dAhgXotGwYg8UoWxdJchG5eItkz0Tj\n1PLsoyVIj+FmBXjpr4irYmsLcoO9BvbukuEmhqMDPpk45kqVheg7WtLguqzGlqxI\n4Ga17gD1FxIazO5hfaIovR35Qb7rYSn6T6WWwFCxbfc9xopKmPOOZLKmu9pdFpBW\nU985+YDIyaWASIdSHShLo3JcNti0lj4NX9w65mnb8kxwqK1kBaNw77eOhnEJnxWg\nzLq586xOOCYMgSjwBJFg4aGhL8yS6xagiH9m5SmeFVxXAW3XQFLifpLT8kJkvI2x\n3E1A75hrdUn6u0w8nMr/Yh93tcmh7yXBtP1vqCTFzV0rZtnxkDW0vnII2XlhoJzp\nC3YroLA6VlbPAcOgZSocCST6yrLIegwrr05oTxpmOnaHlKj3b9BvNWGBYV010Ri3\nB8vqvqVbNpbBcwT0IEh6wb/utR3U7/HyjvXfmu6GPmasv5AB/biFQzV+81JET1Bn\nlpL4RUBHDQMRy5VCUgg7FHcDrhW1AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRPjByQb95mjtNq\n9dpfqRMFi2pyEjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJzM8QmH2HZoWxNLfDx5OS+talvDSVXSSGIiDejLKsT/\n8O2yxtGVMT3ziwYM4uefFRbR1dugxhsOihZa2smNdz3kdguis/fsNd3INvieXmK+\nMTvBZcqYZLgZP5YznB30dLrMVJMTefKjk3TkV8xF2SWZ4TrbF22bSMI/9ECycigP\n16PihUUvgKwJPhjgnZwvAVdAYtp5xtfSIBztKArDIUmtGmNdWrtYXdMhgaVtrEld\nA/cpHcyUg2OQ4wysvukf28DDlxLX3FtH4xIvf9qzx0bWVJidB/bXox6yNF9by9j/\nKbmpg+kGMPekjsJ22I9cv1YaLR0vbWdpaEYInVW409waUkinIJT0IXvlfecRj4QJ\nci0wGcnvyJP4toNuWPponWi+bj5TfCN7SVyLGpCVpzKCpHKyB82kYbyT8WspgkU5\ns5R+nLYcxS9TUGi3d1nRsE7Cgvlzo2MqzBOtfscjT4LBc19rCf1VksBsozeKBusg\n0N2HvY137iJCjaZEeOCeJt3iMt7C4Xyr/nxRnPne6DFUTaz34e7O8Ve0MdFMonM3\nWTWdzwMMozcouEOqVBRIwVcUUouMP2e6OBhCUoRtKFr+NRMGsnSrG+4RRdKAKB67\nOu/vgoEA7yE2na9W+5Ym+VI+ynOHLOE2MCF63kNrKPggxCwdUTIFJYa7kUVrXONp\n-----END CERTIFICATE-----\n\n\nNCU intc keyid 9aaf591ee263caae10f57ba04fa8d1dd6613f9eb\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAsoOaSR/G2xtvQAAAAACyjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxNVoXDTI1MDUyMjIwMzIxNVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtOUFBRjU5MUVFMjYzQ0FBRTEwRjU3QkEwNEZBOEQxREQ2NjEz\nRjlFQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAI4PpcXH4osb+/ng\nJCipM2b+Rin5iSYiY4TUPL1gT9s9RxDBw/tMy11ydJUL3Pc5D9XZWm/i3EbmOqiQ\nPp3Lf4ou0qk2sVAO0ILmIuYeiG2eBorjHKVYBcVObvnGfSwrN50XXnWFDy//H1cI\ndFCrpzlVleHxIlQ+lh/HxYJVccfxblTwDPxfWNqPQEiSILzouh8A8qXSwvsLLymz\nnl7gr8dpICaD5JbY7hO9oZh8QGO6chKvllXHvfSW5Yqb/ykMkTUA6Bdb+HPNcfOT\nCybC4CeUywHjYr41vWXyK6OomXma4dEgvg5Oquu603qXjOp0CuLSBN3bzgbdxZ+O\nwaa62/ZfDu6xyQVpxSbsaELh7bIlaWfm8O3kjdSG9MridPRAK/rFSMCvZAeHXgkj\nkcEPCK99kpk8d+T8Sfdij82lqJ1lq/VFlTpuikB8We3x7U7GKdabch5Q0ECBg/+p\navjnHdZ+R24bZve1dNJUD5OmQAAQPPP01C1zbRUof4jRMhAVPM0QKwiLu0k5s+ld\nWU6EamhmK9+LtRPwLaUpsOlXNNOPRdZZ05mbIoPrW0s72M/ZrhJX12q4BjREe5Zn\nCXKCIWeuKuMd+bol+FwzpgT3zlbwhIcF/iwOC7+7qgy42SzjKWA3+Pp0V+dVUXUP\n5tX2Ue0NsS9merEdodaEKCT7CTffAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTD/9xE6mXyrxpK\nWaRMFDsP/nVeezAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAACGdKjYYsXo5EBYGbcXOELBtRjbHHZkjed0fk/s6+cD\nO7bV+3xMJcgDVIQRV0VwDj9FYZ3ERzpx1KdRzR9VxGpOIOGHxQj41QUL6phZ0gzd\nO5okuoFxH8FhK/DdnB971ccJ5qYtTh3RKr6j/5mwVudlrqsaXr4h1G8Vp/LsBAij\nazVSYDZMWFPWB35VArwaCboYDmH0UTzC7Rn7nZ7pxM4R0yxffovZmdjUt8pn4Hmj\nt5rODtpPcceTjaaVblsdp6TEHPtzyvDJxH4gof6kYCFFCoYoqUAWx9Y34mi/fgwm\n4uO2+ytwegPoWmnxjVItwndeBTYToq3+o24aTNZIXCicksUGt5pnpdYhQC9FYg0p\nRiMU7DRr4ZvM61tjA6/CWtDrIj4q8HBZ1FwRclhevoh6NknJgOC4Mgy4vs+WAnZV\nK/wfNLnn91cxASTSXhmOZWjBQ25e3nmLDKdeNooYolaglza+Cy/QJPHTAAG6PNH1\nefCJRHdqul9H1ZBW+Vek/6ooYRDwcDo2h9hsoLmy4WK/1bvdJ1hzTaTSAIFidL8v\nGqOdEqsWjqu8SeyI3misrTEGDHEm3md6wNRCMNCW3m17bRS4/tkByiSYRA3sRpA1\nGshdl7WLLQqDgzPWDQRsBmrzhCzvFwb5iIUE30uouLWis/In7GvcImVH/M4jXazH\n-----END CERTIFICATE-----\n\n\nNCU intc keyid b066d9697f5d3a07b425c10f587cceecf16ffe58\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvFK60eUOU4jJAAAAAAC8TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAwOFoXDTI2MDkxMDE5MjAwOFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtQjA2NkQ5Njk3RjVEM0EwN0I0MjVDMTBGNTg3Q0NFRUNGMTZG\nRkU1ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOknXXdIU1200/zG\noG5Gbgr3SkhgJ/M5M9Ey9jbJEPIj7JdGBuUoikJzzyujYKghAT4XA3h7UfDHJlG3\nCvnjXyZMJ/aLRRQKGlqFK9w0e2XmgRCbTRBCNm6FierglArPnm2LE3Scs7R0PeCC\n06sm4JLOxZcOJMVGYpzkiaku454H/cgMa99w6l3J73idwtuEZJFQPSYBmfyyZzbP\n5o67DyWIvDv+OhJWICPLOvMu9pUtmhIArKDVf6wzjVCk93mQWwcywJd5B8wrqk9m\nHzk3em72le35jR5U+a+bhsCsUGUqGOEVw7+aXys+eoXbst5YSY9Q87/bJ/9DurWV\nxmJXF+oT1CtZI/JF0yYAdHs3RVsENaMiUCtTp8eEFOgR6OlRl/9F5lSApJQIAuS/\nZQyFLn5Z+ZCsMSGof7ctrCMwMm1FQXIJSgfmOM5qtAFPGkly9q7t4R4j59jCNLjy\nfQB7bVoBwFSLxsrrOVv0rKXpvjet1qKQLb9fK4DyAKBk4Ep9Gzt9abbhXwUMJf4j\nlvPDvobctb/0ukPGNoTvf57P9vW5DPvzUVW1+niuDGQHB5L/QZ+6khlqWhYLB0nz\nrJuzjgzr17h+YKmWBAUFgwGj0pXAedkg+VaW12O8i27k5zpBGDwS/rxJ8ltzBeW/\nkM7x11kdDFGqaqPJDS/8AuGYc8ENAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSbjTZVc/S0t+Bn\nJnb0f7JLPDoNuTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFF2QkX2g21pBG5G+uJsMJ8gNFw5iGRJO3jjf++Xvme5\nErb8+/dc4dLiZb6WhssfQSZavnkBans1VY2KimmP833uV+9Pm7yY9G9L+CQcN3yX\n4VZ1woao3YbryAAl8ymEx3YZszcpTqSNy3cGI1t1Me/cLwmqB/R5+Np1FESjrF81\np770u/+kN7sOygr4d+d9sawNuqSzL9touJsN5WyuTvuCEuAy1s9vPMTXM93Gg0AU\nNF1IdgcCe+dTx7kkSMTmm06A/jIVAl4pJ/CWN/uWYiMBMACDkEhjvBS7gfZRSQMR\nvoqeBdPCuMJZKSC+cGFgKjZQTAkC3MsH+zpccNk2xTKgZbXWBx8zdZpYTzFz6SvT\nAXZbUo71n5MJDP08oqnOjCFZbn5rdFFrYFGSpXY2CMuuZswqOEHLPB17cB9FJiXw\nSo2px1m0zIagiiN9THG326xzK6R0UOXBMY4sUZaJuO3H6wrQKX0Mq7SCLQFi5uQn\nW2CCkTLyzoZrFtp4ltq2Ux/I+in9MRAj2FZYpaQUkvIMJhxw4J4GuUVMawhtjZAD\n8wbFyCoMA03n+CclmZRsgnRQL7sxm3SkNBvCMHCRTKNsybYvlE3AsdRXiQlx1qwS\nM1RLWyJGAcWALy09/bicAjyV+Efo4GKGXl8Vw5CKz4EsfOZWudqTHDtJ4q9gX7Ay\n-----END CERTIFICATE-----\n\n\nNCU intc keyid e7083f22152a7492ec59b0c4243437648b15dbb7\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAsvOeg5zkrxIlQAAAAACyzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxNloXDTI1MDUyMjIwMzIxNlowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRTcwODNGMjIxNTJBNzQ5MkVDNTlCMEM0MjQzNDM3NjQ4QjE1\nREJCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM6SNxJZoDYkR0EM\nxp2UjPlFl8+hsUrbdju0va/0kJD2Dev+4VYX/fNqa12fWALwoanBQ0Hly17GOa8P\nRYkHRjI73X66W37B1QvQIEl1OTZnELnjwnZZlRIv8fDi036/p0JbYYQyWjvPWPjR\n+T0r90tB1jE+JpqlbGSa7WD27X87nXGn5AmB8211UPNdvOrZiF1NYkPAE04BpFyM\njWh4Nhr8n+/h/skY455BYq3kO/Oa8Ph7WExZwQHDHAqW9wFCndI+uDiU2lZnIQaB\nXbd4bV1yXZqibXdAoeSMj1VcEiojexCXFZKQytI3FIMSLOnHsMwIglz4zl2a4lP2\nkOFYlqwVmRJSPbvMGzSplQUdz6EUAQCZPXQTwOp2KiQKXUICBAqAs3D3GR+YBpET\nFftvLrndNHV4fjCkeRqeZVT5Qw680bUddSY7tUfScs6P0l9gwJELvVoneIp+ZWFf\n64S4DiBBFLQLDG6zHqBfq6Mzq3upZry021bx9/c/Zy/5Bg9p8b0L4Lk/SWP32tt6\n1syQx5PZKfFKznJnCfqXCz0NXh66iPWguyqNZg8ZcYztKpivvMbbS9s1SwGFL6yf\n3gfbNJuhInITq9mxmERc+h6GQ6CVPT7D4PSagVV0jPMxaGb+0e5J1tdrJw1qrbCj\nMueMg+8pzf0ff35CUcOpoXs09ErFAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRDxcNTZHs+q20k\nXuqaOxp82KbRHTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAIUvAC//a6hTcoCfCxLkHH/OFrZ8eThK9GNGhudbFSwh\n5wkrCcu8XLQQBN2qwihuqHoWcJ/tCCyAY0Hcir6ASCIXH6zK6QkJoT3EG3csJw5+\nFcU6+QBax1wgfXi0ndhrbhAC15w7bqztZJ3e1bbt0qboRbklEFJRKalEXlntXM4W\nJAH/8WMMUbYLG2hd9hXmnGXHRboAAioQXJzvTcBGcozZpIgrx1VQU2Q4AQbylgON\nz8d/XbX8bYW1tsRh1HdEbI/B9HNnTWDNNANXhwaYZ3VvJG/OSNR5Nh0KQtCkI4Ud\nfNzgCilrQUR1UUXIN5PWz5AI8n9dblTkixZdGaWGthdGqFe2+ooUWChUJY46sDlm\n09d+jABeZveG2z+WDbzof+fzV2ZRJT3Gl9urTqmJIo7GjGxoCuxudkrUinZzsIvl\nrQnFbl7VdNlfLriTePyJ2mb6U8bPiIiu+ekHgoCo8WVKhmxFJLlqKio+fMq5BB8/\n+Gnw3qu74ljyIAIctC/SgDX2EO1VMDJ4UmCttLa66cqxTSA+uMCuGtOAenR7UZHV\nPbkWsq+56ZOMU1y4tm62UHfKY9d3yXzNRy0hqkVRNi9/Wm4QfjvmWWPdnMPO9Cm2\nzPP29SE1WpitsRoaf0OYECrQXdMtR3lcJsmOUQIclBf0AAmFcXxyLn5r0LCv8Z5F\n-----END CERTIFICATE-----\n\n\nNCU intc keyid f307ba33347c283a1e0c1508ad02f5c8ca06f45e\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvOx0ljlALzsbAAAAAAC8zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAxMFoXDTI2MDkxMDE5MjAxMFowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRjMwN0JBMzMzNDdDMjgzQTFFMEMxNTA4QUQwMkY1QzhDQTA2\nRjQ1RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAImZrCMjSIF7+Wid\nqAmzEz8QjXw5k4WbaYY7cM6TDtVbs3Q1r8qStCuvZmkl1XYKP8msMTUNs+tn11DP\n3E7f1sSd3UgOseNN+he74Kq1ZYzBiZ2sXFRHGJzj7UU5/aCXaXqICXZQhU3zY+Ee\nGpcMSyZ2/If+l9I7KdDbTLPb7bTpNE/N2HGl4rsxavV5QETnlxzm0TyVl/UGichG\n/M+0Lsi2uwCyyaCBwriPdMMa4rIv3zM4penjwhhU1b+eWeAMMKBEOW34uQE+kLTg\nUqWUOgOffB5sqy4VsYA1j4BHj+RSf1jKXj/hwo0y916vhzb2+s3Igmk6ayG9aERg\nUcBz81T0okUO//zkdG2WqYXf2iUWhz4CgrW7Flxfq3gVPDPWfNd6B4ejlmJmt2pB\nqAgRFmfbChV+1d7HOigAQFoqD3J7EF/A63aH4JSwax+hloLPtMtSTDd1D3gQNVkx\njrk7JiQtJQPfmUClPSPeaAYs5sj4kEmD1mRKv4w6t8nCwDH8y3R7MqKSJOHjcrXJ\nEusrYhnQDzig6kMG2l6LMI9EGB0PrPBxbr86Gt0g5jUHt9ksXK3p35aUi1XilJKt\ngY8PHlDFYHUxonmivibFUAyWD0hKxNuReByJrjJePfVbWsuhvyT99eYcoXvxHey1\nHH9Z5JVelOUL/Sbqtu3Ww+Tf03MpAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQz4uvz8pIofked\nhWFlTeTMe2JNpDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFgAE7lpraSk6EQpQyIE8iHuiBF0fGDGlmf5C2iYx89E\nTypXTqLnxiL9Uwss95Y2NQZk9cV5rR7ixpqkm2YS3OWgmc2IMp/vINzcdU6OxPuc\nvwnaX2d0O+DvdEDGGJtJCthx4yNhbIpJFSyl7WT8oN3LNYfwng0pQJlkg2lR9Umg\nm9g0AC3EFrfpB26/NHF5cZjlB7b+tkJ5Xs9PjxnuKnoNtDKZq8uUWQ6KqxDQfnxv\npBCyj0k8qYj0UM/MgZkk7k4W/QzXt/gBvunhHhydYnWAJ8+UMXIBE1todjkP+203\nYayWW5h/ksXSAagUdVPxt1iq1XxrzttiN6th/dyl7sH21JIrvxURxgO2iv3OjUeV\n2NzhXAUtRqtBrE3cCIMUeosHJ1T24LGIDkM0C9L2M3flKaiS3eiPizQH9qsmBAYP\n6dyTZ4YAZ3f6cy/cGPPc5zFiYfGxdCN0hY5UbsuyPr1YssHL1/nmHY0K3Eevm7MP\nI50w/uTDIzqhUTwXmN32TiU5G/tRNKDqf9XQ3mZKW+RcmZYEbhE/tarJKJS4zVly\n6vpL8BQ2bQBS7OPUen3LSb11dmoHo/NSF8PYI29VCkiVQhD1U/XpSqF8fkuTDdsg\nrhTevUwX4ucYOGCYwEwwqPmYXxXBzu/gkasIHByScv+vG1xzWKJQor9RzxXjmSLr\n-----END CERTIFICATE-----\n\n\nNCU intc keyid f6dcae3808326f10a46a62d55fe0a9cbe841a3d4\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvINj/JmFc/ApQAAAAAC8jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAwOVoXDTI2MDkxMDE5MjAwOVowQjFAMD4GA1UEAxM3TkNV\nLUlOVEMtS0VZSUQtRjZEQ0FFMzgwODMyNkYxMEE0NkE2MkQ1NUZFMEE5Q0JFODQx\nQTNENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL2TtemylWlcHYg0\n16Z1fI/fIp5zQ1GIE67upKa6p1a5Vl6+XweWBlgnIQ13K2slyHVxhU47Em6uI8cy\nhct7dwgEuQyp8qcp/qPuRjmK0DzZ/0F28JGPff/dZrU9B2A2xCprnsTQnMCboRWk\nPsTleWs0+ro8y/5DKp/Xu8mEXcCqT0r3ymM5vezyP/2aLKnQiD4cU1cPWhBIOgAh\nmQdA/gimaweJ5syfo6hGTPlQ+EPirT3xmCxK//KishCgrLxMHOyrICqSPpDB8Fqe\nuc2mgRbwWVvuqq0IIlglxx5Bv6FzAnNgh54zblT5we0W2KFA2WTFWuTloK7WHgO7\njs+O/ogRbe2/2IdQEIwz4xev4N33Y9Y47CwG0aHbSlytSKDXf+p2cjaWMbQXGSRr\nmm53HlZbrfkh+sJkV5Ge3X9KJ/VXnF8jgJSp3ZOzBEN41nVCMKLYXScdVX82pTsH\nS5fKwJcGx/NlufVg13McnyK3kJTafp5dh8ndaY2JfEdm4Axs3dWjmsiW8Gw7NQrD\n4qKfLeRHjeN3TJKGwAZB6KaB6bY/0I0B6kSIe3gqG3wIE+QwgsCsBFSleAxWw/yX\n6FBDsP2UhJkXYbCtdGpgsCu4mvkN+E6lJZxtmUV7N6f3nO60cxiQCI6tfwAD1MNW\nG1dN3ryv14edKFC+DCMg1ScvbpvdAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTgnJrLrkMlcnhN\nts65mKBaArawHDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEYPAXzQZIW5jHsWifuZrNiWYXS+MHqWm6YfTMcpyUE5\ne+yKFPvmG15as+6C4g8u2TcRc+Fizz1+QnqkWQW86iQJj18IgdxfEjojUqBcu95c\nN7rJSK8pnXmR1tTuFkBZA2jJ4KLvcl8gqLu4zOx3hgeiCXE3A64Yzvjm0+hBf+6g\nm/LMaIzzKRxqXLZ/r2peE37IrgfDRCKRy740w/kBQVIauZFwMcyHV02RV82yEdyh\nidOez8XzBxC3A5kmulrIEys1VQi98jnosR0fgXuksRVHg+HclP/9o/NTbbeNzYcJ\ntpndRK9qN0iRazr7rC6/W9B5rFACq8mKI0lRj+/Qs5ThCzA0cH6bqHRGlPemdD/0\njOlz2X9c7h/qdHmKEyeVpFbmZmcb+nTc7HBuBi4umd/qJie1wgMMPTzVxU+VWs//\n5KPrZQNX/0wUGPOghV/yP9HSFGDFWYqjcd2mRt7704d1PrL0D8w+BjOrKYP/08SO\nfn9Ub0wpIYW4Ox/uKL3zFiTfVYXmZ7l60/iN6dyfDcl8QY6RtVdMX/aAceeeaJfW\n8u5IOyy3wJvO0PAgOMa7ifT5Hgr7ENHJNTdSMh+n7lzAcaPJ1vQ0Q0rXnrFmjpRj\nf+VYrRKfS0d5hulXStqyDHggcbvA0KYDkdkid6W17E/SyBT4rCitptn5PNPH/6A0\n-----END CERTIFICATE-----\n\n\nNCU ntc keyid 1591d4b6eaf98d0104864b6903a48dd0026077d3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAnsiaANte6FPQAAAAAACezANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxMFoXDTI1MDMyMTIwMzAxMFowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3\nN0QzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApUfcE1xKR3VvrWXQ\nx0ovHecLlslbtUkvD/a4/pwXTJXO863qAKMeCZOXNv1f88E5l1B2dvxa+XCrVxQi\nFfADhYmswGrQgi/gzTrb/0ook/cAdDn9xP6saezi5yS61eR8xQvH8Qt7xAjx3wv/\nEzosDDpHQQQ32blPFpZQ5kMn2thNouLZR/fCoALwILkQIzxnHKRUMYkIVnbP4mqu\nloHBWZvGmNzf6n2f+1dd7VygPRvpnm+opJlVLC5qep4ejZgxTQX0vNmTo/xiLZJz\nAawO6RSlGtC0pySNGnsGN2Sd0w30w+qPwcCalo78irILUvz7MqZt9clGxkUOo6Cm\nh9tEVGgdgJG0hZNdJ7SeDiD6NvCrMbbfWwJSK4BJoRqkmhxMBXzUWGOVsPuyOfyf\n4ymf/bV5ICdpqT4eewhYnaa914UWi5WJwWEz353QMJ1P0++JEOsJY3v+TfvhiGzb\nu87uuyfL1M4m5r0QhGFscM2+vf5jTo0v9SuWcj2Aq3GOS92A8hRkkbfSoI6jrW4H\nwODrSdHRn3+CfrqSSYucvx50aVeNcA+yAe2k+fhyJLP8mBvJOJ6+zKV/Kas1UyJF\nVHyafMc23bKLWexnQcI3ELpONRVqQhYDeuKmkz/ADeiT49qiPuvIb9POK2uqY+AI\nJR6yaqyjaCW8Fxz6Wt8oQoQR6h0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFJ2xeiSBrD/Jdtm\n1pOdWpBVzRVaMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAV1JF8LS0rPzPFcRMwrmA5kStFmKWzgG6rfH1AaPAOHkN\ntWqGPSfFGET2qQOs2WhPE74gOjmVN6STboaJdO5DqPY5wNwD8IUpnmbkEcqWgNUK\n4w1e9H2ohsEyL0bz3ESvo6O6zOgEphvFiZJaWPWdMB7s5ZgKzgr+FsCYvCFbb/0h\nhx4hpuT2V9/bg30lF8yyJOamwtKC48aGsQrLS03XZKOMUl/Un34GWjAMYIWq7Dzy\nYMczO3RMFr3yQhr3vEc/M1Gok9+CJsByWV3nEF9DkRuMJPbQfLYcccydAMCp7tcA\nsW9yuusy70pMvgeevT8oUBqSDrBL5/TOiC9pah24MUmweO+V5v9+C2zL7MUhqfko\nX83ZPDsR/7KghslZ/nCDNXYlU9KrH2kM49DRI3b8B5q7c2s2GZ5oreyFR08OToPo\n369hIzLGwG+dbd0E4afahQmwn9DXSsEBW8R9cJkPRZ831ocaqinD9i/SnTsnjNYC\nROMJX7GHkD3KQboLR11MpedKL+WIPk0936NG0YRYOBv7z4QFw2C5qc8qorCPooib\nHmt+MKdvkrDsw8bWFxQfR0MV/1ZqBj3mGMdul9wJzaWDLgBiFJYrI7HVDoHWGevL\nPr+MbIGp/8xYm4BtFz68z9MJzuatwZjN9WjSEbeJNLH4629AWAG/s7Q2+dsTLg8=\n-----END CERTIFICATE-----\n\n\nNCU ntc keyid 23f4e22ad3be374a449772954aa283aed752572e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAXwzOozrTGve0wAAAAABfDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDgwMjE3NTE1N1oXDTI0MDgwMjE3NTE1N1owQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1\nNzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3ygjddAxaHBE/7iL\nW/cv6mzAEL+9M1w4FP2i3at3W74mJhNRtmrqaMyNtWOCvu2woUVXKwDLT9dC86gR\nGtigHKQLWyrX0+Ci95XDwqPAtwjcN++XwsVIvnGMEPbwAgNWtku/NQrPAr9cjcgB\nTBy9jGMhbTzA7y6SpVTe4DMap/FVco5L5er6AAsNG0jIgUR627YH4IH+T62YgxF3\nUueDjULpJR6QUvZOyJDqZf/jiclnskHkK+Elu/7OfFDRmYTFdahAREapqEDdwAQf\nUXbbMqtx/hSYtRTDUaLY8Qaj4NWHQeRwgZz7idtg0pbFIcM9nmtGbcepePeWUVdV\nosS6pZi/tpwqN/RGfbWhduPiTXaL6ujjABB11eE4m/3UK6sT9Ef3F0v+XPeDFaUo\nwsqBOlqCjmP/7LZaL82GK7Z72U3GyBNDrcHzSyhzdQ8TQ01O4LVbbEoqXAdrlrLl\nKOKen0A3jMTIAbxW9SPSOqtSZ2zkTRYkjMIXQHAfC50u7iJLsUWbjJ0ccrTGrost\nk+U31s/nnUza7l4Wrz52Nwcuq6oCfZT5SHQgbTO/+NFNmWOZB5Zew1JIQa9pIACM\n0OY4lgfKbkwYVBPgWWTI9GxWBDePRrjwelACibI6NI+BLFT58rXH1t/XUCquFFgo\na83XliAG9xt3KbdPZJNoSLc7m2UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFB438qbuQ+Ou07m/\nzNY/+bYBdNp1MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEARcIL6Yc+k/ammX6gbDiYCeDagBtcJvIwXLCdb2BrxIQR\nVpf4M0dOR57lY/iKdsLbF6sCH1jP3IyClCADRvthkksrKHoIFwzNILqNN2RyDnWH\nyxCeFWUq4XuhHFMN/y2LMxA5cvefanjBjaQoofIUwIpnor7FLLu6VG3+zNjy80Nl\n8JwvazZGSfDnTyaUfyB/aIbsjkpXmMAYyQQPOD55fXqACMkXf4v/PrIriKl0s2c6\nEEpRpNmMgeiK7ZWzn/EX1fJpUujk7lN8UsgLTonZ8vEuwtxoXSJHLDlyn++/zOhG\n89/aTz70fV+NnLbOjCHK75cqc5C6rtXxyXdtJFDDsjlu1q0uD2Id6EZisZqP4EgC\ny22lJZioVGaK3+1coXDAyPeYedeWcAoJHnCQ7meyBaJxCYkRJ8XT60X9IVTwxGZp\n0S8XYuqStG4DmfnKcVHmcuATQ5cvek/AEjPrnw0dJy/pFb85DjNVqdHySHSXHDRg\nsEQi84f81xM0/wAQzQuz3mddf5xJLOmidIzkTOSSTsRIu/6Vn4TxA/61P0NzsE4q\nLBWuZR5Gi47cYge9OjsghMSflYUYSIsrXFoOqYUQikqmY96C9tTBr+OFR4Q7dKYD\nQ3FHuUanb7tXSgKLbLcmG7FN6PSTIuZ+zupZpAUSeVH/fOzBb4V6tbINQfFA0UE=\n-----END CERTIFICATE-----\n\n\nNCU ntc keyid 23f4e22ad3be374a449772954aa283aed752572e 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAnnlFJ7wmrw+OAAAAAACeTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwOFoXDTI1MDMyMTIwMzAwOFowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1\nNzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAti+/VAervFImvywo\nSynOJmo6CMtxuvG/e2oZzV09+Dut1iBCjcxKIrLVMt6XKFYFMOaIRFo8B9R7Oisz\nFK7h/MXYTpD7vdEqnAg3gq4jnnbKO0LKEakg1AnJomAfBkMwmFxY8fR6rSbIKkPB\n5x10CAAWJk9PT6+wZA3GdmFZ+hkNPgQUeU1MvwmdZ055PVdw3ye1NFADx35iL7GJ\nXAPP3IoQ+7GzWUSZCh6ZMkfYmefVwyYwU03ykxrgxtK8bDz9zd7le1yum03ogLa7\nXNHiCIlAsoGDdOtdSW6BAbnKwlPPmYdLEgRj2PTzN5sYEDrzM59Wadi+UXnj1JWz\ncMvH7olTS/1t8wqeN3wHBO4ilfpwP8yzBBHgVD1YGJ21GCRurE/BK5XDRDUEFKCc\nLxuErDmSblpAc9cx7tG89lA7TMyQwfN+Kvd6LHFB6Y9d7BffDVwBsmyj/TPjoIiM\nbSXlRlidlM4t6X55XDF+2miakv9lTTOz1HMQm0SYuUiuBu0mG+TxmP3WelQs/6+w\nGpsW5Opqf9Co3mCPYXwrA8jLPqL5NvEo3G0XMfb+rAc9vtS0QWs7UAov2pkJqJ6+\n79Xy+pvyP9u8Z0EBGAcJc33l8inY/m21NgdNePlvLrnyguhN2dXBlPTlTBePpH9I\nToD6o4qq0ctbSURoGw6UqKd9Z/0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCqsCqBO4ozM0gyc\ngv86nEXZ4dOiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEATWNpL29ZHbief3/J6GPMm/CLivAjkSM7Ntn0moGWIGgi\nwfEbFgAchjMmIUK7zdLplC/yA5bDXtvhCpAhTq7WN1wpg9VY3lOOe5iZG4FkpelZ\nJBQ1ViO28oqZD7Q6TUCrXIyU9XiE8caegckQpzBTjx0YSjdQpclNVbuWMAujq3Bf\n4hPUP7CrSSHr54DTeBrkmihmL5sqhSPoBXj2TxZdCiTxTX/DSTdI4Po5IGveFjJb\nfPXtB56UQhKYoKxhCzTepdvW4TWdcNqDneufzyEvDm9SYbBC7TmS3SD/g1zvOSFW\nkIya/GnZ1gVcIRH4+OGGU8sevpA5lIC+2pngRrVpfhDdo0B1vEOCdxNAWQEiHvy7\nMyOPXbyy+QrzMl3xc22EYhyIvwuqeLHB6miiqQXqPySYK4XjfoV5hAS6kbo73hA7\nB93evq6Q6PgynTFnIHX7VZLofPDGNFntbBrdFqmoIlm+bdU6POEOX7YH7K9Z/Nbn\nlN2U8Yl1VR5JJRs8ZGK3FOKxj+5T5XdNkUR+IeKkKY5Z03rXXjw7V1T4uQrjTDVr\ncpcXtnrsqaPHcDLA3QSKZuuO/DFclm5OtmJik6y7tGz/e0UPeQEUI9bOWBNdJmas\nSZBnuUgNuQ6qSnCENj6OZuw2zmGg+fqbu+hgvH0qRFnpa7Hbhu525fERxcccxco=\n-----END CERTIFICATE-----\n\n\nNCU ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAX1JKv944bzo2gAAAAABfTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDgwMjE3NTE1OFoXDTI0MDgwMjE3NTE1OFowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0\nNzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuM0LK/D3ASVFKq1d\n/UIP4tRX9jYGMiDxwRTTFziig5EQ2yX1/PLjdREawTLRM3PRsvYfSj3X1Q+Mk2N7\nbp7U4S/KQ3SEaCRImnnrgSRoozn1Y2NS5p2cf8W1vWazkJQKiqjURhlsHJ2DNBN7\nMvkNCmlLBmuRknfgCai+Hq0aMWe76TF0ZWPV4mKWSHoFthN+vVbjXIjvCdaI4nxq\nEE5Upif5blyS25L3nI9FmmFlcoScxRW1eWgeEDObB42zi47/SPBKM6V5mMw1gIA8\nEGJpu8G1PC4rUebJIyUotPp3A0yx53cRydHoqeLXebVKQk36o4DNbs4ZAvKdxIVN\nD8WqnOX6tltHOghurwmQRfJOOd6DSWH8RN86CvuInLZMucuoAlxzK7jwYFB7Kt/5\n4bVkUcXAgCHQdFvgPrxBMOlCr5htQ+G9VxUjzLTTCnpMcJmCjrqJmXwdg/8rsJ1n\nwvgtknin+Vavo9S78G4V4NroRj+lsDNKVjpaSsvzbqj3prNDv815DNreiUHz6Bj1\ncKizBEVq7CHobmP7n5LmygbJWmCgrrJklIZqiITemfdF3i+kBaH78x11UNgCDZff\n143RFRCE3LhSDNpH6kWnGovnZA/DpS2ur9uFbF35sgum01sFOydPbbAgV1BtTY/n\nfM6L1wLqJWDVyfcwDlWLCVnb6WUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNrSKW4F8cDdD5o+\ndTc9ZBlypYGqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjeo6sZgNku1XfjnrP9Pfy7keC0HmaXneKjw+EFM1n8qe\ni9MF7dBZf5lvXYNRfjWTlE14eMv9O3NRAJ6/rBzV3vvFdQcY8ASp0RetHyr5Ufej\nvvqUQZQMjbsTUmRPAs5XnTBmby9u8cnZizBnn5JdY1Mtb8EFtJrFG7xHA4/wvnT4\nNTzNFRjmUc5tezEDdTnYb0IFtiObu9nts6nbapdJww0dArevrq2RviCQO8zl9oqH\neDrZ/o1S3UtRdzQNu94FpAD3LhcbihKU3ijCXi0sWBD0uBmtGFAmYrYm6KqpT1QJ\nDZpfSGPhKO2ShXx0/jevLVX8n4p6qvM4yr9EvCqHu6EAXCjOxocv8hioNUre5pcx\nRfZ4mvHRPXw/q1EiVbaomWzyQ7VxX5byjhnVsz56faLj8CMNvWzYFbIM2n34fnLI\nKb97HM4DMJQ7LTWhX7WTDXUmXCJ0UMdR8W+CDC94CR+/C5i8gMsOQ+FDUeGaVxn3\nq2tCvvGL2iC7QZoI0u0aVSOlDTuvEcGs7geRw18nmsg66zuS2aAl/Hfn6l2n+Qun\nWOnCKZbJ6LINphCUKZMJKpKk2Ih5FQc5Qb5rBmKOCGC2EiVTTedBbVv6v+RLIkDo\ntWeQyMkgJN1vg6epEJ6y8MNQ8qYwfv84DR4UWP2UH6zAWOixAuY3T0QpbGgijaM=\n-----END CERTIFICATE-----\n\n\nNCU ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAnqgoLPKG0oibQAAAAACejANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAwOVoXDTI1MDMyMTIwMzAwOVowQTE/MD0GA1UEAxM2TkNV\nLU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0\nNzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2qg4Z/E65efvtiFB\nprnaJUBG6jFow/Q7sCg/d+o0+7jDjL2nPpPnQEBzgjnOjDP4zCDAUiTFj8RIh3Sk\nIimGxwyqGeA1oRyoWcyFZjewwZWCG2+/k8+geAbv+0I4OpqiQZgLGpETNZOu4Ew4\n6oek2KncqNVBcsFDohllev8vCqroOxgr81+Nmh4D/Wr9Mr4nd9f0xQYq5WERbjLy\nYAzlVMKB902Frqp0nk5Q9eR6PUeAIVGRDnYuaaYs/tHTLPlGUZ1lMhZvWZEAGMYZ\nxyjglQonYmc5XqWyXKTsYJMMEJo0Z3AOhxmrUm9Ff/jfa1kPZOeeJbFxT5WD2cEY\nP9LtR8PNIVkMM+5RSTNvYHww8yQ6K4dgeLX3nAURtMchrvDFPHikvPBIYOJXKH15\nwy0mRelNxj3ZqqDi306eQj9vBUYPGHQFRMFynCXJmCCG0lJMlLb17P3BT93yr1cT\nXllXoj0f26KxSBI53CnLgZu7lhgocGPG0MzA+QSYgH/5a2VhiUEo7vEexcUY30s+\niK0lGVQXONpWPxNiQlhNRYol2Nfj1WMf6r/YLgpMoZiRJVGKfB7eLAoUMrcpPnE5\npHxAFEHyOUpgucZ86kkivBg2KhVXfpWYJTxYfSRmotTn/s6UrTHytnqAYo9VxG3I\ng05GdBMIwnL3A9P7prWvn8Vc4jcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK+3+5NPnRNnVK9c\niGjjWS6Z+uq3MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALycPGerAVuJ2q584iwZIP/lVi9VFNPKTo8D8nM3C56M+\nBpVcLbEeFEvZ5KDTAMhfA5WwiU1ug87umGFTBqSEEt1+lRldrF/JNihVw59JoF6n\ncVqoXASgHsE0amFnGWskJF8g+CbylpaiVDf5qDkMCVnvip9T4QWjlTeTHro/baFg\nR/fjOr6W9oAlo9yQ6YPyWHe8Y//tMTV+p280qHXVGR/Alj0urR8tiEdQfFRVv3As\nbAIcA1KsjsdKexMYW8Mz6kLUfbw1Xk5yfHCI7u7Y3Ku0znCITelVLihgvil4STmI\nrB8TrWliQ/k2xwwxTKH17JXaHp/OS/TE0Yt4KjUvRN6tkSTVtBAlAFh5xK2kfp35\nzpnslB0NiR1YZ7kcatoTR3ER72tFBthTiAlM4VNx8Z0S11o1MLxn8raJNYwZWKUQ\nTOaarrItImqaebqM2XSfAEf8L7g2MUi/rsuTDGcYbMFbt/K5dUHoRfZXNWC/MOjH\nfEwAcQr7C5L/SUd8gbpanqOgxbiFXcn7ucMHTgIlGxHH1hwXLxfu8cdnsGz8Ngez\n4tEUQQgkXWwzCQPDNihglAxS8buvLR1185wYNKQiHBVXUjc59/EJ8BgaDjww4xZH\nlN9KLLVjomxKecyYt8PrgfGJqBBOxb1kXX2zHS1gTNJATGv9wnQ3sTFKK/eUCDo=\n-----END CERTIFICATE-----\n\n\nNTC TPM EK Root CA 01\n=====================\n-----BEGIN CERTIFICATE-----\nMIIDSjCCAjKgAwIBAgIGAK3jXfbVMA0GCSqGSIb3DQEBBQUAMFIxUDAcBgNVBAMT\nFU5UQyBUUE0gRUsgUm9vdCBDQSAwMTAlBgNVBAoTHk51dm90b24gVGVjaG5vbG9n\neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTEyMDcxMTE2MjkzMFoXDTMyMDcx\nMTE2MjkzMFowUjFQMBwGA1UEAxMVTlRDIFRQTSBFSyBSb290IENBIDAxMCUGA1UE\nChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDoNqxhtD4yUtXhqKQGGZemoKJy\nuj1RnWvmNgzItLeejNU8B6fOnpMQyoS4K72tMhhFRK2jV9RYzyJMSjEwyX0ASTO1\n2yMti2UJQS60d36eGwk8WLgrFnnITlemshi01h9t1MOmay3TO1LLH/3/VDKJ+jbd\ncbfIO2bBquN8r3/ojYUaNSPj6pK1mmsMoJXF4dGRSEwb/4ozBIw5dugm1MEq4Zj3\nGZ0YPg5wyLRugQbt7DkUOX4FGuK5p/C0u5zX8u33EGTrDrRz3ye3zO+aAY1xXF/m\nqwEqgxX5M8f0/DXTTO/CfeIksuPeOzujFtXfi5Cy64eeIZ0nAUG3jbtnGjoFAgMB\nAAGjJjAkMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqG\nSIb3DQEBBQUAA4IBAQBBQznOPJAsD4Yvyt/hXtVJSgBX/+rRfoaqbdt3UMbUPJYi\npUoTUgaTx02DVRwommO+hLx7CS++1F2zorWC8qQyvNbg7iffQbbjWitt8NPE6kCr\nq0Y5g7M/LkQDd5N3cFfC15uFJOtlj+A2DGzir8dlXU/0qNq9dBFbi+y+Y3rAT+wK\nfktmN82UT861wTUzDvnXO+v7H5DYXjUU8kejPW6q+GgsccIbVTOdHNNWbMrcD9yf\noS91nMZ/+/n7IfFWXNN82qERsrvOFCDsbIzUOR30N0IP++oqGfwAbKFfCOCFUz6j\njpXUdJlh22tp12UMsreibmi5bsWYBgybwSbRgvzE\n-----END CERTIFICATE-----\n\n\nNTC TPM EK Root CA 02\n=====================\n-----BEGIN CERTIFICATE-----\nMIIDSjCCAjKgAwIBAgIGAPadBmPZMA0GCSqGSIb3DQEBBQUAMFIxUDAcBgNVBAMT\nFU5UQyBUUE0gRUsgUm9vdCBDQSAwMjAlBgNVBAoTHk51dm90b24gVGVjaG5vbG9n\neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTEyMDcxMTE2MzMyNFoXDTMyMDcx\nMTE2MzMyNFowUjFQMBwGA1UEAxMVTlRDIFRQTSBFSyBSb290IENBIDAyMCUGA1UE\nChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSagWxaANT1YA2YUSN7sq7yzOT\n1ymbIM+WijhE5AGcLwLFoJ9fmaQrYL6fAW2EW/Q3yu97Q9Ysr8yYZ2XCCfxfseEr\nVs80an8Nk6LkTDz8+0Hm0Cct0klvNUAZEIvWpmgHZMvGijXyOcp4z494d8B28Ynb\nI7x0JMXZZQQKQi+WfuHtntF+2osYScweocipPrGeONLKU9sngWZ2vnnvw1SBneTa\nirxq0Q0SD6Bx9jtxvdf87euk8JzfPhX8jp8GEeAjmLwGR+tnOQrDmczGNmp7YYNN\nR+Q7NZVoYWHw5jaoZnNxbouWUXZZxFqDsB/ndCKWtsIzRYPuWcqrFcmUN4SVAgMB\nAAGjJjAkMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMA0GCSqG\nSIb3DQEBBQUAA4IBAQAIkdDSErzPLPYrVthw4lKjW4tRYelUicMPEHKjQeVUAAS5\ny9XTzB4DWISDAFsgtQjqHJj0xCG+vpY0Rmn2FCO/0YpP+YBQkdbJOsiyXCdFy9e4\ngGjQ24gw1B+rr84+pkI51y952NYBdoQDeb7diPe+24U94f//DYt/JQ8cJua4alr3\n2Pohhh5TxCXXfU2EHt67KyqBSxCSy9m4OkCOGLHL2X5nQIdXVj178mw6DSAwyhwR\nn3uJo5MvUEoQTFZJKGSXfab619mIgzEr+YHsIQToqf44VfDMDdM+MFiXQ3a5fLii\nhEKQ9DhBPtpHAbhFA4jhCiG9HA8FdEplJ+M4uxNz\n-----END CERTIFICATE-----\n\n\nNTC TPM EK Root CA ARSUF 01\n===========================\n-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgIJAMklAEG4bgQ6MA0GCSqGSIb3DQEBBQUAMFgxVjAiBgNV\nBAMTG05UQyBUUE0gRUsgUm9vdCBDQSBBUlNVRiAwMTAlBgNVBAoTHk51dm90b24g\nVGVjaG5vbG9neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTE0MDQwMTE4MzQz\nOFoXDTM0MDMyODE4MzQzOFowWDFWMCIGA1UEAxMbTlRDIFRQTSBFSyBSb290IENB\nIEFSU1VGIDAxMCUGA1UEChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9u\nMAkGA1UEBhMCVFcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDCxcfP\nyaNsGhaR28qqisqkrb4Z2OPul7BRNlIEYP8jSFORygyfp4j7bKRyVTTONCUbPq+J\n/a4yRcdbEs8dzvzXypQbVUjuC4sOKjPiWLfOhj1Z1yvOn19Xe3Ei4UzMKJm+xpb1\nBYR4YfrnuVzL4do/B/lCr2AYs4Fmtn1uzXBp1St8TRJz9HTW1yKJ2ZOqTgW3DX80\n6DP//3kIatTuLCZ6Zsdl6fsgMPxJGwrI35ThKBtaUMT93abb/KB/dugvoIgtEi9D\nGEC2C0UWsvJEfu0Qi8zoxtYvd9Y2tRlMxMhK75uShXHxRcG+WOGEnm6uVpGphLKg\nqxAl1tuFcb94vi7dAgMBAAGjJjAkMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8E\nCDAGAQH/AgEAMA0GCSqGSIb3DQEBBQUAA4IBAQB7epeKy2Sa+9huMzK4PnIpjiaX\nQrxPx+E8BVGw6VuQqTcTPQRvPhNpc4VF/6/7MA9qb6vDxWEf40tqNi8e/RPNlRFY\nDh4tQ1Hhl69NrZVYZeXl1cU/ometoAAbz79ugq78iFndJ5rHMQ85GRwtW9i/q0p1\nVjJ8dLYJ7aRBDTP3hndc35GmZg3q1UX93WD6mM5KuE+mOdv7MXKMtYSrV+dE/iGM\nASrratJf57P6N8BpegPQaSb6UnElwBpwhRxzW7N9qgjQWIqrxe97CfJk41RvtnKu\nSePqlm1PtWkygt9bYaInLZYkcknXTD/7BtzAyyS25HtG/YTvuMtKItCp7Z4n\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 1013\n========================\n-----BEGIN CERTIFICATE-----\nMIIDkjCCAnqgAwIBAgIISN0JfIK6vE0wDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE\nAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAxMDEzMCUGA1UEChMeTnV2b3RvbiBUZWNo\nbm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUwNTExMDg0MzI1WhcN\nMzUwNTA3MDg0MzI1WjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDEw\nMTMwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG\nEwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALDAta6EZBlhF1MC\nZ9GeMXqw8puwZEDI3qR/rwGhEUj2oqhFY/K9zUk2YQCkC6X5lrr/lbWfvZtUGMFC\nP4VQlt+bGPTOladGg6zJ/7a6yCd9MqkZbw92niDNhWcXsiB7SRyHYdr/He8tNOoD\nmVdNFXxknP8QH3soBPahxckqtrhhk+24Iran04jOAc0959VnP8H0Jyg4BjehIQjj\nBGGK+bJWZXHYRFlDj4dRW+epChdOqTpWOulf5GOvwNm3sv4ojU2fJ8cA5TznX81z\n+Se6hmw/RF8rUGjf1uiKbsxnbIf3An01mZYgD98FXEHAWAW92vAJUuEQJVBlTest\n1YmsaT0CAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C\nAQAwHwYDVR0jBBgwFoAUoNc3KQ4WzyrivucQDPVrLwTF8EMwHQYDVR0OBBYEFKDX\nNykOFs8q4r7nEAz1ay8ExfBDMA0GCSqGSIb3DQEBBQUAA4IBAQCOXMzQYz3vr9tg\nSiFr6qha2+Jay+EK0iLjSKvNzcTv5yaO8I6pb7tdocvze8394PtM42d2OTOM99lJ\nbZogquaJ6fLHMwzO7UEGndtm6YMp6APXk4ecRqUDLqofIWL6PQUVwSEYlAC6RM9k\nn4MJqckIxsc6iC38lsjyn4ut8o/E3fIo8UzYDl2P+KK1VkjDcmmgNf6seHmBsOYC\nvOc4xYpq0yWuZFfxeyC4wC4mOAKLZX2yLMYrYBmnDd60nc0hgI1/TKb1H/Ew2P7R\nUxEDMGe8e3A9YR4M/09FLn8cTTjq7hflRlcqiarpPo6+9Z3dqzmqTQxvVQ/DIVqE\n3r3WOnnr\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 1014\n========================\n-----BEGIN CERTIFICATE-----\nMIIDkjCCAnqgAwIBAgIIbXSeZ/22esUwDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE\nAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAxMDE0MCUGA1UEChMeTnV2b3RvbiBUZWNo\nbm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTcwODIxMTEwMzM2WhcN\nMzcwODE3MTEwMzM2WjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDEw\nMTQwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG\nEwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMd3U7eh2gF2h7LE\nb6GZTP/TtWq3cK8QMFuGI6PrwXjwGm1JfG6vF+1u/z4tJbc8znK8Kc/XTZ1yqoZW\nsz7dXP20eltU0fuB7qwa2yJOqbl6hZ6nAD+eOuteSUQ8AnEuFH2XqqN++pj9DJXS\nzDpvHqP1J6PnpNi6gxVas6PBFrRZuYGOxJwG2miyObHK1/kKrkuE7/yh+ju1j0Rw\n9DXhvmEelrztPOkm4TkLxkTQSL7jj+EWimpmGP8Wo+B/2FdVpJZdoFUa2v5GldK8\nVBdkacDaSqQ0iX1tP2oI93Jyx1xu9JDqjThrtu+FFIlHFJLw2N91fSCmsJukUiCI\n9PPakQUCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C\nAQAwHwYDVR0jBBgwFoAUqdlH8/mBcu623MXtYJoA3nwGnLAwHQYDVR0OBBYEFKnZ\nR/P5gXLuttzF7WCaAN58BpywMA0GCSqGSIb3DQEBBQUAA4IBAQBCVMox72wTII5D\nfjznST8qr61I6ctKouW401l/x5EA2gBctsx5gl3tuq9EArM2TuA9F+leyJ8r/Tdu\ndo8TgM4iCVl+FthXlrkPVemd1le63v0Emaxd/8Vca9ZZbrLlC6WNiUj/nGyYThPK\n3XIHQN0+OoNdXQM5IxUYylgiA3udzcLCS0oL8uWhpa5YX2ad2UB3xKiz3maI7sXF\nDk5ds45MimR0p/dd+4y2tnAB1f/neR9/CqE58GQcFDY10mpNUa3rBqcUnHcJCfvb\ni5TX/clYY/wsVDPwjA5u3k7KSOip7FR33EfIPubE/nMeVqDTiZt+RBJ81xskBO0+\nx7bKAs+x\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 1110\n========================\n-----BEGIN CERTIFICATE-----\nMIICBjCCAaygAwIBAgIIEDiqn2SaqGMwCgYIKoZIzj0EAwIwVTFTMB8GA1UEAxMY\nTnV2b3RvbiBUUE0gUm9vdCBDQSAxMTEwMCUGA1UEChMeTnV2b3RvbiBUZWNobm9s\nb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUwNTExMDg0MzMzWhcNMzUw\nNTA3MDg0MzMzWjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDExMTAw\nJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQGEwJU\nVzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDVkEOpuyhuviaDH6xQj3faaV2Z4\nFvXSdwUkTiB1JjPDgv1PU0SFYtEE1W9VmI1GcOn5FAUi2/QM36DPhmPTd+qjZjBk\nMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQV\nkdS26vmNAQSGS2kDpI3QAmB30zAfBgNVHSMEGDAWgBQVkdS26vmNAQSGS2kDpI3Q\nAmB30zAKBggqhkjOPQQDAgNIADBFAiEAlfxysfHDcxYDed5dmRbvHPKHLEEq9Y9P\nwAxoKqH7Q5kCIGfsxiLr2j9nJ9jELwXz0/VWN9PhUNdM3qmsx2JEne6p\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 1111\n========================\n-----BEGIN CERTIFICATE-----\nMIICBzCCAa2gAwIBAgIJAN/u3L0l8osZMAoGCCqGSM49BAMCMFUxUzAfBgNVBAMT\nGE51dm90b24gVFBNIFJvb3QgQ0EgMTExMTAlBgNVBAoTHk51dm90b24gVGVjaG5v\nbG9neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTE3MDgyMTAzMzI1M1oXDTM3\nMDgxNzAzMzI1M1owVTFTMB8GA1UEAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAxMTEx\nMCUGA1UEChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMC\nVFcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATRcgnHcQk99FFMQ+9UVVFzf64J\n1jnhxpGAdZEHRleZfkfTYGHsdr3L9FLdGVUb+BA2cim30ovuPDZOGOUKPraLo2Yw\nZDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU\niC8Ee4cSHPmIXzEWC8e7VYavRxswHwYDVR0jBBgwFoAUiC8Ee4cSHPmIXzEWC8e7\nVYavRxswCgYIKoZIzj0EAwIDSAAwRQIhANrKhBfLXyHCznBRtWRBmTbfYJR9mCl1\n2N/xZkcohRZIAiBDufnmhZWCbX4pibbzAOgcxjsc5+qmpAovxW9ipWJEsA==\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 2010\n========================\n-----BEGIN CERTIFICATE-----\nMIIDkjCCAnqgAwIBAgIIWAnP9p2CIZcwDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE\nAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAyMDEwMCUGA1UEChMeTnV2b3RvbiBUZWNo\nbm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUwNDIzMDY1OTE5WhcN\nMzUwNDE5MDY1OTE5WjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDIw\nMTAwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG\nEwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKcE9saVURE582ny\ndHsZO7+3xmdMFbOPCdplBda/EJg9cg7n6bZ79Qv7hyymN5qE23SOPNFvm8SAdmCJ\nybmTnk1y+SyiDw5gUpckbXsRYAetTwqtdfBkF4TkFoRJDIraQC8miTdYqXMXfWTo\nbhHXf/oV953laOCO/SRlqXzAWzm5d8PwixUBLZTnvcgxM+pXwv6JY6wgXpv55fY1\nD3M1hyiNALib+rg0LwazalU0DOryAAIqFzMgkR2IaefkAmpmQ1xpfMJsK+BMixcI\nXUCzSGGKKdkc3WUDye/vsyXYQ5zoYuLt3xb7BEZxes31lqbs1gniNz4oD5ptmrS4\n8V7Rz/kCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C\nAQAwHwYDVR0jBBgwFoAUCDAPQ6j0uMjmJKT3Bgz1nnRQFecwHQYDVR0OBBYEFAgw\nD0Oo9LjI5iSk9wYM9Z50UBXnMA0GCSqGSIb3DQEBBQUAA4IBAQAE0pMnjz5o3QUd\nS3lLQn3+vXkS2xc1EmPxcVFxjPbrJDtnNRMWwglC8zo70VgWu/+ulwzy783zJSiT\nnkWPeuszqp3xOtCPWDE4D2sxVbWH3pvel2tgZJv0KJsJH93QE53WbHUwSn2JjHNH\nUJiBpq0genUxGD+zBI3NGDGB1iti66aJfCdjn8C0G0gTmQ8jFpZ6AsX1GSvPYeU6\nEqN9ynIEYUVcRKwoHQaSmqDd7HVp97fwD+mkOfFYByLVUqC09rNFW81Va4Ze2gw2\nHiKz/SVSA5mA/91wfEZSZ6azOgDZNQlbgBo27mZFJ5mR7iJbWgtD+vO4+wRZK8Bc\n8yWxV8ri\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 2011\n========================\n-----BEGIN CERTIFICATE-----\nMIIDkjCCAnqgAwIBAgIIGCgneR7Ow/EwDQYJKoZIhvcNAQEFBQAwVTFTMB8GA1UE\nAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAyMDExMCUGA1UEChMeTnV2b3RvbiBUZWNo\nbm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTcwOTExMDcxMDEyWhcN\nMzcwOTA3MDcxMDEyWjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDIw\nMTEwJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQG\nEwJUVzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAfy7Iu3eTXYdXe\nWWc8ZPHb1ekofnHWY4Y6QD+z256j2rXTGmk5bA1Y6nCsYtBqUV4B2gfPAaZXunMD\nk3KDEBaI8Fkd7BTXbWHrfgxZstGHlWzVqi1r2Jj31MdDMz0NRovWXJwgG5N9tgs5\nKEeQ0Kk2ock1Vdn/jIqx3xY9vBMZm97N11m/WtZ5U2NyxbfqIIloIhxuvoPZRzx8\nc6MmI77MtM2ylm+2nbXf1DtbEKXQYuGnvM3Ib9K5f2+PTjNi/nWGAcCgLo89BNSB\nLdG9GxK1hO9QXYcCkAWsEWUD+8DM1v+zAl2cnrtj4iu48sU5i6hVO0CTtCP0yOkf\nVdVfNVsCAwEAAaNmMGQwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8C\nAQAwHwYDVR0jBBgwFoAUpSy2R+CQm9ouf32RP2LYixOJ4sYwHQYDVR0OBBYEFKUs\ntkfgkJvaLn99kT9i2IsTieLGMA0GCSqGSIb3DQEBBQUAA4IBAQAUwrhniUs4CLgb\nUIFPslx3aly8M2P8Vn0GR+EcE0GklFa26WOT+YZxacUP3rMGteZGCtbFggYcM94n\npog7FBnnDR1ySHbHOY0kWBO75ePVBmytqpPeZX8E5202sRgagnojl59bPj1tqhlH\nvwj6Xj6/XAFZDo0Or2GhCC5NzRbXmc6wB0zIjTlhPwVXQ+ikKBqdt3/HKCB4i3Sv\n7Dxyy/N4aPg/s6MJxgmUjtGxRyjU6RVgrzqVN/0Csv8L75g2SvzgXnqrqcpk82XT\nCnJgflpaCfV2SC5MGWHEjmj1tghC133JcEMQlsodWRm+0x7E/fsHvJNj4A0nh9K3\nH3TryFJ7\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 2110\n========================\n-----BEGIN CERTIFICATE-----\nMIICBjCCAaygAwIBAgIIP5MvnZk8FrswCgYIKoZIzj0EAwIwVTFTMB8GA1UEAxMY\nTnV2b3RvbiBUUE0gUm9vdCBDQSAyMTEwMCUGA1UEChMeTnV2b3RvbiBUZWNobm9s\nb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMCVFcwHhcNMTUxMDE5MDQzMjAwWhcNMzUx\nMDE1MDQzMjAwWjBVMVMwHwYDVQQDExhOdXZvdG9uIFRQTSBSb290IENBIDIxMTAw\nJQYDVQQKEx5OdXZvdG9uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24wCQYDVQQGEwJU\nVzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPv9uK2BNm8/nmIyNsc2/aKHV0WR\nptzge3jKAIgUMosQIokl4LE3iopXWD3Hruxjf9vkLMDJrTeK3hWh2ySS4ySjZjBk\nMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSf\nu3mqD1JieL7RUJKacXHpajW+9zAfBgNVHSMEGDAWgBSfu3mqD1JieL7RUJKacXHp\najW+9zAKBggqhkjOPQQDAgNIADBFAiEA/jiywhOKpiMOUnTfDmXsXfDFokhKVNTX\nB6Xtqm7J8L4CICjT3/Y+rrSnf8zrBXqWeHDh8Wi41+w2ppq6Ev9orZFI\n-----END CERTIFICATE-----\n\n\nNuvoton TPM Root CA 2111\n========================\n-----BEGIN CERTIFICATE-----\nMIICBzCCAa2gAwIBAgIJAOCIUWvKMfuGMAoGCCqGSM49BAMCMFUxUzAfBgNVBAMT\nGE51dm90b24gVFBNIFJvb3QgQ0EgMjExMTAlBgNVBAoTHk51dm90b24gVGVjaG5v\nbG9neSBDb3Jwb3JhdGlvbjAJBgNVBAYTAlRXMB4XDTE3MDkxMTA3MDk0OVoXDTM3\nMDkwNzA3MDk0OVowVTFTMB8GA1UEAxMYTnV2b3RvbiBUUE0gUm9vdCBDQSAyMTEx\nMCUGA1UEChMeTnV2b3RvbiBUZWNobm9sb2d5IENvcnBvcmF0aW9uMAkGA1UEBhMC\nVFcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATanNywPkE/RICBZ4VjwCymLDts\nB7Unv52Oj0HyEsAfc7+vjOl2DP8JbrcozY05s7GFfQqR3vhv4ZdkJMalgOr2o2Yw\nZDAOBgNVHQ8BAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU\nI/TiKtO+N0pEl3KVSqKDrtdSVy4wHwYDVR0jBBgwFoAUI/TiKtO+N0pEl3KVSqKD\nrtdSVy4wCgYIKoZIzj0EAwIDSAAwRQIgXgXs2eVt2U4sCoRf1GLoUTf2ZzYTSsyg\n6I5w6hPTLigCIQDLLFlXK1xw1a1D1/idVhdd3a8gkE0FnTJO890WwiQbpg==\n-----END CERTIFICATE-----\n\n\nOnDie CA CSME Intermediate\n==========================\n-----BEGIN CERTIFICATE-----\nMIIDKTCCAq2gAwIBAgIUeI0CCd0CciUjODd+qV89nfrBECswDAYIKoZIzj0EAwMF\nADCBiTELMAkGA1UEBgwCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBD\nbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xIzAhBgNVBAsMGk9uRGll\nIENBIFJvb3QgQ2VydCBTaWduaW5nMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMB4X\nDTE5MDQwNDAwMDAwMFoXDTQ5MTIzMTIzNTk1OVowQDEmMCQGA1UECwwdT25EaWUg\nQ0EgQ1NNRSBJbnRlcm1lZGlhdGUgQ0ExFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20w\ndjAQBgcqhkjOPQIBBgUrgQQAIgNiAASdEvDZh7DUNurof39JO07VstXEbEgkiJlg\nbo74ubTnOQ3nksRHrjyZ4ForFmlSm+ym2gO8mW7UiZibclU7yK75Jd9IZQc0pSpK\nnCfMc4DgzgRRIpKjo3/Kmu25FDRIgvWjggEaMIIBFjBoBggrBgEFBQcBAQRcMFow\nWAYIKwYBBQUHMAKGTGh0dHBzOi8vdHNjaS5pbnRlbC5jb20vY29udGVudC9PbkRp\nZUNBL2NlcnRzL09uRGllX0NBX1Jvb3RDQV9DZXJ0aWZpY2F0ZS5jZXIwHwYDVR0j\nBBgwFoAUtFjJ9uQIQKPyWMg5eG6ujgqNnDgwDwYDVR0TAQH/BAUwAwEB/zBJBgNV\nHR8EQjBAMD6gPKA6hjhodHRwczovL3RzY2kuaW50ZWwuY29tL2NvbnRlbnQvT25E\naWVDQS9jcmxzL09uRGllX0NBLmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE\nFGGaCniWiAPMYZCopT+QbXV8n2lqMAwGCCqGSM49BAMDBQADaAAwZQIwfPb2+J5l\n1ltD0qQyEMBPsXzFMokpR53QcvvBpRwvl6o5PGVj7bpNyelLh3EDmPEDAjEA2mQz\nxUQUTd4WV77Zjfgajq37jpTzARWPEKFi1kE8iT+6qjBf7vw+3BLLEQpixRPC\n-----END CERTIFICATE-----\n\n\nOnDie CA RootCA Certificate\n===========================\n-----BEGIN CERTIFICATE-----\nMIICujCCAj6gAwIBAgIUPLLiHTrwySRtWxR4lxKLlu7MJ7wwDAYIKoZIzj0EAwMF\nADCBiTELMAkGA1UEBgwCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBD\nbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29ycG9yYXRpb24xIzAhBgNVBAsMGk9uRGll\nIENBIFJvb3QgQ2VydCBTaWduaW5nMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMB4X\nDTE5MDQwMzAwMDAwMFoXDTQ5MTIzMTIzNTk1OVowgYkxCzAJBgNVBAYMAlVTMQsw\nCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xhcmExGjAYBgNVBAoMEUludGVs\nIENvcnBvcmF0aW9uMSMwIQYDVQQLDBpPbkRpZSBDQSBSb290IENlcnQgU2lnbmlu\nZzEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTB2MBAGByqGSM49AgEGBSuBBAAiA2IA\nBK8SfB2UflvXZqb5Kc3+lokrABHWazvNER2axPURP64HILkXChPB0OEX5hLB7Okw\n7Dy6oFqB5tQVDupgfvUX/SgYBEaDdG5rCVFrGAis6HX5TA2ewQmj14r2ncHBgnpp\nB6NjMGEwHwYDVR0jBBgwFoAUtFjJ9uQIQKPyWMg5eG6ujgqNnDgwDwYDVR0TAQH/\nBAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLRYyfbkCECj8ljIOXhu\nro4KjZw4MAwGCCqGSM49BAMDBQADaAAwZQIxAP9B4lFF86uvpHmkcp61cWaU565a\nyE3p7ezu9haLE/lPLh5hFQfmTi1nm/sG3JEXMQIwNpKfHoDmUTrUyezhhfv3GG+1\nCqBXstmCYH40buj9jKW3pHWc71s9arEmPWli7I8U\n-----END CERTIFICATE-----\n\n\nSPT H LP EPID Prod RK 0\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDyDCCA22gAwIBAgIUFP7csB8Kaz+6qYApa/U5ePODHGYwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nMjE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVC1I\nLUxQX0VQSURfUHJvZF9SS18wMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAE1JAV56CfSDOIh7r0dg/PHIUVNiElzflhDHwp\nEX/NByiWbhyA4UNW576N8yZT3c7QrBb6wb+XAIwVh7S7H5tNmKOCAZwwggGYMB8G\nA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBTO/jMzkHM8\nZyfHiA3+Qpr+tVeokjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nBjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEF\nAgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250\nZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEF\nBQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20v\nY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYw\nRDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9l\na2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDaThaLirbr\n/xm1JSSFHfKhHmsbJ7x0yDZjv2zm5Dm3FgIhAJ7P/RtCFiLR4Rc71RTiuFnPtzDP\n2KKswXlh07upS5hg\n-----END CERTIFICATE-----\n\n\nSPT H LP EPID Test RK 0\n=======================\n-----BEGIN CERTIFICATE-----\nMIIDyDCCA22gAwIBAgIUUCX7DviKiMOZ0Qnrtpwh4iAaz6MwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nMjE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBnjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xODA2BgNVBAsML1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVC1I\nLUxQX0VQSURfVGVzdF9SS18wMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYH\nKoZIzj0CAQYIKoZIzj0DAQcDQgAEvwtQKK4xqt7P9BVqV97KxMCrl0d77BFxHFoh\nnHQcvyrMn5Ii6LI8m5PituUNHoDC9YAEFwThPJYCBatQEwPEYKOCAZwwggGYMB8G\nA1UdIwQYMBaAFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBQwuG8JTaar\n1SNxBD8r92aMeD8OZjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIB\nBjATBgNVHSUBAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEF\nAgEwVDBSBggrBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250\nZW50L0NSTC9la2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEF\nBQcBAQRQME4wTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20v\nY29udGVudC9DUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYw\nRDBCoECgPoY8aHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9l\na2NlcnQvRUtfUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0kAMEYCIQDpDmkAlkaf\n597+LAf0CZPQkd3wA32XR6hkATDh6sLyLAIhALQN4SDXyUkruniwUV6a13LIzTGr\nUyrT6NhX7IyMGv3z\n-----END CERTIFICATE-----\n\n\nSPTEPIDPROD EK Platform Public Key\n==================================\n-----BEGIN CERTIFICATE-----\nMIIDvjCCA2OgAwIBAgIUMTamuKIQ7vWud4lXF0aARJoRkSUwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nNjE2MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlDELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLjAsBgNVBAsMJVRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVF9F\nUElEX1BST0QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAATTGg8fSsqZoV/9ZPsWLey7Dj+uzbwM36xKquRhobztKGqdWLdf\nXBXhAzqgYPVNgqKEUfM8gG22RMFYQtL1rQvKo4IBnDCCAZgwHwYDVR0jBBgwFoAU\n6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFL+cXG+/gM3OdKvNDg5gBOoC\nKmYGMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1UdJQEB\n/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIGCCsG\nAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2Vr\nY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAwTjBM\nBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NS\nTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+hjxo\ndHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9FS19Q\nbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSQAwRgIhAPfXbrD4/G5IddlFUBtZjXcr\nVjEwAFAZewDQvRHW+Rz7AiEAyie0OxbA5hMBVLqCl4lugbPguMlyOTDWagHRox8S\nSyI=\n-----END CERTIFICATE-----\n\n\nSPTHEPIDPROD EK Platform Public Key\n===================================\n-----BEGIN CERTIFICATE-----\nMIIDvjCCA2SgAwIBAgIUbOv9CbWie5MIiWFjQaGYw+NfG50wCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nMzI0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlTELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xLzAtBgNVBAsMJlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVEhf\nRVBJRF9QUk9EMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMFkwEwYHKoZIzj0CAQYI\nKoZIzj0DAQcDQgAEryzECW6qpKxLE8m3YQwVO+oiea9EkzNEVxDAA/IOaq+u1MMY\nW1POaBQFO17J57eFLmTfC3pCtaBnB9mWsjFhzqOCAZwwggGYMB8GA1UdIwQYMBaA\nFOhSBcJP2NLVpSFHFrbODHtbuncPMB0GA1UdDgQWBBRec8iao+kCsnK58HQffYcw\n4+xySjASBgNVHRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjATBgNVHSUB\nAf8ECTAHBgVngQUIATBwBgNVHSABAf8EZjBkMGIGCiqGSIb4TQEFAgEwVDBSBggr\nBgEFBQcCARZGaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9l\na2NlcnQvRUtjZXJ0UG9saWN5U3RhdGVtZW50LnBkZjBcBggrBgEFBQcBAQRQME4w\nTAYIKwYBBQUHMAKGQGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9D\nUkwvZWtjZXJ0L0VLUm9vdFB1YmxpY0tleS5jZXIwTQYDVR0fBEYwRDBCoECgPoY8\naHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50L0NSTC9la2NlcnQvRUtf\nUGxhdGZvcm0uY3JsMAoGCCqGSM49BAMCA0gAMEUCIEwoRGZXyGrOi5c5XQ0sogO0\n7nKarDdxCHJjJmfB2j98AiEAzEpP1ysDBAD6k97Y0XVrqn4srCNv6132mRKeSw16\nwMk=\n-----END CERTIFICATE-----\n\n\nSPTHLPEPIDProd EK Platform Public Key\n=====================================\n-----BEGIN CERTIFICATE-----\nMIIDwzCCA2igAwIBAgIUEPCEDNlZEY6a2+ti1pgBuZBmXiEwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nMjE4MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmTELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xMzAxBgNVBAsMKlRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVC1I\nLUxQX0VQSURfUHJvZDEWMBQGA1UEAwwNd3d3LmludGVsLmNvbTBZMBMGByqGSM49\nAgEGCCqGSM49AwEHA0IABPKQW92/W43VEjmMP2CfqMyWb+3qfmR7FQPeAF2kM5Lz\nCD3s+Bar8Vh0Z+YDP5SIlCPv4AckQRukjvcxJnsT89KjggGcMIIBmDAfBgNVHSME\nGDAWgBToUgXCT9jS1aUhRxa2zgx7W7p3DzAdBgNVHQ4EFgQU+Z8gffyHl7/5DWQd\nJf1aRfdjELgwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwEwYD\nVR0lAQH/BAkwBwYFZ4EFCAEwcAYDVR0gAQH/BGYwZDBiBgoqhkiG+E0BBQIBMFQw\nUgYIKwYBBQUHAgEWRmh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9D\nUkwvZWtjZXJ0L0VLY2VydFBvbGljeVN0YXRlbWVudC5wZGYwXAYIKwYBBQUHAQEE\nUDBOMEwGCCsGAQUFBzAChkBodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRl\nbnQvQ1JML2VrY2VydC9FS1Jvb3RQdWJsaWNLZXkuY2VyME0GA1UdHwRGMEQwQqBA\noD6GPGh0dHA6Ly91cGdyYWRlcy5pbnRlbC5jb20vY29udGVudC9DUkwvZWtjZXJ0\nL0VLX1BsYXRmb3JtLmNybDAKBggqhkjOPQQDAgNJADBGAiEAoDkoa6IYGLI99v4C\nja5mbFdeiw783S/P0U5wflvr2/wCIQCFdAQhn0LDK1trPGCt1zciFWLQCHiIKyt+\n0xSFcMbXdA==\n-----END CERTIFICATE-----\n\n\nSPTH EPID PROD RK 0\n===================\n-----BEGIN CERTIFICATE-----\nMIIDwzCCA2mgAwIBAgIUPdcvRbMBVbwWCKuQoJwS9aTtkrswCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTUw\nMzI0MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBmjELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xNDAyBgNVBAsMK1RQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFNQVEhf\nRVBJRF9QUk9EX1JLXzAxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjO\nPQIBBggqhkjOPQMBBwNCAAQXORWWgKwKiHzCFfa8JKb47/d79T2tJ07M/wlclzOD\nG77q/BzxepyDZ22iXy+4jtEZURBPwIbRJxrXIoC/P/jGo4IBnDCCAZgwHwYDVR0j\nBBgwFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFGyp32KhquI+D+t8\nP1645h7KwXy3MBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMG\nA1UdJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBU\nMFIGCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQv\nQ1JML2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEB\nBFAwTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250\nZW50L0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKg\nQKA+hjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2Vy\ndC9FS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIgJozm5qfSmA+JPqR4\nJWrd1X7PslGTSx2Hq6U/jUniJVsCIQDMGNpPslwp5O+/tpaCBXQSPPtW5agKmEPU\nq5DsfzpKpg==\n-----END CERTIFICATE-----\n\n\nST TPM Root Certificate\n=======================\n-----BEGIN CERTIFICATE-----\nMIIEDDCCAvSgAwIBAgILBAAAAAABIsFs834wDQYJKoZIhvcNAQELBQAwgYcxOzA5\nBgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg\nQXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTMwMQYDVQQDEypHbG9iYWxT\naWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIFJvb3QgQ0EwHhcNMDkwNzI4MTIw\nMDAwWhcNMzkxMjMxMjM1OTU5WjBKMQswCQYDVQQGEwJDSDEeMBwGA1UEChMVU1RN\naWNyb2VsZWN0cm9uaWNzIE5WMRswGQYDVQQDExJTVE0gVFBNIEVLIFJvb3QgQ0Ew\nggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDxBLG5wcB9J0MsiJMreoWQ\nl21bBN12SSGZPJ3HoPjzcrzAz6SPy+TrFmZ6eUVspsFL/23wdPprqTUtDHi+C2pw\nk/3dF3/Rb2t/yHgiPlbCshYpi5f/rJ7nzbQ1ca2LzX3saBe53VfNQQV0zd5uM0DT\nSrmAKU1RIAj2WlZFWXoN4NWTyRtqT5suPHa2y8FlCWMZKlS0FiY4pfM20b5YQ+EL\n4zqb9zN53u/TdYZegrfSlc30Nl9G13Mgi+8rtPFKwsxx05EBbhVroH7aKVI1djsf\nE1MVrUzw62PHik3xlzznXML8OjY//xKeiCWcsApuGCaIAf7TsTRi2l8DNB3rCr1X\nAgMBAAGjgbQwgbEwDgYDVR0PAQH/BAQDAgIEMBIGA1UdEwEB/wQIMAYBAf8CAQEw\nHQYDVR0OBBYEFG/mxWwHt2yLCoGSg1zLQR72jtEnMEsGA1UdIAREMEIwQAYJKwYB\nBAGgMgFaMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQv\ncmVwb3NpdG9yeS8wHwYDVR0jBBgwFoAUHiNj8IW19iVO7RrAUL5lfMfUFXowDQYJ\nKoZIhvcNAQELBQADggEBAFrKpwFmRh7BGdpPZWc1Y6wIbdTAF6T+q1KwDJcyAjgJ\nqThFp3xTAt3tvyVrCRf7T/YARYE24DNa0iFaXsIXeQASDYHJjAZ6LQTslYBeRYLb\nC9v8ZE2ocKSCiC8ALYlJWk39Wob0H1Lk6l2zcUo3oKczGiAcRrlmwV496wvGyted\n2RBcLZro7yhOOGr9KMabV14fNl0lG+31J1nWI2hgTqh53GXg1QH2YpggD3b7UbVm\nc6GZaX37N3z15XfQafuAfHt10kYCNdePzC9tOwirHIsO8lrxoNlzOSxX8SqQGbBI\n+kWoe5+SY3gdOGGDQKIdw3W1poMN8bQ5x7XFcgVMwVU=\n-----END CERTIFICATE-----\n\n\nSTM TPM ECC Intermediate CA 02\n==============================\n-----BEGIN CERTIFICATE-----\nMIICZTCCAeygAwIBAgIEQAAAAjAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe\nMBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN\nIEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow\nVjELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEn\nMCUGA1UEAwweU1RNIFRQTSBFQ0MgSW50ZXJtZWRpYXRlIENBIDAyMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAE08t33aGM5M5aeBmzcn5H3HS31CGBJ2bbJ6fvJJ0i\nVCfZrN9sesL0D+NGfwtEklk7mgT/2vfW2dO9OqsyukSw2aOBrzCBrDAdBgNVHQ4E\nFgQUZi2PHOzf8UeotvDqKWr38kyt+c8wHwYDVR0jBBgwFoAUIJJWPAtDqAVyUwMp\nBxwH4OvsAwQwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYBBQUHAgEWIWh0\ndHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAPBgNVHQ8BAf8EBQMDAQQC\nMBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0EAwMDZwAwZAIwJl4q6QuGhqQD\npvP1gBBu8OhbQAXL8Rwhg1FWs8BvC4VYt6Tqe9xLqjbtbgR8UOyvAjAhzSbC+r8A\n2Wx1aOwAIqs1tmBXpofqcOXYeCSXKajOv5Jlzk6sDnEH2omN+ydt924=\n-----END CERTIFICATE-----\n\n\nSTM TPM ECC Intermediate CA 03\n==============================\n-----BEGIN CERTIFICATE-----\nMIICZjCCAeygAwIBAgIEQAAAAzAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe\nMBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN\nIEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow\nVjELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEn\nMCUGA1UEAwweU1RNIFRQTSBFQ0MgSW50ZXJtZWRpYXRlIENBIDAzMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEGaDrMY8uYdq3UGpf8Oi8yP4/JoFE1aHFeLdkqrQ9\nBPCMy4xEGttVycLMj5NH47v3tX3F9iXTJXsswarJMJ+bmaOBrzCBrDAdBgNVHQ4E\nFgQUnaXHLKAL4UuFs+U1yLB8g+hb3/YwHwYDVR0jBBgwFoAUIJJWPAtDqAVyUwMp\nBxwH4OvsAwQwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYBBQUHAgEWIWh0\ndHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAPBgNVHQ8BAf8EBQMDAQQC\nMBIGA1UdEwEB/wQIMAYBAf8CAQAwCgYIKoZIzj0EAwMDaAAwZQIxAN5oKo73+O2R\ngF10eCDioHgwLilEaXTqnzOxuFwrCd81r+R4gyDhtcMQUT5aaobJAgIwJg5ZU6J6\nW4dgPvUrPgJ6iMhRc2fQlJNP+DQbbsFP+1CSJmPP1zMPlBnQPUGN53pE\n-----END CERTIFICATE-----\n\n\nSTM TPM ECC Root CA 01\n======================\n-----BEGIN CERTIFICATE-----\nMIICyDCCAk+gAwIBAgIORyzLp/OdsAvb9r+66LowCgYIKoZIzj0EAwMwgYsxOzA5\nBgNVBAsTMkdsb2JhbFNpZ24gVHJ1c3RlZCBDb21wdXRpbmcgQ2VydGlmaWNhdGUg\nQXV0aG9yaXR5MRMwEQYDVQQKEwpHbG9iYWxTaWduMTcwNQYDVQQDEy5HbG9iYWxT\naWduIFRydXN0ZWQgUGxhdGZvcm0gTW9kdWxlIEVDQyBSb290IENBMB4XDTE1MTAy\nODAwMDAwMFoXDTM4MDExOTAzMTQwN1owTjELMAkGA1UEBhMCQ0gxHjAcBgNVBAoT\nFVNUTWljcm9lbGVjdHJvbmljcyBOVjEfMB0GA1UEAxMWU1RNIFRQTSBFQ0MgUm9v\ndCBDQSAwMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABG7/OLXMiprQQHwNnkpT6aqG\nzOGLcbbAgUtyjlXOZtuv0GB0ttJ6fwMwgFtt8RKlko8Bwn89/BoZOUcI4ne8ddRS\noqE6StnU3I13qqjalToq3Rnz61Omn6NErK1pxUe3j6OBtTCBsjAOBgNVHQ8BAf8E\nBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBATAdBgNVHQ4EFgQUIJJWPAtDqAVyUwMp\nBxwH4OvsAwQwHwYDVR0jBBgwFoAUYT78EZkKf7CpW5CgJl4pYUe3MAMwTAYDVR0g\nBEUwQzBBBgkrBgEEAaAyAVowNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xv\nYmFsc2lnbi5jb20vcmVwb3NpdG9yeS8wCgYIKoZIzj0EAwMDZwAwZAIwWnuUAzwy\nvHUhHehymKTZ2QcPUwHX0LdcVTac4ohyEL3zcuv/dM0BN62kFxHgBOhWAjAIxt9i\n50yAxy0Z/MeV2NTXqKpLwdhWNuzOSFZnzRKsh9MxY3zj8nebDNlHTDGSMR0=\n-----END CERTIFICATE-----\n\n\nSTM TPM ECC384 Intermediate CA 01\n=================================\n-----BEGIN CERTIFICATE-----\nMIIChTCCAgygAwIBAgIEQQAAATAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe\nMBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN\nIEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow\nWTELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEq\nMCgGA1UEAwwhU1RNIFRQTSBFQ0MzODQgSW50ZXJtZWRpYXRlIENBIDAxMHYwEAYH\nKoZIzj0CAQYFK4EEACIDYgAEwrRg/UAuBFX5QylytlcZuQqHKE1JtKGhns7bwVML\ncUakESdGmUwt3dSdi5aNe4X1bJ96JRjEYpUUjFomYEEqb3anra0XFAfkxloy2Z8G\nTTDlfkP8AkRF522SyO3d38Xjo4GvMIGsMB0GA1UdDgQWBBS9lj6a1XSq2U+tbL9B\nbdhbSlWZQjAfBgNVHSMEGDAWgBQgklY8C0OoBXJTAykHHAfg6+wDBDBFBgNVHSAB\nAf8EOzA5MDcGBFUdIAAwLzAtBggrBgEFBQcCARYhaHR0cDovL3d3dy5zdC5jb20v\nVFBNL3JlcG9zaXRvcnkvMA8GA1UdDwEB/wQFAwMBBAIwEgYDVR0TAQH/BAgwBgEB\n/wIBADAKBggqhkjOPQQDAwNnADBkAjAQC/zt1Mgvx2+ovDgwtDNh4r8aATdQIh/8\nBnR3oH8gkK52eYDYCKbZkIX1H0Qh1t4CMBrGGcLBYSMf8QF7pFL3/aIDSBPi6ifZ\nO0G2mVkmSFxkGJGg2UNAyJXH7WhK/JC5Gg==\n-----END CERTIFICATE-----\n\n\nSTM TPM ECC384 Intermediate CA 02\n=================================\n-----BEGIN CERTIFICATE-----\nMIIChjCCAgygAwIBAgIEQQAAAjAKBggqhkjOPQQDAzBOMQswCQYDVQQGEwJDSDEe\nMBwGA1UECgwVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMR8wHQYDVQQDDBZTVE0gVFBN\nIEVDQyBSb290IENBIDAxMB4XDTE4MTEyMjAwMDAwMFoXDTM4MTEyMjAwMDAwMFow\nWTELMAkGA1UEBhMCQ0gxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBOVjEq\nMCgGA1UEAwwhU1RNIFRQTSBFQ0MzODQgSW50ZXJtZWRpYXRlIENBIDAyMHYwEAYH\nKoZIzj0CAQYFK4EEACIDYgAECJl5UbEyzDbspvQS0gBHL8zTAS62iU9e5wzw96uv\nlIXhtTQ7btcU9gIRNf9SfI5ekiwprUbNRf+cqe7fyK/nUN5+s0YEpvUMtDh15L/k\n8z4fow8ELCLS2CpEwzmN4xIso4GvMIGsMB0GA1UdDgQWBBQIy7BcpFELKnMpkYTt\n3JzOQpESETAfBgNVHSMEGDAWgBQgklY8C0OoBXJTAykHHAfg6+wDBDBFBgNVHSAB\nAf8EOzA5MDcGBFUdIAAwLzAtBggrBgEFBQcCARYhaHR0cDovL3d3dy5zdC5jb20v\nVFBNL3JlcG9zaXRvcnkvMA8GA1UdDwEB/wQFAwMBBAIwEgYDVR0TAQH/BAgwBgEB\n/wIBADAKBggqhkjOPQQDAwNoADBlAjEAvU96UbV6BpxaFXyKo2HTZWWDhtPB9/Yz\nx+K/lzFGETy75ublxEQyzyQWi9oXXz/9AjA6YYTiblNw+JpBEIievODeiY6+QCAI\nKFz0g/sKyquqhYN1JnSaOau2hn6JmzUQXKs=\n-----END CERTIFICATE-----\n\n\nSTM TPM EK Intermediate CA 06\n=============================\n-----BEGIN CERTIFICATE-----\nMIIDzDCCArSgAwIBAgIEQAAABzANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJD\nSDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMRswGQYDVQQDExJTVE0g\nVFBNIEVLIFJvb3QgQ0EwHhcNMTgxMDMxMDAwMDAwWhcNMzgwMTAxMDAwMDAwWjBV\nMQswCQYDVQQGEwJDSDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMSYw\nJAYDVQQDEx1TVE0gVFBNIEVLIEludGVybWVkaWF0ZSBDQSAwNjCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAOvIjXBLbVBfIC7SFjcz4hm6R0IyuRJpJ45n\npYytlAHmoVosoT3isl52T4UB4T1r1b8y7Y+vW3Ed0sZO+m/pHtUc5h9050ynGedt\n0uvuNZ1cVnX2h/XTcdKIawqEBVXRZQ5OJMp/aDlUwsUeBT+SlhAagNhmyNw2tC2a\nb5d7qr8FU03Ds6io892aSD23z51yLAix121uUHIPmHByaZRnaKctTbu7ulwINlrd\ncB953Z0WVQhil5yjZs14yd4yAnA3Z1ZW+mrOkr8ehVsUbvrUxyfhMInMrETIxR4R\n9X5cTIVia2SVTtfqrb6XMC1/T7K1PH90QXtlt3WILMMNJhLDy+kCAwEAAaOBrjCB\nqzAdBgNVHQ4EFgQU+xfXDXNIcOkZxOjmA5deZk4OQ94wHwYDVR0jBBgwFoAUb+bF\nbAe3bIsKgZKDXMtBHvaO0ScwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYB\nBQUHAgEWIWh0dHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAOBgNVHQ8B\nAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEA\nOiwipeVJ4yK/hBF6KgfcCUltlqmoPoHyffzfpPjNBeYqmdaRqxJdbY9FaSrcbJBA\nhKRHfWYPCB03TnWstmfadgzbC/8mITx56Cb2EXpvYhrAu8G7a54h0sIhEloK/FAx\nZdgg3Y2tnPhihQ80xdqtaZRoXqjiqKq1p7IHwtQZiFCCCD1jny8qfZLCOYx50/mJ\nQXk8WvzPl0xsAOhp5Id6OAeq/6dmwjUBpZBzhwmbnt5kX7OKnuoVr3H+8X1Zycz8\nlq3znYqMaPWDTIQm6gnm//ahb9bBN0GL57fT6RuNy6jH7SRZYZ4zZRtAHyPogA/b\ngbBsXr0NrHh671Y1j4cOYA==\n-----END CERTIFICATE-----\n\n\nSTM TPM EK Intermediate CA 07\n=============================\n-----BEGIN CERTIFICATE-----\nMIIDzDCCArSgAwIBAgIEQAAACDANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJD\nSDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMRswGQYDVQQDExJTVE0g\nVFBNIEVLIFJvb3QgQ0EwHhcNMTgxMTA1MDAwMDAwWhcNMzgwMTAxMDAwMDAwWjBV\nMQswCQYDVQQGEwJDSDEeMBwGA1UEChMVU1RNaWNyb2VsZWN0cm9uaWNzIE5WMSYw\nJAYDVQQDEx1TVE0gVFBNIEVLIEludGVybWVkaWF0ZSBDQSAwNzCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBAKkiz7ifFip5eIDyKCNBVLtxSXFeuHBcLbcW\n25qml0ueAHhPRO91qL8G3Psay6sk47QiipVCM0Jn/IGb5IDOtmtZVWOIKdbSPBhH\ncbb1hBkGMaRJ8vVP4ccxp1z0zHITQItKgE1O//pcLs5F3GUKcFVBTIfISr7iy4lI\nCRp8tN5Cg8CWR0Vx4Dqpc4C/w5KG6i0MGacBE8N9eNYYn/MDohCG/u0pP6pJoiQH\neekg7xY7PAebIDeFUPwmwBDJLl0OW5kowTwFeY2XyC1tC0V8qjCajsU+gR3cw+lA\nCUyxM73w5MMzw1sw/O6oMs0oK1vGni0PoJdSeyy2jIM/wzKaWAECAwEAAaOBrjCB\nqzAdBgNVHQ4EFgQUayeAgAqUHLR++8q92NHwHVKb82wwHwYDVR0jBBgwFoAUb+bF\nbAe3bIsKgZKDXMtBHvaO0ScwRQYDVR0gAQH/BDswOTA3BgRVHSAAMC8wLQYIKwYB\nBQUHAgEWIWh0dHA6Ly93d3cuc3QuY29tL1RQTS9yZXBvc2l0b3J5LzAOBgNVHQ8B\nAf8EBAMCAgQwEgYDVR0TAQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEA\njaVrmwy2kAa3w3lSFxxZqryZxRKahsb3PW1iZdeTS4Evm49Q4DxtIBC1+xzkxWqn\n3drhbWIs425xtSXalqhK/4mJyZP1R/9MX+hr5MwJK3XPsbR2QiB/tm6dslnk1i52\nqaCquKBjoInhLONVedpN+LkKdsyY9PMJFY7fUTvaxQTsw3c0oovcRDgJwyvFrPL/\n7p/GH+CxPB78AjNx6PyTjF11pkek/xgC6WFZXnsy07BP66OVpBXQ3kGVCTZyxsCp\n5KgkfBTpo4efaL1NIdGlCYG1yzvly+L38xzc4ZQl2F8jRNgkgJE7QLWo0spZfb+0\nQLgOwf7kYnVR0b4XH70nLg==\n-----END CERTIFICATE-----\n\n\nTGL PROD 00002004 OnDie CA\n==========================\n-----BEGIN CERTIFICATE-----\nMIIC8DCCAnWgAwIBAgIUUary8YM8QP8LxFpbwX9fOtWZ2b4wCgYIKoZIzj0EAwMw\nQDEmMCQGA1UECwwdT25EaWUgQ0EgQ1NNRSBJbnRlcm1lZGlhdGUgQ0ExFjAUBgNV\nBAMMDXd3dy5pbnRlbC5jb20wHhcNMTkwNTAxMDAwMDAwWhcNNDkxMjMxMjM1OTU5\nWjBIMS4wLAYDVQQLDCVPbiBEaWUgQ1NNRSBQX1RHTCAwMDAwMjAwNCBJc3N1aW5n\nIENBMRYwFAYDVQQDDA13d3cuaW50ZWwuY29tMHYwEAYHKoZIzj0CAQYFK4EEACID\nYgAEvYVPp74Y8NgLj5VZ78ufL4Htrj1/6cPGGeMHVF0eceyleVCyGL8Dt7XlFwIQ\noV4EigEymBuzHiMtf2A5+S40X1ThScIGLJxz4R+ep5ahmFjwE+1GRNtmr0OYROZB\n3al1o4IBJjCCASIwHQYDVR0OBBYEFLBm2Wl/XToHtCXBD1h8zuzxb/5YMB8GA1Ud\nIwQYMBaAFGGaCniWiAPMYZCopT+QbXV8n2lqMA8GA1UdEwEB/wQFMAMBAf8wDgYD\nVR0PAQH/BAQDAgEGMGcGCCsGAQUFBwEBBFswWTBXBggrBgEFBQcwAoZLaHR0cHM6\nLy90c2NpLmludGVsLmNvbS9jb250ZW50L09uRGllQ0EvY2VydHMvT25EaWVfQ0Ff\nQ1NNRV9JbnRlcm1lZGlhdGUuY2VyMFYGA1UdHwRPME0wS6BJoEeGRWh0dHBzOi8v\ndHNjaS5pbnRlbC5jb20vY29udGVudC9PbkRpZUNBL2NybHMvT25EaWVfQ0FfQ1NN\nRV9Qcm9kdWN0LmNybDAKBggqhkjOPQQDAwNpADBmAjEAoqd5lTIhSdDd9PCRltWG\nrkKoWL9WtTTumjsyTUlVArNShDbcMzUem0kuF3LgVC/mAjEA9uq3U1NM3hXI8X7G\n97EtbtE6PwmHNhe6iE8Yr09JspaLlQBATP4q/XwNbtNrhD54\n-----END CERTIFICATE-----\n\n\nWPTLPEPIDProd EK Platform Public Key\n====================================\n-----BEGIN CERTIFICATE-----\nMIIDwDCCA2agAwIBAgIUC5Hmqvoik8flKVPI59DmCgzxcxIwCgYIKoZIzj0EAwIw\ngYcxCzAJBgNVBAYMAlVTMQswCQYDVQQIDAJDQTEUMBIGA1UEBwwLU2FudGEgQ2xh\ncmExGjAYBgNVBAoMEUludGVsIENvcnBvcmF0aW9uMSEwHwYDVQQLDBhUUE0gRUsg\ncm9vdCBjZXJ0IHNpZ25pbmcxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wHhcNMTQw\nNzI5MDAwMDAwWhcNNDkxMjMxMjM1OTU5WjCBlzELMAkGA1UEBgwCVVMxCzAJBgNV\nBAgMAkNBMRQwEgYDVQQHDAtTYW50YSBDbGFyYTEaMBgGA1UECgwRSW50ZWwgQ29y\ncG9yYXRpb24xMTAvBgNVBAsMKFRQTSBFSyBpbnRlcm1lZGlhdGUgZm9yIFdQVF9M\nUF9FUElEX1Byb2QxFjAUBgNVBAMMDXd3dy5pbnRlbC5jb20wWTATBgcqhkjOPQIB\nBggqhkjOPQMBBwNCAARnlS667lqURSpg9pF+DERiHooaLBNLhcDmX78UENUaJbli\nhshX290QqSCDn/i2kc+aK/Dfe4srFl1s41gG8fNIo4IBnDCCAZgwHwYDVR0jBBgw\nFoAU6FIFwk/Y0tWlIUcWts4Me1u6dw8wHQYDVR0OBBYEFBRRJtD9tT6ZkH1vxv8b\nkEVbnjJKMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMBMGA1Ud\nJQEB/wQJMAcGBWeBBQgBMHAGA1UdIAEB/wRmMGQwYgYKKoZIhvhNAQUCATBUMFIG\nCCsGAQUFBwIBFkZodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JM\nL2VrY2VydC9FS2NlcnRQb2xpY3lTdGF0ZW1lbnQucGRmMFwGCCsGAQUFBwEBBFAw\nTjBMBggrBgEFBQcwAoZAaHR0cDovL3VwZ3JhZGVzLmludGVsLmNvbS9jb250ZW50\nL0NSTC9la2NlcnQvRUtSb290UHVibGljS2V5LmNlcjBNBgNVHR8ERjBEMEKgQKA+\nhjxodHRwOi8vdXBncmFkZXMuaW50ZWwuY29tL2NvbnRlbnQvQ1JML2VrY2VydC9F\nS19QbGF0Zm9ybS5jcmwwCgYIKoZIzj0EAwIDSAAwRQIhAMpVy2h+suyYidBvlcW+\n+/BS8K3XIf7/o2MJqcTjaTBIAiBAJUlHfrQIUEVegRqtLggI7w8TZ4yHhJQodKef\n2DL6jA==\n-----END CERTIFICATE-----\n\n\nWUS AMD KEYID 578C545F796951421221A4A578ACDB5F682F89C8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAq8eoyzKCHHYjwAAAAACrzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTczOVoXDTI1MDUwODE3NTczOVowQTE/MD0GA1UEAxM2V1VT\nLUFNRC1LRVlJRC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4\nOUM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuB+qU+JHINdzN3pp\nT5CvL74PPXQY7J90jmFOQtqef0yQz+esViWqrYpGhysO+gbhJt2xkSGQZowoWsAr\nOr99GX9QCmWNNmISOphBvMpb7oDu5DFzta9bMZrdvIIlkSPF4ObF+Sa7soBSkJij\np1eBwHghORUL06wOKTwwH9vQKQzMwpmLyUF8J2o77OTLXH5Is1RwsGQVeXgL4/u6\nPUzLscqdjJ/TNp2WNKu5PxPnhKjunWwpBn/s6w3GG8IpiXKovfwboEgIjYMG5url\n8f4ybBV79w68ycnwKrKZvDkqMC/JKrAYC+k06pyOC/iMb0jy//oU4CXRLCMOf+iX\nYH+/Q45pPuGZoQWfg5OL+sRgkc84Ju7F20DHbdZfDzffV2tffFCeYhWLHEzuiEHL\nUNCWr6tJRS8NowuF4zhVRP9QECSKK4XdzrWFGqHENyRa/2WYGFKqcPAC1wDkldoI\nUZ0lxpvoq4MWZ7dh8st0DNWrM46ycs/iRKMFA26+eyqJRObTL4NFnJyLD7l4Pz+M\np1jw0ETLx8tWeVzep47Z4GFbmHbwuyycCc+xOlz/AIn0jsYsZHOCkR+q8JpaWPHs\neUdQIDuXUgCxx8s3OsgqYjSOIdzIN43POm/zAvXEzVazvH4tq32Pq0+4CE525AwA\n5L7Wg2CCw+AKgg3EySeR3q51+6UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFJ+doSdJBnh5Hxa\nrCr2RgJBACGqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALKxyT/6xd4bP121UojOKMZELg2PZwJdd5XrwalZsFIeh\nY7q2qmr6QWYb+8DD+mpBSr2WPmxTqFeHhTEI//b6f0FgwbOyP0YakZzJI8lKKq5c\nVtY5Bl8DuZd5kkZRrfg0paUSJURcH8MaTowrvWAgM8EI+Y2ALhDXzbOiAG+Gg3SE\nfsWOXixDU72fFnApk+6xKZfZ51HBsYMpNl1Dn+em1GUlcHi69K0kByAXq+R5VYzT\n9TQrLxRmPYfvbLO7+A7bDpXMMzXoIzYUd51dTPueEKLERfX+rKGOPLXYHb4+hQ5g\nsUHqDFFD/HTsattFPgLxxb6ZUJ6dxPjY6g4rZ5YgrkNRuHLqw2Eu2QTHBz81XJWG\ndmkHmA8H8ZLbOG8EmPKe+3TZnZUPjI9VQ30C4bOyI1Ob75HVA8IHcZYqO6X5Rp+9\nV9vliymSna/SV3og/XOKfuUvtyL7zu3NE6D9jv8nAmzp30esHcCqZeU1sFNYfcBQ\nndqRXCEYeBX9i8GAjld4ucJ4daCuXtqRRpHoDn7vy1rxp3qdM78ej+aJtvq2BodY\neZfDJ0f4gkUUHFQCK2nUzJNaeQYH4h31oXYiWDO5m36Tz4ZRtVS/1TGZuo0hZn6+\nJ7ban2z6vJjPwTg0dZWV2xeKy3EhIobl7Mn6KqdTAEFud+EcQfwXv4QCMzpi4+4=\n-----END CERTIFICATE-----\n\n\nWUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWoR1wl3bZo2zQAAAAABajANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgzMDIxMjgwMVoXDTI5MTIzMTIxMjgwMVowQTE/MD0GA1UEAxM2V1VT\nLUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG\nQzRDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx592WnuZH0dj5TVq\nkpmmybRPfb1BrsoPCEas39kRB3G1dudaMCoEMICP5OqZL1njmHFBcT6Ig5WZCzgf\n5iPYCm8kUODTR6JYjztVQ45bTAlZZLzuhGCaIuFWyUmKT/R/Xq25j/24Qp6AAJr8\nQABkjAJCWKUKS/CUu/4TcyKLvHXH+cn5O5oJXYE5EfkiWpPjFySpsVfL/r+EtvkS\nVaj1t1a7I8zoZ/7+OWcBgRpbwEHHE8uXMCCURZmzj24KKKlGIPaxpEidRIfv6nN3\nnJJ+msIifWgQCyfK4YTZDKRTNpXRfLnhXhzKDjh8QvWAwNhVVwFZxgoc9J8M63aJ\nrp3XzQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUeXZCiC59MXA6+Orqph7mHcMdfIIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAWPykE\nsMmHrRPqxcc7fXN4008rTGi1jZZSiCNbDOS7Aomung9kxaqBjY4/AgqNs42j7Brw\nfBemIlLW3L7Sk7/0t3+VvHWvUhSndm6+MqoFn1AMWYfgJV8vXe6zJSLnrUuQP5j8\nqvDpEKrN9JE003mE8ZdmjTOOFuAuEFDjJaWrXKRH7phYQJE9jYtciWg0jXwy547H\nUTh4QI5Ak4OBuaIpBO96WhFK6XVIGiopT1QMa6f1zV38bxsrV2k+LlfubVjju9t6\nmQ1qLI35xZc80HbyDEdjzeVcEnHQI+WwaeZDVfBDEFTA9pi4F1DcCFo5Aexx9lbU\nDLcqxtpQx1nESSiDEca8GdOTU4MpHxq9qgN9mlIOxlpkO2pehCFPDrxRr4h+Ue33\nR9IC+vGZd2b44yj0frebDyxGsSCkmpEIdetBPd2Um4O+GPO74WbwJULZXOO3eJMj\n/dnQO+i0IScqbVHoVdLFG/04wVurMUeVH6k+OAdnY59wF8zC2+qRokidpQlQI5Pz\nvQa2s2k4fx+2hWDP9hsWNz7uKqoSmoWAOJF1ZoSryLs5klUNSEQOsGKdHLOmZU4Z\n3K+lz4P1K5X4+pLAZHiPUGOF4sbocae8VZKPbuVsFqAYz+1CAosKgZnUxjGindI5\ncoPU6OPCuZjh8tUusRLHtc9Vwn0XnGY1bmEdOA==\n-----END CERTIFICATE-----\n\n\nWUS AMD KEYID CBB3F726E72C37BF7E9C6CFAA6EF06F88FD1FC4C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAoW+Y3z4wm7YjAAAAAAChTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxN1oXDTI1MDMyMTIwMzAxN1owQTE/MD0GA1UEAxM2V1VT\nLUFNRC1LRVlJRC1DQkIzRjcyNkU3MkMzN0JGN0U5QzZDRkFBNkVGMDZGODhGRDFG\nQzRDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzWa06N4sIcTQ8ICu\nwU2yxLVpz+CuS2vgRoMauNMIMEYi5pz82MAniOnux0jGua4Nmd5d6UFk0ZTSUEqO\nbl96gXCH1BMkfXhu6Qp9T1g7FcNF6M8suSPVL7y8TwntKr53/jpXDps67b/5GJPb\nTghrzMdqoouQjC6PiLvTUHUJnm2W5zELiU+1L+mnKluxTDZE73BsWWetuUTPF+lh\n9j4ppolskuqYxXcbr9ln/dYRnUD8hox0010XwAWm3yPd8WZfU+DfQ8V5BrZJiqIO\nmHuG3eKIsvzdtYpSWVU/iQvAa0ddX6Puxp/1ajuQoDrVm1iZW54qXPi/2Jkuc3HS\npxpMtAmJVT5mtDkVhk1+kJdYVoWX2Sy+9CYIYnTjqdRI+YtAAFTxh6XEF2vBO4Nu\nQTg7OaiQpqFG6vgvL5tYfQZDb7arHdzzHAHLD6/mopHEUDGOYVQ6yRwWdnsaQID3\n56X90R1ahqDP37v4AgjcCzuyLox3o/XKU81p4yITKnU1ZTBaH2Syzh9l2YKf2oqZ\nNe+VulYflW/fOS5+jOeaSAsiDscHZB2eHsnSCBnTy1LnuG/Kn/ljuFLZV7cEBAff\n1MPtVxalw+dhbh7qwD5fgoD8dovMwXGK46AwcuWPPtLGIwRCBA+DXpbERuPuDHhr\ndLLZhLPpMXatuG0XsZOpHBaTSocCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDO5mzXnw8RZPHn/\npxBQFcaC8YxPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAVJxckOs/tneXgknkCwY6NMlftDah3UsMcmXVnWdxhKK+\nOPygqh5IvWJdB7A9vEXBsYEVGMbflxH/LnQ/LwEgv9hMtaOvJm9wCS7S3mDXrVZ6\nm7PD6qGMbqe+4DiHj9LUaMdDvcis1xAIr/7+Bz8tXsd40Z1q+AHsaKOg2KeqLq86\nxwsjV6YgIv4WfaBfxJbmmnyP/qSb7oF4Zj/TUzGkfUAv6JoN3siC+gAvD1QrInWP\nRyQDXZKw4HC9UQ9vXQxvqG5t9vmOlnXraDGRFnZSDuc10ehuwGJirsrE/LjYzdoY\neicYDgzE7Mx+brJXV3eSPSfJFbpXfPy4+nxhHTBOLaTqtLHolh/YyXgdwOmBgo8a\nKNUrKqzn8ab9VNEJBB6uB298moh9Z98nEbJyDZAPXWy3CCRvhw/VVoNRsdb/N7AP\n5+WlkNa0dZi4CxcBnc7HKgfnR5M9qDUdnVsXH49YfcLczCT2JCMKjIWoLK01ndsi\nLj210n38vfPpVhJoZZN9Oc6jfkc/bTOFC3HU+dzIS6oFHlBoEZ+bNiSIYlEZm09y\ne6bxiLDRjatSQZxOzgPEg8aO0H5GbgpqDhvUqR3ZHLnIcKT5BmuZS4YBcdYD9YTA\nU5DBp9ATN4VLmBA9qk6OLwAXQqHO/Ar4YFvwhPmfC4uF2uAE49aXpBzJxVvYyrQ=\n-----END CERTIFICATE-----\n\n\nWUS AMD KeyId 578C545F796951421221A4A578ACDB5F682F89C8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAFhvt3lr9LiMZAAAAAAAWDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEzNFoXDTMwMDIxODIxMTEzNFowQTE/MD0GA1UEAxM2V1VT\nLUFNRC1LZXlJZC01NzhDNTQ1Rjc5Njk1MTQyMTIyMUE0QTU3OEFDREI1RjY4MkY4\nOUM4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnrkwepb3eCTJj8Md\n6qB3kBAroPXdrlxPD5b5S5jlaLjEND9TjMkSjRQUy8044GT25p3Jkz41MZdMHraw\ndZMkw0gFUVxY6escXqWtCvx9bA/YOLkpAB8D5ktxiZuWJPCfBTpoJe1pkJjTduLH\n9zQ1IC0WXb1irjkqsBlj1gUT62TS2rC0okkLDsSTsXnBWX5tfLeZ6fV8EnvsvGd7\n0bO42HiSGbGbtXgDF6JOQ7LxAPvzjKxgbYwsPL46pnGdbjlVs3bbj0MKLmQpfXat\nID/Kn5NfKldNMD+job4+Vi439PUz5UBe9ixndl+2o3nbMlM+49CIrNog4qhBn1Pw\nJSviGQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUCwYOtF2dr/s/aR3ZFWEFIc2lQ9AwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA6+PdY\nNt3We5x21qyfDPP+jnEKRoLlMspiNz5VrK1WQVAaxUDDKbQe974EqcmL6mS6iQGa\nutu1aekB9W/GA4m2EUrLPGToUzxdiB8XP7pV6l94RuklSH2uaGdlwU4/wW3ImTLU\n0o/R+FpqGqzHLTOhWPN+eyHOsHhijOCCB36sO8Hj9cjhHmR+fl1YxQMK4lVNbsy4\nMdxX7Ca2AdoaFoROV02g7GcV2zx0SSpsCSV6bKbaBWGryrFxjyj1rb7R8gJ9FcyE\n3i9SrsKrwC8tOB6knSqJhGgojiI+/wljBTZkhwgNT3jc0zT5bf5RgkT/015XfgxW\nbZnmtgRKFggyVKKzsiL0sNka7ekiCKo1nVGETJfojp5uLjZHXXMaQcsEZY0qalpf\n5z5b86qZUjxI61aLhoLK5nNZUIzC55keYLYmxtKx0yMprBvpT/qKcGFMWCotzTe3\nZ2r2AK1eH8qTryIqvgCVwPKArV2tvAN38487p74yuRC8RlOPwSbHrLOUZNopppGG\noeiqC9igClx6QsfI6731/b1B5rIHBKqmiM2+WHJ0i2MVAu9NFcHSYxO34ZUUt1gN\nd7i1ZLLEhetzTVm213BFy0pTb5IrrI294WdDbLP6dagQxi1Qmx2leTPW/96CXZ2c\nDsn8ZppF/IJByQXbpnP8qkNNAYgyN/QGqDanEw==\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 16B341E381CD5C3E799AC838CA17F1F7F3F7431E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAodxKt3mMhCfOQAAAAAChzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxOVoXDTI1MDMyMTIwMzAxOVowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtMTZCMzQxRTM4MUNENUMzRTc5OUFDODM4Q0ExN0YxRjdGM0Y3\nNDMxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOsz6janSLT0BbKC\nCbvEtAfpKfgtawcvujouIv/jpO+L6k37FqNw+o1X9cRcV+pPZU6N5KCiRYbVmaRQ\nHB7t8TD08T8O1BCSJsghJx8KzKIf4DxQIMO8a0ZDF9urIb3cQAXmtTddzTFZPDxh\nfeUalj7zyVD4t6lkQZQhyBB3tKUPGSEbLSH1TwTgJg7DZOnKv6/pohXEDFZxpZJe\n1Ggc00PhAlzj9uda2suq2lnbU3MJbuQJcRs8ifFOot3ER/iNNwoS7hFA4FDihDn+\nUnsFcN2lR5eIFF7A20ovfGiXRvrUGNjCcHKpms/fe63czHmtEXog2yW63tQuZwTh\nnNShkl9ZtTbpDhBkaOwU7jEbyL1m4xI/ucT0rgRGQ5DctE8ZotUVSBw0SxsskMRn\nDLgSUoRIxeoJ/I+xgotVG7qW4dbfUoJheDq2pp6aZ1q4On40f0x7K04RiYKsZTIC\nVNV3ejNaH9nzo6ABJo//bZ89zMK36+fjfF5tFsFQQCC79oNWzlwzQpGrfrrfmSGL\npkbakvrdxXcujnuL/BkF+3rCJxekm3BqzkpugMRJf9jrB+tjC3AXQnExAGgHiFiJ\nsvLLNv2Y9G6wBDnJwV2kuAzfXcktN9AG4jHnDLQcl3aAO7EkEZQUeT+hs+MFFRaI\nYk4NZdl4mKzTtAPbSbThFfjJPCixAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT6OoKh/+iHbcSm\nBAoiBbpdFPnUrTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGdx2zyBqdf7N8E9PsSpBddFYGE+d43wPXw6aSWiNDaC\naXyaxprZ2c8+byXjCJRKdaICtj3MFXmeUtyL3ZM9VIuyMYC8r1hvFTFyFRWOdSTd\nayqhkrQuOCD+W3AMx+5VsHfTlrsTa7jQnEFXGgg14cd/QBvyssMihaW/1kyMubZ9\nNd7M4xf/XzMdUXEq1r6P/rPf1PzX3dgtG5nYXrURaUjC/fov8JKKKqAcgEN190Hs\n+BMWUzPc+fRst3Grihie/L99ZfYq4TEEKbL2IlhSlvdyxVniQv0SIrOYtLHthKmw\npEykzQDLb81bvhFmQKOxLOiU37K5xCPJewJQvZhhaBfBte4aMb8T5kX66NglVf/4\ni1ZFf+QCu4YcAOfPQNclfkUUkMPMGRksEdGSEhRW15vM9MUbPmEJ1JUELmFNYu9b\nmyRrvf9T0m/R5ajVEnWzSFbVCRww1SMbsktPqBsET4kTg7oiqyrsS8KLTb8zgeMV\ngJQd6EVJ7q59vc7IvD7Nce2zLU9SPL/AfW6tPqaGyW9puAz63nELPsA8JiFhM+/W\ngXXLJfP9hNranFnCciFW0h4UwgRxLvBXPB5/XY5c3nzLr80HoXohS5VoIJmMac7n\nMuyHg+KJQUcCDDn0TBCNwKrVJMu3Br63o1pswHTY9oAtd9cHUTjRZgxZ6VBh78WC\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 277631D059FA7A9553FB59DFD6E85BC122300FF0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAoxY9n4u8kANxQAAAAACjDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyM1oXDTI1MDMyMTIwMzAyM1owQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtMjc3NjMxRDA1OUZBN0E5NTUzRkI1OURGRDZFODVCQzEyMjMw\nMEZGMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUFVlxnd6vI/STK\nPvRLHD4/tMyKMTp+1x7sw6fQxVwoAqAULiUX5JBt/sdkVhP/LAvenJ72loXFrg3u\nxU36WxVDV5ZK46+pnkcoFGQgTlONhgFKRa9NC7mZJDbPyuEvR+bC6hFn4lVm7h9n\nV5Px+RHgwsJ9CCuW4jU6GchCktLI4sqUlqhdkyCJJpopo1De+zQ6URccDnVY9IWb\nHyGPuOW+c95esc22UhiBgH//WRvgUK8frtBaNvsik3PGRTg7cY4nXB+erEOosdkD\nNo1uzEHo0cPTsOa06RAdXTgyXj2/7SmE68qWGr13Vboo0FwIBmbxzVD0ECKlDFVK\nYT0Am/gGnlZl9lylKR5KbpWoyw9S+rFWmcKvgSqt5YgcMY0mPuB6vFe8WdKoNppQ\nDR3mFyCJ6hszwhPIcIU3OZNww/g7MaxSxGRYWYAv4mHA8HX/wvDAGUHwxrrXM4y0\nrXKOFdIr27Wgb9YbwlOxam4KZO+FA1HUG2zzMjxJXAhhWIrOSVLuzQjZX8nOS+Yy\n2Vb5VYf790hp/Ahsedr4wC206ADBJem23WZOkHs1draQNh48u8ErSN/lrBhBMpy2\neVn0rTzJisG1NvMVEsuR2CjERzB92AruFKu3SunWfQkljBVUTulS10cUvyYn3H4k\nPjWrN61wRenrQuXlvFu0/Uj9W6vTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSu/4h+92tqxORt\nhj18bPzC/0HK5TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJBt0/rwAfq/lOI3NpxlTbPS4G38pJGn3RYnq2DwmILS\nqaXYfVXRRtDS5kZdv2/pV2GBuHQE0GiGdMbs43SDwgaEpyaJLULdYGWke8IDJZKR\na8Gl8ACIyEC83ZcO5SeFZHPecaPizX9PXnHZmFMMdYQeYNMWkkozky+Em4Mm7olG\nIXr2l9PwW1VimlV8vLgvE3tDLDYfvPkmITX6mZy+2HYqR/KpgH4P1lX5pzy0VoZQ\nHG5Ti0QOrwjxFBWgr4NiK+g68JeW1OukRiDPKfUfHE59o8qilGwOxz0ZTsREfEdu\nPYcMWP+QZIwVv7OqyRfza4iRavoRWa2Bq57VXZ0mdbvK8WGHdga2nVutBVnR2Y1C\ngtO3eE0bLEvkGJ9/uaem0Jr3xJ0Pty5rQ+dUuYiJDevACLE5vs3fWTvKjdZXVLCH\ncsK+jGJ6zrYm7v9Ffl0PgdfEjf5GNjHTSbPgYfVSJHcIo8Bs7BgBFA/XQMARFrm/\nqKyiiBGob4oHmALS2Q7ztOMoOw9SfP/c+fM/OiZdcosvs2avURfxa9NzmvdKQkdH\ny+FwywkPb7qen5xDTAGXDQOLXzd1ueihjvnYMzsVLYlJPhMjqfyDHVYam8/6XpoU\nxu944pNLDo66exmr+4u6UXL+q1ASLAom9VypFz7AW93Qmxi7lwWJvlM/YVkTdP5D\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 2D605CD882B2BD716CCE71C90BC774D3D5BCB1D4 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAoYLkkqnG8joiAAAAAAChjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAxOFoXDTI1MDMyMTIwMzAxOFowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtMkQ2MDVDRDg4MkIyQkQ3MTZDQ0U3MUM5MEJDNzc0RDNENUJD\nQjFENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALoEUVY0Ts/k4R6z\nFMMd+1/mKK6s7eBBXqTo3oJZKiwIhCC7aOvvX61mkapTnffEacHBPzgWWTwLBq6G\npS5WQQLbmHL5i/UNVCbY29jXMAnLTTWBCHelnwps0hoCWxhQhqhUZvuI5a6rtByS\nz+IKdVjMgvdxGAuOJN4IJZtm4tsPjaHW95v9hD0TMQyRTq3Qt2OfnT5BlkQYkD60\nlIZetHNnWVLZYa2DTdycBPgx+YSRmD9BwzdepH2nMSvHLKifmWLSRZHukmUN6eeI\nQI7Gdx6Ca8UTbKpdyur6MudxTDMYHGdid7tcCj5jYZDbqlHSCQY5njmgaVli7ir4\nKbBMOeYcWZSSZgq73n7xmlVJHoibzi7Fo3fA63TRIV/Chs3dcgNjCmTS8nia6Ie1\nv99CLlENkE/OnEUUBMWqcnw9DiiJ9TEyNyN26Rc4ft3a/Ed1sf/RQdJCfUbTfbdU\nIjuj4b7mK0vwYza+w1dIroErLLD2o663Qn9mCoqch7JYVdIE4bEKigUrgBvYIC9f\nVw7fxqDo+ICJGodqXUQAFuKGelyEXqd4M5yhjOE2F+YDpHw946xWXDVB/azqwK/b\n7qNM94g59CSuVGQi0ibxUX8RItAYdEyIygtht5lWmpe6zIkK6dfCWCYF1UNbS3yH\nfFeYdEVzVN+WLodfmqP8A5oV6BUjAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTT00BpubpvFhJP\n9zHOT5tK8E42bDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADjBp6f3EwzvEdpGJaGApKcc9qHj+45psldyNEKAwZtq\n9xaJ6BXWXgSDFe5R28dyq3xPBLEYxilyXOOVXM8rTCFcOgUXFSET6ItFVLM6KW1/\naMdASdPXQupKkoiKyMyKAPPAeOPS7+tAIQXcJOGhJHcpGPG98LGN1deUqrrCVVQA\nChOvXFlqYU3992mI1RV3UWkurU5lLpXyPCliNgm8CJbTi5l/nhtFEhivKFvzEjhR\nbOBCyrWGMzASb9qkGLSYaxYXQrIqmCAh9mAa/UjprAlJA/CyKIyr18o7m9epFGpD\nK4sixUomh30lvJAqBmcYbKblKHqMKVINGk+thZE2M6n1IGrPiAtfIfHEE3vm+zlg\nujwlv+RQgQXbj4F4EPm0BIjwLIgkVCvInOoeWqD+K3Xs76y648Vc73xlV+B6jpps\nfgMDO9nW85zYT4Ql1Zr9K9s9aajm0aGMjPYIR5BKIFrJSCyVmdHUmpKSwMfY3SJI\nOCfZsb131/pISgfqv8+pVUB3GiOb/FF0PMfxk/lD+d2qwZAlCL5LaHtPiNwRfO4m\nQulU4+TmRhc0atLcx9qVS3tsTaEhgMTeSJLIUAm6US+Dg2dUqVHgCWKAfQp7QF53\ns/KAxtkApYf8lPIYGB62QHXut5XwKahxAyO/EPCTmVKgmhRngqI7mfqr6hzyQbBj\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 35AEE736C9B4D2861309E7815C0FA4CE40D865F6 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAogeasmxkeWYwwAAAAACiDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyMFoXDTI1MDMyMTIwMzAyMFowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtMzVBRUU3MzZDOUI0RDI4NjEzMDlFNzgxNUMwRkE0Q0U0MEQ4\nNjVGNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKQPobowXfeo2eOB\nMD4gaqNrbamUX2+85jPQfId3c7IzEoREYS/KO7hAavPwBrV8Lior6yeUKSqBKmUm\n2JQgnabNb3s6kKooZJwJaiyg5s2dzZemJgFDOQpjO5lj9Gef1IyvYfU4zPRwQYqj\nGb8oyBLEtS3QMVno/bXHi/zB0X2FP9kyEPPCrfo5sfwEYSPzeOQ83ZVKi81KRKAn\nL3IbuGigLXF51DTyDuDIbNXmsgzv5TTNPzBxCUuW5VUlboMx0biIkDchMBW1D0Bw\nw2l5W+zncGSnfACc6esYhfXLC3bapDj13vOSgfo3lJxgKfP53R9HF11BrDazNiE7\nXNFSENy9SPj2YQNAkidpJ9HYRxF1wZh0Tj4khB2Oi409lPMZ6E2FBeUXfP25IH+D\n5mmfJM9+tQ65ukyJA+kKGLJCcoChXIhGAD+LzCEz/mD0rpADw5d5YpmEqxvGJXYt\naO5JuIPjoJx3BDnbkT1k+610bT/i6glLgErSLh1beWismNMb5XlkVKVrWLBskcW/\nP3pQ5DQaN1Yf0YRIib+DpbuwBNpqn8f4A/CdittmKXjaxPbgapzOE3yaMkqCBFkZ\nl6/gLh8g/cXGWGISB5gCdPS/tongHU84FdbireyPhgyRscX3t16/w4cCeqoOb3HI\nx9mElu562o2LiH65EszYiLQAVTYBAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTvlrMMl0L5GPq6\n5Cllds+UO2SftzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAG9bweIqRkz0pZS8o4sGkIzroQrWAIeIG1js5Gt7n5XV\nxL5aIj2i0OzsJTqO2M9yZWEhyEznDCQupSrZZCql8vMQ9ogW3RYRxO9QQhjjlE7E\nF2i/3iZYiDxWyXCIvthEsoZTdL2KwOoMe3kng7MX3abWKJh1ebIrIJ5AwKEvRAmw\nHChfGrATt5cfFoqsDdCRwQ70/VfySDYX1cJCQQd7qcz6qi19/2C4kM/8mpVKvPGr\nHbjxMg5UVENk2Tw2Mi7h7UPtXFujFXKIzH/f7G2Iw+jrrEebgsMdF4ZNm2N4MArG\nGiXTFf8nvvGwW5cWHFNElu2qp2Grr4O+WvdpXi3uIV2ihSXZxDoMbJ/ue14ASOw/\nuQ60rTxxj85TjISs1lsBdx/EqtVf8HLyhSNCcr6g9KEAHNAvkCNyR+a41ziyOka9\ncG6HIGSbrzNlHAh4sJ/uonctu82YP+MSN5JZjq+fhdZSCXIhVSGh4taqN9HAuBf2\nwYmgPRns7rifqAoV9Mgzge8skODzxY302cAj9xoYZ03lAW51+RmGWBsyrOyG8Gk9\nBYgtWvq7HLxRhmdYCd3SBcmYScVQ179dp7UskF93b6bvAjXrQU17MRA7/IdBtqHK\nOqu06GsSEHp2jLsjsMMhnlS8L8GZsKPFhTdF214xTVzZcG8TevhHsIOIxCHXLfLM\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 4666DE766204E74DD29BB4FDC58523A1403D6A32 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAotkfvyMG4yUwwAAAAACizANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyMloXDTI1MDMyMTIwMzAyMlowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtNDY2NkRFNzY2MjA0RTc0REQyOUJCNEZEQzU4NTIzQTE0MDNE\nNkEzMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALxyuHZBjrrUWKME\nppue4AdbJgTrlLYIZ0vwu14pKHywNKIGbRhSPWZ4T7D0/98P1c1i15xjFP3ULQXE\nPPEqzaOE+CiOw+vUZA3vlGpu/zGQsrUSrSqOts8SXR3RqeIVgFMF2wUrtnvqT7FY\n0zypwnxHYuVeHdC6w1Tu2gvduC0djJxqpZm+rf9/pkoxRPoxB1LgPJ350Qi/RsKd\nrE06mBO/lKyuowjIvTWb/ih1BPsqVEBW38qN/iNwL9UGeXB2XaF15o362kp3YCr1\n6RLH+cBgRz43EoODJT8nI9BJ4Ko/YlhJ4vbT+PRUnzsy8uv0j8hWcpVlBZsb6vdf\nsrbJCR9Vv6vr/B1dOIhRaO0NLmB++hZ5HIpEAIaczoQ7zEeMP9d1YEcjqZZHOsxp\nS4va6Z4ox7EfHkkrfeL36FFnv5n8W4ulpA3gFXix0I3McDXtGHwSCbyZzIYAwmOR\nBCCOptRDdSZIQsOu1i+9T4c/sEvygDcCB33Ep9bLNwgPw+HBywc7jGMubNeYVoNp\nEbZ4PpHczZWbAyWmGZM4CFATs+U9U3E6IaS2bx2sPNzvRZV7FVoNCL7gzWxYTkjR\njx4UuAJepcNmB6MEeO1bfOM0aTAClAN3T4vffPx/wKEXPyjv5ueFBqOoafozmdDs\nVvxBK9vstz3pP2bkg+XM8ECZ6OMvAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ0bYcg8ivbHFNK\nXgZbR52Kq8CmZjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEsLFKoR1tFRHRHEKVFfq7+ad3SdFQVxGWmuqvJIy5IV\nr5HlWWxXSMDzWtultmmPUBqHi+CHcWI7gXMEBfo/Wrp+6cI9WyvXSc2EPKOUxtsX\n259F4ZvUKsRAyCX6gwcrROP3aqFVHELOzsGEPCVW1LzuF9xuWMbO9DuCMrMD+ou1\nvgyOsDmPNu5T3nT2clMjkrq771uvJM9UWu1pgK9ED7lH6GP9MXC9FmaAJEpslnI+\nRNjhfNympJLxLSDL64b89esSMdFmwqHp/AlmcvSIeQs0eg2sbziOKjZDvX8NCKW5\nJrfSHgWm8Uu+Yg5yNgVcbIOQgmZmmc6QjDqGdx3CymwnCsCz47Cb04QBYC3doe2j\nBzWMvu+QstcPMse6+3uZmPSUYz2FYP1qrEHRjiBCcygYaohsaOUn29UoKjKuDXso\nhaSV5Pc//RvwoSlTTuYczgauUOtq9clKmaQ7wWQDc2bVGl6ThE4pO4Hysc3ZBQKH\neVQo8HQfjd3k+CCLiDvUQ3pam+lRZlzRzCU6UVsgid+IQ1ugF8SC1aQJE6+BYoxM\nRASeKA+e0VmcRTo/1PHwnJdlFFonmtM1wcFXwskLUiMXyREzwU3hdLCKYJtdlJcr\nd32cdmua/Y78QEcYaZb6YXrLZK4E80vANmT7Szwc1d0JeH0wyROH5nCmo74Ie4hF\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 55F4DA39CA65B6681F2B7711BC3EF208A8679D1E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAol/Ff3Fg+0KqAAAAAACiTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyMFoXDTI1MDMyMTIwMzAyMFowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtNTVGNERBMzlDQTY1QjY2ODFGMkI3NzExQkMzRUYyMDhBODY3\nOUQxRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANbh4cK2jnxL+Twu\nZ95Q2RI8rfiOprbcE6dEd0nmcA6D4SFehy7A7iJ0Cty65c+7uRVMo4nghBMu1Qsj\n9uNnge//Zc2yKCuDDnREJ+gYZNRz9D2FkO5vgK2w9CHFt95KlO03cd9KNP4nz/A3\nrNF2J/eDARwVeJh3iv/08iRGV67Z0fGGdOkExZ6BQBda5W26L6YL7v6hSJiewYoP\nfMBVv5JPjvR4nRqMhwmHQu+UaGbPvtjzJgQsD+8u+ugViMMn5kUTQgeDhv33935X\n+0KXIBWxj8wpbyJwmWIc60agHaDnG6WhjWFUOrmp03xN/dvhi/EhMtLn5MfvDiW3\nkm5/elE+G2r1mdKIhpcVC5UL5hSSTWJk8qlSAQUkCFeapehAP70HevaeT/ehQNUc\nZ20HVv+yi0DU6NUMud1ojIwwQaGAJGZNVl5IYkDgONTcD8UpVsmrbgVuiKw+l8FJ\nKdqG7DI4u7B/L46tc5vVVL2nlVKjpoH18iEyL5p8cHhX6miiG42sbRjXN7MZfqTH\n3Ny70WGtbT5xvc+abf4RuYIqcPNaLrQ2+breUGo7CuPE55TbDHxPj39EFiuhVlmD\nUaD0gUEQE5SPbFSibYdO6GNzPHdBF5vqkxHM/JfnM92Iua2DxYMPzdjZO6p5XEO4\nAXTa2e4LLnL5nNlxbzQOmsrjnvblAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRtyfLx/XqfnIJm\nBNAdy4c2ZUdzVzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFZQZdeqMvJFM0ny2C5n7aazugnNzCqdSeozZNS+wyV9\nv91RzzuG1CKWbIB06Fg9ISL8qYJfqaafr7yf6paV2B1AokuycOgCQxBwzthjiPVm\nyzMpCblaaxmj+DduMIfLJw8VTfS8ze6MrFENpaJeVQi05qxr3vQyqMsgfes4B1n9\nuikfR0CMIXAxEede6aKhwlQhfp26XggSkZjzE00NO+yKTZEK+znGU6U00vXfR5im\nLQubNQrutjyXiY8+2XIoT7YzzCLDwuaUqKj8s+QM2Mf5YDOcO2R583Wzn/UB1wNn\nfCzT5Nl9giqVcV5smFvlyihFLvOjFMiuLtmkOS/SEOcHteQ/eplPMnHHN8ppwfP8\naO5ONAD/Ui4wae/skc/fYIPBXo2jwShgeCc/uhweHgtVQ4VeOtlstv/3JizhstOY\nL/i0HErVJ3zC8RbDi9H/3rlprOFnkKA1IMBoCdMWmC+1JYBCrSujl32KBPhEl3pf\nL7ULO+I+MtNe94dx7m/g8w39YDab2Z8vGlkXOysQrzbW+iLCWB2fnTw68kxHZPHA\nZHRjQppN5w3bmNgJuOoksnu2Sgrm+VeJE1PvmxRKbZnHHpfC8cYxg+jYC2fCQQ/f\ndA/MMIgMgLEMFpp4E3HohRGsP1eqcdOvITcwEl/EvFpGBwaFg3Az0FYu9HznVFSB\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID 81B5D99CBFAC98C5D61A8EBF26A86A086BFA3ECE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAorfGyBQRKMn+gAAAAACijANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyMVoXDTI1MDMyMTIwMzAyMVowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtODFCNUQ5OUNCRkFDOThDNUQ2MUE4RUJGMjZBODZBMDg2QkZB\nM0VDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANgp8NtumO0K/XRx\nJC+5H/Udi8zSK4ey4igKMEBkivr5pk+bwtd3YM1yObqFV49gXpST92e54LAt1eKn\nKNQN9QONqYC2/WxtIRynHbOolSV8+aaSMyuwGveaU1/rqeh09XRbWSDj5Kz0q5Fx\njgMyGRhRe2c/R3KhMWUk8jtLJA/pLe9B/CRcj7qsIc9OKFTQb+zM0q610JbwyBJV\nOSTU4t/smm4lxFPAenGBpci80xZRbgHhVa7Xsvoe8zTSN3rzJlaWju1ZEKibgxco\nz1/syq5t7QtXCej9LV+Xbv2dgc0qzOFjVR3I29N8ipEEvkgP1I53wnv9k2jddbA+\nC5RkpTn0Ay8EO/p6cY91jBJLbpEXwX+6HGvj5Iz+id+NwwdP4XiE732bvoZO1xn7\nXkkL9gcS17Kh5HH0TvJzJLEPJLmRJ226s1qaaWLVjBUezpuROLJvuBrpN4YDebHO\n6kKWKs+Qz7nIwzDTagUartmWGr0t61Aa5JyrkFQMd+lMGhCp1TCYZYMErawlvdOf\nvNjISqHapGdvnzct4khrAcldLgns/lrP/Gc79Dp01Km8EoZI1COZyNLGw12xh/Sb\nHObvW1fWIbH+LtoBNFVQe2Jwtcc3j/of+cuh5ORL+R3E4PwPD4DbORF8/xsR31o8\nXSCx3/kFhDroNqPL/g3ssz3LJUwhAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTPfWRILAif8qTe\n1xEBA2ebQrIzSDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACQ7SoIgQCFFh8Qux2oF8LLTr5H6siMJHJNYLUH6zcR3\n3NB5TLtfTjTRHRPsQavhcTYztv1sRO+jfg5BvFY59DSwzyTLhcOsmypCVDuLxG6f\nzRZBYRJYEk8rFcj9KSj0BK9bRYXT+qSg38JLwMvueo1TEF2xH2PXlmh/RMYfXqKJ\n4e9J+LSgdlqRkVt9T3Q06YCAdtxJ//iWaeDhfqL+1dMS5AJLZGZCBtk9vlwewvbf\nCqtQvUUFNnACgi5y+CDPh80zUpingwSSPYp4FE827gucggkpwn/ZhZn7ncspq/xm\nZkEFNVp+uZbwUruY9IXp4qKTEFX2KAUBISkY692SMoyipI2Euuopv8WfycFSdTAh\ncHyP+O2zm5/JUiMKj+pvoMDCaa0OmYGZ0ce/m7IkBcRTwLqGxcePSFjz5RI8Tqhs\neN/brmlqaWUqQpOrS/uCHQp5ErTKUm1L5sg1JneTXlD5ypA8K6e9LzRNpdyZFQzR\nbnLaezj+qFcepBBHj72UHLO0/EhmW/IBav2K/luZB3vF+4q8VttGwL0ZCc/TXKGM\nxea9kOfI8LEw1CntAqkVTz7J1O0LKX9HqrKFQl0t1tFXKAPeNcdaq0tn+O7tjx+A\n8QwhUnG+81Wdn4d+cHF/VKzV6ktHVCW9l68L5SiMVxLoCEEcXvO4wdlAZsqa4yHm\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID A0854BD197F8212FACBA38991BFDDBF5D13CE9CE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAo1SmGCPedUQfwAAAAACjTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyNFoXDTI1MDMyMTIwMzAyNFowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtQTA4NTRCRDE5N0Y4MjEyRkFDQkEzODk5MUJGRERCRjVEMTND\nRTlDRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOlGW0GvwDdl6gBo\nsPybkwt2QW1ilce13JRggcWhbLv6PfLO8WjtU0xosoP/CU61cU203UZV72SI/wCM\nA64riXWKs5AaUOnDxs5xc9oPx7GWJvkPxeHbP4fYJaueQnH1Wq17jOOgxbZvE3Wj\ng+WalrgpN28iK9iGlnz3UE7La0F1d+uSP/qBRoMY7LpKIWpTU3etnrrXCDKxb0Ly\nRNA4yFG9ypS6A7RMJUFQJDd3NcZJYo1xOMXMB3ggls1zakU9Mv+7dXGMzNTyoVJ4\nAJ8F2X3tllV52JqHQtn8k3rCfxMlVUg9evLjiFJtR/SsCbwOu/IDKkhdh7jbRp9C\nKYC3w9ZHMY3siNua2Oq+GIhJmJnB9tae4xOUt9RdO2kIzeD09K6ig3fxhxycMpJd\ntf9PE6PX2VwA09kk8RFvYOg5Jhkfev1HOHK2u2Y6Cs+K09rs944frf0La38VP/mY\nn8uRRoOOrzKw82UPHYqUUdmv9gWeTOt3wRzzK4Mp5yAroGQgoZ+rR1HtYgdGvxYQ\nWH0afW8Vvlq8gXywSWxY3x7FCeIqQm9bTJzyJtbRaSBf9NfpLfPJ3OhxRk0X9aC+\nBI38ICFD+WHLgS3+CftG9ECvhZGUC0aE0Tc0aieaOYCKzcRl9khzBu/q2Xr5+wiZ\n1WSmGdxijIwcGExH5bCUnQ7Fs7A1AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSphAaGUDwSFbwi\na9cMy7YCDTWnADAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEIku41mxmXrWsxzc6/r/DGUm8zE3Stuui2PH/VG4yni\npTACnVGo1+G0Pg4SAoYfYLYXmPAuTiWDHpW96ewKLmxapJ+2qWtqUb4HT1wvlFdG\niSFi+ocUABimQEStuX4mWsQYhFcgdzcbyIhVu4Nq+AhxgMHYtQMquZ3XnG/tmOez\nKwMBvNpiHVGArgPRWyf9dZs6USDrSuOnju9xAHixOEcSN27VRcQsOatUOKXB+DMO\nPCmdJWxm7IZXWZI3WqBhU2ErhSSdwyJOL5/oQn3R+am0HNjNcQPKzgTWC9+yZ/TH\njH7Kb7WTVlfW1x2XbSoUEasOcNtm0oxUl+z+s7m3lJei25qPuHrg/gIUyRosrs3c\n6UuR+Zz5UULthLuJ8OPhIrfHWPZ9GmLDjzYA1+YIp+glwtfOlT43MltHj9uedjU2\nou6catJjiMNa96j68x6o4bZUrYqfmPCjEVddB8helferiIcJwX0qW9cObsmo0OCT\nELWc5Lfb9EKnFdfNswkb0gFzRKvTPZWlkQIQgi6bx/YJO9B7dKfJ8X+nIk28Ao0R\n6DG/U8a4DeoUvlTc910C5MZoCKjoM7r0jV4qs83tHUs3R64Y+cKUHEr/iOtINt8v\n97eCpkRQYDIPbB385YNi8+k6Z/qWYJH92+DeeToMISImB0HmICXmte20/fRp0hJj\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID CD3401AC6E1C6F93DDD869D46A518311B3747895 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAo4N3ccOfQdvywAAAAACjjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyNFoXDTI1MDMyMTIwMzAyNFowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtQ0QzNDAxQUM2RTFDNkY5M0RERDg2OUQ0NkE1MTgzMTFCMzc0\nNzg5NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOQnMcKeVyjUSEKR\nqXGRFaNjZhztvM3MfiqaLcymNbkI0swBDMOc/JNHKr2qNvp8VGOjdh++HEwCFBtE\nkU5WT8IGQLVwMIVcqvjv5OMe3oPzy53K3tv8dE8shBcBZSc9ccPzLYzYo5T+LUJb\n19Dh2IOOe2DNvJyLLFxxBJX013A0TQEnit31RrSUWI2PgCr3EFbXJB5Y0DpOC1xD\nyI94GKnYDCXeBYZCTmJ+UgbGnj1ciFSSk8ZDhB3M5bvQnez6VaYFxlLmHIqPsYhr\nHrTOAJTDrh6SszU0JliM90wHY3knpsjjDpp/qCk61pHZCgQauBwiqF0JsDgALEqS\nsxF4hdK1f4J4+UAOUg4Yw5Z+Nq8Ua/fGnevhPJ+t2QCHeIQDMO4clBdCsGG02kaE\nHVxwN80rQolPACUFQl/Zx3/fPDhxQPtNBXRs1/Ph1U5MBka+71NN7Hl8XnhI0E/U\nk1roH12tPm7AmlKdU5241P0+UQFA1ZAB/j0EG2ajS0AKwKE/r13mZbbVN1OlZyn3\nnknaYGuIhroECNbcT5EjbarQdC/iAoarngwnGhE7OLsL9LTvD9obdRJRrDPxVvZN\nAayrU66FuyqA9pl2kz07+0Nb1AHGdzqhzbvXcROetXxn+pJyguIu2eoFOYCd8RUw\nOgBBJKB1HuShE6GP0IPcuc7PZbUvAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRIGGF1AwHJHDCq\nDqm39h/9bG80UDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJJTTrsaFT4dOb7hWjTyiatdBsJ2zZuSXG8SpbTrcMeW\n5vLnEarHFBMmLiSCD6/EuztvjWq+Xyc99o2+dlSWasf/Da8D9twj/5OeJ4pQBW48\nc0Z9e8DBrqafEtkY4q6pERdpxfuOtRPGnfvxOhNqagVOeoIXH8iyaEVzK6fh7V7P\ns7CBVjJDJtp17xp98tW/AvyigAP0i2JHK4pA3Y8OT43lT6VroazMCmiQTahI9ZLl\nZWX4igDBuwVAGUltCvP79p7nboihudCwz9g27yBCvas67Pjze28pbpECkdV/tzpl\nhHWcEEEcNfYde/UgucGsbkMbEAgiyqid5Stjg02wemodO1wZAE8cHuhemnq7bGXH\nl9hfEbTTbJgIl95BJAj1/CZCPZCjf9HihLE0tBpD9iYnwW83YrBn7FZmuAviMdro\n0leY/9GoV+kR8yhqtTD2yskakrI/IRluUB4qzGACz/N3kzGrzjEnkHHvRvZfz4ts\n5xjD/PivoNL5Au6IJjYAjmOilYhbLCj41wFRohP0VsU+kXUtShWjpHA+wU+PEbwo\n1BI2f/G5wQhHl3prTn1lImWRFvp7tpFBJoVH9boYAEaB4IQ14RXQEd2/s9BgomTM\nxlQWojP5MjHc2YGiRwi2nL2jujBq8c2kLOhwjwUcWKZLMsOiktOCAljwNhMNR15B\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID D6F56ECFCF7EDDB7FD87ED01E127EE009A463BC9 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAo+uAnVEeOc9VQAAAAACjzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyNVoXDTI1MDMyMTIwMzAyNVowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtRDZGNTZFQ0ZDRjdFRERCN0ZEODdFRDAxRTEyN0VFMDA5QTQ2\nM0JDOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMLvm+cPeALAyzjg\nZOFcoQLxPfwGDBTznCn83UuHBj/19Ams6ZVdJuNJtgmplC0d9pN3fdpmHmMCHkFd\nNU401EIxaHVZSlY1Kd4tqyIP3zuwiSfmovMuA/EE6l2Irhh0GWa3bpMkjrp0RA0+\n9z5s9l1dTi0Zab1dU/qvPBeiprvA9DrL2T6oswAF+Jy7BNMfPOTFl+BObMbYvCud\nKStcEXzAjg75Iy0N1CuUyt6//l6Th++DEt7vF1tEUgcqZoT38yFQkwOP53sBeToa\nGmo9bwF1OD9r6wTx6fvSAoMxezGgw3+s+Rjwi31AlK+8Hh4xhxXEX8yZ0LLmM4Ry\nhTvEeJH1apk5ew68M+v5CmCNj2udVRuCWx2wLYobD4s3jj8DDTZhB4F0mtikWkvT\n3v62FXqStYfA4X95s+4CvsjLojJ1cRgFvici8531CstDei8UkpYs5mWK6J36XDJP\ncqKswSsfUs7ooRnvntvwoggbsb0IkxbJSz484WBH2M3p2H0bBCI3ls0c9eeOmdFx\nHq8TKrZ1unEe6Lv0sgeIdShFikfRWnwltrg/B/g1xJ4NfwVqeE5I4sxAJlztBye/\nymu/cdWkIKKWAXyyeLqJxsdCrWrSUzg5d9R+XIQKTXvcU5ewt9T4VBH7eziDDekf\nh2iaq8XmqhcsLzjNuH79gWZ2YTiVAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQGKS2Qqo7SH/rw\nfz1RvFA099hGZzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHEKT9H8eeP9J+V58IsgxITgbR1++8ZnZzcWlvRsFDTc\nhgG8GRIn5G+ZwzZt8O8IKTTcaWUTwA6GYHrP8IjcjA+09UOaAdsaEAyzfQcHj6YR\nAyXWcnbMrnJta6QdjJY1eXy1e41c2BImf7kRjlxMbicg94gIbficO/Z08mb/DZLn\ntWt05s769lAnjM/NnSZ22srqgErh93l/2yJBhRq4v864dGuDeKsKz9ext7xf+Q3Y\nTpEck6E8VYxFr3feH50oYmZfHcT4Atdm/l8W2Ky+TqsCL39dDQcX5N88slw9JKzD\n6ZfUn8zhX5+VD/u3JhCgWqujQwfSJO5TMXU5Kd9OQ5TWlu6GWHRwUihH+ci4CbX3\noy4NyWkefzVowWRBNz0SlLwnud63KyNXculyE3DhLMZC/RJJvkr3b/MlVLG/fLZp\nK7HoOmkLNokLk1sDHaRjP4EZdMagsBsvo8rwqPglNAfuHG3KGOhbkHTnJ91EsDpg\nK28165FFe6RkWAGqMAdcdVuQ1IB6o9LTc0vlAmsFJoYm5Eh18POllZ7nTxY9swEg\nNrbTj5d+iyi8uxi5od/T2+BNxlpHKkRE26Pf1Tk9Z+7+GPUt6d9LU4YpAOHXffZ9\nQ0I2ukgaZR/x100FeI1M9NauNj9tGlH0oDFrWv0szTZrKRFCgU0rX+j7swC13T19\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID E0028D87CE6C67A8751CC4B5D74F57622E75E42A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAApDDk5z1cJDLZAAAAAACkDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyNloXDTI1MDMyMTIwMzAyNlowQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtRTAwMjhEODdDRTZDNjdBODc1MUNDNEI1RDc0RjU3NjIyRTc1\nRTQyQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANXQYDoJrkAqJ5pi\nKuj1QmEM8MhYB3PYV9B+gG5bQ1PvRp8MBHxoFFIQmHksn32rNmIVatpe1wsehD7G\n3EUkaO91DY4q6vl5BCLHYRvdK5o8wdcY04Wmh/91/gaAzAFp2uTvOjmWBFgNRZ5f\n7LEoiW4Yrc+fHqpSgxxkGvhhgrQ6g2m04XJ2g2MkIaBnKvyHgYkLLKIHMX4/yOz4\nTQnNEttrRDNLjmL1co+PiJYT5S7dPoMhmQ9QPoiAd1AlSNh3bMPB7j31VHoFGGQA\nW2ybpDM+DUv+m7UNjmOvhZinbtL30/u6hh+YP9Y9c09mATUyau036n5tF35IEwtu\n3qE/tHHK/9ldR0ITBsoY2k0gIlv5WZ/05lV9CQ2jDS9HY1yDJ2zDwF6hVpy8mpaO\nquY9nlLK6wlbK+d/rtia/K/ih2YyU+WKv1Rn5UezK3wN69e9Ps/kgW7uvlAF43ND\nZnBJO6LYvgSSy2zCP2wx+gRjeIC0W8C68hzOhXGBI5TYVZ+vXPqNd6ad6vzLGhkg\nBvS5cZcF+vUyOwSjOj8KRB+27xJTiAW5IUGXyL5BntieCuBcp1kSLQMob8WN5c/R\nZZfJ2+n5hKPAC2O67dYJmVtcNzuqgPeZq8aC8b93rxfHAIPGKradoVHvYOzBAHtC\nCRLSo1JVmR/anEEBFs1CM3K45VMBAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTerRIFywE27YuO\n6Y3E4HTjRJIhpTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFlmSY/AyP5oGUb1WcVL4eMVfuSJui6z6NCC+5vGR0rj\n0JjmE4MoxaSA8jUmdwbBUq/9esun/kCo2XTOlBCCuYX1E5LPCBxQZIm5mQH37l7M\n0n108VX21nW1tAkmZsXiia7VqVnvB+4yQuQgBEYkbTn/otezS2DajuF/Q4n8qG1D\n20o5XUXSoHTEDBCZ3R6mSn1Ol95KCFjv/FrWtOQ04pSxEsFUYxj1Yu5l6GafdcAK\npt2QresZEPOdjtjT9Oi6/VulyDSKTcmzXQt6lmldEyI2swmGD2tGx3iMrAYFost5\nMGw9QQFY3N+LZYLENzCtEOHpjIrt6xO7zQARekVxvrFvdV01XOTMHLo33ZUELpaB\nmQbSVk7PEDKlIMyIMXBRZewj0a2jiHzNVJQfFVTgG35WbdBSEg742NcGQ8OgHOma\nA3/2y068ZeglSeO53LdtagNxKr1JUfJm2QCXUzSuBKdUPVKPtMlGxgdc+wf1c0GZ\nPwIZcY6hnBcVEt3ScUeEHRmPbP5g4DoaXX4Ya67rKpKye3aDdHlD09XZ0L06rs6Z\n/Xudc5kij9hu8HIlmjV5sN9/Wm8Zn0KePiWM4v/1opqtaEzbUjJSiTOIIIJceZ+G\nlEADAHj+ZshBevP28HMiu6F5ejTIWLWlxW/6DVwJo3JS8BmAXBIzEX0louBBdvW0\n-----END CERTIFICATE-----\n\n\nWUS ATML KEYID F761A3A1F408F1090797B87127C2A2397C0ACA24 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAApFyLNrOQDYSMAAAAAACkTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyN1oXDTI1MDMyMTIwMzAyN1owQjFAMD4GA1UEAxM3V1VT\nLUFUTUwtS0VZSUQtRjc2MUEzQTFGNDA4RjEwOTA3OTdCODcxMjdDMkEyMzk3QzBB\nQ0EyNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANcTh6JTPU8nPL8P\n+Lz14vGWnmKLjhfGHN1JKpPxhSLuxSqJs/7hlNX1IkE4wOBZZ2uTLYo7QzLGtQ/E\nxKovOmlJv5vzlM8xH2NFYNwE3WTKv0qTG9OXVkRn/MTMjjejjcitkQH4D7cY2ela\nKhfjcfNgBgzkNgQAIgcqndCxc/vUFQxhTcI54UbNC25V1/xVS+G+SqtjNLnsy7WS\nTS1Uo/7waDIoEJpPncUQSaCwT7KATwWAC7zs+6T6748f34RDJ0SXDWi03xN4hDTs\n5AmpGH++0uwnEpENPwpfUCtSmR8w74YP1NzwGifNpEnSTtCoYE5p3cCobrSmsTfs\n/0y7GgF7gLghcWsmFjRS11Rn5vw6slyfjmFTKoj/N1hMEjjimoa0B15xzPGlAdtB\nmeS17pVcMUvv9LyrJ209UR9BUxBOVW1eyWC67NvK7aAEmcVH1weoEE4NZLVoJVMO\nZ7VsM4CrlDXQDkds0FvPv0vYZ/FoQFb+pamZD2saFX/0cyTZPeuyhwLK3rAhdZv8\nJhqEDG4XRYcKnN3NqZBC3/XeICwG593boFGcwcBj0IgorgYSU48BEYMmgJ6f8tFU\nhPDPioG+hXMJUPoteLcc/Wb+WlAGifk8e6xcrz/QSEdc2PVOMJEv+x+/oTdjonfl\nbXSlkBIg7iIBuQo+/YoR6YZNnAoTAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS3bkqfC9q6c4/J\nOJyMVxu3bXDvjzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHisXdmjaOE2YLVjRoFkOrHzSgo727h/dgENo41ucpF0\ndLszpQiJpRVfueIkpsst6t1wi67qWlhg0z7SO5xOzJyTxRwCpAaQZsxhqzQ5vN9j\nqAPk0R2JYTyJLHeNhc1GwF7FoNpScXjO1ikFWL5FwPdNpyJcJrJ4LRZVdCvHQzS6\npMlyigYgVsqgKtOGYzUj9PHvFFi5VPa+OFss3F1TULCkGSYghDm7ccVTm21sJd/4\n9JO73Ch60d9tcsvFXaF+Fj6YUBHpPIyNpEYy7IPV6raEM6+wGQ9R7SMUxk0GKrsQ\n1quyCed3kCf3L8w4m5FvAZqd00l48y442d3d+9/0zIZlhxT9rpvsHcHCVH99NYaH\n3v0AoVpt97D5WI55Pei6ftJzZfBWaKvmew1Lco73lWxnTRCRXAZuGteZHtWbtAC+\nWjewBkKRL02AG0LimSwtgT2pQ9Rs0UX8yI89flpof7ifXw8oJ30mqMID4pKtVjnq\nSqkxcA5DjMNoV95+vOetzRYtyQy+S8ijtttf7AZY5ciw7/whzlFIrKpTCCfKX6IY\nu7hSASYRi3/BDDfAaXmcZ36hmToDHMPHTlkEEXZyE13bi0zURKeUeUD3D3B4uovc\nfx205kBEHH5KtBzy6Pl15UTuqmU/kop90oSAarftndDeCHkYzZufa13p+vGJGNZw\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 090CAAE1858A3C3A3B6D4DF8978916FB205FCA90\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAATNF/S27VYs1XQAAAAABMzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxMVoXDTI5MTIzMTE4MjQxMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0wOTBDQUFFMTg1OEEzQzNBM0I2RDRERjg5Nzg5MTZGQjIwNUZD\nQTkwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqKSUbLAku4U2duYw\nzFB6jQ4L48J+eYrv36N7GtOOXaJn15RxBr4vdsLoU7T35JMT/pXIFP+SMrxRGjEc\nkDP0vmZ5jc09fNivW+KjfT5eXbftOc8ect4Ge2yXWCYJ/SSSfe3veYd9vmBbcahW\nr14urrnYi/WnXgYDj0FPXX98B8ZhhI3ek7FJGSLJktNhhz9R9wMh2SgigdkKOXJf\nP2E+ofE0Khx6kmxHi0aR0/H+nJg4peRC9FHpGhNOz/GHMPmDfTETPov2ZRYyqVRH\nacWLR78qiHiKYwiZYQow/mCpzpnDr6IaNgAMPrgHzztcMa5UroRoR0qcT+auxmTG\nWDYZnwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUu4OfyPECLHkWcmFBQOv6O/AiJl8wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQABlK8f\nlglB327cavGLFgskRRCxhMy9VM5afOhpZnXKO6nQv2WSnjkorXaXX77labG6nd1t\nsu+vIOHF4AfGoaohF1h1mE61qxoltgOKmHuex1EVgFkgHjrNl31xPZtQBbAQ0fwI\nWRJUT+cJjWzy122Q1Fv59je3oY5V8jg7sTaRIHwJEtvMCzGDzyIAf1jDxoilyPdh\nkJ5SezyTVCYdxur8d6ELNn1ON0DZMclG2KPVzN/St7k7NXCVruFr4ti6U0ddKbX3\nG14MIAqM5qQPnoYmkY6BZOWFMBO8FRzhvk0WnYyoimbaNTyRLGt/FrSj7kFndACb\nuGvdL28i3bw6ELK8u3k8MJ42n6SUqEXcw0US6sPJNQG/X9X1dKGlIN7wsa2NxSzk\n2JUmDfXmZv0oRpIxJxDM3L6oocvIqKZDyU4ookRuqZy/qT9VktYGbtku3hr0Vtu6\nkcEkuDsFdMjtpaenTWKwyEJQ0o4WLNr5LLcfnPkqFRQivpb3der2iaNjulS3MeoG\nu70nYKzJhOlSkM5gqmvguEUizafNPrmdrUmTAqq90HkDHnHkEoFFTqKTWV/6iTIM\nyZSi/io3HIMfD4bIANjOVgOj7GjBwo9hlWDibXlo8cam4V/oeApoCgYpZfW+9tXZ\nI5Vnq8dKTfIqaQWocZKxjGXWE9dTTVcAQmtsAQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAATTnuW8tuPQodgAAAAABNDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxMVoXDTI5MTIzMTE4MjQxMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5\nMkY2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtvaRKgLkWNdalUbz\nrzaVjzQWmYfpMxZUO98zE7MUvw8A3A7WTWHzDhrllf85M+ebhqKGVU9NLCOpOmLp\n+9d1Tj4Zm/sx6fEZhsfpDLJaj757ZN3rq+FWLpR62EygQn7aT10hHU4V/3hikLlg\nyceNQC6oDb6v3+NN8bxNCQqy5ZhBDhRRfxMqUmdmXZS+BmhdIdYrVkinJT0ziMpL\n+sC2AyQcRjTmlvjsDPo0Q27c8jSYQheGym7uTmNhyeY7rJlzCUUIImjnvgSI/PvJ\nPFLuEg98uAX90tzdQ9Dmvv3fvlcjVoaK59HNBYtje4yb6PI68ZJ2tklF/oE1uq5/\nB+shVwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUvFmfP/5SQowXo/ZvdCQpROFh9DYwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAw1qvE\nPT89tMy48PxrjZ6WMnWcu7Ohw2Mvxm2+T6mkh8RH3NMnteH2jCVnRpBoKFARVT6j\nXAFycJ5MZpXiDNrbiYUqz87b1BW+Ae6QzRSmXeLlzWQM9TTwC+8zQdHPfIAmyKC7\nl4ZZQ1L5rWOy/EMfF1GFysnIlrn1im8pigCfPfgxAIIefGRcxK17pdDXjlKRGmlr\ncXei1A94l17PvHx+Cz1kuRk2LGldoDrYwhhl1iGMkaCVwGLB2UXuUCWA8uG9/Yyh\nU4QsxH9V9dPbiTl6HKePuWTX5sNyFtFT+NwQFIraq8xiSYcUEwyVw6TBeJojwphF\nEhT4lXGdmgiIcC+j2F9dtkn8WVHGI4iazKQ4NzaklzHg8IMKNbuCDYKQ9H1R2qs+\nC8uL7Q/QeTDOYgG6rTsMk5aENJ6/R4DeF9ABvLs0sVOap6qt3x5CcyF+1bD5h71K\npX96ogNx8dLAEvrMpXkn9VjGF1HFQxZM5MwqHFsm1faTG8MikQNphOmnYGrZBKQE\njanXf8iV36567cZrcOM9UrM8iF9QmolFdJe4QcsSslDnQKN3KDgZkQm92q7M6XF4\n7SRichAZh+gWuuQc+62eDHkPu979/p6WAG5fkI9dxMKXqT6VHxOKVgIPfk8Cg1ZJ\nkSI7ZF5KT/FnOWx+86fPF3+cb3zjvc0IBF2TwA==\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 11227AB228983289AD2E7EE6841321901EF592F6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgrXM7SPVw648QAAAAACCjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwNloXDTI1MDIxNDIxNDMwNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xMTIyN0FCMjI4OTgzMjg5QUQyRTdFRTY4NDEzMjE5MDFFRjU5\nMkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5nYqiIPTt7jeAzHR\nrd0cCJ6RCKkiNbIAZqC7iWtmGSIUGMtXz04TBVou8yZlebsCwlXc32Xe51++tmrx\nrcgocbbl/BnXVdHHVB0CtpaSHo7pkSqsPkdhDga8FqFXOCXBY6B9mZxDekFd67vO\n7KnrFfKNzW1kfWD5iVj/Dv0/jFSvS5ug87P65KkKoggIGlqX839lBFrjFf0HfyCB\nTj5Ic6kfZjnpR1VRzVLBwc10VXW3z+lpPqnHuio0VOop5mZxnMmLeMrANmr6k8MU\njwQQRvpIDgM0rIkORyVJwwpM3xOViEQzE8mTwoLznPAnLoLuZPQsvHCfCJtpAXwv\njA44F3Br0FDYhl1bgz/zj4Tud3FUKguFrDPtAn0xG/dGU3bcyi7MmSdBMr3aRWJE\nsE1ZuwGGz3dqFgROMfnCt4qao7eCQVi9zTZP+24AvhvSTd2UNaE3ExnpzPhob427\ncJQj/C1l8070fxIawh3L9vGuzwlgU69pz/o4YbwEB2oIeJ72BAFOx64ZrJdgs/60\nOAf2H8hh3bgZPWzm+h6PYYbgKy0pNzF/9eeDBpuV6OVMHNOW1J3EtFzHtE1MaMAp\nFlKRh1TMsI/UXbpFWnSodO+4K6UgGbqFVwvkXFosKO8Kd3Xau7SucMhQtn3ud/6e\nrKoonVgkuiir/A5w9PWQRLlZnpMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGCL6D2KZCi1qr65\nvBLN3qSgPstpMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAKJrjkD5gO06XkMl1yoLwUPMP5dgZrHBkBYVY5uDKDzNx\nkSzSUIoHl6XhXnT4Y+DPfxpwa2hQz09G1t6/9N3COuPRwdysRwxN+Yo1sKnfcSdU\nuJghXviUYxo43ZAm6cRdvIi7aeTceNbmzR2eM3LcWkPB1Tr1fw0ahWGlodTfAQzU\ng5xEmNZekVxfWGW7fgOjtxGgzoHSqH0Y8dIp3lSzZwMuGc7wW31lr7Cd+gEIdRE2\nKnrN3l+heJYMaBxmAi64by2GbfBg0vhe0Z75DCU790zkOhQjTJ9ZPFNaqy9nNeOB\nIyfAqPQ48DYnTbecapwOEatnJ1ul0B0t0gcBaVM+gvvywDbhUG3STeT87ettCeSP\nnM2yfDnBTpIc7oifUXAju38qc3er1/Lrbw0o9Q8TltwPROFlBkbDKmViwvJa2OOg\nAC4rfU5eiTjueLf/L0dn32LhUurpe7FWdV0RmrAHTmYlCT7YtzKUpu9rtalbF/Ys\nCz+2MUIhX1+FPmXATPewy9C2M11W0O/psHxxz6GWNLM2REYIGFcxnU/rfvV7Dv8S\nSgDYBF9QJhLXuIlZxaelxZUf1LWVoIbQQ1hQU/YEjB7zvAKVyowBnip4C+L4hVlr\nqjPZ2K8urmeWX+tSvvpI1FS+yUX1j/+jfAC3whXEP9ryW7/lZH4lqzbdzGE1O4k=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 128462F2A0D16CDE1946F1000544B055BC113D10 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdDj4+ItYDLScQAAAAAB0DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyM1oXDTI1MDEzMDE5MDkyM1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xMjg0NjJGMkEwRDE2Q0RFMTk0NkYxMDAwNTQ0QjA1NUJDMTEz\nRDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnFh6sqBHMGYfldBX\nvZy7w2R717Kslp6JxY/WZ9uSrOQ50ktiCbfPVF1pey0k9ENsGvIn+KC9e8p2ZVZl\nRgb+SH1zpt3XjYOzM5PeaY9gQj827UDh0fTE5k0NW/+4YaY7cipp7Z8lGd8WWsqb\nemQLMbPYy5qe8MMbhis8YyUjgivk0ELFOflrqEGNCbjeePwoSyByqTEqQtRujKHc\ngphpj3Tgtcb27T3uMobsM3r8ty9MmdJQoUqZwqsG/y7e0XDjeBUYFjPFIsrjb6nL\nCeatL8nm7r339j+W/VYbx574fXNgozA2MVr8Wbqz+y/+8iVKsCfspaWrGv7kg5g8\nykpXfbBDNNvRVytEBdFMgwS+2XHsgQCAGBubyYkPdQ34TD9hkAABMzZ+x8sJ6SNK\nLdg8L3bW9d4KnWGdHXzgoFe5urQOpRtIe1yUZ5mQpJ8n4MuUmNzgQZxc6L78eIC1\nMhvmEv76XGTky0p6/0HN2Ej8vlMnmw0xU0ssuLiKxsxOAr/hTEQNdslfGw8Iq/yx\nYWt+GYhkdTSZcbWe4eh2KCmTlsZ8/FRLYWtRQgVVXWM1MFb8bZHwXbdKEJoNLBt7\nWPLZX+EVfvYAnxFZ88b+kxNJbRyS0IQ1MjOjSGyCyptxv79B4BSU8gpqXeYxB926\n5/wr7asqM77JToVcb62dF7FJc1MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAcT7nbjzwcsUF3M\ndK848DpOM1aVMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEr1D7CyRL9GO0DywRqzemvTQYXQ6S+FRXvM7se6TT8HX\nT9l/vmc9FTolob6ThjrCh5HV56iNvqv1MTVboHFIgiGj60AiMW+M77laUz7daCEJ\nGOU0P87qbifJnobTlScAu5MA153cxHJSAovJYuyAKDrKdpWWJTuCesmwSKPvA2lD\nb0yVUrlk48TYPCxxar/AcNeVj6jIpKDccAZfZWPrLVBMVAUYxVAg+zdsvmRKW2+e\nT2fQEwxRHDEu0pUm0KI/E0F0fIk3pZKUbNUbjm297bHmMPwgm9+kqcCVUU4rU7co\nQcj8gTZIA1xNnSf55Gp3PRbE+SFh/VEmZscL4nlzz3Imo7TWbq54NL+R9iYmAbsY\nx3EJhbvoC6jn0eM44evCupxaSQ249pijZGNlqqHNcA74w984ajQsAXq6q/ja7OSw\n+7jn/zKPuTz+hRx6BoUxGgqhWwaQQu56sJZCOgiubdqNF9FT3mtN9tJ6X3PLqYet\nhaGa4dxRL2eyi+P2Mxdt7zTzjBqltcNIhK8I3ShuGKzSizJ0lFQPVhsvhpsrVL6q\nXa9bDB9u9+tclEosUFzO2MbQomiB2koAkcT8/tvrayLBUFmZPCfYGVtOh3R7czmO\nYZGr4nTXWPs1vtJhdGS6cjAUlFxI9EXtuVA1EPsr0Tw7JMgDuHRCWogu2SiKuLE=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 1BD645FC1F90827C283E6CB526859FFAB0E0C62B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgFgCuIp1GmvqwAAAAACATANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDI1OVoXDTI1MDIxNDIxNDI1OVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xQkQ2NDVGQzFGOTA4MjdDMjgzRTZDQjUyNjg1OUZGQUIwRTBD\nNjJCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1pER8UtpMQbC4YdR\nbw3BO4XnrV+YyKBrFlJaUmyoJoMnuGZNOSHv/Fujke7XmYBZI0JKJleOlHalRB6T\n4ATq430CPXrYs557BDgPPdyPk+7xZjdnqLtm7ACEQR2uw70rjpPI95wpAkCotqDi\nApuLyOSLe46p4zwUymL6alDGPnDjIfbHjFHENYFYNhIwOp7SRi7uT2OZULdzmc7p\nk8f6ZR/gTdHqU1d2h8OFC90HRSE0d7SdoHKOPmAA3NcCfPsyOsIJRiivbf9zUic0\n6ukltKh2X34jNZm57egXWa9mFmc3OqBR+REFBPhTHzP3xA2xB9vQrfuDD20mNb5R\nIzHCG7TyRh+GcmaB9aXX6pk47WtbCSIhljGCaFyVvXxqBQI7W/Uw4X3YULlH/8MO\n8uwB4BS/cpN9bAoBYmD+brSOb1X+q2kXzfz5cNJtHzlpbb24fA1U+sLr++v2diPS\nwFzNnW7Tt+4URjQWpWdo0QzsxkJz5QIWZ8oj/qlDyfc379iU2jxAPDxpXcr3T/qZ\nDs6o78/pbSdNgHQS3VhWbpWyzwDuq7O6bW+hB2W+f2rii5LaszE5I9uFQWgc/GT/\naD35K/Ya/4Zs7l/2BwER448jhl23VBoLDtg4IFPD8DUjaaOA/Ws8F/vN/W9sCcg0\no/kXczCAmBCoCy2Ve3WvTveWgJsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJd0SIxawE+122Lc\nsDN6MWsCNLRKMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAXCaGsenhayxzJ/ehPdqCMvTSA8UXkBKwDXOi8Vr7WZSo\nFoEZ0JFldL6OpDqoEkhz+E8fEEDO/bzvf+80IXf0X1CM86xFkQAJg4jivmGdNfjx\nO2nIJaLs/JDiaWRZNvLFI6MVxvbfgFy018Jsn1FeTd9t1zaJ7hxOCd0N8MXoq9VI\nj2RwVcka8qGUve+8HcXKpVuODCConi9kpnh/4CDaDW7JHuN/mZMtaZVl5O3ffDqD\nG+NgZiSnpcvqtNU13tqgOafKlH+/4gY/4tBgQXA9cJ3jcrIEqV/vv10JlF3754nC\nX5mB3xbx7Y4qAdTm4H2TLPqtFvM5kN5Ip5JN3WJWA96V+lvtclUA640zEtyqW9cn\nZvRn8q2jcTa7GClKvbu9rXetSVpxTftpHjLNnMxUf9bnEmPXbzp1gBTjLAuRBA61\nM0dGSStqrQzPQRu0tMgpDhOVb0+tjPHnuAKm+UfN9DHE5s4te/CMbnhjD12RVqkj\nEUhAjvNoRD61HYS81nKjwjCZmiy6oecmOtwUAH9FBlyYRnGJM4G4qaeeDEztquEf\nZmQNQP6tNkFw8Gb77hm4i1A2e1UBh45ZFXAFQRO6ycs1BE6886hH3BNlWNRvd3Q0\ncxqYiLoH7vEZJdWVArmka8koenJ/O5BNAKlm/r5QMto5GM0ad1L/UA3ncCenTaQ=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 1DDE0F406D122C3E5A4F861F94876C9E1ACDD37E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcowKngQkgopygAAAAAByjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxOFoXDTI1MDEzMDE5MDkxOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xRERFMEY0MDZEMTIyQzNFNUE0Rjg2MUY5NDg3NkM5RTFBQ0RE\nMzdFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4A1m90/9Yd6EEZjo\nEiYjxalXanwQ8MguyP+PxQ2uC1kFt5oXjLG2zAU5jxUNrLY+zZgtceaHamYuIRMK\n5td+Xf1u+gu4ObFhGmNvXgEN9hNV4qTxm1cBo+wsxJ1EuWNmDc3xDX4itFr7ZpNR\n2NSg/YwUH1D7X5s9k8r0TDMSQgYi7cOOI93pwmdh8J7InC+Gu3GyDjzPAfaxnW8C\nw42RW+wjzZSUnfZFgx/09HfhDOAC9GdkKVHiDwqVI31G9ZNHleEIt9jClHqG0uVR\ngEjRAiZamU0SWYKSDN8DgWSuOqeMyvjB1N/a5firnqeFc/SwIQ+u/L4lPQshRdrx\nRstQ8XgiSRzig0BHNBvry7cWzQeeemhv4kCg7FAAEfyWchg7FIF9KuAcTXm1Qyd1\nxwAfKWaSN0xr41GasbkCs7O7y/cvpDycAFVwxBOXQNjj5dskZ9tBcTu3VSzpIMto\npWZ0vXoMpZEyKpSXJkIknNrsbYtJ5MO7iNU98h56Ov839IpkqeEqpclgT/IEBmPA\nzMr08hgjhUXUMF7caD4ixj2MkwGZ/FxkDuS5xiPFBIVYUbDAnx+S+6hgdyUBFBdn\n+boNq2oS/yrQRK3Grb4H0FA5ekOwr75+1MtFqktZFSKv5Pj18bQkcrl/H9HpcRoz\nhP/dIBSAbE9OXKLavnsSAfEAZH8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOvInI90m62QZcA/\ndZQEj28FlSRuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAdFlJi1BieXnsZzbO4qPMlQ1AhqlsacmmGnprESTNuI09\nhsN5HeEu4Jfb1T3iZEap2lRfaWFeRmPpHm4Y2BQa6tKVj8ef+nmLtBep9PojqlmS\n7PhjxRjoKgSiNI3s17c1ODLhdkOKVUwHrg5UKNiw+rfbsjRQdsSbU/SQ8I7fRHK9\nUj0wIFb9XSc/RLdGnfgl/EjqL8GXbBdyZ+u+MMKVw+aUyOsMcf5kdd6q/Qx4GACE\nMc6/u6Cno0XCaUzSk7mrdRGnKD6SFYI3N6DwdF3Z4jn6a+yECXAcweW9v6a52hwM\nXPLP1b7QLsvfQ6zcY5Bq83mT7q9RtO1f+EdvTI5m9DgGVh472MojTNpXWM/yB1TM\nP1VwRHRLnDh/LuARIVqtoN+9WdWnOJH+TRsWcKHzsL4rHu0l921U33vnDgUvCYrD\nhJSIIvPjHbMGb5JU+7uOKDutPuoa30BMWum2xOaNV1IaOJgDSnTBKZWwc+JUWjeR\nsDouIxrMCFagK7v3pksvaqiaI0WKoydSKU2Li+bf9oV5iToMAKTjPmDad46980Dp\nyeLdVaAv7pvdoXw2xDdof0B0xSBqzxiavNoCuowfA3u4iqZFEMWAlaXj+gZswlY5\n9eS9gfRXx7Svr8C/G6in7LysIvModjSCZg6U2130f9huPnQ5XIQaeka1K2js3PA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 1FCDFB8ECE408675D963E5E5108D55C984DD797A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApIOLjr2m9g7jgAAAAACkjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyN1oXDTI1MDMyMTIwMzAyN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xRkNERkI4RUNFNDA4Njc1RDk2M0U1RTUxMDhENTVDOTg0REQ3\nOTdBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArxE0hDsXu0S0wIqM\nHYkp/Ua5pI9viugmGD6QwCJ6mjImb+963Bht4QhEHMDXUHsEsedlzDWYcOXUUt1M\nTPqbvTS2wvdMuKZa2vTHryxikkZpsGBU3O8WvqzCzw4Vei1Ju74U5uM3YA61bVfF\ndMAGKmtPpVaJx+sCdGWZh8tqmr9W97yYATKWBeODwjZRL29oMsvDBNlONYPj2TEP\njHvTgVZ0ExuUTYHKWeVaXCsc1A7g1mgTdKYa6T/Fx5Dm7oyIVQ/yjuTnBFkF/wr8\n5FVOlN4HqmO9hv//iCP9jDDVX1F3tzVPVwthogDspUGjhRZ88G8G79TTtJi5ZvzG\nuMyQlZxYJV9uIH/P1yAMJAPY1LKQduhpWKDU+anB/DQt3AQZ8ug9qSe+xqyOPKAt\nuRqVEc+xJK+vockjEBig7g4XPvhKIPUa9RPEpBRdXS00mDLKFgBsbf5fDkxTpBhj\n37D8V9rgD4gYH1+re5I9dTlQ9sW4YN5f0KrYSb+p69cPYoFiu0gXeBrXFhfr1je3\nFax/tR9cH1bKDOoxvI9OUG4mJUaTRX+FDGP5k19K2NJ5r5dOGRPDzRuDOVJC8WYG\nrDJuJjcL79+smirGd7IaaGEXKIvBhzmVDeH2lE4qeFynMwrz7mNhFhdAM1BRps9Q\nQVI2/0kwQa4ckJoDvBxGQ41SM9ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCOIHx+GGv6n9C9c\nvkADRQExHGinMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAbYqDhBonyfTaMFW66j16VDZvFqF6Rx1MkUAO1Bpm5ucG\nn10QK7Zi+uIGpOp9PqmRlMJTc5mmS/CD7Hkm8R4bkiwrZGlQhUJZN8MTSHJ5cW7T\nsXWwE6v6kQIzypapSJOt1pgfNBfqvbLYu4e2bEk6uk9FAzE+3GN/XVotcYVIVant\n455oQnwqq3aeaoB62vQpXEBepkRVZsbOUpzSTtnBSuHlGvav4icOcADmymlSq0NF\ncsc+kR71bwDQD+xMXFBfjcR0nGAUIFBA3cGqKbLbRiSV1HSE58cKmI7WGChJUUhF\nVzhCcDsfvukLF/p+KDAH2msLrkAOFd0zEtZmZkMtDL2p2YbCM3v2t9+7hh8/KH3f\nviXXN5ahYIlwEOEB9T75OIHDdco4n5k7RU9tTnPJT9yGhyAjIJKe9xLBI4BrQlXT\nfukmveitBKLzXuin1yMdYbwr1EDDxJgIM5lfzwjYRj42rpkwwu6M2+89/+nXNkhg\nTNR+sDbGZR7a9v4AJfpuDOJMiV1VJNjt+ga6Tnxr3TSnOiAeYPdHYkANXbcAbCAR\nO/QPBG2G+BSj58YlWsA/gFi5fJ5gxbq/mG5+q1t524Lh7OK81ImoI0hT9Kyr2DlH\nW9ck5vRYqxvXEvjVDXUh5SaYBWUxH5uoswUR8dXNcfGb+rSz6sk+9sMgQEk8x6k=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 22BF9BF4978F4F45A4E9DBF729D8A08ADCA0A82C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAc0h4J6wda8bcAAAAAABzTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyMFoXDTI1MDEzMDE5MDkyMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yMkJGOUJGNDk3OEY0RjQ1QTRFOURCRjcyOUQ4QTA4QURDQTBB\nODJDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnea2PJuAcZS8idVa\nwRrzYa9Vc5+6C5G/VGOk5+AbuDxUcI93gARRtNzSGgYnVX7ShDleSggs/QkNkZko\nkPMrMl/S3WpFTu/BzYz0uOIqu6CTrrE3Fh2NIVrrc4BqdMbLqAxNfJeqAaluFVGS\nYN4/whxqkeEKJAZQ3nJM7MDQ05GwDb8Qk8b3oJOVD9O2JnwoZx5XuNpRx9Snr/ho\nyZxWJzdLv7WPQokltud5bLDhN5Q2vi9t0sTNGaCGHNCW6f3ossoz3bkg6ZZzoT/r\n5H4DGVlzbfZUAja6b0QEXVNiMFqc8DzbxCu42IpaiTlwzrwc4/O+Y7qecfp04uz4\n/4vWQFWDSFn263kDeUh7d6lAe/gJW2huV2xb3dhGHpZeWndJOyprCkEArlAxolb+\ndnEsMLE1SaVLXpAMf7/piE1g/ItL7Zn/vmqvrYo3VUrcVBUsl8I/lqOxiuWTA8Aw\njUxjLpKN8AyxhuNXQtZ+U20pyVN8PLYPf2JBgK2MifSEgENztEMsPcExmXdr24xG\nBdqz7BcIfttulIqQTYBNgTdWfjNn767E5ZKhxciaGUrtq5mj2TShyYh1MqL8tgJN\nnrXb8pfNK/4J/TZnMo0IxvQrIWPu8yhRNVw7x3FCCPU0GvIzMDcHVJ055Wl1UjB8\nKqVQoByhXkxg4AV8RsQ+Wh5tRp0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGCPmbkQ1gR2SShs\nLL81clBcj7/zMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJYxq+i0pajnGan2MLOWsr/rAi9IwPEckFaXigFJFCLFi\n8tC57qT8xH/5SmYizFsmB01FSnpwqVH5XC2g3HMDOp+c42r3uOy7JWsuLGyX7NWS\ngJ6ojQ6Qrp/Uqv0NXlWKTkNLS5fwrwHajzkDZTZy87urQgxyFiCBZ//oyz643vp3\nuFdGcb4lduA2ICVlUuVNaHVz0z4rUU6zyuTi8S2d/ySZiZXaVjHmhoTQQ/99muLP\ntkC+0EdXh5bU6BtApjA0teitpNhcAtQhbZBZcpWZtqNHKLERRGeh6gt5r0GKmHno\n3dDwYQtJ64A8DvNojDVdrvY6jC9lJpK90oiS1TFKFkymv4xRmU8LqdpManUdOkMO\nto179FbcwSxwFvPkd0WkAFdA/X4MKc/Xq7b3xG11bqrE52KCu3VWUaNuPZV0j3QB\nQkmF3Kr0s2JgO3I3S38XEkS8EoQXyCEbSxdFCgWuDvG/Vp9kqbEak7D3YosyiKji\nDxi5E9+1wxeIqdhTnSvXXwN75Vr5cltZtTeGMct1D5nll1U/FDP4XaMuqYwx/adF\nYNSCBnr4aC0C/S6/jW9UDEksrgnOgCih8sH+a20RALDBZ4B4GsGr1orwPds1o/zy\nxD/ePQx51tP+S8pnILLpVbvTlbMZ6m+kGPvfls4LfvA4kLB88YoRZO1m6hWUtik=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWZoxlAjxhDQHAAAAAABZjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUzMloXDTI5MTIzMTIwMjUzMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0\nNTRCMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzTrLgwWtehz4hmB/\nc3U0y/OqF+ToWshxq8eeaugvjTKXTEcESyNTuE/1dtY3Gu+IKZQ9a1TgDXTMR8MP\nkOlR92OawbvKJKBCH49pxGXNsEmW5AyA1oor/OCI0hme0Hgvwdd9q6hajmT1wBLV\njLpP4u9D8tuRX8bqYhh23A4ZzoQ41p6hTCNH+7GMyd3jhWXB9Q/QccMFcWVRMbPz\nW6HJY4IprW2rag+/CYmG4gqbv3grhcoin39wFAGTBEl6Npv9ZmS1fhWCMyYf18XH\nZsFDwt5+vC77s6ljj5vZSMDo8N93MFk4ET9uQ31VwuxIVTWt/TezrYzFbTzGxwWw\n5UH5KwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUNjCypWk7Xitu1eKevIgvKic5dxgwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCcTlIr\nGj3mQkL9N8DKUAmzTW+BpT8WftbIOhtR6WiBhmJM9wrOTBLKyDkmeSUFmNXmD6MM\nJBA6vp/JW+kOQ8m/8JC5/+WfgftPAeXxMEA8tJPIuPLZ6574osg6YwEd2ScRGbqS\nSUuKYBs4p6x8GcQsxIlnjCeHJTIKy8Gw7qXJH78yqk0XGIpih8ZkyBIYjawbUAzF\n/TrpTU/hnl0a1UTA+RcBZj5b6NY9kPQYwe1vyramMXSMWmdB1wK4tELHSONLQXLe\nC+5sFP3CONrNVjmXzLQKpupW3geiaYBJGuZMv+ORjTetjwgvkWE6wR2v7VOXTjvr\nLdcDtmU31CfQrnah7iVPD/QZSGcgdqglnCDQAR55a3NXtxpFghrRCmbCziP4O84c\nX/9DiH+yF2xPlXwSyODQtvzZgOvr4RNiUlzBtocmXoQ8Nd74FsR91mnT4Usl+23T\nPfKTzGmyyf1/77jNP40nllsk3NdGZs525yEi9ou2lYztIVkhBFq5voxZXp+qLXjR\nFlEov/yT5QBTlcVwN8qWDdvmnNEt3BMzH8XOusZIxyXuUnmxM6D9dl7CyTRH0Mn/\nUmKw1tiFzjhTRPMGMhr0ymVbcH5Q5TjircPg46wU5hv8k8a5RXW9uheHBNoHvwIG\nKM3bt3agSyGB3kF31kGlF4OQ89VOTQxIkwfBjQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 265CF32470FC4D93C7022FA34AB4C8087948454B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgj5h3O0djZF0AAAAAACCDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwNVoXDTI1MDIxNDIxNDMwNVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yNjVDRjMyNDcwRkM0RDkzQzcwMjJGQTM0QUI0QzgwODc5NDg0\nNTRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1GDPxa2D7KtXxIkr\nGPDtkUQj4z2ZfGDwNPaBMdBiUPkAGBfMLZMWGnokp0j0tEyBMmTCCYFHdBjJK/2e\nIj1KHge2LYmRXybMG6+l6h/CgktjR9JSAS52a9u4s1UwiPsFXokaC6spz0JN4iz8\nwCuh/dA7DSlmLb3pBve4V4AS/cu2OUfmmPPw2pBGfntzRVQ9wwHQN164YoxxaJKw\nhxdl5X7ENoQF7WRYpQnXihTiBelWKMTDFceJLb4OodvewACVpCNTaNi/DlEz1IBE\np4AWD0Pae1HTgiaBJHWYnPOF+xQUeBUbsxaFH/gpNPKFkmgDsx0w0tSH76ga2aOr\nFQGWGN68z2mKvm63US9m6Cux76QtzQH1z06+U62SLphhHB6sWi3p+Cq9liHzOrRj\ngCiDcbjcSZwgTYzm8vJ2ZL8zq1MWlUlMIxmsNJGd3OHJV94ZdvIZivRxcWYNxoaI\nsqwbDlmNfK6rU3jtfcj8qStbTXXDBP5JEyZ08UKDkZHrogAfZT1VJMafqSEbu2/I\nTkSiWzA4p0PXkoZE+Q9E2ayC4733qkuWYeSBiNAm1a0+B6hw7hO6z3Ws8pP40qIH\n1vpDXOTlMN+LEZvowIoc+IdZOgm8Iiwo73C5M1smJETWmHFNHC9PHfVO6eHOupE+\njVPUexx5DAjW3sLBKg+1iph9fl8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIMzn8xgPX0jhVub\n9bnuSueoA3x6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAbwL7RMamL9hvXexsTl2wCDwm75fDD0ViVS936Ds5Cnst\naQUoDFZuQZzFQ8C+8ckKu13au9YUVFcH82z9htzl4sEZwVK/SLfC2z5e60te5D/k\n0k/6pvOJKytB/rIPvI+D46iRVdp/Lu7w8YyVmph54e2s4qjfNW/5f2+7M3M+tgMT\nBCUTSdZc54XisaQ/17KK5V0ZUg19Cy1cGon5OGspWeCmxnqSrujj2duJV0JsfVcL\nJklwWdD97Hq8THfNq+WFbnXs+WB/TAli8oawfOCet036C+suzrTUvRFcrpPzvOOR\n+8HgwGyvjb+ASPCYjdYgRREPqd3kLiMg1TTi7ytMnKna+xga8qnsdp4ZUh7TEjmC\nVr6F8G3r/GUgpKno9gIEWEBc2pp6wTzDYwHTbYTvaZwWS7nWMPOXvPuivuECvV3Z\nG1/aKIfn/Z8ZrFAS9iWsX4A7S2d1lwxOvbRMVfLzWJchGNxI7UQ+H1RRZuXUCujG\nkwFfLEBc8Y1uvMDXVcSMmlSLPjVhkpb9SJQk+am4sw1fHDjHk5dF7Juukj705wQh\nCe+PR4Zdzb6BWHTqX5Z9xYr68xb1zOiTbAQgN/C+R4Ru2+O5KRS5h0RdSS/268Cc\nr+0nbjjtzwAk0+IB5IF8mouxc7jvGths5jz/cqwE1u+yLP0rUDeDac+6smGAW5o=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 2A4A698325A1B220464EF009B01892268B25F84F 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAf0SVwqERLtIBQAAAAAB/TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0M1oXDTI1MDIwNjIxMzA0M1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yQTRBNjk4MzI1QTFCMjIwNDY0RUYwMDlCMDE4OTIyNjhCMjVG\nODRGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoeBzFw+nc9MIUXfr\nt9870E4YZGtFnYquR+W3nKHEp1zMbaz6Pku4zodzxR1nnZSTniZUr+NTUfONbumb\n97cFjmMHXzfbTXFWUSqX+zP2LAxGUBKuGZLIq/FhcTSeHjhUBQQt5ndfPf1bDDVI\nhhpe0qid55Wpm7qf8BjmCVNTk8sK01VYvnUSolLwvaiGRz/1naT6KtPOHmOBtbA2\nlkNp74tGgbkLjjrY7sy/V04LTYYdoy/tSkyqq3fFlH7ZoL9qMXC3o0hwc+XgBVm0\nSny3la5UvUPhb9TKYYTCa7rko1IXTcV+LkLJ/djal443zyHUDgl6o0a6QaZz1HhV\nO469ErmClcdK/rInqnnUpBeGzoNExzc62tlRYxQDXw3zBE0rCGnH+7mqao660iDs\noUHvDHTVn9Lavv41Nas4i8WZWGu21+Vf5FSUlcIdQRHooRYk3MnGvAav53vE9TRV\nb9NXs4xBqrc+el55Qbh9CEwRz40O9+Cx4ji8NFW5dEXNg62mInRvev/w5pxP6Vun\nMd8HBhf6dKHJ9kQoRBlNDx5WOh/o79UBaq2q9+CMiY24qxp9asrLzgcIKfTV1WTd\noVnx3C0+lCndrz9GE0el0xFjHfEXVyFXkNr1Iw7JMeZbCY3nAiqMNeG6WLQ1tLlm\neksecTyBdJ9PZVkppVWYySkm7MUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGSbUgIygx09nMcD\nPy+PGDOEqNVzMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADIePek7RUcMqizjuVHuo8Pim6hnAi7SK0LWYkIv29S27\nPja/HyrIl3nQsKT4HueMoHpdX7GJab779FTPXc3WXvZ/8QgQsOUMF1XxXQ6mnToo\ncki+wDxW9nPF1nsFbIgrFCRWsZwh0f94wWnWMtyiA9OuMFJqa3ilkMwNBcSwVuqx\nqiERn07AFYAIycsSRGJRH18JqEb6cFqc4jhTqCmNiNoLSZtOXkStnFVmhpAprMjH\nAmKYaTsj6ssGpdUxXiY6f4a6YwHNooVJkLyjzubScgfv/rmTWzCmMxBvnqJ2ZlF4\n+CvJG+Icdj+tq+RRPmFrbV8HzamM/2tAVPS01BhaqS7Y/cpJbBfRrnb13WpcApR5\n0jjGLQY6fHSU7OqTuq68e8ucQeKv5ZjXv1gxtbEvzTzdScDkpVM4tPkJrBzwg+An\nubAoSNaysZt3KbALlPYdET7MFBDsG4Sg96X1z3AKG1sebDDfm1jLZFmclPR7Wuww\nPdUQzEkhORsBbK8nFU5Dqgt14kd9Eb1eJSvp9h23bfd+To/ftvXnDUzDSCDmfZ8R\nmcbBql4grb2a8xRD3SP1Ss2vv/9/RIxzRrklt+IPnHI1w91wHEN/bZo4eix92YEN\n/f5T9s1woSzzB7CSzdx1pTVtaG1pBRKkfxMl4TSumuq8HcZefKI/M9LzOlya9Xk=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 2AD70EB90962C541A55E2D15B85BFAD286154F0D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAActRidZxXMU5EQAAAAAByzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkxOVoXDTI1MDEzMDE5MDkxOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yQUQ3MEVCOTA5NjJDNTQxQTU1RTJEMTVCODVCRkFEMjg2MTU0\nRjBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Ck9qZ+E3PpfGl3r\nPsxiVOH9+UUukSbryND2ONPQNqw4xP4Pm//3qvVJzO9Ku4llqIGkzpYsMcpvE0Xb\nWlBQo65mEJvSAdLiAH1KO/HchiDoj31skLpu6YByrd9bmMuX8Zq9fG4uekp6Lm7G\nP66mBsF/NH1VhNiuDrugvcTeDB4b0aYE6fbszX6nALMtHiZvdsqBdmkJz8TVrObW\ngLoDnzjBn2YCcri2pANgrIHmGFTUg7dM3hQzsRtjACPu0KQQxsn9qT1ZA1rDnk4y\n4uXnx+MpyOh1WKzVGpyNpL7sr+9PlmZFJHmg7znqHH7OpGMTYKuLiU3KCXGqgM1c\nVhOdVX/r3FAmTCQqyqy80W/Aodcg5uHGu3MHqMlXD0IIPh1kyKlSA/XHHgxvWh0k\n4PRyc+ls4MT1cae/BLGJnFtZ9FGA/CgPZG744dUfQejdXSRZ/Ovp/Fmmb5XHfK7d\n9lHQMfchVmtBNeJqE5rdL4Tzq9Hrd5WYcfy4PK1PKx2+fRKWEsAe8DLmtWEJmFTn\nu2MGq/wtCx4+B+uJCCVx5xGmmnN2AerxCbjuCPt7/ewbBHAsTHeBIxTgJvlUP01L\nycdDhfWQhCMt6nfN0YhU4sIUvRsDIANprVxGTxm9m1WysHcyO8b56BGQ5Fc60MFk\nPduANHx9Y9vOtefSYIccjcCsa+cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEP2AapT1D/FQsyt\njc+ecj3KwTA5MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmUVundAK9xi0Xzt9eVkYrRDv5vOJznCkR3V7CTaQ3lmC\nD/pKgrYYjXsiOicJJ8xzQ+VaEGjNDO/Iv3UmVphYCxDLFuDlxb+tXkotA1ZhWGKg\n9kKQNwdUaMov2tGP8SPvODPFnL3C6Hq8AkxDmX2WiGZso5IDLpDOuA2+CUhkOAzc\n6jwbmeTLTi3qCnhwOqqu620yRtIP6mNjsGe3EzScJ6EoHy2N6hCc4XzcAQuhzg9M\n0f+h46JZ4BLPg3ufNSBmn87DPtnEc4VM/6dv6BEaidKSD7My1gcQClxX269zhWNZ\n7kEN3HTfUBlKire+urkg6ktxzjhM871qgUQfOyJGeVaxuMlG9TxtVqH9RVk/W/8d\njYoF+2KoXcTw2hHDiq6mCDEW+numVsfQjWvQrzjjuIg7hMJNUVgzL9WonWs3M9UC\ntHWHzi6ovzZc63y4DoyOZ4lvmGzqW+vLBImmpus7aOvOrZVgdfDCttW6ALm3gSxR\nNY9P4Kw+fiSAQREMaPo3JipB5IXLETK5YhW4BTNNfCec/GGRmA1tcNMOL4QWJLnR\ns3LYf7Lm2mQ7t4P9K+wRcg3I0MGy3KtPyJ1Q4gFenX5k8i16cLOrvgntj91CddLp\nxTBRg0LBMfEEROZDsub14mhpFQjq0IAsZ7EaZS9PekO+iRHXmmRvC9YTG85dzds=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 3735DDC8E300B817AEBE03503A92EDDFDF1AC71A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAc/X65qJOXsUZAAAAAABzzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyMloXDTI1MDEzMDE5MDkyMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zNzM1RERDOEUzMDBCODE3QUVCRTAzNTAzQTkyRURERkRGMUFD\nNzFBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA20CJ8D7BvcMUsCjM\nRxFmlzXh/kEm9upKVkfbmD15K4b3E/tXqQ152HZ2Iw4mALen7bhHZa1obgAdZ8Aj\n6z0hxAdUmtM2bB0qXI26D2gmCO50tuWi0QRXKs9e2zFYW+/us3E0FP3yQaSj1zA4\n3qBiKMKgWQmbgOZQ/9JtVMOOVOV2VJke81ufnNDfM4U730OjZmp6gzLKqxCNIMPy\nJHP2SvIrFMyqMg5A3F8iWxlew6NTT5io9ahh61NyEN41oaCdzhqKWOS0ApZkD7QJ\nVQJvetaGKemxc32WIF7q7hOa2itKz3DT4rQP3XRymMG+ovP3o9A4Rq/3YWYIONN7\nBDxZdGCUoJBKT6P5Om59Mt6Jp/4h4taeslUgPyLrTnVGvk4kcDscYiCcQroeQqrd\nhJ5MAMy23PCGtkTBEUsHXpIMK7CPAjvFMtbJXglTH9wcvtBl+05KDVDjAyvSlZep\nYpOYw0xEUKMpkWRha2rIV/6AAspm0LqE/Wv428gZjmN7zUwPCQAKU/rMSw2uNew+\n9Bh4bieshi7FFG4oTw8hVb5dRHQb9kQbCgm5vDki89EjwdB0mA/KpEdJ2RWjk0m5\nd2Ppp/O2KWNN/uN1iMYD5ucgOSffy3ifdy/BShOzSSaJ6qM1vFm9F1dG0POOB+ti\nAtCEMgEeFf8MwPGEAc2OoooiIdMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFO5u7eHUNBfhlSMk\nWGLP/uVWieo6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAIwRY0NSEd9J6bakM3ze4uSh4CvK71fAX3dmb+evO/uV1\nMZGmuT23LsWqpqcih3KjMlEB6mJgwWubAsfrb2MFdu18BcDqkolQanLvCJqtwFyc\ny6H/bA+0tIgNl3+ndMGJZawwEs7HD7VnPVtcdWDaK88G+qxzchesEOOxx/7H2UZf\nXrJ4NNZazAc3vuMRkopJ2o93WOqIaIcFefTR0pz9WD3lllgejuhyGG6SFAROiOGM\n9lNI1Ac+RS+8NINKRohgQWfVwcDsA6IJayet8wqYSUgpoBSnNYZ1h7u16VKRd6Ym\nfmPvdI4OgiCeYtQz9o00D/Lg2Qc/3S0qZLL8kXFUsDBsBbarB0zBzhILhpD0qKE9\nU5bsX6TQDrxjwty4lQt8SSem5YsRcWa3Jxm8/zT+Rtf7yfzV1jfNd0i7ZHbjVPRe\nFq5/Q7GGIcTCQekPeY62nSPe5Z5ASIH1BEoAY8v7KRX3mKTjpvhqtLX8RaDXJi9A\n2iGekxO9eIs3EKUkx1J+s2G9BBVKmDBRp1kHoZXpS1gxpCLd3WeIQK049n+gwlf5\n/YpX3AWx/8Ss6tmcEpJJEisYPXgI1kuYE1Ll8P4H5KzWfUmvVOSkx7keTo5mu4dj\nxewkt5OLMcB2+MFJdjrUHARzxjPEXwB2JWAvJuWVw/M5RNEqiHn8XxxNrDMwT7A=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 3893CDBDD873C4233315E1B13BA96A0D23CC10C7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArLwE15y9VH0jwAAAAACsjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0MVoXDTI1MDUwODE3NTc0MVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zODkzQ0RCREQ4NzNDNDIzMzMxNUUxQjEzQkE5NkEwRDIzQ0Mx\nMEM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkqZCbFkG1KJNQXeu\nbdlfHXPGIu7+toojSBs6pf4T/bbYTvDyVHdZ46H0bOpKI3C951CoANI8J+vrX7Bk\nLYvF/aleDd9JpQM+jc2kfhGx7skhArJNKui+JzF/IfJPHIlKPp+pJEgbiZOd0PcJ\nge7XmX4L00Suvu7bi3MH4JTH4D90ww7+v0qx9pHKgxgR0CNU+A6OqT8jhY7ucPoT\n/s7x2ubukAgySssEKdPCypFG4wpTe4AiYa06jpaia/9FDRGyVr5GGrKDHhrxAI29\nXklbnElP8cQUrwCQ9cQHb97Ah4jczp4bbKnVWrG+mVYJpv/HCFUJ1tOjmUgvX+tu\n5fzO5+4IrDQallIg0xQJysmGP4Y4/ngqJTh6kV7Ly+ALQcsA9XpcGiEXa+LlxePN\n0go8gj6OCCFQOhIEWPaAUCYIAP+L4GjoEWCbfttNc5ydI4hQs4jabiONlUCU2hwg\nKsTiK9lpGZKDQmUG40IXZqQYy48SAjrZypVWiCXMIpCJKCHUDB8FlFd5/09WZhJN\n7ZEU0GLaan/KX4q19G7+rze2GsLAnztHkMI57kJrtuDe+RIOT7vNuamNkxLbKYhy\n7A8UkVOKZ9Rb1hbX/RabfemLA4YtZKbEdymZgGZxJRJasVFwQOPuBkeqOYm6RpdL\nASuIC5UdUI1kObihUF+M1Trl+BkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHliwvdgPbkvVXzD\nEYjEU+zjf4scMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAcAkW7/NMilgQX1uMiJ70TTzMmcmb6I7j+MwlKAXP7p03\nD8hGQHMeK+3J+lVowTxURt89+7saV6TScDdS65JohmD7qqz0tdZEqt5sD2HuY7gF\nupLWZudhLtE6+hAp3bGe3sFmdt+QyHGJYNgVUspESasEqZURCckJMcvigBpspluC\nX4MsOHpcUCTPQUNjB0OsFf0WVPOz1PtIOp/v5ppKd6SdRJLKxzOcyZ5+2n/60ja/\nfSAb1rBKaNLkE3YJUIAS7Ex6FhsuAPaFvPs8bw1NfpJE44PXDsJq/yy/SgCx/go/\nVDa86JTF9NJjhWQoxDG/sA0XUGnR72B4FSz40BpUW+aC/Cydq09Fb9PdKOCnT1G3\n7d4APumORxp9XuObLxL9/9Eshgy+LLIeKUkv8m5CGuG67MwztTVLnA+Yj4XyN6pN\nj49KXE/JhrI1M8ePs1KeD7JKdeXNA/txyEy1ZWB5hlc5AyQ0aPsuoSLcTT895m5B\n24YOBj7mlhKJlN1ISBgQZf2lGyroKB7Q0bBgtgUf/TyzJmBtcH01LL6Ex/4FiYY0\nhBxyxoSaD5HzU48Tm58pldrZyWuWo5AdRhzNa8sQbEOoX3sPj+5FZ9BuDwdTRBC8\n5UmREwnZtPTmgU2BmambAKjkiMaepIyKO9G1BZr5SaUdr/GIZJ1A7rxmRjCHIpg=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 3FE3E3E0383ECB899118188F4E2B9644DBD39A3C 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgLM/GoP4o+Z+gAAAAACAjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwMFoXDTI1MDIxNDIxNDMwMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zRkUzRTNFMDM4M0VDQjg5OTExODE4OEY0RTJCOTY0NERCRDM5\nQTNDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApOBiJQMedM3g905q\nxlO/VzkyLF9k8mB5wBY3Fm1x8cqlfqA/OPmzWdz28ff180ArGHShMOw2gpyoPToA\ngqpFZvyZYHzE9Kb4zgtEq5oQEUGblyZC1naEx5nI92a9WjDoapF5MOc2OjC+SC1u\nd4ATO8Z1D/7sZroD19OgIcTON+NN/IEPZocBXq2+xaiWxdoGdwNJ/jCrWXm/cpAX\nBQR87lEnZmcaFAwySbzQnX6Nmrhqcvlp9BxmzsCi1E8Cj1qjtUF1QEPTtHHxcKEK\nnLJ8qN43y/4PTNVWNmCQnptxGXzuoQZIwE0SOTkzi0Ry/D+Axto41DSq83l5Ob8i\nVDpxSijjGgHxh8HokInm2ul5is3fGN8unBnQ49LiIHaP2gdlWVmjT/seJluB+S/R\nGS8qknEgM20B5Kil6ofpO7Ld21WJM8fH0O+vxkH4KuW3NX61RzeZg94SDX2VgfMj\nTZ4oIyvKLhjIHlI/3j/Dc7/zREiwc0tgCxBzlZJ5y3cmNXNL4orNtacRNITF6ViO\nBHs2pv2MD16IDjFp1d4Xi/+u9dFnZBfANo7GiUCQ+atoUSuUfy62mHaDn6p6zUal\nQIPcvXiLoSsPG5K97A1PfnU+r2LFdvmojQY0/l74MlWEDNpEsR4RwgyMMHtyJ8Kh\nZyeS09dm/e1X7A0oxGrS7ju9QBkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGbpkqRSdSR1i6FF\nGFlOeu3xZMWiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAh58XpakQtOLlnrV6c8loSyxCAO9en1caarfNv7QC4iP6\ndv28sWbvhRvZhd+iABvKLZ9rUsLBOWa+LZMI++bbFP5R2V3Atx/Pg1UKABT52WO/\nIJHATtnjEoEmNWBN8LhsE9RYRkmN9sIfD7El7nek6l6n2M15FoOqNnz0c5a4WW8K\nc0f8GRvwQEXiZT77Cuh47AMf7jifw+HRca0SeK7U980VtMMyefmzmFclAU28e/a9\nGfwoSuDpekLztq9qcm0TsN3oPPmHCkRyFcADuWGZSdFQyggI+8y3XkN9K8+MDrtm\nax2ro21ynB4vrJFZawkFNGGP34kckt4Pfyu+g30A8Bj4IoVaE/l7zseQcUHQc+8y\nl2651YZblgONyQegikZXiOeoHHe6Sf9H1q2VG+/yT4MJrNSY2Os7w9om4EJOq7Pa\nbgsNag5gJmhqRGa8dCgjfUHAbf10YmB2UMuYTyOHFJIZ9rEZq9z1iBJ3nocbdNDP\nyRhMOUCfunsLwdPN+DcH0+6yyLzcN00TrDkLHcT4ML1A/VTEcUPXFEdxja4DRPJa\nzaAk88FIOsxoQn+zvCZb1qMTPfdYNumqGlrkzLprW7mIR0K0Ny3in3X54qQLcpbn\nJ/cXDO2fVifKVcn+r0+ISbl+HQ/WfnrYHG2AqLH9JUEUdCNNauanNzSWKI6mOiU=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 43325AF5500406548930CDA9A67DC78067B97801 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArTzbr82xHxZHwAAAAACtDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0M1oXDTI1MDUwODE3NTc0M1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC00MzMyNUFGNTUwMDQwNjU0ODkzMENEQTlBNjdEQzc4MDY3Qjk3\nODAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAyETelvc2dOIGOIFt\njs3o2qNYD1rMTAs/PTDBJasGQYiD5BwbetlTc790L67TbQCIDCZbuxBD4ekrWTdu\n7rGrVkwN4tEuIKRuDW9dBgYY6yR8CM0GUkP3prBxk79uspUjDUAs/Fpd0BcPgEzY\nXLli1IJHRMcwzmeV2UXsZ8P8BiDOY47LIQ06ByrnP2unnYkxaCpzLYU0nYb/Cq4c\neis1FMi2QlsQeBqHQHcXlAEjhAdTYlhKY9GbMQyciHJpkyECTPkPOFY543otRD09\nw7JUwue/fOyweTIH6BISzsKoKFFsJEp4UOcT+DhzIuATSiGybLWRF2XRU7Y3R4/6\n8iwG9CNjY87TMQMojnh1/ZfMlnrGaVT9OpfzDQ20Q3UfNcnEVYOz/uxJHOKPQxyV\nVdpud1ufU+1+f6xz/+nMl/Vx9yBbB8AIKkx5baaRp/QBH+cDvD5YzdXVVOGm4KRj\n1pZa6p5X14U1Xuiv3SAD2CPf2m3bJRMMHNISaLUKJbkLMaC2RI6/X5jie/0HtGSF\nybmiZCphRMkbSSwy79GKEE2PlnjNdYl3as46588awg8swOZJYuQBOYwBgoElVB8i\nAGpAasQNFwT6zXebTeaxf3qob/n0N+sh9os7uNRObN5/cI38Zi8fo8W0p9ZlnawZ\nnsD9FmccnN+mQ4vzCaTWgAfZ2z8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLNwEcUn+/oPjhW6\nYn70peCWy13OMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjtZb7DLXmvk3hJD0DgrjiDB4j0UgZYLcBrIiUlHGRyI/\nJV15RQQbXW58KfR1gZ5uzdFJBhk6/ur55zRUmeM9q7ByKG+FxntBc1tyDTP69jB8\nDlByi9CiSugOCJpuLYWzQB+pK2MREG7oMS4lEvYkAMc3JN1jIT3a8AA8iT97Q5DX\nQ4z8NU/zq+05xXOALTlDFJ/DGImGBRvUcL8/4AoUvrZQN8LP57/Df82gqWtGbSzw\nBaMiV6oJRy8YF32Ki68dz3hFx2HWFEl5QlBXqxizmgfM7rH8X2p/xTrLqiVjKhfF\nkUZPUuTg9PAjfe4/MBwLyCH/NaCvafQBIrCqtxY2KHSvuV1mt2DiqS2bNGqZWI4q\nqA1M8rGMfcR2uVmnMnrsuIj90DXppBZIIFZOvt21Bn0ZwCzynD4kv01r9cUHiMBS\nmg+FQhKjDZI2tMVhZ5sqqlPZiZGEyPlsq9ZyJEChq+/0vQg83UD84uJw/nrdIPHY\nMohqnIMOaBsWNPUCJEBeYMwl2fvmMd0YdIvz/vmKqNN1Y1IGNVhW8GrlmOUn+xiK\nwKjeR/04dVCZg64GEsp9MtroBwvsZRSsswt+3azi9tqJ+EjOTTauRoYaco0rIZ8e\nov+z9AaLxecbGuqM5oZxnqEHOd6KxOzri0OJAmYkaB2rvo+JQbn72UlVvVZplng=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 4AC90CEE68D4B5729DE4357D2C475884F409B7A6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAf4gzVF0MihSDgAAAAAB/jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0M1oXDTI1MDIwNjIxMzA0M1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC00QUM5MENFRTY4RDRCNTcyOURFNDM1N0QyQzQ3NTg4NEY0MDlC\nN0E2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7pB4ZIY7sazgHHBA\nCcODC1R4jHG7iJ+nNg1U3cMB7VNU01vQ4LS3UeVZhGLqU0FE4zgppoXmc0xhR2Yp\n2epFIhPSu95cs3rqsfdR8f51lI7NbGJZr8RUNNgofeeY/PBkd2TC0HFTc605Kbxz\nPTiyOZK3Ol1/Gj37y7oaZ498Ii6NYbpd9MpJtam9ilb8GprtW3uGqRlEEg8H0k+d\nlUr5uEHWt9fgqy8PL2A0nKDVApxvCssjHCQOPaqVev0itMA3pMY4KIdJ+mpjItC+\nJGXxptTrjO1U4wjGO0RZdkP4T6AqyuInaGSWDV4Ho+JI+1WEj2/ncfCCWh86SKTi\nogfqv7w2Ef6UtavoE+irNjvgiwnlOjWQ4Ey21jMo8PdTcw+Le49dF1ckNaskwnlB\nxxBOudJe5zk9a5Zo3snUkdImXzmzjNEPKN/L/JIQSJemZW8Iq4Cve7UOQ01vsxnO\nm2Nr8vm0WBtzzlN9zjHTo5cnbt43cx30tpr/INEQiXQgPhqpKrCHzBPowWVVj0rV\nzxfpizdFxkKAjngOyu5MoB9AMMzLARoIdtgwtH7Q2FiieyktSQJHYTEA8A3qpczH\nny32UlVwQsBUvkcKochPz+9S7oCKcoXZkEdrMFVSegFJUrM1NG06EEXL6qB3PGBM\nKoRjRddb/EGCUfQx23UdENU4oL0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOn9KtI9Wbr2pFwX\nbvGxd+XcqbdXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAgbUZBi1wh76z/znLGDU8AMcJ14IGvNxwkr5yoZ1OloV4\nP0Lv360yjwLdBmplxfz8x+H9X6bhw0utdT7atUNTWQ64UO2BzcasOXj2QVv3LJxl\nJCmI849hExT6j/KDnPlliZNIt9WbMSXw3P5YpPBOwm5LQtaa9uVnGVatFxORLEdO\nDcmIRKBE1L6i4nD4VWPzvAs+d/I3UQEWTOr4w8hHnhfYPjcxvynV0P3pCFX3hcVA\nDKDrSc1eLI/Ms3aWk6bIylGp+bnHBWCiQVZDgyzWKu8Nf4iAe+8VNlKxH6qLzXBY\nO0m0IuQWHF1zjYgmTWMjNMMuaYmKOH0LKBgDfPj7WZOYn+AvqVrjm459fAj89J7o\nmVgVOeVgk/aUddMIusb6TqpFWe/HG1Dlw3PTLh0lpCpikSB+3DHALxb3bcxnxhZ6\nnLg+S7P4SSettkMVwBzH4XRj1jrlXkZTceEGlbbLVl2N9mhW7mulzBLp18GYD3pr\n69Oj/usB6oTK7kXHx4ieRZI3C8JgyVXQBVcVSO/YxaexSTul4yM9y17cbb5u7yvW\nTHMbeldoqEPjCVgej6oBvnW6xIeXYwBLz319hReIfIuYltX0UsAo6ZHqXvp1BBeb\nLLerGiMnSu2SFicZBFsi2f5z8vhOEmhr3G6BR5+fJ/P04YiTZWX5XC43amD+oGM=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 4C4B4D648908E45BFE5A10D36387A688AEC1CF78 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArAo6ZC6iKjs+AAAAAACsDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0MFoXDTI1MDUwODE3NTc0MFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC00QzRCNEQ2NDg5MDhFNDVCRkU1QTEwRDM2Mzg3QTY4OEFFQzFD\nRjc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArosURtwJ9MmRDEdg\nJO0iFiXbvPg/2a1pXaBVnF5vgAgbZIJtv3IYrfaQdxgEdILe06LTMOl6LejheKuv\nmiF92QRYIcsAfWHl2BJLimfTlPBpmrX3XG4eJ8y155xlWayPgchsWWu4CkBzm5bN\nYi1jl5uSOV7mm9yfvPZcq5hKDaBzkG2mPz0ZVz/VacbOfHqDUh8afBAcmnFmMbvA\nOPlOfwM4MqV70EjfPug0OI+q8etwPQ1S2ATnu0Jrg9ZoqDW2onyhHhv8hZUvBfOD\nl2FiBRR85sLMNKGyKLgqOenjGhalBJUoum7NDoljsYka8lJKoF7EgSVE49J7RypT\n06gDFjVWHPyY6Rt33etxg3aOimkyoseK+uoGVpFh8Jt6O6jy11qdiE2abSnZvm+b\nLmzY3x3w2hbgSUiRnIzFYnNI1FypFMUi/FFbTT8AqDv/LpZ48vAMPTBoMI5B2hBq\ncx7dw1YqpQHeFBQL+BizrmpErkspuz30vuRp/6uRPiw2I6GYcr2hFIIXaEm01Plq\nIOaubEV59SjlYILolltD50oRuJQ6IZTEaAPPuRau5Fl6QmTxOLlDmKJQrEjT2ryi\nj+WiAi152Z/RdZ/WsEDWToXb5+fwZMk+WyjuoxqqMR4Yi+deufEERrKnzH6MEkKK\nYJGkOx4d6q/2Iloj+BxQUGCIvxECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIroRz4vofd6ulsI\n4jdGgr5TR5uIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEVcNJb8s5Jsrq9gWfD16u6i5tAouDueqb3oCjY1VBt2R\niKAOzEVHJAoi0BoRVqAQBRgsf45ky9X3+alScI0PnU8inzCASc7mGhlRGuvEcps/\nHlT4xBA+ip8SEfvRuS8PcIFgWLyMwe7FetbaCgP8syo+992DkCYUx7oBxjW/HqIs\nv2JfeDndnMy3oXZsqPSjv/mI431hx96Sh8QNMFqFc0kS+aE8tEPgF2eCw5Sf1G74\nmEH7XBNxTtczgQtlmkfzPkB/e8IaaEuWtlZ8b/Y/dtILsgUGrTbYFBhVSehI6uTy\nZJuMqHvvfB4S56wgLJosR6sMXjUpYVu4JC+S7j2Fn+pOplBjjg6TCRs4rf1TSPut\ntEiK5usKO7ooH1BQpGVJXUloX/MSyFjvu3LMGxDr1ftojCEWRGDyL98c5AQNKNJf\nTL0vLJZ5J7Q69HwBFJnnX5ut2dN0AFIJozi5JIIDHhUNOJuyvJPstpK4bEDx9lEz\nInW9icCh8rFgSBLSbdDoWzDsQSE49/ZON4b+SAdRTkPn8q9jur6+zsXl1gaJ3Oy3\neJ26WkIqZR6NN7U9UQtXMCt8FBDE2eeh9Cfle09IZQRskfmY8T6oTHy+qzBi4szc\ndHF6m4fm5/7uyDu7u3Itoo8qj3ohvqUiqbpgyt0S6qLMA002JhRL4mkyInHSJbI=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 6DED70AB841AE9C22A03647FC8D1482188D3DAE3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAcxMDZTDiBstWwAAAAABzDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyMFoXDTI1MDEzMDE5MDkyMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC02REVENzBBQjg0MUFFOUMyMkEwMzY0N0ZDOEQxNDgyMTg4RDNE\nQUUzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArlyX0+HfTL8JOwdo\neZT6R+5f1OZWwWd8EQiGQvt0IEQwNmOQ1WbVWvNhtzJ3EayCkYnLpWMX7XYR8pg5\nS2emBW1AWapza/+GLTTmPPYVyOi7+guvYwm7sD47J4Oe32qM7fqY58BCSpfbOY8P\nfeVOtfpkridInxX9qIM7ImMgHRfzk9cXcRkYhgluDlZ+ogm72dQBr7NrSVjFhFRh\nlEjq9fw5QA1FBxviM5Mjl/dhP+viH3fEK83rZMxcLUnppz77YvPWLVfZQE0LyOPh\niGrDVaO0stwh4mDawMZs3xRg2oixGbEJP+j+XIBkJ8wVBqLSHXbJabT439owHMly\nc5lMjd210NOq9a/sjBoPa/kexAodl7hc05VPUuKdaa1yBxFBsQEmAmIGK4OgGiSc\nnSh0QpBMmh/7guWmW0082HID80NZBCJMr2WEGK9eo1hs/H3C2cv2/7fRp7MPzuwJ\ntZR7OuHfSsALXVRGSnr82lKSomKgaSUFwSazqMqYmPy9UO1anzpFivBLKW1IeZYK\nRBFfVa8DaeVITnEICiYwBpnqKm19hLpBDdPMc2/FWVSppFJRFHU6JoVOwFiY6/Rj\nlk11RVJ78AzwRztnz/wJQqHETtZAfAjPkwdr/H2N84idoWQn9Ah+by+UwMNbVZgz\nZbCRDcXKTTct5sE8t51zxNT9/K0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLLCn6D2HRDJQqE0\ntRt17xuZnZtjMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAgsvj1XarodikSEFIpq4mAiyMJ0YhfKBClrYZPUeSO+zc\n+SSA4Wem4K4KqD0Aual1q55123r1w80goNjiUUFl+N+dfZiFSOEpJN97dL4fDfH1\nwnYXW5BUl3rY95r7sZmT6vMxobF5aNO+JL13VvBO79pAjaTK3ofal5HxpRHGlsbL\n88CS3075KjPsFdgcJRZlkHkB7bfge6kgc/GvTtC10I7k/8ynCfyhfQcHGoAENT4p\nb1QG4cQ/WmQsUa42aoGjj6OQZ/XAqdFNrEA/bp9UtFTIEd6KZao7qhTHfnc0HdzO\nlsUAgaBZSE6YXZij8zLegdH90BpTxcgW4tk2kJTRdEdGsqhbY9sBlvJAroKamZbx\nYG3DIzVfUJ8aLl2EE2SIze0FWhDZejrfXKmT3JoZ5SxmgFxHS/xCbqJAIwHYT4lf\n3tgt94HJLHWKwr2VA8ghaPMxbuipF94AXHZQyi/E5yH8Wsp9VbuaLk3SlnxbN/4B\nj4nsHsn1iKvrBURKbX6MiUaK44N2lDNJkLMeB/nyOZw0yji4p8a8pHsyHgR3J5Cb\nIrS1FZ242RgDp4tAQtFWyh+AHr2J5YhlHpveS+oiPgzN5qujkEtkqb0oY+i79CpK\ngd7lIfGFqsn0ULq8wjD/3fu0JYZK7oF7rmPX59kJJqLG2HW9BfKOR/sh1+0uxIc=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 73ABB81A0225456337F02B25BD39E658B90F00FF 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgZkNyosE3c5mAAAAAACBjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwM1oXDTI1MDIxNDIxNDMwM1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03M0FCQjgxQTAyMjU0NTYzMzdGMDJCMjVCRDM5RTY1OEI5MEYw\nMEZGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Cmw9UPQW6taeZWF\nxrnm7d7AHY0jAGwvtOLkXlcuI4VkenffF3JTUeHadWQmELSwURFUPcfPVlO/AC3i\nhpW9sXvgCSLQA4BMcPT8k8En+MKwXGsF371QfaLaAqyGWAmUjnc6lxEp/gTfosTU\nY+jU7iBb6PwJ4YXpMkUgVXTZJ0dufNLNj8qf14NSQtSb44QuvAFlVRuc29zj/zBB\nfBz6OonIZ17WJN7MMV4KzxfI8Fh93hVyilk+tsUJEY7M8GCD37Z+BM0MCUQ6xy0x\ncvuo/0GnZBqGJ9mjBvyL2lYW3IbMXBEgYA4U0OXdlnW0OmZ+8hbPmh3dvuxP2w1i\n1lGVF6g6b4ZWhVP11pyxGr3Emz1LM7hSlCzs+ImT8nWXz0UHl4/oI7A2lZCMQ58e\ngcIs6w6PhPNaMCUSMi/YlsNCIip48DI6ogLOnpfm5WFxspfHLE5N3IbKocI08gwl\nmXOJ4xj0xKIlPUznIdpJhHrgsgABKk6rTKSNHQ2nKbSUxvRfkOIuyjURiVylVM9X\nMn4Gr9w1BZIB2A5AoOlI9/lblGWv8DQtBMiAm0YLHhKcVH69yaK8X2k9zkP+jV3q\nxneLeQt9i635gLpq0GVNgsMdVLLHFpmTlFp8j3WF4IyJsbcjLI6YDWsYBpVBNQ/w\nh/PPVh9/+x+fruyt1CpfZQKzJbECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK/KsViEiAzM63df\nNrtyhqTk2K6wMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAfXUcbLabcU7a1fz17hl0Py3c8csIMp/jJk+U1ay3Vquw\nubLMyAEabVGmlw6xqSW8daI/vdXa1c7RnfXSniHEG6XAikrGgiAaOlZnmBzHtpNr\nsULyZbvuXOpN5qD1bbOXlFqP59gn+xHO6WBDVx3oBl5h8fQ/5Zvy4GmgHice3XJD\n+LfSEkWTdXiTZBJCsvVJigQiRMRU6AU3GFeyyqza4EcjxJx+t7FHx3QYvPTyV4lt\nt1K8Q7IWaaUlOS7LKXBjRZ9VspRPmnR0ncAOcPVfxkXbSB06VoEq39xKjzahw96N\n9/GAXxgcwhTamYFwW6WxN8sgieFn60vvllo+XnIXupgOZvqOcdQWoW08UAQ9Yzn/\nT1fEC2cE81MjRBiy5MuRgtEQKjNtLoNMorpEuO3flaKOEwgw+TZypsMDWIOUeOYp\n1vqpVp9EfRFnCNMyHnjjrPYz9VEvv4R2dDKcuMtPUU92HtFl/NII9P0W9A+Kntr4\nwVHcfJMrdQ5cwk3dTwIhJvyy7bw6l9USRLpIKLHpV9pXO++g+RX0T+oBCOD94Lmc\nqB37SQHxN9QbLE2rF+GZKFy78bfwKIlsN+RPCPpTie3kXI+KAe53TgU4Emsixt1U\n5MfOQ7S2S9EcCuOAjwr5qem6e6Y1OgWI+v0TBwa2K93dsWqt/I5MwTKYagVy2AM=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 7568FF26F37D11268567B6864EC72A08C818891E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArPRmWadTa9J4AAAAAACszANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0MloXDTI1MDUwODE3NTc0MlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4\nOTFFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA79wCST2/s30yqhLj\njeYfylkSjR/dHzLADqTS1Uvr0jzG83wR8BqNve3xYcI/IgeIKw4Y9Bk4UY8X+wtB\nDk02SmbsPoxRg3aDwWvZ4WwtwDoBUySpswH9R0kF5whP700fMzrbB7Rvq4V2iGAH\n1W88dZrEoepIZi5wLBYB5ndj8vurM+rFxKKVIhxKqxUJkgftPVdBZFxGkt0u7xnk\nNwDrYqoMh0WW6xnzTaz2t7zJSC1xgFvs9LbnPGbl6hIAFB/Y38MLfw9f8Z4f3T5U\nsRuAmTzWrDFlaOmI5ZmQSdTRvA+clTPSsCkpmMh/GWuwzfbeyc4y0LTu+sgfTwQi\n+AggZ212LItgf7QSAS9nuFjFws+yvACNGbO+yNtAiM0HNDTDTfdaXRXcCQc29/Fc\nN9+AIx/gxzNt+UrqXxqdvwCD4ckB4iLRnlQrNw0sbPHZ9OUGgWpqmRoGukk3OLHG\n+ofZiFEAZ0Bmpl+Ufw3k3uwvpNAMGkpHIPtqsLdbbJNdNN8BajfqNHbiQezBUdEq\nZzKqhiN75pnBmEzNhx4Ks6hGPRdGLG1z73ixFfTo9Xk8OLe1u9jYxZ+xvdpcyvnQ\n9EiwP2LKYPXBqStokBB+5tWZVIRj/4n1qfdB11RfGwXoEzeZux1iyJYssbQn3PbG\nhtzC046yH0lBmYZWku657A4rmS0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI6wwEgvDxPclfwk\nXXXdb+gJaqHiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmzKNynPb8Uj3BYK98/W5+8oi2O4iwJaOs0e83TnZsclj\ntzSzmm0ewX+M1PJpvqzkcg4IhSSVO1WsJR34hMxUdCzUzLdRA8St5WfvBcNTgXvI\nLuOK7BlVYtcEU3Hklc2NYJ4aeHBbdvgwJ+SP7ce6wLd/v/xJPqHknueRvs437Xdo\nWjDer1tavY/hJKZ0iXtP35GG/icGhOA1IP711IRIcgBXnI1QG9rBTqz0n91PVVfi\nPFF1Z80KCgQZILqogUX4QAiuqrUMFpBbR3attkXCdAFG9D/JZ64E9eHixm3fdJ4f\ndL20ljHrLbHBB8NqUmC0UscG6Ax9A+Qw8hWA3/thSMsQDBSq7jzzWClLnE6jgSgr\ndCN4DaHwHSx6AqJZM7CQs1bPtu9aB2KQjqIJ47UPMGZtccLUg6+lhe7HU7rWbBGZ\ntRZpOOuc/C79siuIBRHd5eCui7X7FtrwMoDN2pPBm9CLO5HuRTJcBauILNtYkxC4\n1u11GCPDGwXaBZF4O2QoZ8PWbNbKTWrHK99Txb92Pf5GEofdl7pY9uUsNk3ussEe\nGviCxGXKRdJzpd5g4B0Kzg5gIzJXHb72TQjGrK/+IVUA6EAnc/ZJ05Bb9saUzWlu\n00R0AYJDMKFyc+KeQhpadPQkw2cBzgrqRTC4NQ+vY8t683QldbdGViT6DRRQjf4=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 88B3C13F6105D104229F5AC0EB499564ACD473BD 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArH1HOHaDm5DswAAAAACsTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0MFoXDTI1MDUwODE3NTc0MFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC04OEIzQzEzRjYxMDVEMTA0MjI5RjVBQzBFQjQ5OTU2NEFDRDQ3\nM0JEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAi+iQyR8D6uzfZlrV\nrNV1g8nQS24WbjAtjSAigXk+jaArho/PT44luOISw8WM1QzTVplgCM8Cck8WnWU4\nrGRuR+eP4mosLwjJtMmhquRZCVqWFUj06NOwPA2yHBxh6sW2wGysYBVRyS/refkX\nUiThQ7L6v4BbptYRM7C2TCvqG+4WgsVlNr8oU0sjl2WN4OLRcZ568hQrEqibkmoi\n/2vljCjRq2t4Tp4CYE3+57STKGryo1OqNHOJbPRSQ4HFYNOuGwqql2qd2YojCD1W\np0mAA5kpogv+58jpmJGG4O4Zq8S6zVPhCJAeJa6kLeQJdQRcTaA9EkT9C8JXYAhz\ncIdO67lLi85K/y5VH6hKwpXTmVqARRMidcmrCPZcRi061PFyqCoj20L0WNXrobLQ\nOf5nIEs6WVrtfIeGupQx+nwlrTdh0qui/sTzLO+aaVA9VimLJMPNO3AgYt4NOYjY\n5pAzNSLv7CNcaiMh/M4dN9gtaZF8kGudaPoEw6hOKBHlxd5o3sGX8n5B9yq94qpX\nfLxsVg3hsE48QU4RI2wcgQuYw9nhFy/d8SkGTi0aPeUN1xSwxk7zIS71dsi7Oem/\nkxJS5ZP3Qo9ph1OX1IRzAhZJ07+DXRCgnRo6SZi/dp2aL7jd7ey0Q3boneLUowBI\nO+YSbjYRHTLGAvoBRK/SnNgEn0cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJvLVDJtcN2O2AI3\nBzAUH+VLI8kBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAViVprHifyNY6ecRwMPyWbcQ47fYR8vXAZvyLC5gnqPZR\npBW3ct7bBLmSzUL4+MaYYr6ny8+olSuFZLbedHJJhLgiZ/Z4lasztzHBkkS00Wc5\nbOzvL/IPWBpF44I3qFy7umagbiAGTJkVSTPj4PNDugHPuvGp0WOmbfWcmPhb2FJI\n1D7ABsxs+aWXmHjaVLya4cDRr4U3L1yb9sVhLGKXqdgalUIrKIgZom+tBmiOuQCK\n+NAVQUq7a0BUeb6Wwiei1PLLEjZrJ1NiSwMuVu8moToStKztGUUvPMiLlH+w3xGP\nhnMy+jRsdqrv+qK1h0/jJvX1ddkrpBJuyEm+ZEi5sdSCiGFAkwtgxR1RsESAePG0\nFzneJezECjvRnju3t9CTKX6BAWsZn43LrcQXXCm6qTt/qJVRr2tmcYl8KZgnp4Or\nsCAo2ZydTGt2ngCJi7UAtOFU0Cpvr2Oo3sLzR8sFvcqPKEKIMcs5NiAzRfWJEqEU\n+prH47OEMFpFDYC9PyunAr1hMja37aJU7+027vs+L59PBd/Lu0Kek22F1Le3Q4lb\nOA8ZgO9zCDSqEFq7u5wq3y4h4UkvRke20oZYOtQ+pn3FVeORlA26cgQiX+24sjT4\n2ta6VJBUkRtzoKECNu+OAAvFpnm16h64sPJIIlYR6y4JrEXf8OtzRujzEEA0a6c=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 8E1F3B1E129D4ADED7631F5B4A2B75828AF28128 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgDQJJ49EKvGHAAAAAACADANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0NVoXDTI1MDIwNjIxMzA0NVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC04RTFGM0IxRTEyOUQ0QURFRDc2MzFGNUI0QTJCNzU4MjhBRjI4\nMTI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsVW6i039QUX2z4H6\nVx5f0jlqjq99qqMLSE9+ZAFaVI6zyG+27jig0/6ViDSHdxmz5OmiApFUtPIN7poy\nMg5XAG2NqzqMIRoBM1iyqlq5JSoLBsP/0jZJVYqlF2peytTftWW3U1GoXgYZ8Plz\nrKLZ8rPqUlLTvTUPUlpemPMnd4+tyy0hyKy/JxFww+jI6SCeRpTV1asgbJesHNJ0\nOChZE4nawKyH5dFSQlNkg8kXb375Vqp4UD6gXR9KR9D5zpDz2uKUIhph+ErqNbqF\nXLOL3Cz9lfcvwUHBiGsS6migi7MZ4IVjSaSWx1aFbLPFWvcN4p+LeCUw+AG6ilb8\nxbr/EpDihU15ukQp45MKaI20efz0YL76KjDhplDdQeSnWeBvqsYhwilBQnPC0alx\n6dE4KA6Jn2+m7YduirCP/ms7y0mIw5xdErcYDCYym/Cp304fSxZU7gUjMbPsR0lr\nMB/QfnMlBOBz3vAKoRD2O/mPz6qM4kYosnoqj78PUANw7MQEl6HtGUBOhIRkr9d/\nhIhS7CKXMt6yo+UIsz7c2SW7ZIVuGQE+dNpSszrllk+4rUf7L3ISWDd63gZm3Y7d\nwuChca410LKmDPbhmzu/HN4GazaJiz0Cb5TalyVvr+Ew9yc+PnenpB3yzH3g8iSL\nz+FS72b4PK5uhjzn6q+MPtFVAU0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBoaGBMe9TKnQ5Sn\nGbBhFYpPkHUKMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAZKhIeDyKGUqCnPbArhPXIsopjCyMwLeNS1XH8URsYi7j\nWnG30dndkizqXisOEd8ABC060KZonE8mZpcI/Oje8BzwVkXBfVffiNIsL3WUqdt4\nllX9H8r3ecM4q5iuY8o00EfRW320u7+fHmLSK8u2u6BuNFfirPI3vu/qaIZujxgr\nz8mVA/5N7dVV0RoAjbnZZYL0gc7PeaEGZe3ph4wzRfqhFQDLAi7BUl0nJW++aLop\n9bwuSO+GY3i8sY6VeYu/u4OFdvbDqFaQD2vSUggjmQn+oFJVAe8UKRTKb/hefbcT\nVcpbFqUTDYR1I5xbRyih4qfGFuuMKr2xnKF0i0dQnQoR6F7yrGvdEPqDIYdBUj/n\nreZNiVSurNNUEqITPGzmvpINeMDpWKNy4qPqG+h8QDmDR4EqC7FLsEO9hj5SBEo3\nG0nq6IQoUHm53ATOIT9bSWScTr4ajNV7ayk8UhXg4WtoY2dbu4o+tt0cKlZcXXq4\nTnFobxK8dp2a6hRk6w2ubmAviySLBmw67w6vR4SeQzc6Jk7zDDVxDzMA3aj6QFRZ\nL+hwwwBP5QO8H7hMchT3jFB5BulpSrOeM1EsULssJ13gF4qnjwtUep5OtFGYcRQ+\nO0wFGRrwZKO6AjqoQt1vt/QfI45DyJzbwEfYeUVUz3OhGEjzIb1ILASMn/HbvXA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 9532153BAA9D74482D275B1A3E475309D3CFE507 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgxaA/sByaJXEwAAAAACDDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwOFoXDTI1MDIxNDIxNDMwOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC05NTMyMTUzQkFBOUQ3NDQ4MkQyNzVCMUEzRTQ3NTMwOUQzQ0ZF\nNTA3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8wBdunigATtczpNY\nvX/CggBEl6oxUhiJu7oL1FhFMJCDwwKQ+vShQ6XA9B0BH9CCS5nrPhg1ALL4Pr3z\n7fz++HoWJjAWvJmeGg+BEem4flwPXJUY66Q6O6fF6xW21KuZHd/vvpYFpC1xlrs9\nw7JmEOdDbsXpZS2ZWUvuGFriVMRH6TdXZoP/nWuBeRUMerLYp4n32GSGgsxgjpxF\nGdVVbMUfxSP2DBaqjQqguFcADfZ9NVYwYz8hON8TerbgxkMBkUDndObChq4jxnXM\nqsku/R149bK2uddhXNUpufzXSS8nzb3IoVcgM5vhU2p1WjpFBZRCj1nLkySl32SF\nAaPZ3CTZuLO5LEFnptit5HU5SFXWMoLazuImWrefBUSroD3OrKEb+GEDkomE58Oe\nzdqbnwMo0iyNNNaFKGbc0UndFPzwIv30/h+STCBvAoLuTGeqPul4JjaJi75NGZAh\nrdO1QYv1R5+svU2SfQ6YU26Nh5AzJEkBaGVRlNoilriMmr/t1d+mcrPmCqs6lGQh\nivpiq3HG/YSg9ppSCsgCs95xCCXCCrSrH2JkH+q7qeh0A68iSE3K2nFOO8J415W/\nQ9gruEfC++B4p8SxlWMLgA0uuaMRhzV2PEXdAJnMWBoN+LmlyEkIiwRMYuR4zBhW\nTc4rDjKXtEXzLXebzSxG5jyvEFcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOvjNi4HfqPioiX3\nZk4gAE/va3BUMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAYykQ59HCQ+QHun4VzI5nQdjLuTXKAJmqmv+TFehJEMQu\nzCaLxyrDY6HWuA6gG+eeiN8e56kHK4nSu681PLVy7B6cxPczrJU7skesZXBTqhp3\njONQH0uDAHsw2O99yYHabSsl3SPvm0D0K6KjOqR6w5pUd9K9HGWyLq5Wz9qBRsbA\nYVqT0GBosG00yWBz5oY/y5lPH51YKsAsrMuPC/c4Jmjx0YXH8cnQXm16IMRUuK8e\nI3x2kxSlHHKuzvSSYAbq1zIr19n2MXC26nbtl3m1QlOkX8CftZEkEz7k/HCDJHrg\nvc7R+AAiTLLR26RRXqiAviJx+B0UdHdVipr6JbQfLkzaaXW19J8Ezyyyci+lJAfs\nm1bBYYvuFWak2ohBrAzUcqoBegTbcRTxQPBZgHRFsRmH0qfzlIodb0AfgchD486W\njUWSeOOHrzOD94w1ccr3APZ3u1F5s++WV3/Ef8URXW3nj2twlbCx0HFL31ECYjER\n0rpr+xZfrIxxuEUkepJ9qFHVtXdAIYfm1T/qHNqA0qej2NsFXu/1jW9Tq2+6Keh7\nG3ZawojQ9/TBfKQ/9CSG8VtRDP88qvQmCmkzLn9KRe4G0t0Wg73LYdXFY3gtClgt\n2AnTpkWz78AmeupidgvLxRrN2AmPFyjavwCHXeSf07JAea0wvWajaQ+ANSdV7AA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 97E5D1CD8B0497C04B4655A869C8F30EFA89388D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApU+zGYCx30WBQAAAAAClTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzMFoXDTI1MDMyMTIwMzAzMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC05N0U1RDFDRDhCMDQ5N0MwNEI0NjU1QTg2OUM4RjMwRUZBODkz\nODhEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnHUPtM6tH3UczzAG\nCnX57WQveEQpPi5u1mmPbs0Ug7XmUeTnq5WUN2UrwqmGjOavmsOAhttUSi42aG7l\npVYYSRkrhdFCkustj2kEb3FTVvoy/OXrmkF+HkqD4Bpk7OxDF/BkVpdrUI0mjk5S\ny0IfLR67NMqAomtZrlmZSxgFIULSzIH/AcN1mtWIlN8K111SxE5bmI0qHvz0aRm6\n7q8Dp9EOSeOWh6D9C1xGQeNYtBjOtgX31xN1tTSGYLM34PwCKuIG4O1y/nVslahJ\nP3G+PISW/cgulS20MPE84jbQZMUJ/od0BoMeubWy15Zf4MlpKSZh6Z8/sDChQz7G\n4nz9s2l8uuCek/9xG4dOlh1xhVwDxytORoMCg8cgKcssVCaw5/JFTsVOpVi516ay\n8FMPjfFrmAFEHu7ObHa/3e7Yc2PB3lVyQGMmwS3Vt1mk6BtVuLn/IntdLlDedfy9\n5K3rfQaN2pqURXmSApvEv+J7+bhHuVyAJFPNNDZ5dadNS8MIRWawha2EiwBKJOGg\nBxOjxtVlJ9eexoWF/3R45HnBsY4WTZbffaOmYRvp/xD24lX/G+YRfc5qJVpzD+nR\nB01Y38humCJSVlUcHrvQqD2L3Ens5nOpUJYfw1OgQb8LkwgtGU30A0AlcegOTE01\n8WENeZx2IFL1NOu1Fn4bnJq0MI0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHumUJURyjmBAJs6\nwRWAmm/CCnHfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAUgnSbbj9dJjtKhplJFxYcCWX0I6GOY0y4MwMnJ4C+hBT\nzG6L6rqEzYGYB6nk1xsuS0A8Eklq1mcc4/dMnQACWF6uc7HotDmVZrudi/1zgSGA\nUQBH7pUrkYcBlmjkjhKKnJMc4nSixHXsUH/pSLUThjig+qC442inlIUi16Khfr79\ndwBNkT+SM9SeoppJZufcg4STroQ4S8n8MYSau7jqLDDe7LO0Acov+OxzuNeADzAM\nF6uxYZf+He2ImfnMdbsV1Hh6XKlHcry67XhL1Kv+2XAxWg31up29z7mhi4SN5AmI\nkrHE0VzxRDHH7aZLc8PTRj7LfNh93jUC1w/0vo2R43QPOH8GY/txsUF01j+T4Z8m\nuUewXuBlPcYkbYv4tq1FHRBDpenRmKTN4HnccyetWHM7N2Da1C1DfeyHbSCJweKn\nct1sRLj3QELysNAO0s2vMQmz54Sgb209szWdn1bz1zHyrAvxdq/At9AkjH447/1H\nujwx4pRdAcKIjg2u2z4mRVN9cjCIf2y5qIF50Gbe9hck/OLU9AsgjgZenadoTS74\nNjY9R2RvmFJHDHShlP32LOTwzpy3akGiH8z78lDZffxymQCOOtrakm3KI3I/Fi6K\nLywZdzwYBT7eS88D5lGuqwNs8QB+Ze6GuLurQTdZGLCLV84z//b9Fjea4EbwoEE=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWVGze+1030CQQAAAAABZTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUzMVoXDTI5MTIzMTIwMjUzMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD\nMDc3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvk+Cyrq4sTunbuBr\nspmHqqzvR0MW5QSDSQhiYpQasO4S6nTjUxL7wcls/gLXDfQL+dORDh1bWalj9OD7\n6hQsoMYI8gyF1MoxJ5iRAAFO6HApz0JhZsBXMU7byzVMoFlEFPsyARTr07H/hmH3\noMjfiaKWSIgvZYJJ2Z+JBkSHUTQ/vM7vitEnKVskHKyQPO/3jbdeOwmcePk+GGjc\ncR/0LDMeMYUu6jhdTapIiMxFWOqYDO71+y4P7hUoW8Bip8W7RGhzt36ceviiOFo2\nyOEUv3PSp2Ay1psr4LTUbIGVi47bTrav/jsSQbRGcDqVX4BBPtH9eyrcumBWta5H\n38oR1wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUb+RtkLNrbO16Wtyb0OCejYii7rUwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCYQOAg\nE1wSduviMuBX+ezsRTszZVZ0oJ6ML6BuCpW9Vj1H7qbW6Par5RwGPCqoDoS/EAPD\nHRFthVA/2RmyKKI+PVMbzxsKFHBsxvJhZGkt0mujc5SNtWpyrEDUUHJ1m6/I/jJM\nvRtI3TvsvXXJPz1StlBy9r6rsZM6hRJ8x1srKzIGokXY+h16fWfAenIGGT8iF1px\nSQoujgotz8pFFZd/dygTBwLC1H5+Une8yvHxgSqEwH9eIUtRDE/T/1ILK1S/+N00\nyODB9ugiwIIFWHRLlAv0mUSKDWHLcmi5BqzEcnMtjqb6o/QgdfNrT4SVBpNC9kJr\nooZm0+we71UH1Gmdj1vN+d5T1FavxgGpaxZfgHTY4YTwgiNd9C7bQ7YiVqHpSwQT\nx0CEKEBHLk88W/qTOlaaxEwK/fkdh0VdfrhHVcJVE7o8hEzAKryeFFwU0FGLgAeE\n2nTyCNp84sHuvxWxFaXDHEgFMNm3eICfJV/dgEjmp93qM5/vdT08hIizn2ihNwRW\n580GrjDYmqbwjySf4078Uwd4P9tqqOvKbFx5GCkt/Hcybd6m79agNOK96vdpwCsB\ngm3TGjO0YRbtwBJmIu8LaoScZqFcTHvO+lxbytDBsnf2Zi41TJ2qZ6f33S9jns4U\nk9zDYeNKKdGMa+nm00cvaBcotaAw9esklhFfMg==\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID 9A643BC48007E0824798430036B658419B70C077 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgUzuKFE0tQiwQAAAAACBTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwM1oXDTI1MDIxNDIxNDMwM1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC05QTY0M0JDNDgwMDdFMDgyNDc5ODQzMDAzNkI2NTg0MTlCNzBD\nMDc3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlpczXfHhe1K2SPcb\ncIBNtNsOGf2JbWNp5uPbASzvY8o6xTvjp57ULiwZcuAH7qHb5pnYDz9bGPKvRr6d\ncLLoESm7fUpN0NapkQXnruDzj/TRTSqJehNP47QMTGvWmVMTXaatdpQ0myqQDW6i\nCuyutrgjJIu/r4RGGY8YS9jPkjlChBLHNpkXttis1R63CGMThCIqgMNRsLqjvs0F\nhD82m5iNRz2XjvcUjDLiTpzzemFDhpkF0HpGmEcMI4FqUzb4rerAr5SmTSaq57fF\ngMdzD6Mc+yW0KnoRcMSJfL2iENlI4WILvE5LDWt4VY15qf2e/NcWsUW+IkxVtZXU\nRtjgnHxBYav37DKqwV6tYM/QY8sMuJbBZRShKGRTSwM3rDq7er3Ilk6fNqolMzb3\n+ZNt9UROiDTudrscccvynSAEn6x8mUG1JA+XFNucdUNrhqNdURF2/8sP1QgzcKcX\nf5I3rGCD9v6pSLXqMP3FEzlZ2nmoles15WK8OhIbAcuOua3Vwt58+TtNdfdwPPgR\nUyuIYia4AXRB59dN4YngOOf489R+ifYiDRmmHhXYExiEqOO3LHDWhC/Wd7dCEaRN\nkQC+NR2K7BKTCFdtof//wtp+8JGi2hMQhjkxtuMfGt8RHDVr4cK4RMg825vBlrFz\nGoucNybBz6s7Q+ci7QiSAKeGTP0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDLFHVOwqmSVg2rd\nHDYruWPogTlfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkyZzmWNPqgFPHprWh7ZDXSsPvd9d91WOzJV06/CvgRbS\nuU2FikTE/xK4NRMNcis0kQSTSIN5g/IKKPozm3FBtUWU4C+n16QJ2PXMB8xPhUf1\n3PXb/81wiCViFLl5DEI/r6WSG1tUFXB9SfArS4L2g72yz8Z7Atxy4rElEWDlw17P\nUnxAK8kbXVA570AcgEcjn5Z9ldAu1vW9JiGZt1XSxoPGPN3I9qHf9rYEAmscpPPt\ndddhW0zQ0t1G6EMSuYNr6yMBPT2olHWc2msLQd0iwIgnSAFoDvTvIkITk0q5BaKG\nsb4urv9dJ5i+9vB6/qD6moruw7ryUggPzqIATmtYOtPtEzxZYnap/JKEWug/GkIS\nj1rmR9RhogtURhn+etIYlGY/FIPRUsJvJsaDmJ96pIKb3gHLa7OmlCJD/9lpGM4W\nUAih8EnSS62aF08rgjzDY2mVBLjL/yfAUhdasbrUfYH3gZtfnA6Rm8uIeudkUGpl\n3eU+9mlzwPiQuCJMiWiuHFTberozZoD1WdQsr0TpcApoYLWPcbbk1Sc+73QOx2qb\nm2PizEQNDKbQpz9WUw1anmsQXZWKUw396bQVXsI6Td7vm8yQ1k5SA/MgaUuiqACA\nOEWY0QJKwPXIzE0RUv9mzqOzIq3+BNPM7YkyCm0YiI/nvhfBxpeOI0AP4Vz4phE=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArWyqsdzaWD9fgAAAAACtTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0M1oXDTI1MDUwODE3NTc0M1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG\nOTcwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkbh/MkYFevQ8uJXk\nIgXusXrEfGBOrXkER4woi573XGfpvtl0S4OA+zXL7NeC5nI9MhlDckrS72A0cyel\nkbo0Ugsu3Xht0HmiASLvQuKFg3pqzz5wqv/gULHIr9SYVeP1wyipEmyX3Y9v7Ded\n16atBR1otqncXHAKo30gX2WCIBMwyQI2ueW3ZeON10iI3Ln28a34AYqWUNTelyZh\nFAYNBBuwP4PCV2xyhPFJ23lsVybSAxNai6vwfy5JpBu2Xooup/zaZrRGiUXpDTKQ\nSDRHXL5VvM25rFiP+Rih2E0G7WlcZguFRajFBA8eMbZSzOrH1ydz5yoYadJ2e1aq\nrCZDU4LGH6xuUUn0whkPTZKo+S3Xn+w0XZXWef6edFsfPAEH5LT/yBTdyDB0wQ6p\nS1cwKYwoyCH884GN4XH9QQ4okeH+rEW5FOdKHNlXL/EfcLiUYl4kMzcgaTvOBau/\nQZ0Pi3HXF9CoOisTFMEDHNSLnVhsIxa4e1OrjFNh5+vjade1kf1x9rV5aNGYRTDp\nJhZJS/WMabE6pklttmR2b6T6ua7RRpnKYfF2BU5JDOcOi+DLRIB1fXKE9r6xPu53\n1+wf06nYYo6YC05XKUBy59p3gLxwUIQOqdlh+XU4c0/Ki0urkUaOyLRTuvxoAy8b\nov3TBtOEx8+AYUous+J0ix6+OEECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFG9yZom4n18nl3x9\n+MI2803ELQU0MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEACNuyvENPxZSOyWP5UTT56ZJmtvGGzqeXo3mjD6xvRdOA\nXx7kschODYdiHvTk/eF2NRxhFOvHLKVmNO9IOiL9vDxJX0lBmx6QGMk2gsU6eOKT\nIfPh3xWp7saVJlEngVk/LogIjk0z7LLOTCDBml1CkSBwUiYHxtmXZaIZ1f8HgpfY\nUpo49EVs+oOgyc8n5UNbqKLfWrlvAa9sT3Cs3F0zKT9lfjRgOW3Us/8dH6+1WDOj\n0Ad0MmfYchWTrw8aiBfv68sTuF3k5JkTmkutR5xTv1qUzYFUpFAg95f+HWbX2B8B\nGM19Akn8q0klqD1IT1elux7jFG9gl4IwsDICdTy+/IytU6ruBzU70T3Gy4yWpJAp\nJQ/WgG6+MHWO4gYYdTXBbVaM38c95jho2VLGibdcjnIevIASDjRHXVwnGkNjxZ0Y\nbJ1L9vkMZTB544kEHimw7LQ7tDpm9b/dD7/zWFtxhsJYCNk+e02S/iIWjfBY9Vgb\nrz1wxtbifExVuJvTZxsAHtWrdKLvAQ6L6Bq2WDpm0cs3nNPgopDwb410vZ/XRrt9\nxRdKB26VeMll+CJ4TyZFxTZVrXVocUUtwLtJEuz/Ar6+AFvyI/UZxKsd9c1Wn+l5\n/3CdFjsOBKJBJyMxlJtU3JG3+aV+2RVJ+7IuOXEr7bBiVSrXGEyjG5lg8715EoY=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID A4384BEE3966533539CD0A736D1DD2C213538DBE 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdLGyRkIDqfucQAAAAAB0jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyNFoXDTI1MDEzMDE5MDkyNFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1BNDM4NEJFRTM5NjY1MzM1MzlDRDBBNzM2RDFERDJDMjEzNTM4\nREJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAslobcq3K5cXIkuCe\nn383TFiCoawBbIhU0x2m2JCRnirzwT28yKqZpxLZM+JlCg1nyeLlfb3eemDsdGkj\nRXXjBT0TlDHmJUSc19oIAv9N0MXB0njzc3a/E6MY8cK9PmLdu6FVyuzlj5/XNJo8\nz/ZtLrReaqIsTFDOC/X7Ukid+8+JHXRwoUj5Z+BX2s5M3jRx117CPmWeOWJ9C/fv\nmcwAQ0pLmI1An67/w2w3Duw7rhL1caslPKaIn1uNmy+jieqbAYjnPLfmzJT63HS3\ndmm5WBe1wYCyPSlE1FWy57oDS101+IUN8OfS+l5vbIFTflrhcn3M+T0FtOlP+bEz\n82+tqmvBkDk3W1L6dSoAGCSLTxgtgGVCYODJOumiXvLGCbvw9xtdmUZBqBnbmmha\nwA9jBiOBLFQH4o9l6pERNIOlCbzmEu2cZMrYAN752hDLRNDy8BM5CFaCcfO9dvaD\nFneGUZ7IgGo/VKNxh931wjgNQYwg5VV9KA6iiRcgG/wLIp4dcwBfqhzS6Rr9prE3\nUQgdON62tlCOb2r0YBMeapOpDusowP4ICMufM31rZeEK/RQXiu5GADBeTrO2Q+1B\nD0eOX0TLe0FNdnHEqKKiW/evl5+garEH0uK2mmUEjWgmy+0v3KdHGUSx2cYMGJwT\nCj/5KqK5jGxbzAFVP8wY5sXwBmECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPsKmtOLG1uU7vpv\nJrn9ctMa/3DbMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAVhXlTc9gbD7nt19QZt5Y1OAcLxDaNni0qaH8SUcI3xkT\nVyiMe/l7McfCRmA9D4ZHGHXKka7fvEnWu4GBVkq6N3KjhWMmXgsDsGSUzmAw/rde\nn/2NwybSX2E4RB7qxP1goj1pjw4g6pUBOh9ZBZ2hj8fjozL9SFNErupFW884gtPV\nNf5cacl202S77c+RxydZRnH5HgSkc46pyxteC/g/Kz9P1dmKLQ6Fd12d18O84AGJ\nwzzGHG7535t7pFvh+GUf6X6UeYGP7arBeGgO11tWxxrXHz4w14+V4kJa0RhzfUe7\n+cJcwruvu+N0IxfX63N8fSQofLen+q9uc612GS44p4fK0AaB5wRnQaIONh7xFQX/\nXmkbTZkkugoH2A6IjKCNYt5ZNwNPSXK1uXtvmPZ+HR0uo4VxknfTgtWZTDVLJkGe\nEpRxrqqRe79P5VE1pJRZABz9Kej77N4BkaDiy5ggbizQYqSALbpyVLUoJ4eYGJ3G\n7jPCeoKhiMY5BPvW7SaIMV2AUrBBkYt6l4iks+q/2tckekkGfpZdy9fdqCJL1z9S\ncwvA8m29SbsQ2yTao1BLqNIYRbnvvuMPCO373lVtOfebzYNYoMaD+BNm+ywelxn4\niYMNOJf27eUxpJaXVRRNoSDlQpQCsyz6KoTCkTG6dxFdU0mpt6QM4qIipX+nha0=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID A4D18726364EA2E3B278464CDC7FAD968E015D4B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdGeUnEuju3eNQAAAAAB0TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyM1oXDTI1MDEzMDE5MDkyM1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1BNEQxODcyNjM2NEVBMkUzQjI3ODQ2NENEQzdGQUQ5NjhFMDE1\nRDRCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArqbvdVSS3Q3AthXZ\n+0lRR6Nb9w4vVByVVSuAAzfZK91Z8Q3Kdpk2uZPTMgVkqUouM2Uxf7GnGOD6DwiW\nuYw0uu3NSZifpwEmvzHkhP+rUAbEGEAk7EYVGg9KazXXcXnHuCgvFiYh4ASzcYiN\nExrt/ZublH1tdvd76+9GRZqq4MQErjUJ19NMSOz+kvuQmCfADJkeUX0I5yMEbLzv\novS5rYnnvM7vChfDxw2n0PZIl9+wORpRjrQVOTqQDKaqLamc0iUbOihCkfzPEbx8\nJS/ENDG4AeIYOczRuwVZQ8hSTvusrAi5GFVd7LC0Lp866X76LHRW4GHLu7u6TK10\nJTwkTJ6OZI5InLwICxyPibqAfkuG2AXjczklhbd5TfpeH5aojQ8r0dR9Xdx7L4DO\nmn8iHaPfxF3yGiVCBvpUGkvYIx2oghNqVXHqY8SAuDlIrCrM73MpkODSLqJBwtDD\n8K4RNvRVVsZjF66WeEbMqcrX306Ovt1On1xo6l7vvXbi+CuclV0gL7RvghasAoqH\nvMM37w9Nry2RqBTkOQe6K3K1u++V1EXzQgVESSMjmjZOGs7uASEb6LDtKBUTON8Y\nIqk3v6gjNompYuVfnC9uYiL/F6qm04UgJnIVSxLrB91AeOESFbDKYyCQ2dt8jhNE\n/wXgV/34Iq4TxpWrGqwcVB2V0d0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKcKYuhZUQNCDhuO\nzVyX4JAMA52iMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAUdxbqfDQdOTwosBcRanprnJEuTFYldWP5zybgDpdlPKX\nSUGO1hL/ZpQItc1k3XhN+R5Q8fIHQ/L8EsyvDG39ZhwQeWXAF5JBUNRIlrQFv29D\nk5FNSdwMzFvvIQAXiPNGsy4PCf2BHCJuSjzZH/1Kxv+B7HJ2YPrSXzGRj83y+ZOU\njE/40g0SZrGhp+RQtU8DjgfxQiOtsu8S+5D+R0egcPLmHS4LLMasrEAJ0Y6UGuv6\neJdX/G9uErzq2P9xcyz6Ros2/BGiF0O62lpexZX+rtH4Bf9AhUs0h85kCmyxJn93\n1vH71G0hMtdrLsMfCGzjb3WvTsZ7wcP14mQ9Dsfg40XztPu5sYiJaF/S6WBDiX5S\n3QqIzFP+OQhpYTI49hmEOPo1tnR2uk8Dd7n1q/ddy6gmye2kt8VtXfLqnB+EqT1z\nYBBMsqkRL0AybU0llDFJZrExhHcma9yca2fxSWZ15R6HICoSc+MG9DbL0wzRUaCI\nhr9LMd0iMk56Y7/7pFlbYOY3ILvH6TSZ7B6xEerwJqpGDl+Acmn/6KKLIlfzb766\njUvUhtjgibx8WWZby8gu8oGrSAarshElETpKdpL6DQ+jQDvHei7ddC72DpObJAG5\n9crAXDZNwsAA8CwOQgZ8fFunx8+2Y0/YhhorXNqnqzUmRHYyRqwdbOqtd7WwAWo=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID B02981157B6D7CC3210016380B898950524350E6 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdRvUSXziP+ZiAAAAAAB1DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyNloXDTI1MDEzMDE5MDkyNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1CMDI5ODExNTdCNkQ3Q0MzMjEwMDE2MzgwQjg5ODk1MDUyNDM1\nMEU2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3gYtLMsAtbCLa2XA\nwZw41tecYiSZ4Oy+2knuuT71Ls9Tn9G+vbGngaH4N25gunYXbKuB3/aNKNjZv6hC\n2G/P0ED26OR4yQIunznLaUpX8ymMYvV0wVdHvXdtOOZhNYSkIRBx4knCQmmDcRYv\np/bJluwZf3Cw93Qw2Uc8Zz911TL2nOVBfgePlH4YmQGNqV2/gm1bl8JwhzFZfV3C\nhG2x5dhpHvzJ+RHJ+F4DH/yGwPdbObuEHZZzkHVHshr6pdWVk+WIsLkcZgYCqGXX\nb5JLFxyyK3KLBSo2MkY05mFzT+I9CeEKHB1X20YZSxfL0nvHsk6Pr7MborvqgaAm\nvlew4W1lllz3OrWaf6OV+robgkJKve5LHquW+jeyqfcnV3vJ0zPa7tZ3xBvDpSsw\n2eElOlym6j0y2ehyHoLPGpbzub+i78o0StcZjtR3181gXU3XX2YyR/rjqIhMvnka\naRseCku6KhikPKpOR6u7pUt9/5sjTqBMvMAF8rt9adFzrh7g+C/K5pdssoonMaty\n7oD+klD9VRV9rtHL3d3Rm/4OTZH5ZmKzbjhtlcw6lku07asN2bsFmIxPT5dMpAqv\nBr9MHI12jYcSReMfPNichHxJzhHmpSlr55BapcRVDgNvOWhayoJahA97uiOQAQHO\nrHajt1Ivqd58eKROhX1MtwZoN10CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMDoY1HPu0FyPLoo\n1h0nWKQJSBTOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEASTKi90CBVl7AJqrIDZQO++929jq5KZi9w1bOYOWA/nn2\n5Z02px+zviAEp4nOemrN5LlrcsE+XOQGoi8HK/Rjb6MbYekpFeN62FGZPZ6T/Rx/\nDdP5vHbTXlUwbV4Ynq6pF4kQEV9201QcxWh4lXqY8AnanO25ARcPCeHQxOxdE5yM\ns0uPakJf0MeoeFvTzYtVFGJac21qPG3z12s32njlOH8FtUfDzVryD74GNaAO0kLl\nIrovAHfZW2NIPcY8funryW0OK68QPLM0GOG0ZDLXldj+mvFBURptiRRkUhridr08\nAobGvmApjaTMmamSxUEPYyv2sibEWfIr9JW+HOthYV8ecIMi7NTRsIdqBfFAsadD\npht2By/g1GLWRbaUtG5Todwu37u9CUofTsFix7zrgMc1xY1yl0RcR8dbgWDZkxEe\n35QjLDnLVGpdROAhPZtfzWFcFUya46tcu6LR7rBfkuCg6v1hBMwQlIlHVjiSglkS\n2CsuKkJfYRkHeQiTvtW4Alv0lronjfS4iukOJaY/ODZgJS8Aw4vNmeKHnyK+F9cP\nHFAsimXr49FHypIzfK56sSLid8F2B173EiAu7wsfyHVjm0smdwKuqS+JH8MNB6yG\nWL1IS4DwfaxnS+yDNPJNj92UwZ27rNMN42BwGT8rTPMucDHizaYzs/sKAWiEaag=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID B080359B59AA938800A4AEBFD10CC70CF01B1B37 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdN6vMKhMdeMLQAAAAAB0zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyNVoXDTI1MDEzMDE5MDkyNVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1CMDgwMzU5QjU5QUE5Mzg4MDBBNEFFQkZEMTBDQzcwQ0YwMUIx\nQjM3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx3S2WNoqz1o506KT\nf7hvn0qPPQO4qCakEU1AbsBtUwxtqhSjKwwtA1kqP92Ck5fne2xxMqnTsI/jc4Um\npg0M/1x94quYMWvlHLKBzBSLUPXT+ZxEiJeTH3EeVyTNxVEhYv/TdDZyLHN1FEDD\nqlhJspVUibuHQOx+sw9gGy9VLm9uY8eF/GBuQIciMYaxiSQovyCNwRqNNj08+qSk\nVVl8meeWbhlkDkuTK48HZVHxUrqOes+73/42HGXOhXDzV9BOYBH0+Ptp2yHZUCNs\nXuQn+rOz7Hm7I69nn/fivtyt9zmtgFeIK/kHHRdQ/Lo7NaSwOKWfNAcSgOu5c+Hx\n+y+j2H9YtLAPcreFmfRdgwu1PFBRxZ2gciwEGifJdyMEVb3KJpYJZnKICGCROwdr\nr5JB5fXuFGzRjI9sZWrTkQCHbvlW1T1fD+krb1MeM0NqtW1MzMsWVZNXMLT9OS5d\ndur6f9OjENY1BXyDeGAx6+ZySnXRhPt9aqViJFS27UGNpJgJEO4PfTZZB2ial8hr\nPpe24stI/5VM4VHX7KiAK7/M7a5d4yG9qf+NnVZNQKzGQ6DIS/FuSJ+zvGLJ0H5o\nc/Dh4D9CU4alh5HOewmpcnxCBxcplb6XsH4oESj27cJocCqPq1skchd6eL4W2EZg\n3zw7DBykzYwmN7yy1Q5OLRhzQRMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKsbLPauCJpzq2SV\nsTCUK4RbgJKMMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAlnFX7Jv/u3tmFuOzcx25Z0m+mu4ubmOlv4du566gZ/QK\nu/S06OwEIRS/bN801w1kdA0UwveDTCLyOPYm6aRzhUCIknY0nEEVM4TKk7Eb7aeB\n3kXhwy9AMP/s9buTuwbQ19RCquiSp6OZN63lj3zyZyDSPE1cPlxsbXNOTikjFNlD\nqDMV1SCAeE4nwcFzCjpsGYxOTScj2L3lr7jM/3rMQEHygwdCW0SQdqzGf3wp/FJZ\nLbm5qFa46YUADYn8eiyHJ/KRYa4M6ctrF+kWB4Z4Uy5hl03uwDo/dfkyesRtONL/\nqsI1ibls43Ic6EUwzUhFKhASIBIg7SctpqxXk9a5jBI1LXBVXCFWHhOmz32NWRcH\nAoHEwugSgN1fpOhX+cFF4+uyjZXE7oNzAV6nlMsVI9a/yKy1iOOcE+r6kuBEoRQN\n7voTbJ6bj/mAR611K7i3eHeREF0ISHuZ8X8MII5tYeYN5r6AFgXS0/0X3sy5c4Wt\n55fyJusJlDFVHh+yX6JtZBjTLobmFEGlbvDvieoULQBoO4C7yI9v+oXoqEuZ7goT\n9FHTwe0SDaCBiZ0rW1BAQwF8w7fV7k4ywpQTMWBwxSehhfP5cjoe3lKGzpo5H2ET\nbqFtNKm/hGWw9P+aI4wg+PfZBdEc9x3aXOqG+xFmU7LUtRsApULQKKau3CuW6nY=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID B2D3CC08144C50808C289D119627479BFFC0E4A3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAg2IIdqEDOdluwAAAAACDTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwOVoXDTI1MDIxNDIxNDMwOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1CMkQzQ0MwODE0NEM1MDgwOEMyODlEMTE5NjI3NDc5QkZGQzBF\nNEEzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtitO09ruCAm1YyMY\n8fv51PwptdPyU9VK+d3gvicV7FXqBCtp5xGs0pMwU78HDn+G6ieN5ZgcpNfVulB0\n7nfbf/QHgdu7sfHBwJ5jJRb/12T/JpET5h3lsKNBIG7gkcGyDKgzXaYKcYUwovnG\nUCXRKQE08RXzupn7uaf7gSZ/xxbtW0oVyst9UQ3yFWM3BzDWUTNeVownYFBZRJIU\n7FwvLRgZHw3RvoRvobU/0OnUIy6UY8NHbRZJUpuCVTp45B0xYkvH95C+HYLH0K71\nCkfME8uSpz2rsB+gtaLMLn8oouhohWoGAHBha6KJe0iRzbIYslMFbGAHoFKK0bJH\nqsuKJS6OkjimaDjUK4P0fFeja7tyALEuBVL+iJ4XyO/y7SKP43vGPSQVi9d+MPd8\nxfPbHKa5keEM9uq/wegev7jAdJWA70stY/0yNdrUwPlwawcRL8wRd5zBe9k/oYrR\nz8ZsPmzhvCIyxYmTc1gpneonyNA5MSZXPhKlhg0YRITj6K38O6jMVc79QzI+MLPP\nbLpTc2TcyxiRzgY5G/fVrFFhcnJqRgfgzJoGD4dEwB/DU9hCcahxxXUbmaolhly8\nBpqqXf1QfbSGQMqGhAyU1fMqCb/8B1qqPufpGwmyoufNwK7v75JTEP2hAP5//FLE\nGSuc7AqDzORl99YEyGv9tjxgRY8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN1l41RXZklPD5we\nx8I6YcjieCYdMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAgkzTO1wBmvjS6XvsxemRQhoXWA501xySjtCn92LEhh/j\nRHSWCC8vdhm8qB5Wl+F41nJHCZUEARCTuAJNMTTmDkYrSIz83+ICwhUAHZkaQcD+\nINg9cJfvPNpb0EkVUXtoiMLh9vIiF78kedxCgEEi2kJy5frF+ZHBjTyRetd+ZcT/\n4+2OXvEPZcO1lBRpU8h+0qCKW40iFioyAUel5PnguJelDAokYkPAThN1+arO4W13\ncwCdXbtvz1I4/9I0lRwxtXN4Hmg7JNSw+VETJ+cB6kD5xjzmAGY+et03maalrJ40\nTNx37mdhlVLdXrSRSnRvOXZ0BhFT04OL1ObzoXK/M3AMlCkndi5H/i+GzsAayoqY\nMj41EHtc7y1EkXTbM7aVA+kgub7u11uXoDqisyukc4Urr0rPhq28TAuU/eCS03ut\na7OvCzuAACDJJFSr6NqI/cEv3t0mrZ/qOM0js3IZtbcjZRrk0DllY0Xt/HUikzxu\n5UkF8M6mgLBx/0cYslJM9KYKfkEvQd2SupioF9Ikk1vlYRin3y6VPvmxXAmhIX8t\nAAOwenfsjSAcCSZ9duDgELBAb5x9OBrkN/z5FWphNghrJLIaQqLNTnteM15ob4TN\nTeU3hO4OQRJn2UYMFxdOraeBaA7gyXEC2+Qtt4IQZK1LkDdk7SKamWDkgqUMWQY=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID BBCF7CC184213166DAB5BE53A87014DDD348D8CC 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArY4ysA0coPEzAAAAAACtjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0NFoXDTI1MDUwODE3NTc0NFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1CQkNGN0NDMTg0MjEzMTY2REFCNUJFNTNBODcwMTREREQzNDhE\nOENDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAto/LSZc9L/AJuSm6\n3GlcwOfu3BakVy0Hf9zKIlf1VpbmKP+5ATiUgyVJTr4nv4WQ9I+a8HSn1v3nPf8s\nka8RYkkCs1wi8hFSAt+h8jTJP1qr9VtiTh7LbvrIXy+o/eF0gBpe0plmWfVUsw1d\ncecPZksHoj/9EG1QKAD1phXvHRjt02bqRkVcflftrvqpxJqK/AURpKe7Yf9Vtude\n1oeNofXnBIDBBfkkR2s1EGEtd/nYz3m+Kga4JbHwIXGUYbx18zNcm2cN19q99ROj\n8CMFHRdbowftNTLpzsVLhIyr/CJ/VV9f/EkqVUeEu3/ibrUQBxeKduDjscnwc3JF\nSHtTgpES8EUqt8eOEIbss6frbybUoi0lDluA3C3K2GTQSGsiLgtXsVtfBP+ANy2I\nbrI/KsAZ2ddk8JjsFg2uUMJv6uiNr+3iswdTuEThKvvORRIeV+PPPNoH9iG8d8dh\nybSSsZFxccXY0OJWoKRvnG1mxptxxI54dZQWzJ75CKRCohBxpaBoYMYHrJ6SHw9a\nzfY4fN+apF8Jg/hZbN4j2iS+EfuzrYL0WuxSAb8lgG5jgARitX6kf8eAGvaI/Y3d\n4gifxiAORXajjOQgIHtBCZR0wk76myelOjvliobhs8cwphItjGDOoPF9vPYNCx47\nXizJLNgQx+XdO+OMXsAe4KaBIHsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHnKN0advTLXnNv1\nkhRyY8yaAIBlMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJyZudRQRox/rEg12w0XV9zMd1Sszy406CFXwi3OGORP5\nppPypEa/1I20kgPk3Zevx15kC2bhL4wvTjNkndJZOU7O6eVXD8uymS9nP+oSPV5r\n9GQO2rYOgdMjyCA7MIMJKF256q7J6EnYVRQOb0Lfyc/wrwmEQCGEy9cCm7GezVCc\nL2Xl9X/Int0M5blJtebzSPtga7dbwi+KmnGntnW4Cich+APKuPltw8o2IID0YeQA\n3tjV3Nk2y7ibX3pVQVFFqm951ZdYS4kttkiaGNO5Dq4uv58v1jLpoHArzgA1986m\nvbdqKwl1WrfsJRUMZ5Jwb3raf79vB/59LZn6A/kzM0zcykTZc4METUBTmbK7gBqP\n6PU21IhgL+LjmbxYvlvihX1E/4m1KPNh92Gbx0VU0fT4TxNCXdOgl6AhipRzpEmW\nmZ8jE3/4Qm2TvMZdFgPXZPC6eQzJGiKtiOvcyjZSXFBAX7kBlspGXzilSQkL0cFs\nShjmd68HMDtqb3NC4xUvhkjhKBcmhwtaaASJ4LkGGj6LKu9wk/iweR+sPIe0oj49\nEjZANkLut/z0JffsMASRl8B+sTNGIAPm8Vz0ah41B/Z7RgSxytMkdKHMuy+TIsGg\nBxY3sGLClv9hfRNvjl9bksmfKAITnsTHbpihI7x0nvFz6VTUKmd35RtRvjpITWA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID BD6C69C0759EAA95DD6D156EA64170C4B9B36C78 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAg6IT3PDTRSL+QAAAAACDjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwOVoXDTI1MDIxNDIxNDMwOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1CRDZDNjlDMDc1OUVBQTk1REQ2RDE1NkVBNjQxNzBDNEI5QjM2\nQzc4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAy9CWR1CEnQx0zTtN\nR77zcOykxHJBnr641Q9zpDB8VfpY1Mey0LHBZq7rqdVw1Y6kVH9N9zExoRp5pWMo\nTcUQpnEO9fU/px9YV4QREEmdWItt366WFuofr+7epbKzNC+KrAizAvIzptQM+Mz5\nxCN3f50qkJA9DlmlC+JgFHs6BnTjjC9hKio4JWAQHaxY9FrX325JK6YtHL5ewDE6\n2e09L2XV5MQRglYGtssCR9uWFVCTFHJJVw4xb3plrllk6MEwWIT4ojlk3GGxfsgT\nsP7gvf7FWMMUpLLtLJ52fmL5PhE/zDT/YTl130heigfkTPP3aOI9R8Dsa6qibMSZ\nMxuBv3x5w93VoB7EhgZ79KKWRRny0jXgW80D7ius+q3Iezw0qaBpKlBmuMIf6dm2\nuQeDHOTKh1dCbPSIh8p8YZVvGeP3prZtspR8J8dGH1tazZMY3BS9myad229szuUM\nsAIZprfFY6MczmiNueMkdz5T1uLr66u07u+UY7+NvFOm/9+l6KyhfkGJNYWkAiJI\njS+/zGl+MokjuINApbnzYvaEPGkiwJ8nY67i7k7MhQqVMkZCFuTWbN2VDytvXgL0\nc2Or/3pBH0IpPXyWkIPiYBtsAc5C9VhJclUtUfvD1MY342re5MAmi030OlVfuWbb\nyO541LGwNYAjf0jUoTU6bbirf8UCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI9JhC96ySm62Ebr\n7f6TJ3OaJrBQMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJGnpR7HYt4B8Weedudtq8sE6Mp9nZG/pn/bTAYz89Izt\nGJ4vEqr/kvBtdCYYIkrgPJdCbNIwiLvFmfUgW9VMxwSYpkiibXkz8PRjTHftrOc+\nceCrwWE0hY6nINpyqRa/SVX99n+PWZADi5UGt8vZdHbQFnWjZ7YtBdEd6ZlziuBX\nQkx21d0C+PQEp9tniOOn+L3mNEWrV+D/cVMRoZk4fPp1Z9LtwLYRyLG7izl1NxER\nvnok/XQel2pHW/3oxi/CidId7Gx+QaB6Nx+cR9xOXlDy5nSzlKEesuvb3XCU67sR\nts1M1bn1/eIDizGg857aqWDbi5NaHVFJt3X4DveEuILl4Iny4AHSBEm5Ky76c23m\n89HVDZDmbCSl7j7uqFHN1yyG9Sl2gCiWL8wwyv62eR3vrQg2D3KjjkvRef1nK9u5\nSDchetlGKVy2GZzx/elCwGVYyp2LTKfd/yuaGCwYgXya6p/eYFB9FZoKwpXlRuwj\nLMg7V+JlPwVkAr7a9uiid8V5lKLUh+EzovgexFSqlSB+HG4zq+CDxCkkn7POLYT4\nsPCgVqgjwErOV8ByChNQ9qnmuNL7dEDWuBoVBo3hopGDF2S/9n+QrNP7McBsVCvs\nGVoAaGYgkvQoHZry24FGboJpnGsvkWvYwBw54M5e+S0UadPIEYheHA0DpLUBK+Y=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID C0044E3B23F43B2854BB76AD4FDD79BC62986C55 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAd7eZifmvDioLAAAAAAB3jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxOFoXDTI1MDIwNjIxMzAxOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DMDA0NEUzQjIzRjQzQjI4NTRCQjc2QUQ0RkRENzlCQzYyOTg2\nQzU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxD2t0Ax3JpHOTgIE\nBDK4m0qU5kD3IDRmlXWwcIjwqZIjjrQHXF8kBg0djFyvxgcRJ1p5fclXbazzrrOl\nM15LpAlxupbDmuz3H82bTWGp1QQJzBnYuMBPj5yI5c8ihShCPuuqbNvAD4seH2yf\n8rDDFSU2ePhoL+W8aFZdahOTYTz7O86CK4YfsvIE3wDhYk8JG24lWiiQ18CSFTvp\nft8y77sLIhPNJOhUXwh1b4YH2R8tjcTlhxgVgZ8Cow4OBDLAVQS33i+CKsyyvQDK\n1WzjsIp7Blp8Frw5TEUbbTIuaX5hX+ZKbARCEYeccQsebbwYW+gF/0HEmcTrCT/2\n02HZQpjvVw73qz6gejdP1yGsSiw0XGDkEAfeAwLxkZzZVBNj5lf1+ZJTBuc7vlYi\nd2ZYNSsN8SVNjfinSewYnNIjRawwMnjkxNcscLgGf/768qIwqBOPOCVYLPjDOma4\nkulEFfWlHoK5sAgy02KsF6TIEFLwiwhxFniqEO860G+kW9l2uhUTIwG5Idj5VAHh\n8wzsYMhlzC2uOVjNqmitWG7SCsezySlVjqtXwyWJ8sQwEAC3cuoUM+f35JYDjs8b\n8n+za4px3b6OE3s5Y9EOuflzxv33KtZPR5vFozMCUK5rAoqcawvsppTOXrf8OWlu\n+rra2FYHiAZhpxnH3QGTHgFpmm8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFK+/r4F4yqGgcdoC\nLP2iHVfvkVQOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAULuTajIfYMKit/v2Atz63Y9OQYlwr4L6zjY/2GwhvZvI\n5DpgtC7h13N0t2IQ/cxcZVDswEyDFJYviz43DX4TqK0jAopSbA1+TFeeBS/PS6A6\nKH/1R5tEDekLT3f2aNbbqW2DChuBQ0P+9Euqa3LPWZ970/N9AgJnL+ImSZfI1PXS\nX35lkJK9nRCTJ9iCKzBNB6144uFYUA6cbzvP+gKfJMfRqf/Vbmfmq3jxJFgiPLQF\nZjdWTYN/bh7ru5Yu2P1Aj5Ftg3iiravzNasDLa7il4l869rleEQPhdPp0MXEbaPG\nMinS5ihWLnNQhsPRIJp/fBjsH9WVyMwhxGwDyzZZrHEWOtXkYqmbJ7C4ey9buqlq\nrCHkA1KdY2xJmcDeYWr3dez3eSAhPTzYNZoN8JqzEbTTFrwsIveLaTi7AzLkT8Tq\nPDEByQ0A55IcXgb+iMoDSa7Y2pfq5nqK2yMK8UAARjkQBVlN3Gm6pEnYHuZWUkdp\nO8zUPes0DSZFSmBN/pJ4e1lioGK5BTrtjWpFwvK8Zn2DEaVmXCiUTNrto/i87K+n\nqEMyT3Okhm317m+Ou6G907M8t1yT+liUFsxsOwzrS6AcEEmOW+ClVjh7/dM6GSWI\nAOuEqU6GDYZOux6zWxgo9JJXx0Fu6qPdpMs1N8ODzp9aVeywVP+/YHkyXfj8TMY=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID C6CB2A4DB7294BE911724F5041310B4C42F89BB2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArcL7JkxSOV6eAAAAAACtzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0NVoXDTI1MDUwODE3NTc0NVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DNkNCMkE0REI3Mjk0QkU5MTE3MjRGNTA0MTMxMEI0QzQyRjg5\nQkIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0MdUcR2KUcVN1UPa\nxKtzq+z/LyBxCQ+u8kzr0gLNmt28LWxdGzcNJuHq6iH6K46T7kCQ/33D4iwe8fVE\n9Utdg5SWYRx+fe5wKG0B5v0RMfJ0+huNG1Dvqs0r8YCr1veT+vxNpqYDk/6HLMyE\nwTGrUk43A3Qzipfoe2meOL4uIDkadLWI6UOqsiC6NO1NvbWmqZMUqPd6A6OK89OG\n7w8XhhBN4gxfRLeaNdLlNn8leJg00n//lflU8Ovw+H9GdWuKGU3oO8tHlnXgLZYK\nV5eN8r07Z2qNJrCoWXr1d6ElpHtLvxb903clX+Lu8vcMc9au+cFF4dXJyq8Odi1y\nCYT4gqt1EfL3i6EPy8gopRe6lGM780rQA4cisKth72l2U10NdE96fEVaOfIqsR9r\nuTWx4AxcccA8yAKBovgOXfvvkNtzAPrCxD+ZILDPE0SJ1AhPpXVkqWuySs90VNQL\n1QTKdI32NSYEnYqPqi4/ciOSeRJzBccBxK4UBfmtW+wWHmD1PyQuseDanRHN9agP\nVWe6qYWxpj0qxmTH9WFSb24Od+DTt5DN0Eedal68HHlvXkcyoJVN1VrS9q1VnYBk\nXdKzWZxLdeFDM73oOkcpd1R8s/ute0lu0IYeZzZe3zpu9edk/mByWTZdyNlCE5Q7\nh06Z/RzUIt9o+QLxEbQvP+hKvXcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGzdsqqTCDArFJhM\n5yHRE7ttmHA7MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAZMoelhvre2c2jVvY2mWQxym3SN6teqenpZhjVQTGxhpj\nWIbczvwN5OpQHpV6iyewtcp3vJk4YCrJOvsPOVtGApKHQoTq+kLn/Kem2bbqCGHw\nTVSVo8d0aBlMQiZRwoNg/9nhzJ6FqGVKujXgnsK9ZEAfxfEEkTNatMOIsmN89DfZ\nVaLLXVX4QBtwf40wN2wj7YvcrkRaeru2fCSxNass5MlWpvRKArwC2w6Qc2rWvJQT\nyqq8X5TCLf8ycqpXw/O0veOjCmik+WilzW2ETkUu8YFuMEzY5qfTJSVtc3aPCDl9\nG6X1R1U7dxLzXMM0eDjnC52/MAtxA4WkFryh2JP7TvmMifS8tgRJO1dbxLWG/GM7\nRY8fV8ZMTx+wDc2s1Wwzk1N9wE5LJ576mC5E0mkmhF2cyrmeyd5fmguthn0S5N6G\nbuYKugcl+jO2PFgTQrN1a/8XAg/mSkWptg5qIkEc/OK6QkkoTEG4jJAIwA5/fC5+\nBMEK6oSMGqAoi2foIMse+0e3qp/1h+0uJzyVP3lR/6f5TuJ3vXXlCIJJplKJ3BrV\nPm9tABDFln8UANPBbRo63yAVRusxobl8LBtGJbRbRiPi35254QphwqTYezl+yVug\n6RwhlK6gctwdycKaznqrrxOOrNloVawjwl+pMY3mUq3i3F5WTg9atfE4IDMCl2Q=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID C7EE1D9CF6A291A06E4F5B88CEB25CAEE12F827B 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAg9s9AL5ZDXlYAAAAAACDzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxMFoXDTI1MDIxNDIxNDMxMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DN0VFMUQ5Q0Y2QTI5MUEwNkU0RjVCODhDRUIyNUNBRUUxMkY4\nMjdCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3FVFCfWdKwNE65tC\nyLhtlUuUqX7kumxSSiP3L+dU/HnKESnzUglRge5fWZOMriEBzClRJG0AyU44yAHK\nQwzPRKb5Dyqcs7Keg0i52jVAb8BX4AqjSfnpsZX9kHzsS8Nfywn114F4TwlnDQVA\n8n/1Mj2CPghrYPQZ33jUDV8SiGCln2SWS+3du9qTnEbD9RmmikUhGB5KzSWpJq2i\nZaCk+xoPQKHEYfuc04OVJNZnYeDG8J+eqOw2Pp0aEDF+ZbHwH6mVGsbuNIt14+mr\nxEifmBp9jVSGls06x+oZgaM3ER9Sp+ketbvnrHxw5XVCFDIk4bxc8FAdJP/wyzPJ\nNnvtGTrYJTmP+UGFwpv/2FvxHuxevFhvsE/jeg/a7m9T25JyLJGqoYddtPUK+FV8\nx6+QIbsRxh1NvpQERluCewtH+wMcXRqYGNBkDmyPRKV87yn7dtfvOSKMxiZx9ant\nboKq4WeksGOBENLgdwDvREMprp3ZMZYrnrvj+uiU5XR8gb/caAeUWdYIVGrATxR4\nQKAATOaAuqVTxVU6VUfEb8+MW08D0uV7FAsopgvLQnSWM7kDfrWZyMsvcs9XDsja\nzLaMD7OiC9J5h+iawJPSuphHJs53+UsO23gpsggh041UTkIgxjx6mPZ8W4ZkHA10\n0E8wQG91iyERBifpPBgwsI3GTY8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNx2W08dF3tdMOMW\nxeNi5E87DwXgMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAhGx9rFEocX0FOIO5ysnELGD9QBPq3rNQURx9ObOHnjUI\ncwVf+4agrI9JaTl6SZvlD6V2TCOtw4IaY9gZ3X2svtcCNJXfKbkOVDTXiWdhqsJS\nNYKiYOHi3ZJtakj1JvTG0vXPcsMyq0GFVaStvrfuxVkAh0CATB56lSU0aS/sA7zH\nstJi2pGMoJayTOzux8BGiBzngocR+shLPs03D6VHIYH4asKvvSgnmncOH0aqIi7k\n0Wd8tkc1gCvujM7BMXl9ZlDNUmDt2MXAiNtaoauvvAOT6AfD4IaMDf6nDktolP4h\nvWXqig/GItiIrAbHDAJHRBRFjLp9qMLHN2YARzlwXxwOy6q6T+kELwXc6yuBOsUe\nAOcMK+s8BCVlcwVi7a44j5GJ7y7HKLA04WM2i2a2BqVDZ74gbcFbhCfEPFhRBnqN\nvyD11J0qhkWCm3w+SHaYtmgD7ZmF8lVd4xAE+raAQTpRqLqgWmw2sKPmsCdWtGKv\nrQn50xKyf3F96BqK0EEob+Ry8/yBCVOj8yD+ion6GF/ewJWWwz3hWY8LmgEO7k9Q\nOURd67MirnC4dfTEZEk+Xmp1CezT9/tlr+SX410Af3X8eANrylCC+RQCtUVoOX1F\nWnERyLw+9wx2NpuV5HZboyLT0XyH3S8ZTjW/64aOgQXVCT/ZqU6oXVb2qhLce5I=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID C88C75FB06270BF7EA1244FB9C25DFD209B7ABCD 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAhAEpiM5MIX4nwAAAAACEDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMxMVoXDTI1MDIxNDIxNDMxMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DODhDNzVGQjA2MjcwQkY3RUExMjQ0RkI5QzI1REZEMjA5QjdB\nQkNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoYy8EPkqmo7E2BOC\nIyqW6WIRzv00G51luZV1idXjcYnHN3f5w2DSYBbMNJJI45ckFz97wQpQmuXmGJs2\n8UE8HZ2sCH/fDinRyZSdmnE2cSunBAH/LBiRpHSzIqaIv895j2D98TPoIVx7wj6K\nEYehMOTjLrJAES6aacGrWw4bieAgBzebejSySIbQDmtIoGA/TbxRqQcCp/7Emjmj\nrYgT+ERlCj3Off8Qm6YWJjeLtcHMQ5/SewwK3yjCS9sWg/Ew3hV5bLeQyI/Rm3hJ\nHhUuK6/B2T6ykju4huOSe97QSSgfTGcb1Ga8XZSZ5efk0L374+9Sg69e4VVBoQgn\nEOjpH3YzHYWHyzeE6ZrBmSVABspgJnsLfORtKY1fqXXjxCK4ILF6K3S6RwTGl7ES\nE70PxsbiXxKkl0TwiAUj4UJt5h2CheogU+S8gHhyTLGlPoIUSgFVMuvMs6uJmWKW\n+g4bkW1X9sqW2YuDfmTsTfeaTK/bv6xKiTTDnO5WsJ1gnGABRNagXKZzEZ4V8v68\nDRhkG/kPeDoSjpcpIHW3foIQNpTDoa3Is25gy7EziqgeoJ9Xhi53Lofre0/a6IfT\nYUCfwISBIJGAU9GaVfGfrRZ2EKWhwkiSSkyqrIBp3bRUVRg8eCEPuacD/imVu1XZ\nP9PlG47atC3JsQv0AD2RlOsfWJcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBbHRZFWw7fy7Fxg\n/+OVN04qGoL6MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAEYvTjPVmSCJEhJub5fKBMRCPga55HhV9US1dxhKTjhGD\n5MqkpC3SSMJjv1GnAoyhgj3l47WDoj+61qGp/dPZL0gA1FwHQX87am6fUZAt984T\nt8RdFvjZtNX9o39YqwUfmPIZWgtmuY64gV/hAnbCkzm1IlvoSv+MsGnNgsmAlety\nlg1yZznMWcXEAScui2gQ6qae7LbNVhICJdtr4w6VkrNnGZUdEGuAXBJKsZv7ZYvj\nan3uCQDc54w6C1O2yE255P+RTe2WGg4dp3vrgFjWv790WQQk9jC8dDl6K90yvLSP\nl7fPwMJuKo5YqbrPEsTiXs8gmhUl/0PXmYf0cQwpQYC6aSkgrdgzbeX5408u81Yb\n9fNcYt5gPDB5t3xOi7Ybw99esS4Qhj4PXPEGrrYy3zw71pK7Qem6VS6OiYuBc4sf\nhIBl02r5ho9ieVuL5Wdp0kVHTyH9lx7Qh+oY8q00LGwi0LOaax3qprncuo3Uh28s\nex+6sj9E5TtVqpSOsiIURM73FRuFnSamZaWeSKLknQkz1H4qhoxErHtbYNJLYkea\nC9c7eR3b6ayARapFTixggti6kJiYeR4W+7yn4CH5OyXMaWNNHyTDhXboxSlUkvJL\n4246sRzFzBz8qdQqp4FNaTLTOFwj/G+rxdUFP5J271ZeqWeWABxSud2VvABuMoA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID CA6970458673493A8AE1994EF1E29238F27F4518 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArgE8jCCus0c7AAAAAACuDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0NloXDTI1MDUwODE3NTc0NlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0\nNTE4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAhDnE4FaTwyQgvyxu\n9pynDWTWbXJN7tgquqk3UrcFWkKJQ/2NQLkCQF4edz3STCV5hJYPPYq23XSQBpqw\nuEQPeQeCKtAI5KXhzB7DPhIXhaV4k1m+ij8nzZl5tafWfTGNhkaBNySz8nFSUCVd\n+UAVBRQLyCJoA/yxFbZB0B/Z/MTqaatygBXXAPF6CVsr09jDO9VUuDE+2rIKLd72\nBRa3X7/5RHtDDH+xeKhjgu4zrdQiLGz3EplQONpsaQd92U9lNdRPbNUoJHCMGgVR\nAsJnaniqPrTv6I+Aqfc4nToTVIMR0Gt2AaN6LWlhJVqbhDtzE5lgtzlUMaU5Bjtw\nTiJxyOZ5O3ed527F2LPetSGqL2mJSnRgMI38OssYAFAo631YMP0QCSTJgz7m54D/\nwRMzTgU+HTQ3wNcwPvY6o6ibwAx208aBYB/m2kak/SBvZVwAk+OO2nizZdOAMm2o\n1W1pSehI9myY4XblqsW6Lh9cLvEZ3p9D9TI0BHJy9Po5fCjO3Te5e7GC2yWkzDu4\nZgy3j9zX2K82jfG+6FPx+2BRfh6zyh9KS9nCYCfLmdMuw9vc4+VnRDCXzo6JfXL8\nJmIa7BbnDgDhcNGoOahZS474bB/WExHI+Y/EymJjNwIT8I+XPtMyLRWCP8ttDgXQ\n5q8R2z86UbiEH4uJpL9DeFXpBdECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOHkPlIeo/lJ1UIz\nTJTrBOXc+DlOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAS/T1u1TNZhkRHFLPPVokuvdrHabEBSLC7nckQmjvR0NT\nIfhaD9iLzPhhNrpiamLHEIHFuzVVHTMboqu7FcOlisv85T/INUE6tnIs0rxXJ+An\n6QELBMIbos/wBElqE+t0dqkSoao62Uq1Dri+l1lcNd57N8XHa9QMZRCTxk0K+y7u\nTR2j2fiCew5pFlsyqZgrpun+Iv8G2AeVWeY9+7Dju8hHkaCz5UNrZA0t3UJKhAxc\n9cFvGLkMEkotuDOrJYpxL4IPy3YeNn2QPY95hFfy5HVjENEsVjcN7vfvI9gCgNnC\nhrcwzDspZ/AA6mlYIbr0mGiaGv6IG1R1xUG7BslbCj2l01gGCgXdh7bqGjczEuyZ\nVwCBhxmdNaBE4VvQd5UTYBmOIFZAXWE6QL0ZJ8J3yQo4/tA7VdNoxNmyo+bDN7/l\n4PlNKmXxkiO9ths+ogqM8tC04pt376Z47DhUUSZOX7xvjJQOhOimqV294tJXkLXf\npYzDAj9CqFRmLbhlnMKnwkHAGK9oMUxTEYzU7BooMNaWMRDFX6OhlFhiIB7D1QHF\nPg56OVnrWi7lIWeEr6/RMvXbYPxbct8gagilVU1V6N4TxKhzwR4KhN2gu4xCDrxk\nge2tGDvU0B0gAnxoIOOBOvUcEw3OmHU8SgvhqsDZNsukAoV0fAU8DKwfYBaptBo=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAWfX+pYAxsbQigAAAAABZzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDgxMTIwMjUzMloXDTI5MTIzMTIwMjUzMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD\nQzhFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqx8Bk6a4lAy+SWX9\n93XiQhHjqnGvLuu9/PGqp3MFj5UFpR0jqIP6k9lkTZpIN/4ZCOO9+eGx29NjGX5w\nfACcd/kSITGcTaeDsVFz2GQqtreKw4Uqxeiaf9bMDPHEwCA8jRaspxQr6C0kDYkE\nfNpY8eT2pKYsd7cRUZNSQBOfkhlBdB4OB5TfX2jqUoPkQF8Vmrozpn/a2i04kYaR\nqTfIGQqnvWIrtUdh3mmii4947t59iLK1HvNmZPrLxDt+CweuQwFjdBPVovPerMlW\nRDD+LSVR6BSsjM11SdWuTgkOxl47votVB5MhMLuxm/rEisZs2Ok+zbCg67YuJum6\n6zresQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUNCnhmdvD47QUw2J5lJYTHcgRHNowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQANbi++\npVU7FFpqKM7BwAjrdpzRoSfSbMXKTAZ784XF6i95oTQk9xb1rS+SyPMzmuTWZIZs\nhTbs6VaAHBmAtsKKnUthauGbPXsl4lbvCtw9TF3ZMmYOG3bHbWG1WNohblGXnBa9\n4KCIJbwS3vm89E6gK9C6WgyJ4OzflaiSWGJCyiR7pf6+s9ylOTun6pBZ7pUVWIfN\nxouzYvBPpbAPoc0CPQl5zPOdNeGuAJBfByzIXL9fu8IrPfHLb4C4TI9oBfVnrc6Z\nYTO0WD5rdIh2hc0TagPA0W2OQhMLG4u072nRx0lXylLA32FC49plRDY284PJsYxj\nayL/hgr10+5whkw0FWhbaRFaT6iC10b0r+JKItP+euD8lEoyYNJUuCCFlj9Tm/zy\nmr7X8GKOHqXcDztkb8Obj58iXB7fDVzjQ5n9QZ2a6iK2zNJ0yNysw6jkV/qtbhZ3\nxsD/X/yZjWuANnO/rrqhhPVBu/ZJXfTVfeGotBCJL2t89VtZt5q++KBI4mfbrB9K\nJKUC7yEpr80KblXItOzkRkmvSxG4AeEnwwQIASffmnP9m5cQgE9PuRbBos/40BZf\n12SD12T9Trr3QZz+qJ70JaYU+iQLWW3JJHXobIP4V0dIqq0+OZ0k9LkgFLEiKOzg\ngKrerxXbuiFa7wlkXORIudGDxhfRrodeQWMjyw==\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID DA206EF5DA6CF79CAE93C5E472FFE9480172CC8E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApa44sZliWIOvgAAAAACljANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzMVoXDTI1MDMyMTIwMzAzMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1EQTIwNkVGNURBNkNGNzlDQUU5M0M1RTQ3MkZGRTk0ODAxNzJD\nQzhFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo7guDhrfMHVE0rPz\nGno3CfW/Lj9u6b/bNflWXVumQX319sNQW1Mxbr9k+2NYQHw2D8Z+Su4/b4QQF+09\n8vWBPaPV8+mJx9sOlhfEf+Twww2J27kuIu5tWYbnHgsaEhffQS8eCv6047r5YKTP\nMyFE0989giRry1xf3yHe0HoUGKBqPMa743pdhRqnXeMJ7CLDBVy57u+LT9QaBvdS\nN7fJRk+iFBc348yvElae9RB1OhDlHERrPiSr3U0oCUwpPBQ3UUSCY5xujgI362NU\nMoHJNGsRl0cvRc1bxBb54WJ9BZnGg0eaRq4USUt/yVeDQlxIkjGCC+pFI1HyIqGN\nGIEPHfjtoMGC0/Y2mHuK7dbNCiqEALw152f9Bozko3zD09eQREFoXnjgQcGvjRIt\njC4UeUQYqrxGrMvz6sx4DNu1iylIZ25LtgGfiOnMTOCHEYWWqEp2NAQuTMeppNuF\nZrEXjpyOHcUaWHv5WKbggaxf20JLrImipTW81872zVXHouEwZBPxOKRXhTnY47Cz\nibiaOYrvCoOYffozLAmWkjK1srEcp+nW9jmDQR4RiQO37zW4rTwJlpTq/J+cv7bs\n1wcZ5IEX0dVr92O79oGls6zhSgazFXeb9JaGPwlELuTlKMek/LleBapK/FyQ+Mpd\n5c1ajnquLAUlTsspPlXG9mES4SUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDoMWWFMLIeGs8xJ\nnEgmdW7iQbQfMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAe8IeSYXF1pdyZ8NrCTjO6WvxhyBhY41lmDJBB//oDDqK\nySc4ojmGdxoXA3O8vkElv1hFQLiJEhZ24HQhXnrTvaZMo7Pa8ZQTclOk3rSQUu8g\n6f70nK03FJ9qIOPTZdK0ej/1CX5TARxL2NVqPxKEBXDF24c+JMuBV4/vhoCSFgf7\nK4i8oH26fC5DpDVOnrSX3C3tMm6TvV/TMTRchZvWMkYyaHEjUgQvcl++Mj1759+L\nv1NEYB5shqfxZ6P0ZDNmXs5TX0gb+1TsVzcgc7D2SoMp0Rtg6oKpdFa4sG/01pja\ndtylrvwjaPaqyEy9GJ7fzfIAsi+ViZMH6nOlzsZv7QQPm0V/AcNLwiyFEwX7H9fr\n/mMFZzWVIa2Z3lX1WyxTGEWMBU5NbVJE77piVK7zBPkiG+4J6st+C8JHpTeKd7Jz\nPGmu3eYIrpE1hxT7bNEPYtxkcESpnx4OfpXwCE8IF26j1Hxpz8Gg3EDGQCw7AfsP\nPEpIl5BDQ78gRD9DS4/WDOT/fAQ1QuVqFXjAmu50Xa0KGr4W1gI08Ee4NJ72YsUu\naQjP/9yAh5WoFCIjMIMMRC5vjEv5wlTDpV3T0Oo1HfISIqm+iGcpB8MuaIFbn1cR\nO07d2w32npbTcx3tJvBSMlOyb0ZJUDIqySFSrakd+4IjMgQV5c5WyRF3DBxj/h0=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID DF5D6DAB5102DF18A1F77113F4983C62CBAF7385 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAeAbaTKL3CVxDAAAAAAB4DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxOVoXDTI1MDIwNjIxMzAxOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1ERjVENkRBQjUxMDJERjE4QTFGNzcxMTNGNDk4M0M2MkNCQUY3\nMzg1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqINsErjNGuU3jdph\ni4Zs4gpso7b+uxipdxj4i1p+tfKJafMuB63qin8avyCz0LxEG3Vmgyzmr+JfxFo7\nZW7zi3LlcJpZWCWnoEumMmnWmrJ+uA6oEhxtZtr8UoGhsd0p3qLRjcxbfL/EaHFa\nMDXGdFumrETl8AgVVdYtCUJ3txRkcYq5GKss0vUJuzhaevQgtI6OUd9zC2ra8KAc\nQUL+3kKsQOsHFtZsy9hCKm7ILGVoBOxsoJCXNqyNEYx5DnnN+uvOGeSXTX6/ccxb\nPOCW5STf11uC9JaqDWFhwhYN0f0Ilv37JEC/Hkt4yCH6TpS12GUlLuXd51yG2o05\nzb/JvH2qkLCx+QzZghRkvQbCUkDRUXWsV5jtKp+dIHjItytl9cz1S0r+ItS1Spnx\nwOkHs6RCAuX0VvEuRXPzjG6+B8Lpym+dI+fO15BaMAXZvy0XgfjtxN7W0x055Nf3\nuS5OJ0OwCWTtxYhTwIipVHl/I9dZE+OSPzwHvBQSzj5ta6Q58NBPR5T041aNfxR0\nLYiFHSfM+QYiTEOgqx9l12dZLbY+JX2w5GXC479SHjgkt/CFZ6XQCucO4SwpxzKJ\nm0swA7F3kBnLoXZhy+h20Kms/ObG+9q8YsxMSKR2m+xK7Vz4WMt8SDiKTHWSu9Ee\nyr73E2aRQ+mgUpiPNnqWE15zgJcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL9NsW6ntiLz69bN\nvEV3ZO4F0iHCMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAS+xQ1bxJhHUvlYFWgzckn41mvZgEIdU3QomZA6K+lY1m\nCRPZL05BKnAdKfY9a95m8mXNcSt1ldZ7zY0x9ya63WcMpeh7BsF8evDrKWAeKJOx\n90ORhjI0IiHVuHvyMy81ZptCwXriIq0HowkyTwqc0wfT3Gf0iSvdval9Xc8/5iOl\n3ZEG/PkojWsboGkxBglVi5gSP+c3QalbacsWO74MNdD8Aue5I+NF7eppOZO/Qceg\ntFSlcXGpvfHPYdROw+ULkxHQX5P2zmKRGxB5Uk55c3Ei0h/av2cfACwny1Rjtxaa\nzXbAKDkmczozV9X7WZrcrkZFJInMagDlrISv2Jf9Bpab9CNdlNCd+aS+BWW/vUBy\nhmEJP6uf6ZGiI2K2XrQX+oSRT05qQBYBJtUzb9JUGih3if6Ch6cIf/Avdr+n4SRX\nIYcs5AlEUkbePQ4rLBMZ4cZ4wUn8MpIitb0HgxxTA2HS/p4UR/5HQQguD3QmZkuW\nezhSt5Q9iMuw7af4CwKu8fTLzKXVMrd4Qj+lq3ouHIKegKjePllCmopnDAC6v/vC\nwGGSTr87HvPyVrnIe3zVPPOtdktc0+NJ9jcKgy5nJ/kdoJHTrdHzf0mtpu+98X9+\nTCECRoVMG8R+CSrCNellTQSHISt67Fv9kAmCB6kvoESKSBZUVDnu7fsqjFNgxMo=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID E9061797E8E5E8C68F935EE5E976BC8FA17D7523\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAATjPyvMjJn3+rQAAAAABODANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxM1oXDTI5MTIzMTE4MjQxM1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1FOTA2MTc5N0U4RTVFOEM2OEY5MzVFRTVFOTc2QkM4RkExN0Q3\nNTIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvRjX7ip41yVuQ492\nMCYvbojdoRuyJdgrAJ53SfhYSkvNm5Vsf0sYkYVoofwsUTUp6JGr6d6wfIzEjrAj\nk4rd1LCx8xYYhEz6p2oniX1wf5hOqNyWIi8WKewqRug/NcfevWI7/8krLP2KDZqY\nswuFVI6FEqnO4EIIbcF+RW8lHCXBU+Y1EBYvl053FU+sLJD8bKX2bNVSmyTVPH6y\nirKFrevV6XwkDsFwFFhVu4J3WID6tXdKEHAa4CK+RWnErK64/AvDsoJkxSXjTKqN\nmixBkD9OwKK2AOsFlKj6QY6KkvyQ2ZWun/V/mN8HGbQ4g41T6lYOJ3PiOXJ+i5YU\nno2I5QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUx1CEYkl5oQsZb1PGKzSvwYdfQtgwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBOQBkr\nSaqpJRuvsUf4EODvIEck52runPmFC9304/2oAvYzL+5tnwJIeMofvFSEvdKgSoqx\nBho2y8Gw+oObwxKWoOOj2chs4AKVzZC39v+CKkly8BIXFjRKg+hHukfP50cdxnF5\nlJ/q55S8gI9RvPtBcLl3T9vH2iFKfhjsjP8JJlerz7y8P7z5vwkoyTRAxWTzvpOj\nJ00aRUC24stzfPcasczAUCwHXlL/3sbDL2cH/97mi6YErP8c6k4tOv+XDB1yWBvN\nTGDel6lQpoyxtEG8hWxhydFfMbUAUO8fyQULu8jNixY+W5r2RFhcaFQ0TQAuFrd8\nUCaVUWF+z26fqKEcNAML6Qcp8L3lP7ws+3MQfe7NKZpMrCJeCOyr+aoDxvevutym\nrpYNp5XdelKjbRr4I+0RzKfhkBjQbdckSTbiitS9VU7qv0oh3PNw1yznX/FFI8/H\nhn+xDg2JOCnRXnSJJLxcl09Fiu/52rjGSLGUhWPYpxQZWPC4LNEWDVwmeimfkED+\nfZd7Y0CRRZ8ch/yFGV2fMIaXEbEuCM2PQmHRfF7HWL5RIVfp9tXvBqf6LiG7cvj/\ntzhw9LN/8y667LsYoQUomdiig4Z8PHXEyqCes7bp/z3UuoC5rjIfeFlee0hl+TBh\nmyKz8T+9CfbU7A6k42uWe4zntrdF276rMPk04A==\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID EC3F8D4CC12ABE88A019064E8A62B7018FA2E359 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAArlFm/LCiyMQVwAAAAACuTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0NloXDTI1MDUwODE3NTc0NlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF\nMzU5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA7NCOJjMU9t67IB4B\nZazbGK3vaJ+nzDfqOIw6VbOJm8ZZV6NPOtZZpgwbPD6aUcbgum5MnWNoCREI4vIK\nfm+aSdroOzSm5kOK8T1RV+j6wks3G8hN/gP0RTWJy0/klKsJTlmUZDrNzQTp7oWe\nX0EEHm1u41g+uHdeVZwZRwG3XbMy407sFbGk0WO8wGUTCBtBVJbvt26gVORB+Ry+\nbF6OHL9/RY+DltL2wNubIuwgUrkuBWOZKnFvdrw+OY5+b7H/C2JiW5VDEjljoU19\npvNW9IO396RdKhFIDfbDOloSq5kfeIwljkdOZ9t+/E1wFnKtEXJ93N85nNRqMTCG\n2TE1W9ms/eWcND/MRhWEibyiFDLwddY2h5DfUF//DwLHEfazqyBFOhUvDojh97F1\ngqIbNZYZahm09/pXJHy5hav00//dIEZq184hFhhQiEjWef2ytMvy5rNXTGeIN6E4\n7n4tI0B+rL9clqKrtUFQJtG2d43LItJI6d40XAPVDHimvdBLR/lH4z1Lovy97jV0\n+plwpWYalYaW8D5XR2lp5opKvfJAW7FylOdNap8JN6zMfKJkHYp8NofOdxgspetN\nzz7+LATeORJQaSZaINfXTdpCeoQ29G1xC1UeizWNLBYarO5A5iAYXBPqH4e1gcVP\npuC4XxPsuu0yGXuaga8MLGXHMTkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBR/jr7vFxwVMrJS\ny7qm7QYCAHYPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkGuwf9sbe12JuhOLvUbjD1U07L6VdjK93HyWXK4xynko\nBmAYthTW/4SMzF/3WVNJRKWR4eAB/9HFzzZ+SaGo32fAuzWhtreJFONN+K8eGMUv\n8/MryPlUSppZ7w0uRc4vIi4JmDKgYrkpxRvN+FrPNZsl5Il0avE1McM/Ay25Y8Ja\nk+LmDXCxpIKPBPY5SOMPPkPWPbiwZvNaDHvQN9/2C/N6uYHU1r5gRuu9z/ndKbYm\nX86ymgz0AOATqEMfTnFA0JYq3lQpm2JKLbQVwq2f7d8A69TRQugKwpBgT8MEwP+z\n82Cp0DUJkNJv6XzarD62fcCKEcszYxe/vxOpeKoG5xs1e+zz0/Cx9BKyVlSMoRZp\nBEqINARc4ftLDDgdqTRy0DKiyo5I7Yng5O7tOzh1ix6zgOH1+FtRsz6yIDW5JCCt\n/Pap3kd6xDUgfi4rJL1/YpSeVEERPUJeg4LgWKbmQbrDa+VCBNNQb/Omm5dOWkve\nqTC74HHw1yzzMpiEW49x5ktADY35p7tQKC7hMm8vIlAb01JPFpwAPu7jNzhBQzto\nRi55E300CIp0JLzP5ioiFYB4h2JYMqMDL6WzXTGBJ7Vl0K2CrdCgAJVwzK6W3JBN\nXMb8f8bukNGAyUgc4MWZaDgYsdzE6jLNQKuoe3uXlSY66gCKvWHOSIeBaa72Ex0=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID EFFEEC5E01610082C0E311CBD07A3204408B32B8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApfF/HpOa/zVnAAAAAAClzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzMVoXDTI1MDMyMTIwMzAzMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1FRkZFRUM1RTAxNjEwMDgyQzBFMzExQ0JEMDdBMzIwNDQwOEIz\nMkI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA+ULWeL93NulGynsh\nll9NgFgDEk7clILDD5QFj+U6qrbIPOn9S3b8MgSP0rrNp4kWkCM9hdG5t5kXzPgC\nocpHYu/ehH66xsoxGHwQiosPNu6gpG2fnHIcYKsQOZKaeRwGUEUGPkmdmIOayoM5\nfOK3JUkEtaL9oxXkCY5qxsx/URNEgJ4CUuSu/6n9BDa5d/HfWB+I9/VDS/7MASwp\n6g/7+cG/5TS9im+lvBuG6NTyXIs8/rdBKk1Rl57jp1MpUWqhag2Lz7bwT1sjrULb\niBIWp5jOPFvLU/nXAQIXyEZau0S9LuwUXoqRFz4P4Dwh3KzdCZrGvMauUUNmGQMg\n+u3Nws/rAISSn6aU/07HQ9olT/vjEX0IBdGNZ8r382VA52rnIrAMzerLF60ztf1T\nnwu0tlL6Dcy8/NJe3ioi9N/R6zRIasCUHJQWpj38USytcAgyIvG2QdH11Mpc+7MW\n+NjL3LJTvgYR6MGOiSJSs8muhm32I+YP+tnYIKSrQGUeAPVJ+Zll4taZRBMlqDif\nihYrUk8pFWK093vsINh04871515HwuZ8zOdjAz10uyHp7zRwO0mxrsO6jMJL2XIT\nZdwz5ib6piQHjcp2MKm3g2JfbvxK1Wj9gWlAfx83bm9O2dowJsz78cVxIdqhlWhc\nnFeEhqpwqkA9zNVZ6rH8qaOr+x8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKIzsaXciAuCn0NR\nrJ2w+4RtGOfXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAa4Hk/PHrBiu7nKGNaS07/0yuJV8HWMwiKyFnSFaayGg8\nP2LFRsVyOduQlzMFTvcxY/0QP2W8vX8IXdA4dt5f5yPEiD7tjjEvFAvGEa5CTZDM\n6U/jrmX8kDvGdMHLHSmxoORXAPGSITGGunRZczIkyJAPHqlKGyNkj8pwZVh2bKeM\nPsANH+Oa8WAL+YKq0D8qbz3PvuMIIA1U+vb/U3nyuxGUzS4jCGk3Ff8NJHBtk377\nUulWZW1DQXmVnuj5XdXbk+goTxT2APOrmXGFLumqlmxsApM0XpryIdhqbpjffmFv\nCFjY60RFggWutcyHNh3jZjN1gYUcKbwbvy6tcdJN0SgEUhO3Di92NgO5P+hf3v7y\nIogBVbm02IUKbbTWSLvkX+omwUMTknVFCjZcDzpSZk5RHNk+YQfuavMpjMHbSeqr\nqvawnkSNSRbjQK8wqaIoKsGUUgr2VFLrQKYDuUBbZOEqpexl/L8p/AdzgvLjAv6x\nohVHov/ypVDRsM7jcrW4x9AVXq014ZeQypMfZdScn2fZRfxrt6wONN27wmWAbCgs\nRrkUEDzGJsUE6DirULQvpLsp2Gyj0xiVW3fH11q3MCwQO46dNeM3Y+FCCHHzk8uX\nnCqisMro/tj++OKBOz+DpVz8q7brB9RdVF8QFxN2dwN0mNF3WQ/sRDjgjvlIEok=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID F53E4F475E0D3C6E2B3E56E3AE8ABB953122617F 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdXH9SQXmwoJLAAAAAAB1TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyNloXDTI1MDEzMDE5MDkyNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1GNTNFNEY0NzVFMEQzQzZFMkIzRTU2RTNBRThBQkI5NTMxMjI2\nMTdGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtVB8/pfTLgvw2nf0\nJlA6huDfJGHbwYXPHVlnvIaM8kL/u9U7gh7HJy+unRBwWkYe2OpAM0YVS7MxKsX7\nZB/IwYsnesX13YJ3ZNe4zuFYXIgZlGbzITJDE2vEQefHOEzoWQQCC3S9Y3D28Mr2\n6lvW3VIOImNcd3jJM0WOpuNShzHpByu2Lyd4i0MX7P19h/UgEmgPHp3BjX4rBAdA\np92e9yx5GgcgxYrtfc2btNxElsiPAc4GBGgwLnnDHgc2ncfP7cvk5L8np4LO/SoQ\nqM8OZffzNwkkYGPVuMtQEIxbTkY1ISN/Mfbj5f76FVoyZmnzgtUfcNGUWK0o7R2s\nli6S8xM0HDPlveJYciw0WAfz5RMGpHIbTxwp4xtAVSbRel9NIR9PcAW5SFsJJnfM\nqARELIljSxA/gnaxUCbaW+kzLgTxYisXrBuZTEqSrXwdQ3oz/QN005DB3cSH2g8a\nrsoA87IkFevRqxgEmLR8pw2uIhzf4Ag8qEtHhV1d/fQjSWGHErd2iIB6kDeo/DOZ\n2nDkV4z2Qz+eIJ2VM5gIr9/II8F07pZJ8RogcygW7M/pk7BBnPxsaCZn723pIWRX\ncqvKkeqBaTxLbcVhiRiP4P0LZe9XUSm60xzVK6qVPrmUWq4axmGwhjdfxIieSjCw\n9qnEVcIw8FyKkLD8dgbin7b2k28CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOl2HpMzKHf8ml0d\n56Lqj1dqMQlDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAUpD/z1bFHvy6lkvFz/4mOt6NTshfOZALhII53Y69u+8g\n7ojmJxPDcQ9Ln8qDXSb4FduM0HBV3hA/s3bVMeG1NEMkv6Nv+HvzNjKysqIxpQ8m\nwRi5vGVPRfLlBTIQJvhmU4kf9KLp6FRNtS2J6cu38XsvwvFX9OPDBhD8lC27l0l7\nXNGZJPKmDW6KyKHn8z/fx+PrwxSx39Uj0awQ0tNcV0FC/fIY4E+zGl/3zwqXQhVZ\nVc/5XO9stVOWnyMbaQFGz/939qzCBYVSx1HgKwlGxBUu1xzb3apCgkqkOeu5w2nG\nihwGl54qKq8bR9+EoVg88SfjlVyuQ2nEIV1kYfWAtAw9ieZd49DbSGws0Hzx1Qah\nvmr0hKvPYND4g65sfXjBLYNyp2uTzD4hvJaxGfmmXqeUbFYD5ORqYqTIxaJcbUL2\nWwEwW4ESrTwRwaDiqlJqH/D8aBrOxPCU6gpeWIaahUx9ou8TyUrlK+NUDq1kr5YA\nGjFlxkmj2wjWDy22wVmRHF9riEaZ5qcH5mSVmRbH1OmJJiXUsHoxcPpgyyBSdUH6\nBwiCr4ICpeOxMu/Xl/vp2gx4zhvpi5MckYUDfKU8gqwzKa5wAGQsCfy4Z21OgGsY\nqVagT01hGgA6vm8EPYh4WFaT/ILMGxL4msBe1ByOpY5xXmb+LEfed2fRPXyCgPE=\n-----END CERTIFICATE-----\n\n\nWUS IFX KEYID F65C289B3D93B78F978AC8D017B7947DA93637A5 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApgfDaU7zYnaBgAAAAACmDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzMloXDTI1MDMyMTIwMzAzMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1GNjVDMjg5QjNEOTNCNzhGOTc4QUM4RDAxN0I3OTQ3REE5MzYz\nN0E1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxU57r+Hk2J0ma4wn\n3KFS9Qmvm/ifCQaMCLmrKldbag9iPjbDyblmnYg527IgabilyEfnPgp3XVEhYv3Z\n1MXdDZ+h+RYFTv1qBayG/Ax0dImR8EDCcJr7YanSwp2hH1FVxf5GMYSxDAkxe4MC\nbf5lOSHuB1ZNoWVudYk6jEedz+FXhK15cXFZrwgBfp4zpZ5CO75dbfP7TTD5FZKY\nyy0sZpQGpU6Fv1BF7vk9SCLHKDwVpWts6hHb+L5aIWVJiwH62FIO6GoPPRYUfMLA\nteGmcJkGNj2W7SXQU/ZSbqvI0KWVCuVdMfDYpXYWD89R7nAaOtfdcbqu/r1YfgZG\nLtcHyl75MV2+Oojovz9RuuAwWJ3EFGxmOPyFMRd2Nslhjx7fdTIvdKjXczOr3upW\ngf7Q05WRnVK1m/QsjyyaEqGi6JQjPi2OnEMx7CTjobEf6la5Vlzti13V3AX1ZS+q\naWN4jP6g9eED/b03i/G7oZX3CbEw6/3JBrpiAf7pwA6TT2QpLqLXlba9ghkF5JXy\nXUBXonR+U+kdkTIu9mn/q2J7CA7x8fsDf80Ad+1YWBq57V0waGF/lws8/cv5iD5E\nrxRy76G3htgaztkrA7tIhFaVvgnk/6DqHYvPe5Ai0LWawosNO+Ev8ak2vYU6ZNKQ\nIy2ST7DHAtJZJsXTzuuj+pJsY3MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFItKu2AJFVXgxqu+\nEzHa+7xdB6irMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAKsO19JJ+i5F5ZyUA78KOGkx3qDlYRw5OkYXUMUoOxtmZ\nZe6NJuTVi78eMqPDk69zzpO84qXV/ZqAbzBXzvMXs2sucq1dbHXQLWwz7eA5eBoa\nd4HlFsSfVnT9VgMp/W8YndWDhNvrptuGnTcIoet5C+RzApBBjYeozhjSs/Is+Ael\nuDnLKVyKkLMRprcBcka7/7pmjzTpWAkVKqLnZEREo/SfZzMLpTKlFzmV1mcVvHoX\ng4qvVHwf+WvtJDxybxu9nELyiAZFrmjgRBqt3wegbc0No7cGObmXudL5lggiHyCf\nLNIBq0HSli/Gg/iRLjY4BVfVm4Dv1cVEpR6uGVeh41xnTH5sGREXYPjfuKsKRHNz\njuUmoxCe/dbnFOggHQwatnbdoiVWxydIQpez0Xh6Qi5rF5aj3EJSpONd93lDMU5k\nT6AdKWePnMdY8ieGhMDnyPqRBow/Ne9p1VodnRVmqc6dOV152YMkAX5pelvSxGeT\n6aYiqWfO/CWqD2zw6N1Zg/qFWE/YNuJH/vZyAxxldYcT4M1xIqMi5KC3mUWNG6Ya\nhQcujhD7D7ixkN+FlN/V1lmddBhorz8gLN9op8oGQef6KWU0R7z583kdMgoZH9HV\n/OyXzmsaUDma6yIZX0tLllCRgpmJ5JsmCV1rJfV1ZIWF5h2C4zMSWhGHPGEyBf8=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABDhEsnJLGH3ZwAAAAAAEDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgzMloXDTI5MTIxOTE4NDgzMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB\nRjk4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzEfLF3DU/KYZa9MO\nNrUntFdixXGJucz3A21LNGPdd2vvPzo9ESJuSGCvXOj/7Mf9/MApv99cpO5dOoKX\n3pO/PdDF6C7c/XHwNJZdZpDkqM3Xh5QzaJ4VUu0gFccKoqgIqrJ7cPlk4Wy+PMSA\n011lnSpFGnAg/+7NUGc17OEK/cxTRGJGcEeW4gKwtV5lqIq7oShbHEkXvmP4qmCd\ncZRhCSpqDDf8uNmffkSyx6DAiHhIaY6kjaPBcLBKFAfTxLXxD0rGB41Vjzf8vZSV\n923sp0VPzavSYK4x8s9h5Es8vAewL8UNEA02bCEi78dYeTu7afTTCmCzM2XHb3w9\n5PBhIwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUrp3+IwvV7CKiqZGleMyWrX6ygTMwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA7nleX\ng80cBVXmKV5sQiU8iaIGnsfVZARJtNsM2ZULapu8VqX7HhTIys5yutAWqGZMDgdA\n/HtzTlU5qLTcbGorWyMAQLh9+txWfOT37teiGiXtSHY5x+7td4CUc871Ei/T/s13\nFJjWCCTnTs7YeKdXyycDjQSSVh71D51IccNF8IsJn5Tb7wgUGH0DykvB1M4xd1W+\nWt5ywq6atAcwb5wSdAXtwgBfxHvR+KOE8zvb7LxcKO79w10TyFDtwT5IiKr0y6Ua\nUejxIWNSCYqjYhwq+0o2d9z3NtZ/2AsqsUkpu6dqdBkUBoYyTX19b3ZNJvAi2lU/\nLtx+c1LRmHzzlRfBP2BCM4p/tuzPMq8G/BIEOOMuXleH3GQO+se7dNiRfgQfHyEb\nvQcjSE3TP6Jff3M/Llv0yf1ZWx+Syvjbgq//ezR5F0MwY9j6YMgD65A/GzK5Y96v\nspkFzmy9M4d4ETEWJJ4JO+dzUZ2Y+VGF6aLC3EQOtg+7PPpab18lTThXbwUZnIMQ\nME3olQAy+fTmnSd0K/SkoA1AkT4TJ9OQxUrwd66YV0f2xdVTroQJAdEmwcWMW8KJ\nL+I57XwMervbhI2g58qp2RUb4PXC7Yuy8Lv0k0Re7fYCK/MHfISgCcRxNk9PRMzY\nKyTRLTo7ji2E2s6Dmaa8nmZZqODqawLZtdjVxg==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 2583CADE368F69C80F58D34A48B2DE653DFEAF98 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgmA98pPfw8b1wAAAAACCTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwNloXDTI1MDIxNDIxNDMwNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yNTgzQ0FERTM2OEY2OUM4MEY1OEQzNEE0OEIyREU2NTNERkVB\nRjk4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvjk1dmLadrAxZDYE\nq7mIV1+9e5ifjGeIc1DEae9FVHZ6xwZmqLUjZcu/vYeCPFrXDKxfoTCgvhIwhHaY\nVDf9S1Aa+zglJWhWFqw7Mee/AY8r67evkPoOjeWIoHN/j5IqBflZD++xCZsddBe0\nSo+/BQw5J5GhIVBdtRlWYDWHvvpK5cGja3GIk7x8LWphWcnpaf20K0eSM4gRAk7x\nFG1ag6Z36k+0DV0/Rd8sSA723CUZ4M10iUVx9UIbAa+U44c9oQgNvmUqmNKe7X22\njgzmrRSQPK+b3oJ09ZyDM4YoqCYGrITot9TvA3GuUuuKAsLJ9Iy/SG+aIdyUv50e\n4ehUhBuWi94XtbywROswrp/WIh6ZU8xOoltHIBg/M8K9QK0LNcFDrZAOPx1x2fjT\ndzgmjBNFB7/oQc+NcrcKNB5hUjL6ummY2W7TwzYz7e2+/pVjS9NrE/aBMXp3sn6U\nFEmxaQsGOj5B1DVOZ1IY2EVWjbKWJ0Z4xVzsRBoZxHO4dA9kZLKAltFbbzrk/FYy\nENDusO6Y4/m6W8KmMSY1Gd0ZNb8A8OT+LXcvLB3is/sdYE9huPVDcfZjshS/1j9n\np8END1HUakGxv9GDT4mfY8BsZUAag/y/RMsEWhJQktuEX+Gl/v80qbdC3bHGzniJ\nAS2ekWhesIhkZVBMSYbC2v5IYEECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFH9s7nRQNm0LMnGG\nYph5D6+swV9gMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkRE/gn78pAnPRLS3ZOd2vf326rVrUspBthyvmkvGCoSK\nniQQwiNWVqwMBSZ9UxmCF+Pid1xOgsu8t/SjktAtljPwSG8rDh5+sw5jz9T/0Lgt\n4ED9UfK5plUSDRXcFdm0DYiz4JMomoI3gSjNS+0BFeqLivK7fHIZvTlvCKtVoqXJ\naRo5MG03UWTfGKPzxtqH1PuBVCrt/VPCGiZOs7XcdJhBPZKqe+QGTpmUC4g9N6Ec\nPMA1LaZ6cLHsHUgseMHaT/I9uZBdsZr3YtDUBBo40MMyIixIg1ZysGdD9e4IXpMB\niwqiMdWV83wj7+kka0W5yYC0yZWLlrdQ1cXdcDDQr6PbF3AR4ICtdnG1+L9513ma\nCbh9d8ZHX5Yv9B4PgTDTKaAuACoQ3ltTp2lU+8aRrn8T4o0l+qSHCMNxOOkK51to\n6cpWTf/KHLZ1vlwWVUhdpIPW2YCHVTzXDSsSfeJy8wgb5j4WNMTK9ZtniOgwgEvz\n1oB6Fv105/FezH+PvlxlK/l5z7Q8GASdivsKDJIfUJl0moZXpZeWSzKo7FqzZrao\nt9dfpeEVyVIqYc3cxxVycjULOMli0Kiejp0Fh2EQ3moB1w/rmXlJ8j20tULGBYyO\nqdYs3AqmrjdlKcNg5FiQkcVpmoDMJ0LY88hWwE4BAZWKCr7bk69f6Yb8smMId2Q=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 32C6E576663FEE80D64CDD7B18E5603863B3BC8A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdhxVFlCD5By3gAAAAAB2DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxM1oXDTI1MDIwNjIxMzAxM1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zMkM2RTU3NjY2M0ZFRTgwRDY0Q0REN0IxOEU1NjAzODYzQjNC\nQzhBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzNMkfqm04vbzETyf\ntGIHNBi6pJ7cA90a8h3bYwED6aJrt55+nIvxO6+b1qoYqvqNkrCdzePej/zYMmdY\ntLDg6zFRWppKY9WnCw3pVyROmrcU1yuLs7qoW0NvqAkredtIOlru9ibe8+1IVM2Y\nen9B9EUbWMOBygGiuX1KV9h5o/9FA29gAOCJqneJcvV1UntdJ4GHbKg0IGKK7po2\nNIp1wQ08e3ky9nnmo9Y2/jmESona0/T61766YtBDlfyY0BZT4TOat8bfqeYapGa/\nUePR1+h6J10ZWwBXR2KVOXcCCem/HbD7tBWzu/NLEu+j28nW4Uyk21QDI4pLKr3q\nOtcKwmhGNAXTTxUQU4h6kvs+0daGY9ne/O5K4K4739Pev6drodiMMwYJ93R/QtKu\nhzT4L6IAL9qJDp663lsUjemFpnZAfPjiiXphhjIkeok3dDwmj5fE03kpB3gp0D4J\nNKcpRNXqetft3bzc2r7bmG3dik3JPPCIdTFvTeGBaOaGdPO15fXI9m5IEZAk7qvc\nQUPj+k0+oETByeK3aCOqBiDFfhmV/INSv6ac5/6Z6Vc+4UFkIxM3cBo1xNaS0ptM\nYZ+NO0BLcv0rFInY42UtSlJBWImYvRbKZfABnakeMPy82oXtFmANTH9anyNUTRS1\nZD/a7GoOkB1Nfpc/7jHh1WHSf+ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEGgZwmz5Wnou1j0\n7/n7/zMzgnq/MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjOFD0cmgto0ga2Kg2DwqcfPk6onPiChDZ1d199r6pwk2\nLJicLkTQr2+XMKggJUo9u1Mi2qQShhJlqUBI2QNmuKWDSNXuJQmyyeiu5HB6dHk/\n0rprlRtxWmXV6buyj28yIlTwx97AKGVwewBm0WsUB17deb7MyTNY/OCFHrVbI2zU\nKXDl73xOloQSKmLCJ518xsh0djZggxa5iNyGw2tHTpU8ENpgTsFougfR0HIxJbwo\nDURfcyrpI0HLKPwBcdEIpuBbSfe+FEsVC+RF7ILGbvY3Sy6cFKjShI0efE6/yudF\n59wjsCRJRR51X6cnV8K8u2SqGSWhCWwjZ8WKE08ymoZpxyjXcFNlkkOX8O7UJkNn\nMuASbOu93RVZwSMdkwxFtkVeJI55+79P2TI4xz5/1qPb1673HBP7QRnSw9k1VKgH\nWMoR4vMDhqY3E9fF4XVJQdLLh3Xd4IHbKQldKs6pUTSXIC5dSu5APOmY8fxGqHkY\nlPjyElHlqy5YO4OLeBnVKUBFTII8+W8L8YCt4MaHRgeZCHEUwofLN+ZjSVHcBGDn\n6wBIrPJpYMc1k1fjaCQEU72yf2ggl242eWN95J6VjyCiRd7BeJLzDe/sN8acdGpl\nw79tCyNsSdsNBarErGacbOQfDK6tX3kGAzCMGBc6O+DGKgqpHA6+3eKnS+wwydY=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 3893cdbdd873c4233315e1b13ba96a0d23cc10c7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABOrQrTw3ZU7qwAAAAAAEzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDg0OVoXDTI5MTIxOTE4NDg0OVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC0zODkzY2RiZGQ4NzNjNDIzMzMxNWUxYjEzYmE5NmEwZDIzY2Mx\nMGM3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuNRXAOs/CDrzfpS9\nZ44MRJ4U+KIYJByy/5DLG19DqJqq5neqeFbya8spw8qCWsOn6BBlB0EDiU9MliiW\nB6sNieICHx1bHi+KAVdv+M3wLu1tGW0pttliMnwn5scxHYpJm4IFxalbTw51SKdo\nE4UztI/uH6YBB0Kqctgw3ug69B5gNKQ6OeeVYlA/EFxum0ifiS8tkIQrROkVuA4a\nrbGlpkynUJjj8Cxzp8I1y6TMcpVBHP8DtXGHix7YLrga0LflYpDdHhFdYJvyxCC6\nCsvy9DNevkfTFfmxUnT25lzfxAnFMRN5IuqmrxtWFTNEjNUewuhjdebEzlVARtuY\nkY+IaQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUtQ1HS5Jgmc4Pow7fLumbeDDcFZkwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCdXbUE\nDH95XoIEBcYQqq1mQlKkJDsJ+MQaUpT/f7ZL/nAAgAbQh0UQFjvWHvmgz08AqMjd\nKeTcIgyTGgXFAKoG1YGEPX9sJEg1D3dHjvCBlZcYuw/p+vW+GPQu75Ac7athQu8/\nEDMDYmZ8U25KK6QdN5bQ8zqB9i5+Jt2fFwCOu5JEr8Y1D4PVSKncp3vRC7kiGt4M\n2YQ8aTJypn1ZykZlMKQY+rX17GPJRsn9d1DGbwDvLrUbKHQLQTS3WV5FGZe5xXuX\nTUNrYTj51Pq6YdEWQgYV8pRaD7kzZ25QY/shqxcT7kXtAIaf4yrlKFRsAlopSU6V\nacRPnPuJVP8OmxNYmEe6pGRGOKLto3MI5XRI97fvSrh97OeFsBg43cc8anRj7ybO\noUqAsI/k3Y2kyNess/5lpBx13hp7qtCCNzBMLAdXjZhClvvhOuFImFLTn7nCw2n6\nHhA1Jo5RuoaW1UQuA62+7EXDyh4byTiOrfmiY4hr2JrCEHwsX7C/Ek+FwlQ0kG16\nzYl6QJ8AdQ4DEDxeUGQjubJUwpaK685ZXiM5ktzmsxPtM/O8UPt7FriMsyeqhnUt\nTcpAeYvwKpqqdoxaMZGy+39RoNSoYU9v7V6CHiDBNnZ9XwFjWhu6fZ8NBqufPmqe\nFszIjK64IAyBMtSp6vGdrVI0HnGe29klwZ68IQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 43325af5500406548930cda9a67dc78067b97801\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABn3PUr2sZ1GMgAAAAAAGTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkyNFoXDTI5MTIxOTE4NDkyNFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC00MzMyNWFmNTUwMDQwNjU0ODkzMGNkYTlhNjdkYzc4MDY3Yjk3\nODAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlxaejhskzaAyG1ac\nQnmIiEv2plmHQWnUJw86xUuU63QIoEJxchfmysKx5OFIIxuYdXd9Uq2rWdOn96oJ\nRHFebAwpldCtqltYG3YB19lOYO9gDBTcw1TQ0NxsOJ8cXGVK14h7r0L679NuDJEn\n2Zf2avfh/IiwIMLv+694t/hacRcEKee2PVAbC7AncGCtKHNEAlsmAG72SXgWHCLp\nNH9/6/gIzLCTYUJOzFIS30bckoujALz9FjFWCCDgTB40/0RSfD6uDxHXZS71BpWg\n27OyiawD2WSOiVTBPJxHpOolJB7QxIY+5tNjbO4vRAx2ULA4H92s1JBcKP+OhnbV\nMi0phwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUg69Wfqexsd3Uwr4hQdwzzkr/MAowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAZRvyw\nHPV/iJH06uZoWtTIsEVGebnYes/3kFssFLuK1kW+/lrlYuUOj0yv6T4m5LNPnu5i\nBRySc2D0UPwE6WI/WsQvg4Fx6yzSVANax2E1HrngQ+6b+Tw+D43O8FQNhdkdGuly\n1zF7RGJBPSo1bHREaAKXRArM11JSuMct36ENkW4C3JT+j84tQHrv/vf6JbpR6RDB\nJ/LkaN1Lo4QqTQRZoTKCh7M8d7pX3Hk1sVdtMHNJC4uzzNMTTcJRONzI7Ww6OJQA\nX2sMlUmPCGKAocIAmtrKIaDVBzhh8/ykldkKYp1pwKH+/prLmA/D67B0iynRgSiA\nKdsTLjcilI/0XPq2XhSQck3PkQqOprMkgmwc7D6up1uGyX1WjHXWgC1jeYSv4gkr\nELPY9NjCsnpi7r6R/+0Atap1zxi4LjjaVKt2hoedZlf/pMYvnJK4yITHzmdaAYwH\nPq229H5FVZHiGSHryYEoohPQrKf+ZLssgeKCAgWsDXBBuYcCsWFq/3XUMovKn8Xs\nlVKCeiKvIAurHPbzAEAaO58hOUxbp5vydF1qkydzn7+0Qz/ebMTEkKooZgrLzCxQ\nL9w2PDuzt/u+nB3CaSt2m9VBp55QI84xQrf8emt6nwZkEoq+oZA/CkUxAoG6B27V\nrWAg8YGmF8MFBatXsR0u6MT4KCKAPfjBMM0/Uw==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAFyLHi0dwmWobQAAAAAAXDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgwNloXDTI5MTIzMTIwNTgwNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF\nQjNEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAidErXNniZipyQv+V\n6lA6prWEV/2zm8qTT6qK3Dmx0VcDY6vL/9reUZoiXiDutVHHra9q/wEnY1F1HDZj\nNO/ITvjA9ypKJ8901PQsMDgy+uuXj3AEq88ozSxvC+EpK+KYlOQi13l/RexXY8Bh\nDLJHhtVXYPdCTWwaUU3EPMoQum6s4Q6P6NkEcNjE4psL6fw6UI7fLJaiiooiDr5R\nUCuhofHnCIXzDzFu561thQxgLqRfzD3KAXdfyE8BwdnZBAfc9k0UJB3Il8D1VT4k\n7cy+t45Ml3Z/2YRw+TkEWwqQY/3lsvtNYSvlBz8fvZT9whMrUJtaxE3vwy9Ix5hV\nfSIvTwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUCI0VDFX0eGMJkqXNWfTrsxFEqZIwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQACXHyv\nJSmi/XHlzQKxbuozgmtCRlDXAOcorJ4csds6IgBS4f24XWmnqPR6Q6rFcqK3LorV\nWREe30Jw98i8JDd7z7XVVRQfeCZSQsVpzM+B4a/wzqKZ7uAm8QZCs1VsUMfW2ke7\nLNFghh1k2B4+63UAYfP+suPRmClEyAB+rDKA34v9BjNZy3tXoxJHdRqvAU+vlQHs\nWad2vmof7V1KG8qghHSHe9psiiGvsQzhTPGloRnG3sPNXc2mf4I3v9QAg11tOZPs\nUqE6H5o0z4md6LrRlo5hnQbFJHwX9NCEewAs+IFbm2FiClucV5INxr3KDx5QXDry\nJWeDi7P4UsEC3AxYT7NEBAT4OVFvc0aVDanPe+qnyeCjOyfyhbzImHCUKR5Q9Nlm\nMaBM7aXcvMS/jpUTJHE0mfzRjxHV41srtqRzXuZUeYU12H+DWCK8ymjqpaNrgtf+\n+kzZ5cREFCbMUy7Kx47vaf6ViwpYiUYdTtkaXfkkmamXUxTnbVzGD6YyUU3rhVdn\nYEMOxPkifYSd8YRcI2Ow+8sk/0fEtzJMFUWKJ9l+Lix2avHL5WMFFUcfX89wjlJT\nVltpRt//fzILpkQFnSjNDgX/fqFrC8ii8lxdAJjPiuAMY/vtzH88oA7eVrx/gxAF\nLpW/c6sqzaVQEg8j1mYoHDfIloY3ToSupbu7oQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 4A769EB5D93C833A5500F1F281324EEF03FBEB3D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgNSc2NLA/2JugAAAAACAzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwMVoXDTI1MDIxNDIxNDMwMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC00QTc2OUVCNUQ5M0M4MzNBNTUwMEYxRjI4MTMyNEVFRjAzRkJF\nQjNEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAndCdIl8zvvBlIVMI\noTNkBVBl9WPcN0rq80OpFnVxAuawLWCjnUHFBfLbWjFJIyuc0bqo4GZ0uJ39xIqQ\nMG5wfN7u4vObbiVyFpQ4Zf1Q5rrooZQupmhNFQbymlr8z4pkL6AGbIEDZzojsGgY\nLrJKTWJwkVEmGGsacN0meaoZ5xKkvuRrTU+NgnxBx6f+TXDNEdXUTaC/o5THRDhY\nfY3ua6N2DE72KJ6hQWhM1INNzp9p2p3LzDp8ImeOPQdV+WbsqFPNStvamram+Y5f\nd6CxBoZWxCGE74t7ziL6x+bUAIuyeJVPdX1lzkMwQGyKTmGnr0pf7mqx1pKNBYzi\nY6GefJQ+XOh1HZVDCCLfOVg+TJfY5hW3V+zyveZ6iXsB4frfpg2t2oaV7Q+O/Wgq\nMtPKrPR64S3+xHnQphf/507HNfDgkxicam/ZuHE/pcjXXXf2nf3yqa4AE2l2hvqC\nSWi+cdzPJ7AOD2Bpfab4wV/ipnFyi34YpQ/jcl9nAmTaa/2NnRCvuHTlSreyX4AD\nosxtHCB0QnRV4IMarwjmgIIYCe//KEyk8azSPUrVMjgbe5mZV9V8uDMNb9SHIShX\n7gsGwwmbrix3KIN95U9kyno4XVARD15JHI2jv6QiW5XwCNkqWM/99MU5tZQUg0bP\nn6AzraWn1cDfkEX8HUR/PpXxYqsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIN1pkERi1W0SngW\nzMzQ5E+76cVxMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAU5y7vsKLQM3vtc4TYa797vhckrX945Jxpb3+hPLi4WyO\nrVK4zj45bHXGpWs2ahy/utqFRzNTMvdsol94S6n69x1V2EnkkdKpeEssg+Xa2LkX\nmrDh6TL01KfB/Z1nIPDmw8V2DCJOGj6JpKqCgI09pmo4e7vNX9KOrSsx4VCVN5XG\nuEyhkirYiY5EdfgVEfeH4CaSmZIdaYiANBZk2QkN46z+azLhhqLkUb0cyh+Qn63y\n34onY+2OyEEfAFUSJ43QPpUWqLl5ix039j5is8IYsRvx14Mc2qvy5X98zi1a3pFZ\nXDpMKepIh4zc5ieFnYW9aZVOesYs4ZoNS4FbxM+2CtngK+68lj4bW2GZTlaHWVxQ\naC3Sw1EYzCRYx+QVBrGWT21M9PAjKN64YJ8vCwMrSXtCMNFUb8gTzxz74HivHZHY\nsUh8TLEaLArDArs/LUBNWOeaEXddlOHzgVcfz8WpX5iVB08ZFLca9y16HPihWFgl\nf4QwfxDnvVUZ3ywYFJxJXzJrxTJWsr6z03khKhVcixfQOHJTNuQidmwgWythVhuF\ngny3kS7UJQhmwE/ZynEAy0VowcUI4YlasdY1pLtPkRUOTXKvZBwDc6YMStxZtAkP\nv5SK07YAFtYC1QMkIDPG8tICMt5g89FTBUwVor2w0kTYYnAuzz4XCJl6Cf4MYaQ=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 4c4b4d648908e45bfe5a10d36387a688aec1cf78\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAWwzFi6ViL9aAAAAAAABTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDcyOVoXDTI5MTIxOTE4NDcyOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC00YzRiNGQ2NDg5MDhlNDViZmU1YTEwZDM2Mzg3YTY4OGFlYzFj\nZjc4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0C6SPbP7sjwhIBtN\naF9zkbZnrP8k7XWIfR8ojbLLJXeuZ6e3CDxxaCpqWmlAvN16s7X2P+iFggSC9rzf\nc0gDipd442n3nfDf4+rJ/dLJCKwsSFokyD37qG7sLd6/4yQez/Z06njSX7nOmy4S\nFKxcBXQqGy7t5f/bHtbReebsajZqjUR9MQ9DOoV9BcpjurVOo0NLnsBWdHbaKqVn\nfNSd8eVGkp/nK7LioldhfQ2UJL9Prkvl7uqiXYdkx70W/zFKzrZIgB7mfC3uX56f\n/WcQvBYChC2CCl6k4OOkBi+cgYsmChl8fDuHAuO7NOz7EdGSNI3HNMVY9Yhp9SMR\nj0TawQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUDrOnn97743cxy326QK70LXBoVE0wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBxgcSW\n7wzqY3j/0h65DkRfxkK6EauZM8JQpo2XhUc/TbQ34sL9HT6Gjy5yXeg77awIpb0b\nJjRlqJoM4gO1jZzN9228ICQnoJ4Qk6Pi0z7iUCBDhONmi0St2mwHjEzu0wBid9l1\n3GSRk7puLeaoPT49fTDg5PJliu/eT6nx1JjusnxZn9peYXR8lu9aJ0A32v+1nIRr\nkqwIZJNzx7UQob6OPSeI8jmYKK6+//MDMp+r73qEPxbY0JyEww5zMaq5PNlCtdfK\nmuyHBEfTytyAxdXbu1CBVVYGrm27fK/r2w205vICXJY+G0C4aESbLOpA7+8IjxLO\ni/kxJFGIlN0BzXchRicmeRuV39ze0s+F7xP4v9nug7mU0WCejSxRpKnDBKXxIg9C\nts36mQADxROxtmXnkT/BbHsmTjy4J5mnHVwnp3RLq1yqpXr0M7trsfn8P+LredVw\n7R0+9c9UNC8yXASe9/nGKXRJt2afAALE/y/0PxETDuWn8Y8j6b1BOaUPt+kyYQHx\nmvlErrppNYPG5jXzQo9pfBHP7gs1vtq623VAL9n9G2G+pbQ7RsOeJft779dx6KD1\nQiJqIRHQLV+R+hnaBl1ooLT8muLX3yMUhrxY5c3oc39r+hgoI5TOjKq84scff75R\n8blCF8JRoWEvcsrPc4TDZVSJF8MGRzxvWe89Ow==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAGJFe5CWYPmlKwAAAAAAYjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgwOVoXDTI5MTIzMTIwNTgwOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz\nQkQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnegAMv33taoZa02F\nvVtqd6LpFxJC2W79pEfxwphaAcY3Ata7016UZ6SJMzD12izQx9bu+eK6azdWbwOo\n2DwTijRdlFRBNrBdVl6CFY0KLFsE7EKuG1/Vj5RoBPRn46wCWngEMhJCWHa4CJnJ\nzb58mZ75QjZKysqgTzU5mMx3X+LYWstbnEa1jUlZvfRE83Tu88batmpKhzwosnm9\nuaChaiBwCJtHsOU91N7p0o6XNiuVT00kNhCoqaXKFvo0x7SqJPtcJLN4MuYhA6jq\nwdzh9Kt2trt6lxHROTiOsFoE9JpUcAvOx3bYR7FImaxJAnEH4bDorjFI2UlxBB6L\n2AJscQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQURNbs4dngM1Mn0QSxMyUDW6tusXwwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBo3Eyg\n/b6tAYBC9hkSFdagcuecnJX+K4TFgSn00C6WKpy+1cypjG+pooZPTVZ8Nibc+Xyb\n3ra6nppNEKUsvwmJ/izdKD+WdogpV2R9Vrr1GzHsRH+NETe2RjsCCZHuMVWU/jXh\ndfSlO4513hyqSgzxIcQc3BiH6P2P2aOKGdfdJe8TP7prm3+c8BBl8WTtJpxbdW9+\njS+RprQ/ZqDKc/u+hqP4tdBMSsFLTqTjac4lHJBVPPKD6uV62ef9L3sXEGzTVZEj\ndTPePTlve7+5crZR1sG48l24UshRjKQfxMNjX0tmBIZa1AiFMpYFZ5hVA8YszIx4\nado/KNqUzFgVBWy9BnPy7EUlf62okPzt9dCAJJekSXVqu8symGDGjfZaryNcFx68\nWNmZPfjTllPkrtfTIEjGcMzA/ib3xu7zgBNr/HYdzIOJAG/p1BqX1Aw3vdjieQ80\ndf8Xg3qhKGKqGxbm0t69b/3g4H8oRrKS5hVit2U+zn50sMiN1zAC2M9zAyZqMox7\n10ub71Us5Q1KQyEvHfneSqF62Tlj0zTSmR+i/h13h1T845ACtpfE9RYOVFVUEKyp\naoBi9sV8c0ZRO/0uoGNNMxednvL8LQrYZHQsS8niYli+He4jmq0C//z71yLbWnvq\n64wUSpJTEa9IcCPzufuHJpiBMWKWfq+Y9mVX+Q==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 65957CAE12EF1B1A875D951A9425B1BC1D2B3BD3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgsJmaw+x+CuqQAAAAACCzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwN1oXDTI1MDIxNDIxNDMwN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC02NTk1N0NBRTEyRUYxQjFBODc1RDk1MUE5NDI1QjFCQzFEMkIz\nQkQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzA7AzgyLkvgpX19l\nGvpRRZqxl8W87bDANTJl+mUxBypYq91u/CtsNe4e2jk4m18Qae9l0DEaukdydaOu\nrjq/+A8i5Ho1UyfHHWdTYuUGdw0aVLXTvmva16uVb9fxX8Ywfrk6xMI7rQFjtS6I\niFfuHKaK+EzstZzvrfUWeVnidOcew8Wgu2aH6S2xgN8Qg9J5YPq/NN/WTiabavVH\nojnRmt+g4U7pqFDe3tLpZE5KyZa3JBvopdElbo6AXzZfwZQC3woVEPpVgoysjCOA\nTIk/iYqrZqCAxCSimxTawgi0X1nf7YAiTieq2lmvvt0Sw1w4CmFSDyar/N/Fn9wP\nBRY+e0CWSqNgyUcfYnOoR9YxToH6M/Q9N18Cd1+e6aruwnq9+00M+1K32Djs8wRw\n9q1K0wjoIp1RkmNilWv2gK+p0JHr+R+1kB+WhRHqPZ+qlaLRSPqoODDxXRRBgNBM\n7ZhurIRWWjFAjg5HHLYhs3Y6HU/VkEguCbHWEaZpEFhwk+BtKY4zJTwyT4Q3SUXn\njV2W/PepuX97XGPMwzvCV0/HTSn9ktyw1Wju9RjLvaxFg7vaKmcRkxdYZpRr+8PM\n0mJpdLclhcHjR3+mwqRYEsGwtZcYnWZ/519gA0uo4MRRn/SS1IN6BeW/JUl4F/cN\nO25aHI2Ju6ZgxLf6NgfzuQgG6EkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKBuj7lqPM05Ip9H\n/vNwGM2L7ODiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAYlVEV3NqWyah9AGkEXZHTol3LtdeEkmedwrEFJVqpZd8\nLDO4gbIdynXNQnRRXnw63lZ/0/xK54aDfWwSqvXeJ0Lu+RWp+VMETdeTSEIvQlgR\n7BZRp32nsmKdjvg+JrjFvx8AXBbAyaA91iNLjCqyYBRP598K6LI+xZBYqdULy88M\n26aN7WRFqCid7Ax70tMTUKSZFdUj0VroY9aaDMo/Hb7bEPnGymkhJQTvwaTH3YKp\nQGFJNyjV1zS27xrNAQDS/aZLhQYuK6f2fJUn+snFmXefmRQTT59VmvcRCO7JTu3u\ntcOLVq7Dco18X9Dd0f0Itpk+YAvdT8Xf6n2qRRWaFrTtnsAyFLIAvg/Ql8dnt3Xg\nT8fIoJJN23Rp7AHBqxYGdLDy26Fu7hZVHU+k7TYF4DxuYwrQ9nAFWrhsA+YMw8jc\n+saNtpiGd6Vp7wvggAmat8DCd8DA3mGYLO6gKrTV0i0VA01MjK+P7xKYqbOTeOW7\nYrkWY4gKSFi2GsdrP61Gxh6oyYGXlLCVEehv9Ci2W8ZUv8JKtH90l4O4/sNU/uRg\ngWae0IOVhMBYncRHfPLQb6nQ8U0843ZADVd6OUlcDrUWuEjLSEtj3dMJe0IUR0TD\nuEMdYaqlXpkG1+/O6OF/TvV0UONwLmHSv5t+RISZ39X+TjqxPkn+WEYqxAO6g7Q=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 7026D09ED935DCDC44D84D7DA75CCF0ABC1FDE0A 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdsDNJP2IOnIcwAAAAAB2zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxNVoXDTI1MDIwNjIxMzAxNVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03MDI2RDA5RUQ5MzVEQ0RDNDREODREN0RBNzVDQ0YwQUJDMUZE\nRTBBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp/mUjkypo7HWm0hK\nc9pM3WSJshiT19SJN6d6DIifUt9vnf37P86oexjb9Q0n+nWUDalcEK87lGElve3M\n/oF4cK+hsmY08ohYsTd6sjIuA5poAOXU7SNxAYdt+XBJRanBJv4O7nTXS1vMdNV4\nNyZ43zXpZkEiQs6D6MIYQ8m2YMZcawkLReOguO/JV8lm8prIkzBWKPGPDZIk97nF\nZitMUw2oz2vKKM51OWh+xfR4MLqzq8qmbai6ShjFG+NIQGkxrN4v2PL3i8oOkKpk\n3PLaSxqgIYBVOPbcC3UVC4s90/NEciacCsHSeBWPHZEGxS/nCelaz+FoVyAOKVVq\nVr2iquYfKm8kPksapLjJ4wgzDms8Y1HXge37R1M60JAD7OWFrtgvzQ1Y7TWP6Fuu\njUAtu2tOJ5wKY4+DFwzSvOe4SUPd8BrObFDYzZLp9o2BmykpUI6Dz8S5MZYjiWcv\nE/EoS2lRxR1MvonupgHuMEaBdEFXFln8MEHjh5NrfvZzw/cnYjaIwLWDLLO2PuCU\nER17siUwN06wj+O7VTj8WdB+PmfkhwXMxjAThjBZdZ1bniW4g1/qksKLlK0knXGl\n1UfNtq+5TRsUydw0LDkm2x1uaJS6OIaBuJKfdI4D3OvSkfz5NFKoOX+B/q6sKY4P\niTrVMZznn1EDPcq2Enn5xDUuhT0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKMY7zXC4mTD2KfE\noLbJkVNXqcxAMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAczYhVeBqsRaG1mBoIJuVkJDd2tCpcU0HLruBKUZzp9U6\nRrIl99WREoXytZaOXAvBAq1kpyJEd1VIU5rr5IYNiYWP9nsaZO0kzlyj32Y8Crl+\ns79Bog4/F4h3Wooc6xvmx0OixAChAq2KVA6UrKwBbUAf/MRbJKq6RU2I5nbv4FEd\nfVs7Tqn+4oojVZq3HJcIT/+U7aeAS5JVzr1094fO87e81pdRXAYjXyyz7G8aYl/w\nsL3WNuYnsA878ERGIinvlheK6f91iSLMmQlacoIMgCYzI/y6a/10ZjmMadc1imIA\nZ3U0UAQCt9Ur/dGFGfUokK7sd0SpEaIq7kx/ZPsf4s0tC+ocYh+IBuvZemzyQ8iy\nC42SU2Wn8KjTzlSYzhRFDhmT23iKfK/NuTzcAZs4AcAWpS/F7NRQiDaBviAwxsYl\nw0HlmWb9G5LgdLceepVgHfWgVUlFVw4JHhO56XhUmzy27piyhNSWYVQOa8GakQso\nP9IBnvoAWKa5dXz0/EIJP2XYIcR4ElknTAX9RmjmnHb7fB4VsoT6t8yJNFcU0rNa\nGwW33piOClEyjyZBDmRz2WgVZmr8iA4IOXJGpMqACSWoR06deLysDutK/M9GfZid\n2YChNTohPou1mXtShbbgR/k3zWUrctifsR0l8TJ3wzaaHuXT8O8rGO7zvpjy0Ws=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 7568FF26F37D11268567B6864EC72A08C818891E\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABZctoa4wkIJYwAAAAAAFjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDkwN1oXDTI5MTIxOTE4NDkwN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC03NTY4RkYyNkYzN0QxMTI2ODU2N0I2ODY0RUM3MkEwOEM4MTg4\nOTFFMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArfxrjBqUQRsBceAA\nPUpNKoq5upOSTq5Va5+VVAMPszFMjKi7vL0qFzqof8r3hyLcx0dF0CbXmbZv/X7z\nTjqiJa/Vk1yACbgx9wV6sFky15ZbnyufekrT9nX+m4No2A81Kq4Jv1ugD07ZM35B\nds3XbIc/Z4q7nPB2ghCV/zBcJRk5/jhmMQIUtK3m5o8i2mDoJTxJFckl+YItci/+\nbTnihlWC/1VX1x4FeqTvYHHNpVemKlsO5P+gz2zSqWy0gZ6onO9+6sl46Vv7MUfY\nx1VJ06JdggO9gJXR9IkwXEzYER4Qyk5rb9LgtEsTGKvRpCH/u/8LAJNWNIXE02Xl\n7C9svQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUqk7E7oN534rsWY0pRvrf2/y1QrwwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAPRWIa\ntWO2ldWZmVbwclSW+HJ0lnsZo3u3+1kwf2PxXUnHisLkaECIFrH7wq/KlgV9aC0l\n3sQ7HSjZFjxmuLSEOWG8J0EyKeOE6WkJMhtHvt/iCz4E84+I/Nt2bcnCcxrDWY4j\nL+yddouwO7aAJljgEtrS5RIejdi7OCzFN/8PrAAqbclrBKdN3W3Rcmho6PD+kYcK\npExwvfhxxE806v7gcbhD5j7O6lfi8WNkXZCJkwOab6ASAuTg9VbUmVEzrlHhk/VU\nACiOv4CQuJaZYYkPgalVDTTK8NDdzToUfp8P0VD+Z0IWxkkEvmz9FKPjfKmihQ14\nXPGsh65Pi7TsEbeOv8iVJZQe1qd4ApapjYJF+24UXNa9TF3xFzMUOJTIIBk5APfd\ntX4gwV7TGzHhqCGQOJMzNG+NRPn4UhzIH4bQ+yu6w1k4FByrXbz4cVG2seV4AiV+\nwj/j9m0xMuahVbWP1Buh4CLD8dBJ78gmoH0oqVg0BRwAxdCVrQ92dXYfBaYYPl30\nCymZiPZgTA8jKGAzWcfblfu3OISgM4Fup/9Qe7PlSJ27Ab8OpaNf6GLk3S3K5skp\nTW3z8bPc5S0qyV/MwGAjrPRePcYH8yguhFrqmIRdRwWEwS986E4NMH9fTbBl9m2K\nChcjw7KXbTXl/4gxn0h1ihG7hge0vISwNlkJrw==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAVdNqSj2Hb5njwAAAAABVzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDcyNTIwNDU1N1oXDTI5MTIzMTIwNDU1N1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2\nOERBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAskYYmhvzU8zEq89l\nSlxEtAh+jkc7+2Diyx3S9J1lRLOFRHD7QS3HuryZcKiNYe0UWhssAoYqTV6URFJw\nW8jgAgLaZgQhEpq/KZZqNHMg7oe50K9WfhQRVKzWnafR8CEPfyjghk1vHUV7H62l\nqIF75144A8BovQ28xgiUY5XID5AQ6FAttnoU4Lv66DDUHqYf9B5pHh4cS78K1q13\ne2QWlRk93ofJVmuAsQ1zMm1ppG+c5co8yi4uC0KXbg0JSbVxiirPJ0lxKFxEesYK\nC2EpV2v1eP7NhAA2RDTucVw3WDW5xmGLy8bzltFAqRV5UcdYRZS2wOQgRHKK2ok7\noPHRlwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU5eIt+tHaEkSGnVHDTaeg8qgm7rEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAFjC2A\nC6LHhZM53xC10amMxfNoi7ZzbDi7lw+isLpOwEYFlyTnrkfHeTE5OniK7kc6OzZb\nlDCSueuih5cnudTJsTYdqGccvtkA0hjsQwgI5FZnjq81MwGC37lSceKp1klx0PnL\nT3uPrcpZSl0ZqKFoUJJBBU5tgtrVsPlHhP9qjsduirC361gv2R0czIx7vyN1ZxWE\nOQrb35Glh+igDkKcSgk5OBiyhBvA79dFUAztvlVeMeD4SsX1/lHiRC/ehBUkJHTa\n01zXbMBNr8qoo3n9Oy9OGDnvdFs+vza1/MCKKytJ4IvsuEp//+Mk6yhT9uta8gpm\n19ugAB/ZKV8lLcF+TMCPxqOZS3fpxIjeVjk8GQzVo7JnoS0yA3PaBu+i9/e3+xLp\n+r1dp0ZuxNJAZGlNoDCoGY7VZPtdfDm11qUP7oZyhqQEiL9XGRZtnOUvnUccIGz2\nh/N30e7P6PSqhccTIO371yZ+3YBqtU8HH0K6YxDJiN97KmgC2OGqTW7SbZuRKRjM\nt9anmqMha+Zo+8/iCSyjXHL4o2pjU1XqFdevL5L1G2yQuFdkulINY2eQiq9Muo1U\nHIa/HLVyWJqME29D0HFtfZqsHrQC53aQDepxAe46l4PqabaW8heJgS853ABjxJrh\nUeWr88ftMwGHswprR4maceznQpR6opirLX+zsg==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 76FA7DF0C07733DC8CE24E8EFF196D27788668DA 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAc7reOhAq9oclwAAAAABzjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyMVoXDTI1MDEzMDE5MDkyMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03NkZBN0RGMEMwNzczM0RDOENFMjRFOEVGRjE5NkQyNzc4ODY2\nOERBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3otYn5y0iPoQ0MaF\nnBAjznh/7zISIuQpdqp4ypDNUPjn8m5Ghocylpfec/kes7Mopvk7WWhkN6ZBgr2m\nJFQCIRUqtN3/PoVK5/h/bn572K6uV3kV5Wo9nJhPvqUlRgb16vLp1TnW10a+LQ8F\nioN/6bjrCEi/7rWy3DbjHboGLrPXpEiuq5vCJN2bL6f/KSCuGlhRkKILiYg/6YvG\nz3gRKL4L1PM05aYNvjOkv2M7zqkJp8Nbf6vgPeJt+GWWHUJI6ZYvSlZoP+7X6UPu\nUNFYYpYBxuJTgSTBxhBS5ztTS3E0rkC9pEfVb2J+zJL1Eu4UwUCyjypkb4CDNode\n1WTXcZ42OOCsOGvGerTi5jqPUJgAFmTE5wL/+X1tYiHb9RAJDr0PrchpF9ceamon\nLCEH5F73sDlq0UKOWuFdYIsQjogL45ZopPoYKi94pyQlhJ/IvfStCUTReCoMtOgY\n7FeIgOZU7SLT81w0CsGlQb6VUp6xdbr7v3aMaI23Rodgwu2SgbC0Ohmimgnk/+Zg\nIHQH36rN42CgoxmfpFaxpva63i/XzJnR2XQM8maP2A0hYl1Q0kSuhF+zrrrI16eR\njLbyo1gVuHZVG4zgO0LXG9PCNDzzBi2QAkOV2OnuKyshcd1/Gk2a1DJJ9VoKLgeA\nfHackgI/Z8m6DDwOpw/R+0ZrOfsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJzIJ5db9V0PB7rM\nAuyzZgCuGYlPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAQZWy9yalqbB3CRyRxNOWRxU50D7E58z1LubIxh5HAHgv\n6JF3S6r55OnJHW+y08Y1DhNZanquoxKEOhGL9Ak43iPuTW4c40RZBdsmHB2y6Wvt\nxS27ggZfNBbUabO0EJ0gfJQgOVrrixlv5cDE+PaPra7LFK1dVapWV9nG+/IDrhOD\nxr7j6NLDIvaIoRow64NyekGJqP3h9aOCK1obMeva6pA5wK4O2nTqIFH68S+crn5K\n5199PglZ0g5TXnC0tEPiMTIY84lSPc7WiZdiEJihmgbmHpO6CFlTsPwS7tXJfqGk\n9czKpVeaFFj1zEGLumV6+YEwFAc5Ne3GQkyws7291rFrv2J469OsLeQGrIvFgzuz\nEjTnarQFJDHDjsojWqKQJ41QSY5avuGKLean+VP6wtiXBSfVJvgkQIHYDeI2wCzY\nXO87OsaDZbSATuvQMph20VXb/+qaP/JRalKmHjXz6j8R5nBenmN6kz09Fh8/KnHW\n+/OcxQ78aInn+N0Xi1nbCXgEUY5qRK4NpjM0Mf6SQqukzbr9XpSY2M4SL/bfLUag\nbLDHJ+vn0rhnsEsXQHokgp+V7Igjwhg5c41nxSr2yRpx10QaGhjT6Drm8bidPCe1\nHsVW6gvxlzlNUNFoqgnW8md6n/1A0LztdMsKBa0SOLbZui/o73CM0LHzP24EoxA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAApms7XS1+D7AgAAAAAACjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDc1N1oXDTI5MTIxOTE4NDc1N1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1\nNkU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxL5Rkm6tdsBLkCLx\nsbeC97I6HyyONJ0Ls2ZaUQLPc8vDvi4hoRDlSxwKX7lRl8EHeQV7nRctYp6oMBkK\nO3auASgW/CUqZJkf87Q0Nqi+xvXOzhk5MVJPffoknJiUOezdit82tMH8sRbbdBON\nU3LuWC8FaPYHTfgFIre7Z82Om3Rc6gVka+QEAzUNRH+GZtHITHaVznNdmX0P8R7h\nhdN+EXl8LzvXzN/OtwNysqJQ2lAywfYjQU+2IQ1SOMSFjZED2D9NJbm+BYFEBPTC\n/v0GPXAYrMvaMhg8JJ5nwMnKtPbT3Yo3VbXcKAJSnQ+t7iHLel1dLF8BSuc6AlQ5\nX0WsiQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU7XQXmAQCo5VFEXkxhpY2NOT2DPswHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBFpnP2\nlIhI5O7IYtTlFVc8RMFfjiwCwQVXnIpMUgMdSFLxErU0h7/mZoVTIQ/WH4fajAUn\nuzSw8RXdv1PtbCg1kDnq0qIuJjg6XYln/6xLPUwYgQtveVtSKNbjar/Bl7Fhijnn\njG+1FkSE9FGQW2AoysnlqbdtEBGj5DbP0wHnyQoqpZF0cNcc3/yw6feCsI4WjbqQ\nYxFsweMKm0uN1O2WIg0ZIdgQc3/ixAjQulaKlohLfSIyE8LvMUB/9VyjIgslORM2\nuVGT40jB1DCK6DHKScIBwlHiTl6TPP17fs1UI6mS3HzXxQNko5I7SATnL9qj42mp\nq8EsD+z5mMRReCy+8mejdfUvZdYa0Xq68dU+MsxFdi2lJ9E4m2Q8cBIB8jSlh+0b\n8tfWiwofd6Y9nE04bAQJjDxv9qhGvKOuYdLw9v2pOzUtBRNZO3k8LJHIow1joipW\njirNxfNMB1eXlVKryoV6g5zySYIJIHdBdh9q/J3JKUMJgOL+k7RoYSkm93E2xgma\nA/togw/a2Be8wDolIvw1kf6883geSwgzIKce/mun7E9DDCw4/8cKe4Da8u71CK17\njSEgabU/mXkTtRkxXB8I1j/Y0K/iAM4jdLjJBZQko0OCJCzS+rHgDf0nhbNDd6BL\n4V2X8cJHVzUtmorrDbI7fF/+tnG+oWs0jLhrHQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 78A409C457DE6926F6DF42C6114EB7E56A9B56E7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgdgUDLLstOfIgAAAAACBzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwNFoXDTI1MDIxNDIxNDMwNFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03OEE0MDlDNDU3REU2OTI2RjZERjQyQzYxMTRFQjdFNTZBOUI1\nNkU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvStsLJ2nR50vuNCv\ny2bII73bb5gYN7/sj9osAoCU0vno8ZsaHHTzv9BsvoKS83EBIFIqkV9jG7HQxbKE\n4T2liCeHsItUFYITJwsebLAe7B17ahxKIn9PKR6Y2mSUoynAKq4TKwhqzxx+ZnQn\ndm5IxqrYqfWr23dxHGIFDDTkQNtnKjf9Sl2GmLa2Iah9b+26QsCNVcXsIR60RVJ3\nnaxzoNltkgGxZgUGHuH5VXjw/GnDH8UCgYVtx8Bo9Js1dxxKQDW3mcV91EcSlGNa\nTO4ZKBveXb7ttOmfYrKScIA4WpYpbIVfVs5Ik0dWRvsRkOFmQpUN/UYziHAEoy08\nSeKzwfI/hmEqy4vPCJfB1s8iqCtuM+auqKgp+lrHNAOzCayxQ9eTH/4MYkYjhVEj\nz+3WmMLhejMChiFx5+FILxqhfoUpZ/0XCGbRHi3MVsYm3NJ1cm9Bgmv975MFgy9l\nVjG7PPNZpLhADCT07Klh2iGt3n8KQOsGyNoi0xPp3nT69OL7X7aBNaz3iRQPliU+\nzyTKKW4lXOGmfgi0orEEcSsmdXll8gFoVT6EQ7W472v/1YcgDVNfolXJZL6jHYPt\nMiaxVMXeWT3VC5bt1s2uizVxH6UhXNruRzG/odd0z3CLYYcZN6AhNshqqU9FLxsa\nFhlRb0ZkXO563RtFmuObYhz3Xq8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGiUpGoR/1JZeoXo\nz2Xn1q5aA+UiMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADDWWlxaBB5lSHNNo+fzMklmRXupMiCywU8hW/iVrh/pg\n0hrNPnziBTbrjtzAhq8sqWWOphzZERtdKbpvhPAlHpep1WEuRLyQJ3zUyoceAaNa\n+U1ttS8AKnTZi9V2kMtzCGAEbYCl0bQDhZAA5FKky2JA3fEpNUFkD0rZdhhf0ZOJ\n7aIXYPV1dus0q81Dg7tmd5k034+kgnjU9QR0geb77FrLPdos7V3ZobUk+/QcUbTP\nNhnhFSDJyNWOA+rJxgvyV8y3+VuLeAfkf+OX/TUspKTU4ostV12hwpbBnfx3shcG\nchKZbKZdul/Dvs/JNato9xd0pq/kShD1H0e8Uw9Nr5sfzMaeqXB2Y4X9Q26X1fi/\nK4AC2DvxAkgQzs6GSRgKzbiGtlD6/ZR9i5PRRukShrwL3RIBB6J/oKwmjqjAPupy\n8KtbD6vQf3uXGJdFveWEhHtazPSe4yP6DHEjAAr0fX0SCgk8nb17TpHcqlb/riWr\nk1bSH2ugEfvoG4mT8r6wJTXcjmcC/uHHTKn5C0CKSgkMp/VVtd7gmLQKJFFxtBFI\ntTmSTbTksdeIVlWhOFx4O7nMp34nGKVpE8StCFspO63NpzNDLM8zrEBoVZRFX1Bk\nsw3OyfujHbV1WpqAOhx2+X5XYnxeAHJDxQW7Z8I1ZkyKMhQysMxxaWJAgscwHaA=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 88b3c13f6105d104229f5ac0eb499564acd473bd\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAA25YcW+pk3XEAAAAAAADTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDgxNVoXDTI5MTIxOTE4NDgxNVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC04OGIzYzEzZjYxMDVkMTA0MjI5ZjVhYzBlYjQ5OTU2NGFjZDQ3\nM2JkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv/tmw0wpVatoRyq7\nbvQnpdk00154PhUQMwpLY3QHprs2dIDWgaVFYPYKI0HM3kzQ59306cR+TCfs+78K\nuvfq4IpzcAUBy3tZ7MkrUdLJn5w1pOJmxkhQ9i/20y36HrRaurv2VG6yxs4L4MH4\ne9/jdns+cD5PbMaj+0Zzu0uOhaQ1/QAddkY0T3QaWbB68EIU9QB+wk1L8zZkOJjm\nrcZL4inZc2CkyVr0SWgOB6X9r5AupzM+0WmHbvD14iFP4sQnzndASZloOhgKHImO\nmjcBXSnh8rVfNGYrLlEwyE/ydJ3qWeR/dlIA0Nh3TPCWxYXt6dSsozSewAWq3vGE\nHAYpjwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUSBFeOpvubk3fuCVidXXNVACyJtswHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQArn9MU\nC5KcKpFMbj2AEPgPzl9Zlhl9nMANdknFyxOEgesvPQQa6afvZmekmU9UiPCJ1Q8A\n18bpBM5ckm243bHD6NwuSTdaGXtLAkC0wv5CPmoFe/Z1ybjs/YjfhONFmw6R+TMF\nbMM6R96Tcqo+cyZkdroRYtHfKPbQox75exSP3rtNyRL0FRKSVRFmUMEzflgvuHVz\nmoNzO2aDLyQXTJZPbmzYo97GAYob0Kslo42+JQ3+bOEmBzPJNGMHEAIz6eDmHM9t\nv+WokpocrKqMTlcg4c4u7CZ7utbBEMCRw4D7V/PXWMZPxBO+OGYYXidyqfn7dT5W\nYJTGSKSUW7p6i3taLS4KkYVx50DFJ86k9Rb6lKDW+Fa8v88Tpw3ar7pZgBqICQV1\nje5yfzuxpsrAmPb/vayC0sNXmaUn+i/f9OP2zzTwk9Q059wVftevg+bcb4EdKsjN\nH4Dv57p4abFkQ6p1rYIWIV9F6IVeZwP79WsrETygGGWzV1K+FYPBiStjO1QZ1kgK\nfefnNwSYqZuFJmVgvoImMtCldYxw0ZSmclUs2AVijwuZki/BI3mvqEZdCAyctfiI\nD7BiDCUempKmMcMlGN/qsaMbLmLDvpcTXw3vm5sTuRSZr3bfZa2rffVvWnQ9cgsX\n8JhJW6rSyZOAtL2k6mInhS4MelDTdxStVpP0bQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAAcfcFcWZs/i7wAAAAAABzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDc0MFoXDTI5MTIxOTE4NDc0MFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE\nMjFEMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA18yEupj6TqdCAmnz\nm8SMSfuB8EBisPO1OwzaqnJszd36n4Doexf1lKnwFcvVaVClm3TdcsgYGqigpcrE\nmjqmCWOUi11IPbbvNtYoEsrYr5Fv9USWXGif2NjdAFam17YV/JSgEYF9Fi6uPbm+\nY20s7MGM6oF0ZXBnx9WkkQ4Pey5/LR0oaJr8ZYHDqmG+Cp2YTNAH8ehcBKQfgqSP\nlnOFxtHeJSNw2JxQh1AHxXwx2q1T8GoJ1ZytBHQmnaEx5/Zfc61xjgfnOu6C07/p\nY7aJ28lq6OKuDMLeceS5EU1K5MQhx6L1/NrK3aBtSzUfCQ/47P4yodfsWjNcN49g\ntJMrqwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUIlmqYbhV46JAfPI5V6AkiQqKhSQwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCDpuor\njpJagQoqZ+GpRhzYEesmuGUTQ5skmCqRmmIDSa6fURqOBXGLt7vA6tcvu0u+0huC\nA2ixE+tmQGn2bY9ZEQK4ag6RyhQvoKKmZL+PFFtBZ6LZgweiFgXAMkbqUbUQxtBJ\nA/M+jJRQdHKpYMICJik97kPmTf4vFCShxkhRNw42T14oz6fVICsf+NQ2DrwX5YEs\n1X8w8brwsJbqe6bkgS9mSp+/w7edOOps09xlz8PLErkXNuPTURJQAJx0uupIi5Al\nRJARNUJKELWilh+nSCZdUYwPTL+Qjhl1/89Ka283YE2nJVzdV5305p/6inkaQb3K\n8AcU3FNyVzdEbr4iKgXfSG7wo/XdkjIndUTzPiuJIGrwgwGK4MZIwhkAFR4/BS8R\nrBdFFIWtvkA4KYz2P0XYBwN07ajK5pik9jBc1aLkkZx+7BRHXuK8M75y633bBEZ2\nPV3n5vsdWyQ4z89GTy6OH1N5nrafeVgrw+SvDlbq8CkRg7Tkgft+JLNv2uRFaC2q\nDH14t7fT1WqPwRieyg0+DkOD7x822+vihxT7tk8zsXLeuG//yR00PA2hxk5ogr6j\ndKnuXxoWVSphMdux6++GDWAVU8AEpbPRh5dyldtYca5J3ghFSjPpRG7SWKTKhr/M\nebaiwm0tjAIV2IVNxWItnQ5LQAS3aqccgGWdYA==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId 8FFD47880E239A3A3A20DE13EDF101E882A9D21D 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAgRWLmBrIpOUGAAAAAACBDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIxNDIxNDMwMloXDTI1MDIxNDIxNDMwMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC04RkZENDc4ODBFMjM5QTNBM0EyMERFMTNFREYxMDFFODgyQTlE\nMjFEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwLyuwksd0zEd/Ma9\nEZLtL9YctS3ac6fAY+Ik7ewBBKgzMYbBgdgewUo18eIQh1MNfcemIUrMMMMpMrrH\nXI1/PXsJBxBoPXbMfoYsmlHjmbRYaq++Q7e5sKnrvykpxEQ8PHZV+TwewjLvNaVH\ndhO/B16bdH4QJq4Rpj8qC6meBeCBv5kwGtaVywZtFDOYFJGT/CzQ5aUREH2/VjuW\n54U5gHm1JH9kwX+NV1UlpUVxrVegCZigo011PxIgPz5ynzXGbTC1/Yd9hGw3zg6x\nH6SlGmNFs5yZq9pGHZTosCLC2I6v8sH9sBbKEkFN1EjF9jKUT9GbgyrTQr+daFVn\n25+8MAVJxYZ12v38PZicHfevdR2PtfXy7F+gGRrCQE1LfhapejfH9qjFVEcWesFD\npcJXOk4pgHx9AHOYz1H9gzdf9MFaBjQ0SRREUC1czyQZj+HlpwtplIDafXfIzi3e\nNKuuhWZ9xhre4sURIrGPQ5w2nOzo2s3ohNewUQas04NmNizBUUSXMC+XSzgYhumC\nfhMw2y//OgEEB6V8P2LQXZUTgivfOD0KhazaMYPfIvaRZWl9UfD/p76u0lC1v2qS\nJ5gDCZf2ASmq32GAnIEqbF6LsgUHfVLBl4ne5aNM4GC+kHNjiw9dNYKFi3dQzevq\nb4EXuuS6EGtan7yk/50FrPNZuFcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNKJF/kjPhRxwWRh\nl4iS0EtVWBbqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALM0CBUtljGW2OkkwsD8ydqNXw8RxM7cqHOfyxs3DnWXC\nXN1SdLcXHbng/vdk5Gpez1tppGX2Y9kRxRJguEZRXz0WmBB2AkrJ5KH3XC+JuEyb\nbPl0ujXaMx/l1zjEWiqQKL2o9XMB1KaALQVPet359bvl7Gg1Q0Ccb5eP84rfYi/Z\nEGw8dhaCaEG6kZvkw6qyFT2ZRUa1T0I/HQZ8bO4d+LeeU/4o+pXYS0FUsTHzrfyF\ntWc2cbgzKCWKLlBEcpWp7ef0kUIo0OWeo8xcZeyBL/WPZeBGu7lpSFIbmWg1VbgL\nNdvkYhS8lllP1kIdejN8hvPr629GxqBsgSHnOtzzWi8Dl+ZwwYBmZfg43j1oRiOY\nlLMpZO6bdO4hE9iyEV4P1zRTLAOIJTZO6CNRPMCXRps/e/NU2voDl9dnGbGYxGz3\nArM+2CK2r39oPxZhnTrqO+fDsqr5ronAWCoHNPC/AueAk6vmum7MqXHvSIVVPbmX\ncZ6SCHRtwaTmay3cfs+bm+Zy/sbIeXOBZWpgcaZGGLbUGkTpAV3IK3hyTvvb6FSy\nhk3Rvh95oRT5KFwvh275Kg4f+Y2+Bt6Ev4JYo37lXGhkkM+PtTIQ1sr03tjaa00l\n/yojM+PI4wb9x3Q3BAwJhoDXuKGRHWJkv65612hzFL/v2SA4M1nnhS8D1zsFy2c=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId A0C9DEC08FD39A8B59C46BCBE87FD9948C55F970\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAABxkJbAyGxCRyQAAAAAAHDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDk0MVoXDTI5MTIxOTE4NDk0MVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1BMEM5REVDMDhGRDM5QThCNTlDNDZCQ0JFODdGRDk5NDhDNTVG\nOTcwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5ZKJNjUqFYO06+Yx\nqx0YCv8qclWZSO9vYuyqxoCNuBD8uRdlt048FuVUt09uMbdU5V/FwIOZ5tAFMNAt\nfwP0b9CcwhI/gmhLa4AQ69eYNPnTdin7SvkVfGEAU8vCnxboWxbpmCDwUSkgiSon\n85ed8N5o7JJHowO5LgjWUm2C7l6brzreGfg6aC7hbBYx+/Q64Pkzom3icrdG1an4\nqDe4m7pZKmH0g3VYVhRNsoVSfxG2dBcwO+bNar+5lcc1z8HMQKgrZ3VD1NGwsDBW\n8aKy71DdDQ+vtDNQR5CDURRgBmlVQ1iVRSBlFjeLn8T1XyWRV54oonm3rvqggexA\nKCD1SwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU0MQiyLS2iTRffiSMdWYn7Emyvc0wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBgRXbv\nQy74QgzfwwMuuieacJGuck+9dToNB9BeB5rtBJj+NcSTLne/77Iq32NpiO77WE4N\nA0IRPtQKQxvyOO5uOl/co1r7RFnhIob4jtAp4jPI6+VR6ohEQe+AQeBWX5sb3D2v\nTRSA8xaFfHB/HM6qFxZ6b4GVwsy/HJPLLKTob92Cx+9FxJwosgtGh3T4yfAUAbvq\n7aLMNFcOuywjEKRAZKihupxm23DAnC9UoxuajAjh/ig5ati4Ft92ve6gXBtsLUr1\na2wzG7b0kX+9AZZ0VA5q9wpkhDMubpGLipp+WaJBHfIB5EuOZpdnYaC+2/iUDkOV\nB4rwdzPA2BdYNRdTaELw8GDA9o5tDn9K7mUs3OJSuny4YhhQsioYQYYTtH41v6Nb\nQlXdjve8qYGWMKLFzD17evMUQJ33ZQWnKU+Bz4hDpzMrM8U3opx6zNL8uNteKtDS\nxUyEyIRszmLfs3flHimFneJWJmzc5YtYf+/NeOH/pD5Ko4Qrp+myNGVryh9tWxYC\n/6mMXIQ+3fsXgmBz5ycjSOA8ViCKjLtO7yBkDsgGwjG/OMNWqrmSNAdjRL+pjljQ\nuHd8Zmgrsnd9OsBuQUd6BY7MHmqy+D0TlKhk8j3IoaEIpbxs7n3xKnr4c/X9BhYz\n/Na/amc/2hdIkd/Jai3QXjx92xkD0o+BvxmztA==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId CA6970458673493A8AE1994EF1E29238F27F4518\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACtrONyXv+k3jAAAAAAAKzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTEwN1oXDTI5MTIxOTE4NTEwN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1DQTY5NzA0NTg2NzM0OTNBOEFFMTk5NEVGMUUyOTIzOEYyN0Y0\nNTE4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg7Yda/TA8w6mfYMG\nKhaqnrHHfVOMybACKefxM5L2tCU5sftix9ziUjaw5qbvdy+bAGo9gWGBmTOXkqwX\nSZ6foXQEhDAo99JzDjOaN3Tnw2YW5Vqz0oBjH0anDqP/UgvrAlkYH5MggRMrh3SY\nVcUeV73eBXFRZuknHShZj++2JoG+i79ovo+4GlnnvpNrJqyt78OomfL6Png1lsvf\nWMptmLB6jB+Aw53odQJvVv+XnYij4ard1Oij1OaNBNcgg8fnc6N/ZFuw/FGRSKNR\npXadB9J0ZBu6n21QhQLBMnx5lzg5Fw9BkpIyy5DVYYNRrpXXUpMwykGyMCGgRYlm\nx3YPTQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUJlGhcIpq3S+m0SHmtRykMoforiAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBhTd5Y\n5xoJvvgXtL+wRoei5OjM3CVjazMyCndaLCDZQjiP0gCUdPTf7Ti+lWzn1Vw2CCUG\nHrZiQ8AflOAcgqAJwZxxk/n/tys0A/iOImwXQm19lmHXUDcK24/9RtbA7ka2gIi3\nfCYx71hZzssF5Po0r6/vFNIR9A09u80MSOJJEND9lg4zPSFkHH3hTAtZZGlR11Jb\nUXIYopoT+mpHkOTNxheL1R7855/tEZ213piIRzEmD+labKLbZkq/m7biD9GiyfYM\nmJcXCoB2U/yjlu+7RZxu541Dg8GfP9jtOHZ4raa0271K6K+9+4a8LhZwqEN0+joW\npwLh1K04i2zRtYJGY3WcEoKiMdshaKdtTRUm8TgM5CbRT5KvHoVao9Yok7h36aub\nL0soPTQ5R1nyAv+RMCVEk964mLgzIK8WALIIuM+cRWI1lXRYWyQiHTbU8C5gaMwA\nSTa7X2ebenMZFNoPa3wpwRs9Bd9TAaZFis4mx0R/WdFOGhz/LcE4OaiSVelTqEFY\n5IOJ+YXLgiGHuzsR64+rrhhPcDUY+gxwlOTTiVK0T3lhEpaGBxJ3lj0B0l43M8ph\ny9C+bkZv7aRvdmzEONKBTPDTqjFyz/A0MlGAXVKzw3Lik4RA86EgrUotxnsNjeVc\n+uceKOG4QLegpCtMB0cPTz4VBH+QWX44K3gTQQ==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId EC3F8D4CC12ABE88A019064E8A62B7018FA2E359\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADFg9P/ebMRWPQAAAAAAMTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTE0MloXDTI5MTIxOTE4NTE0MlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1FQzNGOEQ0Q0MxMkFCRTg4QTAxOTA2NEU4QTYyQjcwMThGQTJF\nMzU5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3YzZznBirZCdwEp6\nAXgJVpzp0P+pqFsgPEkalg5SPqR5/OjSTGmge2GAqZ632S39aidQYoQYXe28qwBP\np0+Rt0vXqoAskDutHvRCCjpqiG2zVzkhY/V+mH/kjNgzwHEi7tpOykqe9NHynkt2\n7BcwSestNws244M3/uQC0s94JBAZ6jckXsc0C34AUV6QfiHD/lFEsU3GXEWbD1fs\n6QKW970STpYstw7leMSbYmtfIjUTZEVn2t/jGjSAeX291yZw5SrxIdu6clpkhmyJ\ngcqK7p91pX4zz4D0sGAF1NyCwQfbIyfTbp6vUamqj7RFPlPb4ACoCkV9RjkCXXUI\nDcKgEQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUC2az3EYa3oI+ZX9L067AYZZbccEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB/SrGb\nZnTSGfZb5F6ZJ2OX6TvJNejHe3A7a1SuHZrELGK0xUdmyC/s0fiMJDjWu94SlqAR\nwC4tihFhaA5peeQ6a6VU/bih8VauwmfNzLH7V4Nr8LjV/FhInkeEfN6OgOZxAefT\nJVo/fEx6/3eDhywjk6jAWBI8UotPlL2eEgtMBwH9gOZ+gAYyrSitCGx6WkOqlJTe\ncwcUDrrzaftHrGpfTjunuMzuMMi7n83z0GWvuUVyPfc1EXx5Xs52B+/LSYPiQpzp\ncDAhmvUBuIh4XpkrSU3iX7eESSeMlZkAQ2Wmvr18m7JkHyhGe0i+ArRa//Olj6FO\ncb+UWpjALdMi8tnI1J3bxOhharNF0KT7nrl9425qzhtZhSERMq4O+jVERLY9P3NS\nsp5w0j8c9ixPQLjgLDGPqIQvUjOQOzv0tOmodLMX6N9fIyF9rcC2mmA5HErSyOIL\nLh1bRSWDQgG3+YwmuJvvTiJCPzEMlOf8BcNMPBTWXSnnvo1HFm8pIletG8X76cJw\nM2lLfZTFkmiYQCs4TWj1tX2Wqjd4YKHHJ9+AT8fnDEAn0aVLgfPQ91lLjIH38HWz\nf4KTNCdfssmQMw+I4jACzyAPcvhyibaSlxTsETjsC0DLu1YEG9i5aieLk0j/SKW6\nRfttsNPhYRhQpE4X7kmvaTcxKL0+rIeN892ngg==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAB+XSBPvc5xF0gAAAAAAHzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NDk1OFoXDTI5MTIxOTE4NDk1OFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1hNzU1OThiODAyNmZhNTQ0YWZmY2JjNGI5MTA2YzEyZjk2ZDNm\nMGI4MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxke+BIc07LbS2LI\nNNKyduLDluSFs/VQUgz0PAUKeZwhwBF3H9Xn3/oL3+ET3Cqbc1W190sVgXakjRW6\nQDl6n0Szmbx6U+9qCZeh3xL5O5XMMEjjbWoD/ukuN2oINTvFCBeKAIqQG6yKEX7s\noG8fSQ9P7kkkVFYsbO6G+0isVRk94nLkvUz/tYk9VB92lVo3BnGChbIljMra7E4l\ndIWOOS2H4kxm4kpgED03Thb/Fvpx+mHx+w+RbaypssLdAkWwWTCkC2eeMYO09R5f\nqp8IFYI/mC3u7RrH/qGnbh19e3L14FEheWM0Gmy74oSSftIFioWqsdO00atBw3ok\nueBiqQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUjOJLahJ3xNR+M5MLLfaCWsNhwhwwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQB7QORL\nJsqTCIzfk8ArgDfORjVnUrdXmUjJYDMTE0pBycuHX+G92bBYYf+8jFbXcd5vSME1\ndXduCa4275HYbg1Aj/SQ0lcCVizhCHjzonSmv3mACjf+7PkTEMm0WtR2TMezcrsx\ndcUpLhnbktxq02+bw/3Q4E2m5a6DGy5Ap6900KVc4Sly21ZdAjdCwqxzZBEQ+Nnr\n2raj0QY4GBfgUk1pqqlmWA+c9oxtzuLmGLfbJx0dJjZaODT0usQawYwBl3xyeEh1\n3wkUiUsjNkp/ujJ7tyUFbbSfzvgeOf77QRV+O4S8Y8ATvc3OjdyL2Egci8E1TMUc\nKnXb5hMweQDy2Eylt7XpfPexl+3ZBfbkxSwXR4ttoyj82zPTh87O1H8x0x81qjPK\nCf8TvL/Mi2Cz+Zjf5bM1LylW8E1HBsM7K05ySvCRbOTNP15lw9b4gl9vPb22MXuU\nMmSHTTw1oTHzNDcpF03NLkCEcWC+96mtVZ/2EtFv8+r3ioRpxCYCSGnVHXjb+Xpv\nOjdAzr8oGlCaW3VUzcUgidQ57qAn/+/2YVAcKQrcg+0wp6p/kRCBmEz9r0kWDLtg\n/pDWIPQDj3Ls77VWkldcPzYSthaB3Jn67Lm0FS7oBy631BK8mGvSIEK1lNkxutCE\nP4vDcUqQBFG+8WoYbOSUv9nigvPGDJ742xJRQA==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId a75598b8026fa544affcbc4b9106c12f96d3f0b8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAs8rjeLWzhTvxQAAAAACzzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIxOVoXDTI1MDUyMjIwMzIxOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1BNzU1OThCODAyNkZBNTQ0QUZGQ0JDNEI5MTA2QzEyRjk2RDNG\nMEI4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnyo3mfRyMs4E6z3y\nYaYAejfWPC+LzpyJ0PPjwNtBG3E/rLXNNJGDq72E11ao6LxqqxCR+1AJw0Hlw+Fx\nmaZAzgFF18jIuGKp2blgeowiMa0zyCyaQgQ5gOlRbGV57Vf220uvRqdsUkWfQ6G0\nLVse9fm8Jr+b0XJ5uMpBlKuSPaGC95Mdz/SEG7COoOeDYDai7/U5qOrA/ib+xU2m\nW1E+zrTvCHtYizfuGGl3ZPhGK4cFhIeiM3i4FTb4VLX3i2yQ6U1AP/e2KaDY3H0l\n1wQCoCz6cPvircdh7XQxgIlvLSyH+jzlDSHFfG0pR8pd3WrGTBqRJaZ4jGInvbaB\nstV9nLQZi+lRYf6nBzxUtD2QAvX0xQqpltGt68K7V7XxLKyQSeP+Lu0yPE3gS0sG\nFDcXmVcLe2T3X2LWkAiWkoF2zSltVe6mJk5Vhx+pCbgBYzoxkkonulEeWTpuZC0P\nRi+sB9f9/o6st+b+8s2WgMQxgDAYfdXYdsZGqM1Kp46Q7mzgmAKKCc8k9wmD1v+B\npGux4gKP+VBkxC3cxhCXhr4aVDOz9QFlbfqrHRkCUYmFsZJH/oRkTr6svt+U8qAM\n3OCGhlhXX2acdLPCZO+h3C+jR6qOAidW7+WtLFwKb1nzaNI+iklUY/X1Opm7mCF/\nMlKzxUGWB7wmrEv/IKt1NUQ1AE8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMpu5+U7G90z9PiZ\nVqS3jV3JDYKBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmHzvQrEVYSl5jUK42MdcSyzOu7Egl9e5IoeugXfauUN8\nU2ltK0ny3o1iiPKUQ95iP8u0JCXbJ5TwLw41HPrBxwPacVUVcw6QhkUP+p7jDi+M\n9WSIAL4Va6qxF+q08XzYt2vpENQ1lpQ3RduJbMZqoyIUffJU9txrVmfM4mwpBTEV\nHY8Cgd8ke8/06S9K2mlMxhZXBZLdLvd60/XS9W+R/PpyFDSzLHivOPZMNvtqDard\nkMWC0ITd1e9Izqa83aHRVpN9QkHrWnoKUljPmSm5vgDpqTNhkcqExaciC8L7vWKH\nk5d3B6LT86GlAriBAMYxK6rVI4hCHR7TK40S7dNeRiL9XLfZ3omOFYYhW7PRRonz\nhmnxupuJ0LEwUuQIQYStwqnaFu0BorHiotI4YBj8AloYhfQLinn43yJYBQpCCk0l\nViSRpe1mNlq0+4OSYSNUWonlwBHY2f8oIogl/PY7fAk1OZogPBcfhjwpm8W6WMEW\noDKuzBHqSQRtlikNUv1n0qaq1BCa1B+WmiMTCb//wz8/KaKspTGTdmcHI6ltcCjN\nqqaK1xK/PdwA94Wk4mtjM/r7UhWJ71xUlahzh4O2XAmZ6c0NdRnz7DFnY0pMoswQ\n72TSY2h1rG3zy8KaMCN7XkWr+NpR4gtS3VZLzrGZwYPj1d47/xq3Msutkh0K/FY=\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId bbcf7cc184213166dab5be53a87014ddd348d8cc\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACK2MhWzyrHNGQAAAAAAIjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTAxNloXDTI5MTIxOTE4NTAxNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1iYmNmN2NjMTg0MjEzMTY2ZGFiNWJlNTNhODcwMTRkZGQzNDhk\nOGNjMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqYj+z0XrPNb1HhOC\ny+B9ZAB2za2hWISp/blr3+kEHhKz0JwzkCzlDIQVhMVZ65fhrwFjZducrYvFNw3E\nKU3U6YAMtD8JAKDKa/dRumm7TOfrIKlh0l8M3B4avHnoLLBBTQBIUbpi/i/0okLk\nI8BOLqlgbSZPa00eMydmXZ9GtU/46Jkn+5Zjle7R3ADkB/uQe9lkguFaPZSjNuGU\n883gZ/NsZbWIOZLHEVdw5fKkHtNbXhbvqdaHqFpM6TfGL8rQlsfGZzDlgvKkiMPB\nSngm5vLbOD/hOqNw3Z9fIXWsRXKr3btN99hXrxlZY8M2+O5Tgs5CnW/GJG1r59bX\nvsCeJQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUbYVn9tCsBhr6agO67Nxypojm524wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA+sb4z\nxeIVab8B4ci/5drOLXDA6K1auBaI3YAvo73r0uelzDPoiZUpdojHNnRx3zGUJSJe\nRlDRCaxihqQm6oeNktukur9h60qdWlUTYvDb+pA0u3/tFstXnGhDwVYE+y2i2oeP\nWHOBxcYaJUi2s1TLXBTyv1rJ6CkOXpswcEok4fYtx6wtVuLg0z8HkE8PMd0B2vCf\nhUAQoAxnHRVzml7u7olhh1Qm8tKvvi3tetYypcobZ5IX0uliaCdIQP4ASLkIwIQs\nr4UqpWeZAEN5gtmMAgXGUIG1XL6ghXvSTIuoExQFz5sWBHbbZCIkJ3LwbGZPJl4R\ntFr5kp+dwQ2O65PJbP2g3JiYDB+bumRu1L68PKxUx8IQ5HpJx0YlON16w/GUYKhP\nYwdeAg7YHI6c+8cqb/onfPjuFPSRyd8Yj7gRMisI8vH3Xa4a1AnIiHukVnbY4xvF\nP9IjRvsSlgvaEfmproFZvt6j+4uNmX+FOxbP55VhGGncr9pmpJ3aQtsFa01P2ZWx\nPiOPbo+i39ctXYyC7HrSZrhpFGAxjxJoMX3sfJ7epa4ZuwaADU3mVTqMRr5ZLdOE\nqE+NKeVJZJyiRkn/YhfHOkA3jj3BXKCOEI+YDDnOdELhfwHAvmO35BC44h5LrBDH\nPiHCXSLqxm6D2Y62NzgQTKOxIuEdmuEDbUIofA==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId c6cb2a4db7294be911724f5041310b4c42f89bb2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAACjXQkLrGuYYKgAAAAAAKDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTA1MFoXDTI5MTIxOTE4NTA1MFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1jNmNiMmE0ZGI3Mjk0YmU5MTE3MjRmNTA0MTMxMGI0YzQyZjg5\nYmIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwiFxJQVpxavnGbbl\neuUu+fJac+y9O8MLyMF7nv269wT56mYKPQqBgUkOHQxk90An/10iwcjVREzL9KVz\nrdcUhejhwiLiN2+gEu5ewPOoarF0N+vUH9Ng9tT30k2cZnu7XU2VINVp7h88Aisi\nynZesnIxHzEcAys4y3MZ+ou15XI9WYIzOsQEMBllXr8mvihCzEpm9qhKLvI56sHy\n/OGCjLUFWgsLALBrypWUqeb0M01OvLpG9lsOhw54YbDJj37/Q95x1j6oIWtHH5qQ\nR140rt9BP+BhXzoyGvh2aOx1DfWIlAoIxTz2DJNpscva0veM4GnGYVk3dwcyLG3F\n50cZ2wIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUrSkbs/J/u7NGXsJTgGfPBvo6QsowHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCVY1T1\nepk13jcyTm19ZiKOpPFXTv0EBcWpMEVp7fmlX1apIMAvyuCG2EohDhIeOWOce+jU\nnHa/9KEWtaaL/vyZAXubk+gZXHdGjswVYJ7T8KCdqC0X/bKIzRf9HKsoX82PuO02\niqPwNhlokiUIyLhPPGGoJmmagSqU2cr9AjdDJ7XGACztnTtWM0u/FkjEZm3V9Loh\n7PBc9tD2cr6cR2Jpt9lvAa3/20IVn/wCtQJvs+tqKrXPQlqgjGKatUIxdc7Z1/KM\nt5IhMzfuEkbuMUqPRx1OfuqgPR0BU35SOFpbH3LhOy452aq6a1ozEvtVnxK2N9d8\naVsviaSq8UP4ByCNHfcLfAFalIeNAnC1vOPrP4zgNlduRkWwjaLc98xRkU7TDBcI\ngWroDbz9WpDWvpNml8xqqkbduqDq0bcsbkn1jMUvMn14Ab24I1zK39vF8IZOVxGV\n5P6XiYE2QXKgw5UbDd2nwIZpq97O/w9RFnwFGKPKjtTv7t75uztC6vGDvgh1W2gy\nO1+3nI3IRa8OZfvs+6tTNe9J/64ZcxbqXAFsMxyIYa0jBEChW5HPy6FDWkFDkG9u\nMLW09lyMQ479gxZxPYdHN35jpCpG5L8yuxPrBwI+0UdH/wclEh0zEUHI0sta0TP2\nZXyCL8SHqDciNI1sL4Fm3QyckMoibrBban7/kw==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAC6UNJUmcnSwOgAAAAAALjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTEyNVoXDTI5MTIxOTE4NTEyNVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LZXlJZC1lODI2NjljZDlmMjA5ODI3MDI5NzQ5OWVhZWI4ZGZhN2U2OGIz\nNDIyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzk3PQTkOgnVBS82y\nyAe5/yOf9OjlfW4MzIgoj/PkFbLxUoiI9GUj3/0wX1RxjzhR09KtYZSsGSxRaxik\njIF8pJUONEnYufvwCQoydlT2xM7Y9jF6MXewS1NQC3/WEsD13KyLgFDtyLxXDfYe\nDnrhANU2w8+hodyqNWAKM+Wd5ukTDDVGhjeqoWQH1TLyjbRBm2RYSlHbggHNchYt\nMsrokaGmZxZeDwFSqNt3xcJ1KGOmkEG48pQppGS0cM+gMvN7HmSCPRuHg2GzoEyK\nWx2V9aI5VVYsCgPZotixkQbZ4+GLRHI1utO65ODcY2il9wcwzKqD84DJqfc15zTa\niEagqQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUkXNTgvEYTKm77o5gPiWn0tTKFTkwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA1a3sz\nnGK+aNH3ey+QDl+4x4+Ead4ocTYJG5PecvdeDIVp9CjfIbzvZ/Li7fEY8LQ1tUYH\n+837rjVklXgyWRvblHqrXcNn2WCaOle2V4QEBXTlHucrJxESA37iFf59CNMl0HUJ\nZV3vAuaz7r6JrDcSGrdx9uOtTsz1CuZJWe8aPNK1y7vo29nHUyhiUpmSEoyovsQF\nFtOEnubdZomJaBhX1gvScEFocAySFX4CEvGeV1uwYNWYm3aSENEqyIMVUNH7zb2s\nREDBDgXpwyEqQ9w6SVk9lAxnxVnql7nMzlD0pasNVRQLGf7CsvmixgqnS0UWSO+k\ncTafXUOvCVyOTOLRgNUreHNmEanj0NqDmvcKNcmeTHeQqpyzLS76HLbiWPI7PFB1\n/82ymDqN6/v024bJy3azN//tBU2ferpC80TW/2m5iaf/4L9D168E/1aUNAYm7KhE\nTz429kzl229Wp4k70ODb01p0EXrSxo50ozGrDUo852lGdhdnQYcsrO63HMuhJGzh\ndRv/U8s+IW3gtzn2LNvzsMmJ8evSAkNRWLFA272jizxS8vwEfCC7frNbmcV9Qk9m\nXL9/EUr+ZgP/NnQvvXFE5w1j3ELG2yyQjZs1ushMnoWmhcvhmRfxY1pqBllor7VO\ne4PSRkyp2bYQgei1asEI6keMmecGpCEXH6i5aw==\n-----END CERTIFICATE-----\n\n\nWUS IFX KeyId e82669cd9f2098270297499eaeb8dfa7e68b3422 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtC6GqZQir7T5QAAAAAC0DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIyMFoXDTI1MDUyMjIwMzIyMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1FODI2NjlDRDlGMjA5ODI3MDI5NzQ5OUVBRUI4REZBN0U2OEIz\nNDIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA8NpXenoGEveQII1e\nPPAOBRw6RNi/iuLMJHJ5N16nXaB5igtyjgvIIf16MefzIHIioY1wGBTmP/TV0Bxk\nrRyiXvPtFtGy0M5+5N9chg3wLsO+vXAlbIlZn8ZId9vXTSzQ1O4suajI3ty5ZnMl\nErkGLuvB7atb7VWE6P6xmHn4KA6thRsVugHsx/lJ3bGIuoC3rjNaXB5jzbIQxzI0\nsmr4NuknLkJZmgL9rLHmW9VHDN5R9tqbCc/m52vr6fq4C5zqYK3W+yFoNy29l/Zo\ngXgWrsZYkI+NxYpv0/GVgPjHkm+2xJEGuG9i1AoSvK2r6G0bqY5pcXvKknPZqPGe\nW9mCVBLgCECiXGIEsbqdMlgtGNP5Zp3I56oEkn9q37WhiHDrywStP0Ya3PxPDUri\nlstpwXD1cKc6ZIee+LQ8KdDPptp+MgMeGSA5/XPDEf8dEFv4KPkeOcre8GzoZepG\noNkTraH/+Fl0EQo8l2dVhLHRKs9E869X4apnG7NUnnO8lhXOGbg5OQYsv1lpgyry\nhiMnGY2qTkwOZVXljvmyDdlhkirx3j/iY0Xneg0/MtsidA2QvRtkXF+0WnQtL2UQ\n/dSc0DyknHNkZBn2nXW/gHfT2TkiYOTFEKpdmn4ct17UE4XHkIwt4vDsYa0JD/Ij\nk7m5PrVNTGF5R6iHN0afyQDeW28CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBzzIQgmSDEE0GaT\nR9528N61+VuBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAIP6J+/gWJqd2eoD8hvIgEEEqAT3iqrDkNR1iNeiOn1Fe\nF2hDwBeHvznEXpuMCvUTuW1p6QakRFeChJ0nBt/ZzIuOdOyUD1RaPjBM926tQCqK\nWP1MqSyjeuDUuowjPd6VHVeithfTQNfsFHpML8yXYlkG19z9R9nBDwzR13MIonyg\nV+bmweHeF6jobOzu6/PWEmmOxRr3TuruyNu27HkabUxco9k4OJU/gM/lhgsn4Xmh\nvxeGtes5kO3EusyGWzZXgTa4OKuZwtzp5BnIHtnRUEdFKjacX7L3A8t/5SeB95sO\nwuosr6PJYcvi7XQ7frKl31KrtliVBfi3W8YVqhlK35vhW7MUqetV+TIascKtXqUC\n7OwmuJeMPMCL1mh0PwjktuUD9KFTd0FZlZjzrdMu2YqcyT6lyAwgiIdtQvrmSp2t\nsRw3ezbVLLzMP8Og/oA6Eb81HQbSa/uXiIBup4KqhjvD4O4i5N50lghZtutGt8Aw\nNB/pX4ev7dS1aq6/VycvioLa48AITVA2I9vCkSYKPqvj1ILty2nw7WjEAmS/ZjEQ\nPZCBxfaLyBaGzXrUHT6EJo/JmVn2UtNmIWGzPGw9kbUHE18P8mciBIfQw+R5XfIx\n8alBctFRqsLIVzejWqVDOXWw8MyaZ/qWpOza6LsS+zXdMfUX7DPKDUS8Wb8lXg4=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 0FA7B495048126120E12731606776F3D68A037C0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAArpb1T2VeRX6YgAAAAACujANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0N1oXDTI1MDUwODE3NTc0N1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw\nMzdDMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL5Fcy+GUE2/zKVu\nUJvTmFVQtWkDU0RSf1yuSjE7BBmDcPndb8lsUiCSEy2B3KOmdvtIWhibhPgNQ/rS\nGYS3KiJcDn2v8xtuYrS9enVQI4V6kU7bOVym0QPo42wtFvJ/ibX2K1PpVcfrKlt0\nYFSHWfFXzg2hdK6HRY2yWY7ukodbVfSm3g6nepWdf8+y9TmeVpVjpBMg7CxzNN3h\nlHIwhL0ijVYwYt9ZxxrCwi9FanHA8IZs/AyLx8cbMSfvPyF1hlOT1lm+3sh78Ein\nqk8V9EKTP4zikOcScFkz7j9t1pu2ZdGPiB5yFtfynkw2mUH7zCaYxFWhnFamzBd5\nPRTBT0Xm1s1g8c1ggI0ZM03gf7HFCejejwnzo9gZVLnPjXO18ck3IlzZbIIALapv\n9qqL1RzcZDAF5n7oGRelzSTbrmzesAQAW8w5aMDYnuUV6D2IZn3Q13+LYXzphj0m\nYgpeDA1ytLIPu0ijJ5L+7yXCbVlVvFhbldP/zhcKQMedbByeM+Q/qYB0jDftmMNU\nD398lA7W9sVe22SOEdf/s4r+nOwEioHt00GwugYYVSoM67itEueH5Sa/Xyv8DHiS\n3NIPx9t61gf9J4oSm2aac2GOMHA80Mw/w5+q64fM4xHgx0T7yWsljkSFtXWemStK\nrgxxR08EbwOVj12Dncsg4Hb/UNrzAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRc9VK5mzqFzsaU\nGFxL5ha9/PHzbDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGCuto3JHBivdf4V+E8zzBQY3w4Xn+nfg0Ddx2rL0oXr\nsAFOi0ZVqo/RVBpVwGcP3cCfYZzx5+AM9BTnkBjTAk+5qXAOIa3yhBfPvihwg/Pq\nN1PRdzKOrVe77ZJEVozR1vepPsNPj6eMcT0qrIBHzGx+QsAKVqFvTewnQRRHPWQe\n1SQJqrSn/e52qvo+JvJiH6C9lhlmNzz46nfErILVk/eBVv1o4wQlareKq2X5iQtT\n9UVn+6IHH1Hcw+v0GlJMDQ0nCzx3XqSs5g1+gjQZ/Be1y5oWMsSJb6Zy+DnsbVJL\nF/SFQCB2yJ7faTi+deD0lmJ8hxSUEuNeqiiBgoIBnjMdKjcCneh2k59hgMi7Xh2w\nDzdpNLGgq55ukHz9TdF5XoRsV2Ip0iFr52Shcv5GxVAeITOPgJBUJRd/GZ72kfa/\nv1sD/bpReKI6xbd83lHcpbjZnco0M/Kj0pm4ovYPrLEyxCPGxRVPFujt8MMnjJzM\nzlPX0o/kQpTok8seMpSwyPB8AxBKZAfkdGXcTIe8E7xQrt4jMyq6xz2DRSR71w6d\n5Sberk+FXBPx6rjSuH3wM5wzymmOUmEtyK0Jxr29zEGOmE1LuIgZLpY325g1I9eL\nATtmS+7HxmfS9cNPVc4TXlXsld7juoEtnKAVcEuupv+jgW8CQXIvG+aFwgQCJWes\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 14092B5F7814EC9B713E9A9B90A4C519DF08E688 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAr1AeAxXSEKo7QAAAAACvTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0OVoXDTI1MDUwODE3NTc0OVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4\nRTY4ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANHBl3U7n/QOgtUp\n8h3gGndFtWj4qdHflE2Ki/3Ba6Zcd32Gah7WsIBTaFZP3Es6+43L1byfZlqr9cM5\ns5XtQnB3y4Z93SThfLWx1rsP0Dugx2zlFQbSHqIyVFRBRzh1w9JPxvd7GkyrU5V+\njTZLEgKDF0q1Y5YWUufXXUJmlBMnYepSW1MHwl/udxeiqwqz5BazNGm2jXSG571b\nn6LQsoEqUn5PsXvoMOJAxzy/bx2iuETaeEhB/29Vr3BopUUz9yygisKThK+BoYJ7\n32YC/UXbyXHQa6pLxFzd3LaLLtxT6Ue53jkuoRcKpHYZX9gnFADcOlAezYyAjrIB\n+pfau1GSwWTyG17yzmPVviXK1fCOJMt7a2777MB8D5KaEy0gXDLm3ivfugxy48Hq\nBst0nXnyvfp1FPUnoeq0ZKUZmD4nYtUD+Lfj0W5fUIDaNi8DJdey9WW9ZU7x3PoD\ngaJhHEHr6YGf2pyORqX+bXmoBbzhbob3FwJUWqTGkapm3i8NxIl5DT43Fq6SS4vh\n5PWlxMxd5KZ0KZAdrO0VyjnXCNCTSagwXcKnJUIwUocmKbEFk/hiTlVatiHKceYX\n/W6N6x+Hu5CuQsQ5zotPHcOHaArDUAK1v2m44YAVmFNRC/Wngj+hsVhqZfXtQL05\nM2SVdKh03We9nDt6prD7KwWp+AODAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTzOi4oqf3rC0Bt\n5SbNyRI2I+NuizAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJQtEx3AQiB4j27vJV+RNCv+JyrjzDUjAdfuj2BxTHpO\nZw3HEnM9ggQd+6Lz7bVIlU3WCp20dSu1+jab+HAKaxLtrBXR34MzUbLS4G7TiZrA\nNywMJGlFOIFURA9CaJ7UKkh2SGNDbBW12kz7AL0oYmRUg66+X6tJgifUccArVDlq\n/4Q+cIMuZl4oDo3xMgboPVtNgiipce0pMc2gCSn3uTSE/qopZJMdtOJ5WnmcagEw\nmD97AlUdnDm2ddugh/96zEBsQ3ddghoEu+i/3T1jPiLthRy//sFvkskw70DCjKgD\nGZy0eesukatST1oGAks1jmIOrfcqjY6Z6mj9tHfptnHNQ15wTlisBF4JU12AmWuM\nk969I+fKCsaKuMuIqeiO9YqB3Ypz8ACXdd4zdSfVJlfAcnsGrlluGm4lygV8mIMg\nhrh6Vgfzr593ZTxoQK9HWjA3HgfpZAAqtF4qFIB6YwcnrrSXeePziMb140/xqKzw\n9KYV8ulQvKoBeSOZIPCtYJGY1oDVu9WgBYqoX5RLQsXJ1woTChk1JKbuUpiHvW8V\nUe5dL8sTsPZRjsfUCY6s/BKrvT3O3X0IePluurA8K/Hdx/0qB/m/kpHIlXx3QgtQ\nMaKjiC69TluuDRuAhS+38BT7b/BEnrx38/j72FU3M4RsZE7CXkBzLRrIVDyIEK0f\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 145126D0FDB53E99907D6FC6FF1B90455B9E324A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAr66oaC08ToXuAAAAAACvjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1MFoXDTI1MDUwODE3NTc1MFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALJAT/ZEHuYKannM\n1/LyQBGkZe3kHATSTRHHPO0VW79v124JVSkBm4hZUv3QVlyvU4j4P+854S0E1X9f\nsgbIZQWAv9+u56o45cfngaEHmGl0LuJGT5n8aUSovz2kxbVeNnlUPRjZrMJHhCQZ\nPDiUDz/tgsKxYbTsO2gzYHNo3zsuojBfQzqE72qw1XSOTF+CvKBIf/UVVbK9Efbn\nTcyBtX3BI0F5XRmLchv9KvsubnqGiwtbaP+WQMAMvI8X4g2a7VkPIs/wPMTJflmP\nM7Ili5JO6Kkw8jd9qGOtaQAnKnoQvYssYBRMx+xNcE4l2mcgI0D4GNoQU/OnPNak\n6kJ+wLrIyU6dHxwb8Qxye0MmGsDqxwVLaxeQZXAB21vjwuTEbYCBomb35UoF7EQW\nP5xSEaUxZcnusip1GaK/7WbVvfOh4ZxZkuoI/mCRr6g3HSvJ9lvVISgkw3D+Si98\nGwB0JFlLALT3kcZWBcD9dCbaSnd2cKA34j+L6lp65u46gi+8EItSfm+l0DoHUF5U\nPrjDFUY0ncdsstJPDloIqEGm1FML2bYZ0AitFSMDD9GsqqTyQSg3nfOveLYTcOfF\nzJuNwY+ZBltBCzPIXYE+YlvtpqkYhaFitCg6DnS+WKVwImBnPheFMIa9vDpoEEjY\nCJVmtQ7o6uJ0ko6bBlJqblZ5pcPtAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSUYrU3dLWDHQj+\nMrCwnl3CqmMKZDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGILAo4v5UT3ei02S2SUCmkDZgv12qFyZb9BTHIMi2GH\nfCkenZdJaQ1IFpp0w7uRU4FkRnZwco/v4zJ5moaGXbVlI0kVtectOfJE3RRmp0g2\ndZ8Dt0M5eKOJ0gWxN21PifUxovx3mGxn2gbs9xupSqPelBVHtPK9Ici9pR9A3jnK\nZwVMeX2TtHAe+pkNRfXjCYl6ZE65vG7A3zo3kKG4Pod1H3CpT5Zt0on74VO+O4vP\nASzwtkggebLntMCcBIAwz+4x+Qdhf69oyDhUJwdGOGP3HGLwOT134NXHc22gk2dH\netkpKERJv5MZKaC6sOPX7ip+74dWxZqg/Q9UhsbPEkq5+4kIHntNy5lrO15m23py\nXA1xO/Og4CpC3W3wTpdRcztJkapvRMbqZp5vd1RtQJ1izGiZYRl2bmykwMq20XHM\nr5/G+1DoyJwy2agqZ4ixkrLygEHhzDpT8+QTUD11fc4RYRpcyyfcyKJ3fR+6uOvC\nLnQQiPauppA2VtJ45u9NZ4Rjl1aMOkUEDbAXbmRyEdP4Uc/iuh9x03zh5d+VBRgC\nGr/kDf39tXt6Aj2rDZY5crSdnaXza36ieiczR7U13sERoO6yRzqK/SylavWvHG/7\nV0+f+Qdi6w0L7U/4B/XZY2RNg+XeJxNnjUOQG5RqxiQk26WyaovPngmMcDDA8HsB\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXSEhd0W1xnzywAAAAABdDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQ0MVoXDTI5MTIzMTE5MTQ0MVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD\nNkJEMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjEDS+oev/GapP5\npcLcKlgR+Hf/Y/WjvHAWCuOjGT7Cr7skHrvXVUi38XGaUMhh7Clf8uGtPYlGmQCX\njeKXLADlRsQ0HX57b6AWAoxvIxG/fUUpSpLxJ3dtI725cxVC6eYlVXwvRdu/EchC\nJFPA96od6DKFde4XNBhPUTxW850apDcHybcB0KuHpCiIi+sstlALs5P6v5NK9HV5\nTmJBtlHUvJDDF+vQwybdc8BzsmKrCfsXtsazxj5Q4unM7NKnDdkYA4W6upfujj8F\nHYNTDltL0XW8WU2tmqI+kuS8Hm2UzMuI88voWSuI4bBrf9rveUFu8B2EQhz0yhCO\n9XGBxt8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFOFNxPF1oRiA+127UTF4a1ODgcrzMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAMuZo\n6rnF8bFEP/pbqAFbmCaoRHWiUgHYb+mXuZxB+PMm+AmjGq2V4pgE/X+bnIa5ndCj\nlsXTH0EOiKRRaVgM2xgMjUXheIHVyk2CdwccXIUb4Ng4e6AkppUsfcm2rrbUXfyx\n1RCR47EtJLY3XWN/gMWha6j2N4nSPI3sFfxnxPcKMZn8+9U7S+ax+8FmXw6XT+L2\naw2aSvGLAij13aX7QCN7fOotRQX4SLWpgeprJnV2712AXiPDUJsgL9xNnnNMa1Xc\nHp7RJD73WRqOuw4DDaFa4ZLyyX5+hlp+kuK6Cxb8ps3YiqFzKfkB8ULhzuYg4b+m\nKj7rZi+LDRrane4JzS+yLV+kFzC+wYLCk707aYhovMQ+ogZAKRq99UduKUi/8n2u\nKnsmJmWlndFkfP+Ai3qYpUP1kAwlJIkEknfVVAAUrDvo6HLeljzbobevIvCu+BBw\nE7UyCxL8V1aONlSgnUg0gZD/QvyrT8kkl6+t+ptCarzgyGSqjMwEAqeUzhMLZMSB\nHAqV5YsBM3ueyEbyg5O/NhL/8L/dl4lWG9CH3TeTGKKnw0YnHudsUMRC4ts3FnLW\n/XwwkiJ5Mka/1fZO0nV9QF41M0babwMXpq1M5Op9uNLfSvFb923eSPF2i0KgGZtX\nfC4Xhj/6n+8/oz2CFB0Jg30til36CeV6kicIw6o=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 14B8E7137FA99526C4717DFA881B24936BBC6BD0 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAApz5IEHR8QWoIQAAAAACnDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzNVoXDTI1MDMyMTIwMzAzNVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMTRCOEU3MTM3RkE5OTUyNkM0NzE3REZBODgxQjI0OTM2QkJD\nNkJEMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL2xUBzPgEydjI9t\n87XlS/k3xunV9GHFfYpX6N02oIgWhvZYHUfiBd8eVNoT16tq1H3Hqqezvt2/GzD3\nkS5cRDOniififGx9sy9Q2wPOrj3BhIkBrkxQUKnPYdvt8kWZPpR3iU4iDCCZxb8F\n31XzszkA76ouGU8F0rmxB01SU6TMahbn/r6UnImVRPdnhwXdVaNPC6n4tpc1c31A\n5GJ3BegHghfXc3oDHbhmbqPxvnpK2VYisGLPlk/DCzy53hsSiJ2HksulP2xYd8PX\ntA+olRjASU/eW2PDXCcCf+Z67auw+YoRDbV6oMDja+OSozTIpEatcjLapUe6KlWo\n2/ZJwUtBIvAEQUw/cAGJajo7R2CIBOkoYvpGboW+TpWV7x89IIYgyvX5nMXRHOgd\nAHQcvZolAJyocKbE/6A3ZP7yoLyzDbw4tHj6chYjiIiffCK6/Jl0g86cMaelpXcW\nQpBzjqqfQvN2v09XQ6U7a6P/l7AUVof6Tq7+h6zo7FJ3wFOygcsJ7ARF9Foam1uU\nmEAcfQj8kCiDHapn58pWqIFcqaLRxHzO34Srfg7zM4vJgeg8YFVhkPtBgL69fCP+\nw/S+P4QjKxODMovSnoKZqp8NvQnJKPur5LI4vhTl2kKP2/D5/p+rSHvUEokrc1/J\nVH7XQRflZ/zBgB76qnUwvk4d1YHVAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRFtQb7666hM0Pn\nX7l9JJOclRoUnzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAa90m2MMiV9eeRLj17+T5LJKhIXB8mt0Yq5fYzmF8o7\n7+OG8kEhCSyesRRMl6g+Gc7mVfV5PKohqAN1Cld5bQuErrnV58BxSqgjCy+l2OHi\n7h201PZ7moS4m+B/Y/9yBhgYzAcCGC/5eqrOJXEZfyom3LjRYuUsRVcRW+QK3YXN\noFi+2hKG2xbsZh/WpzKu5Cowv+5LpM95asyiuWsf5iKQdwb89TntRTVo4+ud4k5L\nFz1EaCsJAWI4PUrBADTAP22ya7kON6Uob6shzVl6DvDJcT35ymsyI0XJgvMEVJsc\nevDlTKkQcuNy0FaBGbKc5mxOYqfthgkw83S5+a3mdPVO0hHI/uvwp68H+5VSbDiQ\nFWaGpu+NKMukfs+es7vqClQ0Xsqc+t3IzUfkoQYoBEaMDeJ+fr8PSjKO6kKRcz0Z\nL6b/UBOkGYKVGCrIUUbokRkMjjit+FoxG+IMKQ7AUhG/eq4y+gwcLRUWqOT4H3Hb\nuP62i4UWzR5FdlvWKMTuBsuwd6rQLtds/mTOA00w5YwI2633gRYpUD5vhG6DAPM3\nMymbiACsFfU9m5hB2fjC/+F6iRmdNBUdwZCRsSZ2YDeMWPC9ufUlZrKDdbwKiEsc\nSK5+LStM84pyCvjoh7APDnggK8J5QJztxcvhj7a4x2+Bm2eIJP2fFfT2b2eYBLcA\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAUkdcMx5CRz9nQAAAAABSTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDYyMTIwMDQ0NFoXDTI5MTIzMTIwMDQ0NFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5\nRjA3OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9B4PyruNjom2Cf\nsI/xotUPebWjg/bB9M8aCoJyvrmGNgRM7lxlM/xar3t4RlWLBuyDbCqJU/jCoWKI\nEgId2RefcPnIB3aGnYj78m76C+YZuMhs7DrELW6NXrVG0lnCSBf+56QDvy7RbikS\nvDCQBHZzaDyNzc53Th0YSLXq2xmoTqzzUeaHT30KAJBJr9wwKMe6yOcIZe+46U/g\nesMiooU9dip71v53COtW+H84y3a4CiQ4nByabFVJ/5FOFAyT8UMNtKPE5376XM/w\nhEL6wb0f0bMZnDZvGLhCcgMNOasXKfhgZOtK5gx4suVw8hB7FPvuVo+OwTFMbwzc\nI8PhZ70CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFHM1g7MX5m07zP4nhojjuwGbzgg7MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAXdLs\nZPtU348+oGNdMNvenKW4sQbc0QznFWXhCVRc7VdTsYficiEJHGm/1OZL4c5jevf5\nBBGKh9fNIyPCCTNoXC8bpumjd150IZsq2R1Zei17WFPD6O6fx0s1pWxNf3YEP296\nOUL+ILWO48USUmlNjmIIST2iG4gZj/Wet1DlMr0jWg82v69v0NDybJRjrvCMlSeL\nPtf6v2BvnfAVDIy6MJOumKeQnpp7Y1Lg3wI5V5TKpaEdqT+ZZXOdxLkZz3bNJGAF\ncudI0AXvCme4fGDg607JBUdSTBC97M+aOLTwQKLvNViDORy+quEDHkrLqjf3GJv5\nsxIZ0Di5O69cY82Y2hIFuTdAVtkX4jl4jBgHUA5RRy3PD16rAXS8rGsRTpyd4n3o\nR5rdN1BLCPo3+SwOzswXeJ45Ge+J2EW91ZlbAzXwd9QYU4w2WPV9eIHEltFwAAx3\nPETPXb7T8I3QDKDAQp8bpm2Pz3QBhEFg5s+R109wmdrHWHlUichts953XJC/vhnv\n9ZKv+LocxkZhUFjEqU7S3xeCwls5V06ZpImQ+8DiLrk20+eJVpAja/jaCDrO7tj1\nXoB2EDM1LQrUVxNYhaqmzpcjk9CmxNvxji0vsmnW0b7nwbwkU63NiPHjBvBiVl8i\nw0r1b4ohn1A4Qv/L8o5DOb6Zz4O7GfmwWjWXvds=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 2CFCF43B16C8BFC78249CC971EE57324D639F079 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAApkPY/7dC5JzLwAAAAACmTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzM1oXDTI1MDMyMTIwMzAzM1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMkNGQ0Y0M0IxNkM4QkZDNzgyNDlDQzk3MUVFNTczMjRENjM5\nRjA3OTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMSL4UnRzbH4HRYe\nOkzX+rAHPH7pKGhe+q9G6Ny8s7AB8a5LwePIKTwDQa4sgxOGogjd8G15ZrmNdryL\nKc3VTx2nl4unwmFavxhSbD/UkBZzsVqe2p5STUemvNVjONSPvk/jvthgVEESc21t\n7QXp+dAVkThwBiT8IVGG7r4+3uhWbm8qkmQx901zOFjL2eRehlhhuKbhrUnaI4Eb\nO3e300CqYzqygxWpTHYyLFsLWGZA4XrJKGFMnWPDCYVmuw6nAG2f/fkHCT55ilQl\nc4iHbRBJgG5PPBwju1wXNTcZZs1mcSVjOpvqhkcHI1lYsu+RqxSfa+0cro/j6v6R\nv1t9eAmqnzGOMIicpIrSl8DSt8RAi3E2rrWgfRl2BpMeMLs2BTkURZ87tKn0V2Xk\n1+y+dmt8uoWwpsAj4y4d6bKbyuBESm1aZIjVtYVF1FgSoQdkOyUQWZqmfOxrUmB4\nD/WHg2xwzZQiPeg6u5IlVNKPAwsRHcNlrRWVohI/MPA1dCHEWhSte4O1Ag2cQfQv\nKaQk4QYxncgfiICieHx/PeFpuTypcy7Tt53Z8E/6kKJj0mRNzh1s3US9eK4RMD6o\n7zAIAJwqVkE18SHADP/CkWqNomgb19HoDnGYeRzbx9wlZqf4bvtafqXcGlehay2W\n6wZx4yvk+ln+GhJuYfcxoZ+kca0PAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRj2JxPqFdccipe\nTGdWNO9f+7SNVjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACunhdG2fbbCWuTVo4O1918azjF3Gt6ty47LXr3h7eHV\n0QKdYmTtMTs88fW80HVnjin41+CpQQg9HqPlB3KhUgkiY4emU4TMX+jkFHOpCaOY\nFgM9Tir33NDb9ytL9iIx/0ZEO43VQXKgiifeWoVUWxXdhcH9J4hlfatkHna+PzJx\n9hrn2Gtlyxu3i6sN4k1tKAadaCDXyypzyRLonxyP3SubM90N7ml7OE7YIzkW0Xiq\n93qylI+Q8N/Cw3oMACOapDK4OzPL8Yw7uOIRKioAAYUYJp81/w1Ct8L+IgeXHzrQ\noJX9CkUcDteKEzJ2sjHXa11jldn+OtRpOF/98PbOtCbJgBqOLxsZebpiTYdP+f7M\nWQHTtLRSgoSrJgc1Up+0//BFkv9n6QNNAkOQVuhbn5+XEBmsamDJG8PyXVvESbXZ\n+e5GGJvmCvb+QhtMCSRwwzuwogG4mq/RXHlUhZp3U0fghTKkPybbcyF91eZqf7BS\n1oixHSPpyKQcFjTlQGJEWKn7Jff1xqhj3F0OxjFcs1GoekwrlbhKQUnwekGY5BKw\nDYeMYKbdVw+iYddfbT1mPNDkRIHJUHXMs9/Sj64ZGIui1twFaobfjneciFOQ+v5u\nfNuIVdlM88VXH7vHOuiMm1kybhTJtQdMbp+JLUZ1m8GxMOYud4ep94poFHQHBmZC\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 2D3CECFE6594829719D6556B600541E749FC635B\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAATqZKIykYjrfYQAAAAABOjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxNFoXDTI5MTIzMTE4MjQxNFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMkQzQ0VDRkU2NTk0ODI5NzE5RDY1NTZCNjAwNTQxRTc0OUZD\nNjM1QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKvCNcpLvRxWrCAN\n7QfNWVpKBFz1gT2q2fkEb3LslIoYhdoy1dPMeouLPIizGOz4vJVrWaBe9CggWIZU\nGFdX6parAAvaISz6ACV4yec1Q47fD+Yd2L64qk9w4uNOUxMPkqIOHJHsLoUHrWqQ\nnO37bIIflZyx2WZEjyGRv78qOVC0qzB6eYaiBoG134pF8wKU+Kn5GYqFdglwJzdY\nVH8YEE37bUzaXZGml0dBUNgiqXlSxuetOLH2Nmh4a088hb7cg9hCe/Xm3GumTfXr\nvbmy6lCfunjCmhEmM6QhzqK8D4L8ALRw9h4iNmofYwfgse8l0Avv47gMc+1YRM6P\nHlRnLf0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFGfGoAZCrzBdTlj8Q8Y4JK641+MOMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAayOg\nK+g7KH5WCH95jy4JOsJAgszhazEe6dZXfr9nR2A84neo04DtL4eXMAW632RnSHJ+\nPTJH4IeGdn+Jhg7RosOXTpsQRaNnfwK2XPpoxyVhK3nQONtZ4E0FXpQl5JIWEcys\nU7KY6h9PGYHcXVu4z5TUAiqY/gmKLPJisfOmuyDEuJCwn7457mTLjgb5SAoF3/sV\nAIyS8KOGnTyOdTD5/Y67dH5HPozlK/f7S2abOkmryQa6hiLBndsV/ZK6EXQ+LaxU\n7cpOFEN9X8pqdPnhNsXf7NkSZZ1YtuuQ4jGGop02dFTLO1e4+0ivnRS3JtDeEeiy\nW9x43+O0149fm7a9ZW3EEviJzKgUNoMQskvyhw0+5lICiR8vC0WFtpXxA6aKthPQ\n6fZ1snHmkU09YZEkns1gjXEAEJmjJ210BreHB2bkYmhkIzfe33DpQ9TKgg/0ZlBe\nwIei1sok/4KFdXwsH2lda+6rzKgtuv2UpjdOH6EWABzwffef/g1YjEXDzHknAgon\n5jQgdsH/99vme8XmjZPZ6+oGLS01SYNfvzNdi7HSoyE4tZb/0NsG/HCDeYJq+VyE\nsAvUuueHLDQ83nsG05DVLOpbBbY8+1fDHuHlw8J+PhBo5RfcbMD0r+PA5knU6+jF\nJXGra+74gdKIxQoNTmFsoqemZi9GIHfqYTzGeWI=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXU7IfkgoLDXWAAAAAABdTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQ0MloXDTI5MTIzMTE5MTQ0MlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG\nMEU2NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN3j+8qfmxVx+cmt\n6ZWaud58xyv/bq7ON4YfbJSkK2HR9M4PKbD2NahdSaPbOKPPRmwNLaiBMkfwASWS\nQDMwZUmFUcdb0p6avcCSAuAZgPAJoVJDndDmlwgXQosCAQPZbkQ5mfSBWmsqjWK+\njvlJhWmZGSNtIrBX5x3Ujz3RQeG0HZY0OBiyqv/dGTRBChPbv6N9FcqlvYzzO21P\nNV+5onI7Mqb7T+mWTL9cEk7IUTUaQZAg1Isvh8IsBoJHI9PAS7THbT7ExgZWkttp\nOweovXW7yeGMjvSydrOzKlYUGz67pOiZfdbqCwzeYz/Ei8XhC1y0nXMNgNWZC1Rr\nZpDySzECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDjreI1C0M76EO56Q4vhlJ9ZOW8PMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAL2tt\nwQhvfdBBF1RYuvJL355E1phegTMQZx6JNNhENFMpvtfGKxD3ejmmW07o2L+bubuS\nUna/VG5klD73/5XZz3IkNbQ7JS3vbFViCxy78KlKaMrZB2KddT/VkYX5SAckyfDK\ngWUOuLeDAD2GbsEPskcDW/crNJgcBVU0gGbRICnVISBUsrDG9wL5buR2kL46rF/g\nbBRpHzf3uALRa7go14u99jSK3ovMFaV4OM7CFADLBi0IOb6pctC6w7QfieF7zExy\nX9KjdEP//iOgoQPOXFb35NL1XxAkBqGJbQtCJWxfMp3FGUEBO0bZYW5l/Z2H4vcg\nUhmos/EnSBWlWhOfEOvb1+PI6PWGEj/oww8DM+58QnZ/CR/l+bSMZSzn9RZSZBJD\nzR6alfiPzFNEE+B2b4TwHcrOFPa9ahHVvk9dsQysnvvLWyW+ArUkWYsiHD0LE5vz\n9vj2vtpu0viQuypi8JUYRjZWQjSaObbxXDYae1xW8jWcPg8zwnhG7NzjnzvQoMD2\nM9ZEIGlm8LyRYAxYlY8lHI9oakIeqUiDBLKEmUFqWsiigYNb/0Mmr2JiyHW83G16\n8JyqdPxYLvbhzoDUrpgNc2hthbnLf7eq7yOVTMWrAeNFHkU4L/UN/LniJMKSQFHs\nT8mqmXgZVRcDGw63hGH9xGcuHqtqX6Nr5gfx9Yg=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 30B86F094DA6ABD52371043F2BF7668C783F0E66 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAp2aPGNpl1vhqQAAAAACnTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzNloXDTI1MDMyMTIwMzAzNlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMzBCODZGMDk0REE2QUJENTIzNzEwNDNGMkJGNzY2OEM3ODNG\nMEU2NjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKe88Ll3ryxfNyPU\n7YdSlYniLxcaYHiiMb3JUDsPW1W1durCXe7A7doV6QuDxYelSMU3BMYgNRjw5xpq\naWhl2z4JS3TCsYuKz/l7Uts7SVwI3bKYD/Oy+qYbfnMFKtc7EIgpCISIAR//eCYJ\ng1D8V+IXkYrULcWkWtMC0ZQ31+/PVyf9njOMO7zj4+yPw2NHwqUoWqe1riKezMiI\nJf0J2G3DfWvzb0XMGXeeQpfa2bN8ZpxF+W0GrecSa0Bh7fHCs6K1hBcIRqU+aifF\naxqcngvCI6t8l7x4GYH8cvOiGLSJ4ybWniPpB/+Cx/e690wKgrcwAPWcB0St09Oa\nyWxo7MoVtyFI0bYiOZqTrulf699Le3sxpmr0dLw0JBbWicq279luYUqoc8+E+llu\na8Wc+wiYP3RU1UyTPFkb9yEyIzop7wKM2nN/zKIWFRQ8VBJvMmwwZUUaMLdhA9nf\nf3fdj++9mNj7rr6NCaxGmXiGBfKj6LM8aVO5vAUCn1eEwILK+JwoVjRGq96DQT23\nIAlLR/qjO5c2IFvjrllVsYAc4IrKc6PdPo9ISDr4zenJ+cFKRp3uLRbQGLw7c9XX\n35ONb3gop09HgeoTqm4aNe2BU4RbHnq8iGf6wGH7aKC0NkO1doQRVFslSpK6itRv\nrmrHCKqLYsApsopXaCiERW10yuN1AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT+AjivtaIeFihw\n+53bwRetmydBBzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEXriEUJBuS8qZyO97h8NFdlrZORLztraA8uW4ybDSeY\nVdBp6aiZvVdSLekTITdvHXpNMoASgWEYpoaDvP7JOKFG7dSbn/A1YBKbmtm/D+2i\ntB0AKiDG4ppD5DZ/M4U4fGiv8lf6ayUrKuPbA2mzq0CPmKhRlbJ1RmeaCYV9Ct/2\naI+kVlOxBAmj5cKLdCSsziAQJ/X5Xg6KSYpoBS6x0ig/D8ArdnPcw3cEcRbOtCmr\nHvRLdVlSiESaNa8x4yJocdN4tS5rFHW5FxsPJ4EOrhwkHRf4UdX8LKafgGaRUzr7\nwMLL3VQyBbTTTcmhyoo/+HDLOvYgPyhsEALRLYznIcyfCVbsmpS3q/Tc0uGxIwN6\nL4ljXWLrdSLOw01J5IRLH1fdFL3T4e8qDz+s7e7Osj7jHjqnpJbIagMzAVFbip9G\nFUvdfXJtRENqU0pT+1qbq3EZDb9dwA0cakvyetkkyH87ksXM+fK6DtAmDk6jEqgO\nz7Jlc1/bmnfr5RTMaSQlBTFEG+3if6eSRxbNbl+RPuSc9pojHLUhTlCGUlNbROZN\nnftLx0HgTAlHXggO4cV5CT2pAMdlS/zfZI8w4N3jurNCo4ah7qKNnfp1l7mMQkBd\nHmEFJPglVMhWKzPjekmNROXJ77dGq0HJ5w5h0Rd5ztv0++tDrWpWzB61bMxyD3yy\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAARJ5yKqbF5lP1wAAAAABEjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0MloXDTI5MTIzMTE4MjU0MlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0\nQ0M3QjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANuoFUYBb36jAGcb\n/Wp2ZVSwCoeTharV+Iuy+jUcj5gRBIa9lzN2aX8EPvPIUFIoBpxFUg/no5VlWQMP\nFXqOE/I79uVBuwaY1ClkJjlxRvuyxxw4UQHo8x/aQlqn00lmXos6e5TcL2qhOHze\nhrM5dVytht7URop4UPVj8VbNni2siecXqGYAfhFqppqZxJAFyIKLSBe0oSYjsJ3k\npWCVXfHeJEbCxeD2We4X4n2ZKqk7yQ1+Ev+4dbKb9X88R2UCY34LdXxaBjZGfroi\nbECY40NhyLwvyosWWwtYv2j8toJ0xaKK7Z65ChCEH6EUZXtk3yCQ64Vjr42YUJpN\nICNK6EMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFPPyLlyai+3HDEGLEN1Gi8arzLHnMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVyUS\n6LYV2e/N+0QIzW3qHGAgYQ0Sstz/9iSR63GFFc8e9WscN/2bm+cGsRcqlmlOlhHY\nk72CPXhtstCqHYKLCBdRTDZQLtjbHFPnmXSXhN/dy5fqQXZHzsr0H2Vn5GIpgVFd\nUO/LbLy2ompJ2iabNHM3NP4wfNV+6kX5XLA+7zbF49I/IUTb6Lk5/D4/Avn8Al/Y\nm9sfPh/qmrMic8QPPQpdruUAfRg1VRyCZKysfJGKoNj42cYH26uTZmUisELFMA4K\nXZIrBH1dab2KNliAkCESSrDDkn7eJ9uzjMLUr8wnNH8zD2I9hkrGVf7xo1/UDEyK\nkrM1PWO4BBgTgyLE3mSSon0xXY3JPEl/eLQ9Xm66UQb9SFmwwsn4SW3e//NV8Wpl\n5Jn3mQYgy8RmBdI/xKhs2QpNvsRsE7WCNtA/jf8wY94DWgXY37CkY5K7kOPttLW4\nCPZ5AfnASqE0eql9d8fLCQyXK+l+1qzvB3PTIHXYxqVSXANcCyfWdJlESayGMZv4\nH0r7lDwAv2yjBYAy2xwWJwtgHWu15q23bZ855upHpzdkvUSm5Q/Pg+QWUFlpQJgV\nuBs9FMAOOYmDWWGXheH3EH7iC6KXGDCwxvLWVUEaF9GJKWdzDETwp1bs9dFAeZGb\nsmeZ2ByZv2GA4DqqBSSyj6uIEDODqzXcE0amFLk=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 31734D6F8AEA913A0A31180B785CC0630894CC7B 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAp5dvaxa1oYgYQAAAAACnjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzN1oXDTI1MDMyMTIwMzAzN1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMzE3MzRENkY4QUVBOTEzQTBBMzExODBCNzg1Q0MwNjMwODk0\nQ0M3QjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ9+ci5WhVpgl9hZ\nbpe0JLnr60rZJnmoceG/8X1Xdjf5dJ17ih2QB8QizsHF58+PY0bntHGDWj5OcnFO\n1ZFLAJmS89ylt2/8YxQHXFtaK4EIYhGBAXKhxtNSILYJdxtamXX4ErQiX1wiVY0v\nDqeEDn7DW7lGoqQjG+K0LSRWyfLe6PeLdaZUbSmf9/TwEfcc9mO09KiaQHUBx6jh\nfMgFgVoy0LmN67LDXHdoDGVdLoA6zgxf2nkPV20OiimKcgGzDmewja9UdzwM3yIa\nJyjJi1tUrYNCLoMSiJ8D9hYD1yW9Us3WHQTuyeTYBx6W9iidtcYkw7j4HmGT8ih2\ncopIYntIIwHFMoH9M+K90At6HIekHsNy56hmJevpmFiRmPcJTb0bpjIXAB4+F/Ay\nTzQtmCSTdVByI+u3JI65cKfEWYKUNSlNBF0xiRTUngFzXZD9CsaCoUsOkwLPHn/1\nKTSFMoHq1+kafEzz6mS+TQBo8GGt3J3ulgURH+z3TXla7hNOelBU0cTqFrmxyTmh\nRYoVqo5msDJbSq8t4hI26jluuHNr+3OLEYeVcXvpXe+Yq4lu8Shp8j8DBIqrBtDu\nbB1i/02mQUpwK8YvFybBy1wndlcnusaOpm/TeYOYFAivrJBsJwYhfthFuo2yOPW2\niE8hp+fLOX2yarDQykGljrRSuoBbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTQnL6JQJFsuLOS\nU4tQuF79MeVf3TAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAINak/tA3idy4lNGvWyf5R7loOtiGtHPn4lj6+pY75PS\noZEZEuQbqLaJeEUzcdteWFrCOdW4umhrEokX0WWh0VYMsE1OD1tfF9ec9nHgfOYs\nth8Mxhs1OgNKlxhfAkJtI3lIYrGuTyJJw/ffbiq1UWjNDzWm/X6SdAUB4N0WTOpT\n2cn0Xy2lhcJIiZrSmOJd2cloC0eGRqcmVXJOVW4yTN+Wj7GWkn5O2uS0s070dTUC\n3/h3AN0Jyc3jQLGmaO17Cv8XAaE5yEqMqzqqvQCcAlR8+68rl2IfzKG0wM42R4QL\nY1D0pqWRRtZW8L1dXJ8HQ96jnMGDC+P1za+5AWgtdIDxPigM5BxRkZsblMCNKn8e\nG7u3i8ANEgb9nRceg1KJ9sHO5OZiw8I8F7fKufh/DMxbbdai0WS+Z1rAfgtcGc0d\nbJVvrfL9UGwKS2WN81Ui2A905wPipCM/O9icbKus41tqTvzbsHzCmIF1SqxHDUAB\nfVkzMN3PxKuWqFvSi9Gz3k3IOqwS8n3FHDFkZjBX0Y/6QfIizo4tFJCuPDDTgjQb\nbGQrJ48XXeI+64VMtyKlrQIGjsj1ywL1HpiNNIzzlboSIfhZYEwsIcWkErCXfJ7l\nf8LlDC5RNQFNVWnwxYJq3N3b26frEL6Bze+P/1Qem3ZXGxhc87HQyXGSBu2javux\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 4994C129F1A548D488586F22A2DF8603739B3BD3 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAryICO5kiwyrKgAAAAACvDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0OFoXDTI1MDUwODE3NTc0OFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC\nM0JEMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvQrN1BMJUqxO+N\noW5218T2QCDY4MKoz/68sR0SjHOpO9XyjHFcdCYr5xTwN75ulsAyS8PRGxlZy3bV\nIzDCQuwQHpY6Oqkh8zNhX4noOq/5RUJbcOqT7qAKjA2FA3PN8g2JUHKqDORAebg8\nxUCFKE3jIqic9Bq0po/OXy/nu/10WUWMy57OYroAupFrGcattDf2nOcHk5AZyVy2\nms/s8ymm3bIVGGYh2y/gjU3w7vNH6hpiIAbtqr4WqHM2M4q6lE7k4irG5SXhqdPa\n0zq32oaL7GuK0q8GKpRbCMag9xTMlKS4O3T7hTncT8hwzq+lnJWvBdFs4uxhg+tb\n2sxFlHozfAYm572ILCEdhHBkbLUr1V7O0vbckagwrOyk7O506iflgiqLolMo+xwH\nZw0/kOGTaWh73sFATJ9hseRAx4fLh43rFghzXx0LZlNz3wH4y1N8/yH+PDWAj8nJ\nsdXEM1xCqOuTo0/uLwpy27y7qxSqDil301AOmxZw/hQXXh+uFtBjzf54V5oj9TM7\nX+QO48Zv9LuNhLtMpzTofIYWGgaf4jB33U/P/9yTWguz3x6xqhguI7Px0iUFzBk6\nT5n85H2FSKAcwNHGptjnQsYVz039eRphiStrG2vhbTRA2YVl4O6XS1j0qcpVydqq\nlGBUphk7gzdpni/fngsbZfJIPuW7AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSoWVle1ESHqqbU\nzUHty1eHH8u/9DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAsc4/+mWpQfa5mbrRkAoXr23+Vm1uPl1ewboZBrc8Gw\nxgn26cPn/mWf2Tk9RsIgkl6yccJYr7Z0rv586ocspTaBJCnA5V4+/Pn7qrAM+0Ay\n8ttiIRe4R4Nug7aCPSbWKb707Y9Pz2Bg0BtVVDd8yTXoD1uyxg72FDStrdYqQy+t\nwm0oM7ylWwGbWShTOvXBlKarBst5vMvkC/ZyF3AzXRQeUJb68i4GoUbdGJ6kh+gY\n3WzZpJ4NommiIo7hZNl9ar4vs1YUkJAENXTV7kzmOBOA6T8+bburhVyRY7wVCvFP\nVUnbpieHPRbC+HuCAERE1RnfTW7IfTrTb7cP0T6O5u1bceFh++Z3SiPFx4bTUKZN\nLhhPNBI5TWtVFLa/ly+zjJk4smUBiObGGdAz2NSy/yY97GL0DG6wxJATvuGBWYE1\njosjyk/wR9YxaMTp9CPQW5RsGxUNIQTscJAVoSOSRVGy+Qwrmk9eQcSltxeC+MO1\nN491MxWbBIz//ON7AYnVSbdPXLmo1zcGArpzLPaU6auLqlFhezTx6t9TnMcsrZOb\nPepQN25NkGb3CrwQwfl89ViTSsHZncbX9MkKL/ygqnwGOvh5Aq5kLoRixBCIFUfc\nG3kMr00NRG28VuKiJXpmIhY9JZ9jIJD/xtiDT0224vsIcKJ21AEV2UYhuyixxyuZ\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAATuLBKPhDK7HGAAAAAABOzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxNVoXDTI5MTIzMTE4MjQxNVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4\nRDczMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOJI/+y7zIr31w+v\nhzVZQawZpORTC9FFqYlYq6c4ek/lbbfRSQVp45KEUmi8i2ucbTYT3XdC81CkwHHP\nocLJN8MQuSmZDg+Ux7aeCZTjz9SQutubiPgKr2By41689nmJB/QDrA1H6u6zB8Ys\n4dwnk9l5+A/qxAiEb5efyS03eZRNgSNe8TPvg52r0fcRtqN9uXCM3C/t/UpB+/AB\nof1/rkYuBbLMyIG5KrhbCUqkedpMcCCsqKooCKu54vVzLGbeB5CTJVX5VTPh+/kj\nsuSfKOr6U5BTKf763SOTbMeCI7alSpTI6kIHXE7FLfRaVMURhOQwKozDqlYm9JDT\nKYJnfnECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFMHAGxhr4FHQA1h8OdWtXBpY35qlMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAa7zi\naaPaCl27GlVoC0yehSOhHft7cQVBi7PSSa84t+bXYLVeU7gG/v8dGzzRqRA+h+MR\n+UebElTQTb3/EMXtjkSs+5UNl7dlyfgLL8+YGEd49pjP15UUbRYL/Z++Gw9J4vzm\ncEGfvi7etZP5amKdA30qCY8KJ5vX8s1I+rLhu8B985nBVdAKgkxoB0ElXl2CGFkA\nt8VqQrFhB7eC45siDwjGJtX0lKE0bFBkcVQx63niIlTbNePgWvA7i8L+3Ws5eh3L\ny4lkq89w0yVerrXZ6/q3LIigT4jvwYaHElZjh94Lg5GzAKhKNzE4FOPKzS69Rtlz\n4AXuoDvyvN0dZJxPXYfTcMDLRdsAwMcOAxQSl5aAovBEQYJPiCBkgLwF2Ln+ZlKz\n4HQ4MMTXVPlumciZnNnMiMs8RTjSjvzB6x1rR/S1HCpSrDZf+0AkOkVggbNDW80L\nVpgaaR1FjzRCZA4BafNp8tmydvWcC75hfUbZENs0k021nR5BtgZ8etuuqY83NMrb\nrmsdjcWbU7ybo4k8aG/HEnHpyZY/ylgQNVOZH69Ti/t66hhX2SyDagRoW792wQGD\nhWrpjQAwN0wc/6BUsFGBeJZrGy+nM22/MEfOWTVqsqQDdJ4+irkS7Zrgl7MUszba\nKUrXXFzZo9wzHK+yMaAO1u+bIYMdl/IYe/yAmo4=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 51C73CBCDFC990AA677417CD5F78BA37D4A8D731 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAdYFqCkLiWszXQAAAAAB1jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDEzMDE5MDkyN1oXDTI1MDEzMDE5MDkyN1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNTFDNzNDQkNERkM5OTBBQTY3NzQxN0NENUY3OEJBMzdENEE4\nRDczMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ99YIL31Lc9qe2x\nOMzToofqHMQSq5lHD/LpyOwJ7IhUsBCB6l8XxWsYCDCvXNRCjbVvH6eUEwAxpvZe\nxSQKvE4OG/c5BuAbN5E2Il5r6Caro3bW6ljSVfq2yGmtBvuIOTKbh7hLZGGPmuqR\nggnfcBA/EB+1XMd1v5jz2QlY+cv33X7lrWhpCRWaDLEWSl2FEN43XQuKxDj5u/Xu\n+1WbsHKwxXjc18nuUaCdB1pXdcJ4QjDIkJKF9Mo0GZf8KxSRrEJJeymQpjQUZ6VP\nIbRjKfwKbKz0SOs/yA8Yoy24cVGKU8bsw6mDB8A0wkXQ2UdOcGXjDDhibfmbQcVR\nzWu0fP2pZjeX/1NILBafRS6VqB33pJIkgZ2LfSbtwl6nFUgLPgoRXA1znmKBJyzu\nXS6CUck72BDOqeJ0LW35oU8XBQPnhu3WeoRPwS6YZpzOXSb6hateu98hYbIsF0H5\n7rZWk7Tu7EP72fZnNHqjvFoxh+hJq3Is3wpXj8ENaOZebE606qA1uTNbqy+ufeYx\nGHUX2yoBMdh+yodZ42tIRMxfZpaeLuL8i5MDlG+i+tTZFB4XdfDZMp+H64WoFI6H\nhHvSc0n89wYUK9SUJyhWbKdGXWEFlenHCvp9zsXBLWAPN/8LLZNqOPZCo3suhK/h\nlXFMjsLu76CKzRu4f6Jc+IBBbGxhAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRi4ilYb6cWyhCL\nt6i99BVTf0kG5jAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADBUegG+FDKCMcv9ZOHV+lXOGY4Hi+Go+Xb/3RinYNLi\nBNiOMw+RDyTRpbxahzK6/GHxYGp9XiJ44Aw4m27ikLxZk1ioCMcPpfclw6EeUya6\nWY1dqSPUkrQVGLHOPk0mEirvyNHKs9LpC/I2KBVTMsT6j/5+GVhEJdHnOS5r508p\n0dT8M4LJfINSVwmYT8L5FsNeVGQL1ZQ5z0gSjY8nnVFgI9ueT4DKPbtVGrDNQr0S\nXqDGWZr/hJaYsxiOvDKIGYnuyHq1JOYYhwmElDXoo5eZWBeNEmJPBZZTU/cTA3cf\npupXZ2rT+5tSAtDleNi1J7emtghmVHFCAt5Y094JSLvsk8rzVQr6tJIWHDhyIOFM\nIy/WACeJD+LtUPyWAxNYRRZ7kcYAkTYc7BNDJ4yTdgxi7YKzMzqOXnbhohCkUriG\nFIrwmT69KzUrawrkxyIApZYyvjjoOuFIGi3JaLzxvgYvljiqLwpml/qneKaFZACs\nlJib4shszSJmPVdbfefzi0oqWdRghICwF5/Q9xD6+RLywckuC8aJaUHRkgDs2Fjp\nAw8SBEVZu2bUvd+KsJElCAXD+CBbfyilZm96POEdiDVRb15mae5+/62MI8wiRHKC\n2hafMNmuNSxJEmg0bdWtdLv7JHY7FXp6mrQnRJVPDMZzddPgtEjVQduKQcbLDmah\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAHGDr4uci09rcwAAAAAAcTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0NloXDTI5MTIzMTIyMTg0NlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD\nNzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL8ULdiyxMhW9Pcy\n4pWXVg03nuKvx+RfAxjDp2ERoOB/SPy/6NeE2NlRImZ19wUc/kRh9XW2v905hxPr\n7s9hW3xffDPEHRKy2VAzSc4G7cWYOnFucGIwk3Dd4u5ALVQskNOuxQdj2u2DXMp7\n8H+rQZHaIFsSXOJIVrnYD48RmGU/tMBnC+RxNrhCz6cPUmhlaLraGmScZUxgbaU+\n7TXSPvxWi8UqdY293mNKeUgbvzcYY8KWGh5CUEFZE864nZkh4mOajERRcBk7pd2T\n4RewYO/EyEpiHx4Zwuce/ezgc26OzWmPzf0fQLVGXFtD71QcolF5LHZvPHus0QCw\n8vrkv7cCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFIP1IURw1OVv3HzPKlbaiNTdx/DKMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAMqMo\n+Fm303nvVKgnW81BKc8OlO6GsF8jAMbmvHSjF3/pSDSUYajIbB/+TDoMWcuA8IHr\npdPsMNvfvkyi5bV7V+eaYJxouF8AlXPmOj/Gh/O04FwjJPkUvO/4Z3QBa0QdIKqk\ns1U7wyrauBwQE17PFB46/IaC9pXken7e62UTFgyddZWWAn54s/dTVVXoUwHg0RSN\ndGBe9IobOPSBPORD0UjMgae+jVjQZVnak+vtmR7zsQV6EBbg9NRe18bfxwJwg8W9\n3HHtlNaoSP8Qp0ByEj0HCud79Z/mK6gEHelGF9VY5dE/QBPfssyFfKkn3P9ZsVIA\nzBNJW7mCtsp/FjMWLKxOtbqZXuU4rbPUkTdXtrWLNbHo8NZvzU3cheGuIjSF1Xll\nSDBWREUMphQo0WH9t6nI+E4eHp306ZB5qLm7Mqg7sgZeGjc+FluXCkhr8N+Rpxcq\neu9/eKbNJxpFfr3Woq/t/9IKdCOi1APKA8EGFcsZwJ2FvjR2f8qP16ZxoL7hTz16\n+RtmnUM7K6ybKjnDAEVDUcW2vFaXB0Si097ypMmSZDBshM4AKNHfoHcaJevQN/WD\nUNnIEvrTeAtFwB8aH6XA98fBVsbT9JpaQ5xlit+zfv9aMYLxmBQYBHSgf52TSkpA\naFDrVsQAMEkfn5s8m+qK92A+PIs3xl7WwxXiyuM=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 5E73C89AA3E902B272B9F0741F7D8730E3EC724A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAApq/YfQw/yu/KwAAAAACmjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzNFoXDTI1MDMyMTIwMzAzNFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNUU3M0M4OUFBM0U5MDJCMjcyQjlGMDc0MUY3RDg3MzBFM0VD\nNzI0QTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALaMT1pQzDdBrovA\nETialTs337U/0iWLapHSILLgsxi5BV/lo05FIm1tJ8AgwxFU9xcBWimf9dJrYbhv\nRKgMzG0jPC6AiUlv/NCBz8em+OMbRhCc3g/r/whuFKI7IgHa2oGEoDDZvXQQvd4o\nxg3jmbpHKKseYOJB9P0uAgm3jgtGoRkOcuf1Mtj3DP1RaR9rnbeL0HdzpGbrQG5g\nCWehT9VGfD/m8C67iS6J3Kh3UOT9/PpRyOPUrcRW8djaUB2ENhOStNXPj8jEMvHa\nB7RwtCYyt7b4YGeWCDrYGTB26/OCFTOz8P+RJQNKjNUF66CB3/4quV7Bmw3fQTen\nJ88OF7GifkGmaAbTiZFysen31OWOp4uRkWPY9mRASNpC0OPJ7rwbN7nNufndZ26r\n5w/ocjOx+KGoWUY2sUZsJezEo2jA/a4BFxoAtiOAL5r8tgyjOfhbyew0f9Cxjzwi\n9Xmxw1NdjrjBeRM/xoPjJZzQ3W9JJ8AsOE7tmaaPH2zvs0AM7PsOOMn7ElKsjfS3\nKzX2NdVtv4O7L6v8E3XX5u+/t1Ke04vgzhbNfWFqyvauQZsbetPataGt0KO3Gckq\ncEthTAHxtvWiX44ubYuAEdiGsTc1vdEB7ae8VsucjzH0GC/AG8OS7PrF0LSUymsz\ndl8ZgFD469QLfi/NVQxkCaxShBGzAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRy/fsN4QqWuuPh\nx1vT1K5t6IVy5jAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAAUceVLtzQiiXb/mPZ+tTlAHn4WUBqoMcE3tEUQCLURD\n2fGqKMvb/uBPI3NqCFYWdj9J5RDS6sU3ra6ZeEsc6WVzUQaQDa38pRyUgMTfEy6P\nHjAVVqlNf43sHjbDUEpjeorPmKFRAsNbyOjXIy4XBQB9YaZnJC9gnInq7Se2DwpK\nboRq+43M2EjLAhR46T5t4GYFwP1XE0wOnDYOKRmI8jDk1Tpd9AJeXxhW3R7wavZP\nKeuMjrPpkch/ultgm/NjYBSI5lPn0hT/+csqq7p5OhSVZ4zbxR4vzM3q44LnOOu+\nL+5zwKEPHpVNZhuc73wOA+dtANL1UtRTlxeQ4lYSbNUnbQXuh5wGaotn1RCaxZYV\nKP8wCt//McHgmwX2SIfFbhExCZAPv6cMRe3OSY8thcygEUMXt0iMVj4GNWaZp9/6\nxWPNhjc0fx7u9LHNqHbNdm6UX8VZs+S5PpmifeZd16u45xJQxresy7ksnzAVaG33\n3LPCgxeQAABadoJCTPZRAhn1Kr/+vABWSAjDeldbJt+n9SDBLXLHBobYDZp+JuU9\nfwVm3b6PreaVPMOe5Jeo1UNFonFjzB/zeJ7svJh/NuH8VdbHYMDfK/FlMVSL48+Y\nUFvE9fXg1G0AXLocsyEtJe13eMSavM590ZB+d84m8q22OIdEDxMjaqWnCUnCzJ+0\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXOgvBwDha3DXQAAAAABczANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQ0MVoXDTI5MTIzMTE5MTQ0MVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx\nN0NCNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK9+TRTHOLz8ng28\nfzN/jnv3/NOvIS/S1TyVWSPkEezK1NuDdVXaOeBYn264zM+sTtghdQpLtzvaoGaS\nuGanL09BrU3fY9hT/3ZLnCK+SIq3qAGSIxAFNfo6FEftS8Zsq/To3IqKIQtx81xe\nkXl7OQR2PZiIH7s7xTI4EUhb7qnmTSEPcQ91LsVLNA42ppGMgworaxShIf+Q2G6L\nN71+NRyAK0XhV+MoWe2/qxMnm7rpEZyrbQMdOGbHgTAYfwiJtBUPSAX3DVJb3dox\ndct/ZwurPJzg5jDwpnHEqQfPI3KcVvD1U/D3vmOXeysdFZSQdwY7iETCeOkiMcc2\nYkvdC8sCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFJefuh4GRwIf0jLJsPlRuEGGJyVaMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAi7e6\nmhSj8Ae51nxL01PTrhgdBdFN52WJJBxEVxFSOEDRIczFyNfKx/HTQ+JIVhboTTbP\nZnOgHQ8NhCqDQTVqoi3wHMxOItVX+eC435RP/5WjuHoOe5bBqxEk1QjwKwCcysER\n0BcNL7wIzrAPL8O7XDNb+XBBUGlz4sinJ/rgfhi+gdM+9NzlaBjBb0ssPtyquOH2\nTvxUtIyHr/dAB9/wLgeQqme3k3yflR3445q9fPmcoNGftlhJxAIs34jUw7LZXY0w\nIBj7iuYR5iKVVEdD5+MiHlSETW0RhNG5wORy08OWjGT9R4sAXu0i+d2O+/I0Dg1w\nfvuN/7uZ9cHaOe4kbTxGKBinWQhElSVe8Bdx7TE+7fVE43e4IZsSTwsoL5LutBs2\npvTamb3neOcSUGTy3133dRsfPWiHyUEpXfCgBa1CR88eNOHHD3RHmxjjvulgLyOf\nY85oSnzv9kv3Pdke6uM7LUx5nzbgdlg+yNgFZeDcUKYA2XG82r9nmCLFyrqBEXXr\n7iPv/1/HewXjBrigqseIwXLgI97Bq62rh2jVExRvTFrrs/mJLsHuoR8qtdcR44al\nR0LeG376XZoZNNR5gWt/Wf9M+YOcr3gRc/GoHvylspY7XcLUGEYyodKOwarC48mB\n8UtPAu+cW9wBpCKFT05Cs8k5sQgX/gmjuJDL0no=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 6CA9DF62A1AAE23E0FEB7C3F5EB8E61ECAC17CB7 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAApupEa63+F3QdwAAAAACmzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzNFoXDTI1MDMyMTIwMzAzNFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtNkNBOURGNjJBMUFBRTIzRTBGRUI3QzNGNUVCOEU2MUVDQUMx\nN0NCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKumCfy+6JV64hqa\nlvSNaiXHzJVr6h6muk6ccs74N1FOTfWFWifWHIGznw/QfQrIPFWMDMz/LrjSjzr1\njy3UHgcL90lkhqiax/j2QGpljfdPKXmhlvDW7B09mUtgbS5lm68uFENscmKKTDK5\nSO4slg5dTfM9ABpQ3OQKgeMCMezI2wknfZIyNn68IlcWqEWOAOLyrNusJgvI4PyS\n5xgYN5LdWtyVKuTzqu0HoLhsk+HcAvgggfbSshOScN519MpcyxTcxu4v6jlo5WQX\nUJkN+UIAF9cD/++zX34JPebnfDqFYhdxwPhJKicp2/MM2PIA8ErofV52cmKNIcK1\nFYT1KNf2bpz6zFZxCD55zURdE8knJp9H+YFaYfcyA09Tgrivt+Fk1hw+MmTVJaTb\n1Jdd1yMz/qfmZJUCrZqxTlzqW1gkXrNn0SMUiCSgzgUUW/JfmTmSAmK1RqH68Gfn\nxZGuAiGiOaJvW7/0AIdsbRvqq5K3SjhCeMQGK19b+UvbfqdfiL9hkL7bKeB8mdQh\nUQLdp3FnKU5ZU5P1u8b401ZplWKTHOWReyNHJQ2ofxuKw5MMB4KtyGpd9We3F1S5\nZWGWDDNE4auNqtVFbqaOUkR500t4w04V5GECYs7KJQozJ02orbfRAc87Du0wF1yG\nTptrbJUBD9vHj+HZxy7qC3meAqAxAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQlZrOu9iP1cTJ3\nP21KlkN0/fM66DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBABWbu6NPzrbRiMbdUWwSNNfbmMrr1iao0/NCRtkZOnU0\nxXVkE9G0yddPeumalVfo5Su/ZWXGHD6fiS8DvuV/y9K7VQsKe36Tvy/DS0b9w3uk\noCkmGqt+0pbyeDNEilpiEradLtgrPmLNytGOpONVz8xsp5uKp4ve6fdYKXEvvBCS\n4OS/BI9+52sLu9b4qkL7f58e/p8vbR5W6ulbes04ej6bHyRk5dma4LbnZxlqjDyy\nhgpZnwOanqRyXYNq5dlyjPImg2+ZD0nU7VBCCj47WKRwXsYQBeMbPw92j+ZAqhRp\nq3BxRyDp4bLxACCnNSEtruOyotBi+8uDw2GVUGkTysXUgVTc8WCYxOzGLLsMNZtd\nxLyoyj5ydlAvTerDWpT+UfyeNSKyyYUTWvFVVWh1K1hLKVOZ/mZ/UR2jcyiQZq2v\nGgTfN2DtPBJiVrUZVpuUtdUWBwAaQtTyYA20VNJM6GCBT7Vpr2soLCrl0XkMBQfO\nesVIK/7YN2u5YsBin72l0SmLUkp3Bo1/EdXK/NZOomZOWXMYzOT5Wd0LVkZ02eM8\ndA9TXd28Hete5xVdX6ekYe4UX+BA41b+91eE+CEde/dO72UPesRLcyI3hiQsPVM7\n8Mgvpah62eZlOcOAeoaR1bf8XwOrK9RiqPcLnkovcC4E8oIhN+tlF2Vm08jRToS+\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID 8E1AD84693D5D89B1472CD8F999076EDC4115400 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAArs3JB+f385O/QAAAAACuzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc0OFoXDTI1MDUwODE3NTc0OFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx\nNTQwMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM8CdlT7mLDwK4lN\n8OOt1M0cxR3gnkce9jBBXWL+QEw+w7E7mZDkRhEk0QthiJIy8ze+wEGjosSdf1pN\nqiSMwNwvRgZgCRBUFkIEFNr0pUHFr/V4ka4bu/LCvmoqUumEVEA1XbiUIDFbonqe\nhB/gmUPWiXC/HTMxKjWm3B0CV+Csm+IJw+oPd3Q9iSjDYm3hX+tTd8b1Yz+iQ7Ht\nZVuqcHEYb0FTGVa2JjnG1Ny7484cpvY7H8+xtxWNnGWxh4/6LNQYg/cx/qUgcnUC\nmuVWFYugoTY9iNFJRTPs/epZEFbLG9kKQvZBtB6IWI5+F/aq95dZn/+usFeGiejQ\nyurCi4+JKB8Rh/7+wtlRJMVy4FfyiPDrNsNCloF3MAk7fdzcKe+b+QlbevB8CANF\nYyeBXHROpHFOpRsBlgczwtHetHra2IUzJ5zclV8eixU5zd1GeMbm4vG81XkF/4A3\nPuMMJ3Q9cYrobQ1lvFt48Lu73fcBeTWuB+kxk+WHGo1TN1h2y9ccEuQbkADDuOYs\n0Doma+ULvdg4ertOWQr9CYdJrWXwvbZ4ecYdcxr8P9BX+HUVfrLzrHJpIL1YNbJg\nPnIgObN+eFjs3EEoCTW5MsyJRoI2+QppdyF0OZYZrWInx8jAm313y2/MDLNco+ra\nwikdR/4wDf/M7Lr+dr4JxDCZaQ8XAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT3yYAIuGDPjRwU\nefQ0Ree5j1DYVzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAH4UCHuiAp/aH4LRzWhgJ42sXnJyKKFhQScf8b33ft1u\nwD3EZooH1dZf4Ma38pDlHOEbO7wvgqVEfsMxuhFPoJsOPaVf/J8W1hggty3hKOH6\n6dP7+mhWbARItsVxzDYIIduh/X/r5aqn7ogtt6JEfJScWmgcDgT0qhQT6GrrRdCy\nQiou9NGXQaSGGImbRxntgz+OTAbMaKydRZ9rM/d46Z32MpsITcO9GVBIdBe0uSYk\nTJZA1c5ZxMrzUNr7K1ckkwpFzgRPCm5+xVSrc1IbTbiks90lO+08JzWIcKd73jay\nmmrhB/kvyHggdLL6zIbGeU01DMOB3m5503zSGDhAW5MkRu8n9G1eyqKF0Gi4ejFE\nfyJBx1LvIO1e9iDO6owoz1kbLrxourh6iAyG9PZg7DDszzp0nkpPExMex2tr1GYa\nLLtSemTVwO+r+3lnn7bcxVsQ7OoTMTMKfa4wMvuCbo/HgGsF4enjP/ZjIakbxNiQ\nnIF45DoFCM5WGviaLHWWd6JnyCqnLEYpWoQfebFVv9jvnyYdGoImMj3HcOXPtVO+\nhHXSKuakXStr+h2OiTwiv5kl2wTKnf2bMEpho64XgpoF/ZzArdu5i56q7m1jhjVX\nThm1jIF3rHT+ZSY2lJyVswHbkFy8BSZP2tZ2udqZ8iU9E6NybCpJnBxCUlKS5TCl\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAARM+4rGnIRSuSQAAAAABEzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0M1oXDTI5MTIzMTE4MjU0M1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE\nQzEwQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALmRrYAPkSqDA4p4\nBxxS6+fZMajZEWVfp6TMM7MB56lXi1IG/Cm3pBllBooGCj3a9TZag0U7uF8la0/0\nfi6R5LbV86rJxMYQyQYITy/UBi1eJjL/fnvmjE2bnEYf85FLTpiKg3IkhhzbeYwN\nDMm8nLOfMSETcOLriu8akGxBvXmmlA27sLJEaMHMxnXi1kIb1v6V0IslOFg2lzkw\nk/wOfXcHw+WWd25P54dVBa8sJKE1rXOuYRgIedLzINAphrR+wRn6YaZlOjzT44Wi\npk8Zbim2hp6RBM7o0BY7qcPGOUpd5trWSzieQSaFGaaDq+eyzm3g/My3EQJkoo8d\n3f1v3mECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFLvuwPBpTv9hdJT4kth8iGphe3xbMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAekq+\njA4CxpR+7Q4XRHElYgqA95rOdAWNLWcLzos6RKQGVTSGzc6KCF5dgDrV2J4H+onQ\n0dHdyUt3K/NwZ+XEK/wmJmtXOkurUGC3fmZrlqdA9QCD/X9pt1WjJkjQx4yuK2qg\noXodgIlfc3x/tG++Uj5MVxtIUJXcsKrmXd8wm9x9423DBICuFmWCO+lbIL9/tm8K\nqzdS9krDswzJpKva4L4t1k+Uwgs5+uZFsuSdKl4/1yAjyz+YRrutmcmDoTSlaxMA\nyXlOJ7OCkjHwxQAxwk53BNaxoEc6ckThaM0OFkpE2kTL2dnIM8vZKRGpdLxNePqN\n/++HTeuELyZOPQXi7EoZBiqXIWtTf8RYKddNSu4Il1sKRvWpQZgHeqgLHzf8+Hs+\nzszFld1gSiMmAI2ZdcHbv3NCePhlhcNdqShooIEtVkYHq4wdwsHh7JZOuT8K7Xox\nEPt+PQKPlNCnBUkaqNuB6+1w8BWcps6L2CgWzA+HPgeMfFU7EBAXfsQoEhx+txRe\nGvwDN2UEzyo8qwEaxR5AS+NLr1HdXJ96cQBDSXwqmBdxFYmZRZqEr17kGBPlJCfa\nnvp5jSfJJTrKqCsdM35i229qtWynDoO3bxHLse3Fqkq4CqDwYuvXDwJ1UEQzXWcO\n1WNyFnY3s3KrTsu6abO3KGTCTbuxaFnk5nVTsXg=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID B99E979AAE48774EA2EFCA9BF9AD5B04040DC10A 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAp9BoY1x36LqJQAAAAACnzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzN1oXDTI1MDMyMTIwMzAzN1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtQjk5RTk3OUFBRTQ4Nzc0RUEyRUZDQTlCRjlBRDVCMDQwNDBE\nQzEwQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALREgOyXL8V6FFaz\nJsPeKX4s1pu26/6Zz6Luq+6HoxwEIU7thly9JD+eIma0gNylhihSaOOXtFWhWZus\ne/QDGK4kp+LoLWn01gZ00JmmIqaBLLh+Sd6DaRNYBqld2uJJ6PDwfKF6wlZsjQCi\nWXuqlpsLkfNGnxSEF5nrVBYXktIhdwnl0mUGuEPuO5xJiYh6bhhyTXT3Z6JSVh0w\nzgj09kOqLV6QeL7MG8kw09XaH52n/far9AxXU1+eO6UMMjgs8GdqmF7vCJjJOuwz\n3IDMcdcWRSXJ3duKZeosaPAixhynkXrUrl4I2JZ8tlrpADsYoQQQBvbjCIOnlhM0\n+XxjrX04zBiooK5ESfdAaRNnMKanzhcWPN8ZMhL01GTTEr2fiPlbn1VnBBg5gA7E\n1vypu59yG9sMyDNx/M6tmVJmPJRpqu9q0QUNHdbfPKds5DKSEK3Rf+WvNh6SgdHS\neX1cVsWeciFOperzJaG7HlPudNujMJMT4BOSQpAdHtyuve6VxDLcnSopzh+58doz\niM10xtVLZJUVUbuleM/RhGBsbH0y8EtTYMgjJM4+/hPOvhN6hTBGgS2HrLIFFouK\nWfO8BOtQqohzwrtPCVSQH9ssPFHmR+QR/4+9yoeeMs+ucvryXZhpMBtjV74XhcAq\nKkMGY8EpJn2rJY5XWR353Rorrn8ZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTGFZ0tNRDCx3Bj\nq5xIzufUMmtjIjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFCMEtF4rCKXIDj/AlTqPU6Or5welcnWmUZrxyIL6qha\nBCcv/6JWY01bytpv8p+YeJ5YBKoFTpIKu2zwFwWMM8E71Gsik5gR+TMj3nNFvSfI\nwP+V6nNJVSlgkym8qgEYYWo74N56U2znwDcP/AJL9UP+fepYnTE6+rjSFw69uxJv\nMJBL5PTtIa+Ur7o0fQ2C6WgNVpHJ9dNmViHmnR6wlAZAYxqKGLvcSPN8DWnwOu17\n8Pk8Sv7bmztYfBpJ/RIlNayV97Yc936JSCVeg/EB/TKseo0K5xOJcYU5iRcQDDD2\nf82ajvEsRu4kze/M9tqehb/MuR/mLwpxun0xmfa1AYPL0W12KueTa+8DFjKqjpF1\nDWWN7Zoio2OpN5s+eRYBrs/530suZ5y+s8hw+MVBtQ70kjYmFzGkMVvEf2eH2Bym\nJkfY0WWqCQFQimGfIBhdQ8WGUvSYzi1k8ewJ5fOMgXlG5w/bGkVlzVLLeW9CCspS\n51zPUi8AjCyfqBVSNv8M7ThmEC/U+1yaNOPF8MPwPphEFW2QPmoFPiNnYlPUuWz2\nhGPCgKsrnMw04lH0C76+zQxjGLL1H0e8Fd/8B8idK3E9Wc/d6N4SYzG7nCxcCiGf\n656kVCqBwbwud3RClzofRX4DcUGuP1uIhFhmhTni6A/fKOLpsl2ZH3wU0d1ydkUu\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID BB9805E319A78DBAEFA888B45615957205179181\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAATx4ctNIlcHsCwAAAAABPDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxNVoXDTI5MTIzMTE4MjQxNVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtQkI5ODA1RTMxOUE3OERCQUVGQTg4OEI0NTYxNTk1NzIwNTE3\nOTE4MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN7fQDk7tGyYLhGy\nuKRYSGqvgkxPj2rzgiRiVPmMSUyQRsDN5nNwHH1fehzLDry89PMxadxmrnPSpiVz\nTS/ZMhPf1VFJDGj5brO4KCMRKHodOuOpsvq5WN9T/ZIgE/GGNMILceklT2NLAipF\nx0ec6K8bQXKXXnzg/lHThbk/Fh4YHzB7Q5d55jyrNymXoZfwoHtKccUyjTlzO+yM\ncgxh4SIVeyxaJfBBoWSLq4+prEt5VEqwFsUkqNUuSCStsFt5dXHBp6PkhaAyfhun\nsp16gqA0DmP/KbGkDK9OCYRXhFTKnb+H6MamkMvyZ8w8wIors9FOJrPIrCESfbM6\nMuI58UECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNizVAtEA07OUyNH6CJNjmaEBh8FMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAaovt\n4YFOtawegJwTx5IfVL03HX38XT/lcK0NaeYM7djF0tiJD/qwObJ7vyqru0MGVOcE\nOo3XJzDzWCFXUDnnaGbR1lIFbAPsz5rzRnl+yjcRRrSfBm1GHqKaNyluJ5l3WArr\nhm6sB2TsK7o1YCydzwQzBgvtAq7azuObto+IVm+x5599G+kOkgA+e/ydA+cgPxkB\n9JNvKeZ+I0qmNAKSoAD9s9NFsRojYTLIA64yyXlxg5z/Y1GeDznuBoo+vouwSSER\nEzq4dm9hgwhvcxUfZMkVeo7btUxt0BgBVwLsf0KG/cjjma0Low7Qkr2spYRybngM\nvIaaUP9SDW0x8jwQ8nGqXBB9G/PRqGOeXf7OYwSn+JpZ0bcqpbVJid4SXdUrtumL\ne/Kn9DzYJdXCdyZXIRYwbV1jVCbjwzVHy7DgU3OuXpiBknijvZ9pbodJ3fN4P+j2\nJ7GlneTu0Qv0o9tk7NXT3SbRRyUmcBEDwXkKDC1o1Zxx5n5u7X9is+SkYo8eIAaY\njeljbF9cteUqApcLtpwVCSROJ4NGznVWGm/I3kdAqzBPFmNJL0u0eS/MGDtIkdi6\nXB+gDFkdhXxDFqm0SNWOq3jFwIZLQz0S50A3MOrXaHJLBRqgTniUaIw1vAp2WFdz\n+Xxs8lNDXZBrxjHmz4JDjduCjgy/N4CeEQ6shsE=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAr/a6VHqNOV5jgAAAAACvzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1MVoXDTI1MDUwODE3NTc1MVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB\nNjYwNjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALgu0WW1agwLU8B0\nuHKEogOygUwUwpczncbov09Lf6x9CW4iYVZOkwN77b6LkpFq7nfPIV2d+BtyybDq\nzMZkIwc6sIziEQ62M7RLkd5z9hu8ZiA9aUQEAWBZsCEE+kmh+gR8PhumXSyfbL9W\n9URV1jzKer9yMHM7ivZhBBj/7TgoZ3oUc2XwJJEcT1LqmMjDjnZnAsx9bZnMfBky\n549cavYtbVUWcNbTHrmvCgdzGxYQeS+IDGSJNLZ6ZqO3Ywn09LkZxxMeJoeciHTQ\nxWnz1hQJdQCC/fvfZ0cUShy+M2Fwj3AsRNNHYIPel064m8h4C4MgwWLKY0coIPNb\n7JP9XiLcAD+fqoT5570ggmdFxe32RtgJGvJT5JNkWnkiZPhulcmRoFJZmT5ED3Gf\nvfTmIuarN6OssDxA63ywjTauksa2kpRB+YhoEcgwfbLSnrO7V3SPUd/GFXdM7m5K\nYLFbEBsp75EvTd2FJXF7xFhQCAHAn4OaRBHC1ti3rDo7ZSdwaigBSojk/bSA1tMb\nJOWk402nSJxy8gcaYr1jJo3ME6fTZQdgRBAUokuetxdbGF+/8apWa7Rt8qDzmV53\nIp3gunevchVcjHm7e7WKpH0PykIE7y/UIygx47Npx9qMTuJ5jNad3Ap03EpMSeW7\nQkXRDW2Q8Gup+KNjNT2QJqtO/s5BAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQOaHsFUbopknMf\n10sDsavKgB6fNTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGJblZdCuzlk/HoV8CZZYhfAwaokDL6Omks7L6jcwBIe\nV0nT/EfhwVHxURqDylt9WQjPeqeg43+Drcfggnj2A8QlSYUU1Jj88sQId5k8CkZV\n8QPM7FuvEbwgGsUfyTSj37IbEYDYM4stYjvcFAmGzi7JJtxlqx0srVZksg4CEAPl\nchiA5NsMDH/9YlAoQhT/MK5lbfMykfrhmt1CeG8cRotsg+hLJj8byM97yJ5gmz/L\ndqVxemBg3JYRuRxpFGaD3fpgUVYazkqndqkwabX11lvlxvb+5vW0arAclz4cUapU\nsL7gnBgzipbQwALPrhDb7EhxME9pkmXkZ4+bf24XwByA4PUn+1dDAA028/bzBjJ+\nrr5WfjZHacywHJH9BDWJyJm5jZgkZq1fBu8bsOSMhC3D6S+Dy/KLvSuQYicb+Ct4\njIZQv3BI9NU7hIRIHp/RVH4tzjUscoW9zr+Y8j2MO1gpyZx8gfYNO/xop0J6c+65\nX9O2UZM0ZTjCJIJKeHeKfNub1nRyXg+p2BmZVyLaaxLssCfDjUjL/Ww2F/IlIC7I\n61AP4CbrrtcJroG07dtltJ+84FhtK1jew4AVWD+0AFBIHrvds+krpXZ/kjMwuwld\nuHYsaihEFIN+8i9SJBbl6O1ZLYSqfVZre3S5/G9Lys4NY93+xlc1VUVmbCYKmL72\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID CEFE333390733C6727C7880DFE429AFEB557A892\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAT2emAXlYdpJaQAAAAABPTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDUwNDE4MjQxNloXDTI5MTIzMTE4MjQxNlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtQ0VGRTMzMzM5MDczM0M2NzI3Qzc4ODBERkU0MjlBRkVCNTU3\nQTg5MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN/4ib4kg9tMs3bD\nWc9Z5vP1MgnmXSBpilPNq8z8FjyodSMOpbtT/6tuHlBLZ6SnZcUegWnoOqdh9SLP\ni63aZV5fbt3TZyQl0z7u6UY92nxUD78ZK+zwMpdDUWz1UAI/kmwTKrOlXJWjHw6+\n1LUSGq1iP3Z7akgGU+RbcLfiV/0dcqUlHGt1ZAOh/nt5vlDRzrZvyYd+im0xPweR\n5oO0KuuNsGmlntW/JTm4kGzL/D44OttxEcgr3+W0NOqeHoKAo4bi6o3tZWMloEeD\ngIaDpT5mPCYVxjLI1GGBjF1d0sFNIM9828dtBSnF4kvfTvUFqbs4dk3YaYWtS/Qc\n4AbVoM0CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFM4Fauw/uKOviEalaYLE1GCybaT6MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAK5n2\n9TN38i31S+y264Q53nR21GORhAeQos7DRT1fDqnKX0ZuMAg9yrH0ll2jSqSBUbJ4\nhUCPrcc/jt97oCbdyKbr+9QcV60jWbtktCnUpM4b4wnbrUe2vJSgsCh8ar3sdFP2\n9fwUXdKWh3md/J/aYaOocx29IkKp/oXqLH5eslIAEgsmGGyCxhnfLUa+gTJMcoBf\n4YKE5mOmoMNQztcSD/kHSRrIa9uDgLp9mJYLGZDYtXPrhP70d/0rIBhWLk71i4Cf\n+D9Z2YnBpFpViHis63yDzU1Qpilf/uCJxJAQsq6eNAS4SuPRu4CJjXDqOqcawVIr\na7FU4A6r0o7QiemH2U6h3Lxoj4U/dXnFx5ldb1xPyIxjGQhly3iN+BJVS0Nwp+wC\nc/6OT0p8GHwckAXsbikXnN6XiTakganRXjdn8qEYHpZxjOCDrUCGa2jui0VkOb3c\na+ygCSdbk02FlAFYJ0vVC90O3Ddec2wBkiRAwOgTHK2egKbD5ieHWwo6+fdOQLaO\nHGu9HVV4UAOR76qkB1EFDkJaYV8D/0L8gjRYn4Glr3/wHBx1L9M/GXLaMdr1dGHP\nwBSY+sJTbIrqQ1UDB8bRvTPpx8zs7kvSIjxAOuSbHBuI8xhC313SmNc8Q43qlGli\n2jv8wk69Cj+dHVt+SSN+oRc+CrybHlVO523aOa0=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAXbbG/sWLKGbtQAAAAABdjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDkwNjE5MTQ0MloXDTI5MTIzMTE5MTQ0MlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC\nQTE2RTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIuUl57sBiC6xo+l\nfMhc5xEyHUOv/FX/FgCoSAV9PjKiP3BDO20MEJnQultsUIxycXA1g6uBF7zqKoI6\nNTsfSRiS+AgYX12x0bEsc+iVSc+U/ffHL6qRxEbvbWg+ORIdHAQfOvT/MOiNZNbZ\nDyPzPlcIOPkqrfH0qKxT8uvNCdZsi4cgK3bzDV/yJyCIWgaDUmajyADsBKDApNLx\nEW01sp0v4sFqbTpyGB8bMnxrKBPNxWvCIxiy6KuO2A+kTYt4YvC0LkZreiIpU8Z7\nYHLZvAwOwfbVRkNNhwSOd3Nfewkk4H7KHklRtVIHKY54EGYNOaYiLjQ4sRzUyDjN\nTtLdGIECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDUKTFSMFi+OIaEKYMCs4F6SKqEEMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEALotk\nnKShoJxy091ll1MnBoA494q+buuu0JqJy5Bc+bLmqbeld0UJbXr3EmP8d8MN2FrZ\n1Wq3eyyoirQIH8a50+53ENi1eSPmPTfoIsUiiNBUarH0JJbWg/lg/hWQExUCeKpA\nUkMSfpcrlALcI6wqLRUZtXqVoUpwhOAwIkXLTSADK6nmVWNtZFwFEfr+8nLgBGuY\nAiwCctWng/L8wvB40p3P4maoo2RQRWrC/6BwFKJe3IRuH05fnP2c/lvVTLn1QJPG\na+i0JBLB0pxwslemdREO9om4aupF4ia2jTmJwcWm60e0+JJaeBcLhxnSpt/55In6\nOnVxVQnUTYVnl/g/FIDgUWlr7wfYW+bicwjWCNbU9ejCJ/7yPqXSol4axYz46rXD\n2DHAfr+7EwQ7ADq6nAOioLKdoAK8hrJcNHKVjNSBNaLkvGfQz5DQP47GwB48FYun\noLYWpxaSrwTx4nRtDoNlAxVOBgpap2b6cQardGBSQ+DZ0pFl0oKthP+NHzj5tvmu\nehejuT6qcQQ1vGVfPC5yYmQARq8GKwpJ2f1yl85iwZ36qoHyUeIRNP9npLF/oeer\nkhq19DPj/50/+5hTG53u7cP516kpt9ifW07dSQ7lQqvHM981YDqhH7QQQVsffbSv\n2PKBt9yxW7UnaudenjN4WYncGsBPBBVCak8jlnM=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID D73CFE5A9E0180801181A1444DE36EFBF88BA16E 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqAE8+EkLRmvewAAAAACoDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzOFoXDTI1MDMyMTIwMzAzOFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRDczQ0ZFNUE5RTAxODA4MDExODFBMTQ0NERFMzZFRkJGODhC\nQTE2RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAN8UPKsM7Wcu/eMk\n6NfNoji/9VlTv85uFcnvUVVOQNgjtpmRsD+RBUmi+YrLzr05Zj+TdMbytZjEgYw+\n7g0a8vqFuMo+YYDMGd8/E+MUBzpPsyKHxiiZ4+PdJIgeSo3NcsrEZcHdHPDSihEK\nO0tN78oZnE/qrrWEfg3oyaSPCZMzCPxYdWgp8BCBR/qrSq2Tyzz7h24/nhNhkpgC\nn1aN/JHZUCpdyXr6hyW4P2EJc6t5lcOlfugQv+GAyeXtqSx0/r24iTUq3r4KbMfX\ne1ZMV/m8YPOji8fKqBKpH0BhU0GVRzI8b/zBx9z3G5ohESdjWaJfGhWinVHVhQyH\nliC8hC+ALp4W9vz1nW+u6xpY55yNJnwR1epwXt+VQjrs62Griy1cJ4tgwKHEqf4I\nOMtSsUB43QDH+SFrQRd7yAqb+EFWncQUglEv4OGw5gPW+M4N2UNBLNud+UN63jyK\nAjD7riScUs1fw7IPAOT5fURqDreI6TYjACt/dw6GqM7ofF3sHsNAHAYCTOu31TXw\nLAkuuAuaWj2O7Kj1Jy3WRwvIin12CwzVmIF3AynCd6HhNZRRjrPBTstSvn6p9tMe\nzf9YWW6iWtAdQhfTHRh7MHGPaCrKzAw4LIncScsUIZKdv77ia7SZTntOv0Tgz2RX\nTnJIwwe/gkXAHzA2iQnJZ0aL+7njAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTt0VJsrtAO5mNU\nqdnpyQFK9KjLhjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBACwrttIWlaKC5MqxH7MkemI4zCcEZNJIBgPZMjNBfbjn\nJ359YhDMXQuklz13KhioKamRzaWXjP9jRN+3v/elLO3iLZGfxBAmuAIowfzI+Q2D\nSOAv+7HU/ltEpJ6f5IWUEWDMnZasP1KZwNRem8t7YCYMx+arjtx8IBe6tX04taSa\nmrkDA6IUr7uhm2XFQf9KYzcrSUrKRaapsBrEfbRABF+7HG/+HTYge0iqgYOVeoM7\nIWI4MWaOuEU9WxSChzUNoCVWSzbiqsOP+0WJNfu9n5wQe0zBprLN6ZJkp9mxx6Jy\ncLw9hvCR6taNgyPOL2tYqhDarQVRdNzf4UX8ypxGcbFWPG/MKM4fcpoFhKZd+7Zq\ntFy5m4gv0GOYZilQO/0LDeSC4iVuXE6bk+Tm+VabSS5Cg6wSwDNOv00DcWaUkPGE\nBG/FSRTcF1RCGKbxVpXCkcKlVmA1ri1lQW/DhHhJAIH8IH8v49DleApbwGukHMZe\n9bi5Q+Z6Y3/7Q7nTq2DLaGzVREdVyt82+4jAcAkBTl2O6TnZj66JnOVS/w64v/m1\n21BqkFh7VkSsASXO7eJIkd2A2PbYGYooa5i3bdBwf3FemZTd53SNf6iAsG22aXkw\nlXhlW3y3uSiDLn/8f6T67reUnkNPQjdWxu36CPKTosACR20jIRpt1+TswDAhBQJc\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAHI6rc2vKUdAMQAAAAAAcjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0NloXDTI5MTIzMTIyMTg0NlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz\nMTBCODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM+btW84yTFfPr8W\n+udj8JPW6DzjFjW1WojiNdKggkUz83xK4kB9qKHQRdsMJZORz85JzNC7MoIwKbm/\nq2U9YIqIVvN7czpuXmwEa7wDcoeE8QhB3Dy33U0nIp562eo87v7Sc+mgw+vwDlIB\nDDbe8H8Zk1PwqmNB5u8V/NkbxLz96HvZlBxHuHxNriq1bSPtpXct6+wTNM3flivc\nhWmRXV57pgrTbSBhwdyibZUS7RHTfA0FYxeIipULO1ZwdT1hDYj5HUa+nIVyxYx9\n5fkszEjvvbaURyVn3o6LOeTZ/MHNMFkupmN7JnoJAlnPji4l01nMBRq118SLHZEt\nxgC3z/UCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFEDLeES9tG0GN3+NoJCbxRGlML6kMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAVhtE\npohccMyg00XGd5DqVW0ehYYLWnbSMbLciUeJ6THjA5cteU/uoQ+4aWeD3PDxCWbA\n/yV9gWeCiSx0/0+myOYCZm6yNmV83IoyxvfH9mdK4lfWnHKPYD84P+eajxHyqRO+\nRRMrBRztT56J7HYQKDjeDhbwDqo5Xks/76ViN9bPSMJzWRBMET7Cdw6ImxqquVKp\nvIwjI5keyhBhNyEyVMv6GfpbqQL2NRz27UB3eh6y/UWr5B3u/7dxx0p+skC5ka8e\nndmqM7MVzsU570ib+jL03/0dEDWAuP7ymU17K0ZmKqIMO/FUOdjHMsSTEKXDN1m4\n2HgS8U5rgRMOSGeum4BFeV8RQUXZ9IqVrfWi5lQbrwp0LYFQK02Y458o1R4OHAlm\nuc7MtSVXiNdrkpQdSAjfIGgzmI7RpM90E4RlTsm2o1QhaGtq1IM0+h+t5ihiI7kk\nDsWTpbzM5TYO6e9dDGT0XXV9Bk/YtsNjEjysRY0bpJKohMJN39UzeGW1pl276yZT\nEtYUJ9M+o0pSN8LQTYTGGyoNMY969pzqFrvkcIVg51DcZbIQ9N2n4wH0GsyObUkt\ny8hPgZJwVKXfcj/VyAFl/DbSvUNVwOEagZCiivcqKR+VEugmXR3NmHOVgBVZeH6H\n34ZTNqWeXwdV9o9Cq7ki3fjGtVmFYJMwUFI1SEU=\n-----END CERTIFICATE-----\n\n\nWUS INTC KEYID F99F207DFC8797BFF90D641D25FD5A45F76310B8 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqF2yTJf5Vh81AAAAAACoTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAzOVoXDTI1MDMyMTIwMzAzOVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRjk5RjIwN0RGQzg3OTdCRkY5MEQ2NDFEMjVGRDVBNDVGNzYz\nMTBCODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALVoorCMOhCUcPHD\nNQLyI/TsFosDHF8RRWRqC2imJeZGmOFZRmsxXbGPazrr0K8vflpBxJ1YvvrJsbkw\nsi9BQB+GymT2FZBvx5x7ivgAmpDPNcvU1JbDz8OdZmHaYpCu2F4/lpHJk89YFw6k\nXRA1Zq1d9zQy5Glr733T0y16EoAYZMX5ytvB8acd9o/5u6Z84pyW0EOBUlHa61WE\njAgH8e9oy7X+xgWRXZzFTAtCDr2uG/JhsqavByn3KFGovxhYXqf6ljSyLZMT+HqF\nNrY7sliPKbS1kgbkQ9Md96E6wCWJv/GMffQcglwyHc+Ufp/GBOTCUcUVJ60vWTTU\nxERXcGN2KWg8JFlSKHLzh2ASRsP/0HLlQoixElFPeLARrduSzTdgx+zHHxTPTsH+\nR5TYZAJffVWqbZyYGu+z9VJGmJBOngVMj07Q4FE8YR9VBAOW0BdrteWGS5PlMpJ+\nNpcB2hV1eLRvntTLE9VdXpt3mU4UiumbWWeQ/kCZoxlun/d3BM5uO5jwEfI6h0fa\nOrbYBiMnmyGYR4rvDGPIYlKg698LQUQwDFX9os/0oopNv2SVlVYz+qxkUyetrXsS\ndSIx8JtTm28k848LV26TGIQlLyLL1JCKyjB4CbwkqRv7Ll/x02zE1jQ37peS0vxj\nhUmQOw63FPscNMGOhtjEBk2Cg019AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTqGU5sT8GXDEhq\nUnzc8vxHpVoMNDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAF+NUPuaQfUpB2XKxdIssKUvuUHIa0q9yY7OqiHr6+ut\nOXdoQjHB12nlzqSm3h/kyuG2peGWpLY7H6VsOelOzzAPOMaek47KRIvOH3YMUh4E\n8uDF1EgXN8ZKNIuXIosCBvr3Kojo57pRLPXL5OPFQIexVrSXM2gmW5l7zJxGL41I\n2AElGk1gyLSouqqeHVAkV3n8AhOHY2liL05E30vtiSzkNxni4TvoJKt4/3wHU/l1\nJXsNFYFC7x7LVqQ3S8p7vVH6OEpuq7ZZ2jYsBntBCf7HJ+ZUFxfYco+LKMBjL6G8\nq/OHP9EJR+PLPZ22ldOgLnnF4IN5dQ3wg6lUzFzzvDquWY0oOBLdQWZ27pJUq748\ntxSR/tYkcuQYruAN4uPmJdWADoWfSH7sEgCcxAiJnqFAKDOvnXOlDHQ4+T/bDzMZ\nepYreRY6ljuaSEIgA01dElDtm4kYC8EdrGgr7RU8QN/vGP7JncFqmKzMONOKlKo4\nReNftYY52ruMXgBGz79nkYEqwirmLcSldrQ7ahYv38MEK/irFLJPmqRRYLsLq+iQ\nSWIvz5WbgcdmTxHFUD6m+1pWwFuHhF0Q2voOBCvPUvZ5KYmxrPwdTJS8ZxwuJoJE\nviqXd1mzstIl7YhP2z1XDCZxq8BcT3agMt24d8iAhgGZjujRc8Nw2nacisfzGbAx\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId 0FA7B495048126120E12731606776F3D68A037C0\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEBsVjWzjeg5WgAAAAAAQDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExN1oXDTMwMDIxODIxMTExN1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtMEZBN0I0OTUwNDgxMjYxMjBFMTI3MzE2MDY3NzZGM0Q2OEEw\nMzdDMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL/wu3jdehpb3w5Y\nS1LA9ziNf7jzbdBHlW4HMAFgDqifj5AZJmcw5vu9xPiKnf/ZscBqcxGIGkJ6B2Nk\nLmOoqOpQiMzFSAun5ZkSNCqhN3zqYdQJeqLm5jKuc1SqPLfnD6uTsAdERrLQ8oG1\nIG6l3dGKXKltQ2Ru5A8N6Nf5ORkcjxTb01q0aU5BxzophSlICF5+nMV2lvzPLDHU\n3xbdlgmVXYfaQjI5HogrJjKfXJSBN9+7d+oxANwm/CKU88nWAV0JYLfO8KOx70PY\nPc2WPGZBK9VnQNuUX//4mH+qS20I0B7Wx/aT1G4U+ckWM3gSQHhV81a6DkQgWWJ6\nLKsGJDcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFMS09hIX8eHk2+58/piEHcj48wyzMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAThk0\nLOScc4+g4I2suFrHZgjsIh/8OIllxPpLGLkNgHKP7zCdmxLHB64UwbwEd+3udGoe\n5jBCFcIfUAq33aUjorefvCWPXLbH6axr34LhbSv+A3ZOqKHVPIlwM0l7Jk+sqE3P\n2Kg2petbhjWkW2I8PH4GTFK/8DVVE5PBc/Ia2VQ53QsBs+hd629z7SMQn4tfYG+C\nqmZKb37Pa4L5sWST0HIHZF/YwWLluIVcUCrF7G2I7UlVSeqrEJit4ZyY0CcepfYX\nm1pYr46CrErx2gvM7yuXyKV8pEo39aiBRkn1xNWxiz4NEe06KtOEXKjrMG26U6A/\nEXSrtFkqevTAtKBVYLdlmWQ78dZOiJwR3Fydk8m40gUoQ3fIotqYPtZZ5fVo4d55\nEhS8kgNwnGIgF4yvrHW6ZkkPrvZ4C0+ApWrV4n4/Em0vqgw1uamouT/jSZ8QMNhS\nn15lGoLCPWbC7h/Eh3bVb3/qn6IznmWv4Pqur/hkMxD0LRKQGhyqR5KRsxAfAyhz\nFGtWHMF068UNowJvzr7D5+nDTztIytO1myVKk2iAhjAtNt+mfjJMEJ+WGJpmy6OB\np38OeIq4VIpj8mCbc5HoYpbHhcBO3LRLbjY7YYCHxj8+VfBSHqwOu3vy1fBNpbDe\nZUtJYSVstYct2xxDPRGookSF/Xt5LrF9KMA9F6A=\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId 14092B5F7814EC9B713E9A9B90A4C519DF08E688\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEm873xCCwJAswAAAAAASTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyMVoXDTMwMDIxODIxMTEyMVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtMTQwOTJCNUY3ODE0RUM5QjcxM0U5QTlCOTBBNEM1MTlERjA4\nRTY4ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJP6BXfDzXlTMG5t\nFOUhZ9/SdXyV5tFb7ByeaO4tiEmLnCRKsl6cUvVul/BiMWG4QGK7KYLgcJgOY9NI\nb1SigYyT1L71sKe27kjFyhAd/X2MmXKleuJ9DurPE9DgXgHcGShsIjiIQUDHYEVd\nruYbOG6xJkKEwBIzureK2lnh5mFJ8gSkjS+cX5UzyzhstBRtm30ZitVr5F82uqcA\n+IOlxI40QRljS7UPojCmsIDoVElfVnhZAGu92h1LqaP2LeSJOtrNt0NAS7LlZ2SD\nTBGYYQUUFU87kal+FQACybz40QtTQ1P5DYzyrZYz0Vnc1iEbss4j9cpq8P4yilEK\noWsHLQMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDw2rJQwB4ubmX90pT+JNPez6KRVMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAaliI\nb+yk3Vl5fddTUUcMIdcDDpqnkRzeFJvklr1g0Gy7IsdXfskPbwpnUQwCJkMn66KY\nwaNVWWYBJmrdUe7zNkGvMJAi5uFmqh98B2Za0jLdinOuEg8egzZfRNX0bufjTMEq\n7vk/jeaVHMeHTYWGyt2w4/OcJkP53/RMsj8wwe3b7dnHoq4GeA/hgTSvHiUuJqlk\nIr/I9Zxdm3AwwL6oiwhDQIA0JHCyI3r0wKQi2QGZ6RrmyE8xrlr4T4++xh/M3J1b\nlH6YsPSMYr/wHtC41djYLJav0y7tUketGsdcybcXtcnMvqrfgyhuxXiTJo20M5YO\nKRzyCZIZStrjVF8AmrI2dBCJQ9Rw+mhHYab5qBodBQ+hS8tXq2Cwjgr0i684zz+e\nKT5RxpMfrnCKGd75P5E37MX65gtAAW584Pv/ykkA/wOd4KnPQjjRTJET2zrDx7kl\nUbZfVmsoL/K70fZrVWTQ/+288l7ChKA2t723wcldAhsgWbsdUec3CPFo0LpLTdBc\n1CnqktPK4b2sC5hro6pGD/tvUbg/+koo2pK76+XUT2xKuT6yYLdMjfKtJbg1w/Hw\nbpOkqOQpAmRI8hvTu6bpKfx2ZWBY95gwrYkwuNM7pVBXhKCxFiDsRsyO+2QyBooP\naGvzTjG6I/AFhTCWXAiiGlryFr9RhfGgb6jclho=\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAE9p3ugYF2MjtAAAAAAATzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyNFoXDTMwMDIxODIxMTEyNFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIvQuLUF3h5ifal7\n1Amz6xbhKOUCptAyRVFoi5gdMu5CTrLknsSBfPug5ty+4f+HoXhKQknaA3RQaf7/\nGtZwGhmuM3q0eR4Xo50ij9dIHqIeC70PvGH9i7DSwFyW6kyW+tONmAkkHN7x+bFN\nBEZj3/2PcKIodd7xHmtNNwwgwPD26HIcYSdaa+HYT9G2mcPZD/+dFeJtJMBBGki4\nRoCCDw7JIuVAp1Z5NLSbFO6qhfrOMeGSMXWvq1Q3mzMo7GYOTkK8nyoVL885ZJbX\n5bIRr6TZkPCQFB3x2XqlrSnOkkkofeQKw/HCfaB307jmzwIdIPUEDE9g2572Yeqq\nm4PGuo8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFM0o5ktE7G8TfoI6OMOtyDz1wZwyMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAClUp\nBd6fMymAf9byc1Dx0pWEjNAXnw2W8jiMJ2dk/A1Hb+talB0qYAvYqa5MWp/gN/u6\nY9WBV6BxPn0NnxM5qfvP4UDEhgRu+jiOPqXxABtdJAO1uvzxwtbnz3W6CmrAJUNW\n21ZicxTXhF/ZQZuhlPauw7xzIas7jrByxpmWPgRuKkEVs+afnOmihRCqFaWyTNO2\nywAVA/Hf8w0nmhjMKw724MX9yzv5c1eMi3HZoOJnXjMe9pwYFocePqD0gI2P3AWC\nROXkzhhryMh1wd4OhBmRuZ545PbPjF1YepnrAS8ljQqfYRpNg0xGm8oZQAxGUQ3L\n/9Ydh3iqizIsUHKKWWbKYsfNDPn3cU3G6VuF63Y1I9N8xE/Umd3pGwyb7KJQ4MsB\n9/tH+QdX9PU5fpvQWL408sgr7ilWmVnG7Ib50ALqz5+dEbXVogXaeCRnJHHHkybj\n8wNfkKRQbJh96sfLPFF8CR77x6n25MQtXAvDW0i0qSMb9xh0DxAXl4S9yaHXiDdT\n/KYLL6T6RPJTDRW1z66iLq7bAKM+hPZXgw7UVhmtppvfmP7//HOMx1iKHFEe1KuO\nnKndeWvYAth7S3BFevYWs312a9CeGaCf/lr5uTsvtMIXR9DjnCXEvICYBxoig4v6\nwSmrq8xePj7bV6NskdU4EW0BZe0Ig+sYuIKkfWw=\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId 4994C129F1A548D488586F22A2DF8603739B3BD3\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEa+7uVcLLbb4AAAAAAARjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyMFoXDTMwMDIxODIxMTEyMFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtNDk5NEMxMjlGMUE1NDhENDg4NTg2RjIyQTJERjg2MDM3MzlC\nM0JEMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALjModlMSxcR94Mi\nTOTUo69hNuaC9IJIipQ34Dn9WKrzuCCapg9h61QyXeEt9ZLIZqpapxFzn/pX+iHa\nOX5xdi/iCOPMgTBWlCj96BDJzsFhSszZA6gxdDDo7dnZ3UoVyWAo5Bmoo5oEuXWS\nNYe5c7O7JaHXV+Qa2DMC8sgwvCbwlEwjbm6L4tJvXE4iM7FOdm/B87iTq6kdtO87\nkx9RIrlMAHfZ9rXvdS5CnIzh10PTatqZGFjP/vg/0j9KPdvDOU3qjlwzMr2Bq4Qd\nzbdmncfyHNaNptMAouYPvZtCl0+SoHZY+ZufW2XynGmKVIVw9HpYBJ+JUHtQYZR1\n3Nkw/y8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFN4irIBFrvXdHjZPwXbIL5QsA5pCMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAllLi\nTJ1hN9mJ4rLB/eHz0t1s3r36Hvh9SL4dfImOv6wvC8hzTvBTVvnwdtvqk7a2AB5Y\nzDAJyxQdVdls2Thq3shWToMPABvGpniZU6zvwoJIyE6hEmvvCVh9d+Ve21kqItFT\nB93asAsVAnvBC8GWRZ1J8m7Z/5KHqm+RjGeKrkI06WjJ6t3MiEv39b0qavO7Rx5K\nG+QAJdGlzJGHW86iwPUI+0SnpT76QDK8b6I87k8pxhD+ObhoCzt54L4vmFSEw/ib\ne0+vLwnK8jM+IaL6llKYTg9tQr3kPrDcmeEpbS8L2lhVWG96fLnb+ZQ8v0sNWyzy\nY3Us5Ne9GpNMPFQDJuq3/B2ANkGxQ34q0aeZetXBxrlDOOuOaFtW9QpYmJZgKR9p\n598KmdG6v5TJJsgg5Rlkf00C/dyVyC8uiHVJ4S5J+lPHOFqMT7a6ngigKWijPQdq\nUeLEOHChhxNgt5HpCL6QGTDmxQglb0q0ommJ1YrK7A2lH3VwUZdXsmqfvPN7S1ss\n6XQHlj4Tz13mqcHUYp3LfGcnU1CcJJgz0p1kYZyYpapRQOF6+WB5cDFFs5VhmDYV\n3m1A0JsffSZZJbF21hmxCLxOyH3IaAy3/AgZpeWNw01i/IWdfVzr9M0w6Hy2Ff/X\nWw/4Y4ZvovwiXPNB42pBahdTRuW4+6Li3IS/F1E=\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId 72750C52CA3E250E701DED65CC69204494A8573A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEytAlg/NuYqcwAAAAAATDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyM1oXDTMwMDIxODIxMTEyM1owQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtNzI3NTBDNTJDQTNFMjUwRTcwMURFRDY1Q0M2OTIwNDQ5NEE4\nNTczQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKqcyG6wuFelnE1i\nRZYpgMRt3D7P7+mt44EfkIh3DehWtYMqECaUhlAlIZ1cGJj9cAAKWxyo9WoRtWKo\nrNyUlVwoEh6ad1EA4dDOy/UFi1RJQJLvOmvZYfuAoXfkZ2MhzoSmGT1INmzEF7cN\nU1abIHqswPBHn06lMoak9UAg7pyE+HNDyqaTlVxAbjTrsl4jE3MqJAjee89iIpdb\nFxlon7prSVlvBmFjFn3pFfqC34ktxlIsaf/IJWrVIqI/M9Z3u755LJuIcg4+6WYh\nvggabMcsj+E7WbVVDun2DnznQUqjyfkCXfpKKK7fXqkcI5OqtnDZicJqpNKs6u97\nWpytRfUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFO5LjEXHl/o/IAsbiUq//BBJlOX5MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAZn6Q\nvw2mG6tRZHfj3Lwchr9wtTWtfrPzs2wBKX0w3/qRb2eoOf4HuffZlL5iqNsrLxdh\nU3RxPSX9oaJ9btbx1Hf9AErWI/aAxdOgZUx5lnODGsetgxEGyn+J7PaYS3aMu4w9\nch3fENiF/Na5fv1C3QCihCHBuB1X8PjQ6qRP2gFI1AD3fImsogYVBrYNzSYIk6ta\nEX7L5iqGz0ZipOqizsS9RppXKGXunsSpGY9Au62wTHDSK2qs/Z8KjOTOdp9mS6Or\nYYXU+vBY9I0bjT1I5AwjjN8v5k3FknSWnsaviDnJ1hWh6e27muZF8eEIsrzltdzQ\ngJ93osb1VH1SGsRPf/gNPWXq0mEpTkMchLUEu4G8thVTg/Av2+lu1630icIBi0Dn\nu5j/kxGCZkgS2eYXBtwLMqZ3Rb9pAwQixN01rxsVMie0JDHECwdR2eSukl1skNZC\nO2Kq136ly/ziHjtORMNbB/yUMMu5aczQuZVLCVG1dAaNihefKzjU7BiH3shw6nAe\nzv3saE2sTDTx2tkdDInU9jmd+7Rj4z9slJl8ANk+OjL2VEDPEj+VG1VEf8CiRj+C\nsalOpKQznvLtgMKC9LXyt60yggQQxTT35ugcxKurqUZEKW1imO3VqKmnS8vC2gr6\nwgy2BXA+6exJWUNBf85yoJKd7ki9XhXsk9pL9tA=\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId 8E1AD84693D5D89B1472CD8F999076EDC4115400\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAEP0c4k58+C70AAAAAAAQzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTExOFoXDTMwMDIxODIxMTExOFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtOEUxQUQ4NDY5M0Q1RDg5QjE0NzJDRDhGOTk5MDc2RURDNDEx\nNTQwMDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIXYM2ra5uoGaLck\nNUGvJF4fq/BxJWByTv1KS8Rkq1CNoM+Yh7/ZEckj2vRvtmh0+gZd9r7a49Li8HtO\nryvfTjszUIqOnvgTIkrhQTPSnin/sdkEc8dK1x8NKg2BMY7MtYZ+cUFcYA5dkFGg\nIKrmVVN9bMhvaHG+i8dYTzTKhgWObWNttZZDeIhWDOuPs9ZfsF5UowWtfPsUf9OG\nlzJcWQMk6WEfza27qtgkDWA1AtH8kMlBNKGH+EygHfszuN8VzzC7HzcGdVSqRSw7\nwKCVB3RblwCqShl/li8VR5isFDAhE+dSUEcA0xiB9CYK3zQWxPW4WEwBl3+8pQSc\nCCJK/gkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFDFp/P0Oj6ztQ8zcVsmyDHKAGjXUMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAS05i\nlFqfv0FVIUMJkbPc7bgFtBSDIQGDLEtwpTIF/2ZYDmLzMogmkE1UnECih6NZNc3e\nbRLgaQNgKcybGOGYS8o+lj/Xn2H261ANdr7HhBF1cDeVZvD8mJtvvFh/BDiNXpmA\nj3ohZtPFzF4342HYOsWjJt0wF/gE2EtUe6+Xwpj3MA30+5RVItUJkxbLmEHAhWcR\nSKnAsfRiPjnpUswOag4b9mR4uBpeNtLdiELGYEXCqmED+Jz55djuDnlh3NX2V0fI\n6gRz35lSGbUpdKsnLt796IkMTb414dvo21WBA43L+hU7YFe5e6jEVx1gYE9jIW4A\n+o9CXzUHDhs+ZwOXru/ymjoSTFdre7+BoWqQ4MZTtBhOL1+YJNIWb/HpIg/hEbCf\nmmz0qgFazEPQ/g9rYnzQeuVq4nzlFXG2Jm3Lh5IModQ+rOgrX67e2c07k/yxSjn3\nJsnD5kCzBwbWgyqCodXnxJ03NRGRLCBi2wQnKVukS8XgiP6B6Y8zyhcZXfKhQBkc\nMLc+2CV7bg8aAQOLZwmRIQlfw5zlC40zGhuXU265MsJVWYY3u6P0lLhvozaIYQ3+\n3xGd5pJ4dbUUBlS+hW4U/12b/kqdrVYsNqWpUiqxM1GQ3pihzJtzzz3c1SFI1mOE\nUhmwe/154XNZhpoRqij8inv1rG3HLwMwYRaVv6E=\n-----END CERTIFICATE-----\n\n\nWUS INTC KeyId BF9C5C6FBF80CDCE74ABCD0E0E6004EA022A6606\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAFINp4XIjRjD7wAAAAAAUjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyNloXDTMwMDIxODIxMTEyNlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS2V5SWQtQkY5QzVDNkZCRjgwQ0RDRTc0QUJDRDBFMEU2MDA0RUEwMjJB\nNjYwNjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKhIIGVTpSn4BHZc\nnuW08Y/nFUynz52rHWbXoJLQeXvDU6/5OK/xu1+G1qhJz9gY5TvaR/vbe7lVY736\nqoegbEfisctMIK3Eg+l9yJ+HEKd1JMjvf4PN77HQvFTzCfCGEOuN4+zkDBcbyNfV\n5IMAazijTZ8jarsJeUWkagDce8mRcVvjDMabaK0gU0kgEeIrjZB8vZHH23Tz3XQh\naTHKcrKJ3FpNgtnpw633LAty/EEmkRUPOyNMzhVogiMaeXZacXtfNuMRAtgTiEZT\niekl+/mxAADHx89DPTcA/V+l7seDErPLgG2bvdH8/VEk9CDcPGVVwZYwn27EaiOW\nvxsZmaMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFC5nsd/bt1MgvQ5L+YlVICab8lynMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQrLr\nZ2WG+OysOT0eKPUXeEhp546T8IP1nGEailSX+W40X7MpGoCAQEt4fzwM+Iw+bd57\n3NrqJfxZhIAvgwQG4RDmBLyL/jMLCIEFdnjl2oc5o895TfkPcrti3F6IOKNkqGN5\nVa+G3RaANiJOkwWLIL/ZYaxlqbFGEkjsJGgOGFi1Dhxpcf0DWgo35/YaKR3o22nl\nhZ+poBmJXK8kHxy+cKMlZk1ZZCVQdRUS2hLLjCL51uCHQ7K++wD+O/DgsWClKg0T\nTLAgfT3QTrGJ019AcsoMiJyQ0w6Edge7KuziWnDSKA86GcBF7fIbVCaWNlJ14F+O\nxRMdBGqi4hy4xW4CEiaGSxxuP1qv4o+Hf/5CNLLpiMV8B72EPH9Ms9tn6WApJD2D\nk22Bqsc96x6YgzGqUB0MXcaR2oN34iySFcM1vPwtB1K+hkTUp8b4vMn2Vue99XZE\n/RmCGB6mrOlVfzQTUlCHbNUH5g1WFbzXW4Hvawx7XuSm3r1sMBMxP2F55jTIQCon\n3SjixcMPl4CZoofvUnuKE1W5tfe/RF2AC2jc32WglxtYeFhutvjE8PXLSIfm38qH\nZyHsaz8M80TM1VDNBZ0mUjtx9fps8teMoPt/aFtLPXw6AN55yhi6Ch3o97ChCRfN\nk+r/3twrGsILd4yjkvlD3dH+Wwso0kO/8yj2X+M=\n-----END CERTIFICATE-----\n\n\nWUS INTL KeyId 145126D0FDB53E99907D6FC6FF1B90455B9E324A\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAD1AR+TuXYYsqQAAAAAAPTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDEyODIxNTgxOVoXDTMwMDEyODIxNTgxOVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEwtS2V5SWQtMTQ1MTI2RDBGREI1M0U5OTkwN0Q2RkM2RkYxQjkwNDU1QjlF\nMzI0QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKjSo35PnDxs4igb\nMsit6+B2v94Kbn0TwHJTATxniESNojE3soO/Shs6q2DciQnHdrkajXWaxAcogsJ9\nC0wgO+2jv692F+KvGZtJYd0yvRP9weaWr+x7l7hJKQme73c9MPiwqlXu07lgB6pE\nklQEiQA42TLG3Aipg8fVfW5KYbT0eqyDUc9ytMukSZGCmmQibpTp7uQ3JHedZvy1\nSCPf3PHhgcmHoDA4ihn6FN0v4I7pDz7PbCU59J0mN+CHEvvPO3oiZyREyBeMMzSH\n8jEbbXcRX1PBKQHOq4xUH1h/RfaiJ3c4e1dy5uQx8h1yBugmOntR7Y/CZp/DDr5D\nn1mS/YsCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFL9QowtPk/KEZtn6Lex8Pp7GDzZ5MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAM+nb\n29hJADmbFWGN8eyfuRoHfvoqpYxsaY4i/cGy5OFv3BxKWsuPRNkZEPgAymuIdFqm\nPE2McI6ywZ4ZHmpcKmd5ysgdJxj1zZhVb26S9eWvvwHgagiiOB/TPa6M+6eDVQ34\nxYPzChTPxj2bb+wCwBZOEr7yl792g1hj/z1jWj1IJd4eaiXDoN1vQmV0LxYEjr0w\nwsqd/AFRfdZe6zzOnm/2udSNP32myyLsGgjdLDU0d0ufZOmxkF74rxUTkeAg7f/S\nq7NRm5bblmtuM1Js+uCWjnt80+VW19uQWXPFuVLDXCOlF0JarkDHn7OsXbxQuvpZ\nIXEv56jiR+gJQiSbJM58OZcA0fLoK1kGjjNsWd8DUcqD2xZSOH5RIjZksL2YXgKk\nr74oQmGWGriyRe1eiVFnmcvZnoGjaYp0VE7gqLo+r1pAR0efxprQcmzQt6ILzcp4\nDJrYu0yVRD8zSSW9OVwAOqm7IzqHG5ZPGm/7EFQYC973UgQGT5n00p7UBxwjg9Ng\nx/db0locxHOBmKrCVxWJuw93srwbwdO38rAeIrEgmQZgkNNCYQ/CGdVkdgQ2MmMl\nOyJJuShhWsJmMSnG26vbYQpOiI6f7fpHLvderdjygm0CS8WP9CUQhVsOuMZ6T9Nw\nQx6tq6bOGbptNW8H5ijUI5CMwBtiRX3yElBX+JI=\n-----END CERTIFICATE-----\n\n\nWUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAHOwC18hf3NnWQAAAAAAczANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0N1oXDTI5MTIzMTIyMTg0N1owQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx\nNUU3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlKBeUzusCgd9dC5c\nZMjvbR9U/dhIL+SHiVWoHvZYUUjQZRi11tHlEtNcp2Ne7UnW5M3LiKHRKZo1xVnc\n7P4neVF0ildA14A1RInWNetl9w27Yzm45OduUakpbIy3TbrfuXmyxq3m0u9R5mZt\nJegUMh5L1HLABhZX1yNn8fmNbzTcQWaU51OuB/f+gKPmzLtw2qby74eDBMGAzZR9\nATmKRp86SpKyrqBRO0W1W/D5Ss+hVwHVCfW7QLmuRgcyfS05IMA8hs9GEmqTea9+\n2bDI9Ee+GqZ2BevKJpgOpAb0zjlL9lNJ9EKiLYhntq6ajPcollMnl36fCFEmuaOi\noG8t4QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUct2ObycjcltEDyNi74IUQi2x+K4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCbZKfl\nLi4rLZ92EUCrOKMWkKsDFBlzYFB1sNMk1rdGLF4F2K2dUAAi+309//4AHZ8+EzQX\n/UWaNIMK8qRNcxaV1cLEQJuGeB8fnuqo7NYcXGjSdObu9UhoZEoM3i7c+7K3Y8I+\n2g8d6dNQo9YmyPpxSk5dVrqkWt77D6IbLKMJGbjS3jGHAIo8+ePsErSQ2mxJAUnK\n4prKne+OTHyoVxkxkG/Psu7MJhqgzWhM1O/RBHdr9G0NCjgY9Eqvp0/2kF2XLjJV\nGsYqnCSUPCqh86FLahBdrmYLk+II+yJ+TII77NOjDM5ug34uBzca5sZHrdwdB7t6\nHyaW3hWWsT1dhrAMgWkw1GkGvwIMOQc0yddp7P+ipvDJWIdQRpbkX0zfnz7Kijao\nDGgZSfh6iJha1znbzYNKnOAcQBn2oMSO3rV5ZTZrcSlIUMVS43oR/98ht6o3TkTQ\nvVwtCXkT+2ivrdFn3K3WwxFdivIXR4cBhd2jD8WV1rB1eGNV4BFACQV8K7hW08/K\nMsyNCuvNR4zS0i+MGK1uJ1H7gQQ/yAaLRgd395PB5ka5y+pJxPAGv4ShJaBaZtze\nowe4BQC9tVjYlpJPhZvbLJTLxYgdyFBEkLPhFDLRpgvfEfTzIglhaRnMjB8PEjCb\n5JRKkP3XtE6xoonpxSBdt5QyBwAZT2yL/ho6Bw==\n-----END CERTIFICATE-----\n\n\nWUS NTC KEYID 08300F43A8F4B8C8E624A4F7060CF59E745015E7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAqbpq3yqn50O4AAAAAACpjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0M1oXDTI1MDMyMTIwMzA0M1owQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC0wODMwMEY0M0E4RjRCOEM4RTYyNEE0RjcwNjBDRjU5RTc0NTAx\nNUU3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtPXnHS1+/HKS6Osj\nbua1xBClWLubk9mQMd8nU3uhvonxkQyGl185IcrmD0Qr7Vd192Toly6oSb4kn/cN\nDLDf2extIZ8Z3BpTdKqgM3Rs8nWDU/xCcCH9K9xuP/Mag1pkelgtpxcyH6wiIYOy\naLM3iFPVhQTeu4NlX0uQ04i36wt5GjLrffRhOzzEYSPvDKFBBfGyzbUY4TPqU8gk\nAeFzu2IMvcxZ9qrNF89dzwmR2l8hLC1kbk2B9F8CcVbLhiCTxzoOkXNtFq9T3PWf\nkvq+M1Tktkz8qVkvp+aLMJZuePdFf2k3M89GJuDdQvw/Oe0G7noOyWfw4SJ/4pyi\ng1TDUp8sxfV2+5cs2hOtFaMDvdTD0UdBxNkFpKTOtKEvNJaqv/xsiPeN5f9dWF6Q\niNYIJF9VeTQRzHwc2uWJdaSbmXfD2D2VS+zjT2lYkbl4plmlP1EaNlqXr/lJ/DRS\noOxxjXAfVxOZfgXuAASoNzQ3JMamg0mRkdVukg5BE3wrsh7ZgHJ1AxvOz5fYKGaW\nUYILM1cczNFAzMG3Emve65p9p//2u/mMoWdWahwjCv8B/yeCojrPTC1+oUcczcfU\nVEWQSNtY8+D1YI0mT9sXwFKvLtO62ITCzl/4pBO1hSSG7QjwV4DoYl3CNu8x4L2f\n6btewoIko+3ncBVg/fcTCUUUiH0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGhxDq/mo+94CQsI\ntNo1QZLxGugXMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADOeloR3PqgYtm6q9KPqH4I3WNXUu03TfAo3USDAth2t7\nb1FOvyhAFMVaUCjOmZGa/bl/PKoaF1rKKynQ760N0UYWSjZrJUH6q2ifmsNp3DMK\nQhf6kjOMpNMbakdGtLxF8BLZwWOGeLEhwEGFzoUnnfcMm7KAOFsYX8rAH8u5Uk8Y\n+ZWX7DbRkUzovcOzJacyrWPudgxZyrVggRbdy9jznLTZQtvY7A6FHOxOvf8Dr1mN\nD3xgxRtdcVhVZVC+KoOcMYLOS+tpuOSi743AdGAU9ddDy7ILQ8O/cIE1MQHEcyLY\nqsoQ6b/EsAJnCrOOj7dFQtNP4+BLjEKya5/C6QD+3DBJKiAvaZ9uP4/eff2u6NPQ\n+5awdJuYwE3YM6AwbUEE/TctnAEpv5qYUMG6WExixKi5WHugHgIzRPlZJYiCbvMl\nBtPya9PgTLbYvlomec4D7mkeewBjyKqgWJUxqE6S2+L2G+Rs0pzaulIfg5o+cya+\n8Ti+JG4YAglBE+qqAm1+4d3mXgrqSzZI56RprTeM6V6Tq6r83kQXuN9uXwLEV9tL\nnjIfxPTWF3Xb6JDNxGg2UFFOkXOI7DRJMmrrWAfqdPXGTurEVqN2X5dWNngqKCMb\nqYGc0tryvDx0cCu3sYv8o7+f3Y2AUpKzVXp58fQJ5OcA8rARiupSOfiqDAg1ONg=\n-----END CERTIFICATE-----\n\n\nWUS NTC KEYID 1591D4B6EAF98D0104864B6903A48DD0026077D3\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAAQG7zzf9AZzfcgAAAAABATANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDIwMTE3NDAyNVoXDTI5MTIzMTE3NDAyNVowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3\nN0QzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAztZRPn8OqYcQNgF3\nvoNFUIcX5OlJFq3S6Y03yhA3e7orwZqOe6P9cV/sE/8VQssHihdpapcbhJpgFm2W\nbGJF5xmCjNnqSI5kXVpJQk5Ts7D3Xhqum3TvgTbhSf23zc3AvA0koHxJ56JdxHTP\n1xXu8QbTSelvrBsXeTcz1HukMY87At9UlV30zK2nzqcyBA6ftTscVIdy4kKWB45W\nMSqYf8TnDjR6Rm6El1LlxPNKjTQth+/SEqux2xvVGPuje9x7ffUKtDQbFK5J0Gn3\nquD4bZDcE/0qgBAOJVPpC07nhs1d4kQWWUQsCBvsZZEMZGidGp5vEXWM69++rV25\nxweNdQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUX5h5yE1fgiLNfEp1KGPBMuEILQUwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQA71n1n\nxAKG0b8Z3qDh1kJm5oqqBcx2dDvqtXwnEIFKupBOk8mv7eZLTLtr4HqTo/JR4o3r\n9uV941cLGhq7jAT/u0FiBZet97U23OiiXy/cwnfVr15457hRuE0UskKLt/e82ZdW\n/NHZhfsD/GT2rsG0PSaIyMonLo+mFP+Yhcte4uaM7LvC+SfZ/CuKq65b1gme+doK\n8AuYHlg5c/bj2QUfwPRSCPIBHe9nq2Yo/5DSR1RX2Q413g7RM1rHfhgAGGeYt46B\n+q0ugmCGJZ74ldEfx2QDty39AJGyImRnJPbAAFjKNHU4aIxsPEe3BhprFRowkQaO\nn9HVatCh5sloONanx+oPbq94yteee03ejUqLsdiB0b9r515kK5kH1DTSQ6TfAMWD\narLLkXJ1fOyZ6q/9Vgmk7AlXpRCdtfT/G9nl48bCVmt3OI2Ls+uQ2YKZ03HpPFV/\ny7/yHSq2hz0lSYC11NuwbXDFGfx2bUevauL3Y+ZsN1JgXwQi0Ce/wOmGxnRHjra1\nYDpnU2GM6LO1YOA3b6p23LQMviqal6QZ4sITQ+ef/e2Vx5k9/zaqKss/UUBXXXjI\ngdZb6JhoMQG318+quNDBmFxH5aJR+TPVgIBLoG+nT1H2my3Z1svrfm6mu903uSon\nLD1F3PelOb5d4DOFXDAFrV8ih8x0PgrnEfod8A==\n-----END CERTIFICATE-----\n\n\nWUS NTC KEYID 9FBB79AA0F526278BED150929A7171E96A35BEF7 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAqIId7OgxICXjQAAAAACojANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0MFoXDTI1MDMyMTIwMzA0MFowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC05RkJCNzlBQTBGNTI2Mjc4QkVEMTUwOTI5QTcxNzFFOTZBMzVC\nRUY3MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA6Fv994941miJHRp/\nXo9OEKmz1D3PFoGjZYpf5Nlavj5Jsear4xUVE/Y/iJO3IhAjfatExEiv/f8EsSLk\nfeQJSjqVYOtpl57SYF7WRsKdng4V5GNFtQnEPCs3PuH62rXfSyDOgb9sK2Jkh3dB\nFgUaBLQ/a4bNuaIGLn22dkgURlJpubw96mTMACB1KqsoUdElYDNiduDTMX1nSMU+\ndU9K4LJ6Ud5bNKhI4T8taaFnhZsbjrUre/YtthIVt/Y7NtKslQGa84PA38LfUklT\nOFwZ1gzrzX+GTDfxNuwEONACOY1aKhOqkoyU7hcrQagJf7KwdUMFZgwxcrYtg1zX\nClmJCC15IZ6aS1fZ91H2FH+zDbLFBc3OxeMGL919ddQ67x9TBfhsumtObMOlMtWf\nAhmZJ19hf8bBszz1Wtgfqu5FVHo3x7wT4mYWG0gG93/sy5peNuN49LZDklAtNQeo\nv0FZliWNe2tpjjh8EQlJZiIFgAAfsiroz209bYokRNU1HwUeEgN/WC96iVscbTlS\nP2velfFgmKUxBbtZCw524gmT9NT5IW2mjpIgZ8w2hV64sBO0YU2xNnKBXlVFpoS1\n2bmd+sp3ba+QJRYIMUBjIc2YPDSkqtUwyNLTNSIoC/eogDnhohnCnkyOViTtOe+D\nAFEIgbNAMMzv7+Qi4C7qaUafL2sCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJjSjRvBeQ3MLf8k\nuD2pAEijA9QIMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFxsvE3q/Nw4YCYiC25DqJlvbZtUz7D2oIJDNwUvd7VL2\n02adXEs993sc8l1tm5HVVZm/vDgLZ8jvfcQuYe3e5NCv7Q2AqZ7xBPFZJYN5Kg4n\nEmwAJcp0ukwtBNGKZv2E28Xsf9ZI+4L8nmf8lchWHvni1BfTylLMZgR+W78qZ6Wu\nweWr+Ybcz93CffFN4Gfk0KbiCZnxaFUaNu5O5cqUZDQ2HX4IPcH1qk4C0jl6Dx+w\n5RO9hnn2cLVuYIRRoqUE9hxKQShoXzZ/ImtsIb40IYevvQ08SubVtA8Uq/UJhMSX\nrcnSIbzaMLza1D52e5/oJCyX04Us7YORW+Xa9gHwL4m04mhcW8Mvhf/ntW359RSX\nOKy5pLLjedfFvXdBcGDz6sCtqdK4AFxtGc7n6up/QOfhtTU3Kr1bcy4SsLqKosb5\nDuSEzbGo8aogZgd7JVXOVBv4IKPukCd69cfwl6DVfiB3Ncz82WpQ8YRzccF+agcE\nXhnzDRjKMPb2TZfX1ZT6jvzBfTp7tXz7Smg+9LRM+v+epu3xAJN2NHo6VqbhKlvy\nci3wnHv19eHp1A/CbXd2XB5ZIsd/ibh9IAkaIhqj0qXnT2tfMtNv+JnZNRLSMUfX\n6doat1cvyWF3EPC2HCxvGSQ/XBr1bo1spuamvr9YxpRtEtnD6DPCOWKB42pkD6g=\n-----END CERTIFICATE-----\n\n\nWUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARTmshTif8GQCAAAAAABFDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0M1oXDTI5MTIzMTE4MjU0M1owQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG\nMDQzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgS8VZY9xB5eoAQc\nubPGu3bKm6Nz3jnuxfSYsV8ved/+sjQZieXL9qqS3NM7i4ATag+Px8Jplt4Xl9+0\nueW2GROQYxuzSIFtMDai7sjJkEKvBgQtpm96DxXK65UMGeUpjjez2avhLdO7rxac\nU2ABnb45zA7+To60mgxZTWKlxM4eYnidzHUiUNXFw5xCFFdNRe9keqHEt2wTBVrI\nIDkM/OjZhg7/nbg48eQL7FJl9kWLt3P9HhLh0hsn403QpRX/PiX46ZRM1ul7s0Z4\n3GUWYo7M3szRUwWmrWgJNIfLwNHZor59z9DkeWMaMr9MpLxhtpeimq3nSBAKszbC\nRPaHKwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU5Q203r56AhOup7cF3kIF/ZFMLzEwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBAXKUF\ndNOC/jOKjPPkDqiiaK8OHKq1KWfUOaxLlNe6DX4qnubFDniBc4kjylGeB+ggIVXe\nY81xakzWvja0AiB4p7nqdnhK05v5c+IcvzQdz70tj+Nl1SKXTJXA1L7Btlpi43tl\nv6+3XQHNh+29Cg+o9YeZAIjSeP83iAWqkj0gi2HngL3h2WWSi4JQJ9k2XgUlpnAw\n/AJXnwpc68JKq+erec7RSYeljGPW1omldLIQBMxiFEnrB2cH5EDhckAYUS0iT1zr\n/BIcDFr7fKN8cEDWUnRgx/uPcEi0h+JFy7pdpBIdd46yT6brMSQ01zJj1a/GYgbX\nQy96o8gpC+/o9HPdfpgHwtmZ5RJGEhW4wuPyBjbMWtPPcDKgspArrddPhMey5DQI\nOvBJ3YnESql0M0FeM4090QPS1XoNnL2u81ULxSzVUPEq+JwzbeICcwg0t18TAGQs\nR9m3zew6JujJukkvVdxkNRaPguqye7Z1NR1H62REObjVFAmE1sCnNX0aU9DY57HX\n329TjZsI+SY+A8tF4JhgyMxbXdUIu/0vLNvwKVJ8mkpXuRiEtiYDSSxc6YbAt/wB\nke9eDBidOF0VaVJUje2nAcuf31AGF9c6v47/kdAecLr7I9ZhM8XL9Z+7HbCTT9Kx\nfo72FV68TOgZg8rAqA0sHbvTponqP1+n3flUUw==\n-----END CERTIFICATE-----\n\n\nWUS NTC KEYID A0D737290E16CF2AE2BEE7100CF56B2F04C5F043 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAqcqvb1L783JQgAAAAACpzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0NFoXDTI1MDMyMTIwMzA0NFowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC1BMEQ3MzcyOTBFMTZDRjJBRTJCRUU3MTAwQ0Y1NkIyRjA0QzVG\nMDQzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0WVGsn5oLAmOt5/E\nnfpzpA7qYkgutzAYogiyDyuZZsaQe0ySeBVlqzcFFt6IF9e470T8V7k+1hChS9IG\nZ+NKYBFONDABaULvIvftrt1Fm/ObXTMuqzw7tvFp3bPLZ+4/3Pffk4IMd0W0Phaj\nfiG+L/EdP0RstUZDWq8tOGqdpaTNvhs6XUglUH5nLltEKgwoxm/2roC7FdU1j29B\n3xax6bmG64PvOVI1FZjju8Qa8Y1m7duuZ50KFCKJV22wrsXMLoF5QWbJpEpxG3lA\nq8pAwjLFDj9M5fR+EuMEXGX8hT66/Q3ME/2amYlzKmDq5x9aN7svu55WwyrUF1Qq\nkh+pPfVs8l1vpDNxwhhmMWpmujr2fQZnf12hWyKsko01BO/hQoOG1ECcdBtBlpsF\npfplxo5ToDkOeaW7tLWSLf9fIlo2TwM1Psqmt8qs4OgswbFNt3pBdH7+ed34xGkD\naJFHJg50wqKLnAeu+CXYeLtTuhcoQR24jvO/ryM/zzZaYfduHSg4DSU0vcPzClh0\nfI8PCumgMwmhZegES/aaHTDJ+eGnxBVtr3/A6nJ5PYNZZZDGc/Tsfv0yeRy4zQh0\nDeCm5Hvpd+zHrjPaximzm/Zh/O6BcP5NhBzjx+/9o4s8Ahns3FAB65VC/tCmsHH4\n5ZMfuaxvQvpk9kXFSd6/fvtgTp8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFL52IYH6R3jUjX/M\nvxhEvcYMFKYnMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADRo1dsbzntBXRfOjZjr7BeBf/AeBCEJeyFMHTIeQl87v\nK0dHlpmTvPrPWf5xM4ofPQfbWkODXC//NDEzdnfr84wLz4GNCTrHeakbo4wd2apl\nzR0PK1PhZaYyb3gtS61C2wzmplyqk7nr5qoztywf2rzE6AfCnmFx/kEN4zQ1Y7TX\nv2le0H3V/rZPf8RG0zM6U5S2cqcXY0zNZ5s2mp6I+HvNkpbzxmXDz2oa5NXRQGLL\nuxS5mHS6zCfFuWXkkwUTxy9PYiqNF/luu8KcbfmyFE7hwhwzFvLtBwxD0uf23dib\nvO0Ikmh2W73e8ItPkkOqYWNRj9ffHIrbWGDjI3JvnLlbD8+sv159u3ZHbqy7cGAe\ngfklRNuVX0MMNMT+stGewhT6v2YHo27oAjbbMedWQd7GT6/KyyScK2WC216erHfn\nlETA/74Szc+zJ2wX7BWUa/3A/aDUu4K9Zfip+71JOzyStzg9H2pf2OyhRjxYt3Tf\nnnR7KBTcAeD5dFK7/FO+GQMrkQ97xeakF+++AQ8z2rjFQAJw1kixsjeyWZWdtJkW\nAFCNjDbOyZs8fF9ijxPPIx/Ffb5v3Dde8uTUOewnQuYch8vWsxH9sMARpICJvV72\nqVbO/pFbUuEC1QFu7edo2lX8Zf4ArM0smwEfZlT4lAdgsKd2PFSKwcKMd1YFfUs=\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAARVLShwugTmq8wAAAAABFTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0NFoXDTI5MTIzMTE4MjU0NFowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND\nQzhFRTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ8U9UcRO8+DcmIS\nWE6ecjKHG85oT9mA7gSzjKshajRNCTVkPH3qwnkLv61kdoS0wOE5+m4mGg9VDaqc\nhBNNjy/1YaXfBBtRLgxqKcQv2sR9byOIDcsMX2M7xM/zXkbQRm32bgX+SQV94XtR\nQ+PE7Wsc5V3hvBNUu7LkuAlD5BwfXXGok9GXOabcRLJIT1w51bNfr6uzGtIEBFll\nW6wXHWHuWIwSvAtL29z+zdh2nn1Y8eubQJ3rQtijCakECwZ8x1NC/s1bVGugv/yY\nrtixKSz85+nYc2fL0fGFAPM7n3eOh/x48c10l90CuX1VJN7ikiH5XA1IX6vF5bnA\nEFfN1S8CAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFKONrEbPgLHaBVxf/V6y/evnyZ8mMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAEY7t\nYpyvIVWmxfITJvf/uL4tLa7MXl+QT/TRZfWlzAQxF10dntb5Plejd92WG8BMsXY7\nKsQihebcsEHTiCKs1shhxtxD+tFO9guANlJSAayjW6fCzM6KgUZERlB7XE7eGPqC\nuuQelcnJ/xIEZA1aPudJ5GN+dYYlYoF8bFua1G3XWVIljDtrpmT87pMfJAXRJWX9\nay1ANQHuYdygQuuBXXVso1adx9c+swlfdZo6oXD6nDzfrfPMPXjsxOYU/BfnBvEB\noXgpi2zd7sR8jLUa6gAcEHlqDeI1SSb8tJBUsW+nbZCkc/Q/mLOnKFKLuxm4BQk5\nAX5vgGLXClEEgmYe+ug41ptpY58u1NnA/iJHpkKRNaHlkPVJgtwVV/Hub+vV300N\nzdSR18oZmV8UhcCP44qXak1w0n018A1tCPv645hFmrt23El9BGk50YyTiuDt1AHO\nVuAWQf+xUpN9a3bBf0rqIZDcIsnC94GuOhZU7PfaN2bQn/wuot09WregwMCSl8I0\nLlrlwlNWu2vImXZyKw0IdR74IWHbNKxs/ttPNfl32UwcdghM2QAZniwJfy+EoCM3\nCIXptwRHElBTSu/hiOe5YbLCN8bTQFEiAosQiA+QRGBnndeKdUy7SxXQDd6asLcE\n9KvLF8ArUN4rjAOKnKS9iV6aCYERCF0fwGygtTU=\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID 3E6C3B35EF144B0A76CDCFA4080B8B7BCA3CC8EE 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqg2peTRE/1nWwAAAAACqDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0NFoXDTI1MDMyMTIwMzA0NFowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtM0U2QzNCMzVFRjE0NEIwQTc2Q0RDRkE0MDgwQjhCN0JDQTND\nQzhFRTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvS6GMfg36/FPbN\nK/aveERBAVeGGAhCgHeNmuVfcopzEWS7iSW9ZF6YBsx1tVz4Ni3eKdMcV04ElVwL\nhZZiM9rHuayfM2oV88yI3fwK/wqwvil+tn3+8CqQ8skecK17+MLhouqDDPB1RDAi\nCrkmWGZWlXOQOXf0BeiMwZuAFCNUeE/fX19t3qhsiSfsRA2Fw94YJPjYeM0LHaCM\nQ6IN9oSDKzuPR+n/quttXmeEqOh7L5RbVOywBWOxR0zkdr1XsEaFShRAYP7qgyQy\nTlmjlXCpZxCSS5VYct9101b916T4wtdP787JTIH7P3AEbxJ+Bl7bCX4IfnG/DblB\nzy9kxlaCJ24H6oVxuWjJr3r2fWS6fMQhbkmRJ+p0cxd6wXVEE0bjinXhDnVTbnWm\nNubdbKhKVYfTrxFSaj4R+5VKef0/AjZktuaUvOuIIO8eVFO0Dc/7uF3TxJcw1PjR\nWlZ1PoWX45lEhbAxcvlWAX4XqlFeH/yuoIGXXOw48RCHSKV+wp7ShWsG3kYE0d5E\n0K3YQoliMY2wAnHsXNrEn1bamG3k3basAqo4iejujZHyWOvNlHokF879ZNJ1EnuU\nYrgFIiG5ibcZWvd+9m39ZqlMZvLTe1EFRLIJGdT7YFY4bUbIpcMOtmRKg5PhiJw+\nBCycbJ/zI/fcaZIuTN42Z1JNA/3/AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuelNLFzEn22K6\nXk/TRjjD3NKjGzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBADax6mYe77CTY2ONoMh3/74totb687fEz0RgeFsAJoHH\nPNhRTXlXhROQeMNqoJ+XMdLHfR/Hq2DYc89wPoUAZ0c6u981sFfX7r87Xd0F6yoG\nVeATR8+cbk65LX7fFibxouX1ZSmtBvXrqhV8+2xb6XVXrUl6DrLNJ56V6I2ofJv8\n77a11pAh/skSjNO/RnocD2wLR3QIYBO6/BKcqtT8TnwgzDmmCxvdY0C/oEZr+TOL\nqxvRcegLve8Tv4UW2zsJbss+fT6x7cdbdLCwm4HUAttSj1RgCxonYXiLKma1WYj6\nIY6auPeAOe4M8RciYN+YCKWvtVzCfyp4TOnao5Djvvtx5UC0+qTbNkbaphmAui0F\nYYgKrjYeMFNCj6ZrSwY0hY7qH/m3JkqVavnM1fFq8RhF+P/fYs7ZMHtm58G1km98\nXH3mPEq5YapPYSKm0YYYutJw4pKzb+lNIQp2ESHSjGB9bHeJqyTdwKxL7b5CnEoo\n418ISqOz/nEN7U5vjmw1Kfl7akQa6D3T5NJ/1Pj2zxgyEtDyFN42fC10fWx/8e0l\n6NFnpA0pQrH82U81RUvAIAYruVdoFC1TcdTYRh4tLyQnpeHlrwLSn6XQGonhHELt\njDpKS4xxnZrb5pynqID5B2BCFuCukTBzZnoIuTjOLqZJPLXQ3IOvYsTaFYDw8nvz\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqoR49IEqgkRegAAAAACqjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0NloXDTI1MDMyMTIwMzA0NlowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG\nQUQ2NTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALxRFMZtWzKyramk\nWwNCDfo6YI5+ykdsYFon8rcJxmfZ0QI3WiakPT1giqfAUj0untZBdVOmvI4iohVA\nAamngdl1L/NZBPwrx/tK6AgD6TRoFtIje6h/yeIKTE62Qd+o2YHHKwOE8zaY+hWG\nO78GRXE0FafMuWHKEcqFM9ePhv/IPa7tKbkmYaDNIdtrJauARbyPwEot/hgmgtR0\ncCbeKwmyL9mmeSKLPyCWoBaAu/OqlaEdU76SYrnbtUIVIqzZIzNrPsGcd3Cmio0u\n2jv7uQN61PnBKdobKWigsy8YNBGITpYPNPWDvLa3hxadGp5sSSzgPTTI9j4fAnoV\nYOs3btZbl2C+is5tTT2XxPTHZOC+EHsqp1HW/XJJg9WdYA9q5y4Y4iJbJVWW4k8h\ngQmwxTm7FW0ztKeeEpIcAxz8bn7m/seUE+FFRNYPz7in+9WoygT/jlQcLhYQ77Dy\nCZr/VD1180DlkVRlqFFSYTVktGHbmtj5/WQiKWHZOD/zFQKgkKkBOWKEoe50K2aI\nIFJJlqQ0rzlrImRn6QEiqXNpJvdPvwOw2rHjhMu0fCr5v8kAKeqdqWR6s0Dgmqin\njQgy8nelfaBzUPkE/ewzfmm+xA+Yww3jDchYAJErmAE1SImxcSTWbnpd9TfVibiZ\n5xoIp1YTfO2AOgQdmYJ7bYzIdxoLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR//G9sunAiJyd7\nTEpycyjU1JuetTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBABLzu3YmNbm7BdsyWudv7u41Xg4Oa+CDtbB6EafBgYkY\ndiO9e8SOGfzPjlTWJQim8zJ+tpAd/gs2D4rs9Ioi1KkiYB8xBwx0s+Y0HShcK5+r\nReBBvAFAmDa5QO4gkKj6pzIkwKXWeQRWbhEYoBwH/s4E1q1h57iXKaYFkmexGYnD\nRTkJtv5mHMtUa2IcxE00wuRXznUE5wYcQHSrWqEMUp2+oczmEs/hBvUTcKNIXrbI\nEpglPpdJghyPly5VPbao6zzHqyYirlvlrevaiilavJ/BUGK5b318DxeZpqxIXs+q\n+GTlYV+kp+NdHLeOJ7RT88M1HyhTIPT90tJXfIW0mo+sXEisSfDn29iVKdXNDxPi\nzhSqqvyo6Nx2zXtQXX3zusWAgOHqYLej0AobjwhTm5LAH9/9LbLpImB7V25CLpVb\nNhuKrTyIyrH2PlzLMTlY88VOzG939+j0J+a7OwdJ1OFAsnNA3dOwuola4zheR+iQ\noyUVLU5FC5ibl0zJV24B8rkgx3lEzMMdGUHQf3+XtpAA5UVRSsQ/+66RlyLTVQei\nBq+vCWUt1yp7M11sF4MJhcmg1HVWImcfa5KYQPpPLvddgssuQnNKF3/HISxVQIZc\nw1uhtCRo8FCYH8SkoC/FV41k/kUfGTL3XjzXwcrZjA/7eZQz39aAaaSTfN4dWk/N\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAARZ1k3gJ9hkpWgAAAAABFjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0NFoXDTI5MTIzMTE4MjU0NFowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz\nRTMwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOovWaLwZRrLZLXe\nnyNRDZoxnXx3juHQ0xgtCj0iftjEaOHEWPnIYj6kNOCrDyfKGuMUr0lJdMsfhbAQ\nfOIvDfDPvFfxj5s5uIE5nuaZqAvLFNaG6EMrTkWYs4mjPNuB4ToOMaVS+F4Ki7wl\n78T9KjqdBRppHg5tAWxT8toiJ5mnzJ1fE0gyAjaSmQWfjBIHqm2cKPsT1eMp66IL\ntsR5ahq8QeIUdkxi/SaX0vwZtnbh6tbVqO73IQvUMK/RMmbS2tS8TRJxF0sPbBVD\nqt1th9v5VR4Ccn1qwOQ7kW5JjueeByznclaWDORJuEXvOBPpz1IfhX9gFDalXaK/\nDU//pWcCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFMo41EAS7Xfkv1uSx3/m5Tx1PhI7MB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEARDGr\nlwk42rFUK2W6ORlU738lf6gdiAGHFrsCh749lpmHWcYPNY64sKrpSf/BnZwerSTZ\nA6imOZYuUIVFriTNyCUNYZwJNVLiou4kAV+ObhGQXDPoHCIeLdgIf5/FPhN72qzO\nUR32amvfgTU2kR0u6FNNVSFP9nedji/+Lc8P+cxG23K8//KaPscGsaVR4AW8061/\nrAIprd3yfNJeLSg3trJEZfPlRjo+9vQxMhSOejE44eW/1LAKRp8eSRDEaOEQZQwy\nXE064LtsMfWHVGWCSUmr4wFl2vvN6V3oxDZ9UNbQ+6yNxdp2+aGg51fLKVqIqeb8\n4+QlKpT8uh+W3TrqgbIFAVuII/0ZLsxh+j7SX8sau8mBw2cUhcVk5KJa5awaZbI8\n5cKU3smPyFgMWdqgfwXr/ko4THzxAgOTCydUuAmIN/O0xVsqwmVW2QScJP513Hp0\nyH1Uetr+WmSDby6b03aUCA6ED8nwKi0Zj1rcXafkkBhx3OnRE7I0ZamlCZKHkNX4\nIk+Q5IqCI8LmC5LXs+Y9QBvT4EOZ0j75IWVJ+1ZW2rfcxM+C/F0Nkqz60E3IsLNE\nxjNp4JlCs+nr009/eaN9AZwi75kVzAtxjHa1T1QPbO6w3Jv3Qza0+1w5bKYcppHB\nHpuUJ/5f/DOCrwr26hc7ZyO6TT1vtkICXh7Xz54=\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID BCD3C503D39E51B0C50489E9228E984A7E63E303 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqumARufqzn2KgAAAAACqzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0N1oXDTI1MDMyMTIwMzA0N1owQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtQkNEM0M1MDNEMzlFNTFCMEM1MDQ4OUU5MjI4RTk4NEE3RTYz\nRTMwMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOMMiRFrFeQetRKJ\nFepuTAmuhZIUECn1+lELYwPBnr5ZsV5VdtW4v7C64d43nJVyETCO+mxTcj65WYR/\nPP14A55DebKK3EkkQUjxktpaKmaHv9Z4QzMwK0IaFwje4eWBxc2mZCLIL8PMDajB\nvneHGVE1r7qF3LoAei9kgSLzXvQcgPj00p9h7yDlm8edOovCfQXxvP/Jp7iz82Tr\nrEw4OS/F8SFHuWzZTaFfpgeOCFkCjMXfS6oX6kGy4q9NyRY+cxYAYxVxP0gqv+ow\nMRWsiNlSnewqvYl1Nk6jqgBb6vd4j2r7RT4WHm+2/0aytxvHfFryabRs0qFwXKGt\nuodNiWlqnavHi48F7TYBbEitHUtvhR1hnO0oUdaSQKpaq404QM13+e9Tex3aflX/\nH6gINRDOyGbNPlL8SoxjKMU357l2RacV0ahBw4CW2ofRT0u5tPMoEfZiL2W8jmJj\n8+ajNnxpdK3WrSG6Kl2bE/cgCaA6m8jqi8Jvua3cnjhdkBsEs3Y6AUluv65n30tk\n6Nvc3rZN0m5RSkzdcrJQFpxYTObBD46qqFqQgOn4C1mPHxwkjhrtniBubwRiPOeA\n9rYxBHFpNzzA4YYdy2Bh3V/JNnx/l5gR80IyFJGuzNq3VPsW6ubKDNcKDzaw1pG9\nJfCnb/DkwvV2aSJ2czMcvXpuxITZAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6+IBf26Yip1EZ\nO1iOATxHR5nyCzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHT+tUgt23XcN7A9z8NODhzE7hFd+cuG745TVlPtiR2q\nz+0dAAyI8xoPyhEp1/6x/qdSyMEM61m3NKxJEHNQk5Zi72gVVRmIkAFQ5oQE+IjT\n1kpuEIOOANtVRlKPggFBlYyIuncp8+AFX3HlERfyj3uSSZbYRmRjtq7kgcGSXaA3\nRr0B9AsgFEdCYHINkgQY3zqLdo70pfarXRj3EpOUMQ1jaXqiJup8Vp4AxaEqaCOf\n2gRYJFnnGfVgnZEPowBzGIYiplajE0RYjp8tHgjfA6hqDBUveA4f3TUz4i7MP4o5\ndY35G+vlueAnt5CYQWOli4ScHMQfxoH+vmhcELwyNG5G6u0wIZtH+7qTC29uTs2o\nf1W+WSNb68J6qppiV5vMQagzKw+7Oyi2lmnEGmLYgzN673Bzo6fT7HzyNoqQPhXb\n8IStTFkmNMX1bJ5DH781W4Gq6+BvKhAINfZXAh8VzWh2cndH3kEKa5Dp86fT4R0a\nu8CaJ8WQ0QGxwv6K5SbsDB3SELL5faT6Os5HCgcEqTNrA42v8hSHsri+P0Sh6Bv7\nSU80TY+1tTdCUrSaTtczThdI4zsZYuzOslPro2mW1qU8x1CSJZwcndQ03di6JDCm\nnbiX6WgU+Pycy9OC4su6JF25smRNrVsRIJIJTUf2nf+0554UhLdmfPTqaNPSEuob\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAARdycqRXgx04YAAAAAABFzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0NVoXDTI5MTIzMTE4MjU0NVowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy\nQjYyRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKTNoHIDegLfJApZ\ncUH/7kMpwZZtSDZOQHrw38RmiD2bbh6YbJrL3NTmy3w0CxEwBtBej2r4b88vss51\nXsDNXhAYcV4IYnm4GsfT8xlfF/H61ZO761hdSuUNGuE2N6/KpTc77oNm9/nsY7kX\nWf1HFl+7nrM0dvuqapVbMxCdOwVUFY2TqRFyVplO9v7NnU3M2h6+gchC9objFJN7\nX1S0LMJBl0+Gb4nzk4/2nfDI1zafV+H3jnVs0WbsQ/uGZnXP/qCNUTGIz2tAUEbu\nK2y2O7vqE4+JXTuQd7RnnsLLw/AvhShvp8B+xY0cgfgwNnzVP4x1Ln/OpadA7Q3x\ny2mAvSECAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNmQ9KX434ctNyBgf7b5KZJw3y8iMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAiJdf\nEXAPxVUES+v4xB5AQVNL3+9e7RT4uwb/YcaFUrfY4mAFvBI2QlozaQRzAV+hglhC\nwM98oxMWvxESuvuBg3rfkC8bR4hQwFidWjqXRhTRXJkLy7Nz8RTPjjNEy+7J5mJD\nlbJV2yMoWilDD/nc6HNpVT1zIlBBPAi0De8ifkhQnwbKFD0H4mJPX/evu7/XdvoK\nzSmRu9hN35U0DavVh/w8WdyCJ/4dwriCOEYHtsES4ml5dxbM2CPNtn08HXTSU/re\n7bqeCkZiAnbiMJPwKZ2fS9DF1byByeuiuw1cWA1WZyWoGE0IrvdLfYshFB2xBsoP\nlTSHGP6J+Flu6mM3FP2lHClsICFD2JyasFz2YCc3FIFC6hCbUAr1kyr/Hk0wVakp\nTF+lHB2U2FKHWtGuV4wFvZn5qQePkJy6MDU8sn6/e20jvjthbb869pQ3jacK8E61\ndwvVnm3JbxC/rrFuc67dh+t0Z6X6w6WJ6RwT8/d+JF/gakO2jp4CuMWwimBRfr6w\nBZ0AOd1f7vXlWOLQ0im0DlkxkdL0VAcVdf0qzEi0svbKgGPyqj+YjfnHDZw9nUA5\nN6jKkuI86Ah2D9Ot/UUDuqnYn6kToK8htYgCqGb43Y3WI0FPS36oxyKb3F5SazLu\neuWg21bVR6hCAf+us2sQ1fBCS1jC1emRT2mhsss=\n-----END CERTIFICATE-----\n\n\nWUS NTC NAMEID D659BCF0AFFF2284AE8AC274C6D91215AED2B62F 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqzHBccmTweoLgAAAAACrDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0OFoXDTI1MDMyMTIwMzA0OFowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtRDY1OUJDRjBBRkZGMjI4NEFFOEFDMjc0QzZEOTEyMTVBRUQy\nQjYyRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALn3ILfyT4Ch+Roh\nu6QjznSj1yLRZMEca8vUCs03xAHph2LB85o1UTJiRBkqW2Bd7PX7bjoniqc4FmG9\n/akc6G9EjQTquC5QRE0Qzco2vZBWLYi0ymH8VPOveEi5h7BnD/4u31VCTqfIQ/vx\ndwuchdftYEzC5Z1CjbBjgLOcMzK6uPZhkKjbLeGJv2gppPNJUU68b1OJzoS1PnSm\niWlIb8OTvU0I+ghbp/ylleeZBWMql1FuVC6wQfCEycwselvK61CUWjahD3CXweMe\nM7UOftGN69ANK4E4EUIp0xR+fqdh24+b6i3CBT/RV2AhmWARD2HT5DR4zpiQXHDq\nqsqhUYA6sK0wyXhkZd5OmnNKCf+Ya6ZZW3ecfR4wLvJLdOcYws8VikB5iF9pVVyL\nZnl4Gf0mkJEgLGKQLppo9Mma79SdOatlG7psLMO63E884pK5y4bxDb9PMaBgFToU\ntLzLxcD55KCquxCvx8a5UD/JcJtVBgQlAyyXbmqn2UcBriA2u0G6PKZ4um9nWmJh\nN9ZHpAz9yWbuJeZ0psluXKuq2mMX85D+FTqt3mbvlMieW2nKK64P+aIHpnLOEqVL\nk2h65ECDqguZAWxhvhjIOBpOXDjWvhsbC9V2y8Y+p3PiNFfFytwamaLAHm5aDocx\nLT3F0s5m2KVJ/wAkrVBMDsqauf1fAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRN0plCjSE/PkiQ\nRw8VSPLstft/aTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAIqa9zJlKAlKSMQ+hQY/e5hdmx3tLL3cFFlMmkHIQYmm\nh/PpwJ7KnXI4LvP34QJRNYLKzhu2dA/HHP4aradafzXFwPgePwzHGmXiOvnW9cIs\niLllyRsVsOnGmxo2LzsbJAVQ/ermOykoc+wj0rY0UBu6NVmCj1/JHvhl4Mq7HEIe\npA4kQ/jf1/mXhuChHLv6STjz3TgQDp5vOjVh4iEdIWZ3e9T3w5IBflLCD5/nn3lL\nJ6+eJe/hbHAwJJSu68oA74uZS/dpR4vB4/kKZYYYy1ViUjRRwDwZbaUmloFcb6pn\naSzd9gUgFi4Q5EeAYUuWKHc/TqoYWnHlXejDes2Zo95ygUfpJBdcY2zoM9YTDWxC\n0p4by6BFDGk2+fBt/YnoiltNC6tgXxML3ngJd8mePO7QepiA0DiSFSlao3Cc7gtL\njWPkquI0DA5iPl2VI7Xah2y/WKZFYXrlLb0DH2D4zZSfDU+rqTBjX3X4Th3HqIK3\nD2EL9obr/CxuqnXLmEVwBlOuEMmwQlEAbllhe0b9BMdfQbMpNRCvGk9vE4jlGxjk\nLWv8BUYeRlliIWqbQRHthxMlPsrlZRjq/5XmRhBx5hWwSRulcQPFurHNVSidpDcU\n62nzKvMZSEoJ9Ujq0V0XjrgApXBeVMnGEOoI8/BYUkvbP2/ls8RVkqi3cgFJlcUv\n-----END CERTIFICATE-----\n\n\nWUS NTC NameId 770E974ACAF0DB9AE67E7B6F5D410F9ACE2FAD65\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAHQMVhrfQirAqQAAAAAAdDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MTIxMDIyMTg0N1oXDTI5MTIzMTIyMTg0N1owQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtNzcwRTk3NEFDQUYwREI5QUU2N0U3QjZGNUQ0MTBGOUFDRTJG\nQUQ2NTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALlMyx1CGlMpkDVq\nVJiuKvBxT7off/0+8J9AFVB+QgnENCSdH9hRSfBebtwJceNMKAuNMo67HOV0Y0Fo\nmE7EStFZNRzlbTK33i2jz9gGmDDE3IvsLzvfh9J3FmzRcg9geAocR1aUljpb06xT\n5Y2AxGCvLX/boHx0QCwEp8+U48IsKC+ZD/liScTsF5DIHJktcR/+yBLhjUaQMilL\nui8pTjfsT6ED1WLyXDJCcTmTl6EkDASrdxhcWIPqqNqHAg4+mvEePSQ7qnmFzEKl\naJn9cKfV2+pgNGzHmANJ0zc/ayBdT2TW7Qo6KdwaQxZOUVyxBE7GTMbKgaKC4Nd+\ndn/o39UCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFNXo1qbjCoF+9OMCntVRnSj6+uZpMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEASQwb\n3GeZq7XrPAZ9LO/tYin9AYVPQP6eIpDSysX7N3rv5ssM7muvup1VwSV8z74NWCtp\nDYvefMWMtnLCS6bHPq+wqZI8HTuaw+T7aJSEgU4dRQSu3wdw+TaNwfo+0rO+WFvp\nmBWRE47CIJBW3lJcqZSXB8KX8/ZjPoDBTC2bwHmAzIo9+jfARn+0246T73OGQoS8\nOXPe9Qjhpvqq9xwXaWdjlsVu24I6B0gjG/ZuMlaXiASYE181ByCh6gpBBPDV8crF\n5ab9rn1qfZ9uzVkkLeWR1MxV+lBY8knkRHLNSFr0VsVfxg29/ZKnV90L4Hm6e+KT\nnETSDFs5KxVP3rtB2Tx/myJIJxbuBOxNbv+VkxZnqlSXiDP4gAtA0+lsVMxm6rfZ\nvL9ieupAhIeuFzmviceMV+utf01HOv47pL/tteNRoV5ycV108//49crjbNc9psoj\nICsNJWVCX0hPo0y6J37fy3zcVMBpsZp2BcDlOcEurmBsu3uf+RomAmUgJWsatLeK\njLzhFSsbGN+hxRZLX6/Z0YQIhmeYgWDPkTfBWI+tD3OdwvJdyrsGPe7HPFvGHd4w\n4OFXqDiZ47Mk8yUkjx4KXOk88PWnf8J1i4fta4yHjaGjZ7PTIqa0iFZqCNzxeROe\nrCMN+nluNOW4WPYkUoTogcMeAid/VVOevG1g/ug=\n-----END CERTIFICATE-----\n\n\nWUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAU+jYlrTAJ9KvgAAAAABTzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDcxMDIwMTEyNFoXDTI5MTIzMTIwMTEyNFowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3\nNUNBRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKuyyKGVxf58bZRg\niUfalyZgj/mwgY2+4LBQUAVJ8aJmelU32AKQEMrdwXb+3yBvM9STtmIwj3IWpFmW\nEbR5TSSeQ+PjcmRS4MMDXnweja075+ZHAfiEYY6AUmuKuRH+plomCWBUHpVMhWDj\nvaUzV1bST/RhYK9hLGJcRXD3qvkj6Gd3kjYlUHmoRVKtZvUxHO9+a88gwpAqIaSy\nnT9dDQQ+pYkRIp4cycXxxG3UFyscA0VlzSF+qenh6Ij6kDF/3E9ptg4UIGkfBE93\nm/kci2KczdegwRmJ0v6ExMpNYeOz7r9JhAlaSaefB31wqimfjuS2LNlXzKC/+w1K\ncY3mOkUCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFA26rbhnijlJUpWimMXOPyOhddsSMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAZLd2\nC07p9zCZzboo6u5PBMh+SuACjy42+6aRup/R+9KCVaMczZiYqMwc8mzZqHZ5jbPg\neJ63CARIYwTmvO0KXg5LfGshAFZ61c6PaYVtRxXggwy7yDQbkTeYlg3Zy8v/WKJP\nxMpIFY6HE7YBwAvweSdIvVNllvZ06qwC2+xrlirud4IIUSssU/LUlXevnu6KF4+Q\n6kbqV/GKJt9GMN2D7OoRirFfQMJRdIXtzNgC78fU1oq3AJBc6RoVzm9gccs6rvM9\nmQRKqnEeEiiZiktoIuiWJSxYsjO5tQCemQ+Uiyl5GLFp0AcM+dzhNBRsB1Z+N8rW\nvYqObDWE/21HFv5E2i7J2BUtCxMcAYGDAmph5l/4s7yJv3AYZrrwWJP+Nl6JKchx\n5CgbBiOufhRqYx23cde9WLnHzpjWo+lIM8wqVL1+rGbiG8d8W63HMT7jYAWnQnNZ\nqsdgt4q/uzdmNmFToQE9vrfpE+MxWKVubgHaXqhJV+4AceWFdfvLfZzZd9BgUf2O\nL4wSZ+hRHqMusK1V/6u8TH8/UBYmmGAZnQvoB63zW2JYVKA0n9C20Xf6cuOTSDdA\ntTAwzXYhFziOwtz9H3ybMQBI34n4l2uDWa5+32VuFk6/I5DPDPazYVfBLARw3w9W\nJutiNkp0NcCDOqcJhIP2lgeufNN3f3udiH2yDu4=\n-----END CERTIFICATE-----\n\n\nWUS NTC NameId 91EBBB7C51FA7F78AA3D44D3425B1D5D23975CAF 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAqmfXm9l1E0MCwAAAAACqTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0NVoXDTI1MDMyMTIwMzA0NVowQjFAMD4GA1UEAxM3V1VT\nLU5UQy1OQU1FSUQtOTFFQkJCN0M1MUZBN0Y3OEFBM0Q0NEQzNDI1QjFENUQyMzk3\nNUNBRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK/gG2izfHM+ilJe\nJV4mODMSb5TQ7bGtFYkICg+7B7dNx6yhMmRMootPrpbdL7aozRVHqmIuCMXNj/Hv\nOpBOtkP7o7ffKN3jtbIl08BAqjl1HM2Q64VikWdDey5vtE498bky8uVXtzM8xzs8\nY0l58lAwsUzYHlVuPRqYNGjtNbNrGu4JPWLkykGQy/ZqBRNS6aXMQeKwGOoTcJeP\nxurApxeAe/GgM5sASbJSyk33q70ZZ8BvLee51vnDWCA+W+W8Zwi9zD/muzFpyKrn\nz3IYmdxgOa4M57ZSXuGrlix+Pg4Si4tfEH3FDg/Gmp+n8tztbMsxssjqh0s1GBT0\nqJA28juQiJI9otxCVAXMoUnuGl1kbEE+42JL8VHl2zhA7IqDftT8qKCLZcpEAFMn\nDCkEVNi056kCh+DEkiOm6WVZXRrbd2mLQrBCRIXGUWUN/hDG6IM5KmemYrcggtby\nLUfwa5NBnhP0WYTyzMf/x9M9ptJHw44m2r2FFIExIeBIZf/VAipou9xQ54DkWoSC\ni5oC/Ti1F9RyuRDnXhdSONy8uBpbuVHQQCFeSpaA1I+fBYRTvQTMD+xENeXH2ECj\nlal7R1d2+DTDwF2EBhSvK2fIpBTCpYGudQ9RkNRbYvB0XCxm+ErIklcJmN3a1bWo\ntc0JIcIkiSRhTJh7wpbRfRdS6PsNAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQ0GZzu4YJP7iyz\ngyAMf/T4sxBvezAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFNL70Re3JCaFftJFuK95ngGZYBlz2+9jffagX3unhdS\nfrdjj+Fb9kyMxvE1E69kBZ+RbxojxLR8HcT+vOialWze9J1o5iS76O3pCPX9+fK+\nXNYI4/e/PRLx8XGijaOc4qWnW33oNMKu+ur1EI6zGWmsPeTBn+9pwCG6OFuOF1lo\nYEzG9ZledDpnQNVZ4DAsu7kL0lfzZXVUJfV1zi0WNQ9gwj5gfmQWmCNcyL0xqB0a\nyNSKxRPiye9VvY8ZeW0sao3X99umaFxaWkEk5r+eZkOoHk+Pb0IX0PLbELPpbg9z\nbjnfZs6YaL2uTgRHi3n6ha81qBFfigWjEuukNjbSpQ+hqOZ4ogtq8W/PcjoWTdAT\nLMhXxhIYf9pMYr3F1hVGsaTu5UnZIZIhnBAwTc15/6FsIpQ3D4KA53HvdKhHx2h4\nSWj4MXlUepxe9fFHn1QYLy0QtHGUjY0IYkz8lZBAmkt/2lPhUys7YU6AkvxOHL+0\nZ0OdYDISPSm7RSla1+d16sJCAF2Iu/RN9+T4btpy+3BYb4ePXYWXnb/aFpeQKRHu\nuBk+PjpyLr3ciYO7xufwcUMkzrWveE5Uy8JLuKW0zw6MpwkYqWm+DK3SHihqmSU5\n0v0eh9StZi6PGS+O51TLbP0pZPPFe6EpVflUsnf/4pXQciiD4Nztv5x1TPJgDn5W\n-----END CERTIFICATE-----\n\n\nWUS Ntz keyid 022cbeed5d77060f2833e9d5376ba8bc308cd9ba\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtSARQhbVHURTAAAAAAC1DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIyM1oXDTI1MDUyMjIwMzIyM1owQTE/MD0GA1UEAxM2V1VT\nLU5UWi1LRVlJRC0wMjJDQkVFRDVENzcwNjBGMjgzM0U5RDUzNzZCQThCQzMwOENE\nOUJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArvWKbkjy1Rz+fjyO\n2KragJAv7+5PVdBhqe9EboQF8UuwXbOLX7cEMMOhooLVlCHaW21j+eFUYRphYSK8\n/L8Qs4Fs8+VF1UY9M2DagP5vN7Xay/46iYVinbD5v2SxhMW9JIDjQ1GmQgUAMVxi\nPME95WGc1sJSiTI5TjyOEbi5b2N635eU18VCtMvLSXn8IcucoB1hJUA7PuTifjAk\n1B7T2r7wIZ6x4unrWI6+7AXayLeHn8oA/5z94kImkTCj5PNMokP0eYbO1LskC7PP\nNRVP/8zsyLWfRkBEH53QTvurwS/oljJ0x7WJ13WbpBgmCb5grIqYxCQ1uRpcUYJZ\nTC5AfkfpJlCRP7EpjNxfX3rmYtxwwO6f9uctxo5h+s1UNnsrDX9gfPZqCH068Rnm\nbQinK5x50lvnTEv7qWmL/AR2kryLrnIisnbC0SsSxqLUOGweoZXkfCiz2Loydym8\nCIQT3uW3E4+nPIa5gHCxpHWIg4d0oGzqPExPh2udFbbIO2hzLr/c9+tMyfTnwymu\nXopsC10v7Va5N2yBk0w5azjVSr1be/5sl7ur/hFNcD5RgDupFSRRzOSqoAOhAfUF\njz7u3cNmseanl6QfOeugRKyFafUrm8uZ6/XWRwwbxKu2CzZmSV0g3gWbe4Z3I8mi\nNH0hTeTBMfY9hiOWRtgvfdb9CPUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD5yRuyWnQU1Vktv\n6cmVDEqhfhpjMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAiI7Dh87VdoebsA3XOBC6wGCFmX4K4kezHZQS3pDgAoJj\nSV8ad2WXP7rbKJysVpJmFZC2i4Vof543qxSwu9AHkab2PIdGVmFtLRtdEQV5dvXH\nPXNqqstUjK8CP51JRY0fSvQUlNO4nnyR+tX9pRU/ATI8MWrgH6WwyWURvH9KO7vh\nRr8ypP7tZg4l0HJguhClTgL7N7S09GCF4ZgDUDRHI+qJn6D+q9PMBiC/A4Yz3e7Z\nSO5BHXf5lM7YGQ/y4gFqpb33xFLrbuDCw/YmNeuReugbla6EKhte/XBFaoivdbnv\n6QT4UHhOr8lhRn581kWCq5drBpATqMJRZ+kbuCziQ/4GArVDKaAhuhAtBInO7qzx\n08tlIlmlRhEod5pVzx9qBudBOOpUYyb9zY1ICRF3s9z6x/hhf/Agl0ppqjWib/Pz\nZF6sLwXBYHb+tij7ztZScEV/uQ6q51GPD7U3GM1oFLGgQX2zPfZeYFK7YxTLQ4+z\nK4M43IhodzbwI0LUS2Gi6dhm0Nl2+OOembLqohz/O8ALLICjrSpCPG0R22wpb32n\nu2Vc29I/RgdZKG6kx/RilwtogGG7vlGUvczAU8RptwLli4LLmASADPkRoEfh05yx\ns424hiV5nnZeEWjjVxbrDSjWLn1t8G5h9ecuftTAxmBp+n2uBtZAc4ne1h+rQj0=\n-----END CERTIFICATE-----\n\n\nWUS Ntz keyid 03d1cde438ea3db34d943181c1cd517d688062ef\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtMzccUWdElmFwAAAAAC0zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIyMloXDTI1MDUyMjIwMzIyMlowQTE/MD0GA1UEAxM2V1VT\nLU5UWi1LRVlJRC0wM0QxQ0RFNDM4RUEzREIzNEQ5NDMxODFDMUNENTE3RDY4ODA2\nMkVGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqgU55dr40st3eeq4\nsgK1LpjBLu3i+DeMm6aa1NJHUNIVz8uuA4FuBinsQ8TAkjz1IOEVuJT0DvomXU4A\n1um+IKDXcjMSflt1GnjCaaJdGle+lT0Z4ixk33hV3r4BoNQrPRzjPvSIHjBUlT9f\nP+CcgwNfg1VYhUphV37+9xNclRODtPsIFdwozQ67hLIq7Spi062I+a05Jrf1F20o\nw0k212MKN1LQQncEYDfsRzir9dnWrRYt7lt0FdSExeQCSIVkKKXhnqCPEL6s+R6h\nHKyzsk/WbUsdL6D4tl+MW9nJiN2k3vAa3DgkEQAvZsH71CFR7WOFDrdEdGdVbAgv\nG4fdCBwJmaKSnFIzK8lZGyJZv0AXwUlJjeugFnugDI/crUdBHkqUv9YwKY9CcM0u\nzZjzefQRIb9OOxT65Rt8a0O2aa30BbCzJoL7JY2XuN4GWm6AKuMrLPB0gFOxUQTR\n9Tk4KXBb4wljXATd44nSC8QFfwjR72xsGKM388cmwCgMYjrQR+IzYK5UkDL6T1hS\nkA2efYY57Eha+0Rt3GfVvD1t1AZlCC0+S460SBo6C/IzWJEDjNQsYGhMC2q8LcYf\nUqwhXncODKw2ExTwtJKw+5Zt4HOngs4aQ7d9GzmLV7athJ7fKFfpgFaW+s8gkWAo\nG05dFI/PCAtLl7tIcYN+/pvARbkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCi2vk3YGnR9Gu+C\nkrqHQataLMiuMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAP0Yst7WKVtYFU8GRxWnKMKiAmuBJBSDoOT93gCVt5Jxf\npZVkxQ0q0s5ugnxqEnzVtE4Op+3ENaRWp1mJfM70aQpTAieAxsne8LyHtDUu5fw2\nKFN5g1GeROVEy/PSSZ0oT3SLu4YJTRtAZJ/0Lsqo3ID+ZCe1r+TxKu72ZasEJuDV\np/YG96vwKNzhNb6PJ6Dm7lyEx7kgmrfU3NcuKTxhlLcEmKcxQdIuhGu60SZpw1KW\nUOZ6z7+xzsAX/TW/C6lyBK+8DfKQ99V+80QFwHXsM9cerkdMz+1AaGv6vUpXNOxt\ny2MtBfcf61TwRsi6yWGAFjfQl+LrlUtzU+hhRW4NCj64efcPuiuLj8AlQ4AKOBvq\nMNqZISAZYFwOOYtbt/JLuWt1+ww9B+df8qZgbBrRCNL0FqpCbUDrMFRo7W/7OiKD\nsT9IcSd9xvTxIB9arrQgBaSi34VyVsSYCX+Zdd8JSAFsMHABCg9UVdVMbs5Uu8/W\nxUi6CXw6sqIQ4NhgeLHDV96Z6m6AnBk59rd4yj43hjFP2kVYOk5fv0Xpiam+Ma3m\nMKGuRpFjpPHweabtwMc4gGNjlDgaS+3sMlZYFNimce9rFv26UCkPISArAIfUGR+Y\nRIFm5jYHzTbkuvgpiOP5zO6cQkrXRkvLdv5IJUsqCcs9+j85Hbx0JUiYWwru4bg=\n-----END CERTIFICATE-----\n\n\nWUS Ntz keyid ebb2f4e312e6529c4ed0cdb68228580ae5203d45\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtWqvz7tmSD/ggAAAAAC1TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIyM1oXDTI1MDUyMjIwMzIyM1owQTE/MD0GA1UEAxM2V1VT\nLU5UWi1LRVlJRC1FQkIyRjRFMzEyRTY1MjlDNEVEMENEQjY4MjI4NTgwQUU1MjAz\nRDQ1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3sGBNsDe1jbO/9Iy\n8XHZ+VbOEGa4BBzuCr+fg4tfsiQ2qeDiqM3bCF48ppSIAkPnBH+KgOphD+DvIJMs\n0Ys83gNAD1FSPATuUnrK8allFSop/VSLHzCrOUNtZ0FQLqkbJOoqbT2/ykMyPM3M\n7Z8OPrgdWp8Z1nlqknFTummbzNCTqymf8VDwR6daAON6DLvJBhdw1CrWNq+edOir\nXEzVZV0R+BYzeHHInneaW2Rfyztnp9vdl60hhZ/uHC9teFM8aJY/OwVOE83pM039\nFSK8vuI9ecBEQEVATnagXLYC5IoAdhAQHoNMQjxHoSjRpcTGKJuiv8rY2USqzDX7\n6zu2JPKfqr1TL9pSCuqWMoPI61pLVci17GoAven7nyvkdElkt0c9vS9ehxuoMBaF\nD35ndSbWilINAlVBxxKRvxXuTHLJu9l4W/x3qWbxFEFzCbwuKwCW0GBJNLwrKGub\nSALKYHs2qnJf0cYAmUoFba0bvWqKsieIh0CIJXw5ea17MJAhIjU91Dm8uNEA2qN2\nTLBu0wxxI955OOTco73wwlYPM50ASb07lfX+oZLc8DsDAiA5HEXD6l5lOQYKwfoe\nbWokXT4OL9Pr3sR5vtkD7KQmTa1d6RvRMzLFE0DF2SxgeLww3rqQR3CTbYufyHMN\nN35+y08cf1xReS+/LsaDlIeG6GMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKlsrKUa4u3f1XH1\nIjokGoUQib4lMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAl4WDZWnsWJDfXra2tXLkLbZfSgPAPzry3AxBG9bYMq7Z\nHpI4oxHmTBYIIVBSz9Gd3AzJWy1rcr5DYaHxAHOGiYtK8d4RuLlQi0QNhW+pCIcM\ndb7xhb+OniEPXZQEkx/DEa05NsSKAd/kiVnJCNaPOq48+4JSK+coM3XMd7Ip125N\ngNynlPJfTUtc3JVyADrOS4NLd8q0/yoZAt7LxpAO6nofKl7Ib2rowVRUFVoRBiK2\ntyL+LWPD2xS/es0sSGw8CgX3iXkac6pJVR3hsCfgE/qY0wJvNZFcEYnfaVIbivwP\nh0Kj1CmsM0Ol6gdDruceq9gewv/VymPV1vlrFJH3RYLWmDk5kZrHE/FvvX8GrAkJ\n7WsQSZPR18rej14jerhcxjbT0HFHU0vqNONdN3UL1rBxp4CnaBv6ENOsRr2WIQoG\nR4q5uDTIaZuKXhljXFfaOza8Ai6jPqrgzR4wqf3KzKX4dDuHA66qq8h3hRX72u01\nJiMr3ww/LiAarMeDrks01T2USx4ahZ7m8gfs85sG34voVSx2XsQ9ibYk89otK4i9\nLL3akTkUEcWVjVRKS2jE1+/YBtDvYqMCQItrCpt80TCbHuFjcnY6SZERoQNGGy42\nP8nfrLgFFQILAlNR4UbDoSTzTjjJhUZnTDJ2pCCcAGR6NlDoPNIiBySeIkeoiLM=\n-----END CERTIFICATE-----\n\n\nWUS QCOM KEYID 79100C2EA35C4FC14BDE159B56326FB731D1D512 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAsCzvtkSfoCpEwAAAAACwDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1MVoXDTI1MDUwODE3NTc1MVowQjFAMD4GA1UEAxM3V1VT\nLVFDT00tS0VZSUQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx\nRDUxMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJOt+cKqDFZNxEkF\nyEAE7DV+YLB6RDGAO+mG1Ed3puDRkiMl0kK5uIOW2pDyIgHy2qK8axPCeQFSfQsl\ng0qpQVVOqhKer6QffpvAYR28XSjMA+c2zMyH+PmXpdVp6fk+wUbwXhPGW+kgH5s3\n56enT03hXelCZB5zQjlJnGoIKkZ4ebbgBQn6ybe5A/Aw9euT7v+STf8jqPSbPE6Z\nqJanmkIWbzlSEpIcf11/vwZPR33jgzBc3x2yJqLiZGX4o6gNo5zybOvjt3s1Katn\nMRCV/N5W9eFGN05hAldQFFVzB11IUxzZg04DydF/bIBYuIVl62lJy/OqRuDtL4IC\nz4L35j+/ABTYRkXPHpOdnHcy/wrRqGqeNMXPENtBYJbtJ57EWwA8siR6XD0U+YZw\nX1U8TUts2MxDnt7nudAIVIawJ74SkB6EFvK3P/jKI0GXJqPpRksYryPddDgLAWwL\nfDYUB8x/SgYWwoES0KIWq1ulq4syi1lhCuUhf5eUfUTHTl3mDsDT4M0/R4uuOxiK\ndMy60pDCIJM0MRKDqMY8T2kSAUMm5QG+Bw9en1L9PQPd3Ko4iMIVEoOIxqtp1yVf\nsmsNvzMy0Fx19ut4eMHvQI37XAg5n/dxsiEDUCk0XcVf5v3UNEGeT/NU4lqMMPVu\nRoQyjJail0WI44YUa0QnbY1fao+HAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQxgHd+Ib7xVqPe\n7RacVwPSra6g8DAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAEF0yflwO9TWPnWGLntUp/R4Cmv5/W6ga11rXPqGF7Gb\nizqw+sEDfl9Dcd99TydgWWOHJPWxCcBPlUppH4fQDLe+kvllv5EZuj1xTuIlpJnF\nmKoWqwIs7fcSHAca8kAVOD4GGaR7buZWFwfJNPGgGtW/+5kuCVhRrT8lYihGDJ/z\n5nhW8KgRhzrBGmUmaqfcqwLLnSPpkyXkJVVqTLO+5GlPgy1niiBlwH2KXndLX/vF\nuXUwZ+rSCM+qzep0RJ/gb+oGy6ZCC/hZR45nR/gA0e6Fq9Yh4ZqHy/ZmQV3BWyod\nh7kASnwDChmgz4HeOilJdLcuVumrOOO/czgW40nbx5yMYWhkFt1W/zrdtGBzWSW0\nNxh4SrhG60mtvk/ifdVwwiinztUhxuXhzKZ4+ODtKzFh53XAl9/yJf6oLufjzVgJ\nC8wLy81U9bmOBYwq+70NUwdiWDtVrPIUeODVxQx6c67EFhmt5hwv9sJeAh1emkPC\nB5AOBr6R8M+CgG/AwFQK2+6S8Spi3iTF3jZ8hpB6yxSYG9e+A70INvQg0YWqFrzS\ngvM482CFWP00Bs2g4UkURwJ7saqKz+LL4BD6X9r9pwlctmbFrgr0yVzfKbPtFmM5\nwRP3WbWg9ereULkFKtHxatfNyQEcIpY6pcMVhVw0LPfkKWVPDJvThkFbnSkSYEco\n-----END CERTIFICATE-----\n\n\nWUS QCOM KeyId 79100C2EA35C4FC14BDE159B56326FB731D1D512\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAGhNciIJL7QHyQAAAAAAaDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDYxNjIwNTgxMloXDTI5MTIzMTIwNTgxMlowQjFAMD4GA1UEAxM3V1VT\nLVFDT00tS2V5SWQtNzkxMDBDMkVBMzVDNEZDMTRCREUxNTlCNTYzMjZGQjczMUQx\nRDUxMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALbcdGVIUiqxCxtG\nq0aG8MIi7Zzss8oo0ownGv8S/NCkc7DMxI6WevHJi2KdYvDv2TosX+LYxB0DznhE\nvrdeG2lwLjqeQ7l4EM9iJ0AmEXL5o1DPsYnj16qPO48+zRySsFeWFKg6viQErdqn\nwbo++WX6FDCsjGSs1PMKE5T5pzjk32ahfatzwEu/seQBwUEG4fo+Vtckl7qHOL9V\n9Au9GYDwuZTP8V8Hc9ZzZA7b0vfPpMnE9dZzJMK3qM72egxhOZA47zLO+Sbwj6yC\nSsWMyqp3XoEYI0UdMq88DHWKMfK8lW7PPeN4ebb61777Ep1xEwAbBWXdvbAx2mgz\nyOU4VQMCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFMWivlRNXbYK77yzvYFWA6lPPiYfMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEAQkuP\nVO//FCn4P98nFHkUYT1Uz9q75Gb3iaczsxQydmKSRnAsKMa/ne29f8Kmakxe277x\nEdXuLkp8k9n4JVRK5d10d5Csq99dKHOaPGebquaRbP6DNsryfI/OasXnZZ8DL9fQ\nBAthBzeumgvkxql52R/AaNDvso1TN1rvp0GoEp7eN0rdqcR4fs0Bl/gqpR2fQp5G\n8gmX/zVJSR+Qzyff5xehGRfnfdJJDfllihT7XyE2XqnG9U5EH2kUH14921UFTJPi\nJnFXV6mKToiFxaCG5SPx1cZ1D/7cLTTLuWrDYU/U9Lu/Zcdn8YBw+P4lodfKcECV\nNrUT+y1JiE6qms+ClTcby+u+yOB6sdomu+5iPVoWrRoOs8//yN3AoilttNEFA86B\nkJGiKTByAs/5AjgHXX6h9Cse6dTPR5SsvdIjMnzvOtkQtG47ADZNEGD1fkvt5xxp\n+1sQwLrFG7z9PI1IQng66NIyPyFoXy8tFBOUmvUKkvRY7zAaOoj5ZQxx4ZYxJRw7\nDb6Y1op6gny/TL0P3UafOQTPA0Xwi0ywd/o3uXUORARf5tJakBiso/ixuo5NDfrz\nm/YdjPrgFO6EhWl5lXWIByhNMRzsoz4vht/lHbOw4WWrnNt8bFKIFkrr/JYzdAiB\nRj9/0zBa+DnRHnGPEEcKS6lQTjU4okfxiiidiAY=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsFZN/Zwt1iAXQAAAAACwTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1MloXDTI1MDUwODE3NTc1MlowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2\nRUQwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAumJx54bXZnWfgP2+\nkb6JtvD9Q6h8fdTcxlKBZSX1lywXvKFuJ1igV8SMkXyYtJH85evT2R/XqaSpMWxj\nsQLGBSYO96LA2iQM4pax/j2ExIw4yQWbL9QKTUWVzAiHnoqHwegVnFeeK4eMoeVv\nnc/yH//3eA9sgqGVE2OxKcMMSo19lG8K3UhcttaOAWhnI4ZUw1Rt6LaZMAQXPBhw\noYAf5raBkyr9hYTBEdrU1YgUx+42262EDApHI7kw7Z3ckHZqXeikZ7g3tv5oxi1O\nQBWlSSHErHCmHlw60GyjH2oYlfKfFA/1oUvrJeybSnRLE1pjSh3Gjnno3CDQ5pjv\nfucITZswzIdUSUXaSdTZDrjFbpGt54yQBLuhyeRs8rKvIGVNS7e+SrDSgmMaxM2R\noN9F8CmZeuhuMH+ejA+8snh7q6G0x8VCdqEidPECTrAoXKKqHnXeimOFieWs3aZt\nP4wsI3Zf09PQpj+7RNyZ+hmzTTlTjy40rTH4ce4ruzUuaY00VVSmY2VyLdaKtf0D\ns+nkkPC8axTIamUVM52eMvnCHCNKnHo5thXMvbKf9OTzm2bTlXrFyhjKhOVpTdy2\noE1DxDqZwVrWlJqG1Jjt0TTNmrw29TZljCvv1sU5dNugn8Jq0HBZVS++1PsXaabk\ndWgFmRBLRap5uvp9XmH8kbwhPpUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFKl6jnnVt/MreOqH\nQ/DXwVCM6S6hMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAS/VA3cHmmeJTqMhEtbnyYWGPYTTnUKOJPFq71URJIDql\n/WRXYiHx4EO6Pm0HfGy+kQyZ2hXPWls4ll4p4scXr5mJVwt+jeohW/dDYwJjf84I\neOzEJbgORs9JNnVYpDD2WrnqpCjkxZY5lGyfEG7482OrRgsESyrLWj8m/LNGMsBV\n9VpTN1wiAwVVjiIx82htF0uVElqS6g8EcwsD5p0EvJo8MGEQThoQ0Rgl2Y3k3hj1\nHAGb/iKv9gccxwlqGu1/tllvmt7iCsb/HHyLu+e3KRkRkTs9sUPeb8Veg8WxPyNE\nfcLYs7InquS+5ng8eZHyT2JQysjxGmiH1Wih/Tu1rIgZtEnCxkAOOQcGb65NicCP\nl0DvCTt1ktw3cRd+6RPy4sqJKUxqjcGUwRkmBm83Hcrur0u+pgcB7fZtRgxr+LPv\nj5rQ5N/ayW57v8IBYsXIlE81mROyJRj0rHEqfJOAoRv+wO8XxxanGw3QTZDuEa+m\n9j7Cw/PQHLcNfAsDktFIyNx++dBRjcJKZ003Ok0nF8zicbqqIewuNeh4ec+ERzj2\nUhtZzo3heiuVzMaeMSEg/r1CA+rscUJty/rB3DGVkTVAEEoRw/31If94XGPt7/B8\nbndHGM9gFQA2aJVYPdgbaJialex+EMx+kc2nNyNV31cCRN8PWtm9MY42w2iZ/Y4=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 08CBB05CA4510B2A73299184EDDC9CCE42911211\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAulsMU/TfKdqtQAAAAAC6TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzN1oXDTI1MDYxODE5MTYzN1owQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC0wOENCQjA1Q0E0NTEwQjJBNzMyOTkxODRFRERDOUNDRTQyOTEx\nMjExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuLBz+bhARUWN8Twd\nMkKVwsxn9xY0Wu+Cn3e41gH5iepqVdKmWSfskSriY3FRScr8ZzNUOZSkYdXxNE1P\nm2sDPuW4dwJGEDj7YhZ65IN2vW518lUZGoD/D4Sb9oxW+R6ezb8986OTKJsv0461\ni14chTalONWm554yU8U1GgxzodXmHU0mw8JES5/7vjs9zX2bZZsgAixNq7KBBcly\nOhQgIyqtC/5MKRTFVWbPne/kPXmWblqMNnfayVC4iJxNq9a33EVsYjH2lN7cOqQP\nb4FqEht1LU+dhzN0c7oLeP85i8sUbzP6+NEb+QH1KlwexrJOKszRNz3sMVJeSWcF\ng3ocp7VMiP/vDJnxJJNo67rAwuCCQssZ911rG0cJMtIIWr+gXiXpNa9ThYeWq3Qu\nKfFJveC9sDm+SSfers7bWI4uXJjFFMi4bjd2ZurG4WMV3EzLL4yHMUnlz2xiyOLm\ncm+BZ/VGWCRwbuazSwnmB4toTtdMgSE44gEV1CSgTJj+KE2CIXQdWgEbFieImqdf\ndlM9lXbhElaa/u0dyAVrdv14x+HhHG06RAZsPASxk01IZ8pAsWav2RJK/XMZs30v\nmOTUaiFxoSr6HniENluydI3ateeXeJtTqjTcxK/nLais/qpfslSQ/ujzCwXhIKw1\n2ArfMf63xm+VfmNY2zf0zGfRMc0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJj7WOa+gThFzZVh\n2YRgKtlJmRIDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEATaeXHINPuZgAMm4WIhcabU3HpgSeQ2mezoC3Bn74mQCM\n23ZFa7xbFMjy568YO8DbR8i4gqfc5j4bZQVf0oQdNoIpBMtIL1cfISycsntyRfhD\n3MQErBzUm8STnB5/XVIO1/JLaFndOCZIPGXkeLZQIBd+P4GlC6khbcHUZfOjrqDD\n7jBwoFTVEh0bu25CHukuszgB0iZD+ei22oIrb7phCsd3QY6KOvH8SuAH3zAZHMHe\nu/U5z2j5lccOi1DGnAXf4m7DMn3zMqmXjFV8s1F4xtK1Y9pugUVye/yzdXWFTncL\n6swzptzBkZ9JjxYi8gzq4IONZWA1+A+7DPYzadbaMeCw8wvMMiE1+McwmkvY0cHB\nJSzsmfdzjxTz0q+4JKVDuhpzSYA60TCtpz5jLZou5kwuituHoJp8yAAiHH3mbJvs\nP4s60eiOZDCBgHiXbTk4eXn/Vv4eIS3b66NmOjqe46d6IDO1ta4FJHyHl0fFrh4d\no71A4wBGKFw/7hvJuY28BtZ0sg627t19spCfzznDzV2Uxrw1QV8hoJK49NO8xMTF\nr9nj1uOtwyHi5mCFe0p/LTEtorriNLaM9XvhI96JAy8Akm24fen8GYuB8a6ZuEdx\nRImUnFy4wlYaWhXsG48jMZI2A32UUfO6Bxi94qU9Kc5s0AeCRmqJNoEnRnpOzVs=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARi/WYYX9w9H3AAAAAABGDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0NVoXDTI5MTIzMTE4MjU0NVowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4\nNjYwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsoeWER7lQDnvuVkQ\nQPRbsLyFAnoU0c4iO6HVInGADKiTADA0lVausZbwE0YlTjEoXJQ1q/8I8YCd+cM6\nQ5VvGESUCqzhVD84tN1piYaso9FY9kssHXrwYBc634m0sbVr/szIyRphZgb0EVcx\nD0G6Y8MkTeszIdfqlnrxKoBCTOhrYYIKCDqOXjnqu0A4v0/FZ47U3VMPxjDx+WPp\nXHGRXJlvYBQB51PLz1b1KmBY0ElLnlQN9EjFrP2izP0L5vREpRQ70sy7aWpwEprQ\n4lXTAHT9YDbOVrqFZNk/HvwfbO2gcOtuw4GIGbafHFmotAlcZPkXeC0jU6Ul8iCK\nS2TtTwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUBL70VQYsgnXtwh9uK8g7wmX8NPswHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBHyco4\nKJg4ck5EYr6AoYhCR4R4sq2SqGlsIyVqZThFe07VBf4Gggl9lVraBotjMDmJeaTX\nJYqer29jplsrVaJmzwYT2MH5SKihY/JTbi2uv5ixbzjc+HykWxKC70f2Zgw40Xw5\n6Uz6LE19YWwuJFMBvTaQGNdmz8UN8cA5HTFpHXIjf7hgOLYHYcaztU3wx04X+yEJ\nGY4hyRPCur13KeXHR5KfKO/SAOUSYztDRuFwHqXac+N0yjKbA7pr6rGdvq3MwogH\n0MzWsD/Xu+tFEpEQhgMf9gt9z88mEXXx5y5mR4rVu/MhJh9qIiEVF4LDLAD6ybjW\nZi5Je2rC8XNavyphFJU+Svp8/jshukCZi6BbcNzsx2zQglmpTfnzLknwg1DyBI7V\nwR2TDerA2X7ENaVk83H1MPzQp37pBhKk73fVHMPQ2HVAvONbmi1s6v9pl2hSmJ7l\nv0NhoNX2ZuFf2kElclMDYvIc+puIfiIufFfk3FPxOi2yRzE6EV3Ir8nuifhAkej3\n1CcRQ0hFTuDed7cYyDTWNlKYpEUK+PWj73tfRAGwe8tDT7p2i6MV/GJ5SewczRVD\nWl1WVPN8vePEz9ca35IGglmcLVzE1oW8nhFHZl0jhDZCqfsKtpwUpECCoeDeViT1\n/wdMmpRVrSMoKAiNMR/MF8E89ioLTX55udNXLw==\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 1ADB994AB58BE57A0CC9B900E7851E1A43C08660 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAq2CSU6YCyQ30QAAAAACrTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0OFoXDTI1MDMyMTIwMzA0OFowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC0xQURCOTk0QUI1OEJFNTdBMENDOUI5MDBFNzg1MUUxQTQzQzA4\nNjYwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1vaV8OpKPK1OLroM\n8sd7zyHQAIzZIkFvgaq49Kw/vYBzfoMV5JmVdOJdrR53Z2/xUjiHAfMTMVylzxO0\nsFVc5wdqkUwONlsjhOWU5jchPF5C2Mh4ZONhxdu9ag0a5H3FyNjTe0csDNDx06/K\n+OV2PI0XrCiinxhfdknHOZGicHULjqLCpytfCdHpbgeT9gLSg1cZqlR34FLlZ8WY\nb6rIzDxHH18gWHw1xxWWzv64GZhxu3KC79R00MZAPUBIXvD1DF/o2lywHJN4kk9Z\n13AI27fIk+2u6UhoTGopx3qg9shPKeQld4SL0qZ7NWr5FkaEkQaPVnlp+kQUed6h\noZTma8jPlrUifVeIMyiVEpySczivThKhBkZxDDccPt9S/HR3OlbixzELWDQmmuRn\nUh+QUOpz0ggk0Osbg8gAgbBfXvfvo5ZSxQFDMaB1g/OHKAmaxS/dBH3L9K1GfzqC\npXG+CIlViFtd6rKqsre4CB6kMwLe0BGoVRTdWrwJLI5d1CaK83xzLiv2P6iFQiq6\nOKPOLLI0+izbtTKBB1N1e1ld5t5nPCq7BON0LBlpblT2e1cPuL9l/RbKNMKEz+2Z\n54g4N+QFbKb7f2Wcj8DcjtSJlSlWwTrmmAaHOFR7/YoLzFCm5FjCd0laeb9/dzak\n9o9SG17PKFNnHr4vR9I628aClN8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP7Sm4WTA1yYWhpy\nqCR2eUHVgwlOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAaOHpySO1cNyzWA7H5WSxNg0TTb3jvHODscF9rcxKwQ19\nWAC/G5TTWUKJcWzzbIEOUItocM60Rm2+tenk/HRRxb8GHo20nIoQ0oX4U6clpnQX\nctH0qVkSZX3UB8zHteeY/rsgEsloUHzU+jt5C3lZ92nZ5ZH0/0bWf0US4kUpmqZY\nY/6kd27+7M5JOHTIZ2tbRYGby1RqWYJ5eeibqUAKCzmP6+cDf3MHIXJYqK6OZI/D\ndxgh3KGGjX1NnEEjS+kGrwe6yibUYSE0/Nb96x+1wBrY+RkEplVMJu2w7TNc7mmJ\nXFZx0aP9jY62KjJ9s+SwcrfvHB2CrcqRTmiPvw1ZU2N+8UmWi4m0CGxxqqinzX6l\nTh/gDtr5sntfKSiu50+9vDdfRNrHoRMh49GH5D+MzIHlKAACheNd1GcDUQlLyk9w\nSO8tDLRb81wuxRxoxytamPkeUZ9uOAxH9E3PS/SpK5WoNaW4WUCaKhdtRg0rcV7Z\nO9pifZ9jTYwUCw79ayde1K1NUvb8CVO8JEQCaiBm8hAj3fZr4yD43+iUsKI2bQcF\nz4xPMSnTnWs4V5N7cjm5IT3LO1KlQmuql85bJkeMxOa1TX5odgg6FzYUYMtspy2j\nZS4QipkHrb7CKqoZjkm3ENG5h7p4+JnBw1bhkJOCeORU0RZyp4vupUJhDY1QSf0=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 571F806B47CCE79BFA35947CED88B8D1005AE09E 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsIPPpW1HNEcogAAAAACwjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1M1oXDTI1MDUwODE3NTc1M1owQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC01NzFGODA2QjQ3Q0NFNzlCRkEzNTk0N0NFRDg4QjhEMTAwNUFF\nMDlFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAppGGrqUvb/7DrRVH\n2royulbnme9q+u4rnIWtfaQ9ILSAnAt1JsiTSDGDSzKM5VWhx4gndBZbodD/ky4w\nZcw3pP4iANwUF/1EOSjUMTAzzEla9yPBz6BVrBbAWJfWgMtN0TUY1XWoGZ0FINQU\nJcNCK8M/v+/t7BQ9wNkN/kdaVAvPuiDasPSF3oCg8Blz0sOjyMB72urjt1qte6me\nqBuiO722Un4BJfXE5kKLU/4Rmz2UOmp4WBSPbptla8vj6CPkEnbBFG76w3miYJs0\nH9R6JwZrrGzDAobkxKK5IgVvzmSO7/yvRdaXiDL0V+SkUAl2nvoq70oWRtVhzyTZ\nZki6FnPVUI2O0Jzuk9CCwwBLlNBaBFasDKXUUmQ2K2nv0hQiePhi08c+j6v6WoBA\nPrlS6EJj2sJszerw69UCxsNGlDioYJRjXukeDYj/2ky5EVOy2IzHTGZrNM4jQOuI\n5pGv7MvC+cYKVU2LknY+nAoPGNEHPcfeLCptc1NTAP6HQpkhcC3Kqnqz1ao6Jm3/\n5hAKZJoOhQAANoN8f5Uqk4885pDgFf3lT3Aa3aP5Q8m4xqUX3GHm3H+fSlLcgscs\nYv/Tn6fUfuAuZKHX1lXl2Mj1pee58cxafDLmZD9pfl2dmhg6IWc5EarKVlAC256K\n0HO79jhzHdi71PotM4B8+7UR348CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEYucdj3HlEx1XLb\nazoOvy9rsascMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAAO/oIoi/Uw3keK9+qIpLhUoou2dZL+a6LkZTNy05nq9n\n7NFKV7MskL4egANytF3H63kHweYIkwumS4v9A5/nAlZNzGx0LMj19jotMMVA4Iwv\nPRK2JPQBdxLeBfUN869zpHTx3QrcNkoNosnkQ+EADsfv92o1Z8BYXtVURO35uo07\nXC+b/e1pwMQ+rayDcqMmga2boiar9TpLVJ/Z48lUSSx4z33HIWYdqthekHhI3XkG\nOXcmeaGwN9bpFYs7EzVKx4j3grSMQ8AYunbQlToSVatXudSTmLKIcQ/YY6BSUO1v\noHUjcoiknv1nHA085MogE+xiafIIWnDhI2Slt5DP5V5FpJ4Y5L/uaPHPW2D36JGs\nd9EcHOlpKLq+AmrxPcYLqEdaLA1jD5HGGWAnkS+i+coT0k7MP5vHuaKffOBVmzCZ\ndK76kDO+xCGEa9cmogfzYOvdNtu8SM9J95O6OvRTbj1767SqF42BI0ODn628pDdA\nK2ofSJ0p2sHYZWqM9y7E5DvfjIPe9WlTJ6Y1AYCXXE9IEebk6IyTBn4fR7j2nIz8\niW1EtWaXZO4EPpBK1V2KLrDAQsNMrTv0+DaZ1qnHD8VcuL/LzRalkWjxyaaW31YS\nhgbNMkvP/twJb9xX1f14sZpfMm0O4AcBy0cfQpGU86cw1tY7nHzYGdixu7SXulA=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 662D8F1CECDFF147A8B6F0EA296AF7F24CADF9CF\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAutGUmt0zNN4MAAAAAAC6zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzOVoXDTI1MDYxODE5MTYzOVowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC02NjJEOEYxQ0VDREZGMTQ3QThCNkYwRUEyOTZBRjdGMjRDQURG\nOUNGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvSMIhqkAhlPbj0tS\nV0CiIrMdgCEepjh2DXdOnSbUnTDk/2axsI+jE6+ASDgXvquGd/TWz33QjrB2y5IJ\nFabveTA6Z47wd/02G+gdbE27UxkwlsAksaBvh1KhflNC2SZthCIRX9fWjkNmIdpR\nVmyt8+t2X5Hl9jbWKBnW2NIAmh4aP0k1AmtNzty7r7LutWn/M+f0LtUh7CwVgWWt\nFYVNZxoxxU6js7hNqv6INMgt9nPPd7lVEfENDJvrSNZA6XAWe1otD1rbTYmUdpXu\nb7v1H6w/jO0g+ZYkmp692KkKNK2pc/WxnVwiqc1+l41jhwX+xvd5TaSA1wOpvs8s\nsxifmW/9nMHbMxezfT8ZenxwrQ6rJvzusRbk93kqCCUJ0PaL5adBwOWWr9n9fwTs\nfggLnaJHL/bfgzJYhjv7/sPmpknzV2+JK7hmEWEu+dP7kRK8r1VMB7zBpMC4VPK0\nB9VNWjwC6HHB1W4KuUDjMwZyEKL1TmFCNPAaUkwjj6qiYh0gfWQIRqEcu82gtvmw\n5yJRMILPWdMbtnSMB54EU0aqAaGBP6Kmc021ssxEBrAL5hvlnaVQ10HIexHBRm5Z\nJhnzhLaKrVAKjq6TNYLQE7Ygtc3n50nBAcp9+bT3UHVdCvPosqR+j+uqNkHt72oX\n8fT+yb2epcmVaSaOhLejwoVjqfMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFBk1oREJilPGKAr9\nKf0JVDJjCTjBMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAWMw/5SpK87wr4VtNljcPvUApW8IqVleCly6434O8i4Ib\nJruXwI/BXFw3YZrFnKjNwrWMaz/jlHBKlq+mRhUWA+FpBDS7B4uf+yYvJzMVGFM/\nczMYDujMGhifV8r5izcMeZ/l3YLFN6va/ZBwC9OlMzJnBKWKvJrmgERGXsZsgQK5\nZnQX6nQS/ntGlu0inin5KoGbDwR+ne5HKVjWsBEQs55QkJ3VqiwAfIj1nUYn3MI4\nbJGhx4zMbTH++Dmt73I/kg2NHqBPYjOR2W9aD2WLKnEcVx5hBzKFpQ3AZ5HHUbf3\naUfEYmOsi2ai/RF+ca9Ks4I6eUDYpPyr7qZvGPK32sgJa8hZ7R+FreC2nyzOy191\n16BviTBnUo7f4qdQhK3oBfOrxAPBY3ZnK+8dBn4u0sfT5F9NlMVbtz03ZYeO/Lk7\nYrFSXUQg0u3NnDjiTNn3levbZuX5DZqPpqnDY7C2fXqQL2EV/Na+f3ZJ2KDt2OJ9\nMrOQ/AgCZO7mucewm66Pt8o9Zaipe+QuO+HImFdLCUUSBM5IIerHqXYE08yEqMcJ\nrUO3W5+Xx5xPQba7D5enH7QsyiMTWKhzevT5hccrsPADTqzQjcMxsyGJN1a4g+Ki\nXe+ZNP/m++A1v9aRsaHQ4tTSYhNdPKgiL5sT3ckDZjHaxycgjPNtsRjB5SkjyZY=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 6B2780800A941CB47EFBCABDD8D1F01D529BF36C\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuiDJihP1jBJ8QAAAAAC6DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzNloXDTI1MDYxODE5MTYzNlowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC02QjI3ODA4MDBBOTQxQ0I0N0VGQkNBQkREOEQxRjAxRDUyOUJG\nMzZDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsmitZOCwAcLHXjD1\nNGoIN/qqqNfAIJ8jfyKnBcX+4Q8O/7NZVfSwEAaisKCDBRuBO0GWZ7PrxdcGWmN9\nWViJYHu8L+cTZddFUxPBdCIOCrlR5nlFanokcwsDwUirAZBuTnpCVFIYZEFuFX07\nBYEylaDBx8cMyu0605qF3CR69dZUpNc//nykzSlMGnXOWM1aHpBkWhpRFwaY5znu\nJ6/PxoLTcRGBxXyeo1S4rv6+oCQY9CO4/AwDpPrkYF2Oen1CUTRRFKx6B+rF2yUt\nrswvdIEj+YA0jxFxJT1R/hU5vsACQ2vuezh+YdSHCbHflXraOICoZiPQpJzmY/r6\nHQ66W31vQ4ZG+AcMSbYjUIjpHG3pj6pt9vEUZabeIbEUMT+IEtL5+fClWqStJXU3\nAlftKwCsSQV8q91KLGcyDjmVtoybPKJ7wLEyg3Fy/9aEyCwwFy7uIqZV0rzvg3X6\nhqJIHgAMvZ+xM6RYyL4hIq5zR6xr0F5G8LeZ+BZKwDDEKEhBNXg+pQXgRpaXN2Up\nQisn+OdoKzT3o+Fe1blYUWoLevEy+TH85z0cfnF273uLTHxkBWhzV6sE/yLFrjQL\nX2CqM+hdq0kOMrTxNEdol987ItQ4ISaTWlcqQZ5UXTfVNtYdHd962RvpurlPmb60\nrz9i/vzZv5ro9pjcXHwf8z9n/GcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGqJVs+EEMHLAIBk\npQdXuMJvkJnvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEASAPR5gKdyquo4H3UWbg2XmUJTOMXsFIzrgNNI9yz61Ce\nqNcHqnPUpNI0wXONzre1iZum1+QAMxYiEbNp20GAN6A4mv2yPQKFETJkrEOIqhH+\nv5AMFjyF+ZoGSrrOm3PsD9iwnwmGtsgTr+NtHRGjcEyzSnpv2kAqZkVnIYKP6wzR\nhfGHyLwdYCwWXg8yCuGUVkkJWspRXORWnk4n2ycL5E5nXE/R+BZEdGIv6lpDK6t/\nlgpRkGASJgoQeHmwXGdWMcEVUmRAtorjYv5LPFUOxKqEBtw4BbMlvLn7RIMBJCOA\nW1QwIx1j0fbrdSv1BmHtYXSG43ppqkJcLwEyMEAFmYkBQugcGLLJFWpLPiVtneSI\nVzgvIpBt4I3Nd27JCh/WBNS1APlyCiITPWYg0Nhohagtvfo16WjOGumIoymHwSG1\nCsOY65oE2+1W/1kA+f0imm9sNQC6dKTNW6D3w3a08DtAxG4YcXQZflcl/QtYiiKa\nIBOnOdIKQOKBMLQWk+VBrq8tm/S0aft4x6mXOJvYpj4Sm0uqc5UBagRWq2Nlw15f\niCLePr8r8DZIBIS5syJown6cgjger0WI07ZItNs3Tgch95PDsZysAJMO9IStdYUJ\nI2ud5we+H8hKXCITIal0771CYaysGzO06Lyhkixn8ilAGz3lsF+7bNvdXvjvOwA=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID 9DA5C72CA00BE14B85B3E535C8B07C83E85BDFF6\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAuqUyMm7RxJSNgAAAAAC6jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzOFoXDTI1MDYxODE5MTYzOFowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC05REE1QzcyQ0EwMEJFMTRCODVCM0U1MzVDOEIwN0M4M0U4NUJE\nRkY2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqcVcYC+q/cZdHBoG\nu2p4vKHY8+kzE5iinOzghxh/oFqm3hWKe2dKkRk00jH7P++71kR22hOjieal22Tr\npEBpmNO88Ids3+YWVioqQXRv23daK5C6nM+CNE7y0O7dcjx25WDCdEi3G/sEgStb\nSFqOoUhN7Bp89eDYYWEeq1g52zfT02LHqiIwhj3/QWIyxx87uzYm4DKmu/EK3azD\nENXNJr8qi9tKoNlrRhp1BZ5vscIhNCUmfj1n+4mSuoJgWVc2AGRb0DpNpy5TEUJr\nxpG53pk9en1IEl4w8SXMHPmpzyKobYgq39CLaKAvk2hd9WuUONJQAqQEYmanjP8q\n+EsP4eYA0m6PYXWL5vq5737RRLDKKxNmAPn0BmolwjRUUIseK46RAC42DDBcAnxD\nrtwZZDjy8vTavjy0sdZA4TQZIC+Vw/qgmumbPKIFyD+kit/DL76lewdKRMO+pUcF\n0veGwEpzIRZjGOJELuHCqzLXT6r1gKmV7sATtwkg9w9dazMcYCxRVdlVQLUJQg5W\n1r3Hw1CKeOCROSwCiez+x77Ffbyvhknjm7Rp/RJkEfIaieoCMzt714ETNrcj87Ne\nDp+zEPl3gb5ozmmdDuFTItRtLnyeElN13Ced++fe4tey0KQzBzjysSdetVmw6uTr\nrcbi2/b1zZkx5ikvA023u/1fZzcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJLJwv+KLEPLh7P7\ny25kaahVzKYRMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEADB7JCMFd6KRKBCvn1vxPds6kzGuNjtJip0I74ybk8w3i\nE/+n+o7syLsIw6kVVEtonnJ6SWjbf3dUesC9OoYZo49H8YPfY441j9Zow/VQtg6z\nGNuQ4uAd0Y/4l6S1qnqGFBWBraVCmcVpiIrZQ4MJ9JaY8dG/uFveHjeCLPtzvzVz\nSIbkaCyZWeZQwGgFx8L4QyPaajr9340mmHgwH1My+3nLew14f3Dx8oEnh3KMtdBi\na4YMzvFhUkctLfpmsS7YqhCniirgZ/i27g3eNqb0ZS4N7qDIzr1vJ7SBJntxYBCY\nQGc/sRqs5+z5pWbZERgK2AtwsI6vursXX2M63l4OS/jk0nyOfIycGAugkT/wW49j\nY6cIAivDCOaiTn4ddEJ2DZLej5oW7mgPXX1QpR9cG6ivx6BisaFZGwvJdqbWXHYt\nnVLNNEYcHEgCJdLo+2Ei9BZ5CTGmXZLftHqMTNjaKYsgOK2KJ8CaNRTpFXEN3pSF\neCEO8McDqDHfaLUnmguUq4VpvNmae2oNf1ZPpA7NwtmnLf4GYN1y8sR0LZ7+UXXl\nSFLRjm/uizutcwTkfiRln4O7++/fThfu4ZDbBjxwjApftn+1eaosR/w1hro/fIq4\nManXm5G0Nf1ysuB+Hw4jeAZqDPJ+FGS4+vn5FyrRDuLT+3yVKDytYE7lwaBYTLo=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID BD963E9AD574AAD94FAD6CBF416DD85B4A559942\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAux+yJiEhbskPwAAAAAC7DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTYzOVoXDTI1MDYxODE5MTYzOVowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC1CRDk2M0U5QUQ1NzRBQUQ5NEZBRDZDQkY0MTZERDg1QjRBNTU5\nOTQyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwh1IHfwo5oq0mrDy\nfKQ5ZQjWMBruBXzH/HftMn9KH7q2pm68u4q/twj1jrH60zfaOWV3OyJQZyzfVYIN\n4EEqTzCNDuJsu8IJmoCS+U4kOJ1NvH/8yu86y73v5i6TBWaOSFPPsEfjeAdDBI7n\nhyKEMEwxMyh07h0m7jO35odqgdrPm2O+MtvczpW9pewm0L0h4GxSK3Me8CCAVr3J\nS3eJ4+ZUz6Pt0AsgzlaYV4CH0AQn4R+b7sBswoeP+MuU8EhMF3cJAVMrs46BxwW5\n1xeEy29Bd0p5inadR0h+p7PndoXxSX5T4/8vYCLGLFo/pGI/ziujGtFOzupL2Dnp\ntQ95AraZZa1jrDDbRtd+kh9AQ6K9Pe7QM4zCVxqoJmXFrKZ7dX9UMT9JYqipM/wc\nbcNVsatC7W9BT072quq3rqFLvaS+eQKIOUtERnogy84RHss8D4bdOklAmrp1eQ4S\n5hqFn6nM95hEe5zf84nt8AuiassD0KCZlVmDHb2t3QbzEs6SyBZkK2fuwf7+xfBl\n6b8lllgPMs0WohV6wOlVE0tfN8FSsrMWpAmmK2JMVDJjLSAyUHsIIBxw2iE4P1e2\nh32sKshF/Pm+EJ+x3P7DL49VvW71CB3WIPFdwd9sBt5Zw51W8ISYRYOpwYLdBvor\nFxsN2Ph7IW1zodzChc7tnHC9lCsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFP/wVuehw9swRQ7h\n+F6p/uE7UhLlMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEALtt9U/UCEZSZapeRdaam7OTC+18IwocXB8exfIy+r2hz\nzwIuj+3c7KWkSiufgWTGYHTl2xkBdJo94QYJQMzDtWLL4xJF/HWrpPD890Sx+qzp\nF5Sd9zNVPdByLZrlffI9WvVCzT+SZOdZrJeoqK6NYDs5cfnsp0S/hvcdR5ctL/53\nCtNbdgyuwRERakTpWwOaU0iy3o7mecFzreLmFL74xD4YaHap4eTtLL774/H5mmED\nsUKMdM8uzpVYvicIMZOkYfwYCqQLxaYujUvfcats5qGor1vyCma5uzizZLhnzW2x\nChj/3zwoarErDKIrbmRkc6skxeoS9bq5dbst6wGXZxWtFFtxTqgloZPGkyD0A15C\nNStKlFHggDKWBtPxw5rETu8K4lokPRH/DZsiDaZi55iHN38ZniBNP4+rSmqyDhRL\n9Cr8848l6lofzqAoz2zop4Ti76ypygXkS0VIVpnPTpuUUppGj18S/4QyZsnCbAvH\n+oyft7OmPh+tQxrFJOC367i4GheByObTihGC5em/947eLajH1zHP/ObFTpCWoNBs\nMxW4aeuvPd4C9Mpcu3Zy0yGgl6oghESB9GfwzJPgf0yoqbXJfCYMf5Da3H9IU85j\n1pTb1oIEVltB4yFkFFhFvBXEJD5FejUAg3+8NcSXtmFTbmdkpUBDRE6CjimKHIg=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAARka8K0IXBQwEAAAAAABGTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE3MDMwMTE4MjU0NloXDTI5MTIzMTE4MjU0NlowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw\nNUYyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxYXNZCp+ZqsAPyHP\ndBJY2v8M513hDjq0+MI5pN8+06dCmx3rSM8RGVpSBiAj1GBOgNJgMqglqoFts/xZ\nLtdvJJqSw553RaypbuKUDT8kQTuLWR8VIA9x4UKeAmDOML15K1hICEh9L78IWRpz\nZe4T1x6GzPPrszQx6z+cLira+KoYQjTMsrxU9eqK/i/RhDy8Q6FHOH+A4v669k5i\n9LdXTvqgJFL7VzL3UZthpti3ljmu8bcnWkqJr11c/rFLtWqtLlPfXSy7C0nf/i43\nvbHEW9h+2aBQfmBaKNHO5Rqf+aVtHsuOudi/YwN23M34c0ajgy1V1LYFQ5M5qSks\nVTRI7QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUKx/Q2FPU/8mRzeZcBagk6RyWyU0wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBIvRVU\nFYOhI+ASo1tkOO3hb7dCDG+Z/oTpK5Qb+Royxyt20wJzINobjdRPPqCxA/k5vrwO\nTxfhgI9pXazSA5cZvZaS55uIU4ISJe4/aAcnd0evhGw2okAKkS6yJJE9cBEj+Ovz\nMVGZaffrSo39UpC45TTsvy03kevSGsMqsbFdEVjtQDIh76lWAQ0Julav3ssJN6wl\nAsGhaNKw5Y3nn0F+ePyisTSmp+jwYj6g27W7VcmuO+Usddr63AkSwWKsAOThSgzu\nlgtkQ0+FmaEOvEzwkoFuI6d5be+RNi6W7l/LEHadBS6olQGbmwg/iO/m6LEtJTan\nRdPBVcu0Df/aqnkLKOw8g4I5HfHhYXZnbtGK/qMjptK6QF54kZ7VSXlCJz0SCWZQ\nKS6t7WrGZqel2V02o6Y2h1J2jHxmgt1vGXzxZNq1knBfXb19yN2wgubEjYQQ92/1\nhlZ7apwHMv3ssCsMJWINcThdn7gO/LZ7jz5gezjwTRYmfLQUwWJEJLRgVEgeEe8a\nysAUkiDpYNotFoASZWoqGx5s+UQBqUDole9oi5G7CYvvuJ9+IBgybTWjacDzNDvu\n2s5etVeUStw5s5AFm/4DoUgly159gEOXnUlbc0IfcIAMAg8dw1nbvXp+JNyqmOg6\nagA6mpuDGNdYarfCzE0OBlgRhrIwpYSFvbFsXg==\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID CF23E59526E446C3FE4F13EB686F624D705305F2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAq6sxbDP+xJiswAAAAACrjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0OVoXDTI1MDMyMTIwMzA0OVowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC1DRjIzRTU5NTI2RTQ0NkMzRkU0RjEzRUI2ODZGNjI0RDcwNTMw\nNUYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAiHdkQsiTekcene4z\n+nFw38P9MGUsCGA13wOX/W6P0HBht1yjJnix95FeiK/d2YyQv8CqZCGxJjPnfWI0\nEhR//gxdrRO+LCUeDERIBVd2uVsfLoaxnDa4Q1wkUVNYuSQ/y4bvwWl5qggUNx0U\nQKwscqxQL9TsjVYFTcYDQoEvUNHiserbIxId6ozDxlx355BP7B6S2MgtdlJwEvPH\np42MIZGy9I0MvSywp3RyaT6Mqu5Nzuwd2fsysJoHSn6ukNNuglMoUqh+2Zbc7zuY\nk1wWqdTQ6l9jBrS1HBQ1DIPMvSRhS/0YV6yzoffw7YDHrJe3xJryJHPfHIzj6Foo\n2pU2Gf8qo2bnFiHdfylFuGg5ng5P9b5PvpsCaaq8NOjnFBUwsbsBQpGEgHHnri7a\nAUExk8r3ml8SdbAFY+s/gH5mg8kv25vw5Mny8oZxX83NvGrPBahiLCUdt3Pex5Aw\njgKH0m+HzFKWy1fkMr/JSFWYS/JxdTHlkmTagRLA1OeIkEzNmoETauWXEnVWZr0A\nMbf3uNKiLKWUlss7rsERom1rPPns6hxXypnGcHQVAOB4xSSHO4ANCjLdOBfKWwTq\nDtTbNji6IeF6JZCyrQ6xC8ApLpqFBafoa7reTDDCdpiX9W9VGABkjnedb4IEnPBp\nP+Wa4tCjrU72PBvZejKdh5U9gH0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOUSzvn1Jv3qOW3C\n0iYJDQXHBAItMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAkgpH5sTQ85E7gXTqrVc/1nXrQxKj701dkyfInYX/pT/L\nfmLgG7r4yN8gUns1d3L59HieHTYYloehMF3gKjfDPaW55IXKhv54vdBTfR+sltuT\n/WzmGAzGJPcooyc50BgWRCG7M0USs2h6YbtUXCUj6IR7ktDWwyC+oeBJr8iOje61\nZqxWPgZLPkrpW9iSX5xl8lPgUoZ9t4C4LviCAgTnzA8mH+wqZfekv3CX+ZwLuxNH\njy4uArwzZHER4qxyo1q4OryI+5gkQOFmkEKq5PxQzHqq2gufqd60W7B1Mb1xwQPe\njM9XlNA/WBGUwg4frY2SIipctP+rzMF0ShwHabuT+YerUaC51wkc9vUGqcfUmU1O\ndPJA9knd6YNDL5mtOIhM62DNPDRbZWd70w+V40om2kBM3LceIsjuy7zJ+SqzX/WZ\nheYNJH/QcA78cG34by9t+Qb5/1dgeFZX9LYaJmApawEGe26gfbRPyReTDzyIWLL2\nddlQMGBDmMIhqg+bTOFfGfgf3wIOQJQYzXamYsRuOimc699bA/9azYfadckHysNO\nBKL7afPasMj8vHgGww9IihoEkryg6AL0SkiacKGzel1bj18QjLyCMHdrKpQrWI4x\n2GwkvsflRHoqd5JfZFnJEzE3v5UYNOZWZD1sgRSWNNta4M4Bynw5xvlol5kBpqk=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAsMuQXMP3UzkbwAAAAACwzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1NFoXDTI1MDUwODE3NTc1NFowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3\nODIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAt4xfKC2XfmKljrKM\nUGkjZQ0wu2bK/Xydbm+4zDjJhB3qGuthv0uBPtzLGDo3LiJy+wkCNmEgMkqcHrVa\nG5x2hFT1nBvX+XDE5a7GaeNSZTwk0G9oIH27aT3icozRpohHzKZuACf4r6EJru3D\nK63mufjUX3qw0KrFTm1YCOVHdy0BtSRaWQIQ3H0yBzFqEjJFllIY1csb12Ar95Qo\n/DoRGKIa0wOXoicePdzm9eDzdH1nkrh0yLRcErwoCoMS4Yrxs7Tq7Vdh9WUxocLN\n2WnenRojdfj1zVzFcwJQvXzO38CSjrpTHoJ7uSpPLhBT7h+Lm6IDiQ11QvouFKHm\n1sGj2urZbHmdbDRzSyIf65swKsQCiZJ/XiVgrLRa7mwrYXKR3q9t0MbgpC1ZKX9h\ndaMYI2KsZh+Rsfh1k2Z8Hr203BfaeG4Y2jHIifMiHJOAJ5GZwVV50tEK6tKQe61i\nwY0xqcaEKZiDDsuiqPRgp1FxfxbF3h6mkfPDH0R/oopzWs+V8xaqMIysrMbKO0l/\nCm9DZOsap0k5MJ0kMzgCtqt016WRPaW4hpFpPY0+a9q0PMQKFF8gL1W3nwx5rksV\nZluC1knTP5qOy2Jj95rDKB2qiK9nCKWtbOOEGp/1onO6VX1+ZCG8ROYUCIqYtVfv\nzlQLbE5jqh1LIbw0Diuewl2pWR8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFA0Fr0rC7XQarDYC\nIKE3OoCXLlbqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAmlR45TP3NEeua6X1YitO+QnyKjhZXHMITR4d7436qVu2\nq/Nj713VYKx/2rjpdUtZDTeThw/PVxljnIUAb5fr7GQuZ5tpZLkxQqa9VKLzrxYH\n3+YUGhO1giz/lY5y4fhOgHK+oMukYoaEO/0TR35YJymBerzZ5zwZoYfFmxsMlnnL\nF6L3RJFZ0c+ZzlUJCa+DEdP9O0viOvrIOlYkpkmTR/CMm+hpFYOvvBePBeXtHUqN\nm3mXmB+S0URFGa5eGV0uw8r8s0E/+j6eCjdWB4fCW9vztZJZkAfgSqXrp+D0we4m\noZ1vyxZxE4pjmkBEd8ow0mMQf+sDLeKB/xTRTsRMd6PqiqvKoKnd+qKQn63Wdard\nsVAyEMVtaAZ8z0CUZqGFmIMdixxMXBWnsNaerZrFNNszCciE2cPIENOZpk0xYZ64\nFgEBTH0KoTX/DOCTr1jmngrG6hqcrSPUPyPIUSBmyIFQQyD+Cij2sOJQmbdqryM0\nxU3qVMr/43y5KTSLSG5UkQacbU5HaUMFKZGg7mFgMpczL3FHeXMCEAs3+wW93/I4\nTD+uv93cX2RbXDjwBpxKNozOGwcW17FAOb6X12a7eS3aOdPmLWIyVnCPDOfgg7Sz\ndPa1RT21UmCa8lQ4/U31CxDEbmHaNwvfp87j/kP0Tz815l/L8HOP08I1oPrnZ1o=\n-----END CERTIFICATE-----\n\n\nWUS STM KEYID FB17D70D734870E919C4E8E603975E664E0E43DE\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAu2TzUTMDo8H0QAAAAAC7TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDYxODE5MTY0MFoXDTI1MDYxODE5MTY0MFowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LRVlJRC1GQjE3RDcwRDczNDg3MEU5MTlDNEU4RTYwMzk3NUU2NjRFMEU0\nM0RFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnrdUHAmcvmGW+yvd\nlxrLYH1abPL613a6XSRq1lsfAGNxTJ8FSxPamcs3F1AkGlXvM2nmzMWqmd6Z07wX\naYeFr/LP1dDjpc/JkhlN+o4R6FEWG/gGV0W9YuTCXAO2j/r1hNjS2S9t+xYhh2Mr\nP2Z9vXGi6hhh3YEp8njRxI3jg9gHqmyODvlQmykSmJVuRf7wIvo7Q4lnNqXPgDOB\noc/4Xu5P0mI9SaLhTpjrMpXp4rusaUZ5nDPY1o2Bzn8Q/9a3knqhPUF1SP5mbFP7\nf3bQN+zDlezSGjnHk76WD+v0n+pYu49WeT5/OlLQLQK4Qf2PcLKLXlvhPVqvMBvI\nkTF51QuZMr7TBgueWQhAA3uF9dlVBeYB+fid45ac6Zv7dvhF5waS7TVfRFcYi7Wc\nw0QjaCDob8D3Q76NTFtenXfvtX4jVoQIonBx6rrot6P1meCZNcxSRsGOGznBJnqM\nHVqi35gYZtsaqnF5kT8qacEIwZ/V1kLqQWpuZFUCaPsaBqnHjbBtOnI+FuqI91UH\njQ7LQ4s/my8DJ/OKAsc/wM0xj3kseD+IC8XdFhZ7tnZY+n/WdIfTj54DyoOxf4MJ\nNprJOLC6YS9Gteqb4ePxVOlfPruTiUZGzewdjRKjrKwWJyG7OlovD1D+gz6ZEUOS\neWpgFBXhadRCojaXDqWvjYXf5DcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAY2IVV+0GjDphA3\n3oXEgVh6yNNPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEASmRkpBymgqmh8tSXJNGm3oYVnhGUyrmD/837bN7vl7Ww\n4N5StOjPsM/bdidBDE+Z9Ctik7Z7TUr7ipwVVR61YDtOYWdJiJnUYznYlU6vduhk\nGNqBcnrtMBhtEW4Db9hCOdJPQhJEPPMDWF4637H+M7VTEpY+HHwYSwALeEUFrAJe\nENLjOjns8wAZJAa38Q8krtQnfNukbgdHNESaOjF4hULmT22G22K/b9/WWnLkmppA\n6ATPr/tNHIaP9xoYu0tIo+QTLiOfnyjxlrzU9De4D61jYU1lf9pzSKzNodojHKCS\nFJgg3Ghxht1z8Xg/RbZ36wMBxRPOgK2WoiQ5hJqEI2NSI7F3kWQ4IdcveGQV47IY\nkmnHi/+pFKzeuAzTG+tL3zcUjAUhdnMxbIkDsbB0W3ueD4ucDqH4TODgxNGOSKn1\nro2b/pa78aHqCWfON2JUTJ7Ls4rlHIflqv3cBIeXZ+P3QLQkEVh/8mKpJs+PsEkM\nxPkmkicMDnjO9tRSWYcoVgvlloxINGcgdaGTG4a0QppRMWCtQjUyJzqkdayzqQ7B\nE3S0C8CngjNWye5t4J6cjAcyIw3qXWvnnorKAmCnoIp9ATd9n02r2FiatCJVHDuW\n8dgRp6cWY2+gE+fSFGs1oKEFZ4jfFj3wECD6NaEMCDo9ykcPWPp2DIkmUkCNYMo=\n-----END CERTIFICATE-----\n\n\nWUS STM KeyId 0056A610D53D1B3B6DBD14094B2DCE7E1F756ED0\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADT4N/+t5rWmmwAAAAAANDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTE1OVoXDTI5MTIxOTE4NTE1OVowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LZXlJZC0wMDU2QTYxMEQ1M0QxQjNCNkRCRDE0MDk0QjJEQ0U3RTFGNzU2\nRUQwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsweeMq1lkFAdiHEl\nnAqmyiiJaUAqpWdcX9UEELJSaCqQjFW4/+ubexFS1g34qXiHO8Eo0fItj6DMOVrH\nBnRgcSOMkYGSF+f9Pzl2ikISg8AdGr33br3b0p4VlZl0XuZutjv8OA4PMEMAI3Cg\nms7t9DtRcJ3jS1/Mvd4fLd2dYuZdiEJJ8WD3uEcJpTuN5RLTt7n8ybgWT/SZMWtD\nT/+V+ZvE1fBeC3XqyGDP9voxDdzqpsdnPG2Pi3ZrqaovEbMW2vIquMhgAvbo4hDg\naZZpSZBFyE4HmlPkukjWKRj32aLCZvKv853DGfSKSQbgHdAdJASklTW+7EJH4a63\nje8hvQIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUiAYnc9aAgMh6dKgKRAR3JeBn6C4wHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQCH3QAT\nudWtMoO0l+zUNAxe3winb8jKOeKX6vxEgDWqr7J4kNNdgKYn6LwH89xik14F6tGD\nhX2wFzQYH/idkAJUqs5ekAWmm7WDLcvrrcT1qTtF6orPkxbkyjT1ioUppZRA+6na\njMdU4OdEHcjgjpfa1bl8+wtwjEAT7LBEYJcOuoz3kf1wl1a8+Tf/vCVr7LsFjsUT\n1GNKPRngPnY13k+TKSTFq724VzFJ/g0P6FBhoaX1aeFTz1z/5lIPCsA8spPRNLXI\nrzKl7E+dA2O1J/iVbeEV9siqq36YgiSi2BonpOUu/Bz8fe7QiYyC15HXx2GDhd8p\nqz00ourynOYBt+Cs0six7BHQPvJ8gcoK8pIBW0e43tk7zXRH80mDfmGFYxXWHKjx\nAfvmsZ2Dd81QcoTNzZx7B6wGzd/Qgvv0kXtBleWrU/wgiXgRnyERc477BFFW1NSN\nA8uebIsN+ZaDCNoFP/Ozhq/AVh8lV+2cJCALnFZFguT2rG2X0tBT6P76dRX5Ih/W\nKhSuHGOW3DNCgWtKFzxbKUSf0Of1H8jvQQI/R3t9A/0c96UDYcaWcMB2xmo67Z5x\nughZN8SsEzoP+dFmRKAip8gQ6mipQ3pRhzY+PmwmDrv4OFPaoGDbYQsl1zcsOktx\nwb+LyuKaBz7LH3o58sEEAKZWAfBIa5up+6Z+yQ==\n-----END CERTIFICATE-----\n\n\nWUS STM KeyId 571f806b47cce79bfa35947ced88b8d1005ae09e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADdSUBbPMO/3cgAAAAAANzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTIxNloXDTI5MTIxOTE4NTIxNlowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LZXlJZC01NzFmODA2YjQ3Y2NlNzliZmEzNTk0N2NlZDg4YjhkMTAwNWFl\nMDllMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnzByY6FfN9JwL8Am\nBmHPyw7ZI3/kTPKJex0HgY4S6da0/KUWk+ErYJD304ULtCLn6nLerMnnnToCOZ68\nS+zbGV58wwHQi09IWuFe4CRj0w+6QntXjoMN0vo8DZZ7E183hkTCXNt0SJUE5Y74\nefwEtSbxY6TiyG0/WksbEafdtcDD2ysRcGqUgY9wBxeMFlsCRQNksB9ZI0bXoG0n\nHwXwoxYk/eH5oBqpfHIEg7PgT9lcwqg419NlUuusUYhK+V7+oACxrlmalhID4jeK\nj7hOo0JlCGlHX47MfJmWjDeKQiQAOsSdenHaKYo7CKfVvbZ1QeTbFB86KplIiPr/\nWlvadwIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQUBb6c7K0ZT3MdaPmk8DM5bq+N9nQwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQBTHQL7\nQ4MdojYupIFzqCKiN2U9dy1MkncMy3RozygBCPPOudsz30GdRCxI1cLqDI56nAva\n4BnnGZYK1DXdhAjP5tujqK21u2Jm8uT+zi/bjOKfBtl26XfoJQdi1W9mDrmmlIhl\nS6VGuRMsDCqW7iBh0p3cQ/ZmBSLnvnxPafYZVVQU47s6UyEqZowmITh74eFUUlUH\nWAxWDNPja9SUlI+04j5/WUpoIedBxIS26FqzeFdBtV23xTyOss4miIa10eMNgaMS\n5XcNZFrAoF1A95BeYum5MHQENE5uXhRiSp8CdAdGlR/THFfm/Podp7ggwg6ENLFt\nF/i43oVN4Bd6xrXpc5vriciRU2npVwAWhM3J59BzXAIlOf2hV94AH86exJ4oEul4\nVNkfv6rktIsTX2f97JCtN8+7xSkTB8tuV5osi9+gtLSxt95Ysj2hndWp+jYRGF71\n0eNa86rnSVpt6r3vE4hM28+WxlRUeNOpkgZQkX4mKvO1mC2i1P9+5IgB/xz4vWjU\nczj72Bfa9AD+JkX1MDfuMNUoK/bAdSZOqA0hQ5QIUewVSc4UYuDxxASxeUHHbwnW\nTjIWVoB8X6MttWgCity+xUFvCKpRI+CrIrMFjNUrwZKEtrj1k1ZUsS+iCkqOVU84\nK3yofsEciF3PCbArPLaJokm19G8xTIbgaP6hXA==\n-----END CERTIFICATE-----\n\n\nWUS STM KeyId F3C91574A6E773FF13BF0C6BAD7A7B65CF1C7820\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6DCCA9CgAwIBAgITMwAAADqk45XRCFCodwAAAAAAOjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE0MTIxOTE4NTIzNFoXDTI5MTIxOTE4NTIzNFowQTE/MD0GA1UEAxM2V1VT\nLVNUTS1LZXlJZC1GM0M5MTU3NEE2RTc3M0ZGMTNCRjBDNkJBRDdBN0I2NUNGMUM3\nODIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuLz3tl4ITAjHvQZK\nIRYSat1T0RO/2/G7Qvt/YfxSfYSgMwdX/HUFDjURmm4eBMToLlPFXKdhciXAHzk0\nyCJudRzfTZNRmK4UmdCabeN0HQwP7fY3EWrCS3IYBKvwCZSV6u9Z7c2s24g337N0\naS1z1wVuig9AV162fV2fEfPVk9b0+iXakJNTwnGku2GPArxPicMYLCkLGwQSJk7m\nGT3NxupqZba5vLDWrHszO1+fT3a+RpPbq1O7WbQkmG3vULHEEID7MKpcuQo8prlF\nWhbrdfm0GE860UXXaZuYP4k55lzBDvDshW2eIDQEGqD1hwz40k8PLaoJEsDArvJO\nyo+c5QIDAQABo4IBizCCAYcwCwYDVR0PBAQDAgGGMBsGA1UdJQQUMBIGCSsGAQQB\ngjcVJAYFZ4EFCAMwFgYDVR0gBA8wDTALBgkrBgEEAYI3FR8wEgYDVR0TAQH/BAgw\nBgEB/wIBADAdBgNVHQ4EFgQU6Aj1HfkzRkkpHwgmsYAxr9IDZLAwHwYDVR0jBBgw\nFoAUeowKzi9IYhfilNGuVcFS7HF0pFYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwVFBNJTIw\nUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcmwwfQYIKwYB\nBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v\ncGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0\nZSUyMEF1dGhvcml0eSUyMDIwMTQuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQAuKjji\n/9Dx7EhWQsiOrC5UgFLUlkaP4zsdeo3nQpbePFEBEaIGisw2AJIUlGHh6Ev5oOnS\n7fu322dG2owzydh1RXNbP2h+RoPO4A+VVr7bz+a7HURmfFJUM4xyFMAVrKQa1/eZ\nZjb4Xul7gkH7lfgqsQkki5hpCkiDlkD/IJvxqDemcMfvXh1ofqGkEZeE6BYkbgFo\nSppfvbR15lLRahLGWxijHyXMMs077yz0b78CKhJuQa0uPFBIt8Mj2WZrCyBEqogO\nl78S6eTeR3m8z2pONkoLxf0pVMDJO8RUanDxIdGSRKXMOxbl8UvLYvoyH+xyFnh3\nuoHRD+5ni4PcLxA51DyAg1Qb82ooUm/rfLBoHibsUBBAQTvpD7GpqzO9BKuiyYac\nScI4B8zSGK/AKQAGMJBkXQcoFiiBVi0WwHHyDSD2aYYprWDuubcIGKsYXOdYgbZp\nRRi+zLzKRzWgQ/wqikkPtHM8FQSpNo8u30FCQvFhgpyKcE1h9856S+PPKnuw/TBK\nhGNqquBuP6+Kqjyh/ApbfJxqXxaPp/F5zWEdj1ekYfyn53W3iaed9TJ/ZfIeZLll\nmcaJkKLqm/n0khWuFvRF9b24YqPd5nxOMFuM30g4SnShQvQwxy3WZJlPO6TOemHh\nW7FUerzGCG9UEjlAXLOqp1cDUjsWdozOZriS2Q==\n-----END CERTIFICATE-----\n\n\nWUS WEC NAMEID 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F 2\n=========================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAsTNZAJHUzamSAAAAAACxDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUwODE3NTc1NFoXDTI1MDUwODE3NTc1NFowQjFAMD4GA1UEAxM3V1VT\nLVdFQy1OQU1FSUQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1\nNkIwRjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJmHxCacuTkIv2UI\naaOU+ZMKMbuTmTbGEhH77KGkU+3ChjjtNqpx2DHux/1bcLGPE+pafQg1HARUeoLT\nhzfAeqzU4jEVSJJuTnU3RjZIXskHpmgiw1mTmn5OnFPl9Orwip7BOJ1nsFS1uXTU\n9BUmFn0fiXoq0eMqk4nILi+rq4FSsTanMj+VmqcpcfNnrovDCRhS/4NlO5kcWizs\nAz8jdCh1NbpcIq9ILr9hUvd+zFwM2+SQgir7MBYT2m1Ffa+rEVVlhub35z0BS0eW\nNg1yjz5ktJff3e/7WLFdihm1HfUFV+HjMNfemXRQ90VrZyYfg/PRcwcu0v8xhkNw\ngn1z87HFrDxdC07vCIzj2tOplT8r3WkSdGP5W2euUVJ3pS7M16Gh0/keHkTTHbbG\n1MRSABMGZH/lwfYKQOkEgoqY+WHJlGwZZ4nihBqP56h1UFgpcgoiHGnO8se/tLF6\n7fLtrLygHJdtUe6UpURQiFWvN55C16TkrwIIwsAwYhyaMLRY07Bsj+vccvjRHM24\nLbVmj8Lq3d33nEcCKjUxpOMdTfI7WUgkDATF1xHl93aCkfPqAoPfzWmnFcg8xK0h\nzRxdRXx1XjLPZ412HUnHDB8rWpFEO8UIgLgZ784fi20ngAoGJ9Rt5QlOuLXGX834\nKpAUKmjl9F9bI1xpPYFoBBsMBlZLAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRTW6EdZb53eOlh\nP3FnxdAH3/LQYzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAHkC2gPC6n9yqXmrDB/HRxWJ9krLGJZKY8AEuodKKgWB\n1DTGO9laZK28P0JEQST3mDrtcJTyrSgcXQu5kevUALXdHPHLeOb9BwqiviXaRLMY\nn+TcmCROvvMJsza+Kqv7wUbKZcTpWWiIv8THhNXWk9vsCL3JOZWLGyZL9QJQoVoF\nmug78gUqepW73K4Mo1r37rEOvptZE3s1pVlwKmedoYyHg0rLrsj9J29z+U+LGl8/\nQIfaGsL/WngBvrugblxwBQzv/cS+sgNIUxFf+N05SOovYDfGDwG7iS7ci9k3hmuw\nbW9Sl9bM0cHl1odCNMp2MRbq13ctyL1GVdetDRcLPOU7s/Iy1CSd95zqHlU+Rz9n\nvDrbkPTuhQpKoKNhHMPACyJ6AGkvi65+zW+YJ2i0Wbw9c/YXTkgLr9tMV5v2Rk8v\nd6DWmDzQ6X6p/nqBAI4lImEfAwnxWJ1IU++lR5ZP9pK5Te4FK78DZ2/23CcLCxBn\nYiPLhoIyioMRuntoszDJUopfAugV/ftKU3orxCnV/Sp7uOHfkGyoQRwdTZ0nJFQE\nrNuGsMH6iCneDwr5UtSQ1APZbc3oleevAV2mE+QSQMUGzzKCsGT0ixe646c78VgR\nOubTjPd705Ncy/f61dpEsH5sN1wxKUJgBnuqDrmuhK8s4p271r+73w4lzwV+FX/Z\n-----END CERTIFICATE-----\n\n\nWUS WEC NameId 19BCC8BF66E8EB3575C1E83ADB8D4E1612B56B0F\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIF6TCCA9GgAwIBAgITMwAAAFWFaQ6MtCvR5gAAAAAAVTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE1MDIxODIxMTEyOFoXDTMwMDIxODIxMTEyOFowQjFAMD4GA1UEAxM3V1VT\nLVdFQy1OYW1lSWQtMTlCQ0M4QkY2NkU4RUIzNTc1QzFFODNBREI4RDRFMTYxMkI1\nNkIwRjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKBoaevSwACw6z7w\nonOQzBUqLLaDewXCXW0W8/82mbbZQ3XGJXp7yARlYs5bKrDrJx6SLPRAPRxSRRt/\nX9VrnrYY+lolToGclUki/HTzU7YURCQ4jSLyhg/uTvg4TCiaWIwNs0wLie1r+zBM\nVvIy+bX+qvrx023R4Uoa8Hf+8GQARrRFXqwsfG6A6kqe6w4mV0651KDYGQORbtzn\nsYOHxBlPOr4qfJFVV+7dl6tr9tbGgkwTJdhZaebltTSaEQqdOUMpzPcQQfvPh9Me\nEHLCFj9CI1sMSoKT7yxk66UNTVxSnqeCVboKLkgP4qCNNiLeB7c3XQPzL+tCWBq6\nC7Vp1VkCAwEAAaOCAYswggGHMAsGA1UdDwQEAwIBhjAbBgNVHSUEFDASBgkrBgEE\nAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYBBAGCNxUfMBIGA1UdEwEB/wQI\nMAYBAf8CAQAwHQYDVR0OBBYEFPpXWEIYVOkdSAbJwVO/prFRh21MMB8GA1UdIwQY\nMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1UdHwRpMGcwZaBjoGGGX2h0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMFRQTSUy\nMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMTQuY3JsMH0GCCsG\nAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDovL3d3dy5taWNyb3NvZnQuY29t\nL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNh\ndGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkqhkiG9w0BAQsFAAOCAgEANvze\n2s9QwiM8xO1V/l/ngvwI1wmDIjKa5KEHkTxb7sBjozYHrqC14NySiuwrXissOTmU\nAg46h4GAfG+LwxuCTo3uhn88CTYkeXnvf+xqMUilChPw2MMpwYLf7QeDybwKwRbi\ndr63aMzZSIgHUAeTrbIiziZQle73PmVAbH7EBnmrMn8jvgl7tbvnsOqlEQutnN64\nGN9jfGYEw30eDr/wk0uUochScaald3vYQEub1jW7ApJfWEaAPIVTQUJ90vy+4IDS\n2tAmYQJrJy2JrqNvVfmGtvSoUKIndBLu8pXgCgKMsB6x3qz+ZI1O1Rw0W94tjvsH\nkXEv4zTJMfIAz2piT3H9KZqegRhfOIpemM7iAN9qS0aU9Vz/PuHFk0DBjGnXajG+\nn6LfIV1Q8qmSzOc+j3hYbesEXiJzq2t9IQAofMttJMo6PrbIpwXapR/hx6XAirpH\nuqtY86aluU4XN1vAIKY9710m190VhLBenOBC8GuAVDSR+FZFpz+VmByWG0LaPi4v\nebKHVnJpbEUE0ZqTN9PVWi5uR0N81uxQkHiUTEFvx1dOdIBITLj9s/xVvnZ6Epmk\nbcrRafowgZV2mFAxhQAFJGo1rpgMdTBZ811BoPyns7C2BoFim0nykdXbuuwLzxfP\nKfL2zJeQaYKQNK1ooxPrKq4X1fhoBAlL26cVj5M=\n-----END CERTIFICATE-----\n\n\nWUS amd keyid 8a0578cf56146fea399af903fb5b0ac36eb2786a\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtrQ//uVpuGg9gAAAAAC2jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDgyMDE3NTIwMFoXDTI1MDgyMDE3NTIwMFowQTE/MD0GA1UEAxM2V1VT\nLUFNRC1LRVlJRC04QTA1NzhDRjU2MTQ2RkVBMzk5QUY5MDNGQjVCMEFDMzZFQjI3\nODZBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApJARGA5iYy3n+/KS\nunR7i/l3wywjewn6qAmJn6S6EqUg1dooc9nykfqApLPE/jgeXbC8IYrbXX6y68Os\nXLNTig8SPdje585qOg3UT3+OFtgFXJvFmk6Zh63fSTcHNwzjVnzQWZSfW9Nr03vp\nwjHLTalW2wGzEA9/Zlxu0tqRGIG1ZyT0x+dlIvdLwYjs8uv6G4OTDMo93/OCPCtc\nBAQvnX38v8KGpcKVXRRyeAdv/38lmKhv8Np04Zg6mvAcimPm5lYa4xVOztCTeUlz\nA7Go5Wo7YtlGwr+4LsE+Bs3BoxgQcFbHkyAJYNng0P9UG2kGK1ylTrGXBjSCLQew\n0HKkLxR0KMbjLdGZDL+3HaxGphAfFRbz0OnuUeplwsgT7is3nbdLplL7txerJvoT\nWCyb/EVm36gKeaIa8iPGHFggntjx47ppHHlkFQNMmDnUwfdW/srhcHOC3iVrTmbs\nqd0Ks+S+skHAYc7DGsu1kroIfxyE6DDx6FGbjEfKh7uYqKPY4vnvs4ISwBXX2a+p\nJSPPLnuNd6Qs05vCqP6Op1VN7609de/qfdpUUQXvuZTmm/u7VP/dSiR+K9NJMa08\nclyV7ZFEjDoEGTCVyDqsXGpxBG6YPnOt04SANJcSPiL0w24VqmM+5CTCHTOTj7mG\nep7jpVkE0TYv6YNBT1YwD75Wqx0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEUn/X94128dzQ1+\nYc3mtKhWnV9AMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEABO05pPtCLJ3z1utgioAiEJe/e+yS/mr5BgBiI50lgdjf\n1HZVZcCX8cs6z8BajbjEtoKYo+SoGrhM26q3McTQKXdOlZPQZBKKB38MC00Ijuw+\nL6WT7WI9WM+IafTXpL2rQh6+zWIku/UW4c7Wjl5gxxSF1+rfHisGUKkTYul1BVJ+\nVNXK7W3sz1wRU4Gr7Xqdtfz5p+5GImGITqN6ooCORnSCbCAKUc9vnJWRdQ3tl81n\nT3cko9qApy0oO1BUzzlR93a5/hHax8khlw+aICL97nmXUgxvoHNyOPByVqR7UkL4\nus7u9QBo2FUMmWFknZ7qhSGB+voP5y4IHAaKx9wmLQ5gxW80/DUuFglOWSyZG42z\ncABsLJXtsSWl5jK3J0sypuoyfQP2jBHgxfzLgX1wgQraEe/qvXOEx3wGYbf/R1N8\n7oPKUYJcwAUd+binqqjqkz6fjpMGtcE4sygMhMo86JQxXinzkKRgdmo3AkwCYHTz\nn7GnwphxYp3lNhL7fXuqP1Mc1YMwtUeuu6sHP6c0HfE0xqLFaGhwqwQLfvz8eT8O\nF7TUDFCZ+9pOCkIKBD1XT9PkwLKKQbV7C5xQN4qF9rEcHpEjTIIhOF9daU4pWUUn\nwUv2/7IVAp3I+CXUwTK0Y6ueoObUleO7uvtjZ8Oer8LrC4VWmyibRttMcLHxPc4=\n-----END CERTIFICATE-----\n\n\nWUS amd keyid 90e007e175574201a7a8dac93b323114a887e1e8\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAtv4c0UL6+4w1AAAAAAC2zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDgyMDE3NTIwMVoXDTI1MDgyMDE3NTIwMVowQTE/MD0GA1UEAxM2V1VT\nLUFNRC1LRVlJRC05MEUwMDdFMTc1NTc0MjAxQTdBOERBQzkzQjMyMzExNEE4ODdF\nMUU4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw+4F1e5UYcaeGD5z\neyMTLwthHfTJUNBO5BCZD/uPVwfIBw3vAWqNatlLOUYFnI9iROfAItBoETGmg5R6\nab8onNsVTlmts74g0ehGW/yNWBQ7lMuxmclpxmS3EKbwpVC8KrQFF0qknCiVicmE\n4W5srYEZa3DmvZsXg5zqkFr14Vuh7r3z6FX2mEgVulI3DdqrxOf+PmMLVAj3RLbR\n6tfYF4bjYBsDsrRXUwgQTldYYK7uBDEbIeTzdzPfcoq7ORJYvF9XoFz2VFqCZJ0I\nFsegpNn1QrA068sNnHylMctDVKfHS2V3SW0m/EB6ozy7y0iJrwRtYo4O8fqSgJ2I\nDIMlEr+6158okp7Q7y4yxSdwcuUcy2DxxXsdAoAsQJTjpl45Urxly3eo0KTcDs94\nj7VO1llBPUHgwgZEAxsq4w1u0HJ0nh9o5WVDOW47xMxVkbW5MJ7y4nv5ZCVl7j5J\nDUCxIvJW3UsG/uSiYNlDIHL3U4xx1CFmzpP84tiT2w5HBp/C0FHE8E05mnGsEF8Z\nX/29Sa8yTpFWCWlOJV4wXR69ZX8zVKaf/PVr8YvPPxC5x0sZ9ENxjf4shoGIbio1\nYaOBhzfgW7lpz4l6/eV9DA6WEFAKL4AhScGLwLBjGi876ZYIxFpR6Z5WM1w0s10R\nzG6WDaQ09abYrDjyvFhg2Zg6UrsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCPanc2Rh+Af35Zl\nLlnpvYSSY33CMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFujhUBf+LSkI0gICgzeb/OVEpRHrfXe+H8OVCk4ZtQ+a\nP11H2REXtPEmNs25CvgXYY4xyWCvmhOieRbneRnY/qTgr4Ph8shAxz6ClTsh52yZ\nrzU7om3M271hLA0oaH9cias74K6iljYfe150lGMhBSk8dQ7JeU6alCC2fcBSZyKM\n0sGl7Zk3Ayl3zB9VsGI+GXIGpWtK0/rnPG3bX1LA+t/Z/NoF9MzSDjcRASov68rH\nbcNNlh9W9Opcbfa4mkWevT+k2oCI4RfS8QO7RZ/C9vefi+nxwvSWkqh+9yk3wgSa\nIQO+3h2sobb17/i6ZZ6Fkk1bFp6FziXgsjl2A+CR3X3LnXG6BQ865hsxPoJqcDPo\nHUKnyeBefuik4R0lbnQXDjjHp8YN1jy6oOg9dVpOWspz1PW9neG8Nlk2tEMeSp3f\nBNwqL8oecYxGdmzlopyblBf6lxzGi0/O9Y8CYDvkFpAvo1hyNrvYxOAZVjH3mnfA\no5hAFCALdyUuYchr5IazDhXoQO8mDD23cdcpo3huu2vfBFLfG43TiCOpznPC4upH\n+9HMqRVX+5ucD0x23pCNl16yrk7dRnSuTMT4pL9oTg9zXXI7JicwN+7xbDMoDzZl\nppf/xYHYC3hnPYF6h6mzSY6G1kORRjWRIf/xAHa2zdVoMlMlN88EHRMQKFtk+fg=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 0d9969519b979d32ee4b803165664e9cc86f9d0d\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZRz6jY/vbsZQgAAAAABlDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxNVoXDTI0MTIwNzIxMTcxNVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0wRDk5Njk1MTlCOTc5RDMyRUU0QjgwMzE2NTY2NEU5Q0M4NkY5\nRDBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1MwPa4gpzcqyR9kF\nJYvYD1KrkdGrmfCBv2dZ402NLppFLKwB62Bh9KZMisMNMs4j0FrFCrYNARink3tc\nEn5XozNbFM7xveQWhCJ+oedWMEbOrPoFvfTMRMpjy9twtSuOfYnGxBG7OIj+2gzk\nWO8gMH4zBzOPcgicsThlK2fvK+nPAgEkljDNiXQ08AvN+uM5i9j7vPjRqZ2ybklE\nFIJ/PFZh0iBF5QWOvpvSmujkvP5f97kaeAAowYGyo2DUJXDI4Sjgf932kWi2NHFj\nV4X8I0172F03aLwf+Ckgb7ner1feNoz1JXVmtQwGiI7qMh+Wjpe7Raf+jUsZCBw7\n99u5UqMAcK8D1zKmpYUoM8I7ZudFRF9JaugFx9yIaUnOL9e3YfuKLLFbwaSd60Ch\n2FY5YGokokfy7kGPpXgbqPwN6cgp9y2U45bTvw454npVs+cF2Oc8VQSb99de0r3v\nwgNtmHhTztxaeyIeCUfqobKAS5Z6IKWGQ45Vnd7CoBwRx3HveD91Z+gwKeAe/qWR\nsl12Lb4s8f0bavtHqVU+Xlfe5K8CIrn5u5TSRi+6cs0b5NnKwYdNLr0oMx08rtsS\nz4DpNPNw4t1MDqeozJW0PwSjY1eMNROMVazaSBP3sYEZXm3eeCL8AOgYwxRaiZbC\nfTPHqoQD9nJY+ByJAGEgLflzsl0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCgyqjA87As0ueot\nxDAsG1mpiZOoMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMFWEu3XMXkUKdFwrOGPWp7zw3mt2yyRP4wpkGhgi42ty\nIKAoHuqP3Q4uNl43kxiBKlJtnKKPY+M4hsjKIsul++TtkHurueYmcVsNsbuy3gKD\nXysT504CmlzA1GZmVbXJo9mGSqb+gureTUuRA4v9Xo3QW0GcB3sJU2XmVSRrOI57\nvV1vnuLnHNA0+Aafy6DS9S1fuQAm4aWm2xXd7iLWoPcvaSmI/XJmRn3aLktP5i+G\n4KRhmacPFCzIWrgRjtgfY7eWuhMgBXOTPjMBvJrHpfnSxgFMsUZq6HqpfgYM+CTu\nwI1gPp9Mo8o87dZpf4vURUx00qpWQeSRAaScJe5FiVf0IUoHmXCGFIWQ+xN7G0uV\nWR/siK8GiFb1HUEZBD5f8bQS0n35rBjke2t6iiaPgMPcu4QyNRzCfMvHbSa9ZigT\ne/79HRMwwIdp5jli2crHIbIY3sRXmMYZ1xbhZzT9FUgDDyAlil3VbekDDRExB1iZ\n5pCpcBvnglqaanpdK/guXjrJWnQ1ZYO51AWgyZYi9tAg4LYD0Hjs5bl5JBZI4UJF\nHj/T7lspHb1zHVuVcY4lSimHrFi8/yRpINPQ1BskyAsYKtUjujTlB1TjD0YWI32t\nyMi/Lp7VpA+yhwlPUfgjPGjp5Fzi3YpUnjHugdNLAP6d4ozBr49u1cbPZlv/ayc=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 18b1af70b93f991972f362556a9a3fbf4bb24e0d\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAaszvxPl+DetsQAAAAABqzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyOFoXDTI0MTIyMDIxNDkyOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0xOEIxQUY3MEI5M0Y5OTE5NzJGMzYyNTU2QTlBM0ZCRjRCQjI0\nRTBEMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0BYDuZ9U7ppih+Wk\nQoaQLKElf0ipdG2v34WT0z057YPeqgbMv7mcrLcsivrKDYl8xH6Lf7USzrR4gUOO\ntAxWHjSHXMK6R2CIJtU8keuJZ5FWEG2DSNU2nWBDPlIQUW+/d2/486uKchRacqZK\nq9mn5v4wumkJTTYcG9K2fmgB2vz8fpsfHPYGxRzSfQ+0dc/172SlIRc4CyUhzTT0\nzxlVszq5AjIMMZ1lp26kc/mf7FlrJfGtKy1REEMSn+iboUqVMhGbP6GffgzuZAa9\nt9DDdsWdcw+118LmzdUFFawafzKONH/t2kWDouJyxlkGst6VU2Zeq8AOATap3ewB\nDsxeg360VNUzoT00ElNU24y5DmNeIrKrhZvk8Y36mueqMGcJywh0jgbdQE44SBGK\nvLE7fYHWGBUvI3x2/bhvglgSidQf5QpTJtU8a2Cfb8QWRXIdIlVDxIBTqBjziFxs\njq+2RXqO6DZE+SYhLvfzrWa7NAF3P/z/GFHyKOxsO1O/+sNi+VnZJKWpNuq5T4at\nOGl8nE8xrOTkbd5hMnQ+ZKWUB1Gs3SPLImx2u3izr0FTF7GCYd1m5CNwwwVSuaoq\nUZI+j6tC6il+NgaB0laCHEUvej77I26FTXJM5ZzEUc3KbOW5K7LUiT1tF0qhmgLg\nhCaf9EIkvAiMBfbPbU3a0t+UQ8MCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlTYpYPZ1AWBHly\nn1RXqOXcj7zDMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAJlNYbrdiig+fB35bVqUujnuZzgXQbjLJYs/OfkAvSU03\njOyIfSVhC+8Q+gcnSOuZkfXAU6ZgtuyhHGuBVrDqLZ7rjJEDMbIv0cqQmNY7il9V\nhqGfpm3iBc8Ny0JxuV3UartLJhcs+OZHLJ2q6COK3TqMkWR1udDP65reUTSS+AVW\nMnjPNv6JZj/HFrH6niYPk8WOmbyYwM9oPCvUAYttmkPxL27zAHHUy/ck3P4f6gUg\ncysEvHqtSAN6hI0pzEFrpxvdUJmRuN1UYjD+xQrRccYgel2XVeMFRdfwxG9imadD\nr8v+QYrWOnpGL/qSuSytfbXqq3TdR7w3v70ZtITfSYstKO9sLCews9LNMrAixPbc\ns+FzGcmLeo2IEivIKImw+IAsvDqc7zwQ6VAQseyzB/JjbMUugWSUI8/FfxRkIYHs\n6Cv65443CnbwKwEARV4npt8froaBpnxHdzryXu2KEcFruCZnKPAU8qi2BrbHrXcN\nWbG4tjGS6Ud9x+7CaHm4J/HUXqlg2GC0ShKawiz5W76moS9oP6AA+cRKKLAbGqYt\nh/iYjCCXwlgQPf0TSJGnCBOkadWdTLl4bSkyXPT/8HUWZ6zy4I0sdx/7gQE506ss\nx61mmjHXrUgi78akAc0Dj02TRmj5gflaJaxPNLZnZSlmaMddfdS96nK812NQHV8=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 263b744d85412bae6e13e94a53c235185ba4eeec 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdqY7eEpfLZyEgAAAAAB2jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxNFoXDTI1MDIwNjIxMzAxNFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yNjNCNzQ0RDg1NDEyQkFFNkUxM0U5NEE1M0MyMzUxODVCQTRF\nRUVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwbhN32zc/FBVxFKi\nHX4LlDyhQ7KFTkoTKMcq687Nxt344gcsO5mrlqBKLli9pjlG97DDA4QTQqcmb3pE\nGj0ehswvNAxq1I07LSu1VRUSiOlXB0cgQT21pthQZu329elZ0uNNiKXV0Ml6jBO2\nkhKoH+Web70ImIWyl4pOOhVDipyGUvuqKS+7FOZJ/AnkfZGBLQdg2TL/SjAj/NLj\ntNXmgtnvxD7rBaLM0u+DQGCwAVUzZtufKg/vxFwhZz9KbHGyCBAkpw1/+bPGr0eA\nIKDMfckLV69rvNbixBnqcYMRL0v562gboogbw1Dj1l8jiaGJF5EDaYuppSxUG+ag\nHgtU71sBYaAFRdRcZzbHy/yreXe5wF1R5hCwCeZyjxdV3wXZHhQ7+qa8naE+cLgI\n0yKgZ/hDqGkBNGGXtsIvcy4RUuVAijtgC+fWJKOwuPp0cDZNhTvUSBAxWdmSkrmr\nj20T3xWSaOT7D1f//9hYT3v1FWSpjg2FM0PNOdIoVxqfnDZAI3NXy7m22DYDSNws\njYuuZ+4uNoGAG6qrj0yc02KkqDRf5R2BBPvWJ7sgCngfpr4VRtPLjIRgJgyqaQhb\n8lS7NVv2MY3l+TL9Y1BInDBWr5hHzRM4w3hfJzVR3cywsvFNSBlEViNaCyj56hQe\noglQnKlADqBKAnCAlIVCQo8hgx8CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAz0UHbPy4dsbXvd\nNOHadm2YB+WjMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEATwq+bOJyMhNjI9/xy/c9+gWn1pG3cafxt4Y4OlHt0JYh\nZbg1SMki0JeC9mVFyDX6Br0xYhq2N6Pvx0ziIc602UeSH5MCFCEkXwEKL6oxtvAJ\nxNUUDv65QETCAs9Cn1QOZbWn9iS+7P9R3iVkdhJy6OLm1UOiL82io1EXNpHpFuUB\nS7NKYpdWV67bSdZ4nSBLeltRvUn6eZbVf3Ll5G7/0iK64lc9YyRMryXdB/KKUVI9\n9+bepygd/nM2P43cBhT+KqQ7OwMiI3U4fBOvNjdqnsB2U1hlha0h7VCE1044iD/d\n/5RPQx1i+26bpgYNhp2gokRrxg76QwJLHL/vCvKXg9wYAHhLamQfzEx9sH4ew3AN\nhbheWEEYoqTK9yFzJ4XGY46msu5Qp7P3SCoBjGXh1sJW2vqzu1rTLEJH+pTL5LoU\neoRPc0W8aGVppsa4aV8Jqr/EL5rj/r7Ykpr8ANMve6Dx3pKyye25/i9QWUAOkYjJ\n4RBSipTGVNuO1ryYVB2lL1tbK54wx92gjNmMXbJT2/2FlQm4VwTEAYSky1iro3pN\nDMoSG2EolhmNrYLdcBbAdk4qxBP7ylqqAFTFWvyXMWv52Xt/J43pCOH3f0HPJTRE\nh0UHJwj2DkQIqtGgXiT91FmopLsG67sBm543C2c5G+vXf17Hg+jsufYe6sKKY74=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 29fe69630e853a4cd3575f84392a9bed2d7e8ca2 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdemC13uHIuwcAAAAAAB1zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxMloXDTI1MDIwNjIxMzAxMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yOUZFNjk2MzBFODUzQTRDRDM1NzVGODQzOTJBOUJFRDJEN0U4\nQ0EyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtW/i2zNnBxfNE0O+\n/XExT9UnfzCW8JVJQP/EH0dsbMbNh1ptD5MC45Qyw0/l48frpYhh7G/yE0xuzUFX\nKNip/nqupQmSQ0you4yWm31rOjHl70S/1JmIrpGxLfy6RlrlF1CkQMtPUAmckNJQ\ndWeqxHIfoOYdr8s+IAyASNi5iDJejMhBeGwUjeOVb/9Cw/JPPJ/vueXC0CZGsWa2\nZGU3BJkrxHcEBQwDjBwQmZSUSxRrvds3EqlsWOYhpNp8YYUwei6UVX/MpB1RBVTS\nC50ssLD/bHguw/aZSWsG/cHuWvCanGO53teL8qMVtDiRKkuRCs4Yqy2oJyWbojta\nsmEEv7f+8SctOxDbRj02m07UaJmpcLxbOeRgDGptKFFUBNXhBQJiy8pkHC0Pz/gC\nWogLO5ADGRV80STwqaNgRtkYJTN8q0KlndkS78gLUT1/jnA67PbejZwj1C775x3J\nJT9qFlMixuiGiL0sni1TXiWBoQRdOalr5ySC//+W2iokinWqsATgg9ew8ZS6249l\nFlH73jswbrsE3g9vsjJCsRMoiXp6MiDo4x/VSspKl9T1bwEDP3uLWL4W3/yhL9Ot\nTzOKd2FHC55c/07nJiJdZg08nzBE/LITtuXGtcTBIdrhiKrSCMtqckVLgZL0Sl7r\nmdEKIPmQGemTZ+2p9NlMH2XWFpMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFf7VAY/cIHe1XXV\nCpDvV2tl7IIUMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAKLzz8ysfP7tx+8hdOQ1pWEy3rMFgiWipK9skdLU5W/8j\n9lvBQpi+K/F/A0kGrAsKq82+qVgSn92ZCVKMsg21HJpRD9+WWc+QgdgCzWeGuAhg\nCvaFbJojHln+ObELlMrsjIkjc+sOuw7Wlh464rax0CWiPTUAOIMHamPcwvP010K9\n1dWIk2NVkUywlN263RG693clCjmwCf6yQ+rSXFt/toTTMbNW3R92ve7TF6ortoJB\n2Mcpipyj1hGz6N2C5M227pZm0He2qfabffIZJIcLe96z6xvgabJee82nVciQ4GUw\n+TpMJO7k0PX85Q6zwpUbpT4/+3AiE+xs+s3h3n8ACpdFr/qhuiL33gMjuF8v7EGj\nkMygi5QqMkgyyWFJQD/Cys6za/kCumg3xZMFbU4oWmnybGPqkfKsv4/YaTsgfmP9\nKXWjCV1IgzI7jB6DrI+yG1HDbpqVvV8wBrRO/Qy9h8hqsHmHoBTKCUTwyQn/xBHq\n0Ckc2FRsKb1WBcYbimgH+LtAixSFIcjYIkAnAPhYB4BNh8U5pCCct9vCEhRYnfvY\nj7ATSNzhdE6J5q1Q+46N9Zd3QYvqXvKyfyAvsLANkP+RSsl6H2iZMDz1l+4p6cPu\ntO0aFZVDPx5c0e9g54j54BRvv18sEXPjts6GWIJbuADLhUFxD3sHtVPor7/Iayg=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 2a77a0e342cbc6c72ee3fafc3b0a7bcea7c9ce4e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAajAHkvt3mJs9QAAAAABqDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyNloXDTI0MTIyMDIxNDkyNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yQTc3QTBFMzQyQ0JDNkM3MkVFM0ZBRkMzQjBBN0JDRUE3QzlD\nRTRFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqHUrjBc7uCry7Gvv\nEh78A3th0WvIamCsMgksDR85Rcvhukwpr5KQ/ihrB7UiRRDeahoRWXliUSyv4Gwa\n8gCCoUVrM97JczbdRPFYb6SNp8x18EIxMNNt+j3ZkhZcJkE1qlU93guJ9+PgsIkh\ndLidLdh7oUXW1lGlRqIG++fFzs7kMLxsZjwzwex/CoBi0G/T1YFoThh19L5x8gw7\nX03mgl8VS6FqQo7HdIQsffZKhJ+NZdYYfFPvv5/JfvoOMxdwqnmi21usfMgy3yhz\nv9OYoZs7nUn4N+GVX78ckOGIyZK42d2WrEmSDdg7uMbxweKRSVNPhEFp11IdCewq\nuKoL+LoSVIBYPW9Ihpcqwz/D3z7dHQyh0CHioLvrw1M0MJeJcVCGw9lBNutzcCrj\n1EF43DMwp6blste1C8tTqfh14+8S6YH6BZJMOHVevHVMeyhezqgFuEmeI+N0S0UD\nvXzBa0a0fehBjvSUyQXHulr+BEyIb70ugEsqJ5tu2KtIKq5hfX+o+nzIS9R5yBjX\n7Yw/NTIAhzfwjJDRog3TbUZc6nufMFWA9HRG+FGz3uGXvN1IqsB+H+PIM0a5V3hD\nQdFbXAHZsVxc3OLWnUhoh+f9nK/v4IDJcBcnZtJ35om7o/rc13HtQtQEUihzDF1F\n/5IBDvtZqGjXoE5Z0bVXtDb8CxcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAUjzqqzBC3R+aUM\nFPyihNYXbqigMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAMtnNApxEuP8mzbcON9kDEX4roj+sHV9rFpbeYL1bvfAY\n7f8mKXWFtu6ZekbFEspqES2wCnFb05VpxFOStHei25jA3NCSSVS+czDwDYLtbP75\nKF1zYafpUICZBph+lQupB1gCgw4JKS3ogTGhgqqtUej/ntTF8BrZQEmpvdoLk6Pw\nEKPEh5D7pLOVn/GCVda1eBfBK7sOpW5uqoTeBrZp9cF5G2iWzm3VOKRz0Ee4jwbi\nXk+tyNPFruKdoGKcXiFBWu7QhLSveHwyFw6902NjCbRsTLSZ2zTF39JAuukpQBuF\nJ8w0GY0cDl54dEZZCF05NsW/xgu43V6roXNHtU95wkN2TKKsP0Ihx6F7BVYbHG5t\nhfBVG2i8vqu9F3ItBipsW9QfYQon5XZqxc9u/NmrEUNf/U9I5FHtYK4ywDj4sPH0\n5igHdeYPl+pcg8+dqGXcYer7wM9s/ue2kfn8eSM+Wx/abZooBKBNkZMXrZ6mjyQB\nI1SS0DEU+b5sfX7z+hwdNdVolZAeGRBmBxe7ZGYr7qgnoAhi6aOYuPSfE1h8ko08\nXwoffiEH9d9eYr96qJ/GfLmY3+fPjZSCYtRnpkySEIHqwXXBQnnoGBhdYBCtiefo\nFGTuXZcD9oQA1qeK78+AYe+sZo0c0Xra0yJDaFpoxOtpQbD4Xxbt1NNHbUx0Pqw=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 2f572bbadec4d18e0d91ff4375fb468c61b8c7af\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAak3xz6qdbcqGAAAAAABqTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyN1oXDTI0MTIyMDIxNDkyN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0yRjU3MkJCQURFQzREMThFMEQ5MUZGNDM3NUZCNDY4QzYxQjhD\nN0FGMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqGljqXVEsanEDcOk\nk/jPMbOMosBjFfemyzq8790BZWW/1lxmgjYNcdAxvN3Kh01/ViiGJQ+tBQUpvC6A\nRDqPikr9ztUvogYnxVWiHOn3aVHD+44zAwTArnRyUKuP8fR9jgBU2Y/CpjPQ3BR2\nK1AZDWEuD3Ge93FjntFkepnsiQsQXMw+7yyhFiGeOXTNNsY8gX/6D5/YEEGMHzz/\ndoNQu4Aiq6XxVeor+wvY3AXtoU/cMIndmoOtQ8XJ3dw10w+uLm+nrdfaq6mHl7U7\n/fwjjEDlrh3MboComNCTT4eVmu7aFCav6GLzf/4E3jbAJVAnD7ph73hQw1cy0Wwm\nNN4xkItywsJeAZEnFkP9z3kPCtAnV6Qqz4AddU7FH2uuA6wg7CsUGf6MnS1IuxiQ\ntLfep8Q4evoUN4roWg++179asJb+e5deyXOUKoYwai6PL6TEt4RSQqVo4p42KB1a\nfExVI2vUhvspidOejDRwW952WqEYMVAJKdH2q1VJdWoX4l58KWC/wkbtn3U17n/j\njQsFAaFe9wLE2RfwesvFOAtYwy3O3uz9XfujizX/bZ7nLxWytdu/avqFW24JXUZz\nK+KZo0ebJec7TQQgEYkBBnCIugydAYEZ4gHheuLn5fSNnUNZlylQrQBXqnw/Kj07\nFIv+ZU58Z6d2YC1cv4B43p7HZHkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJS9Vi6co8beOX2b\nPVOUX8oMBjknMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAOFHhKl9U7rkHVZ3+mhCg4TaPkE6Wso1850P7S9I6La0j\n5EGp1jI3mH+oYwNRaoCb7Oms4aTVEGLXpcLPOfrj6UI9lVK2dC0r/Wp6OLeZRxAB\nrrvuFuNq5z35hzYFTPnVJwAMgfpXxs4nt7O8MV+rr1ypR0/V9FOFF8WRt4hf6PzA\ncg4bVfKpmwYkgYJQWaL5I+yIz7/RpFX0v7YnlTLrNVN93DOjMCN82PKH+NDnHxPu\nM9PIt66S8e500v6beVsz3N/DLc2PB0lhI8Hk67GqvfCW57KOtPRnTcvxTcnSxbml\ngJHCE+3wkpLmeQqQF/loK9uh9VGms01r23BsKv083IC1OLke5j4oNrKDc7sHJZGl\nI+jbNIgIuCtvgqA4olmleg9REFxxhrzasutqGu6tjGGzVTVhFjdxhMwheevin3Pg\nehcYtIKeoV6bHUkbIpZZyhNmnGsy6ROsz/jFeKVoxJjAm6GVe7AaW98Q+4KnGQmx\nuQ9IJkzYgzzWilmrXof9PW09OpsEHyr7pOe0hVrMZQg5A+STvrrVpq0YjmWreJ+L\nQ8BvRcVrN0G+Pn/7ONit3yGBZzg1Au3z8UF8nrbZWBUiRo7yO/yz0x9GUuzKAcj5\nO4bP8ijcxR/vRjqLa2Q4pHkFbzu7RveBYlAeE0uGublQsFzcZyWOJu0q+cJvZ3c=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 347c93cabded6168c61fdc8740a7353e46751616\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAax7fM2S0IMmaAAAAAABrDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyOVoXDTI0MTIyMDIxNDkyOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zNDdDOTNDQUJERUQ2MTY4QzYxRkRDODc0MEE3MzUzRTQ2NzUx\nNjE2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3/b7+GvRi8g1PFvR\nGouwj0xGJWOjGiL61D6t5NpfmhBuq+B2b+hzTMXLJSHtTTKcasnqqEPHSB2n8iC9\nSIvN+RSo1EmgNhcEggwgIMGM0aoJ1g0MuIVOsi+IJ+zB7aOorg4cQsJhZhZHfYTl\nwdVRziqxlMiOmInTIFk612iOBzqtJ9+SXCTX66xX0bxf3OFJbdSdZ8W/hB6b2ZM0\nank7c97/lZtIqD6GX0oXJoUdvJcsMFDtgqh5UVN7dkF4r4CfZXywmBhms/e1IKfS\n644/Lww58JbVRNQRRPbp6SRjd7dK82zno6tLSIreas6pf8GTE1D+/SrfvQkSQZ7s\ndWNIOCNCffZV6RGxcTLAyZL6bFgonNY1g/05L2sWJVOAC5Stn7Fp88LUsi24+9FS\ntVV8eSFUcGudTpr4vgHVuLG6XC3X88cTqnzuRVnRUkmFQ1Q3CteexqZdhtxds3D3\nwCbNUnG5S11YSpmeSzZSiy1N99PtAebaTv0kbx462Z/EmiKh3YA5zOfKpxOpdbQI\nAfksQkwyykdKYzOB2guTbnGifBx0lPenH6pxDoi9UgqhFESfELBEyM/mbbZtHCNr\nBjEwzIMnPH36QZ72pj0c9OQBjwNmolgIispAAuNFso3QPslEFnUgt1QLyK/KsL2/\nwLM2M5TYQeHMB2HnC/o0aG2tprcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFNHiq7bCF5EQbI0U\ne9ods8o/u8IrMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAlUOGaNUwI22a2YIxS6kQrDkrds2SL7kGyAnefQ1X6DSg\n+/8X0mTmok6vFBO7VBlThdRcoEXMm8WoG3VO596D+lPBqzoKSx8B14CssvKLkBaw\nfvcnbIDZDJYJNhdQzFaL3G067klShhP9UHNmla7njdkeuhosZPiQmvc4Ran8qVn2\nPlDjOdbBl00I0wSUeLhh+/lwoPJdxoaX+TgRyg6nshc4TPt2yH1ztyS/Ufv0l4Na\nE955nQf+hetWARzfKksESqyP3xPZOmdtKfxtsVfWCPgKMa6q0A5dn79J1Qztvlct\nrYF0oE9rK8NHmIEHA4NukRtJhQ80IVzW66BXzqgu+CMQAfaq0+oYlfsIkY6a8f+W\nBv31M209HCmhAiPdA64Ieqj/nQ2JX1BT4ov/CdIHZx1do8ObITYY4xJV1iVJoAx7\niq6a8x3J1hCowvzLsRGuhCz1XTmvNz8+mxxjm1whwX6HLqjoIspBZG8LI7HyNlbP\naLB8/YE+yFEWXuSlinAC9zgj3NwPFcMO+eYFqAY6ApZ8etuQC5hriywmSPQRNwt5\nKBKKhkwztPoljtYFCkXvKo/hP76q9vqCMN8T2LJswtrc9jLlzMgl/3DGfVfOqojd\nSVnkvRz8Qc+83j8avqEtt7SjbO7Gl8XYy3RXEtNhyLQWbL7D3CWxMhh8fhqN7HY=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYmQElxp8taimAAAAAABiTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDkyMDIwMTAwMVoXDTI0MDkyMDIwMTAwMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB\nOEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAwTxPMntcEUD8AaD7\nYPjEKJg6uRXAx5rqJIrLavEXUd+A3JHoYUU+YB3pm3Y8iuuTyVSoy0jcslCfZbAH\nynIaCwurqYAbjpCIbwVoN1A0vXL5CRO2YqEVxcvjzjvBpJcgX7+niqzNURKBfLho\nyhscrHacreDEjLYI/G/wGw4Xm/ltRyL0AuvxXOnY8AxqyHQm5u0bRUoUEhg6iah5\nYT8tm+W/IT0Fwgw3x7ae1sfgUjlzAix+2y9URcCyA52arm2dFCu0VO3rS8bOX6la\nCLF6qG+C75pXh2gzFXTcBH6IWBTHZCAwtUHgeXuwfBaaHDATRor1JZYiYCPOx2Nf\nsuk3nDIQYmUEh0cXpcMjpS/SuVeh0sczy782hbPQexN/AlxsjzD8ADIK4Ha4eOZE\nyS8aH/1loUp9LtkH81NW5A0txBC3rJrcTljH2nd9OGTexal2pzDq/Rum2/11ki+R\nhLGi7UjGRAZNtHB4VCrILzb03EIPbwSuXLAg64G7lxQtvI1wOFk+JpFazG/l5jNp\n/TkKMa0yJuW+55zWRdUGLphbIxhGRQUtnD3mypvoENIdsNlqiqzblJuMFSMGc29h\naGwD4CVy39DGqKSto27Cc8qZrcFV4BC/ZTgsIsk2dSTMU22e9I/Iy2eYa228bfJW\n5Dd384n6wrDtvrVq7nMAbE6nehMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFJT1oo+vcCmXEvi6\nEhtk7TU1XA/QMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAHp8IhLskAHBnE81dXUpaiJeQk3BBu9AqsNaHZjfv0zKq\nfuNYCFDGEbCaCkE4y1e2K9TUh4tAzEVQREaac8F+FyKRRi+wWNhzaMMMGx8Bdd6B\nT/ji4obv5emvU+NBbAS3B/3jlxoq07zmQdaifb/1BFwgR8UQvGDRP+jJfXe47EmC\n82U4Ju2eCyZGxVs9VBPTVBC8KjVZEgfbmJ8As9jOclzDDJEwEO5jj0Nsv8LoQntf\nc6ntwGc4G6Cs+A+xuxsfZV7287JkYs5ZyRQpOEzYacqM9yuWnMpSfSHbUT3BJZ9K\n2I+1lhOqJuNOKk4kdc9oeLKKy/E04Zj4xx1S1sdANnOdjNcJTT667yleBHCSd2Oj\ncU4l4GpiUI1XBccN4jBLLDj1RCTA5jCuS8Fla69JJ+arCR1YwPkIlkNhQC2dpI9u\nFFTTyhoWCHnBiPSKAPGx2ufu0VX7ntYRpGldnpJL0pEsx37/8QQ2yNN89HBtA8wy\nZQSXUgWGVg+fAh71QSHv1t2w3VRVyxuaCDbnDIajQlsIqp2mGmSy3omUqGv6/fmc\nf8uuQDmQzFc5hCjjNEUDm/2+yOvXBWEVqzVHoMQ9WsJuaqwe116Xtpeco0t5nqzj\nn2bj7ib6KoC5p9Ld82Ol3LPhmmR6N1DsSNA06KXy+4zMOuE9gJ34lOi3yWLZSJY=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 37ae346baa54c513cff0290bb321a22a34a4a8c4 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApQFdaVGqlv9jQAAAAAClDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyOVoXDTI1MDMyMTIwMzAyOVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC0zN0FFMzQ2QkFBNTRDNTEzQ0ZGMDI5MEJCMzIxQTIyQTM0QTRB\nOEM0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuDwdAFTtGvOq9j0Y\nY6D96afPKUJSTenji768wGoSCEoUmJVrtufupm3f5Iy5rsQyPBsKXqXvCznNMvmG\nlk8kCKBcC5swWKDn/MnbIpNIZMhzbyILg6RfH2CUq05M5E6+sOkbAJbXVyHODq4F\ndDZmQjoM2eAMp+bcyydwRitTK2CXKEGYHp/F2YKKWoDRjgn9ZZ7HXZ0Za0h8Tcet\nty18R0bom7jzSI75x/nlH+zQn8J1TCJtF6Hr2nCzOxtUQjRXjXXviFZwhtm90elM\nwb767SGKlDT8PIR36Qj/ijpMS7ytgrBgfOoachm3ifog0/mR1QgyidfP4KZg2fIM\n2LC8te+NrWMTlVOh6kiMNBXcAqIPygFx1slUw0VZsR09ASvvM/DGN3nZbog7QwEN\n6gg4hvGVJcLdYCml8q2FDi+iXYvUp9csyfOGBcOyEh6HbhqypGRORbhKT6ieK/LO\n7ocNs2soCx5h2IRShzooz/PF4FSQ2a3m837akGsUoQi2Qdm6f6FdqpkWYN0/CHRU\nbygiaCeGIAN79L0Ndyj7S/dk3p6D0OYtT4E7YIEeH+aZWEJw3RMnsqsqAnTncmsB\nYBmjX4jBSLx35pZDeOulsLT94REOnxaODUEZHd5PSkN09nnQG1TteahOeqIvNpku\no2a/ge8cpHUb96WDOkv9HQTPw00CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMjKHPwxAvDUPTyE\nHsf5WboXbIYnMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAF3KO7AIiyQMRygVft0z4z5eHwizqPrsXiwukq7TjXN2D\nFM4zjrX3gKJOBKoFHSfCMl0dGf4aKQHRuRrvLyIhL3c2CHxJw8BhnxHLCewIaWy9\nATLs5n9cQB+p7im3DU3uavZa0Knjdzf5wimlY2r1kGWuzzsVyR9nmyR1+1pU5fVL\nL3WaGhsKVwalQ+HiOIx209JKGstP1Qkgzczr5mjutcHza6NZR1tLRivHIn0JuI7d\n16OlJiQJgoqdj5kQNk/p1wSEPaJzUmaxJZCAZ32WVMP31xr8CHZo94lZcU3yTfta\n5WZR5vYihUE0gFIkG7t6+4qsD5sN3ZQp9ZsMJbDn5/3cP4YtDcw3xn/vvjBEXvnp\n4DLw7yTbc6pmIWrPuWEXnTNWbIju0sYbiGrKHcuAhYvZpqnkpnezZLDYrzbYoN6p\nzfedlvtmhGfBwxT6I7TwiYB7K2+eYkXL3IVT9VfThDu8D6FA54tk0OY8jLmJSSRX\nsDhqdpsgIJkYssBsL/wU8r1abHZ7OL+QoN8G+lACpmQ+mgCuMe7aAgU5AGGQ1A16\n6wC2wdG14bc5GK/suzRee6Bshf/l1ew5CfQ0397spIvCZyPMJ7B1Djp/SaYIJJn3\nPLYtePeJYYB3sDs3Kc0GWcL8a5sArG8bS/D+aDSrBQjuLQH2V+bDpk+IP6pUCXg=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 40b8682b8d18450a2b06849d9b5cd96f4cddf4be 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdk0LCjvHqtWBwAAAAAB2TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxNFoXDTI1MDIwNjIxMzAxNFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC00MEI4NjgyQjhEMTg0NTBBMkIwNjg0OUQ5QjVDRDk2RjRDRERG\nNEJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxYDb7aM9Ea4FpsrJ\n3vnp2dfIzfKa7nFsEfp8QlYt72mvXxoYFqK3eKZLE/9YFh0XyNBxF/x9PDEKauKY\npRhLdzPqqKUO+F3g6iS3NAiixemzNdccnXnoc2WjK5BP3N2H/0g8nFLJVrHz9aT0\nAV4ekE8d5uDqe4HR8c5/tcbTHpzX5mHbtkTUq8kYNFma4OLaJMN2BpRpUb2t2GuI\nOCkoFtL/YTWc4A+DuvPM24p/MS87AsiNPfQI7M6Psl1bevzwOA+ZY6h5YdUoGQiO\nKK1q4Mwvldey8tM02mhj2mzqFs79E/vRchxtOucAPEtH0sgmLhWydoX5RC59kvbW\nBUdSb0/zgNqdNtKv57/nX0pCbTdfPujuOCZ3HGk8VYcNbPNsbfyTHQNXvK9Rt7BS\nXfGcnNzI6AIxuPr61rFV9gZBoUgbZNoSo2nrFy6YFz25b5YjQr/yuyqTM4Plz3+h\nnPs7fBw4p+JmYDD/XrTL+NFhp1Z6NXcf81HSqK+HTBgfdzlNr/hCsdlNPjjj7U8E\ndAOjuQQaWpNoOH8nzvy71/srFVCcTScIisrXXIju9NkgTHeHWrJ4nCQvmaPl1dLO\nnfTEuB35sh4XE3PiykoZJEnoe0cUyoh527wjHqWW+XqXtFb2JItzwU7M5xF7C16p\nH9ctMEG77GYVVIZaQsBFi66DW2ECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFD/nAkidvIBblwOI\nik6zxcXbt5ytMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEACw0fmqVeBbZicLgVBRDX6WyHc+90nIveTO9yUd+nYCcp\n1N42FR1mt+P10fEiTmbsrNP27ohbkzQOtcJj07c9X2HGhKV/UckmCtDUaMYFP7SY\n5lUFiyo08c71VJGZ3U78IzkExMEhfNC9rQbPjjOH6R+saRt/id713/BlSLFymahK\nAujEy009PwuetUJG2p6JE7JlhfzhKPNFvVVQ2MAUY4oksbRd2XGJe2niuopxzsMb\noCIEoyjVYYUV0oDW64wOoB0jVKpt3EcrXhgCUSXZndXtcfnR8iQsIvrx2TvfHrq8\n4hC4knSLaZEnv1oc/jhEZqRK0l0dusYHyAbfGmuH5N5xx5BNDfSlNqCKTg3Mrraj\nKb34Va0kBDyUxZ/R2qp/vXJCn3RlWWsGS/vamD0muxozNUoXGNtLlKXfJMcB2D8s\nVQSUpTCcyJPz4HbLtEQyVayXiR3KfDLxhRP5KpRfAs8DEQCGdhMUwmtyvAgVSkxs\nJOeWnV8H8o+gTyG/cJk+7fUaDVcI/tDKEo2RARjNav732VWVaJjVd21qWEWgITic\nCL5xDhzFw7zAShc0M+2BN11bXhXpLmtpC7E8uEHEqD0dp6iMAkZrZh8L3vjr6mcX\nwXUAQOe1zvrFH9Vzv/HdQMQyHjkZKot8SN3PrzEVV4sIb49/xy6N4fyKrgrU9Mw=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 46f26f96330691e561b72f7a63dce3a0517039fb\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZYnJUMYl5WHZgAAAAABljANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxN1oXDTI0MTIwNzIxMTcxN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC00NkYyNkY5NjMzMDY5MUU1NjFCNzJGN0E2M0RDRTNBMDUxNzAz\nOUZCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0zfnG3M9zNZZj+iZ\nQf8hBe73G17J3x6d10KXt1TRsdWOeLZdyRcxzUcKp7+D39cIcfG4LLmLdRmz+Y7c\nKRQpmd1wdubrgVVPIhlF4xLmxgaBMj5ywXZcOyV5PSxxKN6IkJk57jTLhptM79xh\n1AFBlhvbVzQ2xE1bGTEjNOInXDlB/AA/jylqs60Fa5W4R/uzTi8coBXAmIjZeZu5\nhRizvnN0HHQFIPGrB61d4J/tXaglH/9kQCcx8dNW68TqX1mXz55rlRLWEWwun1zw\nI3b+W1Bz5tge1HKbKALxbfleZW4vhSJwCXWRLD5Hk6zNX36r6QGf0FVbOBHpNPtL\nMXhVtlFL4j7SzjWvPc/eyvJRrBjJwXuP/ZRkSu23hEcWFMweHX+o/00kp9Z1Wf23\nT8aEaQ/MBo9HO2ye1pqaDkHs92MRPmnhBKJi/3kef5FdUhKfMURmZaTjNmK2+FeM\nqi3lcyGAYiOQgr0gQV8kx9Dg/k9Z8twVD3t8bIOW52uOjfdz8gG893S8whLFEpjL\nw2Ke9Rzvbn8tAQTTVw2CxmHxu274Ta0yZhgNUO2j7GDRZc7f7sMJaQtfpY5QLVnN\ncTY0BSX7D1s6U4MwFRQ1+c3G9hYKtznqCUMu2jTKpK0TAoVp9qYBeSZQ0zx+o7Jd\nv0pE++kcbDcwlvHCEiCIZng15dcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGyNYLqrM3pjVORr\n2Vz2BNJpD066MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAHRgbWKPNSaxEjNk3YtDMpBbiTBBj9vvTTMPfb+ZrluWa\nbzzIpIAaoux1wNCDtImUWShyGMnFAa/KQVwGxxyb89W/mYgKiX7K14AXiTEuUKN1\ns7b+0TSCPm4dv/qd+6hQeARVkhji3CGkjbu9UoNcA45lYlbizhHTqMDh5Z1yR/nB\nkRLgntszb4EfZNDvnjZspRyv1rnpo8m1pDfc2uxh/wueEQX6JImyO3eWDo/JIxyX\nxgfbjMM3f/a8iQfTV8w4qJHLZ1WLy5KRtBInIDLCHhIzY/cIvo1xmX0Z85T9YraB\nzraiahvNLc8AMqmKfAnRoRzT8KIVgVy9Oq8Ashl8f+iSuy4A0jbpNobJPjlm9oB6\nvPetlqyWjiqQLOYEmoLZOv5FSguzfCrztSXgriKEd0AACLb9ra3J4XhQ6duz9yb/\njY0ccwC7fDv9mq+RNTP7xdtj1JzR5vD02jLi4xd6y8DBHJpEOkQ8UOQ/hTQzAbQR\nNJvhhixEpC/1qMWq87tu+J/uYABSak58UZWJxi98AVN5yjEHymFFtQtTRpwUm39o\nV3n3h2Utg6eAMSBe15QZZYYp5Ry6beUAMBvNGkNzurPdOKM5BcymfQi/Yy5LwiaJ\ndgUwiAFv/77+3rmvop1i4q+7uozjOs7RDF9mMdDQLKImvutGyUFAs4zXfZOhGCM=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 5c2920742179bc704db1d8c54c34ca94405617ca 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAf8GjlzzjVi2cgAAAAAB/zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzA0NFoXDTI1MDIwNjIxMzA0NFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC01QzI5MjA3NDIxNzlCQzcwNERCMUQ4QzU0QzM0Q0E5NDQwNTYx\nN0NBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA3Qa8rooeFvZSMtZ5\neKDqzVX1yjlYMW1g8EfzIpa43uTXwIZFBCacq9UTRSa+KUqoqEH9a3Hm9SHOALwH\nQAYaRicyFQwiJIgZeXRpJvDzUCRdMgsiFUMndBWo7aTQPCDuLoPYGMGR9djfktBB\nN+pTYMBLPQB9WHeOvL7rdjvC1FAdQl1YSs7D+P2WE/JZVybyKiOZYpZqpGydLwkn\nCa4SptJkLFCKFSaGABW/4GWxUHXPkH4V/FxyfWPFUNMZNJJDIARe9wBJzoEOPPX0\nlXWgtinTN5P/pPDB9yBTMnjHpv8eTy7V36glbXS6S47aBhd9a2jcKRAGubhBYAtZ\n39IPANIAAw2h7lgxep7u/5+TJ1yqVOc4zCGKHn2ej7wMdn75aDFI4HK2oRRmUXBk\nc7t1CnI+rqDWDypdo66VpKT0B18SzGnbiEt5yw2zLhVY5bOyIxL1ST1ZQWshScJz\nr+v7MZuynrxDs9ouLtmsZA70A8Di8lglBfOxwYnDF3MG80/ZmucpSu8l6xsxpOGe\nf+N/8FqBDc5B6Mj5LGbrW55GUGAisOf09nRShq6YPgW8lUKHGJSfSesFUYCcPbxR\nSTo17Et9xc/iwP07rsV84ervIQGESI3KH7fJcVAHID9o6F5RfMzoiiqauoi8EXYc\nsr9oezVpRYtLaxV+mgfgjXU5utsCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAfR6msVZZZoJwmC\nWTNZYndHXSFJMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEABUpJjBksxlV3YSXEiTjqNJVf8PoNhwS6SxvZydYBFKtX\nhLtk8mE+Xp6Fd5A04v+p+yfTmii32WXObSfRh2W6Mz6x+5vpzBXHb/F0UHG8W6ff\nb34olqtkMJonscKtCOQTG/kfMCdP/9qNhiBKXol9ucSNr43LdfOZgT2jAssW9Ff0\nl5totV8pMnzCppWJyaJ/FfnNShUhZOW7eLronsStW5JpDufMhxE5/YpebVoV++qw\njygTIRSGMYg2cAx1J8GBJSUMyio26rZlArP5IRy/oe39vZMPN/IgQnGklkLKhS+i\nhi8I/hFfvaG/tSDIR1muCqgfRR1qcNi7lvC3j+ASWFw3g/JJn//OvPf9qIBPBTOR\nWNvc0H0/k/GJLRp37qWbPd2eCRNL2fXqBbaPkZXD/4aqlASojM8ixFTtblbH3JSF\n4lbgw+4TKWr6I4+Sx6hPq8RIWmMWVC5zeNOsxThEpLeolulKkrdUjUEYueyzoBTO\nOehmUaQ+cJJxtYMpX0f0D/H17dBc1vGy/obWv2pV1oxhxFPoqXDIRWF8MjqnnbO6\nguDYZMrejiBMIVaigUCqgiGv1rihfk9h5jRjyrIpiC9eB+BZgE2IlRE9tBKBIUJh\nfQ4CjxHA63Vxugj0JMNdeybl7Draq+7WiX0IjxZIaJrRgwwJY0SkosFK9WLe+CA=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 5d0815951f5f60638a69e7252f3ec4becd7554b2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAZVkB0Zv+61gHAAAAAABlTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxNloXDTI0MTIwNzIxMTcxNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC01RDA4MTU5NTFGNUY2MDYzOEE2OUU3MjUyRjNFQzRCRUNENzU1\nNEIyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAty1wEisbErwlRkgb\nqo1uvbDhcYiEG6DBw6ATBO2qg4gOaJVmvfZPtTvH81xqsYcWYQOq1T6CFAzrCYGE\n7y5G0vPRGu9s9B7Hb8DbPjdhDZtE1dvtp0T9NfRs93oq6MM4LIinm2wQUyHnGtia\nxtjt6x72DBTnLF+Rh8f4H20C/9CpWG2MaQ+z9brrypmllvYppceJF8tunIbmRF9Q\nVZypxGCPRzZc3AJcGjFmSBqgp8J571aED4Q9skGcLk2ZH6J84M1x2zV9jlTMXNZY\nVxr0ak1W1CQinKcxPGX/UH82bpmRdTanlEYLjbfRqrK6dcV6IRGaMz2mFjW6B9j8\nGF9OxmPd4vp6oQqdZ5+90n8wJm/CW3vNULTUTd+HP1RprHTNShuYmXQCJ+VmlPUh\n9YgMQ0sc2zD/UxzU0xE6GFbTYl0im5bI/EggHYUTuXsHgu3yojJ8AGR4JjsgrsVj\nnINLXWzPbHEdN7ODq+ylt/6nkbxHVBfMq4K/xmA7tpr4dmLWZNR5vO7O0BqZrtIr\n+kCI25SXuo/iJcXkYZA0VTLO1l4Js2Xv8ZWNgA1TleSAx12gwCLhlqtmm/a2OjSu\ngHj5XOrbegB6ublS48Kbhu5pfiszND+FeMfBuOs+o+a4j9Iv5FiMLzUHR3Qz08bn\niMiOUikQEI69SXdQ/Ra/6tW75vMCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFAj5UjjY3EkNPlwh\n2dOijru0ICVqMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAZYNWmvDteLg1SZeUXpwcUaokFiUpK8Y26S07aTGgD7zW\nAThcf/eH/p7ZcpJ8JkLhgW4m6IZaz8GKJfNvNxSN0O0/UNJpSGAuznEJ4iOTsQUQ\nkEaucxlZnORc/cTSdsO/Lal1mfij0GXn9JAuJgm0ZVRaGZtUhWanHWUppdOn/VFF\nNO5b6buTxAk7zajL64UdEuihkQXLowNl9JFM8La6TOPq79knlwIJoTvFr0FmjDer\nTPBFF0h7Bn6/bQxxptMI9BtW3ft8dSE+iqsGYRFjeHpuPfrzJpMMHFKjJmHry/DS\n5y4HRGMlFG9VtEH/jxAnWu/ierFmF1sLAQcLuvml0wpJAfoHFTjZaDDAil9MMgEN\nCc07+Yi+9yI1tyX7G7v0dyZWgBS1BCK+lNBt6nw4xFZGt3NLeQ79eDc7FeSDKTl2\ngYIvi75Ucs2mrqxmcV9A2AnQwfx6qIK7pRcrFhR8vkC2/S3lDHwGKAUkVArEbds4\nPeJx5D9H171rXVqZVGk7GdVsCkCoYJVouC/FtbK9qmtlTVxcO78VoJA2IGgbn23F\nacprfxjXBSvCTKIy208GEHE4NlZTNXq0N+l17yifpNlFzEBqGAIr/Z1707gjSF1R\nSG+YYwCJdHTwH7e16sWpkqAFz5DKPW21ErSGicLzHEXxpIO0PPjrjJOUaUzHXB4=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 69146ac3cfb3665c7ae78101cca5c14255ca2bc8 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAdxPDlWhHLFDgAAAAAAB3DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxNloXDTI1MDIwNjIxMzAxNlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC02OTE0NkFDM0NGQjM2NjVDN0FFNzgxMDFDQ0E1QzE0MjU1Q0Ey\nQkM4MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApILp5bP1Ss9+0sTn\ntF8w7dzQX7yLQEnaTLr6GROohyjh/G9odNqZaZl5N3LzlnayDY7YqPmkPECue29l\nJ7GIe4nF9MteDLDNRM1pnOZ0jEIcwCuUe9H49wjbbWW1/NM+BGJRYiiWOZIWp4mH\ntfrscGTQl+5lFphJh/wqA/6LyYt0QgwGXWToVDIjm8RvHLUoC03FhpAWEI0wh4gf\nH5nTJL7rIRZjc0N1vuaNy6CGK8ysFyXU+3SFdZMVE8DmnNjM8eNaKuo709haXe/B\nh9ChTJtPM13b6lF+pYXciJvw0hPB9nlrZWLBvbSe7PqhHOYrDwLo/U3HNGzMztG9\nL3PXtwWRqF6QsyRXQz9sJYLO+uOheC/+W4VHViKJTUtPmBOMgflXJgk/N6VK56cO\nMqQVZVzsxeh9FBJ3TCqrOFa64uC73aj09/PgzsLKPrZ0b/zrYjHjWxTwKfNVfJFB\n+hmJ/OcPDmRCrPXBOWyKpNqnABQogeC9MVsqM0HXFyECb/Os0uZPbcN9hj/uDoeR\nN3uFIMr3ygm8GvLvocUagahhjvK8/BPBySZZKm+D9QrB8Bv16XSf6rhAz+h9+1B2\niPKAJM1kHDIuwSgfM915bxLXuuHfyEOXbGiTDhGJNXddCfQ75iBj7OsqB2qowlrs\nyBhJJ0gymMfzNUKQnpE/w028ObECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCuCYfx3hwnfcaML\nqSXKVCkRExahMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAh1Mz8dU/dOWb//4i/+Zw8bVT5IcaCW0l4SZGQkLNgY/B\nOvVxRnmcXjlxH9M9iC/FnJ9cT/KV4vmYCzt+S9ki7gcrVJVVNDQzMDwoWXQZEW/h\nsYpW5yDB6YKHEhCeoCv3RCvPfAKEf4uqA6obBY4WFxQ9nnHEe/iudRypUJqb6w3T\na8kSgl+2qq8G8VDgZmJMZ9YX9VOL/OsQlHfN9ZVC+vfHHYjvAHcFlyzFJ1elvU7L\nTf5XjgJyoROMJo/twZONWR8AON9uCdqfOlUbAyVhnmeNNUg9DqP1+eSicjjNZ9fK\nUVaTnvaSDRQW98w1cxokAMADbAAePt81R2Yq9Dc1oWbTxulVdqc4XYSwgPPGzoBI\ndvj6cV1Ho6/6Ce/epb3eeiJA+vBYJ5lXLwggqg+8UH7ZJ5Qn+2UZ4MSx//6xMfiL\n1eqK+tEgUb9mvL/qHyer6R/t2AJVREY28qd+wbGX4Q7ve7Ccfs+PG0gZ3wDIar6N\nRm324/wVEpNM2UYE6HwZOtZJsz/yU2ZaGQw0mBAIyF9M2pHDAG2Bf5V7Zac9WOIM\nEHGlRP3XuHIhyIeePt+rR+s+vfQ7IpDAof+NUC23aKGDH539zUn/5RxDF8L1Ucpc\nKGjTJueWqHqZINc61cgQrAZAaxlhvtSpAaAoZGNAtJ/xiaFDAzmvSNpJEQgVSNs=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 7cb4b78e688614be4421c5858f15b96d5eab51ee\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAarmUbMT0T133AAAAAABqjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkyOFoXDTI0MTIyMDIxNDkyOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC03Q0I0Qjc4RTY4ODYxNEJFNDQyMUM1ODU4RjE1Qjk2RDVFQUI1\nMUVFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAonRYVxz+UyHHVq6Y\nmluUFoPtDLooWJJnDZhdoDQkwcSkLuG7Zw+Kopjwh9e4+CL8O6gcY6rfT11+qTlq\n8D0d7jTuPOF/YxqzKJm7Q2ZLx/nDcJhVvMDlGfpeWzo4u3aXTw9DRKWG0T++U1wq\nluIXnY7LGKSI+Q1o0dN5uwfz7CTSU5gDokGy9N9YR98B06hoMIMjPu2Wc9WbFeSg\nDMA9UWDUCEYHio9JZXVKsu1c5PTvgycAKBVm318WoVYengQkOXvALyNU083cqc/Z\nQfZcMbjtI4wEoPV4CkmYohJyqUZPEmVnb2rCXGRYyfZyke5mQGT+hknitQWPtyUT\nSYHVtfsFjJjBQEuVeIfvReztZGvV/YbywNHRqSEbvAqTNbEpS6AElHynuiDLPCT+\ne7BF3dOQ/zmjhCla+aOcI8dQuP+bfJU5k/IMSRFVY8pjO5Fxc4MP4l2L4k/SYATx\nGRljTNUbd8o3/AOUK4Xokhqp+LPNqjtcna6N5i4BQ0/RrL0CGjOr5NEaUmZXY788\n+lbZzLHPaGzk5H9rM4F2YLdnwSeBUn2IkHmS/DLpZ4sjelv/paYIYE2H7CGP59Hi\n37SpjjRsQwnnGkt5vSu9SI6UJmENgzuIrNB62EPavDN6zZbie/yKhBG9Kf55Vjfa\n0GoR7HS2Fsyq4Z5CSVPl+EY7wt0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFGAdAsQlLBCzJ4Zc\nDfzTKYL2E6DmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAFtAo+A5mabAiKrLpXDyum8VphuqbnA54TCl6m/qi9+zu\naxfkV96tHxSha2RXPOilBi/VQdDhc3sJd1ohTe7Oqsq50uRbOvgjfImWBhaIu/Ko\nMyddSLck7RaUKF5U7CMpGGbTgiM0tmUV16+sxb6QVuvsa5jb7f35NMSXS1EbEP9H\np1TC02qvQMSQcWZokx8YKfGO54tMu/00lCj8sc6+80MEVcmmAk01cHuwOuhjNL9X\npjUBgBiPVUJOW4BQ2hC8++wZtXtxYjYk2fWnWh5/4VXhtcH7HolKV+JXV3vFFPCl\nwLD2s3eRBmqCDzpCjCYmjIV6xUtcBOvhvwsAvotaotiI99PS9WhwfjVYSRf+biJi\nYyzwbv21E0FEGwCREkXC0kghNE9yBFRavOv4Xw4cchsrqo+bKLxEsOmk6CLLfAUZ\n9jdgv5xmEi2ylmty8v5wGT54lGdtcM+gCzww83dEGLRHSW/G5pD3B7fVTtRC21QV\n8lOpivlLvySrajMMkbDigU7BDotHDhHcGUeoQmxI7xchbqKqzdHwjX6uVf0EBPif\nlVtZihTE5HgTWzcBn1kQYgp7XulkFu4NZw5GsbGI9GlbVmEZudFMTJPGaM8VoJms\nAPm8PT6e1VQ6R5tLmrzc5D9t5vkv19xSNCHqX0Msk9C2eOqIeYYBdbSHvS7R600=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 8343bac2129d78299c4b513cc3de61037bfcc955\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAa2yHy7hFYJYcAAAAAABrTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkzMFoXDTI0MTIyMDIxNDkzMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC04MzQzQkFDMjEyOUQ3ODI5OUM0QjUxM0NDM0RFNjEwMzdCRkND\nOTU1MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA14CVTP8cV3+bj9bV\nyPo0P3zkTRMdPgwRkr8rCOwYzj/0AAAPOi5KEV+xF8NnBSj0XXrE4S+iS/TcqEg4\nTgfhxyJC4Tu/vsiVPtErRH45X5g7WW7mMG+/yrkoUto7tUhVXRDuae35wV+E810m\nc+46fROKFIgncZGYG1ZCU4SSiazVhMDzdkVWtuSWc3MJag98rTwx5fvZ3JNuHik4\n5RudBiABDrjR8nvrmTQg+EWlhJ8R5jjdQ6zJzP+YfYJse0oPHKBPDLkQLkhqXoz+\nl+t3LpScBuD7VuU1ZojEsNg8Y2rypkUWEN1e27FPV3rq9DMmjm1GK9YIhUGqdOf8\nomnxxitA0k5dSLGStafmJBml82FHXeDm6u/RT1UZPxr15Qa1dsgTGdg2RMVo7goq\nt/VS9rtcOHoCkh62e2lVOL7ZU/RFmVGta+udRrvGoYsXsUviWvoy71AZyawjn5WA\naGS+8/dGVsloKf9zWnfmi07veoNgtPSCsbcpTHlBRqfbu8ZBkFL0zu6RWnzu3JNX\nng1bR2d3S/9vBf8QlYE2jOIZmJ7slV8kSiF8YhCytWWVcjhbkYAGLMCXP57cHspV\nEcZ9WfDdT/B6bxgj5lK8GJKWgOzXUVXB3vDxzCiVR3UE0p1ZHIp6iDKvii8VLvtz\nnponXmbQOjBothW0IScYWwN422cCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHoanpKR+BrmjQIr\nDGirLc5RcQaKMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAVFAVt9e7APcg4u1gdTv4P1eXsFaqypM5GSI6GgdgKnjQ\n4r48747UGovvo0BUg3deAMAK6Djy7zL8S8XUkW9fz9FypCm4yp6Amy10oRVZL0IU\nyLMY8Poyr2n6Q7W6eGaAj1tS+RIBLoHjg2WGQePuWcyMRCb20cTNdxgxWgTYopVd\nbGiaoUGJDReBbOFSDy79h07K8ZpBDo9ZXZF8pCJslWQhuXXvSlczxSyRRx/duUBI\n08LLxqoSaU/YVBZQ+EbY1lheNc8F2LQYdLI2SrlqAcbjtiE34cg7+bqX58/Q6FsS\nH9ro4Qlllc3DQBpMqSiy342IF2lbKscQQlEuYuC9j9N6dX4EsnCg/AmxDch79EYI\nQ4LdLtyyNBJM02bVwMX9CdRlkXnOmcdEiEdlUnxmXIIKqP3Esm1aZGfAxeP+hO47\nA5/0aNtSls/LqIqaSw6HhHLdUJINGtXRMS94EAC9MQOvGe0fzg/J+5YpwUP4H6Nk\nN1TTSvYlhaAXbmAeSIt8INxvDefNfUJAd5zjrHeiQy5Do230xprzvqsw9j/4KsOc\n5WMMrURfqSWoIn+4XclX9d2NBn3qbK0Vyr7kKA5HboJfFQ1gSKNzDzs/FTAX0hgB\niEq+DsG/3YDe4XZm0TlYgVsNG7npPLIiUVyUeJ7G5Bu9A+D1Q/cACdWtC6eVDTs=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAYgbUmU85y4p0AAAAAABiDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDkyMDIwMTAwMFoXDTI0MDkyMDIwMTAwMFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE\nNzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAw0/NkfzOlDuX/mbB\njqrQObX+GPf1uETSqhdyHinLKCn9BwNse2xTwck0IUg05lKv2DQ/XV7V6oQLr++e\nVXt6pzkTNeDPmu4l++LIWkBWaYLWe+DczafCCF+8ebN74HhWbP/fEMDH92Z2yQkq\nzy/98mKdpGwVrRmOt9NAj8bAipvLwfi4fuWJlyxVxtI6F0uOooZcNxIW64aKFJdZ\nEWc3BfvTpUU25/X/bBA3nAvxIZLWNx2zN8Yl66tFKyvZdnL3go3zSJfMbk1VG7zC\nj/7xVqb+Nf1dd2jQVoP/PTMILGHNKS2sORAzpIPM6hrJh9bDNDU4+kB0KYF9EvQ2\naVYoPkfRCApaLLnQCiUFUHWSxwI/fN/WHYR8InW9NWatUqFPYFWk+ug714pGz/G1\n4WTQSsOCBZobwldQysBuT19zp5zJFLMyF6SeO5PWY8HjFBgoFTR6NqEIC9wVYW5t\nO/08o9JHJmTUghyfDtWWjp8Dy/8v6un0CFqK3kDxd8OiC6WTtzeIxzjlF7NVoP0+\nuHhitkgAvfmOrhXJuWIoQT4EA+INWpeuL6EuRra2K+8UNVBxjYsB54+qSbUrADn7\nKal9MKGtxF5k/rmQtL+zwZCK/NLumBk9iG0qFYlTheYJEdE6BQbtpyuga/hqR6Xp\ngD+h2NBeyMxCsURN5f4ImcAUSZkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFCgkxje7vFJRCj0f\nC4DNxw8l+dFmMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAdOnRSzkDdI7JkuRYkkmOsFvgz+1/R1BQO6Xk8m5jDHNt\nyof/bOlM72X8Ru7XBWqA9HdeY1BNLio6+ncU6avCH8auajl6/mxwq6reC3lUkfmw\nkZh5PCI6g7pEsD7NPfK1eNMh1oZaMAs4k5lSJQpcH0m/qiVdK7eY+Zel1oGP9jcm\nLxgMtcCiGTX/pH1TNzgtrjrgnpk+t1RhJVszdYXja/gozJeHfe8HdXOCZKaLTeP+\n611g9/3y1LbSyEdd/mCoD1e1vEDXc0Qpl++BCGTBRKSVfJODQHUQo9a1IQmeEPJt\ntk13gw3LvZhagiAsaG5Pbuoy1lhV/0sKQpz5uyAsZFoYp+S8xNAz01XBtdYChozd\nItMxzLRPjJRDJHmQcJqVtLwO2fZu9aI36WMg0dMhFsEq6sqPSj2eCwfvLYC3MMiP\nWGb/vLwJFvG0iyeBKz5kUGmuhUpu1QavLwpPQrfiUKq7IUW+qjIpqp/UpMpNOccF\ngVhRRO12oY0/oEmXjb4luNSqXD7uqxdybqJD+165Z5V3mgkufutF0FDcC+gjjMyD\n4pg+Tm/APOJSEEdhKPbdJa4NmkDmTDkaNY4JffjoR0UsSE1DMzEEXAD99Y/jiG2G\n2vjETbgQ/sBaZgbxxor+qrxX98iP4BEck+Xyndej5wMywXEJCcpcSE9q9UVJhu0=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid 9c7df5a91c3d49bbe7378d4aba12ff8e78a2d75c 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAApMQX2BVlgZCegAAAAACkzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzAyOFoXDTI1MDMyMTIwMzAyOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC05QzdERjVBOTFDM0Q0OUJCRTczNzhENEFCQTEyRkY4RTc4QTJE\nNzVDMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmpgzwkKgmeInDv4v\nUQ/tW7/uPmMrxT5Ao3Zu/ftXFMWR86R78TE05H4Pd/7HWBR50FWkRvUrf7H8OcAK\nfcNRq4B/xZjCjJpyGt4O10bQ7KC/HrhQbJHoHVB6aZWZWx9jfLm/m/pExoat7E2M\njL7f9HaMn5dRJEcs/Y5VciEqGuQw1E04Su9lIBcrpoHTWq9cTVaJ0XpEwlCBHscX\nBRDqPY4eAYPZWwaGZrCSNTZnngm59Mrylpq2tn5DlQJWGvFqlcFa0zIGyVsCPdYo\nOYGibPV6tKYHO1bPEDpfjUcn4fS9OFbQsJrmtgmEka2BbdAigd3rYOsr8JhWCAO3\nKIzoNrnLSC+yeEpp91PWFg6lyPrmXC0L+sqMLxB++3uNT5MOx39HBS+kEfw2UirO\nFAriT5TKg4waHObh/7iMRlqR7zCL7awPyaoMEby7j5xhRLTD6MGPD8THkkZJAkYh\nW4xdJqzYsb+aicklslIXieV15XznbEiRf5mMeON/pDBDYUIHUIsXvK/PInI0AgXe\nRtEPwwaxpS7RJxDJrhepyBDq875k7cpKjUG0WnniqP6ayYhogyIi7Id6RTIS4ktn\nXNPhVQ4dhdZ7mvsQiiT8FBepAXib5ywtqmQrVwdvYwWZ17BuXiS0CW8A4Zw3UCkL\n8egwbQqHqeytt/249No4gTwLhXECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMVZCka4z42Sls4Q\nb0SaeYGwKbsPMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAQYdgCAWxg0CT6lTpPcaZ9o6FAv2a0nyRz8xQUBM4Bfqj\nOVD5gV4BGo33OR0OrDRzE3IXtrMwvMteELHz4Nnq9vOJ+4Fxs7o2Bpse3WfarWH/\nhpOJ96qw5LBM+rRZUxg0lSUKwQ1JNNvKj6Lp5xUMCGQW9GzPQnhprJnXZ3ikz3zp\nfMjQj7dIQrZvE66tat/rlLJ8z+mdzHUNTdmEoqrsymzAxQnPV+0dUUSyqbC6XM/q\n1x1XYUy/r+o80kNk6/ogC740w9Irz35CiyCbMO5X0h+YAlneMBg+3kN1/H9dz54i\nPQDpdRtAf2uoBKzk7qYW2H8VbdIeWpCqSns1Z/TODoIl/DKRfn2yiKIWtDX1vxJw\nIzq/qeWfuG+9F0dbZ7rcbWt5vqsQ1dAXbsQ7/gJEGFRml4lfZH+MI9+HyNfsKAmj\nz3DPtceKqR8cqbFEaFhIZvKnRnNESUqLlo1G5c0gYodc/TfuoX1FuwmiIfZNTDoh\nmat+g6TwAKVE5vmzsMwLJbxHP6HM4kqd3+I0C9jrkh0FnjQvqikeJA5RH/gnKpH7\njTwD6nE1+Oy/9tzYuPTiWporDYxxQbnad2FSV45vccOkIQuffSWAz43WawtqCyCL\nRhO323d9TjIDbOp1ZIHuVX/iRGyC4/RBKO+CeSJ6FPnfPxHq3wFo4ujDbi39/Xw=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid a26ceeac95fa33673219d0c2a77637102fb53ff2\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAa7FWkGss8GVSQAAAAABrjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkzMVoXDTI0MTIyMDIxNDkzMVowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1BMjZDRUVBQzk1RkEzMzY3MzIxOUQwQzJBNzc2MzcxMDJGQjUz\nRkYyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjjlp/WYBqspIvuv9\n5rl7MHnDl3hrq4YKHuKYNOiGWS40yyT7HrXsVhBBrArPO6KNjWdRNtuikUk52F3k\nVpmF+TLIQ9IuseEIHeY+clcb2q4Wn73TaplVTrHEjo+c9Wk4wEgbw8v+IYbU5d9n\npRYTMM9j9pupbOwBBWTIJHL3Qx1rMgHS/3d32pUBFGq7dKp0YZKKysUDLfvLMkIh\nf/o8STbF3xGL/GsOlaviYwRXk72uBXYMZiE105dDGz5ciSpjI2bYneJ4XxNwZnH5\na7HMe4FS0YMzBMqQLXqj8z7bNLIX7YO7ToAu3x8wqNzVZuV8ND+nWqSWOZtgznzV\njFhFivbDcIBywRVV0PupS/iNRXcsaEWsHSrKiYxCN3YApDMqicf1Saw4bwlqfbOw\nCTo6JTrhEiyK9T5OYq4Qwy1lnjZcfUWtP7MsgVOGHKmXBPnq6lL2s3YKeu03GyXB\nRPxggW7QeHvY0XkUHIr8gCqQ5LykhVN+8T88hVlw38+m8+0UNyQsK86Kc3Tro48C\nvKqrxS7ZQS5KwcX+yMg3HH6DwSLAzoHx6d/tsY4B6RQ039DtTBpfwzSygOoTbD1w\n8QsTNI6M7kN9WveUg1cydWEkA0YQ02T7+y23rDRpwVGUJa+EEcT/zPDoSROjFZxJ\nBuSugPtJtDiZmKS6v1kNraqFeUECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFN8paFTF2IK05NAG\nDdVpQvwmEvSvMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAVPaxxPs8UdSEHgznGp2Ic9GjMoGP6SDx5YEvlQ2TyaqQ\nruwMbpdQbSEe1bLDTQW+dzaCJedOBtVs3TPKzuCxgCffUR34NN7hCA6zaQvnsTFb\n/fbxZiaSGvDWVEtNd/VcgiDJi/Bt+PiMTv4CPq2z2L0xubzGcJ3MMF0qacwxc3H5\na1SGTCCfFUSo3TnINRTXLN/s1kR6SCSyLYEuOAc3iAgggxDNfAgfFa6eJoXeKxnI\nv7C0zAZZzfK/ptQ/Y5kPZre61f2yvwzyvVw8YS5KT42/mAWsfE63Xsexvru/jjJ5\nVUWLkqvve0g6k5ur5XGmEnA3jyKterX/TIBnNBCB/WltesYPavH6kAIX2/FtT4VB\n2+8fanwsszX2MMeMWmPgVVmeNZf8fl66D6KnASYvwPQhIS0vLMjG6KSZcnlTObvB\ndoWqNp84Ui5S0P0EZIq/DsEJpg2qLBSkJAECGM7jmZz1v/p9FxwWO+L+Dk0NpSp4\ntQ5q8M8Ppuv0adhGtr3W1Q7Kk2pSzq3BdFvgpyxTL7zK099QLbimMHX4QCRexuRI\nUhS6QAtjhCwp6o1PNQTD9722MhYE+rue+3xjC0GEyRUwFeaF94mVSQrwSnOWTcWg\nXafiWGleJJC0sbTjJzwUzryB0MHioCk6lzkBa0CasFJdqdaKIHXg116tKmegUQE=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid c2ef641c329cb0a9f2eae04bfb10c99b89c34614 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAd2qWsxsYTgE6AAAAAAB3TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxN1oXDTI1MDIwNjIxMzAxN1owQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DMkVGNjQxQzMyOUNCMEE5RjJFQUUwNEJGQjEwQzk5Qjg5QzM0\nNjE0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvX85Y8UW69H7Nuqk\nld3DATJqrWvyNzDXHDPSr1cOCBUFBWFYWcBI2IADOVrL3/OOW7X9FD5TDys2Sm34\nSPBRWSDN0TxmBpX8PyaJyuRvYpcfovs65TFF82DGxEbH2Z4eYIJnBEYHJAD6K5i7\nA7uTkfJuSWP2j9/NjJvKePMr/G/QJXi8mtExaTzxIk7K4ikvz/ewNg1T58lPYVTS\nWpLP3WyG5gnN6lj0NJahL1IwUQq20+GqJuUXbwUAS+567WS1iYAbzko16qPPw99l\no1wwIA3+dmatlTtJhuV9+N83Fi5VoqciBnY24dfRw6pZWTvp2s9eGji7eFnmrxGP\nmX32MAu5PU6IVb3NIYhO6H9NTPyu2DPCdojk46oCIJ3EkBKFRqb5FZXNMrbpsov/\nvow7PpQdvXhHjw32LUWdIEZNdXfXtieiviSHQavNOUxY/Nw8ER4t5M2hSSxcMAun\nCkrYGMkq4NTbikIaCwwA3K7eE/qbpQizNFZmLgBKhoOt8dr9f2Cu0D9AFdWMbiTD\nBGpA0Mt3pMKV0//xdj+Yh4iNgsZSw5gVAXKlbHrjLp61Yxm7DaciRJnmuEgDSNMx\nAUBJPFUyTAh5FPrpJ1BT+jS0sYODho0PzWDvmyadAI6lJPpcEWy16gwZByc9lcli\nupky4OhFG+LA2WvjzmyOMXY8oqcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFT4gSKrbP4T70Rx\n3KJJqEEWW7bOMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAjwggZZ0txbQncz55DK00MGvU+VpQvkKVz49zIy0F2h6U\n0D7ACHkKVM/7e8b2tuWb5fnD5tH5/Nv3ECR1e2FLV0MWlZAD2Kek82xkcacL27mt\n1OtW6wUrx/SO5Bg0ZrjJxjHfBmyrhpY1W7skKlqG9oRgZPa9e9+1ewFCOZpLKESE\nwKn8ccN40wdPSygNn09Uk4O+UDz9QoNm7vu8zBWWYQbv/c+Aqb9nBKuqk7tyhjsj\nt9I3pL61kCj0BUssQslHCjlvg1KWp0gtJ+ZUrGG996gnUZ3oVXb8+SMbQ/4hk1a9\nE2j02tJoNmX6ydGbHV3qyi8j3kaPXlqr1WISk80xiZItHsxT4U1dNUV72kEVGD0q\njSMJ030ufNwoLsMr+Ts4MU+scpm0EWyv2y9zOrEgAScKOc5lB/WrhNHM3wlNwAVF\nVvicLch1tZfClkgZRL4tzddelOXdFhzpIB2M62u4f73XOhUS4YCIozRF1ryqcf7Y\nVaSjJ//QMQ3TPiPd3ABFv/CcRfKtEj3ODGs++rPK15wOPKjqFvtd2FCAEAZBHKIt\no9yysYZJV8V+yMiEd1dPn29zgseJxllhHCDItqT5Zyd3DiKN4CfIY8O/FnyT+Zmu\nHJ89bquErnE9uttpHa7/vFzhMQ1/y/Fmg8Q5ESh+1pobBW86odDa+TF4PlacCO0=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid ce77153b6e110ca4ae2971a09851ef499326202a\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAa+miGTNZLNKAgAAAAABrzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIyMDIxNDkzMloXDTI0MTIyMDIxNDkzMlowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1DRTc3MTUzQjZFMTEwQ0E0QUUyOTcxQTA5ODUxRUY0OTkzMjYy\nMDJBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2wElgLck0QMIgkNK\nPSjXEl/lIxzyagTgNXo9xlVJLOTUb/o6/kYH/Titq7786Ae2hhXL2Ct/0kf+uvSQ\nRXNX7vvw5hvRtqjfz36Z4f8k1hE5RgsihkovYx4U2jkPB0GxKnCaGQ2d5xKJplAR\nJmyLvVA6MkhI2zpRIKONDm5nGZXlqfiRADymWnDC8I2hPJFmmRYvFQzvdXKObsuN\npv7uuV2GLamMJ/nCqZJFO2fe2KMAluvXbr3ICZ14LAnW2zWDXlCg0Gs6rM3aOVGe\nAa0O/zB+1uEv9BrEy2iSL8qEBEe1P84hiot3/TjFs5A+7L4gNCDqv0nqlzXPCKKk\noj9DRJtR+1T/n95ttqFw6hG5aDaU2QsYhlNjCNre+oBTSMKIMqnUgnkzGyIHBDe9\nBXZmMZ+xkIf7N757FLNTpUWdRFVNP4iMj1d4CPJAcmlx3+ZwDxvG0CHIgM+NUx5+\nJgFBHNXvXdAa56NoVQcb7EElZW91V4RAWgywgNzijzL1G92zi1Acejg+Ks2Du6UD\n6o70jGmz7Ijl8rqForo2LqUgL1MldNn+1toHu78YEYnYoybalPXNESAE/Z+5TrCm\n7FTQv7UYrBeYBcGcef6C6y9g3vBpm58y7IlEYqUFzNws/pYG4KuCdKlBN281kghQ\ncrDsgP0Mle5b3emEBXjkG2I4tfcCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHLBdk/BX56JU3sG\nefGUgzf7CVJhMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAif6Ygv+MwbGLUlh/3CxWlf/si4WTKm/+l2BHYXAdN9w6\nwT4UUrPr/dmtxJSgpgJLNVuHNtRSy7EYv8wbzMYNzRkc7zx55rO/9n8/2ynYqnPd\nemjfF5e7TWyPJzKFODdrbY5CuMWPxUcfQbLrfggZkjdnmvImeQEP3FXbweeS3tlz\n06Pa7DVj7TT9X4I5OMYAa4EZ1avn/GtUG1F6MYbNbvvqCQ3vDVtfYjgvV38PWZ7q\nwS+kHe5psL0Cxu5DOqNcAoXhI8LKb8eiQxZDfttAYXbAWiDNKTN8Vmut4rbAPQho\nD8iHsJXrInW93IxDyaLM+cSszHG/v/C1ZSUBJB+5OVYz9bhWQKx+O8UIL+Z0RQq0\nhyflrX+pKtT7FrfnldsSEkUAuhiagwQ2Dt6uUKAiT20wnT5YS8hSS9N/CvhJSrca\ngbbbhiYiIG2ZvpiF2+JaxAzioWXnFyU2bYhyZeFZ/Graw8pZi7TxtMzWvUfL+vFe\nggGdzIiHrLyu2BoOpwIniXUBQq8wO20tDqE4VRfg6fcdNecOw4W+K9JOvp1Awz37\nec/EiFqiwBkk2Gw+1reFTDPH01S1XNeVanOztTh2T5yP1vO/zEhwbDAf78jyLlst\nm+Mc3CIsIkHSmZ/aeBoH3JahKjh4EbpC67s+SpC4WqQ3mE5YRjHIhx14v8E7fUU=\n-----END CERTIFICATE-----\n\n\nWUS ifx keyid d8a3f556085a68c8aa5d5fe079bcc6e9c6d37764 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAd9aEQaxas2igQAAAAAB3zANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDIwNjIxMzAxOFoXDTI1MDIwNjIxMzAxOFowQTE/MD0GA1UEAxM2V1VT\nLUlGWC1LRVlJRC1EOEEzRjU1NjA4NUE2OEM4QUE1RDVGRTA3OUJDQzZFOUM2RDM3\nNzY0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtaBGAu9dz6DHALyY\nT7TK27NSl1sexfL1c26uN7V5KWZrOVLdOEWRm2FC2Noh1r7edR/dAXa88Vtfrduz\n1niMk9ep8JwLyKlF6MYvwXL3gCZ4+b2GK1aF109Ds81G0u/3yE/xDa55fuaCjCdv\nx7On2/dMgeA7aBuaFf3lsHVOOthtDR1Yl/t6Z0VnBM4f708+nqUZ+3ptoaM0KRy6\nF0LC+9p9vVD7fqpHkNtd5YKdzOZKfC2xPwq9/AvZhCHIsmrIyo7LYwkrve5VJM17\n8NDPuda4UfqLI0kexElFh0EFC6yojkuxW92sflZG6QuE62YgZNSCgz2OaGWEaOix\ncXOx4Vxbm/vsR03tjM4kV0MTuG70MUu7DQ1lKCcUNddDGCqsGVWfAcvrflNeHMtE\ngNN2kreDXz4k6xz0f+fBZthCJdq6m7zxKfgSnfQa1v/pWxHiX287PN6jiVVoQWbx\nF9YZn9YipiGm0FSd2qLZLuj3I8aIAx6AaZ/UVFI4Y7WxJ5D5jYSnvj7feekHY1f1\n0aveaLytt2/2coN+WzuIHiGdHspLNH2ocPMZVnlf6XsOsr+kFOC/3Rrz5h1n+16z\n6u1EXOd/MmN22QYZZzWScW+z6KtMfpzMuikenRBab8kXTwW3NEJm/2lwLOQPpXjY\ns3alId+fAZpmZNT0Cj5gv3Ap5ecCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOYDYX/V0PxCL3jq\nhAuFm5qqR4KTMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEACGw/HF+6Tja0hNhxeLNWbVQPb7CN2qXJehHrstqEM5iN\nbk9wdso/2QxGWA4ELW3DGoHkB53qlUWJTDR5W04UzVrLYjqVUcTLEojg+Z31OSeQ\nfKeEo7zUTF8h9aEs7awSE5pMJiyewv33w8Yh2Qf1FoC0r6gWRTvKgHDkVV7nNDgu\nGvLLSDFYZuE3CLTQMVwyGauGXMVsmqnqVV6yRocIaRU0Tw3tVgnQvnNPs+a4ICT3\nhoJmm+50/ZHCD3uQnQ7JBDMF2qX+sEaCmaCaSwAE9wRm1ojPFsqi/WBZUu/nq4pU\nkJuOHUS9AwYbYwkoe+UUBWhtr3jWJ9Bz1CDI5YdIsO9uKs+Qso9luqyo78c2Lp1R\nRTo5uEuqBHQJ5TrmScHfbejOzboS4dmB5pW56S2/t/X423ts01rfXJ1he6ZY6ypc\nOIrXMpo9cGGNKz1Kccc8tLUWQj88zAYI9cae1BRBlUZ7l8v/IC4kWB/HuD7ctv/E\ndeOg3O9yz8wjrhfU9STuSuPvjRj854ji8Yz++mJ+VueRzwUKBQRR3ujJ4yyYcvn5\nnqTEYFB66nUyirDNp9weKdZkut383VL4vYrg79L5qPu39CnRmAlUsckZZhamOASK\n9eGsbnZbRG3kHxbN99uYORWxBumuh2O/wCda5xvBqYHLxyPDjNeCdf62K8w7RJg=\n-----END CERTIFICATE-----\n\n\nWUS intc keyid 17a00575d05e58e3881210bb98b1045bb4c30639\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAZektHucHY3E8wAAAAABlzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MTIwNzIxMTcxOFoXDTI0MTIwNzIxMTcxOFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtMTdBMDA1NzVEMDVFNThFMzg4MTIxMEJCOThCMTA0NUJCNEMz\nMDYzOTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAO442urRzVXMRCMm\nCHHX/YegHjNbj0AH6P81JC8MKqqWPF8nK7vEeThBoR5ukVc0FHRoq+aYn+JbKs92\nHl7RH0I7TGFkH5NaGk5IG0X2Y5q0r0kyjFb/OhOZUH2QRh4kWV0R7uKAnbAn5T7R\nNDJENdHxa8RLtgMaIg7XgD7WxIogeTzHjEOySeIFDO/UOBFrJR9CQEyVZybNi/X2\nRrz3YKkE6qgzdy1cloFwByajsoe/2hoTSvUzKAJszI8STBS/cyiWeV+Q9Z8yl0ib\nRKblM1ovdsKQW6YQHxyMnii4+j2IZ9JuBrTKkX3BNcQ4pvy4xfNVhdfPBZAhsQtz\n5AGlk1JFUGfhzalxzyxWsiL9tGelxhwpjcP3dIGQOYC8Me5erlmAnfL0Ey6+7WrE\n3JmVW5uvF9GDGmGE8RMU9PIQqd/uYPnwinrJgkbsqsobL32ORigdD3NOAK2JleoN\nyzeN/3rL7ubo/bDRDfkDK7bdP59exNsl5OMTSbIMIYKs18wkPAY1w7rrfIOqllRi\n3fojR7OuAp8V7qwoYXSQPfEdTTk1FhsLOIm6Mrxs+IeVBiQuo8zrxb/aUMyp6pVM\n7n3frm++dC9dqAi+H7AkvXLIOwafTCsFrCyuqkmFqmkRTSzlYw3u6jbPldnUNhdS\nm/MeIhCFSsNXq1Zwv/oiOQvRVWtrAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTggfneSleE1/ua\nsl7VdCG6+n5MhjAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAGv8d/JdPw99lm616KyIbYr7pz0ADackzoc31o2oaEOA\nrz3kfjBuGCjQ5k9wyFdz3T2NsVGqzCkdGgOynMp69jBTmB94uoiwg/XiIh3//VFW\nILCScy3NoK57V4jqHAGn1h8z6QXX0rSC+cBQ6iwvwYW2Ve3v90xTJAOws41MqTtg\n6YZvH1f6YCL/4zVPawAgzzMn7nY6hfHp/5ZcxVg+evbV9KaZQtdSF8hUm7hP5Jyv\ncWXaMM5+qQ274h8R23xGXVKMqzbIuCVJk2YZYtdrq/kMB73Lo2efJGQdpy6WBzRw\nuKg0D1WcJRKOlq7kI0D2nDT+WQ1ALjbwn150B8pN2xeT77FCxtCcgTEYTyQy9x1s\n8vkjS6L08OsRSsPWT1lZXk7sD7lxCpFr0HB9gVM85XGGoqxCNU1PQaxLtXBZ4zOo\ngshF8zLsufXgFDrEiFv2iDQLFvb2F2m5h+fB4iyuKfrbCR99njMjbvhhuMFkI2Ub\n7axASNjsiK1akCkO1iRamo9FYOdSknGB/cAZigtC3Q+chbNl9q2TA1bxmRl72UBw\nYa37675qvXm1JDpf1oW/d9rFMkIgFVn7thoBXEvY0GyUopIqNh/KdY/Q9Uey598w\nOsr3IyauF86c66DVrh5ZBmnQ8A3Z5XRVFyMSicI/YIaesZwZIQsAFUlxipfgfQ/L\n-----END CERTIFICATE-----\n\n\nWUS intc keyid 9aaf591ee263caae10f57ba04fa8d1dd6613f9eb\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAtEyyPhjddm+rQAAAAAC0TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIyMFoXDTI1MDUyMjIwMzIyMFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtOUFBRjU5MUVFMjYzQ0FBRTEwRjU3QkEwNEZBOEQxREQ2NjEz\nRjlFQjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM2hCV5XQSRBs2gr\nAIfvZN4SoOV5rniJkU9haKyJ99pgiaq7fUa4uCO9g19K8GG+3uwrqay74Yt/4mkY\nHBlT82ys5lYXw7Kp4t4C4TCbI3twtx6NIH03oboIpdjuLQGgs0A3YpeYplysMMes\nKD50QS+4hryUoybIYv36UCWmYBXNm5zcMKzoVNgRNsmu//8EQ9+jVQSEm57drnyb\n/62yfz0cROBnN0dUwNbd9bQ8a+eorokM+P3RmXqFPT7ht3nHeQCd1b+vq8Y2LT+T\nLBcJjYcCGFkCPaiPf3fjgBRriLTMJ5F2xQ0sypBmgRmQklEqjyhC206ZGG2HL8em\ndXpB5KnlJBoShxdIsJSlhRRgmV19pv+Linnym19CRH6DqC5wnI4bYueTnfNdvkl4\n9ex6soOg0f3Y+xEyXdx6GS+Ks68yHnWR0s3K7Ti0UfybegyJWh7nAUsdQSoKN7G0\nPefs19Ouqhs0PV1x5U2VBAgJQ7dvjZRQAat3uU8mHPchGXyzcIIzZ8IQJO4vFrNt\nyKK+ubRejL1EUsXNhEKrDWvx2eGWOKVt3uKmYUiZgQdCyxR+fZ6tzfQsekHwtCpo\nmjfXTXWp8IoWv0hhtNYxJzgCUMl2+qFbHWgN3ujSqvWfj3cmTLT6H8MtjSVfQLqq\npjkpN/W6feQIxYaMkL+6lmReuJkbAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQPwjDtzRoTAZjD\nkAo1lVLSViuqqzAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFkqH8WT6pOt2nI+rU+300C/mBtV8QACEDD73ZparX3K\nHop87Xq7pM9CB9g/h7YYTq6BZQgZFmZC7ehQFgzywt+HXfP4bzeciqUby7ZyUqxL\nj2WrLdw7bE5Im2UIJ35MaNOM0sjgOADOPOwwS8m9rbQ3VvmzBB3hfOnc9o6Gs1pj\nWdC8tJD/cYZkywu3oXzSCKP6DJEXvjpQMfue1BuHVSzxpw/9/UPiZXA1ZdBZwx2J\ngrci2/V19p/fEYSMxKDsxhg91K8i+1+vJ066s5XCDL/nqYRyOjzRzVTQIkN39OhT\na4m8ywmt1orULaMGh1Xcy7VC1FVEoqKlToYT8IeTqg8lEbVS9wuJr5sIuZqHSbyM\nBEhERGqKz2OTp+UH4zbYW1clohRFVg4rOk+3S2jRucsQPJFxP07vZ3o5skJgO1Ft\n6kEO7hExKUplG77TWZy7K/801om1nOH4t/LhdIF2fULJaoLDEleL0FfKTIxOYKoz\npWaCMriZyoGM7zaLYhY6Ae2cuEj/rUUhsJTHu91Y3KslahHJIGVb+PbIcF+uCXJp\nAQwKrprjlUnVmwoUMBEzkW9PaoBzy0AW5VJykn4x6qfvaX1xvIqT8bUmAXfbCn4p\nDwZ+/AfpEFE376eRnmkJwBXg8uuyVS+OIHoHK+HBMPmBTO9VwDRS4CmpN+ITgdMg\n-----END CERTIFICATE-----\n\n\nWUS intc keyid b066d9697f5d3a07b425c10f587cceecf16ffe58\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvQEJEtM3MseegAAAAAC9DANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAxMFoXDTI2MDkxMDE5MjAxMFowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtQjA2NkQ5Njk3RjVEM0EwN0I0MjVDMTBGNTg3Q0NFRUNGMTZG\nRkU1ODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJCCnZEeRgB1XIl2\nbiEr4ffjqSRZE2UJd4IE2fVTqZwbMO4k3Xzwi6elX2EkaogqfLhDgWVfD55rU3OX\nc+rmY1dWnFsOZ69GEEQ8qYdMPVGM8uk+Ggl1fsuEUmLuFgRokPnbCpsjO0WITwE9\nVJhmhNVjV00uxPmqdKL85Y1h2z1gw5xBfsvzvGrfv6CRPVEjsKq2M3SNC9QV+axO\nYAqsAVTMo7qcECrU8TPsbyMOKlNdQEp64rc7EqrJEsKP+H5Xe4hGyTN5gJSfdv0D\nXA7JdW9PshcJJmwEYYVY46C60LGT7p43DZqmvWJKG2Cp4eyMW+5E/n195n/v1mb3\nWwjLkDXsw4dQB0NdKVtz5OxOlRnDHXryHmcTi2cTmx/NduXhy3qONWHKcUJMDkZN\nR1D3MjsiJaAdcEY2kuJZCmUvg8Pc2r3OVnrY4sQSkda5mbyx6KZ5omyTgeRT9rcw\nuhKqaPdD6aG/j+VGEsvNfdD/Zz2RjbVi2330GpXYcGARKRzAEh6uKtRgghzWmKpc\nEzigj9pjZuMewKDcKgii4ohzJ+abD25wKOVgTfLbMWOdEuoXKe6Xxv5S1h+AaWoQ\nip57RZwj1fUCkN652QniIVuh4Ga9eClTERPyci4pyuy1DPYhTm3CjoGxD7PoL8WS\nrw+EdTMAmDfd15EVW3rNjMSNkMvfAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS4QGhrdYLLmVc/\nqN3xqBtCdyCGHDAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAFnSXkiK2GNproHmi5TYmrnYXER6SIJiJhbwfpeSuW5J\nr/KNimMLZa8EUzLmb4qjlj5LqcxDGFGSfvqx4M1CKPubyT7kNEJJJvG6cLYABAbt\n/Moia/bPJkk6mgmIBFfN60pbRGHxspO7qU9vuFgV5Wqn8Kkv+JIMU0ZVWet+7oVv\ni+33hmAvDtEmaQvNTmavq8zBSqzNX/wtBCogo+fDYhgfpIUfo1X7cWHrF4oTNS6R\n7ZzCGAMinz1JMCpTwzHnHIP4Bt5S2k/n0qQFC9wZE9srO45QE/bzekiPM59ifywm\nH0704VDmdvFluelIslI9gLK8mqXQWyCcqGBZhVkmx6l/4ZSaUBd8Oeu+HojLA/UB\ntrDbas6iIoftY/JmH5VtOR59WMqOXKFFkHMLRNhuRU19ZeqOdkGwpycpB63ijwvn\nLC8MkOVzCu6TGRA/XRoLDujTF9adSt/qNNTF9VHeoXkEQP2P+L92dl7sShoIDrdR\nmslS+MKJ472UWCu65Jthk29KXYxAZ4PU8aU4LrdbgH4EC1KEa1sqCM2Z3uo3rzZQ\n/SehebXuzP1sX4NmL01K7HMNIK101AkwsPcFinuRy28RpoDa1lstCuC4NdtkM9O1\nlO5Ai5P/xC1qEF23u40PUNhJEDDrOfYUGpObtENqIX5HWvJWfLRFnOJfgZ2hRQ4t\n-----END CERTIFICATE-----\n\n\nWUS intc keyid e7083f22152a7492ec59b0c4243437648b15dbb7\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAtJlMfxfe3kISgAAAAAC0jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDUyMjIwMzIyMVoXDTI1MDUyMjIwMzIyMVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRTcwODNGMjIxNTJBNzQ5MkVDNTlCMEM0MjQzNDM3NjQ4QjE1\nREJCNzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANsHFapiqDMZD3nY\n6Jevf1zAWMI+hV4w0CmSZEb+S73hBTplWkg6uv75G7P/x4AFle8/uOlLPOqLlKKK\nnNNVPAnbS+WfspyUFMSsCF/ZOEaP4YBtdQjuoQxrN7X5qmY6C/ZOgt8VmVgkza5P\nymaxZDPPDKEP9LatDVkUzXutiY1YsUGc6xMq/oa4I3JL7I6nXGWxVN7slSziYHAh\nBTpef5PK235k6AIE+oEbpdmlrEj5UT41SfFIyC8el+Vy2obmuulsziyzyUCbZqBQ\n9yHa3ACCUMqIaDvVin8cEMXA6jcxVI+oYug6Nx77735GuC2we2aQwlaRvOFvxZLp\nhIb/3h17EqakM0NMxFgIVxvvmnmrNIBylN3Uhh6FbvCviWssrl0NR0NNFnV8KCsd\nIsy8w0ALl6wAh0UCitEKuG+fThczYQpMv4KmKPBF2Kq1dloXDK3f9bT5I2pGXpUQ\nHmkAs8TSRNlTso6vfdZ5g5jTJvWNJGUA2H5IgAWs59+ZHZVMlzbGUBIMyo1Po+KC\nlGhEXmBA5Y77qWob/ebAGLibMH2lq9I9eREa/WTpQxcT7uInO45XaU0cxcthNNKs\nPOyg5aX3HoClpzPdvizE9iC3y5ydjrvndcg4D/jLrUAZJLwmS+VP+qrDR4/AG/yi\nS38lPvAeeUQD80WX3oonZBYHHd53AgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQkq0MpY1b/6VBs\nqtCa/7QpVGd1nTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAJ24mLPy6pE9mVLnL+VQqlPNxohciCr7OeLFudlqpVQo\noX2Tv5TISYM+jXIckTgqUnLkTP330fdt38ov+K/ZCnw6OymkaqKgDXfojhcNqAmC\nN2fX4j8LhOPhidqxOy2WlNkdXs0SF8c/iR70jsJoXxluotuKbciZ2b8gZquyST0R\n5hn8k2ea59/XO0rzIeZ9fozCDmDuBZcejtFync48TkMUDlwjDLXkBtGBkmE9ZVLL\n3jr1Mu8Nt0gal7eHs3IxPO6n+kC33MF7PxgkWmzqOrs+nStyj2WLNqTkiCCFhEBa\nePZqptfMejk8k5HJGtqVg9OE0r2HFRQOxkES5BDXwG74L6nw9plEksjjz2tXEKDj\nu9JrL1aNMLgy035exLjWgRa+xiJ9hTgnsAoM9zkJM21dHMnHwGL37YD9lEHyLX+I\ngO/r/WtKoiJScaDqmdow9EmGTqvUqBcE+z3wiT0WIcglea1JidVIWAnoeCQApybX\n17ihBUYgUycvIc6QpmHqrlkEutPc3pQx7ThbIkaq2Sx4VkDWGWw1H/TPnQ4hSEM6\nDlWJBdvdWWoH4yXpF3HZvCBtOyXabnfpIPPX4G+trrpch4xaLxwpDST1VkJ9xRSO\nqoQ2uoIrZWG1fcjEtSh3P+zxDJzFjl0GGJ2zHV9G/N7bvngbho/SV3cETzZoL8Yi\n-----END CERTIFICATE-----\n\n\nWUS intc keyid f307ba33347c283a1e0c1508ad02f5c8ca06f45e\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvbLTMRnyH+O+gAAAAAC9jANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAxMloXDTI2MDkxMDE5MjAxMlowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRjMwN0JBMzMzNDdDMjgzQTFFMEMxNTA4QUQwMkY1QzhDQTA2\nRjQ1RTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOnkRB7FnwcwH2j7\nWhQAhOWg00Ki/Vjs59YnkKFBEMYbvTcpkIaQ4WdHJh4rBHEPVorVi6c1Ikg3oVUZ\ne3t5D08g1Hr3mNZaGUmrbF4OnsDFuWcIQIDgL1umnC6xhIzozjMVEz89sPky462X\ncBEkEx9Q+Q8lSzpyop5sRokCQyjuLLP+DTKm4UzoNMzMK16W2r9PL3HP0B3uhXUH\nCsUZBF0O7RndTIDA9XuSZlLJPQry2Jo4cDOXjUK/cMmPQtY2jaaCXGJ3b0a8HBxE\na2YaF1XrvKcdChFu0AYa07BZ5yi9l/032P1C4YND++8NCNFO57smOeNF7oWq0IiW\niHAGB4jaQHDPGlmQ0gxUBWF9XKD1t98fVPbkXQs//IZfi05FWkSCwfmYhsl2879E\nhc7KHasCVdAaD6vW9TjgbvJfpPGI+XYahvNto/+zX1RfIQmgvDnT6gtBuLxsN8SF\njhSe/Laq7fQwL6MKJ8wULyyUK7y+414bWWsvm/vQ9nHwT3ImX2PxH3DqRIMS5ctG\nAtCXU93k9VkG9F3YN+QuVLrdSbYIYGWx6PC/acze90vjFvNakm17egzO5IcAGCL1\nePxC94lJMtEK937eqHqzMfabBnP0QIJ8ivRhsBKj10F0zEpbq1+awXvEQw0eIWIe\nBO0h8ardQYzvXLyrKDi4fDfCux0TAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQVJamGsfiscuFf\ni2b2vklj+9RHJTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAD8LYHoqLLYgIblCIfQYvMiSY6kInAX63ZQqHRMc49QI\nUjISd1NfckI2CAU1prdJXjUUsuWlXh0ifW/5AKYbqQ0hBQOlzDygIfFUQyiZrb2A\ngM+199K2GnYIE5xTSIlt0aqHz8tXMuSR8DLF46eXN1SVsHT3kxSLoFaMWwH/KXlK\nj0unRP0Hx3I3sDOEnTNJyYSWsnZUApW5Boq5DaFc5dNzTQpPlLkziO08LLmt/msc\n26GjBzVeLkcMDyTeN+Uj9DqpkE1+RIiYF+sngQ+3YcP3gCnW5vmvsA+LEYk4lDZv\nCIwmvdZdjahXwZ3GJvsVPesnxNF3fON19po2gLe5o+Efq6pflU9QBsSPP3yAJCa9\nOj00HxiAdpwPVRYXcD9Kc9ERH2WJdeg47s9q0D/bKB5FAWRiS5dIo9OKZkuh0whq\nbwSNxfUe01usmr0pKFN18zesLP5OJOMab556cXhUti9Db0L1kTXgzHuqy857p3zh\nkKUs73vTndD1vqRUq5cye3HS+2xsNwkqy/35Tg9GOku8UWlMbztKMWdpvOREnKOb\nFQjyuz8Ee1DjLIWf9BWwKCg3LUU6Oof1/jxasXF5+P8++WqIFyVFPRzzqbdRPlQJ\nFM3PwskbLdEOeFi8vZ0DzqOyTwQHfEUs2LQcJ242Ow2gSfBFuhr5R2WgGgzQJRdj\n-----END CERTIFICATE-----\n\n\nWUS intc keyid f6dcae3808326f10a46a62d55fe0a9cbe841a3d4\n=======================================================\n-----BEGIN CERTIFICATE-----\nMIIG7DCCBNSgAwIBAgITMwAAAvXkoDYBk8S1xwAAAAAC9TANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTIwMDkxMDE5MjAxMVoXDTI2MDkxMDE5MjAxMVowQjFAMD4GA1UEAxM3V1VT\nLUlOVEMtS0VZSUQtRjZEQ0FFMzgwODMyNkYxMEE0NkE2MkQ1NUZFMEE5Q0JFODQx\nQTNENDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKikCph2pBy6EaXU\n5G44VceO3cXOYVPufbKGtGjlvQxo1au5i7fNStGglt1YtzDEUD1nD2CsgDBDi5zv\nCM2JfMczcavTYvI/zJUjR0lMjP9tq2PNkUJXp+wM0gDgkDvSOsAZJcWaRTeG3Im2\ntmAijRO0tkxuw3mPcwRL4gMckxf9CNS6q9BFPfIjlfCqBA/IAKklSuj1kKfsUh/r\nvqlb/nX5Poy6ZSWnOFFZUTWm2+5XKU6TO1sPRtWiLtNXfib79mgvSExNmhA0ATIx\neiyIZ4Q9cZIJN0uRqVGHJ9Td+APVnWAzibUgQfSBLcL9oX9bbtaoB7PX3nTgerlk\nTZ51G5iU5l9J7bfwRvv6jrJ2VXMH/tRIiVkydGhokFD2h8ZAP2dfXHJT+myQN8ww\nS4vX8ySLJdpx2diI3LdqTN36qEGI5SQLXaGtft9nQ5cjhjsAteAVPz199bACLEIn\nQNbrIcqVrmU+OGthCmUVoS6c83uF2GgrrqyHoCIGU0+jjWCG5sDTpwghTNipayQ+\nhwVinH/iOncbcLqFaM10T/5Y+rexwW2az3QrhLU9ojJf5vySkMq61ikvIvj7ZlWj\n7fUMQnLo3n270B6m1nBih/qbfSTOl1K1MLfGehKeN2cR5g8yEPNR9qRs+Xe6EojJ\n30QNmbmjRnxj/IZyH/i1AIWFeKOFAgMBAAGjggGOMIIBijAOBgNVHQ8BAf8EBAMC\nAoQwGwYDVR0lBBQwEgYJKwYBBAGCNxUkBgVngQUIAzAWBgNVHSAEDzANMAsGCSsG\nAQQBgjcVHzASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT1WnmarvtzSxvf\nPzBp9xPQDWJOuTAfBgNVHSMEGDAWgBR6jArOL0hiF+KU0a5VwVLscXSkVjBwBgNV\nHR8EaTBnMGWgY6Bhhl9odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Ny\nbC9NaWNyb3NvZnQlMjBUUE0lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3Jp\ndHklMjAyMDE0LmNybDB9BggrBgEFBQcBAQRxMG8wbQYIKwYBBQUHMAKGYWh0dHA6\nLy93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVFBN\nJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAxNC5jcnQwDQYJ\nKoZIhvcNAQELBQADggIBAIOEYzu5vgJbnKPeHA98njIE67R6f09yDyWlbClBKk0k\nekfVfBCe0sU85ujmR7QuMJfX39to4SSvV9581tfEMNlVGWy0V0Ct3nZZp10yRSEQ\nyfrV+kAVdLK4v3cPlpfZB8JyvLmR9TKxZDah3OpVHG6QS4nCmNwIlZHwTHSs31Qz\n0R5/5rsbZWE/21PMNuqsrYRBDY9OSwuEDg5Agvj5doGI+f/EdrXq7nbjquKiNo7W\nXV27zWilk7YI51tDFAUcM/cP757u9o02hDQrIGqvb0O+oFBpesTd8cgYt/K4u8xN\nV7XGnwo8DTOaEx5QkaScAwTnT36rHDw/7W3kfBOj6Kdt4Yws6kbZL2T5cHUxaKGj\nKlu4rb5YX2wYBc7QnV2WTuuV5h3wGIyWGvuic9rZ7YkEXvP4UxBFpT/dHCmBK01W\nLWPGFh51k8k+VG8YKpaD7CRPAv5DEqbyjUAKHip6LrqiiwhFMYJdAdvni+jXCLfR\nzJ+CNZjBuvE4WfIc20rdSgsTeFgFOlTgJe4nvD5/Uq32cj4R0OcXekmtbmV4MEzE\nNLV0a6Su9ZK10qGt/lEcxkifD2sp0nGT0XG2JK5LbnJsXZnS+yRnbr6AbjI0Dg7n\n1EAOqevdqdcZroO1J2GxD7Rd8hOhL3xD/c/ElIwVLkg2sEzRJGrmx2EBzmIBfdJC\n-----END CERTIFICATE-----\n\n\nWUS ntc keyid 1591d4b6eaf98d0104864b6903a48dd0026077d3 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAqUCVrttiIsXhgAAAAACpTANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0MloXDTI1MDMyMTIwMzA0MlowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC0xNTkxRDRCNkVBRjk4RDAxMDQ4NjRCNjkwM0E0OEREMDAyNjA3\nN0QzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAkpUIa6U7K8e2TlBw\njMy+3DQkyDMgtB1AmYUgwVCb3v3LhX5LQmk8w8gfa9ANc5K2LBhygZGXI7qzycjx\nflZiJYyCOMkPIS2a+Q91ToXAipae3/8uo+kPsrPP/ODKKCshUCaT6w0ytnnXn2+n\nMFRTWgHypoUdTurYBAuzyXDNbkZPIul8npuN6FUWOyTqBZldNETsqxb0NdHxzRhy\nMcPkQRotcC52DTDt5mKwMwlGsYVDPVSg/1UKRwNgEbeeKkvXi7sbBsRrWEIWoQyQ\ntKo7zqX17LzFyC1BsrM7sdz3ahu2Z4VhikYwhVicO/ohleQggVf0JIRI2Hfb5P67\nWokK3E19qrSWdIt/W7hTvkCk3yQcbG1/v0xFLK6Sl1SK8yOee/1a7dViQ/6pYxhg\neZ+hbd755BHO9CFBAq+eGJffdFvSpPnUvGS+Q4DDbEmXmZva+FQgSef5N6FfzfOa\nno2hzVKPqmMfULQ+OP5lcpMuovlshIuhdadqqECNQmN75jxfL29FPT+g+w1855x0\nvoLC95aFMz4yXpgCHz2KLZtT8xhHygNi47D0V2RB6uHAGro1DjXti6vXSGp+Xs/L\noJOcnVmbwwnNwm92pfZiRe7VuNuygLBDFuRd1L7MIcFWxbFWprgWWoau6JZdBODi\nZm4hJ9fcQjoWFcegc/NnC32bKwECAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPAb53K+HaMKrz2l\n1iucfJQUIgH9MB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAibqeCkMxc00T2BrxC3S5UksXJ/zcVz3k+hnGgBZkqfvc\nT2QJ6RK42o/vQlQYCLgZI5RVcCtip6ldjNaHE5oaiZS9joqB/i0At9BSFyPVd2Pn\n2JTPOMzYC+zCjIlICw8LeArNq7qPTSJnp+3uIWkpHsUc2Y2lrrS7/pLeeJanmeOi\ntxPgLb5ZCzhtJxYOUhhIOYQwOtoftxFtcHknG8vwPVMSUjMd80qHRjtRhSk6ZdC4\nLlJwdedLzoor7xeU3KvzDj4S+Lq8ajoo1EZaPVKv3IyDPmnYw7PmIhD7BusJvf5K\nrPgmzad+XCrLezLveaQ4uELgxvJFAFF8M7iL/KbrLXEhmrQTYEVqKx8NpVFgsTnd\nnlEfKJ8I6zqTjdWg6Qg95gJdiuh30qnRrmXtqSpZKe7VwBZrc/J4x7lr/dihNQMK\n5owabJH8aw9U/PY0i4JpIoqX9g4H+6PkFhPtxwn6OfQqxKfv6zUWxI6KyoUbENQh\n9e9CO0rWn5hMd/USobvOBMp+QKN3ylXCkHDunCsoJ0I7TMRCIsLKSUTc5aqM1BIV\neNIMKD/sM4IjgsPBvbQYMHIgGu5P+1u3MLlUwXBydtMVcLhElg6DiFvdE7CIDjkI\nVhRa0AKZh/Q/39d98meBE1br7xbktt//fmKfwOaBj9gpKtpiaK/BrTt33Rq9iUE=\n-----END CERTIFICATE-----\n\n\nWUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAX4YVGRHvR3DRwAAAAABfjANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDgwMjE3NTE1OFoXDTI0MDgwMjE3NTE1OFowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1\nNzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4Sp58SfgGeSuQ0sT\nuTWZ86mXZ36+g5LxTkRecRr2a6UDvqICbnEJPoVdP6o6q9Eq7HC/02vScvgQzUrw\nUOaA8giXlfgXDzNwY16wgu9S1AqUrzVIJZ2OCPxEmZItpObXI/kulR512YRa1IZg\nrSKo3tNhi3YeL93bi4fQR1RRBDrro1SoBRiURgU03v+nLlfFzxGpTfYCo5eee45Y\nDLaToowlQWoblwtW33Nb3VHU1LHL28nHJyuxtteKjJYdzve7w8jnp4sPfVgrwVIV\nXUZ7a7MccmSNdLgmDpgmjt7YSgYsvXy9UBrFQtEkFX4ZssOSrQG0D6QU1xoY+G67\n9cCtXIdwFKciF5ixAXBYzz7j/En4b898DVQAfJl85fT6bOT0CiobLuaKJMBXjHG3\nd5AwD3Slai3JPZfnAsNuuM3tzNx28fbR6N0P0UHNb12EAw31S3KBm9BsAqSFwS+b\nfo9x3X/8H1wak8eWAdWPgkzwxgQQ8UnXjtSdGPp+ZTLN0uddawsOPuZ/4iEsnLv3\nrCQ4oI1r9SBzHnrdX8zJHJpD0XC+2QD3bbPYQG/FgYyyrb4hYfngryarSNtzyPz+\npvlXAoSZmV7E5AkdrQMjZyHCC7huAok/WjZeDkSlWMizvGaaTXO/xERynhFhA/H4\ny5dq7fJFGNMUxRTXCaLZCfXc6lUCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLlLJkl9oh1EDzeR\ngQSm41zBUKZzMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAM15objzvKTW25Rtv8Uy1wbRp0s7pviyq14a2X64NHk6X\n5Z0VjnP4DP4ftaoWngN7IJ+jQLp3yQNIvF5/orB2T6iHXL+j+J+jXfOr1TCHd78k\nNd6aVzIrzKZCp30ddDYabDBZLGqXg8A8SFmGwwryw4RTjXoS7XfjbPlk8zR5h8Qo\nKmA6fCxiI87Rv9DuewY5vhbhzttaV3+SEee3ejuharxT1rDTsh1MOgR8LP3tNyS4\nXlDpjQMRmE/iot9Bi00MSqWR4+AFhgELduRGaS/1eiQtFYMvOGpalhdZTqvPBn2t\nrwXudbrNN7yBzR8DymlJ41pAOLCrqBHEB2DxfLJaBKi5UJpK5TvTo4GfMUOnvxzA\nnV1ThddE80wD9D4xxA+YAT90pmkWAyuxaKyJthnUAGvxLXk9P59AZL9Wx47QVNka\nimr7zKn5v/UPD6nd0Uecm+yAX4b6zHPl+EqwnisfKjBKU0Qsr7eBKG7Vaa/er8Oq\neQjFTbmtqGkXaspYBEsd8a6PyTgt9vBalHvVwvC2czxQ61SPNpIMEBu23V52f/NK\n4blkXTnP9Le/fv5GS/url5VVpFMwG28LpESAfz3taZPHB4LLcV5KMi9EDysdcY0K\nLlCoWMmjoa9BSPXSBGx+AFvfo79zUy0u1f9kI6hnM1SuSCuA29KwkBP5tsnFNns=\n-----END CERTIFICATE-----\n\n\nWUS ntc keyid 23f4e22ad3be374a449772954aa283aed752572e 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAqOqTbgw1e4kAgAAAAACozANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0MVoXDTI1MDMyMTIwMzA0MVowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC0yM0Y0RTIyQUQzQkUzNzRBNDQ5NzcyOTU0QUEyODNBRUQ3NTI1\nNzJFMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAx9KuJleK2B11eAYD\n+kL7UriodV9L8T5nPBtAY6YysLnvfgzjgdQ6JGGi0pFk+YowalosFTfJsjD6eY+m\n3SEFtFCGdmKaKoXqtha2V8y3HcAoqF7GzdHC8l5wbPvJVyl04TJbRZ67uGRaqISE\nJaGzpRUwbWynj95MWPUZY3AslevLYRqbAxUv+BECmRZTbd/pEDIKlfVDO/iAeCwa\nplklGeINC6v/fLvZKR3Ee2H3LKNWrXV/qxiwxCDA9AgKAgzLcIY3J9TUBUC9vyFt\nZHCjf7FfOOzcGQOI5mMI3r/3SQq0oXFXQBZosBCio93mLUVVCwuvupYIlhn9ICjt\nqsh4Z5sHZkKsNGtG1hkJ2XCVksP8KwJk5s2EoMOiDmRbdWFaIoHusivxv4n8adF8\nQdAXQ4zI89ji4RSmqbdgJ0Cu80yGId+LgIm8CMiEBUkKmUCufz+5+iHhgCF3Ir+5\n3lnJqOxjpvfl0YZre4i1Hsx0ROmrTu/f/LFafWb5KOXhZTXjKaYZmHpuganiO3Bt\ntV0zDtAEzXK5HfyJBV0DYBULe8Ir4UMSXdhjXf2hURhEE8MLG/QqaaDhfv709CfP\nDl85ci6VuKXPlZyt6Y2i0wbnwdji+oZY5JvQMSHZCBgOhtuggah/EBMBabcHCP6z\n5SCVR+IjNnPrfv+f3fGNEtfB0Z0CAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEob6uyJsTFJm9/I\neeB77MrH9KLdMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAKVn58AXi01je06E1D1bdtw92AxsL3HWNgvwDlmArU426\nrVAsNx84wojFicRTs7QpMTtLM579eN5ug7MpODop5I7segZaytjREc0MdI3BPHHy\nScDXC2+jEnIhRna9E3TfAybE/KD9ry6bl4gaLCftvopz2l0I+boOG9Dl7WlgHTNd\nMVSQK/ccgD7DzRB+yY1vnGQLdWuYOz7/spx1i/xM/YpFfI9vl6+KZ1sfG0iHNL4t\n6vnqiI/OISTys6lGMH49/cQaCw7tLCHwqRlwOWvyC9k6gXMAWCdkhG603UtInAbQ\neFLZQwkhnvhHqR+hw/yMLKjaTVp3hrwqzQkjHuLwFCVpxYwhj0NX4uIn1Xh22iqQ\n0dwKU9mxNVPTZpwen5ER/KbjoI7eMCHLM/ZWKubApQDSeWm01+SBLvzjz9VTSQrs\nCPdtvg9VV3Xrdn9+pOcJgFIpkdHu9K5vyQWFjEYaeO6il1je8hZKFTYfXGuOEnj2\nR1ecZCmGCKFIdro+kowSJibFos6TIzjuX8kvYmjaayPW4fnKr2eDa2YWBFXXuTef\nTG/vMDE6a4B5r//KTv/fq0U8DN9bLEwd3nIxMQAxVq/nPkmrTSrX7CL9v900dBJy\nFK55aJYdITi/T9R18bzF/2aYu7Jje9NdV126RqL40j1oUYkuM9vYldVYY7UBrU0=\n-----END CERTIFICATE-----\n\n\nWUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b\n======================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAX/aoQ40ah+CNgAAAAABfzANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE4MDgwMjE3NTE1OVoXDTI0MDgwMjE3NTE1OVowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0\nNzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAqv8CKR+xDTi9tAgN\n3wLbPfAipEybhXp+vqNKYlSNWwAE+O9iybajvYygapbzGudRgWqI6ntU4LbIadAv\n9HpNwTFHIycmKemJHWQf2fmK4ylNxgnV/t0yJsgGlp3ZeWmjjPvij7E+03YlSJzD\ne/xoYsuKFpS8Rp0p4l3EebMmsp1ryCDQtKNF/40Wu4ZzQOZURlq70M2dorxDDbKe\njLx2HkTkr759Hkc/hD77GmNhdSVpSwuVi6hJ9PwdZSsVtXVqDAX6a7oDvjL2CUqW\nLhEmAaAdGVraqH5pRkAzQPJq04/Ad06de/HXety8YPI+wy8loDmwgfpbdkTyKMrJ\n/Va5DLyIh5f0wmLu05sWNwRjNApNZmWJC8/xVidMy5q4EutfdCKGCjChvoMhvYF1\n7T91f5ia+4YIw8BL1AqR77Nspb8fQdTmznLV/YZEHrii1NUg6K4ok9Fp3WLltJU/\n7KzZIEKMgez9SYHeGyjSHlAM0EfC0u5ItRkP5OwYlhe7roklGPNek7xle/QVVeTn\ngpfWH0rlB7nEGXk9kszFTmsBJhryzXrxxbf4se9nukrVCV/gul6vvQOx8LJdnFzd\nkUNHzqSv9cDvmNkEzY+HcOiRBQoBBGc8MabUCXIqHcryk0fBNP/c4YIt7vS40jqX\np/X1AtPyl6A5tWTkDO0odac4XJkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLuQhxlfpQMV3JfW\nSrFZkRJC3Q2sMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAYvEwS/3xa2Hf10bUNyxD3XQiwAJAbns01jIUMEaGFNAE\njuwOWZov1OoEj049KNqeO32qbgSVGI9bWtfbxwb67Qv6PWdF0EZZUc0DzBXY2suH\nBoQ+WujN4mjtvgaRgcYqAKhgU9yb9YPw9kYvfyoMBdgNsfepVdfTaLvEe900Tjvb\nbYx6OEu6egiP5b0gqhcVaigppbBP0+odrNO3f/c7Q5AO+SENqQvhpSeV+WiNVedk\nZDAu+JNSZNbUBUUatewsyKyjRNFlzXtRvOmsctXHzrmqXJba5xv82+D6r6RhivGt\nXLjb72UV4bJK6F41PR142G5FBEomj0yi/AFF3vowKEf5dciUturVn5G2MDbMlTPU\nf9349qbaZepxyHYa4hgGYRnuKK4lYK5FLvDtYvun7mkG9JWZqiblG9dA8ZKyMWGs\niLBP84EplePhzdfAR/RlZKPXe7JEiHffPzexCMB0X/3BnyXxrMKZiFzIXzQ3jBZN\n34I3hQl4ohJMsWX/3FbgrGjJVwOb3ZV6Wk+5VA2iXMnflbOHSnzKBSMYR5uZOdG6\nXJQY++KrJTkyHihAVinu03Ir42BvQ0+2VFTSr6V22hDcW9YQQy8N1b9LVLW+0kqO\n+5+QPkJZBB2181kLJnHPcHD6GX5tEwq/CK6UKzb25H7eROZan2kV9yLOXWkQfWo=\n-----END CERTIFICATE-----\n\n\nWUS ntc keyid 882f047b87121cf9885f31160bc7bb5586af471b 2\n========================================================\n-----BEGIN CERTIFICATE-----\nMIIG6zCCBNOgAwIBAgITMwAAAqQPWUBJNgeAvAAAAAACpDANBgkqhkiG9w0BAQsF\nADCBjDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT\nB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE2MDQGA1UE\nAxMtTWljcm9zb2Z0IFRQTSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDE0\nMB4XDTE5MDMyMTIwMzA0MVoXDTI1MDMyMTIwMzA0MVowQTE/MD0GA1UEAxM2V1VT\nLU5UQy1LRVlJRC04ODJGMDQ3Qjg3MTIxQ0Y5ODg1RjMxMTYwQkM3QkI1NTg2QUY0\nNzFCMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0i3kXSJd/0UylWdt\n4gh+M/VvYecYVvH28We/c83CLe42EeTbgLLC0PigIS262oV/B+bwDz/HN/rAlQxI\nA2XclywMJRH3MFTXblZzIOfdVYJGThS6fFmaJiXJU/4BMzOXMgLMP3u9PXvnVW4i\nZRSdl4RXk8N1CIMlg1udinG2s9pH3+EH2UMKQ+OaSU93OSkZsa0NlxLW/pRcZDnr\n61rxa2JuIV9QZaAJfeIw3uBJL3+ocghLzGZLA1Haq09eKjwI/8qyi87ITVzxq3cS\n0/nMXp3KC8QppcjMkSrtKlvOaanJ6G18DkDqiM2bstUxFifxSbY0NYn7NMiS4zhR\n9WLRW9PrhiNpl8buol8WmAIlWyDB6q88NNEaTL3e9wraZfRLanhJy37sA7uAQ/Hh\nTAusyzN2FXZqH6P7a4TaozyCk1UGHHvCZKvUQCSx52+QOq8xOQnSebhz98208+Vz\nl4dDYS1HZmnlpZEzaZgHAGvF/PFkBk1p9JTWq7TNPzOWI/NpfaDuohTPiUl/Iv4X\ni2bMbscDZjBU/Wz9Vp8Y8VqKgJLm2lpf8esLcuSP+C/cyvo6Iu8m2He52bwHfJ6q\nO7w+//iflF3DxUlP+oc+gMlDz5Ynm+Zvxz9iPQuHjfJYHU5PU6mTR6ADd4kY+/NW\ntzWHQW1+ZJsnhJp3M7x6aMidgdkCAwEAAaOCAY4wggGKMA4GA1UdDwEB/wQEAwIC\nhDAbBgNVHSUEFDASBgkrBgEEAYI3FSQGBWeBBQgDMBYGA1UdIAQPMA0wCwYJKwYB\nBAGCNxUfMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFzkix20sAidsDbw\nXVqsXI+yNrejMB8GA1UdIwQYMBaAFHqMCs4vSGIX4pTRrlXBUuxxdKRWMHAGA1Ud\nHwRpMGcwZaBjoGGGX2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3Js\nL01pY3Jvc29mdCUyMFRQTSUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0\neSUyMDIwMTQuY3JsMH0GCCsGAQUFBwEBBHEwbzBtBggrBgEFBQcwAoZhaHR0cDov\nL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUUE0l\nMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDE0LmNydDANBgkq\nhkiG9w0BAQsFAAOCAgEAG06E9kKeAZpTHL6JAKfxPUJo045KBPVyCpV5U8Fn+oL5\nSXcaumjWGaBYUc2UfTH9bySrENmurQGzZFAfrdwdnXjJ+dKFbOZL1sLqlt0WyEzH\nLKARWCjN4gedGH5746M8qLVaGYHNRt7bK9v2OHCl9sgT1NRzSoQd/3RlIfhscgA+\n7Lcca5Fvt8QmnEXYO3iTH3NFaTnS1ieWYUnKAmkw0o4ZD37zYY0Da3R6zLtqFubu\niko7x/52XGftM7Np4RKFH0B6O37oOcw4iH9zrBRVjTgUBWQ2Mi4YnDxzmVbDxi9A\n4GkSlJWgl+QRge2r1B+ZKQQ+6nqlLhzDbgLFZJJ2EjYFmVBVG4kziV/wHyEFzC0R\nxsaD+CtOWG83dm+y0hzvLE1PxjUy7Tus/X0G4I2JLrti5zIxr1K5v7a/gO7xemT0\n72iIYW3SBebZ8DwYPlg5tSsO/C9eY8vgIb3mxrDLg/9K9c6DvT7P3iv3BCjrwGdJ\nocU8ymxk1NAeMScz5Masy0+SXUA9tBW7hO3MVZrrldquKdFVe29tRuPUJFNrmFME\noLUhgPJsORSTRXZt+hoOqdVEcKpE0emRF5Pj6dhhAq1M1lF2MZ3oN02IUxRF7LY/\nPV7SzFtOkoHcq/RjsbulQfAwB1NzIF3WmiYxICQIyJcVeT8/U5puPkKEUU/uwn8=\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/nitro.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIBmjCCAT8CFBZiBJbp2fT/LaRJ8Xwl9qhX62boMAoGCCqGSM49BAMCME4xCzAJ\nBgNVBAYTAkRFMRYwFAYDVQQKDA1OaXRyb2tleSBHbWJIMRAwDgYDVQQLDAdSb290\nIENBMRUwEwYDVQQDDAxuaXRyb2tleS5jb20wIBcNMTkxMjA0MDczNTM1WhgPMjA2\nOTExMjEwNzM1MzVaME4xCzAJBgNVBAYTAkRFMRYwFAYDVQQKDA1OaXRyb2tleSBH\nbWJIMRAwDgYDVQQLDAdSb290IENBMRUwEwYDVQQDDAxuaXRyb2tleS5jb20wWTAT\nBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQy6KIN2gXqaSMWdWir/Hnx58NBzjthYdNv\nk95hdt7jCpyW2cHqLdQ5Sqcvo0CuordgDOach0ZGB60w9GZY8SHJMAoGCCqGSM49\nBAMCA0kAMEYCIQDLmdy2G2mM4rZKjl6CVfjV7khilIS5D3xRQzubeqzQNAIhAKIG\nX29SfiB6K9k6Hb3q+q7bRn1o1dhV1cj592YYnu1/\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/solo.pem",
    "content": "Solokeys FIDO2/U2F Device Attestation CA\n========================================\n    Data:\n        Version: 1 (0x0)\n        Serial Number: 14143382635911888524 (0xc44763928ff4be8c)\n    Signature Algorithm: ecdsa-with-SHA256\n\n        Issuer:\n            emailAddress              = hello@solokeys.com\n            commonName                = solokeys.com\n            organizationalUnitName    = Root CA\n            organizationName          = Solo Keys\n            stateOrProvinceName       = Maryland\n            countryName               = US\n\n        Validity\n            Not Before: Nov 11 12:51:42 2018 GMT\n            Not After : Oct 29 12:51:42 2068 GMT\n\n        Subject:\n            emailAddress              = hello@solokeys.com\n            commonName                = solokeys.com\n            organizationalUnitName    = Root CA\n            organizationName          = Solo Keys\n            stateOrProvinceName       = Maryland\n            countryName               = US\n\n\n-----BEGIN CERTIFICATE-----\nMIIB9DCCAZoCCQDER2OSj/S+jDAKBggqhkjOPQQDAjCBgDELMAkGA1UEBhMCVVMx\nETAPBgNVBAgMCE1hcnlsYW5kMRIwEAYDVQQKDAlTb2xvIEtleXMxEDAOBgNVBAsM\nB1Jvb3QgQ0ExFTATBgNVBAMMDHNvbG9rZXlzLmNvbTEhMB8GCSqGSIb3DQEJARYS\naGVsbG9Ac29sb2tleXMuY29tMCAXDTE4MTExMTEyNTE0MloYDzIwNjgxMDI5MTI1\nMTQyWjCBgDELMAkGA1UEBhMCVVMxETAPBgNVBAgMCE1hcnlsYW5kMRIwEAYDVQQK\nDAlTb2xvIEtleXMxEDAOBgNVBAsMB1Jvb3QgQ0ExFTATBgNVBAMMDHNvbG9rZXlz\nLmNvbTEhMB8GCSqGSIb3DQEJARYSaGVsbG9Ac29sb2tleXMuY29tMFkwEwYHKoZI\nzj0CAQYIKoZIzj0DAQcDQgAEWHAN0CCJVZdMs0oktZ5m93uxmB1iyq8ELRLtqVFL\nSOiHQEab56qRTB/QzrpGAY++Y2mw+vRuQMNhBiU0KzwjBjAKBggqhkjOPQQDAgNI\nADBFAiEAz9SlrAXIlEu87vra54rICPs+4b0qhp3PdzcTg7rvnP0CIGjxzlteQQx+\njQGd7rwSZuE5RWUPVygYhUstQO9zNUOs\n-----END CERTIFICATE-----"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/trustkey.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIICpTCCAkqgAwIBAgIBATAKBggqhkjOPQQDAjCBrzELMAkGA1UEBhMCS1IxETAP\nBgNVBAgMCFNlb3VsLVNpMRMwEQYDVQQHDApHYW5nbmFtLUd1MRcwFQYDVQQKDA5l\nV0JNIENvLiwgTHRkLjEiMCAGA1UECwwZQXV0aGVudGljYXRvciBBdHRlc3RhdGlv\nbjEcMBoGA1UEAwwTZVdCTSBDQSBDZXJ0aWZpY2F0ZTEdMBsGCSqGSIb3DQEJARYO\naW5mb0BlLXdibS5jb20wHhcNMTgwNzAyMDUzMTM5WhcNMjMwNzAxMDUzMTM5WjCB\nrzELMAkGA1UEBhMCS1IxETAPBgNVBAgMCFNlb3VsLVNpMRMwEQYDVQQHDApHYW5n\nbmFtLUd1MRcwFQYDVQQKDA5lV0JNIENvLiwgTHRkLjEiMCAGA1UECwwZQXV0aGVu\ndGljYXRvciBBdHRlc3RhdGlvbjEcMBoGA1UEAwwTZVdCTSBDQSBDZXJ0aWZpY2F0\nZTEdMBsGCSqGSIb3DQEJARYOaW5mb0BlLXdibS5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAAQIfqHisi0oO/eyOqSaDrr9itG2IymBkHnSDGQIIYmT+vqA8AgO\n81momc2Ld5PGpEN6muE54wPHQjvc/yCih8u2o1UwUzASBgNVHRMBAf8ECDAGAQH/\nAgEAMB0GA1UdDgQWBBS3J/fxiAv22irdBs98SODhF7kU/jALBgNVHQ8EBAMCAQYw\nEQYJYIZIAYb4QgEBBAQDAgAHMAoGCCqGSM49BAMCA0kAMEYCIQDc41LFK4LJCBU2\nVVKIz7Z6sxPhUEkh8nLSLK6IXdkP5wIhAIeKVOZchaVO5aF7fbdXoSrcyy1YYeUe\nPLojcKI9fX84\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/WebAuthn/rootCertificates/yubico.pem",
    "content": "Yubico U2F Device Attestation CA\n================================\n\nLast Update: 2014-09-01\n\nYubico manufacturer U2F devices that contains device attestation\ncertificates signed by a set of Yubico CAs.  This file contains the CA\ncertificates that Relying Parties (RP) need to configure their\nsoftware with to be able to verify U2F device certificates.\n\nThis file has been signed with OpenPGP and you should verify the\nsignature and the authenticity of the public key before trusting the\ncontent.  The signature is located next to the file:\n\n  https://developers.yubico.com/u2f/yubico-u2f-ca-certs.txt\n  https://developers.yubico.com/u2f/yubico-u2f-ca-certs.txt.sig\n\nWe will update this file from time to time when we publish more CA\ncertificates.\n\nName: Yubico U2F Root CA Serial 457200631\nIssued: 2014-08-01\n\n-----BEGIN CERTIFICATE-----\nMIIDHjCCAgagAwIBAgIEG0BT9zANBgkqhkiG9w0BAQsFADAuMSwwKgYDVQQDEyNZ\ndWJpY28gVTJGIFJvb3QgQ0EgU2VyaWFsIDQ1NzIwMDYzMTAgFw0xNDA4MDEwMDAw\nMDBaGA8yMDUwMDkwNDAwMDAwMFowLjEsMCoGA1UEAxMjWXViaWNvIFUyRiBSb290\nIENBIFNlcmlhbCA0NTcyMDA2MzEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK\nAoIBAQC/jwYuhBVlqaiYWEMsrWFisgJ+PtM91eSrpI4TK7U53mwCIawSDHy8vUmk\n5N2KAj9abvT9NP5SMS1hQi3usxoYGonXQgfO6ZXyUA9a+KAkqdFnBnlyugSeCOep\n8EdZFfsaRFtMjkwz5Gcz2Py4vIYvCdMHPtwaz0bVuzneueIEz6TnQjE63Rdt2zbw\nnebwTG5ZybeWSwbzy+BJ34ZHcUhPAY89yJQXuE0IzMZFcEBbPNRbWECRKgjq//qT\n9nmDOFVlSRCt2wiqPSzluwn+v+suQEBsUjTGMEd25tKXXTkNW21wIWbxeSyUoTXw\nLvGS6xlwQSgNpk2qXYwf8iXg7VWZAgMBAAGjQjBAMB0GA1UdDgQWBBQgIvz0bNGJ\nhjgpToksyKpP9xv9oDAPBgNVHRMECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBBjAN\nBgkqhkiG9w0BAQsFAAOCAQEAjvjuOMDSa+JXFCLyBKsycXtBVZsJ4Ue3LbaEsPY4\nMYN/hIQ5ZM5p7EjfcnMG4CtYkNsfNHc0AhBLdq45rnT87q/6O3vUEtNMafbhU6kt\nhX7Y+9XFN9NpmYxr+ekVY5xOxi8h9JDIgoMP4VB1uS0aunL1IGqrNooL9mmFnL2k\nLVVee6/VR6C5+KSTCMCWppMuJIZII2v9o4dkoZ8Y7QRjQlLfYzd3qGtKbw7xaF1U\nsG/5xUb/Btwb2X2g4InpiB/yt/3CpQXpiWX/K4mBvUKiGn05ZsqeY1gx4g0xLBqc\nU9psmyPzK+Vsgw2jeRQ5JlKDyqE0hebfC1tvFu0CCrJFcw==\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "data/web/inc/lib/Yubico.php",
    "content": "<?php\n  /**\n   * Class for verifying Yubico One-Time-Passcodes\n   *\n   * @category    Auth\n   * @package     Auth_Yubico\n   * @author      Simon Josefsson <simon@yubico.com>, Olov Danielson <olov@yubico.com>\n   * @copyright   2007-2020 Yubico AB\n   * @license     https://opensource.org/licenses/bsd-license.php New BSD License\n   * @version     2.0\n   * @link        https://www.yubico.com/\n   */\n\nrequire_once 'PEAR.php';\n\n/**\n * Class for verifying Yubico One-Time-Passcodes\n *\n * Simple example:\n * <code>\n * require_once 'Auth/Yubico.php';\n * $otp = \"ccbbddeertkrctjkkcglfndnlihhnvekchkcctif\";\n *\n * # Generate a new id+key from https://api.yubico.com/get-api-key/\n * $yubi = new Auth_Yubico('42', 'FOOBAR=');\n * $auth = $yubi->verify($otp);\n * if (PEAR::isError($auth)) {\n *    print \"<p>Authentication failed: \" . $auth->getMessage();\n *    print \"<p>Debug output from server: \" . $yubi->getLastResponse();\n * } else {\n *    print \"<p>You are authenticated!\";\n * }\n * </code>\n */\nclass Auth_Yubico\n{\n\t/**#@+\n\t * @access private\n\t */\n\n\t/**\n\t * Yubico client ID\n\t * @var string\n\t */\n\tvar $_id;\n\n\t/**\n\t * Yubico client key\n\t * @var string\n\t */\n\tvar $_key;\n\n\t/**\n\t * List with URL part of validation servers\n\t * @var array\n\t */\n\tvar $_url_list;\n\n\t/**\n\t * index to _url_list\n\t * @var int\n\t */\n\tvar $_url_index;\n\n\t/**\n\t * Last query to server\n\t * @var string\n\t */\n\tvar $_lastquery;\n\n\t/**\n\t * Response from server\n\t * @var string\n\t */\n\tvar $_response;\n\n\t/**\n\t * Number of times we retried in our last validation\n\t * @var int\n\t */\n\tvar $_retries;\n\n\t/**\n\t * Flag whether to verify HTTPS server certificates or not.\n\t * @var boolean\n\t */\n\tvar $_httpsverify;\n\n\t/**\n\t * Maximum number of times we will retry transient HTTP errors\n\t * @var int\n\t */\n\tvar $_max_retries;\n\n\t/**\n\t * Constructor\n\t *\n\t * Sets up the object\n\t * @param    string  $id     The client identity\n\t * @param    string  $key    The client MAC key (optional)\n\t * @param    boolean $https  noop\n\t * @param    boolean $httpsverify  Flag whether to use verify HTTPS\n\t *                                 server certificates (optional,\n\t *                                 default true)\n\t * @access public\n\t */\n        public function __construct($id, $key = '', $https = 0, $httpsverify = 1, $max_retries = 3)\n\t{\n\t\t$this->_id =  $id;\n\t\t$this->_key = base64_decode($key);\n\t\t$this->_httpsverify = $httpsverify;\n\t\t$this->_max_retries = $max_retries;\n\t}\n\n\t/**\n\t * Specify to use a different URL part for verification.\n\t * The default is \"https://api.yubico.com/wsapi/2.0/verify\".\n\t *\n\t * @param  string $url  New server URL part to use\n\t * @access public\n\t * @deprecated\n\t */\n\tfunction setURLpart($url)\n\t{\n\t  $this->_url_list = array($url);\n\t}\n\n\t/**\n\t * Get next URL part from list to use for validation.\n\t *\n\t * @return mixed string with URL part or false if no more URLs in list\n\t * @access public\n\t */\n\tfunction getNextURLpart()\n\t{\n\t  if ($this->_url_list) $url_list=$this->_url_list;\n\t  else $url_list=array('https://api.yubico.com/wsapi/2.0/verify');\n\n\t  if ($this->_url_index>=count($url_list)) return false;\n\t  else return $url_list[$this->_url_index++];\n\t}\n\n\t/**\n\t * Resets index to URL list\n\t *\n\t * @access public\n\t */\n\tfunction URLreset()\n\t{\n\t  $this->_url_index=0;\n\t}\n\n\t/**\n\t * Add another URLpart.\n\t *\n\t * @access public\n\t */\n\tfunction addURLpart($URLpart) \n\t{\n\t  $this->_url_list[]=$URLpart;\n\t}\n\t\n\t/**\n\t * Return the last query sent to the server, if any.\n\t *\n\t * @return string  Request to server\n\t * @access public\n\t */\n\tfunction getLastQuery()\n\t{\n\t\treturn $this->_lastquery;\n\t}\n\n\t/**\n\t * Return the last data received from the server, if any.\n\t *\n\t * @return string  Output from server\n\t * @access public\n\t */\n\tfunction getLastResponse()\n\t{\n\t\treturn $this->_response;\n\t}\n\n\t/**\n\t * Return the number of retries that were used in the last validation\n\t *\n\t * @return int     Number of retries\n\t * @access public\n\t */\n\tfunction getRetries()\n\t{\n\t\treturn $this->_retries;\n\t}\n\n\t/**\n\t * Parse input string into password, yubikey prefix,\n\t * ciphertext, and OTP.\n\t *\n\t * @param  string    Input string to parse\n\t * @param  string    Optional delimiter re-class, default is '[:]'\n\t * @return array     Keyed array with fields\n\t * @access public\n\t */\n\tfunction parsePasswordOTP($str, $delim = '[:]')\n\t{\n\t  if (!preg_match(\"/^((.*)\" . $delim . \")?\" .\n\t\t\t  \"(([cbdefghijklnrtuv]{0,16})\" .\n\t\t\t  \"([cbdefghijklnrtuv]{32}))$/i\",\n\t\t\t  $str, $matches)) {\n\t    /* Dvorak? */\n\t    if (!preg_match(\"/^((.*)\" . $delim . \")?\" .\n\t\t\t    \"(([jxe\\.uidchtnbpygk]{0,16})\" .\n\t\t\t    \"([jxe\\.uidchtnbpygk]{32}))$/i\",\n\t\t\t    $str, $matches)) {\n\t      return false;\n\t    } else {\n\t      $ret['otp'] = strtr($matches[3], \"jxe.uidchtnbpygk\", \"cbdefghijklnrtuv\");\n\t    }\n\t  } else {\n\t    $ret['otp'] = $matches[3];\n\t  }\n\t  $ret['password'] = $matches[2];\n\t  $ret['prefix'] = $matches[4];\n\t  $ret['ciphertext'] = $matches[5];\n\t  return $ret;\n\t}\n\n\t/* TODO? Add functions to get parsed parts of server response? */\n\n\t/**\n\t * Parse parameters from last response\n\t *\n\t * example: getParameters(\"timestamp\", \"sessioncounter\", \"sessionuse\");\n\t *\n\t * @param  array @parameters  Array with strings representing\n\t *                            parameters to parse\n\t * @return array  parameter array from last response\n\t * @access public\n\t */\n\tfunction getParameters($parameters)\n\t{\n\t  if ($parameters == null) {\n\t    $parameters = array('timestamp', 'sessioncounter', 'sessionuse');\n\t  }\n\t  $param_array = array();\n\t  foreach ($parameters as $param) {\n\t    if(!preg_match(\"/\" . $param . \"=([0-9]+)/\", $this->_response, $out)) {\n\t      return PEAR::raiseError('Could not parse parameter ' . $param . ' from response');\n\t    }\n\t    $param_array[$param]=$out[1];\n\t  }\n\t  return $param_array;\n\t}\n\n        function _make_curl_handle($query, $timeout=null)\n\t{\n\t    flush();\n\t    $handle = curl_init($query);\n\t    curl_setopt($handle, CURLOPT_USERAGENT, \"PEAR Auth_Yubico\");\n\t    curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);\n\t    if (!$this->_httpsverify) {\n\t\tcurl_setopt($handle, CURLOPT_SSL_VERIFYPEER, 0);\n\t\tcurl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 0);\n\t    }\n\t    curl_setopt($handle, CURLOPT_FAILONERROR, true);\n\t    /* If timeout is set, we better apply it here as well\n\t     * in case the validation server fails to follow it. */\n\t    if ($timeout) {\n\t\tcurl_setopt($handle, CURLOPT_TIMEOUT, $timeout);\n\t    }\n\n\t    return $handle;\n\t}\n\n\t/**\n\t * Verify Yubico OTP against multiple URLs\n\t * Protocol specification 2.0 is used to construct validation requests\n\t *\n\t * @param string $token        Yubico OTP\n\t * @param int $use_timestamp   1=>send request with &timestamp=1 to\n\t *                             get timestamp and session information\n\t *                             in the response\n\t * @param boolean $wait_for_all  If true, wait until all\n\t *                               servers responds (for debugging)\n\t * @param string $sl           Sync level in percentage between 0\n\t *                             and 100 or \"fast\" or \"secure\".\n\t * @param int $timeout         Max number of seconds to wait\n\t *                             for responses\n\t * @param int $max_retries     Max number of times we will retry on\n\t *                             transient errors.\n\t * @return mixed               PEAR error on error, true otherwise\n\t * @access public\n\t */\n\tfunction verify($token, $use_timestamp=null, $wait_for_all=False,\n\t\t\t$sl=null, $timeout=null, $max_retries=null)\n\t{\n\t  /* If maximum retries is not set, default from instance */\n\t  if (is_null($max_retries)) {\n\t    $max_retries = $this->_max_retries;\n\t  }\n\n\t  /* Construct parameters string */\n\t  $ret = $this->parsePasswordOTP($token);\n\t  if (!$ret) {\n\t    return PEAR::raiseError('Could not parse Yubikey OTP');\n\t  }\n\t  $params = array('id'=>$this->_id, \n\t\t\t  'otp'=>$ret['otp'],\n\t\t\t  'nonce'=>md5(uniqid(rand())));\n\t  /* Take care of protocol version 2 parameters */\n\t  if ($use_timestamp) $params['timestamp'] = 1;\n\t  if ($sl) $params['sl'] = $sl;\n\t  if ($timeout) $params['timeout'] = $timeout;\n\t  ksort($params);\n\t  $parameters = '';\n\t  foreach($params as $p=>$v) $parameters .= \"&\" . $p . \"=\" . $v;\n\t  $parameters = ltrim($parameters, \"&\");\n\t  \n\t  /* Generate signature. */\n\t  if($this->_key <> \"\") {\n\t    $signature = base64_encode(hash_hmac('sha1', $parameters,\n\t\t\t\t\t\t $this->_key, true));\n\t    $signature = preg_replace('/\\+/', '%2B', $signature);\n\t    $parameters .= '&h=' . $signature;\n\t  }\n\n\t  /* Generate and prepare request. */\n\t  $this->_lastquery = null;\n\t  $this->_retries = 0;\n\t  $this->URLreset();\n\n\t  $mh = curl_multi_init();\n\t  $ch = array();\n\t  $retries = array();\n\t  while($URLpart=$this->getNextURLpart()) \n\t    {\n\t      $query = $URLpart . \"?\" . $parameters;\n\n\t      if ($this->_lastquery) { $this->_lastquery .= \" \"; }\n\t      $this->_lastquery .= $query;\n\t      \n\t      $handle = $this->_make_curl_handle($query, $timeout);\n\t      curl_multi_add_handle($mh, $handle);\n\t      \n\t      $ch[(int)$handle] = $handle;\n\t      $retries[$query] = 0;\n\t    }\n\n\t  /* Execute and read request. */\n\t  $this->_response=null;\n\t  $replay=False;\n\t  $valid=False;\n\t  do {\n\t    /* Let curl do its work. */\n\t    while (($mrc = curl_multi_exec($mh, $active))\n\t\t   == CURLM_CALL_MULTI_PERFORM) {\n\t      curl_multi_select($mh);\n\t    }\n\n\t    while ($info = curl_multi_info_read($mh)) {\n\t      $cinfo = curl_getinfo ($info['handle']);\n\t      if ($info['result'] == CURLE_OK) {\n\t\t/* We have a complete response from one server. */\n\n\t\t$str = curl_multi_getcontent($info['handle']);\n\t\t\n\t\tif ($wait_for_all) { # Better debug info\n\t\t  $this->_response .= 'URL=' . $cinfo['url'] . ' HTTP_CODE='\n\t\t    . $cinfo['http_code'] . \"\\n\"\n\t\t    . $str . \"\\n\";\n\t\t}\n\n\t\tif (preg_match(\"/status=([a-zA-Z0-9_]+)/\", $str, $out)) {\n\t\t  $status = $out[1];\n\n\t\t  /* \n\t\t   * There are 3 cases.\n\t\t   *\n\t\t   * 1. OTP or Nonce values doesn't match - ignore\n\t\t   * response.\n\t\t   *\n\t\t   * 2. We have a HMAC key.  If signature is invalid -\n\t\t   * ignore response.  Return if status=OK or\n\t\t   * status=REPLAYED_OTP.\n\t\t   *\n\t\t   * 3. Return if status=OK or status=REPLAYED_OTP.\n\t\t   */\n\t\t  if (!preg_match(\"/otp=\".$params['otp'].\"/\", $str) ||\n\t\t      !preg_match(\"/nonce=\".$params['nonce'].\"/\", $str)) {\n\t\t    /* Case 1. Ignore response. */\n\t\t  } \n\t\t  elseif ($this->_key <> \"\") {\n\t\t    /* Case 2. Verify signature first */\n\t\t    $rows = explode(\"\\r\\n\", trim($str));\n\t\t    $response=array();\n\t\t\tforeach ($rows as $key => $val) {\n\t\t      /* = is also used in BASE64 encoding so we only replace the first = by # which is not used in BASE64 */\n\t\t      $val = preg_replace('/=/', '#', $val, 1);\n\t\t      $row = explode(\"#\", $val);\n\t\t      $response[$row[0]] = $row[1];\n\t\t    }\n\t\t    \n\t\t    $parameters=array('nonce','otp', 'sessioncounter', 'sessionuse', 'sl', 'status', 't', 'timeout', 'timestamp');\n\t\t    sort($parameters);\n\t\t    $check=Null;\n\t\t    foreach ($parameters as $param) {\n\t\t      if (array_key_exists($param, $response)) {\n\t\t\tif ($check) $check = $check . '&';\n\t\t\t$check = $check . $param . '=' . $response[$param];\n\t\t      }\n\t\t    }\n\n\t\t    $checksignature =\n\t\t      base64_encode(hash_hmac('sha1', utf8_encode($check),\n\t\t\t\t\t      $this->_key, true));\n\n\t\t    if($response['h'] == $checksignature) {\n\t\t      if ($status == 'REPLAYED_OTP') {\n\t\t\tif (!$wait_for_all) { $this->_response = $str; }\n\t\t\t$replay=True;\n\t\t      } \n\t\t      if ($status == 'OK') {\n\t\t\tif (!$wait_for_all) { $this->_response = $str; }\n\t\t\t$valid=True;\n\t\t      }\n\t\t    }\n\t\t  } else {\n\t\t    /* Case 3. We check the status directly */\n\t\t    if ($status == 'REPLAYED_OTP') {\n\t\t      if (!$wait_for_all) { $this->_response = $str; }\n\t\t      $replay=True;\n\t\t    } \n\t\t    if ($status == 'OK') {\n\t\t      if (!$wait_for_all) { $this->_response = $str; }\n\t\t      $valid=True;\n\t\t    }\n\t\t  }\n\t\t}\n\t\tif (!$wait_for_all && ($valid || $replay))\n\t\t  {\n\t\t    /* We have status=OK or status=REPLAYED_OTP, return. */\n\t\t    foreach ($ch as $h) {\n\t\t      curl_multi_remove_handle($mh, $h);\n\t\t      curl_close($h);\n\t\t    }\n\t\t    curl_multi_close($mh);\n\t\t    if ($replay) return PEAR::raiseError('REPLAYED_OTP');\n\t\t    if ($valid) return true;\n\t\t    return PEAR::raiseError($status);\n\t\t  }\n\t      } else {\n\t\t/* Some kind of error, but def. not a 200 response */\n\t\t/* No status= in response body */\n\t\t$http_status_code = (int)$cinfo['http_code'];\n\t\t$query = $cinfo['url'];\n\t\tif ($http_status_code == 400 ||\n\t\t    ($http_status_code >= 500 && $http_status_code < 600)) {\n\t\t  /* maybe retry */\n\t\t  if ($retries[$query] < $max_retries) {\n\t\t    $retries[$query]++;  // for this server\n\t\t    $this->_retries++;   // for this validation attempt\n\n\t\t    $newhandle = $this->_make_curl_handle($query, $timeout);\n\n\t\t    curl_multi_add_handle($mh, $newhandle);\n\t\t    $ch[(int)$newhandle] = $newhandle;\n\n\t\t    // Loop back up to curl_multi_exec, even if this\n\t\t    // was the last handle and curl_multi_exec _was_\n\t\t    // no longer active, it's active again now we've\n\t\t    // added a retry.\n\t\t    $active = true;\n\t\t  }\n\t\t}\n\t      }\n\t      /* Done with this handle */\n\t      curl_multi_remove_handle($mh, $info['handle']);\n\t      curl_close($info['handle']);\n\t      unset ($ch[(int)$info['handle']]);\n\t    }\n\t  } while ($active);\n\n\t  /* Typically this is only reached for wait_for_all=true or\n\t   * when the timeout is reached and there is no\n\t   * OK/REPLAYED_REQUEST answer (think firewall).\n\t   */\n\n\t  foreach ($ch as $h) {\n\t    curl_multi_remove_handle ($mh, $h);\n\t    curl_close ($h);\n\t  }\n\t  curl_multi_close ($mh);\n\t  \n\t  if ($replay) return PEAR::raiseError('REPLAYED_OTP');\n\t  if ($valid) return true;\n\t  return PEAR::raiseError('NO_VALID_ANSWER');\n\t}\n}\n?>\n"
  },
  {
    "path": "data/web/inc/lib/array_merge_real.php",
    "content": "<?php\n\nfunction array_merge_real()\n{\n    $output = [];\n    foreach (func_get_args() as $array) {\n        foreach ($array as $key => $value) {\n            $output[$key] = isset($output[$key]) ?\n        array_merge($output[$key], $value) : $value;\n        }\n    }\n\n    return $output;\n}\n"
  },
  {
    "path": "data/web/inc/lib/composer.json",
    "content": "{\n    \"require\": {\n        \"robthree/twofactorauth\": \"^1.6\",\n        \"phpmailer/phpmailer\": \"^6.1\",\n        \"php-mime-mail-parser/php-mime-mail-parser\": \"^7\",\n        \"soundasleep/html2text\": \"^0.5.0\",\n        \"ddeboer/imap\": \"^1.5\",\n        \"matthiasmullie/minify\": \"^1.3\",\n        \"bshaffer/oauth2-server-php\": \"^1.11\",\n        \"mustangostang/spyc\": \"^0.6.3\",\n        \"directorytree/ldaprecord\": \"^3.3\",\n        \"twig/twig\": \"^3.0\",\n        \"stevenmaguire/oauth2-keycloak\": \"^4.0\",\n        \"league/oauth2-client\": \"^2.7\",\n        \"bacon/bacon-qr-code\": \"^2.0\"\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveDumpable.php",
    "content": "<?php namespace Sieve;\n\ninterface SieveDumpable\n{\n\tfunction dump();\n\tfunction text();\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveException.php",
    "content": "<?php namespace Sieve;\n\nrequire_once('SieveToken.php');\n\nuse Exception;\n\nclass SieveException extends Exception\n{\n    protected $token_;\n\n    public function __construct(SieveToken $token, $arg)\n    {\n        $message = 'undefined sieve exception';\n        $this->token_ = $token;\n\n        if (is_string($arg))\n        {\n            $message = $arg;\n        }\n        else\n        {\n            if (is_array($arg))\n            {\n                $type = SieveToken::typeString(array_shift($arg));\n                foreach($arg as $t)\n                {\n                    $type .= ' or '. SieveToken::typeString($t);\n                }\n            }\n            else\n            {\n                $type = SieveToken::typeString($arg);\n            }\n\n            $tokenType = SieveToken::typeString($token->type);\n            $message = \"$tokenType where $type expected near \". $token->text;\n        }\n\n        parent::__construct('line '. $token->line .\": $message\");\n    }\n\n    public function getLineNo()\n    {\n        return $this->token_->line;\n    }\n\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveKeywordRegistry.php",
    "content": "<?php namespace Sieve;\n\nclass SieveKeywordRegistry\n{\n    protected $registry_ = array();\n    protected $matchTypes_ = array();\n    protected $comparators_ = array();\n    protected $addressParts_ = array();\n    protected $commands_ = array();\n    protected $tests_ = array();\n    protected $arguments_ = array();\n\n    protected static $refcount = 0;\n    protected static $instance = null;\n\n    protected function __construct()\n    {\n        $keywords = simplexml_load_file(dirname(__FILE__) .'/keywords.xml');\n        foreach ($keywords->children() as $keyword)\n        {\n            switch ($keyword->getName())\n            {\n            case 'matchtype':\n                $type =& $this->matchTypes_;\n                break;\n            case 'comparator':\n                $type =& $this->comparators_;\n                break;\n            case 'addresspart':\n                $type =& $this->addressParts_;\n                break;\n            case 'test':\n                $type =& $this->tests_;\n                break;\n            case 'command':\n                $type =& $this->commands_;\n                break;\n            default:\n                trigger_error('Unsupported keyword type \"'. $keyword->getName()\n                    . '\" in file \"keywords/'. basename($file) .'\"');\n                return;\n            }\n\n            $name = (string) $keyword['name'];\n            if (array_key_exists($name, $type))\n                trigger_error(\"redefinition of $type $name - skipping\");\n            else\n                $type[$name] = $keyword->children();\n        }\n\n        foreach (glob(dirname(__FILE__) .'/extensions/*.xml') as $file)\n        {\n            $extension = simplexml_load_file($file);\n            $name = (string) $extension['name'];\n\n            if (array_key_exists($name, $this->registry_))\n            {\n                trigger_error('overwriting extension \"'. $name .'\"');\n            }\n            $this->registry_[$name] = $extension;\n        }\n    }\n\n    public static function get()\n    {\n        if (self::$instance == null)\n        {\n            self::$instance = new SieveKeywordRegistry();\n        }\n\n        self::$refcount++;\n\n        return self::$instance;\n    }\n\n    public function put()\n    {\n        if (--self::$refcount == 0)\n        {\n            self::$instance = null;\n        }\n    }\n\n    public function activate($extension)\n    {\n        if (!isset($this->registry_[$extension]))\n        {\n            return;\n        }\n\n        $xml = $this->registry_[$extension];\n\n        foreach ($xml->children() as $e)\n        {\n            switch ($e->getName())\n            {\n            case 'matchtype':\n                $type =& $this->matchTypes_;\n                break;\n            case 'comparator':\n                $type =& $this->comparators_;\n                break;\n            case 'addresspart':\n                $type =& $this->addressParts_;\n                break;\n            case 'test':\n                $type =& $this->tests_;\n                break;\n            case 'command':\n                $type =& $this->commands_;\n                break;\n            case 'tagged-argument':\n                $xml = $e->parameter[0];\n                $this->arguments_[(string) $xml['name']] = array(\n                    'extends' => (string) $e['extends'],\n                    'rules'   => $xml\n                );\n                continue;\n            default:\n                trigger_error('Unsupported extension type \\''.\n                    $e->getName() .\"' in extension '$extension'\");\n                return;\n            }\n\n            $name = (string) $e['name'];\n            if (!isset($type[$name]) ||\n                (string) $e['overrides'] == 'true')\n            {\n                $type[$name] = $e->children();\n            }\n        }\n    }\n\n    public function isTest($name)\n    {\n        return (isset($this->tests_[$name]) ? true : false);\n    }\n\n    public function isCommand($name)\n    {\n        return (isset($this->commands_[$name]) ? true : false);\n    }\n\n    public function matchtype($name)\n    {\n        if (isset($this->matchTypes_[$name]))\n        {\n            return $this->matchTypes_[$name];\n        }\n        return null;\n    }\n\n    public function addresspart($name)\n    {\n        if (isset($this->addressParts_[$name]))\n        {\n            return $this->addressParts_[$name];\n        }\n        return null;\n    }\n\n    public function comparator($name)\n    {\n        if (isset($this->comparators_[$name]))\n        {\n            return $this->comparators_[$name];\n        }\n        return null;\n    }\n\n    public function test($name)\n    {\n        if (isset($this->tests_[$name]))\n        {\n            return $this->tests_[$name];\n        }\n        return null;\n    }\n\n    public function command($name)\n    {\n        if (isset($this->commands_[$name]))\n        {\n            return $this->commands_[$name];\n        }\n        return null;\n    }\n\n    public function arguments($command)\n    {\n        $res = array();\n        foreach ($this->arguments_ as $arg)\n        {\n            if (preg_match('/'.$arg['extends'].'/', $command))\n                array_push($res, $arg['rules']);\n        }\n        return $res;\n    }\n\n    public function argument($name)\n    {\n        if (isset($this->arguments_[$name]))\n        {\n            return $this->arguments_[$name]['rules'];\n        }\n        return null;\n    }\n\n    public function requireStrings()\n    {\n        return array_keys($this->registry_);\n    }\n    public function matchTypes()\n    {\n        return array_keys($this->matchTypes_);\n    }\n    public function comparators()\n    {\n        return array_keys($this->comparators_);\n    }\n    public function addressParts()\n    {\n        return array_keys($this->addressParts_);\n    }\n    public function tests()\n    {\n        return array_keys($this->tests_);\n    }\n    public function commands()\n    {\n        return array_keys($this->commands_);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveParser.php",
    "content": "<?php namespace Sieve;\n\ninclude_once 'SieveTree.php';\ninclude_once 'SieveScanner.php';\ninclude_once 'SieveSemantics.php';\ninclude_once 'SieveException.php';\n\nclass SieveParser\n{\n    protected $scanner_;\n    protected $script_;\n    protected $tree_;\n    protected $status_;\n\n    public function __construct($script = null)\n    {\n        if (isset($script))\n            $this->parse($script);\n    }\n\n    public function GetParseTree()\n    {\n        return $this->tree_;\n    }\n\n    public function dumpParseTree()\n    {\n        return $this->tree_->dump();\n    }\n\n    public function getScriptText()\n    {\n        return $this->tree_->getText();\n    }\n\n    protected function getPrevToken_($parent_id)\n    {\n        $childs = $this->tree_->getChilds($parent_id);\n\n        for ($i = count($childs); $i > 0; --$i)\n        {\n            $prev = $this->tree_->getNode($childs[$i-1]);\n            if ($prev->is(SieveToken::Comment|SieveToken::Whitespace))\n                continue;\n\n            // use command owning a block or list instead of previous\n            if ($prev->is(SieveToken::BlockStart|SieveToken::Comma|SieveToken::LeftParenthesis))\n                $prev = $this->tree_->getNode($parent_id);\n\n            return $prev;\n        }\n\n        return $this->tree_->getNode($parent_id);\n    }\n\n    /*******************************************************************************\n     * methods for recursive descent start below\n     */\n    public function passthroughWhitespaceComment($token)\n    {\n        return 0;\n    }\n\n    public function passthroughFunction($token)\n    {\n        $this->tree_->addChild($token);\n    }\n\n    public function parse($script)\n    {\n        $this->script_ = $script;\n\n        $this->scanner_ = new SieveScanner($this->script_);\n\n        // Define what happens with passthrough tokens like whitespacs and comments\n        $this->scanner_->setPassthroughFunc(\n            array(\n                $this, 'passthroughWhitespaceComment'\n            )\n        );\n\n        $this->tree_ = new SieveTree('tree');\n\n        $this->commands_($this->tree_->getRoot());\n\n        if (!$this->scanner_->nextTokenIs(SieveToken::ScriptEnd)) {\n            $token = $this->scanner_->nextToken();\n            throw new SieveException($token, SieveToken::ScriptEnd);\n        }\n    }\n\n    protected function commands_($parent_id)\n    {\n        while (true)\n        {\n            if (!$this->scanner_->nextTokenIs(SieveToken::Identifier))\n                break;\n\n            // Get and check a command token\n            $token = $this->scanner_->nextToken();\n            $semantics = new SieveSemantics($token, $this->getPrevToken_($parent_id));\n\n            // Process eventual arguments\n            $this_node = $this->tree_->addChildTo($parent_id, $token);\n            $this->arguments_($this_node, $semantics);\n\n            $token = $this->scanner_->nextToken();\n            if (!$token->is(SieveToken::Semicolon))\n            {\n                // TODO: check if/when semcheck is needed here\n                $semantics->validateToken($token);\n\n                if ($token->is(SieveToken::BlockStart))\n                {\n                    $this->tree_->addChildTo($this_node, $token);\n                    $this->block_($this_node, $semantics);\n                    continue;\n                }\n\n                throw new SieveException($token, SieveToken::Semicolon);\n            }\n\n            $semantics->done($token);\n            $this->tree_->addChildTo($this_node, $token);\n        }\n    }\n\n    protected function arguments_($parent_id, &$semantics)\n    {\n        while (true)\n        {\n            if ($this->scanner_->nextTokenIs(SieveToken::Number|SieveToken::Tag))\n            {\n                // Check if semantics allow a number or tag\n                $token = $this->scanner_->nextToken();\n                $semantics->validateToken($token);\n                $this->tree_->addChildTo($parent_id, $token);\n            }\n            else if ($this->scanner_->nextTokenIs(SieveToken::StringList))\n            {\n                $this->stringlist_($parent_id, $semantics);\n            }\n            else\n            {\n                break;\n            }\n        }\n\n        if ($this->scanner_->nextTokenIs(SieveToken::TestList))\n        {\n            $this->testlist_($parent_id, $semantics);\n        }\n    }\n\n    protected function stringlist_($parent_id, &$semantics)\n    {\n        if (!$this->scanner_->nextTokenIs(SieveToken::LeftBracket))\n        {\n            $this->string_($parent_id, $semantics);\n            return;\n        }\n\n        $token = $this->scanner_->nextToken();\n        $semantics->startStringList($token);\n        $this->tree_->addChildTo($parent_id, $token);\n        \n        if($this->scanner_->nextTokenIs(SieveToken::RightBracket)) {\n            //allow empty lists\n            $token = $this->scanner_->nextToken();\n            $this->tree_->addChildTo($parent_id, $token);\n            $semantics->endStringList();\n            return;\n        }\n\n        do\n        {\n            $this->string_($parent_id, $semantics);\n            $token = $this->scanner_->nextToken();\n\n            if (!$token->is(SieveToken::Comma|SieveToken::RightBracket))\n                throw new SieveException($token, array(SieveToken::Comma, SieveToken::RightBracket));\n\n            if ($token->is(SieveToken::Comma))\n                $semantics->continueStringList();\n\n            $this->tree_->addChildTo($parent_id, $token);\n        }\n        while (!$token->is(SieveToken::RightBracket));\n\n        $semantics->endStringList();\n    }\n\n    protected function string_($parent_id, &$semantics)\n    {\n        $token = $this->scanner_->nextToken();\n        $semantics->validateToken($token);\n        $this->tree_->addChildTo($parent_id, $token);\n    }\n\n    protected function testlist_($parent_id, &$semantics)\n    {\n        if (!$this->scanner_->nextTokenIs(SieveToken::LeftParenthesis))\n        {\n            $this->test_($parent_id, $semantics);\n            return;\n        }\n\n        $token = $this->scanner_->nextToken();\n        $semantics->validateToken($token);\n        $this->tree_->addChildTo($parent_id, $token);\n\n        do\n        {\n            $this->test_($parent_id, $semantics);\n\n            $token = $this->scanner_->nextToken();\n            if (!$token->is(SieveToken::Comma|SieveToken::RightParenthesis))\n            {\n                throw new SieveException($token, array(SieveToken::Comma, SieveToken::RightParenthesis));\n            }\n            $this->tree_->addChildTo($parent_id, $token);\n        }\n        while (!$token->is(SieveToken::RightParenthesis));\n    }\n\n    protected function test_($parent_id, &$semantics)\n    {\n        // Check if semantics allow an identifier\n        $token = $this->scanner_->nextToken();\n        $semantics->validateToken($token);\n\n        // Get semantics for this test command\n        $this_semantics = new SieveSemantics($token, $this->getPrevToken_($parent_id));\n        $this_node = $this->tree_->addChildTo($parent_id, $token);\n\n        // Consume eventual argument tokens\n        $this->arguments_($this_node, $this_semantics);\n\n        // Check that all required arguments were there\n        $token = $this->scanner_->peekNextToken();\n        $this_semantics->done($token);\n    }\n\n    protected function block_($parent_id, &$semantics)\n    {\n        $this->commands_($parent_id, $semantics);\n\n        $token = $this->scanner_->nextToken();\n        if (!$token->is(SieveToken::BlockEnd))\n        {\n            throw new SieveException($token, SieveToken::BlockEnd);\n        }\n        $this->tree_->addChildTo($parent_id, $token);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveScanner.php",
    "content": "<?php namespace Sieve;\n\ninclude_once('SieveToken.php');\n\nclass SieveScanner\n{\n    public function __construct(&$script)\n    {\n        if ($script === null)\n            return;\n\n        $this->tokenize($script);\n    }\n\n    public function setPassthroughFunc($callback)\n    {\n        if ($callback == null || is_callable($callback))\n            $this->ptFn_ = $callback;\n    }\n\n    public function tokenize(&$script)\n    {\n        $pos = 0;\n        $line = 1;\n\n        $scriptLength = mb_strlen($script);\n\n        $unprocessedScript = $script;\n\n\n        //create one regex to find the right match\n        //avoids looping over all possible tokens: increases performance\n        $nameToType = [];\n        $regex = [];\n        // chr(65) == 'A'\n        $i = 65;\n\n        foreach ($this->tokenMatch_ as $type => $subregex) {\n            $nameToType[chr($i)] = $type;\n            $regex[] = \"(?P<\". chr($i) . \">^$subregex)\";\n            $i++;\n        }\n\n        $regex = '/' . join('|', $regex) . '/';\n\n        while ($pos < $scriptLength)\n        {\n            if (preg_match($regex, $unprocessedScript, $match)) {\n\n                // only keep the group that match and we only want matches with group names\n                // we can use the group name to find the token type using nameToType\n                $filterMatch = array_filter(array_filter($match), 'is_string', ARRAY_FILTER_USE_KEY);\n\n                // the first element in filterMatch will contain the matched group and the key will be the name\n                $type = $nameToType[key($filterMatch)];\n                $currentMatch = current($filterMatch);\n\n                //create the token\n                $token = new SieveToken($type, $currentMatch, $line);\n                $this->tokens_[] = $token;\n\n                if ($type == SieveToken::Unknown)\n                    return;\n\n                // just remove the part that we parsed: don't extract the new substring using script length\n                // as mb_strlen is \\theta(pos)  (it's linear in the position)\n                $matchLength = mb_strlen($currentMatch);\n                $unprocessedScript = mb_substr($unprocessedScript, $matchLength);\n\n                $pos += $matchLength;\n                $line += mb_substr_count($currentMatch, \"\\n\");\n            } else {\n                $this->tokens_[] = new SieveToken(SieveToken::Unknown, '', $line);\n                return;\n            }\n\n        }\n\n        $this->tokens_[] = new SieveToken(SieveToken::ScriptEnd, '', $line);\n    }\n\n    public function nextTokenIs($type)\n    {\n        return $this->peekNextToken()->is($type);\n    }\n\n    public function peekNextToken()\n    {\n        $offset = 0;\n        do {\n            $next = $this->tokens_[$this->tokenPos_ + $offset++];\n        } while ($next->is(SieveToken::Comment|SieveToken::Whitespace));\n\n        return $next;\n    }\n\n    public function nextToken()\n    {\n        $token = $this->tokens_[$this->tokenPos_++];\n\n        while ($token->is(SieveToken::Comment|SieveToken::Whitespace))\n        {\n            if ($this->ptFn_ != null)\n                call_user_func($this->ptFn_, $token);\n\n            $token = $this->tokens_[$this->tokenPos_++];\n        }\n\n        return $token;\n    }\n\n    protected $ptFn_ = null;\n    protected $tokenPos_ = 0;\n    protected $tokens_ = array();\n    protected $tokenMatch_ = array (\n        SieveToken::LeftBracket       =>  '\\[',\n        SieveToken::RightBracket      =>  '\\]',\n        SieveToken::BlockStart        =>  '\\{',\n        SieveToken::BlockEnd          =>  '\\}',\n        SieveToken::LeftParenthesis   =>  '\\(',\n        SieveToken::RightParenthesis  =>  '\\)',\n        SieveToken::Comma             =>  ',',\n        SieveToken::Semicolon         =>  ';',\n        SieveToken::Whitespace        =>  '[ \\r\\n\\t]+',\n        SieveToken::Tag               =>  ':[[:alpha:]_][[:alnum:]_]*(?=\\b)',\n        /*\n        \"                           # match a quotation mark\n        (                           # start matching parts that include an escaped quotation mark\n        ([^\"]*[^\"\\\\\\\\])             # match a string without quotation marks and not ending with a backlash\n        ?                           # this also includes the empty string\n        (\\\\\\\\\\\\\\\\)*                 # match any groups of even number of backslashes\n                                    # (thus the character after these groups are not escaped)\n        \\\\\\\\\"                       # match an escaped quotation mark\n        )*                          # accept any number of strings that end with an escaped quotation mark\n        [^\"]*                       # accept any trailing part that does not contain any quotation marks\n        \"                           # end of the quoted string\n        */\n        SieveToken::QuotedString      =>  '\"(([^\"]*[^\"\\\\\\\\])?(\\\\\\\\\\\\\\\\)*\\\\\\\\\")*[^\"]*\"',\n        SieveToken::Number            =>  '[[:digit:]]+(?:[KMG])?(?=\\b)',\n        SieveToken::Comment           =>  '(?:\\/\\*(?:[^\\*]|\\*(?=[^\\/]))*\\*\\/|#[^\\r\\n]*\\r?(\\n|$))',\n        SieveToken::MultilineString   =>  'text:[ \\t]*(?:#[^\\r\\n]*)?\\r?\\n(\\.[^\\r\\n]+\\r?\\n|[^\\.][^\\r\\n]*\\r?\\n)*\\.\\r?(\\n|$)',\n        SieveToken::Identifier        =>  '[[:alpha:]_][[:alnum:]_]*(?=\\b)',\n        SieveToken::Unknown           =>  '[^ \\r\\n\\t]+'\n    );\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveScript.php",
    "content": "<?php namespace Sieve;\n\nclass SieveScript\n{\n    // TODO: implement\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveSemantics.php",
    "content": "<?php namespace Sieve;\n\nrequire_once('SieveKeywordRegistry.php');\nrequire_once('SieveToken.php');\nrequire_once('SieveException.php');\n\nclass SieveSemantics\n{\n    protected static $requiredExtensions_ = array();\n\n    protected $comparator_;\n    protected $matchType_;\n    protected $addressPart_;\n    protected $tags_ = array();\n    protected $arguments_;\n    protected $deps_ = array();\n    protected $followupToken_;\n\n    public function __construct($token, $prevToken)\n    {\n        $this->registry_ = SieveKeywordRegistry::get();\n        $command = strtolower($token->text);\n\n        // Check the registry for $command\n        if ($this->registry_->isCommand($command))\n        {\n            $xml = $this->registry_->command($command);\n            $this->arguments_ = $this->makeArguments_($xml);\n            $this->followupToken_ = SieveToken::Semicolon;\n        }\n        else if ($this->registry_->isTest($command))\n        {\n            $xml = $this->registry_->test($command);\n            $this->arguments_ = $this->makeArguments_($xml);\n            $this->followupToken_ = SieveToken::BlockStart;\n        }\n        else\n        {\n            throw new SieveException($token, 'unknown command '. $command);\n        }\n\n        // Check if command may appear at this position within the script\n        if ($this->registry_->isTest($command))\n        {\n            if (is_null($prevToken))\n                throw new SieveException($token, $command .' may not appear as first command');\n\n            if (!preg_match('/^(if|elsif|anyof|allof|not)$/i', $prevToken->text))\n                throw new SieveException($token, $command .' may not appear after '. $prevToken->text);\n        }\n        else if (isset($prevToken))\n        {\n            switch ($command)\n            {\n            case 'require':\n                $valid_after = 'require';\n                break;\n            case 'elsif':\n            case 'else':\n                $valid_after = '(if|elsif)';\n                break;\n            default:\n                $valid_after = $this->commandsRegex_();\n            }\n\n            if (!preg_match('/^'. $valid_after .'$/i', $prevToken->text))\n                throw new SieveException($token, $command .' may not appear after '. $prevToken->text);\n        }\n\n        // Check for extension arguments to add to the command\n        foreach ($this->registry_->arguments($command) as $arg)\n        {\n            switch ((string) $arg['type'])\n            {\n            case 'tag':\n                array_unshift($this->arguments_, array(\n                    'type'       => SieveToken::Tag,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->regex_($arg),\n                    'call'       => 'tagHook_',\n                    'name'       => $this->name_($arg),\n                    'subArgs'    => $this->makeArguments_($arg->children())\n                ));\n                break;\n            }\n        }\n    }\n\n    public function __destruct()\n    {\n        $this->registry_->put();\n    }\n\n    // TODO: the *Regex functions could possibly also be static properties\n    protected function requireStringsRegex_()\n    {\n        return '('. implode('|', $this->registry_->requireStrings()) .')';\n    }\n\n    protected function matchTypeRegex_()\n    {\n        return '('. implode('|', $this->registry_->matchTypes()) .')';\n    }\n\n    protected function addressPartRegex_()\n    {\n        return '('. implode('|', $this->registry_->addressParts()) .')';\n    }\n\n    protected function commandsRegex_()\n    {\n        return '('. implode('|', $this->registry_->commands()) .')';\n    }\n\n    protected function testsRegex_()\n    {\n        return '('. implode('|', $this->registry_->tests()) .')';\n    }\n\n    protected function comparatorRegex_()\n    {\n        return '('. implode('|', $this->registry_->comparators()) .')';\n    }\n\n    protected function occurrence_($arg)\n    {\n        if (isset($arg['occurrence']))\n        {\n            switch ((string) $arg['occurrence'])\n            {\n            case 'optional':\n                return '?';\n            case 'any':\n                return '*';\n            case 'some':\n                return '+';\n            }\n        }\n        return '1';\n    }\n\n    protected function name_($arg)\n    {\n        if (isset($arg['name']))\n        {\n            return (string) $arg['name'];\n        }\n        return (string) $arg['type'];\n    }\n\n    protected function regex_($arg)\n    {\n        if (isset($arg['regex']))\n        {\n            return (string) $arg['regex'];\n        }\n        return '.*';\n    }\n\n    protected function case_($arg)\n    {\n        if (isset($arg['case']))\n        {\n            return (string) $arg['case'];\n        }\n        return 'adhere';\n    }\n\n    protected function follows_($arg)\n    {\n        if (isset($arg['follows']))\n        {\n            return (string) $arg['follows'];\n        }\n        return '.*';\n    }\n\n    protected function makeValue_($arg)\n    {\n        if (isset($arg->value))\n        {\n            $res = $this->makeArguments_($arg->value);\n            return array_shift($res);\n        }\n        return null;\n    }\n\n    /**\n     * Convert an extension (test) commands parameters from XML to\n     * a PHP array the {@see Semantics} class understands.\n     * @param array(SimpleXMLElement) $parameters\n     * @return array\n     */\n    protected function makeArguments_($parameters)\n    {\n        $arguments = array();\n\n        foreach ($parameters as $arg)\n        {\n            // Ignore anything not a <parameter>\n            if ($arg->getName() != 'parameter')\n                continue;\n\n            switch ((string) $arg['type'])\n            {\n            case 'addresspart':\n                array_push($arguments, array(\n                    'type'       => SieveToken::Tag,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->addressPartRegex_(),\n                    'call'       => 'addressPartHook_',\n                    'name'       => 'address part',\n                    'subArgs'    => $this->makeArguments_($arg)\n                ));\n                break;\n\n            case 'block':\n                array_push($arguments, array(\n                    'type'       => SieveToken::BlockStart,\n                    'occurrence' => '1',\n                    'regex'      => '{',\n                    'name'       => 'block',\n                    'subArgs'    => $this->makeArguments_($arg)\n                ));\n                break;\n\n            case 'comparator':\n                array_push($arguments, array(\n                    'type'       => SieveToken::Tag,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => 'comparator',\n                    'name'       => 'comparator',\n                    'subArgs'    => array( array(\n                        'type'       => SieveToken::String,\n                        'occurrence' => '1',\n                        'call'       => 'comparatorHook_',\n                        'case'       => 'adhere',\n                        'regex'      => $this->comparatorRegex_(),\n                        'name'       => 'comparator string',\n                        'follows'    => 'comparator'\n                    ))\n                ));\n                break;\n\n            case 'matchtype':\n                array_push($arguments, array(\n                    'type'       => SieveToken::Tag,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->matchTypeRegex_(),\n                    'call'       => 'matchTypeHook_',\n                    'name'       => 'match type',\n                    'subArgs'    => $this->makeArguments_($arg)\n                ));\n                break;\n\n            case 'number':\n                array_push($arguments, array(\n                    'type'       => SieveToken::Number,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->regex_($arg),\n                    'name'       => $this->name_($arg),\n                    'follows'    => $this->follows_($arg)\n                ));\n                break;\n\n            case 'requirestrings':\n                array_push($arguments, array(\n                    'type'       => SieveToken::StringList,\n                    'occurrence' => $this->occurrence_($arg),\n                    'call'       => 'setRequire_',\n                    'case'       => 'adhere',\n                    'regex'      => $this->requireStringsRegex_(),\n                    'name'       => $this->name_($arg)\n                ));\n                break;\n\n            case 'string':\n                array_push($arguments, array(\n                    'type'       => SieveToken::String,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->regex_($arg),\n                    'case'       => $this->case_($arg),\n                    'name'       => $this->name_($arg),\n                    'follows'    => $this->follows_($arg)\n                ));\n                break;\n\n            case 'stringlist':\n                array_push($arguments, array(\n                    'type'       => SieveToken::StringList,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->regex_($arg),\n                    'case'       => $this->case_($arg),\n                    'name'       => $this->name_($arg),\n                    'follows'    => $this->follows_($arg)\n                ));\n                break;\n\n            case 'tag':\n                array_push($arguments, array(\n                    'type'       => SieveToken::Tag,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->regex_($arg),\n                    'call'       => 'tagHook_',\n                    'name'       => $this->name_($arg),\n                    'subArgs'    => $this->makeArguments_($arg->children()),\n                    'follows'    => $this->follows_($arg)\n                ));\n                break;\n\n            case 'test':\n                array_push($arguments, array(\n                    'type'       => SieveToken::Identifier,\n                    'occurrence' => $this->occurrence_($arg),\n                    'regex'      => $this->testsRegex_(),\n                    'name'       => $this->name_($arg),\n                    'subArgs'    => $this->makeArguments_($arg->children())\n                ));\n                break;\n\n            case 'testlist':\n                array_push($arguments, array(\n                    'type'       => SieveToken::LeftParenthesis,\n                    'occurrence' => '1',\n                    'regex'      => '\\(',\n                    'name'       => $this->name_($arg),\n                    'subArgs'    => null\n                ));\n                array_push($arguments, array(\n                    'type'       => SieveToken::Identifier,\n                    'occurrence' => '+',\n                    'regex'      => $this->testsRegex_(),\n                    'name'       => $this->name_($arg),\n                    'subArgs'    => $this->makeArguments_($arg->children())\n                ));\n                break;\n            }\n        }\n\n        return $arguments;\n    }\n\n    /**\n     * Add argument(s) expected / allowed to appear next.\n     * @param array $value\n     */\n    protected function addArguments_($identifier, $subArgs)\n    {\n        for ($i = count($subArgs); $i > 0; $i--)\n        {\n            $arg = $subArgs[$i-1];\n            if (preg_match('/^'. $arg['follows'] .'$/si', $identifier))\n                array_unshift($this->arguments_, $arg);\n        }\n    }\n\n    /**\n     * Add dependency that is expected to be fullfilled when parsing\n     * of the current command is {@see done}.\n     * @param array $dependency\n     */\n    protected function addDependency_($type, $name, $dependencies)\n    {\n        foreach ($dependencies as $d)\n        {\n            array_push($this->deps_, array(\n                'o_type' => $type,\n                'o_name' => $name,\n                'type'   => $d['type'],\n                'name'   => $d['name'],\n                'regex'  => $d['regex']\n            ));\n        }\n    }\n\n    protected function invoke_($token, $func, $arg = array())\n    {\n        if (!is_array($arg))\n            $arg = array($arg);\n\n        $err = call_user_func_array(array(&$this, $func), $arg);\n\n        if ($err)\n            throw new SieveException($token, $err);\n    }\n\n    protected function setRequire_($extension)\n    {\n        array_push(self::$requiredExtensions_, $extension);\n        $this->registry_->activate($extension);\n    }\n\n    /**\n     * Hook function that is called after a address part match was found\n     * in a command. The kind of address part is remembered in case it's\n     * needed later {@see done}. For address parts from a extension\n     * dependency information and valid values are looked up as well.\n     * @param string $addresspart\n     */\n    protected function addressPartHook_($addresspart)\n    {\n        $this->addressPart_ = $addresspart;\n        $xml = $this->registry_->addresspart($this->addressPart_);\n\n        if (isset($xml))\n        {\n            // Add possible value and dependancy\n            $this->addArguments_($this->addressPart_, $this->makeArguments_($xml));\n            $this->addDependency_('address part', $this->addressPart_, $xml->requires);\n        }\n    }\n\n    /**\n     * Hook function that is called after a match type was found in a\n     * command. The kind of match type is remembered in case it's\n     * needed later {@see done}. For a match type from extensions\n     * dependency information and valid values are looked up as well.\n     * @param string $matchtype\n     */\n    protected function matchTypeHook_($matchtype)\n    {\n        $this->matchType_ = $matchtype;\n        $xml = $this->registry_->matchtype($this->matchType_);\n\n        if (isset($xml))\n        {\n            // Add possible value and dependancy\n            $this->addArguments_($this->matchType_, $this->makeArguments_($xml));\n            $this->addDependency_('match type', $this->matchType_, $xml->requires);\n        }\n    }\n\n    /**\n     * Hook function that is called after a comparator was found in\n     * a command. The comparator is remembered in case it's needed for\n     * comparsion later {@see done}. For a comparator from extensions\n     * dependency information is looked up as well.\n     * @param string $comparator\n     */\n    protected function comparatorHook_($comparator)\n    {\n        $this->comparator_ = $comparator;\n        $xml = $this->registry_->comparator($this->comparator_);\n\n        if (isset($xml))\n        {\n            // Add possible dependancy\n            $this->addDependency_('comparator', $this->comparator_, $xml->requires);\n        }\n    }\n\n    /**\n     * Hook function that is called after a tag was found in\n     * a command. The tag is remembered in case it's needed for\n     * comparsion later {@see done}. For a tags from extensions\n     * dependency information is looked up as well.\n     * @param string $tag\n     */\n    protected function tagHook_($tag)\n    {\n        array_push($this->tags_, $tag);\n        $xml = $this->registry_->argument($tag);\n\n        // Add possible dependancies\n        if (isset($xml))\n            $this->addDependency_('tag', $tag, $xml->requires);\n    }\n\n    protected function validType_($token)\n    {\n        foreach ($this->arguments_ as $arg)\n        {\n            if ($arg['occurrence'] == '0')\n            {\n                array_shift($this->arguments_);\n                continue;\n            }\n\n            if ($token->is($arg['type']))\n                return;\n\n            // Is the argument required\n            if ($arg['occurrence'] != '?' && $arg['occurrence'] != '*')\n                throw new SieveException($token, $arg['type']);\n\n            array_shift($this->arguments_);\n        }\n\n        // Check if command expects any (more) arguments\n        if (empty($this->arguments_))\n            throw new SieveException($token, $this->followupToken_);\n\n        throw new SieveException($token, 'unexpected '. SieveToken::typeString($token->type) .' '. $token->text);\n    }\n\n    public function startStringList($token)\n    {\n        $this->validType_($token);\n        $this->arguments_[0]['type'] = SieveToken::String;\n        $this->arguments_[0]['occurrence'] = '+';\n    }\n\n    public function continueStringList()\n    {\n        $this->arguments_[0]['occurrence'] = '+';\n    }\n\n    public function endStringList()\n    {\n        array_shift($this->arguments_);\n    }\n\n    public function validateToken($token)\n    {\n        // Make sure the argument has a valid type\n        $this->validType_($token);\n\n        foreach ($this->arguments_ as &$arg)\n        {\n            // Build regular expression according to argument type\n            switch ($arg['type'])\n            {\n            case SieveToken::String:\n            case SieveToken::StringList:\n                $regex = '/^(?:text:[^\\n]*\\n(?P<one>'. $arg['regex'] .')\\.\\r?\\n?|\"(?P<two>'. $arg['regex'] .')\")$/'\n                       . ($arg['case'] == 'ignore' ? 'si' : 's');\n                break;\n            case SieveToken::Tag:\n                $regex = '/^:(?P<one>'. $arg['regex'] .')$/si';\n                break;\n            default:\n                $regex = '/^(?P<one>'. $arg['regex'] .')$/si';\n            }\n\n            if (preg_match($regex, $token->text, $match))\n            {\n                $text = ($match['one'] ? $match['one'] : $match['two']);\n\n                // Add argument(s) that may now appear after this one\n                if (isset($arg['subArgs']))\n                    $this->addArguments_($text, $arg['subArgs']);\n\n                // Call extra processing function if defined\n                if (isset($arg['call']))\n                    $this->invoke_($token, $arg['call'], $text);\n\n                // Check if a possible value of this argument may occur\n                if ($arg['occurrence'] == '?' || $arg['occurrence'] == '1')\n                {\n                    $arg['occurrence'] = '0';\n                }\n                else if ($arg['occurrence'] == '+')\n                {\n                    $arg['occurrence'] = '*';\n                }\n\n                return;\n            }\n\n            if ($token->is($arg['type']) && $arg['occurrence'] == 1)\n            {\n                throw new SieveException($token,\n                    SieveToken::typeString($token->type) .\" $token->text where \". $arg['name'] .' expected');\n            }\n        }\n\n        throw new SieveException($token, 'unexpected '. SieveToken::typeString($token->type) .' '. $token->text);\n    }\n\n    public function done($token)\n    {\n        // Check if there are required arguments left\n        foreach ($this->arguments_ as $arg)\n        {\n            if ($arg['occurrence'] == '+' || $arg['occurrence'] == '1')\n                throw new SieveException($token, $arg['type']);\n        }\n\n        // Check if the command depends on use of a certain tag\n        foreach ($this->deps_ as $d)\n        {\n            switch ($d['type'])\n            {\n            case 'addresspart':\n                $values = array($this->addressPart_);\n                break;\n\n            case 'matchtype':\n                $values = array($this->matchType_);\n                break;\n\n            case 'comparator':\n                $values = array($this->comparator_);\n                break;\n\n            case 'tag':\n                $values = $this->tags_;\n                break;\n            }\n\n            foreach ($values as $value)\n            {\n                if (preg_match('/^'. $d['regex'] .'$/mi', $value))\n                    break 2;\n            }\n\n            throw new SieveException($token,\n                $d['o_type'] .' '. $d['o_name'] .' requires use of '. $d['type'] .' '. $d['name']);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveToken.php",
    "content": "<?php namespace Sieve;\n\ninclude_once('SieveDumpable.php');\n\nclass SieveToken implements SieveDumpable\n{\n    const Unknown          = 0x0000;\n    const ScriptEnd        = 0x0001;\n    const LeftBracket      = 0x0002;\n    const RightBracket     = 0x0004;\n    const BlockStart       = 0x0008;\n    const BlockEnd         = 0x0010;\n    const LeftParenthesis  = 0x0020;\n    const RightParenthesis = 0x0040;\n    const Comma            = 0x0080;\n    const Semicolon        = 0x0100;\n    const Whitespace       = 0x0200;\n    const Tag              = 0x0400;\n    const QuotedString     = 0x0800;\n    const Number           = 0x1000;\n    const Comment          = 0x2000;\n    const MultilineString  = 0x4000;\n    const Identifier       = 0x8000;\n\n    const String        = 0x4800; // Quoted | Multiline\n    const StringList    = 0x4802; // Quoted | Multiline | LeftBracket\n    const StringListSep = 0x0084; // Comma | RightBracket\n    const Unparsed      = 0x2200; // Comment | Whitespace\n    const TestList      = 0x8020; // Identifier | LeftParenthesis\n\n    public $type;\n    public $text;\n    public $line;\n\n    public function __construct($type, $text, $line)\n    {\n        $this->text = $text;\n        $this->type = $type;\n        $this->line = intval($line);\n    }\n\n    public function dump()\n    {\n        return '<'. SieveToken::escape($this->text) .'> type:'. SieveToken::typeString($this->type) .' line:'. $this->line;\n    }\n\n    public function text()\n    {\n        return $this->text;\n    }\n\n    public function is($type)\n    {\n        return (bool)($this->type & $type);\n    }\n\n    public static function typeString($type)\n    {\n        switch ($type)\n        {\n        case SieveToken::Identifier: return 'identifier';\n        case SieveToken::Whitespace: return 'whitespace';\n        case SieveToken::QuotedString: return 'quoted string';\n        case SieveToken::Tag: return 'tag';\n        case SieveToken::Semicolon: return 'semicolon';\n        case SieveToken::LeftBracket: return 'left bracket';\n        case SieveToken::RightBracket: return 'right bracket';\n        case SieveToken::BlockStart: return 'block start';\n        case SieveToken::BlockEnd: return 'block end';\n        case SieveToken::LeftParenthesis: return 'left parenthesis';\n        case SieveToken::RightParenthesis: return 'right parenthesis';\n        case SieveToken::Comma: return 'comma';\n        case SieveToken::Number: return 'number';\n        case SieveToken::Comment: return 'comment';\n        case SieveToken::MultilineString: return 'multiline string';\n        case SieveToken::ScriptEnd: return 'script end';\n        case SieveToken::String: return 'string';\n        case SieveToken::StringList: return 'string list';\n        default: return 'unknown token';\n        }\n    }\n\n    protected static $tr_ = array(\"\\r\" => '\\r', \"\\n\" => '\\n', \"\\t\" => '\\t');\n    public static function escape($val)\n    {\n        return strtr($val, self::$tr_);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/SieveTree.php",
    "content": "<?php namespace Sieve;\n\nclass SieveTree\n{\n    protected $childs_;\n    protected $parents_;\n    protected $nodes_;\n    protected $max_id_;\n    protected $dump_;\n\n    public function __construct($name = 'tree')\n    {\n        $this->childs_ = array();\n        $this->parents_ = array();\n        $this->nodes_ = array();\n        $this->max_id_ = 0;\n\n        $this->parents_[0] = null;\n        $this->nodes_[0] = $name;\n    }\n\n    public function addChild(SieveDumpable $child)\n    {\n        return $this->addChildTo($this->max_id_, $child);\n    }\n\n    public function addChildTo($parent_id, SieveDumpable $child)\n    {\n        if (!is_int($parent_id)\n         || !isset($this->nodes_[$parent_id]))\n            return null;\n\n        if (!isset($this->childs_[$parent_id]))\n            $this->childs_[$parent_id] = array();\n\n        $child_id = ++$this->max_id_;\n        $this->nodes_[$child_id] = $child;\n        $this->parents_[$child_id] = $parent_id;\n        array_push($this->childs_[$parent_id], $child_id);\n\n        return $child_id;\n    }\n\n    public function getRoot()\n    {\n        return 0;\n    }\n\n    public function getChilds($node_id)\n    {\n        if (!is_int($node_id)\n        || !isset($this->nodes_[$node_id]))\n            return null;\n\n        if (!isset($this->childs_[$node_id]))\n            return array();\n\n        return $this->childs_[$node_id];\n    }\n\n    public function getNode($node_id)\n    {\n        if ($node_id == 0 || !is_int($node_id)\n         || !isset($this->nodes_[$node_id]))\n            return null;\n\n        return $this->nodes_[$node_id];\n    }\n\n    public function dump()\n    {\n        $this->dump_ = $this->nodes_[$this->getRoot()] .\"\\n\";\n        $this->dumpChilds_($this->getRoot(), ' ');\n        return $this->dump_;\n    }\n\n    protected function dumpChilds_($parent_id, $prefix)\n    {\n        if (!isset($this->childs_[$parent_id]))\n            return;\n\n        $childs = $this->childs_[$parent_id];\n        $last_child = count($childs);\n\n        for ($i=1; $i <= $last_child; ++$i)\n        {\n            $child_node = $this->nodes_[$childs[$i-1]];\n            $infix = ($i == $last_child ? '`--- ' : '|--- ');\n            $this->dump_ .= $prefix . $infix . $child_node->dump() . \" (id:\" . $childs[$i-1] . \")\\n\";\n\n            $next_prefix = $prefix . ($i == $last_child ? '   ' : '|  ');\n            $this->dumpChilds_($childs[$i-1], $next_prefix);\n        }\n    }\n\n    public function getText()\n    {\n        $this->dump_ = '';\n        $this->childText_($this->getRoot());\n        return $this->dump_;\n    }\n\n    protected function childText_($parent_id)\n    {\n        if (!isset($this->childs_[$parent_id]))\n            return;\n\n        $childs = $this->childs_[$parent_id];\n\n        for ($i = 0; $i < count($childs); ++$i)\n        {\n            $child_node = $this->nodes_[$childs[$i]];\n            $this->dump_ .= $child_node->text();\n            $this->childText_($childs[$i]);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/body.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"body\">\n\n\t<test name=\"body\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"body transform\" regex=\"(raw|content|text)\" occurrence=\"optional\">\n\t\t\t<parameter type=\"stringlist\" name=\"content types\" follows=\"content\" />\n\t\t</parameter>\n\t\t<parameter type=\"stringlist\" name=\"key list\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/comparator-ascii-numeric.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"comparator-i;ascii-numeric\">\n\n\t<comparator name=\"i;ascii-numeric\" />\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/copy.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"copy\">\n\n\t<tagged-argument extends=\"(fileinto|redirect)\">\n\t\t<parameter type=\"tag\" name=\"copy\" regex=\"copy\" occurrence=\"optional\" />\n\t</tagged-argument>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/date.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"date\">\n\n\t<test name=\"date\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"zone\" regex=\"(zone|originalzone)\" occurrence=\"optional\">\n\t\t\t<parameter type=\"string\" name=\"time-zone\" follows=\"zone\" />\n\t\t</parameter>\n\t\t<parameter type=\"string\" name=\"header-name\" />\n\t\t<parameter type=\"string\" case=\"ignore\" name=\"date-part\"\n\t\t regex=\"(year|month|day|date|julian|hour|minute|second|time|iso8601|std11|zone|weekday)\" />\n\t\t<parameter type=\"stringlist\" name=\"key-list\" />\n\t</test>\n\n\t<test name=\"currentdate\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"zone\" regex=\"zone\" occurrence=\"optional\">\n\t\t\t<parameter type=\"string\" name=\"time-zone\" />\n\t\t</parameter>\n\t\t<parameter type=\"string\" case=\"ignore\" name=\"date-part\"\n\t\t regex=\"(year|month|day|date|julian|hour|minute|second|time|iso8601|std11|zone|weekday)\" />\n\t\t<parameter type=\"stringlist\" name=\"key-list\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/duplicate.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"duplicate\">\n\n\t<test name=\"duplicate\">\n\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/editheader.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"editheader\">\n\n\t<command name=\"addheader\">\n\t\t<parameter type=\"tag\" name=\"last\" regex=\"last\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"field name\" />\n\t\t<parameter type=\"string\" name=\"value\" />\n\t</command>\n\n\t<command name=\"deleteheader\">\n\t\t<parameter type=\"tag\" name=\"index\" regex=\"index\" occurrence=\"optional\">\n\t\t\t<parameter type=\"number\" name=\"field number\" />\n\t\t\t<parameter type=\"tag\" name=\"last\" regex=\"last\" occurrence=\"optional\" />\n\t\t</parameter>\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"field name\" />\n\t\t<parameter type=\"stringlist\" name=\"value patterns\" occurrence=\"optional\" />\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/enotify.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"enotify\">\n    <command name=\"notify\">\n        <parameter type=\"tag\" name=\"from\" occurrence=\"optional\">\n            <parameter type=\"string\" name=\"from-address\" />\n        </parameter>\n\n        <parameter type=\"tag\" name=\"importance\" regex=\"(1|2|3)\" occurrence=\"optional\" />\n\n        <parameter type=\"tag\" name=\"options\" occurrence=\"optional\">\n            <parameter type=\"stringlist\" name=\"option-strings\" />\n        </parameter>\n\n        <parameter type=\"tag\" name=\"message\" occurrence=\"optional\">\n            <parameter type=\"string\" name=\"message-text\" />\n        </parameter>\n\n        <parameter type=\"string\" name=\"method\" />\n    </command>\n\n    <test name=\"valid_notify_method\">\n        <parameter type=\"stringlist\" name=\"notification-uris\" />\n    </test>\n\n    <test name=\"notify_method_capability\">\n        <parameter type=\"string\" name=\"notification-uri\" />\n        <parameter type=\"string\" name=\"notification-capability\" />\n        <parameter type=\"stringlist\" name=\"key-list\" />\n    </test>\n\n    <modifier name=\"encodeurl\" />\n</extension>"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/envelope.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"envelope\">\n\n\t<test name=\"envelope\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"addresspart\" occurrence=\"optional\" />\n\t\t<parameter type=\"stringlist\" name=\"envelope-part\" />\n\t\t<parameter type=\"stringlist\" name=\"key\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/environment.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"environment\">\n\n\t<test name=\"environment\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"name\"\n\t\t regex=\"(domain|host|location|name|phase|remote-host|remote-ip|version|vnd\\..+)\" />\n\t\t<parameter type=\"stringlist\" name=\"key-list\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/ereject.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"ereject\">\n\n\t<command name=\"ereject\">\n\n\t\t<parameter type=\"string\" name=\"reason\" />\n\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/fileinto.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"fileinto\">\n\n\t<command name=\"fileinto\">\n    <parameter type=\"tag\" name=\"create\" regex=\"create\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"folder\" />\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/imap4flags.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"imap4flags\">\n\n\t<command name=\"setflag\">\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</command>\n\n\t<command name=\"addflag\">\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</command>\n\n\t<command name=\"removeflag\">\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</command>\n\n\t<test name=\"hasflag\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</test>\n\n\t<tagged-argument extends=\"(fileinto|keep)\">\n\t\t<parameter type=\"tag\" name=\"flags\" regex=\"flags\" occurrence=\"optional\">\n\t\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t\t</parameter>\n\t</tagged-argument>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/imapflags.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"imapflags\">\n\n\t<command name=\"mark\" />\n\n\t<command name=\"unmark\" />\n\n\t<command name=\"setflag\">\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</command>\n\n\t<command name=\"addflag\">\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</command>\n\n\t<command name=\"removeflag\">\n\t\t<parameter type=\"stringlist\" name=\"flag list\" />\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/index.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"index\">\n\n\t<tagged-argument extends=\"(header|address|date)\">\n\t\t<parameter type=\"tag\" name=\"index\" regex=\"index\" occurrence=\"optional\">\n\t\t\t<parameter type=\"number\" name=\"field number\" />\n\t\t</parameter>\n\t</tagged-argument>\n\n\t<tagged-argument extends=\"(header|address|date)\">\n\t\t<parameter type=\"tag\" name=\"last\" regex=\"last\" occurrence=\"optional\">\n\t\t\t<requires type=\"tag\" name=\"index\" regex=\"index\" />\n\t\t</parameter>\n\t</tagged-argument>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/mailbox.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"mailbox\">\n\n\t<test name=\"mailboxexists\">\n    <parameter type=\"string\" name=\"folder\" />\n\t</test>\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/mime.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"mime\">\n    <command name=\"foreverypart\">\n        <parameter type=\"string\" name=\"name\" occurrence=\"optional\" />\n        <block />\n    </command>\n\n    <command name=\"break\">\n        <parameter type=\"string\" name=\"name\" occurrence=\"optional\" />\n    </command>\n\n    <tagged-argument extends=\"(header|address|exists)\">\n        <parameter type=\"tag\" name=\"mime\" regex=\"mime\" occurrence=\"optional\" />\n    </tagged-argument>\n    <tagged-argument extends=\"(header|address|exists)\">\n        <parameter type=\"tag\" name=\"anychild\" regex=\"anychild\" occurrence=\"optional\" />\n    </tagged-argument>\n    <tagged-argument extends=\"(header)\">\n        <parameter type=\"tag\" name=\"type\" occurrence=\"optional\" />\n    </tagged-argument>\n    <tagged-argument extends=\"(header)\">\n        <parameter type=\"tag\" name=\"subtype\" occurrence=\"optional\" />\n    </tagged-argument>\n    <tagged-argument extends=\"(header)\">\n        <parameter type=\"tag\" name=\"contenttype\" occurrence=\"optional\" />\n    </tagged-argument>\n    <tagged-argument extends=\"(header)\">\n        <parameter type=\"tag\" name=\"param\" regex=\"param\" occurrence=\"optional\">\n            <parameter type=\"stringlist\" name=\"param-list\" />\n        </parameter>\n    </tagged-argument>\n    <tagged-argument extends=\"(header|address|exists)\">\n        <parameter type=\"stringlist\" name=\"header-names\" />\n    </tagged-argument>\n    <tagged-argument extends=\"(header)\">\n        <parameter type=\"stringlist\" name=\"key-list\" />\n    </tagged-argument>\n\n    <action name=\"replace\">\n        <parameter type=\"tag\" name=\"mime\" regex=\"mime\" occurrence=\"optional\" />\n        <parameter type=\"string\" name=\"subject\" occurrence=\"optional\" />\n        <parameter type=\"string\" name=\"from\" occurrence=\"optional\" />\n        <parameter type=\"string\" name=\"replacement\" />\n    </action>\n\n    <action name=\"enclose\">\n        <parameter type=\"string\" name=\"subject\" occurrence=\"optional\" />\n        <parameter type=\"stringlist\" name=\"headers\" occurrence=\"optional\" />\n        <parameter type=\"string\" name=\"text\" />\n    </action>\n\n    <action name=\"extracttext\">\n        <parameter type=\"tag\" name=\"first\" regex=\"first\" occurrence=\"optional\" />\n        <parameter type=\"number\" name=\"number\" occurrence=\"optional\" />\n        <parameter type=\"string\" name=\"varname\" />\n    </action>\n</extension>"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/notify.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"notify\">\n\n\t<command name=\"notify\">\n\t\t<parameter type=\"tag\" name=\"method\" regex=\"method\" occurrence=\"optional\">\n\t\t\t<parameter type=\"string\" name=\"method-name\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"id\" regex=\"id\" occurrence=\"optional\">\n\t\t\t<parameter type=\"string\" name=\"message-id\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"priority\" regex=\"(low|normal|high)\" occurrence=\"optional\" />\n\n\t\t<parameter type=\"tag\" name=\"message\" regex=\"message\" occurrence=\"optional\">\n\t\t\t<parameter type=\"string\" name=\"message-text\" />\n\t\t</parameter>\n\t</command>\n\n\t<command name=\"denotify\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\">\n\t\t\t<parameter type=\"string\" name=\"message-id\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"priority\" regex=\"(low|normal|high)\" occurrence=\"optional\" />\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/regex.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"regex\">\n\n\t<matchtype name=\"regex\" />\n\n\t<tagged-argument extends=\"set\">\n\t\t<parameter type=\"tag\" name=\"modifier\" regex=\"quoteregex\" occurrence=\"optional\" />\n\t</tagged-argument>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/reject.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"reject\">\n\n\t<command name=\"reject\">\n\n\t\t<parameter type=\"string\" name=\"reason\" />\n\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/relational.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"relational\">\n\n\t<matchtype name=\"count\">\n\t\t<requires type=\"comparator\" name=\"i;ascii-numeric\" regex=\"i;ascii-numeric\" />\n\t\t<parameter type=\"string\" name=\"relation string\" regex=\"(lt|le|eq|ge|gt|ne)\" />\n\t</matchtype>\n\n\t<matchtype name=\"value\">\n\t\t<parameter type=\"string\" name=\"relation string\" regex=\"(lt|le|eq|ge|gt|ne)\" />\n\t</matchtype>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/spamtest.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"spamtest\">\n\n\t<test name=\"spamtest\">\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"value\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/spamtestplus.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"spamtestplus\">\n\n\t<test name=\"spamtest\" overrides=\"true\">\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"percent\" regex=\"percent\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"value\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/subaddress.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"subaddress\">\n\n\t<addresspart name=\"user\" />\n\t<addresspart name=\"detail\" />\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/vacation-seconds.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"vacation-seconds\">\n\n\t<command name=\"vacation\">\n\n\t\t<parameter type=\"tag\" name=\"seconds\" occurrence=\"optional\" regex=\"seconds\">\n\t\t\t<parameter type=\"number\" name=\"period\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"addresses\" occurrence=\"optional\" regex=\"addresses\">\n\t\t\t<parameter type=\"stringlist\" name=\"address strings\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"subject\" occurrence=\"optional\" regex=\"subject\">\n\t\t\t<parameter type=\"string\" name=\"subject string\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"from\" occurrence=\"optional\" regex=\"from\">\n\t\t\t<parameter type=\"string\" name=\"from string\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"handle\" occurrence=\"optional\" regex=\"handle\">\n\t\t\t<parameter type=\"string\" name=\"handle string\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"mime\" occurrence=\"optional\" regex=\"mime\" />\n\n\t\t<parameter type=\"string\" name=\"reason\" />\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/vacation.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"vacation\">\n\n\t<command name=\"vacation\">\n\t\t<parameter type=\"tag\" name=\"days\" occurrence=\"optional\" regex=\"days\">\n\t\t\t<parameter type=\"number\" name=\"period\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"addresses\" occurrence=\"optional\" regex=\"addresses\">\n\t\t\t<parameter type=\"stringlist\" name=\"address strings\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"subject\" occurrence=\"optional\" regex=\"subject\">\n\t\t\t<parameter type=\"string\" name=\"subject string\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"from\" occurrence=\"optional\" regex=\"from\">\n\t\t\t<parameter type=\"string\" name=\"from string\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"handle\" occurrence=\"optional\" regex=\"handle\">\n\t\t\t<parameter type=\"string\" name=\"handle string\" />\n\t\t</parameter>\n\n\t\t<parameter type=\"tag\" name=\"mime\" occurrence=\"optional\" regex=\"mime\" />\n\n\t\t<parameter type=\"string\" name=\"reason\" />\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/variables.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"variables\">\n\n\t<command name=\"set\">\n\t\t<parameter type=\"tag\" name=\"modifier\" regex=\"(lower|upper)\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"modifier\" regex=\"(lower|upper)first\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"modifier\" regex=\"quotewildcard\" occurrence=\"optional\" />\n\t\t<parameter type=\"tag\" name=\"modifier\" regex=\"length\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"name\" regex=\"[[:alpha:]_][[:alnum:]_]*\" />\n\t\t<parameter type=\"string\" name=\"value\" />\n\t</command>\n\n\t<test name=\"string\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"stringlist\" name=\"source\" />\n\t\t<parameter type=\"stringlist\" name=\"key list\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/virustest.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"virustest\">\n\n\t<test name=\"virustest\">\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"string\" name=\"value\" />\n\t</test>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/vnd.dovecot.execute.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"vnd.dovecot.execute\">\n\n\t<test name=\"execute\">\n\t\t<parameter type=\"tag\" name=\"pipe\" regex=\"pipe\" occurrence=\"optional\"/>\n\t\t<parameter type=\"string\" name=\"program-name\"/>\n\t\t<parameter type=\"stringlist\" name=\"arguments\" occurrence=\"optional\"/>\n\t</test>\n\n\t<command name=\"execute\">\n\t\t<parameter type=\"tag\" name=\"pipe\" regex=\"pipe\" occurrence=\"optional\"/>\n\t\t<parameter type=\"string\" name=\"program-name\"/>\n\t\t<parameter type=\"stringlist\" name=\"arguments\" occurrence=\"optional\"/>\n\t</command>\n\t\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/vnd.dovecot.filter.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"vnd.dovecot.filter\">\n\n\t<test name=\"filter\">\n\t\t<parameter type=\"string\" name=\"program-name\"/>\n\t\t<parameter type=\"stringlist\" name=\"arguments\" occurrence=\"optional\"/>\n\t</test>\n\n\t<command name=\"filter\">\n\t\t<parameter type=\"string\" name=\"program-name\"/>\n\t\t<parameter type=\"stringlist\" name=\"arguments\" occurrence=\"optional\"/>\n\t</command>\n\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/extensions/vnd.dovecot.pipe.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<extension name=\"vnd.dovecot.pipe\">\n\n\t<command name=\"pipe\">\n\t\t<parameter type=\"tag\" name=\"try\" regex=\"try\" occurrence=\"optional\"/>\n\t\t<parameter type=\"string\" name=\"program-name\"/>\n\t\t<parameter type=\"stringlist\" name=\"arguments\" occurrence=\"optional\"/>\n\t</command>\n\t\n</extension>\n"
  },
  {
    "path": "data/web/inc/lib/sieve/keywords.xml",
    "content": "<?xml version='1.0' standalone='yes'?>\n\n<keywords>\n\n\t<matchtype name=\"is\" />\n\t<matchtype name=\"contains\" />\n\t<matchtype name=\"matches\" />\n\t<matchtype name=\"value\">\n\t\t<parameter type=\"string\" name=\"operator\" regex=\"(gt|ge|eq|le|lt)\" />\n\t</matchtype>\n\n\n\t<comparator name=\"i;octet\" />\n\t<comparator name=\"i;ascii-casemap\" />\n\t<comparator name=\"i;unicode-casemap\" />\n\n\t<addresspart name=\"all\" />\n\t<addresspart name=\"localpart\" />\n\t<addresspart name=\"domain\" />\n\n\n\t<command name=\"discard\" />\n\n\t<command name=\"elsif\">\n\t\t<parameter type=\"test\" name=\"test command\" />\n\t\t<parameter type=\"block\" />\n\t</command>\n\n\t<command name=\"else\">\n\t\t<parameter type=\"block\" />\n\t</command>\n\n\t<command name=\"if\">\n\t\t<parameter type=\"test\" name=\"test command\" />\n\t\t<parameter type=\"block\" />\n\t</command>\n\n\t<command name=\"keep\" />\n\n\t<command name=\"redirect\">\n\t\t<parameter type=\"string\" name=\"address string\" />\n\t</command>\n\n\t<command name=\"require\">\n\t\t<parameter type=\"requirestrings\" name=\"require string\" />\n\t</command>\n\n\t<command name=\"stop\" />\n\n\n\t<test name=\"address\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"addresspart\" occurrence=\"optional\" />\n\t\t<parameter type=\"stringlist\" name=\"header list\" />\n\t\t<parameter type=\"stringlist\" name=\"key list\" />\n\t</test>\n\n\t<test name=\"allof\">\n\t\t<parameter type=\"testlist\" name=\"test\" />\n\t</test>\n\n\t<test name=\"anyof\">\n\t\t<parameter type=\"testlist\" name=\"test\" />\n\t</test>\n\n\t<test name=\"exists\">\n\t\t<parameter type=\"stringlist\" name=\"header names\" />\n\t</test>\n\n\t<test name=\"false\" />\n\t\n\t<test name=\"header\">\n\t\t<parameter type=\"matchtype\" occurrence=\"optional\" />\n\t\t<parameter type=\"comparator\" occurrence=\"optional\" />\n\t\t<parameter type=\"stringlist\" name=\"header names\" />\n\t\t<parameter type=\"stringlist\" name=\"key list\" />\n\t</test>\n\n\t<test name=\"not\">\n\t\t<parameter type=\"test\" />\n\t</test>\n\n\t<test name=\"size\">\n\t\t<parameter type=\"tag\" regex=\"(over|under)\" />\n\t\t<parameter type=\"number\" name=\"limit\" />\n\t</test>\n\n\t<test name=\"true\" />\n\n</keywords>\n"
  },
  {
    "path": "data/web/inc/lib/ssp.class.php",
    "content": "<?php\n\n/*\n * Helper functions for building a DataTables server-side processing SQL query\n *\n * The static functions in this class are just helper functions to help build\n * the SQL used in the DataTables demo server-side processing scripts. These\n * functions obviously do not represent all that can be done with server-side\n * processing, they are intentionally simple to show how it works. More complex\n * server-side processing operations will likely require a custom script.\n *\n * See https://datatables.net/usage/server-side for full details on the server-\n * side processing requirements of DataTables.\n *\n * @license MIT - https://datatables.net/license_mit\n */\n\nclass SSP {\n\t/**\n\t * Create the data output array for the DataTables rows\n\t *\n\t *  @param  array $columns Column information array\n\t *  @param  array $data    Data from the SQL get\n\t *  @return array          Formatted data in a row based format\n\t */\n\tstatic function data_output ( $columns, $data )\n\t{\n\t\t$out = array();\n\n\t\tfor ( $i=0, $ien=count($data) ; $i<$ien ; $i++ ) {\n\t\t\t$row = array();\n\n\t\t\tfor ( $j=0, $jen=count($columns) ; $j<$jen ; $j++ ) {\n\t\t\t\t$column = $columns[$j];\n\n\t\t\t\t// Is there a formatter?\n\t\t\t\tif ( isset( $column['formatter'] ) ) {\n                    if(empty($column['db'])){\n                        $row[ $column['dt'] ] = $column['formatter']( $data[$i] );\n                    }\n                    else{\n                        $row[ $column['dt'] ] = $column['formatter']( $data[$i][ $column['db'] ], $data[$i] );\n                    }\n\t\t\t\t}\n\t\t\t\telse {\n                    if(!empty($column['db']) && (!isset($column['dummy']) || $column['dummy'] !== true)){\n                        $row[ $column['dt'] ] = $data[$i][ $columns[$j]['db'] ];\n                    }\n                    else{\n                        $row[ $column['dt'] ] = \"\";\n                    }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$out[] = $row;\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\n\t/**\n\t * Database connection\n\t *\n\t * Obtain an PHP PDO connection from a connection details array\n\t *\n\t *  @param  array $conn SQL connection details. The array should have\n\t *    the following properties\n\t *     * host - host name\n\t *     * db   - database name\n\t *     * user - user name\n\t *     * pass - user password\n\t *     * Optional: `'charset' => 'utf8'` - you might need this depending on your PHP / MySQL config\n\t *  @return resource PDO connection\n\t */\n\tstatic function db ( $conn )\n\t{\n\t\tif ( is_array( $conn ) ) {\n\t\t\treturn self::sql_connect( $conn );\n\t\t}\n\n\t\treturn $conn;\n\t}\n\n\n\t/**\n\t * Paging\n\t *\n\t * Construct the LIMIT clause for server-side processing SQL query\n\t *\n\t *  @param  array $request Data sent to server by DataTables\n\t *  @param  array $columns Column information array\n\t *  @return string SQL limit clause\n\t */\n\tstatic function limit ( $request, $columns )\n\t{\n\t\t$limit = '';\n\n\t\tif ( isset($request['start']) && $request['length'] != -1 ) {\n\t\t\t$limit = \"LIMIT \".intval($request['start']).\", \".intval($request['length']);\n\t\t}\n\n\t\treturn $limit;\n\t}\n\n\n\t/**\n\t * Ordering\n\t *\n\t * Construct the ORDER BY clause for server-side processing SQL query\n\t *\n\t *  @param  array $request Data sent to server by DataTables\n\t *  @param  array $columns Column information array\n\t *  @return string SQL order by clause\n\t */\n\tstatic function order ( $tableAS, $request, $columns )\n\t{\n    \t$select = '';\n\t\t$order = '';\n\n\t\tif ( isset($request['order']) && count($request['order']) ) {\n    \t\t$selects = [];\n\t\t\t$orderBy = [];\n\t\t\t$dtColumns = self::pluck( $columns, 'dt' );\n\n\t\t\tfor ( $i=0, $ien=count($request['order']) ; $i<$ien ; $i++ ) {\n\t\t\t\t// Convert the column index into the column data property\n\t\t\t\t$columnIdx = intval($request['order'][$i]['column']);\n\t\t\t\t$requestColumn = $request['columns'][$columnIdx];\n\n\t\t\t\t$columnIdx = array_search( $columnIdx, $dtColumns );\n\t\t\t\t$column = $columns[ $columnIdx ];\n\n\t\t\t\tif ( $requestColumn['orderable'] == 'true' ) {\n\t\t\t\t\t$dir = $request['order'][$i]['dir'] === 'asc' ?\n\t\t\t\t\t\t'ASC' :\n\t\t\t\t\t\t'DESC';\n\t\t\t\t\t\t\n                    if(isset($column['order_subquery'])) {\n        \t\t\t\t$selects[] = '('.$column['order_subquery'].') AS `'.$column['db'].'_count`';\n        \t\t\t\t$orderBy[] = '`'.$column['db'].'_count` '.$dir;\n    \t\t\t\t} else {\n\t\t\t\t\t    $orderBy[] = '`'.$tableAS.'`.`'.$column['db'].'` '.$dir;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n            if ( count( $selects ) ) {\n                $select = ', '.implode(', ', $selects);\n            }\n\n\t\t\tif ( count( $orderBy ) ) {\n\t\t\t\t$order = 'ORDER BY '.implode(', ', $orderBy);\n\t\t\t}\n\t\t}\n\n\t\treturn [$select, $order];\n\t}\n\n\n\t/**\n\t * Searching / Filtering\n\t *\n\t * Construct the WHERE clause for server-side processing SQL query.\n\t *\n\t * NOTE this does not match the built-in DataTables filtering which does it\n\t * word by word on any field. It's possible to do here performance on large\n\t * databases would be very poor\n\t *\n\t *  @param  array $request Data sent to server by DataTables\n\t *  @param  array $columns Column information array\n\t *  @param  array $bindings Array of values for PDO bindings, used in the\n\t *    sql_exec() function\n\t *  @return string SQL where clause\n\t */\n\tstatic function filter ( $tablesAS, $request, $columns, &$bindings )\n\t{\n\t\t$globalSearch = array();\n\t\t$columnSearch = array();\n\t\t$joins = array();\n\t\t$dtColumns = self::pluck( $columns, 'dt' );\n\n\t\tif ( isset($request['search']) && $request['search']['value'] != '' ) {\n\t\t\t$str = $request['search']['value'];\n\n\t\t\tfor ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {\n\t\t\t\t$requestColumn = $request['columns'][$i];\n\t\t\t\t$columnIdx = array_search( $i, $dtColumns );\n\t\t\t\t$column = $columns[ $columnIdx ];\n\n\t\t\t\tif ( $requestColumn['searchable'] == 'true' ) {\n\t\t\t\t\tif(!empty($column['db'])){\n    \t\t\t\t\t$binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );\n    \t\t\t\t\t\n    \t\t\t\t\tif(isset($column['search']['join'])) {\n            \t\t\t\t$joins[] = $column['search']['join'];\n            \t\t\t\t$globalSearch[] = $column['search']['where_column'].' LIKE '.$binding;\n        \t\t\t\t} else {\n\t\t\t\t\t\t    $globalSearch[] = \"`\".$tablesAS.\"`.`\".$column['db'].\"` LIKE \".$binding;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Individual column filtering\n\t\tif ( isset( $request['columns'] ) ) {\n\t\t\tfor ( $i=0, $ien=count($request['columns']) ; $i<$ien ; $i++ ) {\n\t\t\t\t$requestColumn = $request['columns'][$i];\n\t\t\t\t$columnIdx = array_search( $requestColumn['data'], $dtColumns );\n\t\t\t\t$column = $columns[ $columnIdx ];\n\n\t\t\t\t$str = $requestColumn['search']['value'];\n\n\t\t\t\tif ( $requestColumn['searchable'] == 'true' &&\n\t\t\t\t $str != '' ) {\n\t\t\t\t\tif(!empty($column['db'])){\n\t\t\t\t\t\t$binding = self::bind( $bindings, '%'.$str.'%', PDO::PARAM_STR );\n\t\t\t\t\t\t$columnSearch[] = \"`\".$tablesAS.\"`.`\".$column['db'].\"` LIKE \".$binding;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Combine the filters into a single string\n\t\t$where = '';\n\n\t\tif ( count( $globalSearch ) ) {\n\t\t\t$where = '('.implode(' OR ', $globalSearch).')';\n\t\t}\n\n\t\tif ( count( $columnSearch ) ) {\n\t\t\t$where = $where === '' ?\n\t\t\t\timplode(' AND ', $columnSearch) :\n\t\t\t\t$where .' AND '. implode(' AND ', $columnSearch);\n\t\t}\n\t\t\n\t\t$join = '';\n\t\tif( count($joins) ) {\n    \t\t$join = implode(' ', $joins);\n\t\t}\n\n\t\tif ( $where !== '' ) {\n\t\t\t$where = 'WHERE '.$where;\n\t\t}\n\n\t\treturn [$join, $where];\n\t}\n\n\n\t/**\n\t * Perform the SQL queries needed for an server-side processing requested,\n\t * utilising the helper functions of this class, limit(), order() and\n\t * filter() among others. The returned array is ready to be encoded as JSON\n\t * in response to an SSP request, or can be modified if needed before\n\t * sending back to the client.\n\t *\n\t *  @param  array $request Data sent to server by DataTables\n\t *  @param  array|PDO $conn PDO connection resource or connection parameters array\n\t *  @param  string $table SQL table to query\n\t *  @param  string $primaryKey Primary key of the table\n\t *  @param  array $columns Column information array\n\t *  @return array          Server-side processing response array\n\t */\n\tstatic function simple ( $request, $conn, $table, $primaryKey, $columns )\n\t{\n\t\t$bindings = array();\n\t\t$db = self::db( $conn );\n\n\t\t// Allow for a JSON string to be passed in\n\t\tif (isset($request['json'])) {\n\t\t\t$request = json_decode($request['json'], true);\n\t\t}\n\n    // table AS\n    $tablesAS = null;\n    if(is_array($table)) {\n      $tablesAS = $table[1];\n      $table = $table[0];\n    }\n\n\t\t// Build the SQL query string from the request\n\t\tlist($select, $order) = self::order( $tablesAS, $request, $columns );\n\t\t$limit = self::limit( $request, $columns );\n\t\tlist($join, $where) = self::filter( $tablesAS, $request, $columns, $bindings );\n\n\t\t// Main query to actually get the data\n\t\t$data = self::sql_exec( $db, $bindings,\n\t\t\t\"SELECT `$tablesAS`.`\".implode(\"`, `$tablesAS`.`\", self::pluck($columns, 'db')).\"`\n\t\t\t $select\n\t\t\t FROM `$table` AS `$tablesAS`\n\t\t\t $join\n\t\t\t $where\n\t\t\t GROUP BY `{$tablesAS}`.`{$primaryKey}`\n\t\t\t $order\n\t\t\t $limit\"\n\t\t);\n\n\t\t// Data set length after filtering\n\t\t$resFilterLength = self::sql_exec( $db, $bindings,\n\t\t\t\"SELECT COUNT(DISTINCT `{$tablesAS}`.`{$primaryKey}`)\n\t\t\t FROM   `$table` AS `$tablesAS`\n\t\t\t $join\n\t\t\t $where\"\n\t\t);\n\t\t$recordsFiltered = $resFilterLength[0][0];\n\n\t\t// Total data set length\n\t\t$resTotalLength = self::sql_exec( $db,\n\t\t\t\"SELECT COUNT(`{$tablesAS}`.`{$primaryKey}`)\n\t\t\t FROM   `$table` AS `$tablesAS`\"\n\t\t);\n\t\t$recordsTotal = $resTotalLength[0][0];\n\n\t\t/*\n\t\t * Output\n\t\t */\n\t\treturn array(\n\t\t\t\"draw\"            => isset ( $request['draw'] ) ?\n\t\t\t\tintval( $request['draw'] ) :\n\t\t\t\t0,\n\t\t\t\"recordsTotal\"    => intval( $recordsTotal ),\n\t\t\t\"recordsFiltered\" => intval( $recordsFiltered ),\n\t\t\t\"data\"            => self::data_output( $columns, $data )\n\t\t);\n\t}\n\n\n\t/**\n\t * The difference between this method and the `simple` one, is that you can\n\t * apply additional `where` conditions to the SQL queries. These can be in\n\t * one of two forms:\n\t *\n\t * * 'Result condition' - This is applied to the result set, but not the\n\t *   overall paging information query - i.e. it will not effect the number\n\t *   of records that a user sees they can have access to. This should be\n\t *   used when you want apply a filtering condition that the user has sent.\n\t * * 'All condition' - This is applied to all queries that are made and\n\t *   reduces the number of records that the user can access. This should be\n\t *   used in conditions where you don't want the user to ever have access to\n\t *   particular records (for example, restricting by a login id).\n\t *\n\t * In both cases the extra condition can be added as a simple string, or if\n\t * you are using external values, as an assoc. array with `condition` and\n\t * `bindings` parameters. The `condition` is a string with the SQL WHERE\n\t * condition and `bindings` is an assoc. array of the binding names and\n\t * values.\n\t *\n\t *  @param  array $request Data sent to server by DataTables\n\t *  @param  array|PDO $conn PDO connection resource or connection parameters array\n\t *  @param  string|array $table SQL table to query, if array second key is AS\n\t *  @param  string $primaryKey Primary key of the table\n\t *  @param  array $columns Column information array\n   *  @param  string $join JOIN sql string\n\t *  @param  string|array $whereResult WHERE condition to apply to the result set\n\t *  @return array          Server-side processing response array\n\t */\n\tstatic function complex (\n\t\t$request,\n\t\t$conn,\n\t\t$table,\n\t\t$primaryKey,\n\t\t$columns,\n    $join=null,\n\t\t$whereResult=null\n\t) {\n\t\t$bindings = array();\n\t\t$db = self::db( $conn );\n\n    // table AS\n    $tablesAS = null;\n    if(is_array($table)) {\n      $tablesAS = $table[1];\n      $table = $table[0];\n    }\n\n\t\t// Build the SQL query string from the request\n\t\tlist($select, $order) = self::order( $tablesAS, $request, $columns );\n\t\t$limit = self::limit( $request, $columns );\n\t\tlist($join_filter, $where) = self::filter( $tablesAS, $request, $columns, $bindings );\n\n\t\t// whereResult can be a simple string, or an assoc. array with a\n\t\t// condition and bindings\n\t\tif ( $whereResult ) {\n\t\t\t$str = $whereResult;\n\n\t\t\tif ( is_array($whereResult) ) {\n\t\t\t\t$str = $whereResult['condition'];\n\n\t\t\t\tif ( isset($whereResult['bindings']) ) {\n\t\t\t\t\tself::add_bindings($bindings, $whereResult);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t$where = $where ?\n\t\t\t\t$where .' AND '.$str :\n\t\t\t\t'WHERE '.$str;\n\t\t}\n\n\t\t// Main query to actually get the data\n\t\t$data = self::sql_exec( $db, $bindings,\n\t\t\t\"SELECT  `$tablesAS`.`\".implode(\"`, `$tablesAS`.`\", self::pluck($columns, 'db')).\"`\n\t\t\t $select\n\t\t\t FROM `$table` AS `$tablesAS`\n\t\t\t $join\n\t\t\t $join_filter\n\t\t\t $where\n\t\t\t GROUP BY `{$tablesAS}`.`{$primaryKey}`\n\t\t\t $order\n\t\t\t $limit\"\n\t\t);\n\n\t\t// Data set length after filtering\n\t\t$resFilterLength = self::sql_exec( $db, $bindings,\n\t\t\t\"SELECT COUNT(DISTINCT `{$tablesAS}`.`{$primaryKey}`)\n\t\t\t FROM   `$table` AS `$tablesAS`\n\t\t\t $join\n\t\t\t $join_filter\n\t\t\t $where\"\n\t\t);\n\t\t$recordsFiltered = (isset($resFilterLength[0])) ? $resFilterLength[0][0] : 0;\n\n\t\t// Total data set length\n\t\t$resTotalLength = self::sql_exec( $db, $bindings,\n\t\t\t\"SELECT COUNT(`{$tablesAS}`.`{$primaryKey}`)\n\t\t\t FROM   `$table` AS `$tablesAS`\n\t\t\t $join\n\t\t\t $join_filter\n\t\t\t $where\"\n\t\t);\n\t\t$recordsTotal = (isset($resTotalLength[0])) ? $resTotalLength[0][0] : 0;\n\n\t\t/*\n\t\t * Output\n\t\t */\n\t\treturn array(\n\t\t\t\"draw\"            => isset ( $request['draw'] ) ?\n\t\t\t\tintval( $request['draw'] ) :\n\t\t\t\t0,\n\t\t\t\"recordsTotal\"    => intval( $recordsTotal ),\n\t\t\t\"recordsFiltered\" => intval( $recordsFiltered ),\n\t\t\t\"data\"            => self::data_output( $columns, $data )\n\t\t);\n\t}\n\n\n\t/**\n\t * Connect to the database\n\t *\n\t * @param  array $sql_details SQL server connection details array, with the\n\t *   properties:\n\t *     * host - host name\n\t *     * db   - database name\n\t *     * user - user name\n\t *     * pass - user password\n\t * @return resource Database connection handle\n\t */\n\tstatic function sql_connect ( $sql_details )\n\t{\n\t\ttry {\n\t\t\t$db = @new PDO(\n\t\t\t\t\"mysql:host={$sql_details['host']};dbname={$sql_details['db']}\",\n\t\t\t\t$sql_details['user'],\n\t\t\t\t$sql_details['pass'],\n\t\t\t\tarray( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )\n\t\t\t);\n\t\t}\n\t\tcatch (PDOException $e) {\n\t\t\tself::fatal(\n\t\t\t\t\"An error occurred while connecting to the database. \".\n\t\t\t\t\"The error reported by the server was: \".$e->getMessage()\n\t\t\t);\n\t\t}\n\n\t\treturn $db;\n\t}\n\n\n\t/**\n\t * Execute an SQL query on the database\n\t *\n\t * @param  resource $db  Database handler\n\t * @param  array    $bindings Array of PDO binding values from bind() to be\n\t *   used for safely escaping strings. Note that this can be given as the\n\t *   SQL query string if no bindings are required.\n\t * @param  string   $sql SQL query to execute.\n\t * @return array         Result from the query (all rows)\n\t */\n\tstatic function sql_exec ( $db, $bindings, $sql=null )\n\t{\n\t\t// Argument shifting\n\t\tif ( $sql === null ) {\n\t\t\t$sql = $bindings;\n\t\t}\n\n\t\t$stmt = $db->prepare( $sql );\n\n\t\t// Bind parameters\n\t\tif ( is_array( $bindings ) ) {\n\t\t\tfor ( $i=0, $ien=count($bindings) ; $i<$ien ; $i++ ) {\n\t\t\t\t$binding = $bindings[$i];\n\t\t\t\t$stmt->bindValue( $binding['key'], $binding['val'], $binding['type'] );\n\t\t\t}\n\t\t}\n\n\t\t// Execute\n\t\ttry {\n\t\t\t$stmt->execute();\n\t\t}\n\t\tcatch (PDOException $e) {\n\t\t\tself::fatal( \"An SQL error occurred: \".$e->getMessage() );\n\t\t}\n\n\t\t// Return all\n\t\treturn $stmt->fetchAll( PDO::FETCH_BOTH );\n\t}\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Internal methods\n\t */\n\n\t/**\n\t * Throw a fatal error.\n\t *\n\t * This writes out an error message in a JSON string which DataTables will\n\t * see and show to the user in the browser.\n\t *\n\t * @param  string $msg Message to send to the client\n\t */\n\tstatic function fatal ( $msg )\n\t{\n\t\techo json_encode( array(\n\t\t\t\"error\" => $msg\n\t\t) );\n\n\t\texit(0);\n\t}\n\n\t/**\n\t * Create a PDO binding key which can be used for escaping variables safely\n\t * when executing a query with sql_exec()\n\t *\n\t * @param  array &$a    Array of bindings\n\t * @param  *      $val  Value to bind\n\t * @param  int    $type PDO field type\n\t * @return string       Bound key to be used in the SQL where this parameter\n\t *   would be used.\n\t */\n\tstatic function bind ( &$a, $val, $type )\n\t{\n\t\t$key = ':binding_'.count( $a );\n\n\t\t$a[] = array(\n\t\t\t'key' => $key,\n\t\t\t'val' => $val,\n\t\t\t'type' => $type\n\t\t);\n\n\t\treturn $key;\n\t}\n\n\tstatic function add_bindings(&$bindings, $vals)\n\t{\n\t\tforeach($vals['bindings'] as $key => $value) {\n\t\t\t$bindings[] = array(\n\t\t\t\t'key' => $key,\n\t\t\t\t'val' => $value,\n\t\t\t\t'type' => PDO::PARAM_STR\n\t\t\t);\n\t\t}\n\t}\n\n\n\t/**\n\t * Pull a particular property from each assoc. array in a numeric array,\n\t * returning and array of the property values from each item.\n\t *\n\t *  @param  array  $a    Array to get data from\n\t *  @param  string $prop Property to read\n\t *  @return array        Array of property values\n\t */\n\tstatic function pluck ( $a, $prop )\n\t{\n\t\t$out = array();\n\n\t\tfor ( $i=0, $len=count($a) ; $i<$len ; $i++ ) {\n \t\t\tif ( empty($a[$i][$prop]) && $a[$i][$prop] !== 0 ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif ( $prop == 'db' && isset($a[$i]['dummy']) && $a[$i]['dummy'] === true ) {\n    \t\t\tcontinue;\n\t\t\t}\n\n\t\t\t//removing the $out array index confuses the filter method in doing proper binding,\n\t\t\t//adding it ensures that the array data are mapped correctly\n\t\t\t$out[$i] = $a[$i][$prop];\n\t\t}\n\n\t\treturn $out;\n\t}\n\n\n\t/**\n\t * Return a string from an array or a string\n\t *\n\t * @param  array|string $a Array to join\n\t * @param  string $join Glue for the concatenation\n\t * @return string Joined string\n\t */\n\tstatic function _flatten ( $a, $join = ' AND ' )\n\t{\n\t\tif ( ! $a ) {\n\t\t\treturn '';\n\t\t}\n\t\telse if ( $a && is_array($a) ) {\n\t\t\treturn implode( $join, $a );\n\t\t}\n\t\treturn $a;\n\t}\n}\n\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/.gitattributes",
    "content": "examples/ export-ignore\ntests/ export-ignore\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/.github/issue_template.md",
    "content": "- Adldap2 Version: #.#\n- LDAP Type: <!-- Active Directory / OpenLDAP / FreeIPA / Sun Directory Server? -->\n- PHP Version: #.#\n\n<!-- **ISSUES WITHOUT THE ABOVE INFORMATION WILL BE CLOSED!** -->\n\n### Description:\n\n\n### Steps To Reproduce:\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/.gitignore",
    "content": "/.idea\n/vendor\ncomposer.lock\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/.scrutinizer.yml",
    "content": "filter:\n    excluded_paths:\n        - tests/*\n        - src/Schemas/*\nbuild:\n    nodes:\n        analysis:\n            tests:\n                override:\n                    - command: php-scrutinizer-run\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/.styleci.yml",
    "content": "preset: recommended\n\nenabled:\n  - length_ordered_imports\n\ndisabled:\n  - alpha_ordered_imports"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/.travis.yml",
    "content": "language: php\n\nphp:\n  - 7.1\n  - 7.2\n  - 7.3\n  - 7.4\n\nbefore_script:\n  - travis_retry composer self-update\n  - travis_retry composer install --prefer-source --no-interaction\n\nscript: ./vendor/bin/phpunit\n\nbranches:\n  only:\n    - master\n    - v9.0\n    - v8.0\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/composer.json",
    "content": "{\n    \"name\": \"adldap2/adldap2\",\n    \"type\": \"library\",\n    \"description\": \"A PHP LDAP Package for humans.\",\n    \"keywords\": [\n        \"active directory\",\n        \"directory\",\n        \"ad\",\n        \"ldap\",\n        \"windows\",\n        \"adldap\",\n        \"adldap2\"\n    ],\n    \"license\": \"MIT\",\n    \"support\": {\n        \"docs\": \"https://github.com/Adldap2/Adldap2/blob/master/readme.md\",\n        \"issues\": \"https://github.com/Adldap2/Adldap2/issues\",\n        \"source\": \"https://github.com/Adldap2/Adldap2\",\n        \"email\": \"steven_bauman@outlook.com\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Steve Bauman\",\n            \"email\": \"steven_bauman@outlook.com\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.0\",\n        \"ext-ldap\": \"*\",\n        \"ext-json\": \"*\",\n        \"psr/log\": \"~1.0\",\n        \"psr/simple-cache\": \"~1.0\",\n        \"tightenco/collect\": \"~5.0|~6.0|~7.0|~8.0\",\n        \"illuminate/contracts\": \"~5.0|~6.0|~7.0|~8.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"~6.0|~7.0|~8.0\",\n        \"mockery/mockery\": \"~1.0\"\n    },\n    \"suggest\": {\n        \"ext-fileinfo\": \"fileinfo is required when retrieving user encoded thumbnails\"\n    },\n    \"archive\": {\n        \"exclude\": [\"/examples\", \"/tests\"]\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Adldap\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Adldap\\\\Tests\\\\\": \"tests/\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/.nojekyll",
    "content": ""
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/_coverpage.md",
    "content": "<!-- _coverpage.md -->\n\n# Adldap2\n\n<p align=\"center\">\n    <a href=\"https://travis-ci.org/Adldap2/Adldap2\"><img src=\"https://img.shields.io/travis/Adldap2/Adldap2.svg?style=flat-square\"/></a>\n    <a href=\"https://scrutinizer-ci.com/g/Adldap2/Adldap2/?branch=master\"><img src=\"https://img.shields.io/scrutinizer/g/adLDAP2/adLDAP2/master.svg?style=flat-square\"/></a>\n    <a href=\"https://packagist.org/packages/adldap2/adldap2\"><img src=\"https://img.shields.io/packagist/dt/adldap2/adldap2.svg?style=flat-square\"/></a>\n    <a href=\"https://packagist.org/packages/adldap2/adldap2\"><img src=\"https://img.shields.io/packagist/v/adldap2/adldap2.svg?style=flat-square\"/></a>\n    <a href=\"https://packagist.org/packages/adldap2/adldap2\"><img src=\"https://img.shields.io/packagist/l/adldap2/adldap2.svg?style=flat-square\"/></a>\n</p>\n\n> Working with LDAP doesn't need to be hard.\n\n<!-- background image -->\n![](media/bg.svg)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/_sidebar.md",
    "content": "<!-- _sidebar.md -->\n\n* Getting Started\n\n  * [Introduction](/)\n  * [Installation](installation.md)\n  * [Setup](setup.md)\n\n* Usage\n\n  * [Searching](searching.md)\n  * [Creating & Updating](models/model.md)\n  * [Events](events.md)\n  * [Logging](logging.md)\n  * [Working With Distiguished Names](distinguished-names.md)\n  * [Troubleshooting](troubleshooting.md)\n\n* Models\n  * [Model (Base)](models/model.md)\n  * [Computer](models/computer.md)\n  * [Contact](models/contact.md)\n  * [Container](models/container.md)\n  * [Group](models/group.md)\n  * [Organizational Unit](models/ou.md)\n  * [Printer](models/printer.md)\n  * [RootDse](models/root-dse.md)\n  * [User](models/user.md)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/distinguished-names.md",
    "content": "## Working With Distinguished Names\n\nWorking with DN strings are a pain, but they're about to get easier. Adldap includes a DN builder for easily modifying and\ncreating DN strings.\n\n> **Note**: All values inserted into DN methods are escaped. You do not need to escape **any** values before hand.\n\n#### Creating a New DN\n\nTo create a new DN, construct a new `Adldap\\Models\\Attributes\\DistinguishedName` instance:\n\n```php\n$dn = new Adldap\\Models\\Attributes\\DistinguishedName();\n```\n    \nYou can also pass in a current DN string and start modifying it:\n\n```php\n$currentDn = 'cn=John Doe,ou=Accounting,dc=corp,dc=acme,dc=org';\n\n$dn = new Adldap\\Models\\Attributes\\DistinguishedName($currentDn);\n```\n    \n#### Adding / Removing a Domain Component\n\n```php\n// Add Domain Component\n$dn->addDc('corp');\n\n// Remove Domain Component\n$dn->removeDc('corp');\n```\n\n#### Adding / Removing an Organizational Unit\n\n```php\n// Add Organizational Unit\n$dn->addOu('Accounting');\n    \n// Remove Organizational Unit\n$dn->removeOu('Accounting');\n```\n\n#### Adding / Removing Common Names\n\n```php\n// Add Common Name\n$dn->addCn('John Doe');\n    \n// Remove Common Name\n$dn->removeCn('John Doe');   \n```\n\n#### Setting a base\n\nIf you'd like to set the base DN, such as a domain component RDN, use the `setBase()` method:\n\n```php\n$base = 'dc=corp,dc=acme,dc=org';\n\n$dn->setBase($base);\n```\n\n#### Creating a DN From A Model\n\nWhen you're creating a new LDAP record, you'll need to create a distinguished name as well. Let's go through an example of\ncreating a new user.\n\n```php\n$user = $provider->make()->user();\n\n$user->setCommonName('John Doe');\n$user->setFirstName('John');\n$user->setLastName('Doe');\n```\n\nSo we've set the basic information on the user, but we run into trouble when we want to put the user into a certain container\n(such as 'Accounting') which is done through the DN. Let's go through this example:\n\n```php\n$dn = $user->getDnBuilder();\n\n$dn->addCn($user->getCommonName());\n$dn->addOu('Accounting');\n$dn->addDc('corp');\n$dn->addDc('acme');\n$dn->addDc('org');\n\n// Returns 'cn=John Doe,ou=Accounting,dc=corp,dc=acme,dc=org'\necho $dn->get();\n\n// The DistinguishedName object also contains the __toString() magic method\n// so you can also just echo the object itself\necho $dn;\n```\n    \nNow we've built a DN, and all we have to do is set it on the new user:    \n\n```php\n$user->setDn($dn);\n\n$user->save();\n```\n\n#### Modifying a DN From A Model\n\nWhen you've received a model from a search result, you can build and modify the models DN like so:\n\n```php\n$user = $ad->users()->find('jdoe');\n\n$dn = $user->getDnBuilder();\n\n$dn->addOu('Users');\n\n$user->setDn($dn)->save();\n```\n\n#### Retrieving the RDN components\n\nTo retrieve all of the RDN components of a Distinguished Name, call `getComponents()`:\n\n```php\n$dn = new Adldap\\Models\\Attributes\\DistinguishedName(\n    'cn=John Doe,ou=Accounting,dc=corp,dc=acme,dc=org'\n);\n\n$components = $dn->getComponents();\n\nvar_dump($components);\n\n// Output:\n// array:5 [▼\n//   \"cn\" => array:1 [▼\n//     0 => \"John Doe\"\n//   ]\n//   \"uid\" => []\n//   \"ou\" => array:1 [▼\n//     0 => \"Accounting\"\n//   ]\n//   \"dc\" => array:3 [▼\n//     0 => \"corp\"\n//     1 => \"acme\"\n//     2 => \"org\"\n//   ]\n//   \"o\" => []\n// ]\n```\n\nYou can also specify a component you would like returned by supplying it as an argument:\n\n```php\n$dn = new Adldap\\Models\\Attributes\\DistinguishedName(\n    'cn=John Doe,ou=Accounting,dc=corp,dc=acme,dc=org'\n);\n\n$dcs = $dn->getComponents('dc');\n\nvar_dump($dcs);\n\n// Output:\n// array:3 [▼\n//   0 => \"corp\"\n//   1 => \"acme\"\n//   2 => \"org\"\n// ]\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/events.md",
    "content": "# Events\n\nAdldap2 events provide a method of listening for certain LDAP actions\nthat are called and execute tasks for that specific event.\n\n> **Note**: The Adldap2 event dispatcher was actually derived from the\n> [Laravel Framework](https://github.com/laravel/framework) with\n> Broadcasting & Queuing omitted to remove extra dependencies\n> that would be required with implementing those features.\n>\n> If you've utilized Laravel's events before, this will feel very familiar.\n\n## Registering Listeners\n\n> **Note**: Before we get to registering listeners, it's crucial to know that events throughout\n> Adldap2 are fired irrespective of the current connection or provider in use.\n>\n> This means that when using multiple LDAP connections, the same events will be fired.\n> \n> This allows you to set listeners on events that occur for all LDAP connections you utilize.\n>\n> If you are required to determine which events are fired from alternate connections, see [below](#determining-the-connection).\n\nTo register a listener on an event, retrieve the event dispatcher and call the `listen()` method:\n\n```php\nuse Adldap\\Auth\\Events\\Binding;\n\n$dispatcher = \\Adldap\\Adldap::getEventDispatcher();\n\n$dispatcher->listen(Binding::class, function (Binding $event) {\n    // Do something with the Binding event information:\n    \n    $event->connection; // Adldap\\Connections\\Ldap instance\n    $event->username; // 'jdoe@acme.org'\n    $event->password; // 'super-secret'\n});\n```\n\nThe first argument is the event name you would like to listen for, and the\nsecond is either a closure or class name that should handle the event:\n\nUsing a class:\n\n> **Note**: When using just a class name, the class must contain a public `handle()` method that will handle the event.\n\n```php\nuse Adldap\\Adldap;\nuse Adldap\\Auth\\Events\\Binding;\n\n$dispatcher = Adldap::getEventDispatcher();\n\n$dispatcher->listen(Binding::class, MyApp\\BindingEventHandler::class);\n```\n\n```php\nnamespace MyApp;\n\nuse Adldap\\Auth\\Events\\Binding;\n\nclass BindingEventHandler\n{\n    public function handle(Binding $event)\n    {\n        // Handle the event...\n    }\n}\n```\n\n## Model Events\n\nModel events are handled the same way as authentication events.\n\nSimply call the event dispatcher `listen()` method with the model event you are wanting to listen for:\n\n```php\nuse Adldap\\Models\\Events\\Saving;\n\n$dispatcher = \\Adldap\\Adldap::getEventDispatcher();\n\n$dispatcher->listen(Saving::class, function (Saving $event) {\n    // Do something with the Saving event information:\n    \n    // Returns the model instance being saved eg. `Adldap\\Models\\Entry`\n    $event->getModel();\n});\n```\n\n## Wildcard Event Listeners\n\nYou can register listeners using the `*` as a wildcard parameter to catch multiple events with the same listener.\n\nWildcard listeners will receive the event name as their first argument, and the entire event data array as their second argument:\n\n```php\n$dispatcher = Adldap::getEventDispatcher();\n\n// Listen for all model events.\n$dispatcher->listen('Adldap\\Models\\Events\\*', function ($eventName, array $data) {\n    echo $eventName; // Returns 'Adldap\\Models\\Events\\Updating'\n    var_dump($data); // Returns [0] => (object) Adldap\\Models\\Events\\Updating;\n});\n\n$user = $provider->search()->users()->find('jdoe');\n\n$user->setTelephoneNumber('555 555-5555');\n\n$user->save();\n```\n\n## Determining the Connection\n\nIf you're using multiple LDAP connections and you require the ability to determine which events belong\nto a certain connection, you can do so by verifying the host of the LDAP connection.\n\nHere's an example:\n\n```php\n$dispatcher = Adldap::getEventDispatcher();\n\n$dispatcher->listen(\\Adldap\\Models\\Events\\Creating::class, function ($event) {\n    $connection = $event->model->getConnection();\n    \n    $host = $connection->getHost();\n    \n    echo $host; // Displays 'ldap://192.168.1.1:386'\n});\n```\n\nAnother example with auth events:\n\n```php\n$dispatcher = Adldap::getEventDispatcher();\n\n$dispatcher->listen(\\Adldap\\Auth\\Events\\Binding::class, function ($event) {\n    $connection = $event->connection;\n    \n    $host = $connection->getHost();\n    \n    echo $host; // Displays 'ldap://192.168.1.1:386'\n});\n```\n\n## List of Events\n\n### Authentication Events\n\nThere are several events that are fired during initial and subsequent binds to your configured LDAP server.\n\nHere is a list of all events that are fired:\n\n| Event| Description |\n|---|---|\n| Adldap\\Auth\\Events\\Attempting | When any authentication attempt is called via: `$provider->auth()->attempt()` |\n| Adldap\\Auth\\Events\\Passed | When any authentication attempts pass via: `$provider->auth()->attempt()` |\n| Adldap\\Auth\\Events\\Failed | When any authentication attempts fail via: `$provider->auth()->attempt()` *Or* `$provider->auth()->bind()` |\n| Adldap\\Auth\\Events\\Binding | When any LDAP bind attempts occur via: `$provider->auth()->attempt()` *Or* `$provider->auth()->bind()` |\n| Adldap\\Auth\\Events\\Bound | When any LDAP bind attempts are successful via: `$provider->auth()->attempt()` *Or* `$provider->auth()->bind()` |\n\n### Model Events\n\nThere are several events that are fired during the creation, updating and deleting of all models.\n\nHere is a list of all events that are fired:\n\n| Event | Description |\n|---|---|\n| Adldap\\Models\\Events\\Saving | When a model is in the process of being saved via: `$model->save()` |\n| Adldap\\Models\\Events\\Saved | When a model has been successfully saved via: `$model->save()` |\n| Adldap\\Models\\Events\\Creating | When a model is being created via: `$model->save()` *Or* `$model->create()` |\n| Adldap\\Models\\Events\\Created | When a model has been successfully created via: `$model->save()` *Or* `$model->create()` |\n| Adldap\\Models\\Events\\Updating | When a model is being updated via: `$model->save()` *Or* `$model->update()` |\n| Adldap\\Models\\Events\\Updated | When a model has been successfully updated via: `$model->save()` *Or* `$model->update()` |\n| Adldap\\Models\\Events\\Deleting | When a model is being deleted via: `$model->delete()` |\n| Adldap\\Models\\Events\\Deleted | When a model has been successfully deleted via: `$model->delete()` |"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <title>Adldap2 Documentation</title>\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\" />\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n        <meta name=\"description\" content=\"Adldap2 Documentation\">\n        <meta name=\"viewport\" content=\"width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0\">\n        <link rel=\"stylesheet\" href=\"https://unpkg.com/docsify/lib/themes/vue.css\">\n    </head>\n\n    <body>\n        <div id=\"app\"></div>\n\n        <script>\n            window.$docsify = {\n                name: 'Adldap2',\n                repo: 'https://github.com/Adldap2/Adldap2',\n                autoHeader: true,\n                auto2top: true,\n                homepage: 'readme.md',\n                coverpage: true,\n                search: 'auto',\n                loadSidebar: true,\n                subMaxLevel: 3\n            }\n        </script>\n        \n\n        <script src=\"https://unpkg.com/docsify/lib/docsify.min.js\"></script>\n        <script src=\"https://unpkg.com/prismjs/components/prism-php.min.js\"></script>\n        <script src=\"https://unpkg.com/docsify/lib/plugins/search.min.js\"></script>\n    </body>\n</html>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/installation.md",
    "content": "# Requirements\n\nAdldap2 requires the following:\n\n- PHP 7.0 or greater\n- LDAP extension enabled in PHP\n- An LDAP server (ActiveDirectory, OpenLDAP, FreeIPA etc.)\n\n# Composer\n\nAdldap2 uses [Composer](https://getcomposer.org) for installation.\n\nOnce you have composer installed, run the following command in the root directory of your project:\n\n```bash\ncomposer require adldap2/adldap2\n```\n\nThen, if your application doesn't already require Composer's autoload, you will need to do it manually.\n\nInsert this line at the top of your projects PHP script (usually `index.php`):\n\n```php\nrequire __DIR__ . '/vendor/autoload.php';\n```\n\nYou're all set!\n\nNow, head over to the [setup guide](setup.md) to get up and running.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/logging.md",
    "content": "# Logging\n\nAdldap2 includes an implementation of PSR's widely supported [Logger](https://github.com/php-fig/log) interface.\n\nBy default, all of Adldap2's [events](events.md) will call the logger you have set to utilize.\n\n> **Note**: Adldap2 does not include a file / text logger. You must implement your own.\n\n## Registering & Enabling a Logger\n\nTo register a logger call `Adldap::setLogger()`. The logger must implement the `Psr\\Log\\LoggerInterface`.\n\n>**Note**: Be sure to set the logger prior to creating a new `Adldap` instance. This\n> ensures all events throughout the lifecycle of the request use your logger.\n\n```php\nuse Adldap\\Adldap;\n\nAdldap::setLogger($myLogger);\n\n$config = ['...'];\n\n$ad = new Adldap();\n\n$ad->addProvider($config);\n```\n\n## Disabling Logging\n\nIf you need to disable the event logger after a certain set of operations, simply pass in `null` and logging will be disabled:\n\n```php\nuse Adldap\\Adldap;\n\nAdldap::setLogger($myLogger);\n\n$config = ['...'];\n\n$ad = new Adldap();\n\n$ad->addProvider($config);\n\ntry {\n    $ad->connect();\n    \n    // Disable logging anything else.\n    Adldap::setLogger(null);\n} catch (\\Adldap\\Connections\\BindException $e) {\n    //\n}\n```\n\n## Logged Information\n\nHere is a list of events that are logged along with the information included:\n\n| Authentication Events | Logged |\n|---|---|\n| `Adldap\\Auth\\Events\\Attempting` | `LDAP (ldap://192.168.1.1:389) - Operation: Adldap\\Auth\\Events\\Attempting - Username: CN=Steve Bauman,OU=Users,DC=corp,DC=acme,DC=org` | \n| `Adldap\\Auth\\Events\\Binding` |` LDAP (ldap://192.168.1.1:389) - Operation: Adldap\\Auth\\Events\\Binding - Username: CN=Steve Bauman,OU=Users,DC=corp,DC=acme,DC=org` | \n| `Adldap\\Auth\\Events\\Bound` | `LDAP (ldap://192.168.1.1:389) - Operation: Adldap\\Auth\\Events\\Bound - Username: CN=Steve Bauman,OU=Users,DC=corp,DC=acme,DC=org` | \n| `Adldap\\Auth\\Events\\Passed` | `LDAP (ldap://192.168.1.1:389) - Operation: Adldap\\Auth\\Events\\Passed - Username: CN=Steve Bauman,OU=Users,DC=corp,DC=acme,DC=org` | \n| `Adldap\\Auth\\Events\\Failed` | `LDAP (ldap://192.168.1.1:389) - Operation: Adldap\\Auth\\Events\\Failed - Username: CN=Steve Bauman,OU=Users,DC=corp,DC=acme,DC=org - Result: Invalid Credentials` |\n\n| Model Events | Logged |\n|---|---|\n| `Adldap\\Models\\Events\\Saving` | `LDAP (ldap://192.168.1.1:389) - Operation: Saving - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Saved` | `LDAP (ldap://192.168.1.1:389) - Operation: Saved - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Creating` | `LDAP (ldap://192.168.1.1:389) - Operation: Creating - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Created` | `LDAP (ldap://192.168.1.1:389) - Operation: Created - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Updating` | `LDAP (ldap://192.168.1.1:389) - Operation: Updating - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Updated` | `LDAP (ldap://192.168.1.1:389) - Operation: Updated - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Deleting` | `LDAP (ldap://192.168.1.1:389) - Operation: Deleting - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n| `Adldap\\Models\\Events\\Deleted` | `LDAP (ldap://192.168.1.1:389) - Operation: Deleted - On: Adldap\\Models\\User - Distinguished Name: cn=John Doe,dc=acme,dc=org` | \n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/computer.md",
    "content": "# The Computer Model\n\n> **Note**: This model contains the traits `HasDescription`, `HasLastLogonAndLogOff` & `HasCriticalSystemObject`.\n> For more information, visit the documentation:\n>\n> [HasDescription](/models/traits/has-description.md),\n> [HasLastLogonAndLogOff](/models/traits/has-last-login-last-logoff.md),\n> [HasCriticalSystemObject](/models/traits/has-critical-system-object.md)\n\n## Methods\n\n```php\n$computer = $provider->search()->computers()->find('ACME-EXCHANGE');\n\n// Returns 'Windows Server 2003'\n$computer->getOperatingSystem();\n\n// Returns '5.2 (3790)';\n$computer->getOperatingSystemVersion();\n\n// Returns 'Service Pack 1';\n$computer->getOperatingSystemServicePack();\n\n// Returns 'ACME-DESKTOP001.corp.acme.org'\n$computer->getDnsHostName();\n\n$computer->getLastLogOff();\n\n$computer->getLastLogon();\n\n$computer->getLastLogonTimestamp();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/contact.md",
    "content": "# The Contact Model\n\nThe Contact model extends from the base `Adldap\\Models\\Model` class and contains\nno specific methods / attributes that are limited to it.\n\n## Creation\n\n```php\n// Adldap\\Models\\Contact\n$contact = $provider->make()->contact([\n    'cn' => 'Suzy Doe',\n]);\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/container.md",
    "content": "# The Container Model\n\n> **Note**: This model contains the trait `HasDescription` & `HasCriticalSystemObject`.\n> For more information, visit the documentation:\n> \n> [HasDescription](/models/traits/has-description.md),\n> [HasCriticalSystemObject](/models/traits/has-critical-system-object.md),\n\n## Creation\n\n```php\n// Adldap\\Models\\Container\n$container = $provider->make()->container([\n    'cn' => 'VPN Users',\n]);\n```\n\n## Methods\n\nThe `Container` model contains only one unique method.\n\n```php\n$flags = $container->getSystemFlags();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/group.md",
    "content": "# The Group Model\n\n> **Note**: This model contains the trait `HasMemberOf`.\n> For more information, visit the documentation:\n>\n> [HasMemberOf](/models/traits/has-member-of.md)\n\n## Creation\n\n```php\n// Adldap\\Models\\Group\n$group = $provider->make()->group([\n    'cn' => 'Managers',\n]);\n\n// Create group's DN through the DN Builder:\n$group = $provider->make()->group();\n\n$dn = $group->getDnBuilder();\n\n$dn->addOu('Workstation Computers');\n\n$dn->addCn(\"Managers\");\n\n$group->setDn($dn);\n\n// Or set the DN manually:\n$ou->setDn('cn=Managers,ou=Workstation Computers,dc=test,dc=local,dc=com');\n\n$group->save();\n```\n\n## Getting a groups members\n\nWhen you receive a `Group` model instance, it will contain a `member`\nattribute which contains the distinguished names of all\nthe members inside the group.\n\n```php\n$group = $provider->search()->groups()->first();\n\nforeach ($group->members as $member) {\n    echo $member; // 'cn=John Doe,dc=corp,dc=acme,dc=org'\n}\n```\n\nBut this might not be useful, since we might actually want the models for each member.\n\nThis can be easily done with the `getMembers()` method on the group.\n\n```php\n$group = $provider->search()->groups()->first();\n\nforeach ($group->getMembers() as $member) {\n    echo get_class($member); // Instance of `Adldap\\Models\\Model`\n\n    echo $member->getCommonName();\n}\n```\n\n> **Note**: You should be aware however, that calling the `getMembers()` method will\n> query your `AD` server for **every** member contained in the group to retrieve\n> its model. For larger group sets it may be worth paginating them.\n\n\n### Paginating Group Members\n\nThe group you're looking for might contain hundreds / thousands of members.\n\nIn this case, your server might only return you a portion of the groups members.\n\nTo get around this limit, you need to ask your server to paginate the groups members through a select:\n\n```php\n$group = $provider->search()->groups()->select('member;range=0-500')->first();\n\nforeach ($group->members as $member) {\n    // We'll only have 500 members in this query.\n}\n```\n\nNow, when we have the group instance, we'll only have the first `500` members inside this group.\nHowever, calling the `getMembers()` method will automatically retrieve the rest of the members for you:\n\n```php\n$group = $provider->search()->groups()->select('member;range=0-500')->first();\n\nforeach ($group->getMembers() as $member) {\n    // Adldap will automatically retrieve the next 500\n    // records until it's retrieved all records.\n    $member->getCommonName();\n}\n```\n\n> **Note**: Groups containing large amounts of users (1000+) will require\n> more memory assigned to PHP. Your mileage will vary.\n\n#### Paginating large sets of Group Members\n\nWhen requesting group members from groups that contain a large amount of members\n(typically over 1000), you may receive PHP memory limit errors due to\nthe large amount of the objects being created in the request.\n\nTo resolve this, you will need to retrieve the members manually. However using\nthis route you will only be able to retrieve the members distinguished names.\n\n```php\n$from = 0;\n$to = 500;\n$range = \"member;range=$from-$to\";\n\n// Retrieve the group.\n$group = $provider->search()->select($range)->raw()->find('Accounting');\n\n// Remove the count from the member array.\nunset($group[$range]['count']);\n\n// The array of group members distinguished names.\n$members = $group[$range];\n\nforeach ($members as $member) {\n    echo $member; // 'cn=John Doe,dc=acme,dc=org'\n}\n```\n\nYou can then encapsulate the above example into a recursive function to retrieve the remaining group members.\n\n## Getting only a groups member names\n\nTo retrieve only the names of the members contained in a group, call the `getMemberNames()` method:\n\n```php\nforeach ($group->getMemberNames() as $name) {\n    // Returns 'John Doe' \n    echo $name;\n}\n```\n\n> **Note**: This method does not query your server for each member to retrieve its name. It\n> only parses the distinguished names from the groups `member` attribute. This means that\n> if you have paginated group members, you will need to perform another query yourself\n> to retrieve the rest of the member names (or just call the `getMembers()` method).\n\n## Setting Group Members\n\nTo set members that are apart of the group, you can perform this in two ways:\n\n> **Note**: Remember, this will remove **all** pre-existing members, and set the new given members on the group.\n\n```php\n$members = [\n    'cn=John Doe,dc=corp,dc=acme,dc=org',\n    'cn=Jane Doe,dc=corp,dc=acme,dc=org',\n];\n\n$group->setMembers($members);\n\n$group->save();\n```\n\nOr manually:\n\n```php\n$group->member = [\n    'cn=John Doe,dc=corp,dc=acme,dc=org',\n    'cn=Jane Doe,dc=corp,dc=acme,dc=org',\n];\n\n$group->save();\n```\n\n## Adding One Member\n\nTo add a single member to a group, use the `addMember()` method:\n\n> **Note**: You do not need to call the `save()` method after adding a\n> member. It's automatically called so you can determine\n> if the member was successfully added.\n\n```php\n// We can provide a model, or just a plain DN of the new member\n$user = $provider->search()->users()->first();\n\nif ($group->addMember($user)) {\n    // User was successfully added to the group!\n}\n\n// Or\n\n$user = 'cn=John Doe,dc=corp,dc=acme,dc=org';\n\nif ($group->addMember($user)) {\n    //\n}\n```\n\n## Adding Multiple Group Members\n\nTo add multiple members to a group, use the `addMembers()` method:\n\n> **Note**: You do not need to call the `save()` method after adding\n> members. It's automatically called so you can determine\n> if the members were successfully added.\n\n```php\n$members = [\n    'cn=John Doe,dc=corp,dc=acme,dc=org',\n    'cn=Jane Doe,dc=corp,dc=acme,dc=org',\n];\n\n$group->addMembers($members);\n\n// Or\n\n$user = $provider->search()->users()->first();\n\nif ($group->addMembers($user)) {\n    //\n}\n```\n\n## Removing One Member\n\nTo remove a single member to a group, use the `removeMember()` method:\n\n```php\n// We can provide a model, or just a plain DN of the existing member\n$group = $provider->search()->groups()->first();\n\n$member = $group->getMembers()->first();\n\nif ($group->removeMember($member)) {\n    // Member was successfully removed from the group!\n}\n\n// Or\n\n$user = 'cn=John Doe,dc=corp,dc=acme,dc=org';\n\nif ($group->removeMember($user)) {\n    //\n}\n```\n\n## Removing All Members\n\nTo remove all members, use the `removeMembers()` method:\n\n```php\nif ($group->removeMembers()) {\n    // All members were successfully removed!\n}\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/model.md",
    "content": "# Creating / Updating\n\n## Introduction\n\nAdldap2 implements the [ActiveRecord](https://en.wikipedia.org/wiki/Active_record_pattern) pattern.\nThis means that each LDAP record in your directory is represented as it's own model instance.\n\n## Creating\n\nCreating LDAP entries manually is always a pain, but Adldap2 makes it effortless. Let's get started.\n\nWhen you have a provider instance, call the `make()` method. This returns an `Adldap\\Models\\Factory` instance:\n\n```php\n$factory = $provider->make();\n```\n\nOr you can chain all methods if you'd prefer:\n\n```php\n$user = $provider->make()->user();\n```\n\n### Available Make Methods\n\nWhen calling a make method, all of them accept an `$attributes` parameter\nto fill the model with your specified attributes.\n\n```php\n// Adldap\\Models\\User\n$user = $provider->make()->user([\n    'cn' => 'John Doe',\n]);\n\n// Adldap\\Models\\Computer\n$computer = $provider->make()->computer([\n    'cn' => 'COMP-101',\n]);\n\n// Adldap\\Models\\Contact\n$contact = $provider->make()->contact([\n    'cn' => 'Suzy Doe',\n]);\n\n// Adldap\\Models\\Container\n$container = $provider->make()->container([\n    'cn' => 'VPN Users',\n]);\n\n// Adldap\\Models\\Group\n$group = $provider->make()->group([\n    'cn' => 'Managers',\n]);\n\n// Adldap\\Models\\OrganizationalUnit\n$ou = $provider->make()->ou([\n    'name' => 'Acme',\n]);\n```\n\n## Saving\n\nWhen you have any model instance, you can call the `save()` method to persist the\nchanges to your server. This method returns a `boolean`. For example:\n\n```php\n$user = $provider->make()->user([\n    'cn' => 'New User',\n]);\n\nif ($user->save()) {\n    // User was saved.\n} else {\n    // There was an issue saving this user.\n}\n```\n\n> **Note**: When a model is saved successfully (whether created or updated), the\n> models attributes are re-synced in the background from your LDAP server.\n> \n> This allows you to perform other operations during the same\n> request that require an existing model.\n\n### Creating (Manually)\n\nIf you are sure the model **does not exist** already inside your LDAP directory, you can use the `create()` method:\n\n```php\n$user = $provider->make()->user([\n    'cn' => 'New User',\n]);\n\nif ($user->create()) {\n    // User was created.\n} else {\n    // There was an issue creating this user.\n}\n```\n\n> **Note**: When you call the create method, if the model does not have a\n> distinguished name, one will automatically be generated for you using your\n> `base_dn` set in your configuration and the models common name.\n\n### Updating (Manually)\n\nIf you are sure the model **does exist** already inside your LDAP directory, you can use the `update()` method:\n\n```php\n$user = $provider->search()->whereEquals('cn', 'John Doe')->firstOrFail();\n\n$user->displayName = 'Suzy Doe';\n\nif ($user->update()) {\n    // User was updated.\n} else {\n    // There was an issue updating this user.\n}\n```\n\n## Checking Existence\n\nIf you need to check the existence of a model, use the property `exists`.\n\nHow does it know if the model exists in your LDAP directory? Well, when models are constructed from\nsearch results, the `exists` property on the model is set to `true`.\n\n```php\n$user = $provider->search()->find('jdoe');\n\n$user->exists; // Returns true.\n\nif ($user->delete()) {\n    $user->exists; // Returns false.\n}\n```\n\nIf a model is created successfully, the `exists` property is set to `true`:\n\n```php\n$user = $provider->make()->user([\n    'cn' => 'John Doe',\n]);\n\n$user->exists; // Returns false.\n\nif ($user->save()) {\n    $user->exists; // Returns true.\n}\n```\n\n## Attributes\n\nDue to LDAPs multi-valued nature, all LDAP attributes inside a model have their own array.\n\nFor example, a models attributes may contain the following:\n\n```php\nvar_dump($user->getAttributes());\n\n// Returns:\n/*\n[\n    'cn' => [\n        0 => 'John Doe',\n    ],\n    'sn' => [\n        0 => 'Doe',\n    ],\n    'givenname' => [\n        0 => 'John'\n    ],\n    'useraccountcontrol' => [\n        0 => 512\n    ],\n    'mail' => [\n        0 => 'jdoe@acme.org',\n        1 => 'john-doe@acme.org',\n    ],\n    'memberof' => [\n        0 => 'cn=Accountants,ou=Groups,dc=acme,dc=org',\n        1 => 'cn=Employees,ou=Groups,dc=acme,dc=org',\n        2 => 'cn=Users,ou=Groups,dc=acme,dc=org',\n    ],\n]\n*/\n```\n\nYou can notice in the above dumped array that each attribute contains\nits own array with a value assigned to the first key.\n\nSince all models extend from the base class `Adldap\\Models\\Model`, there\nare many useful methods that you can use on every model to easily\nretrieve these attributes you're looking for.\n\n### Getting Attributes\n\nYou can get attributes in a few ways:\n\n```php\n// Returns an array all of the users attributes.\n$user->getAttributes();\n\n// Returns an array of all the users email addresses.\n// Returns `null` if non-existent.\n$user->getAttribute('mail');\n\n// Returns the users first email address.\n// Returns `null` if non-existent.\n$user->getAttribute('mail', 0);\n\n// Returns the users first email address.\n// Returns `null` if non-existent.\n$user->getFirstAttribute('mail');\n\n// Returns an array of all the users email addresses. \n$user->mail;\n\n// Returns the users first email address.\n$user->mail[0];\n```\n\n#### Using a Getter\n\nSome attributes have methods for easier retrieval so you don't need to look up the LDAP attribute name.\n\nFor example, to retrieve a users email address, use the method `getEmail()`:\n\n```php\n$user->getEmail();\n```\n\n##### Other Methods\n\nThe following methods are available on all returned models:\n\n```php\n// Returns the model's 'name' attribute.\n$model->getName();\n\n// Returns the model's 'cn' attribute.\n$model->getCommonName();\n\n// Returns the model's 'displayname' attribute.\n$model->getDisplayName();\n\n// Returns the model's 'samaccountname' attriubte.\n$model->getAccountName();\n\n// Returns the model's 'samaccounttype` attribute.\n$model->getAccountType();\n\n// Returns the model's 'whencreated` attribute.\n$model->getCreatedAt();\n\n// Returns the model's 'whencreated` attribute in a MySQL timestamp format.\n$model->getCreatedAtDate();\n\n// Returns the model's 'whencreated' attribute in unix time.\n$model->getCreatedAtTimestamp();\n\n// Returns the model's 'whenchanged` attribute.\n$model->getUpdatedAt();\n\n// Returns the model's 'whenchanged` attribute in a MySQL timestamp format.\n$model->getUpdatedAtDate();\n\n// Returns the model's 'whenchanged` attribute in unix time.\n$model->getUpdatedAtTimestamp();\n\n// Returns the model's 'objectclass' attribute.\n$model->getObjectClass();\n\n// Returns the model's root object category string.\n$model->getObjectCategory();\n\n// Returns the model's object category in an array.\n$model->getObjectCategoryArray();\n\n// Returns the model's object category distinguished name.\n$model->getObjectCategoryDn();\n\n// Returns the model's SID in binary.\n$model->getObjectSid();\n\n// Returns the model's GUID in binary.\n$model->getObjectGuid();\n\n// Returns the model's SID in a string.\n$model->getConvertedSid();\n\n// Returns the model's GUID in a string.\n$model->getConvertedGuid();\n\n// Returns the model's primary group ID.\n$model->getPrimaryGroupId();\n\n// Returns the model's 'instancetype' attribute.\n$model->getInstanceType();\n\n// Returns the model's 'maxpwdage' attribute.\n$model->getMaxPasswordAge();\n```\n\nFor more documentation on specific getters, please take a look at the relevant model documentation.\n\n#### Getting Dirty (Modified) Attributes\n\nYou can get a models modified attributes using the `getDirty()` method:\n\n```php\n$user = $provider->search()->users()->find('john');\n\n// Returns array [0 => 'John Doe']\nvar_dump($user->cn);\n\n$user->setAttribute('cn', 'Jane Doe');\n\n// Returns array ['cn' => [0 => 'Jane Doe']]\nvar_dump($user->getDirty());\n\n// The attribute has been modified - returns array [0 => 'Jane Doe']\nvar_dump($user->cn);\n```\n\nThe method returns an array with the key being the modified attribute,\nand the array being the new values of the attribute.\n\n#### Getting Original (Unmodified) Attributes\n\nYou can get a models original attributes using the `getOriginal()` method:\n\n```php\n$user = $provider->search()->users()->find('john');\n\n// Returns array [0 => 'John Doe']\nvar_dump($user->cn);\n\n$user->setAttribute('cn', 'Jane Doe');\n\n// The attribute has been modified - returns array [0 => 'Jane Doe']\nvar_dump($user->cn);\n\n// Retrieving the original value - returns array [0 => 'John Doe']\nvar_dump($user->getOriginal()['cn']);\n```\n\n> **Note**: Keep in mind, when you `save()` a model, the models original\n> attributes will be re-synchronized to the models new attributes.\n\n### Setting Attributes\n\nJust like getting model attributes, there's multiple ways of setting attributes as well:\n\n```php\n// Setting via method:\n$user->setAttribute('cn', 'John Doe');\n\n// Specifying a subkey for overwriting specific attributes:\n$user->setAttribute('mail', 'other-mail@mail.com', 0);\n\n// Setting the first attribute:\n$user->setFirstAttribute('mail', 'jdoe@mail.com');\n\n// Setting via property:\n$user->cn = 'John Doe';\n\n// Mass setting attributes:\n$user->fill([\n    'cn' => 'John Doe',\n    'mail' => 'jdoe@mail.com',\n]);\n```\n\n#### Setting Boolean Attributes\n\nWhen setting boolean attribute values, you cannot use `0` / `1` / `true` / `false` as these\nare simply converted to integer values when saving and your LDAP server will\nlikely return an error for doing so on certain attributes.\n\nYou will need to use the string versions of the boolean (`'TRUE'` / `'FALSE'`) for the\nboolean attribute to be set properly on your LDAP server.\n\nHere's an example:\n\n```php\n$user->setFirstAttribute('msExchHideFromAddressLists', 'TRUE');\n\n$user->save();\n```\n\n### Creating Attributes\n\nTo create an attribute that does not exist on the model, you can set it like a regular property:\n\n```php\n$user = $provider->search()->whereEquals('cn', 'John Doe')->firstOrFail();\n\n$user->new = 'New Attribute';\n\n$user->save();\n```\n\nIf the set attribute does not exist on the model already,\nit will automatically be created when you call the `save()` method.\n\nIf you'd like manually create new attributes individually, call the `createAttribute($attribute, $value)` method:\n\n```php\nif ($user->createAttribute('new', 'New Attribute')) {\n    // Attribute created.\n}\n```\n\n### Updating Attributes\n\nTo modify an attribute you can either use a setter method, or by setting it manually:\n\n> **Note**: You can also utilize setters to create new attributes if your model does not already have the attribute.\n\n```php\n$user = $provider->search()->whereEquals('cn', 'John Doe')->firstOrFail();\n\n$user->cn = 'New Name';\n\n// Or use a setter:\n\n$user->setCommonName('New Name');\n\n$user->save();\n```\n\nIf you'd like to update attributes individually, call the `updateAttribute($attribute, $value)` method:\n\n```php\nif ($user->updateAttribute('cn', 'New Name')) {\n    // Successfully updated attribute.\n}\n```\n\n### Removing Attributes\n\nTo remove attributes, set the attribute to `NULL`:\n\n```php\n$user->cn = null;\n\n$user->save();\n```\n\nOr, you can call the `deleteAttribute($attribute)` method:\n\n```php\nif ($user->deleteAttribute('cn')) {\n    // Attribute has been deleted.\n}\n```\n\n### Checking Attributes\n\n#### Checking Existence of Attributes\n\nTo see if a model contains an attribute, use the method `hasAttribute()`:\n\n```php\n// Checking if a base attribute exists:\nif ($user->hasAttribute('mail')) {\n    // This user contains an email address.\n}\n\n// Checking if a sub attribute exists, by key:\nif ($user->hasAttribute('mail', 1)) {\n    // This user contains a second email address.\n}\n```\n\n#### Counting the Models Attributes\n\nTo retrieve the total number of attributes, use the method `countAttributes()`:\n\n```php\n$count = $user->countAttributes();\n\nvar_dump($count); // Returns int\n```\n\n#### Checking if a Model is contained in an OU\n\nTo check if a model is located inside an OU, use the `inOu()` method:\n\n```php\nif ($model->inOu('User Accounts')) {\n    // This model is inside the 'User Accounts' OU.\n}\n```\n\nYou can also use an OU model instance:\n\n```php\n$serviceAccounts = $provider->search()->ous()->find('Service Accounts');\n\nif ($model->inOu($serviceAccounts)) {\n    // This model is inside the 'Service Accounts' OU.\n}\n```\n\n#### Checking if a Model is Writable\n\nTo check if the model can be written to, use the method `isWritable()`:\n\n```php\nif ($model->isWritable()) {\n    // You can modify this model.\n}\n```\n\n### Force Re-Syncing A Models Attributes\n\nIf you need to forcefully re-sync a models attributes, use the method `syncRaw()`:\n\n```php\n$user->syncRaw();\n```\n\n> **Note**: This will query your LDAP server for the current model, and re-synchronize\n> it's attributes. This is only recommended if your creating / updating / deleting\n> attributes manually through your LDAP connection.\n\n## Moving / Renaming\n\nTo move a user from one DN or OU to another, use the `move()` method:\n\n> **Note**: The `move()` method is actually an alias for the `rename()` method.\n\n```php\n// New parent distiguished name.\n$newParentDn = 'OU=New Ou,DC=corp,DC=local';\n\nif ($user->move($newParentDn)) {\n    // User was successfully moved to the new OU.\n}\n```\n\nYou can also provide a model to move the child model into:\n\n```php\n// New parent OU.\n$newParentOu = $provider->search()->ous()->find('Accounting');\n\nif ($user->move($newParentOu)) {\n    // User was successfully moved to the new OU.\n}\n```\n\nIf you would like to keep the models old RDN along side their new RDN, pass in false in the second parameter:\n\n```php\n// New parent distiguished name.\n$newParentDn = 'OU=New Ou,DC=corp,DC=local';\n\nif ($user->move($newParentDn, $deleteOldRdn = false)) {\n    // User was successfully moved to the new OU,\n    // and their old RDN has been left in-tact.\n}\n```\n\nTo rename a users DN, just pass in their new relative distinguished name in the `rename()` method:\n\n```php\n$newRdn = 'cn=New Name';\n\nif ($user->rename($newRdn)) {\n    // User was successfully renamed.\n}\n```\n\n## Deleting\n\nTo delete a model, just call the `delete()` method:\n\n```php\n$user = $provider->search()->whereEquals('cn', 'John Doe')->firstOrFail();\n\necho $user->exists; // Returns true.\n\nif ($user->delete()) {\n    // Successfully deleted user.\n\n    echo $user->exists; // Returns false.\n}\n```\n\n## Extending\n\n> **Note**: This feature was introduced in `v8.0.0`.\n\nTo use your own models, you will need to create a new [Schema](../schema.md).\n\nOnce you have created your own schema, you must insert it inside the construct of your provider.\n\nLet's walk through this process.\n\nFirst we'll create our model we'd like to extend / override:\n\n> **Note**: Your custom model **must** extend from an existing Adldap2 model.\n> This is due to methods and attributes that only exist on these classes.\n\n```php\nnamespace App\\Ldap\\Models;\n\nuse Adldap\\Models\\User as Model;\n\nclass User extends Model\n{\n    public function getCommonName()\n    {\n        // Overriding model method.\n    }\n}\n```\n\nNow, we'll create our custom schema and return our models class name:\n\n```php\nnamespace App\\Ldap\\Schemas;\n\nuse App\\Ldap\\Models\\User;\n\nclass LdapSchema extends ActiveDirectory\n{\n    public function userModel()\n    {\n        return User::class;\n    }\n}\n```\n\nFinally, when we create a provider, we need to insert our Schema into the configuration:\n\n```php\n$config = [\n    'hosts' => ['...'],\n    \n    'username' => 'admin',\n    'password' => 'P@ssword',\n    \n    'schema' => MyApp\\LdapSchema::class,\n];\n\n$ad = new Adldap($config);\n\n$provider = $ad->connect();\n\n// If `jdoe` exists, your custom model will be returned.\n$user = $provider->search()->users()->find('jdoe');\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/organization.md",
    "content": "# The Organization Model\n\nThe Organization model extends from the base `Adldap\\Models\\Model` class and contains\nno specific methods / attributes that are limited to it.\n\n## Creation\n\n```php\n// Adldap\\Models\\Organization\n$org = $provider->make()->organization([\n    'o' => 'Some Company',\n]);\n\n// Set the DN manually:\n\n$org->setDn('o=Some Company,dc=test,dc=local,dc=com');\n\n$org->save();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/ou.md",
    "content": "# The OrganizationalUnit Model\n\nThe OrganizationalUnit model extends from the base `Adldap\\Models\\Model` class and contains\nno specific methods / attributes that are limited to it.\n\n## Creation\n\n```php\n// Adldap\\Models\\OrganizationalUnit\n$ou = $provider->make()->ou([\n    'name' => 'Workstation Computers',\n]);\n\n// Generate the OU's DN through the DN Builder:\n\n$dn = $ou->getDnBuilder();\n\n$dn->addOu('Workstation Computers');\n\n$ou->setDn($dn);\n\n// Or set the DN manually:\n\n$ou->setDn('ou=Workstation Computers,dc=test,dc=local,dc=com');\n\n$ou->save();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/printer.md",
    "content": "# The Printer Model\n\n## Methods\n\n```php\n$printer->getPrinterName();\n\n$printer->getPrinterShareName();\n\n$printer->getMemory();\n\n$printer->getUrl();\n\n$printer->getLocation();\n\n$printer->getServerName();\n\n$printer->getColorSupported();\n\n$printer->getDuplexSupported();\n\n$printer->getMediaSupported();\n\n$printer->getStaplingSupported();\n\n$printer->getPrintBinNames();\n\n$printer->getPrintMaxResolution();\n\n$printer->getPrintOrientations();\n\n$printer->getDriverName();\n\n$printer->getDriverVersion();\n\n$printer->getPriority();\n\n$printer->getPrintStartTime();\n\n$printer->getPrintEndTime();\n\n$printer->getPortName();\n\n$printer->getVersionNumber();\n\n$printer->getPrintRate();\n\n$printer->getPrintRateUnit();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/root-dse.md",
    "content": "# The RootDse Model\n\n## Getting the Root DSE\n\nTo get the Root DSE of your LDAP server, call the `getRootDse()` method off a new search:\n\n```php\n$rootDse = $provider->search()->getRootDse();\n```\n\n## Getting the schema naming context\n\nTo get the Root DSE schema naming context, call the `getSchemaNamingContext()`:\n\n```php\n$rootDse = $provider->search()->getRootDse();\n\n$context = $rootDse->getSchemaNamingContext();\n\n// Returns 'cn=Schema,cn=Configuration,dc=corp,dc=acme,dc=org'\necho $context;\n```\n\n## Getting the root domain naming context\n\nTo get the Root DSE domain naming context, call the `getRootDomainNamingContext()`:\n\n```php\n$context = $rootDse->getRootDomainNamingContext();\n\n// Returns 'dc=corp,dc=acme,dc=org'\necho $context;\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/traits/has-critical-system-object.md",
    "content": "# HasCriticalSystemObject Trait\n\nModels that contain this trait, have the `isCriticalSystemObject` attribute.\n\nThere is only one method that accompanies this trait:\n\n```php\nif ($model->isCriticalSystemObject()) {\n\n    //\n\n}\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/traits/has-description.md",
    "content": "# HasDescription Trait\n\nModels that contain this trait, have the `description` attribute.\n\nThere are only two methods that accompany this trait:\n\n```php\n$model->getDescription();\n\n$model->setDescription('The models description');\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/traits/has-last-login-last-logoff.md",
    "content": "# HasLastLoginAndLastLogoff Trait\n\nModels that contain this trait have the `lastlogoff`, `lastlogon` and `lastlogontimestamp` attributes.\n\n## Methods\n\n```php\n// Returns the models's last log off attribute.\n$computer->getLastLogOff();\n\n//  Returns the models's last log on attribute.\n$computer->getLastLogon();\n\n// Returns the models's last log on timestamp attribute.\n$computer->getLastLogonTimestamp();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/traits/has-member-of.md",
    "content": "# HasMemberOf Trait\n\nModels that contain this trait, have the ability to be apart of a group.\n\nThere's many helpful methods to assist you in all of the operations related to group membership, let's get started!\n\n## Retrieving Groups\n\nTo retrieve the groups that a model is apart of, call the `getGroups()` method:\n\n```php\n$user = $provider->search()->users()->find('jdoe');\n\n$groups = $user->getGroups();\n\nforeach ($groups as $group) {\n\n    $group->getCommonName(); // ex. 'Accounting'\n\n}\n```\n\nWe can also pass in specific fields we need from the returned groups to speed up our queries.\n\nFor example, if we only need the groups common name:\n\n```php\n// Group models will be returned with only their common name.\n$groups = $user->getGroups(['cn']);\n```\n\nHowever, calling `getGroups()` will only retrieve the models immediate groups (non-recursive).\n\nTo retrieve nested groups, pass in `true` into the second parameter:\n\n```php\n$groups = $user->getGroups([], $recursive = true);\n```\n\n## Retrieve Group Names\n\nIf you only want the models group names, call the `getGroupNames()` method:\n\n```php\n$names = $user->getGroupNames();\n\nforeach ($names as $name) {\n\n    echo $name; // ex. 'Accounting'\n\n}\n```\n\nHowever, this method will also retrieve only the immediate groups names\nmuch like the `getGroups()` method. You'll need to pass in `true` in\nthe first parameter to retrieve results recursively.\n\n```php\n$names = $user->getGroupNames($recursive = true);\n```\n\n## Checking if the Model is apart of a Group\n\nTo check if a model is apart of a certain group, use the `inGroup()` method:\n\n```php\n$group = $provider->search()->groups()->find('Office');\n\nif ($user->inGroup($group)) {\n\n    //\n\n}\n```\n\nYou can also check for multiple memberships by passing in an array of groups:\n\n```php\n$groups = $provider->search()->findManyBy('cn', ['Accounting', 'Office']));\n\nif ($user->inGroup($groups->toArray()) {\n    \n    // This user is apart of the 'Accounting' and 'Office' group!\n\n}\n```\n\n> **Note**: Much like the other methods above, you'll need to provide a `$recursive`\n> flag to the `inGroup()` method if you'd like recursive results included.\n\nWe can also provide distinguished names instead of Group model instances:\n\n```php\n$dns = [\n    'cn=Accounting,ou=Groups,dc=acme,dc=org',\n    'cn=Office,ou=Groups,dc=acme,dc=org',\n];\n\nif ($user->inGroup($dns, $recursive = true)) {\n    \n    //\n\n}\n```\n\nOr, we can also just provide the name(s) of the group(s).\n\n```php\n$names = [\n    'Accounting',\n    'Office',\n];\n\nif ($user->inGroup($names, $recursive = true)) {\n    \n    //\n\n}\n```\n\n## Adding a Group\n\nTo add the model to a specific group, call the `addGroup()` method:\n\n```php\n$group = $provider->search()->groups()->find('Accounting');\n\n// You can either provide a Group model:\nif ($user->addGroup($group)) {\n\n    //\n\n}\n\n// Or a Groups DN:\nif ($user->addGroup('cn=Accounting,ou=Groups,dc=acme,dc=org')) {\n\n    //\n\n}\n```\n\n> **Note**: You do not need to call the `save()` method for adding / removing groups.\n> This is done automatically so you can perform clean `if` statements on the method.\n\n## Removing a Group\n\nTo remove the model from a specific group, call the `removeGroup()` method:\n\n```php\n$group = $user->getGroups()->first();\n\n// You can either provide a Group model:\nif ($user->removeGroup($group)) {\n\n    //\n\n}\n\n// Or the groups DN:\nif ($user->removeGroup('cn=Accounting,ou=Office Groups,dc=acme,dc=org')) {\n\n    //\n\n}\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/models/user.md",
    "content": "# The User Model\n\n> **Note**: This model contains the trait `HasMemberOf`. For more information, visit the documentation:\n> [HasMemberOfTrait](/models/traits/has-member-of.md)\n\n## Creating\n\n> **Note**: If you need to create users with passwords, SSL or TLS **must** be enabled on your configured connection.\n> \n> The password you enter for the user **must** also obey your LDAP servers password requirements,\n> otherwise you will receive a \"Server is unwilling to perform\" LDAP exception upon saving.\n\n```php\n// Construct a new User model instance.\n$user = $provider->make()->user();\n\n// Create the users distinguished name.\n// We're adding an OU onto the users base DN to have it be saved in the specified OU.\n$dn = $user->getDnBuilder()->addOu('Users'); // Built DN will be: \"CN=John Doe,OU=Users,DC=acme,DC=org\";\n\n// Set the users DN, account name.\n$user->setDn($dn);\n$user->setAccountName('jdoe');\n$user->setCommonName('John Doe');\n\n// Set the users password.\n// NOTE: This password must obey your AD servers password requirements\n// (including password history, length, special characters etc.)\n// otherwise saving will fail and you will receive an\n// \"LDAP Server is unwilling to perform\" message.\n$user->setPassword('correct-horse-battery-staple');\n\n// Get a new account control object for the user.\n$ac = $user->getUserAccountControlObject();\n\n// Mark the account as enabled (normal).\n$ac->accountIsNormal();\n\n// Set the account control on the user and save it.\n$user->setUserAccountControl($ac);\n\n// Save the user.\n$user->save();\n\n// All done! An enabled user will be created and is ready for use.\n```\n\n## Methods\n\nThere's a ton of available methods for the User model. Below is a list for a quick reference.\n\n> **Note**: Don't see a method for an LDAP attribute? Create an issue and let us know!\n\n```php\n// Get the users display name.\n$user->getDisplayName();\n\n// Get the users first email address.\n$user->getEmail();\n\n// Get the users title.\n$user->getTitle();\n\n// Get the users department.\n$user->getDepartment();\n\n// Get the users first name.\n$user->getFirstName();\n\n// Get the users last name.\n$user->getLastName();\n\n// Get the users info.\n$user->getInfo();\n\n// Get the users initials.\n$user->getInitials();\n\n// Get the users country.\n$user->getCountry();\n\n// Get the users street address.\n$user->getStreetAddress();\n\n// Get the users postal code.\n$user->getPostalCode();\n\n// Get the users physical delivery office name.\n$user->getPhysicalDeliveryOfficeName();\n\n// Get the users phone number.\n$user->getTelephoneNumber();\n\n// Get the users locale.\n$user->getLocale();\n\n// Get the users company.\n$user->getCompany();\n\n// Get the users other email addresses.\n$user->getOtherMailbox();\n\n// Get the users home mailbox database location (stored as a distinguished name). \n$user->getHomeMdb();\n\n// Get the users email nickname.\n$user->getMailNickname();\n\n// Get the users principal name.\n$user->getUserPrincipalName();\n\n// Get the users proxy email addresses.\n$user->getProxyAddresses();\n\n// Get the users failed login attempts.\n$user->getBadPasswordCount();\n\n// Get the users last failed login attempt timestamp.\n$user->getBadPasswordTime();\n\n// Get the users last password change timestamp.\n$user->getPasswordLastSet();\n\n// Get the users last password change timestamp in unix time.\n$user->getPasswordLastSetTimestamp();\n\n// Get the users last password change timestamp in MySQL date format.\n$user->getPasswordLastSetDate();\n\n// Get the users lockout time.\n$user->getLockoutTime();\n\n// Get the users user account control integer.\n$user->getUserAccountControl();\n\n// Get the users roaming profile path.\n$user->getProfilePath();\n\n// Get the users legacy exchange distinguished name.\n$user->getLegacyExchangeDn();\n\n// Get the users account expiry timestamp.\n$user->getAccountExpiry();\n\n// Get the boolean that determines whether to show this user in the global address book.\n$user->getShowInAddressBook();\n\n// Get the users thumbnail photo.\n$user->getThumbnail();\n\n// Get the users thumbnail photo (base64 encoded for HTML <img src=\"\"> tags).\n$user->getThumbnailEncoded();\n\n// Get the users jpeg photo.\n$user->getJpegPhoto();\n\n// Get the users jpeg photo (base64 encoded for HTML <img src=\"\"> tags).\n$user->getJpegPhotoEncoded();\n\n// Get the users manager.\n$user->getManager();\n\n// Get the users employee ID.\n$user->getEmployeeId();\n\n// Get the users employee number.\n$user->getEmployeeNumber();\n\n// Get the users employee type\n$user->getEmployeeType();\n\n// Get the users room number.\n$user->getRoomNumber();\n\n// Get the users department number.\n$user->getDepartmentNumber();\n\n// Get the users personal title.\n$user->getPersonalTitle();\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/readme.md",
    "content": "# Introduction\n\n## What is Adldap2?\n\nAdldap2 is a PHP LDAP package that allows you to:\n\n1. Easily manage multiple LDAP connections at once\n2. Perform authentication\n3. Search your LDAP directory with a fluent and easy to use query builder\n4. Create / Update / Delete LDAP entities with ease\n5. And more\n\n## History of Adldap2\n\nAdldap2 was originally created as a fork of the original LDAP library [adLDAP](https://github.com/adldap/adLDAP) due to bugs, and it being completely abandoned.\n\nAdldap2 contains absolutely no similarities to the original repository, and was built to be as easily accessible as possible, with great documentation, and easily understandable syntax.\n\nMuch of the API was constructed with Ruby's ActiveRecord and Laravel's Eloquent in mind, and to be an answer to the question:\n\n> _Why can't we use LDAP like we use a database?_\n\n## Why should you use Adldap2?\n\nWorking with LDAP in PHP can be a messy and confusing endeavor, especially when using multiple connections, creating and managing entities, performing moves, resetting passwords, and performing ACL modifications to user accounts.\n\nWrapper classes for LDAP are usually always created in PHP applications.\n\nAdldap2 allows you to easily manage the above problems without reinventing the wheel for every project.\n\n## Implementations\n\n- [Laravel](https://github.com/Adldap2/Adldap2-Laravel)\n\n## Quick Start\n\nInstall the package via `composer`:\n\n```\ncomposer require adldap2/adldap2\n```\n\nUse Adldap2:\n\n```php\n// Construct new Adldap instance.\n$ad = new \\Adldap\\Adldap();\n\n// Create a configuration array.\n$config = [  \n  // An array of your LDAP hosts. You can use either\n  // the host name or the IP address of your host.\n  'hosts'    => ['ACME-DC01.corp.acme.org', '192.168.1.1'],\n\n  // The base distinguished name of your domain to perform searches upon.\n  'base_dn'  => 'dc=corp,dc=acme,dc=org',\n\n  // The account to use for querying / modifying LDAP records. This\n  // does not need to be an admin account. This can also\n  // be a full distinguished name of the user account.\n  'username' => 'admin@corp.acme.org',\n  'password' => 'password',\n];\n\n// Add a connection provider to Adldap.\n$ad->addProvider($config);\n\ntry {\n    // If a successful connection is made to your server, the provider will be returned.\n    $provider = $ad->connect();\n\n    // Performing a query.\n    $results = $provider->search()->where('cn', '=', 'John Doe')->get();\n\n    // Finding a record.\n    $user = $provider->search()->find('jdoe');\n\n    // Creating a new LDAP entry. You can pass in attributes into the make methods.\n    $user =  $provider->make()->user([\n        'cn'          => 'John Doe',\n        'title'       => 'Accountant',\n        'description' => 'User Account',\n    ]);\n\n    // Setting a model's attribute.\n    $user->cn = 'John Doe';\n\n    // Saving the changes to your LDAP server.\n    if ($user->save()) {\n        // User was saved!\n    }\n} catch (\\Adldap\\Auth\\BindException $e) {\n\n    // There was an issue binding / connecting to the server.\n\n}\n```\n\n## Versioning\n\nAdldap2 is versioned under the [Semantic Versioning](http://semver.org/) guidelines as much as possible.\n\nReleases will be numbered with the following format:\n\n`<major>.<minor>.<patch>`\n\nAnd constructed with the following guidelines:\n\n* Breaking backward compatibility bumps the major and resets the minor and patch.\n* New additions without breaking backward compatibility bumps the minor and resets the patch.\n* Bug fixes and misc changes bumps the patch.\n\nMinor versions are not maintained individually, and you're encouraged to upgrade through to the next minor version.\n\nMajor versions are maintained individually through separate branches.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/searching.md",
    "content": "# Searching\n\n## Introduction\n\nUsing the Adldap2 query builder makes building LDAP queries feel effortless.\n\nIt allows you to generate LDAP filters using a fluent and\nconvenient interface, similar to Eloquent in Laravel.\n\n> **Note:** The Adldap2 query builder escapes all fields & values\n> given to its `where()` methods. There is no need to clean or\n> escape strings before passing them into the query builder.\n\n## Creating a new Query\n\nTo create a new search query, call the `search()` method on your connection provider instance:\n\n```php\n$search = $provider->search();\n```\n\nOr you can chain all your methods if you'd prefer:\n\n```php\n$results = $provider->search()->where('cn', '=', 'John Doe')->get();\n```\n\n## Selects\n\n> **Note:** Fields are case in-sensitive. For example, you can\n> insert `CN`, `cn` or `cN`, they will return the same result.\n\n#### Selecting attributes\n\nSelecting only the LDAP attributes you need will increase the speed of your queries.\n\n```php\n// Passing in an array of attributes\n$search->select(['cn', 'samaccountname', 'telephone', 'mail']);\n\n// Passing in each attribute as an argument\n$search->select('cn', 'samaccountname', 'telephone', 'mail');\n```\n\n## Executing Searches\n\n#### Finding a specific record\n\nIf you're trying to find a single record, but not sure what the record might be, use the `find()` method:\n\n```php\n$record = $search->find('John Doe');\n\nif ($record) {\n    // Record was found!    \n} else {\n    // Hmm, looks like we couldn't find anything...\n}\n```\n\n> **Note**: Using the `find()` method will search for LDAP records using ANR\n> (ambiguous name resolution) and return the first result.\n>\n> Since ActiveDirectory is the only LDAP distribution that supports ANR,\n> an equivalent query will be created for other LDAP distributions\n> that are not compatible.\n>\n> For a more fine-tuned search, use the `findBy()` method below.\n\n##### Finding a record (or failing)\n\nIf you'd like to try and find a single record and throw an exception when it hasn't been\nfound, use the `findOrFail()` method:\n\n```php\ntry {\n\n    $record = $search->findOrFail('John Doe');\n\n} catch (Adldap\\Models\\ModelNotFoundException $e) {\n    // Record wasn't found!\n}\n```\n\n#### Finding a record by a specific attribute\n\nIf you're looking for a single record with a specific attribute, use the `findBy()` method:\n\n```php\n// We're looking for a record with the 'samaccountname' of 'jdoe'.\n$record = $search->findBy('samaccountname', 'jdoe');\n```\n\n##### Finding a record by a specific attribute (or failing)\n\nIf you'd like to try and find a single record by a specific attribute and throw\nan exception when it cannot be found, use the `findByOrFail()` method:\n\n```php\ntry {\n\n    $record = $search->findByOrFail('samaccountname', 'jdoe');\n\n} catch (Adldap\\Models\\ModelNotFoundException $e) {\n    // Record wasn't found!\n}\n```\n\n#### Finding a record by its distinguished name\n\nIf you're looking for a single record with a specific DN, use the `findByDn()` method:\n\n```php\n$record = $search->findByDn('cn=John Doe,dc=corp,dc=org');\n```\n\n###### Finding a record by its distinguished name (or failing)\n\nIf you'd like to try and find a single record by a specific DN and throw\nan exception when it hasn't been found, use the `findByDnOrFail()` method:\n\n```php\ntry {\n\n    $record = $search->findByDnOrFail('cn=John Doe,dc=corp,dc=org');\n\n} catch (Adldap\\Models\\ModelNotFoundException $e) {\n    // Record wasn't found!\n}\n```\n\n#### Retrieving results\n\nTo get the results from a search, simply call the `get()` method:\n\n```php\n$results = $search->select(['cn', 'samaccountname'])->get();\n```\n\n> **Note**: Executed searches via the `get()` method will return them inside an\n> `Illuminate\\Support\\Collection` instance (a glorified array), with allows\n> you to utilize [some extremely handy methods](https://laravel.com/docs/collections).\n>\n> Executed searches via the `first()` method will return **a model instance only**.\n\n##### Retrieving the first record\n\nTo retrieve the first record of a search, call the `first()` method:\n\n```php\n$record = $search->first();\n```\n\n> **Note**: If you are using `sortBy()`, calling `first()` will not take this into account. Sorts\n> are performed **after** retrieving query results. If you would like the first record of\n> a sorted result set, call `first()` on a `Collection` of returned models.\n\n###### Retrieving the first record (or failing)\n\nTo retrieve the first record of a search or throw an exception when one isn't found, call the `firstOrFail()` method:\n\n```php\ntry {\n\n    $record = $search->firstOrFail();\n\n} catch (Adldap\\Models\\ModelNotFoundException $e) {\n    // Record wasn't found!\n}\n```\n\n## Limit\n\nTo limit the results records returned from your LDAP server and increase the\nspeed of your queries, you can use the `limit()` method:\n\n```php\n// This will only return 5 records that contain the name of 'John':\n$records = $search->where('cn', 'contains', 'John')->limit(5)->get();\n```\n\n## Wheres\n\nTo perform a where clause on the search object, use the `where()` function:\n\n```php\n$search->where('cn', '=', 'John Doe');\n```\n\nThis query would look for a record with the common name of 'John Doe' and return the results.\n\nWe can also perform a 'where equals' without including the operator:\n\n```php\n$search->whereEquals('cn', 'John Doe');\n```\n\nWe can also supply an array of key - value pairs to quickly add multiple wheres:\n\n```php\n$wheres = [\n    'cn' => 'John Doe',\n    'samaccountname' => 'jdoe',\n];\n\n$search->where($wheres);\n```\n\nOr, if you require conditionals, you can quickly add multiple wheres with nested arrays:\n\n```php\n$search->where([\n   ['cn', '=', 'John Doe'],\n   ['manager', '!', 'Suzy Doe'],\n]);\n```\n\n#### Where Starts With\n\nWe could also perform a search for all objects beginning with the common name of 'John' using the `starts_with` operator:\n\n```php\n$results = $provider->search()->where('cn', 'starts_with', 'John')->get();\n\n// Or use the method whereStartsWith($attribute, $value):\n\n$results = $provider->search()->whereStartsWith('cn', 'John')->get();\n```\n\n#### Where Ends With\n\nWe can also search for all objects that end with the common name of `Doe` using the `ends_with` operator:\n\n```php\n$results = $provider->search()->where('cn', 'ends_with', 'Doe')->get();\n\n// Or use the method whereEndsWith($attribute, $value):\n\n$results = $provider->search()->whereEndsWith('cn', 'Doe')->get();\n```\n\n#### Where Between\n\nTo search for records between two values, use the `whereBetween` method.\n\nFor the example below, we'll retrieve all users who were created between two dates:\n\n```php\n$from = (new DateTime('October 1st 2016'))->format('YmdHis.0\\Z');\n$to = (new DateTime('January 1st 2017'))->format('YmdHis.0\\Z');\n\n$users = $provider->search()\n    ->users()\n    ->whereBetween('whencreated', [$from, $to])\n    ->get();\n```\n\n#### Where Contains\n\nWe can also search for all objects with a common name that contains `John Doe` using the `contains` operator:\n\n```php\n$results = $provider->search()->where('cn', 'contains', 'John Doe')->get();\n\n// Or use the method whereContains($attribute, $value):\n\n$results = $provider->search()->whereContains('cn', 'John Doe')->get();\n```\n\n##### Where Not Contains\n\nYou can use a 'where not contains' to perform the inverse of a 'where contains':\n\n```php\n$results = $provider->search()->where('cn', 'not_contains', 'John Doe')->get();\n\n// Or use the method whereNotContains($attribute, $value):\n\n$results = $provider->search()->whereNotContains('cn', 'John Doe');\n```\n\n#### Where Has\n\nOr we can retrieve all objects that have a common name attribute using the wildcard operator (`*`):\n\n```php\n$results = $provider->search()->where('cn', '*')->get();\n\n// Or use the method whereHas($field):\n\n$results = $provider->search()->whereHas('cn')->get();\n```\n\nThis type of filter syntax allows you to clearly see what your searching for.\n\n##### Where Not Has\n\nYou can use a 'where not has' to perform the inverse of a 'where has':\n\n```php\n$results = $provider->search->where('cn', '!*')->get();\n\n// Or use the method whereNotHas($field):\n\n$results = $provider->search()->whereNotHas($field)->get();\n```\n\n## Or Wheres\n\nTo perform an `or where` clause on the search object, use the `orWhere()` method. However,\nplease be aware this function performs differently than it would on a database.\n\nFor example:\n\n```php\n$results = $search\n            ->where('cn', '=', 'John Doe')\n            ->orWhere('cn', '=', 'Suzy Doe')\n            ->get();\n```\n\nThis query would return no results. Since we're already defining that the common name (`cn`) must equal `John Doe`, applying\nthe `orWhere()` does not amount to 'Look for an object with the common name as \"John Doe\" OR \"Suzy Doe\"'. This query would\nactually amount to 'Look for an object with the common name that <b>equals</b> \"John Doe\" OR \"Suzy Doe\"\n\nTo solve the above problem, we would use `orWhere()` for both fields. For example:\n\n```php\n$results = $search\n        ->orWhere('cn', '=', 'John Doe')\n        ->orWhere('cn', '=', 'Suzy Doe')\n        ->get();\n```\n\nNow, we'll retrieve both John and Suzy's LDAP records, because the common name can equal either.\n\n> **Note**: You can also use all `where` methods as an or where, for example:\n> `orWhereHas()`, `orWhereContains()`, `orWhereStartsWith()`, `orWhereEndsWith()`\n\n## Dynamic Wheres\n\nTo perform a dynamic where, simply suffix a `where` with the field you're looking for.\n\nThis feature was directly ported from Laravel's Eloquent.\n\nHere's an example:\n\n```php\n// This query:\n$result = $search->where('cn', '=', 'John Doe')->first();\n\n// Can be converted to:\n$result = $search->whereCn('John Doe')->first();\n```\n\nYou can perform this on **any** attribute:\n\n```php\n$result = $search->whereTelephonenumber('555-555-5555')->first();\n```\n\nYou can also chain them:\n\n```php\n$result = $search\n    ->whereTelephonenumber('555-555-5555')\n    ->whereGivenname('John Doe')\n    ->whereSn('Doe')\n    ->first();\n```\n\nYou can even perform multiple dynamic wheres by separating your fields by an `And`:\n\n```php\n// This would perform a search for a user with the\n// first name of 'John' and last name of 'Doe'.\n$result = $search->whereGivennameAndSn('John', 'Doe')->first();\n```\n\n## Nested Filters\n\nBy default, the Adldap2 query builder automatically wraps your queries in `and` / `or` filters for you.\nHowever, if any further complexity is required, nested filters allow you\nto construct any query fluently and easily.\n\n#### andFilter\n\nThe `andFilter` method accepts a closure which allows you to construct a query inside of an `and` LDAP filter:\n\n```php\n$query = $provider->search()->newQuery();\n\n// Creates the filter: (&(givenname=John)(sn=Doe))\n$results = $query->andFilter(function (Adldap\\Query\\Builder $q) {\n\n    $q->where('givenname', '=', 'John')\n      ->where('sn', '=', 'Doe');\n\n})->get();\n```\n\nThe above query would return records that contain the first name `John` **and** the last name `Doe`.\n\n#### orFilter\n\nThe `orFilter` method accepts a closure which allows you to construct a query inside of an `or` LDAP filter:\n\n```php\n$query = $provider->search()->newQuery();\n\n\n// Creates the filter: (|(givenname=John)(sn=Doe))\n$results = $query->orFilter(function (Adldap\\Query\\Builder $q) {\n\n    $q->where('givenname', '=', 'John')\n      ->where('sn', '=', 'Doe');\n\n})->get();\n```\n\nThe above query would return records that contain the first name `John` **or** the last name `Doe`.\n\n#### notFilter\n\nThe `notFilter` method accepts a closure which allows you to construct a query inside a `not` LDAP filter:\n\n```php\n$query = $provider->search()->newQuery();\n\n// Creates the filter: (!(givenname=John)(sn=Doe))\n$results = $query->notFilter(function (Adldap\\Query\\Builder $q) {\n\n    $q->where('givenname', '=', 'John')\n      ->where('sn', '=', 'Doe');\n\n})->get();\n```\n\nThe above query would return records that **do not** contain the first name `John` **or** the last name `Doe`.\n\n#### Complex Nesting\n\nThe above methods `andFilter` / `orFilter` can be chained together and nested\nas many times as you'd like for larger complex queries:\n\n```php\n$query = $provider->search()->newQuery();\n\n$query = $query->orFilter(function (Adldap\\Query\\Builder $q) {\n    $q->where('givenname', '=', 'John')->where('sn', '=', 'Doe');\n})->andFilter(function (Adldap\\Query\\Builder $q) {\n    $q->where('department', '=', 'Accounting')->where('title', '=', 'Manager');\n})->getUnescapedQuery();\n\necho $query; // Returns '(&(|(givenname=John)(sn=Doe))(&(department=Accounting)(title=Manager)))'\n```\n\n## Raw Filters\n\n> **Note**: Raw filters are not escaped. **Do not** accept user input into the raw filter method.\n\nSometimes you might just want to add a raw filter without using the query builder.\nYou can do so by using the `rawFilter()` method:\n\n```php\n$filter = '(samaccountname=jdoe)';\n\n$results = $search->rawFilter($filter)->get();\n\n// Or use an array\n$filters = [\n    '(samaccountname=jdoe)',\n    '(surname=Doe)',\n];\n\n$results = $search->rawFilter($filters)->get();\n\n// Or use multiple arguments\n$results = $search->rawFilter($filters[0], $filters[1])->get();\n\n// Multiple raw filters will be automatically wrapped into an `and` filter:\n$query = $search->getUnescapedQuery();\n\necho $query; // Returns (&(samaccountname=jdoe)(surname=Doe))\n```\n\n## Sorting\n\nSorting is really useful when your displaying tabular LDAP results. You can\neasily perform sorts on any LDAP attribute by using the `sortBy()` method:\n\n```php\n$results = $search->whereHas('cn')->sortBy('cn', 'asc')->get();\n```\n\nYou can also sort paginated results:\n\n```php\n$results = $search->whereHas('cn')->sortBy('cn', 'asc')->paginate(25);\n```\n\n> **Note**: Sorting occurs *after* results are returned. This is due\n> to PHP not having the functionality of sorting records on\n> the server side before they are returned.\n\n## Paginating\n\nPaginating your search results will allow you to return more results than\nyour LDAP cap (usually 1000) and display your results in pages.\n\n> **Note**: Calling `paginate()` will retrieve **all** records from your LDAP server for the current query.\n>\n> This **does not** operate the same way pagination occurs in a database. Pagination of\n> an LDAP query simply allows you to return a larger result set than your\n> LDAP servers configured maximum (usually 1000).\n>\n> The pagination object is simply a collection that allows you to iterate\n> through all the resulting records easily and intuitively.\n\nTo perform this, call the `paginate()` method instead of the `get()` method:\n\n```php\n$recordsPerPage = 50;\n\n$currentPage = $_GET['page'];\n\n// This would retrieve all records from your LDAP server inside a new Adldap\\Objects\\Paginator instance.\n$paginator = $search->paginate($recordsPerPage, $currentPage);\n\n// Returns total number of pages, int\n$paginator->getPages();\n\n// Returns current page number, int\n$paginator->getCurrentPage();\n\n// Returns the amount of entries allowed per page, int\n$paginator->getPerPage();\n\n// Returns all of the results in the entire paginated result\n$paginator->getResults();\n\n// Returns the total amount of retrieved entries, int\n$paginator->count();\n\n// Iterate over the results like normal\nforeach($paginator as $result)\n{\n    echo $result->getCommonName();\n}\n```\n\n## Scopes\n\nSearch scopes allow you to easily retrieve common models of a particular 'scope'.\n\nEach scope simply applies the required filters to the search object\nthat (when executed) will only return the relevant models.\n\nHere is a list of all available scopes:\n\n```php\n// Retrieve all users (Adldap\\Models\\User).\n$results = $search->users()->get();\n\n// Retrieve all printers (Adldap\\Models\\Printer).\n$results = $search->printers()->get();\n\n// Retrieve all organizational units (Adldap\\Models\\OrganizationalUnit).\n$results = $search->ous()->get();\n\n// Retrieve all organizational units (Adldap\\Models\\OrganizationalUnit).\n$results = $search->organizations()->get();\n\n// Retrieve all groups (Adldap\\Models\\Group).\n$results = $search->groups()->get();\n\n// Retrieve all containers (Adldap\\Models\\Container).\n$results = $search->containers()->get();\n\n// Retrieve all contacts (Adldap\\Models\\Contact).\n$results = $search->contacts()->get();\n\n// Retrieve all computers (Adldap\\Models\\Computer).\n$results = $search->computers()->get();\n```\n\n## Base DN\n\nTo set the base DN of your search you can use one of two methods:\n\n```php\n// Using the `in()` method:\n$results = $provider->search()->in('ou=Accounting,dc=acme,dc=org')->get();\n\n// Using the `setDn()` method:\n$results = $provider->search()->setDn('ou=Accounting,dc=acme,dc=org')->get();\n\n// You can also include `in()` with the scope\n$results = $provider->search()->organizations()->in('ou=Accounting,dc=acme,dc=org')->get()\n\n```\n\nEither option will return the same results. Use which ever method you prefer to be more readable.\n\n## Search Options\n\n#### Recursive\n\nBy default, all searches performed are recursive.\n\nIf you'd like to disable recursive search and perform a single level search, use the `listing()` method:\n\n```php\n$result = $provider->search()->listing()->get();\n```\n\nThis would perform an `ldap_listing()` instead of an `ldap_search()`.\n\n#### Read\n\nIf you'd like to perform a read instead of a listing or a recursive search, use the `read()` method:\n\n```php\n$result = $provider->search()->read()->where('objectClass', '*')->get();\n```\n\nThis would perform an `ldap_read()` instead of an `ldap_listing()` or an `ldap_search()`.\n\n> **Note**: Performing a `read()` will always return *one* record in your result.\n\n#### Raw\n\nIf you'd like to retrieve the raw LDAP results, use the `raw()` method:\n\n```php\n$rawResults = $provider->search()->raw()->where('cn', '=', 'John Doe')->get();\n\nvar_dump($rawResults); // Returns an array\n```\n\n## Retrieving the ran query\n\nIf you'd like to retrieve the current query to save or run it at another\ntime, use the `getQuery()` method on the query builder.\n\nThis will return the escaped filter.\n\n```php\n$query = $provider->search()->where('cn', '=', 'John Doe')->getQuery();\n\necho $query; // Returns '(cn=\\4a\\6f\\68\\6e\\20\\44\\6f\\65)'\n```\n\nTo retrieve the unescaped filter, call the `getUnescapedQuery()` method:\n\n```php\n$query = $provider->search()->where('cn', '=', 'John Doe')->getUnescapedQuery();\n\necho $query; // Returns '(cn=John Doe)'\n```\n\nNow that you know how to search your directory, lets move onto [creating / modifying LDAP records](models/model.md).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/setup.md",
    "content": "# Setup\n\n## Configuration\n\nTo configure your LDAP connections, you can use two methods:\n\n1. Using an array\n2. Using a `Adldap\\Configuration\\DomainConfiguration` object\n\nEither or will produce the same results. Use whichever you feel most comfortable with.\n\n### Using an array\n\n```php\n$config = [\n    'hosts' => [\n        'DC-01.corp.acme.org',\n    ],\n    '...'\n];\n```\n\n### Using a `DomainConfiguration` object\n\n```php\n// Setting options via first argument:\n$config = new Adldap\\Configuration\\DomainConfiguration([\n    'hosts' => [\n        'DC-01.corp.acme.org',\n    ],\n]);\n\n// Setting via the `set()` method:\n$config->set('hosts', [\n    'DC-01.corp.acme.org',\n]);\n```\n\n### Options\n\n#### Array Example With All Options\n\n```php\n// Create the configuration array.\n$config = [\n    // Mandatory Configuration Options\n    'hosts'            => ['corp-dc1.corp.acme.org', 'corp-dc2.corp.acme.org'],\n    'base_dn'          => 'dc=corp,dc=acme,dc=org',\n    'username'         => 'admin',\n    'password'         => 'password',\n\n    // Optional Configuration Options\n    'schema'           => Adldap\\Schemas\\ActiveDirectory::class,\n    'account_prefix'   => 'ACME-',\n    'account_suffix'   => '@acme.org',\n    'port'             => 389,\n    'follow_referrals' => false,\n    'use_ssl'          => false,\n    'use_tls'          => false,\n    'version'          => 3,\n    'timeout'          => 5,\n\n    // Custom LDAP Options\n    'custom_options'   => [\n        // See: http://php.net/ldap_set_option\n        LDAP_OPT_X_TLS_REQUIRE_CERT => LDAP_OPT_X_TLS_HARD\n    ]\n];\n```\n\n#### Required Options\n\n##### Hosts\n\nThe hosts option is an array of IP addresses or hostnames located\non your network that serve Active Directory.\n\nYou insert as many servers or as little as you'd like depending on your forest (with the minimum of one of course).\n\n> **Note:** Do not append your port to your IP addresses or hostnames. Use the `port` configuration option instead.\n\n##### Base Distinguished Name\n\nThe base distinguished name is the base distinguished name you'd like to perform operations on.\n\nAn example base DN would be `DC=corp,DC=acme,DC=org`.\n\nIf one is not defined, you will not retrieve any search results.\n\n> **Note**: Your base DN is **case insensitive**. You do not need to worry about incorrect casing.\n\n##### Username & Password\n\nTo connect to your LDAP server, a username and password is required to be able to query and run operations on your server(s).\n\nYou can use any account that has these permissions.\n\n> **Note**: To run administration level operations, such as resetting passwords,\n> this account **must** have permissions to do so on your directory.\n\n#### Optional Options\n\n##### Schema\n\nThe schema option allows you to configure which directory you're connecting to.\n\nThis is a somewhat optional, however this **must** be changed if you're connecting\nto an alternate LDAP variant such as OpenLDAP or FreeIPA.\n\nBelow are available schemas:\n\n- `Adldap\\Schemas\\ActiveDirectory`\n- `Adldap\\Schemas\\OpenLDAP`\n- `Adldap\\Schemas\\FreeIPA`\n\nBy default, this option is set to the `Adldap\\Schemas\\ActiveDirectory` schema.\n\n##### Account Prefix\n\nThe account prefix option is a string to *prepend* to all usernames that go through the `Guard::attempt()` method.\n\nThis option is just for convenience.\n\nIt is usually not needed (if utilizing the account suffix), however the functionality is\nin place if you would like to only allow certain users with the specified prefix\nto login, or add a domain so your users do not have to specify one.\n\n##### Account Suffix\n\nThe account suffix option is a string to *append* to all usernames that go\nthrough the `Adldap\\Auth\\Guard::attempt()` method.\n\nThis option is just for convenience.\n\nAn example use case for this would be inserting your LDAP users `userPrincipalName` suffix so you don't need to append it manually.\n\nFor example, with a `account_suffix` in your configuration set to `@corp.acme.org`:\n\n```php\n$username = 'jdoe';\n$password = 'password';\n\n// Here, an `ldap_bind()` will be called with a username of 'jdoe@corp.acme.org`\n$provider->auth()->attempt($username, $password);\n```\n\n##### Port\n\nThe port option is used for authenticating and binding to your LDAP server.\n\nThe default ports are already used for non SSL and SSL connections (389 and 636).\n\nOnly insert a port if your LDAP server uses a unique port.\n\n##### Follow Referrals\n\nThe follow referrals option is a boolean to tell active directory to follow a referral to another server on your network if the server queried knows the information your asking for exists, but does not yet contain a copy of it locally.\n\nThis option is defaulted to false.\n\nDisable this option if you're experiencing search / connectivity issues.\n\nFor more information, visit: https://technet.microsoft.com/en-us/library/cc978014.aspx\n\n##### SSL & TLS\n\nThese Boolean options enable an SSL or TLS connection to your LDAP server.\n\nOnly **one** can be set to `true`. You must chose either or.\n\n> **Note**: You **must** enable SSL or TLS to reset passwords in ActiveDirectory.\n\nThese options are definitely recommended if you have the ability to connect to your server securely.\n\n> **Note**: TLS is recommended over SSL, as SSL is now labelled as a depreciated mechanism for securely running LDAP operations.\n\n##### Version\n\nThe LDAP version to use for your connection.\n\nMust be an integer and can either be `2` or `3`.\n\n##### Timeout\n\nThe timeout option allows you to configure the amount of seconds to wait until\nyour application receives a response from your LDAP server.\n\nThe default is 5 seconds.\n\n##### Custom Options\n\nArbitrary options can be set for the connection to fine-tune TLS and connection behavior.\n\nPlease note that `LDAP_OPT_PROTOCOL_VERSION`, `LDAP_OPT_NETWORK_TIMEOUT` and `LDAP_OPT_REFERRALS` will be ignored if set.\n\nThese are set above with the `version`, `timeout` and `follow_referrals` keys respectively.\n\nValid options are listed in the [PHP documentation for ldap_set_option](http://php.net/ldap_set_option).\n\n## Getting Started\n\nEach LDAP connection you have will be contained inside the `Adldap` instance as its own **connection provider**.\n\nThere are a couple of ways you can easily add each of your LDAP connections. Let's walk through them:\n\n**Using a configuration array:**\n```php\n$config = ['...'];\n\n$ad = new Adldap\\Adldap();\n\n$ad->addProvider($config);\n\n// You can also specify the name of the\n// connection as the second argument:\n$ad->addProvider($config, 'connection-one');\n```\n\n**Using a DomainConfiguration object:**\n```php\n$ad = new Adldap\\Adldap();\n\n$config = new Adldap\\Configuration\\DomainConfiguration(['...']);\n\n$ad->addProvider($config, 'connection-one');\n```\n\n**Using the constructor:**\n\n> **Note**: When inserting your configuration into a new `Adldap` instance, you\n> need to set a key for each connection. **This will be its connection name**.\n\n```php\n$connections = [\n    'connection1' => [\n        'hosts' => ['...'],\n    ],\n    'connection2' => [\n        'hosts' => ['...'],\n    ],\n];\n\n$ad = new Adldap\\Adldap($connections);\n```\n\n## Connecting\n\nThe easiest way to get connected is to call the `connect($name)` method on your `Adldap` instance.\n\nIts first argument accepts the name of your configured connection.\n\nThis method will return you a connected **connection provider** when\nsuccessful, and throw an exception when unsuccessful:\n\n```php\n$ad = new Adldap\\Adldap();\n\n$config = ['...'];\n\n$connectionName = 'my-connection';\n\n$ad->addProvider($config, $connectionName);\n\ntry {\n    $provider = $ad->connect($connectionName);\n\n    // Great, we're connected!\n} catch (Adldap\\Auth\\BindException $e) {\n    // Failed to connect.\n}\n```\n\n### Using an alternate username / password\n\nIf you'd like to connect to your configured connection using a different username and password than your configuration, then simply provide them in the second and third arguments:\n\n```php\n$username = 'server-admin';\n$password = 'my-super-secret-password';\n\n$provider = $ad->connect($connectionName, $username, $password);\n```\n\n### Dynamically Connecting\n\nIf you're like me and like chainable (fluent) API's in PHP, then dynamically connecting is a nice option to have.\n\nTo dynamically connect, simply call any connection provider method on your `Adldap` instance.\n\n> **Note**: Your default connection will be used when dynamically connecting.\n> More on this below.\n\nHere's an example:\n\n```php\n$ad = new Adldap\\Adldap();\n\n$ad->addProvider($config = ['...']);\n\ntry {\n    $users = $ad->search()->users()->get();\n} catch (Adldap\\Auth\\BindException $e) {\n    // Failed to connect.\n}\n```\n\n### Anonymously Binding\n\nIf you'd like to anonymously bind, set your `username` and `password` configuration to `null`:\n\n```php\n$ad = new Adldap\\Adldap();\n\n$config = [\n    'username' => null,\n    'password' => null,\n];\n\n$ad->addProvider($config);\n\ntry {\n    $provider = $ad->connect();\n\n    // ...\n} catch (BindException $e) {\n    // Failed.\n}\n```\n\nOr, manually bind your provider and don't pass in a `username` or `password` parameter:\n\n```php\n$config = [\n    'hosts' => ['...'],\n];\n\n$ad->addProvider($config);\n\n$provider = $ad->getDefaultProvider();\n\ntry {\n    $provider->auth()->bind();\n\n    // Successfully bound.\n} catch (BindException $e) {\n    // Failed.\n}\n```\n\n### Setting a Default Connection\n\nSetting a default LDAP connection is used for dynamically connecting.\n\nTo set your default connection, call the `setDefaultProvider($name)` method:\n\n```php\n$ad->setDefaultProvider('my-connection');\n\n$computers = $ad->search()->computers()->get();\n```\n\n## Authenticating\n\nIf you're looking to authenticate (bind) users using your LDAP connection, call\nthe `auth()->attempt()` method on your provider instance:\n\n```php\n$username = 'jdoe';\n$password = 'Password@1';\n\ntry {\n    if ($provider->auth()->attempt($username, $password)) {\n        // Passed.\n    } else {\n        // Failed.\n    }\n} catch (Adldap\\Auth\\UsernameRequiredException $e) {\n    // The user didn't supply a username.\n} catch (Adldap\\Auth\\PasswordRequiredException $e) {\n    // The user didn't supply a password.\n}\n```\n\nIf you'd like all LDAP operations during the same request to be ran under the\nauthenticated user, pass in `true` into the last paramter:\n\n```php\nif ($provider->auth()->attempt($username, $password, $bindAsUser = true)) {\n    // Passed.\n} else {\n    // Failed.\n}\n```\n\n---\n\nNow that you've learned the basics of configuration and\ngetting yourself connected, continue on to learn\n[how to search your LDAP directory](searching.md).\n\n## Using Other LDAP Servers (OpenLDAP / FreeIPA / etc.)\n\nAlternate LDAP server variants such as OpenLDAP or FreeIPA contain\nsome different attribute names than ActiveDirectory.\n\nThe Adldap2 schema offers an attribute map for each available LDAP attribute, and\nis completely configurable and customizable.\n\nIf you're using an alternate LDAP server variant such as OpenLDAP or FreeIPA, you **must** change the default schema inside your configuration array. If you do not, you won't receive the correct model instances for results, and you won't be\nable to utilize some standard methods available on these models.\n\nBy default, Adldap2 is configured to be used with **Microsoft ActiveDirectory**.\n\nWhen creating your configuration array, set your schema using the `schema` key:\n\n\n**Using configuration array:**\n```php\n$ad = new Adldap\\Adldap();\n\n$config = [\n    '...',\n    'schema' => Adldap\\Schemas\\OpenLDAP::class\n];\n\n$ad->addProvider($config);\n```\n\n**Using configuration object:**\n```php\n$ad = new Adldap\\Adldap();\n\n$config = new Adldap\\Configuration\\DomainConfiguration();\n\n$config->set('schema', Adldap\\Schemas\\OpenLDAP::class);\n\n$ad->addProvider($config);\n```\n\nOnce you've set the schema of your connection provider, you can use the same API interacting with different LDAP servers.\n\nContinue onto the [searching](searching.md) documentation to learn how to begin querying your LDAP server(s).\n\n## Using G-Suite Secure LDAP Service\n\nG-Suite LDAP service only uses client certificates and no username + password, make sure yo match base_dn with your domian.\n\n```php\n$ad = new \\Adldap\\Adldap();\n\n// Create a configuration array.\n$config = [  \n    'hosts'    => ['ldap.google.com'],\n    'base_dn'  => 'dc=your-domain,dc=com',\n    'use_tls' => true,\n    'version' => 3,\n    'schema' => Adldap\\Schemas\\GSuite::class,\n    'custom_options' => [\n        LDAP_OPT_X_TLS_CERTFILE => 'Google_2023_02_05_35779.crt',\n        LDAP_OPT_X_TLS_KEYFILE => 'Google_2023_02_05_35779.key', \n    ]\n];\n\n$ad->addProvider($config);\n\ntry {\n    $provider = $ad->connect();\n    \n    $results = $provider->search()->ous()->get();\n    \n    echo 'OUs:'.\"\\r\\n\";\n    echo '==============='.\"\\r\\n\";\n    foreach($results as $ou) {\n        echo $ou->getDn().\"\\r\\n\";\n    }\n    \n    echo \"\\r\\n\";\n    \n    $results = $provider->search()->users()->get();\n    \n    echo 'Users:'.\"\\r\\n\";\n    echo '==============='.\"\\r\\n\";\n    foreach($results as $user) {\n        \n        echo $user->getAccountName().\"\\r\\n\";\n    }\n    \n    echo \"\\r\\n\";\n    \n    $results = $provider->search()->groups()->get();\n    \n    echo 'Groups:'.\"\\r\\n\";\n    echo '==============='.\"\\r\\n\";\n    foreach($results as $group) {\n        echo $group->getCommonName().' | '.$group->getDisplayName().\"\\r\\n\";\n    }\n\n} catch (\\Adldap\\Auth\\BindException $e) {\n\n    echo 'Error: '.$e->getMessage().\"\\r\\n\";\n}\n```\n\n## Raw Operations\n\n### Introduction\n\nIf you want to connect to your LDAP server without utilizing Adldap's models (old fashion way), and want to get back the data in a raw format you can easily do so.\n\nIf you call `getConnection()` on your connected provider instance, you can perform all LDAP functions on a container class that encapsulates all of PHP's LDAP methods.\n\nYou can view all methods avaialble by browsing the LDAP class [here](https://github.com/Adldap2/Adldap2/blob/master/src/Connections/Ldap.php).\n\nNow for some examples:\n\n### Examples\n\n```php\n$ad = new Adldap\\Adldap();\n\n$config = ['...'];\n\n$ad->addProvider($config);\n\n$provider = $ad->connect();\n\n$rawConnection = $provider->getConnection();\n\n// Performing a raw search.\n$result = $rawConnection->search($basedn = 'dc=corp,dc=acme,dc=org', $filter = \"cn=johndoe\", $selectedAttributes = ['cn', 'department']);\n\n$dn = \"cn=John Smith,ou=Wizards,dc=example,dc=com\";\n\n// Adding a new LDAP record.\n$result = $rawConnection->add($dn, $entry);\n\n// Batch modifying an LDAP record.\n$modifs = [\n    [\n        \"attrib\"  => \"telephoneNumber\",\n        \"modtype\" => LDAP_MODIFY_BATCH_ADD,\n        \"values\"  => [\"+1 555 555 1717\"],\n    ],\n];\n\n$result = $rawConnection->modifyBatch($dn, $modifs);\n\n// Deleting an LDAP record.\n$result = $rawConnection->delete($dn);\n\n// .. etc\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/docs/troubleshooting.md",
    "content": "# Troubleshooting\n\n#### Creating and Setting a Users Password\n\nTo set a users password when you've created a new one, you need to enable their account, **then** set their password.\n\nFor example:\n\n```php\n// Construct a new user instance.\n$user = $provider->make()->user();\n\n// Set the user profile details.\n$user->setAccountName('jdoe');\n$user->setFirstName('John');\n$user->setLastName('Doe');\n$user->setCompany('ACME');\n$user->setEmail('jdoe@acme.com');\n\n// Save the new user.\nif ($user->save()) {\n    // Enable the new user (using user account control).\n    $user->setUserAccountControl(512);\n\n    // Set new user password\n    $user->setPassword('Password123');\n\n    // Save the user.\n    if($user->save()) {\n        // The password was saved successfully.\n    }\n}\n```\n\n#### Determining and Troubleshooting a Binding Failure\n\n> **Note**: The below guide is using ActiveDirectory. Your mileage will vary using other LDAP distributions.\n\nTo determine the reason why a bind attempt failed, you can use the event dispatcher to listen for\nthe `Failed` event, and retrieve the errors that were returned from your LDAP server:\n\n```php\nuse Adldap\\Adldap;\nuse Adldap\\Auth\\Events\\Failed;\n\n$d = Adldap::getEventDispatcher();\n\n$d->listen(Failed::class, function (Failed $event) {\n    $conn = $event->connection;\n    \n    echo $conn->getLastError(); // 'Invalid credentials'\n    echo $conn->getDiagnosticMessage(); // '80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 532, v3839'\n    \n    if ($error = $conn->getDetailedError()) {\n        $error->getErrorCode(); // 49\n        $error->getErrorMessage(); // 'Invalid credentials'\n        $error->getDiagnosticMessage(); // '80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 532, v3839'\n    }\n});\n```\n\nThe above diagnostic message can be parsed down further if needed. The error code after the 'data' string\nin the above message indicates several things about the bind failure. Here is a list:\n\n- 525 - user not found\n- 52e - invalid credentials\n- 530 - not permitted to logon at this time\n- 531 - not permitted to logon at this workstation\n- 532 - password expired\n- 533 - account disabled\n- 701 - account expired\n- 773 - user must reset password\n- 775 - user account locked\n\nFrom the example above, you can see that the authenticating account has their password expired, due to \"532\" error code.\n\n#### Retrieving All Records Inside a Group\n\nTo retrieve all records inside a particular group (including nested groups), use the `rawFilter()` method:\n\n```php\n// The `memberof:1.2.840.113556.1.4.1941:` string indicates\n// that we want all nested group records as well.\n$filter = '(memberof:1.2.840.113556.1.4.1941:=CN=MyGroup,DC=example,DC=com)';\n\n$users = $provider->search()->rawFilter($filter)->get();\n```\n\n#### I'm connected but not getting any search results!\n\nThe first thing you need to ensure is your `base_dn` in your configuration.\n\nYour `base_dn` needs to identical to the base DN on your domain. Even one mistyped character will result in no search results.\n\nIf you also include an `ou` in your base DN (ex. `ou=Accounting,dc=corp,dc=acme,dc=org`), you will only receive results inside the `Accounting` OU.\n\nOnce you're connected to your LDAP server, retrieve the Root DSE record.\n\nHere's a full example:\n\n```php\n$providers = [\n    'default' => [\n        'base_dn' => '',\n        '...',\n    ]\n];\n\n$ad = new Adldap\\Adldap($providers);\n\ntry {\n    $provider = $ad->connect();\n    \n    $root = $provider->search()->getRootDse();\n    \n    // ex. Returns 'dc=corp,dc=acme,dc=org'\n    die($root->getRootDomainNamingContext());\n\n} catch (Adldap\\Auth\\BindException $e) {\n    //\n}\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/license.md",
    "content": "The MIT License (MIT)\nCopyright © Steve Bauman\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"false\"\n        >\n    <testsuites>\n        <testsuite name=\"Adldap2 Test Suite\">\n            <directory suffix=\"Test.php\">./tests/</directory>\n        </testsuite>\n    </testsuites>\n    <filter>\n        <whitelist processUncoveredFilesFromWhitelist=\"true\">\n            <directory suffix=\".php\">./src</directory>\n        </whitelist>\n    </filter>\n</phpunit>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/readme.md",
    "content": "<p align=\"center\">\n<strong>:wave: Hey there! Looking for something even easier to use for LDAP integration in your PHP applications?</strong>\n</br>\n<h3 align=\"center\">\n 🎉 Introducing <a href=\"https://github.com/DirectoryTree/LdapRecord\" target=\"_blank\" title=\"LdapRecord GitHub Repository\">LdapRecord</a> 🎉\n</h3>\n</p>\n\n<p align=\"center\">\n    <strong>\n        <a href=\"https://ldaprecord.com\">LdapRecord</a> is the successor to Adldap2 - and comes with a ton of new features.\n    </strong> </br> Adldap2 will continue to be supported with bug fixes, <i>but will not receive new features.</i>\n</p>\n\n<p align=\"center\">\n <strong>\n <a href=\"https://stevebauman.ca/why-ldap-record/\">Read Why</a>\n </strong>\n</p>\n\n<hr/>\n\n<h1 align=\"center\">Adldap2</h1>\n\n<p align=\"center\">\n    <a href=\"https://travis-ci.org/Adldap2/Adldap2\"><img src=\"https://img.shields.io/travis/Adldap2/Adldap2.svg?style=flat-square\"/></a>\n    <a href=\"https://scrutinizer-ci.com/g/Adldap2/Adldap2/?branch=master\"><img src=\"https://img.shields.io/scrutinizer/g/adLDAP2/adLDAP2/master.svg?style=flat-square\"/></a>\n    <a href=\"https://packagist.org/packages/adldap2/adldap2\"><img src=\"https://img.shields.io/packagist/dt/adldap2/adldap2.svg?style=flat-square\"/></a>\n    <a href=\"https://packagist.org/packages/adldap2/adldap2\"><img src=\"https://img.shields.io/packagist/v/adldap2/adldap2.svg?style=flat-square\"/></a>\n    <a href=\"https://packagist.org/packages/adldap2/adldap2\"><img src=\"https://img.shields.io/packagist/l/adldap2/adldap2.svg?style=flat-square\"/></a>\n</p>\n\n<p align=\"center\">\n    Adldap2 is a PHP package that provides LDAP authentication and directory management tools using the <a href=\"https://en.wikipedia.org/wiki/Active_record_pattern\">Active Record pattern</a>.\n</p>\n\n<h4 align=\"center\">\n    <a href=\"http://adldap2.github.io/Adldap2/#/?id=quick-start\">Quickstart</a>\n    <span> · </span>\n    <a href=\"http://adldap2.github.io/Adldap2/\">Documentation</a>\n</h4>\n\n- **Up and running in minutes.** Effortlessly connect to your LDAP servers and start running queries & operations in a matter of minutes.\n\n- **Fluent query builder.** Building LDAP queries has never been so easy. Find the records you're looking for in a couple lines or less with a fluent interface.\n\n- **Supercharged Active Record.** Create and modify LDAP records with ease. All LDAP records are individual models. Simply modify the attributes on the model and save it to persist the changes to your LDAP server.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Adldap.php",
    "content": "<?php\n\nnamespace Adldap;\n\nuse Adldap\\Log\\EventLogger;\nuse Adldap\\Connections\\Ldap;\nuse InvalidArgumentException;\nuse Adldap\\Log\\LogsInformation;\nuse Adldap\\Connections\\Provider;\nuse Adldap\\Events\\DispatchesEvents;\nuse Adldap\\Connections\\ProviderInterface;\nuse Adldap\\Connections\\ConnectionInterface;\nuse Adldap\\Configuration\\DomainConfiguration;\n\nclass Adldap implements AdldapInterface\n{\n    use DispatchesEvents;\n    use LogsInformation;\n    /**\n     * The default provider name.\n     *\n     * @var string\n     */\n    protected $default = 'default';\n\n    /**\n     * The connection providers.\n     *\n     * @var array\n     */\n    protected $providers = [];\n\n    /**\n     * The events to register listeners for during initialization.\n     *\n     * @var array\n     */\n    protected $listen = [\n        'Adldap\\Auth\\Events\\*',\n        'Adldap\\Query\\Events\\*',\n        'Adldap\\Models\\Events\\*',\n    ];\n\n    /**\n     * {@inheritdoc}\n     */\n    public function __construct(array $providers = [])\n    {\n        foreach ($providers as $name => $config) {\n            $this->addProvider($config, $name);\n        }\n\n        if ($default = key($providers)) {\n            $this->setDefaultProvider($default);\n        }\n\n        $this->initEventLogger();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function addProvider($config, $name = 'default', ConnectionInterface $connection = null)\n    {\n        if ($this->isValidConfig($config)) {\n            $config = new Provider($config, $connection ?? new Ldap($name));\n        }\n\n        if ($config instanceof ProviderInterface) {\n            $this->providers[$name] = $config;\n\n            return $this;\n        }\n\n        throw new InvalidArgumentException(\n            \"You must provide a configuration array or an instance of Adldap\\Connections\\ProviderInterface.\"\n        );\n    }\n\n    /**\n     * Determines if the given config is valid.\n     *\n     * @param mixed $config\n     *\n     * @return bool\n     */\n    protected function isValidConfig($config)\n    {\n        return is_array($config) || $config instanceof DomainConfiguration;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getProviders()\n    {\n        return $this->providers;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getProvider($name)\n    {\n        if (array_key_exists($name, $this->providers)) {\n            return $this->providers[$name];\n        }\n\n        throw new AdldapException(\"The connection provider '$name' does not exist.\");\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setDefaultProvider($name = 'default')\n    {\n        if ($this->getProvider($name) instanceof ProviderInterface) {\n            $this->default = $name;\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getDefaultProvider()\n    {\n        return $this->getProvider($this->default);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function removeProvider($name)\n    {\n        unset($this->providers[$name]);\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function connect($name = null, $username = null, $password = null)\n    {\n        $provider = $name ? $this->getProvider($name) : $this->getDefaultProvider();\n\n        return $provider->connect($username, $password);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function __call($method, $parameters)\n    {\n        $provider = $this->getDefaultProvider();\n        \n        if (! $provider->getConnection()->isBound()) {\n            $provider->connect();\n        }\n\n        return call_user_func_array([$provider, $method], $parameters);\n    }\n\n    /**\n     * Initializes the event logger.\n     *\n     * @return void\n     */\n    public function initEventLogger()\n    {\n        $dispatcher = static::getEventDispatcher();\n\n        $logger = $this->newEventLogger();\n\n        // We will go through each of our event wildcards and register their listener.\n        foreach ($this->listen as $event) {\n            $dispatcher->listen($event, function ($eventName, $events) use ($logger) {\n                foreach ($events as $event) {\n                    $logger->log($event);\n                }\n            });\n        }\n    }\n\n    /**\n     * Returns a new event logger instance.\n     *\n     * @return EventLogger\n     */\n    protected function newEventLogger()\n    {\n        return new EventLogger(static::getLogger());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/AdldapException.php",
    "content": "<?php\n\nnamespace Adldap;\n\nclass AdldapException extends \\Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/AdldapInterface.php",
    "content": "<?php\n\nnamespace Adldap;\n\nuse Adldap\\Connections\\ProviderInterface;\nuse Adldap\\Connections\\ConnectionInterface;\n\ninterface AdldapInterface\n{\n    /**\n     * Add a provider by the specified name.\n     *\n     * @param mixed               $configuration\n     * @param string              $name\n     * @param ConnectionInterface $connection\n     *\n     * @throws \\InvalidArgumentException When an invalid type is given as the configuration argument.\n     *\n     * @return $this\n     */\n    public function addProvider($configuration, $name, ConnectionInterface $connection = null);\n\n    /**\n     * Returns all of the connection providers.\n     *\n     * @return array\n     */\n    public function getProviders();\n\n    /**\n     * Retrieves a Provider using its specified name.\n     *\n     * @param string $name\n     *\n     * @throws AdldapException When the specified provider does not exist.\n     *\n     * @return ProviderInterface\n     */\n    public function getProvider($name);\n\n    /**\n     * Sets the default provider.\n     *\n     * @param string $name\n     *\n     * @throws AdldapException When the specified provider does not exist.\n     */\n    public function setDefaultProvider($name);\n\n    /**\n     * Retrieves the first default provider.\n     *\n     * @throws AdldapException When no default provider exists.\n     *\n     * @return ProviderInterface\n     */\n    public function getDefaultProvider();\n\n    /**\n     * Removes a provider by the specified name.\n     *\n     * @param string $name\n     *\n     * @return $this\n     */\n    public function removeProvider($name);\n\n    /**\n     * Connects to the specified provider.\n     *\n     * If no username and password is given, then the providers\n     * configured admin credentials are used.\n     *\n     * @param string|null $name\n     * @param string|null $username\n     * @param string|null $password\n     *\n     * @return ProviderInterface\n     */\n    public function connect($name = null, $username = null, $password = null);\n\n    /**\n     * Call methods upon the default provider dynamically.\n     *\n     * @param string $method\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    public function __call($method, $parameters);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/BindException.php",
    "content": "<?php\n\nnamespace Adldap\\Auth;\n\nuse Adldap\\AdldapException;\nuse Adldap\\Connections\\DetailedError;\n\n/**\n * Class BindException.\n *\n * Thrown when binding to an LDAP connection fails.\n */\nclass BindException extends AdldapException\n{\n    /**\n     * The detailed LDAP error.\n     *\n     * @var DetailedError\n     */\n    protected $detailedError;\n\n    /**\n     * Sets the detailed error.\n     *\n     * @param DetailedError|null $error\n     *\n     * @return $this\n     */\n    public function setDetailedError(DetailedError $error = null)\n    {\n        $this->detailedError = $error;\n\n        return $this;\n    }\n\n    /**\n     * Returns the detailed error.\n     *\n     * @return DetailedError|null\n     */\n    public function getDetailedError()\n    {\n        return $this->detailedError;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Events/Attempting.php",
    "content": "<?php\n\nnamespace Adldap\\Auth\\Events;\n\nclass Attempting extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Events/Binding.php",
    "content": "<?php\n\nnamespace Adldap\\Auth\\Events;\n\nclass Binding extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Events/Bound.php",
    "content": "<?php\n\nnamespace Adldap\\Auth\\Events;\n\nclass Bound extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Events/Event.php",
    "content": "<?php\n\nnamespace Adldap\\Auth\\Events;\n\nuse Adldap\\Connections\\ConnectionInterface;\n\nabstract class Event\n{\n    /**\n     * The connection that the username and password is being bound on.\n     *\n     * @var ConnectionInterface\n     */\n    protected $connection;\n\n    /**\n     * The username that is being used for binding.\n     *\n     * @var string\n     */\n    protected $username;\n\n    /**\n     * The password that is being used for binding.\n     *\n     * @var string\n     */\n    protected $password;\n\n    /**\n     * Constructor.\n     *\n     * @param ConnectionInterface $connection\n     * @param string              $username\n     * @param string              $password\n     */\n    public function __construct(ConnectionInterface $connection, $username, $password)\n    {\n        $this->connection = $connection;\n        $this->username = $username;\n        $this->password = $password;\n    }\n\n    /**\n     * Returns the events connection.\n     *\n     * @return ConnectionInterface\n     */\n    public function getConnection()\n    {\n        return $this->connection;\n    }\n\n    /**\n     * Returns the authentication events username.\n     *\n     * @return string\n     */\n    public function getUsername()\n    {\n        return $this->username;\n    }\n\n    /**\n     * Returns the authentication events password.\n     *\n     * @return string\n     */\n    public function getPassword()\n    {\n        return $this->password;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Events/Failed.php",
    "content": "<?php\n\nnamespace Adldap\\Auth\\Events;\n\nclass Failed extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Events/Passed.php",
    "content": "<?php\n\nnamespace Adldap\\Auth\\Events;\n\nclass Passed extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/Guard.php",
    "content": "<?php\n\nnamespace Adldap\\Auth;\n\nuse Exception;\nuse Throwable;\nuse Adldap\\Auth\\Events\\Bound;\nuse Adldap\\Auth\\Events\\Failed;\nuse Adldap\\Auth\\Events\\Passed;\nuse Adldap\\Auth\\Events\\Binding;\nuse Adldap\\Auth\\Events\\Attempting;\nuse Adldap\\Events\\DispatcherInterface;\nuse Adldap\\Connections\\ConnectionInterface;\nuse Adldap\\Configuration\\DomainConfiguration;\n\n/**\n * Class Guard.\n *\n * Binds users to the current connection.\n */\nclass Guard implements GuardInterface\n{\n    /**\n     * The connection to bind to.\n     *\n     * @var ConnectionInterface\n     */\n    protected $connection;\n\n    /**\n     * The domain configuration to utilize.\n     *\n     * @var DomainConfiguration\n     */\n    protected $configuration;\n\n    /**\n     * The event dispatcher.\n     *\n     * @var DispatcherInterface\n     */\n    protected $events;\n\n    /**\n     * {@inheritdoc}\n     */\n    public function __construct(ConnectionInterface $connection, DomainConfiguration $configuration)\n    {\n        $this->connection = $connection;\n        $this->configuration = $configuration;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function attempt($username, $password, $bindAsUser = false)\n    {\n        $this->validateCredentials($username, $password);\n\n        $this->fireAttemptingEvent($username, $password);\n\n        try {\n            $this->bind(\n                $this->applyPrefixAndSuffix($username),\n                $password\n            );\n\n            $result = true;\n\n            $this->firePassedEvent($username, $password);\n        } catch (BindException $e) {\n            // We'll catch the BindException here to allow\n            // developers to use a simple if / else\n            // using the attempt method.\n            $result = false;\n        }\n\n        // If we're not allowed to bind as the user,\n        // we'll rebind as administrator.\n        if ($bindAsUser === false) {\n            // We won't catch any BindException here so we can\n            // catch rebind failures. However this shouldn't\n            // occur if our credentials are correct\n            // in the first place.\n            $this->bindAsAdministrator();\n        }\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function bind($username = null, $password = null)\n    {\n        $this->fireBindingEvent($username, $password);\n\n        try {\n            if (@$this->connection->bind($username, $password) === true) {\n                $this->fireBoundEvent($username, $password);\n            } else {\n                throw new Exception($this->connection->getLastError(), $this->connection->errNo());\n            }\n        } catch (Throwable $e) {\n            $this->fireFailedEvent($username, $password);\n\n            throw (new BindException($e->getMessage(), $e->getCode(), $e))\n                ->setDetailedError($this->connection->getDetailedError());\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function bindAsAdministrator()\n    {\n        $this->bind(\n            $this->configuration->get('username'),\n            $this->configuration->get('password')\n        );\n    }\n\n    /**\n     * Get the event dispatcher instance.\n     *\n     * @return DispatcherInterface\n     */\n    public function getDispatcher()\n    {\n        return $this->events;\n    }\n\n    /**\n     * Sets the event dispatcher instance.\n     *\n     * @param DispatcherInterface $dispatcher\n     *\n     * @return void\n     */\n    public function setDispatcher(DispatcherInterface $dispatcher)\n    {\n        $this->events = $dispatcher;\n    }\n\n    /**\n     * Applies the prefix and suffix to the given username.\n     *\n     * @param string $username\n     *\n     * @throws \\Adldap\\Configuration\\ConfigurationException If account_suffix or account_prefix do not\n     *                                                      exist in the providers domain configuration\n     *\n     * @return string\n     */\n    protected function applyPrefixAndSuffix($username)\n    {\n        $prefix = $this->configuration->get('account_prefix');\n        $suffix = $this->configuration->get('account_suffix');\n\n        return $prefix.$username.$suffix;\n    }\n\n    /**\n     * Validates the specified username and password from being empty.\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @throws PasswordRequiredException When the given password is empty.\n     * @throws UsernameRequiredException When the given username is empty.\n     */\n    protected function validateCredentials($username, $password)\n    {\n        if (empty($username)) {\n            // Check for an empty username.\n            throw new UsernameRequiredException('A username must be specified.');\n        }\n\n        if (empty($password)) {\n            // Check for an empty password.\n            throw new PasswordRequiredException('A password must be specified.');\n        }\n    }\n\n    /**\n     * Fire the attempting event.\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @return void\n     */\n    protected function fireAttemptingEvent($username, $password)\n    {\n        if (isset($this->events)) {\n            $this->events->fire(new Attempting($this->connection, $username, $password));\n        }\n    }\n\n    /**\n     * Fire the passed event.\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @return void\n     */\n    protected function firePassedEvent($username, $password)\n    {\n        if (isset($this->events)) {\n            $this->events->fire(new Passed($this->connection, $username, $password));\n        }\n    }\n\n    /**\n     * Fire the failed event.\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @return void\n     */\n    protected function fireFailedEvent($username, $password)\n    {\n        if (isset($this->events)) {\n            $this->events->fire(new Failed($this->connection, $username, $password));\n        }\n    }\n\n    /**\n     * Fire the binding event.\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @return void\n     */\n    protected function fireBindingEvent($username, $password)\n    {\n        if (isset($this->events)) {\n            $this->events->fire(new Binding($this->connection, $username, $password));\n        }\n    }\n\n    /**\n     * Fire the bound event.\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @return void\n     */\n    protected function fireBoundEvent($username, $password)\n    {\n        if (isset($this->events)) {\n            $this->events->fire(new Bound($this->connection, $username, $password));\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/GuardInterface.php",
    "content": "<?php\n\nnamespace Adldap\\Auth;\n\nuse Adldap\\Connections\\ConnectionInterface;\nuse Adldap\\Configuration\\DomainConfiguration;\n\ninterface GuardInterface\n{\n    /**\n     * Constructor.\n     *\n     * @param ConnectionInterface $connection\n     * @param DomainConfiguration $configuration\n     */\n    public function __construct(ConnectionInterface $connection, DomainConfiguration $configuration);\n\n    /**\n     * Authenticates a user using the specified credentials.\n     *\n     * @param string $username   The users LDAP username.\n     * @param string $password   The users LDAP password.\n     * @param bool   $bindAsUser Whether or not to bind as the user.\n     *\n     * @throws \\Adldap\\Auth\\BindException             When re-binding to your LDAP server fails.\n     * @throws \\Adldap\\Auth\\UsernameRequiredException When username is empty.\n     * @throws \\Adldap\\Auth\\PasswordRequiredException When password is empty.\n     *\n     * @return bool\n     */\n    public function attempt($username, $password, $bindAsUser = false);\n\n    /**\n     * Binds to the current connection using the inserted credentials.\n     *\n     * @param string|null $username\n     * @param string|null $password\n     *\n     * @throws \\Adldap\\Auth\\BindException              If binding to the LDAP server fails.\n     * @throws \\Adldap\\Connections\\ConnectionException If upgrading the connection to TLS fails\n     *\n     * @return void\n     */\n    public function bind($username = null, $password = null);\n\n    /**\n     * Binds to the current LDAP server using the\n     * configuration administrator credentials.\n     *\n     * @throws \\Adldap\\Auth\\BindException When binding as your administrator account fails.\n     *\n     * @return void\n     */\n    public function bindAsAdministrator();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/PasswordRequiredException.php",
    "content": "<?php\n\nnamespace Adldap\\Auth;\n\nuse Adldap\\AdldapException;\n\nclass PasswordRequiredException extends AdldapException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Auth/UsernameRequiredException.php",
    "content": "<?php\n\nnamespace Adldap\\Auth;\n\nuse Adldap\\AdldapException;\n\nclass UsernameRequiredException extends AdldapException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/ConfigurationException.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration;\n\nuse Adldap\\AdldapException;\n\n/**\n * Class ConfigurationException.\n *\n * Thrown when a configuration value does not exist, or a\n * configuration value being set is not valid.\n */\nclass ConfigurationException extends AdldapException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/DomainConfiguration.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration;\n\nuse Adldap\\Schemas\\ActiveDirectory;\nuse Adldap\\Connections\\ConnectionInterface;\n\n/**\n * Class DomainConfiguration.\n *\n * Contains an array of configuration options for a single LDAP connection.\n */\nclass DomainConfiguration\n{\n    /**\n     * The configuration options array.\n     *\n     * The default values for each key indicate the type of value it requires.\n     *\n     * @var array\n     */\n    protected $options = [\n        // An array of LDAP hosts.\n        'hosts' => [],\n\n        // The global LDAP operation timeout limit in seconds.\n        'timeout' => 5,\n\n        // The LDAP version to utilize.\n        'version' => 3,\n\n        // The port to use for connecting to your hosts.\n        'port' => ConnectionInterface::PORT,\n\n        // The schema to use for your LDAP connection.\n        'schema' => ActiveDirectory::class,\n\n        // The base distinguished name of your domain.\n        'base_dn' => '',\n\n        // The username to connect to your hosts with.\n        'username' => '',\n\n        // The password that is utilized with the above user.\n        'password' => '',\n\n        // The account prefix to use when authenticating users.\n        'account_prefix' => null,\n\n        // The account suffix to use when authenticating users.\n        'account_suffix' => null,\n\n        // Whether or not to use SSL when connecting to your hosts.\n        'use_ssl' => false,\n\n        // Whether or not to use TLS when connecting to your hosts.\n        'use_tls' => false,\n\n        // Whether or not follow referrals is enabled when performing LDAP operations.\n        'follow_referrals' => false,\n\n        // Custom LDAP options that you'd like to utilize.\n        'custom_options' => [],\n    ];\n\n    /**\n     * Constructor.\n     *\n     * @param array $options\n     *\n     * @throws ConfigurationException When an option value given is an invalid type.\n     */\n    public function __construct(array $options = [])\n    {\n        foreach ($options as $key => $value) {\n            $this->set($key, $value);\n        }\n    }\n\n    /**\n     * Sets a configuration option.\n     *\n     * Throws an exception if the specified option does\n     * not exist, or if it's an invalid type.\n     *\n     * @param string $key\n     * @param mixed  $value\n     *\n     * @throws ConfigurationException When an option value given is an invalid type.\n     */\n    public function set($key, $value)\n    {\n        if ($this->validate($key, $value)) {\n            $this->options[$key] = $value;\n        }\n    }\n\n    /**\n     * Returns the value for the specified configuration options.\n     *\n     * Throws an exception if the specified option does not exist.\n     *\n     * @param string $key\n     *\n     * @throws ConfigurationException When the option specified does not exist.\n     *\n     * @return mixed\n     */\n    public function get($key)\n    {\n        if ($this->has($key)) {\n            return $this->options[$key];\n        }\n\n        throw new ConfigurationException(\"Option {$key} does not exist.\");\n    }\n\n    /**\n     * Checks if a configuration option exists.\n     *\n     * @param string $key\n     *\n     * @return bool\n     */\n    public function has($key)\n    {\n        return array_key_exists($key, $this->options);\n    }\n\n    /**\n     * Validates the new configuration option against its\n     * default value to ensure it's the correct type.\n     *\n     * If an invalid type is given, an exception is thrown.\n     *\n     * @param string $key\n     * @param mixed  $value\n     *\n     * @throws ConfigurationException When an option value given is an invalid type.\n     *\n     * @return bool\n     */\n    protected function validate($key, $value)\n    {\n        $default = $this->get($key);\n\n        if (is_array($default)) {\n            $validator = new Validators\\ArrayValidator($key, $value);\n        } elseif (is_int($default)) {\n            $validator = new Validators\\IntegerValidator($key, $value);\n        } elseif (is_bool($default)) {\n            $validator = new Validators\\BooleanValidator($key, $value);\n        } elseif (class_exists($default)) {\n            $validator = new Validators\\ClassValidator($key, $value);\n        } else {\n            $validator = new Validators\\StringOrNullValidator($key, $value);\n        }\n\n        return $validator->validate();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/Validators/ArrayValidator.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration\\Validators;\n\nuse Adldap\\Configuration\\ConfigurationException;\n\n/**\n * Class ArrayValidator.\n *\n * Validates that the configuration value is an array.\n */\nclass ArrayValidator extends Validator\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function validate()\n    {\n        if (!is_array($this->value)) {\n            throw new ConfigurationException(\"Option {$this->key} must be an array.\");\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/Validators/BooleanValidator.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration\\Validators;\n\nuse Adldap\\Configuration\\ConfigurationException;\n\n/**\n * Class BooleanValidator.\n *\n * Validates that the configuration value is a boolean.\n */\nclass BooleanValidator extends Validator\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function validate()\n    {\n        if (!is_bool($this->value)) {\n            throw new ConfigurationException(\"Option {$this->key} must be a boolean.\");\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/Validators/ClassValidator.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration\\Validators;\n\nuse Adldap\\Configuration\\ConfigurationException;\n\nclass ClassValidator extends Validator\n{\n    /**\n     * Validates the configuration value.\n     *\n     * @throws ConfigurationException When the value given fails validation.\n     *\n     * @return bool\n     */\n    public function validate()\n    {\n        if (!class_exists($this->value)) {\n            throw new ConfigurationException(\"Option {$this->key} must be a valid class.\");\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/Validators/IntegerValidator.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration\\Validators;\n\nuse Adldap\\Configuration\\ConfigurationException;\n\n/**\n * Class IntegerValidator.\n *\n * Validates that the configuration value is an integer / number.\n */\nclass IntegerValidator extends Validator\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function validate()\n    {\n        if (!is_numeric($this->value)) {\n            throw new ConfigurationException(\"Option {$this->key} must be an integer.\");\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/Validators/StringOrNullValidator.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration\\Validators;\n\nuse Adldap\\Configuration\\ConfigurationException;\n\n/**\n * Class StringOrNullValidator.\n *\n * Validates that the configuration value is a string or null.\n */\nclass StringOrNullValidator extends Validator\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function validate()\n    {\n        if (is_string($this->value) || is_null($this->value)) {\n            return true;\n        }\n\n        throw new ConfigurationException(\"Option {$this->key} must be a string or null.\");\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Configuration/Validators/Validator.php",
    "content": "<?php\n\nnamespace Adldap\\Configuration\\Validators;\n\n/**\n * Class Validator.\n *\n * Validates configuration values.\n */\nabstract class Validator\n{\n    /**\n     * The configuration key under validation.\n     *\n     * @var string\n     */\n    protected $key;\n\n    /**\n     * The configuration value under validation.\n     *\n     * @var mixed\n     */\n    protected $value;\n\n    /**\n     * Constructor.\n     *\n     * @param string $key\n     * @param mixed  $value\n     */\n    public function __construct($key, $value)\n    {\n        $this->key = $key;\n        $this->value = $value;\n    }\n\n    /**\n     * Validates the configuration value.\n     *\n     * @throws \\Adldap\\Configuration\\ConfigurationException When the value given fails validation.\n     *\n     * @return bool\n     */\n    abstract public function validate();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Connections/ConnectionException.php",
    "content": "<?php\n\nnamespace Adldap\\Connections;\n\nuse Adldap\\AdldapException;\n\nclass ConnectionException extends AdldapException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Connections/ConnectionInterface.php",
    "content": "<?php\n\nnamespace Adldap\\Connections;\n\n/**\n * The Connection interface used for making connections. Implementing\n * this interface on connection classes helps unit and functional\n * test classes that require a connection.\n *\n * Interface ConnectionInterface\n */\ninterface ConnectionInterface\n{\n    /**\n     * The SSL LDAP protocol string.\n     *\n     * @var string\n     */\n    const PROTOCOL_SSL = 'ldaps://';\n\n    /**\n     * The standard LDAP protocol string.\n     *\n     * @var string\n     */\n    const PROTOCOL = 'ldap://';\n\n    /**\n     * The LDAP SSL port number.\n     *\n     * @var string\n     */\n    const PORT_SSL = 636;\n\n    /**\n     * The standard LDAP port number.\n     *\n     * @var string\n     */\n    const PORT = 389;\n\n    /**\n     * Constructor.\n     *\n     * @param string|null $name The connection name.\n     */\n    public function __construct($name = null);\n\n    /**\n     * Returns true / false if the current connection instance is using SSL.\n     *\n     * @return bool\n     */\n    public function isUsingSSL();\n\n    /**\n     * Returns true / false if the current connection instance is using TLS.\n     *\n     * @return bool\n     */\n    public function isUsingTLS();\n\n    /**\n     * Returns true / false if the current connection is able to modify passwords.\n     *\n     * @return bool\n     */\n    public function canChangePasswords();\n\n    /**\n     * Returns true / false if the current connection is bound.\n     *\n     * @return bool\n     */\n    public function isBound();\n\n    /**\n     * Sets the current connection to use SSL.\n     *\n     * @param bool $enabled\n     *\n     * @return ConnectionInterface\n     */\n    public function ssl($enabled = true);\n\n    /**\n     * Sets the current connection to use TLS.\n     *\n     * @param bool $enabled\n     *\n     * @return ConnectionInterface\n     */\n    public function tls($enabled = true);\n\n    /**\n     * Returns the full LDAP host URL.\n     *\n     * Ex: ldap://192.168.1.1:386\n     *\n     * @return string|null\n     */\n    public function getHost();\n\n    /**\n     * Returns the connections name.\n     *\n     * @return string|null\n     */\n    public function getName();\n\n    /**\n     * Get the current connection.\n     *\n     * @return mixed\n     */\n    public function getConnection();\n\n    /**\n     * Retrieve the entries from a search result.\n     *\n     * @link http://php.net/manual/en/function.ldap-get-entries.php\n     *\n     * @param $searchResult\n     *\n     * @return mixed\n     */\n    public function getEntries($searchResult);\n\n    /**\n     * Returns the number of entries from a search result.\n     *\n     * @link http://php.net/manual/en/function.ldap-count-entries.php\n     *\n     * @param $searchResult\n     *\n     * @return int\n     */\n    public function countEntries($searchResult);\n\n    /**\n     * Compare value of attribute found in entry specified with DN.\n     *\n     * @link http://php.net/manual/en/function.ldap-compare.php\n     *\n     * @param string $dn\n     * @param string $attribute\n     * @param string $value\n     *\n     * @return mixed\n     */\n    public function compare($dn, $attribute, $value);\n\n    /**\n     * Retrieves the first entry from a search result.\n     *\n     * @link http://php.net/manual/en/function.ldap-first-entry.php\n     *\n     * @param $searchResult\n     *\n     * @return mixed\n     */\n    public function getFirstEntry($searchResult);\n\n    /**\n     * Retrieves the next entry from a search result.\n     *\n     * @link http://php.net/manual/en/function.ldap-next-entry.php\n     *\n     * @param $entry\n     *\n     * @return mixed\n     */\n    public function getNextEntry($entry);\n\n    /**\n     * Retrieves the ldap entry's attributes.\n     *\n     * @link http://php.net/manual/en/function.ldap-get-attributes.php\n     *\n     * @param $entry\n     *\n     * @return mixed\n     */\n    public function getAttributes($entry);\n\n    /**\n     * Retrieve the last error on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-error.php\n     *\n     * @return string\n     */\n    public function getLastError();\n\n    /**\n     * Return detailed information about an error.\n     *\n     * Returns false when there was a successful last request.\n     *\n     * Returns DetailedError when there was an error.\n     *\n     * @return DetailedError|null\n     */\n    public function getDetailedError();\n\n    /**\n     * Get all binary values from the specified result entry.\n     *\n     * @link http://php.net/manual/en/function.ldap-get-values-len.php\n     *\n     * @param $entry\n     * @param $attribute\n     *\n     * @return array\n     */\n    public function getValuesLen($entry, $attribute);\n\n    /**\n     * Sets an option on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-set-option.php\n     *\n     * @param int   $option\n     * @param mixed $value\n     *\n     * @return mixed\n     */\n    public function setOption($option, $value);\n\n    /**\n     * Sets options on the current connection.\n     *\n     * @param array $options\n     *\n     * @return mixed\n     */\n    public function setOptions(array $options = []);\n\n    /**\n     * Set a callback function to do re-binds on referral chasing.\n     *\n     * @link http://php.net/manual/en/function.ldap-set-rebind-proc.php\n     *\n     * @param callable $callback\n     *\n     * @return bool\n     */\n    public function setRebindCallback(callable $callback);\n\n    /**\n     * Connects to the specified hostname using the specified port.\n     *\n     * @link http://php.net/manual/en/function.ldap-start-tls.php\n     *\n     * @param string|array $hostname\n     * @param int          $port\n     *\n     * @return mixed\n     */\n    public function connect($hostname = [], $port = 389);\n\n    /**\n     * Starts a connection using TLS.\n     *\n     * @link http://php.net/manual/en/function.ldap-start-tls.php\n     *\n     * @throws ConnectionException If starting TLS fails.\n     *\n     * @return mixed\n     */\n    public function startTLS();\n\n    /**\n     * Binds to the current connection using the specified username and password.\n     * If sasl is true, the current connection is bound using SASL.\n     *\n     * @link http://php.net/manual/en/function.ldap-bind.php\n     *\n     * @param string $username\n     * @param string $password\n     * @param bool   $sasl\n     *\n     * @throws ConnectionException If starting TLS fails.\n     *\n     * @return bool\n     */\n    public function bind($username, $password, $sasl = false);\n\n    /**\n     * Closes the current connection.\n     *\n     * Returns false if no connection is present.\n     *\n     * @link http://php.net/manual/en/function.ldap-close.php\n     *\n     * @return bool\n     */\n    public function close();\n\n    /**\n     * Performs a search on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-search.php\n     *\n     * @param string $dn\n     * @param string $filter\n     * @param array  $fields\n     * @param bool   $onlyAttributes\n     * @param int    $size\n     * @param int    $time\n     *\n     * @return mixed\n     */\n    public function search($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0);\n\n    /**\n     * Reads an entry on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-read.php\n     *\n     * @param string $dn\n     * @param $filter\n     * @param array $fields\n     * @param bool  $onlyAttributes\n     * @param int   $size\n     * @param int   $time\n     *\n     * @return mixed\n     */\n    public function read($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0);\n\n    /**\n     * Performs a single level search on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-list.php\n     *\n     * @param string $dn\n     * @param string $filter\n     * @param array  $attributes\n     * @param bool   $onlyAttributes\n     * @param int    $size\n     * @param int    $time\n     *\n     * @return mixed\n     */\n    public function listing($dn, $filter, array $attributes, $onlyAttributes = false, $size = 0, $time = 0);\n\n    /**\n     * Adds an entry to the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-add.php\n     *\n     * @param string $dn\n     * @param array  $entry\n     *\n     * @return bool\n     */\n    public function add($dn, array $entry);\n\n    /**\n     * Deletes an entry on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-delete.php\n     *\n     * @param string $dn\n     *\n     * @return bool\n     */\n    public function delete($dn);\n\n    /**\n     * Modify the name of an entry on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-rename.php\n     *\n     * @param string $dn\n     * @param string $newRdn\n     * @param string $newParent\n     * @param bool   $deleteOldRdn\n     *\n     * @return bool\n     */\n    public function rename($dn, $newRdn, $newParent, $deleteOldRdn = false);\n\n    /**\n     * Modifies an existing entry on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-modify.php\n     *\n     * @param string $dn\n     * @param array  $entry\n     *\n     * @return bool\n     */\n    public function modify($dn, array $entry);\n\n    /**\n     * Batch modifies an existing entry on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-modify-batch.php\n     *\n     * @param string $dn\n     * @param array  $values\n     *\n     * @return mixed\n     */\n    public function modifyBatch($dn, array $values);\n\n    /**\n     * Add attribute values to current attributes.\n     *\n     * @link http://php.net/manual/en/function.ldap-mod-add.php\n     *\n     * @param string $dn\n     * @param array  $entry\n     *\n     * @return mixed\n     */\n    public function modAdd($dn, array $entry);\n\n    /**\n     * Replaces attribute values with new ones.\n     *\n     * @link http://php.net/manual/en/function.ldap-mod-replace.php\n     *\n     * @param string $dn\n     * @param array  $entry\n     *\n     * @return mixed\n     */\n    public function modReplace($dn, array $entry);\n\n    /**\n     * Delete attribute values from current attributes.\n     *\n     * @link http://php.net/manual/en/function.ldap-mod-del.php\n     *\n     * @param string $dn\n     * @param array  $entry\n     *\n     * @return mixed\n     */\n    public function modDelete($dn, array $entry);\n\n    /**\n     * Send LDAP pagination control.\n     *\n     * @link http://php.net/manual/en/function.ldap-control-paged-result.php\n     *\n     * @param int    $pageSize\n     * @param bool   $isCritical\n     * @param string $cookie\n     *\n     * @return mixed\n     */\n    public function controlPagedResult($pageSize = 1000, $isCritical = false, $cookie = '');\n\n    /**\n     * Retrieve the LDAP pagination cookie.\n     *\n     * @link http://php.net/manual/en/function.ldap-control-paged-result-response.php\n     *\n     * @param $result\n     * @param string $cookie\n     *\n     * @return mixed\n     */\n    public function controlPagedResultResponse($result, &$cookie);\n\n    /**\n     * Frees up the memory allocated internally to store the result.\n     *\n     * @link https://www.php.net/manual/en/function.ldap-free-result.php\n     *\n     * @param resource $result\n     *\n     * @return bool\n     */\n    public function freeResult($result);\n\n    /**\n     * Returns the error number of the last command\n     * executed on the current connection.\n     *\n     * @link http://php.net/manual/en/function.ldap-errno.php\n     *\n     * @return int\n     */\n    public function errNo();\n\n    /**\n     * Returns the extended error string of the last command.\n     *\n     * @return string\n     */\n    public function getExtendedError();\n\n    /**\n     * Returns the extended error hex code of the last command.\n     *\n     * @return string|null\n     */\n    public function getExtendedErrorHex();\n\n    /**\n     * Returns the extended error code of the last command.\n     *\n     * @return string\n     */\n    public function getExtendedErrorCode();\n\n    /**\n     * Returns the error string of the specified\n     * error number.\n     *\n     * @link http://php.net/manual/en/function.ldap-err2str.php\n     *\n     * @param int $number\n     *\n     * @return string\n     */\n    public function err2Str($number);\n\n    /**\n     * Return the diagnostic Message.\n     *\n     * @return string\n     */\n    public function getDiagnosticMessage();\n\n    /**\n     * Extract the diagnostic code from the message.\n     *\n     * @param string $message\n     *\n     * @return string|bool\n     */\n    public function extractDiagnosticCode($message);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Connections/DetailedError.php",
    "content": "<?php\n\nnamespace Adldap\\Connections;\n\nclass DetailedError\n{\n    /**\n     * The error code from ldap_errno.\n     *\n     * @var int|null\n     */\n    protected $errorCode;\n\n    /**\n     * The error message from ldap_error.\n     *\n     * @var string|null\n     */\n    protected $errorMessage;\n\n    /**\n     * The diagnostic message when retrieved after an ldap_error.\n     *\n     * @var string|null\n     */\n    protected $diagnosticMessage;\n\n    /**\n     * Constructor.\n     *\n     * @param int    $errorCode\n     * @param string $errorMessage\n     * @param string $diagnosticMessage\n     */\n    public function __construct($errorCode, $errorMessage, $diagnosticMessage)\n    {\n        $this->errorCode = $errorCode;\n        $this->errorMessage = $errorMessage;\n        $this->diagnosticMessage = $diagnosticMessage;\n    }\n\n    /**\n     * Returns the LDAP error code.\n     *\n     * @return int\n     */\n    public function getErrorCode()\n    {\n        return $this->errorCode;\n    }\n\n    /**\n     * Returns the LDAP error message.\n     *\n     * @return string\n     */\n    public function getErrorMessage()\n    {\n        return $this->errorMessage;\n    }\n\n    /**\n     * Returns the LDAP diagnostic message.\n     *\n     * @return string\n     */\n    public function getDiagnosticMessage()\n    {\n        return $this->diagnosticMessage;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Connections/Ldap.php",
    "content": "<?php\n\nnamespace Adldap\\Connections;\n\n/**\n * Class Ldap.\n *\n * A class that abstracts PHP's LDAP functions and stores the bound connection.\n */\nclass Ldap implements ConnectionInterface\n{\n    /**\n     * The connection name.\n     *\n     * @var string|null\n     */\n    protected $name;\n\n    /**\n     * The LDAP host that is currently connected.\n     *\n     * @var string|null\n     */\n    protected $host;\n\n    /**\n     * The active LDAP connection.\n     *\n     * @var resource\n     */\n    protected $connection;\n\n    /**\n     * The bound status of the connection.\n     *\n     * @var bool\n     */\n    protected $bound = false;\n\n    /**\n     * Whether the connection must be bound over SSL.\n     *\n     * @var bool\n     */\n    protected $useSSL = false;\n\n    /**\n     * Whether the connection must be bound over TLS.\n     *\n     * @var bool\n     */\n    protected $useTLS = false;\n\n    /**\n     * {@inheritdoc}\n     */\n    public function __construct($name = null)\n    {\n        $this->name = $name;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isUsingSSL()\n    {\n        return $this->useSSL;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isUsingTLS()\n    {\n        return $this->useTLS;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isBound()\n    {\n        return $this->bound;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function canChangePasswords()\n    {\n        return $this->isUsingSSL() || $this->isUsingTLS();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function ssl($enabled = true)\n    {\n        $this->useSSL = $enabled;\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function tls($enabled = true)\n    {\n        $this->useTLS = $enabled;\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getHost()\n    {\n        return $this->host;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getConnection()\n    {\n        return $this->connection;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getEntries($searchResults)\n    {\n        return ldap_get_entries($this->connection, $searchResults);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getFirstEntry($searchResults)\n    {\n        return ldap_first_entry($this->connection, $searchResults);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getNextEntry($entry)\n    {\n        return ldap_next_entry($this->connection, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getAttributes($entry)\n    {\n        return ldap_get_attributes($this->connection, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function countEntries($searchResults)\n    {\n        return ldap_count_entries($this->connection, $searchResults);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function compare($dn, $attribute, $value)\n    {\n        return ldap_compare($this->connection, $dn, $attribute, $value);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getLastError()\n    {\n        return ldap_error($this->connection);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getDetailedError()\n    {\n        // If the returned error number is zero, the last LDAP operation\n        // succeeded. We won't return a detailed error.\n        if ($number = $this->errNo()) {\n            ldap_get_option($this->connection, LDAP_OPT_DIAGNOSTIC_MESSAGE, $message);\n\n            return new DetailedError($number, $this->err2Str($number), $message);\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getValuesLen($entry, $attribute)\n    {\n        return ldap_get_values_len($this->connection, $entry, $attribute);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setOption($option, $value)\n    {\n        return ldap_set_option($this->connection, $option, $value);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setOptions(array $options = [])\n    {\n        foreach ($options as $option => $value) {\n            $this->setOption($option, $value);\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setRebindCallback(callable $callback)\n    {\n        return ldap_set_rebind_proc($this->connection, $callback);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function startTLS()\n    {\n        try {\n            return ldap_start_tls($this->connection);\n        } catch (\\ErrorException $e) {\n            throw new ConnectionException($e->getMessage(), $e->getCode(), $e);\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function connect($hosts = [], $port = 389)\n    {\n        $this->host = $this->getConnectionString($hosts, $this->getProtocol(), $port);\n\n        // Reset the bound status if reinitializing the connection.\n        $this->bound = false;\n\n        return $this->connection = ldap_connect($this->host);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function close()\n    {\n        $connection = $this->connection;\n\n        $result = is_resource($connection) ? ldap_close($connection) : false;\n\n        $this->bound = false;\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function search($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0)\n    {\n        return ldap_search($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function listing($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0)\n    {\n        return ldap_list($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function read($dn, $filter, array $fields, $onlyAttributes = false, $size = 0, $time = 0)\n    {\n        return ldap_read($this->connection, $dn, $filter, $fields, $onlyAttributes, $size, $time);\n    }\n\n    /**\n     * Extract information from an LDAP result.\n     *\n     * @link https://www.php.net/manual/en/function.ldap-parse-result.php\n     *\n     * @param resource $result\n     * @param int      $errorCode\n     * @param string   $dn\n     * @param string   $errorMessage\n     * @param array    $referrals\n     * @param array    $serverControls\n     *\n     * @return bool\n     */\n    public function parseResult($result, &$errorCode, &$dn, &$errorMessage, &$referrals, &$serverControls = [])\n    {\n        return $this->supportsServerControlsInMethods() && !empty($serverControls) ?\n            ldap_parse_result($this->connection, $result, $errorCode, $dn, $errorMessage, $referrals, $serverControls) :\n            ldap_parse_result($this->connection, $result, $errorCode, $dn, $errorMessage, $referrals);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function bind($username, $password, $sasl = false)\n    {\n        // Prior to binding, we will upgrade our connectivity to TLS on our current\n        // connection and ensure we are not already bound before upgrading.\n        // This is to prevent subsequent upgrading on several binds.\n        if ($this->isUsingTLS() && !$this->isBound()) {\n            $this->startTLS();\n        }\n\n        if ($sasl) {\n            return $this->bound = ldap_sasl_bind($this->connection, null, null, 'GSSAPI');\n        }\n\n        return $this->bound = ldap_bind(\n            $this->connection,\n            $username,\n            html_entity_decode($password)\n        );\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function add($dn, array $entry)\n    {\n        return ldap_add($this->connection, $dn, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function delete($dn)\n    {\n        return ldap_delete($this->connection, $dn);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function rename($dn, $newRdn, $newParent, $deleteOldRdn = false)\n    {\n        return ldap_rename($this->connection, $dn, $newRdn, $newParent, $deleteOldRdn);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function modify($dn, array $entry)\n    {\n        return ldap_modify($this->connection, $dn, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function modifyBatch($dn, array $values)\n    {\n        return ldap_modify_batch($this->connection, $dn, $values);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function modAdd($dn, array $entry)\n    {\n        return ldap_mod_add($this->connection, $dn, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function modReplace($dn, array $entry)\n    {\n        return ldap_mod_replace($this->connection, $dn, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function modDelete($dn, array $entry)\n    {\n        return ldap_mod_del($this->connection, $dn, $entry);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function controlPagedResult($pageSize = 1000, $isCritical = false, $cookie = '')\n    {\n        return ldap_control_paged_result($this->connection, $pageSize, $isCritical, $cookie);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function controlPagedResultResponse($result, &$cookie)\n    {\n        return ldap_control_paged_result_response($this->connection, $result, $cookie);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function freeResult($result)\n    {\n        return ldap_free_result($result);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function errNo()\n    {\n        return ldap_errno($this->connection);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getExtendedError()\n    {\n        return $this->getDiagnosticMessage();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getExtendedErrorHex()\n    {\n        if (preg_match(\"/(?<=data\\s).*?(?=\\,)/\", $this->getExtendedError(), $code)) {\n            return $code[0];\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getExtendedErrorCode()\n    {\n        return $this->extractDiagnosticCode($this->getExtendedError());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function err2Str($number)\n    {\n        return ldap_err2str($number);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getDiagnosticMessage()\n    {\n        ldap_get_option($this->connection, LDAP_OPT_ERROR_STRING, $message);\n\n        return $message;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function extractDiagnosticCode($message)\n    {\n        preg_match('/^([\\da-fA-F]+):/', $message, $matches);\n\n        return isset($matches[1]) ? $matches[1] : false;\n    }\n\n    /**\n     * Returns the LDAP protocol to utilize for the current connection.\n     *\n     * @return string\n     */\n    public function getProtocol()\n    {\n        return $this->isUsingSSL() ? $this::PROTOCOL_SSL : $this::PROTOCOL;\n    }\n\n    /**\n     * Determine if the current PHP version supports server controls.\n     *\n     * @return bool\n     */\n    public function supportsServerControlsInMethods()\n    {\n        return version_compare(PHP_VERSION, '7.3.0') >= 0;\n    }\n\n    /**\n     * Generates an LDAP connection string for each host given.\n     *\n     * @param string|array $hosts\n     * @param string       $protocol\n     * @param string       $port\n     *\n     * @return string\n     */\n    protected function getConnectionString($hosts, $protocol, $port)\n    {\n        // If we are using SSL and using the default port, we\n        // will override it to use the default SSL port.\n        if ($this->isUsingSSL() && $port == 389) {\n            $port = self::PORT_SSL;\n        }\n\n        // Normalize hosts into an array.\n        $hosts = is_array($hosts) ? $hosts : [$hosts];\n\n        $hosts = array_map(function ($host) use ($protocol, $port) {\n            return \"{$protocol}{$host}:{$port}\";\n        }, $hosts);\n\n        return implode(' ', $hosts);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Connections/Provider.php",
    "content": "<?php\n\nnamespace Adldap\\Connections;\n\nuse Adldap\\Adldap;\nuse Adldap\\Auth\\Guard;\nuse Adldap\\Query\\Cache;\nuse InvalidArgumentException;\nuse Adldap\\Auth\\GuardInterface;\nuse Adldap\\Schemas\\ActiveDirectory;\nuse Adldap\\Schemas\\SchemaInterface;\nuse Psr\\SimpleCache\\CacheInterface;\nuse Adldap\\Models\\Factory as ModelFactory;\nuse Adldap\\Query\\Factory as SearchFactory;\nuse Adldap\\Configuration\\DomainConfiguration;\n\n/**\n * Class Provider.\n *\n * Contains the LDAP connection and domain configuration to\n * instantiate factories for retrieving and creating\n * LDAP records as well as authentication (binding).\n */\nclass Provider implements ProviderInterface\n{\n    /**\n     * The providers connection.\n     *\n     * @var ConnectionInterface\n     */\n    protected $connection;\n\n    /**\n     * The providers configuration.\n     *\n     * @var DomainConfiguration\n     */\n    protected $configuration;\n\n    /**\n     * The providers schema.\n     *\n     * @var SchemaInterface\n     */\n    protected $schema;\n\n    /**\n     * The providers auth guard instance.\n     *\n     * @var GuardInterface\n     */\n    protected $guard;\n\n    /**\n     * The providers cache instance.\n     *\n     * @var Cache|null\n     */\n    protected $cache;\n\n    /**\n     * {@inheritdoc}\n     */\n    public function __construct($configuration = [], ConnectionInterface $connection = null)\n    {\n        $this->setConfiguration($configuration)\n            ->setConnection($connection);\n    }\n\n    /**\n     * Does nothing. Implemented in order to remain backwards compatible.\n     *\n     * @deprecated since v10.3.0\n     */\n    public function __destruct()\n    {\n        //\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setConfiguration($configuration = [])\n    {\n        if (is_array($configuration)) {\n            $configuration = new DomainConfiguration($configuration);\n        }\n\n        if ($configuration instanceof DomainConfiguration) {\n            $this->configuration = $configuration;\n\n            $schema = $configuration->get('schema');\n\n            // We will update our schema here when our configuration is set.\n            $this->setSchema(new $schema());\n\n            return $this;\n        }\n\n        $class = DomainConfiguration::class;\n\n        throw new InvalidArgumentException(\n            \"Configuration must be array or instance of $class\"\n        );\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setConnection(ConnectionInterface $connection = null)\n    {\n        // We will create a standard connection if one isn't given.\n        $this->connection = $connection ?: new Ldap();\n\n        // Prepare the connection.\n        $this->prepareConnection();\n\n        // Instantiate the LDAP connection.\n        $this->connection->connect(\n            $this->configuration->get('hosts'),\n            $this->configuration->get('port')\n        );\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setSchema(SchemaInterface $schema = null)\n    {\n        $this->schema = $schema ?: new ActiveDirectory();\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function setGuard(GuardInterface $guard)\n    {\n        $this->guard = $guard;\n\n        return $this;\n    }\n\n    /**\n     * Sets the cache store.\n     *\n     * @param CacheInterface $store\n     *\n     * @return $this\n     */\n    public function setCache(CacheInterface $store)\n    {\n        $this->cache = new Cache($store);\n\n        return $this;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getConfiguration()\n    {\n        return $this->configuration;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getConnection()\n    {\n        return $this->connection;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getSchema()\n    {\n        return $this->schema;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getGuard()\n    {\n        if (!$this->guard instanceof GuardInterface) {\n            $this->setGuard($this->getDefaultGuard($this->connection, $this->configuration));\n        }\n\n        return $this->guard;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getDefaultGuard(ConnectionInterface $connection, DomainConfiguration $configuration)\n    {\n        $guard = new Guard($connection, $configuration);\n\n        $guard->setDispatcher(Adldap::getEventDispatcher());\n\n        return $guard;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function make()\n    {\n        return new ModelFactory(\n            $this->search()->newQuery()\n        );\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function search()\n    {\n        $factory = new SearchFactory(\n            $this->connection,\n            $this->schema,\n            $this->configuration->get('base_dn')\n        );\n\n        if ($this->cache) {\n            $factory->setCache($this->cache);\n        }\n\n        return $factory;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function auth()\n    {\n        return $this->getGuard();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function connect($username = null, $password = null)\n    {\n        // Get the default guard instance.\n        $guard = $this->getGuard();\n\n        if (is_null($username) && is_null($password)) {\n            // If both the username and password are null, we'll connect to the server\n            // using the configured administrator username and password.\n            $guard->bindAsAdministrator();\n        } else {\n            // Bind to the server with the specified username and password otherwise.\n            $guard->bind($username, $password);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Prepares the connection by setting configured parameters.\n     *\n     * @throws \\Adldap\\Configuration\\ConfigurationException When configuration options requested do not exist\n     *\n     * @return void\n     */\n    protected function prepareConnection()\n    {\n        if ($this->configuration->get('use_ssl')) {\n            $this->connection->ssl();\n        } elseif ($this->configuration->get('use_tls')) {\n            $this->connection->tls();\n        }\n\n        $options = array_replace(\n            $this->configuration->get('custom_options'),\n            [\n                LDAP_OPT_PROTOCOL_VERSION => $this->configuration->get('version'),\n                LDAP_OPT_NETWORK_TIMEOUT  => $this->configuration->get('timeout'),\n                LDAP_OPT_REFERRALS        => $this->configuration->get('follow_referrals'),\n            ]\n        );\n\n        $this->connection->setOptions($options);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Connections/ProviderInterface.php",
    "content": "<?php\n\nnamespace Adldap\\Connections;\n\nuse Adldap\\Auth\\GuardInterface;\nuse Adldap\\Schemas\\SchemaInterface;\nuse Adldap\\Configuration\\DomainConfiguration;\n\ninterface ProviderInterface\n{\n    /**\n     * Constructor.\n     *\n     * @param array|DomainConfiguration $configuration\n     * @param ConnectionInterface       $connection\n     */\n    public function __construct($configuration, ConnectionInterface $connection);\n\n    /**\n     * Returns the current connection instance.\n     *\n     * @return ConnectionInterface\n     */\n    public function getConnection();\n\n    /**\n     * Returns the current configuration instance.\n     *\n     * @return DomainConfiguration\n     */\n    public function getConfiguration();\n\n    /**\n     * Returns the current Guard instance.\n     *\n     * @return \\Adldap\\Auth\\Guard\n     */\n    public function getGuard();\n\n    /**\n     * Returns a new default Guard instance.\n     *\n     * @param ConnectionInterface $connection\n     * @param DomainConfiguration $configuration\n     *\n     * @return \\Adldap\\Auth\\Guard\n     */\n    public function getDefaultGuard(ConnectionInterface $connection, DomainConfiguration $configuration);\n\n    /**\n     * Sets the current connection.\n     *\n     * @param ConnectionInterface $connection\n     *\n     * @return $this\n     */\n    public function setConnection(ConnectionInterface $connection = null);\n\n    /**\n     * Sets the current configuration.\n     *\n     * @param DomainConfiguration|array $configuration\n     *\n     * @throws \\Adldap\\Configuration\\ConfigurationException\n     */\n    public function setConfiguration($configuration = []);\n\n    /**\n     * Sets the current LDAP attribute schema.\n     *\n     * @param SchemaInterface|null $schema\n     *\n     * @return $this\n     */\n    public function setSchema(SchemaInterface $schema = null);\n\n    /**\n     * Returns the current LDAP attribute schema.\n     *\n     * @return SchemaInterface\n     */\n    public function getSchema();\n\n    /**\n     * Sets the current Guard instance.\n     *\n     * @param GuardInterface $guard\n     *\n     * @return $this\n     */\n    public function setGuard(GuardInterface $guard);\n\n    /**\n     * Returns a new Model factory instance.\n     *\n     * @return \\Adldap\\Models\\Factory\n     */\n    public function make();\n\n    /**\n     * Returns a new Search factory instance.\n     *\n     * @return \\Adldap\\Query\\Factory\n     */\n    public function search();\n\n    /**\n     * Returns a new Auth Guard instance.\n     *\n     * @return \\Adldap\\Auth\\Guard\n     */\n    public function auth();\n\n    /**\n     * Connects and Binds to the Domain Controller.\n     *\n     * If no username or password is specified, then the\n     * configured administrator credentials are used.\n     *\n     * @param string|null $username\n     * @param string|null $password\n     *\n     * @throws \\Adldap\\Auth\\BindException If binding to the LDAP server fails.\n     * @throws ConnectionException        If upgrading the connection to TLS fails\n     *\n     * @return ProviderInterface\n     */\n    public function connect($username = null, $password = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Events/Dispatcher.php",
    "content": "<?php\n\nnamespace Adldap\\Events;\n\nuse Illuminate\\Support\\Arr;\n\n/**\n * Class Dispatcher.\n *\n * Handles event listening and dispatching.\n *\n * This code was taken out of the Laravel Framework core\n * with broadcasting and queuing omitted to remove\n * an extra dependency that would be required.\n *\n * @author Taylor Otwell\n *\n * @see https://github.com/laravel/framework\n */\nclass Dispatcher implements DispatcherInterface\n{\n    /**\n     * The registered event listeners.\n     *\n     * @var array\n     */\n    protected $listeners = [];\n\n    /**\n     * The wildcard listeners.\n     *\n     * @var array\n     */\n    protected $wildcards = [];\n\n    /**\n     * The cached wildcard listeners.\n     *\n     * @var array\n     */\n    protected $wildcardsCache = [];\n\n    /**\n     * {@inheritdoc}\n     */\n    public function listen($events, $listener)\n    {\n        foreach ((array) $events as $event) {\n            if (strpos($event, '*') !== false) {\n                $this->setupWildcardListen($event, $listener);\n            } else {\n                $this->listeners[$event][] = $this->makeListener($listener);\n            }\n        }\n    }\n\n    /**\n     * Setup a wildcard listener callback.\n     *\n     * @param string $event\n     * @param mixed  $listener\n     *\n     * @return void\n     */\n    protected function setupWildcardListen($event, $listener)\n    {\n        $this->wildcards[$event][] = $this->makeListener($listener, true);\n\n        $this->wildcardsCache = [];\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function hasListeners($eventName)\n    {\n        return isset($this->listeners[$eventName]) || isset($this->wildcards[$eventName]);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function until($event, $payload = [])\n    {\n        return $this->dispatch($event, $payload, true);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function fire($event, $payload = [], $halt = false)\n    {\n        return $this->dispatch($event, $payload, $halt);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function dispatch($event, $payload = [], $halt = false)\n    {\n        // When the given \"event\" is actually an object we will assume it is an event\n        // object and use the class as the event name and this event itself as the\n        // payload to the handler, which makes object based events quite simple.\n        list($event, $payload) = $this->parseEventAndPayload(\n            $event,\n            $payload\n        );\n\n        $responses = [];\n\n        foreach ($this->getListeners($event) as $listener) {\n            $response = $listener($event, $payload);\n\n            // If a response is returned from the listener and event halting is enabled\n            // we will just return this response, and not call the rest of the event\n            // listeners. Otherwise we will add the response on the response list.\n            if ($halt && !is_null($response)) {\n                return $response;\n            }\n\n            // If a boolean false is returned from a listener, we will stop propagating\n            // the event to any further listeners down in the chain, else we keep on\n            // looping through the listeners and firing every one in our sequence.\n            if ($response === false) {\n                break;\n            }\n\n            $responses[] = $response;\n        }\n\n        return $halt ? null : $responses;\n    }\n\n    /**\n     * Parse the given event and payload and prepare them for dispatching.\n     *\n     * @param mixed $event\n     * @param mixed $payload\n     *\n     * @return array\n     */\n    protected function parseEventAndPayload($event, $payload)\n    {\n        if (is_object($event)) {\n            list($payload, $event) = [[$event], get_class($event)];\n        }\n\n        return [$event, Arr::wrap($payload)];\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getListeners($eventName)\n    {\n        $listeners = $this->listeners[$eventName] ?? [];\n\n        $listeners = array_merge(\n            $listeners,\n            $this->wildcardsCache[$eventName] ?? $this->getWildcardListeners($eventName)\n        );\n\n        return class_exists($eventName, false)\n            ? $this->addInterfaceListeners($eventName, $listeners)\n            : $listeners;\n    }\n\n    /**\n     * Get the wildcard listeners for the event.\n     *\n     * @param string $eventName\n     *\n     * @return array\n     */\n    protected function getWildcardListeners($eventName)\n    {\n        $wildcards = [];\n\n        foreach ($this->wildcards as $key => $listeners) {\n            if ($this->wildcardContainsEvent($key, $eventName)) {\n                $wildcards = array_merge($wildcards, $listeners);\n            }\n        }\n\n        return $this->wildcardsCache[$eventName] = $wildcards;\n    }\n\n    /**\n     * Determine if the wildcard matches or contains the given event.\n     *\n     * This function is a direct excerpt from Laravel's Str::is().\n     *\n     * @param string $wildcard\n     * @param string $eventName\n     *\n     * @return bool\n     */\n    protected function wildcardContainsEvent($wildcard, $eventName)\n    {\n        $patterns = Arr::wrap($wildcard);\n\n        if (empty($patterns)) {\n            return false;\n        }\n\n        foreach ($patterns as $pattern) {\n            // If the given event is an exact match we can of course return true right\n            // from the beginning. Otherwise, we will translate asterisks and do an\n            // actual pattern match against the two strings to see if they match.\n            if ($pattern == $eventName) {\n                return true;\n            }\n\n            $pattern = preg_quote($pattern, '#');\n\n            // Asterisks are translated into zero-or-more regular expression wildcards\n            // to make it convenient to check if the strings starts with the given\n            // pattern such as \"library/*\", making any string check convenient.\n            $pattern = str_replace('\\*', '.*', $pattern);\n\n            if (preg_match('#^'.$pattern.'\\z#u', $eventName) === 1) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Add the listeners for the event's interfaces to the given array.\n     *\n     * @param string $eventName\n     * @param array  $listeners\n     *\n     * @return array\n     */\n    protected function addInterfaceListeners($eventName, array $listeners = [])\n    {\n        foreach (class_implements($eventName) as $interface) {\n            if (isset($this->listeners[$interface])) {\n                foreach ($this->listeners[$interface] as $names) {\n                    $listeners = array_merge($listeners, (array) $names);\n                }\n            }\n        }\n\n        return $listeners;\n    }\n\n    /**\n     * Register an event listener with the dispatcher.\n     *\n     * @param \\Closure|string $listener\n     * @param bool            $wildcard\n     *\n     * @return \\Closure\n     */\n    public function makeListener($listener, $wildcard = false)\n    {\n        if (is_string($listener)) {\n            return $this->createClassListener($listener, $wildcard);\n        }\n\n        return function ($event, $payload) use ($listener, $wildcard) {\n            if ($wildcard) {\n                return $listener($event, $payload);\n            }\n\n            return $listener(...array_values($payload));\n        };\n    }\n\n    /**\n     * Create a class based listener.\n     *\n     * @param string $listener\n     * @param bool   $wildcard\n     *\n     * @return \\Closure\n     */\n    protected function createClassListener($listener, $wildcard = false)\n    {\n        return function ($event, $payload) use ($listener, $wildcard) {\n            if ($wildcard) {\n                return call_user_func($this->parseListenerCallback($listener), $event, $payload);\n            }\n\n            return call_user_func_array(\n                $this->parseListenerCallback($listener),\n                $payload\n            );\n        };\n    }\n\n    /**\n     * Parse the class listener into class and method.\n     *\n     * @param string $listener\n     *\n     * @return array\n     */\n    protected function parseListenerCallback($listener)\n    {\n        return strpos($listener, '@') !== false ?\n            explode('@', $listener, 2) :\n            [$listener, 'handle'];\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function forget($event)\n    {\n        if (strpos($event, '*') !== false) {\n            unset($this->wildcards[$event]);\n        } else {\n            unset($this->listeners[$event]);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Events/DispatcherInterface.php",
    "content": "<?php\n\nnamespace Adldap\\Events;\n\ninterface DispatcherInterface\n{\n    /**\n     * Register an event listener with the dispatcher.\n     *\n     * @param string|array $events\n     * @param mixed        $listener\n     *\n     * @return void\n     */\n    public function listen($events, $listener);\n\n    /**\n     * Determine if a given event has listeners.\n     *\n     * @param string $eventName\n     *\n     * @return bool\n     */\n    public function hasListeners($eventName);\n\n    /**\n     * Fire an event until the first non-null response is returned.\n     *\n     * @param string|object $event\n     * @param mixed         $payload\n     *\n     * @return array|null\n     */\n    public function until($event, $payload = []);\n\n    /**\n     * Fire an event and call the listeners.\n     *\n     * @param string|object $event\n     * @param mixed         $payload\n     * @param bool          $halt\n     *\n     * @return mixed\n     */\n    public function fire($event, $payload = [], $halt = false);\n\n    /**\n     * Fire an event and call the listeners.\n     *\n     * @param string|object $event\n     * @param mixed         $payload\n     * @param bool          $halt\n     *\n     * @return array|null\n     */\n    public function dispatch($event, $payload = [], $halt = false);\n\n    /**\n     * Get all of the listeners for a given event name.\n     *\n     * @param string $eventName\n     *\n     * @return array\n     */\n    public function getListeners($eventName);\n\n    /**\n     * Remove a set of listeners from the dispatcher.\n     *\n     * @param string $event\n     *\n     * @return void\n     */\n    public function forget($event);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Events/DispatchesEvents.php",
    "content": "<?php\n\nnamespace Adldap\\Events;\n\ntrait DispatchesEvents\n{\n    /**\n     * The event dispatcher instance.\n     *\n     * @var DispatcherInterface\n     */\n    protected static $dispatcher;\n\n    /**\n     * Get the event dispatcher instance.\n     *\n     * @return DispatcherInterface\n     */\n    public static function getEventDispatcher()\n    {\n        // If no event dispatcher has been set, well instantiate and\n        // set one here. This will be our singleton instance.\n        if (!isset(static::$dispatcher)) {\n            static::setEventDispatcher(new Dispatcher());\n        }\n\n        return static::$dispatcher;\n    }\n\n    /**\n     * Set the event dispatcher instance.\n     *\n     * @param DispatcherInterface $dispatcher\n     *\n     * @return void\n     */\n    public static function setEventDispatcher(DispatcherInterface $dispatcher)\n    {\n        static::$dispatcher = $dispatcher;\n    }\n\n    /**\n     * Unset the event dispatcher instance.\n     *\n     * @return void\n     */\n    public static function unsetEventDispatcher()\n    {\n        static::$dispatcher = null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Log/EventLogger.php",
    "content": "<?php\n\nnamespace Adldap\\Log;\n\nuse ReflectionClass;\nuse Psr\\Log\\LoggerInterface;\nuse Adldap\\Auth\\Events\\Failed;\nuse Adldap\\Auth\\Events\\Event as AuthEvent;\nuse Adldap\\Models\\Events\\Event as ModelEvent;\nuse Adldap\\Query\\Events\\QueryExecuted as QueryEvent;\n\nclass EventLogger\n{\n    /**\n     * The logger instance.\n     *\n     * @var LoggerInterface|null\n     */\n    protected $logger;\n\n    /**\n     * Constructor.\n     *\n     * @param LoggerInterface $logger\n     */\n    public function __construct(LoggerInterface $logger = null)\n    {\n        $this->logger = $logger;\n    }\n\n    /**\n     * Logs the given event.\n     *\n     * @param mixed $event\n     */\n    public function log($event)\n    {\n        if ($event instanceof AuthEvent) {\n            $this->auth($event);\n        } elseif ($event instanceof ModelEvent) {\n            $this->model($event);\n        } elseif ($event instanceof QueryEvent) {\n            $this->query($event);\n        }\n    }\n\n    /**\n     * Logs an authentication event.\n     *\n     * @param AuthEvent $event\n     *\n     * @return void\n     */\n    public function auth(AuthEvent $event)\n    {\n        if (isset($this->logger)) {\n            $connection = $event->getConnection();\n\n            $message = \"LDAP ({$connection->getHost()})\"\n                .\" - Connection: {$connection->getName()}\"\n                .\" - Operation: {$this->getOperationName($event)}\"\n                .\" - Username: {$event->getUsername()}\";\n\n            $result = null;\n            $type = 'info';\n\n            if (is_a($event, Failed::class)) {\n                $type = 'warning';\n                $result = \" - Reason: {$connection->getLastError()}\";\n            }\n\n            $this->logger->$type($message.$result);\n        }\n    }\n\n    /**\n     * Logs a model event.\n     *\n     * @param ModelEvent $event\n     *\n     * @return void\n     */\n    public function model(ModelEvent $event)\n    {\n        if (isset($this->logger)) {\n            $model = $event->getModel();\n\n            $on = get_class($model);\n\n            $connection = $model->getQuery()->getConnection();\n\n            $message = \"LDAP ({$connection->getHost()})\"\n                .\" - Connection: {$connection->getName()}\"\n                .\" - Operation: {$this->getOperationName($event)}\"\n                .\" - On: {$on}\"\n                .\" - Distinguished Name: {$model->getDn()}\";\n\n            $this->logger->info($message);\n        }\n    }\n\n    /**\n     * Logs a query event.\n     *\n     * @param QueryEvent $event\n     *\n     * @return void\n     */\n    public function query(QueryEvent $event)\n    {\n        if (isset($this->logger)) {\n            $query = $event->getQuery();\n\n            $connection = $query->getConnection();\n\n            $selected = implode(',', $query->getSelects());\n\n            $message = \"LDAP ({$connection->getHost()})\"\n                .\" - Connection: {$connection->getName()}\"\n                .\" - Operation: {$this->getOperationName($event)}\"\n                .\" - Base DN: {$query->getDn()}\"\n                .\" - Filter: {$query->getUnescapedQuery()}\"\n                .\" - Selected: ({$selected})\"\n                .\" - Time Elapsed: {$event->getTime()}\";\n\n            $this->logger->info($message);\n        }\n    }\n\n    /**\n     * Returns the operational name of the given event.\n     *\n     * @param mixed $event\n     *\n     * @return string\n     */\n    protected function getOperationName($event)\n    {\n        return (new ReflectionClass($event))->getShortName();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Log/LogsInformation.php",
    "content": "<?php\n\nnamespace Adldap\\Log;\n\nuse Psr\\Log\\LoggerInterface;\n\ntrait LogsInformation\n{\n    /**\n     * The logger instance.\n     *\n     * @var LoggerInterface|null\n     */\n    protected static $logger;\n\n    /**\n     * Get the logger instance.\n     *\n     * @return LoggerInterface|null\n     */\n    public static function getLogger()\n    {\n        return static::$logger;\n    }\n\n    /**\n     * Set the logger instance.\n     *\n     * @param LoggerInterface $logger\n     *\n     * @return void\n     */\n    public static function setLogger(LoggerInterface $logger)\n    {\n        static::$logger = $logger;\n    }\n\n    /**\n     * Unset the logger instance.\n     *\n     * @return void\n     */\n    public static function unsetLogger()\n    {\n        static::$logger = null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/AccountControl.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nuse ReflectionClass;\n\n/**\n * The Account Control class.\n *\n * This class is for easily building a user account control value.\n *\n * @link https://support.microsoft.com/en-us/kb/305144\n */\nclass AccountControl\n{\n    const SCRIPT = 1;\n\n    const ACCOUNTDISABLE = 2;\n\n    const HOMEDIR_REQUIRED = 8;\n\n    const LOCKOUT = 16;\n\n    const PASSWD_NOTREQD = 32;\n\n    const ENCRYPTED_TEXT_PWD_ALLOWED = 128;\n\n    const TEMP_DUPLICATE_ACCOUNT = 256;\n\n    const NORMAL_ACCOUNT = 512;\n\n    const INTERDOMAIN_TRUST_ACCOUNT = 2048;\n\n    const WORKSTATION_TRUST_ACCOUNT = 4096;\n\n    const SERVER_TRUST_ACCOUNT = 8192;\n\n    const DONT_EXPIRE_PASSWORD = 65536;\n\n    const MNS_LOGON_ACCOUNT = 131072;\n\n    const SMARTCARD_REQUIRED = 262144;\n\n    const TRUSTED_FOR_DELEGATION = 524288;\n\n    const NOT_DELEGATED = 1048576;\n\n    const USE_DES_KEY_ONLY = 2097152;\n\n    const DONT_REQ_PREAUTH = 4194304;\n\n    const PASSWORD_EXPIRED = 8388608;\n\n    const TRUSTED_TO_AUTH_FOR_DELEGATION = 16777216;\n\n    const PARTIAL_SECRETS_ACCOUNT = 67108864;\n\n    /**\n     * Stores the values to be added together to\n     * build the user account control integer.\n     *\n     * @var array\n     */\n    protected $values = [];\n\n    /**\n     * Constructor.\n     *\n     * @param int $flag\n     */\n    public function __construct($flag = null)\n    {\n        if (!is_null($flag)) {\n            $this->apply($flag);\n        }\n    }\n\n    /**\n     * Get the value when casted to string.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return (string) $this->getValue();\n    }\n\n    /**\n     * Get the value when casted to int.\n     *\n     * @return int\n     */\n    public function __toInt()\n    {\n        return $this->getValue();\n    }\n\n    /**\n     * Add the value to the account control values.\n     *\n     * @param int $value\n     *\n     * @return AccountControl\n     */\n    public function add($value)\n    {\n        // Use the value as a key so if the same value\n        // is used, it will always be overwritten\n        $this->values[$value] = $value;\n\n        return $this;\n    }\n\n    /**\n     * Remove the value from the account control.\n     *\n     * @param int $value\n     *\n     * @return $this\n     */\n    public function remove($value)\n    {\n        unset($this->values[$value]);\n\n        return $this;\n    }\n\n    /**\n     * Extract and apply the flag.\n     *\n     * @param int $flag\n     */\n    public function apply($flag)\n    {\n        $this->setValues($this->extractFlags($flag));\n    }\n\n    /**\n     * Determine if the current AccountControl object contains the given UAC flag(s).\n     *\n     * @param int $flag\n     *\n     * @return bool\n     */\n    public function has($flag)\n    {\n        // We'll extract the given flag into an array of possible flags, and\n        // see if our AccountControl object contains any of them.\n        $flagsUsed = array_intersect($this->extractFlags($flag), $this->values);\n\n        return in_array($flag, $flagsUsed);\n    }\n\n    /**\n     * The logon script will be run.\n     *\n     * @return AccountControl\n     */\n    public function runLoginScript()\n    {\n        return $this->add(static::SCRIPT);\n    }\n\n    /**\n     * The user account is locked.\n     *\n     * @return AccountControl\n     */\n    public function accountIsLocked()\n    {\n        return $this->add(static::LOCKOUT);\n    }\n\n    /**\n     * The user account is disabled.\n     *\n     * @return AccountControl\n     */\n    public function accountIsDisabled()\n    {\n        return $this->add(static::ACCOUNTDISABLE);\n    }\n\n    /**\n     * This is an account for users whose primary account is in another domain.\n     *\n     * This account provides user access to this domain, but not to any domain that\n     * trusts this domain. This is sometimes referred to as a local user account.\n     *\n     * @return AccountControl\n     */\n    public function accountIsTemporary()\n    {\n        return $this->add(static::TEMP_DUPLICATE_ACCOUNT);\n    }\n\n    /**\n     * This is a default account type that represents a typical user.\n     *\n     * @return AccountControl\n     */\n    public function accountIsNormal()\n    {\n        return $this->add(static::NORMAL_ACCOUNT);\n    }\n\n    /**\n     * This is a permit to trust an account for a system domain that trusts other domains.\n     *\n     * @return AccountControl\n     */\n    public function accountIsForInterdomain()\n    {\n        return $this->add(static::INTERDOMAIN_TRUST_ACCOUNT);\n    }\n\n    /**\n     * This is a computer account for a computer that is running Microsoft\n     * Windows NT 4.0 Workstation, Microsoft Windows NT 4.0 Server, Microsoft\n     * Windows 2000 Professional, or Windows 2000 Server and is a member of this domain.\n     *\n     * @return AccountControl\n     */\n    public function accountIsForWorkstation()\n    {\n        return $this->add(static::WORKSTATION_TRUST_ACCOUNT);\n    }\n\n    /**\n     * This is a computer account for a domain controller that is a member of this domain.\n     *\n     * @return AccountControl\n     */\n    public function accountIsForServer()\n    {\n        return $this->add(static::SERVER_TRUST_ACCOUNT);\n    }\n\n    /**\n     * This is an MNS logon account.\n     *\n     * @return AccountControl\n     */\n    public function accountIsMnsLogon()\n    {\n        return $this->add(static::MNS_LOGON_ACCOUNT);\n    }\n\n    /**\n     * (Windows 2000/Windows Server 2003) This account does\n     * not require Kerberos pre-authentication for logging on.\n     *\n     * @return AccountControl\n     */\n    public function accountDoesNotRequirePreAuth()\n    {\n        return $this->add(static::DONT_REQ_PREAUTH);\n    }\n\n    /**\n     * When this flag is set, it forces the user to log on by using a smart card.\n     *\n     * @return AccountControl\n     */\n    public function accountRequiresSmartCard()\n    {\n        return $this->add(static::SMARTCARD_REQUIRED);\n    }\n\n    /**\n     * (Windows Server 2008/Windows Server 2008 R2) The account is a read-only domain controller (RODC).\n     *\n     * This is a security-sensitive setting. Removing this setting from an RODC compromises security on that server.\n     *\n     * @return AccountControl\n     */\n    public function accountIsReadOnly()\n    {\n        return $this->add(static::PARTIAL_SECRETS_ACCOUNT);\n    }\n\n    /**\n     * The home folder is required.\n     *\n     * @return AccountControl\n     */\n    public function homeFolderIsRequired()\n    {\n        return $this->add(static::HOMEDIR_REQUIRED);\n    }\n\n    /**\n     * No password is required.\n     *\n     * @return AccountControl\n     */\n    public function passwordIsNotRequired()\n    {\n        return $this->add(static::PASSWD_NOTREQD);\n    }\n\n    /**\n     * The user cannot change the password. This is a permission on the user's object.\n     *\n     * For information about how to programmatically set this permission, visit the following link:\n     *\n     * @link http://msdn2.microsoft.com/en-us/library/aa746398.aspx\n     *\n     * @return AccountControl\n     */\n    public function passwordCannotBeChanged()\n    {\n        return $this->add(static::PASSWD_NOTREQD);\n    }\n\n    /**\n     * Represents the password, which should never expire on the account.\n     *\n     * @return AccountControl\n     */\n    public function passwordDoesNotExpire()\n    {\n        return $this->add(static::DONT_EXPIRE_PASSWORD);\n    }\n\n    /**\n     * (Windows 2000/Windows Server 2003) The user's password has expired.\n     *\n     * @return AccountControl\n     */\n    public function passwordIsExpired()\n    {\n        return $this->add(static::PASSWORD_EXPIRED);\n    }\n\n    /**\n     * The user can send an encrypted password.\n     *\n     * @return AccountControl\n     */\n    public function allowEncryptedTextPassword()\n    {\n        return $this->add(static::ENCRYPTED_TEXT_PWD_ALLOWED);\n    }\n\n    /**\n     * When this flag is set, the service account (the user or computer account)\n     * under which a service runs is trusted for Kerberos delegation.\n     *\n     * Any such service can impersonate a client requesting the service.\n     *\n     * To enable a service for Kerberos delegation, you must set this\n     * flag on the userAccountControl property of the service account.\n     *\n     * @return AccountControl\n     */\n    public function trustForDelegation()\n    {\n        return $this->add(static::TRUSTED_FOR_DELEGATION);\n    }\n\n    /**\n     * (Windows 2000/Windows Server 2003) The account is enabled for delegation.\n     *\n     * This is a security-sensitive setting. Accounts that have this option enabled\n     * should be tightly controlled. This setting lets a service that runs under the\n     * account assume a client's identity and authenticate as that user to other remote\n     * servers on the network.\n     *\n     * @return AccountControl\n     */\n    public function trustToAuthForDelegation()\n    {\n        return $this->add(static::TRUSTED_TO_AUTH_FOR_DELEGATION);\n    }\n\n    /**\n     * When this flag is set, the security context of the user is not delegated to a\n     * service even if the service account is set as trusted for Kerberos delegation.\n     *\n     * @return AccountControl\n     */\n    public function doNotTrustForDelegation()\n    {\n        return $this->add(static::NOT_DELEGATED);\n    }\n\n    /**\n     * (Windows 2000/Windows Server 2003) Restrict this principal to\n     * use only Data Encryption Standard (DES) encryption types for keys.\n     *\n     * @return AccountControl\n     */\n    public function useDesKeyOnly()\n    {\n        return $this->add(static::USE_DES_KEY_ONLY);\n    }\n\n    /**\n     * Get the account control value.\n     *\n     * @return int\n     */\n    public function getValue()\n    {\n        return array_sum($this->values);\n    }\n\n    /**\n     * Get the account control flag values.\n     *\n     * @return array\n     */\n    public function getValues()\n    {\n        return $this->values;\n    }\n\n    /**\n     * Set the account control values.\n     *\n     * @param array $flags\n     */\n    public function setValues(array $flags)\n    {\n        $this->values = $flags;\n    }\n\n    /**\n     * Get all possible account control flags.\n     *\n     * @return array\n     */\n    public function getAllFlags()\n    {\n        return (new ReflectionClass(__CLASS__))->getConstants();\n    }\n\n    /**\n     * Extracts the given flag into an array of flags used.\n     *\n     * @param int $flag\n     *\n     * @return array\n     */\n    public function extractFlags($flag)\n    {\n        $flags = [];\n\n        for ($i = 0; $i <= 26; $i++) {\n            if ((int) $flag & (1 << $i)) {\n                $flags[1 << $i] = 1 << $i;\n            }\n        }\n\n        return $flags;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/DistinguishedName.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nuse Adldap\\Utilities;\n\nclass DistinguishedName\n{\n    /**\n     * The distinguished name components (in order of assembly).\n     *\n     * @var array\n     */\n    protected $components = [\n        'cn'  => [],\n        'uid' => [],\n        'ou'  => [],\n        'dc'  => [],\n        'o'   => [],\n    ];\n\n    /**\n     * Constructor.\n     *\n     * @param mixed $baseDn\n     */\n    public function __construct($baseDn = null)\n    {\n        $this->setBase($baseDn);\n    }\n\n    /**\n     * Returns the complete distinguished name.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->get();\n    }\n\n    /**\n     * Returns the complete distinguished name by assembling the RDN components.\n     *\n     * @return string\n     */\n    public function get()\n    {\n        $components = [];\n\n        // We'll go through each component type and assemble its RDN.\n        foreach ($this->components as $component => $values) {\n            array_map(function ($value) use ($component, &$components) {\n                // Assemble the component and escape the value.\n                $components[] = sprintf('%s=%s', $component, ldap_escape($value, '', 2));\n            }, $values);\n        }\n\n        return implode(',', $components);\n    }\n\n    /**\n     * Adds a domain component.\n     *\n     * @param string $dc\n     *\n     * @return DistinguishedName\n     */\n    public function addDc($dc)\n    {\n        $this->addComponent('dc', $dc);\n\n        return $this;\n    }\n\n    /**\n     * Removes a domain component.\n     *\n     * @param string $dc\n     *\n     * @return DistinguishedName\n     */\n    public function removeDc($dc)\n    {\n        $this->removeComponent('dc', $dc);\n\n        return $this;\n    }\n\n    /**\n     * Adds an organization name.\n     *\n     * @param string $o\n     *\n     * @return $this\n     */\n    public function addO($o)\n    {\n        $this->addComponent('o', $o);\n\n        return $this;\n    }\n\n    /**\n     * Removes an organization name.\n     *\n     * @param string $o\n     *\n     * @return DistinguishedName\n     */\n    public function removeO($o)\n    {\n        $this->removeComponent('o', $o);\n\n        return $this;\n    }\n\n    /**\n     * Add a user identifier.\n     *\n     * @param string $uid\n     *\n     * @return DistinguishedName\n     */\n    public function addUid($uid)\n    {\n        $this->addComponent('uid', $uid);\n\n        return $this;\n    }\n\n    /**\n     * Removes a user identifier.\n     *\n     * @param string $uid\n     *\n     * @return DistinguishedName\n     */\n    public function removeUid($uid)\n    {\n        $this->removeComponent('uid', $uid);\n\n        return $this;\n    }\n\n    /**\n     * Adds a common name.\n     *\n     * @param string $cn\n     *\n     * @return DistinguishedName\n     */\n    public function addCn($cn)\n    {\n        $this->addComponent('cn', $cn);\n\n        return $this;\n    }\n\n    /**\n     * Removes a common name.\n     *\n     * @param string $cn\n     *\n     * @return DistinguishedName\n     */\n    public function removeCn($cn)\n    {\n        $this->removeComponent('cn', $cn);\n\n        return $this;\n    }\n\n    /**\n     * Adds an organizational unit.\n     *\n     * @param string $ou\n     *\n     * @return DistinguishedName\n     */\n    public function addOu($ou)\n    {\n        $this->addComponent('ou', $ou);\n\n        return $this;\n    }\n\n    /**\n     * Removes an organizational unit.\n     *\n     * @param string $ou\n     *\n     * @return DistinguishedName\n     */\n    public function removeOu($ou)\n    {\n        $this->removeComponent('ou', $ou);\n\n        return $this;\n    }\n\n    /**\n     * Sets the base RDN of the distinguished name.\n     *\n     * @param string|DistinguishedName $base\n     *\n     * @return DistinguishedName\n     */\n    public function setBase($base)\n    {\n        // Typecast base to string in case we've been given\n        // an instance of the distinguished name object.\n        $base = (string) $base;\n\n        // If the base DN isn't null we'll try to explode it.\n        $base = Utilities::explodeDn($base, false) ?: [];\n\n        // Remove the count key from the exploded distinguished name.\n        unset($base['count']);\n\n        foreach ($base as $key => $rdn) {\n            // We'll break the RDN into pieces\n            $pieces = explode('=', $rdn) ?: [];\n\n            // If there's exactly 2 pieces, then we can work with it.\n            if (count($pieces) === 2) {\n                $attribute = ucfirst(strtolower($pieces[0]));\n\n                $method = 'add'.$attribute;\n\n                if (method_exists($this, $method)) {\n                    // We see what type of RDN it is and add each accordingly.\n                    call_user_func_array([$this, $method], [$pieces[1]]);\n                }\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns an array of all components in the distinguished name.\n     *\n     * If a component name is given ('cn', 'dc' for example) then\n     * the values of that component will be returned.\n     *\n     * @param string|null $component The component to retrieve values of\n     *\n     * @return array\n     */\n    public function getComponents($component = null)\n    {\n        if (is_null($component)) {\n            return $this->components;\n        }\n\n        $this->validateComponentExists($component);\n\n        return $this->components[$component];\n    }\n\n    /**\n     * Adds a component to the distinguished name.\n     *\n     * @param string $component\n     * @param string $value\n     *\n     * @throws \\UnexpectedValueException When the given name does not exist.\n     */\n    protected function addComponent($component, $value)\n    {\n        $this->validateComponentExists($component);\n\n        // We need to make sure the value we're given isn't empty before adding it into our components.\n        if (!empty($value)) {\n            $this->components[$component][] = $value;\n        }\n    }\n\n    /**\n     * Removes the given value from the given component.\n     *\n     * @param string $component\n     * @param string $value\n     *\n     * @throws \\UnexpectedValueException When the given component does not exist.\n     *\n     * @return void\n     */\n    protected function removeComponent($component, $value)\n    {\n        $this->validateComponentExists($component);\n\n        $this->components[$component] = array_diff($this->components[$component], [$value]);\n    }\n\n    /**\n     * Validates that the given component exists in the available components.\n     *\n     * @param string $component The name of the component to validate.\n     *\n     * @throws \\UnexpectedValueException When the given component does not exist.\n     *\n     * @return void\n     */\n    protected function validateComponentExists($component)\n    {\n        if (!array_key_exists($component, $this->components)) {\n            throw new \\UnexpectedValueException(\"The RDN component '$component' does not exist.\");\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/Guid.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nuse Adldap\\Utilities;\nuse InvalidArgumentException;\n\nclass Guid\n{\n    /**\n     * The string GUID value.\n     *\n     * @var string\n     */\n    protected $value;\n\n    /**\n     * The guid structure in order by section to parse using substr().\n     *\n     * @author Chad Sikorra <Chad.Sikorra@gmail.com>\n     *\n     * @link https://github.com/ldaptools/ldaptools\n     *\n     * @var array\n     */\n    protected $guidSections = [\n        [[-26, 2], [-28, 2], [-30, 2], [-32, 2]],\n        [[-22, 2], [-24, 2]],\n        [[-18, 2], [-20, 2]],\n        [[-16, 4]],\n        [[-12, 12]],\n    ];\n\n    /**\n     * The hexadecimal octet order based on string position.\n     *\n     * @author Chad Sikorra <Chad.Sikorra@gmail.com>\n     *\n     * @link https://github.com/ldaptools/ldaptools\n     *\n     * @var array\n     */\n    protected $octetSections = [\n        [6, 4, 2, 0],\n        [10, 8],\n        [14, 12],\n        [16, 18, 20, 22, 24, 26, 28, 30],\n    ];\n\n    /**\n     * Determines if the specified GUID is valid.\n     *\n     * @param string $guid\n     *\n     * @return bool\n     */\n    public static function isValid($guid)\n    {\n        return Utilities::isValidGuid($guid);\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param mixed $value\n     *\n     * @throws InvalidArgumentException\n     */\n    public function __construct($value)\n    {\n        if (static::isValid($value)) {\n            $this->value = $value;\n        } elseif ($value = $this->binaryGuidToString($value)) {\n            $this->value = $value;\n        } else {\n            throw new InvalidArgumentException('Invalid Binary / String GUID.');\n        }\n    }\n\n    /**\n     * Returns the string value of the GUID.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->getValue();\n    }\n\n    /**\n     * Returns the string value of the SID.\n     *\n     * @return string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Get the binary representation of the GUID string.\n     *\n     * @return string\n     */\n    public function getBinary()\n    {\n        $data = '';\n\n        $guid = str_replace('-', '', $this->value);\n\n        foreach ($this->octetSections as $section) {\n            $data .= $this->parseSection($guid, $section, true);\n        }\n\n        return hex2bin($data);\n    }\n\n    /**\n     * Returns the string variant of a binary GUID.\n     *\n     * @param string $binary\n     *\n     * @return string|null\n     */\n    protected function binaryGuidToString($binary)\n    {\n        return Utilities::binaryGuidToString($binary);\n    }\n\n    /**\n     * Return the specified section of the hexadecimal string.\n     *\n     * @author Chad Sikorra <Chad.Sikorra@gmail.com>\n     *\n     * @link https://github.com/ldaptools/ldaptools\n     *\n     * @param string $hex      The full hex string.\n     * @param array  $sections An array of start and length (unless octet is true, then length is always 2).\n     * @param bool   $octet    Whether this is for octet string form.\n     *\n     * @return string The concatenated sections in upper-case.\n     */\n    protected function parseSection($hex, array $sections, $octet = false)\n    {\n        $parsedString = '';\n\n        foreach ($sections as $section) {\n            $start = $octet ? $section : $section[0];\n\n            $length = $octet ? 2 : $section[1];\n\n            $parsedString .= substr($hex, $start, $length);\n        }\n\n        return $parsedString;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/MbString.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nclass MbString\n{\n    /**\n     * Get the integer value of a specific character.\n     *\n     * @param $string\n     *\n     * @return int\n     */\n    public static function ord($string)\n    {\n        if (self::isLoaded()) {\n            $result = unpack('N', mb_convert_encoding($string, 'UCS-4BE', 'UTF-8'));\n\n            if (is_array($result) === true) {\n                return $result[1];\n            }\n        }\n\n        return ord($string);\n    }\n\n    /**\n     * Get the character for a specific integer value.\n     *\n     * @param $int\n     *\n     * @return string\n     */\n    public static function chr($int)\n    {\n        if (self::isLoaded()) {\n            return mb_convert_encoding(pack('n', $int), 'UTF-8', 'UTF-16BE');\n        }\n\n        return chr($int);\n    }\n\n    /**\n     * Split a string into its individual characters and return it as an array.\n     *\n     * @param string $value\n     *\n     * @return string[]\n     */\n    public static function split($value)\n    {\n        return preg_split('/(?<!^)(?!$)/u', $value);\n    }\n\n    /**\n     * Detects if the given string is UTF 8.\n     *\n     * @param $string\n     *\n     * @return string|false\n     */\n    public static function isUtf8($string)\n    {\n        if (self::isLoaded()) {\n            return mb_detect_encoding($string, 'UTF-8', $strict = true);\n        }\n\n        return $string;\n    }\n\n    /**\n     * Checks if the mbstring extension is enabled in PHP.\n     *\n     * @return bool\n     */\n    public static function isLoaded()\n    {\n        return extension_loaded('mbstring');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/Sid.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nuse Adldap\\Utilities;\nuse InvalidArgumentException;\n\nclass Sid\n{\n    /**\n     * The string SID value.\n     *\n     * @var string\n     */\n    protected $value;\n\n    /**\n     * Determines if the specified SID is valid.\n     *\n     * @param string $sid\n     *\n     * @return bool\n     */\n    public static function isValid($sid)\n    {\n        return Utilities::isValidSid($sid);\n    }\n\n    /**\n     * Constructor.\n     *\n     * @param mixed $value\n     *\n     * @throws InvalidArgumentException\n     */\n    public function __construct($value)\n    {\n        if (static::isValid($value)) {\n            $this->value = $value;\n        } elseif ($value = $this->binarySidToString($value)) {\n            $this->value = $value;\n        } else {\n            throw new InvalidArgumentException('Invalid Binary / String SID.');\n        }\n    }\n\n    /**\n     * Returns the string value of the SID.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->getValue();\n    }\n\n    /**\n     * Returns the string value of the SID.\n     *\n     * @return string\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Returns the binary variant of the SID.\n     *\n     * @return string\n     */\n    public function getBinary()\n    {\n        $sid = explode('-', ltrim($this->value, 'S-'));\n\n        $level = (int) array_shift($sid);\n\n        $authority = (int) array_shift($sid);\n\n        $subAuthorities = array_map('intval', $sid);\n\n        $params = array_merge(\n            ['C2xxNV*', $level, count($subAuthorities), $authority],\n            $subAuthorities\n        );\n\n        return call_user_func_array('pack', $params);\n    }\n\n    /**\n     * Returns the string variant of a binary SID.\n     *\n     * @param string $binary\n     *\n     * @return string|null\n     */\n    protected function binarySidToString($binary)\n    {\n        return Utilities::binarySidToString($binary);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/TSProperty.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nclass TSProperty\n{\n    /**\n     * Nibble control values. The first value for each is if the nibble is <= 9, otherwise the second value is used.\n     */\n    const NIBBLE_CONTROL = [\n        'X' => ['001011', '011010'],\n        'Y' => ['001110', '011010'],\n    ];\n\n    /**\n     * The nibble header.\n     */\n    const NIBBLE_HEADER = '1110';\n\n    /**\n     * Conversion factor needed for time values in the TSPropertyArray (stored in microseconds).\n     */\n    const TIME_CONVERSION = 60 * 1000;\n\n    /**\n     * A simple map to help determine how the property needs to be decoded/encoded from/to its binary value.\n     *\n     * There are some names that are simple repeats but have 'W' at the end. Not sure as to what that signifies. I\n     * cannot find any information on them in Microsoft documentation. However, their values appear to stay in sync with\n     * their non 'W' counterparts. But not doing so when manipulating the data manually does not seem to affect anything.\n     * This probably needs more investigation.\n     *\n     * @var array\n     */\n    protected $propTypes = [\n        'string' => [\n            'CtxWFHomeDir',\n            'CtxWFHomeDirW',\n            'CtxWFHomeDirDrive',\n            'CtxWFHomeDirDriveW',\n            'CtxInitialProgram',\n            'CtxInitialProgramW',\n            'CtxWFProfilePath',\n            'CtxWFProfilePathW',\n            'CtxWorkDirectory',\n            'CtxWorkDirectoryW',\n            'CtxCallbackNumber',\n        ],\n        'time' => [\n            'CtxMaxDisconnectionTime',\n            'CtxMaxConnectionTime',\n            'CtxMaxIdleTime',\n        ],\n        'int' => [\n            'CtxCfgFlags1',\n            'CtxCfgPresent',\n            'CtxKeyboardLayout',\n            'CtxMinEncryptionLevel',\n            'CtxNWLogonServer',\n            'CtxShadow',\n        ],\n    ];\n\n    /**\n     * The property name.\n     *\n     * @var string\n     */\n    protected $name;\n\n    /**\n     * The property value.\n     *\n     * @var string|int\n     */\n    protected $value;\n\n    /**\n     * The property value type.\n     *\n     * @var int\n     */\n    protected $valueType = 1;\n\n    /**\n     * Pass binary TSProperty data to construct its object representation.\n     *\n     * @param string|null $value\n     */\n    public function __construct($value = null)\n    {\n        if ($value) {\n            $this->decode(bin2hex($value));\n        }\n    }\n\n    /**\n     * Set the name for the TSProperty.\n     *\n     * @param string $name\n     *\n     * @return TSProperty\n     */\n    public function setName($name)\n    {\n        $this->name = $name;\n\n        return $this;\n    }\n\n    /**\n     * Get the name for the TSProperty.\n     *\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n\n    /**\n     * Set the value for the TSProperty.\n     *\n     * @param string|int $value\n     *\n     * @return TSProperty\n     */\n    public function setValue($value)\n    {\n        $this->value = $value;\n\n        return $this;\n    }\n\n    /**\n     * Get the value for the TSProperty.\n     *\n     * @return string|int\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n\n    /**\n     * Convert the TSProperty name/value back to its binary\n     * representation for the userParameters blob.\n     *\n     * @return string\n     */\n    public function toBinary()\n    {\n        $name = bin2hex($this->name);\n\n        $binValue = $this->getEncodedValueForProp($this->name, $this->value);\n\n        $valueLen = strlen(bin2hex($binValue)) / 3;\n\n        $binary = hex2bin(\n            $this->dec2hex(strlen($name))\n            .$this->dec2hex($valueLen)\n            .$this->dec2hex($this->valueType)\n            .$name\n        );\n\n        return $binary.$binValue;\n    }\n\n    /**\n     * Given a TSProperty blob, decode the name/value/type/etc.\n     *\n     * @param string $tsProperty\n     */\n    protected function decode($tsProperty)\n    {\n        $nameLength = hexdec(substr($tsProperty, 0, 2));\n\n        // 1 data byte is 3 encoded bytes\n        $valueLength = hexdec(substr($tsProperty, 2, 2)) * 3;\n\n        $this->valueType = hexdec(substr($tsProperty, 4, 2));\n        $this->name = pack('H*', substr($tsProperty, 6, $nameLength));\n        $this->value = $this->getDecodedValueForProp($this->name, substr($tsProperty, 6 + $nameLength, $valueLength));\n    }\n\n    /**\n     * Based on the property name/value in question, get its encoded form.\n     *\n     * @param string     $propName\n     * @param string|int $propValue\n     *\n     * @return string\n     */\n    protected function getEncodedValueForProp($propName, $propValue)\n    {\n        if (in_array($propName, $this->propTypes['string'])) {\n            // Simple strings are null terminated. Unsure if this is\n            // needed or simply a product of how ADUC does stuff?\n            $value = $this->encodePropValue($propValue.\"\\0\", true);\n        } elseif (in_array($propName, $this->propTypes['time'])) {\n            // Needs to be in microseconds (assuming it is in minute format)...\n            $value = $this->encodePropValue($propValue * self::TIME_CONVERSION);\n        } else {\n            $value = $this->encodePropValue($propValue);\n        }\n\n        return $value;\n    }\n\n    /**\n     * Based on the property name in question, get its actual value from the binary blob value.\n     *\n     * @param string $propName\n     * @param string $propValue\n     *\n     * @return string|int\n     */\n    protected function getDecodedValueForProp($propName, $propValue)\n    {\n        if (in_array($propName, $this->propTypes['string'])) {\n            // Strip away null terminators. I think this should\n            // be desired, otherwise it just ends in confusion.\n            $value = str_replace(\"\\0\", '', $this->decodePropValue($propValue, true));\n        } elseif (in_array($propName, $this->propTypes['time'])) {\n            // Convert from microseconds to minutes (how ADUC displays\n            // it anyway, and seems the most practical).\n            $value = hexdec($this->decodePropValue($propValue)) / self::TIME_CONVERSION;\n        } elseif (in_array($propName, $this->propTypes['int'])) {\n            $value = hexdec($this->decodePropValue($propValue));\n        } else {\n            $value = $this->decodePropValue($propValue);\n        }\n\n        return $value;\n    }\n\n    /**\n     * Decode the property by inspecting the nibbles of each blob, checking\n     * the control, and adding up the results into a final value.\n     *\n     * @param string $hex\n     * @param bool   $string Whether or not this is simple string data.\n     *\n     * @return string\n     */\n    protected function decodePropValue($hex, $string = false)\n    {\n        $decodePropValue = '';\n\n        $blobs = str_split($hex, 6);\n\n        foreach ($blobs as $blob) {\n            $bin = decbin(hexdec($blob));\n\n            $controlY = substr($bin, 4, 6);\n            $nibbleY = substr($bin, 10, 4);\n            $controlX = substr($bin, 14, 6);\n            $nibbleX = substr($bin, 20, 4);\n\n            $byte = $this->nibbleControl($nibbleX, $controlX).$this->nibbleControl($nibbleY, $controlY);\n\n            if ($string) {\n                $decodePropValue .= MbString::chr(bindec($byte));\n            } else {\n                $decodePropValue = $this->dec2hex(bindec($byte)).$decodePropValue;\n            }\n        }\n\n        return $decodePropValue;\n    }\n\n    /**\n     * Get the encoded property value as a binary blob.\n     *\n     * @param string $value\n     * @param bool   $string\n     *\n     * @return string\n     */\n    protected function encodePropValue($value, $string = false)\n    {\n        // An int must be properly padded. (then split and reversed).\n        // For a string, we just split the chars. This seems\n        // to be the easiest way to handle UTF-8 characters\n        // instead of trying to work with their hex values.\n        $chars = $string ? MbString::split($value) : array_reverse(str_split($this->dec2hex($value, 8), 2));\n\n        $encoded = '';\n\n        foreach ($chars as $char) {\n            // Get the bits for the char. Using this method to ensure it is fully padded.\n            $bits = sprintf('%08b', $string ? MbString::ord($char) : hexdec($char));\n            $nibbleX = substr($bits, 0, 4);\n            $nibbleY = substr($bits, 4, 4);\n\n            // Construct the value with the header, high nibble, then low nibble.\n            $value = self::NIBBLE_HEADER;\n\n            foreach (['Y' => $nibbleY, 'X' => $nibbleX] as $nibbleType => $nibble) {\n                $value .= $this->getNibbleWithControl($nibbleType, $nibble);\n            }\n\n            // Convert it back to a binary bit stream\n            foreach ([0, 8, 16] as $start) {\n                $encoded .= $this->packBitString(substr($value, $start, 8), 8);\n            }\n        }\n\n        return $encoded;\n    }\n\n    /**\n     * PHP's pack() function has no 'b' or 'B' template. This is\n     * a workaround that turns a literal bit-string into a\n     * packed byte-string with 8 bits per byte.\n     *\n     * @param string $bits\n     * @param bool   $len\n     *\n     * @return string\n     */\n    protected function packBitString($bits, $len)\n    {\n        $bits = substr($bits, 0, $len);\n        // Pad input with zeros to next multiple of 4 above $len\n        $bits = str_pad($bits, 4 * (int) (($len + 3) / 4), '0');\n\n        // Split input into chunks of 4 bits, convert each to hex and pack them\n        $nibbles = str_split($bits, 4);\n        foreach ($nibbles as $i => $nibble) {\n            $nibbles[$i] = base_convert($nibble, 2, 16);\n        }\n\n        return pack('H*', implode('', $nibbles));\n    }\n\n    /**\n     * Based on the control, adjust the nibble accordingly.\n     *\n     * @param string $nibble\n     * @param string $control\n     *\n     * @return string\n     */\n    protected function nibbleControl($nibble, $control)\n    {\n        // This control stays constant for the low/high nibbles,\n        // so it doesn't matter which we compare to\n        if ($control == self::NIBBLE_CONTROL['X'][1]) {\n            $dec = bindec($nibble);\n            $dec += 9;\n            $nibble = str_pad(decbin($dec), 4, '0', STR_PAD_LEFT);\n        }\n\n        return $nibble;\n    }\n\n    /**\n     * Get the nibble value with the control prefixed.\n     *\n     * If the nibble dec is <= 9, the control X equals 001011 and Y equals 001110, otherwise if the nibble dec is > 9\n     * the control for X or Y equals 011010. Additionally, if the dec value of the nibble is > 9, then the nibble value\n     * must be subtracted by 9 before the final value is constructed.\n     *\n     * @param string $nibbleType Either X or Y\n     * @param string $nibble\n     *\n     * @return string\n     */\n    protected function getNibbleWithControl($nibbleType, $nibble)\n    {\n        $dec = bindec($nibble);\n\n        if ($dec > 9) {\n            $dec -= 9;\n            $control = self::NIBBLE_CONTROL[$nibbleType][1];\n        } else {\n            $control = self::NIBBLE_CONTROL[$nibbleType][0];\n        }\n\n        return $control.sprintf('%04d', decbin($dec));\n    }\n\n    /**\n     * Need to make sure hex values are always an even length, so pad as needed.\n     *\n     * @param int $int\n     * @param int $padLength The hex string must be padded to this length (with zeros).\n     *\n     * @return string\n     */\n    protected function dec2hex($int, $padLength = 2)\n    {\n        return str_pad(dechex($int), $padLength, 0, STR_PAD_LEFT);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Attributes/TSPropertyArray.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Attributes;\n\nuse InvalidArgumentException;\n\nclass TSPropertyArray\n{\n    /**\n     * Represents that the TSPropertyArray data is valid.\n     */\n    const VALID_SIGNATURE = 'P';\n\n    /**\n     * The default values for the TSPropertyArray structure.\n     *\n     * @var array\n     */\n    const DEFAULTS = [\n        'CtxCfgPresent'           => 2953518677,\n        'CtxWFProfilePath'        => '',\n        'CtxWFProfilePathW'       => '',\n        'CtxWFHomeDir'            => '',\n        'CtxWFHomeDirW'           => '',\n        'CtxWFHomeDirDrive'       => '',\n        'CtxWFHomeDirDriveW'      => '',\n        'CtxShadow'               => 1,\n        'CtxMaxDisconnectionTime' => 0,\n        'CtxMaxConnectionTime'    => 0,\n        'CtxMaxIdleTime'          => 0,\n        'CtxWorkDirectory'        => '',\n        'CtxWorkDirectoryW'       => '',\n        'CtxCfgFlags1'            => 2418077696,\n        'CtxInitialProgram'       => '',\n        'CtxInitialProgramW'      => '',\n    ];\n\n    /**\n     * @var string The default data that occurs before the TSPropertyArray (CtxCfgPresent with a bunch of spaces...?)\n     */\n    protected $defaultPreBinary = '43747843666750726573656e742020202020202020202020202020202020202020202020202020202020202020202020';\n\n    /**\n     * @var TSProperty[]\n     */\n    protected $tsProperty = [];\n\n    /**\n     * @var string\n     */\n    protected $signature = self::VALID_SIGNATURE;\n\n    /**\n     * Binary data that occurs before the TSPropertyArray data in userParameters.\n     *\n     * @var string\n     */\n    protected $preBinary = '';\n\n    /**\n     * Binary data that occurs after the TSPropertyArray data in userParameters.\n     *\n     * @var string\n     */\n    protected $postBinary = '';\n\n    /**\n     * Construct in one of the following ways:.\n     *\n     *   - Pass an array of TSProperty key => value pairs (See DEFAULTS constant).\n     *   - Pass the userParameters binary value. The object representation of that will be decoded and constructed.\n     *   - Pass nothing and a default set of TSProperty key => value pairs will be used (See DEFAULTS constant).\n     *\n     * @param mixed $tsPropertyArray\n     */\n    public function __construct($tsPropertyArray = null)\n    {\n        $this->preBinary = hex2bin($this->defaultPreBinary);\n\n        if (is_null($tsPropertyArray) || is_array($tsPropertyArray)) {\n            $tsPropertyArray = $tsPropertyArray ?: self::DEFAULTS;\n\n            foreach ($tsPropertyArray as $key => $value) {\n                $tsProperty = new TSProperty();\n\n                $this->tsProperty[$key] = $tsProperty->setName($key)->setValue($value);\n            }\n        } else {\n            $this->decodeUserParameters($tsPropertyArray);\n        }\n    }\n\n    /**\n     * Check if a specific TSProperty exists by its property name.\n     *\n     * @param string $propName\n     *\n     * @return bool\n     */\n    public function has($propName)\n    {\n        return array_key_exists(strtolower($propName), array_change_key_case($this->tsProperty));\n    }\n\n    /**\n     * Get a TSProperty object by its property name (ie. CtxWFProfilePath).\n     *\n     * @param string $propName\n     *\n     * @return TSProperty\n     */\n    public function get($propName)\n    {\n        $this->validateProp($propName);\n\n        return $this->getTsPropObj($propName);\n    }\n\n    /**\n     * Add a TSProperty object. If it already exists, it will be overwritten.\n     *\n     * @param TSProperty $tsProperty\n     *\n     * @return $this\n     */\n    public function add(TSProperty $tsProperty)\n    {\n        $this->tsProperty[$tsProperty->getName()] = $tsProperty;\n\n        return $this;\n    }\n\n    /**\n     * Remove a TSProperty by its property name (ie. CtxMinEncryptionLevel).\n     *\n     * @param string $propName\n     *\n     * @return $this\n     */\n    public function remove($propName)\n    {\n        foreach (array_keys($this->tsProperty) as $property) {\n            if (strtolower($propName) == strtolower($property)) {\n                unset($this->tsProperty[$property]);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Set the value for a specific TSProperty by its name.\n     *\n     * @param string $propName\n     * @param mixed  $propValue\n     *\n     * @return $this\n     */\n    public function set($propName, $propValue)\n    {\n        $this->validateProp($propName);\n\n        $this->getTsPropObj($propName)->setValue($propValue);\n\n        return $this;\n    }\n\n    /**\n     * Get the full binary representation of the userParameters containing the TSPropertyArray data.\n     *\n     * @return string\n     */\n    public function toBinary()\n    {\n        $binary = $this->preBinary;\n\n        $binary .= hex2bin(str_pad(dechex(MbString::ord($this->signature)), 2, 0, STR_PAD_LEFT));\n\n        $binary .= hex2bin(str_pad(dechex(count($this->tsProperty)), 2, 0, STR_PAD_LEFT));\n\n        foreach ($this->tsProperty as $tsProperty) {\n            $binary .= $tsProperty->toBinary();\n        }\n\n        return $binary.$this->postBinary;\n    }\n\n    /**\n     * Get a simple associative array containing of all TSProperty names and values.\n     *\n     * @return array\n     */\n    public function toArray()\n    {\n        $userParameters = [];\n\n        foreach ($this->tsProperty as $property => $tsPropObj) {\n            $userParameters[$property] = $tsPropObj->getValue();\n        }\n\n        return $userParameters;\n    }\n\n    /**\n     * Get all TSProperty objects.\n     *\n     * @return TSProperty[]\n     */\n    public function getTSProperties()\n    {\n        return $this->tsProperty;\n    }\n\n    /**\n     * Validates that the given property name exists.\n     *\n     * @param string $propName\n     */\n    protected function validateProp($propName)\n    {\n        if (!$this->has($propName)) {\n            throw new InvalidArgumentException(sprintf('TSProperty for \"%s\" does not exist.', $propName));\n        }\n    }\n\n    /**\n     * @param string $propName\n     *\n     * @return TSProperty\n     */\n    protected function getTsPropObj($propName)\n    {\n        return array_change_key_case($this->tsProperty)[strtolower($propName)];\n    }\n\n    /**\n     * Get an associative array with all of the userParameters property names and values.\n     *\n     * @param string $userParameters\n     *\n     * @return void\n     */\n    protected function decodeUserParameters($userParameters)\n    {\n        $userParameters = bin2hex($userParameters);\n\n        // Save the 96-byte array of reserved data, so as to not ruin anything that may be stored there.\n        $this->preBinary = hex2bin(substr($userParameters, 0, 96));\n        // The signature is a 2-byte unicode character at the front\n        $this->signature = MbString::chr(hexdec(substr($userParameters, 96, 2)));\n        // This asserts the validity of the tsPropertyArray data. For some reason 'P' means valid...\n        if ($this->signature != self::VALID_SIGNATURE) {\n            throw new InvalidArgumentException('Invalid TSPropertyArray data');\n        }\n\n        // The property count is a 2-byte unsigned integer indicating the number of elements for the tsPropertyArray\n        // It starts at position 98. The actual variable data begins at position 100.\n        $length = $this->addTSPropData(substr($userParameters, 100), hexdec(substr($userParameters, 98, 2)));\n\n        // Reserved data length + (count and sig length == 4) + the added lengths of the TSPropertyArray\n        // This saves anything after that variable TSPropertyArray data, so as to not squash anything stored there\n        if (strlen($userParameters) > (96 + 4 + $length)) {\n            $this->postBinary = hex2bin(substr($userParameters, (96 + 4 + $length)));\n        }\n    }\n\n    /**\n     * Given the start of TSPropertyArray hex data, and the count for the number\n     * of TSProperty structures in contains, parse and split out the\n     * individual TSProperty structures. Return the full length\n     * of the TSPropertyArray data.\n     *\n     * @param string $tsPropertyArray\n     * @param int    $tsPropCount\n     *\n     * @return int The length of the data in the TSPropertyArray\n     */\n    protected function addTSPropData($tsPropertyArray, $tsPropCount)\n    {\n        $length = 0;\n\n        for ($i = 0; $i < $tsPropCount; $i++) {\n            // Prop length = name length + value length + type length + the space for the length data.\n            $propLength = hexdec(substr($tsPropertyArray, $length, 2)) + (hexdec(substr($tsPropertyArray, $length + 2, 2)) * 3) + 6;\n\n            $tsProperty = new TSProperty(hex2bin(substr($tsPropertyArray, $length, $propLength)));\n\n            $this->tsProperty[$tsProperty->getName()] = $tsProperty;\n\n            $length += $propLength;\n        }\n\n        return $length;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/BatchModification.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse InvalidArgumentException;\n\n/**\n * Class BatchModification.\n *\n * A utility class to assist in the creation of LDAP\n * batch modifications and ensure their validity.\n */\nclass BatchModification\n{\n    /**\n     * The array keys to be used in batch modifications.\n     */\n    const KEY_ATTRIB = 'attrib';\n    const KEY_MODTYPE = 'modtype';\n    const KEY_VALUES = 'values';\n\n    /**\n     * The original value of the attribute before modification.\n     *\n     * @var null\n     */\n    protected $original = null;\n\n    /**\n     * The attribute of the modification.\n     *\n     * @var int|string\n     */\n    protected $attribute;\n\n    /**\n     * The values of the modification.\n     *\n     * @var array\n     */\n    protected $values = [];\n\n    /**\n     * The modtype integer of the batch modification.\n     *\n     * @var int\n     */\n    protected $type;\n\n    /**\n     * Constructor.\n     *\n     * @param string|null     $attribute\n     * @param string|int|null $type\n     * @param array           $values\n     */\n    public function __construct($attribute = null, $type = null, $values = [])\n    {\n        $this->setAttribute($attribute)\n            ->setType($type)\n            ->setValues($values);\n    }\n\n    /**\n     * Sets the original value of the attribute before modification.\n     *\n     * @param mixed $original\n     *\n     * @return $this\n     */\n    public function setOriginal($original = null)\n    {\n        $this->original = $original;\n\n        return $this;\n    }\n\n    /**\n     * Returns the original value of the attribute before modification.\n     *\n     * @return mixed\n     */\n    public function getOriginal()\n    {\n        return $this->original;\n    }\n\n    /**\n     * Sets the attribute of the modification.\n     *\n     * @param string $attribute\n     *\n     * @return $this\n     */\n    public function setAttribute($attribute)\n    {\n        $this->attribute = $attribute;\n\n        return $this;\n    }\n\n    /**\n     * Returns the attribute of the modification.\n     *\n     * @return string\n     */\n    public function getAttribute()\n    {\n        return $this->attribute;\n    }\n\n    /**\n     * Sets the values of the modification.\n     *\n     * @param array $values\n     *\n     * @return $this\n     */\n    public function setValues(array $values = [])\n    {\n        $this->values = array_map(function ($value) {\n            // We need to make sure all values given to a batch modification are\n            // strings, otherwise we'll receive an LDAP exception when\n            // we try to process the modification.\n            return (string) $value;\n        }, $values);\n\n        return $this;\n    }\n\n    /**\n     * Returns the values of the modification.\n     *\n     * @return array\n     */\n    public function getValues()\n    {\n        return $this->values;\n    }\n\n    /**\n     * Sets the type of the modification.\n     *\n     * @param int|null $type\n     *\n     * @return $this\n     */\n    public function setType($type = null)\n    {\n        if (!is_null($type) && !$this->isValidType($type)) {\n            throw new InvalidArgumentException('Given batch modification type is invalid.');\n        }\n\n        $this->type = $type;\n\n        return $this;\n    }\n\n    /**\n     * Returns the type of the modification.\n     *\n     * @return int\n     */\n    public function getType()\n    {\n        return $this->type;\n    }\n\n    /**\n     * Determines if the batch modification\n     * is valid in its current state.\n     *\n     * @return bool\n     */\n    public function isValid()\n    {\n        return !is_null($this->get());\n    }\n\n    /**\n     * Builds the type of modification automatically\n     * based on the current and original values.\n     *\n     * @return $this\n     */\n    public function build()\n    {\n        $filtered = array_diff(\n            array_map('trim', $this->values),\n            ['']\n        );\n\n        if (is_null($this->original)) {\n            // If the original value is null, we'll assume\n            // that the attribute doesn't exist yet.\n            if (!empty($filtered)) {\n                // If the filtered array is not empty, we can\n                // assume we're looking to add values\n                // to the current attribute.\n                $this->setType(LDAP_MODIFY_BATCH_ADD);\n            }\n\n            // If the filtered array is empty and there is no original\n            // value, then we can ignore this attribute since\n            // we can't push null values to the server.\n        } else {\n            if (empty($filtered)) {\n                // If there's an original value and the array is\n                // empty then we can assume we are looking\n                // to completely remove all values\n                // of the current attribute.\n                $this->setType(LDAP_MODIFY_BATCH_REMOVE_ALL);\n            } else {\n                // If the array isn't empty then we can assume\n                // we're looking to replace all attributes.\n                $this->setType(LDAP_MODIFY_BATCH_REPLACE);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns the built batch modification array.\n     *\n     * @return array|null\n     */\n    public function get()\n    {\n        switch ($this->type) {\n            case LDAP_MODIFY_BATCH_REMOVE_ALL:\n                // A values key cannot be provided when\n                // a remove all type is selected.\n                return [\n                    static::KEY_ATTRIB  => $this->attribute,\n                    static::KEY_MODTYPE => $this->type,\n                ];\n            case LDAP_MODIFY_BATCH_REMOVE:\n                // Fallthrough.\n            case LDAP_MODIFY_BATCH_ADD:\n                // Fallthrough.\n            case LDAP_MODIFY_BATCH_REPLACE:\n                return [\n                    static::KEY_ATTRIB  => $this->attribute,\n                    static::KEY_MODTYPE => $this->type,\n                    static::KEY_VALUES  => $this->values,\n                ];\n            default:\n                // If the modtype isn't recognized, we'll return null.\n                return;\n        }\n    }\n\n    /**\n     * Determines if the given modtype is valid.\n     *\n     * @param int $type\n     *\n     * @return bool\n     */\n    protected function isValidType($type)\n    {\n        return in_array($type, [\n            LDAP_MODIFY_BATCH_REMOVE_ALL,\n            LDAP_MODIFY_BATCH_REMOVE,\n            LDAP_MODIFY_BATCH_REPLACE,\n            LDAP_MODIFY_BATCH_ADD,\n        ]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Computer.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class Computer.\n *\n * Represents an LDAP computer / server.\n */\nclass Computer extends Entry\n{\n    use Concerns\\HasMemberOf;\n    use Concerns\\HasDescription;\n    use Concerns\\HasLastLogonAndLogOff;\n    use Concerns\\HasUserAccountControl;\n    use Concerns\\HasCriticalSystemObject;\n\n    /**\n     * Returns the computers operating system.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679076(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getOperatingSystem()\n    {\n        return $this->getFirstAttribute($this->schema->operatingSystem());\n    }\n\n    /**\n     * Returns the computers operating system version.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679079(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getOperatingSystemVersion()\n    {\n        return $this->getFirstAttribute($this->schema->operatingSystemVersion());\n    }\n\n    /**\n     * Returns the computers operating system service pack.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679078(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getOperatingSystemServicePack()\n    {\n        return $this->getFirstAttribute($this->schema->operatingSystemServicePack());\n    }\n\n    /**\n     * Returns the computers DNS host name.\n     *\n     * @return string\n     */\n    public function getDnsHostName()\n    {\n        return $this->getFirstAttribute($this->schema->dnsHostName());\n    }\n\n    /**\n     * Returns the computers bad password time.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675243(v=vs.85).aspx\n     *\n     * @return int\n     */\n    public function getBadPasswordTime()\n    {\n        return $this->getFirstAttribute($this->schema->badPasswordTime());\n    }\n\n    /**\n     * Returns the computers account expiry date.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675098(v=vs.85).aspx\n     *\n     * @return int\n     */\n    public function getAccountExpiry()\n    {\n        return $this->getFirstAttribute($this->schema->accountExpires());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasAttributes.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\nuse Illuminate\\Support\\Arr;\n\ntrait HasAttributes\n{\n    /**\n     * The default output date format for all time related methods.\n     *\n     * Default format is suited for MySQL timestamps.\n     *\n     * @var string\n     */\n    public $dateFormat = 'Y-m-d H:i:s';\n\n    /**\n     * The format that is used to convert timestamps to unix timestamps.\n     *\n     * Currently set for compatibility with Active Directory.\n     *\n     * @var string\n     */\n    protected $timestampFormat = 'YmdHis.0Z';\n\n    /**\n     * The models attributes.\n     *\n     * @var array\n     */\n    protected $attributes = [];\n\n    /**\n     * The models original attributes.\n     *\n     * @var array\n     */\n    protected $original = [];\n\n    /**\n     * Dynamically retrieve attributes on the object.\n     *\n     * @param mixed $key\n     *\n     * @return bool\n     */\n    public function __get($key)\n    {\n        return $this->getAttribute($key);\n    }\n\n    /**\n     * Dynamically set attributes on the object.\n     *\n     * @param mixed $key\n     * @param mixed $value\n     *\n     * @return $this\n     */\n    public function __set($key, $value)\n    {\n        return $this->setAttribute($key, $value);\n    }\n\n    /**\n     * Synchronizes the models original attributes\n     * with the model's current attributes.\n     *\n     * @return $this\n     */\n    public function syncOriginal()\n    {\n        $this->original = $this->attributes;\n\n        return $this;\n    }\n\n    /**\n     * Returns the models attribute with the specified key.\n     *\n     * If a sub-key is specified, it will try and\n     * retrieve it from the parent keys array.\n     *\n     * @param int|string $key\n     * @param int|string $subKey\n     *\n     * @return mixed\n     */\n    public function getAttribute($key, $subKey = null)\n    {\n        if (!$key) {\n            return;\n        }\n\n        // We'll normalize the given key to prevent case sensitivity issues.\n        $key = $this->normalizeAttributeKey($key);\n\n        if (is_null($subKey) && $this->hasAttribute($key)) {\n            return $this->attributes[$key];\n        } elseif ($this->hasAttribute($key, $subKey)) {\n            return $this->attributes[$key][$subKey];\n        }\n    }\n\n    /**\n     * Returns the first attribute by the specified key.\n     *\n     * @param string $key\n     *\n     * @return mixed\n     */\n    public function getFirstAttribute($key)\n    {\n        return $this->getAttribute($key, 0);\n    }\n\n    /**\n     * Returns all of the models attributes.\n     *\n     * @return array\n     */\n    public function getAttributes()\n    {\n        return $this->attributes;\n    }\n\n    /**\n     * Fills the entry with the supplied attributes.\n     *\n     * @param array $attributes\n     *\n     * @return $this\n     */\n    public function fill(array $attributes = [])\n    {\n        foreach ($attributes as $key => $value) {\n            $this->setAttribute($key, $value);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Sets an attributes value by the specified key and sub-key.\n     *\n     * @param int|string $key\n     * @param mixed      $value\n     * @param int|string $subKey\n     *\n     * @return $this\n     */\n    public function setAttribute($key, $value, $subKey = null)\n    {\n        // Normalize key.\n        $key = $this->normalizeAttributeKey($key);\n\n        // If the key is equal to 'dn', we'll automatically\n        // change it to the full attribute name.\n        $key = ($key == 'dn' ? $this->schema->distinguishedName() : $key);\n\n        if (is_null($subKey)) {\n            // We need to ensure all attributes are set as arrays so all\n            // of our model methods retrieve attributes correctly.\n            $this->attributes[$key] = is_array($value) ? $value : [$value];\n        } else {\n            $this->attributes[$key][$subKey] = $value;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Sets the first attributes value by the specified key.\n     *\n     * @param int|string $key\n     * @param mixed      $value\n     *\n     * @return $this\n     */\n    public function setFirstAttribute($key, $value)\n    {\n        return $this->setAttribute($key, $value, 0);\n    }\n\n    /**\n     * Sets the attributes property.\n     *\n     * Used when constructing an existing LDAP record.\n     *\n     * @param array $attributes\n     *\n     * @return $this\n     */\n    public function setRawAttributes(array $attributes = [])\n    {\n        // We'll filter out those annoying 'count' keys returned with LDAP results,\n        // and lowercase all root array keys to prevent any casing issues.\n        $this->attributes = array_change_key_case($this->filterRawAttributes($attributes), CASE_LOWER);\n\n        // We'll pull out the distinguished name from our raw attributes\n        // and set it into our attributes array with the full attribute\n        // definition. This allows us to normalize distinguished\n        // names across different LDAP variants.\n        if ($dn = Arr::get($attributes, 'dn')) {\n            // In some LDAP variants, the distinguished\n            // name is returned as an array.\n            if (is_array($dn)) {\n                $dn = Arr::first($dn);\n            }\n\n            $this->setDistinguishedName($dn);\n        }\n\n        $this->syncOriginal();\n\n        // Set exists to true since raw attributes are only\n        // set in the case of attributes being loaded by\n        // query results.\n        $this->exists = true;\n\n        return $this;\n    }\n\n    /**\n     * Filters the count key recursively from raw LDAP attributes.\n     *\n     * @param array        $attributes\n     * @param array|string $keys\n     *\n     * @return array\n     */\n    public function filterRawAttributes(array $attributes = [], $keys = ['count', 'dn'])\n    {\n        $attributes = Arr::except($attributes, $keys);\n\n        array_walk($attributes, function (&$value) use ($keys) {\n            $value = is_array($value) ?\n                $this->filterRawAttributes($value, $keys) :\n                $value;\n        });\n\n        return $attributes;\n    }\n\n    /**\n     * Returns true / false if the specified attribute\n     * exists in the attributes array.\n     *\n     * @param int|string $key\n     * @param int|string $subKey\n     *\n     * @return bool\n     */\n    public function hasAttribute($key, $subKey = null)\n    {\n        // Normalize key.\n        $key = $this->normalizeAttributeKey($key);\n\n        if (is_null($subKey)) {\n            return Arr::has($this->attributes, $key);\n        }\n\n        return Arr::has($this->attributes, \"$key.$subKey\");\n    }\n\n    /**\n     * Returns the number of attributes inside\n     * the attributes property.\n     *\n     * @return int\n     */\n    public function countAttributes()\n    {\n        return count($this->getAttributes());\n    }\n\n    /**\n     * Returns the models original attributes.\n     *\n     * @return array\n     */\n    public function getOriginal()\n    {\n        return $this->original;\n    }\n\n    /**\n     * Get the attributes that have been changed since last sync.\n     *\n     * @return array\n     */\n    public function getDirty()\n    {\n        $dirty = [];\n\n        foreach ($this->attributes as $key => $value) {\n            if (!$this->originalIsEquivalent($key)) {\n                // We need to reset the array's indices using array_values due to\n                // LDAP requiring consecutive indices (0, 1, 2 etc.)\n                $dirty[$key] = array_values($value);\n            }\n        }\n\n        return $dirty;\n    }\n\n    /**\n     * Returns a normalized attribute key.\n     *\n     * @param string $key\n     *\n     * @return string\n     */\n    protected function normalizeAttributeKey($key)\n    {\n        return strtolower($key);\n    }\n\n    /**\n     * Determine if the new and old values for a given key are equivalent.\n     *\n     * @param string $key\n     *\n     * @return bool\n     */\n    protected function originalIsEquivalent($key)\n    {\n        if (!array_key_exists($key, $this->original)) {\n            return false;\n        }\n\n        $current = $this->attributes[$key];\n\n        $original = $this->original[$key];\n\n        if ($current === $original) {\n            return true;\n        }\n\n        return  is_numeric($current) &&\n                is_numeric($original) &&\n                strcmp((string) $current, (string) $original) === 0;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasCriticalSystemObject.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\ntrait HasCriticalSystemObject\n{\n    /**\n     * Returns true / false if the entry is a critical system object.\n     *\n     * @return null|bool\n     */\n    public function isCriticalSystemObject()\n    {\n        $attribute = $this->getFirstAttribute($this->schema->isCriticalSystemObject());\n\n        return $this->convertStringToBool($attribute);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasDescription.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\ntrait HasDescription\n{\n    /**\n     * Returns the models's description.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675492(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getDescription()\n    {\n        return $this->getFirstAttribute($this->schema->description());\n    }\n\n    /**\n     * Sets the models's description.\n     *\n     * @param string $description\n     *\n     * @return $this\n     */\n    public function setDescription($description)\n    {\n        return $this->setFirstAttribute($this->schema->description(), $description);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasEvents.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\nuse Adldap\\Adldap;\nuse Adldap\\Models\\Events\\Event;\n\ntrait HasEvents\n{\n    /**\n     * Fires the specified model event.\n     *\n     * @param Event $event\n     *\n     * @return mixed\n     */\n    protected function fireModelEvent(Event $event)\n    {\n        return Adldap::getEventDispatcher()->fire($event);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasLastLogonAndLogOff.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\ntrait HasLastLogonAndLogOff\n{\n    /**\n     * Returns the models's last log off date.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676822(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getLastLogOff()\n    {\n        return $this->getFirstAttribute($this->schema->lastLogOff());\n    }\n\n    /**\n     * Returns the models's last log on date.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676823(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getLastLogon()\n    {\n        return $this->getFirstAttribute($this->schema->lastLogOn());\n    }\n\n    /**\n     * Returns the models's last log on timestamp.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676824(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getLastLogonTimestamp()\n    {\n        return $this->getFirstAttribute($this->schema->lastLogOnTimestamp());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasMemberOf.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\nuse Adldap\\Utilities;\nuse Adldap\\Models\\User;\nuse Adldap\\Models\\Group;\nuse Adldap\\Query\\Collection;\n\ntrait HasMemberOf\n{\n    /**\n     * Returns an array of distinguished names of groups that the current model belongs to.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677099(v=vs.85).aspx\n     *\n     * @return array\n     */\n    public function getMemberOf()\n    {\n        $dns = $this->getAttribute($this->schema->memberOf());\n\n        // Normalize returned distinguished names if the attribute is null.\n        return is_array($dns) ? $dns : [];\n    }\n\n    /**\n     * Adds the current model to the specified group.\n     *\n     * @param string|Group $group\n     *\n     * @return bool\n     */\n    public function addGroup($group)\n    {\n        if (is_string($group)) {\n            // If the group is a string, we'll assume the dev is passing\n            // in a DN string of the group. We'll try to locate it.\n            $group = $this->query->newInstance()->findByDn($group);\n        }\n\n        if ($group instanceof Group) {\n            // If the group is Group model instance, we can\n            // add the current models DN to the group.\n            return $group->addMember($this->getDn());\n        }\n\n        return false;\n    }\n\n    /**\n     * Removes the current model from the specified group.\n     *\n     * @param string|Group $group\n     *\n     * @return bool\n     */\n    public function removeGroup($group)\n    {\n        if (is_string($group)) {\n            // If the group is a string, we'll assume the dev is passing\n            // in a DN string of the group. We'll try to locate it.\n            $group = $this->query->newInstance()->findByDn($group);\n        }\n\n        if ($group instanceof Group) {\n            // If the group is Group model instance, we can\n            // remove the current models DN from the group.\n            return $group->removeMember($this->getDn());\n        }\n\n        return false;\n    }\n\n    /**\n     * Removes the current model from all groups.\n     *\n     * @return array The group distinguished names that were successfully removed\n     */\n    public function removeAllGroups()\n    {\n        $removed = [];\n\n        foreach ($this->getMemberOf() as $group) {\n            if ($this->removeGroup($group)) {\n                $removed[] = $group;\n            }\n        }\n\n        return $removed;\n    }\n\n    /**\n     * Returns the models groups that it is apart of.\n     *\n     * If a recursive option is given, groups of groups\n     * are retrieved and then merged with\n     * the resulting collection.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677099(v=vs.85).aspx\n     *\n     * @param array $fields\n     * @param bool  $recursive\n     * @param array $visited\n     *\n     * @return Collection\n     */\n    public function getGroups(array $fields = ['*'], $recursive = false, array $visited = [])\n    {\n        if (!in_array($this->schema->memberOf(), $fields)) {\n            // We want to make sure that we always select the memberof\n            // field in case developers want recursive members.\n            $fields = array_merge($fields, [$this->schema->memberOf()]);\n        }\n\n        $groups = $this->getGroupsByNames($this->getMemberOf(), $fields);\n\n        // We need to check if we're working with a User model. Only users\n        // contain a primary group. If we are, we'll merge the users\n        // primary group into the resulting collection.\n        if ($this instanceof User && $primary = $this->getPrimaryGroup()) {\n            $groups->push($primary);\n        }\n\n        // If recursive results are requested, we'll ask each group\n        // for their groups, and merge the resulting collection.\n        if ($recursive) {\n            /** @var Group $group */\n            foreach ($groups as $group) {\n                // We need to validate that we haven't already queried\n                // for this group's members so we don't allow\n                // infinite recursion in case of circular\n                // group dependencies in LDAP.\n                if (!in_array($group->getDn(), $visited)) {\n                    $visited[] = $group->getDn();\n\n                    $members = $group->getGroups($fields, $recursive, $visited);\n\n                    /** @var Group $member */\n                    foreach ($members as $member) {\n                        $visited[] = $member->getDn();\n                    }\n\n                    $groups = $groups->merge($members);\n                }\n            }\n        }\n\n        return $groups;\n    }\n\n    /**\n     * Returns the models groups names in a single dimension array.\n     *\n     * If a recursive option is given, groups of groups\n     * are retrieved and then merged with\n     * the resulting collection.\n     *\n     * @param bool $recursive\n     *\n     * @return array\n     */\n    public function getGroupNames($recursive = false)\n    {\n        $fields = [$this->schema->commonName(), $this->schema->memberOf()];\n\n        $names = $this->getGroups($fields, $recursive)->map(function (Group $group) {\n            return $group->getCommonName();\n        })->toArray();\n\n        return array_unique($names);\n    }\n\n    /**\n     * Determine if the current model is a member of the specified group(s).\n     *\n     * @param mixed $group\n     * @param bool  $recursive\n     *\n     * @return bool\n     */\n    public function inGroup($group, $recursive = false)\n    {\n        $memberOf = $this->getGroups(['cn'], $recursive);\n\n        if ($group instanceof Collection) {\n            // If we've been given a collection then we'll convert\n            // it to an array to normalize the value.\n            $group = $group->toArray();\n        }\n\n        $groups = is_array($group) ? $group : [$group];\n\n        foreach ($groups as $group) {\n            // We need to iterate through each given group that the\n            // model must be apart of, then go through the models\n            // actual groups and perform validation.\n            $exists = $memberOf->filter(function (Group $parent) use ($group) {\n                return $this->groupIsParent($group, $parent);\n            })->count() !== 0;\n\n            if (!$exists) {\n                // If the current group isn't at all contained\n                // in the memberOf collection, we'll\n                // return false here.\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Retrieves groups by their distinguished name.\n     *\n     * @param array $dns\n     * @param array $fields\n     *\n     * @return Collection\n     */\n    protected function getGroupsByNames(array $dns = [], $fields = [])\n    {\n        $query = $this->query->newInstance();\n\n        return $query->newCollection($dns)->map(function ($dn) use ($query, $fields) {\n            return $query->select($fields)->clearFilters()->findByDn($dn);\n        })->filter(function ($group) {\n            return $group instanceof Group;\n        });\n    }\n\n    /**\n     * Validates if the specified group is the given parent instance.\n     *\n     * @param Group|string $group\n     * @param Group        $parent\n     *\n     * @return bool\n     */\n    protected function groupIsParent($group, Group $parent)\n    {\n        if ($group instanceof Group) {\n            // We've been given a group instance, we'll compare their DNs.\n            return $parent->getDn() === $group->getDn();\n        }\n\n        if (Utilities::explodeDn($group)) {\n            // We've been given a DN, we'll compare it to the parents.\n            return $parent->getDn() === $group;\n        }\n\n        if (!empty($group)) {\n            // We've been given just a string, we'll\n            // compare it to the parents name.\n            return $parent->getCommonName() === $group;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasUserAccountControl.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\nuse Adldap\\Models\\Attributes\\AccountControl;\n\ntrait HasUserAccountControl\n{\n    /**\n     * Returns the users user account control integer.\n     *\n     * @return string\n     */\n    public function getUserAccountControl()\n    {\n        return $this->getFirstAttribute($this->schema->userAccountControl());\n    }\n\n    /**\n     * Returns the users user account control as an AccountControl object.\n     *\n     * @return AccountControl\n     */\n    public function getUserAccountControlObject()\n    {\n        return new AccountControl($this->getUserAccountControl());\n    }\n\n    /**\n     * Sets the users account control property.\n     *\n     * @param int|string|AccountControl $accountControl\n     *\n     * @return $this\n     */\n    public function setUserAccountControl($accountControl)\n    {\n        return $this->setAttribute($this->schema->userAccountControl(), (string) $accountControl);\n    }\n\n    /**\n     * Returns if the user is disabled.\n     *\n     * @return bool\n     */\n    public function isDisabled()\n    {\n        return ($this->getUserAccountControl() & AccountControl::ACCOUNTDISABLE) === AccountControl::ACCOUNTDISABLE;\n    }\n\n    /**\n     * Returns if the user is enabled.\n     *\n     * @return bool\n     */\n    public function isEnabled()\n    {\n        return $this->getUserAccountControl() === null ? false : !$this->isDisabled();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Concerns/HasUserProperties.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Concerns;\n\ntrait HasUserProperties\n{\n    /**\n     * Returns the users country.\n     *\n     * @return string|null\n     */\n    public function getCountry()\n    {\n        return $this->getFirstAttribute($this->schema->country());\n    }\n\n    /**\n     * Sets the users country.\n     *\n     * @param string $country\n     *\n     * @return $this\n     */\n    public function setCountry($country)\n    {\n        return $this->setFirstAttribute($this->schema->country(), $country);\n    }\n\n    /**\n     * Returns the users department.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675490(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getDepartment()\n    {\n        return $this->getFirstAttribute($this->schema->department());\n    }\n\n    /**\n     * Sets the users department.\n     *\n     * @param string $department\n     *\n     * @return $this\n     */\n    public function setDepartment($department)\n    {\n        return $this->setFirstAttribute($this->schema->department(), $department);\n    }\n\n    /**\n     * Returns the users email address.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676855(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getEmail()\n    {\n        return $this->getFirstAttribute($this->schema->email());\n    }\n\n    /**\n     * Sets the users email.\n     *\n     * Keep in mind this will remove all other\n     * email addresses the user currently has.\n     *\n     * @param string $email\n     *\n     * @return $this\n     */\n    public function setEmail($email)\n    {\n        return $this->setFirstAttribute($this->schema->email(), $email);\n    }\n\n    /**\n     * Returns the users facsimile number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675675(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getFacsimileNumber()\n    {\n        return $this->getFirstAttribute($this->schema->facsimile());\n    }\n\n    /**\n     * Sets the users facsimile number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setFacsimileNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->facsimile(), $number);\n    }\n\n    /**\n     * Returns the users first name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675719(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getFirstName()\n    {\n        return $this->getFirstAttribute($this->schema->firstName());\n    }\n\n    /**\n     * Sets the users first name.\n     *\n     * @param string $firstName\n     *\n     * @return $this\n     */\n    public function setFirstName($firstName)\n    {\n        return $this->setFirstAttribute($this->schema->firstName(), $firstName);\n    }\n\n    /**\n     * Returns the users initials.\n     *\n     * @return string|null\n     */\n    public function getInitials()\n    {\n        return $this->getFirstAttribute($this->schema->initials());\n    }\n\n    /**\n     * Sets the users initials.\n     *\n     * @param string $initials\n     *\n     * @return $this\n     */\n    public function setInitials($initials)\n    {\n        return $this->setFirstAttribute($this->schema->initials(), $initials);\n    }\n\n    /**\n     * Returns the users IP Phone.\n     *\n     * @return string|null\n     */\n    public function getIpPhone()\n    {\n        return $this->getFirstAttribute($this->schema->ipPhone());\n    }\n\n    /**\n     * Sets the users IP phone.\n     *\n     * @param string $ip\n     *\n     * @return $this\n     */\n    public function setIpPhone($ip)\n    {\n        return $this->setFirstAttribute($this->schema->ipPhone(), $ip);\n    }\n\n    /**\n     * Returns the users last name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679872(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getLastName()\n    {\n        return $this->getFirstAttribute($this->schema->lastName());\n    }\n\n    /**\n     * Sets the users last name.\n     *\n     * @param string $lastName\n     *\n     * @return $this\n     */\n    public function setLastName($lastName)\n    {\n        return $this->setFirstAttribute($this->schema->lastName(), $lastName);\n    }\n\n    /**\n     * Returns the users postal code.\n     *\n     * @return string|null\n     */\n    public function getPostalCode()\n    {\n        return $this->getFirstAttribute($this->schema->postalCode());\n    }\n\n    /**\n     * Sets the users postal code.\n     *\n     * @param string $postalCode\n     *\n     * @return $this\n     */\n    public function setPostalCode($postalCode)\n    {\n        return $this->setFirstAttribute($this->schema->postalCode(), $postalCode);\n    }\n\n    /**\n     * Get the users post office box.\n     *\n     * @return string|null\n     */\n    public function getPostOfficeBox()\n    {\n        return $this->getFirstAttribute($this->schema->postOfficeBox());\n    }\n\n    /**\n     * Sets the users post office box.\n     *\n     * @param string|int $box\n     *\n     * @return $this\n     */\n    public function setPostOfficeBox($box)\n    {\n        return $this->setFirstAttribute($this->schema->postOfficeBox(), $box);\n    }\n\n    /**\n     * Sets the users proxy addresses.\n     *\n     * This will remove all proxy addresses on the user and insert the specified addresses.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679424(v=vs.85).aspx\n     *\n     * @param array $addresses\n     *\n     * @return $this\n     */\n    public function setProxyAddresses(array $addresses = [])\n    {\n        return $this->setAttribute($this->schema->proxyAddresses(), $addresses);\n    }\n\n    /**\n     * Add's a single proxy address to the user.\n     *\n     * @param string $address\n     *\n     * @return $this\n     */\n    public function addProxyAddress($address)\n    {\n        $addresses = $this->getProxyAddresses();\n\n        $addresses[] = $address;\n\n        return $this->setAttribute($this->schema->proxyAddresses(), $addresses);\n    }\n\n    /**\n     * Returns the users proxy addresses.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679424(v=vs.85).aspx\n     *\n     * @return array\n     */\n    public function getProxyAddresses()\n    {\n        return $this->getAttribute($this->schema->proxyAddresses()) ?? [];\n    }\n\n    /**\n     * Returns the users street address.\n     *\n     * @return string|null\n     */\n    public function getStreetAddress()\n    {\n        return $this->getFirstAttribute($this->schema->streetAddress());\n    }\n\n    /**\n     * Sets the users street address.\n     *\n     * @param string $address\n     *\n     * @return $this\n     */\n    public function setStreetAddress($address)\n    {\n        return $this->setFirstAttribute($this->schema->streetAddress(), $address);\n    }\n\n    /**\n     * Returns the users title.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680037(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getTitle()\n    {\n        return $this->getFirstAttribute($this->schema->title());\n    }\n\n    /**\n     * Sets the users title.\n     *\n     * @param string $title\n     *\n     * @return $this\n     */\n    public function setTitle($title)\n    {\n        return $this->setFirstAttribute($this->schema->title(), $title);\n    }\n\n    /**\n     * Returns the users telephone number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680027(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getTelephoneNumber()\n    {\n        return $this->getFirstAttribute($this->schema->telephone());\n    }\n\n    /**\n     * Sets the users telephone number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setTelephoneNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->telephone(), $number);\n    }\n\n    /**\n     * Returns the users primary mobile phone number.\n     *\n     * @return string|null\n     */\n    public function getMobileNumber()\n    {\n        return $this->getFirstAttribute($this->schema->mobile());\n    }\n\n    /**\n     * Sets the users primary mobile phone number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setMobileNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->mobile(), $number);\n    }\n\n    /**\n     * Returns the users secondary (other) mobile phone number.\n     *\n     * @return string|null\n     */\n    public function getOtherMobileNumber()\n    {\n        return $this->getFirstAttribute($this->schema->otherMobile());\n    }\n\n    /**\n     * Sets the users  secondary (other) mobile phone number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setOtherMobileNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->otherMobile(), $number);\n    }\n\n    /**\n     * Returns the users other mailbox attribute.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679091(v=vs.85).aspx\n     *\n     * @return array\n     */\n    public function getOtherMailbox()\n    {\n        return $this->getAttribute($this->schema->otherMailbox());\n    }\n\n    /**\n     * Sets the users other mailboxes.\n     *\n     * @param array $otherMailbox\n     *\n     * @return $this\n     */\n    public function setOtherMailbox($otherMailbox = [])\n    {\n        return $this->setAttribute($this->schema->otherMailbox(), $otherMailbox);\n    }\n\n    /**\n     * Returns the distinguished name of the user who is the user's manager.\n     *\n     * @return string|null\n     */\n    public function getManager()\n    {\n        return $this->getFirstAttribute($this->schema->manager());\n    }\n\n    /**\n     * Sets the distinguished name of the user who is the user's manager.\n     *\n     * @param string $managerDn\n     *\n     * @return $this\n     */\n    public function setManager($managerDn)\n    {\n        return $this->setFirstAttribute($this->schema->manager(), $managerDn);\n    }\n\n    /**\n     * Returns the users mail nickname.\n     *\n     * @return string|null\n     */\n    public function getMailNickname()\n    {\n        return $this->getFirstAttribute($this->schema->emailNickname());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Contact.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class Contact.\n *\n * Represents an LDAP contact.\n */\nclass Contact extends Entry\n{\n    use Concerns\\HasMemberOf;\n    use Concerns\\HasUserProperties;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Container.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class Container.\n *\n * Represents an LDAP container.\n */\nclass Container extends Entry\n{\n    use Concerns\\HasDescription;\n    use Concerns\\HasCriticalSystemObject;\n\n    /**\n     * Returns the containers system flags integer.\n     *\n     * An integer value that contains flags that define additional properties of the class.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680022(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getSystemFlags()\n    {\n        return $this->getFirstAttribute($this->schema->systemFlags());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Entry.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class Entry.\n *\n * Represents an LDAP record that could not be identified as another type of model.\n */\nclass Entry extends Model\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Created.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Created extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Creating.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Creating extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Deleted.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Deleted extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Deleting.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Deleting extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Event.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nuse Adldap\\Models\\Model;\n\nabstract class Event\n{\n    /**\n     * The model that the event is being triggered on.\n     *\n     * @var Model\n     */\n    protected $model;\n\n    /**\n     * Constructor.\n     *\n     * @param Model $model\n     */\n    public function __construct(Model $model)\n    {\n        $this->model = $model;\n    }\n\n    /**\n     * Returns the model that generated the event.\n     *\n     * @return Model\n     */\n    public function getModel()\n    {\n        return $this->model;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Saved.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Saved extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Saving.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Saving extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Updated.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Updated extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Events/Updating.php",
    "content": "<?php\n\nnamespace Adldap\\Models\\Events;\n\nclass Updating extends Event\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Factory.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse Adldap\\Query\\Builder;\nuse Adldap\\Schemas\\ActiveDirectory;\nuse Adldap\\Schemas\\SchemaInterface;\n\n/**\n * Class Factory.\n *\n * Creates new LDAP models.\n */\nclass Factory\n{\n    /**\n     * The LDAP query builder.\n     *\n     * @var Builder\n     */\n    protected $query;\n\n    /**\n     * The LDAP schema.\n     *\n     * @var SchemaInterface\n     */\n    protected $schema;\n\n    /**\n     * Constructor.\n     *\n     * @param Builder $builder\n     */\n    public function __construct(Builder $builder)\n    {\n        $this->setQuery($builder)\n            ->setSchema($builder->getSchema());\n    }\n\n    /**\n     * Sets the current query builder.\n     *\n     * @param Builder $builder\n     *\n     * @return $this\n     */\n    public function setQuery(Builder $builder)\n    {\n        $this->query = $builder;\n\n        return $this;\n    }\n\n    /**\n     * Sets the current schema.\n     *\n     * If null is given, a default ActiveDirectory schema is set.\n     *\n     * @param SchemaInterface|null $schema\n     *\n     * @return $this\n     */\n    public function setSchema(SchemaInterface $schema = null)\n    {\n        $this->schema = $schema ?: new ActiveDirectory();\n\n        return $this;\n    }\n\n    /**\n     * Creates a new generic LDAP entry instance.\n     *\n     * @param array $attributes\n     *\n     * @return Entry\n     */\n    public function entry(array $attributes = [])\n    {\n        $model = $this->schema->entryModel();\n\n        return new $model($attributes, $this->query);\n    }\n\n    /**\n     * Creates a new user instance.\n     *\n     * @param array $attributes\n     *\n     * @return User\n     */\n    public function user(array $attributes = [])\n    {\n        $model = $this->schema->userModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), $this->schema->userObjectClasses());\n    }\n\n    /**\n     * Creates a new organizational unit instance.\n     *\n     * @param array $attributes\n     *\n     * @return OrganizationalUnit\n     */\n    public function ou(array $attributes = [])\n    {\n        $model = $this->schema->organizationalUnitModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), [\n                $this->schema->top(),\n                $this->schema->organizationalUnit(),\n            ]);\n    }\n\n    /**\n     * Creates a new organizational unit instance.\n     *\n     * @param array $attributes\n     *\n     * @return Organization\n     */\n    public function organization(array $attributes = [])\n    {\n        $model = $this->schema->organizationModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), [\n                $this->schema->top(),\n                $this->schema->organization(),\n            ]);\n    }\n\n    /**\n     * Creates a new group instance.\n     *\n     * @param array $attributes\n     *\n     * @return Group\n     */\n    public function group(array $attributes = [])\n    {\n        $model = $this->schema->groupModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), [\n                $this->schema->top(),\n                $this->schema->objectCategoryGroup(),\n            ]);\n    }\n\n    /**\n     * Creates a new organizational unit instance.\n     *\n     * @param array $attributes\n     *\n     * @return Container\n     */\n    public function container(array $attributes = [])\n    {\n        $model = $this->schema->containerModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), $this->schema->objectClassContainer());\n    }\n\n    /**\n     * Creates a new user instance as a contact.\n     *\n     * @param array $attributes\n     *\n     * @return User\n     */\n    public function contact(array $attributes = [])\n    {\n        $model = $this->schema->contactModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), [\n                $this->schema->top(),\n                $this->schema->person(),\n                $this->schema->organizationalPerson(),\n                $this->schema->contact(),\n            ]);\n    }\n\n    /**\n     * Creates a new computer instance.\n     *\n     * @param array $attributes\n     *\n     * @return Computer\n     */\n    public function computer(array $attributes = [])\n    {\n        $model = $this->schema->computerModel();\n\n        return (new $model($attributes, $this->query))\n            ->setAttribute($this->schema->objectClass(), [\n                $this->schema->top(),\n                $this->schema->person(),\n                $this->schema->organizationalPerson(),\n                $this->schema->user(),\n                $this->schema->computer(),\n            ]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/ForeignSecurityPrincipal.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class ForeignSecurityPrincipal.\n *\n * Represents an LDAP ForeignSecurityPrincipal.\n */\nclass ForeignSecurityPrincipal extends Entry\n{\n    use Concerns\\HasMemberOf;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Group.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse Adldap\\Utilities;\nuse InvalidArgumentException;\n\n/**\n * Class Group.\n *\n * Represents an LDAP group (security / distribution).\n */\nclass Group extends Entry\n{\n    use Concerns\\HasMemberOf;\n    use Concerns\\HasDescription;\n\n    /**\n     * Returns all users apart of the current group.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677097(v=vs.85).aspx\n     *\n     * @return \\Adldap\\Query\\Collection\n     */\n    public function getMembers()\n    {\n        $members = $this->getMembersFromAttribute($this->schema->member());\n\n        if (count($members) === 0) {\n            $members = $this->getPaginatedMembers();\n        }\n\n        return $this->newCollection($members);\n    }\n\n    /**\n     * Returns the group's member names only.\n     *\n     * @return array\n     */\n    public function getMemberNames()\n    {\n        $members = [];\n\n        $dns = $this->getAttribute($this->schema->member()) ?: [];\n\n        foreach ($dns as $dn) {\n            $exploded = Utilities::explodeDn($dn);\n\n            if (array_key_exists(0, $exploded)) {\n                $members[] = $exploded[0];\n            }\n        }\n\n        return $members;\n    }\n\n    /**\n     * Sets the groups members using an array of user DNs.\n     *\n     * @param array $entries\n     *\n     * @return $this\n     */\n    public function setMembers(array $entries)\n    {\n        return $this->setAttribute($this->schema->member(), $entries);\n    }\n\n    /**\n     * Adds multiple entries to the current group.\n     *\n     * @param array $members\n     *\n     * @return bool\n     */\n    public function addMembers(array $members)\n    {\n        $members = array_map(function ($member) {\n            return $member instanceof Model\n                ? $member->getDn()\n                : $member;\n        }, $members);\n\n        $mod = $this->newBatchModification(\n            $this->schema->member(),\n            LDAP_MODIFY_BATCH_ADD,\n            $members\n        );\n\n        return $this->addModification($mod)->save();\n    }\n\n    /**\n     * Adds an entry to the current group.\n     *\n     * @param string|Entry $member\n     *\n     * @throws InvalidArgumentException When the given entry is empty or contains no distinguished name.\n     *\n     * @return bool\n     */\n    public function addMember($member)\n    {\n        $member = ($member instanceof Model ? $member->getDn() : $member);\n\n        if (is_null($member)) {\n            throw new InvalidArgumentException(\n                'Cannot add member to group. The members distinguished name cannot be null.'\n            );\n        }\n\n        $mod = $this->newBatchModification(\n            $this->schema->member(),\n            LDAP_MODIFY_BATCH_ADD,\n            [$member]\n        );\n\n        return $this->addModification($mod)->save();\n    }\n\n    /**\n     * Removes an entry from the current group.\n     *\n     * @param string|Entry $member\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return bool\n     */\n    public function removeMember($member)\n    {\n        $member = ($member instanceof Model ? $member->getDn() : $member);\n\n        if (is_null($member)) {\n            throw new InvalidArgumentException(\n                'Cannot remove member to group. The members distinguished name cannot be null.'\n            );\n        }\n\n        $mod = $this->newBatchModification(\n            $this->schema->member(),\n            LDAP_MODIFY_BATCH_REMOVE,\n            [$member]\n        );\n\n        return $this->addModification($mod)->save();\n    }\n\n    /**\n     * Removes all members from the current group.\n     *\n     * @return bool\n     */\n    public function removeMembers()\n    {\n        $mod = $this->newBatchModification(\n            $this->schema->member(),\n            LDAP_MODIFY_BATCH_REMOVE_ALL\n        );\n\n        return $this->addModification($mod)->save();\n    }\n\n    /**\n     * Returns the group type integer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675935(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getGroupType()\n    {\n        return $this->getFirstAttribute($this->schema->groupType());\n    }\n\n    /**\n     * Retrieves group members by the specified model attribute.\n     *\n     * @param $attribute\n     *\n     * @return array\n     */\n    protected function getMembersFromAttribute($attribute)\n    {\n        $members = [];\n\n        $entries = $this->getAttribute($attribute) ?: [];\n\n        $query = $this->query->newInstance();\n\n        // Retrieving the member identifier to allow\n        // compatibility with LDAP variants.\n        $identifier = $this->schema->memberIdentifier();\n\n        foreach ($entries as $entry) {\n            // If our identifier is a distinguished name, then we need to\n            // use an alternate query method, as we can't locate records\n            // by distinguished names using an LDAP filter.\n            if ($identifier == 'dn' || $identifier == 'distinguishedname') {\n                $member = $query->findByDn($entry);\n            } else {\n                // We'll ensure we clear our filters when retrieving each member,\n                // so we can continue fetching the next one in line.\n                $member = $query->clearFilters()->findBy($identifier, $entry);\n            }\n\n            // We'll double check that we've received a model from\n            // our query before adding it into our results.\n            if ($member instanceof Model) {\n                $members[] = $member;\n            }\n        }\n\n        return $members;\n    }\n\n    /**\n     * Retrieves members that are contained in a member range.\n     *\n     * @return array\n     */\n    protected function getPaginatedMembers()\n    {\n        $members = [];\n\n        $keys = array_keys($this->attributes);\n\n        // We need to filter out the model attributes so\n        // we only retrieve the member range.\n        $attributes = array_values(array_filter($keys, function ($key) {\n            return strpos($key, 'member;range') !== false;\n        }));\n\n        // We'll grab the member range key so we can run a\n        // regex on it to determine the range.\n        $key = reset($attributes);\n\n        preg_match_all(\n            '/member;range\\=([0-9]{1,4})-([0-9*]{1,4})/',\n            $key,\n            $matches\n        );\n\n        if ($key && count($matches) == 3) {\n            // Retrieve the ending range number.\n            $to = $matches[2][0];\n\n            // Retrieve the current groups members from the\n            // current range string (ex. 'member;0-50').\n            $members = $this->getMembersFromAttribute($key);\n\n            // If the query already included all member results (indicated\n            // by the '*'), then we can return here. Otherwise we need\n            // to continue on and retrieve the rest.\n            if ($to === '*') {\n                return $members;\n            }\n\n            // Determine the amount of members we're requesting per query.\n            $range = $to - $matches[1][0];\n\n            // Set our starting range to our last end range plus one.\n            $from = $to + 1;\n\n            // We'll determine the new end range by adding the\n            // total range to our new starting range.\n            $to = $from + $range;\n\n            // We'll need to query for the current model again but with\n            // a new range to retrieve the other members.\n            /** @var Group $group */\n            $group = $this->query->newInstance()->findByDn(\n                $this->getDn(),\n                [$this->query->getSchema()->memberRange($from, $to)]\n            );\n\n            // Finally, we'll merge our current members\n            // with the newly returned members.\n            $members = array_merge(\n                $members,\n                $group->getMembers()->toArray()\n            );\n        }\n\n        return $members;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Model.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse DateTime;\nuse ArrayAccess;\nuse Adldap\\Utilities;\nuse JsonSerializable;\nuse Adldap\\Query\\Builder;\nuse Illuminate\\Support\\Arr;\nuse Adldap\\Query\\Collection;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\nuse Adldap\\Models\\Attributes\\Sid;\nuse Adldap\\Models\\Attributes\\Guid;\nuse Adldap\\Schemas\\SchemaInterface;\nuse Adldap\\Models\\Attributes\\MbString;\nuse Adldap\\Connections\\ConnectionException;\nuse Adldap\\Models\\Attributes\\DistinguishedName;\n\n/**\n * Class Model.\n *\n * Represents an LDAP record and provides the ability\n * to modify / retrieve data from the record.\n */\nabstract class Model implements ArrayAccess, JsonSerializable\n{\n    use Concerns\\HasEvents;\n    use Concerns\\HasAttributes;\n\n    /**\n     * Indicates if the model exists.\n     *\n     * @var bool\n     */\n    public $exists = false;\n\n    /**\n     * The current query builder instance.\n     *\n     * @var Builder\n     */\n    protected $query;\n\n    /**\n     * The current LDAP attribute schema.\n     *\n     * @var SchemaInterface\n     */\n    protected $schema;\n\n    /**\n     * Contains the models modifications.\n     *\n     * @var array\n     */\n    protected $modifications = [];\n\n    /**\n     * Constructor.\n     *\n     * @param array   $attributes\n     * @param Builder $builder\n     */\n    public function __construct(array $attributes, Builder $builder)\n    {\n        $this->setQuery($builder)\n            ->setSchema($builder->getSchema())\n            ->fill($attributes);\n    }\n\n    /**\n     * Returns the models distinguished name when the model is converted to a string.\n     *\n     * @return null|string\n     */\n    public function __toString()\n    {\n        return $this->getDn();\n    }\n\n    /**\n     * Sets the current query builder.\n     *\n     * @param Builder $builder\n     *\n     * @return $this\n     */\n    public function setQuery(Builder $builder)\n    {\n        $this->query = $builder;\n\n        return $this;\n    }\n\n    /**\n     * Returns the current query builder.\n     *\n     * @return Builder\n     */\n    public function getQuery()\n    {\n        return $this->query;\n    }\n\n    /**\n     * Returns a new query builder instance.\n     *\n     * @return Builder\n     */\n    public function newQuery()\n    {\n        return $this->query->newInstance();\n    }\n\n    /**\n     * Returns a new batch modification.\n     *\n     * @param string|null     $attribute\n     * @param string|int|null $type\n     * @param array           $values\n     *\n     * @return BatchModification\n     */\n    public function newBatchModification($attribute = null, $type = null, $values = [])\n    {\n        return new BatchModification($attribute, $type, $values);\n    }\n\n    /**\n     * Returns a new collection with the specified items.\n     *\n     * @param mixed $items\n     *\n     * @return Collection\n     */\n    public function newCollection($items = [])\n    {\n        return new Collection($items);\n    }\n\n    /**\n     * Sets the current model schema.\n     *\n     * @param SchemaInterface $schema\n     *\n     * @return $this\n     */\n    public function setSchema(SchemaInterface $schema)\n    {\n        $this->schema = $schema;\n\n        return $this;\n    }\n\n    /**\n     * Returns the current model schema.\n     *\n     * @return SchemaInterface\n     */\n    public function getSchema()\n    {\n        return $this->schema;\n    }\n\n    /**\n     * Determine if the given offset exists.\n     *\n     * @param string $offset\n     *\n     * @return bool\n     */\n    public function offsetExists($offset)\n    {\n        return !is_null($this->getAttribute($offset));\n    }\n\n    /**\n     * Get the value for a given offset.\n     *\n     * @param string $offset\n     *\n     * @return mixed\n     */\n    public function offsetGet($offset)\n    {\n        return $this->getAttribute($offset);\n    }\n\n    /**\n     * Set the value at the given offset.\n     *\n     * @param string $offset\n     * @param mixed  $value\n     *\n     * @return void\n     */\n    public function offsetSet($offset, $value)\n    {\n        $this->setAttribute($offset, $value);\n    }\n\n    /**\n     * Unset the value at the given offset.\n     *\n     * @param string $offset\n     *\n     * @return void\n     */\n    public function offsetUnset($offset)\n    {\n        unset($this->attributes[$offset]);\n    }\n\n    /**\n     * Determine if an attribute exists on the model.\n     *\n     * @param string $key\n     *\n     * @return bool\n     */\n    public function __isset($key)\n    {\n        return $this->offsetExists($key);\n    }\n\n    /**\n     * Convert the object into something JSON serializable.\n     *\n     * @return array\n     */\n    public function jsonSerialize()\n    {\n        $attributes = $this->getAttributes();\n\n        array_walk_recursive($attributes, function (&$val) {\n            if (MbString::isLoaded()) {\n                // If we're able to detect the attribute\n                // encoding, we'll encode only the\n                // attributes that need to be.\n                if (!MbString::isUtf8($val)) {\n                    $val = utf8_encode($val);\n                }\n            } else {\n                // If the mbstring extension is not loaded, we'll\n                // encode all attributes to make sure\n                // they are encoded properly.\n                $val = utf8_encode($val);\n            }\n        });\n\n        // We'll replace the binary GUID and SID with\n        // their string equivalents for convenience.\n        return array_replace($attributes, [\n            $this->schema->objectGuid() => $this->getConvertedGuid(),\n            $this->schema->objectSid()  => $this->getConvertedSid(),\n        ]);\n    }\n\n    /**\n     * Reload a fresh model instance from the directory.\n     *\n     * @return static|null\n     */\n    public function fresh()\n    {\n        $model = $this->query->newInstance()->findByDn($this->getDn());\n\n        return $model instanceof self ? $model : null;\n    }\n\n    /**\n     * Synchronizes the current models attributes with the directory values.\n     *\n     * @return bool\n     */\n    public function syncRaw()\n    {\n        if ($model = $this->fresh()) {\n            $this->setRawAttributes($model->getAttributes());\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns the models batch modifications to be processed.\n     *\n     * @return array\n     */\n    public function getModifications()\n    {\n        $this->buildModificationsFromDirty();\n\n        return $this->modifications;\n    }\n\n    /**\n     * Sets the models modifications array.\n     *\n     * @param array $modifications\n     *\n     * @return $this\n     */\n    public function setModifications(array $modifications = [])\n    {\n        $this->modifications = $modifications;\n\n        return $this;\n    }\n\n    /**\n     * Adds a batch modification to the models modifications array.\n     *\n     * @param array|BatchModification $mod\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return $this\n     */\n    public function addModification($mod = [])\n    {\n        if ($mod instanceof BatchModification) {\n            $mod = $mod->get();\n        }\n\n        if ($this->isValidModification($mod)) {\n            $this->modifications[] = $mod;\n\n            return $this;\n        }\n\n        throw new InvalidArgumentException(\n            \"The batch modification array does not include the mandatory 'attrib' or 'modtype' keys.\"\n        );\n    }\n\n    /**\n     * Returns the model's distinguished name string.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getDistinguishedName()\n    {\n        return $this->getFirstAttribute($this->schema->distinguishedName());\n    }\n\n    /**\n     * Sets the model's distinguished name attribute.\n     *\n     * @param string|DistinguishedName $dn\n     *\n     * @return $this\n     */\n    public function setDistinguishedName($dn)\n    {\n        $this->setFirstAttribute($this->schema->distinguishedName(), (string) $dn);\n\n        return $this;\n    }\n\n    /**\n     * Returns the model's distinguished name string.\n     *\n     * (Alias for getDistinguishedName())\n     *\n     * @link https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getDn()\n    {\n        return $this->getDistinguishedName();\n    }\n\n    /**\n     * Returns a DistinguishedName object for modifying the current models DN.\n     *\n     * @return DistinguishedName\n     */\n    public function getDnBuilder()\n    {\n        // If we currently don't have a distinguished name, we'll set\n        // it to our base, otherwise we'll use our query's base DN.\n        $dn = $this->getDistinguishedName() ?: $this->query->getDn();\n\n        return $this->getNewDnBuilder($dn);\n    }\n\n    /**\n     * Returns the models distinguished name components.\n     *\n     * @param bool $removeAttributePrefixes\n     *\n     * @return array\n     */\n    public function getDnComponents($removeAttributePrefixes = true)\n    {\n        if ($components = Utilities::explodeDn($this->getDn(), $removeAttributePrefixes)) {\n            unset($components['count']);\n\n            return $components;\n        }\n\n        return [];\n    }\n\n    /**\n     * Returns the distinguished name that the model is a leaf of.\n     *\n     * @return string\n     */\n    public function getDnRoot()\n    {\n        $components = $this->getDnComponents(false);\n\n        // Shift off the beginning of the array;\n        // This contains the models RDN.\n        array_shift($components);\n\n        return implode(',', $components);\n    }\n\n    /**\n     * Returns a new DistinguishedName object for building onto.\n     *\n     * @param string $baseDn\n     *\n     * @return DistinguishedName\n     */\n    public function getNewDnBuilder($baseDn = '')\n    {\n        return new DistinguishedName($baseDn);\n    }\n\n    /**\n     *  Sets the model's distinguished name attribute.\n     *\n     * (Alias for setDistinguishedName())\n     *\n     * @param string $dn\n     *\n     * @return $this\n     */\n    public function setDn($dn)\n    {\n        return $this->setDistinguishedName($dn);\n    }\n\n    /**\n     * Returns the model's hex object SID.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679024(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getObjectSid()\n    {\n        return $this->getFirstAttribute($this->schema->objectSid());\n    }\n\n    /**\n     * Returns the model's binary object GUID.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679021(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getObjectGuid()\n    {\n        return $this->getFirstAttribute($this->schema->objectGuid());\n    }\n\n    /**\n     * Returns the model's GUID.\n     *\n     * @return string|null\n     */\n    public function getConvertedGuid()\n    {\n        try {\n            return (string) new Guid($this->getObjectGuid());\n        } catch (InvalidArgumentException $e) {\n            return;\n        }\n    }\n\n    /**\n     * Returns the model's SID.\n     *\n     * @return string|null\n     */\n    public function getConvertedSid()\n    {\n        try {\n            return (string) new Sid($this->getObjectSid());\n        } catch (InvalidArgumentException $e) {\n            return;\n        }\n    }\n\n    /**\n     * Returns the model's common name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675449(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getCommonName()\n    {\n        return $this->getFirstAttribute($this->schema->commonName());\n    }\n\n    /**\n     * Sets the model's common name.\n     *\n     * @param string $name\n     *\n     * @return $this\n     */\n    public function setCommonName($name)\n    {\n        return $this->setFirstAttribute($this->schema->commonName(), $name);\n    }\n\n    /**\n     * Returns the model's name. An LDAP alias for the CN attribute.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675449(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->getFirstAttribute($this->schema->name());\n    }\n\n    /**\n     * Sets the model's name.\n     *\n     * @param string $name\n     *\n     * @return Model\n     */\n    public function setName($name)\n    {\n        return $this->setFirstAttribute($this->schema->name(), $name);\n    }\n\n    /**\n     * Returns the model's display name.\n     *\n     * @return string\n     */\n    public function getDisplayName()\n    {\n        return $this->getFirstAttribute($this->schema->displayName());\n    }\n\n    /**\n     * Sets the model's display name.\n     *\n     * @param string $displayName\n     *\n     * @return $this\n     */\n    public function setDisplayName($displayName)\n    {\n        return $this->setFirstAttribute($this->schema->displayName(), $displayName);\n    }\n\n    /**\n     * Returns the model's samaccountname.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679635(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getAccountName()\n    {\n        return $this->getFirstAttribute($this->schema->accountName());\n    }\n\n    /**\n     * Sets the model's samaccountname.\n     *\n     * @param string $accountName\n     *\n     * @return Model\n     */\n    public function setAccountName($accountName)\n    {\n        return $this->setFirstAttribute($this->schema->accountName(), $accountName);\n    }\n\n    /**\n     * Returns the model's userPrincipalName.\n     *\n     * @link https://docs.microsoft.com/en-us/windows/win32/adschema/a-userprincipalname\n     *\n     * @return string\n     */\n    public function getUserPrincipalName()\n    {\n        return $this->getFirstAttribute($this->schema->userPrincipalName());\n    }\n\n    /**\n     * Sets the model's userPrincipalName.\n     *\n     * @param string $upn\n     *\n     * @return Model\n     */\n    public function setUserPrincipalName($upn)\n    {\n        return $this->setFirstAttribute($this->schema->userPrincipalName(), $upn);\n    }\n\n    /**\n     * Returns the model's samaccounttype.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679637(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getAccountType()\n    {\n        return $this->getFirstAttribute($this->schema->accountType());\n    }\n\n    /**\n     * Returns the model's `whenCreated` time.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680924(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getCreatedAt()\n    {\n        return $this->getFirstAttribute($this->schema->createdAt());\n    }\n\n    /**\n     * Returns the created at time in a mysql formatted date.\n     *\n     * @return string\n     */\n    public function getCreatedAtDate()\n    {\n        return (new DateTime())->setTimestamp($this->getCreatedAtTimestamp())->format($this->dateFormat);\n    }\n\n    /**\n     * Returns the created at time in a unix timestamp format.\n     *\n     * @return float\n     */\n    public function getCreatedAtTimestamp()\n    {\n        return DateTime::createFromFormat($this->timestampFormat, $this->getCreatedAt())->getTimestamp();\n    }\n\n    /**\n     * Returns the model's `whenChanged` time.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680921(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getUpdatedAt()\n    {\n        return $this->getFirstAttribute($this->schema->updatedAt());\n    }\n\n    /**\n     * Returns the updated at time in a mysql formatted date.\n     *\n     * @return string\n     */\n    public function getUpdatedAtDate()\n    {\n        return (new DateTime())->setTimestamp($this->getUpdatedAtTimestamp())->format($this->dateFormat);\n    }\n\n    /**\n     * Returns the updated at time in a unix timestamp format.\n     *\n     * @return float\n     */\n    public function getUpdatedAtTimestamp()\n    {\n        return DateTime::createFromFormat($this->timestampFormat, $this->getUpdatedAt())->getTimestamp();\n    }\n\n    /**\n     * Returns the Container of the current Model.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679012(v=vs.85).aspx\n     *\n     * @return Container|Entry|bool\n     */\n    public function getObjectClass()\n    {\n        return $this->query->findByDn($this->getObjectCategoryDn());\n    }\n\n    /**\n     * Returns the CN of the model's object category.\n     *\n     * @return null|string\n     */\n    public function getObjectCategory()\n    {\n        $category = $this->getObjectCategoryArray();\n\n        if (is_array($category) && array_key_exists(0, $category)) {\n            return $category[0];\n        }\n    }\n\n    /**\n     * Returns the model's object category DN in an exploded array.\n     *\n     * @return array|false\n     */\n    public function getObjectCategoryArray()\n    {\n        return Utilities::explodeDn($this->getObjectCategoryDn());\n    }\n\n    /**\n     * Returns the model's object category DN string.\n     *\n     * @return null|string\n     */\n    public function getObjectCategoryDn()\n    {\n        return $this->getFirstAttribute($this->schema->objectCategory());\n    }\n\n    /**\n     * Returns the model's primary group ID.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679375(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrimaryGroupId()\n    {\n        return $this->getFirstAttribute($this->schema->primaryGroupId());\n    }\n\n    /**\n     * Returns the model's instance type.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676204(v=vs.85).aspx\n     *\n     * @return int\n     */\n    public function getInstanceType()\n    {\n        return $this->getFirstAttribute($this->schema->instanceType());\n    }\n\n    /**\n     * Returns the distinguished name of the user who is assigned to manage this object.\n     *\n     * @return string|null\n     */\n    public function getManagedBy()\n    {\n        return $this->getFirstAttribute($this->schema->managedBy());\n    }\n\n    /**\n     * Returns the user model of the user who is assigned to manage this object.\n     *\n     * Returns false otherwise.\n     *\n     * @return User|bool\n     */\n    public function getManagedByUser()\n    {\n        if ($dn = $this->getManagedBy()) {\n            return $this->query->newInstance()->findByDn($dn);\n        }\n\n        return false;\n    }\n\n    /**\n     * Sets the user who is assigned to managed this object.\n     *\n     * @param Model|string $dn\n     *\n     * @return $this\n     */\n    public function setManagedBy($dn)\n    {\n        if ($dn instanceof self) {\n            $dn = $dn->getDn();\n        }\n\n        return $this->setFirstAttribute($this->schema->managedBy(), $dn);\n    }\n\n    /**\n     * Returns the model's max password age.\n     *\n     * @return string\n     */\n    public function getMaxPasswordAge()\n    {\n        return $this->getFirstAttribute($this->schema->maxPasswordAge());\n    }\n\n    /**\n     * Returns the model's max password age in days.\n     *\n     * @return int\n     */\n    public function getMaxPasswordAgeDays()\n    {\n        $age = $this->getMaxPasswordAge();\n\n        return (int) (abs($age) / 10000000 / 60 / 60 / 24);\n    }\n\n    /**\n     * Determine if the current model is located inside the given OU.\n     *\n     * If a model instance is given, the strict parameter is ignored.\n     *\n     * @param Model|string $ou     The organizational unit to check.\n     * @param bool         $strict Whether the check is case-sensitive.\n     *\n     * @return bool\n     */\n    public function inOu($ou, $strict = false)\n    {\n        if ($ou instanceof self) {\n            // If we've been given an OU model, we can\n            // just check if the OU's DN is inside\n            // the current models DN.\n            return (bool) strpos($this->getDn(), $ou->getDn());\n        }\n\n        $suffix = $strict ? '' : 'i';\n\n        return (bool) preg_grep(\"/{$ou}/{$suffix}\", $this->getDnBuilder()->getComponents('ou'));\n    }\n\n    /**\n     * Returns true / false if the current model is writable\n     * by checking its instance type integer.\n     *\n     * @return bool\n     */\n    public function isWritable()\n    {\n        return (int) $this->getInstanceType() === 4;\n    }\n\n    /**\n     * Saves the changes to LDAP and returns the results.\n     *\n     * @param array $attributes The attributes to update or create for the current entry.\n     *\n     * @return bool\n     */\n    public function save(array $attributes = [])\n    {\n        $this->fireModelEvent(new Events\\Saving($this));\n\n        $saved = $this->exists ? $this->update($attributes) : $this->create($attributes);\n\n        if ($saved) {\n            $this->fireModelEvent(new Events\\Saved($this));\n        }\n\n        return $saved;\n    }\n\n    /**\n     * Updates the model.\n     *\n     * @param array $attributes The attributes to update for the current entry.\n     *\n     * @return bool\n     */\n    public function update(array $attributes = [])\n    {\n        $this->fill($attributes);\n\n        $modifications = $this->getModifications();\n\n        if (count($modifications) > 0) {\n            $this->fireModelEvent(new Events\\Updating($this));\n\n            // Push the update.\n            if ($this->query->getConnection()->modifyBatch($this->getDn(), $modifications)) {\n                // Re-sync attributes.\n                $this->syncRaw();\n\n                $this->fireModelEvent(new Events\\Updated($this));\n\n                // Re-set the models modifications.\n                $this->modifications = [];\n\n                return true;\n            }\n\n            // Modification failed, return false.\n            return false;\n        }\n\n        // We need to return true here because modify batch will\n        // return false if no modifications are made\n        // but this may not always be the case.\n        return true;\n    }\n\n    /**\n     * Creates the entry in LDAP.\n     *\n     * @param array $attributes The attributes for the new entry.\n     *\n     * @throws UnexpectedValueException\n     *\n     * @return bool\n     */\n    public function create(array $attributes = [])\n    {\n        $this->fill($attributes);\n\n        if (empty($this->getDn())) {\n            // If the model doesn't currently have a distinguished\n            // name set, we'll create one automatically using\n            // the current query builders base DN.\n            $dn = $this->getCreatableDn();\n\n            // If the dn we receive is the same as our queries base DN, we need\n            // to throw an exception. The LDAP object must have a valid RDN.\n            if ($dn->get() == $this->query->getDn()) {\n                throw new UnexpectedValueException(\"An LDAP object must have a valid RDN to be created. '$dn' given.\");\n            }\n\n            $this->setDn($dn);\n        }\n\n        $this->fireModelEvent(new Events\\Creating($this));\n\n        // Create the entry.\n        $created = $this->query->getConnection()->add($this->getDn(), $this->getCreatableAttributes());\n\n        if ($created) {\n            // If the entry was created we'll re-sync\n            // the models attributes from the server.\n            $this->syncRaw();\n\n            $this->fireModelEvent(new Events\\Created($this));\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Creates an attribute on the current model.\n     *\n     * @param string $attribute The attribute to create\n     * @param mixed  $value     The value of the new attribute\n     * @param bool   $sync      Whether to re-sync all attributes\n     *\n     * @return bool\n     */\n    public function createAttribute($attribute, $value, $sync = true)\n    {\n        if (\n            $this->exists &&\n            $this->query->getConnection()->modAdd($this->getDn(), [$attribute => $value])\n        ) {\n            if ($sync) {\n                $this->syncRaw();\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Updates the specified attribute with the specified value.\n     *\n     * @param string $attribute The attribute to modify\n     * @param mixed  $value     The new value for the attribute\n     * @param bool   $sync      Whether to re-sync all attributes\n     *\n     * @return bool\n     */\n    public function updateAttribute($attribute, $value, $sync = true)\n    {\n        if (\n            $this->exists &&\n            $this->query->getConnection()->modReplace($this->getDn(), [$attribute => $value])\n        ) {\n            if ($sync) {\n                $this->syncRaw();\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Deletes an attribute on the current entry.\n     *\n     * @param string|array $attributes The attribute(s) to delete\n     * @param bool         $sync       Whether to re-sync all attributes\n     *\n     * Delete specific values in attributes:\n     *\n     *     [\"memberuid\" => \"username\"]\n     *\n     * Delete an entire attribute:\n     *\n     *     [\"memberuid\" => []]\n     *\n     * @return bool\n     */\n    public function deleteAttribute($attributes, $sync = true)\n    {\n        // If we've been given a string, we'll assume we're removing a\n        // single attribute. Otherwise, we'll assume it's\n        // an array of attributes to remove.\n        $attributes = is_string($attributes) ? [$attributes => []] : $attributes;\n\n        if (\n            $this->exists &&\n            $this->query->getConnection()->modDelete($this->getDn(), $attributes)\n        ) {\n            if ($sync) {\n                $this->syncRaw();\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Deletes the current entry.\n     *\n     * Throws a ModelNotFoundException if the current model does\n     * not exist or does not contain a distinguished name.\n     *\n     * @param bool $recursive Whether to recursively delete leaf nodes (models that are children).\n     *\n     * @throws ModelDoesNotExistException\n     *\n     * @return bool\n     */\n    public function delete($recursive = false)\n    {\n        $dn = $this->getDn();\n\n        if ($this->exists === false || empty($dn)) {\n            // Make sure the record exists before we can delete it.\n            // Otherwise, we'll throw an exception.\n            throw (new ModelDoesNotExistException())->setModel(get_class($this));\n        }\n\n        $this->fireModelEvent(new Events\\Deleting($this));\n\n        if ($recursive) {\n            // If recursive is requested, we'll retrieve all direct leaf nodes\n            // by executing a 'listing' and delete each resulting model.\n            $this->newQuery()->listing()->in($this->getDn())->get()->each(function (self $model) use ($recursive) {\n                $model->delete($recursive);\n            });\n        }\n\n        if ($this->query->getConnection()->delete($dn)) {\n            // If the deletion was successful, we'll mark the model\n            // as non-existing and fire the deleted event.\n            $this->exists = false;\n\n            $this->fireModelEvent(new Events\\Deleted($this));\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Moves the current model into the given new parent.\n     *\n     * For example: $user->move($ou);\n     *\n     * @param Model|string $newParentDn  The new parent of the current model.\n     * @param bool         $deleteOldRdn Whether to delete the old models relative distinguished name once renamed / moved.\n     *\n     * @return bool\n     */\n    public function move($newParentDn, $deleteOldRdn = true)\n    {\n        // First we'll explode the current models distinguished name and keep their attributes prefixes.\n        $parts = Utilities::explodeDn($this->getDn(), $removeAttrPrefixes = false);\n\n        // If the current model has an empty RDN, we can't move it.\n        if ((int) Arr::first($parts) === 0) {\n            throw new UnexpectedValueException('Current model does not contain an RDN to move.');\n        }\n\n        // Looks like we have a DN. We'll retrieve the leftmost RDN (the identifier).\n        $rdn = Arr::get($parts, 0);\n\n        return $this->rename($rdn, $newParentDn, $deleteOldRdn);\n    }\n\n    /**\n     * Renames the current model to a new RDN and new parent.\n     *\n     * @param string            $rdn          The models new relative distinguished name. Example: \"cn=JohnDoe\"\n     * @param Model|string|null $newParentDn  The models new parent distinguished name (if moving). Leave this null if you are only renaming. Example: \"ou=MovedUsers,dc=acme,dc=org\"\n     * @param bool|true         $deleteOldRdn Whether to delete the old models relative distinguished name once renamed / moved.\n     *\n     * @return bool\n     */\n    public function rename($rdn, $newParentDn = null, $deleteOldRdn = true)\n    {\n        if ($newParentDn instanceof self) {\n            $newParentDn = $newParentDn->getDn();\n        }\n\n        $moved = $this->query->getConnection()->rename($this->getDn(), $rdn, $newParentDn, $deleteOldRdn);\n\n        if ($moved) {\n            // If the model was successfully moved, we'll set its\n            // new DN so we can sync it's attributes properly.\n            $this->setDn(\"{$rdn},{$newParentDn}\");\n\n            $this->syncRaw();\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Constructs a new distinguished name that is creatable in the directory.\n     *\n     * @return DistinguishedName|string\n     */\n    protected function getCreatableDn()\n    {\n        return $this->getDnBuilder()->addCn($this->getCommonName());\n    }\n\n    /**\n     * Returns the models creatable attributes.\n     *\n     * @return mixed\n     */\n    protected function getCreatableAttributes()\n    {\n        return Arr::except($this->getAttributes(), [$this->schema->distinguishedName()]);\n    }\n\n    /**\n     * Determines if the given modification is valid.\n     *\n     * @param mixed $mod\n     *\n     * @return bool\n     */\n    protected function isValidModification($mod)\n    {\n        return is_array($mod) &&\n            array_key_exists(BatchModification::KEY_MODTYPE, $mod) &&\n            array_key_exists(BatchModification::KEY_ATTRIB, $mod);\n    }\n\n    /**\n     * Builds the models modifications from its dirty attributes.\n     *\n     * @return array\n     */\n    protected function buildModificationsFromDirty()\n    {\n        foreach ($this->getDirty() as $attribute => $values) {\n            // Make sure values is always an array.\n            $values = (is_array($values) ? $values : [$values]);\n\n            // Create a new modification.\n            $modification = $this->newBatchModification($attribute, null, $values);\n\n            if (array_key_exists($attribute, $this->original)) {\n                // If the attribute we're modifying has an original value, we'll give the\n                // BatchModification object its values to automatically determine\n                // which type of LDAP operation we need to perform.\n                $modification->setOriginal($this->original[$attribute]);\n            }\n\n            // Build the modification from its\n            // possible original values.\n            $modification->build();\n\n            if ($modification->isValid()) {\n                // Finally, we'll add the modification to the model.\n                $this->addModification($modification);\n            }\n        }\n\n        return $this->modifications;\n    }\n\n    /**\n     * Validates that the current LDAP connection is secure.\n     *\n     * @throws ConnectionException\n     *\n     * @return void\n     */\n    protected function validateSecureConnection()\n    {\n        if (!$this->query->getConnection()->canChangePasswords()) {\n            throw new ConnectionException(\n                'You must be connected to your LDAP server with TLS or SSL to perform this operation.'\n            );\n        }\n    }\n\n    /**\n     * Converts the inserted string boolean to a PHP boolean.\n     *\n     * @param string $bool\n     *\n     * @return null|bool\n     */\n    protected function convertStringToBool($bool)\n    {\n        $bool = strtoupper($bool);\n\n        if ($bool === strtoupper($this->schema->false())) {\n            return false;\n        } elseif ($bool === strtoupper($this->schema->true())) {\n            return true;\n        } else {\n            return;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/ModelDoesNotExistException.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse Adldap\\AdldapException;\n\n/**\n * Class ModelDoesNotExistException.\n *\n * Thrown when a model being saved / updated does not actually exist.\n */\nclass ModelDoesNotExistException extends AdldapException\n{\n    /**\n     * The class name of the model that does not exist.\n     *\n     * @var string\n     */\n    protected $model;\n\n    /**\n     * Sets the model that does not exist.\n     *\n     * @param string $model\n     *\n     * @return ModelDoesNotExistException\n     */\n    public function setModel($model)\n    {\n        $this->model = $model;\n\n        $this->message = \"Model [{$model}] does not exist.\";\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/ModelNotFoundException.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse Adldap\\AdldapException;\n\n/**\n * Class ModelNotFoundException.\n *\n * Thrown when an LDAP record is not found.\n */\nclass ModelNotFoundException extends AdldapException\n{\n    /**\n     * The query filter that was used.\n     *\n     * @var string\n     */\n    protected $query;\n\n    /**\n     * The base DN of the query that was used.\n     *\n     * @var string\n     */\n    protected $baseDn;\n\n    /**\n     * Sets the query that was used.\n     *\n     * @param string $query\n     * @param string $baseDn\n     *\n     * @return ModelNotFoundException\n     */\n    public function setQuery($query, $baseDn)\n    {\n        $this->query = $query;\n        $this->baseDn = $baseDn;\n\n        $this->message = \"No LDAP query results for filter: [{$query}] in: [{$baseDn}]\";\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Organization.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class Organization.\n *\n * Represents an LDAP organization.\n */\nclass Organization extends Entry\n{\n    use Concerns\\HasDescription;\n\n    /**\n     * Retrieves the organization units OU attribute.\n     *\n     * @return string\n     */\n    public function getOrganization()\n    {\n        return $this->getFirstAttribute($this->schema->organizationName());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    protected function getCreatableDn()\n    {\n        return $this->getDnBuilder()->addO($this->getOrganization());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/OrganizationalUnit.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class OrganizationalUnit.\n *\n * Represents an LDAP organizational unit.\n */\nclass OrganizationalUnit extends Entry\n{\n    use Concerns\\HasDescription;\n\n    /**\n     * Retrieves the organization units OU attribute.\n     *\n     * @return string\n     */\n    public function getOu()\n    {\n        return $this->getFirstAttribute($this->schema->organizationalUnitShort());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    protected function getCreatableDn()\n    {\n        return $this->getDnBuilder()->addOU($this->getOu());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/Printer.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\n/**\n * Class Printer.\n *\n * Represents an LDAP printer.\n */\nclass Printer extends Entry\n{\n    /**\n     * Returns the printers name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679385(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrinterName()\n    {\n        return $this->getFirstAttribute($this->schema->printerName());\n    }\n\n    /**\n     * Returns the printers share name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679408(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrinterShareName()\n    {\n        return $this->getFirstAttribute($this->schema->printerShareName());\n    }\n\n    /**\n     * Returns the printers memory.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679396(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getMemory()\n    {\n        return $this->getFirstAttribute($this->schema->printerMemory());\n    }\n\n    /**\n     * Returns the printers URL.\n     *\n     * @return string\n     */\n    public function getUrl()\n    {\n        return $this->getFirstAttribute($this->schema->url());\n    }\n\n    /**\n     * Returns the printers location.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676839(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getLocation()\n    {\n        return $this->getFirstAttribute($this->schema->location());\n    }\n\n    /**\n     * Returns the server name that the\n     * current printer is connected to.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679772(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getServerName()\n    {\n        return $this->getFirstAttribute($this->schema->serverName());\n    }\n\n    /**\n     * Returns true / false if the printer can print in color.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679382(v=vs.85).aspx\n     *\n     * @return null|bool\n     */\n    public function getColorSupported()\n    {\n        return $this->convertStringToBool(\n            $this->getFirstAttribute(\n                $this->schema->printerColorSupported()\n            )\n        );\n    }\n\n    /**\n     * Returns true / false if the printer supports duplex printing.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679383(v=vs.85).aspx\n     *\n     * @return null|bool\n     */\n    public function getDuplexSupported()\n    {\n        return $this->convertStringToBool(\n            $this->getFirstAttribute(\n                $this->schema->printerDuplexSupported()\n            )\n        );\n    }\n\n    /**\n     * Returns an array of printer paper types that the printer supports.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679395(v=vs.85).aspx\n     *\n     * @return array\n     */\n    public function getMediaSupported()\n    {\n        return $this->getAttribute($this->schema->printerMediaSupported());\n    }\n\n    /**\n     * Returns true / false if the printer supports stapling.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679410(v=vs.85).aspx\n     *\n     * @return null|bool\n     */\n    public function getStaplingSupported()\n    {\n        return $this->convertStringToBool(\n            $this->getFirstAttribute(\n                $this->schema->printerStaplingSupported()\n            )\n        );\n    }\n\n    /**\n     * Returns an array of the printers bin names.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679380(v=vs.85).aspx\n     *\n     * @return array\n     */\n    public function getPrintBinNames()\n    {\n        return $this->getAttribute($this->schema->printerBinNames());\n    }\n\n    /**\n     * Returns the printers maximum resolution.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679391(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrintMaxResolution()\n    {\n        return $this->getFirstAttribute($this->schema->printerMaxResolutionSupported());\n    }\n\n    /**\n     * Returns the printers orientations supported.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679402(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrintOrientations()\n    {\n        return $this->getFirstAttribute($this->schema->printerOrientationSupported());\n    }\n\n    /**\n     * Returns the driver name of the printer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675652(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getDriverName()\n    {\n        return $this->getFirstAttribute($this->schema->driverName());\n    }\n\n    /**\n     * Returns the printer drivers version number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675653(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getDriverVersion()\n    {\n        return $this->getFirstAttribute($this->schema->driverVersion());\n    }\n\n    /**\n     * Returns the priority number of the printer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679413(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPriority()\n    {\n        return $this->getFirstAttribute($this->schema->priority());\n    }\n\n    /**\n     * Returns the printers start time.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679411(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrintStartTime()\n    {\n        return $this->getFirstAttribute($this->schema->printerStartTime());\n    }\n\n    /**\n     * Returns the printers end time.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679384(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrintEndTime()\n    {\n        return $this->getFirstAttribute($this->schema->printerEndTime());\n    }\n\n    /**\n     * Returns the port name of printer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679131(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPortName()\n    {\n        return $this->getFirstAttribute($this->schema->portName());\n    }\n\n    /**\n     * Returns the printers version number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680897(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getVersionNumber()\n    {\n        return $this->getFirstAttribute($this->schema->versionNumber());\n    }\n\n    /**\n     * Returns the print rate.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679405(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrintRate()\n    {\n        return $this->getFirstAttribute($this->schema->printerPrintRate());\n    }\n\n    /**\n     * Returns the print rate unit.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679406(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getPrintRateUnit()\n    {\n        return $this->getFirstAttribute($this->schema->printerPrintRateUnit());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/RootDse.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse DateTime;\n\n/**\n * Class RootDse.\n *\n * Represents the LDAP connections Root DSE record.\n */\nclass RootDse extends Model\n{\n    /**\n     * Returns the hosts current time in unix timestamp format.\n     *\n     * @return int\n     */\n    public function getCurrentTime()\n    {\n        $time = $this->getFirstAttribute($this->schema->currentTime());\n\n        return DateTime::createFromFormat($this->timestampFormat, $time)->getTimestamp();\n    }\n\n    /**\n     * Returns the hosts current time in the models date format.\n     *\n     * @return string\n     */\n    public function getCurrentTimeDate()\n    {\n        return (new DateTime())->setTimestamp($this->getCurrentTime())->format($this->dateFormat);\n    }\n\n    /**\n     * Returns the hosts configuration naming context.\n     *\n     * @return string\n     */\n    public function getConfigurationNamingContext()\n    {\n        return $this->getFirstAttribute($this->schema->configurationNamingContext());\n    }\n\n    /**\n     * Returns the hosts schema naming context.\n     *\n     * @return string\n     */\n    public function getSchemaNamingContext()\n    {\n        return $this->getFirstAttribute($this->schema->schemaNamingContext());\n    }\n\n    /**\n     * Returns the hosts DNS name.\n     *\n     * @return string\n     */\n    public function getDnsHostName()\n    {\n        return $this->getFirstAttribute($this->schema->dnsHostName());\n    }\n\n    /**\n     * Returns the current hosts server name.\n     *\n     * @return string\n     */\n    public function getServerName()\n    {\n        return $this->getFirstAttribute($this->schema->serverName());\n    }\n\n    /**\n     * Returns the DN of the root domain NC for this DC's forest.\n     *\n     * @return mixed\n     */\n    public function getRootDomainNamingContext()\n    {\n        return $this->getFirstAttribute($this->schema->rootDomainNamingContext());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/User.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse DateTime;\nuse Adldap\\Utilities;\nuse Adldap\\AdldapException;\nuse Adldap\\Schemas\\ActiveDirectory;\nuse Adldap\\Models\\Attributes\\AccountControl;\nuse Adldap\\Models\\Attributes\\TSPropertyArray;\nuse Illuminate\\Contracts\\Auth\\Authenticatable;\n\n/**\n * Class User.\n *\n * Represents an LDAP user.\n */\nclass User extends Entry implements Authenticatable\n{\n    use Concerns\\HasUserProperties;\n    use Concerns\\HasDescription;\n    use Concerns\\HasMemberOf;\n    use Concerns\\HasLastLogonAndLogOff;\n    use Concerns\\HasUserAccountControl;\n\n    /** @var callable|null */\n    private static $passwordStrategy;\n\n    /**\n     * Password will be processed using given callback before saving.\n     *\n     * @param callable $strategy\n     */\n    public static function usePasswordStrategy(callable $strategy)\n    {\n        static::$passwordStrategy = $strategy;\n    }\n\n    /**\n     * Will return user set password strategy or default one.\n     *\n     * @return callable\n     */\n    public static function getPasswordStrategy(): callable\n    {\n        return static::$passwordStrategy ?? function ($password) {\n            return Utilities::encodePassword($password);\n        };\n    }\n\n    /**\n     * Get the name of the unique identifier for the user.\n     *\n     * @return string\n     */\n    public function getAuthIdentifierName()\n    {\n        return $this->schema->objectGuid();\n    }\n\n    /**\n     * Get the unique identifier for the user.\n     *\n     * @return mixed\n     */\n    public function getAuthIdentifier()\n    {\n        return $this->getConvertedGuid();\n    }\n\n    /**\n     * Get the password for the user.\n     *\n     * @return string\n     */\n    public function getAuthPassword()\n    {\n    }\n\n    /**\n     * Get the token value for the \"remember me\" session.\n     *\n     * @return string\n     */\n    public function getRememberToken()\n    {\n    }\n\n    /**\n     * Set the token value for the \"remember me\" session.\n     *\n     * @param string $value\n     *\n     * @return void\n     */\n    public function setRememberToken($value)\n    {\n    }\n\n    /**\n     * Get the column name for the \"remember me\" token.\n     *\n     * @return string\n     */\n    public function getRememberTokenName()\n    {\n    }\n\n    /**\n     * Returns the department number.\n     *\n     * @return string\n     */\n    public function getDepartmentNumber()\n    {\n        return $this->getFirstAttribute($this->schema->departmentNumber());\n    }\n\n    /**\n     * Sets the department number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setDepartmentNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->departmentNumber(), $number);\n    }\n\n    /**\n     * Returns the users info.\n     *\n     * @return mixed\n     */\n    public function getInfo()\n    {\n        return $this->getFirstAttribute($this->schema->info());\n    }\n\n    /**\n     * Sets the users info.\n     *\n     * @param string $info\n     *\n     * @return $this\n     */\n    public function setInfo($info)\n    {\n        return $this->setFirstAttribute($this->schema->info(), $info);\n    }\n\n    /**\n     * Returns the users physical delivery office name.\n     *\n     * @return string\n     */\n    public function getPhysicalDeliveryOfficeName()\n    {\n        return $this->getFirstAttribute($this->schema->physicalDeliveryOfficeName());\n    }\n\n    /**\n     * Sets the users physical delivery office name.\n     *\n     * @param string $deliveryOffice\n     *\n     * @return $this\n     */\n    public function setPhysicalDeliveryOfficeName($deliveryOffice)\n    {\n        return $this->setFirstAttribute($this->schema->physicalDeliveryOfficeName(), $deliveryOffice);\n    }\n\n    /**\n     * Returns the users locale.\n     *\n     * @return string\n     */\n    public function getLocale()\n    {\n        return $this->getFirstAttribute($this->schema->locale());\n    }\n\n    /**\n     * Sets the users locale.\n     *\n     * @param string $locale\n     *\n     * @return $this\n     */\n    public function setLocale($locale)\n    {\n        return $this->setFirstAttribute($this->schema->locale(), $locale);\n    }\n\n    /**\n     * Returns the users company.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675457(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getCompany()\n    {\n        return $this->getFirstAttribute($this->schema->company());\n    }\n\n    /**\n     * Sets the users company.\n     *\n     * @param string $company\n     *\n     * @return $this\n     */\n    public function setCompany($company)\n    {\n        return $this->setFirstAttribute($this->schema->company(), $company);\n    }\n\n    /**\n     * Returns the users mailbox store DN.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/aa487565(v=exchg.65).aspx\n     *\n     * @return string\n     */\n    public function getHomeMdb()\n    {\n        return $this->getFirstAttribute($this->schema->homeMdb());\n    }\n\n    /**\n     * Sets the users home drive.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676191(v=vs.85).aspx\n     *\n     * @return $this\n     */\n    public function setHomeDrive($drive)\n    {\n        return $this->setAttribute($this->schema->homeDrive(), $drive);\n    }\n\n    /**\n     * Specifies the drive letter to which to map the UNC path specified by homeDirectory.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676191(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getHomeDrive()\n    {\n        return $this->getFirstAttribute($this->schema->homeDrive());\n    }\n\n    /**\n     * Sets the users home directory.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676190(v=vs.85).aspx\n     *\n     * @param string $directory\n     *\n     * @return $this\n     */\n    public function setHomeDirectory($directory)\n    {\n        return $this->setAttribute($this->schema->homeDirectory(), $directory);\n    }\n\n    /**\n     * The home directory for the account.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676190(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function getHomeDirectory()\n    {\n        return $this->getFirstAttribute($this->schema->homeDirectory());\n    }\n\n    /**\n     * The user's main home phone number.\n     *\n     * @link https://docs.microsoft.com/en-us/windows/desktop/ADSchema/a-homephone\n     *\n     * @return string|null\n     */\n    public function getHomePhone()\n    {\n        return $this->getFirstAttribute($this->schema->homePhone());\n    }\n\n    /**\n     * Returns the users principal name.\n     *\n     * This is usually their email address.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680857(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getUserPrincipalName()\n    {\n        return $this->getFirstAttribute($this->schema->userPrincipalName());\n    }\n\n    /**\n     * Sets the users user principal name.\n     *\n     * @param string $userPrincipalName\n     *\n     * @return $this\n     */\n    public function setUserPrincipalName($userPrincipalName)\n    {\n        return $this->setFirstAttribute($this->schema->userPrincipalName(), $userPrincipalName);\n    }\n\n    /**\n     * Returns an array of workstations the user is assigned to.\n     *\n     * @return array\n     */\n    public function getUserWorkstations()\n    {\n        $workstations = $this->getFirstAttribute($this->schema->userWorkstations());\n\n        return array_filter(explode(',', $workstations));\n    }\n\n    /**\n     * Sets the workstations the user can login to.\n     *\n     * @param string|array $workstations The names of the workstations the user can login to.\n     *                                   Must be an array of names, or a comma separated\n     *                                   list of names.\n     *\n     * @return $this\n     */\n    public function setUserWorkstations($workstations = [])\n    {\n        if (is_array($workstations)) {\n            $workstations = implode(',', $workstations);\n        }\n\n        return $this->setFirstAttribute($this->schema->userWorkstations(), $workstations);\n    }\n\n    /**\n     * Returns the users script path if the user has one.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679656(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function getScriptPath()\n    {\n        return $this->getFirstAttribute($this->schema->scriptPath());\n    }\n\n    /**\n     * Sets the users script path.\n     *\n     * @param string $path\n     *\n     * @return $this\n     */\n    public function setScriptPath($path)\n    {\n        return $this->setFirstAttribute($this->schema->scriptPath(), $path);\n    }\n\n    /**\n     * Returns the users bad password count.\n     *\n     * @return string\n     */\n    public function getBadPasswordCount()\n    {\n        return $this->getFirstAttribute($this->schema->badPasswordCount());\n    }\n\n    /**\n     * Returns the users bad password time.\n     *\n     * @return string\n     */\n    public function getBadPasswordTime()\n    {\n        return $this->getFirstAttribute($this->schema->badPasswordTime());\n    }\n\n    /**\n     * Returns the bad password time unix timestamp.\n     *\n     * @return float|null\n     */\n    public function getBadPasswordTimestamp()\n    {\n        if ($time = $this->getBadPasswordTime()) {\n            return Utilities::convertWindowsTimeToUnixTime($time);\n        }\n    }\n\n    /**\n     * Returns the formatted timestamp of the bad password date.\n     *\n     * @throws \\Exception\n     *\n     * @return string|null\n     */\n    public function getBadPasswordDate()\n    {\n        if ($timestamp = $this->getBadPasswordTimestamp()) {\n            return (new DateTime())->setTimestamp($timestamp)->format($this->dateFormat);\n        }\n    }\n\n    /**\n     * Returns the time when the users password was set last.\n     *\n     * @return string\n     */\n    public function getPasswordLastSet()\n    {\n        return $this->getFirstAttribute($this->schema->passwordLastSet());\n    }\n\n    /**\n     * Returns the password last set unix timestamp.\n     *\n     * @return float|null\n     */\n    public function getPasswordLastSetTimestamp()\n    {\n        if ($time = $this->getPasswordLastSet()) {\n            return Utilities::convertWindowsTimeToUnixTime($time);\n        }\n    }\n\n    /**\n     * Returns the formatted timestamp of the password last set date.\n     *\n     * @throws \\Exception\n     *\n     * @return string|null\n     */\n    public function getPasswordLastSetDate()\n    {\n        if ($timestamp = $this->getPasswordLastSetTimestamp()) {\n            return (new DateTime())->setTimestamp($timestamp)->format($this->dateFormat);\n        }\n    }\n\n    /**\n     * Returns the users lockout time.\n     *\n     * @return string\n     */\n    public function getLockoutTime()\n    {\n        return $this->getFirstAttribute($this->schema->lockoutTime());\n    }\n\n    /**\n     * Returns the users lockout unix timestamp.\n     *\n     * @return float|null\n     */\n    public function getLockoutTimestamp()\n    {\n        if ($time = $this->getLockoutTime()) {\n            return Utilities::convertWindowsTimeToUnixTime($time);\n        }\n    }\n\n    /**\n     * Returns the formatted timestamp of the lockout date.\n     *\n     * @throws \\Exception\n     *\n     * @return string|null\n     */\n    public function getLockoutDate()\n    {\n        if ($timestamp = $this->getLockoutTimestamp()) {\n            return (new DateTime())->setTimestamp($timestamp)->format($this->dateFormat);\n        }\n    }\n\n    /**\n     * Clears the accounts lockout time, unlocking the account.\n     *\n     * @return $this\n     */\n    public function setClearLockoutTime()\n    {\n        return $this->setFirstAttribute($this->schema->lockoutTime(), 0);\n    }\n\n    /**\n     * Returns the users profile file path.\n     *\n     * @return string\n     */\n    public function getProfilePath()\n    {\n        return $this->getFirstAttribute($this->schema->profilePath());\n    }\n\n    /**\n     * Sets the users profile path.\n     *\n     * @param string $path\n     *\n     * @return $this\n     */\n    public function setProfilePath($path)\n    {\n        return $this->setFirstAttribute($this->schema->profilePath(), $path);\n    }\n\n    /**\n     * Returns the users legacy exchange distinguished name.\n     *\n     * @return string\n     */\n    public function getLegacyExchangeDn()\n    {\n        return $this->getFirstAttribute($this->schema->legacyExchangeDn());\n    }\n\n    /**\n     * Sets the users account expiry date.\n     *\n     * If no expiry time is given, the account is set to never expire.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675098(v=vs.85).aspx\n     *\n     * @param float $expiryTime\n     *\n     * @return $this\n     */\n    public function setAccountExpiry($expiryTime)\n    {\n        $time = is_null($expiryTime) ? '9223372036854775807' : (string) Utilities::convertUnixTimeToWindowsTime($expiryTime);\n\n        return $this->setFirstAttribute($this->schema->accountExpires(), $time);\n    }\n\n    /**\n     * Returns an array of address book DNs\n     * that the user is listed to be shown in.\n     *\n     * @return array\n     */\n    public function getShowInAddressBook()\n    {\n        return $this->getAttribute($this->schema->showInAddressBook());\n    }\n\n    /**\n     * Returns the users thumbnail photo base 64 encoded.\n     *\n     * Suitable for inserting into an HTML image element.\n     *\n     * @return string|null\n     */\n    public function getThumbnailEncoded()\n    {\n        if ($data = base64_decode($this->getThumbnail(), $strict = true)) {\n            // In case we don't have the file info extension enabled,\n            // we'll set the jpeg mime type as default.\n            $mime = 'image/jpeg';\n\n            $image = base64_encode($data);\n\n            if (function_exists('finfo_open')) {\n                $finfo = finfo_open();\n\n                $mime = finfo_buffer($finfo, $data, FILEINFO_MIME_TYPE);\n\n                return \"data:$mime;base64,$image\";\n            }\n\n            return \"data:$mime;base64,$image\";\n        }\n    }\n\n    /**\n     * Returns the users thumbnail photo.\n     *\n     * @return mixed\n     */\n    public function getThumbnail()\n    {\n        return $this->getFirstAttribute($this->schema->thumbnail());\n    }\n\n    /**\n     * Sets the users thumbnail photo.\n     *\n     * @param string $data\n     * @param bool   $encode\n     *\n     * @return $this\n     */\n    public function setThumbnail($data, $encode = true)\n    {\n        if ($encode && !base64_decode($data, $strict = true)) {\n            // If the string we're given is not base 64 encoded, then\n            // we will encode it before setting it on the user.\n            $data = base64_encode($data);\n        }\n\n        return $this->setAttribute($this->schema->thumbnail(), $data);\n    }\n\n    /**\n     * Returns the users JPEG photo.\n     *\n     * @return null|string\n     */\n    public function getJpegPhotoEncoded()\n    {\n        $jpeg = $this->getJpegPhoto();\n\n        return is_null($jpeg) ? $jpeg : 'data:image/jpeg;base64,'.base64_encode($jpeg);\n    }\n\n    /**\n     * Returns the users JPEG photo.\n     *\n     * @return mixed\n     */\n    public function getJpegPhoto()\n    {\n        return $this->getFirstAttribute($this->schema->jpegPhoto());\n    }\n\n    /**\n     * Sets the users JPEG photo.\n     *\n     * @param string $string\n     *\n     * @return $this\n     */\n    public function setJpegPhoto($string)\n    {\n        if (!base64_decode($string, $strict = true)) {\n            $string = base64_encode($string);\n        }\n\n        return $this->setAttribute($this->schema->jpegPhoto(), $string);\n    }\n\n    /**\n     * Return the employee ID.\n     *\n     * @return string\n     */\n    public function getEmployeeId()\n    {\n        return $this->getFirstAttribute($this->schema->employeeId());\n    }\n\n    /**\n     * Sets the employee ID.\n     *\n     * @param string $employeeId\n     *\n     * @return $this\n     */\n    public function setEmployeeId($employeeId)\n    {\n        return $this->setFirstAttribute($this->schema->employeeId(), $employeeId);\n    }\n\n    /**\n     * Returns the employee type.\n     *\n     * @return string|null\n     */\n    public function getEmployeeType()\n    {\n        return $this->getFirstAttribute($this->schema->employeeType());\n    }\n\n    /**\n     * Sets the employee type.\n     *\n     * @param string $type\n     *\n     * @return $this\n     */\n    public function setEmployeeType($type)\n    {\n        return $this->setFirstAttribute($this->schema->employeeType(), $type);\n    }\n\n    /**\n     * Returns the employee number.\n     *\n     * @return string\n     */\n    public function getEmployeeNumber()\n    {\n        return $this->getFirstAttribute($this->schema->employeeNumber());\n    }\n\n    /**\n     * Sets the employee number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setEmployeeNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->employeeNumber(), $number);\n    }\n\n    /**\n     * Returns the room number.\n     *\n     * @return string\n     */\n    public function getRoomNumber()\n    {\n        return $this->getFirstAttribute($this->schema->roomNumber());\n    }\n\n    /**\n     * Sets the room number.\n     *\n     * @param string $number\n     *\n     * @return $this\n     */\n    public function setRoomNumber($number)\n    {\n        return $this->setFirstAttribute($this->schema->roomNumber(), $number);\n    }\n\n    /**\n     * Return the personal title.\n     *\n     * @return $this\n     */\n    public function getPersonalTitle()\n    {\n        return $this->getFirstAttribute($this->schema->personalTitle());\n    }\n\n    /**\n     * Sets the personal title.\n     *\n     * @param string $personalTitle\n     *\n     * @return $this\n     */\n    public function setPersonalTitle($personalTitle)\n    {\n        return $this->setFirstAttribute($this->schema->personalTitle(), $personalTitle);\n    }\n\n    /**\n     * Return the user parameters.\n     *\n     * @return TSPropertyArray\n     */\n    public function getUserParameters()\n    {\n        return new TSPropertyArray($this->getFirstAttribute('userparameters'));\n    }\n\n    /**\n     * Sets the user parameters.\n     *\n     * @param TSPropertyArray $userParameters\n     *\n     * @return $this\n     */\n    public function setUserParameters(TSPropertyArray $userParameters)\n    {\n        return $this->setFirstAttribute('userparameters', $userParameters->toBinary());\n    }\n\n    /**\n     * Retrieves the primary group of the current user.\n     *\n     * @return Model|bool\n     */\n    public function getPrimaryGroup()\n    {\n        $groupSid = preg_replace('/\\d+$/', $this->getPrimaryGroupId(), $this->getConvertedSid());\n\n        return $this->query->newInstance()->findBySid($groupSid);\n    }\n\n    /**\n     * Sets the password on the current user.\n     *\n     * @param string $password\n     *\n     * @throws AdldapException When no SSL or TLS secured connection is present.\n     *\n     * @return $this\n     */\n    public function setPassword($password)\n    {\n        $this->validateSecureConnection();\n\n        $encodedPassword = call_user_func(static::getPasswordStrategy(), $password);\n\n        if ($this->exists) {\n            // If the record exists, we need to add a batch replace\n            // modification, otherwise we'll receive a \"type or\n            // value\" exists exception from our LDAP server.\n            return $this->addModification(\n                $this->newBatchModification(\n                    $this->schema->unicodePassword(),\n                    LDAP_MODIFY_BATCH_REPLACE,\n                    [$encodedPassword]\n                )\n            );\n        } else {\n            // Otherwise, we are creating a new record\n            // and we can set the attribute normally.\n            return $this->setFirstAttribute(\n                $this->schema->unicodePassword(),\n                $encodedPassword\n            );\n        }\n    }\n\n    /**\n     * Sets the option to force the password change at the next logon.\n     *\n     * Does not work if the \"Password never expires\" option is enabled.\n     *\n     * @return $this\n     */\n    public function setEnableForcePasswordChange()\n    {\n        return $this->setFirstAttribute($this->schema->passwordLastSet(), 0);\n    }\n\n    /**\n     * Sets the option to disable forcing a password change at the next logon.\n     *\n     * @return $this\n     */\n    public function setDisableForcePasswordChange()\n    {\n        return $this->setFirstAttribute($this->schema->passwordLastSet(), -1);\n    }\n\n    /**\n     * Change the password of the current user. This must be performed over SSL / TLS.\n     *\n     * Throws an exception on failure.\n     *\n     * @param string $oldPassword      The new password\n     * @param string $newPassword      The old password\n     * @param bool   $replaceNotRemove Alternative password change method. Set to true if you're receiving 'CONSTRAINT'\n     *                                 errors.\n     *\n     * @throws UserPasswordPolicyException    When the new password does not match your password policy.\n     * @throws UserPasswordIncorrectException When the old password is incorrect.\n     * @throws AdldapException                When an unknown cause of failure occurs.\n     *\n     * @return true\n     */\n    public function changePassword($oldPassword, $newPassword, $replaceNotRemove = false)\n    {\n        $this->validateSecureConnection();\n\n        $attribute = $this->schema->unicodePassword();\n\n        $modifications = [];\n\n        if ($replaceNotRemove) {\n            $modifications[] = $this->newBatchModification(\n                $attribute,\n                LDAP_MODIFY_BATCH_REPLACE,\n                [call_user_func(static::getPasswordStrategy(), $newPassword)]\n            );\n        } else {\n            // Create batch modification for removing the old password.\n            $modifications[] = $this->newBatchModification(\n                $attribute,\n                LDAP_MODIFY_BATCH_REMOVE,\n                [call_user_func(static::getPasswordStrategy(), $oldPassword)]\n            );\n\n            // Create batch modification for adding the new password.\n            $modifications[] = $this->newBatchModification(\n                $attribute,\n                LDAP_MODIFY_BATCH_ADD,\n                [call_user_func(static::getPasswordStrategy(), $newPassword)]\n            );\n        }\n\n        // Add the modifications.\n        foreach ($modifications as $modification) {\n            $this->addModification($modification);\n        }\n\n        $result = @$this->update();\n\n        if (!$result) {\n            // If the user failed to update, we'll see if we can\n            // figure out why by retrieving the extended error.\n            $error = $this->query->getConnection()->getExtendedError();\n            $code = $this->query->getConnection()->getExtendedErrorCode();\n\n            switch ($code) {\n                case '0000052D':\n                    throw new UserPasswordPolicyException(\n                        \"Error: $code. Your new password does not match the password policy.\"\n                    );\n                case '00000056':\n                    throw new UserPasswordIncorrectException(\n                        \"Error: $code. Your old password is incorrect.\"\n                    );\n                default:\n                    throw new AdldapException($error);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Return true / false if LDAP User is active (enabled & not expired).\n     *\n     * @return bool\n     */\n    public function isActive()\n    {\n        return $this->isEnabled() && !$this->isExpired();\n    }\n\n    /**\n     * Return true / false if the LDAP User is expired.\n     *\n     * @param DateTime $date Optional date\n     *\n     * @return bool\n     */\n    public function isExpired(DateTime $date = null)\n    {\n        // Here we'll determine if the account expires by checking is expiration date.\n        if ($expirationDate = $this->expirationDate()) {\n            $date = $date ?: new DateTime();\n\n            return $expirationDate <= $date;\n        }\n\n        // The account has no expiry date.\n        return false;\n    }\n\n    /**\n     * Return the expiration date of the user account.\n     *\n     * @throws \\Exception\n     *\n     * @return DateTime|null\n     */\n    public function expirationDate()\n    {\n        $accountExpiry = $this->getAccountExpiry();\n\n        // If the account expiry is zero or the expiry is equal to\n        // ActiveDirectory's 'never expire' value,\n        // then we'll return null here.\n        if ($accountExpiry == 0 || $accountExpiry == $this->getSchema()->neverExpiresDate()) {\n            return;\n        }\n\n        $unixTime = Utilities::convertWindowsTimeToUnixTime($accountExpiry);\n\n        return (new DateTime())->setTimestamp($unixTime);\n    }\n\n    /**\n     * Returns the users account expiry date.\n     *\n     * @return string\n     */\n    public function getAccountExpiry()\n    {\n        return $this->getFirstAttribute($this->schema->accountExpires());\n    }\n\n    /**\n     * Returns true / false if the users password is expired.\n     *\n     * @return bool\n     */\n    public function passwordExpired()\n    {\n        // First we'll check the users userAccountControl to see if\n        // it contains the 'password does not expire' flag.\n        if ($this->getUserAccountControlObject()->has(AccountControl::DONT_EXPIRE_PASSWORD)) {\n            return false;\n        }\n\n        $lastSet = (int) $this->getPasswordLastSet();\n\n        if ($lastSet === 0) {\n            // If the users last set time is zero, the password has\n            // been manually expired by an administrator.\n            return true;\n        }\n\n        // We'll check if we're using the ActiveDirectory schema to retrieve\n        // the max password age, as this is an AD-only feature.\n        if ($this->schema instanceof ActiveDirectory) {\n            $query = $this->query->newInstance();\n\n            // We need to get the root domain object to be able to\n            // retrieve the max password age on the domain.\n            $rootDomainObject = $query->select($this->schema->maxPasswordAge())\n                ->whereHas($this->schema->objectClass())\n                ->first();\n\n            $maxPasswordAge = $rootDomainObject->getMaxPasswordAge();\n\n            if (empty($maxPasswordAge)) {\n                // There is not a max password age set on the LDAP server.\n                return false;\n            }\n\n            // convert from 100 nanosecond ticks to seconds\n            $maxPasswordAgeSeconds = $maxPasswordAge / 10000000;\n\n            $lastSetUnixEpoch = Utilities::convertWindowsTimeToUnixTime($lastSet);\n            $passwordExpiryTime = $lastSetUnixEpoch - $maxPasswordAgeSeconds;\n\n            $expiresAt = (new DateTime())->setTimestamp($passwordExpiryTime);\n\n            // If our current time is greater than the users password\n            // expiry time, the users password has expired.\n            return (new DateTime())->getTimestamp() >= $expiresAt->getTimestamp();\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/UserPasswordIncorrectException.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse Adldap\\AdldapException;\n\n/**\n * Class UserPasswordIncorrectException.\n *\n * Thrown when a users password is being changed\n * and their current password given is incorrect.\n */\nclass UserPasswordIncorrectException extends AdldapException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Models/UserPasswordPolicyException.php",
    "content": "<?php\n\nnamespace Adldap\\Models;\n\nuse Adldap\\AdldapException;\n\n/**\n * Class UserPasswordPolicyException.\n *\n * Thrown when a users password is being changed but their new password\n * does not conform to the LDAP servers password policy.\n */\nclass UserPasswordPolicyException extends AdldapException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Builder.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse Closure;\nuse Adldap\\Adldap;\nuse Adldap\\Utilities;\nuse Adldap\\Models\\Model;\nuse Illuminate\\Support\\Arr;\nuse InvalidArgumentException;\nuse Adldap\\Schemas\\ActiveDirectory;\nuse Adldap\\Schemas\\SchemaInterface;\nuse Adldap\\Query\\Events\\QueryExecuted;\nuse Adldap\\Models\\ModelNotFoundException;\nuse Adldap\\Connections\\ConnectionInterface;\n\nclass Builder\n{\n    /**\n     * The selected columns to retrieve on the query.\n     *\n     * @var array\n     */\n    public $columns = ['*'];\n\n    /**\n     * The query filters.\n     *\n     * @var array\n     */\n    public $filters = [\n        'and' => [],\n        'or'  => [],\n        'raw' => [],\n    ];\n\n    /**\n     * The size limit of the query.\n     *\n     * @var int\n     */\n    public $limit = 0;\n\n    /**\n     * Determines whether the current query is paginated.\n     *\n     * @var bool\n     */\n    public $paginated = false;\n\n    /**\n     * The field to sort search results by.\n     *\n     * @var string\n     */\n    protected $sortByField = '';\n\n    /**\n     * The direction to sort the results by.\n     *\n     * @var string\n     */\n    protected $sortByDirection = '';\n\n    /**\n     * The sort flags for sorting query results.\n     *\n     * @var int\n     */\n    protected $sortByFlags;\n\n    /**\n     * The distinguished name to perform searches upon.\n     *\n     * @var string|null\n     */\n    protected $dn;\n\n    /**\n     * The default query type.\n     *\n     * @var string\n     */\n    protected $type = 'search';\n\n    /**\n     * Determines whether or not to return LDAP results in their raw array format.\n     *\n     * @var bool\n     */\n    protected $raw = false;\n\n    /**\n     * Determines whether the query is nested.\n     *\n     * @var bool\n     */\n    protected $nested = false;\n\n    /**\n     * Determines whether the query should be cached.\n     *\n     * @var bool\n     */\n    protected $caching = false;\n\n    /**\n     * How long the query should be cached until.\n     *\n     * @var \\DateTimeInterface|null\n     */\n    protected $cacheUntil = null;\n\n    /**\n     * Determines whether the query cache must be flushed.\n     *\n     * @var bool\n     */\n    protected $flushCache = false;\n\n    /**\n     * The current connection instance.\n     *\n     * @var ConnectionInterface\n     */\n    protected $connection;\n\n    /**\n     * The current grammar instance.\n     *\n     * @var Grammar\n     */\n    protected $grammar;\n\n    /**\n     * The current schema instance.\n     *\n     * @var SchemaInterface\n     */\n    protected $schema;\n\n    /**\n     * The current cache instance.\n     *\n     * @var Cache|null\n     */\n    protected $cache;\n\n    /**\n     * Constructor.\n     *\n     * @param ConnectionInterface  $connection\n     * @param Grammar|null         $grammar\n     * @param SchemaInterface|null $schema\n     */\n    public function __construct(ConnectionInterface $connection, Grammar $grammar = null, SchemaInterface $schema = null)\n    {\n        $this->setConnection($connection)\n            ->setGrammar($grammar)\n            ->setSchema($schema);\n    }\n\n    /**\n     * Sets the current connection.\n     *\n     * @param ConnectionInterface $connection\n     *\n     * @return Builder\n     */\n    public function setConnection(ConnectionInterface $connection)\n    {\n        $this->connection = $connection;\n\n        return $this;\n    }\n\n    /**\n     * Sets the current filter grammar.\n     *\n     * @param Grammar|null $grammar\n     *\n     * @return Builder\n     */\n    public function setGrammar(Grammar $grammar = null)\n    {\n        $this->grammar = $grammar ?: new Grammar();\n\n        return $this;\n    }\n\n    /**\n     * Sets the current schema.\n     *\n     * @param SchemaInterface|null $schema\n     *\n     * @return Builder\n     */\n    public function setSchema(SchemaInterface $schema = null)\n    {\n        $this->schema = $schema ?: new ActiveDirectory();\n\n        return $this;\n    }\n\n    /**\n     * Returns the current schema.\n     *\n     * @return SchemaInterface\n     */\n    public function getSchema()\n    {\n        return $this->schema;\n    }\n\n    /**\n     * Sets the cache to store query results.\n     *\n     * @param Cache|null $cache\n     */\n    public function setCache(Cache $cache = null)\n    {\n        $this->cache = $cache;\n\n        return $this;\n    }\n\n    /**\n     * Returns a new Query Builder instance.\n     *\n     * @param string $baseDn\n     *\n     * @return Builder\n     */\n    public function newInstance($baseDn = null)\n    {\n        // We'll set the base DN of the new Builder so\n        // developers don't need to do this manually.\n        $dn = is_null($baseDn) ? $this->getDn() : $baseDn;\n\n        return (new static($this->connection, $this->grammar, $this->schema))\n            ->setDn($dn);\n    }\n\n    /**\n     * Returns a new nested Query Builder instance.\n     *\n     * @param Closure|null $closure\n     *\n     * @return $this\n     */\n    public function newNestedInstance(Closure $closure = null)\n    {\n        $query = $this->newInstance()->nested();\n\n        if ($closure) {\n            call_user_func($closure, $query);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Returns the current query.\n     *\n     * @return Collection|array\n     */\n    public function get()\n    {\n        // We'll mute any warnings / errors here. We just need to\n        // know if any query results were returned.\n        return @$this->query($this->getQuery());\n    }\n\n    /**\n     * Compiles and returns the current query string.\n     *\n     * @return string\n     */\n    public function getQuery()\n    {\n        // We need to ensure we have at least one filter, as\n        // no query results will be returned otherwise.\n        if (count(array_filter($this->filters)) === 0) {\n            $this->whereHas($this->schema->objectClass());\n        }\n\n        return $this->grammar->compile($this);\n    }\n\n    /**\n     * Returns the unescaped query.\n     *\n     * @return string\n     */\n    public function getUnescapedQuery()\n    {\n        return Utilities::unescape($this->getQuery());\n    }\n\n    /**\n     * Returns the current Grammar instance.\n     *\n     * @return Grammar\n     */\n    public function getGrammar()\n    {\n        return $this->grammar;\n    }\n\n    /**\n     * Returns the current Connection instance.\n     *\n     * @return ConnectionInterface\n     */\n    public function getConnection()\n    {\n        return $this->connection;\n    }\n\n    /**\n     * Returns the builders DN to perform searches upon.\n     *\n     * @return string\n     */\n    public function getDn()\n    {\n        return $this->dn;\n    }\n\n    /**\n     * Sets the DN to perform searches upon.\n     *\n     * @param string|Model|null $dn\n     *\n     * @return Builder\n     */\n    public function setDn($dn = null)\n    {\n        $this->dn = $dn instanceof Model ? $dn->getDn() : $dn;\n\n        return $this;\n    }\n\n    /**\n     * Alias for setting the base DN of the query.\n     *\n     * @param string|Model|null $dn\n     *\n     * @return Builder\n     */\n    public function in($dn = null)\n    {\n        return $this->setDn($dn);\n    }\n\n    /**\n     * Sets the size limit of the current query.\n     *\n     * @param int $limit\n     *\n     * @return Builder\n     */\n    public function limit($limit = 0)\n    {\n        $this->limit = $limit;\n\n        return $this;\n    }\n\n    /**\n     * Performs the specified query on the current LDAP connection.\n     *\n     * @param string $query\n     *\n     * @return \\Adldap\\Query\\Collection|array\n     */\n    public function query($query)\n    {\n        $start = microtime(true);\n\n        // Here we will create the execution callback. This allows us\n        // to only execute an LDAP request if caching is disabled\n        // or if no cache of the given query exists yet.\n        $callback = function () use ($query) {\n            return $this->parse($this->run($query));\n        };\n\n        // If caching is enabled and we have a cache instance available,\n        // we will try to retrieve the cached results instead.\n        // Otherwise, we will simply execute the callback.\n        if ($this->caching && $this->cache) {\n            $results = $this->getCachedResponse($this->getCacheKey($query), $callback);\n        } else {\n            $results = $callback();\n        }\n\n        // Log the query.\n        $this->logQuery($this, $this->type, $this->getElapsedTime($start));\n\n        // Process & return the results.\n        return $this->newProcessor()->process($results);\n    }\n\n    /**\n     * Paginates the current LDAP query.\n     *\n     * @param int  $perPage\n     * @param int  $currentPage\n     * @param bool $isCritical\n     *\n     * @return Paginator\n     */\n    public function paginate($perPage = 1000, $currentPage = 0, $isCritical = true)\n    {\n        $this->paginated = true;\n\n        $start = microtime(true);\n\n        $query = $this->getQuery();\n\n        // Here we will create the pagination callback. This allows us\n        // to only execute an LDAP request if caching is disabled\n        // or if no cache of the given query exists yet.\n        $callback = function () use ($query, $perPage, $isCritical) {\n            return $this->runPaginate($query, $perPage, $isCritical);\n        };\n\n        // If caching is enabled and we have a cache instance available,\n        // we will try to retrieve the cached results instead.\n        if ($this->caching && $this->cache) {\n            $pages = $this->getCachedResponse($this->getCacheKey($query), $callback);\n        } else {\n            $pages = $callback();\n        }\n\n        // Log the query.\n        $this->logQuery($this, 'paginate', $this->getElapsedTime($start));\n\n        // Process & return the results.\n        return $this->newProcessor()->processPaginated($pages, $perPage, $currentPage);\n    }\n\n    /**\n     * Get the cached response or execute and cache the callback value.\n     *\n     * @param string  $key\n     * @param Closure $callback\n     *\n     * @return mixed\n     */\n    protected function getCachedResponse($key, Closure $callback)\n    {\n        if ($this->flushCache) {\n            $this->cache->delete($key);\n        }\n\n        return $this->cache->remember($key, $this->cacheUntil, $callback);\n    }\n\n    /**\n     * Runs the query operation with the given filter.\n     *\n     * @param string $filter\n     *\n     * @return resource\n     */\n    protected function run($filter)\n    {\n        return $this->connection->{$this->type}(\n            $this->getDn(),\n            $filter,\n            $this->getSelects(),\n            $onlyAttributes = false,\n            $this->limit\n        );\n    }\n\n    /**\n     * Runs the paginate operation with the given filter.\n     *\n     * @param string $filter\n     * @param int    $perPage\n     * @param bool   $isCritical\n     *\n     * @return array\n     */\n    protected function runPaginate($filter, $perPage, $isCritical)\n    {\n        return $this->connection->supportsServerControlsInMethods() ?\n            $this->compatiblePaginationCallback($filter, $perPage, $isCritical) :\n            $this->deprecatedPaginationCallback($filter, $perPage, $isCritical);\n    }\n\n    /**\n     * Create a deprecated pagination callback compatible with PHP 7.2.\n     *\n     * @param string $filter\n     * @param int    $perPage\n     * @param bool   $isCritical\n     *\n     * @return array\n     */\n    protected function deprecatedPaginationCallback($filter, $perPage, $isCritical)\n    {\n        $pages = [];\n\n        $cookie = '';\n\n        do {\n            $this->connection->controlPagedResult($perPage, $isCritical, $cookie);\n\n            if (! $resource = $this->run($filter)) {\n                break;\n            }\n\n            // If we have been given a valid resource, we will retrieve the next\n            // pagination cookie to send for our next pagination request.\n            $this->connection->controlPagedResultResponse($resource, $cookie);\n\n            $pages[] = $this->parse($resource);\n        } while (!empty($cookie));\n\n        // Reset paged result on the current connection. We won't pass in the current $perPage\n        // parameter since we want to reset the page size to the default '1000'. Sending '0'\n        // eliminates any further opportunity for running queries in the same request,\n        // even though that is supposed to be the correct usage.\n        $this->connection->controlPagedResult();\n\n        return $pages;\n    }\n\n    /**\n     * Create a compatible pagination callback compatible with PHP 7.3 and greater.\n     *\n     * @param string $filter\n     * @param int    $perPage\n     * @param bool   $isCritical\n     *\n     * @return array\n     */\n    protected function compatiblePaginationCallback($filter, $perPage, $isCritical)\n    {\n        $pages = [];\n\n        // Setup our paged results control.\n        $controls = [\n            LDAP_CONTROL_PAGEDRESULTS => [\n                'oid'        => LDAP_CONTROL_PAGEDRESULTS,\n                'isCritical' => $isCritical,\n                'value'      => [\n                    'size'   => $perPage,\n                    'cookie' => '',\n                ],\n            ],\n        ];\n\n        do {\n            // Update the server controls.\n            $this->connection->setOption(LDAP_OPT_SERVER_CONTROLS, $controls);\n\n            if (! $resource = $this->run($filter)) {\n                break;\n            }\n\n            $errorCode = $dn = $errorMessage = $refs = null;\n\n            // Update the server controls with the servers response.\n            $this->connection->parseResult($resource, $errorCode, $dn, $errorMessage, $refs, $controls);\n\n            $pages[] = $this->parse($resource);\n\n            // Reset paged result on the current connection. We won't pass in the current $perPage\n            // parameter since we want to reset the page size to the default '1000'. Sending '0'\n            // eliminates any further opportunity for running queries in the same request,\n            // even though that is supposed to be the correct usage.\n            $controls[LDAP_CONTROL_PAGEDRESULTS]['value']['size'] = $perPage;\n        } while (!empty($controls[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie']));\n\n        // After running the query, we will clear the LDAP server controls. This\n        // allows the controls to be automatically reset before each new query\n        // that is conducted on the same connection during each request.\n        $this->connection->setOption(LDAP_OPT_SERVER_CONTROLS, []);\n\n        return $pages;\n    }\n\n    /**\n     * Parses the given LDAP resource by retrieving its entries.\n     *\n     * @param resource $resource\n     *\n     * @return array\n     */\n    protected function parse($resource)\n    {\n        // Normalize entries. Get entries returns false on failure.\n        // We'll always want an array in this situation.\n        $entries = $this->connection->getEntries($resource) ?: [];\n\n        // Free up memory.\n        if (is_resource($resource)) {\n            $this->connection->freeResult($resource);\n        }\n\n        return $entries;\n    }\n\n    /**\n     * Returns the cache key.\n     *\n     * @param string $query\n     *\n     * @return string\n     */\n    protected function getCacheKey($query)\n    {\n        $key = $this->connection->getHost()\n            .$this->type\n            .$this->getDn()\n            .$query\n            .implode('', $this->getSelects())\n            .$this->limit\n            .$this->paginated;\n\n        return md5($key);\n    }\n\n    /**\n     * Returns the first entry in a search result.\n     *\n     * @param array|string $columns\n     *\n     * @return Model|array|null\n     */\n    public function first($columns = [])\n    {\n        $results = $this->select($columns)->limit(1)->get();\n\n        // Since results may be returned inside an array if `raw()`\n        // is specified, then we'll use our array helper\n        // to retrieve the first result.\n        return Arr::get($results, 0);\n    }\n\n    /**\n     * Returns the first entry in a search result.\n     *\n     * If no entry is found, an exception is thrown.\n     *\n     * @param array|string $columns\n     *\n     * @throws ModelNotFoundException\n     *\n     * @return Model|array\n     */\n    public function firstOrFail($columns = [])\n    {\n        $record = $this->first($columns);\n\n        if (!$record) {\n            throw (new ModelNotFoundException())\n                ->setQuery($this->getUnescapedQuery(), $this->getDn());\n        }\n\n        return $record;\n    }\n\n    /**\n     * Finds a record by the specified attribute and value.\n     *\n     * @param string       $attribute\n     * @param string       $value\n     * @param array|string $columns\n     *\n     * @return Model|array|false\n     */\n    public function findBy($attribute, $value, $columns = [])\n    {\n        try {\n            return $this->findByOrFail($attribute, $value, $columns);\n        } catch (ModelNotFoundException $e) {\n            return;\n        }\n    }\n\n    /**\n     * Finds a record by the specified attribute and value.\n     *\n     * If no record is found an exception is thrown.\n     *\n     * @param string       $attribute\n     * @param string       $value\n     * @param array|string $columns\n     *\n     * @throws ModelNotFoundException\n     *\n     * @return Model|array\n     */\n    public function findByOrFail($attribute, $value, $columns = [])\n    {\n        return $this->whereEquals($attribute, $value)->firstOrFail($columns);\n    }\n\n    /**\n     * Finds a record using ambiguous name resolution.\n     *\n     * @param string|array $value\n     * @param array|string $columns\n     *\n     * @return Model|array|null\n     */\n    public function find($value, $columns = [])\n    {\n        if (is_array($value)) {\n            return $this->findMany($value, $columns);\n        }\n\n        // If we're not using ActiveDirectory, we can't use ANR. We'll make our own query.\n        if (!is_a($this->schema, ActiveDirectory::class)) {\n            return $this->prepareAnrEquivalentQuery($value)->first($columns);\n        }\n\n        return $this->findBy($this->schema->anr(), $value, $columns);\n    }\n\n    /**\n     * Finds multiple records using ambiguous name resolution.\n     *\n     * @param array $values\n     * @param array $columns\n     *\n     * @return \\Adldap\\Query\\Collection|array\n     */\n    public function findMany(array $values = [], $columns = [])\n    {\n        $this->select($columns);\n\n        if (!is_a($this->schema, ActiveDirectory::class)) {\n            $query = $this;\n\n            foreach ($values as $value) {\n                $query->prepareAnrEquivalentQuery($value);\n            }\n\n            return $query->get();\n        }\n\n        return $this->findManyBy($this->schema->anr(), $values);\n    }\n\n    /**\n     * Creates an ANR equivalent query for LDAP distributions that do not support ANR.\n     *\n     * @param string $value\n     *\n     * @return Builder\n     */\n    protected function prepareAnrEquivalentQuery($value)\n    {\n        return $this->orFilter(function (self $query) use ($value) {\n            $locateBy = [\n                $this->schema->name(),\n                $this->schema->email(),\n                $this->schema->userId(),\n                $this->schema->lastName(),\n                $this->schema->firstName(),\n                $this->schema->commonName(),\n                $this->schema->displayName(),\n            ];\n\n            foreach ($locateBy as $attribute) {\n                $query->whereEquals($attribute, $value);\n            }\n        });\n    }\n\n    /**\n     * Finds many records by the specified attribute.\n     *\n     * @param string $attribute\n     * @param array  $values\n     * @param array  $columns\n     *\n     * @return \\Adldap\\Query\\Collection|array\n     */\n    public function findManyBy($attribute, array $values = [], $columns = [])\n    {\n        $query = $this->select($columns);\n\n        foreach ($values as $value) {\n            $query->orWhere([$attribute => $value]);\n        }\n\n        return $query->get();\n    }\n\n    /**\n     * Finds a record using ambiguous name resolution.\n     *\n     * If a record is not found, an exception is thrown.\n     *\n     * @param string       $value\n     * @param array|string $columns\n     *\n     * @throws ModelNotFoundException\n     *\n     * @return Model|array\n     */\n    public function findOrFail($value, $columns = [])\n    {\n        $entry = $this->find($value, $columns);\n\n        // Make sure we check if the result is an entry or an array before\n        // we throw an exception in case the user wants raw results.\n        if (!$entry instanceof Model && !is_array($entry)) {\n            throw (new ModelNotFoundException())\n                ->setQuery($this->getUnescapedQuery(), $this->getDn());\n        }\n\n        return $entry;\n    }\n\n    /**\n     * Finds a record by its distinguished name.\n     *\n     * @param string       $dn\n     * @param array|string $columns\n     *\n     * @return bool|Model\n     */\n    public function findByDn($dn, $columns = [])\n    {\n        try {\n            return $this->findByDnOrFail($dn, $columns);\n        } catch (ModelNotFoundException $e) {\n            return;\n        }\n    }\n\n    /**\n     * Finds a record by its distinguished name.\n     *\n     * Fails upon no records returned.\n     *\n     * @param string       $dn\n     * @param array|string $columns\n     *\n     * @throws ModelNotFoundException\n     *\n     * @return Model|array\n     */\n    public function findByDnOrFail($dn, $columns = [])\n    {\n        // Since we're setting our base DN to be able to retrieve a model\n        // by its distinguished name, we need to set it back to\n        // our configured base so it is not overwritten.\n        $base = $this->getDn();\n\n        $model = $this->setDn($dn)\n            ->read()\n            ->whereHas($this->schema->objectClass())\n            ->firstOrFail($columns);\n\n        // Reset the models query builder (in case a model is returned).\n        // Otherwise, we must be requesting a raw result.\n        if ($model instanceof Model) {\n            $model->setQuery($this->in($base));\n        }\n\n        return $model;\n    }\n\n    /**\n     * Finds a record by its string GUID.\n     *\n     * @param string       $guid\n     * @param array|string $columns\n     *\n     * @return Model|array|false\n     */\n    public function findByGuid($guid, $columns = [])\n    {\n        try {\n            return $this->findByGuidOrFail($guid, $columns);\n        } catch (ModelNotFoundException $e) {\n            return;\n        }\n    }\n\n    /**\n     * Finds a record by its string GUID.\n     *\n     * Fails upon no records returned.\n     *\n     * @param string       $guid\n     * @param array|string $columns\n     *\n     * @throws ModelNotFoundException\n     *\n     * @return Model|array\n     */\n    public function findByGuidOrFail($guid, $columns = [])\n    {\n        if ($this->schema->objectGuidRequiresConversion()) {\n            $guid = Utilities::stringGuidToHex($guid);\n        }\n\n        return $this->select($columns)->whereRaw([\n            $this->schema->objectGuid() => $guid,\n        ])->firstOrFail();\n    }\n\n    /**\n     * Finds a record by its Object SID.\n     *\n     * @param string       $sid\n     * @param array|string $columns\n     *\n     * @return Model|array|false\n     */\n    public function findBySid($sid, $columns = [])\n    {\n        try {\n            return $this->findBySidOrFail($sid, $columns);\n        } catch (ModelNotFoundException $e) {\n            return;\n        }\n    }\n\n    /**\n     * Finds a record by its Object SID.\n     *\n     * Fails upon no records returned.\n     *\n     * @param string       $sid\n     * @param array|string $columns\n     *\n     * @throws ModelNotFoundException\n     *\n     * @return Model|array\n     */\n    public function findBySidOrFail($sid, $columns = [])\n    {\n        return $this->findByOrFail($this->schema->objectSid(), $sid, $columns);\n    }\n\n    /**\n     * Finds the Base DN of your domain controller.\n     *\n     * @return string|bool\n     */\n    public function findBaseDn()\n    {\n        $result = $this->setDn(null)\n            ->read()\n            ->raw()\n            ->whereHas($this->schema->objectClass())\n            ->first();\n\n        $key = $this->schema->defaultNamingContext();\n\n        if (is_array($result) && array_key_exists($key, $result)) {\n            if (array_key_exists(0, $result[$key])) {\n                return $result[$key][0];\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Adds the inserted fields to query on the current LDAP connection.\n     *\n     * @param array|string $columns\n     *\n     * @return Builder\n     */\n    public function select($columns = [])\n    {\n        $columns = is_array($columns) ? $columns : func_get_args();\n\n        if (!empty($columns)) {\n            $this->columns = $columns;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Adds a raw filter to the current query.\n     *\n     * @param array|string $filters\n     *\n     * @return Builder\n     */\n    public function rawFilter($filters = [])\n    {\n        $filters = is_array($filters) ? $filters : func_get_args();\n\n        foreach ($filters as $filter) {\n            $this->filters['raw'][] = $filter;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Adds a nested 'and' filter to the current query.\n     *\n     * @param Closure $closure\n     *\n     * @return Builder\n     */\n    public function andFilter(Closure $closure)\n    {\n        $query = $this->newNestedInstance($closure);\n\n        $filter = $this->grammar->compileAnd($query->getQuery());\n\n        return $this->rawFilter($filter);\n    }\n\n    /**\n     * Adds a nested 'or' filter to the current query.\n     *\n     * @param Closure $closure\n     *\n     * @return Builder\n     */\n    public function orFilter(Closure $closure)\n    {\n        $query = $this->newNestedInstance($closure);\n\n        $filter = $this->grammar->compileOr($query->getQuery());\n\n        return $this->rawFilter($filter);\n    }\n\n    /**\n     * Adds a nested 'not' filter to the current query.\n     *\n     * @param Closure $closure\n     *\n     * @return Builder\n     */\n    public function notFilter(Closure $closure)\n    {\n        $query = $this->newNestedInstance($closure);\n\n        $filter = $this->grammar->compileNot($query->getQuery());\n\n        return $this->rawFilter($filter);\n    }\n\n    /**\n     * Adds a where clause to the current query.\n     *\n     * @param string|array $field\n     * @param string       $operator\n     * @param string       $value\n     * @param string       $boolean\n     * @param bool         $raw\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return Builder\n     */\n    public function where($field, $operator = null, $value = null, $boolean = 'and', $raw = false)\n    {\n        if (is_array($field)) {\n            // If the column is an array, we will assume it is an array of\n            // key-value pairs and can add them each as a where clause.\n            return $this->addArrayOfWheres($field, $boolean, $raw);\n        }\n\n        // We'll bypass the 'has' and 'notHas' operator since they\n        // only require two arguments inside the where method.\n        $bypass = [Operator::$has, Operator::$notHas];\n\n        // Here we will make some assumptions about the operator. If only\n        // 2 values are passed to the method, we will assume that\n        // the operator is 'equals' and keep going.\n        if (func_num_args() === 2 && in_array($operator, $bypass) === false) {\n            list($value, $operator) = [$operator, '='];\n        }\n\n        if (!in_array($operator, Operator::all())) {\n            throw new InvalidArgumentException(\"Invalid where operator: {$operator}\");\n        }\n\n        // We'll escape the value if raw isn't requested.\n        $value = $raw ? $value : $this->escape($value);\n\n        $field = $this->escape($field, $ignore = null, 3);\n\n        $this->addFilter($boolean, compact('field', 'operator', 'value'));\n\n        return $this;\n    }\n\n    /**\n     * Adds a raw where clause to the current query.\n     *\n     * Values given to this method are not escaped.\n     *\n     * @param string|array $field\n     * @param string       $operator\n     * @param string       $value\n     *\n     * @return Builder\n     */\n    public function whereRaw($field, $operator = null, $value = null)\n    {\n        return $this->where($field, $operator, $value, 'and', true);\n    }\n\n    /**\n     * Adds a 'where equals' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereEquals($field, $value)\n    {\n        return $this->where($field, Operator::$equals, $value);\n    }\n\n    /**\n     * Adds a 'where not equals' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereNotEquals($field, $value)\n    {\n        return $this->where($field, Operator::$doesNotEqual, $value);\n    }\n\n    /**\n     * Adds a 'where approximately equals' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereApproximatelyEquals($field, $value)\n    {\n        return $this->where($field, Operator::$approximatelyEquals, $value);\n    }\n\n    /**\n     * Adds a 'where has' clause to the current query.\n     *\n     * @param string $field\n     *\n     * @return Builder\n     */\n    public function whereHas($field)\n    {\n        return $this->where($field, Operator::$has);\n    }\n\n    /**\n     * Adds a 'where not has' clause to the current query.\n     *\n     * @param string $field\n     *\n     * @return Builder\n     */\n    public function whereNotHas($field)\n    {\n        return $this->where($field, Operator::$notHas);\n    }\n\n    /**\n     * Adds a 'where contains' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereContains($field, $value)\n    {\n        return $this->where($field, Operator::$contains, $value);\n    }\n\n    /**\n     * Adds a 'where contains' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereNotContains($field, $value)\n    {\n        return $this->where($field, Operator::$notContains, $value);\n    }\n\n    /**\n     * Query for entries that match any of the values provided for the given field.\n     *\n     * @param string $field\n     * @param array  $values\n     *\n     * @return Builder\n     */\n    public function whereIn($field, array $values)\n    {\n        return $this->orFilter(function (self $query) use ($field, $values) {\n            foreach ($values as $value) {\n                $query->whereEquals($field, $value);\n            }\n        });\n    }\n\n    /**\n     * Adds a 'between' clause to the current query.\n     *\n     * @param string $field\n     * @param array  $values\n     *\n     * @return Builder\n     */\n    public function whereBetween($field, array $values)\n    {\n        return $this->where([\n            [$field, '>=', $values[0]],\n            [$field, '<=', $values[1]],\n        ]);\n    }\n\n    /**\n     * Adds a 'where starts with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereStartsWith($field, $value)\n    {\n        return $this->where($field, Operator::$startsWith, $value);\n    }\n\n    /**\n     * Adds a 'where *not* starts with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereNotStartsWith($field, $value)\n    {\n        return $this->where($field, Operator::$notStartsWith, $value);\n    }\n\n    /**\n     * Adds a 'where ends with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereEndsWith($field, $value)\n    {\n        return $this->where($field, Operator::$endsWith, $value);\n    }\n\n    /**\n     * Adds a 'where *not* ends with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function whereNotEndsWith($field, $value)\n    {\n        return $this->where($field, Operator::$notEndsWith, $value);\n    }\n\n    /**\n     * Adds a enabled filter to the current query.\n     *\n     * @return Builder\n     */\n    public function whereEnabled()\n    {\n        return $this->rawFilter($this->schema->filterEnabled());\n    }\n\n    /**\n     * Adds a disabled filter to the current query.\n     *\n     * @return Builder\n     */\n    public function whereDisabled()\n    {\n        return $this->rawFilter($this->schema->filterDisabled());\n    }\n\n    /**\n     * Adds a 'member of' filter to the current query.\n     *\n     * @param string $dn\n     *\n     * @return Builder\n     */\n    public function whereMemberOf($dn)\n    {\n        return $this->whereEquals($this->schema->memberOfRecursive(), $dn);\n    }\n\n    /**\n     * Adds an 'or where' clause to the current query.\n     *\n     * @param array|string $field\n     * @param string|null  $operator\n     * @param string|null  $value\n     *\n     * @return Builder\n     */\n    public function orWhere($field, $operator = null, $value = null)\n    {\n        return $this->where($field, $operator, $value, 'or');\n    }\n\n    /**\n     * Adds a raw or where clause to the current query.\n     *\n     * Values given to this method are not escaped.\n     *\n     * @param string $field\n     * @param string $operator\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereRaw($field, $operator = null, $value = null)\n    {\n        return $this->where($field, $operator, $value, 'or', true);\n    }\n\n    /**\n     * Adds an 'or where has' clause to the current query.\n     *\n     * @param string $field\n     *\n     * @return Builder\n     */\n    public function orWhereHas($field)\n    {\n        return $this->orWhere($field, Operator::$has);\n    }\n\n    /**\n     * Adds a 'where not has' clause to the current query.\n     *\n     * @param string $field\n     *\n     * @return Builder\n     */\n    public function orWhereNotHas($field)\n    {\n        return $this->orWhere($field, Operator::$notHas);\n    }\n\n    /**\n     * Adds an 'or where equals' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereEquals($field, $value)\n    {\n        return $this->orWhere($field, Operator::$equals, $value);\n    }\n\n    /**\n     * Adds an 'or where not equals' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereNotEquals($field, $value)\n    {\n        return $this->orWhere($field, Operator::$doesNotEqual, $value);\n    }\n\n    /**\n     * Adds a 'or where approximately equals' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereApproximatelyEquals($field, $value)\n    {\n        return $this->orWhere($field, Operator::$approximatelyEquals, $value);\n    }\n\n    /**\n     * Adds an 'or where contains' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereContains($field, $value)\n    {\n        return $this->orWhere($field, Operator::$contains, $value);\n    }\n\n    /**\n     * Adds an 'or where *not* contains' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereNotContains($field, $value)\n    {\n        return $this->orWhere($field, Operator::$notContains, $value);\n    }\n\n    /**\n     * Adds an 'or where starts with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereStartsWith($field, $value)\n    {\n        return $this->orWhere($field, Operator::$startsWith, $value);\n    }\n\n    /**\n     * Adds an 'or where *not* starts with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereNotStartsWith($field, $value)\n    {\n        return $this->orWhere($field, Operator::$notStartsWith, $value);\n    }\n\n    /**\n     * Adds an 'or where ends with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereEndsWith($field, $value)\n    {\n        return $this->orWhere($field, Operator::$endsWith, $value);\n    }\n\n    /**\n     * Adds an 'or where *not* ends with' clause to the current query.\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return Builder\n     */\n    public function orWhereNotEndsWith($field, $value)\n    {\n        return $this->orWhere($field, Operator::$notEndsWith, $value);\n    }\n\n    /**\n     * Adds an 'or where member of' filter to the current query.\n     *\n     * @param string $dn\n     *\n     * @return Builder\n     */\n    public function orWhereMemberOf($dn)\n    {\n        return $this->orWhereEquals($this->schema->memberOfRecursive(), $dn);\n    }\n\n    /**\n     * Adds a filter onto the current query.\n     *\n     * @param string $type     The type of filter to add.\n     * @param array  $bindings The bindings of the filter.\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return $this\n     */\n    public function addFilter($type, array $bindings)\n    {\n        // Here we will ensure we have been given a proper filter type.\n        if (!array_key_exists($type, $this->filters)) {\n            throw new InvalidArgumentException(\"Invalid filter type: {$type}.\");\n        }\n\n        // The required filter key bindings.\n        $required = ['field', 'operator', 'value'];\n\n        // Here we will ensure the proper key bindings are given.\n        if (count(array_intersect_key(array_flip($required), $bindings)) !== count($required)) {\n            // Retrieve the keys that are missing in the bindings array.\n            $missing = implode(', ', array_diff($required, array_flip($bindings)));\n\n            throw new InvalidArgumentException(\"Invalid filter bindings. Missing: {$missing} keys.\");\n        }\n\n        $this->filters[$type][] = $bindings;\n\n        return $this;\n    }\n\n    /**\n     * Clear the query builders filters.\n     *\n     * @return $this\n     */\n    public function clearFilters()\n    {\n        foreach ($this->filters as $type => $filters) {\n            $this->filters[$type] = [];\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns true / false depending if the current object\n     * contains selects.\n     *\n     * @return bool\n     */\n    public function hasSelects()\n    {\n        return count($this->getSelects()) > 0;\n    }\n\n    /**\n     * Returns the current selected fields to retrieve.\n     *\n     * @return array\n     */\n    public function getSelects()\n    {\n        $selects = $this->columns;\n\n        // If the asterisk is not provided in the selected columns, we need to\n        // ensure we always select the object class and category, as these\n        // are used for constructing models. The asterisk indicates that\n        // we want all attributes returned for LDAP records.\n        if (!in_array('*', $selects)) {\n            $selects[] = $this->schema->objectCategory();\n            $selects[] = $this->schema->objectClass();\n        }\n\n        return $selects;\n    }\n\n    /**\n     * Sorts the LDAP search results by the specified field and direction.\n     *\n     * @param string   $field\n     * @param string   $direction\n     * @param int|null $flags\n     *\n     * @return Builder\n     */\n    public function sortBy($field, $direction = 'asc', $flags = null)\n    {\n        $this->sortByField = $field;\n\n        // Normalize direction.\n        $direction = strtolower($direction);\n\n        if ($direction === 'asc' || $direction === 'desc') {\n            $this->sortByDirection = $direction;\n        }\n\n        if (is_null($flags)) {\n            $this->sortByFlags = SORT_NATURAL + SORT_FLAG_CASE;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Set the query to search on the base distinguished name.\n     *\n     * This will result in one record being returned.\n     *\n     * @return Builder\n     */\n    public function read()\n    {\n        $this->type = 'read';\n\n        return $this;\n    }\n\n    /**\n     * Set the query to search one level on the base distinguished name.\n     *\n     * @return Builder\n     */\n    public function listing()\n    {\n        $this->type = 'listing';\n\n        return $this;\n    }\n\n    /**\n     * Sets the query to search the entire directory on the base distinguished name.\n     *\n     * @return Builder\n     */\n    public function recursive()\n    {\n        $this->type = 'search';\n\n        return $this;\n    }\n\n    /**\n     * Whether to return the LDAP results in their raw format.\n     *\n     * @param bool $raw\n     *\n     * @return Builder\n     */\n    public function raw($raw = true)\n    {\n        $this->raw = (bool) $raw;\n\n        return $this;\n    }\n\n    /**\n     * Whether the current query is nested.\n     *\n     * @param bool $nested\n     *\n     * @return Builder\n     */\n    public function nested($nested = true)\n    {\n        $this->nested = (bool) $nested;\n\n        return $this;\n    }\n\n    /**\n     * Enables caching on the current query until the given date.\n     *\n     * If flushing is enabled, the query cache will be flushed and then re-cached.\n     *\n     * @param \\DateTimeInterface $until When to expire the query cache.\n     * @param bool               $flush Whether to force-flush the query cache.\n     *\n     * @return $this\n     */\n    public function cache(\\DateTimeInterface $until = null, $flush = false)\n    {\n        $this->caching = true;\n        $this->cacheUntil = $until;\n        $this->flushCache = $flush;\n\n        return $this;\n    }\n\n    /**\n     * Returns an escaped string for use in an LDAP filter.\n     *\n     * @param string $value\n     * @param string $ignore\n     * @param int    $flags\n     *\n     * @return string\n     */\n    public function escape($value, $ignore = '', $flags = 0)\n    {\n        return ldap_escape($value, $ignore, $flags);\n    }\n\n    /**\n     * Returns the query builders sort by field.\n     *\n     * @return string\n     */\n    public function getSortByField()\n    {\n        return $this->sortByField;\n    }\n\n    /**\n     * Returns the query builders sort by direction.\n     *\n     * @return string\n     */\n    public function getSortByDirection()\n    {\n        return $this->sortByDirection;\n    }\n\n    /**\n     * Returns the query builders sort by flags.\n     *\n     * @return int\n     */\n    public function getSortByFlags()\n    {\n        return $this->sortByFlags;\n    }\n\n    /**\n     * Returns true / false if the current query is nested.\n     *\n     * @return bool\n     */\n    public function isNested()\n    {\n        return $this->nested === true;\n    }\n\n    /**\n     * Returns bool that determines whether the current\n     * query builder will return raw results.\n     *\n     * @return bool\n     */\n    public function isRaw()\n    {\n        return $this->raw;\n    }\n\n    /**\n     * Returns bool that determines whether the current\n     * query builder will return paginated results.\n     *\n     * @return bool\n     */\n    public function isPaginated()\n    {\n        return $this->paginated;\n    }\n\n    /**\n     * Returns bool that determines whether the current\n     * query builder will return sorted results.\n     *\n     * @return bool\n     */\n    public function isSorted()\n    {\n        return $this->sortByField ? true : false;\n    }\n\n    /**\n     * Handle dynamic method calls on the query builder object to be directed to the query processor.\n     *\n     * @param string $method\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        // We'll check if the beginning of the method being called contains\n        // 'where'. If so, we'll assume it's a dynamic 'where' clause.\n        if (substr($method, 0, 5) === 'where') {\n            return $this->dynamicWhere($method, $parameters);\n        }\n\n        return call_user_func_array([$this->newProcessor(), $method], $parameters);\n    }\n\n    /**\n     * Handles dynamic \"where\" clauses to the query.\n     *\n     * @param string $method\n     * @param array  $parameters\n     *\n     * @return Builder\n     */\n    public function dynamicWhere($method, $parameters)\n    {\n        $finder = substr($method, 5);\n\n        $segments = preg_split('/(And|Or)(?=[A-Z])/', $finder, -1, PREG_SPLIT_DELIM_CAPTURE);\n\n        // The connector variable will determine which connector will be used for the\n        // query condition. We will change it as we come across new boolean values\n        // in the dynamic method strings, which could contain a number of these.\n        $connector = 'and';\n\n        $index = 0;\n\n        foreach ($segments as $segment) {\n            // If the segment is not a boolean connector, we can assume it is a column's name\n            // and we will add it to the query as a new constraint as a where clause, then\n            // we can keep iterating through the dynamic method string's segments again.\n            if ($segment != 'And' && $segment != 'Or') {\n                $this->addDynamic($segment, $connector, $parameters, $index);\n\n                $index++;\n            }\n\n            // Otherwise, we will store the connector so we know how the next where clause we\n            // find in the query should be connected to the previous ones, meaning we will\n            // have the proper boolean connector to connect the next where clause found.\n            else {\n                $connector = $segment;\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Adds an array of wheres to the current query.\n     *\n     * @param array  $wheres\n     * @param string $boolean\n     * @param bool   $raw\n     *\n     * @return Builder\n     */\n    protected function addArrayOfWheres($wheres, $boolean, $raw)\n    {\n        foreach ($wheres as $key => $value) {\n            if (is_numeric($key) && is_array($value)) {\n                // If the key is numeric and the value is an array, we'll\n                // assume we've been given an array with conditionals.\n                list($field, $condition) = $value;\n\n                // Since a value is optional for some conditionals, we will\n                // try and retrieve the third parameter from the array,\n                // but is entirely optional.\n                $value = Arr::get($value, 2);\n\n                $this->where($field, $condition, $value, $boolean);\n            } else {\n                // If the value is not an array, we will assume an equals clause.\n                $this->where($key, Operator::$equals, $value, $boolean, $raw);\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add a single dynamic where clause statement to the query.\n     *\n     * @param string $segment\n     * @param string $connector\n     * @param array  $parameters\n     * @param int    $index\n     *\n     * @return void\n     */\n    protected function addDynamic($segment, $connector, $parameters, $index)\n    {\n        // We'll format the 'where' boolean and field here to avoid casing issues.\n        $bool = strtolower($connector);\n        $field = strtolower($segment);\n\n        $this->where($field, '=', $parameters[$index], $bool);\n    }\n\n    /**\n     * Logs the given executed query information by firing its query event.\n     *\n     * @param Builder    $query\n     * @param string     $type\n     * @param null|float $time\n     */\n    protected function logQuery($query, $type, $time = null)\n    {\n        $args = [$query, $time];\n\n        switch ($type) {\n            case 'listing':\n                $event = new Events\\Listing(...$args);\n                break;\n            case 'read':\n                $event = new Events\\Read(...$args);\n                break;\n            case 'paginate':\n                $event = new Events\\Paginate(...$args);\n                break;\n            default:\n                $event = new Events\\Search(...$args);\n                break;\n        }\n\n        $this->fireQueryEvent($event);\n    }\n\n    /**\n     * Fires the given query event.\n     *\n     * @param QueryExecuted $event\n     */\n    protected function fireQueryEvent(QueryExecuted $event)\n    {\n        Adldap::getEventDispatcher()->fire($event);\n    }\n\n    /**\n     * Get the elapsed time since a given starting point.\n     *\n     * @param int $start\n     *\n     * @return float\n     */\n    protected function getElapsedTime($start)\n    {\n        return round((microtime(true) - $start) * 1000, 2);\n    }\n\n    /**\n     * Returns a new query Processor instance.\n     *\n     * @return Processor\n     */\n    protected function newProcessor()\n    {\n        return new Processor($this);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Cache.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse Closure;\nuse Psr\\SimpleCache\\CacheInterface;\n\nclass Cache\n{\n    /**\n     * The cache driver.\n     *\n     * @var CacheInterface\n     */\n    protected $store;\n\n    /**\n     * Constructor.\n     *\n     * @param CacheInterface $store\n     */\n    public function __construct(CacheInterface $store)\n    {\n        $this->store = $store;\n    }\n\n    /**\n     * Get an item from the cache.\n     *\n     * @param string $key\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *\n     * @return mixed\n     */\n    public function get($key)\n    {\n        return $this->store->get($key);\n    }\n\n    /**\n     * Store an item in the cache.\n     *\n     * @param string                                    $key\n     * @param mixed                                     $value\n     * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *\n     * @return bool\n     */\n    public function put($key, $value, $ttl = null)\n    {\n        return $this->store->set($key, $value, $ttl);\n    }\n\n    /**\n     * Get an item from the cache, or execute the given Closure and store the result.\n     *\n     * @param string                                    $key\n     * @param \\DateTimeInterface|\\DateInterval|int|null $ttl\n     * @param Closure                                   $callback\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *\n     * @return mixed\n     */\n    public function remember($key, $ttl, Closure $callback)\n    {\n        $value = $this->get($key);\n\n        if (!is_null($value)) {\n            return $value;\n        }\n\n        $this->put($key, $value = $callback(), $ttl);\n\n        return $value;\n    }\n\n    /**\n     * Delete an item from the cache.\n     *\n     * @param string $key\n     *\n     * @throws \\Psr\\Cache\\InvalidArgumentException\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *\n     * @return bool\n     */\n    public function delete($key)\n    {\n        return $this->store->delete($key);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Collection.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse Adldap\\Models\\Model;\nuse Illuminate\\Support\\Collection as BaseCollection;\n\nclass Collection extends BaseCollection\n{\n    /**\n     * {@inheritdoc}\n     */\n    protected function valueRetriever($value)\n    {\n        if ($this->useAsCallable($value)) {\n            return $value;\n        }\n\n        return function ($item) use ($value) {\n            if ($item instanceof Model) {\n                return $item->getFirstAttribute($value);\n            }\n\n            return data_get($item, $value);\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Events/Listing.php",
    "content": "<?php\n\nnamespace Adldap\\Query\\Events;\n\nclass Listing extends QueryExecuted\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Events/Paginate.php",
    "content": "<?php\n\nnamespace Adldap\\Query\\Events;\n\nclass Paginate extends QueryExecuted\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Events/QueryExecuted.php",
    "content": "<?php\n\nnamespace Adldap\\Query\\Events;\n\nuse Adldap\\Query\\Builder;\n\nclass QueryExecuted\n{\n    /**\n     * The LDAP filter that was used for the query.\n     *\n     * @var string\n     */\n    protected $query;\n\n    /**\n     * The number of milliseconds it took to execute the query.\n     *\n     * @var float\n     */\n    protected $time;\n\n    /**\n     * Constructor.\n     *\n     * @param Builder    $query\n     * @param null|float $time\n     */\n    public function __construct(Builder $query, $time = null)\n    {\n        $this->query = $query;\n        $this->time = $time;\n    }\n\n    /**\n     * Returns the LDAP filter that was used for the query.\n     *\n     * @return Builder\n     */\n    public function getQuery()\n    {\n        return $this->query;\n    }\n\n    /**\n     * Returns the number of milliseconds it took to execute the query.\n     *\n     * @return float|null\n     */\n    public function getTime()\n    {\n        return $this->time;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Events/Read.php",
    "content": "<?php\n\nnamespace Adldap\\Query\\Events;\n\nclass Read extends QueryExecuted\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Events/Search.php",
    "content": "<?php\n\nnamespace Adldap\\Query\\Events;\n\nclass Search extends QueryExecuted\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Factory.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse Adldap\\Models\\RootDse;\nuse Adldap\\Schemas\\ActiveDirectory;\nuse Adldap\\Schemas\\SchemaInterface;\nuse Adldap\\Connections\\ConnectionInterface;\n\n/**\n * Adldap2 Search Factory.\n *\n * Constructs new LDAP queries.\n *\n *\n * @mixin Builder\n */\nclass Factory\n{\n    /**\n     * @var ConnectionInterface\n     */\n    protected $connection;\n\n    /**\n     * Stores the current schema instance.\n     *\n     * @var SchemaInterface\n     */\n    protected $schema;\n\n    /**\n     * The base DN to use for the search.\n     *\n     * @var string|null\n     */\n    protected $base;\n\n    /**\n     * The query cache.\n     *\n     * @var Cache\n     */\n    protected $cache;\n\n    /**\n     * Constructor.\n     *\n     * @param ConnectionInterface  $connection The connection to use when constructing a new query.\n     * @param SchemaInterface|null $schema     The schema to use for the query and models located.\n     * @param string               $baseDn     The base DN to use for all searches.\n     */\n    public function __construct(ConnectionInterface $connection, SchemaInterface $schema = null, $baseDn = '')\n    {\n        $this->setConnection($connection)\n            ->setSchema($schema)\n            ->setBaseDn($baseDn);\n    }\n\n    /**\n     * Sets the connection property.\n     *\n     * @param ConnectionInterface $connection\n     *\n     * @return $this\n     */\n    public function setConnection(ConnectionInterface $connection)\n    {\n        $this->connection = $connection;\n\n        return $this;\n    }\n\n    /**\n     * Sets the schema property.\n     *\n     * @param SchemaInterface|null $schema\n     *\n     * @return $this\n     */\n    public function setSchema(SchemaInterface $schema = null)\n    {\n        $this->schema = $schema ?: new ActiveDirectory();\n\n        return $this;\n    }\n\n    /**\n     * Sets the base distinguished name to perform searches upon.\n     *\n     * @param string $base\n     *\n     * @return $this\n     */\n    public function setBaseDn($base = '')\n    {\n        $this->base = $base;\n\n        return $this;\n    }\n\n    /**\n     * Sets the cache for storing query results.\n     *\n     * @param Cache $cache\n     *\n     * @return $this\n     */\n    public function setCache(Cache $cache)\n    {\n        $this->cache = $cache;\n\n        return $this;\n    }\n\n    /**\n     * Returns a new query builder instance.\n     *\n     * @return Builder\n     */\n    public function newQuery()\n    {\n        return $this->newBuilder()->in($this->base);\n    }\n\n    /**\n     * Performs a global 'all' search query on the current\n     * connection by performing a search for all entries\n     * that contain a common name attribute.\n     *\n     * @return \\Adldap\\Query\\Collection|array\n     */\n    public function get()\n    {\n        return $this->newQuery()->whereHas($this->schema->commonName())->get();\n    }\n\n    /**\n     * Returns a query builder scoped to users.\n     *\n     * @return Builder\n     */\n    public function users()\n    {\n        $wheres = [\n            [$this->schema->objectClass(), Operator::$equals, $this->schema->objectClassUser()],\n            [$this->schema->objectCategory(), Operator::$equals, $this->schema->objectCategoryPerson()],\n        ];\n\n        // OpenLDAP doesn't like specifying the omission of user objectclasses\n        // equal to `contact`. We'll make sure we're working with\n        // ActiveDirectory before adding this filter.\n        if (is_a($this->schema, ActiveDirectory::class)) {\n            $wheres[] = [$this->schema->objectClass(), Operator::$doesNotEqual, $this->schema->objectClassContact()];\n        }\n\n        return $this->where($wheres);\n    }\n\n    /**\n     * Returns a query builder scoped to printers.\n     *\n     * @return Builder\n     */\n    public function printers()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassPrinter(),\n        ]);\n    }\n\n    /**\n     * Returns a query builder scoped to organizational units.\n     *\n     * @return Builder\n     */\n    public function ous()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassOu(),\n        ]);\n    }\n\n    /**\n     * Returns a query builder scoped to organizations.\n     *\n     * @return Builder\n     */\n    public function organizations()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassOrganization(),\n        ]);\n    }\n\n    /**\n     * Returns a query builder scoped to groups.\n     *\n     * @return Builder\n     */\n    public function groups()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassGroup(),\n        ]);\n    }\n\n    /**\n     * Returns a query builder scoped to containers.\n     *\n     * @return Builder\n     */\n    public function containers()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassContainer(),\n        ]);\n    }\n\n    /**\n     * Returns a query builder scoped to contacts.\n     *\n     * @return Builder\n     */\n    public function contacts()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassContact(),\n        ]);\n    }\n\n    /**\n     * Returns a query builder scoped to computers.\n     *\n     * @return Builder\n     */\n    public function computers()\n    {\n        return $this->where([\n            $this->schema->objectClass() => $this->schema->objectClassComputer(),\n        ]);\n    }\n\n    /**\n     * Returns the root DSE record.\n     *\n     * @return RootDse|null\n     */\n    public function getRootDse()\n    {\n        $query = $this->newQuery();\n\n        $root = $query->in('')->read()->whereHas($this->schema->objectClass())->first();\n\n        if ($root) {\n            return (new RootDse([], $query))\n                ->setRawAttributes($root->getAttributes());\n        }\n    }\n\n    /**\n     * Handle dynamic method calls on the query builder object.\n     *\n     * @param string $method\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        return call_user_func_array([$this->newQuery(), $method], $parameters);\n    }\n\n    /**\n     * Returns a new query grammar instance.\n     *\n     * @return Grammar\n     */\n    protected function newGrammar()\n    {\n        return new Grammar();\n    }\n\n    /**\n     * Returns a new query builder instance.\n     *\n     * @return Builder\n     */\n    protected function newBuilder()\n    {\n        $builder = new Builder($this->connection, $this->newGrammar(), $this->schema);\n\n        $builder->setCache($this->cache);\n\n        return $builder;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Grammar.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nclass Grammar\n{\n    /**\n     * Wraps a query string in brackets.\n     *\n     * Produces: (query)\n     *\n     * @param string $query\n     * @param string $prefix\n     * @param string $suffix\n     *\n     * @return string\n     */\n    public function wrap($query, $prefix = '(', $suffix = ')')\n    {\n        return $prefix.$query.$suffix;\n    }\n\n    /**\n     * Compiles the Builder instance into an LDAP query string.\n     *\n     * @param Builder $builder\n     *\n     * @return string\n     */\n    public function compile(Builder $builder)\n    {\n        $ands = $builder->filters['and'];\n        $ors = $builder->filters['or'];\n        $raws = $builder->filters['raw'];\n\n        $query = $this->concatenate($raws);\n\n        $query = $this->compileWheres($ands, $query);\n\n        $query = $this->compileOrWheres($ors, $query);\n\n        // We need to check if the query is already nested, otherwise\n        // we'll nest it here and return the result.\n        if (!$builder->isNested()) {\n            $total = count($ands) + count($raws);\n\n            // Make sure we wrap the query in an 'and' if using\n            // multiple filters. We also need to check if only\n            // one where is used with multiple orWheres, that\n            // we wrap it in an `and` query.\n            if ($total > 1 || (count($ands) === 1 && count($ors) > 0)) {\n                $query = $this->compileAnd($query);\n            }\n        }\n\n        return $query;\n    }\n\n    /**\n     * Concatenates filters into a single string.\n     *\n     * @param array $bindings\n     *\n     * @return string\n     */\n    public function concatenate(array $bindings = [])\n    {\n        // Filter out empty query segments.\n        $bindings = array_filter($bindings, function ($value) {\n            return (string) $value !== '';\n        });\n\n        return implode('', $bindings);\n    }\n\n    /**\n     * Returns a query string for equals.\n     *\n     * Produces: (field=value)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileEquals($field, $value)\n    {\n        return $this->wrap($field.Operator::$equals.$value);\n    }\n\n    /**\n     * Returns a query string for does not equal.\n     *\n     * Produces: (!(field=value))\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileDoesNotEqual($field, $value)\n    {\n        return $this->compileNot($this->compileEquals($field, $value));\n    }\n\n    /**\n     * Alias for does not equal operator (!=) operator.\n     *\n     * Produces: (!(field=value))\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileDoesNotEqualAlias($field, $value)\n    {\n        return $this->compileDoesNotEqual($field, $value);\n    }\n\n    /**\n     * Returns a query string for greater than or equals.\n     *\n     * Produces: (field>=value)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileGreaterThanOrEquals($field, $value)\n    {\n        return $this->wrap($field.Operator::$greaterThanOrEquals.$value);\n    }\n\n    /**\n     * Returns a query string for less than or equals.\n     *\n     * Produces: (field<=value)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileLessThanOrEquals($field, $value)\n    {\n        return $this->wrap($field.Operator::$lessThanOrEquals.$value);\n    }\n\n    /**\n     * Returns a query string for approximately equals.\n     *\n     * Produces: (field~=value)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileApproximatelyEquals($field, $value)\n    {\n        return $this->wrap($field.Operator::$approximatelyEquals.$value);\n    }\n\n    /**\n     * Returns a query string for starts with.\n     *\n     * Produces: (field=value*)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileStartsWith($field, $value)\n    {\n        return $this->wrap($field.Operator::$equals.$value.Operator::$has);\n    }\n\n    /**\n     * Returns a query string for does not start with.\n     *\n     * Produces: (!(field=*value))\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileNotStartsWith($field, $value)\n    {\n        return $this->compileNot($this->compileStartsWith($field, $value));\n    }\n\n    /**\n     * Returns a query string for ends with.\n     *\n     * Produces: (field=*value)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileEndsWith($field, $value)\n    {\n        return $this->wrap($field.Operator::$equals.Operator::$has.$value);\n    }\n\n    /**\n     * Returns a query string for does not end with.\n     *\n     * Produces: (!(field=value*))\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileNotEndsWith($field, $value)\n    {\n        return $this->compileNot($this->compileEndsWith($field, $value));\n    }\n\n    /**\n     * Returns a query string for contains.\n     *\n     * Produces: (field=*value*)\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileContains($field, $value)\n    {\n        return $this->wrap($field.Operator::$equals.Operator::$has.$value.Operator::$has);\n    }\n\n    /**\n     * Returns a query string for does not contain.\n     *\n     * Produces: (!(field=*value*))\n     *\n     * @param string $field\n     * @param string $value\n     *\n     * @return string\n     */\n    public function compileNotContains($field, $value)\n    {\n        return $this->compileNot($this->compileContains($field, $value));\n    }\n\n    /**\n     * Returns a query string for a where has.\n     *\n     * Produces: (field=*)\n     *\n     * @param string $field\n     *\n     * @return string\n     */\n    public function compileHas($field)\n    {\n        return $this->wrap($field.Operator::$equals.Operator::$has);\n    }\n\n    /**\n     * Returns a query string for a where does not have.\n     *\n     * Produces: (!(field=*))\n     *\n     * @param string $field\n     *\n     * @return string\n     */\n    public function compileNotHas($field)\n    {\n        return $this->compileNot($this->compileHas($field));\n    }\n\n    /**\n     * Wraps the inserted query inside an AND operator.\n     *\n     * Produces: (&query)\n     *\n     * @param string $query\n     *\n     * @return string\n     */\n    public function compileAnd($query)\n    {\n        return $query ? $this->wrap($query, '(&') : '';\n    }\n\n    /**\n     * Wraps the inserted query inside an OR operator.\n     *\n     * Produces: (|query)\n     *\n     * @param string $query\n     *\n     * @return string\n     */\n    public function compileOr($query)\n    {\n        return $query ? $this->wrap($query, '(|') : '';\n    }\n\n    /**\n     * Wraps the inserted query inside an NOT operator.\n     *\n     * @param string $query\n     *\n     * @return string\n     */\n    public function compileNot($query)\n    {\n        return $query ? $this->wrap($query, '(!') : '';\n    }\n\n    /**\n     * Assembles all where clauses in the current wheres property.\n     *\n     * @param array  $wheres\n     * @param string $query\n     *\n     * @return string\n     */\n    protected function compileWheres(array $wheres = [], $query = '')\n    {\n        foreach ($wheres as $where) {\n            $query .= $this->compileWhere($where);\n        }\n\n        return $query;\n    }\n\n    /**\n     * Assembles all or where clauses in the current orWheres property.\n     *\n     * @param array  $orWheres\n     * @param string $query\n     *\n     * @return string\n     */\n    protected function compileOrWheres(array $orWheres = [], $query = '')\n    {\n        $or = '';\n\n        foreach ($orWheres as $where) {\n            $or .= $this->compileWhere($where);\n        }\n\n        // Make sure we wrap the query in an 'or' if using multiple\n        // orWheres. For example (|(QUERY)(ORWHEREQUERY)).\n        if (($query && count($orWheres) > 0) || count($orWheres) > 1) {\n            $query .= $this->compileOr($or);\n        } else {\n            $query .= $or;\n        }\n\n        return $query;\n    }\n\n    /**\n     * Assembles a single where query based\n     * on its operator and returns it.\n     *\n     * @param array $where\n     *\n     * @return string|null\n     */\n    protected function compileWhere(array $where)\n    {\n        // Get the name of the operator.\n        if ($name = array_search($where['operator'], Operator::all())) {\n            // If the name was found we'll camel case it\n            // to run it through the compile method.\n            $method = 'compile'.ucfirst($name);\n\n            // Make sure the compile method exists for the operator.\n            if (method_exists($this, $method)) {\n                return $this->{$method}($where['field'], $where['value']);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Operator.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse ReflectionClass;\n\nclass Operator\n{\n    /**\n     * The 'has' wildcard operator.\n     *\n     * @var string\n     */\n    public static $has = '*';\n\n    /**\n     * The custom `notHas` operator.\n     *\n     * @var string\n     */\n    public static $notHas = '!*';\n\n    /**\n     * The equals operator.\n     *\n     * @var string\n     */\n    public static $equals = '=';\n\n    /**\n     * The does not equal operator.\n     *\n     * @var string\n     */\n    public static $doesNotEqual = '!';\n\n    /**\n     * The does not equal operator (alias).\n     *\n     * @var string\n     */\n    public static $doesNotEqualAlias = '!=';\n\n    /**\n     * The greater than or equal to operator.\n     *\n     * @var string\n     */\n    public static $greaterThanOrEquals = '>=';\n\n    /**\n     * The less than or equal to operator.\n     *\n     * @var string\n     */\n    public static $lessThanOrEquals = '<=';\n\n    /**\n     * The approximately equal to operator.\n     *\n     * @var string\n     */\n    public static $approximatelyEquals = '~=';\n\n    /**\n     * The custom starts with operator.\n     *\n     * @var string\n     */\n    public static $startsWith = 'starts_with';\n\n    /**\n     * The custom not starts with operator.\n     *\n     * @var string\n     */\n    public static $notStartsWith = 'not_starts_with';\n\n    /**\n     * The custom ends with operator.\n     *\n     * @var string\n     */\n    public static $endsWith = 'ends_with';\n\n    /**\n     * The custom not ends with operator.\n     *\n     * @var string\n     */\n    public static $notEndsWith = 'not_ends_with';\n\n    /**\n     * The custom contains operator.\n     *\n     * @var string\n     */\n    public static $contains = 'contains';\n\n    /**\n     * The custom not contains operator.\n     *\n     * @var string\n     */\n    public static $notContains = 'not_contains';\n\n    /**\n     * Returns all available operators.\n     *\n     * @return array\n     */\n    public static function all()\n    {\n        return (new ReflectionClass(new static()))->getStaticProperties();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Paginator.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse Countable;\nuse ArrayIterator;\nuse IteratorAggregate;\n\nclass Paginator implements Countable, IteratorAggregate\n{\n    /**\n     * The complete results array.\n     *\n     * @var array\n     */\n    protected $results = [];\n\n    /**\n     * The total amount of pages.\n     *\n     * @var int\n     */\n    protected $pages;\n\n    /**\n     * The amount of entries per page.\n     *\n     * @var int\n     */\n    protected $perPage;\n\n    /**\n     * The current page number.\n     *\n     * @var int\n     */\n    protected $currentPage;\n\n    /**\n     * The current entry offset number.\n     *\n     * @var int\n     */\n    protected $currentOffset;\n\n    /**\n     * Constructor.\n     *\n     * @param array $results\n     * @param int   $perPage\n     * @param int   $currentPage\n     * @param int   $pages\n     */\n    public function __construct(array $results = [], $perPage = 50, $currentPage = 0, $pages = 0)\n    {\n        $this->setResults($results)\n            ->setPerPage($perPage)\n            ->setCurrentPage($currentPage)\n            ->setPages($pages)\n            ->setCurrentOffset(($this->getCurrentPage() * $this->getPerPage()));\n    }\n\n    /**\n     * Get an iterator for the entries.\n     *\n     * @return ArrayIterator\n     */\n    public function getIterator()\n    {\n        $entries = array_slice($this->getResults(), $this->getCurrentOffset(), $this->getPerPage(), true);\n\n        return new ArrayIterator($entries);\n    }\n\n    /**\n     * Returns the complete results array.\n     *\n     * @return array\n     */\n    public function getResults()\n    {\n        return $this->results;\n    }\n\n    /**\n     * Returns the total amount of pages\n     * in a paginated result.\n     *\n     * @return int\n     */\n    public function getPages()\n    {\n        return $this->pages;\n    }\n\n    /**\n     * Returns the total amount of entries\n     * allowed per page.\n     *\n     * @return int\n     */\n    public function getPerPage()\n    {\n        return $this->perPage;\n    }\n\n    /**\n     * Returns the current page number.\n     *\n     * @return int\n     */\n    public function getCurrentPage()\n    {\n        return $this->currentPage;\n    }\n\n    /**\n     * Returns the current offset number.\n     *\n     * @return int\n     */\n    public function getCurrentOffset()\n    {\n        return $this->currentOffset;\n    }\n\n    /**\n     * Returns the total amount of results.\n     *\n     * @return int\n     */\n    public function count()\n    {\n        return count($this->results);\n    }\n\n    /**\n     * Sets the results array property.\n     *\n     * @param array $results\n     *\n     * @return Paginator\n     */\n    protected function setResults(array $results)\n    {\n        $this->results = $results;\n\n        return $this;\n    }\n\n    /**\n     * Sets the total number of pages.\n     *\n     * @param int $pages\n     *\n     * @return Paginator\n     */\n    protected function setPages($pages = 0)\n    {\n        $this->pages = (int) $pages;\n\n        return $this;\n    }\n\n    /**\n     * Sets the number of entries per page.\n     *\n     * @param int $perPage\n     *\n     * @return Paginator\n     */\n    protected function setPerPage($perPage = 50)\n    {\n        $this->perPage = (int) $perPage;\n\n        return $this;\n    }\n\n    /**\n     * Sets the current page number.\n     *\n     * @param int $currentPage\n     *\n     * @return Paginator\n     */\n    protected function setCurrentPage($currentPage = 0)\n    {\n        $this->currentPage = (int) $currentPage;\n\n        return $this;\n    }\n\n    /**\n     * Sets the current offset number.\n     *\n     * @param int $offset\n     *\n     * @return Paginator\n     */\n    protected function setCurrentOffset($offset = 0)\n    {\n        $this->currentOffset = (int) $offset;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Query/Processor.php",
    "content": "<?php\n\nnamespace Adldap\\Query;\n\nuse Adldap\\Models\\Entry;\nuse Adldap\\Models\\Model;\nuse InvalidArgumentException;\nuse Adldap\\Schemas\\SchemaInterface;\nuse Adldap\\Connections\\ConnectionInterface;\n\nclass Processor\n{\n    /**\n     * @var Builder\n     */\n    protected $builder;\n\n    /**\n     * @var ConnectionInterface\n     */\n    protected $connection;\n\n    /**\n     * @var SchemaInterface\n     */\n    protected $schema;\n\n    /**\n     * Constructor.\n     *\n     * @param Builder $builder\n     */\n    public function __construct(Builder $builder)\n    {\n        $this->builder = $builder;\n        $this->schema = $builder->getSchema();\n        $this->connection = $builder->getConnection();\n    }\n\n    /**\n     * Processes LDAP search results and constructs their model instances.\n     *\n     * @param array $entries The LDAP entries to process.\n     *\n     * @return Collection|array\n     */\n    public function process($entries)\n    {\n        if ($this->builder->isRaw()) {\n            // If the builder is asking for a raw\n            // LDAP result, we can return here.\n            return $entries;\n        }\n\n        $models = [];\n\n        if (array_key_exists('count', $entries)) {\n            for ($i = 0; $i < $entries['count']; $i++) {\n                // We'll go through each entry and construct a new\n                // model instance with the raw LDAP attributes.\n                $models[] = $this->newLdapEntry($entries[$i]);\n            }\n        }\n\n        // If the query contains paginated results, we'll return them here.\n        if ($this->builder->isPaginated()) {\n            return $models;\n        }\n\n        // If the query is requested to be sorted, we'll perform\n        // that here and return the resulting collection.\n        if ($this->builder->isSorted()) {\n            return $this->processSort($models);\n        }\n\n        // Otherwise, we'll return a regular unsorted collection.\n        return $this->newCollection($models);\n    }\n\n    /**\n     * Processes paginated LDAP results.\n     *\n     * @param array $pages\n     * @param int   $perPage\n     * @param int   $currentPage\n     *\n     * @return Paginator\n     */\n    public function processPaginated(array $pages = [], $perPage = 50, $currentPage = 0)\n    {\n        $models = [];\n\n        foreach ($pages as $entries) {\n            // Go through each page and process the results into an objects array.\n            $models = array_merge($models, $this->process($entries));\n        }\n\n        $models = $this->processSort($models)->toArray();\n\n        return $this->newPaginator($models, $perPage, $currentPage, count($pages));\n    }\n\n    /**\n     * Returns a new LDAP Entry instance.\n     *\n     * @param array $attributes\n     *\n     * @return Entry\n     */\n    public function newLdapEntry(array $attributes = [])\n    {\n        $objectClass = $this->schema->objectClass();\n\n        // We need to ensure the record contains an object class to be able to\n        // determine its type. Otherwise, we create a default Entry model.\n        if (array_key_exists($objectClass, $attributes) && array_key_exists(0, $attributes[$objectClass])) {\n            // Retrieve all of the object classes from the LDAP\n            // entry and lowercase them for comparisons.\n            $classes = array_map('strtolower', $attributes[$objectClass]);\n\n            // Retrieve the model mapping.\n            $models = $this->schema->objectClassModelMap();\n\n            // Retrieve the object class mappings (with strtolower keys).\n            $mappings = array_map('strtolower', array_keys($models));\n\n            // Retrieve the model from the map using the entry's object class.\n            $map = array_intersect($mappings, $classes);\n\n            if (count($map) > 0) {\n                // Retrieve the model using the object class.\n                $model = $models[current($map)];\n\n                // Construct and return a new model.\n                return $this->newModel([], $model)\n                    ->setRawAttributes($attributes);\n            }\n        }\n\n        // A default entry model if the object class isn't found.\n        return $this->newModel()->setRawAttributes($attributes);\n    }\n\n    /**\n     * Creates a new model instance.\n     *\n     * @param array       $attributes\n     * @param string|null $model\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return mixed|Entry\n     */\n    public function newModel($attributes = [], $model = null)\n    {\n        $model = (class_exists($model) ? $model : $this->schema->entryModel());\n\n        if (!is_subclass_of($model, $base = Model::class)) {\n            throw new InvalidArgumentException(\"The given model class '{$model}' must extend the base model class '{$base}'\");\n        }\n\n        return new $model($attributes, $this->builder->newInstance());\n    }\n\n    /**\n     * Returns a new Paginator object instance.\n     *\n     * @param array $models\n     * @param int   $perPage\n     * @param int   $currentPage\n     * @param int   $pages\n     *\n     * @return Paginator\n     */\n    public function newPaginator(array $models = [], $perPage = 25, $currentPage = 0, $pages = 1)\n    {\n        return new Paginator($models, $perPage, $currentPage, $pages);\n    }\n\n    /**\n     * Returns a new collection instance.\n     *\n     * @param array $items\n     *\n     * @return Collection\n     */\n    public function newCollection(array $items = [])\n    {\n        return new Collection($items);\n    }\n\n    /**\n     * Sorts LDAP search results.\n     *\n     * @param array $models\n     *\n     * @return Collection\n     */\n    protected function processSort(array $models = [])\n    {\n        $field = $this->builder->getSortByField();\n\n        $flags = $this->builder->getSortByFlags();\n\n        $direction = $this->builder->getSortByDirection();\n\n        $desc = ($direction === 'desc' ? true : false);\n\n        return $this->newCollection($models)->sortBy($field, $flags, $desc);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/ActiveDirectory.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\nclass ActiveDirectory extends Schema\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedName()\n    {\n        return 'distinguishedname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedNameSubKey()\n    {\n        return 0;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterEnabled()\n    {\n        return '(!(UserAccountControl:1.2.840.113556.1.4.803:=2))';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterDisabled()\n    {\n        return '(UserAccountControl:1.2.840.113556.1.4.803:=2)';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lockoutTime()\n    {\n        return 'lockouttime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassGroup()\n    {\n        return 'group';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassOu()\n    {\n        return 'organizationalunit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassPerson()\n    {\n        return 'person';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuid()\n    {\n        return 'objectguid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuidRequiresConversion()\n    {\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategory()\n    {\n        return 'objectcategory';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/Directory389.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\nclass Directory389 extends Schema\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function accountName()\n    {\n        return 'uid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedName()\n    {\n        return 'dn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedNameSubKey()\n    {\n        //\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterEnabled()\n    {\n        return sprintf('(!(%s=*))', $this->lockoutTime());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterDisabled()\n    {\n        return sprintf('(%s=*)', $this->lockoutTime());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lockoutTime()\n    {\n        return 'pwdAccountLockedTime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategory()\n    {\n        return 'objectclass';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassGroup()\n    {\n        return 'groupofnames';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassOu()\n    {\n        return 'organizationalUnit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassPerson()\n    {\n        return 'inetorgperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassUser()\n    {\n        return 'inetorgperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuid()\n    {\n        return 'nsuniqueid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuidRequiresConversion()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/EDirectory.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\nclass EDirectory extends Schema\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function accountName()\n    {\n        return 'uid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedName()\n    {\n        return 'dn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedNameSubKey()\n    {\n        //\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterEnabled()\n    {\n        return sprintf('(!(%s=*))', $this->lockoutTime());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterDisabled()\n    {\n        return sprintf('(%s=*)', $this->lockoutTime());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lockoutTime()\n    {\n        return 'pwdAccountLockedTime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategory()\n    {\n        return 'objectclass';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassGroup()\n    {\n        return 'groupofnames';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassOu()\n    {\n        return 'organizationalUnit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassPerson()\n    {\n        return 'inetorgperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassUser()\n    {\n        return 'inetorgperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuid()\n    {\n        return 'guid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuidRequiresConversion()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/FreeIPA.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\nclass FreeIPA extends Schema\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function accountName()\n    {\n        return 'uid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedName()\n    {\n        return 'dn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategory()\n    {\n        return 'objectclass';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassGroup()\n    {\n        return 'ipausergroup';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userPrincipalName()\n    {\n        return 'krbCanonicalName';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedNameSubKey()\n    {\n        return 0;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterEnabled()\n    {\n        return '(!(UserAccountControl:1.2.840.113556.1.4.803:=2))';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterDisabled()\n    {\n        return '(UserAccountControl:1.2.840.113556.1.4.803:=2)';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lockoutTime()\n    {\n        return 'lockouttime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function passwordLastSet()\n    {\n        return 'krbLastPwdChange';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassOu()\n    {\n        return 'organizationalunit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassPerson()\n    {\n        return 'person';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassUser()\n    {\n        return 'organizationalPerson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuid()\n    {\n        return 'ipaUniqueID';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuidRequiresConversion()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/OpenLDAP.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\nclass OpenLDAP extends Schema\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function accountName()\n    {\n        return 'uid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedName()\n    {\n        return 'dn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function distinguishedNameSubKey()\n    {\n        //\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterEnabled()\n    {\n        return sprintf('(!(%s=*))', $this->lockoutTime());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function filterDisabled()\n    {\n        return sprintf('(%s=*)', $this->lockoutTime());\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lockoutTime()\n    {\n        return 'pwdAccountLockedTime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategory()\n    {\n        return 'objectclass';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassGroup()\n    {\n        return 'groupofnames';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassOu()\n    {\n        return 'organizationalUnit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassPerson()\n    {\n        return 'inetorgperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassUser()\n    {\n        return 'inetorgperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuid()\n    {\n        return 'entryuuid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectGuidRequiresConversion()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/Schema.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\nuse Adldap\\Models\\User;\nuse Adldap\\Models\\Entry;\nuse Adldap\\Models\\Group;\nuse Adldap\\Models\\Contact;\nuse Adldap\\Models\\Printer;\nuse Adldap\\Models\\Computer;\nuse Adldap\\Models\\Container;\nuse Adldap\\Models\\Organization;\nuse Adldap\\Models\\OrganizationalUnit;\nuse Adldap\\Models\\ForeignSecurityPrincipal;\n\nabstract class Schema implements SchemaInterface\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function accountExpires()\n    {\n        return 'accountexpires';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function accountName()\n    {\n        return 'samaccountname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function accountType()\n    {\n        return 'samaccounttype';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function adminDisplayName()\n    {\n        return 'admindisplayname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function anr()\n    {\n        return 'anr';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function badPasswordCount()\n    {\n        return 'badpwdcount';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function badPasswordTime()\n    {\n        return 'badpasswordtime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function commonName()\n    {\n        return 'cn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function company()\n    {\n        return 'company';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function computer()\n    {\n        return 'computer';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function computerModel()\n    {\n        return Computer::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function configurationNamingContext()\n    {\n        return 'configurationnamingcontext';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function contact()\n    {\n        return 'contact';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function contactModel()\n    {\n        return Contact::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function containerModel()\n    {\n        return Container::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function country()\n    {\n        return 'c';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function createdAt()\n    {\n        return 'whencreated';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function currentTime()\n    {\n        return 'currenttime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function defaultNamingContext()\n    {\n        return 'defaultnamingcontext';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function department()\n    {\n        return 'department';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function departmentNumber()\n    {\n        return 'departmentnumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function description()\n    {\n        return 'description';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function displayName()\n    {\n        return 'displayname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function dnsHostName()\n    {\n        return 'dnshostname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function domainComponent()\n    {\n        return 'dc';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function driverName()\n    {\n        return 'drivername';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function driverVersion()\n    {\n        return 'driverversion';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function email()\n    {\n        return 'mail';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function emailNickname()\n    {\n        return 'mailnickname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function employeeId()\n    {\n        return 'employeeid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function employeeNumber()\n    {\n        return 'employeenumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function employeeType()\n    {\n        return 'employeetype';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function entryModel()\n    {\n        return Entry::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function false()\n    {\n        return 'FALSE';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function firstName()\n    {\n        return 'givenname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function groupModel()\n    {\n        return Group::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function groupType()\n    {\n        return 'grouptype';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function homeAddress()\n    {\n        return 'homepostaladdress';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function homeMdb()\n    {\n        return 'homemdb';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function homeDrive()\n    {\n        return 'homedrive';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function homeDirectory()\n    {\n        return 'homedirectory';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function homePhone()\n    {\n        return 'homephone';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function info()\n    {\n        return 'info';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function initials()\n    {\n        return 'initials';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function instanceType()\n    {\n        return 'instancetype';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function ipPhone()\n    {\n        return 'ipphone';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isCriticalSystemObject()\n    {\n        return 'iscriticalsystemobject';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function jpegPhoto()\n    {\n        return 'jpegphoto';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lastLogOff()\n    {\n        return 'lastlogoff';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lastLogOn()\n    {\n        return 'lastlogon';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lastLogOnTimestamp()\n    {\n        return 'lastlogontimestamp';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function lastName()\n    {\n        return 'sn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function legacyExchangeDn()\n    {\n        return 'legacyexchangedn';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function locale()\n    {\n        return 'l';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function location()\n    {\n        return 'location';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function manager()\n    {\n        return 'manager';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function managedBy()\n    {\n        return 'managedby';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function maxPasswordAge()\n    {\n        return 'maxpwdage';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function member()\n    {\n        return 'member';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function memberIdentifier()\n    {\n        return 'distinguishedname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function memberOf()\n    {\n        return 'memberof';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function memberOfRecursive()\n    {\n        return 'memberof:1.2.840.113556.1.4.1941:';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function memberRange($from, $to)\n    {\n        return $this->member().\";range={$from}-{$to}\";\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function messageTrackingEnabled()\n    {\n        return 'messagetrackingenabled';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function msExchangeServer()\n    {\n        return 'ms-exch-exchange-server';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function name()\n    {\n        return 'name';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function neverExpiresDate()\n    {\n        return '9223372036854775807';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryComputer()\n    {\n        return 'computer';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryContainer()\n    {\n        return 'container';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryExchangePrivateMdb()\n    {\n        return 'msexchprivatemdb';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryExchangeServer()\n    {\n        return 'msExchExchangeServer';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryExchangeStorageGroup()\n    {\n        return 'msExchStorageGroup';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryGroup()\n    {\n        return 'group';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryOrganizationalUnit()\n    {\n        return 'organizational-unit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryPerson()\n    {\n        return 'person';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectCategoryPrinter()\n    {\n        return 'print-queue';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClass()\n    {\n        return 'objectclass';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassComputer()\n    {\n        return 'computer';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassContact()\n    {\n        return 'contact';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassContainer()\n    {\n        return 'container';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassOrganization()\n    {\n        return 'organization';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassPrinter()\n    {\n        return 'printqueue';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassUser()\n    {\n        return 'user';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassForeignSecurityPrincipal()\n    {\n        return 'foreignsecurityprincipal';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectClassModelMap()\n    {\n        return [\n            $this->objectClassComputer()                    => $this->computerModel(),\n            $this->objectClassContact()                     => $this->contactModel(),\n            $this->objectClassPerson()                      => $this->userModel(),\n            $this->objectClassGroup()                       => $this->groupModel(),\n            $this->objectClassContainer()                   => $this->containerModel(),\n            $this->objectClassPrinter()                     => $this->printerModel(),\n            $this->objectClassOrganization()                => $this->organizationModel(),\n            $this->objectClassOu()                          => $this->organizationalUnitModel(),\n            $this->objectClassForeignSecurityPrincipal()    => $this->foreignSecurityPrincipalModel(),\n        ];\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectSid()\n    {\n        return 'objectsid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function objectSidRequiresConversion()\n    {\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function operatingSystem()\n    {\n        return 'operatingsystem';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function operatingSystemServicePack()\n    {\n        return 'operatingsystemservicepack';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function operatingSystemVersion()\n    {\n        return 'operatingsystemversion';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organization()\n    {\n        return 'organization';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organizationName()\n    {\n        return 'o';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organizationalPerson()\n    {\n        return 'organizationalperson';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organizationalUnit()\n    {\n        return 'organizationalunit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organizationalUnitModel()\n    {\n        return OrganizationalUnit::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organizationModel()\n    {\n        return Organization::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function organizationalUnitShort()\n    {\n        return 'ou';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function otherMailbox()\n    {\n        return 'othermailbox';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function passwordLastSet()\n    {\n        return 'pwdlastset';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function person()\n    {\n        return 'person';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function personalTitle()\n    {\n        return 'personaltitle';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function physicalDeliveryOfficeName()\n    {\n        return 'physicaldeliveryofficename';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function portName()\n    {\n        return 'portname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function postalCode()\n    {\n        return 'postalcode';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function postOfficeBox()\n    {\n        return 'postofficebox';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function primaryGroupId()\n    {\n        return 'primarygroupid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerBinNames()\n    {\n        return 'printbinnames';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerColorSupported()\n    {\n        return 'printcolor';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerDuplexSupported()\n    {\n        return 'printduplexsupported';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerEndTime()\n    {\n        return 'printendtime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerMaxResolutionSupported()\n    {\n        return 'printmaxresolutionsupported';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerMediaSupported()\n    {\n        return 'printmediasupported';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerMemory()\n    {\n        return 'printmemory';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerModel()\n    {\n        return Printer::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerName()\n    {\n        return 'printername';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerOrientationSupported()\n    {\n        return 'printorientationssupported';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerPrintRate()\n    {\n        return 'printrate';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerPrintRateUnit()\n    {\n        return 'printrateunit';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerShareName()\n    {\n        return 'printsharename';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerStaplingSupported()\n    {\n        return 'printstaplingsupported';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function printerStartTime()\n    {\n        return 'printstarttime';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function priority()\n    {\n        return 'priority';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function profilePath()\n    {\n        return 'profilepath';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function proxyAddresses()\n    {\n        return 'proxyaddresses';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function roomNumber()\n    {\n        return 'roomnumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function rootDomainNamingContext()\n    {\n        return 'rootdomainnamingcontext';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function schemaNamingContext()\n    {\n        return 'schemanamingcontext';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function scriptPath()\n    {\n        return 'scriptpath';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function serialNumber()\n    {\n        return 'serialnumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function serverName()\n    {\n        return 'servername';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function showInAddressBook()\n    {\n        return 'showinaddressbook';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function street()\n    {\n        return 'street';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function streetAddress()\n    {\n        return 'streetaddress';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function systemFlags()\n    {\n        return 'systemflags';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function telephone()\n    {\n        return 'telephonenumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function mobile()\n    {\n        return 'mobile';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function otherMobile()\n    {\n        return 'othermobile';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function facsimile()\n    {\n        return 'facsimiletelephonenumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function thumbnail()\n    {\n        return 'thumbnailphoto';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function title()\n    {\n        return 'title';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function top()\n    {\n        return 'top';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function true()\n    {\n        return 'TRUE';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function unicodePassword()\n    {\n        return 'unicodepwd';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function updatedAt()\n    {\n        return 'whenchanged';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function url()\n    {\n        return 'url';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function user()\n    {\n        return 'user';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userAccountControl()\n    {\n        return 'useraccountcontrol';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userId()\n    {\n        return 'uid';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userModel()\n    {\n        return User::class;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userObjectClasses(): array\n    {\n        return [\n            $this->top(),\n            $this->person(),\n            $this->organizationalPerson(),\n            $this->objectClassUser(),\n        ];\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userPrincipalName()\n    {\n        return 'userprincipalname';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function userWorkstations()\n    {\n        return 'userworkstations';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function versionNumber()\n    {\n        return 'versionnumber';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function foreignSecurityPrincipalModel()\n    {\n        return ForeignSecurityPrincipal::class;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Schemas/SchemaInterface.php",
    "content": "<?php\n\nnamespace Adldap\\Schemas;\n\ninterface SchemaInterface\n{\n    /**\n     * The date when the account expires. This value represents the number of 100-nanosecond\n     * intervals since January 1, 1601 (UTC). A value of 0 or 0x7FFFFFFFFFFFFFFF\n     * (9223372036854775807) indicates that the account never expires.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675098(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function accountExpires();\n\n    /**\n     * The logon name used to support clients and servers running earlier versions of the\n     * operating system, such as Windows NT 4.0, Windows 95, Windows 98,\n     * and LAN Manager. This attribute must be 20 characters or\n     * less to support earlier clients.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679635(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function accountName();\n\n    /**\n     * This attribute contains information about every account type object.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679637(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function accountType();\n\n    /**\n     * The name to be displayed on admin screens.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675214(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function adminDisplayName();\n\n    /**\n     * Ambiguous name resolution attribute to be used when choosing between objects.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675223(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function anr();\n\n    /**\n     * The number of times the user tried to log on to the account using\n     * an incorrect password. A value of 0 indicates that the\n     * value is unknown.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675244(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function badPasswordCount();\n\n    /**\n     * The last time and date that an attempt to log on to this\n     * account was made with a password that is not valid.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675243(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function badPasswordTime();\n\n    /**\n     * The name that represents an object.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675449(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function commonName();\n\n    /**\n     * The user's company name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675457(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function company();\n\n    /**\n     * The object class computer string.\n     *\n     * Used when constructing new Computer models.\n     *\n     * @return string\n     */\n    public function computer();\n\n    /**\n     * The class name of the Computer model.\n     *\n     * @return string\n     */\n    public function computerModel();\n\n    /**\n     * DN enterprise configuration naming context.\n     *\n     * @link https://support.microsoft.com/en-us/kb/219005\n     *\n     * @return string\n     */\n    public function configurationNamingContext();\n\n    /**\n     * The object class contact string.\n     *\n     * Used when constructing new User models.\n     *\n     * @return string\n     */\n    public function contact();\n\n    /**\n     * The class name of the Contact model.\n     *\n     * @return string\n     */\n    public function contactModel();\n\n    /**\n     * The class name of the Container model.\n     *\n     * @return string\n     */\n    public function containerModel();\n\n    /**\n     * The entry's country attribute.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675432(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function country();\n\n    /**\n     * The entry's created at attribute.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680924(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function createdAt();\n\n    /**\n     * The entry's current time attribute.\n     *\n     * This attribute is only available with the Root DSE record.\n     *\n     * @return string\n     */\n    public function currentTime();\n\n    /**\n     * This is the default NC for a particular server.\n     *\n     * By default, the DN for the domain of which this directory server is a member.\n     *\n     * @link https://support.microsoft.com/en-us/kb/219005\n     *\n     * @return string\n     */\n    public function defaultNamingContext();\n\n    /**\n     * Contains the name for the department in which the user works.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675490(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function department();\n\n    /**\n     * Identifies a department within an organization.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675491(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function departmentNumber();\n\n    /**\n     * Contains the description to display for an object. This value is restricted\n     * as single-valued for backward compatibility in some cases but\n     * is allowed to be multi-valued in others.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675492(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function description();\n\n    /**\n     * The display name for an object. This is usually the combination\n     * of the users first name, middle initial, and last name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675514(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function displayName();\n\n    /**\n     * The LDAP API references an LDAP object by its distinguished name (DN).\n     *\n     * A DN is a sequence of relative distinguished names (RDN) connected by commas.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function distinguishedName();\n\n    /**\n     * The LDAP API references an LDAP object by its distinguished name (DN).\n     *\n     * Different vendors expect the value of the distinguished name to be in\n     * different places. For example ActiveDirectory expects distinguishedname\n     * value to be the first element in an array, however OpenLDAP expects\n     * the dn attribute to contain the value, not an array.\n     *\n     * @deprecated since 10.0.0\n     *\n     * @return int|null\n     */\n    public function distinguishedNameSubKey();\n\n    /**\n     * Name of computer as registered in DNS.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675524(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function dnsHostName();\n\n    /**\n     * Domain Component located inside an RDN.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/aa366101(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function domainComponent();\n\n    /**\n     * The device driver name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675652(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function driverName();\n\n    /**\n     * The Version number of device driver.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675653(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function driverVersion();\n\n    /**\n     * The list of email addresses for a contact.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676855(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function email();\n\n    /**\n     * The email nickname for the user.\n     *\n     * @return string\n     */\n    public function emailNickname();\n\n    /**\n     * The ID of an employee.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675662(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function employeeId();\n\n    /**\n     * The number assigned to an employee other than the ID.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675663(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function employeeNumber();\n\n    /**\n     * The job category for an employee.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675664(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function employeeType();\n\n    /**\n     * The class name of the Entry model.\n     *\n     * @return string\n     */\n    public function entryModel();\n\n    /**\n     * The LDAP `false` boolean in string form for conversion.\n     *\n     * @return string\n     */\n    public function false();\n\n    /**\n     * The LDAP filter to query for enabled users.\n     *\n     * @return mixed\n     */\n    public function filterEnabled();\n\n    /**\n     * The LDAP filter to query for disabled users.\n     *\n     * @return mixed\n     */\n    public function filterDisabled();\n\n    /**\n     * Contains the given name (first name) of the user.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675719(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function firstName();\n\n    /**\n     * The class name of the Group model.\n     *\n     * @return string\n     */\n    public function groupModel();\n\n    /**\n     * Contains a set of flags that define the type and scope of a group object.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms675935(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function groupType();\n\n    /**\n     * A user's home address.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676193(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function homeAddress();\n\n    /**\n     * The users mailbox database location.\n     *\n     * @return string\n     */\n    public function homeMdb();\n\n    /**\n     * Specifies the drive letter to which to map the UNC path specified by homeDirectory.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676191(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function homeDrive();\n\n    /**\n     * The home directory for the account.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676190(v=vs.85).aspx\n     *\n     * @return string|null\n     */\n    public function homeDirectory();\n\n    /**\n     * The user's main home phone number.\n     *\n     * @link https://docs.microsoft.com/en-us/windows/desktop/ADSchema/a-homephone\n     *\n     * @return string|null\n     */\n    public function homePhone();\n\n    /**\n     * The users extra notable information.\n     *\n     * @return string\n     */\n    public function info();\n\n    /**\n     * Contains the initials for parts of the user's full name.\n     *\n     * This may be used as the middle initial in the Windows Address Book.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676202(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function initials();\n\n    /**\n     * A bitfield that dictates how the object is instantiated on a particular server.\n     *\n     * The value of this attribute can differ on different replicas even if the replicas are in sync.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676204(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function instanceType();\n\n    /**\n     * Specifies the TCP/IP address for the phone. Used by telephony.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/cc221092.aspx\n     *\n     * @return string\n     */\n    public function ipPhone();\n\n    /**\n     * If TRUE, the object hosting this attribute must be replicated during installation of a new replica.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676798(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function isCriticalSystemObject();\n\n    /**\n     * Used to store one or more images of a person using the JPEG File Interchange Format [JFIF].\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676813(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function jpegPhoto();\n\n    /**\n     * This attribute is not used.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676822(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function lastLogOff();\n\n    /**\n     * The last time the user logged on. This value is stored as a large integer that\n     * represents the number of 100-nanosecond intervals since January 1, 1601 (UTC).\n     *\n     * A value of zero means that the last logon time is unknown.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676823(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function lastLogOn();\n\n    /**\n     * This is the time that the user last logged into the domain.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676824(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function lastLogOnTimestamp();\n\n    /**\n     * This attribute contains the family or last name for a user.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679872(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function lastName();\n\n    /**\n     * The distinguished name previously used by Exchange.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676830(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function legacyExchangeDn();\n\n    /**\n     * The users locale.\n     *\n     * @return string\n     */\n    public function locale();\n\n    /**\n     * The user's location, such as office number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676839(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function location();\n\n    /**\n     * The date and time (UTC) that this account was locked out. This value is stored\n     * as a large integer that represents the number of 100-nanosecond intervals\n     * since January 1, 1601 (UTC). A value of zero means that the\n     * account is not currently locked out.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676843(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function lockoutTime();\n\n    /**\n     * Contains the distinguished name of the user who is the user's manager.\n     *\n     * The manager's user object contains a directReports property that\n     * contains references to all user objects that have their manager\n     * properties set to this distinguished name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676859(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function manager();\n\n    /**\n     * The distinguished name of the user that is assigned to manage this object.\n     *\n     * @link https://docs.microsoft.com/en-us/windows/desktop/adschema/a-managedby\n     *\n     * @return string\n     */\n    public function managedBy();\n\n    /**\n     * The maximum amount of time, in 100-nanosecond intervals, a password is valid.\n     *\n     * This value is stored as a large integer that represents the number of\n     * 100-nanosecond intervals from the time the password was set\n     * before the password expires.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms676863(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function maxPasswordAge();\n\n    /**\n     * The list of users that belong to the group.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677097(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function member();\n\n    /**\n     * The identifier of records that belong to a group.\n     *\n     * For example, in ActiveDirectory, the 'member' attribute on\n     * a group record contains a list of distinguished names,\n     * so `distinguishedname` would be the identifier.\n     *\n     * In other environments such as Sun Directory\n     * Server, this identifier would be `uid`.\n     *\n     * @return string\n     */\n    public function memberIdentifier();\n\n    /**\n     * The distinguished names of the groups to which this object belongs.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677099(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function memberOf();\n\n    /**\n     * The distinguished names of the groups to which this object belongs.\n     *\n     * This string contains a rule OID indicating the inclusion of ancestral and child members.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677099(v=vs.85).aspx\n     * @link https://msdn.microsoft.com/en-us/library/aa746475(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function memberOfRecursive();\n\n    /**\n     * The range limited list of users that belong to the group. See range limit in Active Directory\n     * (Range Retrieval of Attribute Values https://msdn.microsoft.com/en-us/library/cc223242.aspx)\n     * Issue #342.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms677097(v=vs.85).aspx\n     *\n     * @param string|int $from\n     * @param string|int $to\n     *\n     * @return string\n     */\n    public function memberRange($from, $to);\n\n    /**\n     * @link https://msdn.microsoft.com/en-us/library/ms981934(v=exchg.65).aspx\n     *\n     * @return string\n     */\n    public function messageTrackingEnabled();\n\n    /**\n     * The object category of an exchange server.\n     *\n     * @return string\n     */\n    public function msExchangeServer();\n\n    /**\n     * The general name of the entry.\n     *\n     * @return string\n     */\n    public function name();\n\n    /**\n     * Returns a string value indicating that an account does not expire.\n     *\n     * @return string\n     */\n    public function neverExpiresDate();\n\n    /**\n     * An object class name used to group objects of this or derived classes.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679011(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function objectCategory();\n\n    /**\n     * The computer object category.\n     *\n     * @return string\n     */\n    public function objectCategoryComputer();\n\n    /**\n     * The container object category.\n     *\n     * @return string\n     */\n    public function objectCategoryContainer();\n\n    /**\n     * The exchange private MDB category.\n     *\n     * @return string\n     */\n    public function objectCategoryExchangePrivateMdb();\n\n    /**\n     * The exchange server object category.\n     *\n     * @return string\n     */\n    public function objectCategoryExchangeServer();\n\n    /**\n     * The exchange storage group object category.\n     *\n     * @return string\n     */\n    public function objectCategoryExchangeStorageGroup();\n\n    /**\n     * The group object category.\n     *\n     * @return string\n     */\n    public function objectCategoryGroup();\n\n    /**\n     * The organizational unit category.\n     *\n     * @return string\n     */\n    public function objectCategoryOrganizationalUnit();\n\n    /**\n     * The person object category.\n     *\n     * @return string\n     */\n    public function objectCategoryPerson();\n\n    /**\n     * The printer object category.\n     *\n     * @return string\n     */\n    public function objectCategoryPrinter();\n\n    /**\n     * The list of classes from which this class is derived.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679012(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function objectClass();\n\n    /**\n     * The computer object class.\n     *\n     * @return string\n     */\n    public function objectClassComputer();\n\n    /**\n     * The contact object class.\n     *\n     * @return string\n     */\n    public function objectClassContact();\n\n    /**\n     * The container object class.\n     *\n     * @return string\n     */\n    public function objectClassContainer();\n\n    /**\n     * The group object class.\n     *\n     * @return string\n     */\n    public function objectClassGroup();\n\n    /**\n     * The ou object class.\n     *\n     * @return string\n     */\n    public function objectClassOu();\n\n    /**\n     * The person object class.\n     *\n     * Represents people who are associated with an organization in some way.\n     *\n     * @return string\n     */\n    public function objectClassPerson();\n\n    /**\n     * The printer object class.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms683911(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function objectClassPrinter();\n\n    /**\n     * The user object class.\n     *\n     * @return string\n     */\n    public function objectClassUser();\n\n    /**\n     * The object class model map.\n     *\n     * @return array\n     */\n    public function objectClassModelMap();\n\n    /**\n     * The unique identifier for an object.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679021(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function objectGuid();\n\n    /**\n     * Determine whether the object GUID requires conversion from binary.\n     *\n     * @return bool\n     */\n    public function objectGuidRequiresConversion();\n\n    /**\n     * A binary value that specifies the security identifier (SID) of the user.\n     *\n     * The SID is a unique value used to identify the user as a security principal.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679024(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function objectSid();\n\n    /**\n     * Determine whether the object SID requires conversion from binary.\n     *\n     * @return bool\n     */\n    public function objectSidRequiresConversion();\n\n    /**\n     * The Operating System name, for example, Windows Vista Enterprise.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679076(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function operatingSystem();\n\n    /**\n     * The operating system service pack ID string (for example, SP3).\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679078(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function operatingSystemServicePack();\n\n    /**\n     * The operating system version string, for example, 4.0.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679079(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function operatingSystemVersion();\n\n    /**\n     * The RDN version of organization name for use in distinguished names.\n     *\n     * @return mixed\n     */\n    public function organizationName();\n\n    /**\n     * This class is used for objects that contain organizational information about a user,\n     * such as the employee number, department, manager, title, office address, and so on.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms683883(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function organizationalPerson();\n\n    /**\n     * A container for storing users, computers, and other account objects.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms683886(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function organizationalUnit();\n\n    /**\n     * The class name of the Organizational Unit model.\n     *\n     * @return string\n     */\n    public function organizationalUnitModel();\n\n    /**\n     * The RDN version of organizational unit for use in distinguished names.\n     *\n     * @return string\n     */\n    public function organizationalUnitShort();\n\n    /**\n     * Contains other additional mail addresses in a form such as CCMAIL: JohnDoe.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679091(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function otherMailbox();\n\n    /**\n     * The date and time that the password for this account was last changed.\n     *\n     * This value is stored as a large integer that represents the number of 100 nanosecond intervals\n     * since January 1, 1601 (UTC). If this value is set to 0 and the User-Account-Control attribute\n     * does not contain the UF_DONT_EXPIRE_PASSWD flag, then the user must set the password at\n     * the next logon.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679430(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function passwordLastSet();\n\n    /**\n     * The person object class.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms683895(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function person();\n\n    /**\n     * The user's title.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679115(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function personalTitle();\n\n    /**\n     * Contains the office location in the user's place of business.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679117(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function physicalDeliveryOfficeName();\n\n    /**\n     * List of port names. For example, for printer ports or comm ports.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679131(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function portName();\n\n    /**\n     * The postal or zip code for mail delivery.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679366(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function postalCode();\n\n    /**\n     * The post office box number for this object.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679367(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function postOfficeBox();\n\n    /**\n     * Contains the relative identifier (RID) for the primary group of the user.\n     *\n     * By default, this is the RID for the Domain Users group.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679375(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function primaryGroupId();\n\n    /**\n     * A list of printer bin names.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679380(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerBinNames();\n\n    /**\n     * If a printer can print in color.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679382(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerColorSupported();\n\n    /**\n     * Indicates the type of duplex support a printer has.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679383(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerDuplexSupported();\n\n    /**\n     * The time a print queue stops servicing jobs.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679384(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerEndTime();\n\n    /**\n     * The maximum printer resolution.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679391(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerMaxResolutionSupported();\n\n    /**\n     * A list of media supported by a printer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679395(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerMediaSupported();\n\n    /**\n     * The amount of memory installed in a printer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679396(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerMemory();\n\n    /**\n     * The class name of the Printer model.\n     *\n     * @return string\n     */\n    public function printerModel();\n\n    /**\n     * The display name of an attached printer.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679385(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerName();\n\n    /**\n     * The page rotation for landscape printing.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679402(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerOrientationSupported();\n\n    /**\n     * Driver-supplied print rate.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679405(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerPrintRate();\n\n    /**\n     * Driver-supplied print rate unit.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679406(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerPrintRateUnit();\n\n    /**\n     * The printer's share name.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679408(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerShareName();\n\n    /**\n     * If the printer supports stapling. Supplied by the driver.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679410(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerStaplingSupported();\n\n    /**\n     * The time a print queue begins servicing jobs.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679411(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function printerStartTime();\n\n    /**\n     * The current priority (of a process, print job, and so on).\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679413(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function priority();\n\n    /**\n     * Specifies a path to the user's profile. This value can be a null\n     * string, a local absolute path, or a UNC path.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679422(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function profilePath();\n\n    /**\n     * A proxy address is the address by which a Microsoft Exchange Server recipient\n     * object is recognized in a foreign mail system. Proxy addresses are required\n     * for all recipient objects, such as custom recipients and distribution lists.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679424(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function proxyAddresses();\n\n    /**\n     * The room number of an object.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679615(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function roomNumber();\n\n    /**\n     * The DN of the root domain NC for this DC's forest.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/cc223262.aspx\n     *\n     * @return mixed\n     */\n    public function rootDomainNamingContext();\n\n    /**\n     * The attribute.\n     *\n     * @return mixed\n     */\n    public function schemaNamingContext();\n\n    /**\n     * This attribute specifies the path for the user's logon script. The string can be null.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679656(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function scriptPath();\n\n    /**\n     * Part of X.500 specification. Not used by Active Directory.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679771(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function serialNumber();\n\n    /**\n     * The name of a server.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679772(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function serverName();\n\n    /**\n     * This attribute is used to indicate in which MAPI address books an object will appear.\n     *\n     * It is usually maintained by the Exchange Recipient Update Service.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679822(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function showInAddressBook();\n\n    /**\n     * The street address.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679882(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function street();\n\n    /**\n     * The street address.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms679882(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function streetAddress();\n\n    /**\n     * An integer value that contains flags that define additional properties of the class.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680022(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function systemFlags();\n\n    /**\n     * The primary telephone number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680027(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function telephone();\n\n    /**\n     * The primary mobile phone number.\n     *\n     * @link https://docs.microsoft.com/en-us/windows/desktop/adschema/a-mobile\n     *\n     * @return string\n     */\n    public function mobile();\n\n    /**\n     * The secondary mobile phone number.\n     *\n     * @link https://docs.microsoft.com/en-us/windows/desktop/ADSchema/a-othermobile\n     *\n     * @return string\n     */\n    public function otherMobile();\n\n    /**\n     * The users thumbnail photo path.\n     *\n     * @return string\n     */\n    public function thumbnail();\n\n    /**\n     * Contains the user's job title.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680037(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function title();\n\n    /**\n     * The top level class from which all classes are derived.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms683975(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function top();\n\n    /**\n     * The LDAP `true` boolean in string form for conversion.\n     *\n     * @return string\n     */\n    public function true();\n\n    /**\n     * The password of the user in Windows NT one-way format (OWF). Windows 2000 uses the Windows NT OWF.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680513(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function unicodePassword();\n\n    /**\n     * The date when this object was last changed.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680921(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function updatedAt();\n\n    /**\n     * The entry's URL attribute.\n     *\n     * @return string\n     */\n    public function url();\n\n    /**\n     * The user object class.\n     *\n     * This class is used to store information about an employee or contractor who works for an organization.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms683980(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function user();\n\n    /**\n     * Flags that control the behavior of the user account.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680832(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function userAccountControl();\n\n    /**\n     * The user ID attribute.\n     *\n     * @return string\n     */\n    public function userId();\n\n    /**\n     * The class name of the User model.\n     *\n     * @return string\n     */\n    public function userModel();\n\n    /**\n     * The object classes that User models must be constructed with.\n     *\n     * @return array\n     */\n    public function userObjectClasses(): array;\n\n    /**\n     * This attribute contains the UPN that is an Internet-style login name for\n     * a user based on the Internet standard RFC 822.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680857(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function userPrincipalName();\n\n    /**\n     * Contains the NetBIOS or DNS names of the computers running Windows NT Workstation\n     * or Windows 2000 Professional from which the user can log on.\n     *\n     * Each NetBIOS name is separated by a comma.\n     *\n     * Multiple names should be separated by commas.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680868(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function userWorkstations();\n\n    /**\n     * A general purpose version number.\n     *\n     * @link https://msdn.microsoft.com/en-us/library/ms680897(v=vs.85).aspx\n     *\n     * @return string\n     */\n    public function versionNumber();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/adldap2/adldap2/src/Utilities.php",
    "content": "<?php\n\nnamespace Adldap;\n\nclass Utilities\n{\n    /**\n     * Converts a DN string into an array of RDNs.\n     *\n     * This will also decode hex characters into their true\n     * UTF-8 representation embedded inside the DN as well.\n     *\n     * @param string $dn\n     * @param bool   $removeAttributePrefixes\n     *\n     * @return array|false\n     */\n    public static function explodeDn($dn, $removeAttributePrefixes = true)\n    {\n        $dn = ldap_explode_dn($dn, ($removeAttributePrefixes ? 1 : 0));\n\n        if (is_array($dn) && array_key_exists('count', $dn)) {\n            foreach ($dn as $rdn => $value) {\n                $dn[$rdn] = self::unescape($value);\n            }\n        }\n\n        return $dn;\n    }\n\n    /**\n     * Un-escapes a hexadecimal string into\n     * its original string representation.\n     *\n     * @param string $value\n     *\n     * @return string\n     */\n    public static function unescape($value)\n    {\n        return preg_replace_callback('/\\\\\\([0-9A-Fa-f]{2})/', function ($matches) {\n            return chr(hexdec($matches[1]));\n        }, $value);\n    }\n\n    /**\n     * Convert a binary SID to a string SID.\n     *\n     * @author Chad Sikorra\n     *\n     * @link https://github.com/ChadSikorra\n     * @link https://stackoverflow.com/questions/39533560/php-ldap-get-user-sid\n     *\n     * @param string $value The Binary SID\n     *\n     * @return string|null\n     */\n    public static function binarySidToString($value)\n    {\n        // Revision - 8bit unsigned int (C1)\n        // Count - 8bit unsigned int (C1)\n        // 2 null bytes\n        // ID - 32bit unsigned long, big-endian order\n        $sid = @unpack('C1rev/C1count/x2/N1id', $value);\n\n        if (!isset($sid['id']) || !isset($sid['rev'])) {\n            return;\n        }\n\n        $revisionLevel = $sid['rev'];\n\n        $identifierAuthority = $sid['id'];\n\n        $subs = isset($sid['count']) ? $sid['count'] : 0;\n\n        $sidHex = $subs ? bin2hex($value) : '';\n\n        $subAuthorities = [];\n\n        // The sub-authorities depend on the count, so only get as\n        // many as the count, regardless of data beyond it.\n        for ($i = 0; $i < $subs; $i++) {\n            $data = implode('', array_reverse(\n                str_split(\n                    substr($sidHex, 16 + ($i * 8), 8),\n                    2\n                )\n            ));\n\n            $subAuthorities[] = hexdec($data);\n        }\n\n        // Tack on the 'S-' and glue it all together...\n        return 'S-'.$revisionLevel.'-'.$identifierAuthority.implode(\n            preg_filter('/^/', '-', $subAuthorities)\n        );\n    }\n\n    /**\n     * Convert a binary GUID to a string GUID.\n     *\n     * @param string $binGuid\n     *\n     * @return string|null\n     */\n    public static function binaryGuidToString($binGuid)\n    {\n        if (trim($binGuid) == '' || is_null($binGuid)) {\n            return;\n        }\n\n        $hex = unpack('H*hex', $binGuid)['hex'];\n\n        $hex1 = substr($hex, -26, 2).substr($hex, -28, 2).substr($hex, -30, 2).substr($hex, -32, 2);\n        $hex2 = substr($hex, -22, 2).substr($hex, -24, 2);\n        $hex3 = substr($hex, -18, 2).substr($hex, -20, 2);\n        $hex4 = substr($hex, -16, 4);\n        $hex5 = substr($hex, -12, 12);\n\n        $guid = sprintf('%s-%s-%s-%s-%s', $hex1, $hex2, $hex3, $hex4, $hex5);\n\n        return $guid;\n    }\n\n    /**\n     * Converts a string GUID to it's hex variant.\n     *\n     * @param string $string\n     *\n     * @return string\n     */\n    public static function stringGuidToHex($string)\n    {\n        $hex = '\\\\'.substr($string, 6, 2).'\\\\'.substr($string, 4, 2).'\\\\'.substr($string, 2, 2).'\\\\'.substr($string, 0, 2);\n        $hex = $hex.'\\\\'.substr($string, 11, 2).'\\\\'.substr($string, 9, 2);\n        $hex = $hex.'\\\\'.substr($string, 16, 2).'\\\\'.substr($string, 14, 2);\n        $hex = $hex.'\\\\'.substr($string, 19, 2).'\\\\'.substr($string, 21, 2);\n        $hex = $hex.'\\\\'.substr($string, 24, 2).'\\\\'.substr($string, 26, 2).'\\\\'.substr($string, 28, 2).'\\\\'.substr($string, 30, 2).'\\\\'.substr($string, 32, 2).'\\\\'.substr($string, 34, 2);\n\n        return $hex;\n    }\n\n    /**\n     * Encode a password for transmission over LDAP.\n     *\n     * @param string $password The password to encode\n     *\n     * @return string\n     */\n    public static function encodePassword($password)\n    {\n        return iconv('UTF-8', 'UTF-16LE', '\"'.$password.'\"');\n    }\n\n    /**\n     * Salt and hash a password to make its SSHA OpenLDAP version.\n     *\n     * @param string $password The password to create\n     *\n     * @return string\n     */\n    public static function makeSSHAPassword($password)\n    {\n        mt_srand((float) microtime() * 1000000);\n        $salt = pack('CCCC', mt_rand(), mt_rand(), mt_rand(), mt_rand());\n\n        return '{SSHA}'.base64_encode(pack('H*', sha1($password.$salt)).$salt);\n    }\n\n    /**\n     * Round a Windows timestamp down to seconds and remove\n     * the seconds between 1601-01-01 and 1970-01-01.\n     *\n     * @param float $windowsTime\n     *\n     * @return float\n     */\n    public static function convertWindowsTimeToUnixTime($windowsTime)\n    {\n        return round($windowsTime / 10000000) - 11644473600;\n    }\n\n    /**\n     * Convert a Unix timestamp to Windows timestamp.\n     *\n     * @param float $unixTime\n     *\n     * @return float\n     */\n    public static function convertUnixTimeToWindowsTime($unixTime)\n    {\n        return ($unixTime + 11644473600) * 10000000;\n    }\n\n    /**\n     * Validates that the inserted string is an object SID.\n     *\n     * @param string $sid\n     *\n     * @return bool\n     */\n    public static function isValidSid($sid)\n    {\n        return (bool) preg_match(\"/^S-\\d(-\\d{1,10}){1,16}$/i\", $sid);\n    }\n\n    /**\n     * Validates that the inserted string is an object GUID.\n     *\n     * @param string $guid\n     *\n     * @return bool\n     */\n    public static function isValidGuid($guid)\n    {\n        return (bool) preg_match('/^([0-9a-fA-F]){8}(-([0-9a-fA-F]){4}){3}-([0-9a-fA-F]){12}$|^([0-9a-fA-F]{8}-){3}[0-9a-fA-F]{8}$/', $guid);\n    }\n\n    /**\n     * Converts an ignore string into an array.\n     *\n     * @param string $ignore\n     *\n     * @return array\n     */\n    protected static function ignoreStrToArray($ignore)\n    {\n        $ignore = trim($ignore);\n\n        return $ignore ? str_split($ignore) : [];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/autoload.php",
    "content": "<?php\n\n// autoload.php @generated by Composer\n\nif (PHP_VERSION_ID < 50600) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via \"composer self-update --2.2\". Aborting.'.PHP_EOL;\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, $err);\n        } elseif (!headers_sent()) {\n            echo $err;\n        }\n    }\n    trigger_error(\n        $err,\n        E_USER_ERROR\n    );\n}\n\nrequire_once __DIR__ . '/composer/autoload_real.php';\n\nreturn ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b::getLoader();\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/LICENSE",
    "content": "Copyright (c) 2017, Ben Scholzen 'DASPRiD'\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/README.md",
    "content": "# QR Code generator\n\n[![PHP CI](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml/badge.svg)](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/Bacon/BaconQrCode/branch/master/graph/badge.svg?token=rD0HcAiEEx)](https://codecov.io/gh/Bacon/BaconQrCode)\n[![Latest Stable Version](https://poser.pugx.org/bacon/bacon-qr-code/v/stable)](https://packagist.org/packages/bacon/bacon-qr-code)\n[![Total Downloads](https://poser.pugx.org/bacon/bacon-qr-code/downloads)](https://packagist.org/packages/bacon/bacon-qr-code)\n[![License](https://poser.pugx.org/bacon/bacon-qr-code/license)](https://packagist.org/packages/bacon/bacon-qr-code)\n\n\n## Introduction\nBaconQrCode is a port of QR code portion of the ZXing library. It currently\nonly features the encoder part, but could later receive the decoder part as\nwell.\n\nAs the Reed Solomon codec implementation of the ZXing library performs quite\nslow in PHP, it was exchanged with the implementation by Phil Karn.\n\n\n## Example usage\n```php\nuse BaconQrCode\\Renderer\\ImageRenderer;\nuse BaconQrCode\\Renderer\\Image\\ImagickImageBackEnd;\nuse BaconQrCode\\Renderer\\RendererStyle\\RendererStyle;\nuse BaconQrCode\\Writer;\n\n$renderer = new ImageRenderer(\n    new RendererStyle(400),\n    new ImagickImageBackEnd()\n);\n$writer = new Writer($renderer);\n$writer->writeFile('Hello World!', 'qrcode.png');\n```\n\n## Available image renderer back ends\nBaconQrCode comes with multiple back ends for rendering images. Currently included are the following:\n\n- `ImagickImageBackEnd`: renders raster images using the Imagick library\n- `SvgImageBackEnd`: renders SVG files using XMLWriter\n- `EpsImageBackEnd`: renders EPS files\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/composer.json",
    "content": "{\n    \"name\": \"bacon/bacon-qr-code\",\n    \"description\": \"BaconQrCode is a QR code generator for PHP.\",\n    \"license\" : \"BSD-2-Clause\",\n    \"homepage\": \"https://github.com/Bacon/BaconQrCode\",\n    \"require\": {\n        \"php\": \"^7.1 || ^8.0\",\n        \"ext-iconv\": \"*\",\n        \"dasprid/enum\": \"^1.0.3\"\n    },\n    \"suggest\": {\n        \"ext-imagick\": \"to generate QR code images\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Ben Scholzen 'DASPRiD'\",\n            \"email\": \"mail@dasprids.de\",\n            \"homepage\": \"https://dasprids.de/\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"autoload\": {\n        \"psr-4\": {\n            \"BaconQrCode\\\\\": \"src/\"\n        }\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^7 | ^8 | ^9\",\n        \"spatie/phpunit-snapshot-assertions\": \"^4.2.9\",\n        \"squizlabs/php_codesniffer\": \"^3.4\",\n        \"phly/keep-a-changelog\": \"^2.1\"\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"ocramius/package-versions\": true\n        }\n    },\n    \"archive\": {\n        \"exclude\": [\n            \"/test\",\n            \"/phpunit.xml.dist\"\n        ]\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/phpunit.xml.dist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"https://schema.phpunit.de/9.3/phpunit.xsd\" bootstrap=\"vendor/autoload.php\" colors=\"true\">\n  <coverage processUncoveredFiles=\"true\">\n    <include>\n      <directory suffix=\".php\">src</directory>\n    </include>\n  </coverage>\n  <testsuites>\n    <testsuite name=\"BaconQrCode Tests\">\n      <directory>./test</directory>\n    </testsuite>\n  </testsuites>\n</phpunit>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/BitArray.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse SplFixedArray;\n\n/**\n * A simple, fast array of bits.\n */\nfinal class BitArray\n{\n    /**\n     * Bits represented as an array of integers.\n     *\n     * @var SplFixedArray<int>\n     */\n    private $bits;\n\n    /**\n     * Size of the bit array in bits.\n     *\n     * @var int\n     */\n    private $size;\n\n    /**\n     * Creates a new bit array with a given size.\n     */\n    public function __construct(int $size = 0)\n    {\n        $this->size = $size;\n        $this->bits = SplFixedArray::fromArray(array_fill(0, ($this->size + 31) >> 3, 0));\n    }\n\n    /**\n     * Gets the size in bits.\n     */\n    public function getSize() : int\n    {\n        return $this->size;\n    }\n\n    /**\n     * Gets the size in bytes.\n     */\n    public function getSizeInBytes() : int\n    {\n        return ($this->size + 7) >> 3;\n    }\n\n    /**\n     * Ensures that the array has a minimum capacity.\n     */\n    public function ensureCapacity(int $size) : void\n    {\n        if ($size > count($this->bits) << 5) {\n            $this->bits->setSize(($size + 31) >> 5);\n        }\n    }\n\n    /**\n     * Gets a specific bit.\n     */\n    public function get(int $i) : bool\n    {\n        return 0 !== ($this->bits[$i >> 5] & (1 << ($i & 0x1f)));\n    }\n\n    /**\n     * Sets a specific bit.\n     */\n    public function set(int $i) : void\n    {\n        $this->bits[$i >> 5] = $this->bits[$i >> 5] | 1 << ($i & 0x1f);\n    }\n\n    /**\n     * Flips a specific bit.\n     */\n    public function flip(int $i) : void\n    {\n        $this->bits[$i >> 5] ^= 1 << ($i & 0x1f);\n    }\n\n    /**\n     * Gets the next set bit position from a given position.\n     */\n    public function getNextSet(int $from) : int\n    {\n        if ($from >= $this->size) {\n            return $this->size;\n        }\n\n        $bitsOffset = $from >> 5;\n        $currentBits = $this->bits[$bitsOffset];\n        $bitsLength = count($this->bits);\n        $currentBits &= ~((1 << ($from & 0x1f)) - 1);\n\n        while (0 === $currentBits) {\n            if (++$bitsOffset === $bitsLength) {\n                return $this->size;\n            }\n\n            $currentBits = $this->bits[$bitsOffset];\n        }\n\n        $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits);\n        return $result > $this->size ? $this->size : $result;\n    }\n\n    /**\n     * Gets the next unset bit position from a given position.\n     */\n    public function getNextUnset(int $from) : int\n    {\n        if ($from >= $this->size) {\n            return $this->size;\n        }\n\n        $bitsOffset = $from >> 5;\n        $currentBits = ~$this->bits[$bitsOffset];\n        $bitsLength = count($this->bits);\n        $currentBits &= ~((1 << ($from & 0x1f)) - 1);\n\n        while (0 === $currentBits) {\n            if (++$bitsOffset === $bitsLength) {\n                return $this->size;\n            }\n\n            $currentBits = ~$this->bits[$bitsOffset];\n        }\n\n        $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits);\n        return $result > $this->size ? $this->size : $result;\n    }\n\n    /**\n     * Sets a bulk of bits.\n     */\n    public function setBulk(int $i, int $newBits) : void\n    {\n        $this->bits[$i >> 5] = $newBits;\n    }\n\n    /**\n     * Sets a range of bits.\n     *\n     * @throws InvalidArgumentException if end is smaller than start\n     */\n    public function setRange(int $start, int $end) : void\n    {\n        if ($end < $start) {\n            throw new InvalidArgumentException('End must be greater or equal to start');\n        }\n\n        if ($end === $start) {\n            return;\n        }\n\n        --$end;\n\n        $firstInt = $start >> 5;\n        $lastInt = $end >> 5;\n\n        for ($i = $firstInt; $i <= $lastInt; ++$i) {\n            $firstBit = $i > $firstInt ? 0 : $start & 0x1f;\n            $lastBit = $i < $lastInt ? 31 : $end & 0x1f;\n\n            if (0 === $firstBit && 31 === $lastBit) {\n                $mask = 0x7fffffff;\n            } else {\n                $mask = 0;\n\n                for ($j = $firstBit; $j < $lastBit; ++$j) {\n                    $mask |= 1 << $j;\n                }\n            }\n\n            $this->bits[$i] = $this->bits[$i] | $mask;\n        }\n    }\n\n    /**\n     * Clears the bit array, unsetting every bit.\n     */\n    public function clear() : void\n    {\n        $bitsLength = count($this->bits);\n\n        for ($i = 0; $i < $bitsLength; ++$i) {\n            $this->bits[$i] = 0;\n        }\n    }\n\n    /**\n     * Checks if a range of bits is set or not set.\n\n     * @throws InvalidArgumentException if end is smaller than start\n     */\n    public function isRange(int $start, int $end, bool $value) : bool\n    {\n        if ($end < $start) {\n            throw new InvalidArgumentException('End must be greater or equal to start');\n        }\n\n        if ($end === $start) {\n            return true;\n        }\n\n        --$end;\n\n        $firstInt = $start >> 5;\n        $lastInt = $end >> 5;\n\n        for ($i = $firstInt; $i <= $lastInt; ++$i) {\n            $firstBit = $i > $firstInt ? 0 : $start & 0x1f;\n            $lastBit = $i < $lastInt ? 31 : $end & 0x1f;\n\n            if (0 === $firstBit && 31 === $lastBit) {\n                $mask = 0x7fffffff;\n            } else {\n                $mask = 0;\n\n                for ($j = $firstBit; $j <= $lastBit; ++$j) {\n                    $mask |= 1 << $j;\n                }\n            }\n\n            if (($this->bits[$i] & $mask) !== ($value ? $mask : 0)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Appends a bit to the array.\n     */\n    public function appendBit(bool $bit) : void\n    {\n        $this->ensureCapacity($this->size + 1);\n\n        if ($bit) {\n            $this->bits[$this->size >> 5] = $this->bits[$this->size >> 5] | (1 << ($this->size & 0x1f));\n        }\n\n        ++$this->size;\n    }\n\n    /**\n     * Appends a number of bits (up to 32) to the array.\n\n     * @throws InvalidArgumentException if num bits is not between 0 and 32\n     */\n    public function appendBits(int $value, int $numBits) : void\n    {\n        if ($numBits < 0 || $numBits > 32) {\n            throw new InvalidArgumentException('Num bits must be between 0 and 32');\n        }\n\n        $this->ensureCapacity($this->size + $numBits);\n\n        for ($numBitsLeft = $numBits; $numBitsLeft > 0; $numBitsLeft--) {\n            $this->appendBit((($value >> ($numBitsLeft - 1)) & 0x01) === 1);\n        }\n    }\n\n    /**\n     * Appends another bit array to this array.\n     */\n    public function appendBitArray(self $other) : void\n    {\n        $otherSize = $other->getSize();\n        $this->ensureCapacity($this->size + $other->getSize());\n\n        for ($i = 0; $i < $otherSize; ++$i) {\n            $this->appendBit($other->get($i));\n        }\n    }\n\n    /**\n     * Makes an exclusive-or comparision on the current bit array.\n     *\n     * @throws InvalidArgumentException if sizes don't match\n     */\n    public function xorBits(self $other) : void\n    {\n        $bitsLength = count($this->bits);\n        $otherBits  = $other->getBitArray();\n\n        if ($bitsLength !== count($otherBits)) {\n            throw new InvalidArgumentException('Sizes don\\'t match');\n        }\n\n        for ($i = 0; $i < $bitsLength; ++$i) {\n            $this->bits[$i] = $this->bits[$i] ^ $otherBits[$i];\n        }\n    }\n\n    /**\n     * Converts the bit array to a byte array.\n     *\n     * @return SplFixedArray<int>\n     */\n    public function toBytes(int $bitOffset, int $numBytes) : SplFixedArray\n    {\n        $bytes = new SplFixedArray($numBytes);\n\n        for ($i = 0; $i < $numBytes; ++$i) {\n            $byte = 0;\n\n            for ($j = 0; $j < 8; ++$j) {\n                if ($this->get($bitOffset)) {\n                    $byte |= 1 << (7 - $j);\n                }\n\n                ++$bitOffset;\n            }\n\n            $bytes[$i] = $byte;\n        }\n\n        return $bytes;\n    }\n\n    /**\n     * Gets the internal bit array.\n     *\n     * @return SplFixedArray<int>\n     */\n    public function getBitArray() : SplFixedArray\n    {\n        return $this->bits;\n    }\n\n    /**\n     * Reverses the array.\n     */\n    public function reverse() : void\n    {\n        $newBits = new SplFixedArray(count($this->bits));\n\n        for ($i = 0; $i < $this->size; ++$i) {\n            if ($this->get($this->size - $i - 1)) {\n                $newBits[$i >> 5] = $newBits[$i >> 5] | (1 << ($i & 0x1f));\n            }\n        }\n\n        $this->bits = $newBits;\n    }\n\n    /**\n     * Returns a string representation of the bit array.\n     */\n    public function __toString() : string\n    {\n        $result = '';\n\n        for ($i = 0; $i < $this->size; ++$i) {\n            if (0 === ($i & 0x07)) {\n                $result .= ' ';\n            }\n\n            $result .= $this->get($i) ? 'X' : '.';\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/BitMatrix.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse SplFixedArray;\n\n/**\n * Bit matrix.\n *\n * Represents a 2D matrix of bits. In function arguments below, and throughout\n * the common module, x is the column position, and y is the row position. The\n * ordering is always x, y. The origin is at the top-left.\n */\nclass BitMatrix\n{\n    /**\n     * Width of the bit matrix.\n     *\n     * @var int\n     */\n    private $width;\n\n    /**\n     * Height of the bit matrix.\n     *\n     * @var int\n     */\n    private $height;\n\n    /**\n     * Size in bits of each individual row.\n     *\n     * @var int\n     */\n    private $rowSize;\n\n    /**\n     * Bits representation.\n     *\n     * @var SplFixedArray<int>\n     */\n    private $bits;\n\n    /**\n     * @throws InvalidArgumentException if a dimension is smaller than zero\n     */\n    public function __construct(int $width, int $height = null)\n    {\n        if (null === $height) {\n            $height = $width;\n        }\n\n        if ($width < 1 || $height < 1) {\n            throw new InvalidArgumentException('Both dimensions must be greater than zero');\n        }\n\n        $this->width = $width;\n        $this->height = $height;\n        $this->rowSize = ($width + 31) >> 5;\n        $this->bits = SplFixedArray::fromArray(array_fill(0, $this->rowSize * $height, 0));\n    }\n\n    /**\n     * Gets the requested bit, where true means black.\n     */\n    public function get(int $x, int $y) : bool\n    {\n        $offset = $y * $this->rowSize + ($x >> 5);\n        return 0 !== (BitUtils::unsignedRightShift($this->bits[$offset], ($x & 0x1f)) & 1);\n    }\n\n    /**\n     * Sets the given bit to true.\n     */\n    public function set(int $x, int $y) : void\n    {\n        $offset = $y * $this->rowSize + ($x >> 5);\n        $this->bits[$offset] = $this->bits[$offset] | (1 << ($x & 0x1f));\n    }\n\n    /**\n     * Flips the given bit.\n     */\n    public function flip(int $x, int $y) : void\n    {\n        $offset = $y * $this->rowSize + ($x >> 5);\n        $this->bits[$offset] = $this->bits[$offset] ^ (1 << ($x & 0x1f));\n    }\n\n    /**\n     * Clears all bits (set to false).\n     */\n    public function clear() : void\n    {\n        $max = count($this->bits);\n\n        for ($i = 0; $i < $max; ++$i) {\n            $this->bits[$i] = 0;\n        }\n    }\n\n    /**\n     * Sets a square region of the bit matrix to true.\n     *\n     * @throws InvalidArgumentException if left or top are negative\n     * @throws InvalidArgumentException if width or height are smaller than 1\n     * @throws InvalidArgumentException if region does not fit into the matix\n     */\n    public function setRegion(int $left, int $top, int $width, int $height) : void\n    {\n        if ($top < 0 || $left < 0) {\n            throw new InvalidArgumentException('Left and top must be non-negative');\n        }\n\n        if ($height < 1 || $width < 1) {\n            throw new InvalidArgumentException('Width and height must be at least 1');\n        }\n\n        $right = $left + $width;\n        $bottom = $top + $height;\n\n        if ($bottom > $this->height || $right > $this->width) {\n            throw new InvalidArgumentException('The region must fit inside the matrix');\n        }\n\n        for ($y = $top; $y < $bottom; ++$y) {\n            $offset = $y * $this->rowSize;\n\n            for ($x = $left; $x < $right; ++$x) {\n                $index = $offset + ($x >> 5);\n                $this->bits[$index] = $this->bits[$index] | (1 << ($x & 0x1f));\n            }\n        }\n    }\n\n    /**\n     * A fast method to retrieve one row of data from the matrix as a BitArray.\n     */\n    public function getRow(int $y, BitArray $row = null) : BitArray\n    {\n        if (null === $row || $row->getSize() < $this->width) {\n            $row = new BitArray($this->width);\n        }\n\n        $offset = $y * $this->rowSize;\n\n        for ($x = 0; $x < $this->rowSize; ++$x) {\n            $row->setBulk($x << 5, $this->bits[$offset + $x]);\n        }\n\n        return $row;\n    }\n\n    /**\n     * Sets a row of data from a BitArray.\n     */\n    public function setRow(int $y, BitArray $row) : void\n    {\n        $bits = $row->getBitArray();\n\n        for ($i = 0; $i < $this->rowSize; ++$i) {\n            $this->bits[$y * $this->rowSize + $i] = $bits[$i];\n        }\n    }\n\n    /**\n     * This is useful in detecting the enclosing rectangle of a 'pure' barcode.\n     *\n     * @return int[]|null\n     */\n    public function getEnclosingRectangle() : ?array\n    {\n        $left = $this->width;\n        $top = $this->height;\n        $right = -1;\n        $bottom = -1;\n\n        for ($y = 0; $y < $this->height; ++$y) {\n            for ($x32 = 0; $x32 < $this->rowSize; ++$x32) {\n                $bits = $this->bits[$y * $this->rowSize + $x32];\n\n                if (0 !== $bits) {\n                    if ($y < $top) {\n                        $top = $y;\n                    }\n\n                    if ($y > $bottom) {\n                        $bottom = $y;\n                    }\n\n                    if ($x32 * 32 < $left) {\n                        $bit = 0;\n\n                        while (($bits << (31 - $bit)) === 0) {\n                            $bit++;\n                        }\n\n                        if (($x32 * 32 + $bit) < $left) {\n                            $left = $x32 * 32 + $bit;\n                        }\n                    }\n                }\n\n                if ($x32 * 32 + 31 > $right) {\n                    $bit = 31;\n\n                    while (0 === BitUtils::unsignedRightShift($bits, $bit)) {\n                        --$bit;\n                    }\n\n                    if (($x32 * 32 + $bit) > $right) {\n                        $right = $x32 * 32 + $bit;\n                    }\n                }\n            }\n        }\n\n        $width = $right - $left;\n        $height = $bottom - $top;\n\n        if ($width < 0 || $height < 0) {\n            return null;\n        }\n\n        return [$left, $top, $width, $height];\n    }\n\n    /**\n     * Gets the most top left set bit.\n     *\n     * This is useful in detecting a corner of a 'pure' barcode.\n     *\n     * @return int[]|null\n     */\n    public function getTopLeftOnBit() : ?array\n    {\n        $bitsOffset = 0;\n\n        while ($bitsOffset < count($this->bits) && 0 === $this->bits[$bitsOffset]) {\n            ++$bitsOffset;\n        }\n\n        if (count($this->bits) === $bitsOffset) {\n            return null;\n        }\n\n        $x = intdiv($bitsOffset, $this->rowSize);\n        $y = ($bitsOffset % $this->rowSize) << 5;\n\n        $bits = $this->bits[$bitsOffset];\n        $bit = 0;\n\n        while (0 === ($bits << (31 - $bit))) {\n            ++$bit;\n        }\n\n        $x += $bit;\n\n        return [$x, $y];\n    }\n\n    /**\n     * Gets the most bottom right set bit.\n     *\n     * This is useful in detecting a corner of a 'pure' barcode.\n     *\n     * @return int[]|null\n     */\n    public function getBottomRightOnBit() : ?array\n    {\n        $bitsOffset = count($this->bits) - 1;\n\n        while ($bitsOffset >= 0 && 0 === $this->bits[$bitsOffset]) {\n            --$bitsOffset;\n        }\n\n        if ($bitsOffset < 0) {\n            return null;\n        }\n\n        $x = intdiv($bitsOffset, $this->rowSize);\n        $y = ($bitsOffset % $this->rowSize) << 5;\n\n        $bits = $this->bits[$bitsOffset];\n        $bit  = 0;\n\n        while (0 === BitUtils::unsignedRightShift($bits, $bit)) {\n            --$bit;\n        }\n\n        $x += $bit;\n\n        return [$x, $y];\n    }\n\n    /**\n     * Gets the width of the matrix,\n     */\n    public function getWidth() : int\n    {\n        return $this->width;\n    }\n\n    /**\n     * Gets the height of the matrix.\n     */\n    public function getHeight() : int\n    {\n        return $this->height;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/BitUtils.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\n/**\n * General bit utilities.\n *\n * All utility methods are based on 32-bit integers and also work on 64-bit\n * systems.\n */\nfinal class BitUtils\n{\n    private function __construct()\n    {\n    }\n\n    /**\n     * Performs an unsigned right shift.\n     *\n     * This is the same as the unsigned right shift operator \">>>\" in other\n     * languages.\n     */\n    public static function unsignedRightShift(int $a, int $b) : int\n    {\n        return (\n            $a >= 0\n            ? $a >> $b\n            : (($a & 0x7fffffff) >> $b) | (0x40000000 >> ($b - 1))\n        );\n    }\n\n    /**\n     * Gets the number of trailing zeros.\n     */\n    public static function numberOfTrailingZeros(int $i) : int\n    {\n        $lastPos = strrpos(str_pad(decbin($i), 32, '0', STR_PAD_LEFT), '1');\n        return $lastPos === false ? 32 : 31 - $lastPos;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/CharacterSetEci.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse DASPRiD\\Enum\\AbstractEnum;\n\n/**\n * Encapsulates a Character Set ECI, according to \"Extended Channel Interpretations\" 5.3.1.1 of ISO 18004.\n *\n * @method static self CP437()\n * @method static self ISO8859_1()\n * @method static self ISO8859_2()\n * @method static self ISO8859_3()\n * @method static self ISO8859_4()\n * @method static self ISO8859_5()\n * @method static self ISO8859_6()\n * @method static self ISO8859_7()\n * @method static self ISO8859_8()\n * @method static self ISO8859_9()\n * @method static self ISO8859_10()\n * @method static self ISO8859_11()\n * @method static self ISO8859_12()\n * @method static self ISO8859_13()\n * @method static self ISO8859_14()\n * @method static self ISO8859_15()\n * @method static self ISO8859_16()\n * @method static self SJIS()\n * @method static self CP1250()\n * @method static self CP1251()\n * @method static self CP1252()\n * @method static self CP1256()\n * @method static self UNICODE_BIG_UNMARKED()\n * @method static self UTF8()\n * @method static self ASCII()\n * @method static self BIG5()\n * @method static self GB18030()\n * @method static self EUC_KR()\n */\nfinal class CharacterSetEci extends AbstractEnum\n{\n    protected const CP437 = [[0, 2]];\n    protected const ISO8859_1 = [[1, 3], 'ISO-8859-1'];\n    protected const ISO8859_2 = [[4], 'ISO-8859-2'];\n    protected const ISO8859_3 = [[5], 'ISO-8859-3'];\n    protected const ISO8859_4 = [[6], 'ISO-8859-4'];\n    protected const ISO8859_5 = [[7], 'ISO-8859-5'];\n    protected const ISO8859_6 = [[8], 'ISO-8859-6'];\n    protected const ISO8859_7 = [[9], 'ISO-8859-7'];\n    protected const ISO8859_8 = [[10], 'ISO-8859-8'];\n    protected const ISO8859_9 = [[11], 'ISO-8859-9'];\n    protected const ISO8859_10 = [[12], 'ISO-8859-10'];\n    protected const ISO8859_11 = [[13], 'ISO-8859-11'];\n    protected const ISO8859_12 = [[14], 'ISO-8859-12'];\n    protected const ISO8859_13 = [[15], 'ISO-8859-13'];\n    protected const ISO8859_14 = [[16], 'ISO-8859-14'];\n    protected const ISO8859_15 = [[17], 'ISO-8859-15'];\n    protected const ISO8859_16 = [[18], 'ISO-8859-16'];\n    protected const SJIS = [[20], 'Shift_JIS'];\n    protected const CP1250 = [[21], 'windows-1250'];\n    protected const CP1251 = [[22], 'windows-1251'];\n    protected const CP1252 = [[23], 'windows-1252'];\n    protected const CP1256 = [[24], 'windows-1256'];\n    protected const UNICODE_BIG_UNMARKED = [[25], 'UTF-16BE', 'UnicodeBig'];\n    protected const UTF8 = [[26], 'UTF-8'];\n    protected const ASCII = [[27, 170], 'US-ASCII'];\n    protected const BIG5 = [[28]];\n    protected const GB18030 = [[29], 'GB2312', 'EUC_CN', 'GBK'];\n    protected const EUC_KR = [[30], 'EUC-KR'];\n\n    /**\n     * @var int[]\n     */\n    private $values;\n\n    /**\n     * @var string[]\n     */\n    private $otherEncodingNames;\n\n    /**\n     * @var array<int, self>|null\n     */\n    private static $valueToEci;\n\n    /**\n     * @var array<string, self>|null\n     */\n    private static $nameToEci;\n\n    /**\n     * @param int[] $values\n     */\n    public function __construct(array $values, string ...$otherEncodingNames)\n    {\n        $this->values = $values;\n        $this->otherEncodingNames = $otherEncodingNames;\n    }\n\n    /**\n     * Returns the primary value.\n     */\n    public function getValue() : int\n    {\n        return $this->values[0];\n    }\n\n    /**\n     * Gets character set ECI by value.\n     *\n     * Returns the representing ECI of a given value, or null if it is legal but unsupported.\n     *\n     * @throws InvalidArgumentException if value is not between 0 and 900\n     */\n    public static function getCharacterSetEciByValue(int $value) : ?self\n    {\n        if ($value < 0 || $value >= 900) {\n            throw new InvalidArgumentException('Value must be between 0 and 900');\n        }\n\n        $valueToEci = self::valueToEci();\n\n        if (! array_key_exists($value, $valueToEci)) {\n            return null;\n        }\n\n        return $valueToEci[$value];\n    }\n\n    /**\n     * Returns character set ECI by name.\n     *\n     * Returns the representing ECI of a given name, or null if it is legal but unsupported\n     */\n    public static function getCharacterSetEciByName(string $name) : ?self\n    {\n        $nameToEci = self::nameToEci();\n        $name = strtolower($name);\n\n        if (! array_key_exists($name, $nameToEci)) {\n            return null;\n        }\n\n        return $nameToEci[$name];\n    }\n\n    private static function valueToEci() : array\n    {\n        if (null !== self::$valueToEci) {\n            return self::$valueToEci;\n        }\n\n        self::$valueToEci = [];\n\n        foreach (self::values() as $eci) {\n            foreach ($eci->values as $value) {\n                self::$valueToEci[$value] = $eci;\n            }\n        }\n\n        return self::$valueToEci;\n    }\n\n    private static function nameToEci() : array\n    {\n        if (null !== self::$nameToEci) {\n            return self::$nameToEci;\n        }\n\n        self::$nameToEci = [];\n\n        foreach (self::values() as $eci) {\n            self::$nameToEci[strtolower($eci->name())] = $eci;\n\n            foreach ($eci->otherEncodingNames as $name) {\n                self::$nameToEci[strtolower($name)] = $eci;\n            }\n        }\n\n        return self::$nameToEci;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\n/**\n * Encapsulates the parameters for one error-correction block in one symbol version.\n *\n * This includes the number of data codewords, and the number of times a block with these parameters is used\n * consecutively in the QR code version's format.\n */\nfinal class EcBlock\n{\n    /**\n     * How many times the block is used.\n     *\n     * @var int\n     */\n    private $count;\n\n    /**\n     * Number of data codewords.\n     *\n     * @var int\n     */\n    private $dataCodewords;\n\n    public function __construct(int $count, int $dataCodewords)\n    {\n        $this->count = $count;\n        $this->dataCodewords = $dataCodewords;\n    }\n\n    /**\n     * Returns how many times the block is used.\n     */\n    public function getCount() : int\n    {\n        return $this->count;\n    }\n\n    /**\n     * Returns the number of data codewords.\n     */\n    public function getDataCodewords() : int\n    {\n        return $this->dataCodewords;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/EcBlocks.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\n/**\n * Encapsulates a set of error-correction blocks in one symbol version.\n *\n * Most versions will use blocks of differing sizes within one version, so, this encapsulates the parameters for each\n * set of blocks. It also holds the number of error-correction codewords per block since it will be the same across all\n * blocks within one version.\n */\nfinal class EcBlocks\n{\n    /**\n     * Number of EC codewords per block.\n     *\n     * @var int\n     */\n    private $ecCodewordsPerBlock;\n\n    /**\n     * List of EC blocks.\n     *\n     * @var EcBlock[]\n     */\n    private $ecBlocks;\n\n    public function __construct(int $ecCodewordsPerBlock, EcBlock ...$ecBlocks)\n    {\n        $this->ecCodewordsPerBlock = $ecCodewordsPerBlock;\n        $this->ecBlocks = $ecBlocks;\n    }\n\n    /**\n     * Returns the number of EC codewords per block.\n     */\n    public function getEcCodewordsPerBlock() : int\n    {\n        return $this->ecCodewordsPerBlock;\n    }\n\n    /**\n     * Returns the total number of EC block appearances.\n     */\n    public function getNumBlocks() : int\n    {\n        $total = 0;\n\n        foreach ($this->ecBlocks as $ecBlock) {\n            $total += $ecBlock->getCount();\n        }\n\n        return $total;\n    }\n\n    /**\n     * Returns the total count of EC codewords.\n     */\n    public function getTotalEcCodewords() : int\n    {\n        return $this->ecCodewordsPerBlock * $this->getNumBlocks();\n    }\n\n    /**\n     * Returns the EC blocks included in this collection.\n     *\n     * @return EcBlock[]\n     */\n    public function getEcBlocks() : array\n    {\n        return $this->ecBlocks;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse BaconQrCode\\Exception\\OutOfBoundsException;\nuse DASPRiD\\Enum\\AbstractEnum;\n\n/**\n * Enum representing the four error correction levels.\n *\n * @method static self L() ~7% correction\n * @method static self M() ~15% correction\n * @method static self Q() ~25% correction\n * @method static self H() ~30% correction\n */\nfinal class ErrorCorrectionLevel extends AbstractEnum\n{\n    protected const L = [0x01];\n    protected const M = [0x00];\n    protected const Q = [0x03];\n    protected const H = [0x02];\n\n    /**\n     * @var int\n     */\n    private $bits;\n\n    protected function __construct(int $bits)\n    {\n        $this->bits = $bits;\n    }\n\n    /**\n     * @throws OutOfBoundsException if number of bits is invalid\n     */\n    public static function forBits(int $bits) : self\n    {\n        switch ($bits) {\n            case 0:\n                return self::M();\n\n            case 1:\n                return self::L();\n\n            case 2:\n                return self::H();\n\n            case 3:\n                return self::Q();\n        }\n\n        throw new OutOfBoundsException('Invalid number of bits');\n    }\n\n    /**\n     * Returns the two bits used to encode this error correction level.\n     */\n    public function getBits() : int\n    {\n        return $this->bits;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/FormatInformation.php",
    "content": "<?php\n/**\n * BaconQrCode\n *\n * @link      http://github.com/Bacon/BaconQrCode For the canonical source repository\n * @copyright 2013 Ben 'DASPRiD' Scholzen\n * @license   http://opensource.org/licenses/BSD-2-Clause Simplified BSD License\n */\n\nnamespace BaconQrCode\\Common;\n\n/**\n * Encapsulates a QR Code's format information, including the data mask used and error correction level.\n */\nclass FormatInformation\n{\n    /**\n     * Mask for format information.\n     */\n    private const FORMAT_INFO_MASK_QR = 0x5412;\n\n    /**\n     * Lookup table for decoding format information.\n     *\n     * See ISO 18004:2006, Annex C, Table C.1\n     */\n    private const FORMAT_INFO_DECODE_LOOKUP = [\n        [0x5412, 0x00],\n        [0x5125, 0x01],\n        [0x5e7c, 0x02],\n        [0x5b4b, 0x03],\n        [0x45f9, 0x04],\n        [0x40ce, 0x05],\n        [0x4f97, 0x06],\n        [0x4aa0, 0x07],\n        [0x77c4, 0x08],\n        [0x72f3, 0x09],\n        [0x7daa, 0x0a],\n        [0x789d, 0x0b],\n        [0x662f, 0x0c],\n        [0x6318, 0x0d],\n        [0x6c41, 0x0e],\n        [0x6976, 0x0f],\n        [0x1689, 0x10],\n        [0x13be, 0x11],\n        [0x1ce7, 0x12],\n        [0x19d0, 0x13],\n        [0x0762, 0x14],\n        [0x0255, 0x15],\n        [0x0d0c, 0x16],\n        [0x083b, 0x17],\n        [0x355f, 0x18],\n        [0x3068, 0x19],\n        [0x3f31, 0x1a],\n        [0x3a06, 0x1b],\n        [0x24b4, 0x1c],\n        [0x2183, 0x1d],\n        [0x2eda, 0x1e],\n        [0x2bed, 0x1f],\n    ];\n\n    /**\n     * Offset i holds the number of 1 bits in the binary representation of i.\n     *\n     * @var int[]\n     */\n    private const BITS_SET_IN_HALF_BYTE = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4];\n\n    /**\n     * Error correction level.\n     *\n     * @var ErrorCorrectionLevel\n     */\n    private $ecLevel;\n\n    /**\n     * Data mask.\n     *\n     * @var int\n     */\n    private $dataMask;\n\n    protected function __construct(int $formatInfo)\n    {\n        $this->ecLevel = ErrorCorrectionLevel::forBits(($formatInfo >> 3) & 0x3);\n        $this->dataMask = $formatInfo & 0x7;\n    }\n\n    /**\n     * Checks how many bits are different between two integers.\n     */\n    public static function numBitsDiffering(int $a, int $b) : int\n    {\n        $a ^= $b;\n\n        return (\n            self::BITS_SET_IN_HALF_BYTE[$a & 0xf]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 4) & 0xf)]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 8) & 0xf)]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 12) & 0xf)]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 16) & 0xf)]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 20) & 0xf)]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 24) & 0xf)]\n            + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 28) & 0xf)]\n        );\n    }\n\n    /**\n     * Decodes format information.\n     */\n    public static function decodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self\n    {\n        $formatInfo = self::doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2);\n\n        if (null !== $formatInfo) {\n            return $formatInfo;\n        }\n\n        // Should return null, but, some QR codes apparently do not mask this info. Try again by actually masking the\n        // pattern first.\n        return self::doDecodeFormatInformation(\n            $maskedFormatInfo1 ^ self::FORMAT_INFO_MASK_QR,\n            $maskedFormatInfo2 ^ self::FORMAT_INFO_MASK_QR\n        );\n    }\n\n    /**\n     * Internal method for decoding format information.\n     */\n    private static function doDecodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self\n    {\n        $bestDifference = PHP_INT_MAX;\n        $bestFormatInfo = 0;\n\n        foreach (self::FORMAT_INFO_DECODE_LOOKUP as $decodeInfo) {\n            $targetInfo = $decodeInfo[0];\n\n            if ($targetInfo === $maskedFormatInfo1 || $targetInfo === $maskedFormatInfo2) {\n                // Found an exact match\n                return new self($decodeInfo[1]);\n            }\n\n            $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $targetInfo);\n\n            if ($bitsDifference < $bestDifference) {\n                $bestFormatInfo = $decodeInfo[1];\n                $bestDifference = $bitsDifference;\n            }\n\n            if ($maskedFormatInfo1 !== $maskedFormatInfo2) {\n                // Also try the other option\n                $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $targetInfo);\n\n                if ($bitsDifference < $bestDifference) {\n                    $bestFormatInfo = $decodeInfo[1];\n                    $bestDifference = $bitsDifference;\n                }\n            }\n        }\n\n        // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match.\n        if ($bestDifference <= 3) {\n            return new self($bestFormatInfo);\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns the error correction level.\n     */\n    public function getErrorCorrectionLevel() : ErrorCorrectionLevel\n    {\n        return $this->ecLevel;\n    }\n\n    /**\n     * Returns the data mask.\n     */\n    public function getDataMask() : int\n    {\n        return $this->dataMask;\n    }\n\n    /**\n     * Hashes the code of the EC level.\n     */\n    public function hashCode() : int\n    {\n        return ($this->ecLevel->getBits() << 3) | $this->dataMask;\n    }\n\n    /**\n     * Verifies if this instance equals another one.\n     */\n    public function equals(self $other) : bool\n    {\n        return (\n            $this->ecLevel === $other->ecLevel\n            && $this->dataMask === $other->dataMask\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/Mode.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse DASPRiD\\Enum\\AbstractEnum;\n\n/**\n * Enum representing various modes in which data can be encoded to bits.\n *\n * @method static self TERMINATOR()\n * @method static self NUMERIC()\n * @method static self ALPHANUMERIC()\n * @method static self STRUCTURED_APPEND()\n * @method static self BYTE()\n * @method static self ECI()\n * @method static self KANJI()\n * @method static self FNC1_FIRST_POSITION()\n * @method static self FNC1_SECOND_POSITION()\n * @method static self HANZI()\n */\nfinal class Mode extends AbstractEnum\n{\n    protected const TERMINATOR = [[0, 0, 0], 0x00];\n    protected const NUMERIC = [[10, 12, 14], 0x01];\n    protected const ALPHANUMERIC = [[9, 11, 13], 0x02];\n    protected const STRUCTURED_APPEND = [[0, 0, 0], 0x03];\n    protected const BYTE = [[8, 16, 16], 0x04];\n    protected const ECI = [[0, 0, 0], 0x07];\n    protected const KANJI = [[8, 10, 12], 0x08];\n    protected const FNC1_FIRST_POSITION = [[0, 0, 0], 0x05];\n    protected const FNC1_SECOND_POSITION = [[0, 0, 0], 0x09];\n    protected const HANZI = [[8, 10, 12], 0x0d];\n\n    /**\n     * @var int[]\n     */\n    private $characterCountBitsForVersions;\n\n    /**\n     * @var int\n     */\n    private $bits;\n\n    /**\n     * @param int[] $characterCountBitsForVersions\n     */\n    protected function __construct(array $characterCountBitsForVersions, int $bits)\n    {\n        $this->characterCountBitsForVersions = $characterCountBitsForVersions;\n        $this->bits = $bits;\n    }\n\n    /**\n     * Returns the number of bits used in a specific QR code version.\n     */\n    public function getCharacterCountBits(Version $version) : int\n    {\n        $number = $version->getVersionNumber();\n\n        if ($number <= 9) {\n            $offset = 0;\n        } elseif ($number <= 26) {\n            $offset = 1;\n        } else {\n            $offset = 2;\n        }\n\n        return $this->characterCountBitsForVersions[$offset];\n    }\n\n    /**\n     * Returns the four bits used to encode this mode.\n     */\n    public function getBits() : int\n    {\n        return $this->bits;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse BaconQrCode\\Exception\\RuntimeException;\nuse SplFixedArray;\n\n/**\n * Reed-Solomon codec for 8-bit characters.\n *\n * Based on libfec by Phil Karn, KA9Q.\n */\nfinal class ReedSolomonCodec\n{\n    /**\n     * Symbol size in bits.\n     *\n     * @var int\n     */\n    private $symbolSize;\n\n    /**\n     * Block size in symbols.\n     *\n     * @var int\n     */\n    private $blockSize;\n\n    /**\n     * First root of RS code generator polynomial, index form.\n     *\n     * @var int\n     */\n    private $firstRoot;\n\n    /**\n     * Primitive element to generate polynomial roots, index form.\n     *\n     * @var int\n     */\n    private $primitive;\n\n    /**\n     * Prim-th root of 1, index form.\n     *\n     * @var int\n     */\n    private $iPrimitive;\n\n    /**\n     * RS code generator polynomial degree (number of roots).\n     *\n     * @var int\n     */\n    private $numRoots;\n\n    /**\n     * Padding bytes at front of shortened block.\n     *\n     * @var int\n     */\n    private $padding;\n\n    /**\n     * Log lookup table.\n     *\n     * @var SplFixedArray\n     */\n    private $alphaTo;\n\n    /**\n     * Anti-Log lookup table.\n     *\n     * @var SplFixedArray\n     */\n    private $indexOf;\n\n    /**\n     * Generator polynomial.\n     *\n     * @var SplFixedArray\n     */\n    private $generatorPoly;\n\n    /**\n     * @throws InvalidArgumentException if symbol size ist not between 0 and 8\n     * @throws InvalidArgumentException if first root is invalid\n     * @throws InvalidArgumentException if num roots is invalid\n     * @throws InvalidArgumentException if padding is invalid\n     * @throws RuntimeException if field generator polynomial is not primitive\n     */\n    public function __construct(\n        int $symbolSize,\n        int $gfPoly,\n        int $firstRoot,\n        int $primitive,\n        int $numRoots,\n        int $padding\n    ) {\n        if ($symbolSize < 0 || $symbolSize > 8) {\n            throw new InvalidArgumentException('Symbol size must be between 0 and 8');\n        }\n\n        if ($firstRoot < 0 || $firstRoot >= (1 << $symbolSize)) {\n            throw new InvalidArgumentException('First root must be between 0 and ' . (1 << $symbolSize));\n        }\n\n        if ($numRoots < 0 || $numRoots >= (1 << $symbolSize)) {\n            throw new InvalidArgumentException('Num roots must be between 0 and ' . (1 << $symbolSize));\n        }\n\n        if ($padding < 0 || $padding >= ((1 << $symbolSize) - 1 - $numRoots)) {\n            throw new InvalidArgumentException(\n                'Padding must be between 0 and ' . ((1 << $symbolSize) - 1 - $numRoots)\n            );\n        }\n\n        $this->symbolSize = $symbolSize;\n        $this->blockSize = (1 << $symbolSize) - 1;\n        $this->padding = $padding;\n        $this->alphaTo = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false);\n        $this->indexOf = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false);\n\n        // Generate galous field lookup table\n        $this->indexOf[0] = $this->blockSize;\n        $this->alphaTo[$this->blockSize] = 0;\n\n        $sr = 1;\n\n        for ($i = 0; $i < $this->blockSize; ++$i) {\n            $this->indexOf[$sr] = $i;\n            $this->alphaTo[$i]  = $sr;\n\n            $sr <<= 1;\n\n            if ($sr & (1 << $symbolSize)) {\n                $sr ^= $gfPoly;\n            }\n\n            $sr &= $this->blockSize;\n        }\n\n        if (1 !== $sr) {\n            throw new RuntimeException('Field generator polynomial is not primitive');\n        }\n\n        // Form RS code generator polynomial from its roots\n        $this->generatorPoly = SplFixedArray::fromArray(array_fill(0, $numRoots + 1, 0), false);\n        $this->firstRoot = $firstRoot;\n        $this->primitive = $primitive;\n        $this->numRoots = $numRoots;\n\n        // Find prim-th root of 1, used in decoding\n        for ($iPrimitive = 1; ($iPrimitive % $primitive) !== 0; $iPrimitive += $this->blockSize) {\n        }\n\n        $this->iPrimitive = intdiv($iPrimitive, $primitive);\n\n        $this->generatorPoly[0] = 1;\n\n        for ($i = 0, $root = $firstRoot * $primitive; $i < $numRoots; ++$i, $root += $primitive) {\n            $this->generatorPoly[$i + 1] = 1;\n\n            for ($j = $i; $j > 0; $j--) {\n                if ($this->generatorPoly[$j] !== 0) {\n                    $this->generatorPoly[$j] = $this->generatorPoly[$j - 1] ^ $this->alphaTo[\n                        $this->modNn($this->indexOf[$this->generatorPoly[$j]] + $root)\n                    ];\n                } else {\n                    $this->generatorPoly[$j] = $this->generatorPoly[$j - 1];\n                }\n            }\n\n            $this->generatorPoly[$j] = $this->alphaTo[$this->modNn($this->indexOf[$this->generatorPoly[0]] + $root)];\n        }\n\n        // Convert generator poly to index form for quicker encoding\n        for ($i = 0; $i <= $numRoots; ++$i) {\n            $this->generatorPoly[$i] = $this->indexOf[$this->generatorPoly[$i]];\n        }\n    }\n\n    /**\n     * Encodes data and writes result back into parity array.\n     */\n    public function encode(SplFixedArray $data, SplFixedArray $parity) : void\n    {\n        for ($i = 0; $i < $this->numRoots; ++$i) {\n            $parity[$i] = 0;\n        }\n\n        $iterations = $this->blockSize - $this->numRoots - $this->padding;\n\n        for ($i = 0; $i < $iterations; ++$i) {\n            $feedback = $this->indexOf[$data[$i] ^ $parity[0]];\n\n            if ($feedback !== $this->blockSize) {\n                // Feedback term is non-zero\n                $feedback = $this->modNn($this->blockSize - $this->generatorPoly[$this->numRoots] + $feedback);\n\n                for ($j = 1; $j < $this->numRoots; ++$j) {\n                    $parity[$j] = $parity[$j] ^ $this->alphaTo[\n                        $this->modNn($feedback + $this->generatorPoly[$this->numRoots - $j])\n                    ];\n                }\n            }\n\n            for ($j = 0; $j < $this->numRoots - 1; ++$j) {\n                $parity[$j] = $parity[$j + 1];\n            }\n\n            if ($feedback !== $this->blockSize) {\n                $parity[$this->numRoots - 1] = $this->alphaTo[$this->modNn($feedback + $this->generatorPoly[0])];\n            } else {\n                $parity[$this->numRoots - 1] = 0;\n            }\n        }\n    }\n\n    /**\n     * Decodes received data.\n     */\n    public function decode(SplFixedArray $data, SplFixedArray $erasures = null) : ?int\n    {\n        // This speeds up the initialization a bit.\n        $numRootsPlusOne = SplFixedArray::fromArray(array_fill(0, $this->numRoots + 1, 0), false);\n        $numRoots = SplFixedArray::fromArray(array_fill(0, $this->numRoots, 0), false);\n\n        $lambda = clone $numRootsPlusOne;\n        $b = clone $numRootsPlusOne;\n        $t = clone $numRootsPlusOne;\n        $omega = clone $numRootsPlusOne;\n        $root = clone $numRoots;\n        $loc = clone $numRoots;\n\n        $numErasures = (null !== $erasures ? count($erasures) : 0);\n\n        // Form the Syndromes; i.e., evaluate data(x) at roots of g(x)\n        $syndromes = SplFixedArray::fromArray(array_fill(0, $this->numRoots, $data[0]), false);\n\n        for ($i = 1; $i < $this->blockSize - $this->padding; ++$i) {\n            for ($j = 0; $j < $this->numRoots; ++$j) {\n                if ($syndromes[$j] === 0) {\n                    $syndromes[$j] = $data[$i];\n                } else {\n                    $syndromes[$j] = $data[$i] ^ $this->alphaTo[\n                        $this->modNn($this->indexOf[$syndromes[$j]] + ($this->firstRoot + $j) * $this->primitive)\n                    ];\n                }\n            }\n        }\n\n        // Convert syndromes to index form, checking for nonzero conditions\n        $syndromeError = 0;\n\n        for ($i = 0; $i < $this->numRoots; ++$i) {\n            $syndromeError |= $syndromes[$i];\n            $syndromes[$i] = $this->indexOf[$syndromes[$i]];\n        }\n\n        if (! $syndromeError) {\n            // If syndrome is zero, data[] is a codeword and there are no errors to correct, so return data[]\n            // unmodified.\n            return 0;\n        }\n\n        $lambda[0] = 1;\n\n        if ($numErasures > 0) {\n            // Init lambda to be the erasure locator polynomial\n            $lambda[1] = $this->alphaTo[$this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[0]))];\n\n            for ($i = 1; $i < $numErasures; ++$i) {\n                $u = $this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[$i]));\n\n                for ($j = $i + 1; $j > 0; --$j) {\n                    $tmp = $this->indexOf[$lambda[$j - 1]];\n\n                    if ($tmp !== $this->blockSize) {\n                        $lambda[$j] = $lambda[$j] ^ $this->alphaTo[$this->modNn($u + $tmp)];\n                    }\n                }\n            }\n        }\n\n        for ($i = 0; $i <= $this->numRoots; ++$i) {\n            $b[$i] = $this->indexOf[$lambda[$i]];\n        }\n\n        // Begin Berlekamp-Massey algorithm to determine error+erasure locator polynomial\n        $r  = $numErasures;\n        $el = $numErasures;\n\n        while (++$r <= $this->numRoots) {\n            // Compute discrepancy at the r-th step in poly form\n            $discrepancyR = 0;\n\n            for ($i = 0; $i < $r; ++$i) {\n                if ($lambda[$i] !== 0 && $syndromes[$r - $i - 1] !== $this->blockSize) {\n                    $discrepancyR ^= $this->alphaTo[\n                        $this->modNn($this->indexOf[$lambda[$i]] + $syndromes[$r - $i - 1])\n                    ];\n                }\n            }\n\n            $discrepancyR = $this->indexOf[$discrepancyR];\n\n            if ($discrepancyR === $this->blockSize) {\n                $tmp = $b->toArray();\n                array_unshift($tmp, $this->blockSize);\n                array_pop($tmp);\n                $b = SplFixedArray::fromArray($tmp, false);\n                continue;\n            }\n\n            $t[0] = $lambda[0];\n\n            for ($i = 0; $i < $this->numRoots; ++$i) {\n                if ($b[$i] !== $this->blockSize) {\n                    $t[$i + 1] = $lambda[$i + 1] ^ $this->alphaTo[$this->modNn($discrepancyR + $b[$i])];\n                } else {\n                    $t[$i + 1] = $lambda[$i + 1];\n                }\n            }\n\n            if (2 * $el <= $r + $numErasures - 1) {\n                $el = $r + $numErasures - $el;\n\n                for ($i = 0; $i <= $this->numRoots; ++$i) {\n                    $b[$i] = (\n                        $lambda[$i] === 0\n                        ? $this->blockSize\n                        : $this->modNn($this->indexOf[$lambda[$i]] - $discrepancyR + $this->blockSize)\n                    );\n                }\n            } else {\n                $tmp = $b->toArray();\n                array_unshift($tmp, $this->blockSize);\n                array_pop($tmp);\n                $b = SplFixedArray::fromArray($tmp, false);\n            }\n\n            $lambda = clone $t;\n        }\n\n        // Convert lambda to index form and compute deg(lambda(x))\n        $degLambda = 0;\n\n        for ($i = 0; $i <= $this->numRoots; ++$i) {\n            $lambda[$i] = $this->indexOf[$lambda[$i]];\n\n            if ($lambda[$i] !== $this->blockSize) {\n                $degLambda = $i;\n            }\n        }\n\n        // Find roots of the error+erasure locator polynomial by Chien search.\n        $reg = clone $lambda;\n        $reg[0] = 0;\n        $count = 0;\n        $i = 1;\n\n        for ($k = $this->iPrimitive - 1; $i <= $this->blockSize; ++$i, $k = $this->modNn($k + $this->iPrimitive)) {\n            $q = 1;\n\n            for ($j = $degLambda; $j > 0; $j--) {\n                if ($reg[$j] !== $this->blockSize) {\n                    $reg[$j] = $this->modNn($reg[$j] + $j);\n                    $q ^= $this->alphaTo[$reg[$j]];\n                }\n            }\n\n            if ($q !== 0) {\n                // Not a root\n                continue;\n            }\n\n            // Store root (index-form) and error location number\n            $root[$count] = $i;\n            $loc[$count] = $k;\n\n            if (++$count === $degLambda) {\n                break;\n            }\n        }\n\n        if ($degLambda !== $count) {\n            // deg(lambda) unequal to number of roots: uncorrectable error detected\n            return null;\n        }\n\n        // Compute err+eras evaluate poly omega(x) = s(x)*lambda(x) (modulo x**numRoots). In index form. Also find\n        // deg(omega).\n        $degOmega = $degLambda - 1;\n\n        for ($i = 0; $i <= $degOmega; ++$i) {\n            $tmp = 0;\n\n            for ($j = $i; $j >= 0; --$j) {\n                if ($syndromes[$i - $j] !== $this->blockSize && $lambda[$j] !== $this->blockSize) {\n                    $tmp ^= $this->alphaTo[$this->modNn($syndromes[$i - $j] + $lambda[$j])];\n                }\n            }\n\n            $omega[$i] = $this->indexOf[$tmp];\n        }\n\n        // Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = inv(X(l))**(firstRoot-1) and\n        // den = lambda_pr(inv(X(l))) all in poly form.\n        for ($j = $count - 1; $j >= 0; --$j) {\n            $num1 = 0;\n\n            for ($i = $degOmega; $i >= 0; $i--) {\n                if ($omega[$i] !== $this->blockSize) {\n                    $num1 ^= $this->alphaTo[$this->modNn($omega[$i] + $i * $root[$j])];\n                }\n            }\n\n            $num2 = $this->alphaTo[$this->modNn($root[$j] * ($this->firstRoot - 1) + $this->blockSize)];\n            $den  = 0;\n\n            // lambda[i+1] for i even is the formal derivativelambda_pr of lambda[i]\n            for ($i = min($degLambda, $this->numRoots - 1) & ~1; $i >= 0; $i -= 2) {\n                if ($lambda[$i + 1] !== $this->blockSize) {\n                    $den ^= $this->alphaTo[$this->modNn($lambda[$i + 1] + $i * $root[$j])];\n                }\n            }\n\n            // Apply error to data\n            if ($num1 !== 0 && $loc[$j] >= $this->padding) {\n                $data[$loc[$j] - $this->padding] = $data[$loc[$j] - $this->padding] ^ (\n                    $this->alphaTo[\n                        $this->modNn(\n                            $this->indexOf[$num1] + $this->indexOf[$num2] + $this->blockSize - $this->indexOf[$den]\n                        )\n                    ]\n                );\n            }\n        }\n\n        if (null !== $erasures) {\n            if (count($erasures) < $count) {\n                $erasures->setSize($count);\n            }\n\n            for ($i = 0; $i < $count; $i++) {\n                $erasures[$i] = $loc[$i];\n            }\n        }\n\n        return $count;\n    }\n\n    /**\n     * Computes $x % GF_SIZE, where GF_SIZE is 2**GF_BITS - 1, without a slow divide.\n     */\n    private function modNn(int $x) : int\n    {\n        while ($x >= $this->blockSize) {\n            $x -= $this->blockSize;\n            $x = ($x >> $this->symbolSize) + ($x & $this->blockSize);\n        }\n\n        return $x;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Common/Version.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Common;\n\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse SplFixedArray;\n\n/**\n * Version representation.\n */\nfinal class Version\n{\n    private const VERSION_DECODE_INFO = [\n        0x07c94,\n        0x085bc,\n        0x09a99,\n        0x0a4d3,\n        0x0bbf6,\n        0x0c762,\n        0x0d847,\n        0x0e60d,\n        0x0f928,\n        0x10b78,\n        0x1145d,\n        0x12a17,\n        0x13532,\n        0x149a6,\n        0x15683,\n        0x168c9,\n        0x177ec,\n        0x18ec4,\n        0x191e1,\n        0x1afab,\n        0x1b08e,\n        0x1cc1a,\n        0x1d33f,\n        0x1ed75,\n        0x1f250,\n        0x209d5,\n        0x216f0,\n        0x228ba,\n        0x2379f,\n        0x24b0b,\n        0x2542e,\n        0x26a64,\n        0x27541,\n        0x28c69,\n    ];\n\n    /**\n     * Version number of this version.\n     *\n     * @var int\n     */\n    private $versionNumber;\n\n    /**\n     * Alignment pattern centers.\n     *\n     * @var SplFixedArray\n     */\n    private $alignmentPatternCenters;\n\n    /**\n     * Error correction blocks.\n     *\n     * @var EcBlocks[]\n     */\n    private $ecBlocks;\n\n    /**\n     * Total number of codewords.\n     *\n     * @var int\n     */\n    private $totalCodewords;\n\n    /**\n     * Cached version instances.\n     *\n     * @var array<int, self>|null\n     */\n    private static $versions;\n\n    /**\n     * @param int[] $alignmentPatternCenters\n     */\n    private function __construct(\n        int $versionNumber,\n        array $alignmentPatternCenters,\n        EcBlocks ...$ecBlocks\n    ) {\n        $this->versionNumber = $versionNumber;\n        $this->alignmentPatternCenters = $alignmentPatternCenters;\n        $this->ecBlocks = $ecBlocks;\n\n        $totalCodewords = 0;\n        $ecCodewords = $ecBlocks[0]->getEcCodewordsPerBlock();\n\n        foreach ($ecBlocks[0]->getEcBlocks() as $ecBlock) {\n            $totalCodewords += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords);\n        }\n\n        $this->totalCodewords = $totalCodewords;\n    }\n\n    /**\n     * Returns the version number.\n     */\n    public function getVersionNumber() : int\n    {\n        return $this->versionNumber;\n    }\n\n    /**\n     * Returns the alignment pattern centers.\n     *\n     * @return int[]\n     */\n    public function getAlignmentPatternCenters() : array\n    {\n        return $this->alignmentPatternCenters;\n    }\n\n    /**\n     * Returns the total number of codewords.\n     */\n    public function getTotalCodewords() : int\n    {\n        return $this->totalCodewords;\n    }\n\n    /**\n     * Calculates the dimension for the current version.\n     */\n    public function getDimensionForVersion() : int\n    {\n        return 17 + 4 * $this->versionNumber;\n    }\n\n    /**\n     * Returns the number of EC blocks for a specific EC level.\n     */\n    public function getEcBlocksForLevel(ErrorCorrectionLevel $ecLevel) : EcBlocks\n    {\n        return $this->ecBlocks[$ecLevel->ordinal()];\n    }\n\n    /**\n     * Gets a provisional version number for a specific dimension.\n     *\n     * @throws InvalidArgumentException if dimension is not 1 mod 4\n     */\n    public static function getProvisionalVersionForDimension(int $dimension) : self\n    {\n        if (1 !== $dimension % 4) {\n            throw new InvalidArgumentException('Dimension is not 1 mod 4');\n        }\n\n        return self::getVersionForNumber(intdiv($dimension - 17, 4));\n    }\n\n    /**\n     * Gets a version instance for a specific version number.\n     *\n     * @throws InvalidArgumentException if version number is out of range\n     */\n    public static function getVersionForNumber(int $versionNumber) : self\n    {\n        if ($versionNumber < 1 || $versionNumber > 40) {\n            throw new InvalidArgumentException('Version number must be between 1 and 40');\n        }\n\n        return self::versions()[$versionNumber - 1];\n    }\n\n    /**\n     * Decodes version information from an integer and returns the version.\n     */\n    public static function decodeVersionInformation(int $versionBits) : ?self\n    {\n        $bestDifference = PHP_INT_MAX;\n        $bestVersion = 0;\n\n        foreach (self::VERSION_DECODE_INFO as $i => $targetVersion) {\n            if ($targetVersion === $versionBits) {\n                return self::getVersionForNumber($i + 7);\n            }\n\n            $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion);\n\n            if ($bitsDifference < $bestDifference) {\n                $bestVersion = $i + 7;\n                $bestDifference = $bitsDifference;\n            }\n        }\n\n        if ($bestDifference <= 3) {\n            return self::getVersionForNumber($bestVersion);\n        }\n\n        return null;\n    }\n\n    /**\n     * Builds the function pattern for the current version.\n     */\n    public function buildFunctionPattern() : BitMatrix\n    {\n        $dimension = $this->getDimensionForVersion();\n        $bitMatrix = new BitMatrix($dimension);\n\n        // Top left finder pattern + separator + format\n        $bitMatrix->setRegion(0, 0, 9, 9);\n        // Top right finder pattern + separator + format\n        $bitMatrix->setRegion($dimension - 8, 0, 8, 9);\n        // Bottom left finder pattern + separator + format\n        $bitMatrix->setRegion(0, $dimension - 8, 9, 8);\n\n        // Alignment patterns\n        $max = count($this->alignmentPatternCenters);\n\n        for ($x = 0; $x < $max; ++$x) {\n            $i = $this->alignmentPatternCenters[$x] - 2;\n\n            for ($y = 0; $y < $max; ++$y) {\n                if (($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)) {\n                    // No alignment patterns near the three finder paterns\n                    continue;\n                }\n\n                $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5);\n            }\n        }\n\n        // Vertical timing pattern\n        $bitMatrix->setRegion(6, 9, 1, $dimension - 17);\n        // Horizontal timing pattern\n        $bitMatrix->setRegion(9, 6, $dimension - 17, 1);\n\n        if ($this->versionNumber > 6) {\n            // Version info, top right\n            $bitMatrix->setRegion($dimension - 11, 0, 3, 6);\n            // Version info, bottom left\n            $bitMatrix->setRegion(0, $dimension - 11, 6, 3);\n        }\n\n        return $bitMatrix;\n    }\n\n    /**\n     * Returns a string representation for the version.\n     */\n    public function __toString() : string\n    {\n        return (string) $this->versionNumber;\n    }\n\n    /**\n     * Build and cache a specific version.\n     *\n     * See ISO 18004:2006 6.5.1 Table 9.\n     *\n     * @return array<int, self>\n     */\n    private static function versions() : array\n    {\n        if (null !== self::$versions) {\n            return self::$versions;\n        }\n\n        return self::$versions = [\n            new self(\n                1,\n                [],\n                new EcBlocks(7, new EcBlock(1, 19)),\n                new EcBlocks(10, new EcBlock(1, 16)),\n                new EcBlocks(13, new EcBlock(1, 13)),\n                new EcBlocks(17, new EcBlock(1, 9))\n            ),\n            new self(\n                2,\n                [6, 18],\n                new EcBlocks(10, new EcBlock(1, 34)),\n                new EcBlocks(16, new EcBlock(1, 28)),\n                new EcBlocks(22, new EcBlock(1, 22)),\n                new EcBlocks(28, new EcBlock(1, 16))\n            ),\n            new self(\n                3,\n                [6, 22],\n                new EcBlocks(15, new EcBlock(1, 55)),\n                new EcBlocks(26, new EcBlock(1, 44)),\n                new EcBlocks(18, new EcBlock(2, 17)),\n                new EcBlocks(22, new EcBlock(2, 13))\n            ),\n            new self(\n                4,\n                [6, 26],\n                new EcBlocks(20, new EcBlock(1, 80)),\n                new EcBlocks(18, new EcBlock(2, 32)),\n                new EcBlocks(26, new EcBlock(3, 24)),\n                new EcBlocks(16, new EcBlock(4, 9))\n            ),\n            new self(\n                5,\n                [6, 30],\n                new EcBlocks(26, new EcBlock(1, 108)),\n                new EcBlocks(24, new EcBlock(2, 43)),\n                new EcBlocks(18, new EcBlock(2, 15), new EcBlock(2, 16)),\n                new EcBlocks(22, new EcBlock(2, 11), new EcBlock(2, 12))\n            ),\n            new self(\n                6,\n                [6, 34],\n                new EcBlocks(18, new EcBlock(2, 68)),\n                new EcBlocks(16, new EcBlock(4, 27)),\n                new EcBlocks(24, new EcBlock(4, 19)),\n                new EcBlocks(28, new EcBlock(4, 15))\n            ),\n            new self(\n                7,\n                [6, 22, 38],\n                new EcBlocks(20, new EcBlock(2, 78)),\n                new EcBlocks(18, new EcBlock(4, 31)),\n                new EcBlocks(18, new EcBlock(2, 14), new EcBlock(4, 15)),\n                new EcBlocks(26, new EcBlock(4, 13), new EcBlock(1, 14))\n            ),\n            new self(\n                8,\n                [6, 24, 42],\n                new EcBlocks(24, new EcBlock(2, 97)),\n                new EcBlocks(22, new EcBlock(2, 38), new EcBlock(2, 39)),\n                new EcBlocks(22, new EcBlock(4, 18), new EcBlock(2, 19)),\n                new EcBlocks(26, new EcBlock(4, 14), new EcBlock(2, 15))\n            ),\n            new self(\n                9,\n                [6, 26, 46],\n                new EcBlocks(30, new EcBlock(2, 116)),\n                new EcBlocks(22, new EcBlock(3, 36), new EcBlock(2, 37)),\n                new EcBlocks(20, new EcBlock(4, 16), new EcBlock(4, 17)),\n                new EcBlocks(24, new EcBlock(4, 12), new EcBlock(4, 13))\n            ),\n            new self(\n                10,\n                [6, 28, 50],\n                new EcBlocks(18, new EcBlock(2, 68), new EcBlock(2, 69)),\n                new EcBlocks(26, new EcBlock(4, 43), new EcBlock(1, 44)),\n                new EcBlocks(24, new EcBlock(6, 19), new EcBlock(2, 20)),\n                new EcBlocks(28, new EcBlock(6, 15), new EcBlock(2, 16))\n            ),\n            new self(\n                11,\n                [6, 30, 54],\n                new EcBlocks(20, new EcBlock(4, 81)),\n                new EcBlocks(30, new EcBlock(1, 50), new EcBlock(4, 51)),\n                new EcBlocks(28, new EcBlock(4, 22), new EcBlock(4, 23)),\n                new EcBlocks(24, new EcBlock(3, 12), new EcBlock(8, 13))\n            ),\n            new self(\n                12,\n                [6, 32, 58],\n                new EcBlocks(24, new EcBlock(2, 92), new EcBlock(2, 93)),\n                new EcBlocks(22, new EcBlock(6, 36), new EcBlock(2, 37)),\n                new EcBlocks(26, new EcBlock(4, 20), new EcBlock(6, 21)),\n                new EcBlocks(28, new EcBlock(7, 14), new EcBlock(4, 15))\n            ),\n            new self(\n                13,\n                [6, 34, 62],\n                new EcBlocks(26, new EcBlock(4, 107)),\n                new EcBlocks(22, new EcBlock(8, 37), new EcBlock(1, 38)),\n                new EcBlocks(24, new EcBlock(8, 20), new EcBlock(4, 21)),\n                new EcBlocks(22, new EcBlock(12, 11), new EcBlock(4, 12))\n            ),\n            new self(\n                14,\n                [6, 26, 46, 66],\n                new EcBlocks(30, new EcBlock(3, 115), new EcBlock(1, 116)),\n                new EcBlocks(24, new EcBlock(4, 40), new EcBlock(5, 41)),\n                new EcBlocks(20, new EcBlock(11, 16), new EcBlock(5, 17)),\n                new EcBlocks(24, new EcBlock(11, 12), new EcBlock(5, 13))\n            ),\n            new self(\n                15,\n                [6, 26, 48, 70],\n                new EcBlocks(22, new EcBlock(5, 87), new EcBlock(1, 88)),\n                new EcBlocks(24, new EcBlock(5, 41), new EcBlock(5, 42)),\n                new EcBlocks(30, new EcBlock(5, 24), new EcBlock(7, 25)),\n                new EcBlocks(24, new EcBlock(11, 12), new EcBlock(7, 13))\n            ),\n            new self(\n                16,\n                [6, 26, 50, 74],\n                new EcBlocks(24, new EcBlock(5, 98), new EcBlock(1, 99)),\n                new EcBlocks(28, new EcBlock(7, 45), new EcBlock(3, 46)),\n                new EcBlocks(24, new EcBlock(15, 19), new EcBlock(2, 20)),\n                new EcBlocks(30, new EcBlock(3, 15), new EcBlock(13, 16))\n            ),\n            new self(\n                17,\n                [6, 30, 54, 78],\n                new EcBlocks(28, new EcBlock(1, 107), new EcBlock(5, 108)),\n                new EcBlocks(28, new EcBlock(10, 46), new EcBlock(1, 47)),\n                new EcBlocks(28, new EcBlock(1, 22), new EcBlock(15, 23)),\n                new EcBlocks(28, new EcBlock(2, 14), new EcBlock(17, 15))\n            ),\n            new self(\n                18,\n                [6, 30, 56, 82],\n                new EcBlocks(30, new EcBlock(5, 120), new EcBlock(1, 121)),\n                new EcBlocks(26, new EcBlock(9, 43), new EcBlock(4, 44)),\n                new EcBlocks(28, new EcBlock(17, 22), new EcBlock(1, 23)),\n                new EcBlocks(28, new EcBlock(2, 14), new EcBlock(19, 15))\n            ),\n            new self(\n                19,\n                [6, 30, 58, 86],\n                new EcBlocks(28, new EcBlock(3, 113), new EcBlock(4, 114)),\n                new EcBlocks(26, new EcBlock(3, 44), new EcBlock(11, 45)),\n                new EcBlocks(26, new EcBlock(17, 21), new EcBlock(4, 22)),\n                new EcBlocks(26, new EcBlock(9, 13), new EcBlock(16, 14))\n            ),\n            new self(\n                20,\n                [6, 34, 62, 90],\n                new EcBlocks(28, new EcBlock(3, 107), new EcBlock(5, 108)),\n                new EcBlocks(26, new EcBlock(3, 41), new EcBlock(13, 42)),\n                new EcBlocks(30, new EcBlock(15, 24), new EcBlock(5, 25)),\n                new EcBlocks(28, new EcBlock(15, 15), new EcBlock(10, 16))\n            ),\n            new self(\n                21,\n                [6, 28, 50, 72, 94],\n                new EcBlocks(28, new EcBlock(4, 116), new EcBlock(4, 117)),\n                new EcBlocks(26, new EcBlock(17, 42)),\n                new EcBlocks(28, new EcBlock(17, 22), new EcBlock(6, 23)),\n                new EcBlocks(30, new EcBlock(19, 16), new EcBlock(6, 17))\n            ),\n            new self(\n                22,\n                [6, 26, 50, 74, 98],\n                new EcBlocks(28, new EcBlock(2, 111), new EcBlock(7, 112)),\n                new EcBlocks(28, new EcBlock(17, 46)),\n                new EcBlocks(30, new EcBlock(7, 24), new EcBlock(16, 25)),\n                new EcBlocks(24, new EcBlock(34, 13))\n            ),\n            new self(\n                23,\n                [6, 30, 54, 78, 102],\n                new EcBlocks(30, new EcBlock(4, 121), new EcBlock(5, 122)),\n                new EcBlocks(28, new EcBlock(4, 47), new EcBlock(14, 48)),\n                new EcBlocks(30, new EcBlock(11, 24), new EcBlock(14, 25)),\n                new EcBlocks(30, new EcBlock(16, 15), new EcBlock(14, 16))\n            ),\n            new self(\n                24,\n                [6, 28, 54, 80, 106],\n                new EcBlocks(30, new EcBlock(6, 117), new EcBlock(4, 118)),\n                new EcBlocks(28, new EcBlock(6, 45), new EcBlock(14, 46)),\n                new EcBlocks(30, new EcBlock(11, 24), new EcBlock(16, 25)),\n                new EcBlocks(30, new EcBlock(30, 16), new EcBlock(2, 17))\n            ),\n            new self(\n                25,\n                [6, 32, 58, 84, 110],\n                new EcBlocks(26, new EcBlock(8, 106), new EcBlock(4, 107)),\n                new EcBlocks(28, new EcBlock(8, 47), new EcBlock(13, 48)),\n                new EcBlocks(30, new EcBlock(7, 24), new EcBlock(22, 25)),\n                new EcBlocks(30, new EcBlock(22, 15), new EcBlock(13, 16))\n            ),\n            new self(\n                26,\n                [6, 30, 58, 86, 114],\n                new EcBlocks(28, new EcBlock(10, 114), new EcBlock(2, 115)),\n                new EcBlocks(28, new EcBlock(19, 46), new EcBlock(4, 47)),\n                new EcBlocks(28, new EcBlock(28, 22), new EcBlock(6, 23)),\n                new EcBlocks(30, new EcBlock(33, 16), new EcBlock(4, 17))\n            ),\n            new self(\n                27,\n                [6, 34, 62, 90, 118],\n                new EcBlocks(30, new EcBlock(8, 122), new EcBlock(4, 123)),\n                new EcBlocks(28, new EcBlock(22, 45), new EcBlock(3, 46)),\n                new EcBlocks(30, new EcBlock(8, 23), new EcBlock(26, 24)),\n                new EcBlocks(30, new EcBlock(12, 15), new EcBlock(28, 16))\n            ),\n            new self(\n                28,\n                [6, 26, 50, 74, 98, 122],\n                new EcBlocks(30, new EcBlock(3, 117), new EcBlock(10, 118)),\n                new EcBlocks(28, new EcBlock(3, 45), new EcBlock(23, 46)),\n                new EcBlocks(30, new EcBlock(4, 24), new EcBlock(31, 25)),\n                new EcBlocks(30, new EcBlock(11, 15), new EcBlock(31, 16))\n            ),\n            new self(\n                29,\n                [6, 30, 54, 78, 102, 126],\n                new EcBlocks(30, new EcBlock(7, 116), new EcBlock(7, 117)),\n                new EcBlocks(28, new EcBlock(21, 45), new EcBlock(7, 46)),\n                new EcBlocks(30, new EcBlock(1, 23), new EcBlock(37, 24)),\n                new EcBlocks(30, new EcBlock(19, 15), new EcBlock(26, 16))\n            ),\n            new self(\n                30,\n                [6, 26, 52, 78, 104, 130],\n                new EcBlocks(30, new EcBlock(5, 115), new EcBlock(10, 116)),\n                new EcBlocks(28, new EcBlock(19, 47), new EcBlock(10, 48)),\n                new EcBlocks(30, new EcBlock(15, 24), new EcBlock(25, 25)),\n                new EcBlocks(30, new EcBlock(23, 15), new EcBlock(25, 16))\n            ),\n            new self(\n                31,\n                [6, 30, 56, 82, 108, 134],\n                new EcBlocks(30, new EcBlock(13, 115), new EcBlock(3, 116)),\n                new EcBlocks(28, new EcBlock(2, 46), new EcBlock(29, 47)),\n                new EcBlocks(30, new EcBlock(42, 24), new EcBlock(1, 25)),\n                new EcBlocks(30, new EcBlock(23, 15), new EcBlock(28, 16))\n            ),\n            new self(\n                32,\n                [6, 34, 60, 86, 112, 138],\n                new EcBlocks(30, new EcBlock(17, 115)),\n                new EcBlocks(28, new EcBlock(10, 46), new EcBlock(23, 47)),\n                new EcBlocks(30, new EcBlock(10, 24), new EcBlock(35, 25)),\n                new EcBlocks(30, new EcBlock(19, 15), new EcBlock(35, 16))\n            ),\n            new self(\n                33,\n                [6, 30, 58, 86, 114, 142],\n                new EcBlocks(30, new EcBlock(17, 115), new EcBlock(1, 116)),\n                new EcBlocks(28, new EcBlock(14, 46), new EcBlock(21, 47)),\n                new EcBlocks(30, new EcBlock(29, 24), new EcBlock(19, 25)),\n                new EcBlocks(30, new EcBlock(11, 15), new EcBlock(46, 16))\n            ),\n            new self(\n                34,\n                [6, 34, 62, 90, 118, 146],\n                new EcBlocks(30, new EcBlock(13, 115), new EcBlock(6, 116)),\n                new EcBlocks(28, new EcBlock(14, 46), new EcBlock(23, 47)),\n                new EcBlocks(30, new EcBlock(44, 24), new EcBlock(7, 25)),\n                new EcBlocks(30, new EcBlock(59, 16), new EcBlock(1, 17))\n            ),\n            new self(\n                35,\n                [6, 30, 54, 78, 102, 126, 150],\n                new EcBlocks(30, new EcBlock(12, 121), new EcBlock(7, 122)),\n                new EcBlocks(28, new EcBlock(12, 47), new EcBlock(26, 48)),\n                new EcBlocks(30, new EcBlock(39, 24), new EcBlock(14, 25)),\n                new EcBlocks(30, new EcBlock(22, 15), new EcBlock(41, 16))\n            ),\n            new self(\n                36,\n                [6, 24, 50, 76, 102, 128, 154],\n                new EcBlocks(30, new EcBlock(6, 121), new EcBlock(14, 122)),\n                new EcBlocks(28, new EcBlock(6, 47), new EcBlock(34, 48)),\n                new EcBlocks(30, new EcBlock(46, 24), new EcBlock(10, 25)),\n                new EcBlocks(30, new EcBlock(2, 15), new EcBlock(64, 16))\n            ),\n            new self(\n                37,\n                [6, 28, 54, 80, 106, 132, 158],\n                new EcBlocks(30, new EcBlock(17, 122), new EcBlock(4, 123)),\n                new EcBlocks(28, new EcBlock(29, 46), new EcBlock(14, 47)),\n                new EcBlocks(30, new EcBlock(49, 24), new EcBlock(10, 25)),\n                new EcBlocks(30, new EcBlock(24, 15), new EcBlock(46, 16))\n            ),\n            new self(\n                38,\n                [6, 32, 58, 84, 110, 136, 162],\n                new EcBlocks(30, new EcBlock(4, 122), new EcBlock(18, 123)),\n                new EcBlocks(28, new EcBlock(13, 46), new EcBlock(32, 47)),\n                new EcBlocks(30, new EcBlock(48, 24), new EcBlock(14, 25)),\n                new EcBlocks(30, new EcBlock(42, 15), new EcBlock(32, 16))\n            ),\n            new self(\n                39,\n                [6, 26, 54, 82, 110, 138, 166],\n                new EcBlocks(30, new EcBlock(20, 117), new EcBlock(4, 118)),\n                new EcBlocks(28, new EcBlock(40, 47), new EcBlock(7, 48)),\n                new EcBlocks(30, new EcBlock(43, 24), new EcBlock(22, 25)),\n                new EcBlocks(30, new EcBlock(10, 15), new EcBlock(67, 16))\n            ),\n            new self(\n                40,\n                [6, 30, 58, 86, 114, 142, 170],\n                new EcBlocks(30, new EcBlock(19, 118), new EcBlock(6, 119)),\n                new EcBlocks(28, new EcBlock(18, 47), new EcBlock(31, 48)),\n                new EcBlocks(30, new EcBlock(34, 24), new EcBlock(34, 25)),\n                new EcBlocks(30, new EcBlock(20, 15), new EcBlock(61, 16))\n            ),\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Encoder/BlockPair.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Encoder;\n\nuse SplFixedArray;\n\n/**\n * Block pair.\n */\nfinal class BlockPair\n{\n    /**\n     * Data bytes in the block.\n     *\n     * @var SplFixedArray<int>\n     */\n    private $dataBytes;\n\n    /**\n     * Error correction bytes in the block.\n     *\n     * @var SplFixedArray<int>\n     */\n    private $errorCorrectionBytes;\n\n    /**\n     * Creates a new block pair.\n     *\n     * @param SplFixedArray<int> $data\n     * @param SplFixedArray<int> $errorCorrection\n     */\n    public function __construct(SplFixedArray $data, SplFixedArray $errorCorrection)\n    {\n        $this->dataBytes = $data;\n        $this->errorCorrectionBytes = $errorCorrection;\n    }\n\n    /**\n     * Gets the data bytes.\n     *\n     * @return SplFixedArray<int>\n     */\n    public function getDataBytes() : SplFixedArray\n    {\n        return $this->dataBytes;\n    }\n\n    /**\n     * Gets the error correction bytes.\n     *\n     * @return SplFixedArray<int>\n     */\n    public function getErrorCorrectionBytes() : SplFixedArray\n    {\n        return $this->errorCorrectionBytes;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Encoder;\n\nuse SplFixedArray;\nuse Traversable;\n\n/**\n * Byte matrix.\n */\nfinal class ByteMatrix\n{\n    /**\n     * Bytes in the matrix, represented as array.\n     *\n     * @var SplFixedArray<SplFixedArray<int>>\n     */\n    private $bytes;\n\n    /**\n     * Width of the matrix.\n     *\n     * @var int\n     */\n    private $width;\n\n    /**\n     * Height of the matrix.\n     *\n     * @var int\n     */\n    private $height;\n\n    public function __construct(int $width, int $height)\n    {\n        $this->height = $height;\n        $this->width = $width;\n        $this->bytes = new SplFixedArray($height);\n\n        for ($y = 0; $y < $height; ++$y) {\n            $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0));\n        }\n    }\n\n    /**\n     * Gets the width of the matrix.\n     */\n    public function getWidth() : int\n    {\n        return $this->width;\n    }\n\n    /**\n     * Gets the height of the matrix.\n     */\n    public function getHeight() : int\n    {\n        return $this->height;\n    }\n\n    /**\n     * Gets the internal representation of the matrix.\n     *\n     * @return SplFixedArray<SplFixedArray<int>>\n     */\n    public function getArray() : SplFixedArray\n    {\n        return $this->bytes;\n    }\n\n    /**\n     * @return Traversable<int>\n     */\n    public function getBytes() : Traversable\n    {\n        foreach ($this->bytes as $row) {\n            foreach ($row as $byte) {\n                yield $byte;\n            }\n        }\n    }\n\n    /**\n     * Gets the byte for a specific position.\n     */\n    public function get(int $x, int $y) : int\n    {\n        return $this->bytes[$y][$x];\n    }\n\n    /**\n     * Sets the byte for a specific position.\n     */\n    public function set(int $x, int $y, int $value) : void\n    {\n        $this->bytes[$y][$x] = $value;\n    }\n\n    /**\n     * Clears the matrix with a specific value.\n     */\n    public function clear(int $value) : void\n    {\n        for ($y = 0; $y < $this->height; ++$y) {\n            for ($x = 0; $x < $this->width; ++$x) {\n                $this->bytes[$y][$x] = $value;\n            }\n        }\n    }\n\n    public function __clone()\n    {\n        $this->bytes = clone $this->bytes;\n\n        foreach ($this->bytes as $index => $row) {\n            $this->bytes[$index] = clone $row;\n        }\n    }\n\n    /**\n     * Returns a string representation of the matrix.\n     */\n    public function __toString() : string\n    {\n        $result = '';\n\n        for ($y = 0; $y < $this->height; $y++) {\n            for ($x = 0; $x < $this->width; $x++) {\n                switch ($this->bytes[$y][$x]) {\n                    case 0:\n                        $result .= ' 0';\n                        break;\n\n                    case 1:\n                        $result .= ' 1';\n                        break;\n\n                    default:\n                        $result .= '  ';\n                        break;\n                }\n            }\n\n            $result .= \"\\n\";\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Encoder;\n\nuse BaconQrCode\\Common\\BitArray;\nuse BaconQrCode\\Common\\CharacterSetEci;\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Mode;\nuse BaconQrCode\\Common\\ReedSolomonCodec;\nuse BaconQrCode\\Common\\Version;\nuse BaconQrCode\\Exception\\WriterException;\nuse SplFixedArray;\n\n/**\n * Encoder.\n */\nfinal class Encoder\n{\n    /**\n     * Default byte encoding.\n     */\n    public const DEFAULT_BYTE_MODE_ECODING = 'ISO-8859-1';\n\n    /**\n     * The original table is defined in the table 5 of JISX0510:2004 (p.19).\n     */\n    private const ALPHANUMERIC_TABLE = [\n        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  // 0x00-0x0f\n        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  // 0x10-0x1f\n        36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,  // 0x20-0x2f\n        0,   1,  2,  3,  4,  5,  6,  7,  8,  9, 44, -1, -1, -1, -1, -1,  // 0x30-0x3f\n        -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,  // 0x40-0x4f\n        25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,  // 0x50-0x5f\n    ];\n\n    /**\n     * Codec cache.\n     *\n     * @var array<string,ReedSolomonCodec>\n     */\n    private static $codecs = [];\n\n    /**\n     * Encodes \"content\" with the error correction level \"ecLevel\".\n     */\n    public static function encode(\n        string $content,\n        ErrorCorrectionLevel $ecLevel,\n        string $encoding = self::DEFAULT_BYTE_MODE_ECODING,\n        ?Version $forcedVersion = null\n    ) : QrCode {\n        // Pick an encoding mode appropriate for the content. Note that this\n        // will not attempt to use multiple modes / segments even if that were\n        // more efficient. Would be nice.\n        $mode = self::chooseMode($content, $encoding);\n\n        // This will store the header information, like mode and length, as well\n        // as \"header\" segments like an ECI segment.\n        $headerBits = new BitArray();\n\n        // Append ECI segment if applicable\n        if (Mode::BYTE() === $mode && self::DEFAULT_BYTE_MODE_ECODING !== $encoding) {\n            $eci = CharacterSetEci::getCharacterSetEciByName($encoding);\n\n            if (null !== $eci) {\n                self::appendEci($eci, $headerBits);\n            }\n        }\n\n        // (With ECI in place,) Write the mode marker\n        self::appendModeInfo($mode, $headerBits);\n\n        // Collect data within the main segment, separately, to count its size\n        // if needed. Don't add it to main payload yet.\n        $dataBits = new BitArray();\n        self::appendBytes($content, $mode, $dataBits, $encoding);\n\n        // Hard part: need to know version to know how many bits length takes.\n        // But need to know how many bits it takes to know version. First we\n        // take a guess at version by assuming version will be the minimum, 1:\n        $provisionalBitsNeeded = $headerBits->getSize()\n            + $mode->getCharacterCountBits(Version::getVersionForNumber(1))\n            + $dataBits->getSize();\n        $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel);\n\n        // Use that guess to calculate the right version. I am still not sure\n        // this works in 100% of cases.\n        $bitsNeeded = $headerBits->getSize()\n            + $mode->getCharacterCountBits($provisionalVersion)\n            + $dataBits->getSize();\n        $version = self::chooseVersion($bitsNeeded, $ecLevel);\n\n        if (null !== $forcedVersion) {\n            // Forced version check\n            if ($version->getVersionNumber() <= $forcedVersion->getVersionNumber()) {\n                // Calculated minimum version is same or equal as forced version\n                $version = $forcedVersion;\n            } else {\n                throw new WriterException(\n                    'Invalid version! Calculated version: '\n                    . $version->getVersionNumber()\n                    . ', requested version: '\n                    . $forcedVersion->getVersionNumber()\n                );\n            }\n        }\n\n        $headerAndDataBits = new BitArray();\n        $headerAndDataBits->appendBitArray($headerBits);\n\n        // Find \"length\" of main segment and write it.\n        $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content));\n        self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits);\n\n        // Put data together into the overall payload.\n        $headerAndDataBits->appendBitArray($dataBits);\n        $ecBlocks = $version->getEcBlocksForLevel($ecLevel);\n        $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords();\n\n        // Terminate the bits properly.\n        self::terminateBits($numDataBytes, $headerAndDataBits);\n\n        // Interleave data bits with error correction code.\n        $finalBits = self::interleaveWithEcBytes(\n            $headerAndDataBits,\n            $version->getTotalCodewords(),\n            $numDataBytes,\n            $ecBlocks->getNumBlocks()\n        );\n\n        // Choose the mask pattern.\n        $dimension = $version->getDimensionForVersion();\n        $matrix = new ByteMatrix($dimension, $dimension);\n        $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix);\n\n        // Build the matrix.\n        MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix);\n\n        return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix);\n    }\n\n    /**\n     * Gets the alphanumeric code for a byte.\n     */\n    private static function getAlphanumericCode(int $code) : int\n    {\n        if (isset(self::ALPHANUMERIC_TABLE[$code])) {\n            return self::ALPHANUMERIC_TABLE[$code];\n        }\n\n        return -1;\n    }\n\n    /**\n     * Chooses the best mode for a given content.\n     */\n    private static function chooseMode(string $content, string $encoding = null) : Mode\n    {\n        if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) {\n            return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE();\n        }\n\n        $hasNumeric = false;\n        $hasAlphanumeric = false;\n        $contentLength = strlen($content);\n\n        for ($i = 0; $i < $contentLength; ++$i) {\n            $char = $content[$i];\n\n            if (ctype_digit($char)) {\n                $hasNumeric = true;\n            } elseif (-1 !== self::getAlphanumericCode(ord($char))) {\n                $hasAlphanumeric = true;\n            } else {\n                return Mode::BYTE();\n            }\n        }\n\n        if ($hasAlphanumeric) {\n            return Mode::ALPHANUMERIC();\n        } elseif ($hasNumeric) {\n            return Mode::NUMERIC();\n        }\n\n        return Mode::BYTE();\n    }\n\n    /**\n     * Calculates the mask penalty for a matrix.\n     */\n    private static function calculateMaskPenalty(ByteMatrix $matrix) : int\n    {\n        return (\n            MaskUtil::applyMaskPenaltyRule1($matrix)\n            + MaskUtil::applyMaskPenaltyRule2($matrix)\n            + MaskUtil::applyMaskPenaltyRule3($matrix)\n            + MaskUtil::applyMaskPenaltyRule4($matrix)\n        );\n    }\n\n    /**\n     * Checks if content only consists of double-byte kanji characters.\n     */\n    private static function isOnlyDoubleByteKanji(string $content) : bool\n    {\n        $bytes = @iconv('utf-8', 'SHIFT-JIS', $content);\n\n        if (false === $bytes) {\n            return false;\n        }\n\n        $length = strlen($bytes);\n\n        if (0 !== $length % 2) {\n            return false;\n        }\n\n        for ($i = 0; $i < $length; $i += 2) {\n            $byte = $bytes[$i] & 0xff;\n\n            if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Chooses the best mask pattern for a matrix.\n     */\n    private static function chooseMaskPattern(\n        BitArray $bits,\n        ErrorCorrectionLevel $ecLevel,\n        Version $version,\n        ByteMatrix $matrix\n    ) : int {\n        $minPenalty = PHP_INT_MAX;\n        $bestMaskPattern = -1;\n\n        for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) {\n            MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix);\n            $penalty = self::calculateMaskPenalty($matrix);\n\n            if ($penalty < $minPenalty) {\n                $minPenalty = $penalty;\n                $bestMaskPattern = $maskPattern;\n            }\n        }\n\n        return $bestMaskPattern;\n    }\n\n    /**\n     * Chooses the best version for the input.\n     *\n     * @throws WriterException if data is too big\n     */\n    private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version\n    {\n        for ($versionNum = 1; $versionNum <= 40; ++$versionNum) {\n            $version = Version::getVersionForNumber($versionNum);\n            $numBytes = $version->getTotalCodewords();\n\n            $ecBlocks = $version->getEcBlocksForLevel($ecLevel);\n            $numEcBytes = $ecBlocks->getTotalEcCodewords();\n\n            $numDataBytes = $numBytes - $numEcBytes;\n            $totalInputBytes = intdiv($numInputBits + 8, 8);\n\n            if ($numDataBytes >= $totalInputBytes) {\n                return $version;\n            }\n        }\n\n        throw new WriterException('Data too big');\n    }\n\n    /**\n     * Terminates the bits in a bit array.\n     *\n     * @throws WriterException if data bits cannot fit in the QR code\n     * @throws WriterException if bits size does not equal the capacity\n     */\n    private static function terminateBits(int $numDataBytes, BitArray $bits) : void\n    {\n        $capacity = $numDataBytes << 3;\n\n        if ($bits->getSize() > $capacity) {\n            throw new WriterException('Data bits cannot fit in the QR code');\n        }\n\n        for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) {\n            $bits->appendBit(false);\n        }\n\n        $numBitsInLastByte = $bits->getSize() & 0x7;\n\n        if ($numBitsInLastByte > 0) {\n            for ($i = $numBitsInLastByte; $i < 8; ++$i) {\n                $bits->appendBit(false);\n            }\n        }\n\n        $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes();\n\n        for ($i = 0; $i < $numPaddingBytes; ++$i) {\n            $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8);\n        }\n\n        if ($bits->getSize() !== $capacity) {\n            throw new WriterException('Bits size does not equal capacity');\n        }\n    }\n\n    /**\n     * Gets number of data- and EC bytes for a block ID.\n     *\n     * @return int[]\n     * @throws WriterException if block ID is too large\n     * @throws WriterException if EC bytes mismatch\n     * @throws WriterException if RS blocks mismatch\n     * @throws WriterException if total bytes mismatch\n     */\n    private static function getNumDataBytesAndNumEcBytesForBlockId(\n        int $numTotalBytes,\n        int $numDataBytes,\n        int $numRsBlocks,\n        int $blockId\n    ) : array {\n        if ($blockId >= $numRsBlocks) {\n            throw new WriterException('Block ID too large');\n        }\n\n        $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks;\n        $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2;\n        $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks);\n        $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1;\n        $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks);\n        $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1;\n        $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1;\n        $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2;\n\n        if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) {\n            throw new WriterException('EC bytes mismatch');\n        }\n\n        if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) {\n            throw new WriterException('RS blocks mismatch');\n        }\n\n        if ($numTotalBytes !==\n            (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1)\n            + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2)\n        ) {\n            throw new WriterException('Total bytes mismatch');\n        }\n\n        if ($blockId < $numRsBlocksInGroup1) {\n            return [$numDataBytesInGroup1, $numEcBytesInGroup1];\n        } else {\n            return [$numDataBytesInGroup2, $numEcBytesInGroup2];\n        }\n    }\n\n    /**\n     * Interleaves data with EC bytes.\n     *\n     * @throws WriterException if number of bits and data bytes does not match\n     * @throws WriterException if data bytes does not match offset\n     * @throws WriterException if an interleaving error occurs\n     */\n    private static function interleaveWithEcBytes(\n        BitArray $bits,\n        int $numTotalBytes,\n        int $numDataBytes,\n        int $numRsBlocks\n    ) : BitArray {\n        if ($bits->getSizeInBytes() !== $numDataBytes) {\n            throw new WriterException('Number of bits and data bytes does not match');\n        }\n\n        $dataBytesOffset = 0;\n        $maxNumDataBytes = 0;\n        $maxNumEcBytes   = 0;\n\n        $blocks = new SplFixedArray($numRsBlocks);\n\n        for ($i = 0; $i < $numRsBlocks; ++$i) {\n            list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId(\n                $numTotalBytes,\n                $numDataBytes,\n                $numRsBlocks,\n                $i\n            );\n\n            $size = $numDataBytesInBlock;\n            $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size);\n            $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock);\n            $blocks[$i] = new BlockPair($dataBytes, $ecBytes);\n\n            $maxNumDataBytes = max($maxNumDataBytes, $size);\n            $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes));\n            $dataBytesOffset += $numDataBytesInBlock;\n        }\n\n        if ($numDataBytes !== $dataBytesOffset) {\n            throw new WriterException('Data bytes does not match offset');\n        }\n\n        $result = new BitArray();\n\n        for ($i = 0; $i < $maxNumDataBytes; ++$i) {\n            foreach ($blocks as $block) {\n                $dataBytes = $block->getDataBytes();\n\n                if ($i < count($dataBytes)) {\n                    $result->appendBits($dataBytes[$i], 8);\n                }\n            }\n        }\n\n        for ($i = 0; $i < $maxNumEcBytes; ++$i) {\n            foreach ($blocks as $block) {\n                $ecBytes = $block->getErrorCorrectionBytes();\n\n                if ($i < count($ecBytes)) {\n                    $result->appendBits($ecBytes[$i], 8);\n                }\n            }\n        }\n\n        if ($numTotalBytes !== $result->getSizeInBytes()) {\n            throw new WriterException(\n                'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ'\n            );\n        }\n\n        return $result;\n    }\n\n    /**\n     * Generates EC bytes for given data.\n     *\n     * @param  SplFixedArray<int> $dataBytes\n     * @return SplFixedArray<int>\n     */\n    private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray\n    {\n        $numDataBytes = count($dataBytes);\n        $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock);\n\n        for ($i = 0; $i < $numDataBytes; $i++) {\n            $toEncode[$i] = $dataBytes[$i] & 0xff;\n        }\n\n        $ecBytes = new SplFixedArray($numEcBytesInBlock);\n        $codec = self::getCodec($numDataBytes, $numEcBytesInBlock);\n        $codec->encode($toEncode, $ecBytes);\n\n        return $ecBytes;\n    }\n\n    /**\n     * Gets an RS codec and caches it.\n     */\n    private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec\n    {\n        $cacheId = $numDataBytes . '-' . $numEcBytesInBlock;\n\n        if (isset(self::$codecs[$cacheId])) {\n            return self::$codecs[$cacheId];\n        }\n\n        return self::$codecs[$cacheId] = new ReedSolomonCodec(\n            8,\n            0x11d,\n            0,\n            1,\n            $numEcBytesInBlock,\n            255 - $numDataBytes - $numEcBytesInBlock\n        );\n    }\n\n    /**\n     * Appends mode information to a bit array.\n     */\n    private static function appendModeInfo(Mode $mode, BitArray $bits) : void\n    {\n        $bits->appendBits($mode->getBits(), 4);\n    }\n\n    /**\n     * Appends length information to a bit array.\n     *\n     * @throws WriterException if num letters is bigger than expected\n     */\n    private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void\n    {\n        $numBits = $mode->getCharacterCountBits($version);\n\n        if ($numLetters >= (1 << $numBits)) {\n            throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1));\n        }\n\n        $bits->appendBits($numLetters, $numBits);\n    }\n\n    /**\n     * Appends bytes to a bit array in a specific mode.\n     *\n     * @throws WriterException if an invalid mode was supplied\n     */\n    private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void\n    {\n        switch ($mode) {\n            case Mode::NUMERIC():\n                self::appendNumericBytes($content, $bits);\n                break;\n\n            case Mode::ALPHANUMERIC():\n                self::appendAlphanumericBytes($content, $bits);\n                break;\n\n            case Mode::BYTE():\n                self::append8BitBytes($content, $bits, $encoding);\n                break;\n\n            case Mode::KANJI():\n                self::appendKanjiBytes($content, $bits);\n                break;\n\n            default:\n                throw new WriterException('Invalid mode: ' . $mode);\n        }\n    }\n\n    /**\n     * Appends numeric bytes to a bit array.\n     */\n    private static function appendNumericBytes(string $content, BitArray $bits) : void\n    {\n        $length = strlen($content);\n        $i = 0;\n\n        while ($i < $length) {\n            $num1 = (int) $content[$i];\n\n            if ($i + 2 < $length) {\n                // Encode three numeric letters in ten bits.\n                $num2 = (int) $content[$i + 1];\n                $num3 = (int) $content[$i + 2];\n                $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10);\n                $i += 3;\n            } elseif ($i + 1 < $length) {\n                // Encode two numeric letters in seven bits.\n                $num2 = (int) $content[$i + 1];\n                $bits->appendBits($num1 * 10 + $num2, 7);\n                $i += 2;\n            } else {\n                // Encode one numeric letter in four bits.\n                $bits->appendBits($num1, 4);\n                ++$i;\n            }\n        }\n    }\n\n    /**\n     * Appends alpha-numeric bytes to a bit array.\n     *\n     * @throws WriterException if an invalid alphanumeric code was found\n     */\n    private static function appendAlphanumericBytes(string $content, BitArray $bits) : void\n    {\n        $length = strlen($content);\n        $i = 0;\n\n        while ($i < $length) {\n            $code1 = self::getAlphanumericCode(ord($content[$i]));\n\n            if (-1 === $code1) {\n                throw new WriterException('Invalid alphanumeric code');\n            }\n\n            if ($i + 1 < $length) {\n                $code2 = self::getAlphanumericCode(ord($content[$i + 1]));\n\n                if (-1 === $code2) {\n                    throw new WriterException('Invalid alphanumeric code');\n                }\n\n                // Encode two alphanumeric letters in 11 bits.\n                $bits->appendBits($code1 * 45 + $code2, 11);\n                $i += 2;\n            } else {\n                // Encode one alphanumeric letter in six bits.\n                $bits->appendBits($code1, 6);\n                ++$i;\n            }\n        }\n    }\n\n    /**\n     * Appends regular 8-bit bytes to a bit array.\n     *\n     * @throws WriterException if content cannot be encoded to target encoding\n     */\n    private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void\n    {\n        $bytes = @iconv('utf-8', $encoding, $content);\n\n        if (false === $bytes) {\n            throw new WriterException('Could not encode content to ' . $encoding);\n        }\n\n        $length = strlen($bytes);\n\n        for ($i = 0; $i < $length; $i++) {\n            $bits->appendBits(ord($bytes[$i]), 8);\n        }\n    }\n\n    /**\n     * Appends KANJI bytes to a bit array.\n     *\n     * @throws WriterException if content does not seem to be encoded in SHIFT-JIS\n     * @throws WriterException if an invalid byte sequence occurs\n     */\n    private static function appendKanjiBytes(string $content, BitArray $bits) : void\n    {\n        if (strlen($content) % 2 > 0) {\n            // We just do a simple length check here. The for loop will check\n            // individual characters.\n            throw new WriterException('Content does not seem to be encoded in SHIFT-JIS');\n        }\n\n        $length = strlen($content);\n\n        for ($i = 0; $i < $length; $i += 2) {\n            $byte1 = ord($content[$i]) & 0xff;\n            $byte2 = ord($content[$i + 1]) & 0xff;\n            $code = ($byte1 << 8) | $byte2;\n\n            if ($code >= 0x8140 && $code <= 0x9ffc) {\n                $subtracted = $code - 0x8140;\n            } elseif ($code >= 0xe040 && $code <= 0xebbf) {\n                $subtracted = $code - 0xc140;\n            } else {\n                throw new WriterException('Invalid byte sequence');\n            }\n\n            $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff);\n\n            $bits->appendBits($encoded, 13);\n        }\n    }\n\n    /**\n     * Appends ECI information to a bit array.\n     */\n    private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void\n    {\n        $mode = Mode::ECI();\n        $bits->appendBits($mode->getBits(), 4);\n        $bits->appendBits($eci->getValue(), 8);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Encoder/MaskUtil.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Encoder;\n\nuse BaconQrCode\\Common\\BitUtils;\nuse BaconQrCode\\Exception\\InvalidArgumentException;\n\n/**\n * Mask utility.\n */\nfinal class MaskUtil\n{\n    /**#@+\n     * Penalty weights from section 6.8.2.1\n     */\n    const N1 = 3;\n    const N2 = 3;\n    const N3 = 40;\n    const N4 = 10;\n    /**#@-*/\n\n    private function __construct()\n    {\n    }\n\n    /**\n     * Applies mask penalty rule 1 and returns the penalty.\n     *\n     * Finds repetitive cells with the same color and gives penalty to them.\n     * Example: 00000 or 11111.\n     */\n    public static function applyMaskPenaltyRule1(ByteMatrix $matrix) : int\n    {\n        return (\n            self::applyMaskPenaltyRule1Internal($matrix, true)\n            + self::applyMaskPenaltyRule1Internal($matrix, false)\n        );\n    }\n\n    /**\n     * Applies mask penalty rule 2 and returns the penalty.\n     *\n     * Finds 2x2 blocks with the same color and gives penalty to them. This is\n     * actually equivalent to the spec's rule, which is to find MxN blocks and\n     * give a penalty proportional to (M-1)x(N-1), because this is the number of\n     * 2x2 blocks inside such a block.\n     */\n    public static function applyMaskPenaltyRule2(ByteMatrix $matrix) : int\n    {\n        $penalty = 0;\n        $array = $matrix->getArray();\n        $width = $matrix->getWidth();\n        $height = $matrix->getHeight();\n\n        for ($y = 0; $y < $height - 1; ++$y) {\n            for ($x = 0; $x < $width - 1; ++$x) {\n                $value = $array[$y][$x];\n\n                if ($value === $array[$y][$x + 1]\n                    && $value === $array[$y + 1][$x]\n                    && $value === $array[$y + 1][$x + 1]\n                ) {\n                    ++$penalty;\n                }\n            }\n        }\n\n        return self::N2 * $penalty;\n    }\n\n    /**\n     * Applies mask penalty rule 3 and returns the penalty.\n     *\n     * Finds consecutive cells of 00001011101 or 10111010000, and gives penalty\n     * to them. If we find patterns like 000010111010000, we give penalties\n     * twice (i.e. 40 * 2).\n     */\n    public static function applyMaskPenaltyRule3(ByteMatrix $matrix) : int\n    {\n        $penalty = 0;\n        $array = $matrix->getArray();\n        $width = $matrix->getWidth();\n        $height = $matrix->getHeight();\n\n        for ($y = 0; $y < $height; ++$y) {\n            for ($x = 0; $x < $width; ++$x) {\n                if ($x + 6 < $width\n                    && 1 === $array[$y][$x]\n                    && 0 === $array[$y][$x + 1]\n                    && 1 === $array[$y][$x + 2]\n                    && 1 === $array[$y][$x + 3]\n                    && 1 === $array[$y][$x + 4]\n                    && 0 === $array[$y][$x + 5]\n                    && 1 === $array[$y][$x + 6]\n                    && (\n                        (\n                            $x + 10 < $width\n                            && 0 === $array[$y][$x + 7]\n                            && 0 === $array[$y][$x + 8]\n                            && 0 === $array[$y][$x + 9]\n                            && 0 === $array[$y][$x + 10]\n                        )\n                        || (\n                            $x - 4 >= 0\n                            && 0 === $array[$y][$x - 1]\n                            && 0 === $array[$y][$x - 2]\n                            && 0 === $array[$y][$x - 3]\n                            && 0 === $array[$y][$x - 4]\n                        )\n                    )\n                ) {\n                    $penalty += self::N3;\n                }\n\n                if ($y + 6 < $height\n                    && 1 === $array[$y][$x]\n                    && 0 === $array[$y + 1][$x]\n                    && 1 === $array[$y + 2][$x]\n                    && 1 === $array[$y + 3][$x]\n                    && 1 === $array[$y + 4][$x]\n                    && 0 === $array[$y + 5][$x]\n                    && 1 === $array[$y + 6][$x]\n                    && (\n                        (\n                            $y + 10 < $height\n                            && 0 === $array[$y + 7][$x]\n                            && 0 === $array[$y + 8][$x]\n                            && 0 === $array[$y + 9][$x]\n                            && 0 === $array[$y + 10][$x]\n                        )\n                        || (\n                            $y - 4 >= 0\n                            && 0 === $array[$y - 1][$x]\n                            && 0 === $array[$y - 2][$x]\n                            && 0 === $array[$y - 3][$x]\n                            && 0 === $array[$y - 4][$x]\n                        )\n                    )\n                ) {\n                    $penalty += self::N3;\n                }\n            }\n        }\n\n        return $penalty;\n    }\n\n    /**\n     * Applies mask penalty rule 4 and returns the penalty.\n     *\n     * Calculates the ratio of dark cells and gives penalty if the ratio is far\n     * from 50%. It gives 10 penalty for 5% distance.\n     */\n    public static function applyMaskPenaltyRule4(ByteMatrix $matrix) : int\n    {\n        $numDarkCells = 0;\n\n        $array = $matrix->getArray();\n        $width = $matrix->getWidth();\n        $height = $matrix->getHeight();\n\n        for ($y = 0; $y < $height; ++$y) {\n            $arrayY = $array[$y];\n\n            for ($x = 0; $x < $width; ++$x) {\n                if (1 === $arrayY[$x]) {\n                    ++$numDarkCells;\n                }\n            }\n        }\n\n        $numTotalCells = $height * $width;\n        $darkRatio = $numDarkCells / $numTotalCells;\n        $fixedPercentVariances = (int) (abs($darkRatio - 0.5) * 20);\n\n        return $fixedPercentVariances * self::N4;\n    }\n\n    /**\n     * Returns the mask bit for \"getMaskPattern\" at \"x\" and \"y\".\n     *\n     * See 8.8 of JISX0510:2004 for mask pattern conditions.\n     *\n     * @throws InvalidArgumentException if an invalid mask pattern was supplied\n     */\n    public static function getDataMaskBit(int $maskPattern, int $x, int $y) : bool\n    {\n        switch ($maskPattern) {\n            case 0:\n                $intermediate = ($y + $x) & 0x1;\n                break;\n\n            case 1:\n                $intermediate = $y & 0x1;\n                break;\n\n            case 2:\n                $intermediate = $x % 3;\n                break;\n\n            case 3:\n                $intermediate = ($y + $x) % 3;\n                break;\n\n            case 4:\n                $intermediate = (BitUtils::unsignedRightShift($y, 1) + (int) ($x / 3)) & 0x1;\n                break;\n\n            case 5:\n                $temp = $y * $x;\n                $intermediate = ($temp & 0x1) + ($temp % 3);\n                break;\n\n            case 6:\n                $temp = $y * $x;\n                $intermediate = (($temp & 0x1) + ($temp % 3)) & 0x1;\n                break;\n\n            case 7:\n                $temp = $y * $x;\n                $intermediate = (($temp % 3) + (($y + $x) & 0x1)) & 0x1;\n                break;\n\n            default:\n                throw new InvalidArgumentException('Invalid mask pattern: ' . $maskPattern);\n        }\n\n        return 0 == $intermediate;\n    }\n\n    /**\n     * Helper function for applyMaskPenaltyRule1.\n     *\n     * We need this for doing this calculation in both vertical and horizontal\n     * orders respectively.\n     */\n    private static function applyMaskPenaltyRule1Internal(ByteMatrix $matrix, bool $isHorizontal) : int\n    {\n        $penalty = 0;\n        $iLimit = $isHorizontal ? $matrix->getHeight() : $matrix->getWidth();\n        $jLimit = $isHorizontal ? $matrix->getWidth() : $matrix->getHeight();\n        $array = $matrix->getArray();\n\n        for ($i = 0; $i < $iLimit; ++$i) {\n            $numSameBitCells = 0;\n            $prevBit = -1;\n\n            for ($j = 0; $j < $jLimit; $j++) {\n                $bit = $isHorizontal ? $array[$i][$j] : $array[$j][$i];\n\n                if ($bit === $prevBit) {\n                    ++$numSameBitCells;\n                } else {\n                    if ($numSameBitCells >= 5) {\n                        $penalty += self::N1 + ($numSameBitCells - 5);\n                    }\n\n                    $numSameBitCells = 1;\n                    $prevBit = $bit;\n                }\n            }\n\n            if ($numSameBitCells >= 5) {\n                $penalty += self::N1 + ($numSameBitCells - 5);\n            }\n        }\n\n        return $penalty;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Encoder;\n\nuse BaconQrCode\\Common\\BitArray;\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Version;\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Exception\\WriterException;\n\n/**\n * Matrix utility.\n */\nfinal class MatrixUtil\n{\n    /**\n     * Position detection pattern.\n     */\n    private const POSITION_DETECTION_PATTERN = [\n        [1, 1, 1, 1, 1, 1, 1],\n        [1, 0, 0, 0, 0, 0, 1],\n        [1, 0, 1, 1, 1, 0, 1],\n        [1, 0, 1, 1, 1, 0, 1],\n        [1, 0, 1, 1, 1, 0, 1],\n        [1, 0, 0, 0, 0, 0, 1],\n        [1, 1, 1, 1, 1, 1, 1],\n    ];\n\n    /**\n     * Position adjustment pattern.\n     */\n    private const POSITION_ADJUSTMENT_PATTERN = [\n        [1, 1, 1, 1, 1],\n        [1, 0, 0, 0, 1],\n        [1, 0, 1, 0, 1],\n        [1, 0, 0, 0, 1],\n        [1, 1, 1, 1, 1],\n    ];\n\n    /**\n     * Coordinates for position adjustment patterns for each version.\n     */\n    private const POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE = [\n        [null, null, null, null, null, null, null], // Version 1\n        [   6,   18, null, null, null, null, null], // Version 2\n        [   6,   22, null, null, null, null, null], // Version 3\n        [   6,   26, null, null, null, null, null], // Version 4\n        [   6,   30, null, null, null, null, null], // Version 5\n        [   6,   34, null, null, null, null, null], // Version 6\n        [   6,   22,   38, null, null, null, null], // Version 7\n        [   6,   24,   42, null, null, null, null], // Version 8\n        [   6,   26,   46, null, null, null, null], // Version 9\n        [   6,   28,   50, null, null, null, null], // Version 10\n        [   6,   30,   54, null, null, null, null], // Version 11\n        [   6,   32,   58, null, null, null, null], // Version 12\n        [   6,   34,   62, null, null, null, null], // Version 13\n        [   6,   26,   46,   66, null, null, null], // Version 14\n        [   6,   26,   48,   70, null, null, null], // Version 15\n        [   6,   26,   50,   74, null, null, null], // Version 16\n        [   6,   30,   54,   78, null, null, null], // Version 17\n        [   6,   30,   56,   82, null, null, null], // Version 18\n        [   6,   30,   58,   86, null, null, null], // Version 19\n        [   6,   34,   62,   90, null, null, null], // Version 20\n        [   6,   28,   50,   72,   94, null, null], // Version 21\n        [   6,   26,   50,   74,   98, null, null], // Version 22\n        [   6,   30,   54,   78,  102, null, null], // Version 23\n        [   6,   28,   54,   80,  106, null, null], // Version 24\n        [   6,   32,   58,   84,  110, null, null], // Version 25\n        [   6,   30,   58,   86,  114, null, null], // Version 26\n        [   6,   34,   62,   90,  118, null, null], // Version 27\n        [   6,   26,   50,   74,   98,  122, null], // Version 28\n        [   6,   30,   54,   78,  102,  126, null], // Version 29\n        [   6,   26,   52,   78,  104,  130, null], // Version 30\n        [   6,   30,   56,   82,  108,  134, null], // Version 31\n        [   6,   34,   60,   86,  112,  138, null], // Version 32\n        [   6,   30,   58,   86,  114,  142, null], // Version 33\n        [   6,   34,   62,   90,  118,  146, null], // Version 34\n        [   6,   30,   54,   78,  102,  126,  150], // Version 35\n        [   6,   24,   50,   76,  102,  128,  154], // Version 36\n        [   6,   28,   54,   80,  106,  132,  158], // Version 37\n        [   6,   32,   58,   84,  110,  136,  162], // Version 38\n        [   6,   26,   54,   82,  110,  138,  166], // Version 39\n        [   6,   30,   58,   86,  114,  142,  170], // Version 40\n    ];\n\n    /**\n     * Type information coordinates.\n     */\n    private const TYPE_INFO_COORDINATES = [\n        [8, 0],\n        [8, 1],\n        [8, 2],\n        [8, 3],\n        [8, 4],\n        [8, 5],\n        [8, 7],\n        [8, 8],\n        [7, 8],\n        [5, 8],\n        [4, 8],\n        [3, 8],\n        [2, 8],\n        [1, 8],\n        [0, 8],\n    ];\n\n    /**\n     * Version information polynomial.\n     */\n    private const VERSION_INFO_POLY = 0x1f25;\n\n    /**\n     * Type information polynomial.\n     */\n    private const TYPE_INFO_POLY = 0x537;\n\n    /**\n     * Type information mask pattern.\n     */\n    private const TYPE_INFO_MASK_PATTERN = 0x5412;\n\n    /**\n     * Clears a given matrix.\n     */\n    public static function clearMatrix(ByteMatrix $matrix) : void\n    {\n        $matrix->clear(-1);\n    }\n\n    /**\n     * Builds a complete matrix.\n     */\n    public static function buildMatrix(\n        BitArray $dataBits,\n        ErrorCorrectionLevel $level,\n        Version $version,\n        int $maskPattern,\n        ByteMatrix $matrix\n    ) : void {\n        self::clearMatrix($matrix);\n        self::embedBasicPatterns($version, $matrix);\n        self::embedTypeInfo($level, $maskPattern, $matrix);\n        self::maybeEmbedVersionInfo($version, $matrix);\n        self::embedDataBits($dataBits, $maskPattern, $matrix);\n    }\n\n    /**\n     * Removes the position detection patterns from a matrix.\n     *\n     * This can be useful if you need to render those patterns separately.\n     */\n    public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void\n    {\n        $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]);\n\n        self::removePositionDetectionPattern(0, 0, $matrix);\n        self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix);\n        self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix);\n    }\n\n    /**\n     * Embeds type information into a matrix.\n     */\n    private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void\n    {\n        $typeInfoBits = new BitArray();\n        self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits);\n\n        $typeInfoBitsSize = $typeInfoBits->getSize();\n\n        for ($i = 0; $i < $typeInfoBitsSize; ++$i) {\n            $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i);\n\n            $x1 = self::TYPE_INFO_COORDINATES[$i][0];\n            $y1 = self::TYPE_INFO_COORDINATES[$i][1];\n\n            $matrix->set($x1, $y1, (int) $bit);\n\n            if ($i < 8) {\n                $x2 = $matrix->getWidth() - $i - 1;\n                $y2 = 8;\n            } else {\n                $x2 = 8;\n                $y2 = $matrix->getHeight() - 7 + ($i - 8);\n            }\n\n            $matrix->set($x2, $y2, (int) $bit);\n        }\n    }\n\n    /**\n     * Generates type information bits and appends them to a bit array.\n     *\n     * @throws RuntimeException if bit array resulted in invalid size\n     */\n    private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void\n    {\n        $typeInfo = ($level->getBits() << 3) | $maskPattern;\n        $bits->appendBits($typeInfo, 5);\n\n        $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY);\n        $bits->appendBits($bchCode, 10);\n\n        $maskBits = new BitArray();\n        $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15);\n        $bits->xorBits($maskBits);\n\n        if (15 !== $bits->getSize()) {\n            throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize());\n        }\n    }\n\n    /**\n     * Embeds version information if required.\n     */\n    private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void\n    {\n        if ($version->getVersionNumber() < 7) {\n            return;\n        }\n\n        $versionInfoBits = new BitArray();\n        self::makeVersionInfoBits($version, $versionInfoBits);\n\n        $bitIndex = 6 * 3 - 1;\n\n        for ($i = 0; $i < 6; ++$i) {\n            for ($j = 0; $j < 3; ++$j) {\n                $bit = $versionInfoBits->get($bitIndex);\n                --$bitIndex;\n\n                $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit);\n                $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit);\n            }\n        }\n    }\n\n    /**\n     * Generates version information bits and appends them to a bit array.\n     *\n     * @throws RuntimeException if bit array resulted in invalid size\n     */\n    private static function makeVersionInfoBits(Version $version, BitArray $bits) : void\n    {\n        $bits->appendBits($version->getVersionNumber(), 6);\n\n        $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY);\n        $bits->appendBits($bchCode, 12);\n\n        if (18 !== $bits->getSize()) {\n            throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize());\n        }\n    }\n\n    /**\n     * Calculates the BCH code for a value and a polynomial.\n     */\n    private static function calculateBchCode(int $value, int $poly) : int\n    {\n        $msbSetInPoly = self::findMsbSet($poly);\n        $value <<= $msbSetInPoly - 1;\n\n        while (self::findMsbSet($value) >= $msbSetInPoly) {\n            $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly);\n        }\n\n        return $value;\n    }\n\n    /**\n     * Finds and MSB set.\n     */\n    private static function findMsbSet(int $value) : int\n    {\n        $numDigits = 0;\n\n        while (0 !== $value) {\n            $value >>= 1;\n            ++$numDigits;\n        }\n\n        return $numDigits;\n    }\n\n    /**\n     * Embeds basic patterns into a matrix.\n     */\n    private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void\n    {\n        self::embedPositionDetectionPatternsAndSeparators($matrix);\n        self::embedDarkDotAtLeftBottomCorner($matrix);\n        self::maybeEmbedPositionAdjustmentPatterns($version, $matrix);\n        self::embedTimingPatterns($matrix);\n    }\n\n    /**\n     * Embeds position detection patterns and separators into a byte matrix.\n     */\n    private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void\n    {\n        $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]);\n\n        self::embedPositionDetectionPattern(0, 0, $matrix);\n        self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix);\n        self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix);\n\n        $hspWidth = 8;\n\n        self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix);\n        self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix);\n        self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix);\n\n        $vspSize = 7;\n\n        self::embedVerticalSeparationPattern($vspSize, 0, $matrix);\n        self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix);\n        self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix);\n    }\n\n    /**\n     * Embeds a single position detection pattern into a byte matrix.\n     */\n    private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void\n    {\n        for ($y = 0; $y < 7; ++$y) {\n            for ($x = 0; $x < 7; ++$x) {\n                $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]);\n            }\n        }\n    }\n\n    private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void\n    {\n        for ($y = 0; $y < 7; ++$y) {\n            for ($x = 0; $x < 7; ++$x) {\n                $matrix->set($xStart + $x, $yStart + $y, 0);\n            }\n        }\n    }\n\n    /**\n     * Embeds a single horizontal separation pattern.\n     *\n     * @throws RuntimeException if a byte was already set\n     */\n    private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void\n    {\n        for ($x = 0; $x < 8; $x++) {\n            if (-1 !== $matrix->get($xStart + $x, $yStart)) {\n                throw new RuntimeException('Byte already set');\n            }\n\n            $matrix->set($xStart + $x, $yStart, 0);\n        }\n    }\n\n    /**\n     * Embeds a single vertical separation pattern.\n     *\n     * @throws RuntimeException if a byte was already set\n     */\n    private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void\n    {\n        for ($y = 0; $y < 7; $y++) {\n            if (-1 !== $matrix->get($xStart, $yStart + $y)) {\n                throw new RuntimeException('Byte already set');\n            }\n\n            $matrix->set($xStart, $yStart + $y, 0);\n        }\n    }\n\n    /**\n     * Embeds a dot at the left bottom corner.\n     *\n     * @throws RuntimeException if a byte was already set to 0\n     */\n    private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void\n    {\n        if (0 === $matrix->get(8, $matrix->getHeight() - 8)) {\n            throw new RuntimeException('Byte already set to 0');\n        }\n\n        $matrix->set(8, $matrix->getHeight() - 8, 1);\n    }\n\n    /**\n     * Embeds position adjustment patterns if required.\n     */\n    private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void\n    {\n        if ($version->getVersionNumber() < 2) {\n            return;\n        }\n\n        $index = $version->getVersionNumber() - 1;\n\n        $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index];\n        $numCoordinates = count($coordinates);\n\n        for ($i = 0; $i < $numCoordinates; ++$i) {\n            for ($j = 0; $j < $numCoordinates; ++$j) {\n                $y = $coordinates[$i];\n                $x = $coordinates[$j];\n\n                if (null === $x || null === $y) {\n                    continue;\n                }\n\n                if (-1 === $matrix->get($x, $y)) {\n                    self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix);\n                }\n            }\n        }\n    }\n\n    /**\n     * Embeds a single position adjustment pattern.\n     */\n    private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void\n    {\n        for ($y = 0; $y < 5; $y++) {\n            for ($x = 0; $x < 5; $x++) {\n                $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]);\n            }\n        }\n    }\n\n    /**\n     * Embeds timing patterns into a matrix.\n     */\n    private static function embedTimingPatterns(ByteMatrix $matrix) : void\n    {\n        $matrixWidth = $matrix->getWidth();\n\n        for ($i = 8; $i < $matrixWidth - 8; ++$i) {\n            $bit = ($i + 1) % 2;\n\n            if (-1 === $matrix->get($i, 6)) {\n                $matrix->set($i, 6, $bit);\n            }\n\n            if (-1 === $matrix->get(6, $i)) {\n                $matrix->set(6, $i, $bit);\n            }\n        }\n    }\n\n    /**\n     * Embeds \"dataBits\" using \"getMaskPattern\".\n     *\n     * For debugging purposes, it skips masking process if \"getMaskPattern\" is -1. See 8.7 of JISX0510:2004 (p.38) for\n     * how to embed data bits.\n     *\n     * @throws WriterException if not all bits could be consumed\n     */\n    private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void\n    {\n        $bitIndex = 0;\n        $direction = -1;\n\n        // Start from the right bottom cell.\n        $x = $matrix->getWidth() - 1;\n        $y = $matrix->getHeight() - 1;\n\n        while ($x > 0) {\n            // Skip vertical timing pattern.\n            if (6 === $x) {\n                --$x;\n            }\n\n            while ($y >= 0 && $y < $matrix->getHeight()) {\n                for ($i = 0; $i < 2; $i++) {\n                    $xx = $x - $i;\n\n                    // Skip the cell if it's not empty.\n                    if (-1 !== $matrix->get($xx, $y)) {\n                        continue;\n                    }\n\n                    if ($bitIndex < $dataBits->getSize()) {\n                        $bit = $dataBits->get($bitIndex);\n                        ++$bitIndex;\n                    } else {\n                        // Padding bit. If there is no bit left, we'll fill the\n                        // left cells with 0, as described in 8.4.9 of\n                        // JISX0510:2004 (p. 24).\n                        $bit = false;\n                    }\n\n                    // Skip masking if maskPattern is -1.\n                    if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) {\n                        $bit = ! $bit;\n                    }\n\n                    $matrix->set($xx, $y, (int) $bit);\n                }\n\n                $y += $direction;\n            }\n\n            $direction  = -$direction;\n            $y += $direction;\n            $x -= 2;\n        }\n\n        // All bits should be consumed\n        if ($dataBits->getSize() !== $bitIndex) {\n            throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Encoder/QrCode.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Encoder;\n\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Mode;\nuse BaconQrCode\\Common\\Version;\n\n/**\n * QR code.\n */\nfinal class QrCode\n{\n    /**\n     * Number of possible mask patterns.\n     */\n    public const NUM_MASK_PATTERNS = 8;\n\n    /**\n     * Mode of the QR code.\n     *\n     * @var Mode\n     */\n    private $mode;\n\n    /**\n     * EC level of the QR code.\n     *\n     * @var ErrorCorrectionLevel\n     */\n    private $errorCorrectionLevel;\n\n    /**\n     * Version of the QR code.\n     *\n     * @var Version\n     */\n    private $version;\n\n    /**\n     * Mask pattern of the QR code.\n     *\n     * @var int\n     */\n    private $maskPattern = -1;\n\n    /**\n     * Matrix of the QR code.\n     *\n     * @var ByteMatrix\n     */\n    private $matrix;\n\n    public function __construct(\n        Mode $mode,\n        ErrorCorrectionLevel $errorCorrectionLevel,\n        Version $version,\n        int $maskPattern,\n        ByteMatrix $matrix\n    ) {\n        $this->mode = $mode;\n        $this->errorCorrectionLevel = $errorCorrectionLevel;\n        $this->version = $version;\n        $this->maskPattern = $maskPattern;\n        $this->matrix = $matrix;\n    }\n\n    /**\n     * Gets the mode.\n     */\n    public function getMode() : Mode\n    {\n        return $this->mode;\n    }\n\n    /**\n     * Gets the EC level.\n     */\n    public function getErrorCorrectionLevel() : ErrorCorrectionLevel\n    {\n        return $this->errorCorrectionLevel;\n    }\n\n    /**\n     * Gets the version.\n     */\n    public function getVersion() : Version\n    {\n        return $this->version;\n    }\n\n    /**\n     * Gets the mask pattern.\n     */\n    public function getMaskPattern() : int\n    {\n        return $this->maskPattern;\n    }\n\n    /**\n     * Gets the matrix.\n     *\n     * @return ByteMatrix\n     */\n    public function getMatrix()\n    {\n        return $this->matrix;\n    }\n\n    /**\n     * Validates whether a mask pattern is valid.\n     */\n    public static function isValidMaskPattern(int $maskPattern) : bool\n    {\n        return $maskPattern > 0 && $maskPattern < self::NUM_MASK_PATTERNS;\n    }\n\n    /**\n     * Returns a string representation of the QR code.\n     */\n    public function __toString() : string\n    {\n        $result = \"<<\\n\"\n                . ' mode: ' . $this->mode . \"\\n\"\n                . ' ecLevel: ' . $this->errorCorrectionLevel . \"\\n\"\n                . ' version: ' . $this->version . \"\\n\"\n                . ' maskPattern: ' . $this->maskPattern . \"\\n\";\n\n        if ($this->matrix === null) {\n            $result .= \" matrix: null\\n\";\n        } else {\n            $result .= \" matrix:\\n\";\n            $result .= $this->matrix;\n        }\n\n        $result .= \">>\\n\";\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Exception;\n\nuse Throwable;\n\ninterface ExceptionInterface extends Throwable\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Exception/InvalidArgumentException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Exception;\n\nfinal class InvalidArgumentException extends \\InvalidArgumentException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Exception;\n\nfinal class OutOfBoundsException extends \\OutOfBoundsException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Exception/RuntimeException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Exception;\n\nfinal class RuntimeException extends \\RuntimeException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Exception/UnexpectedValueException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Exception;\n\nfinal class UnexpectedValueException extends \\UnexpectedValueException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Exception/WriterException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Exception;\n\nfinal class WriterException extends \\RuntimeException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Color/Alpha.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Color;\n\nuse BaconQrCode\\Exception;\n\nfinal class Alpha implements ColorInterface\n{\n    /**\n     * @var int\n     */\n    private $alpha;\n\n    /**\n     * @var ColorInterface\n     */\n    private $baseColor;\n\n    /**\n     * @param int $alpha the alpha value, 0 to 100\n     */\n    public function __construct(int $alpha, ColorInterface $baseColor)\n    {\n        if ($alpha < 0 || $alpha > 100) {\n            throw new Exception\\InvalidArgumentException('Alpha must be between 0 and 100');\n        }\n\n        $this->alpha = $alpha;\n        $this->baseColor = $baseColor;\n    }\n\n    public function getAlpha() : int\n    {\n        return $this->alpha;\n    }\n\n    public function getBaseColor() : ColorInterface\n    {\n        return $this->baseColor;\n    }\n\n    public function toRgb() : Rgb\n    {\n        return $this->baseColor->toRgb();\n    }\n\n    public function toCmyk() : Cmyk\n    {\n        return $this->baseColor->toCmyk();\n    }\n\n    public function toGray() : Gray\n    {\n        return $this->baseColor->toGray();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Color;\n\nuse BaconQrCode\\Exception;\n\nfinal class Cmyk implements ColorInterface\n{\n    /**\n     * @var int\n     */\n    private $cyan;\n\n    /**\n     * @var int\n     */\n    private $magenta;\n\n    /**\n     * @var int\n     */\n    private $yellow;\n\n    /**\n     * @var int\n     */\n    private $black;\n\n    /**\n     * @param int $cyan the cyan amount, 0 to 100\n     * @param int $magenta the magenta amount, 0 to 100\n     * @param int $yellow the yellow amount, 0 to 100\n     * @param int $black the black amount, 0 to 100\n     */\n    public function __construct(int $cyan, int $magenta, int $yellow, int $black)\n    {\n        if ($cyan < 0 || $cyan > 100) {\n            throw new Exception\\InvalidArgumentException('Cyan must be between 0 and 100');\n        }\n\n        if ($magenta < 0 || $magenta > 100) {\n            throw new Exception\\InvalidArgumentException('Magenta must be between 0 and 100');\n        }\n\n        if ($yellow < 0 || $yellow > 100) {\n            throw new Exception\\InvalidArgumentException('Yellow must be between 0 and 100');\n        }\n\n        if ($black < 0 || $black > 100) {\n            throw new Exception\\InvalidArgumentException('Black must be between 0 and 100');\n        }\n\n        $this->cyan = $cyan;\n        $this->magenta = $magenta;\n        $this->yellow = $yellow;\n        $this->black = $black;\n    }\n\n    public function getCyan() : int\n    {\n        return $this->cyan;\n    }\n\n    public function getMagenta() : int\n    {\n        return $this->magenta;\n    }\n\n    public function getYellow() : int\n    {\n        return $this->yellow;\n    }\n\n    public function getBlack() : int\n    {\n        return $this->black;\n    }\n\n    public function toRgb() : Rgb\n    {\n        $k = $this->black / 100;\n        $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100;\n        $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100;\n        $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100;\n\n        return new Rgb(\n            (int) (-$c * 255 + 255),\n            (int) (-$m * 255 + 255),\n            (int) (-$y * 255 + 255)\n        );\n    }\n\n    public function toCmyk() : Cmyk\n    {\n        return $this;\n    }\n\n    public function toGray() : Gray\n    {\n        return $this->toRgb()->toGray();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Color;\n\ninterface ColorInterface\n{\n    /**\n     * Converts the color to RGB.\n     */\n    public function toRgb() : Rgb;\n\n    /**\n     * Converts the color to CMYK.\n     */\n    public function toCmyk() : Cmyk;\n\n    /**\n     * Converts the color to gray.\n     */\n    public function toGray() : Gray;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Color/Gray.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Color;\n\nuse BaconQrCode\\Exception;\n\nfinal class Gray implements ColorInterface\n{\n    /**\n     * @var int\n     */\n    private $gray;\n\n    /**\n     * @param int $gray the gray value between 0 (black) and 100 (white)\n     */\n    public function __construct(int $gray)\n    {\n        if ($gray < 0 || $gray > 100) {\n            throw new Exception\\InvalidArgumentException('Gray must be between 0 and 100');\n        }\n\n        $this->gray = (int) $gray;\n    }\n\n    public function getGray() : int\n    {\n        return $this->gray;\n    }\n\n    public function toRgb() : Rgb\n    {\n        return new Rgb((int) ($this->gray * 2.55), (int) ($this->gray * 2.55), (int) ($this->gray * 2.55));\n    }\n\n    public function toCmyk() : Cmyk\n    {\n        return new Cmyk(0, 0, 0, 100 - $this->gray);\n    }\n\n    public function toGray() : Gray\n    {\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Color;\n\nuse BaconQrCode\\Exception;\n\nfinal class Rgb implements ColorInterface\n{\n    /**\n     * @var int\n     */\n    private $red;\n\n    /**\n     * @var int\n     */\n    private $green;\n\n    /**\n     * @var int\n     */\n    private $blue;\n\n    /**\n     * @param int $red the red amount of the color, 0 to 255\n     * @param int $green the green amount of the color, 0 to 255\n     * @param int $blue the blue amount of the color, 0 to 255\n     */\n    public function __construct(int $red, int $green, int $blue)\n    {\n        if ($red < 0 || $red > 255) {\n            throw new Exception\\InvalidArgumentException('Red must be between 0 and 255');\n        }\n\n        if ($green < 0 || $green > 255) {\n            throw new Exception\\InvalidArgumentException('Green must be between 0 and 255');\n        }\n\n        if ($blue < 0 || $blue > 255) {\n            throw new Exception\\InvalidArgumentException('Blue must be between 0 and 255');\n        }\n\n        $this->red = $red;\n        $this->green = $green;\n        $this->blue = $blue;\n    }\n\n    public function getRed() : int\n    {\n        return $this->red;\n    }\n\n    public function getGreen() : int\n    {\n        return $this->green;\n    }\n\n    public function getBlue() : int\n    {\n        return $this->blue;\n    }\n\n    public function toRgb() : Rgb\n    {\n        return $this;\n    }\n\n    public function toCmyk() : Cmyk\n    {\n        $c = 1 - ($this->red / 255);\n        $m = 1 - ($this->green / 255);\n        $y = 1 - ($this->blue / 255);\n        $k = min($c, $m, $y);\n\n        return new Cmyk(\n            (int) (100 * ($c - $k) / (1 - $k)),\n            (int) (100 * ($m - $k) / (1 - $k)),\n            (int) (100 * ($y - $k) / (1 - $k)),\n            (int) (100 * $k)\n        );\n    }\n\n    public function toGray() : Gray\n    {\n        return new Gray((int) (($this->red * 0.21 + $this->green * 0.71 + $this->blue * 0.07) / 2.55));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Eye;\n\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Combines the style of two different eyes.\n */\nfinal class CompositeEye implements EyeInterface\n{\n    /**\n     * @var EyeInterface\n     */\n    private $externalEye;\n\n    /**\n     * @var EyeInterface\n     */\n    private $internalEye;\n\n    public function __construct(EyeInterface $externalEye, EyeInterface $internalEye)\n    {\n        $this->externalEye = $externalEye;\n        $this->internalEye = $internalEye;\n    }\n\n    public function getExternalPath() : Path\n    {\n        return $this->externalEye->getExternalPath();\n    }\n\n    public function getInternalPath() : Path\n    {\n        return $this->internalEye->getInternalPath();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Eye;\n\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Interface for describing the look of an eye.\n */\ninterface EyeInterface\n{\n    /**\n     * Returns the path of the external eye element.\n     *\n     * The path origin point (0, 0) must be anchored at the middle of the path.\n     */\n    public function getExternalPath() : Path;\n\n    /**\n     * Returns the path of the internal eye element.\n     *\n     * The path origin point (0, 0) must be anchored at the middle of the path.\n     */\n    public function getInternalPath() : Path;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Eye/ModuleEye.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Eye;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Renderer\\Module\\ModuleInterface;\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Renders an eye based on a module renderer.\n */\nfinal class ModuleEye implements EyeInterface\n{\n    /**\n     * @var ModuleInterface\n     */\n    private $module;\n\n    public function __construct(ModuleInterface $module)\n    {\n        $this->module = $module;\n    }\n\n    public function getExternalPath() : Path\n    {\n        $matrix = new ByteMatrix(7, 7);\n\n        for ($x = 0; $x < 7; ++$x) {\n            $matrix->set($x, 0, 1);\n            $matrix->set($x, 6, 1);\n        }\n\n        for ($y = 1; $y < 6; ++$y) {\n            $matrix->set(0, $y, 1);\n            $matrix->set(6, $y, 1);\n        }\n\n        return $this->module->createPath($matrix)->translate(-3.5, -3.5);\n    }\n\n    public function getInternalPath() : Path\n    {\n        $matrix = new ByteMatrix(3, 3);\n\n        for ($x = 0; $x < 3; ++$x) {\n            for ($y = 0; $y < 3; ++$y) {\n                $matrix->set($x, $y, 1);\n            }\n        }\n\n        return $this->module->createPath($matrix)->translate(-1.5, -1.5);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Eye;\n\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Renders the inner eye as a circle.\n */\nfinal class SimpleCircleEye implements EyeInterface\n{\n    /**\n     * @var self|null\n     */\n    private static $instance;\n\n    private function __construct()\n    {\n    }\n\n    public static function instance() : self\n    {\n        return self::$instance ?: self::$instance = new self();\n    }\n\n    public function getExternalPath() : Path\n    {\n        return (new Path())\n            ->move(-3.5, -3.5)\n            ->line(3.5, -3.5)\n            ->line(3.5, 3.5)\n            ->line(-3.5, 3.5)\n            ->close()\n            ->move(-2.5, -2.5)\n            ->line(-2.5, 2.5)\n            ->line(2.5, 2.5)\n            ->line(2.5, -2.5)\n            ->close()\n        ;\n    }\n\n    public function getInternalPath() : Path\n    {\n        return (new Path())\n            ->move(1.5, 0)\n            ->ellipticArc(1.5, 1.5, 0., false, true, 0., 1.5)\n            ->ellipticArc(1.5, 1.5, 0., false, true, -1.5, 0.)\n            ->ellipticArc(1.5, 1.5, 0., false, true, 0., -1.5)\n            ->ellipticArc(1.5, 1.5, 0., false, true, 1.5, 0.)\n            ->close()\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Eye;\n\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Renders the eyes in their default square shape.\n */\nfinal class SquareEye implements EyeInterface\n{\n    /**\n     * @var self|null\n     */\n    private static $instance;\n\n    private function __construct()\n    {\n    }\n\n    public static function instance() : self\n    {\n        return self::$instance ?: self::$instance = new self();\n    }\n\n    public function getExternalPath() : Path\n    {\n        return (new Path())\n            ->move(-3.5, -3.5)\n            ->line(3.5, -3.5)\n            ->line(3.5, 3.5)\n            ->line(-3.5, 3.5)\n            ->close()\n            ->move(-2.5, -2.5)\n            ->line(-2.5, 2.5)\n            ->line(2.5, 2.5)\n            ->line(2.5, -2.5)\n            ->close()\n        ;\n    }\n\n    public function getInternalPath() : Path\n    {\n        return (new Path())\n            ->move(-1.5, -1.5)\n            ->line(1.5, -1.5)\n            ->line(1.5, 1.5)\n            ->line(-1.5, 1.5)\n            ->close()\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Image;\n\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Renderer\\Color\\Alpha;\nuse BaconQrCode\\Renderer\\Color\\Cmyk;\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\nuse BaconQrCode\\Renderer\\Color\\Gray;\nuse BaconQrCode\\Renderer\\Color\\Rgb;\nuse BaconQrCode\\Renderer\\Path\\Close;\nuse BaconQrCode\\Renderer\\Path\\Curve;\nuse BaconQrCode\\Renderer\\Path\\EllipticArc;\nuse BaconQrCode\\Renderer\\Path\\Line;\nuse BaconQrCode\\Renderer\\Path\\Move;\nuse BaconQrCode\\Renderer\\Path\\Path;\nuse BaconQrCode\\Renderer\\RendererStyle\\Gradient;\nuse BaconQrCode\\Renderer\\RendererStyle\\GradientType;\n\nfinal class EpsImageBackEnd implements ImageBackEndInterface\n{\n    private const PRECISION = 3;\n\n    /**\n     * @var string|null\n     */\n    private $eps;\n\n    public function new(int $size, ColorInterface $backgroundColor) : void\n    {\n        $this->eps = \"%!PS-Adobe-3.0 EPSF-3.0\\n\"\n            . \"%%Creator: BaconQrCode\\n\"\n            . sprintf(\"%%%%BoundingBox: 0 0 %d %d \\n\", $size, $size)\n            . \"%%BeginProlog\\n\"\n            . \"save\\n\"\n            . \"50 dict begin\\n\"\n            . \"/q { gsave } bind def\\n\"\n            . \"/Q { grestore } bind def\\n\"\n            . \"/s { scale } bind def\\n\"\n            . \"/t { translate } bind def\\n\"\n            . \"/r { rotate } bind def\\n\"\n            . \"/n { newpath } bind def\\n\"\n            . \"/m { moveto } bind def\\n\"\n            . \"/l { lineto } bind def\\n\"\n            . \"/c { curveto } bind def\\n\"\n            . \"/z { closepath } bind def\\n\"\n            . \"/f { eofill } bind def\\n\"\n            . \"/rgb { setrgbcolor } bind def\\n\"\n            . \"/cmyk { setcmykcolor } bind def\\n\"\n            . \"/gray { setgray } bind def\\n\"\n            . \"%%EndProlog\\n\"\n            . \"1 -1 s\\n\"\n            . sprintf(\"0 -%d t\\n\", $size);\n\n        if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) {\n            return;\n        }\n\n        $this->eps .= wordwrap(\n            '0 0 m'\n            . sprintf(' %s 0 l', (string) $size)\n            . sprintf(' %s %s l', (string) $size, (string) $size)\n            . sprintf(' 0 %s l', (string) $size)\n            . ' z'\n            . ' ' .$this->getColorSetString($backgroundColor) . \" f\\n\",\n            75,\n            \"\\n \"\n        );\n    }\n\n    public function scale(float $size) : void\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->eps .= sprintf(\"%1\\$s %1\\$s s\\n\", round($size, self::PRECISION));\n    }\n\n    public function translate(float $x, float $y) : void\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->eps .= sprintf(\"%s %s t\\n\", round($x, self::PRECISION), round($y, self::PRECISION));\n    }\n\n    public function rotate(int $degrees) : void\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->eps .= sprintf(\"%d r\\n\", $degrees);\n    }\n\n    public function push() : void\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->eps .= \"q\\n\";\n    }\n\n    public function pop() : void\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->eps .= \"Q\\n\";\n    }\n\n    public function drawPathWithColor(Path $path, ColorInterface $color) : void\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $fromX = 0;\n        $fromY = 0;\n        $this->eps .= wordwrap(\n            'n '\n            . $this->drawPathOperations($path, $fromX, $fromY)\n            . ' ' . $this->getColorSetString($color) . \" f\\n\",\n            75,\n            \"\\n \"\n        );\n    }\n\n    public function drawPathWithGradient(\n        Path $path,\n        Gradient $gradient,\n        float $x,\n        float $y,\n        float $width,\n        float $height\n    ) : void {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $fromX = 0;\n        $fromY = 0;\n        $this->eps .= wordwrap(\n            'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . \"\\n\",\n            75,\n            \"\\n \"\n        );\n\n        $this->createGradientFill($gradient, $x, $y, $width, $height);\n    }\n\n    public function done() : string\n    {\n        if (null === $this->eps) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->eps .= \"%%TRAILER\\nend restore\\n%%EOF\";\n        $blob = $this->eps;\n        $this->eps = null;\n\n        return $blob;\n    }\n\n    private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string\n    {\n        $pathData = [];\n\n        foreach ($ops as $op) {\n            switch (true) {\n                case $op instanceof Move:\n                    $fromX = $toX = round($op->getX(), self::PRECISION);\n                    $fromY = $toY = round($op->getY(), self::PRECISION);\n                    $pathData[] = sprintf('%s %s m', $toX, $toY);\n                    break;\n\n                case $op instanceof Line:\n                    $fromX = $toX = round($op->getX(), self::PRECISION);\n                    $fromY = $toY = round($op->getY(), self::PRECISION);\n                    $pathData[] = sprintf('%s %s l', $toX, $toY);\n                    break;\n\n                case $op instanceof EllipticArc:\n                    $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY);\n                    break;\n\n                case $op instanceof Curve:\n                    $x1 = round($op->getX1(), self::PRECISION);\n                    $y1 = round($op->getY1(), self::PRECISION);\n                    $x2 = round($op->getX2(), self::PRECISION);\n                    $y2 = round($op->getY2(), self::PRECISION);\n                    $fromX = $x3 = round($op->getX3(), self::PRECISION);\n                    $fromY = $y3 = round($op->getY3(), self::PRECISION);\n                    $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3);\n                    break;\n\n                case $op instanceof Close:\n                    $pathData[] = 'z';\n                    break;\n\n                default:\n                    throw new RuntimeException('Unexpected draw operation: ' . get_class($op));\n            }\n        }\n\n        return implode(' ', $pathData);\n    }\n\n    private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void\n    {\n        $startColor = $gradient->getStartColor();\n        $endColor = $gradient->getEndColor();\n\n        if ($startColor instanceof Alpha) {\n            $startColor = $startColor->getBaseColor();\n        }\n\n        $startColorType = get_class($startColor);\n\n        if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) {\n            $startColorType = Cmyk::class;\n            $startColor = $startColor->toCmyk();\n        }\n\n        if (get_class($endColor) !== $startColorType) {\n            switch ($startColorType) {\n                case Cmyk::class:\n                    $endColor = $endColor->toCmyk();\n                    break;\n\n                case Rgb::class:\n                    $endColor = $endColor->toRgb();\n                    break;\n\n                case Gray::class:\n                    $endColor = $endColor->toGray();\n                    break;\n            }\n        }\n\n        $this->eps .= \"eoclip\\n<<\\n\";\n\n        if ($gradient->getType() === GradientType::RADIAL()) {\n            $this->eps .= \" /ShadingType 3\\n\";\n        } else {\n            $this->eps .= \" /ShadingType 2\\n\";\n        }\n\n        $this->eps .= \" /Extend [ true true ]\\n\"\n            . \" /AntiAlias true\\n\";\n\n        switch ($startColorType) {\n            case Cmyk::class:\n                $this->eps .= \" /ColorSpace /DeviceCMYK\\n\";\n                break;\n\n            case Rgb::class:\n                $this->eps .= \" /ColorSpace /DeviceRGB\\n\";\n                break;\n\n            case Gray::class:\n                $this->eps .= \" /ColorSpace /DeviceGray\\n\";\n                break;\n        }\n\n        switch ($gradient->getType()) {\n            case GradientType::HORIZONTAL():\n                $this->eps .= sprintf(\n                    \" /Coords [ %s %s %s %s ]\\n\",\n                    round($x, self::PRECISION),\n                    round($y, self::PRECISION),\n                    round($x + $width, self::PRECISION),\n                    round($y, self::PRECISION)\n                );\n                break;\n\n            case GradientType::VERTICAL():\n                $this->eps .= sprintf(\n                    \" /Coords [ %s %s %s %s ]\\n\",\n                    round($x, self::PRECISION),\n                    round($y, self::PRECISION),\n                    round($x, self::PRECISION),\n                    round($y + $height, self::PRECISION)\n                );\n                break;\n\n            case GradientType::DIAGONAL():\n                $this->eps .= sprintf(\n                    \" /Coords [ %s %s %s %s ]\\n\",\n                    round($x, self::PRECISION),\n                    round($y, self::PRECISION),\n                    round($x + $width, self::PRECISION),\n                    round($y + $height, self::PRECISION)\n                );\n                break;\n\n            case GradientType::INVERSE_DIAGONAL():\n                $this->eps .= sprintf(\n                    \" /Coords [ %s %s %s %s ]\\n\",\n                    round($x, self::PRECISION),\n                    round($y + $height, self::PRECISION),\n                    round($x + $width, self::PRECISION),\n                    round($y, self::PRECISION)\n                );\n                break;\n\n            case GradientType::RADIAL():\n                $centerX = ($x + $width) / 2;\n                $centerY = ($y + $height) / 2;\n\n                $this->eps .= sprintf(\n                    \" /Coords [ %s %s 0 %s %s %s ]\\n\",\n                    round($centerX, self::PRECISION),\n                    round($centerY, self::PRECISION),\n                    round($centerX, self::PRECISION),\n                    round($centerY, self::PRECISION),\n                    round(max($width, $height) / 2, self::PRECISION)\n                );\n                break;\n        }\n\n        $this->eps .= \" /Function\\n\"\n            . \" <<\\n\"\n            . \"  /FunctionType 2\\n\"\n            . \"  /Domain [ 0 1 ]\\n\"\n            . sprintf(\"  /C0 [ %s ]\\n\", $this->getColorString($startColor))\n            . sprintf(\"  /C1 [ %s ]\\n\", $this->getColorString($endColor))\n            . \"  /N 1\\n\"\n            . \" >>\\n>>\\nshfill\\nQ\\n\";\n    }\n\n    private function getColorSetString(ColorInterface $color) : string\n    {\n        if ($color instanceof Rgb) {\n            return $this->getColorString($color) . ' rgb';\n        }\n\n        if ($color instanceof Cmyk) {\n            return $this->getColorString($color) . ' cmyk';\n        }\n\n        if ($color instanceof Gray) {\n            return $this->getColorString($color) . ' gray';\n        }\n\n        return $this->getColorSetString($color->toCmyk());\n    }\n\n    private function getColorString(ColorInterface $color) : string\n    {\n        if ($color instanceof Rgb) {\n            return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255);\n        }\n\n        if ($color instanceof Cmyk) {\n            return sprintf(\n                '%s %s %s %s',\n                $color->getCyan() / 100,\n                $color->getMagenta() / 100,\n                $color->getYellow() / 100,\n                $color->getBlack() / 100\n            );\n        }\n\n        if ($color instanceof Gray) {\n            return sprintf('%s', $color->getGray() / 100);\n        }\n\n        return $this->getColorString($color->toCmyk());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Image;\n\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\nuse BaconQrCode\\Renderer\\Path\\Path;\nuse BaconQrCode\\Renderer\\RendererStyle\\Gradient;\n\n/**\n * Interface for back ends able to to produce path based images.\n */\ninterface ImageBackEndInterface\n{\n    /**\n     * Starts a new image.\n     *\n     * If a previous image was already started, previous data get erased.\n     */\n    public function new(int $size, ColorInterface $backgroundColor) : void;\n\n    /**\n     * Transforms all following drawing operation coordinates by scaling them by a given factor.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function scale(float $size) : void;\n\n    /**\n     * Transforms all following drawing operation coordinates by translating them by a given amount.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function translate(float $x, float $y) : void;\n\n    /**\n     * Transforms all following drawing operation coordinates by rotating them by a given amount.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function rotate(int $degrees) : void;\n\n    /**\n     * Pushes the current coordinate transformation onto a stack.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function push() : void;\n\n    /**\n     * Pops the last coordinate transformation from a stack.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function pop() : void;\n\n    /**\n     * Draws a path with a given color.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function drawPathWithColor(Path $path, ColorInterface $color) : void;\n\n    /**\n     * Draws a path with a given gradient which spans the box described by the position and size.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function drawPathWithGradient(\n        Path $path,\n        Gradient $gradient,\n        float $x,\n        float $y,\n        float $width,\n        float $height\n    ) : void;\n\n    /**\n     * Ends the image drawing operation and returns the resulting blob.\n     *\n     * This should reset the state of the back end and thus this method should only be callable once per image.\n     *\n     * @throws RuntimeException if no image was started yet.\n     */\n    public function done() : string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Image/ImagickImageBackEnd.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Image;\n\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Renderer\\Color\\Alpha;\nuse BaconQrCode\\Renderer\\Color\\Cmyk;\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\nuse BaconQrCode\\Renderer\\Color\\Gray;\nuse BaconQrCode\\Renderer\\Color\\Rgb;\nuse BaconQrCode\\Renderer\\Path\\Close;\nuse BaconQrCode\\Renderer\\Path\\Curve;\nuse BaconQrCode\\Renderer\\Path\\EllipticArc;\nuse BaconQrCode\\Renderer\\Path\\Line;\nuse BaconQrCode\\Renderer\\Path\\Move;\nuse BaconQrCode\\Renderer\\Path\\Path;\nuse BaconQrCode\\Renderer\\RendererStyle\\Gradient;\nuse BaconQrCode\\Renderer\\RendererStyle\\GradientType;\nuse Imagick;\nuse ImagickDraw;\nuse ImagickPixel;\n\nfinal class ImagickImageBackEnd implements ImageBackEndInterface\n{\n    /**\n     * @var string\n     */\n    private $imageFormat;\n\n    /**\n     * @var int\n     */\n    private $compressionQuality;\n\n    /**\n     * @var Imagick|null\n     */\n    private $image;\n\n    /**\n     * @var ImagickDraw|null\n     */\n    private $draw;\n\n    /**\n     * @var int|null\n     */\n    private $gradientCount;\n\n    /**\n     * @var TransformationMatrix[]|null\n     */\n    private $matrices;\n\n    /**\n     * @var int|null\n     */\n    private $matrixIndex;\n\n    public function __construct(string $imageFormat = 'png', int $compressionQuality = 100)\n    {\n        if (! class_exists(Imagick::class)) {\n            throw new RuntimeException('You need to install the imagick extension to use this back end');\n        }\n\n        $this->imageFormat = $imageFormat;\n        $this->compressionQuality = $compressionQuality;\n    }\n\n    public function new(int $size, ColorInterface $backgroundColor) : void\n    {\n        $this->image = new Imagick();\n        $this->image->newImage($size, $size, $this->getColorPixel($backgroundColor));\n        $this->image->setImageFormat($this->imageFormat);\n        $this->image->setCompressionQuality($this->compressionQuality);\n        $this->draw = new ImagickDraw();\n        $this->gradientCount = 0;\n        $this->matrices = [new TransformationMatrix()];\n        $this->matrixIndex = 0;\n    }\n\n    public function scale(float $size) : void\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->scale($size, $size);\n        $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex]\n            ->multiply(TransformationMatrix::scale($size));\n    }\n\n    public function translate(float $x, float $y) : void\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->translate($x, $y);\n        $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex]\n            ->multiply(TransformationMatrix::translate($x, $y));\n    }\n\n    public function rotate(int $degrees) : void\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->rotate($degrees);\n        $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex]\n            ->multiply(TransformationMatrix::rotate($degrees));\n    }\n\n    public function push() : void\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->push();\n        $this->matrices[++$this->matrixIndex] = $this->matrices[$this->matrixIndex - 1];\n    }\n\n    public function pop() : void\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->pop();\n        unset($this->matrices[$this->matrixIndex--]);\n    }\n\n    public function drawPathWithColor(Path $path, ColorInterface $color) : void\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->setFillColor($this->getColorPixel($color));\n        $this->drawPath($path);\n    }\n\n    public function drawPathWithGradient(\n        Path $path,\n        Gradient $gradient,\n        float $x,\n        float $y,\n        float $width,\n        float $height\n    ) : void {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->draw->setFillPatternURL('#' . $this->createGradientFill($gradient, $x, $y, $width, $height));\n        $this->drawPath($path);\n    }\n\n    public function done() : string\n    {\n        if (null === $this->draw) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->image->drawImage($this->draw);\n        $blob = $this->image->getImageBlob();\n        $this->draw->clear();\n        $this->image->clear();\n        $this->draw = null;\n        $this->image = null;\n        $this->gradientCount = null;\n\n        return $blob;\n    }\n\n    private function drawPath(Path $path) : void\n    {\n        $this->draw->pathStart();\n\n        foreach ($path as $op) {\n            switch (true) {\n                case $op instanceof Move:\n                    $this->draw->pathMoveToAbsolute($op->getX(), $op->getY());\n                    break;\n\n                case $op instanceof Line:\n                    $this->draw->pathLineToAbsolute($op->getX(), $op->getY());\n                    break;\n\n                case $op instanceof EllipticArc:\n                    $this->draw->pathEllipticArcAbsolute(\n                        $op->getXRadius(),\n                        $op->getYRadius(),\n                        $op->getXAxisAngle(),\n                        $op->isLargeArc(),\n                        $op->isSweep(),\n                        $op->getX(),\n                        $op->getY()\n                    );\n                    break;\n\n                case $op instanceof Curve:\n                    $this->draw->pathCurveToAbsolute(\n                        $op->getX1(),\n                        $op->getY1(),\n                        $op->getX2(),\n                        $op->getY2(),\n                        $op->getX3(),\n                        $op->getY3()\n                    );\n                    break;\n\n                case $op instanceof Close:\n                    $this->draw->pathClose();\n                    break;\n\n                default:\n                    throw new RuntimeException('Unexpected draw operation: ' . get_class($op));\n            }\n        }\n\n        $this->draw->pathFinish();\n    }\n\n    private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string\n    {\n        list($width, $height) = $this->matrices[$this->matrixIndex]->apply($width, $height);\n\n        $startColor = $this->getColorPixel($gradient->getStartColor())->getColorAsString();\n        $endColor = $this->getColorPixel($gradient->getEndColor())->getColorAsString();\n        $gradientImage = new Imagick();\n\n        switch ($gradient->getType()) {\n            case GradientType::HORIZONTAL():\n                $gradientImage->newPseudoImage((int) $height, (int) $width, sprintf(\n                    'gradient:%s-%s',\n                    $startColor,\n                    $endColor\n                ));\n                $gradientImage->rotateImage('transparent', -90);\n                break;\n\n            case GradientType::VERTICAL():\n                $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf(\n                    'gradient:%s-%s',\n                    $startColor,\n                    $endColor\n                ));\n                break;\n\n            case GradientType::DIAGONAL():\n            case GradientType::INVERSE_DIAGONAL():\n                $gradientImage->newPseudoImage((int) ($width * sqrt(2)), (int) ($height * sqrt(2)), sprintf(\n                    'gradient:%s-%s',\n                    $startColor,\n                    $endColor\n                ));\n\n                if (GradientType::DIAGONAL() === $gradient->getType()) {\n                    $gradientImage->rotateImage('transparent', -45);\n                } else {\n                    $gradientImage->rotateImage('transparent', -135);\n                }\n\n                $rotatedWidth = $gradientImage->getImageWidth();\n                $rotatedHeight = $gradientImage->getImageHeight();\n\n                $gradientImage->setImagePage($rotatedWidth, $rotatedHeight, 0, 0);\n                $gradientImage->cropImage(\n                    intdiv($rotatedWidth, 2) - 2,\n                    intdiv($rotatedHeight, 2) - 2,\n                    intdiv($rotatedWidth, 4) + 1,\n                    intdiv($rotatedWidth, 4) + 1\n                );\n                break;\n\n            case GradientType::RADIAL():\n                $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf(\n                    'radial-gradient:%s-%s',\n                    $startColor,\n                    $endColor\n                ));\n                break;\n        }\n\n        $id = sprintf('g%d', ++$this->gradientCount);\n        $this->draw->pushPattern($id, 0, 0, $width, $height);\n        $this->draw->composite(Imagick::COMPOSITE_COPY, 0, 0, $width, $height, $gradientImage);\n        $this->draw->popPattern();\n        return $id;\n    }\n\n    private function getColorPixel(ColorInterface $color) : ImagickPixel\n    {\n        $alpha = 100;\n\n        if ($color instanceof Alpha) {\n            $alpha = $color->getAlpha();\n            $color = $color->getBaseColor();\n        }\n\n        if ($color instanceof Rgb) {\n            return new ImagickPixel(sprintf(\n                'rgba(%d, %d, %d, %F)',\n                $color->getRed(),\n                $color->getGreen(),\n                $color->getBlue(),\n                $alpha / 100\n            ));\n        }\n\n        if ($color instanceof Cmyk) {\n            return new ImagickPixel(sprintf(\n                'cmyka(%d, %d, %d, %d, %F)',\n                $color->getCyan(),\n                $color->getMagenta(),\n                $color->getYellow(),\n                $color->getBlack(),\n                $alpha / 100\n            ));\n        }\n\n        if ($color instanceof Gray) {\n            return new ImagickPixel(sprintf(\n                'graya(%d%%, %F)',\n                $color->getGray(),\n                $alpha / 100\n            ));\n        }\n\n        return $this->getColorPixel(new Alpha($alpha, $color->toRgb()));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Image;\n\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Renderer\\Color\\Alpha;\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\nuse BaconQrCode\\Renderer\\Path\\Close;\nuse BaconQrCode\\Renderer\\Path\\Curve;\nuse BaconQrCode\\Renderer\\Path\\EllipticArc;\nuse BaconQrCode\\Renderer\\Path\\Line;\nuse BaconQrCode\\Renderer\\Path\\Move;\nuse BaconQrCode\\Renderer\\Path\\Path;\nuse BaconQrCode\\Renderer\\RendererStyle\\Gradient;\nuse BaconQrCode\\Renderer\\RendererStyle\\GradientType;\nuse XMLWriter;\n\nfinal class SvgImageBackEnd implements ImageBackEndInterface\n{\n    private const PRECISION = 3;\n\n    /**\n     * @var XMLWriter|null\n     */\n    private $xmlWriter;\n\n    /**\n     * @var int[]|null\n     */\n    private $stack;\n\n    /**\n     * @var int|null\n     */\n    private $currentStack;\n\n    /**\n     * @var int|null\n     */\n    private $gradientCount;\n\n    public function __construct()\n    {\n        if (! class_exists(XMLWriter::class)) {\n            throw new RuntimeException('You need to install the libxml extension to use this back end');\n        }\n    }\n\n    public function new(int $size, ColorInterface $backgroundColor) : void\n    {\n        $this->xmlWriter = new XMLWriter();\n        $this->xmlWriter->openMemory();\n\n        $this->xmlWriter->startDocument('1.0', 'UTF-8');\n        $this->xmlWriter->startElement('svg');\n        $this->xmlWriter->writeAttribute('xmlns', 'http://www.w3.org/2000/svg');\n        $this->xmlWriter->writeAttribute('version', '1.1');\n        $this->xmlWriter->writeAttribute('width', (string) $size);\n        $this->xmlWriter->writeAttribute('height', (string) $size);\n        $this->xmlWriter->writeAttribute('viewBox', '0 0 '. $size . ' ' . $size);\n\n        $this->gradientCount = 0;\n        $this->currentStack = 0;\n        $this->stack[0] = 0;\n\n        $alpha = 1;\n\n        if ($backgroundColor instanceof Alpha) {\n            $alpha = $backgroundColor->getAlpha() / 100;\n        }\n\n        if (0 === $alpha) {\n            return;\n        }\n\n        $this->xmlWriter->startElement('rect');\n        $this->xmlWriter->writeAttribute('x', '0');\n        $this->xmlWriter->writeAttribute('y', '0');\n        $this->xmlWriter->writeAttribute('width', (string) $size);\n        $this->xmlWriter->writeAttribute('height', (string) $size);\n        $this->xmlWriter->writeAttribute('fill', $this->getColorString($backgroundColor));\n\n        if ($alpha < 1) {\n            $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha);\n        }\n\n        $this->xmlWriter->endElement();\n    }\n\n    public function scale(float $size) : void\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->xmlWriter->startElement('g');\n        $this->xmlWriter->writeAttribute(\n            'transform',\n            sprintf('scale(%s)', round($size, self::PRECISION))\n        );\n        ++$this->stack[$this->currentStack];\n    }\n\n    public function translate(float $x, float $y) : void\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->xmlWriter->startElement('g');\n        $this->xmlWriter->writeAttribute(\n            'transform',\n            sprintf('translate(%s,%s)', round($x, self::PRECISION), round($y, self::PRECISION))\n        );\n        ++$this->stack[$this->currentStack];\n    }\n\n    public function rotate(int $degrees) : void\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->xmlWriter->startElement('g');\n        $this->xmlWriter->writeAttribute('transform', sprintf('rotate(%d)', $degrees));\n        ++$this->stack[$this->currentStack];\n    }\n\n    public function push() : void\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $this->xmlWriter->startElement('g');\n        $this->stack[] = 1;\n        ++$this->currentStack;\n    }\n\n    public function pop() : void\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        for ($i = 0; $i < $this->stack[$this->currentStack]; ++$i) {\n            $this->xmlWriter->endElement();\n        }\n\n        array_pop($this->stack);\n        --$this->currentStack;\n    }\n\n    public function drawPathWithColor(Path $path, ColorInterface $color) : void\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $alpha = 1;\n\n        if ($color instanceof Alpha) {\n            $alpha = $color->getAlpha() / 100;\n        }\n\n        $this->startPathElement($path);\n        $this->xmlWriter->writeAttribute('fill', $this->getColorString($color));\n\n        if ($alpha < 1) {\n            $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha);\n        }\n\n        $this->xmlWriter->endElement();\n    }\n\n    public function drawPathWithGradient(\n        Path $path,\n        Gradient $gradient,\n        float $x,\n        float $y,\n        float $width,\n        float $height\n    ) : void {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        $gradientId = $this->createGradientFill($gradient, $x, $y, $width, $height);\n        $this->startPathElement($path);\n        $this->xmlWriter->writeAttribute('fill', 'url(#' . $gradientId . ')');\n        $this->xmlWriter->endElement();\n    }\n\n    public function done() : string\n    {\n        if (null === $this->xmlWriter) {\n            throw new RuntimeException('No image has been started');\n        }\n\n        foreach ($this->stack as $openElements) {\n            for ($i = $openElements; $i > 0; --$i) {\n                $this->xmlWriter->endElement();\n            }\n        }\n\n        $this->xmlWriter->endDocument();\n        $blob = $this->xmlWriter->outputMemory(true);\n        $this->xmlWriter = null;\n        $this->stack = null;\n        $this->currentStack = null;\n        $this->gradientCount = null;\n\n        return $blob;\n    }\n\n    private function startPathElement(Path $path) : void\n    {\n        $pathData = [];\n\n        foreach ($path as $op) {\n            switch (true) {\n                case $op instanceof Move:\n                    $pathData[] = sprintf(\n                        'M%s %s',\n                        round($op->getX(), self::PRECISION),\n                        round($op->getY(), self::PRECISION)\n                    );\n                    break;\n\n                case $op instanceof Line:\n                    $pathData[] = sprintf(\n                        'L%s %s',\n                        round($op->getX(), self::PRECISION),\n                        round($op->getY(), self::PRECISION)\n                    );\n                    break;\n\n                case $op instanceof EllipticArc:\n                    $pathData[] = sprintf(\n                        'A%s %s %s %u %u %s %s',\n                        round($op->getXRadius(), self::PRECISION),\n                        round($op->getYRadius(), self::PRECISION),\n                        round($op->getXAxisAngle(), self::PRECISION),\n                        $op->isLargeArc(),\n                        $op->isSweep(),\n                        round($op->getX(), self::PRECISION),\n                        round($op->getY(), self::PRECISION)\n                    );\n                    break;\n\n                case $op instanceof Curve:\n                    $pathData[] = sprintf(\n                        'C%s %s %s %s %s %s',\n                        round($op->getX1(), self::PRECISION),\n                        round($op->getY1(), self::PRECISION),\n                        round($op->getX2(), self::PRECISION),\n                        round($op->getY2(), self::PRECISION),\n                        round($op->getX3(), self::PRECISION),\n                        round($op->getY3(), self::PRECISION)\n                    );\n                    break;\n\n                case $op instanceof Close:\n                    $pathData[] = 'Z';\n                    break;\n\n                default:\n                    throw new RuntimeException('Unexpected draw operation: ' . get_class($op));\n            }\n        }\n\n        $this->xmlWriter->startElement('path');\n        $this->xmlWriter->writeAttribute('fill-rule', 'evenodd');\n        $this->xmlWriter->writeAttribute('d', implode('', $pathData));\n    }\n\n    private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string\n    {\n        $this->xmlWriter->startElement('defs');\n\n        $startColor = $gradient->getStartColor();\n        $endColor = $gradient->getEndColor();\n\n        if ($gradient->getType() === GradientType::RADIAL()) {\n            $this->xmlWriter->startElement('radialGradient');\n        } else {\n            $this->xmlWriter->startElement('linearGradient');\n        }\n\n        $this->xmlWriter->writeAttribute('gradientUnits', 'userSpaceOnUse');\n\n        switch ($gradient->getType()) {\n            case GradientType::HORIZONTAL():\n                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION));\n                $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION));\n                break;\n\n            case GradientType::VERTICAL():\n                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION));\n                $this->xmlWriter->writeAttribute('x2', (string) round($x, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION));\n                break;\n\n            case GradientType::DIAGONAL():\n                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION));\n                $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION));\n                break;\n\n            case GradientType::INVERSE_DIAGONAL():\n                $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y1', (string) round($y + $height, self::PRECISION));\n                $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION));\n                $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION));\n                break;\n\n            case GradientType::RADIAL():\n                $this->xmlWriter->writeAttribute('cx', (string) round(($x + $width) / 2, self::PRECISION));\n                $this->xmlWriter->writeAttribute('cy', (string) round(($y + $height) / 2, self::PRECISION));\n                $this->xmlWriter->writeAttribute('r', (string) round(max($width, $height) / 2, self::PRECISION));\n                break;\n        }\n\n        $id = sprintf('g%d', ++$this->gradientCount);\n        $this->xmlWriter->writeAttribute('id', $id);\n\n        $this->xmlWriter->startElement('stop');\n        $this->xmlWriter->writeAttribute('offset', '0%');\n        $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($startColor));\n\n        if ($startColor instanceof Alpha) {\n            $this->xmlWriter->writeAttribute('stop-opacity', (string) $startColor->getAlpha());\n        }\n\n        $this->xmlWriter->endElement();\n\n        $this->xmlWriter->startElement('stop');\n        $this->xmlWriter->writeAttribute('offset', '100%');\n        $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($endColor));\n\n        if ($endColor instanceof Alpha) {\n            $this->xmlWriter->writeAttribute('stop-opacity', (string) $endColor->getAlpha());\n        }\n\n        $this->xmlWriter->endElement();\n\n        $this->xmlWriter->endElement();\n        $this->xmlWriter->endElement();\n\n        return $id;\n    }\n\n    private function getColorString(ColorInterface $color) : string\n    {\n        $color = $color->toRgb();\n\n        return sprintf(\n            '#%02x%02x%02x',\n            $color->getRed(),\n            $color->getGreen(),\n            $color->getBlue()\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Image;\n\nfinal class TransformationMatrix\n{\n    /**\n     * @var float[]\n     */\n    private $values;\n\n    public function __construct()\n    {\n        $this->values = [1, 0, 0, 1, 0, 0];\n    }\n\n    public function multiply(self $other) : self\n    {\n        $matrix = new self();\n        $matrix->values[0] = $this->values[0] * $other->values[0] + $this->values[2] * $other->values[1];\n        $matrix->values[1] = $this->values[1] * $other->values[0] + $this->values[3] * $other->values[1];\n        $matrix->values[2] = $this->values[0] * $other->values[2] + $this->values[2] * $other->values[3];\n        $matrix->values[3] = $this->values[1] * $other->values[2] + $this->values[3] * $other->values[3];\n        $matrix->values[4] = $this->values[0] * $other->values[4] + $this->values[2] * $other->values[5]\n            + $this->values[4];\n        $matrix->values[5] = $this->values[1] * $other->values[4] + $this->values[3] * $other->values[5]\n            + $this->values[5];\n\n        return $matrix;\n    }\n\n    public static function scale(float $size) : self\n    {\n        $matrix = new self();\n        $matrix->values = [$size, 0, 0, $size, 0, 0];\n        return $matrix;\n    }\n\n    public static function translate(float $x, float $y) : self\n    {\n        $matrix = new self();\n        $matrix->values = [1, 0, 0, 1, $x, $y];\n        return $matrix;\n    }\n\n    public static function rotate(int $degrees) : self\n    {\n        $matrix = new self();\n        $rad = deg2rad($degrees);\n        $matrix->values = [cos($rad), sin($rad), -sin($rad), cos($rad), 0, 0];\n        return $matrix;\n    }\n\n\n    /**\n     * Applies this matrix onto a point and returns the resulting viewport point.\n     *\n     * @return float[]\n     */\n    public function apply(float $x, float $y) : array\n    {\n        return [\n            $x * $this->values[0] + $y * $this->values[2] + $this->values[4],\n            $x * $this->values[1] + $y * $this->values[3] + $this->values[5],\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer;\n\nuse BaconQrCode\\Encoder\\MatrixUtil;\nuse BaconQrCode\\Encoder\\QrCode;\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse BaconQrCode\\Renderer\\Image\\ImageBackEndInterface;\nuse BaconQrCode\\Renderer\\Path\\Path;\nuse BaconQrCode\\Renderer\\RendererStyle\\EyeFill;\nuse BaconQrCode\\Renderer\\RendererStyle\\RendererStyle;\n\nfinal class ImageRenderer implements RendererInterface\n{\n    /**\n     * @var RendererStyle\n     */\n    private $rendererStyle;\n\n    /**\n     * @var ImageBackEndInterface\n     */\n    private $imageBackEnd;\n\n    public function __construct(RendererStyle $rendererStyle, ImageBackEndInterface $imageBackEnd)\n    {\n        $this->rendererStyle = $rendererStyle;\n        $this->imageBackEnd = $imageBackEnd;\n    }\n\n    /**\n     * @throws InvalidArgumentException if matrix width doesn't match height\n     */\n    public function render(QrCode $qrCode) : string\n    {\n        $size = $this->rendererStyle->getSize();\n        $margin = $this->rendererStyle->getMargin();\n        $matrix = $qrCode->getMatrix();\n        $matrixSize = $matrix->getWidth();\n\n        if ($matrixSize !== $matrix->getHeight()) {\n            throw new InvalidArgumentException('Matrix must have the same width and height');\n        }\n\n        $totalSize = $matrixSize + ($margin * 2);\n        $moduleSize = $size / $totalSize;\n        $fill = $this->rendererStyle->getFill();\n\n        $this->imageBackEnd->new($size, $fill->getBackgroundColor());\n        $this->imageBackEnd->scale((float) $moduleSize);\n        $this->imageBackEnd->translate((float) $margin, (float) $margin);\n\n        $module = $this->rendererStyle->getModule();\n        $moduleMatrix = clone $matrix;\n        MatrixUtil::removePositionDetectionPatterns($moduleMatrix);\n        $modulePath = $this->drawEyes($matrixSize, $module->createPath($moduleMatrix));\n\n        if ($fill->hasGradientFill()) {\n            $this->imageBackEnd->drawPathWithGradient(\n                $modulePath,\n                $fill->getForegroundGradient(),\n                0,\n                0,\n                $matrixSize,\n                $matrixSize\n            );\n        } else {\n            $this->imageBackEnd->drawPathWithColor($modulePath, $fill->getForegroundColor());\n        }\n\n        return $this->imageBackEnd->done();\n    }\n\n    private function drawEyes(int $matrixSize, Path $modulePath) : Path\n    {\n        $fill = $this->rendererStyle->getFill();\n\n        $eye = $this->rendererStyle->getEye();\n        $externalPath = $eye->getExternalPath();\n        $internalPath = $eye->getInternalPath();\n\n        $modulePath = $this->drawEye(\n            $externalPath,\n            $internalPath,\n            $fill->getTopLeftEyeFill(),\n            3.5,\n            3.5,\n            0,\n            $modulePath\n        );\n        $modulePath = $this->drawEye(\n            $externalPath,\n            $internalPath,\n            $fill->getTopRightEyeFill(),\n            $matrixSize - 3.5,\n            3.5,\n            90,\n            $modulePath\n        );\n        $modulePath = $this->drawEye(\n            $externalPath,\n            $internalPath,\n            $fill->getBottomLeftEyeFill(),\n            3.5,\n            $matrixSize - 3.5,\n            -90,\n            $modulePath\n        );\n\n        return $modulePath;\n    }\n\n    private function drawEye(\n        Path $externalPath,\n        Path $internalPath,\n        EyeFill $fill,\n        float $xTranslation,\n        float $yTranslation,\n        int $rotation,\n        Path $modulePath\n    ) : Path {\n        if ($fill->inheritsBothColors()) {\n            return $modulePath\n                ->append($externalPath->translate($xTranslation, $yTranslation))\n                ->append($internalPath->translate($xTranslation, $yTranslation));\n        }\n\n        $this->imageBackEnd->push();\n        $this->imageBackEnd->translate($xTranslation, $yTranslation);\n\n        if (0 !== $rotation) {\n            $this->imageBackEnd->rotate($rotation);\n        }\n\n        if ($fill->inheritsExternalColor()) {\n            $modulePath = $modulePath->append($externalPath->translate($xTranslation, $yTranslation));\n        } else {\n            $this->imageBackEnd->drawPathWithColor($externalPath, $fill->getExternalColor());\n        }\n\n        if ($fill->inheritsInternalColor()) {\n            $modulePath = $modulePath->append($internalPath->translate($xTranslation, $yTranslation));\n        } else {\n            $this->imageBackEnd->drawPathWithColor($internalPath, $fill->getInternalColor());\n        }\n\n        $this->imageBackEnd->pop();\n\n        return $modulePath;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Module;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Renders individual modules as dots.\n */\nfinal class DotsModule implements ModuleInterface\n{\n    public const LARGE = 1;\n    public const MEDIUM = .8;\n    public const SMALL = .6;\n\n    /**\n     * @var float\n     */\n    private $size;\n\n    public function __construct(float $size)\n    {\n        if ($size <= 0 || $size > 1) {\n            throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)');\n        }\n\n        $this->size = $size;\n    }\n\n    public function createPath(ByteMatrix $matrix) : Path\n    {\n        $width = $matrix->getWidth();\n        $height = $matrix->getHeight();\n        $path = new Path();\n        $halfSize = $this->size / 2;\n        $margin = (1 - $this->size) / 2;\n\n        for ($y = 0; $y < $height; ++$y) {\n            for ($x = 0; $x < $width; ++$x) {\n                if (! $matrix->get($x, $y)) {\n                    continue;\n                }\n\n                $pathX = $x + $margin;\n                $pathY = $y + $margin;\n\n                $path = $path\n                    ->move($pathX + $this->size, $pathY + $halfSize)\n                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size)\n                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize)\n                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY)\n                    ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize)\n                    ->close()\n                ;\n            }\n        }\n\n        return $path;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Module\\EdgeIterator;\n\nfinal class Edge\n{\n    /**\n     * @var bool\n     */\n    private $positive;\n\n    /**\n     * @var array<int[]>\n     */\n    private $points = [];\n\n    /**\n     * @var array<int[]>|null\n     */\n    private $simplifiedPoints;\n\n    /**\n     * @var int\n     */\n    private $minX = PHP_INT_MAX;\n\n    /**\n     * @var int\n     */\n    private $minY = PHP_INT_MAX;\n\n    /**\n     * @var int\n     */\n    private $maxX = -1;\n\n    /**\n     * @var int\n     */\n    private $maxY = -1;\n\n    public function __construct(bool $positive)\n    {\n        $this->positive = $positive;\n    }\n\n    public function addPoint(int $x, int $y) : void\n    {\n        $this->points[] = [$x, $y];\n        $this->minX = min($this->minX, $x);\n        $this->minY = min($this->minY, $y);\n        $this->maxX = max($this->maxX, $x);\n        $this->maxY = max($this->maxY, $y);\n    }\n\n    public function isPositive() : bool\n    {\n        return $this->positive;\n    }\n\n    /**\n     * @return array<int[]>\n     */\n    public function getPoints() : array\n    {\n        return $this->points;\n    }\n\n    public function getMaxX() : int\n    {\n        return $this->maxX;\n    }\n\n    public function getSimplifiedPoints() : array\n    {\n        if (null !== $this->simplifiedPoints) {\n            return $this->simplifiedPoints;\n        }\n\n        $points = [];\n        $length = count($this->points);\n\n        for ($i = 0; $i < $length; ++$i) {\n            $previousPoint = $this->points[(0 === $i ? $length : $i) - 1];\n            $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1];\n            $currentPoint = $this->points[$i];\n\n            if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0])\n                || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1])\n            ) {\n                continue;\n            }\n\n            $points[] = $currentPoint;\n        }\n\n        return $this->simplifiedPoints = $points;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Module\\EdgeIterator;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse IteratorAggregate;\nuse Traversable;\n\n/**\n * Edge iterator based on potrace.\n */\nfinal class EdgeIterator implements IteratorAggregate\n{\n    /**\n     * @var int[]\n     */\n    private $bytes = [];\n\n    /**\n     * @var int\n     */\n    private $size;\n\n    /**\n     * @var int\n     */\n    private $width;\n\n    /**\n     * @var int\n     */\n    private $height;\n\n    public function __construct(ByteMatrix $matrix)\n    {\n        $this->bytes = iterator_to_array($matrix->getBytes());\n        $this->size = count($this->bytes);\n        $this->width = $matrix->getWidth();\n        $this->height = $matrix->getHeight();\n    }\n\n    /**\n     * @return Traversable<Edge>\n     */\n    public function getIterator() : Traversable\n    {\n        $originalBytes = $this->bytes;\n        $point = $this->findNext(0, 0);\n\n        while (null !== $point) {\n            $edge = $this->findEdge($point[0], $point[1]);\n            $this->xorEdge($edge);\n\n            yield $edge;\n\n            $point = $this->findNext($point[0], $point[1]);\n        }\n\n        $this->bytes = $originalBytes;\n    }\n\n    /**\n     * @return int[]|null\n     */\n    private function findNext(int $x, int $y) : ?array\n    {\n        $i = $this->width * $y + $x;\n\n        while ($i < $this->size && 1 !== $this->bytes[$i]) {\n            ++$i;\n        }\n\n        if ($i < $this->size) {\n            return $this->pointOf($i);\n        }\n\n        return null;\n    }\n\n    private function findEdge(int $x, int $y) : Edge\n    {\n        $edge = new Edge($this->isSet($x, $y));\n        $startX = $x;\n        $startY = $y;\n        $dirX = 0;\n        $dirY = 1;\n\n        while (true) {\n            $edge->addPoint($x, $y);\n            $x += $dirX;\n            $y += $dirY;\n\n            if ($x === $startX && $y === $startY) {\n                break;\n            }\n\n            $left = $this->isSet($x + ($dirX + $dirY - 1 ) / 2, $y + ($dirY - $dirX - 1) / 2);\n            $right = $this->isSet($x + ($dirX - $dirY - 1) / 2, $y + ($dirY + $dirX - 1) / 2);\n\n            if ($right && ! $left) {\n                $tmp = $dirX;\n                $dirX = -$dirY;\n                $dirY = $tmp;\n            } elseif ($right) {\n                $tmp = $dirX;\n                $dirX = -$dirY;\n                $dirY = $tmp;\n            } elseif (! $left) {\n                $tmp = $dirX;\n                $dirX = $dirY;\n                $dirY = -$tmp;\n            }\n        }\n\n        return $edge;\n    }\n\n    private function xorEdge(Edge $path) : void\n    {\n        $points = $path->getPoints();\n        $y1 = $points[0][1];\n        $length = count($points);\n        $maxX = $path->getMaxX();\n\n        for ($i = 1; $i < $length; ++$i) {\n            $y = $points[$i][1];\n\n            if ($y === $y1) {\n                continue;\n            }\n\n            $x = $points[$i][0];\n            $minY = min($y1, $y);\n\n            for ($j = $x; $j < $maxX; ++$j) {\n                $this->flip($j, $minY);\n            }\n\n            $y1 = $y;\n        }\n    }\n\n    private function isSet(int $x, int $y) : bool\n    {\n        return (\n            $x >= 0\n            && $x < $this->width\n            && $y >= 0\n            && $y < $this->height\n        ) && 1 === $this->bytes[$this->width * $y + $x];\n    }\n\n    /**\n     * @return int[]\n     */\n    private function pointOf(int $i) : array\n    {\n        $y = intdiv($i, $this->width);\n        return [$i - $y * $this->width, $y];\n    }\n\n    private function flip(int $x, int $y) : void\n    {\n        $this->bytes[$this->width * $y + $x] = (\n            $this->isSet($x, $y) ? 0 : 1\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Module;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Interface describing how modules should be rendered.\n *\n * A module always receives a byte matrix (with values either being 1 or 0). It returns a path, where the origin\n * coordinate (0, 0) equals the top left corner of the first matrix value.\n */\ninterface ModuleInterface\n{\n    public function createPath(ByteMatrix $matrix) : Path;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Module;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse BaconQrCode\\Renderer\\Module\\EdgeIterator\\EdgeIterator;\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Rounds the corners of module groups.\n */\nfinal class RoundnessModule implements ModuleInterface\n{\n    public const STRONG = 1;\n    public const MEDIUM = .5;\n    public const SOFT = .25;\n\n    /**\n     * @var float\n     */\n    private $intensity;\n\n    public function __construct(float $intensity)\n    {\n        if ($intensity <= 0 || $intensity > 1) {\n            throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)');\n        }\n\n        $this->intensity = $intensity / 2;\n    }\n\n    public function createPath(ByteMatrix $matrix) : Path\n    {\n        $path = new Path();\n\n        foreach (new EdgeIterator($matrix) as $edge) {\n            $points = $edge->getSimplifiedPoints();\n            $length = count($points);\n\n            $currentPoint = $points[0];\n            $nextPoint = $points[1];\n            $horizontal = ($currentPoint[1] === $nextPoint[1]);\n\n            if ($horizontal) {\n                $right = $nextPoint[0] > $currentPoint[0];\n                $path = $path->move(\n                    $currentPoint[0] + ($right ? $this->intensity : -$this->intensity),\n                    $currentPoint[1]\n                );\n            } else {\n                $up = $nextPoint[0] < $currentPoint[0];\n                $path = $path->move(\n                    $currentPoint[0],\n                    $currentPoint[1] + ($up ? -$this->intensity : $this->intensity)\n                );\n            }\n\n            for ($i = 1; $i <= $length; ++$i) {\n                if ($i === $length) {\n                    $previousPoint = $points[$length - 1];\n                    $currentPoint = $points[0];\n                    $nextPoint = $points[1];\n                } else {\n                    $previousPoint = $points[(0 === $i ? $length : $i) - 1];\n                    $currentPoint = $points[$i];\n                    $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1];\n                }\n\n                $horizontal = ($previousPoint[1] === $currentPoint[1]);\n\n                if ($horizontal) {\n                    $right = $previousPoint[0] < $currentPoint[0];\n                    $up = $nextPoint[1] < $currentPoint[1];\n                    $sweep = ($up xor $right);\n\n                    if ($this->intensity < 0.5\n                        || ($right && $previousPoint[0] !== $currentPoint[0] - 1)\n                        || (! $right && $previousPoint[0] - 1 !== $currentPoint[0])\n                    ) {\n                        $path = $path->line(\n                            $currentPoint[0] + ($right ? -$this->intensity : $this->intensity),\n                            $currentPoint[1]\n                        );\n                    }\n\n                    $path = $path->ellipticArc(\n                        $this->intensity,\n                        $this->intensity,\n                        0,\n                        false,\n                        $sweep,\n                        $currentPoint[0],\n                        $currentPoint[1] + ($up ? -$this->intensity : $this->intensity)\n                    );\n                } else {\n                    $up = $previousPoint[1] > $currentPoint[1];\n                    $right = $nextPoint[0] > $currentPoint[0];\n                    $sweep = ! ($up xor $right);\n\n                    if ($this->intensity < 0.5\n                        || ($up && $previousPoint[1] !== $currentPoint[1] + 1)\n                        || (! $up && $previousPoint[0] + 1 !== $currentPoint[0])\n                    ) {\n                        $path = $path->line(\n                            $currentPoint[0],\n                            $currentPoint[1] + ($up ? $this->intensity : -$this->intensity)\n                        );\n                    }\n\n                    $path = $path->ellipticArc(\n                        $this->intensity,\n                        $this->intensity,\n                        0,\n                        false,\n                        $sweep,\n                        $currentPoint[0] + ($right ? $this->intensity : -$this->intensity),\n                        $currentPoint[1]\n                    );\n                }\n            }\n\n            $path = $path->close();\n        }\n\n        return $path;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Module;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Renderer\\Module\\EdgeIterator\\EdgeIterator;\nuse BaconQrCode\\Renderer\\Path\\Path;\n\n/**\n * Groups modules together to a single path.\n */\nfinal class SquareModule implements ModuleInterface\n{\n    /**\n     * @var self|null\n     */\n    private static $instance;\n\n    private function __construct()\n    {\n    }\n\n    public static function instance() : self\n    {\n        return self::$instance ?: self::$instance = new self();\n    }\n\n    public function createPath(ByteMatrix $matrix) : Path\n    {\n        $path = new Path();\n\n        foreach (new EdgeIterator($matrix) as $edge) {\n            $points = $edge->getSimplifiedPoints();\n            $length = count($points);\n            $path = $path->move($points[0][0], $points[0][1]);\n\n            for ($i = 1; $i < $length; ++$i) {\n                $path = $path->line($points[$i][0], $points[$i][1]);\n            }\n\n            $path = $path->close();\n        }\n\n        return $path;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/Close.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\nfinal class Close implements OperationInterface\n{\n    /**\n     * @var self|null\n     */\n    private static $instance;\n\n    private function __construct()\n    {\n    }\n\n    public static function instance() : self\n    {\n        return self::$instance ?: self::$instance = new self();\n    }\n\n    /**\n     * @return self\n     */\n    public function translate(float $x, float $y) : OperationInterface\n    {\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/Curve.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\nfinal class Curve implements OperationInterface\n{\n    /**\n     * @var float\n     */\n    private $x1;\n\n    /**\n     * @var float\n     */\n    private $y1;\n\n    /**\n     * @var float\n     */\n    private $x2;\n\n    /**\n     * @var float\n     */\n    private $y2;\n\n    /**\n     * @var float\n     */\n    private $x3;\n\n    /**\n     * @var float\n     */\n    private $y3;\n\n    public function __construct(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3)\n    {\n        $this->x1 = $x1;\n        $this->y1 = $y1;\n        $this->x2 = $x2;\n        $this->y2 = $y2;\n        $this->x3 = $x3;\n        $this->y3 = $y3;\n    }\n\n    public function getX1() : float\n    {\n        return $this->x1;\n    }\n\n    public function getY1() : float\n    {\n        return $this->y1;\n    }\n\n    public function getX2() : float\n    {\n        return $this->x2;\n    }\n\n    public function getY2() : float\n    {\n        return $this->y2;\n    }\n\n    public function getX3() : float\n    {\n        return $this->x3;\n    }\n\n    public function getY3() : float\n    {\n        return $this->y3;\n    }\n\n    /**\n     * @return self\n     */\n    public function translate(float $x, float $y) : OperationInterface\n    {\n        return new self(\n            $this->x1 + $x,\n            $this->y1 + $y,\n            $this->x2 + $x,\n            $this->y2 + $y,\n            $this->x3 + $x,\n            $this->y3 + $y\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\nfinal class EllipticArc implements OperationInterface\n{\n    private const ZERO_TOLERANCE = 1e-05;\n\n    /**\n     * @var float\n     */\n    private $xRadius;\n\n    /**\n     * @var float\n     */\n    private $yRadius;\n\n    /**\n     * @var float\n     */\n    private $xAxisAngle;\n\n    /**\n     * @var bool\n     */\n    private $largeArc;\n\n    /**\n     * @var bool\n     */\n    private $sweep;\n\n    /**\n     * @var float\n     */\n    private $x;\n\n    /**\n     * @var float\n     */\n    private $y;\n\n    public function __construct(\n        float $xRadius,\n        float $yRadius,\n        float $xAxisAngle,\n        bool $largeArc,\n        bool $sweep,\n        float $x,\n        float $y\n    ) {\n        $this->xRadius = abs($xRadius);\n        $this->yRadius = abs($yRadius);\n        $this->xAxisAngle = $xAxisAngle % 360;\n        $this->largeArc = $largeArc;\n        $this->sweep = $sweep;\n        $this->x = $x;\n        $this->y = $y;\n    }\n\n    public function getXRadius() : float\n    {\n        return $this->xRadius;\n    }\n\n    public function getYRadius() : float\n    {\n        return $this->yRadius;\n    }\n\n    public function getXAxisAngle() : float\n    {\n        return $this->xAxisAngle;\n    }\n\n    public function isLargeArc() : bool\n    {\n        return $this->largeArc;\n    }\n\n    public function isSweep() : bool\n    {\n        return $this->sweep;\n    }\n\n    public function getX() : float\n    {\n        return $this->x;\n    }\n\n    public function getY() : float\n    {\n        return $this->y;\n    }\n\n    /**\n     * @return self\n     */\n    public function translate(float $x, float $y) : OperationInterface\n    {\n        return new self(\n            $this->xRadius,\n            $this->yRadius,\n            $this->xAxisAngle,\n            $this->largeArc,\n            $this->sweep,\n            $this->x + $x,\n            $this->y + $y\n        );\n    }\n\n    /**\n     * Converts the elliptic arc to multiple curves.\n     *\n     * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves\n     * resembling the same result.\n     *\n     * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/\n     * @return array<Curve|Line>\n     */\n    public function toCurves(float $fromX, float $fromY) : array\n    {\n        if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) {\n            return [];\n        }\n\n        if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) {\n            return [new Line($this->x, $this->y)];\n        }\n\n        return $this->createCurves($fromX, $fromY);\n    }\n\n    /**\n     * @return Curve[]\n     */\n    private function createCurves(float $fromX, float $fromY) : array\n    {\n        $xAngle = deg2rad($this->xAxisAngle);\n        list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) =\n            $this->calculateCenterPointParameters($fromX, $fromY, $xAngle);\n\n        $s = $startAngle;\n        $e = $s + $deltaAngle;\n        $sign = ($e < $s) ? -1 : 1;\n        $remain = abs($e - $s);\n        $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s);\n        $curves = [];\n\n        while ($remain > self::ZERO_TOLERANCE) {\n            $step = min($remain, pi() / 2);\n            $signStep = $step * $sign;\n            $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep);\n\n            $alphaT = tan($signStep / 2);\n            $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3;\n            $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s);\n            $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep);\n\n            $curves[] = new Curve(\n                $p1[0] + $alpha * $d1[0],\n                $p1[1] + $alpha * $d1[1],\n                $p2[0] - $alpha * $d2[0],\n                $p2[1] - $alpha * $d2[1],\n                $p2[0],\n                $p2[1]\n            );\n\n            $s += $signStep;\n            $remain -= $step;\n            $p1 = $p2;\n        }\n\n        return $curves;\n    }\n\n    /**\n     * @return float[]\n     */\n    private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle)\n    {\n        $rX = $this->xRadius;\n        $rY = $this->yRadius;\n\n        // F.6.5.1\n        $dx2 = ($fromX - $this->x) / 2;\n        $dy2 = ($fromY - $this->y) / 2;\n        $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2;\n        $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2;\n\n        // F.6.5.2\n        $rxs = $rX ** 2;\n        $rys = $rY ** 2;\n        $x1ps = $x1p ** 2;\n        $y1ps = $y1p ** 2;\n        $cr = $x1ps / $rxs + $y1ps / $rys;\n\n        if ($cr > 1) {\n            $s = sqrt($cr);\n            $rX *= $s;\n            $rY *= $s;\n            $rxs = $rX ** 2;\n            $rys = $rY ** 2;\n        }\n\n        $dq = ($rxs * $y1ps + $rys * $x1ps);\n        $pq = ($rxs * $rys - $dq) / $dq;\n        $q = sqrt(max(0, $pq));\n\n        if ($this->largeArc === $this->sweep) {\n            $q = -$q;\n        }\n\n        $cxp = $q * $rX * $y1p / $rY;\n        $cyp = -$q * $rY * $x1p / $rX;\n\n        // F.6.5.3\n        $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2;\n        $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2;\n\n        // F.6.5.5\n        $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY);\n\n        // F.6.5.6\n        $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY);\n        $delta = fmod($delta, pi() * 2);\n\n        if (! $this->sweep) {\n            $delta -= 2 * pi();\n        }\n\n        return [$cx, $cy, $rX, $rY, $theta, $delta];\n    }\n\n    private static function angle(float $ux, float $uy, float $vx, float $vy) : float\n    {\n        // F.6.5.4\n        $dot = $ux * $vx + $uy * $vy;\n        $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2);\n        $angle = acos(min(1, max(-1, $dot / $length)));\n\n        if (($ux * $vy - $uy * $vx) < 0) {\n            return -$angle;\n        }\n\n        return $angle;\n    }\n\n    /**\n     * @return float[]\n     */\n    private static function point(\n        float $centerX,\n        float $centerY,\n        float $radiusX,\n        float $radiusY,\n        float $xAngle,\n        float $angle\n    ) : array {\n        return [\n            $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle),\n            $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle),\n        ];\n    }\n\n    /**\n     * @return float[]\n     */\n    private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array\n    {\n        return [\n            -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle),\n            -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle),\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/Line.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\nfinal class Line implements OperationInterface\n{\n    /**\n     * @var float\n     */\n    private $x;\n\n    /**\n     * @var float\n     */\n    private $y;\n\n    public function __construct(float $x, float $y)\n    {\n        $this->x = $x;\n        $this->y = $y;\n    }\n\n    public function getX() : float\n    {\n        return $this->x;\n    }\n\n    public function getY() : float\n    {\n        return $this->y;\n    }\n\n    /**\n     * @return self\n     */\n    public function translate(float $x, float $y) : OperationInterface\n    {\n        return new self($this->x + $x, $this->y + $y);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\nfinal class Move implements OperationInterface\n{\n    /**\n     * @var float\n     */\n    private $x;\n\n    /**\n     * @var float\n     */\n    private $y;\n\n    public function __construct(float $x, float $y)\n    {\n        $this->x = $x;\n        $this->y = $y;\n    }\n\n    public function getX() : float\n    {\n        return $this->x;\n    }\n\n    public function getY() : float\n    {\n        return $this->y;\n    }\n\n    /**\n     * @return self\n     */\n    public function translate(float $x, float $y) : OperationInterface\n    {\n        return new self($this->x + $x, $this->y + $y);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\ninterface OperationInterface\n{\n    /**\n     * Translates the operation's coordinates.\n     */\n    public function translate(float $x, float $y) : self;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/Path/Path.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\Path;\n\nuse IteratorAggregate;\nuse Traversable;\n\n/**\n * Internal Representation of a vector path.\n */\nfinal class Path implements IteratorAggregate\n{\n    /**\n     * @var OperationInterface[]\n     */\n    private $operations = [];\n\n    /**\n     * Moves the drawing operation to a certain position.\n     */\n    public function move(float $x, float $y) : self\n    {\n        $path = clone $this;\n        $path->operations[] = new Move($x, $y);\n        return $path;\n    }\n\n    /**\n     * Draws a line from the current position to another position.\n     */\n    public function line(float $x, float $y) : self\n    {\n        $path = clone $this;\n        $path->operations[] = new Line($x, $y);\n        return $path;\n    }\n\n    /**\n     * Draws an elliptic arc from the current position to another position.\n     */\n    public function ellipticArc(\n        float $xRadius,\n        float $yRadius,\n        float $xAxisRotation,\n        bool $largeArc,\n        bool $sweep,\n        float $x,\n        float $y\n    ) : self {\n        $path = clone $this;\n        $path->operations[] = new EllipticArc($xRadius, $yRadius, $xAxisRotation, $largeArc, $sweep, $x, $y);\n        return $path;\n    }\n\n    /**\n     * Draws a curve from the current position to another position.\n     */\n    public function curve(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3) : self\n    {\n        $path = clone $this;\n        $path->operations[] = new Curve($x1, $y1, $x2, $y2, $x3, $y3);\n        return $path;\n    }\n\n    /**\n     * Closes a sub-path.\n     */\n    public function close() : self\n    {\n        $path = clone $this;\n        $path->operations[] = Close::instance();\n        return $path;\n    }\n\n    /**\n     * Appends another path to this one.\n     */\n    public function append(self $other) : self\n    {\n        $path = clone $this;\n        $path->operations = array_merge($this->operations, $other->operations);\n        return $path;\n    }\n\n    public function translate(float $x, float $y) : self\n    {\n        $path = new self();\n\n        foreach ($this->operations as $operation) {\n            $path->operations[] = $operation->translate($x, $y);\n        }\n\n        return $path;\n    }\n\n    /**\n     * @return OperationInterface[]|Traversable\n     */\n    public function getIterator() : Traversable\n    {\n        foreach ($this->operations as $operation) {\n            yield $operation;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer;\n\nuse BaconQrCode\\Encoder\\QrCode;\nuse BaconQrCode\\Exception\\InvalidArgumentException;\n\nfinal class PlainTextRenderer implements RendererInterface\n{\n    /**\n     * UTF-8 full block (U+2588)\n     */\n    private const FULL_BLOCK = \"\\xe2\\x96\\x88\";\n\n    /**\n     * UTF-8 upper half block (U+2580)\n     */\n    private const UPPER_HALF_BLOCK = \"\\xe2\\x96\\x80\";\n\n    /**\n     * UTF-8 lower half block (U+2584)\n     */\n    private const LOWER_HALF_BLOCK = \"\\xe2\\x96\\x84\";\n\n    /**\n     * UTF-8 no-break space (U+00A0)\n     */\n    private const EMPTY_BLOCK = \"\\xc2\\xa0\";\n\n    /**\n     * @var int\n     */\n    private $margin;\n\n    public function __construct(int $margin = 2)\n    {\n        $this->margin = $margin;\n    }\n\n    /**\n     * @throws InvalidArgumentException if matrix width doesn't match height\n     */\n    public function render(QrCode $qrCode) : string\n    {\n        $matrix = $qrCode->getMatrix();\n        $matrixSize = $matrix->getWidth();\n\n        if ($matrixSize !== $matrix->getHeight()) {\n            throw new InvalidArgumentException('Matrix must have the same width and height');\n        }\n\n        $rows = $matrix->getArray()->toArray();\n\n        if (0 !== $matrixSize % 2) {\n            $rows[] = array_fill(0, $matrixSize, 0);\n        }\n\n        $horizontalMargin = str_repeat(self::EMPTY_BLOCK, $this->margin);\n        $result = str_repeat(\"\\n\", (int) ceil($this->margin / 2));\n\n        for ($i = 0; $i < $matrixSize; $i += 2) {\n            $result .= $horizontalMargin;\n\n            $upperRow = $rows[$i];\n            $lowerRow = $rows[$i + 1];\n\n            for ($j = 0; $j < $matrixSize; ++$j) {\n                $upperBit = $upperRow[$j];\n                $lowerBit = $lowerRow[$j];\n\n                if ($upperBit) {\n                    $result .= $lowerBit ? self::FULL_BLOCK : self::UPPER_HALF_BLOCK;\n                } else {\n                    $result .= $lowerBit ? self::LOWER_HALF_BLOCK : self::EMPTY_BLOCK;\n                }\n            }\n\n            $result .= $horizontalMargin . \"\\n\";\n        }\n\n        $result .= str_repeat(\"\\n\", (int) ceil($this->margin / 2));\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/RendererInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer;\n\nuse BaconQrCode\\Encoder\\QrCode;\n\ninterface RendererInterface\n{\n    public function render(QrCode $qrCode) : string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/EyeFill.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\RendererStyle;\n\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\n\nfinal class EyeFill\n{\n    /**\n     * @var ColorInterface|null\n     */\n    private $externalColor;\n\n    /**\n     * @var ColorInterface|null\n     */\n    private $internalColor;\n\n    /**\n     * @var self|null\n     */\n    private static $inherit;\n\n    public function __construct(?ColorInterface $externalColor, ?ColorInterface $internalColor)\n    {\n        $this->externalColor = $externalColor;\n        $this->internalColor = $internalColor;\n    }\n\n    public static function uniform(ColorInterface $color) : self\n    {\n        return new self($color, $color);\n    }\n\n    public static function inherit() : self\n    {\n        return self::$inherit ?: self::$inherit = new self(null, null);\n    }\n\n    public function inheritsBothColors() : bool\n    {\n        return null === $this->externalColor && null === $this->internalColor;\n    }\n\n    public function inheritsExternalColor() : bool\n    {\n        return null === $this->externalColor;\n    }\n\n    public function inheritsInternalColor() : bool\n    {\n        return null === $this->internalColor;\n    }\n\n    public function getExternalColor() : ColorInterface\n    {\n        if (null === $this->externalColor) {\n            throw new RuntimeException('External eye color inherits foreground color');\n        }\n\n        return $this->externalColor;\n    }\n\n    public function getInternalColor() : ColorInterface\n    {\n        if (null === $this->internalColor) {\n            throw new RuntimeException('Internal eye color inherits foreground color');\n        }\n\n        return $this->internalColor;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\RendererStyle;\n\nuse BaconQrCode\\Exception\\RuntimeException;\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\nuse BaconQrCode\\Renderer\\Color\\Gray;\n\nfinal class Fill\n{\n    /**\n     * @var ColorInterface\n     */\n    private $backgroundColor;\n\n    /**\n     * @var ColorInterface|null\n     */\n    private $foregroundColor;\n\n    /**\n     * @var Gradient|null\n     */\n    private $foregroundGradient;\n\n    /**\n     * @var EyeFill\n     */\n    private $topLeftEyeFill;\n\n    /**\n     * @var EyeFill\n     */\n    private $topRightEyeFill;\n\n    /**\n     * @var EyeFill\n     */\n    private $bottomLeftEyeFill;\n\n    /**\n     * @var self|null\n     */\n    private static $default;\n\n    private function __construct(\n        ColorInterface $backgroundColor,\n        ?ColorInterface $foregroundColor,\n        ?Gradient $foregroundGradient,\n        EyeFill $topLeftEyeFill,\n        EyeFill $topRightEyeFill,\n        EyeFill $bottomLeftEyeFill\n    ) {\n        $this->backgroundColor = $backgroundColor;\n        $this->foregroundColor = $foregroundColor;\n        $this->foregroundGradient = $foregroundGradient;\n        $this->topLeftEyeFill = $topLeftEyeFill;\n        $this->topRightEyeFill = $topRightEyeFill;\n        $this->bottomLeftEyeFill = $bottomLeftEyeFill;\n    }\n\n    public static function default() : self\n    {\n        return self::$default ?: self::$default = self::uniformColor(new Gray(100), new Gray(0));\n    }\n\n    public static function withForegroundColor(\n        ColorInterface $backgroundColor,\n        ColorInterface $foregroundColor,\n        EyeFill $topLeftEyeFill,\n        EyeFill $topRightEyeFill,\n        EyeFill $bottomLeftEyeFill\n    ) : self {\n        return new self(\n            $backgroundColor,\n            $foregroundColor,\n            null,\n            $topLeftEyeFill,\n            $topRightEyeFill,\n            $bottomLeftEyeFill\n        );\n    }\n\n    public static function withForegroundGradient(\n        ColorInterface $backgroundColor,\n        Gradient $foregroundGradient,\n        EyeFill $topLeftEyeFill,\n        EyeFill $topRightEyeFill,\n        EyeFill $bottomLeftEyeFill\n    ) : self {\n        return new self(\n            $backgroundColor,\n            null,\n            $foregroundGradient,\n            $topLeftEyeFill,\n            $topRightEyeFill,\n            $bottomLeftEyeFill\n        );\n    }\n\n    public static function uniformColor(ColorInterface $backgroundColor, ColorInterface $foregroundColor) : self\n    {\n        return new self(\n            $backgroundColor,\n            $foregroundColor,\n            null,\n            EyeFill::inherit(),\n            EyeFill::inherit(),\n            EyeFill::inherit()\n        );\n    }\n\n    public static function uniformGradient(ColorInterface $backgroundColor, Gradient $foregroundGradient) : self\n    {\n        return new self(\n            $backgroundColor,\n            null,\n            $foregroundGradient,\n            EyeFill::inherit(),\n            EyeFill::inherit(),\n            EyeFill::inherit()\n        );\n    }\n\n    public function hasGradientFill() : bool\n    {\n        return null !== $this->foregroundGradient;\n    }\n\n    public function getBackgroundColor() : ColorInterface\n    {\n        return $this->backgroundColor;\n    }\n\n    public function getForegroundColor() : ColorInterface\n    {\n        if (null === $this->foregroundColor) {\n            throw new RuntimeException('Fill uses a gradient, thus no foreground color is available');\n        }\n\n        return $this->foregroundColor;\n    }\n\n    public function getForegroundGradient() : Gradient\n    {\n        if (null === $this->foregroundGradient) {\n            throw new RuntimeException('Fill uses a single color, thus no foreground gradient is available');\n        }\n\n        return $this->foregroundGradient;\n    }\n\n    public function getTopLeftEyeFill() : EyeFill\n    {\n        return $this->topLeftEyeFill;\n    }\n\n    public function getTopRightEyeFill() : EyeFill\n    {\n        return $this->topRightEyeFill;\n    }\n\n    public function getBottomLeftEyeFill() : EyeFill\n    {\n        return $this->bottomLeftEyeFill;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\RendererStyle;\n\nuse BaconQrCode\\Renderer\\Color\\ColorInterface;\n\nfinal class Gradient\n{\n    /**\n     * @var ColorInterface\n     */\n    private $startColor;\n\n    /**\n     * @var ColorInterface\n     */\n    private $endColor;\n\n    /**\n     * @var GradientType\n     */\n    private $type;\n\n    public function __construct(ColorInterface $startColor, ColorInterface $endColor, GradientType $type)\n    {\n        $this->startColor = $startColor;\n        $this->endColor = $endColor;\n        $this->type = $type;\n    }\n\n    public function getStartColor() : ColorInterface\n    {\n        return $this->startColor;\n    }\n\n    public function getEndColor() : ColorInterface\n    {\n        return $this->endColor;\n    }\n\n    public function getType() : GradientType\n    {\n        return $this->type;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\RendererStyle;\n\nuse DASPRiD\\Enum\\AbstractEnum;\n\n/**\n * @method static self VERTICAL()\n * @method static self HORIZONTAL()\n * @method static self DIAGONAL()\n * @method static self INVERSE_DIAGONAL()\n * @method static self RADIAL()\n */\nfinal class GradientType extends AbstractEnum\n{\n    protected const VERTICAL = null;\n    protected const HORIZONTAL = null;\n    protected const DIAGONAL = null;\n    protected const INVERSE_DIAGONAL = null;\n    protected const RADIAL = null;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/RendererStyle.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode\\Renderer\\RendererStyle;\n\nuse BaconQrCode\\Renderer\\Eye\\EyeInterface;\nuse BaconQrCode\\Renderer\\Eye\\ModuleEye;\nuse BaconQrCode\\Renderer\\Module\\ModuleInterface;\nuse BaconQrCode\\Renderer\\Module\\SquareModule;\n\nfinal class RendererStyle\n{\n    /**\n     * @var int\n     */\n    private $size;\n\n    /**\n     * @var int\n     */\n    private $margin;\n\n    /**\n     * @var ModuleInterface\n     */\n    private $module;\n\n    /**\n     * @var EyeInterface|null\n     */\n    private $eye;\n\n    /**\n     * @var Fill\n     */\n    private $fill;\n\n    public function __construct(\n        int $size,\n        int $margin = 4,\n        ?ModuleInterface $module = null,\n        ?EyeInterface $eye = null,\n        ?Fill $fill = null\n    ) {\n        $this->margin = $margin;\n        $this->size = $size;\n        $this->module = $module ?: SquareModule::instance();\n        $this->eye = $eye ?: new ModuleEye($this->module);\n        $this->fill = $fill ?: Fill::default();\n    }\n\n    public function withSize(int $size) : self\n    {\n        $style = clone $this;\n        $style->size = $size;\n        return $style;\n    }\n\n    public function withMargin(int $margin) : self\n    {\n        $style = clone $this;\n        $style->margin = $margin;\n        return $style;\n    }\n\n    public function getSize() : int\n    {\n        return $this->size;\n    }\n\n    public function getMargin() : int\n    {\n        return $this->margin;\n    }\n\n    public function getModule() : ModuleInterface\n    {\n        return $this->module;\n    }\n\n    public function getEye() : EyeInterface\n    {\n        return $this->eye;\n    }\n\n    public function getFill() : Fill\n    {\n        return $this->fill;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/src/Writer.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCode;\n\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Version;\nuse BaconQrCode\\Encoder\\Encoder;\nuse BaconQrCode\\Exception\\InvalidArgumentException;\nuse BaconQrCode\\Renderer\\RendererInterface;\n\n/**\n * QR code writer.\n */\nfinal class Writer\n{\n    /**\n     * Renderer instance.\n     *\n     * @var RendererInterface\n     */\n    private $renderer;\n\n    /**\n     * Creates a new writer with a specific renderer.\n     */\n    public function __construct(RendererInterface $renderer)\n    {\n        $this->renderer = $renderer;\n    }\n\n    /**\n     * Writes QR code and returns it as string.\n     *\n     * Content is a string which *should* be encoded in UTF-8, in case there are\n     * non ASCII-characters present.\n     *\n     * @throws InvalidArgumentException if the content is empty\n     */\n    public function writeString(\n        string $content,\n        string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING,\n        ?ErrorCorrectionLevel $ecLevel = null,\n        ?Version $forcedVersion = null\n    ) : string {\n        if (strlen($content) === 0) {\n            throw new InvalidArgumentException('Found empty contents');\n        }\n\n        if (null === $ecLevel) {\n            $ecLevel = ErrorCorrectionLevel::L();\n        }\n\n        return $this->renderer->render(Encoder::encode($content, $ecLevel, $encoding, $forcedVersion));\n    }\n\n    /**\n     * Writes QR code to a file.\n     *\n     * @see Writer::writeString()\n     */\n    public function writeFile(\n        string $content,\n        string $filename,\n        string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING,\n        ?ErrorCorrectionLevel $ecLevel = null,\n        ?Version $forcedVersion = null\n    ) : void {\n        file_put_contents($filename, $this->writeString($content, $encoding, $ecLevel, $forcedVersion));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/BitArrayTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\BitArray;\nuse PHPUnit\\Framework\\TestCase;\nuse PHPUnit\\Runner\\Version as PHPUnitVersion;\n\nfinal class BitArrayTest extends TestCase\n{\n    private function getPhpUnitMajorVersion(): int\n    {\n        return (int) explode('.', PHPUnitVersion::id())[0];\n    }\n\n    public function testGetSet() : void\n    {\n        $array = new BitArray(33);\n\n        for ($i = 0; $i < 33; ++$i) {\n            $this->assertFalse($array->get($i));\n            $array->set($i);\n            $this->assertTrue($array->get($i));\n        }\n    }\n\n    public function testGetNextSet1() : void\n    {\n        $array = new BitArray(32);\n\n        for ($i = 0; $i < $array->getSize(); ++$i) {\n            if ($this->getPhpUnitMajorVersion() === 7) {\n                $this->assertEquals($i, 32, '', $array->getNextSet($i));\n            } else {\n                $this->assertEqualsWithDelta($i, 32, $array->getNextSet($i));\n            }\n        }\n\n        $array = new BitArray(33);\n\n        for ($i = 0; $i < $array->getSize(); ++$i) {\n            if ($this->getPhpUnitMajorVersion() === 7) {\n                $this->assertEquals($i, 33, '', $array->getNextSet($i));\n            } else {\n                $this->assertEqualsWithDelta($i, 33, $array->getNextSet($i));\n            }\n        }\n    }\n\n    public function testGetNextSet2() : void\n    {\n        $array = new BitArray(33);\n\n        for ($i = 0; $i < $array->getSize(); ++$i) {\n            if ($this->getPhpUnitMajorVersion() === 7) {\n                $this->assertEquals($i, $i <= 31 ? 31 : 33, '', $array->getNextSet($i));\n            } else {\n                $this->assertEqualsWithDelta($i, $i <= 31 ? 31 : 33, $array->getNextSet($i));\n            }\n        }\n\n        $array = new BitArray(33);\n\n        for ($i = 0; $i < $array->getSize(); ++$i) {\n            if ($this->getPhpUnitMajorVersion() === 7) {\n                $this->assertEquals($i, 32, '', $array->getNextSet($i));\n            } else {\n                $this->assertEqualsWithDelta($i, 32, $array->getNextSet($i));\n            }\n        }\n    }\n\n    public function testGetNextSet3() : void\n    {\n        $array = new BitArray(63);\n        $array->set(31);\n        $array->set(32);\n\n        for ($i = 0; $i < $array->getSize(); ++$i) {\n            if ($i <= 31) {\n                $expected = 31;\n            } elseif ($i <= 32) {\n                $expected = 32;\n            } else {\n                $expected = 63;\n            }\n\n            if ($this->getPhpUnitMajorVersion() === 7) {\n                $this->assertEquals($i, $expected, '', $array->getNextSet($i));\n            } else {\n                $this->assertEqualsWithDelta($i, $expected, $array->getNextSet($i));\n            }\n        }\n    }\n\n    public function testGetNextSet4() : void\n    {\n        $array = new BitArray(63);\n        $array->set(33);\n        $array->set(40);\n\n        for ($i = 0; $i < $array->getSize(); ++$i) {\n            if ($i <= 33) {\n                $expected = 33;\n            } elseif ($i <= 40) {\n                $expected = 40;\n            } else {\n                $expected = 63;\n            }\n\n            if ($this->getPhpUnitMajorVersion() === 7) {\n                $this->assertEquals($i, $expected, '', $array->getNextSet($i));\n            } else {\n                $this->assertEqualsWithDelta($i, $expected, $array->getNextSet($i));\n            }\n        }\n    }\n\n    public function testGetNextSet5() : void\n    {\n        mt_srand(0xdeadbeef, MT_RAND_PHP);\n\n        for ($i = 0; $i < 10; ++$i) {\n            $array = new BitArray(mt_rand(1, 100));\n            $numSet = mt_rand(0, 19);\n\n            for ($j = 0; $j < $numSet; ++$j) {\n                $array->set(mt_rand(0, $array->getSize() - 1));\n            }\n\n            $numQueries = mt_rand(0, 19);\n\n            for ($j = 0; $j < $numQueries; ++$j) {\n                $query = mt_rand(0, $array->getSize() - 1);\n                $expected = $query;\n\n                while ($expected < $array->getSize() && ! $array->get($expected)) {\n                    ++$expected;\n                }\n\n                $actual = $array->getNextSet($query);\n\n                if ($actual !== $expected) {\n                    $array->getNextSet($query);\n                }\n\n                $this->assertEquals($expected, $actual);\n            }\n        }\n    }\n\n    public function testSetBulk() : void\n    {\n        $array = new BitArray(64);\n        $array->setBulk(32, 0xFFFF0000);\n\n        for ($i = 0; $i < 48; ++$i) {\n            $this->assertFalse($array->get($i));\n        }\n\n        for ($i = 48; $i < 64; ++$i) {\n            $this->assertTrue($array->get($i));\n        }\n    }\n\n    public function testClear() : void\n    {\n        $array = new BitArray(32);\n\n        for ($i = 0; $i < 32; ++$i) {\n            $array->set($i);\n        }\n\n        $array->clear();\n\n        for ($i = 0; $i < 32; ++$i) {\n            $this->assertFalse($array->get($i));\n        }\n    }\n\n    public function testGetArray() : void\n    {\n        $array = new BitArray(64);\n        $array->set(0);\n        $array->set(63);\n\n        $ints = $array->getBitArray();\n\n        $this->assertSame(1, $ints[0]);\n        $this->assertSame(0x80000000, $ints[1]);\n    }\n\n    public function testIsRange() : void\n    {\n        $array = new BitArray(64);\n        $this->assertTrue($array->isRange(0, 64, false));\n        $this->assertFalse($array->isRange(0, 64, true));\n\n        $array->set(32);\n        $this->assertTrue($array->isRange(32, 33, true));\n\n        $array->set(31);\n        $this->assertTrue($array->isRange(31, 33, true));\n\n        $array->set(34);\n        $this->assertFalse($array->isRange(31, 35, true));\n\n        for ($i = 0; $i < 31; ++$i) {\n            $array->set($i);\n        }\n\n        $this->assertTrue($array->isRange(0, 33, true));\n\n        for ($i = 33; $i < 64; ++$i) {\n            $array->set($i);\n        }\n\n        $this->assertTrue($array->isRange(0, 64, true));\n        $this->assertFalse($array->isRange(0, 64, false));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/BitMatrixTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\BitArray;\nuse BaconQrCode\\Common\\BitMatrix;\nuse PHPUnit\\Framework\\TestCase;\n\nclass BitMatrixTest extends TestCase\n{\n    public function testGetSet() : void\n    {\n        $matrix = new BitMatrix(33);\n        $this->assertEquals(33, $matrix->getHeight());\n\n        for ($y = 0; $y < 33; ++$y) {\n            for ($x = 0; $x < 33; ++$x) {\n                if ($y * $x % 3 === 0) {\n                    $matrix->set($x, $y);\n                }\n            }\n        }\n\n        for ($y = 0; $y < 33; $y++) {\n            for ($x = 0; $x < 33; ++$x) {\n                $this->assertSame(0 === $x * $y % 3, $matrix->get($x, $y));\n            }\n        }\n    }\n\n    public function testSetRegion() : void\n    {\n        $matrix = new BitMatrix(5);\n        $matrix->setRegion(1, 1, 3, 3);\n\n        for ($y = 0; $y < 5; ++$y) {\n            for ($x = 0; $x < 5; ++$x) {\n                $this->assertSame($y >= 1 && $y <= 3 && $x >= 1 && $x <= 3, $matrix->get($x, $y));\n            }\n        }\n    }\n\n    public function testRectangularMatrix() : void\n    {\n        $matrix = new BitMatrix(75, 20);\n        $this->assertSame(75, $matrix->getWidth());\n        $this->assertSame(20, $matrix->getHeight());\n\n        $matrix->set(10, 0);\n        $matrix->set(11, 1);\n        $matrix->set(50, 2);\n        $matrix->set(51, 3);\n        $matrix->flip(74, 4);\n        $matrix->flip(0, 5);\n\n        $this->assertTrue($matrix->get(10, 0));\n        $this->assertTrue($matrix->get(11, 1));\n        $this->assertTrue($matrix->get(50, 2));\n        $this->assertTrue($matrix->get(51, 3));\n        $this->assertTrue($matrix->get(74, 4));\n        $this->assertTrue($matrix->get(0, 5));\n\n        $matrix->flip(50, 2);\n        $matrix->flip(51, 3);\n\n        $this->assertFalse($matrix->get(50, 2));\n        $this->assertFalse($matrix->get(51, 3));\n    }\n\n    public function testRectangularSetRegion() : void\n    {\n        $matrix = new BitMatrix(320, 240);\n        $this->assertSame(320, $matrix->getWidth());\n        $this->assertSame(240, $matrix->getHeight());\n\n        $matrix->setRegion(105, 22, 80, 12);\n\n        for ($y = 0; $y < 240; ++$y) {\n            for ($x = 0; $x < 320; ++$x) {\n                $this->assertEquals($y >= 22 && $y < 34 && $x >= 105 && $x < 185, $matrix->get($x, $y));\n            }\n        }\n    }\n\n    public function testGetRow() : void\n    {\n        $matrix = new BitMatrix(102, 5);\n\n        for ($x = 0; $x < 102; ++$x) {\n            if (0 === ($x & 3)) {\n                $matrix->set($x, 2);\n            }\n        }\n\n        $array1 = $matrix->getRow(2, null);\n        $this->assertSame(102, $array1->getSize());\n\n        $array2 = new BitArray(60);\n        $array2 = $matrix->getRow(2, $array2);\n        $this->assertSame(102, $array2->getSize());\n\n        $array3 = new BitArray(200);\n        $array3 = $matrix->getRow(2, $array3);\n        $this->assertSame(200, $array3->getSize());\n\n        for ($x = 0; $x < 102; ++$x) {\n            $on = (0 === ($x & 3));\n\n            $this->assertSame($on, $array1->get($x));\n            $this->assertSame($on, $array2->get($x));\n            $this->assertSame($on, $array3->get($x));\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/BitUtilsTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\BitUtils;\nuse PHPUnit\\Framework\\TestCase;\n\nclass BitUtilsTest extends TestCase\n{\n    public function testUnsignedRightShift() : void\n    {\n        $this->assertSame(1, BitUtils::unsignedRightShift(1, 0));\n        $this->assertSame(1, BitUtils::unsignedRightShift(10, 3));\n        $this->assertSame(536870910, BitUtils::unsignedRightShift(-10, 3));\n    }\n\n    public function testNumberOfTrailingZeros() : void\n    {\n        $this->assertSame(32, BitUtils::numberOfTrailingZeros(0));\n        $this->assertSame(1, BitUtils::numberOfTrailingZeros(10));\n        $this->assertSame(0, BitUtils::numberOfTrailingZeros(15));\n        $this->assertSame(2, BitUtils::numberOfTrailingZeros(20));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Exception\\OutOfBoundsException;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ErrorCorrectionLevelTest extends TestCase\n{\n    public function testBitsMatchConstants() : void\n    {\n        $this->assertSame(0x0, ErrorCorrectionLevel::M()->getBits());\n        $this->assertSame(0x1, ErrorCorrectionLevel::L()->getBits());\n        $this->assertSame(0x2, ErrorCorrectionLevel::H()->getBits());\n        $this->assertSame(0x3, ErrorCorrectionLevel::Q()->getBits());\n    }\n\n    public function testInvalidErrorCorrectionLevelThrowsException() : void\n    {\n        $this->expectException(OutOfBoundsException::class);\n        ErrorCorrectionLevel::forBits(4);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/FormatInformationTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\FormatInformation;\nuse PHPUnit\\Framework\\TestCase;\n\nclass FormatInformationTest extends TestCase\n{\n    private const MASKED_TEST_FORMAT_INFO = 0x2bed;\n    private const UNMAKSED_TEST_FORMAT_INFO = self::MASKED_TEST_FORMAT_INFO ^ 0x5412;\n\n    public function testBitsDiffering() : void\n    {\n        $this->assertSame(0, FormatInformation::numBitsDiffering(1, 1));\n        $this->assertSame(1, FormatInformation::numBitsDiffering(0, 2));\n        $this->assertSame(2, FormatInformation::numBitsDiffering(1, 2));\n        $this->assertEquals(32, FormatInformation::numBitsDiffering(-1, 0));\n    }\n\n    public function testDecode() : void\n    {\n        $expected = FormatInformation::decodeFormatInformation(\n            self::MASKED_TEST_FORMAT_INFO,\n            self::MASKED_TEST_FORMAT_INFO\n        );\n\n        $this->assertNotNull($expected);\n        $this->assertSame(7, $expected->getDataMask());\n        $this->assertSame(ErrorCorrectionLevel::Q(), $expected->getErrorCorrectionLevel());\n\n        $this->assertEquals(\n            $expected,\n            FormatInformation::decodeFormatInformation(\n                self::UNMAKSED_TEST_FORMAT_INFO,\n                self::MASKED_TEST_FORMAT_INFO\n            )\n        );\n    }\n\n    public function testDecodeWithBitDifference() : void\n    {\n        $expected = FormatInformation::decodeFormatInformation(\n            self::MASKED_TEST_FORMAT_INFO,\n            self::MASKED_TEST_FORMAT_INFO\n        );\n\n        $this->assertEquals(\n            $expected,\n            FormatInformation::decodeFormatInformation(\n                self::MASKED_TEST_FORMAT_INFO ^ 0x1,\n                self::MASKED_TEST_FORMAT_INFO ^ 0x1\n            )\n        );\n        $this->assertEquals(\n            $expected,\n            FormatInformation::decodeFormatInformation(\n                self::MASKED_TEST_FORMAT_INFO ^ 0x3,\n                self::MASKED_TEST_FORMAT_INFO ^ 0x3\n            )\n        );\n        $this->assertEquals(\n            $expected,\n            FormatInformation::decodeFormatInformation(\n                self::MASKED_TEST_FORMAT_INFO ^ 0x7,\n                self::MASKED_TEST_FORMAT_INFO ^ 0x7\n            )\n        );\n        $this->assertNull(\n            FormatInformation::decodeFormatInformation(\n                self::MASKED_TEST_FORMAT_INFO ^ 0xf,\n                self::MASKED_TEST_FORMAT_INFO ^ 0xf\n            )\n        );\n    }\n\n    public function testDecodeWithMisRead() : void\n    {\n        $expected = FormatInformation::decodeFormatInformation(\n            self::MASKED_TEST_FORMAT_INFO,\n            self::MASKED_TEST_FORMAT_INFO\n        );\n\n        $this->assertEquals(\n            $expected,\n            FormatInformation::decodeFormatInformation(\n                self::MASKED_TEST_FORMAT_INFO ^ 0x3,\n                self::MASKED_TEST_FORMAT_INFO ^ 0xf\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/ModeTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\Mode;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ModeTest extends TestCase\n{\n    public function testBitsMatchConstants() : void\n    {\n        $this->assertSame(0x0, Mode::TERMINATOR()->getBits());\n        $this->assertSame(0x1, Mode::NUMERIC()->getBits());\n        $this->assertSame(0x2, Mode::ALPHANUMERIC()->getBits());\n        $this->assertSame(0x4, Mode::BYTE()->getBits());\n        $this->assertSame(0x8, Mode::KANJI()->getBits());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\ReedSolomonCodec;\nuse PHPUnit\\Framework\\TestCase;\nuse SplFixedArray;\n\nclass ReedSolomonTest extends TestCase\n{\n    public function tabs() : array\n    {\n        return [\n            [2, 0x7, 1, 1, 1],\n            [3, 0xb, 1, 1, 2],\n            [4, 0x13, 1, 1, 4],\n            [5, 0x25, 1, 1, 6],\n            [6, 0x43, 1, 1, 8],\n            [7, 0x89, 1, 1, 10],\n            [8, 0x11d, 1, 1, 32],\n        ];\n    }\n\n    /**\n     * @dataProvider tabs\n     */\n    public function testCodec(int $symbolSize, int $generatorPoly, int $firstRoot, int $primitive, int $numRoots) : void\n    {\n        mt_srand(0xdeadbeef, MT_RAND_PHP);\n\n        $blockSize = (1 << $symbolSize) - 1;\n        $dataSize  = $blockSize - $numRoots;\n        $codec     = new ReedSolomonCodec($symbolSize, $generatorPoly, $firstRoot, $primitive, $numRoots, 0);\n\n        for ($errors = 0; $errors <= $numRoots / 2; ++$errors) {\n            // Load block with random data and encode\n            $block = SplFixedArray::fromArray(array_fill(0, $blockSize, 0), false);\n\n            for ($i = 0; $i < $dataSize; ++$i) {\n                $block[$i] = mt_rand(0, $blockSize);\n            }\n\n            // Make temporary copy\n            $tBlock = clone $block;\n            $parity = SplFixedArray::fromArray(array_fill(0, $numRoots, 0), false);\n            $errorLocations = SplFixedArray::fromArray(array_fill(0, $blockSize, 0), false);\n            $erasures = [];\n\n            // Create parity\n            $codec->encode($block, $parity);\n\n            // Copy parity into test blocks\n            for ($i = 0; $i < $numRoots; ++$i) {\n                $block[$i + $dataSize] = $parity[$i];\n                $tBlock[$i + $dataSize] = $parity[$i];\n            }\n\n            // Seed with errors\n            for ($i = 0; $i < $errors; ++$i) {\n                $errorValue = mt_rand(1, $blockSize);\n\n                do {\n                    $errorLocation = mt_rand(0, $blockSize);\n                } while (0 !== $errorLocations[$errorLocation]);\n\n                $errorLocations[$errorLocation] = 1;\n\n                if (mt_rand(0, 1)) {\n                    $erasures[] = $errorLocation;\n                }\n\n                $tBlock[$errorLocation] ^= $errorValue;\n            }\n\n            $erasures = SplFixedArray::fromArray($erasures, false);\n\n            // Decode the errored block\n            $foundErrors = $codec->decode($tBlock, $erasures);\n\n            if ($errors > 0 && null === $foundErrors) {\n                $this->assertSame($block, $tBlock, 'Decoder failed to correct errors');\n            }\n\n            $this->assertSame($errors, $foundErrors, 'Found errors do not equal expected errors');\n\n            for ($i = 0; $i < $foundErrors; ++$i) {\n                if (0 === $errorLocations[$erasures[$i]]) {\n                    $this->fail(sprintf('Decoder indicates error in location %d without error', $erasures[$i]));\n                }\n            }\n\n            $this->assertEquals($block, $tBlock, 'Decoder did not correct errors');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Common/VersionTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Common;\n\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Version;\nuse PHPUnit\\Framework\\TestCase;\n\nclass VersionTest extends TestCase\n{\n    public function versions() : array\n    {\n        $array = [];\n\n        for ($i = 1; $i <= 40; ++$i) {\n            $array[] = [$i, 4 * $i + 17];\n        }\n\n        return $array;\n    }\n\n    public function decodeInformation() : array\n    {\n        return [\n            [7, 0x07c94],\n            [12, 0x0c762],\n            [17, 0x1145d],\n            [22, 0x168c9],\n            [27, 0x1b08e],\n            [32, 0x209d5],\n        ];\n    }\n\n    /**\n     * @dataProvider versions\n     */\n    public function testVersionForNumber(int $versionNumber, int $dimension) : void\n    {\n        $version = Version::getVersionForNumber($versionNumber);\n\n        $this->assertNotNull($version);\n        $this->assertEquals($versionNumber, $version->getVersionNumber());\n        $this->assertNotNull($version->getAlignmentPatternCenters());\n\n        if ($versionNumber > 1) {\n            $this->assertTrue(count($version->getAlignmentPatternCenters()) > 0);\n        }\n\n        $this->assertEquals($dimension, $version->getDimensionForVersion());\n        $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::H()));\n        $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::L()));\n        $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::M()));\n        $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::Q()));\n        $this->assertNotNull($version->buildFunctionPattern());\n    }\n\n    /**\n     * @dataProvider versions\n     */\n    public function testGetProvisionalVersionForDimension(int $versionNumber, int $dimension) : void\n    {\n        $this->assertSame(\n            $versionNumber,\n            Version::getProvisionalVersionForDimension($dimension)->getVersionNumber()\n        );\n    }\n\n    /**\n     * @dataProvider decodeInformation\n     */\n    public function testDecodeVersionInformation(int $expectedVersion, int $mask) : void\n    {\n        $version = Version::decodeVersionInformation($mask);\n        $this->assertNotNull($version);\n        $this->assertSame($expectedVersion, $version->getVersionNumber());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Encoder/EncoderTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Encoder;\n\nuse BaconQrCode\\Common\\BitArray;\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Mode;\nuse BaconQrCode\\Common\\Version;\nuse BaconQrCode\\Encoder\\Encoder;\nuse BaconQrCode\\Exception\\WriterException;\nuse PHPUnit\\Framework\\TestCase;\nuse ReflectionClass;\nuse ReflectionMethod;\nuse SplFixedArray;\n\nfinal class EncoderTest extends TestCase\n{\n    /**\n     * @var ReflectionMethod[]\n     */\n    protected $methods = [];\n\n    public function setUp() : void\n    {\n        // Hack to be able to test protected methods\n        $reflection = new ReflectionClass(Encoder::class);\n\n        foreach ($reflection->getMethods(ReflectionMethod::IS_STATIC) as $method) {\n            $method->setAccessible(true);\n            $this->methods[$method->getName()] = $method;\n        }\n    }\n\n    public function testGetAlphanumericCode() : void\n    {\n        // The first ten code points are numbers.\n        for ($i = 0; $i < 10; ++$i) {\n            $this->assertSame($i, $this->methods['getAlphanumericCode']->invoke(null, ord('0') + $i));\n        }\n\n        // The next 26 code points are capital alphabet letters.\n        for ($i = 10; $i < 36; ++$i) {\n            // The first ten code points are numbers\n            $this->assertSame($i, $this->methods['getAlphanumericCode']->invoke(null, ord('A') + $i - 10));\n        }\n\n        // Others are symbol letters.\n        $this->assertSame(36, $this->methods['getAlphanumericCode']->invoke(null, ord(' ')));\n        $this->assertSame(37, $this->methods['getAlphanumericCode']->invoke(null, ord('$')));\n        $this->assertSame(38, $this->methods['getAlphanumericCode']->invoke(null, ord('%')));\n        $this->assertSame(39, $this->methods['getAlphanumericCode']->invoke(null, ord('*')));\n        $this->assertSame(40, $this->methods['getAlphanumericCode']->invoke(null, ord('+')));\n        $this->assertSame(41, $this->methods['getAlphanumericCode']->invoke(null, ord('-')));\n        $this->assertSame(42, $this->methods['getAlphanumericCode']->invoke(null, ord('.')));\n        $this->assertSame(43, $this->methods['getAlphanumericCode']->invoke(null, ord('/')));\n        $this->assertSame(44, $this->methods['getAlphanumericCode']->invoke(null, ord(':')));\n\n        // Should return -1 for other letters.\n        $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord('a')));\n        $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord('#')));\n        $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord(\"\\0\")));\n    }\n\n    public function testChooseMode() : void\n    {\n        // Numeric mode\n        $this->assertSame(Mode::NUMERIC(), $this->methods['chooseMode']->invoke(null, '0'));\n        $this->assertSame(Mode::NUMERIC(), $this->methods['chooseMode']->invoke(null, '0123456789'));\n\n        // Alphanumeric mode\n        $this->assertSame(Mode::ALPHANUMERIC(), $this->methods['chooseMode']->invoke(null, 'A'));\n        $this->assertSame(\n            Mode::ALPHANUMERIC(),\n            $this->methods['chooseMode']->invoke(null, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:')\n        );\n\n        // 8-bit byte mode\n        $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, 'a'));\n        $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, '#'));\n        $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, ''));\n\n        // AIUE in Hiragana in SHIFT-JIS\n        $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, \"\\x8\\xa\\x8\\xa\\x8\\xa\\x8\\xa6\"));\n\n        // Nihon in Kanji in SHIFT-JIS\n        $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, \"\\x9\\xf\\x9\\x7b\"));\n\n        // Sou-Utso-Byou in Kanji in SHIFT-JIS\n        $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, \"\\xe\\x4\\x9\\x5\\x9\\x61\"));\n    }\n\n    public function testEncode() : void\n    {\n        $qrCode = Encoder::encode('ABCDEF', ErrorCorrectionLevel::H());\n        $expected = \"<<\\n\"\n            . \" mode: ALPHANUMERIC\\n\"\n            . \" ecLevel: H\\n\"\n            . \" version: 1\\n\"\n            . \" maskPattern: 0\\n\"\n            . \" matrix:\\n\"\n            . \" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\\n\"\n            . \" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\\n\"\n            . \" 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\\n\"\n            . \" 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\\n\"\n            . \" 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\\n\"\n            . \" 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\\n\"\n            . \" 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\\n\"\n            . \" 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\\n\"\n            . \" 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\\n\"\n            . \" 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\\n\"\n            . \" 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\\n\"\n            . \" 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\\n\"\n            . \" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\\n\"\n            . \">>\\n\";\n\n        $this->assertSame($expected, (string) $qrCode);\n    }\n\n    public function testSimpleUtf8Eci() : void\n    {\n        $qrCode = Encoder::encode('hello', ErrorCorrectionLevel::H(), 'utf-8');\n        $expected = \"<<\\n\"\n            . \" mode: BYTE\\n\"\n            . \" ecLevel: H\\n\"\n            . \" version: 1\\n\"\n            . \" maskPattern: 3\\n\"\n            . \" matrix:\\n\"\n            . \" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1\\n\"\n            . \" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\\n\"\n            . \" 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0\\n\"\n            . \" 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0\\n\"\n            . \" 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0\\n\"\n            . \" 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1\\n\"\n            . \" 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 0\\n\"\n            . \" 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0\\n\"\n            . \" 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1\\n\"\n            . \" 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1\\n\"\n            . \" 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0\\n\"\n            . \" 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0\\n\"\n            . \" 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0\\n\"\n            . \" 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0\\n\"\n            . \" 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0\\n\"\n            . \">>\\n\";\n\n        $this->assertSame($expected, (string) $qrCode);\n    }\n\n    public function testAppendModeInfo() : void\n    {\n        $bits = new BitArray();\n        $this->methods['appendModeInfo']->invoke(null, Mode::NUMERIC(), $bits);\n        $this->assertSame(' ...X', (string) $bits);\n    }\n\n    public function testAppendLengthInfo() : void\n    {\n        // 1 letter (1/1), 10 bits.\n        $bits = new BitArray();\n        $this->methods['appendLengthInfo']->invoke(\n            null,\n            1,\n            Version::getVersionForNumber(1),\n            Mode::NUMERIC(),\n            $bits\n        );\n        $this->assertSame(' ........ .X', (string) $bits);\n\n        // 2 letters (2/1), 11 bits.\n        $bits = new BitArray();\n        $this->methods['appendLengthInfo']->invoke(\n            null,\n            2,\n            Version::getVersionForNumber(10),\n            Mode::ALPHANUMERIC(),\n            $bits\n        );\n        $this->assertSame(' ........ .X.', (string) $bits);\n\n        // 255 letters (255/1), 16 bits.\n        $bits = new BitArray();\n        $this->methods['appendLengthInfo']->invoke(\n            null,\n            255,\n            Version::getVersionForNumber(27),\n            Mode::BYTE(),\n            $bits\n        );\n        $this->assertSame(' ........ XXXXXXXX', (string) $bits);\n\n        // 512 letters (1024/2), 12 bits.\n        $bits = new BitArray();\n        $this->methods['appendLengthInfo']->invoke(\n            null,\n            512,\n            Version::getVersionForNumber(40),\n            Mode::KANJI(),\n            $bits\n        );\n        $this->assertSame(' ..X..... ....', (string) $bits);\n    }\n\n    public function testAppendBytes() : void\n    {\n        // Should use appendNumericBytes.\n        // 1 = 01 = 0001 in 4 bits.\n        $bits = new BitArray();\n        $this->methods['appendBytes']->invoke(\n            null,\n            '1',\n            Mode::NUMERIC(),\n            $bits,\n            Encoder::DEFAULT_BYTE_MODE_ECODING\n        );\n        $this->assertSame(' ...X', (string) $bits);\n\n        // Should use appendAlphaNumericBytes.\n        // A = 10 = 0xa = 001010 in 6 bits.\n        $bits = new BitArray();\n        $this->methods['appendBytes']->invoke(\n            null,\n            'A',\n            Mode::ALPHANUMERIC(),\n            $bits,\n            Encoder::DEFAULT_BYTE_MODE_ECODING\n        );\n        $this->assertSame(' ..X.X.', (string) $bits);\n\n        // Should use append8BitBytes.\n        // 0x61, 0x62, 0x63\n        $bits = new BitArray();\n        $this->methods['appendBytes']->invoke(\n            null,\n            'abc',\n            Mode::BYTE(),\n            $bits,\n            Encoder::DEFAULT_BYTE_MODE_ECODING\n        );\n        $this->assertSame(' .XX....X .XX...X. .XX...XX', (string) $bits);\n\n        // Should use appendKanjiBytes.\n        // 0x93, 0x5f\n        $bits = new BitArray();\n        $this->methods['appendBytes']->invoke(\n            null,\n            \"\\x93\\x5f\",\n            Mode::KANJI(),\n            $bits,\n            Encoder::DEFAULT_BYTE_MODE_ECODING\n        );\n        $this->assertSame(' .XX.XX.. XXXXX', (string) $bits);\n\n        // Lower letters such as 'a' cannot be encoded in alphanumeric mode.\n        $this->expectException(WriterException::class);\n        $this->methods['appendBytes']->invoke(\n            null,\n            'a',\n            Mode::ALPHANUMERIC(),\n            $bits,\n            Encoder::DEFAULT_BYTE_MODE_ECODING\n        );\n    }\n\n    public function testTerminateBits() : void\n    {\n        $bits = new BitArray();\n        $this->methods['terminateBits']->invoke(null, 0, $bits);\n        $this->assertSame('', (string) $bits);\n\n        $bits = new BitArray();\n        $this->methods['terminateBits']->invoke(null, 1, $bits);\n        $this->assertSame(' ........', (string) $bits);\n\n        $bits = new BitArray();\n        $bits->appendBits(0, 3);\n        $this->methods['terminateBits']->invoke(null, 1, $bits);\n        $this->assertSame(' ........', (string) $bits);\n\n        $bits = new BitArray();\n        $bits->appendBits(0, 5);\n        $this->methods['terminateBits']->invoke(null, 1, $bits);\n        $this->assertSame(' ........', (string) $bits);\n\n        $bits = new BitArray();\n        $bits->appendBits(0, 8);\n        $this->methods['terminateBits']->invoke(null, 1, $bits);\n        $this->assertSame(' ........', (string) $bits);\n\n        $bits = new BitArray();\n        $this->methods['terminateBits']->invoke(null, 2, $bits);\n        $this->assertSame(' ........ XXX.XX..', (string) $bits);\n\n        $bits = new BitArray();\n        $bits->appendBits(0, 1);\n        $this->methods['terminateBits']->invoke(null, 3, $bits);\n        $this->assertSame(' ........ XXX.XX.. ...X...X', (string) $bits);\n    }\n\n    public function testGetNumDataBytesAndNumEcBytesForBlockId() : void\n    {\n        // Version 1-H.\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 26, 9, 1, 0);\n        $this->assertSame(9, $numDataBytes);\n        $this->assertSame(17, $numEcBytes);\n\n        // Version 3-H.  2 blocks.\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 70, 26, 2, 0);\n        $this->assertSame(13, $numDataBytes);\n        $this->assertSame(22, $numEcBytes);\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 70, 26, 2, 1);\n        $this->assertSame(13, $numDataBytes);\n        $this->assertSame(22, $numEcBytes);\n\n        // Version 7-H. (4 + 1) blocks.\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 196, 66, 5, 0);\n        $this->assertSame(13, $numDataBytes);\n        $this->assertSame(26, $numEcBytes);\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 196, 66, 5, 4);\n        $this->assertSame(14, $numDataBytes);\n        $this->assertSame(26, $numEcBytes);\n\n        // Version 40-H. (20 + 61) blocks.\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 3706, 1276, 81, 0);\n        $this->assertSame(15, $numDataBytes);\n        $this->assertSame(30, $numEcBytes);\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 3706, 1276, 81, 20);\n        $this->assertSame(16, $numDataBytes);\n        $this->assertSame(30, $numEcBytes);\n        list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId']\n            ->invoke(null, 3706, 1276, 81, 80);\n        $this->assertSame(16, $numDataBytes);\n        $this->assertSame(30, $numEcBytes);\n    }\n\n    public function testInterleaveWithEcBytes() : void\n    {\n        $dataBytes = SplFixedArray::fromArray([32, 65, 205, 69, 41, 220, 46, 128, 236], false);\n        $in        = new BitArray();\n\n        foreach ($dataBytes as $dataByte) {\n            $in->appendBits($dataByte, 8);\n        }\n\n        $outBits  = $this->methods['interleaveWithEcBytes']->invoke(null, $in, 26, 9, 1);\n        $expected = SplFixedArray::fromArray([\n            // Data bytes.\n            32, 65, 205, 69, 41, 220, 46, 128, 236,\n            // Error correction bytes.\n            42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61,\n        ], false);\n\n        $out = $outBits->toBytes(0, count($expected));\n\n        $this->assertEquals($expected, $out);\n    }\n\n    public function testAppendNumericBytes() : void\n    {\n        // 1 = 01 = 0001 in 4 bits.\n        $bits = new BitArray();\n        $this->methods['appendNumericBytes']->invoke(null, '1', $bits);\n        $this->assertSame(' ...X', (string) $bits);\n\n        // 12 = 0xc = 0001100 in 7 bits.\n        $bits = new BitArray();\n        $this->methods['appendNumericBytes']->invoke(null, '12', $bits);\n        $this->assertSame(' ...XX..', (string) $bits);\n\n        // 123 = 0x7b = 0001111011 in 10 bits.\n        $bits = new BitArray();\n        $this->methods['appendNumericBytes']->invoke(null, '123', $bits);\n        $this->assertSame(' ...XXXX. XX', (string) $bits);\n\n        // 1234 = \"123\" + \"4\" = 0001111011 + 0100 in 14 bits.\n        $bits = new BitArray();\n        $this->methods['appendNumericBytes']->invoke(null, '1234', $bits);\n        $this->assertSame(' ...XXXX. XX.X..', (string) $bits);\n\n        // Empty\n        $bits = new BitArray();\n        $this->methods['appendNumericBytes']->invoke(null, '', $bits);\n        $this->assertSame('', (string) $bits);\n    }\n\n    public function testAppendAlphanumericBytes() : void\n    {\n        $bits = new BitArray();\n        $this->methods['appendAlphanumericBytes']->invoke(null, 'A', $bits);\n        $this->assertSame(' ..X.X.', (string) $bits);\n\n        $bits = new BitArray();\n        $this->methods['appendAlphanumericBytes']->invoke(null, 'AB', $bits);\n        $this->assertSame(' ..XXX..X X.X', (string) $bits);\n\n        $bits = new BitArray();\n        $this->methods['appendAlphanumericBytes']->invoke(null, 'ABC', $bits);\n        $this->assertSame(' ..XXX..X X.X..XX. .', (string) $bits);\n\n        // Empty\n        $bits = new BitArray();\n        $this->methods['appendAlphanumericBytes']->invoke(null, '', $bits);\n        $this->assertSame('', (string) $bits);\n\n        // Invalid data\n        $this->expectException(WriterException::class);\n        $bits = new BitArray();\n        $this->methods['appendAlphanumericBytes']->invoke(null, 'abc', $bits);\n    }\n\n    public function testAppend8BitBytes() : void\n    {\n        // 0x61, 0x62, 0x63\n        $bits = new BitArray();\n        $this->methods['append8BitBytes']->invoke(null, 'abc', $bits, Encoder::DEFAULT_BYTE_MODE_ECODING);\n        $this->assertSame(' .XX....X .XX...X. .XX...XX', (string) $bits);\n\n        // Empty\n        $bits = new BitArray();\n        $this->methods['append8BitBytes']->invoke(null, '', $bits, Encoder::DEFAULT_BYTE_MODE_ECODING);\n        $this->assertSame('', (string) $bits);\n    }\n\n    public function testAppendKanjiBytes() : void\n    {\n        // Numbers are from page 21 of JISX0510:2004\n        $bits = new BitArray();\n        $this->methods['appendKanjiBytes']->invoke(null, \"\\x93\\x5f\", $bits);\n        $this->assertSame(' .XX.XX.. XXXXX', (string) $bits);\n\n        $this->methods['appendKanjiBytes']->invoke(null, \"\\xe4\\xaa\", $bits);\n        $this->assertSame(' .XX.XX.. XXXXXXX. X.X.X.X. X.', (string) $bits);\n    }\n\n    public function testGenerateEcBytes() : void\n    {\n        // Numbers are from http://www.swetake.com/qr/qr3.html and\n        // http://www.swetake.com/qr/qr9.html\n        $dataBytes = SplFixedArray::fromArray([32, 65, 205, 69, 41, 220, 46, 128, 236], false);\n        $ecBytes   = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 17);\n        $expected  = SplFixedArray::fromArray(\n            [42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61],\n            false\n        );\n        $this->assertEquals($expected, $ecBytes);\n\n        $dataBytes = SplFixedArray::fromArray(\n            [67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214],\n            false\n        );\n        $ecBytes   = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 18);\n        $expected  = SplFixedArray::fromArray(\n            [175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187],\n            false\n        );\n        $this->assertEquals($expected, $ecBytes);\n\n        // High-order zero coefficient case.\n        $dataBytes = SplFixedArray::fromArray([32, 49, 205, 69, 42, 20, 0, 236, 17], false);\n        $ecBytes   = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 17);\n        $expected  = SplFixedArray::fromArray(\n            [0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213],\n            false\n        );\n        $this->assertEquals($expected, $ecBytes);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Encoder;\n\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Encoder\\MaskUtil;\nuse PHPUnit\\Framework\\TestCase;\n\nclass MaskUtilTest extends TestCase\n{\n    public function dataMaskBits() : array\n    {\n        return [\n            [0, [\n                [1, 0, 1, 0, 1, 0],\n                [0, 1, 0, 1, 0, 1],\n                [1, 0, 1, 0, 1, 0],\n                [0, 1, 0, 1, 0, 1],\n                [1, 0, 1, 0, 1, 0],\n                [0, 1, 0, 1, 0, 1],\n            ]],\n            [1, [\n                [1, 1, 1, 1, 1, 1],\n                [0, 0, 0, 0, 0, 0],\n                [1, 1, 1, 1, 1, 1],\n                [0, 0, 0, 0, 0, 0],\n                [1, 1, 1, 1, 1, 1],\n                [0, 0, 0, 0, 0, 0],\n            ]],\n            [2, [\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 0, 1, 0, 0],\n            ]],\n            [3, [\n                [1, 0, 0, 1, 0, 0],\n                [0, 0, 1, 0, 0, 1],\n                [0, 1, 0, 0, 1, 0],\n                [1, 0, 0, 1, 0, 0],\n                [0, 0, 1, 0, 0, 1],\n                [0, 1, 0, 0, 1, 0],\n            ]],\n            [4, [\n                [1, 1, 1, 0, 0, 0],\n                [1, 1, 1, 0, 0, 0],\n                [0, 0, 0, 1, 1, 1],\n                [0, 0, 0, 1, 1, 1],\n                [1, 1, 1, 0, 0, 0],\n                [1, 1, 1, 0, 0, 0],\n            ]],\n            [5, [\n                [1, 1, 1, 1, 1, 1],\n                [1, 0, 0, 0, 0, 0],\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 1, 0, 1, 0],\n                [1, 0, 0, 1, 0, 0],\n                [1, 0, 0, 0, 0, 0],\n            ]],\n            [6, [\n                [1, 1, 1, 1, 1, 1],\n                [1, 1, 1, 0, 0, 0],\n                [1, 1, 0, 1, 1, 0],\n                [1, 0, 1, 0, 1, 0],\n                [1, 0, 1, 1, 0, 1],\n                [1, 0, 0, 0, 1, 1],\n            ]],\n            [7, [\n                [1, 0, 1, 0, 1, 0],\n                [0, 0, 0, 1, 1, 1],\n                [1, 0, 0, 0, 1, 1],\n                [0, 1, 0, 1, 0, 1],\n                [1, 1, 1, 0, 0, 0],\n                [0, 1, 1, 1, 0, 0],\n            ]],\n        ];\n    }\n\n    /**\n     * @dataProvider dataMaskBits\n     */\n    public function testGetDatMaskBit(int $maskPattern, array $expected) : void\n    {\n        for ($x = 0; $x < 6; ++$x) {\n            for ($y = 0; $y < 6; ++$y) {\n                $this->assertSame(\n                    1 === $expected[$y][$x],\n                    MaskUtil::getDataMaskBit($maskPattern, $x, $y)\n                );\n            }\n        }\n    }\n\n    public function testApplyMaskPenaltyRule1() : void\n    {\n        $matrix = new ByteMatrix(4, 1);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 0);\n        $matrix->set(2, 0, 0);\n        $matrix->set(3, 0, 0);\n\n        $this->assertSame(0, MaskUtil::applyMaskPenaltyRule1($matrix));\n\n        // Horizontal\n        $matrix = new ByteMatrix(6, 1);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 0);\n        $matrix->set(2, 0, 0);\n        $matrix->set(3, 0, 0);\n        $matrix->set(4, 0, 0);\n        $matrix->set(5, 0, 1);\n        $this->assertSame(3, MaskUtil::applyMaskPenaltyRule1($matrix));\n        $matrix->set(5, 0, 0);\n        $this->assertSame(4, MaskUtil::applyMaskPenaltyRule1($matrix));\n\n        // Vertical\n        $matrix = new ByteMatrix(1, 6);\n        $matrix->set(0, 0, 0);\n        $matrix->set(0, 1, 0);\n        $matrix->set(0, 2, 0);\n        $matrix->set(0, 3, 0);\n        $matrix->set(0, 4, 0);\n        $matrix->set(0, 5, 1);\n        $this->assertSame(3, MaskUtil::applyMaskPenaltyRule1($matrix));\n        $matrix->set(0, 5, 0);\n        $this->assertSame(4, MaskUtil::applyMaskPenaltyRule1($matrix));\n    }\n\n    public function testApplyMaskPenaltyRule2() : void\n    {\n        $matrix = new ByteMatrix(1, 1);\n        $matrix->set(0, 0, 0);\n        $this->assertSame(0, MaskUtil::applyMaskPenaltyRule2($matrix));\n\n        $matrix = new ByteMatrix(2, 2);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 0);\n        $matrix->set(0, 1, 0);\n        $matrix->set(1, 1, 1);\n        $this->assertSame(0, MaskUtil::applyMaskPenaltyRule2($matrix));\n\n        $matrix = new ByteMatrix(2, 2);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 0);\n        $matrix->set(0, 1, 0);\n        $matrix->set(1, 1, 0);\n        $this->assertSame(3, MaskUtil::applyMaskPenaltyRule2($matrix));\n\n        $matrix = new ByteMatrix(3, 3);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 0);\n        $matrix->set(2, 0, 0);\n        $matrix->set(0, 1, 0);\n        $matrix->set(1, 1, 0);\n        $matrix->set(2, 1, 0);\n        $matrix->set(0, 2, 0);\n        $matrix->set(1, 2, 0);\n        $matrix->set(2, 2, 0);\n        $this->assertSame(3 * 4, MaskUtil::applyMaskPenaltyRule2($matrix));\n    }\n\n    public function testApplyMaskPenalty3() : void\n    {\n        // Horizontal 00001011101\n        $matrix = new ByteMatrix(11, 1);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 0);\n        $matrix->set(2, 0, 0);\n        $matrix->set(3, 0, 0);\n        $matrix->set(4, 0, 1);\n        $matrix->set(5, 0, 0);\n        $matrix->set(6, 0, 1);\n        $matrix->set(7, 0, 1);\n        $matrix->set(8, 0, 1);\n        $matrix->set(9, 0, 0);\n        $matrix->set(10, 0, 1);\n        $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix));\n\n        // Horizontal 10111010000\n        $matrix = new ByteMatrix(11, 1);\n        $matrix->set(0, 0, 1);\n        $matrix->set(1, 0, 0);\n        $matrix->set(2, 0, 1);\n        $matrix->set(3, 0, 1);\n        $matrix->set(4, 0, 1);\n        $matrix->set(5, 0, 0);\n        $matrix->set(6, 0, 1);\n        $matrix->set(7, 0, 0);\n        $matrix->set(8, 0, 0);\n        $matrix->set(9, 0, 0);\n        $matrix->set(10, 0, 0);\n        $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix));\n\n        // Vertical 00001011101\n        $matrix = new ByteMatrix(1, 11);\n        $matrix->set(0, 0, 0);\n        $matrix->set(0, 1, 0);\n        $matrix->set(0, 2, 0);\n        $matrix->set(0, 3, 0);\n        $matrix->set(0, 4, 1);\n        $matrix->set(0, 5, 0);\n        $matrix->set(0, 6, 1);\n        $matrix->set(0, 7, 1);\n        $matrix->set(0, 8, 1);\n        $matrix->set(0, 9, 0);\n        $matrix->set(0, 10, 1);\n        $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix));\n\n        // Vertical 10111010000\n        $matrix = new ByteMatrix(1, 11);\n        $matrix->set(0, 0, 1);\n        $matrix->set(0, 1, 0);\n        $matrix->set(0, 2, 1);\n        $matrix->set(0, 3, 1);\n        $matrix->set(0, 4, 1);\n        $matrix->set(0, 5, 0);\n        $matrix->set(0, 6, 1);\n        $matrix->set(0, 7, 0);\n        $matrix->set(0, 8, 0);\n        $matrix->set(0, 9, 0);\n        $matrix->set(0, 10, 0);\n        $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix));\n    }\n\n    public function testApplyMaskPenaltyRule4() : void\n    {\n        // Dark cell ratio = 0%\n        $matrix = new ByteMatrix(1, 1);\n        $matrix->set(0, 0, 0);\n        $this->assertSame(100, MaskUtil::applyMaskPenaltyRule4($matrix));\n\n        // Dark cell ratio = 5%\n        $matrix = new ByteMatrix(2, 1);\n        $matrix->set(0, 0, 0);\n        $matrix->set(0, 0, 1);\n        $this->assertSame(0, MaskUtil::applyMaskPenaltyRule4($matrix));\n\n        // Dark cell ratio = 66.67%\n        $matrix = new ByteMatrix(6, 1);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 1);\n        $matrix->set(2, 0, 1);\n        $matrix->set(3, 0, 1);\n        $matrix->set(4, 0, 1);\n        $matrix->set(5, 0, 0);\n        $this->assertSame(30, MaskUtil::applyMaskPenaltyRule4($matrix));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Encoder;\n\nuse BaconQrCode\\Common\\BitArray;\nuse BaconQrCode\\Common\\ErrorCorrectionLevel;\nuse BaconQrCode\\Common\\Version;\nuse BaconQrCode\\Encoder\\ByteMatrix;\nuse BaconQrCode\\Encoder\\MatrixUtil;\nuse PHPUnit\\Framework\\TestCase;\nuse ReflectionClass;\nuse ReflectionMethod;\n\nclass MatrixUtilTest extends TestCase\n{\n    /**\n     * @var ReflectionMethod[]\n     */\n    protected $methods = [];\n\n    public function setUp() : void\n    {\n        // Hack to be able to test protected methods\n        $reflection = new ReflectionClass(MatrixUtil::class);\n\n        foreach ($reflection->getMethods(ReflectionMethod::IS_STATIC) as $method) {\n            $method->setAccessible(true);\n            $this->methods[$method->getName()] = $method;\n        }\n    }\n\n    public function testToString() : void\n    {\n        $matrix = new ByteMatrix(3, 3);\n        $matrix->set(0, 0, 0);\n        $matrix->set(1, 0, 1);\n        $matrix->set(2, 0, 0);\n        $matrix->set(0, 1, 1);\n        $matrix->set(1, 1, 0);\n        $matrix->set(2, 1, 1);\n        $matrix->set(0, 2, -1);\n        $matrix->set(1, 2, -1);\n        $matrix->set(2, 2, -1);\n\n        $expected = \" 0 1 0\\n 1 0 1\\n      \\n\";\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testClearMatrix() : void\n    {\n        $matrix = new ByteMatrix(2, 2);\n        MatrixUtil::clearMatrix($matrix);\n\n        $this->assertSame(-1, $matrix->get(0, 0));\n        $this->assertSame(-1, $matrix->get(1, 0));\n        $this->assertSame(-1, $matrix->get(0, 1));\n        $this->assertSame(-1, $matrix->get(1, 1));\n    }\n\n    public function testEmbedBasicPatterns1() : void\n    {\n        $matrix = new ByteMatrix(21, 21);\n        MatrixUtil::clearMatrix($matrix);\n        $this->methods['embedBasicPatterns']->invoke(\n            null,\n            Version::getVersionForNumber(1),\n            $matrix\n        );\n        $expected = \" 1 1 1 1 1 1 1 0           0 1 1 1 1 1 1 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0           0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0           0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0           0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0           0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0           0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\\n\"\n                  . \" 0 0 0 0 0 0 0 0           0 0 0 0 0 0 0 0\\n\"\n                  . \"             1                            \\n\"\n                  . \"             0                            \\n\"\n                  . \"             1                            \\n\"\n                  . \"             0                            \\n\"\n                  . \"             1                            \\n\"\n                  . \" 0 0 0 0 0 0 0 0 1                        \\n\"\n                  . \" 1 1 1 1 1 1 1 0                          \\n\"\n                  . \" 1 0 0 0 0 0 1 0                          \\n\"\n                  . \" 1 0 1 1 1 0 1 0                          \\n\"\n                  . \" 1 0 1 1 1 0 1 0                          \\n\"\n                  . \" 1 0 1 1 1 0 1 0                          \\n\"\n                  . \" 1 0 0 0 0 0 1 0                          \\n\"\n                  . \" 1 1 1 1 1 1 1 0                          \\n\";\n\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testEmbedBasicPatterns2() : void\n    {\n        $matrix = new ByteMatrix(25, 25);\n        MatrixUtil::clearMatrix($matrix);\n        $this->methods['embedBasicPatterns']->invoke(\n            null,\n            Version::getVersionForNumber(2),\n            $matrix\n        );\n        $expected = \" 1 1 1 1 1 1 1 0                   0 1 1 1 1 1 1 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0                   0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0                   0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0                   0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0                   0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0                   0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\\n\"\n                  . \" 0 0 0 0 0 0 0 0                   0 0 0 0 0 0 0 0\\n\"\n                  . \"             1                                    \\n\"\n                  . \"             0                                    \\n\"\n                  . \"             1                                    \\n\"\n                  . \"             0                                    \\n\"\n                  . \"             1                                    \\n\"\n                  . \"             0                                    \\n\"\n                  . \"             1                                    \\n\"\n                  . \"             0                                    \\n\"\n                  . \"             1                   1 1 1 1 1        \\n\"\n                  . \" 0 0 0 0 0 0 0 0 1               1 0 0 0 1        \\n\"\n                  . \" 1 1 1 1 1 1 1 0                 1 0 1 0 1        \\n\"\n                  . \" 1 0 0 0 0 0 1 0                 1 0 0 0 1        \\n\"\n                  . \" 1 0 1 1 1 0 1 0                 1 1 1 1 1        \\n\"\n                  . \" 1 0 1 1 1 0 1 0                                  \\n\"\n                  . \" 1 0 1 1 1 0 1 0                                  \\n\"\n                  . \" 1 0 0 0 0 0 1 0                                  \\n\"\n                  . \" 1 1 1 1 1 1 1 0                                  \\n\";\n\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testEmbedTypeInfo() : void\n    {\n        $matrix = new ByteMatrix(21, 21);\n        MatrixUtil::clearMatrix($matrix);\n        $this->methods['embedTypeInfo']->invoke(\n            null,\n            ErrorCorrectionLevel::M(),\n            5,\n            $matrix\n        );\n        $expected = \"                 0                        \\n\"\n                  . \"                 1                        \\n\"\n                  . \"                 1                        \\n\"\n                  . \"                 1                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                                          \\n\"\n                  . \"                 1                        \\n\"\n                  . \" 1 0 0 0 0 0   0 1         1 1 0 0 1 1 1 0\\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 0                        \\n\"\n                  . \"                 1                        \\n\";\n\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testEmbedVersionInfo() : void\n    {\n        $matrix = new ByteMatrix(21, 21);\n        MatrixUtil::clearMatrix($matrix);\n        $this->methods['maybeEmbedVersionInfo']->invoke(\n            null,\n            Version::getVersionForNumber(7),\n            $matrix\n        );\n        $expected = \"                     0 0 1                \\n\"\n                  . \"                     0 1 0                \\n\"\n                  . \"                     0 1 0                \\n\"\n                  . \"                     0 1 1                \\n\"\n                  . \"                     1 1 1                \\n\"\n                  . \"                     0 0 0                \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \" 0 0 0 0 1 0                              \\n\"\n                  . \" 0 1 1 1 1 0                              \\n\"\n                  . \" 1 0 0 1 1 0                              \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\"\n                  . \"                                          \\n\";\n\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testEmbedDataBits() : void\n    {\n        $matrix = new ByteMatrix(21, 21);\n        MatrixUtil::clearMatrix($matrix);\n        $this->methods['embedBasicPatterns']->invoke(\n            null,\n            Version::getVersionForNumber(1),\n            $matrix\n        );\n\n        $bits = new BitArray();\n        $this->methods['embedDataBits']->invoke(\n            null,\n            $bits,\n            -1,\n            $matrix\n        );\n\n        $expected = \" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\\n\"\n                  . \" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\"\n                  . \" 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\\n\";\n\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testBuildMatrix() : void\n    {\n        $bytes = [\n            32, 65, 205, 69, 41, 220, 46, 128, 236, 42, 159, 74, 221, 244, 169,\n            239, 150, 138, 70, 237, 85, 224, 96, 74, 219 , 61\n        ];\n        $bits = new BitArray();\n\n        foreach ($bytes as $byte) {\n            $bits->appendBits($byte, 8);\n        }\n\n        $matrix = new ByteMatrix(21, 21);\n        MatrixUtil::buildMatrix(\n            $bits,\n            ErrorCorrectionLevel::H(),\n            Version::getVersionForNumber(1),\n            3,\n            $matrix\n        );\n\n        $expected = \" 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1\\n\"\n                  . \" 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\\n\"\n                  . \" 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0\\n\"\n                  . \" 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0\\n\"\n                  . \" 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0\\n\"\n                  . \" 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0\\n\"\n                  . \" 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0\\n\"\n                  . \" 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1\\n\"\n                  . \" 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1\\n\"\n                  . \" 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0\\n\"\n                  . \" 1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1\\n\"\n                  . \" 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0\\n\"\n                  . \" 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0\\n\"\n                  . \" 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0\\n\"\n                  . \" 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0\\n\";\n\n        $this->assertSame($expected, (string) $matrix);\n    }\n\n    public function testFindMsbSet() : void\n    {\n        $this->assertSame(0, $this->methods['findMsbSet']->invoke(null, 0));\n        $this->assertSame(1, $this->methods['findMsbSet']->invoke(null, 1));\n        $this->assertSame(8, $this->methods['findMsbSet']->invoke(null, 0x80));\n        $this->assertSame(32, $this->methods['findMsbSet']->invoke(null, 0x80000000));\n    }\n\n    public function testCalculateBchCode() : void\n    {\n        // Encoding of type information.\n        // From Appendix C in JISX0510:2004 (p 65)\n        $this->assertSame(0xdc, $this->methods['calculateBchCode']->invoke(null, 5, 0x537));\n        // From http://www.swetake.com/qr/qr6.html\n        $this->assertSame(0x1c2, $this->methods['calculateBchCode']->invoke(null, 0x13, 0x537));\n        // From http://www.swetake.com/qr/qr11.html\n        $this->assertSame(0x214, $this->methods['calculateBchCode']->invoke(null, 0x1b, 0x537));\n\n        // Encoding of version information.\n        // From Appendix D in JISX0510:2004 (p 68)\n        $this->assertSame(0xc94, $this->methods['calculateBchCode']->invoke(null, 7, 0x1f25));\n        $this->assertSame(0x5bc, $this->methods['calculateBchCode']->invoke(null, 8, 0x1f25));\n        $this->assertSame(0xa99, $this->methods['calculateBchCode']->invoke(null, 9, 0x1f25));\n        $this->assertSame(0x4d3, $this->methods['calculateBchCode']->invoke(null, 10, 0x1f25));\n        $this->assertSame(0x9a6, $this->methods['calculateBchCode']->invoke(null, 20, 0x1f25));\n        $this->assertSame(0xd75, $this->methods['calculateBchCode']->invoke(null, 30, 0x1f25));\n        $this->assertSame(0xc69, $this->methods['calculateBchCode']->invoke(null, 40, 0x1f25));\n    }\n\n    public function testMakeVersionInfoBits() : void\n    {\n        // From Appendix D in JISX0510:2004 (p 68)\n        $bits = new BitArray();\n        $this->methods['makeVersionInfoBits']->invoke(null, Version::getVersionForNumber(7), $bits);\n        $this->assertSame(' ...XXXXX ..X..X.X ..', (string) $bits);\n    }\n\n    public function testMakeTypeInfoBits() : void\n    {\n        // From Appendix D in JISX0510:2004 (p 68)\n        $bits = new BitArray();\n        $this->methods['makeTypeInfoBits']->invoke(null, ErrorCorrectionLevel::M(), 5, $bits);\n        $this->assertSame(' X......X X..XXX.', (string) $bits);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bacon/bacon-qr-code/test/Integration/ImagickRenderingTest.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace BaconQrCodeTest\\Integration;\n\nuse BaconQrCode\\Renderer\\Color\\Rgb;\nuse BaconQrCode\\Renderer\\Eye\\SquareEye;\nuse BaconQrCode\\Renderer\\Image\\ImagickImageBackEnd;\nuse BaconQrCode\\Renderer\\ImageRenderer;\nuse BaconQrCode\\Renderer\\Module\\SquareModule;\nuse BaconQrCode\\Renderer\\RendererStyle\\EyeFill;\nuse BaconQrCode\\Renderer\\RendererStyle\\Fill;\nuse BaconQrCode\\Renderer\\RendererStyle\\Gradient;\nuse BaconQrCode\\Renderer\\RendererStyle\\GradientType;\nuse BaconQrCode\\Renderer\\RendererStyle\\RendererStyle;\nuse BaconQrCode\\Writer;\nuse PHPUnit\\Framework\\TestCase;\nuse Spatie\\Snapshots\\MatchesSnapshots;\n\n/**\n * @group integration\n */\nfinal class ImagickRenderingTest extends TestCase\n{\n    use MatchesSnapshots;\n\n    /**\n     * @requires extension imagick\n     */\n    public function testGenericQrCode() : void\n    {\n        $renderer = new ImageRenderer(\n            new RendererStyle(400),\n            new ImagickImageBackEnd()\n        );\n        $writer = new Writer($renderer);\n        $tempName = tempnam(sys_get_temp_dir(), 'test') . '.png';\n        $writer->writeFile('Hello World!', $tempName);\n\n        $this->assertMatchesFileSnapshot($tempName);\n        unlink($tempName);\n    }\n\n    /**\n     * @requires extension imagick\n     */\n    public function testIssue79() : void\n    {\n        $eye = SquareEye::instance();\n        $squareModule = SquareModule::instance();\n\n        $eyeFill = new EyeFill(new Rgb(100, 100, 55), new Rgb(100, 100, 255));\n        $gradient = new Gradient(new Rgb(100, 100, 55), new Rgb(100, 100, 255), GradientType::HORIZONTAL());\n\n        $renderer = new ImageRenderer(\n            new RendererStyle(\n                400,\n                2,\n                $squareModule,\n                $eye,\n                Fill::withForegroundGradient(new Rgb(255, 255, 255), $gradient, $eyeFill, $eyeFill, $eyeFill)\n            ),\n            new ImagickImageBackEnd()\n        );\n        $writer = new Writer($renderer);\n        $tempName = tempnam(sys_get_temp_dir(), 'test') . '.png';\n        $writer->writeFile('https://apiroad.net/very-long-url', $tempName);\n\n        $this->assertMatchesFileSnapshot($tempName);\n        unlink($tempName);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bin/carbon",
    "content": "#!/usr/bin/env php\n<?php\n\n/**\n * Proxy PHP file generated by Composer\n *\n * This file includes the referenced bin path (../nesbot/carbon/bin/carbon)\n * using a stream wrapper to prevent the shebang from being output on PHP<8\n *\n * @generated\n */\n\nnamespace Composer;\n\n$GLOBALS['_composer_bin_dir'] = __DIR__;\n$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';\n\nif (PHP_VERSION_ID < 80000) {\n    if (!class_exists('Composer\\BinProxyWrapper')) {\n        /**\n         * @internal\n         */\n        final class BinProxyWrapper\n        {\n            private $handle;\n            private $position;\n            private $realpath;\n\n            public function stream_open($path, $mode, $options, &$opened_path)\n            {\n                // get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution\n                $opened_path = substr($path, 17);\n                $this->realpath = realpath($opened_path) ?: $opened_path;\n                $opened_path = $this->realpath;\n                $this->handle = fopen($this->realpath, $mode);\n                $this->position = 0;\n\n                return (bool) $this->handle;\n            }\n\n            public function stream_read($count)\n            {\n                $data = fread($this->handle, $count);\n\n                if ($this->position === 0) {\n                    $data = preg_replace('{^#!.*\\r?\\n}', '', $data);\n                }\n\n                $this->position += strlen($data);\n\n                return $data;\n            }\n\n            public function stream_cast($castAs)\n            {\n                return $this->handle;\n            }\n\n            public function stream_close()\n            {\n                fclose($this->handle);\n            }\n\n            public function stream_lock($operation)\n            {\n                return $operation ? flock($this->handle, $operation) : true;\n            }\n\n            public function stream_seek($offset, $whence)\n            {\n                if (0 === fseek($this->handle, $offset, $whence)) {\n                    $this->position = ftell($this->handle);\n                    return true;\n                }\n\n                return false;\n            }\n\n            public function stream_tell()\n            {\n                return $this->position;\n            }\n\n            public function stream_eof()\n            {\n                return feof($this->handle);\n            }\n\n            public function stream_stat()\n            {\n                return array();\n            }\n\n            public function stream_set_option($option, $arg1, $arg2)\n            {\n                return true;\n            }\n\n            public function url_stat($path, $flags)\n            {\n                $path = substr($path, 17);\n                if (file_exists($path)) {\n                    return stat($path);\n                }\n\n                return false;\n            }\n        }\n    }\n\n    if (\n        (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true))\n        || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\\BinProxyWrapper'))\n    ) {\n        return include(\"phpvfscomposer://\" . __DIR__ . '/..'.'/nesbot/carbon/bin/carbon');\n    }\n}\n\nreturn include __DIR__ . '/..'.'/nesbot/carbon/bin/carbon';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bin/minifycss",
    "content": "#!/usr/bin/env php\n<?php\n\n/**\n * Proxy PHP file generated by Composer\n *\n * This file includes the referenced bin path (../matthiasmullie/minify/bin/minifycss)\n * using a stream wrapper to prevent the shebang from being output on PHP<8\n *\n * @generated\n */\n\nnamespace Composer;\n\n$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';\n\nif (PHP_VERSION_ID < 80000) {\n    if (!class_exists('Composer\\BinProxyWrapper')) {\n        /**\n         * @internal\n         */\n        final class BinProxyWrapper\n        {\n            private $handle;\n            private $position;\n\n            public function stream_open($path, $mode, $options, &$opened_path)\n            {\n                // get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution\n                $opened_path = substr($path, 21);\n                $opened_path = realpath($opened_path) ?: $opened_path;\n                $this->handle = fopen($opened_path, $mode);\n                $this->position = 0;\n\n                // remove all traces of this stream wrapper once it has been used\n                stream_wrapper_unregister('composer-bin-proxy');\n\n                return (bool) $this->handle;\n            }\n\n            public function stream_read($count)\n            {\n                $data = fread($this->handle, $count);\n\n                if ($this->position === 0) {\n                    $data = preg_replace('{^#!.*\\r?\\n}', '', $data);\n                }\n\n                $this->position += strlen($data);\n\n                return $data;\n            }\n\n            public function stream_cast($castAs)\n            {\n                return $this->handle;\n            }\n\n            public function stream_close()\n            {\n                fclose($this->handle);\n            }\n\n            public function stream_lock($operation)\n            {\n                return $operation ? flock($this->handle, $operation) : true;\n            }\n\n            public function stream_tell()\n            {\n                return $this->position;\n            }\n\n            public function stream_eof()\n            {\n                return feof($this->handle);\n            }\n\n            public function stream_stat()\n            {\n                return fstat($this->handle);\n            }\n\n            public function stream_set_option($option, $arg1, $arg2)\n            {\n                return true;\n            }\n        }\n    }\n\n    if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\\BinProxyWrapper')) {\n        include(\"composer-bin-proxy://\" . __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifycss');\n        exit(0);\n    }\n}\n\ninclude __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifycss';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bin/minifyjs",
    "content": "#!/usr/bin/env php\n<?php\n\n/**\n * Proxy PHP file generated by Composer\n *\n * This file includes the referenced bin path (../matthiasmullie/minify/bin/minifyjs)\n * using a stream wrapper to prevent the shebang from being output on PHP<8\n *\n * @generated\n */\n\nnamespace Composer;\n\n$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';\n\nif (PHP_VERSION_ID < 80000) {\n    if (!class_exists('Composer\\BinProxyWrapper')) {\n        /**\n         * @internal\n         */\n        final class BinProxyWrapper\n        {\n            private $handle;\n            private $position;\n\n            public function stream_open($path, $mode, $options, &$opened_path)\n            {\n                // get rid of composer-bin-proxy:// prefix for __FILE__ & __DIR__ resolution\n                $opened_path = substr($path, 21);\n                $opened_path = realpath($opened_path) ?: $opened_path;\n                $this->handle = fopen($opened_path, $mode);\n                $this->position = 0;\n\n                // remove all traces of this stream wrapper once it has been used\n                stream_wrapper_unregister('composer-bin-proxy');\n\n                return (bool) $this->handle;\n            }\n\n            public function stream_read($count)\n            {\n                $data = fread($this->handle, $count);\n\n                if ($this->position === 0) {\n                    $data = preg_replace('{^#!.*\\r?\\n}', '', $data);\n                }\n\n                $this->position += strlen($data);\n\n                return $data;\n            }\n\n            public function stream_cast($castAs)\n            {\n                return $this->handle;\n            }\n\n            public function stream_close()\n            {\n                fclose($this->handle);\n            }\n\n            public function stream_lock($operation)\n            {\n                return $operation ? flock($this->handle, $operation) : true;\n            }\n\n            public function stream_tell()\n            {\n                return $this->position;\n            }\n\n            public function stream_eof()\n            {\n                return feof($this->handle);\n            }\n\n            public function stream_stat()\n            {\n                return fstat($this->handle);\n            }\n\n            public function stream_set_option($option, $arg1, $arg2)\n            {\n                return true;\n            }\n        }\n    }\n\n    if (function_exists('stream_wrapper_register') && stream_wrapper_register('composer-bin-proxy', 'Composer\\BinProxyWrapper')) {\n        include(\"composer-bin-proxy://\" . __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifyjs');\n        exit(0);\n    }\n}\n\ninclude __DIR__ . '/..'.'/matthiasmullie/minify/bin/minifyjs';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/CHANGELOG.md",
    "content": "CHANGELOG for 1.x\n=================\n\nThis changelog references the relevant changes (bug and security fixes) done\nin 1.x minor versions.\n\nTo see the files changed for a given bug, go to https://github.com/bshaffer/oauth2-server-php/issues/### where ### is the bug number\nTo get the diff between two versions, go to https://github.com/bshaffer/oauth2-server-php/compare/v1.0...v1.1\nTo get the diff for a specific change, go to https://github.com/bshaffer/oauth2-server-php/commit/XXX where XXX is the change hash\n\n* 1.10.0 (2017-11-15)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/889\n\n  * #795 - [feature] added protected createPayload method to allow easier customization of JWT payload\n  * #807 - [refactor] simplifies UserInfoController constructor\n  * #814 - [docs] Adds https to README link\n  * #827 - [testing] Explicitly pulls in phpunit 4\n  * #828 - [docs] PHPDoc improvements and type hinting of variables.\n  * #829 - [bug] Fix CORS issue for revoking and requesting an access token\n  * #869 - [testing] Remove php 5.3 from travis and use vendored phpunit\n  * #834 - [feature] use random_bytes if available\n  * #851 - [docs] Fix PHPDoc\n  * #872 - [bug] Fix count() error on PHP 7.2\n  * #873 - [testing] adds php 7.2 to travis\n  * #794 - [docs] Fix typo in composer.json\n  * #885 - [testing] Use PHPUnit\\Framework\\TestCase instead of PHPUnit_Framework_TestCase\n\n* 1.9.0 (2017-01-06)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/788\n\n  * bug #645 - Allow null for client_secret\n  * bug #651 - Fix bug in isPublicClient of Cassandra Storage\n  * bug #670 - Bug in client's scope restriction\n  * bug #672 - Implemented method to override the password hashing algorithm\n  * bug #698 - Fix Token Response's Content-Type to application/json\n  * bug #729 - Ensures unsetAccessToken and unsetRefreshToken return a bool\n  * bug #749 - Fix UserClaims for CodeIdToken\n  * bug #784 - RFC6750 compatibility\n  * bug #776 - Fix \"redirect_uri_mismatch\" for URIs with encoded characters\n  * bug #759 - no access token supplied to resource controller results in empty request body\n  * bug #773 - Use OpenSSL random method before attempting Mcrypt's.\n  * bug #790 - Add mongo db\n\n* 1.8.0 (2015-09-18)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/643\n\n  * bug #594 - adds jti\n  * bug #598 - fixes lifetime configurations for JWTs\n  * bug #634 - fixes travis builds, upgrade to containers\n  * bug #586 - support for revoking tokens\n  * bug #636 - Adds FirebaseJWT bridge\n  * bug #639 - Mongo HHVM compatibility\n\n* 1.7.0 (2015-04-23)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/572\n\n  * bug #500 - PDO fetch mode changed from FETCH_BOTH to FETCH_ASSOC\n  * bug #508 - Case insensitive for Bearer token header name  ba716d4\n  * bug #512 - validateRedirectUri is now public\n  * bug #530 - Add PublicKeyInterface, UserClaimsInterface to Cassandra Storage\n  * bug #505 - DynamoDB storage fixes\n  * bug #556 - adds \"code id_token\" return type to openid connect\n  * bug #563 - Include \"issuer\" config key for JwtAccessToken\n  * bug #564 - Fixes JWT vulnerability\n  * bug #571 - Added unset_refresh_token_after_use option\n\n* 1.6 (2015-01-16)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/496\n\n  * bug 437 - renames CryptoToken to JwtAccessToken / use_crypto_tokens to use_jwt_access_tokens\n  * bug 447 - Adds a Couchbase storage implementation\n  * bug 460 - Rename JWT claims to match spec\n  * bug 470 - order does not matter for multi-valued response types\n  * bug 471 - Make validateAuthorizeRequest available for POST in addition to GET\n  * bug 475 - Adds JTI table definitiion\n  * bug 481 - better randomness for generating access tokens\n  * bug 480 - Use hash_equals() for signature verification (prevents remote timing attacks)\n  * bugs 489, 491, 498 - misc other fixes\n\n* 1.5 (2014-08-27)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/446\n\n  * bug #399 - Add DynamoDB Support\n  * bug #404 - renamed error name for malformed/expired tokens\n  * bug #412 - Openid connect: fixes for claims with more than one scope / Add support for the prompt parameter ('consent' and 'none')\n  * bug #411 - fixes xml output\n  * bug #413 - fixes invalid format error\n  * bug #401 - fixes code standards / whitespace\n  * bug #354 - bundles PDO SQL with the library\n  * [BC] bug #397 - refresh tokens should not be encrypted\n  * bug #423 - makes \"scope\" optional for refresh token storage\n\n* 1.4 (2014-06-12)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/392\n\n  * bug #189 Storage\\PDO - allows DSN string in constructor\n  * bug #233 Bearer Tokens - allows token in request body for PUT requests\n  * bug #346 Fixes open_basedir warning\n  * bug #351 Adds OpenID Connect support\n  * bug #355 Adds php 5.6 and HHVM to travis.ci testing\n  * [BC] bug #358 Adds `getQueryStringIdentifier()` to the GrantType interface\n  * bug #363 Encryption\\JWT - Allows for subclassing JWT Headers\n  * bug #349 Bearer Tokens - adds requestHasToken method for when access tokens are optional\n  * bug #301 Encryption\\JWT - fixes urlSafeB64Encode(): ensures newlines are replaced as expected\n  * bug #323 ResourceController - client_id is no longer required to be returned when calling getAccessToken\n  * bug #367 Storage\\PDO - adds Postgres support\n  * bug #368 Access Tokens - use mcrypt_create_iv or openssl_random_pseudo_bytes to create token string\n  * bug #376 Request - allows case insensitive headers\n  * bug #384 Storage\\PDO - can pass in PDO options in constructor of PDO storage\n  * misc fixes #361, #292, #373, #374, #379, #396\n* 1.3 (2014-02-27)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/325\n\n  * bug #311 adds cassandra storage\n  * bug #298 fixes response code for user credentials grant type\n  * bug #318 adds 'use_crypto_tokens' config to Server class for better DX\n  * [BC] bug #320 pass client_id to getDefaultScope\n  * bug #324 better feedback when running tests\n  * bug #335 adds support for non-expiring refresh tokens\n  * bug #333 fixes Pdo storage for getClientKey\n  * bug #336 fixes Redis storage for expireAuthorizationCode\n\n* 1.3 (2014-02-27)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/325\n\n  * bug #311 adds cassandra storage\n  * bug #298 fixes response code for user credentials grant type\n  * bug #318 adds 'use_crypto_tokens' config to Server class for better DX\n  * bug #320 pass client_id to getDefaultScope\n  * bug #324 better feedback when running tests\n  * bug #335 adds support for non-expiring refresh tokens\n  * bug #333 fixes Pdo storage for getClientKey\n  * bug #336 fixes Redis storage for expireAuthorizationCode\n\n* 1.2 (2014-01-03)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/288\n\n  * bug #285 changed response header from 200 to 401 when empty token received\n  * bug #286 adds documentation and links to spec for not including error messages when no token is supplied\n  * bug #280 ensures PHP warnings do not get thrown as a result of an invalid argument to $jwt->decode()\n  * bug #279 predis wrong number of arguments\n  * bug #277 Securing JS WebApp client secret w/ password grant type\n\n* 1.1 (2013-12-17)\n\n  PR: https://github.com/bshaffer/oauth2-server-php/pull/276\n\n  * bug #278 adds refresh token configuration to Server class\n  * bug #274 Supplying a null client_id and client_secret grants API access\n  * bug #244 [MongoStorage] More detailed implementation info\n  * bug #268 Implement jti for JWT Bearer tokens to prevent replay attacks.\n  * bug #266 Removing unused argument to getAccessTokenData\n  * bug #247 Make Bearer token type consistent\n  * bug #253 Fixing CryptoToken refresh token lifetime\n  * bug #246 refactors public key logic to be more intuitive\n  * bug #245 adds support for JSON crypto tokens\n  * bug #230 Remove unused columns in oauth_clients\n  * bug #215 makes Redis Scope Storage obey the same paradigm as PDO\n  * bug #228 removes scope group\n  * bug #227 squelches open basedir restriction error\n  * bug #223 Updated docblocks for RefreshTokenInterface.php\n  * bug #224 Adds protected properties\n  * bug #217 Implement ScopeInterface for PDO, Redis\n\n* 1.0 (2013-08-12)\n\n  * bug #203 Add redirect\\_status_code config param for AuthorizeController\n  * bug #205 ensures unnecessary ? is not set when  ** bug\n  * bug #204 Fixed call to LogicException\n  * bug #202 Add explode to checkRestrictedGrant in PDO Storage\n  * bug #197 adds support for 'false' default scope  ** bug\n  * bug #192 reference errors and adds tests\n  * bug #194 makes some appropriate properties  ** bug\n  * bug #191 passes config to HttpBasic\n  * bug #190 validates client credentials before  ** bug\n  * bug #171 Fix wrong redirect following authorization step\n  * bug #187 client_id is now passed to getDefaultScope().\n  * bug #176 Require refresh_token in getRefreshToken response\n  * bug #174 make user\\_id not required for refresh_token grant\n  * bug #173 Duplication in JwtBearer Grant\n  * bug #168 user\\_id not required for authorization_code grant\n  * bug #133 hardens default security for user object\n  * bug #163 allows redirect\\_uri on authorization_code to be NULL in docs example\n  * bug #162 adds getToken on ResourceController for convenience\n  * bug #161 fixes fatal error\n  * bug #163 Invalid redirect_uri handling\n  * bug #156 user\\_id in OAuth2\\_Storage_AuthorizationCodeInterface::getAuthorizationCode() response\n  * bug #157 Fix for extending access and refresh tokens\n  * bug #154 ResponseInterface: getParameter method is used in the library but not defined in the interface\n  * bug #148 Add more detail to examples in Readme.md\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/LICENSE",
    "content": "The MIT License\n\nCopyright (c) 2014 Brent Shaffer\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/README.md",
    "content": "oauth2-server-php\n=================\n\n[![Build Status](https://travis-ci.org/bshaffer/oauth2-server-php.svg?branch=master)](https://travis-ci.org/bshaffer/oauth2-server-php)\n\n[![Total Downloads](https://poser.pugx.org/bshaffer/oauth2-server-php/downloads.png)](https://packagist.org/packages/bshaffer/oauth2-server-php)\n\nView the [complete documentation](https://bshaffer.github.io/oauth2-server-php-docs/)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/composer.json",
    "content": "{\n    \"name\": \"bshaffer/oauth2-server-php\",\n    \"description\":\"OAuth2 Server for PHP\",\n    \"keywords\":[\"oauth\",\"oauth2\",\"auth\"],\n    \"type\":\"library\",\n    \"license\":\"MIT\",\n    \"authors\":[\n        {\n            \"name\":\"Brent Shaffer\",\n            \"email\": \"bshafs@gmail.com\",\n            \"homepage\":\"http://brentertainment.com\"\n        }\n    ],\n    \"homepage\": \"http://github.com/bshaffer/oauth2-server-php\",\n    \"autoload\": {\n        \"psr-0\": { \"OAuth2\": \"src/\" }\n    },\n    \"require\":{\n        \"php\":\">=5.3.9\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^4.0\",\n        \"aws/aws-sdk-php\": \"~2.8\",\n        \"firebase/php-jwt\": \"~2.2\",\n        \"predis/predis\": \"dev-master\",\n        \"thobbs/phpcassa\": \"dev-master\",\n        \"mongodb/mongodb\": \"^1.1\"\n    },\n    \"suggest\": {\n        \"predis/predis\": \"Required to use Redis storage\",\n        \"thobbs/phpcassa\": \"Required to use Cassandra storage\",\n        \"aws/aws-sdk-php\": \"~2.8 is required to use DynamoDB storage\",\n        \"firebase/php-jwt\": \"~2.2 is required to use JWT features\",\n        \"mongodb/mongodb\": \"^1.1 is required to use MongoDB storage\"\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Autoloader.php",
    "content": "<?php\n\nnamespace OAuth2;\n\n/**\n * Autoloads OAuth2 classes\n *\n * @author    Brent Shaffer <bshafs at gmail dot com>\n * @license   MIT License\n */\nclass Autoloader\n{\n    /**\n     * @var string\n     */\n    private $dir;\n\n    /**\n     * @param string $dir\n     */\n    public function __construct($dir = null)\n    {\n        if (is_null($dir)) {\n            $dir = dirname(__FILE__).'/..';\n        }\n        $this->dir = $dir;\n    }\n\n    /**\n     * Registers OAuth2\\Autoloader as an SPL autoloader.\n     */\n    public static function register($dir = null)\n    {\n        ini_set('unserialize_callback_func', 'spl_autoload_call');\n        spl_autoload_register(array(new self($dir), 'autoload'));\n    }\n\n    /**\n     * Handles autoloading of classes.\n     *\n     * @param string $class - A class name.\n     * @return boolean      - Returns true if the class has been loaded\n     */\n    public function autoload($class)\n    {\n        if (0 !== strpos($class, 'OAuth2')) {\n            return;\n        }\n\n        if (file_exists($file = $this->dir.'/'.str_replace('\\\\', '/', $class).'.php')) {\n            require $file;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/ClientAssertionTypeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\ClientAssertionType;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n * Interface for all OAuth2 Client Assertion Types\n */\ninterface ClientAssertionTypeInterface\n{\n    /**\n     * Validate the OAuth request\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return mixed\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response);\n\n    /**\n     * Get the client id\n     *\n     * @return mixed\n     */\n    public function getClientId();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ClientAssertionType/HttpBasic.php",
    "content": "<?php\n\nnamespace OAuth2\\ClientAssertionType;\n\nuse OAuth2\\Storage\\ClientCredentialsInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\nuse LogicException;\n\n/**\n * Validate a client via Http Basic authentication\n *\n * @author    Brent Shaffer <bshafs at gmail dot com>\n */\nclass HttpBasic implements ClientAssertionTypeInterface\n{\n    private $clientData;\n\n    protected $storage;\n    protected $config;\n\n    /**\n     * Config array $config should look as follows:\n     * @code\n     *     $config = array(\n     *         'allow_credentials_in_request_body' => true, // whether to look for credentials in the POST body in addition to the Authorize HTTP Header\n     *         'allow_public_clients'  => true              // if true, \"public clients\" (clients without a secret) may be authenticated\n     *     );\n     * @endcode\n     *\n     * @param ClientCredentialsInterface $storage Storage\n     * @param array                      $config  Configuration options for the server\n     */\n    public function __construct(ClientCredentialsInterface $storage, array $config = array())\n    {\n        $this->storage = $storage;\n        $this->config = array_merge(array(\n            'allow_credentials_in_request_body' => true,\n            'allow_public_clients' => true,\n        ), $config);\n    }\n\n    /**\n     * Validate the OAuth request\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return bool|mixed\n     * @throws LogicException\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!$clientData = $this->getClientCredentials($request, $response)) {\n            return false;\n        }\n\n        if (!isset($clientData['client_id'])) {\n            throw new LogicException('the clientData array must have \"client_id\" set');\n        }\n\n        if (!isset($clientData['client_secret']) || $clientData['client_secret'] == '') {\n            if (!$this->config['allow_public_clients']) {\n                $response->setError(400, 'invalid_client', 'client credentials are required');\n\n                return false;\n            }\n\n            if (!$this->storage->isPublicClient($clientData['client_id'])) {\n                $response->setError(400, 'invalid_client', 'This client is invalid or must authenticate using a client secret');\n\n                return false;\n            }\n        } elseif ($this->storage->checkClientCredentials($clientData['client_id'], $clientData['client_secret']) === false) {\n            $response->setError(400, 'invalid_client', 'The client credentials are invalid');\n\n            return false;\n        }\n\n        $this->clientData = $clientData;\n\n        return true;\n    }\n\n    /**\n     * Get the client id\n     *\n     * @return mixed\n     */\n    public function getClientId()\n    {\n        return $this->clientData['client_id'];\n    }\n\n    /**\n     * Internal function used to get the client credentials from HTTP basic\n     * auth or POST data.\n     *\n     * According to the spec (draft 20), the client_id can be provided in\n     * the Basic Authorization header (recommended) or via GET/POST.\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @return array|null A list containing the client identifier and password, for example:\n     * @code\n     *     return array(\n     *         \"client_id\"     => CLIENT_ID,        // REQUIRED the client id\n     *         \"client_secret\" => CLIENT_SECRET,    // OPTIONAL the client secret (may be omitted for public clients)\n     *     );\n     * @endcode\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-2.3.1\n     *\n     * @ingroup oauth2_section_2\n     */\n    public function getClientCredentials(RequestInterface $request, ResponseInterface $response = null)\n    {\n        if (!is_null($request->headers('PHP_AUTH_USER')) && !is_null($request->headers('PHP_AUTH_PW'))) {\n            return array('client_id' => $request->headers('PHP_AUTH_USER'), 'client_secret' => $request->headers('PHP_AUTH_PW'));\n        }\n\n        if ($this->config['allow_credentials_in_request_body']) {\n            // Using POST for HttpBasic authorization is not recommended, but is supported by specification\n            if (!is_null($request->request('client_id'))) {\n                /**\n                 * client_secret can be null if the client's password is an empty string\n                 * @see http://tools.ietf.org/html/rfc6749#section-2.3.1\n                 */\n                return array('client_id' => $request->request('client_id'), 'client_secret' => $request->request('client_secret'));\n            }\n        }\n\n        if ($response) {\n            $message = $this->config['allow_credentials_in_request_body'] ? ' or body' : '';\n            $response->setError(400, 'invalid_client', 'Client credentials were not found in the headers'.$message);\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeController.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\Storage\\ClientInterface;\nuse OAuth2\\ScopeInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\nuse OAuth2\\Scope;\nuse InvalidArgumentException;\n\n/**\n * @see AuthorizeControllerInterface\n */\nclass AuthorizeController implements AuthorizeControllerInterface\n{\n    /**\n     * @var string\n     */\n    private $scope;\n\n    /**\n     * @var int\n     */\n    private $state;\n\n    /**\n     * @var mixed\n     */\n    private $client_id;\n\n    /**\n     * @var string\n     */\n    private $redirect_uri;\n\n    /**\n     * The response type\n     *\n     * @var string\n     */\n    private $response_type;\n\n    /**\n     * @var ClientInterface\n     */\n    protected $clientStorage;\n\n    /**\n     * @var array\n     */\n    protected $responseTypes;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @var ScopeInterface\n     */\n    protected $scopeUtil;\n\n    /**\n     * Constructor\n     *\n     * @param ClientInterface $clientStorage REQUIRED Instance of OAuth2\\Storage\\ClientInterface to retrieve client information\n     * @param array           $responseTypes OPTIONAL Array of OAuth2\\ResponseType\\ResponseTypeInterface objects.  Valid array\n     *                                       keys are \"code\" and \"token\"\n     * @param array           $config        OPTIONAL Configuration options for the server:\n     * @param ScopeInterface  $scopeUtil     OPTIONAL Instance of OAuth2\\ScopeInterface to validate the requested scope\n     * @code\n     *     $config = array(\n     *         'allow_implicit' => false,            // if the controller should allow the \"implicit\" grant type\n     *         'enforce_state'  => true              // if the controller should require the \"state\" parameter\n     *         'require_exact_redirect_uri' => true, // if the controller should require an exact match on the \"redirect_uri\" parameter\n     *         'redirect_status_code' => 302,        // HTTP status code to use for redirect responses\n     *     );\n     * @endcode\n     */\n    public function __construct(ClientInterface $clientStorage, array $responseTypes = array(), array $config = array(), ScopeInterface $scopeUtil = null)\n    {\n        $this->clientStorage = $clientStorage;\n        $this->responseTypes = $responseTypes;\n        $this->config = array_merge(array(\n            'allow_implicit' => false,\n            'enforce_state'  => true,\n            'require_exact_redirect_uri' => true,\n            'redirect_status_code' => 302,\n        ), $config);\n\n        if (is_null($scopeUtil)) {\n            $scopeUtil = new Scope();\n        }\n        $this->scopeUtil = $scopeUtil;\n    }\n\n    /**\n     * Handle the authorization request\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @param boolean           $is_authorized\n     * @param mixed             $user_id\n     * @return mixed|void\n     * @throws InvalidArgumentException\n     */\n    public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null)\n    {\n        if (!is_bool($is_authorized)) {\n            throw new InvalidArgumentException('Argument \"is_authorized\" must be a boolean.  This method must know if the user has granted access to the client.');\n        }\n\n        // We repeat this, because we need to re-validate. The request could be POSTed\n        // by a 3rd-party (because we are not internally enforcing NONCEs, etc)\n        if (!$this->validateAuthorizeRequest($request, $response)) {\n            return;\n        }\n\n        // If no redirect_uri is passed in the request, use client's registered one\n        if (empty($this->redirect_uri)) {\n            $clientData              = $this->clientStorage->getClientDetails($this->client_id);\n            $registered_redirect_uri = $clientData['redirect_uri'];\n        }\n\n        // the user declined access to the client's application\n        if ($is_authorized === false) {\n            $redirect_uri = $this->redirect_uri ?: $registered_redirect_uri;\n            $this->setNotAuthorizedResponse($request, $response, $redirect_uri, $user_id);\n\n            return;\n        }\n\n        // build the parameters to set in the redirect URI\n        if (!$params = $this->buildAuthorizeParameters($request, $response, $user_id)) {\n            return;\n        }\n\n        $authResult = $this->responseTypes[$this->response_type]->getAuthorizeResponse($params, $user_id);\n\n        list($redirect_uri, $uri_params) = $authResult;\n\n        if (empty($redirect_uri) && !empty($registered_redirect_uri)) {\n            $redirect_uri = $registered_redirect_uri;\n        }\n\n        $uri = $this->buildUri($redirect_uri, $uri_params);\n\n        // return redirect response\n        $response->setRedirect($this->config['redirect_status_code'], $uri);\n    }\n\n    /**\n     * Set not authorized response\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @param string            $redirect_uri\n     * @param mixed             $user_id\n     */\n    protected function setNotAuthorizedResponse(RequestInterface $request, ResponseInterface $response, $redirect_uri, $user_id = null)\n    {\n        $error = 'access_denied';\n        $error_message = 'The user denied access to your application';\n        $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $this->state, $error, $error_message);\n    }\n\n    /**\n     * We have made this protected so this class can be extended to add/modify\n     * these parameters\n     *\n     * @TODO: add dependency injection for the parameters in this method\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @param mixed $user_id\n     * @return array\n     */\n    protected function buildAuthorizeParameters($request, $response, $user_id)\n    {\n        // @TODO: we should be explicit with this in the future\n        $params = array(\n            'scope'         => $this->scope,\n            'state'         => $this->state,\n            'client_id'     => $this->client_id,\n            'redirect_uri'  => $this->redirect_uri,\n            'response_type' => $this->response_type,\n        );\n\n        return $params;\n    }\n\n    /**\n     * Validate the OAuth request\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return bool\n     */\n    public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        // Make sure a valid client id was supplied (we can not redirect because we were unable to verify the URI)\n        if (!$client_id = $request->query('client_id', $request->request('client_id'))) {\n            // We don't have a good URI to use\n            $response->setError(400, 'invalid_client', \"No client id supplied\");\n\n            return false;\n        }\n\n        // Get client details\n        if (!$clientData = $this->clientStorage->getClientDetails($client_id)) {\n            $response->setError(400, 'invalid_client', 'The client id supplied is invalid');\n\n            return false;\n        }\n\n        $registered_redirect_uri = isset($clientData['redirect_uri']) ? $clientData['redirect_uri'] : '';\n\n        // Make sure a valid redirect_uri was supplied. If specified, it must match the clientData URI.\n        // @see http://tools.ietf.org/html/rfc6749#section-3.1.2\n        // @see http://tools.ietf.org/html/rfc6749#section-4.1.2.1\n        // @see http://tools.ietf.org/html/rfc6749#section-4.2.2.1\n        if ($supplied_redirect_uri = $request->query('redirect_uri', $request->request('redirect_uri'))) {\n            // validate there is no fragment supplied\n            $parts = parse_url($supplied_redirect_uri);\n            if (isset($parts['fragment']) && $parts['fragment']) {\n                $response->setError(400, 'invalid_uri', 'The redirect URI must not contain a fragment');\n\n                return false;\n            }\n\n            // validate against the registered redirect uri(s) if available\n            if ($registered_redirect_uri && !$this->validateRedirectUri($supplied_redirect_uri, $registered_redirect_uri)) {\n                $response->setError(400, 'redirect_uri_mismatch', 'The redirect URI provided is missing or does not match', '#section-3.1.2');\n\n                return false;\n            }\n            $redirect_uri = $supplied_redirect_uri;\n        } else {\n            // use the registered redirect_uri if none has been supplied, if possible\n            if (!$registered_redirect_uri) {\n                $response->setError(400, 'invalid_uri', 'No redirect URI was supplied or stored');\n\n                return false;\n            }\n\n            if (count(explode(' ', $registered_redirect_uri)) > 1) {\n                $response->setError(400, 'invalid_uri', 'A redirect URI must be supplied when multiple redirect URIs are registered', '#section-3.1.2.3');\n\n                return false;\n            }\n            $redirect_uri = $registered_redirect_uri;\n        }\n\n        // Select the response type\n        $response_type = $request->query('response_type', $request->request('response_type'));\n\n        // for multiple-valued response types - make them alphabetical\n        if (false !== strpos($response_type, ' ')) {\n            $types = explode(' ', $response_type);\n            sort($types);\n            $response_type = ltrim(implode(' ', $types));\n        }\n\n        $state = $request->query('state', $request->request('state'));\n\n        // type and client_id are required\n        if (!$response_type || !in_array($response_type, $this->getValidResponseTypes())) {\n            $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'invalid_request', 'Invalid or missing response type', null);\n\n            return false;\n        }\n\n        if ($response_type == self::RESPONSE_TYPE_AUTHORIZATION_CODE) {\n            if (!isset($this->responseTypes['code'])) {\n                $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unsupported_response_type', 'authorization code grant type not supported', null);\n\n                return false;\n            }\n            if (!$this->clientStorage->checkRestrictedGrantType($client_id, 'authorization_code')) {\n                $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unauthorized_client', 'The grant type is unauthorized for this client_id', null);\n\n                return false;\n            }\n            if ($this->responseTypes['code']->enforceRedirect() && !$redirect_uri) {\n                $response->setError(400, 'redirect_uri_mismatch', 'The redirect URI is mandatory and was not supplied');\n\n                return false;\n            }\n        } else {\n            if (!$this->config['allow_implicit']) {\n                $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unsupported_response_type', 'implicit grant type not supported', null);\n\n                return false;\n            }\n            if (!$this->clientStorage->checkRestrictedGrantType($client_id, 'implicit')) {\n                $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'unauthorized_client', 'The grant type is unauthorized for this client_id', null);\n\n                return false;\n            }\n        }\n\n        // validate requested scope if it exists\n        $requestedScope = $this->scopeUtil->getScopeFromRequest($request);\n\n        if ($requestedScope) {\n            // restrict scope by client specific scope if applicable,\n            // otherwise verify the scope exists\n            $clientScope = $this->clientStorage->getClientScope($client_id);\n            if ((empty($clientScope) && !$this->scopeUtil->scopeExists($requestedScope))\n                || (!empty($clientScope) && !$this->scopeUtil->checkScope($requestedScope, $clientScope))) {\n                $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'invalid_scope', 'An unsupported scope was requested', null);\n\n                return false;\n            }\n        } else {\n            // use a globally-defined default scope\n            $defaultScope = $this->scopeUtil->getDefaultScope($client_id);\n\n            if (false === $defaultScope) {\n                $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $state, 'invalid_client', 'This application requires you specify a scope parameter', null);\n\n                return false;\n            }\n\n            $requestedScope = $defaultScope;\n        }\n\n        // Validate state parameter exists (if configured to enforce this)\n        if ($this->config['enforce_state'] && !$state) {\n            $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, null, 'invalid_request', 'The state parameter is required');\n\n            return false;\n        }\n\n        // save the input data and return true\n        $this->scope         = $requestedScope;\n        $this->state         = $state;\n        $this->client_id     = $client_id;\n        // Only save the SUPPLIED redirect URI (@see http://tools.ietf.org/html/rfc6749#section-4.1.3)\n        $this->redirect_uri  = $supplied_redirect_uri;\n        $this->response_type = $response_type;\n\n        return true;\n    }\n\n    /**\n     * Build the absolute URI based on supplied URI and parameters.\n     *\n     * @param string $uri    An absolute URI.\n     * @param array  $params Parameters to be append as GET.\n     *\n     * @return string\n     * An absolute URI with supplied parameters.\n     *\n     * @ingroup oauth2_section_4\n     */\n    private function buildUri($uri, $params)\n    {\n        $parse_url = parse_url($uri);\n\n        // Add our params to the parsed uri\n        foreach ($params as $k => $v) {\n            if (isset($parse_url[$k])) {\n                $parse_url[$k] .= \"&\" . http_build_query($v, '', '&');\n            } else {\n                $parse_url[$k] = http_build_query($v, '', '&');\n            }\n        }\n\n        // Put the uri back together\n        return\n              ((isset($parse_url[\"scheme\"])) ? $parse_url[\"scheme\"] . \"://\" : \"\")\n            . ((isset($parse_url[\"user\"])) ? $parse_url[\"user\"]\n            . ((isset($parse_url[\"pass\"])) ? \":\" . $parse_url[\"pass\"] : \"\") . \"@\" : \"\")\n            . ((isset($parse_url[\"host\"])) ? $parse_url[\"host\"] : \"\")\n            . ((isset($parse_url[\"port\"])) ? \":\" . $parse_url[\"port\"] : \"\")\n            . ((isset($parse_url[\"path\"])) ? $parse_url[\"path\"] : \"\")\n            . ((isset($parse_url[\"query\"]) && !empty($parse_url['query'])) ? \"?\" . $parse_url[\"query\"] : \"\")\n            . ((isset($parse_url[\"fragment\"])) ? \"#\" . $parse_url[\"fragment\"] : \"\")\n        ;\n    }\n\n    protected function getValidResponseTypes()\n    {\n        return array(\n            self::RESPONSE_TYPE_ACCESS_TOKEN,\n            self::RESPONSE_TYPE_AUTHORIZATION_CODE,\n        );\n    }\n\n    /**\n     * Internal method for validating redirect URI supplied\n     *\n     * @param string $inputUri The submitted URI to be validated\n     * @param string $registeredUriString The allowed URI(s) to validate against.  Can be a space-delimited string of URIs to\n     *                                    allow for multiple URIs\n     * @return bool\n     * @see http://tools.ietf.org/html/rfc6749#section-3.1.2\n     */\n    protected function validateRedirectUri($inputUri, $registeredUriString)\n    {\n        if (!$inputUri || !$registeredUriString) {\n            return false; // if either one is missing, assume INVALID\n        }\n\n        $registered_uris = preg_split('/\\s+/', $registeredUriString);\n        foreach ($registered_uris as $registered_uri) {\n            if ($this->config['require_exact_redirect_uri']) {\n                // the input uri is validated against the registered uri using exact match\n                if (strcmp($inputUri, $registered_uri) === 0) {\n                    return true;\n                }\n            } else {\n                $registered_uri_length = strlen($registered_uri);\n                if ($registered_uri_length === 0) {\n                    return false;\n                }\n\n                // the input uri is validated against the registered uri using case-insensitive match of the initial string\n                // i.e. additional query parameters may be applied\n                if (strcasecmp(substr($inputUri, 0, $registered_uri_length), $registered_uri) === 0) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Convenience method to access the scope\n     *\n     * @return string\n     */\n    public function getScope()\n    {\n        return $this->scope;\n    }\n\n    /**\n     * Convenience method to access the state\n     *\n     * @return int\n     */\n    public function getState()\n    {\n        return $this->state;\n    }\n\n    /**\n     * Convenience method to access the client id\n     *\n     * @return mixed\n     */\n    public function getClientId()\n    {\n        return $this->client_id;\n    }\n\n    /**\n     * Convenience method to access the redirect url\n     *\n     * @return string\n     */\n    public function getRedirectUri()\n    {\n        return $this->redirect_uri;\n    }\n\n    /**\n     * Convenience method to access the response type\n     *\n     * @return string\n     */\n    public function getResponseType()\n    {\n        return $this->response_type;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/AuthorizeControllerInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n *  This controller is called when a user should be authorized\n *  by an authorization server.  As OAuth2 does not handle\n *  authorization directly, this controller ensures the request is valid, but\n *  requires the application to determine the value of $is_authorized\n *\n *  @code\n *      $user_id = $this->somehowDetermineUserId();\n *      $is_authorized = $this->somehowDetermineUserAuthorization();\n *      $response = new OAuth2\\Response();\n *      $authorizeController->handleAuthorizeRequest(\n *          OAuth2\\Request::createFromGlobals(),\n *          $response,\n *          $is_authorized,\n *          $user_id\n *      );\n *      $response->send();\n * @endcode\n */\ninterface AuthorizeControllerInterface\n{\n    /**\n     * List of possible authentication response types.\n     * The \"authorization_code\" mechanism exclusively supports 'code'\n     * and the \"implicit\" mechanism exclusively supports 'token'.\n     *\n     * @var string\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1.1\n     * @see http://tools.ietf.org/html/rfc6749#section-4.2.1\n     */\n    const RESPONSE_TYPE_AUTHORIZATION_CODE = 'code';\n    const RESPONSE_TYPE_ACCESS_TOKEN = 'token';\n\n    /**\n     * Handle the OAuth request\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @param $is_authorized\n     * @param null $user_id\n     * @return mixed\n     */\n    public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null);\n\n    /**\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return bool\n     */\n    public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceController.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\TokenType\\TokenTypeInterface;\nuse OAuth2\\Storage\\AccessTokenInterface;\nuse OAuth2\\ScopeInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\nuse OAuth2\\Scope;\n\n/**\n * @see ResourceControllerInterface\n */\nclass ResourceController implements ResourceControllerInterface\n{\n    /**\n     * @var array\n     */\n    private $token;\n\n    /**\n     * @var TokenTypeInterface\n     */\n    protected $tokenType;\n\n    /**\n     * @var AccessTokenInterface\n     */\n    protected $tokenStorage;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @var ScopeInterface\n     */\n    protected $scopeUtil;\n\n    /**\n     * Constructor\n     *\n     * @param TokenTypeInterface   $tokenType\n     * @param AccessTokenInterface $tokenStorage\n     * @param array                $config\n     * @param ScopeInterface       $scopeUtil\n     */\n    public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, $config = array(), ScopeInterface $scopeUtil = null)\n    {\n        $this->tokenType = $tokenType;\n        $this->tokenStorage = $tokenStorage;\n\n        $this->config = array_merge(array(\n            'www_realm' => 'Service',\n        ), $config);\n\n        if (is_null($scopeUtil)) {\n            $scopeUtil = new Scope();\n        }\n        $this->scopeUtil = $scopeUtil;\n    }\n\n    /**\n     * Verify the resource request\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @param null              $scope\n     * @return bool\n     */\n    public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response, $scope = null)\n    {\n        $token = $this->getAccessTokenData($request, $response);\n\n        // Check if we have token data\n        if (is_null($token)) {\n            return false;\n        }\n\n        /**\n         * Check scope, if provided\n         * If token doesn't have a scope, it's null/empty, or it's insufficient, then throw 403\n         * @see http://tools.ietf.org/html/rfc6750#section-3.1\n         */\n        if ($scope && (!isset($token[\"scope\"]) || !$token[\"scope\"] || !$this->scopeUtil->checkScope($scope, $token[\"scope\"]))) {\n            $response->setError(403, 'insufficient_scope', 'The request requires higher privileges than provided by the access token');\n            $response->addHttpHeaders(array(\n                'WWW-Authenticate' => sprintf('%s realm=\"%s\", scope=\"%s\", error=\"%s\", error_description=\"%s\"',\n                    $this->tokenType->getTokenType(),\n                    $this->config['www_realm'],\n                    $scope,\n                    $response->getParameter('error'),\n                    $response->getParameter('error_description')\n                )\n            ));\n\n            return false;\n        }\n\n        // allow retrieval of the token\n        $this->token = $token;\n\n        return (bool) $token;\n    }\n\n    /**\n     * Get access token data.\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @return array|null\n     */\n    public function getAccessTokenData(RequestInterface $request, ResponseInterface $response)\n    {\n        // Get the token parameter\n        if ($token_param = $this->tokenType->getAccessTokenParameter($request, $response)) {\n            // Get the stored token data (from the implementing subclass)\n            // Check we have a well formed token\n            // Check token expiration (expires is a mandatory paramter)\n            if (!$token = $this->tokenStorage->getAccessToken($token_param)) {\n                $response->setError(401, 'invalid_token', 'The access token provided is invalid');\n            } elseif (!isset($token[\"expires\"]) || !isset($token[\"client_id\"])) {\n                $response->setError(401, 'malformed_token', 'Malformed token (missing \"expires\")');\n            } elseif (time() > $token[\"expires\"]) {\n                $response->setError(401, 'invalid_token', 'The access token provided has expired');\n            } else {\n                return $token;\n            }\n        }\n\n        $authHeader = sprintf('%s realm=\"%s\"', $this->tokenType->getTokenType(), $this->config['www_realm']);\n\n        if ($error = $response->getParameter('error')) {\n            $authHeader = sprintf('%s, error=\"%s\"', $authHeader, $error);\n            if ($error_description = $response->getParameter('error_description')) {\n                $authHeader = sprintf('%s, error_description=\"%s\"', $authHeader, $error_description);\n            }\n        }\n\n        $response->addHttpHeaders(array('WWW-Authenticate' => $authHeader));\n\n        return null;\n    }\n\n    /**\n     * convenience method to allow retrieval of the token.\n     *\n     * @return array\n     */\n    public function getToken()\n    {\n        return $this->token;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/ResourceControllerInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n *  This controller is called when a \"resource\" is requested.\n *  call verifyResourceRequest in order to determine if the request\n *  contains a valid token.\n *\n * @code\n *     if (!$resourceController->verifyResourceRequest(OAuth2\\Request::createFromGlobals(), $response = new OAuth2\\Response())) {\n *         $response->send(); // authorization failed\n *         exit();\n *     }\n *     return json_encode($resource); // valid token!  Send the stuff!\n * @endcode\n */\ninterface ResourceControllerInterface\n{\n    /**\n     * Verify the resource request\n     *\n     * @param RequestInterface  $request  - Request object\n     * @param ResponseInterface $response - Response object\n     * @param string            $scope\n     * @return mixed\n     */\n    public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response, $scope = null);\n\n    /**\n     * Get access token data.\n     *\n     * @param RequestInterface  $request  - Request object\n     * @param ResponseInterface $response - Response object\n     * @return mixed\n     */\n    public function getAccessTokenData(RequestInterface $request, ResponseInterface $response);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenController.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface;\nuse OAuth2\\GrantType\\GrantTypeInterface;\nuse OAuth2\\ScopeInterface;\nuse OAuth2\\Scope;\nuse OAuth2\\Storage\\ClientInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\nuse InvalidArgumentException;\nuse LogicException;\nuse RuntimeException;\n\n/**\n * @see TokenControllerInterface\n */\nclass TokenController implements TokenControllerInterface\n{\n    /**\n     * @var AccessTokenInterface\n     */\n    protected $accessToken;\n\n    /**\n     * @var array<GrantTypeInterface>\n     */\n    protected $grantTypes;\n\n    /**\n     * @var ClientAssertionTypeInterface\n     */\n    protected $clientAssertionType;\n\n    /**\n     * @var ScopeInterface\n     */\n    protected $scopeUtil;\n\n    /**\n     * @var ClientInterface\n     */\n    protected $clientStorage;\n\n    /**\n     * Constructor\n     *\n     * @param AccessTokenInterface         $accessToken\n     * @param ClientInterface              $clientStorage\n     * @param array                        $grantTypes\n     * @param ClientAssertionTypeInterface $clientAssertionType\n     * @param ScopeInterface               $scopeUtil\n     * @throws InvalidArgumentException\n     */\n    public function __construct(AccessTokenInterface $accessToken, ClientInterface $clientStorage, array $grantTypes = array(), ClientAssertionTypeInterface $clientAssertionType = null, ScopeInterface $scopeUtil = null)\n    {\n        if (is_null($clientAssertionType)) {\n            foreach ($grantTypes as $grantType) {\n                if (!$grantType instanceof ClientAssertionTypeInterface) {\n                    throw new InvalidArgumentException('You must supply an instance of OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface or only use grant types which implement OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface');\n                }\n            }\n        }\n        $this->clientAssertionType = $clientAssertionType;\n        $this->accessToken = $accessToken;\n        $this->clientStorage = $clientStorage;\n        foreach ($grantTypes as $grantType) {\n            $this->addGrantType($grantType);\n        }\n\n        if (is_null($scopeUtil)) {\n            $scopeUtil = new Scope();\n        }\n        $this->scopeUtil = $scopeUtil;\n    }\n\n    /**\n     * Handle the token request.\n     *\n     * @param RequestInterface  $request  - Request object to grant access token\n     * @param ResponseInterface $response - Response object\n     */\n    public function handleTokenRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if ($token = $this->grantAccessToken($request, $response)) {\n            // @see http://tools.ietf.org/html/rfc6749#section-5.1\n            // server MUST disable caching in headers when tokens are involved\n            $response->setStatusCode(200);\n            $response->addParameters($token);\n            $response->addHttpHeaders(array(\n                'Cache-Control' => 'no-store',\n                'Pragma' => 'no-cache',\n                'Content-Type' => 'application/json'\n            ));\n        }\n    }\n\n    /**\n     * Grant or deny a requested access token.\n     * This would be called from the \"/token\" endpoint as defined in the spec.\n     * You can call your endpoint whatever you want.\n     *\n     * @param RequestInterface  $request  - Request object to grant access token\n     * @param ResponseInterface $response - Response object\n     *\n     * @return bool|null|array\n     *\n     * @throws \\InvalidArgumentException\n     * @throws \\LogicException\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     * @see http://tools.ietf.org/html/rfc6749#section-10.6\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1.3\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function grantAccessToken(RequestInterface $request, ResponseInterface $response)\n    {\n        if (strtolower($request->server('REQUEST_METHOD')) === 'options') {\n            $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));\n\n            return null;\n        }\n\n        if (strtolower($request->server('REQUEST_METHOD')) !== 'post') {\n            $response->setError(405, 'invalid_request', 'The request method must be POST when requesting an access token', '#section-3.2');\n            $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));\n\n            return null;\n        }\n\n        /**\n         * Determine grant type from request\n         * and validate the request for that grant type\n         */\n        if (!$grantTypeIdentifier = $request->request('grant_type')) {\n            $response->setError(400, 'invalid_request', 'The grant type was not specified in the request');\n\n            return null;\n        }\n\n        if (!isset($this->grantTypes[$grantTypeIdentifier])) {\n            /* TODO: If this is an OAuth2 supported grant type that we have chosen not to implement, throw a 501 Not Implemented instead */\n            $response->setError(400, 'unsupported_grant_type', sprintf('Grant type \"%s\" not supported', $grantTypeIdentifier));\n\n            return null;\n        }\n\n        /** @var GrantTypeInterface $grantType */\n        $grantType = $this->grantTypes[$grantTypeIdentifier];\n\n        /**\n         * Retrieve the client information from the request\n         * ClientAssertionTypes allow for grant types which also assert the client data\n         * in which case ClientAssertion is handled in the validateRequest method\n         *\n         * @see \\OAuth2\\GrantType\\JWTBearer\n         * @see \\OAuth2\\GrantType\\ClientCredentials\n         */\n        if (!$grantType instanceof ClientAssertionTypeInterface) {\n            if (!$this->clientAssertionType->validateRequest($request, $response)) {\n                return null;\n            }\n            $clientId = $this->clientAssertionType->getClientId();\n        }\n\n        /**\n         * Retrieve the grant type information from the request\n         * The GrantTypeInterface object handles all validation\n         * If the object is an instance of ClientAssertionTypeInterface,\n         * That logic is handled here as well\n         */\n        if (!$grantType->validateRequest($request, $response)) {\n            return null;\n        }\n\n        if ($grantType instanceof ClientAssertionTypeInterface) {\n            $clientId = $grantType->getClientId();\n        } else {\n            // validate the Client ID (if applicable)\n            if (!is_null($storedClientId = $grantType->getClientId()) && $storedClientId != $clientId) {\n                $response->setError(400, 'invalid_grant', sprintf('%s doesn\\'t exist or is invalid for the client', $grantTypeIdentifier));\n\n                return null;\n            }\n        }\n\n        /**\n         * Validate the client can use the requested grant type\n         */\n        if (!$this->clientStorage->checkRestrictedGrantType($clientId, $grantTypeIdentifier)) {\n            $response->setError(400, 'unauthorized_client', 'The grant type is unauthorized for this client_id');\n\n            return false;\n        }\n\n        /**\n         * Validate the scope of the token\n         *\n         * requestedScope - the scope specified in the token request\n         * availableScope - the scope associated with the grant type\n         *  ex: in the case of the \"Authorization Code\" grant type,\n         *  the scope is specified in the authorize request\n         *\n         * @see http://tools.ietf.org/html/rfc6749#section-3.3\n         */\n        $requestedScope = $this->scopeUtil->getScopeFromRequest($request);\n        $availableScope = $grantType->getScope();\n\n        if ($requestedScope) {\n            // validate the requested scope\n            if ($availableScope) {\n                if (!$this->scopeUtil->checkScope($requestedScope, $availableScope)) {\n                    $response->setError(400, 'invalid_scope', 'The scope requested is invalid for this request');\n\n                    return null;\n                }\n            } else {\n                // validate the client has access to this scope\n                if ($clientScope = $this->clientStorage->getClientScope($clientId)) {\n                    if (!$this->scopeUtil->checkScope($requestedScope, $clientScope)) {\n                        $response->setError(400, 'invalid_scope', 'The scope requested is invalid for this client');\n\n                        return false;\n                    }\n                } elseif (!$this->scopeUtil->scopeExists($requestedScope)) {\n                    $response->setError(400, 'invalid_scope', 'An unsupported scope was requested');\n\n                    return null;\n                }\n            }\n        } elseif ($availableScope) {\n            // use the scope associated with this grant type\n            $requestedScope = $availableScope;\n        } else {\n            // use a globally-defined default scope\n            $defaultScope = $this->scopeUtil->getDefaultScope($clientId);\n\n            // \"false\" means default scopes are not allowed\n            if (false === $defaultScope) {\n                $response->setError(400, 'invalid_scope', 'This application requires you specify a scope parameter');\n\n                return null;\n            }\n\n            $requestedScope = $defaultScope;\n        }\n\n        return $grantType->createAccessToken($this->accessToken, $clientId, $grantType->getUserId(), $requestedScope);\n    }\n\n    /**\n     * Add grant type\n     *\n     * @param GrantTypeInterface $grantType  - the grant type to add for the specified identifier\n     * @param string|null        $identifier - a string passed in as \"grant_type\" in the response that will call this grantType\n     */\n    public function addGrantType(GrantTypeInterface $grantType, $identifier = null)\n    {\n        if (is_null($identifier) || is_numeric($identifier)) {\n            $identifier = $grantType->getQueryStringIdentifier();\n        }\n\n        $this->grantTypes[$identifier] = $grantType;\n    }\n\n    /**\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     */\n    public function handleRevokeRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if ($this->revokeToken($request, $response)) {\n            $response->setStatusCode(200);\n            $response->addParameters(array('revoked' => true));\n        }\n    }\n\n    /**\n     * Revoke a refresh or access token. Returns true on success and when tokens are invalid\n     *\n     * Note: invalid tokens do not cause an error response since the client\n     * cannot handle such an error in a reasonable way.  Moreover, the\n     * purpose of the revocation request, invalidating the particular token,\n     * is already achieved.\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @throws RuntimeException\n     * @return bool|null\n     */\n    public function revokeToken(RequestInterface $request, ResponseInterface $response)\n    {\n        if (strtolower($request->server('REQUEST_METHOD')) === 'options') {\n            $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));\n\n            return null;\n        }\n\n        if (strtolower($request->server('REQUEST_METHOD')) !== 'post') {\n            $response->setError(405, 'invalid_request', 'The request method must be POST when revoking an access token', '#section-3.2');\n            $response->addHttpHeaders(array('Allow' => 'POST, OPTIONS'));\n\n            return null;\n        }\n\n        $token_type_hint = $request->request('token_type_hint');\n        if (!in_array($token_type_hint, array(null, 'access_token', 'refresh_token'), true)) {\n            $response->setError(400, 'invalid_request', 'Token type hint must be either \\'access_token\\' or \\'refresh_token\\'');\n\n            return null;\n        }\n\n        $token = $request->request('token');\n        if ($token === null) {\n            $response->setError(400, 'invalid_request', 'Missing token parameter to revoke');\n\n            return null;\n        }\n\n        // @todo remove this check for v2.0\n        if (!method_exists($this->accessToken, 'revokeToken')) {\n            $class = get_class($this->accessToken);\n            throw new RuntimeException(\"AccessToken {$class} does not implement required revokeToken method\");\n        }\n\n        $this->accessToken->revokeToken($token, $token_type_hint);\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Controller/TokenControllerInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n *  This controller is called when a token is being requested.\n *  it is called to handle all grant types the application supports.\n *  It also validates the client's credentials\n *\n * @code\n *     $tokenController->handleTokenRequest(OAuth2\\Request::createFromGlobals(), $response = new OAuth2\\Response());\n *     $response->send();\n * @endcode\n */\ninterface TokenControllerInterface\n{\n    /**\n     * Handle the token request\n     *\n     * @param RequestInterface $request   - The current http request\n     * @param ResponseInterface $response - An instance of OAuth2\\ResponseInterface to contain the response data\n     */\n    public function handleTokenRequest(RequestInterface $request, ResponseInterface $response);\n\n    /**\n     * Grant or deny a requested access token.\n     * This would be called from the \"/token\" endpoint as defined in the spec.\n     * You can call your endpoint whatever you want.\n     *\n     * @param RequestInterface  $request  - Request object to grant access token\n     * @param ResponseInterface $response - Response object\n     *\n     * @return mixed\n     */\n    public function grantAccessToken(RequestInterface $request, ResponseInterface $response);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/EncryptionInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Encryption;\n\ninterface EncryptionInterface\n{\n    /**\n     * @param $payload\n     * @param $key\n     * @param null $algorithm\n     * @return mixed\n     */\n    public function encode($payload, $key, $algorithm = null);\n\n    /**\n     * @param $payload\n     * @param $key\n     * @param null $algorithm\n     * @return mixed\n     */\n    public function decode($payload, $key, $algorithm = null);\n\n    /**\n     * @param $data\n     * @return mixed\n     */\n    public function urlSafeB64Encode($data);\n\n    /**\n     * @param $b64\n     * @return mixed\n     */\n    public function urlSafeB64Decode($b64);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/FirebaseJwt.php",
    "content": "<?php\n\nnamespace OAuth2\\Encryption;\n\n/**\n * Bridge file to use the firebase/php-jwt package for JWT encoding and decoding.\n * @author Francis Chuang <francis.chuang@gmail.com>\n */\nclass FirebaseJwt implements EncryptionInterface\n{\n    public function __construct()\n    {\n        if (!class_exists('\\JWT')) {\n            throw new \\ErrorException('firebase/php-jwt must be installed to use this feature. You can do this by running \"composer require firebase/php-jwt\"');\n        }\n    }\n\n    public function encode($payload, $key, $alg = 'HS256', $keyId = null)\n    {\n        return \\JWT::encode($payload, $key, $alg, $keyId);\n    }\n\n    public function decode($jwt, $key = null, $allowedAlgorithms = null)\n    {\n        try {\n\n            //Maintain BC: Do not verify if no algorithms are passed in.\n            if (!$allowedAlgorithms) {\n                $key = null;\n            }\n\n            return (array)\\JWT::decode($jwt, $key, $allowedAlgorithms);\n        } catch (\\Exception $e) {\n            return false;\n        }\n    }\n\n    public function urlSafeB64Encode($data)\n    {\n        return \\JWT::urlsafeB64Encode($data);\n    }\n\n    public function urlSafeB64Decode($b64)\n    {\n        return \\JWT::urlsafeB64Decode($b64);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Encryption/Jwt.php",
    "content": "<?php\n\nnamespace OAuth2\\Encryption;\n\nuse Exception;\nuse InvalidArgumentException;\n\n/**\n * @link https://github.com/F21/jwt\n * @author F21\n */\nclass Jwt implements EncryptionInterface\n{\n    /**\n     * @param $payload\n     * @param $key\n     * @param string $algo\n     * @return string\n     */\n    public function encode($payload, $key, $algo = 'HS256')\n    {\n        $header = $this->generateJwtHeader($payload, $algo);\n\n        $segments = array(\n            $this->urlSafeB64Encode(json_encode($header)),\n            $this->urlSafeB64Encode(json_encode($payload))\n        );\n\n        $signing_input = implode('.', $segments);\n\n        $signature = $this->sign($signing_input, $key, $algo);\n        $segments[] = $this->urlsafeB64Encode($signature);\n\n        return implode('.', $segments);\n    }\n\n    /**\n     * @param string      $jwt\n     * @param null        $key\n     * @param array|bool  $allowedAlgorithms\n     * @return bool|mixed\n     */\n    public function decode($jwt, $key = null, $allowedAlgorithms = true)\n    {\n        if (!strpos($jwt, '.')) {\n            return false;\n        }\n\n        $tks = explode('.', $jwt);\n\n        if (count($tks) != 3) {\n            return false;\n        }\n\n        list($headb64, $payloadb64, $cryptob64) = $tks;\n\n        if (null === ($header = json_decode($this->urlSafeB64Decode($headb64), true))) {\n            return false;\n        }\n\n        if (null === $payload = json_decode($this->urlSafeB64Decode($payloadb64), true)) {\n            return false;\n        }\n\n        $sig = $this->urlSafeB64Decode($cryptob64);\n\n        if ((bool) $allowedAlgorithms) {\n            if (!isset($header['alg'])) {\n                return false;\n            }\n\n            // check if bool arg supplied here to maintain BC\n            if (is_array($allowedAlgorithms) && !in_array($header['alg'], $allowedAlgorithms)) {\n                return false;\n            }\n\n            if (!$this->verifySignature($sig, \"$headb64.$payloadb64\", $key, $header['alg'])) {\n                return false;\n            }\n        }\n\n        return $payload;\n    }\n\n    /**\n     * @param $signature\n     * @param $input\n     * @param $key\n     * @param string $algo\n     * @return bool\n     * @throws InvalidArgumentException\n     */\n    private function verifySignature($signature, $input, $key, $algo = 'HS256')\n    {\n        // use constants when possible, for HipHop support\n        switch ($algo) {\n            case'HS256':\n            case'HS384':\n            case'HS512':\n                return $this->hash_equals(\n                    $this->sign($input, $key, $algo),\n                    $signature\n                );\n\n            case 'RS256':\n                return openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA256') ? OPENSSL_ALGO_SHA256 : 'sha256')  === 1;\n\n            case 'RS384':\n                return @openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA384') ? OPENSSL_ALGO_SHA384 : 'sha384') === 1;\n\n            case 'RS512':\n                return @openssl_verify($input, $signature, $key, defined('OPENSSL_ALGO_SHA512') ? OPENSSL_ALGO_SHA512 : 'sha512') === 1;\n\n            default:\n                throw new InvalidArgumentException(\"Unsupported or invalid signing algorithm.\");\n        }\n    }\n\n    /**\n     * @param $input\n     * @param $key\n     * @param string $algo\n     * @return string\n     * @throws Exception\n     */\n    private function sign($input, $key, $algo = 'HS256')\n    {\n        switch ($algo) {\n            case 'HS256':\n                return hash_hmac('sha256', $input, $key, true);\n\n            case 'HS384':\n                return hash_hmac('sha384', $input, $key, true);\n\n            case 'HS512':\n                return hash_hmac('sha512', $input, $key, true);\n\n            case 'RS256':\n                return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA256') ? OPENSSL_ALGO_SHA256 : 'sha256');\n\n            case 'RS384':\n                return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA384') ? OPENSSL_ALGO_SHA384 : 'sha384');\n\n            case 'RS512':\n                return $this->generateRSASignature($input, $key, defined('OPENSSL_ALGO_SHA512') ? OPENSSL_ALGO_SHA512 : 'sha512');\n\n            default:\n                throw new Exception(\"Unsupported or invalid signing algorithm.\");\n        }\n    }\n\n    /**\n     * @param $input\n     * @param $key\n     * @param string $algo\n     * @return mixed\n     * @throws Exception\n     */\n    private function generateRSASignature($input, $key, $algo)\n    {\n        if (!openssl_sign($input, $signature, $key, $algo)) {\n            throw new Exception(\"Unable to sign data.\");\n        }\n\n        return $signature;\n    }\n\n    /**\n     * @param string $data\n     * @return string\n     */\n    public function urlSafeB64Encode($data)\n    {\n        $b64 = base64_encode($data);\n        $b64 = str_replace(array('+', '/', \"\\r\", \"\\n\", '='),\n                array('-', '_'),\n                $b64);\n\n        return $b64;\n    }\n\n    /**\n     * @param string $b64\n     * @return mixed|string\n     */\n    public function urlSafeB64Decode($b64)\n    {\n        $b64 = str_replace(array('-', '_'),\n                array('+', '/'),\n                $b64);\n\n        return base64_decode($b64);\n    }\n\n    /**\n     * Override to create a custom header\n     */\n    protected function generateJwtHeader($payload, $algorithm)\n    {\n        return array(\n            'typ' => 'JWT',\n            'alg' => $algorithm,\n        );\n    }\n\n    /**\n     * @param string $a\n     * @param string $b\n     * @return bool\n     */\n    protected function hash_equals($a, $b)\n    {\n        if (function_exists('hash_equals')) {\n            return hash_equals($a, $b);\n        }\n        $diff = strlen($a) ^ strlen($b);\n        for ($i = 0; $i < strlen($a) && $i < strlen($b); $i++) {\n            $diff |= ord($a[$i]) ^ ord($b[$i]);\n        }\n\n        return $diff === 0;\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/AuthorizationCode.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\AuthorizationCodeInterface;\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\nuse Exception;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass AuthorizationCode implements GrantTypeInterface\n{\n    /**\n     * @var AuthorizationCodeInterface\n     */\n    protected $storage;\n\n    /**\n     * @var array\n     */\n    protected $authCode;\n\n    /**\n     * @param AuthorizationCodeInterface $storage - REQUIRED Storage class for retrieving authorization code information\n     */\n    public function __construct(AuthorizationCodeInterface $storage)\n    {\n        $this->storage = $storage;\n    }\n\n    /**\n     * @return string\n     */\n    public function getQueryStringIdentifier()\n    {\n        return 'authorization_code';\n    }\n\n    /**\n     * Validate the OAuth request\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @return bool\n     * @throws Exception\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!$request->request('code')) {\n            $response->setError(400, 'invalid_request', 'Missing parameter: \"code\" is required');\n\n            return false;\n        }\n\n        $code = $request->request('code');\n        if (!$authCode = $this->storage->getAuthorizationCode($code)) {\n            $response->setError(400, 'invalid_grant', 'Authorization code doesn\\'t exist or is invalid for the client');\n\n            return false;\n        }\n\n        /*\n         * 4.1.3 - ensure that the \"redirect_uri\" parameter is present if the \"redirect_uri\" parameter was included in the initial authorization request\n         * @uri - http://tools.ietf.org/html/rfc6749#section-4.1.3\n         */\n        if (isset($authCode['redirect_uri']) && $authCode['redirect_uri']) {\n            if (!$request->request('redirect_uri') || urldecode($request->request('redirect_uri')) != urldecode($authCode['redirect_uri'])) {\n                $response->setError(400, 'redirect_uri_mismatch', \"The redirect URI is missing or do not match\", \"#section-4.1.3\");\n\n                return false;\n            }\n        }\n\n        if (!isset($authCode['expires'])) {\n            throw new \\Exception('Storage must return authcode with a value for \"expires\"');\n        }\n\n        if ($authCode[\"expires\"] < time()) {\n            $response->setError(400, 'invalid_grant', \"The authorization code has expired\");\n\n            return false;\n        }\n\n        if (!isset($authCode['code'])) {\n            $authCode['code'] = $code; // used to expire the code after the access token is granted\n        }\n\n        $this->authCode = $authCode;\n\n        return true;\n    }\n\n    /**\n     * Get the client id\n     *\n     * @return mixed\n     */\n    public function getClientId()\n    {\n        return $this->authCode['client_id'];\n    }\n\n    /**\n     * Get the scope\n     *\n     * @return string\n     */\n    public function getScope()\n    {\n        return isset($this->authCode['scope']) ? $this->authCode['scope'] : null;\n    }\n\n    /**\n     * Get the user id\n     *\n     * @return mixed\n     */\n    public function getUserId()\n    {\n        return isset($this->authCode['user_id']) ? $this->authCode['user_id'] : null;\n    }\n\n    /**\n     * Create access token\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)\n    {\n        $token = $accessToken->createAccessToken($client_id, $user_id, $scope);\n        $this->storage->expireAuthorizationCode($this->authCode['code']);\n\n        return $token;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/ClientCredentials.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\ClientAssertionType\\HttpBasic;\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\Storage\\ClientCredentialsInterface;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n *\n * @see HttpBasic\n */\nclass ClientCredentials extends HttpBasic implements GrantTypeInterface\n{\n    /**\n     * @var array\n     */\n    private $clientData;\n\n    /**\n     * @param ClientCredentialsInterface $storage\n     * @param array $config\n     */\n    public function __construct(ClientCredentialsInterface $storage, array $config = array())\n    {\n        /**\n         * The client credentials grant type MUST only be used by confidential clients\n         *\n         * @see http://tools.ietf.org/html/rfc6749#section-4.4\n         */\n        $config['allow_public_clients'] = false;\n\n        parent::__construct($storage, $config);\n    }\n\n    /**\n     * Get query string identifier\n     *\n     * @return string\n     */\n    public function getQueryStringIdentifier()\n    {\n        return 'client_credentials';\n    }\n\n    /**\n     * Get scope\n     *\n     * @return string|null\n     */\n    public function getScope()\n    {\n        $this->loadClientData();\n\n        return isset($this->clientData['scope']) ? $this->clientData['scope'] : null;\n    }\n\n    /**\n     * Get user id\n     *\n     * @return mixed\n     */\n    public function getUserId()\n    {\n        $this->loadClientData();\n\n        return isset($this->clientData['user_id']) ? $this->clientData['user_id'] : null;\n    }\n\n    /**\n     * Create access token\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)\n    {\n        /**\n         * Client Credentials Grant does NOT include a refresh token\n         *\n         * @see http://tools.ietf.org/html/rfc6749#section-4.4.3\n         */\n        $includeRefreshToken = false;\n\n        return $accessToken->createAccessToken($client_id, $user_id, $scope, $includeRefreshToken);\n    }\n\n    private function loadClientData()\n    {\n        if (!$this->clientData) {\n            $this->clientData = $this->storage->getClientDetails($this->getClientId());\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/GrantTypeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n * Interface for all OAuth2 Grant Types\n */\ninterface GrantTypeInterface\n{\n    /**\n     * Get query string identifier\n     *\n     * @return string\n     */\n    public function getQueryStringIdentifier();\n\n    /**\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return mixed\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response);\n\n    /**\n     * Get client id\n     *\n     * @return mixed\n     */\n    public function getClientId();\n\n    /**\n     * Get user id\n     *\n     * @return mixed\n     */\n    public function getUserId();\n\n    /**\n     * Get scope\n     *\n     * @return string|null\n     */\n    public function getScope();\n\n    /**\n     * Create access token\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/JwtBearer.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface;\nuse OAuth2\\Storage\\JwtBearerInterface;\nuse OAuth2\\Encryption\\Jwt;\nuse OAuth2\\Encryption\\EncryptionInterface;\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n * The JWT bearer authorization grant implements JWT (JSON Web Tokens) as a grant type per the IETF draft.\n *\n * @see http://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-04#section-4\n *\n * @author F21\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass JwtBearer implements GrantTypeInterface, ClientAssertionTypeInterface\n{\n    private $jwt;\n\n    protected $storage;\n    protected $audience;\n    protected $jwtUtil;\n    protected $allowedAlgorithms;\n\n    /**\n     * Creates an instance of the JWT bearer grant type.\n     *\n     * @param JwtBearerInterface      $storage  - A valid storage interface that implements storage hooks for the JWT\n     *                                            bearer grant type.\n     * @param string                  $audience - The audience to validate the token against. This is usually the full\n     *                                            URI of the OAuth token requests endpoint.\n     * @param EncryptionInterface|JWT $jwtUtil  - OPTONAL The class used to decode, encode and verify JWTs.\n     * @param array                   $config\n     */\n    public function __construct(JwtBearerInterface $storage, $audience, EncryptionInterface $jwtUtil = null, array $config = array())\n    {\n        $this->storage = $storage;\n        $this->audience = $audience;\n\n        if (is_null($jwtUtil)) {\n            $jwtUtil = new Jwt();\n        }\n\n        $this->config = array_merge(array(\n            'allowed_algorithms' => array('RS256', 'RS384', 'RS512')\n        ), $config);\n\n        $this->jwtUtil = $jwtUtil;\n\n        $this->allowedAlgorithms = $this->config['allowed_algorithms'];\n    }\n\n    /**\n     * Returns the grant_type get parameter to identify the grant type request as JWT bearer authorization grant.\n     *\n     * @return string - The string identifier for grant_type.\n     *\n     * @see GrantTypeInterface::getQueryStringIdentifier()\n     */\n    public function getQueryStringIdentifier()\n    {\n        return 'urn:ietf:params:oauth:grant-type:jwt-bearer';\n    }\n\n    /**\n     * Validates the data from the decoded JWT.\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @return bool|mixed|null TRUE if the JWT request is valid and can be decoded. Otherwise, FALSE is returned.@see GrantTypeInterface::getTokenData()\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!$request->request(\"assertion\")) {\n            $response->setError(400, 'invalid_request', 'Missing parameters: \"assertion\" required');\n\n            return null;\n        }\n\n        // Store the undecoded JWT for later use\n        $undecodedJWT = $request->request('assertion');\n\n        // Decode the JWT\n        $jwt = $this->jwtUtil->decode($request->request('assertion'), null, false);\n\n        if (!$jwt) {\n            $response->setError(400, 'invalid_request', \"JWT is malformed\");\n\n            return null;\n        }\n\n        // ensure these properties contain a value\n        // @todo: throw malformed error for missing properties\n        $jwt = array_merge(array(\n            'scope' => null,\n            'iss' => null,\n            'sub' => null,\n            'aud' => null,\n            'exp' => null,\n            'nbf' => null,\n            'iat' => null,\n            'jti' => null,\n            'typ' => null,\n        ), $jwt);\n\n        if (!isset($jwt['iss'])) {\n            $response->setError(400, 'invalid_grant', \"Invalid issuer (iss) provided\");\n\n            return null;\n        }\n\n        if (!isset($jwt['sub'])) {\n            $response->setError(400, 'invalid_grant', \"Invalid subject (sub) provided\");\n\n            return null;\n        }\n\n        if (!isset($jwt['exp'])) {\n            $response->setError(400, 'invalid_grant', \"Expiration (exp) time must be present\");\n\n            return null;\n        }\n\n        // Check expiration\n        if (ctype_digit($jwt['exp'])) {\n            if ($jwt['exp'] <= time()) {\n                $response->setError(400, 'invalid_grant', \"JWT has expired\");\n\n                return null;\n            }\n        } else {\n            $response->setError(400, 'invalid_grant', \"Expiration (exp) time must be a unix time stamp\");\n\n            return null;\n        }\n\n        // Check the not before time\n        if ($notBefore = $jwt['nbf']) {\n            if (ctype_digit($notBefore)) {\n                if ($notBefore > time()) {\n                    $response->setError(400, 'invalid_grant', \"JWT cannot be used before the Not Before (nbf) time\");\n\n                    return null;\n                }\n            } else {\n                $response->setError(400, 'invalid_grant', \"Not Before (nbf) time must be a unix time stamp\");\n\n                return null;\n            }\n        }\n\n        // Check the audience if required to match\n        if (!isset($jwt['aud']) || ($jwt['aud'] != $this->audience)) {\n            $response->setError(400, 'invalid_grant', \"Invalid audience (aud)\");\n\n            return null;\n        }\n\n        // Check the jti (nonce)\n        // @see http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-13#section-4.1.7\n        if (isset($jwt['jti'])) {\n            $jti = $this->storage->getJti($jwt['iss'], $jwt['sub'], $jwt['aud'], $jwt['exp'], $jwt['jti']);\n\n            //Reject if jti is used and jwt is still valid (exp parameter has not expired).\n            if ($jti && $jti['expires'] > time()) {\n                $response->setError(400, 'invalid_grant', \"JSON Token Identifier (jti) has already been used\");\n\n                return null;\n            } else {\n                $this->storage->setJti($jwt['iss'], $jwt['sub'], $jwt['aud'], $jwt['exp'], $jwt['jti']);\n            }\n        }\n\n        // Get the iss's public key\n        // @see http://tools.ietf.org/html/draft-ietf-oauth-json-web-token-06#section-4.1.1\n        if (!$key = $this->storage->getClientKey($jwt['iss'], $jwt['sub'])) {\n            $response->setError(400, 'invalid_grant', \"Invalid issuer (iss) or subject (sub) provided\");\n\n            return null;\n        }\n\n        // Verify the JWT\n        if (!$this->jwtUtil->decode($undecodedJWT, $key, $this->allowedAlgorithms)) {\n            $response->setError(400, 'invalid_grant', \"JWT failed signature verification\");\n\n            return null;\n        }\n\n        $this->jwt = $jwt;\n\n        return true;\n    }\n\n    /**\n     * Get client id\n     *\n     * @return mixed\n     */\n    public function getClientId()\n    {\n        return $this->jwt['iss'];\n    }\n\n    /**\n     * Get user id\n     *\n     * @return mixed\n     */\n    public function getUserId()\n    {\n        return $this->jwt['sub'];\n    }\n\n    /**\n     * Get scope\n     *\n     * @return null\n     */\n    public function getScope()\n    {\n        return null;\n    }\n\n    /**\n     * Creates an access token that is NOT associated with a refresh token.\n     * If a subject (sub) the name of the user/account we are accessing data on behalf of.\n     *\n     * @see GrantTypeInterface::createAccessToken()\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)\n    {\n        $includeRefreshToken = false;\n\n        return $accessToken->createAccessToken($client_id, $user_id, $scope, $includeRefreshToken);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/RefreshToken.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\RefreshTokenInterface;\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass RefreshToken implements GrantTypeInterface\n{\n    /**\n     * @var array\n     */\n    private $refreshToken;\n\n    /**\n     * @var RefreshTokenInterface\n     */\n    protected $storage;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @param RefreshTokenInterface $storage - REQUIRED Storage class for retrieving refresh token information\n     * @param array                 $config  - OPTIONAL Configuration options for the server\n     * @code\n     *     $config = array(\n     *         'always_issue_new_refresh_token' => true, // whether to issue a new refresh token upon successful token request\n     *         'unset_refresh_token_after_use' => true // whether to unset the refresh token after after using\n     *     );\n     * @endcode\n     */\n    public function __construct(RefreshTokenInterface $storage, $config = array())\n    {\n        $this->config = array_merge(array(\n            'always_issue_new_refresh_token' => false,\n            'unset_refresh_token_after_use' => true\n        ), $config);\n\n        // to preserve B.C. with v1.6\n        // @see https://github.com/bshaffer/oauth2-server-php/pull/580\n        // @todo - remove in v2.0\n        if (isset($config['always_issue_new_refresh_token']) && !isset($config['unset_refresh_token_after_use'])) {\n            $this->config['unset_refresh_token_after_use'] = $config['always_issue_new_refresh_token'];\n        }\n\n        $this->storage = $storage;\n    }\n\n    /**\n     * @return string\n     */\n    public function getQueryStringIdentifier()\n    {\n        return 'refresh_token';\n    }\n\n    /**\n     * Validate the OAuth request\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @return bool|mixed|null\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!$request->request(\"refresh_token\")) {\n            $response->setError(400, 'invalid_request', 'Missing parameter: \"refresh_token\" is required');\n\n            return null;\n        }\n\n        if (!$refreshToken = $this->storage->getRefreshToken($request->request(\"refresh_token\"))) {\n            $response->setError(400, 'invalid_grant', 'Invalid refresh token');\n\n            return null;\n        }\n\n        if ($refreshToken['expires'] > 0 && $refreshToken[\"expires\"] < time()) {\n            $response->setError(400, 'invalid_grant', 'Refresh token has expired');\n\n            return null;\n        }\n\n        // store the refresh token locally so we can delete it when a new refresh token is generated\n        $this->refreshToken = $refreshToken;\n\n        return true;\n    }\n\n    /**\n     * Get client id\n     *\n     * @return mixed\n     */\n    public function getClientId()\n    {\n        return $this->refreshToken['client_id'];\n    }\n\n    /**\n     * Get user id\n     *\n     * @return mixed|null\n     */\n    public function getUserId()\n    {\n        return isset($this->refreshToken['user_id']) ? $this->refreshToken['user_id'] : null;\n    }\n\n    /**\n     * Get scope\n     *\n     * @return null|string\n     */\n    public function getScope()\n    {\n        return isset($this->refreshToken['scope']) ? $this->refreshToken['scope'] : null;\n    }\n\n    /**\n     * Create access token\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)\n    {\n        /*\n         * It is optional to force a new refresh token when a refresh token is used.\n         * However, if a new refresh token is issued, the old one MUST be expired\n         * @see http://tools.ietf.org/html/rfc6749#section-6\n         */\n        $issueNewRefreshToken = $this->config['always_issue_new_refresh_token'];\n        $unsetRefreshToken = $this->config['unset_refresh_token_after_use'];\n        $token = $accessToken->createAccessToken($client_id, $user_id, $scope, $issueNewRefreshToken);\n\n        if ($unsetRefreshToken) {\n            $this->storage->unsetRefreshToken($this->refreshToken['refresh_token']);\n        }\n\n        return $token;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/GrantType/UserCredentials.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\UserCredentialsInterface;\nuse OAuth2\\ResponseType\\AccessTokenInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\nuse LogicException;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass UserCredentials implements GrantTypeInterface\n{\n    /**\n     * @var array\n     */\n    private $userInfo;\n\n    /**\n     * @var UserCredentialsInterface\n     */\n    protected $storage;\n\n    /**\n     * @param UserCredentialsInterface $storage - REQUIRED Storage class for retrieving user credentials information\n     */\n    public function __construct(UserCredentialsInterface $storage)\n    {\n        $this->storage = $storage;\n    }\n\n    /**\n     * @return string\n     */\n    public function getQueryStringIdentifier()\n    {\n        return 'password';\n    }\n\n    /**\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @return bool|mixed|null\n     *\n     * @throws LogicException\n     */\n    public function validateRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!$request->request(\"password\") || !$request->request(\"username\")) {\n            $response->setError(400, 'invalid_request', 'Missing parameters: \"username\" and \"password\" required');\n\n            return null;\n        }\n\n        if (!$this->storage->checkUserCredentials($request->request(\"username\"), $request->request(\"password\"))) {\n            $response->setError(401, 'invalid_grant', 'Invalid username and password combination');\n\n            return null;\n        }\n\n        $userInfo = $this->storage->getUserDetails($request->request(\"username\"));\n\n        if (empty($userInfo)) {\n            $response->setError(400, 'invalid_grant', 'Unable to retrieve user information');\n\n            return null;\n        }\n\n        if (!isset($userInfo['user_id'])) {\n            throw new \\LogicException(\"you must set the user_id on the array returned by getUserDetails\");\n        }\n\n        $this->userInfo = $userInfo;\n\n        return true;\n    }\n\n    /**\n     * Get client id\n     *\n     * @return mixed|null\n     */\n    public function getClientId()\n    {\n        return null;\n    }\n\n    /**\n     * Get user id\n     *\n     * @return mixed\n     */\n    public function getUserId()\n    {\n        return $this->userInfo['user_id'];\n    }\n\n    /**\n     * Get scope\n     *\n     * @return null|string\n     */\n    public function getScope()\n    {\n        return isset($this->userInfo['scope']) ? $this->userInfo['scope'] : null;\n    }\n\n    /**\n     * Create access token\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)\n    {\n        return $accessToken->createAccessToken($client_id, $user_id, $scope);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeController.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Controller;\n\nuse OAuth2\\Controller\\AuthorizeController as BaseAuthorizeController;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n * @see OAuth2\\Controller\\AuthorizeControllerInterface\n */\nclass AuthorizeController extends BaseAuthorizeController implements AuthorizeControllerInterface\n{\n    /**\n     * @var mixed\n     */\n    private $nonce;\n\n    /**\n     * Set not authorized response\n     *\n     * @param RequestInterface  $request\n     * @param ResponseInterface $response\n     * @param string            $redirect_uri\n     * @param null              $user_id\n     */\n    protected function setNotAuthorizedResponse(RequestInterface $request, ResponseInterface $response, $redirect_uri, $user_id = null)\n    {\n        $prompt = $request->query('prompt', 'consent');\n        if ($prompt == 'none') {\n            if (is_null($user_id)) {\n                $error = 'login_required';\n                $error_message = 'The user must log in';\n            } else {\n                $error = 'interaction_required';\n                $error_message = 'The user must grant access to your application';\n            }\n        } else {\n            $error = 'consent_required';\n            $error_message = 'The user denied access to your application';\n        }\n\n        $response->setRedirect($this->config['redirect_status_code'], $redirect_uri, $this->getState(), $error, $error_message);\n    }\n\n    /**\n     * @TODO: add dependency injection for the parameters in this method\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @param mixed $user_id\n     * @return array\n     */\n    protected function buildAuthorizeParameters($request, $response, $user_id)\n    {\n        if (!$params = parent::buildAuthorizeParameters($request, $response, $user_id)) {\n            return;\n        }\n\n        // Generate an id token if needed.\n        if ($this->needsIdToken($this->getScope()) && $this->getResponseType() == self::RESPONSE_TYPE_AUTHORIZATION_CODE) {\n            $params['id_token'] = $this->responseTypes['id_token']->createIdToken($this->getClientId(), $user_id, $this->nonce);\n        }\n\n        // add the nonce to return with the redirect URI\n        $params['nonce'] = $this->nonce;\n\n        return $params;\n    }\n\n    /**\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return bool\n     */\n    public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!parent::validateAuthorizeRequest($request, $response)) {\n            return false;\n        }\n\n        $nonce = $request->query('nonce');\n\n        // Validate required nonce for \"id_token\" and \"id_token token\"\n        if (!$nonce && in_array($this->getResponseType(), array(self::RESPONSE_TYPE_ID_TOKEN, self::RESPONSE_TYPE_ID_TOKEN_TOKEN))) {\n            $response->setError(400, 'invalid_nonce', 'This application requires you specify a nonce parameter');\n\n            return false;\n        }\n\n        $this->nonce = $nonce;\n\n        return true;\n    }\n\n    /**\n     * Array of valid response types\n     *\n     * @return array\n     */\n    protected function getValidResponseTypes()\n    {\n        return array(\n            self::RESPONSE_TYPE_ACCESS_TOKEN,\n            self::RESPONSE_TYPE_AUTHORIZATION_CODE,\n            self::RESPONSE_TYPE_ID_TOKEN,\n            self::RESPONSE_TYPE_ID_TOKEN_TOKEN,\n            self::RESPONSE_TYPE_CODE_ID_TOKEN,\n        );\n    }\n\n    /**\n     * Returns whether the current request needs to generate an id token.\n     *\n     * ID Tokens are a part of the OpenID Connect specification, so this\n     * method checks whether OpenID Connect is enabled in the server settings\n     * and whether the openid scope was requested.\n     *\n     * @param string $request_scope - A space-separated string of scopes.\n     * @return boolean - TRUE if an id token is needed, FALSE otherwise.\n     */\n    public function needsIdToken($request_scope)\n    {\n        // see if the \"openid\" scope exists in the requested scope\n        return $this->scopeUtil->checkScope('openid', $request_scope);\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getNonce()\n    {\n        return $this->nonce;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/AuthorizeControllerInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Controller;\n\ninterface AuthorizeControllerInterface\n{\n    const RESPONSE_TYPE_ID_TOKEN = 'id_token';\n\n    const RESPONSE_TYPE_ID_TOKEN_TOKEN = 'id_token token';\n\n    const RESPONSE_TYPE_CODE_ID_TOKEN  = 'code id_token';\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoController.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Controller;\n\nuse OAuth2\\Scope;\nuse OAuth2\\TokenType\\TokenTypeInterface;\nuse OAuth2\\Storage\\AccessTokenInterface;\nuse OAuth2\\OpenID\\Storage\\UserClaimsInterface;\nuse OAuth2\\Controller\\ResourceController;\nuse OAuth2\\ScopeInterface;\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n * @see OAuth2\\Controller\\UserInfoControllerInterface\n */\nclass UserInfoController extends ResourceController implements UserInfoControllerInterface\n{\n    /**\n     * @var UserClaimsInterface\n     */\n    protected $userClaimsStorage;\n\n    /**\n     * Constructor\n     *\n     * @param TokenTypeInterface   $tokenType\n     * @param AccessTokenInterface $tokenStorage\n     * @param UserClaimsInterface  $userClaimsStorage\n     * @param array                $config\n     * @param ScopeInterface       $scopeUtil\n     */\n    public function __construct(TokenTypeInterface $tokenType, AccessTokenInterface $tokenStorage, UserClaimsInterface $userClaimsStorage, $config = array(), ScopeInterface $scopeUtil = null)\n    {\n        parent::__construct($tokenType, $tokenStorage, $config, $scopeUtil);\n\n        $this->userClaimsStorage = $userClaimsStorage;\n    }\n\n    /**\n     * Handle the user info request\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return void\n     */\n    public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response)\n    {\n        if (!$this->verifyResourceRequest($request, $response, 'openid')) {\n            return;\n        }\n\n        $token = $this->getToken();\n        $claims = $this->userClaimsStorage->getUserClaims($token['user_id'], $token['scope']);\n        // The sub Claim MUST always be returned in the UserInfo Response.\n        // http://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse\n        $claims += array(\n            'sub' => $token['user_id'],\n        );\n        $response->addParameters($claims);\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Controller/UserInfoControllerInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Controller;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n *  This controller is called when the user claims for OpenID Connect's\n *  UserInfo endpoint should be returned.\n *\n * @code\n *     $response = new OAuth2\\Response();\n *     $userInfoController->handleUserInfoRequest(\n *         OAuth2\\Request::createFromGlobals(),\n *         $response\n *     );\n *     $response->send();\n * @endcode\n */\ninterface UserInfoControllerInterface\n{\n    /**\n     * Handle user info request\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     */\n    public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/GrantType/AuthorizationCode.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\GrantType;\n\nuse OAuth2\\GrantType\\AuthorizationCode as BaseAuthorizationCode;\nuse OAuth2\\ResponseType\\AccessTokenInterface;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass AuthorizationCode extends BaseAuthorizationCode\n{\n    /**\n     * Create access token\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param mixed                $client_id   - client identifier related to the access token.\n     * @param mixed                $user_id     - user id associated with the access token\n     * @param string               $scope       - scopes to be stored in space-separated string.\n     * @return array\n     */\n    public function createAccessToken(AccessTokenInterface $accessToken, $client_id, $user_id, $scope)\n    {\n        $includeRefreshToken = true;\n        if (isset($this->authCode['id_token'])) {\n            // OpenID Connect requests include the refresh token only if the\n            // offline_access scope has been requested and granted.\n            $scopes = explode(' ', trim($scope));\n            $includeRefreshToken = in_array('offline_access', $scopes);\n        }\n\n        $token = $accessToken->createAccessToken($client_id, $user_id, $scope, $includeRefreshToken);\n        if (isset($this->authCode['id_token'])) {\n            $token['id_token'] = $this->authCode['id_token'];\n        }\n\n        $this->storage->expireAuthorizationCode($this->authCode['code']);\n\n        return $token;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCode.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\ResponseType\\AuthorizationCode as BaseAuthorizationCode;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as AuthorizationCodeStorageInterface;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass AuthorizationCode extends BaseAuthorizationCode implements AuthorizationCodeInterface\n{\n    /**\n     * Constructor\n     *\n     * @param AuthorizationCodeStorageInterface $storage\n     * @param array $config\n     */\n    public function __construct(AuthorizationCodeStorageInterface $storage, array $config = array())\n    {\n        parent::__construct($storage, $config);\n    }\n\n    /**\n     * @param $params\n     * @param null $user_id\n     * @return array\n     */\n    public function getAuthorizeResponse($params, $user_id = null)\n    {\n        // build the URL to redirect to\n        $result = array('query' => array());\n\n        $params += array('scope' => null, 'state' => null, 'id_token' => null);\n\n        $result['query']['code'] = $this->createAuthorizationCode($params['client_id'], $user_id, $params['redirect_uri'], $params['scope'], $params['id_token']);\n\n        if (isset($params['state'])) {\n            $result['query']['state'] = $params['state'];\n        }\n\n        return array($params['redirect_uri'], $result);\n    }\n\n    /**\n     * Handle the creation of the authorization code.\n     *\n     * @param mixed $client_id - Client identifier related to the authorization code\n     * @param mixed $user_id - User ID associated with the authorization code\n     * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the\n     *                               user-agent to when the end-user authorization step is completed.\n     * @param string $scope - OPTIONAL Scopes to be stored in space-separated string.\n     * @param string $id_token - OPTIONAL The OpenID Connect id_token.\n     *\n     * @return string\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     * @ingroup oauth2_section_4\n     */\n    public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null, $id_token = null)\n    {\n        $code = $this->generateAuthorizationCode();\n        $this->storage->setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, time() + $this->config['auth_code_lifetime'], $scope, $id_token);\n\n        return $code;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/AuthorizationCodeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\ResponseType\\AuthorizationCodeInterface as BaseAuthorizationCodeInterface;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface\n{\n    /**\n     * Handle the creation of the authorization code.\n     *\n     * @param mixed  $client_id    - Client identifier related to the authorization code\n     * @param mixed  $user_id      - User ID associated with the authorization code\n     * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the\n     *                               user-agent to when the end-user authorization step is completed.\n     * @param string $scope        - OPTIONAL Scopes to be stored in space-separated string.\n     * @param string $id_token     - OPTIONAL The OpenID Connect id_token.\n     * @return string\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     * @ingroup oauth2_section_4\n     */\n    public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null, $id_token = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdToken.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nclass CodeIdToken implements CodeIdTokenInterface\n{\n    /**\n     * @var AuthorizationCodeInterface\n     */\n    protected $authCode;\n\n    /**\n     * @var IdTokenInterface\n     */\n    protected $idToken;\n\n    /**\n     * @param AuthorizationCodeInterface $authCode\n     * @param IdTokenInterface           $idToken\n     */\n    public function __construct(AuthorizationCodeInterface $authCode, IdTokenInterface $idToken)\n    {\n        $this->authCode = $authCode;\n        $this->idToken = $idToken;\n    }\n\n    /**\n     * @param array $params\n     * @param mixed $user_id\n     * @return mixed\n     */\n    public function getAuthorizeResponse($params, $user_id = null)\n    {\n        $result = $this->authCode->getAuthorizeResponse($params, $user_id);\n        $resultIdToken = $this->idToken->getAuthorizeResponse($params, $user_id);\n        $result[1]['query']['id_token'] = $resultIdToken[1]['fragment']['id_token'];\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/CodeIdTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\ResponseType\\ResponseTypeInterface;\n\ninterface CodeIdTokenInterface extends ResponseTypeInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdToken.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\Encryption\\EncryptionInterface;\nuse OAuth2\\Encryption\\Jwt;\nuse OAuth2\\Storage\\PublicKeyInterface;\nuse OAuth2\\OpenID\\Storage\\UserClaimsInterface;\nuse LogicException;\n\nclass IdToken implements IdTokenInterface\n{\n    /**\n     * @var UserClaimsInterface\n     */\n    protected $userClaimsStorage;\n    /**\n     * @var PublicKeyInterface\n     */\n    protected $publicKeyStorage;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @var EncryptionInterface\n     */\n    protected $encryptionUtil;\n\n    /**\n     * Constructor\n     *\n     * @param UserClaimsInterface $userClaimsStorage\n     * @param PublicKeyInterface $publicKeyStorage\n     * @param array $config\n     * @param EncryptionInterface $encryptionUtil\n     * @throws LogicException\n     */\n    public function __construct(UserClaimsInterface $userClaimsStorage, PublicKeyInterface $publicKeyStorage, array $config = array(), EncryptionInterface $encryptionUtil = null)\n    {\n        $this->userClaimsStorage = $userClaimsStorage;\n        $this->publicKeyStorage = $publicKeyStorage;\n        if (is_null($encryptionUtil)) {\n            $encryptionUtil = new Jwt();\n        }\n        $this->encryptionUtil = $encryptionUtil;\n\n        if (!isset($config['issuer'])) {\n            throw new LogicException('config parameter \"issuer\" must be set');\n        }\n        $this->config = array_merge(array(\n            'id_lifetime' => 3600,\n        ), $config);\n    }\n\n    /**\n     * @param array $params\n     * @param null $userInfo\n     * @return array|mixed\n     */\n    public function getAuthorizeResponse($params, $userInfo = null)\n    {\n        // build the URL to redirect to\n        $result = array('query' => array());\n        $params += array('scope' => null, 'state' => null, 'nonce' => null);\n\n        // create the id token.\n        list($user_id, $auth_time) = $this->getUserIdAndAuthTime($userInfo);\n        $userClaims = $this->userClaimsStorage->getUserClaims($user_id, $params['scope']);\n\n        $id_token = $this->createIdToken($params['client_id'], $userInfo, $params['nonce'], $userClaims, null);\n        $result[\"fragment\"] = array('id_token' => $id_token);\n        if (isset($params['state'])) {\n            $result[\"fragment\"][\"state\"] = $params['state'];\n        }\n\n        return array($params['redirect_uri'], $result);\n    }\n\n    /**\n     * Create id token\n     *\n     * @param string $client_id\n     * @param mixed  $userInfo\n     * @param mixed  $nonce\n     * @param mixed  $userClaims\n     * @param mixed  $access_token\n     * @return mixed|string\n     */\n    public function createIdToken($client_id, $userInfo, $nonce = null, $userClaims = null, $access_token = null)\n    {\n        // pull auth_time from user info if supplied\n        list($user_id, $auth_time) = $this->getUserIdAndAuthTime($userInfo);\n\n        $token = array(\n            'iss'        => $this->config['issuer'],\n            'sub'        => $user_id,\n            'aud'        => $client_id,\n            'iat'        => time(),\n            'exp'        => time() + $this->config['id_lifetime'],\n            'auth_time'  => $auth_time,\n        );\n\n        if ($nonce) {\n            $token['nonce'] = $nonce;\n        }\n\n        if ($userClaims) {\n            $token += $userClaims;\n        }\n\n        if ($access_token) {\n            $token['at_hash'] = $this->createAtHash($access_token, $client_id);\n        }\n\n        return $this->encodeToken($token, $client_id);\n    }\n\n    /**\n     * @param $access_token\n     * @param null $client_id\n     * @return mixed|string\n     */\n    protected function createAtHash($access_token, $client_id = null)\n    {\n        // maps HS256 and RS256 to sha256, etc.\n        $algorithm = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);\n        $hash_algorithm = 'sha' . substr($algorithm, 2);\n        $hash = hash($hash_algorithm, $access_token, true);\n        $at_hash = substr($hash, 0, strlen($hash) / 2);\n\n        return $this->encryptionUtil->urlSafeB64Encode($at_hash);\n    }\n\n    /**\n     * @param array $token\n     * @param null $client_id\n     * @return mixed|string\n     */\n    protected function encodeToken(array $token, $client_id = null)\n    {\n        $private_key = $this->publicKeyStorage->getPrivateKey($client_id);\n        $algorithm = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);\n\n        return $this->encryptionUtil->encode($token, $private_key, $algorithm);\n    }\n\n    /**\n     * @param $userInfo\n     * @return array\n     * @throws LogicException\n     */\n    private function getUserIdAndAuthTime($userInfo)\n    {\n        $auth_time = null;\n\n        // support an array for user_id / auth_time\n        if (is_array($userInfo)) {\n            if (!isset($userInfo['user_id'])) {\n                throw new LogicException('if $user_id argument is an array, user_id index must be set');\n            }\n\n            $auth_time = isset($userInfo['auth_time']) ? $userInfo['auth_time'] : null;\n            $user_id = $userInfo['user_id'];\n        } else {\n            $user_id = $userInfo;\n        }\n\n        if (is_null($auth_time)) {\n            $auth_time = time();\n        }\n\n        // userInfo is a scalar, and so this is the $user_id. Auth Time is null\n        return array($user_id, $auth_time);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\ResponseType\\ResponseTypeInterface;\n\ninterface IdTokenInterface extends ResponseTypeInterface\n{\n    /**\n     * Create the id token.\n     *\n     * If Authorization Code Flow is used, the id_token is generated when the\n     * authorization code is issued, and later returned from the token endpoint\n     * together with the access_token.\n     * If the Implicit Flow is used, the token and id_token are generated and\n     * returned together.\n     *\n     * @param string $client_id        - The client id.\n     * @param mixed  $userInfo         - User info\n     * @param string $nonce            - OPTIONAL The nonce.\n     * @param string $userClaims       - OPTIONAL Claims about the user.\n     * @param string $access_token     - OPTIONAL The access token, if known.\n\n     * @internal param string $user_id - The user id.\n     * @return string The ID Token represented as a JSON Web Token (JWT).\n     *\n     * @see http://openid.net/specs/openid-connect-core-1_0.html#IDToken\n     */\n    public function createIdToken($client_id, $userInfo, $nonce = null, $userClaims = null, $access_token = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenToken.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\ResponseType\\AccessTokenInterface;\n\nclass IdTokenToken implements IdTokenTokenInterface\n{\n    /**\n     * @var AccessTokenInterface\n     */\n    protected $accessToken;\n\n    /**\n     * @var IdTokenInterface\n     */\n    protected $idToken;\n\n    /**\n     * Constructor\n     *\n     * @param AccessTokenInterface $accessToken\n     * @param IdTokenInterface $idToken\n     */\n    public function __construct(AccessTokenInterface $accessToken, IdTokenInterface $idToken)\n    {\n        $this->accessToken = $accessToken;\n        $this->idToken = $idToken;\n    }\n\n    /**\n     * @param array $params\n     * @param mixed $user_id\n     * @return mixed\n     */\n    public function getAuthorizeResponse($params, $user_id = null)\n    {\n        $result = $this->accessToken->getAuthorizeResponse($params, $user_id);\n        $access_token = $result[1]['fragment']['access_token'];\n        $id_token = $this->idToken->createIdToken($params['client_id'], $user_id, $params['nonce'], null, $access_token);\n        $result[1]['fragment']['id_token'] = $id_token;\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/ResponseType/IdTokenTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\ResponseType\\ResponseTypeInterface;\n\ninterface IdTokenTokenInterface extends ResponseTypeInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/AuthorizationCodeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Storage;\n\nuse OAuth2\\Storage\\AuthorizationCodeInterface as BaseAuthorizationCodeInterface;\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should get/save authorization codes for the \"Authorization Code\"\n * grant type\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface AuthorizationCodeInterface extends BaseAuthorizationCodeInterface\n{\n    /**\n     * Take the provided authorization code values and store them somewhere.\n     *\n     * This function should be the storage counterpart to getAuthCode().\n     *\n     * If storage fails for some reason, we're not currently checking for\n     * any sort of success/failure, so you should bail out of the script\n     * and provide a descriptive fail message.\n     *\n     * Required for OAuth2::GRANT_TYPE_AUTH_CODE.\n     *\n     * @param string $code         - authorization code to be stored.\n     * @param mixed $client_id     - client identifier to be stored.\n     * @param mixed $user_id       - user identifier to be stored.\n     * @param string $redirect_uri - redirect URI(s) to be stored in a space-separated string.\n     * @param int    $expires      - expiration to be stored as a Unix timestamp.\n     * @param string $scope        - OPTIONAL scopes to be stored in space-separated string.\n     * @param string $id_token     - OPTIONAL the OpenID Connect id_token.\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/OpenID/Storage/UserClaimsInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should retrieve user claims for the OpenID Connect id_token.\n */\ninterface UserClaimsInterface\n{\n    // valid scope values to pass into the user claims API call\n    const VALID_CLAIMS = 'profile email address phone';\n\n    // fields returned for the claims above\n    const PROFILE_CLAIM_VALUES  = 'name family_name given_name middle_name nickname preferred_username profile picture website gender birthdate zoneinfo locale updated_at';\n    const EMAIL_CLAIM_VALUES    = 'email email_verified';\n    const ADDRESS_CLAIM_VALUES  = 'formatted street_address locality region postal_code country';\n    const PHONE_CLAIM_VALUES    = 'phone_number phone_number_verified';\n\n    /**\n     * Return claims about the provided user id.\n     *\n     * Groups of claims are returned based on the requested scopes. No group\n     * is required, and no claim is required.\n     *\n     * @param mixed  $user_id - The id of the user for which claims should be returned.\n     * @param string $scope   - The requested scope.\n     * Scopes with matching claims: profile, email, address, phone.\n     *\n     * @return array - An array in the claim => value format.\n     *\n     * @see http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims\n     */\n    public function getUserClaims($user_id, $scope);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Request.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse LogicException;\n\n/**\n * OAuth2\\Request\n * This class is taken from the Symfony2 Framework and is part of the Symfony package.\n * See Symfony\\Component\\HttpFoundation\\Request (https://github.com/symfony/symfony)\n */\nclass Request implements RequestInterface\n{\n    public $attributes;\n    public $request;\n    public $query;\n    public $server;\n    public $files;\n    public $cookies;\n    public $headers;\n    public $content;\n\n    /**\n     * Constructor.\n     *\n     * @param array  $query      - The GET parameters\n     * @param array  $request    - The POST parameters\n     * @param array  $attributes - The request attributes (parameters parsed from the PATH_INFO, ...)\n     * @param array  $cookies    - The COOKIE parameters\n     * @param array  $files      - The FILES parameters\n     * @param array  $server     - The SERVER parameters\n     * @param string $content    - The raw body data\n     * @param array  $headers    - The headers\n     *\n     * @api\n     */\n    public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null, array $headers = null)\n    {\n        $this->initialize($query, $request, $attributes, $cookies, $files, $server, $content, $headers);\n    }\n\n    /**\n     * Sets the parameters for this request.\n     *\n     * This method also re-initializes all properties.\n     *\n     * @param array  $query      - The GET parameters\n     * @param array  $request    - The POST parameters\n     * @param array  $attributes - The request attributes (parameters parsed from the PATH_INFO, ...)\n     * @param array  $cookies    - The COOKIE parameters\n     * @param array  $files      - The FILES parameters\n     * @param array  $server     - The SERVER parameters\n     * @param string $content    - The raw body data\n     * @param array  $headers    - The headers\n     *\n     * @api\n     */\n    public function initialize(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null, array $headers = null)\n    {\n        $this->request = $request;\n        $this->query = $query;\n        $this->attributes = $attributes;\n        $this->cookies = $cookies;\n        $this->files = $files;\n        $this->server = $server;\n        $this->content = $content;\n\n        if ($headers === null) {\n            $headers = array();\n        }\n\n        $this->headers = $headers + $this->getHeadersFromServer($this->server);\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function query($name, $default = null)\n    {\n        return isset($this->query[$name]) ? $this->query[$name] : $default;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function request($name, $default = null)\n    {\n        return isset($this->request[$name]) ? $this->request[$name] : $default;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function server($name, $default = null)\n    {\n        return isset($this->server[$name]) ? $this->server[$name] : $default;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function headers($name, $default = null)\n    {\n        $headers = array_change_key_case($this->headers);\n        $name = strtolower($name);\n\n        return isset($headers[$name]) ? $headers[$name] : $default;\n    }\n\n    /**\n     * @return array\n     */\n    public function getAllQueryParameters()\n    {\n        return $this->query;\n    }\n\n    /**\n     * Returns the request body content.\n     *\n     * @param boolean $asResource - If true, a resource will be returned\n     * @return string|resource    - The request body content or a resource to read the body stream.\n     *\n     * @throws LogicException\n     */\n    public function getContent($asResource = false)\n    {\n        if (false === $this->content || (true === $asResource && null !== $this->content)) {\n            throw new LogicException('getContent() can only be called once when using the resource return type.');\n        }\n\n        if (true === $asResource) {\n            $this->content = false;\n\n            return fopen('php://input', 'rb');\n        }\n\n        if (null === $this->content) {\n            $this->content = file_get_contents('php://input');\n        }\n\n        return $this->content;\n    }\n\n    /**\n     * @param array $server\n     * @return array\n     */\n    private function getHeadersFromServer($server)\n    {\n        $headers = array();\n        foreach ($server as $key => $value) {\n            if (0 === strpos($key, 'HTTP_')) {\n                $headers[substr($key, 5)] = $value;\n            }\n            // CONTENT_* are not prefixed with HTTP_\n            elseif (in_array($key, array('CONTENT_LENGTH', 'CONTENT_MD5', 'CONTENT_TYPE'))) {\n                $headers[$key] = $value;\n            }\n        }\n\n        if (isset($server['PHP_AUTH_USER'])) {\n            $headers['PHP_AUTH_USER'] = $server['PHP_AUTH_USER'];\n            $headers['PHP_AUTH_PW'] = isset($server['PHP_AUTH_PW']) ? $server['PHP_AUTH_PW'] : '';\n        } else {\n            /*\n             * php-cgi under Apache does not pass HTTP Basic user/pass to PHP by default\n             * For this workaround to work, add this line to your .htaccess file:\n             * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n             *\n             * A sample .htaccess file:\n             * RewriteEngine On\n             * RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n             * RewriteCond %{REQUEST_FILENAME} !-f\n             * RewriteRule ^(.*)$ app.php [QSA,L]\n             */\n\n            $authorizationHeader = null;\n            if (isset($server['HTTP_AUTHORIZATION'])) {\n                $authorizationHeader = $server['HTTP_AUTHORIZATION'];\n            } elseif (isset($server['REDIRECT_HTTP_AUTHORIZATION'])) {\n                $authorizationHeader = $server['REDIRECT_HTTP_AUTHORIZATION'];\n            } elseif (function_exists('apache_request_headers')) {\n                $requestHeaders = (array) apache_request_headers();\n\n                // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)\n                $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));\n\n                if (isset($requestHeaders['Authorization'])) {\n                    $authorizationHeader = trim($requestHeaders['Authorization']);\n                }\n            }\n\n            if (null !== $authorizationHeader) {\n                $headers['AUTHORIZATION'] = $authorizationHeader;\n                // Decode AUTHORIZATION header into PHP_AUTH_USER and PHP_AUTH_PW when authorization header is basic\n                if (0 === stripos($authorizationHeader, 'basic')) {\n                    $exploded = explode(':', base64_decode(substr($authorizationHeader, 6)));\n                    if (count($exploded) == 2) {\n                        list($headers['PHP_AUTH_USER'], $headers['PHP_AUTH_PW']) = $exploded;\n                    }\n                }\n            }\n        }\n\n        // PHP_AUTH_USER/PHP_AUTH_PW\n        if (isset($headers['PHP_AUTH_USER'])) {\n            $headers['AUTHORIZATION'] = 'Basic '.base64_encode($headers['PHP_AUTH_USER'].':'.$headers['PHP_AUTH_PW']);\n        }\n\n        return $headers;\n    }\n\n    /**\n     * Creates a new request with values from PHP's super globals.\n     *\n     * @return Request - A new request\n     *\n     * @api\n     */\n    public static function createFromGlobals()\n    {\n        $class = get_called_class();\n\n        /** @var Request $request */\n        $request = new $class($_GET, $_POST, array(), $_COOKIE, $_FILES, $_SERVER);\n\n        $contentType = $request->server('CONTENT_TYPE', '');\n        $requestMethod = $request->server('REQUEST_METHOD', 'GET');\n        if (0 === strpos($contentType, 'application/x-www-form-urlencoded')\n            && in_array(strtoupper($requestMethod), array('PUT', 'DELETE'))\n        ) {\n            parse_str($request->getContent(), $data);\n            $request->request = $data;\n        } elseif (0 === strpos($contentType, 'application/json')\n            && in_array(strtoupper($requestMethod), array('POST', 'PUT', 'DELETE'))\n        ) {\n            $data = json_decode($request->getContent(), true);\n            $request->request = $data;\n        }\n\n        return $request;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/RequestInterface.php",
    "content": "<?php\n\nnamespace OAuth2;\n\ninterface RequestInterface\n{\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function query($name, $default = null);\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function request($name, $default = null);\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function server($name, $default = null);\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function headers($name, $default = null);\n\n    /**\n     * @return mixed\n     */\n    public function getAllQueryParameters();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Response.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse InvalidArgumentException;\n\n/**\n * Class to handle OAuth2 Responses in a graceful way.  Use this interface\n * to output the proper OAuth2 responses.\n *\n * @see OAuth2\\ResponseInterface\n *\n * This class borrows heavily from the Symfony2 Framework and is part of the symfony package\n * @see Symfony\\Component\\HttpFoundation\\Request (https://github.com/symfony/symfony)\n */\nclass Response implements ResponseInterface\n{\n    /**\n     * @var string\n     */\n    public $version;\n\n    /**\n     * @var int\n     */\n    protected $statusCode = 200;\n\n    /**\n     * @var string\n     */\n    protected $statusText;\n\n    /**\n     * @var array\n     */\n    protected $parameters = array();\n\n    /**\n     * @var array\n     */\n    protected $httpHeaders = array();\n\n    /**\n     * @var array\n     */\n    public static $statusTexts = array(\n        100 => 'Continue',\n        101 => 'Switching Protocols',\n        200 => 'OK',\n        201 => 'Created',\n        202 => 'Accepted',\n        203 => 'Non-Authoritative Information',\n        204 => 'No Content',\n        205 => 'Reset Content',\n        206 => 'Partial Content',\n        300 => 'Multiple Choices',\n        301 => 'Moved Permanently',\n        302 => 'Found',\n        303 => 'See Other',\n        304 => 'Not Modified',\n        305 => 'Use Proxy',\n        307 => 'Temporary Redirect',\n        400 => 'Bad Request',\n        401 => 'Unauthorized',\n        402 => 'Payment Required',\n        403 => 'Forbidden',\n        404 => 'Not Found',\n        405 => 'Method Not Allowed',\n        406 => 'Not Acceptable',\n        407 => 'Proxy Authentication Required',\n        408 => 'Request Timeout',\n        409 => 'Conflict',\n        410 => 'Gone',\n        411 => 'Length Required',\n        412 => 'Precondition Failed',\n        413 => 'Request Entity Too Large',\n        414 => 'Request-URI Too Long',\n        415 => 'Unsupported Media Type',\n        416 => 'Requested Range Not Satisfiable',\n        417 => 'Expectation Failed',\n        418 => 'I\\'m a teapot',\n        500 => 'Internal Server Error',\n        501 => 'Not Implemented',\n        502 => 'Bad Gateway',\n        503 => 'Service Unavailable',\n        504 => 'Gateway Timeout',\n        505 => 'HTTP Version Not Supported',\n    );\n\n    /**\n     * @param array $parameters\n     * @param int   $statusCode\n     * @param array $headers\n     */\n    public function __construct($parameters = array(), $statusCode = 200, $headers = array())\n    {\n        $this->setParameters($parameters);\n        $this->setStatusCode($statusCode);\n        $this->setHttpHeaders($headers);\n        $this->version = '1.1';\n    }\n\n    /**\n     * Converts the response object to string containing all headers and the response content.\n     *\n     * @return string The response with headers and content\n     */\n    public function __toString()\n    {\n        $headers = array();\n        foreach ($this->httpHeaders as $name => $value) {\n            $headers[$name] = (array) $value;\n        }\n\n        return\n            sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText).\"\\r\\n\".\n            $this->getHttpHeadersAsString($headers).\"\\r\\n\".\n            $this->getResponseBody();\n    }\n\n    /**\n     * Returns the build header line.\n     *\n     * @param string $name  The header name\n     * @param string $value The header value\n     *\n     * @return string The built header line\n     */\n    protected function buildHeader($name, $value)\n    {\n        return sprintf(\"%s: %s\\n\", $name, $value);\n    }\n\n    /**\n     * @return int\n     */\n    public function getStatusCode()\n    {\n        return $this->statusCode;\n    }\n\n    /**\n     * @param int $statusCode\n     * @param string $text\n     * @throws InvalidArgumentException\n     */\n    public function setStatusCode($statusCode, $text = null)\n    {\n        $this->statusCode = (int) $statusCode;\n        if ($this->isInvalid()) {\n            throw new InvalidArgumentException(sprintf('The HTTP status code \"%s\" is not valid.', $statusCode));\n        }\n\n        $this->statusText = false === $text ? '' : (null === $text ? self::$statusTexts[$this->statusCode] : $text);\n    }\n\n    /**\n     * @return string\n     */\n    public function getStatusText()\n    {\n        return $this->statusText;\n    }\n\n    /**\n     * @return array\n     */\n    public function getParameters()\n    {\n        return $this->parameters;\n    }\n\n    /**\n     * @param array $parameters\n     */\n    public function setParameters(array $parameters)\n    {\n        $this->parameters = $parameters;\n    }\n\n    /**\n     * @param array $parameters\n     */\n    public function addParameters(array $parameters)\n    {\n        $this->parameters = array_merge($this->parameters, $parameters);\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function getParameter($name, $default = null)\n    {\n        return isset($this->parameters[$name]) ? $this->parameters[$name] : $default;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $value\n     */\n    public function setParameter($name, $value)\n    {\n        $this->parameters[$name] = $value;\n    }\n\n    /**\n     * @param array $httpHeaders\n     */\n    public function setHttpHeaders(array $httpHeaders)\n    {\n        $this->httpHeaders = $httpHeaders;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed $value\n     */\n    public function setHttpHeader($name, $value)\n    {\n        $this->httpHeaders[$name] = $value;\n    }\n\n    /**\n     * @param array $httpHeaders\n     */\n    public function addHttpHeaders(array $httpHeaders)\n    {\n        $this->httpHeaders = array_merge($this->httpHeaders, $httpHeaders);\n    }\n\n    /**\n     * @return array\n     */\n    public function getHttpHeaders()\n    {\n        return $this->httpHeaders;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed  $default\n     * @return mixed\n     */\n    public function getHttpHeader($name, $default = null)\n    {\n        return isset($this->httpHeaders[$name]) ? $this->httpHeaders[$name] : $default;\n    }\n\n    /**\n     * @param string $format\n     * @return mixed\n     * @throws InvalidArgumentException\n     */\n    public function getResponseBody($format = 'json')\n    {\n        switch ($format) {\n            case 'json':\n                return $this->parameters ? json_encode($this->parameters) : '';\n            case 'xml':\n                // this only works for single-level arrays\n                $xml = new \\SimpleXMLElement('<response/>');\n                foreach ($this->parameters as $key => $param) {\n                    $xml->addChild($key, $param);\n                }\n\n                return $xml->asXML();\n        }\n\n        throw new InvalidArgumentException(sprintf('The format %s is not supported', $format));\n\n    }\n\n    /**\n     * @param string $format\n     */\n    public function send($format = 'json')\n    {\n        // headers have already been sent by the developer\n        if (headers_sent()) {\n            return;\n        }\n\n        switch ($format) {\n            case 'json':\n                $this->setHttpHeader('Content-Type', 'application/json');\n                break;\n            case 'xml':\n                $this->setHttpHeader('Content-Type', 'text/xml');\n                break;\n        }\n        // status\n        header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText));\n\n        foreach ($this->getHttpHeaders() as $name => $header) {\n            header(sprintf('%s: %s', $name, $header));\n        }\n        echo $this->getResponseBody($format);\n    }\n\n    /**\n     * @param int $statusCode\n     * @param string $error\n     * @param string $errorDescription\n     * @param string $errorUri\n     * @return mixed\n     * @throws InvalidArgumentException\n     */\n    public function setError($statusCode, $error, $errorDescription = null, $errorUri = null)\n    {\n        $parameters = array(\n            'error' => $error,\n            'error_description' => $errorDescription,\n        );\n\n        if (!is_null($errorUri)) {\n            if (strlen($errorUri) > 0 && $errorUri[0] == '#') {\n                // we are referencing an oauth bookmark (for brevity)\n                $errorUri = 'http://tools.ietf.org/html/rfc6749' . $errorUri;\n            }\n            $parameters['error_uri'] = $errorUri;\n        }\n\n        $httpHeaders = array(\n            'Cache-Control' => 'no-store'\n        );\n\n        $this->setStatusCode($statusCode);\n        $this->addParameters($parameters);\n        $this->addHttpHeaders($httpHeaders);\n\n        if (!$this->isClientError() && !$this->isServerError()) {\n            throw new InvalidArgumentException(sprintf('The HTTP status code is not an error (\"%s\" given).', $statusCode));\n        }\n    }\n\n    /**\n     * @param int $statusCode\n     * @param string $url\n     * @param string $state\n     * @param string $error\n     * @param string $errorDescription\n     * @param string $errorUri\n     * @return mixed\n     * @throws InvalidArgumentException\n     */\n    public function setRedirect($statusCode, $url, $state = null, $error = null, $errorDescription = null, $errorUri = null)\n    {\n        if (empty($url)) {\n            throw new InvalidArgumentException('Cannot redirect to an empty URL.');\n        }\n\n        $parameters = array();\n\n        if (!is_null($state)) {\n            $parameters['state'] = $state;\n        }\n\n        if (!is_null($error)) {\n            $this->setError(400, $error, $errorDescription, $errorUri);\n        }\n        $this->setStatusCode($statusCode);\n        $this->addParameters($parameters);\n\n        if (count($this->parameters) > 0) {\n            // add parameters to URL redirection\n            $parts = parse_url($url);\n            $sep = isset($parts['query']) && !empty($parts['query']) ? '&' : '?';\n            $url .= $sep . http_build_query($this->parameters);\n        }\n\n        $this->addHttpHeaders(array('Location' =>  $url));\n\n        if (!$this->isRedirection()) {\n            throw new InvalidArgumentException(sprintf('The HTTP status code is not a redirect (\"%s\" given).', $statusCode));\n        }\n    }\n\n    /**\n     * @return Boolean\n     *\n     * @api\n     *\n     * @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html\n     */\n    public function isInvalid()\n    {\n        return $this->statusCode < 100 || $this->statusCode >= 600;\n    }\n\n    /**\n     * @return Boolean\n     *\n     * @api\n     */\n    public function isInformational()\n    {\n        return $this->statusCode >= 100 && $this->statusCode < 200;\n    }\n\n    /**\n     * @return Boolean\n     *\n     * @api\n     */\n    public function isSuccessful()\n    {\n        return $this->statusCode >= 200 && $this->statusCode < 300;\n    }\n\n    /**\n     * @return Boolean\n     *\n     * @api\n     */\n    public function isRedirection()\n    {\n        return $this->statusCode >= 300 && $this->statusCode < 400;\n    }\n\n    /**\n     * @return Boolean\n     *\n     * @api\n     */\n    public function isClientError()\n    {\n        return $this->statusCode >= 400 && $this->statusCode < 500;\n    }\n\n    /**\n     * @return Boolean\n     *\n     * @api\n     */\n    public function isServerError()\n    {\n        return $this->statusCode >= 500 && $this->statusCode < 600;\n    }\n\n    /**\n     * Function from Symfony2 HttpFoundation - output pretty header\n     *\n     * @param array $headers\n     * @return string\n     */\n    private function getHttpHeadersAsString($headers)\n    {\n        if (count($headers) == 0) {\n            return '';\n        }\n\n        $max = max(array_map('strlen', array_keys($headers))) + 1;\n        $content = '';\n        ksort($headers);\n        foreach ($headers as $name => $values) {\n            foreach ($values as $value) {\n                $content .= sprintf(\"%-{$max}s %s\\r\\n\", $this->beautifyHeaderName($name).':', $value);\n            }\n        }\n\n        return $content;\n    }\n\n    /**\n     * Function from Symfony2 HttpFoundation - output pretty header\n     *\n     * @param string $name\n     * @return mixed\n     */\n    private function beautifyHeaderName($name)\n    {\n        return preg_replace_callback('/\\-(.)/', array($this, 'beautifyCallback'), ucfirst($name));\n    }\n\n    /**\n     * Function from Symfony2 HttpFoundation - output pretty header\n     *\n     * @param array $match\n     * @return string\n     */\n    private function beautifyCallback($match)\n    {\n        return '-'.strtoupper($match[1]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseInterface.php",
    "content": "<?php\n\nnamespace OAuth2;\n\n/**\n * Interface which represents an object response.  Meant to handle and display the proper OAuth2 Responses\n * for errors and successes\n *\n * @see \\OAuth2\\Response\n */\ninterface ResponseInterface\n{\n    /**\n     * @param array $parameters\n     */\n    public function addParameters(array $parameters);\n\n    /**\n     * @param array $httpHeaders\n     */\n    public function addHttpHeaders(array $httpHeaders);\n\n    /**\n     * @param int $statusCode\n     */\n    public function setStatusCode($statusCode);\n\n    /**\n     * @param int    $statusCode\n     * @param string $name\n     * @param string $description\n     * @param string $uri\n     * @return mixed\n     */\n    public function setError($statusCode, $name, $description = null, $uri = null);\n\n    /**\n     * @param int    $statusCode\n     * @param string $url\n     * @param string $state\n     * @param string $error\n     * @param string $errorDescription\n     * @param string $errorUri\n     * @return mixed\n     */\n    public function setRedirect($statusCode, $url, $state = null, $error = null, $errorDescription = null, $errorUri = null);\n\n    /**\n     * @param string $name\n     * @return mixed\n     */\n    public function getParameter($name);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessToken.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\nuse OAuth2\\Storage\\AccessTokenInterface as AccessTokenStorageInterface;\nuse OAuth2\\Storage\\RefreshTokenInterface;\nuse RuntimeException;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass AccessToken implements AccessTokenInterface\n{\n    /**\n     * @var AccessTokenInterface\n     */\n    protected $tokenStorage;\n\n    /**\n     * @var RefreshTokenInterface\n     */\n    protected $refreshStorage;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @param AccessTokenStorageInterface $tokenStorage   - REQUIRED Storage class for saving access token information\n     * @param RefreshTokenInterface       $refreshStorage - OPTIONAL Storage class for saving refresh token information\n     * @param array                       $config         - OPTIONAL Configuration options for the server\n     * @code\n     *     $config = array(\n     *         'token_type' => 'bearer',            // token type identifier\n     *         'access_lifetime' => 3600,           // time before access token expires\n     *         'refresh_token_lifetime' => 1209600, // time before refresh token expires\n     *     );\n     * @endcode\n     */\n    public function __construct(AccessTokenStorageInterface $tokenStorage, RefreshTokenInterface $refreshStorage = null, array $config = array())\n    {\n        $this->tokenStorage = $tokenStorage;\n        $this->refreshStorage = $refreshStorage;\n\n        $this->config = array_merge(array(\n            'token_type'             => 'bearer',\n            'access_lifetime'        => 3600,\n            'refresh_token_lifetime' => 1209600,\n        ), $config);\n    }\n\n    /**\n     * Get authorize response\n     *\n     * @param array $params\n     * @param mixed $user_id\n     * @return array\n     */\n    public function getAuthorizeResponse($params, $user_id = null)\n    {\n        // build the URL to redirect to\n        $result = array('query' => array());\n\n        $params += array('scope' => null, 'state' => null);\n\n        /*\n         * a refresh token MUST NOT be included in the fragment\n         *\n         * @see http://tools.ietf.org/html/rfc6749#section-4.2.2\n         */\n        $includeRefreshToken = false;\n        $result[\"fragment\"] = $this->createAccessToken($params['client_id'], $user_id, $params['scope'], $includeRefreshToken);\n\n        if (isset($params['state'])) {\n            $result[\"fragment\"][\"state\"] = $params['state'];\n        }\n\n        return array($params['redirect_uri'], $result);\n    }\n\n    /**\n     * Handle the creation of access token, also issue refresh token if supported / desirable.\n     *\n     * @param mixed  $client_id           - client identifier related to the access token.\n     * @param mixed  $user_id             - user ID associated with the access token\n     * @param string $scope               - OPTIONAL scopes to be stored in space-separated string.\n     * @param bool   $includeRefreshToken - if true, a new refresh_token will be added to the response\n     * @return array\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-5\n     * @ingroup oauth2_section_5\n     */\n    public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true)\n    {\n        $token = array(\n            \"access_token\" => $this->generateAccessToken(),\n            \"expires_in\" => $this->config['access_lifetime'],\n            \"token_type\" => $this->config['token_type'],\n            \"scope\" => $scope\n        );\n\n        $this->tokenStorage->setAccessToken($token[\"access_token\"], $client_id, $user_id, $this->config['access_lifetime'] ? time() + $this->config['access_lifetime'] : null, $scope);\n\n        /*\n         * Issue a refresh token also, if we support them\n         *\n         * Refresh Tokens are considered supported if an instance of OAuth2\\Storage\\RefreshTokenInterface\n         * is supplied in the constructor\n         */\n        if ($includeRefreshToken && $this->refreshStorage) {\n            $token[\"refresh_token\"] = $this->generateRefreshToken();\n            $expires = 0;\n            if ($this->config['refresh_token_lifetime'] > 0) {\n                $expires = time() + $this->config['refresh_token_lifetime'];\n            }\n            $this->refreshStorage->setRefreshToken($token['refresh_token'], $client_id, $user_id, $expires, $scope);\n        }\n\n        return $token;\n    }\n\n    /**\n     * Generates an unique access token.\n     *\n     * Implementing classes may want to override this function to implement\n     * other access token generation schemes.\n     *\n     * @return string - A unique access token.\n     *\n     * @ingroup oauth2_section_4\n     */\n    protected function generateAccessToken()\n    {\n        if (function_exists('random_bytes')) {\n            $randomData = random_bytes(20);\n            if ($randomData !== false && strlen($randomData) === 20) {\n                return bin2hex($randomData);\n            }\n        }\n        if (function_exists('openssl_random_pseudo_bytes')) {\n            $randomData = openssl_random_pseudo_bytes(20);\n            if ($randomData !== false && strlen($randomData) === 20) {\n                return bin2hex($randomData);\n            }\n        }\n        if (function_exists('mcrypt_create_iv')) {\n            $randomData = mcrypt_create_iv(20, MCRYPT_DEV_URANDOM);\n            if ($randomData !== false && strlen($randomData) === 20) {\n                return bin2hex($randomData);\n            }\n        }\n        if (@file_exists('/dev/urandom')) { // Get 100 bytes of random data\n            $randomData = file_get_contents('/dev/urandom', false, null, 0, 20);\n            if ($randomData !== false && strlen($randomData) === 20) {\n                return bin2hex($randomData);\n            }\n        }\n        // Last resort which you probably should just get rid of:\n        $randomData = mt_rand() . mt_rand() . mt_rand() . mt_rand() . microtime(true) . uniqid(mt_rand(), true);\n\n        return substr(hash('sha512', $randomData), 0, 40);\n    }\n\n    /**\n     * Generates an unique refresh token\n     *\n     * Implementing classes may want to override this function to implement\n     * other refresh token generation schemes.\n     *\n     * @return string - A unique refresh token.\n     *\n     * @ingroup oauth2_section_4\n     * @see OAuth2::generateAccessToken()\n     */\n    protected function generateRefreshToken()\n    {\n        return $this->generateAccessToken(); // let's reuse the same scheme for token generation\n    }\n\n    /**\n     * Handle the revoking of refresh tokens, and access tokens if supported / desirable\n     * RFC7009 specifies that \"If the server is unable to locate the token using\n     * the given hint, it MUST extend its search across all of its supported token types\"\n     *\n     * @param $token\n     * @param null $tokenTypeHint\n     * @throws RuntimeException\n     * @return boolean\n     */\n    public function revokeToken($token, $tokenTypeHint = null)\n    {\n        if ($tokenTypeHint == 'refresh_token') {\n            if ($this->refreshStorage && $revoked = $this->refreshStorage->unsetRefreshToken($token)) {\n                return true;\n            }\n        }\n\n        /** @TODO remove in v2 */\n        if (!method_exists($this->tokenStorage, 'unsetAccessToken')) {\n            throw new RuntimeException(\n                sprintf('Token storage %s must implement unsetAccessToken method', get_class($this->tokenStorage)\n            ));\n        }\n\n        $revoked = $this->tokenStorage->unsetAccessToken($token);\n\n        // if a typehint is supplied and fails, try other storages \n        // @see https://tools.ietf.org/html/rfc7009#section-2.1\n        if (!$revoked && $tokenTypeHint != 'refresh_token') {\n            if ($this->refreshStorage) {\n                $revoked = $this->refreshStorage->unsetRefreshToken($token);\n            }\n        }\n\n        return $revoked;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AccessTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface AccessTokenInterface extends ResponseTypeInterface\n{\n    /**\n     * Handle the creation of access token, also issue refresh token if supported / desirable.\n     *\n     * @param mixed  $client_id           - client identifier related to the access token.\n     * @param mixed  $user_id             - user ID associated with the access token\n     * @param string $scope               - OPTONAL scopes to be stored in space-separated string.\n     * @param bool   $includeRefreshToken - if true, a new refresh_token will be added to the response\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-5\n     * @ingroup oauth2_section_5\n     */\n    public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true);\n\n    /**\n     * Handle the revoking of refresh tokens, and access tokens if supported / desirable\n     *\n     * @param $token\n     * @param $tokenTypeHint\n     * @return mixed\n     *\n     * @todo v2.0 include this method in interface. Omitted to maintain BC in v1.x\n     */\n    //public function revokeToken($token, $tokenTypeHint);\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCode.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\nuse OAuth2\\Storage\\AuthorizationCodeInterface as AuthorizationCodeStorageInterface;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass AuthorizationCode implements AuthorizationCodeInterface\n{\n    protected $storage;\n    protected $config;\n\n    public function __construct(AuthorizationCodeStorageInterface $storage, array $config = array())\n    {\n        $this->storage = $storage;\n        $this->config = array_merge(array(\n            'enforce_redirect' => false,\n            'auth_code_lifetime' => 30,\n        ), $config);\n    }\n\n    public function getAuthorizeResponse($params, $user_id = null)\n    {\n        // build the URL to redirect to\n        $result = array('query' => array());\n\n        $params += array('scope' => null, 'state' => null);\n\n        $result['query']['code'] = $this->createAuthorizationCode($params['client_id'], $user_id, $params['redirect_uri'], $params['scope']);\n\n        if (isset($params['state'])) {\n            $result['query']['state'] = $params['state'];\n        }\n\n        return array($params['redirect_uri'], $result);\n    }\n\n    /**\n     * Handle the creation of the authorization code.\n     *\n     * @param $client_id\n     * Client identifier related to the authorization code\n     * @param $user_id\n     * User ID associated with the authorization code\n     * @param $redirect_uri\n     * An absolute URI to which the authorization server will redirect the\n     * user-agent to when the end-user authorization step is completed.\n     * @param $scope\n     * (optional) Scopes to be stored in space-separated string.\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     * @ingroup oauth2_section_4\n     */\n    public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null)\n    {\n        $code = $this->generateAuthorizationCode();\n        $this->storage->setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, time() + $this->config['auth_code_lifetime'], $scope);\n\n        return $code;\n    }\n\n    /**\n     * @return\n     * TRUE if the grant type requires a redirect_uri, FALSE if not\n     */\n    public function enforceRedirect()\n    {\n        return $this->config['enforce_redirect'];\n    }\n\n    /**\n     * Generates an unique auth code.\n     *\n     * Implementing classes may want to override this function to implement\n     * other auth code generation schemes.\n     *\n     * @return\n     * An unique auth code.\n     *\n     * @ingroup oauth2_section_4\n     */\n    protected function generateAuthorizationCode()\n    {\n        $tokenLen = 40;\n        if (function_exists('random_bytes')) {\n            $randomData = random_bytes(100);\n        } elseif (function_exists('openssl_random_pseudo_bytes')) {\n            $randomData = openssl_random_pseudo_bytes(100);\n        } elseif (function_exists('mcrypt_create_iv')) {\n            $randomData = mcrypt_create_iv(100, MCRYPT_DEV_URANDOM);\n        } elseif (@file_exists('/dev/urandom')) { // Get 100 bytes of random data\n            $randomData = file_get_contents('/dev/urandom', false, null, 0, 100) . uniqid(mt_rand(), true);\n        } else {\n            $randomData = mt_rand() . mt_rand() . mt_rand() . mt_rand() . microtime(true) . uniqid(mt_rand(), true);\n        }\n\n        return substr(hash('sha512', $randomData), 0, $tokenLen);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/AuthorizationCodeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface AuthorizationCodeInterface extends ResponseTypeInterface\n{\n    /**\n     * @return\n     * TRUE if the grant type requires a redirect_uri, FALSE if not\n     */\n    public function enforceRedirect();\n\n    /**\n     * Handle the creation of the authorization code.\n     *\n     * @param mixed  $client_id    - Client identifier related to the authorization code\n     * @param mixed  $user_id      - User ID associated with the authorization code\n     * @param string $redirect_uri - An absolute URI to which the authorization server will redirect the\n     *                               user-agent to when the end-user authorization step is completed.\n     * @param string $scope        - OPTIONAL Scopes to be stored in space-separated string.\n     * @return string\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     * @ingroup oauth2_section_4\n     */\n    public function createAuthorizationCode($client_id, $user_id, $redirect_uri, $scope = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/JwtAccessToken.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\nuse OAuth2\\Encryption\\EncryptionInterface;\nuse OAuth2\\Encryption\\Jwt;\nuse OAuth2\\Storage\\AccessTokenInterface as AccessTokenStorageInterface;\nuse OAuth2\\Storage\\RefreshTokenInterface;\nuse OAuth2\\Storage\\PublicKeyInterface;\nuse OAuth2\\Storage\\Memory;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass JwtAccessToken extends AccessToken\n{\n    protected $publicKeyStorage;\n    protected $encryptionUtil;\n\n    /**\n     * @param PublicKeyInterface          $publicKeyStorage -\n     * @param AccessTokenStorageInterface $tokenStorage     -\n     * @param RefreshTokenInterface       $refreshStorage   -\n     * @param array                       $config           - array with key store_encrypted_token_string (bool true)\n     *                                                        whether the entire encrypted string is stored,\n     *                                                        or just the token ID is stored\n     * @param EncryptionInterface         $encryptionUtil   -\n     */\n    public function __construct(PublicKeyInterface $publicKeyStorage = null, AccessTokenStorageInterface $tokenStorage = null, RefreshTokenInterface $refreshStorage = null, array $config = array(), EncryptionInterface $encryptionUtil = null)\n    {\n        $this->publicKeyStorage = $publicKeyStorage;\n        $config = array_merge(array(\n            'store_encrypted_token_string' => true,\n            'issuer' => ''\n        ), $config);\n        if (is_null($tokenStorage)) {\n            // a pass-thru, so we can call the parent constructor\n            $tokenStorage = new Memory();\n        }\n        if (is_null($encryptionUtil)) {\n            $encryptionUtil = new Jwt();\n        }\n        $this->encryptionUtil = $encryptionUtil;\n        parent::__construct($tokenStorage, $refreshStorage, $config);\n    }\n\n    /**\n     * Handle the creation of access token, also issue refresh token if supported / desirable.\n     *\n     * @param mixed  $client_id           - Client identifier related to the access token.\n     * @param mixed  $user_id             - User ID associated with the access token\n     * @param string $scope               - (optional) Scopes to be stored in space-separated string.\n     * @param bool   $includeRefreshToken - If true, a new refresh_token will be added to the response\n     * @return array                      - The access token\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-5\n     * @ingroup oauth2_section_5\n     */\n    public function createAccessToken($client_id, $user_id, $scope = null, $includeRefreshToken = true)\n    {\n        // payload to encrypt\n        $payload = $this->createPayload($client_id, $user_id, $scope);\n\n        /*\n         * Encode the payload data into a single JWT access_token string\n         */\n        $access_token = $this->encodeToken($payload, $client_id);\n\n        /*\n         * Save the token to a secondary storage.  This is implemented on the\n         * OAuth2\\Storage\\JwtAccessToken side, and will not actually store anything,\n         * if no secondary storage has been supplied\n         */\n        $token_to_store = $this->config['store_encrypted_token_string'] ? $access_token : $payload['id'];\n        $this->tokenStorage->setAccessToken($token_to_store, $client_id, $user_id, $this->config['access_lifetime'] ? time() + $this->config['access_lifetime'] : null, $scope);\n\n        // token to return to the client\n        $token = array(\n            'access_token' => $access_token,\n            'expires_in' => $this->config['access_lifetime'],\n            'token_type' => $this->config['token_type'],\n            'scope' => $scope\n        );\n\n        /*\n         * Issue a refresh token also, if we support them\n         *\n         * Refresh Tokens are considered supported if an instance of OAuth2\\Storage\\RefreshTokenInterface\n         * is supplied in the constructor\n         */\n        if ($includeRefreshToken && $this->refreshStorage) {\n            $refresh_token = $this->generateRefreshToken();\n            $expires = 0;\n            if ($this->config['refresh_token_lifetime'] > 0) {\n                $expires = time() + $this->config['refresh_token_lifetime'];\n            }\n            $this->refreshStorage->setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope);\n            $token['refresh_token'] = $refresh_token;\n        }\n\n        return $token;\n    }\n\n    /**\n     * @param array $token\n     * @param mixed $client_id\n     * @return mixed\n     */\n    protected function encodeToken(array $token, $client_id = null)\n    {\n        $private_key = $this->publicKeyStorage->getPrivateKey($client_id);\n        $algorithm   = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);\n\n        return $this->encryptionUtil->encode($token, $private_key, $algorithm);\n    }\n\n    /**\n     * This function can be used to create custom JWT payloads\n     *\n     * @param mixed  $client_id           - Client identifier related to the access token.\n     * @param mixed  $user_id             - User ID associated with the access token\n     * @param string $scope               - (optional) Scopes to be stored in space-separated string.\n     * @return array                      - The access token\n     */\n    protected function createPayload($client_id, $user_id, $scope = null)\n    {\n        // token to encrypt\n        $expires = time() + $this->config['access_lifetime'];\n        $id = $this->generateAccessToken();\n\n        $payload = array(\n            'id'         => $id, // for BC (see #591)\n            'jti'        => $id,\n            'iss'        => $this->config['issuer'],\n            'aud'        => $client_id,\n            'sub'        => $user_id,\n            'exp'        => $expires,\n            'iat'        => time(),\n            'token_type' => $this->config['token_type'],\n            'scope'      => $scope\n        );\n        \n        if (isset($this->config['jwt_extra_payload_callable'])) {\n            if (!is_callable($this->config['jwt_extra_payload_callable'])) {\n                throw new \\InvalidArgumentException('jwt_extra_payload_callable is not callable');\n            }\n            \n            $extra = call_user_func($this->config['jwt_extra_payload_callable'], $client_id, $user_id, $scope);\n            \n            if (!is_array($extra)) {\n                throw new \\InvalidArgumentException('jwt_extra_payload_callable must return array');\n            }\n            \n            $payload = array_merge($extra, $payload);\n        }\n        \n        return $payload;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ResponseType/ResponseTypeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\ninterface ResponseTypeInterface\n{\n    /**\n     * @param array $params\n     * @param mixed $user_id\n     * @return mixed\n     */\n    public function getAuthorizeResponse($params, $user_id = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Scope.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse InvalidArgumentException;\nuse OAuth2\\Storage\\Memory;\nuse OAuth2\\Storage\\ScopeInterface as ScopeStorageInterface;\n\n/**\n* @see ScopeInterface\n*/\nclass Scope implements ScopeInterface\n{\n    protected $storage;\n\n    /**\n     * Constructor\n     *\n     * @param mixed $storage - Either an array of supported scopes, or an instance of OAuth2\\Storage\\ScopeInterface\n     *\n     * @throws InvalidArgumentException\n     */\n    public function __construct($storage = null)\n    {\n        if (is_null($storage) || is_array($storage)) {\n            $storage = new Memory((array) $storage);\n        }\n\n        if (!$storage instanceof ScopeStorageInterface) {\n            throw new InvalidArgumentException(\"Argument 1 to OAuth2\\Scope must be null, an array, or instance of OAuth2\\Storage\\ScopeInterface\");\n        }\n\n        $this->storage = $storage;\n    }\n\n    /**\n     * Check if everything in required scope is contained in available scope.\n     *\n     * @param string $required_scope  - A space-separated string of scopes.\n     * @param string $available_scope - A space-separated string of scopes.\n     * @return bool                   - TRUE if everything in required scope is contained in available scope and FALSE\n     *                                  if it isn't.\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-7\n     *\n     * @ingroup oauth2_section_7\n     */\n    public function checkScope($required_scope, $available_scope)\n    {\n        $required_scope = explode(' ', trim($required_scope));\n        $available_scope = explode(' ', trim($available_scope));\n\n        return (count(array_diff($required_scope, $available_scope)) == 0);\n    }\n\n    /**\n     * Check if the provided scope exists in storage.\n     *\n     * @param string $scope - A space-separated string of scopes.\n     * @return bool         - TRUE if it exists, FALSE otherwise.\n     */\n    public function scopeExists($scope)\n    {\n        // Check reserved scopes first.\n        $scope = explode(' ', trim($scope));\n        $reservedScope = $this->getReservedScopes();\n        $nonReservedScopes = array_diff($scope, $reservedScope);\n        if (count($nonReservedScopes) == 0) {\n            return true;\n        } else {\n            // Check the storage for non-reserved scopes.\n            $nonReservedScopes = implode(' ', $nonReservedScopes);\n\n            return $this->storage->scopeExists($nonReservedScopes);\n        }\n    }\n\n    /**\n     * @param RequestInterface $request\n     * @return string\n     */\n    public function getScopeFromRequest(RequestInterface $request)\n    {\n        // \"scope\" is valid if passed in either POST or QUERY\n        return $request->request('scope', $request->query('scope'));\n    }\n\n    /**\n     * @param null $client_id\n     * @return mixed\n     */\n    public function getDefaultScope($client_id = null)\n    {\n        return $this->storage->getDefaultScope($client_id);\n    }\n\n    /**\n     * Get reserved scopes needed by the server.\n     *\n     * In case OpenID Connect is used, these scopes must include:\n     * 'openid', offline_access'.\n     *\n     * @return array - An array of reserved scopes.\n     */\n    public function getReservedScopes()\n    {\n        return array('openid', 'offline_access');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/ScopeInterface.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse OAuth2\\Storage\\ScopeInterface as ScopeStorageInterface;\n\n/**\n * Class to handle scope implementation logic\n *\n * @see \\OAuth2\\Storage\\ScopeInterface\n */\ninterface ScopeInterface extends ScopeStorageInterface\n{\n    /**\n     * Check if everything in required scope is contained in available scope.\n     *\n     * @param string $required_scope  - A space-separated string of scopes.\n     * @param string $available_scope - A space-separated string of scopes.\n     * @return boolean                - TRUE if everything in required scope is contained in available scope and FALSE\n     *                                  if it isn't.\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-7\n     *\n     * @ingroup oauth2_section_7\n     */\n    public function checkScope($required_scope, $available_scope);\n\n    /**\n     * Return scope info from request\n     *\n     * @param RequestInterface $request - Request object to check\n     * @return string                   - representation of requested scope\n     */\n    public function getScopeFromRequest(RequestInterface $request);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Server.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse OAuth2\\Controller\\ResourceControllerInterface;\nuse OAuth2\\Controller\\ResourceController;\nuse OAuth2\\OpenID\\Controller\\UserInfoControllerInterface;\nuse OAuth2\\OpenID\\Controller\\UserInfoController;\nuse OAuth2\\OpenID\\Controller\\AuthorizeController as OpenIDAuthorizeController;\nuse OAuth2\\OpenID\\ResponseType\\AuthorizationCode as OpenIDAuthorizationCodeResponseType;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\nuse OAuth2\\OpenID\\GrantType\\AuthorizationCode as OpenIDAuthorizationCodeGrantType;\nuse OAuth2\\Controller\\AuthorizeControllerInterface;\nuse OAuth2\\Controller\\AuthorizeController;\nuse OAuth2\\Controller\\TokenControllerInterface;\nuse OAuth2\\Controller\\TokenController;\nuse OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface;\nuse OAuth2\\ClientAssertionType\\HttpBasic;\nuse OAuth2\\ResponseType\\ResponseTypeInterface;\nuse OAuth2\\ResponseType\\AuthorizationCode as AuthorizationCodeResponseType;\nuse OAuth2\\ResponseType\\AccessToken;\nuse OAuth2\\ResponseType\\JwtAccessToken;\nuse OAuth2\\OpenID\\ResponseType\\CodeIdToken;\nuse OAuth2\\OpenID\\ResponseType\\IdToken;\nuse OAuth2\\OpenID\\ResponseType\\IdTokenToken;\nuse OAuth2\\TokenType\\TokenTypeInterface;\nuse OAuth2\\TokenType\\Bearer;\nuse OAuth2\\GrantType\\GrantTypeInterface;\nuse OAuth2\\GrantType\\UserCredentials;\nuse OAuth2\\GrantType\\ClientCredentials;\nuse OAuth2\\GrantType\\RefreshToken;\nuse OAuth2\\GrantType\\AuthorizationCode;\nuse OAuth2\\Storage\\ClientCredentialsInterface;\nuse OAuth2\\Storage\\ClientInterface;\nuse OAuth2\\Storage\\JwtAccessToken as JwtAccessTokenStorage;\nuse OAuth2\\Storage\\JwtAccessTokenInterface;\nuse InvalidArgumentException;\nuse LogicException;\n\n/**\n* Server class for OAuth2\n* This class serves as a convience class which wraps the other Controller classes\n*\n* @see \\OAuth2\\Controller\\ResourceController\n* @see \\OAuth2\\Controller\\AuthorizeController\n* @see \\OAuth2\\Controller\\TokenController\n*/\nclass Server implements ResourceControllerInterface,\n    AuthorizeControllerInterface,\n    TokenControllerInterface,\n    UserInfoControllerInterface\n{\n    /**\n     * @var ResponseInterface\n     */\n    protected $response;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @var array\n     */\n    protected $storages;\n\n    /**\n     * @var AuthorizeControllerInterface\n     */\n    protected $authorizeController;\n\n    /**\n     * @var TokenControllerInterface\n     */\n    protected $tokenController;\n\n    /**\n     * @var ResourceControllerInterface\n     */\n    protected $resourceController;\n\n    /**\n     * @var UserInfoControllerInterface\n     */\n    protected $userInfoController;\n\n    /**\n     * @var array\n     */\n    protected $grantTypes = array();\n\n    /**\n     * @var array\n     */\n    protected $responseTypes = array();\n\n    /**\n     * @var TokenTypeInterface\n     */\n    protected $tokenType;\n\n    /**\n     * @var ScopeInterface\n     */\n    protected $scopeUtil;\n\n    /**\n     * @var ClientAssertionTypeInterface\n     */\n    protected $clientAssertionType;\n\n    /**\n     * @var array\n     */\n    protected $storageMap = array(\n        'access_token' => 'OAuth2\\Storage\\AccessTokenInterface',\n        'authorization_code' => 'OAuth2\\Storage\\AuthorizationCodeInterface',\n        'client_credentials' => 'OAuth2\\Storage\\ClientCredentialsInterface',\n        'client' => 'OAuth2\\Storage\\ClientInterface',\n        'refresh_token' => 'OAuth2\\Storage\\RefreshTokenInterface',\n        'user_credentials' => 'OAuth2\\Storage\\UserCredentialsInterface',\n        'user_claims' => 'OAuth2\\OpenID\\Storage\\UserClaimsInterface',\n        'public_key' => 'OAuth2\\Storage\\PublicKeyInterface',\n        'jwt_bearer' => 'OAuth2\\Storage\\JWTBearerInterface',\n        'scope' => 'OAuth2\\Storage\\ScopeInterface',\n    );\n\n    /**\n     * @var array\n     */\n    protected $responseTypeMap = array(\n        'token' => 'OAuth2\\ResponseType\\AccessTokenInterface',\n        'code' => 'OAuth2\\ResponseType\\AuthorizationCodeInterface',\n        'id_token' => 'OAuth2\\OpenID\\ResponseType\\IdTokenInterface',\n        'id_token token' => 'OAuth2\\OpenID\\ResponseType\\IdTokenTokenInterface',\n        'code id_token' => 'OAuth2\\OpenID\\ResponseType\\CodeIdTokenInterface',\n    );\n\n    /**\n     * @param mixed                        $storage             (array or OAuth2\\Storage) - single object or array of objects implementing the\n     *                                                          required storage types (ClientCredentialsInterface and AccessTokenInterface as a minimum)\n     * @param array                        $config              specify a different token lifetime, token header name, etc\n     * @param array                        $grantTypes          An array of OAuth2\\GrantType\\GrantTypeInterface to use for granting access tokens\n     * @param array                        $responseTypes       Response types to use. array keys should be \"code\" and \"token\" for\n     *                                                          Access Token and Authorization Code response types\n     * @param TokenTypeInterface           $tokenType           The token type object to use. Valid token types are \"bearer\" and \"mac\"\n     * @param ScopeInterface               $scopeUtil           The scope utility class to use to validate scope\n     * @param ClientAssertionTypeInterface $clientAssertionType The method in which to verify the client identity.  Default is HttpBasic\n     *\n     * @ingroup oauth2_section_7\n     */\n    public function __construct($storage = array(), array $config = array(), array $grantTypes = array(), array $responseTypes = array(), TokenTypeInterface $tokenType = null, ScopeInterface $scopeUtil = null, ClientAssertionTypeInterface $clientAssertionType = null)\n    {\n        $storage = is_array($storage) ? $storage : array($storage);\n        $this->storages = array();\n        foreach ($storage as $key => $service) {\n            $this->addStorage($service, $key);\n        }\n\n        // merge all config values.  These get passed to our controller objects\n        $this->config = array_merge(array(\n            'use_jwt_access_tokens'        => false,\n            'jwt_extra_payload_callable' => null,\n            'store_encrypted_token_string' => true,\n            'use_openid_connect'       => false,\n            'id_lifetime'              => 3600,\n            'access_lifetime'          => 3600,\n            'www_realm'                => 'Service',\n            'token_param_name'         => 'access_token',\n            'token_bearer_header_name' => 'Bearer',\n            'enforce_state'            => true,\n            'require_exact_redirect_uri' => true,\n            'allow_implicit'           => false,\n            'allow_credentials_in_request_body' => true,\n            'allow_public_clients'     => true,\n            'always_issue_new_refresh_token' => false,\n            'unset_refresh_token_after_use' => true,\n        ), $config);\n\n        foreach ($grantTypes as $key => $grantType) {\n            $this->addGrantType($grantType, $key);\n        }\n\n        foreach ($responseTypes as $key => $responseType) {\n            $this->addResponseType($responseType, $key);\n        }\n\n        $this->tokenType = $tokenType;\n        $this->scopeUtil = $scopeUtil;\n        $this->clientAssertionType = $clientAssertionType;\n\n        if ($this->config['use_openid_connect']) {\n            $this->validateOpenIdConnect();\n        }\n    }\n\n    /**\n     * @return AuthorizeControllerInterface\n     */\n    public function getAuthorizeController()\n    {\n        if (is_null($this->authorizeController)) {\n            $this->authorizeController = $this->createDefaultAuthorizeController();\n        }\n\n        return $this->authorizeController;\n    }\n\n    /**\n     * @return TokenController\n     */\n    public function getTokenController()\n    {\n        if (is_null($this->tokenController)) {\n            $this->tokenController = $this->createDefaultTokenController();\n        }\n\n        return $this->tokenController;\n    }\n\n    /**\n     * @return ResourceControllerInterface\n     */\n    public function getResourceController()\n    {\n        if (is_null($this->resourceController)) {\n            $this->resourceController = $this->createDefaultResourceController();\n        }\n\n        return $this->resourceController;\n    }\n\n    /**\n     * @return UserInfoControllerInterface\n     */\n    public function getUserInfoController()\n    {\n        if (is_null($this->userInfoController)) {\n            $this->userInfoController = $this->createDefaultUserInfoController();\n        }\n\n        return $this->userInfoController;\n    }\n\n    /**\n     * @param AuthorizeControllerInterface $authorizeController\n     */\n    public function setAuthorizeController(AuthorizeControllerInterface $authorizeController)\n    {\n        $this->authorizeController = $authorizeController;\n    }\n\n    /**\n     * @param TokenControllerInterface $tokenController\n     */\n    public function setTokenController(TokenControllerInterface $tokenController)\n    {\n        $this->tokenController = $tokenController;\n    }\n\n    /**\n     * @param ResourceControllerInterface $resourceController\n     */\n    public function setResourceController(ResourceControllerInterface $resourceController)\n    {\n        $this->resourceController = $resourceController;\n    }\n\n    /**\n     * @param UserInfoControllerInterface $userInfoController\n     */\n    public function setUserInfoController(UserInfoControllerInterface $userInfoController)\n    {\n        $this->userInfoController = $userInfoController;\n    }\n\n    /**\n     * Return claims about the authenticated end-user.\n     * This would be called from the \"/UserInfo\" endpoint as defined in the spec.\n     *\n     * @param RequestInterface  $request  - Request object to grant access token\n     * @param ResponseInterface $response - Response object containing error messages (failure) or user claims (success)\n     * @return ResponseInterface\n     *\n     * @throws \\InvalidArgumentException\n     * @throws \\LogicException\n     *\n     * @see http://openid.net/specs/openid-connect-core-1_0.html#UserInfo\n     */\n    public function handleUserInfoRequest(RequestInterface $request, ResponseInterface $response = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $this->getUserInfoController()->handleUserInfoRequest($request, $this->response);\n\n        return $this->response;\n    }\n\n    /**\n     * Grant or deny a requested access token.\n     * This would be called from the \"/token\" endpoint as defined in the spec.\n     * Obviously, you can call your endpoint whatever you want.\n     *\n     * @param RequestInterface $request   - Request object to grant access token\n     * @param ResponseInterface $response - Response object containing error messages (failure) or access token (success)\n     * @return ResponseInterface\n     *\n     * @throws \\InvalidArgumentException\n     * @throws \\LogicException\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     * @see http://tools.ietf.org/html/rfc6749#section-10.6\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1.3\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function handleTokenRequest(RequestInterface $request, ResponseInterface $response = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $this->getTokenController()->handleTokenRequest($request, $this->response);\n\n        return $this->response;\n    }\n\n    /**\n     * @param RequestInterface  $request  - Request object to grant access token\n     * @param ResponseInterface $response - Response object\n     * @return mixed\n     */\n    public function grantAccessToken(RequestInterface $request, ResponseInterface $response = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $value = $this->getTokenController()->grantAccessToken($request, $this->response);\n\n        return $value;\n    }\n\n    /**\n     * Handle a revoke token request\n     * This would be called from the \"/revoke\" endpoint as defined in the draft Token Revocation spec\n     *\n     * @see https://tools.ietf.org/html/rfc7009#section-2\n     *\n     * @param RequestInterface $request\n     * @param ResponseInterface $response\n     * @return Response|ResponseInterface\n     */\n    public function handleRevokeRequest(RequestInterface $request, ResponseInterface $response = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $this->getTokenController()->handleRevokeRequest($request, $this->response);\n\n        return $this->response;\n    }\n\n    /**\n     * Redirect the user appropriately after approval.\n     *\n     * After the user has approved or denied the resource request the\n     * authorization server should call this function to redirect the user\n     * appropriately.\n     *\n     * @param RequestInterface  $request - The request should have the follow parameters set in the querystring:\n     * - response_type: The requested response: an access token, an authorization code, or both.\n     * - client_id: The client identifier as described in Section 2.\n     * - redirect_uri: An absolute URI to which the authorization server will redirect the user-agent to when the\n     *   end-user authorization step is completed.\n     * - scope: (optional) The scope of the resource request expressed as a list of space-delimited strings.\n     * - state: (optional) An opaque value used by the client to maintain state between the request and callback.\n     *\n     * @param ResponseInterface $response      - Response object\n     * @param bool              $is_authorized - TRUE or FALSE depending on whether the user authorized the access.\n     * @param mixed             $user_id       - Identifier of user who authorized the client\n     * @return ResponseInterface\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function handleAuthorizeRequest(RequestInterface $request, ResponseInterface $response, $is_authorized, $user_id = null)\n    {\n        $this->response = $response;\n        $this->getAuthorizeController()->handleAuthorizeRequest($request, $this->response, $is_authorized, $user_id);\n\n        return $this->response;\n    }\n\n    /**\n     * Pull the authorization request data out of the HTTP request.\n     * - The redirect_uri is OPTIONAL as per draft 20. But your implementation can enforce it\n     *   by setting $config['enforce_redirect'] to true.\n     * - The state is OPTIONAL but recommended to enforce CSRF. Draft 21 states, however, that\n     *   CSRF protection is MANDATORY. You can enforce this by setting the $config['enforce_state'] to true.\n     *\n     * The draft specifies that the parameters should be retrieved from GET, override the Response\n     * object to change this\n     *\n     * @param RequestInterface  $request  - Request object\n     * @param ResponseInterface $response - Response object\n     * @return bool\n     *\n     * The authorization parameters so the authorization server can prompt\n     * the user for approval if valid.\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1.1\n     * @see http://tools.ietf.org/html/rfc6749#section-10.12\n     *\n     * @ingroup oauth2_section_3\n     */\n    public function validateAuthorizeRequest(RequestInterface $request, ResponseInterface $response = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $value = $this->getAuthorizeController()->validateAuthorizeRequest($request, $this->response);\n\n        return $value;\n    }\n\n    /**\n     * @param RequestInterface  $request  - Request object\n     * @param ResponseInterface $response - Response object\n     * @param string            $scope    - Scope\n     * @return mixed\n     */\n    public function verifyResourceRequest(RequestInterface $request, ResponseInterface $response = null, $scope = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $value = $this->getResourceController()->verifyResourceRequest($request, $this->response, $scope);\n\n        return $value;\n    }\n\n    /**\n     * @param RequestInterface  $request  - Request object\n     * @param ResponseInterface $response - Response object\n     * @return mixed\n     */\n    public function getAccessTokenData(RequestInterface $request, ResponseInterface $response = null)\n    {\n        $this->response = is_null($response) ? new Response() : $response;\n        $value = $this->getResourceController()->getAccessTokenData($request, $this->response);\n\n        return $value;\n    }\n\n    /**\n     * @param GrantTypeInterface $grantType\n     * @param mixed              $identifier\n     */\n    public function addGrantType(GrantTypeInterface $grantType, $identifier = null)\n    {\n        if (!is_string($identifier)) {\n            $identifier = $grantType->getQueryStringIdentifier();\n        }\n\n        $this->grantTypes[$identifier] = $grantType;\n\n        // persist added grant type down to TokenController\n        if (!is_null($this->tokenController)) {\n            $this->getTokenController()->addGrantType($grantType, $identifier);\n        }\n    }\n\n    /**\n     * Set a storage object for the server\n     *\n     * @param object $storage - An object implementing one of the Storage interfaces\n     * @param mixed $key - If null, the storage is set to the key of each storage interface it implements\n     *\n     * @throws InvalidArgumentException\n     * @see storageMap\n     */\n    public function addStorage($storage, $key = null)\n    {\n        // if explicitly set to a valid key, do not \"magically\" set below\n        if (isset($this->storageMap[$key])) {\n            if (!is_null($storage) && !$storage instanceof $this->storageMap[$key]) {\n                throw new \\InvalidArgumentException(sprintf('storage of type \"%s\" must implement interface \"%s\"', $key, $this->storageMap[$key]));\n            }\n            $this->storages[$key] = $storage;\n\n            // special logic to handle \"client\" and \"client_credentials\" strangeness\n            if ($key === 'client' && !isset($this->storages['client_credentials'])) {\n                if ($storage instanceof ClientCredentialsInterface) {\n                    $this->storages['client_credentials'] = $storage;\n                }\n            } elseif ($key === 'client_credentials' && !isset($this->storages['client'])) {\n                if ($storage instanceof ClientInterface) {\n                    $this->storages['client'] = $storage;\n                }\n            }\n        } elseif (!is_null($key) && !is_numeric($key)) {\n            throw new \\InvalidArgumentException(sprintf('unknown storage key \"%s\", must be one of [%s]', $key, implode(', ', array_keys($this->storageMap))));\n        } else {\n            $set = false;\n            foreach ($this->storageMap as $type => $interface) {\n                if ($storage instanceof $interface) {\n                    $this->storages[$type] = $storage;\n                    $set = true;\n                }\n            }\n\n            if (!$set) {\n                throw new \\InvalidArgumentException(sprintf('storage of class \"%s\" must implement one of [%s]', get_class($storage), implode(', ', $this->storageMap)));\n            }\n        }\n    }\n\n    /**\n     * @param ResponseTypeInterface $responseType\n     * @param mixed                 $key\n     *\n     * @throws InvalidArgumentException\n     */\n    public function addResponseType(ResponseTypeInterface $responseType, $key = null)\n    {\n        $key = $this->normalizeResponseType($key);\n\n        if (isset($this->responseTypeMap[$key])) {\n            if (!$responseType instanceof $this->responseTypeMap[$key]) {\n                throw new \\InvalidArgumentException(sprintf('responseType of type \"%s\" must implement interface \"%s\"', $key, $this->responseTypeMap[$key]));\n            }\n            $this->responseTypes[$key] = $responseType;\n        } elseif (!is_null($key) && !is_numeric($key)) {\n            throw new \\InvalidArgumentException(sprintf('unknown responseType key \"%s\", must be one of [%s]', $key, implode(', ', array_keys($this->responseTypeMap))));\n        } else {\n            $set = false;\n            foreach ($this->responseTypeMap as $type => $interface) {\n                if ($responseType instanceof $interface) {\n                    $this->responseTypes[$type] = $responseType;\n                    $set = true;\n                }\n            }\n\n            if (!$set) {\n                throw new \\InvalidArgumentException(sprintf('Unknown response type %s.  Please implement one of [%s]', get_class($responseType), implode(', ', $this->responseTypeMap)));\n            }\n        }\n    }\n\n    /**\n     * @return ScopeInterface\n     */\n    public function getScopeUtil()\n    {\n        if (!$this->scopeUtil) {\n            $storage = isset($this->storages['scope']) ? $this->storages['scope'] : null;\n            $this->scopeUtil = new Scope($storage);\n        }\n\n        return $this->scopeUtil;\n    }\n\n    /**\n     * @param ScopeInterface $scopeUtil\n     */\n    public function setScopeUtil($scopeUtil)\n    {\n        $this->scopeUtil = $scopeUtil;\n    }\n\n    /**\n     * @return AuthorizeControllerInterface\n     * @throws LogicException\n     */\n    protected function createDefaultAuthorizeController()\n    {\n        if (!isset($this->storages['client'])) {\n            throw new \\LogicException('You must supply a storage object implementing \\OAuth2\\Storage\\ClientInterface to use the authorize server');\n        }\n        if (0 == count($this->responseTypes)) {\n            $this->responseTypes = $this->getDefaultResponseTypes();\n        }\n        if ($this->config['use_openid_connect'] && !isset($this->responseTypes['id_token'])) {\n            $this->responseTypes['id_token'] = $this->createDefaultIdTokenResponseType();\n            if ($this->config['allow_implicit']) {\n                $this->responseTypes['id_token token'] = $this->createDefaultIdTokenTokenResponseType();\n            }\n        }\n\n        $config = array_intersect_key($this->config, array_flip(explode(' ', 'allow_implicit enforce_state require_exact_redirect_uri')));\n\n        if ($this->config['use_openid_connect']) {\n            return new OpenIDAuthorizeController($this->storages['client'], $this->responseTypes, $config, $this->getScopeUtil());\n        }\n\n        return new AuthorizeController($this->storages['client'], $this->responseTypes, $config, $this->getScopeUtil());\n    }\n\n    /**\n     * @return TokenControllerInterface\n     * @throws LogicException\n     */\n    protected function createDefaultTokenController()\n    {\n        if (0 == count($this->grantTypes)) {\n            $this->grantTypes = $this->getDefaultGrantTypes();\n        }\n\n        if (is_null($this->clientAssertionType)) {\n            // see if HttpBasic assertion type is requred.  If so, then create it from storage classes.\n            foreach ($this->grantTypes as $grantType) {\n                if (!$grantType instanceof ClientAssertionTypeInterface) {\n                    if (!isset($this->storages['client_credentials'])) {\n                        throw new \\LogicException('You must supply a storage object implementing OAuth2\\Storage\\ClientCredentialsInterface to use the token server');\n                    }\n                    $config = array_intersect_key($this->config, array_flip(explode(' ', 'allow_credentials_in_request_body allow_public_clients')));\n                    $this->clientAssertionType = new HttpBasic($this->storages['client_credentials'], $config);\n                    break;\n                }\n            }\n        }\n\n        if (!isset($this->storages['client'])) {\n            throw new LogicException(\"You must supply a storage object implementing OAuth2\\Storage\\ClientInterface to use the token server\");\n        }\n\n        $accessTokenResponseType = $this->getAccessTokenResponseType();\n\n        return new TokenController($accessTokenResponseType, $this->storages['client'], $this->grantTypes, $this->clientAssertionType, $this->getScopeUtil());\n    }\n\n    /**\n     * @return ResourceControllerInterface\n     * @throws LogicException\n     */\n    protected function createDefaultResourceController()\n    {\n        if ($this->config['use_jwt_access_tokens']) {\n            // overwrites access token storage with crypto token storage if \"use_jwt_access_tokens\" is set\n            if (!isset($this->storages['access_token']) || !$this->storages['access_token'] instanceof JwtAccessTokenInterface) {\n                $this->storages['access_token'] = $this->createDefaultJwtAccessTokenStorage();\n            }\n        } elseif (!isset($this->storages['access_token'])) {\n            throw new \\LogicException('You must supply a storage object implementing OAuth2\\Storage\\AccessTokenInterface or use JwtAccessTokens to use the resource server');\n        }\n\n        if (!$this->tokenType) {\n            $this->tokenType = $this->getDefaultTokenType();\n        }\n\n        $config = array_intersect_key($this->config, array('www_realm' => ''));\n\n        return new ResourceController($this->tokenType, $this->storages['access_token'], $config, $this->getScopeUtil());\n    }\n\n    /**\n     * @return UserInfoControllerInterface\n     * @throws LogicException\n     */\n    protected function createDefaultUserInfoController()\n    {\n        if ($this->config['use_jwt_access_tokens']) {\n            // overwrites access token storage with crypto token storage if \"use_jwt_access_tokens\" is set\n            if (!isset($this->storages['access_token']) || !$this->storages['access_token'] instanceof JwtAccessTokenInterface) {\n                $this->storages['access_token'] = $this->createDefaultJwtAccessTokenStorage();\n            }\n        } elseif (!isset($this->storages['access_token'])) {\n            throw new \\LogicException('You must supply a storage object implementing OAuth2\\Storage\\AccessTokenInterface or use JwtAccessTokens to use the UserInfo server');\n        }\n\n        if (!isset($this->storages['user_claims'])) {\n            throw new \\LogicException('You must supply a storage object implementing OAuth2\\OpenID\\Storage\\UserClaimsInterface to use the UserInfo server');\n        }\n\n        if (!$this->tokenType) {\n            $this->tokenType = $this->getDefaultTokenType();\n        }\n\n        $config = array_intersect_key($this->config, array('www_realm' => ''));\n\n        return new UserInfoController($this->tokenType, $this->storages['access_token'], $this->storages['user_claims'], $config, $this->getScopeUtil());\n    }\n\n    /**\n     * @return Bearer\n     */\n    protected function getDefaultTokenType()\n    {\n        $config = array_intersect_key($this->config, array_flip(explode(' ', 'token_param_name token_bearer_header_name')));\n\n        return new Bearer($config);\n    }\n\n    /**\n     * @return array\n     * @throws LogicException\n     */\n    protected function getDefaultResponseTypes()\n    {\n        $responseTypes = array();\n\n        if ($this->config['allow_implicit']) {\n            $responseTypes['token'] = $this->getAccessTokenResponseType();\n        }\n\n        if ($this->config['use_openid_connect']) {\n            $responseTypes['id_token'] = $this->getIdTokenResponseType();\n            if ($this->config['allow_implicit']) {\n                $responseTypes['id_token token'] = $this->getIdTokenTokenResponseType();\n            }\n        }\n\n        if (isset($this->storages['authorization_code'])) {\n            $config = array_intersect_key($this->config, array_flip(explode(' ', 'enforce_redirect auth_code_lifetime')));\n            if ($this->config['use_openid_connect']) {\n                if (!$this->storages['authorization_code'] instanceof OpenIDAuthorizationCodeInterface) {\n                    throw new \\LogicException('Your authorization_code storage must implement OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface to work when \"use_openid_connect\" is true');\n                }\n                $responseTypes['code'] = new OpenIDAuthorizationCodeResponseType($this->storages['authorization_code'], $config);\n                $responseTypes['code id_token'] = new CodeIdToken($responseTypes['code'], $responseTypes['id_token']);\n            } else {\n                $responseTypes['code'] = new AuthorizationCodeResponseType($this->storages['authorization_code'], $config);\n            }\n        }\n\n        if (count($responseTypes) == 0) {\n            throw new \\LogicException('You must supply an array of response_types in the constructor or implement a OAuth2\\Storage\\AuthorizationCodeInterface storage object or set \"allow_implicit\" to true and implement a OAuth2\\Storage\\AccessTokenInterface storage object');\n        }\n\n        return $responseTypes;\n    }\n\n    /**\n     * @return array\n     * @throws LogicException\n     */\n    protected function getDefaultGrantTypes()\n    {\n        $grantTypes = array();\n\n        if (isset($this->storages['user_credentials'])) {\n            $grantTypes['password'] = new UserCredentials($this->storages['user_credentials']);\n        }\n\n        if (isset($this->storages['client_credentials'])) {\n            $config = array_intersect_key($this->config, array('allow_credentials_in_request_body' => ''));\n            $grantTypes['client_credentials'] = new ClientCredentials($this->storages['client_credentials'], $config);\n        }\n\n        if (isset($this->storages['refresh_token'])) {\n            $config = array_intersect_key($this->config, array_flip(explode(' ', 'always_issue_new_refresh_token unset_refresh_token_after_use')));\n            $grantTypes['refresh_token'] = new RefreshToken($this->storages['refresh_token'], $config);\n        }\n\n        if (isset($this->storages['authorization_code'])) {\n            if ($this->config['use_openid_connect']) {\n                if (!$this->storages['authorization_code'] instanceof OpenIDAuthorizationCodeInterface) {\n                    throw new \\LogicException('Your authorization_code storage must implement OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface to work when \"use_openid_connect\" is true');\n                }\n                $grantTypes['authorization_code'] = new OpenIDAuthorizationCodeGrantType($this->storages['authorization_code']);\n            } else {\n                $grantTypes['authorization_code'] = new AuthorizationCode($this->storages['authorization_code']);\n            }\n        }\n\n        if (count($grantTypes) == 0) {\n            throw new \\LogicException('Unable to build default grant types - You must supply an array of grant_types in the constructor');\n        }\n\n        return $grantTypes;\n    }\n\n    /**\n     * @return AccessToken\n     */\n    protected function getAccessTokenResponseType()\n    {\n        if (isset($this->responseTypes['token'])) {\n            return $this->responseTypes['token'];\n        }\n\n        if ($this->config['use_jwt_access_tokens']) {\n            return $this->createDefaultJwtAccessTokenResponseType();\n        }\n\n        return $this->createDefaultAccessTokenResponseType();\n    }\n\n    /**\n     * @return IdToken\n     */\n    protected function getIdTokenResponseType()\n    {\n        if (isset($this->responseTypes['id_token'])) {\n            return $this->responseTypes['id_token'];\n        }\n\n        return $this->createDefaultIdTokenResponseType();\n    }\n\n    /**\n     * @return IdTokenToken\n     */\n    protected function getIdTokenTokenResponseType()\n    {\n        if (isset($this->responseTypes['id_token token'])) {\n            return $this->responseTypes['id_token token'];\n        }\n\n        return $this->createDefaultIdTokenTokenResponseType();\n    }\n\n    /**\n     * For Resource Controller\n     *\n     * @return JwtAccessTokenStorage\n     * @throws LogicException\n     */\n    protected function createDefaultJwtAccessTokenStorage()\n    {\n        if (!isset($this->storages['public_key'])) {\n            throw new \\LogicException('You must supply a storage object implementing OAuth2\\Storage\\PublicKeyInterface to use crypto tokens');\n        }\n        $tokenStorage = null;\n        if (!empty($this->config['store_encrypted_token_string']) && isset($this->storages['access_token'])) {\n            $tokenStorage = $this->storages['access_token'];\n        }\n        // wrap the access token storage as required.\n        return new JwtAccessTokenStorage($this->storages['public_key'], $tokenStorage);\n    }\n\n    /**\n     * For Authorize and Token Controllers\n     *\n     * @return JwtAccessToken\n     * @throws LogicException\n     */\n    protected function createDefaultJwtAccessTokenResponseType()\n    {\n        if (!isset($this->storages['public_key'])) {\n            throw new \\LogicException('You must supply a storage object implementing OAuth2\\Storage\\PublicKeyInterface to use crypto tokens');\n        }\n\n        $tokenStorage = null;\n        if (isset($this->storages['access_token'])) {\n            $tokenStorage = $this->storages['access_token'];\n        }\n\n        $refreshStorage = null;\n        if (isset($this->storages['refresh_token'])) {\n            $refreshStorage = $this->storages['refresh_token'];\n        }\n\n        $config = array_intersect_key($this->config, array_flip(explode(' ', 'store_encrypted_token_string issuer access_lifetime refresh_token_lifetime jwt_extra_payload_callable')));\n\n        return new JwtAccessToken($this->storages['public_key'], $tokenStorage, $refreshStorage, $config);\n    }\n\n    /**\n     * @return AccessToken\n     * @throws LogicException\n     */\n    protected function createDefaultAccessTokenResponseType()\n    {\n        if (!isset($this->storages['access_token'])) {\n            throw new LogicException(\"You must supply a response type implementing OAuth2\\ResponseType\\AccessTokenInterface, or a storage object implementing OAuth2\\Storage\\AccessTokenInterface to use the token server\");\n        }\n\n        $refreshStorage = null;\n        if (isset($this->storages['refresh_token'])) {\n            $refreshStorage = $this->storages['refresh_token'];\n        }\n\n        $config = array_intersect_key($this->config, array_flip(explode(' ', 'access_lifetime refresh_token_lifetime')));\n        $config['token_type'] = $this->tokenType ? $this->tokenType->getTokenType() :  $this->getDefaultTokenType()->getTokenType();\n\n        return new AccessToken($this->storages['access_token'], $refreshStorage, $config);\n    }\n\n    /**\n     * @return IdToken\n     * @throws LogicException\n     */\n    protected function createDefaultIdTokenResponseType()\n    {\n        if (!isset($this->storages['user_claims'])) {\n            throw new LogicException(\"You must supply a storage object implementing OAuth2\\OpenID\\Storage\\UserClaimsInterface to use openid connect\");\n        }\n        if (!isset($this->storages['public_key'])) {\n            throw new LogicException(\"You must supply a storage object implementing OAuth2\\Storage\\PublicKeyInterface to use openid connect\");\n        }\n\n        $config = array_intersect_key($this->config, array_flip(explode(' ', 'issuer id_lifetime')));\n\n        return new IdToken($this->storages['user_claims'], $this->storages['public_key'], $config);\n    }\n\n    /**\n     * @return IdTokenToken\n     */\n    protected function createDefaultIdTokenTokenResponseType()\n    {\n        return new IdTokenToken($this->getAccessTokenResponseType(), $this->getIdTokenResponseType());\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     */\n    protected function validateOpenIdConnect()\n    {\n        $authCodeGrant = $this->getGrantType('authorization_code');\n        if (!empty($authCodeGrant) && !$authCodeGrant instanceof OpenIDAuthorizationCodeGrantType) {\n            throw new \\InvalidArgumentException('You have enabled OpenID Connect, but supplied a grant type that does not support it.');\n        }\n    }\n\n    /**\n     * @param string $name\n     * @return string\n     */\n    protected function normalizeResponseType($name)\n    {\n        // for multiple-valued response types - make them alphabetical\n        if (!empty($name) && false !== strpos($name, ' ')) {\n            $types = explode(' ', $name);\n            sort($types);\n            $name = implode(' ', $types);\n        }\n\n        return $name;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getResponse()\n    {\n        return $this->response;\n    }\n\n    /**\n     * @return array\n     */\n    public function getStorages()\n    {\n        return $this->storages;\n    }\n\n    /**\n     * @param string $name\n     * @return object|null\n     */\n    public function getStorage($name)\n    {\n        return isset($this->storages[$name]) ? $this->storages[$name] : null;\n    }\n\n    /**\n     * @return array\n     */\n    public function getGrantTypes()\n    {\n        return $this->grantTypes;\n    }\n\n    /**\n     * @param string $name\n     * @return object|null\n     */\n    public function getGrantType($name)\n    {\n        return isset($this->grantTypes[$name]) ? $this->grantTypes[$name] : null;\n    }\n\n    /**\n     * @return array\n     */\n    public function getResponseTypes()\n    {\n        return $this->responseTypes;\n    }\n\n    /**\n     * @param string $name\n     * @return object|null\n     */\n    public function getResponseType($name)\n    {\n        // for multiple-valued response types - make them alphabetical\n        $name = $this->normalizeResponseType($name);\n\n        return isset($this->responseTypes[$name]) ? $this->responseTypes[$name] : null;\n    }\n\n    /**\n     * @return TokenTypeInterface\n     */\n    public function getTokenType()\n    {\n        return $this->tokenType;\n    }\n\n    /**\n     * @return ClientAssertionTypeInterface\n     */\n    public function getClientAssertionType()\n    {\n        return $this->clientAssertionType;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed $value\n     */\n    public function setConfig($name, $value)\n    {\n        $this->config[$name] = $value;\n    }\n\n    /**\n     * @param string $name\n     * @param mixed $default\n     * @return mixed\n     */\n    public function getConfig($name, $default = null)\n    {\n        return isset($this->config[$name]) ? $this->config[$name] : $default;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AccessTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should get/save access tokens\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface AccessTokenInterface\n{\n    /**\n     * Look up the supplied oauth_token from storage.\n     *\n     * We need to retrieve access token data as we create and verify tokens.\n     *\n     * @param string $oauth_token - oauth_token to be check with.\n     *\n     * @return array|null - An associative array as below, and return NULL if the supplied oauth_token is invalid:\n     * @code\n     *     array(\n     *         'expires'   => $expires,   // Stored expiration in unix timestamp.\n     *         'client_id' => $client_id, // (optional) Stored client identifier.\n     *         'user_id'   => $user_id,   // (optional) Stored user identifier.\n     *         'scope'     => $scope,     // (optional) Stored scope values in space-separated string.\n     *         'id_token'  => $id_token   // (optional) Stored id_token (if \"use_openid_connect\" is true).\n     *     );\n     * @endcode\n     *\n     * @ingroup oauth2_section_7\n     */\n    public function getAccessToken($oauth_token);\n\n    /**\n     * Store the supplied access token values to storage.\n     *\n     * We need to store access token data as we create and verify tokens.\n     *\n     * @param string $oauth_token - oauth_token to be stored.\n     * @param mixed  $client_id   - client identifier to be stored.\n     * @param mixed  $user_id     - user identifier to be stored.\n     * @param int    $expires     - expiration to be stored as a Unix timestamp.\n     * @param string $scope       - OPTIONAL Scopes to be stored in space-separated string.\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function setAccessToken($oauth_token, $client_id, $user_id, $expires, $scope = null);\n\n    /**\n     * Expire an access token.\n     *\n     * This is not explicitly required in the spec, but if defined in a draft RFC for token\n     * revoking (RFC 7009) https://tools.ietf.org/html/rfc7009\n     *\n     * @param $access_token\n     * Access token to be expired.\n     *\n     * @return BOOL true if an access token was unset, false if not\n     * @ingroup oauth2_section_6\n     *\n     * @todo v2.0 include this method in interface. Omitted to maintain BC in v1.x\n     */\n    //public function unsetAccessToken($access_token);\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/AuthorizationCodeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should get/save authorization codes for the \"Authorization Code\"\n * grant type\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface AuthorizationCodeInterface\n{\n    /**\n     * The Authorization Code grant type supports a response type of \"code\".\n     *\n     * @var string\n     * @see http://tools.ietf.org/html/rfc6749#section-1.4.1\n     * @see http://tools.ietf.org/html/rfc6749#section-4.2\n     */\n    const RESPONSE_TYPE_CODE = \"code\";\n\n    /**\n     * Fetch authorization code data (probably the most common grant type).\n     *\n     * Retrieve the stored data for the given authorization code.\n     *\n     * Required for OAuth2::GRANT_TYPE_AUTH_CODE.\n     *\n     * @param $code\n     * Authorization code to be check with.\n     *\n     * @return\n     * An associative array as below, and NULL if the code is invalid\n     * @code\n     * return array(\n     *     \"client_id\"    => CLIENT_ID,      // REQUIRED Stored client identifier\n     *     \"user_id\"      => USER_ID,        // REQUIRED Stored user identifier\n     *     \"expires\"      => EXPIRES,        // REQUIRED Stored expiration in unix timestamp\n     *     \"redirect_uri\" => REDIRECT_URI,   // REQUIRED Stored redirect URI\n     *     \"scope\"        => SCOPE,          // OPTIONAL Stored scope values in space-separated string\n     * );\n     * @endcode\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function getAuthorizationCode($code);\n\n    /**\n     * Take the provided authorization code values and store them somewhere.\n     *\n     * This function should be the storage counterpart to getAuthCode().\n     *\n     * If storage fails for some reason, we're not currently checking for\n     * any sort of success/failure, so you should bail out of the script\n     * and provide a descriptive fail message.\n     *\n     * Required for OAuth2::GRANT_TYPE_AUTH_CODE.\n     *\n     * @param string $code         - Authorization code to be stored.\n     * @param mixed  $client_id    - Client identifier to be stored.\n     * @param mixed  $user_id      - User identifier to be stored.\n     * @param string $redirect_uri - Redirect URI(s) to be stored in a space-separated string.\n     * @param int    $expires      - Expiration to be stored as a Unix timestamp.\n     * @param string $scope        - OPTIONAL Scopes to be stored in space-separated string.\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null);\n\n    /**\n     * once an Authorization Code is used, it must be expired\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1.2\n     *\n     *    The client MUST NOT use the authorization code\n     *    more than once.  If an authorization code is used more than\n     *    once, the authorization server MUST deny the request and SHOULD\n     *    revoke (when possible) all tokens previously issued based on\n     *    that authorization code\n     *\n     */\n    public function expireAuthorizationCode($code);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Cassandra.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse phpcassa\\ColumnFamily;\nuse phpcassa\\ColumnSlice;\nuse phpcassa\\Connection\\ConnectionPool;\nuse OAuth2\\OpenID\\Storage\\UserClaimsInterface;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\nuse InvalidArgumentException;\n\n/**\n * Cassandra storage for all storage types\n *\n * To use, install \"thobbs/phpcassa\" via composer:\n * <code>\n *     composer require thobbs/phpcassa:dev-master\n * </code>\n *\n * Once this is done, instantiate the connection:\n * <code>\n *     $cassandra = new \\phpcassa\\Connection\\ConnectionPool('oauth2_server', array('127.0.0.1:9160'));\n * </code>\n *\n * Then, register the storage client:\n * <code>\n *     $storage = new OAuth2\\Storage\\Cassandra($cassandra);\n *     $storage->setClientDetails($client_id, $client_secret, $redirect_uri);\n * </code>\n *\n * @see test/lib/OAuth2/Storage/Bootstrap::getCassandraStorage\n */\nclass Cassandra implements AuthorizationCodeInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    UserCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    ScopeInterface,\n    PublicKeyInterface,\n    UserClaimsInterface,\n    OpenIDAuthorizationCodeInterface\n{\n\n    private $cache;\n\n    /**\n     * @var ConnectionPool\n     */\n    protected $cassandra;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * Cassandra Storage! uses phpCassa\n     *\n     * @param ConnectionPool|array $connection\n     * @param array                $config\n     *\n     * @throws InvalidArgumentException\n     */\n    public function __construct($connection = array(), array $config = array())\n    {\n        if ($connection instanceof ConnectionPool) {\n            $this->cassandra = $connection;\n        } else {\n            if (!is_array($connection)) {\n                throw new InvalidArgumentException('First argument to OAuth2\\Storage\\Cassandra must be an instance of phpcassa\\Connection\\ConnectionPool or a configuration array');\n            }\n            $connection = array_merge(array(\n                'keyspace' => 'oauth2',\n                'servers'  => null,\n            ), $connection);\n\n            $this->cassandra = new ConnectionPool($connection['keyspace'], $connection['servers']);\n        }\n\n        $this->config = array_merge(array(\n            // cassandra config\n            'column_family' => 'auth',\n\n            // key names\n            'client_key' => 'oauth_clients:',\n            'access_token_key' => 'oauth_access_tokens:',\n            'refresh_token_key' => 'oauth_refresh_tokens:',\n            'code_key' => 'oauth_authorization_codes:',\n            'user_key' => 'oauth_users:',\n            'jwt_key' => 'oauth_jwt:',\n            'scope_key' => 'oauth_scopes:',\n            'public_key_key'  => 'oauth_public_keys:',\n        ), $config);\n    }\n\n    /**\n     * @param $key\n     * @return bool|mixed\n     */\n    protected function getValue($key)\n    {\n        if (isset($this->cache[$key])) {\n            return $this->cache[$key];\n        }\n        $cf = new ColumnFamily($this->cassandra, $this->config['column_family']);\n\n        try {\n            $value = $cf->get($key, new ColumnSlice(\"\", \"\"));\n            $value = array_shift($value);\n        } catch (\\cassandra\\NotFoundException $e) {\n            return false;\n        }\n\n        return json_decode($value, true);\n    }\n\n    /**\n     * @param $key\n     * @param $value\n     * @param int $expire\n     * @return bool\n     */\n    protected function setValue($key, $value, $expire = 0)\n    {\n        $this->cache[$key] = $value;\n\n        $cf = new ColumnFamily($this->cassandra, $this->config['column_family']);\n\n        $str = json_encode($value);\n        if ($expire > 0) {\n            try {\n                $seconds = $expire - time();\n                // __data key set as C* requires a field, note: max TTL can only be 630720000 seconds\n                $cf->insert($key, array('__data' => $str), null, $seconds);\n            } catch (\\Exception $e) {\n                return false;\n            }\n        } else {\n            try {\n                // __data key set as C* requires a field\n                $cf->insert($key, array('__data' => $str));\n            } catch (\\Exception $e) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * @param $key\n     * @return bool\n     */\n    protected function expireValue($key)\n    {\n        unset($this->cache[$key]);\n\n        $cf = new ColumnFamily($this->cassandra, $this->config['column_family']);\n\n        if ($cf->get_count($key) > 0) {\n            try {\n                // __data key set as C* requires a field\n                $cf->remove($key, array('__data'));\n            } catch (\\Exception $e) {\n                return false;\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * @param string $code\n     * @return bool|mixed\n     */\n    public function getAuthorizationCode($code)\n    {\n        return $this->getValue($this->config['code_key'] . $code);\n    }\n\n    /**\n     * @param string $authorization_code\n     * @param mixed  $client_id\n     * @param mixed  $user_id\n     * @param string $redirect_uri\n     * @param int    $expires\n     * @param string $scope\n     * @param string $id_token\n     * @return bool\n     */\n    public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        return $this->setValue(\n            $this->config['code_key'] . $authorization_code,\n            compact('authorization_code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token'),\n            $expires\n        );\n    }\n\n    /**\n     * @param string $code\n     * @return bool\n     */\n    public function expireAuthorizationCode($code)\n    {\n        $key = $this->config['code_key'] . $code;\n        unset($this->cache[$key]);\n\n        return $this->expireValue($key);\n    }\n\n    /**\n     * @param string $username\n     * @param string $password\n     * @return bool\n     */\n    public function checkUserCredentials($username, $password)\n    {\n        if ($user = $this->getUser($username)) {\n            return $this->checkPassword($user, $password);\n        }\n\n        return false;\n    }\n\n    /**\n     * plaintext passwords are bad!  Override this for your application\n     *\n     * @param array  $user\n     * @param string $password\n     * @return bool\n     */\n    protected function checkPassword($user, $password)\n    {\n        return $user['password'] == $this->hashPassword($password);\n    }\n\n    // use a secure hashing algorithm when storing passwords. Override this for your application\n    protected function hashPassword($password)\n    {\n        return sha1($password);\n    }\n\n    /**\n     * @param string $username\n     * @return array|bool|false\n     */\n    public function getUserDetails($username)\n    {\n        return $this->getUser($username);\n    }\n\n    /**\n     * @param string $username\n     * @return array|bool\n     */\n    public function getUser($username)\n    {\n        if (!$userInfo = $this->getValue($this->config['user_key'] . $username)) {\n            return false;\n        }\n\n        // the default behavior is to use \"username\" as the user_id\n        return array_merge(array(\n            'user_id' => $username,\n        ), $userInfo);\n    }\n\n    /**\n     * @param string $username\n     * @param string $password\n     * @param string $first_name\n     * @param string $last_name\n     * @return bool\n     */\n    public function setUser($username, $password, $first_name = null, $last_name = null)\n    {\n        $password = $this->hashPassword($password);\n\n        return $this->setValue(\n            $this->config['user_key'] . $username,\n            compact('username', 'password', 'first_name', 'last_name')\n        );\n    }\n\n    /**\n     * @param mixed  $client_id\n     * @param string $client_secret\n     * @return bool\n     */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        if (!$client = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        return isset($client['client_secret'])\n            && $client['client_secret'] == $client_secret;\n    }\n\n    /**\n     * @param $client_id\n     * @return bool\n     */\n    public function isPublicClient($client_id)\n    {\n        if (!$client = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        return empty($client['client_secret']);\n    }\n\n    /**\n     * @param $client_id\n     * @return array|bool|mixed\n     */\n    public function getClientDetails($client_id)\n    {\n        return $this->getValue($this->config['client_key'] . $client_id);\n    }\n\n    /**\n     * @param $client_id\n     * @param null $client_secret\n     * @param null $redirect_uri\n     * @param null $grant_types\n     * @param null $scope\n     * @param null $user_id\n     * @return bool\n     */\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        return $this->setValue(\n            $this->config['client_key'] . $client_id,\n            compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id')\n        );\n    }\n\n    /**\n     * @param $client_id\n     * @param $grant_type\n     * @return bool\n     */\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n\n            return in_array($grant_type, (array) $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /**\n     * @param $refresh_token\n     * @return bool|mixed\n     */\n    public function getRefreshToken($refresh_token)\n    {\n        return $this->getValue($this->config['refresh_token_key'] . $refresh_token);\n    }\n\n    /**\n     * @param $refresh_token\n     * @param $client_id\n     * @param $user_id\n     * @param $expires\n     * @param null $scope\n     * @return bool\n     */\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        return $this->setValue(\n            $this->config['refresh_token_key'] . $refresh_token,\n            compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope'),\n            $expires\n        );\n    }\n\n    /**\n     * @param $refresh_token\n     * @return bool\n     */\n    public function unsetRefreshToken($refresh_token)\n    {\n        return $this->expireValue($this->config['refresh_token_key'] . $refresh_token);\n    }\n\n    /**\n     * @param string $access_token\n     * @return array|bool|mixed|null\n     */\n    public function getAccessToken($access_token)\n    {\n        return $this->getValue($this->config['access_token_key'].$access_token);\n    }\n\n    /**\n     * @param string $access_token\n     * @param mixed $client_id\n     * @param mixed $user_id\n     * @param int $expires\n     * @param null $scope\n     * @return bool\n     */\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        return $this->setValue(\n            $this->config['access_token_key'].$access_token,\n            compact('access_token', 'client_id', 'user_id', 'expires', 'scope'),\n            $expires\n        );\n    }\n\n    /**\n     * @param $access_token\n     * @return bool\n     */\n    public function unsetAccessToken($access_token)\n    {\n        return $this->expireValue($this->config['access_token_key'] . $access_token);\n    }\n\n    /**\n     * @param $scope\n     * @return bool\n     */\n    public function scopeExists($scope)\n    {\n        $scope = explode(' ', $scope);\n\n        $result = $this->getValue($this->config['scope_key'].'supported:global');\n\n        $supportedScope = explode(' ', (string) $result);\n\n        return (count(array_diff($scope, $supportedScope)) == 0);\n    }\n\n    /**\n     * @param null $client_id\n     * @return bool|mixed\n     */\n    public function getDefaultScope($client_id = null)\n    {\n        if (is_null($client_id) || !$result = $this->getValue($this->config['scope_key'].'default:'.$client_id)) {\n            $result = $this->getValue($this->config['scope_key'].'default:global');\n        }\n\n        return $result;\n    }\n\n    /**\n     * @param $scope\n     * @param null $client_id\n     * @param string $type\n     * @return bool\n     * @throws \\InvalidArgumentException\n     */\n    public function setScope($scope, $client_id = null, $type = 'supported')\n    {\n        if (!in_array($type, array('default', 'supported'))) {\n            throw new \\InvalidArgumentException('\"$type\" must be one of \"default\", \"supported\"');\n        }\n\n        if (is_null($client_id)) {\n            $key = $this->config['scope_key'].$type.':global';\n        } else {\n            $key = $this->config['scope_key'].$type.':'.$client_id;\n        }\n\n        return $this->setValue($key, $scope);\n    }\n\n    /**\n     * @param $client_id\n     * @param $subject\n     * @return bool|null\n     */\n    public function getClientKey($client_id, $subject)\n    {\n        if (!$jwt = $this->getValue($this->config['jwt_key'] . $client_id)) {\n            return false;\n        }\n\n        if (isset($jwt['subject']) && $jwt['subject'] == $subject ) {\n            return $jwt['key'];\n        }\n\n        return null;\n    }\n\n    /**\n     * @param $client_id\n     * @param $key\n     * @param null $subject\n     * @return bool\n     */\n    public function setClientKey($client_id, $key, $subject = null)\n    {\n        return $this->setValue($this->config['jwt_key'] . $client_id, array(\n            'key' => $key,\n            'subject' => $subject\n        ));\n    }\n\n    /**\n     * @param $client_id\n     * @return bool|null\n     */\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    /**\n     * @param $client_id\n     * @param $subject\n     * @param $audience\n     * @param $expiration\n     * @param $jti\n     * @throws \\Exception\n     */\n    public function getJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs cassandra implementation.\n        throw new \\Exception('getJti() for the Cassandra driver is currently unimplemented.');\n    }\n\n    /**\n     * @param $client_id\n     * @param $subject\n     * @param $audience\n     * @param $expiration\n     * @param $jti\n     * @throws \\Exception\n     */\n    public function setJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs cassandra implementation.\n        throw new \\Exception('setJti() for the Cassandra driver is currently unimplemented.');\n    }\n\n    /**\n     * @param string $client_id\n     * @return mixed\n     */\n    public function getPublicKey($client_id = '')\n    {\n        $public_key = $this->getValue($this->config['public_key_key'] . $client_id);\n        if (is_array($public_key)) {\n            return $public_key['public_key'];\n        }\n        $public_key = $this->getValue($this->config['public_key_key']);\n        if (is_array($public_key)) {\n            return $public_key['public_key'];\n        }\n    }\n\n    /**\n     * @param string $client_id\n     * @return mixed\n     */\n    public function getPrivateKey($client_id = '')\n    {\n        $public_key = $this->getValue($this->config['public_key_key'] . $client_id);\n        if (is_array($public_key)) {\n            return $public_key['private_key'];\n        }\n        $public_key = $this->getValue($this->config['public_key_key']);\n        if (is_array($public_key)) {\n            return $public_key['private_key'];\n        }\n    }\n\n    /**\n     * @param null $client_id\n     * @return mixed|string\n     */\n    public function getEncryptionAlgorithm($client_id = null)\n    {\n        $public_key = $this->getValue($this->config['public_key_key'] . $client_id);\n        if (is_array($public_key)) {\n            return $public_key['encryption_algorithm'];\n        }\n        $public_key = $this->getValue($this->config['public_key_key']);\n        if (is_array($public_key)) {\n            return $public_key['encryption_algorithm'];\n        }\n\n        return 'RS256';\n    }\n\n    /**\n     * @param mixed $user_id\n     * @param string $claims\n     * @return array|bool\n     */\n    public function getUserClaims($user_id, $claims)\n    {\n        $userDetails = $this->getUserDetails($user_id);\n        if (!is_array($userDetails)) {\n            return false;\n        }\n\n        $claims = explode(' ', trim($claims));\n        $userClaims = array();\n\n        // for each requested claim, if the user has the claim, set it in the response\n        $validClaims = explode(' ', self::VALID_CLAIMS);\n        foreach ($validClaims as $validClaim) {\n            if (in_array($validClaim, $claims)) {\n                if ($validClaim == 'address') {\n                    // address is an object with subfields\n                    $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);\n                } else {\n                    $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));\n                }\n            }\n        }\n\n        return $userClaims;\n    }\n\n    /**\n     * @param $claim\n     * @param $userDetails\n     * @return array\n     */\n    protected function getUserClaim($claim, $userDetails)\n    {\n        $userClaims = array();\n        $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));\n        $claimValues = explode(' ', $claimValuesString);\n\n        foreach ($claimValues as $value) {\n            if ($value == 'email_verified') {\n                $userClaims[$value] = $userDetails[$value]=='true' ? true : false;\n            } else {\n                $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;\n            }\n        }\n\n        return $userClaims;\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientCredentialsInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify how the OAuth2 Server\n * should verify client credentials\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface ClientCredentialsInterface extends ClientInterface\n{\n\n    /**\n     * Make sure that the client credentials is valid.\n     *\n     * @param $client_id\n     * Client identifier to be check with.\n     * @param $client_secret\n     * (optional) If a secret is required, check that they've given the right one.\n     *\n     * @return\n     * TRUE if the client credentials are valid, and MUST return FALSE if it isn't.\n     * @endcode\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-3.1\n     *\n     * @ingroup oauth2_section_3\n     */\n    public function checkClientCredentials($client_id, $client_secret = null);\n\n    /**\n     * Determine if the client is a \"public\" client, and therefore\n     * does not require passing credentials for certain grant types\n     *\n     * @param $client_id\n     * Client identifier to be check with.\n     *\n     * @return\n     * TRUE if the client is public, and FALSE if it isn't.\n     * @endcode\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-2.3\n     * @see https://github.com/bshaffer/oauth2-server-php/issues/257\n     *\n     * @ingroup oauth2_section_2\n     */\n    public function isPublicClient($client_id);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ClientInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should retrieve client information\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface ClientInterface\n{\n    /**\n     * Get client details corresponding client_id.\n     *\n     * OAuth says we should store request URIs for each registered client.\n     * Implement this function to grab the stored URI for a given client id.\n     *\n     * @param $client_id\n     * Client identifier to be check with.\n     *\n     * @return array\n     *               Client details. The only mandatory key in the array is \"redirect_uri\".\n     *               This function MUST return FALSE if the given client does not exist or is\n     *               invalid. \"redirect_uri\" can be space-delimited to allow for multiple valid uris.\n     *               <code>\n     *               return array(\n     *               \"redirect_uri\" => REDIRECT_URI,      // REQUIRED redirect_uri registered for the client\n     *               \"client_id\"    => CLIENT_ID,         // OPTIONAL the client id\n     *               \"grant_types\"  => GRANT_TYPES,       // OPTIONAL an array of restricted grant types\n     *               \"user_id\"      => USER_ID,           // OPTIONAL the user identifier associated with this client\n     *               \"scope\"        => SCOPE,             // OPTIONAL the scopes allowed for this client\n     *               );\n     *               </code>\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function getClientDetails($client_id);\n\n    /**\n     * Get the scope associated with this client\n     *\n     * @return\n     * STRING the space-delineated scope list for the specified client_id\n     */\n    public function getClientScope($client_id);\n\n    /**\n     * Check restricted grant types of corresponding client identifier.\n     *\n     * If you want to restrict clients to certain grant types, override this\n     * function.\n     *\n     * @param $client_id\n     * Client identifier to be check with.\n     * @param $grant_type\n     * Grant type to be check with\n     *\n     * @return\n     * TRUE if the grant type is supported by this client identifier, and\n     * FALSE if it isn't.\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function checkRestrictedGrantType($client_id, $grant_type);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/CouchbaseDB.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\n\n/**\n * Simple Couchbase storage for all storage types\n *\n * This class should be extended or overridden as required\n *\n * NOTE: Passwords are stored in plaintext, which is never\n * a good idea.  Be sure to override this for your application\n *\n * @author Tom Park <tom@raucter.com>\n */\nclass CouchbaseDB implements AuthorizationCodeInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    UserCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    OpenIDAuthorizationCodeInterface\n{\n    protected $db;\n    protected $config;\n\n    public function __construct($connection, $config = array())\n    {\n        if ($connection instanceof \\Couchbase) {\n            $this->db = $connection;\n        } else {\n            if (!is_array($connection) || !is_array($connection['servers'])) {\n                throw new \\InvalidArgumentException('First argument to OAuth2\\Storage\\CouchbaseDB must be an instance of Couchbase or a configuration array containing a server array');\n            }\n\n            $this->db = new \\Couchbase($connection['servers'], (!isset($connection['username'])) ? '' : $connection['username'], (!isset($connection['password'])) ? '' : $connection['password'], $connection['bucket'], false);\n        }\n\n        $this->config = array_merge(array(\n            'client_table' => 'oauth_clients',\n            'access_token_table' => 'oauth_access_tokens',\n            'refresh_token_table' => 'oauth_refresh_tokens',\n            'code_table' => 'oauth_authorization_codes',\n            'user_table' => 'oauth_users',\n            'jwt_table' => 'oauth_jwt',\n        ), $config);\n    }\n\n    // Helper function to access couchbase item by type:\n    protected function getObjectByType($name,$id)\n    {\n        return json_decode($this->db->get($this->config[$name].'-'.$id),true);\n    }\n\n    // Helper function to set couchbase item by type:\n    protected function setObjectByType($name,$id,$array)\n    {\n        $array['type'] = $name;\n\n        return $this->db->set($this->config[$name].'-'.$id,json_encode($array));\n    }\n\n    // Helper function to delete couchbase item by type, wait for persist to at least 1 node\n    protected function deleteObjectByType($name,$id)\n    {\n        $this->db->delete($this->config[$name].'-'.$id,\"\",1);\n    }\n\n    /* ClientCredentialsInterface */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        if ($result = $this->getObjectByType('client_table',$client_id)) {\n            return $result['client_secret'] == $client_secret;\n        }\n\n        return false;\n    }\n\n    public function isPublicClient($client_id)\n    {\n        if (!$result = $this->getObjectByType('client_table',$client_id)) {\n            return false;\n        }\n\n        return empty($result['client_secret']);\n    }\n\n    /* ClientInterface */\n    public function getClientDetails($client_id)\n    {\n        $result = $this->getObjectByType('client_table',$client_id);\n\n        return is_null($result) ? false : $result;\n    }\n\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        if ($this->getClientDetails($client_id)) {\n\n            $this->setObjectByType('client_table',$client_id, array(\n                'client_id'     => $client_id,\n                'client_secret' => $client_secret,\n                'redirect_uri'  => $redirect_uri,\n                'grant_types'   => $grant_types,\n                'scope'         => $scope,\n                'user_id'       => $user_id,\n            ));\n        } else {\n            $this->setObjectByType('client_table',$client_id, array(\n                'client_id'     => $client_id,\n                'client_secret' => $client_secret,\n                'redirect_uri'  => $redirect_uri,\n                'grant_types'   => $grant_types,\n                'scope'         => $scope,\n                'user_id'       => $user_id,\n            ));\n        }\n\n        return true;\n    }\n\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n\n            return in_array($grant_type, $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /* AccessTokenInterface */\n    public function getAccessToken($access_token)\n    {\n        $token = $this->getObjectByType('access_token_table',$access_token);\n\n        return is_null($token) ? false : $token;\n    }\n\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // if it exists, update it.\n        if ($this->getAccessToken($access_token)) {\n            $this->setObjectByType('access_token_table',$access_token, array(\n                'access_token' => $access_token,\n                'client_id' => $client_id,\n                'expires' => $expires,\n                'user_id' => $user_id,\n                'scope' => $scope\n            ));\n        } else {\n            $this->setObjectByType('access_token_table',$access_token,  array(\n                'access_token' => $access_token,\n                'client_id' => $client_id,\n                'expires' => $expires,\n                'user_id' => $user_id,\n                'scope' => $scope\n            ));\n        }\n\n        return true;\n    }\n\n    /* AuthorizationCodeInterface */\n    public function getAuthorizationCode($code)\n    {\n        $code = $this->getObjectByType('code_table',$code);\n\n        return is_null($code) ? false : $code;\n    }\n\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        // if it exists, update it.\n        if ($this->getAuthorizationCode($code)) {\n            $this->setObjectByType('code_table',$code, array(\n                'authorization_code' => $code,\n                'client_id' => $client_id,\n                'user_id' => $user_id,\n                'redirect_uri' => $redirect_uri,\n                'expires' => $expires,\n                'scope' => $scope,\n                'id_token' => $id_token,\n            ));\n        } else {\n            $this->setObjectByType('code_table',$code,array(\n                'authorization_code' => $code,\n                'client_id' => $client_id,\n                'user_id' => $user_id,\n                'redirect_uri' => $redirect_uri,\n                'expires' => $expires,\n                'scope' => $scope,\n                'id_token' => $id_token,\n            ));\n        }\n\n        return true;\n    }\n\n    public function expireAuthorizationCode($code)\n    {\n        $this->deleteObjectByType('code_table',$code);\n\n        return true;\n    }\n\n    /* UserCredentialsInterface */\n    public function checkUserCredentials($username, $password)\n    {\n        if ($user = $this->getUser($username)) {\n            return $this->checkPassword($user, $password);\n        }\n\n        return false;\n    }\n\n    public function getUserDetails($username)\n    {\n        if ($user = $this->getUser($username)) {\n            $user['user_id'] = $user['username'];\n        }\n\n        return $user;\n    }\n\n    /* RefreshTokenInterface */\n    public function getRefreshToken($refresh_token)\n    {\n        $token = $this->getObjectByType('refresh_token_table',$refresh_token);\n\n        return is_null($token) ? false : $token;\n    }\n\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        $this->setObjectByType('refresh_token_table',$refresh_token, array(\n            'refresh_token' => $refresh_token,\n            'client_id' => $client_id,\n            'user_id' => $user_id,\n            'expires' => $expires,\n            'scope' => $scope\n        ));\n\n        return true;\n    }\n\n    public function unsetRefreshToken($refresh_token)\n    {\n        $this->deleteObjectByType('refresh_token_table',$refresh_token);\n\n        return true;\n    }\n\n    // plaintext passwords are bad!  Override this for your application\n    protected function checkPassword($user, $password)\n    {\n        return $user['password'] == $password;\n    }\n\n    public function getUser($username)\n    {\n        $result = $this->getObjectByType('user_table',$username);\n\n        return is_null($result) ? false : $result;\n    }\n\n    public function setUser($username, $password, $firstName = null, $lastName = null)\n    {\n        if ($this->getUser($username)) {\n            $this->setObjectByType('user_table',$username, array(\n                'username' => $username,\n                'password' => $password,\n                'first_name' => $firstName,\n                'last_name' => $lastName\n            ));\n\n        } else {\n            $this->setObjectByType('user_table',$username, array(\n                'username' => $username,\n                'password' => $password,\n                'first_name' => $firstName,\n                'last_name' => $lastName\n            ));\n\n        }\n\n        return true;\n    }\n\n    public function getClientKey($client_id, $subject)\n    {\n        if (!$jwt = $this->getObjectByType('jwt_table',$client_id)) {\n            return false;\n        }\n\n        if (isset($jwt['subject']) && $jwt['subject'] == $subject) {\n            return $jwt['key'];\n        }\n\n        return false;\n    }\n\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    public function getJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs couchbase implementation.\n        throw new \\Exception('getJti() for the Couchbase driver is currently unimplemented.');\n    }\n\n    public function setJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs couchbase implementation.\n        throw new \\Exception('setJti() for the Couchbase driver is currently unimplemented.');\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/DynamoDB.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse Aws\\DynamoDb\\DynamoDbClient;\n\nuse OAuth2\\OpenID\\Storage\\UserClaimsInterface;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\n/**\n * DynamoDB storage for all storage types\n *\n * To use, install \"aws/aws-sdk-php\" via composer\n * <code>\n *  composer require aws/aws-sdk-php:dev-master\n * </code>\n *\n * Once this is done, instantiate the DynamoDB client\n * <code>\n *  $storage = new OAuth2\\Storage\\Dynamodb(array(\"key\" => \"YOURKEY\", \"secret\" => \"YOURSECRET\", \"region\" => \"YOURREGION\"));\n * </code>\n *\n * Table :\n *  - oauth_access_tokens (primary hash key : access_token)\n *  - oauth_authorization_codes (primary hash key : authorization_code)\n *  - oauth_clients (primary hash key : client_id)\n *  - oauth_jwt (primary hash key : client_id, primary range key : subject)\n *  - oauth_public_keys (primary hash key : client_id)\n *  - oauth_refresh_tokens (primary hash key : refresh_token)\n *  - oauth_scopes (primary hash key : scope, secondary index : is_default-index hash key is_default)\n *  - oauth_users (primary hash key : username)\n *\n * @author Frederic AUGUSTE <frederic.auguste at gmail dot com>\n */\nclass DynamoDB implements\n    AuthorizationCodeInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    UserCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    ScopeInterface,\n    PublicKeyInterface,\n    UserClaimsInterface,\n    OpenIDAuthorizationCodeInterface\n{\n    protected $client;\n    protected $config;\n\n    public function __construct($connection, $config = array())\n    {\n        if (!($connection instanceof DynamoDbClient)) {\n            if (!is_array($connection)) {\n                throw new \\InvalidArgumentException('First argument to OAuth2\\Storage\\Dynamodb must be an instance a configuration array containt key, secret, region');\n            }\n            if (!array_key_exists(\"key\",$connection) || !array_key_exists(\"secret\",$connection) || !array_key_exists(\"region\",$connection) ) {\n                throw new \\InvalidArgumentException('First argument to OAuth2\\Storage\\Dynamodb must be an instance a configuration array containt key, secret, region');\n            }\n            $this->client = DynamoDbClient::factory(array(\n                'key' => $connection[\"key\"],\n                'secret' => $connection[\"secret\"],\n                'region' =>$connection[\"region\"]\n            ));\n        } else {\n            $this->client = $connection;\n        }\n\n        $this->config = array_merge(array(\n            'client_table' => 'oauth_clients',\n            'access_token_table' => 'oauth_access_tokens',\n            'refresh_token_table' => 'oauth_refresh_tokens',\n            'code_table' => 'oauth_authorization_codes',\n            'user_table' => 'oauth_users',\n            'jwt_table'  => 'oauth_jwt',\n            'scope_table'  => 'oauth_scopes',\n            'public_key_table'  => 'oauth_public_keys',\n        ), $config);\n    }\n\n    /* OAuth2\\Storage\\ClientCredentialsInterface */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['client_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id))\n        ));\n\n        return  $result->count()==1 && $result[\"Item\"][\"client_secret\"][\"S\"] == $client_secret;\n    }\n\n    public function isPublicClient($client_id)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['client_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id))\n        ));\n\n        if ($result->count()==0) {\n            return false ;\n        }\n\n        return empty($result[\"Item\"][\"client_secret\"]);\n    }\n\n    /* OAuth2\\Storage\\ClientInterface */\n    public function getClientDetails($client_id)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['client_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $result = $this->dynamo2array($result);\n        foreach (array('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id') as $key => $val) {\n            if (!array_key_exists ($val, $result)) {\n                $result[$val] = null;\n            }\n        }\n\n        return $result;\n    }\n\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        $clientData = compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id');\n        $clientData = array_filter($clientData, 'self::isNotEmpty');\n\n        $result = $this->client->putItem(array(\n            'TableName' =>  $this->config['client_table'],\n            'Item' => $this->client->formatAttributes($clientData)\n        ));\n\n        return true;\n    }\n\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n\n            return in_array($grant_type, (array) $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /* OAuth2\\Storage\\AccessTokenInterface */\n    public function getAccessToken($access_token)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['access_token_table'],\n            \"Key\" => array('access_token'   => array('S' => $access_token))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n        if (array_key_exists ('expires', $token)) {\n            $token['expires'] = strtotime($token['expires']);\n        }\n\n        return $token;\n    }\n\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        $clientData = compact('access_token', 'client_id', 'user_id', 'expires', 'scope');\n        $clientData = array_filter($clientData, 'self::isNotEmpty');\n\n        $result = $this->client->putItem(array(\n            'TableName' =>  $this->config['access_token_table'],\n            'Item' => $this->client->formatAttributes($clientData)\n        ));\n\n        return true;\n\n    }\n\n    public function unsetAccessToken($access_token)\n    {\n        $result = $this->client->deleteItem(array(\n            'TableName' =>  $this->config['access_token_table'],\n            'Key' => $this->client->formatAttributes(array(\"access_token\" => $access_token)),\n            'ReturnValues' => 'ALL_OLD',\n        ));\n\n        return null !== $result->get('Attributes');\n    }\n\n    /* OAuth2\\Storage\\AuthorizationCodeInterface */\n    public function getAuthorizationCode($code)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['code_table'],\n            \"Key\" => array('authorization_code'   => array('S' => $code))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n        if (!array_key_exists(\"id_token\", $token )) {\n            $token['id_token'] = null;\n        }\n        $token['expires'] = strtotime($token['expires']);\n\n        return $token;\n\n    }\n\n    public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        $clientData = compact('authorization_code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'id_token', 'scope');\n        $clientData = array_filter($clientData, 'self::isNotEmpty');\n\n        $result = $this->client->putItem(array(\n            'TableName' =>  $this->config['code_table'],\n            'Item' => $this->client->formatAttributes($clientData)\n        ));\n\n        return true;\n    }\n\n    public function expireAuthorizationCode($code)\n    {\n\n        $result = $this->client->deleteItem(array(\n            'TableName' =>  $this->config['code_table'],\n            'Key' => $this->client->formatAttributes(array(\"authorization_code\" => $code))\n        ));\n\n        return true;\n    }\n\n    /* OAuth2\\Storage\\UserCredentialsInterface */\n    public function checkUserCredentials($username, $password)\n    {\n        if ($user = $this->getUser($username)) {\n            return $this->checkPassword($user, $password);\n        }\n\n        return false;\n    }\n\n    public function getUserDetails($username)\n    {\n        return $this->getUser($username);\n    }\n\n    /* UserClaimsInterface */\n    public function getUserClaims($user_id, $claims)\n    {\n        if (!$userDetails = $this->getUserDetails($user_id)) {\n            return false;\n        }\n\n        $claims = explode(' ', trim($claims));\n        $userClaims = array();\n\n        // for each requested claim, if the user has the claim, set it in the response\n        $validClaims = explode(' ', self::VALID_CLAIMS);\n        foreach ($validClaims as $validClaim) {\n            if (in_array($validClaim, $claims)) {\n                if ($validClaim == 'address') {\n                    // address is an object with subfields\n                    $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);\n                } else {\n                    $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));\n                }\n            }\n        }\n\n        return $userClaims;\n    }\n\n    protected function getUserClaim($claim, $userDetails)\n    {\n        $userClaims = array();\n        $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));\n        $claimValues = explode(' ', $claimValuesString);\n\n        foreach ($claimValues as $value) {\n            if ($value == 'email_verified') {\n                $userClaims[$value] = $userDetails[$value]=='true' ? true : false;\n            } else {\n                $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;\n            }\n        }\n\n        return $userClaims;\n    }\n\n    /* OAuth2\\Storage\\RefreshTokenInterface */\n    public function getRefreshToken($refresh_token)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['refresh_token_table'],\n            \"Key\" => array('refresh_token'   => array('S' => $refresh_token))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n        $token['expires'] = strtotime($token['expires']);\n\n        return $token;\n    }\n\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        $clientData = compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope');\n        $clientData = array_filter($clientData, 'self::isNotEmpty');\n\n        $result = $this->client->putItem(array(\n            'TableName' =>  $this->config['refresh_token_table'],\n            'Item' => $this->client->formatAttributes($clientData)\n        ));\n\n        return true;\n    }\n\n    public function unsetRefreshToken($refresh_token)\n    {\n        $result = $this->client->deleteItem(array(\n            'TableName' =>  $this->config['refresh_token_table'],\n            'Key' => $this->client->formatAttributes(array(\"refresh_token\" => $refresh_token))\n        ));\n\n        return true;\n    }\n\n    // plaintext passwords are bad!  Override this for your application\n    protected function checkPassword($user, $password)\n    {\n        return $user['password'] == $this->hashPassword($password);\n    }\n\n    // use a secure hashing algorithm when storing passwords. Override this for your application\n    protected function hashPassword($password)\n    {\n        return sha1($password);\n    }\n\n    public function getUser($username)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['user_table'],\n            \"Key\" => array('username'   => array('S' => $username))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n        $token['user_id'] = $username;\n\n        return $token;\n    }\n\n    public function setUser($username, $password, $first_name = null, $last_name = null)\n    {\n        // do not store in plaintext\n        $password = $this->hashPassword($password);\n\n        $clientData = compact('username', 'password', 'first_name', 'last_name');\n        $clientData = array_filter($clientData, 'self::isNotEmpty');\n\n        $result = $this->client->putItem(array(\n            'TableName' =>  $this->config['user_table'],\n            'Item' => $this->client->formatAttributes($clientData)\n        ));\n\n        return true;\n\n    }\n\n    /* ScopeInterface */\n    public function scopeExists($scope)\n    {\n        $scope = explode(' ', $scope);\n        $scope_query = array();\n        $count = 0;\n        foreach ($scope as $key => $val) {\n            $result = $this->client->query(array(\n                'TableName'     => $this->config['scope_table'],\n                'Select'        => 'COUNT',\n                'KeyConditions' => array(\n                    'scope' => array(\n                        'AttributeValueList' => array(array('S' => $val)),\n                        'ComparisonOperator' => 'EQ'\n                    )\n                )\n            ));\n            $count += $result['Count'];\n        }\n\n        return $count == count($scope);\n    }\n\n    public function getDefaultScope($client_id = null)\n    {\n\n        $result = $this->client->query(array(\n            'TableName' => $this->config['scope_table'],\n            'IndexName' => 'is_default-index',\n            'Select' => 'ALL_ATTRIBUTES',\n            'KeyConditions' => array(\n                'is_default' => array(\n                    'AttributeValueList' => array(array('S' => 'true')),\n                    'ComparisonOperator' => 'EQ',\n                ),\n            )\n        ));\n        $defaultScope = array();\n        if ($result->count() > 0) {\n            $array = $result->toArray();\n            foreach ($array[\"Items\"] as $item) {\n                $defaultScope[]  = $item['scope']['S'];\n            }\n\n            return empty($defaultScope) ? null : implode(' ', $defaultScope);\n        }\n\n        return null;\n    }\n\n    /* JWTBearerInterface */\n    public function getClientKey($client_id, $subject)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['jwt_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id), 'subject' => array('S' => $subject))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n\n        return $token['public_key'];\n    }\n\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    public function getJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        //TODO not use.\n    }\n\n    public function setJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        //TODO not use.\n    }\n\n    /* PublicKeyInterface */\n    public function getPublicKey($client_id = '0')\n    {\n\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['public_key_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n\n        return $token['public_key'];\n\n    }\n\n    public function getPrivateKey($client_id = '0')\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['public_key_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id))\n        ));\n        if ($result->count()==0) {\n            return false ;\n        }\n        $token = $this->dynamo2array($result);\n\n        return $token['private_key'];\n    }\n\n    public function getEncryptionAlgorithm($client_id = null)\n    {\n        $result = $this->client->getItem(array(\n            \"TableName\"=> $this->config['public_key_table'],\n            \"Key\" => array('client_id'   => array('S' => $client_id))\n        ));\n        if ($result->count()==0) {\n            return 'RS256' ;\n        }\n        $token = $this->dynamo2array($result);\n\n        return $token['encryption_algorithm'];\n    }\n\n    /**\n     * Transform dynamodb resultset to an array.\n     * @param $dynamodbResult\n     * @return $array\n     */\n    private function dynamo2array($dynamodbResult)\n    {\n        $result = array();\n        foreach ($dynamodbResult[\"Item\"] as $key => $val) {\n            $result[$key] = $val[\"S\"];\n            $result[] = $val[\"S\"];\n        }\n\n        return $result;\n    }\n\n    private static function isNotEmpty($value)\n    {\n        return null !== $value && '' !== $value;\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessToken.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\Encryption\\EncryptionInterface;\nuse OAuth2\\Encryption\\Jwt;\n\n/**\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass JwtAccessToken implements JwtAccessTokenInterface\n{\n    protected $publicKeyStorage;\n    protected $tokenStorage;\n    protected $encryptionUtil;\n\n    /**\n     * @param OAuth2\\Encryption\\PublicKeyInterface  $publicKeyStorage the public key encryption to use\n     * @param OAuth2\\Storage\\AccessTokenInterface   $tokenStorage     OPTIONAL persist the access token to another storage. This is useful if\n     *                                                                you want to retain access token grant information somewhere, but\n     *                                                                is not necessary when using this grant type.\n     * @param OAuth2\\Encryption\\EncryptionInterface $encryptionUtil   OPTIONAL class to use for \"encode\" and \"decode\" functions.\n     */\n    public function __construct(PublicKeyInterface $publicKeyStorage, AccessTokenInterface $tokenStorage = null, EncryptionInterface $encryptionUtil = null)\n    {\n        $this->publicKeyStorage = $publicKeyStorage;\n        $this->tokenStorage = $tokenStorage;\n        if (is_null($encryptionUtil)) {\n            $encryptionUtil = new Jwt;\n        }\n        $this->encryptionUtil = $encryptionUtil;\n    }\n\n    public function getAccessToken($oauth_token)\n    {\n        // just decode the token, don't verify\n        if (!$tokenData = $this->encryptionUtil->decode($oauth_token, null, false)) {\n            return false;\n        }\n\n        $client_id  = isset($tokenData['aud']) ? $tokenData['aud'] : null;\n        $public_key = $this->publicKeyStorage->getPublicKey($client_id);\n        $algorithm  = $this->publicKeyStorage->getEncryptionAlgorithm($client_id);\n\n        // now that we have the client_id, verify the token\n        if (false === $this->encryptionUtil->decode($oauth_token, $public_key, array($algorithm))) {\n            return false;\n        }\n\n        // normalize the JWT claims to the format expected by other components in this library\n        return $this->convertJwtToOAuth2($tokenData);\n    }\n\n    public function setAccessToken($oauth_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        if ($this->tokenStorage) {\n            return $this->tokenStorage->setAccessToken($oauth_token, $client_id, $user_id, $expires, $scope);\n        }\n    }\n\n    public function unsetAccessToken($access_token)\n    {\n        if ($this->tokenStorage) {\n            return $this->tokenStorage->unsetAccessToken($access_token);\n        }\n    }\n\n\n    // converts a JWT access token into an OAuth2-friendly format\n    protected function convertJwtToOAuth2($tokenData)\n    {\n        $keyMapping = array(\n            'aud' => 'client_id',\n            'exp' => 'expires',\n            'sub' => 'user_id'\n        );\n\n        foreach ($keyMapping as $jwtKey => $oauth2Key) {\n            if (isset($tokenData[$jwtKey])) {\n                $tokenData[$oauth2Key] = $tokenData[$jwtKey];\n                unset($tokenData[$jwtKey]);\n            }\n        }\n\n        return $tokenData;\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtAccessTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * No specific methods, but allows the library to check \"instanceof\"\n * against interface rather than class\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface JwtAccessTokenInterface extends AccessTokenInterface\n{\n\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/JwtBearerInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should get the JWT key for clients\n *\n * @TODO consider extending ClientInterface, as this will almost always\n * be the same storage as retrieving clientData\n *\n * @author F21\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface JwtBearerInterface\n{\n    /**\n     * Get the public key associated with a client_id\n     *\n     * @param $client_id\n     * Client identifier to be checked with.\n     *\n     * @return\n     * STRING Return the public key for the client_id if it exists, and MUST return FALSE if it doesn't.\n     */\n    public function getClientKey($client_id, $subject);\n\n    /**\n     * Get a jti (JSON token identifier) by matching against the client_id, subject, audience and expiration.\n     *\n     * @param $client_id\n     * Client identifier to match.\n     *\n     * @param $subject\n     * The subject to match.\n     *\n     * @param $audience\n     * The audience to match.\n     *\n     * @param $expiration\n     * The expiration of the jti.\n     *\n     * @param $jti\n     * The jti to match.\n     *\n     * @return\n     * An associative array as below, and return NULL if the jti does not exist.\n     * - issuer: Stored client identifier.\n     * - subject: Stored subject.\n     * - audience: Stored audience.\n     * - expires: Stored expiration in unix timestamp.\n     * - jti: The stored jti.\n     */\n    public function getJti($client_id, $subject, $audience, $expiration, $jti);\n\n    /**\n     * Store a used jti so that we can check against it to prevent replay attacks.\n     * @param $client_id\n     * Client identifier to insert.\n     *\n     * @param $subject\n     * The subject to insert.\n     *\n     * @param $audience\n     * The audience to insert.\n     *\n     * @param $expiration\n     * The expiration of the jti.\n     *\n     * @param $jti\n     * The jti to insert.\n     */\n    public function setJti($client_id, $subject, $audience, $expiration, $jti);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Memory.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\OpenID\\Storage\\UserClaimsInterface;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\n\n/**\n * Simple in-memory storage for all storage types\n *\n * NOTE: This class should never be used in production, and is\n * a stub class for example use only\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass Memory implements AuthorizationCodeInterface,\n    UserCredentialsInterface,\n    UserClaimsInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    ScopeInterface,\n    PublicKeyInterface,\n    OpenIDAuthorizationCodeInterface\n{\n    public $authorizationCodes;\n    public $userCredentials;\n    public $clientCredentials;\n    public $refreshTokens;\n    public $accessTokens;\n    public $jwt;\n    public $jti;\n    public $supportedScopes;\n    public $defaultScope;\n    public $keys;\n\n    public function __construct($params = array())\n    {\n        $params = array_merge(array(\n            'authorization_codes' => array(),\n            'user_credentials' => array(),\n            'client_credentials' => array(),\n            'refresh_tokens' => array(),\n            'access_tokens' => array(),\n            'jwt' => array(),\n            'jti' => array(),\n            'default_scope' => null,\n            'supported_scopes' => array(),\n            'keys' => array(),\n        ), $params);\n\n        $this->authorizationCodes = $params['authorization_codes'];\n        $this->userCredentials = $params['user_credentials'];\n        $this->clientCredentials = $params['client_credentials'];\n        $this->refreshTokens = $params['refresh_tokens'];\n        $this->accessTokens = $params['access_tokens'];\n        $this->jwt = $params['jwt'];\n        $this->jti = $params['jti'];\n        $this->supportedScopes = $params['supported_scopes'];\n        $this->defaultScope = $params['default_scope'];\n        $this->keys = $params['keys'];\n    }\n\n    /* AuthorizationCodeInterface */\n    public function getAuthorizationCode($code)\n    {\n        if (!isset($this->authorizationCodes[$code])) {\n            return false;\n        }\n\n        return array_merge(array(\n            'authorization_code' => $code,\n        ), $this->authorizationCodes[$code]);\n    }\n\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        $this->authorizationCodes[$code] = compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token');\n\n        return true;\n    }\n\n    public function setAuthorizationCodes($authorization_codes)\n    {\n        $this->authorizationCodes = $authorization_codes;\n    }\n\n    public function expireAuthorizationCode($code)\n    {\n        unset($this->authorizationCodes[$code]);\n    }\n\n    /* UserCredentialsInterface */\n    public function checkUserCredentials($username, $password)\n    {\n        $userDetails = $this->getUserDetails($username);\n\n        return $userDetails && $userDetails['password'] && $userDetails['password'] === $password;\n    }\n\n    public function setUser($username, $password, $firstName = null, $lastName = null)\n    {\n        $this->userCredentials[$username] = array(\n            'password'   => $password,\n            'first_name' => $firstName,\n            'last_name'  => $lastName,\n        );\n\n        return true;\n    }\n\n    public function getUserDetails($username)\n    {\n        if (!isset($this->userCredentials[$username])) {\n            return false;\n        }\n\n        return array_merge(array(\n            'user_id'    => $username,\n            'password'   => null,\n            'first_name' => null,\n            'last_name'  => null,\n        ), $this->userCredentials[$username]);\n    }\n\n    /* UserClaimsInterface */\n    public function getUserClaims($user_id, $claims)\n    {\n        if (!$userDetails = $this->getUserDetails($user_id)) {\n            return false;\n        }\n\n        $claims = explode(' ', trim($claims));\n        $userClaims = array();\n\n        // for each requested claim, if the user has the claim, set it in the response\n        $validClaims = explode(' ', self::VALID_CLAIMS);\n        foreach ($validClaims as $validClaim) {\n            if (in_array($validClaim, $claims)) {\n                if ($validClaim == 'address') {\n                    // address is an object with subfields\n                    $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);\n                } else {\n                    $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));\n                }\n            }\n        }\n\n        return $userClaims;\n    }\n\n    protected function getUserClaim($claim, $userDetails)\n    {\n        $userClaims = array();\n        $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));\n        $claimValues = explode(' ', $claimValuesString);\n\n        foreach ($claimValues as $value) {\n            $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;\n        }\n\n        return $userClaims;\n    }\n\n    /* ClientCredentialsInterface */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        return isset($this->clientCredentials[$client_id]['client_secret']) && $this->clientCredentials[$client_id]['client_secret'] === $client_secret;\n    }\n\n    public function isPublicClient($client_id)\n    {\n        if (!isset($this->clientCredentials[$client_id])) {\n            return false;\n        }\n\n        return empty($this->clientCredentials[$client_id]['client_secret']);\n    }\n\n    /* ClientInterface */\n    public function getClientDetails($client_id)\n    {\n        if (!isset($this->clientCredentials[$client_id])) {\n            return false;\n        }\n\n        $clientDetails = array_merge(array(\n            'client_id'     => $client_id,\n            'client_secret' => null,\n            'redirect_uri'  => null,\n            'scope'         => null,\n        ), $this->clientCredentials[$client_id]);\n\n        return $clientDetails;\n    }\n\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        if (isset($this->clientCredentials[$client_id]['grant_types'])) {\n            $grant_types = explode(' ', $this->clientCredentials[$client_id]['grant_types']);\n\n            return in_array($grant_type, $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        $this->clientCredentials[$client_id] = array(\n            'client_id'     => $client_id,\n            'client_secret' => $client_secret,\n            'redirect_uri'  => $redirect_uri,\n            'grant_types'   => $grant_types,\n            'scope'         => $scope,\n            'user_id'       => $user_id,\n        );\n\n        return true;\n    }\n\n    /* RefreshTokenInterface */\n    public function getRefreshToken($refresh_token)\n    {\n        return isset($this->refreshTokens[$refresh_token]) ? $this->refreshTokens[$refresh_token] : false;\n    }\n\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        $this->refreshTokens[$refresh_token] = compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope');\n\n        return true;\n    }\n\n    public function unsetRefreshToken($refresh_token)\n    {\n        if (isset($this->refreshTokens[$refresh_token])) {\n            unset($this->refreshTokens[$refresh_token]);\n\n            return true;\n        }\n\n        return false;\n    }\n\n    public function setRefreshTokens($refresh_tokens)\n    {\n        $this->refreshTokens = $refresh_tokens;\n    }\n\n    /* AccessTokenInterface */\n    public function getAccessToken($access_token)\n    {\n        return isset($this->accessTokens[$access_token]) ? $this->accessTokens[$access_token] : false;\n    }\n\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null, $id_token = null)\n    {\n        $this->accessTokens[$access_token] = compact('access_token', 'client_id', 'user_id', 'expires', 'scope', 'id_token');\n\n        return true;\n    }\n\n    public function unsetAccessToken($access_token)\n    {\n        if (isset($this->accessTokens[$access_token])) {\n            unset($this->accessTokens[$access_token]);\n\n            return true;\n        }\n\n        return false;\n    }\n\n    public function scopeExists($scope)\n    {\n        $scope = explode(' ', trim($scope));\n\n        return (count(array_diff($scope, $this->supportedScopes)) == 0);\n    }\n\n    public function getDefaultScope($client_id = null)\n    {\n        return $this->defaultScope;\n    }\n\n    /*JWTBearerInterface */\n    public function getClientKey($client_id, $subject)\n    {\n        if (isset($this->jwt[$client_id])) {\n            $jwt = $this->jwt[$client_id];\n            if ($jwt) {\n                if ($jwt[\"subject\"] == $subject) {\n                    return $jwt[\"key\"];\n                }\n            }\n        }\n\n        return false;\n    }\n\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    public function getJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        foreach ($this->jti as $storedJti) {\n            if ($storedJti['issuer'] == $client_id && $storedJti['subject'] == $subject && $storedJti['audience'] == $audience && $storedJti['expires'] == $expires && $storedJti['jti'] == $jti) {\n                return array(\n                    'issuer' => $storedJti['issuer'],\n                    'subject' => $storedJti['subject'],\n                    'audience' => $storedJti['audience'],\n                    'expires' => $storedJti['expires'],\n                    'jti' => $storedJti['jti']\n                );\n            }\n        }\n\n        return null;\n    }\n\n    public function setJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        $this->jti[] = array('issuer' => $client_id, 'subject' => $subject, 'audience' => $audience, 'expires' => $expires, 'jti' => $jti);\n    }\n\n    /*PublicKeyInterface */\n    public function getPublicKey($client_id = null)\n    {\n        if (isset($this->keys[$client_id])) {\n            return $this->keys[$client_id]['public_key'];\n        }\n\n        // use a global encryption pair\n        if (isset($this->keys['public_key'])) {\n            return $this->keys['public_key'];\n        }\n\n        return false;\n    }\n\n    public function getPrivateKey($client_id = null)\n    {\n        if (isset($this->keys[$client_id])) {\n            return $this->keys[$client_id]['private_key'];\n        }\n\n        // use a global encryption pair\n        if (isset($this->keys['private_key'])) {\n            return $this->keys['private_key'];\n        }\n\n        return false;\n    }\n\n    public function getEncryptionAlgorithm($client_id = null)\n    {\n        if (isset($this->keys[$client_id]['encryption_algorithm'])) {\n            return $this->keys[$client_id]['encryption_algorithm'];\n        }\n\n        // use a global encryption algorithm\n        if (isset($this->keys['encryption_algorithm'])) {\n            return $this->keys['encryption_algorithm'];\n        }\n\n        return 'RS256';\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Mongo.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\n\n/**\n * Simple MongoDB storage for all storage types\n *\n * NOTE: This class is meant to get users started\n * quickly. If your application requires further\n * customization, extend this class or create your own.\n *\n * NOTE: Passwords are stored in plaintext, which is never\n * a good idea.  Be sure to override this for your application\n *\n * @author Julien Chaumond <chaumond@gmail.com>\n */\nclass Mongo implements AuthorizationCodeInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    UserCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    PublicKeyInterface,\n    OpenIDAuthorizationCodeInterface\n{\n    protected $db;\n    protected $config;\n\n    public function __construct($connection, $config = array())\n    {\n        if ($connection instanceof \\MongoDB) {\n            $this->db = $connection;\n        } else {\n            if (!is_array($connection)) {\n                throw new \\InvalidArgumentException('First argument to OAuth2\\Storage\\Mongo must be an instance of MongoDB or a configuration array');\n            }\n            $server = sprintf('mongodb://%s:%d', $connection['host'], $connection['port']);\n            $m = new \\MongoClient($server);\n            $this->db = $m->{$connection['database']};\n        }\n\n        $this->config = array_merge(array(\n            'client_table' => 'oauth_clients',\n            'access_token_table' => 'oauth_access_tokens',\n            'refresh_token_table' => 'oauth_refresh_tokens',\n            'code_table' => 'oauth_authorization_codes',\n            'user_table' => 'oauth_users',\n            'key_table' => 'oauth_keys',\n            'jwt_table' => 'oauth_jwt',\n        ), $config);\n    }\n\n    // Helper function to access a MongoDB collection by `type`:\n    protected function collection($name)\n    {\n        return $this->db->{$this->config[$name]};\n    }\n\n    /* ClientCredentialsInterface */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        if ($result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {\n            return $result['client_secret'] == $client_secret;\n        }\n\n        return false;\n    }\n\n    public function isPublicClient($client_id)\n    {\n        if (!$result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {\n            return false;\n        }\n\n        return empty($result['client_secret']);\n    }\n\n    /* ClientInterface */\n    public function getClientDetails($client_id)\n    {\n        $result = $this->collection('client_table')->findOne(array('client_id' => $client_id));\n\n        return is_null($result) ? false : $result;\n    }\n\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        if ($this->getClientDetails($client_id)) {\n            $this->collection('client_table')->update(\n                array('client_id' => $client_id),\n                array('$set' => array(\n                    'client_secret' => $client_secret,\n                    'redirect_uri'  => $redirect_uri,\n                    'grant_types'   => $grant_types,\n                    'scope'         => $scope,\n                    'user_id'       => $user_id,\n                ))\n            );\n        } else {\n            $client = array(\n                'client_id'     => $client_id,\n                'client_secret' => $client_secret,\n                'redirect_uri'  => $redirect_uri,\n                'grant_types'   => $grant_types,\n                'scope'         => $scope,\n                'user_id'       => $user_id,\n            );\n            $this->collection('client_table')->insert($client);\n        }\n\n        return true;\n    }\n\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n\n            return in_array($grant_type, $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /* AccessTokenInterface */\n    public function getAccessToken($access_token)\n    {\n        $token = $this->collection('access_token_table')->findOne(array('access_token' => $access_token));\n\n        return is_null($token) ? false : $token;\n    }\n\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // if it exists, update it.\n        if ($this->getAccessToken($access_token)) {\n            $this->collection('access_token_table')->update(\n                array('access_token' => $access_token),\n                array('$set' => array(\n                    'client_id' => $client_id,\n                    'expires' => $expires,\n                    'user_id' => $user_id,\n                    'scope' => $scope\n                ))\n            );\n        } else {\n            $token = array(\n                'access_token' => $access_token,\n                'client_id' => $client_id,\n                'expires' => $expires,\n                'user_id' => $user_id,\n                'scope' => $scope\n            );\n            $this->collection('access_token_table')->insert($token);\n        }\n\n        return true;\n    }\n\n    public function unsetAccessToken($access_token)\n    {\n        $result = $this->collection('access_token_table')->remove(array(\n            'access_token' => $access_token\n        ), array('w' => 1));\n\n        return $result['n'] > 0;\n    }\n\n\n    /* AuthorizationCodeInterface */\n    public function getAuthorizationCode($code)\n    {\n        $code = $this->collection('code_table')->findOne(array('authorization_code' => $code));\n\n        return is_null($code) ? false : $code;\n    }\n\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        // if it exists, update it.\n        if ($this->getAuthorizationCode($code)) {\n            $this->collection('code_table')->update(\n                array('authorization_code' => $code),\n                array('$set' => array(\n                    'client_id' => $client_id,\n                    'user_id' => $user_id,\n                    'redirect_uri' => $redirect_uri,\n                    'expires' => $expires,\n                    'scope' => $scope,\n                    'id_token' => $id_token,\n                ))\n            );\n        } else {\n            $token = array(\n                'authorization_code' => $code,\n                'client_id' => $client_id,\n                'user_id' => $user_id,\n                'redirect_uri' => $redirect_uri,\n                'expires' => $expires,\n                'scope' => $scope,\n                'id_token' => $id_token,\n            );\n            $this->collection('code_table')->insert($token);\n        }\n\n        return true;\n    }\n\n    public function expireAuthorizationCode($code)\n    {\n        $this->collection('code_table')->remove(array('authorization_code' => $code));\n\n        return true;\n    }\n\n    /* UserCredentialsInterface */\n    public function checkUserCredentials($username, $password)\n    {\n        if ($user = $this->getUser($username)) {\n            return $this->checkPassword($user, $password);\n        }\n\n        return false;\n    }\n\n    public function getUserDetails($username)\n    {\n        if ($user = $this->getUser($username)) {\n            $user['user_id'] = $user['username'];\n        }\n\n        return $user;\n    }\n\n    /* RefreshTokenInterface */\n    public function getRefreshToken($refresh_token)\n    {\n        $token = $this->collection('refresh_token_table')->findOne(array('refresh_token' => $refresh_token));\n\n        return is_null($token) ? false : $token;\n    }\n\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        $token = array(\n            'refresh_token' => $refresh_token,\n            'client_id' => $client_id,\n            'user_id' => $user_id,\n            'expires' => $expires,\n            'scope' => $scope\n        );\n        $this->collection('refresh_token_table')->insert($token);\n\n        return true;\n    }\n\n    public function unsetRefreshToken($refresh_token)\n    {\n        $result = $this->collection('refresh_token_table')->remove(array(\n            'refresh_token' => $refresh_token\n        ), array('w' => 1));\n\n        return $result['n'] > 0;\n    }\n\n    // plaintext passwords are bad!  Override this for your application\n    protected function checkPassword($user, $password)\n    {\n        return $user['password'] == $password;\n    }\n\n    public function getUser($username)\n    {\n        $result = $this->collection('user_table')->findOne(array('username' => $username));\n\n        return is_null($result) ? false : $result;\n    }\n\n    public function setUser($username, $password, $firstName = null, $lastName = null)\n    {\n        if ($this->getUser($username)) {\n            $this->collection('user_table')->update(\n                array('username' => $username),\n                array('$set' => array(\n                    'password' => $password,\n                    'first_name' => $firstName,\n                    'last_name' => $lastName\n                ))\n            );\n        } else {\n            $user = array(\n                'username' => $username,\n                'password' => $password,\n                'first_name' => $firstName,\n                'last_name' => $lastName\n            );\n            $this->collection('user_table')->insert($user);\n        }\n\n        return true;\n    }\n\n    public function getClientKey($client_id, $subject)\n    {\n        $result = $this->collection('jwt_table')->findOne(array(\n            'client_id' => $client_id,\n            'subject' => $subject\n        ));\n\n        return is_null($result) ? false : $result['key'];\n    }\n\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    public function getJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs mongodb implementation.\n        throw new \\Exception('getJti() for the MongoDB driver is currently unimplemented.');\n    }\n\n    public function setJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs mongodb implementation.\n        throw new \\Exception('setJti() for the MongoDB driver is currently unimplemented.');\n    }\n\n    public function getPublicKey($client_id = null)\n    {\n        if ($client_id) {\n            $result = $this->collection('key_table')->findOne(array(\n                'client_id' => $client_id\n            ));\n            if ($result) {\n                return $result['public_key'];\n            }\n        }\n\n        $result = $this->collection('key_table')->findOne(array(\n            'client_id' => null\n        ));\n        return is_null($result) ? false : $result['public_key'];\n    }\n\n    public function getPrivateKey($client_id = null)\n    {\n        if ($client_id) {\n            $result = $this->collection('key_table')->findOne(array(\n                'client_id' => $client_id\n            ));\n            if ($result) {\n                return $result['private_key'];\n            }\n        }\n\n        $result = $this->collection('key_table')->findOne(array(\n            'client_id' => null\n        ));\n        return is_null($result) ? false : $result['private_key'];\n    }\n\n    public function getEncryptionAlgorithm($client_id = null)\n    {\n        if ($client_id) {\n            $result = $this->collection('key_table')->findOne(array(\n                'client_id' => $client_id\n            ));\n            if ($result) {\n                return $result['encryption_algorithm'];\n            }\n        }\n\n        $result = $this->collection('key_table')->findOne(array(\n            'client_id' => null\n        ));\n        return is_null($result) ? 'RS256' : $result['encryption_algorithm'];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/MongoDB.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse MongoDB\\Client;\nuse MongoDB\\Database;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\n\n/**\n * Simple MongoDB storage for all storage types\n *\n * NOTE: This class is meant to get users started\n * quickly. If your application requires further\n * customization, extend this class or create your own.\n *\n * NOTE: Passwords are stored in plaintext, which is never\n * a good idea.  Be sure to override this for your application\n *\n * @author Julien Chaumond <chaumond@gmail.com>\n */\nclass MongoDB implements AuthorizationCodeInterface,\n    UserCredentialsInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    PublicKeyInterface,\n    OpenIDAuthorizationCodeInterface\n{\n    protected $db;\n    protected $config;\n\n    public function __construct($connection, $config = array())\n    {\n        if ($connection instanceof Database) {\n            $this->db = $connection;\n        } else {\n            if (!is_array($connection)) {\n                throw new \\InvalidArgumentException('First argument to OAuth2\\Storage\\Mongo must be an instance of MongoDB\\Database or a configuration array');\n            }\n            $server = sprintf('mongodb://%s:%d', $connection['host'], $connection['port']);\n            $m = new Client($server);\n            $this->db = $m->selectDatabase($connection['database']);\n        }\n        $this->config = array_merge(array(\n            'client_table' => 'oauth_clients',\n            'access_token_table' => 'oauth_access_tokens',\n            'refresh_token_table' => 'oauth_refresh_tokens',\n            'code_table' => 'oauth_authorization_codes',\n            'user_table' => 'oauth_users',\n            'jwt_table' => 'oauth_jwt',\n            'jti_table' => 'oauth_jti',\n            'scope_table'  => 'oauth_scopes',\n            'key_table'  => 'oauth_keys',\n        ), $config);\n    }\n\n    /* ClientCredentialsInterface */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        if ($result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {\n            return $result['client_secret'] == $client_secret;\n        }\n        return false;\n    }\n\n    public function isPublicClient($client_id)\n    {\n        if (!$result = $this->collection('client_table')->findOne(array('client_id' => $client_id))) {\n            return false;\n        }\n        return empty($result['client_secret']);\n    }\n\n    /* ClientInterface */\n    public function getClientDetails($client_id)\n    {\n        $result = $this->collection('client_table')->findOne(array('client_id' => $client_id));\n        return is_null($result) ? false : $result;\n    }\n\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        if ($this->getClientDetails($client_id)) {\n            $result = $this->collection('client_table')->updateOne(\n                array('client_id' => $client_id),\n                array('$set' => array(\n                    'client_secret' => $client_secret,\n                    'redirect_uri'  => $redirect_uri,\n                    'grant_types'   => $grant_types,\n                    'scope'         => $scope,\n                    'user_id'       => $user_id,\n                ))\n            );\n            return $result->getMatchedCount() > 0;\n        }\n        $client = array(\n            'client_id'     => $client_id,\n            'client_secret' => $client_secret,\n            'redirect_uri'  => $redirect_uri,\n            'grant_types'   => $grant_types,\n            'scope'         => $scope,\n            'user_id'       => $user_id,\n        );\n        $result = $this->collection('client_table')->insertOne($client);\n        return $result->getInsertedCount() > 0;\n    }\n\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n            return in_array($grant_type, $grant_types);\n        }\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /* AccessTokenInterface */\n    public function getAccessToken($access_token)\n    {\n        $token = $this->collection('access_token_table')->findOne(array('access_token' => $access_token));\n        return is_null($token) ? false : $token;\n    }\n\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // if it exists, update it.\n        if ($this->getAccessToken($access_token)) {\n            $result = $this->collection('access_token_table')->updateOne(\n                array('access_token' => $access_token),\n                array('$set' => array(\n                    'client_id' => $client_id,\n                    'expires' => $expires,\n                    'user_id' => $user_id,\n                    'scope' => $scope\n                ))\n            );\n            return $result->getMatchedCount() > 0;\n        }\n        $token = array(\n            'access_token' => $access_token,\n            'client_id' => $client_id,\n            'expires' => $expires,\n            'user_id' => $user_id,\n            'scope' => $scope\n        );\n        $result = $this->collection('access_token_table')->insertOne($token);\n        return $result->getInsertedCount() > 0;\n    }\n\n    public function unsetAccessToken($access_token)\n    {\n        $result = $this->collection('access_token_table')->deleteOne(array(\n            'access_token' => $access_token\n        ));\n        return $result->getDeletedCount() > 0;\n    }\n\n    /* AuthorizationCodeInterface */\n    public function getAuthorizationCode($code)\n    {\n        $code = $this->collection('code_table')->findOne(array(\n            'authorization_code' => $code\n        ));\n        return is_null($code) ? false : $code;\n    }\n\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        // if it exists, update it.\n        if ($this->getAuthorizationCode($code)) {\n            $result = $this->collection('code_table')->updateOne(\n                array('authorization_code' => $code),\n                array('$set' => array(\n                    'client_id' => $client_id,\n                    'user_id' => $user_id,\n                    'redirect_uri' => $redirect_uri,\n                    'expires' => $expires,\n                    'scope' => $scope,\n                    'id_token' => $id_token,\n                ))\n            );\n            return $result->getMatchedCount() > 0;\n        }\n        $token = array(\n            'authorization_code' => $code,\n            'client_id' => $client_id,\n            'user_id' => $user_id,\n            'redirect_uri' => $redirect_uri,\n            'expires' => $expires,\n            'scope' => $scope,\n            'id_token' => $id_token,\n        );\n        $result = $this->collection('code_table')->insertOne($token);\n        return $result->getInsertedCount() > 0;\n    }\n\n    public function expireAuthorizationCode($code)\n    {\n        $result = $this->collection('code_table')->deleteOne(array(\n            'authorization_code' => $code\n        ));\n        return $result->getDeletedCount() > 0;\n    }\n\n    /* UserCredentialsInterface */\n    public function checkUserCredentials($username, $password)\n    {\n        if ($user = $this->getUser($username)) {\n            return $this->checkPassword($user, $password);\n        }\n        return false;\n    }\n\n    public function getUserDetails($username)\n    {\n        if ($user = $this->getUser($username)) {\n            $user['user_id'] = $user['username'];\n        }\n        return $user;\n    }\n\n    /* RefreshTokenInterface */\n    public function getRefreshToken($refresh_token)\n    {\n        $token = $this->collection('refresh_token_table')->findOne(array(\n            'refresh_token' => $refresh_token\n        ));\n        return is_null($token) ? false : $token;\n    }\n\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        $token = array(\n            'refresh_token' => $refresh_token,\n            'client_id' => $client_id,\n            'user_id' => $user_id,\n            'expires' => $expires,\n            'scope' => $scope\n        );\n        $result = $this->collection('refresh_token_table')->insertOne($token);\n        return $result->getInsertedCount() > 0;\n    }\n\n    public function unsetRefreshToken($refresh_token)\n    {\n        $result = $this->collection('refresh_token_table')->deleteOne(array(\n            'refresh_token' => $refresh_token\n        ));\n        return $result->getDeletedCount() > 0;\n    }\n\n    // plaintext passwords are bad!  Override this for your application\n    protected function checkPassword($user, $password)\n    {\n        return $user['password'] == $password;\n    }\n\n    public function getUser($username)\n    {\n        $result = $this->collection('user_table')->findOne(array('username' => $username));\n        return is_null($result) ? false : $result;\n    }\n\n    public function setUser($username, $password, $firstName = null, $lastName = null)\n    {\n        if ($this->getUser($username)) {\n            $result = $this->collection('user_table')->updateOne(\n                array('username' => $username),\n                array('$set' => array(\n                    'password' => $password,\n                    'first_name' => $firstName,\n                    'last_name' => $lastName\n                ))\n            );\n\n            return $result->getMatchedCount() > 0;\n        }\n\n        $user = array(\n            'username' => $username,\n            'password' => $password,\n            'first_name' => $firstName,\n            'last_name' => $lastName\n        );\n        $result = $this->collection('user_table')->insertOne($user);\n        return $result->getInsertedCount() > 0;\n    }\n\n    public function getClientKey($client_id, $subject)\n    {\n        $result = $this->collection('jwt_table')->findOne(array(\n            'client_id' => $client_id,\n            'subject' => $subject\n        ));\n        return is_null($result) ? false : $result['key'];\n    }\n\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n        return null;\n    }\n\n    public function getJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        //TODO: Needs mongodb implementation.\n        throw new \\Exception('getJti() for the MongoDB driver is currently unimplemented.');\n    }\n\n    public function setJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        //TODO: Needs mongodb implementation.\n        throw new \\Exception('setJti() for the MongoDB driver is currently unimplemented.');\n    }\n\n    public function getPublicKey($client_id = null)\n    {\n        if ($client_id) {\n            $result = $this->collection('key_table')->findOne(array(\n                'client_id' => $client_id\n            ));\n            if ($result) {\n                return $result['public_key'];\n            }\n        }\n\n        $result = $this->collection('key_table')->findOne(array(\n            'client_id' => null\n        ));\n        return is_null($result) ? false : $result['public_key'];\n    }\n\n    public function getPrivateKey($client_id = null)\n    {\n        if ($client_id) {\n            $result = $this->collection('key_table')->findOne(array(\n                'client_id' => $client_id\n            ));\n            if ($result) {\n                return $result['private_key'];\n            }\n        }\n\n        $result = $this->collection('key_table')->findOne(array(\n            'client_id' => null\n        ));\n        return is_null($result) ? false : $result['private_key'];\n    }\n\n    public function getEncryptionAlgorithm($client_id = null)\n    {\n        if ($client_id) {\n            $result = $this->collection('key_table')->findOne(array(\n                'client_id' => $client_id\n            ));\n            if ($result) {\n                return $result['encryption_algorithm'];\n            }\n        }\n\n        $result = $this->collection('key_table')->findOne(array(\n            'client_id' => null\n        ));\n        return is_null($result) ? 'RS256' : $result['encryption_algorithm'];\n    }\n\n    // Helper function to access a MongoDB collection by `type`:\n    protected function collection($name)\n    {\n        return $this->db->{$this->config[$name]};\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Pdo.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\OpenID\\Storage\\UserClaimsInterface;\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\nuse InvalidArgumentException;\n\n/**\n * Simple PDO storage for all storage types\n *\n * NOTE: This class is meant to get users started\n * quickly. If your application requires further\n * customization, extend this class or create your own.\n *\n * NOTE: Passwords are stored in plaintext, which is never\n * a good idea.  Be sure to override this for your application\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\nclass Pdo implements\n    AuthorizationCodeInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    UserCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    ScopeInterface,\n    PublicKeyInterface,\n    UserClaimsInterface,\n    OpenIDAuthorizationCodeInterface\n{\n    /**\n     * @var \\PDO\n     */\n    protected $db;\n\n    /**\n     * @var array\n     */\n    protected $config;\n\n    /**\n     * @param mixed $connection\n     * @param array $config\n     *\n     * @throws InvalidArgumentException\n     */\n    public function __construct($connection, $config = array())\n    {\n        if (!$connection instanceof \\PDO) {\n            if (is_string($connection)) {\n                $connection = array('dsn' => $connection);\n            }\n            if (!is_array($connection)) {\n                throw new \\InvalidArgumentException('First argument to OAuth2\\Storage\\Pdo must be an instance of PDO, a DSN string, or a configuration array');\n            }\n            if (!isset($connection['dsn'])) {\n                throw new \\InvalidArgumentException('configuration array must contain \"dsn\"');\n            }\n            // merge optional parameters\n            $connection = array_merge(array(\n                'username' => null,\n                'password' => null,\n                'options' => array(),\n            ), $connection);\n            $connection = new \\PDO($connection['dsn'], $connection['username'], $connection['password'], $connection['options']);\n        }\n        $this->db = $connection;\n\n        // debugging\n        $connection->setAttribute(\\PDO::ATTR_ERRMODE, \\PDO::ERRMODE_EXCEPTION);\n\n        $this->config = array_merge(array(\n            'client_table' => 'oauth_clients',\n            'access_token_table' => 'oauth_access_tokens',\n            'refresh_token_table' => 'oauth_refresh_tokens',\n            'code_table' => 'oauth_authorization_codes',\n            'user_table' => 'oauth_users',\n            'jwt_table'  => 'oauth_jwt',\n            'jti_table'  => 'oauth_jti',\n            'scope_table'  => 'oauth_scopes',\n            'public_key_table'  => 'oauth_public_keys',\n        ), $config);\n    }\n\n    /**\n     * @param string $client_id\n     * @param null|string $client_secret\n     * @return bool\n     */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table']));\n        $stmt->execute(compact('client_id'));\n        $result = $stmt->fetch(\\PDO::FETCH_ASSOC);\n\n        // make this extensible\n        return $result && $result['client_secret'] == $client_secret;\n    }\n\n    /**\n     * @param string $client_id\n     * @return bool\n     */\n    public function isPublicClient($client_id)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table']));\n        $stmt->execute(compact('client_id'));\n\n        if (!$result = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return false;\n        }\n\n        return empty($result['client_secret']);\n    }\n\n    /**\n     * @param string $client_id\n     * @return array|mixed\n     */\n    public function getClientDetails($client_id)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT * from %s where client_id = :client_id', $this->config['client_table']));\n        $stmt->execute(compact('client_id'));\n\n        return $stmt->fetch(\\PDO::FETCH_ASSOC);\n    }\n\n    /**\n     * @param string $client_id\n     * @param null|string $client_secret\n     * @param null|string $redirect_uri\n     * @param null|array  $grant_types\n     * @param null|string $scope\n     * @param null|string $user_id\n     * @return bool\n     */\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        // if it exists, update it.\n        if ($this->getClientDetails($client_id)) {\n            $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET client_secret=:client_secret, redirect_uri=:redirect_uri, grant_types=:grant_types, scope=:scope, user_id=:user_id where client_id=:client_id', $this->config['client_table']));\n        } else {\n            $stmt = $this->db->prepare(sprintf('INSERT INTO %s (client_id, client_secret, redirect_uri, grant_types, scope, user_id) VALUES (:client_id, :client_secret, :redirect_uri, :grant_types, :scope, :user_id)', $this->config['client_table']));\n        }\n\n        return $stmt->execute(compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id'));\n    }\n\n    /**\n     * @param $client_id\n     * @param $grant_type\n     * @return bool\n     */\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n\n            return in_array($grant_type, (array) $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /**\n     * @param string $access_token\n     * @return array|bool|mixed|null\n     */\n    public function getAccessToken($access_token)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT * from %s where access_token = :access_token', $this->config['access_token_table']));\n\n        $token = $stmt->execute(compact('access_token'));\n        if ($token = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            // convert date string back to timestamp\n            $token['expires'] = strtotime($token['expires']);\n        }\n\n        return $token;\n    }\n\n    /**\n     * @param string $access_token\n     * @param mixed  $client_id\n     * @param mixed  $user_id\n     * @param int    $expires\n     * @param string $scope\n     * @return bool\n     */\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        // if it exists, update it.\n        if ($this->getAccessToken($access_token)) {\n            $stmt = $this->db->prepare(sprintf('UPDATE %s SET client_id=:client_id, expires=:expires, user_id=:user_id, scope=:scope where access_token=:access_token', $this->config['access_token_table']));\n        } else {\n            $stmt = $this->db->prepare(sprintf('INSERT INTO %s (access_token, client_id, expires, user_id, scope) VALUES (:access_token, :client_id, :expires, :user_id, :scope)', $this->config['access_token_table']));\n        }\n\n        return $stmt->execute(compact('access_token', 'client_id', 'user_id', 'expires', 'scope'));\n    }\n\n    /**\n     * @param $access_token\n     * @return bool\n     */\n    public function unsetAccessToken($access_token)\n    {\n        $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE access_token = :access_token', $this->config['access_token_table']));\n\n        $stmt->execute(compact('access_token'));\n\n        return $stmt->rowCount() > 0;\n    }\n\n    /* OAuth2\\Storage\\AuthorizationCodeInterface */\n    /**\n     * @param string $code\n     * @return mixed\n     */\n    public function getAuthorizationCode($code)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT * from %s where authorization_code = :code', $this->config['code_table']));\n        $stmt->execute(compact('code'));\n\n        if ($code = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            // convert date string back to timestamp\n            $code['expires'] = strtotime($code['expires']);\n        }\n\n        return $code;\n    }\n\n    /**\n     * @param string $code\n     * @param mixed  $client_id\n     * @param mixed  $user_id\n     * @param string $redirect_uri\n     * @param int    $expires\n     * @param string $scope\n     * @param string $id_token\n     * @return bool|mixed\n     */\n    public function setAuthorizationCode($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        if (func_num_args() > 6) {\n            // we are calling with an id token\n            return call_user_func_array(array($this, 'setAuthorizationCodeWithIdToken'), func_get_args());\n        }\n\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        // if it exists, update it.\n        if ($this->getAuthorizationCode($code)) {\n            $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET client_id=:client_id, user_id=:user_id, redirect_uri=:redirect_uri, expires=:expires, scope=:scope where authorization_code=:code', $this->config['code_table']));\n        } else {\n            $stmt = $this->db->prepare(sprintf('INSERT INTO %s (authorization_code, client_id, user_id, redirect_uri, expires, scope) VALUES (:code, :client_id, :user_id, :redirect_uri, :expires, :scope)', $this->config['code_table']));\n        }\n\n        return $stmt->execute(compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope'));\n    }\n\n    /**\n     * @param string $code\n     * @param mixed  $client_id\n     * @param mixed  $user_id\n     * @param string $redirect_uri\n     * @param string $expires\n     * @param string $scope\n     * @param string $id_token\n     * @return bool\n     */\n    private function setAuthorizationCodeWithIdToken($code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        // if it exists, update it.\n        if ($this->getAuthorizationCode($code)) {\n            $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET client_id=:client_id, user_id=:user_id, redirect_uri=:redirect_uri, expires=:expires, scope=:scope, id_token =:id_token where authorization_code=:code', $this->config['code_table']));\n        } else {\n            $stmt = $this->db->prepare(sprintf('INSERT INTO %s (authorization_code, client_id, user_id, redirect_uri, expires, scope, id_token) VALUES (:code, :client_id, :user_id, :redirect_uri, :expires, :scope, :id_token)', $this->config['code_table']));\n        }\n\n        return $stmt->execute(compact('code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token'));\n    }\n\n    /**\n     * @param string $code\n     * @return bool\n     */\n    public function expireAuthorizationCode($code)\n    {\n        $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE authorization_code = :code', $this->config['code_table']));\n\n        return $stmt->execute(compact('code'));\n    }\n\n    /**\n     * @param string $username\n     * @param string $password\n     * @return bool\n     */\n    public function checkUserCredentials($username, $password)\n    {\n        if ($user = $this->getUser($username)) {\n            return $this->checkPassword($user, $password);\n        }\n\n        return false;\n    }\n\n    /**\n     * @param string $username\n     * @return array|bool\n     */\n    public function getUserDetails($username)\n    {\n        return $this->getUser($username);\n    }\n\n    /**\n     * @param mixed  $user_id\n     * @param string $claims\n     * @return array|bool\n     */\n    public function getUserClaims($user_id, $claims)\n    {\n        if (!$userDetails = $this->getUserDetails($user_id)) {\n            return false;\n        }\n\n        $claims = explode(' ', trim($claims));\n        $userClaims = array();\n\n        // for each requested claim, if the user has the claim, set it in the response\n        $validClaims = explode(' ', self::VALID_CLAIMS);\n        foreach ($validClaims as $validClaim) {\n            if (in_array($validClaim, $claims)) {\n                if ($validClaim == 'address') {\n                    // address is an object with subfields\n                    $userClaims['address'] = $this->getUserClaim($validClaim, $userDetails['address'] ?: $userDetails);\n                } else {\n                    $userClaims = array_merge($userClaims, $this->getUserClaim($validClaim, $userDetails));\n                }\n            }\n        }\n\n        return $userClaims;\n    }\n\n    /**\n     * @param string $claim\n     * @param array  $userDetails\n     * @return array\n     */\n    protected function getUserClaim($claim, $userDetails)\n    {\n        $userClaims = array();\n        $claimValuesString = constant(sprintf('self::%s_CLAIM_VALUES', strtoupper($claim)));\n        $claimValues = explode(' ', $claimValuesString);\n\n        foreach ($claimValues as $value) {\n            $userClaims[$value] = isset($userDetails[$value]) ? $userDetails[$value] : null;\n        }\n\n        return $userClaims;\n    }\n\n    /**\n     * @param string $refresh_token\n     * @return bool|mixed\n     */\n    public function getRefreshToken($refresh_token)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT * FROM %s WHERE refresh_token = :refresh_token', $this->config['refresh_token_table']));\n\n        $token = $stmt->execute(compact('refresh_token'));\n        if ($token = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            // convert expires to epoch time\n            $token['expires'] = strtotime($token['expires']);\n        }\n\n        return $token;\n    }\n\n    /**\n     * @param string $refresh_token\n     * @param mixed  $client_id\n     * @param mixed  $user_id\n     * @param string $expires\n     * @param string $scope\n     * @return bool\n     */\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        // convert expires to datestring\n        $expires = date('Y-m-d H:i:s', $expires);\n\n        $stmt = $this->db->prepare(sprintf('INSERT INTO %s (refresh_token, client_id, user_id, expires, scope) VALUES (:refresh_token, :client_id, :user_id, :expires, :scope)', $this->config['refresh_token_table']));\n\n        return $stmt->execute(compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope'));\n    }\n\n    /**\n     * @param string $refresh_token\n     * @return bool\n     */\n    public function unsetRefreshToken($refresh_token)\n    {\n        $stmt = $this->db->prepare(sprintf('DELETE FROM %s WHERE refresh_token = :refresh_token', $this->config['refresh_token_table']));\n\n        $stmt->execute(compact('refresh_token'));\n\n        return $stmt->rowCount() > 0;\n    }\n\n    /**\n     * plaintext passwords are bad!  Override this for your application\n     *\n     * @param array $user\n     * @param string $password\n     * @return bool\n     */\n    protected function checkPassword($user, $password)\n    {\n        return $user['password'] == $this->hashPassword($password);\n    }\n\n    // use a secure hashing algorithm when storing passwords. Override this for your application\n    protected function hashPassword($password)\n    {\n        return sha1($password);\n    }\n\n    /**\n     * @param string $username\n     * @return array|bool\n     */\n    public function getUser($username)\n    {\n        $stmt = $this->db->prepare($sql = sprintf('SELECT * from %s where username=:username', $this->config['user_table']));\n        $stmt->execute(array('username' => $username));\n\n        if (!$userInfo = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return false;\n        }\n\n        // the default behavior is to use \"username\" as the user_id\n        return array_merge(array(\n            'user_id' => $username\n        ), $userInfo);\n    }\n\n    /**\n     * plaintext passwords are bad!  Override this for your application\n     *\n     * @param string $username\n     * @param string $password\n     * @param string $firstName\n     * @param string $lastName\n     * @return bool\n     */\n    public function setUser($username, $password, $firstName = null, $lastName = null)\n    {\n        // do not store in plaintext\n        $password = $this->hashPassword($password);\n\n        // if it exists, update it.\n        if ($this->getUser($username)) {\n            $stmt = $this->db->prepare($sql = sprintf('UPDATE %s SET password=:password, first_name=:firstName, last_name=:lastName where username=:username', $this->config['user_table']));\n        } else {\n            $stmt = $this->db->prepare(sprintf('INSERT INTO %s (username, password, first_name, last_name) VALUES (:username, :password, :firstName, :lastName)', $this->config['user_table']));\n        }\n\n        return $stmt->execute(compact('username', 'password', 'firstName', 'lastName'));\n    }\n\n    /**\n     * @param string $scope\n     * @return bool\n     */\n    public function scopeExists($scope)\n    {\n        $scope = explode(' ', $scope);\n        $whereIn = implode(',', array_fill(0, count($scope), '?'));\n        $stmt = $this->db->prepare(sprintf('SELECT count(scope) as count FROM %s WHERE scope IN (%s)', $this->config['scope_table'], $whereIn));\n        $stmt->execute($scope);\n\n        if ($result = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return $result['count'] == count($scope);\n        }\n\n        return false;\n    }\n\n    /**\n     * @param mixed $client_id\n     * @return null|string\n     */\n    public function getDefaultScope($client_id = null)\n    {\n        $stmt = $this->db->prepare(sprintf('SELECT scope FROM %s WHERE is_default=:is_default', $this->config['scope_table']));\n        $stmt->execute(array('is_default' => true));\n\n        if ($result = $stmt->fetchAll(\\PDO::FETCH_ASSOC)) {\n            $defaultScope = array_map(function ($row) {\n                return $row['scope'];\n            }, $result);\n\n            return implode(' ', $defaultScope);\n        }\n\n        return null;\n    }\n\n    /**\n     * @param mixed $client_id\n     * @param $subject\n     * @return string\n     */\n    public function getClientKey($client_id, $subject)\n    {\n        $stmt = $this->db->prepare($sql = sprintf('SELECT public_key from %s where client_id=:client_id AND subject=:subject', $this->config['jwt_table']));\n\n        $stmt->execute(array('client_id' => $client_id, 'subject' => $subject));\n\n        return $stmt->fetchColumn();\n    }\n\n    /**\n     * @param mixed $client_id\n     * @return bool|null\n     */\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    /**\n     * @param mixed $client_id\n     * @param $subject\n     * @param $audience\n     * @param $expires\n     * @param $jti\n     * @return array|null\n     */\n    public function getJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        $stmt = $this->db->prepare($sql = sprintf('SELECT * FROM %s WHERE issuer=:client_id AND subject=:subject AND audience=:audience AND expires=:expires AND jti=:jti', $this->config['jti_table']));\n\n        $stmt->execute(compact('client_id', 'subject', 'audience', 'expires', 'jti'));\n\n        if ($result = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return array(\n                'issuer' => $result['issuer'],\n                'subject' => $result['subject'],\n                'audience' => $result['audience'],\n                'expires' => $result['expires'],\n                'jti' => $result['jti'],\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * @param mixed $client_id\n     * @param $subject\n     * @param $audience\n     * @param $expires\n     * @param $jti\n     * @return bool\n     */\n    public function setJti($client_id, $subject, $audience, $expires, $jti)\n    {\n        $stmt = $this->db->prepare(sprintf('INSERT INTO %s (issuer, subject, audience, expires, jti) VALUES (:client_id, :subject, :audience, :expires, :jti)', $this->config['jti_table']));\n\n        return $stmt->execute(compact('client_id', 'subject', 'audience', 'expires', 'jti'));\n    }\n\n    /**\n     * @param mixed $client_id\n     * @return mixed\n     */\n    public function getPublicKey($client_id = null)\n    {\n        $stmt = $this->db->prepare($sql = sprintf('SELECT public_key FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table']));\n\n        $stmt->execute(compact('client_id'));\n        if ($result = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return $result['public_key'];\n        }\n    }\n\n    /**\n     * @param mixed $client_id\n     * @return mixed\n     */\n    public function getPrivateKey($client_id = null)\n    {\n        $stmt = $this->db->prepare($sql = sprintf('SELECT private_key FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table']));\n\n        $stmt->execute(compact('client_id'));\n        if ($result = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return $result['private_key'];\n        }\n    }\n\n    /**\n     * @param mixed $client_id\n     * @return string\n     */\n    public function getEncryptionAlgorithm($client_id = null)\n    {\n        $stmt = $this->db->prepare($sql = sprintf('SELECT encryption_algorithm FROM %s WHERE client_id=:client_id OR client_id IS NULL ORDER BY client_id IS NOT NULL DESC', $this->config['public_key_table']));\n\n        $stmt->execute(compact('client_id'));\n        if ($result = $stmt->fetch(\\PDO::FETCH_ASSOC)) {\n            return $result['encryption_algorithm'];\n        }\n\n        return 'RS256';\n    }\n\n    /**\n     * DDL to create OAuth2 database and tables for PDO storage\n     *\n     * @see https://github.com/dsquier/oauth2-server-php-mysql\n     *\n     * @param string $dbName\n     * @return string\n     */\n    public function getBuildSql($dbName = 'oauth2_server_php')\n    {\n        $sql = \"\n        CREATE TABLE {$this->config['client_table']} (\n          client_id             VARCHAR(80)   NOT NULL,\n          client_secret         VARCHAR(80),\n          redirect_uri          VARCHAR(2000),\n          grant_types           VARCHAR(80),\n          scope                 VARCHAR(4000),\n          user_id               VARCHAR(80),\n          PRIMARY KEY (client_id)\n        );\n\n            CREATE TABLE {$this->config['access_token_table']} (\n              access_token         VARCHAR(40)    NOT NULL,\n              client_id            VARCHAR(80)    NOT NULL,\n              user_id              VARCHAR(80),\n              expires              TIMESTAMP      NOT NULL,\n              scope                VARCHAR(4000),\n              PRIMARY KEY (access_token)\n            );\n\n            CREATE TABLE {$this->config['code_table']} (\n              authorization_code  VARCHAR(40)    NOT NULL,\n              client_id           VARCHAR(80)    NOT NULL,\n              user_id             VARCHAR(80),\n              redirect_uri        VARCHAR(2000),\n              expires             TIMESTAMP      NOT NULL,\n              scope               VARCHAR(4000),\n              id_token            VARCHAR(1000),\n              PRIMARY KEY (authorization_code)\n            );\n\n            CREATE TABLE {$this->config['refresh_token_table']} (\n              refresh_token       VARCHAR(40)    NOT NULL,\n              client_id           VARCHAR(80)    NOT NULL,\n              user_id             VARCHAR(80),\n              expires             TIMESTAMP      NOT NULL,\n              scope               VARCHAR(4000),\n              PRIMARY KEY (refresh_token)\n            );\n\n            CREATE TABLE {$this->config['user_table']} (\n              username            VARCHAR(80),\n              password            VARCHAR(80),\n              first_name          VARCHAR(80),\n              last_name           VARCHAR(80),\n              email               VARCHAR(80),\n              email_verified      BOOLEAN,\n              scope               VARCHAR(4000)\n            );\n\n            CREATE TABLE {$this->config['scope_table']} (\n              scope               VARCHAR(80)  NOT NULL,\n              is_default          BOOLEAN,\n              PRIMARY KEY (scope)\n            );\n\n            CREATE TABLE {$this->config['jwt_table']} (\n              client_id           VARCHAR(80)   NOT NULL,\n              subject             VARCHAR(80),\n              public_key          VARCHAR(2000) NOT NULL\n            );\n\n            CREATE TABLE {$this->config['jti_table']} (\n              issuer              VARCHAR(80)   NOT NULL,\n              subject             VARCHAR(80),\n              audiance            VARCHAR(80),\n              expires             TIMESTAMP     NOT NULL,\n              jti                 VARCHAR(2000) NOT NULL\n            );\n\n            CREATE TABLE {$this->config['public_key_table']} (\n              client_id            VARCHAR(80),\n              public_key           VARCHAR(2000),\n              private_key          VARCHAR(2000),\n              encryption_algorithm VARCHAR(100) DEFAULT 'RS256'\n            )\n        \";\n\n        return $sql;\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/PublicKeyInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should get public/private key information\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface PublicKeyInterface\n{\n    /**\n     * @param mixed $client_id\n     * @return mixed\n     */\n    public function getPublicKey($client_id = null);\n\n    /**\n     * @param mixed $client_id\n     * @return mixed\n     */\n    public function getPrivateKey($client_id = null);\n\n    /**\n     * @param mixed $client_id\n     * @return mixed\n     */\n    public function getEncryptionAlgorithm($client_id = null);\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/Redis.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface as OpenIDAuthorizationCodeInterface;\n\n/**\n * redis storage for all storage types\n *\n * To use, install \"predis/predis\" via composer\n *\n * Register client:\n * <code>\n *  $storage = new OAuth2\\Storage\\Redis($redis);\n *  $storage->setClientDetails($client_id, $client_secret, $redirect_uri);\n * </code>\n */\nclass Redis implements AuthorizationCodeInterface,\n    AccessTokenInterface,\n    ClientCredentialsInterface,\n    UserCredentialsInterface,\n    RefreshTokenInterface,\n    JwtBearerInterface,\n    ScopeInterface,\n    OpenIDAuthorizationCodeInterface\n{\n\n    private $cache;\n\n    /* The redis client */\n    protected $redis;\n\n    /* Configuration array */\n    protected $config;\n\n    /**\n     * Redis Storage!\n     *\n     * @param \\Predis\\Client $redis\n     * @param array          $config\n     */\n    public function __construct($redis, $config=array())\n    {\n        $this->redis = $redis;\n        $this->config = array_merge(array(\n            'client_key' => 'oauth_clients:',\n            'access_token_key' => 'oauth_access_tokens:',\n            'refresh_token_key' => 'oauth_refresh_tokens:',\n            'code_key' => 'oauth_authorization_codes:',\n            'user_key' => 'oauth_users:',\n            'jwt_key' => 'oauth_jwt:',\n            'scope_key' => 'oauth_scopes:',\n        ), $config);\n    }\n\n    protected function getValue($key)\n    {\n        if ( isset($this->cache[$key]) ) {\n            return $this->cache[$key];\n        }\n        $value = $this->redis->get($key);\n        if ( isset($value) ) {\n            return json_decode($value, true);\n        } else {\n            return false;\n        }\n    }\n\n    protected function setValue($key, $value, $expire=0)\n    {\n        $this->cache[$key] = $value;\n        $str = json_encode($value);\n        if ($expire > 0) {\n            $seconds = $expire - time();\n            $ret = $this->redis->setex($key, $seconds, $str);\n        } else {\n            $ret = $this->redis->set($key, $str);\n        }\n\n        // check that the key was set properly\n        // if this fails, an exception will usually thrown, so this step isn't strictly necessary\n        return is_bool($ret) ? $ret : $ret->getPayload() == 'OK';\n    }\n\n    protected function expireValue($key)\n    {\n        unset($this->cache[$key]);\n\n        return $this->redis->del($key);\n    }\n\n    /* AuthorizationCodeInterface */\n    public function getAuthorizationCode($code)\n    {\n        return $this->getValue($this->config['code_key'] . $code);\n    }\n\n    public function setAuthorizationCode($authorization_code, $client_id, $user_id, $redirect_uri, $expires, $scope = null, $id_token = null)\n    {\n        return $this->setValue(\n            $this->config['code_key'] . $authorization_code,\n            compact('authorization_code', 'client_id', 'user_id', 'redirect_uri', 'expires', 'scope', 'id_token'),\n            $expires\n        );\n    }\n\n    public function expireAuthorizationCode($code)\n    {\n        $key = $this->config['code_key'] . $code;\n        unset($this->cache[$key]);\n\n        return $this->expireValue($key);\n    }\n\n    /* UserCredentialsInterface */\n    public function checkUserCredentials($username, $password)\n    {\n        $user = $this->getUserDetails($username);\n\n        return $user && $user['password'] === $password;\n    }\n\n    public function getUserDetails($username)\n    {\n        return $this->getUser($username);\n    }\n\n    public function getUser($username)\n    {\n        if (!$userInfo = $this->getValue($this->config['user_key'] . $username)) {\n            return false;\n        }\n\n        // the default behavior is to use \"username\" as the user_id\n        return array_merge(array(\n            'user_id' => $username,\n        ), $userInfo);\n    }\n\n    public function setUser($username, $password, $first_name = null, $last_name = null)\n    {\n        return $this->setValue(\n            $this->config['user_key'] . $username,\n            compact('username', 'password', 'first_name', 'last_name')\n        );\n    }\n\n    /* ClientCredentialsInterface */\n    public function checkClientCredentials($client_id, $client_secret = null)\n    {\n        if (!$client = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        return isset($client['client_secret'])\n            && $client['client_secret'] == $client_secret;\n    }\n\n    public function isPublicClient($client_id)\n    {\n        if (!$client = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        return empty($client['client_secret']);\n    }\n\n    /* ClientInterface */\n    public function getClientDetails($client_id)\n    {\n        return $this->getValue($this->config['client_key'] . $client_id);\n    }\n\n    public function setClientDetails($client_id, $client_secret = null, $redirect_uri = null, $grant_types = null, $scope = null, $user_id = null)\n    {\n        return $this->setValue(\n            $this->config['client_key'] . $client_id,\n            compact('client_id', 'client_secret', 'redirect_uri', 'grant_types', 'scope', 'user_id')\n        );\n    }\n\n    public function checkRestrictedGrantType($client_id, $grant_type)\n    {\n        $details = $this->getClientDetails($client_id);\n        if (isset($details['grant_types'])) {\n            $grant_types = explode(' ', $details['grant_types']);\n\n            return in_array($grant_type, (array) $grant_types);\n        }\n\n        // if grant_types are not defined, then none are restricted\n        return true;\n    }\n\n    /* RefreshTokenInterface */\n    public function getRefreshToken($refresh_token)\n    {\n        return $this->getValue($this->config['refresh_token_key'] . $refresh_token);\n    }\n\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        return $this->setValue(\n            $this->config['refresh_token_key'] . $refresh_token,\n            compact('refresh_token', 'client_id', 'user_id', 'expires', 'scope'),\n            $expires\n        );\n    }\n\n    public function unsetRefreshToken($refresh_token)\n    {\n        $result = $this->expireValue($this->config['refresh_token_key'] . $refresh_token);\n\n        return $result > 0;\n    }\n\n    /* AccessTokenInterface */\n    public function getAccessToken($access_token)\n    {\n        return $this->getValue($this->config['access_token_key'].$access_token);\n    }\n\n    public function setAccessToken($access_token, $client_id, $user_id, $expires, $scope = null)\n    {\n        return $this->setValue(\n            $this->config['access_token_key'].$access_token,\n            compact('access_token', 'client_id', 'user_id', 'expires', 'scope'),\n            $expires\n        );\n    }\n\n    public function unsetAccessToken($access_token)\n    {\n        $result = $this->expireValue($this->config['access_token_key'] . $access_token);\n\n        return $result > 0;\n    }\n\n    /* ScopeInterface */\n    public function scopeExists($scope)\n    {\n        $scope = explode(' ', $scope);\n\n        $result = $this->getValue($this->config['scope_key'].'supported:global');\n\n        $supportedScope = explode(' ', (string) $result);\n\n        return (count(array_diff($scope, $supportedScope)) == 0);\n    }\n\n    public function getDefaultScope($client_id = null)\n    {\n        if (is_null($client_id) || !$result = $this->getValue($this->config['scope_key'].'default:'.$client_id)) {\n            $result = $this->getValue($this->config['scope_key'].'default:global');\n        }\n\n        return $result;\n    }\n\n    public function setScope($scope, $client_id = null, $type = 'supported')\n    {\n        if (!in_array($type, array('default', 'supported'))) {\n            throw new \\InvalidArgumentException('\"$type\" must be one of \"default\", \"supported\"');\n        }\n\n        if (is_null($client_id)) {\n            $key = $this->config['scope_key'].$type.':global';\n        } else {\n            $key = $this->config['scope_key'].$type.':'.$client_id;\n        }\n\n        return $this->setValue($key, $scope);\n    }\n\n    /*JWTBearerInterface */\n    public function getClientKey($client_id, $subject)\n    {\n        if (!$jwt = $this->getValue($this->config['jwt_key'] . $client_id)) {\n            return false;\n        }\n\n        if (isset($jwt['subject']) && $jwt['subject'] == $subject) {\n            return $jwt['key'];\n        }\n\n        return null;\n    }\n\n    public function setClientKey($client_id, $key, $subject = null)\n    {\n        return $this->setValue($this->config['jwt_key'] . $client_id, array(\n            'key' => $key,\n            'subject' => $subject\n        ));\n    }\n\n    public function getClientScope($client_id)\n    {\n        if (!$clientDetails = $this->getClientDetails($client_id)) {\n            return false;\n        }\n\n        if (isset($clientDetails['scope'])) {\n            return $clientDetails['scope'];\n        }\n\n        return null;\n    }\n\n    public function getJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs redis implementation.\n        throw new \\Exception('getJti() for the Redis driver is currently unimplemented.');\n    }\n\n    public function setJti($client_id, $subject, $audience, $expiration, $jti)\n    {\n        //TODO: Needs redis implementation.\n        throw new \\Exception('setJti() for the Redis driver is currently unimplemented.');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/RefreshTokenInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should get/save refresh tokens for the \"Refresh Token\"\n * grant type\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface RefreshTokenInterface\n{\n    /**\n     * Grant refresh access tokens.\n     *\n     * Retrieve the stored data for the given refresh token.\n     *\n     * Required for OAuth2::GRANT_TYPE_REFRESH_TOKEN.\n     *\n     * @param $refresh_token\n     * Refresh token to be check with.\n     *\n     * @return\n     * An associative array as below, and NULL if the refresh_token is\n     * invalid:\n     * - refresh_token: Refresh token identifier.\n     * - client_id: Client identifier.\n     * - user_id: User identifier.\n     * - expires: Expiration unix timestamp, or 0 if the token doesn't expire.\n     * - scope: (optional) Scope values in space-separated string.\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-6\n     *\n     * @ingroup oauth2_section_6\n     */\n    public function getRefreshToken($refresh_token);\n\n    /**\n     * Take the provided refresh token values and store them somewhere.\n     *\n     * This function should be the storage counterpart to getRefreshToken().\n     *\n     * If storage fails for some reason, we're not currently checking for\n     * any sort of success/failure, so you should bail out of the script\n     * and provide a descriptive fail message.\n     *\n     * Required for OAuth2::GRANT_TYPE_REFRESH_TOKEN.\n     *\n     * @param $refresh_token\n     * Refresh token to be stored.\n     * @param $client_id\n     * Client identifier to be stored.\n     * @param $user_id\n     * User identifier to be stored.\n     * @param $expires\n     * Expiration timestamp to be stored. 0 if the token doesn't expire.\n     * @param $scope\n     * (optional) Scopes to be stored in space-separated string.\n     *\n     * @ingroup oauth2_section_6\n     */\n    public function setRefreshToken($refresh_token, $client_id, $user_id, $expires, $scope = null);\n\n    /**\n     * Expire a used refresh token.\n     *\n     * This is not explicitly required in the spec, but is almost implied.\n     * After granting a new refresh token, the old one is no longer useful and\n     * so should be forcibly expired in the data store so it can't be used again.\n     *\n     * If storage fails for some reason, we're not currently checking for\n     * any sort of success/failure, so you should bail out of the script\n     * and provide a descriptive fail message.\n     *\n     * @param $refresh_token\n     * Refresh token to be expired.\n     *\n     * @ingroup oauth2_section_6\n     */\n    public function unsetRefreshToken($refresh_token);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/ScopeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should retrieve data involving the relevent scopes associated\n * with this implementation.\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface ScopeInterface\n{\n    /**\n     * Check if the provided scope exists.\n     *\n     * @param $scope\n     * A space-separated string of scopes.\n     *\n     * @return\n     * TRUE if it exists, FALSE otherwise.\n     */\n    public function scopeExists($scope);\n\n    /**\n     * The default scope to use in the event the client\n     * does not request one. By returning \"false\", a\n     * request_error is returned by the server to force a\n     * scope request by the client. By returning \"null\",\n     * opt out of requiring scopes\n     *\n     * @param $client_id\n     * An optional client id that can be used to return customized default scopes.\n     *\n     * @return\n     * string representation of default scope, null if\n     * scopes are not defined, or false to force scope\n     * request by the client\n     *\n     * ex:\n     *     'default'\n     * ex:\n     *     null\n     */\n    public function getDefaultScope($client_id = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/Storage/UserCredentialsInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n * Implement this interface to specify where the OAuth2 Server\n * should retrieve user credentials for the\n * \"Resource Owner Password Credentials\" grant type\n *\n * @author Brent Shaffer <bshafs at gmail dot com>\n */\ninterface UserCredentialsInterface\n{\n    /**\n     * Grant access tokens for basic user credentials.\n     *\n     * Check the supplied username and password for validity.\n     *\n     * You can also use the $client_id param to do any checks required based\n     * on a client, if you need that.\n     *\n     * Required for OAuth2::GRANT_TYPE_USER_CREDENTIALS.\n     *\n     * @param $username\n     * Username to be check with.\n     * @param $password\n     * Password to be check with.\n     *\n     * @return\n     * TRUE if the username and password are valid, and FALSE if it isn't.\n     * Moreover, if the username and password are valid, and you want to\n     *\n     * @see http://tools.ietf.org/html/rfc6749#section-4.3\n     *\n     * @ingroup oauth2_section_4\n     */\n    public function checkUserCredentials($username, $password);\n\n    /**\n     * @param string $username - username to get details for\n     * @return array|false     - the associated \"user_id\" and optional \"scope\" values\n     *                           This function MUST return FALSE if the requested user does not exist or is\n     *                           invalid. \"scope\" is a space-separated list of restricted scopes.\n     * @code\n     *     return array(\n     *         \"user_id\"  => USER_ID,    // REQUIRED user_id to be stored with the authorization code or access token\n     *         \"scope\"    => SCOPE       // OPTIONAL space-separated list of restricted scopes\n     *     );\n     * @endcode\n     */\n    public function getUserDetails($username);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Bearer.php",
    "content": "<?php\n\nnamespace OAuth2\\TokenType;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n*\n*/\nclass Bearer implements TokenTypeInterface\n{\n    private $config;\n\n    public function __construct(array $config = array())\n    {\n        $this->config = array_merge(array(\n            'token_param_name'         => 'access_token',\n            'token_bearer_header_name' => 'Bearer',\n        ), $config);\n    }\n\n    public function getTokenType()\n    {\n        return 'Bearer';\n    }\n\n    /**\n     * Check if the request has supplied token\n     *\n     * @see https://github.com/bshaffer/oauth2-server-php/issues/349#issuecomment-37993588\n     */\n    public function requestHasToken(RequestInterface $request)\n    {\n        $headers = $request->headers('AUTHORIZATION');\n\n        // check the header, then the querystring, then the request body\n        return !empty($headers) || (bool) ($request->request($this->config['token_param_name'])) || (bool) ($request->query($this->config['token_param_name']));\n    }\n\n    /**\n     * This is a convenience function that can be used to get the token, which can then\n     * be passed to getAccessTokenData(). The constraints specified by the draft are\n     * attempted to be adheared to in this method.\n     *\n     * As per the Bearer spec (draft 8, section 2) - there are three ways for a client\n     * to specify the bearer token, in order of preference: Authorization Header,\n     * POST and GET.\n     *\n     * NB: Resource servers MUST accept tokens via the Authorization scheme\n     * (http://tools.ietf.org/html/rfc6750#section-2).\n     *\n     * @todo Should we enforce TLS/SSL in this function?\n     *\n     * @see http://tools.ietf.org/html/rfc6750#section-2.1\n     * @see http://tools.ietf.org/html/rfc6750#section-2.2\n     * @see http://tools.ietf.org/html/rfc6750#section-2.3\n     *\n     * Old Android version bug (at least with version 2.2)\n     * @see http://code.google.com/p/android/issues/detail?id=6684\n     *\n     */\n    public function getAccessTokenParameter(RequestInterface $request, ResponseInterface $response)\n    {\n        $headers = $request->headers('AUTHORIZATION');\n\n        /**\n         * Ensure more than one method is not used for including an\n         * access token\n         *\n         * @see http://tools.ietf.org/html/rfc6750#section-3.1\n         */\n        $methodsUsed = !empty($headers) + (bool) ($request->query($this->config['token_param_name'])) + (bool) ($request->request($this->config['token_param_name']));\n        if ($methodsUsed > 1) {\n            $response->setError(400, 'invalid_request', 'Only one method may be used to authenticate at a time (Auth header, GET or POST)');\n\n            return null;\n        }\n\n        /**\n         * If no authentication is provided, set the status code\n         * to 401 and return no other error information\n         *\n         * @see http://tools.ietf.org/html/rfc6750#section-3.1\n         */\n        if ($methodsUsed == 0) {\n            $response->setStatusCode(401);\n\n            return null;\n        }\n\n        // HEADER: Get the access token from the header\n        if (!empty($headers)) {\n            if (!preg_match('/' . $this->config['token_bearer_header_name'] . '\\s(\\S+)/i', $headers, $matches)) {\n                $response->setError(400, 'invalid_request', 'Malformed auth header');\n\n                return null;\n            }\n\n            return $matches[1];\n        }\n\n        if ($request->request($this->config['token_param_name'])) {\n            // // POST: Get the token from POST data\n            if (!in_array(strtolower($request->server('REQUEST_METHOD')), array('post', 'put'))) {\n                $response->setError(400, 'invalid_request', 'When putting the token in the body, the method must be POST or PUT', '#section-2.2');\n\n                return null;\n            }\n\n            $contentType = $request->server('CONTENT_TYPE');\n            if (false !== $pos = strpos($contentType, ';')) {\n                $contentType = substr($contentType, 0, $pos);\n            }\n\n            if ($contentType !== null && $contentType != 'application/x-www-form-urlencoded') {\n                // IETF specifies content-type. NB: Not all webservers populate this _SERVER variable\n                // @see http://tools.ietf.org/html/rfc6750#section-2.2\n                $response->setError(400, 'invalid_request', 'The content type for POST requests must be \"application/x-www-form-urlencoded\"');\n\n                return null;\n            }\n\n            return $request->request($this->config['token_param_name']);\n        }\n\n        // GET method\n        return $request->query($this->config['token_param_name']);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/Mac.php",
    "content": "<?php\n\nnamespace OAuth2\\TokenType;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\n/**\n* This is not yet supported!\n*/\nclass Mac implements TokenTypeInterface\n{\n    public function getTokenType()\n    {\n        return 'mac';\n    }\n\n    public function getAccessTokenParameter(RequestInterface $request, ResponseInterface $response)\n    {\n        throw new \\LogicException(\"Not supported\");\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/src/OAuth2/TokenType/TokenTypeInterface.php",
    "content": "<?php\n\nnamespace OAuth2\\TokenType;\n\nuse OAuth2\\RequestInterface;\nuse OAuth2\\ResponseInterface;\n\ninterface TokenTypeInterface\n{\n    /**\n     * Token type identification string\n     *\n     * ex: \"bearer\" or \"mac\"\n     */\n    public function getTokenType();\n\n    /**\n     * Retrieves the token string from the request object\n     */\n    public function getAccessTokenParameter(RequestInterface $request, ResponseInterface $response);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/AutoloadTest.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass AutoloadTest extends TestCase\n{\n    public function testClassesExist()\n    {\n        // autoloader is called in test/bootstrap.php\n        $this->assertTrue(class_exists('OAuth2\\Server'));\n        $this->assertTrue(class_exists('OAuth2\\Request'));\n        $this->assertTrue(class_exists('OAuth2\\Response'));\n        $this->assertTrue(class_exists('OAuth2\\GrantType\\UserCredentials'));\n        $this->assertTrue(interface_exists('OAuth2\\Storage\\AccessTokenInterface'));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/AuthorizeControllerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\Storage\\Memory;\nuse OAuth2\\Scope;\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\GrantType\\AuthorizationCode;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse OAuth2\\Request\\TestRequest;\nuse PHPUnit\\Framework\\TestCase;\n\nclass AuthorizeControllerTest extends TestCase\n{\n    public function testNoClientIdResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request();\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'No client id supplied');\n    }\n\n    public function testInvalidClientIdResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Fake Client ID', // invalid client id\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'The client id supplied is invalid');\n    }\n\n    public function testNoRedirectUriSuppliedOrStoredResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_uri');\n        $this->assertEquals($response->getParameter('error_description'), 'No redirect URI was supplied or stored');\n    }\n\n    public function testNoResponseTypeResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'invalid_request');\n        $this->assertEquals($query['error_description'], 'Invalid or missing response type');\n    }\n\n    public function testInvalidResponseTypeResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'invalid', // invalid response type\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'invalid_request');\n        $this->assertEquals($query['error_description'], 'Invalid or missing response type');\n    }\n\n    public function testRedirectUriFragmentResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com#fragment', // valid redirect URI\n            'response_type' => 'code', // invalid response type\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_uri');\n        $this->assertEquals($response->getParameter('error_description'), 'The redirect URI must not contain a fragment');\n    }\n\n    public function testEnforceState()\n    {\n        $server = $this->getTestServer(array('enforce_state' => true));\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'invalid_request');\n        $this->assertEquals($query['error_description'], 'The state parameter is required');\n    }\n\n    public function testDoNotEnforceState()\n    {\n        $server = $this->getTestServer(array('enforce_state' => false));\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertNotContains('error', $response->getHttpHeader('Location'));\n    }\n\n    public function testEnforceScope()\n    {\n        $server = $this->getTestServer();\n        $scopeStorage = new Memory(array('default_scope' => false, 'supported_scopes' => array('testscope')));\n        $server->setScopeUtil(new Scope($scopeStorage));\n\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n            'state' => 'xyz',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'invalid_client');\n        $this->assertEquals($query['error_description'], 'This application requires you specify a scope parameter');\n\n        $request->query['scope'] = 'testscope';\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertNotContains('error', $response->getHttpHeader('Location'));\n    }\n\n    public function testInvalidRedirectUri()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID with Redirect Uri', // valid client id\n            'redirect_uri' => 'http://adobe.com', // invalid redirect URI\n            'response_type' => 'code',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'redirect_uri_mismatch');\n        $this->assertEquals($response->getParameter('error_description'), 'The redirect URI provided is missing or does not match');\n    }\n\n    public function testInvalidRedirectUriApprovedByBuggyRegisteredUri()\n    {\n        $server = $this->getTestServer();\n        $server->setConfig('require_exact_redirect_uri', false);\n        $request = new Request(array(\n            'client_id' => 'Test Client ID with Buggy Redirect Uri', // valid client id\n            'redirect_uri' => 'http://adobe.com', // invalid redirect URI\n            'response_type' => 'code',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'redirect_uri_mismatch');\n        $this->assertEquals($response->getParameter('error_description'), 'The redirect URI provided is missing or does not match');\n    }\n\n    public function testNoRedirectUriWithMultipleRedirectUris()\n    {\n        $server = $this->getTestServer();\n\n        // create a request with no \"redirect_uri\" in querystring\n        $request = new Request(array(\n            'client_id' => 'Test Client ID with Multiple Redirect Uris', // valid client id\n            'response_type' => 'code',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_uri');\n        $this->assertEquals($response->getParameter('error_description'), 'A redirect URI must be supplied when multiple redirect URIs are registered');\n    }\n\n    public function testRedirectUriWithValidRedirectUri()\n    {\n        $server = $this->getTestServer();\n\n        // create a request with no \"redirect_uri\" in querystring\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID with Redirect Uri Parts', // valid client id\n            'response_type' => 'code',\n            'redirect_uri'  => 'http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true',\n            'state'         => 'xyz',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertContains('code', $response->getHttpHeader('Location'));\n    }\n\n    public function testRedirectUriWithDifferentQueryAndExactMatchRequired()\n    {\n        $server = $this->getTestServer(array('require_exact_redirect_uri' => true));\n\n        // create a request with no \"redirect_uri\" in querystring\n        $request = new Request(array(\n            'client_id' => 'Test Client ID with Redirect Uri Parts', // valid client id\n            'response_type' => 'code',\n            'redirect_uri' => 'http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true&hereisa=querystring',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'redirect_uri_mismatch');\n        $this->assertEquals($response->getParameter('error_description'), 'The redirect URI provided is missing or does not match');\n    }\n\n    public function testRedirectUriWithDifferentQueryAndExactMatchNotRequired()\n    {\n        $server = $this->getTestServer(array('require_exact_redirect_uri' => false));\n\n        // create a request with no \"redirect_uri\" in querystring\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID with Redirect Uri Parts', // valid client id\n            'response_type' => 'code',\n            'redirect_uri'  => 'http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true&hereisa=querystring',\n            'state'         => 'xyz',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertContains('code', $response->getHttpHeader('Location'));\n    }\n\n    public function testMultipleRedirectUris()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID with Multiple Redirect Uris', // valid client id\n            'redirect_uri'  => 'http://brentertainment.com', // valid redirect URI\n            'response_type' => 'code',\n            'state'         => 'xyz'\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertContains('code', $response->getHttpHeader('Location'));\n\n        // call again with different (but still valid) redirect URI\n        $request->query['redirect_uri'] = 'http://morehazards.com';\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertContains('code', $response->getHttpHeader('Location'));\n    }\n\n    /**\n     * @see http://tools.ietf.org/html/rfc6749#section-4.1.3\n     * @see https://github.com/bshaffer/oauth2-server-php/issues/163\n     */\n    public function testNoRedirectUriSuppliedDoesNotRequireTokenRedirectUri()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID with Redirect Uri', // valid client id\n            'response_type' => 'code',\n            'state'         => 'xyz',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertContains('state', $response->getHttpHeader('Location'));\n        $this->assertStringStartsWith('http://brentertainment.com?code=', $response->getHttpHeader('Location'));\n\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['query'], $query);\n\n        // call token endpoint with no redirect_uri supplied\n        $request = TestRequest::createPost(array(\n            'client_id'     => 'Test Client ID with Redirect Uri', // valid client id\n            'client_secret' => 'TestSecret2',\n            'grant_type'    => 'authorization_code',\n            'code'          => $query['code'],\n        ));\n\n        $server->handleTokenRequest($request, $response = new Response(), true);\n        $this->assertEquals($response->getStatusCode(), 200);\n        $this->assertNotNull($response->getParameter('access_token'));\n    }\n\n    public function testUserDeniesAccessResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n            'state' => 'xyz',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'access_denied');\n        $this->assertEquals($query['error_description'], 'The user denied access to your application');\n    }\n\n    public function testCodeQueryParamIsSet()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n            'state'         => 'xyz',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n\n        $this->assertEquals('http', $parts['scheme']); // same as passed in to redirect_uri\n        $this->assertEquals('adobe.com', $parts['host']); // same as passed in to redirect_uri\n        $this->assertArrayHasKey('query', $parts);\n        $this->assertFalse(isset($parts['fragment']));\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['query'], $query);\n        $this->assertNotNull($query);\n        $this->assertArrayHasKey('code', $query);\n\n        // ensure no id_token was saved, since the openid scope wasn't requested\n        $storage = $server->getStorage('authorization_code');\n        $code = $storage->getAuthorizationCode($query['code']);\n        $this->assertTrue(empty($code['id_token']));\n\n        // ensure no error was returned\n        $this->assertFalse(isset($query['error']));\n        $this->assertFalse(isset($query['error_description']));\n    }\n\n    public function testSuccessfulRequestReturnsStateParameter()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n            'state'         => 'test', // valid state string (just needs to be passed back to us)\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('query', $parts);\n        parse_str($parts['query'], $query);\n\n        $this->assertArrayHasKey('state', $query);\n        $this->assertEquals($query['state'], 'test');\n\n        // ensure no error was returned\n        $this->assertFalse(isset($query['error']));\n        $this->assertFalse(isset($query['error_description']));\n    }\n\n    public function testSuccessfulRequestStripsExtraParameters()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'code',\n            'state'         => 'test',      // valid state string (just needs to be passed back to us)\n            'fake'          => 'something', // extra query param\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertFalse(isset($parts['fake']));\n        $this->assertArrayHasKey('query', $parts);\n        parse_str($parts['query'], $query);\n\n        $this->assertFalse(isset($parmas['fake']));\n        $this->assertArrayHasKey('state', $query);\n        $this->assertEquals($query['state'], 'test');\n    }\n\n    public function testSuccessfulOpenidConnectRequest()\n    {\n        $server = $this->getTestServer(array(\n            'use_openid_connect' => true,\n            'issuer' => 'bojanz',\n        ));\n\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID',\n            'redirect_uri'  => 'http://adobe.com',\n            'response_type' => 'code',\n            'state'         => 'xyz',\n            'scope'         => 'openid',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('query', $parts);\n        $this->assertFalse(isset($parts['fragment']));\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['query'], $query);\n        $this->assertNotNull($query);\n        $this->assertArrayHasKey('code', $query);\n\n        // ensure no error was returned\n        $this->assertFalse(isset($query['error']));\n        $this->assertFalse(isset($query['error_description']));\n\n        // confirm that the id_token has been created.\n        $storage = $server->getStorage('authorization_code');\n        $code = $storage->getAuthorizationCode($query['code']);\n        $this->assertTrue(!empty($code['id_token']));\n    }\n\n    public function testCreateController()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $controller = new AuthorizeController($storage);\n    }\n\n    private function getTestServer($config = array())\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, $config);\n\n        // Add the two types supported for authorization grant\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/ResourceControllerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\GrantType\\AuthorizationCode;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ResourceControllerTest extends TestCase\n{\n    public function testNoAccessToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 401);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n        $this->assertEquals('', $response->getResponseBody());\n    }\n\n    public function testMalformedHeader()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'tH1s i5 B0gU5';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Malformed auth header');\n    }\n\n    public function testMultipleTokensSubmitted()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->request['access_token'] = 'TEST';\n        $request->query['access_token'] = 'TEST';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Only one method may be used to authenticate at a time (Auth header, GET or POST)');\n    }\n\n    public function testInvalidRequestMethod()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->server['REQUEST_METHOD'] = 'GET';\n        $request->request['access_token'] = 'TEST';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'When putting the token in the body, the method must be POST or PUT');\n    }\n\n    public function testInvalidContentType()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->server['REQUEST_METHOD'] = 'POST';\n        $request->server['CONTENT_TYPE'] = 'application/json';\n        $request->request['access_token'] = 'TEST';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'The content type for POST requests must be \"application/x-www-form-urlencoded\"');\n    }\n\n    public function testInvalidToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer TESTTOKEN';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 401);\n        $this->assertEquals($response->getParameter('error'), 'invalid_token');\n        $this->assertEquals($response->getParameter('error_description'), 'The access token provided is invalid');\n    }\n\n    public function testExpiredToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-expired';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 401);\n        $this->assertEquals($response->getParameter('error'), 'invalid_token');\n        $this->assertEquals($response->getParameter('error_description'), 'The access token provided has expired');\n    }\n\n    public function testOutOfScopeToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-scope';\n        $scope = 'outofscope';\n        $allow = $server->verifyResourceRequest($request, $response = new Response(), $scope);\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 403);\n        $this->assertEquals($response->getParameter('error'), 'insufficient_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'The request requires higher privileges than provided by the access token');\n\n        // verify the \"scope\" has been set in the \"WWW-Authenticate\" header\n        preg_match('/scope=\"(.*?)\"/', $response->getHttpHeader('WWW-Authenticate'), $matches);\n        $this->assertEquals(2, count($matches));\n        $this->assertEquals($matches[1], 'outofscope');\n    }\n\n    public function testMalformedToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-malformed';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertFalse($allow);\n\n        $this->assertEquals($response->getStatusCode(), 401);\n        $this->assertEquals($response->getParameter('error'), 'malformed_token');\n        $this->assertEquals($response->getParameter('error_description'), 'Malformed token (missing \"expires\")');\n    }\n\n    public function testValidToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-scope';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertTrue($allow);\n    }\n\n    public function testValidTokenWithScopeParam()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-scope';\n        $request->query['scope'] = 'testscope';\n        $allow = $server->verifyResourceRequest($request, $response = new Response());\n        $this->assertTrue($allow);\n    }\n\n    public function testCreateController()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $tokenType = new \\OAuth2\\TokenType\\Bearer();\n        $controller = new ResourceController($tokenType, $storage);\n    }\n\n    private function getTestServer($config = array())\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, $config);\n\n        // Add the two types supported for authorization grant\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Controller/TokenControllerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Controller;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\GrantType\\AuthorizationCode;\nuse OAuth2\\GrantType\\ClientCredentials;\nuse OAuth2\\GrantType\\UserCredentials;\nuse OAuth2\\Scope;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass TokenControllerTest extends TestCase\n{\n    public function testNoGrantType()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $server->handleTokenRequest(TestRequest::createPost(), $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'The grant type was not specified in the request');\n    }\n\n    public function testInvalidGrantType()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'invalid_grant_type', // invalid grant type\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'unsupported_grant_type');\n        $this->assertEquals($response->getParameter('error_description'), 'Grant type \"invalid_grant_type\" not supported');\n    }\n\n    public function testNoClientId()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode',\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'Client credentials were not found in the headers or body');\n    }\n\n    public function testNoClientSecretWithConfidentialClient()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode',\n            'client_id' => 'Test Client ID', // valid client id\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'This client is invalid or must authenticate using a client secret');\n    }\n\n    public function testNoClientSecretWithEmptySecret()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode-empty-secret',\n            'client_id' => 'Test Client ID Empty Secret', // valid client id\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 200);\n    }\n\n    public function testInvalidClientId()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode',\n            'client_id'  => 'Fake Client ID', // invalid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'The client credentials are invalid');\n    }\n\n    public function testInvalidClientSecret()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode',\n            'client_id'  => 'Test Client ID', // valid client id\n            'client_secret' => 'Fake Client Secret', // invalid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'The client credentials are invalid');\n    }\n\n    public function testValidTokenResponse()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code' => 'testcode', // valid authorization code\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals($response->getStatusCode(), 200);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n        $this->assertNotNull($response->getParameter('access_token'));\n        $this->assertNotNull($response->getParameter('expires_in'));\n        $this->assertNotNull($response->getParameter('token_type'));\n    }\n\n    public function testValidClientIdScope()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode',\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'scope' => 'clientscope1 clientscope2'\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 200);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n        $this->assertEquals('clientscope1 clientscope2', $response->getParameter('scope'));\n    }\n\n    public function testInvalidClientIdScope()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'code'       => 'testcode-with-scope',\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'scope' => 'clientscope3'\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');\n    }\n\n    public function testEnforceScope()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new ClientCredentials($storage));\n\n        $scope = new Scope(array(\n            'default_scope' => false,\n            'supported_scopes' => array('testscope')\n        ));\n        $server->setScopeUtil($scope);\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id'  => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $response = $server->handleTokenRequest($request);\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'This application requires you specify a scope parameter');\n    }\n\n    public function testCanReceiveAccessTokenUsingPasswordGrantTypeWithoutClientSecret()\n    {\n        // add the test parameters in memory\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new UserCredentials($storage));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password',                          // valid grant type\n            'client_id'  => 'Test Client ID For Password Grant', // valid client id\n            'username'   => 'johndoe',                           // valid username\n            'password'   => 'password',                          // valid password for username\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1));\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n        $this->assertNotNull($response->getParameter('access_token'));\n        $this->assertNotNull($response->getParameter('expires_in'));\n        $this->assertNotNull($response->getParameter('token_type'));\n    }\n\n    public function testInvalidTokenTypeHintForRevoke()\n    {\n        $server = $this->getTestServer();\n\n        $request = TestRequest::createPost(array(\n            'token_type_hint' => 'foo',\n            'token' => 'sometoken'\n        ));\n\n        $server->handleRevokeRequest($request, $response = new Response());\n\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(400, $response->getStatusCode(), var_export($response, 1));\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Token type hint must be either \\'access_token\\' or \\'refresh_token\\'');\n    }\n\n    public function testMissingTokenForRevoke()\n    {\n        $server = $this->getTestServer();\n\n        $request = TestRequest::createPost(array(\n            'token_type_hint' => 'access_token'\n        ));\n\n        $server->handleRevokeRequest($request, $response = new Response());\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(400, $response->getStatusCode(), var_export($response, 1));\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Missing token parameter to revoke');\n    }\n\n    public function testInvalidRequestMethodForRevoke()\n    {\n        $server = $this->getTestServer();\n\n        $request = new TestRequest();\n        $request->setQuery(array(\n            'token_type_hint' => 'access_token'\n        ));\n\n        $server->handleRevokeRequest($request, $response = new Response());\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(405, $response->getStatusCode(), var_export($response, 1));\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'The request method must be POST when revoking an access token');\n    }\n\n    public function testCanUseCrossOriginRequestForRevoke()\n    {\n        $server = $this->getTestServer();\n\n        $request = new TestRequest();\n        $request->setMethod('OPTIONS');\n\n        $server->handleRevokeRequest($request, $response = new Response());\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1));\n        $this->assertEquals($response->getHttpHeader('Allow'), 'POST, OPTIONS');\n    }\n\n    public function testInvalidRequestMethodForAccessToken()\n    {\n        $server = $this->getTestServer();\n\n        $request = new TestRequest();\n        $request->setQuery(array(\n            'token_type_hint' => 'access_token'\n        ));\n\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(405, $response->getStatusCode(), var_export($response, 1));\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'The request method must be POST when requesting an access token');\n    }\n\n    public function testCanUseCrossOriginRequestForAccessToken()\n    {\n        $server = $this->getTestServer();\n\n        $request = new TestRequest();\n        $request->setMethod('OPTIONS');\n\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertTrue($response instanceof Response);\n        $this->assertEquals(200, $response->getStatusCode(), var_export($response, 1));\n        $this->assertEquals($response->getHttpHeader('Allow'), 'POST, OPTIONS');\n    }\n\n    public function testCreateController()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $accessToken = new \\OAuth2\\ResponseType\\AccessToken($storage);\n        $controller = new TokenController($accessToken, $storage);\n    }\n\n    private function getTestServer()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/FirebaseJwtTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Encryption;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse PHPUnit\\Framework\\TestCase;\n\nclass FirebaseJwtTest extends TestCase\n{\n    private $privateKey;\n\n    public function setUp()\n    {\n        $this->privateKey = <<<EOD\n-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQC5/SxVlE8gnpFqCxgl2wjhzY7ucEi00s0kUg3xp7lVEvgLgYcA\nnHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1owR0p4d9pOaJK07d01+RzoQLO\nIQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8UlvdRKBxriRnlP3qJQIDAQAB\nAoGAVgJJVU4fhYMu1e5JfYAcTGfF+Gf+h3iQm4JCpoUcxMXf5VpB9ztk3K7LRN5y\nkwFuFALpnUAarRcUPs0D8FoP4qBluKksbAtgHkO7bMSH9emN+mH4le4qpFlR7+P1\n3fLE2Y19IBwPwEfClC+TpJvuog6xqUYGPlg6XLq/MxQUB4ECQQDgovP1v+ONSeGS\nR+NgJTR47noTkQT3M2izlce/OG7a+O0yw6BOZjNXqH2wx3DshqMcPUFrTjibIClP\nl/tEQ3ShAkEA0/TdBYDtXpNNjqg0R9GVH2pw7Kh68ne6mZTuj0kCgFYpUF6L6iMm\nzXamIJ51rTDsTyKTAZ1JuAhAsK/M2BbDBQJAKQ5fXEkIA+i+64dsDUR/hKLBeRYG\nPFAPENONQGvGBwt7/s02XV3cgGbxIgAxqWkqIp0neb9AJUoJgtyaNe3GQQJANoL4\nQQ0af0NVJAZgg8QEHTNL3aGrFSbzx8IE5Lb7PLRsJa5bP5lQxnDoYuU+EI/Phr62\nniisp/b/ZDGidkTMXQJBALeRsH1I+LmICAvWXpLKa9Gv0zGCwkuIJLiUbV9c6CVh\nsuocCAteQwL5iW2gA4AnYr5OGeHFsEl7NCQcwfPZpJ0=\n-----END RSA PRIVATE KEY-----\nEOD;\n    }\n\n    /** @dataProvider provideClientCredentials */\n    public function testJwtUtil($client_id, $client_key)\n    {\n        $jwtUtil = new FirebaseJwt();\n\n        $params = array(\n            'iss' => $client_id,\n            'exp' => time() + 1000,\n            'iat' => time(),\n            'sub' => 'testuser@ourdomain.com',\n            'aud' => 'http://myapp.com/oauth/auth',\n            'scope' => null,\n        );\n\n        $encoded = $jwtUtil->encode($params, $this->privateKey, 'RS256');\n\n        // test BC behaviour of trusting the algorithm in the header\n        $payload = $jwtUtil->decode($encoded, $client_key, array('RS256'));\n        $this->assertEquals($params, $payload);\n\n        // test BC behaviour of not verifying by passing false\n        $payload = $jwtUtil->decode($encoded, $client_key, false);\n        $this->assertEquals($params, $payload);\n\n        // test the new restricted algorithms header\n        $payload = $jwtUtil->decode($encoded, $client_key, array('RS256'));\n        $this->assertEquals($params, $payload);\n    }\n\n    public function testInvalidJwt()\n    {\n        $jwtUtil = new FirebaseJwt();\n\n        $this->assertFalse($jwtUtil->decode('goob'));\n        $this->assertFalse($jwtUtil->decode('go.o.b'));\n    }\n\n    /** @dataProvider provideClientCredentials */\n    public function testInvalidJwtHeader($client_id, $client_key)\n    {\n        $jwtUtil = new FirebaseJwt();\n\n        $params = array(\n            'iss' => $client_id,\n            'exp' => time() + 1000,\n            'iat' => time(),\n            'sub' => 'testuser@ourdomain.com',\n            'aud' => 'http://myapp.com/oauth/auth',\n            'scope' => null,\n        );\n\n        // testing for algorithm tampering when only RSA256 signing is allowed\n        // @see https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/\n        $tampered = $jwtUtil->encode($params, $client_key, 'HS256');\n\n        $payload = $jwtUtil->decode($tampered, $client_key, array('RS256'));\n\n        $this->assertFalse($payload);\n    }\n\n    public function provideClientCredentials()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $client_id  = 'Test Client ID';\n        $client_key = $storage->getClientKey($client_id, \"testuser@ourdomain.com\");\n\n        return array(\n            array($client_id, $client_key),\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Encryption/JwtTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Encryption;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse PHPUnit\\Framework\\TestCase;\n\nclass JwtTest extends TestCase\n{\n    private $privateKey;\n\n    public function setUp()\n    {\n        $this->privateKey = <<<EOD\n-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQC5/SxVlE8gnpFqCxgl2wjhzY7ucEi00s0kUg3xp7lVEvgLgYcA\nnHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1owR0p4d9pOaJK07d01+RzoQLO\nIQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8UlvdRKBxriRnlP3qJQIDAQAB\nAoGAVgJJVU4fhYMu1e5JfYAcTGfF+Gf+h3iQm4JCpoUcxMXf5VpB9ztk3K7LRN5y\nkwFuFALpnUAarRcUPs0D8FoP4qBluKksbAtgHkO7bMSH9emN+mH4le4qpFlR7+P1\n3fLE2Y19IBwPwEfClC+TpJvuog6xqUYGPlg6XLq/MxQUB4ECQQDgovP1v+ONSeGS\nR+NgJTR47noTkQT3M2izlce/OG7a+O0yw6BOZjNXqH2wx3DshqMcPUFrTjibIClP\nl/tEQ3ShAkEA0/TdBYDtXpNNjqg0R9GVH2pw7Kh68ne6mZTuj0kCgFYpUF6L6iMm\nzXamIJ51rTDsTyKTAZ1JuAhAsK/M2BbDBQJAKQ5fXEkIA+i+64dsDUR/hKLBeRYG\nPFAPENONQGvGBwt7/s02XV3cgGbxIgAxqWkqIp0neb9AJUoJgtyaNe3GQQJANoL4\nQQ0af0NVJAZgg8QEHTNL3aGrFSbzx8IE5Lb7PLRsJa5bP5lQxnDoYuU+EI/Phr62\nniisp/b/ZDGidkTMXQJBALeRsH1I+LmICAvWXpLKa9Gv0zGCwkuIJLiUbV9c6CVh\nsuocCAteQwL5iW2gA4AnYr5OGeHFsEl7NCQcwfPZpJ0=\n-----END RSA PRIVATE KEY-----\nEOD;\n    }\n\n    /** @dataProvider provideClientCredentials */\n    public function testJwtUtil($client_id, $client_key)\n    {\n        $jwtUtil = new Jwt();\n\n        $params = array(\n            'iss' => $client_id,\n            'exp' => time() + 1000,\n            'iat' => time(),\n            'sub' => 'testuser@ourdomain.com',\n            'aud' => 'http://myapp.com/oauth/auth',\n            'scope' => null,\n        );\n\n        $encoded = $jwtUtil->encode($params, $this->privateKey, 'RS256');\n\n        // test BC behaviour of trusting the algorithm in the header\n        $payload = $jwtUtil->decode($encoded, $client_key);\n        $this->assertEquals($params, $payload);\n\n        // test BC behaviour of not verifying by passing false\n        $payload = $jwtUtil->decode($encoded, $client_key, false);\n        $this->assertEquals($params, $payload);\n\n        // test the new restricted algorithms header\n        $payload = $jwtUtil->decode($encoded, $client_key, array('RS256'));\n        $this->assertEquals($params, $payload);\n    }\n\n    public function testInvalidJwt()\n    {\n        $jwtUtil = new Jwt();\n\n        $this->assertFalse($jwtUtil->decode('goob'));\n        $this->assertFalse($jwtUtil->decode('go.o.b'));\n    }\n\n    /** @dataProvider provideClientCredentials */\n    public function testInvalidJwtHeader($client_id, $client_key)\n    {\n        $jwtUtil = new Jwt();\n\n        $params = array(\n            'iss' => $client_id,\n            'exp' => time() + 1000,\n            'iat' => time(),\n            'sub' => 'testuser@ourdomain.com',\n            'aud' => 'http://myapp.com/oauth/auth',\n            'scope' => null,\n        );\n\n        // testing for algorithm tampering when only RSA256 signing is allowed\n        // @see https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/\n        $tampered = $jwtUtil->encode($params, $client_key, 'HS256');\n\n        $payload = $jwtUtil->decode($tampered, $client_key, array('RS256'));\n\n        $this->assertFalse($payload);\n    }\n\n    public function provideClientCredentials()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $client_id  = 'Test Client ID';\n        $client_key = $storage->getClientKey($client_id, \"testuser@ourdomain.com\");\n\n        return array(\n            array($client_id, $client_key),\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/AuthorizationCodeTest.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass AuthorizationCodeTest extends TestCase\n{\n    public function testNoCode()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Missing parameter: \"code\" is required');\n    }\n\n    public function testInvalidCode()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'InvalidCode', // invalid authorization code\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Authorization code doesn\\'t exist or is invalid for the client');\n    }\n\n    public function testCodeCannotBeUsedTwice()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode', // valid code\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 200);\n        $this->assertNotNull($response->getParameter('access_token'));\n\n        // try to use the same code again\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Authorization code doesn\\'t exist or is invalid for the client');\n    }\n\n    public function testExpiredCode()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-expired', // expired authorization code\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'The authorization code has expired');\n    }\n\n    public function testValidCode()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode', // valid code\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n    }\n\n    public function testValidRedirectUri()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://brentertainment.com/voil%C3%A0', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-redirect-uri', // valid code\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n    }\n\n    public function testValidCodeNoScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-with-scope', // valid code\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope1 scope2');\n    }\n\n    public function testValidCodeSameScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-with-scope', // valid code\n            'scope'         => 'scope2 scope1',\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope2 scope1');\n    }\n\n    public function testValidCodeLessScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-with-scope', // valid code\n            'scope'         => 'scope1',\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope1');\n    }\n\n    public function testValidCodeDifferentScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-with-scope', // valid code\n            'scope'         => 'scope3',\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');\n    }\n\n    public function testValidCodeInvalidScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-with-scope', // valid code\n            'scope'         => 'invalid-scope',\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');\n    }\n\n    public function testValidClientDifferentCode()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Some Other Client', // valid client id\n            'client_secret' => 'TestSecret3', // valid client secret\n            'code'          => 'testcode', // valid code\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'authorization_code doesn\\'t exist or is invalid for the client');\n    }\n\n    private function getTestServer()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ClientCredentialsTest.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ClientCredentialsTest extends TestCase\n{\n    public function testInvalidCredentials()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'FakeSecret', // valid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'The client credentials are invalid');\n    }\n\n    public function testValidCredentials()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertNull($token['scope']);\n    }\n\n    public function testValidCredentialsWithScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'scope' => 'scope1',\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope1');\n    }\n\n    public function testValidCredentialsInvalidScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'scope' => 'invalid-scope',\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'An unsupported scope was requested');\n    }\n\n    public function testValidCredentialsInHeader()\n    {\n        // create with HTTP_AUTHORIZATION in header\n        $server = $this->getTestServer();\n        $headers = array('HTTP_AUTHORIZATION' => 'Basic '.base64_encode('Test Client ID:TestSecret'), 'REQUEST_METHOD' => 'POST');\n        $params  = array('grant_type' => 'client_credentials');\n        $request = new Request(array(), $params, array(), array(), array(), $headers);\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertNotNull($token['access_token']);\n\n        // create using PHP Authorization Globals\n        $headers = array('PHP_AUTH_USER' => 'Test Client ID', 'PHP_AUTH_PW' => 'TestSecret', 'REQUEST_METHOD' => 'POST');\n        $params  = array('grant_type' => 'client_credentials');\n        $request = new Request(array(), $params, array(), array(), array(), $headers);\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertNotNull($token['access_token']);\n    }\n\n    public function testValidCredentialsInRequest()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertNotNull($token['access_token']);\n    }\n\n    public function testValidCredentialsInQuerystring()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'client_credentials', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertNotNull($token['access_token']);\n    }\n\n    public function testClientUserIdIsSetInAccessToken()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'client_credentials', // valid grant type\n            'client_id'     => 'Client ID With User ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n\n        // verify the user_id was associated with the token\n        $storage = $server->getStorage('client');\n        $token = $storage->getAccessToken($token['access_token']);\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('user_id', $token);\n        $this->assertEquals($token['user_id'], 'brent@brentertainment.com');\n    }\n\n    private function getTestServer()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new ClientCredentials($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/ImplicitTest.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ImplicitTest extends TestCase\n{\n    public function testImplicitNotAllowedResponse()\n    {\n        $server = $this->getTestServer();\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'token', // invalid response type\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'unsupported_response_type');\n        $this->assertEquals($query['error_description'], 'implicit grant type not supported');\n    }\n\n    public function testUserDeniesAccessResponse()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'token', // valid response type\n            'state' => 'xyz',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), false);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        parse_str($parts['query'], $query);\n\n        $this->assertEquals($query['error'], 'access_denied');\n        $this->assertEquals($query['error_description'], 'The user denied access to your application');\n    }\n\n    public function testSuccessfulRequestFragmentParameter()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'token', // valid response type\n            'state' => 'xyz',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n\n        $this->assertEquals('http', $parts['scheme']); // same as passed in to redirect_uri\n        $this->assertEquals('adobe.com', $parts['host']); // same as passed in to redirect_uri\n        $this->assertArrayHasKey('fragment', $parts);\n        $this->assertFalse(isset($parts['query']));\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['fragment'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('access_token', $params);\n        $this->assertArrayHasKey('expires_in', $params);\n        $this->assertArrayHasKey('token_type', $params);\n    }\n\n    public function testSuccessfulRequestReturnsStateParameter()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'token', // valid response type\n            'state' => 'test', // valid state string (just needs to be passed back to us)\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('fragment', $parts);\n        parse_str($parts['fragment'], $params);\n\n        $this->assertArrayHasKey('state', $params);\n        $this->assertEquals($params['state'], 'test');\n    }\n\n    public function testSuccessfulRequestStripsExtraParameters()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'client_id' => 'Test Client ID', // valid client id\n            'redirect_uri' => 'http://adobe.com?fake=something', // valid redirect URI\n            'response_type' => 'token', // valid response type\n            'state' => 'test', // valid state string (just needs to be passed back to us)\n            'fake' => 'something', // add extra param to querystring\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNull($response->getParameter('error_description'));\n\n        $location = $response->getHttpHeader('Location');\n        $parts = parse_url($location);\n        $this->assertFalse(isset($parts['fake']));\n        $this->assertArrayHasKey('fragment', $parts);\n        parse_str($parts['fragment'], $params);\n\n        $this->assertFalse(isset($params['fake']));\n        $this->assertArrayHasKey('state', $params);\n        $this->assertEquals($params['state'], 'test');\n    }\n\n    private function getTestServer($config = array())\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, $config);\n\n        // Add the two types supported for authorization grant\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/JwtBearerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse OAuth2\\Encryption\\Jwt;\nuse PHPUnit\\Framework\\TestCase;\n\nclass JwtBearerTest extends TestCase\n{\n    private $privateKey;\n\n    public function setUp()\n    {\n        $this->privateKey = <<<EOD\n-----BEGIN RSA PRIVATE KEY-----\nMIICXAIBAAKBgQC5/SxVlE8gnpFqCxgl2wjhzY7ucEi00s0kUg3xp7lVEvgLgYcA\nnHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1owR0p4d9pOaJK07d01+RzoQLO\nIQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8UlvdRKBxriRnlP3qJQIDAQAB\nAoGAVgJJVU4fhYMu1e5JfYAcTGfF+Gf+h3iQm4JCpoUcxMXf5VpB9ztk3K7LRN5y\nkwFuFALpnUAarRcUPs0D8FoP4qBluKksbAtgHkO7bMSH9emN+mH4le4qpFlR7+P1\n3fLE2Y19IBwPwEfClC+TpJvuog6xqUYGPlg6XLq/MxQUB4ECQQDgovP1v+ONSeGS\nR+NgJTR47noTkQT3M2izlce/OG7a+O0yw6BOZjNXqH2wx3DshqMcPUFrTjibIClP\nl/tEQ3ShAkEA0/TdBYDtXpNNjqg0R9GVH2pw7Kh68ne6mZTuj0kCgFYpUF6L6iMm\nzXamIJ51rTDsTyKTAZ1JuAhAsK/M2BbDBQJAKQ5fXEkIA+i+64dsDUR/hKLBeRYG\nPFAPENONQGvGBwt7/s02XV3cgGbxIgAxqWkqIp0neb9AJUoJgtyaNe3GQQJANoL4\nQQ0af0NVJAZgg8QEHTNL3aGrFSbzx8IE5Lb7PLRsJa5bP5lQxnDoYuU+EI/Phr62\nniisp/b/ZDGidkTMXQJBALeRsH1I+LmICAvWXpLKa9Gv0zGCwkuIJLiUbV9c6CVh\nsuocCAteQwL5iW2gA4AnYr5OGeHFsEl7NCQcwfPZpJ0=\n-----END RSA PRIVATE KEY-----\nEOD;\n    }\n\n    public function testMalformedJWT()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Get the jwt and break it\n        $jwt = $this->getJWT();\n        $jwt = substr_replace($jwt, 'broken', 3, 6);\n\n        $request->request['assertion'] = $jwt;\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'JWT is malformed');\n    }\n\n    public function testBrokenSignature()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Get the jwt and break signature\n        $jwt = $this->getJWT() . 'notSupposeToBeHere';\n        $request->request['assertion'] = $jwt;\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'JWT failed signature verification');\n    }\n\n    public function testExpiredJWT()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Get an expired JWT\n        $jwt = $this->getJWT(1234);\n        $request->request['assertion'] = $jwt;\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'JWT has expired');\n    }\n\n    public function testBadExp()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Get an expired JWT\n        $jwt = $this->getJWT('badtimestamp');\n        $request->request['assertion'] = $jwt;\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Expiration (exp) time must be a unix time stamp');\n    }\n\n    public function testNoAssert()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Do not pass the assert (JWT)\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Missing parameters: \"assertion\" required');\n    }\n\n    public function testNotBefore()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Get a future NBF\n        $jwt = $this->getJWT(null, time() + 10000);\n        $request->request['assertion'] = $jwt;\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'JWT cannot be used before the Not Before (nbf) time');\n    }\n\n    public function testBadNotBefore()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n        ));\n\n        //Get a non timestamp nbf\n        $jwt = $this->getJWT(null, 'notatimestamp');\n        $request->request['assertion'] = $jwt;\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Not Before (nbf) time must be a unix time stamp');\n    }\n\n    public function testNonMatchingAudience()\n    {\n        $server = $this->getTestServer('http://google.com/oauth/o/auth');\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer', // valid grant type\n            'assertion' => $this->getJWT(),\n        ));\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid audience (aud)');\n    }\n\n    public function testBadClientID()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n            'assertion' => $this->getJWT(null, null, null, 'bad_client_id'),\n        ));\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid issuer (iss) or subject (sub) provided');\n    }\n\n    public function testBadSubject()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n            'assertion' => $this->getJWT(null, null, 'anotheruser@ourdomain,com'),\n        ));\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid issuer (iss) or subject (sub) provided');\n    }\n\n    public function testMissingKey()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n            'assertion' => $this->getJWT(null, null, null, 'Missing Key Cli,nt'),\n        ));\n\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid issuer (iss) or subject (sub) provided');\n    }\n\n    public function testValidJwt()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n            'assertion' => $this->getJWT(), // valid assertion\n        ));\n\n        $token = $server->grantAccessToken($request, new Response());\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n    }\n\n    public function testValidJwtWithScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n            'assertion'  => $this->getJWT(null, null, null, 'Test Client ID'), // valid assertion\n            'scope'      => 'scope1', // valid scope\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope1');\n    }\n\n    public function testValidJwtInvalidScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n            'assertion'  => $this->getJWT(null, null, null, 'Test Client ID'), // valid assertion\n            'scope'      => 'invalid-scope', // invalid scope\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'An unsupported scope was requested');\n    }\n\n    public function testValidJti()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n                'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n                'assertion' => $this->getJWT(null, null, 'testuser@ourdomain.com', 'Test Client ID', 'unused_jti'), // valid assertion with invalid scope\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n    }\n\n    public function testInvalidJti()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n                'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n                'assertion' => $this->getJWT(99999999900, null, 'testuser@ourdomain.com', 'Test Client ID', 'used_jti'), // valid assertion with invalid scope\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'JSON Token Identifier (jti) has already been used');\n    }\n\n    public function testJtiReplayAttack()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n                'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',  // valid grant type\n                'assertion' => $this->getJWT(99999999900, null, 'testuser@ourdomain.com', 'Test Client ID', 'totally_new_jti'), // valid assertion with invalid scope\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n\n        //Replay the same request\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'JSON Token Identifier (jti) has already been used');\n    }\n\n    /**\n     * Generates a JWT\n     * @param $exp The expiration date. If the current time is greater than the exp, the JWT is invalid.\n     * @param $nbf The \"not before\" time. If the current time is less than the nbf, the JWT is invalid.\n     * @param $sub The subject we are acting on behalf of. This could be the email address of the user in the system.\n     * @param $iss The issuer, usually the client_id.\n     * @return string\n     */\n    private function getJWT($exp = null, $nbf = null, $sub = null, $iss = 'Test Client ID', $jti = null)\n    {\n        if (!$exp) {\n            $exp = time() + 1000;\n        }\n\n        if (!$sub) {\n            $sub = \"testuser@ourdomain.com\";\n        }\n\n        $params = array(\n            'iss' => $iss,\n            'exp' => $exp,\n            'iat' => time(),\n            'sub' => $sub,\n            'aud' => 'http://myapp.com/oauth/auth',\n        );\n\n        if ($nbf) {\n            $params['nbf'] = $nbf;\n        }\n\n        if ($jti) {\n            $params['jti'] = $jti;\n        }\n\n        $jwtUtil = new Jwt();\n\n        return $jwtUtil->encode($params, $this->privateKey, 'RS256');\n    }\n\n    private function getTestServer($audience = 'http://myapp.com/oauth/auth')\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new JwtBearer($storage, $audience, new Jwt()));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/RefreshTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass RefreshTokenTest extends TestCase\n{\n    private $storage;\n\n    public function testNoRefreshToken()\n    {\n        $server = $this->getTestServer();\n        $server->addGrantType(new RefreshToken($this->storage));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token',  // valid grant type\n            'client_id'  => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret',  // valid client secret\n        ));\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Missing parameter: \"refresh_token\" is required');\n    }\n\n    public function testInvalidRefreshToken()\n    {\n        $server = $this->getTestServer();\n        $server->addGrantType(new RefreshToken($this->storage));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'fake-token', // invalid refresh token\n        ));\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid refresh token');\n    }\n\n    public function testValidRefreshTokenWithNewRefreshTokenInResponse()\n    {\n        $server = $this->getTestServer();\n        $server->addGrantType(new RefreshToken($this->storage, array('always_issue_new_refresh_token' => true)));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken', // valid refresh token\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n        $this->assertTrue(isset($token['refresh_token']), 'refresh token should always refresh');\n\n        $refresh_token = $this->storage->getRefreshToken($token['refresh_token']);\n        $this->assertNotNull($refresh_token);\n        $this->assertEquals($refresh_token['refresh_token'], $token['refresh_token']);\n        $this->assertEquals($refresh_token['client_id'], $request->request('client_id'));\n        $this->assertTrue($token['refresh_token'] != 'test-refreshtoken', 'the refresh token returned is not the one used');\n        $used_token = $this->storage->getRefreshToken('test-refreshtoken');\n        $this->assertFalse($used_token, 'the refresh token used is no longer valid');\n    }\n\n    public function testValidRefreshTokenDoesNotUnsetToken()\n    {\n        $server = $this->getTestServer();\n        $server->addGrantType(new RefreshToken($this->storage, array(\n            'always_issue_new_refresh_token' => true,\n            'unset_refresh_token_after_use'  => false,\n        )));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken', // valid refresh token\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n        $this->assertTrue(isset($token['refresh_token']), 'refresh token should always refresh');\n\n        $used_token = $this->storage->getRefreshToken('test-refreshtoken');\n        $this->assertNotNull($used_token, 'the refresh token used is still valid');\n    }\n\n    public function testValidRefreshTokenWithNoRefreshTokenInResponse()\n    {\n        $server = $this->getTestServer();\n        $server->addGrantType(new RefreshToken($this->storage, array('always_issue_new_refresh_token' => false)));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken', // valid refresh token\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n        $this->assertFalse(isset($token['refresh_token']), 'refresh token should not be returned');\n\n        $used_token = $this->storage->getRefreshToken('test-refreshtoken');\n        $this->assertNotNull($used_token, 'the refresh token used is still valid');\n    }\n\n    public function testValidRefreshTokenSameScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)\n            'scope'         => 'scope2 scope1',\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope2 scope1');\n    }\n\n    public function testValidRefreshTokenLessScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)\n            'scope'         => 'scope1',\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope1');\n    }\n\n    public function testValidRefreshTokenDifferentScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)\n            'scope'         => 'scope3',\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');\n    }\n\n    public function testValidRefreshTokenInvalidScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken-with-scope', // valid refresh token (with scope)\n            'scope'         => 'invalid-scope',\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'The scope requested is invalid for this request');\n    }\n\n    public function testValidClientDifferentRefreshToken()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'refresh_token', // valid grant type\n            'client_id'     => 'Test Some Other Client', // valid client id\n            'client_secret' => 'TestSecret3', // valid client secret\n            'refresh_token' => 'test-refreshtoken', // valid refresh token\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'refresh_token doesn\\'t exist or is invalid for the client');\n    }\n\n    private function getTestServer()\n    {\n        $this->storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($this->storage);\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/GrantType/UserCredentialsTest.php",
    "content": "<?php\n\nnamespace OAuth2\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass UserCredentialsTest extends TestCase\n{\n    public function testNoUsername()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'password' => 'testpass', // valid password\n        ));\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Missing parameters: \"username\" and \"password\" required');\n    }\n\n    public function testNoPassword()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'username' => 'test-username', // valid username\n        ));\n        $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'Missing parameters: \"username\" and \"password\" required');\n    }\n\n    public function testInvalidUsername()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'username' => 'fake-username', // valid username\n            'password' => 'testpass', // valid password\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 401);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid username and password combination');\n    }\n\n    public function testInvalidPassword()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'username' => 'test-username', // valid username\n            'password' => 'fakepass', // invalid password\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 401);\n        $this->assertEquals($response->getParameter('error'), 'invalid_grant');\n        $this->assertEquals($response->getParameter('error_description'), 'Invalid username and password combination');\n    }\n\n    public function testValidCredentials()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'username' => 'test-username', // valid username\n            'password' => 'testpass', // valid password\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n    }\n\n    public function testValidCredentialsWithScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'username' => 'test-username', // valid username\n            'password' => 'testpass', // valid password\n            'scope'    => 'scope1', // valid scope\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('scope', $token);\n        $this->assertEquals($token['scope'], 'scope1');\n    }\n\n    public function testValidCredentialsInvalidScope()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'username' => 'test-username', // valid username\n            'password' => 'testpass', // valid password\n            'scope'         => 'invalid-scope',\n        ));\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_scope');\n        $this->assertEquals($response->getParameter('error_description'), 'An unsupported scope was requested');\n    }\n\n    public function testNoSecretWithPublicClient()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID Empty Secret', // valid public client\n            'username' => 'test-username', // valid username\n            'password' => 'testpass', // valid password\n        ));\n\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n    }\n\n    public function testNoSecretWithConfidentialClient()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'password', // valid grant type\n            'client_id' => 'Test Client ID', // valid public client\n            'username' => 'test-username', // valid username\n            'password' => 'testpass', // valid password\n        ));\n\n        $token = $server->grantAccessToken($request, $response = new Response());\n\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_client');\n        $this->assertEquals($response->getParameter('error_description'), 'This client is invalid or must authenticate using a client secret');\n    }\n\n    private function getTestServer()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage);\n        $server->addGrantType(new UserCredentials($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/AuthorizeControllerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Controller;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass AuthorizeControllerTest extends TestCase\n{\n    public function testValidateAuthorizeRequest()\n    {\n        $server = $this->getTestServer();\n\n        $response = new Response();\n        $request = new Request(array(\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'id_token',\n            'state'         => 'af0ifjsldkj',\n            'nonce'         => 'n-0S6_WzA2Mj',\n        ));\n\n        // Test valid id_token request\n        $server->handleAuthorizeRequest($request, $response, true);\n\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['fragment'], $query);\n\n        $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());\n        $this->assertEquals($query['state'], 'af0ifjsldkj');\n\n        $this->assertArrayHasKey('id_token', $query);\n        $this->assertArrayHasKey('state', $query);\n        $this->assertArrayNotHasKey('access_token', $query);\n        $this->assertArrayNotHasKey('expires_in', $query);\n        $this->assertArrayNotHasKey('token_type', $query);\n\n        // Test valid token id_token request\n        $request->query['response_type'] = 'id_token token';\n        $server->handleAuthorizeRequest($request, $response, true);\n\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['fragment'], $query);\n\n        $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());\n        $this->assertEquals($query['state'], 'af0ifjsldkj');\n\n        $this->assertArrayHasKey('access_token', $query);\n        $this->assertArrayHasKey('expires_in', $query);\n        $this->assertArrayHasKey('token_type', $query);\n        $this->assertArrayHasKey('state', $query);\n        $this->assertArrayHasKey('id_token', $query);\n\n        // assert that with multiple-valued response types, order does not matter\n        $request->query['response_type'] = 'token id_token';\n        $server->handleAuthorizeRequest($request, $response, true);\n\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['fragment'], $query);\n\n        $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());\n        $this->assertEquals($query['state'], 'af0ifjsldkj');\n\n        $this->assertArrayHasKey('access_token', $query);\n        $this->assertArrayHasKey('expires_in', $query);\n        $this->assertArrayHasKey('token_type', $query);\n        $this->assertArrayHasKey('state', $query);\n        $this->assertArrayHasKey('id_token', $query);\n\n        // assert that with multiple-valued response types with extra spaces do not matter\n        $request->query['response_type'] = ' token  id_token ';\n        $server->handleAuthorizeRequest($request, $response, true);\n\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['fragment'], $query);\n\n        $this->assertEquals('n-0S6_WzA2Mj', $server->getAuthorizeController()->getNonce());\n        $this->assertEquals($query['state'], 'af0ifjsldkj');\n\n        $this->assertArrayHasKey('access_token', $query);\n        $this->assertArrayHasKey('expires_in', $query);\n        $this->assertArrayHasKey('token_type', $query);\n        $this->assertArrayHasKey('state', $query);\n        $this->assertArrayHasKey('id_token', $query);\n    }\n\n    public function testMissingNonce()\n    {\n        $server    = $this->getTestServer();\n        $authorize = $server->getAuthorizeController();\n\n        $response = new Response();\n        $request  = new Request(array(\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'id_token',\n            'state'         => 'xyz',\n        ));\n\n        // Test missing nonce for 'id_token' response type\n        $server->handleAuthorizeRequest($request, $response, true);\n        $params = $response->getParameters();\n\n        $this->assertEquals($params['error'], 'invalid_nonce');\n        $this->assertEquals($params['error_description'], 'This application requires you specify a nonce parameter');\n\n        // Test missing nonce for 'id_token token' response type\n        $request->query['response_type'] = 'id_token token';\n        $server->handleAuthorizeRequest($request, $response, true);\n        $params = $response->getParameters();\n\n        $this->assertEquals($params['error'], 'invalid_nonce');\n        $this->assertEquals($params['error_description'], 'This application requires you specify a nonce parameter');\n    }\n\n    public function testNotGrantedApplication()\n    {\n        $server = $this->getTestServer();\n\n        $response = new Response();\n        $request  = new Request(array(\n            'client_id'     => 'Test Client ID', // valid client id\n            'redirect_uri'  => 'http://adobe.com', // valid redirect URI\n            'response_type' => 'id_token',\n            'state'         => 'af0ifjsldkj',\n            'nonce'         => 'n-0S6_WzA2Mj',\n        ));\n\n        // Test not approved application\n        $server->handleAuthorizeRequest($request, $response, false);\n\n        $params = $response->getParameters();\n\n        $this->assertEquals($params['error'], 'consent_required');\n        $this->assertEquals($params['error_description'], 'The user denied access to your application');\n\n        // Test not approved application with prompt parameter\n        $request->query['prompt'] = 'none';\n        $server->handleAuthorizeRequest($request, $response, false);\n\n        $params = $response->getParameters();\n\n        $this->assertEquals($params['error'], 'login_required');\n        $this->assertEquals($params['error_description'], 'The user must log in');\n\n        // Test not approved application with user_id set\n        $request->query['prompt'] = 'none';\n        $server->handleAuthorizeRequest($request, $response, false, 'some-user-id');\n\n        $params = $response->getParameters();\n\n        $this->assertEquals($params['error'], 'interaction_required');\n        $this->assertEquals($params['error_description'], 'The user must grant access to your application');\n    }\n\n    public function testNeedsIdToken()\n    {\n        $server = $this->getTestServer();\n        $authorize = $server->getAuthorizeController();\n\n        $this->assertTrue($authorize->needsIdToken('openid'));\n        $this->assertTrue($authorize->needsIdToken('openid profile'));\n        $this->assertFalse($authorize->needsIdToken(''));\n        $this->assertFalse($authorize->needsIdToken('some-scope'));\n    }\n\n    private function getTestServer($config = array())\n    {\n        $config += array(\n            'use_openid_connect' => true,\n            'issuer'             => 'phpunit',\n            'allow_implicit'     => true\n        );\n\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server  = new Server($storage, $config);\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Controller/UserInfoControllerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Controller;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass UserInfoControllerTest extends TestCase\n{\n    public function testCreateController()\n    {\n        $tokenType = new \\OAuth2\\TokenType\\Bearer();\n        $storage = new \\OAuth2\\Storage\\Memory();\n        $controller = new UserInfoController($tokenType, $storage, $storage);\n\n        $response = new Response();\n        $controller->handleUserInfoRequest(new Request(), $response);\n        $this->assertEquals(401, $response->getStatusCode());\n    }\n\n    public function testValidToken()\n    {\n        $server = $this->getTestServer();\n        $request = Request::createFromGlobals();\n        $request->headers['AUTHORIZATION'] = 'Bearer accesstoken-openid-connect';\n        $response = new Response();\n\n        $server->handleUserInfoRequest($request, $response);\n        $parameters = $response->getParameters();\n        $this->assertEquals($parameters['sub'], 'testuser');\n        $this->assertEquals($parameters['email'], 'testuser@test.com');\n        $this->assertEquals($parameters['email_verified'], true);\n    }\n\n    private function getTestServer($config = array())\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, $config);\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/GrantType/AuthorizationCodeTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\GrantType;\n\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Server;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass AuthorizationCodeTest extends TestCase\n{\n    public function testValidCode()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-openid', // valid code\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('id_token', $token);\n        $this->assertEquals('test_id_token', $token['id_token']);\n\n        // this is only true if \"offline_access\" was requested\n        $this->assertFalse(isset($token['refresh_token']));\n    }\n\n    public function testOfflineAccess()\n    {\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'authorization_code', // valid grant type\n            'client_id'     => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'code'          => 'testcode-openid', // valid code\n            'scope'         => 'offline_access', // valid code\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('id_token', $token);\n        $this->assertEquals('test_id_token', $token['id_token']);\n        $this->assertTrue(isset($token['refresh_token']));\n    }\n\n    private function getTestServer()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, array('use_openid_connect' => true));\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/CodeIdTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\Server;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\GrantType\\ClientCredentials;\nuse PHPUnit\\Framework\\TestCase;\n\nclass CodeIdTokenTest extends TestCase\n{\n    public function testHandleAuthorizeRequest()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n\n        $request = new Request(array(\n            'response_type' => 'code id_token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid',\n            'state'         => 'test',\n            'nonce'         => 'test',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('query', $parts);\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['query'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('id_token', $params);\n        $this->assertArrayHasKey('code', $params);\n\n        // validate ID Token\n        $parts = explode('.', $params['id_token']);\n        foreach ($parts as &$part) {\n            // Each part is a base64url encoded json string.\n            $part = str_replace(array('-', '_'), array('+', '/'), $part);\n            $part = base64_decode($part);\n            $part = json_decode($part, true);\n        }\n        list($header, $claims, $signature) = $parts;\n\n        $this->assertArrayHasKey('iss', $claims);\n        $this->assertArrayHasKey('sub', $claims);\n        $this->assertArrayHasKey('aud', $claims);\n        $this->assertArrayHasKey('iat', $claims);\n        $this->assertArrayHasKey('exp', $claims);\n        $this->assertArrayHasKey('auth_time', $claims);\n        $this->assertArrayHasKey('nonce', $claims);\n\n        // only exists if an access token was granted along with the id_token\n        $this->assertArrayNotHasKey('at_hash', $claims);\n\n        $this->assertEquals($claims['iss'], 'test');\n        $this->assertEquals($claims['aud'], 'Test Client ID');\n        $this->assertEquals($claims['nonce'], 'test');\n        $duration = $claims['exp'] - $claims['iat'];\n        $this->assertEquals($duration, 3600);\n    }\n\n    public function testUserClaimsWithUserId()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n\n        $request = new Request(array(\n            'response_type' => 'code id_token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid email',\n            'state'         => 'test',\n            'nonce'         => 'test',\n        ));\n\n        $userId = 'testuser';\n        $server->handleAuthorizeRequest($request, $response = new Response(), true, $userId);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('query', $parts);\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['query'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('id_token', $params);\n        $this->assertArrayHasKey('code', $params);\n\n        // validate ID Token\n        $parts = explode('.', $params['id_token']);\n        foreach ($parts as &$part) {\n            // Each part is a base64url encoded json string.\n            $part = str_replace(array('-', '_'), array('+', '/'), $part);\n            $part = base64_decode($part);\n            $part = json_decode($part, true);\n        }\n        list($header, $claims, $signature) = $parts;\n\n        $this->assertArrayHasKey('email', $claims);\n        $this->assertArrayHasKey('email_verified', $claims);\n        $this->assertNotNull($claims['email']);\n        $this->assertNotNull($claims['email_verified']);\n    }\n\n    public function testUserClaimsWithoutUserId()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n\n        $request = new Request(array(\n            'response_type' => 'code id_token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid email',\n            'state'         => 'test',\n            'nonce'         => 'test',\n        ));\n\n        $userId = null;\n        $server->handleAuthorizeRequest($request, $response = new Response(), true, $userId);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('query', $parts);\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['query'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('id_token', $params);\n        $this->assertArrayHasKey('code', $params);\n\n        // validate ID Token\n        $parts = explode('.', $params['id_token']);\n        foreach ($parts as &$part) {\n            // Each part is a base64url encoded json string.\n            $part = str_replace(array('-', '_'), array('+', '/'), $part);\n            $part = base64_decode($part);\n            $part = json_decode($part, true);\n        }\n        list($header, $claims, $signature) = $parts;\n\n        $this->assertArrayNotHasKey('email', $claims);\n        $this->assertArrayNotHasKey('email_verified', $claims);\n    }\n\n    private function getTestServer($config = array())\n    {\n        $config += array(\n            'use_openid_connect' => true,\n            'issuer' => 'test',\n            'id_lifetime' => 3600,\n            'allow_implicit' => true,\n        );\n\n        $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();\n        $memoryStorage->supportedScopes[] = 'email';\n        $responseTypes = array(\n            'code'     => $code    = new AuthorizationCode($memoryStorage),\n            'id_token' => $idToken = new IdToken($memoryStorage, $memoryStorage, $config),\n            'code id_token' => new CodeIdToken($code, $idToken),\n        );\n\n        $server = new Server($memoryStorage, $config, array(), $responseTypes);\n        $server->addGrantType(new ClientCredentials($memoryStorage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\Server;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\GrantType\\ClientCredentials;\nuse OAuth2\\Encryption\\Jwt;\nuse PHPUnit\\Framework\\TestCase;\n\nclass IdTokenTest extends TestCase\n{\n    public function testValidateAuthorizeRequest()\n    {\n        $query = array(\n            'response_type' => 'id_token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid',\n            'state'         => 'test',\n        );\n\n        // attempt to do the request without a nonce.\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request($query);\n        $valid = $server->validateAuthorizeRequest($request, $response = new Response());\n\n        // Add a nonce and retry.\n        $query['nonce'] = 'test';\n        $request = new Request($query);\n        $valid = $server->validateAuthorizeRequest($request, $response = new Response());\n        $this->assertTrue($valid);\n    }\n\n    public function testHandleAuthorizeRequest()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'response_type' => 'id_token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid email',\n            'state'         => 'test',\n            'nonce'         => 'test',\n        ));\n\n        $user_id = 'testuser';\n        $server->handleAuthorizeRequest($request, $response = new Response(), true, $user_id);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('fragment', $parts);\n        $this->assertFalse(isset($parts['query']));\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['fragment'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('id_token', $params);\n        $this->assertArrayNotHasKey('access_token', $params);\n        $this->validateIdToken($params['id_token']);\n    }\n\n    public function testPassInAuthTime()\n    {\n        $server = $this->getTestServer(array('allow_implicit' => true));\n        $request = new Request(array(\n            'response_type' => 'id_token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid email',\n            'state'         => 'test',\n            'nonce'         => 'test',\n        ));\n\n        // test with a scalar user id\n        $user_id = 'testuser123';\n        $server->handleAuthorizeRequest($request, $response = new Response(), true, $user_id);\n\n        list($header, $payload, $signature) = $this->extractTokenDataFromResponse($response);\n\n        $this->assertTrue(is_array($payload));\n        $this->assertArrayHasKey('sub', $payload);\n        $this->assertEquals($user_id, $payload['sub']);\n        $this->assertArrayHasKey('auth_time', $payload);\n\n        // test with an array of user info\n        $userInfo = array(\n            'user_id' => 'testuser1234',\n            'auth_time' => date('Y-m-d H:i:s', strtotime('20 minutes ago')\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true, $userInfo);\n\n        list($header, $payload, $signature) = $this->extractTokenDataFromResponse($response);\n\n        $this->assertTrue(is_array($payload));\n        $this->assertArrayHasKey('sub', $payload);\n        $this->assertEquals($userInfo['user_id'], $payload['sub']);\n        $this->assertArrayHasKey('auth_time', $payload);\n        $this->assertEquals($userInfo['auth_time'], $payload['auth_time']);\n    }\n\n    private function extractTokenDataFromResponse(Response $response)\n    {\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('fragment', $parts);\n        $this->assertFalse(isset($parts['query']));\n\n        parse_str($parts['fragment'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('id_token', $params);\n        $this->assertArrayNotHasKey('access_token', $params);\n\n        list($headb64, $payloadb64, $signature) = explode('.', $params['id_token']);\n\n        $jwt = new Jwt();\n        $header = json_decode($jwt->urlSafeB64Decode($headb64), true);\n        $payload = json_decode($jwt->urlSafeB64Decode($payloadb64), true);\n\n        return array($header, $payload, $signature);\n    }\n\n    private function validateIdToken($id_token)\n    {\n        $parts = explode('.', $id_token);\n        foreach ($parts as &$part) {\n            // Each part is a base64url encoded json string.\n            $part = str_replace(array('-', '_'), array('+', '/'), $part);\n            $part = base64_decode($part);\n            $part = json_decode($part, true);\n        }\n        list($header, $claims, $signature) = $parts;\n\n        $this->assertArrayHasKey('iss', $claims);\n        $this->assertArrayHasKey('sub', $claims);\n        $this->assertArrayHasKey('aud', $claims);\n        $this->assertArrayHasKey('iat', $claims);\n        $this->assertArrayHasKey('exp', $claims);\n        $this->assertArrayHasKey('auth_time', $claims);\n        $this->assertArrayHasKey('nonce', $claims);\n        $this->assertArrayHasKey('email', $claims);\n        $this->assertArrayHasKey('email_verified', $claims);\n\n        $this->assertEquals($claims['iss'], 'test');\n        $this->assertEquals($claims['aud'], 'Test Client ID');\n        $this->assertEquals($claims['nonce'], 'test');\n        $this->assertEquals($claims['email'], 'testuser@test.com');\n        $duration = $claims['exp'] - $claims['iat'];\n        $this->assertEquals($duration, 3600);\n    }\n\n    private function getTestServer($config = array())\n    {\n        $config += array(\n            'use_openid_connect' => true,\n            'issuer' => 'test',\n            'id_lifetime' => 3600,\n        );\n\n        $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();\n        $memoryStorage->supportedScopes[] = 'email';\n        $storage = array(\n            'client' => $memoryStorage,\n            'scope' => $memoryStorage,\n        );\n        $responseTypes = array(\n            'id_token' => new IdToken($memoryStorage, $memoryStorage, $config),\n        );\n\n        $server = new Server($storage, $config, array(), $responseTypes);\n        $server->addGrantType(new ClientCredentials($memoryStorage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/ResponseType/IdTokenTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\ResponseType;\n\nuse OAuth2\\Server;\nuse OAuth2\\Request;\nuse OAuth2\\Response;\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\GrantType\\ClientCredentials;\nuse OAuth2\\ResponseType\\AccessToken;\nuse PHPUnit\\Framework\\TestCase;\n\nclass IdTokenTokenTest extends TestCase\n{\n\n    public function testHandleAuthorizeRequest()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer(array('allow_implicit' => true));\n\n        $request = new Request(array(\n            'response_type' => 'id_token token',\n            'redirect_uri'  => 'http://adobe.com',\n            'client_id'     => 'Test Client ID',\n            'scope'         => 'openid',\n            'state'         => 'test',\n            'nonce'         => 'test',\n        ));\n\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        $this->assertEquals($response->getStatusCode(), 302);\n        $location = $response->getHttpHeader('Location');\n        $this->assertNotContains('error', $location);\n\n        $parts = parse_url($location);\n        $this->assertArrayHasKey('fragment', $parts);\n        $this->assertFalse(isset($parts['query']));\n\n        // assert fragment is in \"application/x-www-form-urlencoded\" format\n        parse_str($parts['fragment'], $params);\n        $this->assertNotNull($params);\n        $this->assertArrayHasKey('id_token', $params);\n        $this->assertArrayHasKey('access_token', $params);\n\n        // validate ID Token\n        $parts = explode('.', $params['id_token']);\n        foreach ($parts as &$part) {\n            // Each part is a base64url encoded json string.\n            $part = str_replace(array('-', '_'), array('+', '/'), $part);\n            $part = base64_decode($part);\n            $part = json_decode($part, true);\n        }\n        list($header, $claims, $signature) = $parts;\n\n        $this->assertArrayHasKey('iss', $claims);\n        $this->assertArrayHasKey('sub', $claims);\n        $this->assertArrayHasKey('aud', $claims);\n        $this->assertArrayHasKey('iat', $claims);\n        $this->assertArrayHasKey('exp', $claims);\n        $this->assertArrayHasKey('auth_time', $claims);\n        $this->assertArrayHasKey('nonce', $claims);\n        $this->assertArrayHasKey('at_hash', $claims);\n\n        $this->assertEquals($claims['iss'], 'test');\n        $this->assertEquals($claims['aud'], 'Test Client ID');\n        $this->assertEquals($claims['nonce'], 'test');\n        $duration = $claims['exp'] - $claims['iat'];\n        $this->assertEquals($duration, 3600);\n    }\n\n    private function getTestServer($config = array())\n    {\n        $config += array(\n            'use_openid_connect' => true,\n            'issuer' => 'test',\n            'id_lifetime' => 3600,\n        );\n\n        $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();\n        $responseTypes = array(\n            'token'     => $token   = new AccessToken($memoryStorage, $memoryStorage),\n            'id_token'  => $idToken = new IdToken($memoryStorage, $memoryStorage, $config),\n            'id_token token' => new IdTokenToken($token, $idToken),\n        );\n\n        $server = new Server($memoryStorage, $config, array(), $responseTypes);\n        $server->addGrantType(new ClientCredentials($memoryStorage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/AuthorizationCodeTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Storage;\n\nuse OAuth2\\Storage\\BaseTest;\nuse OAuth2\\Storage\\NullStorage;\n\nclass AuthorizationCodeTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testCreateAuthorizationCode($storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        if (!$storage instanceof AuthorizationCodeInterface) {\n            return;\n        }\n\n        // assert code we are about to add does not exist\n        $code = $storage->getAuthorizationCode('new-openid-code');\n        $this->assertFalse($code);\n\n        // add new code\n        $expires = time() + 20;\n        $scope = null;\n        $id_token = 'fake_id_token';\n        $success = $storage->setAuthorizationCode('new-openid-code', 'client ID', 'SOMEUSERID', 'http://example.com', $expires, $scope, $id_token);\n        $this->assertTrue($success);\n\n        $code = $storage->getAuthorizationCode('new-openid-code');\n        $this->assertNotNull($code);\n        $this->assertArrayHasKey('authorization_code', $code);\n        $this->assertArrayHasKey('client_id', $code);\n        $this->assertArrayHasKey('user_id', $code);\n        $this->assertArrayHasKey('redirect_uri', $code);\n        $this->assertArrayHasKey('expires', $code);\n        $this->assertEquals($code['authorization_code'], 'new-openid-code');\n        $this->assertEquals($code['client_id'], 'client ID');\n        $this->assertEquals($code['user_id'], 'SOMEUSERID');\n        $this->assertEquals($code['redirect_uri'], 'http://example.com');\n        $this->assertEquals($code['expires'], $expires);\n        $this->assertEquals($code['id_token'], $id_token);\n\n        // change existing code\n        $expires = time() + 42;\n        $new_id_token = 'fake_id_token-2';\n        $success = $storage->setAuthorizationCode('new-openid-code', 'client ID2', 'SOMEOTHERID', 'http://example.org', $expires, $scope, $new_id_token);\n        $this->assertTrue($success);\n\n        $code = $storage->getAuthorizationCode('new-openid-code');\n        $this->assertNotNull($code);\n        $this->assertArrayHasKey('authorization_code', $code);\n        $this->assertArrayHasKey('client_id', $code);\n        $this->assertArrayHasKey('user_id', $code);\n        $this->assertArrayHasKey('redirect_uri', $code);\n        $this->assertArrayHasKey('expires', $code);\n        $this->assertEquals($code['authorization_code'], 'new-openid-code');\n        $this->assertEquals($code['client_id'], 'client ID2');\n        $this->assertEquals($code['user_id'], 'SOMEOTHERID');\n        $this->assertEquals($code['redirect_uri'], 'http://example.org');\n        $this->assertEquals($code['expires'], $expires);\n        $this->assertEquals($code['id_token'], $new_id_token);\n    }\n\n        /** @dataProvider provideStorage */\n    public function testRemoveIdTokenFromAuthorizationCode($storage)\n    {\n        // add new code\n        $expires = time() + 20;\n        $scope = null;\n        $id_token = 'fake_id_token_to_remove';\n        $authcode = 'new-openid-code-'.rand();\n        $success = $storage->setAuthorizationCode($authcode, 'client ID', 'SOMEUSERID', 'http://example.com', $expires, $scope, $id_token);\n        $this->assertTrue($success);\n\n        // verify params were set\n        $code = $storage->getAuthorizationCode($authcode);\n        $this->assertNotNull($code);\n        $this->assertArrayHasKey('id_token', $code);\n        $this->assertEquals($code['id_token'], $id_token);\n\n        // remove the id_token\n        $success = $storage->setAuthorizationCode($authcode, 'client ID', 'SOMEUSERID', 'http://example.com', $expires, $scope, null);\n\n        // verify the \"id_token\" is now null\n        $code = $storage->getAuthorizationCode($authcode);\n        $this->assertNotNull($code);\n        $this->assertArrayHasKey('id_token', $code);\n        $this->assertEquals($code['id_token'], null);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/OpenID/Storage/UserClaimsTest.php",
    "content": "<?php\n\nnamespace OAuth2\\OpenID\\Storage;\n\nuse OAuth2\\Storage\\BaseTest;\nuse OAuth2\\Storage\\NullStorage;\n\nclass UserClaimsTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testGetUserClaims($storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        if (!$storage instanceof UserClaimsInterface) {\n            // incompatible storage\n            return;\n        }\n\n        // invalid user\n        $claims = $storage->getUserClaims('fake-user', '');\n        $this->assertFalse($claims);\n\n        // valid user (no scope)\n        $claims = $storage->getUserClaims('testuser', '');\n\n        /* assert the decoded token is the same */\n        $this->assertFalse(isset($claims['email']));\n\n        // valid user\n        $claims = $storage->getUserClaims('testuser', 'email');\n\n        /* assert the decoded token is the same */\n        $this->assertEquals($claims['email'], \"testuser@test.com\");\n        $this->assertEquals($claims['email_verified'], true);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/RequestTest.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\GrantType\\AuthorizationCode;\nuse PHPUnit\\Framework\\TestCase;\n\nclass RequestTest extends TestCase\n{\n    public function testRequestOverride()\n    {\n        $request = new TestRequest();\n        $server = $this->getTestServer();\n\n        // Smoke test for override request class\n        // $server->handleTokenRequest($request, $response = new Response());\n        // $this->assertInstanceOf('Response', $response);\n        // $server->handleAuthorizeRequest($request, $response = new Response(), true);\n        // $this->assertInstanceOf('Response', $response);\n        // $response = $server->verifyResourceRequest($request, $response = new Response());\n        // $this->assertTrue(is_bool($response));\n\n        /*** make some valid requests ***/\n\n        // Valid Token Request\n        $request->setPost(array(\n            'grant_type' => 'authorization_code',\n            'client_id'  => 'Test Client ID',\n            'client_secret' => 'TestSecret',\n            'code' => 'testcode',\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertEquals($response->getStatusCode(), 200);\n        $this->assertNull($response->getParameter('error'));\n        $this->assertNotNUll($response->getParameter('access_token'));\n    }\n\n    public function testHeadersReturnsValueByKey()\n    {\n        $request = new Request(\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array('AUTHORIZATION' => 'Basic secret')\n        );\n\n        $this->assertEquals('Basic secret', $request->headers('AUTHORIZATION'));\n    }\n\n    public function testHeadersReturnsDefaultIfHeaderNotPresent()\n    {\n        $request = new Request();\n\n        $this->assertEquals('Bearer', $request->headers('AUTHORIZATION', 'Bearer'));\n    }\n\n    public function testHeadersIsCaseInsensitive()\n    {\n        $request = new Request(\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array('AUTHORIZATION' => 'Basic secret')\n        );\n\n        $this->assertEquals('Basic secret', $request->headers('Authorization'));\n    }\n\n    public function testRequestReturnsPostParamIfNoQueryParamAvailable()\n    {\n        $request = new Request(\n            array(),\n            array('client_id' => 'correct')\n        );\n\n        $this->assertEquals('correct', $request->query('client_id', $request->request('client_id')));\n    }\n\n    public function testRequestHasHeadersAndServerHeaders()\n    {\n        $request = new Request(\n            array(),\n            array(),\n            array(),\n            array(),\n            array(),\n            array('CONTENT_TYPE' => 'text/xml', 'PHP_AUTH_USER' => 'client_id', 'PHP_AUTH_PW' => 'client_pass'),\n            null,\n            array('CONTENT_TYPE' => 'application/json')\n        );\n\n        $this->assertSame('client_id', $request->headers('PHP_AUTH_USER'));\n        $this->assertSame('client_pass', $request->headers('PHP_AUTH_PW'));\n        $this->assertSame('application/json', $request->headers('CONTENT_TYPE'));\n    }\n\n    private function getTestServer($config = array())\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, $config);\n\n        // Add the two types supported for authorization grant\n        $server->addGrantType(new AuthorizationCode($storage));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseTest.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass ResponseTest extends TestCase\n{\n    public function testRenderAsXml()\n    {\n        $response = new Response(array(\n            'foo' => 'bar',\n            'halland' => 'oates',\n        ));\n\n        $string = $response->getResponseBody('xml');\n        $this->assertContains('<response><foo>bar</foo><halland>oates</halland></response>', $string);\n    }\n\n    public function testSetRedirect()\n    {\n        $response = new Response();\n        $url = 'https://foo/bar';\n        $state = 'stateparam';\n        $response->setRedirect(301, $url, $state);\n        $this->assertEquals(\n            sprintf('%s?state=%s', $url, $state),\n            $response->getHttpHeader('Location')\n        );\n\n        $query = 'query=foo';\n        $response->setRedirect(301, $url . '?' . $query, $state);\n        $this->assertEquals(\n            sprintf('%s?%s&state=%s', $url, $query, $state),\n            $response->getHttpHeader('Location')\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/AccessTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\nuse OAuth2\\Server;\nuse OAuth2\\Storage\\Memory;\nuse PHPUnit\\Framework\\TestCase;\n\nclass AccessTokenTest extends TestCase\n{\n    public function testRevokeAccessTokenWithTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'access_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));\n        $accessToken = new AccessToken($tokenStorage);\n        $accessToken->revokeToken('revoke', 'access_token');\n        $this->assertFalse($tokenStorage->getAccessToken('revoke'));\n    }\n\n    public function testRevokeAccessTokenWithoutTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'access_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));\n        $accessToken = new AccessToken($tokenStorage);\n        $accessToken->revokeToken('revoke');\n        $this->assertFalse($tokenStorage->getAccessToken('revoke'));\n    }\n\n    public function testRevokeRefreshTokenWithTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'refresh_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getRefreshToken('revoke'));\n        $accessToken = new AccessToken(new Memory, $tokenStorage);\n        $accessToken->revokeToken('revoke', 'refresh_token');\n        $this->assertFalse($tokenStorage->getRefreshToken('revoke'));\n    }\n\n    public function testRevokeRefreshTokenWithoutTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'refresh_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getRefreshToken('revoke'));\n        $accessToken = new AccessToken(new Memory, $tokenStorage);\n        $accessToken->revokeToken('revoke');\n        $this->assertFalse($tokenStorage->getRefreshToken('revoke'));\n    }\n\n    public function testRevokeAccessTokenWithRefreshTokenTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'access_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));\n        $accessToken = new AccessToken($tokenStorage);\n        $accessToken->revokeToken('revoke', 'refresh_token');\n        $this->assertFalse($tokenStorage->getAccessToken('revoke'));\n    }\n\n    public function testRevokeAccessTokenWithBogusTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'access_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getAccessToken('revoke'));\n        $accessToken = new AccessToken($tokenStorage);\n        $accessToken->revokeToken('revoke', 'foo');\n        $this->assertFalse($tokenStorage->getAccessToken('revoke'));\n    }\n\n    public function testRevokeRefreshTokenWithBogusTypeHint()\n    {\n        $tokenStorage = new Memory(array(\n            'refresh_tokens' => array(\n                'revoke' => array('mytoken'),\n            ),\n        ));\n\n        $this->assertEquals(array('mytoken'), $tokenStorage->getRefreshToken('revoke'));\n        $accessToken = new AccessToken(new Memory, $tokenStorage);\n        $accessToken->revokeToken('revoke', 'foo');\n        $this->assertFalse($tokenStorage->getRefreshToken('revoke'));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ResponseType/JwtAccessTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\ResponseType;\n\nuse OAuth2\\Server;\nuse OAuth2\\Response;\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Storage\\Bootstrap;\nuse OAuth2\\Storage\\JwtAccessToken as JwtAccessTokenStorage;\nuse OAuth2\\GrantType\\ClientCredentials;\nuse OAuth2\\GrantType\\UserCredentials;\nuse OAuth2\\GrantType\\RefreshToken;\nuse OAuth2\\Encryption\\Jwt;\nuse PHPUnit\\Framework\\TestCase;\n\nclass JwtAccessTokenTest extends TestCase\n{\n    public function testCreateAccessToken()\n    {\n        $server = $this->getTestServer();\n        $jwtResponseType = $server->getResponseType('token');\n\n        $accessToken = $jwtResponseType->createAccessToken('Test Client ID', 123, 'test', false);\n        $jwt = new Jwt;\n        $decodedAccessToken = $jwt->decode($accessToken['access_token'], null, false);\n\n        $this->assertArrayHasKey('id', $decodedAccessToken);\n        $this->assertArrayHasKey('jti', $decodedAccessToken);\n        $this->assertArrayHasKey('iss', $decodedAccessToken);\n        $this->assertArrayHasKey('aud', $decodedAccessToken);\n        $this->assertArrayHasKey('exp', $decodedAccessToken);\n        $this->assertArrayHasKey('iat', $decodedAccessToken);\n        $this->assertArrayHasKey('token_type', $decodedAccessToken);\n        $this->assertArrayHasKey('scope', $decodedAccessToken);\n\n        $this->assertEquals('https://api.example.com', $decodedAccessToken['iss']);\n        $this->assertEquals('Test Client ID', $decodedAccessToken['aud']);\n        $this->assertEquals(123, $decodedAccessToken['sub']);\n        $delta = $decodedAccessToken['exp'] - $decodedAccessToken['iat'];\n        $this->assertEquals(3600, $delta);\n        $this->assertEquals($decodedAccessToken['id'], $decodedAccessToken['jti']);\n    }\n    \n    public function testExtraPayloadCallback()\n    {\n        $jwtconfig = array('jwt_extra_payload_callable' => function() {\n            return array('custom_param' => 'custom_value');\n        });\n        \n        $server = $this->getTestServer($jwtconfig);\n        $jwtResponseType = $server->getResponseType('token');\n        \n        $accessToken = $jwtResponseType->createAccessToken('Test Client ID', 123, 'test', false);\n        $jwt = new Jwt;\n        $decodedAccessToken = $jwt->decode($accessToken['access_token'], null, false);\n        \n        $this->assertArrayHasKey('custom_param', $decodedAccessToken);\n        $this->assertEquals('custom_value', $decodedAccessToken['custom_param']);\n    }\n\n    public function testGrantJwtAccessToken()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'client_credentials', // valid grant type\n            'client_id'     => 'Test Client ID',     // valid client id\n            'client_secret' => 'TestSecret',         // valid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n\n        $this->assertNotNull($response->getParameter('access_token'));\n        $this->assertEquals(2, substr_count($response->getParameter('access_token'), '.'));\n    }\n\n    public function testAccessResourceWithJwtAccessToken()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'client_credentials', // valid grant type\n            'client_id'     => 'Test Client ID',     // valid client id\n            'client_secret' => 'TestSecret',         // valid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertNotNull($JwtAccessToken = $response->getParameter('access_token'));\n\n        // make a call to the resource server using the crypto token\n        $request = TestRequest::createPost(array(\n            'access_token' => $JwtAccessToken,\n        ));\n\n        $this->assertTrue($server->verifyResourceRequest($request));\n    }\n\n    public function testAccessResourceWithJwtAccessTokenUsingSecondaryStorage()\n    {\n        // add the test parameters in memory\n        $server = $this->getTestServer();\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'client_credentials', // valid grant type\n            'client_id'     => 'Test Client ID',     // valid client id\n            'client_secret' => 'TestSecret',         // valid client secret\n        ));\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertNotNull($JwtAccessToken = $response->getParameter('access_token'));\n\n        // make a call to the resource server using the crypto token\n        $request = TestRequest::createPost(array(\n            'access_token' => $JwtAccessToken,\n        ));\n\n        // create a resource server with the \"memory\" storage from the grant server\n        $resourceServer = new Server($server->getStorage('client_credentials'));\n\n        $this->assertTrue($resourceServer->verifyResourceRequest($request));\n    }\n\n    public function testJwtAccessTokenWithRefreshToken()\n    {\n        $server = $this->getTestServer();\n\n        // add \"UserCredentials\" grant type and \"JwtAccessToken\" response type\n        // and ensure \"JwtAccessToken\" response type has \"RefreshToken\" storage\n        $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();\n        $server->addGrantType(new UserCredentials($memoryStorage));\n        $server->addGrantType(new RefreshToken($memoryStorage));\n        $server->addResponseType(new JwtAccessToken($memoryStorage, $memoryStorage, $memoryStorage), 'token');\n\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'password',         // valid grant type\n            'client_id'     => 'Test Client ID',   // valid client id\n            'client_secret' => 'TestSecret',       // valid client secret\n            'username'      => 'test-username',    // valid username\n            'password'      => 'testpass',         // valid password\n        ));\n\n        // make the call to grant a crypto token\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertNotNull($JwtAccessToken = $response->getParameter('access_token'));\n        $this->assertNotNull($refreshToken = $response->getParameter('refresh_token'));\n\n        // decode token and make sure refresh_token isn't set\n        list($header, $payload, $signature) = explode('.', $JwtAccessToken);\n        $decodedToken = json_decode(base64_decode($payload), true);\n        $this->assertFalse(array_key_exists('refresh_token', $decodedToken));\n\n        // use the refresh token to get another access token\n        $request = TestRequest::createPost(array(\n            'grant_type'    => 'refresh_token',\n            'client_id'     => 'Test Client ID',   // valid client id\n            'client_secret' => 'TestSecret',       // valid client secret\n            'refresh_token' => $refreshToken,\n        ));\n\n        $server->handleTokenRequest($request, $response = new Response());\n        $this->assertNotNull($response->getParameter('access_token'));\n    }\n\n    private function getTestServer($jwtconfig = array())\n    {\n        $memoryStorage = Bootstrap::getInstance()->getMemoryStorage();\n\n        $storage = array(\n            'access_token' => new JwtAccessTokenStorage($memoryStorage),\n            'client' => $memoryStorage,\n            'client_credentials' => $memoryStorage,\n        );\n        $server = new Server($storage);\n        $server->addGrantType(new ClientCredentials($memoryStorage));\n\n        // make the \"token\" response type a JwtAccessToken\n        $config = array_merge(array('issuer' => 'https://api.example.com'), $jwtconfig);\n        $server->addResponseType(new JwtAccessToken($memoryStorage, $memoryStorage, null, $config));\n\n        return $server;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ScopeTest.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse OAuth2\\Storage\\Memory;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ScopeTest extends TestCase\n{\n    public function testCheckScope()\n    {\n        $scopeUtil = new Scope();\n\n        $this->assertFalse($scopeUtil->checkScope('invalid', 'list of scopes'));\n        $this->assertTrue($scopeUtil->checkScope('valid', 'valid and-some other-scopes'));\n        $this->assertTrue($scopeUtil->checkScope('valid another-valid', 'valid another-valid and-some other-scopes'));\n        // all scopes must match\n        $this->assertFalse($scopeUtil->checkScope('valid invalid', 'valid and-some other-scopes'));\n        $this->assertFalse($scopeUtil->checkScope('valid valid2 invalid', 'valid valid2 and-some other-scopes'));\n    }\n\n    public function testScopeStorage()\n    {\n        $scopeUtil = new Scope();\n        $this->assertEquals($scopeUtil->getDefaultScope(), null);\n\n        $scopeUtil = new Scope(array(\n            'default_scope' => 'default',\n            'supported_scopes' => array('this', 'that', 'another'),\n        ));\n        $this->assertEquals($scopeUtil->getDefaultScope(), 'default');\n        $this->assertTrue($scopeUtil->scopeExists('this that another', 'client_id'));\n\n        $memoryStorage = new Memory(array(\n            'default_scope' => 'base',\n            'supported_scopes' => array('only-this-one'),\n        ));\n        $scopeUtil = new Scope($memoryStorage);\n\n        $this->assertEquals($scopeUtil->getDefaultScope(), 'base');\n        $this->assertTrue($scopeUtil->scopeExists('only-this-one', 'client_id'));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/ServerTest.php",
    "content": "<?php\n\nnamespace OAuth2;\n\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\ResponseType\\AuthorizationCode;\nuse OAuth2\\Storage\\Bootstrap;\nuse PHPUnit\\Framework\\TestCase;\n\nclass ServerTest extends TestCase\n{\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\ClientInterface\n     **/\n    public function testGetAuthorizeControllerWithNoClientStorageThrowsException()\n    {\n        // must set Client Storage\n        $server = new Server();\n        $server->getAuthorizeController();\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\AccessTokenInterface\n     **/\n    public function testGetAuthorizeControllerWithNoAccessTokenStorageThrowsException()\n    {\n        // must set AccessToken or AuthorizationCode\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientInterface'));\n        $server->getAuthorizeController();\n    }\n\n    public function testGetAuthorizeControllerWithClientStorageAndAccessTokenResponseType()\n    {\n        // must set AccessToken or AuthorizationCode\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientInterface'));\n        $server->addResponseType($this->getMock('OAuth2\\ResponseType\\AccessTokenInterface'));\n\n        $this->assertNotNull($server->getAuthorizeController());\n    }\n\n    public function testGetAuthorizeControllerWithClientStorageAndAuthorizationCodeResponseType()\n    {\n        // must set AccessToken or AuthorizationCode\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientInterface'));\n        $server->addResponseType($this->getMock('OAuth2\\ResponseType\\AuthorizationCodeInterface'));\n\n        $this->assertNotNull($server->getAuthorizeController());\n    }\n\n    /**\n     * @expectedException LogicException allow_implicit\n     **/\n    public function testGetAuthorizeControllerWithClientStorageAndAccessTokenStorageThrowsException()\n    {\n        // must set AuthorizationCode or AccessToken / implicit\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'));\n\n        $this->assertNotNull($server->getAuthorizeController());\n    }\n\n    public function testGetAuthorizeControllerWithClientStorageAndAccessTokenStorage()\n    {\n        // must set AuthorizationCode or AccessToken / implicit\n        $server = new Server(array(), array('allow_implicit' => true));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'));\n\n        $this->assertNotNull($server->getAuthorizeController());\n    }\n\n    public function testGetAuthorizeControllerWithClientStorageAndAuthorizationCodeStorage()\n    {\n        // must set AccessToken or AuthorizationCode\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AuthorizationCodeInterface'));\n\n        $this->assertNotNull($server->getAuthorizeController());\n    }\n\n    /**\n     * @expectedException LogicException grant_types\n     **/\n    public function testGetTokenControllerWithGrantTypeStorageThrowsException()\n    {\n        $server = new Server();\n        $server->getTokenController();\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\ClientCredentialsInterface\n     **/\n    public function testGetTokenControllerWithNoClientCredentialsStorageThrowsException()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\UserCredentialsInterface'));\n        $server->getTokenController();\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\AccessTokenInterface\n     **/\n    public function testGetTokenControllerWithNoAccessTokenStorageThrowsException()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientCredentialsInterface'));\n        $server->getTokenController();\n    }\n\n    public function testGetTokenControllerWithAccessTokenAndClientCredentialsStorage()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientCredentialsInterface'));\n        $server->getTokenController();\n    }\n\n    public function testGetTokenControllerAccessTokenStorageAndClientCredentialsStorageAndGrantTypes()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientCredentialsInterface'));\n        $server->addGrantType($this->getMockBuilder('OAuth2\\GrantType\\AuthorizationCode')->disableOriginalConstructor()->getMock());\n        $server->getTokenController();\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\AccessTokenInterface\n     **/\n    public function testGetResourceControllerWithNoAccessTokenStorageThrowsException()\n    {\n        $server = new Server();\n        $server->getResourceController();\n    }\n\n    public function testGetResourceControllerWithAccessTokenStorage()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'));\n        $server->getResourceController();\n    }\n\n    /**\n     * @expectedException InvalidArgumentException OAuth2\\Storage\\AccessTokenInterface\n     **/\n    public function testAddingStorageWithInvalidClass()\n    {\n        $server = new Server();\n        $server->addStorage(new \\StdClass());\n    }\n\n    /**\n     * @expectedException InvalidArgumentException access_token\n     **/\n    public function testAddingStorageWithInvalidKey()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'), 'nonexistant_storage');\n    }\n\n    /**\n     * @expectedException InvalidArgumentException OAuth2\\Storage\\AuthorizationCodeInterface\n     **/\n    public function testAddingStorageWithInvalidKeyStorageCombination()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\AccessTokenInterface'), 'authorization_code');\n    }\n\n    public function testAddingStorageWithValidKeyOnlySetsThatKey()\n    {\n        $server = new Server();\n        $server->addStorage($this->getMock('OAuth2\\Storage\\Memory'), 'access_token');\n\n        $reflection = new \\ReflectionClass($server);\n        $prop = $reflection->getProperty('storages');\n        $prop->setAccessible(true);\n\n        $storages = $prop->getValue($server); // get the private \"storages\" property\n\n        $this->assertEquals(1, count($storages));\n        $this->assertTrue(isset($storages['access_token']));\n        $this->assertFalse(isset($storages['authorization_code']));\n    }\n\n    public function testAddingClientStorageSetsClientCredentialsStorageByDefault()\n    {\n        $server = new Server();\n        $memory = $this->getMock('OAuth2\\Storage\\Memory');\n        $server->addStorage($memory, 'client');\n\n        $client_credentials = $server->getStorage('client_credentials');\n\n        $this->assertNotNull($client_credentials);\n        $this->assertEquals($client_credentials, $memory);\n    }\n\n    public function testAddStorageWithNullValue()\n    {\n        $memory = $this->getMock('OAuth2\\Storage\\Memory');\n        $server = new Server($memory);\n        $server->addStorage(null, 'refresh_token');\n\n        $client_credentials = $server->getStorage('client_credentials');\n\n        $this->assertNotNull($client_credentials);\n        $this->assertEquals($client_credentials, $memory);\n\n        $refresh_token = $server->getStorage('refresh_token');\n\n        $this->assertNull($refresh_token);\n    }\n\n    public function testNewServerWithNullStorageValue()\n    {\n        $memory = $this->getMock('OAuth2\\Storage\\Memory');\n        $server = new Server(array(\n            'client_credentials' => $memory,\n            'refresh_token'      => null,\n        ));\n\n        $client_credentials = $server->getStorage('client_credentials');\n\n        $this->assertNotNull($client_credentials);\n        $this->assertEquals($client_credentials, $memory);\n\n        $refresh_token = $server->getStorage('refresh_token');\n\n        $this->assertNull($refresh_token);\n    }\n\n    public function testAddingClientCredentialsStorageSetsClientStorageByDefault()\n    {\n        $server = new Server();\n        $memory = $this->getMock('OAuth2\\Storage\\Memory');\n        $server->addStorage($memory, 'client_credentials');\n\n        $client = $server->getStorage('client');\n\n        $this->assertNotNull($client);\n        $this->assertEquals($client, $memory);\n    }\n\n    public function testSettingClientStorageByDefaultDoesNotOverrideSetStorage()\n    {\n        $server = new Server();\n        $pdo = $this->getMockBuilder('OAuth2\\Storage\\Pdo')\n            ->disableOriginalConstructor()->getMock();\n\n        $memory = $this->getMock('OAuth2\\Storage\\Memory');\n\n        $server->addStorage($pdo, 'client');\n        $server->addStorage($memory, 'client_credentials');\n\n        $client = $server->getStorage('client');\n        $client_credentials = $server->getStorage('client_credentials');\n\n        $this->assertEquals($client, $pdo);\n        $this->assertEquals($client_credentials, $memory);\n    }\n\n    public function testAddingResponseType()\n    {\n        $storage = $this->getMock('OAuth2\\Storage\\Memory');\n        $storage\n          ->expects($this->any())\n          ->method('getClientDetails')\n          ->will($this->returnValue(array('client_id' => 'some_client')));\n        $storage\n          ->expects($this->any())\n          ->method('checkRestrictedGrantType')\n          ->will($this->returnValue(true));\n\n        // add with the \"code\" key explicitly set\n        $codeType = new AuthorizationCode($storage);\n        $server = new Server();\n        $server->addStorage($storage);\n        $server->addResponseType($codeType);\n        $request = new Request(array(\n            'response_type' => 'code',\n            'client_id' => 'some_client',\n            'redirect_uri' => 'http://example.com',\n            'state' => 'xyx',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        // the response is successful\n        $this->assertEquals($response->getStatusCode(), 302);\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['query'], $query);\n        $this->assertTrue(isset($query['code']));\n        $this->assertFalse(isset($query['error']));\n\n        // add with the \"code\" key not set\n        $codeType = new AuthorizationCode($storage);\n        $server = new Server(array($storage), array(), array(), array($codeType));\n        $request = new Request(array(\n            'response_type' => 'code',\n            'client_id' => 'some_client',\n            'redirect_uri' => 'http://example.com',\n            'state' => 'xyx',\n        ));\n        $server->handleAuthorizeRequest($request, $response = new Response(), true);\n\n        // the response is successful\n        $this->assertEquals($response->getStatusCode(), 302);\n        $parts = parse_url($response->getHttpHeader('Location'));\n        parse_str($parts['query'], $query);\n        $this->assertTrue(isset($query['code']));\n        $this->assertFalse(isset($query['error']));\n    }\n\n    public function testCustomClientAssertionType()\n    {\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'authorization_code',\n            'client_id' =>'Test Client ID',\n            'code' => 'testcode',\n        ));\n        // verify the mock clientAssertionType was called as expected\n        $clientAssertionType = $this->getMock('OAuth2\\ClientAssertionType\\ClientAssertionTypeInterface', array('validateRequest', 'getClientId'));\n        $clientAssertionType\n            ->expects($this->once())\n            ->method('validateRequest')\n            ->will($this->returnValue(true));\n        $clientAssertionType\n            ->expects($this->once())\n            ->method('getClientId')\n            ->will($this->returnValue('Test Client ID'));\n\n        // create mock storage\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server(array($storage), array(), array(), array(), null, null, $clientAssertionType);\n        $server->handleTokenRequest($request, $response = new Response());\n    }\n\n    public function testHttpBasicConfig()\n    {\n        // create mock storage\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server(array($storage), array(\n            'allow_credentials_in_request_body' => false,\n            'allow_public_clients' => false\n        ));\n        $server->getTokenController();\n        $httpBasic = $server->getClientAssertionType();\n\n        $reflection = new \\ReflectionClass($httpBasic);\n        $prop = $reflection->getProperty('config');\n        $prop->setAccessible(true);\n\n        $config = $prop->getValue($httpBasic); // get the private \"config\" property\n\n        $this->assertEquals($config['allow_credentials_in_request_body'], false);\n        $this->assertEquals($config['allow_public_clients'], false);\n    }\n\n    public function testRefreshTokenConfig()\n    {\n        // create mock storage\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server1 = new Server(array($storage));\n        $server2 = new Server(array($storage), array('always_issue_new_refresh_token' => true, 'unset_refresh_token_after_use' => false));\n\n        $server1->getTokenController();\n        $refreshToken1 = $server1->getGrantType('refresh_token');\n\n        $server2->getTokenController();\n        $refreshToken2 = $server2->getGrantType('refresh_token');\n\n        $reflection1 = new \\ReflectionClass($refreshToken1);\n        $prop1 = $reflection1->getProperty('config');\n        $prop1->setAccessible(true);\n\n        $reflection2 = new \\ReflectionClass($refreshToken2);\n        $prop2 = $reflection2->getProperty('config');\n        $prop2->setAccessible(true);\n\n        // get the private \"config\" property\n        $config1 = $prop1->getValue($refreshToken1);\n        $config2 = $prop2->getValue($refreshToken2);\n\n        $this->assertEquals($config1['always_issue_new_refresh_token'], false);\n        $this->assertEquals($config2['always_issue_new_refresh_token'], true);\n\n        $this->assertEquals($config1['unset_refresh_token_after_use'], true);\n        $this->assertEquals($config2['unset_refresh_token_after_use'], false);\n    }\n\n    /**\n     * Test setting \"always_issue_new_refresh_token\" on a server level\n     *\n     * @see test/OAuth2/GrantType/RefreshTokenTest::testValidRefreshTokenWithNewRefreshTokenInResponse\n     **/\n    public function testValidRefreshTokenWithNewRefreshTokenInResponse()\n    {\n        $storage = Bootstrap::getInstance()->getMemoryStorage();\n        $server = new Server($storage, array('always_issue_new_refresh_token' => true));\n\n        $request = TestRequest::createPost(array(\n            'grant_type' => 'refresh_token', // valid grant type\n            'client_id' => 'Test Client ID', // valid client id\n            'client_secret' => 'TestSecret', // valid client secret\n            'refresh_token' => 'test-refreshtoken', // valid refresh token\n        ));\n        $token = $server->grantAccessToken($request, new Response());\n        $this->assertTrue(isset($token['refresh_token']), 'refresh token should always refresh');\n\n        $refresh_token = $storage->getRefreshToken($token['refresh_token']);\n        $this->assertNotNull($refresh_token);\n        $this->assertEquals($refresh_token['refresh_token'], $token['refresh_token']);\n        $this->assertEquals($refresh_token['client_id'], $request->request('client_id'));\n        $this->assertTrue($token['refresh_token'] != 'test-refreshtoken', 'the refresh token returned is not the one used');\n        $used_token = $storage->getRefreshToken('test-refreshtoken');\n        $this->assertFalse($used_token, 'the refresh token used is no longer valid');\n    }\n\n    /**\n     * @expectedException InvalidArgumentException OAuth2\\ResponseType\\AuthorizationCodeInterface\n     **/\n    public function testAddingUnknownResponseTypeThrowsException()\n    {\n        $server = new Server();\n        $server->addResponseType($this->getMock('OAuth2\\ResponseType\\ResponseTypeInterface'));\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\PublicKeyInterface\n     **/\n    public function testUsingJwtAccessTokensWithoutPublicKeyStorageThrowsException()\n    {\n        $server = new Server(array(), array('use_jwt_access_tokens' => true));\n        $server->addGrantType($this->getMock('OAuth2\\GrantType\\GrantTypeInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientCredentialsInterface'));\n        $server->addStorage($this->getMock('OAuth2\\Storage\\ClientCredentialsInterface'));\n\n        $server->getTokenController();\n    }\n\n    public function testUsingJustJwtAccessTokenStorageWithResourceControllerIsOkay()\n    {\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($pubkey), array('use_jwt_access_tokens' => true));\n\n        $this->assertNotNull($server->getResourceController());\n        $this->assertInstanceOf('OAuth2\\Storage\\PublicKeyInterface', $server->getStorage('public_key'));\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\Storage\\ClientInterface\n     **/\n    public function testUsingJustJwtAccessTokenStorageWithAuthorizeControllerThrowsException()\n    {\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($pubkey), array('use_jwt_access_tokens' => true));\n        $this->assertNotNull($server->getAuthorizeController());\n    }\n\n    /**\n     * @expectedException LogicException grant_types\n     **/\n    public function testUsingJustJwtAccessTokenStorageWithTokenControllerThrowsException()\n    {\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($pubkey), array('use_jwt_access_tokens' => true));\n        $server->getTokenController();\n    }\n\n    public function testUsingJwtAccessTokenAndClientStorageWithAuthorizeControllerIsOkay()\n    {\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $server = new Server(array($pubkey, $client), array('use_jwt_access_tokens' => true, 'allow_implicit' => true));\n        $this->assertNotNull($server->getAuthorizeController());\n\n        $this->assertInstanceOf('OAuth2\\ResponseType\\JwtAccessToken', $server->getResponseType('token'));\n    }\n\n    /**\n     * @expectedException LogicException UserClaims\n     **/\n    public function testUsingOpenIDConnectWithoutUserClaimsThrowsException()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $server = new Server($client, array('use_openid_connect' => true));\n\n        $server->getAuthorizeController();\n    }\n\n    /**\n     * @expectedException LogicException PublicKeyInterface\n     **/\n    public function testUsingOpenIDConnectWithoutPublicKeyThrowsException()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OPenID\\Storage\\UserClaimsInterface');\n        $server = new Server(array($client, $userclaims), array('use_openid_connect' => true));\n\n        $server->getAuthorizeController();\n    }\n\n    /**\n     * @expectedException LogicException issuer\n     **/\n    public function testUsingOpenIDConnectWithoutIssuerThrowsException()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($client, $userclaims, $pubkey), array('use_openid_connect' => true));\n\n        $server->getAuthorizeController();\n    }\n\n    public function testUsingOpenIDConnectWithIssuerPublicKeyAndUserClaimsIsOkay()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($client, $userclaims, $pubkey), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy',\n        ));\n\n        $server->getAuthorizeController();\n\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenInterface', $server->getResponseType('id_token'));\n        $this->assertNull($server->getResponseType('id_token token'));\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\ResponseType\\AccessTokenInterface\n     **/\n    public function testUsingOpenIDConnectWithAllowImplicitWithoutTokenStorageThrowsException()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($client, $userclaims, $pubkey), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy',\n            'allow_implicit' => true,\n        ));\n\n        $server->getAuthorizeController();\n    }\n\n    public function testUsingOpenIDConnectWithAllowImplicitAndUseJwtAccessTokensIsOkay()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $server = new Server(array($client, $userclaims, $pubkey), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy',\n            'allow_implicit' => true,\n            'use_jwt_access_tokens' => true,\n        ));\n\n        $server->getAuthorizeController();\n\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenInterface', $server->getResponseType('id_token'));\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenTokenInterface', $server->getResponseType('id_token token'));\n    }\n\n    public function testUsingOpenIDConnectWithAllowImplicitAndAccessTokenStorageIsOkay()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $token = $this->getMock('OAuth2\\Storage\\AccessTokenInterface');\n        $server = new Server(array($client, $userclaims, $pubkey, $token), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy',\n            'allow_implicit' => true,\n        ));\n\n        $server->getAuthorizeController();\n\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenInterface', $server->getResponseType('id_token'));\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenTokenInterface', $server->getResponseType('id_token token'));\n    }\n\n    public function testUsingOpenIDConnectWithAllowImplicitAndAccessTokenResponseTypeIsOkay()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        // $token = $this->getMock('OAuth2\\Storage\\AccessTokenInterface');\n        $server = new Server(array($client, $userclaims, $pubkey), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy',\n            'allow_implicit' => true,\n        ));\n\n        $token = $this->getMock('OAuth2\\ResponseType\\AccessTokenInterface');\n        $server->addResponseType($token, 'token');\n\n        $server->getAuthorizeController();\n\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenInterface', $server->getResponseType('id_token'));\n        $this->assertInstanceOf('OAuth2\\OpenID\\ResponseType\\IdTokenTokenInterface', $server->getResponseType('id_token token'));\n    }\n\n    /**\n     * @expectedException LogicException OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface\n     **/\n    public function testUsingOpenIDConnectWithAuthorizationCodeStorageThrowsException()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientCredentialsInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $token = $this->getMock('OAuth2\\Storage\\AccessTokenInterface');\n        $authcode = $this->getMock('OAuth2\\Storage\\AuthorizationCodeInterface');\n\n        $server = new Server(array($client, $userclaims, $pubkey, $token, $authcode), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy'\n        ));\n\n        $server->getTokenController();\n\n        $this->assertInstanceOf('OAuth2\\OpenID\\GrantType\\AuthorizationCode', $server->getGrantType('authorization_code'));\n    }\n\n    public function testUsingOpenIDConnectWithOpenIDAuthorizationCodeStorageCreatesOpenIDAuthorizationCodeGrantType()\n    {\n        $client = $this->getMock('OAuth2\\Storage\\ClientCredentialsInterface');\n        $userclaims = $this->getMock('OAuth2\\OpenID\\Storage\\UserClaimsInterface');\n        $pubkey = $this->getMock('OAuth2\\Storage\\PublicKeyInterface');\n        $token = $this->getMock('OAuth2\\Storage\\AccessTokenInterface');\n        $authcode = $this->getMock('OAuth2\\OpenID\\Storage\\AuthorizationCodeInterface');\n\n        $server = new Server(array($client, $userclaims, $pubkey, $token, $authcode), array(\n            'use_openid_connect' => true,\n            'issuer' => 'someguy'\n        ));\n\n        $server->getTokenController();\n\n        $this->assertInstanceOf('OAuth2\\OpenID\\GrantType\\AuthorizationCode', $server->getGrantType('authorization_code'));\n    }\n\n    public function testMultipleValuedResponseTypeOrderDoesntMatter()\n    {\n        $responseType = $this->getMock('OAuth2\\OpenID\\ResponseType\\IdTokenTokenInterface');\n        $server = new Server(array(), array(), array(), array(\n            'token id_token' => $responseType,\n        ));\n\n        $this->assertEquals($responseType, $server->getResponseType('id_token token'));\n    }\n\n    public function testAddGrantTypeWithoutKey()\n    {\n        $server = new Server();\n        $server->addGrantType(new \\OAuth2\\GrantType\\AuthorizationCode($this->getMock('OAuth2\\Storage\\AuthorizationCodeInterface')));\n\n        $grantTypes = $server->getGrantTypes();\n        $this->assertEquals('authorization_code', key($grantTypes));\n    }\n\n    public function testAddGrantTypeWithKey()\n    {\n        $server = new Server();\n        $server->addGrantType(new \\OAuth2\\GrantType\\AuthorizationCode($this->getMock('OAuth2\\Storage\\AuthorizationCodeInterface')), 'ac');\n\n        $grantTypes = $server->getGrantTypes();\n        $this->assertEquals('ac', key($grantTypes));\n    }\n\n    public function testAddGrantTypeWithKeyNotString()\n    {\n        $server = new Server();\n        $server->addGrantType(new \\OAuth2\\GrantType\\AuthorizationCode($this->getMock('OAuth2\\Storage\\AuthorizationCodeInterface')), 42);\n\n        $grantTypes = $server->getGrantTypes();\n        $this->assertEquals('authorization_code', key($grantTypes));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AccessTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass AccessTokenTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testSetAccessToken(AccessTokenInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // assert token we are about to add does not exist\n        $token = $storage->getAccessToken('newtoken');\n        $this->assertFalse($token);\n\n        // add new token\n        $expires = time() + 20;\n        $success = $storage->setAccessToken('newtoken', 'client ID', 'SOMEUSERID', $expires);\n        $this->assertTrue($success);\n\n        $token = $storage->getAccessToken('newtoken');\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('client_id', $token);\n        $this->assertArrayHasKey('user_id', $token);\n        $this->assertArrayHasKey('expires', $token);\n        $this->assertEquals($token['access_token'], 'newtoken');\n        $this->assertEquals($token['client_id'], 'client ID');\n        $this->assertEquals($token['user_id'], 'SOMEUSERID');\n        $this->assertEquals($token['expires'], $expires);\n\n        // change existing token\n        $expires = time() + 42;\n        $success = $storage->setAccessToken('newtoken', 'client ID2', 'SOMEOTHERID', $expires);\n        $this->assertTrue($success);\n\n        $token = $storage->getAccessToken('newtoken');\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('access_token', $token);\n        $this->assertArrayHasKey('client_id', $token);\n        $this->assertArrayHasKey('user_id', $token);\n        $this->assertArrayHasKey('expires', $token);\n        $this->assertEquals($token['access_token'], 'newtoken');\n        $this->assertEquals($token['client_id'], 'client ID2');\n        $this->assertEquals($token['user_id'], 'SOMEOTHERID');\n        $this->assertEquals($token['expires'], $expires);\n\n        // add token with scope having an empty string value\n        $expires = time() + 42;\n        $success = $storage->setAccessToken('newtoken', 'client ID', 'SOMEOTHERID', $expires, '');\n        $this->assertTrue($success);\n    }\n\n    /** @dataProvider provideStorage */\n    public function testUnsetAccessToken(AccessTokenInterface $storage)\n    {\n        if ($storage instanceof NullStorage || !method_exists($storage, 'unsetAccessToken')) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // assert token we are about to unset does not exist\n        $token = $storage->getAccessToken('revokabletoken');\n        $this->assertFalse($token);\n\n        // add new token\n        $expires = time() + 20;\n        $success = $storage->setAccessToken('revokabletoken', 'client ID', 'SOMEUSERID', $expires);\n        $this->assertTrue($success);\n\n        // assert unsetAccessToken returns true\n        $result = $storage->unsetAccessToken('revokabletoken');\n        $this->assertTrue($result);\n\n        // assert token we unset does not exist\n        $token = $storage->getAccessToken('revokabletoken');\n        $this->assertFalse($token);\n    }\n\n    /** @dataProvider provideStorage */\n    public function testUnsetAccessTokenReturnsFalse(AccessTokenInterface $storage)\n    {\n        if ($storage instanceof NullStorage || !method_exists($storage, 'unsetAccessToken')) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // assert token we are about to unset does not exist\n        $token = $storage->getAccessToken('nonexistanttoken');\n        $this->assertFalse($token);\n\n        // assert unsetAccessToken returns false\n        $result = $storage->unsetAccessToken('nonexistanttoken');\n        $this->assertFalse($result);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/AuthorizationCodeTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass AuthorizationCodeTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testGetAuthorizationCode(AuthorizationCodeInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // nonexistant client_id\n        $details = $storage->getAuthorizationCode('faketoken');\n        $this->assertFalse($details);\n\n        // valid client_id\n        $details = $storage->getAuthorizationCode('testtoken');\n        $this->assertNotNull($details);\n    }\n\n    /** @dataProvider provideStorage */\n    public function testSetAuthorizationCode(AuthorizationCodeInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // assert code we are about to add does not exist\n        $code = $storage->getAuthorizationCode('newcode');\n        $this->assertFalse($code);\n\n        // add new code\n        $expires = time() + 20;\n        $success = $storage->setAuthorizationCode('newcode', 'client ID', 'SOMEUSERID', 'http://example.com', $expires);\n        $this->assertTrue($success);\n\n        $code = $storage->getAuthorizationCode('newcode');\n        $this->assertNotNull($code);\n        $this->assertArrayHasKey('authorization_code', $code);\n        $this->assertArrayHasKey('client_id', $code);\n        $this->assertArrayHasKey('user_id', $code);\n        $this->assertArrayHasKey('redirect_uri', $code);\n        $this->assertArrayHasKey('expires', $code);\n        $this->assertEquals($code['authorization_code'], 'newcode');\n        $this->assertEquals($code['client_id'], 'client ID');\n        $this->assertEquals($code['user_id'], 'SOMEUSERID');\n        $this->assertEquals($code['redirect_uri'], 'http://example.com');\n        $this->assertEquals($code['expires'], $expires);\n\n        // change existing code\n        $expires = time() + 42;\n        $success = $storage->setAuthorizationCode('newcode', 'client ID2', 'SOMEOTHERID', 'http://example.org', $expires);\n        $this->assertTrue($success);\n\n        $code = $storage->getAuthorizationCode('newcode');\n        $this->assertNotNull($code);\n        $this->assertArrayHasKey('authorization_code', $code);\n        $this->assertArrayHasKey('client_id', $code);\n        $this->assertArrayHasKey('user_id', $code);\n        $this->assertArrayHasKey('redirect_uri', $code);\n        $this->assertArrayHasKey('expires', $code);\n        $this->assertEquals($code['authorization_code'], 'newcode');\n        $this->assertEquals($code['client_id'], 'client ID2');\n        $this->assertEquals($code['user_id'], 'SOMEOTHERID');\n        $this->assertEquals($code['redirect_uri'], 'http://example.org');\n        $this->assertEquals($code['expires'], $expires);\n\n        // add new code with scope having an empty string value\n        $expires = time() + 20;\n        $success = $storage->setAuthorizationCode('newcode', 'client ID', 'SOMEUSERID', 'http://example.com', $expires, '');\n        $this->assertTrue($success);\n    }\n\n        /** @dataProvider provideStorage */\n    public function testExpireAccessToken(AccessTokenInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // create a valid code\n        $expires = time() + 20;\n        $success = $storage->setAuthorizationCode('code-to-expire', 'client ID', 'SOMEUSERID', 'http://example.com', time() + 20);\n        $this->assertTrue($success);\n\n        // verify the new code exists\n        $code = $storage->getAuthorizationCode('code-to-expire');\n        $this->assertNotNull($code);\n\n        $this->assertArrayHasKey('authorization_code', $code);\n        $this->assertEquals($code['authorization_code'], 'code-to-expire');\n\n        // now expire the code and ensure it's no longer available\n        $storage->expireAuthorizationCode('code-to-expire');\n        $code = $storage->getAuthorizationCode('code-to-expire');\n        $this->assertFalse($code);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientCredentialsTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass ClientCredentialsTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testCheckClientCredentials(ClientCredentialsInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // nonexistant client_id\n        $pass = $storage->checkClientCredentials('fakeclient', 'testpass');\n        $this->assertFalse($pass);\n\n        // invalid password\n        $pass = $storage->checkClientCredentials('oauth_test_client', 'invalidcredentials');\n        $this->assertFalse($pass);\n\n        // valid credentials\n        $pass = $storage->checkClientCredentials('oauth_test_client', 'testpass');\n        $this->assertTrue($pass);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ClientTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass ClientTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testGetClientDetails(ClientInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // nonexistant client_id\n        $details = $storage->getClientDetails('fakeclient');\n        $this->assertFalse($details);\n\n        // valid client_id\n        $details = $storage->getClientDetails('oauth_test_client');\n        $this->assertNotNull($details);\n        $this->assertArrayHasKey('client_id', $details);\n        $this->assertArrayHasKey('client_secret', $details);\n        $this->assertArrayHasKey('redirect_uri', $details);\n    }\n\n    /** @dataProvider provideStorage */\n    public function testCheckRestrictedGrantType(ClientInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // Check invalid\n        $pass = $storage->checkRestrictedGrantType('oauth_test_client', 'authorization_code');\n        $this->assertFalse($pass);\n\n        // Check valid\n        $pass = $storage->checkRestrictedGrantType('oauth_test_client', 'implicit');\n        $this->assertTrue($pass);\n    }\n\n    /** @dataProvider provideStorage */\n    public function testGetAccessToken(ClientInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // nonexistant client_id\n        $details = $storage->getAccessToken('faketoken');\n        $this->assertFalse($details);\n\n        // valid client_id\n        $details = $storage->getAccessToken('testtoken');\n        $this->assertNotNull($details);\n    }\n\n    /** @dataProvider provideStorage */\n    public function testIsPublicClient(ClientInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        $publicClientId = 'public-client-'.rand();\n        $confidentialClientId = 'confidential-client-'.rand();\n\n        // create a new client\n        $success1 = $storage->setClientDetails($publicClientId, '');\n        $success2 = $storage->setClientDetails($confidentialClientId, 'some-secret');\n        $this->assertTrue($success1);\n        $this->assertTrue($success2);\n\n        // assert isPublicClient for both\n        $this->assertTrue($storage->isPublicClient($publicClientId));\n        $this->assertFalse($storage->isPublicClient($confidentialClientId));\n    }\n\n    /** @dataProvider provideStorage */\n    public function testSaveClient(ClientInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        $clientId = 'some-client-'.rand();\n\n        // create a new client\n        $success = $storage->setClientDetails($clientId, 'somesecret', 'http://test.com', 'client_credentials', 'clientscope1', 'brent@brentertainment.com');\n        $this->assertTrue($success);\n\n        // valid client_id\n        $details = $storage->getClientDetails($clientId);\n        $this->assertEquals($details['client_secret'], 'somesecret');\n        $this->assertEquals($details['redirect_uri'], 'http://test.com');\n        $this->assertEquals($details['grant_types'], 'client_credentials');\n        $this->assertEquals($details['scope'], 'clientscope1');\n        $this->assertEquals($details['user_id'], 'brent@brentertainment.com');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/DynamoDBTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass DynamoDBTest extends BaseTest\n{\n    public function testGetDefaultScope()\n    {\n        $client = $this->getMockBuilder('\\Aws\\DynamoDb\\DynamoDbClient')\n            ->disableOriginalConstructor()\n            ->setMethods(array('query'))\n            ->getMock();\n\n        $return = $this->getMockBuilder('\\Guzzle\\Service\\Resource\\Model')\n            ->setMethods(array('count', 'toArray'))\n            ->getMock();\n\n        $data = array(\n            'Items' => array(),\n            'Count' => 0,\n            'ScannedCount'=> 0\n        );\n\n        $return->expects($this->once())\n            ->method('count')\n            ->will($this->returnValue(count($data)));\n\n        $return->expects($this->once())\n            ->method('toArray')\n            ->will($this->returnValue($data));\n\n        // should return null default scope if none is set in database\n        $client->expects($this->once())\n            ->method('query')\n            ->will($this->returnValue($return));\n\n        $storage = new DynamoDB($client);\n        $this->assertNull($storage->getDefaultScope());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtAccessTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\Encryption\\Jwt;\n\nclass JwtAccessTokenTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testSetAccessToken($storage)\n    {\n        if (!$storage instanceof PublicKey) {\n            // incompatible storage\n            return;\n        }\n\n        $crypto = new jwtAccessToken($storage);\n\n        $publicKeyStorage = Bootstrap::getInstance()->getMemoryStorage();\n        $encryptionUtil = new Jwt();\n\n        $jwtAccessToken = array(\n            'access_token' => rand(),\n            'expires' => time() + 100,\n            'scope'   => 'foo',\n        );\n\n        $token = $encryptionUtil->encode($jwtAccessToken, $storage->getPrivateKey(), $storage->getEncryptionAlgorithm());\n\n        $this->assertNotNull($token);\n\n        $tokenData = $crypto->getAccessToken($token);\n\n        $this->assertTrue(is_array($tokenData));\n\n        /* assert the decoded token is the same */\n        $this->assertEquals($tokenData['access_token'], $jwtAccessToken['access_token']);\n        $this->assertEquals($tokenData['expires'], $jwtAccessToken['expires']);\n        $this->assertEquals($tokenData['scope'], $jwtAccessToken['scope']);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/JwtBearerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass JwtBearerTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testGetClientKey(JwtBearerInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // nonexistant client_id\n        $key = $storage->getClientKey('this-is-not-real', 'nor-is-this');\n        $this->assertFalse($key);\n\n        // valid client_id and subject\n        $key = $storage->getClientKey('oauth_test_client', 'test_subject');\n        $this->assertNotNull($key);\n        $this->assertEquals($key, Bootstrap::getInstance()->getTestPublicKey());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PdoTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass PdoTest extends BaseTest\n{\n    public function testCreatePdoStorageUsingPdoClass()\n    {\n        $dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());\n        $pdo = new \\PDO($dsn);\n        $storage = new Pdo($pdo);\n\n        $this->assertNotNull($storage->getClientDetails('oauth_test_client'));\n    }\n\n    public function testCreatePdoStorageUsingDSN()\n    {\n        $dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());\n        $storage = new Pdo($dsn);\n\n        $this->assertNotNull($storage->getClientDetails('oauth_test_client'));\n    }\n\n    public function testCreatePdoStorageUsingConfig()\n    {\n        $dsn = sprintf('sqlite:%s', Bootstrap::getInstance()->getSqliteDir());\n        $config = array('dsn' => $dsn);\n        $storage = new Pdo($config);\n\n        $this->assertNotNull($storage->getClientDetails('oauth_test_client'));\n    }\n\n    /**\n     * @expectedException InvalidArgumentException dsn\n     */\n    public function testCreatePdoStorageWithoutDSNThrowsException()\n    {\n        $config = array('username' => 'brent', 'password' => 'brentisaballer');\n        $storage = new Pdo($config);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/PublicKeyTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass PublicKeyTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testSetAccessToken($storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        if (!$storage instanceof PublicKeyInterface) {\n            // incompatible storage\n            return;\n        }\n\n        $configDir = Bootstrap::getInstance()->getConfigDir();\n        $globalPublicKey  = file_get_contents($configDir.'/keys/id_rsa.pub');\n        $globalPrivateKey = file_get_contents($configDir.'/keys/id_rsa');\n\n        /* assert values from storage */\n        $this->assertEquals($storage->getPublicKey(), $globalPublicKey);\n        $this->assertEquals($storage->getPrivateKey(), $globalPrivateKey);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/RefreshTokenTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass RefreshTokenTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testSetRefreshToken(RefreshTokenInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // assert token we are about to add does not exist\n        $token = $storage->getRefreshToken('refreshtoken');\n        $this->assertFalse($token);\n\n        // add new token\n        $expires = time() + 20;\n        $success = $storage->setRefreshToken('refreshtoken', 'client ID', 'SOMEUSERID', $expires);\n        $this->assertTrue($success);\n\n        $token = $storage->getRefreshToken('refreshtoken');\n        $this->assertNotNull($token);\n        $this->assertArrayHasKey('refresh_token', $token);\n        $this->assertArrayHasKey('client_id', $token);\n        $this->assertArrayHasKey('user_id', $token);\n        $this->assertArrayHasKey('expires', $token);\n        $this->assertEquals($token['refresh_token'], 'refreshtoken');\n        $this->assertEquals($token['client_id'], 'client ID');\n        $this->assertEquals($token['user_id'], 'SOMEUSERID');\n        $this->assertEquals($token['expires'], $expires);\n\n        // add token with scope having an empty string value\n        $expires = time() + 20;\n        $success = $storage->setRefreshToken('refreshtoken2', 'client ID', 'SOMEUSERID', $expires, '');\n        $this->assertTrue($success);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/ScopeTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse OAuth2\\Scope;\n\nclass ScopeTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testScopeExists($storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        if (!$storage instanceof ScopeInterface) {\n            // incompatible storage\n            return;\n        }\n\n        //Test getting scopes\n        $scopeUtil = new Scope($storage);\n        $this->assertTrue($scopeUtil->scopeExists('supportedscope1'));\n        $this->assertTrue($scopeUtil->scopeExists('supportedscope1 supportedscope2 supportedscope3'));\n        $this->assertFalse($scopeUtil->scopeExists('fakescope'));\n        $this->assertFalse($scopeUtil->scopeExists('supportedscope1 supportedscope2 supportedscope3 fakescope'));\n    }\n\n    /** @dataProvider provideStorage */\n    public function testGetDefaultScope($storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        if (!$storage instanceof ScopeInterface) {\n            // incompatible storage\n            return;\n        }\n\n        // test getting default scope\n        $scopeUtil = new Scope($storage);\n        $expected = explode(' ', $scopeUtil->getDefaultScope());\n        $actual = explode(' ', 'defaultscope1 defaultscope2');\n        sort($expected);\n        sort($actual);\n        $this->assertEquals($expected, $actual);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/Storage/UserCredentialsTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass UserCredentialsTest extends BaseTest\n{\n    /** @dataProvider provideStorage */\n    public function testCheckUserCredentials(UserCredentialsInterface $storage)\n    {\n        if ($storage instanceof NullStorage) {\n            $this->markTestSkipped('Skipped Storage: ' . $storage->getMessage());\n\n            return;\n        }\n\n        // create a new user for testing\n        $success = $storage->setUser('testusername', 'testpass', 'Test', 'User');\n        $this->assertTrue($success);\n\n        // correct credentials\n        $this->assertTrue($storage->checkUserCredentials('testusername', 'testpass'));\n        // invalid password\n        $this->assertFalse($storage->checkUserCredentials('testusername', 'fakepass'));\n        // invalid username\n        $this->assertFalse($storage->checkUserCredentials('fakeusername', 'testpass'));\n\n        // invalid username\n        $this->assertFalse($storage->getUserDetails('fakeusername'));\n\n        // ensure all properties are set\n        $user = $storage->getUserDetails('testusername');\n        $this->assertTrue($user !== false);\n        $this->assertArrayHasKey('user_id', $user);\n        $this->assertArrayHasKey('first_name', $user);\n        $this->assertArrayHasKey('last_name', $user);\n        $this->assertEquals($user['user_id'], 'testusername');\n        $this->assertEquals($user['first_name'], 'Test');\n        $this->assertEquals($user['last_name'], 'User');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/OAuth2/TokenType/BearerTest.php",
    "content": "<?php\n\nnamespace OAuth2\\TokenType;\n\nuse OAuth2\\Request\\TestRequest;\nuse OAuth2\\Response;\nuse PHPUnit\\Framework\\TestCase;\n\nclass BearerTest extends TestCase\n{\n    public function testValidContentTypeWithCharset()\n    {\n        $bearer = new Bearer();\n        $request = TestRequest::createPost(array(\n            'access_token' => 'ThisIsMyAccessToken'\n        ));\n        $request->server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n\n        $param = $bearer->getAccessTokenParameter($request, $response = new Response());\n        $this->assertEquals($param, 'ThisIsMyAccessToken');\n    }\n\n    public function testInvalidContentType()\n    {\n        $bearer = new Bearer();\n        $request = TestRequest::createPost(array(\n            'access_token' => 'ThisIsMyAccessToken'\n        ));\n        $request->server['CONTENT_TYPE'] = 'application/json; charset=UTF-8';\n\n        $param = $bearer->getAccessTokenParameter($request, $response = new Response());\n        $this->assertNull($param);\n        $this->assertEquals($response->getStatusCode(), 400);\n        $this->assertEquals($response->getParameter('error'), 'invalid_request');\n        $this->assertEquals($response->getParameter('error_description'), 'The content type for POST requests must be \"application/x-www-form-urlencoded\"');\n    }\n\n    public function testValidRequestUsingAuthorizationHeader()\n    {\n        $bearer = new Bearer();\n        $request = new TestRequest();\n        $request->headers['AUTHORIZATION'] = 'Bearer MyToken';\n        $request->server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n\n        $param = $bearer->getAccessTokenParameter($request, $response = new Response());\n        $this->assertEquals('MyToken', $param);\n    }\n\n    public function testValidRequestUsingAuthorizationHeaderCaseInsensitive()\n    {\n        $bearer = new Bearer();\n        $request = new TestRequest();\n        $request->server['CONTENT_TYPE'] = 'application/x-www-form-urlencoded; charset=UTF-8';\n        $request->headers['Authorization'] = 'Bearer MyToken';\n\n        $param = $bearer->getAccessTokenParameter($request, $response = new Response());\n        $this->assertEquals('MyToken', $param);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/bootstrap.php",
    "content": "<?php\n\nrequire_once(dirname(__FILE__).'/../src/OAuth2/Autoloader.php');\nOAuth2\\Autoloader::register();\n\n// register test classes\nOAuth2\\Autoloader::register(dirname(__FILE__).'/lib');\n\n// register vendors if possible\nif (file_exists(__DIR__.'/../vendor/autoload.php')) {\n    require_once(__DIR__.'/../vendor/autoload.php');\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/cleanup.php",
    "content": "<?php\n\nrequire_once(dirname(__FILE__).'/../src/OAuth2/Autoloader.php');\nOAuth2\\Autoloader::register();\n\n// register test classes\nOAuth2\\Autoloader::register(dirname(__FILE__).'/lib');\n\n// register vendors if possible\nif (file_exists(__DIR__.'/../vendor/autoload.php')) {\n    require_once(__DIR__.'/../vendor/autoload.php');\n}\n\n// remove the dynamoDB database that was created for this build\nOAuth2\\Storage\\Bootstrap::getInstance()->cleanupTravisDynamoDb();\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa",
    "content": "-----BEGIN RSA PRIVATE KEY-----\nMIICXQIBAAKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLsNjP+uAt2eO0cc5J9H5XV\n8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdwizIum8j0KzpsGYH5qReN\nQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJuBe+FQpZTs8DewwIDAQAB\nAoGARfNxNknmtx/n1bskZ/01iZRzAge6BLEE0LV6Q4gS7mkRZu/Oyiv39Sl5vUlA\n+WdGxLjkBwKNjxGN8Vxw9/ASd8rSsqeAUYIwAeifXrHhj5DBPQT/pDPkeFnp9B1w\nC6jo+3AbBQ4/b0ONSIEnCL2xGGglSIAxO17T1ViXp7lzXPECQQDe63nkRdWM0OCb\noaHQPT3E26224maIstrGFUdt9yw3yJf4bOF7TtiPLlLuHsTTge3z+fG6ntC0xG56\n1cl37C3ZAkEA2HdVcRGugNp/qmVz4LJTpD+WZKi73PLAO47wDOrYh9Pn2I6fcEH0\nCPnggt1ko4ujvGzFTvRH64HXa6aPCv1j+wJBAMQMah3VQPNf/DlDVFEUmw9XeBZg\nVHaifX851aEjgXLp6qVj9IYCmLiLsAmVa9rr6P7p8asD418nZlaHUHE0eDkCQQCr\nuxis6GMx1Ka971jcJX2X696LoxXPd0KsvXySMupv79yagKPa8mgBiwPjrnK+EPVo\ncj6iochA/bSCshP/mwFrAkBHEKPi6V6gb94JinCT7x3weahbdp6bJ6/nzBH/p9VA\nHoT1JtwNFhGv9BCjmDydshQHfSWpY9NxlccBKL7ITm8R\n-----END RSA PRIVATE KEY-----"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/keys/id_rsa.pub",
    "content": "-----BEGIN CERTIFICATE-----\nMIICiDCCAfGgAwIBAgIBADANBgkqhkiG9w0BAQQFADA9MQswCQYDVQQGEwJVUzEL\nMAkGA1UECBMCVVQxITAfBgNVBAoTGFZpZ25ldHRlIENvcnBvcmF0aW9uIFNCWDAe\nFw0xMTEwMTUwMzE4MjdaFw0zMTEwMTAwMzE4MjdaMD0xCzAJBgNVBAYTAlVTMQsw\nCQYDVQQIEwJVVDEhMB8GA1UEChMYVmlnbmV0dGUgQ29ycG9yYXRpb24gU0JYMIGf\nMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLs\nNjP+uAt2eO0cc5J9H5XV8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdw\nizIum8j0KzpsGYH5qReNQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJu\nBe+FQpZTs8DewwIDAQABo4GXMIGUMB0GA1UdDgQWBBRe8hrEXm+Yim4YlD5Nx+1K\nvCYs9DBlBgNVHSMEXjBcgBRe8hrEXm+Yim4YlD5Nx+1KvCYs9KFBpD8wPTELMAkG\nA1UEBhMCVVMxCzAJBgNVBAgTAlVUMSEwHwYDVQQKExhWaWduZXR0ZSBDb3Jwb3Jh\ndGlvbiBTQliCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBjhyRD\nlM7vnLn6drgQVftW5V9nDFAyPAuiGvMIKFSbiAf1PxXCRn5sfJquwWKsJUi4ZGNl\naViXdFmN6/F13PSM+yg63tpKy0fYqMbTM+Oe5WuSHkSW1VuYNHV+24adgNk/FRDL\nFRrlM1f6s9VTLWvwGItjfrof0Ba8Uq7ZDSb9Xg==\n-----END CERTIFICATE-----"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/config/storage.json",
    "content": "{\n    \"authorization_codes\": {\n        \"testcode\": {\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"\",\n            \"redirect_uri\": \"\",\n            \"expires\": \"9999999999\",\n            \"id_token\": \"IDTOKEN\"\n        },\n        \"testcode-with-scope\": {\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"\",\n            \"redirect_uri\": \"\",\n            \"expires\": \"9999999999\",\n            \"scope\": \"scope1 scope2\"\n        },\n        \"testcode-expired\": {\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"\",\n            \"redirect_uri\": \"\",\n            \"expires\": \"1356998400\"\n        },\n        \"testcode-empty-secret\": {\n            \"client_id\": \"Test Client ID Empty Secret\",\n            \"user_id\": \"\",\n            \"redirect_uri\": \"\",\n            \"expires\": \"9999999999\"\n        },\n        \"testcode-openid\": {\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"\",\n            \"redirect_uri\": \"\",\n            \"expires\": \"9999999999\",\n            \"id_token\": \"test_id_token\"\n        },\n        \"testcode-redirect-uri\": {\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"\",\n            \"redirect_uri\": \"http://brentertainment.com/voil%C3%A0\",\n            \"expires\": \"9999999999\",\n            \"id_token\": \"IDTOKEN\"\n        }\n    },\n    \"client_credentials\" : {\n        \"Test Client ID\": {\n            \"client_secret\": \"TestSecret\"\n        },\n        \"Test Client ID with Redirect Uri\": {\n            \"client_secret\": \"TestSecret2\",\n            \"redirect_uri\": \"http://brentertainment.com\"\n        },\n        \"Test Client ID with Buggy Redirect Uri\": {\n            \"client_secret\": \"TestSecret2\",\n            \"redirect_uri\": \"  http://brentertainment.com\"\n        },\n        \"Test Client ID with Multiple Redirect Uris\": {\n            \"client_secret\": \"TestSecret3\",\n            \"redirect_uri\": \"http://brentertainment.com http://morehazards.com\"\n        },\n        \"Test Client ID with Redirect Uri Parts\": {\n            \"client_secret\": \"TestSecret4\",\n            \"redirect_uri\": \"http://user:pass@brentertainment.com:2222/authorize/cb?auth_type=oauth&test=true\"\n        },\n        \"Test Some Other Client\": {\n            \"client_secret\": \"TestSecret3\"\n        },\n        \"Test Client ID Empty Secret\": {\n            \"client_secret\": \"\"\n        },\n         \"Test Client ID For Password Grant\": {\n            \"grant_types\": \"password\",\n            \"client_secret\": \"\"\n        },\n        \"Client ID With User ID\": {\n            \"client_secret\": \"TestSecret\",\n            \"user_id\": \"brent@brentertainment.com\"\n        },\n        \"oauth_test_client\": {\n            \"client_secret\": \"testpass\",\n            \"grant_types\": \"implicit password\"\n        }\n    },\n    \"user_credentials\" : {\n        \"test-username\": {\n            \"password\": \"testpass\"\n        },\n        \"testusername\":  {\n            \"password\": \"testpass\"\n        },\n        \"testuser\": {\n            \"password\": \"password\",\n            \"email\": \"testuser@test.com\",\n            \"email_verified\": true\n        },\n        \"johndoe\": {\n            \"password\": \"password\"\n        }\n    },\n    \"refresh_tokens\" : {\n        \"test-refreshtoken\": {\n            \"refresh_token\": \"test-refreshtoken\",\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"test-username\",\n            \"expires\": 0,\n            \"scope\": null\n        },\n        \"test-refreshtoken-with-scope\": {\n            \"refresh_token\": \"test-refreshtoken\",\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"test-username\",\n            \"expires\": 0,\n            \"scope\": \"scope1 scope2\"\n        }\n    },\n    \"access_tokens\" : {\n        \"accesstoken-expired\": {\n            \"access_token\": \"accesstoken-expired\",\n            \"client_id\": \"Test Client ID\",\n            \"expires\": 1234567,\n            \"scope\": null\n        },\n        \"accesstoken-scope\": {\n            \"access_token\": \"accesstoken-scope\",\n            \"client_id\": \"Test Client ID\",\n            \"expires\": 99999999900,\n            \"scope\": \"testscope\"\n        },\n        \"accesstoken-openid-connect\": {\n            \"access_token\": \"accesstoken-openid-connect\",\n            \"client_id\": \"Test Client ID\",\n            \"user_id\": \"testuser\",\n            \"expires\": 99999999900,\n            \"scope\": \"openid email\"\n        },\n        \"accesstoken-malformed\": {\n            \"access_token\": \"accesstoken-mallformed\",\n            \"expires\": 99999999900,\n            \"scope\": \"testscope\"\n        }\n    },\n    \"jwt\": {\n        \"Test Client ID\": {\n            \"key\": \"-----BEGIN PUBLIC KEY-----\\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5/SxVlE8gnpFqCxgl2wjhzY7u\\ncEi00s0kUg3xp7lVEvgLgYcAnHiWp+gtSjOFfH2zsvpiWm6Lz5f743j/FEzHIO1o\\nwR0p4d9pOaJK07d01+RzoQLOIQAgXrr4T1CCWUesncwwPBVCyy2Mw3Nmhmr9MrF8\\nUlvdRKBxriRnlP3qJQIDAQAB\\n-----END PUBLIC KEY-----\",\n            \"subject\": \"testuser@ourdomain.com\"\n        },\n        \"Test Client ID PHP-5.2\": {\n            \"key\": \"mysecretkey\",\n            \"subject\": \"testuser@ourdomain.com\"\n        },\n        \"Missing Key Client\": {\n            \"key\": null,\n            \"subject\": \"testuser@ourdomain.com\"\n        },\n        \"Missing Key Client PHP-5.2\": {\n            \"key\": null,\n            \"subject\": \"testuser@ourdomain.com\"\n        },\n        \"oauth_test_client\": {\n            \"key\": \"-----BEGIN CERTIFICATE-----\\nMIICiDCCAfGgAwIBAgIBADANBgkqhkiG9w0BAQQFADA9MQswCQYDVQQGEwJVUzEL\\nMAkGA1UECBMCVVQxITAfBgNVBAoTGFZpZ25ldHRlIENvcnBvcmF0aW9uIFNCWDAe\\nFw0xMTEwMTUwMzE4MjdaFw0zMTEwMTAwMzE4MjdaMD0xCzAJBgNVBAYTAlVTMQsw\\nCQYDVQQIEwJVVDEhMB8GA1UEChMYVmlnbmV0dGUgQ29ycG9yYXRpb24gU0JYMIGf\\nMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLs\\nNjP+uAt2eO0cc5J9H5XV8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdw\\nizIum8j0KzpsGYH5qReNQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJu\\nBe+FQpZTs8DewwIDAQABo4GXMIGUMB0GA1UdDgQWBBRe8hrEXm+Yim4YlD5Nx+1K\\nvCYs9DBlBgNVHSMEXjBcgBRe8hrEXm+Yim4YlD5Nx+1KvCYs9KFBpD8wPTELMAkG\\nA1UEBhMCVVMxCzAJBgNVBAgTAlVUMSEwHwYDVQQKExhWaWduZXR0ZSBDb3Jwb3Jh\\ndGlvbiBTQliCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBjhyRD\\nlM7vnLn6drgQVftW5V9nDFAyPAuiGvMIKFSbiAf1PxXCRn5sfJquwWKsJUi4ZGNl\\naViXdFmN6/F13PSM+yg63tpKy0fYqMbTM+Oe5WuSHkSW1VuYNHV+24adgNk/FRDL\\nFRrlM1f6s9VTLWvwGItjfrof0Ba8Uq7ZDSb9Xg==\\n-----END CERTIFICATE-----\",\n            \"subject\": \"test_subject\"\n        }\n    },\n    \"jti\": [\n        {\n            \"issuer\": \"Test Client ID\",\n            \"subject\": \"testuser@ourdomain.com\",\n            \"audience\": \"http://myapp.com/oauth/auth\",\n            \"expires\": 99999999900,\n            \"jti\": \"used_jti\"\n        }\n    ],\n    \"supported_scopes\" : [\n        \"scope1\",\n        \"scope2\",\n        \"scope3\",\n        \"clientscope1\",\n        \"clientscope2\",\n        \"clientscope3\",\n        \"supportedscope1\",\n        \"supportedscope2\",\n        \"supportedscope3\",\n        \"supportedscope4\"\n    ],\n    \"keys\": {\n        \"public_key\": \"-----BEGIN CERTIFICATE-----\\nMIICiDCCAfGgAwIBAgIBADANBgkqhkiG9w0BAQQFADA9MQswCQYDVQQGEwJVUzEL\\nMAkGA1UECBMCVVQxITAfBgNVBAoTGFZpZ25ldHRlIENvcnBvcmF0aW9uIFNCWDAe\\nFw0xMTEwMTUwMzE4MjdaFw0zMTEwMTAwMzE4MjdaMD0xCzAJBgNVBAYTAlVTMQsw\\nCQYDVQQIEwJVVDEhMB8GA1UEChMYVmlnbmV0dGUgQ29ycG9yYXRpb24gU0JYMIGf\\nMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLs\\nNjP+uAt2eO0cc5J9H5XV8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdw\\nizIum8j0KzpsGYH5qReNQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJu\\nBe+FQpZTs8DewwIDAQABo4GXMIGUMB0GA1UdDgQWBBRe8hrEXm+Yim4YlD5Nx+1K\\nvCYs9DBlBgNVHSMEXjBcgBRe8hrEXm+Yim4YlD5Nx+1KvCYs9KFBpD8wPTELMAkG\\nA1UEBhMCVVMxCzAJBgNVBAgTAlVUMSEwHwYDVQQKExhWaWduZXR0ZSBDb3Jwb3Jh\\ndGlvbiBTQliCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBjhyRD\\nlM7vnLn6drgQVftW5V9nDFAyPAuiGvMIKFSbiAf1PxXCRn5sfJquwWKsJUi4ZGNl\\naViXdFmN6/F13PSM+yg63tpKy0fYqMbTM+Oe5WuSHkSW1VuYNHV+24adgNk/FRDL\\nFRrlM1f6s9VTLWvwGItjfrof0Ba8Uq7ZDSb9Xg==\\n-----END CERTIFICATE-----\",\n        \"private_key\": \"-----BEGIN RSA PRIVATE KEY-----\\nMIICXQIBAAKBgQC8fpi06NfVYHAOAnxNMVnTXr/ptsLsNjP+uAt2eO0cc5J9H5XV\\n8lFVujOrRu/JWi1TDmAvOaf/6A3BphIA1Pwp0AAqlZdwizIum8j0KzpsGYH5qReN\\nQDwF3oUSKMsQCCGCDHrDYifG/pRi9bN1ZVjEXPr35HJuBe+FQpZTs8DewwIDAQAB\\nAoGARfNxNknmtx/n1bskZ/01iZRzAge6BLEE0LV6Q4gS7mkRZu/Oyiv39Sl5vUlA\\n+WdGxLjkBwKNjxGN8Vxw9/ASd8rSsqeAUYIwAeifXrHhj5DBPQT/pDPkeFnp9B1w\\nC6jo+3AbBQ4/b0ONSIEnCL2xGGglSIAxO17T1ViXp7lzXPECQQDe63nkRdWM0OCb\\noaHQPT3E26224maIstrGFUdt9yw3yJf4bOF7TtiPLlLuHsTTge3z+fG6ntC0xG56\\n1cl37C3ZAkEA2HdVcRGugNp/qmVz4LJTpD+WZKi73PLAO47wDOrYh9Pn2I6fcEH0\\nCPnggt1ko4ujvGzFTvRH64HXa6aPCv1j+wJBAMQMah3VQPNf/DlDVFEUmw9XeBZg\\nVHaifX851aEjgXLp6qVj9IYCmLiLsAmVa9rr6P7p8asD418nZlaHUHE0eDkCQQCr\\nuxis6GMx1Ka971jcJX2X696LoxXPd0KsvXySMupv79yagKPa8mgBiwPjrnK+EPVo\\ncj6iochA/bSCshP/mwFrAkBHEKPi6V6gb94JinCT7x3weahbdp6bJ6/nzBH/p9VA\\nHoT1JtwNFhGv9BCjmDydshQHfSWpY9NxlccBKL7ITm8R\\n-----END RSA PRIVATE KEY-----\"\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Request/TestRequest.php",
    "content": "<?php\n\nnamespace OAuth2\\Request;\n\nuse OAuth2\\Request;\nuse OAuth2\\RequestInterface;\n\n/**\n*\n*/\nclass TestRequest extends Request implements RequestInterface\n{\n    public $query, $request, $server, $headers;\n\n    public function __construct()\n    {\n        $this->query = $_GET;\n        $this->request = $_POST;\n        $this->server  = $_SERVER;\n        $this->headers = array();\n    }\n\n    public function query($name, $default = null)\n    {\n        return isset($this->query[$name]) ? $this->query[$name] : $default;\n    }\n\n    public function request($name, $default = null)\n    {\n        return isset($this->request[$name]) ? $this->request[$name] : $default;\n    }\n\n    public function server($name, $default = null)\n    {\n        return isset($this->server[$name]) ? $this->server[$name] : $default;\n    }\n\n    public function getAllQueryParameters()\n    {\n        return $this->query;\n    }\n\n    public function setQuery(array $query)\n    {\n        $this->query = $query;\n    }\n\n    public function setMethod($method)\n    {\n        $this->server['REQUEST_METHOD'] = $method;\n    }\n\n    public function setPost(array $params)\n    {\n        $this->setMethod('POST');\n        $this->request = $params;\n    }\n\n    public static function createPost(array $params = array())\n    {\n        $request = new self();\n        $request->setPost($params);\n\n        return $request;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/BaseTest.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nuse PHPUnit\\Framework\\TestCase;\n\nabstract class BaseTest extends TestCase\n{\n    public function provideStorage()\n    {\n        $memory = Bootstrap::getInstance()->getMemoryStorage();\n        $sqlite = Bootstrap::getInstance()->getSqlitePdo();\n        $mysql = Bootstrap::getInstance()->getMysqlPdo();\n        $postgres = Bootstrap::getInstance()->getPostgresPdo();\n        $mongo = Bootstrap::getInstance()->getMongo();\n        $mongoDb = Bootstrap::getInstance()->getMongoDB();\n        $redis = Bootstrap::getInstance()->getRedisStorage();\n        $cassandra = Bootstrap::getInstance()->getCassandraStorage();\n        $dynamodb = Bootstrap::getInstance()->getDynamoDbStorage();\n        $couchbase = Bootstrap::getInstance()->getCouchbase();\n\n        /* hack until we can fix \"default_scope\" dependencies in other tests */\n        $memory->defaultScope = 'defaultscope1 defaultscope2';\n\n        return array(\n            array($memory),\n            array($sqlite),\n            array($mysql),\n            array($postgres),\n            array($mongo),\n            array($mongoDb),\n            array($redis),\n            array($cassandra),\n            array($dynamodb),\n            array($couchbase),\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/Bootstrap.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\nclass Bootstrap\n{\n    const DYNAMODB_PHP_VERSION = 'none';\n\n    protected static $instance;\n    private $mysql;\n    private $sqlite;\n    private $postgres;\n    private $mongo;\n    private $mongoDb;\n    private $redis;\n    private $cassandra;\n    private $configDir;\n    private $dynamodb;\n    private $couchbase;\n\n    public function __construct()\n    {\n        $this->configDir = __DIR__.'/../../../config';\n    }\n\n    public static function getInstance()\n    {\n        if (!self::$instance) {\n            self::$instance = new self();\n        }\n\n        return self::$instance;\n    }\n\n    public function getSqlitePdo()\n    {\n        if (!$this->sqlite) {\n            $this->removeSqliteDb();\n            $pdo = new \\PDO(sprintf('sqlite:%s', $this->getSqliteDir()));\n            $pdo->setAttribute(\\PDO::ATTR_ERRMODE, \\PDO::ERRMODE_EXCEPTION);\n            $this->createSqliteDb($pdo);\n\n            $this->sqlite = new Pdo($pdo);\n        }\n\n        return $this->sqlite;\n    }\n\n    public function getPostgresPdo()\n    {\n        if (!$this->postgres) {\n            if (in_array('pgsql', \\PDO::getAvailableDrivers())) {\n                $this->removePostgresDb();\n                $this->createPostgresDb();\n                if ($pdo = $this->getPostgresDriver()) {\n                    $pdo->setAttribute(\\PDO::ATTR_ERRMODE, \\PDO::ERRMODE_EXCEPTION);\n                    $this->populatePostgresDb($pdo);\n                    $this->postgres = new Pdo($pdo);\n                }\n            } else {\n                $this->postgres = new NullStorage('Postgres', 'Missing postgres PDO extension.');\n            }\n        }\n\n        return $this->postgres;\n    }\n\n    public function getPostgresDriver()\n    {\n        try {\n            $pdo = new \\PDO('pgsql:host=localhost;dbname=oauth2_server_php', 'postgres');\n\n            return $pdo;\n        } catch (\\PDOException $e) {\n            $this->postgres = new NullStorage('Postgres', $e->getMessage());\n        }\n    }\n\n    public function getMemoryStorage()\n    {\n        return new Memory(json_decode(file_get_contents($this->configDir. '/storage.json'), true));\n    }\n\n    public function getRedisStorage()\n    {\n        if (!$this->redis) {\n            if (class_exists('Predis\\Client')) {\n                $redis = new \\Predis\\Client();\n                if ($this->testRedisConnection($redis)) {\n                    $redis->flushdb();\n                    $this->redis = new Redis($redis);\n                    $this->createRedisDb($this->redis);\n                } else {\n                    $this->redis = new NullStorage('Redis', 'Unable to connect to redis server on port 6379');\n                }\n            } else {\n                $this->redis = new NullStorage('Redis', 'Missing redis library. Please run \"composer.phar require predis/predis:dev-master\"');\n            }\n        }\n\n        return $this->redis;\n    }\n\n    private function testRedisConnection(\\Predis\\Client $redis)\n    {\n        try {\n            $redis->connect();\n        } catch (\\Predis\\CommunicationException $exception) {\n            // we were unable to connect to the redis server\n            return false;\n        }\n\n        return true;\n    }\n\n    public function getMysqlPdo()\n    {\n        if (!$this->mysql) {\n            $pdo = null;\n            try {\n                $pdo = new \\PDO('mysql:host=localhost;', 'root');\n            } catch (\\PDOException $e) {\n                $this->mysql = new NullStorage('MySQL', 'Unable to connect to MySQL on root@localhost');\n            }\n\n            if ($pdo) {\n                $pdo->setAttribute(\\PDO::ATTR_ERRMODE, \\PDO::ERRMODE_EXCEPTION);\n                $this->removeMysqlDb($pdo);\n                $this->createMysqlDb($pdo);\n\n                $this->mysql = new Pdo($pdo);\n            }\n        }\n\n        return $this->mysql;\n    }\n\n    public function getMongo()\n    {\n        if (!$this->mongo) {\n            if (class_exists('MongoClient')) {\n                $mongo = new \\MongoClient('mongodb://localhost:27017', array('connect' => false));\n                if ($this->testMongoConnection($mongo)) {\n                    $db = $mongo->oauth2_server_php_legacy;\n                    $this->removeMongo($db);\n                    $this->createMongo($db);\n\n                    $this->mongo = new Mongo($db);\n                } else {\n                    $this->mongo = new NullStorage('Mongo', 'Unable to connect to mongo server on \"localhost:27017\"');\n                }\n            } else {\n                $this->mongo = new NullStorage('Mongo', 'Missing mongo php extension. Please install mongo.so');\n            }\n        }\n\n        return $this->mongo;\n    }\n\n    public function getMongoDb()\n    {\n        if (!$this->mongoDb) {\n            if (class_exists('MongoDB\\Client')) {\n                $mongoDb = new \\MongoDB\\Client('mongodb://localhost:27017');\n                if ($this->testMongoDBConnection($mongoDb)) {\n                    $db = $mongoDb->oauth2_server_php;\n                    $this->removeMongoDb($db);\n                    $this->createMongoDb($db);\n\n                    $this->mongoDb = new MongoDB($db);\n                } else {\n                    $this->mongoDb = new NullStorage('MongoDB', 'Unable to connect to mongo server on \"localhost:27017\"');\n                }\n            } else {\n                $this->mongoDb = new NullStorage('MongoDB', 'Missing MongoDB php extension. Please install mongodb.so');\n            }\n        }\n\n        return $this->mongoDb;\n    }\n\n    private function testMongoConnection(\\MongoClient $mongo)\n    {\n        try {\n            $mongo->connect();\n        } catch (\\MongoConnectionException $e) {\n            return false;\n        }\n\n        return true;\n    }\n\n    private function testMongoDBConnection(\\MongoDB\\Client $mongo)\n    {\n        return true;\n    }\n\n    public function getCouchbase()\n    {\n        if (!$this->couchbase) {\n            if ($this->getEnvVar('SKIP_COUCHBASE_TESTS')) {\n                $this->couchbase = new NullStorage('Couchbase', 'Skipping Couchbase tests');\n            } elseif (!class_exists('Couchbase')) {\n                $this->couchbase = new NullStorage('Couchbase', 'Missing Couchbase php extension. Please install couchbase.so');\n            } else {\n                // round-about way to make sure couchbase is working\n                // this is required because it throws a \"floating point exception\" otherwise\n                $code = \"new \\Couchbase(array('localhost:8091'), '', '', 'auth', false);\";\n                $exec = sprintf('php -r \"%s\"', $code);\n                $ret = exec($exec, $test, $var);\n                if ($ret != 0) {\n                    $couchbase = new \\Couchbase(array('localhost:8091'), '', '', 'auth', false);\n                    if ($this->testCouchbaseConnection($couchbase)) {\n                        $this->clearCouchbase($couchbase);\n                        $this->createCouchbaseDB($couchbase);\n\n                        $this->couchbase = new CouchbaseDB($couchbase);\n                    } else {\n                        $this->couchbase = new NullStorage('Couchbase', 'Unable to connect to Couchbase server on \"localhost:8091\"');\n                    }\n                } else {\n                    $this->couchbase = new NullStorage('Couchbase', 'Error while trying to connect to Couchbase');\n                }\n            }\n        }\n\n        return $this->couchbase;\n    }\n\n    private function testCouchbaseConnection(\\Couchbase $couchbase)\n    {\n        try {\n            if (count($couchbase->getServers()) > 0) {\n                return true;\n            }\n        } catch (\\CouchbaseException $e) {\n            return false;\n        }\n\n        return true;\n    }\n\n    public function getCassandraStorage()\n    {\n        if (!$this->cassandra) {\n            if (class_exists('phpcassa\\ColumnFamily')) {\n                $cassandra = new \\phpcassa\\Connection\\ConnectionPool('oauth2_test', array('127.0.0.1:9160'));\n                if ($this->testCassandraConnection($cassandra)) {\n                    $this->removeCassandraDb();\n                    $this->cassandra = new Cassandra($cassandra);\n                    $this->createCassandraDb($this->cassandra);\n                } else {\n                    $this->cassandra = new NullStorage('Cassandra', 'Unable to connect to cassandra server on \"127.0.0.1:9160\"');\n                }\n            } else {\n                $this->cassandra = new NullStorage('Cassandra', 'Missing cassandra library. Please run \"composer.phar require thobbs/phpcassa:dev-master\"');\n            }\n        }\n\n        return $this->cassandra;\n    }\n\n    private function testCassandraConnection(\\phpcassa\\Connection\\ConnectionPool $cassandra)\n    {\n        try {\n            new \\phpcassa\\SystemManager('localhost:9160');\n        } catch (\\Exception $e) {\n            return false;\n        }\n\n        return true;\n    }\n\n    private function removeCassandraDb()\n    {\n        $sys = new \\phpcassa\\SystemManager('localhost:9160');\n\n        try {\n            $sys->drop_keyspace('oauth2_test');\n        } catch (\\cassandra\\InvalidRequestException $e) {\n\n        }\n    }\n\n    private function createCassandraDb(Cassandra $storage)\n    {\n        // create the cassandra keyspace and column family\n        $sys = new \\phpcassa\\SystemManager('localhost:9160');\n\n        $sys->create_keyspace('oauth2_test', array(\n            \"strategy_class\" => \\phpcassa\\Schema\\StrategyClass::SIMPLE_STRATEGY,\n            \"strategy_options\" => array('replication_factor' => '1')\n        ));\n\n        $sys->create_column_family('oauth2_test', 'auth');\n        $cassandra = new \\phpcassa\\Connection\\ConnectionPool('oauth2_test', array('127.0.0.1:9160'));\n        $cf = new \\phpcassa\\ColumnFamily($cassandra, 'auth');\n\n        // populate the data\n        $storage->setClientDetails(\"oauth_test_client\", \"testpass\", \"http://example.com\", 'implicit password');\n        $storage->setAccessToken(\"testtoken\", \"Some Client\", '', time() + 1000);\n        $storage->setAuthorizationCode(\"testcode\", \"Some Client\", '', '', time() + 1000);\n\n        $storage->setScope('supportedscope1 supportedscope2 supportedscope3 supportedscope4');\n        $storage->setScope('defaultscope1 defaultscope2', null, 'default');\n\n        $storage->setScope('clientscope1 clientscope2', 'Test Client ID');\n        $storage->setScope('clientscope1 clientscope2', 'Test Client ID', 'default');\n\n        $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Client ID 2');\n        $storage->setScope('clientscope1 clientscope2', 'Test Client ID 2', 'default');\n\n        $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID');\n        $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID', 'default');\n\n        $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Default Scope Client ID 2');\n        $storage->setScope('clientscope3', 'Test Default Scope Client ID 2', 'default');\n\n        $storage->setClientKey('oauth_test_client', $this->getTestPublicKey(), 'test_subject');\n\n        $cf->insert(\"oauth_public_keys:ClientID_One\", array('__data' => json_encode(array(\"public_key\" => \"client_1_public\", \"private_key\" => \"client_1_private\", \"encryption_algorithm\" => \"RS256\"))));\n        $cf->insert(\"oauth_public_keys:ClientID_Two\", array('__data' => json_encode(array(\"public_key\" => \"client_2_public\", \"private_key\" => \"client_2_private\", \"encryption_algorithm\" => \"RS256\"))));\n        $cf->insert(\"oauth_public_keys:\", array('__data' => json_encode(array(\"public_key\" => $this->getTestPublicKey(), \"private_key\" =>  $this->getTestPrivateKey(), \"encryption_algorithm\" => \"RS256\"))));\n\n        $cf->insert(\"oauth_users:testuser\", array('__data' =>json_encode(array(\"password\" => \"password\", \"email\" => \"testuser@test.com\", \"email_verified\" => true))));\n\n    }\n\n    private function createSqliteDb(\\PDO $pdo)\n    {\n        $this->runPdoSql($pdo);\n    }\n\n    private function removeSqliteDb()\n    {\n        if (file_exists($this->getSqliteDir())) {\n            unlink($this->getSqliteDir());\n        }\n    }\n\n    private function createMysqlDb(\\PDO $pdo)\n    {\n        $pdo->exec('CREATE DATABASE oauth2_server_php');\n        $pdo->exec('USE oauth2_server_php');\n        $this->runPdoSql($pdo);\n    }\n\n    private function removeMysqlDb(\\PDO $pdo)\n    {\n        $pdo->exec('DROP DATABASE IF EXISTS oauth2_server_php');\n    }\n\n    private function createPostgresDb()\n    {\n        if (!`psql postgres -tAc \"SELECT 1 FROM pg_roles WHERE rolname='postgres'\"`) {\n            `createuser -s -r postgres`;\n        }\n\n        `createdb -O postgres oauth2_server_php`;\n    }\n\n    private function populatePostgresDb(\\PDO $pdo)\n    {\n        $this->runPdoSql($pdo);\n    }\n\n    private function removePostgresDb()\n    {\n        if (trim(`psql -l | grep oauth2_server_php | wc -l`)) {\n            `dropdb oauth2_server_php`;\n        }\n    }\n\n    public function runPdoSql(\\PDO $pdo)\n    {\n        $storage = new Pdo($pdo);\n        foreach (explode(';', $storage->getBuildSql()) as $statement) {\n            $result = $pdo->exec($statement);\n        }\n\n        // set up scopes\n        $sql = 'INSERT INTO oauth_scopes (scope) VALUES (?)';\n        foreach (explode(' ', 'supportedscope1 supportedscope2 supportedscope3 supportedscope4 clientscope1 clientscope2 clientscope3') as $supportedScope) {\n            $pdo->prepare($sql)->execute(array($supportedScope));\n        }\n\n        $sql = 'INSERT INTO oauth_scopes (scope, is_default) VALUES (?, ?)';\n        foreach (array('defaultscope1', 'defaultscope2') as $defaultScope) {\n            $pdo->prepare($sql)->execute(array($defaultScope, true));\n        }\n\n        // set up clients\n        $sql = 'INSERT INTO oauth_clients (client_id, client_secret, scope, grant_types) VALUES (?, ?, ?, ?)';\n        $pdo->prepare($sql)->execute(array('Test Client ID', 'TestSecret', 'clientscope1 clientscope2', null));\n        $pdo->prepare($sql)->execute(array('Test Client ID 2', 'TestSecret', 'clientscope1 clientscope2 clientscope3', null));\n        $pdo->prepare($sql)->execute(array('Test Default Scope Client ID', 'TestSecret', 'clientscope1 clientscope2', null));\n        $pdo->prepare($sql)->execute(array('oauth_test_client', 'testpass', null, 'implicit password'));\n\n        // set up misc\n        $sql = 'INSERT INTO oauth_access_tokens (access_token, client_id, expires, user_id) VALUES (?, ?, ?, ?)';\n        $pdo->prepare($sql)->execute(array('testtoken', 'Some Client', date('Y-m-d H:i:s', strtotime('+1 hour')), null));\n        $pdo->prepare($sql)->execute(array('accesstoken-openid-connect', 'Some Client', date('Y-m-d H:i:s', strtotime('+1 hour')), 'testuser'));\n\n        $sql = 'INSERT INTO oauth_authorization_codes (authorization_code, client_id, expires) VALUES (?, ?, ?)';\n        $pdo->prepare($sql)->execute(array('testcode', 'Some Client', date('Y-m-d H:i:s', strtotime('+1 hour'))));\n\n        $sql = 'INSERT INTO oauth_users (username, password, email, email_verified) VALUES (?, ?, ?, ?)';\n        $pdo->prepare($sql)->execute(array('testuser', 'password', 'testuser@test.com', true));\n\n        $sql = 'INSERT INTO oauth_public_keys (client_id, public_key, private_key, encryption_algorithm) VALUES (?, ?, ?, ?)';\n        $pdo->prepare($sql)->execute(array('ClientID_One', 'client_1_public', 'client_1_private', 'RS256'));\n        $pdo->prepare($sql)->execute(array('ClientID_Two', 'client_2_public', 'client_2_private', 'RS256'));\n\n        $sql = 'INSERT INTO oauth_public_keys (client_id, public_key, private_key, encryption_algorithm) VALUES (?, ?, ?, ?)';\n        $pdo->prepare($sql)->execute(array(null, $this->getTestPublicKey(), $this->getTestPrivateKey(), 'RS256'));\n\n        $sql = 'INSERT INTO oauth_jwt (client_id, subject, public_key) VALUES (?, ?, ?)';\n        $pdo->prepare($sql)->execute(array('oauth_test_client', 'test_subject', $this->getTestPublicKey()));\n    }\n\n    public function getSqliteDir()\n    {\n        return $this->configDir. '/test.sqlite';\n    }\n\n    public function getConfigDir()\n    {\n        return $this->configDir;\n    }\n\n    private function createCouchbaseDB(\\Couchbase $db)\n    {\n        $db->set('oauth_clients-oauth_test_client',json_encode(array(\n            'client_id' => \"oauth_test_client\",\n            'client_secret' => \"testpass\",\n            'redirect_uri' => \"http://example.com\",\n            'grant_types' => 'implicit password'\n        )));\n\n        $db->set('oauth_access_tokens-testtoken',json_encode(array(\n            'access_token' => \"testtoken\",\n            'client_id' => \"Some Client\"\n        )));\n\n        $db->set('oauth_authorization_codes-testcode',json_encode(array(\n            'access_token' => \"testcode\",\n            'client_id' => \"Some Client\"\n        )));\n\n        $db->set('oauth_users-testuser',json_encode(array(\n            'username' => 'testuser',\n            'password' => 'password',\n            'email' => 'testuser@test.com',\n            'email_verified' => true,\n        )));\n\n        $db->set('oauth_jwt-oauth_test_client',json_encode(array(\n            'client_id' => 'oauth_test_client',\n            'key'       => $this->getTestPublicKey(),\n            'subject'   => 'test_subject',\n        )));\n    }\n\n    private function clearCouchbase(\\Couchbase $cb)\n    {\n        $cb->delete('oauth_authorization_codes-new-openid-code');\n        $cb->delete('oauth_access_tokens-newtoken');\n        $cb->delete('oauth_authorization_codes-newcode');\n        $cb->delete('oauth_refresh_tokens-refreshtoken');\n    }\n\n    private function createMongo(\\MongoDB $db)\n    {\n        $db->oauth_clients->insert(array(\n            'client_id' => \"oauth_test_client\",\n            'client_secret' => \"testpass\",\n            'redirect_uri' => \"http://example.com\",\n            'grant_types' => 'implicit password'\n        ));\n\n        $db->oauth_access_tokens->insert(array(\n            'access_token' => \"testtoken\",\n            'client_id' => \"Some Client\"\n        ));\n\n        $db->oauth_authorization_codes->insert(array(\n            'authorization_code' => \"testcode\",\n            'client_id' => \"Some Client\"\n        ));\n\n        $db->oauth_users->insert(array(\n            'username' => 'testuser',\n            'password' => 'password',\n            'email' => 'testuser@test.com',\n            'email_verified' => true,\n        ));\n\n        $db->oauth_keys->insert(array(\n            'client_id'   => null,\n            'public_key' => $this->getTestPublicKey(),\n            'private_key' => $this->getTestPrivateKey(),\n            'encryption_algorithm' => 'RS256'\n        ));\n\n        $db->oauth_jwt->insert(array(\n            'client_id' => 'oauth_test_client',\n            'key' => $this->getTestPublicKey(),\n            'subject'   => 'test_subject',\n        ));\n    }\n\n    public function removeMongo(\\MongoDB $db)\n    {\n        $db->drop();\n    }\n\n    private function createMongoDB(\\MongoDB\\Database $db)\n    {\n        $db->oauth_clients->insertOne(array(\n            'client_id' => \"oauth_test_client\",\n            'client_secret' => \"testpass\",\n            'redirect_uri' => \"http://example.com\",\n            'grant_types' => 'implicit password'\n        ));\n\n        $db->oauth_access_tokens->insertOne(array(\n            'access_token' => \"testtoken\",\n            'client_id' => \"Some Client\"\n        ));\n\n        $db->oauth_authorization_codes->insertOne(array(\n            'authorization_code' => \"testcode\",\n            'client_id' => \"Some Client\"\n        ));\n\n        $db->oauth_users->insertOne(array(\n            'username' => 'testuser',\n            'password' => 'password',\n            'email' => 'testuser@test.com',\n            'email_verified' => true,\n        ));\n\n        $db->oauth_keys->insertOne(array(\n            'client_id'   => null,\n            'public_key' => $this->getTestPublicKey(),\n            'private_key' => $this->getTestPrivateKey(),\n            'encryption_algorithm' => 'RS256'\n        ));\n\n        $db->oauth_jwt->insertOne(array(\n            'client_id' => 'oauth_test_client',\n            'key' => $this->getTestPublicKey(),\n            'subject'   => 'test_subject',\n        ));\n    }\n\n    public function removeMongoDB(\\MongoDB\\Database $db)\n    {\n        $db->drop();\n    }\n\n    private function createRedisDb(Redis $storage)\n    {\n        $storage->setClientDetails(\"oauth_test_client\", \"testpass\", \"http://example.com\", 'implicit password');\n        $storage->setAccessToken(\"testtoken\", \"Some Client\", '', time() + 1000);\n        $storage->setAuthorizationCode(\"testcode\", \"Some Client\", '', '', time() + 1000);\n        $storage->setUser(\"testuser\", \"password\");\n\n        $storage->setScope('supportedscope1 supportedscope2 supportedscope3 supportedscope4');\n        $storage->setScope('defaultscope1 defaultscope2', null, 'default');\n\n        $storage->setScope('clientscope1 clientscope2', 'Test Client ID');\n        $storage->setScope('clientscope1 clientscope2', 'Test Client ID', 'default');\n\n        $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Client ID 2');\n        $storage->setScope('clientscope1 clientscope2', 'Test Client ID 2', 'default');\n\n        $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID');\n        $storage->setScope('clientscope1 clientscope2', 'Test Default Scope Client ID', 'default');\n\n        $storage->setScope('clientscope1 clientscope2 clientscope3', 'Test Default Scope Client ID 2');\n        $storage->setScope('clientscope3', 'Test Default Scope Client ID 2', 'default');\n\n        $storage->setClientKey('oauth_test_client', $this->getTestPublicKey(), 'test_subject');\n    }\n\n    public function getTestPublicKey()\n    {\n        return file_get_contents(__DIR__.'/../../../config/keys/id_rsa.pub');\n    }\n\n    private function getTestPrivateKey()\n    {\n        return file_get_contents(__DIR__.'/../../../config/keys/id_rsa');\n    }\n\n    public function getDynamoDbStorage()\n    {\n        if (!$this->dynamodb) {\n            // only run once per travis build\n            if (true == $this->getEnvVar('TRAVIS')) {\n                if (self::DYNAMODB_PHP_VERSION != $this->getEnvVar('TRAVIS_PHP_VERSION')) {\n                    $this->dynamodb = new NullStorage('DynamoDb', 'Skipping for travis.ci - only run once per build');\n\n                    return;\n                }\n            }\n            if (class_exists('\\Aws\\DynamoDb\\DynamoDbClient')) {\n                if ($client = $this->getDynamoDbClient()) {\n                    // travis runs a unique set of tables per build, to avoid conflict\n                    $prefix = '';\n                    if ($build_id = $this->getEnvVar('TRAVIS_JOB_NUMBER')) {\n                        $prefix = sprintf('build_%s_', $build_id);\n                    } else {\n                        if (!$this->deleteDynamoDb($client, $prefix, true)) {\n                            return $this->dynamodb = new NullStorage('DynamoDb', 'Timed out while waiting for DynamoDB deletion (30 seconds)');\n                        }\n                    }\n                    $this->createDynamoDb($client, $prefix);\n                    $this->populateDynamoDb($client, $prefix);\n                    $config = array(\n                        'client_table' => $prefix.'oauth_clients',\n                        'access_token_table' => $prefix.'oauth_access_tokens',\n                        'refresh_token_table' => $prefix.'oauth_refresh_tokens',\n                        'code_table' => $prefix.'oauth_authorization_codes',\n                        'user_table' => $prefix.'oauth_users',\n                        'jwt_table'  => $prefix.'oauth_jwt',\n                        'scope_table'  => $prefix.'oauth_scopes',\n                        'public_key_table'  => $prefix.'oauth_public_keys',\n                    );\n                    $this->dynamodb = new DynamoDB($client, $config);\n                } elseif (!$this->dynamodb) {\n                    $this->dynamodb = new NullStorage('DynamoDb', 'unable to connect to DynamoDB');\n                }\n            } else {\n                $this->dynamodb = new NullStorage('DynamoDb', 'Missing DynamoDB library. Please run \"composer.phar require aws/aws-sdk-php:dev-master');\n            }\n        }\n\n        return $this->dynamodb;\n    }\n\n    private function getDynamoDbClient()\n    {\n        $config = array();\n        // check for environment variables\n        if (($key = $this->getEnvVar('AWS_ACCESS_KEY_ID')) && ($secret = $this->getEnvVar('AWS_SECRET_KEY'))) {\n            $config['key']    = $key;\n            $config['secret'] = $secret;\n        } else {\n            // fall back on ~/.aws/credentials file\n            // @see http://docs.aws.amazon.com/aws-sdk-php/guide/latest/credentials.html#credential-profiles\n            if (!file_exists($this->getEnvVar('HOME') . '/.aws/credentials')) {\n                $this->dynamodb = new NullStorage('DynamoDb', 'No aws credentials file found, and no AWS_ACCESS_KEY_ID or AWS_SECRET_KEY environment variable set');\n\n                return;\n            }\n\n            // set profile in AWS_PROFILE environment variable, defaults to \"default\"\n            $config['profile'] = $this->getEnvVar('AWS_PROFILE', 'default');\n        }\n\n        // set region in AWS_REGION environment variable, defaults to \"us-east-1\"\n        $config['region'] = $this->getEnvVar('AWS_REGION', \\Aws\\Common\\Enum\\Region::US_EAST_1);\n\n        return \\Aws\\DynamoDb\\DynamoDbClient::factory($config);\n    }\n\n    private function deleteDynamoDb(\\Aws\\DynamoDb\\DynamoDbClient $client, $prefix = null, $waitForDeletion = false)\n    {\n        $tablesList = explode(' ', 'oauth_access_tokens oauth_authorization_codes oauth_clients oauth_jwt oauth_public_keys oauth_refresh_tokens oauth_scopes oauth_users');\n        $nbTables  = count($tablesList);\n\n        // Delete all table.\n        foreach ($tablesList as $key => $table) {\n            try {\n                $client->deleteTable(array('TableName' => $prefix.$table));\n            } catch (\\Aws\\DynamoDb\\Exception\\DynamoDbException $e) {\n                // Table does not exist : nothing to do\n            }\n        }\n\n        // Wait for deleting\n        if ($waitForDeletion) {\n            $retries = 5;\n            $nbTableDeleted = 0;\n            while ($nbTableDeleted != $nbTables) {\n                $nbTableDeleted = 0;\n                foreach ($tablesList as $key => $table) {\n                    try {\n                        $result = $client->describeTable(array('TableName' => $prefix.$table));\n                    } catch (\\Aws\\DynamoDb\\Exception\\DynamoDbException $e) {\n                        // Table does not exist : nothing to do\n                        $nbTableDeleted++;\n                    }\n                }\n                if ($nbTableDeleted != $nbTables) {\n                    if ($retries < 0) {\n                        // we are tired of waiting\n                        return false;\n                    }\n                    sleep(5);\n                    echo \"Sleeping 5 seconds for DynamoDB ($retries more retries)...\\n\";\n                    $retries--;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    private function createDynamoDb(\\Aws\\DynamoDb\\DynamoDbClient $client, $prefix = null)\n    {\n        $tablesList = explode(' ', 'oauth_access_tokens oauth_authorization_codes oauth_clients oauth_jwt oauth_public_keys oauth_refresh_tokens oauth_scopes oauth_users');\n        $nbTables  = count($tablesList);\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_access_tokens',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'access_token','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(array('AttributeName' => 'access_token','KeyType' => 'HASH')),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_authorization_codes',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'authorization_code','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(array('AttributeName' => 'authorization_code','KeyType' => 'HASH')),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_clients',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'client_id','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(array('AttributeName' => 'client_id','KeyType' => 'HASH')),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_jwt',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'client_id','AttributeType' => 'S'),\n                array('AttributeName' => 'subject','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(\n                array('AttributeName' => 'client_id','KeyType' => 'HASH'),\n                array('AttributeName' => 'subject','KeyType' => 'RANGE')\n            ),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_public_keys',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'client_id','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(array('AttributeName' => 'client_id','KeyType' => 'HASH')),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_refresh_tokens',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'refresh_token','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(array('AttributeName' => 'refresh_token','KeyType' => 'HASH')),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_scopes',\n            'AttributeDefinitions' => array(\n                array('AttributeName' => 'scope','AttributeType' => 'S'),\n                array('AttributeName' => 'is_default','AttributeType' => 'S')\n            ),\n            'KeySchema' => array(array('AttributeName' => 'scope','KeyType' => 'HASH')),\n            'GlobalSecondaryIndexes' => array(\n                array(\n                    'IndexName' => 'is_default-index',\n                    'KeySchema' => array(array('AttributeName' => 'is_default', 'KeyType' => 'HASH')),\n                    'Projection' => array('ProjectionType' => 'ALL'),\n                    'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n                ),\n            ),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        $client->createTable(array(\n            'TableName' => $prefix.'oauth_users',\n            'AttributeDefinitions' => array(array('AttributeName' => 'username','AttributeType' => 'S')),\n            'KeySchema' => array(array('AttributeName' => 'username','KeyType' => 'HASH')),\n            'ProvisionedThroughput' => array('ReadCapacityUnits'  => 1,'WriteCapacityUnits' => 1)\n        ));\n\n        // Wait for creation\n        $nbTableCreated = 0;\n        while ($nbTableCreated != $nbTables) {\n            $nbTableCreated = 0;\n            foreach ($tablesList as $key => $table) {\n                try {\n                    $result = $client->describeTable(array('TableName' => $prefix.$table));\n                    if ($result['Table']['TableStatus'] == 'ACTIVE') {\n                        $nbTableCreated++;\n                    }\n                } catch (\\Aws\\DynamoDb\\Exception\\DynamoDbException $e) {\n                    // Table does not exist : nothing to do\n                    $nbTableCreated++;\n                }\n            }\n            if ($nbTableCreated != $nbTables) {\n                sleep(1);\n            }\n        }\n    }\n\n    private function populateDynamoDb($client, $prefix = null)\n    {\n        // set up scopes\n        foreach (explode(' ', 'supportedscope1 supportedscope2 supportedscope3 supportedscope4 clientscope1 clientscope2 clientscope3') as $supportedScope) {\n            $client->putItem(array(\n                'TableName' => $prefix.'oauth_scopes',\n                'Item' => array('scope' => array('S' => $supportedScope))\n            ));\n        }\n\n        foreach (array('defaultscope1', 'defaultscope2') as $defaultScope) {\n            $client->putItem(array(\n                'TableName' => $prefix.'oauth_scopes',\n                'Item' => array('scope' => array('S' => $defaultScope), 'is_default' => array('S' => \"true\"))\n            ));\n        }\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_clients',\n            'Item' => array(\n                'client_id' => array('S' => 'Test Client ID'),\n                'client_secret' => array('S' => 'TestSecret'),\n                'scope' => array('S' => 'clientscope1 clientscope2')\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_clients',\n            'Item' => array(\n                'client_id' => array('S' => 'Test Client ID 2'),\n                'client_secret' => array('S' => 'TestSecret'),\n                'scope' => array('S' => 'clientscope1 clientscope2 clientscope3')\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_clients',\n            'Item' => array(\n                'client_id' => array('S' => 'Test Default Scope Client ID'),\n                'client_secret' => array('S' => 'TestSecret'),\n                'scope' => array('S' => 'clientscope1 clientscope2')\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_clients',\n            'Item' => array(\n                'client_id' => array('S' => 'oauth_test_client'),\n                'client_secret' => array('S' => 'testpass'),\n                'grant_types' => array('S' => 'implicit password')\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_access_tokens',\n            'Item' => array(\n                'access_token' => array('S' => 'testtoken'),\n                'client_id' => array('S' => 'Some Client'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_access_tokens',\n            'Item' => array(\n                 'access_token' => array('S' => 'accesstoken-openid-connect'),\n                 'client_id' => array('S' => 'Some Client'),\n                 'user_id' => array('S' => 'testuser'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_authorization_codes',\n            'Item' => array(\n                'authorization_code' => array('S' => 'testcode'),\n                'client_id' => array('S' => 'Some Client'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_users',\n            'Item' => array(\n                'username' => array('S' => 'testuser'),\n                'password' => array('S' => 'password'),\n                'email' => array('S' => 'testuser@test.com'),\n                'email_verified' => array('S' => 'true'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_public_keys',\n            'Item' => array(\n                'client_id' => array('S' => 'ClientID_One'),\n                'public_key' => array('S' => 'client_1_public'),\n                'private_key' => array('S' => 'client_1_private'),\n                'encryption_algorithm' => array('S' => 'RS256'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_public_keys',\n            'Item' => array(\n                'client_id' => array('S' => 'ClientID_Two'),\n                'public_key' => array('S' => 'client_2_public'),\n                'private_key' => array('S' => 'client_2_private'),\n                'encryption_algorithm' => array('S' => 'RS256'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_public_keys',\n            'Item' => array(\n                'client_id' => array('S' => '0'),\n                'public_key' => array('S' => $this->getTestPublicKey()),\n                'private_key' => array('S' => $this->getTestPrivateKey()),\n                'encryption_algorithm' => array('S' => 'RS256'),\n            )\n        ));\n\n        $client->putItem(array(\n            'TableName' => $prefix.'oauth_jwt',\n            'Item' => array(\n                'client_id' => array('S' => 'oauth_test_client'),\n                'subject' => array('S' => 'test_subject'),\n                'public_key' => array('S' => $this->getTestPublicKey()),\n            )\n        ));\n    }\n\n    public function cleanupTravisDynamoDb($prefix = null)\n    {\n        if (is_null($prefix)) {\n            // skip this when not applicable\n            if (!$this->getEnvVar('TRAVIS') || self::DYNAMODB_PHP_VERSION != $this->getEnvVar('TRAVIS_PHP_VERSION')) {\n                return;\n            }\n\n            $prefix = sprintf('build_%s_', $this->getEnvVar('TRAVIS_JOB_NUMBER'));\n        }\n\n        $client = $this->getDynamoDbClient();\n        $this->deleteDynamoDb($client, $prefix);\n    }\n\n    private function getEnvVar($var, $default = null)\n    {\n        return isset($_SERVER[$var]) ? $_SERVER[$var] : (getenv($var) ?: $default);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/bshaffer/oauth2-server-php/test/lib/OAuth2/Storage/NullStorage.php",
    "content": "<?php\n\nnamespace OAuth2\\Storage;\n\n/**\n*\n*/\nclass NullStorage extends Memory\n{\n    private $name;\n    private $description;\n\n    public function __construct($name, $description = null)\n    {\n        $this->name = $name;\n        $this->description = $description;\n    }\n\n    public function __toString()\n    {\n        return $this->name;\n    }\n\n    public function getMessage()\n    {\n        if ($this->description) {\n             return $this->description;\n        }\n\n        return $this->name;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Carbon\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/README.md",
    "content": "# carbonphp/carbon-doctrine-types\n\nTypes to use Carbon in Doctrine\n\n## Documentation\n\n[Check how to use in the official Carbon documentation](https://carbon.nesbot.com/symfony/)\n\nThis package is an externalization of [src/Carbon/Doctrine](https://github.com/briannesbitt/Carbon/tree/2.71.0/src/Carbon/Doctrine)\nfrom `nestbot/carbon` package.\n\nExternalization allows to better deal with different versions of dbal. With\nversion 4.0 of dbal, it no longer sustainable to be compatible with all version\nusing a single code.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/composer.json",
    "content": "{\n    \"name\": \"carbonphp/carbon-doctrine-types\",\n    \"description\": \"Types to use Carbon in Doctrine\",\n    \"type\": \"library\",\n    \"keywords\": [\n        \"date\",\n        \"time\",\n        \"DateTime\",\n        \"Carbon\",\n        \"Doctrine\"\n    ],\n    \"require\": {\n        \"php\": \"^8.1\"\n    },\n    \"require-dev\": {\n        \"doctrine/dbal\": \"^4.0.0\",\n        \"nesbot/carbon\": \"^2.71.0 || ^3.0.0\",\n        \"phpunit/phpunit\": \"^10.3\"\n    },\n    \"conflict\": {\n        \"doctrine/dbal\": \"<4.0.0 || >=5.0.0\"\n    },\n    \"license\": \"MIT\",\n    \"autoload\": {\n        \"psr-4\": {\n            \"Carbon\\\\Doctrine\\\\\": \"src/Carbon/Doctrine/\"\n        }\n    },\n    \"authors\": [\n        {\n            \"name\": \"KyleKatarn\",\n            \"email\": \"kylekatarnls@gmail.com\"\n        }\n    ],\n    \"minimum-stability\": \"dev\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonDoctrineType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\n\ninterface CarbonDoctrineType\n{\n    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform);\n\n    public function convertToPHPValue(mixed $value, AbstractPlatform $platform);\n\n    public function convertToDatabaseValue($value, AbstractPlatform $platform);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonImmutableType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nclass CarbonImmutableType extends DateTimeImmutableType implements CarbonDoctrineType\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nclass CarbonType extends DateTimeType implements CarbonDoctrineType\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/CarbonTypeConverter.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonInterface;\nuse DateTimeInterface;\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Doctrine\\DBAL\\Platforms\\DB2Platform;\nuse Doctrine\\DBAL\\Platforms\\OraclePlatform;\nuse Doctrine\\DBAL\\Platforms\\SQLitePlatform;\nuse Doctrine\\DBAL\\Platforms\\SQLServerPlatform;\nuse Doctrine\\DBAL\\Types\\Exception\\InvalidType;\nuse Doctrine\\DBAL\\Types\\Exception\\ValueNotConvertible;\nuse Exception;\n\n/**\n * @template T of CarbonInterface\n */\ntrait CarbonTypeConverter\n{\n    /**\n     * This property differentiates types installed by carbonphp/carbon-doctrine-types\n     * from the ones embedded previously in nesbot/carbon source directly.\n     *\n     * @readonly\n     */\n    public bool $external = true;\n\n    /**\n     * @return class-string<T>\n     */\n    protected function getCarbonClassName(): string\n    {\n        return Carbon::class;\n    }\n\n    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform): string\n    {\n        $precision = min(\n            $fieldDeclaration['precision'] ?? DateTimeDefaultPrecision::get(),\n            $this->getMaximumPrecision($platform),\n        );\n\n        $type = parent::getSQLDeclaration($fieldDeclaration, $platform);\n\n        if (!$precision) {\n            return $type;\n        }\n\n        if (str_contains($type, '(')) {\n            return preg_replace('/\\(\\d+\\)/', \"($precision)\", $type);\n        }\n\n        [$before, $after] = explode(' ', \"$type \");\n\n        return trim(\"$before($precision) $after\");\n    }\n\n    /**\n     * @SuppressWarnings(PHPMD.UnusedFormalParameter)\n     */\n    public function convertToDatabaseValue($value, AbstractPlatform $platform): ?string\n    {\n        if ($value === null) {\n            return $value;\n        }\n\n        if ($value instanceof DateTimeInterface) {\n            return $value->format('Y-m-d H:i:s.u');\n        }\n\n        throw InvalidType::new(\n            $value,\n            static::class,\n            ['null', 'DateTime', 'Carbon']\n        );\n    }\n\n    private function doConvertToPHPValue(mixed $value)\n    {\n        $class = $this->getCarbonClassName();\n\n        if ($value === null || is_a($value, $class)) {\n            return $value;\n        }\n\n        if ($value instanceof DateTimeInterface) {\n            return $class::instance($value);\n        }\n\n        $date = null;\n        $error = null;\n\n        try {\n            $date = $class::parse($value);\n        } catch (Exception $exception) {\n            $error = $exception;\n        }\n\n        if (!$date) {\n            throw ValueNotConvertible::new(\n                $value,\n                static::class,\n                'Y-m-d H:i:s.u or any format supported by '.$class.'::parse()',\n                $error\n            );\n        }\n\n        return $date;\n    }\n\n    private function getMaximumPrecision(AbstractPlatform $platform): int\n    {\n        if ($platform instanceof DB2Platform) {\n            return 12;\n        }\n\n        if ($platform instanceof OraclePlatform) {\n            return 9;\n        }\n\n        if ($platform instanceof SQLServerPlatform || $platform instanceof SQLitePlatform) {\n            return 3;\n        }\n\n        return 6;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeDefaultPrecision.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nclass DateTimeDefaultPrecision\n{\n    private static $precision = 6;\n\n    /**\n     * Change the default Doctrine datetime and datetime_immutable precision.\n     *\n     * @param int $precision\n     */\n    public static function set(int $precision): void\n    {\n        self::$precision = $precision;\n    }\n\n    /**\n     * Get the default Doctrine datetime and datetime_immutable precision.\n     *\n     * @return int\n     */\n    public static function get(): int\n    {\n        return self::$precision;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeImmutableType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nuse Carbon\\CarbonImmutable;\nuse DateTimeImmutable;\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Doctrine\\DBAL\\Types\\VarDateTimeImmutableType;\n\nclass DateTimeImmutableType extends VarDateTimeImmutableType implements CarbonDoctrineType\n{\n    /** @use CarbonTypeConverter<CarbonImmutable> */\n    use CarbonTypeConverter;\n\n    /**\n     * @SuppressWarnings(PHPMD.UnusedFormalParameter)\n     */\n    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?CarbonImmutable\n    {\n        return $this->doConvertToPHPValue($value);\n    }\n\n    /**\n     * @return class-string<CarbonImmutable>\n     */\n    protected function getCarbonClassName(): string\n    {\n        return CarbonImmutable::class;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine/DateTimeType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Carbon\\Doctrine;\n\nuse Carbon\\Carbon;\nuse DateTime;\nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform;\nuse Doctrine\\DBAL\\Types\\VarDateTimeType;\n\nclass DateTimeType extends VarDateTimeType implements CarbonDoctrineType\n{\n    /** @use CarbonTypeConverter<Carbon> */\n    use CarbonTypeConverter;\n\n    /**\n     * @SuppressWarnings(PHPMD.UnusedFormalParameter)\n     */\n    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?Carbon\n    {\n        return $this->doConvertToPHPValue($value);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/ClassLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer\\Autoload;\n\n/**\n * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.\n *\n *     $loader = new \\Composer\\Autoload\\ClassLoader();\n *\n *     // register classes with namespaces\n *     $loader->add('Symfony\\Component', __DIR__.'/component');\n *     $loader->add('Symfony',           __DIR__.'/framework');\n *\n *     // activate the autoloader\n *     $loader->register();\n *\n *     // to enable searching the include path (eg. for PEAR packages)\n *     $loader->setUseIncludePath(true);\n *\n * In this example, if you try to use a class in the Symfony\\Component\n * namespace or one of its children (Symfony\\Component\\Console for instance),\n * the autoloader will first look for the class under the component/\n * directory, and it will then fallback to the framework/ directory if not\n * found before giving up.\n *\n * This class is loosely based on the Symfony UniversalClassLoader.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n * @author Jordi Boggiano <j.boggiano@seld.be>\n * @see    https://www.php-fig.org/psr/psr-0/\n * @see    https://www.php-fig.org/psr/psr-4/\n */\nclass ClassLoader\n{\n    /** @var \\Closure(string):void */\n    private static $includeFile;\n\n    /** @var string|null */\n    private $vendorDir;\n\n    // PSR-4\n    /**\n     * @var array<string, array<string, int>>\n     */\n    private $prefixLengthsPsr4 = array();\n    /**\n     * @var array<string, list<string>>\n     */\n    private $prefixDirsPsr4 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr4 = array();\n\n    // PSR-0\n    /**\n     * List of PSR-0 prefixes\n     *\n     * Structured as array('F (first letter)' => array('Foo\\Bar (full prefix)' => array('path', 'path2')))\n     *\n     * @var array<string, array<string, list<string>>>\n     */\n    private $prefixesPsr0 = array();\n    /**\n     * @var list<string>\n     */\n    private $fallbackDirsPsr0 = array();\n\n    /** @var bool */\n    private $useIncludePath = false;\n\n    /**\n     * @var array<string, string>\n     */\n    private $classMap = array();\n\n    /** @var bool */\n    private $classMapAuthoritative = false;\n\n    /**\n     * @var array<string, bool>\n     */\n    private $missingClasses = array();\n\n    /** @var string|null */\n    private $apcuPrefix;\n\n    /**\n     * @var array<string, self>\n     */\n    private static $registeredLoaders = array();\n\n    /**\n     * @param string|null $vendorDir\n     */\n    public function __construct($vendorDir = null)\n    {\n        $this->vendorDir = $vendorDir;\n        self::initializeIncludeClosure();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixes()\n    {\n        if (!empty($this->prefixesPsr0)) {\n            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));\n        }\n\n        return array();\n    }\n\n    /**\n     * @return array<string, list<string>>\n     */\n    public function getPrefixesPsr4()\n    {\n        return $this->prefixDirsPsr4;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirs()\n    {\n        return $this->fallbackDirsPsr0;\n    }\n\n    /**\n     * @return list<string>\n     */\n    public function getFallbackDirsPsr4()\n    {\n        return $this->fallbackDirsPsr4;\n    }\n\n    /**\n     * @return array<string, string> Array of classname => path\n     */\n    public function getClassMap()\n    {\n        return $this->classMap;\n    }\n\n    /**\n     * @param array<string, string> $classMap Class to filename map\n     *\n     * @return void\n     */\n    public function addClassMap(array $classMap)\n    {\n        if ($this->classMap) {\n            $this->classMap = array_merge($this->classMap, $classMap);\n        } else {\n            $this->classMap = $classMap;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix, either\n     * appending or prepending to the ones previously set for this prefix.\n     *\n     * @param string              $prefix  The prefix\n     * @param list<string>|string $paths   The PSR-0 root directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @return void\n     */\n    public function add($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            if ($prepend) {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr0\n                );\n            } else {\n                $this->fallbackDirsPsr0 = array_merge(\n                    $this->fallbackDirsPsr0,\n                    $paths\n                );\n            }\n\n            return;\n        }\n\n        $first = $prefix[0];\n        if (!isset($this->prefixesPsr0[$first][$prefix])) {\n            $this->prefixesPsr0[$first][$prefix] = $paths;\n\n            return;\n        }\n        if ($prepend) {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $paths,\n                $this->prefixesPsr0[$first][$prefix]\n            );\n        } else {\n            $this->prefixesPsr0[$first][$prefix] = array_merge(\n                $this->prefixesPsr0[$first][$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace, either\n     * appending or prepending to the ones previously set for this namespace.\n     *\n     * @param string              $prefix  The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths   The PSR-4 base directories\n     * @param bool                $prepend Whether to prepend the directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function addPsr4($prefix, $paths, $prepend = false)\n    {\n        $paths = (array) $paths;\n        if (!$prefix) {\n            // Register directories for the root namespace.\n            if ($prepend) {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $paths,\n                    $this->fallbackDirsPsr4\n                );\n            } else {\n                $this->fallbackDirsPsr4 = array_merge(\n                    $this->fallbackDirsPsr4,\n                    $paths\n                );\n            }\n        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {\n            // Register directories for a new namespace.\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = $paths;\n        } elseif ($prepend) {\n            // Prepend directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $paths,\n                $this->prefixDirsPsr4[$prefix]\n            );\n        } else {\n            // Append directories for an already registered namespace.\n            $this->prefixDirsPsr4[$prefix] = array_merge(\n                $this->prefixDirsPsr4[$prefix],\n                $paths\n            );\n        }\n    }\n\n    /**\n     * Registers a set of PSR-0 directories for a given prefix,\n     * replacing any others previously set for this prefix.\n     *\n     * @param string              $prefix The prefix\n     * @param list<string>|string $paths  The PSR-0 base directories\n     *\n     * @return void\n     */\n    public function set($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr0 = (array) $paths;\n        } else {\n            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Registers a set of PSR-4 directories for a given namespace,\n     * replacing any others previously set for this namespace.\n     *\n     * @param string              $prefix The prefix/namespace, with trailing '\\\\'\n     * @param list<string>|string $paths  The PSR-4 base directories\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return void\n     */\n    public function setPsr4($prefix, $paths)\n    {\n        if (!$prefix) {\n            $this->fallbackDirsPsr4 = (array) $paths;\n        } else {\n            $length = strlen($prefix);\n            if ('\\\\' !== $prefix[$length - 1]) {\n                throw new \\InvalidArgumentException(\"A non-empty PSR-4 prefix must end with a namespace separator.\");\n            }\n            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;\n            $this->prefixDirsPsr4[$prefix] = (array) $paths;\n        }\n    }\n\n    /**\n     * Turns on searching the include path for class files.\n     *\n     * @param bool $useIncludePath\n     *\n     * @return void\n     */\n    public function setUseIncludePath($useIncludePath)\n    {\n        $this->useIncludePath = $useIncludePath;\n    }\n\n    /**\n     * Can be used to check if the autoloader uses the include path to check\n     * for classes.\n     *\n     * @return bool\n     */\n    public function getUseIncludePath()\n    {\n        return $this->useIncludePath;\n    }\n\n    /**\n     * Turns off searching the prefix and fallback directories for classes\n     * that have not been registered with the class map.\n     *\n     * @param bool $classMapAuthoritative\n     *\n     * @return void\n     */\n    public function setClassMapAuthoritative($classMapAuthoritative)\n    {\n        $this->classMapAuthoritative = $classMapAuthoritative;\n    }\n\n    /**\n     * Should class lookup fail if not found in the current class map?\n     *\n     * @return bool\n     */\n    public function isClassMapAuthoritative()\n    {\n        return $this->classMapAuthoritative;\n    }\n\n    /**\n     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.\n     *\n     * @param string|null $apcuPrefix\n     *\n     * @return void\n     */\n    public function setApcuPrefix($apcuPrefix)\n    {\n        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;\n    }\n\n    /**\n     * The APCu prefix in use, or null if APCu caching is not enabled.\n     *\n     * @return string|null\n     */\n    public function getApcuPrefix()\n    {\n        return $this->apcuPrefix;\n    }\n\n    /**\n     * Registers this instance as an autoloader.\n     *\n     * @param bool $prepend Whether to prepend the autoloader or not\n     *\n     * @return void\n     */\n    public function register($prepend = false)\n    {\n        spl_autoload_register(array($this, 'loadClass'), true, $prepend);\n\n        if (null === $this->vendorDir) {\n            return;\n        }\n\n        if ($prepend) {\n            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;\n        } else {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n            self::$registeredLoaders[$this->vendorDir] = $this;\n        }\n    }\n\n    /**\n     * Unregisters this instance as an autoloader.\n     *\n     * @return void\n     */\n    public function unregister()\n    {\n        spl_autoload_unregister(array($this, 'loadClass'));\n\n        if (null !== $this->vendorDir) {\n            unset(self::$registeredLoaders[$this->vendorDir]);\n        }\n    }\n\n    /**\n     * Loads the given class or interface.\n     *\n     * @param  string    $class The name of the class\n     * @return true|null True if loaded, null otherwise\n     */\n    public function loadClass($class)\n    {\n        if ($file = $this->findFile($class)) {\n            $includeFile = self::$includeFile;\n            $includeFile($file);\n\n            return true;\n        }\n\n        return null;\n    }\n\n    /**\n     * Finds the path to the file where the class is defined.\n     *\n     * @param string $class The name of the class\n     *\n     * @return string|false The path if found, false otherwise\n     */\n    public function findFile($class)\n    {\n        // class map lookup\n        if (isset($this->classMap[$class])) {\n            return $this->classMap[$class];\n        }\n        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {\n            return false;\n        }\n        if (null !== $this->apcuPrefix) {\n            $file = apcu_fetch($this->apcuPrefix.$class, $hit);\n            if ($hit) {\n                return $file;\n            }\n        }\n\n        $file = $this->findFileWithExtension($class, '.php');\n\n        // Search for Hack files if we are running on HHVM\n        if (false === $file && defined('HHVM_VERSION')) {\n            $file = $this->findFileWithExtension($class, '.hh');\n        }\n\n        if (null !== $this->apcuPrefix) {\n            apcu_add($this->apcuPrefix.$class, $file);\n        }\n\n        if (false === $file) {\n            // Remember that this class does not exist.\n            $this->missingClasses[$class] = true;\n        }\n\n        return $file;\n    }\n\n    /**\n     * Returns the currently registered loaders keyed by their corresponding vendor directories.\n     *\n     * @return array<string, self>\n     */\n    public static function getRegisteredLoaders()\n    {\n        return self::$registeredLoaders;\n    }\n\n    /**\n     * @param  string       $class\n     * @param  string       $ext\n     * @return string|false\n     */\n    private function findFileWithExtension($class, $ext)\n    {\n        // PSR-4 lookup\n        $logicalPathPsr4 = strtr($class, '\\\\', DIRECTORY_SEPARATOR) . $ext;\n\n        $first = $class[0];\n        if (isset($this->prefixLengthsPsr4[$first])) {\n            $subPath = $class;\n            while (false !== $lastPos = strrpos($subPath, '\\\\')) {\n                $subPath = substr($subPath, 0, $lastPos);\n                $search = $subPath . '\\\\';\n                if (isset($this->prefixDirsPsr4[$search])) {\n                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);\n                    foreach ($this->prefixDirsPsr4[$search] as $dir) {\n                        if (file_exists($file = $dir . $pathEnd)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-4 fallback dirs\n        foreach ($this->fallbackDirsPsr4 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 lookup\n        if (false !== $pos = strrpos($class, '\\\\')) {\n            // namespaced class name\n            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)\n                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);\n        } else {\n            // PEAR-like class name\n            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;\n        }\n\n        if (isset($this->prefixesPsr0[$first])) {\n            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {\n                if (0 === strpos($class, $prefix)) {\n                    foreach ($dirs as $dir) {\n                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                            return $file;\n                        }\n                    }\n                }\n            }\n        }\n\n        // PSR-0 fallback dirs\n        foreach ($this->fallbackDirsPsr0 as $dir) {\n            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {\n                return $file;\n            }\n        }\n\n        // PSR-0 include paths.\n        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {\n            return $file;\n        }\n\n        return false;\n    }\n\n    /**\n     * @return void\n     */\n    private static function initializeIncludeClosure()\n    {\n        if (self::$includeFile !== null) {\n            return;\n        }\n\n        /**\n         * Scope isolated include.\n         *\n         * Prevents access to $this/self from included files.\n         *\n         * @param  string $file\n         * @return void\n         */\n        self::$includeFile = \\Closure::bind(static function($file) {\n            include $file;\n        }, null, null);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/InstalledVersions.php",
    "content": "<?php\n\n/*\n * This file is part of Composer.\n *\n * (c) Nils Adermann <naderman@naderman.de>\n *     Jordi Boggiano <j.boggiano@seld.be>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Composer;\n\nuse Composer\\Autoload\\ClassLoader;\nuse Composer\\Semver\\VersionParser;\n\n/**\n * This class is copied in every Composer installed project and available to all\n *\n * See also https://getcomposer.org/doc/07-runtime.md#installed-versions\n *\n * To require its presence, you can require `composer-runtime-api ^2.0`\n *\n * @final\n */\nclass InstalledVersions\n{\n    /**\n     * @var mixed[]|null\n     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null\n     */\n    private static $installed;\n\n    /**\n     * @var bool\n     */\n    private static $installedIsLocalDir;\n\n    /**\n     * @var bool|null\n     */\n    private static $canGetVendors;\n\n    /**\n     * @var array[]\n     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static $installedByVendor = array();\n\n    /**\n     * Returns a list of all package names which are present, either by being installed, replaced or provided\n     *\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackages()\n    {\n        $packages = array();\n        foreach (self::getInstalled() as $installed) {\n            $packages[] = array_keys($installed['versions']);\n        }\n\n        if (1 === \\count($packages)) {\n            return $packages[0];\n        }\n\n        return array_keys(array_flip(\\call_user_func_array('array_merge', $packages)));\n    }\n\n    /**\n     * Returns a list of all package names with a specific type e.g. 'library'\n     *\n     * @param  string   $type\n     * @return string[]\n     * @psalm-return list<string>\n     */\n    public static function getInstalledPackagesByType($type)\n    {\n        $packagesByType = array();\n\n        foreach (self::getInstalled() as $installed) {\n            foreach ($installed['versions'] as $name => $package) {\n                if (isset($package['type']) && $package['type'] === $type) {\n                    $packagesByType[] = $name;\n                }\n            }\n        }\n\n        return $packagesByType;\n    }\n\n    /**\n     * Checks whether the given package is installed\n     *\n     * This also returns true if the package name is provided or replaced by another package\n     *\n     * @param  string $packageName\n     * @param  bool   $includeDevRequirements\n     * @return bool\n     */\n    public static function isInstalled($packageName, $includeDevRequirements = true)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (isset($installed['versions'][$packageName])) {\n                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Checks whether the given package satisfies a version constraint\n     *\n     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:\n     *\n     *   Composer\\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')\n     *\n     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality\n     * @param  string        $packageName\n     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package\n     * @return bool\n     */\n    public static function satisfies(VersionParser $parser, $packageName, $constraint)\n    {\n        $constraint = $parser->parseConstraints((string) $constraint);\n        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));\n\n        return $provided->matches($constraint);\n    }\n\n    /**\n     * Returns a version constraint representing all the range(s) which are installed for a given package\n     *\n     * It is easier to use this via isInstalled() with the $constraint argument if you need to check\n     * whether a given version of a package is installed, and not just whether it exists\n     *\n     * @param  string $packageName\n     * @return string Version constraint usable with composer/semver\n     */\n    public static function getVersionRanges($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            $ranges = array();\n            if (isset($installed['versions'][$packageName]['pretty_version'])) {\n                $ranges[] = $installed['versions'][$packageName]['pretty_version'];\n            }\n            if (array_key_exists('aliases', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);\n            }\n            if (array_key_exists('replaced', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);\n            }\n            if (array_key_exists('provided', $installed['versions'][$packageName])) {\n                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);\n            }\n\n            return implode(' || ', $ranges);\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present\n     */\n    public static function getPrettyVersion($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['pretty_version'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['pretty_version'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference\n     */\n    public static function getReference($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            if (!isset($installed['versions'][$packageName]['reference'])) {\n                return null;\n            }\n\n            return $installed['versions'][$packageName]['reference'];\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @param  string      $packageName\n     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.\n     */\n    public static function getInstallPath($packageName)\n    {\n        foreach (self::getInstalled() as $installed) {\n            if (!isset($installed['versions'][$packageName])) {\n                continue;\n            }\n\n            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;\n        }\n\n        throw new \\OutOfBoundsException('Package \"' . $packageName . '\" is not installed');\n    }\n\n    /**\n     * @return array\n     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}\n     */\n    public static function getRootPackage()\n    {\n        $installed = self::getInstalled();\n\n        return $installed[0]['root'];\n    }\n\n    /**\n     * Returns the raw installed.php data for custom implementations\n     *\n     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.\n     * @return array[]\n     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}\n     */\n    public static function getRawData()\n    {\n        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                self::$installed = include __DIR__ . '/installed.php';\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        return self::$installed;\n    }\n\n    /**\n     * Returns the raw data of all installed.php which are currently loaded for custom implementations\n     *\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    public static function getAllRawData()\n    {\n        return self::getInstalled();\n    }\n\n    /**\n     * Lets you reload the static array from another file\n     *\n     * This is only useful for complex integrations in which a project needs to use\n     * this class but then also needs to execute another project's autoloader in process,\n     * and wants to ensure both projects have access to their version of installed.php.\n     *\n     * A typical case would be PHPUnit, where it would need to make sure it reads all\n     * the data it needs from this class, then call reload() with\n     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure\n     * the project in which it runs can then also use this class safely, without\n     * interference between PHPUnit's dependencies and the project's dependencies.\n     *\n     * @param  array[] $data A vendor/composer/installed.php data set\n     * @return void\n     *\n     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data\n     */\n    public static function reload($data)\n    {\n        self::$installed = $data;\n        self::$installedByVendor = array();\n\n        // when using reload, we disable the duplicate protection to ensure that self::$installed data is\n        // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,\n        // so we have to assume it does not, and that may result in duplicate data being returned when listing\n        // all installed packages for example\n        self::$installedIsLocalDir = false;\n    }\n\n    /**\n     * @return array[]\n     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>\n     */\n    private static function getInstalled()\n    {\n        if (null === self::$canGetVendors) {\n            self::$canGetVendors = method_exists('Composer\\Autoload\\ClassLoader', 'getRegisteredLoaders');\n        }\n\n        $installed = array();\n        $copiedLocalDir = false;\n\n        if (self::$canGetVendors) {\n            $selfDir = strtr(__DIR__, '\\\\', '/');\n            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {\n                $vendorDir = strtr($vendorDir, '\\\\', '/');\n                if (isset(self::$installedByVendor[$vendorDir])) {\n                    $installed[] = self::$installedByVendor[$vendorDir];\n                } elseif (is_file($vendorDir.'/composer/installed.php')) {\n                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                    $required = require $vendorDir.'/composer/installed.php';\n                    self::$installedByVendor[$vendorDir] = $required;\n                    $installed[] = $required;\n                    if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {\n                        self::$installed = $required;\n                        self::$installedIsLocalDir = true;\n                    }\n                }\n                if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {\n                    $copiedLocalDir = true;\n                }\n            }\n        }\n\n        if (null === self::$installed) {\n            // only require the installed.php file if this file is loaded from its dumped location,\n            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937\n            if (substr(__DIR__, -8, 1) !== 'C') {\n                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */\n                $required = require __DIR__ . '/installed.php';\n                self::$installed = $required;\n            } else {\n                self::$installed = array();\n            }\n        }\n\n        if (self::$installed !== array() && !$copiedLocalDir) {\n            $installed[] = self::$installed;\n        }\n\n        return $installed;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/LICENSE",
    "content": "\nCopyright (c) Nils Adermann, Jordi Boggiano\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/autoload_classmap.php",
    "content": "<?php\n\n// autoload_classmap.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',\n    'CURLStringFile' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',\n    'Composer\\\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',\n    'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',\n    'ReturnTypeWillChange' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php',\n    'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',\n    'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',\n    'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/autoload_files.php",
    "content": "<?php\n\n// autoload_files.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',\n    '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',\n    '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php',\n    'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',\n    '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',\n    'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',\n    'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php',\n    '60799491728b879e74601d83e38b2cad' => $vendorDir . '/illuminate/collections/helpers.php',\n    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',\n    '23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php',\n    '04c6c5c2f7095ccf6c481d3e53e1776f' => $vendorDir . '/mustangostang/spyc/Spyc.php',\n    '89efb1254ef2d1c5d80096acd12c4098' => $vendorDir . '/twig/twig/src/Resources/core.php',\n    'ffecb95d45175fd40f75be8a23b34f90' => $vendorDir . '/twig/twig/src/Resources/debug.php',\n    'c7baa00073ee9c61edf148c51917cfb4' => $vendorDir . '/twig/twig/src/Resources/escaper.php',\n    'f844ccf1d25df8663951193c3fc307c8' => $vendorDir . '/twig/twig/src/Resources/string_loader.php',\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/autoload_namespaces.php",
    "content": "<?php\n\n// autoload_namespaces.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'OAuth2' => array($vendorDir . '/bshaffer/oauth2-server-php/src'),\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/autoload_psr4.php",
    "content": "<?php\n\n// autoload_psr4.php @generated by Composer\n\n$vendorDir = dirname(__DIR__);\n$baseDir = dirname($vendorDir);\n\nreturn array(\n    'Twig\\\\' => array($vendorDir . '/twig/twig/src'),\n    'Symfony\\\\Polyfill\\\\Php81\\\\' => array($vendorDir . '/symfony/polyfill-php81'),\n    'Symfony\\\\Polyfill\\\\Php80\\\\' => array($vendorDir . '/symfony/polyfill-php80'),\n    'Symfony\\\\Polyfill\\\\Mbstring\\\\' => array($vendorDir . '/symfony/polyfill-mbstring'),\n    'Symfony\\\\Polyfill\\\\Ctype\\\\' => array($vendorDir . '/symfony/polyfill-ctype'),\n    'Symfony\\\\Contracts\\\\Translation\\\\' => array($vendorDir . '/symfony/translation-contracts'),\n    'Symfony\\\\Component\\\\Translation\\\\' => array($vendorDir . '/symfony/translation'),\n    'Stevenmaguire\\\\OAuth2\\\\Client\\\\' => array($vendorDir . '/stevenmaguire/oauth2-keycloak/src'),\n    'RobThree\\\\Auth\\\\' => array($vendorDir . '/robthree/twofactorauth/lib'),\n    'Psr\\\\SimpleCache\\\\' => array($vendorDir . '/psr/simple-cache/src'),\n    'Psr\\\\Log\\\\' => array($vendorDir . '/psr/log/src'),\n    'Psr\\\\Http\\\\Message\\\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),\n    'Psr\\\\Http\\\\Client\\\\' => array($vendorDir . '/psr/http-client/src'),\n    'Psr\\\\Container\\\\' => array($vendorDir . '/psr/container/src'),\n    'Psr\\\\Clock\\\\' => array($vendorDir . '/psr/clock/src'),\n    'PhpMimeMailParser\\\\' => array($vendorDir . '/php-mime-mail-parser/php-mime-mail-parser/src'),\n    'PHPMailer\\\\PHPMailer\\\\' => array($vendorDir . '/phpmailer/phpmailer/src'),\n    'MatthiasMullie\\\\PathConverter\\\\' => array($vendorDir . '/matthiasmullie/path-converter/src'),\n    'MatthiasMullie\\\\Minify\\\\' => array($vendorDir . '/matthiasmullie/minify/src'),\n    'League\\\\OAuth2\\\\Client\\\\' => array($vendorDir . '/league/oauth2-client/src'),\n    'LdapRecord\\\\' => array($vendorDir . '/directorytree/ldaprecord/src'),\n    'Illuminate\\\\Support\\\\' => array($vendorDir . '/illuminate/collections', $vendorDir . '/illuminate/macroable', $vendorDir . '/illuminate/conditionable'),\n    'Illuminate\\\\Contracts\\\\' => array($vendorDir . '/illuminate/contracts'),\n    'Html2Text\\\\' => array($vendorDir . '/soundasleep/html2text/src'),\n    'GuzzleHttp\\\\Psr7\\\\' => array($vendorDir . '/guzzlehttp/psr7/src'),\n    'GuzzleHttp\\\\Promise\\\\' => array($vendorDir . '/guzzlehttp/promises/src'),\n    'GuzzleHttp\\\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),\n    'Firebase\\\\JWT\\\\' => array($vendorDir . '/firebase/php-jwt/src'),\n    'Ddeboer\\\\Imap\\\\' => array($vendorDir . '/ddeboer/imap/src'),\n    'DASPRiD\\\\Enum\\\\' => array($vendorDir . '/dasprid/enum/src'),\n    'Carbon\\\\Doctrine\\\\' => array($vendorDir . '/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine'),\n    'Carbon\\\\' => array($vendorDir . '/nesbot/carbon/src/Carbon'),\n    'BaconQrCode\\\\' => array($vendorDir . '/bacon/bacon-qr-code/src'),\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/autoload_real.php",
    "content": "<?php\n\n// autoload_real.php @generated by Composer\n\nclass ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b\n{\n    private static $loader;\n\n    public static function loadClassLoader($class)\n    {\n        if ('Composer\\Autoload\\ClassLoader' === $class) {\n            require __DIR__ . '/ClassLoader.php';\n        }\n    }\n\n    /**\n     * @return \\Composer\\Autoload\\ClassLoader\n     */\n    public static function getLoader()\n    {\n        if (null !== self::$loader) {\n            return self::$loader;\n        }\n\n        require __DIR__ . '/platform_check.php';\n\n        spl_autoload_register(array('ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b', 'loadClassLoader'), true, true);\n        self::$loader = $loader = new \\Composer\\Autoload\\ClassLoader(\\dirname(__DIR__));\n        spl_autoload_unregister(array('ComposerAutoloaderInit873464e4bd965a3168f133248b1b218b', 'loadClassLoader'));\n\n        require __DIR__ . '/autoload_static.php';\n        call_user_func(\\Composer\\Autoload\\ComposerStaticInit873464e4bd965a3168f133248b1b218b::getInitializer($loader));\n\n        $loader->register(true);\n\n        $filesToLoad = \\Composer\\Autoload\\ComposerStaticInit873464e4bd965a3168f133248b1b218b::$files;\n        $requireFile = \\Closure::bind(static function ($fileIdentifier, $file) {\n            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {\n                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;\n\n                require $file;\n            }\n        }, null, null);\n        foreach ($filesToLoad as $fileIdentifier => $file) {\n            $requireFile($fileIdentifier, $file);\n        }\n\n        return $loader;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/autoload_static.php",
    "content": "<?php\n\n// autoload_static.php @generated by Composer\n\nnamespace Composer\\Autoload;\n\nclass ComposerStaticInit873464e4bd965a3168f133248b1b218b\n{\n    public static $files = array (\n        '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',\n        '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',\n        '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',\n        'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',\n        '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',\n        'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',\n        'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php',\n        '60799491728b879e74601d83e38b2cad' => __DIR__ . '/..' . '/illuminate/collections/helpers.php',\n        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',\n        '23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php',\n        '04c6c5c2f7095ccf6c481d3e53e1776f' => __DIR__ . '/..' . '/mustangostang/spyc/Spyc.php',\n        '89efb1254ef2d1c5d80096acd12c4098' => __DIR__ . '/..' . '/twig/twig/src/Resources/core.php',\n        'ffecb95d45175fd40f75be8a23b34f90' => __DIR__ . '/..' . '/twig/twig/src/Resources/debug.php',\n        'c7baa00073ee9c61edf148c51917cfb4' => __DIR__ . '/..' . '/twig/twig/src/Resources/escaper.php',\n        'f844ccf1d25df8663951193c3fc307c8' => __DIR__ . '/..' . '/twig/twig/src/Resources/string_loader.php',\n    );\n\n    public static $prefixLengthsPsr4 = array (\n        'T' => \n        array (\n            'Twig\\\\' => 5,\n        ),\n        'S' => \n        array (\n            'Symfony\\\\Polyfill\\\\Php81\\\\' => 23,\n            'Symfony\\\\Polyfill\\\\Php80\\\\' => 23,\n            'Symfony\\\\Polyfill\\\\Mbstring\\\\' => 26,\n            'Symfony\\\\Polyfill\\\\Ctype\\\\' => 23,\n            'Symfony\\\\Contracts\\\\Translation\\\\' => 30,\n            'Symfony\\\\Component\\\\Translation\\\\' => 30,\n            'Stevenmaguire\\\\OAuth2\\\\Client\\\\' => 28,\n        ),\n        'R' => \n        array (\n            'RobThree\\\\Auth\\\\' => 14,\n        ),\n        'P' => \n        array (\n            'Psr\\\\SimpleCache\\\\' => 16,\n            'Psr\\\\Log\\\\' => 8,\n            'Psr\\\\Http\\\\Message\\\\' => 17,\n            'Psr\\\\Http\\\\Client\\\\' => 16,\n            'Psr\\\\Container\\\\' => 14,\n            'Psr\\\\Clock\\\\' => 10,\n            'PhpMimeMailParser\\\\' => 18,\n            'PHPMailer\\\\PHPMailer\\\\' => 20,\n        ),\n        'M' => \n        array (\n            'MatthiasMullie\\\\PathConverter\\\\' => 29,\n            'MatthiasMullie\\\\Minify\\\\' => 22,\n        ),\n        'L' => \n        array (\n            'League\\\\OAuth2\\\\Client\\\\' => 21,\n            'LdapRecord\\\\' => 11,\n        ),\n        'I' => \n        array (\n            'Illuminate\\\\Support\\\\' => 19,\n            'Illuminate\\\\Contracts\\\\' => 21,\n        ),\n        'H' => \n        array (\n            'Html2Text\\\\' => 10,\n        ),\n        'G' => \n        array (\n            'GuzzleHttp\\\\Psr7\\\\' => 16,\n            'GuzzleHttp\\\\Promise\\\\' => 19,\n            'GuzzleHttp\\\\' => 11,\n        ),\n        'F' => \n        array (\n            'Firebase\\\\JWT\\\\' => 13,\n        ),\n        'D' => \n        array (\n            'Ddeboer\\\\Imap\\\\' => 13,\n            'DASPRiD\\\\Enum\\\\' => 13,\n        ),\n        'C' => \n        array (\n            'Carbon\\\\Doctrine\\\\' => 16,\n            'Carbon\\\\' => 7,\n        ),\n        'B' => \n        array (\n            'BaconQrCode\\\\' => 12,\n        ),\n    );\n\n    public static $prefixDirsPsr4 = array (\n        'Twig\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/twig/twig/src',\n        ),\n        'Symfony\\\\Polyfill\\\\Php81\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/symfony/polyfill-php81',\n        ),\n        'Symfony\\\\Polyfill\\\\Php80\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/symfony/polyfill-php80',\n        ),\n        'Symfony\\\\Polyfill\\\\Mbstring\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',\n        ),\n        'Symfony\\\\Polyfill\\\\Ctype\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',\n        ),\n        'Symfony\\\\Contracts\\\\Translation\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/symfony/translation-contracts',\n        ),\n        'Symfony\\\\Component\\\\Translation\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/symfony/translation',\n        ),\n        'Stevenmaguire\\\\OAuth2\\\\Client\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/stevenmaguire/oauth2-keycloak/src',\n        ),\n        'RobThree\\\\Auth\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/robthree/twofactorauth/lib',\n        ),\n        'Psr\\\\SimpleCache\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/psr/simple-cache/src',\n        ),\n        'Psr\\\\Log\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/psr/log/src',\n        ),\n        'Psr\\\\Http\\\\Message\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/psr/http-factory/src',\n            1 => __DIR__ . '/..' . '/psr/http-message/src',\n        ),\n        'Psr\\\\Http\\\\Client\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/psr/http-client/src',\n        ),\n        'Psr\\\\Container\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/psr/container/src',\n        ),\n        'Psr\\\\Clock\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/psr/clock/src',\n        ),\n        'PhpMimeMailParser\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/php-mime-mail-parser/php-mime-mail-parser/src',\n        ),\n        'PHPMailer\\\\PHPMailer\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src',\n        ),\n        'MatthiasMullie\\\\PathConverter\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/matthiasmullie/path-converter/src',\n        ),\n        'MatthiasMullie\\\\Minify\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/matthiasmullie/minify/src',\n        ),\n        'League\\\\OAuth2\\\\Client\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/league/oauth2-client/src',\n        ),\n        'LdapRecord\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/directorytree/ldaprecord/src',\n        ),\n        'Illuminate\\\\Support\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/illuminate/collections',\n            1 => __DIR__ . '/..' . '/illuminate/macroable',\n            2 => __DIR__ . '/..' . '/illuminate/conditionable',\n        ),\n        'Illuminate\\\\Contracts\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/illuminate/contracts',\n        ),\n        'Html2Text\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/soundasleep/html2text/src',\n        ),\n        'GuzzleHttp\\\\Psr7\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',\n        ),\n        'GuzzleHttp\\\\Promise\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/guzzlehttp/promises/src',\n        ),\n        'GuzzleHttp\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',\n        ),\n        'Firebase\\\\JWT\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/firebase/php-jwt/src',\n        ),\n        'Ddeboer\\\\Imap\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/ddeboer/imap/src',\n        ),\n        'DASPRiD\\\\Enum\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/dasprid/enum/src',\n        ),\n        'Carbon\\\\Doctrine\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/carbonphp/carbon-doctrine-types/src/Carbon/Doctrine',\n        ),\n        'Carbon\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon',\n        ),\n        'BaconQrCode\\\\' => \n        array (\n            0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/src',\n        ),\n    );\n\n    public static $prefixesPsr0 = array (\n        'O' => \n        array (\n            'OAuth2' => \n            array (\n                0 => __DIR__ . '/..' . '/bshaffer/oauth2-server-php/src',\n            ),\n        ),\n    );\n\n    public static $classMap = array (\n        'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',\n        'CURLStringFile' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php',\n        'Composer\\\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',\n        'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',\n        'ReturnTypeWillChange' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php',\n        'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',\n        'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',\n        'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',\n    );\n\n    public static function getInitializer(ClassLoader $loader)\n    {\n        return \\Closure::bind(function () use ($loader) {\n            $loader->prefixLengthsPsr4 = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$prefixLengthsPsr4;\n            $loader->prefixDirsPsr4 = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$prefixDirsPsr4;\n            $loader->prefixesPsr0 = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$prefixesPsr0;\n            $loader->classMap = ComposerStaticInit873464e4bd965a3168f133248b1b218b::$classMap;\n\n        }, null, ClassLoader::class);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/installed.json",
    "content": "{\n    \"packages\": [\n        {\n            \"name\": \"bacon/bacon-qr-code\",\n            \"version\": \"2.0.8\",\n            \"version_normalized\": \"2.0.8.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/Bacon/BaconQrCode.git\",\n                \"reference\": \"8674e51bb65af933a5ffaf1c308a660387c35c22\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/Bacon/BaconQrCode/zipball/8674e51bb65af933a5ffaf1c308a660387c35c22\",\n                \"reference\": \"8674e51bb65af933a5ffaf1c308a660387c35c22\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"dasprid/enum\": \"^1.0.3\",\n                \"ext-iconv\": \"*\",\n                \"php\": \"^7.1 || ^8.0\"\n            },\n            \"require-dev\": {\n                \"phly/keep-a-changelog\": \"^2.1\",\n                \"phpunit/phpunit\": \"^7 | ^8 | ^9\",\n                \"spatie/phpunit-snapshot-assertions\": \"^4.2.9\",\n                \"squizlabs/php_codesniffer\": \"^3.4\"\n            },\n            \"suggest\": {\n                \"ext-imagick\": \"to generate QR code images\"\n            },\n            \"time\": \"2022-12-07T17:46:57+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"BaconQrCode\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-2-Clause\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Ben Scholzen 'DASPRiD'\",\n                    \"email\": \"mail@dasprids.de\",\n                    \"homepage\": \"https://dasprids.de/\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"BaconQrCode is a QR code generator for PHP.\",\n            \"homepage\": \"https://github.com/Bacon/BaconQrCode\",\n            \"support\": {\n                \"issues\": \"https://github.com/Bacon/BaconQrCode/issues\",\n                \"source\": \"https://github.com/Bacon/BaconQrCode/tree/2.0.8\"\n            },\n            \"install-path\": \"../bacon/bacon-qr-code\"\n        },\n        {\n            \"name\": \"bshaffer/oauth2-server-php\",\n            \"version\": \"v1.11.1\",\n            \"version_normalized\": \"1.11.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/bshaffer/oauth2-server-php.git\",\n                \"reference\": \"5a0c8000d4763b276919e2106f54eddda6bc50fa\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/bshaffer/oauth2-server-php/zipball/5a0c8000d4763b276919e2106f54eddda6bc50fa\",\n                \"reference\": \"5a0c8000d4763b276919e2106f54eddda6bc50fa\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.3.9\"\n            },\n            \"require-dev\": {\n                \"aws/aws-sdk-php\": \"~2.8\",\n                \"firebase/php-jwt\": \"~2.2\",\n                \"mongodb/mongodb\": \"^1.1\",\n                \"phpunit/phpunit\": \"^4.0\",\n                \"predis/predis\": \"dev-master\",\n                \"thobbs/phpcassa\": \"dev-master\"\n            },\n            \"suggest\": {\n                \"aws/aws-sdk-php\": \"~2.8 is required to use DynamoDB storage\",\n                \"firebase/php-jwt\": \"~2.2 is required to use JWT features\",\n                \"mongodb/mongodb\": \"^1.1 is required to use MongoDB storage\",\n                \"predis/predis\": \"Required to use Redis storage\",\n                \"thobbs/phpcassa\": \"Required to use Cassandra storage\"\n            },\n            \"time\": \"2018-12-04T00:29:32+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-0\": {\n                    \"OAuth2\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Brent Shaffer\",\n                    \"email\": \"bshafs@gmail.com\",\n                    \"homepage\": \"http://brentertainment.com\"\n                }\n            ],\n            \"description\": \"OAuth2 Server for PHP\",\n            \"homepage\": \"http://github.com/bshaffer/oauth2-server-php\",\n            \"keywords\": [\n                \"auth\",\n                \"oauth\",\n                \"oauth2\"\n            ],\n            \"install-path\": \"../bshaffer/oauth2-server-php\"\n        },\n        {\n            \"name\": \"carbonphp/carbon-doctrine-types\",\n            \"version\": \"3.2.0\",\n            \"version_normalized\": \"3.2.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/CarbonPHP/carbon-doctrine-types.git\",\n                \"reference\": \"18ba5ddfec8976260ead6e866180bd5d2f71aa1d\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d\",\n                \"reference\": \"18ba5ddfec8976260ead6e866180bd5d2f71aa1d\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.1\"\n            },\n            \"conflict\": {\n                \"doctrine/dbal\": \"<4.0.0 || >=5.0.0\"\n            },\n            \"require-dev\": {\n                \"doctrine/dbal\": \"^4.0.0\",\n                \"nesbot/carbon\": \"^2.71.0 || ^3.0.0\",\n                \"phpunit/phpunit\": \"^10.3\"\n            },\n            \"time\": \"2024-02-09T16:56:22+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Carbon\\\\Doctrine\\\\\": \"src/Carbon/Doctrine/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"KyleKatarn\",\n                    \"email\": \"kylekatarnls@gmail.com\"\n                }\n            ],\n            \"description\": \"Types to use Carbon in Doctrine\",\n            \"keywords\": [\n                \"carbon\",\n                \"date\",\n                \"datetime\",\n                \"doctrine\",\n                \"time\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/CarbonPHP/carbon-doctrine-types/issues\",\n                \"source\": \"https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/kylekatarnls\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://opencollective.com/Carbon\",\n                    \"type\": \"open_collective\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/nesbot/carbon\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../carbonphp/carbon-doctrine-types\"\n        },\n        {\n            \"name\": \"dasprid/enum\",\n            \"version\": \"1.0.7\",\n            \"version_normalized\": \"1.0.7.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/DASPRiD/Enum.git\",\n                \"reference\": \"b5874fa9ed0043116c72162ec7f4fb50e02e7cce\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce\",\n                \"reference\": \"b5874fa9ed0043116c72162ec7f4fb50e02e7cce\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.1 <9.0\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"^7 || ^8 || ^9 || ^10 || ^11\",\n                \"squizlabs/php_codesniffer\": \"*\"\n            },\n            \"time\": \"2025-09-16T12:23:56+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"DASPRiD\\\\Enum\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-2-Clause\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Ben Scholzen 'DASPRiD'\",\n                    \"email\": \"mail@dasprids.de\",\n                    \"homepage\": \"https://dasprids.de/\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"PHP 7.1 enum implementation\",\n            \"keywords\": [\n                \"enum\",\n                \"map\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/DASPRiD/Enum/issues\",\n                \"source\": \"https://github.com/DASPRiD/Enum/tree/1.0.7\"\n            },\n            \"install-path\": \"../dasprid/enum\"\n        },\n        {\n            \"name\": \"ddeboer/imap\",\n            \"version\": \"1.13.1\",\n            \"version_normalized\": \"1.13.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/ddeboer/imap.git\",\n                \"reference\": \"8b772d04b1deadb5df13782fb78c4b648f77496e\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/ddeboer/imap/zipball/8b772d04b1deadb5df13782fb78c4b648f77496e\",\n                \"reference\": \"8b772d04b1deadb5df13782fb78c4b648f77496e\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-iconv\": \"*\",\n                \"ext-imap\": \"*\",\n                \"ext-mbstring\": \"*\",\n                \"php\": \"^8.0.1\"\n            },\n            \"require-dev\": {\n                \"friendsofphp/php-cs-fixer\": \"^v3.4.0\",\n                \"laminas/laminas-mail\": \"^2.15.1\",\n                \"malukenho/mcbumpface\": \"^1.1.5\",\n                \"phpstan/phpstan\": \"^1.3.3\",\n                \"phpstan/phpstan-phpunit\": \"^1.0.0\",\n                \"phpstan/phpstan-strict-rules\": \"^1.1.0\",\n                \"phpunit/phpunit\": \"^9.5.11\"\n            },\n            \"time\": \"2022-01-10T10:53:05+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Ddeboer\\\\Imap\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"David de Boer\",\n                    \"email\": \"david@ddeboer.nl\"\n                },\n                {\n                    \"name\": \"Filippo Tessarotto\",\n                    \"email\": \"zoeslam@gmail.com\"\n                },\n                {\n                    \"name\": \"Community contributors\",\n                    \"homepage\": \"https://github.com/ddeboer/imap/graphs/contributors\"\n                }\n            ],\n            \"description\": \"Object-oriented IMAP for PHP\",\n            \"keywords\": [\n                \"email\",\n                \"imap\",\n                \"mail\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/ddeboer/imap/issues\",\n                \"source\": \"https://github.com/ddeboer/imap/tree/1.13.1\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/Slamdunk\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/ddeboer\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../ddeboer/imap\"\n        },\n        {\n            \"name\": \"directorytree/ldaprecord\",\n            \"version\": \"v3.8.5\",\n            \"version_normalized\": \"3.8.5.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/DirectoryTree/LdapRecord.git\",\n                \"reference\": \"00e5f088f8c4028d5f398783cccc2e8119a27a65\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/00e5f088f8c4028d5f398783cccc2e8119a27a65\",\n                \"reference\": \"00e5f088f8c4028d5f398783cccc2e8119a27a65\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-iconv\": \"*\",\n                \"ext-json\": \"*\",\n                \"ext-ldap\": \"*\",\n                \"illuminate/collections\": \"^8.0|^9.0|^10.0|^11.0|^12.0\",\n                \"illuminate/contracts\": \"^8.0|^9.0|^10.0|^11.0|^12.0\",\n                \"nesbot/carbon\": \"*\",\n                \"php\": \">=8.1\",\n                \"psr/log\": \"*\",\n                \"psr/simple-cache\": \"^1.0|^2.0|^3.0\"\n            },\n            \"require-dev\": {\n                \"fakerphp/faker\": \"^1.21\",\n                \"laravel/pint\": \"^1.6\",\n                \"mockery/mockery\": \"^1.0\",\n                \"phpunit/phpunit\": \"^9.0\",\n                \"spatie/ray\": \"^1.24\"\n            },\n            \"time\": \"2025-10-06T02:22:34+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"LdapRecord\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Steve Bauman\",\n                    \"email\": \"steven_bauman@outlook.com\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"A fully-featured LDAP ORM.\",\n            \"homepage\": \"https://www.ldaprecord.com\",\n            \"keywords\": [\n                \"active directory\",\n                \"ad\",\n                \"adLDAP\",\n                \"adldap2\",\n                \"directory\",\n                \"ldap\",\n                \"ldaprecord\",\n                \"orm\",\n                \"windows\"\n            ],\n            \"support\": {\n                \"docs\": \"https://ldaprecord.com\",\n                \"email\": \"steven_bauman@outlook.com\",\n                \"issues\": \"https://github.com/DirectoryTree/LdapRecord/issues\",\n                \"source\": \"https://github.com/DirectoryTree/LdapRecord\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/stevebauman\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../directorytree/ldaprecord\"\n        },\n        {\n            \"name\": \"firebase/php-jwt\",\n            \"version\": \"v6.5.0\",\n            \"version_normalized\": \"6.5.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/firebase/php-jwt.git\",\n                \"reference\": \"e94e7353302b0c11ec3cfff7180cd0b1743975d2\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/firebase/php-jwt/zipball/e94e7353302b0c11ec3cfff7180cd0b1743975d2\",\n                \"reference\": \"e94e7353302b0c11ec3cfff7180cd0b1743975d2\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.4||^8.0\"\n            },\n            \"require-dev\": {\n                \"guzzlehttp/guzzle\": \"^6.5||^7.4\",\n                \"phpspec/prophecy-phpunit\": \"^2.0\",\n                \"phpunit/phpunit\": \"^9.5\",\n                \"psr/cache\": \"^1.0||^2.0\",\n                \"psr/http-client\": \"^1.0\",\n                \"psr/http-factory\": \"^1.0\"\n            },\n            \"suggest\": {\n                \"ext-sodium\": \"Support EdDSA (Ed25519) signatures\",\n                \"paragonie/sodium_compat\": \"Support EdDSA (Ed25519) signatures when libsodium is not present\"\n            },\n            \"time\": \"2023-05-12T15:47:07+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Firebase\\\\JWT\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-3-Clause\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Neuman Vong\",\n                    \"email\": \"neuman+pear@twilio.com\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Anant Narayanan\",\n                    \"email\": \"anant@php.net\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.\",\n            \"homepage\": \"https://github.com/firebase/php-jwt\",\n            \"keywords\": [\n                \"jwt\",\n                \"php\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/firebase/php-jwt/issues\",\n                \"source\": \"https://github.com/firebase/php-jwt/tree/v6.5.0\"\n            },\n            \"install-path\": \"../firebase/php-jwt\"\n        },\n        {\n            \"name\": \"guzzlehttp/guzzle\",\n            \"version\": \"7.5.0\",\n            \"version_normalized\": \"7.5.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/guzzle/guzzle.git\",\n                \"reference\": \"b50a2a1251152e43f6a37f0fa053e730a67d25ba\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba\",\n                \"reference\": \"b50a2a1251152e43f6a37f0fa053e730a67d25ba\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-json\": \"*\",\n                \"guzzlehttp/promises\": \"^1.5\",\n                \"guzzlehttp/psr7\": \"^1.9 || ^2.4\",\n                \"php\": \"^7.2.5 || ^8.0\",\n                \"psr/http-client\": \"^1.0\",\n                \"symfony/deprecation-contracts\": \"^2.2 || ^3.0\"\n            },\n            \"provide\": {\n                \"psr/http-client-implementation\": \"1.0\"\n            },\n            \"require-dev\": {\n                \"bamarni/composer-bin-plugin\": \"^1.8.1\",\n                \"ext-curl\": \"*\",\n                \"php-http/client-integration-tests\": \"^3.0\",\n                \"phpunit/phpunit\": \"^8.5.29 || ^9.5.23\",\n                \"psr/log\": \"^1.1 || ^2.0 || ^3.0\"\n            },\n            \"suggest\": {\n                \"ext-curl\": \"Required for CURL handler support\",\n                \"ext-intl\": \"Required for Internationalized Domain Name (IDN) support\",\n                \"psr/log\": \"Required for using the Log middleware\"\n            },\n            \"time\": \"2022-08-28T15:39:27+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"bamarni-bin\": {\n                    \"bin-links\": true,\n                    \"forward-command\": false\n                },\n                \"branch-alias\": {\n                    \"dev-master\": \"7.5-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/functions_include.php\"\n                ],\n                \"psr-4\": {\n                    \"GuzzleHttp\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"hello@gjcampbell.co.uk\",\n                    \"homepage\": \"https://github.com/GrahamCampbell\"\n                },\n                {\n                    \"name\": \"Michael Dowling\",\n                    \"email\": \"mtdowling@gmail.com\",\n                    \"homepage\": \"https://github.com/mtdowling\"\n                },\n                {\n                    \"name\": \"Jeremy Lindblom\",\n                    \"email\": \"jeremeamia@gmail.com\",\n                    \"homepage\": \"https://github.com/jeremeamia\"\n                },\n                {\n                    \"name\": \"George Mponos\",\n                    \"email\": \"gmponos@gmail.com\",\n                    \"homepage\": \"https://github.com/gmponos\"\n                },\n                {\n                    \"name\": \"Tobias Nyholm\",\n                    \"email\": \"tobias.nyholm@gmail.com\",\n                    \"homepage\": \"https://github.com/Nyholm\"\n                },\n                {\n                    \"name\": \"Márk Sági-Kazár\",\n                    \"email\": \"mark.sagikazar@gmail.com\",\n                    \"homepage\": \"https://github.com/sagikazarmark\"\n                },\n                {\n                    \"name\": \"Tobias Schultze\",\n                    \"email\": \"webmaster@tubo-world.de\",\n                    \"homepage\": \"https://github.com/Tobion\"\n                }\n            ],\n            \"description\": \"Guzzle is a PHP HTTP client library\",\n            \"keywords\": [\n                \"client\",\n                \"curl\",\n                \"framework\",\n                \"http\",\n                \"http client\",\n                \"psr-18\",\n                \"psr-7\",\n                \"rest\",\n                \"web service\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/guzzle/guzzle/issues\",\n                \"source\": \"https://github.com/guzzle/guzzle/tree/7.5.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/GrahamCampbell\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/Nyholm\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../guzzlehttp/guzzle\"\n        },\n        {\n            \"name\": \"guzzlehttp/promises\",\n            \"version\": \"1.5.2\",\n            \"version_normalized\": \"1.5.2.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/guzzle/promises.git\",\n                \"reference\": \"b94b2807d85443f9719887892882d0329d1e2598\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598\",\n                \"reference\": \"b94b2807d85443f9719887892882d0329d1e2598\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.5\"\n            },\n            \"require-dev\": {\n                \"symfony/phpunit-bridge\": \"^4.4 || ^5.1\"\n            },\n            \"time\": \"2022-08-28T14:55:35+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.5-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/functions_include.php\"\n                ],\n                \"psr-4\": {\n                    \"GuzzleHttp\\\\Promise\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"hello@gjcampbell.co.uk\",\n                    \"homepage\": \"https://github.com/GrahamCampbell\"\n                },\n                {\n                    \"name\": \"Michael Dowling\",\n                    \"email\": \"mtdowling@gmail.com\",\n                    \"homepage\": \"https://github.com/mtdowling\"\n                },\n                {\n                    \"name\": \"Tobias Nyholm\",\n                    \"email\": \"tobias.nyholm@gmail.com\",\n                    \"homepage\": \"https://github.com/Nyholm\"\n                },\n                {\n                    \"name\": \"Tobias Schultze\",\n                    \"email\": \"webmaster@tubo-world.de\",\n                    \"homepage\": \"https://github.com/Tobion\"\n                }\n            ],\n            \"description\": \"Guzzle promises library\",\n            \"keywords\": [\n                \"promise\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/guzzle/promises/issues\",\n                \"source\": \"https://github.com/guzzle/promises/tree/1.5.2\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/GrahamCampbell\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/Nyholm\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/guzzlehttp/promises\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../guzzlehttp/promises\"\n        },\n        {\n            \"name\": \"guzzlehttp/psr7\",\n            \"version\": \"2.4.5\",\n            \"version_normalized\": \"2.4.5.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/guzzle/psr7.git\",\n                \"reference\": \"0454e12ef0cd597ccd2adb036f7bda4e7fface66\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/guzzle/psr7/zipball/0454e12ef0cd597ccd2adb036f7bda4e7fface66\",\n                \"reference\": \"0454e12ef0cd597ccd2adb036f7bda4e7fface66\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.2.5 || ^8.0\",\n                \"psr/http-factory\": \"^1.0\",\n                \"psr/http-message\": \"^1.0\",\n                \"ralouphie/getallheaders\": \"^3.0\"\n            },\n            \"provide\": {\n                \"psr/http-factory-implementation\": \"1.0\",\n                \"psr/http-message-implementation\": \"1.0\"\n            },\n            \"require-dev\": {\n                \"bamarni/composer-bin-plugin\": \"^1.8.1\",\n                \"http-interop/http-factory-tests\": \"^0.9\",\n                \"phpunit/phpunit\": \"^8.5.29 || ^9.5.23\"\n            },\n            \"suggest\": {\n                \"laminas/laminas-httphandlerrunner\": \"Emit PSR-7 responses\"\n            },\n            \"time\": \"2023-04-17T16:00:45+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"bamarni-bin\": {\n                    \"bin-links\": true,\n                    \"forward-command\": false\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"GuzzleHttp\\\\Psr7\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Graham Campbell\",\n                    \"email\": \"hello@gjcampbell.co.uk\",\n                    \"homepage\": \"https://github.com/GrahamCampbell\"\n                },\n                {\n                    \"name\": \"Michael Dowling\",\n                    \"email\": \"mtdowling@gmail.com\",\n                    \"homepage\": \"https://github.com/mtdowling\"\n                },\n                {\n                    \"name\": \"George Mponos\",\n                    \"email\": \"gmponos@gmail.com\",\n                    \"homepage\": \"https://github.com/gmponos\"\n                },\n                {\n                    \"name\": \"Tobias Nyholm\",\n                    \"email\": \"tobias.nyholm@gmail.com\",\n                    \"homepage\": \"https://github.com/Nyholm\"\n                },\n                {\n                    \"name\": \"Márk Sági-Kazár\",\n                    \"email\": \"mark.sagikazar@gmail.com\",\n                    \"homepage\": \"https://github.com/sagikazarmark\"\n                },\n                {\n                    \"name\": \"Tobias Schultze\",\n                    \"email\": \"webmaster@tubo-world.de\",\n                    \"homepage\": \"https://github.com/Tobion\"\n                },\n                {\n                    \"name\": \"Márk Sági-Kazár\",\n                    \"email\": \"mark.sagikazar@gmail.com\",\n                    \"homepage\": \"https://sagikazarmark.hu\"\n                }\n            ],\n            \"description\": \"PSR-7 message implementation that also provides common utility methods\",\n            \"keywords\": [\n                \"http\",\n                \"message\",\n                \"psr-7\",\n                \"request\",\n                \"response\",\n                \"stream\",\n                \"uri\",\n                \"url\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/guzzle/psr7/issues\",\n                \"source\": \"https://github.com/guzzle/psr7/tree/2.4.5\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/GrahamCampbell\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/Nyholm\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/guzzlehttp/psr7\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../guzzlehttp/psr7\"\n        },\n        {\n            \"name\": \"illuminate/collections\",\n            \"version\": \"v10.49.0\",\n            \"version_normalized\": \"10.49.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/illuminate/collections.git\",\n                \"reference\": \"6ae9c74fa92d4e1824d1b346cd435e8eacdc3232\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/illuminate/collections/zipball/6ae9c74fa92d4e1824d1b346cd435e8eacdc3232\",\n                \"reference\": \"6ae9c74fa92d4e1824d1b346cd435e8eacdc3232\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"illuminate/conditionable\": \"^10.0\",\n                \"illuminate/contracts\": \"^10.0\",\n                \"illuminate/macroable\": \"^10.0\",\n                \"php\": \"^8.1\"\n            },\n            \"suggest\": {\n                \"symfony/var-dumper\": \"Required to use the dump method (^6.2).\"\n            },\n            \"time\": \"2025-09-08T19:05:53+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"10.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"helpers.php\"\n                ],\n                \"psr-4\": {\n                    \"Illuminate\\\\Support\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Taylor Otwell\",\n                    \"email\": \"taylor@laravel.com\"\n                }\n            ],\n            \"description\": \"The Illuminate Collections package.\",\n            \"homepage\": \"https://laravel.com\",\n            \"support\": {\n                \"issues\": \"https://github.com/laravel/framework/issues\",\n                \"source\": \"https://github.com/laravel/framework\"\n            },\n            \"install-path\": \"../illuminate/collections\"\n        },\n        {\n            \"name\": \"illuminate/conditionable\",\n            \"version\": \"v10.49.0\",\n            \"version_normalized\": \"10.49.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/illuminate/conditionable.git\",\n                \"reference\": \"47c700320b7a419f0d188d111f3bbed978fcbd3f\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/illuminate/conditionable/zipball/47c700320b7a419f0d188d111f3bbed978fcbd3f\",\n                \"reference\": \"47c700320b7a419f0d188d111f3bbed978fcbd3f\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.0.2\"\n            },\n            \"time\": \"2025-03-24T11:47:24+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"10.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Illuminate\\\\Support\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Taylor Otwell\",\n                    \"email\": \"taylor@laravel.com\"\n                }\n            ],\n            \"description\": \"The Illuminate Conditionable package.\",\n            \"homepage\": \"https://laravel.com\",\n            \"support\": {\n                \"issues\": \"https://github.com/laravel/framework/issues\",\n                \"source\": \"https://github.com/laravel/framework\"\n            },\n            \"install-path\": \"../illuminate/conditionable\"\n        },\n        {\n            \"name\": \"illuminate/contracts\",\n            \"version\": \"v10.44.0\",\n            \"version_normalized\": \"10.44.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/illuminate/contracts.git\",\n                \"reference\": \"8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/illuminate/contracts/zipball/8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac\",\n                \"reference\": \"8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.1\",\n                \"psr/container\": \"^1.1.1|^2.0.1\",\n                \"psr/simple-cache\": \"^1.0|^2.0|^3.0\"\n            },\n            \"time\": \"2024-01-15T18:52:32+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"10.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Illuminate\\\\Contracts\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Taylor Otwell\",\n                    \"email\": \"taylor@laravel.com\"\n                }\n            ],\n            \"description\": \"The Illuminate Contracts package.\",\n            \"homepage\": \"https://laravel.com\",\n            \"support\": {\n                \"issues\": \"https://github.com/laravel/framework/issues\",\n                \"source\": \"https://github.com/laravel/framework\"\n            },\n            \"install-path\": \"../illuminate/contracts\"\n        },\n        {\n            \"name\": \"illuminate/macroable\",\n            \"version\": \"v10.49.0\",\n            \"version_normalized\": \"10.49.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/illuminate/macroable.git\",\n                \"reference\": \"dff667a46ac37b634dcf68909d9d41e94dc97c27\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27\",\n                \"reference\": \"dff667a46ac37b634dcf68909d9d41e94dc97c27\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^8.1\"\n            },\n            \"time\": \"2023-06-05T12:46:42+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"10.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Illuminate\\\\Support\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Taylor Otwell\",\n                    \"email\": \"taylor@laravel.com\"\n                }\n            ],\n            \"description\": \"The Illuminate Macroable package.\",\n            \"homepage\": \"https://laravel.com\",\n            \"support\": {\n                \"issues\": \"https://github.com/laravel/framework/issues\",\n                \"source\": \"https://github.com/laravel/framework\"\n            },\n            \"install-path\": \"../illuminate/macroable\"\n        },\n        {\n            \"name\": \"league/oauth2-client\",\n            \"version\": \"2.7.0\",\n            \"version_normalized\": \"2.7.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/thephpleague/oauth2-client.git\",\n                \"reference\": \"160d6274b03562ebeb55ed18399281d8118b76c8\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/thephpleague/oauth2-client/zipball/160d6274b03562ebeb55ed18399281d8118b76c8\",\n                \"reference\": \"160d6274b03562ebeb55ed18399281d8118b76c8\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"guzzlehttp/guzzle\": \"^6.0 || ^7.0\",\n                \"paragonie/random_compat\": \"^1 || ^2 || ^9.99\",\n                \"php\": \"^5.6 || ^7.0 || ^8.0\"\n            },\n            \"require-dev\": {\n                \"mockery/mockery\": \"^1.3.5\",\n                \"php-parallel-lint/php-parallel-lint\": \"^1.3.1\",\n                \"phpunit/phpunit\": \"^5.7 || ^6.0 || ^9.5\",\n                \"squizlabs/php_codesniffer\": \"^2.3 || ^3.0\"\n            },\n            \"time\": \"2023-04-16T18:19:15+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-2.x\": \"2.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"League\\\\OAuth2\\\\Client\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Alex Bilbie\",\n                    \"email\": \"hello@alexbilbie.com\",\n                    \"homepage\": \"http://www.alexbilbie.com\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"Woody Gilk\",\n                    \"homepage\": \"https://github.com/shadowhand\",\n                    \"role\": \"Contributor\"\n                }\n            ],\n            \"description\": \"OAuth 2.0 Client Library\",\n            \"keywords\": [\n                \"Authentication\",\n                \"SSO\",\n                \"authorization\",\n                \"identity\",\n                \"idp\",\n                \"oauth\",\n                \"oauth2\",\n                \"single sign on\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/thephpleague/oauth2-client/issues\",\n                \"source\": \"https://github.com/thephpleague/oauth2-client/tree/2.7.0\"\n            },\n            \"install-path\": \"../league/oauth2-client\"\n        },\n        {\n            \"name\": \"matthiasmullie/minify\",\n            \"version\": \"1.3.66\",\n            \"version_normalized\": \"1.3.66.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/matthiasmullie/minify.git\",\n                \"reference\": \"45fd3b0f1dfa2c965857c6d4a470bea52adc31a6\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/matthiasmullie/minify/zipball/45fd3b0f1dfa2c965857c6d4a470bea52adc31a6\",\n                \"reference\": \"45fd3b0f1dfa2c965857c6d4a470bea52adc31a6\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-pcre\": \"*\",\n                \"matthiasmullie/path-converter\": \"~1.1\",\n                \"php\": \">=5.3.0\"\n            },\n            \"require-dev\": {\n                \"friendsofphp/php-cs-fixer\": \"~2.0\",\n                \"matthiasmullie/scrapbook\": \"dev-master\",\n                \"phpunit/phpunit\": \">=4.8\"\n            },\n            \"suggest\": {\n                \"psr/cache-implementation\": \"Cache implementation to use with Minify::cache\"\n            },\n            \"time\": \"2021-01-06T15:18:10+00:00\",\n            \"bin\": [\n                \"bin/minifycss\",\n                \"bin/minifyjs\"\n            ],\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"MatthiasMullie\\\\Minify\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Matthias Mullie\",\n                    \"email\": \"minify@mullie.eu\",\n                    \"homepage\": \"http://www.mullie.eu\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.\",\n            \"homepage\": \"http://www.minifier.org\",\n            \"keywords\": [\n                \"JS\",\n                \"css\",\n                \"javascript\",\n                \"minifier\",\n                \"minify\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/matthiasmullie/minify/issues\",\n                \"source\": \"https://github.com/matthiasmullie/minify/tree/1.3.66\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/[user1\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/matthiasmullie] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g.\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://github.com/user2\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../matthiasmullie/minify\"\n        },\n        {\n            \"name\": \"matthiasmullie/path-converter\",\n            \"version\": \"1.1.3\",\n            \"version_normalized\": \"1.1.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/matthiasmullie/path-converter.git\",\n                \"reference\": \"e7d13b2c7e2f2268e1424aaed02085518afa02d9\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/matthiasmullie/path-converter/zipball/e7d13b2c7e2f2268e1424aaed02085518afa02d9\",\n                \"reference\": \"e7d13b2c7e2f2268e1424aaed02085518afa02d9\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-pcre\": \"*\",\n                \"php\": \">=5.3.0\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"~4.8\"\n            },\n            \"time\": \"2019-02-05T23:41:09+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"MatthiasMullie\\\\PathConverter\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Matthias Mullie\",\n                    \"email\": \"pathconverter@mullie.eu\",\n                    \"homepage\": \"http://www.mullie.eu\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"Relative path converter\",\n            \"homepage\": \"http://github.com/matthiasmullie/path-converter\",\n            \"keywords\": [\n                \"converter\",\n                \"path\",\n                \"paths\",\n                \"relative\"\n            ],\n            \"install-path\": \"../matthiasmullie/path-converter\"\n        },\n        {\n            \"name\": \"mustangostang/spyc\",\n            \"version\": \"0.6.3\",\n            \"version_normalized\": \"0.6.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"git@github.com:mustangostang/spyc.git\",\n                \"reference\": \"4627c838b16550b666d15aeae1e5289dd5b77da0\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0\",\n                \"reference\": \"4627c838b16550b666d15aeae1e5289dd5b77da0\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.3.1\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"4.3.*@dev\"\n            },\n            \"time\": \"2019-09-10T13:16:29+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"0.5.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"Spyc.php\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"mustangostang\",\n                    \"email\": \"vlad.andersen@gmail.com\"\n                }\n            ],\n            \"description\": \"A simple YAML loader/dumper class for PHP\",\n            \"homepage\": \"https://github.com/mustangostang/spyc/\",\n            \"keywords\": [\n                \"spyc\",\n                \"yaml\",\n                \"yml\"\n            ],\n            \"install-path\": \"../mustangostang/spyc\"\n        },\n        {\n            \"name\": \"nesbot/carbon\",\n            \"version\": \"2.72.3\",\n            \"version_normalized\": \"2.72.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/briannesbitt/Carbon.git\",\n                \"reference\": \"0c6fd108360c562f6e4fd1dedb8233b423e91c83\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83\",\n                \"reference\": \"0c6fd108360c562f6e4fd1dedb8233b423e91c83\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"carbonphp/carbon-doctrine-types\": \"*\",\n                \"ext-json\": \"*\",\n                \"php\": \"^7.1.8 || ^8.0\",\n                \"psr/clock\": \"^1.0\",\n                \"symfony/polyfill-mbstring\": \"^1.0\",\n                \"symfony/polyfill-php80\": \"^1.16\",\n                \"symfony/translation\": \"^3.4 || ^4.0 || ^5.0 || ^6.0\"\n            },\n            \"provide\": {\n                \"psr/clock-implementation\": \"1.0\"\n            },\n            \"require-dev\": {\n                \"doctrine/dbal\": \"^2.0 || ^3.1.4 || ^4.0\",\n                \"doctrine/orm\": \"^2.7 || ^3.0\",\n                \"friendsofphp/php-cs-fixer\": \"^3.0\",\n                \"kylekatarnls/multi-tester\": \"^2.0\",\n                \"ondrejmirtes/better-reflection\": \"*\",\n                \"phpmd/phpmd\": \"^2.9\",\n                \"phpstan/extension-installer\": \"^1.0\",\n                \"phpstan/phpstan\": \"^0.12.99 || ^1.7.14\",\n                \"phpunit/php-file-iterator\": \"^2.0.5 || ^3.0.6\",\n                \"phpunit/phpunit\": \"^7.5.20 || ^8.5.26 || ^9.5.20\",\n                \"squizlabs/php_codesniffer\": \"^3.4\"\n            },\n            \"time\": \"2024-01-25T10:35:09+00:00\",\n            \"bin\": [\n                \"bin/carbon\"\n            ],\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-3.x\": \"3.x-dev\",\n                    \"dev-master\": \"2.x-dev\"\n                },\n                \"laravel\": {\n                    \"providers\": [\n                        \"Carbon\\\\Laravel\\\\ServiceProvider\"\n                    ]\n                },\n                \"phpstan\": {\n                    \"includes\": [\n                        \"extension.neon\"\n                    ]\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Carbon\\\\\": \"src/Carbon/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Brian Nesbitt\",\n                    \"email\": \"brian@nesbot.com\",\n                    \"homepage\": \"https://markido.com\"\n                },\n                {\n                    \"name\": \"kylekatarnls\",\n                    \"homepage\": \"https://github.com/kylekatarnls\"\n                }\n            ],\n            \"description\": \"An API extension for DateTime that supports 281 different languages.\",\n            \"homepage\": \"https://carbon.nesbot.com\",\n            \"keywords\": [\n                \"date\",\n                \"datetime\",\n                \"time\"\n            ],\n            \"support\": {\n                \"docs\": \"https://carbon.nesbot.com/docs\",\n                \"issues\": \"https://github.com/briannesbitt/Carbon/issues\",\n                \"source\": \"https://github.com/briannesbitt/Carbon\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/sponsors/kylekatarnls\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://opencollective.com/Carbon#sponsor\",\n                    \"type\": \"opencollective\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../nesbot/carbon\"\n        },\n        {\n            \"name\": \"paragonie/random_compat\",\n            \"version\": \"v9.99.100\",\n            \"version_normalized\": \"9.99.100.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/paragonie/random_compat.git\",\n                \"reference\": \"996434e5492cb4c3edcb9168db6fbb1359ef965a\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a\",\n                \"reference\": \"996434e5492cb4c3edcb9168db6fbb1359ef965a\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">= 7\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \"4.*|5.*\",\n                \"vimeo/psalm\": \"^1\"\n            },\n            \"suggest\": {\n                \"ext-libsodium\": \"Provides a modern crypto API that can be used to generate random bytes.\"\n            },\n            \"time\": \"2020-10-15T08:29:30+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Paragon Initiative Enterprises\",\n                    \"email\": \"security@paragonie.com\",\n                    \"homepage\": \"https://paragonie.com\"\n                }\n            ],\n            \"description\": \"PHP 5.x polyfill for random_bytes() and random_int() from PHP 7\",\n            \"keywords\": [\n                \"csprng\",\n                \"polyfill\",\n                \"pseudorandom\",\n                \"random\"\n            ],\n            \"support\": {\n                \"email\": \"info@paragonie.com\",\n                \"issues\": \"https://github.com/paragonie/random_compat/issues\",\n                \"source\": \"https://github.com/paragonie/random_compat\"\n            },\n            \"install-path\": \"../paragonie/random_compat\"\n        },\n        {\n            \"name\": \"php-mime-mail-parser/php-mime-mail-parser\",\n            \"version\": \"7.0.0\",\n            \"version_normalized\": \"7.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-mime-mail-parser/php-mime-mail-parser.git\",\n                \"reference\": \"9d09a017f3f103fec8456211a4a538b80e0eca0d\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-mime-mail-parser/php-mime-mail-parser/zipball/9d09a017f3f103fec8456211a4a538b80e0eca0d\",\n                \"reference\": \"9d09a017f3f103fec8456211a4a538b80e0eca0d\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-mailparse\": \"*\",\n                \"php\": \"^7.2|^8.0\"\n            },\n            \"replace\": {\n                \"exorus/php-mime-mail-parser\": \"*\",\n                \"messaged/php-mime-mail-parser\": \"*\"\n            },\n            \"require-dev\": {\n                \"php-coveralls/php-coveralls\": \"^2.2\",\n                \"phpunit/phpunit\": \"^8.0\",\n                \"squizlabs/php_codesniffer\": \"^3.5\"\n            },\n            \"time\": \"2021-02-25T17:21:57+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"PhpMimeMailParser\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"eXorus\",\n                    \"email\": \"exorus.spam@gmail.com\",\n                    \"homepage\": \"https://github.com/eXorus/\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"M.Valinskis\",\n                    \"email\": \"M.Valins@gmail.com\",\n                    \"homepage\": \"https://code.google.com/p/php-mime-mail-parser\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"eugene.emmett.wood\",\n                    \"email\": \"gene_w@cementhorizon.com\",\n                    \"homepage\": \"https://code.google.com/p/php-mime-mail-parser\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"alknetso\",\n                    \"email\": \"alkne@gmail.com\",\n                    \"homepage\": \"https://code.google.com/p/php-mime-mail-parser\",\n                    \"role\": \"Developer\"\n                },\n                {\n                    \"name\": \"bucabay\",\n                    \"email\": \"gabe@fijiwebdesign.com\",\n                    \"homepage\": \"http://www.fijiwebdesign.com\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"A fully tested email parser for PHP 7.2+ (mailparse extension wrapper).\",\n            \"homepage\": \"https://github.com/php-mime-mail-parser/php-mime-mail-parser\",\n            \"keywords\": [\n                \"MimeMailParser\",\n                \"mail\",\n                \"mailparse\",\n                \"mime\",\n                \"parser\",\n                \"php\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/php-mime-mail-parser/php-mime-mail-parser/issues\",\n                \"source\": \"https://github.com/php-mime-mail-parser/php-mime-mail-parser/tree/7.0.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/eXorus\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../php-mime-mail-parser/php-mime-mail-parser\"\n        },\n        {\n            \"name\": \"phpmailer/phpmailer\",\n            \"version\": \"v6.6.0\",\n            \"version_normalized\": \"6.6.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/PHPMailer/PHPMailer.git\",\n                \"reference\": \"e43bac82edc26ca04b36143a48bde1c051cfd5b1\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e43bac82edc26ca04b36143a48bde1c051cfd5b1\",\n                \"reference\": \"e43bac82edc26ca04b36143a48bde1c051cfd5b1\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-ctype\": \"*\",\n                \"ext-filter\": \"*\",\n                \"ext-hash\": \"*\",\n                \"php\": \">=5.5.0\"\n            },\n            \"require-dev\": {\n                \"dealerdirect/phpcodesniffer-composer-installer\": \"^0.7.0\",\n                \"doctrine/annotations\": \"^1.2\",\n                \"php-parallel-lint/php-console-highlighter\": \"^0.5.0\",\n                \"php-parallel-lint/php-parallel-lint\": \"^1.3.1\",\n                \"phpcompatibility/php-compatibility\": \"^9.3.5\",\n                \"roave/security-advisories\": \"dev-latest\",\n                \"squizlabs/php_codesniffer\": \"^3.6.2\",\n                \"yoast/phpunit-polyfills\": \"^1.0.0\"\n            },\n            \"suggest\": {\n                \"ext-mbstring\": \"Needed to send email in multibyte encoding charset or decode encoded addresses\",\n                \"hayageek/oauth2-yahoo\": \"Needed for Yahoo XOAUTH2 authentication\",\n                \"league/oauth2-google\": \"Needed for Google XOAUTH2 authentication\",\n                \"psr/log\": \"For optional PSR-3 debug logging\",\n                \"stevenmaguire/oauth2-microsoft\": \"Needed for Microsoft XOAUTH2 authentication\",\n                \"symfony/polyfill-mbstring\": \"To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)\"\n            },\n            \"time\": \"2022-02-28T15:31:21+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"PHPMailer\\\\PHPMailer\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"LGPL-2.1-only\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Marcus Bointon\",\n                    \"email\": \"phpmailer@synchromedia.co.uk\"\n                },\n                {\n                    \"name\": \"Jim Jagielski\",\n                    \"email\": \"jimjag@gmail.com\"\n                },\n                {\n                    \"name\": \"Andy Prevost\",\n                    \"email\": \"codeworxtech@users.sourceforge.net\"\n                },\n                {\n                    \"name\": \"Brent R. Matzelle\"\n                }\n            ],\n            \"description\": \"PHPMailer is a full-featured email creation and transfer class for PHP\",\n            \"support\": {\n                \"issues\": \"https://github.com/PHPMailer/PHPMailer/issues\",\n                \"source\": \"https://github.com/PHPMailer/PHPMailer/tree/v6.6.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/Synchro\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../phpmailer/phpmailer\"\n        },\n        {\n            \"name\": \"psr/clock\",\n            \"version\": \"1.0.0\",\n            \"version_normalized\": \"1.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/clock.git\",\n                \"reference\": \"e41a24703d4560fd0acb709162f73b8adfc3aa0d\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d\",\n                \"reference\": \"e41a24703d4560fd0acb709162f73b8adfc3aa0d\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.0 || ^8.0\"\n            },\n            \"time\": \"2022-11-25T14:36:26+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Clock\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for reading the clock.\",\n            \"homepage\": \"https://github.com/php-fig/clock\",\n            \"keywords\": [\n                \"clock\",\n                \"now\",\n                \"psr\",\n                \"psr-20\",\n                \"time\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/php-fig/clock/issues\",\n                \"source\": \"https://github.com/php-fig/clock/tree/1.0.0\"\n            },\n            \"install-path\": \"../psr/clock\"\n        },\n        {\n            \"name\": \"psr/container\",\n            \"version\": \"2.0.2\",\n            \"version_normalized\": \"2.0.2.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/container.git\",\n                \"reference\": \"c71ecc56dfe541dbd90c5360474fbc405f8d5963\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963\",\n                \"reference\": \"c71ecc56dfe541dbd90c5360474fbc405f8d5963\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.4.0\"\n            },\n            \"time\": \"2021-11-05T16:47:00+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"2.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Container\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common Container Interface (PHP FIG PSR-11)\",\n            \"homepage\": \"https://github.com/php-fig/container\",\n            \"keywords\": [\n                \"PSR-11\",\n                \"container\",\n                \"container-interface\",\n                \"container-interop\",\n                \"psr\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/php-fig/container/issues\",\n                \"source\": \"https://github.com/php-fig/container/tree/2.0.2\"\n            },\n            \"install-path\": \"../psr/container\"\n        },\n        {\n            \"name\": \"psr/http-client\",\n            \"version\": \"1.0.1\",\n            \"version_normalized\": \"1.0.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/http-client.git\",\n                \"reference\": \"2dfb5f6c5eff0e91e20e913f8c5452ed95b86621\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621\",\n                \"reference\": \"2dfb5f6c5eff0e91e20e913f8c5452ed95b86621\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \"^7.0 || ^8.0\",\n                \"psr/http-message\": \"^1.0\"\n            },\n            \"time\": \"2020-06-29T06:28:15+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Http\\\\Client\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"http://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for HTTP clients\",\n            \"homepage\": \"https://github.com/php-fig/http-client\",\n            \"keywords\": [\n                \"http\",\n                \"http-client\",\n                \"psr\",\n                \"psr-18\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/http-client/tree/master\"\n            },\n            \"install-path\": \"../psr/http-client\"\n        },\n        {\n            \"name\": \"psr/http-factory\",\n            \"version\": \"1.0.1\",\n            \"version_normalized\": \"1.0.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/http-factory.git\",\n                \"reference\": \"12ac7fcd07e5b077433f5f2bee95b3a771bf61be\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be\",\n                \"reference\": \"12ac7fcd07e5b077433f5f2bee95b3a771bf61be\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.0.0\",\n                \"psr/http-message\": \"^1.0\"\n            },\n            \"time\": \"2019-04-30T12:38:16+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"http://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interfaces for PSR-7 HTTP message factories\",\n            \"keywords\": [\n                \"factory\",\n                \"http\",\n                \"message\",\n                \"psr\",\n                \"psr-17\",\n                \"psr-7\",\n                \"request\",\n                \"response\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/http-factory/tree/master\"\n            },\n            \"install-path\": \"../psr/http-factory\"\n        },\n        {\n            \"name\": \"psr/http-message\",\n            \"version\": \"1.0.1\",\n            \"version_normalized\": \"1.0.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/http-message.git\",\n                \"reference\": \"f6561bf28d520154e4b0ec72be95418abe6d9363\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363\",\n                \"reference\": \"f6561bf28d520154e4b0ec72be95418abe6d9363\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.3.0\"\n            },\n            \"time\": \"2016-08-06T14:39:51+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"http://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for HTTP messages\",\n            \"homepage\": \"https://github.com/php-fig/http-message\",\n            \"keywords\": [\n                \"http\",\n                \"http-message\",\n                \"psr\",\n                \"psr-7\",\n                \"request\",\n                \"response\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/http-message/tree/master\"\n            },\n            \"install-path\": \"../psr/http-message\"\n        },\n        {\n            \"name\": \"psr/log\",\n            \"version\": \"3.0.0\",\n            \"version_normalized\": \"3.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/log.git\",\n                \"reference\": \"fe5ea303b0887d5caefd3d431c3e61ad47037001\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001\",\n                \"reference\": \"fe5ea303b0887d5caefd3d431c3e61ad47037001\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.0.0\"\n            },\n            \"time\": \"2021-07-14T16:46:02+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"3.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\Log\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interface for logging libraries\",\n            \"homepage\": \"https://github.com/php-fig/log\",\n            \"keywords\": [\n                \"log\",\n                \"psr\",\n                \"psr-3\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/log/tree/3.0.0\"\n            },\n            \"install-path\": \"../psr/log\"\n        },\n        {\n            \"name\": \"psr/simple-cache\",\n            \"version\": \"2.0.0\",\n            \"version_normalized\": \"2.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/php-fig/simple-cache.git\",\n                \"reference\": \"8707bf3cea6f710bf6ef05491234e3ab06f6432a\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/php-fig/simple-cache/zipball/8707bf3cea6f710bf6ef05491234e3ab06f6432a\",\n                \"reference\": \"8707bf3cea6f710bf6ef05491234e3ab06f6432a\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.0.0\"\n            },\n            \"time\": \"2021-10-29T13:22:09+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"2.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Psr\\\\SimpleCache\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"PHP-FIG\",\n                    \"homepage\": \"https://www.php-fig.org/\"\n                }\n            ],\n            \"description\": \"Common interfaces for simple caching\",\n            \"keywords\": [\n                \"cache\",\n                \"caching\",\n                \"psr\",\n                \"psr-16\",\n                \"simple-cache\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/php-fig/simple-cache/tree/2.0.0\"\n            },\n            \"install-path\": \"../psr/simple-cache\"\n        },\n        {\n            \"name\": \"ralouphie/getallheaders\",\n            \"version\": \"3.0.3\",\n            \"version_normalized\": \"3.0.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/ralouphie/getallheaders.git\",\n                \"reference\": \"120b605dfeb996808c31b6477290a714d356e822\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822\",\n                \"reference\": \"120b605dfeb996808c31b6477290a714d356e822\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.6\"\n            },\n            \"require-dev\": {\n                \"php-coveralls/php-coveralls\": \"^2.1\",\n                \"phpunit/phpunit\": \"^5 || ^6.5\"\n            },\n            \"time\": \"2019-03-08T08:55:37+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/getallheaders.php\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Ralph Khattar\",\n                    \"email\": \"ralph.khattar@gmail.com\"\n                }\n            ],\n            \"description\": \"A polyfill for getallheaders.\",\n            \"support\": {\n                \"issues\": \"https://github.com/ralouphie/getallheaders/issues\",\n                \"source\": \"https://github.com/ralouphie/getallheaders/tree/develop\"\n            },\n            \"install-path\": \"../ralouphie/getallheaders\"\n        },\n        {\n            \"name\": \"robthree/twofactorauth\",\n            \"version\": \"1.8.1\",\n            \"version_normalized\": \"1.8.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/RobThree/TwoFactorAuth.git\",\n                \"reference\": \"5afcb45282f1c75562a48d479ecd1732c9bdb11b\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/RobThree/TwoFactorAuth/zipball/5afcb45282f1c75562a48d479ecd1732c9bdb11b\",\n                \"reference\": \"5afcb45282f1c75562a48d479ecd1732c9bdb11b\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=5.6.0\"\n            },\n            \"require-dev\": {\n                \"php-parallel-lint/php-parallel-lint\": \"^1.2\",\n                \"phpunit/phpunit\": \"@stable\"\n            },\n            \"suggest\": {\n                \"bacon/bacon-qr-code\": \"Needed for BaconQrCodeProvider provider\",\n                \"endroid/qr-code\": \"Needed for EndroidQrCodeProvider\"\n            },\n            \"time\": \"2021-10-20T12:19:55+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"RobThree\\\\Auth\\\\\": \"lib\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Rob Janssen\",\n                    \"homepage\": \"http://robiii.me\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"Two Factor Authentication\",\n            \"homepage\": \"https://github.com/RobThree/TwoFactorAuth\",\n            \"keywords\": [\n                \"Authentication\",\n                \"MFA\",\n                \"Multi Factor Authentication\",\n                \"Two Factor Authentication\",\n                \"authenticator\",\n                \"authy\",\n                \"php\",\n                \"tfa\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/RobThree/TwoFactorAuth/issues\",\n                \"source\": \"https://github.com/RobThree/TwoFactorAuth\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://paypal.me/robiii\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/RobThree\",\n                    \"type\": \"github\"\n                }\n            ],\n            \"install-path\": \"../robthree/twofactorauth\"\n        },\n        {\n            \"name\": \"soundasleep/html2text\",\n            \"version\": \"0.5.0\",\n            \"version_normalized\": \"0.5.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/soundasleep/html2text.git\",\n                \"reference\": \"cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/soundasleep/html2text/zipball/cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad\",\n                \"reference\": \"cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"ext-dom\": \"*\",\n                \"ext-libxml\": \"*\",\n                \"php\": \">=5.3.2\"\n            },\n            \"require-dev\": {\n                \"phpunit/phpunit\": \">=4.0\",\n                \"soundasleep/component-tests\": \"dev-master\"\n            },\n            \"time\": \"2017-04-19T22:01:50+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Html2Text\\\\\": \"src\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"EPL-1.0\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Jevon Wright\",\n                    \"homepage\": \"https://jevon.org\",\n                    \"role\": \"Developer\"\n                }\n            ],\n            \"description\": \"A PHP script to convert HTML into a plain text format\",\n            \"homepage\": \"https://github.com/soundasleep/html2text\",\n            \"keywords\": [\n                \"email\",\n                \"html\",\n                \"php\",\n                \"text\"\n            ],\n            \"install-path\": \"../soundasleep/html2text\"\n        },\n        {\n            \"name\": \"stevenmaguire/oauth2-keycloak\",\n            \"version\": \"4.0.0\",\n            \"version_normalized\": \"4.0.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/stevenmaguire/oauth2-keycloak.git\",\n                \"reference\": \"05ead6bb6bcd2b6f96dfae87c769dcd3e5f6129d\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/stevenmaguire/oauth2-keycloak/zipball/05ead6bb6bcd2b6f96dfae87c769dcd3e5f6129d\",\n                \"reference\": \"05ead6bb6bcd2b6f96dfae87c769dcd3e5f6129d\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"firebase/php-jwt\": \"^4.0 || ^5.0 || ^6.0\",\n                \"league/oauth2-client\": \"^2.0\",\n                \"php\": \"~7.2 || ~8.0\"\n            },\n            \"require-dev\": {\n                \"mockery/mockery\": \"~1.5.0\",\n                \"phpunit/phpunit\": \"~9.6.4\",\n                \"squizlabs/php_codesniffer\": \"~3.7.0\"\n            },\n            \"time\": \"2023-03-14T09:43:47+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-master\": \"1.0.x-dev\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Stevenmaguire\\\\OAuth2\\\\Client\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Steven Maguire\",\n                    \"email\": \"stevenmaguire@gmail.com\",\n                    \"homepage\": \"https://github.com/stevenmaguire\"\n                }\n            ],\n            \"description\": \"Keycloak OAuth 2.0 Client Provider for The PHP League OAuth2-Client\",\n            \"keywords\": [\n                \"authorisation\",\n                \"authorization\",\n                \"client\",\n                \"keycloak\",\n                \"oauth\",\n                \"oauth2\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/stevenmaguire/oauth2-keycloak/issues\",\n                \"source\": \"https://github.com/stevenmaguire/oauth2-keycloak/tree/4.0.0\"\n            },\n            \"install-path\": \"../stevenmaguire/oauth2-keycloak\"\n        },\n        {\n            \"name\": \"symfony/deprecation-contracts\",\n            \"version\": \"v3.5.0\",\n            \"version_normalized\": \"3.5.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/deprecation-contracts.git\",\n                \"reference\": \"0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1\",\n                \"reference\": \"0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1\"\n            },\n            \"time\": \"2024-04-18T09:32:20+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-main\": \"3.5-dev\"\n                },\n                \"thanks\": {\n                    \"name\": \"symfony/contracts\",\n                    \"url\": \"https://github.com/symfony/contracts\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"function.php\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Nicolas Grekas\",\n                    \"email\": \"p@tchwork.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"A generic function and convention to trigger deprecation notices\",\n            \"homepage\": \"https://symfony.com\",\n            \"support\": {\n                \"source\": \"https://github.com/symfony/deprecation-contracts/tree/v3.5.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/deprecation-contracts\"\n        },\n        {\n            \"name\": \"symfony/polyfill-ctype\",\n            \"version\": \"v1.24.0\",\n            \"version_normalized\": \"1.24.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/polyfill-ctype.git\",\n                \"reference\": \"30885182c981ab175d4d034db0f6f469898070ab\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab\",\n                \"reference\": \"30885182c981ab175d4d034db0f6f469898070ab\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.1\"\n            },\n            \"provide\": {\n                \"ext-ctype\": \"*\"\n            },\n            \"suggest\": {\n                \"ext-ctype\": \"For best performance\"\n            },\n            \"time\": \"2021-10-20T20:35:02+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-main\": \"1.23-dev\"\n                },\n                \"thanks\": {\n                    \"name\": \"symfony/polyfill\",\n                    \"url\": \"https://github.com/symfony/polyfill\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"bootstrap.php\"\n                ],\n                \"psr-4\": {\n                    \"Symfony\\\\Polyfill\\\\Ctype\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Gert de Pagter\",\n                    \"email\": \"BackEndTea@gmail.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"Symfony polyfill for ctype functions\",\n            \"homepage\": \"https://symfony.com\",\n            \"keywords\": [\n                \"compatibility\",\n                \"ctype\",\n                \"polyfill\",\n                \"portable\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/symfony/polyfill-ctype/tree/v1.24.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/polyfill-ctype\"\n        },\n        {\n            \"name\": \"symfony/polyfill-mbstring\",\n            \"version\": \"v1.29.0\",\n            \"version_normalized\": \"1.29.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/polyfill-mbstring.git\",\n                \"reference\": \"9773676c8a1bb1f8d4340a62efe641cf76eda7ec\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec\",\n                \"reference\": \"9773676c8a1bb1f8d4340a62efe641cf76eda7ec\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.1\"\n            },\n            \"provide\": {\n                \"ext-mbstring\": \"*\"\n            },\n            \"suggest\": {\n                \"ext-mbstring\": \"For best performance\"\n            },\n            \"time\": \"2024-01-29T20:11:03+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"thanks\": {\n                    \"name\": \"symfony/polyfill\",\n                    \"url\": \"https://github.com/symfony/polyfill\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"bootstrap.php\"\n                ],\n                \"psr-4\": {\n                    \"Symfony\\\\Polyfill\\\\Mbstring\\\\\": \"\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Nicolas Grekas\",\n                    \"email\": \"p@tchwork.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"Symfony polyfill for the Mbstring extension\",\n            \"homepage\": \"https://symfony.com\",\n            \"keywords\": [\n                \"compatibility\",\n                \"mbstring\",\n                \"polyfill\",\n                \"portable\",\n                \"shim\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/symfony/polyfill-mbstring/tree/v1.29.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/polyfill-mbstring\"\n        },\n        {\n            \"name\": \"symfony/polyfill-php80\",\n            \"version\": \"v1.29.0\",\n            \"version_normalized\": \"1.29.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/polyfill-php80.git\",\n                \"reference\": \"87b68208d5c1188808dd7839ee1e6c8ec3b02f1b\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b\",\n                \"reference\": \"87b68208d5c1188808dd7839ee1e6c8ec3b02f1b\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.1\"\n            },\n            \"time\": \"2024-01-29T20:11:03+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"thanks\": {\n                    \"name\": \"symfony/polyfill\",\n                    \"url\": \"https://github.com/symfony/polyfill\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"bootstrap.php\"\n                ],\n                \"psr-4\": {\n                    \"Symfony\\\\Polyfill\\\\Php80\\\\\": \"\"\n                },\n                \"classmap\": [\n                    \"Resources/stubs\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Ion Bazan\",\n                    \"email\": \"ion.bazan@gmail.com\"\n                },\n                {\n                    \"name\": \"Nicolas Grekas\",\n                    \"email\": \"p@tchwork.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions\",\n            \"homepage\": \"https://symfony.com\",\n            \"keywords\": [\n                \"compatibility\",\n                \"polyfill\",\n                \"portable\",\n                \"shim\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/symfony/polyfill-php80/tree/v1.29.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/polyfill-php80\"\n        },\n        {\n            \"name\": \"symfony/polyfill-php81\",\n            \"version\": \"v1.31.0\",\n            \"version_normalized\": \"1.31.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/polyfill-php81.git\",\n                \"reference\": \"4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c\",\n                \"reference\": \"4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=7.2\"\n            },\n            \"time\": \"2024-09-09T11:45:10+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"thanks\": {\n                    \"name\": \"symfony/polyfill\",\n                    \"url\": \"https://github.com/symfony/polyfill\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"bootstrap.php\"\n                ],\n                \"psr-4\": {\n                    \"Symfony\\\\Polyfill\\\\Php81\\\\\": \"\"\n                },\n                \"classmap\": [\n                    \"Resources/stubs\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Nicolas Grekas\",\n                    \"email\": \"p@tchwork.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions\",\n            \"homepage\": \"https://symfony.com\",\n            \"keywords\": [\n                \"compatibility\",\n                \"polyfill\",\n                \"portable\",\n                \"shim\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/symfony/polyfill-php81/tree/v1.31.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/polyfill-php81\"\n        },\n        {\n            \"name\": \"symfony/translation\",\n            \"version\": \"v6.4.3\",\n            \"version_normalized\": \"6.4.3.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/translation.git\",\n                \"reference\": \"637c51191b6b184184bbf98937702bcf554f7d04\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/translation/zipball/637c51191b6b184184bbf98937702bcf554f7d04\",\n                \"reference\": \"637c51191b6b184184bbf98937702bcf554f7d04\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1\",\n                \"symfony/deprecation-contracts\": \"^2.5|^3\",\n                \"symfony/polyfill-mbstring\": \"~1.0\",\n                \"symfony/translation-contracts\": \"^2.5|^3.0\"\n            },\n            \"conflict\": {\n                \"symfony/config\": \"<5.4\",\n                \"symfony/console\": \"<5.4\",\n                \"symfony/dependency-injection\": \"<5.4\",\n                \"symfony/http-client-contracts\": \"<2.5\",\n                \"symfony/http-kernel\": \"<5.4\",\n                \"symfony/service-contracts\": \"<2.5\",\n                \"symfony/twig-bundle\": \"<5.4\",\n                \"symfony/yaml\": \"<5.4\"\n            },\n            \"provide\": {\n                \"symfony/translation-implementation\": \"2.3|3.0\"\n            },\n            \"require-dev\": {\n                \"nikic/php-parser\": \"^4.18|^5.0\",\n                \"psr/log\": \"^1|^2|^3\",\n                \"symfony/config\": \"^5.4|^6.0|^7.0\",\n                \"symfony/console\": \"^5.4|^6.0|^7.0\",\n                \"symfony/dependency-injection\": \"^5.4|^6.0|^7.0\",\n                \"symfony/finder\": \"^5.4|^6.0|^7.0\",\n                \"symfony/http-client-contracts\": \"^2.5|^3.0\",\n                \"symfony/http-kernel\": \"^5.4|^6.0|^7.0\",\n                \"symfony/intl\": \"^5.4|^6.0|^7.0\",\n                \"symfony/polyfill-intl-icu\": \"^1.21\",\n                \"symfony/routing\": \"^5.4|^6.0|^7.0\",\n                \"symfony/service-contracts\": \"^2.5|^3\",\n                \"symfony/yaml\": \"^5.4|^6.0|^7.0\"\n            },\n            \"time\": \"2024-01-29T13:11:52+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"Resources/functions.php\"\n                ],\n                \"psr-4\": {\n                    \"Symfony\\\\Component\\\\Translation\\\\\": \"\"\n                },\n                \"exclude-from-classmap\": [\n                    \"/Tests/\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Fabien Potencier\",\n                    \"email\": \"fabien@symfony.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"Provides tools to internationalize your application\",\n            \"homepage\": \"https://symfony.com\",\n            \"support\": {\n                \"source\": \"https://github.com/symfony/translation/tree/v6.4.3\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/translation\"\n        },\n        {\n            \"name\": \"symfony/translation-contracts\",\n            \"version\": \"v3.4.1\",\n            \"version_normalized\": \"3.4.1.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/symfony/translation-contracts.git\",\n                \"reference\": \"06450585bf65e978026bda220cdebca3f867fde7\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/symfony/translation-contracts/zipball/06450585bf65e978026bda220cdebca3f867fde7\",\n                \"reference\": \"06450585bf65e978026bda220cdebca3f867fde7\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.1\"\n            },\n            \"time\": \"2023-12-26T14:02:43+00:00\",\n            \"type\": \"library\",\n            \"extra\": {\n                \"branch-alias\": {\n                    \"dev-main\": \"3.4-dev\"\n                },\n                \"thanks\": {\n                    \"name\": \"symfony/contracts\",\n                    \"url\": \"https://github.com/symfony/contracts\"\n                }\n            },\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"psr-4\": {\n                    \"Symfony\\\\Contracts\\\\Translation\\\\\": \"\"\n                },\n                \"exclude-from-classmap\": [\n                    \"/Test/\"\n                ]\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"MIT\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Nicolas Grekas\",\n                    \"email\": \"p@tchwork.com\"\n                },\n                {\n                    \"name\": \"Symfony Community\",\n                    \"homepage\": \"https://symfony.com/contributors\"\n                }\n            ],\n            \"description\": \"Generic abstractions related to translation\",\n            \"homepage\": \"https://symfony.com\",\n            \"keywords\": [\n                \"abstractions\",\n                \"contracts\",\n                \"decoupling\",\n                \"interfaces\",\n                \"interoperability\",\n                \"standards\"\n            ],\n            \"support\": {\n                \"source\": \"https://github.com/symfony/translation-contracts/tree/v3.4.1\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://symfony.com/sponsor\",\n                    \"type\": \"custom\"\n                },\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/symfony/symfony\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../symfony/translation-contracts\"\n        },\n        {\n            \"name\": \"twig/twig\",\n            \"version\": \"v3.14.0\",\n            \"version_normalized\": \"3.14.0.0\",\n            \"source\": {\n                \"type\": \"git\",\n                \"url\": \"https://github.com/twigphp/Twig.git\",\n                \"reference\": \"126b2c97818dbff0cdf3fbfc881aedb3d40aae72\"\n            },\n            \"dist\": {\n                \"type\": \"zip\",\n                \"url\": \"https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72\",\n                \"reference\": \"126b2c97818dbff0cdf3fbfc881aedb3d40aae72\",\n                \"shasum\": \"\"\n            },\n            \"require\": {\n                \"php\": \">=8.0.2\",\n                \"symfony/deprecation-contracts\": \"^2.5|^3\",\n                \"symfony/polyfill-ctype\": \"^1.8\",\n                \"symfony/polyfill-mbstring\": \"^1.3\",\n                \"symfony/polyfill-php81\": \"^1.29\"\n            },\n            \"require-dev\": {\n                \"psr/container\": \"^1.0|^2.0\",\n                \"symfony/phpunit-bridge\": \"^5.4.9|^6.4|^7.0\"\n            },\n            \"time\": \"2024-09-09T17:55:12+00:00\",\n            \"type\": \"library\",\n            \"installation-source\": \"dist\",\n            \"autoload\": {\n                \"files\": [\n                    \"src/Resources/core.php\",\n                    \"src/Resources/debug.php\",\n                    \"src/Resources/escaper.php\",\n                    \"src/Resources/string_loader.php\"\n                ],\n                \"psr-4\": {\n                    \"Twig\\\\\": \"src/\"\n                }\n            },\n            \"notification-url\": \"https://packagist.org/downloads/\",\n            \"license\": [\n                \"BSD-3-Clause\"\n            ],\n            \"authors\": [\n                {\n                    \"name\": \"Fabien Potencier\",\n                    \"email\": \"fabien@symfony.com\",\n                    \"homepage\": \"http://fabien.potencier.org\",\n                    \"role\": \"Lead Developer\"\n                },\n                {\n                    \"name\": \"Twig Team\",\n                    \"role\": \"Contributors\"\n                },\n                {\n                    \"name\": \"Armin Ronacher\",\n                    \"email\": \"armin.ronacher@active-4.com\",\n                    \"role\": \"Project Founder\"\n                }\n            ],\n            \"description\": \"Twig, the flexible, fast, and secure template language for PHP\",\n            \"homepage\": \"https://twig.symfony.com\",\n            \"keywords\": [\n                \"templating\"\n            ],\n            \"support\": {\n                \"issues\": \"https://github.com/twigphp/Twig/issues\",\n                \"source\": \"https://github.com/twigphp/Twig/tree/v3.14.0\"\n            },\n            \"funding\": [\n                {\n                    \"url\": \"https://github.com/fabpot\",\n                    \"type\": \"github\"\n                },\n                {\n                    \"url\": \"https://tidelift.com/funding/github/packagist/twig/twig\",\n                    \"type\": \"tidelift\"\n                }\n            ],\n            \"install-path\": \"../twig/twig\"\n        }\n    ],\n    \"dev\": true,\n    \"dev-package-names\": []\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/installed.php",
    "content": "<?php return array(\n    'root' => array(\n        'name' => '__root__',\n        'pretty_version' => '1.0.0+no-version-set',\n        'version' => '1.0.0.0',\n        'reference' => null,\n        'type' => 'library',\n        'install_path' => __DIR__ . '/../../',\n        'aliases' => array(),\n        'dev' => true,\n    ),\n    'versions' => array(\n        '__root__' => array(\n            'pretty_version' => '1.0.0+no-version-set',\n            'version' => '1.0.0.0',\n            'reference' => null,\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../../',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'bacon/bacon-qr-code' => array(\n            'pretty_version' => '2.0.8',\n            'version' => '2.0.8.0',\n            'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../bacon/bacon-qr-code',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'bshaffer/oauth2-server-php' => array(\n            'pretty_version' => 'v1.11.1',\n            'version' => '1.11.1.0',\n            'reference' => '5a0c8000d4763b276919e2106f54eddda6bc50fa',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../bshaffer/oauth2-server-php',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'carbonphp/carbon-doctrine-types' => array(\n            'pretty_version' => '3.2.0',\n            'version' => '3.2.0.0',\n            'reference' => '18ba5ddfec8976260ead6e866180bd5d2f71aa1d',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../carbonphp/carbon-doctrine-types',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'dasprid/enum' => array(\n            'pretty_version' => '1.0.7',\n            'version' => '1.0.7.0',\n            'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../dasprid/enum',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'ddeboer/imap' => array(\n            'pretty_version' => '1.13.1',\n            'version' => '1.13.1.0',\n            'reference' => '8b772d04b1deadb5df13782fb78c4b648f77496e',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../ddeboer/imap',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'directorytree/ldaprecord' => array(\n            'pretty_version' => 'v3.8.5',\n            'version' => '3.8.5.0',\n            'reference' => '00e5f088f8c4028d5f398783cccc2e8119a27a65',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../directorytree/ldaprecord',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'exorus/php-mime-mail-parser' => array(\n            'dev_requirement' => false,\n            'replaced' => array(\n                0 => '*',\n            ),\n        ),\n        'firebase/php-jwt' => array(\n            'pretty_version' => 'v6.5.0',\n            'version' => '6.5.0.0',\n            'reference' => 'e94e7353302b0c11ec3cfff7180cd0b1743975d2',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../firebase/php-jwt',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'guzzlehttp/guzzle' => array(\n            'pretty_version' => '7.5.0',\n            'version' => '7.5.0.0',\n            'reference' => 'b50a2a1251152e43f6a37f0fa053e730a67d25ba',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../guzzlehttp/guzzle',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'guzzlehttp/promises' => array(\n            'pretty_version' => '1.5.2',\n            'version' => '1.5.2.0',\n            'reference' => 'b94b2807d85443f9719887892882d0329d1e2598',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../guzzlehttp/promises',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'guzzlehttp/psr7' => array(\n            'pretty_version' => '2.4.5',\n            'version' => '2.4.5.0',\n            'reference' => '0454e12ef0cd597ccd2adb036f7bda4e7fface66',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../guzzlehttp/psr7',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'illuminate/collections' => array(\n            'pretty_version' => 'v10.49.0',\n            'version' => '10.49.0.0',\n            'reference' => '6ae9c74fa92d4e1824d1b346cd435e8eacdc3232',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../illuminate/collections',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'illuminate/conditionable' => array(\n            'pretty_version' => 'v10.49.0',\n            'version' => '10.49.0.0',\n            'reference' => '47c700320b7a419f0d188d111f3bbed978fcbd3f',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../illuminate/conditionable',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'illuminate/contracts' => array(\n            'pretty_version' => 'v10.44.0',\n            'version' => '10.44.0.0',\n            'reference' => '8d7152c4a1f5d9cf7da3e8b71f23e4556f6138ac',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../illuminate/contracts',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'illuminate/macroable' => array(\n            'pretty_version' => 'v10.49.0',\n            'version' => '10.49.0.0',\n            'reference' => 'dff667a46ac37b634dcf68909d9d41e94dc97c27',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../illuminate/macroable',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'league/oauth2-client' => array(\n            'pretty_version' => '2.7.0',\n            'version' => '2.7.0.0',\n            'reference' => '160d6274b03562ebeb55ed18399281d8118b76c8',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../league/oauth2-client',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'matthiasmullie/minify' => array(\n            'pretty_version' => '1.3.66',\n            'version' => '1.3.66.0',\n            'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../matthiasmullie/minify',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'matthiasmullie/path-converter' => array(\n            'pretty_version' => '1.1.3',\n            'version' => '1.1.3.0',\n            'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../matthiasmullie/path-converter',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'messaged/php-mime-mail-parser' => array(\n            'dev_requirement' => false,\n            'replaced' => array(\n                0 => '*',\n            ),\n        ),\n        'mustangostang/spyc' => array(\n            'pretty_version' => '0.6.3',\n            'version' => '0.6.3.0',\n            'reference' => '4627c838b16550b666d15aeae1e5289dd5b77da0',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../mustangostang/spyc',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'nesbot/carbon' => array(\n            'pretty_version' => '2.72.3',\n            'version' => '2.72.3.0',\n            'reference' => '0c6fd108360c562f6e4fd1dedb8233b423e91c83',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../nesbot/carbon',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'paragonie/random_compat' => array(\n            'pretty_version' => 'v9.99.100',\n            'version' => '9.99.100.0',\n            'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../paragonie/random_compat',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'php-mime-mail-parser/php-mime-mail-parser' => array(\n            'pretty_version' => '7.0.0',\n            'version' => '7.0.0.0',\n            'reference' => '9d09a017f3f103fec8456211a4a538b80e0eca0d',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../php-mime-mail-parser/php-mime-mail-parser',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'phpmailer/phpmailer' => array(\n            'pretty_version' => 'v6.6.0',\n            'version' => '6.6.0.0',\n            'reference' => 'e43bac82edc26ca04b36143a48bde1c051cfd5b1',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../phpmailer/phpmailer',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/clock' => array(\n            'pretty_version' => '1.0.0',\n            'version' => '1.0.0.0',\n            'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/clock',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/clock-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/container' => array(\n            'pretty_version' => '2.0.2',\n            'version' => '2.0.2.0',\n            'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/container',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-client' => array(\n            'pretty_version' => '1.0.1',\n            'version' => '1.0.1.0',\n            'reference' => '2dfb5f6c5eff0e91e20e913f8c5452ed95b86621',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/http-client',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-client-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/http-factory' => array(\n            'pretty_version' => '1.0.1',\n            'version' => '1.0.1.0',\n            'reference' => '12ac7fcd07e5b077433f5f2bee95b3a771bf61be',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/http-factory',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-factory-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/http-message' => array(\n            'pretty_version' => '1.0.1',\n            'version' => '1.0.1.0',\n            'reference' => 'f6561bf28d520154e4b0ec72be95418abe6d9363',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/http-message',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/http-message-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '1.0',\n            ),\n        ),\n        'psr/log' => array(\n            'pretty_version' => '3.0.0',\n            'version' => '3.0.0.0',\n            'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/log',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'psr/simple-cache' => array(\n            'pretty_version' => '2.0.0',\n            'version' => '2.0.0.0',\n            'reference' => '8707bf3cea6f710bf6ef05491234e3ab06f6432a',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../psr/simple-cache',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'ralouphie/getallheaders' => array(\n            'pretty_version' => '3.0.3',\n            'version' => '3.0.3.0',\n            'reference' => '120b605dfeb996808c31b6477290a714d356e822',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../ralouphie/getallheaders',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'robthree/twofactorauth' => array(\n            'pretty_version' => '1.8.1',\n            'version' => '1.8.1.0',\n            'reference' => '5afcb45282f1c75562a48d479ecd1732c9bdb11b',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../robthree/twofactorauth',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'soundasleep/html2text' => array(\n            'pretty_version' => '0.5.0',\n            'version' => '0.5.0.0',\n            'reference' => 'cdb89f6ffa2c4cc78f8ed9ea6ee0594a9133ccad',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../soundasleep/html2text',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'stevenmaguire/oauth2-keycloak' => array(\n            'pretty_version' => '4.0.0',\n            'version' => '4.0.0.0',\n            'reference' => '05ead6bb6bcd2b6f96dfae87c769dcd3e5f6129d',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../stevenmaguire/oauth2-keycloak',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/deprecation-contracts' => array(\n            'pretty_version' => 'v3.5.0',\n            'version' => '3.5.0.0',\n            'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/deprecation-contracts',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/polyfill-ctype' => array(\n            'pretty_version' => 'v1.24.0',\n            'version' => '1.24.0.0',\n            'reference' => '30885182c981ab175d4d034db0f6f469898070ab',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/polyfill-mbstring' => array(\n            'pretty_version' => 'v1.29.0',\n            'version' => '1.29.0.0',\n            'reference' => '9773676c8a1bb1f8d4340a62efe641cf76eda7ec',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/polyfill-mbstring',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/polyfill-php80' => array(\n            'pretty_version' => 'v1.29.0',\n            'version' => '1.29.0.0',\n            'reference' => '87b68208d5c1188808dd7839ee1e6c8ec3b02f1b',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/polyfill-php80',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/polyfill-php81' => array(\n            'pretty_version' => 'v1.31.0',\n            'version' => '1.31.0.0',\n            'reference' => '4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/polyfill-php81',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/translation' => array(\n            'pretty_version' => 'v6.4.3',\n            'version' => '6.4.3.0',\n            'reference' => '637c51191b6b184184bbf98937702bcf554f7d04',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/translation',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/translation-contracts' => array(\n            'pretty_version' => 'v3.4.1',\n            'version' => '3.4.1.0',\n            'reference' => '06450585bf65e978026bda220cdebca3f867fde7',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../symfony/translation-contracts',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n        'symfony/translation-implementation' => array(\n            'dev_requirement' => false,\n            'provided' => array(\n                0 => '2.3|3.0',\n            ),\n        ),\n        'twig/twig' => array(\n            'pretty_version' => 'v3.14.0',\n            'version' => '3.14.0.0',\n            'reference' => '126b2c97818dbff0cdf3fbfc881aedb3d40aae72',\n            'type' => 'library',\n            'install_path' => __DIR__ . '/../twig/twig',\n            'aliases' => array(),\n            'dev_requirement' => false,\n        ),\n    ),\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/composer/platform_check.php",
    "content": "<?php\n\n// platform_check.php @generated by Composer\n\n$issues = array();\n\nif (!(PHP_VERSION_ID >= 80100)) {\n    $issues[] = 'Your Composer dependencies require a PHP version \">= 8.1.0\". You are running ' . PHP_VERSION . '.';\n}\n\nif ($issues) {\n    if (!headers_sent()) {\n        header('HTTP/1.1 500 Internal Server Error');\n    }\n    if (!ini_get('display_errors')) {\n        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {\n            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);\n        } elseif (!headers_sent()) {\n            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;\n        }\n    }\n    trigger_error(\n        'Composer detected issues in your platform: ' . implode(' ', $issues),\n        E_USER_ERROR\n    );\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/LICENSE",
    "content": "Copyright (c) 2017, Ben Scholzen 'DASPRiD'\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/README.md",
    "content": "# PHP 7.1 enums\n\n[![Build Status](https://github.com/DASPRiD/Enum/actions/workflows/tests.yml/badge.svg)](https://github.com/DASPRiD/Enum/actions?query=workflow%3Atests)\n[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum)\n[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum)\n[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum)\n\nIt is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation\nwhich is only available as a PECL extension. There are also quite a few other userland enum implementations around,\nbut all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to.\n\n## Usage\n\n### Basics\n\nAt its core, there is the `DASPRiD\\Enum\\AbstractEnum` class, which by default will work with constants like any other\nenum implementation you might know. The first clear difference is that you should define all the constants as protected\n(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference\nis that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example:\n\n```php\nuse DASPRiD\\Enum\\AbstractEnum;\n\n/**\n * @method static self MONDAY()\n * @method static self TUESDAY()\n * @method static self WEDNESDAY()\n * @method static self THURSDAY()\n * @method static self FRIDAY()\n * @method static self SATURDAY()\n * @method static self SUNDAY()\n */\nfinal class WeekDay extends AbstractEnum\n{\n    protected const MONDAY = null;\n    protected const TUESDAY = null;\n    protected const WEDNESDAY = null;\n    protected const THURSDAY = null;\n    protected const FRIDAY = null;\n    protected const SATURDAY = null;\n    protected const SUNDAY = null;\n}\n```\n\nIf you need to provide constants for either internal use or public use, you can mark them as either private or public,\nin which case they will be ignored by the enum, which only considers protected constants as valid values. As you can\nsee, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will\nautomatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like\nthat:\n\n```php\nfunction tellItLikeItIs(WeekDay $weekDay)\n{\n    switch ($weekDay) {\n        case WeekDay::MONDAY():\n            echo 'Mondays are bad.';\n            break;\n\n        case WeekDay::FRIDAY():\n            echo 'Fridays are better.';\n            break;\n\n        case WeekDay::SATURDAY():\n        case WeekDay::SUNDAY():\n            echo 'Weekends are best.';\n            break;\n\n        default:\n            echo 'Midweek days are so-so.';\n    }\n}\n\ntellItLikeItIs(WeekDay::MONDAY());\ntellItLikeItIs(WeekDay::WEDNESDAY());\ntellItLikeItIs(WeekDay::FRIDAY());\ntellItLikeItIs(WeekDay::SATURDAY());\ntellItLikeItIs(WeekDay::SUNDAY());\n```\n\n### More complex example\n\nOf course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always\njust one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at\na more complex example:\n\n```php\nuse DASPRiD\\Enum\\AbstractEnum;\n\n/**\n * @method static self MERCURY()\n * @method static self VENUS()\n * @method static self EARTH()\n * @method static self MARS()\n * @method static self JUPITER()\n * @method static self SATURN()\n * @method static self URANUS()\n * @method static self NEPTUNE()\n */\nfinal class Planet extends AbstractEnum\n{\n    protected const MERCURY = [3.303e+23, 2.4397e6];\n    protected const VENUS = [4.869e+24, 6.0518e6];\n    protected const EARTH = [5.976e+24, 6.37814e6];\n    protected const MARS = [6.421e+23, 3.3972e6];\n    protected const JUPITER = [1.9e+27, 7.1492e7];\n    protected const SATURN = [5.688e+26, 6.0268e7];\n    protected const URANUS = [8.686e+25, 2.5559e7];\n    protected const NEPTUNE = [1.024e+26, 2.4746e7];\n\n    /**\n     * Universal gravitational constant.\n     *\n     * @var float\n     */\n    private const G = 6.67300E-11;\n\n    /**\n     * Mass in kilograms.\n     *\n     * @var float\n     */\n    private $mass;\n\n    /**\n     * Radius in meters.\n     *\n     * @var float\n     */\n    private $radius;\n\n    protected function __construct(float $mass, float $radius)\n    {\n        $this->mass = $mass;\n        $this->radius = $radius;\n    }\n\n    public function mass() : float\n    {\n        return $this->mass;\n    }\n\n    public function radius() : float\n    {\n        return $this->radius;\n    }\n\n    public function surfaceGravity() : float\n    {\n        return self::G * $this->mass / ($this->radius * $this->radius);\n    }\n\n    public function surfaceWeight(float $otherMass) : float\n    {\n        return $otherMass * $this->surfaceGravity();\n    }\n}\n\n$myMass = 80;\n\nforeach (Planet::values() as $planet) {\n    printf(\"Your weight on %s is %f\\n\", $planet, $planet->surfaceWeight($myMass));\n}\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/composer.json",
    "content": "{\n    \"name\": \"dasprid/enum\",\n    \"description\": \"PHP 7.1 enum implementation\",\n    \"license\": \"BSD-2-Clause\",\n    \"authors\": [\n        {\n            \"name\": \"Ben Scholzen 'DASPRiD'\",\n            \"email\": \"mail@dasprids.de\",\n            \"homepage\": \"https://dasprids.de/\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"keywords\": [\n        \"enum\",\n        \"map\"\n    ],\n    \"require\": {\n        \"php\": \">=7.1 <9.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"^7 || ^8 || ^9 || ^10 || ^11\",\n        \"squizlabs/php_codesniffer\": \"*\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"DASPRiD\\\\Enum\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"DASPRiD\\\\EnumTest\\\\\": \"test/\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/AbstractEnum.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum;\n\nuse DASPRiD\\Enum\\Exception\\CloneNotSupportedException;\nuse DASPRiD\\Enum\\Exception\\IllegalArgumentException;\nuse DASPRiD\\Enum\\Exception\\MismatchException;\nuse DASPRiD\\Enum\\Exception\\SerializeNotSupportedException;\nuse DASPRiD\\Enum\\Exception\\UnserializeNotSupportedException;\nuse ReflectionClass;\n\nabstract class AbstractEnum\n{\n    /**\n     * @var string\n     */\n    private $name;\n\n    /**\n     * @var int\n     */\n    private $ordinal;\n\n    /**\n     * @var array<string, array<string, static>>\n     */\n    private static $values = [];\n\n    /**\n     * @var array<string, bool>\n     */\n    private static $allValuesLoaded = [];\n\n    /**\n     * @var array<string, array>\n     */\n    private static $constants = [];\n\n    /**\n     * The constructor is private by default to avoid arbitrary enum creation.\n     *\n     * When creating your own constructor for a parameterized enum, make sure to declare it as protected, so that\n     * the static methods are able to construct it. Avoid making it public, as that would allow creation of\n     * non-singleton enum instances.\n     */\n    private function __construct()\n    {\n    }\n\n    /**\n     * Magic getter which forwards all calls to {@see self::valueOf()}.\n     *\n     * @return static\n     */\n    final public static function __callStatic(string $name, array $arguments) : self\n    {\n        return static::valueOf($name);\n    }\n\n    /**\n     * Returns an enum with the specified name.\n     *\n     * The name must match exactly an identifier used to declare an enum in this type (extraneous whitespace characters\n     * are not permitted).\n     *\n     * @return static\n     * @throws IllegalArgumentException if the enum has no constant with the specified name\n     */\n    final public static function valueOf(string $name) : self\n    {\n        if (isset(self::$values[static::class][$name])) {\n            return self::$values[static::class][$name];\n        }\n\n        $constants = self::constants();\n\n        if (array_key_exists($name, $constants)) {\n            return self::createValue($name, $constants[$name][0], $constants[$name][1]);\n        }\n\n        throw new IllegalArgumentException(sprintf('No enum constant %s::%s', static::class, $name));\n    }\n\n    /**\n     * @return static\n     */\n    private static function createValue(string $name, int $ordinal, array $arguments) : self\n    {\n        $instance = new static(...$arguments);\n        $instance->name = $name;\n        $instance->ordinal = $ordinal;\n        self::$values[static::class][$name] = $instance;\n        return $instance;\n    }\n\n    /**\n     * Obtains all possible types defined by this enum.\n     *\n     * @return static[]\n     */\n    final public static function values() : array\n    {\n        if (isset(self::$allValuesLoaded[static::class])) {\n            return self::$values[static::class];\n        }\n\n        if (! isset(self::$values[static::class])) {\n            self::$values[static::class] = [];\n        }\n\n        foreach (self::constants() as $name => $constant) {\n            if (array_key_exists($name, self::$values[static::class])) {\n                continue;\n            }\n\n            static::createValue($name, $constant[0], $constant[1]);\n        }\n\n        uasort(self::$values[static::class], function (self $a, self $b) {\n            return $a->ordinal() <=> $b->ordinal();\n        });\n\n        self::$allValuesLoaded[static::class] = true;\n        return self::$values[static::class];\n    }\n\n    private static function constants() : array\n    {\n        if (isset(self::$constants[static::class])) {\n            return self::$constants[static::class];\n        }\n\n        self::$constants[static::class] = [];\n        $reflectionClass = new ReflectionClass(static::class);\n        $ordinal = -1;\n\n        foreach ($reflectionClass->getReflectionConstants() as $reflectionConstant) {\n            if (! $reflectionConstant->isProtected()) {\n                continue;\n            }\n\n            $value = $reflectionConstant->getValue();\n\n            self::$constants[static::class][$reflectionConstant->name] = [\n                ++$ordinal,\n                is_array($value) ? $value : []\n            ];\n        }\n\n        return self::$constants[static::class];\n    }\n\n    /**\n     * Returns the name of this enum constant, exactly as declared in its enum declaration.\n     *\n     * Most programmers should use the {@see self::__toString()} method in preference to this one, as the toString\n     * method may return a more user-friendly name. This method is designed primarily for use in specialized situations\n     * where correctness depends on getting the exact name, which will not vary from release to release.\n     */\n    final public function name() : string\n    {\n        return $this->name;\n    }\n\n    /**\n     * Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial\n     * constant is assigned an ordinal of zero).\n     *\n     * Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data\n     * structures.\n     */\n    final public function ordinal() : int\n    {\n        return $this->ordinal;\n    }\n\n    /**\n     * Compares this enum with the specified object for order.\n     *\n     * Returns negative integer, zero or positive integer as this object is less than, equal to or greater than the\n     * specified object.\n     *\n     * Enums are only comparable to other enums of the same type. The natural order implemented by this method is the\n     * order in which the constants are declared.\n     *\n     * @throws MismatchException if the passed enum is not of the same type\n     */\n    final public function compareTo(self $other) : int\n    {\n        if (! $other instanceof static) {\n            throw new MismatchException(sprintf(\n                'The passed enum %s is not of the same type as %s',\n                get_class($other),\n                static::class\n            ));\n        }\n\n        return $this->ordinal - $other->ordinal;\n    }\n\n    /**\n     * Forbid cloning enums.\n     *\n     * @throws CloneNotSupportedException\n     */\n    final public function __clone()\n    {\n        throw new CloneNotSupportedException();\n    }\n\n    /**\n     * Forbid serializing enums.\n     *\n     * @throws SerializeNotSupportedException\n     */\n    final public function __sleep() : array\n    {\n        throw new SerializeNotSupportedException();\n    }\n\n    /**\n     * Forbid serializing enums.\n     *\n     * @throws SerializeNotSupportedException\n     */\n    final public function __serialize() : array\n    {\n        throw new SerializeNotSupportedException();\n    }\n\n    /**\n     * Forbid unserializing enums.\n     *\n     * @throws UnserializeNotSupportedException\n     */\n    final public function __wakeup() : void\n    {\n        throw new UnserializeNotSupportedException();\n    }\n\n    /**\n     * Forbid unserializing enums.\n     *\n     * @throws UnserializeNotSupportedException\n     */\n    final public function __unserialize($arg) : void\n    {\n        throw new UnserializeNotSupportedException();\n    }\n\n    /**\n     * Turns the enum into a string representation.\n     *\n     * You may override this method to give a more user-friendly version.\n     */\n    public function __toString() : string\n    {\n        return $this->name;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/EnumMap.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum;\n\nuse DASPRiD\\Enum\\Exception\\ExpectationException;\nuse DASPRiD\\Enum\\Exception\\IllegalArgumentException;\nuse IteratorAggregate;\nuse Serializable;\nuse Traversable;\n\n/**\n * A specialized map implementation for use with enum type keys.\n *\n * All of the keys in an enum map must come from a single enum type that is specified, when the map is created. Enum\n * maps are represented internally as arrays. This representation is extremely compact and efficient.\n *\n * Enum maps are maintained in the natural order of their keys (the order in which the enum constants are declared).\n * This is reflected in the iterators returned by the collection views {@see self::getIterator()} and\n * {@see self::values()}.\n *\n * Iterators returned by the collection views are not consistent: They may or may not show the effects of modifications\n * to the map that occur while the iteration is in progress.\n */\nfinal class EnumMap implements Serializable, IteratorAggregate\n{\n    /**\n     * The class name of the key.\n     *\n     * @var string\n     */\n    private $keyType;\n\n    /**\n     * The type of the value.\n     *\n     * @var string\n     */\n    private $valueType;\n\n    /**\n     * @var bool\n     */\n    private $allowNullValues;\n\n    /**\n     * All of the constants comprising the enum, cached for performance.\n     *\n     * @var array<int, AbstractEnum>\n     */\n    private $keyUniverse;\n\n    /**\n     * Array representation of this map. The ith element is the value to which universe[i] is currently mapped, or null\n     * if it isn't mapped to anything, or NullValue if it's mapped to null.\n     *\n     * @var array<int, mixed>\n     */\n    private $values;\n\n    /**\n     * @var int\n     */\n    private $size = 0;\n\n    /**\n     * Creates a new enum map.\n     *\n     * @param string $keyType the type of the keys, must extend AbstractEnum\n     * @param string $valueType the type of the values\n     * @param bool $allowNullValues whether to allow null values\n     * @throws IllegalArgumentException when key type does not extend AbstractEnum\n     */\n    public function __construct(string $keyType, string $valueType, bool $allowNullValues)\n    {\n        if (! is_subclass_of($keyType, AbstractEnum::class)) {\n            throw new IllegalArgumentException(sprintf(\n                'Class %s does not extend %s',\n                $keyType,\n                AbstractEnum::class\n            ));\n        }\n\n        $this->keyType = $keyType;\n        $this->valueType = $valueType;\n        $this->allowNullValues = $allowNullValues;\n        $this->keyUniverse = $keyType::values();\n        $this->values = array_fill(0, count($this->keyUniverse), null);\n    }\n\n    public function __serialize(): array\n    {\n        $values = [];\n\n        foreach ($this->values as $ordinal => $value) {\n            if (null === $value) {\n                continue;\n            }\n\n            $values[$ordinal] = $this->unmaskNull($value);\n        }\n\n        return [\n            'keyType' => $this->keyType,\n            'valueType' => $this->valueType,\n            'allowNullValues' => $this->allowNullValues,\n            'values' => $values,\n        ];\n    }\n\n    public function __unserialize(array $data): void\n    {\n        $this->unserialize(serialize($data));\n    }\n\n    /**\n     * Checks whether the map types match the supplied ones.\n     *\n     * You should call this method when an EnumMap is passed to you and you want to ensure that it's made up of the\n     * correct types.\n     *\n     * @throws ExpectationException when supplied key type mismatches local key type\n     * @throws ExpectationException when supplied value type mismatches local value type\n     * @throws ExpectationException when the supplied map allows null values, abut should not\n     */\n    public function expect(string $keyType, string $valueType, bool $allowNullValues) : void\n    {\n        if ($keyType !== $this->keyType) {\n            throw new ExpectationException(sprintf(\n                'Callee expected an EnumMap with key type %s, but got %s',\n                $keyType,\n                $this->keyType\n            ));\n        }\n\n        if ($valueType !== $this->valueType) {\n            throw new ExpectationException(sprintf(\n                'Callee expected an EnumMap with value type %s, but got %s',\n                $keyType,\n                $this->keyType\n            ));\n        }\n\n        if ($allowNullValues !== $this->allowNullValues) {\n            throw new ExpectationException(sprintf(\n                'Callee expected an EnumMap with nullable flag %s, but got %s',\n                ($allowNullValues ? 'true' : 'false'),\n                ($this->allowNullValues ? 'true' : 'false')\n            ));\n        }\n    }\n\n    /**\n     * Returns the number of key-value mappings in this map.\n     */\n    public function size() : int\n    {\n        return $this->size;\n    }\n\n    /**\n     * Returns true if this map maps one or more keys to the specified value.\n     */\n    public function containsValue($value) : bool\n    {\n        return in_array($this->maskNull($value), $this->values, true);\n    }\n\n    /**\n     * Returns true if this map contains a mapping for the specified key.\n     */\n    public function containsKey(AbstractEnum $key) : bool\n    {\n        $this->checkKeyType($key);\n        return null !== $this->values[$key->ordinal()];\n    }\n\n    /**\n     * Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.\n     *\n     * More formally, if this map contains a mapping from a key to a value, then this method returns the value;\n     * otherwise it returns null (there can be at most one such mapping).\n     *\n     * A return value of null does not necessarily indicate that the map contains no mapping for the key; it's also\n     * possible that hte map explicitly maps the key to null. The {@see self::containsKey()} operation may be used to\n     * distinguish these two cases.\n     *\n     * @return mixed\n     */\n    public function get(AbstractEnum $key)\n    {\n        $this->checkKeyType($key);\n        return $this->unmaskNull($this->values[$key->ordinal()]);\n    }\n\n    /**\n     * Associates the specified value with the specified key in this map.\n     *\n     * If the map previously contained a mapping for this key, the old value is replaced.\n     *\n     * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key.\n     *               (a null return can also indicate that the map previously associated null with the specified key.)\n     * @throws IllegalArgumentException when the passed values does not match the internal value type\n     */\n    public function put(AbstractEnum $key, $value)\n    {\n        $this->checkKeyType($key);\n\n        if (! $this->isValidValue($value)) {\n            throw new IllegalArgumentException(sprintf('Value is not of type %s', $this->valueType));\n        }\n\n        $index = $key->ordinal();\n        $oldValue = $this->values[$index];\n        $this->values[$index] = $this->maskNull($value);\n\n        if (null === $oldValue) {\n            ++$this->size;\n        }\n\n        return $this->unmaskNull($oldValue);\n    }\n\n    /**\n     * Removes the mapping for this key frm this map if present.\n     *\n     * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key.\n     *               (a null return can also indicate that the map previously associated null with the specified key.)\n     */\n    public function remove(AbstractEnum $key)\n    {\n        $this->checkKeyType($key);\n\n        $index = $key->ordinal();\n        $oldValue = $this->values[$index];\n        $this->values[$index] = null;\n\n        if (null !== $oldValue) {\n            --$this->size;\n        }\n\n        return $this->unmaskNull($oldValue);\n    }\n\n    /**\n     * Removes all mappings from this map.\n     */\n    public function clear() : void\n    {\n        $this->values = array_fill(0, count($this->keyUniverse), null);\n        $this->size = 0;\n    }\n\n    /**\n     * Compares the specified map with this map for quality.\n     *\n     * Returns true if the two maps represent the same mappings.\n     */\n    public function equals(self $other) : bool\n    {\n        if ($this === $other) {\n            return true;\n        }\n\n        if ($this->size !== $other->size) {\n            return false;\n        }\n\n        return $this->values === $other->values;\n    }\n\n    /**\n     * Returns the values contained in this map.\n     *\n     * The array will contain the values in the order their corresponding keys appear in the map, which is their natural\n     * order (the order in which the num constants are declared).\n     */\n    public function values() : array\n    {\n        return array_values(array_map(function ($value) {\n            return $this->unmaskNull($value);\n        }, array_filter($this->values, function ($value) : bool {\n            return null !== $value;\n        })));\n    }\n\n    public function serialize() : string\n    {\n        return serialize($this->__serialize());\n    }\n\n    public function unserialize($serialized) : void\n    {\n        $data = unserialize($serialized);\n        $this->__construct($data['keyType'], $data['valueType'], $data['allowNullValues']);\n\n        foreach ($this->keyUniverse as $key) {\n            if (array_key_exists($key->ordinal(), $data['values'])) {\n                $this->put($key, $data['values'][$key->ordinal()]);\n            }\n        }\n    }\n\n    public function getIterator() : Traversable\n    {\n        foreach ($this->keyUniverse as $key) {\n            if (null === $this->values[$key->ordinal()]) {\n                continue;\n            }\n\n            yield $key => $this->unmaskNull($this->values[$key->ordinal()]);\n        }\n    }\n\n    private function maskNull($value)\n    {\n        if (null === $value) {\n            return NullValue::instance();\n        }\n\n        return $value;\n    }\n\n    private function unmaskNull($value)\n    {\n        if ($value instanceof NullValue) {\n            return null;\n        }\n\n        return $value;\n    }\n\n    /**\n     * @throws IllegalArgumentException when the passed key does not match the internal key type\n     */\n    private function checkKeyType(AbstractEnum $key) : void\n    {\n        if (get_class($key) !== $this->keyType) {\n            throw new IllegalArgumentException(sprintf(\n                'Object of type %s is not the same type as %s',\n                get_class($key),\n                $this->keyType\n            ));\n        }\n    }\n\n    private function isValidValue($value) : bool\n    {\n        if (null === $value) {\n            if ($this->allowNullValues) {\n                return true;\n            }\n\n            return false;\n        }\n\n        switch ($this->valueType) {\n            case 'mixed':\n                return true;\n\n            case 'bool':\n            case 'boolean':\n                return is_bool($value);\n\n            case 'int':\n            case 'integer':\n                return is_int($value);\n\n            case 'float':\n            case 'double':\n                return is_float($value);\n\n            case 'string':\n                return is_string($value);\n\n            case 'object':\n                return is_object($value);\n\n            case 'array':\n                return is_array($value);\n        }\n\n        return $value instanceof $this->valueType;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/CloneNotSupportedException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Exception;\n\nfinal class CloneNotSupportedException extends Exception implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/ExceptionInterface.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Throwable;\n\ninterface ExceptionInterface extends Throwable\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/ExpectationException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Exception;\n\nfinal class ExpectationException extends Exception implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/IllegalArgumentException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Exception;\n\nfinal class IllegalArgumentException extends Exception implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/MismatchException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Exception;\n\nfinal class MismatchException extends Exception implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Exception;\n\nfinal class SerializeNotSupportedException extends Exception implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum\\Exception;\n\nuse Exception;\n\nfinal class UnserializeNotSupportedException extends Exception implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/dasprid/enum/src/NullValue.php",
    "content": "<?php\ndeclare(strict_types = 1);\n\nnamespace DASPRiD\\Enum;\n\nuse DASPRiD\\Enum\\Exception\\CloneNotSupportedException;\nuse DASPRiD\\Enum\\Exception\\SerializeNotSupportedException;\nuse DASPRiD\\Enum\\Exception\\UnserializeNotSupportedException;\n\nfinal class NullValue\n{\n    /**\n     * @var self\n     */\n    private static $instance;\n\n    private function __construct()\n    {\n    }\n\n    public static function instance() : self\n    {\n        return self::$instance ?: self::$instance = new self();\n    }\n\n    /**\n     * Forbid cloning enums.\n     *\n     * @throws CloneNotSupportedException\n     */\n    final public function __clone()\n    {\n        throw new CloneNotSupportedException();\n    }\n\n    /**\n     * Forbid serializing enums.\n     *\n     * @throws SerializeNotSupportedException\n     */\n    final public function __sleep() : array\n    {\n        throw new SerializeNotSupportedException();\n    }\n\n    /**\n     * Forbid serializing enums.\n     *\n     * @throws SerializeNotSupportedException\n     */\n    final public function __serialize() : array\n    {\n        throw new SerializeNotSupportedException();\n    }\n\n    /**\n     * Forbid unserializing enums.\n     *\n     * @throws UnserializeNotSupportedException\n     */\n    final public function __wakeup() : void\n    {\n        throw new UnserializeNotSupportedException();\n    }\n\n    /**\n     * Forbid unserializing enums.\n     *\n     * @throws UnserializeNotSupportedException\n     */\n    final public function __unserialize($arg) : void\n    {\n        throw new UnserializeNotSupportedException();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/.php-cs-fixer.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nreturn (new PhpCsFixer\\Config())\n    ->setRiskyAllowed(true)\n    ->setRules([\n        '@DoctrineAnnotation'                       => true,\n        '@Symfony'                                  => true,\n        '@Symfony:risky'                            => true,\n        '@PHPUnit75Migration:risky'                 => true,\n        '@PHP71Migration'                           => true,\n        '@PHP70Migration:risky'                     => true, // @TODO with next major version\n        'align_multiline_comment'                   => ['comment_type' => 'all_multiline'],\n        'array_indentation'                         => true,\n        'array_syntax'                              => ['syntax' => 'short'],\n        'binary_operator_spaces'                    => ['default' => 'align_single_space'],\n        'blank_line_before_statement'               => true,\n        'class_definition'                          => ['single_item_single_line' => true],\n        'compact_nullable_typehint'                 => true,\n        'concat_space'                              => ['spacing' => 'one'],\n        'echo_tag_syntax'                           => ['format' => 'long'],\n        'error_suppression'                         => false,\n        'escape_implicit_backslashes'               => true,\n        'explicit_indirect_variable'                => true,\n        'explicit_string_variable'                  => true,\n        'fully_qualified_strict_types'              => true,\n        'heredoc_to_nowdoc'                         => true,\n        'list_syntax'                               => ['syntax' => 'long'],\n        'method_argument_space'                     => ['on_multiline' => 'ensure_fully_multiline'],\n        'method_chaining_indentation'               => true,\n        'multiline_comment_opening_closing'         => true,\n        'multiline_whitespace_before_semicolons'    => ['strategy' => 'new_line_for_chained_calls'],\n        'native_constant_invocation'                => true,\n        'native_function_invocation'                => ['include' => ['@internal']],\n        'no_alternative_syntax'                     => true,\n        'no_break_comment'                          => true,\n        'no_extra_blank_lines'                      => ['tokens' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block']],\n        'no_null_property_initialization'           => true,\n        'no_php4_constructor'                       => true,\n        'no_superfluous_elseif'                     => true,\n        'no_unneeded_curly_braces'                  => true,\n        'no_unneeded_final_method'                  => true,\n        'no_unreachable_default_argument_value'     => true,\n        'no_useless_else'                           => true,\n        'no_useless_return'                         => true,\n        'ordered_imports'                           => true,\n        'php_unit_method_casing'                    => true,\n        'php_unit_set_up_tear_down_visibility'      => true,\n        'php_unit_strict'                           => true,\n        'php_unit_test_annotation'                  => true,\n        'php_unit_test_case_static_method_calls'    => true,\n        'php_unit_test_class_requires_covers'       => false,\n        'phpdoc_add_missing_param_annotation'       => true,\n        'phpdoc_order'                              => true,\n        'phpdoc_order_by_value'                     => true,\n        'phpdoc_types_order'                        => true,\n        'random_api_migration'                      => true,\n        'semicolon_after_instruction'               => true,\n        'simplified_null_return'                    => true,\n        'single_line_comment_style'                 => true,\n        'single_line_throw'                         => false,\n        'space_after_semicolon'                     => true,\n        'static_lambda'                             => true,\n        'strict_comparison'                         => true,\n        'string_line_ending'                        => true,\n    ])\n    ->setFinder(\n        PhpCsFixer\\Finder::create()\n            ->in(__DIR__ . '/src')\n            ->in(__DIR__ . '/tests')\n    )\n;\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/LICENSE",
    "content": "Copyright (C) 2013 David de Boer <david@ddeboer.nl>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/README.md",
    "content": "# PHP IMAP library\n\n[![Latest Stable Version](https://img.shields.io/packagist/v/ddeboer/imap.svg)](https://packagist.org/packages/ddeboer/imap)\n[![Downloads](https://img.shields.io/packagist/dt/ddeboer/imap.svg)](https://packagist.org/packages/ddeboer/imap)\n[![Integrate](https://github.com/ddeboer/imap/workflows/Integrate/badge.svg?branch=master)](https://github.com/ddeboer/imap/actions)\n[![Code Coverage](https://codecov.io/gh/ddeboer/imap/coverage.svg?branch=master)](https://codecov.io/gh/ddeboer/imap?branch=master)\n\nA PHP IMAP library to read and process e-mails over IMAP protocol, built with robust Object-Oriented architecture.\n\nThis library requires PHP >= 7.4 with [IMAP](https://www.php.net/manual/en/book.imap.php),\n[iconv](https://www.php.net/manual/en/book.iconv.php) and\n[Multibyte String](https://www.php.net/manual/en/book.mbstring.php) extensions installed.\n\n## Installation\n\nThe recommended way to install the IMAP library is through [Composer](https://getcomposer.org):\n\n```bash\n$ composer require ddeboer/imap\n```\n\nThis command requires you to have Composer installed globally, as explained\nin the [installation chapter](https://getcomposer.org/doc/00-intro.md)\nof the Composer documentation.\n\n## Usage\n\n### Connect and Authenticate\n\n```php\nuse Ddeboer\\Imap\\Server;\n\n$server = new Server('imap.gmail.com');\n\n// $connection is instance of \\Ddeboer\\Imap\\Connection\n$connection = $server->authenticate('my_username', 'my_password');\n```\n\nYou can specify port, [flags and parameters](https://secure.php.net/manual/en/function.imap-open.php)\nto the server:\n\n```php\n$server = new Server(\n    $hostname, // required\n    $port,     // defaults to '993'\n    $flags,    // defaults to '/imap/ssl/validate-cert'\n    $parameters\n);\n```\n\n### Mailboxes\n\nRetrieve mailboxes (also known as mail folders) from the mail server and iterate\nover them:\n\n```php\n$mailboxes = $connection->getMailboxes();\n\nforeach ($mailboxes as $mailbox) {\n    // Skip container-only mailboxes\n    // @see https://secure.php.net/manual/en/function.imap-getmailboxes.php\n    if ($mailbox->getAttributes() & \\LATT_NOSELECT) {\n        continue;\n    }\n\n    // $mailbox is instance of \\Ddeboer\\Imap\\Mailbox\n    printf('Mailbox \"%s\" has %s messages', $mailbox->getName(), $mailbox->count());\n}\n```\n\nOr retrieve a specific mailbox:\n\n```php\n$mailbox = $connection->getMailbox('INBOX');\n```\n\nDelete a mailbox:\n\n```php\n$connection->deleteMailbox($mailbox);\n```\n\nYou can bulk set, or clear, any [flag](https://secure.php.net/manual/en/function.imap-setflag-full.php) of mailbox messages (by UIDs):\n\n```php\n$mailbox->setFlag('\\\\Seen \\\\Flagged', ['1:5', '7', '9']);\n$mailbox->setFlag('\\\\Seen', '1,3,5,6:8');\n\n$mailbox->clearFlag('\\\\Flagged', '1,3');\n```\n\n**WARNING** You must retrieve new Message instances in case of bulk modify flags to refresh the single Messages flags.\n\n### Messages\n\nRetrieve messages (e-mails) from a mailbox and iterate over them:\n\n```php\n$messages = $mailbox->getMessages();\n\nforeach ($messages as $message) {\n    // $message is instance of \\Ddeboer\\Imap\\Message\n}\n```\n\nTo insert a new message (that just has been sent) into the Sent mailbox and flag it as seen:\n\n```php\n$mailbox = $connection->getMailbox('Sent');\n$mailbox->addMessage($messageMIME, '\\\\Seen');\n```\n\nNote that the message should be a string at MIME format (as described in the [RFC2045](https://tools.ietf.org/html/rfc2045)).\n\n#### Searching for Messages\n\n```php\nuse Ddeboer\\Imap\\SearchExpression;\nuse Ddeboer\\Imap\\Search\\Email\\To;\nuse Ddeboer\\Imap\\Search\\Text\\Body;\n\n$search = new SearchExpression();\n$search->addCondition(new To('me@here.com'));\n$search->addCondition(new Body('contents'));\n\n$messages = $mailbox->getMessages($search);\n```\n\n**WARNING** We are currently unable to have both spaces _and_ double-quotes\nescaped together. Only spaces are currently escaped correctly.\nYou can use `Ddeboer\\Imap\\Search\\RawExpression` to write the complete search\ncondition by yourself.\n\nMessages can also be retrieved sorted as per [imap_sort](https://secure.php.net/manual/en/function.imap-sort.php)\nfunction:\n\n```php\n$today = new DateTimeImmutable();\n$thirtyDaysAgo = $today->sub(new DateInterval('P30D'));\n\n$messages = $mailbox->getMessages(\n    new Ddeboer\\Imap\\Search\\Date\\Since($thirtyDaysAgo),\n    \\SORTDATE, // Sort criteria\n    true // Descending order\n);\n```\n\n#### Unknown search criterion: OR\n\nNote that PHP imap library relies on the `c-client` library available at https://www.washington.edu/imap/\nwhich doesn't fully support some IMAP4 search criteria like `OR`. If you want those unsupported criteria,\nyou need to manually patch the latest version (`imap-2007f` of 23-Jul-2011 at the time of this commit)\nand recompile PHP onto your patched `c-client` library.\n\nBy the way most of the common search criteria are available and functioning, browse them in `./src/Search`.\n\nReferences:\n\n1. https://stackoverflow.com/questions/36356715/imap-search-unknown-search-criterion-or\n1. imap-2007f.tar.gz: `./src/c-client/mail.c` and `./docs/internal.txt`\n\n#### Message Properties and Operations\n\nGet message number and unique [message id](https://en.wikipedia.org/wiki/Message-ID)\nin the form <...>:\n\n```php\n$message->getNumber();\n$message->getId();\n```\n\nGet other message properties:\n\n```php\n$message->getSubject();\n$message->getFrom();    // Message\\EmailAddress\n$message->getTo();      // array of Message\\EmailAddress\n$message->getDate();    // DateTimeImmutable\n$message->isAnswered();\n$message->isDeleted();\n$message->isDraft();\n$message->isSeen();\n```\n\nGet message headers as a [\\Ddeboer\\Imap\\Message\\Headers](/src/Ddeboer/Imap/Message/Headers.php) object:\n\n```php\n$message->getHeaders();\n```\n\nGet message body as HTML or plain text:\n\n```php\n$message->getBodyHtml();    // Content of text/html part, if present\n$message->getBodyText();    // Content of text/plain part, if present\n```\n\nReading the message body keeps the message as unseen.\nIf you want to mark the message as seen:\n\n```php\n$message->markAsSeen();\n```\n\nOr you can set, or clear, any [flag](https://secure.php.net/manual/en/function.imap-setflag-full.php):\n\n```php\n$message->setFlag('\\\\Seen \\\\Flagged');\n$message->clearFlag('\\\\Flagged');\n```\n\nMove a message to another mailbox:\n\n```php\n$mailbox = $connection->getMailbox('another-mailbox');\n$message->move($mailbox);\n```\n\nDeleting messages:\n\n```php\n$mailbox->getMessage(1)->delete();\n$mailbox->getMessage(2)->delete();\n$connection->expunge();\n```\n\n### Message Attachments\n\nGet message attachments (both inline and attached) and iterate over them:\n\n```php\n$attachments = $message->getAttachments();\n\nforeach ($attachments as $attachment) {\n    // $attachment is instance of \\Ddeboer\\Imap\\Message\\Attachment\n}\n```\n\nDownload a message attachment to a local file:\n\n```php\n// getDecodedContent() decodes the attachment’s contents automatically:\nfile_put_contents(\n    '/my/local/dir/' . $attachment->getFilename(),\n    $attachment->getDecodedContent()\n);\n```\n\n### Embedded Messages\n\nCheck if attachment is embedded message and get it:\n\n```php\n$attachments = $message->getAttachments();\n\nforeach ($attachments as $attachment) {\n    if ($attachment->isEmbeddedMessage()) {\n        $embeddedMessage = $attachment->getEmbeddedMessage();\n        // $embeddedMessage is instance of \\Ddeboer\\Imap\\Message\\EmbeddedMessage\n    }\n}\n```\n\nAn EmbeddedMessage has the same API as a normal Message, apart from flags\nand operations like copy, move or delete.\n\n### Timeouts\n\nThe IMAP extension provides the [imap_timeout](https://secure.php.net/manual/en/function.imap-timeout.php)\nfunction to adjust the timeout seconds for various operations.\n\nHowever the extension's implementation doesn't link the functionality to a\nspecific context or connection, instead they are global. So in order to not\naffect functionalities outside this library, we had to choose whether wrap\nevery `imap_*` call around an optional user-provided timeout or leave this\ntask to the user.\n\nBecause of the heterogeneous world of IMAP servers and the high complexity\nburden cost for such a little gain of the former, we chose the latter.\n\n## Mock the library\n\nMockability is granted by interfaces present for each API.\nDig into [MockabilityTest](tests/MockabilityTest.php) for an example of a\nmocked workflow.\n\n## Running the Tests\n\nThis library is functionally tested on [Travis CI](https://travis-ci.org/ddeboer/imap)\nagainst a local Dovecot server.\n\nIf you have your own IMAP (test) account, you can run the tests locally by\nproviding your IMAP credentials:\n\n```bash\n$ composer install\n$ IMAP_SERVER_NAME=\"my.imap.server.com\" IMAP_SERVER_PORT=\"60993\" IMAP_USERNAME=\"johndoe\" IMAP_PASSWORD=\"p4ssword\" vendor/bin/phpunit\n```\n\nYou can also copy `phpunit.xml.dist` file to a custom `phpunit.xml` and put\nthese environment variables in it.\n\n**WARNING** Tests create new mailboxes without removing them.\n\n```\n$ docker-compose run tests\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/composer.json",
    "content": "{\n    \"name\": \"ddeboer/imap\",\n    \"description\": \"Object-oriented IMAP for PHP\",\n    \"license\": \"MIT\",\n    \"keywords\": [\n        \"email\",\n        \"mail\",\n        \"imap\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"David de Boer\",\n            \"email\": \"david@ddeboer.nl\"\n        },\n        {\n            \"name\": \"Filippo Tessarotto\",\n            \"email\": \"zoeslam@gmail.com\"\n        },\n        {\n            \"name\": \"Community contributors\",\n            \"homepage\": \"https://github.com/ddeboer/imap/graphs/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.0.1\",\n        \"ext-iconv\": \"*\",\n        \"ext-imap\": \"*\",\n        \"ext-mbstring\": \"*\"\n    },\n    \"require-dev\": {\n        \"friendsofphp/php-cs-fixer\": \"^v3.4.0\",\n        \"laminas/laminas-mail\": \"^2.15.1\",\n        \"malukenho/mcbumpface\": \"^1.1.5\",\n        \"phpstan/phpstan\": \"^1.3.3\",\n        \"phpstan/phpstan-phpunit\": \"^1.0.0\",\n        \"phpstan/phpstan-strict-rules\": \"^1.1.0\",\n        \"phpunit/phpunit\": \"^9.5.11\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Ddeboer\\\\Imap\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Ddeboer\\\\Imap\\\\Tests\\\\\": \"tests/\"\n        }\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"malukenho/mcbumpface\": true\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Connection.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\CreateMailboxException;\nuse Ddeboer\\Imap\\Exception\\DeleteMailboxException;\nuse Ddeboer\\Imap\\Exception\\ImapGetmailboxesException;\nuse Ddeboer\\Imap\\Exception\\ImapNumMsgException;\nuse Ddeboer\\Imap\\Exception\\ImapQuotaException;\nuse Ddeboer\\Imap\\Exception\\MailboxDoesNotExistException;\n\n/**\n * A connection to an IMAP server that is authenticated for a user.\n */\nfinal class Connection implements ConnectionInterface\n{\n    private ImapResourceInterface $resource;\n    private string $server;\n    /**\n     * @var null|MailboxInterface[]\n     */\n    private ?array $mailboxes = null;\n    /**\n     * @var null|array<int|string, \\stdClass>\n     */\n    private ?array $mailboxNames = null;\n\n    /**\n     * Constructor.\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function __construct(ImapResourceInterface $resource, string $server)\n    {\n        $this->resource = $resource;\n        $this->server   = $server;\n    }\n\n    public function getResource(): ImapResourceInterface\n    {\n        return $this->resource;\n    }\n\n    public function expunge(): bool\n    {\n        return \\imap_expunge($this->resource->getStream());\n    }\n\n    public function close(int $flag = 0): bool\n    {\n        $this->resource->clearLastMailboxUsedCache();\n\n        return \\imap_close($this->resource->getStream(), $flag);\n    }\n\n    public function getQuota(string $root = 'INBOX'): array\n    {\n        $errorMessage = null;\n        $errorNumber  = 0;\n        \\set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {\n            $errorMessage = $message;\n            $errorNumber = $nr;\n\n            return true;\n        });\n\n        $return = \\imap_get_quotaroot($this->resource->getStream(), $root);\n\n        \\restore_error_handler();\n\n        if (false === $return || null !== $errorMessage) {\n            throw new ImapQuotaException(\n                \\sprintf(\n                    'IMAP Quota request failed for \"%s\"%s',\n                    $root,\n                    null !== $errorMessage ? ': ' . $errorMessage : ''\n                ),\n                $errorNumber\n            );\n        }\n\n        return $return;\n    }\n\n    public function getMailboxes(): array\n    {\n        $this->initMailboxNames();\n        \\assert(null !== $this->mailboxNames);\n\n        if (null === $this->mailboxes) {\n            $this->mailboxes = [];\n            foreach ($this->mailboxNames as $mailboxName => $mailboxInfo) {\n                $this->mailboxes[(string) $mailboxName] = $this->getMailbox((string) $mailboxName);\n            }\n        }\n\n        return $this->mailboxes;\n    }\n\n    public function hasMailbox(string $name): bool\n    {\n        $this->initMailboxNames();\n        \\assert(null !== $this->mailboxNames);\n\n        return isset($this->mailboxNames[$name]);\n    }\n\n    public function getMailbox(string $name): MailboxInterface\n    {\n        if (false === $this->hasMailbox($name)) {\n            throw new MailboxDoesNotExistException(\\sprintf('Mailbox name \"%s\" does not exist', $name));\n        }\n        \\assert(isset($this->mailboxNames[$name]));\n\n        return new Mailbox($this->resource, $name, $this->mailboxNames[$name]);\n    }\n\n    #[\\ReturnTypeWillChange]\n    public function count()\n    {\n        $return = \\imap_num_msg($this->resource->getStream());\n\n        if (false === $return) {\n            throw new ImapNumMsgException('imap_num_msg failed');\n        }\n\n        return $return;\n    }\n\n    public function ping(): bool\n    {\n        return \\imap_ping($this->resource->getStream());\n    }\n\n    public function createMailbox(string $name): MailboxInterface\n    {\n        if (false === \\imap_createmailbox($this->resource->getStream(), $this->server . \\mb_convert_encoding($name, 'UTF7-IMAP', 'UTF-8'))) {\n            throw new CreateMailboxException(\\sprintf('Can not create \"%s\" mailbox at \"%s\"', $name, $this->server));\n        }\n\n        $this->mailboxNames = $this->mailboxes = null;\n        $this->resource->clearLastMailboxUsedCache();\n\n        return $this->getMailbox($name);\n    }\n\n    public function deleteMailbox(MailboxInterface $mailbox): void\n    {\n        if (false === \\imap_deletemailbox($this->resource->getStream(), $mailbox->getFullEncodedName())) {\n            throw new DeleteMailboxException(\\sprintf('Mailbox \"%s\" could not be deleted', $mailbox->getName()));\n        }\n\n        $this->mailboxes = $this->mailboxNames = null;\n        $this->resource->clearLastMailboxUsedCache();\n    }\n\n    private function initMailboxNames(): void\n    {\n        if (null !== $this->mailboxNames) {\n            return;\n        }\n\n        $this->mailboxNames = [];\n        $mailboxesInfo      = \\imap_getmailboxes($this->resource->getStream(), $this->server, '*');\n        if (!\\is_array($mailboxesInfo)) {\n            throw new ImapGetmailboxesException('imap_getmailboxes failed');\n        }\n\n        foreach ($mailboxesInfo as $mailboxInfo) {\n            $name = \\mb_convert_encoding(\\str_replace($this->server, '', $mailboxInfo->name), 'UTF-8', 'UTF7-IMAP');\n            \\assert(\\is_string($name));\n\n            $this->mailboxNames[$name] = $mailboxInfo;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/ConnectionInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\CreateMailboxException;\nuse Ddeboer\\Imap\\Exception\\DeleteMailboxException;\nuse Ddeboer\\Imap\\Exception\\InvalidResourceException;\nuse Ddeboer\\Imap\\Exception\\MailboxDoesNotExistException;\n\n/**\n * A connection to an IMAP server that is authenticated for a user.\n */\ninterface ConnectionInterface extends \\Countable\n{\n    /**\n     * Get IMAP resource.\n     */\n    public function getResource(): ImapResourceInterface;\n\n    /**\n     * Delete all messages marked for deletion.\n     */\n    public function expunge(): bool;\n\n    /**\n     * Close connection.\n     */\n    public function close(int $flag = 0): bool;\n\n    /**\n     * Check if the connection is still active.\n     *\n     * @throws InvalidResourceException If connection was closed\n     */\n    public function ping(): bool;\n\n    /**\n     * Get Mailbox quota.\n     *\n     * @return array<string, int>\n     */\n    public function getQuota(string $root = 'INBOX'): array;\n\n    /**\n     * Get a list of mailboxes (also known as folders).\n     *\n     * @return MailboxInterface[]\n     */\n    public function getMailboxes(): array;\n\n    /**\n     * Check that a mailbox with the given name exists.\n     *\n     * @param string $name Mailbox name\n     */\n    public function hasMailbox(string $name): bool;\n\n    /**\n     * Get a mailbox by its name.\n     *\n     * @param string $name Mailbox name\n     *\n     * @throws MailboxDoesNotExistException If mailbox does not exist\n     */\n    public function getMailbox(string $name): MailboxInterface;\n\n    /**\n     * Create mailbox.\n     *\n     * @throws CreateMailboxException\n     */\n    public function createMailbox(string $name): MailboxInterface;\n\n    /**\n     * Delete mailbox.\n     *\n     * @throws DeleteMailboxException\n     */\n    public function deleteMailbox(MailboxInterface $mailbox): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AbstractException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nabstract class AbstractException extends \\RuntimeException\n{\n    private const ERROR_LABELS = [\n        \\E_ERROR                => 'E_ERROR',\n        \\E_WARNING              => 'E_WARNING',\n        \\E_PARSE                => 'E_PARSE',\n        \\E_NOTICE               => 'E_NOTICE',\n        \\E_CORE_ERROR           => 'E_CORE_ERROR',\n        \\E_CORE_WARNING         => 'E_CORE_WARNING',\n        \\E_COMPILE_ERROR        => 'E_COMPILE_ERROR',\n        \\E_COMPILE_WARNING      => 'E_COMPILE_WARNING',\n        \\E_USER_ERROR           => 'E_USER_ERROR',\n        \\E_USER_WARNING         => 'E_USER_WARNING',\n        \\E_USER_NOTICE          => 'E_USER_NOTICE',\n        \\E_STRICT               => 'E_STRICT',\n        \\E_RECOVERABLE_ERROR    => 'E_RECOVERABLE_ERROR',\n        \\E_DEPRECATED           => 'E_DEPRECATED',\n        \\E_USER_DEPRECATED      => 'E_USER_DEPRECATED',\n    ];\n\n    final public function __construct(string $message, int $code = 0, \\Throwable $previous = null)\n    {\n        $errorType = '';\n        if (isset(self::ERROR_LABELS[$code])) {\n            $errorType = \\sprintf('[%s] ', self::ERROR_LABELS[$code]);\n        }\n\n        $joinString      = \"\\n- \";\n        $alerts          = \\imap_alerts();\n        $errors          = \\imap_errors();\n        $completeMessage = \\sprintf(\n            \"%s%s\\nimap_alerts (%s):%s\\nimap_errors (%s):%s\",\n            $errorType,\n            $message,\n            false !== $alerts ? \\count($alerts) : 0,\n            false !== $alerts ? $joinString . \\implode($joinString, $alerts) : '',\n            false !== $errors ? \\count($errors) : 0,\n            false !== $errors ? $joinString . \\implode($joinString, $errors) : ''\n        );\n\n        parent::__construct($completeMessage, $code, $previous);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/AuthenticationFailedException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class AuthenticationFailedException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/CreateMailboxException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class CreateMailboxException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/DeleteMailboxException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class DeleteMailboxException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchbodyException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapFetchbodyException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapFetchheaderException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapFetchheaderException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapGetmailboxesException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapGetmailboxesException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapMsgnoException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapMsgnoException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapNumMsgException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapNumMsgException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapQuotaException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapQuotaException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ImapStatusException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ImapStatusException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidDateHeaderException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class InvalidDateHeaderException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidHeadersException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class InvalidHeadersException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidResourceException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class InvalidResourceException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/InvalidSearchCriteriaException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class InvalidSearchCriteriaException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MailboxDoesNotExistException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MailboxDoesNotExistException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageCopyException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MessageCopyException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDeleteException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MessageDeleteException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageDoesNotExistException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MessageDoesNotExistException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageMoveException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MessageMoveException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageStructureException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MessageStructureException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/MessageUndeleteException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class MessageUndeleteException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/NotEmbeddedMessageException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class NotEmbeddedMessageException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/OutOfBoundsException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class OutOfBoundsException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ReopenMailboxException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ReopenMailboxException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/ResourceCheckFailureException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class ResourceCheckFailureException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnexpectedEncodingException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class UnexpectedEncodingException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Exception/UnsupportedCharsetException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Exception;\n\nfinal class UnsupportedCharsetException extends AbstractException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/ImapResource.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\InvalidResourceException;\nuse Ddeboer\\Imap\\Exception\\ReopenMailboxException;\nuse IMAP\\Connection;\n\n/**\n * An imap resource stream.\n */\nfinal class ImapResource implements ImapResourceInterface\n{\n    /**\n     * @var resource\n     */\n    private $resource;\n    private ?MailboxInterface $mailbox           = null;\n    private static ?string $lastMailboxUsedCache = null;\n\n    /**\n     * Constructor.\n     *\n     * @param Connection|resource $resource\n     */\n    public function __construct($resource, MailboxInterface $mailbox = null)\n    {\n        $this->resource = $resource;\n        $this->mailbox  = $mailbox;\n    }\n\n    public function getStream()\n    {\n        if (\n            !$this->resource instanceof Connection\n            && (false === \\is_resource($this->resource) || 'imap' !== \\get_resource_type($this->resource))\n        ) {\n            throw new InvalidResourceException('Supplied resource is not a valid imap resource');\n        }\n\n        $this->initMailbox();\n\n        return $this->resource;\n    }\n\n    public function clearLastMailboxUsedCache(): void\n    {\n        self::$lastMailboxUsedCache = null;\n    }\n\n    /**\n     * If connection is not currently in this mailbox, switch it to this mailbox.\n     */\n    private function initMailbox(): void\n    {\n        if (null === $this->mailbox || self::isMailboxOpen($this->mailbox, $this->resource)) {\n            return;\n        }\n\n        \\set_error_handler(static function (): bool {\n            return true;\n        });\n\n        \\imap_reopen($this->resource, $this->mailbox->getFullEncodedName());\n\n        \\restore_error_handler();\n\n        if (self::isMailboxOpen($this->mailbox, $this->resource)) {\n            return;\n        }\n\n        throw new ReopenMailboxException(\\sprintf('Cannot reopen mailbox \"%s\"', $this->mailbox->getName()));\n    }\n\n    /**\n     * Check whether the current mailbox is open.\n     *\n     * @param resource $resource\n     */\n    private static function isMailboxOpen(MailboxInterface $mailbox, $resource): bool\n    {\n        $currentMailboxName = $mailbox->getFullEncodedName();\n        if ($currentMailboxName === self::$lastMailboxUsedCache) {\n            return true;\n        }\n\n        self::$lastMailboxUsedCache = null;\n        $check                      = \\imap_check($resource);\n        $return                     = false !== $check && $check->Mailbox === $currentMailboxName;\n\n        if (true === $return) {\n            self::$lastMailboxUsedCache = $currentMailboxName;\n        }\n\n        return $return;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/ImapResourceInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\InvalidResourceException;\n\ninterface ImapResourceInterface\n{\n    /**\n     * Get IMAP resource stream.\n     *\n     * @throws InvalidResourceException\n     *\n     * @return resource\n     */\n    public function getStream();\n\n    /**\n     * Clear last mailbox used cache.\n     */\n    public function clearLastMailboxUsedCache(): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Mailbox.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse DateTimeInterface;\nuse Ddeboer\\Imap\\Exception\\ImapNumMsgException;\nuse Ddeboer\\Imap\\Exception\\ImapStatusException;\nuse Ddeboer\\Imap\\Exception\\InvalidSearchCriteriaException;\nuse Ddeboer\\Imap\\Exception\\MessageCopyException;\nuse Ddeboer\\Imap\\Exception\\MessageMoveException;\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\nuse Ddeboer\\Imap\\Search\\LogicalOperator\\All;\n\n/**\n * An IMAP mailbox (commonly referred to as a 'folder').\n */\nfinal class Mailbox implements MailboxInterface\n{\n    private ImapResourceInterface $resource;\n    private string $name;\n    private \\stdClass $info;\n\n    /**\n     * Constructor.\n     *\n     * @param ImapResourceInterface $resource IMAP resource\n     * @param string                $name     Mailbox decoded name\n     * @param \\stdClass             $info     Mailbox info\n     */\n    public function __construct(ImapResourceInterface $resource, string $name, \\stdClass $info)\n    {\n        $this->resource = new ImapResource($resource->getStream(), $this);\n        $this->name     = $name;\n        $this->info     = $info;\n    }\n\n    public function getName(): string\n    {\n        return $this->name;\n    }\n\n    public function getEncodedName(): string\n    {\n        /** @var string $name */\n        $name = $this->info->name;\n\n        return (string) \\preg_replace('/^{.+}/', '', $name);\n    }\n\n    public function getFullEncodedName(): string\n    {\n        return $this->info->name;\n    }\n\n    public function getAttributes(): int\n    {\n        return $this->info->attributes;\n    }\n\n    public function getDelimiter(): string\n    {\n        return $this->info->delimiter;\n    }\n\n    #[\\ReturnTypeWillChange]\n    public function count()\n    {\n        $return = \\imap_num_msg($this->resource->getStream());\n\n        if (false === $return) {\n            throw new ImapNumMsgException('imap_num_msg failed');\n        }\n\n        return $return;\n    }\n\n    public function getStatus(int $flags = null): \\stdClass\n    {\n        $return = \\imap_status($this->resource->getStream(), $this->getFullEncodedName(), $flags ?? \\SA_ALL);\n\n        if (false === $return) {\n            throw new ImapStatusException('imap_status failed');\n        }\n\n        return $return;\n    }\n\n    public function setFlag(string $flag, $numbers): bool\n    {\n        return \\imap_setflag_full($this->resource->getStream(), $this->prepareMessageIds($numbers), $flag, \\ST_UID);\n    }\n\n    public function clearFlag(string $flag, $numbers): bool\n    {\n        return \\imap_clearflag_full($this->resource->getStream(), $this->prepareMessageIds($numbers), $flag, \\ST_UID);\n    }\n\n    public function getMessages(ConditionInterface $search = null, int $sortCriteria = null, bool $descending = false, string $charset = null): MessageIteratorInterface\n    {\n        if (null === $search) {\n            $search = new All();\n        }\n        $query = $search->toString();\n\n        if (\\PHP_VERSION_ID < 80000) {\n            $descending = (int) $descending;\n        }\n\n        // We need to clear the stack to know whether imap_last_error()\n        // is related to this imap_search\n        \\imap_errors();\n\n        if (null !== $sortCriteria) {\n            $params = [\n                $this->resource->getStream(),\n                $sortCriteria,\n                $descending,\n                \\SE_UID,\n                $query,\n            ];\n            if (null !== $charset) {\n                $params[] = $charset;\n            }\n            $messageNumbers = \\imap_sort(...$params);\n        } else {\n            $params = [\n                $this->resource->getStream(),\n                $query,\n                \\SE_UID,\n            ];\n            if (null !== $charset) {\n                $params[] = $charset;\n            }\n            $messageNumbers = \\imap_search(...$params);\n        }\n        if (false !== \\imap_last_error()) {\n            // this way all errors occurred during search will be reported\n            throw new InvalidSearchCriteriaException(\n                \\sprintf('Invalid search criteria [%s]', $query)\n            );\n        }\n        if (false === $messageNumbers) {\n            // imap_search can also return false\n            $messageNumbers = [];\n        }\n\n        return new MessageIterator($this->resource, $messageNumbers);\n    }\n\n    public function getMessageSequence(string $sequence): MessageIteratorInterface\n    {\n        \\imap_errors();\n\n        $overview = \\imap_fetch_overview($this->resource->getStream(), $sequence, \\FT_UID);\n        if (false !== \\imap_last_error()) {\n            throw new InvalidSearchCriteriaException(\n                \\sprintf('Invalid sequence [%s]', $sequence)\n            );\n        }\n        if (\\is_array($overview) && [] !== $overview) {\n            $messageNumbers = \\array_column($overview, 'uid');\n        } else {\n            $messageNumbers = [];\n        }\n\n        return new MessageIterator($this->resource, $messageNumbers);\n    }\n\n    public function getMessage(int $number): MessageInterface\n    {\n        return new Message($this->resource, $number);\n    }\n\n    public function getIterator(): MessageIteratorInterface\n    {\n        return $this->getMessages();\n    }\n\n    public function addMessage(string $message, string $options = null, DateTimeInterface $internalDate = null): bool\n    {\n        $arguments = [\n            $this->resource->getStream(),\n            $this->getFullEncodedName(),\n            $message,\n            $options ?? '',\n        ];\n        if (null !== $internalDate) {\n            $arguments[] = $internalDate->format('d-M-Y H:i:s O');\n        }\n\n        return \\imap_append(...$arguments);\n    }\n\n    public function getThread(): array\n    {\n        \\set_error_handler(static function (): bool {\n            return true;\n        });\n\n        /** @var array<string, int>|false $tree */\n        $tree = \\imap_thread($this->resource->getStream(), \\SE_UID);\n\n        \\restore_error_handler();\n\n        return false !== $tree ? $tree : [];\n    }\n\n    public function move($numbers, MailboxInterface $mailbox): void\n    {\n        if (!\\imap_mail_copy($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \\CP_UID | \\CP_MOVE)) {\n            throw new MessageMoveException(\\sprintf('Messages cannot be moved to \"%s\"', $mailbox->getName()));\n        }\n    }\n\n    public function copy($numbers, MailboxInterface $mailbox): void\n    {\n        if (!\\imap_mail_copy($this->resource->getStream(), $this->prepareMessageIds($numbers), $mailbox->getEncodedName(), \\CP_UID)) {\n            throw new MessageCopyException(\\sprintf('Messages cannot be copied to \"%s\"', $mailbox->getName()));\n        }\n    }\n\n    /**\n     * Prepare message ids for the use with bulk functions.\n     *\n     * @param array<int, int|string>|MessageIterator|string $messageIds Message numbers\n     */\n    private function prepareMessageIds($messageIds): string\n    {\n        if ($messageIds instanceof MessageIterator) {\n            $messageIds = $messageIds->getArrayCopy();\n        }\n\n        if (\\is_array($messageIds)) {\n            $messageIds = \\implode(',', $messageIds);\n        }\n\n        return $messageIds;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/MailboxInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse DateTimeInterface;\nuse Ddeboer\\Imap\\Message\\PartInterface;\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * An IMAP mailbox (commonly referred to as a 'folder').\n *\n * @extends \\IteratorAggregate<int, MessageInterface>\n */\ninterface MailboxInterface extends \\Countable, \\IteratorAggregate\n{\n    /**\n     * Get mailbox decoded name.\n     */\n    public function getName(): string;\n\n    /**\n     * Get mailbox encoded path.\n     */\n    public function getEncodedName(): string;\n\n    /**\n     * Get mailbox encoded full name.\n     */\n    public function getFullEncodedName(): string;\n\n    /**\n     * Get mailbox attributes.\n     */\n    public function getAttributes(): int;\n\n    /**\n     * Get mailbox delimiter.\n     */\n    public function getDelimiter(): string;\n\n    /**\n     * Get Mailbox status.\n     */\n    public function getStatus(int $flags = null): \\stdClass;\n\n    /**\n     * Bulk Set Flag for Messages.\n     *\n     * @param string                                        $flag    \\Seen, \\Answered, \\Flagged, \\Deleted, and \\Draft\n     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers\n     */\n    public function setFlag(string $flag, $numbers): bool;\n\n    /**\n     * Bulk Clear Flag for Messages.\n     *\n     * @param string                                        $flag    \\Seen, \\Answered, \\Flagged, \\Deleted, and \\Draft\n     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers\n     */\n    public function clearFlag(string $flag, $numbers): bool;\n\n    /**\n     * Get message ids.\n     *\n     * @param ConditionInterface $search Search expression (optional)\n     */\n    public function getMessages(ConditionInterface $search = null, int $sortCriteria = null, bool $descending = false, string $charset = null): MessageIteratorInterface;\n\n    /**\n     * Get message iterator for a sequence.\n     *\n     * @param string $sequence Message numbers\n     */\n    public function getMessageSequence(string $sequence): MessageIteratorInterface;\n\n    /**\n     * Get a message by message number.\n     *\n     * @param int $number Message number\n     *\n     * @return MessageInterface<PartInterface>\n     */\n    public function getMessage(int $number): MessageInterface;\n\n    /**\n     * Get messages in this mailbox.\n     */\n    public function getIterator(): MessageIteratorInterface;\n\n    /**\n     * Add a message to the mailbox.\n     */\n    public function addMessage(string $message, string $options = null, DateTimeInterface $internalDate = null): bool;\n\n    /**\n     * Returns a tree of threaded message for the current Mailbox.\n     *\n     * @return array<string, int>\n     */\n    public function getThread(): array;\n\n    /**\n     * Bulk move messages.\n     *\n     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers\n     * @param MailboxInterface                              $mailbox Destination Mailbox to move the messages to\n     *\n     * @throws \\Ddeboer\\Imap\\Exception\\MessageMoveException\n     */\n    public function move($numbers, self $mailbox): void;\n\n    /**\n     * Bulk copy messages.\n     *\n     * @param array<int, int|string>|MessageIterator|string $numbers Message numbers\n     * @param MailboxInterface                              $mailbox Destination Mailbox to copy the messages to\n     *\n     * @throws \\Ddeboer\\Imap\\Exception\\MessageCopyException\n     */\n    public function copy($numbers, self $mailbox): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractMessage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nuse Ddeboer\\Imap\\Exception\\InvalidDateHeaderException;\n\nabstract class AbstractMessage extends AbstractPart\n{\n    /**\n     * @var null|Attachment[]\n     */\n    private ?array $attachments = null;\n\n    /**\n     * Get message headers.\n     */\n    abstract public function getHeaders(): Headers;\n\n    /**\n     * Get message id.\n     *\n     * A unique message id in the form <...>\n     */\n    final public function getId(): ?string\n    {\n        $messageId = $this->getHeaders()->get('message_id');\n        \\assert(null === $messageId || \\is_string($messageId));\n\n        return $messageId;\n    }\n\n    /**\n     * Get message sender (from headers).\n     */\n    final public function getFrom(): ?EmailAddress\n    {\n        $from = $this->getHeaders()->get('from');\n        \\assert(null === $from || \\is_array($from));\n\n        return null !== $from ? $this->decodeEmailAddress($from[0]) : null;\n    }\n\n    /**\n     * Get To recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no To: recipients\n     */\n    final public function getTo(): array\n    {\n        $emails = $this->getHeaders()->get('to');\n        \\assert(null === $emails || \\is_array($emails));\n\n        return $this->decodeEmailAddresses($emails ?? []);\n    }\n\n    /**\n     * Get Cc recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no CC: recipients\n     */\n    final public function getCc(): array\n    {\n        $emails = $this->getHeaders()->get('cc');\n        \\assert(null === $emails || \\is_array($emails));\n\n        return $this->decodeEmailAddresses($emails ?? []);\n    }\n\n    /**\n     * Get Bcc recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no BCC: recipients\n     */\n    final public function getBcc(): array\n    {\n        $emails = $this->getHeaders()->get('bcc');\n        \\assert(null === $emails || \\is_array($emails));\n\n        return $this->decodeEmailAddresses($emails ?? []);\n    }\n\n    /**\n     * Get Reply-To recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no Reply-To: recipients\n     */\n    final public function getReplyTo(): array\n    {\n        $emails = $this->getHeaders()->get('reply_to');\n        \\assert(null === $emails || \\is_array($emails));\n\n        return $this->decodeEmailAddresses($emails ?? []);\n    }\n\n    /**\n     * Get Sender.\n     *\n     * @return EmailAddress[] Empty array in case message has no Sender: recipients\n     */\n    final public function getSender(): array\n    {\n        $emails = $this->getHeaders()->get('sender');\n        \\assert(null === $emails || \\is_array($emails));\n\n        return $this->decodeEmailAddresses($emails ?? []);\n    }\n\n    /**\n     * Get Return-Path.\n     *\n     * @return EmailAddress[] Empty array in case message has no Return-Path: recipients\n     */\n    final public function getReturnPath(): array\n    {\n        $emails = $this->getHeaders()->get('return_path');\n        \\assert(null === $emails || \\is_array($emails));\n\n        return $this->decodeEmailAddresses($emails ?? []);\n    }\n\n    /**\n     * Get date (from headers).\n     */\n    final public function getDate(): ?\\DateTimeImmutable\n    {\n        /** @var null|string $dateHeader */\n        $dateHeader = $this->getHeaders()->get('date');\n        if (null === $dateHeader) {\n            return null;\n        }\n\n        $alteredValue = $dateHeader;\n        $alteredValue = \\str_replace(',', '', $alteredValue);\n        $alteredValue = (string) \\preg_replace('/^[a-zA-Z]+ ?/', '', $alteredValue);\n        $alteredValue = (string) \\preg_replace('/\\(.*\\)/', '', $alteredValue);\n        $alteredValue = (string) \\preg_replace('/\\<.*\\>/', '', $alteredValue);\n        $alteredValue = (string) \\preg_replace('/\\bUT\\b/', 'UTC', $alteredValue);\n        if (0 === \\preg_match('/\\d\\d:\\d\\d:\\d\\d.* [\\+\\-]\\d\\d:?\\d\\d/', $alteredValue)) {\n            $alteredValue .= ' +0000';\n        }\n        // Handle numeric months\n        $alteredValue = (string) \\preg_replace('/^(\\d\\d) (\\d\\d) (\\d\\d(?:\\d\\d)?) /', '$3-$2-$1 ', $alteredValue);\n\n        try {\n            $date = new \\DateTimeImmutable($alteredValue);\n        } catch (\\Throwable $ex) {\n            throw new InvalidDateHeaderException(\\sprintf('Invalid Date header found: \"%s\"', $dateHeader), 0, $ex);\n        }\n\n        return $date;\n    }\n\n    /**\n     * Get message size (from headers).\n     *\n     * @return null|int|string\n     */\n    final public function getSize()\n    {\n        $size = $this->getHeaders()->get('size');\n        \\assert(null === $size || \\is_int($size) || \\is_string($size));\n\n        return $size;\n    }\n\n    /**\n     * Get message subject (from headers).\n     */\n    final public function getSubject(): ?string\n    {\n        $subject = $this->getHeaders()->get('subject');\n        \\assert(null === $subject || \\is_string($subject));\n\n        return $subject;\n    }\n\n    /**\n     * Get message In-Reply-To (from headers).\n     *\n     * @return string[]\n     */\n    final public function getInReplyTo(): array\n    {\n        $inReplyTo = $this->getHeaders()->get('in_reply_to');\n        \\assert(null === $inReplyTo || \\is_string($inReplyTo));\n\n        return null !== $inReplyTo ? \\explode(' ', $inReplyTo) : [];\n    }\n\n    /**\n     * Get message References (from headers).\n     *\n     * @return string[]\n     */\n    final public function getReferences(): array\n    {\n        $references = $this->getHeaders()->get('references');\n        \\assert(null === $references || \\is_string($references));\n\n        return null !== $references ? \\explode(' ', $references) : [];\n    }\n\n    /**\n     * Get body HTML.\n     */\n    final public function getBodyHtml(): ?string\n    {\n        $iterator = new \\RecursiveIteratorIterator($this, \\RecursiveIteratorIterator::SELF_FIRST);\n        foreach ($iterator as $part) {\n            if (self::SUBTYPE_HTML === $part->getSubtype()) {\n                return $part->getDecodedContent();\n            }\n        }\n\n        // If message has no parts and is HTML, return content of message itself.\n        if (self::SUBTYPE_HTML === $this->getSubtype()) {\n            return $this->getDecodedContent();\n        }\n\n        return null;\n    }\n\n    /**\n     * Get body text.\n     */\n    final public function getBodyText(): ?string\n    {\n        $iterator = new \\RecursiveIteratorIterator($this, \\RecursiveIteratorIterator::SELF_FIRST);\n        foreach ($iterator as $part) {\n            if (self::SUBTYPE_PLAIN === $part->getSubtype()) {\n                return $part->getDecodedContent();\n            }\n        }\n\n        // If message has no parts, return content of message itself.\n        if (self::SUBTYPE_PLAIN === $this->getSubtype()) {\n            return $this->getDecodedContent();\n        }\n\n        return null;\n    }\n\n    /**\n     * Get attachments (if any) linked to this e-mail.\n     *\n     * @return AttachmentInterface[]\n     */\n    final public function getAttachments(): array\n    {\n        if (null === $this->attachments) {\n            $this->attachments = self::gatherAttachments($this);\n        }\n\n        return $this->attachments;\n    }\n\n    /**\n     * @param PartInterface<PartInterface> $part\n     *\n     * @return Attachment[]\n     */\n    private static function gatherAttachments(PartInterface $part): array\n    {\n        $attachments = [];\n        foreach ($part->getParts() as $childPart) {\n            if ($childPart instanceof Attachment) {\n                $attachments[] = $childPart;\n            }\n            if ($childPart->hasChildren()) {\n                $attachments = \\array_merge($attachments, self::gatherAttachments($childPart));\n            }\n        }\n\n        return $attachments;\n    }\n\n    /**\n     * Does this message have attachments?\n     */\n    final public function hasAttachments(): bool\n    {\n        return \\count($this->getAttachments()) > 0;\n    }\n\n    /**\n     * @param \\stdClass[] $addresses\n     *\n     * @return EmailAddress[]\n     */\n    private function decodeEmailAddresses(array $addresses): array\n    {\n        $return = [];\n        foreach ($addresses as $address) {\n            if (isset($address->mailbox)) {\n                $return[] = $this->decodeEmailAddress($address);\n            }\n        }\n\n        return $return;\n    }\n\n    private function decodeEmailAddress(\\stdClass $value): EmailAddress\n    {\n        return new EmailAddress($value->mailbox, $value->host, $value->personal);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/AbstractPart.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nuse Ddeboer\\Imap\\Exception\\ImapFetchbodyException;\nuse Ddeboer\\Imap\\Exception\\UnexpectedEncodingException;\nuse Ddeboer\\Imap\\ImapResourceInterface;\nuse Ddeboer\\Imap\\Message;\n\n/**\n * A message part.\n */\nabstract class AbstractPart implements PartInterface\n{\n    private const TYPES_MAP = [\n        \\TYPETEXT        => self::TYPE_TEXT,\n        \\TYPEMULTIPART   => self::TYPE_MULTIPART,\n        \\TYPEMESSAGE     => self::TYPE_MESSAGE,\n        \\TYPEAPPLICATION => self::TYPE_APPLICATION,\n        \\TYPEAUDIO       => self::TYPE_AUDIO,\n        \\TYPEIMAGE       => self::TYPE_IMAGE,\n        \\TYPEVIDEO       => self::TYPE_VIDEO,\n        \\TYPEMODEL       => self::TYPE_MODEL,\n        \\TYPEOTHER       => self::TYPE_OTHER,\n    ];\n\n    private const ENCODINGS_MAP = [\n        \\ENC7BIT            => self::ENCODING_7BIT,\n        \\ENC8BIT            => self::ENCODING_8BIT,\n        \\ENCBINARY          => self::ENCODING_BINARY,\n        \\ENCBASE64          => self::ENCODING_BASE64,\n        \\ENCQUOTEDPRINTABLE => self::ENCODING_QUOTED_PRINTABLE,\n    ];\n\n    private const ATTACHMENT_KEYS = [\n        'name'      => true,\n        'filename'  => true,\n        'name*'     => true,\n        'filename*' => true,\n    ];\n\n    protected ImapResourceInterface $resource;\n    private bool $structureParsed = false;\n    /**\n     * @var AbstractPart[]\n     */\n    private array $parts = [];\n    private string $partNumber;\n    private int $messageNumber;\n    private \\stdClass $structure;\n    private Parameters $parameters;\n    private ?string $type        = null;\n    private ?string $subtype     = null;\n    private ?string $encoding    = null;\n    private ?string $disposition = null;\n    private ?string $description = null;\n    /** @var null|int|string */\n    private $bytes;\n    private ?string $lines          = null;\n    private ?string $content        = null;\n    private ?string $decodedContent = null;\n    private int $key                = 0;\n\n    /**\n     * Constructor.\n     *\n     * @param ImapResourceInterface $resource      IMAP resource\n     * @param int                   $messageNumber Message number\n     * @param string                $partNumber    Part number\n     * @param \\stdClass             $structure     Part structure\n     */\n    public function __construct(\n        ImapResourceInterface $resource,\n        int $messageNumber,\n        string $partNumber,\n        \\stdClass $structure\n    ) {\n        $this->resource      = $resource;\n        $this->messageNumber = $messageNumber;\n        $this->partNumber    = $partNumber;\n        $this->setStructure($structure);\n    }\n\n    final public function getNumber(): int\n    {\n        $this->assertMessageExists($this->messageNumber);\n\n        return $this->messageNumber;\n    }\n\n    /**\n     * Ensure message exists.\n     */\n    protected function assertMessageExists(int $messageNumber): void\n    {\n    }\n\n    /**\n     * @param \\stdClass $structure Part structure\n     */\n    final protected function setStructure(\\stdClass $structure): void\n    {\n        $this->structure = $structure;\n    }\n\n    final public function getStructure(): \\stdClass\n    {\n        $this->lazyLoadStructure();\n\n        return $this->structure;\n    }\n\n    /**\n     * Lazy load structure.\n     */\n    protected function lazyLoadStructure(): void\n    {\n    }\n\n    final public function getParameters(): Parameters\n    {\n        $this->lazyParseStructure();\n\n        return $this->parameters;\n    }\n\n    final public function getCharset(): ?string\n    {\n        $this->lazyParseStructure();\n\n        $charset = $this->parameters->get('charset');\n        \\assert(null === $charset || \\is_string($charset));\n\n        return '' !== $charset ? $charset : null;\n    }\n\n    final public function getType(): ?string\n    {\n        $this->lazyParseStructure();\n\n        return $this->type;\n    }\n\n    final public function getSubtype(): ?string\n    {\n        $this->lazyParseStructure();\n\n        return $this->subtype;\n    }\n\n    final public function getEncoding(): ?string\n    {\n        $this->lazyParseStructure();\n\n        return $this->encoding;\n    }\n\n    final public function getDisposition(): ?string\n    {\n        $this->lazyParseStructure();\n\n        return $this->disposition;\n    }\n\n    final public function getDescription(): ?string\n    {\n        $this->lazyParseStructure();\n\n        return $this->description;\n    }\n\n    final public function getBytes()\n    {\n        $this->lazyParseStructure();\n\n        return $this->bytes;\n    }\n\n    final public function getLines(): ?string\n    {\n        $this->lazyParseStructure();\n\n        return $this->lines;\n    }\n\n    final public function getContent(): string\n    {\n        if (null === $this->content) {\n            $this->content = $this->doGetContent($this->getContentPartNumber());\n        }\n\n        return $this->content;\n    }\n\n    /**\n     * Get content part number.\n     */\n    protected function getContentPartNumber(): string\n    {\n        return $this->partNumber;\n    }\n\n    final public function getPartNumber(): string\n    {\n        return $this->partNumber;\n    }\n\n    final public function getDecodedContent(): string\n    {\n        if (null === $this->decodedContent) {\n            if (self::ENCODING_UNKNOWN === $this->getEncoding()) {\n                throw new UnexpectedEncodingException('Cannot decode a content with an uknown encoding');\n            }\n\n            $content = $this->getContent();\n            if (self::ENCODING_BASE64 === $this->getEncoding()) {\n                $content = \\base64_decode($content, false);\n            } elseif (self::ENCODING_QUOTED_PRINTABLE === $this->getEncoding()) {\n                $content = \\quoted_printable_decode($content);\n            }\n\n            if (false === $content) {\n                throw new UnexpectedEncodingException('Cannot decode content');\n            }\n\n            // If this part is a text part, convert its charset to UTF-8.\n            // We don't want to decode an attachment's charset.\n            if (!$this instanceof Attachment && null !== $this->getCharset() && self::TYPE_TEXT === $this->getType()) {\n                $content = Transcoder::decode($content, $this->getCharset());\n            }\n\n            $this->decodedContent = $content;\n        }\n\n        return $this->decodedContent;\n    }\n\n    /**\n     * Get raw message content.\n     */\n    final protected function doGetContent(string $partNumber): string\n    {\n        $return = \\imap_fetchbody(\n            $this->resource->getStream(),\n            $this->getNumber(),\n            $partNumber,\n            \\FT_UID | \\FT_PEEK\n        );\n\n        if (false === $return) {\n            throw new ImapFetchbodyException('imap_fetchbody failed');\n        }\n\n        return $return;\n    }\n\n    final public function getParts(): array\n    {\n        $this->lazyParseStructure();\n\n        return $this->parts;\n    }\n\n    /**\n     * Get current child part.\n     *\n     * @return mixed\n     */\n    #[\\ReturnTypeWillChange]\n    final public function current()\n    {\n        $this->lazyParseStructure();\n\n        return $this->parts[$this->key];\n    }\n\n    #[\\ReturnTypeWillChange]\n    final public function getChildren()\n    {\n        return $this->current();\n    }\n\n    #[\\ReturnTypeWillChange]\n    final public function hasChildren()\n    {\n        $this->lazyParseStructure();\n\n        return \\count($this->parts) > 0;\n    }\n\n    /**\n     * @return int\n     */\n    #[\\ReturnTypeWillChange]\n    final public function key()\n    {\n        return $this->key;\n    }\n\n    #[\\ReturnTypeWillChange]\n    final public function next()\n    {\n        ++$this->key;\n    }\n\n    #[\\ReturnTypeWillChange]\n    final public function rewind()\n    {\n        $this->key = 0;\n    }\n\n    #[\\ReturnTypeWillChange]\n    final public function valid()\n    {\n        $this->lazyParseStructure();\n\n        return isset($this->parts[$this->key]);\n    }\n\n    /**\n     * Parse part structure.\n     */\n    private function lazyParseStructure(): void\n    {\n        if (true === $this->structureParsed) {\n            return;\n        }\n        $this->structureParsed = true;\n\n        $this->lazyLoadStructure();\n\n        $this->type = self::TYPES_MAP[$this->structure->type] ?? self::TYPE_UNKNOWN;\n\n        // In our context, \\ENCOTHER is as useful as an unknown encoding\n        $this->encoding = self::ENCODINGS_MAP[$this->structure->encoding] ?? self::ENCODING_UNKNOWN;\n        if (isset($this->structure->subtype)) {\n            $this->subtype = $this->structure->subtype;\n        }\n\n        if (isset($this->structure->bytes)) {\n            $this->bytes = $this->structure->bytes;\n        }\n        if ($this->structure->ifdisposition) {\n            $this->disposition = $this->structure->disposition;\n        }\n        if ($this->structure->ifdescription) {\n            $this->description = $this->structure->description;\n        }\n\n        $this->parameters = new Parameters();\n        if ($this->structure->ifparameters) {\n            $this->parameters->add($this->structure->parameters);\n        }\n\n        if ($this->structure->ifdparameters) {\n            $this->parameters->add($this->structure->dparameters);\n        }\n\n        // When the message is not multipart and the body is the attachment content\n        // Prevents infinite recursion\n        if (self::isAttachment($this->structure) && !$this instanceof Attachment) {\n            $this->parts[] = new Attachment($this->resource, $this->getNumber(), '1', $this->structure);\n        }\n\n        if (isset($this->structure->parts)) {\n            $parts = $this->structure->parts;\n            // https://secure.php.net/manual/en/function.imap-fetchbody.php#89002\n            if ($this instanceof Attachment && $this->isEmbeddedMessage() && 1 === \\count($parts) && \\TYPEMULTIPART === $parts[0]->type) {\n                $parts = $parts[0]->parts;\n            }\n            foreach ($parts as $key => $partStructure) {\n                $partNumber = (!$this instanceof Message) ? $this->partNumber . '.' : '';\n                $partNumber .= (string) ($key + 1);\n\n                $newPartClass = self::isAttachment($partStructure)\n                    ? Attachment::class\n                    : SimplePart::class\n                ;\n\n                $this->parts[] = new $newPartClass($this->resource, $this->getNumber(), $partNumber, $partStructure);\n            }\n        }\n    }\n\n    /**\n     * Check if the given part is an attachment.\n     */\n    private static function isAttachment(\\stdClass $part): bool\n    {\n        if (isset(self::TYPES_MAP[$part->type]) && self::TYPE_MULTIPART === self::TYPES_MAP[$part->type]) {\n            return false;\n        }\n\n        // Attachment with correct Content-Disposition header\n        if ($part->ifdisposition) {\n            if ('attachment' === \\strtolower($part->disposition)) {\n                return true;\n            }\n\n            if (\n                    'inline' === \\strtolower($part->disposition)\n                && self::SUBTYPE_PLAIN !== \\strtoupper($part->subtype)\n                && self::SUBTYPE_HTML !== \\strtoupper($part->subtype)\n            ) {\n                return true;\n            }\n        }\n\n        // Attachment without Content-Disposition header\n        if ($part->ifparameters) {\n            foreach ($part->parameters as $parameter) {\n                if (isset(self::ATTACHMENT_KEYS[\\strtolower($parameter->attribute)])) {\n                    return true;\n                }\n            }\n        }\n\n        /*\n        if ($part->ifdparameters) {\n            foreach ($part->dparameters as $parameter) {\n                if (isset(self::$attachmentKeys[\\strtolower($parameter->attribute)])) {\n                    return true;\n                }\n            }\n        }\n         */\n\n        if (self::SUBTYPE_RFC822 === \\strtoupper($part->subtype)) {\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/Attachment.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nuse Ddeboer\\Imap\\Exception\\NotEmbeddedMessageException;\n\n/**\n * An e-mail attachment.\n */\nfinal class Attachment extends AbstractPart implements AttachmentInterface\n{\n    public function getFilename(): ?string\n    {\n        $filename = $this->getParameters()->get('filename');\n        if (null === $filename || '' === $filename) {\n            $filename = $this->getParameters()->get('name');\n        }\n        \\assert(null === $filename || \\is_string($filename));\n\n        return $filename;\n    }\n\n    public function getSize()\n    {\n        $size = $this->getParameters()->get('size');\n        if (\\is_numeric($size)) {\n            $size = (int) $size;\n        }\n        \\assert(null === $size || \\is_int($size));\n\n        return $size;\n    }\n\n    public function isEmbeddedMessage(): bool\n    {\n        return self::TYPE_MESSAGE === $this->getType();\n    }\n\n    public function getEmbeddedMessage(): EmbeddedMessageInterface\n    {\n        if (!$this->isEmbeddedMessage()) {\n            throw new NotEmbeddedMessageException(\\sprintf(\n                'Attachment \"%s\" in message \"%s\" is not embedded message',\n                $this->getPartNumber(),\n                $this->getNumber()\n            ));\n        }\n\n        return new EmbeddedMessage($this->resource, $this->getNumber(), $this->getPartNumber(), $this->getStructure()->parts[0]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/AttachmentInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nuse Ddeboer\\Imap\\Exception\\NotEmbeddedMessageException;\n\n/**\n * An e-mail attachment.\n */\ninterface AttachmentInterface extends PartInterface\n{\n    /**\n     * Get attachment filename.\n     */\n    public function getFilename(): ?string;\n\n    /**\n     * Get attachment file size.\n     *\n     * @return null|int Number of bytes\n     */\n    public function getSize();\n\n    /**\n     * Is this attachment also an Embedded Message?\n     */\n    public function isEmbeddedMessage(): bool;\n\n    /**\n     * Return embedded message.\n     *\n     * @throws NotEmbeddedMessageException\n     *\n     * @return EmbeddedMessageInterface<PartInterface>\n     */\n    public function getEmbeddedMessage(): EmbeddedMessageInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/BasicMessageInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\ninterface BasicMessageInterface extends PartInterface\n{\n    /**\n     * Get raw message headers.\n     */\n    public function getRawHeaders(): string;\n\n    /**\n     * Get the raw message, including all headers, parts, etc. unencoded and unparsed.\n     *\n     * @return string the raw message\n     */\n    public function getRawMessage(): string;\n\n    /**\n     * Get message headers.\n     */\n    public function getHeaders(): Headers;\n\n    /**\n     * Get message id.\n     *\n     * A unique message id in the form <...>\n     */\n    public function getId(): ?string;\n\n    /**\n     * Get message sender (from headers).\n     */\n    public function getFrom(): ?EmailAddress;\n\n    /**\n     * Get To recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no To: recipients\n     */\n    public function getTo(): array;\n\n    /**\n     * Get Cc recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no CC: recipients\n     */\n    public function getCc(): array;\n\n    /**\n     * Get Bcc recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no BCC: recipients\n     */\n    public function getBcc(): array;\n\n    /**\n     * Get Reply-To recipients.\n     *\n     * @return EmailAddress[] Empty array in case message has no Reply-To: recipients\n     */\n    public function getReplyTo(): array;\n\n    /**\n     * Get Sender.\n     *\n     * @return EmailAddress[] Empty array in case message has no Sender: recipients\n     */\n    public function getSender(): array;\n\n    /**\n     * Get Return-Path.\n     *\n     * @return EmailAddress[] Empty array in case message has no Return-Path: recipients\n     */\n    public function getReturnPath(): array;\n\n    /**\n     * Get date (from headers).\n     */\n    public function getDate(): ?\\DateTimeImmutable;\n\n    /**\n     * Get message size (from headers).\n     *\n     * @return null|int|string\n     */\n    public function getSize();\n\n    /**\n     * Get message subject (from headers).\n     */\n    public function getSubject(): ?string;\n\n    /**\n     * Get message In-Reply-To (from headers).\n     *\n     * @return string[]\n     */\n    public function getInReplyTo(): array;\n\n    /**\n     * Get message References (from headers).\n     *\n     * @return string[]\n     */\n    public function getReferences(): array;\n\n    /**\n     * Get body HTML.\n     *\n     * @return null|string Null if message has no HTML message part\n     */\n    public function getBodyHtml(): ?string;\n\n    /**\n     * Get body text.\n     */\n    public function getBodyText(): ?string;\n\n    /**\n     * Get attachments (if any) linked to this e-mail.\n     *\n     * @return AttachmentInterface[]\n     */\n    public function getAttachments(): array;\n\n    /**\n     * Does this message have attachments?\n     */\n    public function hasAttachments(): bool;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmailAddress.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\n/**\n * An e-mail address.\n */\nfinal class EmailAddress\n{\n    private string $mailbox;\n    private ?string $hostname;\n    private ?string $name;\n    private ?string $address;\n\n    public function __construct(string $mailbox, string $hostname = null, string $name = null)\n    {\n        $this->mailbox  = $mailbox;\n        $this->hostname = $hostname;\n        $this->name     = $name;\n        $this->address  = null;\n\n        if (null !== $hostname) {\n            $this->address = $mailbox . '@' . $hostname;\n        }\n    }\n\n    /**\n     * @return null|string\n     */\n    public function getAddress()\n    {\n        return $this->address;\n    }\n\n    /**\n     * Returns address with person name.\n     */\n    public function getFullAddress(): string\n    {\n        $address = \\sprintf('%s@%s', $this->mailbox, $this->hostname);\n        if (null !== $this->name) {\n            $address = \\sprintf('\"%s\" <%s>', \\addcslashes($this->name, '\"'), $address);\n        }\n\n        return $address;\n    }\n\n    public function getMailbox(): string\n    {\n        return $this->mailbox;\n    }\n\n    /**\n     * @return null|string\n     */\n    public function getHostname()\n    {\n        return $this->hostname;\n    }\n\n    /**\n     * @return null|string\n     */\n    public function getName()\n    {\n        return $this->name;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nfinal class EmbeddedMessage extends AbstractMessage implements EmbeddedMessageInterface\n{\n    private ?Headers $headers   = null;\n    private ?string $rawHeaders = null;\n    private ?string $rawMessage = null;\n\n    public function getHeaders(): Headers\n    {\n        if (null === $this->headers) {\n            $this->headers = new Headers(\\imap_rfc822_parse_headers($this->getRawHeaders()));\n        }\n\n        return $this->headers;\n    }\n\n    public function getRawHeaders(): string\n    {\n        if (null === $this->rawHeaders) {\n            $rawHeaders       = \\explode(\"\\r\\n\\r\\n\", $this->getRawMessage(), 2);\n            $this->rawHeaders = \\current($rawHeaders);\n        }\n\n        return $this->rawHeaders;\n    }\n\n    public function getRawMessage(): string\n    {\n        if (null === $this->rawMessage) {\n            $this->rawMessage = $this->doGetContent($this->getPartNumber());\n        }\n\n        return $this->rawMessage;\n    }\n\n    /**\n     * Get content part number.\n     */\n    protected function getContentPartNumber(): string\n    {\n        $partNumber = $this->getPartNumber();\n        if (0 === \\count($this->getParts())) {\n            $partNumber .= '.1';\n        }\n\n        return $partNumber;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/EmbeddedMessageInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\ninterface EmbeddedMessageInterface extends BasicMessageInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/Headers.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nfinal class Headers extends Parameters\n{\n    public function __construct(\\stdClass $headers)\n    {\n        parent::__construct();\n\n        // Store all headers as lowercase\n        $headers = \\array_change_key_case((array) $headers);\n\n        foreach ($headers as $key => $value) {\n            $this[$key] = $this->parseHeader($key, $value);\n        }\n    }\n\n    /**\n     * Get header.\n     *\n     * @return null|int|\\stdClass[]|string\n     */\n    public function get(string $key)\n    {\n        return parent::get(\\strtolower($key));\n    }\n\n    /**\n     * Parse header.\n     *\n     * @param int|\\stdClass[]|string $value\n     *\n     * @return int|\\stdClass[]|string\n     */\n    private function parseHeader(string $key, $value)\n    {\n        switch ($key) {\n            case 'msgno':\n                \\assert(\\is_string($value));\n\n                return (int) $value;\n            case 'from':\n            case 'to':\n            case 'cc':\n            case 'bcc':\n            case 'reply_to':\n            case 'sender':\n            case 'return_path':\n                \\assert(\\is_array($value));\n                /** @var \\stdClass $address */\n                foreach ($value as $address) {\n                    if (isset($address->mailbox)) {\n                        $address->host     = $address->host ?? null;\n                        $address->personal = isset($address->personal) ? $this->decode($address->personal) : null;\n                    }\n                }\n\n                return $value;\n            case 'date':\n            case 'subject':\n                \\assert(\\is_string($value));\n\n                return $this->decode($value);\n        }\n\n        return $value;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/Parameters.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\n/**\n * @extends \\ArrayIterator<int|string, int|string|\\stdClass[]>\n */\nclass Parameters extends \\ArrayIterator\n{\n    /**\n     * @var array<string, string>\n     */\n    private static array $attachmentCustomKeys = [\n        'name*'     => 'name',\n        'filename*' => 'filename',\n    ];\n\n    /**\n     * @param \\stdClass[] $parameters\n     */\n    public function add(array $parameters = []): void\n    {\n        foreach ($parameters as $parameter) {\n            $key = \\strtolower($parameter->attribute);\n            if (isset(self::$attachmentCustomKeys[$key])) {\n                $key = self::$attachmentCustomKeys[$key];\n            }\n            $value      = $this->decode($parameter->value);\n            $this[$key] = $value;\n        }\n    }\n\n    /**\n     * @return null|int|\\stdClass[]|string\n     */\n    public function get(string $key)\n    {\n        return $this[$key] ?? null;\n    }\n\n    final protected function decode(string $value): string\n    {\n        $parts = \\imap_mime_header_decode($value);\n        if (!\\is_array($parts)) {\n            return $value;\n        }\n\n        $decoded = '';\n        foreach ($parts as $part) {\n            $text = $part->text;\n            if ('default' !== $part->charset) {\n                $text = Transcoder::decode($text, $part->charset);\n            }\n            // RFC2231\n            if (1 === \\preg_match('/^(?<encoding>[^\\']+)\\'[^\\']*?\\'(?<urltext>.+)$/', $text, $matches)) {\n                $hasInvalidChars = 1 === \\preg_match('#[^%a-zA-Z0-9\\-_\\.\\+]#', $matches['urltext']);\n                $hasEscapedChars = 1 === \\preg_match('#%[a-zA-Z0-9]{2}#', $matches['urltext']);\n                if (!$hasInvalidChars && $hasEscapedChars) {\n                    $text = Transcoder::decode(\\urldecode($matches['urltext']), $matches['encoding']);\n                }\n            }\n\n            $decoded .= $text;\n        }\n\n        return $decoded;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/PartInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\n/**\n * A message part.\n */\ninterface PartInterface extends \\RecursiveIterator\n{\n    public const TYPE_TEXT          = 'text';\n    public const TYPE_MULTIPART     = 'multipart';\n    public const TYPE_MESSAGE       = 'message';\n    public const TYPE_APPLICATION   = 'application';\n    public const TYPE_AUDIO         = 'audio';\n    public const TYPE_IMAGE         = 'image';\n    public const TYPE_VIDEO         = 'video';\n    public const TYPE_MODEL         = 'model';\n    public const TYPE_OTHER         = 'other';\n    public const TYPE_UNKNOWN       = 'unknown';\n\n    public const ENCODING_7BIT              = '7bit';\n    public const ENCODING_8BIT              = '8bit';\n    public const ENCODING_BINARY            = 'binary';\n    public const ENCODING_BASE64            = 'base64';\n    public const ENCODING_QUOTED_PRINTABLE  = 'quoted-printable';\n    public const ENCODING_UNKNOWN           = 'unknown';\n\n    public const SUBTYPE_PLAIN  = 'PLAIN';\n    public const SUBTYPE_HTML   = 'HTML';\n    public const SUBTYPE_RFC822 = 'RFC822';\n\n    /**\n     * Get message number (from headers).\n     */\n    public function getNumber(): int;\n\n    /**\n     * Part charset.\n     */\n    public function getCharset(): ?string;\n\n    /**\n     * Part type.\n     */\n    public function getType(): ?string;\n\n    /**\n     * Part subtype.\n     */\n    public function getSubtype(): ?string;\n\n    /**\n     * Part encoding.\n     */\n    public function getEncoding(): ?string;\n\n    /**\n     * Part disposition.\n     */\n    public function getDisposition(): ?string;\n\n    /**\n     * Part description.\n     */\n    public function getDescription(): ?string;\n\n    /**\n     * Part bytes.\n     *\n     * @return null|int|string\n     */\n    public function getBytes();\n\n    /**\n     * Part lines.\n     */\n    public function getLines(): ?string;\n\n    /**\n     * Part parameters.\n     */\n    public function getParameters(): Parameters;\n\n    /**\n     * Get raw part content.\n     */\n    public function getContent(): string;\n\n    /**\n     * Get decoded part content.\n     */\n    public function getDecodedContent(): string;\n\n    /**\n     * Part structure.\n     */\n    public function getStructure(): \\stdClass;\n\n    /**\n     * Get part number.\n     */\n    public function getPartNumber(): string;\n\n    /**\n     * Get an array of all parts for this message.\n     *\n     * @return PartInterface[]\n     */\n    public function getParts(): array;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/SimplePart.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\n/**\n * A message part.\n */\nfinal class SimplePart extends AbstractPart\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message/Transcoder.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Message;\n\nuse Ddeboer\\Imap\\Exception\\UnsupportedCharsetException;\n\nfinal class Transcoder\n{\n    /**\n     * @see https://encoding.spec.whatwg.org/#encodings\n     * @see https://dxr.mozilla.org/mozilla-central/source/dom/encoding/labelsencodings.properties\n     * @see https://dxr.mozilla.org/mozilla1.9.1/source/intl/uconv/src/charsetalias.properties\n     * @see https://msdn.microsoft.com/en-us/library/cc194829.aspx\n     */\n    private const CHARSET_ALIASES = [\n        '128'                       => 'Shift_JIS',\n        '129'                       => 'EUC-KR',\n        '134'                       => 'GB2312',\n        '136'                       => 'Big5',\n        '161'                       => 'windows-1253',\n        '162'                       => 'windows-1254',\n        '177'                       => 'windows-1255',\n        '178'                       => 'windows-1256',\n        '186'                       => 'windows-1257',\n        '204'                       => 'windows-1251',\n        '222'                       => 'windows-874',\n        '238'                       => 'windows-1250',\n        '5601'                      => 'EUC-KR',\n        '646'                       => 'us-ascii',\n        '850'                       => 'IBM850',\n        '852'                       => 'IBM852',\n        '855'                       => 'IBM855',\n        '857'                       => 'IBM857',\n        '862'                       => 'IBM862',\n        '864'                       => 'IBM864',\n        '864i'                      => 'IBM864i',\n        '866'                       => 'IBM866',\n        'ansi-1251'                 => 'windows-1251',\n        'ansi_x3.4-1968'            => 'us-ascii',\n        'arabic'                    => 'ISO-8859-6',\n        'ascii'                     => 'us-ascii',\n        'asmo-708'                  => 'ISO-8859-6',\n        'big5-hkscs'                => 'Big5',\n        'chinese'                   => 'GB2312',\n        'cn-big5'                   => 'Big5',\n        'cns11643'                  => 'x-euc-tw',\n        'cp-866'                    => 'IBM866',\n        'cp1250'                    => 'windows-1250',\n        'cp1251'                    => 'windows-1251',\n        'cp1252'                    => 'windows-1252',\n        'cp1253'                    => 'windows-1253',\n        'cp1254'                    => 'windows-1254',\n        'cp1255'                    => 'windows-1255',\n        'cp1256'                    => 'windows-1256',\n        'cp1257'                    => 'windows-1257',\n        'cp1258'                    => 'windows-1258',\n        'cp819'                     => 'ISO-8859-1',\n        'cp850'                     => 'IBM850',\n        'cp852'                     => 'IBM852',\n        'cp855'                     => 'IBM855',\n        'cp857'                     => 'IBM857',\n        'cp862'                     => 'IBM862',\n        'cp864'                     => 'IBM864',\n        'cp864i'                    => 'IBM864i',\n        'cp866'                     => 'IBM866',\n        'cp932'                     => 'Shift_JIS',\n        'csbig5'                    => 'Big5',\n        'cseucjpkdfmtjapanese'      => 'EUC-JP',\n        'cseuckr'                   => 'EUC-KR',\n        'cseucpkdfmtjapanese'       => 'EUC-JP',\n        'csgb2312'                  => 'GB2312',\n        'csibm850'                  => 'IBM850',\n        'csibm852'                  => 'IBM852',\n        'csibm855'                  => 'IBM855',\n        'csibm857'                  => 'IBM857',\n        'csibm862'                  => 'IBM862',\n        'csibm864'                  => 'IBM864',\n        'csibm864i'                 => 'IBM864i',\n        'csibm866'                  => 'IBM866',\n        'csiso103t618bit'           => 'T.61-8bit',\n        'csiso111ecmacyrillic'      => 'ISO-IR-111',\n        'csiso2022jp'               => 'ISO-2022-JP',\n        'csiso2022jp2'              => 'ISO-2022-JP',\n        'csiso2022kr'               => 'ISO-2022-KR',\n        'csiso58gb231280'           => 'GB2312',\n        'csiso88596e'               => 'ISO-8859-6-E',\n        'csiso88596i'               => 'ISO-8859-6-I',\n        'csiso88598e'               => 'ISO-8859-8-E',\n        'csiso88598i'               => 'ISO-8859-8-I',\n        'csisolatin1'               => 'ISO-8859-1',\n        'csisolatin2'               => 'ISO-8859-2',\n        'csisolatin3'               => 'ISO-8859-3',\n        'csisolatin4'               => 'ISO-8859-4',\n        'csisolatin5'               => 'ISO-8859-9',\n        'csisolatin6'               => 'ISO-8859-10',\n        'csisolatin9'               => 'ISO-8859-15',\n        'csisolatinarabic'          => 'ISO-8859-6',\n        'csisolatincyrillic'        => 'ISO-8859-5',\n        'csisolatingreek'           => 'ISO-8859-7',\n        'csisolatinhebrew'          => 'ISO-8859-8',\n        'cskoi8r'                   => 'KOI8-R',\n        'csksc56011987'             => 'EUC-KR',\n        'csmacintosh'               => 'x-mac-roman',\n        'csshiftjis'                => 'Shift_JIS',\n        'csueckr'                   => 'EUC-KR',\n        'csunicode'                 => 'UTF-16BE',\n        'csunicode11'               => 'UTF-16BE',\n        'csunicode11utf7'           => 'UTF-7',\n        'csunicodeascii'            => 'UTF-16BE',\n        'csunicodelatin1'           => 'UTF-16BE',\n        'csviqr'                    => 'VIQR',\n        'csviscii'                  => 'VISCII',\n        'cyrillic'                  => 'ISO-8859-5',\n        'dos-874'                   => 'windows-874',\n        'ecma-114'                  => 'ISO-8859-6',\n        'ecma-118'                  => 'ISO-8859-7',\n        'ecma-cyrillic'             => 'ISO-IR-111',\n        'elot_928'                  => 'ISO-8859-7',\n        'gb_2312'                   => 'GB2312',\n        'gb_2312-80'                => 'GB2312',\n        'greek'                     => 'ISO-8859-7',\n        'greek8'                    => 'ISO-8859-7',\n        'hebrew'                    => 'ISO-8859-8',\n        'ibm-864'                   => 'IBM864',\n        'ibm-864i'                  => 'IBM864i',\n        'ibm819'                    => 'ISO-8859-1',\n        'ibm874'                    => 'windows-874',\n        'iso-10646'                 => 'UTF-16BE',\n        'iso-10646-j-1'             => 'UTF-16BE',\n        'iso-10646-ucs-2'           => 'UTF-16BE',\n        'iso-10646-ucs-4'           => 'UTF-32BE',\n        'iso-10646-ucs-basic'       => 'UTF-16BE',\n        'iso-10646-unicode-latin1'  => 'UTF-16BE',\n        'iso-2022-cn-ext'           => 'ISO-2022-CN',\n        'iso-2022-jp-2'             => 'ISO-2022-JP',\n        'iso-8859-8i'               => 'ISO-8859-8-I',\n        'iso-ir-100'                => 'ISO-8859-1',\n        'iso-ir-101'                => 'ISO-8859-2',\n        'iso-ir-103'                => 'T.61-8bit',\n        'iso-ir-109'                => 'ISO-8859-3',\n        'iso-ir-110'                => 'ISO-8859-4',\n        'iso-ir-126'                => 'ISO-8859-7',\n        'iso-ir-127'                => 'ISO-8859-6',\n        'iso-ir-138'                => 'ISO-8859-8',\n        'iso-ir-144'                => 'ISO-8859-5',\n        'iso-ir-148'                => 'ISO-8859-9',\n        'iso-ir-149'                => 'EUC-KR',\n        'iso-ir-157'                => 'ISO-8859-10',\n        'iso-ir-58'                 => 'GB2312',\n        'iso8859-1'                 => 'ISO-8859-1',\n        'iso8859-10'                => 'ISO-8859-10',\n        'iso8859-11'                => 'ISO-8859-11',\n        'iso8859-13'                => 'ISO-8859-13',\n        'iso8859-14'                => 'ISO-8859-14',\n        'iso8859-15'                => 'ISO-8859-15',\n        'iso8859-2'                 => 'ISO-8859-2',\n        'iso8859-3'                 => 'ISO-8859-3',\n        'iso8859-4'                 => 'ISO-8859-4',\n        'iso8859-5'                 => 'ISO-8859-5',\n        'iso8859-6'                 => 'ISO-8859-6',\n        'iso8859-7'                 => 'ISO-8859-7',\n        'iso8859-8'                 => 'ISO-8859-8',\n        'iso8859-9'                 => 'ISO-8859-9',\n        'iso88591'                  => 'ISO-8859-1',\n        'iso885910'                 => 'ISO-8859-10',\n        'iso885911'                 => 'ISO-8859-11',\n        'iso885912'                 => 'ISO-8859-12',\n        'iso885913'                 => 'ISO-8859-13',\n        'iso885914'                 => 'ISO-8859-14',\n        'iso885915'                 => 'ISO-8859-15',\n        'iso88592'                  => 'ISO-8859-2',\n        'iso88593'                  => 'ISO-8859-3',\n        'iso88594'                  => 'ISO-8859-4',\n        'iso88595'                  => 'ISO-8859-5',\n        'iso88596'                  => 'ISO-8859-6',\n        'iso88597'                  => 'ISO-8859-7',\n        'iso88598'                  => 'ISO-8859-8',\n        'iso88599'                  => 'ISO-8859-9',\n        'iso_8859-1'                => 'ISO-8859-1',\n        'iso_8859-15'               => 'ISO-8859-15',\n        'iso_8859-1:1987'           => 'ISO-8859-1',\n        'iso_8859-2'                => 'ISO-8859-2',\n        'iso_8859-2:1987'           => 'ISO-8859-2',\n        'iso_8859-3'                => 'ISO-8859-3',\n        'iso_8859-3:1988'           => 'ISO-8859-3',\n        'iso_8859-4'                => 'ISO-8859-4',\n        'iso_8859-4:1988'           => 'ISO-8859-4',\n        'iso_8859-5'                => 'ISO-8859-5',\n        'iso_8859-5:1988'           => 'ISO-8859-5',\n        'iso_8859-6'                => 'ISO-8859-6',\n        'iso_8859-6:1987'           => 'ISO-8859-6',\n        'iso_8859-7'                => 'ISO-8859-7',\n        'iso_8859-7:1987'           => 'ISO-8859-7',\n        'iso_8859-8'                => 'ISO-8859-8',\n        'iso_8859-8:1988'           => 'ISO-8859-8',\n        'iso_8859-9'                => 'ISO-8859-9',\n        'iso_8859-9:1989'           => 'ISO-8859-9',\n        'koi'                       => 'KOI8-R',\n        'koi8'                      => 'KOI8-R',\n        'koi8-ru'                   => 'KOI8-U',\n        'koi8_r'                    => 'KOI8-R',\n        'korean'                    => 'EUC-KR',\n        'ks_c_5601-1987'            => 'EUC-KR',\n        'ks_c_5601-1989'            => 'EUC-KR',\n        'ksc5601'                   => 'EUC-KR',\n        'ksc_5601'                  => 'EUC-KR',\n        'l1'                        => 'ISO-8859-1',\n        'l2'                        => 'ISO-8859-2',\n        'l3'                        => 'ISO-8859-3',\n        'l4'                        => 'ISO-8859-4',\n        'l5'                        => 'ISO-8859-9',\n        'l6'                        => 'ISO-8859-10',\n        'l9'                        => 'ISO-8859-15',\n        'latin1'                    => 'ISO-8859-1',\n        'latin2'                    => 'ISO-8859-2',\n        'latin3'                    => 'ISO-8859-3',\n        'latin4'                    => 'ISO-8859-4',\n        'latin5'                    => 'ISO-8859-9',\n        'latin6'                    => 'ISO-8859-10',\n        'logical'                   => 'ISO-8859-8-I',\n        'mac'                       => 'x-mac-roman',\n        'macintosh'                 => 'x-mac-roman',\n        'ms932'                     => 'Shift_JIS',\n        'ms_kanji'                  => 'Shift_JIS',\n        'shift-jis'                 => 'Shift_JIS',\n        'sjis'                      => 'Shift_JIS',\n        'sun_eu_greek'              => 'ISO-8859-7',\n        't.61'                      => 'T.61-8bit',\n        'tis620'                    => 'TIS-620',\n        'unicode-1-1-utf-7'         => 'UTF-7',\n        'unicode-1-1-utf-8'         => 'UTF-8',\n        'unicode-2-0-utf-7'         => 'UTF-7',\n        'visual'                    => 'ISO-8859-8',\n        'windows-31j'               => 'Shift_JIS',\n        'windows-949'               => 'EUC-KR',\n        'x-cp1250'                  => 'windows-1250',\n        'x-cp1251'                  => 'windows-1251',\n        'x-cp1252'                  => 'windows-1252',\n        'x-cp1253'                  => 'windows-1253',\n        'x-cp1254'                  => 'windows-1254',\n        'x-cp1255'                  => 'windows-1255',\n        'x-cp1256'                  => 'windows-1256',\n        'x-cp1257'                  => 'windows-1257',\n        'x-cp1258'                  => 'windows-1258',\n        'x-euc-jp'                  => 'EUC-JP',\n        'x-gbk'                     => 'gbk',\n        'x-iso-10646-ucs-2-be'      => 'UTF-16BE',\n        'x-iso-10646-ucs-2-le'      => 'UTF-16LE',\n        'x-iso-10646-ucs-4-be'      => 'UTF-32BE',\n        'x-iso-10646-ucs-4-le'      => 'UTF-32LE',\n        'x-mac-ce'                  => 'windows-1250',\n        'x-sjis'                    => 'Shift_JIS',\n        'x-unicode-2-0-utf-7'       => 'UTF-7',\n        'x-x-big5'                  => 'Big5',\n        'zh_cn.euc'                 => 'GB2312',\n        'zh_tw-big5'                => 'Big5',\n        'zh_tw-euc'                 => 'x-euc-tw',\n    ];\n\n    /**\n     * Decode text to UTF-8.\n     *\n     * @param string $text        Text to decode\n     * @param string $fromCharset Original charset\n     */\n    public static function decode(string $text, string $fromCharset): string\n    {\n        static $utf8Aliases = [\n            'unicode-1-1-utf-8' => true,\n            'utf8'              => true,\n            'utf-8'             => true,\n            'UTF8'              => true,\n            'UTF-8'             => true,\n        ];\n\n        if (isset($utf8Aliases[$fromCharset])) {\n            return $text;\n        }\n\n        $originalFromCharset  = $fromCharset;\n        $lowercaseFromCharset = \\strtolower($fromCharset);\n        if (isset(self::CHARSET_ALIASES[$lowercaseFromCharset])) {\n            $fromCharset = self::CHARSET_ALIASES[$lowercaseFromCharset];\n        }\n\n        \\set_error_handler(static function (): bool {\n            return true;\n        });\n\n        $iconvDecodedText = \\iconv($fromCharset, 'UTF-8', $text);\n        if (false === $iconvDecodedText) {\n            $iconvDecodedText = \\iconv($originalFromCharset, 'UTF-8', $text);\n        }\n\n        \\restore_error_handler();\n\n        if (false !== $iconvDecodedText) {\n            return $iconvDecodedText;\n        }\n\n        $errorMessage = null;\n        $errorNumber  = 0;\n        \\set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {\n            $errorMessage = $message;\n            $errorNumber = $nr;\n\n            return true;\n        });\n\n        $decodedText = '';\n\n        try {\n            $decodedText = \\mb_convert_encoding($text, 'UTF-8', $fromCharset);\n        } catch (\\Error $error) {\n            $errorMessage = $error->getMessage();\n        }\n\n        \\restore_error_handler();\n\n        if (null !== $errorMessage) {\n            throw new UnsupportedCharsetException(\\sprintf(\n                'Unsupported charset \"%s\"%s: %s',\n                $originalFromCharset,\n                ($fromCharset !== $originalFromCharset) ? \\sprintf(' (alias found: \"%s\")', $fromCharset) : '',\n                $errorMessage\n            ), $errorNumber);\n        }\n\n        return $decodedText;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Message.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\ImapFetchheaderException;\nuse Ddeboer\\Imap\\Exception\\InvalidHeadersException;\nuse Ddeboer\\Imap\\Exception\\MessageCopyException;\nuse Ddeboer\\Imap\\Exception\\MessageDeleteException;\nuse Ddeboer\\Imap\\Exception\\MessageDoesNotExistException;\nuse Ddeboer\\Imap\\Exception\\MessageMoveException;\nuse Ddeboer\\Imap\\Exception\\MessageStructureException;\nuse Ddeboer\\Imap\\Exception\\MessageUndeleteException;\n\n/**\n * An IMAP message (e-mail).\n */\nfinal class Message extends Message\\AbstractMessage implements MessageInterface\n{\n    private bool $messageNumberVerified = false;\n    private int $imapMsgNo              = 0;\n    private bool $structureLoaded       = false;\n    private ?Message\\Headers $headers   = null;\n    private ?string $rawHeaders         = null;\n    private ?string $rawMessage         = null;\n\n    /**\n     * Constructor.\n     *\n     * @param ImapResourceInterface $resource      IMAP resource\n     * @param int                   $messageNumber Message number\n     */\n    public function __construct(ImapResourceInterface $resource, int $messageNumber)\n    {\n        parent::__construct($resource, $messageNumber, '1', new \\stdClass());\n    }\n\n    protected function lazyLoadStructure(): void\n    {\n        if (true === $this->structureLoaded) {\n            return;\n        }\n        $this->structureLoaded = true;\n\n        $messageNumber = $this->getNumber();\n\n        $errorMessage = null;\n        $errorNumber  = 0;\n        \\set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {\n            $errorMessage = $message;\n            $errorNumber = $nr;\n\n            return true;\n        });\n\n        $structure = \\imap_fetchstructure(\n            $this->resource->getStream(),\n            $messageNumber,\n            \\FT_UID\n        );\n\n        \\restore_error_handler();\n\n        if (!$structure instanceof \\stdClass) {\n            throw new MessageStructureException(\\sprintf(\n                'Message \"%s\" structure is empty: %s',\n                $messageNumber,\n                $errorMessage\n            ), $errorNumber);\n        }\n\n        $this->setStructure($structure);\n    }\n\n    protected function assertMessageExists(int $messageNumber): void\n    {\n        if (true === $this->messageNumberVerified) {\n            return;\n        }\n        $this->messageNumberVerified = true;\n\n        $msgno = null;\n        \\set_error_handler(static function (): bool {\n            return true;\n        });\n\n        $msgno = \\imap_msgno($this->resource->getStream(), $messageNumber);\n\n        \\restore_error_handler();\n\n        if (\\is_numeric($msgno) && $msgno > 0) {\n            $this->imapMsgNo = $msgno;\n\n            return;\n        }\n\n        throw new MessageDoesNotExistException(\\sprintf(\n            'Message \"%s\" does not exist',\n            $messageNumber\n        ));\n    }\n\n    private function getMsgNo(): int\n    {\n        // Triggers assertMessageExists()\n        $this->getNumber();\n\n        return $this->imapMsgNo;\n    }\n\n    public function getRawHeaders(): string\n    {\n        if (null === $this->rawHeaders) {\n            $rawHeaders = \\imap_fetchheader($this->resource->getStream(), $this->getNumber(), \\FT_UID);\n\n            if (false === $rawHeaders) {\n                throw new ImapFetchheaderException('imap_fetchheader failed');\n            }\n\n            $this->rawHeaders = $rawHeaders;\n        }\n\n        return $this->rawHeaders;\n    }\n\n    public function getRawMessage(): string\n    {\n        if (null === $this->rawMessage) {\n            $this->rawMessage = $this->doGetContent('');\n        }\n\n        return $this->rawMessage;\n    }\n\n    public function getHeaders(): Message\\Headers\n    {\n        if (null === $this->headers) {\n            // imap_headerinfo is much faster than imap_fetchheader\n            // imap_headerinfo returns only a subset of all mail headers,\n            // but it does include the message flags.\n            $headers = \\imap_headerinfo($this->resource->getStream(), $this->getMsgNo());\n            if (false === $headers) {\n                // @see https://github.com/ddeboer/imap/issues/358\n                throw new InvalidHeadersException(\\sprintf('Message \"%s\" has invalid headers', $this->getNumber()));\n            }\n            $this->headers = new Message\\Headers($headers);\n        }\n\n        return $this->headers;\n    }\n\n    /**\n     * Clearmessage headers.\n     */\n    private function clearHeaders(): void\n    {\n        $this->headers = null;\n    }\n\n    public function isRecent(): ?string\n    {\n        $recent = $this->getHeaders()->get('recent');\n        \\assert(null === $recent || \\is_string($recent));\n\n        return $recent;\n    }\n\n    public function isUnseen(): bool\n    {\n        return 'U' === $this->getHeaders()->get('unseen');\n    }\n\n    public function isFlagged(): bool\n    {\n        return 'F' === $this->getHeaders()->get('flagged');\n    }\n\n    public function isAnswered(): bool\n    {\n        return 'A' === $this->getHeaders()->get('answered');\n    }\n\n    public function isDeleted(): bool\n    {\n        return 'D' === $this->getHeaders()->get('deleted');\n    }\n\n    public function isDraft(): bool\n    {\n        return 'X' === $this->getHeaders()->get('draft');\n    }\n\n    public function isSeen(): bool\n    {\n        return 'N' !== $this->getHeaders()->get('recent') && 'U' !== $this->getHeaders()->get('unseen');\n    }\n\n    public function maskAsSeen(): bool\n    {\n        \\trigger_error(\\sprintf('%s is deprecated and will be removed in 2.0. Use %s::markAsSeen instead.', __METHOD__, __CLASS__), \\E_USER_DEPRECATED);\n\n        return $this->markAsSeen();\n    }\n\n    public function markAsSeen(): bool\n    {\n        return $this->setFlag('\\\\Seen');\n    }\n\n    public function copy(MailboxInterface $mailbox): void\n    {\n        // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header\n        $this->clearHeaders();\n\n        if (!\\imap_mail_copy($this->resource->getStream(), (string) $this->getNumber(), $mailbox->getEncodedName(), \\CP_UID)) {\n            throw new MessageCopyException(\\sprintf('Message \"%s\" cannot be copied to \"%s\"', $this->getNumber(), $mailbox->getName()));\n        }\n    }\n\n    public function move(MailboxInterface $mailbox): void\n    {\n        // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header\n        $this->clearHeaders();\n\n        if (!\\imap_mail_move($this->resource->getStream(), (string) $this->getNumber(), $mailbox->getEncodedName(), \\CP_UID)) {\n            throw new MessageMoveException(\\sprintf('Message \"%s\" cannot be moved to \"%s\"', $this->getNumber(), $mailbox->getName()));\n        }\n    }\n\n    public function delete(): void\n    {\n        // 'deleted' header changed, force to reload headers, would be better to set deleted flag to true on header\n        $this->clearHeaders();\n\n        if (!\\imap_delete($this->resource->getStream(), (string) $this->getNumber(), \\FT_UID)) {\n            throw new MessageDeleteException(\\sprintf('Message \"%s\" cannot be deleted', $this->getNumber()));\n        }\n    }\n\n    public function undelete(): void\n    {\n        // 'deleted' header changed, force to reload headers, would be better to set deleted flag to false on header\n        $this->clearHeaders();\n        if (!\\imap_undelete($this->resource->getStream(), (string) $this->getNumber(), \\FT_UID)) {\n            throw new MessageUndeleteException(\\sprintf('Message \"%s\" cannot be undeleted', $this->getNumber()));\n        }\n    }\n\n    public function setFlag(string $flag): bool\n    {\n        $result = \\imap_setflag_full($this->resource->getStream(), (string) $this->getNumber(), $flag, \\ST_UID);\n\n        $this->clearHeaders();\n\n        return $result;\n    }\n\n    public function clearFlag(string $flag): bool\n    {\n        $result = \\imap_clearflag_full($this->resource->getStream(), (string) $this->getNumber(), $flag, \\ST_UID);\n\n        $this->clearHeaders();\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/MessageInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\MessageCopyException;\nuse Ddeboer\\Imap\\Exception\\MessageDeleteException;\nuse Ddeboer\\Imap\\Exception\\MessageMoveException;\nuse Ddeboer\\Imap\\Exception\\MessageUndeleteException;\n\n/**\n * An IMAP message (e-mail).\n */\ninterface MessageInterface extends Message\\BasicMessageInterface\n{\n    /**\n     * Get raw part content.\n     */\n    public function getContent(): string;\n\n    /**\n     * Get message recent flag value (from headers).\n     */\n    public function isRecent(): ?string;\n\n    /**\n     * Get message unseen flag value (from headers).\n     */\n    public function isUnseen(): bool;\n\n    /**\n     * Get message flagged flag value (from headers).\n     */\n    public function isFlagged(): bool;\n\n    /**\n     * Get message answered flag value (from headers).\n     */\n    public function isAnswered(): bool;\n\n    /**\n     * Get message deleted flag value (from headers).\n     */\n    public function isDeleted(): bool;\n\n    /**\n     * Get message draft flag value (from headers).\n     */\n    public function isDraft(): bool;\n\n    /**\n     * Has the message been marked as read?\n     */\n    public function isSeen(): bool;\n\n    /**\n     * Mark message as seen.\n     *\n     * @deprecated since version 1.1, to be removed in 2.0\n     */\n    public function maskAsSeen(): bool;\n\n    /**\n     * Mark message as seen.\n     */\n    public function markAsSeen(): bool;\n\n    /**\n     * Move message to another mailbox.\n     *\n     * @throws MessageCopyException\n     */\n    public function copy(MailboxInterface $mailbox): void;\n\n    /**\n     * Move message to another mailbox.\n     *\n     * @throws MessageMoveException\n     */\n    public function move(MailboxInterface $mailbox): void;\n\n    /**\n     * Delete message.\n     *\n     * @throws MessageDeleteException\n     */\n    public function delete(): void;\n\n    /**\n     * Undelete message.\n     *\n     * @throws MessageUndeleteException\n     */\n    public function undelete(): void;\n\n    /**\n     * Set Flag Message.\n     *\n     * @param string $flag \\Seen, \\Answered, \\Flagged, \\Deleted, and \\Draft\n     */\n    public function setFlag(string $flag): bool;\n\n    /**\n     * Clear Flag Message.\n     *\n     * @param string $flag \\Seen, \\Answered, \\Flagged, \\Deleted, and \\Draft\n     */\n    public function clearFlag(string $flag): bool;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/MessageIterator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Message\\PartInterface;\n\n/**\n * @extends \\ArrayIterator<int, MessageInterface>\n */\nfinal class MessageIterator extends \\ArrayIterator implements MessageIteratorInterface\n{\n    private ImapResourceInterface $resource;\n\n    /**\n     * Constructor.\n     *\n     * @param ImapResourceInterface $resource       IMAP resource\n     * @param int[]                 $messageNumbers Array of message numbers\n     */\n    public function __construct(ImapResourceInterface $resource, array $messageNumbers)\n    {\n        $this->resource = $resource;\n\n        parent::__construct($messageNumbers);\n    }\n\n    /**\n     * Get current message.\n     *\n     * @return MessageInterface<PartInterface>\n     */\n    public function current(): MessageInterface\n    {\n        $current = parent::current();\n        if (!\\is_int($current)) {\n            throw new Exception\\OutOfBoundsException(\\sprintf(\n                'The current value \"%s\" isn\\'t an integer and doesn\\'t represent a message;'\n                . ' try to cycle this \"%s\" with a native php function like foreach or with the method getArrayCopy(),'\n                . ' or check it by calling the methods valid().',\n                \\is_object($current) ? \\get_class($current) : \\gettype($current),\n                static::class\n            ));\n        }\n\n        return new Message($this->resource, $current);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/MessageIteratorInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Message\\PartInterface;\n\n/**\n * @extends \\Iterator<MessageInterface>\n */\ninterface MessageIteratorInterface extends \\Iterator, \\Countable\n{\n    /**\n     * Get current message.\n     *\n     * @return MessageInterface<PartInterface>\n     */\n    public function current(): MessageInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractDate.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search;\n\nuse DateTimeInterface;\n\n/**\n * Represents a date condition.\n */\nabstract class AbstractDate implements ConditionInterface\n{\n    /**\n     * Format for dates to be sent to the IMAP server.\n     */\n    private string $dateFormat;\n\n    /**\n     * The date to be used for the condition.\n     */\n    private DateTimeInterface $date;\n\n    /**\n     * Constructor.\n     *\n     * @param DateTimeInterface $date optional date for the condition\n     */\n    public function __construct(DateTimeInterface $date, string $dateFormat = 'j-M-Y')\n    {\n        $this->date       = $date;\n        $this->dateFormat = $dateFormat;\n    }\n\n    /**\n     * Converts the condition to a string that can be sent to the IMAP server.\n     */\n    final public function toString(): string\n    {\n        return \\sprintf('%s \"%s\"', $this->getKeyword(), $this->date->format($this->dateFormat));\n    }\n\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    abstract protected function getKeyword(): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/AbstractText.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search;\n\n/**\n * Represents a text based condition. Text based conditions use a contains\n * restriction.\n */\nabstract class AbstractText implements ConditionInterface\n{\n    /**\n     * Text to be used for the condition.\n     */\n    private string $text;\n\n    /**\n     * Constructor.\n     *\n     * @param string $text optional text for the condition\n     */\n    public function __construct(string $text)\n    {\n        $this->text = $text;\n    }\n\n    /**\n     * Converts the condition to a string that can be sent to the IMAP server.\n     */\n    final public function toString(): string\n    {\n        return \\sprintf('%s \"%s\"', $this->getKeyword(), $this->text);\n    }\n\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    abstract protected function getKeyword(): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/ConditionInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search;\n\n/**\n * Represents a condition that can be used in a search expression.\n */\ninterface ConditionInterface\n{\n    /**\n     * Converts the condition to a string that can be sent to the IMAP server.\n     */\n    public function toString(): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Before.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Date;\n\nuse Ddeboer\\Imap\\Search\\AbstractDate;\n\n/**\n * Represents a date before condition. Messages must have a date before the\n * specified date in order to match the condition.\n */\nfinal class Before extends AbstractDate\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'BEFORE';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/On.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Date;\n\nuse Ddeboer\\Imap\\Search\\AbstractDate;\n\n/**\n * Represents a date on condition. Messages must have a date matching the\n * specified date in order to match the condition.\n */\nfinal class On extends AbstractDate\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'ON';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Date/Since.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Date;\n\nuse Ddeboer\\Imap\\Search\\AbstractDate;\n\n/**\n * Represents a date after condition. Messages must have a date after the\n * specified date in order to match the condition.\n */\nfinal class Since extends AbstractDate\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'SINCE';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Bcc.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Email;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a \"Bcc\" email address condition. Messages must have been addressed\n * to the specified recipient (along with any others) in order to match the\n * condition.\n */\nfinal class Bcc extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'BCC';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/Cc.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Email;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a \"Cc\" email address condition. Messages must have been addressed\n * to the specified recipient (along with any others) in order to match the\n * condition.\n */\nfinal class Cc extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'CC';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/From.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Email;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a \"From\" email address condition. Messages must have been sent\n * from the specified email address in order to match the condition.\n */\nfinal class From extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'FROM';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Email/To.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Email;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a \"To\" email address condition. Messages must have been addressed\n * to the specified recipient (along with any others) in order to match the\n * condition.\n */\nfinal class To extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'TO';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Answered.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an ANSWERED flag condition. Messages must have the \\\\ANSWERED flag\n * set in order to match the condition.\n */\nfinal class Answered implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'ANSWERED';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Flagged.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents a FLAGGED flag condition. Messages must have the \\\\FLAGGED flag\n * (i.e. urgent or important) set in order to match the condition.\n */\nfinal class Flagged implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'FLAGGED';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Recent.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an RECENT flag condition. Messages must have the \\\\RECENT flag\n * set in order to match the condition.\n */\nfinal class Recent implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'RECENT';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Seen.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an SEEN flag condition. Messages must have the \\\\SEEN flag\n * set in order to match the condition.\n */\nfinal class Seen implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'SEEN';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unanswered.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an UNANSWERED flag condition. Messages must not have the\n * \\\\ANSWERED flag set in order to match the condition.\n */\nfinal class Unanswered implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'UNANSWERED';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unflagged.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents a UNFLAGGED flag condition. Messages must no have the \\\\FLAGGED\n * flag (i.e. urgent or important) set in order to match the condition.\n */\nfinal class Unflagged implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'UNFLAGGED';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Flag/Unseen.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Flag;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an UNSEEN flag condition. Messages must not have the \\\\SEEN flag\n * set in order to match the condition.\n */\nfinal class Unseen implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'UNSEEN';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/All.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\LogicalOperator;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an ALL operator. Messages must match all conditions following this\n * operator in order to match the expression.\n */\nfinal class All implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'ALL';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/LogicalOperator/OrConditions.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\LogicalOperator;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an OR operator. Messages only need to match one of the conditions\n * after this operator to match the expression.\n */\nfinal class OrConditions implements ConditionInterface\n{\n    /**\n     * The conditions that together represent the expression.\n     *\n     * @var ConditionInterface[]\n     */\n    private array $conditions = [];\n\n    /**\n     * @param ConditionInterface[] $conditions\n     */\n    public function __construct(array $conditions)\n    {\n        foreach ($conditions as $condition) {\n            $this->addCondition($condition);\n        }\n    }\n\n    /**\n     * Adds a new condition to the expression.\n     *\n     * @param ConditionInterface $condition the condition to be added\n     *\n     * @return void\n     */\n    private function addCondition(ConditionInterface $condition)\n    {\n        $this->conditions[] = $condition;\n    }\n\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        $conditions = \\array_map(static function (ConditionInterface $condition): string {\n            return $condition->toString();\n        }, $this->conditions);\n\n        return \\sprintf('( %s )', \\implode(' OR ', $conditions));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/RawExpression.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search;\n\n/**\n * Represents a raw expression.\n */\nfinal class RawExpression implements ConditionInterface\n{\n    /**\n     * Text to be used for the condition.\n     */\n    private string $expression;\n\n    /**\n     * @param string $expression text for the condition\n     */\n    public function __construct(string $expression)\n    {\n        $this->expression = $expression;\n    }\n\n    public function toString(): string\n    {\n        return $this->expression;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Deleted.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\State;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents a DELETED condition. Messages must have been marked for deletion\n * but not yet expunged in order to match the condition.\n */\nfinal class Deleted implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'DELETED';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/NewMessage.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\State;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents a NEW condition. Only new messages will match this condition.\n */\nfinal class NewMessage implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'NEW';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Old.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\State;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents an OLD condition. Only old messages will match this condition.\n */\nfinal class Old implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'OLD';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/State/Undeleted.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\State;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Represents a UNDELETED condition. Messages must not have been marked for\n * deletion in order to match the condition.\n */\nfinal class Undeleted implements ConditionInterface\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    public function toString(): string\n    {\n        return 'UNDELETED';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Body.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Text;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a body text contains condition. Messages must have a body\n * containing the specified text in order to match the condition.\n */\nfinal class Body extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'BODY';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Keyword.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Text;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a keyword text contains condition. Messages must have a keyword\n * matching the specified text in order to match the condition.\n */\nfinal class Keyword extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'KEYWORD';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Subject.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Text;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a subject contains condition. Messages must have a subject\n * containing the specified text in order to match the condition.\n */\nfinal class Subject extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'SUBJECT';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Text.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Text;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a message text contains condition. Messages must contain the\n * specified text in order to match the condition.\n */\nfinal class Text extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'TEXT';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Search/Text/Unkeyword.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Search\\Text;\n\nuse Ddeboer\\Imap\\Search\\AbstractText;\n\n/**\n * Represents a keyword text does not contain condition. Messages must not have\n * a keyword matching the specified text in order to match the condition.\n */\nfinal class Unkeyword extends AbstractText\n{\n    /**\n     * Returns the keyword that the condition represents.\n     */\n    protected function getKeyword(): string\n    {\n        return 'UNKEYWORD';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/SearchExpression.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Search\\ConditionInterface;\n\n/**\n * Defines a search expression that can be used to look up email messages.\n */\nfinal class SearchExpression implements ConditionInterface\n{\n    /**\n     * The conditions that together represent the expression.\n     *\n     * @var ConditionInterface[]\n     */\n    private array $conditions = [];\n\n    /**\n     * Adds a new condition to the expression.\n     *\n     * @param ConditionInterface $condition the condition to be added\n     */\n    public function addCondition(ConditionInterface $condition): self\n    {\n        $this->conditions[] = $condition;\n\n        return $this;\n    }\n\n    /**\n     * Converts the expression to a string that can be sent to the IMAP server.\n     */\n    public function toString(): string\n    {\n        $conditions = \\array_map(static function (ConditionInterface $condition): string {\n            return $condition->toString();\n        }, $this->conditions);\n\n        return \\implode(' ', $conditions);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Server.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\nuse Ddeboer\\Imap\\Exception\\AuthenticationFailedException;\nuse Ddeboer\\Imap\\Exception\\ResourceCheckFailureException;\n\n/**\n * An IMAP server.\n */\nfinal class Server implements ServerInterface\n{\n    private string $hostname;\n    private string $port;\n    private string $flags;\n    /**\n     * @var mixed[]\n     */\n    private array $parameters;\n    private int $options;\n    private int $retries;\n\n    /**\n     * Constructor.\n     *\n     * @param string  $hostname   Internet domain name or bracketed IP address\n     *                            of server\n     * @param string  $port       TCP port number\n     * @param string  $flags      Optional flags\n     * @param mixed[] $parameters Connection parameters\n     * @param int     $options    Connection options\n     * @param int     $retries    Retries number\n     */\n    public function __construct(\n        string $hostname,\n        string $port = '993',\n        string $flags = '/imap/ssl/validate-cert',\n        array $parameters = [],\n        int $options = 0,\n        int $retries = 1\n    ) {\n        if (!\\function_exists('imap_open')) {\n            throw new \\RuntimeException('IMAP extension must be enabled');\n        }\n\n        $this->hostname   = $hostname;\n        $this->port       = $port;\n        $this->flags      = '' !== $flags ? '/' . \\ltrim($flags, '/') : '';\n        $this->parameters = $parameters;\n        $this->options    = $options;\n        $this->retries    = $retries;\n    }\n\n    /**\n     * Authenticate connection.\n     *\n     * @param string $username Username\n     * @param string $password Password\n     *\n     * @throws AuthenticationFailedException\n     */\n    public function authenticate(string $username, string $password): ConnectionInterface\n    {\n        $errorMessage = null;\n        $errorNumber  = 0;\n        \\set_error_handler(static function ($nr, $message) use (&$errorMessage, &$errorNumber): bool {\n            $errorMessage = $message;\n            $errorNumber = $nr;\n\n            return true;\n        });\n\n        $resource = \\imap_open(\n            $this->getServerString(),\n            $username,\n            $password,\n            $this->options,\n            $this->retries,\n            $this->parameters\n        );\n\n        \\restore_error_handler();\n\n        if (false === $resource || null !== $errorMessage) {\n            throw new AuthenticationFailedException(\\sprintf(\n                'Authentication failed for user \"%s\"%s',\n                $username,\n                null !== $errorMessage ? ': ' . $errorMessage : ''\n            ), $errorNumber);\n        }\n\n        $check = \\imap_check($resource);\n\n        if (false === $check) {\n            throw new ResourceCheckFailureException('Resource check failure');\n        }\n\n        $mailbox       = $check->Mailbox;\n        $connection    = $mailbox;\n        $curlyPosition = \\strpos($mailbox, '}');\n        if (false !== $curlyPosition) {\n            $connection = \\substr($mailbox, 0, $curlyPosition + 1);\n        }\n\n        // These are necessary to get rid of PHP throwing IMAP errors\n        \\imap_errors();\n        \\imap_alerts();\n\n        return new Connection(new ImapResource($resource), $connection);\n    }\n\n    /**\n     * Glues hostname, port and flags and returns result.\n     */\n    private function getServerString(): string\n    {\n        return \\sprintf(\n            '{%s%s%s}',\n            $this->hostname,\n            '' !== $this->port ? ':' . $this->port : '',\n            $this->flags\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/ServerInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap;\n\n/**\n * An IMAP server.\n */\ninterface ServerInterface\n{\n    /**\n     * Authenticate connection.\n     *\n     * @param string $username Username\n     * @param string $password Password\n     */\n    public function authenticate(string $username, string $password): ConnectionInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ddeboer/imap/src/Test/RawMessageIterator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Ddeboer\\Imap\\Test;\n\nuse Ddeboer\\Imap\\Message\\PartInterface;\nuse Ddeboer\\Imap\\MessageInterface;\nuse Ddeboer\\Imap\\MessageIteratorInterface;\n\n/**\n * A MessageIterator to be used in a mocked environment.\n *\n * @extends \\ArrayIterator<int, MessageInterface>\n */\nfinal class RawMessageIterator extends \\ArrayIterator implements MessageIteratorInterface\n{\n    /**\n     * @return MessageInterface<PartInterface>\n     */\n    public function current(): MessageInterface\n    {\n        return parent::current();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/CHANGELOG.md",
    "content": "# Changelog\n\n## [6.5.0](https://github.com/firebase/php-jwt/compare/v6.4.0...v6.5.0) (2023-05-12)\n\n\n### Bug Fixes\n\n* allow KID of '0' ([#505](https://github.com/firebase/php-jwt/issues/505)) ([9dc46a9](https://github.com/firebase/php-jwt/commit/9dc46a9c3e5801294249cfd2554c5363c9f9326a))\n\n\n### Miscellaneous Chores\n\n* drop support for PHP 7.3 ([#495](https://github.com/firebase/php-jwt/issues/495))\n\n## [6.4.0](https://github.com/firebase/php-jwt/compare/v6.3.2...v6.4.0) (2023-02-08)\n\n\n### Features\n\n* add support for W3C ES256K ([#462](https://github.com/firebase/php-jwt/issues/462)) ([213924f](https://github.com/firebase/php-jwt/commit/213924f51936291fbbca99158b11bd4ae56c2c95))\n* improve caching by only decoding jwks when necessary ([#486](https://github.com/firebase/php-jwt/issues/486)) ([78d3ed1](https://github.com/firebase/php-jwt/commit/78d3ed1073553f7d0bbffa6c2010009a0d483d5c))\n\n## [6.3.2](https://github.com/firebase/php-jwt/compare/v6.3.1...v6.3.2) (2022-11-01)\n\n\n### Bug Fixes\n\n* check kid before using as array index ([bad1b04](https://github.com/firebase/php-jwt/commit/bad1b040d0c736bbf86814c6b5ae614f517cf7bd))\n\n## [6.3.1](https://github.com/firebase/php-jwt/compare/v6.3.0...v6.3.1) (2022-11-01)\n\n\n### Bug Fixes\n\n* casing of GET for PSR compat ([#451](https://github.com/firebase/php-jwt/issues/451)) ([60b52b7](https://github.com/firebase/php-jwt/commit/60b52b71978790eafcf3b95cfbd83db0439e8d22))\n* string interpolation format for php 8.2 ([#446](https://github.com/firebase/php-jwt/issues/446)) ([2e07d8a](https://github.com/firebase/php-jwt/commit/2e07d8a1524d12b69b110ad649f17461d068b8f2))\n\n## 6.3.0 / 2022-07-15\n\n - Added ES256 support to JWK parsing ([#399](https://github.com/firebase/php-jwt/pull/399))\n - Fixed potential caching error in `CachedKeySet` by caching jwks as strings ([#435](https://github.com/firebase/php-jwt/pull/435))\n\n## 6.2.0 / 2022-05-14\n\n - Added `CachedKeySet` ([#397](https://github.com/firebase/php-jwt/pull/397))\n - Added `$defaultAlg` parameter to `JWT::parseKey` and `JWT::parseKeySet` ([#426](https://github.com/firebase/php-jwt/pull/426)).\n\n## 6.1.0 / 2022-03-23\n\n - Drop support for PHP 5.3, 5.4, 5.5, 5.6, and 7.0\n - Add parameter typing and return types where possible\n\n## 6.0.0 / 2022-01-24\n\n - **Backwards-Compatibility Breaking Changes**: See the [Release Notes](https://github.com/firebase/php-jwt/releases/tag/v6.0.0) for more information.\n - New Key object to prevent key/algorithm type confusion (#365)\n - Add JWK support (#273)\n - Add ES256 support (#256)\n - Add ES384 support (#324)\n - Add Ed25519 support (#343)\n\n## 5.0.0 / 2017-06-26\n- Support RS384 and RS512.\n  See [#117](https://github.com/firebase/php-jwt/pull/117). Thanks [@joostfaassen](https://github.com/joostfaassen)!\n- Add an example for RS256 openssl.\n  See [#125](https://github.com/firebase/php-jwt/pull/125). Thanks [@akeeman](https://github.com/akeeman)!\n- Detect invalid Base64 encoding in signature.\n  See [#162](https://github.com/firebase/php-jwt/pull/162). Thanks [@psignoret](https://github.com/psignoret)!\n- Update `JWT::verify` to handle OpenSSL errors.\n  See [#159](https://github.com/firebase/php-jwt/pull/159). Thanks [@bshaffer](https://github.com/bshaffer)!\n- Add `array` type hinting to `decode` method\n  See [#101](https://github.com/firebase/php-jwt/pull/101). Thanks [@hywak](https://github.com/hywak)!\n- Add all JSON error types.\n  See [#110](https://github.com/firebase/php-jwt/pull/110). Thanks [@gbalduzzi](https://github.com/gbalduzzi)!\n- Bugfix 'kid' not in given key list.\n  See [#129](https://github.com/firebase/php-jwt/pull/129). Thanks [@stampycode](https://github.com/stampycode)!\n- Miscellaneous cleanup, documentation and test fixes.\n  See [#107](https://github.com/firebase/php-jwt/pull/107), [#115](https://github.com/firebase/php-jwt/pull/115),\n  [#160](https://github.com/firebase/php-jwt/pull/160), [#161](https://github.com/firebase/php-jwt/pull/161), and\n  [#165](https://github.com/firebase/php-jwt/pull/165). Thanks [@akeeman](https://github.com/akeeman),\n  [@chinedufn](https://github.com/chinedufn), and [@bshaffer](https://github.com/bshaffer)!\n\n## 4.0.0 / 2016-07-17\n- Add support for late static binding. See [#88](https://github.com/firebase/php-jwt/pull/88) for details. Thanks to [@chappy84](https://github.com/chappy84)!\n- Use static `$timestamp` instead of `time()` to improve unit testing. See [#93](https://github.com/firebase/php-jwt/pull/93) for details. Thanks to [@josephmcdermott](https://github.com/josephmcdermott)!\n- Fixes to exceptions classes. See [#81](https://github.com/firebase/php-jwt/pull/81) for details. Thanks to [@Maks3w](https://github.com/Maks3w)!\n- Fixes to PHPDoc. See [#76](https://github.com/firebase/php-jwt/pull/76) for details. Thanks to [@akeeman](https://github.com/akeeman)!\n\n## 3.0.0 / 2015-07-22\n- Minimum PHP version updated from `5.2.0` to `5.3.0`.\n- Add `\\Firebase\\JWT` namespace. See\n[#59](https://github.com/firebase/php-jwt/pull/59) for details. Thanks to\n[@Dashron](https://github.com/Dashron)!\n- Require a non-empty key to decode and verify a JWT. See\n[#60](https://github.com/firebase/php-jwt/pull/60) for details. Thanks to\n[@sjones608](https://github.com/sjones608)!\n- Cleaner documentation blocks in the code. See\n[#62](https://github.com/firebase/php-jwt/pull/62) for details. Thanks to\n[@johanderuijter](https://github.com/johanderuijter)!\n\n## 2.2.0 / 2015-06-22\n- Add support for adding custom, optional JWT headers to `JWT::encode()`. See\n[#53](https://github.com/firebase/php-jwt/pull/53/files) for details. Thanks to\n[@mcocaro](https://github.com/mcocaro)!\n\n## 2.1.0 / 2015-05-20\n- Add support for adding a leeway to `JWT:decode()` that accounts for clock skew\nbetween signing and verifying entities. Thanks to [@lcabral](https://github.com/lcabral)!\n- Add support for passing an object implementing the `ArrayAccess` interface for\n`$keys` argument in `JWT::decode()`. Thanks to [@aztech-dev](https://github.com/aztech-dev)!\n\n## 2.0.0 / 2015-04-01\n- **Note**: It is strongly recommended that you update to > v2.0.0 to address\n  known security vulnerabilities in prior versions when both symmetric and\n  asymmetric keys are used together.\n- Update signature for `JWT::decode(...)` to require an array of supported\n  algorithms to use when verifying token signatures.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/LICENSE",
    "content": "Copyright (c) 2011, Neuman Vong\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright\n      notice, this list of conditions and the following disclaimer.\n\n    * Redistributions in binary form must reproduce the above\n      copyright notice, this list of conditions and the following\n      disclaimer in the documentation and/or other materials provided\n      with the distribution.\n\n    * Neither the name of the copyright holder nor the names of other\n      contributors may be used to endorse or promote products derived\n      from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nOWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\nTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/README.md",
    "content": "![Build Status](https://github.com/firebase/php-jwt/actions/workflows/tests.yml/badge.svg)\n[![Latest Stable Version](https://poser.pugx.org/firebase/php-jwt/v/stable)](https://packagist.org/packages/firebase/php-jwt)\n[![Total Downloads](https://poser.pugx.org/firebase/php-jwt/downloads)](https://packagist.org/packages/firebase/php-jwt)\n[![License](https://poser.pugx.org/firebase/php-jwt/license)](https://packagist.org/packages/firebase/php-jwt)\n\nPHP-JWT\n=======\nA simple library to encode and decode JSON Web Tokens (JWT) in PHP, conforming to [RFC 7519](https://tools.ietf.org/html/rfc7519).\n\nInstallation\n------------\n\nUse composer to manage your dependencies and download PHP-JWT:\n\n```bash\ncomposer require firebase/php-jwt\n```\n\nOptionally, install the `paragonie/sodium_compat` package from composer if your\nphp is < 7.2 or does not have libsodium installed:\n\n```bash\ncomposer require paragonie/sodium_compat\n```\n\nExample\n-------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$key = 'example_key';\n$payload = [\n    'iss' => 'http://example.org',\n    'aud' => 'http://example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n/**\n * IMPORTANT:\n * You must specify supported algorithms for your application. See\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n * for a list of spec-compliant algorithms.\n */\n$jwt = JWT::encode($payload, $key, 'HS256');\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'));\n\nprint_r($decoded);\n\n/*\n NOTE: This will now be an object instead of an associative array. To get\n an associative array, you will need to cast it as such:\n*/\n\n$decoded_array = (array) $decoded;\n\n/**\n * You can add a leeway to account for when there is a clock skew times between\n * the signing and verifying servers. It is recommended that this leeway should\n * not be bigger than a few minutes.\n *\n * Source: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#nbfDef\n */\nJWT::$leeway = 60; // $leeway in seconds\n$decoded = JWT::decode($jwt, new Key($key, 'HS256'));\n```\nExample encode/decode headers\n-------\nDecoding the JWT headers without verifying the JWT first is NOT recommended, and is not supported by\nthis library. This is because without verifying the JWT, the header values could have been tampered with.\nAny value pulled from an unverified header should be treated as if it could be any string sent in from an\nattacker.  If this is something you still want to do in your application for whatever reason, it's possible to \ndecode the header values manually simply by calling `json_decode` and `base64_decode` on the JWT \nheader part:\n```php\nuse Firebase\\JWT\\JWT;\n\n$key = 'example_key';\n$payload = [\n    'iss' => 'http://example.org',\n    'aud' => 'http://example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$headers = [\n    'x-forwarded-for' => 'www.google.com'\n];\n\n// Encode headers in the JWT string\n$jwt = JWT::encode($payload, $key, 'HS256', null, $headers);\n\n// Decode headers from the JWT string WITHOUT validation\n// **IMPORTANT**: This operation is vulnerable to attacks, as the JWT has not yet been verified.\n// These headers could be any value sent by an attacker.\nlist($headersB64, $payloadB64, $sig) = explode('.', $jwt);\n$decoded = json_decode(base64_decode($headersB64), true);\n\nprint_r($decoded);\n```\nExample with RS256 (openssl)\n----------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n$privateKey = <<<EOD\n-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAuzWHNM5f+amCjQztc5QTfJfzCC5J4nuW+L/aOxZ4f8J3Frew\nM2c/dufrnmedsApb0By7WhaHlcqCh/ScAPyJhzkPYLae7bTVro3hok0zDITR8F6S\nJGL42JAEUk+ILkPI+DONM0+3vzk6Kvfe548tu4czCuqU8BGVOlnp6IqBHhAswNMM\n78pos/2z0CjPM4tbeXqSTTbNkXRboxjU29vSopcT51koWOgiTf3C7nJUoMWZHZI5\nHqnIhPAG9yv8HAgNk6CMk2CadVHDo4IxjxTzTTqo1SCSH2pooJl9O8at6kkRYsrZ\nWwsKlOFE2LUce7ObnXsYihStBUDoeBQlGG/BwQIDAQABAoIBAFtGaOqNKGwggn9k\n6yzr6GhZ6Wt2rh1Xpq8XUz514UBhPxD7dFRLpbzCrLVpzY80LbmVGJ9+1pJozyWc\nVKeCeUdNwbqkr240Oe7GTFmGjDoxU+5/HX/SJYPpC8JZ9oqgEA87iz+WQX9hVoP2\noF6EB4ckDvXmk8FMwVZW2l2/kd5mrEVbDaXKxhvUDf52iVD+sGIlTif7mBgR99/b\nc3qiCnxCMmfYUnT2eh7Vv2LhCR/G9S6C3R4lA71rEyiU3KgsGfg0d82/XWXbegJW\nh3QbWNtQLxTuIvLq5aAryV3PfaHlPgdgK0ft6ocU2de2FagFka3nfVEyC7IUsNTK\nbq6nhAECgYEA7d/0DPOIaItl/8BWKyCuAHMss47j0wlGbBSHdJIiS55akMvnAG0M\n39y22Qqfzh1at9kBFeYeFIIU82ZLF3xOcE3z6pJZ4Dyvx4BYdXH77odo9uVK9s1l\n3T3BlMcqd1hvZLMS7dviyH79jZo4CXSHiKzc7pQ2YfK5eKxKqONeXuECgYEAyXlG\nvonaus/YTb1IBei9HwaccnQ/1HRn6MvfDjb7JJDIBhNClGPt6xRlzBbSZ73c2QEC\n6Fu9h36K/HZ2qcLd2bXiNyhIV7b6tVKk+0Psoj0dL9EbhsD1OsmE1nTPyAc9XZbb\nOPYxy+dpBCUA8/1U9+uiFoCa7mIbWcSQ+39gHuECgYAz82pQfct30aH4JiBrkNqP\nnJfRq05UY70uk5k1u0ikLTRoVS/hJu/d4E1Kv4hBMqYCavFSwAwnvHUo51lVCr/y\nxQOVYlsgnwBg2MX4+GjmIkqpSVCC8D7j/73MaWb746OIYZervQ8dbKahi2HbpsiG\n8AHcVSA/agxZr38qvWV54QKBgCD5TlDE8x18AuTGQ9FjxAAd7uD0kbXNz2vUYg9L\nhFL5tyL3aAAtUrUUw4xhd9IuysRhW/53dU+FsG2dXdJu6CxHjlyEpUJl2iZu/j15\nYnMzGWHIEX8+eWRDsw/+Ujtko/B7TinGcWPz3cYl4EAOiCeDUyXnqnO1btCEUU44\nDJ1BAoGBAJuPD27ErTSVtId90+M4zFPNibFP50KprVdc8CR37BE7r8vuGgNYXmnI\nRLnGP9p3pVgFCktORuYS2J/6t84I3+A17nEoB4xvhTLeAinAW/uTQOUmNicOP4Ek\n2MsLL2kHgL8bLTmvXV4FX+PXphrDKg1XxzOYn0otuoqdAQrkK4og\n-----END RSA PRIVATE KEY-----\nEOD;\n\n$publicKey = <<<EOD\n-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzWHNM5f+amCjQztc5QT\nfJfzCC5J4nuW+L/aOxZ4f8J3FrewM2c/dufrnmedsApb0By7WhaHlcqCh/ScAPyJ\nhzkPYLae7bTVro3hok0zDITR8F6SJGL42JAEUk+ILkPI+DONM0+3vzk6Kvfe548t\nu4czCuqU8BGVOlnp6IqBHhAswNMM78pos/2z0CjPM4tbeXqSTTbNkXRboxjU29vS\nopcT51koWOgiTf3C7nJUoMWZHZI5HqnIhPAG9yv8HAgNk6CMk2CadVHDo4IxjxTz\nTTqo1SCSH2pooJl9O8at6kkRYsrZWwsKlOFE2LUce7ObnXsYihStBUDoeBQlGG/B\nwQIDAQAB\n-----END PUBLIC KEY-----\nEOD;\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'RS256');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));\n\n/*\n NOTE: This will now be an object instead of an associative array. To get\n an associative array, you will need to cast it as such:\n*/\n\n$decoded_array = (array) $decoded;\necho \"Decode:\\n\" . print_r($decoded_array, true) . \"\\n\";\n```\n\nExample with a passphrase\n-------------------------\n\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Your passphrase\n$passphrase = '[YOUR_PASSPHRASE]';\n\n// Your private key file with passphrase\n// Can be generated with \"ssh-keygen -t rsa -m pem\"\n$privateKeyFile = '/path/to/key-with-passphrase.pem';\n\n// Create a private key of type \"resource\"\n$privateKey = openssl_pkey_get_private(\n    file_get_contents($privateKeyFile),\n    $passphrase\n);\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'RS256');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n// Get public key from the private key, or pull from from a file.\n$publicKey = openssl_pkey_get_details($privateKey)['key'];\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'RS256'));\necho \"Decode:\\n\" . print_r((array) $decoded, true) . \"\\n\";\n```\n\nExample with EdDSA (libsodium and Ed25519 signature)\n----------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Public and private keys are expected to be Base64 encoded. The last\n// non-empty line is used so that keys can be generated with\n// sodium_crypto_sign_keypair(). The secret keys generated by other tools may\n// need to be adjusted to match the input expected by libsodium.\n\n$keyPair = sodium_crypto_sign_keypair();\n\n$privateKey = base64_encode(sodium_crypto_sign_secretkey($keyPair));\n\n$publicKey = base64_encode(sodium_crypto_sign_publickey($keyPair));\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt = JWT::encode($payload, $privateKey, 'EdDSA');\necho \"Encode:\\n\" . print_r($jwt, true) . \"\\n\";\n\n$decoded = JWT::decode($jwt, new Key($publicKey, 'EdDSA'));\necho \"Decode:\\n\" . print_r((array) $decoded, true) . \"\\n\";\n````\n\nExample with multiple keys\n--------------------------\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\Key;\n\n// Example RSA keys from previous example\n// $privateKey1 = '...';\n// $publicKey1 = '...';\n\n// Example EdDSA keys from previous example\n// $privateKey2 = '...';\n// $publicKey2 = '...';\n\n$payload = [\n    'iss' => 'example.org',\n    'aud' => 'example.com',\n    'iat' => 1356999524,\n    'nbf' => 1357000000\n];\n\n$jwt1 = JWT::encode($payload, $privateKey1, 'RS256', 'kid1');\n$jwt2 = JWT::encode($payload, $privateKey2, 'EdDSA', 'kid2');\necho \"Encode 1:\\n\" . print_r($jwt1, true) . \"\\n\";\necho \"Encode 2:\\n\" . print_r($jwt2, true) . \"\\n\";\n\n$keys = [\n    'kid1' => new Key($publicKey1, 'RS256'),\n    'kid2' => new Key($publicKey2, 'EdDSA'),\n];\n\n$decoded1 = JWT::decode($jwt1, $keys);\n$decoded2 = JWT::decode($jwt2, $keys);\n\necho \"Decode 1:\\n\" . print_r((array) $decoded1, true) . \"\\n\";\necho \"Decode 2:\\n\" . print_r((array) $decoded2, true) . \"\\n\";\n```\n\nUsing JWKs\n----------\n\n```php\nuse Firebase\\JWT\\JWK;\nuse Firebase\\JWT\\JWT;\n\n// Set of keys. The \"keys\" key is required. For example, the JSON response to\n// this endpoint: https://www.gstatic.com/iap/verify/public_key-jwk\n$jwks = ['keys' => []];\n\n// JWK::parseKeySet($jwks) returns an associative array of **kid** to Firebase\\JWT\\Key\n// objects. Pass this as the second parameter to JWT::decode.\nJWT::decode($payload, JWK::parseKeySet($jwks));\n```\n\nUsing Cached Key Sets\n---------------------\n\nThe `CachedKeySet` class can be used to fetch and cache JWKS (JSON Web Key Sets) from a public URI.\nThis has the following advantages:\n\n1. The results are cached for performance.\n2. If an unrecognized key is requested, the cache is refreshed, to accomodate for key rotation.\n3. If rate limiting is enabled, the JWKS URI will not make more than 10 requests a second.\n\n```php\nuse Firebase\\JWT\\CachedKeySet;\nuse Firebase\\JWT\\JWT;\n\n// The URI for the JWKS you wish to cache the results from\n$jwksUri = 'https://www.gstatic.com/iap/verify/public_key-jwk';\n\n// Create an HTTP client (can be any PSR-7 compatible HTTP client)\n$httpClient = new GuzzleHttp\\Client();\n\n// Create an HTTP request factory (can be any PSR-17 compatible HTTP request factory)\n$httpFactory = new GuzzleHttp\\Psr\\HttpFactory();\n\n// Create a cache item pool (can be any PSR-6 compatible cache item pool)\n$cacheItemPool = Phpfastcache\\CacheManager::getInstance('files');\n\n$keySet = new CachedKeySet(\n    $jwksUri,\n    $httpClient,\n    $httpFactory,\n    $cacheItemPool,\n    null, // $expiresAfter int seconds to set the JWKS to expire\n    true  // $rateLimit    true to enable rate limit of 10 RPS on lookup of invalid keys\n);\n\n$jwt = 'eyJhbGci...'; // Some JWT signed by a key from the $jwkUri above\n$decoded = JWT::decode($jwt, $keySet);\n```\n\nMiscellaneous\n-------------\n\n#### Exception Handling\n\nWhen a call to `JWT::decode` is invalid, it will throw one of the following exceptions:\n\n```php\nuse Firebase\\JWT\\JWT;\nuse Firebase\\JWT\\SignatureInvalidException;\nuse Firebase\\JWT\\BeforeValidException;\nuse Firebase\\JWT\\ExpiredException;\nuse DomainException;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\ntry {\n    $decoded = JWT::decode($payload, $keys);\n} catch (InvalidArgumentException $e) {\n    // provided key/key-array is empty or malformed.\n} catch (DomainException $e) {\n    // provided algorithm is unsupported OR\n    // provided key is invalid OR\n    // unknown error thrown in openSSL or libsodium OR\n    // libsodium is required but not available.\n} catch (SignatureInvalidException $e) {\n    // provided JWT signature verification failed.\n} catch (BeforeValidException $e) {\n    // provided JWT is trying to be used before \"nbf\" claim OR\n    // provided JWT is trying to be used before \"iat\" claim.\n} catch (ExpiredException $e) {\n    // provided JWT is trying to be used after \"exp\" claim.\n} catch (UnexpectedValueException $e) {\n    // provided JWT is malformed OR\n    // provided JWT is missing an algorithm / using an unsupported algorithm OR\n    // provided JWT algorithm does not match provided key OR\n    // provided key ID in key/key-array is empty or invalid.\n}\n```\n\nAll exceptions in the `Firebase\\JWT` namespace extend `UnexpectedValueException`, and can be simplified\nlike this:\n\n```php\ntry {\n    $decoded = JWT::decode($payload, $keys);\n} catch (LogicException $e) {\n    // errors having to do with environmental setup or malformed JWT Keys\n} catch (UnexpectedValueException $e) {\n    // errors having to do with JWT signature and claims\n}\n```\n\n#### Casting to array\n\nThe return value of `JWT::decode` is the generic PHP object `stdClass`. If you'd like to handle with arrays\ninstead, you can do the following:\n\n```php\n// return type is stdClass\n$decoded = JWT::decode($payload, $keys);\n\n// cast to array\n$decoded = json_decode(json_encode($decoded), true);\n```\n\nTests\n-----\nRun the tests using phpunit:\n\n```bash\n$ pear install PHPUnit\n$ phpunit --configuration phpunit.xml.dist\nPHPUnit 3.7.10 by Sebastian Bergmann.\n.....\nTime: 0 seconds, Memory: 2.50Mb\nOK (5 tests, 5 assertions)\n```\n\nNew Lines in private keys\n-----\n\nIf your private key contains `\\n` characters, be sure to wrap it in double quotes `\"\"`\nand not single quotes `''` in order to properly interpret the escaped characters.\n\nLicense\n-------\n[3-Clause BSD](http://opensource.org/licenses/BSD-3-Clause).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/composer.json",
    "content": "{\n    \"name\": \"firebase/php-jwt\",\n    \"description\": \"A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.\",\n    \"homepage\": \"https://github.com/firebase/php-jwt\",\n    \"keywords\": [\n        \"php\",\n        \"jwt\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"Neuman Vong\",\n            \"email\": \"neuman+pear@twilio.com\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Anant Narayanan\",\n            \"email\": \"anant@php.net\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"license\": \"BSD-3-Clause\",\n    \"require\": {\n        \"php\": \"^7.4||^8.0\"\n    },\n    \"suggest\": {\n        \"paragonie/sodium_compat\": \"Support EdDSA (Ed25519) signatures when libsodium is not present\",\n        \"ext-sodium\": \"Support EdDSA (Ed25519) signatures\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Firebase\\\\JWT\\\\\": \"src\"\n        }\n    },\n    \"require-dev\": {\n        \"guzzlehttp/guzzle\": \"^6.5||^7.4\",\n        \"phpspec/prophecy-phpunit\": \"^2.0\",\n        \"phpunit/phpunit\": \"^9.5\",\n        \"psr/cache\": \"^1.0||^2.0\",\n        \"psr/http-client\": \"^1.0\",\n        \"psr/http-factory\": \"^1.0\"\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/BeforeValidException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass BeforeValidException extends \\UnexpectedValueException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/CachedKeySet.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse ArrayAccess;\nuse InvalidArgumentException;\nuse LogicException;\nuse OutOfBoundsException;\nuse Psr\\Cache\\CacheItemInterface;\nuse Psr\\Cache\\CacheItemPoolInterface;\nuse Psr\\Http\\Client\\ClientInterface;\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse RuntimeException;\nuse UnexpectedValueException;\n\n/**\n * @implements ArrayAccess<string, Key>\n */\nclass CachedKeySet implements ArrayAccess\n{\n    /**\n     * @var string\n     */\n    private $jwksUri;\n    /**\n     * @var ClientInterface\n     */\n    private $httpClient;\n    /**\n     * @var RequestFactoryInterface\n     */\n    private $httpFactory;\n    /**\n     * @var CacheItemPoolInterface\n     */\n    private $cache;\n    /**\n     * @var ?int\n     */\n    private $expiresAfter;\n    /**\n     * @var ?CacheItemInterface\n     */\n    private $cacheItem;\n    /**\n     * @var array<string, array<mixed>>\n     */\n    private $keySet;\n    /**\n     * @var string\n     */\n    private $cacheKey;\n    /**\n     * @var string\n     */\n    private $cacheKeyPrefix = 'jwks';\n    /**\n     * @var int\n     */\n    private $maxKeyLength = 64;\n    /**\n     * @var bool\n     */\n    private $rateLimit;\n    /**\n     * @var string\n     */\n    private $rateLimitCacheKey;\n    /**\n     * @var int\n     */\n    private $maxCallsPerMinute = 10;\n    /**\n     * @var string|null\n     */\n    private $defaultAlg;\n\n    public function __construct(\n        string $jwksUri,\n        ClientInterface $httpClient,\n        RequestFactoryInterface $httpFactory,\n        CacheItemPoolInterface $cache,\n        int $expiresAfter = null,\n        bool $rateLimit = false,\n        string $defaultAlg = null\n    ) {\n        $this->jwksUri = $jwksUri;\n        $this->httpClient = $httpClient;\n        $this->httpFactory = $httpFactory;\n        $this->cache = $cache;\n        $this->expiresAfter = $expiresAfter;\n        $this->rateLimit = $rateLimit;\n        $this->defaultAlg = $defaultAlg;\n        $this->setCacheKeys();\n    }\n\n    /**\n     * @param string $keyId\n     * @return Key\n     */\n    public function offsetGet($keyId): Key\n    {\n        if (!$this->keyIdExists($keyId)) {\n            throw new OutOfBoundsException('Key ID not found');\n        }\n        return JWK::parseKey($this->keySet[$keyId], $this->defaultAlg);\n    }\n\n    /**\n     * @param string $keyId\n     * @return bool\n     */\n    public function offsetExists($keyId): bool\n    {\n        return $this->keyIdExists($keyId);\n    }\n\n    /**\n     * @param string $offset\n     * @param Key $value\n     */\n    public function offsetSet($offset, $value): void\n    {\n        throw new LogicException('Method not implemented');\n    }\n\n    /**\n     * @param string $offset\n     */\n    public function offsetUnset($offset): void\n    {\n        throw new LogicException('Method not implemented');\n    }\n\n    /**\n     * @return array<mixed>\n     */\n    private function formatJwksForCache(string $jwks): array\n    {\n        $jwks = json_decode($jwks, true);\n\n        if (!isset($jwks['keys'])) {\n            throw new UnexpectedValueException('\"keys\" member must exist in the JWK Set');\n        }\n\n        if (empty($jwks['keys'])) {\n            throw new InvalidArgumentException('JWK Set did not contain any keys');\n        }\n\n        $keys = [];\n        foreach ($jwks['keys'] as $k => $v) {\n            $kid = isset($v['kid']) ? $v['kid'] : $k;\n            $keys[(string) $kid] = $v;\n        }\n\n        return $keys;\n    }\n\n    private function keyIdExists(string $keyId): bool\n    {\n        if (null === $this->keySet) {\n            $item = $this->getCacheItem();\n            // Try to load keys from cache\n            if ($item->isHit()) {\n                // item found! retrieve it\n                $this->keySet = $item->get();\n                // If the cached item is a string, the JWKS response was cached (previous behavior).\n                // Parse this into expected format array<kid, jwk> instead.\n                if (\\is_string($this->keySet)) {\n                    $this->keySet = $this->formatJwksForCache($this->keySet);\n                }\n            }\n        }\n\n        if (!isset($this->keySet[$keyId])) {\n            if ($this->rateLimitExceeded()) {\n                return false;\n            }\n            $request = $this->httpFactory->createRequest('GET', $this->jwksUri);\n            $jwksResponse = $this->httpClient->sendRequest($request);\n            $this->keySet = $this->formatJwksForCache((string) $jwksResponse->getBody());\n\n            if (!isset($this->keySet[$keyId])) {\n                return false;\n            }\n\n            $item = $this->getCacheItem();\n            $item->set($this->keySet);\n            if ($this->expiresAfter) {\n                $item->expiresAfter($this->expiresAfter);\n            }\n            $this->cache->save($item);\n        }\n\n        return true;\n    }\n\n    private function rateLimitExceeded(): bool\n    {\n        if (!$this->rateLimit) {\n            return false;\n        }\n\n        $cacheItem = $this->cache->getItem($this->rateLimitCacheKey);\n        if (!$cacheItem->isHit()) {\n            $cacheItem->expiresAfter(1); // # of calls are cached each minute\n        }\n\n        $callsPerMinute = (int) $cacheItem->get();\n        if (++$callsPerMinute > $this->maxCallsPerMinute) {\n            return true;\n        }\n        $cacheItem->set($callsPerMinute);\n        $this->cache->save($cacheItem);\n        return false;\n    }\n\n    private function getCacheItem(): CacheItemInterface\n    {\n        if (\\is_null($this->cacheItem)) {\n            $this->cacheItem = $this->cache->getItem($this->cacheKey);\n        }\n\n        return $this->cacheItem;\n    }\n\n    private function setCacheKeys(): void\n    {\n        if (empty($this->jwksUri)) {\n            throw new RuntimeException('JWKS URI is empty');\n        }\n\n        // ensure we do not have illegal characters\n        $key = preg_replace('|[^a-zA-Z0-9_\\.!]|', '', $this->jwksUri);\n\n        // add prefix\n        $key = $this->cacheKeyPrefix . $key;\n\n        // Hash keys if they exceed $maxKeyLength of 64\n        if (\\strlen($key) > $this->maxKeyLength) {\n            $key = substr(hash('sha256', $key), 0, $this->maxKeyLength);\n        }\n\n        $this->cacheKey = $key;\n\n        if ($this->rateLimit) {\n            // add prefix\n            $rateLimitKey = $this->cacheKeyPrefix . 'ratelimit' . $key;\n\n            // Hash keys if they exceed $maxKeyLength of 64\n            if (\\strlen($rateLimitKey) > $this->maxKeyLength) {\n                $rateLimitKey = substr(hash('sha256', $rateLimitKey), 0, $this->maxKeyLength);\n            }\n\n            $this->rateLimitCacheKey = $rateLimitKey;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/ExpiredException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass ExpiredException extends \\UnexpectedValueException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/JWK.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse DomainException;\nuse InvalidArgumentException;\nuse UnexpectedValueException;\n\n/**\n * JSON Web Key implementation, based on this spec:\n * https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41\n *\n * PHP version 5\n *\n * @category Authentication\n * @package  Authentication_JWT\n * @author   Bui Sy Nguyen <nguyenbs@gmail.com>\n * @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD\n * @link     https://github.com/firebase/php-jwt\n */\nclass JWK\n{\n    private const OID = '1.2.840.10045.2.1';\n    private const ASN1_OBJECT_IDENTIFIER = 0x06;\n    private const ASN1_SEQUENCE = 0x10; // also defined in JWT\n    private const ASN1_BIT_STRING = 0x03;\n    private const EC_CURVES = [\n        'P-256' => '1.2.840.10045.3.1.7', // Len: 64\n        'secp256k1' => '1.3.132.0.10', // Len: 64\n        // 'P-384' => '1.3.132.0.34', // Len: 96 (not yet supported)\n        // 'P-521' => '1.3.132.0.35', // Len: 132 (not supported)\n    ];\n\n    /**\n     * Parse a set of JWK keys\n     *\n     * @param array<mixed> $jwks The JSON Web Key Set as an associative array\n     * @param string       $defaultAlg The algorithm for the Key object if \"alg\" is not set in the\n     *                                 JSON Web Key Set\n     *\n     * @return array<string, Key> An associative array of key IDs (kid) to Key objects\n     *\n     * @throws InvalidArgumentException     Provided JWK Set is empty\n     * @throws UnexpectedValueException     Provided JWK Set was invalid\n     * @throws DomainException              OpenSSL failure\n     *\n     * @uses parseKey\n     */\n    public static function parseKeySet(array $jwks, string $defaultAlg = null): array\n    {\n        $keys = [];\n\n        if (!isset($jwks['keys'])) {\n            throw new UnexpectedValueException('\"keys\" member must exist in the JWK Set');\n        }\n\n        if (empty($jwks['keys'])) {\n            throw new InvalidArgumentException('JWK Set did not contain any keys');\n        }\n\n        foreach ($jwks['keys'] as $k => $v) {\n            $kid = isset($v['kid']) ? $v['kid'] : $k;\n            if ($key = self::parseKey($v, $defaultAlg)) {\n                $keys[(string) $kid] = $key;\n            }\n        }\n\n        if (0 === \\count($keys)) {\n            throw new UnexpectedValueException('No supported algorithms found in JWK Set');\n        }\n\n        return $keys;\n    }\n\n    /**\n     * Parse a JWK key\n     *\n     * @param array<mixed> $jwk An individual JWK\n     * @param string       $defaultAlg The algorithm for the Key object if \"alg\" is not set in the\n     *                                 JSON Web Key Set\n     *\n     * @return Key The key object for the JWK\n     *\n     * @throws InvalidArgumentException     Provided JWK is empty\n     * @throws UnexpectedValueException     Provided JWK was invalid\n     * @throws DomainException              OpenSSL failure\n     *\n     * @uses createPemFromModulusAndExponent\n     */\n    public static function parseKey(array $jwk, string $defaultAlg = null): ?Key\n    {\n        if (empty($jwk)) {\n            throw new InvalidArgumentException('JWK must not be empty');\n        }\n\n        if (!isset($jwk['kty'])) {\n            throw new UnexpectedValueException('JWK must contain a \"kty\" parameter');\n        }\n\n        if (!isset($jwk['alg'])) {\n            if (\\is_null($defaultAlg)) {\n                // The \"alg\" parameter is optional in a KTY, but an algorithm is required\n                // for parsing in this library. Use the $defaultAlg parameter when parsing the\n                // key set in order to prevent this error.\n                // @see https://datatracker.ietf.org/doc/html/rfc7517#section-4.4\n                throw new UnexpectedValueException('JWK must contain an \"alg\" parameter');\n            }\n            $jwk['alg'] = $defaultAlg;\n        }\n\n        switch ($jwk['kty']) {\n            case 'RSA':\n                if (!empty($jwk['d'])) {\n                    throw new UnexpectedValueException('RSA private keys are not supported');\n                }\n                if (!isset($jwk['n']) || !isset($jwk['e'])) {\n                    throw new UnexpectedValueException('RSA keys must contain values for both \"n\" and \"e\"');\n                }\n\n                $pem = self::createPemFromModulusAndExponent($jwk['n'], $jwk['e']);\n                $publicKey = \\openssl_pkey_get_public($pem);\n                if (false === $publicKey) {\n                    throw new DomainException(\n                        'OpenSSL error: ' . \\openssl_error_string()\n                    );\n                }\n                return new Key($publicKey, $jwk['alg']);\n            case 'EC':\n                if (isset($jwk['d'])) {\n                    // The key is actually a private key\n                    throw new UnexpectedValueException('Key data must be for a public key');\n                }\n\n                if (empty($jwk['crv'])) {\n                    throw new UnexpectedValueException('crv not set');\n                }\n\n                if (!isset(self::EC_CURVES[$jwk['crv']])) {\n                    throw new DomainException('Unrecognised or unsupported EC curve');\n                }\n\n                if (empty($jwk['x']) || empty($jwk['y'])) {\n                    throw new UnexpectedValueException('x and y not set');\n                }\n\n                $publicKey = self::createPemFromCrvAndXYCoordinates($jwk['crv'], $jwk['x'], $jwk['y']);\n                return new Key($publicKey, $jwk['alg']);\n            default:\n                // Currently only RSA is supported\n                break;\n        }\n\n        return null;\n    }\n\n    /**\n     * Converts the EC JWK values to pem format.\n     *\n     * @param   string  $crv The EC curve (only P-256 is supported)\n     * @param   string  $x   The EC x-coordinate\n     * @param   string  $y   The EC y-coordinate\n     *\n     * @return  string\n     */\n    private static function createPemFromCrvAndXYCoordinates(string $crv, string $x, string $y): string\n    {\n        $pem =\n            self::encodeDER(\n                self::ASN1_SEQUENCE,\n                self::encodeDER(\n                    self::ASN1_SEQUENCE,\n                    self::encodeDER(\n                        self::ASN1_OBJECT_IDENTIFIER,\n                        self::encodeOID(self::OID)\n                    )\n                    . self::encodeDER(\n                        self::ASN1_OBJECT_IDENTIFIER,\n                        self::encodeOID(self::EC_CURVES[$crv])\n                    )\n                ) .\n                self::encodeDER(\n                    self::ASN1_BIT_STRING,\n                    \\chr(0x00) . \\chr(0x04)\n                    . JWT::urlsafeB64Decode($x)\n                    . JWT::urlsafeB64Decode($y)\n                )\n            );\n\n        return sprintf(\n            \"-----BEGIN PUBLIC KEY-----\\n%s\\n-----END PUBLIC KEY-----\\n\",\n            wordwrap(base64_encode($pem), 64, \"\\n\", true)\n        );\n    }\n\n    /**\n     * Create a public key represented in PEM format from RSA modulus and exponent information\n     *\n     * @param string $n The RSA modulus encoded in Base64\n     * @param string $e The RSA exponent encoded in Base64\n     *\n     * @return string The RSA public key represented in PEM format\n     *\n     * @uses encodeLength\n     */\n    private static function createPemFromModulusAndExponent(\n        string $n,\n        string $e\n    ): string {\n        $mod = JWT::urlsafeB64Decode($n);\n        $exp = JWT::urlsafeB64Decode($e);\n\n        $modulus = \\pack('Ca*a*', 2, self::encodeLength(\\strlen($mod)), $mod);\n        $publicExponent = \\pack('Ca*a*', 2, self::encodeLength(\\strlen($exp)), $exp);\n\n        $rsaPublicKey = \\pack(\n            'Ca*a*a*',\n            48,\n            self::encodeLength(\\strlen($modulus) + \\strlen($publicExponent)),\n            $modulus,\n            $publicExponent\n        );\n\n        // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.\n        $rsaOID = \\pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA\n        $rsaPublicKey = \\chr(0) . $rsaPublicKey;\n        $rsaPublicKey = \\chr(3) . self::encodeLength(\\strlen($rsaPublicKey)) . $rsaPublicKey;\n\n        $rsaPublicKey = \\pack(\n            'Ca*a*',\n            48,\n            self::encodeLength(\\strlen($rsaOID . $rsaPublicKey)),\n            $rsaOID . $rsaPublicKey\n        );\n\n        return \"-----BEGIN PUBLIC KEY-----\\r\\n\" .\n            \\chunk_split(\\base64_encode($rsaPublicKey), 64) .\n            '-----END PUBLIC KEY-----';\n    }\n\n    /**\n     * DER-encode the length\n     *\n     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See\n     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.\n     *\n     * @param int $length\n     * @return string\n     */\n    private static function encodeLength(int $length): string\n    {\n        if ($length <= 0x7F) {\n            return \\chr($length);\n        }\n\n        $temp = \\ltrim(\\pack('N', $length), \\chr(0));\n\n        return \\pack('Ca*', 0x80 | \\strlen($temp), $temp);\n    }\n\n    /**\n     * Encodes a value into a DER object.\n     * Also defined in Firebase\\JWT\\JWT\n     *\n     * @param   int     $type DER tag\n     * @param   string  $value the value to encode\n     * @return  string  the encoded object\n     */\n    private static function encodeDER(int $type, string $value): string\n    {\n        $tag_header = 0;\n        if ($type === self::ASN1_SEQUENCE) {\n            $tag_header |= 0x20;\n        }\n\n        // Type\n        $der = \\chr($tag_header | $type);\n\n        // Length\n        $der .= \\chr(\\strlen($value));\n\n        return $der . $value;\n    }\n\n    /**\n     * Encodes a string into a DER-encoded OID.\n     *\n     * @param   string $oid the OID string\n     * @return  string the binary DER-encoded OID\n     */\n    private static function encodeOID(string $oid): string\n    {\n        $octets = explode('.', $oid);\n\n        // Get the first octet\n        $first = (int) array_shift($octets);\n        $second = (int) array_shift($octets);\n        $oid = \\chr($first * 40 + $second);\n\n        // Iterate over subsequent octets\n        foreach ($octets as $octet) {\n            if ($octet == 0) {\n                $oid .= \\chr(0x00);\n                continue;\n            }\n            $bin = '';\n\n            while ($octet) {\n                $bin .= \\chr(0x80 | ($octet & 0x7f));\n                $octet >>= 7;\n            }\n            $bin[0] = $bin[0] & \\chr(0x7f);\n\n            // Convert to big endian if necessary\n            if (pack('V', 65534) == pack('L', 65534)) {\n                $oid .= strrev($bin);\n            } else {\n                $oid .= $bin;\n            }\n        }\n\n        return $oid;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/JWT.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse ArrayAccess;\nuse DateTime;\nuse DomainException;\nuse Exception;\nuse InvalidArgumentException;\nuse OpenSSLAsymmetricKey;\nuse OpenSSLCertificate;\nuse stdClass;\nuse UnexpectedValueException;\n\n/**\n * JSON Web Token implementation, based on this spec:\n * https://tools.ietf.org/html/rfc7519\n *\n * PHP version 5\n *\n * @category Authentication\n * @package  Authentication_JWT\n * @author   Neuman Vong <neuman@twilio.com>\n * @author   Anant Narayanan <anant@php.net>\n * @license  http://opensource.org/licenses/BSD-3-Clause 3-clause BSD\n * @link     https://github.com/firebase/php-jwt\n */\nclass JWT\n{\n    private const ASN1_INTEGER = 0x02;\n    private const ASN1_SEQUENCE = 0x10;\n    private const ASN1_BIT_STRING = 0x03;\n\n    /**\n     * When checking nbf, iat or expiration times,\n     * we want to provide some extra leeway time to\n     * account for clock skew.\n     *\n     * @var int\n     */\n    public static $leeway = 0;\n\n    /**\n     * Allow the current timestamp to be specified.\n     * Useful for fixing a value within unit testing.\n     * Will default to PHP time() value if null.\n     *\n     * @var ?int\n     */\n    public static $timestamp = null;\n\n    /**\n     * @var array<string, string[]>\n     */\n    public static $supported_algs = [\n        'ES384' => ['openssl', 'SHA384'],\n        'ES256' => ['openssl', 'SHA256'],\n        'ES256K' => ['openssl', 'SHA256'],\n        'HS256' => ['hash_hmac', 'SHA256'],\n        'HS384' => ['hash_hmac', 'SHA384'],\n        'HS512' => ['hash_hmac', 'SHA512'],\n        'RS256' => ['openssl', 'SHA256'],\n        'RS384' => ['openssl', 'SHA384'],\n        'RS512' => ['openssl', 'SHA512'],\n        'EdDSA' => ['sodium_crypto', 'EdDSA'],\n    ];\n\n    /**\n     * Decodes a JWT string into a PHP object.\n     *\n     * @param string                 $jwt            The JWT\n     * @param Key|ArrayAccess<string,Key>|array<string,Key> $keyOrKeyArray  The Key or associative array of key IDs\n     *                                                                      (kid) to Key objects.\n     *                                                                      If the algorithm used is asymmetric, this is\n     *                                                                      the public key.\n     *                                                                      Each Key object contains an algorithm and\n     *                                                                      matching key.\n     *                                                                      Supported algorithms are 'ES384','ES256',\n     *                                                                      'HS256', 'HS384', 'HS512', 'RS256', 'RS384'\n     *                                                                      and 'RS512'.\n     *\n     * @return stdClass The JWT's payload as a PHP object\n     *\n     * @throws InvalidArgumentException     Provided key/key-array was empty or malformed\n     * @throws DomainException              Provided JWT is malformed\n     * @throws UnexpectedValueException     Provided JWT was invalid\n     * @throws SignatureInvalidException    Provided JWT was invalid because the signature verification failed\n     * @throws BeforeValidException         Provided JWT is trying to be used before it's eligible as defined by 'nbf'\n     * @throws BeforeValidException         Provided JWT is trying to be used before it's been created as defined by 'iat'\n     * @throws ExpiredException             Provided JWT has since expired, as defined by the 'exp' claim\n     *\n     * @uses jsonDecode\n     * @uses urlsafeB64Decode\n     */\n    public static function decode(\n        string $jwt,\n        $keyOrKeyArray\n    ): stdClass {\n        // Validate JWT\n        $timestamp = \\is_null(static::$timestamp) ? \\time() : static::$timestamp;\n\n        if (empty($keyOrKeyArray)) {\n            throw new InvalidArgumentException('Key may not be empty');\n        }\n        $tks = \\explode('.', $jwt);\n        if (\\count($tks) !== 3) {\n            throw new UnexpectedValueException('Wrong number of segments');\n        }\n        list($headb64, $bodyb64, $cryptob64) = $tks;\n        $headerRaw = static::urlsafeB64Decode($headb64);\n        if (null === ($header = static::jsonDecode($headerRaw))) {\n            throw new UnexpectedValueException('Invalid header encoding');\n        }\n        $payloadRaw = static::urlsafeB64Decode($bodyb64);\n        if (null === ($payload = static::jsonDecode($payloadRaw))) {\n            throw new UnexpectedValueException('Invalid claims encoding');\n        }\n        if (\\is_array($payload)) {\n            // prevent PHP Fatal Error in edge-cases when payload is empty array\n            $payload = (object) $payload;\n        }\n        if (!$payload instanceof stdClass) {\n            throw new UnexpectedValueException('Payload must be a JSON object');\n        }\n        $sig = static::urlsafeB64Decode($cryptob64);\n        if (empty($header->alg)) {\n            throw new UnexpectedValueException('Empty algorithm');\n        }\n        if (empty(static::$supported_algs[$header->alg])) {\n            throw new UnexpectedValueException('Algorithm not supported');\n        }\n\n        $key = self::getKey($keyOrKeyArray, property_exists($header, 'kid') ? $header->kid : null);\n\n        // Check the algorithm\n        if (!self::constantTimeEquals($key->getAlgorithm(), $header->alg)) {\n            // See issue #351\n            throw new UnexpectedValueException('Incorrect key for this algorithm');\n        }\n        if (\\in_array($header->alg, ['ES256', 'ES256K', 'ES384'], true)) {\n            // OpenSSL expects an ASN.1 DER sequence for ES256/ES256K/ES384 signatures\n            $sig = self::signatureToDER($sig);\n        }\n        if (!self::verify(\"{$headb64}.{$bodyb64}\", $sig, $key->getKeyMaterial(), $header->alg)) {\n            throw new SignatureInvalidException('Signature verification failed');\n        }\n\n        // Check the nbf if it is defined. This is the time that the\n        // token can actually be used. If it's not yet that time, abort.\n        if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) {\n            throw new BeforeValidException(\n                'Cannot handle token prior to ' . \\date(DateTime::ISO8601, $payload->nbf)\n            );\n        }\n\n        // Check that this token has been created before 'now'. This prevents\n        // using tokens that have been created for later use (and haven't\n        // correctly used the nbf claim).\n        if (isset($payload->iat) && $payload->iat > ($timestamp + static::$leeway)) {\n            throw new BeforeValidException(\n                'Cannot handle token prior to ' . \\date(DateTime::ISO8601, $payload->iat)\n            );\n        }\n\n        // Check if this token has expired.\n        if (isset($payload->exp) && ($timestamp - static::$leeway) >= $payload->exp) {\n            throw new ExpiredException('Expired token');\n        }\n\n        return $payload;\n    }\n\n    /**\n     * Converts and signs a PHP array into a JWT string.\n     *\n     * @param array<mixed>          $payload PHP array\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate $key The secret key.\n     * @param string                $alg     Supported algorithms are 'ES384','ES256', 'ES256K', 'HS256',\n     *                                       'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'\n     * @param string                $keyId\n     * @param array<string, string> $head    An array with header elements to attach\n     *\n     * @return string A signed JWT\n     *\n     * @uses jsonEncode\n     * @uses urlsafeB64Encode\n     */\n    public static function encode(\n        array $payload,\n        $key,\n        string $alg,\n        string $keyId = null,\n        array $head = null\n    ): string {\n        $header = ['typ' => 'JWT', 'alg' => $alg];\n        if ($keyId !== null) {\n            $header['kid'] = $keyId;\n        }\n        if (isset($head) && \\is_array($head)) {\n            $header = \\array_merge($head, $header);\n        }\n        $segments = [];\n        $segments[] = static::urlsafeB64Encode((string) static::jsonEncode($header));\n        $segments[] = static::urlsafeB64Encode((string) static::jsonEncode($payload));\n        $signing_input = \\implode('.', $segments);\n\n        $signature = static::sign($signing_input, $key, $alg);\n        $segments[] = static::urlsafeB64Encode($signature);\n\n        return \\implode('.', $segments);\n    }\n\n    /**\n     * Sign a string with a given key and algorithm.\n     *\n     * @param string $msg  The message to sign\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $key  The secret key.\n     * @param string $alg  Supported algorithms are 'ES384','ES256', 'ES256K', 'HS256',\n     *                    'HS384', 'HS512', 'RS256', 'RS384', and 'RS512'\n     *\n     * @return string An encrypted message\n     *\n     * @throws DomainException Unsupported algorithm or bad key was specified\n     */\n    public static function sign(\n        string $msg,\n        $key,\n        string $alg\n    ): string {\n        if (empty(static::$supported_algs[$alg])) {\n            throw new DomainException('Algorithm not supported');\n        }\n        list($function, $algorithm) = static::$supported_algs[$alg];\n        switch ($function) {\n            case 'hash_hmac':\n                if (!\\is_string($key)) {\n                    throw new InvalidArgumentException('key must be a string when using hmac');\n                }\n                return \\hash_hmac($algorithm, $msg, $key, true);\n            case 'openssl':\n                $signature = '';\n                $success = \\openssl_sign($msg, $signature, $key, $algorithm); // @phpstan-ignore-line\n                if (!$success) {\n                    throw new DomainException('OpenSSL unable to sign data');\n                }\n                if ($alg === 'ES256' || $alg === 'ES256K') {\n                    $signature = self::signatureFromDER($signature, 256);\n                } elseif ($alg === 'ES384') {\n                    $signature = self::signatureFromDER($signature, 384);\n                }\n                return $signature;\n            case 'sodium_crypto':\n                if (!\\function_exists('sodium_crypto_sign_detached')) {\n                    throw new DomainException('libsodium is not available');\n                }\n                if (!\\is_string($key)) {\n                    throw new InvalidArgumentException('key must be a string when using EdDSA');\n                }\n                try {\n                    // The last non-empty line is used as the key.\n                    $lines = array_filter(explode(\"\\n\", $key));\n                    $key = base64_decode((string) end($lines));\n                    if (\\strlen($key) === 0) {\n                        throw new DomainException('Key cannot be empty string');\n                    }\n                    return sodium_crypto_sign_detached($msg, $key);\n                } catch (Exception $e) {\n                    throw new DomainException($e->getMessage(), 0, $e);\n                }\n        }\n\n        throw new DomainException('Algorithm not supported');\n    }\n\n    /**\n     * Verify a signature with the message, key and method. Not all methods\n     * are symmetric, so we must have a separate verify and sign method.\n     *\n     * @param string $msg         The original message (header and body)\n     * @param string $signature   The original signature\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate  $keyMaterial For HS*, a string key works. for RS*, must be an instance of OpenSSLAsymmetricKey\n     * @param string $alg         The algorithm\n     *\n     * @return bool\n     *\n     * @throws DomainException Invalid Algorithm, bad key, or OpenSSL failure\n     */\n    private static function verify(\n        string $msg,\n        string $signature,\n        $keyMaterial,\n        string $alg\n    ): bool {\n        if (empty(static::$supported_algs[$alg])) {\n            throw new DomainException('Algorithm not supported');\n        }\n\n        list($function, $algorithm) = static::$supported_algs[$alg];\n        switch ($function) {\n            case 'openssl':\n                $success = \\openssl_verify($msg, $signature, $keyMaterial, $algorithm); // @phpstan-ignore-line\n                if ($success === 1) {\n                    return true;\n                }\n                if ($success === 0) {\n                    return false;\n                }\n                // returns 1 on success, 0 on failure, -1 on error.\n                throw new DomainException(\n                    'OpenSSL error: ' . \\openssl_error_string()\n                );\n            case 'sodium_crypto':\n                if (!\\function_exists('sodium_crypto_sign_verify_detached')) {\n                    throw new DomainException('libsodium is not available');\n                }\n                if (!\\is_string($keyMaterial)) {\n                    throw new InvalidArgumentException('key must be a string when using EdDSA');\n                }\n                try {\n                    // The last non-empty line is used as the key.\n                    $lines = array_filter(explode(\"\\n\", $keyMaterial));\n                    $key = base64_decode((string) end($lines));\n                    if (\\strlen($key) === 0) {\n                        throw new DomainException('Key cannot be empty string');\n                    }\n                    if (\\strlen($signature) === 0) {\n                        throw new DomainException('Signature cannot be empty string');\n                    }\n                    return sodium_crypto_sign_verify_detached($signature, $msg, $key);\n                } catch (Exception $e) {\n                    throw new DomainException($e->getMessage(), 0, $e);\n                }\n            case 'hash_hmac':\n            default:\n                if (!\\is_string($keyMaterial)) {\n                    throw new InvalidArgumentException('key must be a string when using hmac');\n                }\n                $hash = \\hash_hmac($algorithm, $msg, $keyMaterial, true);\n                return self::constantTimeEquals($hash, $signature);\n        }\n    }\n\n    /**\n     * Decode a JSON string into a PHP object.\n     *\n     * @param string $input JSON string\n     *\n     * @return mixed The decoded JSON string\n     *\n     * @throws DomainException Provided string was invalid JSON\n     */\n    public static function jsonDecode(string $input)\n    {\n        $obj = \\json_decode($input, false, 512, JSON_BIGINT_AS_STRING);\n\n        if ($errno = \\json_last_error()) {\n            self::handleJsonError($errno);\n        } elseif ($obj === null && $input !== 'null') {\n            throw new DomainException('Null result with non-null input');\n        }\n        return $obj;\n    }\n\n    /**\n     * Encode a PHP array into a JSON string.\n     *\n     * @param array<mixed> $input A PHP array\n     *\n     * @return string JSON representation of the PHP array\n     *\n     * @throws DomainException Provided object could not be encoded to valid JSON\n     */\n    public static function jsonEncode(array $input): string\n    {\n        if (PHP_VERSION_ID >= 50400) {\n            $json = \\json_encode($input, \\JSON_UNESCAPED_SLASHES);\n        } else {\n            // PHP 5.3 only\n            $json = \\json_encode($input);\n        }\n        if ($errno = \\json_last_error()) {\n            self::handleJsonError($errno);\n        } elseif ($json === 'null') {\n            throw new DomainException('Null result with non-null input');\n        }\n        if ($json === false) {\n            throw new DomainException('Provided object could not be encoded to valid JSON');\n        }\n        return $json;\n    }\n\n    /**\n     * Decode a string with URL-safe Base64.\n     *\n     * @param string $input A Base64 encoded string\n     *\n     * @return string A decoded string\n     *\n     * @throws InvalidArgumentException invalid base64 characters\n     */\n    public static function urlsafeB64Decode(string $input): string\n    {\n        $remainder = \\strlen($input) % 4;\n        if ($remainder) {\n            $padlen = 4 - $remainder;\n            $input .= \\str_repeat('=', $padlen);\n        }\n        return \\base64_decode(\\strtr($input, '-_', '+/'));\n    }\n\n    /**\n     * Encode a string with URL-safe Base64.\n     *\n     * @param string $input The string you want encoded\n     *\n     * @return string The base64 encode of what you passed in\n     */\n    public static function urlsafeB64Encode(string $input): string\n    {\n        return \\str_replace('=', '', \\strtr(\\base64_encode($input), '+/', '-_'));\n    }\n\n\n    /**\n     * Determine if an algorithm has been provided for each Key\n     *\n     * @param Key|ArrayAccess<string,Key>|array<string,Key> $keyOrKeyArray\n     * @param string|null            $kid\n     *\n     * @throws UnexpectedValueException\n     *\n     * @return Key\n     */\n    private static function getKey(\n        $keyOrKeyArray,\n        ?string $kid\n    ): Key {\n        if ($keyOrKeyArray instanceof Key) {\n            return $keyOrKeyArray;\n        }\n\n        if (empty($kid) && $kid !== '0') {\n            throw new UnexpectedValueException('\"kid\" empty, unable to lookup correct key');\n        }\n\n        if ($keyOrKeyArray instanceof CachedKeySet) {\n            // Skip \"isset\" check, as this will automatically refresh if not set\n            return $keyOrKeyArray[$kid];\n        }\n\n        if (!isset($keyOrKeyArray[$kid])) {\n            throw new UnexpectedValueException('\"kid\" invalid, unable to lookup correct key');\n        }\n\n        return $keyOrKeyArray[$kid];\n    }\n\n    /**\n     * @param string $left  The string of known length to compare against\n     * @param string $right The user-supplied string\n     * @return bool\n     */\n    public static function constantTimeEquals(string $left, string $right): bool\n    {\n        if (\\function_exists('hash_equals')) {\n            return \\hash_equals($left, $right);\n        }\n        $len = \\min(self::safeStrlen($left), self::safeStrlen($right));\n\n        $status = 0;\n        for ($i = 0; $i < $len; $i++) {\n            $status |= (\\ord($left[$i]) ^ \\ord($right[$i]));\n        }\n        $status |= (self::safeStrlen($left) ^ self::safeStrlen($right));\n\n        return ($status === 0);\n    }\n\n    /**\n     * Helper method to create a JSON error.\n     *\n     * @param int $errno An error number from json_last_error()\n     *\n     * @throws DomainException\n     *\n     * @return void\n     */\n    private static function handleJsonError(int $errno): void\n    {\n        $messages = [\n            JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',\n            JSON_ERROR_STATE_MISMATCH => 'Invalid or malformed JSON',\n            JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',\n            JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',\n            JSON_ERROR_UTF8 => 'Malformed UTF-8 characters' //PHP >= 5.3.3\n        ];\n        throw new DomainException(\n            isset($messages[$errno])\n            ? $messages[$errno]\n            : 'Unknown JSON error: ' . $errno\n        );\n    }\n\n    /**\n     * Get the number of bytes in cryptographic strings.\n     *\n     * @param string $str\n     *\n     * @return int\n     */\n    private static function safeStrlen(string $str): int\n    {\n        if (\\function_exists('mb_strlen')) {\n            return \\mb_strlen($str, '8bit');\n        }\n        return \\strlen($str);\n    }\n\n    /**\n     * Convert an ECDSA signature to an ASN.1 DER sequence\n     *\n     * @param   string $sig The ECDSA signature to convert\n     * @return  string The encoded DER object\n     */\n    private static function signatureToDER(string $sig): string\n    {\n        // Separate the signature into r-value and s-value\n        $length = max(1, (int) (\\strlen($sig) / 2));\n        list($r, $s) = \\str_split($sig, $length);\n\n        // Trim leading zeros\n        $r = \\ltrim($r, \"\\x00\");\n        $s = \\ltrim($s, \"\\x00\");\n\n        // Convert r-value and s-value from unsigned big-endian integers to\n        // signed two's complement\n        if (\\ord($r[0]) > 0x7f) {\n            $r = \"\\x00\" . $r;\n        }\n        if (\\ord($s[0]) > 0x7f) {\n            $s = \"\\x00\" . $s;\n        }\n\n        return self::encodeDER(\n            self::ASN1_SEQUENCE,\n            self::encodeDER(self::ASN1_INTEGER, $r) .\n            self::encodeDER(self::ASN1_INTEGER, $s)\n        );\n    }\n\n    /**\n     * Encodes a value into a DER object.\n     *\n     * @param   int     $type DER tag\n     * @param   string  $value the value to encode\n     *\n     * @return  string  the encoded object\n     */\n    private static function encodeDER(int $type, string $value): string\n    {\n        $tag_header = 0;\n        if ($type === self::ASN1_SEQUENCE) {\n            $tag_header |= 0x20;\n        }\n\n        // Type\n        $der = \\chr($tag_header | $type);\n\n        // Length\n        $der .= \\chr(\\strlen($value));\n\n        return $der . $value;\n    }\n\n    /**\n     * Encodes signature from a DER object.\n     *\n     * @param   string  $der binary signature in DER format\n     * @param   int     $keySize the number of bits in the key\n     *\n     * @return  string  the signature\n     */\n    private static function signatureFromDER(string $der, int $keySize): string\n    {\n        // OpenSSL returns the ECDSA signatures as a binary ASN.1 DER SEQUENCE\n        list($offset, $_) = self::readDER($der);\n        list($offset, $r) = self::readDER($der, $offset);\n        list($offset, $s) = self::readDER($der, $offset);\n\n        // Convert r-value and s-value from signed two's compliment to unsigned\n        // big-endian integers\n        $r = \\ltrim($r, \"\\x00\");\n        $s = \\ltrim($s, \"\\x00\");\n\n        // Pad out r and s so that they are $keySize bits long\n        $r = \\str_pad($r, $keySize / 8, \"\\x00\", STR_PAD_LEFT);\n        $s = \\str_pad($s, $keySize / 8, \"\\x00\", STR_PAD_LEFT);\n\n        return $r . $s;\n    }\n\n    /**\n     * Reads binary DER-encoded data and decodes into a single object\n     *\n     * @param string $der the binary data in DER format\n     * @param int $offset the offset of the data stream containing the object\n     * to decode\n     *\n     * @return array{int, string|null} the new offset and the decoded object\n     */\n    private static function readDER(string $der, int $offset = 0): array\n    {\n        $pos = $offset;\n        $size = \\strlen($der);\n        $constructed = (\\ord($der[$pos]) >> 5) & 0x01;\n        $type = \\ord($der[$pos++]) & 0x1f;\n\n        // Length\n        $len = \\ord($der[$pos++]);\n        if ($len & 0x80) {\n            $n = $len & 0x1f;\n            $len = 0;\n            while ($n-- && $pos < $size) {\n                $len = ($len << 8) | \\ord($der[$pos++]);\n            }\n        }\n\n        // Value\n        if ($type === self::ASN1_BIT_STRING) {\n            $pos++; // Skip the first contents octet (padding indicator)\n            $data = \\substr($der, $pos, $len - 1);\n            $pos += $len - 1;\n        } elseif (!$constructed) {\n            $data = \\substr($der, $pos, $len);\n            $pos += $len;\n        } else {\n            $data = null;\n        }\n\n        return [$pos, $data];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/Key.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nuse InvalidArgumentException;\nuse OpenSSLAsymmetricKey;\nuse OpenSSLCertificate;\nuse TypeError;\n\nclass Key\n{\n    /** @var string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate */\n    private $keyMaterial;\n    /** @var string */\n    private $algorithm;\n\n    /**\n     * @param string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate $keyMaterial\n     * @param string $algorithm\n     */\n    public function __construct(\n        $keyMaterial,\n        string $algorithm\n    ) {\n        if (\n            !\\is_string($keyMaterial)\n            && !$keyMaterial instanceof OpenSSLAsymmetricKey\n            && !$keyMaterial instanceof OpenSSLCertificate\n            && !\\is_resource($keyMaterial)\n        ) {\n            throw new TypeError('Key material must be a string, resource, or OpenSSLAsymmetricKey');\n        }\n\n        if (empty($keyMaterial)) {\n            throw new InvalidArgumentException('Key material must not be empty');\n        }\n\n        if (empty($algorithm)) {\n            throw new InvalidArgumentException('Algorithm must not be empty');\n        }\n\n        // TODO: Remove in PHP 8.0 in favor of class constructor property promotion\n        $this->keyMaterial = $keyMaterial;\n        $this->algorithm = $algorithm;\n    }\n\n    /**\n     * Return the algorithm valid for this key\n     *\n     * @return string\n     */\n    public function getAlgorithm(): string\n    {\n        return $this->algorithm;\n    }\n\n    /**\n     * @return string|resource|OpenSSLAsymmetricKey|OpenSSLCertificate\n     */\n    public function getKeyMaterial()\n    {\n        return $this->keyMaterial;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/firebase/php-jwt/src/SignatureInvalidException.php",
    "content": "<?php\n\nnamespace Firebase\\JWT;\n\nclass SignatureInvalidException extends \\UnexpectedValueException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/CHANGELOG.md",
    "content": "# Change Log\n\nPlease refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version.\n\n## 7.5.0 - 2022-08-28\n\n### Added\n\n- Support PHP 8.2\n- Add request to delay closure params\n\n## 7.4.5 - 2022-06-20\n\n* Fix change in port should be considered a change in origin\n* Fix `CURLOPT_HTTPAUTH` option not cleared on change of origin\n\n## 7.4.4 - 2022-06-09\n\n* Fix failure to strip Authorization header on HTTP downgrade\n* Fix failure to strip the Cookie header on change in host or HTTP downgrade\n\n## 7.4.3 - 2022-05-25\n\n* Fix cross-domain cookie leakage\n\n## 7.4.2 - 2022-03-20\n\n### Fixed\n\n- Remove curl auth on cross-domain redirects to align with the Authorization HTTP header\n- Reject non-HTTP schemes in StreamHandler\n- Set a default ssl.peer_name context in StreamHandler to allow `force_ip_resolve`\n\n## 7.4.1 - 2021-12-06\n\n### Changed\n\n- Replaced implicit URI to string coercion [#2946](https://github.com/guzzle/guzzle/pull/2946)\n- Allow `symfony/deprecation-contracts` version 3 [#2961](https://github.com/guzzle/guzzle/pull/2961)\n\n### Fixed\n\n- Only close curl handle if it's done [#2950](https://github.com/guzzle/guzzle/pull/2950)\n\n## 7.4.0 - 2021-10-18\n\n### Added\n\n- Support PHP 8.1 [#2929](https://github.com/guzzle/guzzle/pull/2929), [#2939](https://github.com/guzzle/guzzle/pull/2939)\n- Support `psr/log` version 2 and 3 [#2943](https://github.com/guzzle/guzzle/pull/2943)\n\n### Fixed\n\n- Make sure we always call `restore_error_handler()` [#2915](https://github.com/guzzle/guzzle/pull/2915)\n- Fix progress parameter type compatibility between the cURL and stream handlers [#2936](https://github.com/guzzle/guzzle/pull/2936)\n- Throw `InvalidArgumentException` when an incorrect `headers` array is provided [#2916](https://github.com/guzzle/guzzle/pull/2916), [#2942](https://github.com/guzzle/guzzle/pull/2942)\n\n### Changed\n\n- Be more strict with types [#2914](https://github.com/guzzle/guzzle/pull/2914), [#2917](https://github.com/guzzle/guzzle/pull/2917), [#2919](https://github.com/guzzle/guzzle/pull/2919), [#2945](https://github.com/guzzle/guzzle/pull/2945)\n\n## 7.3.0 - 2021-03-23\n\n### Added\n\n- Support for DER and P12 certificates [#2413](https://github.com/guzzle/guzzle/pull/2413)\n- Support the cURL (http://) scheme for StreamHandler proxies [#2850](https://github.com/guzzle/guzzle/pull/2850)\n- Support for `guzzlehttp/psr7:^2.0` [#2878](https://github.com/guzzle/guzzle/pull/2878)\n\n### Fixed\n\n- Handle exceptions on invalid header consistently between PHP versions and handlers [#2872](https://github.com/guzzle/guzzle/pull/2872)\n\n## 7.2.0 - 2020-10-10\n\n### Added\n\n- Support for PHP 8 [#2712](https://github.com/guzzle/guzzle/pull/2712), [#2715](https://github.com/guzzle/guzzle/pull/2715), [#2789](https://github.com/guzzle/guzzle/pull/2789)\n- Support passing a body summarizer to the http errors middleware [#2795](https://github.com/guzzle/guzzle/pull/2795)\n\n### Fixed\n\n- Handle exceptions during response creation [#2591](https://github.com/guzzle/guzzle/pull/2591)\n- Fix CURLOPT_ENCODING not to be overwritten [#2595](https://github.com/guzzle/guzzle/pull/2595)\n- Make sure the Request always has a body object [#2804](https://github.com/guzzle/guzzle/pull/2804)\n\n### Changed\n\n- The `TooManyRedirectsException` has a response [#2660](https://github.com/guzzle/guzzle/pull/2660)\n- Avoid \"functions\" from dependencies [#2712](https://github.com/guzzle/guzzle/pull/2712)\n\n### Deprecated\n\n- Using environment variable GUZZLE_CURL_SELECT_TIMEOUT [#2786](https://github.com/guzzle/guzzle/pull/2786)\n\n## 7.1.1 - 2020-09-30\n\n### Fixed\n\n- Incorrect EOF detection for response body streams on Windows.\n\n### Changed\n\n- We dont connect curl `sink` on HEAD requests.\n- Removed some PHP 5 workarounds\n\n## 7.1.0 - 2020-09-22\n\n### Added\n\n- `GuzzleHttp\\MessageFormatterInterface`\n\n### Fixed\n\n- Fixed issue that caused cookies with no value not to be stored.\n- On redirects, we allow all safe methods like GET, HEAD and OPTIONS.\n- Fixed logging on empty responses.\n- Make sure MessageFormatter::format returns string\n\n### Deprecated\n\n- All functions in `GuzzleHttp` has been deprecated. Use static methods on `Utils` instead.\n- `ClientInterface::getConfig()`\n- `Client::getConfig()`\n- `Client::__call()`\n- `Utils::defaultCaBundle()`\n- `CurlFactory::LOW_CURL_VERSION_NUMBER`\n\n## 7.0.1 - 2020-06-27\n\n* Fix multiply defined functions fatal error [#2699](https://github.com/guzzle/guzzle/pull/2699)\n\n## 7.0.0 - 2020-06-27\n\nNo changes since 7.0.0-rc1.\n\n## 7.0.0-rc1 - 2020-06-15\n\n### Changed\n\n* Use error level for logging errors in Middleware [#2629](https://github.com/guzzle/guzzle/pull/2629)\n* Disabled IDN support by default and require ext-intl to use it [#2675](https://github.com/guzzle/guzzle/pull/2675)\n\n## 7.0.0-beta2 - 2020-05-25\n\n### Added\n\n* Using `Utils` class instead of functions in the `GuzzleHttp` namespace. [#2546](https://github.com/guzzle/guzzle/pull/2546)\n* `ClientInterface::MAJOR_VERSION` [#2583](https://github.com/guzzle/guzzle/pull/2583)\n\n### Changed\n\n* Avoid the `getenv` function when unsafe [#2531](https://github.com/guzzle/guzzle/pull/2531)\n* Added real client methods [#2529](https://github.com/guzzle/guzzle/pull/2529)\n* Avoid functions due to global install conflicts [#2546](https://github.com/guzzle/guzzle/pull/2546)\n* Use Symfony intl-idn polyfill [#2550](https://github.com/guzzle/guzzle/pull/2550)\n* Adding methods for HTTP verbs like `Client::get()`, `Client::head()`, `Client::patch()` etc [#2529](https://github.com/guzzle/guzzle/pull/2529)\n* `ConnectException` extends `TransferException` [#2541](https://github.com/guzzle/guzzle/pull/2541)\n* Updated the default User Agent to \"GuzzleHttp/7\" [#2654](https://github.com/guzzle/guzzle/pull/2654)\n\n### Fixed\n\n* Various intl icu issues [#2626](https://github.com/guzzle/guzzle/pull/2626)\n\n### Removed\n\n* Pool option `pool_size` [#2528](https://github.com/guzzle/guzzle/pull/2528)\n\n## 7.0.0-beta1 - 2019-12-30\n\nThe diff might look very big but 95% of Guzzle users will be able to upgrade without modification.\nPlease see [the upgrade document](UPGRADING.md) that describes all BC breaking changes.\n\n### Added\n\n* Implement PSR-18 and dropped PHP 5 support [#2421](https://github.com/guzzle/guzzle/pull/2421) [#2474](https://github.com/guzzle/guzzle/pull/2474)\n* PHP 7 types [#2442](https://github.com/guzzle/guzzle/pull/2442) [#2449](https://github.com/guzzle/guzzle/pull/2449) [#2466](https://github.com/guzzle/guzzle/pull/2466) [#2497](https://github.com/guzzle/guzzle/pull/2497) [#2499](https://github.com/guzzle/guzzle/pull/2499)\n* IDN support for redirects [2424](https://github.com/guzzle/guzzle/pull/2424)\n\n### Changed\n\n* Dont allow passing null as third argument to `BadResponseException::__construct()` [#2427](https://github.com/guzzle/guzzle/pull/2427)\n* Use SAPI constant instead of method call [#2450](https://github.com/guzzle/guzzle/pull/2450)\n* Use native function invocation [#2444](https://github.com/guzzle/guzzle/pull/2444)\n* Better defaults for PHP installations with old ICU lib [2454](https://github.com/guzzle/guzzle/pull/2454)\n* Added visibility to all constants [#2462](https://github.com/guzzle/guzzle/pull/2462)\n* Dont allow passing `null` as URI to `Client::request()` and `Client::requestAsync()` [#2461](https://github.com/guzzle/guzzle/pull/2461)\n* Widen the exception argument to throwable [#2495](https://github.com/guzzle/guzzle/pull/2495)\n\n### Fixed\n\n* Logging when Promise rejected with a string [#2311](https://github.com/guzzle/guzzle/pull/2311)\n\n### Removed\n\n* Class `SeekException` [#2162](https://github.com/guzzle/guzzle/pull/2162)\n* `RequestException::getResponseBodySummary()` [#2425](https://github.com/guzzle/guzzle/pull/2425)\n* `CookieJar::getCookieValue()` [#2433](https://github.com/guzzle/guzzle/pull/2433)\n* `uri_template()` and `UriTemplate` [#2440](https://github.com/guzzle/guzzle/pull/2440)\n* Request options `save_to` and `exceptions` [#2464](https://github.com/guzzle/guzzle/pull/2464)\n\n## 6.5.2 - 2019-12-23\n\n* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489)\n\n## 6.5.1 - 2019-12-21\n\n* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454)\n* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424)\n\n## 6.5.0 - 2019-12-07\n\n* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143)\n* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287)\n* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132)\n* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132)\n* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348)\n* Deprecated `ClientInterface::VERSION`\n\n## 6.4.1 - 2019-10-23\n\n* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that\n* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar`\n\n## 6.4.0 - 2019-10-23\n\n* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108)\n* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081)\n* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161)\n* Improvement: Added `GuzzleHttp\\Exception\\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163)\n* Improvement: Added `GuzzleHttp\\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242)\n* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284)\n* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273)\n* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335)\n* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362)\n\n## 6.3.3 - 2018-04-22\n\n* Fix: Default headers when decode_content is specified\n\n\n## 6.3.2 - 2018-03-26\n\n* Fix: Release process\n\n\n## 6.3.1 - 2018-03-26\n\n* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014)\n* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012)\n* Bug fix: Malformed domain that contains a \"/\" [#1999](https://github.com/guzzle/guzzle/pull/1999)\n* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998)\n* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953)\n* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915)\n* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916)\n\n+ Minor code cleanups, documentation fixes and clarifications.\n\n\n## 6.3.0 - 2017-06-22\n\n* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659)\n* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621)\n* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580)\n* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609)\n* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641)\n* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611)\n* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811)\n* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642)\n* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569)\n* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711)\n* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745)\n* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721)\n* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318)\n* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684)\n* Improvement:  \tUse `\\GuzzleHttp\\Promise\\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827)\n\n\n+ Minor code cleanups, documentation fixes and clarifications.\n\n## 6.2.3 - 2017-02-28\n\n* Fix deprecations with guzzle/psr7 version 1.4\n\n## 6.2.2 - 2016-10-08\n\n* Allow to pass nullable Response to delay callable\n* Only add scheme when host is present\n* Fix drain case where content-length is the literal string zero\n* Obfuscate in-URL credentials in exceptions\n\n## 6.2.1 - 2016-07-18\n\n* Address HTTP_PROXY security vulnerability, CVE-2016-5385:\n  https://httpoxy.org/\n* Fixing timeout bug with StreamHandler:\n  https://github.com/guzzle/guzzle/pull/1488\n* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when\n  a server does not honor `Connection: close`.\n* Ignore URI fragment when sending requests.\n\n## 6.2.0 - 2016-03-21\n\n* Feature: added `GuzzleHttp\\json_encode` and `GuzzleHttp\\json_decode`.\n  https://github.com/guzzle/guzzle/pull/1389\n* Bug fix: Fix sleep calculation when waiting for delayed requests.\n  https://github.com/guzzle/guzzle/pull/1324\n* Feature: More flexible history containers.\n  https://github.com/guzzle/guzzle/pull/1373\n* Bug fix: defer sink stream opening in StreamHandler.\n  https://github.com/guzzle/guzzle/pull/1377\n* Bug fix: do not attempt to escape cookie values.\n  https://github.com/guzzle/guzzle/pull/1406\n* Feature: report original content encoding and length on decoded responses.\n  https://github.com/guzzle/guzzle/pull/1409\n* Bug fix: rewind seekable request bodies before dispatching to cURL.\n  https://github.com/guzzle/guzzle/pull/1422\n* Bug fix: provide an empty string to `http_build_query` for HHVM workaround.\n  https://github.com/guzzle/guzzle/pull/1367\n\n## 6.1.1 - 2015-11-22\n\n* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler\n  https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4\n* Feature: HandlerStack is now more generic.\n  https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e\n* Bug fix: setting verify to false in the StreamHandler now disables peer\n  verification. https://github.com/guzzle/guzzle/issues/1256\n* Feature: Middleware now uses an exception factory, including more error\n  context. https://github.com/guzzle/guzzle/pull/1282\n* Feature: better support for disabled functions.\n  https://github.com/guzzle/guzzle/pull/1287\n* Bug fix: fixed regression where MockHandler was not using `sink`.\n  https://github.com/guzzle/guzzle/pull/1292\n\n## 6.1.0 - 2015-09-08\n\n* Feature: Added the `on_stats` request option to provide access to transfer\n  statistics for requests. https://github.com/guzzle/guzzle/pull/1202\n* Feature: Added the ability to persist session cookies in CookieJars.\n  https://github.com/guzzle/guzzle/pull/1195\n* Feature: Some compatibility updates for Google APP Engine\n  https://github.com/guzzle/guzzle/pull/1216\n* Feature: Added support for NO_PROXY to prevent the use of a proxy based on\n  a simple set of rules. https://github.com/guzzle/guzzle/pull/1197\n* Feature: Cookies can now contain square brackets.\n  https://github.com/guzzle/guzzle/pull/1237\n* Bug fix: Now correctly parsing `=` inside of quotes in Cookies.\n  https://github.com/guzzle/guzzle/pull/1232\n* Bug fix: Cusotm cURL options now correctly override curl options of the\n  same name. https://github.com/guzzle/guzzle/pull/1221\n* Bug fix: Content-Type header is now added when using an explicitly provided\n  multipart body. https://github.com/guzzle/guzzle/pull/1218\n* Bug fix: Now ignoring Set-Cookie headers that have no name.\n* Bug fix: Reason phrase is no longer cast to an int in some cases in the\n  cURL handler. https://github.com/guzzle/guzzle/pull/1187\n* Bug fix: Remove the Authorization header when redirecting if the Host\n  header changes. https://github.com/guzzle/guzzle/pull/1207\n* Bug fix: Cookie path matching fixes\n  https://github.com/guzzle/guzzle/issues/1129\n* Bug fix: Fixing the cURL `body_as_string` setting\n  https://github.com/guzzle/guzzle/pull/1201\n* Bug fix: quotes are no longer stripped when parsing cookies.\n  https://github.com/guzzle/guzzle/issues/1172\n* Bug fix: `form_params` and `query` now always uses the `&` separator.\n  https://github.com/guzzle/guzzle/pull/1163\n* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set.\n  https://github.com/guzzle/guzzle/pull/1189\n\n## 6.0.2 - 2015-07-04\n\n* Fixed a memory leak in the curl handlers in which references to callbacks\n  were not being removed by `curl_reset`.\n* Cookies are now extracted properly before redirects.\n* Cookies now allow more character ranges.\n* Decoded Content-Encoding responses are now modified to correctly reflect\n  their state if the encoding was automatically removed by a handler. This\n  means that the `Content-Encoding` header may be removed an the\n  `Content-Length` modified to reflect the message size after removing the\n  encoding.\n* Added a more explicit error message when trying to use `form_params` and\n  `multipart` in the same request.\n* Several fixes for HHVM support.\n* Functions are now conditionally required using an additional level of\n  indirection to help with global Composer installations.\n\n## 6.0.1 - 2015-05-27\n\n* Fixed a bug with serializing the `query` request option where the `&`\n  separator was missing.\n* Added a better error message for when `body` is provided as an array. Please\n  use `form_params` or `multipart` instead.\n* Various doc fixes.\n\n## 6.0.0 - 2015-05-26\n\n* See the UPGRADING.md document for more information.\n* Added `multipart` and `form_params` request options.\n* Added `synchronous` request option.\n* Added the `on_headers` request option.\n* Fixed `expect` handling.\n* No longer adding default middlewares in the client ctor. These need to be\n  present on the provided handler in order to work.\n* Requests are no longer initiated when sending async requests with the\n  CurlMultiHandler. This prevents unexpected recursion from requests completing\n  while ticking the cURL loop.\n* Removed the semantics of setting `default` to `true`. This is no longer\n  required now that the cURL loop is not ticked for async requests.\n* Added request and response logging middleware.\n* No longer allowing self signed certificates when using the StreamHandler.\n* Ensuring that `sink` is valid if saving to a file.\n* Request exceptions now include a \"handler context\" which provides handler\n  specific contextual information.\n* Added `GuzzleHttp\\RequestOptions` to allow request options to be applied\n  using constants.\n* `$maxHandles` has been removed from CurlMultiHandler.\n* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package.\n\n## 5.3.0 - 2015-05-19\n\n* Mock now supports `save_to`\n* Marked `AbstractRequestEvent::getTransaction()` as public.\n* Fixed a bug in which multiple headers using different casing would overwrite\n  previous headers in the associative array.\n* Added `Utils::getDefaultHandler()`\n* Marked `GuzzleHttp\\Client::getDefaultUserAgent` as deprecated.\n* URL scheme is now always lowercased.\n\n## 6.0.0-beta.1\n\n* Requires PHP >= 5.5\n* Updated to use PSR-7\n  * Requires immutable messages, which basically means an event based system\n    owned by a request instance is no longer possible.\n  * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7).\n  * Removed the dependency on `guzzlehttp/streams`. These stream abstractions\n    are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\\Psr7`\n    namespace.\n* Added middleware and handler system\n  * Replaced the Guzzle event and subscriber system with a middleware system.\n  * No longer depends on RingPHP, but rather places the HTTP handlers directly\n    in Guzzle, operating on PSR-7 messages.\n  * Retry logic is now encapsulated in `GuzzleHttp\\Middleware::retry`, which\n    means the `guzzlehttp/retry-subscriber` is now obsolete.\n  * Mocking responses is now handled using `GuzzleHttp\\Handler\\MockHandler`.\n* Asynchronous responses\n  * No longer supports the `future` request option to send an async request.\n    Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`,\n    `getAsync`, etc.).\n  * Utilizing `GuzzleHttp\\Promise` instead of React's promise library to avoid\n    recursion required by chaining and forwarding react promises. See\n    https://github.com/guzzle/promises\n  * Added `requestAsync` and `sendAsync` to send request asynchronously.\n  * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests\n    asynchronously.\n* Request options\n  * POST and form updates\n    * Added the `form_fields` and `form_files` request options.\n    * Removed the `GuzzleHttp\\Post` namespace.\n    * The `body` request option no longer accepts an array for POST requests.\n  * The `exceptions` request option has been deprecated in favor of the\n    `http_errors` request options.\n  * The `save_to` request option has been deprecated in favor of `sink` request\n    option.\n* Clients no longer accept an array of URI template string and variables for\n  URI variables. You will need to expand URI templates before passing them\n  into a client constructor or request method.\n* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are\n  now magic methods that will send synchronous requests.\n* Replaced `Utils.php` with plain functions in `functions.php`.\n* Removed `GuzzleHttp\\Collection`.\n* Removed `GuzzleHttp\\BatchResults`. Batched pool results are now returned as\n  an array.\n* Removed `GuzzleHttp\\Query`. Query string handling is now handled using an\n  associative array passed into the `query` request option. The query string\n  is serialized using PHP's `http_build_query`. If you need more control, you\n  can pass the query string in as a string.\n* `GuzzleHttp\\QueryParser` has been replaced with the\n  `GuzzleHttp\\Psr7\\parse_query`.\n\n## 5.2.0 - 2015-01-27\n\n* Added `AppliesHeadersInterface` to make applying headers to a request based\n  on the body more generic and not specific to `PostBodyInterface`.\n* Reduced the number of stack frames needed to send requests.\n* Nested futures are now resolved in the client rather than the RequestFsm\n* Finishing state transitions is now handled in the RequestFsm rather than the\n  RingBridge.\n* Added a guard in the Pool class to not use recursion for request retries.\n\n## 5.1.0 - 2014-12-19\n\n* Pool class no longer uses recursion when a request is intercepted.\n* The size of a Pool can now be dynamically adjusted using a callback.\n  See https://github.com/guzzle/guzzle/pull/943.\n* Setting a request option to `null` when creating a request with a client will\n  ensure that the option is not set. This allows you to overwrite default\n  request options on a per-request basis.\n  See https://github.com/guzzle/guzzle/pull/937.\n* Added the ability to limit which protocols are allowed for redirects by\n  specifying a `protocols` array in the `allow_redirects` request option.\n* Nested futures due to retries are now resolved when waiting for synchronous\n  responses. See https://github.com/guzzle/guzzle/pull/947.\n* `\"0\"` is now an allowed URI path. See\n  https://github.com/guzzle/guzzle/pull/935.\n* `Query` no longer typehints on the `$query` argument in the constructor,\n  allowing for strings and arrays.\n* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle\n  specific exceptions if necessary.\n\n## 5.0.3 - 2014-11-03\n\nThis change updates query strings so that they are treated as un-encoded values\nby default where the value represents an un-encoded value to send over the\nwire. A Query object then encodes the value before sending over the wire. This\nmeans that even value query string values (e.g., \":\") are url encoded. This\nmakes the Query class match PHP's http_build_query function. However, if you\nwant to send requests over the wire using valid query string characters that do\nnot need to be encoded, then you can provide a string to Url::setQuery() and\npass true as the second argument to specify that the query string is a raw\nstring that should not be parsed or encoded (unless a call to getQuery() is\nsubsequently made, forcing the query-string to be converted into a Query\nobject).\n\n## 5.0.2 - 2014-10-30\n\n* Added a trailing `\\r\\n` to multipart/form-data payloads. See\n  https://github.com/guzzle/guzzle/pull/871\n* Added a `GuzzleHttp\\Pool::send()` convenience method to match the docs.\n* Status codes are now returned as integers. See\n  https://github.com/guzzle/guzzle/issues/881\n* No longer overwriting an existing `application/x-www-form-urlencoded` header\n  when sending POST requests, allowing for customized headers. See\n  https://github.com/guzzle/guzzle/issues/877\n* Improved path URL serialization.\n\n  * No longer double percent-encoding characters in the path or query string if\n    they are already encoded.\n  * Now properly encoding the supplied path to a URL object, instead of only\n    encoding ' ' and '?'.\n  * Note: This has been changed in 5.0.3 to now encode query string values by\n    default unless the `rawString` argument is provided when setting the query\n    string on a URL: Now allowing many more characters to be present in the\n    query string without being percent encoded. See https://tools.ietf.org/html/rfc3986#appendix-A\n\n## 5.0.1 - 2014-10-16\n\nBugfix release.\n\n* Fixed an issue where connection errors still returned response object in\n  error and end events event though the response is unusable. This has been\n  corrected so that a response is not returned in the `getResponse` method of\n  these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867\n* Fixed an issue where transfer statistics were not being populated in the\n  RingBridge. https://github.com/guzzle/guzzle/issues/866\n\n## 5.0.0 - 2014-10-12\n\nAdding support for non-blocking responses and some minor API cleanup.\n\n### New Features\n\n* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`.\n* Added a public API for creating a default HTTP adapter.\n* Updated the redirect plugin to be non-blocking so that redirects are sent\n  concurrently. Other plugins like this can now be updated to be non-blocking.\n* Added a \"progress\" event so that you can get upload and download progress\n  events.\n* Added `GuzzleHttp\\Pool` which implements FutureInterface and transfers\n  requests concurrently using a capped pool size as efficiently as possible.\n* Added `hasListeners()` to EmitterInterface.\n* Removed `GuzzleHttp\\ClientInterface::sendAll` and marked\n  `GuzzleHttp\\Client::sendAll` as deprecated (it's still there, just not the\n  recommended way).\n\n### Breaking changes\n\nThe breaking changes in this release are relatively minor. The biggest thing to\nlook out for is that request and response objects no longer implement fluent\ninterfaces.\n\n* Removed the fluent interfaces (i.e., `return $this`) from requests,\n  responses, `GuzzleHttp\\Collection`, `GuzzleHttp\\Url`,\n  `GuzzleHttp\\Query`, `GuzzleHttp\\Post\\PostBody`, and\n  `GuzzleHttp\\Cookie\\SetCookie`. This blog post provides a good outline of\n  why I did this: https://ocramius.github.io/blog/fluent-interfaces-are-evil/.\n  This also makes the Guzzle message interfaces compatible with the current\n  PSR-7 message proposal.\n* Removed \"functions.php\", so that Guzzle is truly PSR-4 compliant. Except\n  for the HTTP request functions from function.php, these functions are now\n  implemented in `GuzzleHttp\\Utils` using camelCase. `GuzzleHttp\\json_decode`\n  moved to `GuzzleHttp\\Utils::jsonDecode`. `GuzzleHttp\\get_path` moved to\n  `GuzzleHttp\\Utils::getPath`. `GuzzleHttp\\set_path` moved to\n  `GuzzleHttp\\Utils::setPath`. `GuzzleHttp\\batch` should now be\n  `GuzzleHttp\\Pool::batch`, which returns an `objectStorage`. Using functions.php\n  caused problems for many users: they aren't PSR-4 compliant, require an\n  explicit include, and needed an if-guard to ensure that the functions are not\n  declared multiple times.\n* Rewrote adapter layer.\n    * Removing all classes from `GuzzleHttp\\Adapter`, these are now\n      implemented as callables that are stored in `GuzzleHttp\\Ring\\Client`.\n    * Removed the concept of \"parallel adapters\". Sending requests serially or\n      concurrently is now handled using a single adapter.\n    * Moved `GuzzleHttp\\Adapter\\Transaction` to `GuzzleHttp\\Transaction`. The\n      Transaction object now exposes the request, response, and client as public\n      properties. The getters and setters have been removed.\n* Removed the \"headers\" event. This event was only useful for changing the\n  body a response once the headers of the response were known. You can implement\n  a similar behavior in a number of ways. One example might be to use a\n  FnStream that has access to the transaction being sent. For example, when the\n  first byte is written, you could check if the response headers match your\n  expectations, and if so, change the actual stream body that is being\n  written to.\n* Removed the `asArray` parameter from\n  `GuzzleHttp\\Message\\MessageInterface::getHeader`. If you want to get a header\n  value as an array, then use the newly added `getHeaderAsArray()` method of\n  `MessageInterface`. This change makes the Guzzle interfaces compatible with\n  the PSR-7 interfaces.\n* `GuzzleHttp\\Message\\MessageFactory` no longer allows subclasses to add\n  custom request options using double-dispatch (this was an implementation\n  detail). Instead, you should now provide an associative array to the\n  constructor which is a mapping of the request option name mapping to a\n  function that applies the option value to a request.\n* Removed the concept of \"throwImmediately\" from exceptions and error events.\n  This control mechanism was used to stop a transfer of concurrent requests\n  from completing. This can now be handled by throwing the exception or by\n  cancelling a pool of requests or each outstanding future request individually.\n* Updated to \"GuzzleHttp\\Streams\" 3.0.\n    * `GuzzleHttp\\Stream\\StreamInterface::getContents()` no longer accepts a\n      `maxLen` parameter. This update makes the Guzzle streams project\n      compatible with the current PSR-7 proposal.\n    * `GuzzleHttp\\Stream\\Stream::__construct`,\n      `GuzzleHttp\\Stream\\Stream::factory`, and\n      `GuzzleHttp\\Stream\\Utils::create` no longer accept a size in the second\n      argument. They now accept an associative array of options, including the\n      \"size\" key and \"metadata\" key which can be used to provide custom metadata.\n\n## 4.2.2 - 2014-09-08\n\n* Fixed a memory leak in the CurlAdapter when reusing cURL handles.\n* No longer using `request_fulluri` in stream adapter proxies.\n* Relative redirects are now based on the last response, not the first response.\n\n## 4.2.1 - 2014-08-19\n\n* Ensuring that the StreamAdapter does not always add a Content-Type header\n* Adding automated github releases with a phar and zip\n\n## 4.2.0 - 2014-08-17\n\n* Now merging in default options using a case-insensitive comparison.\n  Closes https://github.com/guzzle/guzzle/issues/767\n* Added the ability to automatically decode `Content-Encoding` response bodies\n  using the `decode_content` request option. This is set to `true` by default\n  to decode the response body if it comes over the wire with a\n  `Content-Encoding`. Set this value to `false` to disable decoding the\n  response content, and pass a string to provide a request `Accept-Encoding`\n  header and turn on automatic response decoding. This feature now allows you\n  to pass an `Accept-Encoding` header in the headers of a request but still\n  disable automatic response decoding.\n  Closes https://github.com/guzzle/guzzle/issues/764\n* Added the ability to throw an exception immediately when transferring\n  requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760\n* Updating guzzlehttp/streams dependency to ~2.1\n* No longer utilizing the now deprecated namespaced methods from the stream\n  package.\n\n## 4.1.8 - 2014-08-14\n\n* Fixed an issue in the CurlFactory that caused setting the `stream=false`\n  request option to throw an exception.\n  See: https://github.com/guzzle/guzzle/issues/769\n* TransactionIterator now calls rewind on the inner iterator.\n  See: https://github.com/guzzle/guzzle/pull/765\n* You can now set the `Content-Type` header to `multipart/form-data`\n  when creating POST requests to force multipart bodies.\n  See https://github.com/guzzle/guzzle/issues/768\n\n## 4.1.7 - 2014-08-07\n\n* Fixed an error in the HistoryPlugin that caused the same request and response\n  to be logged multiple times when an HTTP protocol error occurs.\n* Ensuring that cURL does not add a default Content-Type when no Content-Type\n  has been supplied by the user. This prevents the adapter layer from modifying\n  the request that is sent over the wire after any listeners may have already\n  put the request in a desired state (e.g., signed the request).\n* Throwing an exception when you attempt to send requests that have the\n  \"stream\" set to true in parallel using the MultiAdapter.\n* Only calling curl_multi_select when there are active cURL handles. This was\n  previously changed and caused performance problems on some systems due to PHP\n  always selecting until the maximum select timeout.\n* Fixed a bug where multipart/form-data POST fields were not correctly\n  aggregated (e.g., values with \"&\").\n\n## 4.1.6 - 2014-08-03\n\n* Added helper methods to make it easier to represent messages as strings,\n  including getting the start line and getting headers as a string.\n\n## 4.1.5 - 2014-08-02\n\n* Automatically retrying cURL \"Connection died, retrying a fresh connect\"\n  errors when possible.\n* cURL implementation cleanup\n* Allowing multiple event subscriber listeners to be registered per event by\n  passing an array of arrays of listener configuration.\n\n## 4.1.4 - 2014-07-22\n\n* Fixed a bug that caused multi-part POST requests with more than one field to\n  serialize incorrectly.\n* Paths can now be set to \"0\"\n* `ResponseInterface::xml` now accepts a `libxml_options` option and added a\n  missing default argument that was required when parsing XML response bodies.\n* A `save_to` stream is now created lazily, which means that files are not\n  created on disk unless a request succeeds.\n\n## 4.1.3 - 2014-07-15\n\n* Various fixes to multipart/form-data POST uploads\n* Wrapping function.php in an if-statement to ensure Guzzle can be used\n  globally and in a Composer install\n* Fixed an issue with generating and merging in events to an event array\n* POST headers are only applied before sending a request to allow you to change\n  the query aggregator used before uploading\n* Added much more robust query string parsing\n* Fixed various parsing and normalization issues with URLs\n* Fixing an issue where multi-valued headers were not being utilized correctly\n  in the StreamAdapter\n\n## 4.1.2 - 2014-06-18\n\n* Added support for sending payloads with GET requests\n\n## 4.1.1 - 2014-06-08\n\n* Fixed an issue related to using custom message factory options in subclasses\n* Fixed an issue with nested form fields in a multi-part POST\n* Fixed an issue with using the `json` request option for POST requests\n* Added `ToArrayInterface` to `GuzzleHttp\\Cookie\\CookieJar`\n\n## 4.1.0 - 2014-05-27\n\n* Added a `json` request option to easily serialize JSON payloads.\n* Added a `GuzzleHttp\\json_decode()` wrapper to safely parse JSON.\n* Added `setPort()` and `getPort()` to `GuzzleHttp\\Message\\RequestInterface`.\n* Added the ability to provide an emitter to a client in the client constructor.\n* Added the ability to persist a cookie session using $_SESSION.\n* Added a trait that can be used to add event listeners to an iterator.\n* Removed request method constants from RequestInterface.\n* Fixed warning when invalid request start-lines are received.\n* Updated MessageFactory to work with custom request option methods.\n* Updated cacert bundle to latest build.\n\n4.0.2 (2014-04-16)\n------------------\n\n* Proxy requests using the StreamAdapter now properly use request_fulluri (#632)\n* Added the ability to set scalars as POST fields (#628)\n\n## 4.0.1 - 2014-04-04\n\n* The HTTP status code of a response is now set as the exception code of\n  RequestException objects.\n* 303 redirects will now correctly switch from POST to GET requests.\n* The default parallel adapter of a client now correctly uses the MultiAdapter.\n* HasDataTrait now initializes the internal data array as an empty array so\n  that the toArray() method always returns an array.\n\n## 4.0.0 - 2014-03-29\n\n* For information on changes and upgrading, see:\n  https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40\n* Added `GuzzleHttp\\batch()` as a convenience function for sending requests in\n  parallel without needing to write asynchronous code.\n* Restructured how events are added to `GuzzleHttp\\ClientInterface::sendAll()`.\n  You can now pass a callable or an array of associative arrays where each\n  associative array contains the \"fn\", \"priority\", and \"once\" keys.\n\n## 4.0.0.rc-2 - 2014-03-25\n\n* Removed `getConfig()` and `setConfig()` from clients to avoid confusion\n  around whether things like base_url, message_factory, etc. should be able to\n  be retrieved or modified.\n* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface\n* functions.php functions were renamed using snake_case to match PHP idioms\n* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and\n  `GUZZLE_CURL_SELECT_TIMEOUT` environment variables\n* Added the ability to specify custom `sendAll()` event priorities\n* Added the ability to specify custom stream context options to the stream\n  adapter.\n* Added a functions.php function for `get_path()` and `set_path()`\n* CurlAdapter and MultiAdapter now use a callable to generate curl resources\n* MockAdapter now properly reads a body and emits a `headers` event\n* Updated Url class to check if a scheme and host are set before adding \":\"\n  and \"//\". This allows empty Url (e.g., \"\") to be serialized as \"\".\n* Parsing invalid XML no longer emits warnings\n* Curl classes now properly throw AdapterExceptions\n* Various performance optimizations\n* Streams are created with the faster `Stream\\create()` function\n* Marked deprecation_proxy() as internal\n* Test server is now a collection of static methods on a class\n\n## 4.0.0-rc.1 - 2014-03-15\n\n* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40\n\n## 3.8.1 - 2014-01-28\n\n* Bug: Always using GET requests when redirecting from a 303 response\n* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in\n  `Guzzle\\Http\\ClientInterface::setSslVerification()`\n* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL\n* Bug: The body of a request can now be set to `\"0\"`\n* Sending PHP stream requests no longer forces `HTTP/1.0`\n* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of\n  each sub-exception\n* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than\n  clobbering everything).\n* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators)\n* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`.\n  For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`.\n* Now properly escaping the regular expression delimiter when matching Cookie domains.\n* Network access is now disabled when loading XML documents\n\n## 3.8.0 - 2013-12-05\n\n* Added the ability to define a POST name for a file\n* JSON response parsing now properly walks additionalProperties\n* cURL error code 18 is now retried automatically in the BackoffPlugin\n* Fixed a cURL error when URLs contain fragments\n* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were\n  CurlExceptions\n* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e)\n* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS`\n* Fixed a bug that was encountered when parsing empty header parameters\n* UriTemplate now has a `setRegex()` method to match the docs\n* The `debug` request parameter now checks if it is truthy rather than if it exists\n* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin\n* Added the ability to combine URLs using strict RFC 3986 compliance\n* Command objects can now return the validation errors encountered by the command\n* Various fixes to cache revalidation (#437 and 29797e5)\n* Various fixes to the AsyncPlugin\n* Cleaned up build scripts\n\n## 3.7.4 - 2013-10-02\n\n* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430)\n* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp\n  (see https://github.com/aws/aws-sdk-php/issues/147)\n* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots\n* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420)\n* Updated the bundled cacert.pem (#419)\n* OauthPlugin now supports adding authentication to headers or query string (#425)\n\n## 3.7.3 - 2013-09-08\n\n* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and\n  `CommandTransferException`.\n* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description\n* Schemas are only injected into response models when explicitly configured.\n* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of\n  an EntityBody.\n* Bug fix: ChunkedIterator can now properly chunk a \\Traversable as well as an \\Iterator.\n* Bug fix: FilterIterator now relies on `\\Iterator` instead of `\\Traversable`.\n* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody()\n* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin\n* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests\n* Bug fix: Properly parsing headers that contain commas contained in quotes\n* Bug fix: mimetype guessing based on a filename is now case-insensitive\n\n## 3.7.2 - 2013-08-02\n\n* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander\n  See https://github.com/guzzle/guzzle/issues/371\n* Bug fix: Cookie domains are now matched correctly according to RFC 6265\n  See https://github.com/guzzle/guzzle/issues/377\n* Bug fix: GET parameters are now used when calculating an OAuth signature\n* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted\n* `Guzzle\\Common\\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched\n* `Guzzle\\Http\\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input.\n  See https://github.com/guzzle/guzzle/issues/379\n* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See\n  https://github.com/guzzle/guzzle/pull/380\n* cURL multi cleanup and optimizations\n\n## 3.7.1 - 2013-07-05\n\n* Bug fix: Setting default options on a client now works\n* Bug fix: Setting options on HEAD requests now works. See #352\n* Bug fix: Moving stream factory before send event to before building the stream. See #353\n* Bug fix: Cookies no longer match on IP addresses per RFC 6265\n* Bug fix: Correctly parsing header parameters that are in `<>` and quotes\n* Added `cert` and `ssl_key` as request options\n* `Host` header can now diverge from the host part of a URL if the header is set manually\n* `Guzzle\\Service\\Command\\LocationVisitor\\Request\\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter\n* OAuth parameters are only added via the plugin if they aren't already set\n* Exceptions are now thrown when a URL cannot be parsed\n* Returning `false` if `Guzzle\\Http\\EntityBody::getContentMd5()` fails\n* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin\n\n## 3.7.0 - 2013-06-10\n\n* See UPGRADING.md for more information on how to upgrade.\n* Requests now support the ability to specify an array of $options when creating a request to more easily modify a\n  request. You can pass a 'request.options' configuration setting to a client to apply default request options to\n  every request created by a client (e.g. default query string variables, headers, curl options, etc.).\n* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\\Guzzle`.\n  See `Guzzle\\Http\\StaticClient::mount`.\n* Added `command.request_options` to `Guzzle\\Service\\Command\\AbstractCommand` to pass request options to requests\n      created by a command (e.g. custom headers, query string variables, timeout settings, etc.).\n* Stream size in `Guzzle\\Stream\\PhpStreamRequestFactory` will now be set if Content-Length is returned in the\n  headers of a response\n* Added `Guzzle\\Common\\Collection::setPath($path, $value)` to set a value into an array using a nested key\n  (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`)\n* ServiceBuilders now support storing and retrieving arbitrary data\n* CachePlugin can now purge all resources for a given URI\n* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource\n* CachePlugin now uses the Vary header to determine if a resource is a cache hit\n* `Guzzle\\Http\\Message\\Response` now implements `\\Serializable`\n* Added `Guzzle\\Cache\\CacheAdapterFactory::fromCache()` to more easily create cache adapters\n* `Guzzle\\Service\\ClientInterface::execute()` now accepts an array, single command, or Traversable\n* Fixed a bug in `Guzzle\\Http\\Message\\Header\\Link::addLink()`\n* Better handling of calculating the size of a stream in `Guzzle\\Stream\\Stream` using fstat() and caching the size\n* `Guzzle\\Common\\Exception\\ExceptionCollection` now creates a more readable exception message\n* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older\n  Symfony users can still use the old version of Monolog.\n* Fixing BC break: Added the implementation back in for `Guzzle\\Http\\Message\\AbstractMessage::getTokenizedHeader()`.\n  Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`.\n* Several performance improvements to `Guzzle\\Common\\Collection`\n* Added an `$options` argument to the end of the following methods of `Guzzle\\Http\\ClientInterface`:\n  createRequest, head, delete, put, patch, post, options, prepareRequest\n* Added an `$options` argument to the end of `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface::createRequest()`\n* Added an `applyOptions()` method to `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface`\n* Changed `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $body = null)` to\n  `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a\n  resource, string, or EntityBody into the $options parameter to specify the download location of the response.\n* Changed `Guzzle\\Common\\Collection::__construct($data)` to no longer accepts a null value for `$data` but a\n  default `array()`\n* Added `Guzzle\\Stream\\StreamInterface::isRepeatable`\n* Removed `Guzzle\\Http\\ClientInterface::setDefaultHeaders(). Use\n  $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or\n  $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`.\n* Removed `Guzzle\\Http\\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`.\n* Removed `Guzzle\\Http\\ClientInterface::expandTemplate()`\n* Removed `Guzzle\\Http\\ClientInterface::setRequestFactory()`\n* Removed `Guzzle\\Http\\ClientInterface::getCurlMulti()`\n* Removed `Guzzle\\Http\\Message\\RequestInterface::canCache`\n* Removed `Guzzle\\Http\\Message\\RequestInterface::setIsRedirect`\n* Removed `Guzzle\\Http\\Message\\RequestInterface::isRedirect`\n* Made `Guzzle\\Http\\Client::expandTemplate` and `getUriTemplate` protected methods.\n* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting\n  `Guzzle\\Common\\Version::$emitWarnings` to true.\n* Marked `Guzzle\\Http\\Message\\Request::isResponseBodyRepeatable()` as deprecated. Use\n      `$request->getResponseBody()->isRepeatable()` instead.\n* Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use\n  `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n* Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use\n  `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n* Marked `Guzzle\\Http\\Message\\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.\n* Marked `Guzzle\\Http\\Message\\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.\n* Marked `Guzzle\\Cache\\CacheAdapterFactory::factory()` as deprecated\n* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand.\n  These will work through Guzzle 4.0\n* Marked 'request.params' for `Guzzle\\Http\\Client` as deprecated. Use [request.options][params].\n* Marked `Guzzle\\Service\\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\\Service\\Client.\n* Marked `Guzzle\\Service\\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`.\n* Marked `Guzzle\\Service\\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`.\n* Marked `Guzzle\\Parser\\Url\\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.\n* Marked `Guzzle\\Common\\Collection::inject()` as deprecated.\n* Marked `Guzzle\\Plugin\\CurlAuth\\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');`\n* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a\n  CacheStorageInterface. These two objects and interface will be removed in a future version.\n* Always setting X-cache headers on cached responses\n* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin\n* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface\n  $request, Response $response);`\n* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`\n* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`\n* Added `CacheStorageInterface::purge($url)`\n* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin\n  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,\n  CanCacheStrategyInterface $canCache = null)`\n* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`\n\n## 3.6.0 - 2013-05-29\n\n* ServiceDescription now implements ToArrayInterface\n* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters\n* Guzzle can now correctly parse incomplete URLs\n* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.\n* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution\n* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().\n* Specific header implementations can be created for complex headers. When a message creates a header, it uses a\n  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and\n  CacheControl header implementation.\n* Removed from interface: Guzzle\\Http\\ClientInterface::setUriTemplate\n* Removed from interface: Guzzle\\Http\\ClientInterface::setCurlMulti()\n* Removed Guzzle\\Http\\Message\\Request::receivedRequestHeader() and implemented this functionality in\n  Guzzle\\Http\\Curl\\RequestMediator\n* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.\n* Removed the optional $tryChunkedTransfer option from Guzzle\\Http\\Message\\EntityEnclosingRequestInterface\n* Removed the $asObjects argument from Guzzle\\Http\\Message\\MessageInterface::getHeaders()\n* Removed Guzzle\\Parser\\ParserRegister::get(). Use getParser()\n* Removed Guzzle\\Parser\\ParserRegister::set(). Use registerParser().\n* All response header helper functions return a string rather than mixing Header objects and strings inconsistently\n* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle\n  directly via interfaces\n* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist\n  but are a no-op until removed.\n* Most classes that used to require a `Guzzle\\Service\\Command\\CommandInterface` typehint now request a\n  `Guzzle\\Service\\Command\\ArrayCommandInterface`.\n* Added `Guzzle\\Http\\Message\\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response\n  on a request while the request is still being transferred\n* The ability to case-insensitively search for header values\n* Guzzle\\Http\\Message\\Header::hasExactHeader\n* Guzzle\\Http\\Message\\Header::raw. Use getAll()\n* Deprecated cache control specific methods on Guzzle\\Http\\Message\\AbstractMessage. Use the CacheControl header object\n  instead.\n* `Guzzle\\Service\\Command\\CommandInterface` now extends from ToArrayInterface and ArrayAccess\n* Added the ability to cast Model objects to a string to view debug information.\n\n## 3.5.0 - 2013-05-13\n\n* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times\n* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove\n  itself from the EventDispatcher)\n* Bug: `Guzzle\\Log\\MessageFormatter` now properly writes \"total_time\" and \"connect_time\" values\n* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too\n* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a\n  non-existent key\n* Bug: All __call() method arguments are now required (helps with mocking frameworks)\n* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference\n  to help with refcount based garbage collection of resources created by sending a request\n* Deprecating ZF1 cache and log adapters. These will be removed in the next major version.\n* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the\n  HistoryPlugin for a history.\n* Added a `responseBody` alias for the `response_body` location\n* Refactored internals to no longer rely on Response::getRequest()\n* HistoryPlugin can now be cast to a string\n* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests\n  and responses that are sent over the wire\n* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects\n\n## 3.4.3 - 2013-04-30\n\n* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response\n* Added a check to re-extract the temp cacert bundle from the phar before sending each request\n\n## 3.4.2 - 2013-04-29\n\n* Bug fix: Stream objects now work correctly with \"a\" and \"a+\" modes\n* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present\n* Bug fix: AsyncPlugin no longer forces HEAD requests\n* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter\n* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails\n* Setting a response on a request will write to the custom request body from the response body if one is specified\n* LogPlugin now writes to php://output when STDERR is undefined\n* Added the ability to set multiple POST files for the same key in a single call\n* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default\n* Added the ability to queue CurlExceptions to the MockPlugin\n* Cleaned up how manual responses are queued on requests (removed \"queued_response\" and now using request.before_send)\n* Configuration loading now allows remote files\n\n## 3.4.1 - 2013-04-16\n\n* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti\n  handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost.\n* Exceptions are now properly grouped when sending requests in parallel\n* Redirects are now properly aggregated when a multi transaction fails\n* Redirects now set the response on the original object even in the event of a failure\n* Bug fix: Model names are now properly set even when using $refs\n* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax\n* Added support for oauth_callback in OAuth signatures\n* Added support for oauth_verifier in OAuth signatures\n* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection\n\n## 3.4.0 - 2013-04-11\n\n* Bug fix: URLs are now resolved correctly based on https://tools.ietf.org/html/rfc3986#section-5.2. #289\n* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289\n* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263\n* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264.\n* Bug fix: Added `number` type to service descriptions.\n* Bug fix: empty parameters are removed from an OAuth signature\n* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header\n* Bug fix: Fixed \"array to string\" error when validating a union of types in a service description\n* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream\n* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin.\n* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs.\n* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections.\n* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if\n  the Content-Type can be determined based on the entity body or the path of the request.\n* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder.\n* Added support for a PSR-3 LogAdapter.\n* Added a `command.after_prepare` event\n* Added `oauth_callback` parameter to the OauthPlugin\n* Added the ability to create a custom stream class when using a stream factory\n* Added a CachingEntityBody decorator\n* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized.\n* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar.\n* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies\n* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This\n  means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use\n  POST fields or files (the latter is only used when emulating a form POST in the browser).\n* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest\n\n## 3.3.1 - 2013-03-10\n\n* Added the ability to create PHP streaming responses from HTTP requests\n* Bug fix: Running any filters when parsing response headers with service descriptions\n* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing\n* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across\n  response location visitors.\n* Bug fix: Removed the possibility of creating configuration files with circular dependencies\n* RequestFactory::create() now uses the key of a POST file when setting the POST file name\n* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set\n\n## 3.3.0 - 2013-03-03\n\n* A large number of performance optimizations have been made\n* Bug fix: Added 'wb' as a valid write mode for streams\n* Bug fix: `Guzzle\\Http\\Message\\Response::json()` now allows scalar values to be returned\n* Bug fix: Fixed bug in `Guzzle\\Http\\Message\\Response` where wrapping quotes were stripped from `getEtag()`\n* BC: Removed `Guzzle\\Http\\Utils` class\n* BC: Setting a service description on a client will no longer modify the client's command factories.\n* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using\n  the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'\n* BC: `Guzzle\\Stream\\Stream::getWrapper()` and `Guzzle\\Stream\\Stream::getSteamType()` are no longer converted to\n  lowercase\n* Operation parameter objects are now lazy loaded internally\n* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses\n* Added support for instantiating responseType=class responseClass classes. Classes must implement\n  `Guzzle\\Service\\Command\\ResponseClassInterface`\n* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These\n  additional properties also support locations and can be used to parse JSON responses where the outermost part of the\n  JSON is an array\n* Added support for nested renaming of JSON models (rename sentAs to name)\n* CachePlugin\n    * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error\n    * Debug headers can now added to cached response in the CachePlugin\n\n## 3.2.0 - 2013-02-14\n\n* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients.\n* URLs with no path no longer contain a \"/\" by default\n* Guzzle\\Http\\QueryString does no longer manages the leading \"?\". This is now handled in Guzzle\\Http\\Url.\n* BadResponseException no longer includes the full request and response message\n* Adding setData() to Guzzle\\Service\\Description\\ServiceDescriptionInterface\n* Adding getResponseBody() to Guzzle\\Http\\Message\\RequestInterface\n* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription\n* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list\n* xmlEncoding can now be customized for the XML declaration of a XML service description operation\n* Guzzle\\Http\\QueryString now uses Guzzle\\Http\\QueryAggregator\\QueryAggregatorInterface objects to add custom value\n  aggregation and no longer uses callbacks\n* The URL encoding implementation of Guzzle\\Http\\QueryString can now be customized\n* Bug fix: Filters were not always invoked for array service description parameters\n* Bug fix: Redirects now use a target response body rather than a temporary response body\n* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded\n* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives\n\n## 3.1.2 - 2013-01-27\n\n* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the\n  response body. For example, the XmlVisitor now parses the XML response into an array in the before() method.\n* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent\n* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444)\n* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse()\n* Setting default headers on a client after setting the user-agent will not erase the user-agent setting\n\n## 3.1.1 - 2013-01-20\n\n* Adding wildcard support to Guzzle\\Common\\Collection::getPath()\n* Adding alias support to ServiceBuilder configs\n* Adding Guzzle\\Service\\Resource\\CompositeResourceIteratorFactory and cleaning up factory interface\n\n## 3.1.0 - 2013-01-12\n\n* BC: CurlException now extends from RequestException rather than BadResponseException\n* BC: Renamed Guzzle\\Plugin\\Cache\\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse()\n* Added getData to ServiceDescriptionInterface\n* Added context array to RequestInterface::setState()\n* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\\Http\n* Bug: Adding required content-type when JSON request visitor adds JSON to a command\n* Bug: Fixing the serialization of a service description with custom data\n* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing\n  an array of successful and failed responses\n* Moved getPath from Guzzle\\Service\\Resource\\Model to Guzzle\\Common\\Collection\n* Added Guzzle\\Http\\IoEmittingEntityBody\n* Moved command filtration from validators to location visitors\n* Added `extends` attributes to service description parameters\n* Added getModels to ServiceDescriptionInterface\n\n## 3.0.7 - 2012-12-19\n\n* Fixing phar detection when forcing a cacert to system if null or true\n* Allowing filename to be passed to `Guzzle\\Http\\Message\\Request::setResponseBody()`\n* Cleaning up `Guzzle\\Common\\Collection::inject` method\n* Adding a response_body location to service descriptions\n\n## 3.0.6 - 2012-12-09\n\n* CurlMulti performance improvements\n* Adding setErrorResponses() to Operation\n* composer.json tweaks\n\n## 3.0.5 - 2012-11-18\n\n* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin\n* Bug: Response body can now be a string containing \"0\"\n* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert\n* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs\n* Added support for XML attributes in service description responses\n* DefaultRequestSerializer now supports array URI parameter values for URI template expansion\n* Added better mimetype guessing to requests and post files\n\n## 3.0.4 - 2012-11-11\n\n* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value\n* Bug: Cookies can now be added that have a name, domain, or value set to \"0\"\n* Bug: Using the system cacert bundle when using the Phar\n* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures\n* Enhanced cookie jar de-duplication\n* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added\n* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies\n* Added the ability to create any sort of hash for a stream rather than just an MD5 hash\n\n## 3.0.3 - 2012-11-04\n\n* Implementing redirects in PHP rather than cURL\n* Added PECL URI template extension and using as default parser if available\n* Bug: Fixed Content-Length parsing of Response factory\n* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams.\n* Adding ToArrayInterface throughout library\n* Fixing OauthPlugin to create unique nonce values per request\n\n## 3.0.2 - 2012-10-25\n\n* Magic methods are enabled by default on clients\n* Magic methods return the result of a command\n* Service clients no longer require a base_url option in the factory\n* Bug: Fixed an issue with URI templates where null template variables were being expanded\n\n## 3.0.1 - 2012-10-22\n\n* Models can now be used like regular collection objects by calling filter, map, etc.\n* Models no longer require a Parameter structure or initial data in the constructor\n* Added a custom AppendIterator to get around a PHP bug with the `\\AppendIterator`\n\n## 3.0.0 - 2012-10-15\n\n* Rewrote service description format to be based on Swagger\n    * Now based on JSON schema\n    * Added nested input structures and nested response models\n    * Support for JSON and XML input and output models\n    * Renamed `commands` to `operations`\n    * Removed dot class notation\n    * Removed custom types\n* Broke the project into smaller top-level namespaces to be more component friendly\n* Removed support for XML configs and descriptions. Use arrays or JSON files.\n* Removed the Validation component and Inspector\n* Moved all cookie code to Guzzle\\Plugin\\Cookie\n* Magic methods on a Guzzle\\Service\\Client now return the command un-executed.\n* Calling getResult() or getResponse() on a command will lazily execute the command if needed.\n* Now shipping with cURL's CA certs and using it by default\n* Added previousResponse() method to response objects\n* No longer sending Accept and Accept-Encoding headers on every request\n* Only sending an Expect header by default when a payload is greater than 1MB\n* Added/moved client options:\n    * curl.blacklist to curl.option.blacklist\n    * Added ssl.certificate_authority\n* Added a Guzzle\\Iterator component\n* Moved plugins from Guzzle\\Http\\Plugin to Guzzle\\Plugin\n* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin)\n* Added a more robust caching plugin\n* Added setBody to response objects\n* Updating LogPlugin to use a more flexible MessageFormatter\n* Added a completely revamped build process\n* Cleaning up Collection class and removing default values from the get method\n* Fixed ZF2 cache adapters\n\n## 2.8.8 - 2012-10-15\n\n* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did\n\n## 2.8.7 - 2012-09-30\n\n* Bug: Fixed config file aliases for JSON includes\n* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests\n* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload\n* Bug: Hardening request and response parsing to account for missing parts\n* Bug: Fixed PEAR packaging\n* Bug: Fixed Request::getInfo\n* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail\n* Adding the ability for the namespace Iterator factory to look in multiple directories\n* Added more getters/setters/removers from service descriptions\n* Added the ability to remove POST fields from OAuth signatures\n* OAuth plugin now supports 2-legged OAuth\n\n## 2.8.6 - 2012-09-05\n\n* Added the ability to modify and build service descriptions\n* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command\n* Added a `json` parameter location\n* Now allowing dot notation for classes in the CacheAdapterFactory\n* Using the union of two arrays rather than an array_merge when extending service builder services and service params\n* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references\n  in service builder config files.\n* Services defined in two different config files that include one another will by default replace the previously\n  defined service, but you can now create services that extend themselves and merge their settings over the previous\n* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like\n  '_default' with a default JSON configuration file.\n\n## 2.8.5 - 2012-08-29\n\n* Bug: Suppressed empty arrays from URI templates\n* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching\n* Added support for HTTP responses that do not contain a reason phrase in the start-line\n* AbstractCommand commands are now invokable\n* Added a way to get the data used when signing an Oauth request before a request is sent\n\n## 2.8.4 - 2012-08-15\n\n* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin\n* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable.\n* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\\Common\\Stream\n* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream\n* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5())\n* Added additional response status codes\n* Removed SSL information from the default User-Agent header\n* DELETE requests can now send an entity body\n* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries\n* Added the ability of the MockPlugin to consume mocked request bodies\n* LogPlugin now exposes request and response objects in the extras array\n\n## 2.8.3 - 2012-07-30\n\n* Bug: Fixed a case where empty POST requests were sent as GET requests\n* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body\n* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new\n* Added multiple inheritance to service description commands\n* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()`\n* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything\n* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles\n\n## 2.8.2 - 2012-07-24\n\n* Bug: Query string values set to 0 are no longer dropped from the query string\n* Bug: A Collection object is no longer created each time a call is made to `Guzzle\\Service\\Command\\AbstractCommand::getRequestHeaders()`\n* Bug: `+` is now treated as an encoded space when parsing query strings\n* QueryString and Collection performance improvements\n* Allowing dot notation for class paths in filters attribute of a service descriptions\n\n## 2.8.1 - 2012-07-16\n\n* Loosening Event Dispatcher dependency\n* POST redirects can now be customized using CURLOPT_POSTREDIR\n\n## 2.8.0 - 2012-07-15\n\n* BC: Guzzle\\Http\\Query\n    * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl)\n    * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding()\n    * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool)\n    * Changed the aggregation functions of QueryString to be static methods\n    * Can now use fromString() with querystrings that have a leading ?\n* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters\n* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body\n* Cookies are no longer URL decoded by default\n* Bug: URI template variables set to null are no longer expanded\n\n## 2.7.2 - 2012-07-02\n\n* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\\Http\\Parser to Guzzle\\Parser.\n* BC: Removing Guzzle\\Common\\Batch\\Batch::count() and replacing it with isEmpty()\n* CachePlugin now allows for a custom request parameter function to check if a request can be cached\n* Bug fix: CachePlugin now only caches GET and HEAD requests by default\n* Bug fix: Using header glue when transferring headers over the wire\n* Allowing deeply nested arrays for composite variables in URI templates\n* Batch divisors can now return iterators or arrays\n\n## 2.7.1 - 2012-06-26\n\n* Minor patch to update version number in UA string\n* Updating build process\n\n## 2.7.0 - 2012-06-25\n\n* BC: Inflection classes moved to Guzzle\\Inflection. No longer static methods. Can now inject custom inflectors into classes.\n* BC: Removed magic setX methods from commands\n* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method\n* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable.\n* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity)\n* Guzzle\\Service\\Resource\\ResourceIteratorApplyBatched now internally uses the Guzzle\\Common\\Batch namespace\n* Added Guzzle\\Service\\Plugin namespace and a PluginCollectionPlugin\n* Added the ability to set POST fields and files in a service description\n* Guzzle\\Http\\EntityBody::factory() now accepts objects with a __toString() method\n* Adding a command.before_prepare event to clients\n* Added BatchClosureTransfer and BatchClosureDivisor\n* BatchTransferException now includes references to the batch divisor and transfer strategies\n* Fixed some tests so that they pass more reliably\n* Added Guzzle\\Common\\Log\\ArrayLogAdapter\n\n## 2.6.6 - 2012-06-10\n\n* BC: Removing Guzzle\\Http\\Plugin\\BatchQueuePlugin\n* BC: Removing Guzzle\\Service\\Command\\CommandSet\n* Adding generic batching system (replaces the batch queue plugin and command set)\n* Updating ZF cache and log adapters and now using ZF's composer repository\n* Bug: Setting the name of each ApiParam when creating through an ApiCommand\n* Adding result_type, result_doc, deprecated, and doc_url to service descriptions\n* Bug: Changed the default cookie header casing back to 'Cookie'\n\n## 2.6.5 - 2012-06-03\n\n* BC: Renaming Guzzle\\Http\\Message\\RequestInterface::getResourceUri() to getResource()\n* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from\n* BC: Guzzle\\Http\\Cookie is now used to manage Set-Cookie data, not Cookie data\n* BC: Renaming methods in the CookieJarInterface\n* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations\n* Making the default glue for HTTP headers ';' instead of ','\n* Adding a removeValue to Guzzle\\Http\\Message\\Header\n* Adding getCookies() to request interface.\n* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber()\n\n## 2.6.4 - 2012-05-30\n\n* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class.\n* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand\n* Bug: Fixing magic method command calls on clients\n* Bug: Email constraint only validates strings\n* Bug: Aggregate POST fields when POST files are present in curl handle\n* Bug: Fixing default User-Agent header\n* Bug: Only appending or prepending parameters in commands if they are specified\n* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes\n* Allowing the use of dot notation for class namespaces when using instance_of constraint\n* Added any_match validation constraint\n* Added an AsyncPlugin\n* Passing request object to the calculateWait method of the ExponentialBackoffPlugin\n* Allowing the result of a command object to be changed\n* Parsing location and type sub values when instantiating a service description rather than over and over at runtime\n\n## 2.6.3 - 2012-05-23\n\n* [BC] Guzzle\\Common\\FromConfigInterface no longer requires any config options.\n* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields.\n* You can now use an array of data when creating PUT request bodies in the request factory.\n* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable.\n* [Http] Adding support for Content-Type in multipart POST uploads per upload\n* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1])\n* Adding more POST data operations for easier manipulation of POST data.\n* You can now set empty POST fields.\n* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files.\n* Split the Guzzle\\Service\\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate.\n* CS updates\n\n## 2.6.2 - 2012-05-19\n\n* [Http] Better handling of nested scope requests in CurlMulti.  Requests are now always prepares in the send() method rather than the addRequest() method.\n\n## 2.6.1 - 2012-05-19\n\n* [BC] Removing 'path' support in service descriptions.  Use 'uri'.\n* [BC] Guzzle\\Service\\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache.\n* [BC] Removing Guzzle\\Common\\NullObject.  Use https://github.com/mtdowling/NullObject if you need it.\n* [BC] Removing Guzzle\\Common\\XmlElement.\n* All commands, both dynamic and concrete, have ApiCommand objects.\n* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits.\n* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored.\n* Making the method signature of Guzzle\\Service\\Builder\\ServiceBuilder::factory more flexible.\n\n## 2.6.0 - 2012-05-15\n\n* [BC] Moving Guzzle\\Service\\Builder to Guzzle\\Service\\Builder\\ServiceBuilder\n* [BC] Executing a Command returns the result of the command rather than the command\n* [BC] Moving all HTTP parsing logic to Guzzle\\Http\\Parsers. Allows for faster C implementations if needed.\n* [BC] Changing the Guzzle\\Http\\Message\\Response::setProtocol() method to accept a protocol and version in separate args.\n* [BC] Moving ResourceIterator* to Guzzle\\Service\\Resource\n* [BC] Completely refactored ResourceIterators to iterate over a cloned command object\n* [BC] Moved Guzzle\\Http\\UriTemplate to Guzzle\\Http\\Parser\\UriTemplate\\UriTemplate\n* [BC] Guzzle\\Guzzle is now deprecated\n* Moving Guzzle\\Common\\Guzzle::inject to Guzzle\\Common\\Collection::inject\n* Adding Guzzle\\Version class to give version information about Guzzle\n* Adding Guzzle\\Http\\Utils class to provide getDefaultUserAgent() and getHttpDate()\n* Adding Guzzle\\Curl\\CurlVersion to manage caching curl_version() data\n* ServiceDescription and ServiceBuilder are now cacheable using similar configs\n* Changing the format of XML and JSON service builder configs.  Backwards compatible.\n* Cleaned up Cookie parsing\n* Trimming the default Guzzle User-Agent header\n* Adding a setOnComplete() method to Commands that is called when a command completes\n* Keeping track of requests that were mocked in the MockPlugin\n* Fixed a caching bug in the CacheAdapterFactory\n* Inspector objects can be injected into a Command object\n* Refactoring a lot of code and tests to be case insensitive when dealing with headers\n* Adding Guzzle\\Http\\Message\\HeaderComparison for easy comparison of HTTP headers using a DSL\n* Adding the ability to set global option overrides to service builder configs\n* Adding the ability to include other service builder config files from within XML and JSON files\n* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method.\n\n## 2.5.0 - 2012-05-08\n\n* Major performance improvements\n* [BC] Simplifying Guzzle\\Common\\Collection.  Please check to see if you are using features that are now deprecated.\n* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component.\n* [BC] No longer supporting \"{{ }}\" for injecting into command or UriTemplates.  Use \"{}\"\n* Added the ability to passed parameters to all requests created by a client\n* Added callback functionality to the ExponentialBackoffPlugin\n* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies.\n* Rewinding request stream bodies when retrying requests\n* Exception is thrown when JSON response body cannot be decoded\n* Added configurable magic method calls to clients and commands.  This is off by default.\n* Fixed a defect that added a hash to every parsed URL part\n* Fixed duplicate none generation for OauthPlugin.\n* Emitting an event each time a client is generated by a ServiceBuilder\n* Using an ApiParams object instead of a Collection for parameters of an ApiCommand\n* cache.* request parameters should be renamed to params.cache.*\n* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle.\n* Added the ability to disable type validation of service descriptions\n* ServiceDescriptions and ServiceBuilders are now Serializable\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2011 Michael Dowling <mtdowling@gmail.com>\nCopyright (c) 2012 Jeremy Lindblom <jeremeamia@gmail.com>\nCopyright (c) 2014 Graham Campbell <hello@gjcampbell.co.uk>\nCopyright (c) 2015 Márk Sági-Kazár <mark.sagikazar@gmail.com>\nCopyright (c) 2015 Tobias Schultze <webmaster@tubo-world.de>\nCopyright (c) 2016 Tobias Nyholm <tobias.nyholm@gmail.com>\nCopyright (c) 2016 George Mponos <gmponos@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/README.md",
    "content": "![Guzzle](.github/logo.png?raw=true)\n\n# Guzzle, PHP HTTP client\n\n[![Latest Version](https://img.shields.io/github/release/guzzle/guzzle.svg?style=flat-square)](https://github.com/guzzle/guzzle/releases)\n[![Build Status](https://img.shields.io/github/workflow/status/guzzle/guzzle/CI?label=ci%20build&style=flat-square)](https://github.com/guzzle/guzzle/actions?query=workflow%3ACI)\n[![Total Downloads](https://img.shields.io/packagist/dt/guzzlehttp/guzzle.svg?style=flat-square)](https://packagist.org/packages/guzzlehttp/guzzle)\n\nGuzzle is a PHP HTTP client that makes it easy to send HTTP requests and\ntrivial to integrate with web services.\n\n- Simple interface for building query strings, POST requests, streaming large\n  uploads, streaming large downloads, using HTTP cookies, uploading JSON data,\n  etc...\n- Can send both synchronous and asynchronous requests using the same interface.\n- Uses PSR-7 interfaces for requests, responses, and streams. This allows you\n  to utilize other PSR-7 compatible libraries with Guzzle.\n- Supports PSR-18 allowing interoperability between other PSR-18 HTTP Clients.\n- Abstracts away the underlying HTTP transport, allowing you to write\n  environment and transport agnostic code; i.e., no hard dependency on cURL,\n  PHP streams, sockets, or non-blocking event loops.\n- Middleware system allows you to augment and compose client behavior.\n\n```php\n$client = new \\GuzzleHttp\\Client();\n$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');\n\necho $response->getStatusCode(); // 200\necho $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'\necho $response->getBody(); // '{\"id\": 1420053, \"name\": \"guzzle\", ...}'\n\n// Send an asynchronous request.\n$request = new \\GuzzleHttp\\Psr7\\Request('GET', 'http://httpbin.org');\n$promise = $client->sendAsync($request)->then(function ($response) {\n    echo 'I completed! ' . $response->getBody();\n});\n\n$promise->wait();\n```\n\n## Help and docs\n\nWe use GitHub issues only to discuss bugs and new features. For support please refer to:\n\n- [Documentation](https://docs.guzzlephp.org)\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/guzzle)\n- [#guzzle](https://app.slack.com/client/T0D2S9JCT/CE6UAAKL4) channel on [PHP-HTTP Slack](https://slack.httplug.io/)\n- [Gitter](https://gitter.im/guzzle/guzzle)\n\n\n## Installing Guzzle\n\nThe recommended way to install Guzzle is through\n[Composer](https://getcomposer.org/).\n\n```bash\ncomposer require guzzlehttp/guzzle\n```\n\n\n## Version Guidance\n\n| Version | Status         | Packagist           | Namespace    | Repo                | Docs                | PSR-7 | PHP Version  |\n|---------|----------------|---------------------|--------------|---------------------|---------------------|-------|--------------|\n| 3.x     | EOL            | `guzzle/guzzle`     | `Guzzle`     | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No    | >=5.3.3,<7.0 |\n| 4.x     | EOL            | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A                 | No    | >=5.4,<7.0   |\n| 5.x     | EOL            | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No    | >=5.4,<7.4   |\n| 6.x     | Security fixes | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes   | >=5.5,<8.0   |\n| 7.x     | Latest         | `guzzlehttp/guzzle` | `GuzzleHttp` | [v7][guzzle-7-repo] | [v7][guzzle-7-docs] | Yes   | >=7.2.5,<8.2 |\n\n[guzzle-3-repo]: https://github.com/guzzle/guzzle3\n[guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x\n[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3\n[guzzle-6-repo]: https://github.com/guzzle/guzzle/tree/6.5\n[guzzle-7-repo]: https://github.com/guzzle/guzzle\n[guzzle-3-docs]: https://guzzle3.readthedocs.io/\n[guzzle-5-docs]: https://docs.guzzlephp.org/en/5.3/\n[guzzle-6-docs]: https://docs.guzzlephp.org/en/6.5/\n[guzzle-7-docs]: https://docs.guzzlephp.org/en/latest/\n\n\n## Security\n\nIf you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/guzzle/security/policy) for more information.\n\n## License\n\nGuzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-guzzle?utm_source=packagist-guzzlehttp-guzzle&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/UPGRADING.md",
    "content": "Guzzle Upgrade Guide\n====================\n\n6.0 to 7.0\n----------\n\nIn order to take advantage of the new features of PHP, Guzzle dropped the support\nof PHP 5. The minimum supported PHP version is now PHP 7.2. Type hints and return\ntypes for functions and methods have been added wherever possible. \n\nPlease make sure:\n- You are calling a function or a method with the correct type.\n- If you extend a class of Guzzle; update all signatures on methods you override.\n\n#### Other backwards compatibility breaking changes\n\n- Class `GuzzleHttp\\UriTemplate` is removed.\n- Class `GuzzleHttp\\Exception\\SeekException` is removed.\n- Classes `GuzzleHttp\\Exception\\BadResponseException`, `GuzzleHttp\\Exception\\ClientException`, \n  `GuzzleHttp\\Exception\\ServerException` can no longer be initialized with an empty\n  Response as argument.\n- Class `GuzzleHttp\\Exception\\ConnectException` now extends `GuzzleHttp\\Exception\\TransferException`\n  instead of `GuzzleHttp\\Exception\\RequestException`.\n- Function `GuzzleHttp\\Exception\\ConnectException::getResponse()` is removed.\n- Function `GuzzleHttp\\Exception\\ConnectException::hasResponse()` is removed.\n- Constant `GuzzleHttp\\ClientInterface::VERSION` is removed. Added `GuzzleHttp\\ClientInterface::MAJOR_VERSION` instead.\n- Function `GuzzleHttp\\Exception\\RequestException::getResponseBodySummary` is removed.\n  Use `\\GuzzleHttp\\Psr7\\get_message_body_summary` as an alternative.\n- Function `GuzzleHttp\\Cookie\\CookieJar::getCookieValue` is removed.\n- Request option `exception` is removed. Please use `http_errors`.\n- Request option `save_to` is removed. Please use `sink`.\n- Pool option `pool_size` is removed. Please use `concurrency`.\n- We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility.\n- The `get`, `head`, `put`, `post`, `patch`, `delete`, `getAsync`, `headAsync`, `putAsync`, `postAsync`, `patchAsync`, and `deleteAsync` methods are now implemented as genuine methods on `GuzzleHttp\\Client`, with strong typing. The original `__call` implementation remains unchanged for now, for maximum backwards compatibility, but won't be invoked under normal operation.\n- The `log` middleware will log the errors with level `error` instead of `notice` \n- Support for international domain names (IDN) is now disabled by default, and enabling it requires installing ext-intl, linked against a modern version of the C library (ICU 4.6 or higher).\n\n#### Native functions calls\n\nAll internal native functions calls of Guzzle are now prefixed with a slash. This\nchange makes it impossible for method overloading by other libraries or applications.\nExample:\n\n```php\n// Before:\ncurl_version();\n\n// After:\n\\curl_version();\n```\n\nFor the full diff you can check [here](https://github.com/guzzle/guzzle/compare/6.5.4..master).\n\n5.0 to 6.0\n----------\n\nGuzzle now uses [PSR-7](https://www.php-fig.org/psr/psr-7/) for HTTP messages.\nDue to the fact that these messages are immutable, this prompted a refactoring\nof Guzzle to use a middleware based system rather than an event system. Any\nHTTP message interaction (e.g., `GuzzleHttp\\Message\\Request`) need to be\nupdated to work with the new immutable PSR-7 request and response objects. Any\nevent listeners or subscribers need to be updated to become middleware\nfunctions that wrap handlers (or are injected into a\n`GuzzleHttp\\HandlerStack`).\n\n- Removed `GuzzleHttp\\BatchResults`\n- Removed `GuzzleHttp\\Collection`\n- Removed `GuzzleHttp\\HasDataTrait`\n- Removed `GuzzleHttp\\ToArrayInterface`\n- The `guzzlehttp/streams` dependency has been removed. Stream functionality\n  is now present in the `GuzzleHttp\\Psr7` namespace provided by the\n  `guzzlehttp/psr7` package.\n- Guzzle no longer uses ReactPHP promises and now uses the\n  `guzzlehttp/promises` library. We use a custom promise library for three\n  significant reasons:\n  1. React promises (at the time of writing this) are recursive. Promise\n     chaining and promise resolution will eventually blow the stack. Guzzle\n     promises are not recursive as they use a sort of trampolining technique.\n     Note: there has been movement in the React project to modify promises to\n     no longer utilize recursion.\n  2. Guzzle needs to have the ability to synchronously block on a promise to\n     wait for a result. Guzzle promises allows this functionality (and does\n     not require the use of recursion).\n  3. Because we need to be able to wait on a result, doing so using React\n     promises requires wrapping react promises with RingPHP futures. This\n     overhead is no longer needed, reducing stack sizes, reducing complexity,\n     and improving performance.\n- `GuzzleHttp\\Mimetypes` has been moved to a function in\n  `GuzzleHttp\\Psr7\\mimetype_from_extension` and\n  `GuzzleHttp\\Psr7\\mimetype_from_filename`.\n- `GuzzleHttp\\Query` and `GuzzleHttp\\QueryParser` have been removed. Query\n  strings must now be passed into request objects as strings, or provided to\n  the `query` request option when creating requests with clients. The `query`\n  option uses PHP's `http_build_query` to convert an array to a string. If you\n  need a different serialization technique, you will need to pass the query\n  string in as a string. There are a couple helper functions that will make\n  working with query strings easier: `GuzzleHttp\\Psr7\\parse_query` and\n  `GuzzleHttp\\Psr7\\build_query`.\n- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware\n  system based on PSR-7, using RingPHP and it's middleware system as well adds\n  more complexity than the benefits it provides. All HTTP handlers that were\n  present in RingPHP have been modified to work directly with PSR-7 messages\n  and placed in the `GuzzleHttp\\Handler` namespace. This significantly reduces\n  complexity in Guzzle, removes a dependency, and improves performance. RingPHP\n  will be maintained for Guzzle 5 support, but will no longer be a part of\n  Guzzle 6.\n- As Guzzle now uses a middleware based systems the event system and RingPHP\n  integration has been removed. Note: while the event system has been removed,\n  it is possible to add your own type of event system that is powered by the\n  middleware system.\n  - Removed the `Event` namespace.\n  - Removed the `Subscriber` namespace.\n  - Removed `Transaction` class\n  - Removed `RequestFsm`\n  - Removed `RingBridge`\n  - `GuzzleHttp\\Subscriber\\Cookie` is now provided by\n    `GuzzleHttp\\Middleware::cookies`\n  - `GuzzleHttp\\Subscriber\\HttpError` is now provided by\n    `GuzzleHttp\\Middleware::httpError`\n  - `GuzzleHttp\\Subscriber\\History` is now provided by\n    `GuzzleHttp\\Middleware::history`\n  - `GuzzleHttp\\Subscriber\\Mock` is now provided by\n    `GuzzleHttp\\Handler\\MockHandler`\n  - `GuzzleHttp\\Subscriber\\Prepare` is now provided by\n    `GuzzleHttp\\PrepareBodyMiddleware`\n  - `GuzzleHttp\\Subscriber\\Redirect` is now provided by\n    `GuzzleHttp\\RedirectMiddleware`\n- Guzzle now uses `Psr\\Http\\Message\\UriInterface` (implements in\n  `GuzzleHttp\\Psr7\\Uri`) for URI support. `GuzzleHttp\\Url` is now gone.\n- Static functions in `GuzzleHttp\\Utils` have been moved to namespaced\n  functions under the `GuzzleHttp` namespace. This requires either a Composer\n  based autoloader or you to include functions.php.\n- `GuzzleHttp\\ClientInterface::getDefaultOption` has been renamed to\n  `GuzzleHttp\\ClientInterface::getConfig`.\n- `GuzzleHttp\\ClientInterface::setDefaultOption` has been removed.\n- The `json` and `xml` methods of response objects has been removed. With the\n  migration to strictly adhering to PSR-7 as the interface for Guzzle messages,\n  adding methods to message interfaces would actually require Guzzle messages\n  to extend from PSR-7 messages rather then work with them directly.\n\n## Migrating to middleware\n\nThe change to PSR-7 unfortunately required significant refactoring to Guzzle\ndue to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event\nsystem from plugins. The event system relied on mutability of HTTP messages and\nside effects in order to work. With immutable messages, you have to change your\nworkflow to become more about either returning a value (e.g., functional\nmiddlewares) or setting a value on an object. Guzzle v6 has chosen the\nfunctional middleware approach.\n\nInstead of using the event system to listen for things like the `before` event,\nyou now create a stack based middleware function that intercepts a request on\nthe way in and the promise of the response on the way out. This is a much\nsimpler and more predictable approach than the event system and works nicely\nwith PSR-7 middleware. Due to the use of promises, the middleware system is\nalso asynchronous.\n\nv5:\n\n```php\nuse GuzzleHttp\\Event\\BeforeEvent;\n$client = new GuzzleHttp\\Client();\n// Get the emitter and listen to the before event.\n$client->getEmitter()->on('before', function (BeforeEvent $e) {\n    // Guzzle v5 events relied on mutation\n    $e->getRequest()->setHeader('X-Foo', 'Bar');\n});\n```\n\nv6:\n\nIn v6, you can modify the request before it is sent using the `mapRequest`\nmiddleware. The idiomatic way in v6 to modify the request/response lifecycle is\nto setup a handler middleware stack up front and inject the handler into a\nclient.\n\n```php\nuse GuzzleHttp\\Middleware;\n// Create a handler stack that has all of the default middlewares attached\n$handler = GuzzleHttp\\HandlerStack::create();\n// Push the handler onto the handler stack\n$handler->push(Middleware::mapRequest(function (RequestInterface $request) {\n    // Notice that we have to return a request object\n    return $request->withHeader('X-Foo', 'Bar');\n}));\n// Inject the handler into the client\n$client = new GuzzleHttp\\Client(['handler' => $handler]);\n```\n\n## POST Requests\n\nThis version added the [`form_params`](http://guzzle.readthedocs.org/en/latest/request-options.html#form_params)\nand `multipart` request options. `form_params` is an associative array of\nstrings or array of strings and is used to serialize an\n`application/x-www-form-urlencoded` POST request. The\n[`multipart`](http://guzzle.readthedocs.org/en/latest/request-options.html#multipart)\noption is now used to send a multipart/form-data POST request.\n\n`GuzzleHttp\\Post\\PostFile` has been removed. Use the `multipart` option to add\nPOST files to a multipart/form-data request.\n\nThe `body` option no longer accepts an array to send POST requests. Please use\n`multipart` or `form_params` instead.\n\nThe `base_url` option has been renamed to `base_uri`.\n\n4.x to 5.0\n----------\n\n## Rewritten Adapter Layer\n\nGuzzle now uses [RingPHP](http://ringphp.readthedocs.org/en/latest) to send\nHTTP requests. The `adapter` option in a `GuzzleHttp\\Client` constructor\nis still supported, but it has now been renamed to `handler`. Instead of\npassing a `GuzzleHttp\\Adapter\\AdapterInterface`, you must now pass a PHP\n`callable` that follows the RingPHP specification.\n\n## Removed Fluent Interfaces\n\n[Fluent interfaces were removed](https://ocramius.github.io/blog/fluent-interfaces-are-evil/)\nfrom the following classes:\n\n- `GuzzleHttp\\Collection`\n- `GuzzleHttp\\Url`\n- `GuzzleHttp\\Query`\n- `GuzzleHttp\\Post\\PostBody`\n- `GuzzleHttp\\Cookie\\SetCookie`\n\n## Removed functions.php\n\nRemoved \"functions.php\", so that Guzzle is truly PSR-4 compliant. The following\nfunctions can be used as replacements.\n\n- `GuzzleHttp\\json_decode` -> `GuzzleHttp\\Utils::jsonDecode`\n- `GuzzleHttp\\get_path` -> `GuzzleHttp\\Utils::getPath`\n- `GuzzleHttp\\Utils::setPath` -> `GuzzleHttp\\set_path`\n- `GuzzleHttp\\Pool::batch` -> `GuzzleHttp\\batch`. This function is, however,\n  deprecated in favor of using `GuzzleHttp\\Pool::batch()`.\n\nThe \"procedural\" global client has been removed with no replacement (e.g.,\n`GuzzleHttp\\get()`, `GuzzleHttp\\post()`, etc.). Use a `GuzzleHttp\\Client`\nobject as a replacement.\n\n## `throwImmediately` has been removed\n\nThe concept of \"throwImmediately\" has been removed from exceptions and error\nevents. This control mechanism was used to stop a transfer of concurrent\nrequests from completing. This can now be handled by throwing the exception or\nby cancelling a pool of requests or each outstanding future request\nindividually.\n\n## headers event has been removed\n\nRemoved the \"headers\" event. This event was only useful for changing the\nbody a response once the headers of the response were known. You can implement\na similar behavior in a number of ways. One example might be to use a\nFnStream that has access to the transaction being sent. For example, when the\nfirst byte is written, you could check if the response headers match your\nexpectations, and if so, change the actual stream body that is being\nwritten to.\n\n## Updates to HTTP Messages\n\nRemoved the `asArray` parameter from\n`GuzzleHttp\\Message\\MessageInterface::getHeader`. If you want to get a header\nvalue as an array, then use the newly added `getHeaderAsArray()` method of\n`MessageInterface`. This change makes the Guzzle interfaces compatible with\nthe PSR-7 interfaces.\n\n3.x to 4.0\n----------\n\n## Overarching changes:\n\n- Now requires PHP 5.4 or greater.\n- No longer requires cURL to send requests.\n- Guzzle no longer wraps every exception it throws. Only exceptions that are\n  recoverable are now wrapped by Guzzle.\n- Various namespaces have been removed or renamed.\n- No longer requiring the Symfony EventDispatcher. A custom event dispatcher\n  based on the Symfony EventDispatcher is\n  now utilized in `GuzzleHttp\\Event\\EmitterInterface` (resulting in significant\n  speed and functionality improvements).\n\nChanges per Guzzle 3.x namespace are described below.\n\n## Batch\n\nThe `Guzzle\\Batch` namespace has been removed. This is best left to\nthird-parties to implement on top of Guzzle's core HTTP library.\n\n## Cache\n\nThe `Guzzle\\Cache` namespace has been removed. (Todo: No suitable replacement\nhas been implemented yet, but hoping to utilize a PSR cache interface).\n\n## Common\n\n- Removed all of the wrapped exceptions. It's better to use the standard PHP\n  library for unrecoverable exceptions.\n- `FromConfigInterface` has been removed.\n- `Guzzle\\Common\\Version` has been removed. The VERSION constant can be found\n  at `GuzzleHttp\\ClientInterface::VERSION`.\n\n### Collection\n\n- `getAll` has been removed. Use `toArray` to convert a collection to an array.\n- `inject` has been removed.\n- `keySearch` has been removed.\n- `getPath` no longer supports wildcard expressions. Use something better like\n  JMESPath for this.\n- `setPath` now supports appending to an existing array via the `[]` notation.\n\n### Events\n\nGuzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses\n`GuzzleHttp\\Event\\Emitter`.\n\n- `Symfony\\Component\\EventDispatcher\\EventDispatcherInterface` is replaced by\n  `GuzzleHttp\\Event\\EmitterInterface`.\n- `Symfony\\Component\\EventDispatcher\\EventDispatcher` is replaced by\n  `GuzzleHttp\\Event\\Emitter`.\n- `Symfony\\Component\\EventDispatcher\\Event` is replaced by\n  `GuzzleHttp\\Event\\Event`, and Guzzle now has an EventInterface in\n  `GuzzleHttp\\Event\\EventInterface`.\n- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and\n  `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the\n  event emitter of a request, client, etc. now uses the `getEmitter` method\n  rather than the `getDispatcher` method.\n\n#### Emitter\n\n- Use the `once()` method to add a listener that automatically removes itself\n  the first time it is invoked.\n- Use the `listeners()` method to retrieve a list of event listeners rather than\n  the `getListeners()` method.\n- Use `emit()` instead of `dispatch()` to emit an event from an emitter.\n- Use `attach()` instead of `addSubscriber()` and `detach()` instead of\n  `removeSubscriber()`.\n\n```php\n$mock = new Mock();\n// 3.x\n$request->getEventDispatcher()->addSubscriber($mock);\n$request->getEventDispatcher()->removeSubscriber($mock);\n// 4.x\n$request->getEmitter()->attach($mock);\n$request->getEmitter()->detach($mock);\n```\n\nUse the `on()` method to add a listener rather than the `addListener()` method.\n\n```php\n// 3.x\n$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } );\n// 4.x\n$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } );\n```\n\n## Http\n\n### General changes\n\n- The cacert.pem certificate has been moved to `src/cacert.pem`.\n- Added the concept of adapters that are used to transfer requests over the\n  wire.\n- Simplified the event system.\n- Sending requests in parallel is still possible, but batching is no longer a\n  concept of the HTTP layer. Instead, you must use the `complete` and `error`\n  events to asynchronously manage parallel request transfers.\n- `Guzzle\\Http\\Url` has moved to `GuzzleHttp\\Url`.\n- `Guzzle\\Http\\QueryString` has moved to `GuzzleHttp\\Query`.\n- QueryAggregators have been rewritten so that they are simply callable\n  functions.\n- `GuzzleHttp\\StaticClient` has been removed. Use the functions provided in\n  `functions.php` for an easy to use static client instance.\n- Exceptions in `GuzzleHttp\\Exception` have been updated to all extend from\n  `GuzzleHttp\\Exception\\TransferException`.\n\n### Client\n\nCalling methods like `get()`, `post()`, `head()`, etc. no longer create and\nreturn a request, but rather creates a request, sends the request, and returns\nthe response.\n\n```php\n// 3.0\n$request = $client->get('/');\n$response = $request->send();\n\n// 4.0\n$response = $client->get('/');\n\n// or, to mirror the previous behavior\n$request = $client->createRequest('GET', '/');\n$response = $client->send($request);\n```\n\n`GuzzleHttp\\ClientInterface` has changed.\n\n- The `send` method no longer accepts more than one request. Use `sendAll` to\n  send multiple requests in parallel.\n- `setUserAgent()` has been removed. Use a default request option instead. You\n  could, for example, do something like:\n  `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`.\n- `setSslVerification()` has been removed. Use default request options instead,\n  like `$client->setConfig('defaults/verify', true)`.\n\n`GuzzleHttp\\Client` has changed.\n\n- The constructor now accepts only an associative array. You can include a\n  `base_url` string or array to use a URI template as the base URL of a client.\n  You can also specify a `defaults` key that is an associative array of default\n  request options. You can pass an `adapter` to use a custom adapter,\n  `batch_adapter` to use a custom adapter for sending requests in parallel, or\n  a `message_factory` to change the factory used to create HTTP requests and\n  responses.\n- The client no longer emits a `client.create_request` event.\n- Creating requests with a client no longer automatically utilize a URI\n  template. You must pass an array into a creational method (e.g.,\n  `createRequest`, `get`, `put`, etc.) in order to expand a URI template.\n\n### Messages\n\nMessages no longer have references to their counterparts (i.e., a request no\nlonger has a reference to it's response, and a response no loger has a\nreference to its request). This association is now managed through a\n`GuzzleHttp\\Adapter\\TransactionInterface` object. You can get references to\nthese transaction objects using request events that are emitted over the\nlifecycle of a request.\n\n#### Requests with a body\n\n- `GuzzleHttp\\Message\\EntityEnclosingRequest` and\n  `GuzzleHttp\\Message\\EntityEnclosingRequestInterface` have been removed. The\n  separation between requests that contain a body and requests that do not\n  contain a body has been removed, and now `GuzzleHttp\\Message\\RequestInterface`\n  handles both use cases.\n- Any method that previously accepts a `GuzzleHttp\\Response` object now accept a\n  `GuzzleHttp\\Message\\ResponseInterface`.\n- `GuzzleHttp\\Message\\RequestFactoryInterface` has been renamed to\n  `GuzzleHttp\\Message\\MessageFactoryInterface`. This interface is used to create\n  both requests and responses and is implemented in\n  `GuzzleHttp\\Message\\MessageFactory`.\n- POST field and file methods have been removed from the request object. You\n  must now use the methods made available to `GuzzleHttp\\Post\\PostBodyInterface`\n  to control the format of a POST body. Requests that are created using a\n  standard `GuzzleHttp\\Message\\MessageFactoryInterface` will automatically use\n  a `GuzzleHttp\\Post\\PostBody` body if the body was passed as an array or if\n  the method is POST and no body is provided.\n\n```php\n$request = $client->createRequest('POST', '/');\n$request->getBody()->setField('foo', 'bar');\n$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r')));\n```\n\n#### Headers\n\n- `GuzzleHttp\\Message\\Header` has been removed. Header values are now simply\n  represented by an array of values or as a string. Header values are returned\n  as a string by default when retrieving a header value from a message. You can\n  pass an optional argument of `true` to retrieve a header value as an array\n  of strings instead of a single concatenated string.\n- `GuzzleHttp\\PostFile` and `GuzzleHttp\\PostFileInterface` have been moved to\n  `GuzzleHttp\\Post`. This interface has been simplified and now allows the\n  addition of arbitrary headers.\n- Custom headers like `GuzzleHttp\\Message\\Header\\Link` have been removed. Most\n  of the custom headers are now handled separately in specific\n  subscribers/plugins, and `GuzzleHttp\\Message\\HeaderValues::parseParams()` has\n  been updated to properly handle headers that contain parameters (like the\n  `Link` header).\n\n#### Responses\n\n- `GuzzleHttp\\Message\\Response::getInfo()` and\n  `GuzzleHttp\\Message\\Response::setInfo()` have been removed. Use the event\n  system to retrieve this type of information.\n- `GuzzleHttp\\Message\\Response::getRawHeaders()` has been removed.\n- `GuzzleHttp\\Message\\Response::getMessage()` has been removed.\n- `GuzzleHttp\\Message\\Response::calculateAge()` and other cache specific\n  methods have moved to the CacheSubscriber.\n- Header specific helper functions like `getContentMd5()` have been removed.\n  Just use `getHeader('Content-MD5')` instead.\n- `GuzzleHttp\\Message\\Response::setRequest()` and\n  `GuzzleHttp\\Message\\Response::getRequest()` have been removed. Use the event\n  system to work with request and response objects as a transaction.\n- `GuzzleHttp\\Message\\Response::getRedirectCount()` has been removed. Use the\n  Redirect subscriber instead.\n- `GuzzleHttp\\Message\\Response::isSuccessful()` and other related methods have\n  been removed. Use `getStatusCode()` instead.\n\n#### Streaming responses\n\nStreaming requests can now be created by a client directly, returning a\n`GuzzleHttp\\Message\\ResponseInterface` object that contains a body stream\nreferencing an open PHP HTTP stream.\n\n```php\n// 3.0\nuse Guzzle\\Stream\\PhpStreamRequestFactory;\n$request = $client->get('/');\n$factory = new PhpStreamRequestFactory();\n$stream = $factory->fromRequest($request);\n$data = $stream->read(1024);\n\n// 4.0\n$response = $client->get('/', ['stream' => true]);\n// Read some data off of the stream in the response body\n$data = $response->getBody()->read(1024);\n```\n\n#### Redirects\n\nThe `configureRedirects()` method has been removed in favor of a\n`allow_redirects` request option.\n\n```php\n// Standard redirects with a default of a max of 5 redirects\n$request = $client->createRequest('GET', '/', ['allow_redirects' => true]);\n\n// Strict redirects with a custom number of redirects\n$request = $client->createRequest('GET', '/', [\n    'allow_redirects' => ['max' => 5, 'strict' => true]\n]);\n```\n\n#### EntityBody\n\nEntityBody interfaces and classes have been removed or moved to\n`GuzzleHttp\\Stream`. All classes and interfaces that once required\n`GuzzleHttp\\EntityBodyInterface` now require\n`GuzzleHttp\\Stream\\StreamInterface`. Creating a new body for a request no\nlonger uses `GuzzleHttp\\EntityBody::factory` but now uses\n`GuzzleHttp\\Stream\\Stream::factory` or even better:\n`GuzzleHttp\\Stream\\create()`.\n\n- `Guzzle\\Http\\EntityBodyInterface` is now `GuzzleHttp\\Stream\\StreamInterface`\n- `Guzzle\\Http\\EntityBody` is now `GuzzleHttp\\Stream\\Stream`\n- `Guzzle\\Http\\CachingEntityBody` is now `GuzzleHttp\\Stream\\CachingStream`\n- `Guzzle\\Http\\ReadLimitEntityBody` is now `GuzzleHttp\\Stream\\LimitStream`\n- `Guzzle\\Http\\IoEmittyinEntityBody` has been removed.\n\n#### Request lifecycle events\n\nRequests previously submitted a large number of requests. The number of events\nemitted over the lifecycle of a request has been significantly reduced to make\nit easier to understand how to extend the behavior of a request. All events\nemitted during the lifecycle of a request now emit a custom\n`GuzzleHttp\\Event\\EventInterface` object that contains context providing\nmethods and a way in which to modify the transaction at that specific point in\ntime (e.g., intercept the request and set a response on the transaction).\n\n- `request.before_send` has been renamed to `before` and now emits a\n  `GuzzleHttp\\Event\\BeforeEvent`\n- `request.complete` has been renamed to `complete` and now emits a\n  `GuzzleHttp\\Event\\CompleteEvent`.\n- `request.sent` has been removed. Use `complete`.\n- `request.success` has been removed. Use `complete`.\n- `error` is now an event that emits a `GuzzleHttp\\Event\\ErrorEvent`.\n- `request.exception` has been removed. Use `error`.\n- `request.receive.status_line` has been removed.\n- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to\n  maintain a status update.\n- `curl.callback.write` has been removed. Use a custom `StreamInterface` to\n  intercept writes.\n- `curl.callback.read` has been removed. Use a custom `StreamInterface` to\n  intercept reads.\n\n`headers` is a new event that is emitted after the response headers of a\nrequest have been received before the body of the response is downloaded. This\nevent emits a `GuzzleHttp\\Event\\HeadersEvent`.\n\nYou can intercept a request and inject a response using the `intercept()` event\nof a `GuzzleHttp\\Event\\BeforeEvent`, `GuzzleHttp\\Event\\CompleteEvent`, and\n`GuzzleHttp\\Event\\ErrorEvent` event.\n\nSee: http://docs.guzzlephp.org/en/latest/events.html\n\n## Inflection\n\nThe `Guzzle\\Inflection` namespace has been removed. This is not a core concern\nof Guzzle.\n\n## Iterator\n\nThe `Guzzle\\Iterator` namespace has been removed.\n\n- `Guzzle\\Iterator\\AppendIterator`, `Guzzle\\Iterator\\ChunkedIterator`, and\n  `Guzzle\\Iterator\\MethodProxyIterator` are nice, but not a core requirement of\n  Guzzle itself.\n- `Guzzle\\Iterator\\FilterIterator` is no longer needed because an equivalent\n  class is shipped with PHP 5.4.\n- `Guzzle\\Iterator\\MapIterator` is not really needed when using PHP 5.5 because\n  it's easier to just wrap an iterator in a generator that maps values.\n\nFor a replacement of these iterators, see https://github.com/nikic/iter\n\n## Log\n\nThe LogPlugin has moved to https://github.com/guzzle/log-subscriber. The\n`Guzzle\\Log` namespace has been removed. Guzzle now relies on\n`Psr\\Log\\LoggerInterface` for all logging. The MessageFormatter class has been\nmoved to `GuzzleHttp\\Subscriber\\Log\\Formatter`.\n\n## Parser\n\nThe `Guzzle\\Parser` namespace has been removed. This was previously used to\nmake it possible to plug in custom parsers for cookies, messages, URI\ntemplates, and URLs; however, this level of complexity is not needed in Guzzle\nso it has been removed.\n\n- Cookie: Cookie parsing logic has been moved to\n  `GuzzleHttp\\Cookie\\SetCookie::fromString`.\n- Message: Message parsing logic for both requests and responses has been moved\n  to `GuzzleHttp\\Message\\MessageFactory::fromMessage`. Message parsing is only\n  used in debugging or deserializing messages, so it doesn't make sense for\n  Guzzle as a library to add this level of complexity to parsing messages.\n- UriTemplate: URI template parsing has been moved to\n  `GuzzleHttp\\UriTemplate`. The Guzzle library will automatically use the PECL\n  URI template library if it is installed.\n- Url: URL parsing is now performed in `GuzzleHttp\\Url::fromString` (previously\n  it was `Guzzle\\Http\\Url::factory()`). If custom URL parsing is necessary,\n  then developers are free to subclass `GuzzleHttp\\Url`.\n\n## Plugin\n\nThe `Guzzle\\Plugin` namespace has been renamed to `GuzzleHttp\\Subscriber`.\nSeveral plugins are shipping with the core Guzzle library under this namespace.\n\n- `GuzzleHttp\\Subscriber\\Cookie`: Replaces the old CookiePlugin. Cookie jar\n  code has moved to `GuzzleHttp\\Cookie`.\n- `GuzzleHttp\\Subscriber\\History`: Replaces the old HistoryPlugin.\n- `GuzzleHttp\\Subscriber\\HttpError`: Throws errors when a bad HTTP response is\n  received.\n- `GuzzleHttp\\Subscriber\\Mock`: Replaces the old MockPlugin.\n- `GuzzleHttp\\Subscriber\\Prepare`: Prepares the body of a request just before\n  sending. This subscriber is attached to all requests by default.\n- `GuzzleHttp\\Subscriber\\Redirect`: Replaces the RedirectPlugin.\n\nThe following plugins have been removed (third-parties are free to re-implement\nthese if needed):\n\n- `GuzzleHttp\\Plugin\\Async` has been removed.\n- `GuzzleHttp\\Plugin\\CurlAuth` has been removed.\n- `GuzzleHttp\\Plugin\\ErrorResponse\\ErrorResponsePlugin` has been removed. This\n  functionality should instead be implemented with event listeners that occur\n  after normal response parsing occurs in the guzzle/command package.\n\nThe following plugins are not part of the core Guzzle package, but are provided\nin separate repositories:\n\n- `Guzzle\\Http\\Plugin\\BackoffPlugin` has been rewritten to be much simpler\n  to build custom retry policies using simple functions rather than various\n  chained classes. See: https://github.com/guzzle/retry-subscriber\n- `Guzzle\\Http\\Plugin\\Cache\\CachePlugin` has moved to\n  https://github.com/guzzle/cache-subscriber\n- `Guzzle\\Http\\Plugin\\Log\\LogPlugin` has moved to\n  https://github.com/guzzle/log-subscriber\n- `Guzzle\\Http\\Plugin\\Md5\\Md5Plugin` has moved to\n  https://github.com/guzzle/message-integrity-subscriber\n- `Guzzle\\Http\\Plugin\\Mock\\MockPlugin` has moved to\n  `GuzzleHttp\\Subscriber\\MockSubscriber`.\n- `Guzzle\\Http\\Plugin\\Oauth\\OauthPlugin` has moved to\n  https://github.com/guzzle/oauth-subscriber\n\n## Service\n\nThe service description layer of Guzzle has moved into two separate packages:\n\n- http://github.com/guzzle/command Provides a high level abstraction over web\n  services by representing web service operations using commands.\n- http://github.com/guzzle/guzzle-services Provides an implementation of\n  guzzle/command that provides request serialization and response parsing using\n  Guzzle service descriptions.\n\n## Stream\n\nStream have moved to a separate package available at\nhttps://github.com/guzzle/streams.\n\n`Guzzle\\Stream\\StreamInterface` has been given a large update to cleanly take\non the responsibilities of `Guzzle\\Http\\EntityBody` and\n`Guzzle\\Http\\EntityBodyInterface` now that they have been removed. The number\nof methods implemented by the `StreamInterface` has been drastically reduced to\nallow developers to more easily extend and decorate stream behavior.\n\n## Removed methods from StreamInterface\n\n- `getStream` and `setStream` have been removed to better encapsulate streams.\n- `getMetadata` and `setMetadata` have been removed in favor of\n  `GuzzleHttp\\Stream\\MetadataStreamInterface`.\n- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been\n  removed. This data is accessible when\n  using streams that implement `GuzzleHttp\\Stream\\MetadataStreamInterface`.\n- `rewind` has been removed. Use `seek(0)` for a similar behavior.\n\n## Renamed methods\n\n- `detachStream` has been renamed to `detach`.\n- `feof` has been renamed to `eof`.\n- `ftell` has been renamed to `tell`.\n- `readLine` has moved from an instance method to a static class method of\n  `GuzzleHttp\\Stream\\Stream`.\n\n## Metadata streams\n\n`GuzzleHttp\\Stream\\MetadataStreamInterface` has been added to denote streams\nthat contain additional metadata accessible via `getMetadata()`.\n`GuzzleHttp\\Stream\\StreamInterface::getMetadata` and\n`GuzzleHttp\\Stream\\StreamInterface::setMetadata` have been removed.\n\n## StreamRequestFactory\n\nThe entire concept of the StreamRequestFactory has been removed. The way this\nwas used in Guzzle 3 broke the actual interface of sending streaming requests\n(instead of getting back a Response, you got a StreamInterface). Streaming\nPHP requests are now implemented through the `GuzzleHttp\\Adapter\\StreamAdapter`.\n\n3.6 to 3.7\n----------\n\n### Deprecations\n\n- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.:\n\n```php\n\\Guzzle\\Common\\Version::$emitWarnings = true;\n```\n\nThe following APIs and options have been marked as deprecated:\n\n- Marked `Guzzle\\Http\\Message\\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead.\n- Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n- Marked `Guzzle\\Http\\Message\\Request::canCache()` as deprecated. Use `Guzzle\\Plugin\\Cache\\DefaultCanCacheStrategy->canCacheRequest()` instead.\n- Marked `Guzzle\\Http\\Message\\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead.\n- Marked `Guzzle\\Http\\Message\\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead.\n- Marked `Guzzle\\Cache\\CacheAdapterFactory::factory()` as deprecated\n- Marked `Guzzle\\Service\\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\\Service\\Client.\n- Marked `Guzzle\\Parser\\Url\\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8.\n- Marked `Guzzle\\Common\\Collection::inject()` as deprecated.\n- Marked `Guzzle\\Plugin\\CurlAuth\\CurlAuthPlugin` as deprecated. Use\n  `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or\n  `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));`\n\n3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational\nrequest methods. When paired with a client's configuration settings, these options allow you to specify default settings\nfor various aspects of a request. Because these options make other previous configuration options redundant, several\nconfiguration options and methods of a client and AbstractCommand have been deprecated.\n\n- Marked `Guzzle\\Service\\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`.\n- Marked `Guzzle\\Service\\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`.\n- Marked 'request.params' for `Guzzle\\Http\\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')`\n- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0\n\n        $command = $client->getCommand('foo', array(\n            'command.headers' => array('Test' => '123'),\n            'command.response_body' => '/path/to/file'\n        ));\n\n        // Should be changed to:\n\n        $command = $client->getCommand('foo', array(\n            'command.request_options' => array(\n                'headers' => array('Test' => '123'),\n                'save_as' => '/path/to/file'\n            )\n        ));\n\n### Interface changes\n\nAdditions and changes (you will need to update any implementations or subclasses you may have created):\n\n- Added an `$options` argument to the end of the following methods of `Guzzle\\Http\\ClientInterface`:\n  createRequest, head, delete, put, patch, post, options, prepareRequest\n- Added an `$options` argument to the end of `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface::createRequest()`\n- Added an `applyOptions()` method to `Guzzle\\Http\\Message\\Request\\RequestFactoryInterface`\n- Changed `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $body = null)` to\n  `Guzzle\\Http\\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a\n  resource, string, or EntityBody into the $options parameter to specify the download location of the response.\n- Changed `Guzzle\\Common\\Collection::__construct($data)` to no longer accepts a null value for `$data` but a\n  default `array()`\n- Added `Guzzle\\Stream\\StreamInterface::isRepeatable`\n- Made `Guzzle\\Http\\Client::expandTemplate` and `getUriTemplate` protected methods.\n\nThe following methods were removed from interfaces. All of these methods are still available in the concrete classes\nthat implement them, but you should update your code to use alternative methods:\n\n- Removed `Guzzle\\Http\\ClientInterface::setDefaultHeaders(). Use\n  `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or\n  `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or\n  `$client->setDefaultOption('headers/{header_name}', 'value')`. or\n  `$client->setDefaultOption('headers', array('header_name' => 'value'))`.\n- Removed `Guzzle\\Http\\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`.\n- Removed `Guzzle\\Http\\ClientInterface::expandTemplate()`. This is an implementation detail.\n- Removed `Guzzle\\Http\\ClientInterface::setRequestFactory()`. This is an implementation detail.\n- Removed `Guzzle\\Http\\ClientInterface::getCurlMulti()`. This is a very specific implementation detail.\n- Removed `Guzzle\\Http\\Message\\RequestInterface::canCache`. Use the CachePlugin.\n- Removed `Guzzle\\Http\\Message\\RequestInterface::setIsRedirect`. Use the HistoryPlugin.\n- Removed `Guzzle\\Http\\Message\\RequestInterface::isRedirect`. Use the HistoryPlugin.\n\n### Cache plugin breaking changes\n\n- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a\n  CacheStorageInterface. These two objects and interface will be removed in a future version.\n- Always setting X-cache headers on cached responses\n- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin\n- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface\n  $request, Response $response);`\n- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);`\n- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);`\n- Added `CacheStorageInterface::purge($url)`\n- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin\n  $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache,\n  CanCacheStrategyInterface $canCache = null)`\n- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)`\n\n3.5 to 3.6\n----------\n\n* Mixed casing of headers are now forced to be a single consistent casing across all values for that header.\n* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution\n* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader().\n  For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader().\n  Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request.\n* Specific header implementations can be created for complex headers. When a message creates a header, it uses a\n  HeaderFactory which can map specific headers to specific header classes. There is now a Link header and\n  CacheControl header implementation.\n* Moved getLinks() from Response to just be used on a Link header object.\n\nIf you previously relied on Guzzle\\Http\\Message\\Header::raw(), then you will need to update your code to use the\nHeaderInterface (e.g. toArray(), getAll(), etc.).\n\n### Interface changes\n\n* Removed from interface: Guzzle\\Http\\ClientInterface::setUriTemplate\n* Removed from interface: Guzzle\\Http\\ClientInterface::setCurlMulti()\n* Removed Guzzle\\Http\\Message\\Request::receivedRequestHeader() and implemented this functionality in\n  Guzzle\\Http\\Curl\\RequestMediator\n* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string.\n* Removed the optional $tryChunkedTransfer option from Guzzle\\Http\\Message\\EntityEnclosingRequestInterface\n* Removed the $asObjects argument from Guzzle\\Http\\Message\\MessageInterface::getHeaders()\n\n### Removed deprecated functions\n\n* Removed Guzzle\\Parser\\ParserRegister::get(). Use getParser()\n* Removed Guzzle\\Parser\\ParserRegister::set(). Use registerParser().\n\n### Deprecations\n\n* The ability to case-insensitively search for header values\n* Guzzle\\Http\\Message\\Header::hasExactHeader\n* Guzzle\\Http\\Message\\Header::raw. Use getAll()\n* Deprecated cache control specific methods on Guzzle\\Http\\Message\\AbstractMessage. Use the CacheControl header object\n  instead.\n\n### Other changes\n\n* All response header helper functions return a string rather than mixing Header objects and strings inconsistently\n* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle\n  directly via interfaces\n* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist\n  but are a no-op until removed.\n* Most classes that used to require a `Guzzle\\Service\\Command\\CommandInterface` typehint now request a\n  `Guzzle\\Service\\Command\\ArrayCommandInterface`.\n* Added `Guzzle\\Http\\Message\\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response\n  on a request while the request is still being transferred\n* `Guzzle\\Service\\Command\\CommandInterface` now extends from ToArrayInterface and ArrayAccess\n\n3.3 to 3.4\n----------\n\nBase URLs of a client now follow the rules of https://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs.\n\n3.2 to 3.3\n----------\n\n### Response::getEtag() quote stripping removed\n\n`Guzzle\\Http\\Message\\Response::getEtag()` no longer strips quotes around the ETag response header\n\n### Removed `Guzzle\\Http\\Utils`\n\nThe `Guzzle\\Http\\Utils` class was removed. This class was only used for testing.\n\n### Stream wrapper and type\n\n`Guzzle\\Stream\\Stream::getWrapper()` and `Guzzle\\Stream\\Stream::getStreamType()` are no longer converted to lowercase.\n\n### curl.emit_io became emit_io\n\nEmitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the\n'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io'\n\n3.1 to 3.2\n----------\n\n### CurlMulti is no longer reused globally\n\nBefore 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added\nto a single client can pollute requests dispatched from other clients.\n\nIf you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the\nServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is\ncreated.\n\n```php\n$multi = new Guzzle\\Http\\Curl\\CurlMulti();\n$builder = Guzzle\\Service\\Builder\\ServiceBuilder::factory('/path/to/config.json');\n$builder->addListener('service_builder.create_client', function ($event) use ($multi) {\n    $event['client']->setCurlMulti($multi);\n}\n});\n```\n\n### No default path\n\nURLs no longer have a default path value of '/' if no path was specified.\n\nBefore:\n\n```php\n$request = $client->get('http://www.foo.com');\necho $request->getUrl();\n// >> http://www.foo.com/\n```\n\nAfter:\n\n```php\n$request = $client->get('http://www.foo.com');\necho $request->getUrl();\n// >> http://www.foo.com\n```\n\n### Less verbose BadResponseException\n\nThe exception message for `Guzzle\\Http\\Exception\\BadResponseException` no longer contains the full HTTP request and\nresponse information. You can, however, get access to the request and response object by calling `getRequest()` or\n`getResponse()` on the exception object.\n\n### Query parameter aggregation\n\nMulti-valued query parameters are no longer aggregated using a callback function. `Guzzle\\Http\\Query` now has a\nsetAggregator() method that accepts a `Guzzle\\Http\\QueryAggregator\\QueryAggregatorInterface` object. This object is\nresponsible for handling the aggregation of multi-valued query string variables into a flattened hash.\n\n2.8 to 3.x\n----------\n\n### Guzzle\\Service\\Inspector\n\nChange `\\Guzzle\\Service\\Inspector::fromConfig` to `\\Guzzle\\Common\\Collection::fromConfig`\n\n**Before**\n\n```php\nuse Guzzle\\Service\\Inspector;\n\nclass YourClient extends \\Guzzle\\Service\\Client\n{\n    public static function factory($config = array())\n    {\n        $default = array();\n        $required = array('base_url', 'username', 'api_key');\n        $config = Inspector::fromConfig($config, $default, $required);\n\n        $client = new self(\n            $config->get('base_url'),\n            $config->get('username'),\n            $config->get('api_key')\n        );\n        $client->setConfig($config);\n\n        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));\n\n        return $client;\n    }\n```\n\n**After**\n\n```php\nuse Guzzle\\Common\\Collection;\n\nclass YourClient extends \\Guzzle\\Service\\Client\n{\n    public static function factory($config = array())\n    {\n        $default = array();\n        $required = array('base_url', 'username', 'api_key');\n        $config = Collection::fromConfig($config, $default, $required);\n\n        $client = new self(\n            $config->get('base_url'),\n            $config->get('username'),\n            $config->get('api_key')\n        );\n        $client->setConfig($config);\n\n        $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json'));\n\n        return $client;\n    }\n```\n\n### Convert XML Service Descriptions to JSON\n\n**Before**\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<client>\n    <commands>\n        <!-- Groups -->\n        <command name=\"list_groups\" method=\"GET\" uri=\"groups.json\">\n            <doc>Get a list of groups</doc>\n        </command>\n        <command name=\"search_groups\" method=\"GET\" uri='search.json?query=\"{{query}} type:group\"'>\n            <doc>Uses a search query to get a list of groups</doc>\n            <param name=\"query\" type=\"string\" required=\"true\" />\n        </command>\n        <command name=\"create_group\" method=\"POST\" uri=\"groups.json\">\n            <doc>Create a group</doc>\n            <param name=\"data\" type=\"array\" location=\"body\" filters=\"json_encode\" doc=\"Group JSON\"/>\n            <param name=\"Content-Type\" location=\"header\" static=\"application/json\"/>\n        </command>\n        <command name=\"delete_group\" method=\"DELETE\" uri=\"groups/{{id}}.json\">\n            <doc>Delete a group by ID</doc>\n            <param name=\"id\" type=\"integer\" required=\"true\"/>\n        </command>\n        <command name=\"get_group\" method=\"GET\" uri=\"groups/{{id}}.json\">\n            <param name=\"id\" type=\"integer\" required=\"true\"/>\n        </command>\n        <command name=\"update_group\" method=\"PUT\" uri=\"groups/{{id}}.json\">\n            <doc>Update a group</doc>\n            <param name=\"id\" type=\"integer\" required=\"true\"/>\n            <param name=\"data\" type=\"array\" location=\"body\" filters=\"json_encode\" doc=\"Group JSON\"/>\n            <param name=\"Content-Type\" location=\"header\" static=\"application/json\"/>\n        </command>\n    </commands>\n</client>\n```\n\n**After**\n\n```json\n{\n    \"name\":       \"Zendesk REST API v2\",\n    \"apiVersion\": \"2012-12-31\",\n    \"description\":\"Provides access to Zendesk views, groups, tickets, ticket fields, and users\",\n    \"operations\": {\n        \"list_groups\":  {\n            \"httpMethod\":\"GET\",\n            \"uri\":       \"groups.json\",\n            \"summary\":   \"Get a list of groups\"\n        },\n        \"search_groups\":{\n            \"httpMethod\":\"GET\",\n            \"uri\":       \"search.json?query=\\\"{query} type:group\\\"\",\n            \"summary\":   \"Uses a search query to get a list of groups\",\n            \"parameters\":{\n                \"query\":{\n                    \"location\":   \"uri\",\n                    \"description\":\"Zendesk Search Query\",\n                    \"type\":       \"string\",\n                    \"required\":   true\n                }\n            }\n        },\n        \"create_group\": {\n            \"httpMethod\":\"POST\",\n            \"uri\":       \"groups.json\",\n            \"summary\":   \"Create a group\",\n            \"parameters\":{\n                \"data\":        {\n                    \"type\":       \"array\",\n                    \"location\":   \"body\",\n                    \"description\":\"Group JSON\",\n                    \"filters\":    \"json_encode\",\n                    \"required\":   true\n                },\n                \"Content-Type\":{\n                    \"type\":    \"string\",\n                    \"location\":\"header\",\n                    \"static\":  \"application/json\"\n                }\n            }\n        },\n        \"delete_group\": {\n            \"httpMethod\":\"DELETE\",\n            \"uri\":       \"groups/{id}.json\",\n            \"summary\":   \"Delete a group\",\n            \"parameters\":{\n                \"id\":{\n                    \"location\":   \"uri\",\n                    \"description\":\"Group to delete by ID\",\n                    \"type\":       \"integer\",\n                    \"required\":   true\n                }\n            }\n        },\n        \"get_group\":    {\n            \"httpMethod\":\"GET\",\n            \"uri\":       \"groups/{id}.json\",\n            \"summary\":   \"Get a ticket\",\n            \"parameters\":{\n                \"id\":{\n                    \"location\":   \"uri\",\n                    \"description\":\"Group to get by ID\",\n                    \"type\":       \"integer\",\n                    \"required\":   true\n                }\n            }\n        },\n        \"update_group\": {\n            \"httpMethod\":\"PUT\",\n            \"uri\":       \"groups/{id}.json\",\n            \"summary\":   \"Update a group\",\n            \"parameters\":{\n                \"id\":          {\n                    \"location\":   \"uri\",\n                    \"description\":\"Group to update by ID\",\n                    \"type\":       \"integer\",\n                    \"required\":   true\n                },\n                \"data\":        {\n                    \"type\":       \"array\",\n                    \"location\":   \"body\",\n                    \"description\":\"Group JSON\",\n                    \"filters\":    \"json_encode\",\n                    \"required\":   true\n                },\n                \"Content-Type\":{\n                    \"type\":    \"string\",\n                    \"location\":\"header\",\n                    \"static\":  \"application/json\"\n                }\n            }\n        }\n}\n```\n\n### Guzzle\\Service\\Description\\ServiceDescription\n\nCommands are now called Operations\n\n**Before**\n\n```php\nuse Guzzle\\Service\\Description\\ServiceDescription;\n\n$sd = new ServiceDescription();\n$sd->getCommands();     // @returns ApiCommandInterface[]\n$sd->hasCommand($name);\n$sd->getCommand($name); // @returns ApiCommandInterface|null\n$sd->addCommand($command); // @param ApiCommandInterface $command\n```\n\n**After**\n\n```php\nuse Guzzle\\Service\\Description\\ServiceDescription;\n\n$sd = new ServiceDescription();\n$sd->getOperations();           // @returns OperationInterface[]\n$sd->hasOperation($name);\n$sd->getOperation($name);       // @returns OperationInterface|null\n$sd->addOperation($operation);  // @param OperationInterface $operation\n```\n\n### Guzzle\\Common\\Inflection\\Inflector\n\nNamespace is now `Guzzle\\Inflection\\Inflector`\n\n### Guzzle\\Http\\Plugin\n\nNamespace is now `Guzzle\\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below.\n\n### Guzzle\\Http\\Plugin\\LogPlugin and Guzzle\\Common\\Log\n\nNow `Guzzle\\Plugin\\Log\\LogPlugin` and `Guzzle\\Log` respectively.\n\n**Before**\n\n```php\nuse Guzzle\\Common\\Log\\ClosureLogAdapter;\nuse Guzzle\\Http\\Plugin\\LogPlugin;\n\n/** @var \\Guzzle\\Http\\Client */\n$client;\n\n// $verbosity is an integer indicating desired message verbosity level\n$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE);\n```\n\n**After**\n\n```php\nuse Guzzle\\Log\\ClosureLogAdapter;\nuse Guzzle\\Log\\MessageFormatter;\nuse Guzzle\\Plugin\\Log\\LogPlugin;\n\n/** @var \\Guzzle\\Http\\Client */\n$client;\n\n// $format is a string indicating desired message format -- @see MessageFormatter\n$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT);\n```\n\n### Guzzle\\Http\\Plugin\\CurlAuthPlugin\n\nNow `Guzzle\\Plugin\\CurlAuth\\CurlAuthPlugin`.\n\n### Guzzle\\Http\\Plugin\\ExponentialBackoffPlugin\n\nNow `Guzzle\\Plugin\\Backoff\\BackoffPlugin`, and other changes.\n\n**Before**\n\n```php\nuse Guzzle\\Http\\Plugin\\ExponentialBackoffPlugin;\n\n$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge(\n        ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429)\n    ));\n\n$client->addSubscriber($backoffPlugin);\n```\n\n**After**\n\n```php\nuse Guzzle\\Plugin\\Backoff\\BackoffPlugin;\nuse Guzzle\\Plugin\\Backoff\\HttpBackoffStrategy;\n\n// Use convenient factory method instead -- see implementation for ideas of what\n// you can do with chaining backoff strategies\n$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge(\n        HttpBackoffStrategy::getDefaultFailureCodes(), array(429)\n    ));\n$client->addSubscriber($backoffPlugin);\n```\n\n### Known Issues\n\n#### [BUG] Accept-Encoding header behavior changed unintentionally.\n\n(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e)\n\nIn version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to\nproperly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen.\nSee issue #217 for a workaround, or use a version containing the fix.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/composer.json",
    "content": "{\n    \"name\": \"guzzlehttp/guzzle\",\n    \"description\": \"Guzzle is a PHP HTTP client library\",\n    \"keywords\": [\n        \"framework\",\n        \"http\",\n        \"rest\",\n        \"web service\",\n        \"curl\",\n        \"client\",\n        \"HTTP client\",\n        \"PSR-7\",\n        \"PSR-18\"\n    ],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"hello@gjcampbell.co.uk\",\n            \"homepage\": \"https://github.com/GrahamCampbell\"\n        },\n        {\n            \"name\": \"Michael Dowling\",\n            \"email\": \"mtdowling@gmail.com\",\n            \"homepage\": \"https://github.com/mtdowling\"\n        },\n        {\n            \"name\": \"Jeremy Lindblom\",\n            \"email\": \"jeremeamia@gmail.com\",\n            \"homepage\": \"https://github.com/jeremeamia\"\n        },\n        {\n            \"name\": \"George Mponos\",\n            \"email\": \"gmponos@gmail.com\",\n            \"homepage\": \"https://github.com/gmponos\"\n        },\n        {\n            \"name\": \"Tobias Nyholm\",\n            \"email\": \"tobias.nyholm@gmail.com\",\n            \"homepage\": \"https://github.com/Nyholm\"\n        },\n        {\n            \"name\": \"Márk Sági-Kazár\",\n            \"email\": \"mark.sagikazar@gmail.com\",\n            \"homepage\": \"https://github.com/sagikazarmark\"\n        },\n        {\n            \"name\": \"Tobias Schultze\",\n            \"email\": \"webmaster@tubo-world.de\",\n            \"homepage\": \"https://github.com/Tobion\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.2.5 || ^8.0\",\n        \"ext-json\": \"*\",\n        \"guzzlehttp/promises\": \"^1.5\",\n        \"guzzlehttp/psr7\": \"^1.9 || ^2.4\",\n        \"psr/http-client\": \"^1.0\",\n        \"symfony/deprecation-contracts\": \"^2.2 || ^3.0\"\n    },\n    \"provide\": {\n        \"psr/http-client-implementation\": \"1.0\"\n    },\n    \"require-dev\": {\n        \"ext-curl\": \"*\",\n        \"bamarni/composer-bin-plugin\": \"^1.8.1\",\n        \"php-http/client-integration-tests\": \"^3.0\",\n        \"phpunit/phpunit\": \"^8.5.29 || ^9.5.23\",\n        \"psr/log\": \"^1.1 || ^2.0 || ^3.0\"\n    },\n    \"suggest\": {\n        \"ext-curl\": \"Required for CURL handler support\",\n        \"ext-intl\": \"Required for Internationalized Domain Name (IDN) support\",\n        \"psr/log\": \"Required for using the Log middleware\"\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"bamarni/composer-bin-plugin\": true\n        },\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"bamarni-bin\": {\n            \"bin-links\": true,\n            \"forward-command\": false\n        },\n        \"branch-alias\": {\n            \"dev-master\": \"7.5-dev\"\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\\": \"src/\"\n        },\n        \"files\": [\n            \"src/functions_include.php\"\n        ]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Tests\\\\\": \"tests/\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/BodySummarizer.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\MessageInterface;\n\nfinal class BodySummarizer implements BodySummarizerInterface\n{\n    /**\n     * @var int|null\n     */\n    private $truncateAt;\n\n    public function __construct(int $truncateAt = null)\n    {\n        $this->truncateAt = $truncateAt;\n    }\n\n    /**\n     * Returns a summarized message body.\n     */\n    public function summarize(MessageInterface $message): ?string\n    {\n        return $this->truncateAt === null\n            ? \\GuzzleHttp\\Psr7\\Message::bodySummary($message)\n            : \\GuzzleHttp\\Psr7\\Message::bodySummary($message, $this->truncateAt);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/BodySummarizerInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\MessageInterface;\n\ninterface BodySummarizerInterface\n{\n    /**\n     * Returns a summarized message body.\n     */\n    public function summarize(MessageInterface $message): ?string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Client.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Cookie\\CookieJar;\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse GuzzleHttp\\Exception\\InvalidArgumentException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * @final\n */\nclass Client implements ClientInterface, \\Psr\\Http\\Client\\ClientInterface\n{\n    use ClientTrait;\n\n    /**\n     * @var array Default request options\n     */\n    private $config;\n\n    /**\n     * Clients accept an array of constructor parameters.\n     *\n     * Here's an example of creating a client using a base_uri and an array of\n     * default request options to apply to each request:\n     *\n     *     $client = new Client([\n     *         'base_uri'        => 'http://www.foo.com/1.0/',\n     *         'timeout'         => 0,\n     *         'allow_redirects' => false,\n     *         'proxy'           => '192.168.16.1:10'\n     *     ]);\n     *\n     * Client configuration settings include the following options:\n     *\n     * - handler: (callable) Function that transfers HTTP requests over the\n     *   wire. The function is called with a Psr7\\Http\\Message\\RequestInterface\n     *   and array of transfer options, and must return a\n     *   GuzzleHttp\\Promise\\PromiseInterface that is fulfilled with a\n     *   Psr7\\Http\\Message\\ResponseInterface on success.\n     *   If no handler is provided, a default handler will be created\n     *   that enables all of the request options below by attaching all of the\n     *   default middleware to the handler.\n     * - base_uri: (string|UriInterface) Base URI of the client that is merged\n     *   into relative URIs. Can be a string or instance of UriInterface.\n     * - **: any request option\n     *\n     * @param array $config Client configuration settings.\n     *\n     * @see \\GuzzleHttp\\RequestOptions for a list of available request options.\n     */\n    public function __construct(array $config = [])\n    {\n        if (!isset($config['handler'])) {\n            $config['handler'] = HandlerStack::create();\n        } elseif (!\\is_callable($config['handler'])) {\n            throw new InvalidArgumentException('handler must be a callable');\n        }\n\n        // Convert the base_uri to a UriInterface\n        if (isset($config['base_uri'])) {\n            $config['base_uri'] = Psr7\\Utils::uriFor($config['base_uri']);\n        }\n\n        $this->configureDefaults($config);\n    }\n\n    /**\n     * @param string $method\n     * @param array  $args\n     *\n     * @return PromiseInterface|ResponseInterface\n     *\n     * @deprecated Client::__call will be removed in guzzlehttp/guzzle:8.0.\n     */\n    public function __call($method, $args)\n    {\n        if (\\count($args) < 1) {\n            throw new InvalidArgumentException('Magic request methods require a URI and optional options array');\n        }\n\n        $uri = $args[0];\n        $opts = $args[1] ?? [];\n\n        return \\substr($method, -5) === 'Async'\n            ? $this->requestAsync(\\substr($method, 0, -5), $uri, $opts)\n            : $this->request($method, $uri, $opts);\n    }\n\n    /**\n     * Asynchronously send an HTTP request.\n     *\n     * @param array $options Request options to apply to the given\n     *                       request and to the transfer. See \\GuzzleHttp\\RequestOptions.\n     */\n    public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface\n    {\n        // Merge the base URI into the request URI if needed.\n        $options = $this->prepareDefaults($options);\n\n        return $this->transfer(\n            $request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')),\n            $options\n        );\n    }\n\n    /**\n     * Send an HTTP request.\n     *\n     * @param array $options Request options to apply to the given\n     *                       request and to the transfer. See \\GuzzleHttp\\RequestOptions.\n     *\n     * @throws GuzzleException\n     */\n    public function send(RequestInterface $request, array $options = []): ResponseInterface\n    {\n        $options[RequestOptions::SYNCHRONOUS] = true;\n        return $this->sendAsync($request, $options)->wait();\n    }\n\n    /**\n     * The HttpClient PSR (PSR-18) specify this method.\n     *\n     * @inheritDoc\n     */\n    public function sendRequest(RequestInterface $request): ResponseInterface\n    {\n        $options[RequestOptions::SYNCHRONOUS] = true;\n        $options[RequestOptions::ALLOW_REDIRECTS] = false;\n        $options[RequestOptions::HTTP_ERRORS] = false;\n\n        return $this->sendAsync($request, $options)->wait();\n    }\n\n    /**\n     * Create and send an asynchronous HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string              $method  HTTP method\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply. See \\GuzzleHttp\\RequestOptions.\n     */\n    public function requestAsync(string $method, $uri = '', array $options = []): PromiseInterface\n    {\n        $options = $this->prepareDefaults($options);\n        // Remove request modifying parameter because it can be done up-front.\n        $headers = $options['headers'] ?? [];\n        $body = $options['body'] ?? null;\n        $version = $options['version'] ?? '1.1';\n        // Merge the URI into the base URI.\n        $uri = $this->buildUri(Psr7\\Utils::uriFor($uri), $options);\n        if (\\is_array($body)) {\n            throw $this->invalidBody();\n        }\n        $request = new Psr7\\Request($method, $uri, $headers, $body, $version);\n        // Remove the option so that they are not doubly-applied.\n        unset($options['headers'], $options['body'], $options['version']);\n\n        return $this->transfer($request, $options);\n    }\n\n    /**\n     * Create and send an HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string              $method  HTTP method.\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply. See \\GuzzleHttp\\RequestOptions.\n     *\n     * @throws GuzzleException\n     */\n    public function request(string $method, $uri = '', array $options = []): ResponseInterface\n    {\n        $options[RequestOptions::SYNCHRONOUS] = true;\n        return $this->requestAsync($method, $uri, $options)->wait();\n    }\n\n    /**\n     * Get a client configuration option.\n     *\n     * These options include default request options of the client, a \"handler\"\n     * (if utilized by the concrete client), and a \"base_uri\" if utilized by\n     * the concrete client.\n     *\n     * @param string|null $option The config option to retrieve.\n     *\n     * @return mixed\n     *\n     * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0.\n     */\n    public function getConfig(?string $option = null)\n    {\n        return $option === null\n            ? $this->config\n            : ($this->config[$option] ?? null);\n    }\n\n    private function buildUri(UriInterface $uri, array $config): UriInterface\n    {\n        if (isset($config['base_uri'])) {\n            $uri = Psr7\\UriResolver::resolve(Psr7\\Utils::uriFor($config['base_uri']), $uri);\n        }\n\n        if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) {\n            $idnOptions = ($config['idn_conversion'] === true) ? \\IDNA_DEFAULT : $config['idn_conversion'];\n            $uri = Utils::idnUriConvert($uri, $idnOptions);\n        }\n\n        return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;\n    }\n\n    /**\n     * Configures the default options for a client.\n     */\n    private function configureDefaults(array $config): void\n    {\n        $defaults = [\n            'allow_redirects' => RedirectMiddleware::$defaultSettings,\n            'http_errors'     => true,\n            'decode_content'  => true,\n            'verify'          => true,\n            'cookies'         => false,\n            'idn_conversion'  => false,\n        ];\n\n        // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set.\n\n        // We can only trust the HTTP_PROXY environment variable in a CLI\n        // process due to the fact that PHP has no reliable mechanism to\n        // get environment variables that start with \"HTTP_\".\n        if (\\PHP_SAPI === 'cli' && ($proxy = Utils::getenv('HTTP_PROXY'))) {\n            $defaults['proxy']['http'] = $proxy;\n        }\n\n        if ($proxy = Utils::getenv('HTTPS_PROXY')) {\n            $defaults['proxy']['https'] = $proxy;\n        }\n\n        if ($noProxy = Utils::getenv('NO_PROXY')) {\n            $cleanedNoProxy = \\str_replace(' ', '', $noProxy);\n            $defaults['proxy']['no'] = \\explode(',', $cleanedNoProxy);\n        }\n\n        $this->config = $config + $defaults;\n\n        if (!empty($config['cookies']) && $config['cookies'] === true) {\n            $this->config['cookies'] = new CookieJar();\n        }\n\n        // Add the default user-agent header.\n        if (!isset($this->config['headers'])) {\n            $this->config['headers'] = ['User-Agent' => Utils::defaultUserAgent()];\n        } else {\n            // Add the User-Agent header if one was not already set.\n            foreach (\\array_keys($this->config['headers']) as $name) {\n                if (\\strtolower($name) === 'user-agent') {\n                    return;\n                }\n            }\n            $this->config['headers']['User-Agent'] = Utils::defaultUserAgent();\n        }\n    }\n\n    /**\n     * Merges default options into the array.\n     *\n     * @param array $options Options to modify by reference\n     */\n    private function prepareDefaults(array $options): array\n    {\n        $defaults = $this->config;\n\n        if (!empty($defaults['headers'])) {\n            // Default headers are only added if they are not present.\n            $defaults['_conditional'] = $defaults['headers'];\n            unset($defaults['headers']);\n        }\n\n        // Special handling for headers is required as they are added as\n        // conditional headers and as headers passed to a request ctor.\n        if (\\array_key_exists('headers', $options)) {\n            // Allows default headers to be unset.\n            if ($options['headers'] === null) {\n                $defaults['_conditional'] = [];\n                unset($options['headers']);\n            } elseif (!\\is_array($options['headers'])) {\n                throw new InvalidArgumentException('headers must be an array');\n            }\n        }\n\n        // Shallow merge defaults underneath options.\n        $result = $options + $defaults;\n\n        // Remove null values.\n        foreach ($result as $k => $v) {\n            if ($v === null) {\n                unset($result[$k]);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Transfers the given request and applies request options.\n     *\n     * The URI of the request is not modified and the request options are used\n     * as-is without merging in default options.\n     *\n     * @param array $options See \\GuzzleHttp\\RequestOptions.\n     */\n    private function transfer(RequestInterface $request, array $options): PromiseInterface\n    {\n        $request = $this->applyOptions($request, $options);\n        /** @var HandlerStack $handler */\n        $handler = $options['handler'];\n\n        try {\n            return P\\Create::promiseFor($handler($request, $options));\n        } catch (\\Exception $e) {\n            return P\\Create::rejectionFor($e);\n        }\n    }\n\n    /**\n     * Applies the array of request options to a request.\n     */\n    private function applyOptions(RequestInterface $request, array &$options): RequestInterface\n    {\n        $modify = [\n            'set_headers' => [],\n        ];\n\n        if (isset($options['headers'])) {\n            if (array_keys($options['headers']) === range(0, count($options['headers']) - 1)) {\n                throw new InvalidArgumentException('The headers array must have header name as keys.');\n            }\n            $modify['set_headers'] = $options['headers'];\n            unset($options['headers']);\n        }\n\n        if (isset($options['form_params'])) {\n            if (isset($options['multipart'])) {\n                throw new InvalidArgumentException('You cannot use '\n                    . 'form_params and multipart at the same time. Use the '\n                    . 'form_params option if you want to send application/'\n                    . 'x-www-form-urlencoded requests, and the multipart '\n                    . 'option to send multipart/form-data requests.');\n            }\n            $options['body'] = \\http_build_query($options['form_params'], '', '&');\n            unset($options['form_params']);\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Content-Type'], $options['_conditional']);\n            $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded';\n        }\n\n        if (isset($options['multipart'])) {\n            $options['body'] = new Psr7\\MultipartStream($options['multipart']);\n            unset($options['multipart']);\n        }\n\n        if (isset($options['json'])) {\n            $options['body'] = Utils::jsonEncode($options['json']);\n            unset($options['json']);\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Content-Type'], $options['_conditional']);\n            $options['_conditional']['Content-Type'] = 'application/json';\n        }\n\n        if (!empty($options['decode_content'])\n            && $options['decode_content'] !== true\n        ) {\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Accept-Encoding'], $options['_conditional']);\n            $modify['set_headers']['Accept-Encoding'] = $options['decode_content'];\n        }\n\n        if (isset($options['body'])) {\n            if (\\is_array($options['body'])) {\n                throw $this->invalidBody();\n            }\n            $modify['body'] = Psr7\\Utils::streamFor($options['body']);\n            unset($options['body']);\n        }\n\n        if (!empty($options['auth']) && \\is_array($options['auth'])) {\n            $value = $options['auth'];\n            $type = isset($value[2]) ? \\strtolower($value[2]) : 'basic';\n            switch ($type) {\n                case 'basic':\n                    // Ensure that we don't have the header in different case and set the new value.\n                    $modify['set_headers'] = Psr7\\Utils::caselessRemove(['Authorization'], $modify['set_headers']);\n                    $modify['set_headers']['Authorization'] = 'Basic '\n                        . \\base64_encode(\"$value[0]:$value[1]\");\n                    break;\n                case 'digest':\n                    // @todo: Do not rely on curl\n                    $options['curl'][\\CURLOPT_HTTPAUTH] = \\CURLAUTH_DIGEST;\n                    $options['curl'][\\CURLOPT_USERPWD] = \"$value[0]:$value[1]\";\n                    break;\n                case 'ntlm':\n                    $options['curl'][\\CURLOPT_HTTPAUTH] = \\CURLAUTH_NTLM;\n                    $options['curl'][\\CURLOPT_USERPWD] = \"$value[0]:$value[1]\";\n                    break;\n            }\n        }\n\n        if (isset($options['query'])) {\n            $value = $options['query'];\n            if (\\is_array($value)) {\n                $value = \\http_build_query($value, '', '&', \\PHP_QUERY_RFC3986);\n            }\n            if (!\\is_string($value)) {\n                throw new InvalidArgumentException('query must be a string or array');\n            }\n            $modify['query'] = $value;\n            unset($options['query']);\n        }\n\n        // Ensure that sink is not an invalid value.\n        if (isset($options['sink'])) {\n            // TODO: Add more sink validation?\n            if (\\is_bool($options['sink'])) {\n                throw new InvalidArgumentException('sink must not be a boolean');\n            }\n        }\n\n        $request = Psr7\\Utils::modifyRequest($request, $modify);\n        if ($request->getBody() instanceof Psr7\\MultipartStream) {\n            // Use a multipart/form-data POST if a Content-Type is not set.\n            // Ensure that we don't have the header in different case and set the new value.\n            $options['_conditional'] = Psr7\\Utils::caselessRemove(['Content-Type'], $options['_conditional']);\n            $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary='\n                . $request->getBody()->getBoundary();\n        }\n\n        // Merge in conditional headers if they are not present.\n        if (isset($options['_conditional'])) {\n            // Build up the changes so it's in a single clone of the message.\n            $modify = [];\n            foreach ($options['_conditional'] as $k => $v) {\n                if (!$request->hasHeader($k)) {\n                    $modify['set_headers'][$k] = $v;\n                }\n            }\n            $request = Psr7\\Utils::modifyRequest($request, $modify);\n            // Don't pass this internal value along to middleware/handlers.\n            unset($options['_conditional']);\n        }\n\n        return $request;\n    }\n\n    /**\n     * Return an InvalidArgumentException with pre-set message.\n     */\n    private function invalidBody(): InvalidArgumentException\n    {\n        return new InvalidArgumentException('Passing in the \"body\" request '\n            . 'option as an array to send a request is not supported. '\n            . 'Please use the \"form_params\" request option to send a '\n            . 'application/x-www-form-urlencoded request, or the \"multipart\" '\n            . 'request option to send a multipart/form-data request.');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/ClientInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Client interface for sending HTTP requests.\n */\ninterface ClientInterface\n{\n    /**\n     * The Guzzle major version.\n     */\n    public const MAJOR_VERSION = 7;\n\n    /**\n     * Send an HTTP request.\n     *\n     * @param RequestInterface $request Request to send\n     * @param array            $options Request options to apply to the given\n     *                                  request and to the transfer.\n     *\n     * @throws GuzzleException\n     */\n    public function send(RequestInterface $request, array $options = []): ResponseInterface;\n\n    /**\n     * Asynchronously send an HTTP request.\n     *\n     * @param RequestInterface $request Request to send\n     * @param array            $options Request options to apply to the given\n     *                                  request and to the transfer.\n     */\n    public function sendAsync(RequestInterface $request, array $options = []): PromiseInterface;\n\n    /**\n     * Create and send an HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string              $method  HTTP method.\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function request(string $method, $uri, array $options = []): ResponseInterface;\n\n    /**\n     * Create and send an asynchronous HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string              $method  HTTP method\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function requestAsync(string $method, $uri, array $options = []): PromiseInterface;\n\n    /**\n     * Get a client configuration option.\n     *\n     * These options include default request options of the client, a \"handler\"\n     * (if utilized by the concrete client), and a \"base_uri\" if utilized by\n     * the concrete client.\n     *\n     * @param string|null $option The config option to retrieve.\n     *\n     * @return mixed\n     *\n     * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0.\n     */\n    public function getConfig(?string $option = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/ClientTrait.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\GuzzleException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Client interface for sending HTTP requests.\n */\ntrait ClientTrait\n{\n    /**\n     * Create and send an HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string              $method  HTTP method.\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    abstract public function request(string $method, $uri, array $options = []): ResponseInterface;\n\n    /**\n     * Create and send an HTTP GET request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function get($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('GET', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP HEAD request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function head($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('HEAD', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP PUT request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function put($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('PUT', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP POST request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function post($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('POST', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP PATCH request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function patch($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('PATCH', $uri, $options);\n    }\n\n    /**\n     * Create and send an HTTP DELETE request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     *\n     * @throws GuzzleException\n     */\n    public function delete($uri, array $options = []): ResponseInterface\n    {\n        return $this->request('DELETE', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string              $method  HTTP method\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    abstract public function requestAsync(string $method, $uri, array $options = []): PromiseInterface;\n\n    /**\n     * Create and send an asynchronous HTTP GET request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function getAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('GET', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP HEAD request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function headAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('HEAD', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP PUT request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function putAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('PUT', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP POST request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function postAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('POST', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP PATCH request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function patchAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('PATCH', $uri, $options);\n    }\n\n    /**\n     * Create and send an asynchronous HTTP DELETE request.\n     *\n     * Use an absolute path to override the base path of the client, or a\n     * relative path to append to the base path of the client. The URL can\n     * contain the query string as well. Use an array to provide a URL\n     * template and additional variables to use in the URL template expansion.\n     *\n     * @param string|UriInterface $uri     URI object or string.\n     * @param array               $options Request options to apply.\n     */\n    public function deleteAsync($uri, array $options = []): PromiseInterface\n    {\n        return $this->requestAsync('DELETE', $uri, $options);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Cookie jar that stores cookies as an array\n */\nclass CookieJar implements CookieJarInterface\n{\n    /**\n     * @var SetCookie[] Loaded cookie data\n     */\n    private $cookies = [];\n\n    /**\n     * @var bool\n     */\n    private $strictMode;\n\n    /**\n     * @param bool  $strictMode  Set to true to throw exceptions when invalid\n     *                           cookies are added to the cookie jar.\n     * @param array $cookieArray Array of SetCookie objects or a hash of\n     *                           arrays that can be used with the SetCookie\n     *                           constructor\n     */\n    public function __construct(bool $strictMode = false, array $cookieArray = [])\n    {\n        $this->strictMode = $strictMode;\n\n        foreach ($cookieArray as $cookie) {\n            if (!($cookie instanceof SetCookie)) {\n                $cookie = new SetCookie($cookie);\n            }\n            $this->setCookie($cookie);\n        }\n    }\n\n    /**\n     * Create a new Cookie jar from an associative array and domain.\n     *\n     * @param array  $cookies Cookies to create the jar from\n     * @param string $domain  Domain to set the cookies to\n     */\n    public static function fromArray(array $cookies, string $domain): self\n    {\n        $cookieJar = new self();\n        foreach ($cookies as $name => $value) {\n            $cookieJar->setCookie(new SetCookie([\n                'Domain'  => $domain,\n                'Name'    => $name,\n                'Value'   => $value,\n                'Discard' => true\n            ]));\n        }\n\n        return $cookieJar;\n    }\n\n    /**\n     * Evaluate if this cookie should be persisted to storage\n     * that survives between requests.\n     *\n     * @param SetCookie $cookie              Being evaluated.\n     * @param bool      $allowSessionCookies If we should persist session cookies\n     */\n    public static function shouldPersist(SetCookie $cookie, bool $allowSessionCookies = false): bool\n    {\n        if ($cookie->getExpires() || $allowSessionCookies) {\n            if (!$cookie->getDiscard()) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Finds and returns the cookie based on the name\n     *\n     * @param string $name cookie name to search for\n     *\n     * @return SetCookie|null cookie that was found or null if not found\n     */\n    public function getCookieByName(string $name): ?SetCookie\n    {\n        foreach ($this->cookies as $cookie) {\n            if ($cookie->getName() !== null && \\strcasecmp($cookie->getName(), $name) === 0) {\n                return $cookie;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function toArray(): array\n    {\n        return \\array_map(static function (SetCookie $cookie): array {\n            return $cookie->toArray();\n        }, $this->getIterator()->getArrayCopy());\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void\n    {\n        if (!$domain) {\n            $this->cookies = [];\n            return;\n        } elseif (!$path) {\n            $this->cookies = \\array_filter(\n                $this->cookies,\n                static function (SetCookie $cookie) use ($domain): bool {\n                    return !$cookie->matchesDomain($domain);\n                }\n            );\n        } elseif (!$name) {\n            $this->cookies = \\array_filter(\n                $this->cookies,\n                static function (SetCookie $cookie) use ($path, $domain): bool {\n                    return !($cookie->matchesPath($path) &&\n                        $cookie->matchesDomain($domain));\n                }\n            );\n        } else {\n            $this->cookies = \\array_filter(\n                $this->cookies,\n                static function (SetCookie $cookie) use ($path, $domain, $name) {\n                    return !($cookie->getName() == $name &&\n                        $cookie->matchesPath($path) &&\n                        $cookie->matchesDomain($domain));\n                }\n            );\n        }\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function clearSessionCookies(): void\n    {\n        $this->cookies = \\array_filter(\n            $this->cookies,\n            static function (SetCookie $cookie): bool {\n                return !$cookie->getDiscard() && $cookie->getExpires();\n            }\n        );\n    }\n\n    /**\n     * @inheritDoc\n     */\n    public function setCookie(SetCookie $cookie): bool\n    {\n        // If the name string is empty (but not 0), ignore the set-cookie\n        // string entirely.\n        $name = $cookie->getName();\n        if (!$name && $name !== '0') {\n            return false;\n        }\n\n        // Only allow cookies with set and valid domain, name, value\n        $result = $cookie->validate();\n        if ($result !== true) {\n            if ($this->strictMode) {\n                throw new \\RuntimeException('Invalid cookie: ' . $result);\n            }\n            $this->removeCookieIfEmpty($cookie);\n            return false;\n        }\n\n        // Resolve conflicts with previously set cookies\n        foreach ($this->cookies as $i => $c) {\n            // Two cookies are identical, when their path, and domain are\n            // identical.\n            if ($c->getPath() != $cookie->getPath() ||\n                $c->getDomain() != $cookie->getDomain() ||\n                $c->getName() != $cookie->getName()\n            ) {\n                continue;\n            }\n\n            // The previously set cookie is a discard cookie and this one is\n            // not so allow the new cookie to be set\n            if (!$cookie->getDiscard() && $c->getDiscard()) {\n                unset($this->cookies[$i]);\n                continue;\n            }\n\n            // If the new cookie's expiration is further into the future, then\n            // replace the old cookie\n            if ($cookie->getExpires() > $c->getExpires()) {\n                unset($this->cookies[$i]);\n                continue;\n            }\n\n            // If the value has changed, we better change it\n            if ($cookie->getValue() !== $c->getValue()) {\n                unset($this->cookies[$i]);\n                continue;\n            }\n\n            // The cookie exists, so no need to continue\n            return false;\n        }\n\n        $this->cookies[] = $cookie;\n\n        return true;\n    }\n\n    public function count(): int\n    {\n        return \\count($this->cookies);\n    }\n\n    /**\n     * @return \\ArrayIterator<int, SetCookie>\n     */\n    public function getIterator(): \\ArrayIterator\n    {\n        return new \\ArrayIterator(\\array_values($this->cookies));\n    }\n\n    public function extractCookies(RequestInterface $request, ResponseInterface $response): void\n    {\n        if ($cookieHeader = $response->getHeader('Set-Cookie')) {\n            foreach ($cookieHeader as $cookie) {\n                $sc = SetCookie::fromString($cookie);\n                if (!$sc->getDomain()) {\n                    $sc->setDomain($request->getUri()->getHost());\n                }\n                if (0 !== \\strpos($sc->getPath(), '/')) {\n                    $sc->setPath($this->getCookiePathFromRequest($request));\n                }\n                if (!$sc->matchesDomain($request->getUri()->getHost())) {\n                    continue;\n                }\n                // Note: At this point `$sc->getDomain()` being a public suffix should\n                // be rejected, but we don't want to pull in the full PSL dependency.\n                $this->setCookie($sc);\n            }\n        }\n    }\n\n    /**\n     * Computes cookie path following RFC 6265 section 5.1.4\n     *\n     * @link https://tools.ietf.org/html/rfc6265#section-5.1.4\n     */\n    private function getCookiePathFromRequest(RequestInterface $request): string\n    {\n        $uriPath = $request->getUri()->getPath();\n        if ('' === $uriPath) {\n            return '/';\n        }\n        if (0 !== \\strpos($uriPath, '/')) {\n            return '/';\n        }\n        if ('/' === $uriPath) {\n            return '/';\n        }\n        $lastSlashPos = \\strrpos($uriPath, '/');\n        if (0 === $lastSlashPos || false === $lastSlashPos) {\n            return '/';\n        }\n\n        return \\substr($uriPath, 0, $lastSlashPos);\n    }\n\n    public function withCookieHeader(RequestInterface $request): RequestInterface\n    {\n        $values = [];\n        $uri = $request->getUri();\n        $scheme = $uri->getScheme();\n        $host = $uri->getHost();\n        $path = $uri->getPath() ?: '/';\n\n        foreach ($this->cookies as $cookie) {\n            if ($cookie->matchesPath($path) &&\n                $cookie->matchesDomain($host) &&\n                !$cookie->isExpired() &&\n                (!$cookie->getSecure() || $scheme === 'https')\n            ) {\n                $values[] = $cookie->getName() . '='\n                    . $cookie->getValue();\n            }\n        }\n\n        return $values\n            ? $request->withHeader('Cookie', \\implode('; ', $values))\n            : $request;\n    }\n\n    /**\n     * If a cookie already exists and the server asks to set it again with a\n     * null value, the cookie must be deleted.\n     */\n    private function removeCookieIfEmpty(SetCookie $cookie): void\n    {\n        $cookieValue = $cookie->getValue();\n        if ($cookieValue === null || $cookieValue === '') {\n            $this->clear(\n                $cookie->getDomain(),\n                $cookie->getPath(),\n                $cookie->getName()\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Stores HTTP cookies.\n *\n * It extracts cookies from HTTP requests, and returns them in HTTP responses.\n * CookieJarInterface instances automatically expire contained cookies when\n * necessary. Subclasses are also responsible for storing and retrieving\n * cookies from a file, database, etc.\n *\n * @link https://docs.python.org/2/library/cookielib.html Inspiration\n * @extends \\IteratorAggregate<SetCookie>\n */\ninterface CookieJarInterface extends \\Countable, \\IteratorAggregate\n{\n    /**\n     * Create a request with added cookie headers.\n     *\n     * If no matching cookies are found in the cookie jar, then no Cookie\n     * header is added to the request and the same request is returned.\n     *\n     * @param RequestInterface $request Request object to modify.\n     *\n     * @return RequestInterface returns the modified request.\n     */\n    public function withCookieHeader(RequestInterface $request): RequestInterface;\n\n    /**\n     * Extract cookies from an HTTP response and store them in the CookieJar.\n     *\n     * @param RequestInterface  $request  Request that was sent\n     * @param ResponseInterface $response Response that was received\n     */\n    public function extractCookies(RequestInterface $request, ResponseInterface $response): void;\n\n    /**\n     * Sets a cookie in the cookie jar.\n     *\n     * @param SetCookie $cookie Cookie to set.\n     *\n     * @return bool Returns true on success or false on failure\n     */\n    public function setCookie(SetCookie $cookie): bool;\n\n    /**\n     * Remove cookies currently held in the cookie jar.\n     *\n     * Invoking this method without arguments will empty the whole cookie jar.\n     * If given a $domain argument only cookies belonging to that domain will\n     * be removed. If given a $domain and $path argument, cookies belonging to\n     * the specified path within that domain are removed. If given all three\n     * arguments, then the cookie with the specified name, path and domain is\n     * removed.\n     *\n     * @param string|null $domain Clears cookies matching a domain\n     * @param string|null $path   Clears cookies matching a domain and path\n     * @param string|null $name   Clears cookies matching a domain, path, and name\n     */\n    public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void;\n\n    /**\n     * Discard all sessions cookies.\n     *\n     * Removes cookies that don't have an expire field or a have a discard\n     * field set to true. To be called when the user agent shuts down according\n     * to RFC 2965.\n     */\n    public function clearSessionCookies(): void;\n\n    /**\n     * Converts the cookie jar to an array.\n     */\n    public function toArray(): array;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\nuse GuzzleHttp\\Utils;\n\n/**\n * Persists non-session cookies using a JSON formatted file\n */\nclass FileCookieJar extends CookieJar\n{\n    /**\n     * @var string filename\n     */\n    private $filename;\n\n    /**\n     * @var bool Control whether to persist session cookies or not.\n     */\n    private $storeSessionCookies;\n\n    /**\n     * Create a new FileCookieJar object\n     *\n     * @param string $cookieFile          File to store the cookie data\n     * @param bool   $storeSessionCookies Set to true to store session cookies\n     *                                    in the cookie jar.\n     *\n     * @throws \\RuntimeException if the file cannot be found or created\n     */\n    public function __construct(string $cookieFile, bool $storeSessionCookies = false)\n    {\n        parent::__construct();\n        $this->filename = $cookieFile;\n        $this->storeSessionCookies = $storeSessionCookies;\n\n        if (\\file_exists($cookieFile)) {\n            $this->load($cookieFile);\n        }\n    }\n\n    /**\n     * Saves the file when shutting down\n     */\n    public function __destruct()\n    {\n        $this->save($this->filename);\n    }\n\n    /**\n     * Saves the cookies to a file.\n     *\n     * @param string $filename File to save\n     *\n     * @throws \\RuntimeException if the file cannot be found or created\n     */\n    public function save(string $filename): void\n    {\n        $json = [];\n        /** @var SetCookie $cookie */\n        foreach ($this as $cookie) {\n            if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {\n                $json[] = $cookie->toArray();\n            }\n        }\n\n        $jsonStr = Utils::jsonEncode($json);\n        if (false === \\file_put_contents($filename, $jsonStr, \\LOCK_EX)) {\n            throw new \\RuntimeException(\"Unable to save file {$filename}\");\n        }\n    }\n\n    /**\n     * Load cookies from a JSON formatted file.\n     *\n     * Old cookies are kept unless overwritten by newly loaded ones.\n     *\n     * @param string $filename Cookie file to load.\n     *\n     * @throws \\RuntimeException if the file cannot be loaded.\n     */\n    public function load(string $filename): void\n    {\n        $json = \\file_get_contents($filename);\n        if (false === $json) {\n            throw new \\RuntimeException(\"Unable to load file {$filename}\");\n        }\n        if ($json === '') {\n            return;\n        }\n\n        $data = Utils::jsonDecode($json, true);\n        if (\\is_array($data)) {\n            foreach ($data as $cookie) {\n                $this->setCookie(new SetCookie($cookie));\n            }\n        } elseif (\\is_scalar($data) && !empty($data)) {\n            throw new \\RuntimeException(\"Invalid cookie file: {$filename}\");\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\n/**\n * Persists cookies in the client session\n */\nclass SessionCookieJar extends CookieJar\n{\n    /**\n     * @var string session key\n     */\n    private $sessionKey;\n\n    /**\n     * @var bool Control whether to persist session cookies or not.\n     */\n    private $storeSessionCookies;\n\n    /**\n     * Create a new SessionCookieJar object\n     *\n     * @param string $sessionKey          Session key name to store the cookie\n     *                                    data in session\n     * @param bool   $storeSessionCookies Set to true to store session cookies\n     *                                    in the cookie jar.\n     */\n    public function __construct(string $sessionKey, bool $storeSessionCookies = false)\n    {\n        parent::__construct();\n        $this->sessionKey = $sessionKey;\n        $this->storeSessionCookies = $storeSessionCookies;\n        $this->load();\n    }\n\n    /**\n     * Saves cookies to session when shutting down\n     */\n    public function __destruct()\n    {\n        $this->save();\n    }\n\n    /**\n     * Save cookies to the client session\n     */\n    public function save(): void\n    {\n        $json = [];\n        /** @var SetCookie $cookie */\n        foreach ($this as $cookie) {\n            if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {\n                $json[] = $cookie->toArray();\n            }\n        }\n\n        $_SESSION[$this->sessionKey] = \\json_encode($json);\n    }\n\n    /**\n     * Load the contents of the client session into the data array\n     */\n    protected function load(): void\n    {\n        if (!isset($_SESSION[$this->sessionKey])) {\n            return;\n        }\n        $data = \\json_decode($_SESSION[$this->sessionKey], true);\n        if (\\is_array($data)) {\n            foreach ($data as $cookie) {\n                $this->setCookie(new SetCookie($cookie));\n            }\n        } elseif (\\strlen($data)) {\n            throw new \\RuntimeException(\"Invalid cookie data\");\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Cookie;\n\n/**\n * Set-Cookie object\n */\nclass SetCookie\n{\n    /**\n     * @var array\n     */\n    private static $defaults = [\n        'Name'     => null,\n        'Value'    => null,\n        'Domain'   => null,\n        'Path'     => '/',\n        'Max-Age'  => null,\n        'Expires'  => null,\n        'Secure'   => false,\n        'Discard'  => false,\n        'HttpOnly' => false\n    ];\n\n    /**\n     * @var array Cookie data\n     */\n    private $data;\n\n    /**\n     * Create a new SetCookie object from a string.\n     *\n     * @param string $cookie Set-Cookie header string\n     */\n    public static function fromString(string $cookie): self\n    {\n        // Create the default return array\n        $data = self::$defaults;\n        // Explode the cookie string using a series of semicolons\n        $pieces = \\array_filter(\\array_map('trim', \\explode(';', $cookie)));\n        // The name of the cookie (first kvp) must exist and include an equal sign.\n        if (!isset($pieces[0]) || \\strpos($pieces[0], '=') === false) {\n            return new self($data);\n        }\n\n        // Add the cookie pieces into the parsed data array\n        foreach ($pieces as $part) {\n            $cookieParts = \\explode('=', $part, 2);\n            $key = \\trim($cookieParts[0]);\n            $value = isset($cookieParts[1])\n                ? \\trim($cookieParts[1], \" \\n\\r\\t\\0\\x0B\")\n                : true;\n\n            // Only check for non-cookies when cookies have been found\n            if (!isset($data['Name'])) {\n                $data['Name'] = $key;\n                $data['Value'] = $value;\n            } else {\n                foreach (\\array_keys(self::$defaults) as $search) {\n                    if (!\\strcasecmp($search, $key)) {\n                        $data[$search] = $value;\n                        continue 2;\n                    }\n                }\n                $data[$key] = $value;\n            }\n        }\n\n        return new self($data);\n    }\n\n    /**\n     * @param array $data Array of cookie data provided by a Cookie parser\n     */\n    public function __construct(array $data = [])\n    {\n        /** @var array|null $replaced will be null in case of replace error */\n        $replaced = \\array_replace(self::$defaults, $data);\n        if ($replaced === null) {\n            throw new \\InvalidArgumentException('Unable to replace the default values for the Cookie.');\n        }\n\n        $this->data = $replaced;\n        // Extract the Expires value and turn it into a UNIX timestamp if needed\n        if (!$this->getExpires() && $this->getMaxAge()) {\n            // Calculate the Expires date\n            $this->setExpires(\\time() + $this->getMaxAge());\n        } elseif (null !== ($expires = $this->getExpires()) && !\\is_numeric($expires)) {\n            $this->setExpires($expires);\n        }\n    }\n\n    public function __toString()\n    {\n        $str = $this->data['Name'] . '=' . ($this->data['Value'] ?? '') . '; ';\n        foreach ($this->data as $k => $v) {\n            if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) {\n                if ($k === 'Expires') {\n                    $str .= 'Expires=' . \\gmdate('D, d M Y H:i:s \\G\\M\\T', $v) . '; ';\n                } else {\n                    $str .= ($v === true ? $k : \"{$k}={$v}\") . '; ';\n                }\n            }\n        }\n\n        return \\rtrim($str, '; ');\n    }\n\n    public function toArray(): array\n    {\n        return $this->data;\n    }\n\n    /**\n     * Get the cookie name.\n     *\n     * @return string\n     */\n    public function getName()\n    {\n        return $this->data['Name'];\n    }\n\n    /**\n     * Set the cookie name.\n     *\n     * @param string $name Cookie name\n     */\n    public function setName($name): void\n    {\n        if (!is_string($name)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Name'] = (string) $name;\n    }\n\n    /**\n     * Get the cookie value.\n     *\n     * @return string|null\n     */\n    public function getValue()\n    {\n        return $this->data['Value'];\n    }\n\n    /**\n     * Set the cookie value.\n     *\n     * @param string $value Cookie value\n     */\n    public function setValue($value): void\n    {\n        if (!is_string($value)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Value'] = (string) $value;\n    }\n\n    /**\n     * Get the domain.\n     *\n     * @return string|null\n     */\n    public function getDomain()\n    {\n        return $this->data['Domain'];\n    }\n\n    /**\n     * Set the domain of the cookie.\n     *\n     * @param string|null $domain\n     */\n    public function setDomain($domain): void\n    {\n        if (!is_string($domain) && null !== $domain) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Domain'] = null === $domain ? null : (string) $domain;\n    }\n\n    /**\n     * Get the path.\n     *\n     * @return string\n     */\n    public function getPath()\n    {\n        return $this->data['Path'];\n    }\n\n    /**\n     * Set the path of the cookie.\n     *\n     * @param string $path Path of the cookie\n     */\n    public function setPath($path): void\n    {\n        if (!is_string($path)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Path'] = (string) $path;\n    }\n\n    /**\n     * Maximum lifetime of the cookie in seconds.\n     *\n     * @return int|null\n     */\n    public function getMaxAge()\n    {\n        return null === $this->data['Max-Age'] ? null : (int) $this->data['Max-Age'];\n    }\n\n    /**\n     * Set the max-age of the cookie.\n     *\n     * @param int|null $maxAge Max age of the cookie in seconds\n     */\n    public function setMaxAge($maxAge): void\n    {\n        if (!is_int($maxAge) && null !== $maxAge) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Max-Age'] = $maxAge === null ? null : (int) $maxAge;\n    }\n\n    /**\n     * The UNIX timestamp when the cookie Expires.\n     *\n     * @return string|int|null\n     */\n    public function getExpires()\n    {\n        return $this->data['Expires'];\n    }\n\n    /**\n     * Set the unix timestamp for which the cookie will expire.\n     *\n     * @param int|string|null $timestamp Unix timestamp or any English textual datetime description.\n     */\n    public function setExpires($timestamp): void\n    {\n        if (!is_int($timestamp) && !is_string($timestamp) && null !== $timestamp) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an int, string or null to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Expires'] = null === $timestamp ? null : (\\is_numeric($timestamp) ? (int) $timestamp : \\strtotime((string) $timestamp));\n    }\n\n    /**\n     * Get whether or not this is a secure cookie.\n     *\n     * @return bool\n     */\n    public function getSecure()\n    {\n        return $this->data['Secure'];\n    }\n\n    /**\n     * Set whether or not the cookie is secure.\n     *\n     * @param bool $secure Set to true or false if secure\n     */\n    public function setSecure($secure): void\n    {\n        if (!is_bool($secure)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Secure'] = (bool) $secure;\n    }\n\n    /**\n     * Get whether or not this is a session cookie.\n     *\n     * @return bool|null\n     */\n    public function getDiscard()\n    {\n        return $this->data['Discard'];\n    }\n\n    /**\n     * Set whether or not this is a session cookie.\n     *\n     * @param bool $discard Set to true or false if this is a session cookie\n     */\n    public function setDiscard($discard): void\n    {\n        if (!is_bool($discard)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['Discard'] = (bool) $discard;\n    }\n\n    /**\n     * Get whether or not this is an HTTP only cookie.\n     *\n     * @return bool\n     */\n    public function getHttpOnly()\n    {\n        return $this->data['HttpOnly'];\n    }\n\n    /**\n     * Set whether or not this is an HTTP only cookie.\n     *\n     * @param bool $httpOnly Set to true or false if this is HTTP only\n     */\n    public function setHttpOnly($httpOnly): void\n    {\n        if (!is_bool($httpOnly)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a bool to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->data['HttpOnly'] = (bool) $httpOnly;\n    }\n\n    /**\n     * Check if the cookie matches a path value.\n     *\n     * A request-path path-matches a given cookie-path if at least one of\n     * the following conditions holds:\n     *\n     * - The cookie-path and the request-path are identical.\n     * - The cookie-path is a prefix of the request-path, and the last\n     *   character of the cookie-path is %x2F (\"/\").\n     * - The cookie-path is a prefix of the request-path, and the first\n     *   character of the request-path that is not included in the cookie-\n     *   path is a %x2F (\"/\") character.\n     *\n     * @param string $requestPath Path to check against\n     */\n    public function matchesPath(string $requestPath): bool\n    {\n        $cookiePath = $this->getPath();\n\n        // Match on exact matches or when path is the default empty \"/\"\n        if ($cookiePath === '/' || $cookiePath == $requestPath) {\n            return true;\n        }\n\n        // Ensure that the cookie-path is a prefix of the request path.\n        if (0 !== \\strpos($requestPath, $cookiePath)) {\n            return false;\n        }\n\n        // Match if the last character of the cookie-path is \"/\"\n        if (\\substr($cookiePath, -1, 1) === '/') {\n            return true;\n        }\n\n        // Match if the first character not included in cookie path is \"/\"\n        return \\substr($requestPath, \\strlen($cookiePath), 1) === '/';\n    }\n\n    /**\n     * Check if the cookie matches a domain value.\n     *\n     * @param string $domain Domain to check against\n     */\n    public function matchesDomain(string $domain): bool\n    {\n        $cookieDomain = $this->getDomain();\n        if (null === $cookieDomain) {\n            return true;\n        }\n\n        // Remove the leading '.' as per spec in RFC 6265.\n        // https://tools.ietf.org/html/rfc6265#section-5.2.3\n        $cookieDomain = \\ltrim(\\strtolower($cookieDomain), '.');\n\n        $domain = \\strtolower($domain);\n\n        // Domain not set or exact match.\n        if ('' === $cookieDomain || $domain === $cookieDomain) {\n            return true;\n        }\n\n        // Matching the subdomain according to RFC 6265.\n        // https://tools.ietf.org/html/rfc6265#section-5.1.3\n        if (\\filter_var($domain, \\FILTER_VALIDATE_IP)) {\n            return false;\n        }\n\n        return (bool) \\preg_match('/\\.' . \\preg_quote($cookieDomain, '/') . '$/', $domain);\n    }\n\n    /**\n     * Check if the cookie is expired.\n     */\n    public function isExpired(): bool\n    {\n        return $this->getExpires() !== null && \\time() > $this->getExpires();\n    }\n\n    /**\n     * Check if the cookie is valid according to RFC 6265.\n     *\n     * @return bool|string Returns true if valid or an error message if invalid\n     */\n    public function validate()\n    {\n        $name = $this->getName();\n        if ($name === '') {\n            return 'The cookie name must not be empty';\n        }\n\n        // Check if any of the invalid characters are present in the cookie name\n        if (\\preg_match(\n            '/[\\x00-\\x20\\x22\\x28-\\x29\\x2c\\x2f\\x3a-\\x40\\x5c\\x7b\\x7d\\x7f]/',\n            $name\n        )) {\n            return 'Cookie name must not contain invalid characters: ASCII '\n                . 'Control characters (0-31;127), space, tab and the '\n                . 'following characters: ()<>@,;:\\\"/?={}';\n        }\n\n        // Value must not be null. 0 and empty string are valid. Empty strings\n        // are technically against RFC 6265, but known to happen in the wild.\n        $value = $this->getValue();\n        if ($value === null) {\n            return 'The cookie value must not be empty';\n        }\n\n        // Domains must not be empty, but can be 0. \"0\" is not a valid internet\n        // domain, but may be used as server name in a private network.\n        $domain = $this->getDomain();\n        if ($domain === null || $domain === '') {\n            return 'The cookie domain must not be empty';\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Exception when an HTTP error occurs (4xx or 5xx error)\n */\nclass BadResponseException extends RequestException\n{\n    public function __construct(\n        string $message,\n        RequestInterface $request,\n        ResponseInterface $response,\n        \\Throwable $previous = null,\n        array $handlerContext = []\n    ) {\n        parent::__construct($message, $request, $response, $previous, $handlerContext);\n    }\n\n    /**\n     * Current exception and the ones that extend it will always have a response.\n     */\n    public function hasResponse(): bool\n    {\n        return true;\n    }\n\n    /**\n     * This function narrows the return type from the parent class and does not allow it to be nullable.\n     */\n    public function getResponse(): ResponseInterface\n    {\n        /** @var ResponseInterface */\n        return parent::getResponse();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\n/**\n * Exception when a client error is encountered (4xx codes)\n */\nclass ClientException extends BadResponseException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse Psr\\Http\\Client\\NetworkExceptionInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Exception thrown when a connection cannot be established.\n *\n * Note that no response is present for a ConnectException\n */\nclass ConnectException extends TransferException implements NetworkExceptionInterface\n{\n    /**\n     * @var RequestInterface\n     */\n    private $request;\n\n    /**\n     * @var array\n     */\n    private $handlerContext;\n\n    public function __construct(\n        string $message,\n        RequestInterface $request,\n        \\Throwable $previous = null,\n        array $handlerContext = []\n    ) {\n        parent::__construct($message, 0, $previous);\n        $this->request = $request;\n        $this->handlerContext = $handlerContext;\n    }\n\n    /**\n     * Get the request that caused the exception\n     */\n    public function getRequest(): RequestInterface\n    {\n        return $this->request;\n    }\n\n    /**\n     * Get contextual information about the error from the underlying handler.\n     *\n     * The contents of this array will vary depending on which handler you are\n     * using. It may also be just an empty array. Relying on this data will\n     * couple you to a specific handler, but can give more debug information\n     * when needed.\n     */\n    public function getHandlerContext(): array\n    {\n        return $this->handlerContext;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse Psr\\Http\\Client\\ClientExceptionInterface;\n\ninterface GuzzleException extends ClientExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nfinal class InvalidArgumentException extends \\InvalidArgumentException implements GuzzleException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nuse GuzzleHttp\\BodySummarizer;\nuse GuzzleHttp\\BodySummarizerInterface;\nuse Psr\\Http\\Client\\RequestExceptionInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * HTTP Request exception\n */\nclass RequestException extends TransferException implements RequestExceptionInterface\n{\n    /**\n     * @var RequestInterface\n     */\n    private $request;\n\n    /**\n     * @var ResponseInterface|null\n     */\n    private $response;\n\n    /**\n     * @var array\n     */\n    private $handlerContext;\n\n    public function __construct(\n        string $message,\n        RequestInterface $request,\n        ResponseInterface $response = null,\n        \\Throwable $previous = null,\n        array $handlerContext = []\n    ) {\n        // Set the code of the exception if the response is set and not future.\n        $code = $response ? $response->getStatusCode() : 0;\n        parent::__construct($message, $code, $previous);\n        $this->request = $request;\n        $this->response = $response;\n        $this->handlerContext = $handlerContext;\n    }\n\n    /**\n     * Wrap non-RequestExceptions with a RequestException\n     */\n    public static function wrapException(RequestInterface $request, \\Throwable $e): RequestException\n    {\n        return $e instanceof RequestException ? $e : new RequestException($e->getMessage(), $request, null, $e);\n    }\n\n    /**\n     * Factory method to create a new exception with a normalized error message\n     *\n     * @param RequestInterface             $request        Request sent\n     * @param ResponseInterface            $response       Response received\n     * @param \\Throwable|null              $previous       Previous exception\n     * @param array                        $handlerContext Optional handler context\n     * @param BodySummarizerInterface|null $bodySummarizer Optional body summarizer\n     */\n    public static function create(\n        RequestInterface $request,\n        ResponseInterface $response = null,\n        \\Throwable $previous = null,\n        array $handlerContext = [],\n        BodySummarizerInterface $bodySummarizer = null\n    ): self {\n        if (!$response) {\n            return new self(\n                'Error completing request',\n                $request,\n                null,\n                $previous,\n                $handlerContext\n            );\n        }\n\n        $level = (int) \\floor($response->getStatusCode() / 100);\n        if ($level === 4) {\n            $label = 'Client error';\n            $className = ClientException::class;\n        } elseif ($level === 5) {\n            $label = 'Server error';\n            $className = ServerException::class;\n        } else {\n            $label = 'Unsuccessful request';\n            $className = __CLASS__;\n        }\n\n        $uri = $request->getUri();\n        $uri = static::obfuscateUri($uri);\n\n        // Client Error: `GET /` resulted in a `404 Not Found` response:\n        // <html> ... (truncated)\n        $message = \\sprintf(\n            '%s: `%s %s` resulted in a `%s %s` response',\n            $label,\n            $request->getMethod(),\n            $uri->__toString(),\n            $response->getStatusCode(),\n            $response->getReasonPhrase()\n        );\n\n        $summary = ($bodySummarizer ?? new BodySummarizer())->summarize($response);\n\n        if ($summary !== null) {\n            $message .= \":\\n{$summary}\\n\";\n        }\n\n        return new $className($message, $request, $response, $previous, $handlerContext);\n    }\n\n    /**\n     * Obfuscates URI if there is a username and a password present\n     */\n    private static function obfuscateUri(UriInterface $uri): UriInterface\n    {\n        $userInfo = $uri->getUserInfo();\n\n        if (false !== ($pos = \\strpos($userInfo, ':'))) {\n            return $uri->withUserInfo(\\substr($userInfo, 0, $pos), '***');\n        }\n\n        return $uri;\n    }\n\n    /**\n     * Get the request that caused the exception\n     */\n    public function getRequest(): RequestInterface\n    {\n        return $this->request;\n    }\n\n    /**\n     * Get the associated response\n     */\n    public function getResponse(): ?ResponseInterface\n    {\n        return $this->response;\n    }\n\n    /**\n     * Check if a response was received\n     */\n    public function hasResponse(): bool\n    {\n        return $this->response !== null;\n    }\n\n    /**\n     * Get contextual information about the error from the underlying handler.\n     *\n     * The contents of this array will vary depending on which handler you are\n     * using. It may also be just an empty array. Relying on this data will\n     * couple you to a specific handler, but can give more debug information\n     * when needed.\n     */\n    public function getHandlerContext(): array\n    {\n        return $this->handlerContext;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\n/**\n * Exception when a server error is encountered (5xx codes)\n */\nclass ServerException extends BadResponseException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nclass TooManyRedirectsException extends RequestException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Exception;\n\nclass TransferException extends \\RuntimeException implements GuzzleException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Exception\\ConnectException;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\FulfilledPromise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7\\LazyOpenStream;\nuse GuzzleHttp\\TransferStats;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Creates curl resources from a request\n *\n * @final\n */\nclass CurlFactory implements CurlFactoryInterface\n{\n    public const CURL_VERSION_STR = 'curl_version';\n\n    /**\n     * @deprecated\n     */\n    public const LOW_CURL_VERSION_NUMBER = '7.21.2';\n\n    /**\n     * @var resource[]|\\CurlHandle[]\n     */\n    private $handles = [];\n\n    /**\n     * @var int Total number of idle handles to keep in cache\n     */\n    private $maxHandles;\n\n    /**\n     * @param int $maxHandles Maximum number of idle handles.\n     */\n    public function __construct(int $maxHandles)\n    {\n        $this->maxHandles = $maxHandles;\n    }\n\n    public function create(RequestInterface $request, array $options): EasyHandle\n    {\n        if (isset($options['curl']['body_as_string'])) {\n            $options['_body_as_string'] = $options['curl']['body_as_string'];\n            unset($options['curl']['body_as_string']);\n        }\n\n        $easy = new EasyHandle;\n        $easy->request = $request;\n        $easy->options = $options;\n        $conf = $this->getDefaultConf($easy);\n        $this->applyMethod($easy, $conf);\n        $this->applyHandlerOptions($easy, $conf);\n        $this->applyHeaders($easy, $conf);\n        unset($conf['_headers']);\n\n        // Add handler options from the request configuration options\n        if (isset($options['curl'])) {\n            $conf = \\array_replace($conf, $options['curl']);\n        }\n\n        $conf[\\CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy);\n        $easy->handle = $this->handles ? \\array_pop($this->handles) : \\curl_init();\n        curl_setopt_array($easy->handle, $conf);\n\n        return $easy;\n    }\n\n    public function release(EasyHandle $easy): void\n    {\n        $resource = $easy->handle;\n        unset($easy->handle);\n\n        if (\\count($this->handles) >= $this->maxHandles) {\n            \\curl_close($resource);\n        } else {\n            // Remove all callback functions as they can hold onto references\n            // and are not cleaned up by curl_reset. Using curl_setopt_array\n            // does not work for some reason, so removing each one\n            // individually.\n            \\curl_setopt($resource, \\CURLOPT_HEADERFUNCTION, null);\n            \\curl_setopt($resource, \\CURLOPT_READFUNCTION, null);\n            \\curl_setopt($resource, \\CURLOPT_WRITEFUNCTION, null);\n            \\curl_setopt($resource, \\CURLOPT_PROGRESSFUNCTION, null);\n            \\curl_reset($resource);\n            $this->handles[] = $resource;\n        }\n    }\n\n    /**\n     * Completes a cURL transaction, either returning a response promise or a\n     * rejected promise.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $handler\n     * @param CurlFactoryInterface                                $factory Dictates how the handle is released\n     */\n    public static function finish(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface\n    {\n        if (isset($easy->options['on_stats'])) {\n            self::invokeStats($easy);\n        }\n\n        if (!$easy->response || $easy->errno) {\n            return self::finishError($handler, $easy, $factory);\n        }\n\n        // Return the response if it is present and there is no error.\n        $factory->release($easy);\n\n        // Rewind the body of the response if possible.\n        $body = $easy->response->getBody();\n        if ($body->isSeekable()) {\n            $body->rewind();\n        }\n\n        return new FulfilledPromise($easy->response);\n    }\n\n    private static function invokeStats(EasyHandle $easy): void\n    {\n        $curlStats = \\curl_getinfo($easy->handle);\n        $curlStats['appconnect_time'] = \\curl_getinfo($easy->handle, \\CURLINFO_APPCONNECT_TIME);\n        $stats = new TransferStats(\n            $easy->request,\n            $easy->response,\n            $curlStats['total_time'],\n            $easy->errno,\n            $curlStats\n        );\n        ($easy->options['on_stats'])($stats);\n    }\n\n    /**\n     * @param callable(RequestInterface, array): PromiseInterface $handler\n     */\n    private static function finishError(callable $handler, EasyHandle $easy, CurlFactoryInterface $factory): PromiseInterface\n    {\n        // Get error information and release the handle to the factory.\n        $ctx = [\n            'errno' => $easy->errno,\n            'error' => \\curl_error($easy->handle),\n            'appconnect_time' => \\curl_getinfo($easy->handle, \\CURLINFO_APPCONNECT_TIME),\n        ] + \\curl_getinfo($easy->handle);\n        $ctx[self::CURL_VERSION_STR] = \\curl_version()['version'];\n        $factory->release($easy);\n\n        // Retry when nothing is present or when curl failed to rewind.\n        if (empty($easy->options['_err_message']) && (!$easy->errno || $easy->errno == 65)) {\n            return self::retryFailedRewind($handler, $easy, $ctx);\n        }\n\n        return self::createRejection($easy, $ctx);\n    }\n\n    private static function createRejection(EasyHandle $easy, array $ctx): PromiseInterface\n    {\n        static $connectionErrors = [\n            \\CURLE_OPERATION_TIMEOUTED  => true,\n            \\CURLE_COULDNT_RESOLVE_HOST => true,\n            \\CURLE_COULDNT_CONNECT      => true,\n            \\CURLE_SSL_CONNECT_ERROR    => true,\n            \\CURLE_GOT_NOTHING          => true,\n        ];\n\n        if ($easy->createResponseException) {\n            return P\\Create::rejectionFor(\n                new RequestException(\n                    'An error was encountered while creating the response',\n                    $easy->request,\n                    $easy->response,\n                    $easy->createResponseException,\n                    $ctx\n                )\n            );\n        }\n\n        // If an exception was encountered during the onHeaders event, then\n        // return a rejected promise that wraps that exception.\n        if ($easy->onHeadersException) {\n            return P\\Create::rejectionFor(\n                new RequestException(\n                    'An error was encountered during the on_headers event',\n                    $easy->request,\n                    $easy->response,\n                    $easy->onHeadersException,\n                    $ctx\n                )\n            );\n        }\n\n        $message = \\sprintf(\n            'cURL error %s: %s (%s)',\n            $ctx['errno'],\n            $ctx['error'],\n            'see https://curl.haxx.se/libcurl/c/libcurl-errors.html'\n        );\n        $uriString = (string) $easy->request->getUri();\n        if ($uriString !== '' && false === \\strpos($ctx['error'], $uriString)) {\n            $message .= \\sprintf(' for %s', $uriString);\n        }\n\n        // Create a connection exception if it was a specific error code.\n        $error = isset($connectionErrors[$easy->errno])\n            ? new ConnectException($message, $easy->request, null, $ctx)\n            : new RequestException($message, $easy->request, $easy->response, null, $ctx);\n\n        return P\\Create::rejectionFor($error);\n    }\n\n    /**\n     * @return array<int|string, mixed>\n     */\n    private function getDefaultConf(EasyHandle $easy): array\n    {\n        $conf = [\n            '_headers'              => $easy->request->getHeaders(),\n            \\CURLOPT_CUSTOMREQUEST  => $easy->request->getMethod(),\n            \\CURLOPT_URL            => (string) $easy->request->getUri()->withFragment(''),\n            \\CURLOPT_RETURNTRANSFER => false,\n            \\CURLOPT_HEADER         => false,\n            \\CURLOPT_CONNECTTIMEOUT => 150,\n        ];\n\n        if (\\defined('CURLOPT_PROTOCOLS')) {\n            $conf[\\CURLOPT_PROTOCOLS] = \\CURLPROTO_HTTP | \\CURLPROTO_HTTPS;\n        }\n\n        $version = $easy->request->getProtocolVersion();\n        if ($version == 1.1) {\n            $conf[\\CURLOPT_HTTP_VERSION] = \\CURL_HTTP_VERSION_1_1;\n        } elseif ($version == 2.0) {\n            $conf[\\CURLOPT_HTTP_VERSION] = \\CURL_HTTP_VERSION_2_0;\n        } else {\n            $conf[\\CURLOPT_HTTP_VERSION] = \\CURL_HTTP_VERSION_1_0;\n        }\n\n        return $conf;\n    }\n\n    private function applyMethod(EasyHandle $easy, array &$conf): void\n    {\n        $body = $easy->request->getBody();\n        $size = $body->getSize();\n\n        if ($size === null || $size > 0) {\n            $this->applyBody($easy->request, $easy->options, $conf);\n            return;\n        }\n\n        $method = $easy->request->getMethod();\n        if ($method === 'PUT' || $method === 'POST') {\n            // See https://tools.ietf.org/html/rfc7230#section-3.3.2\n            if (!$easy->request->hasHeader('Content-Length')) {\n                $conf[\\CURLOPT_HTTPHEADER][] = 'Content-Length: 0';\n            }\n        } elseif ($method === 'HEAD') {\n            $conf[\\CURLOPT_NOBODY] = true;\n            unset(\n                $conf[\\CURLOPT_WRITEFUNCTION],\n                $conf[\\CURLOPT_READFUNCTION],\n                $conf[\\CURLOPT_FILE],\n                $conf[\\CURLOPT_INFILE]\n            );\n        }\n    }\n\n    private function applyBody(RequestInterface $request, array $options, array &$conf): void\n    {\n        $size = $request->hasHeader('Content-Length')\n            ? (int) $request->getHeaderLine('Content-Length')\n            : null;\n\n        // Send the body as a string if the size is less than 1MB OR if the\n        // [curl][body_as_string] request value is set.\n        if (($size !== null && $size < 1000000) || !empty($options['_body_as_string'])) {\n            $conf[\\CURLOPT_POSTFIELDS] = (string) $request->getBody();\n            // Don't duplicate the Content-Length header\n            $this->removeHeader('Content-Length', $conf);\n            $this->removeHeader('Transfer-Encoding', $conf);\n        } else {\n            $conf[\\CURLOPT_UPLOAD] = true;\n            if ($size !== null) {\n                $conf[\\CURLOPT_INFILESIZE] = $size;\n                $this->removeHeader('Content-Length', $conf);\n            }\n            $body = $request->getBody();\n            if ($body->isSeekable()) {\n                $body->rewind();\n            }\n            $conf[\\CURLOPT_READFUNCTION] = static function ($ch, $fd, $length) use ($body) {\n                return $body->read($length);\n            };\n        }\n\n        // If the Expect header is not present, prevent curl from adding it\n        if (!$request->hasHeader('Expect')) {\n            $conf[\\CURLOPT_HTTPHEADER][] = 'Expect:';\n        }\n\n        // cURL sometimes adds a content-type by default. Prevent this.\n        if (!$request->hasHeader('Content-Type')) {\n            $conf[\\CURLOPT_HTTPHEADER][] = 'Content-Type:';\n        }\n    }\n\n    private function applyHeaders(EasyHandle $easy, array &$conf): void\n    {\n        foreach ($conf['_headers'] as $name => $values) {\n            foreach ($values as $value) {\n                $value = (string) $value;\n                if ($value === '') {\n                    // cURL requires a special format for empty headers.\n                    // See https://github.com/guzzle/guzzle/issues/1882 for more details.\n                    $conf[\\CURLOPT_HTTPHEADER][] = \"$name;\";\n                } else {\n                    $conf[\\CURLOPT_HTTPHEADER][] = \"$name: $value\";\n                }\n            }\n        }\n\n        // Remove the Accept header if one was not set\n        if (!$easy->request->hasHeader('Accept')) {\n            $conf[\\CURLOPT_HTTPHEADER][] = 'Accept:';\n        }\n    }\n\n    /**\n     * Remove a header from the options array.\n     *\n     * @param string $name    Case-insensitive header to remove\n     * @param array  $options Array of options to modify\n     */\n    private function removeHeader(string $name, array &$options): void\n    {\n        foreach (\\array_keys($options['_headers']) as $key) {\n            if (!\\strcasecmp($key, $name)) {\n                unset($options['_headers'][$key]);\n                return;\n            }\n        }\n    }\n\n    private function applyHandlerOptions(EasyHandle $easy, array &$conf): void\n    {\n        $options = $easy->options;\n        if (isset($options['verify'])) {\n            if ($options['verify'] === false) {\n                unset($conf[\\CURLOPT_CAINFO]);\n                $conf[\\CURLOPT_SSL_VERIFYHOST] = 0;\n                $conf[\\CURLOPT_SSL_VERIFYPEER] = false;\n            } else {\n                $conf[\\CURLOPT_SSL_VERIFYHOST] = 2;\n                $conf[\\CURLOPT_SSL_VERIFYPEER] = true;\n                if (\\is_string($options['verify'])) {\n                    // Throw an error if the file/folder/link path is not valid or doesn't exist.\n                    if (!\\file_exists($options['verify'])) {\n                        throw new \\InvalidArgumentException(\"SSL CA bundle not found: {$options['verify']}\");\n                    }\n                    // If it's a directory or a link to a directory use CURLOPT_CAPATH.\n                    // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO.\n                    if (\n                        \\is_dir($options['verify']) ||\n                        (\n                            \\is_link($options['verify']) === true &&\n                            ($verifyLink = \\readlink($options['verify'])) !== false &&\n                            \\is_dir($verifyLink)\n                        )\n                    ) {\n                        $conf[\\CURLOPT_CAPATH] = $options['verify'];\n                    } else {\n                        $conf[\\CURLOPT_CAINFO] = $options['verify'];\n                    }\n                }\n            }\n        }\n\n        if (!isset($options['curl'][\\CURLOPT_ENCODING]) && !empty($options['decode_content'])) {\n            $accept = $easy->request->getHeaderLine('Accept-Encoding');\n            if ($accept) {\n                $conf[\\CURLOPT_ENCODING] = $accept;\n            } else {\n                // The empty string enables all available decoders and implicitly\n                // sets a matching 'Accept-Encoding' header.\n                $conf[\\CURLOPT_ENCODING] = '';\n                // But as the user did not specify any acceptable encodings we need\n                // to overwrite this implicit header with an empty one.\n                $conf[\\CURLOPT_HTTPHEADER][] = 'Accept-Encoding:';\n            }\n        }\n\n        if (!isset($options['sink'])) {\n            // Use a default temp stream if no sink was set.\n            $options['sink'] = \\GuzzleHttp\\Psr7\\Utils::tryFopen('php://temp', 'w+');\n        }\n        $sink = $options['sink'];\n        if (!\\is_string($sink)) {\n            $sink = \\GuzzleHttp\\Psr7\\Utils::streamFor($sink);\n        } elseif (!\\is_dir(\\dirname($sink))) {\n            // Ensure that the directory exists before failing in curl.\n            throw new \\RuntimeException(\\sprintf('Directory %s does not exist for sink value of %s', \\dirname($sink), $sink));\n        } else {\n            $sink = new LazyOpenStream($sink, 'w+');\n        }\n        $easy->sink = $sink;\n        $conf[\\CURLOPT_WRITEFUNCTION] = static function ($ch, $write) use ($sink): int {\n            return $sink->write($write);\n        };\n\n        $timeoutRequiresNoSignal = false;\n        if (isset($options['timeout'])) {\n            $timeoutRequiresNoSignal |= $options['timeout'] < 1;\n            $conf[\\CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000;\n        }\n\n        // CURL default value is CURL_IPRESOLVE_WHATEVER\n        if (isset($options['force_ip_resolve'])) {\n            if ('v4' === $options['force_ip_resolve']) {\n                $conf[\\CURLOPT_IPRESOLVE] = \\CURL_IPRESOLVE_V4;\n            } elseif ('v6' === $options['force_ip_resolve']) {\n                $conf[\\CURLOPT_IPRESOLVE] = \\CURL_IPRESOLVE_V6;\n            }\n        }\n\n        if (isset($options['connect_timeout'])) {\n            $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1;\n            $conf[\\CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000;\n        }\n\n        if ($timeoutRequiresNoSignal && \\strtoupper(\\substr(\\PHP_OS, 0, 3)) !== 'WIN') {\n            $conf[\\CURLOPT_NOSIGNAL] = true;\n        }\n\n        if (isset($options['proxy'])) {\n            if (!\\is_array($options['proxy'])) {\n                $conf[\\CURLOPT_PROXY] = $options['proxy'];\n            } else {\n                $scheme = $easy->request->getUri()->getScheme();\n                if (isset($options['proxy'][$scheme])) {\n                    $host = $easy->request->getUri()->getHost();\n                    if (!isset($options['proxy']['no']) || !Utils::isHostInNoProxy($host, $options['proxy']['no'])) {\n                        $conf[\\CURLOPT_PROXY] = $options['proxy'][$scheme];\n                    }\n                }\n            }\n        }\n\n        if (isset($options['cert'])) {\n            $cert = $options['cert'];\n            if (\\is_array($cert)) {\n                $conf[\\CURLOPT_SSLCERTPASSWD] = $cert[1];\n                $cert = $cert[0];\n            }\n            if (!\\file_exists($cert)) {\n                throw new \\InvalidArgumentException(\"SSL certificate not found: {$cert}\");\n            }\n            # OpenSSL (versions 0.9.3 and later) also support \"P12\" for PKCS#12-encoded files.\n            # see https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html\n            $ext = pathinfo($cert, \\PATHINFO_EXTENSION);\n            if (preg_match('#^(der|p12)$#i', $ext)) {\n                $conf[\\CURLOPT_SSLCERTTYPE] = strtoupper($ext);\n            }\n            $conf[\\CURLOPT_SSLCERT] = $cert;\n        }\n\n        if (isset($options['ssl_key'])) {\n            if (\\is_array($options['ssl_key'])) {\n                if (\\count($options['ssl_key']) === 2) {\n                    [$sslKey, $conf[\\CURLOPT_SSLKEYPASSWD]] = $options['ssl_key'];\n                } else {\n                    [$sslKey] = $options['ssl_key'];\n                }\n            }\n\n            $sslKey = $sslKey ?? $options['ssl_key'];\n\n            if (!\\file_exists($sslKey)) {\n                throw new \\InvalidArgumentException(\"SSL private key not found: {$sslKey}\");\n            }\n            $conf[\\CURLOPT_SSLKEY] = $sslKey;\n        }\n\n        if (isset($options['progress'])) {\n            $progress = $options['progress'];\n            if (!\\is_callable($progress)) {\n                throw new \\InvalidArgumentException('progress client option must be callable');\n            }\n            $conf[\\CURLOPT_NOPROGRESS] = false;\n            $conf[\\CURLOPT_PROGRESSFUNCTION] = static function ($resource, int $downloadSize, int $downloaded, int $uploadSize, int $uploaded) use ($progress) {\n                $progress($downloadSize, $downloaded, $uploadSize, $uploaded);\n            };\n        }\n\n        if (!empty($options['debug'])) {\n            $conf[\\CURLOPT_STDERR] = Utils::debugResource($options['debug']);\n            $conf[\\CURLOPT_VERBOSE] = true;\n        }\n    }\n\n    /**\n     * This function ensures that a response was set on a transaction. If one\n     * was not set, then the request is retried if possible. This error\n     * typically means you are sending a payload, curl encountered a\n     * \"Connection died, retrying a fresh connect\" error, tried to rewind the\n     * stream, and then encountered a \"necessary data rewind wasn't possible\"\n     * error, causing the request to be sent through curl_multi_info_read()\n     * without an error status.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $handler\n     */\n    private static function retryFailedRewind(callable $handler, EasyHandle $easy, array $ctx): PromiseInterface\n    {\n        try {\n            // Only rewind if the body has been read from.\n            $body = $easy->request->getBody();\n            if ($body->tell() > 0) {\n                $body->rewind();\n            }\n        } catch (\\RuntimeException $e) {\n            $ctx['error'] = 'The connection unexpectedly failed without '\n                . 'providing an error. The request would have been retried, '\n                . 'but attempting to rewind the request body failed. '\n                . 'Exception: ' . $e;\n            return self::createRejection($easy, $ctx);\n        }\n\n        // Retry no more than 3 times before giving up.\n        if (!isset($easy->options['_curl_retries'])) {\n            $easy->options['_curl_retries'] = 1;\n        } elseif ($easy->options['_curl_retries'] == 2) {\n            $ctx['error'] = 'The cURL request was retried 3 times '\n                . 'and did not succeed. The most likely reason for the failure '\n                . 'is that cURL was unable to rewind the body of the request '\n                . 'and subsequent retries resulted in the same error. Turn on '\n                . 'the debug option to see what went wrong. See '\n                . 'https://bugs.php.net/bug.php?id=47204 for more information.';\n            return self::createRejection($easy, $ctx);\n        } else {\n            $easy->options['_curl_retries']++;\n        }\n\n        return $handler($easy->request, $easy->options);\n    }\n\n    private function createHeaderFn(EasyHandle $easy): callable\n    {\n        if (isset($easy->options['on_headers'])) {\n            $onHeaders = $easy->options['on_headers'];\n\n            if (!\\is_callable($onHeaders)) {\n                throw new \\InvalidArgumentException('on_headers must be callable');\n            }\n        } else {\n            $onHeaders = null;\n        }\n\n        return static function ($ch, $h) use (\n            $onHeaders,\n            $easy,\n            &$startingResponse\n        ) {\n            $value = \\trim($h);\n            if ($value === '') {\n                $startingResponse = true;\n                try {\n                    $easy->createResponse();\n                } catch (\\Exception $e) {\n                    $easy->createResponseException = $e;\n                    return -1;\n                }\n                if ($onHeaders !== null) {\n                    try {\n                        $onHeaders($easy->response);\n                    } catch (\\Exception $e) {\n                        // Associate the exception with the handle and trigger\n                        // a curl header write error by returning 0.\n                        $easy->onHeadersException = $e;\n                        return -1;\n                    }\n                }\n            } elseif ($startingResponse) {\n                $startingResponse = false;\n                $easy->headers = [$value];\n            } else {\n                $easy->headers[] = $value;\n            }\n            return \\strlen($h);\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse Psr\\Http\\Message\\RequestInterface;\n\ninterface CurlFactoryInterface\n{\n    /**\n     * Creates a cURL handle resource.\n     *\n     * @param RequestInterface $request Request\n     * @param array            $options Transfer options\n     *\n     * @throws \\RuntimeException when an option cannot be applied\n     */\n    public function create(RequestInterface $request, array $options): EasyHandle;\n\n    /**\n     * Release an easy handle, allowing it to be reused or closed.\n     *\n     * This function must call unset on the easy handle's \"handle\" property.\n     */\n    public function release(EasyHandle $easy): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * HTTP handler that uses cURL easy handles as a transport layer.\n *\n * When using the CurlHandler, custom curl options can be specified as an\n * associative array of curl option constants mapping to values in the\n * **curl** key of the \"client\" key of the request.\n *\n * @final\n */\nclass CurlHandler\n{\n    /**\n     * @var CurlFactoryInterface\n     */\n    private $factory;\n\n    /**\n     * Accepts an associative array of options:\n     *\n     * - handle_factory: Optional curl factory used to create cURL handles.\n     *\n     * @param array{handle_factory?: ?CurlFactoryInterface} $options Array of options to use with the handler\n     */\n    public function __construct(array $options = [])\n    {\n        $this->factory = $options['handle_factory']\n            ?? new CurlFactory(3);\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        if (isset($options['delay'])) {\n            \\usleep($options['delay'] * 1000);\n        }\n\n        $easy = $this->factory->create($request, $options);\n        \\curl_exec($easy->handle);\n        $easy->errno = \\curl_errno($easy->handle);\n\n        return CurlFactory::finish($this, $easy, $this->factory);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\Promise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Returns an asynchronous response using curl_multi_* functions.\n *\n * When using the CurlMultiHandler, custom curl options can be specified as an\n * associative array of curl option constants mapping to values in the\n * **curl** key of the provided request options.\n *\n * @property resource|\\CurlMultiHandle $_mh Internal use only. Lazy loaded multi-handle.\n *\n * @final\n */\n#[\\AllowDynamicProperties]\nclass CurlMultiHandler\n{\n    /**\n     * @var CurlFactoryInterface\n     */\n    private $factory;\n\n    /**\n     * @var int\n     */\n    private $selectTimeout;\n\n    /**\n     * @var int Will be higher than 0 when `curl_multi_exec` is still running.\n     */\n    private $active = 0;\n\n    /**\n     * @var array Request entry handles, indexed by handle id in `addRequest`.\n     *\n     * @see CurlMultiHandler::addRequest\n     */\n    private $handles = [];\n\n    /**\n     * @var array<int, float> An array of delay times, indexed by handle id in `addRequest`.\n     *\n     * @see CurlMultiHandler::addRequest\n     */\n    private $delays = [];\n\n    /**\n     * @var array<mixed> An associative array of CURLMOPT_* options and corresponding values for curl_multi_setopt()\n     */\n    private $options = [];\n\n    /**\n     * This handler accepts the following options:\n     *\n     * - handle_factory: An optional factory  used to create curl handles\n     * - select_timeout: Optional timeout (in seconds) to block before timing\n     *   out while selecting curl handles. Defaults to 1 second.\n     * - options: An associative array of CURLMOPT_* options and\n     *   corresponding values for curl_multi_setopt()\n     */\n    public function __construct(array $options = [])\n    {\n        $this->factory = $options['handle_factory'] ?? new CurlFactory(50);\n\n        if (isset($options['select_timeout'])) {\n            $this->selectTimeout = $options['select_timeout'];\n        } elseif ($selectTimeout = Utils::getenv('GUZZLE_CURL_SELECT_TIMEOUT')) {\n            @trigger_error('Since guzzlehttp/guzzle 7.2.0: Using environment variable GUZZLE_CURL_SELECT_TIMEOUT is deprecated. Use option \"select_timeout\" instead.', \\E_USER_DEPRECATED);\n            $this->selectTimeout = (int) $selectTimeout;\n        } else {\n            $this->selectTimeout = 1;\n        }\n\n        $this->options = $options['options'] ?? [];\n    }\n\n    /**\n     * @param string $name\n     *\n     * @return resource|\\CurlMultiHandle\n     *\n     * @throws \\BadMethodCallException when another field as `_mh` will be gotten\n     * @throws \\RuntimeException       when curl can not initialize a multi handle\n     */\n    public function __get($name)\n    {\n        if ($name !== '_mh') {\n            throw new \\BadMethodCallException(\"Can not get other property as '_mh'.\");\n        }\n\n        $multiHandle = \\curl_multi_init();\n\n        if (false === $multiHandle) {\n            throw new \\RuntimeException('Can not initialize curl multi handle.');\n        }\n\n        $this->_mh = $multiHandle;\n\n        foreach ($this->options as $option => $value) {\n            // A warning is raised in case of a wrong option.\n            curl_multi_setopt($this->_mh, $option, $value);\n        }\n\n        return $this->_mh;\n    }\n\n    public function __destruct()\n    {\n        if (isset($this->_mh)) {\n            \\curl_multi_close($this->_mh);\n            unset($this->_mh);\n        }\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        $easy = $this->factory->create($request, $options);\n        $id = (int) $easy->handle;\n\n        $promise = new Promise(\n            [$this, 'execute'],\n            function () use ($id) {\n                return $this->cancel($id);\n            }\n        );\n\n        $this->addRequest(['easy' => $easy, 'deferred' => $promise]);\n\n        return $promise;\n    }\n\n    /**\n     * Ticks the curl event loop.\n     */\n    public function tick(): void\n    {\n        // Add any delayed handles if needed.\n        if ($this->delays) {\n            $currentTime = Utils::currentTime();\n            foreach ($this->delays as $id => $delay) {\n                if ($currentTime >= $delay) {\n                    unset($this->delays[$id]);\n                    \\curl_multi_add_handle(\n                        $this->_mh,\n                        $this->handles[$id]['easy']->handle\n                    );\n                }\n            }\n        }\n\n        // Step through the task queue which may add additional requests.\n        P\\Utils::queue()->run();\n\n        if ($this->active && \\curl_multi_select($this->_mh, $this->selectTimeout) === -1) {\n            // Perform a usleep if a select returns -1.\n            // See: https://bugs.php.net/bug.php?id=61141\n            \\usleep(250);\n        }\n\n        while (\\curl_multi_exec($this->_mh, $this->active) === \\CURLM_CALL_MULTI_PERFORM);\n\n        $this->processMessages();\n    }\n\n    /**\n     * Runs until all outstanding connections have completed.\n     */\n    public function execute(): void\n    {\n        $queue = P\\Utils::queue();\n\n        while ($this->handles || !$queue->isEmpty()) {\n            // If there are no transfers, then sleep for the next delay\n            if (!$this->active && $this->delays) {\n                \\usleep($this->timeToNext());\n            }\n            $this->tick();\n        }\n    }\n\n    private function addRequest(array $entry): void\n    {\n        $easy = $entry['easy'];\n        $id = (int) $easy->handle;\n        $this->handles[$id] = $entry;\n        if (empty($easy->options['delay'])) {\n            \\curl_multi_add_handle($this->_mh, $easy->handle);\n        } else {\n            $this->delays[$id] = Utils::currentTime() + ($easy->options['delay'] / 1000);\n        }\n    }\n\n    /**\n     * Cancels a handle from sending and removes references to it.\n     *\n     * @param int $id Handle ID to cancel and remove.\n     *\n     * @return bool True on success, false on failure.\n     */\n    private function cancel($id): bool\n    {\n        if (!is_int($id)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing an integer to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        // Cannot cancel if it has been processed.\n        if (!isset($this->handles[$id])) {\n            return false;\n        }\n\n        $handle = $this->handles[$id]['easy']->handle;\n        unset($this->delays[$id], $this->handles[$id]);\n        \\curl_multi_remove_handle($this->_mh, $handle);\n        \\curl_close($handle);\n\n        return true;\n    }\n\n    private function processMessages(): void\n    {\n        while ($done = \\curl_multi_info_read($this->_mh)) {\n            if ($done['msg'] !== \\CURLMSG_DONE) {\n                // if it's not done, then it would be premature to remove the handle. ref https://github.com/guzzle/guzzle/pull/2892#issuecomment-945150216\n                continue;\n            }\n            $id = (int) $done['handle'];\n            \\curl_multi_remove_handle($this->_mh, $done['handle']);\n\n            if (!isset($this->handles[$id])) {\n                // Probably was cancelled.\n                continue;\n            }\n\n            $entry = $this->handles[$id];\n            unset($this->handles[$id], $this->delays[$id]);\n            $entry['easy']->errno = $done['result'];\n            $entry['deferred']->resolve(\n                CurlFactory::finish($this, $entry['easy'], $this->factory)\n            );\n        }\n    }\n\n    private function timeToNext(): int\n    {\n        $currentTime = Utils::currentTime();\n        $nextTime = \\PHP_INT_MAX;\n        foreach ($this->delays as $time) {\n            if ($time < $nextTime) {\n                $nextTime = $time;\n            }\n        }\n\n        return ((int) \\max(0, $nextTime - $currentTime)) * 1000000;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Psr7\\Response;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Represents a cURL easy handle and the data it populates.\n *\n * @internal\n */\nfinal class EasyHandle\n{\n    /**\n     * @var resource|\\CurlHandle cURL resource\n     */\n    public $handle;\n\n    /**\n     * @var StreamInterface Where data is being written\n     */\n    public $sink;\n\n    /**\n     * @var array Received HTTP headers so far\n     */\n    public $headers = [];\n\n    /**\n     * @var ResponseInterface|null Received response (if any)\n     */\n    public $response;\n\n    /**\n     * @var RequestInterface Request being sent\n     */\n    public $request;\n\n    /**\n     * @var array Request options\n     */\n    public $options = [];\n\n    /**\n     * @var int cURL error number (if any)\n     */\n    public $errno = 0;\n\n    /**\n     * @var \\Throwable|null Exception during on_headers (if any)\n     */\n    public $onHeadersException;\n\n    /**\n     * @var \\Exception|null Exception during createResponse (if any)\n     */\n    public $createResponseException;\n\n    /**\n     * Attach a response to the easy handle based on the received headers.\n     *\n     * @throws \\RuntimeException if no headers have been received or the first\n     *                           header line is invalid.\n     */\n    public function createResponse(): void\n    {\n        [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($this->headers);\n\n        $normalizedKeys = Utils::normalizeHeaderKeys($headers);\n\n        if (!empty($this->options['decode_content']) && isset($normalizedKeys['content-encoding'])) {\n            $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];\n            unset($headers[$normalizedKeys['content-encoding']]);\n            if (isset($normalizedKeys['content-length'])) {\n                $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];\n\n                $bodyLength = (int) $this->sink->getSize();\n                if ($bodyLength) {\n                    $headers[$normalizedKeys['content-length']] = $bodyLength;\n                } else {\n                    unset($headers[$normalizedKeys['content-length']]);\n                }\n            }\n        }\n\n        // Attach a response to the easy handle with the parsed headers.\n        $this->response = new Response(\n            $status,\n            $headers,\n            $this->sink,\n            $ver,\n            $reason\n        );\n    }\n\n    /**\n     * @param string $name\n     *\n     * @return void\n     *\n     * @throws \\BadMethodCallException\n     */\n    public function __get($name)\n    {\n        $msg = $name === 'handle' ? 'The EasyHandle has been released' : 'Invalid property: ' . $name;\n        throw new \\BadMethodCallException($msg);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/HeaderProcessor.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Utils;\n\n/**\n * @internal\n */\nfinal class HeaderProcessor\n{\n    /**\n     * Returns the HTTP version, status code, reason phrase, and headers.\n     *\n     * @param string[] $headers\n     *\n     * @throws \\RuntimeException\n     *\n     * @return array{0:string, 1:int, 2:?string, 3:array}\n     */\n    public static function parseHeaders(array $headers): array\n    {\n        if ($headers === []) {\n            throw new \\RuntimeException('Expected a non-empty array of header data');\n        }\n\n        $parts = \\explode(' ', \\array_shift($headers), 3);\n        $version = \\explode('/', $parts[0])[1] ?? null;\n\n        if ($version === null) {\n            throw new \\RuntimeException('HTTP version missing from header data');\n        }\n\n        $status = $parts[1] ?? null;\n\n        if ($status === null) {\n            throw new \\RuntimeException('HTTP status code missing from header data');\n        }\n\n        return [$version, (int) $status, $parts[2] ?? null, Utils::headersFromLines($headers)];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\HandlerStack;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\TransferStats;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Handler that returns responses or throw exceptions from a queue.\n *\n * @final\n */\nclass MockHandler implements \\Countable\n{\n    /**\n     * @var array\n     */\n    private $queue = [];\n\n    /**\n     * @var RequestInterface|null\n     */\n    private $lastRequest;\n\n    /**\n     * @var array\n     */\n    private $lastOptions = [];\n\n    /**\n     * @var callable|null\n     */\n    private $onFulfilled;\n\n    /**\n     * @var callable|null\n     */\n    private $onRejected;\n\n    /**\n     * Creates a new MockHandler that uses the default handler stack list of\n     * middlewares.\n     *\n     * @param array|null    $queue       Array of responses, callables, or exceptions.\n     * @param callable|null $onFulfilled Callback to invoke when the return value is fulfilled.\n     * @param callable|null $onRejected  Callback to invoke when the return value is rejected.\n     */\n    public static function createWithMiddleware(array $queue = null, callable $onFulfilled = null, callable $onRejected = null): HandlerStack\n    {\n        return HandlerStack::create(new self($queue, $onFulfilled, $onRejected));\n    }\n\n    /**\n     * The passed in value must be an array of\n     * {@see \\Psr\\Http\\Message\\ResponseInterface} objects, Exceptions,\n     * callables, or Promises.\n     *\n     * @param array<int, mixed>|null $queue       The parameters to be passed to the append function, as an indexed array.\n     * @param callable|null          $onFulfilled Callback to invoke when the return value is fulfilled.\n     * @param callable|null          $onRejected  Callback to invoke when the return value is rejected.\n     */\n    public function __construct(array $queue = null, callable $onFulfilled = null, callable $onRejected = null)\n    {\n        $this->onFulfilled = $onFulfilled;\n        $this->onRejected = $onRejected;\n\n        if ($queue) {\n            // array_values included for BC\n            $this->append(...array_values($queue));\n        }\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        if (!$this->queue) {\n            throw new \\OutOfBoundsException('Mock queue is empty');\n        }\n\n        if (isset($options['delay']) && \\is_numeric($options['delay'])) {\n            \\usleep((int) $options['delay'] * 1000);\n        }\n\n        $this->lastRequest = $request;\n        $this->lastOptions = $options;\n        $response = \\array_shift($this->queue);\n\n        if (isset($options['on_headers'])) {\n            if (!\\is_callable($options['on_headers'])) {\n                throw new \\InvalidArgumentException('on_headers must be callable');\n            }\n            try {\n                $options['on_headers']($response);\n            } catch (\\Exception $e) {\n                $msg = 'An error was encountered during the on_headers event';\n                $response = new RequestException($msg, $request, $response, $e);\n            }\n        }\n\n        if (\\is_callable($response)) {\n            $response = $response($request, $options);\n        }\n\n        $response = $response instanceof \\Throwable\n            ? P\\Create::rejectionFor($response)\n            : P\\Create::promiseFor($response);\n\n        return $response->then(\n            function (?ResponseInterface $value) use ($request, $options) {\n                $this->invokeStats($request, $options, $value);\n                if ($this->onFulfilled) {\n                    ($this->onFulfilled)($value);\n                }\n\n                if ($value !== null && isset($options['sink'])) {\n                    $contents = (string) $value->getBody();\n                    $sink = $options['sink'];\n\n                    if (\\is_resource($sink)) {\n                        \\fwrite($sink, $contents);\n                    } elseif (\\is_string($sink)) {\n                        \\file_put_contents($sink, $contents);\n                    } elseif ($sink instanceof StreamInterface) {\n                        $sink->write($contents);\n                    }\n                }\n\n                return $value;\n            },\n            function ($reason) use ($request, $options) {\n                $this->invokeStats($request, $options, null, $reason);\n                if ($this->onRejected) {\n                    ($this->onRejected)($reason);\n                }\n                return P\\Create::rejectionFor($reason);\n            }\n        );\n    }\n\n    /**\n     * Adds one or more variadic requests, exceptions, callables, or promises\n     * to the queue.\n     *\n     * @param mixed ...$values\n     */\n    public function append(...$values): void\n    {\n        foreach ($values as $value) {\n            if ($value instanceof ResponseInterface\n                || $value instanceof \\Throwable\n                || $value instanceof PromiseInterface\n                || \\is_callable($value)\n            ) {\n                $this->queue[] = $value;\n            } else {\n                throw new \\TypeError('Expected a Response, Promise, Throwable or callable. Found ' . Utils::describeType($value));\n            }\n        }\n    }\n\n    /**\n     * Get the last received request.\n     */\n    public function getLastRequest(): ?RequestInterface\n    {\n        return $this->lastRequest;\n    }\n\n    /**\n     * Get the last received request options.\n     */\n    public function getLastOptions(): array\n    {\n        return $this->lastOptions;\n    }\n\n    /**\n     * Returns the number of remaining items in the queue.\n     */\n    public function count(): int\n    {\n        return \\count($this->queue);\n    }\n\n    public function reset(): void\n    {\n        $this->queue = [];\n    }\n\n    /**\n     * @param mixed $reason Promise or reason.\n     */\n    private function invokeStats(\n        RequestInterface $request,\n        array $options,\n        ResponseInterface $response = null,\n        $reason = null\n    ): void {\n        if (isset($options['on_stats'])) {\n            $transferTime = $options['transfer_time'] ?? 0;\n            $stats = new TransferStats($request, $response, $transferTime, $reason);\n            ($options['on_stats'])($stats);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\RequestOptions;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Provides basic proxies for handlers.\n *\n * @final\n */\nclass Proxy\n{\n    /**\n     * Sends synchronous requests to a specific handler while sending all other\n     * requests to another handler.\n     *\n     * @param callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface $default Handler used for normal responses\n     * @param callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface $sync    Handler used for synchronous responses.\n     *\n     * @return callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface Returns the composed handler.\n     */\n    public static function wrapSync(callable $default, callable $sync): callable\n    {\n        return static function (RequestInterface $request, array $options) use ($default, $sync): PromiseInterface {\n            return empty($options[RequestOptions::SYNCHRONOUS]) ? $default($request, $options) : $sync($request, $options);\n        };\n    }\n\n    /**\n     * Sends streaming requests to a streaming compatible handler while sending\n     * all other requests to a default handler.\n     *\n     * This, for example, could be useful for taking advantage of the\n     * performance benefits of curl while still supporting true streaming\n     * through the StreamHandler.\n     *\n     * @param callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface $default   Handler used for non-streaming responses\n     * @param callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface $streaming Handler used for streaming responses\n     *\n     * @return callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface Returns the composed handler.\n     */\n    public static function wrapStreaming(callable $default, callable $streaming): callable\n    {\n        return static function (RequestInterface $request, array $options) use ($default, $streaming): PromiseInterface {\n            return empty($options['stream']) ? $default($request, $options) : $streaming($request, $options);\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Handler;\n\nuse GuzzleHttp\\Exception\\ConnectException;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\FulfilledPromise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Psr7;\nuse GuzzleHttp\\TransferStats;\nuse GuzzleHttp\\Utils;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * HTTP handler that uses PHP's HTTP stream wrapper.\n *\n * @final\n */\nclass StreamHandler\n{\n    /**\n     * @var array\n     */\n    private $lastHeaders = [];\n\n    /**\n     * Sends an HTTP request.\n     *\n     * @param RequestInterface $request Request to send.\n     * @param array            $options Request transfer options.\n     */\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        // Sleep if there is a delay specified.\n        if (isset($options['delay'])) {\n            \\usleep($options['delay'] * 1000);\n        }\n\n        $startTime = isset($options['on_stats']) ? Utils::currentTime() : null;\n\n        try {\n            // Does not support the expect header.\n            $request = $request->withoutHeader('Expect');\n\n            // Append a content-length header if body size is zero to match\n            // cURL's behavior.\n            if (0 === $request->getBody()->getSize()) {\n                $request = $request->withHeader('Content-Length', '0');\n            }\n\n            return $this->createResponse(\n                $request,\n                $options,\n                $this->createStream($request, $options),\n                $startTime\n            );\n        } catch (\\InvalidArgumentException $e) {\n            throw $e;\n        } catch (\\Exception $e) {\n            // Determine if the error was a networking error.\n            $message = $e->getMessage();\n            // This list can probably get more comprehensive.\n            if (false !== \\strpos($message, 'getaddrinfo') // DNS lookup failed\n                || false !== \\strpos($message, 'Connection refused')\n                || false !== \\strpos($message, \"couldn't connect to host\") // error on HHVM\n                || false !== \\strpos($message, \"connection attempt failed\")\n            ) {\n                $e = new ConnectException($e->getMessage(), $request, $e);\n            } else {\n                $e = RequestException::wrapException($request, $e);\n            }\n            $this->invokeStats($options, $request, $startTime, null, $e);\n\n            return P\\Create::rejectionFor($e);\n        }\n    }\n\n    private function invokeStats(\n        array $options,\n        RequestInterface $request,\n        ?float $startTime,\n        ResponseInterface $response = null,\n        \\Throwable $error = null\n    ): void {\n        if (isset($options['on_stats'])) {\n            $stats = new TransferStats($request, $response, Utils::currentTime() - $startTime, $error, []);\n            ($options['on_stats'])($stats);\n        }\n    }\n\n    /**\n     * @param resource $stream\n     */\n    private function createResponse(RequestInterface $request, array $options, $stream, ?float $startTime): PromiseInterface\n    {\n        $hdrs = $this->lastHeaders;\n        $this->lastHeaders = [];\n\n        try {\n            [$ver, $status, $reason, $headers] = HeaderProcessor::parseHeaders($hdrs);\n        } catch (\\Exception $e) {\n            return P\\Create::rejectionFor(\n                new RequestException('An error was encountered while creating the response', $request, null, $e)\n            );\n        }\n\n        [$stream, $headers] = $this->checkDecode($options, $headers, $stream);\n        $stream = Psr7\\Utils::streamFor($stream);\n        $sink = $stream;\n\n        if (\\strcasecmp('HEAD', $request->getMethod())) {\n            $sink = $this->createSink($stream, $options);\n        }\n\n        try {\n            $response = new Psr7\\Response($status, $headers, $sink, $ver, $reason);\n        } catch (\\Exception $e) {\n            return P\\Create::rejectionFor(\n                new RequestException('An error was encountered while creating the response', $request, null, $e)\n            );\n        }\n\n        if (isset($options['on_headers'])) {\n            try {\n                $options['on_headers']($response);\n            } catch (\\Exception $e) {\n                return P\\Create::rejectionFor(\n                    new RequestException('An error was encountered during the on_headers event', $request, $response, $e)\n                );\n            }\n        }\n\n        // Do not drain when the request is a HEAD request because they have\n        // no body.\n        if ($sink !== $stream) {\n            $this->drain($stream, $sink, $response->getHeaderLine('Content-Length'));\n        }\n\n        $this->invokeStats($options, $request, $startTime, $response, null);\n\n        return new FulfilledPromise($response);\n    }\n\n    private function createSink(StreamInterface $stream, array $options): StreamInterface\n    {\n        if (!empty($options['stream'])) {\n            return $stream;\n        }\n\n        $sink = $options['sink'] ?? Psr7\\Utils::tryFopen('php://temp', 'r+');\n\n        return \\is_string($sink) ? new Psr7\\LazyOpenStream($sink, 'w+') : Psr7\\Utils::streamFor($sink);\n    }\n\n    /**\n     * @param resource $stream\n     */\n    private function checkDecode(array $options, array $headers, $stream): array\n    {\n        // Automatically decode responses when instructed.\n        if (!empty($options['decode_content'])) {\n            $normalizedKeys = Utils::normalizeHeaderKeys($headers);\n            if (isset($normalizedKeys['content-encoding'])) {\n                $encoding = $headers[$normalizedKeys['content-encoding']];\n                if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') {\n                    $stream = new Psr7\\InflateStream(Psr7\\Utils::streamFor($stream));\n                    $headers['x-encoded-content-encoding'] = $headers[$normalizedKeys['content-encoding']];\n\n                    // Remove content-encoding header\n                    unset($headers[$normalizedKeys['content-encoding']]);\n\n                    // Fix content-length header\n                    if (isset($normalizedKeys['content-length'])) {\n                        $headers['x-encoded-content-length'] = $headers[$normalizedKeys['content-length']];\n                        $length = (int) $stream->getSize();\n                        if ($length === 0) {\n                            unset($headers[$normalizedKeys['content-length']]);\n                        } else {\n                            $headers[$normalizedKeys['content-length']] = [$length];\n                        }\n                    }\n                }\n            }\n        }\n\n        return [$stream, $headers];\n    }\n\n    /**\n     * Drains the source stream into the \"sink\" client option.\n     *\n     * @param string $contentLength Header specifying the amount of\n     *                              data to read.\n     *\n     * @throws \\RuntimeException when the sink option is invalid.\n     */\n    private function drain(StreamInterface $source, StreamInterface $sink, string $contentLength): StreamInterface\n    {\n        // If a content-length header is provided, then stop reading once\n        // that number of bytes has been read. This can prevent infinitely\n        // reading from a stream when dealing with servers that do not honor\n        // Connection: Close headers.\n        Psr7\\Utils::copyToStream(\n            $source,\n            $sink,\n            (\\strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1\n        );\n\n        $sink->seek(0);\n        $source->close();\n\n        return $sink;\n    }\n\n    /**\n     * Create a resource and check to ensure it was created successfully\n     *\n     * @param callable $callback Callable that returns stream resource\n     *\n     * @return resource\n     *\n     * @throws \\RuntimeException on error\n     */\n    private function createResource(callable $callback)\n    {\n        $errors = [];\n        \\set_error_handler(static function ($_, $msg, $file, $line) use (&$errors): bool {\n            $errors[] = [\n                'message' => $msg,\n                'file'    => $file,\n                'line'    => $line\n            ];\n            return true;\n        });\n\n        try {\n            $resource = $callback();\n        } finally {\n            \\restore_error_handler();\n        }\n\n        if (!$resource) {\n            $message = 'Error creating resource: ';\n            foreach ($errors as $err) {\n                foreach ($err as $key => $value) {\n                    $message .= \"[$key] $value\" . \\PHP_EOL;\n                }\n            }\n            throw new \\RuntimeException(\\trim($message));\n        }\n\n        return $resource;\n    }\n\n    /**\n     * @return resource\n     */\n    private function createStream(RequestInterface $request, array $options)\n    {\n        static $methods;\n        if (!$methods) {\n            $methods = \\array_flip(\\get_class_methods(__CLASS__));\n        }\n\n        if (!\\in_array($request->getUri()->getScheme(), ['http', 'https'])) {\n            throw new RequestException(\\sprintf(\"The scheme '%s' is not supported.\", $request->getUri()->getScheme()), $request);\n        }\n\n        // HTTP/1.1 streams using the PHP stream wrapper require a\n        // Connection: close header\n        if ($request->getProtocolVersion() == '1.1'\n            && !$request->hasHeader('Connection')\n        ) {\n            $request = $request->withHeader('Connection', 'close');\n        }\n\n        // Ensure SSL is verified by default\n        if (!isset($options['verify'])) {\n            $options['verify'] = true;\n        }\n\n        $params = [];\n        $context = $this->getDefaultContext($request);\n\n        if (isset($options['on_headers']) && !\\is_callable($options['on_headers'])) {\n            throw new \\InvalidArgumentException('on_headers must be callable');\n        }\n\n        if (!empty($options)) {\n            foreach ($options as $key => $value) {\n                $method = \"add_{$key}\";\n                if (isset($methods[$method])) {\n                    $this->{$method}($request, $context, $value, $params);\n                }\n            }\n        }\n\n        if (isset($options['stream_context'])) {\n            if (!\\is_array($options['stream_context'])) {\n                throw new \\InvalidArgumentException('stream_context must be an array');\n            }\n            $context = \\array_replace_recursive($context, $options['stream_context']);\n        }\n\n        // Microsoft NTLM authentication only supported with curl handler\n        if (isset($options['auth'][2]) && 'ntlm' === $options['auth'][2]) {\n            throw new \\InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler');\n        }\n\n        $uri = $this->resolveHost($request, $options);\n\n        $contextResource = $this->createResource(\n            static function () use ($context, $params) {\n                return \\stream_context_create($context, $params);\n            }\n        );\n\n        return $this->createResource(\n            function () use ($uri, &$http_response_header, $contextResource, $context, $options, $request) {\n                $resource = @\\fopen((string) $uri, 'r', false, $contextResource);\n                $this->lastHeaders = $http_response_header ?? [];\n\n                if (false === $resource) {\n                    throw new ConnectException(sprintf('Connection refused for URI %s', $uri), $request, null, $context);\n                }\n\n                if (isset($options['read_timeout'])) {\n                    $readTimeout = $options['read_timeout'];\n                    $sec = (int) $readTimeout;\n                    $usec = ($readTimeout - $sec) * 100000;\n                    \\stream_set_timeout($resource, $sec, $usec);\n                }\n\n                return $resource;\n            }\n        );\n    }\n\n    private function resolveHost(RequestInterface $request, array $options): UriInterface\n    {\n        $uri = $request->getUri();\n\n        if (isset($options['force_ip_resolve']) && !\\filter_var($uri->getHost(), \\FILTER_VALIDATE_IP)) {\n            if ('v4' === $options['force_ip_resolve']) {\n                $records = \\dns_get_record($uri->getHost(), \\DNS_A);\n                if (false === $records || !isset($records[0]['ip'])) {\n                    throw new ConnectException(\\sprintf(\"Could not resolve IPv4 address for host '%s'\", $uri->getHost()), $request);\n                }\n                return $uri->withHost($records[0]['ip']);\n            }\n            if ('v6' === $options['force_ip_resolve']) {\n                $records = \\dns_get_record($uri->getHost(), \\DNS_AAAA);\n                if (false === $records || !isset($records[0]['ipv6'])) {\n                    throw new ConnectException(\\sprintf(\"Could not resolve IPv6 address for host '%s'\", $uri->getHost()), $request);\n                }\n                return $uri->withHost('[' . $records[0]['ipv6'] . ']');\n            }\n        }\n\n        return $uri;\n    }\n\n    private function getDefaultContext(RequestInterface $request): array\n    {\n        $headers = '';\n        foreach ($request->getHeaders() as $name => $value) {\n            foreach ($value as $val) {\n                $headers .= \"$name: $val\\r\\n\";\n            }\n        }\n\n        $context = [\n            'http' => [\n                'method'           => $request->getMethod(),\n                'header'           => $headers,\n                'protocol_version' => $request->getProtocolVersion(),\n                'ignore_errors'    => true,\n                'follow_location'  => 0,\n            ],\n            'ssl' => [\n                'peer_name' => $request->getUri()->getHost(),\n            ],\n        ];\n\n        $body = (string) $request->getBody();\n\n        if (!empty($body)) {\n            $context['http']['content'] = $body;\n            // Prevent the HTTP handler from adding a Content-Type header.\n            if (!$request->hasHeader('Content-Type')) {\n                $context['http']['header'] .= \"Content-Type:\\r\\n\";\n            }\n        }\n\n        $context['http']['header'] = \\rtrim($context['http']['header']);\n\n        return $context;\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_proxy(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        $uri = null;\n\n        if (!\\is_array($value)) {\n            $uri = $value;\n        } else {\n            $scheme = $request->getUri()->getScheme();\n            if (isset($value[$scheme])) {\n                if (!isset($value['no']) || !Utils::isHostInNoProxy($request->getUri()->getHost(), $value['no'])) {\n                    $uri = $value[$scheme];\n                }\n            }\n        }\n\n        if (!$uri) {\n            return;\n        }\n\n        $parsed = $this->parse_proxy($uri);\n        $options['http']['proxy'] = $parsed['proxy'];\n\n        if ($parsed['auth']) {\n            if (!isset($options['http']['header'])) {\n                $options['http']['header'] = [];\n            }\n            $options['http']['header'] .= \"\\r\\nProxy-Authorization: {$parsed['auth']}\";\n        }\n    }\n\n    /**\n     * Parses the given proxy URL to make it compatible with the format PHP's stream context expects.\n     */\n    private function parse_proxy(string $url): array\n    {\n        $parsed = \\parse_url($url);\n\n        if ($parsed !== false && isset($parsed['scheme']) && $parsed['scheme'] === 'http') {\n            if (isset($parsed['host']) && isset($parsed['port'])) {\n                $auth = null;\n                if (isset($parsed['user']) && isset($parsed['pass'])) {\n                    $auth = \\base64_encode(\"{$parsed['user']}:{$parsed['pass']}\");\n                }\n\n                return [\n                    'proxy' => \"tcp://{$parsed['host']}:{$parsed['port']}\",\n                    'auth' => $auth ? \"Basic {$auth}\" : null,\n                ];\n            }\n        }\n\n        // Return proxy as-is.\n        return [\n            'proxy' => $url,\n            'auth' => null,\n        ];\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_timeout(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if ($value > 0) {\n            $options['http']['timeout'] = $value;\n        }\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_verify(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if ($value === false) {\n            $options['ssl']['verify_peer'] = false;\n            $options['ssl']['verify_peer_name'] = false;\n\n            return;\n        }\n\n        if (\\is_string($value)) {\n            $options['ssl']['cafile'] = $value;\n            if (!\\file_exists($value)) {\n                throw new \\RuntimeException(\"SSL CA bundle not found: $value\");\n            }\n        } elseif ($value !== true) {\n            throw new \\InvalidArgumentException('Invalid verify request option');\n        }\n\n        $options['ssl']['verify_peer'] = true;\n        $options['ssl']['verify_peer_name'] = true;\n        $options['ssl']['allow_self_signed'] = false;\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_cert(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if (\\is_array($value)) {\n            $options['ssl']['passphrase'] = $value[1];\n            $value = $value[0];\n        }\n\n        if (!\\file_exists($value)) {\n            throw new \\RuntimeException(\"SSL certificate not found: {$value}\");\n        }\n\n        $options['ssl']['local_cert'] = $value;\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_progress(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        self::addNotification(\n            $params,\n            static function ($code, $a, $b, $c, $transferred, $total) use ($value) {\n                if ($code == \\STREAM_NOTIFY_PROGRESS) {\n                    // The upload progress cannot be determined. Use 0 for cURL compatibility:\n                    // https://curl.se/libcurl/c/CURLOPT_PROGRESSFUNCTION.html\n                    $value($total, $transferred, 0, 0);\n                }\n            }\n        );\n    }\n\n    /**\n     * @param mixed $value as passed via Request transfer options.\n     */\n    private function add_debug(RequestInterface $request, array &$options, $value, array &$params): void\n    {\n        if ($value === false) {\n            return;\n        }\n\n        static $map = [\n            \\STREAM_NOTIFY_CONNECT       => 'CONNECT',\n            \\STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED',\n            \\STREAM_NOTIFY_AUTH_RESULT   => 'AUTH_RESULT',\n            \\STREAM_NOTIFY_MIME_TYPE_IS  => 'MIME_TYPE_IS',\n            \\STREAM_NOTIFY_FILE_SIZE_IS  => 'FILE_SIZE_IS',\n            \\STREAM_NOTIFY_REDIRECTED    => 'REDIRECTED',\n            \\STREAM_NOTIFY_PROGRESS      => 'PROGRESS',\n            \\STREAM_NOTIFY_FAILURE       => 'FAILURE',\n            \\STREAM_NOTIFY_COMPLETED     => 'COMPLETED',\n            \\STREAM_NOTIFY_RESOLVE       => 'RESOLVE',\n        ];\n        static $args = ['severity', 'message', 'message_code', 'bytes_transferred', 'bytes_max'];\n\n        $value = Utils::debugResource($value);\n        $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment('');\n        self::addNotification(\n            $params,\n            static function (int $code, ...$passed) use ($ident, $value, $map, $args): void {\n                \\fprintf($value, '<%s> [%s] ', $ident, $map[$code]);\n                foreach (\\array_filter($passed) as $i => $v) {\n                    \\fwrite($value, $args[$i] . ': \"' . $v . '\" ');\n                }\n                \\fwrite($value, \"\\n\");\n            }\n        );\n    }\n\n    private static function addNotification(array &$params, callable $notify): void\n    {\n        // Wrap the existing function if needed.\n        if (!isset($params['notification'])) {\n            $params['notification'] = $notify;\n        } else {\n            $params['notification'] = self::callArray([\n                $params['notification'],\n                $notify\n            ]);\n        }\n    }\n\n    private static function callArray(array $functions): callable\n    {\n        return static function (...$args) use ($functions) {\n            foreach ($functions as $fn) {\n                $fn(...$args);\n            }\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/HandlerStack.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Creates a composed Guzzle handler function by stacking middlewares on top of\n * an HTTP handler function.\n *\n * @final\n */\nclass HandlerStack\n{\n    /**\n     * @var (callable(RequestInterface, array): PromiseInterface)|null\n     */\n    private $handler;\n\n    /**\n     * @var array{(callable(callable(RequestInterface, array): PromiseInterface): callable), (string|null)}[]\n     */\n    private $stack = [];\n\n    /**\n     * @var (callable(RequestInterface, array): PromiseInterface)|null\n     */\n    private $cached;\n\n    /**\n     * Creates a default handler stack that can be used by clients.\n     *\n     * The returned handler will wrap the provided handler or use the most\n     * appropriate default handler for your system. The returned HandlerStack has\n     * support for cookies, redirects, HTTP error exceptions, and preparing a body\n     * before sending.\n     *\n     * The returned handler stack can be passed to a client in the \"handler\"\n     * option.\n     *\n     * @param (callable(RequestInterface, array): PromiseInterface)|null $handler HTTP handler function to use with the stack. If no\n     *                                                                            handler is provided, the best handler for your\n     *                                                                            system will be utilized.\n     */\n    public static function create(?callable $handler = null): self\n    {\n        $stack = new self($handler ?: Utils::chooseHandler());\n        $stack->push(Middleware::httpErrors(), 'http_errors');\n        $stack->push(Middleware::redirect(), 'allow_redirects');\n        $stack->push(Middleware::cookies(), 'cookies');\n        $stack->push(Middleware::prepareBody(), 'prepare_body');\n\n        return $stack;\n    }\n\n    /**\n     * @param (callable(RequestInterface, array): PromiseInterface)|null $handler Underlying HTTP handler.\n     */\n    public function __construct(callable $handler = null)\n    {\n        $this->handler = $handler;\n    }\n\n    /**\n     * Invokes the handler stack as a composed handler\n     *\n     * @return ResponseInterface|PromiseInterface\n     */\n    public function __invoke(RequestInterface $request, array $options)\n    {\n        $handler = $this->resolve();\n\n        return $handler($request, $options);\n    }\n\n    /**\n     * Dumps a string representation of the stack.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        $depth = 0;\n        $stack = [];\n\n        if ($this->handler !== null) {\n            $stack[] = \"0) Handler: \" . $this->debugCallable($this->handler);\n        }\n\n        $result = '';\n        foreach (\\array_reverse($this->stack) as $tuple) {\n            $depth++;\n            $str = \"{$depth}) Name: '{$tuple[1]}', \";\n            $str .= \"Function: \" . $this->debugCallable($tuple[0]);\n            $result = \"> {$str}\\n{$result}\";\n            $stack[] = $str;\n        }\n\n        foreach (\\array_keys($stack) as $k) {\n            $result .= \"< {$stack[$k]}\\n\";\n        }\n\n        return $result;\n    }\n\n    /**\n     * Set the HTTP handler that actually returns a promise.\n     *\n     * @param callable(RequestInterface, array): PromiseInterface $handler Accepts a request and array of options and\n     *                                                                     returns a Promise.\n     */\n    public function setHandler(callable $handler): void\n    {\n        $this->handler = $handler;\n        $this->cached = null;\n    }\n\n    /**\n     * Returns true if the builder has a handler.\n     */\n    public function hasHandler(): bool\n    {\n        return $this->handler !== null ;\n    }\n\n    /**\n     * Unshift a middleware to the bottom of the stack.\n     *\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $name       Name to register for this middleware.\n     */\n    public function unshift(callable $middleware, ?string $name = null): void\n    {\n        \\array_unshift($this->stack, [$middleware, $name]);\n        $this->cached = null;\n    }\n\n    /**\n     * Push a middleware to the top of the stack.\n     *\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $name       Name to register for this middleware.\n     */\n    public function push(callable $middleware, string $name = ''): void\n    {\n        $this->stack[] = [$middleware, $name];\n        $this->cached = null;\n    }\n\n    /**\n     * Add a middleware before another middleware by name.\n     *\n     * @param string                       $findName   Middleware to find\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $withName   Name to register for this middleware.\n     */\n    public function before(string $findName, callable $middleware, string $withName = ''): void\n    {\n        $this->splice($findName, $withName, $middleware, true);\n    }\n\n    /**\n     * Add a middleware after another middleware by name.\n     *\n     * @param string                       $findName   Middleware to find\n     * @param callable(callable): callable $middleware Middleware function\n     * @param string                       $withName   Name to register for this middleware.\n     */\n    public function after(string $findName, callable $middleware, string $withName = ''): void\n    {\n        $this->splice($findName, $withName, $middleware, false);\n    }\n\n    /**\n     * Remove a middleware by instance or name from the stack.\n     *\n     * @param callable|string $remove Middleware to remove by instance or name.\n     */\n    public function remove($remove): void\n    {\n        if (!is_string($remove) && !is_callable($remove)) {\n            trigger_deprecation('guzzlehttp/guzzle', '7.4', 'Not passing a callable or string to %s::%s() is deprecated and will cause an error in 8.0.', __CLASS__, __FUNCTION__);\n        }\n\n        $this->cached = null;\n        $idx = \\is_callable($remove) ? 0 : 1;\n        $this->stack = \\array_values(\\array_filter(\n            $this->stack,\n            static function ($tuple) use ($idx, $remove) {\n                return $tuple[$idx] !== $remove;\n            }\n        ));\n    }\n\n    /**\n     * Compose the middleware and handler into a single callable function.\n     *\n     * @return callable(RequestInterface, array): PromiseInterface\n     */\n    public function resolve(): callable\n    {\n        if ($this->cached === null) {\n            if (($prev = $this->handler) === null) {\n                throw new \\LogicException('No handler has been specified');\n            }\n\n            foreach (\\array_reverse($this->stack) as $fn) {\n                /** @var callable(RequestInterface, array): PromiseInterface $prev */\n                $prev = $fn[0]($prev);\n            }\n\n            $this->cached = $prev;\n        }\n\n        return $this->cached;\n    }\n\n    private function findByName(string $name): int\n    {\n        foreach ($this->stack as $k => $v) {\n            if ($v[1] === $name) {\n                return $k;\n            }\n        }\n\n        throw new \\InvalidArgumentException(\"Middleware not found: $name\");\n    }\n\n    /**\n     * Splices a function into the middleware list at a specific position.\n     */\n    private function splice(string $findName, string $withName, callable $middleware, bool $before): void\n    {\n        $this->cached = null;\n        $idx = $this->findByName($findName);\n        $tuple = [$middleware, $withName];\n\n        if ($before) {\n            if ($idx === 0) {\n                \\array_unshift($this->stack, $tuple);\n            } else {\n                $replacement = [$tuple, $this->stack[$idx]];\n                \\array_splice($this->stack, $idx, 1, $replacement);\n            }\n        } elseif ($idx === \\count($this->stack) - 1) {\n            $this->stack[] = $tuple;\n        } else {\n            $replacement = [$this->stack[$idx], $tuple];\n            \\array_splice($this->stack, $idx, 1, $replacement);\n        }\n    }\n\n    /**\n     * Provides a debug string for a given callable.\n     *\n     * @param callable|string $fn Function to write as a string.\n     */\n    private function debugCallable($fn): string\n    {\n        if (\\is_string($fn)) {\n            return \"callable({$fn})\";\n        }\n\n        if (\\is_array($fn)) {\n            return \\is_string($fn[0])\n                ? \"callable({$fn[0]}::{$fn[1]})\"\n                : \"callable(['\" . \\get_class($fn[0]) . \"', '{$fn[1]}'])\";\n        }\n\n        /** @var object $fn */\n        return 'callable(' . \\spl_object_hash($fn) . ')';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/MessageFormatter.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\MessageInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Formats log messages using variable substitutions for requests, responses,\n * and other transactional data.\n *\n * The following variable substitutions are supported:\n *\n * - {request}:        Full HTTP request message\n * - {response}:       Full HTTP response message\n * - {ts}:             ISO 8601 date in GMT\n * - {date_iso_8601}   ISO 8601 date in GMT\n * - {date_common_log} Apache common log date using the configured timezone.\n * - {host}:           Host of the request\n * - {method}:         Method of the request\n * - {uri}:            URI of the request\n * - {version}:        Protocol version\n * - {target}:         Request target of the request (path + query + fragment)\n * - {hostname}:       Hostname of the machine that sent the request\n * - {code}:           Status code of the response (if available)\n * - {phrase}:         Reason phrase of the response  (if available)\n * - {error}:          Any error messages (if available)\n * - {req_header_*}:   Replace `*` with the lowercased name of a request header to add to the message\n * - {res_header_*}:   Replace `*` with the lowercased name of a response header to add to the message\n * - {req_headers}:    Request headers\n * - {res_headers}:    Response headers\n * - {req_body}:       Request body\n * - {res_body}:       Response body\n *\n * @final\n */\nclass MessageFormatter implements MessageFormatterInterface\n{\n    /**\n     * Apache Common Log Format.\n     *\n     * @link https://httpd.apache.org/docs/2.4/logs.html#common\n     *\n     * @var string\n     */\n    public const CLF = \"{hostname} {req_header_User-Agent} - [{date_common_log}] \\\"{method} {target} HTTP/{version}\\\" {code} {res_header_Content-Length}\";\n    public const DEBUG = \">>>>>>>>\\n{request}\\n<<<<<<<<\\n{response}\\n--------\\n{error}\";\n    public const SHORT = '[{ts}] \"{method} {target} HTTP/{version}\" {code}';\n\n    /**\n     * @var string Template used to format log messages\n     */\n    private $template;\n\n    /**\n     * @param string $template Log message template\n     */\n    public function __construct(?string $template = self::CLF)\n    {\n        $this->template = $template ?: self::CLF;\n    }\n\n    /**\n     * Returns a formatted message string.\n     *\n     * @param RequestInterface       $request  Request that was sent\n     * @param ResponseInterface|null $response Response that was received\n     * @param \\Throwable|null        $error    Exception that was received\n     */\n    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\\Throwable $error = null): string\n    {\n        $cache = [];\n\n        /** @var string */\n        return \\preg_replace_callback(\n            '/{\\s*([A-Za-z_\\-\\.0-9]+)\\s*}/',\n            function (array $matches) use ($request, $response, $error, &$cache) {\n                if (isset($cache[$matches[1]])) {\n                    return $cache[$matches[1]];\n                }\n\n                $result = '';\n                switch ($matches[1]) {\n                    case 'request':\n                        $result = Psr7\\Message::toString($request);\n                        break;\n                    case 'response':\n                        $result = $response ? Psr7\\Message::toString($response) : '';\n                        break;\n                    case 'req_headers':\n                        $result = \\trim($request->getMethod()\n                                . ' ' . $request->getRequestTarget())\n                            . ' HTTP/' . $request->getProtocolVersion() . \"\\r\\n\"\n                            . $this->headers($request);\n                        break;\n                    case 'res_headers':\n                        $result = $response ?\n                            \\sprintf(\n                                'HTTP/%s %d %s',\n                                $response->getProtocolVersion(),\n                                $response->getStatusCode(),\n                                $response->getReasonPhrase()\n                            ) . \"\\r\\n\" . $this->headers($response)\n                            : 'NULL';\n                        break;\n                    case 'req_body':\n                        $result = $request->getBody()->__toString();\n                        break;\n                    case 'res_body':\n                        if (!$response instanceof ResponseInterface) {\n                            $result = 'NULL';\n                            break;\n                        }\n\n                        $body = $response->getBody();\n\n                        if (!$body->isSeekable()) {\n                            $result = 'RESPONSE_NOT_LOGGEABLE';\n                            break;\n                        }\n\n                        $result = $response->getBody()->__toString();\n                        break;\n                    case 'ts':\n                    case 'date_iso_8601':\n                        $result = \\gmdate('c');\n                        break;\n                    case 'date_common_log':\n                        $result = \\date('d/M/Y:H:i:s O');\n                        break;\n                    case 'method':\n                        $result = $request->getMethod();\n                        break;\n                    case 'version':\n                        $result = $request->getProtocolVersion();\n                        break;\n                    case 'uri':\n                    case 'url':\n                        $result = $request->getUri()->__toString();\n                        break;\n                    case 'target':\n                        $result = $request->getRequestTarget();\n                        break;\n                    case 'req_version':\n                        $result = $request->getProtocolVersion();\n                        break;\n                    case 'res_version':\n                        $result = $response\n                            ? $response->getProtocolVersion()\n                            : 'NULL';\n                        break;\n                    case 'host':\n                        $result = $request->getHeaderLine('Host');\n                        break;\n                    case 'hostname':\n                        $result = \\gethostname();\n                        break;\n                    case 'code':\n                        $result = $response ? $response->getStatusCode() : 'NULL';\n                        break;\n                    case 'phrase':\n                        $result = $response ? $response->getReasonPhrase() : 'NULL';\n                        break;\n                    case 'error':\n                        $result = $error ? $error->getMessage() : 'NULL';\n                        break;\n                    default:\n                        // handle prefixed dynamic headers\n                        if (\\strpos($matches[1], 'req_header_') === 0) {\n                            $result = $request->getHeaderLine(\\substr($matches[1], 11));\n                        } elseif (\\strpos($matches[1], 'res_header_') === 0) {\n                            $result = $response\n                                ? $response->getHeaderLine(\\substr($matches[1], 11))\n                                : 'NULL';\n                        }\n                }\n\n                $cache[$matches[1]] = $result;\n                return $result;\n            },\n            $this->template\n        );\n    }\n\n    /**\n     * Get headers from message as string\n     */\n    private function headers(MessageInterface $message): string\n    {\n        $result = '';\n        foreach ($message->getHeaders() as $name => $values) {\n            $result .= $name . ': ' . \\implode(', ', $values) . \"\\r\\n\";\n        }\n\n        return \\trim($result);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\ninterface MessageFormatterInterface\n{\n    /**\n     * Returns a formatted message string.\n     *\n     * @param RequestInterface       $request  Request that was sent\n     * @param ResponseInterface|null $response Response that was received\n     * @param \\Throwable|null        $error    Exception that was received\n     */\n    public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\\Throwable $error = null): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Middleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Cookie\\CookieJarInterface;\nuse GuzzleHttp\\Exception\\RequestException;\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * Functions used to create and wrap handlers with handler middleware.\n */\nfinal class Middleware\n{\n    /**\n     * Middleware that adds cookies to requests.\n     *\n     * The options array must be set to a CookieJarInterface in order to use\n     * cookies. This is typically handled for you by a client.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function cookies(): callable\n    {\n        return static function (callable $handler): callable {\n            return static function ($request, array $options) use ($handler) {\n                if (empty($options['cookies'])) {\n                    return $handler($request, $options);\n                } elseif (!($options['cookies'] instanceof CookieJarInterface)) {\n                    throw new \\InvalidArgumentException('cookies must be an instance of GuzzleHttp\\Cookie\\CookieJarInterface');\n                }\n                $cookieJar = $options['cookies'];\n                $request = $cookieJar->withCookieHeader($request);\n                return $handler($request, $options)\n                    ->then(\n                        static function (ResponseInterface $response) use ($cookieJar, $request): ResponseInterface {\n                            $cookieJar->extractCookies($request, $response);\n                            return $response;\n                        }\n                    );\n            };\n        };\n    }\n\n    /**\n     * Middleware that throws exceptions for 4xx or 5xx responses when the\n     * \"http_errors\" request option is set to true.\n     *\n     * @param BodySummarizerInterface|null $bodySummarizer The body summarizer to use in exception messages.\n     *\n     * @return callable(callable): callable Returns a function that accepts the next handler.\n     */\n    public static function httpErrors(BodySummarizerInterface $bodySummarizer = null): callable\n    {\n        return static function (callable $handler) use ($bodySummarizer): callable {\n            return static function ($request, array $options) use ($handler, $bodySummarizer) {\n                if (empty($options['http_errors'])) {\n                    return $handler($request, $options);\n                }\n                return $handler($request, $options)->then(\n                    static function (ResponseInterface $response) use ($request, $bodySummarizer) {\n                        $code = $response->getStatusCode();\n                        if ($code < 400) {\n                            return $response;\n                        }\n                        throw RequestException::create($request, $response, null, [], $bodySummarizer);\n                    }\n                );\n            };\n        };\n    }\n\n    /**\n     * Middleware that pushes history data to an ArrayAccess container.\n     *\n     * @param array|\\ArrayAccess<int, array> $container Container to hold the history (by reference).\n     *\n     * @return callable(callable): callable Returns a function that accepts the next handler.\n     *\n     * @throws \\InvalidArgumentException if container is not an array or ArrayAccess.\n     */\n    public static function history(&$container): callable\n    {\n        if (!\\is_array($container) && !$container instanceof \\ArrayAccess) {\n            throw new \\InvalidArgumentException('history container must be an array or object implementing ArrayAccess');\n        }\n\n        return static function (callable $handler) use (&$container): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, &$container) {\n                return $handler($request, $options)->then(\n                    static function ($value) use ($request, &$container, $options) {\n                        $container[] = [\n                            'request'  => $request,\n                            'response' => $value,\n                            'error'    => null,\n                            'options'  => $options\n                        ];\n                        return $value;\n                    },\n                    static function ($reason) use ($request, &$container, $options) {\n                        $container[] = [\n                            'request'  => $request,\n                            'response' => null,\n                            'error'    => $reason,\n                            'options'  => $options\n                        ];\n                        return P\\Create::rejectionFor($reason);\n                    }\n                );\n            };\n        };\n    }\n\n    /**\n     * Middleware that invokes a callback before and after sending a request.\n     *\n     * The provided listener cannot modify or alter the response. It simply\n     * \"taps\" into the chain to be notified before returning the promise. The\n     * before listener accepts a request and options array, and the after\n     * listener accepts a request, options array, and response promise.\n     *\n     * @param callable $before Function to invoke before forwarding the request.\n     * @param callable $after  Function invoked after forwarding.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function tap(callable $before = null, callable $after = null): callable\n    {\n        return static function (callable $handler) use ($before, $after): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, $before, $after) {\n                if ($before) {\n                    $before($request, $options);\n                }\n                $response = $handler($request, $options);\n                if ($after) {\n                    $after($request, $options, $response);\n                }\n                return $response;\n            };\n        };\n    }\n\n    /**\n     * Middleware that handles request redirects.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function redirect(): callable\n    {\n        return static function (callable $handler): RedirectMiddleware {\n            return new RedirectMiddleware($handler);\n        };\n    }\n\n    /**\n     * Middleware that retries requests based on the boolean result of\n     * invoking the provided \"decider\" function.\n     *\n     * If no delay function is provided, a simple implementation of exponential\n     * backoff will be utilized.\n     *\n     * @param callable $decider Function that accepts the number of retries,\n     *                          a request, [response], and [exception] and\n     *                          returns true if the request is to be retried.\n     * @param callable $delay   Function that accepts the number of retries and\n     *                          returns the number of milliseconds to delay.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function retry(callable $decider, callable $delay = null): callable\n    {\n        return static function (callable $handler) use ($decider, $delay): RetryMiddleware {\n            return new RetryMiddleware($decider, $handler, $delay);\n        };\n    }\n\n    /**\n     * Middleware that logs requests, responses, and errors using a message\n     * formatter.\n     *\n     * @phpstan-param \\Psr\\Log\\LogLevel::* $logLevel  Level at which to log requests.\n     *\n     * @param LoggerInterface                            $logger    Logs messages.\n     * @param MessageFormatterInterface|MessageFormatter $formatter Formatter used to create message strings.\n     * @param string                                     $logLevel  Level at which to log requests.\n     *\n     * @return callable Returns a function that accepts the next handler.\n     */\n    public static function log(LoggerInterface $logger, $formatter, string $logLevel = 'info'): callable\n    {\n        // To be compatible with Guzzle 7.1.x we need to allow users to pass a MessageFormatter\n        if (!$formatter instanceof MessageFormatter && !$formatter instanceof MessageFormatterInterface) {\n            throw new \\LogicException(sprintf('Argument 2 to %s::log() must be of type %s', self::class, MessageFormatterInterface::class));\n        }\n\n        return static function (callable $handler) use ($logger, $formatter, $logLevel): callable {\n            return static function (RequestInterface $request, array $options = []) use ($handler, $logger, $formatter, $logLevel) {\n                return $handler($request, $options)->then(\n                    static function ($response) use ($logger, $request, $formatter, $logLevel): ResponseInterface {\n                        $message = $formatter->format($request, $response);\n                        $logger->log($logLevel, $message);\n                        return $response;\n                    },\n                    static function ($reason) use ($logger, $request, $formatter): PromiseInterface {\n                        $response = $reason instanceof RequestException ? $reason->getResponse() : null;\n                        $message = $formatter->format($request, $response, P\\Create::exceptionFor($reason));\n                        $logger->error($message);\n                        return P\\Create::rejectionFor($reason);\n                    }\n                );\n            };\n        };\n    }\n\n    /**\n     * This middleware adds a default content-type if possible, a default\n     * content-length or transfer-encoding header, and the expect header.\n     */\n    public static function prepareBody(): callable\n    {\n        return static function (callable $handler): PrepareBodyMiddleware {\n            return new PrepareBodyMiddleware($handler);\n        };\n    }\n\n    /**\n     * Middleware that applies a map function to the request before passing to\n     * the next handler.\n     *\n     * @param callable $fn Function that accepts a RequestInterface and returns\n     *                     a RequestInterface.\n     */\n    public static function mapRequest(callable $fn): callable\n    {\n        return static function (callable $handler) use ($fn): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, $fn) {\n                return $handler($fn($request), $options);\n            };\n        };\n    }\n\n    /**\n     * Middleware that applies a map function to the resolved promise's\n     * response.\n     *\n     * @param callable $fn Function that accepts a ResponseInterface and\n     *                     returns a ResponseInterface.\n     */\n    public static function mapResponse(callable $fn): callable\n    {\n        return static function (callable $handler) use ($fn): callable {\n            return static function (RequestInterface $request, array $options) use ($handler, $fn) {\n                return $handler($request, $options)->then($fn);\n            };\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Pool.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\EachPromise;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse GuzzleHttp\\Promise\\PromisorInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Sends an iterator of requests concurrently using a capped pool size.\n *\n * The pool will read from an iterator until it is cancelled or until the\n * iterator is consumed. When a request is yielded, the request is sent after\n * applying the \"request_options\" request options (if provided in the ctor).\n *\n * When a function is yielded by the iterator, the function is provided the\n * \"request_options\" array that should be merged on top of any existing\n * options, and the function MUST then return a wait-able promise.\n *\n * @final\n */\nclass Pool implements PromisorInterface\n{\n    /**\n     * @var EachPromise\n     */\n    private $each;\n\n    /**\n     * @param ClientInterface $client   Client used to send the requests.\n     * @param array|\\Iterator $requests Requests or functions that return\n     *                                  requests to send concurrently.\n     * @param array           $config   Associative array of options\n     *                                  - concurrency: (int) Maximum number of requests to send concurrently\n     *                                  - options: Array of request options to apply to each request.\n     *                                  - fulfilled: (callable) Function to invoke when a request completes.\n     *                                  - rejected: (callable) Function to invoke when a request is rejected.\n     */\n    public function __construct(ClientInterface $client, $requests, array $config = [])\n    {\n        if (!isset($config['concurrency'])) {\n            $config['concurrency'] = 25;\n        }\n\n        if (isset($config['options'])) {\n            $opts = $config['options'];\n            unset($config['options']);\n        } else {\n            $opts = [];\n        }\n\n        $iterable = P\\Create::iterFor($requests);\n        $requests = static function () use ($iterable, $client, $opts) {\n            foreach ($iterable as $key => $rfn) {\n                if ($rfn instanceof RequestInterface) {\n                    yield $key => $client->sendAsync($rfn, $opts);\n                } elseif (\\is_callable($rfn)) {\n                    yield $key => $rfn($opts);\n                } else {\n                    throw new \\InvalidArgumentException('Each value yielded by the iterator must be a Psr7\\Http\\Message\\RequestInterface or a callable that returns a promise that fulfills with a Psr7\\Message\\Http\\ResponseInterface object.');\n                }\n            }\n        };\n\n        $this->each = new EachPromise($requests(), $config);\n    }\n\n    /**\n     * Get promise\n     */\n    public function promise(): PromiseInterface\n    {\n        return $this->each->promise();\n    }\n\n    /**\n     * Sends multiple requests concurrently and returns an array of responses\n     * and exceptions that uses the same ordering as the provided requests.\n     *\n     * IMPORTANT: This method keeps every request and response in memory, and\n     * as such, is NOT recommended when sending a large number or an\n     * indeterminate number of requests concurrently.\n     *\n     * @param ClientInterface $client   Client used to send the requests\n     * @param array|\\Iterator $requests Requests to send concurrently.\n     * @param array           $options  Passes through the options available in\n     *                                  {@see \\GuzzleHttp\\Pool::__construct}\n     *\n     * @return array Returns an array containing the response or an exception\n     *               in the same order that the requests were sent.\n     *\n     * @throws \\InvalidArgumentException if the event format is incorrect.\n     */\n    public static function batch(ClientInterface $client, $requests, array $options = []): array\n    {\n        $res = [];\n        self::cmpCallback($options, 'fulfilled', $res);\n        self::cmpCallback($options, 'rejected', $res);\n        $pool = new static($client, $requests, $options);\n        $pool->promise()->wait();\n        \\ksort($res);\n\n        return $res;\n    }\n\n    /**\n     * Execute callback(s)\n     */\n    private static function cmpCallback(array &$options, string $name, array &$results): void\n    {\n        if (!isset($options[$name])) {\n            $options[$name] = static function ($v, $k) use (&$results) {\n                $results[$k] = $v;\n            };\n        } else {\n            $currentFn = $options[$name];\n            $options[$name] = static function ($v, $k) use (&$results, $currentFn) {\n                $currentFn($v, $k);\n                $results[$k] = $v;\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Prepares requests that contain a body, adding the Content-Length,\n * Content-Type, and Expect headers.\n *\n * @final\n */\nclass PrepareBodyMiddleware\n{\n    /**\n     * @var callable(RequestInterface, array): PromiseInterface\n     */\n    private $nextHandler;\n\n    /**\n     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.\n     */\n    public function __construct(callable $nextHandler)\n    {\n        $this->nextHandler = $nextHandler;\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        $fn = $this->nextHandler;\n\n        // Don't do anything if the request has no body.\n        if ($request->getBody()->getSize() === 0) {\n            return $fn($request, $options);\n        }\n\n        $modify = [];\n\n        // Add a default content-type if possible.\n        if (!$request->hasHeader('Content-Type')) {\n            if ($uri = $request->getBody()->getMetadata('uri')) {\n                if (is_string($uri) && $type = Psr7\\MimeType::fromFilename($uri)) {\n                    $modify['set_headers']['Content-Type'] = $type;\n                }\n            }\n        }\n\n        // Add a default content-length or transfer-encoding header.\n        if (!$request->hasHeader('Content-Length')\n            && !$request->hasHeader('Transfer-Encoding')\n        ) {\n            $size = $request->getBody()->getSize();\n            if ($size !== null) {\n                $modify['set_headers']['Content-Length'] = $size;\n            } else {\n                $modify['set_headers']['Transfer-Encoding'] = 'chunked';\n            }\n        }\n\n        // Add the expect header if needed.\n        $this->addExpectHeader($request, $options, $modify);\n\n        return $fn(Psr7\\Utils::modifyRequest($request, $modify), $options);\n    }\n\n    /**\n     * Add expect header\n     */\n    private function addExpectHeader(RequestInterface $request, array $options, array &$modify): void\n    {\n        // Determine if the Expect header should be used\n        if ($request->hasHeader('Expect')) {\n            return;\n        }\n\n        $expect = $options['expect'] ?? null;\n\n        // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0\n        if ($expect === false || $request->getProtocolVersion() < 1.1) {\n            return;\n        }\n\n        // The expect header is unconditionally enabled\n        if ($expect === true) {\n            $modify['set_headers']['Expect'] = '100-Continue';\n            return;\n        }\n\n        // By default, send the expect header when the payload is > 1mb\n        if ($expect === null) {\n            $expect = 1048576;\n        }\n\n        // Always add if the body cannot be rewound, the size cannot be\n        // determined, or the size is greater than the cutoff threshold\n        $body = $request->getBody();\n        $size = $body->getSize();\n\n        if ($size === null || $size >= (int) $expect || !$body->isSeekable()) {\n            $modify['set_headers']['Expect'] = '100-Continue';\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\BadResponseException;\nuse GuzzleHttp\\Exception\\TooManyRedirectsException;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Request redirect middleware.\n *\n * Apply this middleware like other middleware using\n * {@see \\GuzzleHttp\\Middleware::redirect()}.\n *\n * @final\n */\nclass RedirectMiddleware\n{\n    public const HISTORY_HEADER = 'X-Guzzle-Redirect-History';\n\n    public const STATUS_HISTORY_HEADER = 'X-Guzzle-Redirect-Status-History';\n\n    /**\n     * @var array\n     */\n    public static $defaultSettings = [\n        'max'             => 5,\n        'protocols'       => ['http', 'https'],\n        'strict'          => false,\n        'referer'         => false,\n        'track_redirects' => false,\n    ];\n\n    /**\n     * @var callable(RequestInterface, array): PromiseInterface\n     */\n    private $nextHandler;\n\n    /**\n     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.\n     */\n    public function __construct(callable $nextHandler)\n    {\n        $this->nextHandler = $nextHandler;\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        $fn = $this->nextHandler;\n\n        if (empty($options['allow_redirects'])) {\n            return $fn($request, $options);\n        }\n\n        if ($options['allow_redirects'] === true) {\n            $options['allow_redirects'] = self::$defaultSettings;\n        } elseif (!\\is_array($options['allow_redirects'])) {\n            throw new \\InvalidArgumentException('allow_redirects must be true, false, or array');\n        } else {\n            // Merge the default settings with the provided settings\n            $options['allow_redirects'] += self::$defaultSettings;\n        }\n\n        if (empty($options['allow_redirects']['max'])) {\n            return $fn($request, $options);\n        }\n\n        return $fn($request, $options)\n            ->then(function (ResponseInterface $response) use ($request, $options) {\n                return $this->checkRedirect($request, $options, $response);\n            });\n    }\n\n    /**\n     * @return ResponseInterface|PromiseInterface\n     */\n    public function checkRedirect(RequestInterface $request, array $options, ResponseInterface $response)\n    {\n        if (\\strpos((string) $response->getStatusCode(), '3') !== 0\n            || !$response->hasHeader('Location')\n        ) {\n            return $response;\n        }\n\n        $this->guardMax($request, $response, $options);\n        $nextRequest = $this->modifyRequest($request, $options, $response);\n\n        // If authorization is handled by curl, unset it if URI is cross-origin.\n        if (Psr7\\UriComparator::isCrossOrigin($request->getUri(), $nextRequest->getUri()) && defined('\\CURLOPT_HTTPAUTH')) {\n            unset(\n                $options['curl'][\\CURLOPT_HTTPAUTH],\n                $options['curl'][\\CURLOPT_USERPWD]\n            );\n        }\n\n        if (isset($options['allow_redirects']['on_redirect'])) {\n            ($options['allow_redirects']['on_redirect'])(\n                $request,\n                $response,\n                $nextRequest->getUri()\n            );\n        }\n\n        $promise = $this($nextRequest, $options);\n\n        // Add headers to be able to track history of redirects.\n        if (!empty($options['allow_redirects']['track_redirects'])) {\n            return $this->withTracking(\n                $promise,\n                (string) $nextRequest->getUri(),\n                $response->getStatusCode()\n            );\n        }\n\n        return $promise;\n    }\n\n    /**\n     * Enable tracking on promise.\n     */\n    private function withTracking(PromiseInterface $promise, string $uri, int $statusCode): PromiseInterface\n    {\n        return $promise->then(\n            static function (ResponseInterface $response) use ($uri, $statusCode) {\n                // Note that we are pushing to the front of the list as this\n                // would be an earlier response than what is currently present\n                // in the history header.\n                $historyHeader = $response->getHeader(self::HISTORY_HEADER);\n                $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER);\n                \\array_unshift($historyHeader, $uri);\n                \\array_unshift($statusHeader, (string) $statusCode);\n\n                return $response->withHeader(self::HISTORY_HEADER, $historyHeader)\n                                ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader);\n            }\n        );\n    }\n\n    /**\n     * Check for too many redirects.\n     *\n     * @throws TooManyRedirectsException Too many redirects.\n     */\n    private function guardMax(RequestInterface $request, ResponseInterface $response, array &$options): void\n    {\n        $current = $options['__redirect_count']\n            ?? 0;\n        $options['__redirect_count'] = $current + 1;\n        $max = $options['allow_redirects']['max'];\n\n        if ($options['__redirect_count'] > $max) {\n            throw new TooManyRedirectsException(\"Will not follow more than {$max} redirects\", $request, $response);\n        }\n    }\n\n    public function modifyRequest(RequestInterface $request, array $options, ResponseInterface $response): RequestInterface\n    {\n        // Request modifications to apply.\n        $modify = [];\n        $protocols = $options['allow_redirects']['protocols'];\n\n        // Use a GET request if this is an entity enclosing request and we are\n        // not forcing RFC compliance, but rather emulating what all browsers\n        // would do.\n        $statusCode = $response->getStatusCode();\n        if ($statusCode == 303 ||\n            ($statusCode <= 302 && !$options['allow_redirects']['strict'])\n        ) {\n            $safeMethods = ['GET', 'HEAD', 'OPTIONS'];\n            $requestMethod = $request->getMethod();\n\n            $modify['method'] = in_array($requestMethod, $safeMethods) ? $requestMethod : 'GET';\n            $modify['body'] = '';\n        }\n\n        $uri = self::redirectUri($request, $response, $protocols);\n        if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) {\n            $idnOptions = ($options['idn_conversion'] === true) ? \\IDNA_DEFAULT : $options['idn_conversion'];\n            $uri = Utils::idnUriConvert($uri, $idnOptions);\n        }\n\n        $modify['uri'] = $uri;\n        Psr7\\Message::rewindBody($request);\n\n        // Add the Referer header if it is told to do so and only\n        // add the header if we are not redirecting from https to http.\n        if ($options['allow_redirects']['referer']\n            && $modify['uri']->getScheme() === $request->getUri()->getScheme()\n        ) {\n            $uri = $request->getUri()->withUserInfo('');\n            $modify['set_headers']['Referer'] = (string) $uri;\n        } else {\n            $modify['remove_headers'][] = 'Referer';\n        }\n\n        // Remove Authorization and Cookie headers if URI is cross-origin.\n        if (Psr7\\UriComparator::isCrossOrigin($request->getUri(), $modify['uri'])) {\n            $modify['remove_headers'][] = 'Authorization';\n            $modify['remove_headers'][] = 'Cookie';\n        }\n\n        return Psr7\\Utils::modifyRequest($request, $modify);\n    }\n\n    /**\n     * Set the appropriate URL on the request based on the location header.\n     */\n    private static function redirectUri(\n        RequestInterface $request,\n        ResponseInterface $response,\n        array $protocols\n    ): UriInterface {\n        $location = Psr7\\UriResolver::resolve(\n            $request->getUri(),\n            new Psr7\\Uri($response->getHeaderLine('Location'))\n        );\n\n        // Ensure that the redirect URI is allowed based on the protocols.\n        if (!\\in_array($location->getScheme(), $protocols)) {\n            throw new BadResponseException(\\sprintf('Redirect URI, %s, does not use one of the allowed redirect protocols: %s', $location, \\implode(', ', $protocols)), $request, $response);\n        }\n\n        return $location;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/RequestOptions.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\n/**\n * This class contains a list of built-in Guzzle request options.\n *\n * More documentation for each option can be found at http://guzzlephp.org/.\n *\n * @link http://docs.guzzlephp.org/en/v6/request-options.html\n */\nfinal class RequestOptions\n{\n    /**\n     * allow_redirects: (bool|array) Controls redirect behavior. Pass false\n     * to disable redirects, pass true to enable redirects, pass an\n     * associative to provide custom redirect settings. Defaults to \"false\".\n     * This option only works if your handler has the RedirectMiddleware. When\n     * passing an associative array, you can provide the following key value\n     * pairs:\n     *\n     * - max: (int, default=5) maximum number of allowed redirects.\n     * - strict: (bool, default=false) Set to true to use strict redirects\n     *   meaning redirect POST requests with POST requests vs. doing what most\n     *   browsers do which is redirect POST requests with GET requests\n     * - referer: (bool, default=false) Set to true to enable the Referer\n     *   header.\n     * - protocols: (array, default=['http', 'https']) Allowed redirect\n     *   protocols.\n     * - on_redirect: (callable) PHP callable that is invoked when a redirect\n     *   is encountered. The callable is invoked with the request, the redirect\n     *   response that was received, and the effective URI. Any return value\n     *   from the on_redirect function is ignored.\n     */\n    public const ALLOW_REDIRECTS = 'allow_redirects';\n\n    /**\n     * auth: (array) Pass an array of HTTP authentication parameters to use\n     * with the request. The array must contain the username in index [0],\n     * the password in index [1], and you can optionally provide a built-in\n     * authentication type in index [2]. Pass null to disable authentication\n     * for a request.\n     */\n    public const AUTH = 'auth';\n\n    /**\n     * body: (resource|string|null|int|float|StreamInterface|callable|\\Iterator)\n     * Body to send in the request.\n     */\n    public const BODY = 'body';\n\n    /**\n     * cert: (string|array) Set to a string to specify the path to a file\n     * containing a PEM formatted SSL client side certificate. If a password\n     * is required, then set cert to an array containing the path to the PEM\n     * file in the first array element followed by the certificate password\n     * in the second array element.\n     */\n    public const CERT = 'cert';\n\n    /**\n     * cookies: (bool|GuzzleHttp\\Cookie\\CookieJarInterface, default=false)\n     * Specifies whether or not cookies are used in a request or what cookie\n     * jar to use or what cookies to send. This option only works if your\n     * handler has the `cookie` middleware. Valid values are `false` and\n     * an instance of {@see \\GuzzleHttp\\Cookie\\CookieJarInterface}.\n     */\n    public const COOKIES = 'cookies';\n\n    /**\n     * connect_timeout: (float, default=0) Float describing the number of\n     * seconds to wait while trying to connect to a server. Use 0 to wait\n     * indefinitely (the default behavior).\n     */\n    public const CONNECT_TIMEOUT = 'connect_timeout';\n\n    /**\n     * debug: (bool|resource) Set to true or set to a PHP stream returned by\n     * fopen()  enable debug output with the HTTP handler used to send a\n     * request.\n     */\n    public const DEBUG = 'debug';\n\n    /**\n     * decode_content: (bool, default=true) Specify whether or not\n     * Content-Encoding responses (gzip, deflate, etc.) are automatically\n     * decoded.\n     */\n    public const DECODE_CONTENT = 'decode_content';\n\n    /**\n     * delay: (int) The amount of time to delay before sending in milliseconds.\n     */\n    public const DELAY = 'delay';\n\n    /**\n     * expect: (bool|integer) Controls the behavior of the\n     * \"Expect: 100-Continue\" header.\n     *\n     * Set to `true` to enable the \"Expect: 100-Continue\" header for all\n     * requests that sends a body. Set to `false` to disable the\n     * \"Expect: 100-Continue\" header for all requests. Set to a number so that\n     * the size of the payload must be greater than the number in order to send\n     * the Expect header. Setting to a number will send the Expect header for\n     * all requests in which the size of the payload cannot be determined or\n     * where the body is not rewindable.\n     *\n     * By default, Guzzle will add the \"Expect: 100-Continue\" header when the\n     * size of the body of a request is greater than 1 MB and a request is\n     * using HTTP/1.1.\n     */\n    public const EXPECT = 'expect';\n\n    /**\n     * form_params: (array) Associative array of form field names to values\n     * where each value is a string or array of strings. Sets the Content-Type\n     * header to application/x-www-form-urlencoded when no Content-Type header\n     * is already present.\n     */\n    public const FORM_PARAMS = 'form_params';\n\n    /**\n     * headers: (array) Associative array of HTTP headers. Each value MUST be\n     * a string or array of strings.\n     */\n    public const HEADERS = 'headers';\n\n    /**\n     * http_errors: (bool, default=true) Set to false to disable exceptions\n     * when a non- successful HTTP response is received. By default,\n     * exceptions will be thrown for 4xx and 5xx responses. This option only\n     * works if your handler has the `httpErrors` middleware.\n     */\n    public const HTTP_ERRORS = 'http_errors';\n\n    /**\n     * idn: (bool|int, default=true) A combination of IDNA_* constants for\n     * idn_to_ascii() PHP's function (see \"options\" parameter). Set to false to\n     * disable IDN support completely, or to true to use the default\n     * configuration (IDNA_DEFAULT constant).\n     */\n    public const IDN_CONVERSION = 'idn_conversion';\n\n    /**\n     * json: (mixed) Adds JSON data to a request. The provided value is JSON\n     * encoded and a Content-Type header of application/json will be added to\n     * the request if no Content-Type header is already present.\n     */\n    public const JSON = 'json';\n\n    /**\n     * multipart: (array) Array of associative arrays, each containing a\n     * required \"name\" key mapping to the form field, name, a required\n     * \"contents\" key mapping to a StreamInterface|resource|string, an\n     * optional \"headers\" associative array of custom headers, and an\n     * optional \"filename\" key mapping to a string to send as the filename in\n     * the part. If no \"filename\" key is present, then no \"filename\" attribute\n     * will be added to the part.\n     */\n    public const MULTIPART = 'multipart';\n\n    /**\n     * on_headers: (callable) A callable that is invoked when the HTTP headers\n     * of the response have been received but the body has not yet begun to\n     * download.\n     */\n    public const ON_HEADERS = 'on_headers';\n\n    /**\n     * on_stats: (callable) allows you to get access to transfer statistics of\n     * a request and access the lower level transfer details of the handler\n     * associated with your client. ``on_stats`` is a callable that is invoked\n     * when a handler has finished sending a request. The callback is invoked\n     * with transfer statistics about the request, the response received, or\n     * the error encountered. Included in the data is the total amount of time\n     * taken to send the request.\n     */\n    public const ON_STATS = 'on_stats';\n\n    /**\n     * progress: (callable) Defines a function to invoke when transfer\n     * progress is made. The function accepts the following positional\n     * arguments: the total number of bytes expected to be downloaded, the\n     * number of bytes downloaded so far, the number of bytes expected to be\n     * uploaded, the number of bytes uploaded so far.\n     */\n    public const PROGRESS = 'progress';\n\n    /**\n     * proxy: (string|array) Pass a string to specify an HTTP proxy, or an\n     * array to specify different proxies for different protocols (where the\n     * key is the protocol and the value is a proxy string).\n     */\n    public const PROXY = 'proxy';\n\n    /**\n     * query: (array|string) Associative array of query string values to add\n     * to the request. This option uses PHP's http_build_query() to create\n     * the string representation. Pass a string value if you need more\n     * control than what this method provides\n     */\n    public const QUERY = 'query';\n\n    /**\n     * sink: (resource|string|StreamInterface) Where the data of the\n     * response is written to. Defaults to a PHP temp stream. Providing a\n     * string will write data to a file by the given name.\n     */\n    public const SINK = 'sink';\n\n    /**\n     * synchronous: (bool) Set to true to inform HTTP handlers that you intend\n     * on waiting on the response. This can be useful for optimizations. Note\n     * that a promise is still returned if you are using one of the async\n     * client methods.\n     */\n    public const SYNCHRONOUS = 'synchronous';\n\n    /**\n     * ssl_key: (array|string) Specify the path to a file containing a private\n     * SSL key in PEM format. If a password is required, then set to an array\n     * containing the path to the SSL key in the first array element followed\n     * by the password required for the certificate in the second element.\n     */\n    public const SSL_KEY = 'ssl_key';\n\n    /**\n     * stream: Set to true to attempt to stream a response rather than\n     * download it all up-front.\n     */\n    public const STREAM = 'stream';\n\n    /**\n     * verify: (bool|string, default=true) Describes the SSL certificate\n     * verification behavior of a request. Set to true to enable SSL\n     * certificate verification using the system CA bundle when available\n     * (the default). Set to false to disable certificate verification (this\n     * is insecure!). Set to a string to provide the path to a CA bundle on\n     * disk to enable verification using a custom certificate.\n     */\n    public const VERIFY = 'verify';\n\n    /**\n     * timeout: (float, default=0) Float describing the timeout of the\n     * request in seconds. Use 0 to wait indefinitely (the default behavior).\n     */\n    public const TIMEOUT = 'timeout';\n\n    /**\n     * read_timeout: (float, default=default_socket_timeout ini setting) Float describing\n     * the body read timeout, for stream requests.\n     */\n    public const READ_TIMEOUT = 'read_timeout';\n\n    /**\n     * version: (float) Specifies the HTTP protocol version to attempt to use.\n     */\n    public const VERSION = 'version';\n\n    /**\n     * force_ip_resolve: (bool) Force client to use only ipv4 or ipv6 protocol\n     */\n    public const FORCE_IP_RESOLVE = 'force_ip_resolve';\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Promise as P;\nuse GuzzleHttp\\Promise\\PromiseInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Middleware that retries requests based on the boolean result of\n * invoking the provided \"decider\" function.\n *\n * @final\n */\nclass RetryMiddleware\n{\n    /**\n     * @var callable(RequestInterface, array): PromiseInterface\n     */\n    private $nextHandler;\n\n    /**\n     * @var callable\n     */\n    private $decider;\n\n    /**\n     * @var callable(int)\n     */\n    private $delay;\n\n    /**\n     * @param callable                                            $decider     Function that accepts the number of retries,\n     *                                                                         a request, [response], and [exception] and\n     *                                                                         returns true if the request is to be\n     *                                                                         retried.\n     * @param callable(RequestInterface, array): PromiseInterface $nextHandler Next handler to invoke.\n     * @param (callable(int): int)|null                           $delay       Function that accepts the number of retries\n     *                                                                         and returns the number of\n     *                                                                         milliseconds to delay.\n     */\n    public function __construct(callable $decider, callable $nextHandler, callable $delay = null)\n    {\n        $this->decider = $decider;\n        $this->nextHandler = $nextHandler;\n        $this->delay = $delay ?: __CLASS__ . '::exponentialDelay';\n    }\n\n    /**\n     * Default exponential backoff delay function.\n     *\n     * @return int milliseconds.\n     */\n    public static function exponentialDelay(int $retries): int\n    {\n        return (int) \\pow(2, $retries - 1) * 1000;\n    }\n\n    public function __invoke(RequestInterface $request, array $options): PromiseInterface\n    {\n        if (!isset($options['retries'])) {\n            $options['retries'] = 0;\n        }\n\n        $fn = $this->nextHandler;\n        return $fn($request, $options)\n            ->then(\n                $this->onFulfilled($request, $options),\n                $this->onRejected($request, $options)\n            );\n    }\n\n    /**\n     * Execute fulfilled closure\n     */\n    private function onFulfilled(RequestInterface $request, array $options): callable\n    {\n        return function ($value) use ($request, $options) {\n            if (!($this->decider)(\n                $options['retries'],\n                $request,\n                $value,\n                null\n            )) {\n                return $value;\n            }\n            return $this->doRetry($request, $options, $value);\n        };\n    }\n\n    /**\n     * Execute rejected closure\n     */\n    private function onRejected(RequestInterface $req, array $options): callable\n    {\n        return function ($reason) use ($req, $options) {\n            if (!($this->decider)(\n                $options['retries'],\n                $req,\n                null,\n                $reason\n            )) {\n                return P\\Create::rejectionFor($reason);\n            }\n            return $this->doRetry($req, $options);\n        };\n    }\n\n    private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null): PromiseInterface\n    {\n        $options['delay'] = ($this->delay)(++$options['retries'], $response, $request);\n\n        return $this($request, $options);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/TransferStats.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Represents data at the point after it was transferred either successfully\n * or after a network error.\n */\nfinal class TransferStats\n{\n    /**\n     * @var RequestInterface\n     */\n    private $request;\n\n    /**\n     * @var ResponseInterface|null\n     */\n    private $response;\n\n    /**\n     * @var float|null\n     */\n    private $transferTime;\n\n    /**\n     * @var array\n     */\n    private $handlerStats;\n\n    /**\n     * @var mixed|null\n     */\n    private $handlerErrorData;\n\n    /**\n     * @param RequestInterface       $request          Request that was sent.\n     * @param ResponseInterface|null $response         Response received (if any)\n     * @param float|null             $transferTime     Total handler transfer time.\n     * @param mixed                  $handlerErrorData Handler error data.\n     * @param array                  $handlerStats     Handler specific stats.\n     */\n    public function __construct(\n        RequestInterface $request,\n        ?ResponseInterface $response = null,\n        ?float $transferTime = null,\n        $handlerErrorData = null,\n        array $handlerStats = []\n    ) {\n        $this->request = $request;\n        $this->response = $response;\n        $this->transferTime = $transferTime;\n        $this->handlerErrorData = $handlerErrorData;\n        $this->handlerStats = $handlerStats;\n    }\n\n    public function getRequest(): RequestInterface\n    {\n        return $this->request;\n    }\n\n    /**\n     * Returns the response that was received (if any).\n     */\n    public function getResponse(): ?ResponseInterface\n    {\n        return $this->response;\n    }\n\n    /**\n     * Returns true if a response was received.\n     */\n    public function hasResponse(): bool\n    {\n        return $this->response !== null;\n    }\n\n    /**\n     * Gets handler specific error data.\n     *\n     * This might be an exception, a integer representing an error code, or\n     * anything else. Relying on this value assumes that you know what handler\n     * you are using.\n     *\n     * @return mixed\n     */\n    public function getHandlerErrorData()\n    {\n        return $this->handlerErrorData;\n    }\n\n    /**\n     * Get the effective URI the request was sent to.\n     */\n    public function getEffectiveUri(): UriInterface\n    {\n        return $this->request->getUri();\n    }\n\n    /**\n     * Get the estimated time the request was being transferred by the handler.\n     *\n     * @return float|null Time in seconds.\n     */\n    public function getTransferTime(): ?float\n    {\n        return $this->transferTime;\n    }\n\n    /**\n     * Gets an array of all of the handler specific transfer data.\n     */\n    public function getHandlerStats(): array\n    {\n        return $this->handlerStats;\n    }\n\n    /**\n     * Get a specific handler statistic from the handler by name.\n     *\n     * @param string $stat Handler specific transfer stat to retrieve.\n     *\n     * @return mixed|null\n     */\n    public function getHandlerStat(string $stat)\n    {\n        return $this->handlerStats[$stat] ?? null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/Utils.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\nuse GuzzleHttp\\Exception\\InvalidArgumentException;\nuse GuzzleHttp\\Handler\\CurlHandler;\nuse GuzzleHttp\\Handler\\CurlMultiHandler;\nuse GuzzleHttp\\Handler\\Proxy;\nuse GuzzleHttp\\Handler\\StreamHandler;\nuse Psr\\Http\\Message\\UriInterface;\n\nfinal class Utils\n{\n    /**\n     * Debug function used to describe the provided value type and class.\n     *\n     * @param mixed $input\n     *\n     * @return string Returns a string containing the type of the variable and\n     *                if a class is provided, the class name.\n     */\n    public static function describeType($input): string\n    {\n        switch (\\gettype($input)) {\n            case 'object':\n                return 'object(' . \\get_class($input) . ')';\n            case 'array':\n                return 'array(' . \\count($input) . ')';\n            default:\n                \\ob_start();\n                \\var_dump($input);\n                // normalize float vs double\n                /** @var string $varDumpContent */\n                $varDumpContent = \\ob_get_clean();\n\n                return \\str_replace('double(', 'float(', \\rtrim($varDumpContent));\n        }\n    }\n\n    /**\n     * Parses an array of header lines into an associative array of headers.\n     *\n     * @param iterable $lines Header lines array of strings in the following\n     *                        format: \"Name: Value\"\n     */\n    public static function headersFromLines(iterable $lines): array\n    {\n        $headers = [];\n\n        foreach ($lines as $line) {\n            $parts = \\explode(':', $line, 2);\n            $headers[\\trim($parts[0])][] = isset($parts[1]) ? \\trim($parts[1]) : null;\n        }\n\n        return $headers;\n    }\n\n    /**\n     * Returns a debug stream based on the provided variable.\n     *\n     * @param mixed $value Optional value\n     *\n     * @return resource\n     */\n    public static function debugResource($value = null)\n    {\n        if (\\is_resource($value)) {\n            return $value;\n        }\n        if (\\defined('STDOUT')) {\n            return \\STDOUT;\n        }\n\n        return \\GuzzleHttp\\Psr7\\Utils::tryFopen('php://output', 'w');\n    }\n\n    /**\n     * Chooses and creates a default handler to use based on the environment.\n     *\n     * The returned handler is not wrapped by any default middlewares.\n     *\n     * @throws \\RuntimeException if no viable Handler is available.\n     *\n     * @return callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface Returns the best handler for the given system.\n     */\n    public static function chooseHandler(): callable\n    {\n        $handler = null;\n\n        if (\\defined('CURLOPT_CUSTOMREQUEST')) {\n            if (\\function_exists('curl_multi_exec') && \\function_exists('curl_exec')) {\n                $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());\n            } elseif (\\function_exists('curl_exec')) {\n                $handler = new CurlHandler();\n            } elseif (\\function_exists('curl_multi_exec')) {\n                $handler = new CurlMultiHandler();\n            }\n        }\n\n        if (\\ini_get('allow_url_fopen')) {\n            $handler = $handler\n                ? Proxy::wrapStreaming($handler, new StreamHandler())\n                : new StreamHandler();\n        } elseif (!$handler) {\n            throw new \\RuntimeException('GuzzleHttp requires cURL, the allow_url_fopen ini setting, or a custom HTTP handler.');\n        }\n\n        return $handler;\n    }\n\n    /**\n     * Get the default User-Agent string to use with Guzzle.\n     */\n    public static function defaultUserAgent(): string\n    {\n        return sprintf('GuzzleHttp/%d', ClientInterface::MAJOR_VERSION);\n    }\n\n    /**\n     * Returns the default cacert bundle for the current system.\n     *\n     * First, the openssl.cafile and curl.cainfo php.ini settings are checked.\n     * If those settings are not configured, then the common locations for\n     * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X\n     * and Windows are checked. If any of these file locations are found on\n     * disk, they will be utilized.\n     *\n     * Note: the result of this function is cached for subsequent calls.\n     *\n     * @throws \\RuntimeException if no bundle can be found.\n     *\n     * @deprecated Utils::defaultCaBundle will be removed in guzzlehttp/guzzle:8.0. This method is not needed in PHP 5.6+.\n     */\n    public static function defaultCaBundle(): string\n    {\n        static $cached = null;\n        static $cafiles = [\n            // Red Hat, CentOS, Fedora (provided by the ca-certificates package)\n            '/etc/pki/tls/certs/ca-bundle.crt',\n            // Ubuntu, Debian (provided by the ca-certificates package)\n            '/etc/ssl/certs/ca-certificates.crt',\n            // FreeBSD (provided by the ca_root_nss package)\n            '/usr/local/share/certs/ca-root-nss.crt',\n            // SLES 12 (provided by the ca-certificates package)\n            '/var/lib/ca-certificates/ca-bundle.pem',\n            // OS X provided by homebrew (using the default path)\n            '/usr/local/etc/openssl/cert.pem',\n            // Google app engine\n            '/etc/ca-certificates.crt',\n            // Windows?\n            'C:\\\\windows\\\\system32\\\\curl-ca-bundle.crt',\n            'C:\\\\windows\\\\curl-ca-bundle.crt',\n        ];\n\n        if ($cached) {\n            return $cached;\n        }\n\n        if ($ca = \\ini_get('openssl.cafile')) {\n            return $cached = $ca;\n        }\n\n        if ($ca = \\ini_get('curl.cainfo')) {\n            return $cached = $ca;\n        }\n\n        foreach ($cafiles as $filename) {\n            if (\\file_exists($filename)) {\n                return $cached = $filename;\n            }\n        }\n\n        throw new \\RuntimeException(\n            <<< EOT\nNo system CA bundle could be found in any of the the common system locations.\nPHP versions earlier than 5.6 are not properly configured to use the system's\nCA bundle by default. In order to verify peer certificates, you will need to\nsupply the path on disk to a certificate bundle to the 'verify' request\noption: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not\nneed a specific certificate bundle, then Mozilla provides a commonly used CA\nbundle which can be downloaded here (provided by the maintainer of cURL):\nhttps://curl.haxx.se/ca/cacert.pem. Once\nyou have a CA bundle available on disk, you can set the 'openssl.cafile' PHP\nini setting to point to the path to the file, allowing you to omit the 'verify'\nrequest option. See https://curl.haxx.se/docs/sslcerts.html for more\ninformation.\nEOT\n        );\n    }\n\n    /**\n     * Creates an associative array of lowercase header names to the actual\n     * header casing.\n     */\n    public static function normalizeHeaderKeys(array $headers): array\n    {\n        $result = [];\n        foreach (\\array_keys($headers) as $key) {\n            $result[\\strtolower($key)] = $key;\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns true if the provided host matches any of the no proxy areas.\n     *\n     * This method will strip a port from the host if it is present. Each pattern\n     * can be matched with an exact match (e.g., \"foo.com\" == \"foo.com\") or a\n     * partial match: (e.g., \"foo.com\" == \"baz.foo.com\" and \".foo.com\" ==\n     * \"baz.foo.com\", but \".foo.com\" != \"foo.com\").\n     *\n     * Areas are matched in the following cases:\n     * 1. \"*\" (without quotes) always matches any hosts.\n     * 2. An exact match.\n     * 3. The area starts with \".\" and the area is the last part of the host. e.g.\n     *    '.mit.edu' will match any host that ends with '.mit.edu'.\n     *\n     * @param string   $host         Host to check against the patterns.\n     * @param string[] $noProxyArray An array of host patterns.\n     *\n     * @throws InvalidArgumentException\n     */\n    public static function isHostInNoProxy(string $host, array $noProxyArray): bool\n    {\n        if (\\strlen($host) === 0) {\n            throw new InvalidArgumentException('Empty host provided');\n        }\n\n        // Strip port if present.\n        [$host] = \\explode(':', $host, 2);\n\n        foreach ($noProxyArray as $area) {\n            // Always match on wildcards.\n            if ($area === '*') {\n                return true;\n            }\n\n            if (empty($area)) {\n                // Don't match on empty values.\n                continue;\n            }\n\n            if ($area === $host) {\n                // Exact matches.\n                return true;\n            }\n            // Special match if the area when prefixed with \".\". Remove any\n            // existing leading \".\" and add a new leading \".\".\n            $area = '.' . \\ltrim($area, '.');\n            if (\\substr($host, -(\\strlen($area))) === $area) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Wrapper for json_decode that throws when an error occurs.\n     *\n     * @param string $json    JSON data to parse\n     * @param bool   $assoc   When true, returned objects will be converted\n     *                        into associative arrays.\n     * @param int    $depth   User specified recursion depth.\n     * @param int    $options Bitmask of JSON decode options.\n     *\n     * @return object|array|string|int|float|bool|null\n     *\n     * @throws InvalidArgumentException if the JSON cannot be decoded.\n     *\n     * @link https://www.php.net/manual/en/function.json-decode.php\n     */\n    public static function jsonDecode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)\n    {\n        $data = \\json_decode($json, $assoc, $depth, $options);\n        if (\\JSON_ERROR_NONE !== \\json_last_error()) {\n            throw new InvalidArgumentException('json_decode error: ' . \\json_last_error_msg());\n        }\n\n        return $data;\n    }\n\n    /**\n     * Wrapper for JSON encoding that throws when an error occurs.\n     *\n     * @param mixed $value   The value being encoded\n     * @param int   $options JSON encode option bitmask\n     * @param int   $depth   Set the maximum depth. Must be greater than zero.\n     *\n     * @throws InvalidArgumentException if the JSON cannot be encoded.\n     *\n     * @link https://www.php.net/manual/en/function.json-encode.php\n     */\n    public static function jsonEncode($value, int $options = 0, int $depth = 512): string\n    {\n        $json = \\json_encode($value, $options, $depth);\n        if (\\JSON_ERROR_NONE !== \\json_last_error()) {\n            throw new InvalidArgumentException('json_encode error: ' . \\json_last_error_msg());\n        }\n\n        /** @var string */\n        return $json;\n    }\n\n    /**\n     * Wrapper for the hrtime() or microtime() functions\n     * (depending on the PHP version, one of the two is used)\n     *\n     * @return float UNIX timestamp\n     *\n     * @internal\n     */\n    public static function currentTime(): float\n    {\n        return (float) \\function_exists('hrtime') ? \\hrtime(true) / 1e9 : \\microtime(true);\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     *\n     * @internal\n     */\n    public static function idnUriConvert(UriInterface $uri, int $options = 0): UriInterface\n    {\n        if ($uri->getHost()) {\n            $asciiHost = self::idnToAsci($uri->getHost(), $options, $info);\n            if ($asciiHost === false) {\n                $errorBitSet = $info['errors'] ?? 0;\n\n                $errorConstants = array_filter(array_keys(get_defined_constants()), static function (string $name): bool {\n                    return substr($name, 0, 11) === 'IDNA_ERROR_';\n                });\n\n                $errors = [];\n                foreach ($errorConstants as $errorConstant) {\n                    if ($errorBitSet & constant($errorConstant)) {\n                        $errors[] = $errorConstant;\n                    }\n                }\n\n                $errorMessage = 'IDN conversion failed';\n                if ($errors) {\n                    $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')';\n                }\n\n                throw new InvalidArgumentException($errorMessage);\n            }\n            if ($uri->getHost() !== $asciiHost) {\n                // Replace URI only if the ASCII version is different\n                $uri = $uri->withHost($asciiHost);\n            }\n        }\n\n        return $uri;\n    }\n\n    /**\n     * @internal\n     */\n    public static function getenv(string $name): ?string\n    {\n        if (isset($_SERVER[$name])) {\n            return (string) $_SERVER[$name];\n        }\n\n        if (\\PHP_SAPI === 'cli' && ($value = \\getenv($name)) !== false && $value !== null) {\n            return (string) $value;\n        }\n\n        return null;\n    }\n\n    /**\n     * @return string|false\n     */\n    private static function idnToAsci(string $domain, int $options, ?array &$info = [])\n    {\n        if (\\function_exists('idn_to_ascii') && \\defined('INTL_IDNA_VARIANT_UTS46')) {\n            return \\idn_to_ascii($domain, $options, \\INTL_IDNA_VARIANT_UTS46, $info);\n        }\n\n        throw new \\Error('ext-idn or symfony/polyfill-intl-idn not loaded or too old');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/functions.php",
    "content": "<?php\n\nnamespace GuzzleHttp;\n\n/**\n * Debug function used to describe the provided value type and class.\n *\n * @param mixed $input Any type of variable to describe the type of. This\n *                     parameter misses a typehint because of that.\n *\n * @return string Returns a string containing the type of the variable and\n *                if a class is provided, the class name.\n *\n * @deprecated describe_type will be removed in guzzlehttp/guzzle:8.0. Use Utils::describeType instead.\n */\nfunction describe_type($input): string\n{\n    return Utils::describeType($input);\n}\n\n/**\n * Parses an array of header lines into an associative array of headers.\n *\n * @param iterable $lines Header lines array of strings in the following\n *                        format: \"Name: Value\"\n *\n * @deprecated headers_from_lines will be removed in guzzlehttp/guzzle:8.0. Use Utils::headersFromLines instead.\n */\nfunction headers_from_lines(iterable $lines): array\n{\n    return Utils::headersFromLines($lines);\n}\n\n/**\n * Returns a debug stream based on the provided variable.\n *\n * @param mixed $value Optional value\n *\n * @return resource\n *\n * @deprecated debug_resource will be removed in guzzlehttp/guzzle:8.0. Use Utils::debugResource instead.\n */\nfunction debug_resource($value = null)\n{\n    return Utils::debugResource($value);\n}\n\n/**\n * Chooses and creates a default handler to use based on the environment.\n *\n * The returned handler is not wrapped by any default middlewares.\n *\n * @throws \\RuntimeException if no viable Handler is available.\n *\n * @return callable(\\Psr\\Http\\Message\\RequestInterface, array): \\GuzzleHttp\\Promise\\PromiseInterface Returns the best handler for the given system.\n *\n * @deprecated choose_handler will be removed in guzzlehttp/guzzle:8.0. Use Utils::chooseHandler instead.\n */\nfunction choose_handler(): callable\n{\n    return Utils::chooseHandler();\n}\n\n/**\n * Get the default User-Agent string to use with Guzzle.\n *\n * @deprecated default_user_agent will be removed in guzzlehttp/guzzle:8.0. Use Utils::defaultUserAgent instead.\n */\nfunction default_user_agent(): string\n{\n    return Utils::defaultUserAgent();\n}\n\n/**\n * Returns the default cacert bundle for the current system.\n *\n * First, the openssl.cafile and curl.cainfo php.ini settings are checked.\n * If those settings are not configured, then the common locations for\n * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X\n * and Windows are checked. If any of these file locations are found on\n * disk, they will be utilized.\n *\n * Note: the result of this function is cached for subsequent calls.\n *\n * @throws \\RuntimeException if no bundle can be found.\n *\n * @deprecated default_ca_bundle will be removed in guzzlehttp/guzzle:8.0. This function is not needed in PHP 5.6+.\n */\nfunction default_ca_bundle(): string\n{\n    return Utils::defaultCaBundle();\n}\n\n/**\n * Creates an associative array of lowercase header names to the actual\n * header casing.\n *\n * @deprecated normalize_header_keys will be removed in guzzlehttp/guzzle:8.0. Use Utils::normalizeHeaderKeys instead.\n */\nfunction normalize_header_keys(array $headers): array\n{\n    return Utils::normalizeHeaderKeys($headers);\n}\n\n/**\n * Returns true if the provided host matches any of the no proxy areas.\n *\n * This method will strip a port from the host if it is present. Each pattern\n * can be matched with an exact match (e.g., \"foo.com\" == \"foo.com\") or a\n * partial match: (e.g., \"foo.com\" == \"baz.foo.com\" and \".foo.com\" ==\n * \"baz.foo.com\", but \".foo.com\" != \"foo.com\").\n *\n * Areas are matched in the following cases:\n * 1. \"*\" (without quotes) always matches any hosts.\n * 2. An exact match.\n * 3. The area starts with \".\" and the area is the last part of the host. e.g.\n *    '.mit.edu' will match any host that ends with '.mit.edu'.\n *\n * @param string   $host         Host to check against the patterns.\n * @param string[] $noProxyArray An array of host patterns.\n *\n * @throws Exception\\InvalidArgumentException\n *\n * @deprecated is_host_in_noproxy will be removed in guzzlehttp/guzzle:8.0. Use Utils::isHostInNoProxy instead.\n */\nfunction is_host_in_noproxy(string $host, array $noProxyArray): bool\n{\n    return Utils::isHostInNoProxy($host, $noProxyArray);\n}\n\n/**\n * Wrapper for json_decode that throws when an error occurs.\n *\n * @param string $json    JSON data to parse\n * @param bool   $assoc   When true, returned objects will be converted\n *                        into associative arrays.\n * @param int    $depth   User specified recursion depth.\n * @param int    $options Bitmask of JSON decode options.\n *\n * @return object|array|string|int|float|bool|null\n *\n * @throws Exception\\InvalidArgumentException if the JSON cannot be decoded.\n *\n * @link https://www.php.net/manual/en/function.json-decode.php\n * @deprecated json_decode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonDecode instead.\n */\nfunction json_decode(string $json, bool $assoc = false, int $depth = 512, int $options = 0)\n{\n    return Utils::jsonDecode($json, $assoc, $depth, $options);\n}\n\n/**\n * Wrapper for JSON encoding that throws when an error occurs.\n *\n * @param mixed $value   The value being encoded\n * @param int   $options JSON encode option bitmask\n * @param int   $depth   Set the maximum depth. Must be greater than zero.\n *\n * @throws Exception\\InvalidArgumentException if the JSON cannot be encoded.\n *\n * @link https://www.php.net/manual/en/function.json-encode.php\n * @deprecated json_encode will be removed in guzzlehttp/guzzle:8.0. Use Utils::jsonEncode instead.\n */\nfunction json_encode($value, int $options = 0, int $depth = 512): string\n{\n    return Utils::jsonEncode($value, $options, $depth);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/guzzle/src/functions_include.php",
    "content": "<?php\n\n// Don't redefine the functions if included multiple times.\nif (!\\function_exists('GuzzleHttp\\describe_type')) {\n    require __DIR__ . '/functions.php';\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/CHANGELOG.md",
    "content": "# CHANGELOG\n\n## 1.5.2 - 2022-08-07\n\n### Changed\n\n- Officially support PHP 8.2\n\n## 1.5.1 - 2021-10-22\n\n### Fixed\n\n- Revert \"Call handler when waiting on fulfilled/rejected Promise\"\n- Fix pool memory leak when empty array of promises provided\n\n## 1.5.0 - 2021-10-07\n\n### Changed\n\n- Call handler when waiting on fulfilled/rejected Promise\n- Officially support PHP 8.1\n\n### Fixed\n\n- Fix manually settle promises generated with `Utils::task`\n\n## 1.4.1 - 2021-02-18\n\n### Fixed\n\n- Fixed `each_limit` skipping promises and failing\n\n## 1.4.0 - 2020-09-30\n\n### Added\n\n- Support for PHP 8\n- Optional `$recursive` flag to `all`\n- Replaced functions by static methods\n\n### Fixed\n\n- Fix empty `each` processing\n- Fix promise handling for Iterators of non-unique keys\n- Fixed `method_exists` crashes on PHP 8\n- Memory leak on exceptions\n\n\n## 1.3.1 - 2016-12-20\n\n### Fixed\n\n- `wait()` foreign promise compatibility\n\n\n## 1.3.0 - 2016-11-18\n\n### Added\n\n- Adds support for custom task queues.\n\n### Fixed\n\n- Fixed coroutine promise memory leak.\n\n\n## 1.2.0 - 2016-05-18\n\n### Changed\n\n- Update to now catch `\\Throwable` on PHP 7+\n\n\n## 1.1.0 - 2016-03-07\n\n### Changed\n\n- Update EachPromise to prevent recurring on a iterator when advancing, as this\n  could trigger fatal generator errors.\n- Update Promise to allow recursive waiting without unwrapping exceptions.\n\n\n## 1.0.3 - 2015-10-15\n\n### Changed\n\n- Update EachPromise to immediately resolve when the underlying promise iterator\n  is empty. Previously, such a promise would throw an exception when its `wait`\n  function was called.\n\n\n## 1.0.2 - 2015-05-15\n\n### Changed\n\n- Conditionally require functions.php.\n\n\n## 1.0.1 - 2015-06-24\n\n### Changed\n\n- Updating EachPromise to call next on the underlying promise iterator as late\n  as possible to ensure that generators that generate new requests based on\n  callbacks are not iterated until after callbacks are invoked.\n\n\n## 1.0.0 - 2015-05-12\n\n- Initial release\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Michael Dowling <mtdowling@gmail.com>\nCopyright (c) 2015 Graham Campbell <hello@gjcampbell.co.uk>\nCopyright (c) 2017 Tobias Schultze <webmaster@tubo-world.de>\nCopyright (c) 2020 Tobias Nyholm <tobias.nyholm@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/README.md",
    "content": "# Guzzle Promises\n\n[Promises/A+](https://promisesaplus.com/) implementation that handles promise\nchaining and resolution iteratively, allowing for \"infinite\" promise chaining\nwhile keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/)\nfor a general introduction to promises.\n\n- [Features](#features)\n- [Quick start](#quick-start)\n- [Synchronous wait](#synchronous-wait)\n- [Cancellation](#cancellation)\n- [API](#api)\n  - [Promise](#promise)\n  - [FulfilledPromise](#fulfilledpromise)\n  - [RejectedPromise](#rejectedpromise)\n- [Promise interop](#promise-interop)\n- [Implementation notes](#implementation-notes)\n\n\n## Features\n\n- [Promises/A+](https://promisesaplus.com/) implementation.\n- Promise resolution and chaining is handled iteratively, allowing for\n  \"infinite\" promise chaining.\n- Promises have a synchronous `wait` method.\n- Promises can be cancelled.\n- Works with any object that has a `then` function.\n- C# style async/await coroutine promises using\n  `GuzzleHttp\\Promise\\Coroutine::of()`.\n\n\n## Quick Start\n\nA *promise* represents the eventual result of an asynchronous operation. The\nprimary way of interacting with a promise is through its `then` method, which\nregisters callbacks to receive either a promise's eventual value or the reason\nwhy the promise cannot be fulfilled.\n\n### Callbacks\n\nCallbacks are registered with the `then` method by providing an optional \n`$onFulfilled` followed by an optional `$onRejected` function.\n\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise->then(\n    // $onFulfilled\n    function ($value) {\n        echo 'The promise was fulfilled.';\n    },\n    // $onRejected\n    function ($reason) {\n        echo 'The promise was rejected.';\n    }\n);\n```\n\n*Resolving* a promise means that you either fulfill a promise with a *value* or\nreject a promise with a *reason*. Resolving a promise triggers callbacks\nregistered with the promise's `then` method. These callbacks are triggered\nonly once and in the order in which they were added.\n\n### Resolving a Promise\n\nPromises are fulfilled using the `resolve($value)` method. Resolving a promise\nwith any value other than a `GuzzleHttp\\Promise\\RejectedPromise` will trigger\nall of the onFulfilled callbacks (resolving a promise with a rejected promise\nwill reject the promise and trigger the `$onRejected` callbacks).\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise\n    ->then(function ($value) {\n        // Return a value and don't break the chain\n        return \"Hello, \" . $value;\n    })\n    // This then is executed after the first then and receives the value\n    // returned from the first then.\n    ->then(function ($value) {\n        echo $value;\n    });\n\n// Resolving the promise triggers the $onFulfilled callbacks and outputs\n// \"Hello, reader.\"\n$promise->resolve('reader.');\n```\n\n### Promise Forwarding\n\nPromises can be chained one after the other. Each then in the chain is a new\npromise. The return value of a promise is what's forwarded to the next\npromise in the chain. Returning a promise in a `then` callback will cause the\nsubsequent promises in the chain to only be fulfilled when the returned promise\nhas been fulfilled. The next promise in the chain will be invoked with the\nresolved value of the promise.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$nextPromise = new Promise();\n\n$promise\n    ->then(function ($value) use ($nextPromise) {\n        echo $value;\n        return $nextPromise;\n    })\n    ->then(function ($value) {\n        echo $value;\n    });\n\n// Triggers the first callback and outputs \"A\"\n$promise->resolve('A');\n// Triggers the second callback and outputs \"B\"\n$nextPromise->resolve('B');\n```\n\n### Promise Rejection\n\nWhen a promise is rejected, the `$onRejected` callbacks are invoked with the\nrejection reason.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise->then(null, function ($reason) {\n    echo $reason;\n});\n\n$promise->reject('Error!');\n// Outputs \"Error!\"\n```\n\n### Rejection Forwarding\n\nIf an exception is thrown in an `$onRejected` callback, subsequent\n`$onRejected` callbacks are invoked with the thrown exception as the reason.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise->then(null, function ($reason) {\n    throw new Exception($reason);\n})->then(null, function ($reason) {\n    assert($reason->getMessage() === 'Error!');\n});\n\n$promise->reject('Error!');\n```\n\nYou can also forward a rejection down the promise chain by returning a\n`GuzzleHttp\\Promise\\RejectedPromise` in either an `$onFulfilled` or\n`$onRejected` callback.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\nuse GuzzleHttp\\Promise\\RejectedPromise;\n\n$promise = new Promise();\n$promise->then(null, function ($reason) {\n    return new RejectedPromise($reason);\n})->then(null, function ($reason) {\n    assert($reason === 'Error!');\n});\n\n$promise->reject('Error!');\n```\n\nIf an exception is not thrown in a `$onRejected` callback and the callback\ndoes not return a rejected promise, downstream `$onFulfilled` callbacks are\ninvoked using the value returned from the `$onRejected` callback.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise();\n$promise\n    ->then(null, function ($reason) {\n        return \"It's ok\";\n    })\n    ->then(function ($value) {\n        assert($value === \"It's ok\");\n    });\n\n$promise->reject('Error!');\n```\n\n\n## Synchronous Wait\n\nYou can synchronously force promises to complete using a promise's `wait`\nmethod. When creating a promise, you can provide a wait function that is used\nto synchronously force a promise to complete. When a wait function is invoked\nit is expected to deliver a value to the promise or reject the promise. If the\nwait function does not deliver a value, then an exception is thrown. The wait\nfunction provided to a promise constructor is invoked when the `wait` function\nof the promise is called.\n\n```php\n$promise = new Promise(function () use (&$promise) {\n    $promise->resolve('foo');\n});\n\n// Calling wait will return the value of the promise.\necho $promise->wait(); // outputs \"foo\"\n```\n\nIf an exception is encountered while invoking the wait function of a promise,\nthe promise is rejected with the exception and the exception is thrown.\n\n```php\n$promise = new Promise(function () use (&$promise) {\n    throw new Exception('foo');\n});\n\n$promise->wait(); // throws the exception.\n```\n\nCalling `wait` on a promise that has been fulfilled will not trigger the wait\nfunction. It will simply return the previously resolved value.\n\n```php\n$promise = new Promise(function () { die('this is not called!'); });\n$promise->resolve('foo');\necho $promise->wait(); // outputs \"foo\"\n```\n\nCalling `wait` on a promise that has been rejected will throw an exception. If\nthe rejection reason is an instance of `\\Exception` the reason is thrown.\nOtherwise, a `GuzzleHttp\\Promise\\RejectionException` is thrown and the reason\ncan be obtained by calling the `getReason` method of the exception.\n\n```php\n$promise = new Promise();\n$promise->reject('foo');\n$promise->wait();\n```\n\n> PHP Fatal error:  Uncaught exception 'GuzzleHttp\\Promise\\RejectionException' with message 'The promise was rejected with value: foo'\n\n### Unwrapping a Promise\n\nWhen synchronously waiting on a promise, you are joining the state of the\npromise into the current state of execution (i.e., return the value of the\npromise if it was fulfilled or throw an exception if it was rejected). This is\ncalled \"unwrapping\" the promise. Waiting on a promise will by default unwrap\nthe promise state.\n\nYou can force a promise to resolve and *not* unwrap the state of the promise\nby passing `false` to the first argument of the `wait` function:\n\n```php\n$promise = new Promise();\n$promise->reject('foo');\n// This will not throw an exception. It simply ensures the promise has\n// been resolved.\n$promise->wait(false);\n```\n\nWhen unwrapping a promise, the resolved value of the promise will be waited\nupon until the unwrapped value is not a promise. This means that if you resolve\npromise A with a promise B and unwrap promise A, the value returned by the\nwait function will be the value delivered to promise B.\n\n**Note**: when you do not unwrap the promise, no value is returned.\n\n\n## Cancellation\n\nYou can cancel a promise that has not yet been fulfilled using the `cancel()`\nmethod of a promise. When creating a promise you can provide an optional\ncancel function that when invoked cancels the action of computing a resolution\nof the promise.\n\n\n## API\n\n### Promise\n\nWhen creating a promise object, you can provide an optional `$waitFn` and\n`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is\nexpected to resolve the promise. `$cancelFn` is a function with no arguments\nthat is expected to cancel the computation of a promise. It is invoked when the\n`cancel()` method of a promise is called.\n\n```php\nuse GuzzleHttp\\Promise\\Promise;\n\n$promise = new Promise(\n    function () use (&$promise) {\n        $promise->resolve('waited');\n    },\n    function () {\n        // do something that will cancel the promise computation (e.g., close\n        // a socket, cancel a database query, etc...)\n    }\n);\n\nassert('waited' === $promise->wait());\n```\n\nA promise has the following methods:\n\n- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface`\n  \n  Appends fulfillment and rejection handlers to the promise, and returns a new promise resolving to the return value of the called handler.\n\n- `otherwise(callable $onRejected) : PromiseInterface`\n  \n  Appends a rejection handler callback to the promise, and returns a new promise resolving to the return value of the callback if it is called, or to its original fulfillment value if the promise is instead fulfilled.\n\n- `wait($unwrap = true) : mixed`\n\n  Synchronously waits on the promise to complete.\n  \n  `$unwrap` controls whether or not the value of the promise is returned for a\n  fulfilled promise or if an exception is thrown if the promise is rejected.\n  This is set to `true` by default.\n\n- `cancel()`\n\n  Attempts to cancel the promise if possible. The promise being cancelled and\n  the parent most ancestor that has not yet been resolved will also be\n  cancelled. Any promises waiting on the cancelled promise to resolve will also\n  be cancelled.\n\n- `getState() : string`\n\n  Returns the state of the promise. One of `pending`, `fulfilled`, or\n  `rejected`.\n\n- `resolve($value)`\n\n  Fulfills the promise with the given `$value`.\n\n- `reject($reason)`\n\n  Rejects the promise with the given `$reason`.\n\n\n### FulfilledPromise\n\nA fulfilled promise can be created to represent a promise that has been\nfulfilled.\n\n```php\nuse GuzzleHttp\\Promise\\FulfilledPromise;\n\n$promise = new FulfilledPromise('value');\n\n// Fulfilled callbacks are immediately invoked.\n$promise->then(function ($value) {\n    echo $value;\n});\n```\n\n\n### RejectedPromise\n\nA rejected promise can be created to represent a promise that has been\nrejected.\n\n```php\nuse GuzzleHttp\\Promise\\RejectedPromise;\n\n$promise = new RejectedPromise('Error');\n\n// Rejected callbacks are immediately invoked.\n$promise->then(null, function ($reason) {\n    echo $reason;\n});\n```\n\n\n## Promise Interoperability\n\nThis library works with foreign promises that have a `then` method. This means\nyou can use Guzzle promises with [React promises](https://github.com/reactphp/promise)\nfor example. When a foreign promise is returned inside of a then method\ncallback, promise resolution will occur recursively.\n\n```php\n// Create a React promise\n$deferred = new React\\Promise\\Deferred();\n$reactPromise = $deferred->promise();\n\n// Create a Guzzle promise that is fulfilled with a React promise.\n$guzzlePromise = new GuzzleHttp\\Promise\\Promise();\n$guzzlePromise->then(function ($value) use ($reactPromise) {\n    // Do something something with the value...\n    // Return the React promise\n    return $reactPromise;\n});\n```\n\nPlease note that wait and cancel chaining is no longer possible when forwarding\na foreign promise. You will need to wrap a third-party promise with a Guzzle\npromise in order to utilize wait and cancel functions with foreign promises.\n\n\n### Event Loop Integration\n\nIn order to keep the stack size constant, Guzzle promises are resolved\nasynchronously using a task queue. When waiting on promises synchronously, the\ntask queue will be automatically run to ensure that the blocking promise and\nany forwarded promises are resolved. When using promises asynchronously in an\nevent loop, you will need to run the task queue on each tick of the loop. If\nyou do not run the task queue, then promises will not be resolved.\n\nYou can run the task queue using the `run()` method of the global task queue\ninstance.\n\n```php\n// Get the global task queue\n$queue = GuzzleHttp\\Promise\\Utils::queue();\n$queue->run();\n```\n\nFor example, you could use Guzzle promises with React using a periodic timer:\n\n```php\n$loop = React\\EventLoop\\Factory::create();\n$loop->addPeriodicTimer(0, [$queue, 'run']);\n```\n\n*TODO*: Perhaps adding a `futureTick()` on each tick would be faster?\n\n\n## Implementation Notes\n\n### Promise Resolution and Chaining is Handled Iteratively\n\nBy shuffling pending handlers from one owner to another, promises are\nresolved iteratively, allowing for \"infinite\" then chaining.\n\n```php\n<?php\nrequire 'vendor/autoload.php';\n\nuse GuzzleHttp\\Promise\\Promise;\n\n$parent = new Promise();\n$p = $parent;\n\nfor ($i = 0; $i < 1000; $i++) {\n    $p = $p->then(function ($v) {\n        // The stack size remains constant (a good thing)\n        echo xdebug_get_stack_depth() . ', ';\n        return $v + 1;\n    });\n}\n\n$parent->resolve(0);\nvar_dump($p->wait()); // int(1000)\n\n```\n\nWhen a promise is fulfilled or rejected with a non-promise value, the promise\nthen takes ownership of the handlers of each child promise and delivers values\ndown the chain without using recursion.\n\nWhen a promise is resolved with another promise, the original promise transfers\nall of its pending handlers to the new promise. When the new promise is\neventually resolved, all of the pending handlers are delivered the forwarded\nvalue.\n\n### A Promise is the Deferred\n\nSome promise libraries implement promises using a deferred object to represent\na computation and a promise object to represent the delivery of the result of\nthe computation. This is a nice separation of computation and delivery because\nconsumers of the promise cannot modify the value that will be eventually\ndelivered.\n\nOne side effect of being able to implement promise resolution and chaining\niteratively is that you need to be able for one promise to reach into the state\nof another promise to shuffle around ownership of handlers. In order to achieve\nthis without making the handlers of a promise publicly mutable, a promise is\nalso the deferred value, allowing promises of the same parent class to reach\ninto and modify the private properties of promises of the same type. While this\ndoes allow consumers of the value to modify the resolution or rejection of the\ndeferred, it is a small price to pay for keeping the stack size constant.\n\n```php\n$promise = new Promise();\n$promise->then(function ($value) { echo $value; });\n// The promise is the deferred value, so you can deliver a value to it.\n$promise->resolve('foo');\n// prints \"foo\"\n```\n\n\n## Upgrading from Function API\n\nA static API was first introduced in 1.4.0, in order to mitigate problems with\nfunctions conflicting between global and local copies of the package. The\nfunction API will be removed in 2.0.0. A migration table has been provided here\nfor your convenience:\n\n| Original Function | Replacement Method |\n|----------------|----------------|\n| `queue` | `Utils::queue` |\n| `task` | `Utils::task` |\n| `promise_for` | `Create::promiseFor` |\n| `rejection_for` | `Create::rejectionFor` |\n| `exception_for` | `Create::exceptionFor` |\n| `iter_for` | `Create::iterFor` |\n| `inspect` | `Utils::inspect` |\n| `inspect_all` | `Utils::inspectAll` |\n| `unwrap` | `Utils::unwrap` |\n| `all` | `Utils::all` |\n| `some` | `Utils::some` |\n| `any` | `Utils::any` |\n| `settle` | `Utils::settle` |\n| `each` | `Each::of` |\n| `each_limit` | `Each::ofLimit` |\n| `each_limit_all` | `Each::ofLimitAll` |\n| `!is_fulfilled` | `Is::pending` |\n| `is_fulfilled` | `Is::fulfilled` |\n| `is_rejected` | `Is::rejected` |\n| `is_settled` | `Is::settled` |\n| `coroutine` | `Coroutine::of` |\n\n\n## Security\n\nIf you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/promises/security/policy) for more information.\n\n\n## License\n\nGuzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.\n\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-promises?utm_source=packagist-guzzlehttp-promises&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/composer.json",
    "content": "{\n    \"name\": \"guzzlehttp/promises\",\n    \"description\": \"Guzzle promises library\",\n    \"keywords\": [\"promise\"],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"hello@gjcampbell.co.uk\",\n            \"homepage\": \"https://github.com/GrahamCampbell\"\n        },\n        {\n            \"name\": \"Michael Dowling\",\n            \"email\": \"mtdowling@gmail.com\",\n            \"homepage\": \"https://github.com/mtdowling\"\n        },\n        {\n            \"name\": \"Tobias Nyholm\",\n            \"email\": \"tobias.nyholm@gmail.com\",\n            \"homepage\": \"https://github.com/Nyholm\"\n        },\n        {\n            \"name\": \"Tobias Schultze\",\n            \"email\": \"webmaster@tubo-world.de\",\n            \"homepage\": \"https://github.com/Tobion\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.5\"\n    },\n    \"require-dev\": {\n        \"symfony/phpunit-bridge\": \"^4.4 || ^5.1\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Promise\\\\\": \"src/\"\n        },\n        \"files\": [\"src/functions_include.php\"]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Promise\\\\Tests\\\\\": \"tests/\"\n        }\n    },\n    \"scripts\": {\n        \"test\": \"vendor/bin/simple-phpunit\",\n        \"test-ci\": \"vendor/bin/simple-phpunit --coverage-text\"\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.5-dev\"\n        }\n    },\n    \"config\": {\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/AggregateException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Exception thrown when too many errors occur in the some() or any() methods.\n */\nclass AggregateException extends RejectionException\n{\n    public function __construct($msg, array $reasons)\n    {\n        parent::__construct(\n            $reasons,\n            sprintf('%s; %d rejected promises', $msg, count($reasons))\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/CancellationException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Exception that is set as the reason for a promise that has been cancelled.\n */\nclass CancellationException extends RejectionException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/Coroutine.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\nuse Exception;\nuse Generator;\nuse Throwable;\n\n/**\n * Creates a promise that is resolved using a generator that yields values or\n * promises (somewhat similar to C#'s async keyword).\n *\n * When called, the Coroutine::of method will start an instance of the generator\n * and returns a promise that is fulfilled with its final yielded value.\n *\n * Control is returned back to the generator when the yielded promise settles.\n * This can lead to less verbose code when doing lots of sequential async calls\n * with minimal processing in between.\n *\n *     use GuzzleHttp\\Promise;\n *\n *     function createPromise($value) {\n *         return new Promise\\FulfilledPromise($value);\n *     }\n *\n *     $promise = Promise\\Coroutine::of(function () {\n *         $value = (yield createPromise('a'));\n *         try {\n *             $value = (yield createPromise($value . 'b'));\n *         } catch (\\Exception $e) {\n *             // The promise was rejected.\n *         }\n *         yield $value . 'c';\n *     });\n *\n *     // Outputs \"abc\"\n *     $promise->then(function ($v) { echo $v; });\n *\n * @param callable $generatorFn Generator function to wrap into a promise.\n *\n * @return Promise\n *\n * @link https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration\n */\nfinal class Coroutine implements PromiseInterface\n{\n    /**\n     * @var PromiseInterface|null\n     */\n    private $currentPromise;\n\n    /**\n     * @var Generator\n     */\n    private $generator;\n\n    /**\n     * @var Promise\n     */\n    private $result;\n\n    public function __construct(callable $generatorFn)\n    {\n        $this->generator = $generatorFn();\n        $this->result = new Promise(function () {\n            while (isset($this->currentPromise)) {\n                $this->currentPromise->wait();\n            }\n        });\n        try {\n            $this->nextCoroutine($this->generator->current());\n        } catch (\\Exception $exception) {\n            $this->result->reject($exception);\n        } catch (Throwable $throwable) {\n            $this->result->reject($throwable);\n        }\n    }\n\n    /**\n     * Create a new coroutine.\n     *\n     * @return self\n     */\n    public static function of(callable $generatorFn)\n    {\n        return new self($generatorFn);\n    }\n\n    public function then(\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    ) {\n        return $this->result->then($onFulfilled, $onRejected);\n    }\n\n    public function otherwise(callable $onRejected)\n    {\n        return $this->result->otherwise($onRejected);\n    }\n\n    public function wait($unwrap = true)\n    {\n        return $this->result->wait($unwrap);\n    }\n\n    public function getState()\n    {\n        return $this->result->getState();\n    }\n\n    public function resolve($value)\n    {\n        $this->result->resolve($value);\n    }\n\n    public function reject($reason)\n    {\n        $this->result->reject($reason);\n    }\n\n    public function cancel()\n    {\n        $this->currentPromise->cancel();\n        $this->result->cancel();\n    }\n\n    private function nextCoroutine($yielded)\n    {\n        $this->currentPromise = Create::promiseFor($yielded)\n            ->then([$this, '_handleSuccess'], [$this, '_handleFailure']);\n    }\n\n    /**\n     * @internal\n     */\n    public function _handleSuccess($value)\n    {\n        unset($this->currentPromise);\n        try {\n            $next = $this->generator->send($value);\n            if ($this->generator->valid()) {\n                $this->nextCoroutine($next);\n            } else {\n                $this->result->resolve($value);\n            }\n        } catch (Exception $exception) {\n            $this->result->reject($exception);\n        } catch (Throwable $throwable) {\n            $this->result->reject($throwable);\n        }\n    }\n\n    /**\n     * @internal\n     */\n    public function _handleFailure($reason)\n    {\n        unset($this->currentPromise);\n        try {\n            $nextYield = $this->generator->throw(Create::exceptionFor($reason));\n            // The throw was caught, so keep iterating on the coroutine\n            $this->nextCoroutine($nextYield);\n        } catch (Exception $exception) {\n            $this->result->reject($exception);\n        } catch (Throwable $throwable) {\n            $this->result->reject($throwable);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/Create.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Create\n{\n    /**\n     * Creates a promise for a value if the value is not a promise.\n     *\n     * @param mixed $value Promise or value.\n     *\n     * @return PromiseInterface\n     */\n    public static function promiseFor($value)\n    {\n        if ($value instanceof PromiseInterface) {\n            return $value;\n        }\n\n        // Return a Guzzle promise that shadows the given promise.\n        if (is_object($value) && method_exists($value, 'then')) {\n            $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null;\n            $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null;\n            $promise = new Promise($wfn, $cfn);\n            $value->then([$promise, 'resolve'], [$promise, 'reject']);\n            return $promise;\n        }\n\n        return new FulfilledPromise($value);\n    }\n\n    /**\n     * Creates a rejected promise for a reason if the reason is not a promise.\n     * If the provided reason is a promise, then it is returned as-is.\n     *\n     * @param mixed $reason Promise or reason.\n     *\n     * @return PromiseInterface\n     */\n    public static function rejectionFor($reason)\n    {\n        if ($reason instanceof PromiseInterface) {\n            return $reason;\n        }\n\n        return new RejectedPromise($reason);\n    }\n\n    /**\n     * Create an exception for a rejected promise value.\n     *\n     * @param mixed $reason\n     *\n     * @return \\Exception|\\Throwable\n     */\n    public static function exceptionFor($reason)\n    {\n        if ($reason instanceof \\Exception || $reason instanceof \\Throwable) {\n            return $reason;\n        }\n\n        return new RejectionException($reason);\n    }\n\n    /**\n     * Returns an iterator for the given value.\n     *\n     * @param mixed $value\n     *\n     * @return \\Iterator\n     */\n    public static function iterFor($value)\n    {\n        if ($value instanceof \\Iterator) {\n            return $value;\n        }\n\n        if (is_array($value)) {\n            return new \\ArrayIterator($value);\n        }\n\n        return new \\ArrayIterator([$value]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/Each.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Each\n{\n    /**\n     * Given an iterator that yields promises or values, returns a promise that\n     * is fulfilled with a null value when the iterator has been consumed or\n     * the aggregate promise has been fulfilled or rejected.\n     *\n     * $onFulfilled is a function that accepts the fulfilled value, iterator\n     * index, and the aggregate promise. The callback can invoke any necessary\n     * side effects and choose to resolve or reject the aggregate if needed.\n     *\n     * $onRejected is a function that accepts the rejection reason, iterator\n     * index, and the aggregate promise. The callback can invoke any necessary\n     * side effects and choose to resolve or reject the aggregate if needed.\n     *\n     * @param mixed    $iterable    Iterator or array to iterate over.\n     * @param callable $onFulfilled\n     * @param callable $onRejected\n     *\n     * @return PromiseInterface\n     */\n    public static function of(\n        $iterable,\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    ) {\n        return (new EachPromise($iterable, [\n            'fulfilled' => $onFulfilled,\n            'rejected'  => $onRejected\n        ]))->promise();\n    }\n\n    /**\n     * Like of, but only allows a certain number of outstanding promises at any\n     * given time.\n     *\n     * $concurrency may be an integer or a function that accepts the number of\n     * pending promises and returns a numeric concurrency limit value to allow\n     * for dynamic a concurrency size.\n     *\n     * @param mixed        $iterable\n     * @param int|callable $concurrency\n     * @param callable     $onFulfilled\n     * @param callable     $onRejected\n     *\n     * @return PromiseInterface\n     */\n    public static function ofLimit(\n        $iterable,\n        $concurrency,\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    ) {\n        return (new EachPromise($iterable, [\n            'fulfilled'   => $onFulfilled,\n            'rejected'    => $onRejected,\n            'concurrency' => $concurrency\n        ]))->promise();\n    }\n\n    /**\n     * Like limit, but ensures that no promise in the given $iterable argument\n     * is rejected. If any promise is rejected, then the aggregate promise is\n     * rejected with the encountered rejection.\n     *\n     * @param mixed        $iterable\n     * @param int|callable $concurrency\n     * @param callable     $onFulfilled\n     *\n     * @return PromiseInterface\n     */\n    public static function ofLimitAll(\n        $iterable,\n        $concurrency,\n        callable $onFulfilled = null\n    ) {\n        return each_limit(\n            $iterable,\n            $concurrency,\n            $onFulfilled,\n            function ($reason, $idx, PromiseInterface $aggregate) {\n                $aggregate->reject($reason);\n            }\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/EachPromise.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Represents a promise that iterates over many promises and invokes\n * side-effect functions in the process.\n */\nclass EachPromise implements PromisorInterface\n{\n    private $pending = [];\n\n    private $nextPendingIndex = 0;\n\n    /** @var \\Iterator|null */\n    private $iterable;\n\n    /** @var callable|int|null */\n    private $concurrency;\n\n    /** @var callable|null */\n    private $onFulfilled;\n\n    /** @var callable|null */\n    private $onRejected;\n\n    /** @var Promise|null */\n    private $aggregate;\n\n    /** @var bool|null */\n    private $mutex;\n\n    /**\n     * Configuration hash can include the following key value pairs:\n     *\n     * - fulfilled: (callable) Invoked when a promise fulfills. The function\n     *   is invoked with three arguments: the fulfillment value, the index\n     *   position from the iterable list of the promise, and the aggregate\n     *   promise that manages all of the promises. The aggregate promise may\n     *   be resolved from within the callback to short-circuit the promise.\n     * - rejected: (callable) Invoked when a promise is rejected. The\n     *   function is invoked with three arguments: the rejection reason, the\n     *   index position from the iterable list of the promise, and the\n     *   aggregate promise that manages all of the promises. The aggregate\n     *   promise may be resolved from within the callback to short-circuit\n     *   the promise.\n     * - concurrency: (integer) Pass this configuration option to limit the\n     *   allowed number of outstanding concurrently executing promises,\n     *   creating a capped pool of promises. There is no limit by default.\n     *\n     * @param mixed $iterable Promises or values to iterate.\n     * @param array $config   Configuration options\n     */\n    public function __construct($iterable, array $config = [])\n    {\n        $this->iterable = Create::iterFor($iterable);\n\n        if (isset($config['concurrency'])) {\n            $this->concurrency = $config['concurrency'];\n        }\n\n        if (isset($config['fulfilled'])) {\n            $this->onFulfilled = $config['fulfilled'];\n        }\n\n        if (isset($config['rejected'])) {\n            $this->onRejected = $config['rejected'];\n        }\n    }\n\n    /** @psalm-suppress InvalidNullableReturnType */\n    public function promise()\n    {\n        if ($this->aggregate) {\n            return $this->aggregate;\n        }\n\n        try {\n            $this->createPromise();\n            /** @psalm-assert Promise $this->aggregate */\n            $this->iterable->rewind();\n            $this->refillPending();\n        } catch (\\Throwable $e) {\n            $this->aggregate->reject($e);\n        } catch (\\Exception $e) {\n            $this->aggregate->reject($e);\n        }\n\n        /**\n         * @psalm-suppress NullableReturnStatement\n         * @phpstan-ignore-next-line\n         */\n        return $this->aggregate;\n    }\n\n    private function createPromise()\n    {\n        $this->mutex = false;\n        $this->aggregate = new Promise(function () {\n            if ($this->checkIfFinished()) {\n                return;\n            }\n            reset($this->pending);\n            // Consume a potentially fluctuating list of promises while\n            // ensuring that indexes are maintained (precluding array_shift).\n            while ($promise = current($this->pending)) {\n                next($this->pending);\n                $promise->wait();\n                if (Is::settled($this->aggregate)) {\n                    return;\n                }\n            }\n        });\n\n        // Clear the references when the promise is resolved.\n        $clearFn = function () {\n            $this->iterable = $this->concurrency = $this->pending = null;\n            $this->onFulfilled = $this->onRejected = null;\n            $this->nextPendingIndex = 0;\n        };\n\n        $this->aggregate->then($clearFn, $clearFn);\n    }\n\n    private function refillPending()\n    {\n        if (!$this->concurrency) {\n            // Add all pending promises.\n            while ($this->addPending() && $this->advanceIterator());\n            return;\n        }\n\n        // Add only up to N pending promises.\n        $concurrency = is_callable($this->concurrency)\n            ? call_user_func($this->concurrency, count($this->pending))\n            : $this->concurrency;\n        $concurrency = max($concurrency - count($this->pending), 0);\n        // Concurrency may be set to 0 to disallow new promises.\n        if (!$concurrency) {\n            return;\n        }\n        // Add the first pending promise.\n        $this->addPending();\n        // Note this is special handling for concurrency=1 so that we do\n        // not advance the iterator after adding the first promise. This\n        // helps work around issues with generators that might not have the\n        // next value to yield until promise callbacks are called.\n        while (--$concurrency\n            && $this->advanceIterator()\n            && $this->addPending());\n    }\n\n    private function addPending()\n    {\n        if (!$this->iterable || !$this->iterable->valid()) {\n            return false;\n        }\n\n        $promise = Create::promiseFor($this->iterable->current());\n        $key = $this->iterable->key();\n\n        // Iterable keys may not be unique, so we use a counter to\n        // guarantee uniqueness\n        $idx = $this->nextPendingIndex++;\n\n        $this->pending[$idx] = $promise->then(\n            function ($value) use ($idx, $key) {\n                if ($this->onFulfilled) {\n                    call_user_func(\n                        $this->onFulfilled,\n                        $value,\n                        $key,\n                        $this->aggregate\n                    );\n                }\n                $this->step($idx);\n            },\n            function ($reason) use ($idx, $key) {\n                if ($this->onRejected) {\n                    call_user_func(\n                        $this->onRejected,\n                        $reason,\n                        $key,\n                        $this->aggregate\n                    );\n                }\n                $this->step($idx);\n            }\n        );\n\n        return true;\n    }\n\n    private function advanceIterator()\n    {\n        // Place a lock on the iterator so that we ensure to not recurse,\n        // preventing fatal generator errors.\n        if ($this->mutex) {\n            return false;\n        }\n\n        $this->mutex = true;\n\n        try {\n            $this->iterable->next();\n            $this->mutex = false;\n            return true;\n        } catch (\\Throwable $e) {\n            $this->aggregate->reject($e);\n            $this->mutex = false;\n            return false;\n        } catch (\\Exception $e) {\n            $this->aggregate->reject($e);\n            $this->mutex = false;\n            return false;\n        }\n    }\n\n    private function step($idx)\n    {\n        // If the promise was already resolved, then ignore this step.\n        if (Is::settled($this->aggregate)) {\n            return;\n        }\n\n        unset($this->pending[$idx]);\n\n        // Only refill pending promises if we are not locked, preventing the\n        // EachPromise to recursively invoke the provided iterator, which\n        // cause a fatal error: \"Cannot resume an already running generator\"\n        if ($this->advanceIterator() && !$this->checkIfFinished()) {\n            // Add more pending promises if possible.\n            $this->refillPending();\n        }\n    }\n\n    private function checkIfFinished()\n    {\n        if (!$this->pending && !$this->iterable->valid()) {\n            // Resolve the promise if there's nothing left to do.\n            $this->aggregate->resolve(null);\n            return true;\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/FulfilledPromise.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A promise that has been fulfilled.\n *\n * Thenning off of this promise will invoke the onFulfilled callback\n * immediately and ignore other callbacks.\n */\nclass FulfilledPromise implements PromiseInterface\n{\n    private $value;\n\n    public function __construct($value)\n    {\n        if (is_object($value) && method_exists($value, 'then')) {\n            throw new \\InvalidArgumentException(\n                'You cannot create a FulfilledPromise with a promise.'\n            );\n        }\n\n        $this->value = $value;\n    }\n\n    public function then(\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    ) {\n        // Return itself if there is no onFulfilled function.\n        if (!$onFulfilled) {\n            return $this;\n        }\n\n        $queue = Utils::queue();\n        $p = new Promise([$queue, 'run']);\n        $value = $this->value;\n        $queue->add(static function () use ($p, $value, $onFulfilled) {\n            if (Is::pending($p)) {\n                try {\n                    $p->resolve($onFulfilled($value));\n                } catch (\\Throwable $e) {\n                    $p->reject($e);\n                } catch (\\Exception $e) {\n                    $p->reject($e);\n                }\n            }\n        });\n\n        return $p;\n    }\n\n    public function otherwise(callable $onRejected)\n    {\n        return $this->then(null, $onRejected);\n    }\n\n    public function wait($unwrap = true, $defaultDelivery = null)\n    {\n        return $unwrap ? $this->value : null;\n    }\n\n    public function getState()\n    {\n        return self::FULFILLED;\n    }\n\n    public function resolve($value)\n    {\n        if ($value !== $this->value) {\n            throw new \\LogicException(\"Cannot resolve a fulfilled promise\");\n        }\n    }\n\n    public function reject($reason)\n    {\n        throw new \\LogicException(\"Cannot reject a fulfilled promise\");\n    }\n\n    public function cancel()\n    {\n        // pass\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/Is.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Is\n{\n    /**\n     * Returns true if a promise is pending.\n     *\n     * @return bool\n     */\n    public static function pending(PromiseInterface $promise)\n    {\n        return $promise->getState() === PromiseInterface::PENDING;\n    }\n\n    /**\n     * Returns true if a promise is fulfilled or rejected.\n     *\n     * @return bool\n     */\n    public static function settled(PromiseInterface $promise)\n    {\n        return $promise->getState() !== PromiseInterface::PENDING;\n    }\n\n    /**\n     * Returns true if a promise is fulfilled.\n     *\n     * @return bool\n     */\n    public static function fulfilled(PromiseInterface $promise)\n    {\n        return $promise->getState() === PromiseInterface::FULFILLED;\n    }\n\n    /**\n     * Returns true if a promise is rejected.\n     *\n     * @return bool\n     */\n    public static function rejected(PromiseInterface $promise)\n    {\n        return $promise->getState() === PromiseInterface::REJECTED;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/Promise.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Promises/A+ implementation that avoids recursion when possible.\n *\n * @link https://promisesaplus.com/\n */\nclass Promise implements PromiseInterface\n{\n    private $state = self::PENDING;\n    private $result;\n    private $cancelFn;\n    private $waitFn;\n    private $waitList;\n    private $handlers = [];\n\n    /**\n     * @param callable $waitFn   Fn that when invoked resolves the promise.\n     * @param callable $cancelFn Fn that when invoked cancels the promise.\n     */\n    public function __construct(\n        callable $waitFn = null,\n        callable $cancelFn = null\n    ) {\n        $this->waitFn = $waitFn;\n        $this->cancelFn = $cancelFn;\n    }\n\n    public function then(\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    ) {\n        if ($this->state === self::PENDING) {\n            $p = new Promise(null, [$this, 'cancel']);\n            $this->handlers[] = [$p, $onFulfilled, $onRejected];\n            $p->waitList = $this->waitList;\n            $p->waitList[] = $this;\n            return $p;\n        }\n\n        // Return a fulfilled promise and immediately invoke any callbacks.\n        if ($this->state === self::FULFILLED) {\n            $promise = Create::promiseFor($this->result);\n            return $onFulfilled ? $promise->then($onFulfilled) : $promise;\n        }\n\n        // It's either cancelled or rejected, so return a rejected promise\n        // and immediately invoke any callbacks.\n        $rejection = Create::rejectionFor($this->result);\n        return $onRejected ? $rejection->then(null, $onRejected) : $rejection;\n    }\n\n    public function otherwise(callable $onRejected)\n    {\n        return $this->then(null, $onRejected);\n    }\n\n    public function wait($unwrap = true)\n    {\n        $this->waitIfPending();\n\n        if ($this->result instanceof PromiseInterface) {\n            return $this->result->wait($unwrap);\n        }\n        if ($unwrap) {\n            if ($this->state === self::FULFILLED) {\n                return $this->result;\n            }\n            // It's rejected so \"unwrap\" and throw an exception.\n            throw Create::exceptionFor($this->result);\n        }\n    }\n\n    public function getState()\n    {\n        return $this->state;\n    }\n\n    public function cancel()\n    {\n        if ($this->state !== self::PENDING) {\n            return;\n        }\n\n        $this->waitFn = $this->waitList = null;\n\n        if ($this->cancelFn) {\n            $fn = $this->cancelFn;\n            $this->cancelFn = null;\n            try {\n                $fn();\n            } catch (\\Throwable $e) {\n                $this->reject($e);\n            } catch (\\Exception $e) {\n                $this->reject($e);\n            }\n        }\n\n        // Reject the promise only if it wasn't rejected in a then callback.\n        /** @psalm-suppress RedundantCondition */\n        if ($this->state === self::PENDING) {\n            $this->reject(new CancellationException('Promise has been cancelled'));\n        }\n    }\n\n    public function resolve($value)\n    {\n        $this->settle(self::FULFILLED, $value);\n    }\n\n    public function reject($reason)\n    {\n        $this->settle(self::REJECTED, $reason);\n    }\n\n    private function settle($state, $value)\n    {\n        if ($this->state !== self::PENDING) {\n            // Ignore calls with the same resolution.\n            if ($state === $this->state && $value === $this->result) {\n                return;\n            }\n            throw $this->state === $state\n                ? new \\LogicException(\"The promise is already {$state}.\")\n                : new \\LogicException(\"Cannot change a {$this->state} promise to {$state}\");\n        }\n\n        if ($value === $this) {\n            throw new \\LogicException('Cannot fulfill or reject a promise with itself');\n        }\n\n        // Clear out the state of the promise but stash the handlers.\n        $this->state = $state;\n        $this->result = $value;\n        $handlers = $this->handlers;\n        $this->handlers = null;\n        $this->waitList = $this->waitFn = null;\n        $this->cancelFn = null;\n\n        if (!$handlers) {\n            return;\n        }\n\n        // If the value was not a settled promise or a thenable, then resolve\n        // it in the task queue using the correct ID.\n        if (!is_object($value) || !method_exists($value, 'then')) {\n            $id = $state === self::FULFILLED ? 1 : 2;\n            // It's a success, so resolve the handlers in the queue.\n            Utils::queue()->add(static function () use ($id, $value, $handlers) {\n                foreach ($handlers as $handler) {\n                    self::callHandler($id, $value, $handler);\n                }\n            });\n        } elseif ($value instanceof Promise && Is::pending($value)) {\n            // We can just merge our handlers onto the next promise.\n            $value->handlers = array_merge($value->handlers, $handlers);\n        } else {\n            // Resolve the handlers when the forwarded promise is resolved.\n            $value->then(\n                static function ($value) use ($handlers) {\n                    foreach ($handlers as $handler) {\n                        self::callHandler(1, $value, $handler);\n                    }\n                },\n                static function ($reason) use ($handlers) {\n                    foreach ($handlers as $handler) {\n                        self::callHandler(2, $reason, $handler);\n                    }\n                }\n            );\n        }\n    }\n\n    /**\n     * Call a stack of handlers using a specific callback index and value.\n     *\n     * @param int   $index   1 (resolve) or 2 (reject).\n     * @param mixed $value   Value to pass to the callback.\n     * @param array $handler Array of handler data (promise and callbacks).\n     */\n    private static function callHandler($index, $value, array $handler)\n    {\n        /** @var PromiseInterface $promise */\n        $promise = $handler[0];\n\n        // The promise may have been cancelled or resolved before placing\n        // this thunk in the queue.\n        if (Is::settled($promise)) {\n            return;\n        }\n\n        try {\n            if (isset($handler[$index])) {\n                /*\n                 * If $f throws an exception, then $handler will be in the exception\n                 * stack trace. Since $handler contains a reference to the callable\n                 * itself we get a circular reference. We clear the $handler\n                 * here to avoid that memory leak.\n                 */\n                $f = $handler[$index];\n                unset($handler);\n                $promise->resolve($f($value));\n            } elseif ($index === 1) {\n                // Forward resolution values as-is.\n                $promise->resolve($value);\n            } else {\n                // Forward rejections down the chain.\n                $promise->reject($value);\n            }\n        } catch (\\Throwable $reason) {\n            $promise->reject($reason);\n        } catch (\\Exception $reason) {\n            $promise->reject($reason);\n        }\n    }\n\n    private function waitIfPending()\n    {\n        if ($this->state !== self::PENDING) {\n            return;\n        } elseif ($this->waitFn) {\n            $this->invokeWaitFn();\n        } elseif ($this->waitList) {\n            $this->invokeWaitList();\n        } else {\n            // If there's no wait function, then reject the promise.\n            $this->reject('Cannot wait on a promise that has '\n                . 'no internal wait function. You must provide a wait '\n                . 'function when constructing the promise to be able to '\n                . 'wait on a promise.');\n        }\n\n        Utils::queue()->run();\n\n        /** @psalm-suppress RedundantCondition */\n        if ($this->state === self::PENDING) {\n            $this->reject('Invoking the wait callback did not resolve the promise');\n        }\n    }\n\n    private function invokeWaitFn()\n    {\n        try {\n            $wfn = $this->waitFn;\n            $this->waitFn = null;\n            $wfn(true);\n        } catch (\\Exception $reason) {\n            if ($this->state === self::PENDING) {\n                // The promise has not been resolved yet, so reject the promise\n                // with the exception.\n                $this->reject($reason);\n            } else {\n                // The promise was already resolved, so there's a problem in\n                // the application.\n                throw $reason;\n            }\n        }\n    }\n\n    private function invokeWaitList()\n    {\n        $waitList = $this->waitList;\n        $this->waitList = null;\n\n        foreach ($waitList as $result) {\n            do {\n                $result->waitIfPending();\n                $result = $result->result;\n            } while ($result instanceof Promise);\n\n            if ($result instanceof PromiseInterface) {\n                $result->wait(false);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/PromiseInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A promise represents the eventual result of an asynchronous operation.\n *\n * The primary way of interacting with a promise is through its then method,\n * which registers callbacks to receive either a promise’s eventual value or\n * the reason why the promise cannot be fulfilled.\n *\n * @link https://promisesaplus.com/\n */\ninterface PromiseInterface\n{\n    const PENDING = 'pending';\n    const FULFILLED = 'fulfilled';\n    const REJECTED = 'rejected';\n\n    /**\n     * Appends fulfillment and rejection handlers to the promise, and returns\n     * a new promise resolving to the return value of the called handler.\n     *\n     * @param callable $onFulfilled Invoked when the promise fulfills.\n     * @param callable $onRejected  Invoked when the promise is rejected.\n     *\n     * @return PromiseInterface\n     */\n    public function then(\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    );\n\n    /**\n     * Appends a rejection handler callback to the promise, and returns a new\n     * promise resolving to the return value of the callback if it is called,\n     * or to its original fulfillment value if the promise is instead\n     * fulfilled.\n     *\n     * @param callable $onRejected Invoked when the promise is rejected.\n     *\n     * @return PromiseInterface\n     */\n    public function otherwise(callable $onRejected);\n\n    /**\n     * Get the state of the promise (\"pending\", \"rejected\", or \"fulfilled\").\n     *\n     * The three states can be checked against the constants defined on\n     * PromiseInterface: PENDING, FULFILLED, and REJECTED.\n     *\n     * @return string\n     */\n    public function getState();\n\n    /**\n     * Resolve the promise with the given value.\n     *\n     * @param mixed $value\n     *\n     * @throws \\RuntimeException if the promise is already resolved.\n     */\n    public function resolve($value);\n\n    /**\n     * Reject the promise with the given reason.\n     *\n     * @param mixed $reason\n     *\n     * @throws \\RuntimeException if the promise is already resolved.\n     */\n    public function reject($reason);\n\n    /**\n     * Cancels the promise if possible.\n     *\n     * @link https://github.com/promises-aplus/cancellation-spec/issues/7\n     */\n    public function cancel();\n\n    /**\n     * Waits until the promise completes if possible.\n     *\n     * Pass $unwrap as true to unwrap the result of the promise, either\n     * returning the resolved value or throwing the rejected exception.\n     *\n     * If the promise cannot be waited on, then the promise will be rejected.\n     *\n     * @param bool $unwrap\n     *\n     * @return mixed\n     *\n     * @throws \\LogicException if the promise has no wait function or if the\n     *                         promise does not settle after waiting.\n     */\n    public function wait($unwrap = true);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/PromisorInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Interface used with classes that return a promise.\n */\ninterface PromisorInterface\n{\n    /**\n     * Returns a promise.\n     *\n     * @return PromiseInterface\n     */\n    public function promise();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/RejectedPromise.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A promise that has been rejected.\n *\n * Thenning off of this promise will invoke the onRejected callback\n * immediately and ignore other callbacks.\n */\nclass RejectedPromise implements PromiseInterface\n{\n    private $reason;\n\n    public function __construct($reason)\n    {\n        if (is_object($reason) && method_exists($reason, 'then')) {\n            throw new \\InvalidArgumentException(\n                'You cannot create a RejectedPromise with a promise.'\n            );\n        }\n\n        $this->reason = $reason;\n    }\n\n    public function then(\n        callable $onFulfilled = null,\n        callable $onRejected = null\n    ) {\n        // If there's no onRejected callback then just return self.\n        if (!$onRejected) {\n            return $this;\n        }\n\n        $queue = Utils::queue();\n        $reason = $this->reason;\n        $p = new Promise([$queue, 'run']);\n        $queue->add(static function () use ($p, $reason, $onRejected) {\n            if (Is::pending($p)) {\n                try {\n                    // Return a resolved promise if onRejected does not throw.\n                    $p->resolve($onRejected($reason));\n                } catch (\\Throwable $e) {\n                    // onRejected threw, so return a rejected promise.\n                    $p->reject($e);\n                } catch (\\Exception $e) {\n                    // onRejected threw, so return a rejected promise.\n                    $p->reject($e);\n                }\n            }\n        });\n\n        return $p;\n    }\n\n    public function otherwise(callable $onRejected)\n    {\n        return $this->then(null, $onRejected);\n    }\n\n    public function wait($unwrap = true, $defaultDelivery = null)\n    {\n        if ($unwrap) {\n            throw Create::exceptionFor($this->reason);\n        }\n\n        return null;\n    }\n\n    public function getState()\n    {\n        return self::REJECTED;\n    }\n\n    public function resolve($value)\n    {\n        throw new \\LogicException(\"Cannot resolve a rejected promise\");\n    }\n\n    public function reject($reason)\n    {\n        if ($reason !== $this->reason) {\n            throw new \\LogicException(\"Cannot reject a rejected promise\");\n        }\n    }\n\n    public function cancel()\n    {\n        // pass\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/RejectionException.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A special exception that is thrown when waiting on a rejected promise.\n *\n * The reason value is available via the getReason() method.\n */\nclass RejectionException extends \\RuntimeException\n{\n    /** @var mixed Rejection reason. */\n    private $reason;\n\n    /**\n     * @param mixed  $reason      Rejection reason.\n     * @param string $description Optional description\n     */\n    public function __construct($reason, $description = null)\n    {\n        $this->reason = $reason;\n\n        $message = 'The promise was rejected';\n\n        if ($description) {\n            $message .= ' with reason: ' . $description;\n        } elseif (is_string($reason)\n            || (is_object($reason) && method_exists($reason, '__toString'))\n        ) {\n            $message .= ' with reason: ' . $this->reason;\n        } elseif ($reason instanceof \\JsonSerializable) {\n            $message .= ' with reason: '\n                . json_encode($this->reason, JSON_PRETTY_PRINT);\n        }\n\n        parent::__construct($message);\n    }\n\n    /**\n     * Returns the rejection reason.\n     *\n     * @return mixed\n     */\n    public function getReason()\n    {\n        return $this->reason;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/TaskQueue.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * A task queue that executes tasks in a FIFO order.\n *\n * This task queue class is used to settle promises asynchronously and\n * maintains a constant stack size. You can use the task queue asynchronously\n * by calling the `run()` function of the global task queue in an event loop.\n *\n *     GuzzleHttp\\Promise\\Utils::queue()->run();\n */\nclass TaskQueue implements TaskQueueInterface\n{\n    private $enableShutdown = true;\n    private $queue = [];\n\n    public function __construct($withShutdown = true)\n    {\n        if ($withShutdown) {\n            register_shutdown_function(function () {\n                if ($this->enableShutdown) {\n                    // Only run the tasks if an E_ERROR didn't occur.\n                    $err = error_get_last();\n                    if (!$err || ($err['type'] ^ E_ERROR)) {\n                        $this->run();\n                    }\n                }\n            });\n        }\n    }\n\n    public function isEmpty()\n    {\n        return !$this->queue;\n    }\n\n    public function add(callable $task)\n    {\n        $this->queue[] = $task;\n    }\n\n    public function run()\n    {\n        while ($task = array_shift($this->queue)) {\n            /** @var callable $task */\n            $task();\n        }\n    }\n\n    /**\n     * The task queue will be run and exhausted by default when the process\n     * exits IFF the exit is not the result of a PHP E_ERROR error.\n     *\n     * You can disable running the automatic shutdown of the queue by calling\n     * this function. If you disable the task queue shutdown process, then you\n     * MUST either run the task queue (as a result of running your event loop\n     * or manually using the run() method) or wait on each outstanding promise.\n     *\n     * Note: This shutdown will occur before any destructors are triggered.\n     */\n    public function disableShutdown()\n    {\n        $this->enableShutdown = false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/TaskQueueInterface.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\ninterface TaskQueueInterface\n{\n    /**\n     * Returns true if the queue is empty.\n     *\n     * @return bool\n     */\n    public function isEmpty();\n\n    /**\n     * Adds a task to the queue that will be executed the next time run is\n     * called.\n     */\n    public function add(callable $task);\n\n    /**\n     * Execute all of the pending task in the queue.\n     */\n    public function run();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/Utils.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\nfinal class Utils\n{\n    /**\n     * Get the global task queue used for promise resolution.\n     *\n     * This task queue MUST be run in an event loop in order for promises to be\n     * settled asynchronously. It will be automatically run when synchronously\n     * waiting on a promise.\n     *\n     * <code>\n     * while ($eventLoop->isRunning()) {\n     *     GuzzleHttp\\Promise\\Utils::queue()->run();\n     * }\n     * </code>\n     *\n     * @param TaskQueueInterface $assign Optionally specify a new queue instance.\n     *\n     * @return TaskQueueInterface\n     */\n    public static function queue(TaskQueueInterface $assign = null)\n    {\n        static $queue;\n\n        if ($assign) {\n            $queue = $assign;\n        } elseif (!$queue) {\n            $queue = new TaskQueue();\n        }\n\n        return $queue;\n    }\n\n    /**\n     * Adds a function to run in the task queue when it is next `run()` and\n     * returns a promise that is fulfilled or rejected with the result.\n     *\n     * @param callable $task Task function to run.\n     *\n     * @return PromiseInterface\n     */\n    public static function task(callable $task)\n    {\n        $queue = self::queue();\n        $promise = new Promise([$queue, 'run']);\n        $queue->add(function () use ($task, $promise) {\n            try {\n                if (Is::pending($promise)) {\n                    $promise->resolve($task());\n                }\n            } catch (\\Throwable $e) {\n                $promise->reject($e);\n            } catch (\\Exception $e) {\n                $promise->reject($e);\n            }\n        });\n\n        return $promise;\n    }\n\n    /**\n     * Synchronously waits on a promise to resolve and returns an inspection\n     * state array.\n     *\n     * Returns a state associative array containing a \"state\" key mapping to a\n     * valid promise state. If the state of the promise is \"fulfilled\", the\n     * array will contain a \"value\" key mapping to the fulfilled value of the\n     * promise. If the promise is rejected, the array will contain a \"reason\"\n     * key mapping to the rejection reason of the promise.\n     *\n     * @param PromiseInterface $promise Promise or value.\n     *\n     * @return array\n     */\n    public static function inspect(PromiseInterface $promise)\n    {\n        try {\n            return [\n                'state' => PromiseInterface::FULFILLED,\n                'value' => $promise->wait()\n            ];\n        } catch (RejectionException $e) {\n            return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];\n        } catch (\\Throwable $e) {\n            return ['state' => PromiseInterface::REJECTED, 'reason' => $e];\n        } catch (\\Exception $e) {\n            return ['state' => PromiseInterface::REJECTED, 'reason' => $e];\n        }\n    }\n\n    /**\n     * Waits on all of the provided promises, but does not unwrap rejected\n     * promises as thrown exception.\n     *\n     * Returns an array of inspection state arrays.\n     *\n     * @see inspect for the inspection state array format.\n     *\n     * @param PromiseInterface[] $promises Traversable of promises to wait upon.\n     *\n     * @return array\n     */\n    public static function inspectAll($promises)\n    {\n        $results = [];\n        foreach ($promises as $key => $promise) {\n            $results[$key] = inspect($promise);\n        }\n\n        return $results;\n    }\n\n    /**\n     * Waits on all of the provided promises and returns the fulfilled values.\n     *\n     * Returns an array that contains the value of each promise (in the same\n     * order the promises were provided). An exception is thrown if any of the\n     * promises are rejected.\n     *\n     * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.\n     *\n     * @return array\n     *\n     * @throws \\Exception on error\n     * @throws \\Throwable on error in PHP >=7\n     */\n    public static function unwrap($promises)\n    {\n        $results = [];\n        foreach ($promises as $key => $promise) {\n            $results[$key] = $promise->wait();\n        }\n\n        return $results;\n    }\n\n    /**\n     * Given an array of promises, return a promise that is fulfilled when all\n     * the items in the array are fulfilled.\n     *\n     * The promise's fulfillment value is an array with fulfillment values at\n     * respective positions to the original array. If any promise in the array\n     * rejects, the returned promise is rejected with the rejection reason.\n     *\n     * @param mixed $promises  Promises or values.\n     * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.\n     *\n     * @return PromiseInterface\n     */\n    public static function all($promises, $recursive = false)\n    {\n        $results = [];\n        $promise = Each::of(\n            $promises,\n            function ($value, $idx) use (&$results) {\n                $results[$idx] = $value;\n            },\n            function ($reason, $idx, Promise $aggregate) {\n                $aggregate->reject($reason);\n            }\n        )->then(function () use (&$results) {\n            ksort($results);\n            return $results;\n        });\n\n        if (true === $recursive) {\n            $promise = $promise->then(function ($results) use ($recursive, &$promises) {\n                foreach ($promises as $promise) {\n                    if (Is::pending($promise)) {\n                        return self::all($promises, $recursive);\n                    }\n                }\n                return $results;\n            });\n        }\n\n        return $promise;\n    }\n\n    /**\n     * Initiate a competitive race between multiple promises or values (values\n     * will become immediately fulfilled promises).\n     *\n     * When count amount of promises have been fulfilled, the returned promise\n     * is fulfilled with an array that contains the fulfillment values of the\n     * winners in order of resolution.\n     *\n     * This promise is rejected with a {@see AggregateException} if the number\n     * of fulfilled promises is less than the desired $count.\n     *\n     * @param int   $count    Total number of promises.\n     * @param mixed $promises Promises or values.\n     *\n     * @return PromiseInterface\n     */\n    public static function some($count, $promises)\n    {\n        $results = [];\n        $rejections = [];\n\n        return Each::of(\n            $promises,\n            function ($value, $idx, PromiseInterface $p) use (&$results, $count) {\n                if (Is::settled($p)) {\n                    return;\n                }\n                $results[$idx] = $value;\n                if (count($results) >= $count) {\n                    $p->resolve(null);\n                }\n            },\n            function ($reason) use (&$rejections) {\n                $rejections[] = $reason;\n            }\n        )->then(\n            function () use (&$results, &$rejections, $count) {\n                if (count($results) !== $count) {\n                    throw new AggregateException(\n                        'Not enough promises to fulfill count',\n                        $rejections\n                    );\n                }\n                ksort($results);\n                return array_values($results);\n            }\n        );\n    }\n\n    /**\n     * Like some(), with 1 as count. However, if the promise fulfills, the\n     * fulfillment value is not an array of 1 but the value directly.\n     *\n     * @param mixed $promises Promises or values.\n     *\n     * @return PromiseInterface\n     */\n    public static function any($promises)\n    {\n        return self::some(1, $promises)->then(function ($values) {\n            return $values[0];\n        });\n    }\n\n    /**\n     * Returns a promise that is fulfilled when all of the provided promises have\n     * been fulfilled or rejected.\n     *\n     * The returned promise is fulfilled with an array of inspection state arrays.\n     *\n     * @see inspect for the inspection state array format.\n     *\n     * @param mixed $promises Promises or values.\n     *\n     * @return PromiseInterface\n     */\n    public static function settle($promises)\n    {\n        $results = [];\n\n        return Each::of(\n            $promises,\n            function ($value, $idx) use (&$results) {\n                $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];\n            },\n            function ($reason, $idx) use (&$results) {\n                $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];\n            }\n        )->then(function () use (&$results) {\n            ksort($results);\n            return $results;\n        });\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/functions.php",
    "content": "<?php\n\nnamespace GuzzleHttp\\Promise;\n\n/**\n * Get the global task queue used for promise resolution.\n *\n * This task queue MUST be run in an event loop in order for promises to be\n * settled asynchronously. It will be automatically run when synchronously\n * waiting on a promise.\n *\n * <code>\n * while ($eventLoop->isRunning()) {\n *     GuzzleHttp\\Promise\\queue()->run();\n * }\n * </code>\n *\n * @param TaskQueueInterface $assign Optionally specify a new queue instance.\n *\n * @return TaskQueueInterface\n *\n * @deprecated queue will be removed in guzzlehttp/promises:2.0. Use Utils::queue instead.\n */\nfunction queue(TaskQueueInterface $assign = null)\n{\n    return Utils::queue($assign);\n}\n\n/**\n * Adds a function to run in the task queue when it is next `run()` and returns\n * a promise that is fulfilled or rejected with the result.\n *\n * @param callable $task Task function to run.\n *\n * @return PromiseInterface\n *\n * @deprecated task will be removed in guzzlehttp/promises:2.0. Use Utils::task instead.\n */\nfunction task(callable $task)\n{\n    return Utils::task($task);\n}\n\n/**\n * Creates a promise for a value if the value is not a promise.\n *\n * @param mixed $value Promise or value.\n *\n * @return PromiseInterface\n *\n * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead.\n */\nfunction promise_for($value)\n{\n    return Create::promiseFor($value);\n}\n\n/**\n * Creates a rejected promise for a reason if the reason is not a promise. If\n * the provided reason is a promise, then it is returned as-is.\n *\n * @param mixed $reason Promise or reason.\n *\n * @return PromiseInterface\n *\n * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead.\n */\nfunction rejection_for($reason)\n{\n    return Create::rejectionFor($reason);\n}\n\n/**\n * Create an exception for a rejected promise value.\n *\n * @param mixed $reason\n *\n * @return \\Exception|\\Throwable\n *\n * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead.\n */\nfunction exception_for($reason)\n{\n    return Create::exceptionFor($reason);\n}\n\n/**\n * Returns an iterator for the given value.\n *\n * @param mixed $value\n *\n * @return \\Iterator\n *\n * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead.\n */\nfunction iter_for($value)\n{\n    return Create::iterFor($value);\n}\n\n/**\n * Synchronously waits on a promise to resolve and returns an inspection state\n * array.\n *\n * Returns a state associative array containing a \"state\" key mapping to a\n * valid promise state. If the state of the promise is \"fulfilled\", the array\n * will contain a \"value\" key mapping to the fulfilled value of the promise. If\n * the promise is rejected, the array will contain a \"reason\" key mapping to\n * the rejection reason of the promise.\n *\n * @param PromiseInterface $promise Promise or value.\n *\n * @return array\n *\n * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead.\n */\nfunction inspect(PromiseInterface $promise)\n{\n    return Utils::inspect($promise);\n}\n\n/**\n * Waits on all of the provided promises, but does not unwrap rejected promises\n * as thrown exception.\n *\n * Returns an array of inspection state arrays.\n *\n * @see inspect for the inspection state array format.\n *\n * @param PromiseInterface[] $promises Traversable of promises to wait upon.\n *\n * @return array\n *\n * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead.\n */\nfunction inspect_all($promises)\n{\n    return Utils::inspectAll($promises);\n}\n\n/**\n * Waits on all of the provided promises and returns the fulfilled values.\n *\n * Returns an array that contains the value of each promise (in the same order\n * the promises were provided). An exception is thrown if any of the promises\n * are rejected.\n *\n * @param iterable<PromiseInterface> $promises Iterable of PromiseInterface objects to wait on.\n *\n * @return array\n *\n * @throws \\Exception on error\n * @throws \\Throwable on error in PHP >=7\n *\n * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead.\n */\nfunction unwrap($promises)\n{\n    return Utils::unwrap($promises);\n}\n\n/**\n * Given an array of promises, return a promise that is fulfilled when all the\n * items in the array are fulfilled.\n *\n * The promise's fulfillment value is an array with fulfillment values at\n * respective positions to the original array. If any promise in the array\n * rejects, the returned promise is rejected with the rejection reason.\n *\n * @param mixed $promises  Promises or values.\n * @param bool  $recursive If true, resolves new promises that might have been added to the stack during its own resolution.\n *\n * @return PromiseInterface\n *\n * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead.\n */\nfunction all($promises, $recursive = false)\n{\n    return Utils::all($promises, $recursive);\n}\n\n/**\n * Initiate a competitive race between multiple promises or values (values will\n * become immediately fulfilled promises).\n *\n * When count amount of promises have been fulfilled, the returned promise is\n * fulfilled with an array that contains the fulfillment values of the winners\n * in order of resolution.\n *\n * This promise is rejected with a {@see AggregateException} if the number of\n * fulfilled promises is less than the desired $count.\n *\n * @param int   $count    Total number of promises.\n * @param mixed $promises Promises or values.\n *\n * @return PromiseInterface\n *\n * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead.\n */\nfunction some($count, $promises)\n{\n    return Utils::some($count, $promises);\n}\n\n/**\n * Like some(), with 1 as count. However, if the promise fulfills, the\n * fulfillment value is not an array of 1 but the value directly.\n *\n * @param mixed $promises Promises or values.\n *\n * @return PromiseInterface\n *\n * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead.\n */\nfunction any($promises)\n{\n    return Utils::any($promises);\n}\n\n/**\n * Returns a promise that is fulfilled when all of the provided promises have\n * been fulfilled or rejected.\n *\n * The returned promise is fulfilled with an array of inspection state arrays.\n *\n * @see inspect for the inspection state array format.\n *\n * @param mixed $promises Promises or values.\n *\n * @return PromiseInterface\n *\n * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead.\n */\nfunction settle($promises)\n{\n    return Utils::settle($promises);\n}\n\n/**\n * Given an iterator that yields promises or values, returns a promise that is\n * fulfilled with a null value when the iterator has been consumed or the\n * aggregate promise has been fulfilled or rejected.\n *\n * $onFulfilled is a function that accepts the fulfilled value, iterator index,\n * and the aggregate promise. The callback can invoke any necessary side\n * effects and choose to resolve or reject the aggregate if needed.\n *\n * $onRejected is a function that accepts the rejection reason, iterator index,\n * and the aggregate promise. The callback can invoke any necessary side\n * effects and choose to resolve or reject the aggregate if needed.\n *\n * @param mixed    $iterable    Iterator or array to iterate over.\n * @param callable $onFulfilled\n * @param callable $onRejected\n *\n * @return PromiseInterface\n *\n * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead.\n */\nfunction each(\n    $iterable,\n    callable $onFulfilled = null,\n    callable $onRejected = null\n) {\n    return Each::of($iterable, $onFulfilled, $onRejected);\n}\n\n/**\n * Like each, but only allows a certain number of outstanding promises at any\n * given time.\n *\n * $concurrency may be an integer or a function that accepts the number of\n * pending promises and returns a numeric concurrency limit value to allow for\n * dynamic a concurrency size.\n *\n * @param mixed        $iterable\n * @param int|callable $concurrency\n * @param callable     $onFulfilled\n * @param callable     $onRejected\n *\n * @return PromiseInterface\n *\n * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead.\n */\nfunction each_limit(\n    $iterable,\n    $concurrency,\n    callable $onFulfilled = null,\n    callable $onRejected = null\n) {\n    return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected);\n}\n\n/**\n * Like each_limit, but ensures that no promise in the given $iterable argument\n * is rejected. If any promise is rejected, then the aggregate promise is\n * rejected with the encountered rejection.\n *\n * @param mixed        $iterable\n * @param int|callable $concurrency\n * @param callable     $onFulfilled\n *\n * @return PromiseInterface\n *\n * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead.\n */\nfunction each_limit_all(\n    $iterable,\n    $concurrency,\n    callable $onFulfilled = null\n) {\n    return Each::ofLimitAll($iterable, $concurrency, $onFulfilled);\n}\n\n/**\n * Returns true if a promise is fulfilled.\n *\n * @return bool\n *\n * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead.\n */\nfunction is_fulfilled(PromiseInterface $promise)\n{\n    return Is::fulfilled($promise);\n}\n\n/**\n * Returns true if a promise is rejected.\n *\n * @return bool\n *\n * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead.\n */\nfunction is_rejected(PromiseInterface $promise)\n{\n    return Is::rejected($promise);\n}\n\n/**\n * Returns true if a promise is fulfilled or rejected.\n *\n * @return bool\n *\n * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead.\n */\nfunction is_settled(PromiseInterface $promise)\n{\n    return Is::settled($promise);\n}\n\n/**\n * Create a new coroutine.\n *\n * @see Coroutine\n *\n * @return PromiseInterface\n *\n * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead.\n */\nfunction coroutine(callable $generatorFn)\n{\n    return Coroutine::of($generatorFn);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/promises/src/functions_include.php",
    "content": "<?php\n\n// Don't redefine the functions if included multiple times.\nif (!function_exists('GuzzleHttp\\Promise\\promise_for')) {\n    require __DIR__ . '/functions.php';\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/CHANGELOG.md",
    "content": "# Change Log\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## Unreleased\n\n## 2.4.5 - 2023-04-17\n\n### Fixed\n\n- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec`\n- Fixed `Message::bodySummary` when `preg_match` fails\n- Fixed header validation issue\n\n## 2.4.4 - 2023-03-09\n\n### Changed\n\n- Removed the need for `AllowDynamicProperties` in `LazyOpenStream`\n\n## 2.4.3 - 2022-10-26\n\n### Changed\n\n- Replaced `sha1(uniqid())` by `bin2hex(random_bytes(20))`\n\n## 2.4.2 - 2022-10-25\n\n### Fixed\n\n- Fixed erroneous behaviour when combining host and relative path\n\n## 2.4.1 - 2022-08-28\n\n### Fixed\n\n- Rewind body before reading in `Message::bodySummary`\n\n## 2.4.0 - 2022-06-20\n\n### Added\n\n- Added provisional PHP 8.2 support\n- Added `UriComparator::isCrossOrigin` method\n\n## 2.3.0 - 2022-06-09\n\n### Fixed\n\n- Added `Header::splitList` method\n- Added `Utils::tryGetContents` method\n- Improved `Stream::getContents` method\n- Updated mimetype mappings\n\n## 2.2.2 - 2022-06-08\n\n### Fixed\n\n- Fix `Message::parseRequestUri` for numeric headers\n- Re-wrap exceptions thrown in `fread` into runtime exceptions\n- Throw an exception when multipart options is misformatted\n\n## 2.2.1 - 2022-03-20\n\n### Fixed\n\n- Correct header value validation\n\n## 2.2.0 - 2022-03-20\n\n### Added\n\n- A more compressive list of mime types\n- Add JsonSerializable to Uri\n- Missing return types\n\n### Fixed\n\n- Bug MultipartStream no `uri` metadata\n- Bug MultipartStream with filename for `data://` streams\n- Fixed new line handling in MultipartStream\n- Reduced RAM usage when copying streams\n- Updated parsing in `Header::normalize()`\n\n## 2.1.1 - 2022-03-20\n\n### Fixed\n\n- Validate header values properly\n\n## 2.1.0 - 2021-10-06\n\n### Changed\n\n- Attempting to create a `Uri` object from a malformed URI will no longer throw a generic\n  `InvalidArgumentException`, but rather a `MalformedUriException`, which inherits from the former\n  for backwards compatibility. Callers relying on the exception being thrown to detect invalid\n  URIs should catch the new exception.\n\n### Fixed\n\n- Return `null` in caching stream size if remote size is `null`\n\n## 2.0.0 - 2021-06-30\n\nIdentical to the RC release.\n\n## 2.0.0@RC-1 - 2021-04-29\n\n### Fixed\n\n- Handle possibly unset `url` in `stream_get_meta_data`\n\n## 2.0.0@beta-1 - 2021-03-21\n\n### Added\n\n- PSR-17 factories\n- Made classes final\n- PHP7 type hints\n\n### Changed\n\n- When building a query string, booleans are represented as 1 and 0.\n\n### Removed\n\n- PHP < 7.2 support\n- All functions in the `GuzzleHttp\\Psr7` namespace\n\n## 1.8.1 - 2021-03-21\n\n### Fixed\n\n- Issue parsing IPv6 URLs\n- Issue modifying ServerRequest lost all its attributes\n\n## 1.8.0 - 2021-03-21\n\n### Added\n\n- Locale independent URL parsing\n- Most classes got a `@final` annotation to prepare for 2.0\n\n### Fixed\n\n- Issue when creating stream from `php://input` and curl-ext is not installed\n- Broken `Utils::tryFopen()` on PHP 8\n\n## 1.7.0 - 2020-09-30\n\n### Added\n\n- Replaced functions by static methods\n\n### Fixed\n\n- Converting a non-seekable stream to a string\n- Handle multiple Set-Cookie correctly\n- Ignore array keys in header values when merging\n- Allow multibyte characters to be parsed in `Message:bodySummary()`\n\n### Changed\n\n- Restored partial HHVM 3 support\n\n\n## [1.6.1] - 2019-07-02\n\n### Fixed\n\n- Accept null and bool header values again\n\n\n## [1.6.0] - 2019-06-30\n\n### Added\n\n- Allowed version `^3.0` of `ralouphie/getallheaders` dependency (#244)\n- Added MIME type for WEBP image format (#246)\n- Added more validation of values according to PSR-7 and RFC standards, e.g. status code range (#250, #272)\n\n### Changed\n\n- Tests don't pass with HHVM 4.0, so HHVM support got dropped. Other libraries like composer have done the same. (#262)\n- Accept port number 0 to be valid (#270)\n\n### Fixed\n\n- Fixed subsequent reads from `php://input` in ServerRequest (#247)\n- Fixed readable/writable detection for certain stream modes (#248)\n- Fixed encoding of special characters in the `userInfo` component of an URI (#253)\n\n\n## [1.5.2] - 2018-12-04\n\n### Fixed\n\n- Check body size when getting the message summary\n\n\n## [1.5.1] - 2018-12-04\n\n### Fixed\n\n- Get the summary of a body only if it is readable\n\n\n## [1.5.0] - 2018-12-03\n\n### Added\n\n- Response first-line to response string exception (fixes #145)\n- A test for #129 behavior\n- `get_message_body_summary` function in order to get the message summary\n- `3gp` and `mkv` mime types\n\n### Changed\n\n- Clarify exception message when stream is detached\n\n### Deprecated\n\n- Deprecated parsing folded header lines as per RFC 7230\n\n### Fixed\n\n- Fix `AppendStream::detach` to not close streams\n- `InflateStream` preserves `isSeekable` attribute of the underlying stream\n- `ServerRequest::getUriFromGlobals` to support URLs in query parameters\n\n\nSeveral other fixes and improvements.\n\n\n## [1.4.2] - 2017-03-20\n\n### Fixed\n\n- Reverted BC break to `Uri::resolve` and `Uri::removeDotSegments` by removing\n  calls to `trigger_error` when deprecated methods are invoked.\n\n\n## [1.4.1] - 2017-02-27\n\n### Added\n\n- Rriggering of silenced deprecation warnings.\n\n### Fixed\n\n- Reverted BC break by reintroducing behavior to automagically fix a URI with a\n  relative path and an authority by adding a leading slash to the path. It's only\n  deprecated now.\n\n\n## [1.4.0] - 2017-02-21\n\n### Added\n\n- Added common URI utility methods based on RFC 3986 (see documentation in the readme):\n  - `Uri::isDefaultPort`\n  - `Uri::isAbsolute`\n  - `Uri::isNetworkPathReference`\n  - `Uri::isAbsolutePathReference`\n  - `Uri::isRelativePathReference`\n  - `Uri::isSameDocumentReference`\n  - `Uri::composeComponents`\n  - `UriNormalizer::normalize`\n  - `UriNormalizer::isEquivalent`\n  - `UriResolver::relativize`\n\n### Changed\n\n- Ensure `ServerRequest::getUriFromGlobals` returns a URI in absolute form.\n- Allow `parse_response` to parse a response without delimiting space and reason.\n- Ensure each URI modification results in a valid URI according to PSR-7 discussions.\n  Invalid modifications will throw an exception instead of returning a wrong URI or\n  doing some magic.\n  - `(new Uri)->withPath('foo')->withHost('example.com')` will throw an exception\n    because the path of a URI with an authority must start with a slash \"/\" or be empty\n  - `(new Uri())->withScheme('http')` will return `'http://localhost'`\n\n### Deprecated\n\n- `Uri::resolve` in favor of `UriResolver::resolve`\n- `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments`\n\n### Fixed\n\n- `Stream::read` when length parameter <= 0.\n- `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory.\n- `ServerRequest::getUriFromGlobals` when `Host` header contains port.\n- Compatibility of URIs with `file` scheme and empty host.\n\n\n## [1.3.1] - 2016-06-25\n\n### Fixed\n\n- `Uri::__toString` for network path references, e.g. `//example.org`.\n- Missing lowercase normalization for host.\n- Handling of URI components in case they are `'0'` in a lot of places,\n  e.g. as a user info password.\n- `Uri::withAddedHeader` to correctly merge headers with different case.\n- Trimming of header values in `Uri::withAddedHeader`. Header values may\n  be surrounded by whitespace which should be ignored according to RFC 7230\n  Section 3.2.4. This does not apply to header names.\n- `Uri::withAddedHeader` with an array of header values.\n- `Uri::resolve` when base path has no slash and handling of fragment.\n- Handling of encoding in `Uri::with(out)QueryValue` so one can pass the\n  key/value both in encoded as well as decoded form to those methods. This is\n  consistent with withPath, withQuery etc.\n- `ServerRequest::withoutAttribute` when attribute value is null.\n\n\n## [1.3.0] - 2016-04-13\n\n### Added\n\n- Remaining interfaces needed for full PSR7 compatibility\n  (ServerRequestInterface, UploadedFileInterface, etc.).\n- Support for stream_for from scalars.\n\n### Changed\n\n- Can now extend Uri.\n\n### Fixed\n- A bug in validating request methods by making it more permissive.\n\n\n## [1.2.3] - 2016-02-18\n\n### Fixed\n\n- Support in `GuzzleHttp\\Psr7\\CachingStream` for seeking forward on remote\n  streams, which can sometimes return fewer bytes than requested with `fread`.\n- Handling of gzipped responses with FNAME headers.\n\n\n## [1.2.2] - 2016-01-22\n\n### Added\n\n- Support for URIs without any authority.\n- Support for HTTP 451 'Unavailable For Legal Reasons.'\n- Support for using '0' as a filename.\n- Support for including non-standard ports in Host headers.\n\n\n## [1.2.1] - 2015-11-02\n\n### Changes\n\n- Now supporting negative offsets when seeking to SEEK_END.\n\n\n## [1.2.0] - 2015-08-15\n\n### Changed\n\n- Body as `\"0\"` is now properly added to a response.\n- Now allowing forward seeking in CachingStream.\n- Now properly parsing HTTP requests that contain proxy targets in\n  `parse_request`.\n- functions.php is now conditionally required.\n- user-info is no longer dropped when resolving URIs.\n\n\n## [1.1.0] - 2015-06-24\n\n### Changed\n\n- URIs can now be relative.\n- `multipart/form-data` headers are now overridden case-insensitively.\n- URI paths no longer encode the following characters because they are allowed\n  in URIs: \"(\", \")\", \"*\", \"!\", \"'\"\n- A port is no longer added to a URI when the scheme is missing and no port is\n  present.\n\n\n## 1.0.0 - 2015-05-19\n\nInitial release.\n\nCurrently unsupported:\n\n- `Psr\\Http\\Message\\ServerRequestInterface`\n- `Psr\\Http\\Message\\UploadedFileInterface`\n\n\n\n[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0\n[1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2\n[1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1\n[1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0\n[1.4.2]: https://github.com/guzzle/psr7/compare/1.4.1...1.4.2\n[1.4.1]: https://github.com/guzzle/psr7/compare/1.4.0...1.4.1\n[1.4.0]: https://github.com/guzzle/psr7/compare/1.3.1...1.4.0\n[1.3.1]: https://github.com/guzzle/psr7/compare/1.3.0...1.3.1\n[1.3.0]: https://github.com/guzzle/psr7/compare/1.2.3...1.3.0\n[1.2.3]: https://github.com/guzzle/psr7/compare/1.2.2...1.2.3\n[1.2.2]: https://github.com/guzzle/psr7/compare/1.2.1...1.2.2\n[1.2.1]: https://github.com/guzzle/psr7/compare/1.2.0...1.2.1\n[1.2.0]: https://github.com/guzzle/psr7/compare/1.1.0...1.2.0\n[1.1.0]: https://github.com/guzzle/psr7/compare/1.0.0...1.1.0\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Michael Dowling <mtdowling@gmail.com>\nCopyright (c) 2015 Márk Sági-Kazár <mark.sagikazar@gmail.com>\nCopyright (c) 2015 Graham Campbell <hello@gjcampbell.co.uk>\nCopyright (c) 2016 Tobias Schultze <webmaster@tubo-world.de>\nCopyright (c) 2016 George Mponos <gmponos@gmail.com>\nCopyright (c) 2018 Tobias Nyholm <tobias.nyholm@gmail.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/README.md",
    "content": "# PSR-7 Message Implementation\n\nThis repository contains a full [PSR-7](https://www.php-fig.org/psr/psr-7/)\nmessage implementation, several stream decorators, and some helpful\nfunctionality like query string parsing.\n\n![CI](https://github.com/guzzle/psr7/workflows/CI/badge.svg)\n![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg)\n\n\n# Installation\n\n```shell\ncomposer require guzzlehttp/psr7\n```\n\n# Stream implementation\n\nThis package comes with a number of stream implementations and stream\ndecorators.\n\n\n## AppendStream\n\n`GuzzleHttp\\Psr7\\AppendStream`\n\nReads from multiple streams, one after the other.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$a = Psr7\\Utils::streamFor('abc, ');\n$b = Psr7\\Utils::streamFor('123.');\n$composed = new Psr7\\AppendStream([$a, $b]);\n\n$composed->addStream(Psr7\\Utils::streamFor(' Above all listen to me'));\n\necho $composed; // abc, 123. Above all listen to me.\n```\n\n\n## BufferStream\n\n`GuzzleHttp\\Psr7\\BufferStream`\n\nProvides a buffer stream that can be written to fill a buffer, and read\nfrom to remove bytes from the buffer.\n\nThis stream returns a \"hwm\" metadata value that tells upstream consumers\nwhat the configured high water mark of the stream is, or the maximum\npreferred size of the buffer.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n// When more than 1024 bytes are in the buffer, it will begin returning\n// false to writes. This is an indication that writers should slow down.\n$buffer = new Psr7\\BufferStream(1024);\n```\n\n\n## CachingStream\n\nThe CachingStream is used to allow seeking over previously read bytes on\nnon-seekable streams. This can be useful when transferring a non-seekable\nentity body fails due to needing to rewind the stream (for example, resulting\nfrom a redirect). Data that is read from the remote stream will be buffered in\na PHP temp stream so that previously read bytes are cached first in memory,\nthen on disk.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor(fopen('http://www.google.com', 'r'));\n$stream = new Psr7\\CachingStream($original);\n\n$stream->read(1024);\necho $stream->tell();\n// 1024\n\n$stream->seek(0);\necho $stream->tell();\n// 0\n```\n\n\n## DroppingStream\n\n`GuzzleHttp\\Psr7\\DroppingStream`\n\nStream decorator that begins dropping data once the size of the underlying\nstream becomes too full.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n// Create an empty stream\n$stream = Psr7\\Utils::streamFor();\n\n// Start dropping data when the stream has more than 10 bytes\n$dropping = new Psr7\\DroppingStream($stream, 10);\n\n$dropping->write('01234567890123456789');\necho $stream; // 0123456789\n```\n\n\n## FnStream\n\n`GuzzleHttp\\Psr7\\FnStream`\n\nCompose stream implementations based on a hash of functions.\n\nAllows for easy testing and extension of a provided stream without needing\nto create a concrete class for a simple extension point.\n\n```php\n\nuse GuzzleHttp\\Psr7;\n\n$stream = Psr7\\Utils::streamFor('hi');\n$fnStream = Psr7\\FnStream::decorate($stream, [\n    'rewind' => function () use ($stream) {\n        echo 'About to rewind - ';\n        $stream->rewind();\n        echo 'rewound!';\n    }\n]);\n\n$fnStream->rewind();\n// Outputs: About to rewind - rewound!\n```\n\n\n## InflateStream\n\n`GuzzleHttp\\Psr7\\InflateStream`\n\nUses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.\n\nThis stream decorator converts the provided stream to a PHP stream resource,\nthen appends the zlib.inflate filter. The stream is then converted back\nto a Guzzle stream resource to be used as a Guzzle stream.\n\n\n## LazyOpenStream\n\n`GuzzleHttp\\Psr7\\LazyOpenStream`\n\nLazily reads or writes to a file that is opened only after an IO operation\ntake place on the stream.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$stream = new Psr7\\LazyOpenStream('/path/to/file', 'r');\n// The file has not yet been opened...\n\necho $stream->read(10);\n// The file is opened and read from only when needed.\n```\n\n\n## LimitStream\n\n`GuzzleHttp\\Psr7\\LimitStream`\n\nLimitStream can be used to read a subset or slice of an existing stream object.\nThis can be useful for breaking a large file into smaller pieces to be sent in\nchunks (e.g. Amazon S3's multipart upload API).\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor(fopen('/tmp/test.txt', 'r+'));\necho $original->getSize();\n// >>> 1048576\n\n// Limit the size of the body to 1024 bytes and start reading from byte 2048\n$stream = new Psr7\\LimitStream($original, 1024, 2048);\necho $stream->getSize();\n// >>> 1024\necho $stream->tell();\n// >>> 0\n```\n\n\n## MultipartStream\n\n`GuzzleHttp\\Psr7\\MultipartStream`\n\nStream that when read returns bytes for a streaming multipart or\nmultipart/form-data stream.\n\n\n## NoSeekStream\n\n`GuzzleHttp\\Psr7\\NoSeekStream`\n\nNoSeekStream wraps a stream and does not allow seeking.\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor('foo');\n$noSeek = new Psr7\\NoSeekStream($original);\n\necho $noSeek->read(3);\n// foo\nvar_export($noSeek->isSeekable());\n// false\n$noSeek->seek(0);\nvar_export($noSeek->read(3));\n// NULL\n```\n\n\n## PumpStream\n\n`GuzzleHttp\\Psr7\\PumpStream`\n\nProvides a read only stream that pumps data from a PHP callable.\n\nWhen invoking the provided callable, the PumpStream will pass the amount of\ndata requested to read to the callable. The callable can choose to ignore\nthis value and return fewer or more bytes than requested. Any extra data\nreturned by the provided callable is buffered internally until drained using\nthe read() function of the PumpStream. The provided callable MUST return\nfalse when there is no more data to read.\n\n\n## Implementing stream decorators\n\nCreating a stream decorator is very easy thanks to the\n`GuzzleHttp\\Psr7\\StreamDecoratorTrait`. This trait provides methods that\nimplement `Psr\\Http\\Message\\StreamInterface` by proxying to an underlying\nstream. Just `use` the `StreamDecoratorTrait` and implement your custom\nmethods.\n\nFor example, let's say we wanted to call a specific function each time the last\nbyte is read from a stream. This could be implemented by overriding the\n`read()` method.\n\n```php\nuse Psr\\Http\\Message\\StreamInterface;\nuse GuzzleHttp\\Psr7\\StreamDecoratorTrait;\n\nclass EofCallbackStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    private $callback;\n\n    private $stream;\n\n    public function __construct(StreamInterface $stream, callable $cb)\n    {\n        $this->stream = $stream;\n        $this->callback = $cb;\n    }\n\n    public function read($length)\n    {\n        $result = $this->stream->read($length);\n\n        // Invoke the callback when EOF is hit.\n        if ($this->eof()) {\n            call_user_func($this->callback);\n        }\n\n        return $result;\n    }\n}\n```\n\nThis decorator could be added to any existing stream and used like so:\n\n```php\nuse GuzzleHttp\\Psr7;\n\n$original = Psr7\\Utils::streamFor('foo');\n\n$eofStream = new EofCallbackStream($original, function () {\n    echo 'EOF!';\n});\n\n$eofStream->read(2);\n$eofStream->read(1);\n// echoes \"EOF!\"\n$eofStream->seek(0);\n$eofStream->read(3);\n// echoes \"EOF!\"\n```\n\n\n## PHP StreamWrapper\n\nYou can use the `GuzzleHttp\\Psr7\\StreamWrapper` class if you need to use a\nPSR-7 stream as a PHP stream resource.\n\nUse the `GuzzleHttp\\Psr7\\StreamWrapper::getResource()` method to create a PHP\nstream from a PSR-7 stream.\n\n```php\nuse GuzzleHttp\\Psr7\\StreamWrapper;\n\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor('hello!');\n$resource = StreamWrapper::getResource($stream);\necho fread($resource, 6); // outputs hello!\n```\n\n\n# Static API\n\nThere are various static methods available under the `GuzzleHttp\\Psr7` namespace.\n\n\n## `GuzzleHttp\\Psr7\\Message::toString`\n\n`public static function toString(MessageInterface $message): string`\n\nReturns the string representation of an HTTP message.\n\n```php\n$request = new GuzzleHttp\\Psr7\\Request('GET', 'http://example.com');\necho GuzzleHttp\\Psr7\\Message::toString($request);\n```\n\n\n## `GuzzleHttp\\Psr7\\Message::bodySummary`\n\n`public static function bodySummary(MessageInterface $message, int $truncateAt = 120): string|null`\n\nGet a short summary of the message body.\n\nWill return `null` if the response is not printable.\n\n\n## `GuzzleHttp\\Psr7\\Message::rewindBody`\n\n`public static function rewindBody(MessageInterface $message): void`\n\nAttempts to rewind a message body and throws an exception on failure.\n\nThe body of the message will only be rewound if a call to `tell()`\nreturns a value other than `0`.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseMessage`\n\n`public static function parseMessage(string $message): array`\n\nParses an HTTP message into an associative array.\n\nThe array contains the \"start-line\" key containing the start line of\nthe message, \"headers\" key containing an associative array of header\narray values, and a \"body\" key containing the body of the message.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseRequestUri`\n\n`public static function parseRequestUri(string $path, array $headers): string`\n\nConstructs a URI for an HTTP request message.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseRequest`\n\n`public static function parseRequest(string $message): Request`\n\nParses a request message string into a request object.\n\n\n## `GuzzleHttp\\Psr7\\Message::parseResponse`\n\n`public static function parseResponse(string $message): Response`\n\nParses a response message string into a response object.\n\n\n## `GuzzleHttp\\Psr7\\Header::parse`\n\n`public static function parse(string|array $header): array`\n\nParse an array of header values containing \";\" separated data into an\narray of associative arrays representing the header key value pair data\nof the header. When a parameter does not contain a value, but just\ncontains a key, this function will inject a key with a '' string value.\n\n\n## `GuzzleHttp\\Psr7\\Header::splitList`\n\n`public static function splitList(string|string[] $header): string[]`\n\nSplits a HTTP header defined to contain a comma-separated list into\neach individual value:\n\n```\n$knownEtags = Header::splitList($request->getHeader('if-none-match'));\n```\n\nExample headers include `accept`, `cache-control` and `if-none-match`.\n\n\n## `GuzzleHttp\\Psr7\\Header::normalize` (deprecated)\n\n`public static function normalize(string|array $header): array`\n\n`Header::normalize()` is deprecated in favor of [`Header::splitList()`](README.md#guzzlehttppsr7headersplitlist)\nwhich performs the same operation with a cleaned up API and improved\ndocumentation.\n\nConverts an array of header values that may contain comma separated\nheaders into an array of headers with no comma separated values.\n\n\n## `GuzzleHttp\\Psr7\\Query::parse`\n\n`public static function parse(string $str, int|bool $urlEncoding = true): array`\n\nParse a query string into an associative array.\n\nIf multiple values are found for the same key, the value of that key\nvalue pair will become an array. This function does not parse nested\nPHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`\nwill be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.\n\n\n## `GuzzleHttp\\Psr7\\Query::build`\n\n`public static function build(array $params, int|false $encoding = PHP_QUERY_RFC3986): string`\n\nBuild a query string from an array of key value pairs.\n\nThis function can use the return value of `parse()` to build a query\nstring. This function does not modify the provided keys when an array is\nencountered (like `http_build_query()` would).\n\n\n## `GuzzleHttp\\Psr7\\Utils::caselessRemove`\n\n`public static function caselessRemove(iterable<string> $keys, $keys, array $data): array`\n\nRemove the items given by the keys, case insensitively from the data.\n\n\n## `GuzzleHttp\\Psr7\\Utils::copyToStream`\n\n`public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void`\n\nCopy the contents of a stream into another stream until the given number\nof bytes have been read.\n\n\n## `GuzzleHttp\\Psr7\\Utils::copyToString`\n\n`public static function copyToString(StreamInterface $stream, int $maxLen = -1): string`\n\nCopy the contents of a stream into a string until the given number of\nbytes have been read.\n\n\n## `GuzzleHttp\\Psr7\\Utils::hash`\n\n`public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string`\n\nCalculate a hash of a stream.\n\nThis method reads the entire stream to calculate a rolling hash, based on\nPHP's `hash_init` functions.\n\n\n## `GuzzleHttp\\Psr7\\Utils::modifyRequest`\n\n`public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface`\n\nClone and modify a request with the given changes.\n\nThis method is useful for reducing the number of clones needed to mutate\na message.\n\n- method: (string) Changes the HTTP method.\n- set_headers: (array) Sets the given headers.\n- remove_headers: (array) Remove the given headers.\n- body: (mixed) Sets the given body.\n- uri: (UriInterface) Set the URI.\n- query: (string) Set the query string value of the URI.\n- version: (string) Set the protocol version.\n\n\n## `GuzzleHttp\\Psr7\\Utils::readLine`\n\n`public static function readLine(StreamInterface $stream, int $maxLength = null): string`\n\nRead a line from the stream up to the maximum allowed buffer length.\n\n\n## `GuzzleHttp\\Psr7\\Utils::streamFor`\n\n`public static function streamFor(resource|string|null|int|float|bool|StreamInterface|callable|\\Iterator $resource = '', array $options = []): StreamInterface`\n\nCreate a new stream based on the input type.\n\nOptions is an associative array that can contain the following keys:\n\n- metadata: Array of custom metadata.\n- size: Size of the stream.\n\nThis method accepts the following `$resource` types:\n\n- `Psr\\Http\\Message\\StreamInterface`: Returns the value as-is.\n- `string`: Creates a stream object that uses the given string as the contents.\n- `resource`: Creates a stream object that wraps the given PHP stream resource.\n- `Iterator`: If the provided value implements `Iterator`, then a read-only\n  stream object will be created that wraps the given iterable. Each time the\n  stream is read from, data from the iterator will fill a buffer and will be\n  continuously called until the buffer is equal to the requested read size.\n  Subsequent read calls will first read from the buffer and then call `next`\n  on the underlying iterator until it is exhausted.\n- `object` with `__toString()`: If the object has the `__toString()` method,\n  the object will be cast to a string and then a stream will be returned that\n  uses the string value.\n- `NULL`: When `null` is passed, an empty stream object is returned.\n- `callable` When a callable is passed, a read-only stream object will be\n  created that invokes the given callable. The callable is invoked with the\n  number of suggested bytes to read. The callable can return any number of\n  bytes, but MUST return `false` when there is no more data to return. The\n  stream object that wraps the callable will invoke the callable until the\n  number of requested bytes are available. Any additional bytes will be\n  buffered and used in subsequent reads.\n\n```php\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor('foo');\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor(fopen('/path/to/file', 'r'));\n\n$generator = function ($bytes) {\n    for ($i = 0; $i < $bytes; $i++) {\n        yield ' ';\n    }\n}\n\n$stream = GuzzleHttp\\Psr7\\Utils::streamFor($generator(100));\n```\n\n\n## `GuzzleHttp\\Psr7\\Utils::tryFopen`\n\n`public static function tryFopen(string $filename, string $mode): resource`\n\nSafely opens a PHP stream resource using a filename.\n\nWhen fopen fails, PHP normally raises a warning. This function adds an\nerror handler that checks for errors and throws an exception instead.\n\n\n## `GuzzleHttp\\Psr7\\Utils::tryGetContents`\n\n`public static function tryGetContents(resource $stream): string`\n\nSafely gets the contents of a given stream.\n\nWhen stream_get_contents fails, PHP normally raises a warning. This\nfunction adds an error handler that checks for errors and throws an\nexception instead.\n\n\n## `GuzzleHttp\\Psr7\\Utils::uriFor`\n\n`public static function uriFor(string|UriInterface $uri): UriInterface`\n\nReturns a UriInterface for the given value.\n\nThis function accepts a string or UriInterface and returns a\nUriInterface for the given value. If the value is already a\nUriInterface, it is returned as-is.\n\n\n## `GuzzleHttp\\Psr7\\MimeType::fromFilename`\n\n`public static function fromFilename(string $filename): string|null`\n\nDetermines the mimetype of a file by looking at its extension.\n\n\n## `GuzzleHttp\\Psr7\\MimeType::fromExtension`\n\n`public static function fromExtension(string $extension): string|null`\n\nMaps a file extensions to a mimetype.\n\n\n## Upgrading from Function API\n\nThe static API was first introduced in 1.7.0, in order to mitigate problems with functions conflicting between global and local copies of the package. The function API was removed in 2.0.0. A migration table has been provided here for your convenience:\n\n| Original Function | Replacement Method |\n|----------------|----------------|\n| `str` | `Message::toString` |\n| `uri_for` | `Utils::uriFor` |\n| `stream_for` | `Utils::streamFor` |\n| `parse_header` | `Header::parse` |\n| `normalize_header` | `Header::normalize` |\n| `modify_request` | `Utils::modifyRequest` |\n| `rewind_body` | `Message::rewindBody` |\n| `try_fopen` | `Utils::tryFopen` |\n| `copy_to_string` | `Utils::copyToString` |\n| `copy_to_stream` | `Utils::copyToStream` |\n| `hash` | `Utils::hash` |\n| `readline` | `Utils::readLine` |\n| `parse_request` | `Message::parseRequest` |\n| `parse_response` | `Message::parseResponse` |\n| `parse_query` | `Query::parse` |\n| `build_query` | `Query::build` |\n| `mimetype_from_filename` | `MimeType::fromFilename` |\n| `mimetype_from_extension` | `MimeType::fromExtension` |\n| `_parse_message` | `Message::parseMessage` |\n| `_parse_request_uri` | `Message::parseRequestUri` |\n| `get_message_body_summary` | `Message::bodySummary` |\n| `_caseless_remove` | `Utils::caselessRemove` |\n\n\n# Additional URI Methods\n\nAside from the standard `Psr\\Http\\Message\\UriInterface` implementation in form of the `GuzzleHttp\\Psr7\\Uri` class,\nthis library also provides additional functionality when working with URIs as static methods.\n\n## URI Types\n\nAn instance of `Psr\\Http\\Message\\UriInterface` can either be an absolute URI or a relative reference.\nAn absolute URI has a scheme. A relative reference is used to express a URI relative to another URI,\nthe base URI. Relative references can be divided into several forms according to\n[RFC 3986 Section 4.2](https://tools.ietf.org/html/rfc3986#section-4.2):\n\n- network-path references, e.g. `//example.com/path`\n- absolute-path references, e.g. `/path`\n- relative-path references, e.g. `subpath`\n\nThe following methods can be used to identify the type of the URI.\n\n### `GuzzleHttp\\Psr7\\Uri::isAbsolute`\n\n`public static function isAbsolute(UriInterface $uri): bool`\n\nWhether the URI is absolute, i.e. it has a scheme.\n\n### `GuzzleHttp\\Psr7\\Uri::isNetworkPathReference`\n\n`public static function isNetworkPathReference(UriInterface $uri): bool`\n\nWhether the URI is a network-path reference. A relative reference that begins with two slash characters is\ntermed an network-path reference.\n\n### `GuzzleHttp\\Psr7\\Uri::isAbsolutePathReference`\n\n`public static function isAbsolutePathReference(UriInterface $uri): bool`\n\nWhether the URI is a absolute-path reference. A relative reference that begins with a single slash character is\ntermed an absolute-path reference.\n\n### `GuzzleHttp\\Psr7\\Uri::isRelativePathReference`\n\n`public static function isRelativePathReference(UriInterface $uri): bool`\n\nWhether the URI is a relative-path reference. A relative reference that does not begin with a slash character is\ntermed a relative-path reference.\n\n### `GuzzleHttp\\Psr7\\Uri::isSameDocumentReference`\n\n`public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool`\n\nWhether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its\nfragment component, identical to the base URI. When no base URI is given, only an empty URI reference\n(apart from its fragment) is considered a same-document reference.\n\n## URI Components\n\nAdditional methods to work with URI components.\n\n### `GuzzleHttp\\Psr7\\Uri::isDefaultPort`\n\n`public static function isDefaultPort(UriInterface $uri): bool`\n\nWhether the URI has the default port of the current scheme. `Psr\\Http\\Message\\UriInterface::getPort` may return null\nor the standard port. This method can be used independently of the implementation.\n\n### `GuzzleHttp\\Psr7\\Uri::composeComponents`\n\n`public static function composeComponents($scheme, $authority, $path, $query, $fragment): string`\n\nComposes a URI reference string from its various components according to\n[RFC 3986 Section 5.3](https://tools.ietf.org/html/rfc3986#section-5.3). Usually this method does not need to be called\nmanually but instead is used indirectly via `Psr\\Http\\Message\\UriInterface::__toString`.\n\n### `GuzzleHttp\\Psr7\\Uri::fromParts`\n\n`public static function fromParts(array $parts): UriInterface`\n\nCreates a URI from a hash of [`parse_url`](https://www.php.net/manual/en/function.parse-url.php) components.\n\n\n### `GuzzleHttp\\Psr7\\Uri::withQueryValue`\n\n`public static function withQueryValue(UriInterface $uri, $key, $value): UriInterface`\n\nCreates a new URI with a specific query string value. Any existing query string values that exactly match the\nprovided key are removed and replaced with the given key value pair. A value of null will set the query string\nkey without a value, e.g. \"key\" instead of \"key=value\".\n\n### `GuzzleHttp\\Psr7\\Uri::withQueryValues`\n\n`public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface`\n\nCreates a new URI with multiple query string values. It has the same behavior as `withQueryValue()` but for an\nassociative array of key => value.\n\n### `GuzzleHttp\\Psr7\\Uri::withoutQueryValue`\n\n`public static function withoutQueryValue(UriInterface $uri, $key): UriInterface`\n\nCreates a new URI with a specific query string value removed. Any existing query string values that exactly match the\nprovided key are removed.\n\n## Cross-Origin Detection\n\n`GuzzleHttp\\Psr7\\UriComparator` provides methods to determine if a modified URL should be considered cross-origin.\n\n### `GuzzleHttp\\Psr7\\UriComparator::isCrossOrigin`\n\n`public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool`\n\nDetermines if a modified URL should be considered cross-origin with respect to an original URL.\n\n## Reference Resolution\n\n`GuzzleHttp\\Psr7\\UriResolver` provides methods to resolve a URI reference in the context of a base URI according\nto [RFC 3986 Section 5](https://tools.ietf.org/html/rfc3986#section-5). This is for example also what web browsers\ndo when resolving a link in a website based on the current request URI.\n\n### `GuzzleHttp\\Psr7\\UriResolver::resolve`\n\n`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface`\n\nConverts the relative URI into a new URI that is resolved against the base URI.\n\n### `GuzzleHttp\\Psr7\\UriResolver::removeDotSegments`\n\n`public static function removeDotSegments(string $path): string`\n\nRemoves dot segments from a path and returns the new path according to\n[RFC 3986 Section 5.2.4](https://tools.ietf.org/html/rfc3986#section-5.2.4).\n\n### `GuzzleHttp\\Psr7\\UriResolver::relativize`\n\n`public static function relativize(UriInterface $base, UriInterface $target): UriInterface`\n\nReturns the target URI as a relative reference from the base URI. This method is the counterpart to resolve():\n\n```php\n(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))\n```\n\nOne use-case is to use the current request URI as base URI and then generate relative links in your documents\nto reduce the document size or offer self-contained downloadable document archives.\n\n```php\n$base = new Uri('http://example.com/a/b/');\necho UriResolver::relativize($base, new Uri('http://example.com/a/b/c'));  // prints 'c'.\necho UriResolver::relativize($base, new Uri('http://example.com/a/x/y'));  // prints '../x/y'.\necho UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.\necho UriResolver::relativize($base, new Uri('http://example.org/a/b/'));   // prints '//example.org/a/b/'.\n```\n\n## Normalization and Comparison\n\n`GuzzleHttp\\Psr7\\UriNormalizer` provides methods to normalize and compare URIs according to\n[RFC 3986 Section 6](https://tools.ietf.org/html/rfc3986#section-6).\n\n### `GuzzleHttp\\Psr7\\UriNormalizer::normalize`\n\n`public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS): UriInterface`\n\nReturns a normalized URI. The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.\nThis methods adds additional normalizations that can be configured with the `$flags` parameter which is a bitmask\nof normalizations to apply. The following normalizations are available:\n\n- `UriNormalizer::PRESERVING_NORMALIZATIONS`\n\n    Default normalizations which only include the ones that preserve semantics.\n\n- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING`\n\n    All letters within a percent-encoding triplet (e.g., \"%3A\") are case-insensitive, and should be capitalized.\n\n    Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b`\n\n- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS`\n\n    Decodes percent-encoded octets of unreserved characters. For consistency, percent-encoded octets in the ranges of\n    ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should\n    not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved\n    characters by URI normalizers.\n\n    Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/`\n\n- `UriNormalizer::CONVERT_EMPTY_PATH`\n\n    Converts the empty path to \"/\" for http and https URIs.\n\n    Example: `http://example.org` → `http://example.org/`\n\n- `UriNormalizer::REMOVE_DEFAULT_HOST`\n\n    Removes the default host of the given URI scheme from the URI. Only the \"file\" scheme defines the default host\n    \"localhost\". All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` are equivalent according to\n    RFC 3986.\n\n    Example: `file://localhost/myfile` → `file:///myfile`\n\n- `UriNormalizer::REMOVE_DEFAULT_PORT`\n\n    Removes the default port of the given URI scheme from the URI.\n\n    Example: `http://example.org:80/` → `http://example.org/`\n\n- `UriNormalizer::REMOVE_DOT_SEGMENTS`\n\n    Removes unnecessary dot-segments. Dot-segments in relative-path references are not removed as it would\n    change the semantics of the URI reference.\n\n    Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html`\n\n- `UriNormalizer::REMOVE_DUPLICATE_SLASHES`\n\n    Paths which include two or more adjacent slashes are converted to one. Webservers usually ignore duplicate slashes\n    and treat those URIs equivalent. But in theory those URIs do not need to be equivalent. So this normalization\n    may change the semantics. Encoded slashes (%2F) are not removed.\n\n    Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html`\n\n- `UriNormalizer::SORT_QUERY_PARAMETERS`\n\n    Sort query parameters with their values in alphabetical order. However, the order of parameters in a URI may be\n    significant (this is not defined by the standard). So this normalization is not safe and may change the semantics\n    of the URI.\n\n    Example: `?lang=en&article=fred` → `?article=fred&lang=en`\n\n### `GuzzleHttp\\Psr7\\UriNormalizer::isEquivalent`\n\n`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS): bool`\n\nWhether two URIs can be considered equivalent. Both URIs are normalized automatically before comparison with the given\n`$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent.\nThis of course assumes they will be resolved against the same base URI. If this is not the case, determination of\nequivalence or difference of relative references does not mean anything.\n\n\n## Version Guidance\n\n| Version | Status         | PHP Version      |\n|---------|----------------|------------------|\n| 1.x     | Security fixes | >=5.4,<8.1       |\n| 2.x     | Latest         | ^7.2.5 \\|\\| ^8.0 |\n\n\n## Security\n\nIf you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information.\n\n\n## License\n\nGuzzle is made available under the MIT License (MIT). Please see [License File](LICENSE) for more information.\n\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe maintainers of Guzzle and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-guzzlehttp-psr7?utm_source=packagist-guzzlehttp-psr7&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/composer.json",
    "content": "{\n    \"name\": \"guzzlehttp/psr7\",\n    \"description\": \"PSR-7 message implementation that also provides common utility methods\",\n    \"keywords\": [\n        \"request\",\n        \"response\",\n        \"message\",\n        \"stream\",\n        \"http\",\n        \"uri\",\n        \"url\",\n        \"psr-7\"\n    ],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Graham Campbell\",\n            \"email\": \"hello@gjcampbell.co.uk\",\n            \"homepage\": \"https://github.com/GrahamCampbell\"\n        },\n        {\n            \"name\": \"Michael Dowling\",\n            \"email\": \"mtdowling@gmail.com\",\n            \"homepage\": \"https://github.com/mtdowling\"\n        },\n        {\n            \"name\": \"George Mponos\",\n            \"email\": \"gmponos@gmail.com\",\n            \"homepage\": \"https://github.com/gmponos\"\n        },\n        {\n            \"name\": \"Tobias Nyholm\",\n            \"email\": \"tobias.nyholm@gmail.com\",\n            \"homepage\": \"https://github.com/Nyholm\"\n        },\n        {\n            \"name\": \"Márk Sági-Kazár\",\n            \"email\": \"mark.sagikazar@gmail.com\",\n            \"homepage\": \"https://github.com/sagikazarmark\"\n        },\n        {\n            \"name\": \"Tobias Schultze\",\n            \"email\": \"webmaster@tubo-world.de\",\n            \"homepage\": \"https://github.com/Tobion\"\n        },\n        {\n            \"name\": \"Márk Sági-Kazár\",\n            \"email\": \"mark.sagikazar@gmail.com\",\n            \"homepage\": \"https://sagikazarmark.hu\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.2.5 || ^8.0\",\n        \"psr/http-factory\": \"^1.0\",\n        \"psr/http-message\": \"^1.0\",\n        \"ralouphie/getallheaders\": \"^3.0\"\n    },\n    \"provide\": {\n        \"psr/http-factory-implementation\": \"1.0\",\n        \"psr/http-message-implementation\": \"1.0\"\n    },\n    \"require-dev\": {\n        \"bamarni/composer-bin-plugin\": \"^1.8.1\",\n        \"http-interop/http-factory-tests\": \"^0.9\",\n        \"phpunit/phpunit\": \"^8.5.29 || ^9.5.23\"\n    },\n    \"suggest\": {\n        \"laminas/laminas-httphandlerrunner\": \"Emit PSR-7 responses\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Psr7\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"GuzzleHttp\\\\Tests\\\\Psr7\\\\\": \"tests/\"\n        }\n    },\n    \"extra\": {\n        \"bamarni-bin\": {\n            \"bin-links\": true,\n            \"forward-command\": false\n        }\n    },\n    \"config\": {\n        \"allow-plugins\": {\n            \"bamarni/composer-bin-plugin\": true\n        },\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/AppendStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Reads from multiple streams, one after the other.\n *\n * This is a read-only stream decorator.\n */\nfinal class AppendStream implements StreamInterface\n{\n    /** @var StreamInterface[] Streams being decorated */\n    private $streams = [];\n\n    /** @var bool */\n    private $seekable = true;\n\n    /** @var int */\n    private $current = 0;\n\n    /** @var int */\n    private $pos = 0;\n\n    /**\n     * @param StreamInterface[] $streams Streams to decorate. Each stream must\n     *                                   be readable.\n     */\n    public function __construct(array $streams = [])\n    {\n        foreach ($streams as $stream) {\n            $this->addStream($stream);\n        }\n    }\n\n    public function __toString(): string\n    {\n        try {\n            $this->rewind();\n            return $this->getContents();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n            return '';\n        }\n    }\n\n    /**\n     * Add a stream to the AppendStream\n     *\n     * @param StreamInterface $stream Stream to append. Must be readable.\n     *\n     * @throws \\InvalidArgumentException if the stream is not readable\n     */\n    public function addStream(StreamInterface $stream): void\n    {\n        if (!$stream->isReadable()) {\n            throw new \\InvalidArgumentException('Each stream must be readable');\n        }\n\n        // The stream is only seekable if all streams are seekable\n        if (!$stream->isSeekable()) {\n            $this->seekable = false;\n        }\n\n        $this->streams[] = $stream;\n    }\n\n    public function getContents(): string\n    {\n        return Utils::copyToString($this);\n    }\n\n    /**\n     * Closes each attached stream.\n     */\n    public function close(): void\n    {\n        $this->pos = $this->current = 0;\n        $this->seekable = true;\n\n        foreach ($this->streams as $stream) {\n            $stream->close();\n        }\n\n        $this->streams = [];\n    }\n\n    /**\n     * Detaches each attached stream.\n     *\n     * Returns null as it's not clear which underlying stream resource to return.\n     */\n    public function detach()\n    {\n        $this->pos = $this->current = 0;\n        $this->seekable = true;\n\n        foreach ($this->streams as $stream) {\n            $stream->detach();\n        }\n\n        $this->streams = [];\n\n        return null;\n    }\n\n    public function tell(): int\n    {\n        return $this->pos;\n    }\n\n    /**\n     * Tries to calculate the size by adding the size of each stream.\n     *\n     * If any of the streams do not return a valid number, then the size of the\n     * append stream cannot be determined and null is returned.\n     */\n    public function getSize(): ?int\n    {\n        $size = 0;\n\n        foreach ($this->streams as $stream) {\n            $s = $stream->getSize();\n            if ($s === null) {\n                return null;\n            }\n            $size += $s;\n        }\n\n        return $size;\n    }\n\n    public function eof(): bool\n    {\n        return !$this->streams ||\n            ($this->current >= count($this->streams) - 1 &&\n             $this->streams[$this->current]->eof());\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    /**\n     * Attempts to seek to the given position. Only supports SEEK_SET.\n     */\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        if (!$this->seekable) {\n            throw new \\RuntimeException('This AppendStream is not seekable');\n        } elseif ($whence !== SEEK_SET) {\n            throw new \\RuntimeException('The AppendStream can only seek with SEEK_SET');\n        }\n\n        $this->pos = $this->current = 0;\n\n        // Rewind each stream\n        foreach ($this->streams as $i => $stream) {\n            try {\n                $stream->rewind();\n            } catch (\\Exception $e) {\n                throw new \\RuntimeException('Unable to seek stream '\n                    . $i . ' of the AppendStream', 0, $e);\n            }\n        }\n\n        // Seek to the actual position by reading from each stream\n        while ($this->pos < $offset && !$this->eof()) {\n            $result = $this->read(min(8096, $offset - $this->pos));\n            if ($result === '') {\n                break;\n            }\n        }\n    }\n\n    /**\n     * Reads from all of the appended streams until the length is met or EOF.\n     */\n    public function read($length): string\n    {\n        $buffer = '';\n        $total = count($this->streams) - 1;\n        $remaining = $length;\n        $progressToNext = false;\n\n        while ($remaining > 0) {\n            // Progress to the next stream if needed.\n            if ($progressToNext || $this->streams[$this->current]->eof()) {\n                $progressToNext = false;\n                if ($this->current === $total) {\n                    break;\n                }\n                $this->current++;\n            }\n\n            $result = $this->streams[$this->current]->read($remaining);\n\n            if ($result === '') {\n                $progressToNext = true;\n                continue;\n            }\n\n            $buffer .= $result;\n            $remaining = $length - strlen($buffer);\n        }\n\n        $this->pos += strlen($buffer);\n\n        return $buffer;\n    }\n\n    public function isReadable(): bool\n    {\n        return true;\n    }\n\n    public function isWritable(): bool\n    {\n        return false;\n    }\n\n    public function isSeekable(): bool\n    {\n        return $this->seekable;\n    }\n\n    public function write($string): int\n    {\n        throw new \\RuntimeException('Cannot write to an AppendStream');\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        return $key ? null : [];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/BufferStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Provides a buffer stream that can be written to to fill a buffer, and read\n * from to remove bytes from the buffer.\n *\n * This stream returns a \"hwm\" metadata value that tells upstream consumers\n * what the configured high water mark of the stream is, or the maximum\n * preferred size of the buffer.\n */\nfinal class BufferStream implements StreamInterface\n{\n    /** @var int */\n    private $hwm;\n\n    /** @var string */\n    private $buffer = '';\n\n    /**\n     * @param int $hwm High water mark, representing the preferred maximum\n     *                 buffer size. If the size of the buffer exceeds the high\n     *                 water mark, then calls to write will continue to succeed\n     *                 but will return 0 to inform writers to slow down\n     *                 until the buffer has been drained by reading from it.\n     */\n    public function __construct(int $hwm = 16384)\n    {\n        $this->hwm = $hwm;\n    }\n\n    public function __toString(): string\n    {\n        return $this->getContents();\n    }\n\n    public function getContents(): string\n    {\n        $buffer = $this->buffer;\n        $this->buffer = '';\n\n        return $buffer;\n    }\n\n    public function close(): void\n    {\n        $this->buffer = '';\n    }\n\n    public function detach()\n    {\n        $this->close();\n\n        return null;\n    }\n\n    public function getSize(): ?int\n    {\n        return strlen($this->buffer);\n    }\n\n    public function isReadable(): bool\n    {\n        return true;\n    }\n\n    public function isWritable(): bool\n    {\n        return true;\n    }\n\n    public function isSeekable(): bool\n    {\n        return false;\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        throw new \\RuntimeException('Cannot seek a BufferStream');\n    }\n\n    public function eof(): bool\n    {\n        return strlen($this->buffer) === 0;\n    }\n\n    public function tell(): int\n    {\n        throw new \\RuntimeException('Cannot determine the position of a BufferStream');\n    }\n\n    /**\n     * Reads data from the buffer.\n     */\n    public function read($length): string\n    {\n        $currentLength = strlen($this->buffer);\n\n        if ($length >= $currentLength) {\n            // No need to slice the buffer because we don't have enough data.\n            $result = $this->buffer;\n            $this->buffer = '';\n        } else {\n            // Slice up the result to provide a subset of the buffer.\n            $result = substr($this->buffer, 0, $length);\n            $this->buffer = substr($this->buffer, $length);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Writes data to the buffer.\n     */\n    public function write($string): int\n    {\n        $this->buffer .= $string;\n\n        if (strlen($this->buffer) >= $this->hwm) {\n            return 0;\n        }\n\n        return strlen($string);\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        if ($key === 'hwm') {\n            return $this->hwm;\n        }\n\n        return $key ? null : [];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/CachingStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator that can cache previously read bytes from a sequentially\n * read stream.\n */\nfinal class CachingStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var StreamInterface Stream being wrapped */\n    private $remoteStream;\n\n    /** @var int Number of bytes to skip reading due to a write on the buffer */\n    private $skipReadBytes = 0;\n\n    /**\n     * @var StreamInterface\n     */\n    private $stream;\n\n    /**\n     * We will treat the buffer object as the body of the stream\n     *\n     * @param StreamInterface $stream Stream to cache. The cursor is assumed to be at the beginning of the stream.\n     * @param StreamInterface $target Optionally specify where data is cached\n     */\n    public function __construct(\n        StreamInterface $stream,\n        StreamInterface $target = null\n    ) {\n        $this->remoteStream = $stream;\n        $this->stream = $target ?: new Stream(Utils::tryFopen('php://temp', 'r+'));\n    }\n\n    public function getSize(): ?int\n    {\n        $remoteSize = $this->remoteStream->getSize();\n\n        if (null === $remoteSize) {\n            return null;\n        }\n\n        return max($this->stream->getSize(), $remoteSize);\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        if ($whence === SEEK_SET) {\n            $byte = $offset;\n        } elseif ($whence === SEEK_CUR) {\n            $byte = $offset + $this->tell();\n        } elseif ($whence === SEEK_END) {\n            $size = $this->remoteStream->getSize();\n            if ($size === null) {\n                $size = $this->cacheEntireStream();\n            }\n            $byte = $size + $offset;\n        } else {\n            throw new \\InvalidArgumentException('Invalid whence');\n        }\n\n        $diff = $byte - $this->stream->getSize();\n\n        if ($diff > 0) {\n            // Read the remoteStream until we have read in at least the amount\n            // of bytes requested, or we reach the end of the file.\n            while ($diff > 0 && !$this->remoteStream->eof()) {\n                $this->read($diff);\n                $diff = $byte - $this->stream->getSize();\n            }\n        } else {\n            // We can just do a normal seek since we've already seen this byte.\n            $this->stream->seek($byte);\n        }\n    }\n\n    public function read($length): string\n    {\n        // Perform a regular read on any previously read data from the buffer\n        $data = $this->stream->read($length);\n        $remaining = $length - strlen($data);\n\n        // More data was requested so read from the remote stream\n        if ($remaining) {\n            // If data was written to the buffer in a position that would have\n            // been filled from the remote stream, then we must skip bytes on\n            // the remote stream to emulate overwriting bytes from that\n            // position. This mimics the behavior of other PHP stream wrappers.\n            $remoteData = $this->remoteStream->read(\n                $remaining + $this->skipReadBytes\n            );\n\n            if ($this->skipReadBytes) {\n                $len = strlen($remoteData);\n                $remoteData = substr($remoteData, $this->skipReadBytes);\n                $this->skipReadBytes = max(0, $this->skipReadBytes - $len);\n            }\n\n            $data .= $remoteData;\n            $this->stream->write($remoteData);\n        }\n\n        return $data;\n    }\n\n    public function write($string): int\n    {\n        // When appending to the end of the currently read stream, you'll want\n        // to skip bytes from being read from the remote stream to emulate\n        // other stream wrappers. Basically replacing bytes of data of a fixed\n        // length.\n        $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell();\n        if ($overflow > 0) {\n            $this->skipReadBytes += $overflow;\n        }\n\n        return $this->stream->write($string);\n    }\n\n    public function eof(): bool\n    {\n        return $this->stream->eof() && $this->remoteStream->eof();\n    }\n\n    /**\n     * Close both the remote stream and buffer stream\n     */\n    public function close(): void\n    {\n        $this->remoteStream->close();\n        $this->stream->close();\n    }\n\n    private function cacheEntireStream(): int\n    {\n        $target = new FnStream(['write' => 'strlen']);\n        Utils::copyToStream($this, $target);\n\n        return $this->tell();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/DroppingStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator that begins dropping data once the size of the underlying\n * stream becomes too full.\n */\nfinal class DroppingStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var int */\n    private $maxLength;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /**\n     * @param StreamInterface $stream    Underlying stream to decorate.\n     * @param int             $maxLength Maximum size before dropping data.\n     */\n    public function __construct(StreamInterface $stream, int $maxLength)\n    {\n        $this->stream = $stream;\n        $this->maxLength = $maxLength;\n    }\n\n    public function write($string): int\n    {\n        $diff = $this->maxLength - $this->stream->getSize();\n\n        // Begin returning 0 when the underlying stream is too large.\n        if ($diff <= 0) {\n            return 0;\n        }\n\n        // Write the stream or a subset of the stream if needed.\n        if (strlen($string) < $diff) {\n            return $this->stream->write($string);\n        }\n\n        return $this->stream->write(substr($string, 0, $diff));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Exception/MalformedUriException.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7\\Exception;\n\nuse InvalidArgumentException;\n\n/**\n * Exception thrown if a URI cannot be parsed because it's malformed.\n */\nclass MalformedUriException extends InvalidArgumentException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/FnStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Compose stream implementations based on a hash of functions.\n *\n * Allows for easy testing and extension of a provided stream without needing\n * to create a concrete class for a simple extension point.\n */\n#[\\AllowDynamicProperties]\nfinal class FnStream implements StreamInterface\n{\n    private const SLOTS = [\n        '__toString', 'close', 'detach', 'rewind',\n        'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write',\n        'isReadable', 'read', 'getContents', 'getMetadata'\n    ];\n\n    /** @var array<string, callable> */\n    private $methods;\n\n    /**\n     * @param array<string, callable> $methods Hash of method name to a callable.\n     */\n    public function __construct(array $methods)\n    {\n        $this->methods = $methods;\n\n        // Create the functions on the class\n        foreach ($methods as $name => $fn) {\n            $this->{'_fn_' . $name} = $fn;\n        }\n    }\n\n    /**\n     * Lazily determine which methods are not implemented.\n     *\n     * @throws \\BadMethodCallException\n     */\n    public function __get(string $name): void\n    {\n        throw new \\BadMethodCallException(str_replace('_fn_', '', $name)\n            . '() is not implemented in the FnStream');\n    }\n\n    /**\n     * The close method is called on the underlying stream only if possible.\n     */\n    public function __destruct()\n    {\n        if (isset($this->_fn_close)) {\n            call_user_func($this->_fn_close);\n        }\n    }\n\n    /**\n     * An unserialize would allow the __destruct to run when the unserialized value goes out of scope.\n     *\n     * @throws \\LogicException\n     */\n    public function __wakeup(): void\n    {\n        throw new \\LogicException('FnStream should never be unserialized');\n    }\n\n    /**\n     * Adds custom functionality to an underlying stream by intercepting\n     * specific method calls.\n     *\n     * @param StreamInterface         $stream  Stream to decorate\n     * @param array<string, callable> $methods Hash of method name to a closure\n     *\n     * @return FnStream\n     */\n    public static function decorate(StreamInterface $stream, array $methods)\n    {\n        // If any of the required methods were not provided, then simply\n        // proxy to the decorated stream.\n        foreach (array_diff(self::SLOTS, array_keys($methods)) as $diff) {\n            /** @var callable $callable */\n            $callable = [$stream, $diff];\n            $methods[$diff] = $callable;\n        }\n\n        return new self($methods);\n    }\n\n    public function __toString(): string\n    {\n        try {\n            return call_user_func($this->_fn___toString);\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n            return '';\n        }\n    }\n\n    public function close(): void\n    {\n        call_user_func($this->_fn_close);\n    }\n\n    public function detach()\n    {\n        return call_user_func($this->_fn_detach);\n    }\n\n    public function getSize(): ?int\n    {\n        return call_user_func($this->_fn_getSize);\n    }\n\n    public function tell(): int\n    {\n        return call_user_func($this->_fn_tell);\n    }\n\n    public function eof(): bool\n    {\n        return call_user_func($this->_fn_eof);\n    }\n\n    public function isSeekable(): bool\n    {\n        return call_user_func($this->_fn_isSeekable);\n    }\n\n    public function rewind(): void\n    {\n        call_user_func($this->_fn_rewind);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        call_user_func($this->_fn_seek, $offset, $whence);\n    }\n\n    public function isWritable(): bool\n    {\n        return call_user_func($this->_fn_isWritable);\n    }\n\n    public function write($string): int\n    {\n        return call_user_func($this->_fn_write, $string);\n    }\n\n    public function isReadable(): bool\n    {\n        return call_user_func($this->_fn_isReadable);\n    }\n\n    public function read($length): string\n    {\n        return call_user_func($this->_fn_read, $length);\n    }\n\n    public function getContents(): string\n    {\n        return call_user_func($this->_fn_getContents);\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        return call_user_func($this->_fn_getMetadata, $key);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Header.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nfinal class Header\n{\n    /**\n     * Parse an array of header values containing \";\" separated data into an\n     * array of associative arrays representing the header key value pair data\n     * of the header. When a parameter does not contain a value, but just\n     * contains a key, this function will inject a key with a '' string value.\n     *\n     * @param string|array $header Header to parse into components.\n     */\n    public static function parse($header): array\n    {\n        static $trimmed = \"\\\"'  \\n\\t\\r\";\n        $params = $matches = [];\n\n        foreach ((array) $header as $value) {\n            foreach (self::splitList($value) as $val) {\n                $part = [];\n                foreach (preg_split('/;(?=([^\"]*\"[^\"]*\")*[^\"]*$)/', $val) as $kvp) {\n                    if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) {\n                        $m = $matches[0];\n                        if (isset($m[1])) {\n                            $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed);\n                        } else {\n                            $part[] = trim($m[0], $trimmed);\n                        }\n                    }\n                }\n                if ($part) {\n                    $params[] = $part;\n                }\n            }\n        }\n\n        return $params;\n    }\n\n    /**\n     * Converts an array of header values that may contain comma separated\n     * headers into an array of headers with no comma separated values.\n     *\n     * @param string|array $header Header to normalize.\n     *\n     * @deprecated Use self::splitList() instead.\n     */\n    public static function normalize($header): array\n    {\n        $result = [];\n        foreach ((array) $header as $value) {\n            foreach (self::splitList($value) as $parsed) {\n                $result[] = $parsed;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Splits a HTTP header defined to contain a comma-separated list into\n     * each individual value. Empty values will be removed.\n     *\n     * Example headers include 'accept', 'cache-control' and 'if-none-match'.\n     *\n     * This method must not be used to parse headers that are not defined as\n     * a list, such as 'user-agent' or 'set-cookie'.\n     *\n     * @param string|string[] $values Header value as returned by MessageInterface::getHeader()\n     *\n     * @return string[]\n     */\n    public static function splitList($values): array\n    {\n        if (!\\is_array($values)) {\n            $values = [$values];\n        }\n\n        $result = [];\n        foreach ($values as $value) {\n            if (!\\is_string($value)) {\n                throw new \\TypeError('$header must either be a string or an array containing strings.');\n            }\n\n            $v = '';\n            $isQuoted = false;\n            $isEscaped = false;\n            for ($i = 0, $max = \\strlen($value); $i < $max; $i++) {\n                if ($isEscaped) {\n                    $v .= $value[$i];\n                    $isEscaped = false;\n\n                    continue;\n                }\n\n                if (!$isQuoted && $value[$i] === ',') {\n                    $v = \\trim($v);\n                    if ($v !== '') {\n                        $result[] = $v;\n                    }\n\n                    $v = '';\n                    continue;\n                }\n\n                if ($isQuoted && $value[$i] === '\\\\') {\n                    $isEscaped = true;\n                    $v .= $value[$i];\n\n                    continue;\n                }\n                if ($value[$i] === '\"') {\n                    $isQuoted = !$isQuoted;\n                    $v .= $value[$i];\n\n                    continue;\n                }\n\n                $v .= $value[$i];\n            }\n\n            $v = \\trim($v);\n            if ($v !== '') {\n                $result[] = $v;\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/HttpFactory.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\RequestFactoryInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseFactoryInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\ServerRequestFactoryInterface;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\StreamFactoryInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileFactoryInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Psr\\Http\\Message\\UriFactoryInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Implements all of the PSR-17 interfaces.\n *\n * Note: in consuming code it is recommended to require the implemented interfaces\n * and inject the instance of this class multiple times.\n */\nfinal class HttpFactory implements\n    RequestFactoryInterface,\n    ResponseFactoryInterface,\n    ServerRequestFactoryInterface,\n    StreamFactoryInterface,\n    UploadedFileFactoryInterface,\n    UriFactoryInterface\n{\n    public function createUploadedFile(\n        StreamInterface $stream,\n        int $size = null,\n        int $error = \\UPLOAD_ERR_OK,\n        string $clientFilename = null,\n        string $clientMediaType = null\n    ): UploadedFileInterface {\n        if ($size === null) {\n            $size = $stream->getSize();\n        }\n\n        return new UploadedFile($stream, $size, $error, $clientFilename, $clientMediaType);\n    }\n\n    public function createStream(string $content = ''): StreamInterface\n    {\n        return Utils::streamFor($content);\n    }\n\n    public function createStreamFromFile(string $file, string $mode = 'r'): StreamInterface\n    {\n        try {\n            $resource = Utils::tryFopen($file, $mode);\n        } catch (\\RuntimeException $e) {\n            if ('' === $mode || false === \\in_array($mode[0], ['r', 'w', 'a', 'x', 'c'], true)) {\n                throw new \\InvalidArgumentException(sprintf('Invalid file opening mode \"%s\"', $mode), 0, $e);\n            }\n\n            throw $e;\n        }\n\n        return Utils::streamFor($resource);\n    }\n\n    public function createStreamFromResource($resource): StreamInterface\n    {\n        return Utils::streamFor($resource);\n    }\n\n    public function createServerRequest(string $method, $uri, array $serverParams = []): ServerRequestInterface\n    {\n        if (empty($method)) {\n            if (!empty($serverParams['REQUEST_METHOD'])) {\n                $method = $serverParams['REQUEST_METHOD'];\n            } else {\n                throw new \\InvalidArgumentException('Cannot determine HTTP method');\n            }\n        }\n\n        return new ServerRequest($method, $uri, [], null, '1.1', $serverParams);\n    }\n\n    public function createResponse(int $code = 200, string $reasonPhrase = ''): ResponseInterface\n    {\n        return new Response($code, [], null, '1.1', $reasonPhrase);\n    }\n\n    public function createRequest(string $method, $uri): RequestInterface\n    {\n        return new Request($method, $uri);\n    }\n\n    public function createUri(string $uri = ''): UriInterface\n    {\n        return new Uri($uri);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/InflateStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Uses PHP's zlib.inflate filter to inflate zlib (HTTP deflate, RFC1950) or gzipped (RFC1952) content.\n *\n * This stream decorator converts the provided stream to a PHP stream resource,\n * then appends the zlib.inflate filter. The stream is then converted back\n * to a Guzzle stream resource to be used as a Guzzle stream.\n *\n * @link http://tools.ietf.org/html/rfc1950\n * @link http://tools.ietf.org/html/rfc1952\n * @link http://php.net/manual/en/filters.compression.php\n */\nfinal class InflateStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    public function __construct(StreamInterface $stream)\n    {\n        $resource = StreamWrapper::getResource($stream);\n        // Specify window=15+32, so zlib will use header detection to both gzip (with header) and zlib data\n        // See http://www.zlib.net/manual.html#Advanced definition of inflateInit2\n        // \"Add 32 to windowBits to enable zlib and gzip decoding with automatic header detection\"\n        // Default window size is 15.\n        stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ, ['window' => 15 + 32]);\n        $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/LazyOpenStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Lazily reads or writes to a file that is opened only after an IO operation\n * take place on the stream.\n */\nfinal class LazyOpenStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var string */\n    private $filename;\n\n    /** @var string */\n    private $mode;\n\n    /**\n     * @var StreamInterface\n     */\n    private $stream;\n\n    /**\n     * @param string $filename File to lazily open\n     * @param string $mode     fopen mode to use when opening the stream\n     */\n    public function __construct(string $filename, string $mode)\n    {\n        $this->filename = $filename;\n        $this->mode = $mode;\n\n        // unsetting the property forces the first access to go through\n        // __get().\n        unset($this->stream);\n    }\n\n    /**\n     * Creates the underlying stream lazily when required.\n     */\n    protected function createStream(): StreamInterface\n    {\n        return Utils::streamFor(Utils::tryFopen($this->filename, $this->mode));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/LimitStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Decorator used to return only a subset of a stream.\n */\nfinal class LimitStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var int Offset to start reading from */\n    private $offset;\n\n    /** @var int Limit the number of bytes that can be read */\n    private $limit;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /**\n     * @param StreamInterface $stream Stream to wrap\n     * @param int             $limit  Total number of bytes to allow to be read\n     *                                from the stream. Pass -1 for no limit.\n     * @param int             $offset Position to seek to before reading (only\n     *                                works on seekable streams).\n     */\n    public function __construct(\n        StreamInterface $stream,\n        int $limit = -1,\n        int $offset = 0\n    ) {\n        $this->stream = $stream;\n        $this->setLimit($limit);\n        $this->setOffset($offset);\n    }\n\n    public function eof(): bool\n    {\n        // Always return true if the underlying stream is EOF\n        if ($this->stream->eof()) {\n            return true;\n        }\n\n        // No limit and the underlying stream is not at EOF\n        if ($this->limit === -1) {\n            return false;\n        }\n\n        return $this->stream->tell() >= $this->offset + $this->limit;\n    }\n\n    /**\n     * Returns the size of the limited subset of data\n     */\n    public function getSize(): ?int\n    {\n        if (null === ($length = $this->stream->getSize())) {\n            return null;\n        } elseif ($this->limit === -1) {\n            return $length - $this->offset;\n        } else {\n            return min($this->limit, $length - $this->offset);\n        }\n    }\n\n    /**\n     * Allow for a bounded seek on the read limited stream\n     */\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        if ($whence !== SEEK_SET || $offset < 0) {\n            throw new \\RuntimeException(sprintf(\n                'Cannot seek to offset %s with whence %s',\n                $offset,\n                $whence\n            ));\n        }\n\n        $offset += $this->offset;\n\n        if ($this->limit !== -1) {\n            if ($offset > $this->offset + $this->limit) {\n                $offset = $this->offset + $this->limit;\n            }\n        }\n\n        $this->stream->seek($offset);\n    }\n\n    /**\n     * Give a relative tell()\n     */\n    public function tell(): int\n    {\n        return $this->stream->tell() - $this->offset;\n    }\n\n    /**\n     * Set the offset to start limiting from\n     *\n     * @param int $offset Offset to seek to and begin byte limiting from\n     *\n     * @throws \\RuntimeException if the stream cannot be seeked.\n     */\n    public function setOffset(int $offset): void\n    {\n        $current = $this->stream->tell();\n\n        if ($current !== $offset) {\n            // If the stream cannot seek to the offset position, then read to it\n            if ($this->stream->isSeekable()) {\n                $this->stream->seek($offset);\n            } elseif ($current > $offset) {\n                throw new \\RuntimeException(\"Could not seek to stream offset $offset\");\n            } else {\n                $this->stream->read($offset - $current);\n            }\n        }\n\n        $this->offset = $offset;\n    }\n\n    /**\n     * Set the limit of bytes that the decorator allows to be read from the\n     * stream.\n     *\n     * @param int $limit Number of bytes to allow to be read from the stream.\n     *                   Use -1 for no limit.\n     */\n    public function setLimit(int $limit): void\n    {\n        $this->limit = $limit;\n    }\n\n    public function read($length): string\n    {\n        if ($this->limit === -1) {\n            return $this->stream->read($length);\n        }\n\n        // Check if the current position is less than the total allowed\n        // bytes + original offset\n        $remaining = ($this->offset + $this->limit) - $this->stream->tell();\n        if ($remaining > 0) {\n            // Only return the amount of requested data, ensuring that the byte\n            // limit is not exceeded\n            return $this->stream->read(min($remaining, $length));\n        }\n\n        return '';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Message.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\MessageInterface;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\nfinal class Message\n{\n    /**\n     * Returns the string representation of an HTTP message.\n     *\n     * @param MessageInterface $message Message to convert to a string.\n     */\n    public static function toString(MessageInterface $message): string\n    {\n        if ($message instanceof RequestInterface) {\n            $msg = trim($message->getMethod() . ' '\n                    . $message->getRequestTarget())\n                . ' HTTP/' . $message->getProtocolVersion();\n            if (!$message->hasHeader('host')) {\n                $msg .= \"\\r\\nHost: \" . $message->getUri()->getHost();\n            }\n        } elseif ($message instanceof ResponseInterface) {\n            $msg = 'HTTP/' . $message->getProtocolVersion() . ' '\n                . $message->getStatusCode() . ' '\n                . $message->getReasonPhrase();\n        } else {\n            throw new \\InvalidArgumentException('Unknown message type');\n        }\n\n        foreach ($message->getHeaders() as $name => $values) {\n            if (strtolower($name) === 'set-cookie') {\n                foreach ($values as $value) {\n                    $msg .= \"\\r\\n{$name}: \" . $value;\n                }\n            } else {\n                $msg .= \"\\r\\n{$name}: \" . implode(', ', $values);\n            }\n        }\n\n        return \"{$msg}\\r\\n\\r\\n\" . $message->getBody();\n    }\n\n    /**\n     * Get a short summary of the message body.\n     *\n     * Will return `null` if the response is not printable.\n     *\n     * @param MessageInterface $message    The message to get the body summary\n     * @param int              $truncateAt The maximum allowed size of the summary\n     */\n    public static function bodySummary(MessageInterface $message, int $truncateAt = 120): ?string\n    {\n        $body = $message->getBody();\n\n        if (!$body->isSeekable() || !$body->isReadable()) {\n            return null;\n        }\n\n        $size = $body->getSize();\n\n        if ($size === 0) {\n            return null;\n        }\n\n        $body->rewind();\n        $summary = $body->read($truncateAt);\n        $body->rewind();\n\n        if ($size > $truncateAt) {\n            $summary .= ' (truncated...)';\n        }\n\n        // Matches any printable character, including unicode characters:\n        // letters, marks, numbers, punctuation, spacing, and separators.\n        if (preg_match('/[^\\pL\\pM\\pN\\pP\\pS\\pZ\\n\\r\\t]/u', $summary) !== 0) {\n            return null;\n        }\n\n        return $summary;\n    }\n\n    /**\n     * Attempts to rewind a message body and throws an exception on failure.\n     *\n     * The body of the message will only be rewound if a call to `tell()`\n     * returns a value other than `0`.\n     *\n     * @param MessageInterface $message Message to rewind\n     *\n     * @throws \\RuntimeException\n     */\n    public static function rewindBody(MessageInterface $message): void\n    {\n        $body = $message->getBody();\n\n        if ($body->tell()) {\n            $body->rewind();\n        }\n    }\n\n    /**\n     * Parses an HTTP message into an associative array.\n     *\n     * The array contains the \"start-line\" key containing the start line of\n     * the message, \"headers\" key containing an associative array of header\n     * array values, and a \"body\" key containing the body of the message.\n     *\n     * @param string $message HTTP request or response to parse.\n     */\n    public static function parseMessage(string $message): array\n    {\n        if (!$message) {\n            throw new \\InvalidArgumentException('Invalid message');\n        }\n\n        $message = ltrim($message, \"\\r\\n\");\n\n        $messageParts = preg_split(\"/\\r?\\n\\r?\\n/\", $message, 2);\n\n        if ($messageParts === false || count($messageParts) !== 2) {\n            throw new \\InvalidArgumentException('Invalid message: Missing header delimiter');\n        }\n\n        [$rawHeaders, $body] = $messageParts;\n        $rawHeaders .= \"\\r\\n\"; // Put back the delimiter we split previously\n        $headerParts = preg_split(\"/\\r?\\n/\", $rawHeaders, 2);\n\n        if ($headerParts === false || count($headerParts) !== 2) {\n            throw new \\InvalidArgumentException('Invalid message: Missing status line');\n        }\n\n        [$startLine, $rawHeaders] = $headerParts;\n\n        if (preg_match(\"/(?:^HTTP\\/|^[A-Z]+ \\S+ HTTP\\/)(\\d+(?:\\.\\d+)?)/i\", $startLine, $matches) && $matches[1] === '1.0') {\n            // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0\n            $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders);\n        }\n\n        /** @var array[] $headerLines */\n        $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER);\n\n        // If these aren't the same, then one line didn't match and there's an invalid header.\n        if ($count !== substr_count($rawHeaders, \"\\n\")) {\n            // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4\n            if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) {\n                throw new \\InvalidArgumentException('Invalid header syntax: Obsolete line folding');\n            }\n\n            throw new \\InvalidArgumentException('Invalid header syntax');\n        }\n\n        $headers = [];\n\n        foreach ($headerLines as $headerLine) {\n            $headers[$headerLine[1]][] = $headerLine[2];\n        }\n\n        return [\n            'start-line' => $startLine,\n            'headers' => $headers,\n            'body' => $body,\n        ];\n    }\n\n    /**\n     * Constructs a URI for an HTTP request message.\n     *\n     * @param string $path    Path from the start-line\n     * @param array  $headers Array of headers (each value an array).\n     */\n    public static function parseRequestUri(string $path, array $headers): string\n    {\n        $hostKey = array_filter(array_keys($headers), function ($k) {\n            // Numeric array keys are converted to int by PHP.\n            $k = (string) $k;\n\n            return strtolower($k) === 'host';\n        });\n\n        // If no host is found, then a full URI cannot be constructed.\n        if (!$hostKey) {\n            return $path;\n        }\n\n        $host = $headers[reset($hostKey)][0];\n        $scheme = substr($host, -4) === ':443' ? 'https' : 'http';\n\n        return $scheme . '://' . $host . '/' . ltrim($path, '/');\n    }\n\n    /**\n     * Parses a request message string into a request object.\n     *\n     * @param string $message Request message string.\n     */\n    public static function parseRequest(string $message): RequestInterface\n    {\n        $data = self::parseMessage($message);\n        $matches = [];\n        if (!preg_match('/^[\\S]+\\s+([a-zA-Z]+:\\/\\/|\\/).*/', $data['start-line'], $matches)) {\n            throw new \\InvalidArgumentException('Invalid request string');\n        }\n        $parts = explode(' ', $data['start-line'], 3);\n        $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1';\n\n        $request = new Request(\n            $parts[0],\n            $matches[1] === '/' ? self::parseRequestUri($parts[1], $data['headers']) : $parts[1],\n            $data['headers'],\n            $data['body'],\n            $version\n        );\n\n        return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]);\n    }\n\n    /**\n     * Parses a response message string into a response object.\n     *\n     * @param string $message Response message string.\n     */\n    public static function parseResponse(string $message): ResponseInterface\n    {\n        $data = self::parseMessage($message);\n        // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space\n        // between status-code and reason-phrase is required. But browsers accept\n        // responses without space and reason as well.\n        if (!preg_match('/^HTTP\\/.* [0-9]{3}( .*|$)/', $data['start-line'])) {\n            throw new \\InvalidArgumentException('Invalid response string: ' . $data['start-line']);\n        }\n        $parts = explode(' ', $data['start-line'], 3);\n\n        return new Response(\n            (int) $parts[1],\n            $data['headers'],\n            $data['body'],\n            explode('/', $parts[0])[1],\n            $parts[2] ?? null\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/MessageTrait.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\MessageInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Trait implementing functionality common to requests and responses.\n */\ntrait MessageTrait\n{\n    /** @var array<string, string[]> Map of all registered headers, as original name => array of values */\n    private $headers = [];\n\n    /** @var array<string, string> Map of lowercase header name => original name at registration */\n    private $headerNames  = [];\n\n    /** @var string */\n    private $protocol = '1.1';\n\n    /** @var StreamInterface|null */\n    private $stream;\n\n    public function getProtocolVersion(): string\n    {\n        return $this->protocol;\n    }\n\n    public function withProtocolVersion($version): MessageInterface\n    {\n        if ($this->protocol === $version) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->protocol = $version;\n        return $new;\n    }\n\n    public function getHeaders(): array\n    {\n        return $this->headers;\n    }\n\n    public function hasHeader($header): bool\n    {\n        return isset($this->headerNames[strtolower($header)]);\n    }\n\n    public function getHeader($header): array\n    {\n        $header = strtolower($header);\n\n        if (!isset($this->headerNames[$header])) {\n            return [];\n        }\n\n        $header = $this->headerNames[$header];\n\n        return $this->headers[$header];\n    }\n\n    public function getHeaderLine($header): string\n    {\n        return implode(', ', $this->getHeader($header));\n    }\n\n    public function withHeader($header, $value): MessageInterface\n    {\n        $this->assertHeader($header);\n        $value = $this->normalizeHeaderValue($value);\n        $normalized = strtolower($header);\n\n        $new = clone $this;\n        if (isset($new->headerNames[$normalized])) {\n            unset($new->headers[$new->headerNames[$normalized]]);\n        }\n        $new->headerNames[$normalized] = $header;\n        $new->headers[$header] = $value;\n\n        return $new;\n    }\n\n    public function withAddedHeader($header, $value): MessageInterface\n    {\n        $this->assertHeader($header);\n        $value = $this->normalizeHeaderValue($value);\n        $normalized = strtolower($header);\n\n        $new = clone $this;\n        if (isset($new->headerNames[$normalized])) {\n            $header = $this->headerNames[$normalized];\n            $new->headers[$header] = array_merge($this->headers[$header], $value);\n        } else {\n            $new->headerNames[$normalized] = $header;\n            $new->headers[$header] = $value;\n        }\n\n        return $new;\n    }\n\n    public function withoutHeader($header): MessageInterface\n    {\n        $normalized = strtolower($header);\n\n        if (!isset($this->headerNames[$normalized])) {\n            return $this;\n        }\n\n        $header = $this->headerNames[$normalized];\n\n        $new = clone $this;\n        unset($new->headers[$header], $new->headerNames[$normalized]);\n\n        return $new;\n    }\n\n    public function getBody(): StreamInterface\n    {\n        if (!$this->stream) {\n            $this->stream = Utils::streamFor('');\n        }\n\n        return $this->stream;\n    }\n\n    public function withBody(StreamInterface $body): MessageInterface\n    {\n        if ($body === $this->stream) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->stream = $body;\n        return $new;\n    }\n\n    /**\n     * @param array<string|int, string|string[]> $headers\n     */\n    private function setHeaders(array $headers): void\n    {\n        $this->headerNames = $this->headers = [];\n        foreach ($headers as $header => $value) {\n            // Numeric array keys are converted to int by PHP.\n            $header = (string) $header;\n\n            $this->assertHeader($header);\n            $value = $this->normalizeHeaderValue($value);\n            $normalized = strtolower($header);\n            if (isset($this->headerNames[$normalized])) {\n                $header = $this->headerNames[$normalized];\n                $this->headers[$header] = array_merge($this->headers[$header], $value);\n            } else {\n                $this->headerNames[$normalized] = $header;\n                $this->headers[$header] = $value;\n            }\n        }\n    }\n\n    /**\n     * @param mixed $value\n     *\n     * @return string[]\n     */\n    private function normalizeHeaderValue($value): array\n    {\n        if (!is_array($value)) {\n            return $this->trimAndValidateHeaderValues([$value]);\n        }\n\n        if (count($value) === 0) {\n            throw new \\InvalidArgumentException('Header value can not be an empty array.');\n        }\n\n        return $this->trimAndValidateHeaderValues($value);\n    }\n\n    /**\n     * Trims whitespace from the header values.\n     *\n     * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field.\n     *\n     * header-field = field-name \":\" OWS field-value OWS\n     * OWS          = *( SP / HTAB )\n     *\n     * @param mixed[] $values Header values\n     *\n     * @return string[] Trimmed header values\n     *\n     * @see https://tools.ietf.org/html/rfc7230#section-3.2.4\n     */\n    private function trimAndValidateHeaderValues(array $values): array\n    {\n        return array_map(function ($value) {\n            if (!is_scalar($value) && null !== $value) {\n                throw new \\InvalidArgumentException(sprintf(\n                    'Header value must be scalar or null but %s provided.',\n                    is_object($value) ? get_class($value) : gettype($value)\n                ));\n            }\n\n            $trimmed = trim((string) $value, \" \\t\");\n            $this->assertValue($trimmed);\n\n            return $trimmed;\n        }, array_values($values));\n    }\n\n    /**\n     * @see https://tools.ietf.org/html/rfc7230#section-3.2\n     *\n     * @param mixed $header\n     */\n    private function assertHeader($header): void\n    {\n        if (!is_string($header)) {\n            throw new \\InvalidArgumentException(sprintf(\n                'Header name must be a string but %s provided.',\n                is_object($header) ? get_class($header) : gettype($header)\n            ));\n        }\n\n        if (! preg_match('/^[a-zA-Z0-9\\'`#$%&*+.^_|~!-]+$/D', $header)) {\n            throw new \\InvalidArgumentException(\n                sprintf('\"%s\" is not valid header name.', $header)\n            );\n        }\n    }\n\n    /**\n     * @see https://tools.ietf.org/html/rfc7230#section-3.2\n     *\n     * field-value    = *( field-content / obs-fold )\n     * field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n     * field-vchar    = VCHAR / obs-text\n     * VCHAR          = %x21-7E\n     * obs-text       = %x80-FF\n     * obs-fold       = CRLF 1*( SP / HTAB )\n     */\n    private function assertValue(string $value): void\n    {\n        // The regular expression intentionally does not support the obs-fold production, because as\n        // per RFC 7230#3.2.4:\n        //\n        // A sender MUST NOT generate a message that includes\n        // line folding (i.e., that has any field-value that contains a match to\n        // the obs-fold rule) unless the message is intended for packaging\n        // within the message/http media type.\n        //\n        // Clients must not send a request with line folding and a server sending folded headers is\n        // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting\n        // folding is not likely to break any legitimate use case.\n        if (! preg_match('/^[\\x20\\x09\\x21-\\x7E\\x80-\\xFF]*$/D', $value)) {\n            throw new \\InvalidArgumentException(\n                sprintf('\"%s\" is not valid header value.', $value)\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/MimeType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nfinal class MimeType\n{\n    private const MIME_TYPES = [\n        '1km' => 'application/vnd.1000minds.decision-model+xml',\n        '3dml' => 'text/vnd.in3d.3dml',\n        '3ds' => 'image/x-3ds',\n        '3g2' => 'video/3gpp2',\n        '3gp' => 'video/3gp',\n        '3gpp' => 'video/3gpp',\n        '3mf' => 'model/3mf',\n        '7z' => 'application/x-7z-compressed',\n        '7zip' => 'application/x-7z-compressed',\n        '123' => 'application/vnd.lotus-1-2-3',\n        'aab' => 'application/x-authorware-bin',\n        'aac' => 'audio/x-acc',\n        'aam' => 'application/x-authorware-map',\n        'aas' => 'application/x-authorware-seg',\n        'abw' => 'application/x-abiword',\n        'ac' => 'application/vnd.nokia.n-gage.ac+xml',\n        'ac3' => 'audio/ac3',\n        'acc' => 'application/vnd.americandynamics.acc',\n        'ace' => 'application/x-ace-compressed',\n        'acu' => 'application/vnd.acucobol',\n        'acutc' => 'application/vnd.acucorp',\n        'adp' => 'audio/adpcm',\n        'aep' => 'application/vnd.audiograph',\n        'afm' => 'application/x-font-type1',\n        'afp' => 'application/vnd.ibm.modcap',\n        'age' => 'application/vnd.age',\n        'ahead' => 'application/vnd.ahead.space',\n        'ai' => 'application/pdf',\n        'aif' => 'audio/x-aiff',\n        'aifc' => 'audio/x-aiff',\n        'aiff' => 'audio/x-aiff',\n        'air' => 'application/vnd.adobe.air-application-installer-package+zip',\n        'ait' => 'application/vnd.dvb.ait',\n        'ami' => 'application/vnd.amiga.ami',\n        'amr' => 'audio/amr',\n        'apk' => 'application/vnd.android.package-archive',\n        'apng' => 'image/apng',\n        'appcache' => 'text/cache-manifest',\n        'application' => 'application/x-ms-application',\n        'apr' => 'application/vnd.lotus-approach',\n        'arc' => 'application/x-freearc',\n        'arj' => 'application/x-arj',\n        'asc' => 'application/pgp-signature',\n        'asf' => 'video/x-ms-asf',\n        'asm' => 'text/x-asm',\n        'aso' => 'application/vnd.accpac.simply.aso',\n        'asx' => 'video/x-ms-asf',\n        'atc' => 'application/vnd.acucorp',\n        'atom' => 'application/atom+xml',\n        'atomcat' => 'application/atomcat+xml',\n        'atomdeleted' => 'application/atomdeleted+xml',\n        'atomsvc' => 'application/atomsvc+xml',\n        'atx' => 'application/vnd.antix.game-component',\n        'au' => 'audio/x-au',\n        'avci' => 'image/avci',\n        'avcs' => 'image/avcs',\n        'avi' => 'video/x-msvideo',\n        'avif' => 'image/avif',\n        'aw' => 'application/applixware',\n        'azf' => 'application/vnd.airzip.filesecure.azf',\n        'azs' => 'application/vnd.airzip.filesecure.azs',\n        'azv' => 'image/vnd.airzip.accelerator.azv',\n        'azw' => 'application/vnd.amazon.ebook',\n        'b16' => 'image/vnd.pco.b16',\n        'bat' => 'application/x-msdownload',\n        'bcpio' => 'application/x-bcpio',\n        'bdf' => 'application/x-font-bdf',\n        'bdm' => 'application/vnd.syncml.dm+wbxml',\n        'bdoc' => 'application/x-bdoc',\n        'bed' => 'application/vnd.realvnc.bed',\n        'bh2' => 'application/vnd.fujitsu.oasysprs',\n        'bin' => 'application/octet-stream',\n        'blb' => 'application/x-blorb',\n        'blorb' => 'application/x-blorb',\n        'bmi' => 'application/vnd.bmi',\n        'bmml' => 'application/vnd.balsamiq.bmml+xml',\n        'bmp' => 'image/bmp',\n        'book' => 'application/vnd.framemaker',\n        'box' => 'application/vnd.previewsystems.box',\n        'boz' => 'application/x-bzip2',\n        'bpk' => 'application/octet-stream',\n        'bpmn' => 'application/octet-stream',\n        'bsp' => 'model/vnd.valve.source.compiled-map',\n        'btif' => 'image/prs.btif',\n        'buffer' => 'application/octet-stream',\n        'bz' => 'application/x-bzip',\n        'bz2' => 'application/x-bzip2',\n        'c' => 'text/x-c',\n        'c4d' => 'application/vnd.clonk.c4group',\n        'c4f' => 'application/vnd.clonk.c4group',\n        'c4g' => 'application/vnd.clonk.c4group',\n        'c4p' => 'application/vnd.clonk.c4group',\n        'c4u' => 'application/vnd.clonk.c4group',\n        'c11amc' => 'application/vnd.cluetrust.cartomobile-config',\n        'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',\n        'cab' => 'application/vnd.ms-cab-compressed',\n        'caf' => 'audio/x-caf',\n        'cap' => 'application/vnd.tcpdump.pcap',\n        'car' => 'application/vnd.curl.car',\n        'cat' => 'application/vnd.ms-pki.seccat',\n        'cb7' => 'application/x-cbr',\n        'cba' => 'application/x-cbr',\n        'cbr' => 'application/x-cbr',\n        'cbt' => 'application/x-cbr',\n        'cbz' => 'application/x-cbr',\n        'cc' => 'text/x-c',\n        'cco' => 'application/x-cocoa',\n        'cct' => 'application/x-director',\n        'ccxml' => 'application/ccxml+xml',\n        'cdbcmsg' => 'application/vnd.contact.cmsg',\n        'cdf' => 'application/x-netcdf',\n        'cdfx' => 'application/cdfx+xml',\n        'cdkey' => 'application/vnd.mediastation.cdkey',\n        'cdmia' => 'application/cdmi-capability',\n        'cdmic' => 'application/cdmi-container',\n        'cdmid' => 'application/cdmi-domain',\n        'cdmio' => 'application/cdmi-object',\n        'cdmiq' => 'application/cdmi-queue',\n        'cdr' => 'application/cdr',\n        'cdx' => 'chemical/x-cdx',\n        'cdxml' => 'application/vnd.chemdraw+xml',\n        'cdy' => 'application/vnd.cinderella',\n        'cer' => 'application/pkix-cert',\n        'cfs' => 'application/x-cfs-compressed',\n        'cgm' => 'image/cgm',\n        'chat' => 'application/x-chat',\n        'chm' => 'application/vnd.ms-htmlhelp',\n        'chrt' => 'application/vnd.kde.kchart',\n        'cif' => 'chemical/x-cif',\n        'cii' => 'application/vnd.anser-web-certificate-issue-initiation',\n        'cil' => 'application/vnd.ms-artgalry',\n        'cjs' => 'application/node',\n        'cla' => 'application/vnd.claymore',\n        'class' => 'application/octet-stream',\n        'clkk' => 'application/vnd.crick.clicker.keyboard',\n        'clkp' => 'application/vnd.crick.clicker.palette',\n        'clkt' => 'application/vnd.crick.clicker.template',\n        'clkw' => 'application/vnd.crick.clicker.wordbank',\n        'clkx' => 'application/vnd.crick.clicker',\n        'clp' => 'application/x-msclip',\n        'cmc' => 'application/vnd.cosmocaller',\n        'cmdf' => 'chemical/x-cmdf',\n        'cml' => 'chemical/x-cml',\n        'cmp' => 'application/vnd.yellowriver-custom-menu',\n        'cmx' => 'image/x-cmx',\n        'cod' => 'application/vnd.rim.cod',\n        'coffee' => 'text/coffeescript',\n        'com' => 'application/x-msdownload',\n        'conf' => 'text/plain',\n        'cpio' => 'application/x-cpio',\n        'cpl' => 'application/cpl+xml',\n        'cpp' => 'text/x-c',\n        'cpt' => 'application/mac-compactpro',\n        'crd' => 'application/x-mscardfile',\n        'crl' => 'application/pkix-crl',\n        'crt' => 'application/x-x509-ca-cert',\n        'crx' => 'application/x-chrome-extension',\n        'cryptonote' => 'application/vnd.rig.cryptonote',\n        'csh' => 'application/x-csh',\n        'csl' => 'application/vnd.citationstyles.style+xml',\n        'csml' => 'chemical/x-csml',\n        'csp' => 'application/vnd.commonspace',\n        'csr' => 'application/octet-stream',\n        'css' => 'text/css',\n        'cst' => 'application/x-director',\n        'csv' => 'text/csv',\n        'cu' => 'application/cu-seeme',\n        'curl' => 'text/vnd.curl',\n        'cww' => 'application/prs.cww',\n        'cxt' => 'application/x-director',\n        'cxx' => 'text/x-c',\n        'dae' => 'model/vnd.collada+xml',\n        'daf' => 'application/vnd.mobius.daf',\n        'dart' => 'application/vnd.dart',\n        'dataless' => 'application/vnd.fdsn.seed',\n        'davmount' => 'application/davmount+xml',\n        'dbf' => 'application/vnd.dbf',\n        'dbk' => 'application/docbook+xml',\n        'dcr' => 'application/x-director',\n        'dcurl' => 'text/vnd.curl.dcurl',\n        'dd2' => 'application/vnd.oma.dd2+xml',\n        'ddd' => 'application/vnd.fujixerox.ddd',\n        'ddf' => 'application/vnd.syncml.dmddf+xml',\n        'dds' => 'image/vnd.ms-dds',\n        'deb' => 'application/x-debian-package',\n        'def' => 'text/plain',\n        'deploy' => 'application/octet-stream',\n        'der' => 'application/x-x509-ca-cert',\n        'dfac' => 'application/vnd.dreamfactory',\n        'dgc' => 'application/x-dgc-compressed',\n        'dic' => 'text/x-c',\n        'dir' => 'application/x-director',\n        'dis' => 'application/vnd.mobius.dis',\n        'disposition-notification' => 'message/disposition-notification',\n        'dist' => 'application/octet-stream',\n        'distz' => 'application/octet-stream',\n        'djv' => 'image/vnd.djvu',\n        'djvu' => 'image/vnd.djvu',\n        'dll' => 'application/octet-stream',\n        'dmg' => 'application/x-apple-diskimage',\n        'dmn' => 'application/octet-stream',\n        'dmp' => 'application/vnd.tcpdump.pcap',\n        'dms' => 'application/octet-stream',\n        'dna' => 'application/vnd.dna',\n        'doc' => 'application/msword',\n        'docm' => 'application/vnd.ms-word.template.macroEnabled.12',\n        'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n        'dot' => 'application/msword',\n        'dotm' => 'application/vnd.ms-word.template.macroEnabled.12',\n        'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n        'dp' => 'application/vnd.osgi.dp',\n        'dpg' => 'application/vnd.dpgraph',\n        'dra' => 'audio/vnd.dra',\n        'drle' => 'image/dicom-rle',\n        'dsc' => 'text/prs.lines.tag',\n        'dssc' => 'application/dssc+der',\n        'dtb' => 'application/x-dtbook+xml',\n        'dtd' => 'application/xml-dtd',\n        'dts' => 'audio/vnd.dts',\n        'dtshd' => 'audio/vnd.dts.hd',\n        'dump' => 'application/octet-stream',\n        'dvb' => 'video/vnd.dvb.file',\n        'dvi' => 'application/x-dvi',\n        'dwd' => 'application/atsc-dwd+xml',\n        'dwf' => 'model/vnd.dwf',\n        'dwg' => 'image/vnd.dwg',\n        'dxf' => 'image/vnd.dxf',\n        'dxp' => 'application/vnd.spotfire.dxp',\n        'dxr' => 'application/x-director',\n        'ear' => 'application/java-archive',\n        'ecelp4800' => 'audio/vnd.nuera.ecelp4800',\n        'ecelp7470' => 'audio/vnd.nuera.ecelp7470',\n        'ecelp9600' => 'audio/vnd.nuera.ecelp9600',\n        'ecma' => 'application/ecmascript',\n        'edm' => 'application/vnd.novadigm.edm',\n        'edx' => 'application/vnd.novadigm.edx',\n        'efif' => 'application/vnd.picsel',\n        'ei6' => 'application/vnd.pg.osasli',\n        'elc' => 'application/octet-stream',\n        'emf' => 'image/emf',\n        'eml' => 'message/rfc822',\n        'emma' => 'application/emma+xml',\n        'emotionml' => 'application/emotionml+xml',\n        'emz' => 'application/x-msmetafile',\n        'eol' => 'audio/vnd.digital-winds',\n        'eot' => 'application/vnd.ms-fontobject',\n        'eps' => 'application/postscript',\n        'epub' => 'application/epub+zip',\n        'es' => 'application/ecmascript',\n        'es3' => 'application/vnd.eszigno3+xml',\n        'esa' => 'application/vnd.osgi.subsystem',\n        'esf' => 'application/vnd.epson.esf',\n        'et3' => 'application/vnd.eszigno3+xml',\n        'etx' => 'text/x-setext',\n        'eva' => 'application/x-eva',\n        'evy' => 'application/x-envoy',\n        'exe' => 'application/octet-stream',\n        'exi' => 'application/exi',\n        'exp' => 'application/express',\n        'exr' => 'image/aces',\n        'ext' => 'application/vnd.novadigm.ext',\n        'ez' => 'application/andrew-inset',\n        'ez2' => 'application/vnd.ezpix-album',\n        'ez3' => 'application/vnd.ezpix-package',\n        'f' => 'text/x-fortran',\n        'f4v' => 'video/mp4',\n        'f77' => 'text/x-fortran',\n        'f90' => 'text/x-fortran',\n        'fbs' => 'image/vnd.fastbidsheet',\n        'fcdt' => 'application/vnd.adobe.formscentral.fcdt',\n        'fcs' => 'application/vnd.isac.fcs',\n        'fdf' => 'application/vnd.fdf',\n        'fdt' => 'application/fdt+xml',\n        'fe_launch' => 'application/vnd.denovo.fcselayout-link',\n        'fg5' => 'application/vnd.fujitsu.oasysgp',\n        'fgd' => 'application/x-director',\n        'fh' => 'image/x-freehand',\n        'fh4' => 'image/x-freehand',\n        'fh5' => 'image/x-freehand',\n        'fh7' => 'image/x-freehand',\n        'fhc' => 'image/x-freehand',\n        'fig' => 'application/x-xfig',\n        'fits' => 'image/fits',\n        'flac' => 'audio/x-flac',\n        'fli' => 'video/x-fli',\n        'flo' => 'application/vnd.micrografx.flo',\n        'flv' => 'video/x-flv',\n        'flw' => 'application/vnd.kde.kivio',\n        'flx' => 'text/vnd.fmi.flexstor',\n        'fly' => 'text/vnd.fly',\n        'fm' => 'application/vnd.framemaker',\n        'fnc' => 'application/vnd.frogans.fnc',\n        'fo' => 'application/vnd.software602.filler.form+xml',\n        'for' => 'text/x-fortran',\n        'fpx' => 'image/vnd.fpx',\n        'frame' => 'application/vnd.framemaker',\n        'fsc' => 'application/vnd.fsc.weblaunch',\n        'fst' => 'image/vnd.fst',\n        'ftc' => 'application/vnd.fluxtime.clip',\n        'fti' => 'application/vnd.anser-web-funds-transfer-initiation',\n        'fvt' => 'video/vnd.fvt',\n        'fxp' => 'application/vnd.adobe.fxp',\n        'fxpl' => 'application/vnd.adobe.fxp',\n        'fzs' => 'application/vnd.fuzzysheet',\n        'g2w' => 'application/vnd.geoplan',\n        'g3' => 'image/g3fax',\n        'g3w' => 'application/vnd.geospace',\n        'gac' => 'application/vnd.groove-account',\n        'gam' => 'application/x-tads',\n        'gbr' => 'application/rpki-ghostbusters',\n        'gca' => 'application/x-gca-compressed',\n        'gdl' => 'model/vnd.gdl',\n        'gdoc' => 'application/vnd.google-apps.document',\n        'ged' => 'text/vnd.familysearch.gedcom',\n        'geo' => 'application/vnd.dynageo',\n        'geojson' => 'application/geo+json',\n        'gex' => 'application/vnd.geometry-explorer',\n        'ggb' => 'application/vnd.geogebra.file',\n        'ggt' => 'application/vnd.geogebra.tool',\n        'ghf' => 'application/vnd.groove-help',\n        'gif' => 'image/gif',\n        'gim' => 'application/vnd.groove-identity-message',\n        'glb' => 'model/gltf-binary',\n        'gltf' => 'model/gltf+json',\n        'gml' => 'application/gml+xml',\n        'gmx' => 'application/vnd.gmx',\n        'gnumeric' => 'application/x-gnumeric',\n        'gpg' => 'application/gpg-keys',\n        'gph' => 'application/vnd.flographit',\n        'gpx' => 'application/gpx+xml',\n        'gqf' => 'application/vnd.grafeq',\n        'gqs' => 'application/vnd.grafeq',\n        'gram' => 'application/srgs',\n        'gramps' => 'application/x-gramps-xml',\n        'gre' => 'application/vnd.geometry-explorer',\n        'grv' => 'application/vnd.groove-injector',\n        'grxml' => 'application/srgs+xml',\n        'gsf' => 'application/x-font-ghostscript',\n        'gsheet' => 'application/vnd.google-apps.spreadsheet',\n        'gslides' => 'application/vnd.google-apps.presentation',\n        'gtar' => 'application/x-gtar',\n        'gtm' => 'application/vnd.groove-tool-message',\n        'gtw' => 'model/vnd.gtw',\n        'gv' => 'text/vnd.graphviz',\n        'gxf' => 'application/gxf',\n        'gxt' => 'application/vnd.geonext',\n        'gz' => 'application/gzip',\n        'gzip' => 'application/gzip',\n        'h' => 'text/x-c',\n        'h261' => 'video/h261',\n        'h263' => 'video/h263',\n        'h264' => 'video/h264',\n        'hal' => 'application/vnd.hal+xml',\n        'hbci' => 'application/vnd.hbci',\n        'hbs' => 'text/x-handlebars-template',\n        'hdd' => 'application/x-virtualbox-hdd',\n        'hdf' => 'application/x-hdf',\n        'heic' => 'image/heic',\n        'heics' => 'image/heic-sequence',\n        'heif' => 'image/heif',\n        'heifs' => 'image/heif-sequence',\n        'hej2' => 'image/hej2k',\n        'held' => 'application/atsc-held+xml',\n        'hh' => 'text/x-c',\n        'hjson' => 'application/hjson',\n        'hlp' => 'application/winhlp',\n        'hpgl' => 'application/vnd.hp-hpgl',\n        'hpid' => 'application/vnd.hp-hpid',\n        'hps' => 'application/vnd.hp-hps',\n        'hqx' => 'application/mac-binhex40',\n        'hsj2' => 'image/hsj2',\n        'htc' => 'text/x-component',\n        'htke' => 'application/vnd.kenameaapp',\n        'htm' => 'text/html',\n        'html' => 'text/html',\n        'hvd' => 'application/vnd.yamaha.hv-dic',\n        'hvp' => 'application/vnd.yamaha.hv-voice',\n        'hvs' => 'application/vnd.yamaha.hv-script',\n        'i2g' => 'application/vnd.intergeo',\n        'icc' => 'application/vnd.iccprofile',\n        'ice' => 'x-conference/x-cooltalk',\n        'icm' => 'application/vnd.iccprofile',\n        'ico' => 'image/x-icon',\n        'ics' => 'text/calendar',\n        'ief' => 'image/ief',\n        'ifb' => 'text/calendar',\n        'ifm' => 'application/vnd.shana.informed.formdata',\n        'iges' => 'model/iges',\n        'igl' => 'application/vnd.igloader',\n        'igm' => 'application/vnd.insors.igm',\n        'igs' => 'model/iges',\n        'igx' => 'application/vnd.micrografx.igx',\n        'iif' => 'application/vnd.shana.informed.interchange',\n        'img' => 'application/octet-stream',\n        'imp' => 'application/vnd.accpac.simply.imp',\n        'ims' => 'application/vnd.ms-ims',\n        'in' => 'text/plain',\n        'ini' => 'text/plain',\n        'ink' => 'application/inkml+xml',\n        'inkml' => 'application/inkml+xml',\n        'install' => 'application/x-install-instructions',\n        'iota' => 'application/vnd.astraea-software.iota',\n        'ipfix' => 'application/ipfix',\n        'ipk' => 'application/vnd.shana.informed.package',\n        'irm' => 'application/vnd.ibm.rights-management',\n        'irp' => 'application/vnd.irepository.package+xml',\n        'iso' => 'application/x-iso9660-image',\n        'itp' => 'application/vnd.shana.informed.formtemplate',\n        'its' => 'application/its+xml',\n        'ivp' => 'application/vnd.immervision-ivp',\n        'ivu' => 'application/vnd.immervision-ivu',\n        'jad' => 'text/vnd.sun.j2me.app-descriptor',\n        'jade' => 'text/jade',\n        'jam' => 'application/vnd.jam',\n        'jar' => 'application/java-archive',\n        'jardiff' => 'application/x-java-archive-diff',\n        'java' => 'text/x-java-source',\n        'jhc' => 'image/jphc',\n        'jisp' => 'application/vnd.jisp',\n        'jls' => 'image/jls',\n        'jlt' => 'application/vnd.hp-jlyt',\n        'jng' => 'image/x-jng',\n        'jnlp' => 'application/x-java-jnlp-file',\n        'joda' => 'application/vnd.joost.joda-archive',\n        'jp2' => 'image/jp2',\n        'jpe' => 'image/jpeg',\n        'jpeg' => 'image/jpeg',\n        'jpf' => 'image/jpx',\n        'jpg' => 'image/jpeg',\n        'jpg2' => 'image/jp2',\n        'jpgm' => 'video/jpm',\n        'jpgv' => 'video/jpeg',\n        'jph' => 'image/jph',\n        'jpm' => 'video/jpm',\n        'jpx' => 'image/jpx',\n        'js' => 'application/javascript',\n        'json' => 'application/json',\n        'json5' => 'application/json5',\n        'jsonld' => 'application/ld+json',\n        'jsonml' => 'application/jsonml+json',\n        'jsx' => 'text/jsx',\n        'jxr' => 'image/jxr',\n        'jxra' => 'image/jxra',\n        'jxrs' => 'image/jxrs',\n        'jxs' => 'image/jxs',\n        'jxsc' => 'image/jxsc',\n        'jxsi' => 'image/jxsi',\n        'jxss' => 'image/jxss',\n        'kar' => 'audio/midi',\n        'karbon' => 'application/vnd.kde.karbon',\n        'kdb' => 'application/octet-stream',\n        'kdbx' => 'application/x-keepass2',\n        'key' => 'application/x-iwork-keynote-sffkey',\n        'kfo' => 'application/vnd.kde.kformula',\n        'kia' => 'application/vnd.kidspiration',\n        'kml' => 'application/vnd.google-earth.kml+xml',\n        'kmz' => 'application/vnd.google-earth.kmz',\n        'kne' => 'application/vnd.kinar',\n        'knp' => 'application/vnd.kinar',\n        'kon' => 'application/vnd.kde.kontour',\n        'kpr' => 'application/vnd.kde.kpresenter',\n        'kpt' => 'application/vnd.kde.kpresenter',\n        'kpxx' => 'application/vnd.ds-keypoint',\n        'ksp' => 'application/vnd.kde.kspread',\n        'ktr' => 'application/vnd.kahootz',\n        'ktx' => 'image/ktx',\n        'ktx2' => 'image/ktx2',\n        'ktz' => 'application/vnd.kahootz',\n        'kwd' => 'application/vnd.kde.kword',\n        'kwt' => 'application/vnd.kde.kword',\n        'lasxml' => 'application/vnd.las.las+xml',\n        'latex' => 'application/x-latex',\n        'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',\n        'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',\n        'les' => 'application/vnd.hhe.lesson-player',\n        'less' => 'text/less',\n        'lgr' => 'application/lgr+xml',\n        'lha' => 'application/octet-stream',\n        'link66' => 'application/vnd.route66.link66+xml',\n        'list' => 'text/plain',\n        'list3820' => 'application/vnd.ibm.modcap',\n        'listafp' => 'application/vnd.ibm.modcap',\n        'litcoffee' => 'text/coffeescript',\n        'lnk' => 'application/x-ms-shortcut',\n        'log' => 'text/plain',\n        'lostxml' => 'application/lost+xml',\n        'lrf' => 'application/octet-stream',\n        'lrm' => 'application/vnd.ms-lrm',\n        'ltf' => 'application/vnd.frogans.ltf',\n        'lua' => 'text/x-lua',\n        'luac' => 'application/x-lua-bytecode',\n        'lvp' => 'audio/vnd.lucent.voice',\n        'lwp' => 'application/vnd.lotus-wordpro',\n        'lzh' => 'application/octet-stream',\n        'm1v' => 'video/mpeg',\n        'm2a' => 'audio/mpeg',\n        'm2v' => 'video/mpeg',\n        'm3a' => 'audio/mpeg',\n        'm3u' => 'text/plain',\n        'm3u8' => 'application/vnd.apple.mpegurl',\n        'm4a' => 'audio/x-m4a',\n        'm4p' => 'application/mp4',\n        'm4s' => 'video/iso.segment',\n        'm4u' => 'application/vnd.mpegurl',\n        'm4v' => 'video/x-m4v',\n        'm13' => 'application/x-msmediaview',\n        'm14' => 'application/x-msmediaview',\n        'm21' => 'application/mp21',\n        'ma' => 'application/mathematica',\n        'mads' => 'application/mads+xml',\n        'maei' => 'application/mmt-aei+xml',\n        'mag' => 'application/vnd.ecowin.chart',\n        'maker' => 'application/vnd.framemaker',\n        'man' => 'text/troff',\n        'manifest' => 'text/cache-manifest',\n        'map' => 'application/json',\n        'mar' => 'application/octet-stream',\n        'markdown' => 'text/markdown',\n        'mathml' => 'application/mathml+xml',\n        'mb' => 'application/mathematica',\n        'mbk' => 'application/vnd.mobius.mbk',\n        'mbox' => 'application/mbox',\n        'mc1' => 'application/vnd.medcalcdata',\n        'mcd' => 'application/vnd.mcd',\n        'mcurl' => 'text/vnd.curl.mcurl',\n        'md' => 'text/markdown',\n        'mdb' => 'application/x-msaccess',\n        'mdi' => 'image/vnd.ms-modi',\n        'mdx' => 'text/mdx',\n        'me' => 'text/troff',\n        'mesh' => 'model/mesh',\n        'meta4' => 'application/metalink4+xml',\n        'metalink' => 'application/metalink+xml',\n        'mets' => 'application/mets+xml',\n        'mfm' => 'application/vnd.mfmp',\n        'mft' => 'application/rpki-manifest',\n        'mgp' => 'application/vnd.osgeo.mapguide.package',\n        'mgz' => 'application/vnd.proteus.magazine',\n        'mid' => 'audio/midi',\n        'midi' => 'audio/midi',\n        'mie' => 'application/x-mie',\n        'mif' => 'application/vnd.mif',\n        'mime' => 'message/rfc822',\n        'mj2' => 'video/mj2',\n        'mjp2' => 'video/mj2',\n        'mjs' => 'application/javascript',\n        'mk3d' => 'video/x-matroska',\n        'mka' => 'audio/x-matroska',\n        'mkd' => 'text/x-markdown',\n        'mks' => 'video/x-matroska',\n        'mkv' => 'video/x-matroska',\n        'mlp' => 'application/vnd.dolby.mlp',\n        'mmd' => 'application/vnd.chipnuts.karaoke-mmd',\n        'mmf' => 'application/vnd.smaf',\n        'mml' => 'text/mathml',\n        'mmr' => 'image/vnd.fujixerox.edmics-mmr',\n        'mng' => 'video/x-mng',\n        'mny' => 'application/x-msmoney',\n        'mobi' => 'application/x-mobipocket-ebook',\n        'mods' => 'application/mods+xml',\n        'mov' => 'video/quicktime',\n        'movie' => 'video/x-sgi-movie',\n        'mp2' => 'audio/mpeg',\n        'mp2a' => 'audio/mpeg',\n        'mp3' => 'audio/mpeg',\n        'mp4' => 'video/mp4',\n        'mp4a' => 'audio/mp4',\n        'mp4s' => 'application/mp4',\n        'mp4v' => 'video/mp4',\n        'mp21' => 'application/mp21',\n        'mpc' => 'application/vnd.mophun.certificate',\n        'mpd' => 'application/dash+xml',\n        'mpe' => 'video/mpeg',\n        'mpeg' => 'video/mpeg',\n        'mpf' => 'application/media-policy-dataset+xml',\n        'mpg' => 'video/mpeg',\n        'mpg4' => 'video/mp4',\n        'mpga' => 'audio/mpeg',\n        'mpkg' => 'application/vnd.apple.installer+xml',\n        'mpm' => 'application/vnd.blueice.multipass',\n        'mpn' => 'application/vnd.mophun.application',\n        'mpp' => 'application/vnd.ms-project',\n        'mpt' => 'application/vnd.ms-project',\n        'mpy' => 'application/vnd.ibm.minipay',\n        'mqy' => 'application/vnd.mobius.mqy',\n        'mrc' => 'application/marc',\n        'mrcx' => 'application/marcxml+xml',\n        'ms' => 'text/troff',\n        'mscml' => 'application/mediaservercontrol+xml',\n        'mseed' => 'application/vnd.fdsn.mseed',\n        'mseq' => 'application/vnd.mseq',\n        'msf' => 'application/vnd.epson.msf',\n        'msg' => 'application/vnd.ms-outlook',\n        'msh' => 'model/mesh',\n        'msi' => 'application/x-msdownload',\n        'msl' => 'application/vnd.mobius.msl',\n        'msm' => 'application/octet-stream',\n        'msp' => 'application/octet-stream',\n        'msty' => 'application/vnd.muvee.style',\n        'mtl' => 'model/mtl',\n        'mts' => 'model/vnd.mts',\n        'mus' => 'application/vnd.musician',\n        'musd' => 'application/mmt-usd+xml',\n        'musicxml' => 'application/vnd.recordare.musicxml+xml',\n        'mvb' => 'application/x-msmediaview',\n        'mvt' => 'application/vnd.mapbox-vector-tile',\n        'mwf' => 'application/vnd.mfer',\n        'mxf' => 'application/mxf',\n        'mxl' => 'application/vnd.recordare.musicxml',\n        'mxmf' => 'audio/mobile-xmf',\n        'mxml' => 'application/xv+xml',\n        'mxs' => 'application/vnd.triscape.mxs',\n        'mxu' => 'video/vnd.mpegurl',\n        'n-gage' => 'application/vnd.nokia.n-gage.symbian.install',\n        'n3' => 'text/n3',\n        'nb' => 'application/mathematica',\n        'nbp' => 'application/vnd.wolfram.player',\n        'nc' => 'application/x-netcdf',\n        'ncx' => 'application/x-dtbncx+xml',\n        'nfo' => 'text/x-nfo',\n        'ngdat' => 'application/vnd.nokia.n-gage.data',\n        'nitf' => 'application/vnd.nitf',\n        'nlu' => 'application/vnd.neurolanguage.nlu',\n        'nml' => 'application/vnd.enliven',\n        'nnd' => 'application/vnd.noblenet-directory',\n        'nns' => 'application/vnd.noblenet-sealer',\n        'nnw' => 'application/vnd.noblenet-web',\n        'npx' => 'image/vnd.net-fpx',\n        'nq' => 'application/n-quads',\n        'nsc' => 'application/x-conference',\n        'nsf' => 'application/vnd.lotus-notes',\n        'nt' => 'application/n-triples',\n        'ntf' => 'application/vnd.nitf',\n        'numbers' => 'application/x-iwork-numbers-sffnumbers',\n        'nzb' => 'application/x-nzb',\n        'oa2' => 'application/vnd.fujitsu.oasys2',\n        'oa3' => 'application/vnd.fujitsu.oasys3',\n        'oas' => 'application/vnd.fujitsu.oasys',\n        'obd' => 'application/x-msbinder',\n        'obgx' => 'application/vnd.openblox.game+xml',\n        'obj' => 'model/obj',\n        'oda' => 'application/oda',\n        'odb' => 'application/vnd.oasis.opendocument.database',\n        'odc' => 'application/vnd.oasis.opendocument.chart',\n        'odf' => 'application/vnd.oasis.opendocument.formula',\n        'odft' => 'application/vnd.oasis.opendocument.formula-template',\n        'odg' => 'application/vnd.oasis.opendocument.graphics',\n        'odi' => 'application/vnd.oasis.opendocument.image',\n        'odm' => 'application/vnd.oasis.opendocument.text-master',\n        'odp' => 'application/vnd.oasis.opendocument.presentation',\n        'ods' => 'application/vnd.oasis.opendocument.spreadsheet',\n        'odt' => 'application/vnd.oasis.opendocument.text',\n        'oga' => 'audio/ogg',\n        'ogex' => 'model/vnd.opengex',\n        'ogg' => 'audio/ogg',\n        'ogv' => 'video/ogg',\n        'ogx' => 'application/ogg',\n        'omdoc' => 'application/omdoc+xml',\n        'onepkg' => 'application/onenote',\n        'onetmp' => 'application/onenote',\n        'onetoc' => 'application/onenote',\n        'onetoc2' => 'application/onenote',\n        'opf' => 'application/oebps-package+xml',\n        'opml' => 'text/x-opml',\n        'oprc' => 'application/vnd.palm',\n        'opus' => 'audio/ogg',\n        'org' => 'text/x-org',\n        'osf' => 'application/vnd.yamaha.openscoreformat',\n        'osfpvg' => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',\n        'osm' => 'application/vnd.openstreetmap.data+xml',\n        'otc' => 'application/vnd.oasis.opendocument.chart-template',\n        'otf' => 'font/otf',\n        'otg' => 'application/vnd.oasis.opendocument.graphics-template',\n        'oth' => 'application/vnd.oasis.opendocument.text-web',\n        'oti' => 'application/vnd.oasis.opendocument.image-template',\n        'otp' => 'application/vnd.oasis.opendocument.presentation-template',\n        'ots' => 'application/vnd.oasis.opendocument.spreadsheet-template',\n        'ott' => 'application/vnd.oasis.opendocument.text-template',\n        'ova' => 'application/x-virtualbox-ova',\n        'ovf' => 'application/x-virtualbox-ovf',\n        'owl' => 'application/rdf+xml',\n        'oxps' => 'application/oxps',\n        'oxt' => 'application/vnd.openofficeorg.extension',\n        'p' => 'text/x-pascal',\n        'p7a' => 'application/x-pkcs7-signature',\n        'p7b' => 'application/x-pkcs7-certificates',\n        'p7c' => 'application/pkcs7-mime',\n        'p7m' => 'application/pkcs7-mime',\n        'p7r' => 'application/x-pkcs7-certreqresp',\n        'p7s' => 'application/pkcs7-signature',\n        'p8' => 'application/pkcs8',\n        'p10' => 'application/x-pkcs10',\n        'p12' => 'application/x-pkcs12',\n        'pac' => 'application/x-ns-proxy-autoconfig',\n        'pages' => 'application/x-iwork-pages-sffpages',\n        'pas' => 'text/x-pascal',\n        'paw' => 'application/vnd.pawaafile',\n        'pbd' => 'application/vnd.powerbuilder6',\n        'pbm' => 'image/x-portable-bitmap',\n        'pcap' => 'application/vnd.tcpdump.pcap',\n        'pcf' => 'application/x-font-pcf',\n        'pcl' => 'application/vnd.hp-pcl',\n        'pclxl' => 'application/vnd.hp-pclxl',\n        'pct' => 'image/x-pict',\n        'pcurl' => 'application/vnd.curl.pcurl',\n        'pcx' => 'image/x-pcx',\n        'pdb' => 'application/x-pilot',\n        'pde' => 'text/x-processing',\n        'pdf' => 'application/pdf',\n        'pem' => 'application/x-x509-user-cert',\n        'pfa' => 'application/x-font-type1',\n        'pfb' => 'application/x-font-type1',\n        'pfm' => 'application/x-font-type1',\n        'pfr' => 'application/font-tdpfr',\n        'pfx' => 'application/x-pkcs12',\n        'pgm' => 'image/x-portable-graymap',\n        'pgn' => 'application/x-chess-pgn',\n        'pgp' => 'application/pgp',\n        'phar' => 'application/octet-stream',\n        'php' => 'application/x-httpd-php',\n        'php3' => 'application/x-httpd-php',\n        'php4' => 'application/x-httpd-php',\n        'phps' => 'application/x-httpd-php-source',\n        'phtml' => 'application/x-httpd-php',\n        'pic' => 'image/x-pict',\n        'pkg' => 'application/octet-stream',\n        'pki' => 'application/pkixcmp',\n        'pkipath' => 'application/pkix-pkipath',\n        'pkpass' => 'application/vnd.apple.pkpass',\n        'pl' => 'application/x-perl',\n        'plb' => 'application/vnd.3gpp.pic-bw-large',\n        'plc' => 'application/vnd.mobius.plc',\n        'plf' => 'application/vnd.pocketlearn',\n        'pls' => 'application/pls+xml',\n        'pm' => 'application/x-perl',\n        'pml' => 'application/vnd.ctc-posml',\n        'png' => 'image/png',\n        'pnm' => 'image/x-portable-anymap',\n        'portpkg' => 'application/vnd.macports.portpkg',\n        'pot' => 'application/vnd.ms-powerpoint',\n        'potm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n        'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',\n        'ppa' => 'application/vnd.ms-powerpoint',\n        'ppam' => 'application/vnd.ms-powerpoint.addin.macroEnabled.12',\n        'ppd' => 'application/vnd.cups-ppd',\n        'ppm' => 'image/x-portable-pixmap',\n        'pps' => 'application/vnd.ms-powerpoint',\n        'ppsm' => 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12',\n        'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n        'ppt' => 'application/powerpoint',\n        'pptm' => 'application/vnd.ms-powerpoint.presentation.macroEnabled.12',\n        'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n        'pqa' => 'application/vnd.palm',\n        'prc' => 'model/prc',\n        'pre' => 'application/vnd.lotus-freelance',\n        'prf' => 'application/pics-rules',\n        'provx' => 'application/provenance+xml',\n        'ps' => 'application/postscript',\n        'psb' => 'application/vnd.3gpp.pic-bw-small',\n        'psd' => 'application/x-photoshop',\n        'psf' => 'application/x-font-linux-psf',\n        'pskcxml' => 'application/pskc+xml',\n        'pti' => 'image/prs.pti',\n        'ptid' => 'application/vnd.pvi.ptid1',\n        'pub' => 'application/x-mspublisher',\n        'pvb' => 'application/vnd.3gpp.pic-bw-var',\n        'pwn' => 'application/vnd.3m.post-it-notes',\n        'pya' => 'audio/vnd.ms-playready.media.pya',\n        'pyv' => 'video/vnd.ms-playready.media.pyv',\n        'qam' => 'application/vnd.epson.quickanime',\n        'qbo' => 'application/vnd.intu.qbo',\n        'qfx' => 'application/vnd.intu.qfx',\n        'qps' => 'application/vnd.publishare-delta-tree',\n        'qt' => 'video/quicktime',\n        'qwd' => 'application/vnd.quark.quarkxpress',\n        'qwt' => 'application/vnd.quark.quarkxpress',\n        'qxb' => 'application/vnd.quark.quarkxpress',\n        'qxd' => 'application/vnd.quark.quarkxpress',\n        'qxl' => 'application/vnd.quark.quarkxpress',\n        'qxt' => 'application/vnd.quark.quarkxpress',\n        'ra' => 'audio/x-realaudio',\n        'ram' => 'audio/x-pn-realaudio',\n        'raml' => 'application/raml+yaml',\n        'rapd' => 'application/route-apd+xml',\n        'rar' => 'application/x-rar',\n        'ras' => 'image/x-cmu-raster',\n        'rcprofile' => 'application/vnd.ipunplugged.rcprofile',\n        'rdf' => 'application/rdf+xml',\n        'rdz' => 'application/vnd.data-vision.rdz',\n        'relo' => 'application/p2p-overlay+xml',\n        'rep' => 'application/vnd.businessobjects',\n        'res' => 'application/x-dtbresource+xml',\n        'rgb' => 'image/x-rgb',\n        'rif' => 'application/reginfo+xml',\n        'rip' => 'audio/vnd.rip',\n        'ris' => 'application/x-research-info-systems',\n        'rl' => 'application/resource-lists+xml',\n        'rlc' => 'image/vnd.fujixerox.edmics-rlc',\n        'rld' => 'application/resource-lists-diff+xml',\n        'rm' => 'audio/x-pn-realaudio',\n        'rmi' => 'audio/midi',\n        'rmp' => 'audio/x-pn-realaudio-plugin',\n        'rms' => 'application/vnd.jcp.javame.midlet-rms',\n        'rmvb' => 'application/vnd.rn-realmedia-vbr',\n        'rnc' => 'application/relax-ng-compact-syntax',\n        'rng' => 'application/xml',\n        'roa' => 'application/rpki-roa',\n        'roff' => 'text/troff',\n        'rp9' => 'application/vnd.cloanto.rp9',\n        'rpm' => 'audio/x-pn-realaudio-plugin',\n        'rpss' => 'application/vnd.nokia.radio-presets',\n        'rpst' => 'application/vnd.nokia.radio-preset',\n        'rq' => 'application/sparql-query',\n        'rs' => 'application/rls-services+xml',\n        'rsa' => 'application/x-pkcs7',\n        'rsat' => 'application/atsc-rsat+xml',\n        'rsd' => 'application/rsd+xml',\n        'rsheet' => 'application/urc-ressheet+xml',\n        'rss' => 'application/rss+xml',\n        'rtf' => 'text/rtf',\n        'rtx' => 'text/richtext',\n        'run' => 'application/x-makeself',\n        'rusd' => 'application/route-usd+xml',\n        'rv' => 'video/vnd.rn-realvideo',\n        's' => 'text/x-asm',\n        's3m' => 'audio/s3m',\n        'saf' => 'application/vnd.yamaha.smaf-audio',\n        'sass' => 'text/x-sass',\n        'sbml' => 'application/sbml+xml',\n        'sc' => 'application/vnd.ibm.secure-container',\n        'scd' => 'application/x-msschedule',\n        'scm' => 'application/vnd.lotus-screencam',\n        'scq' => 'application/scvp-cv-request',\n        'scs' => 'application/scvp-cv-response',\n        'scss' => 'text/x-scss',\n        'scurl' => 'text/vnd.curl.scurl',\n        'sda' => 'application/vnd.stardivision.draw',\n        'sdc' => 'application/vnd.stardivision.calc',\n        'sdd' => 'application/vnd.stardivision.impress',\n        'sdkd' => 'application/vnd.solent.sdkm+xml',\n        'sdkm' => 'application/vnd.solent.sdkm+xml',\n        'sdp' => 'application/sdp',\n        'sdw' => 'application/vnd.stardivision.writer',\n        'sea' => 'application/octet-stream',\n        'see' => 'application/vnd.seemail',\n        'seed' => 'application/vnd.fdsn.seed',\n        'sema' => 'application/vnd.sema',\n        'semd' => 'application/vnd.semd',\n        'semf' => 'application/vnd.semf',\n        'senmlx' => 'application/senml+xml',\n        'sensmlx' => 'application/sensml+xml',\n        'ser' => 'application/java-serialized-object',\n        'setpay' => 'application/set-payment-initiation',\n        'setreg' => 'application/set-registration-initiation',\n        'sfd-hdstx' => 'application/vnd.hydrostatix.sof-data',\n        'sfs' => 'application/vnd.spotfire.sfs',\n        'sfv' => 'text/x-sfv',\n        'sgi' => 'image/sgi',\n        'sgl' => 'application/vnd.stardivision.writer-global',\n        'sgm' => 'text/sgml',\n        'sgml' => 'text/sgml',\n        'sh' => 'application/x-sh',\n        'shar' => 'application/x-shar',\n        'shex' => 'text/shex',\n        'shf' => 'application/shf+xml',\n        'shtml' => 'text/html',\n        'sid' => 'image/x-mrsid-image',\n        'sieve' => 'application/sieve',\n        'sig' => 'application/pgp-signature',\n        'sil' => 'audio/silk',\n        'silo' => 'model/mesh',\n        'sis' => 'application/vnd.symbian.install',\n        'sisx' => 'application/vnd.symbian.install',\n        'sit' => 'application/x-stuffit',\n        'sitx' => 'application/x-stuffitx',\n        'siv' => 'application/sieve',\n        'skd' => 'application/vnd.koan',\n        'skm' => 'application/vnd.koan',\n        'skp' => 'application/vnd.koan',\n        'skt' => 'application/vnd.koan',\n        'sldm' => 'application/vnd.ms-powerpoint.slide.macroenabled.12',\n        'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',\n        'slim' => 'text/slim',\n        'slm' => 'text/slim',\n        'sls' => 'application/route-s-tsid+xml',\n        'slt' => 'application/vnd.epson.salt',\n        'sm' => 'application/vnd.stepmania.stepchart',\n        'smf' => 'application/vnd.stardivision.math',\n        'smi' => 'application/smil',\n        'smil' => 'application/smil',\n        'smv' => 'video/x-smv',\n        'smzip' => 'application/vnd.stepmania.package',\n        'snd' => 'audio/basic',\n        'snf' => 'application/x-font-snf',\n        'so' => 'application/octet-stream',\n        'spc' => 'application/x-pkcs7-certificates',\n        'spdx' => 'text/spdx',\n        'spf' => 'application/vnd.yamaha.smaf-phrase',\n        'spl' => 'application/x-futuresplash',\n        'spot' => 'text/vnd.in3d.spot',\n        'spp' => 'application/scvp-vp-response',\n        'spq' => 'application/scvp-vp-request',\n        'spx' => 'audio/ogg',\n        'sql' => 'application/x-sql',\n        'src' => 'application/x-wais-source',\n        'srt' => 'application/x-subrip',\n        'sru' => 'application/sru+xml',\n        'srx' => 'application/sparql-results+xml',\n        'ssdl' => 'application/ssdl+xml',\n        'sse' => 'application/vnd.kodak-descriptor',\n        'ssf' => 'application/vnd.epson.ssf',\n        'ssml' => 'application/ssml+xml',\n        'sst' => 'application/octet-stream',\n        'st' => 'application/vnd.sailingtracker.track',\n        'stc' => 'application/vnd.sun.xml.calc.template',\n        'std' => 'application/vnd.sun.xml.draw.template',\n        'stf' => 'application/vnd.wt.stf',\n        'sti' => 'application/vnd.sun.xml.impress.template',\n        'stk' => 'application/hyperstudio',\n        'stl' => 'model/stl',\n        'stpx' => 'model/step+xml',\n        'stpxz' => 'model/step-xml+zip',\n        'stpz' => 'model/step+zip',\n        'str' => 'application/vnd.pg.format',\n        'stw' => 'application/vnd.sun.xml.writer.template',\n        'styl' => 'text/stylus',\n        'stylus' => 'text/stylus',\n        'sub' => 'text/vnd.dvb.subtitle',\n        'sus' => 'application/vnd.sus-calendar',\n        'susp' => 'application/vnd.sus-calendar',\n        'sv4cpio' => 'application/x-sv4cpio',\n        'sv4crc' => 'application/x-sv4crc',\n        'svc' => 'application/vnd.dvb.service',\n        'svd' => 'application/vnd.svd',\n        'svg' => 'image/svg+xml',\n        'svgz' => 'image/svg+xml',\n        'swa' => 'application/x-director',\n        'swf' => 'application/x-shockwave-flash',\n        'swi' => 'application/vnd.aristanetworks.swi',\n        'swidtag' => 'application/swid+xml',\n        'sxc' => 'application/vnd.sun.xml.calc',\n        'sxd' => 'application/vnd.sun.xml.draw',\n        'sxg' => 'application/vnd.sun.xml.writer.global',\n        'sxi' => 'application/vnd.sun.xml.impress',\n        'sxm' => 'application/vnd.sun.xml.math',\n        'sxw' => 'application/vnd.sun.xml.writer',\n        't' => 'text/troff',\n        't3' => 'application/x-t3vm-image',\n        't38' => 'image/t38',\n        'taglet' => 'application/vnd.mynfc',\n        'tao' => 'application/vnd.tao.intent-module-archive',\n        'tap' => 'image/vnd.tencent.tap',\n        'tar' => 'application/x-tar',\n        'tcap' => 'application/vnd.3gpp2.tcap',\n        'tcl' => 'application/x-tcl',\n        'td' => 'application/urc-targetdesc+xml',\n        'teacher' => 'application/vnd.smart.teacher',\n        'tei' => 'application/tei+xml',\n        'teicorpus' => 'application/tei+xml',\n        'tex' => 'application/x-tex',\n        'texi' => 'application/x-texinfo',\n        'texinfo' => 'application/x-texinfo',\n        'text' => 'text/plain',\n        'tfi' => 'application/thraud+xml',\n        'tfm' => 'application/x-tex-tfm',\n        'tfx' => 'image/tiff-fx',\n        'tga' => 'image/x-tga',\n        'tgz' => 'application/x-tar',\n        'thmx' => 'application/vnd.ms-officetheme',\n        'tif' => 'image/tiff',\n        'tiff' => 'image/tiff',\n        'tk' => 'application/x-tcl',\n        'tmo' => 'application/vnd.tmobile-livetv',\n        'toml' => 'application/toml',\n        'torrent' => 'application/x-bittorrent',\n        'tpl' => 'application/vnd.groove-tool-template',\n        'tpt' => 'application/vnd.trid.tpt',\n        'tr' => 'text/troff',\n        'tra' => 'application/vnd.trueapp',\n        'trig' => 'application/trig',\n        'trm' => 'application/x-msterminal',\n        'ts' => 'video/mp2t',\n        'tsd' => 'application/timestamped-data',\n        'tsv' => 'text/tab-separated-values',\n        'ttc' => 'font/collection',\n        'ttf' => 'font/ttf',\n        'ttl' => 'text/turtle',\n        'ttml' => 'application/ttml+xml',\n        'twd' => 'application/vnd.simtech-mindmapper',\n        'twds' => 'application/vnd.simtech-mindmapper',\n        'txd' => 'application/vnd.genomatix.tuxedo',\n        'txf' => 'application/vnd.mobius.txf',\n        'txt' => 'text/plain',\n        'u3d' => 'model/u3d',\n        'u8dsn' => 'message/global-delivery-status',\n        'u8hdr' => 'message/global-headers',\n        'u8mdn' => 'message/global-disposition-notification',\n        'u8msg' => 'message/global',\n        'u32' => 'application/x-authorware-bin',\n        'ubj' => 'application/ubjson',\n        'udeb' => 'application/x-debian-package',\n        'ufd' => 'application/vnd.ufdl',\n        'ufdl' => 'application/vnd.ufdl',\n        'ulx' => 'application/x-glulx',\n        'umj' => 'application/vnd.umajin',\n        'unityweb' => 'application/vnd.unity',\n        'uoml' => 'application/vnd.uoml+xml',\n        'uri' => 'text/uri-list',\n        'uris' => 'text/uri-list',\n        'urls' => 'text/uri-list',\n        'usdz' => 'model/vnd.usdz+zip',\n        'ustar' => 'application/x-ustar',\n        'utz' => 'application/vnd.uiq.theme',\n        'uu' => 'text/x-uuencode',\n        'uva' => 'audio/vnd.dece.audio',\n        'uvd' => 'application/vnd.dece.data',\n        'uvf' => 'application/vnd.dece.data',\n        'uvg' => 'image/vnd.dece.graphic',\n        'uvh' => 'video/vnd.dece.hd',\n        'uvi' => 'image/vnd.dece.graphic',\n        'uvm' => 'video/vnd.dece.mobile',\n        'uvp' => 'video/vnd.dece.pd',\n        'uvs' => 'video/vnd.dece.sd',\n        'uvt' => 'application/vnd.dece.ttml+xml',\n        'uvu' => 'video/vnd.uvvu.mp4',\n        'uvv' => 'video/vnd.dece.video',\n        'uvva' => 'audio/vnd.dece.audio',\n        'uvvd' => 'application/vnd.dece.data',\n        'uvvf' => 'application/vnd.dece.data',\n        'uvvg' => 'image/vnd.dece.graphic',\n        'uvvh' => 'video/vnd.dece.hd',\n        'uvvi' => 'image/vnd.dece.graphic',\n        'uvvm' => 'video/vnd.dece.mobile',\n        'uvvp' => 'video/vnd.dece.pd',\n        'uvvs' => 'video/vnd.dece.sd',\n        'uvvt' => 'application/vnd.dece.ttml+xml',\n        'uvvu' => 'video/vnd.uvvu.mp4',\n        'uvvv' => 'video/vnd.dece.video',\n        'uvvx' => 'application/vnd.dece.unspecified',\n        'uvvz' => 'application/vnd.dece.zip',\n        'uvx' => 'application/vnd.dece.unspecified',\n        'uvz' => 'application/vnd.dece.zip',\n        'vbox' => 'application/x-virtualbox-vbox',\n        'vbox-extpack' => 'application/x-virtualbox-vbox-extpack',\n        'vcard' => 'text/vcard',\n        'vcd' => 'application/x-cdlink',\n        'vcf' => 'text/x-vcard',\n        'vcg' => 'application/vnd.groove-vcard',\n        'vcs' => 'text/x-vcalendar',\n        'vcx' => 'application/vnd.vcx',\n        'vdi' => 'application/x-virtualbox-vdi',\n        'vds' => 'model/vnd.sap.vds',\n        'vhd' => 'application/x-virtualbox-vhd',\n        'vis' => 'application/vnd.visionary',\n        'viv' => 'video/vnd.vivo',\n        'vlc' => 'application/videolan',\n        'vmdk' => 'application/x-virtualbox-vmdk',\n        'vob' => 'video/x-ms-vob',\n        'vor' => 'application/vnd.stardivision.writer',\n        'vox' => 'application/x-authorware-bin',\n        'vrml' => 'model/vrml',\n        'vsd' => 'application/vnd.visio',\n        'vsf' => 'application/vnd.vsf',\n        'vss' => 'application/vnd.visio',\n        'vst' => 'application/vnd.visio',\n        'vsw' => 'application/vnd.visio',\n        'vtf' => 'image/vnd.valve.source.texture',\n        'vtt' => 'text/vtt',\n        'vtu' => 'model/vnd.vtu',\n        'vxml' => 'application/voicexml+xml',\n        'w3d' => 'application/x-director',\n        'wad' => 'application/x-doom',\n        'wadl' => 'application/vnd.sun.wadl+xml',\n        'war' => 'application/java-archive',\n        'wasm' => 'application/wasm',\n        'wav' => 'audio/x-wav',\n        'wax' => 'audio/x-ms-wax',\n        'wbmp' => 'image/vnd.wap.wbmp',\n        'wbs' => 'application/vnd.criticaltools.wbs+xml',\n        'wbxml' => 'application/wbxml',\n        'wcm' => 'application/vnd.ms-works',\n        'wdb' => 'application/vnd.ms-works',\n        'wdp' => 'image/vnd.ms-photo',\n        'weba' => 'audio/webm',\n        'webapp' => 'application/x-web-app-manifest+json',\n        'webm' => 'video/webm',\n        'webmanifest' => 'application/manifest+json',\n        'webp' => 'image/webp',\n        'wg' => 'application/vnd.pmi.widget',\n        'wgt' => 'application/widget',\n        'wif' => 'application/watcherinfo+xml',\n        'wks' => 'application/vnd.ms-works',\n        'wm' => 'video/x-ms-wm',\n        'wma' => 'audio/x-ms-wma',\n        'wmd' => 'application/x-ms-wmd',\n        'wmf' => 'image/wmf',\n        'wml' => 'text/vnd.wap.wml',\n        'wmlc' => 'application/wmlc',\n        'wmls' => 'text/vnd.wap.wmlscript',\n        'wmlsc' => 'application/vnd.wap.wmlscriptc',\n        'wmv' => 'video/x-ms-wmv',\n        'wmx' => 'video/x-ms-wmx',\n        'wmz' => 'application/x-msmetafile',\n        'woff' => 'font/woff',\n        'woff2' => 'font/woff2',\n        'word' => 'application/msword',\n        'wpd' => 'application/vnd.wordperfect',\n        'wpl' => 'application/vnd.ms-wpl',\n        'wps' => 'application/vnd.ms-works',\n        'wqd' => 'application/vnd.wqd',\n        'wri' => 'application/x-mswrite',\n        'wrl' => 'model/vrml',\n        'wsc' => 'message/vnd.wfa.wsc',\n        'wsdl' => 'application/wsdl+xml',\n        'wspolicy' => 'application/wspolicy+xml',\n        'wtb' => 'application/vnd.webturbo',\n        'wvx' => 'video/x-ms-wvx',\n        'x3d' => 'model/x3d+xml',\n        'x3db' => 'model/x3d+fastinfoset',\n        'x3dbz' => 'model/x3d+binary',\n        'x3dv' => 'model/x3d-vrml',\n        'x3dvz' => 'model/x3d+vrml',\n        'x3dz' => 'model/x3d+xml',\n        'x32' => 'application/x-authorware-bin',\n        'x_b' => 'model/vnd.parasolid.transmit.binary',\n        'x_t' => 'model/vnd.parasolid.transmit.text',\n        'xaml' => 'application/xaml+xml',\n        'xap' => 'application/x-silverlight-app',\n        'xar' => 'application/vnd.xara',\n        'xav' => 'application/xcap-att+xml',\n        'xbap' => 'application/x-ms-xbap',\n        'xbd' => 'application/vnd.fujixerox.docuworks.binder',\n        'xbm' => 'image/x-xbitmap',\n        'xca' => 'application/xcap-caps+xml',\n        'xcs' => 'application/calendar+xml',\n        'xdf' => 'application/xcap-diff+xml',\n        'xdm' => 'application/vnd.syncml.dm+xml',\n        'xdp' => 'application/vnd.adobe.xdp+xml',\n        'xdssc' => 'application/dssc+xml',\n        'xdw' => 'application/vnd.fujixerox.docuworks',\n        'xel' => 'application/xcap-el+xml',\n        'xenc' => 'application/xenc+xml',\n        'xer' => 'application/patch-ops-error+xml',\n        'xfdf' => 'application/vnd.adobe.xfdf',\n        'xfdl' => 'application/vnd.xfdl',\n        'xht' => 'application/xhtml+xml',\n        'xhtml' => 'application/xhtml+xml',\n        'xhvml' => 'application/xv+xml',\n        'xif' => 'image/vnd.xiff',\n        'xl' => 'application/excel',\n        'xla' => 'application/vnd.ms-excel',\n        'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',\n        'xlc' => 'application/vnd.ms-excel',\n        'xlf' => 'application/xliff+xml',\n        'xlm' => 'application/vnd.ms-excel',\n        'xls' => 'application/vnd.ms-excel',\n        'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n        'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12',\n        'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n        'xlt' => 'application/vnd.ms-excel',\n        'xltm' => 'application/vnd.ms-excel.template.macroEnabled.12',\n        'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n        'xlw' => 'application/vnd.ms-excel',\n        'xm' => 'audio/xm',\n        'xml' => 'application/xml',\n        'xns' => 'application/xcap-ns+xml',\n        'xo' => 'application/vnd.olpc-sugar',\n        'xop' => 'application/xop+xml',\n        'xpi' => 'application/x-xpinstall',\n        'xpl' => 'application/xproc+xml',\n        'xpm' => 'image/x-xpixmap',\n        'xpr' => 'application/vnd.is-xpr',\n        'xps' => 'application/vnd.ms-xpsdocument',\n        'xpw' => 'application/vnd.intercon.formnet',\n        'xpx' => 'application/vnd.intercon.formnet',\n        'xsd' => 'application/xml',\n        'xsl' => 'application/xml',\n        'xslt' => 'application/xslt+xml',\n        'xsm' => 'application/vnd.syncml+xml',\n        'xspf' => 'application/xspf+xml',\n        'xul' => 'application/vnd.mozilla.xul+xml',\n        'xvm' => 'application/xv+xml',\n        'xvml' => 'application/xv+xml',\n        'xwd' => 'image/x-xwindowdump',\n        'xyz' => 'chemical/x-xyz',\n        'xz' => 'application/x-xz',\n        'yaml' => 'text/yaml',\n        'yang' => 'application/yang',\n        'yin' => 'application/yin+xml',\n        'yml' => 'text/yaml',\n        'ymp' => 'text/x-suse-ymp',\n        'z' => 'application/x-compress',\n        'z1' => 'application/x-zmachine',\n        'z2' => 'application/x-zmachine',\n        'z3' => 'application/x-zmachine',\n        'z4' => 'application/x-zmachine',\n        'z5' => 'application/x-zmachine',\n        'z6' => 'application/x-zmachine',\n        'z7' => 'application/x-zmachine',\n        'z8' => 'application/x-zmachine',\n        'zaz' => 'application/vnd.zzazz.deck+xml',\n        'zip' => 'application/zip',\n        'zir' => 'application/vnd.zul',\n        'zirz' => 'application/vnd.zul',\n        'zmm' => 'application/vnd.handheld-entertainment+xml',\n        'zsh' => 'text/x-scriptzsh',\n    ];\n\n    /**\n     * Determines the mimetype of a file by looking at its extension.\n     *\n     * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json\n     */\n    public static function fromFilename(string $filename): ?string\n    {\n        return self::fromExtension(pathinfo($filename, PATHINFO_EXTENSION));\n    }\n\n    /**\n     * Maps a file extensions to a mimetype.\n     *\n     * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json\n     */\n    public static function fromExtension(string $extension): ?string\n    {\n        return self::MIME_TYPES[strtolower($extension)] ?? null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/MultipartStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream that when read returns bytes for a streaming multipart or\n * multipart/form-data stream.\n */\nfinal class MultipartStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var string */\n    private $boundary;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /**\n     * @param array  $elements Array of associative arrays, each containing a\n     *                         required \"name\" key mapping to the form field,\n     *                         name, a required \"contents\" key mapping to a\n     *                         StreamInterface/resource/string, an optional\n     *                         \"headers\" associative array of custom headers,\n     *                         and an optional \"filename\" key mapping to a\n     *                         string to send as the filename in the part.\n     * @param string $boundary You can optionally provide a specific boundary\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function __construct(array $elements = [], string $boundary = null)\n    {\n        $this->boundary = $boundary ?: bin2hex(random_bytes(20));\n        $this->stream = $this->createStream($elements);\n    }\n\n    public function getBoundary(): string\n    {\n        return $this->boundary;\n    }\n\n    public function isWritable(): bool\n    {\n        return false;\n    }\n\n    /**\n     * Get the headers needed before transferring the content of a POST file\n     *\n     * @param array<string, string> $headers\n     */\n    private function getHeaders(array $headers): string\n    {\n        $str = '';\n        foreach ($headers as $key => $value) {\n            $str .= \"{$key}: {$value}\\r\\n\";\n        }\n\n        return \"--{$this->boundary}\\r\\n\" . trim($str) . \"\\r\\n\\r\\n\";\n    }\n\n    /**\n     * Create the aggregate stream that will be used to upload the POST data\n     */\n    protected function createStream(array $elements = []): StreamInterface\n    {\n        $stream = new AppendStream();\n\n        foreach ($elements as $element) {\n            if (!is_array($element)) {\n                throw new \\UnexpectedValueException(\"An array is expected\");\n            }\n            $this->addElement($stream, $element);\n        }\n\n        // Add the trailing boundary with CRLF\n        $stream->addStream(Utils::streamFor(\"--{$this->boundary}--\\r\\n\"));\n\n        return $stream;\n    }\n\n    private function addElement(AppendStream $stream, array $element): void\n    {\n        foreach (['contents', 'name'] as $key) {\n            if (!array_key_exists($key, $element)) {\n                throw new \\InvalidArgumentException(\"A '{$key}' key is required\");\n            }\n        }\n\n        $element['contents'] = Utils::streamFor($element['contents']);\n\n        if (empty($element['filename'])) {\n            $uri = $element['contents']->getMetadata('uri');\n            if ($uri && \\is_string($uri) && \\substr($uri, 0, 6) !== 'php://' && \\substr($uri, 0, 7) !== 'data://') {\n                $element['filename'] = $uri;\n            }\n        }\n\n        [$body, $headers] = $this->createElement(\n            $element['name'],\n            $element['contents'],\n            $element['filename'] ?? null,\n            $element['headers'] ?? []\n        );\n\n        $stream->addStream(Utils::streamFor($this->getHeaders($headers)));\n        $stream->addStream($body);\n        $stream->addStream(Utils::streamFor(\"\\r\\n\"));\n    }\n\n    private function createElement(string $name, StreamInterface $stream, ?string $filename, array $headers): array\n    {\n        // Set a default content-disposition header if one was no provided\n        $disposition = $this->getHeader($headers, 'content-disposition');\n        if (!$disposition) {\n            $headers['Content-Disposition'] = ($filename === '0' || $filename)\n                ? sprintf(\n                    'form-data; name=\"%s\"; filename=\"%s\"',\n                    $name,\n                    basename($filename)\n                )\n                : \"form-data; name=\\\"{$name}\\\"\";\n        }\n\n        // Set a default content-length header if one was no provided\n        $length = $this->getHeader($headers, 'content-length');\n        if (!$length) {\n            if ($length = $stream->getSize()) {\n                $headers['Content-Length'] = (string) $length;\n            }\n        }\n\n        // Set a default Content-Type if one was not supplied\n        $type = $this->getHeader($headers, 'content-type');\n        if (!$type && ($filename === '0' || $filename)) {\n            if ($type = MimeType::fromFilename($filename)) {\n                $headers['Content-Type'] = $type;\n            }\n        }\n\n        return [$stream, $headers];\n    }\n\n    private function getHeader(array $headers, string $key)\n    {\n        $lowercaseHeader = strtolower($key);\n        foreach ($headers as $k => $v) {\n            if (strtolower($k) === $lowercaseHeader) {\n                return $v;\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/NoSeekStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator that prevents a stream from being seeked.\n */\nfinal class NoSeekStream implements StreamInterface\n{\n    use StreamDecoratorTrait;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        throw new \\RuntimeException('Cannot seek a NoSeekStream');\n    }\n\n    public function isSeekable(): bool\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/PumpStream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Provides a read only stream that pumps data from a PHP callable.\n *\n * When invoking the provided callable, the PumpStream will pass the amount of\n * data requested to read to the callable. The callable can choose to ignore\n * this value and return fewer or more bytes than requested. Any extra data\n * returned by the provided callable is buffered internally until drained using\n * the read() function of the PumpStream. The provided callable MUST return\n * false when there is no more data to read.\n */\nfinal class PumpStream implements StreamInterface\n{\n    /** @var callable|null */\n    private $source;\n\n    /** @var int|null */\n    private $size;\n\n    /** @var int */\n    private $tellPos = 0;\n\n    /** @var array */\n    private $metadata;\n\n    /** @var BufferStream */\n    private $buffer;\n\n    /**\n     * @param callable(int): (string|null|false)  $source  Source of the stream data. The callable MAY\n     *                                                     accept an integer argument used to control the\n     *                                                     amount of data to return. The callable MUST\n     *                                                     return a string when called, or false|null on error\n     *                                                     or EOF.\n     * @param array{size?: int, metadata?: array} $options Stream options:\n     *                                                     - metadata: Hash of metadata to use with stream.\n     *                                                     - size: Size of the stream, if known.\n     */\n    public function __construct(callable $source, array $options = [])\n    {\n        $this->source = $source;\n        $this->size = $options['size'] ?? null;\n        $this->metadata = $options['metadata'] ?? [];\n        $this->buffer = new BufferStream();\n    }\n\n    public function __toString(): string\n    {\n        try {\n            return Utils::copyToString($this);\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n            return '';\n        }\n    }\n\n    public function close(): void\n    {\n        $this->detach();\n    }\n\n    public function detach()\n    {\n        $this->tellPos = 0;\n        $this->source = null;\n\n        return null;\n    }\n\n    public function getSize(): ?int\n    {\n        return $this->size;\n    }\n\n    public function tell(): int\n    {\n        return $this->tellPos;\n    }\n\n    public function eof(): bool\n    {\n        return $this->source === null;\n    }\n\n    public function isSeekable(): bool\n    {\n        return false;\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        throw new \\RuntimeException('Cannot seek a PumpStream');\n    }\n\n    public function isWritable(): bool\n    {\n        return false;\n    }\n\n    public function write($string): int\n    {\n        throw new \\RuntimeException('Cannot write to a PumpStream');\n    }\n\n    public function isReadable(): bool\n    {\n        return true;\n    }\n\n    public function read($length): string\n    {\n        $data = $this->buffer->read($length);\n        $readLen = strlen($data);\n        $this->tellPos += $readLen;\n        $remaining = $length - $readLen;\n\n        if ($remaining) {\n            $this->pump($remaining);\n            $data .= $this->buffer->read($remaining);\n            $this->tellPos += strlen($data) - $readLen;\n        }\n\n        return $data;\n    }\n\n    public function getContents(): string\n    {\n        $result = '';\n        while (!$this->eof()) {\n            $result .= $this->read(1000000);\n        }\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        if (!$key) {\n            return $this->metadata;\n        }\n\n        return $this->metadata[$key] ?? null;\n    }\n\n    private function pump(int $length): void\n    {\n        if ($this->source) {\n            do {\n                $data = call_user_func($this->source, $length);\n                if ($data === false || $data === null) {\n                    $this->source = null;\n                    return;\n                }\n                $this->buffer->write($data);\n                $length -= strlen($data);\n            } while ($length > 0);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Query.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nfinal class Query\n{\n    /**\n     * Parse a query string into an associative array.\n     *\n     * If multiple values are found for the same key, the value of that key\n     * value pair will become an array. This function does not parse nested\n     * PHP style arrays into an associative array (e.g., `foo[a]=1&foo[b]=2`\n     * will be parsed into `['foo[a]' => '1', 'foo[b]' => '2'])`.\n     *\n     * @param string   $str         Query string to parse\n     * @param int|bool $urlEncoding How the query string is encoded\n     */\n    public static function parse(string $str, $urlEncoding = true): array\n    {\n        $result = [];\n\n        if ($str === '') {\n            return $result;\n        }\n\n        if ($urlEncoding === true) {\n            $decoder = function ($value) {\n                return rawurldecode(str_replace('+', ' ', (string) $value));\n            };\n        } elseif ($urlEncoding === PHP_QUERY_RFC3986) {\n            $decoder = 'rawurldecode';\n        } elseif ($urlEncoding === PHP_QUERY_RFC1738) {\n            $decoder = 'urldecode';\n        } else {\n            $decoder = function ($str) {\n                return $str;\n            };\n        }\n\n        foreach (explode('&', $str) as $kvp) {\n            $parts = explode('=', $kvp, 2);\n            $key = $decoder($parts[0]);\n            $value = isset($parts[1]) ? $decoder($parts[1]) : null;\n            if (!array_key_exists($key, $result)) {\n                $result[$key] = $value;\n            } else {\n                if (!is_array($result[$key])) {\n                    $result[$key] = [$result[$key]];\n                }\n                $result[$key][] = $value;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Build a query string from an array of key value pairs.\n     *\n     * This function can use the return value of `parse()` to build a query\n     * string. This function does not modify the provided keys when an array is\n     * encountered (like `http_build_query()` would).\n     *\n     * @param array     $params   Query string parameters.\n     * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986\n     *                            to encode using RFC3986, or PHP_QUERY_RFC1738\n     *                            to encode using RFC1738.\n     */\n    public static function build(array $params, $encoding = PHP_QUERY_RFC3986): string\n    {\n        if (!$params) {\n            return '';\n        }\n\n        if ($encoding === false) {\n            $encoder = function (string $str): string {\n                return $str;\n            };\n        } elseif ($encoding === PHP_QUERY_RFC3986) {\n            $encoder = 'rawurlencode';\n        } elseif ($encoding === PHP_QUERY_RFC1738) {\n            $encoder = 'urlencode';\n        } else {\n            throw new \\InvalidArgumentException('Invalid type');\n        }\n\n        $qs = '';\n        foreach ($params as $k => $v) {\n            $k = $encoder((string) $k);\n            if (!is_array($v)) {\n                $qs .= $k;\n                $v = is_bool($v) ? (int) $v : $v;\n                if ($v !== null) {\n                    $qs .= '=' . $encoder((string) $v);\n                }\n                $qs .= '&';\n            } else {\n                foreach ($v as $vv) {\n                    $qs .= $k;\n                    $vv = is_bool($vv) ? (int) $vv : $vv;\n                    if ($vv !== null) {\n                        $qs .= '=' . $encoder((string) $vv);\n                    }\n                    $qs .= '&';\n                }\n            }\n        }\n\n        return $qs ? (string) substr($qs, 0, -1) : '';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Request.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * PSR-7 request implementation.\n */\nclass Request implements RequestInterface\n{\n    use MessageTrait;\n\n    /** @var string */\n    private $method;\n\n    /** @var string|null */\n    private $requestTarget;\n\n    /** @var UriInterface */\n    private $uri;\n\n    /**\n     * @param string                               $method  HTTP method\n     * @param string|UriInterface                  $uri     URI\n     * @param array<string, string|string[]>       $headers Request headers\n     * @param string|resource|StreamInterface|null $body    Request body\n     * @param string                               $version Protocol version\n     */\n    public function __construct(\n        string $method,\n        $uri,\n        array $headers = [],\n        $body = null,\n        string $version = '1.1'\n    ) {\n        $this->assertMethod($method);\n        if (!($uri instanceof UriInterface)) {\n            $uri = new Uri($uri);\n        }\n\n        $this->method = strtoupper($method);\n        $this->uri = $uri;\n        $this->setHeaders($headers);\n        $this->protocol = $version;\n\n        if (!isset($this->headerNames['host'])) {\n            $this->updateHostFromUri();\n        }\n\n        if ($body !== '' && $body !== null) {\n            $this->stream = Utils::streamFor($body);\n        }\n    }\n\n    public function getRequestTarget(): string\n    {\n        if ($this->requestTarget !== null) {\n            return $this->requestTarget;\n        }\n\n        $target = $this->uri->getPath();\n        if ($target === '') {\n            $target = '/';\n        }\n        if ($this->uri->getQuery() != '') {\n            $target .= '?' . $this->uri->getQuery();\n        }\n\n        return $target;\n    }\n\n    public function withRequestTarget($requestTarget): RequestInterface\n    {\n        if (preg_match('#\\s#', $requestTarget)) {\n            throw new InvalidArgumentException(\n                'Invalid request target provided; cannot contain whitespace'\n            );\n        }\n\n        $new = clone $this;\n        $new->requestTarget = $requestTarget;\n        return $new;\n    }\n\n    public function getMethod(): string\n    {\n        return $this->method;\n    }\n\n    public function withMethod($method): RequestInterface\n    {\n        $this->assertMethod($method);\n        $new = clone $this;\n        $new->method = strtoupper($method);\n        return $new;\n    }\n\n    public function getUri(): UriInterface\n    {\n        return $this->uri;\n    }\n\n    public function withUri(UriInterface $uri, $preserveHost = false): RequestInterface\n    {\n        if ($uri === $this->uri) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->uri = $uri;\n\n        if (!$preserveHost || !isset($this->headerNames['host'])) {\n            $new->updateHostFromUri();\n        }\n\n        return $new;\n    }\n\n    private function updateHostFromUri(): void\n    {\n        $host = $this->uri->getHost();\n\n        if ($host == '') {\n            return;\n        }\n\n        if (($port = $this->uri->getPort()) !== null) {\n            $host .= ':' . $port;\n        }\n\n        if (isset($this->headerNames['host'])) {\n            $header = $this->headerNames['host'];\n        } else {\n            $header = 'Host';\n            $this->headerNames['host'] = 'Host';\n        }\n        // Ensure Host is the first header.\n        // See: http://tools.ietf.org/html/rfc7230#section-5.4\n        $this->headers = [$header => [$host]] + $this->headers;\n    }\n\n    /**\n     * @param mixed $method\n     */\n    private function assertMethod($method): void\n    {\n        if (!is_string($method) || $method === '') {\n            throw new InvalidArgumentException('Method must be a non-empty string.');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Response.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * PSR-7 response implementation.\n */\nclass Response implements ResponseInterface\n{\n    use MessageTrait;\n\n    /** Map of standard HTTP status code/reason phrases */\n    private const PHRASES = [\n        100 => 'Continue',\n        101 => 'Switching Protocols',\n        102 => 'Processing',\n        200 => 'OK',\n        201 => 'Created',\n        202 => 'Accepted',\n        203 => 'Non-Authoritative Information',\n        204 => 'No Content',\n        205 => 'Reset Content',\n        206 => 'Partial Content',\n        207 => 'Multi-status',\n        208 => 'Already Reported',\n        300 => 'Multiple Choices',\n        301 => 'Moved Permanently',\n        302 => 'Found',\n        303 => 'See Other',\n        304 => 'Not Modified',\n        305 => 'Use Proxy',\n        306 => 'Switch Proxy',\n        307 => 'Temporary Redirect',\n        308 => 'Permanent Redirect',\n        400 => 'Bad Request',\n        401 => 'Unauthorized',\n        402 => 'Payment Required',\n        403 => 'Forbidden',\n        404 => 'Not Found',\n        405 => 'Method Not Allowed',\n        406 => 'Not Acceptable',\n        407 => 'Proxy Authentication Required',\n        408 => 'Request Time-out',\n        409 => 'Conflict',\n        410 => 'Gone',\n        411 => 'Length Required',\n        412 => 'Precondition Failed',\n        413 => 'Request Entity Too Large',\n        414 => 'Request-URI Too Large',\n        415 => 'Unsupported Media Type',\n        416 => 'Requested range not satisfiable',\n        417 => 'Expectation Failed',\n        418 => 'I\\'m a teapot',\n        422 => 'Unprocessable Entity',\n        423 => 'Locked',\n        424 => 'Failed Dependency',\n        425 => 'Unordered Collection',\n        426 => 'Upgrade Required',\n        428 => 'Precondition Required',\n        429 => 'Too Many Requests',\n        431 => 'Request Header Fields Too Large',\n        451 => 'Unavailable For Legal Reasons',\n        500 => 'Internal Server Error',\n        501 => 'Not Implemented',\n        502 => 'Bad Gateway',\n        503 => 'Service Unavailable',\n        504 => 'Gateway Time-out',\n        505 => 'HTTP Version not supported',\n        506 => 'Variant Also Negotiates',\n        507 => 'Insufficient Storage',\n        508 => 'Loop Detected',\n        510 => 'Not Extended',\n        511 => 'Network Authentication Required',\n    ];\n\n    /** @var string */\n    private $reasonPhrase;\n\n    /** @var int */\n    private $statusCode;\n\n    /**\n     * @param int                                  $status  Status code\n     * @param array<string, string|string[]>       $headers Response headers\n     * @param string|resource|StreamInterface|null $body    Response body\n     * @param string                               $version Protocol version\n     * @param string|null                          $reason  Reason phrase (when empty a default will be used based on the status code)\n     */\n    public function __construct(\n        int $status = 200,\n        array $headers = [],\n        $body = null,\n        string $version = '1.1',\n        string $reason = null\n    ) {\n        $this->assertStatusCodeRange($status);\n\n        $this->statusCode = $status;\n\n        if ($body !== '' && $body !== null) {\n            $this->stream = Utils::streamFor($body);\n        }\n\n        $this->setHeaders($headers);\n        if ($reason == '' && isset(self::PHRASES[$this->statusCode])) {\n            $this->reasonPhrase = self::PHRASES[$this->statusCode];\n        } else {\n            $this->reasonPhrase = (string) $reason;\n        }\n\n        $this->protocol = $version;\n    }\n\n    public function getStatusCode(): int\n    {\n        return $this->statusCode;\n    }\n\n    public function getReasonPhrase(): string\n    {\n        return $this->reasonPhrase;\n    }\n\n    public function withStatus($code, $reasonPhrase = ''): ResponseInterface\n    {\n        $this->assertStatusCodeIsInteger($code);\n        $code = (int) $code;\n        $this->assertStatusCodeRange($code);\n\n        $new = clone $this;\n        $new->statusCode = $code;\n        if ($reasonPhrase == '' && isset(self::PHRASES[$new->statusCode])) {\n            $reasonPhrase = self::PHRASES[$new->statusCode];\n        }\n        $new->reasonPhrase = (string) $reasonPhrase;\n        return $new;\n    }\n\n    /**\n     * @param mixed $statusCode\n     */\n    private function assertStatusCodeIsInteger($statusCode): void\n    {\n        if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) {\n            throw new \\InvalidArgumentException('Status code must be an integer value.');\n        }\n    }\n\n    private function assertStatusCodeRange(int $statusCode): void\n    {\n        if ($statusCode < 100 || $statusCode >= 600) {\n            throw new \\InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Rfc7230.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\n/**\n * @internal\n */\nfinal class Rfc7230\n{\n    /**\n     * Header related regular expressions (based on amphp/http package)\n     *\n     * Note: header delimiter (\\r\\n) is modified to \\r?\\n to accept line feed only delimiters for BC reasons.\n     *\n     * @link    https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15\n     *\n     * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE\n     */\n    public const HEADER_REGEX = \"(^([^()<>@,;:\\\\\\\"/[\\]?={}\\x01-\\x20\\x7F]++):[ \\t]*+((?:[ \\t]*+[\\x21-\\x7E\\x80-\\xFF]++)*+)[ \\t]*+\\r?\\n)m\";\n    public const HEADER_FOLD_REGEX = \"(\\r?\\n[ \\t]++)\";\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/ServerRequest.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Server-side HTTP request\n *\n * Extends the Request definition to add methods for accessing incoming data,\n * specifically server parameters, cookies, matched path parameters, query\n * string arguments, body parameters, and upload file information.\n *\n * \"Attributes\" are discovered via decomposing the request (and usually\n * specifically the URI path), and typically will be injected by the application.\n *\n * Requests are considered immutable; all methods that might change state are\n * implemented such that they retain the internal state of the current\n * message and return a new instance that contains the changed state.\n */\nclass ServerRequest extends Request implements ServerRequestInterface\n{\n    /**\n     * @var array\n     */\n    private $attributes = [];\n\n    /**\n     * @var array\n     */\n    private $cookieParams = [];\n\n    /**\n     * @var array|object|null\n     */\n    private $parsedBody;\n\n    /**\n     * @var array\n     */\n    private $queryParams = [];\n\n    /**\n     * @var array\n     */\n    private $serverParams;\n\n    /**\n     * @var array\n     */\n    private $uploadedFiles = [];\n\n    /**\n     * @param string                               $method       HTTP method\n     * @param string|UriInterface                  $uri          URI\n     * @param array<string, string|string[]>       $headers      Request headers\n     * @param string|resource|StreamInterface|null $body         Request body\n     * @param string                               $version      Protocol version\n     * @param array                                $serverParams Typically the $_SERVER superglobal\n     */\n    public function __construct(\n        string $method,\n        $uri,\n        array $headers = [],\n        $body = null,\n        string $version = '1.1',\n        array $serverParams = []\n    ) {\n        $this->serverParams = $serverParams;\n\n        parent::__construct($method, $uri, $headers, $body, $version);\n    }\n\n    /**\n     * Return an UploadedFile instance array.\n     *\n     * @param array $files An array which respect $_FILES structure\n     *\n     * @throws InvalidArgumentException for unrecognized values\n     */\n    public static function normalizeFiles(array $files): array\n    {\n        $normalized = [];\n\n        foreach ($files as $key => $value) {\n            if ($value instanceof UploadedFileInterface) {\n                $normalized[$key] = $value;\n            } elseif (is_array($value) && isset($value['tmp_name'])) {\n                $normalized[$key] = self::createUploadedFileFromSpec($value);\n            } elseif (is_array($value)) {\n                $normalized[$key] = self::normalizeFiles($value);\n                continue;\n            } else {\n                throw new InvalidArgumentException('Invalid value in files specification');\n            }\n        }\n\n        return $normalized;\n    }\n\n    /**\n     * Create and return an UploadedFile instance from a $_FILES specification.\n     *\n     * If the specification represents an array of values, this method will\n     * delegate to normalizeNestedFileSpec() and return that return value.\n     *\n     * @param array $value $_FILES struct\n     *\n     * @return UploadedFileInterface|UploadedFileInterface[]\n     */\n    private static function createUploadedFileFromSpec(array $value)\n    {\n        if (is_array($value['tmp_name'])) {\n            return self::normalizeNestedFileSpec($value);\n        }\n\n        return new UploadedFile(\n            $value['tmp_name'],\n            (int) $value['size'],\n            (int) $value['error'],\n            $value['name'],\n            $value['type']\n        );\n    }\n\n    /**\n     * Normalize an array of file specifications.\n     *\n     * Loops through all nested files and returns a normalized array of\n     * UploadedFileInterface instances.\n     *\n     * @return UploadedFileInterface[]\n     */\n    private static function normalizeNestedFileSpec(array $files = []): array\n    {\n        $normalizedFiles = [];\n\n        foreach (array_keys($files['tmp_name']) as $key) {\n            $spec = [\n                'tmp_name' => $files['tmp_name'][$key],\n                'size'     => $files['size'][$key] ?? null,\n                'error'    => $files['error'][$key] ?? null,\n                'name'     => $files['name'][$key] ?? null,\n                'type'     => $files['type'][$key] ?? null,\n            ];\n            $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec);\n        }\n\n        return $normalizedFiles;\n    }\n\n    /**\n     * Return a ServerRequest populated with superglobals:\n     * $_GET\n     * $_POST\n     * $_COOKIE\n     * $_FILES\n     * $_SERVER\n     */\n    public static function fromGlobals(): ServerRequestInterface\n    {\n        $method = $_SERVER['REQUEST_METHOD'] ?? 'GET';\n        $headers = getallheaders();\n        $uri = self::getUriFromGlobals();\n        $body = new CachingStream(new LazyOpenStream('php://input', 'r+'));\n        $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1';\n\n        $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER);\n\n        return $serverRequest\n            ->withCookieParams($_COOKIE)\n            ->withQueryParams($_GET)\n            ->withParsedBody($_POST)\n            ->withUploadedFiles(self::normalizeFiles($_FILES));\n    }\n\n    private static function extractHostAndPortFromAuthority(string $authority): array\n    {\n        $uri = 'http://' . $authority;\n        $parts = parse_url($uri);\n        if (false === $parts) {\n            return [null, null];\n        }\n\n        $host = $parts['host'] ?? null;\n        $port = $parts['port'] ?? null;\n\n        return [$host, $port];\n    }\n\n    /**\n     * Get a Uri populated with values from $_SERVER.\n     */\n    public static function getUriFromGlobals(): UriInterface\n    {\n        $uri = new Uri('');\n\n        $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http');\n\n        $hasPort = false;\n        if (isset($_SERVER['HTTP_HOST'])) {\n            [$host, $port] = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']);\n            if ($host !== null) {\n                $uri = $uri->withHost($host);\n            }\n\n            if ($port !== null) {\n                $hasPort = true;\n                $uri = $uri->withPort($port);\n            }\n        } elseif (isset($_SERVER['SERVER_NAME'])) {\n            $uri = $uri->withHost($_SERVER['SERVER_NAME']);\n        } elseif (isset($_SERVER['SERVER_ADDR'])) {\n            $uri = $uri->withHost($_SERVER['SERVER_ADDR']);\n        }\n\n        if (!$hasPort && isset($_SERVER['SERVER_PORT'])) {\n            $uri = $uri->withPort($_SERVER['SERVER_PORT']);\n        }\n\n        $hasQuery = false;\n        if (isset($_SERVER['REQUEST_URI'])) {\n            $requestUriParts = explode('?', $_SERVER['REQUEST_URI'], 2);\n            $uri = $uri->withPath($requestUriParts[0]);\n            if (isset($requestUriParts[1])) {\n                $hasQuery = true;\n                $uri = $uri->withQuery($requestUriParts[1]);\n            }\n        }\n\n        if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) {\n            $uri = $uri->withQuery($_SERVER['QUERY_STRING']);\n        }\n\n        return $uri;\n    }\n\n    public function getServerParams(): array\n    {\n        return $this->serverParams;\n    }\n\n    public function getUploadedFiles(): array\n    {\n        return $this->uploadedFiles;\n    }\n\n    public function withUploadedFiles(array $uploadedFiles): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->uploadedFiles = $uploadedFiles;\n\n        return $new;\n    }\n\n    public function getCookieParams(): array\n    {\n        return $this->cookieParams;\n    }\n\n    public function withCookieParams(array $cookies): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->cookieParams = $cookies;\n\n        return $new;\n    }\n\n    public function getQueryParams(): array\n    {\n        return $this->queryParams;\n    }\n\n    public function withQueryParams(array $query): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->queryParams = $query;\n\n        return $new;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return array|object|null\n     */\n    public function getParsedBody()\n    {\n        return $this->parsedBody;\n    }\n\n    public function withParsedBody($data): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->parsedBody = $data;\n\n        return $new;\n    }\n\n    public function getAttributes(): array\n    {\n        return $this->attributes;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getAttribute($attribute, $default = null)\n    {\n        if (false === array_key_exists($attribute, $this->attributes)) {\n            return $default;\n        }\n\n        return $this->attributes[$attribute];\n    }\n\n    public function withAttribute($attribute, $value): ServerRequestInterface\n    {\n        $new = clone $this;\n        $new->attributes[$attribute] = $value;\n\n        return $new;\n    }\n\n    public function withoutAttribute($attribute): ServerRequestInterface\n    {\n        if (false === array_key_exists($attribute, $this->attributes)) {\n            return $this;\n        }\n\n        $new = clone $this;\n        unset($new->attributes[$attribute]);\n\n        return $new;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Stream.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * PHP stream implementation.\n */\nclass Stream implements StreamInterface\n{\n    /**\n     * @see http://php.net/manual/function.fopen.php\n     * @see http://php.net/manual/en/function.gzopen.php\n     */\n    private const READABLE_MODES = '/r|a\\+|ab\\+|w\\+|wb\\+|x\\+|xb\\+|c\\+|cb\\+/';\n    private const WRITABLE_MODES = '/a|w|r\\+|rb\\+|rw|x|c/';\n\n    /** @var resource */\n    private $stream;\n    /** @var int|null */\n    private $size;\n    /** @var bool */\n    private $seekable;\n    /** @var bool */\n    private $readable;\n    /** @var bool */\n    private $writable;\n    /** @var string|null */\n    private $uri;\n    /** @var mixed[] */\n    private $customMetadata;\n\n    /**\n     * This constructor accepts an associative array of options.\n     *\n     * - size: (int) If a read stream would otherwise have an indeterminate\n     *   size, but the size is known due to foreknowledge, then you can\n     *   provide that size, in bytes.\n     * - metadata: (array) Any additional metadata to return when the metadata\n     *   of the stream is accessed.\n     *\n     * @param resource                            $stream  Stream resource to wrap.\n     * @param array{size?: int, metadata?: array} $options Associative array of options.\n     *\n     * @throws \\InvalidArgumentException if the stream is not a stream resource\n     */\n    public function __construct($stream, array $options = [])\n    {\n        if (!is_resource($stream)) {\n            throw new \\InvalidArgumentException('Stream must be a resource');\n        }\n\n        if (isset($options['size'])) {\n            $this->size = $options['size'];\n        }\n\n        $this->customMetadata = $options['metadata'] ?? [];\n        $this->stream = $stream;\n        $meta = stream_get_meta_data($this->stream);\n        $this->seekable = $meta['seekable'];\n        $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']);\n        $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']);\n        $this->uri = $this->getMetadata('uri');\n    }\n\n    /**\n     * Closes the stream when the destructed\n     */\n    public function __destruct()\n    {\n        $this->close();\n    }\n\n    public function __toString(): string\n    {\n        try {\n            if ($this->isSeekable()) {\n                $this->seek(0);\n            }\n            return $this->getContents();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n            return '';\n        }\n    }\n\n    public function getContents(): string\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n\n        if (!$this->readable) {\n            throw new \\RuntimeException('Cannot read from non-readable stream');\n        }\n\n        return Utils::tryGetContents($this->stream);\n    }\n\n    public function close(): void\n    {\n        if (isset($this->stream)) {\n            if (is_resource($this->stream)) {\n                fclose($this->stream);\n            }\n            $this->detach();\n        }\n    }\n\n    public function detach()\n    {\n        if (!isset($this->stream)) {\n            return null;\n        }\n\n        $result = $this->stream;\n        unset($this->stream);\n        $this->size = $this->uri = null;\n        $this->readable = $this->writable = $this->seekable = false;\n\n        return $result;\n    }\n\n    public function getSize(): ?int\n    {\n        if ($this->size !== null) {\n            return $this->size;\n        }\n\n        if (!isset($this->stream)) {\n            return null;\n        }\n\n        // Clear the stat cache if the stream has a URI\n        if ($this->uri) {\n            clearstatcache(true, $this->uri);\n        }\n\n        $stats = fstat($this->stream);\n        if (is_array($stats) && isset($stats['size'])) {\n            $this->size = $stats['size'];\n            return $this->size;\n        }\n\n        return null;\n    }\n\n    public function isReadable(): bool\n    {\n        return $this->readable;\n    }\n\n    public function isWritable(): bool\n    {\n        return $this->writable;\n    }\n\n    public function isSeekable(): bool\n    {\n        return $this->seekable;\n    }\n\n    public function eof(): bool\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n\n        return feof($this->stream);\n    }\n\n    public function tell(): int\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n\n        $result = ftell($this->stream);\n\n        if ($result === false) {\n            throw new \\RuntimeException('Unable to determine stream position');\n        }\n\n        return $result;\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        $whence = (int) $whence;\n\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n        if (!$this->seekable) {\n            throw new \\RuntimeException('Stream is not seekable');\n        }\n        if (fseek($this->stream, $offset, $whence) === -1) {\n            throw new \\RuntimeException('Unable to seek to stream position '\n                . $offset . ' with whence ' . var_export($whence, true));\n        }\n    }\n\n    public function read($length): string\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n        if (!$this->readable) {\n            throw new \\RuntimeException('Cannot read from non-readable stream');\n        }\n        if ($length < 0) {\n            throw new \\RuntimeException('Length parameter cannot be negative');\n        }\n\n        if (0 === $length) {\n            return '';\n        }\n\n        try {\n            $string = fread($this->stream, $length);\n        } catch (\\Exception $e) {\n            throw new \\RuntimeException('Unable to read from stream', 0, $e);\n        }\n\n        if (false === $string) {\n            throw new \\RuntimeException('Unable to read from stream');\n        }\n\n        return $string;\n    }\n\n    public function write($string): int\n    {\n        if (!isset($this->stream)) {\n            throw new \\RuntimeException('Stream is detached');\n        }\n        if (!$this->writable) {\n            throw new \\RuntimeException('Cannot write to a non-writable stream');\n        }\n\n        // We can't know the size after writing anything\n        $this->size = null;\n        $result = fwrite($this->stream, $string);\n\n        if ($result === false) {\n            throw new \\RuntimeException('Unable to write to stream');\n        }\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        if (!isset($this->stream)) {\n            return $key ? null : [];\n        } elseif (!$key) {\n            return $this->customMetadata + stream_get_meta_data($this->stream);\n        } elseif (isset($this->customMetadata[$key])) {\n            return $this->customMetadata[$key];\n        }\n\n        $meta = stream_get_meta_data($this->stream);\n\n        return $meta[$key] ?? null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Stream decorator trait\n *\n * @property StreamInterface $stream\n */\ntrait StreamDecoratorTrait\n{\n    /**\n     * @param StreamInterface $stream Stream to decorate\n     */\n    public function __construct(StreamInterface $stream)\n    {\n        $this->stream = $stream;\n    }\n\n    /**\n     * Magic method used to create a new stream if streams are not added in\n     * the constructor of a decorator (e.g., LazyOpenStream).\n     *\n     * @return StreamInterface\n     */\n    public function __get(string $name)\n    {\n        if ($name === 'stream') {\n            $this->stream = $this->createStream();\n            return $this->stream;\n        }\n\n        throw new \\UnexpectedValueException(\"$name not found on class\");\n    }\n\n    public function __toString(): string\n    {\n        try {\n            if ($this->isSeekable()) {\n                $this->seek(0);\n            }\n            return $this->getContents();\n        } catch (\\Throwable $e) {\n            if (\\PHP_VERSION_ID >= 70400) {\n                throw $e;\n            }\n            trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR);\n            return '';\n        }\n    }\n\n    public function getContents(): string\n    {\n        return Utils::copyToString($this);\n    }\n\n    /**\n     * Allow decorators to implement custom methods\n     *\n     * @return mixed\n     */\n    public function __call(string $method, array $args)\n    {\n        /** @var callable $callable */\n        $callable = [$this->stream, $method];\n        $result = call_user_func_array($callable, $args);\n\n        // Always return the wrapped object if the result is a return $this\n        return $result === $this->stream ? $this : $result;\n    }\n\n    public function close(): void\n    {\n        $this->stream->close();\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return mixed\n     */\n    public function getMetadata($key = null)\n    {\n        return $this->stream->getMetadata($key);\n    }\n\n    public function detach()\n    {\n        return $this->stream->detach();\n    }\n\n    public function getSize(): ?int\n    {\n        return $this->stream->getSize();\n    }\n\n    public function eof(): bool\n    {\n        return $this->stream->eof();\n    }\n\n    public function tell(): int\n    {\n        return $this->stream->tell();\n    }\n\n    public function isReadable(): bool\n    {\n        return $this->stream->isReadable();\n    }\n\n    public function isWritable(): bool\n    {\n        return $this->stream->isWritable();\n    }\n\n    public function isSeekable(): bool\n    {\n        return $this->stream->isSeekable();\n    }\n\n    public function rewind(): void\n    {\n        $this->seek(0);\n    }\n\n    public function seek($offset, $whence = SEEK_SET): void\n    {\n        $this->stream->seek($offset, $whence);\n    }\n\n    public function read($length): string\n    {\n        return $this->stream->read($length);\n    }\n\n    public function write($string): int\n    {\n        return $this->stream->write($string);\n    }\n\n    /**\n     * Implement in subclasses to dynamically create streams when requested.\n     *\n     * @throws \\BadMethodCallException\n     */\n    protected function createStream(): StreamInterface\n    {\n        throw new \\BadMethodCallException('Not implemented');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/StreamWrapper.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\StreamInterface;\n\n/**\n * Converts Guzzle streams into PHP stream resources.\n *\n * @see https://www.php.net/streamwrapper\n */\nfinal class StreamWrapper\n{\n    /** @var resource */\n    public $context;\n\n    /** @var StreamInterface */\n    private $stream;\n\n    /** @var string r, r+, or w */\n    private $mode;\n\n    /**\n     * Returns a resource representing the stream.\n     *\n     * @param StreamInterface $stream The stream to get a resource for\n     *\n     * @return resource\n     *\n     * @throws \\InvalidArgumentException if stream is not readable or writable\n     */\n    public static function getResource(StreamInterface $stream)\n    {\n        self::register();\n\n        if ($stream->isReadable()) {\n            $mode = $stream->isWritable() ? 'r+' : 'r';\n        } elseif ($stream->isWritable()) {\n            $mode = 'w';\n        } else {\n            throw new \\InvalidArgumentException('The stream must be readable, '\n                . 'writable, or both.');\n        }\n\n        return fopen('guzzle://stream', $mode, false, self::createStreamContext($stream));\n    }\n\n    /**\n     * Creates a stream context that can be used to open a stream as a php stream resource.\n     *\n     * @return resource\n     */\n    public static function createStreamContext(StreamInterface $stream)\n    {\n        return stream_context_create([\n            'guzzle' => ['stream' => $stream]\n        ]);\n    }\n\n    /**\n     * Registers the stream wrapper if needed\n     */\n    public static function register(): void\n    {\n        if (!in_array('guzzle', stream_get_wrappers())) {\n            stream_wrapper_register('guzzle', __CLASS__);\n        }\n    }\n\n    public function stream_open(string $path, string $mode, int $options, string &$opened_path = null): bool\n    {\n        $options = stream_context_get_options($this->context);\n\n        if (!isset($options['guzzle']['stream'])) {\n            return false;\n        }\n\n        $this->mode = $mode;\n        $this->stream = $options['guzzle']['stream'];\n\n        return true;\n    }\n\n    public function stream_read(int $count): string\n    {\n        return $this->stream->read($count);\n    }\n\n    public function stream_write(string $data): int\n    {\n        return $this->stream->write($data);\n    }\n\n    public function stream_tell(): int\n    {\n        return $this->stream->tell();\n    }\n\n    public function stream_eof(): bool\n    {\n        return $this->stream->eof();\n    }\n\n    public function stream_seek(int $offset, int $whence): bool\n    {\n        $this->stream->seek($offset, $whence);\n\n        return true;\n    }\n\n    /**\n     * @return resource|false\n     */\n    public function stream_cast(int $cast_as)\n    {\n        $stream = clone($this->stream);\n        $resource = $stream->detach();\n\n        return $resource ?? false;\n    }\n\n    /**\n     * @return array<int|string, int>\n     */\n    public function stream_stat(): array\n    {\n        static $modeMap = [\n            'r'  => 33060,\n            'rb' => 33060,\n            'r+' => 33206,\n            'w'  => 33188,\n            'wb' => 33188\n        ];\n\n        return [\n            'dev'     => 0,\n            'ino'     => 0,\n            'mode'    => $modeMap[$this->mode],\n            'nlink'   => 0,\n            'uid'     => 0,\n            'gid'     => 0,\n            'rdev'    => 0,\n            'size'    => $this->stream->getSize() ?: 0,\n            'atime'   => 0,\n            'mtime'   => 0,\n            'ctime'   => 0,\n            'blksize' => 0,\n            'blocks'  => 0\n        ];\n    }\n\n    /**\n     * @return array<int|string, int>\n     */\n    public function url_stat(string $path, int $flags): array\n    {\n        return [\n            'dev'     => 0,\n            'ino'     => 0,\n            'mode'    => 0,\n            'nlink'   => 0,\n            'uid'     => 0,\n            'gid'     => 0,\n            'rdev'    => 0,\n            'size'    => 0,\n            'atime'   => 0,\n            'mtime'   => 0,\n            'ctime'   => 0,\n            'blksize' => 0,\n            'blocks'  => 0\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/UploadedFile.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UploadedFileInterface;\nuse RuntimeException;\n\nclass UploadedFile implements UploadedFileInterface\n{\n    private const ERRORS = [\n        UPLOAD_ERR_OK,\n        UPLOAD_ERR_INI_SIZE,\n        UPLOAD_ERR_FORM_SIZE,\n        UPLOAD_ERR_PARTIAL,\n        UPLOAD_ERR_NO_FILE,\n        UPLOAD_ERR_NO_TMP_DIR,\n        UPLOAD_ERR_CANT_WRITE,\n        UPLOAD_ERR_EXTENSION,\n    ];\n\n    /**\n     * @var string|null\n     */\n    private $clientFilename;\n\n    /**\n     * @var string|null\n     */\n    private $clientMediaType;\n\n    /**\n     * @var int\n     */\n    private $error;\n\n    /**\n     * @var string|null\n     */\n    private $file;\n\n    /**\n     * @var bool\n     */\n    private $moved = false;\n\n    /**\n     * @var int|null\n     */\n    private $size;\n\n    /**\n     * @var StreamInterface|null\n     */\n    private $stream;\n\n    /**\n     * @param StreamInterface|string|resource $streamOrFile\n     */\n    public function __construct(\n        $streamOrFile,\n        ?int $size,\n        int $errorStatus,\n        string $clientFilename = null,\n        string $clientMediaType = null\n    ) {\n        $this->setError($errorStatus);\n        $this->size = $size;\n        $this->clientFilename = $clientFilename;\n        $this->clientMediaType = $clientMediaType;\n\n        if ($this->isOk()) {\n            $this->setStreamOrFile($streamOrFile);\n        }\n    }\n\n    /**\n     * Depending on the value set file or stream variable\n     *\n     * @param StreamInterface|string|resource $streamOrFile\n     *\n     * @throws InvalidArgumentException\n     */\n    private function setStreamOrFile($streamOrFile): void\n    {\n        if (is_string($streamOrFile)) {\n            $this->file = $streamOrFile;\n        } elseif (is_resource($streamOrFile)) {\n            $this->stream = new Stream($streamOrFile);\n        } elseif ($streamOrFile instanceof StreamInterface) {\n            $this->stream = $streamOrFile;\n        } else {\n            throw new InvalidArgumentException(\n                'Invalid stream or file provided for UploadedFile'\n            );\n        }\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     */\n    private function setError(int $error): void\n    {\n        if (false === in_array($error, UploadedFile::ERRORS, true)) {\n            throw new InvalidArgumentException(\n                'Invalid error status for UploadedFile'\n            );\n        }\n\n        $this->error = $error;\n    }\n\n    private function isStringNotEmpty($param): bool\n    {\n        return is_string($param) && false === empty($param);\n    }\n\n    /**\n     * Return true if there is no upload error\n     */\n    private function isOk(): bool\n    {\n        return $this->error === UPLOAD_ERR_OK;\n    }\n\n    public function isMoved(): bool\n    {\n        return $this->moved;\n    }\n\n    /**\n     * @throws RuntimeException if is moved or not ok\n     */\n    private function validateActive(): void\n    {\n        if (false === $this->isOk()) {\n            throw new RuntimeException('Cannot retrieve stream due to upload error');\n        }\n\n        if ($this->isMoved()) {\n            throw new RuntimeException('Cannot retrieve stream after it has already been moved');\n        }\n    }\n\n    public function getStream(): StreamInterface\n    {\n        $this->validateActive();\n\n        if ($this->stream instanceof StreamInterface) {\n            return $this->stream;\n        }\n\n        /** @var string $file */\n        $file = $this->file;\n\n        return new LazyOpenStream($file, 'r+');\n    }\n\n    public function moveTo($targetPath): void\n    {\n        $this->validateActive();\n\n        if (false === $this->isStringNotEmpty($targetPath)) {\n            throw new InvalidArgumentException(\n                'Invalid path provided for move operation; must be a non-empty string'\n            );\n        }\n\n        if ($this->file) {\n            $this->moved = PHP_SAPI === 'cli'\n                ? rename($this->file, $targetPath)\n                : move_uploaded_file($this->file, $targetPath);\n        } else {\n            Utils::copyToStream(\n                $this->getStream(),\n                new LazyOpenStream($targetPath, 'w')\n            );\n\n            $this->moved = true;\n        }\n\n        if (false === $this->moved) {\n            throw new RuntimeException(\n                sprintf('Uploaded file could not be moved to %s', $targetPath)\n            );\n        }\n    }\n\n    public function getSize(): ?int\n    {\n        return $this->size;\n    }\n\n    public function getError(): int\n    {\n        return $this->error;\n    }\n\n    public function getClientFilename(): ?string\n    {\n        return $this->clientFilename;\n    }\n\n    public function getClientMediaType(): ?string\n    {\n        return $this->clientMediaType;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Uri.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse GuzzleHttp\\Psr7\\Exception\\MalformedUriException;\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * PSR-7 URI implementation.\n *\n * @author Michael Dowling\n * @author Tobias Schultze\n * @author Matthew Weier O'Phinney\n */\nclass Uri implements UriInterface, \\JsonSerializable\n{\n    /**\n     * Absolute http and https URIs require a host per RFC 7230 Section 2.7\n     * but in generic URIs the host can be empty. So for http(s) URIs\n     * we apply this default host when no host is given yet to form a\n     * valid URI.\n     */\n    private const HTTP_DEFAULT_HOST = 'localhost';\n\n    private const DEFAULT_PORTS = [\n        'http'  => 80,\n        'https' => 443,\n        'ftp' => 21,\n        'gopher' => 70,\n        'nntp' => 119,\n        'news' => 119,\n        'telnet' => 23,\n        'tn3270' => 23,\n        'imap' => 143,\n        'pop' => 110,\n        'ldap' => 389,\n    ];\n\n    /**\n     * Unreserved characters for use in a regex.\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-2.3\n     */\n    private const CHAR_UNRESERVED = 'a-zA-Z0-9_\\-\\.~';\n\n    /**\n     * Sub-delims for use in a regex.\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-2.2\n     */\n    private const CHAR_SUB_DELIMS = '!\\$&\\'\\(\\)\\*\\+,;=';\n    private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26'];\n\n    /** @var string Uri scheme. */\n    private $scheme = '';\n\n    /** @var string Uri user info. */\n    private $userInfo = '';\n\n    /** @var string Uri host. */\n    private $host = '';\n\n    /** @var int|null Uri port. */\n    private $port;\n\n    /** @var string Uri path. */\n    private $path = '';\n\n    /** @var string Uri query string. */\n    private $query = '';\n\n    /** @var string Uri fragment. */\n    private $fragment = '';\n\n    /** @var string|null String representation */\n    private $composedComponents;\n\n    public function __construct(string $uri = '')\n    {\n        if ($uri !== '') {\n            $parts = self::parse($uri);\n            if ($parts === false) {\n                throw new MalformedUriException(\"Unable to parse URI: $uri\");\n            }\n            $this->applyParts($parts);\n        }\n    }\n    /**\n     * UTF-8 aware \\parse_url() replacement.\n     *\n     * The internal function produces broken output for non ASCII domain names\n     * (IDN) when used with locales other than \"C\".\n     *\n     * On the other hand, cURL understands IDN correctly only when UTF-8 locale\n     * is configured (\"C.UTF-8\", \"en_US.UTF-8\", etc.).\n     *\n     * @see https://bugs.php.net/bug.php?id=52923\n     * @see https://www.php.net/manual/en/function.parse-url.php#114817\n     * @see https://curl.haxx.se/libcurl/c/CURLOPT_URL.html#ENCODING\n     *\n     * @return array|false\n     */\n    private static function parse(string $url)\n    {\n        // If IPv6\n        $prefix = '';\n        if (preg_match('%^(.*://\\[[0-9:a-f]+\\])(.*?)$%', $url, $matches)) {\n            /** @var array{0:string, 1:string, 2:string} $matches */\n            $prefix = $matches[1];\n            $url = $matches[2];\n        }\n\n        /** @var string */\n        $encodedUrl = preg_replace_callback(\n            '%[^:/@?&=#]+%usD',\n            static function ($matches) {\n                return urlencode($matches[0]);\n            },\n            $url\n        );\n\n        $result = parse_url($prefix . $encodedUrl);\n\n        if ($result === false) {\n            return false;\n        }\n\n        return array_map('urldecode', $result);\n    }\n\n    public function __toString(): string\n    {\n        if ($this->composedComponents === null) {\n            $this->composedComponents = self::composeComponents(\n                $this->scheme,\n                $this->getAuthority(),\n                $this->path,\n                $this->query,\n                $this->fragment\n            );\n        }\n\n        return $this->composedComponents;\n    }\n\n    /**\n     * Composes a URI reference string from its various components.\n     *\n     * Usually this method does not need to be called manually but instead is used indirectly via\n     * `Psr\\Http\\Message\\UriInterface::__toString`.\n     *\n     * PSR-7 UriInterface treats an empty component the same as a missing component as\n     * getQuery(), getFragment() etc. always return a string. This explains the slight\n     * difference to RFC 3986 Section 5.3.\n     *\n     * Another adjustment is that the authority separator is added even when the authority is missing/empty\n     * for the \"file\" scheme. This is because PHP stream functions like `file_get_contents` only work with\n     * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But\n     * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to\n     * that format).\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-5.3\n     */\n    public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string\n    {\n        $uri = '';\n\n        // weak type checks to also accept null until we can add scalar type hints\n        if ($scheme != '') {\n            $uri .= $scheme . ':';\n        }\n\n        if ($authority != '' || $scheme === 'file') {\n            $uri .= '//' . $authority;\n        }\n\n        if ($authority != '' && $path != '' && $path[0] != '/') {\n            $path = '/' . $path;\n        }\n\n        $uri .= $path;\n\n        if ($query != '') {\n            $uri .= '?' . $query;\n        }\n\n        if ($fragment != '') {\n            $uri .= '#' . $fragment;\n        }\n\n        return $uri;\n    }\n\n    /**\n     * Whether the URI has the default port of the current scheme.\n     *\n     * `Psr\\Http\\Message\\UriInterface::getPort` may return null or the standard port. This method can be used\n     * independently of the implementation.\n     */\n    public static function isDefaultPort(UriInterface $uri): bool\n    {\n        return $uri->getPort() === null\n            || (isset(self::DEFAULT_PORTS[$uri->getScheme()]) && $uri->getPort() === self::DEFAULT_PORTS[$uri->getScheme()]);\n    }\n\n    /**\n     * Whether the URI is absolute, i.e. it has a scheme.\n     *\n     * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true\n     * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative\n     * to another URI, the base URI. Relative references can be divided into several forms:\n     * - network-path references, e.g. '//example.com/path'\n     * - absolute-path references, e.g. '/path'\n     * - relative-path references, e.g. 'subpath'\n     *\n     * @see Uri::isNetworkPathReference\n     * @see Uri::isAbsolutePathReference\n     * @see Uri::isRelativePathReference\n     * @link https://tools.ietf.org/html/rfc3986#section-4\n     */\n    public static function isAbsolute(UriInterface $uri): bool\n    {\n        return $uri->getScheme() !== '';\n    }\n\n    /**\n     * Whether the URI is a network-path reference.\n     *\n     * A relative reference that begins with two slash characters is termed an network-path reference.\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-4.2\n     */\n    public static function isNetworkPathReference(UriInterface $uri): bool\n    {\n        return $uri->getScheme() === '' && $uri->getAuthority() !== '';\n    }\n\n    /**\n     * Whether the URI is a absolute-path reference.\n     *\n     * A relative reference that begins with a single slash character is termed an absolute-path reference.\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-4.2\n     */\n    public static function isAbsolutePathReference(UriInterface $uri): bool\n    {\n        return $uri->getScheme() === ''\n            && $uri->getAuthority() === ''\n            && isset($uri->getPath()[0])\n            && $uri->getPath()[0] === '/';\n    }\n\n    /**\n     * Whether the URI is a relative-path reference.\n     *\n     * A relative reference that does not begin with a slash character is termed a relative-path reference.\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-4.2\n     */\n    public static function isRelativePathReference(UriInterface $uri): bool\n    {\n        return $uri->getScheme() === ''\n            && $uri->getAuthority() === ''\n            && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/');\n    }\n\n    /**\n     * Whether the URI is a same-document reference.\n     *\n     * A same-document reference refers to a URI that is, aside from its fragment\n     * component, identical to the base URI. When no base URI is given, only an empty\n     * URI reference (apart from its fragment) is considered a same-document reference.\n     *\n     * @param UriInterface      $uri  The URI to check\n     * @param UriInterface|null $base An optional base URI to compare against\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-4.4\n     */\n    public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool\n    {\n        if ($base !== null) {\n            $uri = UriResolver::resolve($base, $uri);\n\n            return ($uri->getScheme() === $base->getScheme())\n                && ($uri->getAuthority() === $base->getAuthority())\n                && ($uri->getPath() === $base->getPath())\n                && ($uri->getQuery() === $base->getQuery());\n        }\n\n        return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === '';\n    }\n\n    /**\n     * Creates a new URI with a specific query string value removed.\n     *\n     * Any existing query string values that exactly match the provided key are\n     * removed.\n     *\n     * @param UriInterface $uri URI to use as a base.\n     * @param string       $key Query string key to remove.\n     */\n    public static function withoutQueryValue(UriInterface $uri, string $key): UriInterface\n    {\n        $result = self::getFilteredQueryString($uri, [$key]);\n\n        return $uri->withQuery(implode('&', $result));\n    }\n\n    /**\n     * Creates a new URI with a specific query string value.\n     *\n     * Any existing query string values that exactly match the provided key are\n     * removed and replaced with the given key value pair.\n     *\n     * A value of null will set the query string key without a value, e.g. \"key\"\n     * instead of \"key=value\".\n     *\n     * @param UriInterface $uri   URI to use as a base.\n     * @param string       $key   Key to set.\n     * @param string|null  $value Value to set\n     */\n    public static function withQueryValue(UriInterface $uri, string $key, ?string $value): UriInterface\n    {\n        $result = self::getFilteredQueryString($uri, [$key]);\n\n        $result[] = self::generateQueryString($key, $value);\n\n        return $uri->withQuery(implode('&', $result));\n    }\n\n    /**\n     * Creates a new URI with multiple specific query string values.\n     *\n     * It has the same behavior as withQueryValue() but for an associative array of key => value.\n     *\n     * @param UriInterface               $uri           URI to use as a base.\n     * @param array<string, string|null> $keyValueArray Associative array of key and values\n     */\n    public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface\n    {\n        $result = self::getFilteredQueryString($uri, array_keys($keyValueArray));\n\n        foreach ($keyValueArray as $key => $value) {\n            $result[] = self::generateQueryString((string) $key, $value !== null ? (string) $value : null);\n        }\n\n        return $uri->withQuery(implode('&', $result));\n    }\n\n    /**\n     * Creates a URI from a hash of `parse_url` components.\n     *\n     * @link http://php.net/manual/en/function.parse-url.php\n     *\n     * @throws MalformedUriException If the components do not form a valid URI.\n     */\n    public static function fromParts(array $parts): UriInterface\n    {\n        $uri = new self();\n        $uri->applyParts($parts);\n        $uri->validateState();\n\n        return $uri;\n    }\n\n    public function getScheme(): string\n    {\n        return $this->scheme;\n    }\n\n    public function getAuthority(): string\n    {\n        $authority = $this->host;\n        if ($this->userInfo !== '') {\n            $authority = $this->userInfo . '@' . $authority;\n        }\n\n        if ($this->port !== null) {\n            $authority .= ':' . $this->port;\n        }\n\n        return $authority;\n    }\n\n    public function getUserInfo(): string\n    {\n        return $this->userInfo;\n    }\n\n    public function getHost(): string\n    {\n        return $this->host;\n    }\n\n    public function getPort(): ?int\n    {\n        return $this->port;\n    }\n\n    public function getPath(): string\n    {\n        return $this->path;\n    }\n\n    public function getQuery(): string\n    {\n        return $this->query;\n    }\n\n    public function getFragment(): string\n    {\n        return $this->fragment;\n    }\n\n    public function withScheme($scheme): UriInterface\n    {\n        $scheme = $this->filterScheme($scheme);\n\n        if ($this->scheme === $scheme) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->scheme = $scheme;\n        $new->composedComponents = null;\n        $new->removeDefaultPort();\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withUserInfo($user, $password = null): UriInterface\n    {\n        $info = $this->filterUserInfoComponent($user);\n        if ($password !== null) {\n            $info .= ':' . $this->filterUserInfoComponent($password);\n        }\n\n        if ($this->userInfo === $info) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->userInfo = $info;\n        $new->composedComponents = null;\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withHost($host): UriInterface\n    {\n        $host = $this->filterHost($host);\n\n        if ($this->host === $host) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->host = $host;\n        $new->composedComponents = null;\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withPort($port): UriInterface\n    {\n        $port = $this->filterPort($port);\n\n        if ($this->port === $port) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->port = $port;\n        $new->composedComponents = null;\n        $new->removeDefaultPort();\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withPath($path): UriInterface\n    {\n        $path = $this->filterPath($path);\n\n        if ($this->path === $path) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->path = $path;\n        $new->composedComponents = null;\n        $new->validateState();\n\n        return $new;\n    }\n\n    public function withQuery($query): UriInterface\n    {\n        $query = $this->filterQueryAndFragment($query);\n\n        if ($this->query === $query) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->query = $query;\n        $new->composedComponents = null;\n\n        return $new;\n    }\n\n    public function withFragment($fragment): UriInterface\n    {\n        $fragment = $this->filterQueryAndFragment($fragment);\n\n        if ($this->fragment === $fragment) {\n            return $this;\n        }\n\n        $new = clone $this;\n        $new->fragment = $fragment;\n        $new->composedComponents = null;\n\n        return $new;\n    }\n\n    public function jsonSerialize(): string\n    {\n        return $this->__toString();\n    }\n\n    /**\n     * Apply parse_url parts to a URI.\n     *\n     * @param array $parts Array of parse_url parts to apply.\n     */\n    private function applyParts(array $parts): void\n    {\n        $this->scheme = isset($parts['scheme'])\n            ? $this->filterScheme($parts['scheme'])\n            : '';\n        $this->userInfo = isset($parts['user'])\n            ? $this->filterUserInfoComponent($parts['user'])\n            : '';\n        $this->host = isset($parts['host'])\n            ? $this->filterHost($parts['host'])\n            : '';\n        $this->port = isset($parts['port'])\n            ? $this->filterPort($parts['port'])\n            : null;\n        $this->path = isset($parts['path'])\n            ? $this->filterPath($parts['path'])\n            : '';\n        $this->query = isset($parts['query'])\n            ? $this->filterQueryAndFragment($parts['query'])\n            : '';\n        $this->fragment = isset($parts['fragment'])\n            ? $this->filterQueryAndFragment($parts['fragment'])\n            : '';\n        if (isset($parts['pass'])) {\n            $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']);\n        }\n\n        $this->removeDefaultPort();\n    }\n\n    /**\n     * @param mixed $scheme\n     *\n     * @throws \\InvalidArgumentException If the scheme is invalid.\n     */\n    private function filterScheme($scheme): string\n    {\n        if (!is_string($scheme)) {\n            throw new \\InvalidArgumentException('Scheme must be a string');\n        }\n\n        return \\strtr($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n    }\n\n    /**\n     * @param mixed $component\n     *\n     * @throws \\InvalidArgumentException If the user info is invalid.\n     */\n    private function filterUserInfoComponent($component): string\n    {\n        if (!is_string($component)) {\n            throw new \\InvalidArgumentException('User info must be a string');\n        }\n\n        return preg_replace_callback(\n            '/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/',\n            [$this, 'rawurlencodeMatchZero'],\n            $component\n        );\n    }\n\n    /**\n     * @param mixed $host\n     *\n     * @throws \\InvalidArgumentException If the host is invalid.\n     */\n    private function filterHost($host): string\n    {\n        if (!is_string($host)) {\n            throw new \\InvalidArgumentException('Host must be a string');\n        }\n\n        return \\strtr($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');\n    }\n\n    /**\n     * @param mixed $port\n     *\n     * @throws \\InvalidArgumentException If the port is invalid.\n     */\n    private function filterPort($port): ?int\n    {\n        if ($port === null) {\n            return null;\n        }\n\n        $port = (int) $port;\n        if (0 > $port || 0xffff < $port) {\n            throw new \\InvalidArgumentException(\n                sprintf('Invalid port: %d. Must be between 0 and 65535', $port)\n            );\n        }\n\n        return $port;\n    }\n\n    /**\n     * @param string[] $keys\n     *\n     * @return string[]\n     */\n    private static function getFilteredQueryString(UriInterface $uri, array $keys): array\n    {\n        $current = $uri->getQuery();\n\n        if ($current === '') {\n            return [];\n        }\n\n        $decodedKeys = array_map('rawurldecode', $keys);\n\n        return array_filter(explode('&', $current), function ($part) use ($decodedKeys) {\n            return !in_array(rawurldecode(explode('=', $part)[0]), $decodedKeys, true);\n        });\n    }\n\n    private static function generateQueryString(string $key, ?string $value): string\n    {\n        // Query string separators (\"=\", \"&\") within the key or value need to be encoded\n        // (while preventing double-encoding) before setting the query string. All other\n        // chars that need percent-encoding will be encoded by withQuery().\n        $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT);\n\n        if ($value !== null) {\n            $queryString .= '=' . strtr($value, self::QUERY_SEPARATORS_REPLACEMENT);\n        }\n\n        return $queryString;\n    }\n\n    private function removeDefaultPort(): void\n    {\n        if ($this->port !== null && self::isDefaultPort($this)) {\n            $this->port = null;\n        }\n    }\n\n    /**\n     * Filters the path of a URI\n     *\n     * @param mixed $path\n     *\n     * @throws \\InvalidArgumentException If the path is invalid.\n     */\n    private function filterPath($path): string\n    {\n        if (!is_string($path)) {\n            throw new \\InvalidArgumentException('Path must be a string');\n        }\n\n        return preg_replace_callback(\n            '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\\/]++|%(?![A-Fa-f0-9]{2}))/',\n            [$this, 'rawurlencodeMatchZero'],\n            $path\n        );\n    }\n\n    /**\n     * Filters the query string or fragment of a URI.\n     *\n     * @param mixed $str\n     *\n     * @throws \\InvalidArgumentException If the query or fragment is invalid.\n     */\n    private function filterQueryAndFragment($str): string\n    {\n        if (!is_string($str)) {\n            throw new \\InvalidArgumentException('Query and fragment must be a string');\n        }\n\n        return preg_replace_callback(\n            '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\\/\\?]++|%(?![A-Fa-f0-9]{2}))/',\n            [$this, 'rawurlencodeMatchZero'],\n            $str\n        );\n    }\n\n    private function rawurlencodeMatchZero(array $match): string\n    {\n        return rawurlencode($match[0]);\n    }\n\n    private function validateState(): void\n    {\n        if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) {\n            $this->host = self::HTTP_DEFAULT_HOST;\n        }\n\n        if ($this->getAuthority() === '') {\n            if (0 === strpos($this->path, '//')) {\n                throw new MalformedUriException('The path of a URI without an authority must not start with two slashes \"//\"');\n            }\n            if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) {\n                throw new MalformedUriException('A relative URI must not have a path beginning with a segment containing a colon');\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/UriComparator.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Provides methods to determine if a modified URL should be considered cross-origin.\n *\n * @author Graham Campbell\n */\nfinal class UriComparator\n{\n    /**\n     * Determines if a modified URL should be considered cross-origin with\n     * respect to an original URL.\n     */\n    public static function isCrossOrigin(UriInterface $original, UriInterface $modified): bool\n    {\n        if (\\strcasecmp($original->getHost(), $modified->getHost()) !== 0) {\n            return true;\n        }\n\n        if ($original->getScheme() !== $modified->getScheme()) {\n            return true;\n        }\n\n        if (self::computePort($original) !== self::computePort($modified)) {\n            return true;\n        }\n\n        return false;\n    }\n\n    private static function computePort(UriInterface $uri): int\n    {\n        $port = $uri->getPort();\n\n        if (null !== $port) {\n            return $port;\n        }\n\n        return 'https' === $uri->getScheme() ? 443 : 80;\n    }\n\n    private function __construct()\n    {\n        // cannot be instantiated\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/UriNormalizer.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Provides methods to normalize and compare URIs.\n *\n * @author Tobias Schultze\n *\n * @link https://tools.ietf.org/html/rfc3986#section-6\n */\nfinal class UriNormalizer\n{\n    /**\n     * Default normalizations which only include the ones that preserve semantics.\n     */\n    public const PRESERVING_NORMALIZATIONS =\n        self::CAPITALIZE_PERCENT_ENCODING |\n        self::DECODE_UNRESERVED_CHARACTERS |\n        self::CONVERT_EMPTY_PATH |\n        self::REMOVE_DEFAULT_HOST |\n        self::REMOVE_DEFAULT_PORT |\n        self::REMOVE_DOT_SEGMENTS;\n\n    /**\n     * All letters within a percent-encoding triplet (e.g., \"%3A\") are case-insensitive, and should be capitalized.\n     *\n     * Example: http://example.org/a%c2%b1b → http://example.org/a%C2%B1b\n     */\n    public const CAPITALIZE_PERCENT_ENCODING = 1;\n\n    /**\n     * Decodes percent-encoded octets of unreserved characters.\n     *\n     * For consistency, percent-encoded octets in the ranges of ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39),\n     * hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should not be created by URI producers and,\n     * when found in a URI, should be decoded to their corresponding unreserved characters by URI normalizers.\n     *\n     * Example: http://example.org/%7Eusern%61me/ → http://example.org/~username/\n     */\n    public const DECODE_UNRESERVED_CHARACTERS = 2;\n\n    /**\n     * Converts the empty path to \"/\" for http and https URIs.\n     *\n     * Example: http://example.org → http://example.org/\n     */\n    public const CONVERT_EMPTY_PATH = 4;\n\n    /**\n     * Removes the default host of the given URI scheme from the URI.\n     *\n     * Only the \"file\" scheme defines the default host \"localhost\".\n     * All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile`\n     * are equivalent according to RFC 3986. The first format is not accepted\n     * by PHPs stream functions and thus already normalized implicitly to the\n     * second format in the Uri class. See `GuzzleHttp\\Psr7\\Uri::composeComponents`.\n     *\n     * Example: file://localhost/myfile → file:///myfile\n     */\n    public const REMOVE_DEFAULT_HOST = 8;\n\n    /**\n     * Removes the default port of the given URI scheme from the URI.\n     *\n     * Example: http://example.org:80/ → http://example.org/\n     */\n    public const REMOVE_DEFAULT_PORT = 16;\n\n    /**\n     * Removes unnecessary dot-segments.\n     *\n     * Dot-segments in relative-path references are not removed as it would\n     * change the semantics of the URI reference.\n     *\n     * Example: http://example.org/../a/b/../c/./d.html → http://example.org/a/c/d.html\n     */\n    public const REMOVE_DOT_SEGMENTS = 32;\n\n    /**\n     * Paths which include two or more adjacent slashes are converted to one.\n     *\n     * Webservers usually ignore duplicate slashes and treat those URIs equivalent.\n     * But in theory those URIs do not need to be equivalent. So this normalization\n     * may change the semantics. Encoded slashes (%2F) are not removed.\n     *\n     * Example: http://example.org//foo///bar.html → http://example.org/foo/bar.html\n     */\n    public const REMOVE_DUPLICATE_SLASHES = 64;\n\n    /**\n     * Sort query parameters with their values in alphabetical order.\n     *\n     * However, the order of parameters in a URI may be significant (this is not defined by the standard).\n     * So this normalization is not safe and may change the semantics of the URI.\n     *\n     * Example: ?lang=en&article=fred → ?article=fred&lang=en\n     *\n     * Note: The sorting is neither locale nor Unicode aware (the URI query does not get decoded at all) as the\n     * purpose is to be able to compare URIs in a reproducible way, not to have the params sorted perfectly.\n     */\n    public const SORT_QUERY_PARAMETERS = 128;\n\n    /**\n     * Returns a normalized URI.\n     *\n     * The scheme and host component are already normalized to lowercase per PSR-7 UriInterface.\n     * This methods adds additional normalizations that can be configured with the $flags parameter.\n     *\n     * PSR-7 UriInterface cannot distinguish between an empty component and a missing component as\n     * getQuery(), getFragment() etc. always return a string. This means the URIs \"/?#\" and \"/\" are\n     * treated equivalent which is not necessarily true according to RFC 3986. But that difference\n     * is highly uncommon in reality. So this potential normalization is implied in PSR-7 as well.\n     *\n     * @param UriInterface $uri   The URI to normalize\n     * @param int          $flags A bitmask of normalizations to apply, see constants\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-6.2\n     */\n    public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface\n    {\n        if ($flags & self::CAPITALIZE_PERCENT_ENCODING) {\n            $uri = self::capitalizePercentEncoding($uri);\n        }\n\n        if ($flags & self::DECODE_UNRESERVED_CHARACTERS) {\n            $uri = self::decodeUnreservedCharacters($uri);\n        }\n\n        if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' &&\n            ($uri->getScheme() === 'http' || $uri->getScheme() === 'https')\n        ) {\n            $uri = $uri->withPath('/');\n        }\n\n        if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') {\n            $uri = $uri->withHost('');\n        }\n\n        if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) {\n            $uri = $uri->withPort(null);\n        }\n\n        if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) {\n            $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath()));\n        }\n\n        if ($flags & self::REMOVE_DUPLICATE_SLASHES) {\n            $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath()));\n        }\n\n        if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') {\n            $queryKeyValues = explode('&', $uri->getQuery());\n            sort($queryKeyValues);\n            $uri = $uri->withQuery(implode('&', $queryKeyValues));\n        }\n\n        return $uri;\n    }\n\n    /**\n     * Whether two URIs can be considered equivalent.\n     *\n     * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also\n     * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be\n     * resolved against the same base URI. If this is not the case, determination of equivalence or difference of\n     * relative references does not mean anything.\n     *\n     * @param UriInterface $uri1           An URI to compare\n     * @param UriInterface $uri2           An URI to compare\n     * @param int          $normalizations A bitmask of normalizations to apply, see constants\n     *\n     * @link https://tools.ietf.org/html/rfc3986#section-6.1\n     */\n    public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool\n    {\n        return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations);\n    }\n\n    private static function capitalizePercentEncoding(UriInterface $uri): UriInterface\n    {\n        $regex = '/(?:%[A-Fa-f0-9]{2})++/';\n\n        $callback = function (array $match) {\n            return strtoupper($match[0]);\n        };\n\n        return\n            $uri->withPath(\n                preg_replace_callback($regex, $callback, $uri->getPath())\n            )->withQuery(\n                preg_replace_callback($regex, $callback, $uri->getQuery())\n            );\n    }\n\n    private static function decodeUnreservedCharacters(UriInterface $uri): UriInterface\n    {\n        $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i';\n\n        $callback = function (array $match) {\n            return rawurldecode($match[0]);\n        };\n\n        return\n            $uri->withPath(\n                preg_replace_callback($regex, $callback, $uri->getPath())\n            )->withQuery(\n                preg_replace_callback($regex, $callback, $uri->getQuery())\n            );\n    }\n\n    private function __construct()\n    {\n        // cannot be instantiated\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/UriResolver.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\UriInterface;\n\n/**\n * Resolves a URI reference in the context of a base URI and the opposite way.\n *\n * @author Tobias Schultze\n *\n * @link https://tools.ietf.org/html/rfc3986#section-5\n */\nfinal class UriResolver\n{\n    /**\n     * Removes dot segments from a path and returns the new path.\n     *\n     * @link http://tools.ietf.org/html/rfc3986#section-5.2.4\n     */\n    public static function removeDotSegments(string $path): string\n    {\n        if ($path === '' || $path === '/') {\n            return $path;\n        }\n\n        $results = [];\n        $segments = explode('/', $path);\n        foreach ($segments as $segment) {\n            if ($segment === '..') {\n                array_pop($results);\n            } elseif ($segment !== '.') {\n                $results[] = $segment;\n            }\n        }\n\n        $newPath = implode('/', $results);\n\n        if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) {\n            // Re-add the leading slash if necessary for cases like \"/..\"\n            $newPath = '/' . $newPath;\n        } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) {\n            // Add the trailing slash if necessary\n            // If newPath is not empty, then $segment must be set and is the last segment from the foreach\n            $newPath .= '/';\n        }\n\n        return $newPath;\n    }\n\n    /**\n     * Converts the relative URI into a new URI that is resolved against the base URI.\n     *\n     * @link http://tools.ietf.org/html/rfc3986#section-5.2\n     */\n    public static function resolve(UriInterface $base, UriInterface $rel): UriInterface\n    {\n        if ((string) $rel === '') {\n            // we can simply return the same base URI instance for this same-document reference\n            return $base;\n        }\n\n        if ($rel->getScheme() != '') {\n            return $rel->withPath(self::removeDotSegments($rel->getPath()));\n        }\n\n        if ($rel->getAuthority() != '') {\n            $targetAuthority = $rel->getAuthority();\n            $targetPath = self::removeDotSegments($rel->getPath());\n            $targetQuery = $rel->getQuery();\n        } else {\n            $targetAuthority = $base->getAuthority();\n            if ($rel->getPath() === '') {\n                $targetPath = $base->getPath();\n                $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery();\n            } else {\n                if ($rel->getPath()[0] === '/') {\n                    $targetPath = $rel->getPath();\n                } else {\n                    if ($targetAuthority != '' && $base->getPath() === '') {\n                        $targetPath = '/' . $rel->getPath();\n                    } else {\n                        $lastSlashPos = strrpos($base->getPath(), '/');\n                        if ($lastSlashPos === false) {\n                            $targetPath = $rel->getPath();\n                        } else {\n                            $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath();\n                        }\n                    }\n                }\n                $targetPath = self::removeDotSegments($targetPath);\n                $targetQuery = $rel->getQuery();\n            }\n        }\n\n        return new Uri(Uri::composeComponents(\n            $base->getScheme(),\n            $targetAuthority,\n            $targetPath,\n            $targetQuery,\n            $rel->getFragment()\n        ));\n    }\n\n    /**\n     * Returns the target URI as a relative reference from the base URI.\n     *\n     * This method is the counterpart to resolve():\n     *\n     *    (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target))\n     *\n     * One use-case is to use the current request URI as base URI and then generate relative links in your documents\n     * to reduce the document size or offer self-contained downloadable document archives.\n     *\n     *    $base = new Uri('http://example.com/a/b/');\n     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c'));  // prints 'c'.\n     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y'));  // prints '../x/y'.\n     *    echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'.\n     *    echo UriResolver::relativize($base, new Uri('http://example.org/a/b/'));   // prints '//example.org/a/b/'.\n     *\n     * This method also accepts a target that is already relative and will try to relativize it further. Only a\n     * relative-path reference will be returned as-is.\n     *\n     *    echo UriResolver::relativize($base, new Uri('/a/b/c'));  // prints 'c' as well\n     */\n    public static function relativize(UriInterface $base, UriInterface $target): UriInterface\n    {\n        if ($target->getScheme() !== '' &&\n            ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '')\n        ) {\n            return $target;\n        }\n\n        if (Uri::isRelativePathReference($target)) {\n            // As the target is already highly relative we return it as-is. It would be possible to resolve\n            // the target with `$target = self::resolve($base, $target);` and then try make it more relative\n            // by removing a duplicate query. But let's not do that automatically.\n            return $target;\n        }\n\n        if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) {\n            return $target->withScheme('');\n        }\n\n        // We must remove the path before removing the authority because if the path starts with two slashes, the URI\n        // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also\n        // invalid.\n        $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost('');\n\n        if ($base->getPath() !== $target->getPath()) {\n            return $emptyPathUri->withPath(self::getRelativePath($base, $target));\n        }\n\n        if ($base->getQuery() === $target->getQuery()) {\n            // Only the target fragment is left. And it must be returned even if base and target fragment are the same.\n            return $emptyPathUri->withQuery('');\n        }\n\n        // If the base URI has a query but the target has none, we cannot return an empty path reference as it would\n        // inherit the base query component when resolving.\n        if ($target->getQuery() === '') {\n            $segments = explode('/', $target->getPath());\n            /** @var string $lastSegment */\n            $lastSegment = end($segments);\n\n            return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment);\n        }\n\n        return $emptyPathUri;\n    }\n\n    private static function getRelativePath(UriInterface $base, UriInterface $target): string\n    {\n        $sourceSegments = explode('/', $base->getPath());\n        $targetSegments = explode('/', $target->getPath());\n        array_pop($sourceSegments);\n        $targetLastSegment = array_pop($targetSegments);\n        foreach ($sourceSegments as $i => $segment) {\n            if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) {\n                unset($sourceSegments[$i], $targetSegments[$i]);\n            } else {\n                break;\n            }\n        }\n        $targetSegments[] = $targetLastSegment;\n        $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments);\n\n        // A reference to am empty last segment or an empty first sub-segment must be prefixed with \"./\".\n        // This also applies to a segment with a colon character (e.g., \"file:colon\") that cannot be used\n        // as the first segment of a relative-path reference, as it would be mistaken for a scheme name.\n        if ('' === $relativePath || false !== strpos(explode('/', $relativePath, 2)[0], ':')) {\n            $relativePath = \"./$relativePath\";\n        } elseif ('/' === $relativePath[0]) {\n            if ($base->getAuthority() != '' && $base->getPath() === '') {\n                // In this case an extra slash is added by resolve() automatically. So we must not add one here.\n                $relativePath = \".$relativePath\";\n            } else {\n                $relativePath = \"./$relativePath\";\n            }\n        }\n\n        return $relativePath;\n    }\n\n    private function __construct()\n    {\n        // cannot be instantiated\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/guzzlehttp/psr7/src/Utils.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace GuzzleHttp\\Psr7;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ServerRequestInterface;\nuse Psr\\Http\\Message\\StreamInterface;\nuse Psr\\Http\\Message\\UriInterface;\n\nfinal class Utils\n{\n    /**\n     * Remove the items given by the keys, case insensitively from the data.\n     *\n     * @param string[] $keys\n     */\n    public static function caselessRemove(array $keys, array $data): array\n    {\n        $result = [];\n\n        foreach ($keys as &$key) {\n            $key = strtolower($key);\n        }\n\n        foreach ($data as $k => $v) {\n            if (!is_string($k) || !in_array(strtolower($k), $keys)) {\n                $result[$k] = $v;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Copy the contents of a stream into another stream until the given number\n     * of bytes have been read.\n     *\n     * @param StreamInterface $source Stream to read from\n     * @param StreamInterface $dest   Stream to write to\n     * @param int             $maxLen Maximum number of bytes to read. Pass -1\n     *                                to read the entire stream.\n     *\n     * @throws \\RuntimeException on error.\n     */\n    public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): void\n    {\n        $bufferSize = 8192;\n\n        if ($maxLen === -1) {\n            while (!$source->eof()) {\n                if (!$dest->write($source->read($bufferSize))) {\n                    break;\n                }\n            }\n        } else {\n            $remaining = $maxLen;\n            while ($remaining > 0 && !$source->eof()) {\n                $buf = $source->read(min($bufferSize, $remaining));\n                $len = strlen($buf);\n                if (!$len) {\n                    break;\n                }\n                $remaining -= $len;\n                $dest->write($buf);\n            }\n        }\n    }\n\n    /**\n     * Copy the contents of a stream into a string until the given number of\n     * bytes have been read.\n     *\n     * @param StreamInterface $stream Stream to read\n     * @param int             $maxLen Maximum number of bytes to read. Pass -1\n     *                                to read the entire stream.\n     *\n     * @throws \\RuntimeException on error.\n     */\n    public static function copyToString(StreamInterface $stream, int $maxLen = -1): string\n    {\n        $buffer = '';\n\n        if ($maxLen === -1) {\n            while (!$stream->eof()) {\n                $buf = $stream->read(1048576);\n                if ($buf === '') {\n                    break;\n                }\n                $buffer .= $buf;\n            }\n            return $buffer;\n        }\n\n        $len = 0;\n        while (!$stream->eof() && $len < $maxLen) {\n            $buf = $stream->read($maxLen - $len);\n            if ($buf === '') {\n                break;\n            }\n            $buffer .= $buf;\n            $len = strlen($buffer);\n        }\n\n        return $buffer;\n    }\n\n    /**\n     * Calculate a hash of a stream.\n     *\n     * This method reads the entire stream to calculate a rolling hash, based\n     * on PHP's `hash_init` functions.\n     *\n     * @param StreamInterface $stream    Stream to calculate the hash for\n     * @param string          $algo      Hash algorithm (e.g. md5, crc32, etc)\n     * @param bool            $rawOutput Whether or not to use raw output\n     *\n     * @throws \\RuntimeException on error.\n     */\n    public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string\n    {\n        $pos = $stream->tell();\n\n        if ($pos > 0) {\n            $stream->rewind();\n        }\n\n        $ctx = hash_init($algo);\n        while (!$stream->eof()) {\n            hash_update($ctx, $stream->read(1048576));\n        }\n\n        $out = hash_final($ctx, $rawOutput);\n        $stream->seek($pos);\n\n        return $out;\n    }\n\n    /**\n     * Clone and modify a request with the given changes.\n     *\n     * This method is useful for reducing the number of clones needed to mutate\n     * a message.\n     *\n     * The changes can be one of:\n     * - method: (string) Changes the HTTP method.\n     * - set_headers: (array) Sets the given headers.\n     * - remove_headers: (array) Remove the given headers.\n     * - body: (mixed) Sets the given body.\n     * - uri: (UriInterface) Set the URI.\n     * - query: (string) Set the query string value of the URI.\n     * - version: (string) Set the protocol version.\n     *\n     * @param RequestInterface $request Request to clone and modify.\n     * @param array            $changes Changes to apply.\n     */\n    public static function modifyRequest(RequestInterface $request, array $changes): RequestInterface\n    {\n        if (!$changes) {\n            return $request;\n        }\n\n        $headers = $request->getHeaders();\n\n        if (!isset($changes['uri'])) {\n            $uri = $request->getUri();\n        } else {\n            // Remove the host header if one is on the URI\n            if ($host = $changes['uri']->getHost()) {\n                $changes['set_headers']['Host'] = $host;\n\n                if ($port = $changes['uri']->getPort()) {\n                    $standardPorts = ['http' => 80, 'https' => 443];\n                    $scheme = $changes['uri']->getScheme();\n                    if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) {\n                        $changes['set_headers']['Host'] .= ':' . $port;\n                    }\n                }\n            }\n            $uri = $changes['uri'];\n        }\n\n        if (!empty($changes['remove_headers'])) {\n            $headers = self::caselessRemove($changes['remove_headers'], $headers);\n        }\n\n        if (!empty($changes['set_headers'])) {\n            $headers = self::caselessRemove(array_keys($changes['set_headers']), $headers);\n            $headers = $changes['set_headers'] + $headers;\n        }\n\n        if (isset($changes['query'])) {\n            $uri = $uri->withQuery($changes['query']);\n        }\n\n        if ($request instanceof ServerRequestInterface) {\n            $new = (new ServerRequest(\n                $changes['method'] ?? $request->getMethod(),\n                $uri,\n                $headers,\n                $changes['body'] ?? $request->getBody(),\n                $changes['version'] ?? $request->getProtocolVersion(),\n                $request->getServerParams()\n            ))\n            ->withParsedBody($request->getParsedBody())\n            ->withQueryParams($request->getQueryParams())\n            ->withCookieParams($request->getCookieParams())\n            ->withUploadedFiles($request->getUploadedFiles());\n\n            foreach ($request->getAttributes() as $key => $value) {\n                $new = $new->withAttribute($key, $value);\n            }\n\n            return $new;\n        }\n\n        return new Request(\n            $changes['method'] ?? $request->getMethod(),\n            $uri,\n            $headers,\n            $changes['body'] ?? $request->getBody(),\n            $changes['version'] ?? $request->getProtocolVersion()\n        );\n    }\n\n    /**\n     * Read a line from the stream up to the maximum allowed buffer length.\n     *\n     * @param StreamInterface $stream    Stream to read from\n     * @param int|null        $maxLength Maximum buffer length\n     */\n    public static function readLine(StreamInterface $stream, ?int $maxLength = null): string\n    {\n        $buffer = '';\n        $size = 0;\n\n        while (!$stream->eof()) {\n            if ('' === ($byte = $stream->read(1))) {\n                return $buffer;\n            }\n            $buffer .= $byte;\n            // Break when a new line is found or the max length - 1 is reached\n            if ($byte === \"\\n\" || ++$size === $maxLength - 1) {\n                break;\n            }\n        }\n\n        return $buffer;\n    }\n\n    /**\n     * Create a new stream based on the input type.\n     *\n     * Options is an associative array that can contain the following keys:\n     * - metadata: Array of custom metadata.\n     * - size: Size of the stream.\n     *\n     * This method accepts the following `$resource` types:\n     * - `Psr\\Http\\Message\\StreamInterface`: Returns the value as-is.\n     * - `string`: Creates a stream object that uses the given string as the contents.\n     * - `resource`: Creates a stream object that wraps the given PHP stream resource.\n     * - `Iterator`: If the provided value implements `Iterator`, then a read-only\n     *   stream object will be created that wraps the given iterable. Each time the\n     *   stream is read from, data from the iterator will fill a buffer and will be\n     *   continuously called until the buffer is equal to the requested read size.\n     *   Subsequent read calls will first read from the buffer and then call `next`\n     *   on the underlying iterator until it is exhausted.\n     * - `object` with `__toString()`: If the object has the `__toString()` method,\n     *   the object will be cast to a string and then a stream will be returned that\n     *   uses the string value.\n     * - `NULL`: When `null` is passed, an empty stream object is returned.\n     * - `callable` When a callable is passed, a read-only stream object will be\n     *   created that invokes the given callable. The callable is invoked with the\n     *   number of suggested bytes to read. The callable can return any number of\n     *   bytes, but MUST return `false` when there is no more data to return. The\n     *   stream object that wraps the callable will invoke the callable until the\n     *   number of requested bytes are available. Any additional bytes will be\n     *   buffered and used in subsequent reads.\n     *\n     * @param resource|string|int|float|bool|StreamInterface|callable|\\Iterator|null $resource Entity body data\n     * @param array{size?: int, metadata?: array}                                    $options  Additional options\n     *\n     * @throws \\InvalidArgumentException if the $resource arg is not valid.\n     */\n    public static function streamFor($resource = '', array $options = []): StreamInterface\n    {\n        if (is_scalar($resource)) {\n            $stream = self::tryFopen('php://temp', 'r+');\n            if ($resource !== '') {\n                fwrite($stream, (string) $resource);\n                fseek($stream, 0);\n            }\n            return new Stream($stream, $options);\n        }\n\n        switch (gettype($resource)) {\n            case 'resource':\n                /*\n                 * The 'php://input' is a special stream with quirks and inconsistencies.\n                 * We avoid using that stream by reading it into php://temp\n                 */\n\n                /** @var resource $resource */\n                if ((\\stream_get_meta_data($resource)['uri'] ?? '') === 'php://input') {\n                    $stream = self::tryFopen('php://temp', 'w+');\n                    stream_copy_to_stream($resource, $stream);\n                    fseek($stream, 0);\n                    $resource = $stream;\n                }\n                return new Stream($resource, $options);\n            case 'object':\n                /** @var object $resource */\n                if ($resource instanceof StreamInterface) {\n                    return $resource;\n                } elseif ($resource instanceof \\Iterator) {\n                    return new PumpStream(function () use ($resource) {\n                        if (!$resource->valid()) {\n                            return false;\n                        }\n                        $result = $resource->current();\n                        $resource->next();\n                        return $result;\n                    }, $options);\n                } elseif (method_exists($resource, '__toString')) {\n                    return self::streamFor((string) $resource, $options);\n                }\n                break;\n            case 'NULL':\n                return new Stream(self::tryFopen('php://temp', 'r+'), $options);\n        }\n\n        if (is_callable($resource)) {\n            return new PumpStream($resource, $options);\n        }\n\n        throw new \\InvalidArgumentException('Invalid resource type: ' . gettype($resource));\n    }\n\n    /**\n     * Safely opens a PHP stream resource using a filename.\n     *\n     * When fopen fails, PHP normally raises a warning. This function adds an\n     * error handler that checks for errors and throws an exception instead.\n     *\n     * @param string $filename File to open\n     * @param string $mode     Mode used to open the file\n     *\n     * @return resource\n     *\n     * @throws \\RuntimeException if the file cannot be opened\n     */\n    public static function tryFopen(string $filename, string $mode)\n    {\n        $ex = null;\n        set_error_handler(static function (int $errno, string $errstr) use ($filename, $mode, &$ex): bool {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to open \"%s\" using mode \"%s\": %s',\n                $filename,\n                $mode,\n                $errstr\n            ));\n\n            return true;\n        });\n\n        try {\n            /** @var resource $handle */\n            $handle = fopen($filename, $mode);\n        } catch (\\Throwable $e) {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to open \"%s\" using mode \"%s\": %s',\n                $filename,\n                $mode,\n                $e->getMessage()\n            ), 0, $e);\n        }\n\n        restore_error_handler();\n\n        if ($ex) {\n            /** @var $ex \\RuntimeException */\n            throw $ex;\n        }\n\n        return $handle;\n    }\n\n    /**\n     * Safely gets the contents of a given stream.\n     *\n     * When stream_get_contents fails, PHP normally raises a warning. This\n     * function adds an error handler that checks for errors and throws an\n     * exception instead.\n     *\n     * @param resource $stream\n     *\n     * @throws \\RuntimeException if the stream cannot be read\n     */\n    public static function tryGetContents($stream): string\n    {\n        $ex = null;\n        set_error_handler(static function (int $errno, string $errstr) use (&$ex): bool {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to read stream contents: %s',\n                $errstr\n            ));\n\n            return true;\n        });\n\n        try {\n            /** @var string|false $contents */\n            $contents = stream_get_contents($stream);\n\n            if ($contents === false) {\n                $ex = new \\RuntimeException('Unable to read stream contents');\n            }\n        } catch (\\Throwable $e) {\n            $ex = new \\RuntimeException(sprintf(\n                'Unable to read stream contents: %s',\n                $e->getMessage()\n            ), 0, $e);\n        }\n\n        restore_error_handler();\n\n        if ($ex) {\n            /** @var $ex \\RuntimeException */\n            throw $ex;\n        }\n\n        return $contents;\n    }\n\n    /**\n     * Returns a UriInterface for the given value.\n     *\n     * This function accepts a string or UriInterface and returns a\n     * UriInterface for the given value. If the value is already a\n     * UriInterface, it is returned as-is.\n     *\n     * @param string|UriInterface $uri\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public static function uriFor($uri): UriInterface\n    {\n        if ($uri instanceof UriInterface) {\n            return $uri;\n        }\n\n        if (is_string($uri)) {\n            return new Uri($uri);\n        }\n\n        throw new \\InvalidArgumentException('URI must be a string or UriInterface');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/Arr.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nuse ArgumentCountError;\nuse ArrayAccess;\nuse Illuminate\\Support\\Traits\\Macroable;\nuse InvalidArgumentException;\n\nclass Arr\n{\n    use Macroable;\n\n    /**\n     * Determine whether the given value is array accessible.\n     *\n     * @param  mixed  $value\n     * @return bool\n     */\n    public static function accessible($value)\n    {\n        return is_array($value) || $value instanceof ArrayAccess;\n    }\n\n    /**\n     * Add an element to an array using \"dot\" notation if it doesn't exist.\n     *\n     * @param  array  $array\n     * @param  string|int|float  $key\n     * @param  mixed  $value\n     * @return array\n     */\n    public static function add($array, $key, $value)\n    {\n        if (is_null(static::get($array, $key))) {\n            static::set($array, $key, $value);\n        }\n\n        return $array;\n    }\n\n    /**\n     * Collapse an array of arrays into a single array.\n     *\n     * @param  iterable  $array\n     * @return array\n     */\n    public static function collapse($array)\n    {\n        $results = [];\n\n        foreach ($array as $values) {\n            if ($values instanceof Collection) {\n                $values = $values->all();\n            } elseif (! is_array($values)) {\n                continue;\n            }\n\n            $results[] = $values;\n        }\n\n        return array_merge([], ...$results);\n    }\n\n    /**\n     * Cross join the given arrays, returning all possible permutations.\n     *\n     * @param  iterable  ...$arrays\n     * @return array\n     */\n    public static function crossJoin(...$arrays)\n    {\n        $results = [[]];\n\n        foreach ($arrays as $index => $array) {\n            $append = [];\n\n            foreach ($results as $product) {\n                foreach ($array as $item) {\n                    $product[$index] = $item;\n\n                    $append[] = $product;\n                }\n            }\n\n            $results = $append;\n        }\n\n        return $results;\n    }\n\n    /**\n     * Divide an array into two arrays. One with keys and the other with values.\n     *\n     * @param  array  $array\n     * @return array\n     */\n    public static function divide($array)\n    {\n        return [array_keys($array), array_values($array)];\n    }\n\n    /**\n     * Flatten a multi-dimensional associative array with dots.\n     *\n     * @param  iterable  $array\n     * @param  string  $prepend\n     * @return array\n     */\n    public static function dot($array, $prepend = '')\n    {\n        $results = [];\n\n        foreach ($array as $key => $value) {\n            if (is_array($value) && ! empty($value)) {\n                $results = array_merge($results, static::dot($value, $prepend.$key.'.'));\n            } else {\n                $results[$prepend.$key] = $value;\n            }\n        }\n\n        return $results;\n    }\n\n    /**\n     * Convert a flatten \"dot\" notation array into an expanded array.\n     *\n     * @param  iterable  $array\n     * @return array\n     */\n    public static function undot($array)\n    {\n        $results = [];\n\n        foreach ($array as $key => $value) {\n            static::set($results, $key, $value);\n        }\n\n        return $results;\n    }\n\n    /**\n     * Get all of the given array except for a specified array of keys.\n     *\n     * @param  array  $array\n     * @param  array|string|int|float  $keys\n     * @return array\n     */\n    public static function except($array, $keys)\n    {\n        static::forget($array, $keys);\n\n        return $array;\n    }\n\n    /**\n     * Determine if the given key exists in the provided array.\n     *\n     * @param  \\ArrayAccess|array  $array\n     * @param  string|int  $key\n     * @return bool\n     */\n    public static function exists($array, $key)\n    {\n        if ($array instanceof Enumerable) {\n            return $array->has($key);\n        }\n\n        if ($array instanceof ArrayAccess) {\n            return $array->offsetExists($key);\n        }\n\n        if (is_float($key)) {\n            $key = (string) $key;\n        }\n\n        return array_key_exists($key, $array);\n    }\n\n    /**\n     * Return the first element in an array passing a given truth test.\n     *\n     * @param  iterable  $array\n     * @param  callable|null  $callback\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public static function first($array, ?callable $callback = null, $default = null)\n    {\n        if (is_null($callback)) {\n            if (empty($array)) {\n                return value($default);\n            }\n\n            foreach ($array as $item) {\n                return $item;\n            }\n\n            return value($default);\n        }\n\n        foreach ($array as $key => $value) {\n            if ($callback($value, $key)) {\n                return $value;\n            }\n        }\n\n        return value($default);\n    }\n\n    /**\n     * Return the last element in an array passing a given truth test.\n     *\n     * @param  array  $array\n     * @param  callable|null  $callback\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public static function last($array, ?callable $callback = null, $default = null)\n    {\n        if (is_null($callback)) {\n            return empty($array) ? value($default) : end($array);\n        }\n\n        return static::first(array_reverse($array, true), $callback, $default);\n    }\n\n    /**\n     * Take the first or last {$limit} items from an array.\n     *\n     * @param  array  $array\n     * @param  int  $limit\n     * @return array\n     */\n    public static function take($array, $limit)\n    {\n        if ($limit < 0) {\n            return array_slice($array, $limit, abs($limit));\n        }\n\n        return array_slice($array, 0, $limit);\n    }\n\n    /**\n     * Flatten a multi-dimensional array into a single level.\n     *\n     * @param  iterable  $array\n     * @param  int  $depth\n     * @return array\n     */\n    public static function flatten($array, $depth = INF)\n    {\n        $result = [];\n\n        foreach ($array as $item) {\n            $item = $item instanceof Collection ? $item->all() : $item;\n\n            if (! is_array($item)) {\n                $result[] = $item;\n            } else {\n                $values = $depth === 1\n                    ? array_values($item)\n                    : static::flatten($item, $depth - 1);\n\n                foreach ($values as $value) {\n                    $result[] = $value;\n                }\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Remove one or many array items from a given array using \"dot\" notation.\n     *\n     * @param  array  $array\n     * @param  array|string|int|float  $keys\n     * @return void\n     */\n    public static function forget(&$array, $keys)\n    {\n        $original = &$array;\n\n        $keys = (array) $keys;\n\n        if (count($keys) === 0) {\n            return;\n        }\n\n        foreach ($keys as $key) {\n            // if the exact key exists in the top-level, remove it\n            if (static::exists($array, $key)) {\n                unset($array[$key]);\n\n                continue;\n            }\n\n            $parts = explode('.', $key);\n\n            // clean up before each pass\n            $array = &$original;\n\n            while (count($parts) > 1) {\n                $part = array_shift($parts);\n\n                if (isset($array[$part]) && static::accessible($array[$part])) {\n                    $array = &$array[$part];\n                } else {\n                    continue 2;\n                }\n            }\n\n            unset($array[array_shift($parts)]);\n        }\n    }\n\n    /**\n     * Get an item from an array using \"dot\" notation.\n     *\n     * @param  \\ArrayAccess|array  $array\n     * @param  string|int|null  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public static function get($array, $key, $default = null)\n    {\n        if (! static::accessible($array)) {\n            return value($default);\n        }\n\n        if (is_null($key)) {\n            return $array;\n        }\n\n        if (static::exists($array, $key)) {\n            return $array[$key];\n        }\n\n        if (! str_contains($key, '.')) {\n            return $array[$key] ?? value($default);\n        }\n\n        foreach (explode('.', $key) as $segment) {\n            if (static::accessible($array) && static::exists($array, $segment)) {\n                $array = $array[$segment];\n            } else {\n                return value($default);\n            }\n        }\n\n        return $array;\n    }\n\n    /**\n     * Check if an item or items exist in an array using \"dot\" notation.\n     *\n     * @param  \\ArrayAccess|array  $array\n     * @param  string|array  $keys\n     * @return bool\n     */\n    public static function has($array, $keys)\n    {\n        $keys = (array) $keys;\n\n        if (! $array || $keys === []) {\n            return false;\n        }\n\n        foreach ($keys as $key) {\n            $subKeyArray = $array;\n\n            if (static::exists($array, $key)) {\n                continue;\n            }\n\n            foreach (explode('.', $key) as $segment) {\n                if (static::accessible($subKeyArray) && static::exists($subKeyArray, $segment)) {\n                    $subKeyArray = $subKeyArray[$segment];\n                } else {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Determine if any of the keys exist in an array using \"dot\" notation.\n     *\n     * @param  \\ArrayAccess|array  $array\n     * @param  string|array  $keys\n     * @return bool\n     */\n    public static function hasAny($array, $keys)\n    {\n        if (is_null($keys)) {\n            return false;\n        }\n\n        $keys = (array) $keys;\n\n        if (! $array) {\n            return false;\n        }\n\n        if ($keys === []) {\n            return false;\n        }\n\n        foreach ($keys as $key) {\n            if (static::has($array, $key)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Determines if an array is associative.\n     *\n     * An array is \"associative\" if it doesn't have sequential numerical keys beginning with zero.\n     *\n     * @param  array  $array\n     * @return bool\n     */\n    public static function isAssoc(array $array)\n    {\n        return ! array_is_list($array);\n    }\n\n    /**\n     * Determines if an array is a list.\n     *\n     * An array is a \"list\" if all array keys are sequential integers starting from 0 with no gaps in between.\n     *\n     * @param  array  $array\n     * @return bool\n     */\n    public static function isList($array)\n    {\n        return array_is_list($array);\n    }\n\n    /**\n     * Join all items using a string. The final items can use a separate glue string.\n     *\n     * @param  array  $array\n     * @param  string  $glue\n     * @param  string  $finalGlue\n     * @return string\n     */\n    public static function join($array, $glue, $finalGlue = '')\n    {\n        if ($finalGlue === '') {\n            return implode($glue, $array);\n        }\n\n        if (count($array) === 0) {\n            return '';\n        }\n\n        if (count($array) === 1) {\n            return end($array);\n        }\n\n        $finalItem = array_pop($array);\n\n        return implode($glue, $array).$finalGlue.$finalItem;\n    }\n\n    /**\n     * Key an associative array by a field or using a callback.\n     *\n     * @param  array  $array\n     * @param  callable|array|string  $keyBy\n     * @return array\n     */\n    public static function keyBy($array, $keyBy)\n    {\n        return Collection::make($array)->keyBy($keyBy)->all();\n    }\n\n    /**\n     * Prepend the key names of an associative array.\n     *\n     * @param  array  $array\n     * @param  string  $prependWith\n     * @return array\n     */\n    public static function prependKeysWith($array, $prependWith)\n    {\n        return static::mapWithKeys($array, fn ($item, $key) => [$prependWith.$key => $item]);\n    }\n\n    /**\n     * Get a subset of the items from the given array.\n     *\n     * @param  array  $array\n     * @param  array|string  $keys\n     * @return array\n     */\n    public static function only($array, $keys)\n    {\n        return array_intersect_key($array, array_flip((array) $keys));\n    }\n\n    /**\n     * Select an array of values from an array.\n     *\n     * @param  array  $array\n     * @param  array|string  $keys\n     * @return array\n     */\n    public static function select($array, $keys)\n    {\n        $keys = static::wrap($keys);\n\n        return static::map($array, function ($item) use ($keys) {\n            $result = [];\n\n            foreach ($keys as $key) {\n                if (Arr::accessible($item) && Arr::exists($item, $key)) {\n                    $result[$key] = $item[$key];\n                } elseif (is_object($item) && isset($item->{$key})) {\n                    $result[$key] = $item->{$key};\n                }\n            }\n\n            return $result;\n        });\n    }\n\n    /**\n     * Pluck an array of values from an array.\n     *\n     * @param  iterable  $array\n     * @param  string|array|int|null  $value\n     * @param  string|array|null  $key\n     * @return array\n     */\n    public static function pluck($array, $value, $key = null)\n    {\n        $results = [];\n\n        [$value, $key] = static::explodePluckParameters($value, $key);\n\n        foreach ($array as $item) {\n            $itemValue = data_get($item, $value);\n\n            // If the key is \"null\", we will just append the value to the array and keep\n            // looping. Otherwise we will key the array using the value of the key we\n            // received from the developer. Then we'll return the final array form.\n            if (is_null($key)) {\n                $results[] = $itemValue;\n            } else {\n                $itemKey = data_get($item, $key);\n\n                if (is_object($itemKey) && method_exists($itemKey, '__toString')) {\n                    $itemKey = (string) $itemKey;\n                }\n\n                $results[$itemKey] = $itemValue;\n            }\n        }\n\n        return $results;\n    }\n\n    /**\n     * Explode the \"value\" and \"key\" arguments passed to \"pluck\".\n     *\n     * @param  string|array  $value\n     * @param  string|array|null  $key\n     * @return array\n     */\n    protected static function explodePluckParameters($value, $key)\n    {\n        $value = is_string($value) ? explode('.', $value) : $value;\n\n        $key = is_null($key) || is_array($key) ? $key : explode('.', $key);\n\n        return [$value, $key];\n    }\n\n    /**\n     * Run a map over each of the items in the array.\n     *\n     * @param  array  $array\n     * @param  callable  $callback\n     * @return array\n     */\n    public static function map(array $array, callable $callback)\n    {\n        $keys = array_keys($array);\n\n        try {\n            $items = array_map($callback, $array, $keys);\n        } catch (ArgumentCountError) {\n            $items = array_map($callback, $array);\n        }\n\n        return array_combine($keys, $items);\n    }\n\n    /**\n     * Run an associative map over each of the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TKey\n     * @template TValue\n     * @template TMapWithKeysKey of array-key\n     * @template TMapWithKeysValue\n     *\n     * @param  array<TKey, TValue>  $array\n     * @param  callable(TValue, TKey): array<TMapWithKeysKey, TMapWithKeysValue>  $callback\n     * @return array\n     */\n    public static function mapWithKeys(array $array, callable $callback)\n    {\n        $result = [];\n\n        foreach ($array as $key => $value) {\n            $assoc = $callback($value, $key);\n\n            foreach ($assoc as $mapKey => $mapValue) {\n                $result[$mapKey] = $mapValue;\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Push an item onto the beginning of an array.\n     *\n     * @param  array  $array\n     * @param  mixed  $value\n     * @param  mixed  $key\n     * @return array\n     */\n    public static function prepend($array, $value, $key = null)\n    {\n        if (func_num_args() == 2) {\n            array_unshift($array, $value);\n        } else {\n            $array = [$key => $value] + $array;\n        }\n\n        return $array;\n    }\n\n    /**\n     * Get a value from the array, and remove it.\n     *\n     * @param  array  $array\n     * @param  string|int  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public static function pull(&$array, $key, $default = null)\n    {\n        $value = static::get($array, $key, $default);\n\n        static::forget($array, $key);\n\n        return $value;\n    }\n\n    /**\n     * Convert the array into a query string.\n     *\n     * @param  array  $array\n     * @return string\n     */\n    public static function query($array)\n    {\n        return http_build_query($array, '', '&', PHP_QUERY_RFC3986);\n    }\n\n    /**\n     * Get one or a specified number of random values from an array.\n     *\n     * @param  array  $array\n     * @param  int|null  $number\n     * @param  bool  $preserveKeys\n     * @return mixed\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public static function random($array, $number = null, $preserveKeys = false)\n    {\n        $requested = is_null($number) ? 1 : $number;\n\n        $count = count($array);\n\n        if ($requested > $count) {\n            throw new InvalidArgumentException(\n                \"You requested {$requested} items, but there are only {$count} items available.\"\n            );\n        }\n\n        if (is_null($number)) {\n            return $array[array_rand($array)];\n        }\n\n        if ((int) $number === 0) {\n            return [];\n        }\n\n        $keys = array_rand($array, $number);\n\n        $results = [];\n\n        if ($preserveKeys) {\n            foreach ((array) $keys as $key) {\n                $results[$key] = $array[$key];\n            }\n        } else {\n            foreach ((array) $keys as $key) {\n                $results[] = $array[$key];\n            }\n        }\n\n        return $results;\n    }\n\n    /**\n     * Set an array item to a given value using \"dot\" notation.\n     *\n     * If no key is given to the method, the entire array will be replaced.\n     *\n     * @param  array  $array\n     * @param  string|int|null  $key\n     * @param  mixed  $value\n     * @return array\n     */\n    public static function set(&$array, $key, $value)\n    {\n        if (is_null($key)) {\n            return $array = $value;\n        }\n\n        $keys = explode('.', $key);\n\n        foreach ($keys as $i => $key) {\n            if (count($keys) === 1) {\n                break;\n            }\n\n            unset($keys[$i]);\n\n            // If the key doesn't exist at this depth, we will just create an empty array\n            // to hold the next value, allowing us to create the arrays to hold final\n            // values at the correct depth. Then we'll keep digging into the array.\n            if (! isset($array[$key]) || ! is_array($array[$key])) {\n                $array[$key] = [];\n            }\n\n            $array = &$array[$key];\n        }\n\n        $array[array_shift($keys)] = $value;\n\n        return $array;\n    }\n\n    /**\n     * Shuffle the given array and return the result.\n     *\n     * @param  array  $array\n     * @param  int|null  $seed\n     * @return array\n     */\n    public static function shuffle($array, $seed = null)\n    {\n        if (is_null($seed)) {\n            shuffle($array);\n        } else {\n            mt_srand($seed);\n            shuffle($array);\n            mt_srand();\n        }\n\n        return $array;\n    }\n\n    /**\n     * Sort the array using the given callback or \"dot\" notation.\n     *\n     * @param  array  $array\n     * @param  callable|array|string|null  $callback\n     * @return array\n     */\n    public static function sort($array, $callback = null)\n    {\n        return Collection::make($array)->sortBy($callback)->all();\n    }\n\n    /**\n     * Sort the array in descending order using the given callback or \"dot\" notation.\n     *\n     * @param  array  $array\n     * @param  callable|array|string|null  $callback\n     * @return array\n     */\n    public static function sortDesc($array, $callback = null)\n    {\n        return Collection::make($array)->sortByDesc($callback)->all();\n    }\n\n    /**\n     * Recursively sort an array by keys and values.\n     *\n     * @param  array  $array\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return array\n     */\n    public static function sortRecursive($array, $options = SORT_REGULAR, $descending = false)\n    {\n        foreach ($array as &$value) {\n            if (is_array($value)) {\n                $value = static::sortRecursive($value, $options, $descending);\n            }\n        }\n\n        if (! array_is_list($array)) {\n            $descending\n                    ? krsort($array, $options)\n                    : ksort($array, $options);\n        } else {\n            $descending\n                    ? rsort($array, $options)\n                    : sort($array, $options);\n        }\n\n        return $array;\n    }\n\n    /**\n     * Recursively sort an array by keys and values in descending order.\n     *\n     * @param  array  $array\n     * @param  int  $options\n     * @return array\n     */\n    public static function sortRecursiveDesc($array, $options = SORT_REGULAR)\n    {\n        return static::sortRecursive($array, $options, true);\n    }\n\n    /**\n     * Conditionally compile classes from an array into a CSS class list.\n     *\n     * @param  array  $array\n     * @return string\n     */\n    public static function toCssClasses($array)\n    {\n        $classList = static::wrap($array);\n\n        $classes = [];\n\n        foreach ($classList as $class => $constraint) {\n            if (is_numeric($class)) {\n                $classes[] = $constraint;\n            } elseif ($constraint) {\n                $classes[] = $class;\n            }\n        }\n\n        return implode(' ', $classes);\n    }\n\n    /**\n     * Conditionally compile styles from an array into a style list.\n     *\n     * @param  array  $array\n     * @return string\n     */\n    public static function toCssStyles($array)\n    {\n        $styleList = static::wrap($array);\n\n        $styles = [];\n\n        foreach ($styleList as $class => $constraint) {\n            if (is_numeric($class)) {\n                $styles[] = Str::finish($constraint, ';');\n            } elseif ($constraint) {\n                $styles[] = Str::finish($class, ';');\n            }\n        }\n\n        return implode(' ', $styles);\n    }\n\n    /**\n     * Filter the array using the given callback.\n     *\n     * @param  array  $array\n     * @param  callable  $callback\n     * @return array\n     */\n    public static function where($array, callable $callback)\n    {\n        return array_filter($array, $callback, ARRAY_FILTER_USE_BOTH);\n    }\n\n    /**\n     * Filter items where the value is not null.\n     *\n     * @param  array  $array\n     * @return array\n     */\n    public static function whereNotNull($array)\n    {\n        return static::where($array, fn ($value) => ! is_null($value));\n    }\n\n    /**\n     * If the given value is not an array and not null, wrap it in one.\n     *\n     * @param  mixed  $value\n     * @return array\n     */\n    public static function wrap($value)\n    {\n        if (is_null($value)) {\n            return [];\n        }\n\n        return is_array($value) ? $value : [$value];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/Collection.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nuse ArrayAccess;\nuse ArrayIterator;\nuse Illuminate\\Contracts\\Support\\CanBeEscapedWhenCastToString;\nuse Illuminate\\Support\\Traits\\EnumeratesValues;\nuse Illuminate\\Support\\Traits\\Macroable;\nuse InvalidArgumentException;\nuse stdClass;\nuse Traversable;\n\n/**\n * @template TKey of array-key\n *\n * @template-covariant TValue\n *\n * @implements \\ArrayAccess<TKey, TValue>\n * @implements \\Illuminate\\Support\\Enumerable<TKey, TValue>\n */\nclass Collection implements ArrayAccess, CanBeEscapedWhenCastToString, Enumerable\n{\n    /**\n     * @use \\Illuminate\\Support\\Traits\\EnumeratesValues<TKey, TValue>\n     */\n    use EnumeratesValues, Macroable;\n\n    /**\n     * The items contained in the collection.\n     *\n     * @var array<TKey, TValue>\n     */\n    protected $items = [];\n\n    /**\n     * Create a new collection.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>|null  $items\n     * @return void\n     */\n    public function __construct($items = [])\n    {\n        $this->items = $this->getArrayableItems($items);\n    }\n\n    /**\n     * Create a collection with the given range.\n     *\n     * @param  int  $from\n     * @param  int  $to\n     * @return static<int, int>\n     */\n    public static function range($from, $to)\n    {\n        return new static(range($from, $to));\n    }\n\n    /**\n     * Get all of the items in the collection.\n     *\n     * @return array<TKey, TValue>\n     */\n    public function all()\n    {\n        return $this->items;\n    }\n\n    /**\n     * Get a lazy collection for the items in this collection.\n     *\n     * @return \\Illuminate\\Support\\LazyCollection<TKey, TValue>\n     */\n    public function lazy()\n    {\n        return new LazyCollection($this->items);\n    }\n\n    /**\n     * Get the average value of a given key.\n     *\n     * @param  (callable(TValue): float|int)|string|null  $callback\n     * @return float|int|null\n     */\n    public function avg($callback = null)\n    {\n        $callback = $this->valueRetriever($callback);\n\n        $items = $this\n            ->map(fn ($value) => $callback($value))\n            ->filter(fn ($value) => ! is_null($value));\n\n        if ($count = $items->count()) {\n            return $items->sum() / $count;\n        }\n    }\n\n    /**\n     * Get the median of a given key.\n     *\n     * @param  string|array<array-key, string>|null  $key\n     * @return float|int|null\n     */\n    public function median($key = null)\n    {\n        $values = (isset($key) ? $this->pluck($key) : $this)\n            ->filter(fn ($item) => ! is_null($item))\n            ->sort()->values();\n\n        $count = $values->count();\n\n        if ($count === 0) {\n            return;\n        }\n\n        $middle = (int) ($count / 2);\n\n        if ($count % 2) {\n            return $values->get($middle);\n        }\n\n        return (new static([\n            $values->get($middle - 1), $values->get($middle),\n        ]))->average();\n    }\n\n    /**\n     * Get the mode of a given key.\n     *\n     * @param  string|array<array-key, string>|null  $key\n     * @return array<int, float|int>|null\n     */\n    public function mode($key = null)\n    {\n        if ($this->count() === 0) {\n            return;\n        }\n\n        $collection = isset($key) ? $this->pluck($key) : $this;\n\n        $counts = new static;\n\n        $collection->each(fn ($value) => $counts[$value] = isset($counts[$value]) ? $counts[$value] + 1 : 1);\n\n        $sorted = $counts->sort();\n\n        $highestValue = $sorted->last();\n\n        return $sorted->filter(fn ($value) => $value == $highestValue)\n            ->sort()->keys()->all();\n    }\n\n    /**\n     * Collapse the collection of items into a single array.\n     *\n     * @return static<int, mixed>\n     */\n    public function collapse()\n    {\n        return new static(Arr::collapse($this->items));\n    }\n\n    /**\n     * Determine if an item exists in the collection.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function contains($key, $operator = null, $value = null)\n    {\n        if (func_num_args() === 1) {\n            if ($this->useAsCallable($key)) {\n                $placeholder = new stdClass;\n\n                return $this->first($key, $placeholder) !== $placeholder;\n            }\n\n            return in_array($key, $this->items);\n        }\n\n        return $this->contains($this->operatorForWhere(...func_get_args()));\n    }\n\n    /**\n     * Determine if an item exists, using strict comparison.\n     *\n     * @param  (callable(TValue): bool)|TValue|array-key  $key\n     * @param  TValue|null  $value\n     * @return bool\n     */\n    public function containsStrict($key, $value = null)\n    {\n        if (func_num_args() === 2) {\n            return $this->contains(fn ($item) => data_get($item, $key) === $value);\n        }\n\n        if ($this->useAsCallable($key)) {\n            return ! is_null($this->first($key));\n        }\n\n        return in_array($key, $this->items, true);\n    }\n\n    /**\n     * Determine if an item is not contained in the collection.\n     *\n     * @param  mixed  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function doesntContain($key, $operator = null, $value = null)\n    {\n        return ! $this->contains(...func_get_args());\n    }\n\n    /**\n     * Cross join with the given lists, returning all possible permutations.\n     *\n     * @template TCrossJoinKey\n     * @template TCrossJoinValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TCrossJoinKey, TCrossJoinValue>|iterable<TCrossJoinKey, TCrossJoinValue>  ...$lists\n     * @return static<int, array<int, TValue|TCrossJoinValue>>\n     */\n    public function crossJoin(...$lists)\n    {\n        return new static(Arr::crossJoin(\n            $this->items, ...array_map([$this, 'getArrayableItems'], $lists)\n        ));\n    }\n\n    /**\n     * Get the items in the collection that are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @return static\n     */\n    public function diff($items)\n    {\n        return new static(array_diff($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Get the items in the collection that are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function diffUsing($items, callable $callback)\n    {\n        return new static(array_udiff($this->items, $this->getArrayableItems($items), $callback));\n    }\n\n    /**\n     * Get the items in the collection whose keys and values are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function diffAssoc($items)\n    {\n        return new static(array_diff_assoc($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Get the items in the collection whose keys and values are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function diffAssocUsing($items, callable $callback)\n    {\n        return new static(array_diff_uassoc($this->items, $this->getArrayableItems($items), $callback));\n    }\n\n    /**\n     * Get the items in the collection whose keys are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function diffKeys($items)\n    {\n        return new static(array_diff_key($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Get the items in the collection whose keys are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function diffKeysUsing($items, callable $callback)\n    {\n        return new static(array_diff_ukey($this->items, $this->getArrayableItems($items), $callback));\n    }\n\n    /**\n     * Retrieve duplicate items from the collection.\n     *\n     * @param  (callable(TValue): bool)|string|null  $callback\n     * @param  bool  $strict\n     * @return static\n     */\n    public function duplicates($callback = null, $strict = false)\n    {\n        $items = $this->map($this->valueRetriever($callback));\n\n        $uniqueItems = $items->unique(null, $strict);\n\n        $compare = $this->duplicateComparator($strict);\n\n        $duplicates = new static;\n\n        foreach ($items as $key => $value) {\n            if ($uniqueItems->isNotEmpty() && $compare($value, $uniqueItems->first())) {\n                $uniqueItems->shift();\n            } else {\n                $duplicates[$key] = $value;\n            }\n        }\n\n        return $duplicates;\n    }\n\n    /**\n     * Retrieve duplicate items from the collection using strict comparison.\n     *\n     * @param  (callable(TValue): bool)|string|null  $callback\n     * @return static\n     */\n    public function duplicatesStrict($callback = null)\n    {\n        return $this->duplicates($callback, true);\n    }\n\n    /**\n     * Get the comparison function to detect duplicates.\n     *\n     * @param  bool  $strict\n     * @return callable(TValue, TValue): bool\n     */\n    protected function duplicateComparator($strict)\n    {\n        if ($strict) {\n            return fn ($a, $b) => $a === $b;\n        }\n\n        return fn ($a, $b) => $a == $b;\n    }\n\n    /**\n     * Get all items except for those with the specified keys.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>|string  $keys\n     * @return static\n     */\n    public function except($keys)\n    {\n        if (is_null($keys)) {\n            return new static($this->items);\n        }\n\n        if ($keys instanceof Enumerable) {\n            $keys = $keys->all();\n        } elseif (! is_array($keys)) {\n            $keys = func_get_args();\n        }\n\n        return new static(Arr::except($this->items, $keys));\n    }\n\n    /**\n     * Run a filter over each of the items.\n     *\n     * @param  (callable(TValue, TKey): bool)|null  $callback\n     * @return static\n     */\n    public function filter(?callable $callback = null)\n    {\n        if ($callback) {\n            return new static(Arr::where($this->items, $callback));\n        }\n\n        return new static(array_filter($this->items));\n    }\n\n    /**\n     * Get the first item from the collection passing the given truth test.\n     *\n     * @template TFirstDefault\n     *\n     * @param  (callable(TValue, TKey): bool)|null  $callback\n     * @param  TFirstDefault|(\\Closure(): TFirstDefault)  $default\n     * @return TValue|TFirstDefault\n     */\n    public function first(?callable $callback = null, $default = null)\n    {\n        return Arr::first($this->items, $callback, $default);\n    }\n\n    /**\n     * Get a flattened array of the items in the collection.\n     *\n     * @param  int  $depth\n     * @return static<int, mixed>\n     */\n    public function flatten($depth = INF)\n    {\n        return new static(Arr::flatten($this->items, $depth));\n    }\n\n    /**\n     * Flip the items in the collection.\n     *\n     * @return static<TValue, TKey>\n     */\n    public function flip()\n    {\n        return new static(array_flip($this->items));\n    }\n\n    /**\n     * Remove an item from the collection by key.\n     *\n     * \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TKey>|TKey  $keys\n     *\n     * @return $this\n     */\n    public function forget($keys)\n    {\n        foreach ($this->getArrayableItems($keys) as $key) {\n            $this->offsetUnset($key);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Get an item from the collection by key.\n     *\n     * @template TGetDefault\n     *\n     * @param  TKey  $key\n     * @param  TGetDefault|(\\Closure(): TGetDefault)  $default\n     * @return TValue|TGetDefault\n     */\n    public function get($key, $default = null)\n    {\n        if (array_key_exists($key, $this->items)) {\n            return $this->items[$key];\n        }\n\n        return value($default);\n    }\n\n    /**\n     * Get an item from the collection by key or add it to collection if it does not exist.\n     *\n     * @template TGetOrPutValue\n     *\n     * @param  mixed  $key\n     * @param  TGetOrPutValue|(\\Closure(): TGetOrPutValue)  $value\n     * @return TValue|TGetOrPutValue\n     */\n    public function getOrPut($key, $value)\n    {\n        if (array_key_exists($key, $this->items)) {\n            return $this->items[$key];\n        }\n\n        $this->offsetSet($key, $value = value($value));\n\n        return $value;\n    }\n\n    /**\n     * Group an associative array by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|array|string  $groupBy\n     * @param  bool  $preserveKeys\n     * @return static<array-key, static<array-key, TValue>>\n     */\n    public function groupBy($groupBy, $preserveKeys = false)\n    {\n        if (! $this->useAsCallable($groupBy) && is_array($groupBy)) {\n            $nextGroups = $groupBy;\n\n            $groupBy = array_shift($nextGroups);\n        }\n\n        $groupBy = $this->valueRetriever($groupBy);\n\n        $results = [];\n\n        foreach ($this->items as $key => $value) {\n            $groupKeys = $groupBy($value, $key);\n\n            if (! is_array($groupKeys)) {\n                $groupKeys = [$groupKeys];\n            }\n\n            foreach ($groupKeys as $groupKey) {\n                $groupKey = match (true) {\n                    is_bool($groupKey) => (int) $groupKey,\n                    $groupKey instanceof \\BackedEnum => $groupKey->value,\n                    $groupKey instanceof \\Stringable => (string) $groupKey,\n                    default => $groupKey,\n                };\n\n                if (! array_key_exists($groupKey, $results)) {\n                    $results[$groupKey] = new static;\n                }\n\n                $results[$groupKey]->offsetSet($preserveKeys ? $key : null, $value);\n            }\n        }\n\n        $result = new static($results);\n\n        if (! empty($nextGroups)) {\n            return $result->map->groupBy($nextGroups, $preserveKeys);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Key an associative array by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|array|string  $keyBy\n     * @return static<array-key, TValue>\n     */\n    public function keyBy($keyBy)\n    {\n        $keyBy = $this->valueRetriever($keyBy);\n\n        $results = [];\n\n        foreach ($this->items as $key => $item) {\n            $resolvedKey = $keyBy($item, $key);\n\n            if (is_object($resolvedKey)) {\n                $resolvedKey = (string) $resolvedKey;\n            }\n\n            $results[$resolvedKey] = $item;\n        }\n\n        return new static($results);\n    }\n\n    /**\n     * Determine if an item exists in the collection by key.\n     *\n     * @param  TKey|array<array-key, TKey>  $key\n     * @return bool\n     */\n    public function has($key)\n    {\n        $keys = is_array($key) ? $key : func_get_args();\n\n        foreach ($keys as $value) {\n            if (! array_key_exists($value, $this->items)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Determine if any of the keys exist in the collection.\n     *\n     * @param  mixed  $key\n     * @return bool\n     */\n    public function hasAny($key)\n    {\n        if ($this->isEmpty()) {\n            return false;\n        }\n\n        $keys = is_array($key) ? $key : func_get_args();\n\n        foreach ($keys as $value) {\n            if ($this->has($value)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Concatenate values of a given key as a string.\n     *\n     * @param  callable|string  $value\n     * @param  string|null  $glue\n     * @return string\n     */\n    public function implode($value, $glue = null)\n    {\n        if ($this->useAsCallable($value)) {\n            return implode($glue ?? '', $this->map($value)->all());\n        }\n\n        $first = $this->first();\n\n        if (is_array($first) || (is_object($first) && ! $first instanceof Stringable)) {\n            return implode($glue ?? '', $this->pluck($value)->all());\n        }\n\n        return implode($value ?? '', $this->items);\n    }\n\n    /**\n     * Intersect the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersect($items)\n    {\n        return new static(array_intersect($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Intersect the collection with the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function intersectUsing($items, callable $callback)\n    {\n        return new static(array_uintersect($this->items, $this->getArrayableItems($items), $callback));\n    }\n\n    /**\n     * Intersect the collection with the given items with additional index check.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersectAssoc($items)\n    {\n        return new static(array_intersect_assoc($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Intersect the collection with the given items with additional index check, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function intersectAssocUsing($items, callable $callback)\n    {\n        return new static(array_intersect_uassoc($this->items, $this->getArrayableItems($items), $callback));\n    }\n\n    /**\n     * Intersect the collection with the given items by key.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersectByKeys($items)\n    {\n        return new static(array_intersect_key(\n            $this->items, $this->getArrayableItems($items)\n        ));\n    }\n\n    /**\n     * Determine if the collection is empty or not.\n     *\n     * @return bool\n     */\n    public function isEmpty()\n    {\n        return empty($this->items);\n    }\n\n    /**\n     * Determine if the collection contains a single item.\n     *\n     * @return bool\n     */\n    public function containsOneItem()\n    {\n        return $this->count() === 1;\n    }\n\n    /**\n     * Join all items from the collection using a string. The final items can use a separate glue string.\n     *\n     * @param  string  $glue\n     * @param  string  $finalGlue\n     * @return string\n     */\n    public function join($glue, $finalGlue = '')\n    {\n        if ($finalGlue === '') {\n            return $this->implode($glue);\n        }\n\n        $count = $this->count();\n\n        if ($count === 0) {\n            return '';\n        }\n\n        if ($count === 1) {\n            return $this->last();\n        }\n\n        $collection = new static($this->items);\n\n        $finalItem = $collection->pop();\n\n        return $collection->implode($glue).$finalGlue.$finalItem;\n    }\n\n    /**\n     * Get the keys of the collection items.\n     *\n     * @return static<int, TKey>\n     */\n    public function keys()\n    {\n        return new static(array_keys($this->items));\n    }\n\n    /**\n     * Get the last item from the collection.\n     *\n     * @template TLastDefault\n     *\n     * @param  (callable(TValue, TKey): bool)|null  $callback\n     * @param  TLastDefault|(\\Closure(): TLastDefault)  $default\n     * @return TValue|TLastDefault\n     */\n    public function last(?callable $callback = null, $default = null)\n    {\n        return Arr::last($this->items, $callback, $default);\n    }\n\n    /**\n     * Get the values of a given key.\n     *\n     * @param  string|int|array<array-key, string>  $value\n     * @param  string|null  $key\n     * @return static<array-key, mixed>\n     */\n    public function pluck($value, $key = null)\n    {\n        return new static(Arr::pluck($this->items, $value, $key));\n    }\n\n    /**\n     * Run a map over each of the items.\n     *\n     * @template TMapValue\n     *\n     * @param  callable(TValue, TKey): TMapValue  $callback\n     * @return static<TKey, TMapValue>\n     */\n    public function map(callable $callback)\n    {\n        return new static(Arr::map($this->items, $callback));\n    }\n\n    /**\n     * Run a dictionary map over the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapToDictionaryKey of array-key\n     * @template TMapToDictionaryValue\n     *\n     * @param  callable(TValue, TKey): array<TMapToDictionaryKey, TMapToDictionaryValue>  $callback\n     * @return static<TMapToDictionaryKey, array<int, TMapToDictionaryValue>>\n     */\n    public function mapToDictionary(callable $callback)\n    {\n        $dictionary = [];\n\n        foreach ($this->items as $key => $item) {\n            $pair = $callback($item, $key);\n\n            $key = key($pair);\n\n            $value = reset($pair);\n\n            if (! isset($dictionary[$key])) {\n                $dictionary[$key] = [];\n            }\n\n            $dictionary[$key][] = $value;\n        }\n\n        return new static($dictionary);\n    }\n\n    /**\n     * Run an associative map over each of the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapWithKeysKey of array-key\n     * @template TMapWithKeysValue\n     *\n     * @param  callable(TValue, TKey): array<TMapWithKeysKey, TMapWithKeysValue>  $callback\n     * @return static<TMapWithKeysKey, TMapWithKeysValue>\n     */\n    public function mapWithKeys(callable $callback)\n    {\n        return new static(Arr::mapWithKeys($this->items, $callback));\n    }\n\n    /**\n     * Merge the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function merge($items)\n    {\n        return new static(array_merge($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Recursively merge the collection with the given items.\n     *\n     * @template TMergeRecursiveValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TMergeRecursiveValue>|iterable<TKey, TMergeRecursiveValue>  $items\n     * @return static<TKey, TValue|TMergeRecursiveValue>\n     */\n    public function mergeRecursive($items)\n    {\n        return new static(array_merge_recursive($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Create a collection by using this collection for keys and another for its values.\n     *\n     * @template TCombineValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TCombineValue>|iterable<array-key, TCombineValue>  $values\n     * @return static<TValue, TCombineValue>\n     */\n    public function combine($values)\n    {\n        return new static(array_combine($this->all(), $this->getArrayableItems($values)));\n    }\n\n    /**\n     * Union the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function union($items)\n    {\n        return new static($this->items + $this->getArrayableItems($items));\n    }\n\n    /**\n     * Create a new collection consisting of every n-th element.\n     *\n     * @param  int  $step\n     * @param  int  $offset\n     * @return static\n     */\n    public function nth($step, $offset = 0)\n    {\n        $new = [];\n\n        $position = 0;\n\n        foreach ($this->slice($offset)->items as $item) {\n            if ($position % $step === 0) {\n                $new[] = $item;\n            }\n\n            $position++;\n        }\n\n        return new static($new);\n    }\n\n    /**\n     * Get the items with the specified keys.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>|string|null  $keys\n     * @return static\n     */\n    public function only($keys)\n    {\n        if (is_null($keys)) {\n            return new static($this->items);\n        }\n\n        if ($keys instanceof Enumerable) {\n            $keys = $keys->all();\n        }\n\n        $keys = is_array($keys) ? $keys : func_get_args();\n\n        return new static(Arr::only($this->items, $keys));\n    }\n\n    /**\n     * Select specific values from the items within the collection.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>|string|null  $keys\n     * @return static\n     */\n    public function select($keys)\n    {\n        if (is_null($keys)) {\n            return new static($this->items);\n        }\n\n        if ($keys instanceof Enumerable) {\n            $keys = $keys->all();\n        }\n\n        $keys = is_array($keys) ? $keys : func_get_args();\n\n        return new static(Arr::select($this->items, $keys));\n    }\n\n    /**\n     * Get and remove the last N items from the collection.\n     *\n     * @param  int  $count\n     * @return static<int, TValue>|TValue|null\n     */\n    public function pop($count = 1)\n    {\n        if ($count === 1) {\n            return array_pop($this->items);\n        }\n\n        if ($this->isEmpty()) {\n            return new static;\n        }\n\n        $results = [];\n\n        $collectionCount = $this->count();\n\n        foreach (range(1, min($count, $collectionCount)) as $item) {\n            array_push($results, array_pop($this->items));\n        }\n\n        return new static($results);\n    }\n\n    /**\n     * Push an item onto the beginning of the collection.\n     *\n     * @param  TValue  $value\n     * @param  TKey  $key\n     * @return $this\n     */\n    public function prepend($value, $key = null)\n    {\n        $this->items = Arr::prepend($this->items, ...func_get_args());\n\n        return $this;\n    }\n\n    /**\n     * Push one or more items onto the end of the collection.\n     *\n     * @param  TValue  ...$values\n     * @return $this\n     */\n    public function push(...$values)\n    {\n        foreach ($values as $value) {\n            $this->items[] = $value;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Push all of the given items onto the collection.\n     *\n     * @template TConcatKey of array-key\n     * @template TConcatValue\n     *\n     * @param  iterable<TConcatKey, TConcatValue>  $source\n     * @return static<TKey|TConcatKey, TValue|TConcatValue>\n     */\n    public function concat($source)\n    {\n        $result = new static($this);\n\n        foreach ($source as $item) {\n            $result->push($item);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Get and remove an item from the collection.\n     *\n     * @template TPullDefault\n     *\n     * @param  TKey  $key\n     * @param  TPullDefault|(\\Closure(): TPullDefault)  $default\n     * @return TValue|TPullDefault\n     */\n    public function pull($key, $default = null)\n    {\n        return Arr::pull($this->items, $key, $default);\n    }\n\n    /**\n     * Put an item in the collection by key.\n     *\n     * @param  TKey  $key\n     * @param  TValue  $value\n     * @return $this\n     */\n    public function put($key, $value)\n    {\n        $this->offsetSet($key, $value);\n\n        return $this;\n    }\n\n    /**\n     * Get one or a specified number of items randomly from the collection.\n     *\n     * @param  (callable(self<TKey, TValue>): int)|int|null  $number\n     * @param  bool  $preserveKeys\n     * @return static<int, TValue>|TValue\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function random($number = null, $preserveKeys = false)\n    {\n        if (is_null($number)) {\n            return Arr::random($this->items);\n        }\n\n        if (is_callable($number)) {\n            return new static(Arr::random($this->items, $number($this), $preserveKeys));\n        }\n\n        return new static(Arr::random($this->items, $number, $preserveKeys));\n    }\n\n    /**\n     * Replace the collection items with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function replace($items)\n    {\n        return new static(array_replace($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Recursively replace the collection items with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function replaceRecursive($items)\n    {\n        return new static(array_replace_recursive($this->items, $this->getArrayableItems($items)));\n    }\n\n    /**\n     * Reverse items order.\n     *\n     * @return static\n     */\n    public function reverse()\n    {\n        return new static(array_reverse($this->items, true));\n    }\n\n    /**\n     * Search the collection for a given value and return the corresponding key if successful.\n     *\n     * @param  TValue|(callable(TValue,TKey): bool)  $value\n     * @param  bool  $strict\n     * @return TKey|false\n     */\n    public function search($value, $strict = false)\n    {\n        if (! $this->useAsCallable($value)) {\n            return array_search($value, $this->items, $strict);\n        }\n\n        foreach ($this->items as $key => $item) {\n            if ($value($item, $key)) {\n                return $key;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get and remove the first N items from the collection.\n     *\n     * @param  int  $count\n     * @return static<int, TValue>|TValue|null\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function shift($count = 1)\n    {\n        if ($count < 0) {\n            throw new InvalidArgumentException('Number of shifted items may not be less than zero.');\n        }\n\n        if ($this->isEmpty()) {\n            return null;\n        }\n\n        if ($count === 0) {\n            return new static;\n        }\n\n        if ($count === 1) {\n            return array_shift($this->items);\n        }\n\n        $results = [];\n\n        $collectionCount = $this->count();\n\n        foreach (range(1, min($count, $collectionCount)) as $item) {\n            array_push($results, array_shift($this->items));\n        }\n\n        return new static($results);\n    }\n\n    /**\n     * Shuffle the items in the collection.\n     *\n     * @param  int|null  $seed\n     * @return static\n     */\n    public function shuffle($seed = null)\n    {\n        return new static(Arr::shuffle($this->items, $seed));\n    }\n\n    /**\n     * Create chunks representing a \"sliding window\" view of the items in the collection.\n     *\n     * @param  int  $size\n     * @param  int  $step\n     * @return static<int, static>\n     */\n    public function sliding($size = 2, $step = 1)\n    {\n        $chunks = floor(($this->count() - $size) / $step) + 1;\n\n        return static::times($chunks, fn ($number) => $this->slice(($number - 1) * $step, $size));\n    }\n\n    /**\n     * Skip the first {$count} items.\n     *\n     * @param  int  $count\n     * @return static\n     */\n    public function skip($count)\n    {\n        return $this->slice($count);\n    }\n\n    /**\n     * Skip items in the collection until the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function skipUntil($value)\n    {\n        return new static($this->lazy()->skipUntil($value)->all());\n    }\n\n    /**\n     * Skip items in the collection while the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function skipWhile($value)\n    {\n        return new static($this->lazy()->skipWhile($value)->all());\n    }\n\n    /**\n     * Slice the underlying collection array.\n     *\n     * @param  int  $offset\n     * @param  int|null  $length\n     * @return static\n     */\n    public function slice($offset, $length = null)\n    {\n        return new static(array_slice($this->items, $offset, $length, true));\n    }\n\n    /**\n     * Split a collection into a certain number of groups.\n     *\n     * @param  int  $numberOfGroups\n     * @return static<int, static>\n     */\n    public function split($numberOfGroups)\n    {\n        if ($this->isEmpty()) {\n            return new static;\n        }\n\n        $groups = new static;\n\n        $groupSize = floor($this->count() / $numberOfGroups);\n\n        $remain = $this->count() % $numberOfGroups;\n\n        $start = 0;\n\n        for ($i = 0; $i < $numberOfGroups; $i++) {\n            $size = $groupSize;\n\n            if ($i < $remain) {\n                $size++;\n            }\n\n            if ($size) {\n                $groups->push(new static(array_slice($this->items, $start, $size)));\n\n                $start += $size;\n            }\n        }\n\n        return $groups;\n    }\n\n    /**\n     * Split a collection into a certain number of groups, and fill the first groups completely.\n     *\n     * @param  int  $numberOfGroups\n     * @return static<int, static>\n     */\n    public function splitIn($numberOfGroups)\n    {\n        return $this->chunk(ceil($this->count() / $numberOfGroups));\n    }\n\n    /**\n     * Get the first item in the collection, but only if exactly one item exists. Otherwise, throw an exception.\n     *\n     * @param  (callable(TValue, TKey): bool)|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue\n     *\n     * @throws \\Illuminate\\Support\\ItemNotFoundException\n     * @throws \\Illuminate\\Support\\MultipleItemsFoundException\n     */\n    public function sole($key = null, $operator = null, $value = null)\n    {\n        $filter = func_num_args() > 1\n            ? $this->operatorForWhere(...func_get_args())\n            : $key;\n\n        $items = $this->unless($filter == null)->filter($filter);\n\n        $count = $items->count();\n\n        if ($count === 0) {\n            throw new ItemNotFoundException;\n        }\n\n        if ($count > 1) {\n            throw new MultipleItemsFoundException($count);\n        }\n\n        return $items->first();\n    }\n\n    /**\n     * Get the first item in the collection but throw an exception if no matching items exist.\n     *\n     * @param  (callable(TValue, TKey): bool)|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue\n     *\n     * @throws \\Illuminate\\Support\\ItemNotFoundException\n     */\n    public function firstOrFail($key = null, $operator = null, $value = null)\n    {\n        $filter = func_num_args() > 1\n            ? $this->operatorForWhere(...func_get_args())\n            : $key;\n\n        $placeholder = new stdClass();\n\n        $item = $this->first($filter, $placeholder);\n\n        if ($item === $placeholder) {\n            throw new ItemNotFoundException;\n        }\n\n        return $item;\n    }\n\n    /**\n     * Chunk the collection into chunks of the given size.\n     *\n     * @param  int  $size\n     * @return static<int, static>\n     */\n    public function chunk($size)\n    {\n        if ($size <= 0) {\n            return new static;\n        }\n\n        $chunks = [];\n\n        foreach (array_chunk($this->items, $size, true) as $chunk) {\n            $chunks[] = new static($chunk);\n        }\n\n        return new static($chunks);\n    }\n\n    /**\n     * Chunk the collection into chunks with a callback.\n     *\n     * @param  callable(TValue, TKey, static<int, TValue>): bool  $callback\n     * @return static<int, static<int, TValue>>\n     */\n    public function chunkWhile(callable $callback)\n    {\n        return new static(\n            $this->lazy()->chunkWhile($callback)->mapInto(static::class)\n        );\n    }\n\n    /**\n     * Sort through each item with a callback.\n     *\n     * @param  (callable(TValue, TValue): int)|null|int  $callback\n     * @return static\n     */\n    public function sort($callback = null)\n    {\n        $items = $this->items;\n\n        $callback && is_callable($callback)\n            ? uasort($items, $callback)\n            : asort($items, $callback ?? SORT_REGULAR);\n\n        return new static($items);\n    }\n\n    /**\n     * Sort items in descending order.\n     *\n     * @param  int  $options\n     * @return static\n     */\n    public function sortDesc($options = SORT_REGULAR)\n    {\n        $items = $this->items;\n\n        arsort($items, $options);\n\n        return new static($items);\n    }\n\n    /**\n     * Sort the collection using the given callback.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>|(callable(TValue, TKey): mixed)|string  $callback\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return static\n     */\n    public function sortBy($callback, $options = SORT_REGULAR, $descending = false)\n    {\n        if (is_array($callback) && ! is_callable($callback)) {\n            return $this->sortByMany($callback, $options);\n        }\n\n        $results = [];\n\n        $callback = $this->valueRetriever($callback);\n\n        // First we will loop through the items and get the comparator from a callback\n        // function which we were given. Then, we will sort the returned values and\n        // grab all the corresponding values for the sorted keys from this array.\n        foreach ($this->items as $key => $value) {\n            $results[$key] = $callback($value, $key);\n        }\n\n        $descending ? arsort($results, $options)\n            : asort($results, $options);\n\n        // Once we have sorted all of the keys in the array, we will loop through them\n        // and grab the corresponding model so we can set the underlying items list\n        // to the sorted version. Then we'll just return the collection instance.\n        foreach (array_keys($results) as $key) {\n            $results[$key] = $this->items[$key];\n        }\n\n        return new static($results);\n    }\n\n    /**\n     * Sort the collection using multiple comparisons.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>  $comparisons\n     * @param  int  $options\n     * @return static\n     */\n    protected function sortByMany(array $comparisons = [], int $options = SORT_REGULAR)\n    {\n        $items = $this->items;\n\n        uasort($items, function ($a, $b) use ($comparisons, $options) {\n            foreach ($comparisons as $comparison) {\n                $comparison = Arr::wrap($comparison);\n\n                $prop = $comparison[0];\n\n                $ascending = Arr::get($comparison, 1, true) === true ||\n                             Arr::get($comparison, 1, true) === 'asc';\n\n                if (! is_string($prop) && is_callable($prop)) {\n                    $result = $prop($a, $b);\n                } else {\n                    $values = [data_get($a, $prop), data_get($b, $prop)];\n\n                    if (! $ascending) {\n                        $values = array_reverse($values);\n                    }\n\n                    if (($options & SORT_FLAG_CASE) === SORT_FLAG_CASE) {\n                        if (($options & SORT_NATURAL) === SORT_NATURAL) {\n                            $result = strnatcasecmp($values[0], $values[1]);\n                        } else {\n                            $result = strcasecmp($values[0], $values[1]);\n                        }\n                    } else {\n                        $result = match ($options) {\n                            SORT_NUMERIC => intval($values[0]) <=> intval($values[1]),\n                            SORT_STRING => strcmp($values[0], $values[1]),\n                            SORT_NATURAL => strnatcmp($values[0], $values[1]),\n                            SORT_LOCALE_STRING => strcoll($values[0], $values[1]),\n                            default => $values[0] <=> $values[1],\n                        };\n                    }\n                }\n\n                if ($result === 0) {\n                    continue;\n                }\n\n                return $result;\n            }\n        });\n\n        return new static($items);\n    }\n\n    /**\n     * Sort the collection in descending order using the given callback.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>|(callable(TValue, TKey): mixed)|string  $callback\n     * @param  int  $options\n     * @return static\n     */\n    public function sortByDesc($callback, $options = SORT_REGULAR)\n    {\n        if (is_array($callback) && ! is_callable($callback)) {\n            foreach ($callback as $index => $key) {\n                $comparison = Arr::wrap($key);\n\n                $comparison[1] = 'desc';\n\n                $callback[$index] = $comparison;\n            }\n        }\n\n        return $this->sortBy($callback, $options, true);\n    }\n\n    /**\n     * Sort the collection keys.\n     *\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return static\n     */\n    public function sortKeys($options = SORT_REGULAR, $descending = false)\n    {\n        $items = $this->items;\n\n        $descending ? krsort($items, $options) : ksort($items, $options);\n\n        return new static($items);\n    }\n\n    /**\n     * Sort the collection keys in descending order.\n     *\n     * @param  int  $options\n     * @return static\n     */\n    public function sortKeysDesc($options = SORT_REGULAR)\n    {\n        return $this->sortKeys($options, true);\n    }\n\n    /**\n     * Sort the collection keys using a callback.\n     *\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function sortKeysUsing(callable $callback)\n    {\n        $items = $this->items;\n\n        uksort($items, $callback);\n\n        return new static($items);\n    }\n\n    /**\n     * Splice a portion of the underlying collection array.\n     *\n     * @param  int  $offset\n     * @param  int|null  $length\n     * @param  array<array-key, TValue>  $replacement\n     * @return static\n     */\n    public function splice($offset, $length = null, $replacement = [])\n    {\n        if (func_num_args() === 1) {\n            return new static(array_splice($this->items, $offset));\n        }\n\n        return new static(array_splice($this->items, $offset, $length, $this->getArrayableItems($replacement)));\n    }\n\n    /**\n     * Take the first or last {$limit} items.\n     *\n     * @param  int  $limit\n     * @return static\n     */\n    public function take($limit)\n    {\n        if ($limit < 0) {\n            return $this->slice($limit, abs($limit));\n        }\n\n        return $this->slice(0, $limit);\n    }\n\n    /**\n     * Take items in the collection until the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function takeUntil($value)\n    {\n        return new static($this->lazy()->takeUntil($value)->all());\n    }\n\n    /**\n     * Take items in the collection while the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function takeWhile($value)\n    {\n        return new static($this->lazy()->takeWhile($value)->all());\n    }\n\n    /**\n     * Transform each item in the collection using a callback.\n     *\n     * @param  callable(TValue, TKey): TValue  $callback\n     * @return $this\n     */\n    public function transform(callable $callback)\n    {\n        $this->items = $this->map($callback)->all();\n\n        return $this;\n    }\n\n    /**\n     * Flatten a multi-dimensional associative array with dots.\n     *\n     * @return static\n     */\n    public function dot()\n    {\n        return new static(Arr::dot($this->all()));\n    }\n\n    /**\n     * Convert a flatten \"dot\" notation array into an expanded array.\n     *\n     * @return static\n     */\n    public function undot()\n    {\n        return new static(Arr::undot($this->all()));\n    }\n\n    /**\n     * Return only unique items from the collection array.\n     *\n     * @param  (callable(TValue, TKey): mixed)|string|null  $key\n     * @param  bool  $strict\n     * @return static\n     */\n    public function unique($key = null, $strict = false)\n    {\n        if (is_null($key) && $strict === false) {\n            return new static(array_unique($this->items, SORT_REGULAR));\n        }\n\n        $callback = $this->valueRetriever($key);\n\n        $exists = [];\n\n        return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) {\n            if (in_array($id = $callback($item, $key), $exists, $strict)) {\n                return true;\n            }\n\n            $exists[] = $id;\n        });\n    }\n\n    /**\n     * Reset the keys on the underlying array.\n     *\n     * @return static<int, TValue>\n     */\n    public function values()\n    {\n        return new static(array_values($this->items));\n    }\n\n    /**\n     * Zip the collection together with one or more arrays.\n     *\n     * e.g. new Collection([1, 2, 3])->zip([4, 5, 6]);\n     *      => [[1, 4], [2, 5], [3, 6]]\n     *\n     * @template TZipValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TZipValue>|iterable<array-key, TZipValue>  ...$items\n     * @return static<int, static<int, TValue|TZipValue>>\n     */\n    public function zip($items)\n    {\n        $arrayableItems = array_map(fn ($items) => $this->getArrayableItems($items), func_get_args());\n\n        $params = array_merge([fn () => new static(func_get_args()), $this->items], $arrayableItems);\n\n        return new static(array_map(...$params));\n    }\n\n    /**\n     * Pad collection to the specified length with a value.\n     *\n     * @template TPadValue\n     *\n     * @param  int  $size\n     * @param  TPadValue  $value\n     * @return static<int, TValue|TPadValue>\n     */\n    public function pad($size, $value)\n    {\n        return new static(array_pad($this->items, $size, $value));\n    }\n\n    /**\n     * Get an iterator for the items.\n     *\n     * @return \\ArrayIterator<TKey, TValue>\n     */\n    public function getIterator(): Traversable\n    {\n        return new ArrayIterator($this->items);\n    }\n\n    /**\n     * Count the number of items in the collection.\n     *\n     * @return int\n     */\n    public function count(): int\n    {\n        return count($this->items);\n    }\n\n    /**\n     * Count the number of items in the collection by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|string|null  $countBy\n     * @return static<array-key, int>\n     */\n    public function countBy($countBy = null)\n    {\n        return new static($this->lazy()->countBy($countBy)->all());\n    }\n\n    /**\n     * Add an item to the collection.\n     *\n     * @param  TValue  $item\n     * @return $this\n     */\n    public function add($item)\n    {\n        $this->items[] = $item;\n\n        return $this;\n    }\n\n    /**\n     * Get a base Support collection instance from this collection.\n     *\n     * @return \\Illuminate\\Support\\Collection<TKey, TValue>\n     */\n    public function toBase()\n    {\n        return new self($this);\n    }\n\n    /**\n     * Determine if an item exists at an offset.\n     *\n     * @param  TKey  $key\n     * @return bool\n     */\n    public function offsetExists($key): bool\n    {\n        return isset($this->items[$key]);\n    }\n\n    /**\n     * Get an item at a given offset.\n     *\n     * @param  TKey  $key\n     * @return TValue\n     */\n    public function offsetGet($key): mixed\n    {\n        return $this->items[$key];\n    }\n\n    /**\n     * Set the item at a given offset.\n     *\n     * @param  TKey|null  $key\n     * @param  TValue  $value\n     * @return void\n     */\n    public function offsetSet($key, $value): void\n    {\n        if (is_null($key)) {\n            $this->items[] = $value;\n        } else {\n            $this->items[$key] = $value;\n        }\n    }\n\n    /**\n     * Unset the item at a given offset.\n     *\n     * @param  TKey  $key\n     * @return void\n     */\n    public function offsetUnset($key): void\n    {\n        unset($this->items[$key]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/Enumerable.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nuse CachingIterator;\nuse Countable;\nuse Illuminate\\Contracts\\Support\\Arrayable;\nuse Illuminate\\Contracts\\Support\\Jsonable;\nuse IteratorAggregate;\nuse JsonSerializable;\nuse Traversable;\n\n/**\n * @template TKey of array-key\n *\n * @template-covariant TValue\n *\n * @extends \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>\n * @extends \\IteratorAggregate<TKey, TValue>\n */\ninterface Enumerable extends Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable\n{\n    /**\n     * Create a new collection instance if the value isn't one already.\n     *\n     * @template TMakeKey of array-key\n     * @template TMakeValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TMakeKey, TMakeValue>|iterable<TMakeKey, TMakeValue>|null  $items\n     * @return static<TMakeKey, TMakeValue>\n     */\n    public static function make($items = []);\n\n    /**\n     * Create a new instance by invoking the callback a given amount of times.\n     *\n     * @param  int  $number\n     * @param  callable|null  $callback\n     * @return static\n     */\n    public static function times($number, ?callable $callback = null);\n\n    /**\n     * Create a collection with the given range.\n     *\n     * @param  int  $from\n     * @param  int  $to\n     * @return static\n     */\n    public static function range($from, $to);\n\n    /**\n     * Wrap the given value in a collection if applicable.\n     *\n     * @template TWrapValue\n     *\n     * @param  iterable<array-key, TWrapValue>|TWrapValue  $value\n     * @return static<array-key, TWrapValue>\n     */\n    public static function wrap($value);\n\n    /**\n     * Get the underlying items from the given collection if applicable.\n     *\n     * @template TUnwrapKey of array-key\n     * @template TUnwrapValue\n     *\n     * @param  array<TUnwrapKey, TUnwrapValue>|static<TUnwrapKey, TUnwrapValue>  $value\n     * @return array<TUnwrapKey, TUnwrapValue>\n     */\n    public static function unwrap($value);\n\n    /**\n     * Create a new instance with no items.\n     *\n     * @return static\n     */\n    public static function empty();\n\n    /**\n     * Get all items in the enumerable.\n     *\n     * @return array\n     */\n    public function all();\n\n    /**\n     * Alias for the \"avg\" method.\n     *\n     * @param  (callable(TValue): float|int)|string|null  $callback\n     * @return float|int|null\n     */\n    public function average($callback = null);\n\n    /**\n     * Get the median of a given key.\n     *\n     * @param  string|array<array-key, string>|null  $key\n     * @return float|int|null\n     */\n    public function median($key = null);\n\n    /**\n     * Get the mode of a given key.\n     *\n     * @param  string|array<array-key, string>|null  $key\n     * @return array<int, float|int>|null\n     */\n    public function mode($key = null);\n\n    /**\n     * Collapse the items into a single enumerable.\n     *\n     * @return static<int, mixed>\n     */\n    public function collapse();\n\n    /**\n     * Alias for the \"contains\" method.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function some($key, $operator = null, $value = null);\n\n    /**\n     * Determine if an item exists, using strict comparison.\n     *\n     * @param  (callable(TValue): bool)|TValue|array-key  $key\n     * @param  TValue|null  $value\n     * @return bool\n     */\n    public function containsStrict($key, $value = null);\n\n    /**\n     * Get the average value of a given key.\n     *\n     * @param  (callable(TValue): float|int)|string|null  $callback\n     * @return float|int|null\n     */\n    public function avg($callback = null);\n\n    /**\n     * Determine if an item exists in the enumerable.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function contains($key, $operator = null, $value = null);\n\n    /**\n     * Determine if an item is not contained in the collection.\n     *\n     * @param  mixed  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function doesntContain($key, $operator = null, $value = null);\n\n    /**\n     * Cross join with the given lists, returning all possible permutations.\n     *\n     * @template TCrossJoinKey\n     * @template TCrossJoinValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TCrossJoinKey, TCrossJoinValue>|iterable<TCrossJoinKey, TCrossJoinValue>  ...$lists\n     * @return static<int, array<int, TValue|TCrossJoinValue>>\n     */\n    public function crossJoin(...$lists);\n\n    /**\n     * Dump the collection and end the script.\n     *\n     * @param  mixed  ...$args\n     * @return never\n     */\n    public function dd(...$args);\n\n    /**\n     * Dump the collection.\n     *\n     * @return $this\n     */\n    public function dump();\n\n    /**\n     * Get the items that are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @return static\n     */\n    public function diff($items);\n\n    /**\n     * Get the items that are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function diffUsing($items, callable $callback);\n\n    /**\n     * Get the items whose keys and values are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function diffAssoc($items);\n\n    /**\n     * Get the items whose keys and values are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function diffAssocUsing($items, callable $callback);\n\n    /**\n     * Get the items whose keys are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function diffKeys($items);\n\n    /**\n     * Get the items whose keys are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function diffKeysUsing($items, callable $callback);\n\n    /**\n     * Retrieve duplicate items.\n     *\n     * @param  (callable(TValue): bool)|string|null  $callback\n     * @param  bool  $strict\n     * @return static\n     */\n    public function duplicates($callback = null, $strict = false);\n\n    /**\n     * Retrieve duplicate items using strict comparison.\n     *\n     * @param  (callable(TValue): bool)|string|null  $callback\n     * @return static\n     */\n    public function duplicatesStrict($callback = null);\n\n    /**\n     * Execute a callback over each item.\n     *\n     * @param  callable(TValue, TKey): mixed  $callback\n     * @return $this\n     */\n    public function each(callable $callback);\n\n    /**\n     * Execute a callback over each nested chunk of items.\n     *\n     * @param  callable  $callback\n     * @return static\n     */\n    public function eachSpread(callable $callback);\n\n    /**\n     * Determine if all items pass the given truth test.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function every($key, $operator = null, $value = null);\n\n    /**\n     * Get all items except for those with the specified keys.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>  $keys\n     * @return static\n     */\n    public function except($keys);\n\n    /**\n     * Run a filter over each of the items.\n     *\n     * @param  (callable(TValue): bool)|null  $callback\n     * @return static\n     */\n    public function filter(?callable $callback = null);\n\n    /**\n     * Apply the callback if the given \"value\" is (or resolves to) truthy.\n     *\n     * @template TWhenReturnType as null\n     *\n     * @param  bool  $value\n     * @param  (callable($this): TWhenReturnType)|null  $callback\n     * @param  (callable($this): TWhenReturnType)|null  $default\n     * @return $this|TWhenReturnType\n     */\n    public function when($value, ?callable $callback = null, ?callable $default = null);\n\n    /**\n     * Apply the callback if the collection is empty.\n     *\n     * @template TWhenEmptyReturnType\n     *\n     * @param  (callable($this): TWhenEmptyReturnType)  $callback\n     * @param  (callable($this): TWhenEmptyReturnType)|null  $default\n     * @return $this|TWhenEmptyReturnType\n     */\n    public function whenEmpty(callable $callback, ?callable $default = null);\n\n    /**\n     * Apply the callback if the collection is not empty.\n     *\n     * @template TWhenNotEmptyReturnType\n     *\n     * @param  callable($this): TWhenNotEmptyReturnType  $callback\n     * @param  (callable($this): TWhenNotEmptyReturnType)|null  $default\n     * @return $this|TWhenNotEmptyReturnType\n     */\n    public function whenNotEmpty(callable $callback, ?callable $default = null);\n\n    /**\n     * Apply the callback if the given \"value\" is (or resolves to) truthy.\n     *\n     * @template TUnlessReturnType\n     *\n     * @param  bool  $value\n     * @param  (callable($this): TUnlessReturnType)  $callback\n     * @param  (callable($this): TUnlessReturnType)|null  $default\n     * @return $this|TUnlessReturnType\n     */\n    public function unless($value, callable $callback, ?callable $default = null);\n\n    /**\n     * Apply the callback unless the collection is empty.\n     *\n     * @template TUnlessEmptyReturnType\n     *\n     * @param  callable($this): TUnlessEmptyReturnType  $callback\n     * @param  (callable($this): TUnlessEmptyReturnType)|null  $default\n     * @return $this|TUnlessEmptyReturnType\n     */\n    public function unlessEmpty(callable $callback, ?callable $default = null);\n\n    /**\n     * Apply the callback unless the collection is not empty.\n     *\n     * @template TUnlessNotEmptyReturnType\n     *\n     * @param  callable($this): TUnlessNotEmptyReturnType  $callback\n     * @param  (callable($this): TUnlessNotEmptyReturnType)|null  $default\n     * @return $this|TUnlessNotEmptyReturnType\n     */\n    public function unlessNotEmpty(callable $callback, ?callable $default = null);\n\n    /**\n     * Filter items by the given key value pair.\n     *\n     * @param  string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return static\n     */\n    public function where($key, $operator = null, $value = null);\n\n    /**\n     * Filter items where the value for the given key is null.\n     *\n     * @param  string|null  $key\n     * @return static\n     */\n    public function whereNull($key = null);\n\n    /**\n     * Filter items where the value for the given key is not null.\n     *\n     * @param  string|null  $key\n     * @return static\n     */\n    public function whereNotNull($key = null);\n\n    /**\n     * Filter items by the given key value pair using strict comparison.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return static\n     */\n    public function whereStrict($key, $value);\n\n    /**\n     * Filter items by the given key value pair.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @param  bool  $strict\n     * @return static\n     */\n    public function whereIn($key, $values, $strict = false);\n\n    /**\n     * Filter items by the given key value pair using strict comparison.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereInStrict($key, $values);\n\n    /**\n     * Filter items such that the value of the given key is between the given values.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereBetween($key, $values);\n\n    /**\n     * Filter items such that the value of the given key is not between the given values.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereNotBetween($key, $values);\n\n    /**\n     * Filter items by the given key value pair.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @param  bool  $strict\n     * @return static\n     */\n    public function whereNotIn($key, $values, $strict = false);\n\n    /**\n     * Filter items by the given key value pair using strict comparison.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereNotInStrict($key, $values);\n\n    /**\n     * Filter the items, removing any items that don't match the given type(s).\n     *\n     * @template TWhereInstanceOf\n     *\n     * @param  class-string<TWhereInstanceOf>|array<array-key, class-string<TWhereInstanceOf>>  $type\n     * @return static<TKey, TWhereInstanceOf>\n     */\n    public function whereInstanceOf($type);\n\n    /**\n     * Get the first item from the enumerable passing the given truth test.\n     *\n     * @template TFirstDefault\n     *\n     * @param  (callable(TValue,TKey): bool)|null  $callback\n     * @param  TFirstDefault|(\\Closure(): TFirstDefault)  $default\n     * @return TValue|TFirstDefault\n     */\n    public function first(?callable $callback = null, $default = null);\n\n    /**\n     * Get the first item by the given key value pair.\n     *\n     * @param  string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue|null\n     */\n    public function firstWhere($key, $operator = null, $value = null);\n\n    /**\n     * Get a flattened array of the items in the collection.\n     *\n     * @param  int  $depth\n     * @return static\n     */\n    public function flatten($depth = INF);\n\n    /**\n     * Flip the values with their keys.\n     *\n     * @return static<TValue, TKey>\n     */\n    public function flip();\n\n    /**\n     * Get an item from the collection by key.\n     *\n     * @template TGetDefault\n     *\n     * @param  TKey  $key\n     * @param  TGetDefault|(\\Closure(): TGetDefault)  $default\n     * @return TValue|TGetDefault\n     */\n    public function get($key, $default = null);\n\n    /**\n     * Group an associative array by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|array|string  $groupBy\n     * @param  bool  $preserveKeys\n     * @return static<array-key, static<array-key, TValue>>\n     */\n    public function groupBy($groupBy, $preserveKeys = false);\n\n    /**\n     * Key an associative array by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|array|string  $keyBy\n     * @return static<array-key, TValue>\n     */\n    public function keyBy($keyBy);\n\n    /**\n     * Determine if an item exists in the collection by key.\n     *\n     * @param  TKey|array<array-key, TKey>  $key\n     * @return bool\n     */\n    public function has($key);\n\n    /**\n     * Determine if any of the keys exist in the collection.\n     *\n     * @param  mixed  $key\n     * @return bool\n     */\n    public function hasAny($key);\n\n    /**\n     * Concatenate values of a given key as a string.\n     *\n     * @param  callable|string  $value\n     * @param  string|null  $glue\n     * @return string\n     */\n    public function implode($value, $glue = null);\n\n    /**\n     * Intersect the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersect($items);\n\n    /**\n     * Intersect the collection with the given items by key.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersectByKeys($items);\n\n    /**\n     * Determine if the collection is empty or not.\n     *\n     * @return bool\n     */\n    public function isEmpty();\n\n    /**\n     * Determine if the collection is not empty.\n     *\n     * @return bool\n     */\n    public function isNotEmpty();\n\n    /**\n     * Determine if the collection contains a single item.\n     *\n     * @return bool\n     */\n    public function containsOneItem();\n\n    /**\n     * Join all items from the collection using a string. The final items can use a separate glue string.\n     *\n     * @param  string  $glue\n     * @param  string  $finalGlue\n     * @return string\n     */\n    public function join($glue, $finalGlue = '');\n\n    /**\n     * Get the keys of the collection items.\n     *\n     * @return static<int, TKey>\n     */\n    public function keys();\n\n    /**\n     * Get the last item from the collection.\n     *\n     * @template TLastDefault\n     *\n     * @param  (callable(TValue, TKey): bool)|null  $callback\n     * @param  TLastDefault|(\\Closure(): TLastDefault)  $default\n     * @return TValue|TLastDefault\n     */\n    public function last(?callable $callback = null, $default = null);\n\n    /**\n     * Run a map over each of the items.\n     *\n     * @template TMapValue\n     *\n     * @param  callable(TValue, TKey): TMapValue  $callback\n     * @return static<TKey, TMapValue>\n     */\n    public function map(callable $callback);\n\n    /**\n     * Run a map over each nested chunk of items.\n     *\n     * @param  callable  $callback\n     * @return static\n     */\n    public function mapSpread(callable $callback);\n\n    /**\n     * Run a dictionary map over the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapToDictionaryKey of array-key\n     * @template TMapToDictionaryValue\n     *\n     * @param  callable(TValue, TKey): array<TMapToDictionaryKey, TMapToDictionaryValue>  $callback\n     * @return static<TMapToDictionaryKey, array<int, TMapToDictionaryValue>>\n     */\n    public function mapToDictionary(callable $callback);\n\n    /**\n     * Run a grouping map over the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapToGroupsKey of array-key\n     * @template TMapToGroupsValue\n     *\n     * @param  callable(TValue, TKey): array<TMapToGroupsKey, TMapToGroupsValue>  $callback\n     * @return static<TMapToGroupsKey, static<int, TMapToGroupsValue>>\n     */\n    public function mapToGroups(callable $callback);\n\n    /**\n     * Run an associative map over each of the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapWithKeysKey of array-key\n     * @template TMapWithKeysValue\n     *\n     * @param  callable(TValue, TKey): array<TMapWithKeysKey, TMapWithKeysValue>  $callback\n     * @return static<TMapWithKeysKey, TMapWithKeysValue>\n     */\n    public function mapWithKeys(callable $callback);\n\n    /**\n     * Map a collection and flatten the result by a single level.\n     *\n     * @template TFlatMapKey of array-key\n     * @template TFlatMapValue\n     *\n     * @param  callable(TValue, TKey): (\\Illuminate\\Support\\Collection<TFlatMapKey, TFlatMapValue>|array<TFlatMapKey, TFlatMapValue>)  $callback\n     * @return static<TFlatMapKey, TFlatMapValue>\n     */\n    public function flatMap(callable $callback);\n\n    /**\n     * Map the values into a new class.\n     *\n     * @template TMapIntoValue\n     *\n     * @param  class-string<TMapIntoValue>  $class\n     * @return static<TKey, TMapIntoValue>\n     */\n    public function mapInto($class);\n\n    /**\n     * Merge the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function merge($items);\n\n    /**\n     * Recursively merge the collection with the given items.\n     *\n     * @template TMergeRecursiveValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TMergeRecursiveValue>|iterable<TKey, TMergeRecursiveValue>  $items\n     * @return static<TKey, TValue|TMergeRecursiveValue>\n     */\n    public function mergeRecursive($items);\n\n    /**\n     * Create a collection by using this collection for keys and another for its values.\n     *\n     * @template TCombineValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TCombineValue>|iterable<array-key, TCombineValue>  $values\n     * @return static<TValue, TCombineValue>\n     */\n    public function combine($values);\n\n    /**\n     * Union the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function union($items);\n\n    /**\n     * Get the min value of a given key.\n     *\n     * @param  (callable(TValue):mixed)|string|null  $callback\n     * @return mixed\n     */\n    public function min($callback = null);\n\n    /**\n     * Get the max value of a given key.\n     *\n     * @param  (callable(TValue):mixed)|string|null  $callback\n     * @return mixed\n     */\n    public function max($callback = null);\n\n    /**\n     * Create a new collection consisting of every n-th element.\n     *\n     * @param  int  $step\n     * @param  int  $offset\n     * @return static\n     */\n    public function nth($step, $offset = 0);\n\n    /**\n     * Get the items with the specified keys.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>|string  $keys\n     * @return static\n     */\n    public function only($keys);\n\n    /**\n     * \"Paginate\" the collection by slicing it into a smaller collection.\n     *\n     * @param  int  $page\n     * @param  int  $perPage\n     * @return static\n     */\n    public function forPage($page, $perPage);\n\n    /**\n     * Partition the collection into two arrays using the given callback or key.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return static<int<0, 1>, static<TKey, TValue>>\n     */\n    public function partition($key, $operator = null, $value = null);\n\n    /**\n     * Push all of the given items onto the collection.\n     *\n     * @template TConcatKey of array-key\n     * @template TConcatValue\n     *\n     * @param  iterable<TConcatKey, TConcatValue>  $source\n     * @return static<TKey|TConcatKey, TValue|TConcatValue>\n     */\n    public function concat($source);\n\n    /**\n     * Get one or a specified number of items randomly from the collection.\n     *\n     * @param  int|null  $number\n     * @return static<int, TValue>|TValue\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function random($number = null);\n\n    /**\n     * Reduce the collection to a single value.\n     *\n     * @template TReduceInitial\n     * @template TReduceReturnType\n     *\n     * @param  callable(TReduceInitial|TReduceReturnType, TValue, TKey): TReduceReturnType  $callback\n     * @param  TReduceInitial  $initial\n     * @return TReduceReturnType\n     */\n    public function reduce(callable $callback, $initial = null);\n\n    /**\n     * Reduce the collection to multiple aggregate values.\n     *\n     * @param  callable  $callback\n     * @param  mixed  ...$initial\n     * @return array\n     *\n     * @throws \\UnexpectedValueException\n     */\n    public function reduceSpread(callable $callback, ...$initial);\n\n    /**\n     * Replace the collection items with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function replace($items);\n\n    /**\n     * Recursively replace the collection items with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function replaceRecursive($items);\n\n    /**\n     * Reverse items order.\n     *\n     * @return static\n     */\n    public function reverse();\n\n    /**\n     * Search the collection for a given value and return the corresponding key if successful.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @param  bool  $strict\n     * @return TKey|bool\n     */\n    public function search($value, $strict = false);\n\n    /**\n     * Shuffle the items in the collection.\n     *\n     * @param  int|null  $seed\n     * @return static\n     */\n    public function shuffle($seed = null);\n\n    /**\n     * Create chunks representing a \"sliding window\" view of the items in the collection.\n     *\n     * @param  int  $size\n     * @param  int  $step\n     * @return static<int, static>\n     */\n    public function sliding($size = 2, $step = 1);\n\n    /**\n     * Skip the first {$count} items.\n     *\n     * @param  int  $count\n     * @return static\n     */\n    public function skip($count);\n\n    /**\n     * Skip items in the collection until the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function skipUntil($value);\n\n    /**\n     * Skip items in the collection while the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function skipWhile($value);\n\n    /**\n     * Get a slice of items from the enumerable.\n     *\n     * @param  int  $offset\n     * @param  int|null  $length\n     * @return static\n     */\n    public function slice($offset, $length = null);\n\n    /**\n     * Split a collection into a certain number of groups.\n     *\n     * @param  int  $numberOfGroups\n     * @return static<int, static>\n     */\n    public function split($numberOfGroups);\n\n    /**\n     * Get the first item in the collection, but only if exactly one item exists. Otherwise, throw an exception.\n     *\n     * @param  (callable(TValue, TKey): bool)|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue\n     *\n     * @throws \\Illuminate\\Support\\ItemNotFoundException\n     * @throws \\Illuminate\\Support\\MultipleItemsFoundException\n     */\n    public function sole($key = null, $operator = null, $value = null);\n\n    /**\n     * Get the first item in the collection but throw an exception if no matching items exist.\n     *\n     * @param  (callable(TValue, TKey): bool)|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue\n     *\n     * @throws \\Illuminate\\Support\\ItemNotFoundException\n     */\n    public function firstOrFail($key = null, $operator = null, $value = null);\n\n    /**\n     * Chunk the collection into chunks of the given size.\n     *\n     * @param  int  $size\n     * @return static<int, static>\n     */\n    public function chunk($size);\n\n    /**\n     * Chunk the collection into chunks with a callback.\n     *\n     * @param  callable(TValue, TKey, static<int, TValue>): bool  $callback\n     * @return static<int, static<int, TValue>>\n     */\n    public function chunkWhile(callable $callback);\n\n    /**\n     * Split a collection into a certain number of groups, and fill the first groups completely.\n     *\n     * @param  int  $numberOfGroups\n     * @return static<int, static>\n     */\n    public function splitIn($numberOfGroups);\n\n    /**\n     * Sort through each item with a callback.\n     *\n     * @param  (callable(TValue, TValue): int)|null|int  $callback\n     * @return static\n     */\n    public function sort($callback = null);\n\n    /**\n     * Sort items in descending order.\n     *\n     * @param  int  $options\n     * @return static\n     */\n    public function sortDesc($options = SORT_REGULAR);\n\n    /**\n     * Sort the collection using the given callback.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>|(callable(TValue, TKey): mixed)|string  $callback\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return static\n     */\n    public function sortBy($callback, $options = SORT_REGULAR, $descending = false);\n\n    /**\n     * Sort the collection in descending order using the given callback.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>|(callable(TValue, TKey): mixed)|string  $callback\n     * @param  int  $options\n     * @return static\n     */\n    public function sortByDesc($callback, $options = SORT_REGULAR);\n\n    /**\n     * Sort the collection keys.\n     *\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return static\n     */\n    public function sortKeys($options = SORT_REGULAR, $descending = false);\n\n    /**\n     * Sort the collection keys in descending order.\n     *\n     * @param  int  $options\n     * @return static\n     */\n    public function sortKeysDesc($options = SORT_REGULAR);\n\n    /**\n     * Sort the collection keys using a callback.\n     *\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function sortKeysUsing(callable $callback);\n\n    /**\n     * Get the sum of the given values.\n     *\n     * @param  (callable(TValue): mixed)|string|null  $callback\n     * @return mixed\n     */\n    public function sum($callback = null);\n\n    /**\n     * Take the first or last {$limit} items.\n     *\n     * @param  int  $limit\n     * @return static\n     */\n    public function take($limit);\n\n    /**\n     * Take items in the collection until the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function takeUntil($value);\n\n    /**\n     * Take items in the collection while the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function takeWhile($value);\n\n    /**\n     * Pass the collection to the given callback and then return it.\n     *\n     * @param  callable(TValue): mixed  $callback\n     * @return $this\n     */\n    public function tap(callable $callback);\n\n    /**\n     * Pass the enumerable to the given callback and return the result.\n     *\n     * @template TPipeReturnType\n     *\n     * @param  callable($this): TPipeReturnType  $callback\n     * @return TPipeReturnType\n     */\n    public function pipe(callable $callback);\n\n    /**\n     * Pass the collection into a new class.\n     *\n     * @template TPipeIntoValue\n     *\n     * @param  class-string<TPipeIntoValue>  $class\n     * @return TPipeIntoValue\n     */\n    public function pipeInto($class);\n\n    /**\n     * Pass the collection through a series of callable pipes and return the result.\n     *\n     * @param  array<callable>  $pipes\n     * @return mixed\n     */\n    public function pipeThrough($pipes);\n\n    /**\n     * Get the values of a given key.\n     *\n     * @param  string|array<array-key, string>  $value\n     * @param  string|null  $key\n     * @return static<int, mixed>\n     */\n    public function pluck($value, $key = null);\n\n    /**\n     * Create a collection of all elements that do not pass a given truth test.\n     *\n     * @param  (callable(TValue, TKey): bool)|bool|TValue  $callback\n     * @return static\n     */\n    public function reject($callback = true);\n\n    /**\n     * Convert a flatten \"dot\" notation array into an expanded array.\n     *\n     * @return static\n     */\n    public function undot();\n\n    /**\n     * Return only unique items from the collection array.\n     *\n     * @param  (callable(TValue, TKey): mixed)|string|null  $key\n     * @param  bool  $strict\n     * @return static\n     */\n    public function unique($key = null, $strict = false);\n\n    /**\n     * Return only unique items from the collection array using strict comparison.\n     *\n     * @param  (callable(TValue, TKey): mixed)|string|null  $key\n     * @return static\n     */\n    public function uniqueStrict($key = null);\n\n    /**\n     * Reset the keys on the underlying array.\n     *\n     * @return static<int, TValue>\n     */\n    public function values();\n\n    /**\n     * Pad collection to the specified length with a value.\n     *\n     * @template TPadValue\n     *\n     * @param  int  $size\n     * @param  TPadValue  $value\n     * @return static<int, TValue|TPadValue>\n     */\n    public function pad($size, $value);\n\n    /**\n     * Get the values iterator.\n     *\n     * @return \\Traversable<TKey, TValue>\n     */\n    public function getIterator(): Traversable;\n\n    /**\n     * Count the number of items in the collection.\n     *\n     * @return int\n     */\n    public function count(): int;\n\n    /**\n     * Count the number of items in the collection by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|string|null  $countBy\n     * @return static<array-key, int>\n     */\n    public function countBy($countBy = null);\n\n    /**\n     * Zip the collection together with one or more arrays.\n     *\n     * e.g. new Collection([1, 2, 3])->zip([4, 5, 6]);\n     *      => [[1, 4], [2, 5], [3, 6]]\n     *\n     * @template TZipValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TZipValue>|iterable<array-key, TZipValue>  ...$items\n     * @return static<int, static<int, TValue|TZipValue>>\n     */\n    public function zip($items);\n\n    /**\n     * Collect the values into a collection.\n     *\n     * @return \\Illuminate\\Support\\Collection<TKey, TValue>\n     */\n    public function collect();\n\n    /**\n     * Get the collection of items as a plain array.\n     *\n     * @return array<TKey, mixed>\n     */\n    public function toArray();\n\n    /**\n     * Convert the object into something JSON serializable.\n     *\n     * @return mixed\n     */\n    public function jsonSerialize(): mixed;\n\n    /**\n     * Get the collection of items as JSON.\n     *\n     * @param  int  $options\n     * @return string\n     */\n    public function toJson($options = 0);\n\n    /**\n     * Get a CachingIterator instance.\n     *\n     * @param  int  $flags\n     * @return \\CachingIterator\n     */\n    public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING);\n\n    /**\n     * Convert the collection to its string representation.\n     *\n     * @return string\n     */\n    public function __toString();\n\n    /**\n     * Indicate that the model's string representation should be escaped when __toString is invoked.\n     *\n     * @param  bool  $escape\n     * @return $this\n     */\n    public function escapeWhenCastingToString($escape = true);\n\n    /**\n     * Add a method to the list of proxied methods.\n     *\n     * @param  string  $method\n     * @return void\n     */\n    public static function proxy($method);\n\n    /**\n     * Dynamically access collection proxies.\n     *\n     * @param  string  $key\n     * @return mixed\n     *\n     * @throws \\Exception\n     */\n    public function __get($key);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/HigherOrderCollectionProxy.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\n/**\n * @mixin \\Illuminate\\Support\\Enumerable\n */\nclass HigherOrderCollectionProxy\n{\n    /**\n     * The collection being operated on.\n     *\n     * @var \\Illuminate\\Support\\Enumerable\n     */\n    protected $collection;\n\n    /**\n     * The method being proxied.\n     *\n     * @var string\n     */\n    protected $method;\n\n    /**\n     * Create a new proxy instance.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable  $collection\n     * @param  string  $method\n     * @return void\n     */\n    public function __construct(Enumerable $collection, $method)\n    {\n        $this->method = $method;\n        $this->collection = $collection;\n    }\n\n    /**\n     * Proxy accessing an attribute onto the collection items.\n     *\n     * @param  string  $key\n     * @return mixed\n     */\n    public function __get($key)\n    {\n        return $this->collection->{$this->method}(function ($value) use ($key) {\n            return is_array($value) ? $value[$key] : $value->{$key};\n        });\n    }\n\n    /**\n     * Proxy a method call onto the collection items.\n     *\n     * @param  string  $method\n     * @param  array  $parameters\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        return $this->collection->{$this->method}(function ($value) use ($method, $parameters) {\n            return $value->{$method}(...$parameters);\n        });\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/ItemNotFoundException.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nuse RuntimeException;\n\nclass ItemNotFoundException extends RuntimeException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) Taylor Otwell\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/LazyCollection.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nuse ArrayIterator;\nuse Closure;\nuse DateTimeInterface;\nuse Generator;\nuse Illuminate\\Contracts\\Support\\CanBeEscapedWhenCastToString;\nuse Illuminate\\Support\\Traits\\EnumeratesValues;\nuse Illuminate\\Support\\Traits\\Macroable;\nuse InvalidArgumentException;\nuse IteratorAggregate;\nuse stdClass;\nuse Traversable;\n\n/**\n * @template TKey of array-key\n *\n * @template-covariant TValue\n *\n * @implements \\Illuminate\\Support\\Enumerable<TKey, TValue>\n */\nclass LazyCollection implements CanBeEscapedWhenCastToString, Enumerable\n{\n    /**\n     * @use \\Illuminate\\Support\\Traits\\EnumeratesValues<TKey, TValue>\n     */\n    use EnumeratesValues, Macroable;\n\n    /**\n     * The source from which to generate items.\n     *\n     * @var (Closure(): \\Generator<TKey, TValue, mixed, void>)|static|array<TKey, TValue>\n     */\n    public $source;\n\n    /**\n     * Create a new lazy collection instance.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>|(Closure(): \\Generator<TKey, TValue, mixed, void>)|self<TKey, TValue>|array<TKey, TValue>|null  $source\n     * @return void\n     */\n    public function __construct($source = null)\n    {\n        if ($source instanceof Closure || $source instanceof self) {\n            $this->source = $source;\n        } elseif (is_null($source)) {\n            $this->source = static::empty();\n        } elseif ($source instanceof Generator) {\n            throw new InvalidArgumentException(\n                'Generators should not be passed directly to LazyCollection. Instead, pass a generator function.'\n            );\n        } else {\n            $this->source = $this->getArrayableItems($source);\n        }\n    }\n\n    /**\n     * Create a new collection instance if the value isn't one already.\n     *\n     * @template TMakeKey of array-key\n     * @template TMakeValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TMakeKey, TMakeValue>|iterable<TMakeKey, TMakeValue>|(Closure(): \\Generator<TMakeKey, TMakeValue, mixed, void>)|self<TMakeKey, TMakeValue>|array<TMakeKey, TMakeValue>|null  $items\n     * @return static<TMakeKey, TMakeValue>\n     */\n    public static function make($items = [])\n    {\n        return new static($items);\n    }\n\n    /**\n     * Create a collection with the given range.\n     *\n     * @param  int  $from\n     * @param  int  $to\n     * @return static<int, int>\n     */\n    public static function range($from, $to)\n    {\n        return new static(function () use ($from, $to) {\n            if ($from <= $to) {\n                for (; $from <= $to; $from++) {\n                    yield $from;\n                }\n            } else {\n                for (; $from >= $to; $from--) {\n                    yield $from;\n                }\n            }\n        });\n    }\n\n    /**\n     * Get all items in the enumerable.\n     *\n     * @return array<TKey, TValue>\n     */\n    public function all()\n    {\n        if (is_array($this->source)) {\n            return $this->source;\n        }\n\n        return iterator_to_array($this->getIterator());\n    }\n\n    /**\n     * Eager load all items into a new lazy collection backed by an array.\n     *\n     * @return static\n     */\n    public function eager()\n    {\n        return new static($this->all());\n    }\n\n    /**\n     * Cache values as they're enumerated.\n     *\n     * @return static\n     */\n    public function remember()\n    {\n        $iterator = $this->getIterator();\n\n        $iteratorIndex = 0;\n\n        $cache = [];\n\n        return new static(function () use ($iterator, &$iteratorIndex, &$cache) {\n            for ($index = 0; true; $index++) {\n                if (array_key_exists($index, $cache)) {\n                    yield $cache[$index][0] => $cache[$index][1];\n\n                    continue;\n                }\n\n                if ($iteratorIndex < $index) {\n                    $iterator->next();\n\n                    $iteratorIndex++;\n                }\n\n                if (! $iterator->valid()) {\n                    break;\n                }\n\n                $cache[$index] = [$iterator->key(), $iterator->current()];\n\n                yield $cache[$index][0] => $cache[$index][1];\n            }\n        });\n    }\n\n    /**\n     * Get the average value of a given key.\n     *\n     * @param  (callable(TValue): float|int)|string|null  $callback\n     * @return float|int|null\n     */\n    public function avg($callback = null)\n    {\n        return $this->collect()->avg($callback);\n    }\n\n    /**\n     * Get the median of a given key.\n     *\n     * @param  string|array<array-key, string>|null  $key\n     * @return float|int|null\n     */\n    public function median($key = null)\n    {\n        return $this->collect()->median($key);\n    }\n\n    /**\n     * Get the mode of a given key.\n     *\n     * @param  string|array<string>|null  $key\n     * @return array<int, float|int>|null\n     */\n    public function mode($key = null)\n    {\n        return $this->collect()->mode($key);\n    }\n\n    /**\n     * Collapse the collection of items into a single array.\n     *\n     * @return static<int, mixed>\n     */\n    public function collapse()\n    {\n        return new static(function () {\n            foreach ($this as $values) {\n                if (is_array($values) || $values instanceof Enumerable) {\n                    foreach ($values as $value) {\n                        yield $value;\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Determine if an item exists in the enumerable.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function contains($key, $operator = null, $value = null)\n    {\n        if (func_num_args() === 1 && $this->useAsCallable($key)) {\n            $placeholder = new stdClass;\n\n            /** @var callable $key */\n            return $this->first($key, $placeholder) !== $placeholder;\n        }\n\n        if (func_num_args() === 1) {\n            $needle = $key;\n\n            foreach ($this as $value) {\n                if ($value == $needle) {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        return $this->contains($this->operatorForWhere(...func_get_args()));\n    }\n\n    /**\n     * Determine if an item exists, using strict comparison.\n     *\n     * @param  (callable(TValue): bool)|TValue|array-key  $key\n     * @param  TValue|null  $value\n     * @return bool\n     */\n    public function containsStrict($key, $value = null)\n    {\n        if (func_num_args() === 2) {\n            return $this->contains(fn ($item) => data_get($item, $key) === $value);\n        }\n\n        if ($this->useAsCallable($key)) {\n            return ! is_null($this->first($key));\n        }\n\n        foreach ($this as $item) {\n            if ($item === $key) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Determine if an item is not contained in the enumerable.\n     *\n     * @param  mixed  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function doesntContain($key, $operator = null, $value = null)\n    {\n        return ! $this->contains(...func_get_args());\n    }\n\n    /**\n     * Cross join the given iterables, returning all possible permutations.\n     *\n     * @template TCrossJoinKey\n     * @template TCrossJoinValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TCrossJoinKey, TCrossJoinValue>|iterable<TCrossJoinKey, TCrossJoinValue>  ...$arrays\n     * @return static<int, array<int, TValue|TCrossJoinValue>>\n     */\n    public function crossJoin(...$arrays)\n    {\n        return $this->passthru('crossJoin', func_get_args());\n    }\n\n    /**\n     * Count the number of items in the collection by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|string|null  $countBy\n     * @return static<array-key, int>\n     */\n    public function countBy($countBy = null)\n    {\n        $countBy = is_null($countBy)\n            ? $this->identity()\n            : $this->valueRetriever($countBy);\n\n        return new static(function () use ($countBy) {\n            $counts = [];\n\n            foreach ($this as $key => $value) {\n                $group = $countBy($value, $key);\n\n                if (empty($counts[$group])) {\n                    $counts[$group] = 0;\n                }\n\n                $counts[$group]++;\n            }\n\n            yield from $counts;\n        });\n    }\n\n    /**\n     * Get the items that are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @return static\n     */\n    public function diff($items)\n    {\n        return $this->passthru('diff', func_get_args());\n    }\n\n    /**\n     * Get the items that are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function diffUsing($items, callable $callback)\n    {\n        return $this->passthru('diffUsing', func_get_args());\n    }\n\n    /**\n     * Get the items whose keys and values are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function diffAssoc($items)\n    {\n        return $this->passthru('diffAssoc', func_get_args());\n    }\n\n    /**\n     * Get the items whose keys and values are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function diffAssocUsing($items, callable $callback)\n    {\n        return $this->passthru('diffAssocUsing', func_get_args());\n    }\n\n    /**\n     * Get the items whose keys are not present in the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function diffKeys($items)\n    {\n        return $this->passthru('diffKeys', func_get_args());\n    }\n\n    /**\n     * Get the items whose keys are not present in the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function diffKeysUsing($items, callable $callback)\n    {\n        return $this->passthru('diffKeysUsing', func_get_args());\n    }\n\n    /**\n     * Retrieve duplicate items.\n     *\n     * @param  (callable(TValue): bool)|string|null  $callback\n     * @param  bool  $strict\n     * @return static\n     */\n    public function duplicates($callback = null, $strict = false)\n    {\n        return $this->passthru('duplicates', func_get_args());\n    }\n\n    /**\n     * Retrieve duplicate items using strict comparison.\n     *\n     * @param  (callable(TValue): bool)|string|null  $callback\n     * @return static\n     */\n    public function duplicatesStrict($callback = null)\n    {\n        return $this->passthru('duplicatesStrict', func_get_args());\n    }\n\n    /**\n     * Get all items except for those with the specified keys.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>  $keys\n     * @return static\n     */\n    public function except($keys)\n    {\n        return $this->passthru('except', func_get_args());\n    }\n\n    /**\n     * Run a filter over each of the items.\n     *\n     * @param  (callable(TValue, TKey): bool)|null  $callback\n     * @return static\n     */\n    public function filter(?callable $callback = null)\n    {\n        if (is_null($callback)) {\n            $callback = fn ($value) => (bool) $value;\n        }\n\n        return new static(function () use ($callback) {\n            foreach ($this as $key => $value) {\n                if ($callback($value, $key)) {\n                    yield $key => $value;\n                }\n            }\n        });\n    }\n\n    /**\n     * Get the first item from the enumerable passing the given truth test.\n     *\n     * @template TFirstDefault\n     *\n     * @param  (callable(TValue): bool)|null  $callback\n     * @param  TFirstDefault|(\\Closure(): TFirstDefault)  $default\n     * @return TValue|TFirstDefault\n     */\n    public function first(?callable $callback = null, $default = null)\n    {\n        $iterator = $this->getIterator();\n\n        if (is_null($callback)) {\n            if (! $iterator->valid()) {\n                return value($default);\n            }\n\n            return $iterator->current();\n        }\n\n        foreach ($iterator as $key => $value) {\n            if ($callback($value, $key)) {\n                return $value;\n            }\n        }\n\n        return value($default);\n    }\n\n    /**\n     * Get a flattened list of the items in the collection.\n     *\n     * @param  int  $depth\n     * @return static<int, mixed>\n     */\n    public function flatten($depth = INF)\n    {\n        $instance = new static(function () use ($depth) {\n            foreach ($this as $item) {\n                if (! is_array($item) && ! $item instanceof Enumerable) {\n                    yield $item;\n                } elseif ($depth === 1) {\n                    yield from $item;\n                } else {\n                    yield from (new static($item))->flatten($depth - 1);\n                }\n            }\n        });\n\n        return $instance->values();\n    }\n\n    /**\n     * Flip the items in the collection.\n     *\n     * @return static<TValue, TKey>\n     */\n    public function flip()\n    {\n        return new static(function () {\n            foreach ($this as $key => $value) {\n                yield $value => $key;\n            }\n        });\n    }\n\n    /**\n     * Get an item by key.\n     *\n     * @template TGetDefault\n     *\n     * @param  TKey|null  $key\n     * @param  TGetDefault|(\\Closure(): TGetDefault)  $default\n     * @return TValue|TGetDefault\n     */\n    public function get($key, $default = null)\n    {\n        if (is_null($key)) {\n            return;\n        }\n\n        foreach ($this as $outerKey => $outerValue) {\n            if ($outerKey == $key) {\n                return $outerValue;\n            }\n        }\n\n        return value($default);\n    }\n\n    /**\n     * Group an associative array by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|array|string  $groupBy\n     * @param  bool  $preserveKeys\n     * @return static<array-key, static<array-key, TValue>>\n     */\n    public function groupBy($groupBy, $preserveKeys = false)\n    {\n        return $this->passthru('groupBy', func_get_args());\n    }\n\n    /**\n     * Key an associative array by a field or using a callback.\n     *\n     * @param  (callable(TValue, TKey): array-key)|array|string  $keyBy\n     * @return static<array-key, TValue>\n     */\n    public function keyBy($keyBy)\n    {\n        return new static(function () use ($keyBy) {\n            $keyBy = $this->valueRetriever($keyBy);\n\n            foreach ($this as $key => $item) {\n                $resolvedKey = $keyBy($item, $key);\n\n                if (is_object($resolvedKey)) {\n                    $resolvedKey = (string) $resolvedKey;\n                }\n\n                yield $resolvedKey => $item;\n            }\n        });\n    }\n\n    /**\n     * Determine if an item exists in the collection by key.\n     *\n     * @param  mixed  $key\n     * @return bool\n     */\n    public function has($key)\n    {\n        $keys = array_flip(is_array($key) ? $key : func_get_args());\n        $count = count($keys);\n\n        foreach ($this as $key => $value) {\n            if (array_key_exists($key, $keys) && --$count == 0) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Determine if any of the keys exist in the collection.\n     *\n     * @param  mixed  $key\n     * @return bool\n     */\n    public function hasAny($key)\n    {\n        $keys = array_flip(is_array($key) ? $key : func_get_args());\n\n        foreach ($this as $key => $value) {\n            if (array_key_exists($key, $keys)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Concatenate values of a given key as a string.\n     *\n     * @param  callable|string  $value\n     * @param  string|null  $glue\n     * @return string\n     */\n    public function implode($value, $glue = null)\n    {\n        return $this->collect()->implode(...func_get_args());\n    }\n\n    /**\n     * Intersect the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersect($items)\n    {\n        return $this->passthru('intersect', func_get_args());\n    }\n\n    /**\n     * Intersect the collection with the given items, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function intersectUsing()\n    {\n        return $this->passthru('intersectUsing', func_get_args());\n    }\n\n    /**\n     * Intersect the collection with the given items with additional index check.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersectAssoc($items)\n    {\n        return $this->passthru('intersectAssoc', func_get_args());\n    }\n\n    /**\n     * Intersect the collection with the given items with additional index check, using the callback.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TValue>|iterable<array-key, TValue>  $items\n     * @param  callable(TValue, TValue): int  $callback\n     * @return static\n     */\n    public function intersectAssocUsing($items, callable $callback)\n    {\n        return $this->passthru('intersectAssocUsing', func_get_args());\n    }\n\n    /**\n     * Intersect the collection with the given items by key.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function intersectByKeys($items)\n    {\n        return $this->passthru('intersectByKeys', func_get_args());\n    }\n\n    /**\n     * Determine if the items are empty or not.\n     *\n     * @return bool\n     */\n    public function isEmpty()\n    {\n        return ! $this->getIterator()->valid();\n    }\n\n    /**\n     * Determine if the collection contains a single item.\n     *\n     * @return bool\n     */\n    public function containsOneItem()\n    {\n        return $this->take(2)->count() === 1;\n    }\n\n    /**\n     * Join all items from the collection using a string. The final items can use a separate glue string.\n     *\n     * @param  string  $glue\n     * @param  string  $finalGlue\n     * @return string\n     */\n    public function join($glue, $finalGlue = '')\n    {\n        return $this->collect()->join(...func_get_args());\n    }\n\n    /**\n     * Get the keys of the collection items.\n     *\n     * @return static<int, TKey>\n     */\n    public function keys()\n    {\n        return new static(function () {\n            foreach ($this as $key => $value) {\n                yield $key;\n            }\n        });\n    }\n\n    /**\n     * Get the last item from the collection.\n     *\n     * @template TLastDefault\n     *\n     * @param  (callable(TValue, TKey): bool)|null  $callback\n     * @param  TLastDefault|(\\Closure(): TLastDefault)  $default\n     * @return TValue|TLastDefault\n     */\n    public function last(?callable $callback = null, $default = null)\n    {\n        $needle = $placeholder = new stdClass;\n\n        foreach ($this as $key => $value) {\n            if (is_null($callback) || $callback($value, $key)) {\n                $needle = $value;\n            }\n        }\n\n        return $needle === $placeholder ? value($default) : $needle;\n    }\n\n    /**\n     * Get the values of a given key.\n     *\n     * @param  string|array<array-key, string>  $value\n     * @param  string|null  $key\n     * @return static<int, mixed>\n     */\n    public function pluck($value, $key = null)\n    {\n        return new static(function () use ($value, $key) {\n            [$value, $key] = $this->explodePluckParameters($value, $key);\n\n            foreach ($this as $item) {\n                $itemValue = data_get($item, $value);\n\n                if (is_null($key)) {\n                    yield $itemValue;\n                } else {\n                    $itemKey = data_get($item, $key);\n\n                    if (is_object($itemKey) && method_exists($itemKey, '__toString')) {\n                        $itemKey = (string) $itemKey;\n                    }\n\n                    yield $itemKey => $itemValue;\n                }\n            }\n        });\n    }\n\n    /**\n     * Run a map over each of the items.\n     *\n     * @template TMapValue\n     *\n     * @param  callable(TValue, TKey): TMapValue  $callback\n     * @return static<TKey, TMapValue>\n     */\n    public function map(callable $callback)\n    {\n        return new static(function () use ($callback) {\n            foreach ($this as $key => $value) {\n                yield $key => $callback($value, $key);\n            }\n        });\n    }\n\n    /**\n     * Run a dictionary map over the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapToDictionaryKey of array-key\n     * @template TMapToDictionaryValue\n     *\n     * @param  callable(TValue, TKey): array<TMapToDictionaryKey, TMapToDictionaryValue>  $callback\n     * @return static<TMapToDictionaryKey, array<int, TMapToDictionaryValue>>\n     */\n    public function mapToDictionary(callable $callback)\n    {\n        return $this->passthru('mapToDictionary', func_get_args());\n    }\n\n    /**\n     * Run an associative map over each of the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapWithKeysKey of array-key\n     * @template TMapWithKeysValue\n     *\n     * @param  callable(TValue, TKey): array<TMapWithKeysKey, TMapWithKeysValue>  $callback\n     * @return static<TMapWithKeysKey, TMapWithKeysValue>\n     */\n    public function mapWithKeys(callable $callback)\n    {\n        return new static(function () use ($callback) {\n            foreach ($this as $key => $value) {\n                yield from $callback($value, $key);\n            }\n        });\n    }\n\n    /**\n     * Merge the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function merge($items)\n    {\n        return $this->passthru('merge', func_get_args());\n    }\n\n    /**\n     * Recursively merge the collection with the given items.\n     *\n     * @template TMergeRecursiveValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TMergeRecursiveValue>|iterable<TKey, TMergeRecursiveValue>  $items\n     * @return static<TKey, TValue|TMergeRecursiveValue>\n     */\n    public function mergeRecursive($items)\n    {\n        return $this->passthru('mergeRecursive', func_get_args());\n    }\n\n    /**\n     * Create a collection by using this collection for keys and another for its values.\n     *\n     * @template TCombineValue\n     *\n     * @param  \\IteratorAggregate<array-key, TCombineValue>|array<array-key, TCombineValue>|(callable(): \\Generator<array-key, TCombineValue>)  $values\n     * @return static<TValue, TCombineValue>\n     */\n    public function combine($values)\n    {\n        return new static(function () use ($values) {\n            $values = $this->makeIterator($values);\n\n            $errorMessage = 'Both parameters should have an equal number of elements';\n\n            foreach ($this as $key) {\n                if (! $values->valid()) {\n                    trigger_error($errorMessage, E_USER_WARNING);\n\n                    break;\n                }\n\n                yield $key => $values->current();\n\n                $values->next();\n            }\n\n            if ($values->valid()) {\n                trigger_error($errorMessage, E_USER_WARNING);\n            }\n        });\n    }\n\n    /**\n     * Union the collection with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function union($items)\n    {\n        return $this->passthru('union', func_get_args());\n    }\n\n    /**\n     * Create a new collection consisting of every n-th element.\n     *\n     * @param  int  $step\n     * @param  int  $offset\n     * @return static\n     */\n    public function nth($step, $offset = 0)\n    {\n        return new static(function () use ($step, $offset) {\n            $position = 0;\n\n            foreach ($this->slice($offset) as $item) {\n                if ($position % $step === 0) {\n                    yield $item;\n                }\n\n                $position++;\n            }\n        });\n    }\n\n    /**\n     * Get the items with the specified keys.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>|string  $keys\n     * @return static\n     */\n    public function only($keys)\n    {\n        if ($keys instanceof Enumerable) {\n            $keys = $keys->all();\n        } elseif (! is_null($keys)) {\n            $keys = is_array($keys) ? $keys : func_get_args();\n        }\n\n        return new static(function () use ($keys) {\n            if (is_null($keys)) {\n                yield from $this;\n            } else {\n                $keys = array_flip($keys);\n\n                foreach ($this as $key => $value) {\n                    if (array_key_exists($key, $keys)) {\n                        yield $key => $value;\n\n                        unset($keys[$key]);\n\n                        if (empty($keys)) {\n                            break;\n                        }\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Select specific values from the items within the collection.\n     *\n     * @param  \\Illuminate\\Support\\Enumerable<array-key, TKey>|array<array-key, TKey>|string  $keys\n     * @return static\n     */\n    public function select($keys)\n    {\n        if ($keys instanceof Enumerable) {\n            $keys = $keys->all();\n        } elseif (! is_null($keys)) {\n            $keys = is_array($keys) ? $keys : func_get_args();\n        }\n\n        return new static(function () use ($keys) {\n            if (is_null($keys)) {\n                yield from $this;\n            } else {\n                foreach ($this as $item) {\n                    $result = [];\n\n                    foreach ($keys as $key) {\n                        if (Arr::accessible($item) && Arr::exists($item, $key)) {\n                            $result[$key] = $item[$key];\n                        } elseif (is_object($item) && isset($item->{$key})) {\n                            $result[$key] = $item->{$key};\n                        }\n                    }\n\n                    yield $result;\n                }\n            }\n        });\n    }\n\n    /**\n     * Push all of the given items onto the collection.\n     *\n     * @template TConcatKey of array-key\n     * @template TConcatValue\n     *\n     * @param  iterable<TConcatKey, TConcatValue>  $source\n     * @return static<TKey|TConcatKey, TValue|TConcatValue>\n     */\n    public function concat($source)\n    {\n        return (new static(function () use ($source) {\n            yield from $this;\n            yield from $source;\n        }))->values();\n    }\n\n    /**\n     * Get one or a specified number of items randomly from the collection.\n     *\n     * @param  int|null  $number\n     * @return static<int, TValue>|TValue\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function random($number = null)\n    {\n        $result = $this->collect()->random(...func_get_args());\n\n        return is_null($number) ? $result : new static($result);\n    }\n\n    /**\n     * Replace the collection items with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function replace($items)\n    {\n        return new static(function () use ($items) {\n            $items = $this->getArrayableItems($items);\n\n            foreach ($this as $key => $value) {\n                if (array_key_exists($key, $items)) {\n                    yield $key => $items[$key];\n\n                    unset($items[$key]);\n                } else {\n                    yield $key => $value;\n                }\n            }\n\n            foreach ($items as $key => $value) {\n                yield $key => $value;\n            }\n        });\n    }\n\n    /**\n     * Recursively replace the collection items with the given items.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>  $items\n     * @return static\n     */\n    public function replaceRecursive($items)\n    {\n        return $this->passthru('replaceRecursive', func_get_args());\n    }\n\n    /**\n     * Reverse items order.\n     *\n     * @return static\n     */\n    public function reverse()\n    {\n        return $this->passthru('reverse', func_get_args());\n    }\n\n    /**\n     * Search the collection for a given value and return the corresponding key if successful.\n     *\n     * @param  TValue|(callable(TValue,TKey): bool)  $value\n     * @param  bool  $strict\n     * @return TKey|false\n     */\n    public function search($value, $strict = false)\n    {\n        /** @var (callable(TValue,TKey): bool) $predicate */\n        $predicate = $this->useAsCallable($value)\n            ? $value\n            : function ($item) use ($value, $strict) {\n                return $strict ? $item === $value : $item == $value;\n            };\n\n        foreach ($this as $key => $item) {\n            if ($predicate($item, $key)) {\n                return $key;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Shuffle the items in the collection.\n     *\n     * @param  int|null  $seed\n     * @return static\n     */\n    public function shuffle($seed = null)\n    {\n        return $this->passthru('shuffle', func_get_args());\n    }\n\n    /**\n     * Create chunks representing a \"sliding window\" view of the items in the collection.\n     *\n     * @param  int  $size\n     * @param  int  $step\n     * @return static<int, static>\n     */\n    public function sliding($size = 2, $step = 1)\n    {\n        return new static(function () use ($size, $step) {\n            $iterator = $this->getIterator();\n\n            $chunk = [];\n\n            while ($iterator->valid()) {\n                $chunk[$iterator->key()] = $iterator->current();\n\n                if (count($chunk) == $size) {\n                    yield (new static($chunk))->tap(function () use (&$chunk, $step) {\n                        $chunk = array_slice($chunk, $step, null, true);\n                    });\n\n                    // If the $step between chunks is bigger than each chunk's $size\n                    // we will skip the extra items (which should never be in any\n                    // chunk) before we continue to the next chunk in the loop.\n                    if ($step > $size) {\n                        $skip = $step - $size;\n\n                        for ($i = 0; $i < $skip && $iterator->valid(); $i++) {\n                            $iterator->next();\n                        }\n                    }\n                }\n\n                $iterator->next();\n            }\n        });\n    }\n\n    /**\n     * Skip the first {$count} items.\n     *\n     * @param  int  $count\n     * @return static\n     */\n    public function skip($count)\n    {\n        return new static(function () use ($count) {\n            $iterator = $this->getIterator();\n\n            while ($iterator->valid() && $count--) {\n                $iterator->next();\n            }\n\n            while ($iterator->valid()) {\n                yield $iterator->key() => $iterator->current();\n\n                $iterator->next();\n            }\n        });\n    }\n\n    /**\n     * Skip items in the collection until the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function skipUntil($value)\n    {\n        $callback = $this->useAsCallable($value) ? $value : $this->equality($value);\n\n        return $this->skipWhile($this->negate($callback));\n    }\n\n    /**\n     * Skip items in the collection while the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function skipWhile($value)\n    {\n        $callback = $this->useAsCallable($value) ? $value : $this->equality($value);\n\n        return new static(function () use ($callback) {\n            $iterator = $this->getIterator();\n\n            while ($iterator->valid() && $callback($iterator->current(), $iterator->key())) {\n                $iterator->next();\n            }\n\n            while ($iterator->valid()) {\n                yield $iterator->key() => $iterator->current();\n\n                $iterator->next();\n            }\n        });\n    }\n\n    /**\n     * Get a slice of items from the enumerable.\n     *\n     * @param  int  $offset\n     * @param  int|null  $length\n     * @return static\n     */\n    public function slice($offset, $length = null)\n    {\n        if ($offset < 0 || $length < 0) {\n            return $this->passthru('slice', func_get_args());\n        }\n\n        $instance = $this->skip($offset);\n\n        return is_null($length) ? $instance : $instance->take($length);\n    }\n\n    /**\n     * Split a collection into a certain number of groups.\n     *\n     * @param  int  $numberOfGroups\n     * @return static<int, static>\n     */\n    public function split($numberOfGroups)\n    {\n        return $this->passthru('split', func_get_args());\n    }\n\n    /**\n     * Get the first item in the collection, but only if exactly one item exists. Otherwise, throw an exception.\n     *\n     * @param  (callable(TValue, TKey): bool)|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue\n     *\n     * @throws \\Illuminate\\Support\\ItemNotFoundException\n     * @throws \\Illuminate\\Support\\MultipleItemsFoundException\n     */\n    public function sole($key = null, $operator = null, $value = null)\n    {\n        $filter = func_num_args() > 1\n            ? $this->operatorForWhere(...func_get_args())\n            : $key;\n\n        return $this\n            ->unless($filter == null)\n            ->filter($filter)\n            ->take(2)\n            ->collect()\n            ->sole();\n    }\n\n    /**\n     * Get the first item in the collection but throw an exception if no matching items exist.\n     *\n     * @param  (callable(TValue, TKey): bool)|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue\n     *\n     * @throws \\Illuminate\\Support\\ItemNotFoundException\n     */\n    public function firstOrFail($key = null, $operator = null, $value = null)\n    {\n        $filter = func_num_args() > 1\n            ? $this->operatorForWhere(...func_get_args())\n            : $key;\n\n        return $this\n            ->unless($filter == null)\n            ->filter($filter)\n            ->take(1)\n            ->collect()\n            ->firstOrFail();\n    }\n\n    /**\n     * Chunk the collection into chunks of the given size.\n     *\n     * @param  int  $size\n     * @return static<int, static>\n     */\n    public function chunk($size)\n    {\n        if ($size <= 0) {\n            return static::empty();\n        }\n\n        return new static(function () use ($size) {\n            $iterator = $this->getIterator();\n\n            while ($iterator->valid()) {\n                $chunk = [];\n\n                while (true) {\n                    $chunk[$iterator->key()] = $iterator->current();\n\n                    if (count($chunk) < $size) {\n                        $iterator->next();\n\n                        if (! $iterator->valid()) {\n                            break;\n                        }\n                    } else {\n                        break;\n                    }\n                }\n\n                yield new static($chunk);\n\n                $iterator->next();\n            }\n        });\n    }\n\n    /**\n     * Split a collection into a certain number of groups, and fill the first groups completely.\n     *\n     * @param  int  $numberOfGroups\n     * @return static<int, static>\n     */\n    public function splitIn($numberOfGroups)\n    {\n        return $this->chunk(ceil($this->count() / $numberOfGroups));\n    }\n\n    /**\n     * Chunk the collection into chunks with a callback.\n     *\n     * @param  callable(TValue, TKey, Collection<TKey, TValue>): bool  $callback\n     * @return static<int, static<int, TValue>>\n     */\n    public function chunkWhile(callable $callback)\n    {\n        return new static(function () use ($callback) {\n            $iterator = $this->getIterator();\n\n            $chunk = new Collection;\n\n            if ($iterator->valid()) {\n                $chunk[$iterator->key()] = $iterator->current();\n\n                $iterator->next();\n            }\n\n            while ($iterator->valid()) {\n                if (! $callback($iterator->current(), $iterator->key(), $chunk)) {\n                    yield new static($chunk);\n\n                    $chunk = new Collection;\n                }\n\n                $chunk[$iterator->key()] = $iterator->current();\n\n                $iterator->next();\n            }\n\n            if ($chunk->isNotEmpty()) {\n                yield new static($chunk);\n            }\n        });\n    }\n\n    /**\n     * Sort through each item with a callback.\n     *\n     * @param  (callable(TValue, TValue): int)|null|int  $callback\n     * @return static\n     */\n    public function sort($callback = null)\n    {\n        return $this->passthru('sort', func_get_args());\n    }\n\n    /**\n     * Sort items in descending order.\n     *\n     * @param  int  $options\n     * @return static\n     */\n    public function sortDesc($options = SORT_REGULAR)\n    {\n        return $this->passthru('sortDesc', func_get_args());\n    }\n\n    /**\n     * Sort the collection using the given callback.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>|(callable(TValue, TKey): mixed)|string  $callback\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return static\n     */\n    public function sortBy($callback, $options = SORT_REGULAR, $descending = false)\n    {\n        return $this->passthru('sortBy', func_get_args());\n    }\n\n    /**\n     * Sort the collection in descending order using the given callback.\n     *\n     * @param  array<array-key, (callable(TValue, TValue): mixed)|(callable(TValue, TKey): mixed)|string|array{string, string}>|(callable(TValue, TKey): mixed)|string  $callback\n     * @param  int  $options\n     * @return static\n     */\n    public function sortByDesc($callback, $options = SORT_REGULAR)\n    {\n        return $this->passthru('sortByDesc', func_get_args());\n    }\n\n    /**\n     * Sort the collection keys.\n     *\n     * @param  int  $options\n     * @param  bool  $descending\n     * @return static\n     */\n    public function sortKeys($options = SORT_REGULAR, $descending = false)\n    {\n        return $this->passthru('sortKeys', func_get_args());\n    }\n\n    /**\n     * Sort the collection keys in descending order.\n     *\n     * @param  int  $options\n     * @return static\n     */\n    public function sortKeysDesc($options = SORT_REGULAR)\n    {\n        return $this->passthru('sortKeysDesc', func_get_args());\n    }\n\n    /**\n     * Sort the collection keys using a callback.\n     *\n     * @param  callable(TKey, TKey): int  $callback\n     * @return static\n     */\n    public function sortKeysUsing(callable $callback)\n    {\n        return $this->passthru('sortKeysUsing', func_get_args());\n    }\n\n    /**\n     * Take the first or last {$limit} items.\n     *\n     * @param  int  $limit\n     * @return static\n     */\n    public function take($limit)\n    {\n        if ($limit < 0) {\n            return new static(function () use ($limit) {\n                $limit = abs($limit);\n                $ringBuffer = [];\n                $position = 0;\n\n                foreach ($this as $key => $value) {\n                    $ringBuffer[$position] = [$key, $value];\n                    $position = ($position + 1) % $limit;\n                }\n\n                for ($i = 0, $end = min($limit, count($ringBuffer)); $i < $end; $i++) {\n                    $pointer = ($position + $i) % $limit;\n                    yield $ringBuffer[$pointer][0] => $ringBuffer[$pointer][1];\n                }\n            });\n        }\n\n        return new static(function () use ($limit) {\n            $iterator = $this->getIterator();\n\n            while ($limit--) {\n                if (! $iterator->valid()) {\n                    break;\n                }\n\n                yield $iterator->key() => $iterator->current();\n\n                if ($limit) {\n                    $iterator->next();\n                }\n            }\n        });\n    }\n\n    /**\n     * Take items in the collection until the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function takeUntil($value)\n    {\n        /** @var callable(TValue, TKey): bool $callback */\n        $callback = $this->useAsCallable($value) ? $value : $this->equality($value);\n\n        return new static(function () use ($callback) {\n            foreach ($this as $key => $item) {\n                if ($callback($item, $key)) {\n                    break;\n                }\n\n                yield $key => $item;\n            }\n        });\n    }\n\n    /**\n     * Take items in the collection until a given point in time.\n     *\n     * @param  \\DateTimeInterface  $timeout\n     * @return static\n     */\n    public function takeUntilTimeout(DateTimeInterface $timeout)\n    {\n        $timeout = $timeout->getTimestamp();\n\n        return new static(function () use ($timeout) {\n            if ($this->now() >= $timeout) {\n                return;\n            }\n\n            foreach ($this as $key => $value) {\n                yield $key => $value;\n\n                if ($this->now() >= $timeout) {\n                    break;\n                }\n            }\n        });\n    }\n\n    /**\n     * Take items in the collection while the given condition is met.\n     *\n     * @param  TValue|callable(TValue,TKey): bool  $value\n     * @return static\n     */\n    public function takeWhile($value)\n    {\n        /** @var callable(TValue, TKey): bool $callback */\n        $callback = $this->useAsCallable($value) ? $value : $this->equality($value);\n\n        return $this->takeUntil(fn ($item, $key) => ! $callback($item, $key));\n    }\n\n    /**\n     * Pass each item in the collection to the given callback, lazily.\n     *\n     * @param  callable(TValue, TKey): mixed  $callback\n     * @return static\n     */\n    public function tapEach(callable $callback)\n    {\n        return new static(function () use ($callback) {\n            foreach ($this as $key => $value) {\n                $callback($value, $key);\n\n                yield $key => $value;\n            }\n        });\n    }\n\n    /**\n     * Flatten a multi-dimensional associative array with dots.\n     *\n     * @return static\n     */\n    public function dot()\n    {\n        return $this->passthru('dot', []);\n    }\n\n    /**\n     * Convert a flatten \"dot\" notation array into an expanded array.\n     *\n     * @return static\n     */\n    public function undot()\n    {\n        return $this->passthru('undot', []);\n    }\n\n    /**\n     * Return only unique items from the collection array.\n     *\n     * @param  (callable(TValue, TKey): mixed)|string|null  $key\n     * @param  bool  $strict\n     * @return static\n     */\n    public function unique($key = null, $strict = false)\n    {\n        $callback = $this->valueRetriever($key);\n\n        return new static(function () use ($callback, $strict) {\n            $exists = [];\n\n            foreach ($this as $key => $item) {\n                if (! in_array($id = $callback($item, $key), $exists, $strict)) {\n                    yield $key => $item;\n\n                    $exists[] = $id;\n                }\n            }\n        });\n    }\n\n    /**\n     * Reset the keys on the underlying array.\n     *\n     * @return static<int, TValue>\n     */\n    public function values()\n    {\n        return new static(function () {\n            foreach ($this as $item) {\n                yield $item;\n            }\n        });\n    }\n\n    /**\n     * Zip the collection together with one or more arrays.\n     *\n     * e.g. new LazyCollection([1, 2, 3])->zip([4, 5, 6]);\n     *      => [[1, 4], [2, 5], [3, 6]]\n     *\n     * @template TZipValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<array-key, TZipValue>|iterable<array-key, TZipValue>  ...$items\n     * @return static<int, static<int, TValue|TZipValue>>\n     */\n    public function zip($items)\n    {\n        $iterables = func_get_args();\n\n        return new static(function () use ($iterables) {\n            $iterators = Collection::make($iterables)->map(function ($iterable) {\n                return $this->makeIterator($iterable);\n            })->prepend($this->getIterator());\n\n            while ($iterators->contains->valid()) {\n                yield new static($iterators->map->current());\n\n                $iterators->each->next();\n            }\n        });\n    }\n\n    /**\n     * Pad collection to the specified length with a value.\n     *\n     * @template TPadValue\n     *\n     * @param  int  $size\n     * @param  TPadValue  $value\n     * @return static<int, TValue|TPadValue>\n     */\n    public function pad($size, $value)\n    {\n        if ($size < 0) {\n            return $this->passthru('pad', func_get_args());\n        }\n\n        return new static(function () use ($size, $value) {\n            $yielded = 0;\n\n            foreach ($this as $index => $item) {\n                yield $index => $item;\n\n                $yielded++;\n            }\n\n            while ($yielded++ < $size) {\n                yield $value;\n            }\n        });\n    }\n\n    /**\n     * Get the values iterator.\n     *\n     * @return \\Traversable<TKey, TValue>\n     */\n    public function getIterator(): Traversable\n    {\n        return $this->makeIterator($this->source);\n    }\n\n    /**\n     * Count the number of items in the collection.\n     *\n     * @return int\n     */\n    public function count(): int\n    {\n        if (is_array($this->source)) {\n            return count($this->source);\n        }\n\n        return iterator_count($this->getIterator());\n    }\n\n    /**\n     * Make an iterator from the given source.\n     *\n     * @template TIteratorKey of array-key\n     * @template TIteratorValue\n     *\n     * @param  \\IteratorAggregate<TIteratorKey, TIteratorValue>|array<TIteratorKey, TIteratorValue>|(callable(): \\Generator<TIteratorKey, TIteratorValue>)  $source\n     * @return \\Traversable<TIteratorKey, TIteratorValue>\n     */\n    protected function makeIterator($source)\n    {\n        if ($source instanceof IteratorAggregate) {\n            return $source->getIterator();\n        }\n\n        if (is_array($source)) {\n            return new ArrayIterator($source);\n        }\n\n        if (is_callable($source)) {\n            $maybeTraversable = $source();\n\n            return $maybeTraversable instanceof Traversable\n                ? $maybeTraversable\n                : new ArrayIterator(Arr::wrap($maybeTraversable));\n        }\n\n        return new ArrayIterator((array) $source);\n    }\n\n    /**\n     * Explode the \"value\" and \"key\" arguments passed to \"pluck\".\n     *\n     * @param  string|string[]  $value\n     * @param  string|string[]|null  $key\n     * @return array{string[],string[]|null}\n     */\n    protected function explodePluckParameters($value, $key)\n    {\n        $value = is_string($value) ? explode('.', $value) : $value;\n\n        $key = is_null($key) || is_array($key) ? $key : explode('.', $key);\n\n        return [$value, $key];\n    }\n\n    /**\n     * Pass this lazy collection through a method on the collection class.\n     *\n     * @param  string  $method\n     * @param  array<mixed>  $params\n     * @return static\n     */\n    protected function passthru($method, array $params)\n    {\n        return new static(function () use ($method, $params) {\n            yield from $this->collect()->$method(...$params);\n        });\n    }\n\n    /**\n     * Get the current time.\n     *\n     * @return int\n     */\n    protected function now()\n    {\n        return class_exists(Carbon::class)\n            ? Carbon::now()->timestamp\n            : time();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/MultipleItemsFoundException.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nuse RuntimeException;\n\nclass MultipleItemsFoundException extends RuntimeException\n{\n    /**\n     * The number of items found.\n     *\n     * @var int\n     */\n    public $count;\n\n    /**\n     * Create a new exception instance.\n     *\n     * @param  int  $count\n     * @param  int  $code\n     * @param  \\Throwable|null  $previous\n     * @return void\n     */\n    public function __construct($count, $code = 0, $previous = null)\n    {\n        $this->count = $count;\n\n        parent::__construct(\"$count items were found.\", $code, $previous);\n    }\n\n    /**\n     * Get the number of items found.\n     *\n     * @return int\n     */\n    public function getCount()\n    {\n        return $this->count;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/Traits/EnumeratesValues.php",
    "content": "<?php\n\nnamespace Illuminate\\Support\\Traits;\n\nuse CachingIterator;\nuse Closure;\nuse Exception;\nuse Illuminate\\Contracts\\Support\\Arrayable;\nuse Illuminate\\Contracts\\Support\\Jsonable;\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\nuse Illuminate\\Support\\Enumerable;\nuse Illuminate\\Support\\HigherOrderCollectionProxy;\nuse InvalidArgumentException;\nuse JsonSerializable;\nuse Symfony\\Component\\VarDumper\\VarDumper;\nuse Traversable;\nuse UnexpectedValueException;\nuse UnitEnum;\nuse WeakMap;\n\n/**\n * @template TKey of array-key\n *\n * @template-covariant TValue\n *\n * @property-read HigherOrderCollectionProxy $average\n * @property-read HigherOrderCollectionProxy $avg\n * @property-read HigherOrderCollectionProxy $contains\n * @property-read HigherOrderCollectionProxy $doesntContain\n * @property-read HigherOrderCollectionProxy $each\n * @property-read HigherOrderCollectionProxy $every\n * @property-read HigherOrderCollectionProxy $filter\n * @property-read HigherOrderCollectionProxy $first\n * @property-read HigherOrderCollectionProxy $flatMap\n * @property-read HigherOrderCollectionProxy $groupBy\n * @property-read HigherOrderCollectionProxy $keyBy\n * @property-read HigherOrderCollectionProxy $map\n * @property-read HigherOrderCollectionProxy $max\n * @property-read HigherOrderCollectionProxy $min\n * @property-read HigherOrderCollectionProxy $partition\n * @property-read HigherOrderCollectionProxy $percentage\n * @property-read HigherOrderCollectionProxy $reject\n * @property-read HigherOrderCollectionProxy $skipUntil\n * @property-read HigherOrderCollectionProxy $skipWhile\n * @property-read HigherOrderCollectionProxy $some\n * @property-read HigherOrderCollectionProxy $sortBy\n * @property-read HigherOrderCollectionProxy $sortByDesc\n * @property-read HigherOrderCollectionProxy $sum\n * @property-read HigherOrderCollectionProxy $takeUntil\n * @property-read HigherOrderCollectionProxy $takeWhile\n * @property-read HigherOrderCollectionProxy $unique\n * @property-read HigherOrderCollectionProxy $unless\n * @property-read HigherOrderCollectionProxy $until\n * @property-read HigherOrderCollectionProxy $when\n */\ntrait EnumeratesValues\n{\n    use Conditionable;\n\n    /**\n     * Indicates that the object's string representation should be escaped when __toString is invoked.\n     *\n     * @var bool\n     */\n    protected $escapeWhenCastingToString = false;\n\n    /**\n     * The methods that can be proxied.\n     *\n     * @var array<int, string>\n     */\n    protected static $proxies = [\n        'average',\n        'avg',\n        'contains',\n        'doesntContain',\n        'each',\n        'every',\n        'filter',\n        'first',\n        'flatMap',\n        'groupBy',\n        'keyBy',\n        'map',\n        'max',\n        'min',\n        'partition',\n        'percentage',\n        'reject',\n        'skipUntil',\n        'skipWhile',\n        'some',\n        'sortBy',\n        'sortByDesc',\n        'sum',\n        'takeUntil',\n        'takeWhile',\n        'unique',\n        'unless',\n        'until',\n        'when',\n    ];\n\n    /**\n     * Create a new collection instance if the value isn't one already.\n     *\n     * @template TMakeKey of array-key\n     * @template TMakeValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TMakeKey, TMakeValue>|iterable<TMakeKey, TMakeValue>|null  $items\n     * @return static<TMakeKey, TMakeValue>\n     */\n    public static function make($items = [])\n    {\n        return new static($items);\n    }\n\n    /**\n     * Wrap the given value in a collection if applicable.\n     *\n     * @template TWrapValue\n     *\n     * @param  iterable<array-key, TWrapValue>|TWrapValue  $value\n     * @return static<array-key, TWrapValue>\n     */\n    public static function wrap($value)\n    {\n        return $value instanceof Enumerable\n            ? new static($value)\n            : new static(Arr::wrap($value));\n    }\n\n    /**\n     * Get the underlying items from the given collection if applicable.\n     *\n     * @template TUnwrapKey of array-key\n     * @template TUnwrapValue\n     *\n     * @param  array<TUnwrapKey, TUnwrapValue>|static<TUnwrapKey, TUnwrapValue>  $value\n     * @return array<TUnwrapKey, TUnwrapValue>\n     */\n    public static function unwrap($value)\n    {\n        return $value instanceof Enumerable ? $value->all() : $value;\n    }\n\n    /**\n     * Create a new instance with no items.\n     *\n     * @return static\n     */\n    public static function empty()\n    {\n        return new static([]);\n    }\n\n    /**\n     * Create a new collection by invoking the callback a given amount of times.\n     *\n     * @template TTimesValue\n     *\n     * @param  int  $number\n     * @param  (callable(int): TTimesValue)|null  $callback\n     * @return static<int, TTimesValue>\n     */\n    public static function times($number, ?callable $callback = null)\n    {\n        if ($number < 1) {\n            return new static;\n        }\n\n        return static::range(1, $number)\n            ->unless($callback == null)\n            ->map($callback);\n    }\n\n    /**\n     * Alias for the \"avg\" method.\n     *\n     * @param  (callable(TValue): float|int)|string|null  $callback\n     * @return float|int|null\n     */\n    public function average($callback = null)\n    {\n        return $this->avg($callback);\n    }\n\n    /**\n     * Alias for the \"contains\" method.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function some($key, $operator = null, $value = null)\n    {\n        return $this->contains(...func_get_args());\n    }\n\n    /**\n     * Dump the items and end the script.\n     *\n     * @param  mixed  ...$args\n     * @return never\n     */\n    public function dd(...$args)\n    {\n        $this->dump(...$args);\n\n        exit(1);\n    }\n\n    /**\n     * Dump the items.\n     *\n     * @return $this\n     */\n    public function dump()\n    {\n        (new Collection(func_get_args()))\n            ->push($this->all())\n            ->each(function ($item) {\n                VarDumper::dump($item);\n            });\n\n        return $this;\n    }\n\n    /**\n     * Execute a callback over each item.\n     *\n     * @param  callable(TValue, TKey): mixed  $callback\n     * @return $this\n     */\n    public function each(callable $callback)\n    {\n        foreach ($this as $key => $item) {\n            if ($callback($item, $key) === false) {\n                break;\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Execute a callback over each nested chunk of items.\n     *\n     * @param  callable(...mixed): mixed  $callback\n     * @return static\n     */\n    public function eachSpread(callable $callback)\n    {\n        return $this->each(function ($chunk, $key) use ($callback) {\n            $chunk[] = $key;\n\n            return $callback(...$chunk);\n        });\n    }\n\n    /**\n     * Determine if all items pass the given truth test.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function every($key, $operator = null, $value = null)\n    {\n        if (func_num_args() === 1) {\n            $callback = $this->valueRetriever($key);\n\n            foreach ($this as $k => $v) {\n                if (! $callback($v, $k)) {\n                    return false;\n                }\n            }\n\n            return true;\n        }\n\n        return $this->every($this->operatorForWhere(...func_get_args()));\n    }\n\n    /**\n     * Get the first item by the given key value pair.\n     *\n     * @param  callable|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return TValue|null\n     */\n    public function firstWhere($key, $operator = null, $value = null)\n    {\n        return $this->first($this->operatorForWhere(...func_get_args()));\n    }\n\n    /**\n     * Get a single key's value from the first matching item in the collection.\n     *\n     * @template TValueDefault\n     *\n     * @param  string  $key\n     * @param  TValueDefault|(\\Closure(): TValueDefault)  $default\n     * @return TValue|TValueDefault\n     */\n    public function value($key, $default = null)\n    {\n        if ($value = $this->firstWhere($key)) {\n            return data_get($value, $key, $default);\n        }\n\n        return value($default);\n    }\n\n    /**\n     * Ensure that every item in the collection is of the expected type.\n     *\n     * @template TEnsureOfType\n     *\n     * @param  class-string<TEnsureOfType>|array<array-key, class-string<TEnsureOfType>>  $type\n     * @return static<TKey, TEnsureOfType>\n     *\n     * @throws \\UnexpectedValueException\n     */\n    public function ensure($type)\n    {\n        $allowedTypes = is_array($type) ? $type : [$type];\n\n        return $this->each(function ($item) use ($allowedTypes) {\n            $itemType = get_debug_type($item);\n\n            foreach ($allowedTypes as $allowedType) {\n                if ($itemType === $allowedType || $item instanceof $allowedType) {\n                    return true;\n                }\n            }\n\n            throw new UnexpectedValueException(\n                sprintf(\"Collection should only include [%s] items, but '%s' found.\", implode(', ', $allowedTypes), $itemType)\n            );\n        });\n    }\n\n    /**\n     * Determine if the collection is not empty.\n     *\n     * @return bool\n     */\n    public function isNotEmpty()\n    {\n        return ! $this->isEmpty();\n    }\n\n    /**\n     * Run a map over each nested chunk of items.\n     *\n     * @template TMapSpreadValue\n     *\n     * @param  callable(mixed...): TMapSpreadValue  $callback\n     * @return static<TKey, TMapSpreadValue>\n     */\n    public function mapSpread(callable $callback)\n    {\n        return $this->map(function ($chunk, $key) use ($callback) {\n            $chunk[] = $key;\n\n            return $callback(...$chunk);\n        });\n    }\n\n    /**\n     * Run a grouping map over the items.\n     *\n     * The callback should return an associative array with a single key/value pair.\n     *\n     * @template TMapToGroupsKey of array-key\n     * @template TMapToGroupsValue\n     *\n     * @param  callable(TValue, TKey): array<TMapToGroupsKey, TMapToGroupsValue>  $callback\n     * @return static<TMapToGroupsKey, static<int, TMapToGroupsValue>>\n     */\n    public function mapToGroups(callable $callback)\n    {\n        $groups = $this->mapToDictionary($callback);\n\n        return $groups->map([$this, 'make']);\n    }\n\n    /**\n     * Map a collection and flatten the result by a single level.\n     *\n     * @template TFlatMapKey of array-key\n     * @template TFlatMapValue\n     *\n     * @param  callable(TValue, TKey): (\\Illuminate\\Support\\Collection<TFlatMapKey, TFlatMapValue>|array<TFlatMapKey, TFlatMapValue>)  $callback\n     * @return static<TFlatMapKey, TFlatMapValue>\n     */\n    public function flatMap(callable $callback)\n    {\n        return $this->map($callback)->collapse();\n    }\n\n    /**\n     * Map the values into a new class.\n     *\n     * @template TMapIntoValue\n     *\n     * @param  class-string<TMapIntoValue>  $class\n     * @return static<TKey, TMapIntoValue>\n     */\n    public function mapInto($class)\n    {\n        return $this->map(fn ($value, $key) => new $class($value, $key));\n    }\n\n    /**\n     * Get the min value of a given key.\n     *\n     * @param  (callable(TValue):mixed)|string|null  $callback\n     * @return mixed\n     */\n    public function min($callback = null)\n    {\n        $callback = $this->valueRetriever($callback);\n\n        return $this->map(fn ($value) => $callback($value))\n            ->filter(fn ($value) => ! is_null($value))\n            ->reduce(fn ($result, $value) => is_null($result) || $value < $result ? $value : $result);\n    }\n\n    /**\n     * Get the max value of a given key.\n     *\n     * @param  (callable(TValue):mixed)|string|null  $callback\n     * @return mixed\n     */\n    public function max($callback = null)\n    {\n        $callback = $this->valueRetriever($callback);\n\n        return $this->filter(fn ($value) => ! is_null($value))->reduce(function ($result, $item) use ($callback) {\n            $value = $callback($item);\n\n            return is_null($result) || $value > $result ? $value : $result;\n        });\n    }\n\n    /**\n     * \"Paginate\" the collection by slicing it into a smaller collection.\n     *\n     * @param  int  $page\n     * @param  int  $perPage\n     * @return static\n     */\n    public function forPage($page, $perPage)\n    {\n        $offset = max(0, ($page - 1) * $perPage);\n\n        return $this->slice($offset, $perPage);\n    }\n\n    /**\n     * Partition the collection into two arrays using the given callback or key.\n     *\n     * @param  (callable(TValue, TKey): bool)|TValue|string  $key\n     * @param  TValue|string|null  $operator\n     * @param  TValue|null  $value\n     * @return static<int<0, 1>, static<TKey, TValue>>\n     */\n    public function partition($key, $operator = null, $value = null)\n    {\n        $passed = [];\n        $failed = [];\n\n        $callback = func_num_args() === 1\n                ? $this->valueRetriever($key)\n                : $this->operatorForWhere(...func_get_args());\n\n        foreach ($this as $key => $item) {\n            if ($callback($item, $key)) {\n                $passed[$key] = $item;\n            } else {\n                $failed[$key] = $item;\n            }\n        }\n\n        return new static([new static($passed), new static($failed)]);\n    }\n\n    /**\n     * Calculate the percentage of items that pass a given truth test.\n     *\n     * @param  (callable(TValue, TKey): bool)  $callback\n     * @param  int  $precision\n     * @return float|null\n     */\n    public function percentage(callable $callback, int $precision = 2)\n    {\n        if ($this->isEmpty()) {\n            return null;\n        }\n\n        return round(\n            $this->filter($callback)->count() / $this->count() * 100,\n            $precision\n        );\n    }\n\n    /**\n     * Get the sum of the given values.\n     *\n     * @param  (callable(TValue): mixed)|string|null  $callback\n     * @return mixed\n     */\n    public function sum($callback = null)\n    {\n        $callback = is_null($callback)\n            ? $this->identity()\n            : $this->valueRetriever($callback);\n\n        return $this->reduce(fn ($result, $item) => $result + $callback($item), 0);\n    }\n\n    /**\n     * Apply the callback if the collection is empty.\n     *\n     * @template TWhenEmptyReturnType\n     *\n     * @param  (callable($this): TWhenEmptyReturnType)  $callback\n     * @param  (callable($this): TWhenEmptyReturnType)|null  $default\n     * @return $this|TWhenEmptyReturnType\n     */\n    public function whenEmpty(callable $callback, ?callable $default = null)\n    {\n        return $this->when($this->isEmpty(), $callback, $default);\n    }\n\n    /**\n     * Apply the callback if the collection is not empty.\n     *\n     * @template TWhenNotEmptyReturnType\n     *\n     * @param  callable($this): TWhenNotEmptyReturnType  $callback\n     * @param  (callable($this): TWhenNotEmptyReturnType)|null  $default\n     * @return $this|TWhenNotEmptyReturnType\n     */\n    public function whenNotEmpty(callable $callback, ?callable $default = null)\n    {\n        return $this->when($this->isNotEmpty(), $callback, $default);\n    }\n\n    /**\n     * Apply the callback unless the collection is empty.\n     *\n     * @template TUnlessEmptyReturnType\n     *\n     * @param  callable($this): TUnlessEmptyReturnType  $callback\n     * @param  (callable($this): TUnlessEmptyReturnType)|null  $default\n     * @return $this|TUnlessEmptyReturnType\n     */\n    public function unlessEmpty(callable $callback, ?callable $default = null)\n    {\n        return $this->whenNotEmpty($callback, $default);\n    }\n\n    /**\n     * Apply the callback unless the collection is not empty.\n     *\n     * @template TUnlessNotEmptyReturnType\n     *\n     * @param  callable($this): TUnlessNotEmptyReturnType  $callback\n     * @param  (callable($this): TUnlessNotEmptyReturnType)|null  $default\n     * @return $this|TUnlessNotEmptyReturnType\n     */\n    public function unlessNotEmpty(callable $callback, ?callable $default = null)\n    {\n        return $this->whenEmpty($callback, $default);\n    }\n\n    /**\n     * Filter items by the given key value pair.\n     *\n     * @param  callable|string  $key\n     * @param  mixed  $operator\n     * @param  mixed  $value\n     * @return static\n     */\n    public function where($key, $operator = null, $value = null)\n    {\n        return $this->filter($this->operatorForWhere(...func_get_args()));\n    }\n\n    /**\n     * Filter items where the value for the given key is null.\n     *\n     * @param  string|null  $key\n     * @return static\n     */\n    public function whereNull($key = null)\n    {\n        return $this->whereStrict($key, null);\n    }\n\n    /**\n     * Filter items where the value for the given key is not null.\n     *\n     * @param  string|null  $key\n     * @return static\n     */\n    public function whereNotNull($key = null)\n    {\n        return $this->where($key, '!==', null);\n    }\n\n    /**\n     * Filter items by the given key value pair using strict comparison.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return static\n     */\n    public function whereStrict($key, $value)\n    {\n        return $this->where($key, '===', $value);\n    }\n\n    /**\n     * Filter items by the given key value pair.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @param  bool  $strict\n     * @return static\n     */\n    public function whereIn($key, $values, $strict = false)\n    {\n        $values = $this->getArrayableItems($values);\n\n        return $this->filter(fn ($item) => in_array(data_get($item, $key), $values, $strict));\n    }\n\n    /**\n     * Filter items by the given key value pair using strict comparison.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereInStrict($key, $values)\n    {\n        return $this->whereIn($key, $values, true);\n    }\n\n    /**\n     * Filter items such that the value of the given key is between the given values.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereBetween($key, $values)\n    {\n        return $this->where($key, '>=', reset($values))->where($key, '<=', end($values));\n    }\n\n    /**\n     * Filter items such that the value of the given key is not between the given values.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereNotBetween($key, $values)\n    {\n        return $this->filter(\n            fn ($item) => data_get($item, $key) < reset($values) || data_get($item, $key) > end($values)\n        );\n    }\n\n    /**\n     * Filter items by the given key value pair.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @param  bool  $strict\n     * @return static\n     */\n    public function whereNotIn($key, $values, $strict = false)\n    {\n        $values = $this->getArrayableItems($values);\n\n        return $this->reject(fn ($item) => in_array(data_get($item, $key), $values, $strict));\n    }\n\n    /**\n     * Filter items by the given key value pair using strict comparison.\n     *\n     * @param  string  $key\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|iterable  $values\n     * @return static\n     */\n    public function whereNotInStrict($key, $values)\n    {\n        return $this->whereNotIn($key, $values, true);\n    }\n\n    /**\n     * Filter the items, removing any items that don't match the given type(s).\n     *\n     * @template TWhereInstanceOf\n     *\n     * @param  class-string<TWhereInstanceOf>|array<array-key, class-string<TWhereInstanceOf>>  $type\n     * @return static<TKey, TWhereInstanceOf>\n     */\n    public function whereInstanceOf($type)\n    {\n        return $this->filter(function ($value) use ($type) {\n            if (is_array($type)) {\n                foreach ($type as $classType) {\n                    if ($value instanceof $classType) {\n                        return true;\n                    }\n                }\n\n                return false;\n            }\n\n            return $value instanceof $type;\n        });\n    }\n\n    /**\n     * Pass the collection to the given callback and return the result.\n     *\n     * @template TPipeReturnType\n     *\n     * @param  callable($this): TPipeReturnType  $callback\n     * @return TPipeReturnType\n     */\n    public function pipe(callable $callback)\n    {\n        return $callback($this);\n    }\n\n    /**\n     * Pass the collection into a new class.\n     *\n     * @template TPipeIntoValue\n     *\n     * @param  class-string<TPipeIntoValue>  $class\n     * @return TPipeIntoValue\n     */\n    public function pipeInto($class)\n    {\n        return new $class($this);\n    }\n\n    /**\n     * Pass the collection through a series of callable pipes and return the result.\n     *\n     * @param  array<callable>  $callbacks\n     * @return mixed\n     */\n    public function pipeThrough($callbacks)\n    {\n        return Collection::make($callbacks)->reduce(\n            fn ($carry, $callback) => $callback($carry),\n            $this,\n        );\n    }\n\n    /**\n     * Reduce the collection to a single value.\n     *\n     * @template TReduceInitial\n     * @template TReduceReturnType\n     *\n     * @param  callable(TReduceInitial|TReduceReturnType, TValue, TKey): TReduceReturnType  $callback\n     * @param  TReduceInitial  $initial\n     * @return TReduceReturnType\n     */\n    public function reduce(callable $callback, $initial = null)\n    {\n        $result = $initial;\n\n        foreach ($this as $key => $value) {\n            $result = $callback($result, $value, $key);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Reduce the collection to multiple aggregate values.\n     *\n     * @param  callable  $callback\n     * @param  mixed  ...$initial\n     * @return array\n     *\n     * @throws \\UnexpectedValueException\n     */\n    public function reduceSpread(callable $callback, ...$initial)\n    {\n        $result = $initial;\n\n        foreach ($this as $key => $value) {\n            $result = call_user_func_array($callback, array_merge($result, [$value, $key]));\n\n            if (! is_array($result)) {\n                throw new UnexpectedValueException(sprintf(\n                    \"%s::reduceSpread expects reducer to return an array, but got a '%s' instead.\",\n                    class_basename(static::class), gettype($result)\n                ));\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Reduce an associative collection to a single value.\n     *\n     * @template TReduceWithKeysInitial\n     * @template TReduceWithKeysReturnType\n     *\n     * @param  callable(TReduceWithKeysInitial|TReduceWithKeysReturnType, TValue, TKey): TReduceWithKeysReturnType  $callback\n     * @param  TReduceWithKeysInitial  $initial\n     * @return TReduceWithKeysReturnType\n     */\n    public function reduceWithKeys(callable $callback, $initial = null)\n    {\n        return $this->reduce($callback, $initial);\n    }\n\n    /**\n     * Create a collection of all elements that do not pass a given truth test.\n     *\n     * @param  (callable(TValue, TKey): bool)|bool|TValue  $callback\n     * @return static\n     */\n    public function reject($callback = true)\n    {\n        $useAsCallable = $this->useAsCallable($callback);\n\n        return $this->filter(function ($value, $key) use ($callback, $useAsCallable) {\n            return $useAsCallable\n                ? ! $callback($value, $key)\n                : $value != $callback;\n        });\n    }\n\n    /**\n     * Pass the collection to the given callback and then return it.\n     *\n     * @param  callable($this): mixed  $callback\n     * @return $this\n     */\n    public function tap(callable $callback)\n    {\n        $callback($this);\n\n        return $this;\n    }\n\n    /**\n     * Return only unique items from the collection array.\n     *\n     * @param  (callable(TValue, TKey): mixed)|string|null  $key\n     * @param  bool  $strict\n     * @return static\n     */\n    public function unique($key = null, $strict = false)\n    {\n        $callback = $this->valueRetriever($key);\n\n        $exists = [];\n\n        return $this->reject(function ($item, $key) use ($callback, $strict, &$exists) {\n            if (in_array($id = $callback($item, $key), $exists, $strict)) {\n                return true;\n            }\n\n            $exists[] = $id;\n        });\n    }\n\n    /**\n     * Return only unique items from the collection array using strict comparison.\n     *\n     * @param  (callable(TValue, TKey): mixed)|string|null  $key\n     * @return static\n     */\n    public function uniqueStrict($key = null)\n    {\n        return $this->unique($key, true);\n    }\n\n    /**\n     * Collect the values into a collection.\n     *\n     * @return \\Illuminate\\Support\\Collection<TKey, TValue>\n     */\n    public function collect()\n    {\n        return new Collection($this->all());\n    }\n\n    /**\n     * Get the collection of items as a plain array.\n     *\n     * @return array<TKey, mixed>\n     */\n    public function toArray()\n    {\n        return $this->map(fn ($value) => $value instanceof Arrayable ? $value->toArray() : $value)->all();\n    }\n\n    /**\n     * Convert the object into something JSON serializable.\n     *\n     * @return array<TKey, mixed>\n     */\n    public function jsonSerialize(): array\n    {\n        return array_map(function ($value) {\n            if ($value instanceof JsonSerializable) {\n                return $value->jsonSerialize();\n            } elseif ($value instanceof Jsonable) {\n                return json_decode($value->toJson(), true);\n            } elseif ($value instanceof Arrayable) {\n                return $value->toArray();\n            }\n\n            return $value;\n        }, $this->all());\n    }\n\n    /**\n     * Get the collection of items as JSON.\n     *\n     * @param  int  $options\n     * @return string\n     */\n    public function toJson($options = 0)\n    {\n        return json_encode($this->jsonSerialize(), $options);\n    }\n\n    /**\n     * Get a CachingIterator instance.\n     *\n     * @param  int  $flags\n     * @return \\CachingIterator\n     */\n    public function getCachingIterator($flags = CachingIterator::CALL_TOSTRING)\n    {\n        return new CachingIterator($this->getIterator(), $flags);\n    }\n\n    /**\n     * Convert the collection to its string representation.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->escapeWhenCastingToString\n                    ? e($this->toJson())\n                    : $this->toJson();\n    }\n\n    /**\n     * Indicate that the model's string representation should be escaped when __toString is invoked.\n     *\n     * @param  bool  $escape\n     * @return $this\n     */\n    public function escapeWhenCastingToString($escape = true)\n    {\n        $this->escapeWhenCastingToString = $escape;\n\n        return $this;\n    }\n\n    /**\n     * Add a method to the list of proxied methods.\n     *\n     * @param  string  $method\n     * @return void\n     */\n    public static function proxy($method)\n    {\n        static::$proxies[] = $method;\n    }\n\n    /**\n     * Dynamically access collection proxies.\n     *\n     * @param  string  $key\n     * @return mixed\n     *\n     * @throws \\Exception\n     */\n    public function __get($key)\n    {\n        if (! in_array($key, static::$proxies)) {\n            throw new Exception(\"Property [{$key}] does not exist on this collection instance.\");\n        }\n\n        return new HigherOrderCollectionProxy($this, $key);\n    }\n\n    /**\n     * Results array of items from Collection or Arrayable.\n     *\n     * @param  mixed  $items\n     * @return array<TKey, TValue>\n     */\n    protected function getArrayableItems($items)\n    {\n        if (is_array($items)) {\n            return $items;\n        }\n\n        return match (true) {\n            $items instanceof WeakMap => throw new InvalidArgumentException('Collections can not be created using instances of WeakMap.'),\n            $items instanceof Enumerable => $items->all(),\n            $items instanceof Arrayable => $items->toArray(),\n            $items instanceof Traversable => iterator_to_array($items),\n            $items instanceof Jsonable => json_decode($items->toJson(), true),\n            $items instanceof JsonSerializable => (array) $items->jsonSerialize(),\n            $items instanceof UnitEnum => [$items],\n            default => (array) $items,\n        };\n    }\n\n    /**\n     * Get an operator checker callback.\n     *\n     * @param  callable|string  $key\n     * @param  string|null  $operator\n     * @param  mixed  $value\n     * @return \\Closure\n     */\n    protected function operatorForWhere($key, $operator = null, $value = null)\n    {\n        if ($this->useAsCallable($key)) {\n            return $key;\n        }\n\n        if (func_num_args() === 1) {\n            $value = true;\n\n            $operator = '=';\n        }\n\n        if (func_num_args() === 2) {\n            $value = $operator;\n\n            $operator = '=';\n        }\n\n        return function ($item) use ($key, $operator, $value) {\n            $retrieved = data_get($item, $key);\n\n            $strings = array_filter([$retrieved, $value], function ($value) {\n                return is_string($value) || (is_object($value) && method_exists($value, '__toString'));\n            });\n\n            if (count($strings) < 2 && count(array_filter([$retrieved, $value], 'is_object')) == 1) {\n                return in_array($operator, ['!=', '<>', '!==']);\n            }\n\n            switch ($operator) {\n                default:\n                case '=':\n                case '==':  return $retrieved == $value;\n                case '!=':\n                case '<>':  return $retrieved != $value;\n                case '<':   return $retrieved < $value;\n                case '>':   return $retrieved > $value;\n                case '<=':  return $retrieved <= $value;\n                case '>=':  return $retrieved >= $value;\n                case '===': return $retrieved === $value;\n                case '!==': return $retrieved !== $value;\n                case '<=>': return $retrieved <=> $value;\n            }\n        };\n    }\n\n    /**\n     * Determine if the given value is callable, but not a string.\n     *\n     * @param  mixed  $value\n     * @return bool\n     */\n    protected function useAsCallable($value)\n    {\n        return ! is_string($value) && is_callable($value);\n    }\n\n    /**\n     * Get a value retrieving callback.\n     *\n     * @param  callable|string|null  $value\n     * @return callable\n     */\n    protected function valueRetriever($value)\n    {\n        if ($this->useAsCallable($value)) {\n            return $value;\n        }\n\n        return fn ($item) => data_get($item, $value);\n    }\n\n    /**\n     * Make a function to check an item's equality.\n     *\n     * @param  mixed  $value\n     * @return \\Closure(mixed): bool\n     */\n    protected function equality($value)\n    {\n        return fn ($item) => $item === $value;\n    }\n\n    /**\n     * Make a function using another function, by negating its result.\n     *\n     * @param  \\Closure  $callback\n     * @return \\Closure\n     */\n    protected function negate(Closure $callback)\n    {\n        return fn (...$params) => ! $callback(...$params);\n    }\n\n    /**\n     * Make a function that returns what's passed to it.\n     *\n     * @return \\Closure(TValue): TValue\n     */\n    protected function identity()\n    {\n        return fn ($value) => $value;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/composer.json",
    "content": "{\n    \"name\": \"illuminate/collections\",\n    \"description\": \"The Illuminate Collections package.\",\n    \"license\": \"MIT\",\n    \"homepage\": \"https://laravel.com\",\n    \"support\": {\n        \"issues\": \"https://github.com/laravel/framework/issues\",\n        \"source\": \"https://github.com/laravel/framework\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Taylor Otwell\",\n            \"email\": \"taylor@laravel.com\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.1\",\n        \"illuminate/conditionable\": \"^10.0\",\n        \"illuminate/contracts\": \"^10.0\",\n        \"illuminate/macroable\": \"^10.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Illuminate\\\\Support\\\\\": \"\"\n        },\n        \"files\": [\n            \"helpers.php\"\n        ]\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"10.x-dev\"\n        }\n    },\n    \"suggest\": {\n        \"symfony/var-dumper\": \"Required to use the dump method (^6.2).\"\n    },\n    \"config\": {\n        \"sort-packages\": true\n    },\n    \"minimum-stability\": \"dev\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/functions.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nif (! function_exists('Illuminate\\Support\\enum_value')) {\n    /**\n     * Return a scalar value for the given value that might be an enum.\n     *\n     * @internal\n     *\n     * @template TValue\n     * @template TDefault\n     *\n     * @param  TValue  $value\n     * @param  TDefault|callable(TValue): TDefault  $default\n     * @return ($value is empty ? TDefault : mixed)\n     */\n    function enum_value($value, $default = null)\n    {\n        return match (true) {\n            $value instanceof \\BackedEnum => $value->value,\n            $value instanceof \\UnitEnum => $value->name,\n\n            default => $value ?? value($default),\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/collections/helpers.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Arr;\nuse Illuminate\\Support\\Collection;\n\nif (! function_exists('collect')) {\n    /**\n     * Create a collection from the given value.\n     *\n     * @template TKey of array-key\n     * @template TValue\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable<TKey, TValue>|iterable<TKey, TValue>|null  $value\n     * @return \\Illuminate\\Support\\Collection<TKey, TValue>\n     */\n    function collect($value = [])\n    {\n        return new Collection($value);\n    }\n}\n\nif (! function_exists('data_fill')) {\n    /**\n     * Fill in data where it's missing.\n     *\n     * @param  mixed  $target\n     * @param  string|array  $key\n     * @param  mixed  $value\n     * @return mixed\n     */\n    function data_fill(&$target, $key, $value)\n    {\n        return data_set($target, $key, $value, false);\n    }\n}\n\nif (! function_exists('data_get')) {\n    /**\n     * Get an item from an array or object using \"dot\" notation.\n     *\n     * @param  mixed  $target\n     * @param  string|array|int|null  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    function data_get($target, $key, $default = null)\n    {\n        if (is_null($key)) {\n            return $target;\n        }\n\n        $key = is_array($key) ? $key : explode('.', $key);\n\n        foreach ($key as $i => $segment) {\n            unset($key[$i]);\n\n            if (is_null($segment)) {\n                return $target;\n            }\n\n            if ($segment === '*') {\n                if ($target instanceof Collection) {\n                    $target = $target->all();\n                } elseif (! is_iterable($target)) {\n                    return value($default);\n                }\n\n                $result = [];\n\n                foreach ($target as $item) {\n                    $result[] = data_get($item, $key);\n                }\n\n                return in_array('*', $key) ? Arr::collapse($result) : $result;\n            }\n\n            if (Arr::accessible($target) && Arr::exists($target, $segment)) {\n                $target = $target[$segment];\n            } elseif (is_object($target) && isset($target->{$segment})) {\n                $target = $target->{$segment};\n            } else {\n                return value($default);\n            }\n        }\n\n        return $target;\n    }\n}\n\nif (! function_exists('data_set')) {\n    /**\n     * Set an item on an array or object using dot notation.\n     *\n     * @param  mixed  $target\n     * @param  string|array  $key\n     * @param  mixed  $value\n     * @param  bool  $overwrite\n     * @return mixed\n     */\n    function data_set(&$target, $key, $value, $overwrite = true)\n    {\n        $segments = is_array($key) ? $key : explode('.', $key);\n\n        if (($segment = array_shift($segments)) === '*') {\n            if (! Arr::accessible($target)) {\n                $target = [];\n            }\n\n            if ($segments) {\n                foreach ($target as &$inner) {\n                    data_set($inner, $segments, $value, $overwrite);\n                }\n            } elseif ($overwrite) {\n                foreach ($target as &$inner) {\n                    $inner = $value;\n                }\n            }\n        } elseif (Arr::accessible($target)) {\n            if ($segments) {\n                if (! Arr::exists($target, $segment)) {\n                    $target[$segment] = [];\n                }\n\n                data_set($target[$segment], $segments, $value, $overwrite);\n            } elseif ($overwrite || ! Arr::exists($target, $segment)) {\n                $target[$segment] = $value;\n            }\n        } elseif (is_object($target)) {\n            if ($segments) {\n                if (! isset($target->{$segment})) {\n                    $target->{$segment} = [];\n                }\n\n                data_set($target->{$segment}, $segments, $value, $overwrite);\n            } elseif ($overwrite || ! isset($target->{$segment})) {\n                $target->{$segment} = $value;\n            }\n        } else {\n            $target = [];\n\n            if ($segments) {\n                data_set($target[$segment], $segments, $value, $overwrite);\n            } elseif ($overwrite) {\n                $target[$segment] = $value;\n            }\n        }\n\n        return $target;\n    }\n}\n\nif (! function_exists('data_forget')) {\n    /**\n     * Remove / unset an item from an array or object using \"dot\" notation.\n     *\n     * @param  mixed  $target\n     * @param  string|array|int|null  $key\n     * @return mixed\n     */\n    function data_forget(&$target, $key)\n    {\n        $segments = is_array($key) ? $key : explode('.', $key);\n\n        if (($segment = array_shift($segments)) === '*' && Arr::accessible($target)) {\n            if ($segments) {\n                foreach ($target as &$inner) {\n                    data_forget($inner, $segments);\n                }\n            }\n        } elseif (Arr::accessible($target)) {\n            if ($segments && Arr::exists($target, $segment)) {\n                data_forget($target[$segment], $segments);\n            } else {\n                Arr::forget($target, $segment);\n            }\n        } elseif (is_object($target)) {\n            if ($segments && isset($target->{$segment})) {\n                data_forget($target->{$segment}, $segments);\n            } elseif (isset($target->{$segment})) {\n                unset($target->{$segment});\n            }\n        }\n\n        return $target;\n    }\n}\n\nif (! function_exists('head')) {\n    /**\n     * Get the first element of an array. Useful for method chaining.\n     *\n     * @param  array  $array\n     * @return mixed\n     */\n    function head($array)\n    {\n        return reset($array);\n    }\n}\n\nif (! function_exists('last')) {\n    /**\n     * Get the last element from an array.\n     *\n     * @param  array  $array\n     * @return mixed\n     */\n    function last($array)\n    {\n        return end($array);\n    }\n}\n\nif (! function_exists('value')) {\n    /**\n     * Return the default value of the given value.\n     *\n     * @param  mixed  $value\n     * @param  mixed  ...$args\n     * @return mixed\n     */\n    function value($value, ...$args)\n    {\n        return $value instanceof Closure ? $value(...$args) : $value;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/conditionable/HigherOrderWhenProxy.php",
    "content": "<?php\n\nnamespace Illuminate\\Support;\n\nclass HigherOrderWhenProxy\n{\n    /**\n     * The target being conditionally operated on.\n     *\n     * @var mixed\n     */\n    protected $target;\n\n    /**\n     * The condition for proxying.\n     *\n     * @var bool\n     */\n    protected $condition;\n\n    /**\n     * Indicates whether the proxy has a condition.\n     *\n     * @var bool\n     */\n    protected $hasCondition = false;\n\n    /**\n     * Determine whether the condition should be negated.\n     *\n     * @var bool\n     */\n    protected $negateConditionOnCapture;\n\n    /**\n     * Create a new proxy instance.\n     *\n     * @param  mixed  $target\n     * @return void\n     */\n    public function __construct($target)\n    {\n        $this->target = $target;\n    }\n\n    /**\n     * Set the condition on the proxy.\n     *\n     * @param  bool  $condition\n     * @return $this\n     */\n    public function condition($condition)\n    {\n        [$this->condition, $this->hasCondition] = [$condition, true];\n\n        return $this;\n    }\n\n    /**\n     * Indicate that the condition should be negated.\n     *\n     * @return $this\n     */\n    public function negateConditionOnCapture()\n    {\n        $this->negateConditionOnCapture = true;\n\n        return $this;\n    }\n\n    /**\n     * Proxy accessing an attribute onto the target.\n     *\n     * @param  string  $key\n     * @return mixed\n     */\n    public function __get($key)\n    {\n        if (! $this->hasCondition) {\n            $condition = $this->target->{$key};\n\n            return $this->condition($this->negateConditionOnCapture ? ! $condition : $condition);\n        }\n\n        return $this->condition\n            ? $this->target->{$key}\n            : $this->target;\n    }\n\n    /**\n     * Proxy a method call on the target.\n     *\n     * @param  string  $method\n     * @param  array  $parameters\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        if (! $this->hasCondition) {\n            $condition = $this->target->{$method}(...$parameters);\n\n            return $this->condition($this->negateConditionOnCapture ? ! $condition : $condition);\n        }\n\n        return $this->condition\n            ? $this->target->{$method}(...$parameters)\n            : $this->target;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/conditionable/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) Taylor Otwell\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/conditionable/Traits/Conditionable.php",
    "content": "<?php\n\nnamespace Illuminate\\Support\\Traits;\n\nuse Closure;\nuse Illuminate\\Support\\HigherOrderWhenProxy;\n\ntrait Conditionable\n{\n    /**\n     * Apply the callback if the given \"value\" is (or resolves to) truthy.\n     *\n     * @template TWhenParameter\n     * @template TWhenReturnType\n     *\n     * @param  (\\Closure($this): TWhenParameter)|TWhenParameter|null  $value\n     * @param  (callable($this, TWhenParameter): TWhenReturnType)|null  $callback\n     * @param  (callable($this, TWhenParameter): TWhenReturnType)|null  $default\n     * @return $this|TWhenReturnType\n     */\n    public function when($value = null, ?callable $callback = null, ?callable $default = null)\n    {\n        $value = $value instanceof Closure ? $value($this) : $value;\n\n        if (func_num_args() === 0) {\n            return new HigherOrderWhenProxy($this);\n        }\n\n        if (func_num_args() === 1) {\n            return (new HigherOrderWhenProxy($this))->condition($value);\n        }\n\n        if ($value) {\n            return $callback($this, $value) ?? $this;\n        } elseif ($default) {\n            return $default($this, $value) ?? $this;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Apply the callback if the given \"value\" is (or resolves to) falsy.\n     *\n     * @template TUnlessParameter\n     * @template TUnlessReturnType\n     *\n     * @param  (\\Closure($this): TUnlessParameter)|TUnlessParameter|null  $value\n     * @param  (callable($this, TUnlessParameter): TUnlessReturnType)|null  $callback\n     * @param  (callable($this, TUnlessParameter): TUnlessReturnType)|null  $default\n     * @return $this|TUnlessReturnType\n     */\n    public function unless($value = null, ?callable $callback = null, ?callable $default = null)\n    {\n        $value = $value instanceof Closure ? $value($this) : $value;\n\n        if (func_num_args() === 0) {\n            return (new HigherOrderWhenProxy($this))->negateConditionOnCapture();\n        }\n\n        if (func_num_args() === 1) {\n            return (new HigherOrderWhenProxy($this))->condition(! $value);\n        }\n\n        if (! $value) {\n            return $callback($this, $value) ?? $this;\n        } elseif ($default) {\n            return $default($this, $value) ?? $this;\n        }\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/conditionable/composer.json",
    "content": "{\n    \"name\": \"illuminate/conditionable\",\n    \"description\": \"The Illuminate Conditionable package.\",\n    \"license\": \"MIT\",\n    \"homepage\": \"https://laravel.com\",\n    \"support\": {\n        \"issues\": \"https://github.com/laravel/framework/issues\",\n        \"source\": \"https://github.com/laravel/framework\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Taylor Otwell\",\n            \"email\": \"taylor@laravel.com\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.0.2\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Illuminate\\\\Support\\\\\": \"\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"10.x-dev\"\n        }\n    },\n    \"config\": {\n        \"sort-packages\": true\n    },\n    \"minimum-stability\": \"dev\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/Access/Authorizable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth\\Access;\n\ninterface Authorizable\n{\n    /**\n     * Determine if the entity has a given ability.\n     *\n     * @param  iterable|string  $abilities\n     * @param  array|mixed  $arguments\n     * @return bool\n     */\n    public function can($abilities, $arguments = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/Access/Gate.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth\\Access;\n\ninterface Gate\n{\n    /**\n     * Determine if a given ability has been defined.\n     *\n     * @param  string  $ability\n     * @return bool\n     */\n    public function has($ability);\n\n    /**\n     * Define a new ability.\n     *\n     * @param  string  $ability\n     * @param  callable|string  $callback\n     * @return $this\n     */\n    public function define($ability, $callback);\n\n    /**\n     * Define abilities for a resource.\n     *\n     * @param  string  $name\n     * @param  string  $class\n     * @param  array|null  $abilities\n     * @return $this\n     */\n    public function resource($name, $class, array $abilities = null);\n\n    /**\n     * Define a policy class for a given class type.\n     *\n     * @param  string  $class\n     * @param  string  $policy\n     * @return $this\n     */\n    public function policy($class, $policy);\n\n    /**\n     * Register a callback to run before all Gate checks.\n     *\n     * @param  callable  $callback\n     * @return $this\n     */\n    public function before(callable $callback);\n\n    /**\n     * Register a callback to run after all Gate checks.\n     *\n     * @param  callable  $callback\n     * @return $this\n     */\n    public function after(callable $callback);\n\n    /**\n     * Determine if all of the given abilities should be granted for the current user.\n     *\n     * @param  iterable|string  $ability\n     * @param  array|mixed  $arguments\n     * @return bool\n     */\n    public function allows($ability, $arguments = []);\n\n    /**\n     * Determine if any of the given abilities should be denied for the current user.\n     *\n     * @param  iterable|string  $ability\n     * @param  array|mixed  $arguments\n     * @return bool\n     */\n    public function denies($ability, $arguments = []);\n\n    /**\n     * Determine if all of the given abilities should be granted for the current user.\n     *\n     * @param  iterable|string  $abilities\n     * @param  array|mixed  $arguments\n     * @return bool\n     */\n    public function check($abilities, $arguments = []);\n\n    /**\n     * Determine if any one of the given abilities should be granted for the current user.\n     *\n     * @param  iterable|string  $abilities\n     * @param  array|mixed  $arguments\n     * @return bool\n     */\n    public function any($abilities, $arguments = []);\n\n    /**\n     * Determine if the given ability should be granted for the current user.\n     *\n     * @param  string  $ability\n     * @param  array|mixed  $arguments\n     * @return \\Illuminate\\Auth\\Access\\Response\n     *\n     * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n     */\n    public function authorize($ability, $arguments = []);\n\n    /**\n     * Inspect the user for the given ability.\n     *\n     * @param  string  $ability\n     * @param  array|mixed  $arguments\n     * @return \\Illuminate\\Auth\\Access\\Response\n     */\n    public function inspect($ability, $arguments = []);\n\n    /**\n     * Get the raw result from the authorization callback.\n     *\n     * @param  string  $ability\n     * @param  array|mixed  $arguments\n     * @return mixed\n     *\n     * @throws \\Illuminate\\Auth\\Access\\AuthorizationException\n     */\n    public function raw($ability, $arguments = []);\n\n    /**\n     * Get a policy instance for a given class.\n     *\n     * @param  object|string  $class\n     * @return mixed\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function getPolicyFor($class);\n\n    /**\n     * Get a guard instance for the given user.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable|mixed  $user\n     * @return static\n     */\n    public function forUser($user);\n\n    /**\n     * Get all of the defined abilities.\n     *\n     * @return array\n     */\n    public function abilities();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/Authenticatable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface Authenticatable\n{\n    /**\n     * Get the name of the unique identifier for the user.\n     *\n     * @return string\n     */\n    public function getAuthIdentifierName();\n\n    /**\n     * Get the unique identifier for the user.\n     *\n     * @return mixed\n     */\n    public function getAuthIdentifier();\n\n    /**\n     * Get the password for the user.\n     *\n     * @return string\n     */\n    public function getAuthPassword();\n\n    /**\n     * Get the token value for the \"remember me\" session.\n     *\n     * @return string\n     */\n    public function getRememberToken();\n\n    /**\n     * Set the token value for the \"remember me\" session.\n     *\n     * @param  string  $value\n     * @return void\n     */\n    public function setRememberToken($value);\n\n    /**\n     * Get the column name for the \"remember me\" token.\n     *\n     * @return string\n     */\n    public function getRememberTokenName();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/CanResetPassword.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface CanResetPassword\n{\n    /**\n     * Get the e-mail address where password reset links are sent.\n     *\n     * @return string\n     */\n    public function getEmailForPasswordReset();\n\n    /**\n     * Send the password reset notification.\n     *\n     * @param  string  $token\n     * @return void\n     */\n    public function sendPasswordResetNotification($token);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface Factory\n{\n    /**\n     * Get a guard instance by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Auth\\Guard|\\Illuminate\\Contracts\\Auth\\StatefulGuard\n     */\n    public function guard($name = null);\n\n    /**\n     * Set the default guard the factory should serve.\n     *\n     * @param  string  $name\n     * @return void\n     */\n    public function shouldUse($name);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/Guard.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface Guard\n{\n    /**\n     * Determine if the current user is authenticated.\n     *\n     * @return bool\n     */\n    public function check();\n\n    /**\n     * Determine if the current user is a guest.\n     *\n     * @return bool\n     */\n    public function guest();\n\n    /**\n     * Get the currently authenticated user.\n     *\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     */\n    public function user();\n\n    /**\n     * Get the ID for the currently authenticated user.\n     *\n     * @return int|string|null\n     */\n    public function id();\n\n    /**\n     * Validate a user's credentials.\n     *\n     * @param  array  $credentials\n     * @return bool\n     */\n    public function validate(array $credentials = []);\n\n    /**\n     * Determine if the guard has a user instance.\n     *\n     * @return bool\n     */\n    public function hasUser();\n\n    /**\n     * Set the current user.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @return void\n     */\n    public function setUser(Authenticatable $user);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/Middleware/AuthenticatesRequests.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth\\Middleware;\n\ninterface AuthenticatesRequests\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/MustVerifyEmail.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface MustVerifyEmail\n{\n    /**\n     * Determine if the user has verified their email address.\n     *\n     * @return bool\n     */\n    public function hasVerifiedEmail();\n\n    /**\n     * Mark the given user's email as verified.\n     *\n     * @return bool\n     */\n    public function markEmailAsVerified();\n\n    /**\n     * Send the email verification notification.\n     *\n     * @return void\n     */\n    public function sendEmailVerificationNotification();\n\n    /**\n     * Get the email address that should be used for verification.\n     *\n     * @return string\n     */\n    public function getEmailForVerification();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/PasswordBroker.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\nuse Closure;\n\ninterface PasswordBroker\n{\n    /**\n     * Constant representing a successfully sent reminder.\n     *\n     * @var string\n     */\n    const RESET_LINK_SENT = 'passwords.sent';\n\n    /**\n     * Constant representing a successfully reset password.\n     *\n     * @var string\n     */\n    const PASSWORD_RESET = 'passwords.reset';\n\n    /**\n     * Constant representing the user not found response.\n     *\n     * @var string\n     */\n    const INVALID_USER = 'passwords.user';\n\n    /**\n     * Constant representing an invalid token.\n     *\n     * @var string\n     */\n    const INVALID_TOKEN = 'passwords.token';\n\n    /**\n     * Constant representing a throttled reset attempt.\n     *\n     * @var string\n     */\n    const RESET_THROTTLED = 'passwords.throttled';\n\n    /**\n     * Send a password reset link to a user.\n     *\n     * @param  array  $credentials\n     * @param  \\Closure|null  $callback\n     * @return string\n     */\n    public function sendResetLink(array $credentials, Closure $callback = null);\n\n    /**\n     * Reset the password for the given token.\n     *\n     * @param  array  $credentials\n     * @param  \\Closure  $callback\n     * @return mixed\n     */\n    public function reset(array $credentials, Closure $callback);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/PasswordBrokerFactory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface PasswordBrokerFactory\n{\n    /**\n     * Get a password broker instance by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Auth\\PasswordBroker\n     */\n    public function broker($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/StatefulGuard.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface StatefulGuard extends Guard\n{\n    /**\n     * Attempt to authenticate a user using the given credentials.\n     *\n     * @param  array  $credentials\n     * @param  bool  $remember\n     * @return bool\n     */\n    public function attempt(array $credentials = [], $remember = false);\n\n    /**\n     * Log a user into the application without sessions or cookies.\n     *\n     * @param  array  $credentials\n     * @return bool\n     */\n    public function once(array $credentials = []);\n\n    /**\n     * Log a user into the application.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @param  bool  $remember\n     * @return void\n     */\n    public function login(Authenticatable $user, $remember = false);\n\n    /**\n     * Log the given user ID into the application.\n     *\n     * @param  mixed  $id\n     * @param  bool  $remember\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|bool\n     */\n    public function loginUsingId($id, $remember = false);\n\n    /**\n     * Log the given user ID into the application without sessions or cookies.\n     *\n     * @param  mixed  $id\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|bool\n     */\n    public function onceUsingId($id);\n\n    /**\n     * Determine if the user was authenticated via \"remember me\" cookie.\n     *\n     * @return bool\n     */\n    public function viaRemember();\n\n    /**\n     * Log the user out of the application.\n     *\n     * @return void\n     */\n    public function logout();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/SupportsBasicAuth.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface SupportsBasicAuth\n{\n    /**\n     * Attempt to authenticate using HTTP Basic Auth.\n     *\n     * @param  string  $field\n     * @param  array  $extraConditions\n     * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n     */\n    public function basic($field = 'email', $extraConditions = []);\n\n    /**\n     * Perform a stateless HTTP Basic login attempt.\n     *\n     * @param  string  $field\n     * @param  array  $extraConditions\n     * @return \\Symfony\\Component\\HttpFoundation\\Response|null\n     */\n    public function onceBasic($field = 'email', $extraConditions = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Auth/UserProvider.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Auth;\n\ninterface UserProvider\n{\n    /**\n     * Retrieve a user by their unique identifier.\n     *\n     * @param  mixed  $identifier\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     */\n    public function retrieveById($identifier);\n\n    /**\n     * Retrieve a user by their unique identifier and \"remember me\" token.\n     *\n     * @param  mixed  $identifier\n     * @param  string  $token\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     */\n    public function retrieveByToken($identifier, $token);\n\n    /**\n     * Update the \"remember me\" token for the given user in storage.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @param  string  $token\n     * @return void\n     */\n    public function updateRememberToken(Authenticatable $user, $token);\n\n    /**\n     * Retrieve a user by the given credentials.\n     *\n     * @param  array  $credentials\n     * @return \\Illuminate\\Contracts\\Auth\\Authenticatable|null\n     */\n    public function retrieveByCredentials(array $credentials);\n\n    /**\n     * Validate a user against the given credentials.\n     *\n     * @param  \\Illuminate\\Contracts\\Auth\\Authenticatable  $user\n     * @param  array  $credentials\n     * @return bool\n     */\n    public function validateCredentials(Authenticatable $user, array $credentials);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Broadcasting/Broadcaster.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Broadcasting;\n\ninterface Broadcaster\n{\n    /**\n     * Authenticate the incoming request for a given channel.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return mixed\n     */\n    public function auth($request);\n\n    /**\n     * Return the valid authentication response.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  mixed  $result\n     * @return mixed\n     */\n    public function validAuthenticationResponse($request, $result);\n\n    /**\n     * Broadcast the given event.\n     *\n     * @param  array  $channels\n     * @param  string  $event\n     * @param  array  $payload\n     * @return void\n     *\n     * @throws \\Illuminate\\Broadcasting\\BroadcastException\n     */\n    public function broadcast(array $channels, $event, array $payload = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Broadcasting/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Broadcasting;\n\ninterface Factory\n{\n    /**\n     * Get a broadcaster implementation by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Broadcasting\\Broadcaster\n     */\n    public function connection($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Broadcasting/HasBroadcastChannel.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Broadcasting;\n\ninterface HasBroadcastChannel\n{\n    /**\n     * Get the broadcast channel route definition that is associated with the given entity.\n     *\n     * @return string\n     */\n    public function broadcastChannelRoute();\n\n    /**\n     * Get the broadcast channel name that is associated with the given entity.\n     *\n     * @return string\n     */\n    public function broadcastChannel();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Broadcasting/ShouldBeUnique.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Broadcasting;\n\ninterface ShouldBeUnique\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Broadcasting/ShouldBroadcast.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Broadcasting;\n\ninterface ShouldBroadcast\n{\n    /**\n     * Get the channels the event should broadcast on.\n     *\n     * @return \\Illuminate\\Broadcasting\\Channel|\\Illuminate\\Broadcasting\\Channel[]|string[]|string\n     */\n    public function broadcastOn();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Broadcasting;\n\ninterface ShouldBroadcastNow extends ShouldBroadcast\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Bus/Dispatcher.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Bus;\n\ninterface Dispatcher\n{\n    /**\n     * Dispatch a command to its appropriate handler.\n     *\n     * @param  mixed  $command\n     * @return mixed\n     */\n    public function dispatch($command);\n\n    /**\n     * Dispatch a command to its appropriate handler in the current process.\n     *\n     * Queueable jobs will be dispatched to the \"sync\" queue.\n     *\n     * @param  mixed  $command\n     * @param  mixed  $handler\n     * @return mixed\n     */\n    public function dispatchSync($command, $handler = null);\n\n    /**\n     * Dispatch a command to its appropriate handler in the current process.\n     *\n     * @param  mixed  $command\n     * @param  mixed  $handler\n     * @return mixed\n     */\n    public function dispatchNow($command, $handler = null);\n\n    /**\n     * Determine if the given command has a handler.\n     *\n     * @param  mixed  $command\n     * @return bool\n     */\n    public function hasCommandHandler($command);\n\n    /**\n     * Retrieve the handler for a command.\n     *\n     * @param  mixed  $command\n     * @return bool|mixed\n     */\n    public function getCommandHandler($command);\n\n    /**\n     * Set the pipes commands should be piped through before dispatching.\n     *\n     * @param  array  $pipes\n     * @return $this\n     */\n    public function pipeThrough(array $pipes);\n\n    /**\n     * Map a command to a handler.\n     *\n     * @param  array  $map\n     * @return $this\n     */\n    public function map(array $map);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Bus/QueueingDispatcher.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Bus;\n\ninterface QueueingDispatcher extends Dispatcher\n{\n    /**\n     * Attempt to find the batch with the given ID.\n     *\n     * @param  string  $batchId\n     * @return \\Illuminate\\Bus\\Batch|null\n     */\n    public function findBatch(string $batchId);\n\n    /**\n     * Create a new batch of queueable jobs.\n     *\n     * @param  \\Illuminate\\Support\\Collection|array  $jobs\n     * @return \\Illuminate\\Bus\\PendingBatch\n     */\n    public function batch($jobs);\n\n    /**\n     * Dispatch a command to its appropriate handler behind a queue.\n     *\n     * @param  mixed  $command\n     * @return mixed\n     */\n    public function dispatchToQueue($command);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cache/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cache;\n\ninterface Factory\n{\n    /**\n     * Get a cache store instance by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Cache\\Repository\n     */\n    public function store($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cache/Lock.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cache;\n\ninterface Lock\n{\n    /**\n     * Attempt to acquire the lock.\n     *\n     * @param  callable|null  $callback\n     * @return mixed\n     */\n    public function get($callback = null);\n\n    /**\n     * Attempt to acquire the lock for the given number of seconds.\n     *\n     * @param  int  $seconds\n     * @param  callable|null  $callback\n     * @return mixed\n     */\n    public function block($seconds, $callback = null);\n\n    /**\n     * Release the lock.\n     *\n     * @return bool\n     */\n    public function release();\n\n    /**\n     * Returns the current owner of the lock.\n     *\n     * @return string\n     */\n    public function owner();\n\n    /**\n     * Releases this lock in disregard of ownership.\n     *\n     * @return void\n     */\n    public function forceRelease();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cache/LockProvider.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cache;\n\ninterface LockProvider\n{\n    /**\n     * Get a lock instance.\n     *\n     * @param  string  $name\n     * @param  int  $seconds\n     * @param  string|null  $owner\n     * @return \\Illuminate\\Contracts\\Cache\\Lock\n     */\n    public function lock($name, $seconds = 0, $owner = null);\n\n    /**\n     * Restore a lock instance using the owner identifier.\n     *\n     * @param  string  $name\n     * @param  string  $owner\n     * @return \\Illuminate\\Contracts\\Cache\\Lock\n     */\n    public function restoreLock($name, $owner);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cache/LockTimeoutException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cache;\n\nuse Exception;\n\nclass LockTimeoutException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cache/Repository.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cache;\n\nuse Closure;\nuse Psr\\SimpleCache\\CacheInterface;\n\ninterface Repository extends CacheInterface\n{\n    /**\n     * Retrieve an item from the cache and delete it.\n     *\n     * @template TCacheValue\n     *\n     * @param  array|string  $key\n     * @param  TCacheValue|(\\Closure(): TCacheValue)  $default\n     * @return (TCacheValue is null ? mixed : TCacheValue)\n     */\n    public function pull($key, $default = null);\n\n    /**\n     * Store an item in the cache.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  \\DateTimeInterface|\\DateInterval|int|null  $ttl\n     * @return bool\n     */\n    public function put($key, $value, $ttl = null);\n\n    /**\n     * Store an item in the cache if the key does not exist.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  \\DateTimeInterface|\\DateInterval|int|null  $ttl\n     * @return bool\n     */\n    public function add($key, $value, $ttl = null);\n\n    /**\n     * Increment the value of an item in the cache.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return int|bool\n     */\n    public function increment($key, $value = 1);\n\n    /**\n     * Decrement the value of an item in the cache.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return int|bool\n     */\n    public function decrement($key, $value = 1);\n\n    /**\n     * Store an item in the cache indefinitely.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function forever($key, $value);\n\n    /**\n     * Get an item from the cache, or execute the given Closure and store the result.\n     *\n     * @template TCacheValue\n     *\n     * @param  string  $key\n     * @param  \\DateTimeInterface|\\DateInterval|\\Closure|int|null  $ttl\n     * @param  \\Closure(): TCacheValue  $callback\n     * @return TCacheValue\n     */\n    public function remember($key, $ttl, Closure $callback);\n\n    /**\n     * Get an item from the cache, or execute the given Closure and store the result forever.\n     *\n     * @template TCacheValue\n     *\n     * @param  string  $key\n     * @param  \\Closure(): TCacheValue  $callback\n     * @return TCacheValue\n     */\n    public function sear($key, Closure $callback);\n\n    /**\n     * Get an item from the cache, or execute the given Closure and store the result forever.\n     *\n     * @template TCacheValue\n     *\n     * @param  string  $key\n     * @param  \\Closure(): TCacheValue  $callback\n     * @return TCacheValue\n     */\n    public function rememberForever($key, Closure $callback);\n\n    /**\n     * Remove an item from the cache.\n     *\n     * @param  string  $key\n     * @return bool\n     */\n    public function forget($key);\n\n    /**\n     * Get the cache store implementation.\n     *\n     * @return \\Illuminate\\Contracts\\Cache\\Store\n     */\n    public function getStore();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cache/Store.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cache;\n\ninterface Store\n{\n    /**\n     * Retrieve an item from the cache by key.\n     *\n     * @param  string|array  $key\n     * @return mixed\n     */\n    public function get($key);\n\n    /**\n     * Retrieve multiple items from the cache by key.\n     *\n     * Items not found in the cache will have a null value.\n     *\n     * @param  array  $keys\n     * @return array\n     */\n    public function many(array $keys);\n\n    /**\n     * Store an item in the cache for a given number of seconds.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  int  $seconds\n     * @return bool\n     */\n    public function put($key, $value, $seconds);\n\n    /**\n     * Store multiple items in the cache for a given number of seconds.\n     *\n     * @param  array  $values\n     * @param  int  $seconds\n     * @return bool\n     */\n    public function putMany(array $values, $seconds);\n\n    /**\n     * Increment the value of an item in the cache.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return int|bool\n     */\n    public function increment($key, $value = 1);\n\n    /**\n     * Decrement the value of an item in the cache.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return int|bool\n     */\n    public function decrement($key, $value = 1);\n\n    /**\n     * Store an item in the cache indefinitely.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function forever($key, $value);\n\n    /**\n     * Remove an item from the cache.\n     *\n     * @param  string  $key\n     * @return bool\n     */\n    public function forget($key);\n\n    /**\n     * Remove all items from the cache.\n     *\n     * @return bool\n     */\n    public function flush();\n\n    /**\n     * Get the cache key prefix.\n     *\n     * @return string\n     */\n    public function getPrefix();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Config/Repository.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Config;\n\ninterface Repository\n{\n    /**\n     * Determine if the given configuration value exists.\n     *\n     * @param  string  $key\n     * @return bool\n     */\n    public function has($key);\n\n    /**\n     * Get the specified configuration value.\n     *\n     * @param  array|string  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public function get($key, $default = null);\n\n    /**\n     * Get all of the configuration items for the application.\n     *\n     * @return array\n     */\n    public function all();\n\n    /**\n     * Set a given configuration value.\n     *\n     * @param  array|string  $key\n     * @param  mixed  $value\n     * @return void\n     */\n    public function set($key, $value = null);\n\n    /**\n     * Prepend a value onto an array configuration value.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return void\n     */\n    public function prepend($key, $value);\n\n    /**\n     * Push a value onto an array configuration value.\n     *\n     * @param  string  $key\n     * @param  mixed  $value\n     * @return void\n     */\n    public function push($key, $value);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Console/Application.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Console;\n\ninterface Application\n{\n    /**\n     * Run an Artisan console command by name.\n     *\n     * @param  string  $command\n     * @param  array  $parameters\n     * @param  \\Symfony\\Component\\Console\\Output\\OutputInterface|null  $outputBuffer\n     * @return int\n     */\n    public function call($command, array $parameters = [], $outputBuffer = null);\n\n    /**\n     * Get the output from the last command.\n     *\n     * @return string\n     */\n    public function output();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Console/Isolatable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Console;\n\ninterface Isolatable\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Console/Kernel.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Console;\n\ninterface Kernel\n{\n    /**\n     * Bootstrap the application for artisan commands.\n     *\n     * @return void\n     */\n    public function bootstrap();\n\n    /**\n     * Handle an incoming console command.\n     *\n     * @param  \\Symfony\\Component\\Console\\Input\\InputInterface  $input\n     * @param  \\Symfony\\Component\\Console\\Output\\OutputInterface|null  $output\n     * @return int\n     */\n    public function handle($input, $output = null);\n\n    /**\n     * Run an Artisan console command by name.\n     *\n     * @param  string  $command\n     * @param  array  $parameters\n     * @param  \\Symfony\\Component\\Console\\Output\\OutputInterface|null  $outputBuffer\n     * @return int\n     */\n    public function call($command, array $parameters = [], $outputBuffer = null);\n\n    /**\n     * Queue an Artisan console command by name.\n     *\n     * @param  string  $command\n     * @param  array  $parameters\n     * @return \\Illuminate\\Foundation\\Bus\\PendingDispatch\n     */\n    public function queue($command, array $parameters = []);\n\n    /**\n     * Get all of the commands registered with the console.\n     *\n     * @return array\n     */\n    public function all();\n\n    /**\n     * Get the output for the last run command.\n     *\n     * @return string\n     */\n    public function output();\n\n    /**\n     * Terminate the application.\n     *\n     * @param  \\Symfony\\Component\\Console\\Input\\InputInterface  $input\n     * @param  int  $status\n     * @return void\n     */\n    public function terminate($input, $status);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Console/PromptsForMissingInput.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Console;\n\ninterface PromptsForMissingInput\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Container/BindingResolutionException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Container;\n\nuse Exception;\nuse Psr\\Container\\ContainerExceptionInterface;\n\nclass BindingResolutionException extends Exception implements ContainerExceptionInterface\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Container/CircularDependencyException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Container;\n\nuse Exception;\nuse Psr\\Container\\ContainerExceptionInterface;\n\nclass CircularDependencyException extends Exception implements ContainerExceptionInterface\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Container/Container.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Container;\n\nuse Closure;\nuse Psr\\Container\\ContainerInterface;\n\ninterface Container extends ContainerInterface\n{\n    /**\n     * Determine if the given abstract type has been bound.\n     *\n     * @param  string  $abstract\n     * @return bool\n     */\n    public function bound($abstract);\n\n    /**\n     * Alias a type to a different name.\n     *\n     * @param  string  $abstract\n     * @param  string  $alias\n     * @return void\n     *\n     * @throws \\LogicException\n     */\n    public function alias($abstract, $alias);\n\n    /**\n     * Assign a set of tags to a given binding.\n     *\n     * @param  array|string  $abstracts\n     * @param  array|mixed  ...$tags\n     * @return void\n     */\n    public function tag($abstracts, $tags);\n\n    /**\n     * Resolve all of the bindings for a given tag.\n     *\n     * @param  string  $tag\n     * @return iterable\n     */\n    public function tagged($tag);\n\n    /**\n     * Register a binding with the container.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure|string|null  $concrete\n     * @param  bool  $shared\n     * @return void\n     */\n    public function bind($abstract, $concrete = null, $shared = false);\n\n    /**\n     * Bind a callback to resolve with Container::call.\n     *\n     * @param  array|string  $method\n     * @param  \\Closure  $callback\n     * @return void\n     */\n    public function bindMethod($method, $callback);\n\n    /**\n     * Register a binding if it hasn't already been registered.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure|string|null  $concrete\n     * @param  bool  $shared\n     * @return void\n     */\n    public function bindIf($abstract, $concrete = null, $shared = false);\n\n    /**\n     * Register a shared binding in the container.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure|string|null  $concrete\n     * @return void\n     */\n    public function singleton($abstract, $concrete = null);\n\n    /**\n     * Register a shared binding if it hasn't already been registered.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure|string|null  $concrete\n     * @return void\n     */\n    public function singletonIf($abstract, $concrete = null);\n\n    /**\n     * Register a scoped binding in the container.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure|string|null  $concrete\n     * @return void\n     */\n    public function scoped($abstract, $concrete = null);\n\n    /**\n     * Register a scoped binding if it hasn't already been registered.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure|string|null  $concrete\n     * @return void\n     */\n    public function scopedIf($abstract, $concrete = null);\n\n    /**\n     * \"Extend\" an abstract type in the container.\n     *\n     * @param  string  $abstract\n     * @param  \\Closure  $closure\n     * @return void\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function extend($abstract, Closure $closure);\n\n    /**\n     * Register an existing instance as shared in the container.\n     *\n     * @param  string  $abstract\n     * @param  mixed  $instance\n     * @return mixed\n     */\n    public function instance($abstract, $instance);\n\n    /**\n     * Add a contextual binding to the container.\n     *\n     * @param  string  $concrete\n     * @param  string  $abstract\n     * @param  \\Closure|string  $implementation\n     * @return void\n     */\n    public function addContextualBinding($concrete, $abstract, $implementation);\n\n    /**\n     * Define a contextual binding.\n     *\n     * @param  string|array  $concrete\n     * @return \\Illuminate\\Contracts\\Container\\ContextualBindingBuilder\n     */\n    public function when($concrete);\n\n    /**\n     * Get a closure to resolve the given type from the container.\n     *\n     * @param  string  $abstract\n     * @return \\Closure\n     */\n    public function factory($abstract);\n\n    /**\n     * Flush the container of all bindings and resolved instances.\n     *\n     * @return void\n     */\n    public function flush();\n\n    /**\n     * Resolve the given type from the container.\n     *\n     * @param  string  $abstract\n     * @param  array  $parameters\n     * @return mixed\n     *\n     * @throws \\Illuminate\\Contracts\\Container\\BindingResolutionException\n     */\n    public function make($abstract, array $parameters = []);\n\n    /**\n     * Call the given Closure / class@method and inject its dependencies.\n     *\n     * @param  callable|string  $callback\n     * @param  array  $parameters\n     * @param  string|null  $defaultMethod\n     * @return mixed\n     */\n    public function call($callback, array $parameters = [], $defaultMethod = null);\n\n    /**\n     * Determine if the given abstract type has been resolved.\n     *\n     * @param  string  $abstract\n     * @return bool\n     */\n    public function resolved($abstract);\n\n    /**\n     * Register a new before resolving callback.\n     *\n     * @param  \\Closure|string  $abstract\n     * @param  \\Closure|null  $callback\n     * @return void\n     */\n    public function beforeResolving($abstract, Closure $callback = null);\n\n    /**\n     * Register a new resolving callback.\n     *\n     * @param  \\Closure|string  $abstract\n     * @param  \\Closure|null  $callback\n     * @return void\n     */\n    public function resolving($abstract, Closure $callback = null);\n\n    /**\n     * Register a new after resolving callback.\n     *\n     * @param  \\Closure|string  $abstract\n     * @param  \\Closure|null  $callback\n     * @return void\n     */\n    public function afterResolving($abstract, Closure $callback = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Container/ContextualBindingBuilder.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Container;\n\ninterface ContextualBindingBuilder\n{\n    /**\n     * Define the abstract target that depends on the context.\n     *\n     * @param  string  $abstract\n     * @return $this\n     */\n    public function needs($abstract);\n\n    /**\n     * Define the implementation for the contextual binding.\n     *\n     * @param  \\Closure|string|array  $implementation\n     * @return void\n     */\n    public function give($implementation);\n\n    /**\n     * Define tagged services to be used as the implementation for the contextual binding.\n     *\n     * @param  string  $tag\n     * @return void\n     */\n    public function giveTagged($tag);\n\n    /**\n     * Specify the configuration item to bind as a primitive.\n     *\n     * @param  string  $key\n     * @param  mixed  $default\n     * @return void\n     */\n    public function giveConfig($key, $default = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cookie/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cookie;\n\ninterface Factory\n{\n    /**\n     * Create a new cookie instance.\n     *\n     * @param  string  $name\n     * @param  string  $value\n     * @param  int  $minutes\n     * @param  string|null  $path\n     * @param  string|null  $domain\n     * @param  bool|null  $secure\n     * @param  bool  $httpOnly\n     * @param  bool  $raw\n     * @param  string|null  $sameSite\n     * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n     */\n    public function make($name, $value, $minutes = 0, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null);\n\n    /**\n     * Create a cookie that lasts \"forever\" (five years).\n     *\n     * @param  string  $name\n     * @param  string  $value\n     * @param  string|null  $path\n     * @param  string|null  $domain\n     * @param  bool|null  $secure\n     * @param  bool  $httpOnly\n     * @param  bool  $raw\n     * @param  string|null  $sameSite\n     * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n     */\n    public function forever($name, $value, $path = null, $domain = null, $secure = null, $httpOnly = true, $raw = false, $sameSite = null);\n\n    /**\n     * Expire the given cookie.\n     *\n     * @param  string  $name\n     * @param  string|null  $path\n     * @param  string|null  $domain\n     * @return \\Symfony\\Component\\HttpFoundation\\Cookie\n     */\n    public function forget($name, $path = null, $domain = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Cookie/QueueingFactory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Cookie;\n\ninterface QueueingFactory extends Factory\n{\n    /**\n     * Queue a cookie to send with the next response.\n     *\n     * @param  mixed  ...$parameters\n     * @return void\n     */\n    public function queue(...$parameters);\n\n    /**\n     * Remove a cookie from the queue.\n     *\n     * @param  string  $name\n     * @param  string|null  $path\n     * @return void\n     */\n    public function unqueue($name, $path = null);\n\n    /**\n     * Get the cookies which have been queued for the next request.\n     *\n     * @return array\n     */\n    public function getQueuedCookies();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/Builder.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\nuse Illuminate\\Contracts\\Database\\Query\\Builder as BaseContract;\n\n/**\n * This interface is intentionally empty and exists to improve IDE support.\n *\n * @mixin \\Illuminate\\Database\\Eloquent\\Builder\n */\ninterface Builder extends BaseContract\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/Castable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\ninterface Castable\n{\n    /**\n     * Get the name of the caster class to use when casting from / to this cast target.\n     *\n     * @param  array  $arguments\n     * @return class-string<CastsAttributes|CastsInboundAttributes>|CastsAttributes|CastsInboundAttributes\n     */\n    public static function castUsing(array $arguments);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/CastsAttributes.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * @template TGet\n * @template TSet\n */\ninterface CastsAttributes\n{\n    /**\n     * Transform the attribute from the underlying model values.\n     *\n     * @param  \\Illuminate\\Database\\Eloquent\\Model  $model\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  array<string, mixed>  $attributes\n     * @return TGet|null\n     */\n    public function get(Model $model, string $key, mixed $value, array $attributes);\n\n    /**\n     * Transform the attribute to its underlying model values.\n     *\n     * @param  \\Illuminate\\Database\\Eloquent\\Model  $model\n     * @param  string  $key\n     * @param  TSet|null  $value\n     * @param  array<string, mixed>  $attributes\n     * @return mixed\n     */\n    public function set(Model $model, string $key, mixed $value, array $attributes);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/CastsInboundAttributes.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\ninterface CastsInboundAttributes\n{\n    /**\n     * Transform the attribute to its underlying model values.\n     *\n     * @param  \\Illuminate\\Database\\Eloquent\\Model  $model\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  array  $attributes\n     * @return mixed\n     */\n    public function set(Model $model, string $key, mixed $value, array $attributes);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/DeviatesCastableAttributes.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\ninterface DeviatesCastableAttributes\n{\n    /**\n     * Increment the attribute.\n     *\n     * @param  \\Illuminate\\Database\\Eloquent\\Model  $model\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  array  $attributes\n     * @return mixed\n     */\n    public function increment($model, string $key, $value, array $attributes);\n\n    /**\n     * Decrement the attribute.\n     *\n     * @param  \\Illuminate\\Database\\Eloquent\\Model  $model\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  array  $attributes\n     * @return mixed\n     */\n    public function decrement($model, string $key, $value, array $attributes);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/SerializesCastableAttributes.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\ninterface SerializesCastableAttributes\n{\n    /**\n     * Serialize the attribute when converting the model to an array.\n     *\n     * @param  \\Illuminate\\Database\\Eloquent\\Model  $model\n     * @param  string  $key\n     * @param  mixed  $value\n     * @param  array  $attributes\n     * @return mixed\n     */\n    public function serialize(Model $model, string $key, mixed $value, array $attributes);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Eloquent/SupportsPartialRelations.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Eloquent;\n\ninterface SupportsPartialRelations\n{\n    /**\n     * Indicate that the relation is a single result of a larger one-to-many relationship.\n     *\n     * @param  string|null  $column\n     * @param  string|\\Closure|null  $aggregate\n     * @param  string  $relation\n     * @return $this\n     */\n    public function ofMany($column = 'id', $aggregate = 'MAX', $relation = null);\n\n    /**\n     * Determine whether the relationship is a one-of-many relationship.\n     *\n     * @return bool\n     */\n    public function isOneOfMany();\n\n    /**\n     * Get the one of many inner join subselect query builder instance.\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Builder|void\n     */\n    public function getOneOfManySubQuery();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Events/MigrationEvent.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Events;\n\ninterface MigrationEvent\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/ModelIdentifier.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database;\n\nclass ModelIdentifier\n{\n    /**\n     * The class name of the model.\n     *\n     * @var string\n     */\n    public $class;\n\n    /**\n     * The unique identifier of the model.\n     *\n     * This may be either a single ID or an array of IDs.\n     *\n     * @var mixed\n     */\n    public $id;\n\n    /**\n     * The relationships loaded on the model.\n     *\n     * @var array\n     */\n    public $relations;\n\n    /**\n     * The connection name of the model.\n     *\n     * @var string|null\n     */\n    public $connection;\n\n    /**\n     * The class name of the model collection.\n     *\n     * @var string|null\n     */\n    public $collectionClass;\n\n    /**\n     * Create a new model identifier.\n     *\n     * @param  string  $class\n     * @param  mixed  $id\n     * @param  array  $relations\n     * @param  mixed  $connection\n     * @return void\n     */\n    public function __construct($class, $id, array $relations, $connection)\n    {\n        $this->id = $id;\n        $this->class = $class;\n        $this->relations = $relations;\n        $this->connection = $connection;\n    }\n\n    /**\n     * Specify the collection class that should be used when serializing / restoring collections.\n     *\n     * @param  string|null  $collectionClass\n     * @return $this\n     */\n    public function useCollectionClass(?string $collectionClass)\n    {\n        $this->collectionClass = $collectionClass;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Query/Builder.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Query;\n\n/**\n * This interface is intentionally empty and exists to improve IDE support.\n *\n * @mixin \\Illuminate\\Database\\Query\\Builder\n */\ninterface Builder\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Query/ConditionExpression.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Query;\n\ninterface ConditionExpression extends Expression\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Database/Query/Expression.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Database\\Query;\n\nuse Illuminate\\Database\\Grammar;\n\ninterface Expression\n{\n    /**\n     * Get the value of the expression.\n     *\n     * @param  \\Illuminate\\Database\\Grammar  $grammar\n     * @return string|int|float\n     */\n    public function getValue(Grammar $grammar);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Debug/ExceptionHandler.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Debug;\n\nuse Throwable;\n\ninterface ExceptionHandler\n{\n    /**\n     * Report or log an exception.\n     *\n     * @param  \\Throwable  $e\n     * @return void\n     *\n     * @throws \\Throwable\n     */\n    public function report(Throwable $e);\n\n    /**\n     * Determine if the exception should be reported.\n     *\n     * @param  \\Throwable  $e\n     * @return bool\n     */\n    public function shouldReport(Throwable $e);\n\n    /**\n     * Render an exception into an HTTP response.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Throwable  $e\n     * @return \\Symfony\\Component\\HttpFoundation\\Response\n     *\n     * @throws \\Throwable\n     */\n    public function render($request, Throwable $e);\n\n    /**\n     * Render an exception to the console.\n     *\n     * @param  \\Symfony\\Component\\Console\\Output\\OutputInterface  $output\n     * @param  \\Throwable  $e\n     * @return void\n     *\n     * @internal This method is not meant to be used or overwritten outside the framework.\n     */\n    public function renderForConsole($output, Throwable $e);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Encryption/DecryptException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Encryption;\n\nuse RuntimeException;\n\nclass DecryptException extends RuntimeException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Encryption/EncryptException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Encryption;\n\nuse RuntimeException;\n\nclass EncryptException extends RuntimeException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Encryption/Encrypter.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Encryption;\n\ninterface Encrypter\n{\n    /**\n     * Encrypt the given value.\n     *\n     * @param  mixed  $value\n     * @param  bool  $serialize\n     * @return string\n     *\n     * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n     */\n    public function encrypt($value, $serialize = true);\n\n    /**\n     * Decrypt the given value.\n     *\n     * @param  string  $payload\n     * @param  bool  $unserialize\n     * @return mixed\n     *\n     * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n     */\n    public function decrypt($payload, $unserialize = true);\n\n    /**\n     * Get the encryption key that the encrypter is currently using.\n     *\n     * @return string\n     */\n    public function getKey();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Encryption/StringEncrypter.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Encryption;\n\ninterface StringEncrypter\n{\n    /**\n     * Encrypt a string without serialization.\n     *\n     * @param  string  $value\n     * @return string\n     *\n     * @throws \\Illuminate\\Contracts\\Encryption\\EncryptException\n     */\n    public function encryptString($value);\n\n    /**\n     * Decrypt the given string without unserialization.\n     *\n     * @param  string  $payload\n     * @return string\n     *\n     * @throws \\Illuminate\\Contracts\\Encryption\\DecryptException\n     */\n    public function decryptString($payload);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Events/Dispatcher.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Events;\n\ninterface Dispatcher\n{\n    /**\n     * Register an event listener with the dispatcher.\n     *\n     * @param  \\Closure|string|array  $events\n     * @param  \\Closure|string|array|null  $listener\n     * @return void\n     */\n    public function listen($events, $listener = null);\n\n    /**\n     * Determine if a given event has listeners.\n     *\n     * @param  string  $eventName\n     * @return bool\n     */\n    public function hasListeners($eventName);\n\n    /**\n     * Register an event subscriber with the dispatcher.\n     *\n     * @param  object|string  $subscriber\n     * @return void\n     */\n    public function subscribe($subscriber);\n\n    /**\n     * Dispatch an event until the first non-null response is returned.\n     *\n     * @param  string|object  $event\n     * @param  mixed  $payload\n     * @return mixed\n     */\n    public function until($event, $payload = []);\n\n    /**\n     * Dispatch an event and call the listeners.\n     *\n     * @param  string|object  $event\n     * @param  mixed  $payload\n     * @param  bool  $halt\n     * @return array|null\n     */\n    public function dispatch($event, $payload = [], $halt = false);\n\n    /**\n     * Register an event and payload to be fired later.\n     *\n     * @param  string  $event\n     * @param  array  $payload\n     * @return void\n     */\n    public function push($event, $payload = []);\n\n    /**\n     * Flush a set of pushed events.\n     *\n     * @param  string  $event\n     * @return void\n     */\n    public function flush($event);\n\n    /**\n     * Remove a set of listeners from the dispatcher.\n     *\n     * @param  string  $event\n     * @return void\n     */\n    public function forget($event);\n\n    /**\n     * Forget all of the queued listeners.\n     *\n     * @return void\n     */\n    public function forgetPushed();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Events/ShouldDispatchAfterCommit.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Events;\n\ninterface ShouldDispatchAfterCommit\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Events/ShouldHandleEventsAfterCommit.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Events;\n\ninterface ShouldHandleEventsAfterCommit\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Filesystem/Cloud.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Filesystem;\n\ninterface Cloud extends Filesystem\n{\n    /**\n     * Get the URL for the file at the given path.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function url($path);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Filesystem/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Filesystem;\n\ninterface Factory\n{\n    /**\n     * Get a filesystem implementation.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Filesystem\\Filesystem\n     */\n    public function disk($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Filesystem/FileNotFoundException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Filesystem;\n\nuse Exception;\n\nclass FileNotFoundException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Filesystem/Filesystem.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Filesystem;\n\ninterface Filesystem\n{\n    /**\n     * The public visibility setting.\n     *\n     * @var string\n     */\n    const VISIBILITY_PUBLIC = 'public';\n\n    /**\n     * The private visibility setting.\n     *\n     * @var string\n     */\n    const VISIBILITY_PRIVATE = 'private';\n\n    /**\n     * Determine if a file exists.\n     *\n     * @param  string  $path\n     * @return bool\n     */\n    public function exists($path);\n\n    /**\n     * Get the contents of a file.\n     *\n     * @param  string  $path\n     * @return string|null\n     */\n    public function get($path);\n\n    /**\n     * Get a resource to read the file.\n     *\n     * @param  string  $path\n     * @return resource|null The path resource or null on failure.\n     */\n    public function readStream($path);\n\n    /**\n     * Write the contents of a file.\n     *\n     * @param  string  $path\n     * @param  \\Psr\\Http\\Message\\StreamInterface|\\Illuminate\\Http\\File|\\Illuminate\\Http\\UploadedFile|string|resource  $contents\n     * @param  mixed  $options\n     * @return bool\n     */\n    public function put($path, $contents, $options = []);\n\n    /**\n     * Write a new file using a stream.\n     *\n     * @param  string  $path\n     * @param  resource  $resource\n     * @param  array  $options\n     * @return bool\n     */\n    public function writeStream($path, $resource, array $options = []);\n\n    /**\n     * Get the visibility for the given path.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function getVisibility($path);\n\n    /**\n     * Set the visibility for the given path.\n     *\n     * @param  string  $path\n     * @param  string  $visibility\n     * @return bool\n     */\n    public function setVisibility($path, $visibility);\n\n    /**\n     * Prepend to a file.\n     *\n     * @param  string  $path\n     * @param  string  $data\n     * @return bool\n     */\n    public function prepend($path, $data);\n\n    /**\n     * Append to a file.\n     *\n     * @param  string  $path\n     * @param  string  $data\n     * @return bool\n     */\n    public function append($path, $data);\n\n    /**\n     * Delete the file at a given path.\n     *\n     * @param  string|array  $paths\n     * @return bool\n     */\n    public function delete($paths);\n\n    /**\n     * Copy a file to a new location.\n     *\n     * @param  string  $from\n     * @param  string  $to\n     * @return bool\n     */\n    public function copy($from, $to);\n\n    /**\n     * Move a file to a new location.\n     *\n     * @param  string  $from\n     * @param  string  $to\n     * @return bool\n     */\n    public function move($from, $to);\n\n    /**\n     * Get the file size of a given file.\n     *\n     * @param  string  $path\n     * @return int\n     */\n    public function size($path);\n\n    /**\n     * Get the file's last modification time.\n     *\n     * @param  string  $path\n     * @return int\n     */\n    public function lastModified($path);\n\n    /**\n     * Get an array of all files in a directory.\n     *\n     * @param  string|null  $directory\n     * @param  bool  $recursive\n     * @return array\n     */\n    public function files($directory = null, $recursive = false);\n\n    /**\n     * Get all of the files from the given directory (recursive).\n     *\n     * @param  string|null  $directory\n     * @return array\n     */\n    public function allFiles($directory = null);\n\n    /**\n     * Get all of the directories within a given directory.\n     *\n     * @param  string|null  $directory\n     * @param  bool  $recursive\n     * @return array\n     */\n    public function directories($directory = null, $recursive = false);\n\n    /**\n     * Get all (recursive) of the directories within a given directory.\n     *\n     * @param  string|null  $directory\n     * @return array\n     */\n    public function allDirectories($directory = null);\n\n    /**\n     * Create a directory.\n     *\n     * @param  string  $path\n     * @return bool\n     */\n    public function makeDirectory($path);\n\n    /**\n     * Recursively delete a directory.\n     *\n     * @param  string  $directory\n     * @return bool\n     */\n    public function deleteDirectory($directory);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Filesystem/LockTimeoutException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Filesystem;\n\nuse Exception;\n\nclass LockTimeoutException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Foundation/Application.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Foundation;\n\nuse Illuminate\\Contracts\\Container\\Container;\n\ninterface Application extends Container\n{\n    /**\n     * Get the version number of the application.\n     *\n     * @return string\n     */\n    public function version();\n\n    /**\n     * Get the base path of the Laravel installation.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function basePath($path = '');\n\n    /**\n     * Get the path to the bootstrap directory.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function bootstrapPath($path = '');\n\n    /**\n     * Get the path to the application configuration files.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function configPath($path = '');\n\n    /**\n     * Get the path to the database directory.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function databasePath($path = '');\n\n    /**\n     * Get the path to the language files.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function langPath($path = '');\n\n    /**\n     * Get the path to the public directory.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function publicPath($path = '');\n\n    /**\n     * Get the path to the resources directory.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function resourcePath($path = '');\n\n    /**\n     * Get the path to the storage directory.\n     *\n     * @param  string  $path\n     * @return string\n     */\n    public function storagePath($path = '');\n\n    /**\n     * Get or check the current application environment.\n     *\n     * @param  string|array  ...$environments\n     * @return string|bool\n     */\n    public function environment(...$environments);\n\n    /**\n     * Determine if the application is running in the console.\n     *\n     * @return bool\n     */\n    public function runningInConsole();\n\n    /**\n     * Determine if the application is running unit tests.\n     *\n     * @return bool\n     */\n    public function runningUnitTests();\n\n    /**\n     * Determine if the application is running with debug mode enabled.\n     *\n     * @return bool\n     */\n    public function hasDebugModeEnabled();\n\n    /**\n     * Get an instance of the maintenance mode manager implementation.\n     *\n     * @return \\Illuminate\\Contracts\\Foundation\\MaintenanceMode\n     */\n    public function maintenanceMode();\n\n    /**\n     * Determine if the application is currently down for maintenance.\n     *\n     * @return bool\n     */\n    public function isDownForMaintenance();\n\n    /**\n     * Register all of the configured providers.\n     *\n     * @return void\n     */\n    public function registerConfiguredProviders();\n\n    /**\n     * Register a service provider with the application.\n     *\n     * @param  \\Illuminate\\Support\\ServiceProvider|string  $provider\n     * @param  bool  $force\n     * @return \\Illuminate\\Support\\ServiceProvider\n     */\n    public function register($provider, $force = false);\n\n    /**\n     * Register a deferred provider and service.\n     *\n     * @param  string  $provider\n     * @param  string|null  $service\n     * @return void\n     */\n    public function registerDeferredProvider($provider, $service = null);\n\n    /**\n     * Resolve a service provider instance from the class name.\n     *\n     * @param  string  $provider\n     * @return \\Illuminate\\Support\\ServiceProvider\n     */\n    public function resolveProvider($provider);\n\n    /**\n     * Boot the application's service providers.\n     *\n     * @return void\n     */\n    public function boot();\n\n    /**\n     * Register a new boot listener.\n     *\n     * @param  callable  $callback\n     * @return void\n     */\n    public function booting($callback);\n\n    /**\n     * Register a new \"booted\" listener.\n     *\n     * @param  callable  $callback\n     * @return void\n     */\n    public function booted($callback);\n\n    /**\n     * Run the given array of bootstrap classes.\n     *\n     * @param  array  $bootstrappers\n     * @return void\n     */\n    public function bootstrapWith(array $bootstrappers);\n\n    /**\n     * Get the current application locale.\n     *\n     * @return string\n     */\n    public function getLocale();\n\n    /**\n     * Get the application namespace.\n     *\n     * @return string\n     *\n     * @throws \\RuntimeException\n     */\n    public function getNamespace();\n\n    /**\n     * Get the registered service provider instances if any exist.\n     *\n     * @param  \\Illuminate\\Support\\ServiceProvider|string  $provider\n     * @return array\n     */\n    public function getProviders($provider);\n\n    /**\n     * Determine if the application has been bootstrapped before.\n     *\n     * @return bool\n     */\n    public function hasBeenBootstrapped();\n\n    /**\n     * Load and boot all of the remaining deferred providers.\n     *\n     * @return void\n     */\n    public function loadDeferredProviders();\n\n    /**\n     * Set the current application locale.\n     *\n     * @param  string  $locale\n     * @return void\n     */\n    public function setLocale($locale);\n\n    /**\n     * Determine if middleware has been disabled for the application.\n     *\n     * @return bool\n     */\n    public function shouldSkipMiddleware();\n\n    /**\n     * Register a terminating callback with the application.\n     *\n     * @param  callable|string  $callback\n     * @return \\Illuminate\\Contracts\\Foundation\\Application\n     */\n    public function terminating($callback);\n\n    /**\n     * Terminate the application.\n     *\n     * @return void\n     */\n    public function terminate();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Foundation/CachesConfiguration.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Foundation;\n\ninterface CachesConfiguration\n{\n    /**\n     * Determine if the application configuration is cached.\n     *\n     * @return bool\n     */\n    public function configurationIsCached();\n\n    /**\n     * Get the path to the configuration cache file.\n     *\n     * @return string\n     */\n    public function getCachedConfigPath();\n\n    /**\n     * Get the path to the cached services.php file.\n     *\n     * @return string\n     */\n    public function getCachedServicesPath();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Foundation/CachesRoutes.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Foundation;\n\ninterface CachesRoutes\n{\n    /**\n     * Determine if the application routes are cached.\n     *\n     * @return bool\n     */\n    public function routesAreCached();\n\n    /**\n     * Get the path to the routes cache file.\n     *\n     * @return string\n     */\n    public function getCachedRoutesPath();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Foundation/ExceptionRenderer.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Foundation;\n\ninterface ExceptionRenderer\n{\n    /**\n     * Renders the given exception as HTML.\n     *\n     * @param  \\Throwable  $throwable\n     * @return string\n     */\n    public function render($throwable);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Foundation/MaintenanceMode.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Foundation;\n\ninterface MaintenanceMode\n{\n    /**\n     * Take the application down for maintenance.\n     *\n     * @param  array  $payload\n     * @return void\n     */\n    public function activate(array $payload): void;\n\n    /**\n     * Take the application out of maintenance.\n     *\n     * @return void\n     */\n    public function deactivate(): void;\n\n    /**\n     * Determine if the application is currently down for maintenance.\n     *\n     * @return bool\n     */\n    public function active(): bool;\n\n    /**\n     * Get the data array which was provided when the application was placed into maintenance.\n     *\n     * @return array\n     */\n    public function data(): array;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Hashing/Hasher.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Hashing;\n\ninterface Hasher\n{\n    /**\n     * Get information about the given hashed value.\n     *\n     * @param  string  $hashedValue\n     * @return array\n     */\n    public function info($hashedValue);\n\n    /**\n     * Hash the given value.\n     *\n     * @param  string  $value\n     * @param  array  $options\n     * @return string\n     */\n    public function make($value, array $options = []);\n\n    /**\n     * Check the given plain value against a hash.\n     *\n     * @param  string  $value\n     * @param  string  $hashedValue\n     * @param  array  $options\n     * @return bool\n     */\n    public function check($value, $hashedValue, array $options = []);\n\n    /**\n     * Check if the given hash has been hashed using the given options.\n     *\n     * @param  string  $hashedValue\n     * @param  array  $options\n     * @return bool\n     */\n    public function needsRehash($hashedValue, array $options = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Http/Kernel.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Http;\n\ninterface Kernel\n{\n    /**\n     * Bootstrap the application for HTTP requests.\n     *\n     * @return void\n     */\n    public function bootstrap();\n\n    /**\n     * Handle an incoming HTTP request.\n     *\n     * @param  \\Symfony\\Component\\HttpFoundation\\Request  $request\n     * @return \\Symfony\\Component\\HttpFoundation\\Response\n     */\n    public function handle($request);\n\n    /**\n     * Perform any final actions for the request lifecycle.\n     *\n     * @param  \\Symfony\\Component\\HttpFoundation\\Request  $request\n     * @param  \\Symfony\\Component\\HttpFoundation\\Response  $response\n     * @return void\n     */\n    public function terminate($request, $response);\n\n    /**\n     * Get the Laravel application instance.\n     *\n     * @return \\Illuminate\\Contracts\\Foundation\\Application\n     */\n    public function getApplication();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) Taylor Otwell\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Mail/Attachable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Mail;\n\ninterface Attachable\n{\n    /**\n     * Get an attachment instance for this entity.\n     *\n     * @return \\Illuminate\\Mail\\Attachment\n     */\n    public function toMailAttachment();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Mail/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Mail;\n\ninterface Factory\n{\n    /**\n     * Get a mailer instance by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Mail\\Mailer\n     */\n    public function mailer($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Mail/MailQueue.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Mail;\n\ninterface MailQueue\n{\n    /**\n     * Queue a new e-mail message for sending.\n     *\n     * @param  \\Illuminate\\Contracts\\Mail\\Mailable|string|array  $view\n     * @param  string|null  $queue\n     * @return mixed\n     */\n    public function queue($view, $queue = null);\n\n    /**\n     * Queue a new e-mail message for sending after (n) seconds.\n     *\n     * @param  \\DateTimeInterface|\\DateInterval|int  $delay\n     * @param  \\Illuminate\\Contracts\\Mail\\Mailable|string|array  $view\n     * @param  string|null  $queue\n     * @return mixed\n     */\n    public function later($delay, $view, $queue = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Mail/Mailable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Mail;\n\nuse Illuminate\\Contracts\\Queue\\Factory as Queue;\n\ninterface Mailable\n{\n    /**\n     * Send the message using the given mailer.\n     *\n     * @param  \\Illuminate\\Contracts\\Mail\\Factory|\\Illuminate\\Contracts\\Mail\\Mailer  $mailer\n     * @return \\Illuminate\\Mail\\SentMessage|null\n     */\n    public function send($mailer);\n\n    /**\n     * Queue the given message.\n     *\n     * @param  \\Illuminate\\Contracts\\Queue\\Factory  $queue\n     * @return mixed\n     */\n    public function queue(Queue $queue);\n\n    /**\n     * Deliver the queued message after (n) seconds.\n     *\n     * @param  \\DateTimeInterface|\\DateInterval|int  $delay\n     * @param  \\Illuminate\\Contracts\\Queue\\Factory  $queue\n     * @return mixed\n     */\n    public function later($delay, Queue $queue);\n\n    /**\n     * Set the recipients of the message.\n     *\n     * @param  object|array|string  $address\n     * @param  string|null  $name\n     * @return self\n     */\n    public function cc($address, $name = null);\n\n    /**\n     * Set the recipients of the message.\n     *\n     * @param  object|array|string  $address\n     * @param  string|null  $name\n     * @return $this\n     */\n    public function bcc($address, $name = null);\n\n    /**\n     * Set the recipients of the message.\n     *\n     * @param  object|array|string  $address\n     * @param  string|null  $name\n     * @return $this\n     */\n    public function to($address, $name = null);\n\n    /**\n     * Set the locale of the message.\n     *\n     * @param  string  $locale\n     * @return $this\n     */\n    public function locale($locale);\n\n    /**\n     * Set the name of the mailer that should be used to send the message.\n     *\n     * @param  string  $mailer\n     * @return $this\n     */\n    public function mailer($mailer);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Mail/Mailer.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Mail;\n\ninterface Mailer\n{\n    /**\n     * Begin the process of mailing a mailable class instance.\n     *\n     * @param  mixed  $users\n     * @return \\Illuminate\\Mail\\PendingMail\n     */\n    public function to($users);\n\n    /**\n     * Begin the process of mailing a mailable class instance.\n     *\n     * @param  mixed  $users\n     * @return \\Illuminate\\Mail\\PendingMail\n     */\n    public function bcc($users);\n\n    /**\n     * Send a new message with only a raw text part.\n     *\n     * @param  string  $text\n     * @param  mixed  $callback\n     * @return \\Illuminate\\Mail\\SentMessage|null\n     */\n    public function raw($text, $callback);\n\n    /**\n     * Send a new message using a view.\n     *\n     * @param  \\Illuminate\\Contracts\\Mail\\Mailable|string|array  $view\n     * @param  array  $data\n     * @param  \\Closure|string|null  $callback\n     * @return \\Illuminate\\Mail\\SentMessage|null\n     */\n    public function send($view, array $data = [], $callback = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Notifications/Dispatcher.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Notifications;\n\ninterface Dispatcher\n{\n    /**\n     * Send the given notification to the given notifiable entities.\n     *\n     * @param  \\Illuminate\\Support\\Collection|array|mixed  $notifiables\n     * @param  mixed  $notification\n     * @return void\n     */\n    public function send($notifiables, $notification);\n\n    /**\n     * Send the given notification immediately.\n     *\n     * @param  \\Illuminate\\Support\\Collection|array|mixed  $notifiables\n     * @param  mixed  $notification\n     * @return void\n     */\n    public function sendNow($notifiables, $notification);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Notifications/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Notifications;\n\ninterface Factory\n{\n    /**\n     * Get a channel instance by name.\n     *\n     * @param  string|null  $name\n     * @return mixed\n     */\n    public function channel($name = null);\n\n    /**\n     * Send the given notification to the given notifiable entities.\n     *\n     * @param  \\Illuminate\\Support\\Collection|array|mixed  $notifiables\n     * @param  mixed  $notification\n     * @return void\n     */\n    public function send($notifiables, $notification);\n\n    /**\n     * Send the given notification immediately.\n     *\n     * @param  \\Illuminate\\Support\\Collection|array|mixed  $notifiables\n     * @param  mixed  $notification\n     * @return void\n     */\n    public function sendNow($notifiables, $notification);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Pagination/CursorPaginator.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Pagination;\n\ninterface CursorPaginator\n{\n    /**\n     * Get the URL for a given cursor.\n     *\n     * @param  \\Illuminate\\Pagination\\Cursor|null  $cursor\n     * @return string\n     */\n    public function url($cursor);\n\n    /**\n     * Add a set of query string values to the paginator.\n     *\n     * @param  array|string|null  $key\n     * @param  string|null  $value\n     * @return $this\n     */\n    public function appends($key, $value = null);\n\n    /**\n     * Get / set the URL fragment to be appended to URLs.\n     *\n     * @param  string|null  $fragment\n     * @return $this|string|null\n     */\n    public function fragment($fragment = null);\n\n    /**\n     * Add all current query string values to the paginator.\n     *\n     * @return $this\n     */\n    public function withQueryString();\n\n    /**\n     * Get the URL for the previous page, or null.\n     *\n     * @return string|null\n     */\n    public function previousPageUrl();\n\n    /**\n     * The URL for the next page, or null.\n     *\n     * @return string|null\n     */\n    public function nextPageUrl();\n\n    /**\n     * Get all of the items being paginated.\n     *\n     * @return array\n     */\n    public function items();\n\n    /**\n     * Get the \"cursor\" of the previous set of items.\n     *\n     * @return \\Illuminate\\Pagination\\Cursor|null\n     */\n    public function previousCursor();\n\n    /**\n     * Get the \"cursor\" of the next set of items.\n     *\n     * @return \\Illuminate\\Pagination\\Cursor|null\n     */\n    public function nextCursor();\n\n    /**\n     * Determine how many items are being shown per page.\n     *\n     * @return int\n     */\n    public function perPage();\n\n    /**\n     * Get the current cursor being paginated.\n     *\n     * @return \\Illuminate\\Pagination\\Cursor|null\n     */\n    public function cursor();\n\n    /**\n     * Determine if there are enough items to split into multiple pages.\n     *\n     * @return bool\n     */\n    public function hasPages();\n\n    /**\n     * Get the base path for paginator generated URLs.\n     *\n     * @return string|null\n     */\n    public function path();\n\n    /**\n     * Determine if the list of items is empty or not.\n     *\n     * @return bool\n     */\n    public function isEmpty();\n\n    /**\n     * Determine if the list of items is not empty.\n     *\n     * @return bool\n     */\n    public function isNotEmpty();\n\n    /**\n     * Render the paginator using a given view.\n     *\n     * @param  string|null  $view\n     * @param  array  $data\n     * @return string\n     */\n    public function render($view = null, $data = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Pagination/LengthAwarePaginator.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Pagination;\n\ninterface LengthAwarePaginator extends Paginator\n{\n    /**\n     * Create a range of pagination URLs.\n     *\n     * @param  int  $start\n     * @param  int  $end\n     * @return array\n     */\n    public function getUrlRange($start, $end);\n\n    /**\n     * Determine the total number of items in the data store.\n     *\n     * @return int\n     */\n    public function total();\n\n    /**\n     * Get the page number of the last available page.\n     *\n     * @return int\n     */\n    public function lastPage();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Pagination/Paginator.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Pagination;\n\ninterface Paginator\n{\n    /**\n     * Get the URL for a given page.\n     *\n     * @param  int  $page\n     * @return string\n     */\n    public function url($page);\n\n    /**\n     * Add a set of query string values to the paginator.\n     *\n     * @param  array|string|null  $key\n     * @param  string|null  $value\n     * @return $this\n     */\n    public function appends($key, $value = null);\n\n    /**\n     * Get / set the URL fragment to be appended to URLs.\n     *\n     * @param  string|null  $fragment\n     * @return $this|string|null\n     */\n    public function fragment($fragment = null);\n\n    /**\n     * The URL for the next page, or null.\n     *\n     * @return string|null\n     */\n    public function nextPageUrl();\n\n    /**\n     * Get the URL for the previous page, or null.\n     *\n     * @return string|null\n     */\n    public function previousPageUrl();\n\n    /**\n     * Get all of the items being paginated.\n     *\n     * @return array\n     */\n    public function items();\n\n    /**\n     * Get the \"index\" of the first item being paginated.\n     *\n     * @return int|null\n     */\n    public function firstItem();\n\n    /**\n     * Get the \"index\" of the last item being paginated.\n     *\n     * @return int|null\n     */\n    public function lastItem();\n\n    /**\n     * Determine how many items are being shown per page.\n     *\n     * @return int\n     */\n    public function perPage();\n\n    /**\n     * Determine the current page being paginated.\n     *\n     * @return int\n     */\n    public function currentPage();\n\n    /**\n     * Determine if there are enough items to split into multiple pages.\n     *\n     * @return bool\n     */\n    public function hasPages();\n\n    /**\n     * Determine if there are more items in the data store.\n     *\n     * @return bool\n     */\n    public function hasMorePages();\n\n    /**\n     * Get the base path for paginator generated URLs.\n     *\n     * @return string|null\n     */\n    public function path();\n\n    /**\n     * Determine if the list of items is empty or not.\n     *\n     * @return bool\n     */\n    public function isEmpty();\n\n    /**\n     * Determine if the list of items is not empty.\n     *\n     * @return bool\n     */\n    public function isNotEmpty();\n\n    /**\n     * Render the paginator using a given view.\n     *\n     * @param  string|null  $view\n     * @param  array  $data\n     * @return string\n     */\n    public function render($view = null, $data = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Pipeline/Hub.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Pipeline;\n\ninterface Hub\n{\n    /**\n     * Send an object through one of the available pipelines.\n     *\n     * @param  mixed  $object\n     * @param  string|null  $pipeline\n     * @return mixed\n     */\n    public function pipe($object, $pipeline = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Pipeline/Pipeline.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Pipeline;\n\nuse Closure;\n\ninterface Pipeline\n{\n    /**\n     * Set the traveler object being sent on the pipeline.\n     *\n     * @param  mixed  $traveler\n     * @return $this\n     */\n    public function send($traveler);\n\n    /**\n     * Set the stops of the pipeline.\n     *\n     * @param  dynamic|array  $stops\n     * @return $this\n     */\n    public function through($stops);\n\n    /**\n     * Set the method to call on the stops.\n     *\n     * @param  string  $method\n     * @return $this\n     */\n    public function via($method);\n\n    /**\n     * Run the pipeline with a final destination callback.\n     *\n     * @param  \\Closure  $destination\n     * @return mixed\n     */\n    public function then(Closure $destination);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Process/InvokedProcess.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Process;\n\ninterface InvokedProcess\n{\n    /**\n     * Get the process ID if the process is still running.\n     *\n     * @return int|null\n     */\n    public function id();\n\n    /**\n     * Send a signal to the process.\n     *\n     * @param  int  $signal\n     * @return $this\n     */\n    public function signal(int $signal);\n\n    /**\n     * Determine if the process is still running.\n     *\n     * @return bool\n     */\n    public function running();\n\n    /**\n     * Get the standard output for the process.\n     *\n     * @return string\n     */\n    public function output();\n\n    /**\n     * Get the error output for the process.\n     *\n     * @return string\n     */\n    public function errorOutput();\n\n    /**\n     * Get the latest standard output for the process.\n     *\n     * @return string\n     */\n    public function latestOutput();\n\n    /**\n     * Get the latest error output for the process.\n     *\n     * @return string\n     */\n    public function latestErrorOutput();\n\n    /**\n     * Wait for the process to finish.\n     *\n     * @param  callable|null  $output\n     * @return \\Illuminate\\Console\\Process\\ProcessResult\n     */\n    public function wait(callable $output = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Process/ProcessResult.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Process;\n\ninterface ProcessResult\n{\n    /**\n     * Get the original command executed by the process.\n     *\n     * @return string\n     */\n    public function command();\n\n    /**\n     * Determine if the process was successful.\n     *\n     * @return bool\n     */\n    public function successful();\n\n    /**\n     * Determine if the process failed.\n     *\n     * @return bool\n     */\n    public function failed();\n\n    /**\n     * Get the exit code of the process.\n     *\n     * @return int|null\n     */\n    public function exitCode();\n\n    /**\n     * Get the standard output of the process.\n     *\n     * @return string\n     */\n    public function output();\n\n    /**\n     * Get the error output of the process.\n     *\n     * @return string\n     */\n    public function errorOutput();\n\n    /**\n     * Throw an exception if the process failed.\n     *\n     * @param  callable|null  $callback\n     * @return $this\n     */\n    public function throw(callable $callback = null);\n\n    /**\n     * Throw an exception if the process failed and the given condition is true.\n     *\n     * @param  bool  $condition\n     * @param  callable|null  $callback\n     * @return $this\n     */\n    public function throwIf(bool $condition, callable $callback = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/ClearableQueue.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface ClearableQueue\n{\n    /**\n     * Delete all of the jobs from the queue.\n     *\n     * @param  string  $queue\n     * @return int\n     */\n    public function clear($queue);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/EntityNotFoundException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\nuse InvalidArgumentException;\n\nclass EntityNotFoundException extends InvalidArgumentException\n{\n    /**\n     * Create a new exception instance.\n     *\n     * @param  string  $type\n     * @param  mixed  $id\n     * @return void\n     */\n    public function __construct($type, $id)\n    {\n        $id = (string) $id;\n\n        parent::__construct(\"Queueable entity [{$type}] not found for ID [{$id}].\");\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/EntityResolver.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface EntityResolver\n{\n    /**\n     * Resolve the entity for the given ID.\n     *\n     * @param  string  $type\n     * @param  mixed  $id\n     * @return mixed\n     */\n    public function resolve($type, $id);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface Factory\n{\n    /**\n     * Resolve a queue connection instance.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Contracts\\Queue\\Queue\n     */\n    public function connection($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/Job.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface Job\n{\n    /**\n     * Get the UUID of the job.\n     *\n     * @return string|null\n     */\n    public function uuid();\n\n    /**\n     * Get the job identifier.\n     *\n     * @return string\n     */\n    public function getJobId();\n\n    /**\n     * Get the decoded body of the job.\n     *\n     * @return array\n     */\n    public function payload();\n\n    /**\n     * Fire the job.\n     *\n     * @return void\n     */\n    public function fire();\n\n    /**\n     * Release the job back into the queue after (n) seconds.\n     *\n     * @param  int  $delay\n     * @return void\n     */\n    public function release($delay = 0);\n\n    /**\n     * Determine if the job was released back into the queue.\n     *\n     * @return bool\n     */\n    public function isReleased();\n\n    /**\n     * Delete the job from the queue.\n     *\n     * @return void\n     */\n    public function delete();\n\n    /**\n     * Determine if the job has been deleted.\n     *\n     * @return bool\n     */\n    public function isDeleted();\n\n    /**\n     * Determine if the job has been deleted or released.\n     *\n     * @return bool\n     */\n    public function isDeletedOrReleased();\n\n    /**\n     * Get the number of times the job has been attempted.\n     *\n     * @return int\n     */\n    public function attempts();\n\n    /**\n     * Determine if the job has been marked as a failure.\n     *\n     * @return bool\n     */\n    public function hasFailed();\n\n    /**\n     * Mark the job as \"failed\".\n     *\n     * @return void\n     */\n    public function markAsFailed();\n\n    /**\n     * Delete the job, call the \"failed\" method, and raise the failed job event.\n     *\n     * @param  \\Throwable|null  $e\n     * @return void\n     */\n    public function fail($e = null);\n\n    /**\n     * Get the number of times to attempt a job.\n     *\n     * @return int|null\n     */\n    public function maxTries();\n\n    /**\n     * Get the maximum number of exceptions allowed, regardless of attempts.\n     *\n     * @return int|null\n     */\n    public function maxExceptions();\n\n    /**\n     * Get the number of seconds the job can run.\n     *\n     * @return int|null\n     */\n    public function timeout();\n\n    /**\n     * Get the timestamp indicating when the job should timeout.\n     *\n     * @return int|null\n     */\n    public function retryUntil();\n\n    /**\n     * Get the name of the queued job class.\n     *\n     * @return string\n     */\n    public function getName();\n\n    /**\n     * Get the resolved name of the queued job class.\n     *\n     * Resolves the name of \"wrapped\" jobs such as class-based handlers.\n     *\n     * @return string\n     */\n    public function resolveName();\n\n    /**\n     * Get the name of the connection the job belongs to.\n     *\n     * @return string\n     */\n    public function getConnectionName();\n\n    /**\n     * Get the name of the queue the job belongs to.\n     *\n     * @return string\n     */\n    public function getQueue();\n\n    /**\n     * Get the raw body string for the job.\n     *\n     * @return string\n     */\n    public function getRawBody();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/Monitor.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface Monitor\n{\n    /**\n     * Register a callback to be executed on every iteration through the queue loop.\n     *\n     * @param  mixed  $callback\n     * @return void\n     */\n    public function looping($callback);\n\n    /**\n     * Register a callback to be executed when a job fails after the maximum number of retries.\n     *\n     * @param  mixed  $callback\n     * @return void\n     */\n    public function failing($callback);\n\n    /**\n     * Register a callback to be executed when a daemon queue is stopping.\n     *\n     * @param  mixed  $callback\n     * @return void\n     */\n    public function stopping($callback);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/Queue.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface Queue\n{\n    /**\n     * Get the size of the queue.\n     *\n     * @param  string|null  $queue\n     * @return int\n     */\n    public function size($queue = null);\n\n    /**\n     * Push a new job onto the queue.\n     *\n     * @param  string|object  $job\n     * @param  mixed  $data\n     * @param  string|null  $queue\n     * @return mixed\n     */\n    public function push($job, $data = '', $queue = null);\n\n    /**\n     * Push a new job onto the queue.\n     *\n     * @param  string  $queue\n     * @param  string|object  $job\n     * @param  mixed  $data\n     * @return mixed\n     */\n    public function pushOn($queue, $job, $data = '');\n\n    /**\n     * Push a raw payload onto the queue.\n     *\n     * @param  string  $payload\n     * @param  string|null  $queue\n     * @param  array  $options\n     * @return mixed\n     */\n    public function pushRaw($payload, $queue = null, array $options = []);\n\n    /**\n     * Push a new job onto the queue after (n) seconds.\n     *\n     * @param  \\DateTimeInterface|\\DateInterval|int  $delay\n     * @param  string|object  $job\n     * @param  mixed  $data\n     * @param  string|null  $queue\n     * @return mixed\n     */\n    public function later($delay, $job, $data = '', $queue = null);\n\n    /**\n     * Push a new job onto a specific queue after (n) seconds.\n     *\n     * @param  string  $queue\n     * @param  \\DateTimeInterface|\\DateInterval|int  $delay\n     * @param  string|object  $job\n     * @param  mixed  $data\n     * @return mixed\n     */\n    public function laterOn($queue, $delay, $job, $data = '');\n\n    /**\n     * Push an array of jobs onto the queue.\n     *\n     * @param  array  $jobs\n     * @param  mixed  $data\n     * @param  string|null  $queue\n     * @return mixed\n     */\n    public function bulk($jobs, $data = '', $queue = null);\n\n    /**\n     * Pop the next job off of the queue.\n     *\n     * @param  string|null  $queue\n     * @return \\Illuminate\\Contracts\\Queue\\Job|null\n     */\n    public function pop($queue = null);\n\n    /**\n     * Get the connection name for the queue.\n     *\n     * @return string\n     */\n    public function getConnectionName();\n\n    /**\n     * Set the connection name for the queue.\n     *\n     * @param  string  $name\n     * @return $this\n     */\n    public function setConnectionName($name);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/QueueableCollection.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface QueueableCollection\n{\n    /**\n     * Get the type of the entities being queued.\n     *\n     * @return string|null\n     */\n    public function getQueueableClass();\n\n    /**\n     * Get the identifiers for all of the entities.\n     *\n     * @return array<int, mixed>\n     */\n    public function getQueueableIds();\n\n    /**\n     * Get the relationships of the entities being queued.\n     *\n     * @return array<int, string>\n     */\n    public function getQueueableRelations();\n\n    /**\n     * Get the connection of the entities being queued.\n     *\n     * @return string|null\n     */\n    public function getQueueableConnection();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/QueueableEntity.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface QueueableEntity\n{\n    /**\n     * Get the queueable identity for the entity.\n     *\n     * @return mixed\n     */\n    public function getQueueableId();\n\n    /**\n     * Get the relationships for the entity.\n     *\n     * @return array\n     */\n    public function getQueueableRelations();\n\n    /**\n     * Get the connection of the entity.\n     *\n     * @return string|null\n     */\n    public function getQueueableConnection();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/ShouldBeEncrypted.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface ShouldBeEncrypted\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/ShouldBeUnique.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface ShouldBeUnique\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/ShouldBeUniqueUntilProcessing.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface ShouldBeUniqueUntilProcessing extends ShouldBeUnique\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/ShouldQueue.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface ShouldQueue\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Queue/ShouldQueueAfterCommit.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Queue;\n\ninterface ShouldQueueAfterCommit extends ShouldQueue\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Redis/Connection.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Redis;\n\nuse Closure;\n\ninterface Connection\n{\n    /**\n     * Subscribe to a set of given channels for messages.\n     *\n     * @param  array|string  $channels\n     * @param  \\Closure  $callback\n     * @return void\n     */\n    public function subscribe($channels, Closure $callback);\n\n    /**\n     * Subscribe to a set of given channels with wildcards.\n     *\n     * @param  array|string  $channels\n     * @param  \\Closure  $callback\n     * @return void\n     */\n    public function psubscribe($channels, Closure $callback);\n\n    /**\n     * Run a command against the Redis database.\n     *\n     * @param  string  $method\n     * @param  array  $parameters\n     * @return mixed\n     */\n    public function command($method, array $parameters = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Redis/Connector.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Redis;\n\ninterface Connector\n{\n    /**\n     * Create a connection to a Redis cluster.\n     *\n     * @param  array  $config\n     * @param  array  $options\n     * @return \\Illuminate\\Redis\\Connections\\Connection\n     */\n    public function connect(array $config, array $options);\n\n    /**\n     * Create a connection to a Redis instance.\n     *\n     * @param  array  $config\n     * @param  array  $clusterOptions\n     * @param  array  $options\n     * @return \\Illuminate\\Redis\\Connections\\Connection\n     */\n    public function connectToCluster(array $config, array $clusterOptions, array $options);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Redis/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Redis;\n\ninterface Factory\n{\n    /**\n     * Get a Redis connection by name.\n     *\n     * @param  string|null  $name\n     * @return \\Illuminate\\Redis\\Connections\\Connection\n     */\n    public function connection($name = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Redis/LimiterTimeoutException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Redis;\n\nuse Exception;\n\nclass LimiterTimeoutException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Routing/BindingRegistrar.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Routing;\n\ninterface BindingRegistrar\n{\n    /**\n     * Add a new route parameter binder.\n     *\n     * @param  string  $key\n     * @param  string|callable  $binder\n     * @return void\n     */\n    public function bind($key, $binder);\n\n    /**\n     * Get the binding callback for a given binding.\n     *\n     * @param  string  $key\n     * @return \\Closure\n     */\n    public function getBindingCallback($key);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Routing/Registrar.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Routing;\n\ninterface Registrar\n{\n    /**\n     * Register a new GET route with the router.\n     *\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function get($uri, $action);\n\n    /**\n     * Register a new POST route with the router.\n     *\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function post($uri, $action);\n\n    /**\n     * Register a new PUT route with the router.\n     *\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function put($uri, $action);\n\n    /**\n     * Register a new DELETE route with the router.\n     *\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function delete($uri, $action);\n\n    /**\n     * Register a new PATCH route with the router.\n     *\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function patch($uri, $action);\n\n    /**\n     * Register a new OPTIONS route with the router.\n     *\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function options($uri, $action);\n\n    /**\n     * Register a new route with the given verbs.\n     *\n     * @param  array|string  $methods\n     * @param  string  $uri\n     * @param  array|string|callable  $action\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function match($methods, $uri, $action);\n\n    /**\n     * Route a resource to a controller.\n     *\n     * @param  string  $name\n     * @param  string  $controller\n     * @param  array  $options\n     * @return \\Illuminate\\Routing\\PendingResourceRegistration\n     */\n    public function resource($name, $controller, array $options = []);\n\n    /**\n     * Create a route group with shared attributes.\n     *\n     * @param  array  $attributes\n     * @param  \\Closure|string  $routes\n     * @return void\n     */\n    public function group(array $attributes, $routes);\n\n    /**\n     * Substitute the route bindings onto the route.\n     *\n     * @param  \\Illuminate\\Routing\\Route  $route\n     * @return \\Illuminate\\Routing\\Route\n     */\n    public function substituteBindings($route);\n\n    /**\n     * Substitute the implicit Eloquent model bindings for the route.\n     *\n     * @param  \\Illuminate\\Routing\\Route  $route\n     * @return void\n     */\n    public function substituteImplicitBindings($route);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Routing/ResponseFactory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Routing;\n\ninterface ResponseFactory\n{\n    /**\n     * Create a new response instance.\n     *\n     * @param  array|string  $content\n     * @param  int  $status\n     * @param  array  $headers\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function make($content = '', $status = 200, array $headers = []);\n\n    /**\n     * Create a new \"no content\" response.\n     *\n     * @param  int  $status\n     * @param  array  $headers\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function noContent($status = 204, array $headers = []);\n\n    /**\n     * Create a new response for a given view.\n     *\n     * @param  string|array  $view\n     * @param  array  $data\n     * @param  int  $status\n     * @param  array  $headers\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function view($view, $data = [], $status = 200, array $headers = []);\n\n    /**\n     * Create a new JSON response instance.\n     *\n     * @param  mixed  $data\n     * @param  int  $status\n     * @param  array  $headers\n     * @param  int  $options\n     * @return \\Illuminate\\Http\\JsonResponse\n     */\n    public function json($data = [], $status = 200, array $headers = [], $options = 0);\n\n    /**\n     * Create a new JSONP response instance.\n     *\n     * @param  string  $callback\n     * @param  mixed  $data\n     * @param  int  $status\n     * @param  array  $headers\n     * @param  int  $options\n     * @return \\Illuminate\\Http\\JsonResponse\n     */\n    public function jsonp($callback, $data = [], $status = 200, array $headers = [], $options = 0);\n\n    /**\n     * Create a new streamed response instance.\n     *\n     * @param  callable  $callback\n     * @param  int  $status\n     * @param  array  $headers\n     * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n     */\n    public function stream($callback, $status = 200, array $headers = []);\n\n    /**\n     * Create a new streamed response instance as a file download.\n     *\n     * @param  callable  $callback\n     * @param  string|null  $name\n     * @param  array  $headers\n     * @param  string|null  $disposition\n     * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\n     */\n    public function streamDownload($callback, $name = null, array $headers = [], $disposition = 'attachment');\n\n    /**\n     * Create a new file download response.\n     *\n     * @param  \\SplFileInfo|string  $file\n     * @param  string|null  $name\n     * @param  array  $headers\n     * @param  string|null  $disposition\n     * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n     */\n    public function download($file, $name = null, array $headers = [], $disposition = 'attachment');\n\n    /**\n     * Return the raw contents of a binary file.\n     *\n     * @param  \\SplFileInfo|string  $file\n     * @param  array  $headers\n     * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\n     */\n    public function file($file, array $headers = []);\n\n    /**\n     * Create a new redirect response to the given path.\n     *\n     * @param  string  $path\n     * @param  int  $status\n     * @param  array  $headers\n     * @param  bool|null  $secure\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function redirectTo($path, $status = 302, $headers = [], $secure = null);\n\n    /**\n     * Create a new redirect response to a named route.\n     *\n     * @param  string  $route\n     * @param  mixed  $parameters\n     * @param  int  $status\n     * @param  array  $headers\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function redirectToRoute($route, $parameters = [], $status = 302, $headers = []);\n\n    /**\n     * Create a new redirect response to a controller action.\n     *\n     * @param  array|string  $action\n     * @param  mixed  $parameters\n     * @param  int  $status\n     * @param  array  $headers\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function redirectToAction($action, $parameters = [], $status = 302, $headers = []);\n\n    /**\n     * Create a new redirect response, while putting the current URL in the session.\n     *\n     * @param  string  $path\n     * @param  int  $status\n     * @param  array  $headers\n     * @param  bool|null  $secure\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function redirectGuest($path, $status = 302, $headers = [], $secure = null);\n\n    /**\n     * Create a new redirect response to the previously intended location.\n     *\n     * @param  string  $default\n     * @param  int  $status\n     * @param  array  $headers\n     * @param  bool|null  $secure\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function redirectToIntended($default = '/', $status = 302, $headers = [], $secure = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Routing/UrlGenerator.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Routing;\n\ninterface UrlGenerator\n{\n    /**\n     * Get the current URL for the request.\n     *\n     * @return string\n     */\n    public function current();\n\n    /**\n     * Get the URL for the previous request.\n     *\n     * @param  mixed  $fallback\n     * @return string\n     */\n    public function previous($fallback = false);\n\n    /**\n     * Generate an absolute URL to the given path.\n     *\n     * @param  string  $path\n     * @param  mixed  $extra\n     * @param  bool|null  $secure\n     * @return string\n     */\n    public function to($path, $extra = [], $secure = null);\n\n    /**\n     * Generate a secure, absolute URL to the given path.\n     *\n     * @param  string  $path\n     * @param  array  $parameters\n     * @return string\n     */\n    public function secure($path, $parameters = []);\n\n    /**\n     * Generate the URL to an application asset.\n     *\n     * @param  string  $path\n     * @param  bool|null  $secure\n     * @return string\n     */\n    public function asset($path, $secure = null);\n\n    /**\n     * Get the URL to a named route.\n     *\n     * @param  string  $name\n     * @param  mixed  $parameters\n     * @param  bool  $absolute\n     * @return string\n     *\n     * @throws \\InvalidArgumentException\n     */\n    public function route($name, $parameters = [], $absolute = true);\n\n    /**\n     * Get the URL to a controller action.\n     *\n     * @param  string|array  $action\n     * @param  mixed  $parameters\n     * @param  bool  $absolute\n     * @return string\n     */\n    public function action($action, $parameters = [], $absolute = true);\n\n    /**\n     * Get the root controller namespace.\n     *\n     * @return string\n     */\n    public function getRootControllerNamespace();\n\n    /**\n     * Set the root controller namespace.\n     *\n     * @param  string  $rootNamespace\n     * @return $this\n     */\n    public function setRootControllerNamespace($rootNamespace);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Routing/UrlRoutable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Routing;\n\ninterface UrlRoutable\n{\n    /**\n     * Get the value of the model's route key.\n     *\n     * @return mixed\n     */\n    public function getRouteKey();\n\n    /**\n     * Get the route key for the model.\n     *\n     * @return string\n     */\n    public function getRouteKeyName();\n\n    /**\n     * Retrieve the model for a bound value.\n     *\n     * @param  mixed  $value\n     * @param  string|null  $field\n     * @return \\Illuminate\\Database\\Eloquent\\Model|null\n     */\n    public function resolveRouteBinding($value, $field = null);\n\n    /**\n     * Retrieve the child model for a bound value.\n     *\n     * @param  string  $childType\n     * @param  mixed  $value\n     * @param  string|null  $field\n     * @return \\Illuminate\\Database\\Eloquent\\Model|null\n     */\n    public function resolveChildRouteBinding($childType, $value, $field);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Session/Middleware/AuthenticatesSessions.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Session\\Middleware;\n\ninterface AuthenticatesSessions\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Session/Session.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Session;\n\ninterface Session\n{\n    /**\n     * Get the name of the session.\n     *\n     * @return string\n     */\n    public function getName();\n\n    /**\n     * Set the name of the session.\n     *\n     * @param  string  $name\n     * @return void\n     */\n    public function setName($name);\n\n    /**\n     * Get the current session ID.\n     *\n     * @return string\n     */\n    public function getId();\n\n    /**\n     * Set the session ID.\n     *\n     * @param  string  $id\n     * @return void\n     */\n    public function setId($id);\n\n    /**\n     * Start the session, reading the data from a handler.\n     *\n     * @return bool\n     */\n    public function start();\n\n    /**\n     * Save the session data to storage.\n     *\n     * @return void\n     */\n    public function save();\n\n    /**\n     * Get all of the session data.\n     *\n     * @return array\n     */\n    public function all();\n\n    /**\n     * Checks if a key exists.\n     *\n     * @param  string|array  $key\n     * @return bool\n     */\n    public function exists($key);\n\n    /**\n     * Checks if a key is present and not null.\n     *\n     * @param  string|array  $key\n     * @return bool\n     */\n    public function has($key);\n\n    /**\n     * Get an item from the session.\n     *\n     * @param  string  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public function get($key, $default = null);\n\n    /**\n     * Get the value of a given key and then forget it.\n     *\n     * @param  string  $key\n     * @param  mixed  $default\n     * @return mixed\n     */\n    public function pull($key, $default = null);\n\n    /**\n     * Put a key / value pair or array of key / value pairs in the session.\n     *\n     * @param  string|array  $key\n     * @param  mixed  $value\n     * @return void\n     */\n    public function put($key, $value = null);\n\n    /**\n     * Get the CSRF token value.\n     *\n     * @return string\n     */\n    public function token();\n\n    /**\n     * Regenerate the CSRF token value.\n     *\n     * @return void\n     */\n    public function regenerateToken();\n\n    /**\n     * Remove an item from the session, returning its value.\n     *\n     * @param  string  $key\n     * @return mixed\n     */\n    public function remove($key);\n\n    /**\n     * Remove one or many items from the session.\n     *\n     * @param  string|array  $keys\n     * @return void\n     */\n    public function forget($keys);\n\n    /**\n     * Remove all of the items from the session.\n     *\n     * @return void\n     */\n    public function flush();\n\n    /**\n     * Flush the session data and regenerate the ID.\n     *\n     * @return bool\n     */\n    public function invalidate();\n\n    /**\n     * Generate a new session identifier.\n     *\n     * @param  bool  $destroy\n     * @return bool\n     */\n    public function regenerate($destroy = false);\n\n    /**\n     * Generate a new session ID for the session.\n     *\n     * @param  bool  $destroy\n     * @return bool\n     */\n    public function migrate($destroy = false);\n\n    /**\n     * Determine if the session has been started.\n     *\n     * @return bool\n     */\n    public function isStarted();\n\n    /**\n     * Get the previous URL from the session.\n     *\n     * @return string|null\n     */\n    public function previousUrl();\n\n    /**\n     * Set the \"previous\" URL in the session.\n     *\n     * @param  string  $url\n     * @return void\n     */\n    public function setPreviousUrl($url);\n\n    /**\n     * Get the session handler instance.\n     *\n     * @return \\SessionHandlerInterface\n     */\n    public function getHandler();\n\n    /**\n     * Determine if the session handler needs a request.\n     *\n     * @return bool\n     */\n    public function handlerNeedsRequest();\n\n    /**\n     * Set the request on the handler instance.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return void\n     */\n    public function setRequestOnHandler($request);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/Arrayable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\n/**\n * @template TKey of array-key\n * @template TValue\n */\ninterface Arrayable\n{\n    /**\n     * Get the instance as an array.\n     *\n     * @return array<TKey, TValue>\n     */\n    public function toArray();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/CanBeEscapedWhenCastToString.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface CanBeEscapedWhenCastToString\n{\n    /**\n     * Indicate that the object's string representation should be escaped when __toString is invoked.\n     *\n     * @param  bool  $escape\n     * @return $this\n     */\n    public function escapeWhenCastingToString($escape = true);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/DeferrableProvider.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface DeferrableProvider\n{\n    /**\n     * Get the services provided by the provider.\n     *\n     * @return array\n     */\n    public function provides();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/DeferringDisplayableValue.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface DeferringDisplayableValue\n{\n    /**\n     * Resolve the displayable value that the class is deferring.\n     *\n     * @return \\Illuminate\\Contracts\\Support\\Htmlable|string\n     */\n    public function resolveDisplayableValue();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/Htmlable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface Htmlable\n{\n    /**\n     * Get content as a string of HTML.\n     *\n     * @return string\n     */\n    public function toHtml();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/Jsonable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface Jsonable\n{\n    /**\n     * Convert the object to its JSON representation.\n     *\n     * @param  int  $options\n     * @return string\n     */\n    public function toJson($options = 0);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/MessageBag.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\nuse Countable;\n\ninterface MessageBag extends Arrayable, Countable\n{\n    /**\n     * Get the keys present in the message bag.\n     *\n     * @return array\n     */\n    public function keys();\n\n    /**\n     * Add a message to the bag.\n     *\n     * @param  string  $key\n     * @param  string  $message\n     * @return $this\n     */\n    public function add($key, $message);\n\n    /**\n     * Merge a new array of messages into the bag.\n     *\n     * @param  \\Illuminate\\Contracts\\Support\\MessageProvider|array  $messages\n     * @return $this\n     */\n    public function merge($messages);\n\n    /**\n     * Determine if messages exist for a given key.\n     *\n     * @param  string|array  $key\n     * @return bool\n     */\n    public function has($key);\n\n    /**\n     * Get the first message from the bag for a given key.\n     *\n     * @param  string|null  $key\n     * @param  string|null  $format\n     * @return string\n     */\n    public function first($key = null, $format = null);\n\n    /**\n     * Get all of the messages from the bag for a given key.\n     *\n     * @param  string  $key\n     * @param  string|null  $format\n     * @return array\n     */\n    public function get($key, $format = null);\n\n    /**\n     * Get all of the messages for every key in the bag.\n     *\n     * @param  string|null  $format\n     * @return array\n     */\n    public function all($format = null);\n\n    /**\n     * Remove a message from the bag.\n     *\n     * @param  string  $key\n     * @return $this\n     */\n    public function forget($key);\n\n    /**\n     * Get the raw messages in the container.\n     *\n     * @return array\n     */\n    public function getMessages();\n\n    /**\n     * Get the default message format.\n     *\n     * @return string\n     */\n    public function getFormat();\n\n    /**\n     * Set the default message format.\n     *\n     * @param  string  $format\n     * @return $this\n     */\n    public function setFormat($format = ':message');\n\n    /**\n     * Determine if the message bag has any messages.\n     *\n     * @return bool\n     */\n    public function isEmpty();\n\n    /**\n     * Determine if the message bag has any messages.\n     *\n     * @return bool\n     */\n    public function isNotEmpty();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/MessageProvider.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface MessageProvider\n{\n    /**\n     * Get the messages for the instance.\n     *\n     * @return \\Illuminate\\Contracts\\Support\\MessageBag\n     */\n    public function getMessageBag();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/Renderable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface Renderable\n{\n    /**\n     * Get the evaluated contents of the object.\n     *\n     * @return string\n     */\n    public function render();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/Responsable.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\ninterface Responsable\n{\n    /**\n     * Create an HTTP response that represents the object.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return \\Symfony\\Component\\HttpFoundation\\Response\n     */\n    public function toResponse($request);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Support/ValidatedData.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Support;\n\nuse ArrayAccess;\nuse IteratorAggregate;\n\ninterface ValidatedData extends Arrayable, ArrayAccess, IteratorAggregate\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Translation/HasLocalePreference.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Translation;\n\ninterface HasLocalePreference\n{\n    /**\n     * Get the preferred locale of the entity.\n     *\n     * @return string|null\n     */\n    public function preferredLocale();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Translation/Loader.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Translation;\n\ninterface Loader\n{\n    /**\n     * Load the messages for the given locale.\n     *\n     * @param  string  $locale\n     * @param  string  $group\n     * @param  string|null  $namespace\n     * @return array\n     */\n    public function load($locale, $group, $namespace = null);\n\n    /**\n     * Add a new namespace to the loader.\n     *\n     * @param  string  $namespace\n     * @param  string  $hint\n     * @return void\n     */\n    public function addNamespace($namespace, $hint);\n\n    /**\n     * Add a new JSON path to the loader.\n     *\n     * @param  string  $path\n     * @return void\n     */\n    public function addJsonPath($path);\n\n    /**\n     * Get an array of all the registered namespaces.\n     *\n     * @return array\n     */\n    public function namespaces();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Translation/Translator.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Translation;\n\ninterface Translator\n{\n    /**\n     * Get the translation for a given key.\n     *\n     * @param  string  $key\n     * @param  array  $replace\n     * @param  string|null  $locale\n     * @return mixed\n     */\n    public function get($key, array $replace = [], $locale = null);\n\n    /**\n     * Get a translation according to an integer value.\n     *\n     * @param  string  $key\n     * @param  \\Countable|int|float|array  $number\n     * @param  array  $replace\n     * @param  string|null  $locale\n     * @return string\n     */\n    public function choice($key, $number, array $replace = [], $locale = null);\n\n    /**\n     * Get the default locale being used.\n     *\n     * @return string\n     */\n    public function getLocale();\n\n    /**\n     * Set the default locale.\n     *\n     * @param  string  $locale\n     * @return void\n     */\n    public function setLocale($locale);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/DataAwareRule.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\ninterface DataAwareRule\n{\n    /**\n     * Set the data under validation.\n     *\n     * @param  array  $data\n     * @return $this\n     */\n    public function setData(array $data);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\ninterface Factory\n{\n    /**\n     * Create a new Validator instance.\n     *\n     * @param  array  $data\n     * @param  array  $rules\n     * @param  array  $messages\n     * @param  array  $attributes\n     * @return \\Illuminate\\Contracts\\Validation\\Validator\n     */\n    public function make(array $data, array $rules, array $messages = [], array $attributes = []);\n\n    /**\n     * Register a custom validator extension.\n     *\n     * @param  string  $rule\n     * @param  \\Closure|string  $extension\n     * @param  string|null  $message\n     * @return void\n     */\n    public function extend($rule, $extension, $message = null);\n\n    /**\n     * Register a custom implicit validator extension.\n     *\n     * @param  string  $rule\n     * @param  \\Closure|string  $extension\n     * @param  string|null  $message\n     * @return void\n     */\n    public function extendImplicit($rule, $extension, $message = null);\n\n    /**\n     * Register a custom implicit validator message replacer.\n     *\n     * @param  string  $rule\n     * @param  \\Closure|string  $replacer\n     * @return void\n     */\n    public function replacer($rule, $replacer);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/ImplicitRule.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\n/**\n * @deprecated see ValidationRule\n */\ninterface ImplicitRule extends Rule\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/InvokableRule.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\nuse Closure;\n\n/**\n * @deprecated see ValidationRule\n */\ninterface InvokableRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  string  $attribute\n     * @param  mixed  $value\n     * @param  \\Closure(string): \\Illuminate\\Translation\\PotentiallyTranslatedString  $fail\n     * @return void\n     */\n    public function __invoke(string $attribute, mixed $value, Closure $fail);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/Rule.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\n/**\n * @deprecated see ValidationRule\n */\ninterface Rule\n{\n    /**\n     * Determine if the validation rule passes.\n     *\n     * @param  string  $attribute\n     * @param  mixed  $value\n     * @return bool\n     */\n    public function passes($attribute, $value);\n\n    /**\n     * Get the validation error message.\n     *\n     * @return string|array\n     */\n    public function message();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/UncompromisedVerifier.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\ninterface UncompromisedVerifier\n{\n    /**\n     * Verify that the given data has not been compromised in data leaks.\n     *\n     * @param  array  $data\n     * @return bool\n     */\n    public function verify($data);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/ValidatesWhenResolved.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\ninterface ValidatesWhenResolved\n{\n    /**\n     * Validate the given class instance.\n     *\n     * @return void\n     */\n    public function validateResolved();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/ValidationRule.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\nuse Closure;\n\ninterface ValidationRule\n{\n    /**\n     * Run the validation rule.\n     *\n     * @param  string  $attribute\n     * @param  mixed  $value\n     * @param  \\Closure(string): \\Illuminate\\Translation\\PotentiallyTranslatedString  $fail\n     * @return void\n     */\n    public function validate(string $attribute, mixed $value, Closure $fail): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/Validator.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\nuse Illuminate\\Contracts\\Support\\MessageProvider;\n\ninterface Validator extends MessageProvider\n{\n    /**\n     * Run the validator's rules against its data.\n     *\n     * @return array\n     *\n     * @throws \\Illuminate\\Validation\\ValidationException\n     */\n    public function validate();\n\n    /**\n     * Get the attributes and values that were validated.\n     *\n     * @return array\n     *\n     * @throws \\Illuminate\\Validation\\ValidationException\n     */\n    public function validated();\n\n    /**\n     * Determine if the data fails the validation rules.\n     *\n     * @return bool\n     */\n    public function fails();\n\n    /**\n     * Get the failed validation rules.\n     *\n     * @return array\n     */\n    public function failed();\n\n    /**\n     * Add conditions to a given field based on a Closure.\n     *\n     * @param  string|array  $attribute\n     * @param  string|array  $rules\n     * @param  callable  $callback\n     * @return $this\n     */\n    public function sometimes($attribute, $rules, callable $callback);\n\n    /**\n     * Add an after validation callback.\n     *\n     * @param  callable|string  $callback\n     * @return $this\n     */\n    public function after($callback);\n\n    /**\n     * Get all of the validation error messages.\n     *\n     * @return \\Illuminate\\Support\\MessageBag\n     */\n    public function errors();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/Validation/ValidatorAwareRule.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\Validation;\n\nuse Illuminate\\Validation\\Validator;\n\ninterface ValidatorAwareRule\n{\n    /**\n     * Set the current validator.\n     *\n     * @param  \\Illuminate\\Validation\\Validator  $validator\n     * @return $this\n     */\n    public function setValidator(Validator $validator);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/View/Engine.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\View;\n\ninterface Engine\n{\n    /**\n     * Get the evaluated contents of the view.\n     *\n     * @param  string  $path\n     * @param  array  $data\n     * @return string\n     */\n    public function get($path, array $data = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/View/Factory.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\View;\n\ninterface Factory\n{\n    /**\n     * Determine if a given view exists.\n     *\n     * @param  string  $view\n     * @return bool\n     */\n    public function exists($view);\n\n    /**\n     * Get the evaluated view contents for the given path.\n     *\n     * @param  string  $path\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|array  $data\n     * @param  array  $mergeData\n     * @return \\Illuminate\\Contracts\\View\\View\n     */\n    public function file($path, $data = [], $mergeData = []);\n\n    /**\n     * Get the evaluated view contents for the given view.\n     *\n     * @param  string  $view\n     * @param  \\Illuminate\\Contracts\\Support\\Arrayable|array  $data\n     * @param  array  $mergeData\n     * @return \\Illuminate\\Contracts\\View\\View\n     */\n    public function make($view, $data = [], $mergeData = []);\n\n    /**\n     * Add a piece of shared data to the environment.\n     *\n     * @param  array|string  $key\n     * @param  mixed  $value\n     * @return mixed\n     */\n    public function share($key, $value = null);\n\n    /**\n     * Register a view composer event.\n     *\n     * @param  array|string  $views\n     * @param  \\Closure|string  $callback\n     * @return array\n     */\n    public function composer($views, $callback);\n\n    /**\n     * Register a view creator event.\n     *\n     * @param  array|string  $views\n     * @param  \\Closure|string  $callback\n     * @return array\n     */\n    public function creator($views, $callback);\n\n    /**\n     * Add a new namespace to the loader.\n     *\n     * @param  string  $namespace\n     * @param  string|array  $hints\n     * @return $this\n     */\n    public function addNamespace($namespace, $hints);\n\n    /**\n     * Replace the namespace hints for the given namespace.\n     *\n     * @param  string  $namespace\n     * @param  string|array  $hints\n     * @return $this\n     */\n    public function replaceNamespace($namespace, $hints);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/View/View.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\View;\n\nuse Illuminate\\Contracts\\Support\\Renderable;\n\ninterface View extends Renderable\n{\n    /**\n     * Get the name of the view.\n     *\n     * @return string\n     */\n    public function name();\n\n    /**\n     * Add a piece of data to the view.\n     *\n     * @param  string|array  $key\n     * @param  mixed  $value\n     * @return $this\n     */\n    public function with($key, $value = null);\n\n    /**\n     * Get the array of view data.\n     *\n     * @return array\n     */\n    public function getData();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/View/ViewCompilationException.php",
    "content": "<?php\n\nnamespace Illuminate\\Contracts\\View;\n\nuse Exception;\n\nclass ViewCompilationException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/contracts/composer.json",
    "content": "{\n    \"name\": \"illuminate/contracts\",\n    \"description\": \"The Illuminate Contracts package.\",\n    \"license\": \"MIT\",\n    \"homepage\": \"https://laravel.com\",\n    \"support\": {\n        \"issues\": \"https://github.com/laravel/framework/issues\",\n        \"source\": \"https://github.com/laravel/framework\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Taylor Otwell\",\n            \"email\": \"taylor@laravel.com\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.1\",\n        \"psr/container\": \"^1.1.1|^2.0.1\",\n        \"psr/simple-cache\": \"^1.0|^2.0|^3.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Illuminate\\\\Contracts\\\\\": \"\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"10.x-dev\"\n        }\n    },\n    \"config\": {\n        \"sort-packages\": true\n    },\n    \"minimum-stability\": \"dev\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/macroable/LICENSE.md",
    "content": "The MIT License (MIT)\n\nCopyright (c) Taylor Otwell\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/macroable/Traits/Macroable.php",
    "content": "<?php\n\nnamespace Illuminate\\Support\\Traits;\n\nuse BadMethodCallException;\nuse Closure;\nuse ReflectionClass;\nuse ReflectionMethod;\n\ntrait Macroable\n{\n    /**\n     * The registered string macros.\n     *\n     * @var array\n     */\n    protected static $macros = [];\n\n    /**\n     * Register a custom macro.\n     *\n     * @param  string  $name\n     * @param  object|callable  $macro\n     * @return void\n     */\n    public static function macro($name, $macro)\n    {\n        static::$macros[$name] = $macro;\n    }\n\n    /**\n     * Mix another object into the class.\n     *\n     * @param  object  $mixin\n     * @param  bool  $replace\n     * @return void\n     *\n     * @throws \\ReflectionException\n     */\n    public static function mixin($mixin, $replace = true)\n    {\n        $methods = (new ReflectionClass($mixin))->getMethods(\n            ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED\n        );\n\n        foreach ($methods as $method) {\n            if ($replace || ! static::hasMacro($method->name)) {\n                static::macro($method->name, $method->invoke($mixin));\n            }\n        }\n    }\n\n    /**\n     * Checks if macro is registered.\n     *\n     * @param  string  $name\n     * @return bool\n     */\n    public static function hasMacro($name)\n    {\n        return isset(static::$macros[$name]);\n    }\n\n    /**\n     * Flush the existing macros.\n     *\n     * @return void\n     */\n    public static function flushMacros()\n    {\n        static::$macros = [];\n    }\n\n    /**\n     * Dynamically handle calls to the class.\n     *\n     * @param  string  $method\n     * @param  array  $parameters\n     * @return mixed\n     *\n     * @throws \\BadMethodCallException\n     */\n    public static function __callStatic($method, $parameters)\n    {\n        if (! static::hasMacro($method)) {\n            throw new BadMethodCallException(sprintf(\n                'Method %s::%s does not exist.', static::class, $method\n            ));\n        }\n\n        $macro = static::$macros[$method];\n\n        if ($macro instanceof Closure) {\n            $macro = $macro->bindTo(null, static::class);\n        }\n\n        return $macro(...$parameters);\n    }\n\n    /**\n     * Dynamically handle calls to the class.\n     *\n     * @param  string  $method\n     * @param  array  $parameters\n     * @return mixed\n     *\n     * @throws \\BadMethodCallException\n     */\n    public function __call($method, $parameters)\n    {\n        if (! static::hasMacro($method)) {\n            throw new BadMethodCallException(sprintf(\n                'Method %s::%s does not exist.', static::class, $method\n            ));\n        }\n\n        $macro = static::$macros[$method];\n\n        if ($macro instanceof Closure) {\n            $macro = $macro->bindTo($this, static::class);\n        }\n\n        return $macro(...$parameters);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/illuminate/macroable/composer.json",
    "content": "{\n    \"name\": \"illuminate/macroable\",\n    \"description\": \"The Illuminate Macroable package.\",\n    \"license\": \"MIT\",\n    \"homepage\": \"https://laravel.com\",\n    \"support\": {\n        \"issues\": \"https://github.com/laravel/framework/issues\",\n        \"source\": \"https://github.com/laravel/framework\"\n    },\n    \"authors\": [\n        {\n            \"name\": \"Taylor Otwell\",\n            \"email\": \"taylor@laravel.com\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^8.1\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Illuminate\\\\Support\\\\\": \"\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"10.x-dev\"\n        }\n    },\n    \"config\": {\n        \"sort-packages\": true\n    },\n    \"minimum-stability\": \"dev\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013-2020 Alex Bilbie <hello@alexbilbie.com>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/README.md",
    "content": "# OAuth 2.0 Client\n\nThis package provides a base for integrating with [OAuth 2.0](http://oauth.net/2/) service providers.\n\n[![Gitter Chat](https://img.shields.io/badge/gitter-join_chat-brightgreen.svg?style=flat-square)](https://gitter.im/thephpleague/oauth2-client)\n[![Source Code](https://img.shields.io/badge/source-thephpleague/oauth2--client-blue.svg?style=flat-square)](https://github.com/thephpleague/oauth2-client)\n[![Latest Version](https://img.shields.io/github/release/thephpleague/oauth2-client.svg?style=flat-square)](https://github.com/thephpleague/oauth2-client/releases)\n[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](https://github.com/thephpleague/oauth2-client/blob/master/LICENSE)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/thephpleague/oauth2-client/continuous-integration.yml?label=CI&logo=github&style=flat-square)](https://github.com/thephpleague/oauth2-client/actions?query=workflow%3ACI)\n[![Codecov Code Coverage](https://img.shields.io/codecov/c/gh/thephpleague/oauth2-client?label=codecov&logo=codecov&style=flat-square)](https://codecov.io/gh/thephpleague/oauth2-client)\n[![Total Downloads](https://img.shields.io/packagist/dt/league/oauth2-client.svg?style=flat-square)](https://packagist.org/packages/league/oauth2-client)\n\n---\n\nThe OAuth 2.0 login flow, seen commonly around the web in the form of \"Connect with Facebook/Google/etc.\" buttons, is a common integration added to web applications, but it can be tricky and tedious to do right. To help, we've created the `league/oauth2-client` package, which provides a base for integrating with various OAuth 2.0 providers, without overburdening your application with the concerns of [RFC 6749](http://tools.ietf.org/html/rfc6749).\n\nThis OAuth 2.0 client library will work with any OAuth 2.0 provider that conforms to the OAuth 2.0 Authorization Framework. Out-of-the-box, we provide a `GenericProvider` class to connect to any service provider that uses [Bearer tokens](http://tools.ietf.org/html/rfc6750). See our [basic usage guide](https://oauth2-client.thephpleague.com/usage/) for examples using `GenericProvider`.\n\nMany service providers provide additional functionality above and beyond the OAuth 2.0 specification. For this reason, you may extend and wrap this library to support additional behavior. There are already many [official](https://oauth2-client.thephpleague.com/providers/league/) and [third-party](https://oauth2-client.thephpleague.com/providers/thirdparty/) provider clients available (e.g., Facebook, GitHub, Google, Instagram, LinkedIn, etc.). If your provider isn't in the list, feel free to add it.\n\nThis package is compliant with [PSR-1][], [PSR-2][], [PSR-4][], and [PSR-7][]. If you notice compliance oversights, please send a patch via pull request. If you're interested in contributing to this library, please take a look at our [contributing guidelines](https://github.com/thephpleague/oauth2-client/blob/master/CONTRIBUTING.md).\n\n## Requirements\n\nWe support the following versions of PHP:\n\n* PHP 8.1\n* PHP 8.0\n* PHP 7.4\n* PHP 7.3\n* PHP 7.2\n* PHP 7.1\n* PHP 7.0\n* PHP 5.6\n\n## Provider Clients\n\nWe provide a list of [official PHP League provider clients](https://oauth2-client.thephpleague.com/providers/league/), as well as [third-party provider clients](https://oauth2-client.thephpleague.com/providers/thirdparty/).\n\nTo build your own provider client, please refer to \"[Implementing a Provider Client](https://oauth2-client.thephpleague.com/providers/implementing/).\"\n\n## Usage\n\nFor usage and code examples, check out our [basic usage guide](https://oauth2-client.thephpleague.com/usage/).\n\n## Contributing\n\nPlease see [our contributing guidelines](https://github.com/thephpleague/oauth2-client/blob/master/CONTRIBUTING.md) for details.\n\n## License\n\nThe MIT License (MIT). Please see [LICENSE](https://github.com/thephpleague/oauth2-client/blob/master/LICENSE) for more information.\n\n\n[PSR-1]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md\n[PSR-2]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md\n[PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md\n[PSR-7]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-7-http-message.md\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/composer.json",
    "content": "{\n    \"name\": \"league/oauth2-client\",\n    \"description\": \"OAuth 2.0 Client Library\",\n    \"license\": \"MIT\",\n    \"config\": {\n        \"sort-packages\": true\n    },\n    \"require\": {\n        \"php\": \"^5.6 || ^7.0 || ^8.0\",\n        \"guzzlehttp/guzzle\": \"^6.0 || ^7.0\",\n        \"paragonie/random_compat\": \"^1 || ^2 || ^9.99\"\n    },\n    \"require-dev\": {\n        \"mockery/mockery\": \"^1.3.5\",\n        \"php-parallel-lint/php-parallel-lint\": \"^1.3.1\",\n        \"phpunit/phpunit\": \"^5.7 || ^6.0 || ^9.5\",\n        \"squizlabs/php_codesniffer\": \"^2.3 || ^3.0\"\n    },\n    \"keywords\": [\n        \"oauth\",\n        \"oauth2\",\n        \"authorization\",\n        \"authentication\",\n        \"idp\",\n        \"identity\",\n        \"sso\",\n        \"single sign on\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"Alex Bilbie\",\n            \"email\": \"hello@alexbilbie.com\",\n            \"homepage\": \"http://www.alexbilbie.com\",\n            \"role\": \"Developer\"\n        },\n        {\n            \"name\": \"Woody Gilk\",\n            \"homepage\": \"https://github.com/shadowhand\",\n            \"role\": \"Contributor\"\n        }\n\n    ],\n    \"autoload\": {\n        \"psr-4\": {\n            \"League\\\\OAuth2\\\\Client\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"League\\\\OAuth2\\\\Client\\\\Test\\\\\": \"test/src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-2.x\": \"2.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/AbstractGrant.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant;\n\nuse League\\OAuth2\\Client\\Tool\\RequiredParameterTrait;\n\n/**\n * Represents a type of authorization grant.\n *\n * An authorization grant is a credential representing the resource\n * owner's authorization (to access its protected resources) used by the\n * client to obtain an access token.  OAuth 2.0 defines four\n * grant types -- authorization code, implicit, resource owner password\n * credentials, and client credentials -- as well as an extensibility\n * mechanism for defining additional types.\n *\n * @link http://tools.ietf.org/html/rfc6749#section-1.3 Authorization Grant (RFC 6749, §1.3)\n */\nabstract class AbstractGrant\n{\n    use RequiredParameterTrait;\n\n    /**\n     * Returns the name of this grant, eg. 'grant_name', which is used as the\n     * grant type when encoding URL query parameters.\n     *\n     * @return string\n     */\n    abstract protected function getName();\n\n    /**\n     * Returns a list of all required request parameters.\n     *\n     * @return array\n     */\n    abstract protected function getRequiredRequestParameters();\n\n    /**\n     * Returns this grant's name as its string representation. This allows for\n     * string interpolation when building URL query parameters.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->getName();\n    }\n\n    /**\n     * Prepares an access token request's parameters by checking that all\n     * required parameters are set, then merging with any given defaults.\n     *\n     * @param  array $defaults\n     * @param  array $options\n     * @return array\n     */\n    public function prepareRequestParameters(array $defaults, array $options)\n    {\n        $defaults['grant_type'] = $this->getName();\n\n        $required = $this->getRequiredRequestParameters();\n        $provided = array_merge($defaults, $options);\n\n        $this->checkRequiredParameters($required, $provided);\n\n        return $provided;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/AuthorizationCode.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant;\n\n/**\n * Represents an authorization code grant.\n *\n * @link http://tools.ietf.org/html/rfc6749#section-1.3.1 Authorization Code (RFC 6749, §1.3.1)\n */\nclass AuthorizationCode extends AbstractGrant\n{\n    /**\n     * @inheritdoc\n     */\n    protected function getName()\n    {\n        return 'authorization_code';\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getRequiredRequestParameters()\n    {\n        return [\n            'code',\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/ClientCredentials.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant;\n\n/**\n * Represents a client credentials grant.\n *\n * @link http://tools.ietf.org/html/rfc6749#section-1.3.4 Client Credentials (RFC 6749, §1.3.4)\n */\nclass ClientCredentials extends AbstractGrant\n{\n    /**\n     * @inheritdoc\n     */\n    protected function getName()\n    {\n        return 'client_credentials';\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getRequiredRequestParameters()\n    {\n        return [];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/Exception/InvalidGrantException.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant\\Exception;\n\nuse InvalidArgumentException;\n\n/**\n * Exception thrown if the grant does not extend from AbstractGrant.\n *\n * @see League\\OAuth2\\Client\\Grant\\AbstractGrant\n */\nclass InvalidGrantException extends InvalidArgumentException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/GrantFactory.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant;\n\nuse League\\OAuth2\\Client\\Grant\\Exception\\InvalidGrantException;\n\n/**\n * Represents a factory used when retrieving an authorization grant type.\n */\nclass GrantFactory\n{\n    /**\n     * @var array\n     */\n    protected $registry = [];\n\n    /**\n     * Defines a grant singleton in the registry.\n     *\n     * @param  string $name\n     * @param  AbstractGrant $grant\n     * @return self\n     */\n    public function setGrant($name, AbstractGrant $grant)\n    {\n        $this->registry[$name] = $grant;\n\n        return $this;\n    }\n\n    /**\n     * Returns a grant singleton by name.\n     *\n     * If the grant has not be registered, a default grant will be loaded.\n     *\n     * @param  string $name\n     * @return AbstractGrant\n     */\n    public function getGrant($name)\n    {\n        if (empty($this->registry[$name])) {\n            $this->registerDefaultGrant($name);\n        }\n\n        return $this->registry[$name];\n    }\n\n    /**\n     * Registers a default grant singleton by name.\n     *\n     * @param  string $name\n     * @return self\n     */\n    protected function registerDefaultGrant($name)\n    {\n        // PascalCase the grant. E.g: 'authorization_code' becomes 'AuthorizationCode'\n        $class = str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $name)));\n        $class = 'League\\\\OAuth2\\\\Client\\\\Grant\\\\' . $class;\n\n        $this->checkGrant($class);\n\n        return $this->setGrant($name, new $class);\n    }\n\n    /**\n     * Determines if a variable is a valid grant.\n     *\n     * @param  mixed $class\n     * @return boolean\n     */\n    public function isGrant($class)\n    {\n        return is_subclass_of($class, AbstractGrant::class);\n    }\n\n    /**\n     * Checks if a variable is a valid grant.\n     *\n     * @throws InvalidGrantException\n     * @param  mixed $class\n     * @return void\n     */\n    public function checkGrant($class)\n    {\n        if (!$this->isGrant($class)) {\n            throw new InvalidGrantException(sprintf(\n                'Grant \"%s\" must extend AbstractGrant',\n                is_object($class) ? get_class($class) : $class\n            ));\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/Password.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant;\n\n/**\n * Represents a resource owner password credentials grant.\n *\n * @link http://tools.ietf.org/html/rfc6749#section-1.3.3 Resource Owner Password Credentials (RFC 6749, §1.3.3)\n */\nclass Password extends AbstractGrant\n{\n    /**\n     * @inheritdoc\n     */\n    protected function getName()\n    {\n        return 'password';\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getRequiredRequestParameters()\n    {\n        return [\n            'username',\n            'password',\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Grant/RefreshToken.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Grant;\n\n/**\n * Represents a refresh token grant.\n *\n * @link http://tools.ietf.org/html/rfc6749#section-6 Refreshing an Access Token (RFC 6749, §6)\n */\nclass RefreshToken extends AbstractGrant\n{\n    /**\n     * @inheritdoc\n     */\n    protected function getName()\n    {\n        return 'refresh_token';\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getRequiredRequestParameters()\n    {\n        return [\n            'refresh_token',\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/OptionProvider/HttpBasicAuthOptionProvider.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\OptionProvider;\n\nuse InvalidArgumentException;\n\n/**\n * Add http basic auth into access token request options\n * @link https://tools.ietf.org/html/rfc6749#section-2.3.1\n */\nclass HttpBasicAuthOptionProvider extends PostAuthOptionProvider\n{\n    /**\n     * @inheritdoc\n     */\n    public function getAccessTokenOptions($method, array $params)\n    {\n        if (empty($params['client_id']) || empty($params['client_secret'])) {\n            throw new InvalidArgumentException('clientId and clientSecret are required for http basic auth');\n        }\n\n        $encodedCredentials = base64_encode(sprintf('%s:%s', $params['client_id'], $params['client_secret']));\n        unset($params['client_id'], $params['client_secret']);\n\n        $options = parent::getAccessTokenOptions($method, $params);\n        $options['headers']['Authorization'] = 'Basic ' . $encodedCredentials;\n\n        return $options;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/OptionProvider/OptionProviderInterface.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\OptionProvider;\n\n/**\n * Interface for access token options provider\n */\ninterface OptionProviderInterface\n{\n    /**\n     * Builds request options used for requesting an access token.\n     *\n     * @param string $method\n     * @param  array $params\n     * @return array\n     */\n    public function getAccessTokenOptions($method, array $params);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/OptionProvider/PostAuthOptionProvider.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\OptionProvider;\n\nuse League\\OAuth2\\Client\\Provider\\AbstractProvider;\nuse League\\OAuth2\\Client\\Tool\\QueryBuilderTrait;\n\n/**\n * Provide options for access token\n */\nclass PostAuthOptionProvider implements OptionProviderInterface\n{\n    use QueryBuilderTrait;\n\n    /**\n     * @inheritdoc\n     */\n    public function getAccessTokenOptions($method, array $params)\n    {\n        $options = ['headers' => ['content-type' => 'application/x-www-form-urlencoded']];\n\n        if ($method === AbstractProvider::METHOD_POST) {\n            $options['body'] = $this->getAccessTokenBody($params);\n        }\n\n        return $options;\n    }\n\n    /**\n     * Returns the request body for requesting an access token.\n     *\n     * @param  array $params\n     * @return string\n     */\n    protected function getAccessTokenBody(array $params)\n    {\n        return $this->buildQueryString($params);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Provider/AbstractProvider.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Provider;\n\nuse GuzzleHttp\\Client as HttpClient;\nuse GuzzleHttp\\ClientInterface as HttpClientInterface;\nuse GuzzleHttp\\Exception\\BadResponseException;\nuse InvalidArgumentException;\nuse League\\OAuth2\\Client\\Grant\\AbstractGrant;\nuse League\\OAuth2\\Client\\Grant\\GrantFactory;\nuse League\\OAuth2\\Client\\OptionProvider\\OptionProviderInterface;\nuse League\\OAuth2\\Client\\OptionProvider\\PostAuthOptionProvider;\nuse League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException;\nuse League\\OAuth2\\Client\\Token\\AccessToken;\nuse League\\OAuth2\\Client\\Token\\AccessTokenInterface;\nuse League\\OAuth2\\Client\\Tool\\ArrayAccessorTrait;\nuse League\\OAuth2\\Client\\Tool\\GuardedPropertyTrait;\nuse League\\OAuth2\\Client\\Tool\\QueryBuilderTrait;\nuse League\\OAuth2\\Client\\Tool\\RequestFactory;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse UnexpectedValueException;\n\n/**\n * Represents a service provider (authorization server).\n *\n * @link http://tools.ietf.org/html/rfc6749#section-1.1 Roles (RFC 6749, §1.1)\n */\nabstract class AbstractProvider\n{\n    use ArrayAccessorTrait;\n    use GuardedPropertyTrait;\n    use QueryBuilderTrait;\n\n    /**\n     * @var string|null Key used in a token response to identify the resource owner.\n     */\n    const ACCESS_TOKEN_RESOURCE_OWNER_ID = null;\n\n    /**\n     * @var string HTTP method used to fetch access tokens.\n     */\n    const METHOD_GET = 'GET';\n\n    /**\n     * @var string HTTP method used to fetch access tokens.\n     */\n    const METHOD_POST = 'POST';\n\n    /**\n     * @var string PKCE method used to fetch authorization token.\n     * The PKCE code challenge will be hashed with sha256 (recommended).\n     */\n    const PKCE_METHOD_S256 = 'S256';\n\n    /**\n     * @var string PKCE method used to fetch authorization token.\n     * The PKCE code challenge will be sent as plain text, this is NOT recommended.\n     * Only use `plain` if no other option is possible.\n     */\n    const PKCE_METHOD_PLAIN = 'plain';\n\n    /**\n     * @var string\n     */\n    protected $clientId;\n\n    /**\n     * @var string\n     */\n    protected $clientSecret;\n\n    /**\n     * @var string\n     */\n    protected $redirectUri;\n\n    /**\n     * @var string\n     */\n    protected $state;\n\n    /**\n     * @var string|null\n     */\n    protected $pkceCode = null;\n\n    /**\n     * @var GrantFactory\n     */\n    protected $grantFactory;\n\n    /**\n     * @var RequestFactory\n     */\n    protected $requestFactory;\n\n    /**\n     * @var HttpClientInterface\n     */\n    protected $httpClient;\n\n    /**\n     * @var OptionProviderInterface\n     */\n    protected $optionProvider;\n\n    /**\n     * Constructs an OAuth 2.0 service provider.\n     *\n     * @param array $options An array of options to set on this provider.\n     *     Options include `clientId`, `clientSecret`, `redirectUri`, and `state`.\n     *     Individual providers may introduce more options, as needed.\n     * @param array $collaborators An array of collaborators that may be used to\n     *     override this provider's default behavior. Collaborators include\n     *     `grantFactory`, `requestFactory`, and `httpClient`.\n     *     Individual providers may introduce more collaborators, as needed.\n     */\n    public function __construct(array $options = [], array $collaborators = [])\n    {\n        // We'll let the GuardedPropertyTrait handle mass assignment of incoming\n        // options, skipping any blacklisted properties defined in the provider\n        $this->fillProperties($options);\n\n        if (empty($collaborators['grantFactory'])) {\n            $collaborators['grantFactory'] = new GrantFactory();\n        }\n        $this->setGrantFactory($collaborators['grantFactory']);\n\n        if (empty($collaborators['requestFactory'])) {\n            $collaborators['requestFactory'] = new RequestFactory();\n        }\n        $this->setRequestFactory($collaborators['requestFactory']);\n\n        if (empty($collaborators['httpClient'])) {\n            $client_options = $this->getAllowedClientOptions($options);\n\n            $collaborators['httpClient'] = new HttpClient(\n                array_intersect_key($options, array_flip($client_options))\n            );\n        }\n        $this->setHttpClient($collaborators['httpClient']);\n\n        if (empty($collaborators['optionProvider'])) {\n            $collaborators['optionProvider'] = new PostAuthOptionProvider();\n        }\n        $this->setOptionProvider($collaborators['optionProvider']);\n    }\n\n    /**\n     * Returns the list of options that can be passed to the HttpClient\n     *\n     * @param array $options An array of options to set on this provider.\n     *     Options include `clientId`, `clientSecret`, `redirectUri`, and `state`.\n     *     Individual providers may introduce more options, as needed.\n     * @return array The options to pass to the HttpClient constructor\n     */\n    protected function getAllowedClientOptions(array $options)\n    {\n        $client_options = ['timeout', 'proxy'];\n\n        // Only allow turning off ssl verification if it's for a proxy\n        if (!empty($options['proxy'])) {\n            $client_options[] = 'verify';\n        }\n\n        return $client_options;\n    }\n\n    /**\n     * Sets the grant factory instance.\n     *\n     * @param  GrantFactory $factory\n     * @return self\n     */\n    public function setGrantFactory(GrantFactory $factory)\n    {\n        $this->grantFactory = $factory;\n\n        return $this;\n    }\n\n    /**\n     * Returns the current grant factory instance.\n     *\n     * @return GrantFactory\n     */\n    public function getGrantFactory()\n    {\n        return $this->grantFactory;\n    }\n\n    /**\n     * Sets the request factory instance.\n     *\n     * @param  RequestFactory $factory\n     * @return self\n     */\n    public function setRequestFactory(RequestFactory $factory)\n    {\n        $this->requestFactory = $factory;\n\n        return $this;\n    }\n\n    /**\n     * Returns the request factory instance.\n     *\n     * @return RequestFactory\n     */\n    public function getRequestFactory()\n    {\n        return $this->requestFactory;\n    }\n\n    /**\n     * Sets the HTTP client instance.\n     *\n     * @param  HttpClientInterface $client\n     * @return self\n     */\n    public function setHttpClient(HttpClientInterface $client)\n    {\n        $this->httpClient = $client;\n\n        return $this;\n    }\n\n    /**\n     * Returns the HTTP client instance.\n     *\n     * @return HttpClientInterface\n     */\n    public function getHttpClient()\n    {\n        return $this->httpClient;\n    }\n\n    /**\n     * Sets the option provider instance.\n     *\n     * @param  OptionProviderInterface $provider\n     * @return self\n     */\n    public function setOptionProvider(OptionProviderInterface $provider)\n    {\n        $this->optionProvider = $provider;\n\n        return $this;\n    }\n\n    /**\n     * Returns the option provider instance.\n     *\n     * @return OptionProviderInterface\n     */\n    public function getOptionProvider()\n    {\n        return $this->optionProvider;\n    }\n\n    /**\n     * Returns the current value of the state parameter.\n     *\n     * This can be accessed by the redirect handler during authorization.\n     *\n     * @return string\n     */\n    public function getState()\n    {\n        return $this->state;\n    }\n\n    /**\n     * Set the value of the pkceCode parameter.\n     *\n     * When using PKCE this should be set before requesting an access token.\n     *\n     * @param string $pkceCode\n     * @return self\n     */\n    public function setPkceCode($pkceCode)\n    {\n        $this->pkceCode = $pkceCode;\n        return $this;\n    }\n\n    /**\n     * Returns the current value of the pkceCode parameter.\n     *\n     * This can be accessed by the redirect handler during authorization.\n     *\n     * @return string|null\n     */\n    public function getPkceCode()\n    {\n        return $this->pkceCode;\n    }\n\n    /**\n     * Returns the base URL for authorizing a client.\n     *\n     * Eg. https://oauth.service.com/authorize\n     *\n     * @return string\n     */\n    abstract public function getBaseAuthorizationUrl();\n\n    /**\n     * Returns the base URL for requesting an access token.\n     *\n     * Eg. https://oauth.service.com/token\n     *\n     * @param array $params\n     * @return string\n     */\n    abstract public function getBaseAccessTokenUrl(array $params);\n\n    /**\n     * Returns the URL for requesting the resource owner's details.\n     *\n     * @param AccessToken $token\n     * @return string\n     */\n    abstract public function getResourceOwnerDetailsUrl(AccessToken $token);\n\n    /**\n     * Returns a new random string to use as the state parameter in an\n     * authorization flow.\n     *\n     * @param  int $length Length of the random string to be generated.\n     * @return string\n     */\n    protected function getRandomState($length = 32)\n    {\n        // Converting bytes to hex will always double length. Hence, we can reduce\n        // the amount of bytes by half to produce the correct length.\n        return bin2hex(random_bytes($length / 2));\n    }\n\n    /**\n     * Returns a new random string to use as PKCE code_verifier and\n     * hashed as code_challenge parameters in an authorization flow.\n     * Must be between 43 and 128 characters long.\n     *\n     * @param  int $length Length of the random string to be generated.\n     * @return string\n     */\n    protected function getRandomPkceCode($length = 64)\n    {\n        return substr(\n            strtr(\n                base64_encode(random_bytes($length)),\n                '+/',\n                '-_'\n            ),\n            0,\n            $length\n        );\n    }\n\n    /**\n     * Returns the default scopes used by this provider.\n     *\n     * This should only be the scopes that are required to request the details\n     * of the resource owner, rather than all the available scopes.\n     *\n     * @return array\n     */\n    abstract protected function getDefaultScopes();\n\n    /**\n     * Returns the string that should be used to separate scopes when building\n     * the URL for requesting an access token.\n     *\n     * @return string Scope separator, defaults to ','\n     */\n    protected function getScopeSeparator()\n    {\n        return ',';\n    }\n\n    /**\n     * @return string|null\n     */\n    protected function getPkceMethod()\n    {\n        return null;\n    }\n\n    /**\n     * Returns authorization parameters based on provided options.\n     *\n     * @param  array $options\n     * @return array Authorization parameters\n     */\n    protected function getAuthorizationParameters(array $options)\n    {\n        if (empty($options['state'])) {\n            $options['state'] = $this->getRandomState();\n        }\n\n        if (empty($options['scope'])) {\n            $options['scope'] = $this->getDefaultScopes();\n        }\n\n        $options += [\n            'response_type'   => 'code',\n            'approval_prompt' => 'auto'\n        ];\n\n        if (is_array($options['scope'])) {\n            $separator = $this->getScopeSeparator();\n            $options['scope'] = implode($separator, $options['scope']);\n        }\n\n        // Store the state as it may need to be accessed later on.\n        $this->state = $options['state'];\n\n        $pkceMethod = $this->getPkceMethod();\n        if (!empty($pkceMethod)) {\n            $this->pkceCode = $this->getRandomPkceCode();\n            if ($pkceMethod === static::PKCE_METHOD_S256) {\n                $options['code_challenge'] = trim(\n                    strtr(\n                        base64_encode(hash('sha256', $this->pkceCode, true)),\n                        '+/',\n                        '-_'\n                    ),\n                    '='\n                );\n            } elseif ($pkceMethod === static::PKCE_METHOD_PLAIN) {\n                $options['code_challenge'] = $this->pkceCode;\n            } else {\n                throw new InvalidArgumentException('Unknown PKCE method \"' . $pkceMethod . '\".');\n            }\n            $options['code_challenge_method'] = $pkceMethod;\n        }\n\n        // Business code layer might set a different redirect_uri parameter\n        // depending on the context, leave it as-is\n        if (!isset($options['redirect_uri'])) {\n            $options['redirect_uri'] = $this->redirectUri;\n        }\n\n        $options['client_id'] = $this->clientId;\n\n        return $options;\n    }\n\n    /**\n     * Builds the authorization URL's query string.\n     *\n     * @param  array $params Query parameters\n     * @return string Query string\n     */\n    protected function getAuthorizationQuery(array $params)\n    {\n        return $this->buildQueryString($params);\n    }\n\n    /**\n     * Builds the authorization URL.\n     *\n     * @param  array $options\n     * @return string Authorization URL\n     */\n    public function getAuthorizationUrl(array $options = [])\n    {\n        $base   = $this->getBaseAuthorizationUrl();\n        $params = $this->getAuthorizationParameters($options);\n        $query  = $this->getAuthorizationQuery($params);\n\n        return $this->appendQuery($base, $query);\n    }\n\n    /**\n     * Redirects the client for authorization.\n     *\n     * @param  array $options\n     * @param  callable|null $redirectHandler\n     * @return mixed\n     */\n    public function authorize(\n        array $options = [],\n        callable $redirectHandler = null\n    ) {\n        $url = $this->getAuthorizationUrl($options);\n        if ($redirectHandler) {\n            return $redirectHandler($url, $this);\n        }\n\n        // @codeCoverageIgnoreStart\n        header('Location: ' . $url);\n        exit;\n        // @codeCoverageIgnoreEnd\n    }\n\n    /**\n     * Appends a query string to a URL.\n     *\n     * @param  string $url The URL to append the query to\n     * @param  string $query The HTTP query string\n     * @return string The resulting URL\n     */\n    protected function appendQuery($url, $query)\n    {\n        $query = trim($query, '?&');\n\n        if ($query) {\n            $glue = strstr($url, '?') === false ? '?' : '&';\n            return $url . $glue . $query;\n        }\n\n        return $url;\n    }\n\n    /**\n     * Returns the method to use when requesting an access token.\n     *\n     * @return string HTTP method\n     */\n    protected function getAccessTokenMethod()\n    {\n        return self::METHOD_POST;\n    }\n\n    /**\n     * Returns the key used in the access token response to identify the resource owner.\n     *\n     * @return string|null Resource owner identifier key\n     */\n    protected function getAccessTokenResourceOwnerId()\n    {\n        return static::ACCESS_TOKEN_RESOURCE_OWNER_ID;\n    }\n\n    /**\n     * Builds the access token URL's query string.\n     *\n     * @param  array $params Query parameters\n     * @return string Query string\n     */\n    protected function getAccessTokenQuery(array $params)\n    {\n        return $this->buildQueryString($params);\n    }\n\n    /**\n     * Checks that a provided grant is valid, or attempts to produce one if the\n     * provided grant is a string.\n     *\n     * @param  AbstractGrant|string $grant\n     * @return AbstractGrant\n     */\n    protected function verifyGrant($grant)\n    {\n        if (is_string($grant)) {\n            return $this->grantFactory->getGrant($grant);\n        }\n\n        $this->grantFactory->checkGrant($grant);\n        return $grant;\n    }\n\n    /**\n     * Returns the full URL to use when requesting an access token.\n     *\n     * @param array $params Query parameters\n     * @return string\n     */\n    protected function getAccessTokenUrl(array $params)\n    {\n        $url = $this->getBaseAccessTokenUrl($params);\n\n        if ($this->getAccessTokenMethod() === self::METHOD_GET) {\n            $query = $this->getAccessTokenQuery($params);\n            return $this->appendQuery($url, $query);\n        }\n\n        return $url;\n    }\n\n    /**\n     * Returns a prepared request for requesting an access token.\n     *\n     * @param array $params Query string parameters\n     * @return RequestInterface\n     */\n    protected function getAccessTokenRequest(array $params)\n    {\n        $method  = $this->getAccessTokenMethod();\n        $url     = $this->getAccessTokenUrl($params);\n        $options = $this->optionProvider->getAccessTokenOptions($this->getAccessTokenMethod(), $params);\n\n        return $this->getRequest($method, $url, $options);\n    }\n\n    /**\n     * Requests an access token using a specified grant and option set.\n     *\n     * @param  mixed                $grant\n     * @param  array<string, mixed> $options\n     * @throws IdentityProviderException\n     * @return AccessTokenInterface\n     */\n    public function getAccessToken($grant, array $options = [])\n    {\n        $grant = $this->verifyGrant($grant);\n\n        $params = [\n            'client_id'     => $this->clientId,\n            'client_secret' => $this->clientSecret,\n            'redirect_uri'  => $this->redirectUri,\n        ];\n\n        if (!empty($this->pkceCode)) {\n            $params['code_verifier'] = $this->pkceCode;\n        }\n\n        $params   = $grant->prepareRequestParameters($params, $options);\n        $request  = $this->getAccessTokenRequest($params);\n        $response = $this->getParsedResponse($request);\n        if (false === is_array($response)) {\n            throw new UnexpectedValueException(\n                'Invalid response received from Authorization Server. Expected JSON.'\n            );\n        }\n        $prepared = $this->prepareAccessTokenResponse($response);\n        $token    = $this->createAccessToken($prepared, $grant);\n\n        return $token;\n    }\n\n    /**\n     * Returns a PSR-7 request instance that is not authenticated.\n     *\n     * @param  string $method\n     * @param  string $url\n     * @param  array $options\n     * @return RequestInterface\n     */\n    public function getRequest($method, $url, array $options = [])\n    {\n        return $this->createRequest($method, $url, null, $options);\n    }\n\n    /**\n     * Returns an authenticated PSR-7 request instance.\n     *\n     * @param  string $method\n     * @param  string $url\n     * @param  AccessTokenInterface|string|null $token\n     * @param  array $options Any of \"headers\", \"body\", and \"protocolVersion\".\n     * @return RequestInterface\n     */\n    public function getAuthenticatedRequest($method, $url, $token, array $options = [])\n    {\n        return $this->createRequest($method, $url, $token, $options);\n    }\n\n    /**\n     * Creates a PSR-7 request instance.\n     *\n     * @param  string $method\n     * @param  string $url\n     * @param  AccessTokenInterface|string|null $token\n     * @param  array $options\n     * @return RequestInterface\n     */\n    protected function createRequest($method, $url, $token, array $options)\n    {\n        $defaults = [\n            'headers' => $this->getHeaders($token),\n        ];\n\n        $options = array_merge_recursive($defaults, $options);\n        $factory = $this->getRequestFactory();\n\n        return $factory->getRequestWithOptions($method, $url, $options);\n    }\n\n    /**\n     * Sends a request instance and returns a response instance.\n     *\n     * WARNING: This method does not attempt to catch exceptions caused by HTTP\n     * errors! It is recommended to wrap this method in a try/catch block.\n     *\n     * @param  RequestInterface $request\n     * @return ResponseInterface\n     */\n    public function getResponse(RequestInterface $request)\n    {\n        return $this->getHttpClient()->send($request);\n    }\n\n    /**\n     * Sends a request and returns the parsed response.\n     *\n     * @param  RequestInterface $request\n     * @throws IdentityProviderException\n     * @return mixed\n     */\n    public function getParsedResponse(RequestInterface $request)\n    {\n        try {\n            $response = $this->getResponse($request);\n        } catch (BadResponseException $e) {\n            $response = $e->getResponse();\n        }\n\n        $parsed = $this->parseResponse($response);\n\n        $this->checkResponse($response, $parsed);\n\n        return $parsed;\n    }\n\n    /**\n     * Attempts to parse a JSON response.\n     *\n     * @param  string $content JSON content from response body\n     * @return array Parsed JSON data\n     * @throws UnexpectedValueException if the content could not be parsed\n     */\n    protected function parseJson($content)\n    {\n        $content = json_decode($content, true);\n\n        if (json_last_error() !== JSON_ERROR_NONE) {\n            throw new UnexpectedValueException(sprintf(\n                \"Failed to parse JSON response: %s\",\n                json_last_error_msg()\n            ));\n        }\n\n        return $content;\n    }\n\n    /**\n     * Returns the content type header of a response.\n     *\n     * @param  ResponseInterface $response\n     * @return string Semi-colon separated join of content-type headers.\n     */\n    protected function getContentType(ResponseInterface $response)\n    {\n        return join(';', (array) $response->getHeader('content-type'));\n    }\n\n    /**\n     * Parses the response according to its content-type header.\n     *\n     * @throws UnexpectedValueException\n     * @param  ResponseInterface $response\n     * @return array\n     */\n    protected function parseResponse(ResponseInterface $response)\n    {\n        $content = (string) $response->getBody();\n        $type = $this->getContentType($response);\n\n        if (strpos($type, 'urlencoded') !== false) {\n            parse_str($content, $parsed);\n            return $parsed;\n        }\n\n        // Attempt to parse the string as JSON regardless of content type,\n        // since some providers use non-standard content types. Only throw an\n        // exception if the JSON could not be parsed when it was expected to.\n        try {\n            return $this->parseJson($content);\n        } catch (UnexpectedValueException $e) {\n            if (strpos($type, 'json') !== false) {\n                throw $e;\n            }\n\n            if ($response->getStatusCode() == 500) {\n                throw new UnexpectedValueException(\n                    'An OAuth server error was encountered that did not contain a JSON body',\n                    0,\n                    $e\n                );\n            }\n\n            return $content;\n        }\n    }\n\n    /**\n     * Checks a provider response for errors.\n     *\n     * @throws IdentityProviderException\n     * @param  ResponseInterface $response\n     * @param  array|string $data Parsed response data\n     * @return void\n     */\n    abstract protected function checkResponse(ResponseInterface $response, $data);\n\n    /**\n     * Prepares an parsed access token response for a grant.\n     *\n     * Custom mapping of expiration, etc should be done here. Always call the\n     * parent method when overloading this method.\n     *\n     * @param  mixed $result\n     * @return array\n     */\n    protected function prepareAccessTokenResponse(array $result)\n    {\n        if ($this->getAccessTokenResourceOwnerId() !== null) {\n            $result['resource_owner_id'] = $this->getValueByKey(\n                $result,\n                $this->getAccessTokenResourceOwnerId()\n            );\n        }\n        return $result;\n    }\n\n    /**\n     * Creates an access token from a response.\n     *\n     * The grant that was used to fetch the response can be used to provide\n     * additional context.\n     *\n     * @param  array $response\n     * @param  AbstractGrant $grant\n     * @return AccessTokenInterface\n     */\n    protected function createAccessToken(array $response, AbstractGrant $grant)\n    {\n        return new AccessToken($response);\n    }\n\n    /**\n     * Generates a resource owner object from a successful resource owner\n     * details request.\n     *\n     * @param  array $response\n     * @param  AccessToken $token\n     * @return ResourceOwnerInterface\n     */\n    abstract protected function createResourceOwner(array $response, AccessToken $token);\n\n    /**\n     * Requests and returns the resource owner of given access token.\n     *\n     * @param  AccessToken $token\n     * @return ResourceOwnerInterface\n     */\n    public function getResourceOwner(AccessToken $token)\n    {\n        $response = $this->fetchResourceOwnerDetails($token);\n\n        return $this->createResourceOwner($response, $token);\n    }\n\n    /**\n     * Requests resource owner details.\n     *\n     * @param  AccessToken $token\n     * @return mixed\n     */\n    protected function fetchResourceOwnerDetails(AccessToken $token)\n    {\n        $url = $this->getResourceOwnerDetailsUrl($token);\n\n        $request = $this->getAuthenticatedRequest(self::METHOD_GET, $url, $token);\n\n        $response = $this->getParsedResponse($request);\n\n        if (false === is_array($response)) {\n            throw new UnexpectedValueException(\n                'Invalid response received from Authorization Server. Expected JSON.'\n            );\n        }\n\n        return $response;\n    }\n\n    /**\n     * Returns the default headers used by this provider.\n     *\n     * Typically this is used to set 'Accept' or 'Content-Type' headers.\n     *\n     * @return array\n     */\n    protected function getDefaultHeaders()\n    {\n        return [];\n    }\n\n    /**\n     * Returns the authorization headers used by this provider.\n     *\n     * Typically this is \"Bearer\" or \"MAC\". For more information see:\n     * http://tools.ietf.org/html/rfc6749#section-7.1\n     *\n     * No default is provided, providers must overload this method to activate\n     * authorization headers.\n     *\n     * @param  mixed|null $token Either a string or an access token instance\n     * @return array\n     */\n    protected function getAuthorizationHeaders($token = null)\n    {\n        return [];\n    }\n\n    /**\n     * Returns all headers used by this provider for a request.\n     *\n     * The request will be authenticated if an access token is provided.\n     *\n     * @param  mixed|null $token object or string\n     * @return array\n     */\n    public function getHeaders($token = null)\n    {\n        if ($token) {\n            return array_merge(\n                $this->getDefaultHeaders(),\n                $this->getAuthorizationHeaders($token)\n            );\n        }\n\n        return $this->getDefaultHeaders();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Provider/Exception/IdentityProviderException.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Provider\\Exception;\n\n/**\n * Exception thrown if the provider response contains errors.\n */\nclass IdentityProviderException extends \\Exception\n{\n    /**\n     * @var mixed\n     */\n    protected $response;\n\n    /**\n     * @param string $message\n     * @param int $code\n     * @param mixed $response The response body\n     */\n    public function __construct($message, $code, $response)\n    {\n        $this->response = $response;\n\n        parent::__construct($message, $code);\n    }\n\n    /**\n     * Returns the exception's response body.\n     *\n     * @return mixed\n     */\n    public function getResponseBody()\n    {\n        return $this->response;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Provider/GenericProvider.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Provider;\n\nuse InvalidArgumentException;\nuse League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException;\nuse League\\OAuth2\\Client\\Token\\AccessToken;\nuse League\\OAuth2\\Client\\Tool\\BearerAuthorizationTrait;\nuse Psr\\Http\\Message\\ResponseInterface;\n\n/**\n * Represents a generic service provider that may be used to interact with any\n * OAuth 2.0 service provider, using Bearer token authentication.\n */\nclass GenericProvider extends AbstractProvider\n{\n    use BearerAuthorizationTrait;\n\n    /**\n     * @var string\n     */\n    private $urlAuthorize;\n\n    /**\n     * @var string\n     */\n    private $urlAccessToken;\n\n    /**\n     * @var string\n     */\n    private $urlResourceOwnerDetails;\n\n    /**\n     * @var string\n     */\n    private $accessTokenMethod;\n\n    /**\n     * @var string\n     */\n    private $accessTokenResourceOwnerId;\n\n    /**\n     * @var array|null\n     */\n    private $scopes = null;\n\n    /**\n     * @var string\n     */\n    private $scopeSeparator;\n\n    /**\n     * @var string\n     */\n    private $responseError = 'error';\n\n    /**\n     * @var string\n     */\n    private $responseCode;\n\n    /**\n     * @var string\n     */\n    private $responseResourceOwnerId = 'id';\n\n    /**\n     * @var string|null\n     */\n    private $pkceMethod = null;\n\n    /**\n     * @param array $options\n     * @param array $collaborators\n     */\n    public function __construct(array $options = [], array $collaborators = [])\n    {\n        $this->assertRequiredOptions($options);\n\n        $possible   = $this->getConfigurableOptions();\n        $configured = array_intersect_key($options, array_flip($possible));\n\n        foreach ($configured as $key => $value) {\n            $this->$key = $value;\n        }\n\n        // Remove all options that are only used locally\n        $options = array_diff_key($options, $configured);\n\n        parent::__construct($options, $collaborators);\n    }\n\n    /**\n     * Returns all options that can be configured.\n     *\n     * @return array\n     */\n    protected function getConfigurableOptions()\n    {\n        return array_merge($this->getRequiredOptions(), [\n            'accessTokenMethod',\n            'accessTokenResourceOwnerId',\n            'scopeSeparator',\n            'responseError',\n            'responseCode',\n            'responseResourceOwnerId',\n            'scopes',\n            'pkceMethod',\n        ]);\n    }\n\n    /**\n     * Returns all options that are required.\n     *\n     * @return array\n     */\n    protected function getRequiredOptions()\n    {\n        return [\n            'urlAuthorize',\n            'urlAccessToken',\n            'urlResourceOwnerDetails',\n        ];\n    }\n\n    /**\n     * Verifies that all required options have been passed.\n     *\n     * @param  array $options\n     * @return void\n     * @throws InvalidArgumentException\n     */\n    private function assertRequiredOptions(array $options)\n    {\n        $missing = array_diff_key(array_flip($this->getRequiredOptions()), $options);\n\n        if (!empty($missing)) {\n            throw new InvalidArgumentException(\n                'Required options not defined: ' . implode(', ', array_keys($missing))\n            );\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getBaseAuthorizationUrl()\n    {\n        return $this->urlAuthorize;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getBaseAccessTokenUrl(array $params)\n    {\n        return $this->urlAccessToken;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getResourceOwnerDetailsUrl(AccessToken $token)\n    {\n        return $this->urlResourceOwnerDetails;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getDefaultScopes()\n    {\n        return $this->scopes;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getAccessTokenMethod()\n    {\n        return $this->accessTokenMethod ?: parent::getAccessTokenMethod();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getAccessTokenResourceOwnerId()\n    {\n        return $this->accessTokenResourceOwnerId ?: parent::getAccessTokenResourceOwnerId();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getScopeSeparator()\n    {\n        return $this->scopeSeparator ?: parent::getScopeSeparator();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function getPkceMethod()\n    {\n        return $this->pkceMethod ?: parent::getPkceMethod();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function checkResponse(ResponseInterface $response, $data)\n    {\n        if (!empty($data[$this->responseError])) {\n            $error = $data[$this->responseError];\n            if (!is_string($error)) {\n                $error = var_export($error, true);\n            }\n            $code  = $this->responseCode && !empty($data[$this->responseCode])? $data[$this->responseCode] : 0;\n            if (!is_int($code)) {\n                $code = intval($code);\n            }\n            throw new IdentityProviderException($error, $code, $data);\n        }\n    }\n\n    /**\n     * @inheritdoc\n     */\n    protected function createResourceOwner(array $response, AccessToken $token)\n    {\n        return new GenericResourceOwner($response, $this->responseResourceOwnerId);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Provider/GenericResourceOwner.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Provider;\n\n/**\n * Represents a generic resource owner for use with the GenericProvider.\n */\nclass GenericResourceOwner implements ResourceOwnerInterface\n{\n    /**\n     * @var array\n     */\n    protected $response;\n\n    /**\n     * @var string\n     */\n    protected $resourceOwnerId;\n\n    /**\n     * @param array $response\n     * @param string $resourceOwnerId\n     */\n    public function __construct(array $response, $resourceOwnerId)\n    {\n        $this->response = $response;\n        $this->resourceOwnerId = $resourceOwnerId;\n    }\n\n    /**\n     * Returns the identifier of the authorized resource owner.\n     *\n     * @return mixed\n     */\n    public function getId()\n    {\n        return $this->response[$this->resourceOwnerId];\n    }\n\n    /**\n     * Returns the raw resource owner response.\n     *\n     * @return array\n     */\n    public function toArray()\n    {\n        return $this->response;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Provider/ResourceOwnerInterface.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Provider;\n\n/**\n * Classes implementing `ResourceOwnerInterface` may be used to represent\n * the resource owner authenticated with a service provider.\n */\ninterface ResourceOwnerInterface\n{\n    /**\n     * Returns the identifier of the authorized resource owner.\n     *\n     * @return mixed\n     */\n    public function getId();\n\n    /**\n     * Return all of the owner details available as an array.\n     *\n     * @return array\n     */\n    public function toArray();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Token/AccessToken.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Token;\n\nuse InvalidArgumentException;\nuse RuntimeException;\n\n/**\n * Represents an access token.\n *\n * @link http://tools.ietf.org/html/rfc6749#section-1.4 Access Token (RFC 6749, §1.4)\n */\nclass AccessToken implements AccessTokenInterface, ResourceOwnerAccessTokenInterface\n{\n    /**\n     * @var string\n     */\n    protected $accessToken;\n\n    /**\n     * @var int\n     */\n    protected $expires;\n\n    /**\n     * @var string\n     */\n    protected $refreshToken;\n\n    /**\n     * @var string\n     */\n    protected $resourceOwnerId;\n\n    /**\n     * @var array\n     */\n    protected $values = [];\n\n    /**\n     * @var int\n     */\n    private static $timeNow;\n\n    /**\n     * Set the time now. This should only be used for testing purposes.\n     *\n     * @param int $timeNow the time in seconds since epoch\n     * @return void\n     */\n    public static function setTimeNow($timeNow)\n    {\n        self::$timeNow = $timeNow;\n    }\n\n    /**\n     * Reset the time now if it was set for test purposes.\n     *\n     * @return void\n     */\n    public static function resetTimeNow()\n    {\n        self::$timeNow = null;\n    }\n\n    /**\n     * @return int\n     */\n    public function getTimeNow()\n    {\n        return self::$timeNow ? self::$timeNow : time();\n    }\n\n    /**\n     * Constructs an access token.\n     *\n     * @param array $options An array of options returned by the service provider\n     *     in the access token request. The `access_token` option is required.\n     * @throws InvalidArgumentException if `access_token` is not provided in `$options`.\n     */\n    public function __construct(array $options = [])\n    {\n        if (empty($options['access_token'])) {\n            throw new InvalidArgumentException('Required option not passed: \"access_token\"');\n        }\n\n        $this->accessToken = $options['access_token'];\n\n        if (!empty($options['resource_owner_id'])) {\n            $this->resourceOwnerId = $options['resource_owner_id'];\n        }\n\n        if (!empty($options['refresh_token'])) {\n            $this->refreshToken = $options['refresh_token'];\n        }\n\n        // We need to know when the token expires. Show preference to\n        // 'expires_in' since it is defined in RFC6749 Section 5.1.\n        // Defer to 'expires' if it is provided instead.\n        if (isset($options['expires_in'])) {\n            if (!is_numeric($options['expires_in'])) {\n                throw new \\InvalidArgumentException('expires_in value must be an integer');\n            }\n\n            $this->expires = $options['expires_in'] != 0 ? $this->getTimeNow() + $options['expires_in'] : 0;\n        } elseif (!empty($options['expires'])) {\n            // Some providers supply the seconds until expiration rather than\n            // the exact timestamp. Take a best guess at which we received.\n            $expires = $options['expires'];\n\n            if (!$this->isExpirationTimestamp($expires)) {\n                $expires += $this->getTimeNow();\n            }\n\n            $this->expires = $expires;\n        }\n\n        // Capture any additional values that might exist in the token but are\n        // not part of the standard response. Vendors will sometimes pass\n        // additional user data this way.\n        $this->values = array_diff_key($options, array_flip([\n            'access_token',\n            'resource_owner_id',\n            'refresh_token',\n            'expires_in',\n            'expires',\n        ]));\n    }\n\n    /**\n     * Check if a value is an expiration timestamp or second value.\n     *\n     * @param integer $value\n     * @return bool\n     */\n    protected function isExpirationTimestamp($value)\n    {\n        // If the given value is larger than the original OAuth 2 draft date,\n        // assume that it is meant to be a (possible expired) timestamp.\n        $oauth2InceptionDate = 1349067600; // 2012-10-01\n        return ($value > $oauth2InceptionDate);\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getToken()\n    {\n        return $this->accessToken;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getRefreshToken()\n    {\n        return $this->refreshToken;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getExpires()\n    {\n        return $this->expires;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getResourceOwnerId()\n    {\n        return $this->resourceOwnerId;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function hasExpired()\n    {\n        $expires = $this->getExpires();\n\n        if (empty($expires)) {\n            throw new RuntimeException('\"expires\" is not set on the token');\n        }\n\n        return $expires < time();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function getValues()\n    {\n        return $this->values;\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function __toString()\n    {\n        return (string) $this->getToken();\n    }\n\n    /**\n     * @inheritdoc\n     */\n    public function jsonSerialize()\n    {\n        $parameters = $this->values;\n\n        if ($this->accessToken) {\n            $parameters['access_token'] = $this->accessToken;\n        }\n\n        if ($this->refreshToken) {\n            $parameters['refresh_token'] = $this->refreshToken;\n        }\n\n        if ($this->expires) {\n            $parameters['expires'] = $this->expires;\n        }\n\n        if ($this->resourceOwnerId) {\n            $parameters['resource_owner_id'] = $this->resourceOwnerId;\n        }\n\n        return $parameters;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Token/AccessTokenInterface.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Token;\n\nuse JsonSerializable;\nuse ReturnTypeWillChange;\nuse RuntimeException;\n\ninterface AccessTokenInterface extends JsonSerializable\n{\n    /**\n     * Returns the access token string of this instance.\n     *\n     * @return string\n     */\n    public function getToken();\n\n    /**\n     * Returns the refresh token, if defined.\n     *\n     * @return string|null\n     */\n    public function getRefreshToken();\n\n    /**\n     * Returns the expiration timestamp in seconds, if defined.\n     *\n     * @return integer|null\n     */\n    public function getExpires();\n\n    /**\n     * Checks if this token has expired.\n     *\n     * @return boolean true if the token has expired, false otherwise.\n     * @throws RuntimeException if 'expires' is not set on the token.\n     */\n    public function hasExpired();\n\n    /**\n     * Returns additional vendor values stored in the token.\n     *\n     * @return array\n     */\n    public function getValues();\n\n    /**\n     * Returns a string representation of the access token\n     *\n     * @return string\n     */\n    public function __toString();\n\n    /**\n     * Returns an array of parameters to serialize when this is serialized with\n     * json_encode().\n     *\n     * @return array\n     */\n    #[ReturnTypeWillChange]\n    public function jsonSerialize();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Token/ResourceOwnerAccessTokenInterface.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Token;\n\ninterface ResourceOwnerAccessTokenInterface extends AccessTokenInterface\n{\n    /**\n     * Returns the resource owner identifier, if defined.\n     *\n     * @return string|null\n     */\n    public function getResourceOwnerId();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/ArrayAccessorTrait.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\n/**\n * Provides generic array navigation tools.\n */\ntrait ArrayAccessorTrait\n{\n    /**\n     * Returns a value by key using dot notation.\n     *\n     * @param  array      $data\n     * @param  string     $key\n     * @param  mixed|null $default\n     * @return mixed\n     */\n    private function getValueByKey(array $data, $key, $default = null)\n    {\n        if (!is_string($key) || empty($key) || !count($data)) {\n            return $default;\n        }\n\n        if (strpos($key, '.') !== false) {\n            $keys = explode('.', $key);\n\n            foreach ($keys as $innerKey) {\n                if (!is_array($data) || !array_key_exists($innerKey, $data)) {\n                    return $default;\n                }\n\n                $data = $data[$innerKey];\n            }\n\n            return $data;\n        }\n\n        return array_key_exists($key, $data) ? $data[$key] : $default;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/BearerAuthorizationTrait.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\nuse League\\OAuth2\\Client\\Token\\AccessTokenInterface;\n\n/**\n * Enables `Bearer` header authorization for providers.\n *\n * @link http://tools.ietf.org/html/rfc6750 Bearer Token Usage (RFC 6750)\n */\ntrait BearerAuthorizationTrait\n{\n    /**\n     * Returns authorization headers for the 'bearer' grant.\n     *\n     * @param  AccessTokenInterface|string|null $token Either a string or an access token instance\n     * @return array\n     */\n    protected function getAuthorizationHeaders($token = null)\n    {\n        return ['Authorization' => 'Bearer ' . $token];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/GuardedPropertyTrait.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\n/**\n * Provides support for blacklisting explicit properties from the\n * mass assignment behavior.\n */\ntrait GuardedPropertyTrait\n{\n    /**\n     * The properties that aren't mass assignable.\n     *\n     * @var array\n     */\n    protected $guarded = [];\n\n    /**\n     * Attempts to mass assign the given options to explicitly defined properties,\n     * skipping over any properties that are defined in the guarded array.\n     *\n     * @param array $options\n     * @return mixed\n     */\n    protected function fillProperties(array $options = [])\n    {\n        if (isset($options['guarded'])) {\n            unset($options['guarded']);\n        }\n\n        foreach ($options as $option => $value) {\n            if (property_exists($this, $option) && !$this->isGuarded($option)) {\n                $this->{$option} = $value;\n            }\n        }\n    }\n\n    /**\n     * Returns current guarded properties.\n     *\n     * @return array\n     */\n    public function getGuarded()\n    {\n        return $this->guarded;\n    }\n\n    /**\n     * Determines if the given property is guarded.\n     *\n     * @param  string  $property\n     * @return bool\n     */\n    public function isGuarded($property)\n    {\n        return in_array($property, $this->getGuarded());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/MacAuthorizationTrait.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\nuse League\\OAuth2\\Client\\Token\\AccessToken;\nuse League\\OAuth2\\Client\\Token\\AccessTokenInterface;\n\n/**\n * Enables `MAC` header authorization for providers.\n *\n * @link http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-05 Message Authentication Code (MAC) Tokens\n */\ntrait MacAuthorizationTrait\n{\n    /**\n     * Returns the id of this token for MAC generation.\n     *\n     * @param  AccessToken $token\n     * @return string\n     */\n    abstract protected function getTokenId(AccessToken $token);\n\n    /**\n     * Returns the MAC signature for the current request.\n     *\n     * @param  string $id\n     * @param  integer $ts\n     * @param  string $nonce\n     * @return string\n     */\n    abstract protected function getMacSignature($id, $ts, $nonce);\n\n    /**\n     * Returns a new random string to use as the state parameter in an\n     * authorization flow.\n     *\n     * @param  int $length Length of the random string to be generated.\n     * @return string\n     */\n    abstract protected function getRandomState($length = 32);\n\n    /**\n     * Returns the authorization headers for the 'mac' grant.\n     *\n     * @param  AccessTokenInterface|string|null $token Either a string or an access token instance\n     * @return array\n     * @codeCoverageIgnore\n     *\n     * @todo This is currently untested and provided only as an example. If you\n     * complete the implementation, please create a pull request for\n     * https://github.com/thephpleague/oauth2-client\n     */\n    protected function getAuthorizationHeaders($token = null)\n    {\n        if ($token === null) {\n            return [];\n        }\n\n        $ts    = time();\n        $id    = $this->getTokenId($token);\n        $nonce = $this->getRandomState(16);\n        $mac   = $this->getMacSignature($id, $ts, $nonce);\n\n        $parts = [];\n        foreach (compact('id', 'ts', 'nonce', 'mac') as $key => $value) {\n            $parts[] = sprintf('%s=\"%s\"', $key, $value);\n        }\n\n        return ['Authorization' => 'MAC ' . implode(', ', $parts)];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/ProviderRedirectTrait.php",
    "content": "<?php\n\nnamespace League\\OAuth2\\Client\\Tool;\n\nuse GuzzleHttp\\Exception\\BadResponseException;\nuse GuzzleHttp\\Psr7\\Uri;\nuse InvalidArgumentException;\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\ntrait ProviderRedirectTrait\n{\n    /**\n     * Maximum number of times to follow provider initiated redirects\n     *\n     * @var integer\n     */\n    protected $redirectLimit = 2;\n\n    /**\n     * Retrieves a response for a given request and retrieves subsequent\n     * responses, with authorization headers, if a redirect is detected.\n     *\n     * @param  RequestInterface $request\n     * @return ResponseInterface\n     * @throws BadResponseException\n     */\n    protected function followRequestRedirects(RequestInterface $request)\n    {\n        $response = null;\n        $attempts = 0;\n\n        while ($attempts < $this->redirectLimit) {\n            $attempts++;\n            $response = $this->getHttpClient()->send($request, [\n                'allow_redirects' => false\n            ]);\n\n            if ($this->isRedirect($response)) {\n                $redirectUrl = new Uri($response->getHeader('Location')[0]);\n                $request = $request->withUri($redirectUrl);\n            } else {\n                break;\n            }\n        }\n\n        return $response;\n    }\n\n    /**\n     * Returns the HTTP client instance.\n     *\n     * @return GuzzleHttp\\ClientInterface\n     */\n    abstract public function getHttpClient();\n\n    /**\n     * Retrieves current redirect limit.\n     *\n     * @return integer\n     */\n    public function getRedirectLimit()\n    {\n        return $this->redirectLimit;\n    }\n\n    /**\n     * Determines if a given response is a redirect.\n     *\n     * @param  ResponseInterface  $response\n     *\n     * @return boolean\n     */\n    protected function isRedirect(ResponseInterface $response)\n    {\n        $statusCode = $response->getStatusCode();\n\n        return $statusCode > 300 && $statusCode < 400 && $response->hasHeader('Location');\n    }\n\n    /**\n     * Sends a request instance and returns a response instance.\n     *\n     * WARNING: This method does not attempt to catch exceptions caused by HTTP\n     * errors! It is recommended to wrap this method in a try/catch block.\n     *\n     * @param  RequestInterface $request\n     * @return ResponseInterface\n     */\n    public function getResponse(RequestInterface $request)\n    {\n        try {\n            $response = $this->followRequestRedirects($request);\n        } catch (BadResponseException $e) {\n            $response = $e->getResponse();\n        }\n\n        return $response;\n    }\n\n    /**\n     * Updates the redirect limit.\n     *\n     * @param integer $limit\n     * @return League\\OAuth2\\Client\\Provider\\AbstractProvider\n     * @throws InvalidArgumentException\n     */\n    public function setRedirectLimit($limit)\n    {\n        if (!is_int($limit)) {\n            throw new InvalidArgumentException('redirectLimit must be an integer.');\n        }\n\n        if ($limit < 1) {\n            throw new InvalidArgumentException('redirectLimit must be greater than or equal to one.');\n        }\n\n        $this->redirectLimit = $limit;\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/QueryBuilderTrait.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\n/**\n * Provides a standard way to generate query strings.\n */\ntrait QueryBuilderTrait\n{\n    /**\n     * Build a query string from an array.\n     *\n     * @param array $params\n     *\n     * @return string\n     */\n    protected function buildQueryString(array $params)\n    {\n        return http_build_query($params, '', '&', \\PHP_QUERY_RFC3986);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/RequestFactory.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\nuse GuzzleHttp\\Psr7\\Request;\n\n/**\n * Used to produce PSR-7 Request instances.\n *\n * @link https://github.com/guzzle/guzzle/pull/1101\n */\nclass RequestFactory\n{\n    /**\n     * Creates a PSR-7 Request instance.\n     *\n     * @param  null|string $method HTTP method for the request.\n     * @param  null|string $uri URI for the request.\n     * @param  array $headers Headers for the message.\n     * @param  string|resource|StreamInterface $body Message body.\n     * @param  string $version HTTP protocol version.\n     *\n     * @return Request\n     */\n    public function getRequest(\n        $method,\n        $uri,\n        array $headers = [],\n        $body = null,\n        $version = '1.1'\n    ) {\n        return new Request($method, $uri, $headers, $body, $version);\n    }\n\n    /**\n     * Parses simplified options.\n     *\n     * @param array $options Simplified options.\n     *\n     * @return array Extended options for use with getRequest.\n     */\n    protected function parseOptions(array $options)\n    {\n        // Should match default values for getRequest\n        $defaults = [\n            'headers' => [],\n            'body'    => null,\n            'version' => '1.1',\n        ];\n\n        return array_merge($defaults, $options);\n    }\n\n    /**\n     * Creates a request using a simplified array of options.\n     *\n     * @param  null|string $method\n     * @param  null|string $uri\n     * @param  array $options\n     *\n     * @return Request\n     */\n    public function getRequestWithOptions($method, $uri, array $options = [])\n    {\n        $options = $this->parseOptions($options);\n\n        return $this->getRequest(\n            $method,\n            $uri,\n            $options['headers'],\n            $options['body'],\n            $options['version']\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/league/oauth2-client/src/Tool/RequiredParameterTrait.php",
    "content": "<?php\n/**\n * This file is part of the league/oauth2-client library\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n *\n * @copyright Copyright (c) Alex Bilbie <hello@alexbilbie.com>\n * @license http://opensource.org/licenses/MIT MIT\n * @link http://thephpleague.com/oauth2-client/ Documentation\n * @link https://packagist.org/packages/league/oauth2-client Packagist\n * @link https://github.com/thephpleague/oauth2-client GitHub\n */\n\nnamespace League\\OAuth2\\Client\\Tool;\n\nuse BadMethodCallException;\n\n/**\n * Provides functionality to check for required parameters.\n */\ntrait RequiredParameterTrait\n{\n    /**\n     * Checks for a required parameter in a hash.\n     *\n     * @throws BadMethodCallException\n     * @param  string $name\n     * @param  array  $params\n     * @return void\n     */\n    private function checkRequiredParameter($name, array $params)\n    {\n        if (!isset($params[$name])) {\n            throw new BadMethodCallException(sprintf(\n                'Required parameter not passed: \"%s\"',\n                $name\n            ));\n        }\n    }\n\n    /**\n     * Checks for multiple required parameters in a hash.\n     *\n     * @throws InvalidArgumentException\n     * @param  array $names\n     * @param  array $params\n     * @return void\n     */\n    private function checkRequiredParameters(array $names, array $params)\n    {\n        foreach ($names as $name) {\n            $this->checkRequiredParameter($name, $params);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [matthiasmullie] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/CONTRIBUTING.md",
    "content": "# How to contribute\n\n\n## Issues\n\nWhen [filing bugs](https://github.com/matthiasmullie/minify/issues/new),\ntry to be as thorough as possible:\n* What version did you use?\n* What did you try to do? ***Please post the relevant parts of your code.***\n* What went wrong? ***Please include error messages, if any.***\n* What was the expected result?\n\n\n## Pull requests\n\nBug fixes and general improvements to the existing codebase are always welcome.\nNew features are also welcome, but will be judged on an individual basis. If\nyou'd rather not risk wasting your time implementing a new feature only to see\nit turned down, please start the discussion by\n[opening an issue](https://github.com/matthiasmullie/minify/issues/new).\n\nDon't forget to add your changes to the [changelog](CHANGELOG.md).\n\n\n### Testing\n\nPlease include tests for every change or addition to the code.\nTo run the complete test suite:\n\n```sh\nvendor/bin/phpunit\n```\n\nWhen submitting a new pull request, please make sure that that the test suite\npasses (Travis CI will run it & report back on your pull request.)\n\nTo run the tests on Windows, run `tests/convert_symlinks_to_windows_style.sh`\nfrom the command line in order to convert Linux-style test symlinks to\nWindows-style.\n\n\n### Coding standards\n\nAll code must follow [PSR-2](http://www.php-fig.org/psr/psr-2/). Just make sure\nto run php-cs-fixer before submitting the code, it'll take care of the\nformatting for you:\n\n```sh\nvendor/bin/php-cs-fixer fix src\nvendor/bin/php-cs-fixer fix tests\n```\n\nDocument the code thoroughly!\n\n\n## License\n\nNote that minify is MIT-licensed, which basically allows anyone to do\nanything they like with it, without restriction.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/Dockerfile",
    "content": "ARG version=cli\nFROM php:$version\n\nCOPY . /var/www\nWORKDIR /var/www\n\nRUN apt-get update\nRUN apt-get install -y zip unzip libzip-dev git\nRUN docker-php-ext-install zip\nRUN docker-php-ext-install pcntl\nRUN curl -sS https://getcomposer.org/installer | php\nRUN mv composer.phar /usr/local/bin/composer\nRUN composer install\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/LICENSE",
    "content": "Copyright (c) 2012 Matthias Mullie\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifycss",
    "content": "#!/usr/bin/env php\n<?php\nuse MatthiasMullie\\Minify;\n\n// command line utility to minify CSS\nif (file_exists(__DIR__ . '/../../../autoload.php')) {\n    // if composer install\n    require_once __DIR__ . '/../../../autoload.php';\n} else {\n    require_once __DIR__ . '/../src/Minify.php';\n    require_once __DIR__ . '/../src/CSS.php';\n    require_once __DIR__ . '/../src/Exception.php';\n}\n\nerror_reporting(E_ALL);\n// check PHP setup for cli arguments\nif (!isset($_SERVER['argv']) && !isset($argv)) {\n    fwrite(STDERR, 'Please enable the \"register_argc_argv\" directive in your php.ini' . PHP_EOL);\n    exit(1);\n} elseif (!isset($argv)) {\n    $argv = $_SERVER['argv'];\n}\n// check if path to file given\nif (!isset($argv[1])) {\n    fwrite(STDERR, 'Argument expected: path to file' . PHP_EOL);\n    exit(1);\n}\n// check if script run in cli environment\nif ('cli' !== php_sapi_name()) {\n    fwrite(STDERR, $argv[1] . ' must be run in the command line' . PHP_EOL);\n    exit(1);\n}\n// check if source file exists\nif (!file_exists($argv[1])) {\n    fwrite(STDERR, 'Source file \"' . $argv[1] . '\" not found' . PHP_EOL);\n    exit(1);\n}\n\ntry {\n    $minifier = new Minify\\CSS($argv[1]);\n    echo $minifier->minify();\n} catch (Exception $e) {\n    fwrite(STDERR, $e->getMessage(), PHP_EOL);\n    exit(1);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/bin/minifyjs",
    "content": "#!/usr/bin/env php\n<?php\nuse MatthiasMullie\\Minify;\n\n// command line utility to minify JS\nif (file_exists(__DIR__ . '/../../../autoload.php')) {\n    // if composer install\n    require_once __DIR__ . '/../../../autoload.php';\n} else {\n    require_once __DIR__ . '/../src/Minify.php';\n    require_once __DIR__ . '/../src/JS.php';\n    require_once __DIR__ . '/../src/Exception.php';\n}\n\nerror_reporting(E_ALL);\n// check PHP setup for cli arguments\nif (!isset($_SERVER['argv']) && !isset($argv)) {\n    fwrite(STDERR, 'Please enable the \"register_argc_argv\" directive in your php.ini' . PHP_EOL);\n    exit(1);\n} elseif (!isset($argv)) {\n    $argv = $_SERVER['argv'];\n}\n// check if path to file given\nif (!isset($argv[1])) {\n    fwrite(STDERR, 'Argument expected: path to file' . PHP_EOL);\n    exit(1);\n}\n// check if script run in cli environment\nif ('cli' !== php_sapi_name()) {\n    fwrite(STDERR, $argv[1] . ' must be run in the command line' . PHP_EOL);\n    exit(1);\n}\n// check if source file exists\nif (!file_exists($argv[1])) {\n    fwrite(STDERR, 'Source file \"' . $argv[1] . '\" not found' . PHP_EOL);\n    exit(1);\n}\n\ntry {\n    $minifier = new Minify\\JS($argv[1]);\n    echo $minifier->minify();\n} catch (Exception $e) {\n    fwrite(STDERR, $e->getMessage(), PHP_EOL);\n    exit(1);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/composer.json",
    "content": "{\n    \"name\": \"matthiasmullie/minify\",\n    \"type\": \"library\",\n    \"description\": \"CSS & JavaScript minifier, in PHP. Removes whitespace, strips comments, combines files (incl. @import statements and small assets in CSS files), and optimizes/shortens a few common programming patterns.\",\n    \"keywords\": [\"minify\", \"minifier\", \"css\", \"js\", \"javascript\"],\n    \"homepage\": \"http://www.minifier.org\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Matthias Mullie\",\n            \"homepage\": \"http://www.mullie.eu\",\n            \"email\": \"minify@mullie.eu\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.3.0\",\n        \"ext-pcre\": \"*\",\n        \"matthiasmullie/path-converter\": \"~1.1\"\n    },\n    \"require-dev\": {\n        \"matthiasmullie/scrapbook\": \"dev-master\",\n        \"phpunit/phpunit\": \">=4.8\",\n        \"friendsofphp/php-cs-fixer\": \"~2.0\"\n    },\n    \"suggest\": {\n        \"psr/cache-implementation\": \"Cache implementation to use with Minify::cache\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"MatthiasMullie\\\\Minify\\\\\": \"src/\"\n        }\n    },\n    \"bin\": [\n        \"bin/minifycss\",\n        \"bin/minifyjs\"\n    ]\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_after.txt",
    "content": "in\npublic\nextends\nprivate\nprotected\nimplements\ninstanceof"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_before.txt",
    "content": "do\nin\nlet\nnew\nvar\ncase\nelse\nenum\nvoid\nwith\nclass\nconst\nyield\ndelete\nexport\nimport\npublic\nstatic\ntypeof\nextends\npackage\nprivate\nfunction\nprotected\nimplements\ninstanceof"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/data/js/keywords_reserved.txt",
    "content": "do\nif\nin\nfor\nlet\nnew\ntry\nvar\ncase\nelse\nenum\neval\nnull\nthis\ntrue\nvoid\nwith\nbreak\ncatch\nclass\nconst\nfalse\nsuper\nthrow\nwhile\nyield\ndelete\nexport\nimport\npublic\nreturn\nstatic\nswitch\ntypeof\ndefault\nextends\nfinally\npackage\nprivate\ncontinue\ndebugger\nfunction\narguments\ninterface\nprotected\nimplements\ninstanceof\nabstract\nboolean\nbyte\nchar\ndouble\nfinal\nfloat\ngoto\nint\nlong\nnative\nshort\nsynchronized\nthrows\ntransient\nvolatile"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators.txt",
    "content": "+\n-\n*\n/\n%\n=\n+=\n-=\n*=\n/=\n%=\n<<=\n>>=\n>>>=\n&=\n^=\n|=\n&\n|\n^\n~\n<<\n>>\n>>>\n==\n===\n!=\n!==\n>\n<\n>=\n<=\n&&\n||\n!\n.\n[\n]\n?\n:\n,\n;\n(\n)\n{\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_after.txt",
    "content": "+\n-\n*\n/\n%\n=\n+=\n-=\n*=\n/=\n%=\n<<=\n>>=\n>>>=\n&=\n^=\n|=\n&\n|\n^\n<<\n>>\n>>>\n==\n===\n!=\n!==\n>\n<\n>=\n<=\n&&\n||\n.\n[\n]\n?\n:\n,\n;\n(\n)\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/data/js/operators_before.txt",
    "content": "+\n-\n*\n/\n%\n=\n+=\n-=\n*=\n/=\n%=\n<<=\n>>=\n>>>=\n&=\n^=\n|=\n&\n|\n^\n~\n<<\n>>\n>>>\n==\n===\n!=\n!==\n>\n<\n>=\n<=\n&&\n||\n!\n.\n[\n?\n:\n,\n;\n(\n{\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/docker-compose.yml",
    "content": "version: '2.1'\nservices:\n  php:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    volumes:\n      - ./src:/var/www/src\n      - ./data:/var/www/data\n      - ./tests:/var/www/tests\n      - ./phpunit.xml.dist:/var/www/phpunit.xml.dist\n  '8.0':\n    extends: php\n    build:\n      args:\n        version: 8.0-cli\n  '7.4':\n    extends: php\n    build:\n      args:\n        version: 7.4-cli\n  '7.3':\n    extends: php\n    build:\n      args:\n        version: 7.3-cli\n  '7.2':\n    extends: php\n    build:\n      args:\n        version: 7.2-cli\n  '7.1':\n    extends: php\n    build:\n      args:\n        version: 7.1-cli\n  '7.0':\n    extends: php\n    build:\n      args:\n        version: 7.0-cli\n  '5.6':\n    extends: php\n    build:\n      args:\n        version: 5.6-cli\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/CSS.php",
    "content": "<?php\n/**\n * CSS Minifier\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\n\nnamespace MatthiasMullie\\Minify;\n\nuse MatthiasMullie\\Minify\\Exceptions\\FileImportException;\nuse MatthiasMullie\\PathConverter\\ConverterInterface;\nuse MatthiasMullie\\PathConverter\\Converter;\n\n/**\n * CSS minifier\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @package Minify\n * @author Matthias Mullie <minify@mullie.eu>\n * @author Tijs Verkoyen <minify@verkoyen.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nclass CSS extends Minify\n{\n    /**\n     * @var int maximum inport size in kB\n     */\n    protected $maxImportSize = 5;\n\n    /**\n     * @var string[] valid import extensions\n     */\n    protected $importExtensions = array(\n        'gif' => 'data:image/gif',\n        'png' => 'data:image/png',\n        'jpe' => 'data:image/jpeg',\n        'jpg' => 'data:image/jpeg',\n        'jpeg' => 'data:image/jpeg',\n        'svg' => 'data:image/svg+xml',\n        'woff' => 'data:application/x-font-woff',\n        'tif' => 'image/tiff',\n        'tiff' => 'image/tiff',\n        'xbm' => 'image/x-xbitmap',\n    );\n\n    /**\n     * Set the maximum size if files to be imported.\n     *\n     * Files larger than this size (in kB) will not be imported into the CSS.\n     * Importing files into the CSS as data-uri will save you some connections,\n     * but we should only import relatively small decorative images so that our\n     * CSS file doesn't get too bulky.\n     *\n     * @param int $size Size in kB\n     */\n    public function setMaxImportSize($size)\n    {\n        $this->maxImportSize = $size;\n    }\n\n    /**\n     * Set the type of extensions to be imported into the CSS (to save network\n     * connections).\n     * Keys of the array should be the file extensions & respective values\n     * should be the data type.\n     *\n     * @param string[] $extensions Array of file extensions\n     */\n    public function setImportExtensions(array $extensions)\n    {\n        $this->importExtensions = $extensions;\n    }\n\n    /**\n     * Move any import statements to the top.\n     *\n     * @param string $content Nearly finished CSS content\n     *\n     * @return string\n     */\n    protected function moveImportsToTop($content)\n    {\n        if (preg_match_all('/(;?)(@import (?<url>url\\()?(?P<quotes>[\"\\']?).+?(?P=quotes)(?(url)\\)));?/', $content, $matches)) {\n            // remove from content\n            foreach ($matches[0] as $import) {\n                $content = str_replace($import, '', $content);\n            }\n\n            // add to top\n            $content = implode(';', $matches[2]).';'.trim($content, ';');\n        }\n\n        return $content;\n    }\n\n    /**\n     * Combine CSS from import statements.\n     *\n     * @import's will be loaded and their content merged into the original file,\n     * to save HTTP requests.\n     *\n     * @param string   $source  The file to combine imports for\n     * @param string   $content The CSS content to combine imports for\n     * @param string[] $parents Parent paths, for circular reference checks\n     *\n     * @return string\n     *\n     * @throws FileImportException\n     */\n    protected function combineImports($source, $content, $parents)\n    {\n        $importRegexes = array(\n            // @import url(xxx)\n            '/\n            # import statement\n            @import\n\n            # whitespace\n            \\s+\n\n                # open url()\n                url\\(\n\n                    # (optional) open path enclosure\n                    (?P<quotes>[\"\\']?)\n\n                        # fetch path\n                        (?P<path>.+?)\n\n                    # (optional) close path enclosure\n                    (?P=quotes)\n\n                # close url()\n                \\)\n\n                # (optional) trailing whitespace\n                \\s*\n\n                # (optional) media statement(s)\n                (?P<media>[^;]*)\n\n                # (optional) trailing whitespace\n                \\s*\n\n            # (optional) closing semi-colon\n            ;?\n\n            /ix',\n\n            // @import 'xxx'\n            '/\n\n            # import statement\n            @import\n\n            # whitespace\n            \\s+\n\n                # open path enclosure\n                (?P<quotes>[\"\\'])\n\n                    # fetch path\n                    (?P<path>.+?)\n\n                # close path enclosure\n                (?P=quotes)\n\n                # (optional) trailing whitespace\n                \\s*\n\n                # (optional) media statement(s)\n                (?P<media>[^;]*)\n\n                # (optional) trailing whitespace\n                \\s*\n\n            # (optional) closing semi-colon\n            ;?\n\n            /ix',\n        );\n\n        // find all relative imports in css\n        $matches = array();\n        foreach ($importRegexes as $importRegex) {\n            if (preg_match_all($importRegex, $content, $regexMatches, PREG_SET_ORDER)) {\n                $matches = array_merge($matches, $regexMatches);\n            }\n        }\n\n        $search = array();\n        $replace = array();\n\n        // loop the matches\n        foreach ($matches as $match) {\n            // get the path for the file that will be imported\n            $importPath = dirname($source).'/'.$match['path'];\n\n            // only replace the import with the content if we can grab the\n            // content of the file\n            if (!$this->canImportByPath($match['path']) || !$this->canImportFile($importPath)) {\n                continue;\n            }\n\n            // check if current file was not imported previously in the same\n            // import chain.\n            if (in_array($importPath, $parents)) {\n                throw new FileImportException('Failed to import file \"'.$importPath.'\": circular reference detected.');\n            }\n\n            // grab referenced file & minify it (which may include importing\n            // yet other @import statements recursively)\n            $minifier = new self($importPath);\n            $minifier->setMaxImportSize($this->maxImportSize);\n            $minifier->setImportExtensions($this->importExtensions);\n            $importContent = $minifier->execute($source, $parents);\n\n            // check if this is only valid for certain media\n            if (!empty($match['media'])) {\n                $importContent = '@media '.$match['media'].'{'.$importContent.'}';\n            }\n\n            // add to replacement array\n            $search[] = $match[0];\n            $replace[] = $importContent;\n        }\n\n        // replace the import statements\n        return str_replace($search, $replace, $content);\n    }\n\n    /**\n     * Import files into the CSS, base64-ized.\n     *\n     * @url(image.jpg) images will be loaded and their content merged into the\n     * original file, to save HTTP requests.\n     *\n     * @param string $source  The file to import files for\n     * @param string $content The CSS content to import files for\n     *\n     * @return string\n     */\n    protected function importFiles($source, $content)\n    {\n        $regex = '/url\\(([\"\\']?)(.+?)\\\\1\\)/i';\n        if ($this->importExtensions && preg_match_all($regex, $content, $matches, PREG_SET_ORDER)) {\n            $search = array();\n            $replace = array();\n\n            // loop the matches\n            foreach ($matches as $match) {\n                $extension = substr(strrchr($match[2], '.'), 1);\n                if ($extension && !array_key_exists($extension, $this->importExtensions)) {\n                    continue;\n                }\n\n                // get the path for the file that will be imported\n                $path = $match[2];\n                $path = dirname($source).'/'.$path;\n\n                // only replace the import with the content if we're able to get\n                // the content of the file, and it's relatively small\n                if ($this->canImportFile($path) && $this->canImportBySize($path)) {\n                    // grab content && base64-ize\n                    $importContent = $this->load($path);\n                    $importContent = base64_encode($importContent);\n\n                    // build replacement\n                    $search[] = $match[0];\n                    $replace[] = 'url('.$this->importExtensions[$extension].';base64,'.$importContent.')';\n                }\n            }\n\n            // replace the import statements\n            $content = str_replace($search, $replace, $content);\n        }\n\n        return $content;\n    }\n\n    /**\n     * Minify the data.\n     * Perform CSS optimizations.\n     *\n     * @param string[optional] $path    Path to write the data to\n     * @param string[]         $parents Parent paths, for circular reference checks\n     *\n     * @return string The minified data\n     */\n    public function execute($path = null, $parents = array())\n    {\n        $content = '';\n\n        // loop CSS data (raw data and files)\n        foreach ($this->data as $source => $css) {\n            /*\n             * Let's first take out strings & comments, since we can't just\n             * remove whitespace anywhere. If whitespace occurs inside a string,\n             * we should leave it alone. E.g.:\n             * p { content: \"a   test\" }\n             */\n            $this->extractStrings();\n            $this->stripComments();\n            $this->extractMath();\n            $this->extractCustomProperties();\n            $css = $this->replace($css);\n\n            $css = $this->stripWhitespace($css);\n            $css = $this->shortenColors($css);\n            $css = $this->shortenZeroes($css);\n            $css = $this->shortenFontWeights($css);\n            $css = $this->stripEmptyTags($css);\n\n            // restore the string we've extracted earlier\n            $css = $this->restoreExtractedData($css);\n\n            $source = is_int($source) ? '' : $source;\n            $parents = $source ? array_merge($parents, array($source)) : $parents;\n            $css = $this->combineImports($source, $css, $parents);\n            $css = $this->importFiles($source, $css);\n\n            /*\n             * If we'll save to a new path, we'll have to fix the relative paths\n             * to be relative no longer to the source file, but to the new path.\n             * If we don't write to a file, fall back to same path so no\n             * conversion happens (because we still want it to go through most\n             * of the move code, which also addresses url() & @import syntax...)\n             */\n            $converter = $this->getPathConverter($source, $path ?: $source);\n            $css = $this->move($converter, $css);\n\n            // combine css\n            $content .= $css;\n        }\n\n        $content = $this->moveImportsToTop($content);\n\n        return $content;\n    }\n\n    /**\n     * Moving a css file should update all relative urls.\n     * Relative references (e.g. ../images/image.gif) in a certain css file,\n     * will have to be updated when a file is being saved at another location\n     * (e.g. ../../images/image.gif, if the new CSS file is 1 folder deeper).\n     *\n     * @param ConverterInterface $converter Relative path converter\n     * @param string             $content   The CSS content to update relative urls for\n     *\n     * @return string\n     */\n    protected function move(ConverterInterface $converter, $content)\n    {\n        /*\n         * Relative path references will usually be enclosed by url(). @import\n         * is an exception, where url() is not necessary around the path (but is\n         * allowed).\n         * This *could* be 1 regular expression, where both regular expressions\n         * in this array are on different sides of a |. But we're using named\n         * patterns in both regexes, the same name on both regexes. This is only\n         * possible with a (?J) modifier, but that only works after a fairly\n         * recent PCRE version. That's why I'm doing 2 separate regular\n         * expressions & combining the matches after executing of both.\n         */\n        $relativeRegexes = array(\n            // url(xxx)\n            '/\n            # open url()\n            url\\(\n\n                \\s*\n\n                # open path enclosure\n                (?P<quotes>[\"\\'])?\n\n                    # fetch path\n                    (?P<path>.+?)\n\n                # close path enclosure\n                (?(quotes)(?P=quotes))\n\n                \\s*\n\n            # close url()\n            \\)\n\n            /ix',\n\n            // @import \"xxx\"\n            '/\n            # import statement\n            @import\n\n            # whitespace\n            \\s+\n\n                # we don\\'t have to check for @import url(), because the\n                # condition above will already catch these\n\n                # open path enclosure\n                (?P<quotes>[\"\\'])\n\n                    # fetch path\n                    (?P<path>.+?)\n\n                # close path enclosure\n                (?P=quotes)\n\n            /ix',\n        );\n\n        // find all relative urls in css\n        $matches = array();\n        foreach ($relativeRegexes as $relativeRegex) {\n            if (preg_match_all($relativeRegex, $content, $regexMatches, PREG_SET_ORDER)) {\n                $matches = array_merge($matches, $regexMatches);\n            }\n        }\n\n        $search = array();\n        $replace = array();\n\n        // loop all urls\n        foreach ($matches as $match) {\n            // determine if it's a url() or an @import match\n            $type = (strpos($match[0], '@import') === 0 ? 'import' : 'url');\n\n            $url = $match['path'];\n            if ($this->canImportByPath($url)) {\n                // attempting to interpret GET-params makes no sense, so let's discard them for awhile\n                $params = strrchr($url, '?');\n                $url = $params ? substr($url, 0, -strlen($params)) : $url;\n\n                // fix relative url\n                $url = $converter->convert($url);\n\n                // now that the path has been converted, re-apply GET-params\n                $url .= $params;\n            }\n\n            /*\n             * Urls with control characters above 0x7e should be quoted.\n             * According to Mozilla's parser, whitespace is only allowed at the\n             * end of unquoted urls.\n             * Urls with `)` (as could happen with data: uris) should also be\n             * quoted to avoid being confused for the url() closing parentheses.\n             * And urls with a # have also been reported to cause issues.\n             * Urls with quotes inside should also remain escaped.\n             *\n             * @see https://developer.mozilla.org/nl/docs/Web/CSS/url#The_url()_functional_notation\n             * @see https://hg.mozilla.org/mozilla-central/rev/14abca4e7378\n             * @see https://github.com/matthiasmullie/minify/issues/193\n             */\n            $url = trim($url);\n            if (preg_match('/[\\s\\)\\'\"#\\x{7f}-\\x{9f}]/u', $url)) {\n                $url = $match['quotes'] . $url . $match['quotes'];\n            }\n\n            // build replacement\n            $search[] = $match[0];\n            if ($type === 'url') {\n                $replace[] = 'url('.$url.')';\n            } elseif ($type === 'import') {\n                $replace[] = '@import \"'.$url.'\"';\n            }\n        }\n\n        // replace urls\n        return str_replace($search, $replace, $content);\n    }\n\n    /**\n     * Shorthand hex color codes.\n     * #FF0000 -> #F00.\n     *\n     * @param string $content The CSS content to shorten the hex color codes for\n     *\n     * @return string\n     */\n    protected function shortenColors($content)\n    {\n        $content = preg_replace('/(?<=[: ])#([0-9a-z])\\\\1([0-9a-z])\\\\2([0-9a-z])\\\\3(?:([0-9a-z])\\\\4)?(?=[; }])/i', '#$1$2$3$4', $content);\n\n        // remove alpha channel if it's pointless...\n        $content = preg_replace('/(?<=[: ])#([0-9a-z]{6})ff?(?=[; }])/i', '#$1', $content);\n        $content = preg_replace('/(?<=[: ])#([0-9a-z]{3})f?(?=[; }])/i', '#$1', $content);\n\n        $colors = array(\n            // we can shorten some even more by replacing them with their color name\n            '#F0FFFF' => 'azure',\n            '#F5F5DC' => 'beige',\n            '#A52A2A' => 'brown',\n            '#FF7F50' => 'coral',\n            '#FFD700' => 'gold',\n            '#808080' => 'gray',\n            '#008000' => 'green',\n            '#4B0082' => 'indigo',\n            '#FFFFF0' => 'ivory',\n            '#F0E68C' => 'khaki',\n            '#FAF0E6' => 'linen',\n            '#800000' => 'maroon',\n            '#000080' => 'navy',\n            '#808000' => 'olive',\n            '#CD853F' => 'peru',\n            '#FFC0CB' => 'pink',\n            '#DDA0DD' => 'plum',\n            '#800080' => 'purple',\n            '#F00' => 'red',\n            '#FA8072' => 'salmon',\n            '#A0522D' => 'sienna',\n            '#C0C0C0' => 'silver',\n            '#FFFAFA' => 'snow',\n            '#D2B48C' => 'tan',\n            '#FF6347' => 'tomato',\n            '#EE82EE' => 'violet',\n            '#F5DEB3' => 'wheat',\n            // or the other way around\n            'WHITE' => '#fff',\n            'BLACK' => '#000',\n        );\n\n        return preg_replace_callback(\n            '/(?<=[: ])('.implode('|', array_keys($colors)).')(?=[; }])/i',\n            function ($match) use ($colors) {\n                return $colors[strtoupper($match[0])];\n            },\n            $content\n        );\n    }\n\n    /**\n     * Shorten CSS font weights.\n     *\n     * @param string $content The CSS content to shorten the font weights for\n     *\n     * @return string\n     */\n    protected function shortenFontWeights($content)\n    {\n        $weights = array(\n            'normal' => 400,\n            'bold' => 700,\n        );\n\n        $callback = function ($match) use ($weights) {\n            return $match[1].$weights[$match[2]];\n        };\n\n        return preg_replace_callback('/(font-weight\\s*:\\s*)('.implode('|', array_keys($weights)).')(?=[;}])/', $callback, $content);\n    }\n\n    /**\n     * Shorthand 0 values to plain 0, instead of e.g. -0em.\n     *\n     * @param string $content The CSS content to shorten the zero values for\n     *\n     * @return string\n     */\n    protected function shortenZeroes($content)\n    {\n        // we don't want to strip units in `calc()` expressions:\n        // `5px - 0px` is valid, but `5px - 0` is not\n        // `10px * 0` is valid (equates to 0), and so is `10 * 0px`, but\n        // `10 * 0` is invalid\n        // we've extracted calcs earlier, so we don't need to worry about this\n\n        // reusable bits of code throughout these regexes:\n        // before & after are used to make sure we don't match lose unintended\n        // 0-like values (e.g. in #000, or in http://url/1.0)\n        // units can be stripped from 0 values, or used to recognize non 0\n        // values (where wa may be able to strip a .0 suffix)\n        $before = '(?<=[:(, ])';\n        $after = '(?=[ ,);}])';\n        $units = '(em|ex|%|px|cm|mm|in|pt|pc|ch|rem|vh|vw|vmin|vmax|vm)';\n\n        // strip units after zeroes (0px -> 0)\n        // NOTE: it should be safe to remove all units for a 0 value, but in\n        // practice, Webkit (especially Safari) seems to stumble over at least\n        // 0%, potentially other units as well. Only stripping 'px' for now.\n        // @see https://github.com/matthiasmullie/minify/issues/60\n        $content = preg_replace('/'.$before.'(-?0*(\\.0+)?)(?<=0)px'.$after.'/', '\\\\1', $content);\n\n        // strip 0-digits (.0 -> 0)\n        $content = preg_replace('/'.$before.'\\.0+'.$units.'?'.$after.'/', '0\\\\1', $content);\n        // strip trailing 0: 50.10 -> 50.1, 50.10px -> 50.1px\n        $content = preg_replace('/'.$before.'(-?[0-9]+\\.[0-9]+)0+'.$units.'?'.$after.'/', '\\\\1\\\\2', $content);\n        // strip trailing 0: 50.00 -> 50, 50.00px -> 50px\n        $content = preg_replace('/'.$before.'(-?[0-9]+)\\.0+'.$units.'?'.$after.'/', '\\\\1\\\\2', $content);\n        // strip leading 0: 0.1 -> .1, 01.1 -> 1.1\n        $content = preg_replace('/'.$before.'(-?)0+([0-9]*\\.[0-9]+)'.$units.'?'.$after.'/', '\\\\1\\\\2\\\\3', $content);\n\n        // strip negative zeroes (-0 -> 0) & truncate zeroes (00 -> 0)\n        $content = preg_replace('/'.$before.'-?0+'.$units.'?'.$after.'/', '0\\\\1', $content);\n\n        // IE doesn't seem to understand a unitless flex-basis value (correct -\n        // it goes against the spec), so let's add it in again (make it `%`,\n        // which is only 1 char: 0%, 0px, 0 anything, it's all just the same)\n        // @see https://developer.mozilla.org/nl/docs/Web/CSS/flex\n        $content = preg_replace('/flex:([0-9]+\\s[0-9]+\\s)0([;\\}])/', 'flex:${1}0%${2}', $content);\n        $content = preg_replace('/flex-basis:0([;\\}])/', 'flex-basis:0%${1}', $content);\n\n        return $content;\n    }\n\n    /**\n     * Strip empty tags from source code.\n     *\n     * @param string $content\n     *\n     * @return string\n     */\n    protected function stripEmptyTags($content)\n    {\n        $content = preg_replace('/(?<=^)[^\\{\\};]+\\{\\s*\\}/', '', $content);\n        $content = preg_replace('/(?<=(\\}|;))[^\\{\\};]+\\{\\s*\\}/', '', $content);\n\n        return $content;\n    }\n\n    /**\n     * Strip comments from source code.\n     */\n    protected function stripComments()\n    {\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $callback = function ($match) use ($minifier) {\n            $count = count($minifier->extracted);\n            $placeholder = '/*'.$count.'*/';\n            $minifier->extracted[$placeholder] = $match[0];\n\n            return $placeholder;\n        };\n        $this->registerPattern('/\\n?\\/\\*(!|.*?@license|.*?@preserve).*?\\*\\/\\n?/s', $callback);\n\n        $this->registerPattern('/\\/\\*.*?\\*\\//s', '');\n    }\n\n    /**\n     * Strip whitespace.\n     *\n     * @param string $content The CSS content to strip the whitespace for\n     *\n     * @return string\n     */\n    protected function stripWhitespace($content)\n    {\n        // remove leading & trailing whitespace\n        $content = preg_replace('/^\\s*/m', '', $content);\n        $content = preg_replace('/\\s*$/m', '', $content);\n\n        // replace newlines with a single space\n        $content = preg_replace('/\\s+/', ' ', $content);\n\n        // remove whitespace around meta characters\n        // inspired by stackoverflow.com/questions/15195750/minify-compress-css-with-regex\n        $content = preg_replace('/\\s*([\\*$~^|]?+=|[{};,>~]|!important\\b)\\s*/', '$1', $content);\n        $content = preg_replace('/([\\[(:>\\+])\\s+/', '$1', $content);\n        $content = preg_replace('/\\s+([\\]\\)>\\+])/', '$1', $content);\n        $content = preg_replace('/\\s+(:)(?![^\\}]*\\{)/', '$1', $content);\n\n        // whitespace around + and - can only be stripped inside some pseudo-\n        // classes, like `:nth-child(3+2n)`\n        // not in things like `calc(3px + 2px)`, shorthands like `3px -2px`, or\n        // selectors like `div.weird- p`\n        $pseudos = array('nth-child', 'nth-last-child', 'nth-last-of-type', 'nth-of-type');\n        $content = preg_replace('/:('.implode('|', $pseudos).')\\(\\s*([+-]?)\\s*(.+?)\\s*([+-]?)\\s*(.*?)\\s*\\)/', ':$1($2$3$4$5)', $content);\n\n        // remove semicolon/whitespace followed by closing bracket\n        $content = str_replace(';}', '}', $content);\n\n        return trim($content);\n    }\n\n    /**\n     * Replace all occurrences of functions that may contain math, where\n     * whitespace around operators needs to be preserved (e.g. calc, clamp)\n     */\n    protected function extractMath()\n    {\n        $functions = array('calc', 'clamp', 'min', 'max');\n        $pattern = '/\\b('. implode('|', $functions) .')(\\(.+?)(?=$|;|})/m';\n\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $callback = function ($match) use ($minifier, $pattern, &$callback) {\n            $function = $match[1];\n            $length = strlen($match[2]);\n            $expr = '';\n            $opened = 0;\n\n            // the regular expression for extracting math has 1 significant problem:\n            // it can't determine the correct closing parenthesis...\n            // instead, it'll match a larger portion of code to where it's certain that\n            // the calc() musts have ended, and we'll figure out which is the correct\n            // closing parenthesis here, by counting how many have opened\n            for ($i = 0; $i < $length; $i++) {\n                $char = $match[2][$i];\n                $expr .= $char;\n                if ($char === '(') {\n                    $opened++;\n                } elseif ($char === ')' && --$opened === 0) {\n                    break;\n                }\n            }\n\n            // now that we've figured out where the calc() starts and ends, extract it\n            $count = count($minifier->extracted);\n            $placeholder = 'math('.$count.')';\n            $minifier->extracted[$placeholder] = $function.'('.trim(substr($expr, 1, -1)).')';\n\n            // and since we've captured more code than required, we may have some leftover\n            // calc() in here too - go recursive on the remaining but of code to go figure\n            // that out and extract what is needed\n            $rest = str_replace($function.$expr, '', $match[0]);\n            $rest = preg_replace_callback($pattern, $callback, $rest);\n\n            return $placeholder.$rest;\n        };\n\n        $this->registerPattern($pattern, $callback);\n    }\n\n    /**\n     * Replace custom properties, whose values may be used in scenarios where\n     * we wouldn't want them to be minified (e.g. inside calc)\n     */\n    protected function extractCustomProperties()\n    {\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $this->registerPattern(\n            '/(?<=^|[;}])(--[^:;{}\"\\'\\s]+)\\s*:([^;{}]+)/m',\n            function ($match) use ($minifier) {\n                $placeholder = '--custom-'. count($minifier->extracted) . ':0';\n                $minifier->extracted[$placeholder] = $match[1] .':'. trim($match[2]);\n                return $placeholder;\n\n            }\n        );\n    }\n\n    /**\n     * Check if file is small enough to be imported.\n     *\n     * @param string $path The path to the file\n     *\n     * @return bool\n     */\n    protected function canImportBySize($path)\n    {\n        return ($size = @filesize($path)) && $size <= $this->maxImportSize * 1024;\n    }\n\n    /**\n     * Check if file a file can be imported, going by the path.\n     *\n     * @param string $path\n     *\n     * @return bool\n     */\n    protected function canImportByPath($path)\n    {\n        return preg_match('/^(data:|https?:|\\\\/)/', $path) === 0;\n    }\n\n    /**\n     * Return a converter to update relative paths to be relative to the new\n     * destination.\n     *\n     * @param string $source\n     * @param string $target\n     *\n     * @return ConverterInterface\n     */\n    protected function getPathConverter($source, $target)\n    {\n        return new Converter($source, $target);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/Exception.php",
    "content": "<?php\n/**\n * Base Exception\n *\n * @deprecated Use Exceptions\\BasicException instead\n *\n * @author Matthias Mullie <minify@mullie.eu>\n */\nnamespace MatthiasMullie\\Minify;\n\n/**\n * Base Exception Class\n * @deprecated Use Exceptions\\BasicException instead\n *\n * @package Minify\n * @author Matthias Mullie <minify@mullie.eu>\n */\nabstract class Exception extends \\Exception\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/BasicException.php",
    "content": "<?php\n/**\n * Basic exception\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nnamespace MatthiasMullie\\Minify\\Exceptions;\n\nuse MatthiasMullie\\Minify\\Exception;\n\n/**\n * Basic Exception Class\n *\n * @package Minify\\Exception\n * @author Matthias Mullie <minify@mullie.eu>\n */\nabstract class BasicException extends Exception\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/FileImportException.php",
    "content": "<?php\n/**\n * File Import Exception\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nnamespace MatthiasMullie\\Minify\\Exceptions;\n\n/**\n * File Import Exception Class\n *\n * @package Minify\\Exception\n * @author Matthias Mullie <minify@mullie.eu>\n */\nclass FileImportException extends BasicException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/Exceptions/IOException.php",
    "content": "<?php\n/**\n * IO Exception\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nnamespace MatthiasMullie\\Minify\\Exceptions;\n\n/**\n * IO Exception Class\n *\n * @package Minify\\Exception\n * @author Matthias Mullie <minify@mullie.eu>\n */\nclass IOException extends BasicException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/JS.php",
    "content": "<?php\n/**\n * JavaScript minifier\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nnamespace MatthiasMullie\\Minify;\n\n/**\n * JavaScript Minifier Class\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @package Minify\n * @author Matthias Mullie <minify@mullie.eu>\n * @author Tijs Verkoyen <minify@verkoyen.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nclass JS extends Minify\n{\n    /**\n     * Var-matching regex based on http://stackoverflow.com/a/9337047/802993.\n     *\n     * Note that regular expressions using that bit must have the PCRE_UTF8\n     * pattern modifier (/u) set.\n     *\n     * @var string\n     */\n    const REGEX_VARIABLE = '\\b[$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\x{02c1}\\x{02c6}-\\x{02d1}\\x{02e0}-\\x{02e4}\\x{02ec}\\x{02ee}\\x{0370}-\\x{0374}\\x{0376}\\x{0377}\\x{037a}-\\x{037d}\\x{0386}\\x{0388}-\\x{038a}\\x{038c}\\x{038e}-\\x{03a1}\\x{03a3}-\\x{03f5}\\x{03f7}-\\x{0481}\\x{048a}-\\x{0527}\\x{0531}-\\x{0556}\\x{0559}\\x{0561}-\\x{0587}\\x{05d0}-\\x{05ea}\\x{05f0}-\\x{05f2}\\x{0620}-\\x{064a}\\x{066e}\\x{066f}\\x{0671}-\\x{06d3}\\x{06d5}\\x{06e5}\\x{06e6}\\x{06ee}\\x{06ef}\\x{06fa}-\\x{06fc}\\x{06ff}\\x{0710}\\x{0712}-\\x{072f}\\x{074d}-\\x{07a5}\\x{07b1}\\x{07ca}-\\x{07ea}\\x{07f4}\\x{07f5}\\x{07fa}\\x{0800}-\\x{0815}\\x{081a}\\x{0824}\\x{0828}\\x{0840}-\\x{0858}\\x{08a0}\\x{08a2}-\\x{08ac}\\x{0904}-\\x{0939}\\x{093d}\\x{0950}\\x{0958}-\\x{0961}\\x{0971}-\\x{0977}\\x{0979}-\\x{097f}\\x{0985}-\\x{098c}\\x{098f}\\x{0990}\\x{0993}-\\x{09a8}\\x{09aa}-\\x{09b0}\\x{09b2}\\x{09b6}-\\x{09b9}\\x{09bd}\\x{09ce}\\x{09dc}\\x{09dd}\\x{09df}-\\x{09e1}\\x{09f0}\\x{09f1}\\x{0a05}-\\x{0a0a}\\x{0a0f}\\x{0a10}\\x{0a13}-\\x{0a28}\\x{0a2a}-\\x{0a30}\\x{0a32}\\x{0a33}\\x{0a35}\\x{0a36}\\x{0a38}\\x{0a39}\\x{0a59}-\\x{0a5c}\\x{0a5e}\\x{0a72}-\\x{0a74}\\x{0a85}-\\x{0a8d}\\x{0a8f}-\\x{0a91}\\x{0a93}-\\x{0aa8}\\x{0aaa}-\\x{0ab0}\\x{0ab2}\\x{0ab3}\\x{0ab5}-\\x{0ab9}\\x{0abd}\\x{0ad0}\\x{0ae0}\\x{0ae1}\\x{0b05}-\\x{0b0c}\\x{0b0f}\\x{0b10}\\x{0b13}-\\x{0b28}\\x{0b2a}-\\x{0b30}\\x{0b32}\\x{0b33}\\x{0b35}-\\x{0b39}\\x{0b3d}\\x{0b5c}\\x{0b5d}\\x{0b5f}-\\x{0b61}\\x{0b71}\\x{0b83}\\x{0b85}-\\x{0b8a}\\x{0b8e}-\\x{0b90}\\x{0b92}-\\x{0b95}\\x{0b99}\\x{0b9a}\\x{0b9c}\\x{0b9e}\\x{0b9f}\\x{0ba3}\\x{0ba4}\\x{0ba8}-\\x{0baa}\\x{0bae}-\\x{0bb9}\\x{0bd0}\\x{0c05}-\\x{0c0c}\\x{0c0e}-\\x{0c10}\\x{0c12}-\\x{0c28}\\x{0c2a}-\\x{0c33}\\x{0c35}-\\x{0c39}\\x{0c3d}\\x{0c58}\\x{0c59}\\x{0c60}\\x{0c61}\\x{0c85}-\\x{0c8c}\\x{0c8e}-\\x{0c90}\\x{0c92}-\\x{0ca8}\\x{0caa}-\\x{0cb3}\\x{0cb5}-\\x{0cb9}\\x{0cbd}\\x{0cde}\\x{0ce0}\\x{0ce1}\\x{0cf1}\\x{0cf2}\\x{0d05}-\\x{0d0c}\\x{0d0e}-\\x{0d10}\\x{0d12}-\\x{0d3a}\\x{0d3d}\\x{0d4e}\\x{0d60}\\x{0d61}\\x{0d7a}-\\x{0d7f}\\x{0d85}-\\x{0d96}\\x{0d9a}-\\x{0db1}\\x{0db3}-\\x{0dbb}\\x{0dbd}\\x{0dc0}-\\x{0dc6}\\x{0e01}-\\x{0e30}\\x{0e32}\\x{0e33}\\x{0e40}-\\x{0e46}\\x{0e81}\\x{0e82}\\x{0e84}\\x{0e87}\\x{0e88}\\x{0e8a}\\x{0e8d}\\x{0e94}-\\x{0e97}\\x{0e99}-\\x{0e9f}\\x{0ea1}-\\x{0ea3}\\x{0ea5}\\x{0ea7}\\x{0eaa}\\x{0eab}\\x{0ead}-\\x{0eb0}\\x{0eb2}\\x{0eb3}\\x{0ebd}\\x{0ec0}-\\x{0ec4}\\x{0ec6}\\x{0edc}-\\x{0edf}\\x{0f00}\\x{0f40}-\\x{0f47}\\x{0f49}-\\x{0f6c}\\x{0f88}-\\x{0f8c}\\x{1000}-\\x{102a}\\x{103f}\\x{1050}-\\x{1055}\\x{105a}-\\x{105d}\\x{1061}\\x{1065}\\x{1066}\\x{106e}-\\x{1070}\\x{1075}-\\x{1081}\\x{108e}\\x{10a0}-\\x{10c5}\\x{10c7}\\x{10cd}\\x{10d0}-\\x{10fa}\\x{10fc}-\\x{1248}\\x{124a}-\\x{124d}\\x{1250}-\\x{1256}\\x{1258}\\x{125a}-\\x{125d}\\x{1260}-\\x{1288}\\x{128a}-\\x{128d}\\x{1290}-\\x{12b0}\\x{12b2}-\\x{12b5}\\x{12b8}-\\x{12be}\\x{12c0}\\x{12c2}-\\x{12c5}\\x{12c8}-\\x{12d6}\\x{12d8}-\\x{1310}\\x{1312}-\\x{1315}\\x{1318}-\\x{135a}\\x{1380}-\\x{138f}\\x{13a0}-\\x{13f4}\\x{1401}-\\x{166c}\\x{166f}-\\x{167f}\\x{1681}-\\x{169a}\\x{16a0}-\\x{16ea}\\x{16ee}-\\x{16f0}\\x{1700}-\\x{170c}\\x{170e}-\\x{1711}\\x{1720}-\\x{1731}\\x{1740}-\\x{1751}\\x{1760}-\\x{176c}\\x{176e}-\\x{1770}\\x{1780}-\\x{17b3}\\x{17d7}\\x{17dc}\\x{1820}-\\x{1877}\\x{1880}-\\x{18a8}\\x{18aa}\\x{18b0}-\\x{18f5}\\x{1900}-\\x{191c}\\x{1950}-\\x{196d}\\x{1970}-\\x{1974}\\x{1980}-\\x{19ab}\\x{19c1}-\\x{19c7}\\x{1a00}-\\x{1a16}\\x{1a20}-\\x{1a54}\\x{1aa7}\\x{1b05}-\\x{1b33}\\x{1b45}-\\x{1b4b}\\x{1b83}-\\x{1ba0}\\x{1bae}\\x{1baf}\\x{1bba}-\\x{1be5}\\x{1c00}-\\x{1c23}\\x{1c4d}-\\x{1c4f}\\x{1c5a}-\\x{1c7d}\\x{1ce9}-\\x{1cec}\\x{1cee}-\\x{1cf1}\\x{1cf5}\\x{1cf6}\\x{1d00}-\\x{1dbf}\\x{1e00}-\\x{1f15}\\x{1f18}-\\x{1f1d}\\x{1f20}-\\x{1f45}\\x{1f48}-\\x{1f4d}\\x{1f50}-\\x{1f57}\\x{1f59}\\x{1f5b}\\x{1f5d}\\x{1f5f}-\\x{1f7d}\\x{1f80}-\\x{1fb4}\\x{1fb6}-\\x{1fbc}\\x{1fbe}\\x{1fc2}-\\x{1fc4}\\x{1fc6}-\\x{1fcc}\\x{1fd0}-\\x{1fd3}\\x{1fd6}-\\x{1fdb}\\x{1fe0}-\\x{1fec}\\x{1ff2}-\\x{1ff4}\\x{1ff6}-\\x{1ffc}\\x{2071}\\x{207f}\\x{2090}-\\x{209c}\\x{2102}\\x{2107}\\x{210a}-\\x{2113}\\x{2115}\\x{2119}-\\x{211d}\\x{2124}\\x{2126}\\x{2128}\\x{212a}-\\x{212d}\\x{212f}-\\x{2139}\\x{213c}-\\x{213f}\\x{2145}-\\x{2149}\\x{214e}\\x{2160}-\\x{2188}\\x{2c00}-\\x{2c2e}\\x{2c30}-\\x{2c5e}\\x{2c60}-\\x{2ce4}\\x{2ceb}-\\x{2cee}\\x{2cf2}\\x{2cf3}\\x{2d00}-\\x{2d25}\\x{2d27}\\x{2d2d}\\x{2d30}-\\x{2d67}\\x{2d6f}\\x{2d80}-\\x{2d96}\\x{2da0}-\\x{2da6}\\x{2da8}-\\x{2dae}\\x{2db0}-\\x{2db6}\\x{2db8}-\\x{2dbe}\\x{2dc0}-\\x{2dc6}\\x{2dc8}-\\x{2dce}\\x{2dd0}-\\x{2dd6}\\x{2dd8}-\\x{2dde}\\x{2e2f}\\x{3005}-\\x{3007}\\x{3021}-\\x{3029}\\x{3031}-\\x{3035}\\x{3038}-\\x{303c}\\x{3041}-\\x{3096}\\x{309d}-\\x{309f}\\x{30a1}-\\x{30fa}\\x{30fc}-\\x{30ff}\\x{3105}-\\x{312d}\\x{3131}-\\x{318e}\\x{31a0}-\\x{31ba}\\x{31f0}-\\x{31ff}\\x{3400}-\\x{4db5}\\x{4e00}-\\x{9fcc}\\x{a000}-\\x{a48c}\\x{a4d0}-\\x{a4fd}\\x{a500}-\\x{a60c}\\x{a610}-\\x{a61f}\\x{a62a}\\x{a62b}\\x{a640}-\\x{a66e}\\x{a67f}-\\x{a697}\\x{a6a0}-\\x{a6ef}\\x{a717}-\\x{a71f}\\x{a722}-\\x{a788}\\x{a78b}-\\x{a78e}\\x{a790}-\\x{a793}\\x{a7a0}-\\x{a7aa}\\x{a7f8}-\\x{a801}\\x{a803}-\\x{a805}\\x{a807}-\\x{a80a}\\x{a80c}-\\x{a822}\\x{a840}-\\x{a873}\\x{a882}-\\x{a8b3}\\x{a8f2}-\\x{a8f7}\\x{a8fb}\\x{a90a}-\\x{a925}\\x{a930}-\\x{a946}\\x{a960}-\\x{a97c}\\x{a984}-\\x{a9b2}\\x{a9cf}\\x{aa00}-\\x{aa28}\\x{aa40}-\\x{aa42}\\x{aa44}-\\x{aa4b}\\x{aa60}-\\x{aa76}\\x{aa7a}\\x{aa80}-\\x{aaaf}\\x{aab1}\\x{aab5}\\x{aab6}\\x{aab9}-\\x{aabd}\\x{aac0}\\x{aac2}\\x{aadb}-\\x{aadd}\\x{aae0}-\\x{aaea}\\x{aaf2}-\\x{aaf4}\\x{ab01}-\\x{ab06}\\x{ab09}-\\x{ab0e}\\x{ab11}-\\x{ab16}\\x{ab20}-\\x{ab26}\\x{ab28}-\\x{ab2e}\\x{abc0}-\\x{abe2}\\x{ac00}-\\x{d7a3}\\x{d7b0}-\\x{d7c6}\\x{d7cb}-\\x{d7fb}\\x{f900}-\\x{fa6d}\\x{fa70}-\\x{fad9}\\x{fb00}-\\x{fb06}\\x{fb13}-\\x{fb17}\\x{fb1d}\\x{fb1f}-\\x{fb28}\\x{fb2a}-\\x{fb36}\\x{fb38}-\\x{fb3c}\\x{fb3e}\\x{fb40}\\x{fb41}\\x{fb43}\\x{fb44}\\x{fb46}-\\x{fbb1}\\x{fbd3}-\\x{fd3d}\\x{fd50}-\\x{fd8f}\\x{fd92}-\\x{fdc7}\\x{fdf0}-\\x{fdfb}\\x{fe70}-\\x{fe74}\\x{fe76}-\\x{fefc}\\x{ff21}-\\x{ff3a}\\x{ff41}-\\x{ff5a}\\x{ff66}-\\x{ffbe}\\x{ffc2}-\\x{ffc7}\\x{ffca}-\\x{ffcf}\\x{ffd2}-\\x{ffd7}\\x{ffda}-\\x{ffdc}][$A-Z\\_a-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\x{02c1}\\x{02c6}-\\x{02d1}\\x{02e0}-\\x{02e4}\\x{02ec}\\x{02ee}\\x{0370}-\\x{0374}\\x{0376}\\x{0377}\\x{037a}-\\x{037d}\\x{0386}\\x{0388}-\\x{038a}\\x{038c}\\x{038e}-\\x{03a1}\\x{03a3}-\\x{03f5}\\x{03f7}-\\x{0481}\\x{048a}-\\x{0527}\\x{0531}-\\x{0556}\\x{0559}\\x{0561}-\\x{0587}\\x{05d0}-\\x{05ea}\\x{05f0}-\\x{05f2}\\x{0620}-\\x{064a}\\x{066e}\\x{066f}\\x{0671}-\\x{06d3}\\x{06d5}\\x{06e5}\\x{06e6}\\x{06ee}\\x{06ef}\\x{06fa}-\\x{06fc}\\x{06ff}\\x{0710}\\x{0712}-\\x{072f}\\x{074d}-\\x{07a5}\\x{07b1}\\x{07ca}-\\x{07ea}\\x{07f4}\\x{07f5}\\x{07fa}\\x{0800}-\\x{0815}\\x{081a}\\x{0824}\\x{0828}\\x{0840}-\\x{0858}\\x{08a0}\\x{08a2}-\\x{08ac}\\x{0904}-\\x{0939}\\x{093d}\\x{0950}\\x{0958}-\\x{0961}\\x{0971}-\\x{0977}\\x{0979}-\\x{097f}\\x{0985}-\\x{098c}\\x{098f}\\x{0990}\\x{0993}-\\x{09a8}\\x{09aa}-\\x{09b0}\\x{09b2}\\x{09b6}-\\x{09b9}\\x{09bd}\\x{09ce}\\x{09dc}\\x{09dd}\\x{09df}-\\x{09e1}\\x{09f0}\\x{09f1}\\x{0a05}-\\x{0a0a}\\x{0a0f}\\x{0a10}\\x{0a13}-\\x{0a28}\\x{0a2a}-\\x{0a30}\\x{0a32}\\x{0a33}\\x{0a35}\\x{0a36}\\x{0a38}\\x{0a39}\\x{0a59}-\\x{0a5c}\\x{0a5e}\\x{0a72}-\\x{0a74}\\x{0a85}-\\x{0a8d}\\x{0a8f}-\\x{0a91}\\x{0a93}-\\x{0aa8}\\x{0aaa}-\\x{0ab0}\\x{0ab2}\\x{0ab3}\\x{0ab5}-\\x{0ab9}\\x{0abd}\\x{0ad0}\\x{0ae0}\\x{0ae1}\\x{0b05}-\\x{0b0c}\\x{0b0f}\\x{0b10}\\x{0b13}-\\x{0b28}\\x{0b2a}-\\x{0b30}\\x{0b32}\\x{0b33}\\x{0b35}-\\x{0b39}\\x{0b3d}\\x{0b5c}\\x{0b5d}\\x{0b5f}-\\x{0b61}\\x{0b71}\\x{0b83}\\x{0b85}-\\x{0b8a}\\x{0b8e}-\\x{0b90}\\x{0b92}-\\x{0b95}\\x{0b99}\\x{0b9a}\\x{0b9c}\\x{0b9e}\\x{0b9f}\\x{0ba3}\\x{0ba4}\\x{0ba8}-\\x{0baa}\\x{0bae}-\\x{0bb9}\\x{0bd0}\\x{0c05}-\\x{0c0c}\\x{0c0e}-\\x{0c10}\\x{0c12}-\\x{0c28}\\x{0c2a}-\\x{0c33}\\x{0c35}-\\x{0c39}\\x{0c3d}\\x{0c58}\\x{0c59}\\x{0c60}\\x{0c61}\\x{0c85}-\\x{0c8c}\\x{0c8e}-\\x{0c90}\\x{0c92}-\\x{0ca8}\\x{0caa}-\\x{0cb3}\\x{0cb5}-\\x{0cb9}\\x{0cbd}\\x{0cde}\\x{0ce0}\\x{0ce1}\\x{0cf1}\\x{0cf2}\\x{0d05}-\\x{0d0c}\\x{0d0e}-\\x{0d10}\\x{0d12}-\\x{0d3a}\\x{0d3d}\\x{0d4e}\\x{0d60}\\x{0d61}\\x{0d7a}-\\x{0d7f}\\x{0d85}-\\x{0d96}\\x{0d9a}-\\x{0db1}\\x{0db3}-\\x{0dbb}\\x{0dbd}\\x{0dc0}-\\x{0dc6}\\x{0e01}-\\x{0e30}\\x{0e32}\\x{0e33}\\x{0e40}-\\x{0e46}\\x{0e81}\\x{0e82}\\x{0e84}\\x{0e87}\\x{0e88}\\x{0e8a}\\x{0e8d}\\x{0e94}-\\x{0e97}\\x{0e99}-\\x{0e9f}\\x{0ea1}-\\x{0ea3}\\x{0ea5}\\x{0ea7}\\x{0eaa}\\x{0eab}\\x{0ead}-\\x{0eb0}\\x{0eb2}\\x{0eb3}\\x{0ebd}\\x{0ec0}-\\x{0ec4}\\x{0ec6}\\x{0edc}-\\x{0edf}\\x{0f00}\\x{0f40}-\\x{0f47}\\x{0f49}-\\x{0f6c}\\x{0f88}-\\x{0f8c}\\x{1000}-\\x{102a}\\x{103f}\\x{1050}-\\x{1055}\\x{105a}-\\x{105d}\\x{1061}\\x{1065}\\x{1066}\\x{106e}-\\x{1070}\\x{1075}-\\x{1081}\\x{108e}\\x{10a0}-\\x{10c5}\\x{10c7}\\x{10cd}\\x{10d0}-\\x{10fa}\\x{10fc}-\\x{1248}\\x{124a}-\\x{124d}\\x{1250}-\\x{1256}\\x{1258}\\x{125a}-\\x{125d}\\x{1260}-\\x{1288}\\x{128a}-\\x{128d}\\x{1290}-\\x{12b0}\\x{12b2}-\\x{12b5}\\x{12b8}-\\x{12be}\\x{12c0}\\x{12c2}-\\x{12c5}\\x{12c8}-\\x{12d6}\\x{12d8}-\\x{1310}\\x{1312}-\\x{1315}\\x{1318}-\\x{135a}\\x{1380}-\\x{138f}\\x{13a0}-\\x{13f4}\\x{1401}-\\x{166c}\\x{166f}-\\x{167f}\\x{1681}-\\x{169a}\\x{16a0}-\\x{16ea}\\x{16ee}-\\x{16f0}\\x{1700}-\\x{170c}\\x{170e}-\\x{1711}\\x{1720}-\\x{1731}\\x{1740}-\\x{1751}\\x{1760}-\\x{176c}\\x{176e}-\\x{1770}\\x{1780}-\\x{17b3}\\x{17d7}\\x{17dc}\\x{1820}-\\x{1877}\\x{1880}-\\x{18a8}\\x{18aa}\\x{18b0}-\\x{18f5}\\x{1900}-\\x{191c}\\x{1950}-\\x{196d}\\x{1970}-\\x{1974}\\x{1980}-\\x{19ab}\\x{19c1}-\\x{19c7}\\x{1a00}-\\x{1a16}\\x{1a20}-\\x{1a54}\\x{1aa7}\\x{1b05}-\\x{1b33}\\x{1b45}-\\x{1b4b}\\x{1b83}-\\x{1ba0}\\x{1bae}\\x{1baf}\\x{1bba}-\\x{1be5}\\x{1c00}-\\x{1c23}\\x{1c4d}-\\x{1c4f}\\x{1c5a}-\\x{1c7d}\\x{1ce9}-\\x{1cec}\\x{1cee}-\\x{1cf1}\\x{1cf5}\\x{1cf6}\\x{1d00}-\\x{1dbf}\\x{1e00}-\\x{1f15}\\x{1f18}-\\x{1f1d}\\x{1f20}-\\x{1f45}\\x{1f48}-\\x{1f4d}\\x{1f50}-\\x{1f57}\\x{1f59}\\x{1f5b}\\x{1f5d}\\x{1f5f}-\\x{1f7d}\\x{1f80}-\\x{1fb4}\\x{1fb6}-\\x{1fbc}\\x{1fbe}\\x{1fc2}-\\x{1fc4}\\x{1fc6}-\\x{1fcc}\\x{1fd0}-\\x{1fd3}\\x{1fd6}-\\x{1fdb}\\x{1fe0}-\\x{1fec}\\x{1ff2}-\\x{1ff4}\\x{1ff6}-\\x{1ffc}\\x{2071}\\x{207f}\\x{2090}-\\x{209c}\\x{2102}\\x{2107}\\x{210a}-\\x{2113}\\x{2115}\\x{2119}-\\x{211d}\\x{2124}\\x{2126}\\x{2128}\\x{212a}-\\x{212d}\\x{212f}-\\x{2139}\\x{213c}-\\x{213f}\\x{2145}-\\x{2149}\\x{214e}\\x{2160}-\\x{2188}\\x{2c00}-\\x{2c2e}\\x{2c30}-\\x{2c5e}\\x{2c60}-\\x{2ce4}\\x{2ceb}-\\x{2cee}\\x{2cf2}\\x{2cf3}\\x{2d00}-\\x{2d25}\\x{2d27}\\x{2d2d}\\x{2d30}-\\x{2d67}\\x{2d6f}\\x{2d80}-\\x{2d96}\\x{2da0}-\\x{2da6}\\x{2da8}-\\x{2dae}\\x{2db0}-\\x{2db6}\\x{2db8}-\\x{2dbe}\\x{2dc0}-\\x{2dc6}\\x{2dc8}-\\x{2dce}\\x{2dd0}-\\x{2dd6}\\x{2dd8}-\\x{2dde}\\x{2e2f}\\x{3005}-\\x{3007}\\x{3021}-\\x{3029}\\x{3031}-\\x{3035}\\x{3038}-\\x{303c}\\x{3041}-\\x{3096}\\x{309d}-\\x{309f}\\x{30a1}-\\x{30fa}\\x{30fc}-\\x{30ff}\\x{3105}-\\x{312d}\\x{3131}-\\x{318e}\\x{31a0}-\\x{31ba}\\x{31f0}-\\x{31ff}\\x{3400}-\\x{4db5}\\x{4e00}-\\x{9fcc}\\x{a000}-\\x{a48c}\\x{a4d0}-\\x{a4fd}\\x{a500}-\\x{a60c}\\x{a610}-\\x{a61f}\\x{a62a}\\x{a62b}\\x{a640}-\\x{a66e}\\x{a67f}-\\x{a697}\\x{a6a0}-\\x{a6ef}\\x{a717}-\\x{a71f}\\x{a722}-\\x{a788}\\x{a78b}-\\x{a78e}\\x{a790}-\\x{a793}\\x{a7a0}-\\x{a7aa}\\x{a7f8}-\\x{a801}\\x{a803}-\\x{a805}\\x{a807}-\\x{a80a}\\x{a80c}-\\x{a822}\\x{a840}-\\x{a873}\\x{a882}-\\x{a8b3}\\x{a8f2}-\\x{a8f7}\\x{a8fb}\\x{a90a}-\\x{a925}\\x{a930}-\\x{a946}\\x{a960}-\\x{a97c}\\x{a984}-\\x{a9b2}\\x{a9cf}\\x{aa00}-\\x{aa28}\\x{aa40}-\\x{aa42}\\x{aa44}-\\x{aa4b}\\x{aa60}-\\x{aa76}\\x{aa7a}\\x{aa80}-\\x{aaaf}\\x{aab1}\\x{aab5}\\x{aab6}\\x{aab9}-\\x{aabd}\\x{aac0}\\x{aac2}\\x{aadb}-\\x{aadd}\\x{aae0}-\\x{aaea}\\x{aaf2}-\\x{aaf4}\\x{ab01}-\\x{ab06}\\x{ab09}-\\x{ab0e}\\x{ab11}-\\x{ab16}\\x{ab20}-\\x{ab26}\\x{ab28}-\\x{ab2e}\\x{abc0}-\\x{abe2}\\x{ac00}-\\x{d7a3}\\x{d7b0}-\\x{d7c6}\\x{d7cb}-\\x{d7fb}\\x{f900}-\\x{fa6d}\\x{fa70}-\\x{fad9}\\x{fb00}-\\x{fb06}\\x{fb13}-\\x{fb17}\\x{fb1d}\\x{fb1f}-\\x{fb28}\\x{fb2a}-\\x{fb36}\\x{fb38}-\\x{fb3c}\\x{fb3e}\\x{fb40}\\x{fb41}\\x{fb43}\\x{fb44}\\x{fb46}-\\x{fbb1}\\x{fbd3}-\\x{fd3d}\\x{fd50}-\\x{fd8f}\\x{fd92}-\\x{fdc7}\\x{fdf0}-\\x{fdfb}\\x{fe70}-\\x{fe74}\\x{fe76}-\\x{fefc}\\x{ff21}-\\x{ff3a}\\x{ff41}-\\x{ff5a}\\x{ff66}-\\x{ffbe}\\x{ffc2}-\\x{ffc7}\\x{ffca}-\\x{ffcf}\\x{ffd2}-\\x{ffd7}\\x{ffda}-\\x{ffdc}0-9\\x{0300}-\\x{036f}\\x{0483}-\\x{0487}\\x{0591}-\\x{05bd}\\x{05bf}\\x{05c1}\\x{05c2}\\x{05c4}\\x{05c5}\\x{05c7}\\x{0610}-\\x{061a}\\x{064b}-\\x{0669}\\x{0670}\\x{06d6}-\\x{06dc}\\x{06df}-\\x{06e4}\\x{06e7}\\x{06e8}\\x{06ea}-\\x{06ed}\\x{06f0}-\\x{06f9}\\x{0711}\\x{0730}-\\x{074a}\\x{07a6}-\\x{07b0}\\x{07c0}-\\x{07c9}\\x{07eb}-\\x{07f3}\\x{0816}-\\x{0819}\\x{081b}-\\x{0823}\\x{0825}-\\x{0827}\\x{0829}-\\x{082d}\\x{0859}-\\x{085b}\\x{08e4}-\\x{08fe}\\x{0900}-\\x{0903}\\x{093a}-\\x{093c}\\x{093e}-\\x{094f}\\x{0951}-\\x{0957}\\x{0962}\\x{0963}\\x{0966}-\\x{096f}\\x{0981}-\\x{0983}\\x{09bc}\\x{09be}-\\x{09c4}\\x{09c7}\\x{09c8}\\x{09cb}-\\x{09cd}\\x{09d7}\\x{09e2}\\x{09e3}\\x{09e6}-\\x{09ef}\\x{0a01}-\\x{0a03}\\x{0a3c}\\x{0a3e}-\\x{0a42}\\x{0a47}\\x{0a48}\\x{0a4b}-\\x{0a4d}\\x{0a51}\\x{0a66}-\\x{0a71}\\x{0a75}\\x{0a81}-\\x{0a83}\\x{0abc}\\x{0abe}-\\x{0ac5}\\x{0ac7}-\\x{0ac9}\\x{0acb}-\\x{0acd}\\x{0ae2}\\x{0ae3}\\x{0ae6}-\\x{0aef}\\x{0b01}-\\x{0b03}\\x{0b3c}\\x{0b3e}-\\x{0b44}\\x{0b47}\\x{0b48}\\x{0b4b}-\\x{0b4d}\\x{0b56}\\x{0b57}\\x{0b62}\\x{0b63}\\x{0b66}-\\x{0b6f}\\x{0b82}\\x{0bbe}-\\x{0bc2}\\x{0bc6}-\\x{0bc8}\\x{0bca}-\\x{0bcd}\\x{0bd7}\\x{0be6}-\\x{0bef}\\x{0c01}-\\x{0c03}\\x{0c3e}-\\x{0c44}\\x{0c46}-\\x{0c48}\\x{0c4a}-\\x{0c4d}\\x{0c55}\\x{0c56}\\x{0c62}\\x{0c63}\\x{0c66}-\\x{0c6f}\\x{0c82}\\x{0c83}\\x{0cbc}\\x{0cbe}-\\x{0cc4}\\x{0cc6}-\\x{0cc8}\\x{0cca}-\\x{0ccd}\\x{0cd5}\\x{0cd6}\\x{0ce2}\\x{0ce3}\\x{0ce6}-\\x{0cef}\\x{0d02}\\x{0d03}\\x{0d3e}-\\x{0d44}\\x{0d46}-\\x{0d48}\\x{0d4a}-\\x{0d4d}\\x{0d57}\\x{0d62}\\x{0d63}\\x{0d66}-\\x{0d6f}\\x{0d82}\\x{0d83}\\x{0dca}\\x{0dcf}-\\x{0dd4}\\x{0dd6}\\x{0dd8}-\\x{0ddf}\\x{0df2}\\x{0df3}\\x{0e31}\\x{0e34}-\\x{0e3a}\\x{0e47}-\\x{0e4e}\\x{0e50}-\\x{0e59}\\x{0eb1}\\x{0eb4}-\\x{0eb9}\\x{0ebb}\\x{0ebc}\\x{0ec8}-\\x{0ecd}\\x{0ed0}-\\x{0ed9}\\x{0f18}\\x{0f19}\\x{0f20}-\\x{0f29}\\x{0f35}\\x{0f37}\\x{0f39}\\x{0f3e}\\x{0f3f}\\x{0f71}-\\x{0f84}\\x{0f86}\\x{0f87}\\x{0f8d}-\\x{0f97}\\x{0f99}-\\x{0fbc}\\x{0fc6}\\x{102b}-\\x{103e}\\x{1040}-\\x{1049}\\x{1056}-\\x{1059}\\x{105e}-\\x{1060}\\x{1062}-\\x{1064}\\x{1067}-\\x{106d}\\x{1071}-\\x{1074}\\x{1082}-\\x{108d}\\x{108f}-\\x{109d}\\x{135d}-\\x{135f}\\x{1712}-\\x{1714}\\x{1732}-\\x{1734}\\x{1752}\\x{1753}\\x{1772}\\x{1773}\\x{17b4}-\\x{17d3}\\x{17dd}\\x{17e0}-\\x{17e9}\\x{180b}-\\x{180d}\\x{1810}-\\x{1819}\\x{18a9}\\x{1920}-\\x{192b}\\x{1930}-\\x{193b}\\x{1946}-\\x{194f}\\x{19b0}-\\x{19c0}\\x{19c8}\\x{19c9}\\x{19d0}-\\x{19d9}\\x{1a17}-\\x{1a1b}\\x{1a55}-\\x{1a5e}\\x{1a60}-\\x{1a7c}\\x{1a7f}-\\x{1a89}\\x{1a90}-\\x{1a99}\\x{1b00}-\\x{1b04}\\x{1b34}-\\x{1b44}\\x{1b50}-\\x{1b59}\\x{1b6b}-\\x{1b73}\\x{1b80}-\\x{1b82}\\x{1ba1}-\\x{1bad}\\x{1bb0}-\\x{1bb9}\\x{1be6}-\\x{1bf3}\\x{1c24}-\\x{1c37}\\x{1c40}-\\x{1c49}\\x{1c50}-\\x{1c59}\\x{1cd0}-\\x{1cd2}\\x{1cd4}-\\x{1ce8}\\x{1ced}\\x{1cf2}-\\x{1cf4}\\x{1dc0}-\\x{1de6}\\x{1dfc}-\\x{1dff}\\x{200c}\\x{200d}\\x{203f}\\x{2040}\\x{2054}\\x{20d0}-\\x{20dc}\\x{20e1}\\x{20e5}-\\x{20f0}\\x{2cef}-\\x{2cf1}\\x{2d7f}\\x{2de0}-\\x{2dff}\\x{302a}-\\x{302f}\\x{3099}\\x{309a}\\x{a620}-\\x{a629}\\x{a66f}\\x{a674}-\\x{a67d}\\x{a69f}\\x{a6f0}\\x{a6f1}\\x{a802}\\x{a806}\\x{a80b}\\x{a823}-\\x{a827}\\x{a880}\\x{a881}\\x{a8b4}-\\x{a8c4}\\x{a8d0}-\\x{a8d9}\\x{a8e0}-\\x{a8f1}\\x{a900}-\\x{a909}\\x{a926}-\\x{a92d}\\x{a947}-\\x{a953}\\x{a980}-\\x{a983}\\x{a9b3}-\\x{a9c0}\\x{a9d0}-\\x{a9d9}\\x{aa29}-\\x{aa36}\\x{aa43}\\x{aa4c}\\x{aa4d}\\x{aa50}-\\x{aa59}\\x{aa7b}\\x{aab0}\\x{aab2}-\\x{aab4}\\x{aab7}\\x{aab8}\\x{aabe}\\x{aabf}\\x{aac1}\\x{aaeb}-\\x{aaef}\\x{aaf5}\\x{aaf6}\\x{abe3}-\\x{abea}\\x{abec}\\x{abed}\\x{abf0}-\\x{abf9}\\x{fb1e}\\x{fe00}-\\x{fe0f}\\x{fe20}-\\x{fe26}\\x{fe33}\\x{fe34}\\x{fe4d}-\\x{fe4f}\\x{ff10}-\\x{ff19}\\x{ff3f}]*\\b';\n\n    /**\n     * Full list of JavaScript reserved words.\n     * Will be loaded from /data/js/keywords_reserved.txt.\n     *\n     * @see https://mathiasbynens.be/notes/reserved-keywords\n     *\n     * @var string[]\n     */\n    protected $keywordsReserved = array();\n\n    /**\n     * List of JavaScript reserved words that accept a <variable, value, ...>\n     * after them. Some end of lines are not the end of a statement, like with\n     * these keywords.\n     *\n     * E.g.: we shouldn't insert a ; after this else\n     * else\n     *     console.log('this is quite fine')\n     *\n     * Will be loaded from /data/js/keywords_before.txt\n     *\n     * @var string[]\n     */\n    protected $keywordsBefore = array();\n\n    /**\n     * List of JavaScript reserved words that accept a <variable, value, ...>\n     * before them. Some end of lines are not the end of a statement, like when\n     * continued by one of these keywords on the newline.\n     *\n     * E.g.: we shouldn't insert a ; before this instanceof\n     * variable\n     *     instanceof String\n     *\n     * Will be loaded from /data/js/keywords_after.txt\n     *\n     * @var string[]\n     */\n    protected $keywordsAfter = array();\n\n    /**\n     * List of all JavaScript operators.\n     *\n     * Will be loaded from /data/js/operators.txt\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators\n     *\n     * @var string[]\n     */\n    protected $operators = array();\n\n    /**\n     * List of JavaScript operators that accept a <variable, value, ...> after\n     * them. Some end of lines are not the end of a statement, like with these\n     * operators.\n     *\n     * Note: Most operators are fine, we've only removed ++ and --.\n     * ++ & -- have to be joined with the value they're in-/decrementing.\n     *\n     * Will be loaded from /data/js/operators_before.txt\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators\n     *\n     * @var string[]\n     */\n    protected $operatorsBefore = array();\n\n    /**\n     * List of JavaScript operators that accept a <variable, value, ...> before\n     * them. Some end of lines are not the end of a statement, like when\n     * continued by one of these operators on the newline.\n     *\n     * Note: Most operators are fine, we've only removed ), ], ++, --, ! and ~.\n     * There can't be a newline separating ! or ~ and whatever it is negating.\n     * ++ & -- have to be joined with the value they're in-/decrementing.\n     * ) & ] are \"special\" in that they have lots or usecases. () for example\n     * is used for function calls, for grouping, in if () and for (), ...\n     *\n     * Will be loaded from /data/js/operators_after.txt\n     *\n     * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators\n     *\n     * @var string[]\n     */\n    protected $operatorsAfter = array();\n\n    /**\n     * {@inheritdoc}\n     */\n    public function __construct()\n    {\n        call_user_func_array(array('parent', '__construct'), func_get_args());\n\n        $dataDir = __DIR__.'/../data/js/';\n        $options = FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES;\n        $this->keywordsReserved = file($dataDir.'keywords_reserved.txt', $options);\n        $this->keywordsBefore = file($dataDir.'keywords_before.txt', $options);\n        $this->keywordsAfter = file($dataDir.'keywords_after.txt', $options);\n        $this->operators = file($dataDir.'operators.txt', $options);\n        $this->operatorsBefore = file($dataDir.'operators_before.txt', $options);\n        $this->operatorsAfter = file($dataDir.'operators_after.txt', $options);\n    }\n\n    /**\n     * Minify the data.\n     * Perform JS optimizations.\n     *\n     * @param string[optional] $path Path to write the data to\n     *\n     * @return string The minified data\n     */\n    public function execute($path = null)\n    {\n        $content = '';\n\n        /*\n         * Let's first take out strings, comments and regular expressions.\n         * All of these can contain JS code-like characters, and we should make\n         * sure any further magic ignores anything inside of these.\n         *\n         * Consider this example, where we should not strip any whitespace:\n         * var str = \"a   test\";\n         *\n         * Comments will be removed altogether, strings and regular expressions\n         * will be replaced by placeholder text, which we'll restore later.\n         */\n        $this->extractStrings('\\'\"`');\n        $this->stripComments();\n        $this->extractRegex();\n\n        // loop files\n        foreach ($this->data as $source => $js) {\n            // take out strings, comments & regex (for which we've registered\n            // the regexes just a few lines earlier)\n            $js = $this->replace($js);\n\n            $js = $this->propertyNotation($js);\n            $js = $this->shortenBools($js);\n            $js = $this->stripWhitespace($js);\n\n            // combine js: separating the scripts by a ;\n            $content .= $js.\";\";\n        }\n\n        // clean up leftover `;`s from the combination of multiple scripts\n        $content = ltrim($content, ';');\n        $content = (string) substr($content, 0, -1);\n\n        /*\n         * Earlier, we extracted strings & regular expressions and replaced them\n         * with placeholder text. This will restore them.\n         */\n        $content = $this->restoreExtractedData($content);\n\n        return $content;\n    }\n\n    /**\n     * Strip comments from source code.\n     */\n    protected function stripComments()\n    {\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $callback = function ($match) use ($minifier) {\n            $count = count($minifier->extracted);\n            $placeholder = '/*'.$count.'*/';\n            $minifier->extracted[$placeholder] = $match[0];\n\n            return $placeholder;\n        };\n        // multi-line comments\n        $this->registerPattern('/\\n?\\/\\*(!|.*?@license|.*?@preserve).*?\\*\\/\\n?/s', $callback);\n        $this->registerPattern('/\\/\\*.*?\\*\\//s', '');\n\n        // single-line comments\n        $this->registerPattern('/\\/\\/.*$/m', '');\n    }\n\n    /**\n     * JS can have /-delimited regular expressions, like: /ab+c/.match(string).\n     *\n     * The content inside the regex can contain characters that may be confused\n     * for JS code: e.g. it could contain whitespace it needs to match & we\n     * don't want to strip whitespace in there.\n     *\n     * The regex can be pretty simple: we don't have to care about comments,\n     * (which also use slashes) because stripComments() will have stripped those\n     * already.\n     *\n     * This method will replace all string content with simple REGEX#\n     * placeholder text, so we've rid all regular expressions from characters\n     * that may be misinterpreted. Original regex content will be saved in\n     * $this->extracted and after doing all other minifying, we can restore the\n     * original content via restoreRegex()\n     */\n    protected function extractRegex()\n    {\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $callback = function ($match) use ($minifier) {\n            $count = count($minifier->extracted);\n            $placeholder = '\"'.$count.'\"';\n            $minifier->extracted[$placeholder] = $match[0];\n\n            return $placeholder;\n        };\n\n        // match all chars except `/` and `\\`\n        // `\\` is allowed though, along with whatever char follows (which is the\n        // one being escaped)\n        // this should allow all chars, except for an unescaped `/` (= the one\n        // closing the regex)\n        // then also ignore bare `/` inside `[]`, where they don't need to be\n        // escaped: anything inside `[]` can be ignored safely\n        $pattern = '\\\\/(?!\\*)(?:[^\\\\[\\\\/\\\\\\\\\\n\\r]++|(?:\\\\\\\\.)++|(?:\\\\[(?:[^\\\\]\\\\\\\\\\n\\r]++|(?:\\\\\\\\.)++)++\\\\])++)++\\\\/[gimuy]*';\n\n        // a regular expression can only be followed by a few operators or some\n        // of the RegExp methods (a `\\` followed by a variable or value is\n        // likely part of a division, not a regex)\n        $keywords = array('do', 'in', 'new', 'else', 'throw', 'yield', 'delete', 'return',  'typeof');\n        $before = '(^|[=:,;\\+\\-\\*\\/\\}\\(\\{\\[&\\|!]|'.implode('|', $keywords).')\\s*';\n        $propertiesAndMethods = array(\n            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Properties_2\n            'constructor',\n            'flags',\n            'global',\n            'ignoreCase',\n            'multiline',\n            'source',\n            'sticky',\n            'unicode',\n            // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#Methods_2\n            'compile(',\n            'exec(',\n            'test(',\n            'toSource(',\n            'toString(',\n        );\n        $delimiters = array_fill(0, count($propertiesAndMethods), '/');\n        $propertiesAndMethods = array_map('preg_quote', $propertiesAndMethods, $delimiters);\n        $after = '(?=\\s*([\\.,;\\)\\}&\\|+]|\\/\\/|$|\\.('.implode('|', $propertiesAndMethods).')))';\n        $this->registerPattern('/'.$before.'\\K'.$pattern.$after.'/', $callback);\n\n        // regular expressions following a `)` are rather annoying to detect...\n        // quite often, `/` after `)` is a division operator & if it happens to\n        // be followed by another one (or a comment), it is likely to be\n        // confused for a regular expression\n        // however, it's perfectly possible for a regex to follow a `)`: after\n        // a single-line `if()`, `while()`, ... statement, for example\n        // since, when they occur like that, they're always the start of a\n        // statement, there's only a limited amount of ways they can be useful:\n        // by calling the regex methods directly\n        // if a regex following `)` is not followed by `.<property or method>`,\n        // it's quite likely not a regex\n        $before = '\\)\\s*';\n        $after = '(?=\\s*\\.('.implode('|', $propertiesAndMethods).'))';\n        $this->registerPattern('/'.$before.'\\K'.$pattern.$after.'/', $callback);\n\n        // 1 more edge case: a regex can be followed by a lot more operators or\n        // keywords if there's a newline (ASI) in between, where the operator\n        // actually starts a new statement\n        // (https://github.com/matthiasmullie/minify/issues/56)\n        $operators = $this->getOperatorsForRegex($this->operatorsBefore, '/');\n        $operators += $this->getOperatorsForRegex($this->keywordsReserved, '/');\n        $after = '(?=\\s*\\n\\s*('.implode('|', $operators).'))';\n        $this->registerPattern('/'.$pattern.$after.'/', $callback);\n    }\n\n    /**\n     * Strip whitespace.\n     *\n     * We won't strip *all* whitespace, but as much as possible. The thing that\n     * we'll preserve are newlines we're unsure about.\n     * JavaScript doesn't require statements to be terminated with a semicolon.\n     * It will automatically fix missing semicolons with ASI (automatic semi-\n     * colon insertion) at the end of line causing errors (without semicolon.)\n     *\n     * Because it's sometimes hard to tell if a newline is part of a statement\n     * that should be terminated or not, we'll just leave some of them alone.\n     *\n     * @param string $content The content to strip the whitespace for\n     *\n     * @return string\n     */\n    protected function stripWhitespace($content)\n    {\n        // uniform line endings, make them all line feed\n        $content = str_replace(array(\"\\r\\n\", \"\\r\"), \"\\n\", $content);\n\n        // collapse all non-line feed whitespace into a single space\n        $content = preg_replace('/[^\\S\\n]+/', ' ', $content);\n\n        // strip leading & trailing whitespace\n        $content = str_replace(array(\" \\n\", \"\\n \"), \"\\n\", $content);\n\n        // collapse consecutive line feeds into just 1\n        $content = preg_replace('/\\n+/', \"\\n\", $content);\n\n        $operatorsBefore = $this->getOperatorsForRegex($this->operatorsBefore, '/');\n        $operatorsAfter = $this->getOperatorsForRegex($this->operatorsAfter, '/');\n        $operators = $this->getOperatorsForRegex($this->operators, '/');\n        $keywordsBefore = $this->getKeywordsForRegex($this->keywordsBefore, '/');\n        $keywordsAfter = $this->getKeywordsForRegex($this->keywordsAfter, '/');\n\n        // strip whitespace that ends in (or next line begin with) an operator\n        // that allows statements to be broken up over multiple lines\n        unset($operatorsBefore['+'], $operatorsBefore['-'], $operatorsAfter['+'], $operatorsAfter['-']);\n        $content = preg_replace(\n            array(\n                '/('.implode('|', $operatorsBefore).')\\s+/',\n                '/\\s+('.implode('|', $operatorsAfter).')/',\n            ),\n            '\\\\1',\n            $content\n        );\n\n        // make sure + and - can't be mistaken for, or joined into ++ and --\n        $content = preg_replace(\n            array(\n                '/(?<![\\+\\-])\\s*([\\+\\-])(?![\\+\\-])/',\n                '/(?<![\\+\\-])([\\+\\-])\\s*(?![\\+\\-])/',\n            ),\n            '\\\\1',\n            $content\n        );\n\n        // collapse whitespace around reserved words into single space\n        $content = preg_replace('/(^|[;\\}\\s])\\K('.implode('|', $keywordsBefore).')\\s+/', '\\\\2 ', $content);\n        $content = preg_replace('/\\s+('.implode('|', $keywordsAfter).')(?=([;\\{\\s]|$))/', ' \\\\1', $content);\n\n        /*\n         * We didn't strip whitespace after a couple of operators because they\n         * could be used in different contexts and we can't be sure it's ok to\n         * strip the newlines. However, we can safely strip any non-line feed\n         * whitespace that follows them.\n         */\n        $operatorsDiffBefore = array_diff($operators, $operatorsBefore);\n        $operatorsDiffAfter = array_diff($operators, $operatorsAfter);\n        $content = preg_replace('/('.implode('|', $operatorsDiffBefore).')[^\\S\\n]+/', '\\\\1', $content);\n        $content = preg_replace('/[^\\S\\n]+('.implode('|', $operatorsDiffAfter).')/', '\\\\1', $content);\n\n        /*\n         * Whitespace after `return` can be omitted in a few occasions\n         * (such as when followed by a string or regex)\n         * Same for whitespace in between `)` and `{`, or between `{` and some\n         * keywords.\n         */\n        $content = preg_replace('/\\breturn\\s+([\"\\'\\/\\+\\-])/', 'return$1', $content);\n        $content = preg_replace('/\\)\\s+\\{/', '){', $content);\n        $content = preg_replace('/}\\n(else|catch|finally)\\b/', '}$1', $content);\n\n        /*\n         * Get rid of double semicolons, except where they can be used like:\n         * \"for(v=1,_=b;;)\", \"for(v=1;;v++)\" or \"for(;;ja||(ja=true))\".\n         * I'll safeguard these double semicolons inside for-loops by\n         * temporarily replacing them with an invalid condition: they won't have\n         * a double semicolon and will be easy to spot to restore afterwards.\n         */\n        $content = preg_replace('/\\bfor\\(([^;]*);;([^;]*)\\)/', 'for(\\\\1;-;\\\\2)', $content);\n        $content = preg_replace('/;+/', ';', $content);\n        $content = preg_replace('/\\bfor\\(([^;]*);-;([^;]*)\\)/', 'for(\\\\1;;\\\\2)', $content);\n\n        /*\n         * Next, we'll be removing all semicolons where ASI kicks in.\n         * for-loops however, can have an empty body (ending in only a\n         * semicolon), like: `for(i=1;i<3;i++);`, of `for(i in list);`\n         * Here, nothing happens during the loop; it's just used to keep\n         * increasing `i`. With that ; omitted, the next line would be expected\n         * to be the for-loop's body... Same goes for while loops.\n         * I'm going to double that semicolon (if any) so after the next line,\n         * which strips semicolons here & there, we're still left with this one.\n         */\n        $content = preg_replace('/(for\\([^;\\{]*;[^;\\{]*;[^;\\{]*\\));(\\}|$)/s', '\\\\1;;\\\\2', $content);\n        $content = preg_replace('/(for\\([^;\\{]+\\s+in\\s+[^;\\{]+\\));(\\}|$)/s', '\\\\1;;\\\\2', $content);\n        /*\n         * Below will also keep `;` after a `do{}while();` along with `while();`\n         * While these could be stripped after do-while, detecting this\n         * distinction is cumbersome, so I'll play it safe and make sure `;`\n         * after any kind of `while` is kept.\n         */\n        $content = preg_replace('/(while\\([^;\\{]+\\));(\\}|$)/s', '\\\\1;;\\\\2', $content);\n\n        /*\n         * We also can't strip empty else-statements. Even though they're\n         * useless and probably shouldn't be in the code in the first place, we\n         * shouldn't be stripping the `;` that follows it as it breaks the code.\n         * We can just remove those useless else-statements completely.\n         *\n         * @see https://github.com/matthiasmullie/minify/issues/91\n         */\n        $content = preg_replace('/else;/s', '', $content);\n\n        /*\n         * We also don't really want to terminate statements followed by closing\n         * curly braces (which we've ignored completely up until now) or end-of-\n         * script: ASI will kick in here & we're all about minifying.\n         * Semicolons at beginning of the file don't make any sense either.\n         */\n        $content = preg_replace('/;(\\}|$)/s', '\\\\1', $content);\n        $content = ltrim($content, ';');\n\n        // get rid of remaining whitespace af beginning/end\n        return trim($content);\n    }\n\n    /**\n     * We'll strip whitespace around certain operators with regular expressions.\n     * This will prepare the given array by escaping all characters.\n     *\n     * @param string[] $operators\n     * @param string   $delimiter\n     *\n     * @return string[]\n     */\n    protected function getOperatorsForRegex(array $operators, $delimiter = '/')\n    {\n        // escape operators for use in regex\n        $delimiters = array_fill(0, count($operators), $delimiter);\n        $escaped = array_map('preg_quote', $operators, $delimiters);\n\n        $operators = array_combine($operators, $escaped);\n\n        // ignore + & - for now, they'll get special treatment\n        unset($operators['+'], $operators['-']);\n\n        // dot can not just immediately follow a number; it can be confused for\n        // decimal point, or calling a method on it, e.g. 42 .toString()\n        $operators['.'] = '(?<![0-9]\\s)\\.';\n\n        // don't confuse = with other assignment shortcuts (e.g. +=)\n        $chars = preg_quote('+-*\\=<>%&|', $delimiter);\n        $operators['='] = '(?<!['.$chars.'])\\=';\n\n        return $operators;\n    }\n\n    /**\n     * We'll strip whitespace around certain keywords with regular expressions.\n     * This will prepare the given array by escaping all characters.\n     *\n     * @param string[] $keywords\n     * @param string   $delimiter\n     *\n     * @return string[]\n     */\n    protected function getKeywordsForRegex(array $keywords, $delimiter = '/')\n    {\n        // escape keywords for use in regex\n        $delimiter = array_fill(0, count($keywords), $delimiter);\n        $escaped = array_map('preg_quote', $keywords, $delimiter);\n\n        // add word boundaries\n        array_walk($keywords, function ($value) {\n            return '\\b'.$value.'\\b';\n        });\n\n        $keywords = array_combine($keywords, $escaped);\n\n        return $keywords;\n    }\n\n    /**\n     * Replaces all occurrences of array['key'] by array.key.\n     *\n     * @param string $content\n     *\n     * @return string\n     */\n    protected function propertyNotation($content)\n    {\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $keywords = $this->keywordsReserved;\n        $callback = function ($match) use ($minifier, $keywords) {\n            $property = trim($minifier->extracted[$match[1]], '\\'\"');\n\n            /*\n             * Check if the property is a reserved keyword. In this context (as\n             * property of an object literal/array) it shouldn't matter, but IE8\n             * freaks out with \"Expected identifier\".\n             */\n            if (in_array($property, $keywords)) {\n                return $match[0];\n            }\n\n            /*\n             * See if the property is in a variable-like format (e.g.\n             * array['key-here'] can't be replaced by array.key-here since '-'\n             * is not a valid character there.\n             */\n            if (!preg_match('/^'.$minifier::REGEX_VARIABLE.'$/u', $property)) {\n                return $match[0];\n            }\n\n            return '.'.$property;\n        };\n\n        /*\n         * Figure out if previous character is a variable name (of the array\n         * we want to use property notation on) - this is to make sure\n         * standalone ['value'] arrays aren't confused for keys-of-an-array.\n         * We can (and only have to) check the last character, because PHP's\n         * regex implementation doesn't allow unfixed-length look-behind\n         * assertions.\n         */\n        preg_match('/(\\[[^\\]]+\\])[^\\]]*$/', static::REGEX_VARIABLE, $previousChar);\n        $previousChar = $previousChar[1];\n\n        /*\n         * Make sure word preceding the ['value'] is not a keyword, e.g.\n         * return['x']. Because -again- PHP's regex implementation doesn't allow\n         * unfixed-length look-behind assertions, I'm just going to do a lot of\n         * separate look-behind assertions, one for each keyword.\n         */\n        $keywords = $this->getKeywordsForRegex($keywords);\n        $keywords = '(?<!'.implode(')(?<!', $keywords).')';\n\n        return preg_replace_callback('/(?<='.$previousChar.'|\\])'.$keywords.'\\[\\s*(([\\'\"])[0-9]+\\\\2)\\s*\\]/u', $callback, $content);\n    }\n\n    /**\n     * Replaces true & false by !0 and !1.\n     *\n     * @param string $content\n     *\n     * @return string\n     */\n    protected function shortenBools($content)\n    {\n        /*\n         * 'true' or 'false' could be used as property names (which may be\n         * followed by whitespace) - we must not replace those!\n         * Since PHP doesn't allow variable-length (to account for the\n         * whitespace) lookbehind assertions, I need to capture the leading\n         * character and check if it's a `.`\n         */\n        $callback = function ($match) {\n            if (trim($match[1]) === '.') {\n                return $match[0];\n            }\n\n            return $match[1].($match[2] === 'true' ? '!0' : '!1');\n        };\n        $content = preg_replace_callback('/(^|.\\s*)\\b(true|false)\\b(?!:)/', $callback, $content);\n\n        // for(;;) is exactly the same as while(true), but shorter :)\n        $content = preg_replace('/\\bwhile\\(!0\\){/', 'for(;;){', $content);\n\n        // now make sure we didn't turn any do ... while(true) into do ... for(;;)\n        preg_match_all('/\\bdo\\b/', $content, $dos, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);\n\n        // go backward to make sure positional offsets aren't altered when $content changes\n        $dos = array_reverse($dos);\n        foreach ($dos as $do) {\n            $offsetDo = $do[0][1];\n\n            // find all `while` (now `for`) following `do`: one of those must be\n            // associated with the `do` and be turned back into `while`\n            preg_match_all('/\\bfor\\(;;\\)/', $content, $whiles, PREG_OFFSET_CAPTURE | PREG_SET_ORDER, $offsetDo);\n            foreach ($whiles as $while) {\n                $offsetWhile = $while[0][1];\n\n                $open = substr_count($content, '{', $offsetDo, $offsetWhile - $offsetDo);\n                $close = substr_count($content, '}', $offsetDo, $offsetWhile - $offsetDo);\n                if ($open === $close) {\n                    // only restore `while` if amount of `{` and `}` are the same;\n                    // otherwise, that `for` isn't associated with this `do`\n                    $content = substr_replace($content, 'while(!0)', $offsetWhile, strlen('for(;;)'));\n                    break;\n                }\n            }\n        }\n\n        return $content;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/minify/src/Minify.php",
    "content": "<?php\n/**\n * Abstract minifier class\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nnamespace MatthiasMullie\\Minify;\n\nuse MatthiasMullie\\Minify\\Exceptions\\IOException;\nuse Psr\\Cache\\CacheItemInterface;\n\n/**\n * Abstract minifier class.\n *\n * Please report bugs on https://github.com/matthiasmullie/minify/issues\n *\n * @package Minify\n * @author Matthias Mullie <minify@mullie.eu>\n * @copyright Copyright (c) 2012, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nabstract class Minify\n{\n    /**\n     * The data to be minified.\n     *\n     * @var string[]\n     */\n    protected $data = array();\n\n    /**\n     * Array of patterns to match.\n     *\n     * @var string[]\n     */\n    protected $patterns = array();\n\n    /**\n     * This array will hold content of strings and regular expressions that have\n     * been extracted from the JS source code, so we can reliably match \"code\",\n     * without having to worry about potential \"code-like\" characters inside.\n     *\n     * @var string[]\n     */\n    public $extracted = array();\n\n    /**\n     * Init the minify class - optionally, code may be passed along already.\n     */\n    public function __construct(/* $data = null, ... */)\n    {\n        // it's possible to add the source through the constructor as well ;)\n        if (func_num_args()) {\n            call_user_func_array(array($this, 'add'), func_get_args());\n        }\n    }\n\n    /**\n     * Add a file or straight-up code to be minified.\n     *\n     * @param string|string[] $data\n     *\n     * @return static\n     */\n    public function add($data /* $data = null, ... */)\n    {\n        // bogus \"usage\" of parameter $data: scrutinizer warns this variable is\n        // not used (we're using func_get_args instead to support overloading),\n        // but it still needs to be defined because it makes no sense to have\n        // this function without argument :)\n        $args = array($data) + func_get_args();\n\n        // this method can be overloaded\n        foreach ($args as $data) {\n            if (is_array($data)) {\n                call_user_func_array(array($this, 'add'), $data);\n                continue;\n            }\n\n            // redefine var\n            $data = (string) $data;\n\n            // load data\n            $value = $this->load($data);\n            $key = ($data != $value) ? $data : count($this->data);\n\n            // replace CR linefeeds etc.\n            // @see https://github.com/matthiasmullie/minify/pull/139\n            $value = str_replace(array(\"\\r\\n\", \"\\r\"), \"\\n\", $value);\n\n            // store data\n            $this->data[$key] = $value;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add a file to be minified.\n     *\n     * @param string|string[] $data\n     *\n     * @return static\n     *\n     * @throws IOException\n     */\n    public function addFile($data /* $data = null, ... */)\n    {\n        // bogus \"usage\" of parameter $data: scrutinizer warns this variable is\n        // not used (we're using func_get_args instead to support overloading),\n        // but it still needs to be defined because it makes no sense to have\n        // this function without argument :)\n        $args = array($data) + func_get_args();\n\n        // this method can be overloaded\n        foreach ($args as $path) {\n            if (is_array($path)) {\n                call_user_func_array(array($this, 'addFile'), $path);\n                continue;\n            }\n\n            // redefine var\n            $path = (string) $path;\n\n            // check if we can read the file\n            if (!$this->canImportFile($path)) {\n                throw new IOException('The file \"'.$path.'\" could not be opened for reading. Check if PHP has enough permissions.');\n            }\n\n            $this->add($path);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Minify the data & (optionally) saves it to a file.\n     *\n     * @param string[optional] $path Path to write the data to\n     *\n     * @return string The minified data\n     */\n    public function minify($path = null)\n    {\n        $content = $this->execute($path);\n\n        // save to path\n        if ($path !== null) {\n            $this->save($content, $path);\n        }\n\n        return $content;\n    }\n\n    /**\n     * Minify & gzip the data & (optionally) saves it to a file.\n     *\n     * @param string[optional] $path  Path to write the data to\n     * @param int[optional]    $level Compression level, from 0 to 9\n     *\n     * @return string The minified & gzipped data\n     */\n    public function gzip($path = null, $level = 9)\n    {\n        $content = $this->execute($path);\n        $content = gzencode($content, $level, FORCE_GZIP);\n\n        // save to path\n        if ($path !== null) {\n            $this->save($content, $path);\n        }\n\n        return $content;\n    }\n\n    /**\n     * Minify the data & write it to a CacheItemInterface object.\n     *\n     * @param CacheItemInterface $item Cache item to write the data to\n     *\n     * @return CacheItemInterface Cache item with the minifier data\n     */\n    public function cache(CacheItemInterface $item)\n    {\n        $content = $this->execute();\n        $item->set($content);\n\n        return $item;\n    }\n\n    /**\n     * Minify the data.\n     *\n     * @param string[optional] $path Path to write the data to\n     *\n     * @return string The minified data\n     */\n    abstract public function execute($path = null);\n\n    /**\n     * Load data.\n     *\n     * @param string $data Either a path to a file or the content itself\n     *\n     * @return string\n     */\n    protected function load($data)\n    {\n        // check if the data is a file\n        if ($this->canImportFile($data)) {\n            $data = file_get_contents($data);\n\n            // strip BOM, if any\n            if (substr($data, 0, 3) == \"\\xef\\xbb\\xbf\") {\n                $data = substr($data, 3);\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * Save to file.\n     *\n     * @param string $content The minified data\n     * @param string $path    The path to save the minified data to\n     *\n     * @throws IOException\n     */\n    protected function save($content, $path)\n    {\n        $handler = $this->openFileForWriting($path);\n\n        $this->writeToFile($handler, $content);\n\n        @fclose($handler);\n    }\n\n    /**\n     * Register a pattern to execute against the source content.\n     *\n     * @param string          $pattern     PCRE pattern\n     * @param string|callable $replacement Replacement value for matched pattern\n     */\n    protected function registerPattern($pattern, $replacement = '')\n    {\n        // study the pattern, we'll execute it more than once\n        $pattern .= 'S';\n\n        $this->patterns[] = array($pattern, $replacement);\n    }\n\n    /**\n     * We can't \"just\" run some regular expressions against JavaScript: it's a\n     * complex language. E.g. having an occurrence of // xyz would be a comment,\n     * unless it's used within a string. Of you could have something that looks\n     * like a 'string', but inside a comment.\n     * The only way to accurately replace these pieces is to traverse the JS one\n     * character at a time and try to find whatever starts first.\n     *\n     * @param string $content The content to replace patterns in\n     *\n     * @return string The (manipulated) content\n     */\n    protected function replace($content)\n    {\n        $processed = '';\n        $positions = array_fill(0, count($this->patterns), -1);\n        $matches = array();\n\n        while ($content) {\n            // find first match for all patterns\n            foreach ($this->patterns as $i => $pattern) {\n                list($pattern, $replacement) = $pattern;\n\n                // we can safely ignore patterns for positions we've unset earlier,\n                // because we know these won't show up anymore\n                if (array_key_exists($i, $positions) == false) {\n                    continue;\n                }\n\n                // no need to re-run matches that are still in the part of the\n                // content that hasn't been processed\n                if ($positions[$i] >= 0) {\n                    continue;\n                }\n\n                $match = null;\n                if (preg_match($pattern, $content, $match, PREG_OFFSET_CAPTURE)) {\n                    $matches[$i] = $match;\n\n                    // we'll store the match position as well; that way, we\n                    // don't have to redo all preg_matches after changing only\n                    // the first (we'll still know where those others are)\n                    $positions[$i] = $match[0][1];\n                } else {\n                    // if the pattern couldn't be matched, there's no point in\n                    // executing it again in later runs on this same content;\n                    // ignore this one until we reach end of content\n                    unset($matches[$i], $positions[$i]);\n                }\n            }\n\n            // no more matches to find: everything's been processed, break out\n            if (!$matches) {\n                $processed .= $content;\n                break;\n            }\n\n            // see which of the patterns actually found the first thing (we'll\n            // only want to execute that one, since we're unsure if what the\n            // other found was not inside what the first found)\n            $discardLength = min($positions);\n            $firstPattern = array_search($discardLength, $positions);\n            $match = $matches[$firstPattern][0][0];\n\n            // execute the pattern that matches earliest in the content string\n            list($pattern, $replacement) = $this->patterns[$firstPattern];\n            $replacement = $this->replacePattern($pattern, $replacement, $content);\n\n            // figure out which part of the string was unmatched; that's the\n            // part we'll execute the patterns on again next\n            $content = (string) substr($content, $discardLength);\n            $unmatched = (string) substr($content, strpos($content, $match) + strlen($match));\n\n            // move the replaced part to $processed and prepare $content to\n            // again match batch of patterns against\n            $processed .= substr($replacement, 0, strlen($replacement) - strlen($unmatched));\n            $content = $unmatched;\n\n            // first match has been replaced & that content is to be left alone,\n            // the next matches will start after this replacement, so we should\n            // fix their offsets\n            foreach ($positions as $i => $position) {\n                $positions[$i] -= $discardLength + strlen($match);\n            }\n        }\n\n        return $processed;\n    }\n\n    /**\n     * This is where a pattern is matched against $content and the matches\n     * are replaced by their respective value.\n     * This function will be called plenty of times, where $content will always\n     * move up 1 character.\n     *\n     * @param string          $pattern     Pattern to match\n     * @param string|callable $replacement Replacement value\n     * @param string          $content     Content to match pattern against\n     *\n     * @return string\n     */\n    protected function replacePattern($pattern, $replacement, $content)\n    {\n        if (is_callable($replacement)) {\n            return preg_replace_callback($pattern, $replacement, $content, 1, $count);\n        } else {\n            return preg_replace($pattern, $replacement, $content, 1, $count);\n        }\n    }\n\n    /**\n     * Strings are a pattern we need to match, in order to ignore potential\n     * code-like content inside them, but we just want all of the string\n     * content to remain untouched.\n     *\n     * This method will replace all string content with simple STRING#\n     * placeholder text, so we've rid all strings from characters that may be\n     * misinterpreted. Original string content will be saved in $this->extracted\n     * and after doing all other minifying, we can restore the original content\n     * via restoreStrings().\n     *\n     * @param string[optional] $chars\n     * @param string[optional] $placeholderPrefix\n     */\n    protected function extractStrings($chars = '\\'\"', $placeholderPrefix = '')\n    {\n        // PHP only supports $this inside anonymous functions since 5.4\n        $minifier = $this;\n        $callback = function ($match) use ($minifier, $placeholderPrefix) {\n            // check the second index here, because the first always contains a quote\n            if ($match[2] === '') {\n                /*\n                 * Empty strings need no placeholder; they can't be confused for\n                 * anything else anyway.\n                 * But we still needed to match them, for the extraction routine\n                 * to skip over this particular string.\n                 */\n                return $match[0];\n            }\n\n            $count = count($minifier->extracted);\n            $placeholder = $match[1].$placeholderPrefix.$count.$match[1];\n            $minifier->extracted[$placeholder] = $match[1].$match[2].$match[1];\n\n            return $placeholder;\n        };\n\n        /*\n         * The \\\\ messiness explained:\n         * * Don't count ' or \" as end-of-string if it's escaped (has backslash\n         * in front of it)\n         * * Unless... that backslash itself is escaped (another leading slash),\n         * in which case it's no longer escaping the ' or \"\n         * * So there can be either no backslash, or an even number\n         * * multiply all of that times 4, to account for the escaping that has\n         * to be done to pass the backslash into the PHP string without it being\n         * considered as escape-char (times 2) and to get it in the regex,\n         * escaped (times 2)\n         */\n        $this->registerPattern('/(['.$chars.'])(.*?(?<!\\\\\\\\)(\\\\\\\\\\\\\\\\)*+)\\\\1/s', $callback);\n    }\n\n    /**\n     * This method will restore all extracted data (strings, regexes) that were\n     * replaced with placeholder text in extract*(). The original content was\n     * saved in $this->extracted.\n     *\n     * @param string $content\n     *\n     * @return string\n     */\n    protected function restoreExtractedData($content)\n    {\n        if (!$this->extracted) {\n            // nothing was extracted, nothing to restore\n            return $content;\n        }\n\n        $content = strtr($content, $this->extracted);\n\n        $this->extracted = array();\n\n        return $content;\n    }\n\n    /**\n     * Check if the path is a regular file and can be read.\n     *\n     * @param string $path\n     *\n     * @return bool\n     */\n    protected function canImportFile($path)\n    {\n        $parsed = parse_url($path);\n        if (\n            // file is elsewhere\n            isset($parsed['host']) ||\n            // file responds to queries (may change, or need to bypass cache)\n            isset($parsed['query'])\n        ) {\n            return false;\n        }\n\n        return strlen($path) < PHP_MAXPATHLEN && @is_file($path) && is_readable($path);\n    }\n\n    /**\n     * Attempts to open file specified by $path for writing.\n     *\n     * @param string $path The path to the file\n     *\n     * @return resource Specifier for the target file\n     *\n     * @throws IOException\n     */\n    protected function openFileForWriting($path)\n    {\n        if ($path === '' || ($handler = @fopen($path, 'w')) === false) {\n            throw new IOException('The file \"'.$path.'\" could not be opened for writing. Check if PHP has enough permissions.');\n        }\n\n        return $handler;\n    }\n\n    /**\n     * Attempts to write $content to the file specified by $handler. $path is used for printing exceptions.\n     *\n     * @param resource $handler The resource to write to\n     * @param string   $content The content to write\n     * @param string   $path    The path to the file (for exception printing only)\n     *\n     * @throws IOException\n     */\n    protected function writeToFile($handler, $content, $path = '')\n    {\n        if (\n            !is_resource($handler) ||\n            ($result = @fwrite($handler, $content)) === false ||\n            ($result < strlen($content))\n        ) {\n            throw new IOException('The file \"'.$path.'\" could not be written to. Check your disk space and file permissions.');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/path-converter/LICENSE",
    "content": "Copyright (c) 2015 Matthias Mullie\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/path-converter/composer.json",
    "content": "{\n    \"name\": \"matthiasmullie/path-converter\",\n    \"type\": \"library\",\n    \"description\": \"Relative path converter\",\n    \"keywords\": [\"relative\", \"path\", \"converter\", \"paths\"],\n    \"homepage\": \"http://github.com/matthiasmullie/path-converter\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Matthias Mullie\",\n            \"homepage\": \"http://www.mullie.eu\",\n            \"email\": \"pathconverter@mullie.eu\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.3.0\",\n        \"ext-pcre\": \"*\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"~4.8\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"MatthiasMullie\\\\PathConverter\\\\\": \"src/\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/path-converter/src/Converter.php",
    "content": "<?php\n\nnamespace MatthiasMullie\\PathConverter;\n\n/**\n * Convert paths relative from 1 file to another.\n *\n * E.g.\n *     ../../images/icon.jpg relative to /css/imports/icons.css\n * becomes\n *     ../images/icon.jpg relative to /css/minified.css\n *\n * Please report bugs on https://github.com/matthiasmullie/path-converter/issues\n *\n * @author Matthias Mullie <pathconverter@mullie.eu>\n * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nclass Converter implements ConverterInterface\n{\n    /**\n     * @var string\n     */\n    protected $from;\n\n    /**\n     * @var string\n     */\n    protected $to;\n\n    /**\n     * @param string $from The original base path (directory, not file!)\n     * @param string $to   The new base path (directory, not file!)\n     * @param string $root Root directory (defaults to `getcwd`)\n     */\n    public function __construct($from, $to, $root = '')\n    {\n        $shared = $this->shared($from, $to);\n        if ($shared === '') {\n            // when both paths have nothing in common, one of them is probably\n            // absolute while the other is relative\n            $root = $root ?: getcwd();\n            $from = strpos($from, $root) === 0 ? $from : preg_replace('/\\/+/', '/', $root.'/'.$from);\n            $to = strpos($to, $root) === 0 ? $to : preg_replace('/\\/+/', '/', $root.'/'.$to);\n\n            // or traveling the tree via `..`\n            // attempt to resolve path, or assume it's fine if it doesn't exist\n            $from = @realpath($from) ?: $from;\n            $to = @realpath($to) ?: $to;\n        }\n\n        $from = $this->dirname($from);\n        $to = $this->dirname($to);\n\n        $from = $this->normalize($from);\n        $to = $this->normalize($to);\n\n        $this->from = $from;\n        $this->to = $to;\n    }\n\n    /**\n     * Normalize path.\n     *\n     * @param string $path\n     *\n     * @return string\n     */\n    protected function normalize($path)\n    {\n        // deal with different operating systems' directory structure\n        $path = rtrim(str_replace(DIRECTORY_SEPARATOR, '/', $path), '/');\n\n        // remove leading current directory.\n        if (substr($path, 0, 2) === './') {\n            $path = substr($path, 2);\n        }\n\n        // remove references to current directory in the path.\n        $path = str_replace('/./', '/', $path);\n\n        /*\n         * Example:\n         *     /home/forkcms/frontend/cache/compiled_templates/../../core/layout/css/../images/img.gif\n         * to\n         *     /home/forkcms/frontend/core/layout/images/img.gif\n         */\n        do {\n            $path = preg_replace('/[^\\/]+(?<!\\.\\.)\\/\\.\\.\\//', '', $path, -1, $count);\n        } while ($count);\n\n        return $path;\n    }\n\n    /**\n     * Figure out the shared path of 2 locations.\n     *\n     * Example:\n     *     /home/forkcms/frontend/core/layout/images/img.gif\n     * and\n     *     /home/forkcms/frontend/cache/minified_css\n     * share\n     *     /home/forkcms/frontend\n     *\n     * @param string $path1\n     * @param string $path2\n     *\n     * @return string\n     */\n    protected function shared($path1, $path2)\n    {\n        // $path could theoretically be empty (e.g. no path is given), in which\n        // case it shouldn't expand to array(''), which would compare to one's\n        // root /\n        $path1 = $path1 ? explode('/', $path1) : array();\n        $path2 = $path2 ? explode('/', $path2) : array();\n\n        $shared = array();\n\n        // compare paths & strip identical ancestors\n        foreach ($path1 as $i => $chunk) {\n            if (isset($path2[$i]) && $path1[$i] == $path2[$i]) {\n                $shared[] = $chunk;\n            } else {\n                break;\n            }\n        }\n\n        return implode('/', $shared);\n    }\n\n    /**\n     * Convert paths relative from 1 file to another.\n     *\n     * E.g.\n     *     ../images/img.gif relative to /home/forkcms/frontend/core/layout/css\n     * should become:\n     *     ../../core/layout/images/img.gif relative to\n     *     /home/forkcms/frontend/cache/minified_css\n     *\n     * @param string $path The relative path that needs to be converted\n     *\n     * @return string The new relative path\n     */\n    public function convert($path)\n    {\n        // quit early if conversion makes no sense\n        if ($this->from === $this->to) {\n            return $path;\n        }\n\n        $path = $this->normalize($path);\n        // if we're not dealing with a relative path, just return absolute\n        if (strpos($path, '/') === 0) {\n            return $path;\n        }\n\n        // normalize paths\n        $path = $this->normalize($this->from.'/'.$path);\n\n        // strip shared ancestor paths\n        $shared = $this->shared($path, $this->to);\n        $path = mb_substr($path, mb_strlen($shared));\n        $to = mb_substr($this->to, mb_strlen($shared));\n\n        // add .. for every directory that needs to be traversed to new path\n        $to = str_repeat('../', count(array_filter(explode('/', $to))));\n\n        return $to.ltrim($path, '/');\n    }\n\n    /**\n     * Attempt to get the directory name from a path.\n     *\n     * @param string $path\n     *\n     * @return string\n     */\n    protected function dirname($path)\n    {\n        if (@is_file($path)) {\n            return dirname($path);\n        }\n\n        if (@is_dir($path)) {\n            return rtrim($path, '/');\n        }\n\n        // no known file/dir, start making assumptions\n\n        // ends in / = dir\n        if (mb_substr($path, -1) === '/') {\n            return rtrim($path, '/');\n        }\n\n        // has a dot in the name, likely a file\n        if (preg_match('/.*\\..*$/', basename($path)) !== 0) {\n            return dirname($path);\n        }\n\n        // you're on your own here!\n        return $path;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/path-converter/src/ConverterInterface.php",
    "content": "<?php\n\nnamespace MatthiasMullie\\PathConverter;\n\n/**\n * Convert file paths.\n *\n * Please report bugs on https://github.com/matthiasmullie/path-converter/issues\n *\n * @author Matthias Mullie <pathconverter@mullie.eu>\n * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved\n * @license MIT License\n */\ninterface ConverterInterface\n{\n    /**\n     * Convert file paths.\n     *\n     * @param string $path The path to be converted\n     *\n     * @return string The new path\n     */\n    public function convert($path);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/matthiasmullie/path-converter/src/NoConverter.php",
    "content": "<?php\n\nnamespace MatthiasMullie\\PathConverter;\n\n/**\n * Don't convert paths.\n *\n * Please report bugs on https://github.com/matthiasmullie/path-converter/issues\n *\n * @author Matthias Mullie <pathconverter@mullie.eu>\n * @copyright Copyright (c) 2015, Matthias Mullie. All rights reserved\n * @license MIT License\n */\nclass NoConverter implements ConverterInterface\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function convert($path)\n    {\n        return $path;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/.phpstorm.meta.php",
    "content": "<?php\nnamespace PHPSTORM_META {\n    registerArgumentsSet(\"date_units\", \"millenania\", \"millennium\", \"century\", \"centuries\", \"decade\", \"decades\", \"year\", \"years\", \"y\", \"yr\", \"yrs\", \"quarter\", \"quarters\", \"month\", \"months\", \"mo\", \"mos\", \"week\", \"weeks\", \"w\", \"day\", \"days\", \"d\", \"hour\", \"hours\", \"h\", \"minute\", \"minutes\", \"m\", \"second\", \"seconds\", \"s\", \"millisecond\", \"milliseconds\", \"milli\", \"ms\", \"microsecond\", \"microseconds\", \"micro\", \"µs\");\n    expectedArguments(\\Carbon\\Traits\\Units::add(), 0, argumentsSet(\"date_units\"));\n    expectedArguments(\\Carbon\\Traits\\Units::add(), 1, argumentsSet(\"date_units\"));\n    expectedArguments(\\Carbon\\CarbonInterface::add(), 0, argumentsSet(\"date_units\"));\n    expectedArguments(\\Carbon\\CarbonInterface::add(), 1, argumentsSet(\"date_units\"));\n\n    expectedArguments(\\Carbon\\CarbonInterface::getTimeFormatByPrecision(), 0, \"minute\", \"second\", \"m\", \"millisecond\", \"µ\", \"microsecond\", \"minutes\", \"seconds\", \"ms\", \"milliseconds\", \"µs\", \"microseconds\");\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/LICENSE",
    "content": "Copyright (C) Brian Nesbitt\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/bin/carbon",
    "content": "#!/usr/bin/env php\n<?php\n\nuse Carbon\\Cli\\Invoker;\n\n$dir = __DIR__.'/..';\n\nif (!file_exists($dir.'/autoload.php')) {\n    $dir = __DIR__.'/../vendor';\n}\n\nif (!file_exists($dir.'/autoload.php')) {\n    $dir = __DIR__.'/../../..';\n}\n\nif (!file_exists($dir.'/autoload.php')) {\n    echo 'Autoload not found.';\n    exit(1);\n}\n\nrequire $dir.'/autoload.php';\n\nexit((new Invoker())(...$argv) ? 0 : 1);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/bin/carbon.bat",
    "content": "@ECHO OFF\nsetlocal DISABLEDELAYEDEXPANSION\nSET BIN_TARGET=%~dp0/carbon\nphp \"%BIN_TARGET%\" %*\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/composer.json",
    "content": "{\n    \"name\": \"nesbot/carbon\",\n    \"description\": \"An API extension for DateTime that supports 281 different languages.\",\n    \"license\": \"MIT\",\n    \"type\": \"library\",\n    \"keywords\": [\n        \"date\",\n        \"time\",\n        \"DateTime\"\n    ],\n    \"authors\": [\n        {\n            \"name\": \"Brian Nesbitt\",\n            \"email\": \"brian@nesbot.com\",\n            \"homepage\": \"https://markido.com\"\n        },\n        {\n            \"name\": \"kylekatarnls\",\n            \"homepage\": \"https://github.com/kylekatarnls\"\n        }\n    ],\n    \"homepage\": \"https://carbon.nesbot.com\",\n    \"support\": {\n        \"issues\": \"https://github.com/briannesbitt/Carbon/issues\",\n        \"source\": \"https://github.com/briannesbitt/Carbon\",\n        \"docs\": \"https://carbon.nesbot.com/docs\"\n    },\n    \"funding\": [\n        {\n            \"url\": \"https://github.com/sponsors/kylekatarnls\",\n            \"type\": \"github\"\n        },\n        {\n            \"url\": \"https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme\",\n            \"type\": \"tidelift\"\n        },\n        {\n            \"url\": \"https://opencollective.com/Carbon#sponsor\",\n            \"type\": \"opencollective\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.1.8 || ^8.0\",\n        \"ext-json\": \"*\",\n        \"carbonphp/carbon-doctrine-types\": \"*\",\n        \"psr/clock\": \"^1.0\",\n        \"symfony/polyfill-mbstring\": \"^1.0\",\n        \"symfony/polyfill-php80\": \"^1.16\",\n        \"symfony/translation\": \"^3.4 || ^4.0 || ^5.0 || ^6.0\"\n    },\n    \"require-dev\": {\n        \"doctrine/dbal\": \"^2.0 || ^3.1.4 || ^4.0\",\n        \"doctrine/orm\": \"^2.7 || ^3.0\",\n        \"friendsofphp/php-cs-fixer\": \"^3.0\",\n        \"kylekatarnls/multi-tester\": \"^2.0\",\n        \"ondrejmirtes/better-reflection\": \"*\",\n        \"phpmd/phpmd\": \"^2.9\",\n        \"phpstan/extension-installer\": \"^1.0\",\n        \"phpstan/phpstan\": \"^0.12.99 || ^1.7.14\",\n        \"phpunit/php-file-iterator\": \"^2.0.5 || ^3.0.6\",\n        \"phpunit/phpunit\": \"^7.5.20 || ^8.5.26 || ^9.5.20\",\n        \"squizlabs/php_codesniffer\": \"^3.4\"\n    },\n    \"provide\": {\n        \"psr/clock-implementation\": \"1.0\"\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true,\n    \"autoload\": {\n        \"psr-4\": {\n            \"Carbon\\\\\": \"src/Carbon/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        },\n        \"files\": [\n            \"tests/Laravel/ServiceProvider.php\"\n        ]\n    },\n    \"bin\": [\n        \"bin/carbon\"\n    ],\n    \"config\": {\n        \"allow-plugins\": {\n            \"phpstan/extension-installer\": true,\n            \"composer/package-versions-deprecated\": true\n        },\n        \"process-timeout\": 0,\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-3.x\": \"3.x-dev\",\n            \"dev-master\": \"2.x-dev\"\n        },\n        \"laravel\": {\n            \"providers\": [\n                \"Carbon\\\\Laravel\\\\ServiceProvider\"\n            ]\n        },\n        \"phpstan\": {\n            \"includes\": [\n                \"extension.neon\"\n            ]\n        }\n    },\n    \"scripts\": {\n        \"phpcs\": \"php-cs-fixer fix -v --diff --dry-run\",\n        \"phpdoc\": \"php phpdoc.php\",\n        \"phpmd\": \"phpmd src text /phpmd.xml\",\n        \"phpmd-test\": \"phpmd tests text /tests/phpmd-test.xml\",\n        \"phpstan\": \"phpstan analyse --configuration phpstan.neon\",\n        \"phpunit\": \"phpunit --verbose\",\n        \"style-check\": [\n            \"@phpcs\",\n            \"@phpstan\",\n            \"@phpmd\"\n        ],\n        \"test\": [\n            \"@phpunit\",\n            \"@style-check\"\n        ],\n        \"sponsors\": \"php sponsors.php\"\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/extension.neon",
    "content": "services:\n    -\n        class: Carbon\\PHPStan\\MacroExtension\n        tags:\n            - phpstan.broker.methodsClassReflectionExtension\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/MessageFormatter/MessageFormatterMapperStrongType.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\MessageFormatter;\n\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface;\n\nif (!class_exists(LazyMessageFormatter::class, false)) {\n    abstract class LazyMessageFormatter implements MessageFormatterInterface\n    {\n        public function format(string $message, string $locale, array $parameters = []): string\n        {\n            return $this->formatter->format(\n                $message,\n                $this->transformLocale($locale),\n                $parameters\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/MessageFormatter/MessageFormatterMapperWeakType.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\MessageFormatter;\n\nuse Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface;\n\nif (!class_exists(LazyMessageFormatter::class, false)) {\n    abstract class LazyMessageFormatter implements MessageFormatterInterface, ChoiceMessageFormatterInterface\n    {\n        abstract protected function transformLocale(?string $locale): ?string;\n\n        public function format($message, $locale, array $parameters = [])\n        {\n            return $this->formatter->format(\n                $message,\n                $this->transformLocale($locale),\n                $parameters\n            );\n        }\n\n        public function choiceFormat($message, $number, $locale, array $parameters = [])\n        {\n            return $this->formatter->choiceFormat($message, $number, $locale, $parameters);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/PHPStan/AbstractMacroBuiltin.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nuse PHPStan\\BetterReflection\\Reflection;\nuse ReflectionMethod;\n\nif (!class_exists(AbstractReflectionMacro::class, false)) {\n    abstract class AbstractReflectionMacro extends AbstractMacro\n    {\n        /**\n         * {@inheritdoc}\n         */\n        public function getReflection(): ?ReflectionMethod\n        {\n            if ($this->reflectionFunction instanceof Reflection\\ReflectionMethod) {\n                return new Reflection\\Adapter\\ReflectionMethod($this->reflectionFunction);\n            }\n\n            return $this->reflectionFunction instanceof ReflectionMethod\n                ? $this->reflectionFunction\n                : null;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/PHPStan/AbstractMacroStatic.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nuse PHPStan\\BetterReflection\\Reflection;\nuse ReflectionMethod;\n\nif (!class_exists(AbstractReflectionMacro::class, false)) {\n    abstract class AbstractReflectionMacro extends AbstractMacro\n    {\n        /**\n         * {@inheritdoc}\n         */\n        public function getReflection(): ?Reflection\\Adapter\\ReflectionMethod\n        {\n            if ($this->reflectionFunction instanceof Reflection\\Adapter\\ReflectionMethod) {\n                return $this->reflectionFunction;\n            }\n\n            if ($this->reflectionFunction instanceof Reflection\\ReflectionMethod) {\n                return new Reflection\\Adapter\\ReflectionMethod($this->reflectionFunction);\n            }\n\n            return $this->reflectionFunction instanceof ReflectionMethod\n                ? new Reflection\\Adapter\\ReflectionMethod(\n                    Reflection\\ReflectionMethod::createFromName(\n                        $this->reflectionFunction->getDeclaringClass()->getName(),\n                        $this->reflectionFunction->getName()\n                    )\n                )\n                : null;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/PHPStan/MacroStrongType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nif (!class_exists(LazyMacro::class, false)) {\n    abstract class LazyMacro extends AbstractReflectionMacro\n    {\n        /**\n         * {@inheritdoc}\n         */\n        public function getFileName(): ?string\n        {\n            $file = $this->reflectionFunction->getFileName();\n\n            return (($file ? realpath($file) : null) ?: $file) ?: null;\n        }\n\n        /**\n         * {@inheritdoc}\n         */\n        public function getStartLine(): ?int\n        {\n            return $this->reflectionFunction->getStartLine();\n        }\n\n        /**\n         * {@inheritdoc}\n         */\n        public function getEndLine(): ?int\n        {\n            return $this->reflectionFunction->getEndLine();\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/PHPStan/MacroWeakType.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nif (!class_exists(LazyMacro::class, false)) {\n    abstract class LazyMacro extends AbstractReflectionMacro\n    {\n        /**\n         * {@inheritdoc}\n         *\n         * @return string|false\n         */\n        public function getFileName()\n        {\n            $file = $this->reflectionFunction->getFileName();\n\n            return (($file ? realpath($file) : null) ?: $file) ?: null;\n        }\n\n        /**\n         * {@inheritdoc}\n         *\n         * @return int|false\n         */\n        public function getStartLine()\n        {\n            return $this->reflectionFunction->getStartLine();\n        }\n\n        /**\n         * {@inheritdoc}\n         *\n         * @return int|false\n         */\n        public function getEndLine()\n        {\n            return $this->reflectionFunction->getEndLine();\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/TranslatorStrongType.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\n\nif (!class_exists(LazyTranslator::class, false)) {\n    class LazyTranslator extends AbstractTranslator implements TranslatorStrongTypeInterface\n    {\n        public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string\n        {\n            return $this->translate($id, $parameters, $domain, $locale);\n        }\n\n        public function getFromCatalogue(MessageCatalogueInterface $catalogue, string $id, string $domain = 'messages')\n        {\n            $messages = $this->getPrivateProperty($catalogue, 'messages');\n\n            if (isset($messages[$domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX][$id])) {\n                return $messages[$domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX][$id];\n            }\n\n            if (isset($messages[$domain][$id])) {\n                return $messages[$domain][$id];\n            }\n\n            $fallbackCatalogue = $this->getPrivateProperty($catalogue, 'fallbackCatalogue');\n\n            if ($fallbackCatalogue !== null) {\n                return $this->getFromCatalogue($fallbackCatalogue, $id, $domain);\n            }\n\n            return $id;\n        }\n\n        private function getPrivateProperty($instance, string $field)\n        {\n            return (function (string $field) {\n                return $this->$field;\n            })->call($instance, $field);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/lazy/Carbon/TranslatorWeakType.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nif (!class_exists(LazyTranslator::class, false)) {\n    class LazyTranslator extends AbstractTranslator\n    {\n        /**\n         * Returns the translation.\n         *\n         * @param string|null $id\n         * @param array       $parameters\n         * @param string|null $domain\n         * @param string|null $locale\n         *\n         * @return string\n         */\n        public function trans($id, array $parameters = [], $domain = null, $locale = null)\n        {\n            return $this->translate($id, $parameters, $domain, $locale);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/readme.md",
    "content": "# Carbon\n\n[![Latest Stable Version](https://img.shields.io/packagist/v/nesbot/carbon.svg?style=flat-square)](https://packagist.org/packages/nesbot/carbon)\n[![Total Downloads](https://img.shields.io/packagist/dt/nesbot/carbon.svg?style=flat-square)](https://packagist.org/packages/nesbot/carbon)\n[![GitHub Actions](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fbriannesbitt%2FCarbon%2Fbadge&style=flat-square&label=Build&logo=none)](https://github.com/briannesbitt/Carbon/actions)\n[![codecov.io](https://img.shields.io/codecov/c/github/briannesbitt/Carbon.svg?style=flat-square)](https://codecov.io/github/briannesbitt/Carbon?branch=master)\n[![Tidelift](https://tidelift.com/badges/github/briannesbitt/Carbon)](https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme)\n\nAn international PHP extension for DateTime. [https://carbon.nesbot.com](https://carbon.nesbot.com)\n\n```php\n<?php\n\nuse Carbon\\Carbon;\n\nprintf(\"Right now is %s\", Carbon::now()->toDateTimeString());\nprintf(\"Right now in Vancouver is %s\", Carbon::now('America/Vancouver'));  //implicit __toString()\n$tomorrow = Carbon::now()->addDay();\n$lastWeek = Carbon::now()->subWeek();\n$nextSummerOlympics = Carbon::createFromDate(2016)->addYears(4);\n\n$officialDate = Carbon::now()->toRfc2822String();\n\n$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;\n\n$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');\n\n$internetWillBlowUpOn = Carbon::create(2038, 01, 19, 3, 14, 7, 'GMT');\n\n// Don't really want this to happen so mock now\nCarbon::setTestNow(Carbon::createFromDate(2000, 1, 1));\n\n// comparisons are always done in UTC\nif (Carbon::now()->gte($internetWillBlowUpOn)) {\n    die();\n}\n\n// Phew! Return to normal behaviour\nCarbon::setTestNow();\n\nif (Carbon::now()->isWeekend()) {\n    echo 'Party!';\n}\n// Over 200 languages (and over 500 regional variants) supported:\necho Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'\necho Carbon::now()->subMinutes(2)->locale('zh_CN')->diffForHumans(); // '2分钟前'\necho Carbon::parse('2019-07-23 14:51')->isoFormat('LLLL'); // 'Tuesday, July 23, 2019 2:51 PM'\necho Carbon::parse('2019-07-23 14:51')->locale('fr_FR')->isoFormat('LLLL'); // 'mardi 23 juillet 2019 14:51'\n\n// ... but also does 'from now', 'after' and 'before'\n// rolling up to seconds, minutes, hours, days, months, years\n\n$daysSinceEpoch = Carbon::createFromTimestamp(0)->diffInDays();\n```\n\n[Get supported nesbot/carbon with the Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme)\n\n## Installation\n\n### With Composer\n\n```\n$ composer require nesbot/carbon\n```\n\n```json\n{\n    \"require\": {\n        \"nesbot/carbon\": \"^2.16\"\n    }\n}\n```\n\n```php\n<?php\nrequire 'vendor/autoload.php';\n\nuse Carbon\\Carbon;\n\nprintf(\"Now: %s\", Carbon::now());\n```\n\n### Without Composer\n\nWhy are you not using [composer](https://getcomposer.org/)? Download the Carbon [latest release](https://github.com/briannesbitt/Carbon/releases) and put the contents of the ZIP archive into a directory in your project. Then require the file `autoload.php` to get all classes and dependencies loaded on need.\n\n```php\n<?php\nrequire 'path-to-Carbon-directory/autoload.php';\n\nuse Carbon\\Carbon;\n\nprintf(\"Now: %s\", Carbon::now());\n```\n\n## Docs\n\n[https://carbon.nesbot.com/docs](https://carbon.nesbot.com/docs)\n\n## Security contact information\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure.\n\n## Credits\n\n### Contributors\n\nThis project exists thanks to all the people who contribute. \n\n<a href=\"https://github.com/briannesbitt/Carbon/graphs/contributors\" target=\"_blank\"><img src=\"https://opencollective.com/Carbon/contributors.svg?width=890&button=false\" /></a>\n\n### Translators\n\n[Thanks to people helping us to translate Carbon in so many languages](https://carbon.nesbot.com/contribute/translators/)\n\n### Sponsors\n\nSupport this project by becoming a sponsor. Your logo will show up here with a link to your website.\n\n<a href=\"https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme\" target=\"_blank\"><img src=\"https://carbon.nesbot.com/tidelift-brand.png\" width=\"256\" height=\"64\"></a><!-- <open-collective-sponsors> -->\n<a title=\"Онлайн казино 777 Україна\" href=\"https://777.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Онлайн казино\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/7e572d50-1ce8-4d69-ae12-86cc80371373/ok-ua-777.png\" width=\"64\" height=\"64\"></a>\n<a title=\"#1 Guide To Online Gambling In Canada\" href=\"https://casinohex.org/canada/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"CasinoHex Canada\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/79fdbcc0-a997-11eb-abbc-25e48b63c6dc.jpg\" width=\"85\" height=\"64\"></a>\n<a title=\"Znajdź najlepsze zakłady bukmacherskie w Polsce w 2023 roku. Probukmacher.pl to Twoje kompendium wiedzy na temat bukmacherów!\" href=\"https://www.probukmacher.pl?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Probukmacher\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/caf50271-4560-4ffe-a434-ea15239168db/Screenshot_1.png\" width=\"89\" height=\"64\"></a>\n<a title=\"Gives a fun for our users\" href=\"https://slotoking.ua/games/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Игровые автоматы\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/94601d07-3205-4c60-9c2d-9b8194dbefb7/skg-blue.png\" width=\"64\" height=\"64\"></a>\n<a title=\"Casino-portugal.pt\" href=\"https://casino-portugal.pt/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Casino-portugal.pt\" src=\"https://logo.clearbit.com/casino-portugal.pt\" width=\"64\" height=\"64\"></a>\n<a title=\"Slots City® ➢ Лучшее лицензионно казино онлайн и оффлайн на гривны в Украине. 【 Более1500 игровых автоматов и слотов】✅ Официально и Безопасно\" href=\"https://slotscity.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Slots City\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/d7e298c0-7abe-11ed-8553-230872f5e54d.png\" width=\"90\" height=\"64\"></a>\n<a title=\"inkedin\" href=\"https://inkedin.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"inkedin\" src=\"https://logo.clearbit.com/inkedin.com\" width=\"64\" height=\"64\"></a>\n<a title=\"Актуальний та повносправний рейтинг онлайн казино України, ґрунтований на відгуках реальних гравців.\" href=\"https://uk.onlinecasino.in.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Онлайн казино України\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/c0b4b090-eef8-11ec-9cb7-0527a205b226.png\" width=\"64\" height=\"64\"></a>\n<a title=\"OnlineCasinosSpelen\" href=\"https://onlinecasinosspelen.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"OnlineCasinosSpelen\" src=\"https://logo.clearbit.com/onlinecasinosspelen.com\" width=\"64\" height=\"64\"></a>\n<a title=\"Best non Gamstop sites in the UK\" href=\"https://nongamstopcasinos.net/gb/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Best non Gamstop sites in the UK\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/34e340b8-e1de-4932-8a76-1b3ce2ec7ee8/logo_white%20bg%20(8).png\" width=\"64\" height=\"64\"></a>\n<a title=\"Real Money Pokies\" href=\"https://www.nzfirst.org.nz/real-money-pokies/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Real Money Pokies\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/30d38232-a9d6-4e95-a48c-641fdc4d96fd/NZ_logo%20(6)%20(1)%20(1).jpg\" width=\"64\" height=\"64\"></a>\n<a title=\"Non GamStop Bookies UK\" href=\"https://nongamstopbookies.com/uk/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Non GamStop Bookies UK\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/43c5561c-8907-4ef7-a4ee-c6da054788b8/logo-site%20(3).jpg\" width=\"64\" height=\"64\"></a>\n<a title=\"Актуальний топ-рейтинг українських онлайн казино на гривні! Щоденне оновлення топу та унікальна система ранжування, основана на відгуках гравців!\" href=\"https://onlinecasino.in.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Онлайн Казино Украины\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/8fdd8aa0-e273-11ec-a95e-d38fd331cabf.png\" width=\"64\" height=\"64\"></a>\n<a title=\"Twitter Video Downloader HD Tool allows you to store tweets on your device (mobile or PC) for free.\" href=\"https://ssstwitter.online/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"SSSTwitter\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/ba0d1daf-a894-4d98-95f7-a44d321364b3/Screenshot%202024-01-16%20at%2011.43.22.png\" width=\"76\" height=\"64\"></a>\n<a title=\"Entertainment\" href=\"https://www.nongamstopbets.com/casinos-not-on-gamstop/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Non-GamStop Bets UK\" src=\"https://logo.clearbit.com/nongamstopbets.com\" width=\"64\" height=\"64\"></a>\n<a title=\"Chudovo - international software development company with representative offices in Kyiv, Cologne, New York, Tallinn and London. It has been working on the market since 2006. Company has domain expertise in video security, logistics, medicine, finance and\" href=\"https://chudovo.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Chudovo\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/326c19a0-2e87-11eb-a13a-c99a2a201d11.png\" width=\"84\" height=\"42\"></a>\n<a title=\"Entertainment\" href=\"https://casinogap.org/uk/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"UK Casino Gap\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/143f9301-beec-4118-89d5-9a07a01345f3/casinogap-uk.png\" width=\"42\" height=\"42\"></a>\n<a title=\"NZ Gaming Portal\" href=\"https://casinodeps.co.nz?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"NZ Casino Deps\" src=\"https://logo.clearbit.com/casinodeps.co.nz\" width=\"42\" height=\"42\"></a>\n<a title=\"NonStop Sites\" href=\"https://uk.nonstopcasino.org/non-gamstop-casinos/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"NonStopCasino.org\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/fd7ad905-8752-468f-ad20-582a24cca9d9/non-stop-casino.png\" width=\"42\" height=\"42\"></a>\n<a title=\"Siti Non AAMS\" href=\"https://www.outlookindia.com/outlook-spotlight/migliori-siti-non-aams-siti-scommesse-senza-licenza-sicuri-news-294715?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Migliori Siti Non AAMS\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/392810da-6cb6-4938-a3cb-38bd0e1eb7de/migliori-siti-non-aams.png\" width=\"42\" height=\"42\"></a>\n<a title=\"List of trusted non GamStop casino reviews\" href=\"https://nongamstopcasinos.org?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"UK NonGamStopCasinos\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/cbda0ee1-26ea-4252-9580-f1f9b317b1f7/nongamstopcasinos-uk.png\" width=\"42\" height=\"42\"></a>\n<a title=\"Online TikTok Video Download Tool\" href=\"https://snaptik.pro?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"SnapTik\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/546bcd53-6615-457d-ab21-1db1c52b3af5/logo.jpg\" width=\"42\" height=\"42\"></a>\n<a title=\"IG Downloader is an Instagram Downloader service that offers a variety of tools to download Instagram content for free. Listed below are all the tools\" href=\"https://indownloader.app/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"IG Downloader\" src=\"https://logo.clearbit.com/indownloader.app\" width=\"42\" height=\"42\"></a>\n<a title=\"Proxidize is a mobile proxy creation and management platform that provides all needed components from hardware to cloud software and SIM cards.\" href=\"https://proxidize.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Proxidize\" src=\"https://logo.clearbit.com/proxidize.com\" width=\"42\" height=\"42\"></a>\n<a title=\"Blastup offers Instagram growth services like buying likes, views, and followers, emphasizing real user engagement and instant delivery.\" href=\"https://blastup.com/buy-instagram-likes?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Blastup\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/955a0beb-9fe8-4753-ad92-fae8ef5382fc/favicon--dark.jpg\" width=\"42\" height=\"42\"></a>\n<a title=\"A self-hosted web radio management suite, including turnkey installer tools and an easy-to-use web app to manage your stations.\" href=\"https://azuracast.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"AzuraCast\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/3c12ea10-cdfb-11eb-9cf4-3760b386b76d.png\" width=\"42\" height=\"42\"></a>\n<a title=\"Triplebyte is the first software engineering job platform that is on the developer&#039;s side. Take our coding quiz!\" href=\"https://triplebyte.com/os/opencollective?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Triplebyte\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/43e4f9d0-30cd-11ea-9c6b-e1142996e8b2.png\" width=\"42\" height=\"42\"></a>\n<a title=\"Connect your Collective to GitHub Sponsors: https://docs.opencollective.com/help/collectives/github-sponsors\" href=\"https://github.com/sponsors/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"GitHub Sponsors\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/87b1d240-f617-11ea-9960-fd7e8ab20fe4.png\" width=\"48\" height=\"42\"></a>\n<a title=\"Salesforce\" href=\"https://engineering.salesforce.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon\" target=\"_blank\"><img alt=\"Salesforce\" src=\"https://opencollective-production.s3.us-west-1.amazonaws.com/24d34880-df8d-11e9-949c-6bc2037b6bd5.png\" width=\"42\" height=\"42\"></a>\n<!-- </open-collective-sponsors> -->\n\n[[Become a sponsor via OpenCollective](https://opencollective.com/Carbon#sponsor)]\n\n<a href=\"https://github.com/johnrsimeone\" target=\"_blank\"><img src=\"https://avatars.githubusercontent.com/u/22871068?s=70&v=4\" width=\"64\" height=\"64\"></a>\n<a href=\"https://github.com/taylorotwell\" target=\"_blank\"><img src=\"https://avatars.githubusercontent.com/u/463230?s=128&v=4\" width=\"64\" height=\"64\"></a>\n<a href=\"https://github.com/getsentry\" target=\"_blank\"><img src=\"https://avatars.githubusercontent.com/u/1396951?s=128&v=4\" width=\"64\" height=\"64\"></a>\n<a href=\"https://github.com/codecov\" target=\"_blank\"><img src=\"https://avatars.githubusercontent.com/u/8226205?s=128&v=4\" width=\"64\" height=\"64\"></a>\n\n[[Become a sponsor via GitHub](https://github.com/sponsors/kylekatarnls)]\n\n### Backers\n\nThank you to all our backers! 🙏\n\n<a href=\"https://opencollective.com/Carbon#backers\" target=\"_blank\"><img src=\"https://opencollective.com/Carbon/backers.svg?width=890&version=2023-06-08-07-12\"></a>\n\n[[Become a backer](https://opencollective.com/Carbon#backer)]\n\n## Carbon for enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of ``Carbon`` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/sponsors.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Carbon\\CarbonImmutable;\n\nrequire_once __DIR__.'/vendor/autoload.php';\n\nfunction getMaxHistoryMonthsByAmount($amount): int\n{\n    if ($amount >= 50) {\n        return 6;\n    }\n\n    if ($amount >= 20) {\n        return 4;\n    }\n\n    return 2;\n}\n\nfunction getHtmlAttribute($rawValue): string\n{\n    return str_replace(\n        ['​', \"\\r\"],\n        '',\n        trim(htmlspecialchars((string) $rawValue), \"  \\n\\r\\t\\v\\0\"),\n    );\n}\n\nfunction getOpenCollectiveSponsors(): string\n{\n    $customSponsorImages = [\n        // For consistency and equity among sponsors, as of now, we kindly ask our sponsors\n        // to provide an image having a width/height ratio between 1/1 and 2/1.\n        // By default, we'll show the member picture from OpenCollective, and will resize it if bigger\n        // int(OpenCollective.MemberId) => ImageURL\n    ];\n\n    $members = json_decode(file_get_contents('https://opencollective.com/carbon/members/all.json'), true);\n\n    $list = array_filter($members, static function ($member): bool {\n        return ($member['lastTransactionAmount'] > 3 || $member['isActive']) &&\n            $member['role'] === 'BACKER' &&\n            $member['type'] !== 'USER' &&\n            (\n                $member['totalAmountDonated'] > 100 ||\n                $member['lastTransactionAt'] > CarbonImmutable::now()\n                    ->subMonthsNoOverflow(getMaxHistoryMonthsByAmount($member['lastTransactionAmount']))\n                    ->format('Y-m-d h:i') ||\n                $member['isActive'] && $member['lastTransactionAmount'] >= 30\n            );\n    });\n\n    $list = array_map(static function (array $member): array {\n        $createdAt = CarbonImmutable::parse($member['createdAt']);\n        $lastTransactionAt = CarbonImmutable::parse($member['lastTransactionAt']);\n\n        if ($createdAt->format('d H:i:s.u') > $lastTransactionAt->format('d H:i:s.u')) {\n            $createdAt = $createdAt\n                ->setDay($lastTransactionAt->day)\n                ->modify($lastTransactionAt->format('H:i:s.u'));\n        }\n\n        $monthlyContribution = (float) ($member['totalAmountDonated'] / ceil($createdAt->floatDiffInMonths()));\n\n        if (\n            $lastTransactionAt->isAfter('last month') &&\n            $member['lastTransactionAmount'] > $monthlyContribution\n        ) {\n            $monthlyContribution = (float) $member['lastTransactionAmount'];\n        }\n\n        $yearlyContribution = (float) ($member['totalAmountDonated'] / max(1, $createdAt->floatDiffInYears()));\n        $status = null;\n\n        if ($monthlyContribution > 29) {\n            $status = 'sponsor';\n        } elseif ($monthlyContribution > 4.5 || $yearlyContribution > 29) {\n            $status = 'backer';\n        } elseif ($member['totalAmountDonated'] > 0) {\n            $status = 'helper';\n        }\n\n        return array_merge($member, [\n            'star' => ($monthlyContribution > 98 || $yearlyContribution > 500),\n            'status' => $status,\n            'monthlyContribution' => $monthlyContribution,\n            'yearlyContribution' => $yearlyContribution,\n        ]);\n    }, $list);\n\n    usort($list, static function (array $a, array $b): int {\n        return ($b['monthlyContribution'] <=> $a['monthlyContribution'])\n            ?: ($b['totalAmountDonated'] <=> $a['totalAmountDonated']);\n    });\n\n    return implode('', array_map(static function (array $member) use ($customSponsorImages): string {\n        $href = htmlspecialchars($member['website'] ?? $member['profile']);\n        $src = $customSponsorImages[$member['MemberId'] ?? ''] ?? $member['image'] ?? (strtr($member['profile'], ['https://opencollective.com/' => 'https://images.opencollective.com/']).'/avatar/256.png');\n        [$x, $y] = @getimagesize($src) ?: [0, 0];\n        $validImage = ($x && $y);\n        $src = $validImage ? htmlspecialchars($src) : 'https://opencollective.com/static/images/default-guest-logo.svg';\n        $height = $member['status'] === 'sponsor' ? 64 : 42;\n        $width = min($height * 2, $validImage ? round($x * $height / $y) : $height);\n        $href .= (strpos($href, '?') === false ? '?' : '&amp;').'utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon';\n        $title = getHtmlAttribute(($member['description'] ?? null) ?: $member['name']);\n        $alt = getHtmlAttribute($member['name']);\n\n        return \"\\n\".'<a title=\"'.$title.'\" href=\"'.$href.'\" target=\"_blank\">'.\n            '<img alt=\"'.$alt.'\" src=\"'.$src.'\" width=\"'.$width.'\" height=\"'.$height.'\">'.\n            '</a>';\n    }, $list)).\"\\n\";\n}\n\nfile_put_contents('readme.md', preg_replace_callback(\n    '/(<!-- <open-collective-sponsors> -->)[\\s\\S]+(<!-- <\\/open-collective-sponsors> -->)/',\n    static function (array $match): string {\n        return $match[1].getOpenCollectiveSponsors().$match[2];\n    },\n    file_get_contents('readme.md')\n));\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/AbstractTranslator.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\MessageFormatter\\MessageFormatterMapper;\nuse Closure;\nuse ReflectionException;\nuse ReflectionFunction;\nuse Symfony\\Component\\Translation;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface;\nuse Symfony\\Component\\Translation\\Loader\\ArrayLoader;\n\nabstract class AbstractTranslator extends Translation\\Translator\n{\n    /**\n     * Translator singletons for each language.\n     *\n     * @var array\n     */\n    protected static $singletons = [];\n\n    /**\n     * List of custom localized messages.\n     *\n     * @var array\n     */\n    protected $messages = [];\n\n    /**\n     * List of custom directories that contain translation files.\n     *\n     * @var string[]\n     */\n    protected $directories = [];\n\n    /**\n     * Set to true while constructing.\n     *\n     * @var bool\n     */\n    protected $initializing = false;\n\n    /**\n     * List of locales aliases.\n     *\n     * @var array<string, string>\n     */\n    protected $aliases = [\n        'me' => 'sr_Latn_ME',\n        'scr' => 'sh',\n    ];\n\n    /**\n     * Return a singleton instance of Translator.\n     *\n     * @param string|null $locale optional initial locale (\"en\" - english by default)\n     *\n     * @return static\n     */\n    public static function get($locale = null)\n    {\n        $locale = $locale ?: 'en';\n        $key = static::class === Translator::class ? $locale : static::class.'|'.$locale;\n\n        if (!isset(static::$singletons[$key])) {\n            static::$singletons[$key] = new static($locale);\n        }\n\n        return static::$singletons[$key];\n    }\n\n    public function __construct($locale, MessageFormatterInterface $formatter = null, $cacheDir = null, $debug = false)\n    {\n        parent::setLocale($locale);\n        $this->initializing = true;\n        $this->directories = [__DIR__.'/Lang'];\n        $this->addLoader('array', new ArrayLoader());\n        parent::__construct($locale, new MessageFormatterMapper($formatter), $cacheDir, $debug);\n        $this->initializing = false;\n    }\n\n    /**\n     * Returns the list of directories translation files are searched in.\n     *\n     * @return array\n     */\n    public function getDirectories(): array\n    {\n        return $this->directories;\n    }\n\n    /**\n     * Set list of directories translation files are searched in.\n     *\n     * @param array $directories new directories list\n     *\n     * @return $this\n     */\n    public function setDirectories(array $directories)\n    {\n        $this->directories = $directories;\n\n        return $this;\n    }\n\n    /**\n     * Add a directory to the list translation files are searched in.\n     *\n     * @param string $directory new directory\n     *\n     * @return $this\n     */\n    public function addDirectory(string $directory)\n    {\n        $this->directories[] = $directory;\n\n        return $this;\n    }\n\n    /**\n     * Remove a directory from the list translation files are searched in.\n     *\n     * @param string $directory directory path\n     *\n     * @return $this\n     */\n    public function removeDirectory(string $directory)\n    {\n        $search = rtrim(strtr($directory, '\\\\', '/'), '/');\n\n        return $this->setDirectories(array_filter($this->getDirectories(), function ($item) use ($search) {\n            return rtrim(strtr($item, '\\\\', '/'), '/') !== $search;\n        }));\n    }\n\n    /**\n     * Reset messages of a locale (all locale if no locale passed).\n     * Remove custom messages and reload initial messages from matching\n     * file in Lang directory.\n     *\n     * @param string|null $locale\n     *\n     * @return bool\n     */\n    public function resetMessages($locale = null)\n    {\n        if ($locale === null) {\n            $this->messages = [];\n\n            return true;\n        }\n\n        foreach ($this->getDirectories() as $directory) {\n            $data = @include sprintf('%s/%s.php', rtrim($directory, '\\\\/'), $locale);\n\n            if ($data !== false) {\n                $this->messages[$locale] = $data;\n                $this->addResource('array', $this->messages[$locale], $locale);\n\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns the list of files matching a given locale prefix (or all if empty).\n     *\n     * @param string $prefix prefix required to filter result\n     *\n     * @return array\n     */\n    public function getLocalesFiles($prefix = '')\n    {\n        $files = [];\n\n        foreach ($this->getDirectories() as $directory) {\n            $directory = rtrim($directory, '\\\\/');\n\n            foreach (glob(\"$directory/$prefix*.php\") as $file) {\n                $files[] = $file;\n            }\n        }\n\n        return array_unique($files);\n    }\n\n    /**\n     * Returns the list of internally available locales and already loaded custom locales.\n     * (It will ignore custom translator dynamic loading.)\n     *\n     * @param string $prefix prefix required to filter result\n     *\n     * @return array\n     */\n    public function getAvailableLocales($prefix = '')\n    {\n        $locales = [];\n        foreach ($this->getLocalesFiles($prefix) as $file) {\n            $locales[] = substr($file, strrpos($file, '/') + 1, -4);\n        }\n\n        return array_unique(array_merge($locales, array_keys($this->messages)));\n    }\n\n    protected function translate(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string\n    {\n        if ($domain === null) {\n            $domain = 'messages';\n        }\n\n        $catalogue = $this->getCatalogue($locale);\n        $format = $this instanceof TranslatorStrongTypeInterface\n            ? $this->getFromCatalogue($catalogue, (string) $id, $domain)\n            : $this->getCatalogue($locale)->get((string) $id, $domain); // @codeCoverageIgnore\n\n        if ($format instanceof Closure) {\n            // @codeCoverageIgnoreStart\n            try {\n                $count = (new ReflectionFunction($format))->getNumberOfRequiredParameters();\n            } catch (ReflectionException $exception) {\n                $count = 0;\n            }\n            // @codeCoverageIgnoreEnd\n\n            return $format(\n                ...array_values($parameters),\n                ...array_fill(0, max(0, $count - \\count($parameters)), null)\n            );\n        }\n\n        return parent::trans($id, $parameters, $domain, $locale);\n    }\n\n    /**\n     * Init messages language from matching file in Lang directory.\n     *\n     * @param string $locale\n     *\n     * @return bool\n     */\n    protected function loadMessagesFromFile($locale)\n    {\n        return isset($this->messages[$locale]) || $this->resetMessages($locale);\n    }\n\n    /**\n     * Set messages of a locale and take file first if present.\n     *\n     * @param string $locale\n     * @param array  $messages\n     *\n     * @return $this\n     */\n    public function setMessages($locale, $messages)\n    {\n        $this->loadMessagesFromFile($locale);\n        $this->addResource('array', $messages, $locale);\n        $this->messages[$locale] = array_merge(\n            $this->messages[$locale] ?? [],\n            $messages\n        );\n\n        return $this;\n    }\n\n    /**\n     * Set messages of the current locale and take file first if present.\n     *\n     * @param array $messages\n     *\n     * @return $this\n     */\n    public function setTranslations($messages)\n    {\n        return $this->setMessages($this->getLocale(), $messages);\n    }\n\n    /**\n     * Get messages of a locale, if none given, return all the\n     * languages.\n     *\n     * @param string|null $locale\n     *\n     * @return array\n     */\n    public function getMessages($locale = null)\n    {\n        return $locale === null ? $this->messages : $this->messages[$locale];\n    }\n\n    /**\n     * Set the current translator locale and indicate if the source locale file exists\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public function setLocale($locale)\n    {\n        $locale = preg_replace_callback('/[-_]([a-z]{2,}|\\d{2,})/', function ($matches) {\n            // _2-letters or YUE is a region, _3+-letters is a variant\n            $upper = strtoupper($matches[1]);\n\n            if ($upper === 'YUE' || $upper === 'ISO' || \\strlen($upper) < 3) {\n                return \"_$upper\";\n            }\n\n            return '_'.ucfirst($matches[1]);\n        }, strtolower($locale));\n\n        $previousLocale = $this->getLocale();\n\n        if ($previousLocale === $locale && isset($this->messages[$locale])) {\n            return true;\n        }\n\n        unset(static::$singletons[$previousLocale]);\n\n        if ($locale === 'auto') {\n            $completeLocale = setlocale(LC_TIME, '0');\n            $locale = preg_replace('/^([^_.-]+).*$/', '$1', $completeLocale);\n            $locales = $this->getAvailableLocales($locale);\n\n            $completeLocaleChunks = preg_split('/[_.-]+/', $completeLocale);\n\n            $getScore = function ($language) use ($completeLocaleChunks) {\n                return self::compareChunkLists($completeLocaleChunks, preg_split('/[_.-]+/', $language));\n            };\n\n            usort($locales, function ($first, $second) use ($getScore) {\n                return $getScore($second) <=> $getScore($first);\n            });\n\n            $locale = $locales[0];\n        }\n\n        if (isset($this->aliases[$locale])) {\n            $locale = $this->aliases[$locale];\n        }\n\n        // If subtag (ex: en_CA) first load the macro (ex: en) to have a fallback\n        if (str_contains($locale, '_') &&\n            $this->loadMessagesFromFile($macroLocale = preg_replace('/^([^_]+).*$/', '$1', $locale))\n        ) {\n            parent::setLocale($macroLocale);\n        }\n\n        if (!$this->loadMessagesFromFile($locale) && !$this->initializing) {\n            return false;\n        }\n\n        parent::setLocale($locale);\n\n        return true;\n    }\n\n    /**\n     * Show locale on var_dump().\n     *\n     * @return array\n     */\n    public function __debugInfo()\n    {\n        return [\n            'locale' => $this->getLocale(),\n        ];\n    }\n\n    private static function compareChunkLists($referenceChunks, $chunks)\n    {\n        $score = 0;\n\n        foreach ($referenceChunks as $index => $chunk) {\n            if (!isset($chunks[$index])) {\n                $score++;\n\n                continue;\n            }\n\n            if (strtolower($chunks[$index]) === strtolower($chunk)) {\n                $score += 10;\n            }\n        }\n\n        return $score;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Carbon.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\Traits\\Date;\nuse Carbon\\Traits\\DeprecatedProperties;\nuse DateTime;\nuse DateTimeInterface;\nuse DateTimeZone;\n\n/**\n * A simple API extension for DateTime.\n *\n * @mixin DeprecatedProperties\n *\n * <autodoc generated by `composer phpdoc`>\n *\n * @property      int                 $year\n * @property      int                 $yearIso\n * @property      int                 $month\n * @property      int                 $day\n * @property      int                 $hour\n * @property      int                 $minute\n * @property      int                 $second\n * @property      int                 $micro\n * @property      int                 $microsecond\n * @property      int|float|string    $timestamp                                                                                      seconds since the Unix Epoch\n * @property      string              $englishDayOfWeek                                                                               the day of week in English\n * @property      string              $shortEnglishDayOfWeek                                                                          the abbreviated day of week in English\n * @property      string              $englishMonth                                                                                   the month in English\n * @property      string              $shortEnglishMonth                                                                              the abbreviated month in English\n * @property      int                 $milliseconds\n * @property      int                 $millisecond\n * @property      int                 $milli\n * @property      int                 $week                                                                                           1 through 53\n * @property      int                 $isoWeek                                                                                        1 through 53\n * @property      int                 $weekYear                                                                                       year according to week format\n * @property      int                 $isoWeekYear                                                                                    year according to ISO week format\n * @property      int                 $dayOfYear                                                                                      1 through 366\n * @property      int                 $age                                                                                            does a diffInYears() with default parameters\n * @property      int                 $offset                                                                                         the timezone offset in seconds from UTC\n * @property      int                 $offsetMinutes                                                                                  the timezone offset in minutes from UTC\n * @property      int                 $offsetHours                                                                                    the timezone offset in hours from UTC\n * @property      CarbonTimeZone      $timezone                                                                                       the current timezone\n * @property      CarbonTimeZone      $tz                                                                                             alias of $timezone\n * @property-read int                 $dayOfWeek                                                                                      0 (for Sunday) through 6 (for Saturday)\n * @property-read int                 $dayOfWeekIso                                                                                   1 (for Monday) through 7 (for Sunday)\n * @property-read int                 $weekOfYear                                                                                     ISO-8601 week number of year, weeks starting on Monday\n * @property-read int                 $daysInMonth                                                                                    number of days in the given month\n * @property-read string              $latinMeridiem                                                                                  \"am\"/\"pm\" (Ante meridiem or Post meridiem latin lowercase mark)\n * @property-read string              $latinUpperMeridiem                                                                             \"AM\"/\"PM\" (Ante meridiem or Post meridiem latin uppercase mark)\n * @property-read string              $timezoneAbbreviatedName                                                                        the current timezone abbreviated name\n * @property-read string              $tzAbbrName                                                                                     alias of $timezoneAbbreviatedName\n * @property-read string              $dayName                                                                                        long name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $shortDayName                                                                                   short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $minDayName                                                                                     very short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $monthName                                                                                      long name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $shortMonthName                                                                                 short name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $meridiem                                                                                       lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read string              $upperMeridiem                                                                                  uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read int                 $noZeroHour                                                                                     current hour from 1 to 24\n * @property-read int                 $weeksInYear                                                                                    51 through 53\n * @property-read int                 $isoWeeksInYear                                                                                 51 through 53\n * @property-read int                 $weekOfMonth                                                                                    1 through 5\n * @property-read int                 $weekNumberInMonth                                                                              1 through 5\n * @property-read int                 $firstWeekDay                                                                                   0 through 6\n * @property-read int                 $lastWeekDay                                                                                    0 through 6\n * @property-read int                 $daysInYear                                                                                     365 or 366\n * @property-read int                 $quarter                                                                                        the quarter of this instance, 1 - 4\n * @property-read int                 $decade                                                                                         the decade of this instance\n * @property-read int                 $century                                                                                        the century of this instance\n * @property-read int                 $millennium                                                                                     the millennium of this instance\n * @property-read bool                $dst                                                                                            daylight savings time indicator, true if DST, false otherwise\n * @property-read bool                $local                                                                                          checks if the timezone is local, true if local, false otherwise\n * @property-read bool                $utc                                                                                            checks if the timezone is UTC, true if UTC, false otherwise\n * @property-read string              $timezoneName                                                                                   the current timezone name\n * @property-read string              $tzName                                                                                         alias of $timezoneName\n * @property-read string              $locale                                                                                         locale of the current instance\n *\n * @method        bool                isUtc()                                                                                         Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)\n * @method        bool                isLocal()                                                                                       Check if the current instance has non-UTC timezone.\n * @method        bool                isValid()                                                                                       Check if the current instance is a valid date.\n * @method        bool                isDST()                                                                                         Check if the current instance is in a daylight saving time.\n * @method        bool                isSunday()                                                                                      Checks if the instance day is sunday.\n * @method        bool                isMonday()                                                                                      Checks if the instance day is monday.\n * @method        bool                isTuesday()                                                                                     Checks if the instance day is tuesday.\n * @method        bool                isWednesday()                                                                                   Checks if the instance day is wednesday.\n * @method        bool                isThursday()                                                                                    Checks if the instance day is thursday.\n * @method        bool                isFriday()                                                                                      Checks if the instance day is friday.\n * @method        bool                isSaturday()                                                                                    Checks if the instance day is saturday.\n * @method        bool                isSameYear(Carbon|DateTimeInterface|string|null $date = null)                                   Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentYear()                                                                                 Checks if the instance is in the same year as the current moment.\n * @method        bool                isNextYear()                                                                                    Checks if the instance is in the same year as the current moment next year.\n * @method        bool                isLastYear()                                                                                    Checks if the instance is in the same year as the current moment last year.\n * @method        bool                isSameWeek(Carbon|DateTimeInterface|string|null $date = null)                                   Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentWeek()                                                                                 Checks if the instance is in the same week as the current moment.\n * @method        bool                isNextWeek()                                                                                    Checks if the instance is in the same week as the current moment next week.\n * @method        bool                isLastWeek()                                                                                    Checks if the instance is in the same week as the current moment last week.\n * @method        bool                isSameDay(Carbon|DateTimeInterface|string|null $date = null)                                    Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentDay()                                                                                  Checks if the instance is in the same day as the current moment.\n * @method        bool                isNextDay()                                                                                     Checks if the instance is in the same day as the current moment next day.\n * @method        bool                isLastDay()                                                                                     Checks if the instance is in the same day as the current moment last day.\n * @method        bool                isSameHour(Carbon|DateTimeInterface|string|null $date = null)                                   Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentHour()                                                                                 Checks if the instance is in the same hour as the current moment.\n * @method        bool                isNextHour()                                                                                    Checks if the instance is in the same hour as the current moment next hour.\n * @method        bool                isLastHour()                                                                                    Checks if the instance is in the same hour as the current moment last hour.\n * @method        bool                isSameMinute(Carbon|DateTimeInterface|string|null $date = null)                                 Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMinute()                                                                               Checks if the instance is in the same minute as the current moment.\n * @method        bool                isNextMinute()                                                                                  Checks if the instance is in the same minute as the current moment next minute.\n * @method        bool                isLastMinute()                                                                                  Checks if the instance is in the same minute as the current moment last minute.\n * @method        bool                isSameSecond(Carbon|DateTimeInterface|string|null $date = null)                                 Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentSecond()                                                                               Checks if the instance is in the same second as the current moment.\n * @method        bool                isNextSecond()                                                                                  Checks if the instance is in the same second as the current moment next second.\n * @method        bool                isLastSecond()                                                                                  Checks if the instance is in the same second as the current moment last second.\n * @method        bool                isSameMicro(Carbon|DateTimeInterface|string|null $date = null)                                  Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMicro()                                                                                Checks if the instance is in the same microsecond as the current moment.\n * @method        bool                isNextMicro()                                                                                   Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool                isLastMicro()                                                                                   Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool                isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null)                            Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMicrosecond()                                                                          Checks if the instance is in the same microsecond as the current moment.\n * @method        bool                isNextMicrosecond()                                                                             Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool                isLastMicrosecond()                                                                             Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool                isCurrentMonth()                                                                                Checks if the instance is in the same month as the current moment.\n * @method        bool                isNextMonth()                                                                                   Checks if the instance is in the same month as the current moment next month.\n * @method        bool                isLastMonth()                                                                                   Checks if the instance is in the same month as the current moment last month.\n * @method        bool                isCurrentQuarter()                                                                              Checks if the instance is in the same quarter as the current moment.\n * @method        bool                isNextQuarter()                                                                                 Checks if the instance is in the same quarter as the current moment next quarter.\n * @method        bool                isLastQuarter()                                                                                 Checks if the instance is in the same quarter as the current moment last quarter.\n * @method        bool                isSameDecade(Carbon|DateTimeInterface|string|null $date = null)                                 Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentDecade()                                                                               Checks if the instance is in the same decade as the current moment.\n * @method        bool                isNextDecade()                                                                                  Checks if the instance is in the same decade as the current moment next decade.\n * @method        bool                isLastDecade()                                                                                  Checks if the instance is in the same decade as the current moment last decade.\n * @method        bool                isSameCentury(Carbon|DateTimeInterface|string|null $date = null)                                Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentCentury()                                                                              Checks if the instance is in the same century as the current moment.\n * @method        bool                isNextCentury()                                                                                 Checks if the instance is in the same century as the current moment next century.\n * @method        bool                isLastCentury()                                                                                 Checks if the instance is in the same century as the current moment last century.\n * @method        bool                isSameMillennium(Carbon|DateTimeInterface|string|null $date = null)                             Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMillennium()                                                                           Checks if the instance is in the same millennium as the current moment.\n * @method        bool                isNextMillennium()                                                                              Checks if the instance is in the same millennium as the current moment next millennium.\n * @method        bool                isLastMillennium()                                                                              Checks if the instance is in the same millennium as the current moment last millennium.\n * @method        $this               years(int $value)                                                                               Set current instance year to the given value.\n * @method        $this               year(int $value)                                                                                Set current instance year to the given value.\n * @method        $this               setYears(int $value)                                                                            Set current instance year to the given value.\n * @method        $this               setYear(int $value)                                                                             Set current instance year to the given value.\n * @method        $this               months(int $value)                                                                              Set current instance month to the given value.\n * @method        $this               month(int $value)                                                                               Set current instance month to the given value.\n * @method        $this               setMonths(int $value)                                                                           Set current instance month to the given value.\n * @method        $this               setMonth(int $value)                                                                            Set current instance month to the given value.\n * @method        $this               days(int $value)                                                                                Set current instance day to the given value.\n * @method        $this               day(int $value)                                                                                 Set current instance day to the given value.\n * @method        $this               setDays(int $value)                                                                             Set current instance day to the given value.\n * @method        $this               setDay(int $value)                                                                              Set current instance day to the given value.\n * @method        $this               hours(int $value)                                                                               Set current instance hour to the given value.\n * @method        $this               hour(int $value)                                                                                Set current instance hour to the given value.\n * @method        $this               setHours(int $value)                                                                            Set current instance hour to the given value.\n * @method        $this               setHour(int $value)                                                                             Set current instance hour to the given value.\n * @method        $this               minutes(int $value)                                                                             Set current instance minute to the given value.\n * @method        $this               minute(int $value)                                                                              Set current instance minute to the given value.\n * @method        $this               setMinutes(int $value)                                                                          Set current instance minute to the given value.\n * @method        $this               setMinute(int $value)                                                                           Set current instance minute to the given value.\n * @method        $this               seconds(int $value)                                                                             Set current instance second to the given value.\n * @method        $this               second(int $value)                                                                              Set current instance second to the given value.\n * @method        $this               setSeconds(int $value)                                                                          Set current instance second to the given value.\n * @method        $this               setSecond(int $value)                                                                           Set current instance second to the given value.\n * @method        $this               millis(int $value)                                                                              Set current instance millisecond to the given value.\n * @method        $this               milli(int $value)                                                                               Set current instance millisecond to the given value.\n * @method        $this               setMillis(int $value)                                                                           Set current instance millisecond to the given value.\n * @method        $this               setMilli(int $value)                                                                            Set current instance millisecond to the given value.\n * @method        $this               milliseconds(int $value)                                                                        Set current instance millisecond to the given value.\n * @method        $this               millisecond(int $value)                                                                         Set current instance millisecond to the given value.\n * @method        $this               setMilliseconds(int $value)                                                                     Set current instance millisecond to the given value.\n * @method        $this               setMillisecond(int $value)                                                                      Set current instance millisecond to the given value.\n * @method        $this               micros(int $value)                                                                              Set current instance microsecond to the given value.\n * @method        $this               micro(int $value)                                                                               Set current instance microsecond to the given value.\n * @method        $this               setMicros(int $value)                                                                           Set current instance microsecond to the given value.\n * @method        $this               setMicro(int $value)                                                                            Set current instance microsecond to the given value.\n * @method        $this               microseconds(int $value)                                                                        Set current instance microsecond to the given value.\n * @method        $this               microsecond(int $value)                                                                         Set current instance microsecond to the given value.\n * @method        $this               setMicroseconds(int $value)                                                                     Set current instance microsecond to the given value.\n * @method        $this               setMicrosecond(int $value)                                                                      Set current instance microsecond to the given value.\n * @method        $this               addYears(int $value = 1)                                                                        Add years (the $value count passed in) to the instance (using date interval).\n * @method        $this               addYear()                                                                                       Add one year to the instance (using date interval).\n * @method        $this               subYears(int $value = 1)                                                                        Sub years (the $value count passed in) to the instance (using date interval).\n * @method        $this               subYear()                                                                                       Sub one year to the instance (using date interval).\n * @method        $this               addYearsWithOverflow(int $value = 1)                                                            Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addYearWithOverflow()                                                                           Add one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subYearsWithOverflow(int $value = 1)                                                            Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subYearWithOverflow()                                                                           Sub one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addYearsWithoutOverflow(int $value = 1)                                                         Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addYearWithoutOverflow()                                                                        Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subYearsWithoutOverflow(int $value = 1)                                                         Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subYearWithoutOverflow()                                                                        Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addYearsWithNoOverflow(int $value = 1)                                                          Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addYearWithNoOverflow()                                                                         Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subYearsWithNoOverflow(int $value = 1)                                                          Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subYearWithNoOverflow()                                                                         Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addYearsNoOverflow(int $value = 1)                                                              Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addYearNoOverflow()                                                                             Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subYearsNoOverflow(int $value = 1)                                                              Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subYearNoOverflow()                                                                             Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMonths(int $value = 1)                                                                       Add months (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMonth()                                                                                      Add one month to the instance (using date interval).\n * @method        $this               subMonths(int $value = 1)                                                                       Sub months (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMonth()                                                                                      Sub one month to the instance (using date interval).\n * @method        $this               addMonthsWithOverflow(int $value = 1)                                                           Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addMonthWithOverflow()                                                                          Add one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subMonthsWithOverflow(int $value = 1)                                                           Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subMonthWithOverflow()                                                                          Sub one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addMonthsWithoutOverflow(int $value = 1)                                                        Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMonthWithoutOverflow()                                                                       Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMonthsWithoutOverflow(int $value = 1)                                                        Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMonthWithoutOverflow()                                                                       Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMonthsWithNoOverflow(int $value = 1)                                                         Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMonthWithNoOverflow()                                                                        Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMonthsWithNoOverflow(int $value = 1)                                                         Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMonthWithNoOverflow()                                                                        Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMonthsNoOverflow(int $value = 1)                                                             Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMonthNoOverflow()                                                                            Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMonthsNoOverflow(int $value = 1)                                                             Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMonthNoOverflow()                                                                            Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDays(int $value = 1)                                                                         Add days (the $value count passed in) to the instance (using date interval).\n * @method        $this               addDay()                                                                                        Add one day to the instance (using date interval).\n * @method        $this               subDays(int $value = 1)                                                                         Sub days (the $value count passed in) to the instance (using date interval).\n * @method        $this               subDay()                                                                                        Sub one day to the instance (using date interval).\n * @method        $this               addHours(int $value = 1)                                                                        Add hours (the $value count passed in) to the instance (using date interval).\n * @method        $this               addHour()                                                                                       Add one hour to the instance (using date interval).\n * @method        $this               subHours(int $value = 1)                                                                        Sub hours (the $value count passed in) to the instance (using date interval).\n * @method        $this               subHour()                                                                                       Sub one hour to the instance (using date interval).\n * @method        $this               addMinutes(int $value = 1)                                                                      Add minutes (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMinute()                                                                                     Add one minute to the instance (using date interval).\n * @method        $this               subMinutes(int $value = 1)                                                                      Sub minutes (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMinute()                                                                                     Sub one minute to the instance (using date interval).\n * @method        $this               addSeconds(int $value = 1)                                                                      Add seconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               addSecond()                                                                                     Add one second to the instance (using date interval).\n * @method        $this               subSeconds(int $value = 1)                                                                      Sub seconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               subSecond()                                                                                     Sub one second to the instance (using date interval).\n * @method        $this               addMillis(int $value = 1)                                                                       Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMilli()                                                                                      Add one millisecond to the instance (using date interval).\n * @method        $this               subMillis(int $value = 1)                                                                       Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMilli()                                                                                      Sub one millisecond to the instance (using date interval).\n * @method        $this               addMilliseconds(int $value = 1)                                                                 Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMillisecond()                                                                                Add one millisecond to the instance (using date interval).\n * @method        $this               subMilliseconds(int $value = 1)                                                                 Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMillisecond()                                                                                Sub one millisecond to the instance (using date interval).\n * @method        $this               addMicros(int $value = 1)                                                                       Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMicro()                                                                                      Add one microsecond to the instance (using date interval).\n * @method        $this               subMicros(int $value = 1)                                                                       Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMicro()                                                                                      Sub one microsecond to the instance (using date interval).\n * @method        $this               addMicroseconds(int $value = 1)                                                                 Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMicrosecond()                                                                                Add one microsecond to the instance (using date interval).\n * @method        $this               subMicroseconds(int $value = 1)                                                                 Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMicrosecond()                                                                                Sub one microsecond to the instance (using date interval).\n * @method        $this               addMillennia(int $value = 1)                                                                    Add millennia (the $value count passed in) to the instance (using date interval).\n * @method        $this               addMillennium()                                                                                 Add one millennium to the instance (using date interval).\n * @method        $this               subMillennia(int $value = 1)                                                                    Sub millennia (the $value count passed in) to the instance (using date interval).\n * @method        $this               subMillennium()                                                                                 Sub one millennium to the instance (using date interval).\n * @method        $this               addMillenniaWithOverflow(int $value = 1)                                                        Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addMillenniumWithOverflow()                                                                     Add one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subMillenniaWithOverflow(int $value = 1)                                                        Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subMillenniumWithOverflow()                                                                     Sub one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addMillenniaWithoutOverflow(int $value = 1)                                                     Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMillenniumWithoutOverflow()                                                                  Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMillenniaWithoutOverflow(int $value = 1)                                                     Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMillenniumWithoutOverflow()                                                                  Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMillenniaWithNoOverflow(int $value = 1)                                                      Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMillenniumWithNoOverflow()                                                                   Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMillenniaWithNoOverflow(int $value = 1)                                                      Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMillenniumWithNoOverflow()                                                                   Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMillenniaNoOverflow(int $value = 1)                                                          Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addMillenniumNoOverflow()                                                                       Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMillenniaNoOverflow(int $value = 1)                                                          Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subMillenniumNoOverflow()                                                                       Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addCenturies(int $value = 1)                                                                    Add centuries (the $value count passed in) to the instance (using date interval).\n * @method        $this               addCentury()                                                                                    Add one century to the instance (using date interval).\n * @method        $this               subCenturies(int $value = 1)                                                                    Sub centuries (the $value count passed in) to the instance (using date interval).\n * @method        $this               subCentury()                                                                                    Sub one century to the instance (using date interval).\n * @method        $this               addCenturiesWithOverflow(int $value = 1)                                                        Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addCenturyWithOverflow()                                                                        Add one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subCenturiesWithOverflow(int $value = 1)                                                        Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subCenturyWithOverflow()                                                                        Sub one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addCenturiesWithoutOverflow(int $value = 1)                                                     Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addCenturyWithoutOverflow()                                                                     Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subCenturiesWithoutOverflow(int $value = 1)                                                     Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subCenturyWithoutOverflow()                                                                     Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addCenturiesWithNoOverflow(int $value = 1)                                                      Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addCenturyWithNoOverflow()                                                                      Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subCenturiesWithNoOverflow(int $value = 1)                                                      Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subCenturyWithNoOverflow()                                                                      Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addCenturiesNoOverflow(int $value = 1)                                                          Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addCenturyNoOverflow()                                                                          Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subCenturiesNoOverflow(int $value = 1)                                                          Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subCenturyNoOverflow()                                                                          Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDecades(int $value = 1)                                                                      Add decades (the $value count passed in) to the instance (using date interval).\n * @method        $this               addDecade()                                                                                     Add one decade to the instance (using date interval).\n * @method        $this               subDecades(int $value = 1)                                                                      Sub decades (the $value count passed in) to the instance (using date interval).\n * @method        $this               subDecade()                                                                                     Sub one decade to the instance (using date interval).\n * @method        $this               addDecadesWithOverflow(int $value = 1)                                                          Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addDecadeWithOverflow()                                                                         Add one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subDecadesWithOverflow(int $value = 1)                                                          Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subDecadeWithOverflow()                                                                         Sub one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addDecadesWithoutOverflow(int $value = 1)                                                       Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDecadeWithoutOverflow()                                                                      Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subDecadesWithoutOverflow(int $value = 1)                                                       Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subDecadeWithoutOverflow()                                                                      Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDecadesWithNoOverflow(int $value = 1)                                                        Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDecadeWithNoOverflow()                                                                       Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subDecadesWithNoOverflow(int $value = 1)                                                        Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subDecadeWithNoOverflow()                                                                       Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDecadesNoOverflow(int $value = 1)                                                            Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addDecadeNoOverflow()                                                                           Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subDecadesNoOverflow(int $value = 1)                                                            Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subDecadeNoOverflow()                                                                           Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addQuarters(int $value = 1)                                                                     Add quarters (the $value count passed in) to the instance (using date interval).\n * @method        $this               addQuarter()                                                                                    Add one quarter to the instance (using date interval).\n * @method        $this               subQuarters(int $value = 1)                                                                     Sub quarters (the $value count passed in) to the instance (using date interval).\n * @method        $this               subQuarter()                                                                                    Sub one quarter to the instance (using date interval).\n * @method        $this               addQuartersWithOverflow(int $value = 1)                                                         Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addQuarterWithOverflow()                                                                        Add one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subQuartersWithOverflow(int $value = 1)                                                         Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               subQuarterWithOverflow()                                                                        Sub one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        $this               addQuartersWithoutOverflow(int $value = 1)                                                      Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addQuarterWithoutOverflow()                                                                     Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subQuartersWithoutOverflow(int $value = 1)                                                      Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subQuarterWithoutOverflow()                                                                     Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addQuartersWithNoOverflow(int $value = 1)                                                       Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addQuarterWithNoOverflow()                                                                      Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subQuartersWithNoOverflow(int $value = 1)                                                       Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subQuarterWithNoOverflow()                                                                      Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addQuartersNoOverflow(int $value = 1)                                                           Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addQuarterNoOverflow()                                                                          Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subQuartersNoOverflow(int $value = 1)                                                           Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               subQuarterNoOverflow()                                                                          Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        $this               addWeeks(int $value = 1)                                                                        Add weeks (the $value count passed in) to the instance (using date interval).\n * @method        $this               addWeek()                                                                                       Add one week to the instance (using date interval).\n * @method        $this               subWeeks(int $value = 1)                                                                        Sub weeks (the $value count passed in) to the instance (using date interval).\n * @method        $this               subWeek()                                                                                       Sub one week to the instance (using date interval).\n * @method        $this               addWeekdays(int $value = 1)                                                                     Add weekdays (the $value count passed in) to the instance (using date interval).\n * @method        $this               addWeekday()                                                                                    Add one weekday to the instance (using date interval).\n * @method        $this               subWeekdays(int $value = 1)                                                                     Sub weekdays (the $value count passed in) to the instance (using date interval).\n * @method        $this               subWeekday()                                                                                    Sub one weekday to the instance (using date interval).\n * @method        $this               addRealMicros(int $value = 1)                                                                   Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMicro()                                                                                  Add one microsecond to the instance (using timestamp).\n * @method        $this               subRealMicros(int $value = 1)                                                                   Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMicro()                                                                                  Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod        microsUntil($endDate = null, int $factor = 1)                                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        $this               addRealMicroseconds(int $value = 1)                                                             Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMicrosecond()                                                                            Add one microsecond to the instance (using timestamp).\n * @method        $this               subRealMicroseconds(int $value = 1)                                                             Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMicrosecond()                                                                            Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod        microsecondsUntil($endDate = null, int $factor = 1)                                             Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        $this               addRealMillis(int $value = 1)                                                                   Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMilli()                                                                                  Add one millisecond to the instance (using timestamp).\n * @method        $this               subRealMillis(int $value = 1)                                                                   Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMilli()                                                                                  Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod        millisUntil($endDate = null, int $factor = 1)                                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        $this               addRealMilliseconds(int $value = 1)                                                             Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMillisecond()                                                                            Add one millisecond to the instance (using timestamp).\n * @method        $this               subRealMilliseconds(int $value = 1)                                                             Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMillisecond()                                                                            Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod        millisecondsUntil($endDate = null, int $factor = 1)                                             Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        $this               addRealSeconds(int $value = 1)                                                                  Add seconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealSecond()                                                                                 Add one second to the instance (using timestamp).\n * @method        $this               subRealSeconds(int $value = 1)                                                                  Sub seconds (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealSecond()                                                                                 Sub one second to the instance (using timestamp).\n * @method        CarbonPeriod        secondsUntil($endDate = null, int $factor = 1)                                                  Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given.\n * @method        $this               addRealMinutes(int $value = 1)                                                                  Add minutes (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMinute()                                                                                 Add one minute to the instance (using timestamp).\n * @method        $this               subRealMinutes(int $value = 1)                                                                  Sub minutes (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMinute()                                                                                 Sub one minute to the instance (using timestamp).\n * @method        CarbonPeriod        minutesUntil($endDate = null, int $factor = 1)                                                  Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given.\n * @method        $this               addRealHours(int $value = 1)                                                                    Add hours (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealHour()                                                                                   Add one hour to the instance (using timestamp).\n * @method        $this               subRealHours(int $value = 1)                                                                    Sub hours (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealHour()                                                                                   Sub one hour to the instance (using timestamp).\n * @method        CarbonPeriod        hoursUntil($endDate = null, int $factor = 1)                                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given.\n * @method        $this               addRealDays(int $value = 1)                                                                     Add days (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealDay()                                                                                    Add one day to the instance (using timestamp).\n * @method        $this               subRealDays(int $value = 1)                                                                     Sub days (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealDay()                                                                                    Sub one day to the instance (using timestamp).\n * @method        CarbonPeriod        daysUntil($endDate = null, int $factor = 1)                                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given.\n * @method        $this               addRealWeeks(int $value = 1)                                                                    Add weeks (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealWeek()                                                                                   Add one week to the instance (using timestamp).\n * @method        $this               subRealWeeks(int $value = 1)                                                                    Sub weeks (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealWeek()                                                                                   Sub one week to the instance (using timestamp).\n * @method        CarbonPeriod        weeksUntil($endDate = null, int $factor = 1)                                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given.\n * @method        $this               addRealMonths(int $value = 1)                                                                   Add months (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMonth()                                                                                  Add one month to the instance (using timestamp).\n * @method        $this               subRealMonths(int $value = 1)                                                                   Sub months (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMonth()                                                                                  Sub one month to the instance (using timestamp).\n * @method        CarbonPeriod        monthsUntil($endDate = null, int $factor = 1)                                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given.\n * @method        $this               addRealQuarters(int $value = 1)                                                                 Add quarters (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealQuarter()                                                                                Add one quarter to the instance (using timestamp).\n * @method        $this               subRealQuarters(int $value = 1)                                                                 Sub quarters (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealQuarter()                                                                                Sub one quarter to the instance (using timestamp).\n * @method        CarbonPeriod        quartersUntil($endDate = null, int $factor = 1)                                                 Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given.\n * @method        $this               addRealYears(int $value = 1)                                                                    Add years (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealYear()                                                                                   Add one year to the instance (using timestamp).\n * @method        $this               subRealYears(int $value = 1)                                                                    Sub years (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealYear()                                                                                   Sub one year to the instance (using timestamp).\n * @method        CarbonPeriod        yearsUntil($endDate = null, int $factor = 1)                                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given.\n * @method        $this               addRealDecades(int $value = 1)                                                                  Add decades (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealDecade()                                                                                 Add one decade to the instance (using timestamp).\n * @method        $this               subRealDecades(int $value = 1)                                                                  Sub decades (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealDecade()                                                                                 Sub one decade to the instance (using timestamp).\n * @method        CarbonPeriod        decadesUntil($endDate = null, int $factor = 1)                                                  Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given.\n * @method        $this               addRealCenturies(int $value = 1)                                                                Add centuries (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealCentury()                                                                                Add one century to the instance (using timestamp).\n * @method        $this               subRealCenturies(int $value = 1)                                                                Sub centuries (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealCentury()                                                                                Sub one century to the instance (using timestamp).\n * @method        CarbonPeriod        centuriesUntil($endDate = null, int $factor = 1)                                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given.\n * @method        $this               addRealMillennia(int $value = 1)                                                                Add millennia (the $value count passed in) to the instance (using timestamp).\n * @method        $this               addRealMillennium()                                                                             Add one millennium to the instance (using timestamp).\n * @method        $this               subRealMillennia(int $value = 1)                                                                Sub millennia (the $value count passed in) to the instance (using timestamp).\n * @method        $this               subRealMillennium()                                                                             Sub one millennium to the instance (using timestamp).\n * @method        CarbonPeriod        millenniaUntil($endDate = null, int $factor = 1)                                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given.\n * @method        $this               roundYear(float $precision = 1, string $function = \"round\")                                     Round the current instance year with given precision using the given function.\n * @method        $this               roundYears(float $precision = 1, string $function = \"round\")                                    Round the current instance year with given precision using the given function.\n * @method        $this               floorYear(float $precision = 1)                                                                 Truncate the current instance year with given precision.\n * @method        $this               floorYears(float $precision = 1)                                                                Truncate the current instance year with given precision.\n * @method        $this               ceilYear(float $precision = 1)                                                                  Ceil the current instance year with given precision.\n * @method        $this               ceilYears(float $precision = 1)                                                                 Ceil the current instance year with given precision.\n * @method        $this               roundMonth(float $precision = 1, string $function = \"round\")                                    Round the current instance month with given precision using the given function.\n * @method        $this               roundMonths(float $precision = 1, string $function = \"round\")                                   Round the current instance month with given precision using the given function.\n * @method        $this               floorMonth(float $precision = 1)                                                                Truncate the current instance month with given precision.\n * @method        $this               floorMonths(float $precision = 1)                                                               Truncate the current instance month with given precision.\n * @method        $this               ceilMonth(float $precision = 1)                                                                 Ceil the current instance month with given precision.\n * @method        $this               ceilMonths(float $precision = 1)                                                                Ceil the current instance month with given precision.\n * @method        $this               roundDay(float $precision = 1, string $function = \"round\")                                      Round the current instance day with given precision using the given function.\n * @method        $this               roundDays(float $precision = 1, string $function = \"round\")                                     Round the current instance day with given precision using the given function.\n * @method        $this               floorDay(float $precision = 1)                                                                  Truncate the current instance day with given precision.\n * @method        $this               floorDays(float $precision = 1)                                                                 Truncate the current instance day with given precision.\n * @method        $this               ceilDay(float $precision = 1)                                                                   Ceil the current instance day with given precision.\n * @method        $this               ceilDays(float $precision = 1)                                                                  Ceil the current instance day with given precision.\n * @method        $this               roundHour(float $precision = 1, string $function = \"round\")                                     Round the current instance hour with given precision using the given function.\n * @method        $this               roundHours(float $precision = 1, string $function = \"round\")                                    Round the current instance hour with given precision using the given function.\n * @method        $this               floorHour(float $precision = 1)                                                                 Truncate the current instance hour with given precision.\n * @method        $this               floorHours(float $precision = 1)                                                                Truncate the current instance hour with given precision.\n * @method        $this               ceilHour(float $precision = 1)                                                                  Ceil the current instance hour with given precision.\n * @method        $this               ceilHours(float $precision = 1)                                                                 Ceil the current instance hour with given precision.\n * @method        $this               roundMinute(float $precision = 1, string $function = \"round\")                                   Round the current instance minute with given precision using the given function.\n * @method        $this               roundMinutes(float $precision = 1, string $function = \"round\")                                  Round the current instance minute with given precision using the given function.\n * @method        $this               floorMinute(float $precision = 1)                                                               Truncate the current instance minute with given precision.\n * @method        $this               floorMinutes(float $precision = 1)                                                              Truncate the current instance minute with given precision.\n * @method        $this               ceilMinute(float $precision = 1)                                                                Ceil the current instance minute with given precision.\n * @method        $this               ceilMinutes(float $precision = 1)                                                               Ceil the current instance minute with given precision.\n * @method        $this               roundSecond(float $precision = 1, string $function = \"round\")                                   Round the current instance second with given precision using the given function.\n * @method        $this               roundSeconds(float $precision = 1, string $function = \"round\")                                  Round the current instance second with given precision using the given function.\n * @method        $this               floorSecond(float $precision = 1)                                                               Truncate the current instance second with given precision.\n * @method        $this               floorSeconds(float $precision = 1)                                                              Truncate the current instance second with given precision.\n * @method        $this               ceilSecond(float $precision = 1)                                                                Ceil the current instance second with given precision.\n * @method        $this               ceilSeconds(float $precision = 1)                                                               Ceil the current instance second with given precision.\n * @method        $this               roundMillennium(float $precision = 1, string $function = \"round\")                               Round the current instance millennium with given precision using the given function.\n * @method        $this               roundMillennia(float $precision = 1, string $function = \"round\")                                Round the current instance millennium with given precision using the given function.\n * @method        $this               floorMillennium(float $precision = 1)                                                           Truncate the current instance millennium with given precision.\n * @method        $this               floorMillennia(float $precision = 1)                                                            Truncate the current instance millennium with given precision.\n * @method        $this               ceilMillennium(float $precision = 1)                                                            Ceil the current instance millennium with given precision.\n * @method        $this               ceilMillennia(float $precision = 1)                                                             Ceil the current instance millennium with given precision.\n * @method        $this               roundCentury(float $precision = 1, string $function = \"round\")                                  Round the current instance century with given precision using the given function.\n * @method        $this               roundCenturies(float $precision = 1, string $function = \"round\")                                Round the current instance century with given precision using the given function.\n * @method        $this               floorCentury(float $precision = 1)                                                              Truncate the current instance century with given precision.\n * @method        $this               floorCenturies(float $precision = 1)                                                            Truncate the current instance century with given precision.\n * @method        $this               ceilCentury(float $precision = 1)                                                               Ceil the current instance century with given precision.\n * @method        $this               ceilCenturies(float $precision = 1)                                                             Ceil the current instance century with given precision.\n * @method        $this               roundDecade(float $precision = 1, string $function = \"round\")                                   Round the current instance decade with given precision using the given function.\n * @method        $this               roundDecades(float $precision = 1, string $function = \"round\")                                  Round the current instance decade with given precision using the given function.\n * @method        $this               floorDecade(float $precision = 1)                                                               Truncate the current instance decade with given precision.\n * @method        $this               floorDecades(float $precision = 1)                                                              Truncate the current instance decade with given precision.\n * @method        $this               ceilDecade(float $precision = 1)                                                                Ceil the current instance decade with given precision.\n * @method        $this               ceilDecades(float $precision = 1)                                                               Ceil the current instance decade with given precision.\n * @method        $this               roundQuarter(float $precision = 1, string $function = \"round\")                                  Round the current instance quarter with given precision using the given function.\n * @method        $this               roundQuarters(float $precision = 1, string $function = \"round\")                                 Round the current instance quarter with given precision using the given function.\n * @method        $this               floorQuarter(float $precision = 1)                                                              Truncate the current instance quarter with given precision.\n * @method        $this               floorQuarters(float $precision = 1)                                                             Truncate the current instance quarter with given precision.\n * @method        $this               ceilQuarter(float $precision = 1)                                                               Ceil the current instance quarter with given precision.\n * @method        $this               ceilQuarters(float $precision = 1)                                                              Ceil the current instance quarter with given precision.\n * @method        $this               roundMillisecond(float $precision = 1, string $function = \"round\")                              Round the current instance millisecond with given precision using the given function.\n * @method        $this               roundMilliseconds(float $precision = 1, string $function = \"round\")                             Round the current instance millisecond with given precision using the given function.\n * @method        $this               floorMillisecond(float $precision = 1)                                                          Truncate the current instance millisecond with given precision.\n * @method        $this               floorMilliseconds(float $precision = 1)                                                         Truncate the current instance millisecond with given precision.\n * @method        $this               ceilMillisecond(float $precision = 1)                                                           Ceil the current instance millisecond with given precision.\n * @method        $this               ceilMilliseconds(float $precision = 1)                                                          Ceil the current instance millisecond with given precision.\n * @method        $this               roundMicrosecond(float $precision = 1, string $function = \"round\")                              Round the current instance microsecond with given precision using the given function.\n * @method        $this               roundMicroseconds(float $precision = 1, string $function = \"round\")                             Round the current instance microsecond with given precision using the given function.\n * @method        $this               floorMicrosecond(float $precision = 1)                                                          Truncate the current instance microsecond with given precision.\n * @method        $this               floorMicroseconds(float $precision = 1)                                                         Truncate the current instance microsecond with given precision.\n * @method        $this               ceilMicrosecond(float $precision = 1)                                                           Ceil the current instance microsecond with given precision.\n * @method        $this               ceilMicroseconds(float $precision = 1)                                                          Ceil the current instance microsecond with given precision.\n * @method        string              shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                     Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                      Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                     Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                      Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                 Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1)              Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1)               Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        static static|false createFromFormat(string $format, string $time, DateTimeZone|string|false|null $timezone = null) Parse a string into a new Carbon object according to the specified format.\n * @method        static static       __set_state(array $array)                                                                       https://php.net/manual/en/datetime.set-state.php\n *\n * </autodoc>\n */\nclass Carbon extends DateTime implements CarbonInterface\n{\n    use Date;\n\n    /**\n     * Returns true if the current class/instance is mutable.\n     *\n     * @return bool\n     */\n    public static function isMutable()\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonConverterInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse DateTimeInterface;\n\ninterface CarbonConverterInterface\n{\n    public function convertDate(DateTimeInterface $dateTime, bool $negated = false): CarbonInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\Traits\\Date;\nuse Carbon\\Traits\\DeprecatedProperties;\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse DateTimeZone;\n\n/**\n * A simple API extension for DateTimeImmutable.\n *\n * @mixin DeprecatedProperties\n *\n * <autodoc generated by `composer phpdoc`>\n *\n * @property      int                 $year\n * @property      int                 $yearIso\n * @property      int                 $month\n * @property      int                 $day\n * @property      int                 $hour\n * @property      int                 $minute\n * @property      int                 $second\n * @property      int                 $micro\n * @property      int                 $microsecond\n * @property      int|float|string    $timestamp                                                                                      seconds since the Unix Epoch\n * @property      string              $englishDayOfWeek                                                                               the day of week in English\n * @property      string              $shortEnglishDayOfWeek                                                                          the abbreviated day of week in English\n * @property      string              $englishMonth                                                                                   the month in English\n * @property      string              $shortEnglishMonth                                                                              the abbreviated month in English\n * @property      int                 $milliseconds\n * @property      int                 $millisecond\n * @property      int                 $milli\n * @property      int                 $week                                                                                           1 through 53\n * @property      int                 $isoWeek                                                                                        1 through 53\n * @property      int                 $weekYear                                                                                       year according to week format\n * @property      int                 $isoWeekYear                                                                                    year according to ISO week format\n * @property      int                 $dayOfYear                                                                                      1 through 366\n * @property      int                 $age                                                                                            does a diffInYears() with default parameters\n * @property      int                 $offset                                                                                         the timezone offset in seconds from UTC\n * @property      int                 $offsetMinutes                                                                                  the timezone offset in minutes from UTC\n * @property      int                 $offsetHours                                                                                    the timezone offset in hours from UTC\n * @property      CarbonTimeZone      $timezone                                                                                       the current timezone\n * @property      CarbonTimeZone      $tz                                                                                             alias of $timezone\n * @property-read int                 $dayOfWeek                                                                                      0 (for Sunday) through 6 (for Saturday)\n * @property-read int                 $dayOfWeekIso                                                                                   1 (for Monday) through 7 (for Sunday)\n * @property-read int                 $weekOfYear                                                                                     ISO-8601 week number of year, weeks starting on Monday\n * @property-read int                 $daysInMonth                                                                                    number of days in the given month\n * @property-read string              $latinMeridiem                                                                                  \"am\"/\"pm\" (Ante meridiem or Post meridiem latin lowercase mark)\n * @property-read string              $latinUpperMeridiem                                                                             \"AM\"/\"PM\" (Ante meridiem or Post meridiem latin uppercase mark)\n * @property-read string              $timezoneAbbreviatedName                                                                        the current timezone abbreviated name\n * @property-read string              $tzAbbrName                                                                                     alias of $timezoneAbbreviatedName\n * @property-read string              $dayName                                                                                        long name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $shortDayName                                                                                   short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $minDayName                                                                                     very short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $monthName                                                                                      long name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $shortMonthName                                                                                 short name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string              $meridiem                                                                                       lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read string              $upperMeridiem                                                                                  uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read int                 $noZeroHour                                                                                     current hour from 1 to 24\n * @property-read int                 $weeksInYear                                                                                    51 through 53\n * @property-read int                 $isoWeeksInYear                                                                                 51 through 53\n * @property-read int                 $weekOfMonth                                                                                    1 through 5\n * @property-read int                 $weekNumberInMonth                                                                              1 through 5\n * @property-read int                 $firstWeekDay                                                                                   0 through 6\n * @property-read int                 $lastWeekDay                                                                                    0 through 6\n * @property-read int                 $daysInYear                                                                                     365 or 366\n * @property-read int                 $quarter                                                                                        the quarter of this instance, 1 - 4\n * @property-read int                 $decade                                                                                         the decade of this instance\n * @property-read int                 $century                                                                                        the century of this instance\n * @property-read int                 $millennium                                                                                     the millennium of this instance\n * @property-read bool                $dst                                                                                            daylight savings time indicator, true if DST, false otherwise\n * @property-read bool                $local                                                                                          checks if the timezone is local, true if local, false otherwise\n * @property-read bool                $utc                                                                                            checks if the timezone is UTC, true if UTC, false otherwise\n * @property-read string              $timezoneName                                                                                   the current timezone name\n * @property-read string              $tzName                                                                                         alias of $timezoneName\n * @property-read string              $locale                                                                                         locale of the current instance\n *\n * @method        bool                isUtc()                                                                                         Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)\n * @method        bool                isLocal()                                                                                       Check if the current instance has non-UTC timezone.\n * @method        bool                isValid()                                                                                       Check if the current instance is a valid date.\n * @method        bool                isDST()                                                                                         Check if the current instance is in a daylight saving time.\n * @method        bool                isSunday()                                                                                      Checks if the instance day is sunday.\n * @method        bool                isMonday()                                                                                      Checks if the instance day is monday.\n * @method        bool                isTuesday()                                                                                     Checks if the instance day is tuesday.\n * @method        bool                isWednesday()                                                                                   Checks if the instance day is wednesday.\n * @method        bool                isThursday()                                                                                    Checks if the instance day is thursday.\n * @method        bool                isFriday()                                                                                      Checks if the instance day is friday.\n * @method        bool                isSaturday()                                                                                    Checks if the instance day is saturday.\n * @method        bool                isSameYear(Carbon|DateTimeInterface|string|null $date = null)                                   Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentYear()                                                                                 Checks if the instance is in the same year as the current moment.\n * @method        bool                isNextYear()                                                                                    Checks if the instance is in the same year as the current moment next year.\n * @method        bool                isLastYear()                                                                                    Checks if the instance is in the same year as the current moment last year.\n * @method        bool                isSameWeek(Carbon|DateTimeInterface|string|null $date = null)                                   Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentWeek()                                                                                 Checks if the instance is in the same week as the current moment.\n * @method        bool                isNextWeek()                                                                                    Checks if the instance is in the same week as the current moment next week.\n * @method        bool                isLastWeek()                                                                                    Checks if the instance is in the same week as the current moment last week.\n * @method        bool                isSameDay(Carbon|DateTimeInterface|string|null $date = null)                                    Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentDay()                                                                                  Checks if the instance is in the same day as the current moment.\n * @method        bool                isNextDay()                                                                                     Checks if the instance is in the same day as the current moment next day.\n * @method        bool                isLastDay()                                                                                     Checks if the instance is in the same day as the current moment last day.\n * @method        bool                isSameHour(Carbon|DateTimeInterface|string|null $date = null)                                   Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentHour()                                                                                 Checks if the instance is in the same hour as the current moment.\n * @method        bool                isNextHour()                                                                                    Checks if the instance is in the same hour as the current moment next hour.\n * @method        bool                isLastHour()                                                                                    Checks if the instance is in the same hour as the current moment last hour.\n * @method        bool                isSameMinute(Carbon|DateTimeInterface|string|null $date = null)                                 Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMinute()                                                                               Checks if the instance is in the same minute as the current moment.\n * @method        bool                isNextMinute()                                                                                  Checks if the instance is in the same minute as the current moment next minute.\n * @method        bool                isLastMinute()                                                                                  Checks if the instance is in the same minute as the current moment last minute.\n * @method        bool                isSameSecond(Carbon|DateTimeInterface|string|null $date = null)                                 Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentSecond()                                                                               Checks if the instance is in the same second as the current moment.\n * @method        bool                isNextSecond()                                                                                  Checks if the instance is in the same second as the current moment next second.\n * @method        bool                isLastSecond()                                                                                  Checks if the instance is in the same second as the current moment last second.\n * @method        bool                isSameMicro(Carbon|DateTimeInterface|string|null $date = null)                                  Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMicro()                                                                                Checks if the instance is in the same microsecond as the current moment.\n * @method        bool                isNextMicro()                                                                                   Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool                isLastMicro()                                                                                   Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool                isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null)                            Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMicrosecond()                                                                          Checks if the instance is in the same microsecond as the current moment.\n * @method        bool                isNextMicrosecond()                                                                             Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool                isLastMicrosecond()                                                                             Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool                isCurrentMonth()                                                                                Checks if the instance is in the same month as the current moment.\n * @method        bool                isNextMonth()                                                                                   Checks if the instance is in the same month as the current moment next month.\n * @method        bool                isLastMonth()                                                                                   Checks if the instance is in the same month as the current moment last month.\n * @method        bool                isCurrentQuarter()                                                                              Checks if the instance is in the same quarter as the current moment.\n * @method        bool                isNextQuarter()                                                                                 Checks if the instance is in the same quarter as the current moment next quarter.\n * @method        bool                isLastQuarter()                                                                                 Checks if the instance is in the same quarter as the current moment last quarter.\n * @method        bool                isSameDecade(Carbon|DateTimeInterface|string|null $date = null)                                 Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentDecade()                                                                               Checks if the instance is in the same decade as the current moment.\n * @method        bool                isNextDecade()                                                                                  Checks if the instance is in the same decade as the current moment next decade.\n * @method        bool                isLastDecade()                                                                                  Checks if the instance is in the same decade as the current moment last decade.\n * @method        bool                isSameCentury(Carbon|DateTimeInterface|string|null $date = null)                                Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentCentury()                                                                              Checks if the instance is in the same century as the current moment.\n * @method        bool                isNextCentury()                                                                                 Checks if the instance is in the same century as the current moment next century.\n * @method        bool                isLastCentury()                                                                                 Checks if the instance is in the same century as the current moment last century.\n * @method        bool                isSameMillennium(Carbon|DateTimeInterface|string|null $date = null)                             Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool                isCurrentMillennium()                                                                           Checks if the instance is in the same millennium as the current moment.\n * @method        bool                isNextMillennium()                                                                              Checks if the instance is in the same millennium as the current moment next millennium.\n * @method        bool                isLastMillennium()                                                                              Checks if the instance is in the same millennium as the current moment last millennium.\n * @method        CarbonImmutable     years(int $value)                                                                               Set current instance year to the given value.\n * @method        CarbonImmutable     year(int $value)                                                                                Set current instance year to the given value.\n * @method        CarbonImmutable     setYears(int $value)                                                                            Set current instance year to the given value.\n * @method        CarbonImmutable     setYear(int $value)                                                                             Set current instance year to the given value.\n * @method        CarbonImmutable     months(int $value)                                                                              Set current instance month to the given value.\n * @method        CarbonImmutable     month(int $value)                                                                               Set current instance month to the given value.\n * @method        CarbonImmutable     setMonths(int $value)                                                                           Set current instance month to the given value.\n * @method        CarbonImmutable     setMonth(int $value)                                                                            Set current instance month to the given value.\n * @method        CarbonImmutable     days(int $value)                                                                                Set current instance day to the given value.\n * @method        CarbonImmutable     day(int $value)                                                                                 Set current instance day to the given value.\n * @method        CarbonImmutable     setDays(int $value)                                                                             Set current instance day to the given value.\n * @method        CarbonImmutable     setDay(int $value)                                                                              Set current instance day to the given value.\n * @method        CarbonImmutable     hours(int $value)                                                                               Set current instance hour to the given value.\n * @method        CarbonImmutable     hour(int $value)                                                                                Set current instance hour to the given value.\n * @method        CarbonImmutable     setHours(int $value)                                                                            Set current instance hour to the given value.\n * @method        CarbonImmutable     setHour(int $value)                                                                             Set current instance hour to the given value.\n * @method        CarbonImmutable     minutes(int $value)                                                                             Set current instance minute to the given value.\n * @method        CarbonImmutable     minute(int $value)                                                                              Set current instance minute to the given value.\n * @method        CarbonImmutable     setMinutes(int $value)                                                                          Set current instance minute to the given value.\n * @method        CarbonImmutable     setMinute(int $value)                                                                           Set current instance minute to the given value.\n * @method        CarbonImmutable     seconds(int $value)                                                                             Set current instance second to the given value.\n * @method        CarbonImmutable     second(int $value)                                                                              Set current instance second to the given value.\n * @method        CarbonImmutable     setSeconds(int $value)                                                                          Set current instance second to the given value.\n * @method        CarbonImmutable     setSecond(int $value)                                                                           Set current instance second to the given value.\n * @method        CarbonImmutable     millis(int $value)                                                                              Set current instance millisecond to the given value.\n * @method        CarbonImmutable     milli(int $value)                                                                               Set current instance millisecond to the given value.\n * @method        CarbonImmutable     setMillis(int $value)                                                                           Set current instance millisecond to the given value.\n * @method        CarbonImmutable     setMilli(int $value)                                                                            Set current instance millisecond to the given value.\n * @method        CarbonImmutable     milliseconds(int $value)                                                                        Set current instance millisecond to the given value.\n * @method        CarbonImmutable     millisecond(int $value)                                                                         Set current instance millisecond to the given value.\n * @method        CarbonImmutable     setMilliseconds(int $value)                                                                     Set current instance millisecond to the given value.\n * @method        CarbonImmutable     setMillisecond(int $value)                                                                      Set current instance millisecond to the given value.\n * @method        CarbonImmutable     micros(int $value)                                                                              Set current instance microsecond to the given value.\n * @method        CarbonImmutable     micro(int $value)                                                                               Set current instance microsecond to the given value.\n * @method        CarbonImmutable     setMicros(int $value)                                                                           Set current instance microsecond to the given value.\n * @method        CarbonImmutable     setMicro(int $value)                                                                            Set current instance microsecond to the given value.\n * @method        CarbonImmutable     microseconds(int $value)                                                                        Set current instance microsecond to the given value.\n * @method        CarbonImmutable     microsecond(int $value)                                                                         Set current instance microsecond to the given value.\n * @method        CarbonImmutable     setMicroseconds(int $value)                                                                     Set current instance microsecond to the given value.\n * @method        CarbonImmutable     setMicrosecond(int $value)                                                                      Set current instance microsecond to the given value.\n * @method        CarbonImmutable     addYears(int $value = 1)                                                                        Add years (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addYear()                                                                                       Add one year to the instance (using date interval).\n * @method        CarbonImmutable     subYears(int $value = 1)                                                                        Sub years (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subYear()                                                                                       Sub one year to the instance (using date interval).\n * @method        CarbonImmutable     addYearsWithOverflow(int $value = 1)                                                            Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addYearWithOverflow()                                                                           Add one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subYearsWithOverflow(int $value = 1)                                                            Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subYearWithOverflow()                                                                           Sub one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addYearsWithoutOverflow(int $value = 1)                                                         Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addYearWithoutOverflow()                                                                        Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subYearsWithoutOverflow(int $value = 1)                                                         Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subYearWithoutOverflow()                                                                        Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addYearsWithNoOverflow(int $value = 1)                                                          Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addYearWithNoOverflow()                                                                         Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subYearsWithNoOverflow(int $value = 1)                                                          Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subYearWithNoOverflow()                                                                         Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addYearsNoOverflow(int $value = 1)                                                              Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addYearNoOverflow()                                                                             Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subYearsNoOverflow(int $value = 1)                                                              Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subYearNoOverflow()                                                                             Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMonths(int $value = 1)                                                                       Add months (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMonth()                                                                                      Add one month to the instance (using date interval).\n * @method        CarbonImmutable     subMonths(int $value = 1)                                                                       Sub months (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMonth()                                                                                      Sub one month to the instance (using date interval).\n * @method        CarbonImmutable     addMonthsWithOverflow(int $value = 1)                                                           Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addMonthWithOverflow()                                                                          Add one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subMonthsWithOverflow(int $value = 1)                                                           Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subMonthWithOverflow()                                                                          Sub one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addMonthsWithoutOverflow(int $value = 1)                                                        Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMonthWithoutOverflow()                                                                       Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMonthsWithoutOverflow(int $value = 1)                                                        Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMonthWithoutOverflow()                                                                       Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMonthsWithNoOverflow(int $value = 1)                                                         Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMonthWithNoOverflow()                                                                        Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMonthsWithNoOverflow(int $value = 1)                                                         Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMonthWithNoOverflow()                                                                        Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMonthsNoOverflow(int $value = 1)                                                             Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMonthNoOverflow()                                                                            Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMonthsNoOverflow(int $value = 1)                                                             Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMonthNoOverflow()                                                                            Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDays(int $value = 1)                                                                         Add days (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addDay()                                                                                        Add one day to the instance (using date interval).\n * @method        CarbonImmutable     subDays(int $value = 1)                                                                         Sub days (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subDay()                                                                                        Sub one day to the instance (using date interval).\n * @method        CarbonImmutable     addHours(int $value = 1)                                                                        Add hours (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addHour()                                                                                       Add one hour to the instance (using date interval).\n * @method        CarbonImmutable     subHours(int $value = 1)                                                                        Sub hours (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subHour()                                                                                       Sub one hour to the instance (using date interval).\n * @method        CarbonImmutable     addMinutes(int $value = 1)                                                                      Add minutes (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMinute()                                                                                     Add one minute to the instance (using date interval).\n * @method        CarbonImmutable     subMinutes(int $value = 1)                                                                      Sub minutes (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMinute()                                                                                     Sub one minute to the instance (using date interval).\n * @method        CarbonImmutable     addSeconds(int $value = 1)                                                                      Add seconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addSecond()                                                                                     Add one second to the instance (using date interval).\n * @method        CarbonImmutable     subSeconds(int $value = 1)                                                                      Sub seconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subSecond()                                                                                     Sub one second to the instance (using date interval).\n * @method        CarbonImmutable     addMillis(int $value = 1)                                                                       Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMilli()                                                                                      Add one millisecond to the instance (using date interval).\n * @method        CarbonImmutable     subMillis(int $value = 1)                                                                       Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMilli()                                                                                      Sub one millisecond to the instance (using date interval).\n * @method        CarbonImmutable     addMilliseconds(int $value = 1)                                                                 Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMillisecond()                                                                                Add one millisecond to the instance (using date interval).\n * @method        CarbonImmutable     subMilliseconds(int $value = 1)                                                                 Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMillisecond()                                                                                Sub one millisecond to the instance (using date interval).\n * @method        CarbonImmutable     addMicros(int $value = 1)                                                                       Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMicro()                                                                                      Add one microsecond to the instance (using date interval).\n * @method        CarbonImmutable     subMicros(int $value = 1)                                                                       Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMicro()                                                                                      Sub one microsecond to the instance (using date interval).\n * @method        CarbonImmutable     addMicroseconds(int $value = 1)                                                                 Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMicrosecond()                                                                                Add one microsecond to the instance (using date interval).\n * @method        CarbonImmutable     subMicroseconds(int $value = 1)                                                                 Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMicrosecond()                                                                                Sub one microsecond to the instance (using date interval).\n * @method        CarbonImmutable     addMillennia(int $value = 1)                                                                    Add millennia (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addMillennium()                                                                                 Add one millennium to the instance (using date interval).\n * @method        CarbonImmutable     subMillennia(int $value = 1)                                                                    Sub millennia (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subMillennium()                                                                                 Sub one millennium to the instance (using date interval).\n * @method        CarbonImmutable     addMillenniaWithOverflow(int $value = 1)                                                        Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addMillenniumWithOverflow()                                                                     Add one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subMillenniaWithOverflow(int $value = 1)                                                        Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subMillenniumWithOverflow()                                                                     Sub one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addMillenniaWithoutOverflow(int $value = 1)                                                     Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMillenniumWithoutOverflow()                                                                  Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMillenniaWithoutOverflow(int $value = 1)                                                     Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMillenniumWithoutOverflow()                                                                  Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMillenniaWithNoOverflow(int $value = 1)                                                      Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMillenniumWithNoOverflow()                                                                   Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMillenniaWithNoOverflow(int $value = 1)                                                      Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMillenniumWithNoOverflow()                                                                   Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMillenniaNoOverflow(int $value = 1)                                                          Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addMillenniumNoOverflow()                                                                       Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMillenniaNoOverflow(int $value = 1)                                                          Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subMillenniumNoOverflow()                                                                       Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addCenturies(int $value = 1)                                                                    Add centuries (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addCentury()                                                                                    Add one century to the instance (using date interval).\n * @method        CarbonImmutable     subCenturies(int $value = 1)                                                                    Sub centuries (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subCentury()                                                                                    Sub one century to the instance (using date interval).\n * @method        CarbonImmutable     addCenturiesWithOverflow(int $value = 1)                                                        Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addCenturyWithOverflow()                                                                        Add one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subCenturiesWithOverflow(int $value = 1)                                                        Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subCenturyWithOverflow()                                                                        Sub one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addCenturiesWithoutOverflow(int $value = 1)                                                     Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addCenturyWithoutOverflow()                                                                     Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subCenturiesWithoutOverflow(int $value = 1)                                                     Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subCenturyWithoutOverflow()                                                                     Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addCenturiesWithNoOverflow(int $value = 1)                                                      Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addCenturyWithNoOverflow()                                                                      Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subCenturiesWithNoOverflow(int $value = 1)                                                      Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subCenturyWithNoOverflow()                                                                      Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addCenturiesNoOverflow(int $value = 1)                                                          Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addCenturyNoOverflow()                                                                          Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subCenturiesNoOverflow(int $value = 1)                                                          Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subCenturyNoOverflow()                                                                          Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDecades(int $value = 1)                                                                      Add decades (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addDecade()                                                                                     Add one decade to the instance (using date interval).\n * @method        CarbonImmutable     subDecades(int $value = 1)                                                                      Sub decades (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subDecade()                                                                                     Sub one decade to the instance (using date interval).\n * @method        CarbonImmutable     addDecadesWithOverflow(int $value = 1)                                                          Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addDecadeWithOverflow()                                                                         Add one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subDecadesWithOverflow(int $value = 1)                                                          Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subDecadeWithOverflow()                                                                         Sub one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addDecadesWithoutOverflow(int $value = 1)                                                       Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDecadeWithoutOverflow()                                                                      Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subDecadesWithoutOverflow(int $value = 1)                                                       Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subDecadeWithoutOverflow()                                                                      Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDecadesWithNoOverflow(int $value = 1)                                                        Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDecadeWithNoOverflow()                                                                       Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subDecadesWithNoOverflow(int $value = 1)                                                        Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subDecadeWithNoOverflow()                                                                       Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDecadesNoOverflow(int $value = 1)                                                            Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addDecadeNoOverflow()                                                                           Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subDecadesNoOverflow(int $value = 1)                                                            Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subDecadeNoOverflow()                                                                           Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addQuarters(int $value = 1)                                                                     Add quarters (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addQuarter()                                                                                    Add one quarter to the instance (using date interval).\n * @method        CarbonImmutable     subQuarters(int $value = 1)                                                                     Sub quarters (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subQuarter()                                                                                    Sub one quarter to the instance (using date interval).\n * @method        CarbonImmutable     addQuartersWithOverflow(int $value = 1)                                                         Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addQuarterWithOverflow()                                                                        Add one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subQuartersWithOverflow(int $value = 1)                                                         Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     subQuarterWithOverflow()                                                                        Sub one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonImmutable     addQuartersWithoutOverflow(int $value = 1)                                                      Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addQuarterWithoutOverflow()                                                                     Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subQuartersWithoutOverflow(int $value = 1)                                                      Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subQuarterWithoutOverflow()                                                                     Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addQuartersWithNoOverflow(int $value = 1)                                                       Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addQuarterWithNoOverflow()                                                                      Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subQuartersWithNoOverflow(int $value = 1)                                                       Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subQuarterWithNoOverflow()                                                                      Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addQuartersNoOverflow(int $value = 1)                                                           Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addQuarterNoOverflow()                                                                          Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subQuartersNoOverflow(int $value = 1)                                                           Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     subQuarterNoOverflow()                                                                          Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonImmutable     addWeeks(int $value = 1)                                                                        Add weeks (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addWeek()                                                                                       Add one week to the instance (using date interval).\n * @method        CarbonImmutable     subWeeks(int $value = 1)                                                                        Sub weeks (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subWeek()                                                                                       Sub one week to the instance (using date interval).\n * @method        CarbonImmutable     addWeekdays(int $value = 1)                                                                     Add weekdays (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     addWeekday()                                                                                    Add one weekday to the instance (using date interval).\n * @method        CarbonImmutable     subWeekdays(int $value = 1)                                                                     Sub weekdays (the $value count passed in) to the instance (using date interval).\n * @method        CarbonImmutable     subWeekday()                                                                                    Sub one weekday to the instance (using date interval).\n * @method        CarbonImmutable     addRealMicros(int $value = 1)                                                                   Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMicro()                                                                                  Add one microsecond to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMicros(int $value = 1)                                                                   Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMicro()                                                                                  Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod        microsUntil($endDate = null, int $factor = 1)                                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        CarbonImmutable     addRealMicroseconds(int $value = 1)                                                             Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMicrosecond()                                                                            Add one microsecond to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMicroseconds(int $value = 1)                                                             Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMicrosecond()                                                                            Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod        microsecondsUntil($endDate = null, int $factor = 1)                                             Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        CarbonImmutable     addRealMillis(int $value = 1)                                                                   Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMilli()                                                                                  Add one millisecond to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMillis(int $value = 1)                                                                   Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMilli()                                                                                  Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod        millisUntil($endDate = null, int $factor = 1)                                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        CarbonImmutable     addRealMilliseconds(int $value = 1)                                                             Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMillisecond()                                                                            Add one millisecond to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMilliseconds(int $value = 1)                                                             Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMillisecond()                                                                            Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod        millisecondsUntil($endDate = null, int $factor = 1)                                             Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        CarbonImmutable     addRealSeconds(int $value = 1)                                                                  Add seconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealSecond()                                                                                 Add one second to the instance (using timestamp).\n * @method        CarbonImmutable     subRealSeconds(int $value = 1)                                                                  Sub seconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealSecond()                                                                                 Sub one second to the instance (using timestamp).\n * @method        CarbonPeriod        secondsUntil($endDate = null, int $factor = 1)                                                  Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given.\n * @method        CarbonImmutable     addRealMinutes(int $value = 1)                                                                  Add minutes (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMinute()                                                                                 Add one minute to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMinutes(int $value = 1)                                                                  Sub minutes (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMinute()                                                                                 Sub one minute to the instance (using timestamp).\n * @method        CarbonPeriod        minutesUntil($endDate = null, int $factor = 1)                                                  Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given.\n * @method        CarbonImmutable     addRealHours(int $value = 1)                                                                    Add hours (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealHour()                                                                                   Add one hour to the instance (using timestamp).\n * @method        CarbonImmutable     subRealHours(int $value = 1)                                                                    Sub hours (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealHour()                                                                                   Sub one hour to the instance (using timestamp).\n * @method        CarbonPeriod        hoursUntil($endDate = null, int $factor = 1)                                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given.\n * @method        CarbonImmutable     addRealDays(int $value = 1)                                                                     Add days (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealDay()                                                                                    Add one day to the instance (using timestamp).\n * @method        CarbonImmutable     subRealDays(int $value = 1)                                                                     Sub days (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealDay()                                                                                    Sub one day to the instance (using timestamp).\n * @method        CarbonPeriod        daysUntil($endDate = null, int $factor = 1)                                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given.\n * @method        CarbonImmutable     addRealWeeks(int $value = 1)                                                                    Add weeks (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealWeek()                                                                                   Add one week to the instance (using timestamp).\n * @method        CarbonImmutable     subRealWeeks(int $value = 1)                                                                    Sub weeks (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealWeek()                                                                                   Sub one week to the instance (using timestamp).\n * @method        CarbonPeriod        weeksUntil($endDate = null, int $factor = 1)                                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given.\n * @method        CarbonImmutable     addRealMonths(int $value = 1)                                                                   Add months (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMonth()                                                                                  Add one month to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMonths(int $value = 1)                                                                   Sub months (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMonth()                                                                                  Sub one month to the instance (using timestamp).\n * @method        CarbonPeriod        monthsUntil($endDate = null, int $factor = 1)                                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given.\n * @method        CarbonImmutable     addRealQuarters(int $value = 1)                                                                 Add quarters (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealQuarter()                                                                                Add one quarter to the instance (using timestamp).\n * @method        CarbonImmutable     subRealQuarters(int $value = 1)                                                                 Sub quarters (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealQuarter()                                                                                Sub one quarter to the instance (using timestamp).\n * @method        CarbonPeriod        quartersUntil($endDate = null, int $factor = 1)                                                 Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given.\n * @method        CarbonImmutable     addRealYears(int $value = 1)                                                                    Add years (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealYear()                                                                                   Add one year to the instance (using timestamp).\n * @method        CarbonImmutable     subRealYears(int $value = 1)                                                                    Sub years (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealYear()                                                                                   Sub one year to the instance (using timestamp).\n * @method        CarbonPeriod        yearsUntil($endDate = null, int $factor = 1)                                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given.\n * @method        CarbonImmutable     addRealDecades(int $value = 1)                                                                  Add decades (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealDecade()                                                                                 Add one decade to the instance (using timestamp).\n * @method        CarbonImmutable     subRealDecades(int $value = 1)                                                                  Sub decades (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealDecade()                                                                                 Sub one decade to the instance (using timestamp).\n * @method        CarbonPeriod        decadesUntil($endDate = null, int $factor = 1)                                                  Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given.\n * @method        CarbonImmutable     addRealCenturies(int $value = 1)                                                                Add centuries (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealCentury()                                                                                Add one century to the instance (using timestamp).\n * @method        CarbonImmutable     subRealCenturies(int $value = 1)                                                                Sub centuries (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealCentury()                                                                                Sub one century to the instance (using timestamp).\n * @method        CarbonPeriod        centuriesUntil($endDate = null, int $factor = 1)                                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given.\n * @method        CarbonImmutable     addRealMillennia(int $value = 1)                                                                Add millennia (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     addRealMillennium()                                                                             Add one millennium to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMillennia(int $value = 1)                                                                Sub millennia (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonImmutable     subRealMillennium()                                                                             Sub one millennium to the instance (using timestamp).\n * @method        CarbonPeriod        millenniaUntil($endDate = null, int $factor = 1)                                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given.\n * @method        CarbonImmutable     roundYear(float $precision = 1, string $function = \"round\")                                     Round the current instance year with given precision using the given function.\n * @method        CarbonImmutable     roundYears(float $precision = 1, string $function = \"round\")                                    Round the current instance year with given precision using the given function.\n * @method        CarbonImmutable     floorYear(float $precision = 1)                                                                 Truncate the current instance year with given precision.\n * @method        CarbonImmutable     floorYears(float $precision = 1)                                                                Truncate the current instance year with given precision.\n * @method        CarbonImmutable     ceilYear(float $precision = 1)                                                                  Ceil the current instance year with given precision.\n * @method        CarbonImmutable     ceilYears(float $precision = 1)                                                                 Ceil the current instance year with given precision.\n * @method        CarbonImmutable     roundMonth(float $precision = 1, string $function = \"round\")                                    Round the current instance month with given precision using the given function.\n * @method        CarbonImmutable     roundMonths(float $precision = 1, string $function = \"round\")                                   Round the current instance month with given precision using the given function.\n * @method        CarbonImmutable     floorMonth(float $precision = 1)                                                                Truncate the current instance month with given precision.\n * @method        CarbonImmutable     floorMonths(float $precision = 1)                                                               Truncate the current instance month with given precision.\n * @method        CarbonImmutable     ceilMonth(float $precision = 1)                                                                 Ceil the current instance month with given precision.\n * @method        CarbonImmutable     ceilMonths(float $precision = 1)                                                                Ceil the current instance month with given precision.\n * @method        CarbonImmutable     roundDay(float $precision = 1, string $function = \"round\")                                      Round the current instance day with given precision using the given function.\n * @method        CarbonImmutable     roundDays(float $precision = 1, string $function = \"round\")                                     Round the current instance day with given precision using the given function.\n * @method        CarbonImmutable     floorDay(float $precision = 1)                                                                  Truncate the current instance day with given precision.\n * @method        CarbonImmutable     floorDays(float $precision = 1)                                                                 Truncate the current instance day with given precision.\n * @method        CarbonImmutable     ceilDay(float $precision = 1)                                                                   Ceil the current instance day with given precision.\n * @method        CarbonImmutable     ceilDays(float $precision = 1)                                                                  Ceil the current instance day with given precision.\n * @method        CarbonImmutable     roundHour(float $precision = 1, string $function = \"round\")                                     Round the current instance hour with given precision using the given function.\n * @method        CarbonImmutable     roundHours(float $precision = 1, string $function = \"round\")                                    Round the current instance hour with given precision using the given function.\n * @method        CarbonImmutable     floorHour(float $precision = 1)                                                                 Truncate the current instance hour with given precision.\n * @method        CarbonImmutable     floorHours(float $precision = 1)                                                                Truncate the current instance hour with given precision.\n * @method        CarbonImmutable     ceilHour(float $precision = 1)                                                                  Ceil the current instance hour with given precision.\n * @method        CarbonImmutable     ceilHours(float $precision = 1)                                                                 Ceil the current instance hour with given precision.\n * @method        CarbonImmutable     roundMinute(float $precision = 1, string $function = \"round\")                                   Round the current instance minute with given precision using the given function.\n * @method        CarbonImmutable     roundMinutes(float $precision = 1, string $function = \"round\")                                  Round the current instance minute with given precision using the given function.\n * @method        CarbonImmutable     floorMinute(float $precision = 1)                                                               Truncate the current instance minute with given precision.\n * @method        CarbonImmutable     floorMinutes(float $precision = 1)                                                              Truncate the current instance minute with given precision.\n * @method        CarbonImmutable     ceilMinute(float $precision = 1)                                                                Ceil the current instance minute with given precision.\n * @method        CarbonImmutable     ceilMinutes(float $precision = 1)                                                               Ceil the current instance minute with given precision.\n * @method        CarbonImmutable     roundSecond(float $precision = 1, string $function = \"round\")                                   Round the current instance second with given precision using the given function.\n * @method        CarbonImmutable     roundSeconds(float $precision = 1, string $function = \"round\")                                  Round the current instance second with given precision using the given function.\n * @method        CarbonImmutable     floorSecond(float $precision = 1)                                                               Truncate the current instance second with given precision.\n * @method        CarbonImmutable     floorSeconds(float $precision = 1)                                                              Truncate the current instance second with given precision.\n * @method        CarbonImmutable     ceilSecond(float $precision = 1)                                                                Ceil the current instance second with given precision.\n * @method        CarbonImmutable     ceilSeconds(float $precision = 1)                                                               Ceil the current instance second with given precision.\n * @method        CarbonImmutable     roundMillennium(float $precision = 1, string $function = \"round\")                               Round the current instance millennium with given precision using the given function.\n * @method        CarbonImmutable     roundMillennia(float $precision = 1, string $function = \"round\")                                Round the current instance millennium with given precision using the given function.\n * @method        CarbonImmutable     floorMillennium(float $precision = 1)                                                           Truncate the current instance millennium with given precision.\n * @method        CarbonImmutable     floorMillennia(float $precision = 1)                                                            Truncate the current instance millennium with given precision.\n * @method        CarbonImmutable     ceilMillennium(float $precision = 1)                                                            Ceil the current instance millennium with given precision.\n * @method        CarbonImmutable     ceilMillennia(float $precision = 1)                                                             Ceil the current instance millennium with given precision.\n * @method        CarbonImmutable     roundCentury(float $precision = 1, string $function = \"round\")                                  Round the current instance century with given precision using the given function.\n * @method        CarbonImmutable     roundCenturies(float $precision = 1, string $function = \"round\")                                Round the current instance century with given precision using the given function.\n * @method        CarbonImmutable     floorCentury(float $precision = 1)                                                              Truncate the current instance century with given precision.\n * @method        CarbonImmutable     floorCenturies(float $precision = 1)                                                            Truncate the current instance century with given precision.\n * @method        CarbonImmutable     ceilCentury(float $precision = 1)                                                               Ceil the current instance century with given precision.\n * @method        CarbonImmutable     ceilCenturies(float $precision = 1)                                                             Ceil the current instance century with given precision.\n * @method        CarbonImmutable     roundDecade(float $precision = 1, string $function = \"round\")                                   Round the current instance decade with given precision using the given function.\n * @method        CarbonImmutable     roundDecades(float $precision = 1, string $function = \"round\")                                  Round the current instance decade with given precision using the given function.\n * @method        CarbonImmutable     floorDecade(float $precision = 1)                                                               Truncate the current instance decade with given precision.\n * @method        CarbonImmutable     floorDecades(float $precision = 1)                                                              Truncate the current instance decade with given precision.\n * @method        CarbonImmutable     ceilDecade(float $precision = 1)                                                                Ceil the current instance decade with given precision.\n * @method        CarbonImmutable     ceilDecades(float $precision = 1)                                                               Ceil the current instance decade with given precision.\n * @method        CarbonImmutable     roundQuarter(float $precision = 1, string $function = \"round\")                                  Round the current instance quarter with given precision using the given function.\n * @method        CarbonImmutable     roundQuarters(float $precision = 1, string $function = \"round\")                                 Round the current instance quarter with given precision using the given function.\n * @method        CarbonImmutable     floorQuarter(float $precision = 1)                                                              Truncate the current instance quarter with given precision.\n * @method        CarbonImmutable     floorQuarters(float $precision = 1)                                                             Truncate the current instance quarter with given precision.\n * @method        CarbonImmutable     ceilQuarter(float $precision = 1)                                                               Ceil the current instance quarter with given precision.\n * @method        CarbonImmutable     ceilQuarters(float $precision = 1)                                                              Ceil the current instance quarter with given precision.\n * @method        CarbonImmutable     roundMillisecond(float $precision = 1, string $function = \"round\")                              Round the current instance millisecond with given precision using the given function.\n * @method        CarbonImmutable     roundMilliseconds(float $precision = 1, string $function = \"round\")                             Round the current instance millisecond with given precision using the given function.\n * @method        CarbonImmutable     floorMillisecond(float $precision = 1)                                                          Truncate the current instance millisecond with given precision.\n * @method        CarbonImmutable     floorMilliseconds(float $precision = 1)                                                         Truncate the current instance millisecond with given precision.\n * @method        CarbonImmutable     ceilMillisecond(float $precision = 1)                                                           Ceil the current instance millisecond with given precision.\n * @method        CarbonImmutable     ceilMilliseconds(float $precision = 1)                                                          Ceil the current instance millisecond with given precision.\n * @method        CarbonImmutable     roundMicrosecond(float $precision = 1, string $function = \"round\")                              Round the current instance microsecond with given precision using the given function.\n * @method        CarbonImmutable     roundMicroseconds(float $precision = 1, string $function = \"round\")                             Round the current instance microsecond with given precision using the given function.\n * @method        CarbonImmutable     floorMicrosecond(float $precision = 1)                                                          Truncate the current instance microsecond with given precision.\n * @method        CarbonImmutable     floorMicroseconds(float $precision = 1)                                                         Truncate the current instance microsecond with given precision.\n * @method        CarbonImmutable     ceilMicrosecond(float $precision = 1)                                                           Ceil the current instance microsecond with given precision.\n * @method        CarbonImmutable     ceilMicroseconds(float $precision = 1)                                                          Ceil the current instance microsecond with given precision.\n * @method        string              shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                     Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                      Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                     Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                      Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)                 Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1)              Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string              longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1)               Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        static static|false createFromFormat(string $format, string $time, DateTimeZone|string|false|null $timezone = null) Parse a string into a new CarbonImmutable object according to the specified format.\n * @method        static static       __set_state(array $array)                                                                       https://php.net/manual/en/datetime.set-state.php\n *\n * </autodoc>\n */\nclass CarbonImmutable extends DateTimeImmutable implements CarbonInterface\n{\n    use Date {\n        __clone as dateTraitClone;\n    }\n\n    public function __clone()\n    {\n        $this->dateTraitClone();\n        $this->endOfTime = false;\n        $this->startOfTime = false;\n    }\n\n    /**\n     * Create a very old date representing start of time.\n     *\n     * @return static\n     */\n    public static function startOfTime(): self\n    {\n        $date = static::parse('0001-01-01')->years(self::getStartOfTimeYear());\n        $date->startOfTime = true;\n\n        return $date;\n    }\n\n    /**\n     * Create a very far date representing end of time.\n     *\n     * @return static\n     */\n    public static function endOfTime(): self\n    {\n        $date = static::parse('9999-12-31 23:59:59.999999')->years(self::getEndOfTimeYear());\n        $date->endOfTime = true;\n\n        return $date;\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    private static function getEndOfTimeYear(): int\n    {\n        if (version_compare(PHP_VERSION, '7.3.0-dev', '<')) {\n            return 145261681241552;\n        }\n\n        // Remove if https://bugs.php.net/bug.php?id=81107 is fixed\n        if (version_compare(PHP_VERSION, '8.1.0-dev', '>=')) {\n            return 1118290769066902787;\n        }\n\n        return PHP_INT_MAX;\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    private static function getStartOfTimeYear(): int\n    {\n        if (version_compare(PHP_VERSION, '7.3.0-dev', '<')) {\n            return -135908816449551;\n        }\n\n        // Remove if https://bugs.php.net/bug.php?id=81107 is fixed\n        if (version_compare(PHP_VERSION, '8.1.0-dev', '>=')) {\n            return -1118290769066898816;\n        }\n\n        return max(PHP_INT_MIN, -9223372036854773760);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse BadMethodCallException;\nuse Carbon\\Exceptions\\BadComparisonUnitException;\nuse Carbon\\Exceptions\\ImmutableException;\nuse Carbon\\Exceptions\\InvalidDateException;\nuse Carbon\\Exceptions\\InvalidFormatException;\nuse Carbon\\Exceptions\\UnknownGetterException;\nuse Carbon\\Exceptions\\UnknownMethodException;\nuse Carbon\\Exceptions\\UnknownSetterException;\nuse Closure;\nuse DateInterval;\nuse DateTime;\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse DateTimeZone;\nuse JsonSerializable;\nuse ReflectionException;\nuse ReturnTypeWillChange;\nuse Symfony\\Component\\Translation\\TranslatorInterface;\nuse Throwable;\n\n/**\n * Common interface for Carbon and CarbonImmutable.\n *\n * <autodoc generated by `composer phpdoc`>\n *\n * @property      int              $year\n * @property      int              $yearIso\n * @property      int              $month\n * @property      int              $day\n * @property      int              $hour\n * @property      int              $minute\n * @property      int              $second\n * @property      int              $micro\n * @property      int              $microsecond\n * @property      int|float|string $timestamp                                                                         seconds since the Unix Epoch\n * @property      string           $englishDayOfWeek                                                                  the day of week in English\n * @property      string           $shortEnglishDayOfWeek                                                             the abbreviated day of week in English\n * @property      string           $englishMonth                                                                      the month in English\n * @property      string           $shortEnglishMonth                                                                 the abbreviated month in English\n * @property      int              $milliseconds\n * @property      int              $millisecond\n * @property      int              $milli\n * @property      int              $week                                                                              1 through 53\n * @property      int              $isoWeek                                                                           1 through 53\n * @property      int              $weekYear                                                                          year according to week format\n * @property      int              $isoWeekYear                                                                       year according to ISO week format\n * @property      int              $dayOfYear                                                                         1 through 366\n * @property      int              $age                                                                               does a diffInYears() with default parameters\n * @property      int              $offset                                                                            the timezone offset in seconds from UTC\n * @property      int              $offsetMinutes                                                                     the timezone offset in minutes from UTC\n * @property      int              $offsetHours                                                                       the timezone offset in hours from UTC\n * @property      CarbonTimeZone   $timezone                                                                          the current timezone\n * @property      CarbonTimeZone   $tz                                                                                alias of $timezone\n * @property-read int              $dayOfWeek                                                                         0 (for Sunday) through 6 (for Saturday)\n * @property-read int              $dayOfWeekIso                                                                      1 (for Monday) through 7 (for Sunday)\n * @property-read int              $weekOfYear                                                                        ISO-8601 week number of year, weeks starting on Monday\n * @property-read int              $daysInMonth                                                                       number of days in the given month\n * @property-read string           $latinMeridiem                                                                     \"am\"/\"pm\" (Ante meridiem or Post meridiem latin lowercase mark)\n * @property-read string           $latinUpperMeridiem                                                                \"AM\"/\"PM\" (Ante meridiem or Post meridiem latin uppercase mark)\n * @property-read string           $timezoneAbbreviatedName                                                           the current timezone abbreviated name\n * @property-read string           $tzAbbrName                                                                        alias of $timezoneAbbreviatedName\n * @property-read string           $dayName                                                                           long name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $shortDayName                                                                      short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $minDayName                                                                        very short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $monthName                                                                         long name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $shortMonthName                                                                    short name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $meridiem                                                                          lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read string           $upperMeridiem                                                                     uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read int              $noZeroHour                                                                        current hour from 1 to 24\n * @property-read int              $weeksInYear                                                                       51 through 53\n * @property-read int              $isoWeeksInYear                                                                    51 through 53\n * @property-read int              $weekOfMonth                                                                       1 through 5\n * @property-read int              $weekNumberInMonth                                                                 1 through 5\n * @property-read int              $firstWeekDay                                                                      0 through 6\n * @property-read int              $lastWeekDay                                                                       0 through 6\n * @property-read int              $daysInYear                                                                        365 or 366\n * @property-read int              $quarter                                                                           the quarter of this instance, 1 - 4\n * @property-read int              $decade                                                                            the decade of this instance\n * @property-read int              $century                                                                           the century of this instance\n * @property-read int              $millennium                                                                        the millennium of this instance\n * @property-read bool             $dst                                                                               daylight savings time indicator, true if DST, false otherwise\n * @property-read bool             $local                                                                             checks if the timezone is local, true if local, false otherwise\n * @property-read bool             $utc                                                                               checks if the timezone is UTC, true if UTC, false otherwise\n * @property-read string           $timezoneName                                                                      the current timezone name\n * @property-read string           $tzName                                                                            alias of $timezoneName\n * @property-read string           $locale                                                                            locale of the current instance\n *\n * @method        bool             isUtc()                                                                            Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)\n * @method        bool             isLocal()                                                                          Check if the current instance has non-UTC timezone.\n * @method        bool             isValid()                                                                          Check if the current instance is a valid date.\n * @method        bool             isDST()                                                                            Check if the current instance is in a daylight saving time.\n * @method        bool             isSunday()                                                                         Checks if the instance day is sunday.\n * @method        bool             isMonday()                                                                         Checks if the instance day is monday.\n * @method        bool             isTuesday()                                                                        Checks if the instance day is tuesday.\n * @method        bool             isWednesday()                                                                      Checks if the instance day is wednesday.\n * @method        bool             isThursday()                                                                       Checks if the instance day is thursday.\n * @method        bool             isFriday()                                                                         Checks if the instance day is friday.\n * @method        bool             isSaturday()                                                                       Checks if the instance day is saturday.\n * @method        bool             isSameYear(Carbon|DateTimeInterface|string|null $date = null)                      Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentYear()                                                                    Checks if the instance is in the same year as the current moment.\n * @method        bool             isNextYear()                                                                       Checks if the instance is in the same year as the current moment next year.\n * @method        bool             isLastYear()                                                                       Checks if the instance is in the same year as the current moment last year.\n * @method        bool             isSameWeek(Carbon|DateTimeInterface|string|null $date = null)                      Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentWeek()                                                                    Checks if the instance is in the same week as the current moment.\n * @method        bool             isNextWeek()                                                                       Checks if the instance is in the same week as the current moment next week.\n * @method        bool             isLastWeek()                                                                       Checks if the instance is in the same week as the current moment last week.\n * @method        bool             isSameDay(Carbon|DateTimeInterface|string|null $date = null)                       Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentDay()                                                                     Checks if the instance is in the same day as the current moment.\n * @method        bool             isNextDay()                                                                        Checks if the instance is in the same day as the current moment next day.\n * @method        bool             isLastDay()                                                                        Checks if the instance is in the same day as the current moment last day.\n * @method        bool             isSameHour(Carbon|DateTimeInterface|string|null $date = null)                      Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentHour()                                                                    Checks if the instance is in the same hour as the current moment.\n * @method        bool             isNextHour()                                                                       Checks if the instance is in the same hour as the current moment next hour.\n * @method        bool             isLastHour()                                                                       Checks if the instance is in the same hour as the current moment last hour.\n * @method        bool             isSameMinute(Carbon|DateTimeInterface|string|null $date = null)                    Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMinute()                                                                  Checks if the instance is in the same minute as the current moment.\n * @method        bool             isNextMinute()                                                                     Checks if the instance is in the same minute as the current moment next minute.\n * @method        bool             isLastMinute()                                                                     Checks if the instance is in the same minute as the current moment last minute.\n * @method        bool             isSameSecond(Carbon|DateTimeInterface|string|null $date = null)                    Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentSecond()                                                                  Checks if the instance is in the same second as the current moment.\n * @method        bool             isNextSecond()                                                                     Checks if the instance is in the same second as the current moment next second.\n * @method        bool             isLastSecond()                                                                     Checks if the instance is in the same second as the current moment last second.\n * @method        bool             isSameMicro(Carbon|DateTimeInterface|string|null $date = null)                     Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMicro()                                                                   Checks if the instance is in the same microsecond as the current moment.\n * @method        bool             isNextMicro()                                                                      Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool             isLastMicro()                                                                      Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool             isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null)               Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMicrosecond()                                                             Checks if the instance is in the same microsecond as the current moment.\n * @method        bool             isNextMicrosecond()                                                                Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool             isLastMicrosecond()                                                                Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool             isCurrentMonth()                                                                   Checks if the instance is in the same month as the current moment.\n * @method        bool             isNextMonth()                                                                      Checks if the instance is in the same month as the current moment next month.\n * @method        bool             isLastMonth()                                                                      Checks if the instance is in the same month as the current moment last month.\n * @method        bool             isCurrentQuarter()                                                                 Checks if the instance is in the same quarter as the current moment.\n * @method        bool             isNextQuarter()                                                                    Checks if the instance is in the same quarter as the current moment next quarter.\n * @method        bool             isLastQuarter()                                                                    Checks if the instance is in the same quarter as the current moment last quarter.\n * @method        bool             isSameDecade(Carbon|DateTimeInterface|string|null $date = null)                    Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentDecade()                                                                  Checks if the instance is in the same decade as the current moment.\n * @method        bool             isNextDecade()                                                                     Checks if the instance is in the same decade as the current moment next decade.\n * @method        bool             isLastDecade()                                                                     Checks if the instance is in the same decade as the current moment last decade.\n * @method        bool             isSameCentury(Carbon|DateTimeInterface|string|null $date = null)                   Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentCentury()                                                                 Checks if the instance is in the same century as the current moment.\n * @method        bool             isNextCentury()                                                                    Checks if the instance is in the same century as the current moment next century.\n * @method        bool             isLastCentury()                                                                    Checks if the instance is in the same century as the current moment last century.\n * @method        bool             isSameMillennium(Carbon|DateTimeInterface|string|null $date = null)                Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMillennium()                                                              Checks if the instance is in the same millennium as the current moment.\n * @method        bool             isNextMillennium()                                                                 Checks if the instance is in the same millennium as the current moment next millennium.\n * @method        bool             isLastMillennium()                                                                 Checks if the instance is in the same millennium as the current moment last millennium.\n * @method        CarbonInterface  years(int $value)                                                                  Set current instance year to the given value.\n * @method        CarbonInterface  year(int $value)                                                                   Set current instance year to the given value.\n * @method        CarbonInterface  setYears(int $value)                                                               Set current instance year to the given value.\n * @method        CarbonInterface  setYear(int $value)                                                                Set current instance year to the given value.\n * @method        CarbonInterface  months(int $value)                                                                 Set current instance month to the given value.\n * @method        CarbonInterface  month(int $value)                                                                  Set current instance month to the given value.\n * @method        CarbonInterface  setMonths(int $value)                                                              Set current instance month to the given value.\n * @method        CarbonInterface  setMonth(int $value)                                                               Set current instance month to the given value.\n * @method        CarbonInterface  days(int $value)                                                                   Set current instance day to the given value.\n * @method        CarbonInterface  day(int $value)                                                                    Set current instance day to the given value.\n * @method        CarbonInterface  setDays(int $value)                                                                Set current instance day to the given value.\n * @method        CarbonInterface  setDay(int $value)                                                                 Set current instance day to the given value.\n * @method        CarbonInterface  hours(int $value)                                                                  Set current instance hour to the given value.\n * @method        CarbonInterface  hour(int $value)                                                                   Set current instance hour to the given value.\n * @method        CarbonInterface  setHours(int $value)                                                               Set current instance hour to the given value.\n * @method        CarbonInterface  setHour(int $value)                                                                Set current instance hour to the given value.\n * @method        CarbonInterface  minutes(int $value)                                                                Set current instance minute to the given value.\n * @method        CarbonInterface  minute(int $value)                                                                 Set current instance minute to the given value.\n * @method        CarbonInterface  setMinutes(int $value)                                                             Set current instance minute to the given value.\n * @method        CarbonInterface  setMinute(int $value)                                                              Set current instance minute to the given value.\n * @method        CarbonInterface  seconds(int $value)                                                                Set current instance second to the given value.\n * @method        CarbonInterface  second(int $value)                                                                 Set current instance second to the given value.\n * @method        CarbonInterface  setSeconds(int $value)                                                             Set current instance second to the given value.\n * @method        CarbonInterface  setSecond(int $value)                                                              Set current instance second to the given value.\n * @method        CarbonInterface  millis(int $value)                                                                 Set current instance millisecond to the given value.\n * @method        CarbonInterface  milli(int $value)                                                                  Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMillis(int $value)                                                              Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMilli(int $value)                                                               Set current instance millisecond to the given value.\n * @method        CarbonInterface  milliseconds(int $value)                                                           Set current instance millisecond to the given value.\n * @method        CarbonInterface  millisecond(int $value)                                                            Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMilliseconds(int $value)                                                        Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMillisecond(int $value)                                                         Set current instance millisecond to the given value.\n * @method        CarbonInterface  micros(int $value)                                                                 Set current instance microsecond to the given value.\n * @method        CarbonInterface  micro(int $value)                                                                  Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicros(int $value)                                                              Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicro(int $value)                                                               Set current instance microsecond to the given value.\n * @method        CarbonInterface  microseconds(int $value)                                                           Set current instance microsecond to the given value.\n * @method        CarbonInterface  microsecond(int $value)                                                            Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicroseconds(int $value)                                                        Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicrosecond(int $value)                                                         Set current instance microsecond to the given value.\n * @method        CarbonInterface  addYears(int $value = 1)                                                           Add years (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addYear()                                                                          Add one year to the instance (using date interval).\n * @method        CarbonInterface  subYears(int $value = 1)                                                           Sub years (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subYear()                                                                          Sub one year to the instance (using date interval).\n * @method        CarbonInterface  addYearsWithOverflow(int $value = 1)                                               Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addYearWithOverflow()                                                              Add one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subYearsWithOverflow(int $value = 1)                                               Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subYearWithOverflow()                                                              Sub one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addYearsWithoutOverflow(int $value = 1)                                            Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearWithoutOverflow()                                                           Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearsWithoutOverflow(int $value = 1)                                            Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearWithoutOverflow()                                                           Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearsWithNoOverflow(int $value = 1)                                             Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearWithNoOverflow()                                                            Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearsWithNoOverflow(int $value = 1)                                             Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearWithNoOverflow()                                                            Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearsNoOverflow(int $value = 1)                                                 Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearNoOverflow()                                                                Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearsNoOverflow(int $value = 1)                                                 Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearNoOverflow()                                                                Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonths(int $value = 1)                                                          Add months (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMonth()                                                                         Add one month to the instance (using date interval).\n * @method        CarbonInterface  subMonths(int $value = 1)                                                          Sub months (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMonth()                                                                         Sub one month to the instance (using date interval).\n * @method        CarbonInterface  addMonthsWithOverflow(int $value = 1)                                              Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMonthWithOverflow()                                                             Add one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMonthsWithOverflow(int $value = 1)                                              Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMonthWithOverflow()                                                             Sub one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMonthsWithoutOverflow(int $value = 1)                                           Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthWithoutOverflow()                                                          Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthsWithoutOverflow(int $value = 1)                                           Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthWithoutOverflow()                                                          Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthsWithNoOverflow(int $value = 1)                                            Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthWithNoOverflow()                                                           Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthsWithNoOverflow(int $value = 1)                                            Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthWithNoOverflow()                                                           Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthsNoOverflow(int $value = 1)                                                Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthNoOverflow()                                                               Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthsNoOverflow(int $value = 1)                                                Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthNoOverflow()                                                               Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDays(int $value = 1)                                                            Add days (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addDay()                                                                           Add one day to the instance (using date interval).\n * @method        CarbonInterface  subDays(int $value = 1)                                                            Sub days (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subDay()                                                                           Sub one day to the instance (using date interval).\n * @method        CarbonInterface  addHours(int $value = 1)                                                           Add hours (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addHour()                                                                          Add one hour to the instance (using date interval).\n * @method        CarbonInterface  subHours(int $value = 1)                                                           Sub hours (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subHour()                                                                          Sub one hour to the instance (using date interval).\n * @method        CarbonInterface  addMinutes(int $value = 1)                                                         Add minutes (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMinute()                                                                        Add one minute to the instance (using date interval).\n * @method        CarbonInterface  subMinutes(int $value = 1)                                                         Sub minutes (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMinute()                                                                        Sub one minute to the instance (using date interval).\n * @method        CarbonInterface  addSeconds(int $value = 1)                                                         Add seconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addSecond()                                                                        Add one second to the instance (using date interval).\n * @method        CarbonInterface  subSeconds(int $value = 1)                                                         Sub seconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subSecond()                                                                        Sub one second to the instance (using date interval).\n * @method        CarbonInterface  addMillis(int $value = 1)                                                          Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMilli()                                                                         Add one millisecond to the instance (using date interval).\n * @method        CarbonInterface  subMillis(int $value = 1)                                                          Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMilli()                                                                         Sub one millisecond to the instance (using date interval).\n * @method        CarbonInterface  addMilliseconds(int $value = 1)                                                    Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMillisecond()                                                                   Add one millisecond to the instance (using date interval).\n * @method        CarbonInterface  subMilliseconds(int $value = 1)                                                    Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMillisecond()                                                                   Sub one millisecond to the instance (using date interval).\n * @method        CarbonInterface  addMicros(int $value = 1)                                                          Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMicro()                                                                         Add one microsecond to the instance (using date interval).\n * @method        CarbonInterface  subMicros(int $value = 1)                                                          Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMicro()                                                                         Sub one microsecond to the instance (using date interval).\n * @method        CarbonInterface  addMicroseconds(int $value = 1)                                                    Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMicrosecond()                                                                   Add one microsecond to the instance (using date interval).\n * @method        CarbonInterface  subMicroseconds(int $value = 1)                                                    Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMicrosecond()                                                                   Sub one microsecond to the instance (using date interval).\n * @method        CarbonInterface  addMillennia(int $value = 1)                                                       Add millennia (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMillennium()                                                                    Add one millennium to the instance (using date interval).\n * @method        CarbonInterface  subMillennia(int $value = 1)                                                       Sub millennia (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMillennium()                                                                    Sub one millennium to the instance (using date interval).\n * @method        CarbonInterface  addMillenniaWithOverflow(int $value = 1)                                           Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMillenniumWithOverflow()                                                        Add one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMillenniaWithOverflow(int $value = 1)                                           Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMillenniumWithOverflow()                                                        Sub one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMillenniaWithoutOverflow(int $value = 1)                                        Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniumWithoutOverflow()                                                     Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniaWithoutOverflow(int $value = 1)                                        Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniumWithoutOverflow()                                                     Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniaWithNoOverflow(int $value = 1)                                         Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniumWithNoOverflow()                                                      Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniaWithNoOverflow(int $value = 1)                                         Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniumWithNoOverflow()                                                      Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniaNoOverflow(int $value = 1)                                             Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniumNoOverflow()                                                          Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniaNoOverflow(int $value = 1)                                             Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniumNoOverflow()                                                          Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturies(int $value = 1)                                                       Add centuries (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addCentury()                                                                       Add one century to the instance (using date interval).\n * @method        CarbonInterface  subCenturies(int $value = 1)                                                       Sub centuries (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subCentury()                                                                       Sub one century to the instance (using date interval).\n * @method        CarbonInterface  addCenturiesWithOverflow(int $value = 1)                                           Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addCenturyWithOverflow()                                                           Add one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subCenturiesWithOverflow(int $value = 1)                                           Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subCenturyWithOverflow()                                                           Sub one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addCenturiesWithoutOverflow(int $value = 1)                                        Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturyWithoutOverflow()                                                        Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturiesWithoutOverflow(int $value = 1)                                        Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturyWithoutOverflow()                                                        Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturiesWithNoOverflow(int $value = 1)                                         Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturyWithNoOverflow()                                                         Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturiesWithNoOverflow(int $value = 1)                                         Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturyWithNoOverflow()                                                         Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturiesNoOverflow(int $value = 1)                                             Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturyNoOverflow()                                                             Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturiesNoOverflow(int $value = 1)                                             Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturyNoOverflow()                                                             Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecades(int $value = 1)                                                         Add decades (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addDecade()                                                                        Add one decade to the instance (using date interval).\n * @method        CarbonInterface  subDecades(int $value = 1)                                                         Sub decades (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subDecade()                                                                        Sub one decade to the instance (using date interval).\n * @method        CarbonInterface  addDecadesWithOverflow(int $value = 1)                                             Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addDecadeWithOverflow()                                                            Add one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subDecadesWithOverflow(int $value = 1)                                             Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subDecadeWithOverflow()                                                            Sub one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addDecadesWithoutOverflow(int $value = 1)                                          Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadeWithoutOverflow()                                                         Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadesWithoutOverflow(int $value = 1)                                          Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadeWithoutOverflow()                                                         Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadesWithNoOverflow(int $value = 1)                                           Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadeWithNoOverflow()                                                          Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadesWithNoOverflow(int $value = 1)                                           Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadeWithNoOverflow()                                                          Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadesNoOverflow(int $value = 1)                                               Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadeNoOverflow()                                                              Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadesNoOverflow(int $value = 1)                                               Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadeNoOverflow()                                                              Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarters(int $value = 1)                                                        Add quarters (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addQuarter()                                                                       Add one quarter to the instance (using date interval).\n * @method        CarbonInterface  subQuarters(int $value = 1)                                                        Sub quarters (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subQuarter()                                                                       Sub one quarter to the instance (using date interval).\n * @method        CarbonInterface  addQuartersWithOverflow(int $value = 1)                                            Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addQuarterWithOverflow()                                                           Add one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subQuartersWithOverflow(int $value = 1)                                            Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subQuarterWithOverflow()                                                           Sub one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addQuartersWithoutOverflow(int $value = 1)                                         Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarterWithoutOverflow()                                                        Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuartersWithoutOverflow(int $value = 1)                                         Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuarterWithoutOverflow()                                                        Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuartersWithNoOverflow(int $value = 1)                                          Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarterWithNoOverflow()                                                         Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuartersWithNoOverflow(int $value = 1)                                          Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuarterWithNoOverflow()                                                         Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuartersNoOverflow(int $value = 1)                                              Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarterNoOverflow()                                                             Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuartersNoOverflow(int $value = 1)                                              Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuarterNoOverflow()                                                             Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addWeeks(int $value = 1)                                                           Add weeks (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addWeek()                                                                          Add one week to the instance (using date interval).\n * @method        CarbonInterface  subWeeks(int $value = 1)                                                           Sub weeks (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subWeek()                                                                          Sub one week to the instance (using date interval).\n * @method        CarbonInterface  addWeekdays(int $value = 1)                                                        Add weekdays (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addWeekday()                                                                       Add one weekday to the instance (using date interval).\n * @method        CarbonInterface  subWeekdays(int $value = 1)                                                        Sub weekdays (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subWeekday()                                                                       Sub one weekday to the instance (using date interval).\n * @method        CarbonInterface  addRealMicros(int $value = 1)                                                      Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMicro()                                                                     Add one microsecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicros(int $value = 1)                                                      Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicro()                                                                     Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod     microsUntil($endDate = null, int $factor = 1)                                      Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        CarbonInterface  addRealMicroseconds(int $value = 1)                                                Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMicrosecond()                                                               Add one microsecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicroseconds(int $value = 1)                                                Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicrosecond()                                                               Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod     microsecondsUntil($endDate = null, int $factor = 1)                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        CarbonInterface  addRealMillis(int $value = 1)                                                      Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMilli()                                                                     Add one millisecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillis(int $value = 1)                                                      Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMilli()                                                                     Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod     millisUntil($endDate = null, int $factor = 1)                                      Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        CarbonInterface  addRealMilliseconds(int $value = 1)                                                Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMillisecond()                                                               Add one millisecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMilliseconds(int $value = 1)                                                Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillisecond()                                                               Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod     millisecondsUntil($endDate = null, int $factor = 1)                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        CarbonInterface  addRealSeconds(int $value = 1)                                                     Add seconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealSecond()                                                                    Add one second to the instance (using timestamp).\n * @method        CarbonInterface  subRealSeconds(int $value = 1)                                                     Sub seconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealSecond()                                                                    Sub one second to the instance (using timestamp).\n * @method        CarbonPeriod     secondsUntil($endDate = null, int $factor = 1)                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given.\n * @method        CarbonInterface  addRealMinutes(int $value = 1)                                                     Add minutes (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMinute()                                                                    Add one minute to the instance (using timestamp).\n * @method        CarbonInterface  subRealMinutes(int $value = 1)                                                     Sub minutes (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMinute()                                                                    Sub one minute to the instance (using timestamp).\n * @method        CarbonPeriod     minutesUntil($endDate = null, int $factor = 1)                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given.\n * @method        CarbonInterface  addRealHours(int $value = 1)                                                       Add hours (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealHour()                                                                      Add one hour to the instance (using timestamp).\n * @method        CarbonInterface  subRealHours(int $value = 1)                                                       Sub hours (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealHour()                                                                      Sub one hour to the instance (using timestamp).\n * @method        CarbonPeriod     hoursUntil($endDate = null, int $factor = 1)                                       Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given.\n * @method        CarbonInterface  addRealDays(int $value = 1)                                                        Add days (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealDay()                                                                       Add one day to the instance (using timestamp).\n * @method        CarbonInterface  subRealDays(int $value = 1)                                                        Sub days (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealDay()                                                                       Sub one day to the instance (using timestamp).\n * @method        CarbonPeriod     daysUntil($endDate = null, int $factor = 1)                                        Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given.\n * @method        CarbonInterface  addRealWeeks(int $value = 1)                                                       Add weeks (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealWeek()                                                                      Add one week to the instance (using timestamp).\n * @method        CarbonInterface  subRealWeeks(int $value = 1)                                                       Sub weeks (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealWeek()                                                                      Sub one week to the instance (using timestamp).\n * @method        CarbonPeriod     weeksUntil($endDate = null, int $factor = 1)                                       Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given.\n * @method        CarbonInterface  addRealMonths(int $value = 1)                                                      Add months (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMonth()                                                                     Add one month to the instance (using timestamp).\n * @method        CarbonInterface  subRealMonths(int $value = 1)                                                      Sub months (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMonth()                                                                     Sub one month to the instance (using timestamp).\n * @method        CarbonPeriod     monthsUntil($endDate = null, int $factor = 1)                                      Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given.\n * @method        CarbonInterface  addRealQuarters(int $value = 1)                                                    Add quarters (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealQuarter()                                                                   Add one quarter to the instance (using timestamp).\n * @method        CarbonInterface  subRealQuarters(int $value = 1)                                                    Sub quarters (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealQuarter()                                                                   Sub one quarter to the instance (using timestamp).\n * @method        CarbonPeriod     quartersUntil($endDate = null, int $factor = 1)                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given.\n * @method        CarbonInterface  addRealYears(int $value = 1)                                                       Add years (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealYear()                                                                      Add one year to the instance (using timestamp).\n * @method        CarbonInterface  subRealYears(int $value = 1)                                                       Sub years (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealYear()                                                                      Sub one year to the instance (using timestamp).\n * @method        CarbonPeriod     yearsUntil($endDate = null, int $factor = 1)                                       Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given.\n * @method        CarbonInterface  addRealDecades(int $value = 1)                                                     Add decades (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealDecade()                                                                    Add one decade to the instance (using timestamp).\n * @method        CarbonInterface  subRealDecades(int $value = 1)                                                     Sub decades (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealDecade()                                                                    Sub one decade to the instance (using timestamp).\n * @method        CarbonPeriod     decadesUntil($endDate = null, int $factor = 1)                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given.\n * @method        CarbonInterface  addRealCenturies(int $value = 1)                                                   Add centuries (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealCentury()                                                                   Add one century to the instance (using timestamp).\n * @method        CarbonInterface  subRealCenturies(int $value = 1)                                                   Sub centuries (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealCentury()                                                                   Sub one century to the instance (using timestamp).\n * @method        CarbonPeriod     centuriesUntil($endDate = null, int $factor = 1)                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given.\n * @method        CarbonInterface  addRealMillennia(int $value = 1)                                                   Add millennia (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMillennium()                                                                Add one millennium to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillennia(int $value = 1)                                                   Sub millennia (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillennium()                                                                Sub one millennium to the instance (using timestamp).\n * @method        CarbonPeriod     millenniaUntil($endDate = null, int $factor = 1)                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given.\n * @method        CarbonInterface  roundYear(float $precision = 1, string $function = \"round\")                        Round the current instance year with given precision using the given function.\n * @method        CarbonInterface  roundYears(float $precision = 1, string $function = \"round\")                       Round the current instance year with given precision using the given function.\n * @method        CarbonInterface  floorYear(float $precision = 1)                                                    Truncate the current instance year with given precision.\n * @method        CarbonInterface  floorYears(float $precision = 1)                                                   Truncate the current instance year with given precision.\n * @method        CarbonInterface  ceilYear(float $precision = 1)                                                     Ceil the current instance year with given precision.\n * @method        CarbonInterface  ceilYears(float $precision = 1)                                                    Ceil the current instance year with given precision.\n * @method        CarbonInterface  roundMonth(float $precision = 1, string $function = \"round\")                       Round the current instance month with given precision using the given function.\n * @method        CarbonInterface  roundMonths(float $precision = 1, string $function = \"round\")                      Round the current instance month with given precision using the given function.\n * @method        CarbonInterface  floorMonth(float $precision = 1)                                                   Truncate the current instance month with given precision.\n * @method        CarbonInterface  floorMonths(float $precision = 1)                                                  Truncate the current instance month with given precision.\n * @method        CarbonInterface  ceilMonth(float $precision = 1)                                                    Ceil the current instance month with given precision.\n * @method        CarbonInterface  ceilMonths(float $precision = 1)                                                   Ceil the current instance month with given precision.\n * @method        CarbonInterface  roundDay(float $precision = 1, string $function = \"round\")                         Round the current instance day with given precision using the given function.\n * @method        CarbonInterface  roundDays(float $precision = 1, string $function = \"round\")                        Round the current instance day with given precision using the given function.\n * @method        CarbonInterface  floorDay(float $precision = 1)                                                     Truncate the current instance day with given precision.\n * @method        CarbonInterface  floorDays(float $precision = 1)                                                    Truncate the current instance day with given precision.\n * @method        CarbonInterface  ceilDay(float $precision = 1)                                                      Ceil the current instance day with given precision.\n * @method        CarbonInterface  ceilDays(float $precision = 1)                                                     Ceil the current instance day with given precision.\n * @method        CarbonInterface  roundHour(float $precision = 1, string $function = \"round\")                        Round the current instance hour with given precision using the given function.\n * @method        CarbonInterface  roundHours(float $precision = 1, string $function = \"round\")                       Round the current instance hour with given precision using the given function.\n * @method        CarbonInterface  floorHour(float $precision = 1)                                                    Truncate the current instance hour with given precision.\n * @method        CarbonInterface  floorHours(float $precision = 1)                                                   Truncate the current instance hour with given precision.\n * @method        CarbonInterface  ceilHour(float $precision = 1)                                                     Ceil the current instance hour with given precision.\n * @method        CarbonInterface  ceilHours(float $precision = 1)                                                    Ceil the current instance hour with given precision.\n * @method        CarbonInterface  roundMinute(float $precision = 1, string $function = \"round\")                      Round the current instance minute with given precision using the given function.\n * @method        CarbonInterface  roundMinutes(float $precision = 1, string $function = \"round\")                     Round the current instance minute with given precision using the given function.\n * @method        CarbonInterface  floorMinute(float $precision = 1)                                                  Truncate the current instance minute with given precision.\n * @method        CarbonInterface  floorMinutes(float $precision = 1)                                                 Truncate the current instance minute with given precision.\n * @method        CarbonInterface  ceilMinute(float $precision = 1)                                                   Ceil the current instance minute with given precision.\n * @method        CarbonInterface  ceilMinutes(float $precision = 1)                                                  Ceil the current instance minute with given precision.\n * @method        CarbonInterface  roundSecond(float $precision = 1, string $function = \"round\")                      Round the current instance second with given precision using the given function.\n * @method        CarbonInterface  roundSeconds(float $precision = 1, string $function = \"round\")                     Round the current instance second with given precision using the given function.\n * @method        CarbonInterface  floorSecond(float $precision = 1)                                                  Truncate the current instance second with given precision.\n * @method        CarbonInterface  floorSeconds(float $precision = 1)                                                 Truncate the current instance second with given precision.\n * @method        CarbonInterface  ceilSecond(float $precision = 1)                                                   Ceil the current instance second with given precision.\n * @method        CarbonInterface  ceilSeconds(float $precision = 1)                                                  Ceil the current instance second with given precision.\n * @method        CarbonInterface  roundMillennium(float $precision = 1, string $function = \"round\")                  Round the current instance millennium with given precision using the given function.\n * @method        CarbonInterface  roundMillennia(float $precision = 1, string $function = \"round\")                   Round the current instance millennium with given precision using the given function.\n * @method        CarbonInterface  floorMillennium(float $precision = 1)                                              Truncate the current instance millennium with given precision.\n * @method        CarbonInterface  floorMillennia(float $precision = 1)                                               Truncate the current instance millennium with given precision.\n * @method        CarbonInterface  ceilMillennium(float $precision = 1)                                               Ceil the current instance millennium with given precision.\n * @method        CarbonInterface  ceilMillennia(float $precision = 1)                                                Ceil the current instance millennium with given precision.\n * @method        CarbonInterface  roundCentury(float $precision = 1, string $function = \"round\")                     Round the current instance century with given precision using the given function.\n * @method        CarbonInterface  roundCenturies(float $precision = 1, string $function = \"round\")                   Round the current instance century with given precision using the given function.\n * @method        CarbonInterface  floorCentury(float $precision = 1)                                                 Truncate the current instance century with given precision.\n * @method        CarbonInterface  floorCenturies(float $precision = 1)                                               Truncate the current instance century with given precision.\n * @method        CarbonInterface  ceilCentury(float $precision = 1)                                                  Ceil the current instance century with given precision.\n * @method        CarbonInterface  ceilCenturies(float $precision = 1)                                                Ceil the current instance century with given precision.\n * @method        CarbonInterface  roundDecade(float $precision = 1, string $function = \"round\")                      Round the current instance decade with given precision using the given function.\n * @method        CarbonInterface  roundDecades(float $precision = 1, string $function = \"round\")                     Round the current instance decade with given precision using the given function.\n * @method        CarbonInterface  floorDecade(float $precision = 1)                                                  Truncate the current instance decade with given precision.\n * @method        CarbonInterface  floorDecades(float $precision = 1)                                                 Truncate the current instance decade with given precision.\n * @method        CarbonInterface  ceilDecade(float $precision = 1)                                                   Ceil the current instance decade with given precision.\n * @method        CarbonInterface  ceilDecades(float $precision = 1)                                                  Ceil the current instance decade with given precision.\n * @method        CarbonInterface  roundQuarter(float $precision = 1, string $function = \"round\")                     Round the current instance quarter with given precision using the given function.\n * @method        CarbonInterface  roundQuarters(float $precision = 1, string $function = \"round\")                    Round the current instance quarter with given precision using the given function.\n * @method        CarbonInterface  floorQuarter(float $precision = 1)                                                 Truncate the current instance quarter with given precision.\n * @method        CarbonInterface  floorQuarters(float $precision = 1)                                                Truncate the current instance quarter with given precision.\n * @method        CarbonInterface  ceilQuarter(float $precision = 1)                                                  Ceil the current instance quarter with given precision.\n * @method        CarbonInterface  ceilQuarters(float $precision = 1)                                                 Ceil the current instance quarter with given precision.\n * @method        CarbonInterface  roundMillisecond(float $precision = 1, string $function = \"round\")                 Round the current instance millisecond with given precision using the given function.\n * @method        CarbonInterface  roundMilliseconds(float $precision = 1, string $function = \"round\")                Round the current instance millisecond with given precision using the given function.\n * @method        CarbonInterface  floorMillisecond(float $precision = 1)                                             Truncate the current instance millisecond with given precision.\n * @method        CarbonInterface  floorMilliseconds(float $precision = 1)                                            Truncate the current instance millisecond with given precision.\n * @method        CarbonInterface  ceilMillisecond(float $precision = 1)                                              Ceil the current instance millisecond with given precision.\n * @method        CarbonInterface  ceilMilliseconds(float $precision = 1)                                             Ceil the current instance millisecond with given precision.\n * @method        CarbonInterface  roundMicrosecond(float $precision = 1, string $function = \"round\")                 Round the current instance microsecond with given precision using the given function.\n * @method        CarbonInterface  roundMicroseconds(float $precision = 1, string $function = \"round\")                Round the current instance microsecond with given precision using the given function.\n * @method        CarbonInterface  floorMicrosecond(float $precision = 1)                                             Truncate the current instance microsecond with given precision.\n * @method        CarbonInterface  floorMicroseconds(float $precision = 1)                                            Truncate the current instance microsecond with given precision.\n * @method        CarbonInterface  ceilMicrosecond(float $precision = 1)                                              Ceil the current instance microsecond with given precision.\n * @method        CarbonInterface  ceilMicroseconds(float $precision = 1)                                             Ceil the current instance microsecond with given precision.\n * @method        string           shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)        Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)         Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)        Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)         Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)   Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)    Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1)  Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n *\n * </autodoc>\n */\ninterface CarbonInterface extends DateTimeInterface, JsonSerializable\n{\n    /**\n     * Diff wording options(expressed in octal).\n     */\n    public const NO_ZERO_DIFF = 01;\n    public const JUST_NOW = 02;\n    public const ONE_DAY_WORDS = 04;\n    public const TWO_DAY_WORDS = 010;\n    public const SEQUENTIAL_PARTS_ONLY = 020;\n    public const ROUND = 040;\n    public const FLOOR = 0100;\n    public const CEIL = 0200;\n\n    /**\n     * Diff syntax options.\n     */\n    public const DIFF_ABSOLUTE = 1; // backward compatibility with true\n    public const DIFF_RELATIVE_AUTO = 0; // backward compatibility with false\n    public const DIFF_RELATIVE_TO_NOW = 2;\n    public const DIFF_RELATIVE_TO_OTHER = 3;\n\n    /**\n     * Translate string options.\n     */\n    public const TRANSLATE_MONTHS = 1;\n    public const TRANSLATE_DAYS = 2;\n    public const TRANSLATE_UNITS = 4;\n    public const TRANSLATE_MERIDIEM = 8;\n    public const TRANSLATE_DIFF = 0x10;\n    public const TRANSLATE_ALL = self::TRANSLATE_MONTHS | self::TRANSLATE_DAYS | self::TRANSLATE_UNITS | self::TRANSLATE_MERIDIEM | self::TRANSLATE_DIFF;\n\n    /**\n     * The day constants.\n     */\n    public const SUNDAY = 0;\n    public const MONDAY = 1;\n    public const TUESDAY = 2;\n    public const WEDNESDAY = 3;\n    public const THURSDAY = 4;\n    public const FRIDAY = 5;\n    public const SATURDAY = 6;\n\n    /**\n     * The month constants.\n     * These aren't used by Carbon itself but exist for\n     * convenience sake alone.\n     */\n    public const JANUARY = 1;\n    public const FEBRUARY = 2;\n    public const MARCH = 3;\n    public const APRIL = 4;\n    public const MAY = 5;\n    public const JUNE = 6;\n    public const JULY = 7;\n    public const AUGUST = 8;\n    public const SEPTEMBER = 9;\n    public const OCTOBER = 10;\n    public const NOVEMBER = 11;\n    public const DECEMBER = 12;\n\n    /**\n     * Number of X in Y.\n     */\n    public const YEARS_PER_MILLENNIUM = 1000;\n    public const YEARS_PER_CENTURY = 100;\n    public const YEARS_PER_DECADE = 10;\n    public const MONTHS_PER_YEAR = 12;\n    public const MONTHS_PER_QUARTER = 3;\n    public const QUARTERS_PER_YEAR = 4;\n    public const WEEKS_PER_YEAR = 52;\n    public const WEEKS_PER_MONTH = 4;\n    public const DAYS_PER_YEAR = 365;\n    public const DAYS_PER_WEEK = 7;\n    public const HOURS_PER_DAY = 24;\n    public const MINUTES_PER_HOUR = 60;\n    public const SECONDS_PER_MINUTE = 60;\n    public const MILLISECONDS_PER_SECOND = 1000;\n    public const MICROSECONDS_PER_MILLISECOND = 1000;\n    public const MICROSECONDS_PER_SECOND = 1000000;\n\n    /**\n     * Special settings to get the start of week from current locale culture.\n     */\n    public const WEEK_DAY_AUTO = 'auto';\n\n    /**\n     * RFC7231 DateTime format.\n     *\n     * @var string\n     */\n    public const RFC7231_FORMAT = 'D, d M Y H:i:s \\G\\M\\T';\n\n    /**\n     * Default format to use for __toString method when type juggling occurs.\n     *\n     * @var string\n     */\n    public const DEFAULT_TO_STRING_FORMAT = 'Y-m-d H:i:s';\n\n    /**\n     * Format for converting mocked time, includes microseconds.\n     *\n     * @var string\n     */\n    public const MOCK_DATETIME_FORMAT = 'Y-m-d H:i:s.u';\n\n    /**\n     * Pattern detection for ->isoFormat and ::createFromIsoFormat.\n     *\n     * @var string\n     */\n    public const ISO_FORMAT_REGEXP = '(O[YMDHhms]|[Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY?|g{1,5}|G{1,5}|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?)';\n\n    // <methods>\n\n    /**\n     * Dynamically handle calls to the class.\n     *\n     * @param string $method     magic method name called\n     * @param array  $parameters parameters list\n     *\n     * @throws UnknownMethodException|BadMethodCallException|ReflectionException|Throwable\n     *\n     * @return mixed\n     */\n    public function __call($method, $parameters);\n\n    /**\n     * Dynamically handle calls to the class.\n     *\n     * @param string $method     magic method name called\n     * @param array  $parameters parameters list\n     *\n     * @throws BadMethodCallException\n     *\n     * @return mixed\n     */\n    public static function __callStatic($method, $parameters);\n\n    /**\n     * Update constructedObjectId on cloned.\n     */\n    public function __clone();\n\n    /**\n     * Create a new Carbon instance.\n     *\n     * Please see the testing aids section (specifically static::setTestNow())\n     * for more on the possibility of this constructor returning a test instance.\n     *\n     * @param DateTimeInterface|string|null $time\n     * @param DateTimeZone|string|null      $tz\n     *\n     * @throws InvalidFormatException\n     */\n    public function __construct($time = null, $tz = null);\n\n    /**\n     * Show truthy properties on var_dump().\n     *\n     * @return array\n     */\n    public function __debugInfo();\n\n    /**\n     * Get a part of the Carbon object\n     *\n     * @param string $name\n     *\n     * @throws UnknownGetterException\n     *\n     * @return string|int|bool|DateTimeZone|null\n     */\n    public function __get($name);\n\n    /**\n     * Check if an attribute exists on the object\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public function __isset($name);\n\n    /**\n     * Set a part of the Carbon object\n     *\n     * @param string                  $name\n     * @param string|int|DateTimeZone $value\n     *\n     * @throws UnknownSetterException|ReflectionException\n     *\n     * @return void\n     */\n    public function __set($name, $value);\n\n    /**\n     * The __set_state handler.\n     *\n     * @param string|array $dump\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public static function __set_state($dump);\n\n    /**\n     * Returns the list of properties to dump on serialize() called on.\n     *\n     * Only used by PHP < 7.4.\n     *\n     * @return array\n     */\n    public function __sleep();\n\n    /**\n     * Format the instance as a string using the set format\n     *\n     * @example\n     * ```\n     * echo Carbon::now(); // Carbon instances can be cast to string\n     * ```\n     *\n     * @return string\n     */\n    public function __toString();\n\n    /**\n     * Add given units or interval to the current instance.\n     *\n     * @example $date->add('hour', 3)\n     * @example $date->add(15, 'days')\n     * @example $date->add(CarbonInterval::days(4))\n     *\n     * @param string|DateInterval|Closure|CarbonConverterInterface $unit\n     * @param int                                                  $value\n     * @param bool|null                                            $overflow\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function add($unit, $value = 1, $overflow = null);\n\n    /**\n     * Add seconds to the instance using timestamp. Positive $value travels\n     * forward while negative $value travels into the past.\n     *\n     * @param string $unit\n     * @param int    $value\n     *\n     * @return static\n     */\n    public function addRealUnit($unit, $value = 1);\n\n    /**\n     * Add given units to the current instance.\n     *\n     * @param string    $unit\n     * @param int       $value\n     * @param bool|null $overflow\n     *\n     * @return static\n     */\n    public function addUnit($unit, $value = 1, $overflow = null);\n\n    /**\n     * Add any unit to a new value without overflowing current other unit given.\n     *\n     * @param string $valueUnit    unit name to modify\n     * @param int    $value        amount to add to the input unit\n     * @param string $overflowUnit unit name to not overflow\n     *\n     * @return static\n     */\n    public function addUnitNoOverflow($valueUnit, $value, $overflowUnit);\n\n    /**\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given to now\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: 1: single part)\n     * @param int       $options human diff options\n     *\n     * @return string\n     */\n    public function ago($syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Modify the current instance to the average of a given instance (default now) and the current instance\n     * (second-precision).\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date\n     *\n     * @return static\n     */\n    public function average($date = null);\n\n    /**\n     * Clone the current instance if it's mutable.\n     *\n     * This method is convenient to ensure you don't mutate the initial object\n     * but avoid to make a useless copy of it if it's already immutable.\n     *\n     * @return static\n     */\n    public function avoidMutation();\n\n    /**\n     * Determines if the instance is between two others.\n     *\n     * The third argument allow you to specify if bounds are included or not (true by default)\n     * but for when you including/excluding bounds may produce different results in your application,\n     * we recommend to use the explicit methods ->betweenIncluded() or ->betweenExcluded() instead.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->between('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->between('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->between('2018-07-25', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->between('2018-07-25', '2018-08-01', false); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     * @param bool                                    $equal Indicates if an equal to comparison should be done\n     *\n     * @return bool\n     */\n    public function between($date1, $date2, $equal = true): bool;\n\n    /**\n     * Determines if the instance is between two others, bounds excluded.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->betweenExcluded('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->betweenExcluded('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->betweenExcluded('2018-07-25', '2018-08-01'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return bool\n     */\n    public function betweenExcluded($date1, $date2): bool;\n\n    /**\n     * Determines if the instance is between two others, bounds included.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->betweenIncluded('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->betweenIncluded('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->betweenIncluded('2018-07-25', '2018-08-01'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return bool\n     */\n    public function betweenIncluded($date1, $date2): bool;\n\n    /**\n     * Returns either day of week + time (e.g. \"Last Friday at 3:30 PM\") if reference time is within 7 days,\n     * or a calendar date (e.g. \"10/29/2017\") otherwise.\n     *\n     * Language, date and time formats will change according to the current locale.\n     *\n     * @param Carbon|\\DateTimeInterface|string|null $referenceTime\n     * @param array                                 $formats\n     *\n     * @return string\n     */\n    public function calendar($referenceTime = null, array $formats = []);\n\n    /**\n     * Checks if the (date)time string is in a given format and valid to create a\n     * new instance.\n     *\n     * @example\n     * ```\n     * Carbon::canBeCreatedFromFormat('11:12:45', 'h:i:s'); // true\n     * Carbon::canBeCreatedFromFormat('13:12:45', 'h:i:s'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     *\n     * @return bool\n     */\n    public static function canBeCreatedFromFormat($date, $format);\n\n    /**\n     * Return the Carbon instance passed through, a now instance in the same timezone\n     * if null given or parse the input if string given.\n     *\n     * @param Carbon|\\Carbon\\CarbonPeriod|\\Carbon\\CarbonInterval|\\DateInterval|\\DatePeriod|DateTimeInterface|string|null $date\n     *\n     * @return static\n     */\n    public function carbonize($date = null);\n\n    /**\n     * Cast the current instance into the given class.\n     *\n     * @param string $className The $className::instance() method will be called to cast the current object.\n     *\n     * @return DateTimeInterface\n     */\n    public function cast(string $className);\n\n    /**\n     * Ceil the current instance second with given precision if specified.\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return CarbonInterface\n     */\n    public function ceil($precision = 1);\n\n    /**\n     * Ceil the current instance at the given unit with given precision if specified.\n     *\n     * @param string    $unit\n     * @param float|int $precision\n     *\n     * @return CarbonInterface\n     */\n    public function ceilUnit($unit, $precision = 1);\n\n    /**\n     * Ceil the current instance week.\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return CarbonInterface\n     */\n    public function ceilWeek($weekStartsAt = null);\n\n    /**\n     * Similar to native modify() method of DateTime but can handle more grammars.\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->change('next 2pm');\n     * ```\n     *\n     * @link https://php.net/manual/en/datetime.modify.php\n     *\n     * @param string $modifier\n     *\n     * @return static|false\n     */\n    public function change($modifier);\n\n    /**\n     * Cleanup properties attached to the public scope of DateTime when a dump of the date is requested.\n     * foreach ($date as $_) {}\n     * serializer($date)\n     * var_export($date)\n     * get_object_vars($date)\n     */\n    public function cleanupDumpProperties();\n\n    /**\n     * @alias copy\n     *\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function clone();\n\n    /**\n     * Get the closest date from the instance (second-precision).\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return static\n     */\n    public function closest($date1, $date2);\n\n    /**\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function copy();\n\n    /**\n     * Create a new Carbon instance from a specific date and time.\n     *\n     * If any of $year, $month or $day are set to null their now() values will\n     * be used.\n     *\n     * If $hour is null it will be set to its now() value and the default\n     * values for $minute and $second will be their now() values.\n     *\n     * If $hour is not null then the default values for $minute and $second\n     * will be 0.\n     *\n     * @param DateTimeInterface|int|null $year\n     * @param int|null                   $month\n     * @param int|null                   $day\n     * @param int|null                   $hour\n     * @param int|null                   $minute\n     * @param int|null                   $second\n     * @param DateTimeZone|string|null   $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function create($year = 0, $month = 1, $day = 1, $hour = 0, $minute = 0, $second = 0, $tz = null);\n\n    /**\n     * Create a Carbon instance from just a date. The time portion is set to now.\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createFromDate($year = null, $month = null, $day = null, $tz = null);\n\n    /**\n     * Create a Carbon instance from a specific format.\n     *\n     * @param string                         $format Datetime format\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    #[ReturnTypeWillChange]\n    public static function createFromFormat($format, $time, $tz = null);\n\n    /**\n     * Create a Carbon instance from a specific ISO format (same replacements as ->isoFormat()).\n     *\n     * @param string                                             $format     Datetime format\n     * @param string                                             $time\n     * @param DateTimeZone|string|false|null                     $tz         optional timezone\n     * @param string|null                                        $locale     locale to be used for LTS, LT, LL, LLL, etc. macro-formats (en by fault, unneeded if no such macro-format in use)\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator optional custom translator to use for macro-formats\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function createFromIsoFormat($format, $time, $tz = null, $locale = 'en', $translator = null);\n\n    /**\n     * Create a Carbon instance from a specific format and a string in a given language.\n     *\n     * @param string                         $format Datetime format\n     * @param string                         $locale\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function createFromLocaleFormat($format, $locale, $time, $tz = null);\n\n    /**\n     * Create a Carbon instance from a specific ISO format and a string in a given language.\n     *\n     * @param string                         $format Datetime ISO format\n     * @param string                         $locale\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function createFromLocaleIsoFormat($format, $locale, $time, $tz = null);\n\n    /**\n     * Create a Carbon instance from just a time. The date portion is set to today.\n     *\n     * @param int|null                 $hour\n     * @param int|null                 $minute\n     * @param int|null                 $second\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createFromTime($hour = 0, $minute = 0, $second = 0, $tz = null);\n\n    /**\n     * Create a Carbon instance from a time string. The date portion is set to today.\n     *\n     * @param string                   $time\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createFromTimeString($time, $tz = null);\n\n    /**\n     * Create a Carbon instance from a timestamp and set the timezone (use default one if not specified).\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string          $timestamp\n     * @param \\DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function createFromTimestamp($timestamp, $tz = null);\n\n    /**\n     * Create a Carbon instance from a timestamp in milliseconds.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string          $timestamp\n     * @param \\DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function createFromTimestampMs($timestamp, $tz = null);\n\n    /**\n     * Create a Carbon instance from a timestamp in milliseconds.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $timestamp\n     *\n     * @return static\n     */\n    public static function createFromTimestampMsUTC($timestamp);\n\n    /**\n     * Create a Carbon instance from an timestamp keeping the timezone to UTC.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $timestamp\n     *\n     * @return static\n     */\n    public static function createFromTimestampUTC($timestamp);\n\n    /**\n     * Create a Carbon instance from just a date. The time portion is set to midnight.\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createMidnightDate($year = null, $month = null, $day = null, $tz = null);\n\n    /**\n     * Create a new safe Carbon instance from a specific date and time.\n     *\n     * If any of $year, $month or $day are set to null their now() values will\n     * be used.\n     *\n     * If $hour is null it will be set to its now() value and the default\n     * values for $minute and $second will be their now() values.\n     *\n     * If $hour is not null then the default values for $minute and $second\n     * will be 0.\n     *\n     * If one of the set values is not valid, an InvalidDateException\n     * will be thrown.\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param int|null                 $hour\n     * @param int|null                 $minute\n     * @param int|null                 $second\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidDateException\n     *\n     * @return static|false\n     */\n    public static function createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null);\n\n    /**\n     * Create a new Carbon instance from a specific date and time using strict validation.\n     *\n     * @see create()\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param int|null                 $hour\n     * @param int|null                 $minute\n     * @param int|null                 $second\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createStrict(?int $year = 0, ?int $month = 1, ?int $day = 1, ?int $hour = 0, ?int $minute = 0, ?int $second = 0, $tz = null);\n\n    /**\n     * Get/set the day of year.\n     *\n     * @param int|null $value new value for day of year if using as setter.\n     *\n     * @return static|int\n     */\n    public function dayOfYear($value = null);\n\n    /**\n     * Get the difference as a CarbonInterval instance.\n     * Return relative interval (negative if $absolute flag is not set to true and the given date is before\n     * current one).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return CarbonInterval\n     */\n    public function diffAsCarbonInterval($date = null, $absolute = true, array $skip = []);\n\n    /**\n     * Get the difference by the given interval using a filter closure.\n     *\n     * @param CarbonInterval                                         $ci       An interval to traverse by\n     * @param Closure                                                $callback\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffFiltered(CarbonInterval $ci, Closure $callback, $date = null, $absolute = true);\n\n    /**\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     *\n     * @example\n     * ```\n     * echo Carbon::tomorrow()->diffForHumans() . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(['parts' => 2]) . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(['parts' => 3, 'join' => true]) . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(Carbon::yesterday()) . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(Carbon::yesterday(), ['short' => true]) . \"\\n\";\n     * ```\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'skip' entry, list of units to skip (array of strings or a single string,\n     *                                                             ` it can be the unit name (singular or plural) or its shortcut\n     *                                                             ` (y, m, w, d, h, min, s, ms, µs).\n     *                                                             - 'aUnit' entry, prefer \"an hour\" over \"1 hour\" if true\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             - 'minimumUnit' entry determines the smallest unit of time to display can be long or\n     *                                                             `  short form of the units, e.g. 'hour' or 'h' (default value: s)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function diffForHumans($other = null, $syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Get the difference in days rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInDays($date = null, $absolute = true);\n\n    /**\n     * Get the difference in days using a filter closure rounded down.\n     *\n     * @param Closure                                                $callback\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInDaysFiltered(Closure $callback, $date = null, $absolute = true);\n\n    /**\n     * Get the difference in hours rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInHours($date = null, $absolute = true);\n\n    /**\n     * Get the difference in hours using a filter closure rounded down.\n     *\n     * @param Closure                                                $callback\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInHoursFiltered(Closure $callback, $date = null, $absolute = true);\n\n    /**\n     * Get the difference in microseconds.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMicroseconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in milliseconds rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMilliseconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in minutes rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMinutes($date = null, $absolute = true);\n\n    /**\n     * Get the difference in months rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMonths($date = null, $absolute = true);\n\n    /**\n     * Get the difference in quarters rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInQuarters($date = null, $absolute = true);\n\n    /**\n     * Get the difference in hours rounded down using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealHours($date = null, $absolute = true);\n\n    /**\n     * Get the difference in microseconds using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealMicroseconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in milliseconds rounded down using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealMilliseconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in minutes rounded down using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealMinutes($date = null, $absolute = true);\n\n    /**\n     * Get the difference in seconds using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealSeconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in seconds rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInSeconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in weekdays rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInWeekdays($date = null, $absolute = true);\n\n    /**\n     * Get the difference in weekend days using a filter rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInWeekendDays($date = null, $absolute = true);\n\n    /**\n     * Get the difference in weeks rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInWeeks($date = null, $absolute = true);\n\n    /**\n     * Get the difference in years\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInYears($date = null, $absolute = true);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * @param int $humanDiffOption\n     */\n    public static function disableHumanDiffOption($humanDiffOption);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * @param int $humanDiffOption\n     */\n    public static function enableHumanDiffOption($humanDiffOption);\n\n    /**\n     * Modify to end of current given unit.\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->startOf('month')\n     *   ->endOf('week', Carbon::FRIDAY);\n     * ```\n     *\n     * @param string            $unit\n     * @param array<int, mixed> $params\n     *\n     * @return static\n     */\n    public function endOf($unit, ...$params);\n\n    /**\n     * Resets the date to end of the century and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfCentury();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfCentury();\n\n    /**\n     * Resets the time to 23:59:59.999999 end of day\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfDay();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfDay();\n\n    /**\n     * Resets the date to end of the decade and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfDecade();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfDecade();\n\n    /**\n     * Modify to end of current hour, minutes and seconds become 59\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfHour();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfHour();\n\n    /**\n     * Resets the date to end of the millennium and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfMillennium();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfMillennium();\n\n    /**\n     * Modify to end of current minute, seconds become 59\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfMinute();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfMinute();\n\n    /**\n     * Resets the date to end of the month and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfMonth();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfMonth();\n\n    /**\n     * Resets the date to end of the quarter and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfQuarter();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfQuarter();\n\n    /**\n     * Modify to end of current second, microseconds become 999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->endOfSecond()\n     *   ->format('H:i:s.u');\n     * ```\n     *\n     * @return static\n     */\n    public function endOfSecond();\n\n    /**\n     * Resets the date to end of week (defined in $weekEndsAt) and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->locale('ar')->endOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfWeek(Carbon::SATURDAY) . \"\\n\";\n     * ```\n     *\n     * @param int $weekEndsAt optional start allow you to specify the day of week to use to end the week\n     *\n     * @return static\n     */\n    public function endOfWeek($weekEndsAt = null);\n\n    /**\n     * Resets the date to end of the year and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfYear();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfYear();\n\n    /**\n     * Determines if the instance is equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->eq('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->eq(Carbon::parse('2018-07-25 12:45:16')); // true\n     * Carbon::parse('2018-07-25 12:45:16')->eq('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see equalTo()\n     *\n     * @return bool\n     */\n    public function eq($date): bool;\n\n    /**\n     * Determines if the instance is equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->equalTo('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->equalTo(Carbon::parse('2018-07-25 12:45:16')); // true\n     * Carbon::parse('2018-07-25 12:45:16')->equalTo('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function equalTo($date): bool;\n\n    /**\n     * Set the current locale to the given, execute the passed function, reset the locale to previous one,\n     * then return the result of the closure (or null if the closure was void).\n     *\n     * @param string   $locale locale ex. en\n     * @param callable $func\n     *\n     * @return mixed\n     */\n    public static function executeWithLocale($locale, $func);\n\n    /**\n     * Get the farthest date from the instance (second-precision).\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return static\n     */\n    public function farthest($date1, $date2);\n\n    /**\n     * Modify to the first occurrence of a given day of the week\n     * in the current month. If no dayOfWeek is provided, modify to the\n     * first day of the current month.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek\n     *\n     * @return static\n     */\n    public function firstOfMonth($dayOfWeek = null);\n\n    /**\n     * Modify to the first occurrence of a given day of the week\n     * in the current quarter. If no dayOfWeek is provided, modify to the\n     * first day of the current quarter.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function firstOfQuarter($dayOfWeek = null);\n\n    /**\n     * Modify to the first occurrence of a given day of the week\n     * in the current year. If no dayOfWeek is provided, modify to the\n     * first day of the current year.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function firstOfYear($dayOfWeek = null);\n\n    /**\n     * Get the difference in days as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInDays($date = null, $absolute = true);\n\n    /**\n     * Get the difference in hours as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInHours($date = null, $absolute = true);\n\n    /**\n     * Get the difference in minutes as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInMinutes($date = null, $absolute = true);\n\n    /**\n     * Get the difference in months as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInMonths($date = null, $absolute = true);\n\n    /**\n     * Get the difference in days as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealDays($date = null, $absolute = true);\n\n    /**\n     * Get the difference in hours as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealHours($date = null, $absolute = true);\n\n    /**\n     * Get the difference in minutes as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealMinutes($date = null, $absolute = true);\n\n    /**\n     * Get the difference in months as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealMonths($date = null, $absolute = true);\n\n    /**\n     * Get the difference in seconds as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealSeconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in weeks as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealWeeks($date = null, $absolute = true);\n\n    /**\n     * Get the difference in year as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealYears($date = null, $absolute = true);\n\n    /**\n     * Get the difference in seconds as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInSeconds($date = null, $absolute = true);\n\n    /**\n     * Get the difference in weeks as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInWeeks($date = null, $absolute = true);\n\n    /**\n     * Get the difference in year as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInYears($date = null, $absolute = true);\n\n    /**\n     * Round the current instance second with given precision if specified.\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return CarbonInterface\n     */\n    public function floor($precision = 1);\n\n    /**\n     * Truncate the current instance at the given unit with given precision if specified.\n     *\n     * @param string    $unit\n     * @param float|int $precision\n     *\n     * @return CarbonInterface\n     */\n    public function floorUnit($unit, $precision = 1);\n\n    /**\n     * Truncate the current instance week.\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return CarbonInterface\n     */\n    public function floorWeek($weekStartsAt = null);\n\n    /**\n     * Format the instance with the current locale.  You can set the current\n     * locale using setlocale() https://php.net/setlocale.\n     *\n     * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.\n     *             Use ->isoFormat() instead.\n     *             Deprecated since 2.55.0\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    public function formatLocalized($format);\n\n    /**\n     * @alias diffForHumans\n     *\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function from($other = null, $syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Get the difference in a human readable format in the current locale from current\n     * instance to now.\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int       $options human diff options\n     *\n     * @return string\n     */\n    public function fromNow($syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Create an instance from a serialized string.\n     *\n     * @param string $value\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function fromSerialized($value);\n\n    /**\n     * Register a custom macro.\n     *\n     * @param object|callable $macro\n     * @param int             $priority marco with higher priority is tried first\n     *\n     * @return void\n     */\n    public static function genericMacro($macro, $priority = 0);\n\n    /**\n     * Get a part of the Carbon object\n     *\n     * @param string $name\n     *\n     * @throws UnknownGetterException\n     *\n     * @return string|int|bool|DateTimeZone|null\n     */\n    public function get($name);\n\n    /**\n     * Returns the alternative number for a given date property if available in the current locale.\n     *\n     * @param string $key date property\n     *\n     * @return string\n     */\n    public function getAltNumber(string $key): string;\n\n    /**\n     * Returns the list of internally available locales and already loaded custom locales.\n     * (It will ignore custom translator dynamic loading.)\n     *\n     * @return array\n     */\n    public static function getAvailableLocales();\n\n    /**\n     * Returns list of Language object for each available locale. This object allow you to get the ISO name, native\n     * name, region and variant of the locale.\n     *\n     * @return Language[]\n     */\n    public static function getAvailableLocalesInfo();\n\n    /**\n     * Returns list of calendar formats for ISO formatting.\n     *\n     * @param string|null $locale current locale used if null\n     *\n     * @return array\n     */\n    public function getCalendarFormats($locale = null);\n\n    /**\n     * Get the days of the week\n     *\n     * @return array\n     */\n    public static function getDays();\n\n    /**\n     * Return the number of days since the start of the week (using the current locale or the first parameter\n     * if explicitly given).\n     *\n     * @param int|null $weekStartsAt optional start allow you to specify the day of week to use to start the week,\n     *                               if not provided, start of week is inferred from the locale\n     *                               (Sunday for en_US, Monday for de_DE, etc.)\n     *\n     * @return int\n     */\n    public function getDaysFromStartOfWeek(?int $weekStartsAt = null): int;\n\n    /**\n     * Get the fallback locale.\n     *\n     * @see https://symfony.com/doc/current/components/translation.html#fallback-locales\n     *\n     * @return string|null\n     */\n    public static function getFallbackLocale();\n\n    /**\n     * List of replacements from date() format to isoFormat().\n     *\n     * @return array\n     */\n    public static function getFormatsToIsoReplacements();\n\n    /**\n     * Return default humanDiff() options (merged flags as integer).\n     *\n     * @return int\n     */\n    public static function getHumanDiffOptions();\n\n    /**\n     * Returns list of locale formats for ISO formatting.\n     *\n     * @param string|null $locale current locale used if null\n     *\n     * @return array\n     */\n    public function getIsoFormats($locale = null);\n\n    /**\n     * Returns list of locale units for ISO formatting.\n     *\n     * @return array\n     */\n    public static function getIsoUnits();\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return array\n     */\n    #[ReturnTypeWillChange]\n    public static function getLastErrors();\n\n    /**\n     * Get the raw callable macro registered globally or locally for a given name.\n     *\n     * @param string $name\n     *\n     * @return callable|null\n     */\n    public function getLocalMacro($name);\n\n    /**\n     * Get the translator of the current instance or the default if none set.\n     *\n     * @return \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    public function getLocalTranslator();\n\n    /**\n     * Get the current translator locale.\n     *\n     * @return string\n     */\n    public static function getLocale();\n\n    /**\n     * Get the raw callable macro registered globally for a given name.\n     *\n     * @param string $name\n     *\n     * @return callable|null\n     */\n    public static function getMacro($name);\n\n    /**\n     * get midday/noon hour\n     *\n     * @return int\n     */\n    public static function getMidDayAt();\n\n    /**\n     * Returns the offset hour and minute formatted with +/- and a given separator (\":\" by default).\n     * For example, if the time zone is 9 hours 30 minutes, you'll get \"+09:30\", with \"@@\" as first\n     * argument, \"+09@@30\", with \"\" as first argument, \"+0930\". Negative offset will return something\n     * like \"-12:00\".\n     *\n     * @param string $separator string to place between hours and minutes (\":\" by default)\n     *\n     * @return string\n     */\n    public function getOffsetString($separator = ':');\n\n    /**\n     * Returns a unit of the instance padded with 0 by default or any other string if specified.\n     *\n     * @param string $unit      Carbon unit name\n     * @param int    $length    Length of the output (2 by default)\n     * @param string $padString String to use for padding (\"0\" by default)\n     * @param int    $padType   Side(s) to pad (STR_PAD_LEFT by default)\n     *\n     * @return string\n     */\n    public function getPaddedUnit($unit, $length = 2, $padString = '0', $padType = 0);\n\n    /**\n     * Returns a timestamp rounded with the given precision (6 by default).\n     *\n     * @example getPreciseTimestamp()   1532087464437474 (microsecond maximum precision)\n     * @example getPreciseTimestamp(6)  1532087464437474\n     * @example getPreciseTimestamp(5)  153208746443747  (1/100000 second precision)\n     * @example getPreciseTimestamp(4)  15320874644375   (1/10000 second precision)\n     * @example getPreciseTimestamp(3)  1532087464437    (millisecond precision)\n     * @example getPreciseTimestamp(2)  153208746444     (1/100 second precision)\n     * @example getPreciseTimestamp(1)  15320874644      (1/10 second precision)\n     * @example getPreciseTimestamp(0)  1532087464       (second precision)\n     * @example getPreciseTimestamp(-1) 153208746        (10 second precision)\n     * @example getPreciseTimestamp(-2) 15320875         (100 second precision)\n     *\n     * @param int $precision\n     *\n     * @return float\n     */\n    public function getPreciseTimestamp($precision = 6);\n\n    /**\n     * Returns current local settings.\n     *\n     * @return array\n     */\n    public function getSettings();\n\n    /**\n     * Get the Carbon instance (real or mock) to be returned when a \"now\"\n     * instance is created.\n     *\n     * @return Closure|static the current instance used for testing\n     */\n    public static function getTestNow();\n\n    /**\n     * Return a format from H:i to H:i:s.u according to given unit precision.\n     *\n     * @param string $unitPrecision \"minute\", \"second\", \"millisecond\" or \"microsecond\"\n     *\n     * @return string\n     */\n    public static function getTimeFormatByPrecision($unitPrecision);\n\n    /**\n     * Returns the timestamp with millisecond precision.\n     *\n     * @return int\n     */\n    public function getTimestampMs();\n\n    /**\n     * Get the translation of the current week day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context      whole format string\n     * @param string      $keySuffix    \"\", \"_short\" or \"_min\"\n     * @param string|null $defaultValue default value if translation missing\n     *\n     * @return string\n     */\n    public function getTranslatedDayName($context = null, $keySuffix = '', $defaultValue = null);\n\n    /**\n     * Get the translation of the current abbreviated week day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context whole format string\n     *\n     * @return string\n     */\n    public function getTranslatedMinDayName($context = null);\n\n    /**\n     * Get the translation of the current month day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context      whole format string\n     * @param string      $keySuffix    \"\" or \"_short\"\n     * @param string|null $defaultValue default value if translation missing\n     *\n     * @return string\n     */\n    public function getTranslatedMonthName($context = null, $keySuffix = '', $defaultValue = null);\n\n    /**\n     * Get the translation of the current short week day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context whole format string\n     *\n     * @return string\n     */\n    public function getTranslatedShortDayName($context = null);\n\n    /**\n     * Get the translation of the current short month day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context whole format string\n     *\n     * @return string\n     */\n    public function getTranslatedShortMonthName($context = null);\n\n    /**\n     * Returns raw translation message for a given key.\n     *\n     * @param string                                             $key        key to find\n     * @param string|null                                        $locale     current locale used if null\n     * @param string|null                                        $default    default value if translation returns the key\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator an optional translator to use\n     *\n     * @return string\n     */\n    public function getTranslationMessage(string $key, ?string $locale = null, ?string $default = null, $translator = null);\n\n    /**\n     * Returns raw translation message for a given key.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator the translator to use\n     * @param string                                             $key        key to find\n     * @param string|null                                        $locale     current locale used if null\n     * @param string|null                                        $default    default value if translation returns the key\n     *\n     * @return string\n     */\n    public static function getTranslationMessageWith($translator, string $key, ?string $locale = null, ?string $default = null);\n\n    /**\n     * Get the default translator instance in use.\n     *\n     * @return \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    public static function getTranslator();\n\n    /**\n     * Get the last day of week\n     *\n     * @return int\n     */\n    public static function getWeekEndsAt();\n\n    /**\n     * Get the first day of week\n     *\n     * @return int\n     */\n    public static function getWeekStartsAt();\n\n    /**\n     * Get weekend days\n     *\n     * @return array\n     */\n    public static function getWeekendDays();\n\n    /**\n     * Determines if the instance is greater (after) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThan('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThan('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThan('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function greaterThan($date): bool;\n\n    /**\n     * Determines if the instance is greater (after) than or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThanOrEqualTo('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThanOrEqualTo('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThanOrEqualTo('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function greaterThanOrEqualTo($date): bool;\n\n    /**\n     * Determines if the instance is greater (after) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->gt('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->gt('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->gt('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see greaterThan()\n     *\n     * @return bool\n     */\n    public function gt($date): bool;\n\n    /**\n     * Determines if the instance is greater (after) than or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->gte('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->gte('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->gte('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see greaterThanOrEqualTo()\n     *\n     * @return bool\n     */\n    public function gte($date): bool;\n\n    /**\n     * Checks if the (date)time string is in a given format.\n     *\n     * @example\n     * ```\n     * Carbon::hasFormat('11:12:45', 'h:i:s'); // true\n     * Carbon::hasFormat('13:12:45', 'h:i:s'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     *\n     * @return bool\n     */\n    public static function hasFormat($date, $format);\n\n    /**\n     * Checks if the (date)time string is in a given format.\n     *\n     * @example\n     * ```\n     * Carbon::hasFormatWithModifiers('31/08/2015', 'd#m#Y'); // true\n     * Carbon::hasFormatWithModifiers('31/08/2015', 'm#d#Y'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     *\n     * @return bool\n     */\n    public static function hasFormatWithModifiers($date, $format): bool;\n\n    /**\n     * Checks if macro is registered globally or locally.\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public function hasLocalMacro($name);\n\n    /**\n     * Return true if the current instance has its own translator.\n     *\n     * @return bool\n     */\n    public function hasLocalTranslator();\n\n    /**\n     * Checks if macro is registered globally.\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public static function hasMacro($name);\n\n    /**\n     * Determine if a time string will produce a relative date.\n     *\n     * @param string $time\n     *\n     * @return bool true if time match a relative date, false if absolute or invalid time string\n     */\n    public static function hasRelativeKeywords($time);\n\n    /**\n     * Determine if there is a valid test instance set. A valid test instance\n     * is anything that is not null.\n     *\n     * @return bool true if there is a test instance, otherwise false\n     */\n    public static function hasTestNow();\n\n    /**\n     * Create a Carbon instance from a DateTime one.\n     *\n     * @param DateTimeInterface $date\n     *\n     * @return static\n     */\n    public static function instance($date);\n\n    /**\n     * Returns true if the current date matches the given string.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2019')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2018')); // false\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2019-06')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('06-02')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2019-06-02')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('Sunday')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('June')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12:23')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12:23:45')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12:23:00')); // false\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12h')); // true\n     * var_dump(Carbon::parse('2019-06-02 15:23:45')->is('3pm')); // true\n     * var_dump(Carbon::parse('2019-06-02 15:23:45')->is('3am')); // false\n     * ```\n     *\n     * @param string $tester day name, month name, hour, date, etc. as string\n     *\n     * @return bool\n     */\n    public function is(string $tester);\n\n    /**\n     * Determines if the instance is greater (after) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->isAfter('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->isAfter('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->isAfter('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see greaterThan()\n     *\n     * @return bool\n     */\n    public function isAfter($date): bool;\n\n    /**\n     * Determines if the instance is less (before) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->isBefore('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->isBefore('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->isBefore('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see lessThan()\n     *\n     * @return bool\n     */\n    public function isBefore($date): bool;\n\n    /**\n     * Determines if the instance is between two others\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->isBetween('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->isBetween('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->isBetween('2018-07-25', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->isBetween('2018-07-25', '2018-08-01', false); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     * @param bool                                    $equal Indicates if an equal to comparison should be done\n     *\n     * @return bool\n     */\n    public function isBetween($date1, $date2, $equal = true): bool;\n\n    /**\n     * Check if its the birthday. Compares the date/month values of the two dates.\n     *\n     * @example\n     * ```\n     * Carbon::now()->subYears(5)->isBirthday(); // true\n     * Carbon::now()->subYears(5)->subDay()->isBirthday(); // false\n     * Carbon::parse('2019-06-05')->isBirthday(Carbon::parse('2001-06-05')); // true\n     * Carbon::parse('2019-06-05')->isBirthday(Carbon::parse('2001-06-06')); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date The instance to compare with or null to use current day.\n     *\n     * @return bool\n     */\n    public function isBirthday($date = null);\n\n    /**\n     * Determines if the instance is in the current unit given.\n     *\n     * @example\n     * ```\n     * Carbon::now()->isCurrentUnit('hour'); // true\n     * Carbon::now()->subHours(2)->isCurrentUnit('hour'); // false\n     * ```\n     *\n     * @param string $unit The unit to test.\n     *\n     * @throws BadMethodCallException\n     *\n     * @return bool\n     */\n    public function isCurrentUnit($unit);\n\n    /**\n     * Checks if this day is a specific day of the week.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-07-17')->isDayOfWeek(Carbon::WEDNESDAY); // true\n     * Carbon::parse('2019-07-17')->isDayOfWeek(Carbon::FRIDAY); // false\n     * Carbon::parse('2019-07-17')->isDayOfWeek('Wednesday'); // true\n     * Carbon::parse('2019-07-17')->isDayOfWeek('Friday'); // false\n     * ```\n     *\n     * @param int $dayOfWeek\n     *\n     * @return bool\n     */\n    public function isDayOfWeek($dayOfWeek);\n\n    /**\n     * Check if the instance is end of day.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 23:59:59.999999')->isEndOfDay(); // true\n     * Carbon::parse('2019-02-28 23:59:59.123456')->isEndOfDay(); // true\n     * Carbon::parse('2019-02-28 23:59:59')->isEndOfDay(); // true\n     * Carbon::parse('2019-02-28 23:59:58.999999')->isEndOfDay(); // false\n     * Carbon::parse('2019-02-28 23:59:59.999999')->isEndOfDay(true); // true\n     * Carbon::parse('2019-02-28 23:59:59.123456')->isEndOfDay(true); // false\n     * Carbon::parse('2019-02-28 23:59:59')->isEndOfDay(true); // false\n     * ```\n     *\n     * @param bool $checkMicroseconds check time at microseconds precision\n     *\n     * @return bool\n     */\n    public function isEndOfDay($checkMicroseconds = false);\n\n    /**\n     * Returns true if the date was created using CarbonImmutable::endOfTime()\n     *\n     * @return bool\n     */\n    public function isEndOfTime(): bool;\n\n    /**\n     * Determines if the instance is in the future, ie. greater (after) than now.\n     *\n     * @example\n     * ```\n     * Carbon::now()->addHours(5)->isFuture(); // true\n     * Carbon::now()->subHours(5)->isFuture(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isFuture();\n\n    /**\n     * Returns true if the current class/instance is immutable.\n     *\n     * @return bool\n     */\n    public static function isImmutable();\n\n    /**\n     * Check if today is the last day of the Month\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28')->isLastOfMonth(); // true\n     * Carbon::parse('2019-03-28')->isLastOfMonth(); // false\n     * Carbon::parse('2019-03-30')->isLastOfMonth(); // false\n     * Carbon::parse('2019-03-31')->isLastOfMonth(); // true\n     * Carbon::parse('2019-04-30')->isLastOfMonth(); // true\n     * ```\n     *\n     * @return bool\n     */\n    public function isLastOfMonth();\n\n    /**\n     * Determines if the instance is a leap year.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2020-01-01')->isLeapYear(); // true\n     * Carbon::parse('2019-01-01')->isLeapYear(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isLeapYear();\n\n    /**\n     * Determines if the instance is a long year (using ISO 8601 year).\n     *\n     * @example\n     * ```\n     * Carbon::parse('2015-01-01')->isLongIsoYear(); // true\n     * Carbon::parse('2016-01-01')->isLongIsoYear(); // true\n     * Carbon::parse('2016-01-03')->isLongIsoYear(); // false\n     * Carbon::parse('2019-12-29')->isLongIsoYear(); // false\n     * Carbon::parse('2019-12-30')->isLongIsoYear(); // true\n     * ```\n     *\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Week_dates\n     *\n     * @return bool\n     */\n    public function isLongIsoYear();\n\n    /**\n     * Determines if the instance is a long year (using calendar year).\n     *\n     * ⚠️ This method completely ignores month and day to use the numeric year number,\n     * it's not correct if the exact date matters. For instance as `2019-12-30` is already\n     * in the first week of the 2020 year, if you want to know from this date if ISO week\n     * year 2020 is a long year, use `isLongIsoYear` instead.\n     *\n     * @example\n     * ```\n     * Carbon::create(2015)->isLongYear(); // true\n     * Carbon::create(2016)->isLongYear(); // false\n     * ```\n     *\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Week_dates\n     *\n     * @return bool\n     */\n    public function isLongYear();\n\n    /**\n     * Check if the instance is midday.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 11:59:59.999999')->isMidday(); // false\n     * Carbon::parse('2019-02-28 12:00:00')->isMidday(); // true\n     * Carbon::parse('2019-02-28 12:00:00.999999')->isMidday(); // true\n     * Carbon::parse('2019-02-28 12:00:01')->isMidday(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isMidday();\n\n    /**\n     * Check if the instance is start of day / midnight.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 00:00:00')->isMidnight(); // true\n     * Carbon::parse('2019-02-28 00:00:00.999999')->isMidnight(); // true\n     * Carbon::parse('2019-02-28 00:00:01')->isMidnight(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isMidnight();\n\n    /**\n     * Returns true if a property can be changed via setter.\n     *\n     * @param string $unit\n     *\n     * @return bool\n     */\n    public static function isModifiableUnit($unit);\n\n    /**\n     * Returns true if the current class/instance is mutable.\n     *\n     * @return bool\n     */\n    public static function isMutable();\n\n    /**\n     * Determines if the instance is in the past, ie. less (before) than now.\n     *\n     * @example\n     * ```\n     * Carbon::now()->subHours(5)->isPast(); // true\n     * Carbon::now()->addHours(5)->isPast(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isPast();\n\n    /**\n     * Compares the formatted values of the two dates.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-06-13')->isSameAs('Y-d', Carbon::parse('2019-12-13')); // true\n     * Carbon::parse('2019-06-13')->isSameAs('Y-d', Carbon::parse('2019-06-14')); // false\n     * ```\n     *\n     * @param string                                        $format date formats to compare.\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|string|null $date   instance to compare with or null to use current day.\n     *\n     * @return bool\n     */\n    public function isSameAs($format, $date = null);\n\n    /**\n     * Checks if the passed in date is in the same month as the instance´s month.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2019-01-01')); // true\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2019-02-01')); // false\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2018-01-01')); // false\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2018-01-01'), false); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date       The instance to compare with or null to use the current date.\n     * @param bool                                   $ofSameYear Check if it is the same month in the same year.\n     *\n     * @return bool\n     */\n    public function isSameMonth($date = null, $ofSameYear = true);\n\n    /**\n     * Checks if the passed in date is in the same quarter as the instance quarter (and year if needed).\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2019-03-01')); // true\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2019-04-01')); // false\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2018-03-01')); // false\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2018-03-01'), false); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|string|null $date       The instance to compare with or null to use current day.\n     * @param bool                                          $ofSameYear Check if it is the same month in the same year.\n     *\n     * @return bool\n     */\n    public function isSameQuarter($date = null, $ofSameYear = true);\n\n    /**\n     * Determines if the instance is in the current unit given.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-01-13')->isSameUnit('year', Carbon::parse('2019-12-25')); // true\n     * Carbon::parse('2018-12-13')->isSameUnit('year', Carbon::parse('2019-12-25')); // false\n     * ```\n     *\n     * @param string                                 $unit singular unit string\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date instance to compare with or null to use current day.\n     *\n     * @throws BadComparisonUnitException\n     *\n     * @return bool\n     */\n    public function isSameUnit($unit, $date = null);\n\n    /**\n     * Check if the instance is start of day / midnight.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 00:00:00')->isStartOfDay(); // true\n     * Carbon::parse('2019-02-28 00:00:00.999999')->isStartOfDay(); // true\n     * Carbon::parse('2019-02-28 00:00:01')->isStartOfDay(); // false\n     * Carbon::parse('2019-02-28 00:00:00.000000')->isStartOfDay(true); // true\n     * Carbon::parse('2019-02-28 00:00:00.000012')->isStartOfDay(true); // false\n     * ```\n     *\n     * @param bool $checkMicroseconds check time at microseconds precision\n     *\n     * @return bool\n     */\n    public function isStartOfDay($checkMicroseconds = false);\n\n    /**\n     * Returns true if the date was created using CarbonImmutable::startOfTime()\n     *\n     * @return bool\n     */\n    public function isStartOfTime(): bool;\n\n    /**\n     * Returns true if the strict mode is globally in use, false else.\n     * (It can be overridden in specific instances.)\n     *\n     * @return bool\n     */\n    public static function isStrictModeEnabled();\n\n    /**\n     * Determines if the instance is today.\n     *\n     * @example\n     * ```\n     * Carbon::today()->isToday(); // true\n     * Carbon::tomorrow()->isToday(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isToday();\n\n    /**\n     * Determines if the instance is tomorrow.\n     *\n     * @example\n     * ```\n     * Carbon::tomorrow()->isTomorrow(); // true\n     * Carbon::yesterday()->isTomorrow(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isTomorrow();\n\n    /**\n     * Determines if the instance is a weekday.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-07-14')->isWeekday(); // false\n     * Carbon::parse('2019-07-15')->isWeekday(); // true\n     * ```\n     *\n     * @return bool\n     */\n    public function isWeekday();\n\n    /**\n     * Determines if the instance is a weekend day.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-07-14')->isWeekend(); // true\n     * Carbon::parse('2019-07-15')->isWeekend(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isWeekend();\n\n    /**\n     * Determines if the instance is yesterday.\n     *\n     * @example\n     * ```\n     * Carbon::yesterday()->isYesterday(); // true\n     * Carbon::tomorrow()->isYesterday(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isYesterday();\n\n    /**\n     * Format in the current language using ISO replacement patterns.\n     *\n     * @param string      $format\n     * @param string|null $originalFormat provide context if a chunk has been passed alone\n     *\n     * @return string\n     */\n    public function isoFormat(string $format, ?string $originalFormat = null): string;\n\n    /**\n     * Get/set the week number using given first day of week and first\n     * day of year included in the first week. Or use ISO format if no settings\n     * given.\n     *\n     * @param int|null $week\n     * @param int|null $dayOfWeek\n     * @param int|null $dayOfYear\n     *\n     * @return int|static\n     */\n    public function isoWeek($week = null, $dayOfWeek = null, $dayOfYear = null);\n\n    /**\n     * Set/get the week number of year using given first day of week and first\n     * day of year included in the first week. Or use ISO format if no settings\n     * given.\n     *\n     * @param int|null $year      if null, act as a getter, if not null, set the year and return current instance.\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int|static\n     */\n    public function isoWeekYear($year = null, $dayOfWeek = null, $dayOfYear = null);\n\n    /**\n     * Get/set the ISO weekday from 1 (Monday) to 7 (Sunday).\n     *\n     * @param int|null $value new value for weekday if using as setter.\n     *\n     * @return static|int\n     */\n    public function isoWeekday($value = null);\n\n    /**\n     * Get the number of weeks of the current week-year using given first day of week and first\n     * day of year included in the first week. Or use ISO format if no settings\n     * given.\n     *\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int\n     */\n    public function isoWeeksInYear($dayOfWeek = null, $dayOfYear = null);\n\n    /**\n     * Prepare the object for JSON serialization.\n     *\n     * @return array|string\n     */\n    #[ReturnTypeWillChange]\n    public function jsonSerialize();\n\n    /**\n     * Modify to the last occurrence of a given day of the week\n     * in the current month. If no dayOfWeek is provided, modify to the\n     * last day of the current month.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek\n     *\n     * @return static\n     */\n    public function lastOfMonth($dayOfWeek = null);\n\n    /**\n     * Modify to the last occurrence of a given day of the week\n     * in the current quarter. If no dayOfWeek is provided, modify to the\n     * last day of the current quarter.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function lastOfQuarter($dayOfWeek = null);\n\n    /**\n     * Modify to the last occurrence of a given day of the week\n     * in the current year. If no dayOfWeek is provided, modify to the\n     * last day of the current year.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function lastOfYear($dayOfWeek = null);\n\n    /**\n     * Determines if the instance is less (before) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lessThan('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lessThan('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lessThan('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function lessThan($date): bool;\n\n    /**\n     * Determines if the instance is less (before) or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lessThanOrEqualTo('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lessThanOrEqualTo('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->lessThanOrEqualTo('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function lessThanOrEqualTo($date): bool;\n\n    /**\n     * Get/set the locale for the current instance.\n     *\n     * @param string|null $locale\n     * @param string      ...$fallbackLocales\n     *\n     * @return $this|string\n     */\n    public function locale(?string $locale = null, ...$fallbackLocales);\n\n    /**\n     * Returns true if the given locale is internally supported and has words for 1-day diff (just now, yesterday, tomorrow).\n     * Support is considered enabled if the 3 words are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasDiffOneDayWords($locale);\n\n    /**\n     * Returns true if the given locale is internally supported and has diff syntax support (ago, from now, before, after).\n     * Support is considered enabled if the 4 sentences are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasDiffSyntax($locale);\n\n    /**\n     * Returns true if the given locale is internally supported and has words for 2-days diff (before yesterday, after tomorrow).\n     * Support is considered enabled if the 2 words are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasDiffTwoDayWords($locale);\n\n    /**\n     * Returns true if the given locale is internally supported and has period syntax support (X times, every X, from X, to X).\n     * Support is considered enabled if the 4 sentences are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasPeriodSyntax($locale);\n\n    /**\n     * Returns true if the given locale is internally supported and has short-units support.\n     * Support is considered enabled if either year, day or hour has a short variant translated.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasShortUnits($locale);\n\n    /**\n     * Determines if the instance is less (before) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lt('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lt('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lt('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see lessThan()\n     *\n     * @return bool\n     */\n    public function lt($date): bool;\n\n    /**\n     * Determines if the instance is less (before) or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lte('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lte('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->lte('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see lessThanOrEqualTo()\n     *\n     * @return bool\n     */\n    public function lte($date): bool;\n\n    /**\n     * Register a custom macro.\n     *\n     * @example\n     * ```\n     * $userSettings = [\n     *   'locale' => 'pt',\n     *   'timezone' => 'America/Sao_Paulo',\n     * ];\n     * Carbon::macro('userFormat', function () use ($userSettings) {\n     *   return $this->copy()->locale($userSettings['locale'])->tz($userSettings['timezone'])->calendar();\n     * });\n     * echo Carbon::yesterday()->hours(11)->userFormat();\n     * ```\n     *\n     * @param string          $name\n     * @param object|callable $macro\n     *\n     * @return void\n     */\n    public static function macro($name, $macro);\n\n    /**\n     * Make a Carbon instance from given variable if possible.\n     *\n     * Always return a new instance. Parse only strings and only these likely to be dates (skip intervals\n     * and recurrences). Throw an exception for invalid format, but otherwise return null.\n     *\n     * @param mixed $var\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|null\n     */\n    public static function make($var);\n\n    /**\n     * Get the maximum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return static\n     */\n    public function max($date = null);\n\n    /**\n     * Create a Carbon instance for the greatest supported date.\n     *\n     * @return static\n     */\n    public static function maxValue();\n\n    /**\n     * Get the maximum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see max()\n     *\n     * @return static\n     */\n    public function maximum($date = null);\n\n    /**\n     * Return the meridiem of the current time in the current locale.\n     *\n     * @param bool $isLower if true, returns lowercase variant if available in the current locale.\n     *\n     * @return string\n     */\n    public function meridiem(bool $isLower = false): string;\n\n    /**\n     * Modify to midday, default to self::$midDayAt\n     *\n     * @return static\n     */\n    public function midDay();\n\n    /**\n     * Get the minimum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return static\n     */\n    public function min($date = null);\n\n    /**\n     * Create a Carbon instance for the lowest supported date.\n     *\n     * @return static\n     */\n    public static function minValue();\n\n    /**\n     * Get the minimum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see min()\n     *\n     * @return static\n     */\n    public function minimum($date = null);\n\n    /**\n     * Mix another object into the class.\n     *\n     * @example\n     * ```\n     * Carbon::mixin(new class {\n     *   public function addMoon() {\n     *     return function () {\n     *       return $this->addDays(30);\n     *     };\n     *   }\n     *   public function subMoon() {\n     *     return function () {\n     *       return $this->subDays(30);\n     *     };\n     *   }\n     * });\n     * $fullMoon = Carbon::create('2018-12-22');\n     * $nextFullMoon = $fullMoon->addMoon();\n     * $blackMoon = Carbon::create('2019-01-06');\n     * $previousBlackMoon = $blackMoon->subMoon();\n     * echo \"$nextFullMoon\\n\";\n     * echo \"$previousBlackMoon\\n\";\n     * ```\n     *\n     * @param object|string $mixin\n     *\n     * @throws ReflectionException\n     *\n     * @return void\n     */\n    public static function mixin($mixin);\n\n    /**\n     * Calls \\DateTime::modify if mutable or \\DateTimeImmutable::modify else.\n     *\n     * @see https://php.net/manual/en/datetime.modify.php\n     *\n     * @return static|false\n     */\n    #[ReturnTypeWillChange]\n    public function modify($modify);\n\n    /**\n     * Determines if the instance is not equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->ne('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->ne(Carbon::parse('2018-07-25 12:45:16')); // false\n     * Carbon::parse('2018-07-25 12:45:16')->ne('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see notEqualTo()\n     *\n     * @return bool\n     */\n    public function ne($date): bool;\n\n    /**\n     * Modify to the next occurrence of a given modifier such as a day of\n     * the week. If no modifier is provided, modify to the next occurrence\n     * of the current day of the week. Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param string|int|null $modifier\n     *\n     * @return static|false\n     */\n    public function next($modifier = null);\n\n    /**\n     * Go forward to the next weekday.\n     *\n     * @return static\n     */\n    public function nextWeekday();\n\n    /**\n     * Go forward to the next weekend day.\n     *\n     * @return static\n     */\n    public function nextWeekendDay();\n\n    /**\n     * Determines if the instance is not equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->notEqualTo('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->notEqualTo(Carbon::parse('2018-07-25 12:45:16')); // false\n     * Carbon::parse('2018-07-25 12:45:16')->notEqualTo('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function notEqualTo($date): bool;\n\n    /**\n     * Get a Carbon instance for the current date and time.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function now($tz = null);\n\n    /**\n     * Returns a present instance in the same timezone.\n     *\n     * @return static\n     */\n    public function nowWithSameTz();\n\n    /**\n     * Modify to the given occurrence of a given day of the week\n     * in the current month. If the calculated occurrence is outside the scope\n     * of the current month, then return false and no modifications are made.\n     * Use the supplied constants to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int $nth\n     * @param int $dayOfWeek\n     *\n     * @return mixed\n     */\n    public function nthOfMonth($nth, $dayOfWeek);\n\n    /**\n     * Modify to the given occurrence of a given day of the week\n     * in the current quarter. If the calculated occurrence is outside the scope\n     * of the current quarter, then return false and no modifications are made.\n     * Use the supplied constants to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int $nth\n     * @param int $dayOfWeek\n     *\n     * @return mixed\n     */\n    public function nthOfQuarter($nth, $dayOfWeek);\n\n    /**\n     * Modify to the given occurrence of a given day of the week\n     * in the current year. If the calculated occurrence is outside the scope\n     * of the current year, then return false and no modifications are made.\n     * Use the supplied constants to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int $nth\n     * @param int $dayOfWeek\n     *\n     * @return mixed\n     */\n    public function nthOfYear($nth, $dayOfWeek);\n\n    /**\n     * Return a property with its ordinal.\n     *\n     * @param string      $key\n     * @param string|null $period\n     *\n     * @return string\n     */\n    public function ordinal(string $key, ?string $period = null): string;\n\n    /**\n     * Create a carbon instance from a string.\n     *\n     * This is an alias for the constructor that allows better fluent syntax\n     * as it allows you to do Carbon::parse('Monday next week')->fn() rather\n     * than (new Carbon('Monday next week'))->fn().\n     *\n     * @param string|DateTimeInterface|null $time\n     * @param DateTimeZone|string|null      $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function parse($time = null, $tz = null);\n\n    /**\n     * Create a carbon instance from a localized string (in French, Japanese, Arabic, etc.).\n     *\n     * @param string                   $time   date/time string in the given language (may also contain English).\n     * @param string|null              $locale if locale is null or not specified, current global locale will be\n     *                                         used instead.\n     * @param DateTimeZone|string|null $tz     optional timezone for the new instance.\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function parseFromLocale($time, $locale = null, $tz = null);\n\n    /**\n     * Returns standardized plural of a given singular/plural unit name (in English).\n     *\n     * @param string $unit\n     *\n     * @return string\n     */\n    public static function pluralUnit(string $unit): string;\n\n    /**\n     * Modify to the previous occurrence of a given modifier such as a day of\n     * the week. If no dayOfWeek is provided, modify to the previous occurrence\n     * of the current day of the week. Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param string|int|null $modifier\n     *\n     * @return static|false\n     */\n    public function previous($modifier = null);\n\n    /**\n     * Go backward to the previous weekday.\n     *\n     * @return static\n     */\n    public function previousWeekday();\n\n    /**\n     * Go backward to the previous weekend day.\n     *\n     * @return static\n     */\n    public function previousWeekendDay();\n\n    /**\n     * Create a iterable CarbonPeriod object from current date to a given end date (and optional interval).\n     *\n     * @param \\DateTimeInterface|Carbon|CarbonImmutable|null $end      period end date\n     * @param int|\\DateInterval|string|null                  $interval period default interval or number of the given $unit\n     * @param string|null                                    $unit     if specified, $interval must be an integer\n     *\n     * @return CarbonPeriod\n     */\n    public function range($end = null, $interval = null, $unit = null);\n\n    /**\n     * Call native PHP DateTime/DateTimeImmutable add() method.\n     *\n     * @param DateInterval $interval\n     *\n     * @return static\n     */\n    public function rawAdd(DateInterval $interval);\n\n    /**\n     * Create a Carbon instance from a specific format.\n     *\n     * @param string                         $format Datetime format\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function rawCreateFromFormat($format, $time, $tz = null);\n\n    /**\n     * @see https://php.net/manual/en/datetime.format.php\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    public function rawFormat($format);\n\n    /**\n     * Create a carbon instance from a string.\n     *\n     * This is an alias for the constructor that allows better fluent syntax\n     * as it allows you to do Carbon::parse('Monday next week')->fn() rather\n     * than (new Carbon('Monday next week'))->fn().\n     *\n     * @param string|DateTimeInterface|null $time\n     * @param DateTimeZone|string|null      $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function rawParse($time = null, $tz = null);\n\n    /**\n     * Call native PHP DateTime/DateTimeImmutable sub() method.\n     *\n     * @param DateInterval $interval\n     *\n     * @return static\n     */\n    public function rawSub(DateInterval $interval);\n\n    /**\n     * Remove all macros and generic macros.\n     */\n    public static function resetMacros();\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Reset the month overflow behavior.\n     *\n     * @return void\n     */\n    public static function resetMonthsOverflow();\n\n    /**\n     * Reset the format used to the default when type juggling a Carbon instance to a string\n     *\n     * @return void\n     */\n    public static function resetToStringFormat();\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Reset the month overflow behavior.\n     *\n     * @return void\n     */\n    public static function resetYearsOverflow();\n\n    /**\n     * Round the current instance second with given precision if specified.\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     * @param string                              $function\n     *\n     * @return CarbonInterface\n     */\n    public function round($precision = 1, $function = 'round');\n\n    /**\n     * Round the current instance at the given unit with given precision if specified and the given function.\n     *\n     * @param string    $unit\n     * @param float|int $precision\n     * @param string    $function\n     *\n     * @return CarbonInterface\n     */\n    public function roundUnit($unit, $precision = 1, $function = 'round');\n\n    /**\n     * Round the current instance week.\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return CarbonInterface\n     */\n    public function roundWeek($weekStartsAt = null);\n\n    /**\n     * The number of seconds since midnight.\n     *\n     * @return int\n     */\n    public function secondsSinceMidnight();\n\n    /**\n     * The number of seconds until 23:59:59.\n     *\n     * @return int\n     */\n    public function secondsUntilEndOfDay();\n\n    /**\n     * Return a serialized string of the instance.\n     *\n     * @return string\n     */\n    public function serialize();\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather transform Carbon object before the serialization.\n     *\n     * JSON serialize all Carbon instances using the given callback.\n     *\n     * @param callable $callback\n     *\n     * @return void\n     */\n    public static function serializeUsing($callback);\n\n    /**\n     * Set a part of the Carbon object\n     *\n     * @param string|array            $name\n     * @param string|int|DateTimeZone $value\n     *\n     * @throws ImmutableException|UnknownSetterException\n     *\n     * @return $this\n     */\n    public function set($name, $value = null);\n\n    /**\n     * Set the date with gregorian year, month and day numbers.\n     *\n     * @see https://php.net/manual/en/datetime.setdate.php\n     *\n     * @param int $year\n     * @param int $month\n     * @param int $day\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setDate($year, $month, $day);\n\n    /**\n     * Set the year, month, and date for this instance to that of the passed instance.\n     *\n     * @param Carbon|DateTimeInterface $date now if null\n     *\n     * @return static\n     */\n    public function setDateFrom($date = null);\n\n    /**\n     * Set the date and time all together.\n     *\n     * @param int $year\n     * @param int $month\n     * @param int $day\n     * @param int $hour\n     * @param int $minute\n     * @param int $second\n     * @param int $microseconds\n     *\n     * @return static\n     */\n    public function setDateTime($year, $month, $day, $hour, $minute, $second = 0, $microseconds = 0);\n\n    /**\n     * Set the date and time for this instance to that of the passed instance.\n     *\n     * @param Carbon|DateTimeInterface $date\n     *\n     * @return static\n     */\n    public function setDateTimeFrom($date = null);\n\n    /**\n     * Set the day (keeping the current time) to the start of the week + the number of days passed as the first\n     * parameter. First day of week is driven by the locale unless explicitly set with the second parameter.\n     *\n     * @param int      $numberOfDays number of days to add after the start of the current week\n     * @param int|null $weekStartsAt optional start allow you to specify the day of week to use to start the week,\n     *                               if not provided, start of week is inferred from the locale\n     *                               (Sunday for en_US, Monday for de_DE, etc.)\n     *\n     * @return static\n     */\n    public function setDaysFromStartOfWeek(int $numberOfDays, ?int $weekStartsAt = null);\n\n    /**\n     * Set the fallback locale.\n     *\n     * @see https://symfony.com/doc/current/components/translation.html#fallback-locales\n     *\n     * @param string $locale\n     */\n    public static function setFallbackLocale($locale);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * @param int $humanDiffOptions\n     */\n    public static function setHumanDiffOptions($humanDiffOptions);\n\n    /**\n     * Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates.\n     *\n     * @see https://php.net/manual/en/datetime.setisodate.php\n     *\n     * @param int $year\n     * @param int $week\n     * @param int $day\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setISODate($year, $week, $day = 1);\n\n    /**\n     * Set the translator for the current instance.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator\n     *\n     * @return $this\n     */\n    public function setLocalTranslator(TranslatorInterface $translator);\n\n    /**\n     * Set the current translator locale and indicate if the source locale file exists.\n     * Pass 'auto' as locale to use closest language from the current LC_TIME locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function setLocale($locale);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather consider mid-day is always 12pm, then if you need to test if it's an other\n     *             hour, test it explicitly:\n     *                 $date->format('G') == 13\n     *             or to set explicitly to a given hour:\n     *                 $date->setTime(13, 0, 0, 0)\n     *\n     * Set midday/noon hour\n     *\n     * @param int $hour midday hour\n     *\n     * @return void\n     */\n    public static function setMidDayAt($hour);\n\n    /**\n     * Set a Carbon instance (real or mock) to be returned when a \"now\"\n     * instance is created.  The provided instance will be returned\n     * specifically under the following conditions:\n     *   - A call to the static now() method, ex. Carbon::now()\n     *   - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n     *   - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n     *   - When a string containing the desired time is passed to Carbon::parse().\n     *\n     * Note the timezone parameter was left out of the examples above and\n     * has no affect as the mock value will be returned regardless of its value.\n     *\n     * Only the moment is mocked with setTestNow(), the timezone will still be the one passed\n     * as parameter of date_default_timezone_get() as a fallback (see setTestNowAndTimezone()).\n     *\n     * To clear the test instance call this method using the default\n     * parameter of null.\n     *\n     * /!\\ Use this method for unit tests only.\n     *\n     * @param DateTimeInterface|Closure|static|string|false|null $testNow real or mock Carbon instance\n     */\n    public static function setTestNow($testNow = null);\n\n    /**\n     * Set a Carbon instance (real or mock) to be returned when a \"now\"\n     * instance is created.  The provided instance will be returned\n     * specifically under the following conditions:\n     *   - A call to the static now() method, ex. Carbon::now()\n     *   - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n     *   - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n     *   - When a string containing the desired time is passed to Carbon::parse().\n     *\n     * It will also align default timezone (e.g. call date_default_timezone_set()) with\n     * the second argument or if null, with the timezone of the given date object.\n     *\n     * To clear the test instance call this method using the default\n     * parameter of null.\n     *\n     * /!\\ Use this method for unit tests only.\n     *\n     * @param DateTimeInterface|Closure|static|string|false|null $testNow real or mock Carbon instance\n     */\n    public static function setTestNowAndTimezone($testNow = null, $tz = null);\n\n    /**\n     * Resets the current time of the DateTime object to a different time.\n     *\n     * @see https://php.net/manual/en/datetime.settime.php\n     *\n     * @param int $hour\n     * @param int $minute\n     * @param int $second\n     * @param int $microseconds\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setTime($hour, $minute, $second = 0, $microseconds = 0);\n\n    /**\n     * Set the hour, minute, second and microseconds for this instance to that of the passed instance.\n     *\n     * @param Carbon|DateTimeInterface $date now if null\n     *\n     * @return static\n     */\n    public function setTimeFrom($date = null);\n\n    /**\n     * Set the time by time string.\n     *\n     * @param string $time\n     *\n     * @return static\n     */\n    public function setTimeFromTimeString($time);\n\n    /**\n     * Set the instance's timestamp.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $unixTimestamp\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setTimestamp($unixTimestamp);\n\n    /**\n     * Set the instance's timezone from a string or object.\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setTimezone($value);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather let Carbon object being cast to string with DEFAULT_TO_STRING_FORMAT, and\n     *             use other method or custom format passed to format() method if you need to dump another string\n     *             format.\n     *\n     * Set the default format used when type juggling a Carbon instance to a string.\n     *\n     * @param string|Closure|null $format\n     *\n     * @return void\n     */\n    public static function setToStringFormat($format);\n\n    /**\n     * Set the default translator instance to use.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator\n     *\n     * @return void\n     */\n    public static function setTranslator(TranslatorInterface $translator);\n\n    /**\n     * Set specified unit to new given value.\n     *\n     * @param string $unit  year, month, day, hour, minute, second or microsecond\n     * @param int    $value new value for given unit\n     *\n     * @return static\n     */\n    public function setUnit($unit, $value = null);\n\n    /**\n     * Set any unit to a new value without overflowing current other unit given.\n     *\n     * @param string $valueUnit    unit name to modify\n     * @param int    $value        new value for the input unit\n     * @param string $overflowUnit unit name to not overflow\n     *\n     * @return static\n     */\n    public function setUnitNoOverflow($valueUnit, $value, $overflowUnit);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use UTF-8 language packages on every machine.\n     *\n     * Set if UTF8 will be used for localized date/time.\n     *\n     * @param bool $utf8\n     */\n    public static function setUtf8($utf8);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             Use $weekStartsAt optional parameter instead when using startOfWeek, floorWeek, ceilWeek\n     *             or roundWeek method. You can also use the 'first_day_of_week' locale setting to change the\n     *             start of week according to current locale selected and implicitly the end of week.\n     *\n     * Set the last day of week\n     *\n     * @param int|string $day week end day (or 'auto' to get the day before the first day of week\n     *                        from Carbon::getLocale() culture).\n     *\n     * @return void\n     */\n    public static function setWeekEndsAt($day);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             Use $weekEndsAt optional parameter instead when using endOfWeek method. You can also use the\n     *             'first_day_of_week' locale setting to change the start of week according to current locale\n     *             selected and implicitly the end of week.\n     *\n     * Set the first day of week\n     *\n     * @param int|string $day week start day (or 'auto' to get the first day of week from Carbon::getLocale() culture).\n     *\n     * @return void\n     */\n    public static function setWeekStartsAt($day);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather consider week-end is always saturday and sunday, and if you have some custom\n     *             week-end days to handle, give to those days an other name and create a macro for them:\n     *\n     *             ```\n     *             Carbon::macro('isDayOff', function ($date) {\n     *                 return $date->isSunday() || $date->isMonday();\n     *             });\n     *             Carbon::macro('isNotDayOff', function ($date) {\n     *                 return !$date->isDayOff();\n     *             });\n     *             if ($someDate->isDayOff()) ...\n     *             if ($someDate->isNotDayOff()) ...\n     *             // Add 5 not-off days\n     *             $count = 5;\n     *             while ($someDate->isDayOff() || ($count-- > 0)) {\n     *                 $someDate->addDay();\n     *             }\n     *             ```\n     *\n     * Set weekend days\n     *\n     * @param array $days\n     *\n     * @return void\n     */\n    public static function setWeekendDays($days);\n\n    /**\n     * Set specific options.\n     *  - strictMode: true|false|null\n     *  - monthOverflow: true|false|null\n     *  - yearOverflow: true|false|null\n     *  - humanDiffOptions: int|null\n     *  - toStringFormat: string|Closure|null\n     *  - toJsonFormat: string|Closure|null\n     *  - locale: string|null\n     *  - timezone: \\DateTimeZone|string|int|null\n     *  - macros: array|null\n     *  - genericMacros: array|null\n     *\n     * @param array $settings\n     *\n     * @return $this|static\n     */\n    public function settings(array $settings);\n\n    /**\n     * Set the instance's timezone from a string or object and add/subtract the offset difference.\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static\n     */\n    public function shiftTimezone($value);\n\n    /**\n     * Get the month overflow global behavior (can be overridden in specific instances).\n     *\n     * @return bool\n     */\n    public static function shouldOverflowMonths();\n\n    /**\n     * Get the month overflow global behavior (can be overridden in specific instances).\n     *\n     * @return bool\n     */\n    public static function shouldOverflowYears();\n\n    /**\n     * @alias diffForHumans\n     *\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     */\n    public function since($other = null, $syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Returns standardized singular of a given singular/plural unit name (in English).\n     *\n     * @param string $unit\n     *\n     * @return string\n     */\n    public static function singularUnit(string $unit): string;\n\n    /**\n     * Modify to start of current given unit.\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->startOf('month')\n     *   ->endOf('week', Carbon::FRIDAY);\n     * ```\n     *\n     * @param string            $unit\n     * @param array<int, mixed> $params\n     *\n     * @return static\n     */\n    public function startOf($unit, ...$params);\n\n    /**\n     * Resets the date to the first day of the century and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfCentury();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfCentury();\n\n    /**\n     * Resets the time to 00:00:00 start of day\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfDay();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfDay();\n\n    /**\n     * Resets the date to the first day of the decade and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfDecade();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfDecade();\n\n    /**\n     * Modify to start of current hour, minutes and seconds become 0\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfHour();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfHour();\n\n    /**\n     * Resets the date to the first day of the millennium and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfMillennium();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfMillennium();\n\n    /**\n     * Modify to start of current minute, seconds become 0\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfMinute();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfMinute();\n\n    /**\n     * Resets the date to the first day of the month and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfMonth();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfMonth();\n\n    /**\n     * Resets the date to the first day of the quarter and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfQuarter();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfQuarter();\n\n    /**\n     * Modify to start of current second, microseconds become 0\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->startOfSecond()\n     *   ->format('H:i:s.u');\n     * ```\n     *\n     * @return static\n     */\n    public function startOfSecond();\n\n    /**\n     * Resets the date to the first day of week (defined in $weekStartsAt) and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->locale('ar')->startOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfWeek(Carbon::SUNDAY) . \"\\n\";\n     * ```\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return static\n     */\n    public function startOfWeek($weekStartsAt = null);\n\n    /**\n     * Resets the date to the first day of the year and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfYear();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfYear();\n\n    /**\n     * Subtract given units or interval to the current instance.\n     *\n     * @example $date->sub('hour', 3)\n     * @example $date->sub(15, 'days')\n     * @example $date->sub(CarbonInterval::days(4))\n     *\n     * @param string|DateInterval|Closure|CarbonConverterInterface $unit\n     * @param int                                                  $value\n     * @param bool|null                                            $overflow\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function sub($unit, $value = 1, $overflow = null);\n\n    public function subRealUnit($unit, $value = 1);\n\n    /**\n     * Subtract given units to the current instance.\n     *\n     * @param string    $unit\n     * @param int       $value\n     * @param bool|null $overflow\n     *\n     * @return static\n     */\n    public function subUnit($unit, $value = 1, $overflow = null);\n\n    /**\n     * Subtract any unit to a new value without overflowing current other unit given.\n     *\n     * @param string $valueUnit    unit name to modify\n     * @param int    $value        amount to subtract to the input unit\n     * @param string $overflowUnit unit name to not overflow\n     *\n     * @return static\n     */\n    public function subUnitNoOverflow($valueUnit, $value, $overflowUnit);\n\n    /**\n     * Subtract given units or interval to the current instance.\n     *\n     * @see sub()\n     *\n     * @param string|DateInterval $unit\n     * @param int                 $value\n     * @param bool|null           $overflow\n     *\n     * @return static\n     */\n    public function subtract($unit, $value = 1, $overflow = null);\n\n    /**\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     *\n     * @return string\n     */\n    public function timespan($other = null, $timezone = null);\n\n    /**\n     * Set the instance's timestamp.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $unixTimestamp\n     *\n     * @return static\n     */\n    public function timestamp($unixTimestamp);\n\n    /**\n     * @alias setTimezone\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static\n     */\n    public function timezone($value);\n\n    /**\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given (or now if null given) to current instance.\n     *\n     * When comparing a value in the past to default now:\n     * 1 hour from now\n     * 5 months from now\n     *\n     * When comparing a value in the future to default now:\n     * 1 hour ago\n     * 5 months ago\n     *\n     * When comparing a value in the past to another value:\n     * 1 hour after\n     * 5 months after\n     *\n     * When comparing a value in the future to another value:\n     * 1 hour before\n     * 5 months before\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function to($other = null, $syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Get default array representation.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toArray());\n     * ```\n     *\n     * @return array\n     */\n    public function toArray();\n\n    /**\n     * Format the instance as ATOM\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toAtomString();\n     * ```\n     *\n     * @return string\n     */\n    public function toAtomString();\n\n    /**\n     * Format the instance as COOKIE\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toCookieString();\n     * ```\n     *\n     * @return string\n     */\n    public function toCookieString();\n\n    /**\n     * @alias toDateTime\n     *\n     * Return native DateTime PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toDate());\n     * ```\n     *\n     * @return DateTime\n     */\n    public function toDate();\n\n    /**\n     * Format the instance as date\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDateString();\n     * ```\n     *\n     * @return string\n     */\n    public function toDateString();\n\n    /**\n     * Return native DateTime PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toDateTime());\n     * ```\n     *\n     * @return DateTime\n     */\n    public function toDateTime();\n\n    /**\n     * Return native toDateTimeImmutable PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toDateTimeImmutable());\n     * ```\n     *\n     * @return DateTimeImmutable\n     */\n    public function toDateTimeImmutable();\n\n    /**\n     * Format the instance as date and time T-separated with no timezone\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDateTimeLocalString();\n     * echo \"\\n\";\n     * echo Carbon::now()->toDateTimeLocalString('minute'); // You can specify precision among: minute, second, millisecond and microsecond\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toDateTimeLocalString($unitPrecision = 'second');\n\n    /**\n     * Format the instance as date and time\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDateTimeString();\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toDateTimeString($unitPrecision = 'second');\n\n    /**\n     * Format the instance with day, date and time\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDayDateTimeString();\n     * ```\n     *\n     * @return string\n     */\n    public function toDayDateTimeString();\n\n    /**\n     * Format the instance as a readable date\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toFormattedDateString();\n     * ```\n     *\n     * @return string\n     */\n    public function toFormattedDateString();\n\n    /**\n     * Format the instance with the day, and a readable date\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toFormattedDayDateString();\n     * ```\n     *\n     * @return string\n     */\n    public function toFormattedDayDateString(): string;\n\n    /**\n     * Return the ISO-8601 string (ex: 1977-04-22T06:00:00Z, if $keepOffset truthy, offset will be kept:\n     * 1977-04-22T01:00:00-05:00).\n     *\n     * @example\n     * ```\n     * echo Carbon::now('America/Toronto')->toISOString() . \"\\n\";\n     * echo Carbon::now('America/Toronto')->toISOString(true) . \"\\n\";\n     * ```\n     *\n     * @param bool $keepOffset Pass true to keep the date offset. Else forced to UTC.\n     *\n     * @return null|string\n     */\n    public function toISOString($keepOffset = false);\n\n    /**\n     * Return a immutable copy of the instance.\n     *\n     * @return CarbonImmutable\n     */\n    public function toImmutable();\n\n    /**\n     * Format the instance as ISO8601\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toIso8601String();\n     * ```\n     *\n     * @return string\n     */\n    public function toIso8601String();\n\n    /**\n     * Convert the instance to UTC and return as Zulu ISO8601\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toIso8601ZuluString();\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toIso8601ZuluString($unitPrecision = 'second');\n\n    /**\n     * Return the ISO-8601 string (ex: 1977-04-22T06:00:00Z) with UTC timezone.\n     *\n     * @example\n     * ```\n     * echo Carbon::now('America/Toronto')->toJSON();\n     * ```\n     *\n     * @return null|string\n     */\n    public function toJSON();\n\n    /**\n     * Return a mutable copy of the instance.\n     *\n     * @return Carbon\n     */\n    public function toMutable();\n\n    /**\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given to now\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: 1: single part)\n     * @param int       $options human diff options\n     *\n     * @return string\n     */\n    public function toNow($syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * Get default object representation.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toObject());\n     * ```\n     *\n     * @return object\n     */\n    public function toObject();\n\n    /**\n     * Create a iterable CarbonPeriod object from current date to a given end date (and optional interval).\n     *\n     * @param \\DateTimeInterface|Carbon|CarbonImmutable|int|null $end      period end date or recurrences count if int\n     * @param int|\\DateInterval|string|null                      $interval period default interval or number of the given $unit\n     * @param string|null                                        $unit     if specified, $interval must be an integer\n     *\n     * @return CarbonPeriod\n     */\n    public function toPeriod($end = null, $interval = null, $unit = null);\n\n    /**\n     * Format the instance as RFC1036\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc1036String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc1036String();\n\n    /**\n     * Format the instance as RFC1123\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc1123String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc1123String();\n\n    /**\n     * Format the instance as RFC2822\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc2822String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc2822String();\n\n    /**\n     * Format the instance as RFC3339\n     *\n     * @param bool $extended\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc3339String() . \"\\n\";\n     * echo Carbon::now()->toRfc3339String(true) . \"\\n\";\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc3339String($extended = false);\n\n    /**\n     * Format the instance as RFC7231\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc7231String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc7231String();\n\n    /**\n     * Format the instance as RFC822\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc822String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc822String();\n\n    /**\n     * Format the instance as RFC850\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc850String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc850String();\n\n    /**\n     * Format the instance as RSS\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRssString();\n     * ```\n     *\n     * @return string\n     */\n    public function toRssString();\n\n    /**\n     * Returns english human readable complete date string.\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toString();\n     * ```\n     *\n     * @return string\n     */\n    public function toString();\n\n    /**\n     * Format the instance as time\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toTimeString();\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toTimeString($unitPrecision = 'second');\n\n    /**\n     * Format the instance as W3C\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toW3cString();\n     * ```\n     *\n     * @return string\n     */\n    public function toW3cString();\n\n    /**\n     * Create a Carbon instance for today.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function today($tz = null);\n\n    /**\n     * Create a Carbon instance for tomorrow.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function tomorrow($tz = null);\n\n    /**\n     * Translate using translation string or callback available.\n     *\n     * @param string                                                  $key\n     * @param array                                                   $parameters\n     * @param string|int|float|null                                   $number\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface|null $translator\n     * @param bool                                                    $altNumbers\n     *\n     * @return string\n     */\n    public function translate(string $key, array $parameters = [], $number = null, ?TranslatorInterface $translator = null, bool $altNumbers = false): string;\n\n    /**\n     * Returns the alternative number for a given integer if available in the current locale.\n     *\n     * @param int $number\n     *\n     * @return string\n     */\n    public function translateNumber(int $number): string;\n\n    /**\n     * Translate a time string from a locale to an other.\n     *\n     * @param string      $timeString date/time/duration string to translate (may also contain English)\n     * @param string|null $from       input locale of the $timeString parameter (`Carbon::getLocale()` by default)\n     * @param string|null $to         output locale of the result returned (`\"en\"` by default)\n     * @param int         $mode       specify what to translate with options:\n     *                                - self::TRANSLATE_ALL (default)\n     *                                - CarbonInterface::TRANSLATE_MONTHS\n     *                                - CarbonInterface::TRANSLATE_DAYS\n     *                                - CarbonInterface::TRANSLATE_UNITS\n     *                                - CarbonInterface::TRANSLATE_MERIDIEM\n     *                                You can use pipe to group: CarbonInterface::TRANSLATE_MONTHS | CarbonInterface::TRANSLATE_DAYS\n     *\n     * @return string\n     */\n    public static function translateTimeString($timeString, $from = null, $to = null, $mode = self::TRANSLATE_ALL);\n\n    /**\n     * Translate a time string from the current locale (`$date->locale()`) to an other.\n     *\n     * @param string      $timeString time string to translate\n     * @param string|null $to         output locale of the result returned (\"en\" by default)\n     *\n     * @return string\n     */\n    public function translateTimeStringTo($timeString, $to = null);\n\n    /**\n     * Translate using translation string or callback available.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator\n     * @param string                                             $key\n     * @param array                                              $parameters\n     * @param null                                               $number\n     *\n     * @return string\n     */\n    public static function translateWith(TranslatorInterface $translator, string $key, array $parameters = [], $number = null): string;\n\n    /**\n     * Format as ->format() do (using date replacements patterns from https://php.net/manual/en/function.date.php)\n     * but translate words whenever possible (months, day names, etc.) using the current locale.\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    public function translatedFormat(string $format): string;\n\n    /**\n     * Set the timezone or returns the timezone name if no arguments passed.\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static|string\n     */\n    public function tz($value = null);\n\n    /**\n     * @alias getTimestamp\n     *\n     * Returns the UNIX timestamp for the current date.\n     *\n     * @return int\n     */\n    public function unix();\n\n    /**\n     * @alias to\n     *\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given (or now if null given) to current instance.\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function until($other = null, $syntax = null, $short = false, $parts = 1, $options = null);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Indicates if months should be calculated with overflow.\n     *\n     * @param bool $monthsOverflow\n     *\n     * @return void\n     */\n    public static function useMonthsOverflow($monthsOverflow = true);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * Enable the strict mode (or disable with passing false).\n     *\n     * @param bool $strictModeEnabled\n     */\n    public static function useStrictMode($strictModeEnabled = true);\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Indicates if years should be calculated with overflow.\n     *\n     * @param bool $yearsOverflow\n     *\n     * @return void\n     */\n    public static function useYearsOverflow($yearsOverflow = true);\n\n    /**\n     * Set the instance's timezone to UTC.\n     *\n     * @return static\n     */\n    public function utc();\n\n    /**\n     * Returns the minutes offset to UTC if no arguments passed, else set the timezone with given minutes shift passed.\n     *\n     * @param int|null $minuteOffset\n     *\n     * @return int|static\n     */\n    public function utcOffset(?int $minuteOffset = null);\n\n    /**\n     * Returns the milliseconds timestamps used amongst other by Date javascript objects.\n     *\n     * @return float\n     */\n    public function valueOf();\n\n    /**\n     * Get/set the week number using given first day of week and first\n     * day of year included in the first week. Or use US format if no settings\n     * given (Sunday / Jan 6).\n     *\n     * @param int|null $week\n     * @param int|null $dayOfWeek\n     * @param int|null $dayOfYear\n     *\n     * @return int|static\n     */\n    public function week($week = null, $dayOfWeek = null, $dayOfYear = null);\n\n    /**\n     * Set/get the week number of year using given first day of week and first\n     * day of year included in the first week. Or use US format if no settings\n     * given (Sunday / Jan 6).\n     *\n     * @param int|null $year      if null, act as a getter, if not null, set the year and return current instance.\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int|static\n     */\n    public function weekYear($year = null, $dayOfWeek = null, $dayOfYear = null);\n\n    /**\n     * Get/set the weekday from 0 (Sunday) to 6 (Saturday).\n     *\n     * @param int|null $value new value for weekday if using as setter.\n     *\n     * @return static|int\n     */\n    public function weekday($value = null);\n\n    /**\n     * Get the number of weeks of the current week-year using given first day of week and first\n     * day of year included in the first week. Or use US format if no settings\n     * given (Sunday / Jan 6).\n     *\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int\n     */\n    public function weeksInYear($dayOfWeek = null, $dayOfYear = null);\n\n    /**\n     * Temporarily sets a static date to be used within the callback.\n     * Using setTestNow to set the date, executing the callback, then\n     * clearing the test instance.\n     *\n     * /!\\ Use this method for unit tests only.\n     *\n     * @template T\n     *\n     * @param DateTimeInterface|Closure|static|string|false|null $testNow  real or mock Carbon instance\n     * @param Closure(): T                                       $callback\n     *\n     * @return T\n     */\n    public static function withTestNow($testNow, $callback);\n\n    /**\n     * Create a Carbon instance for yesterday.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function yesterday($tz = null);\n\n    // </methods>\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\Exceptions\\BadFluentConstructorException;\nuse Carbon\\Exceptions\\BadFluentSetterException;\nuse Carbon\\Exceptions\\InvalidCastException;\nuse Carbon\\Exceptions\\InvalidIntervalException;\nuse Carbon\\Exceptions\\OutOfRangeException;\nuse Carbon\\Exceptions\\ParseErrorException;\nuse Carbon\\Exceptions\\UnitNotConfiguredException;\nuse Carbon\\Exceptions\\UnknownGetterException;\nuse Carbon\\Exceptions\\UnknownSetterException;\nuse Carbon\\Exceptions\\UnknownUnitException;\nuse Carbon\\Traits\\IntervalRounding;\nuse Carbon\\Traits\\IntervalStep;\nuse Carbon\\Traits\\MagicParameter;\nuse Carbon\\Traits\\Mixin;\nuse Carbon\\Traits\\Options;\nuse Carbon\\Traits\\ToStringFormat;\nuse Closure;\nuse DateInterval;\nuse DateMalformedIntervalStringException;\nuse DateTimeInterface;\nuse DateTimeZone;\nuse Exception;\nuse InvalidArgumentException;\nuse ReflectionException;\nuse ReturnTypeWillChange;\nuse RuntimeException;\nuse Throwable;\n\n/**\n * A simple API extension for DateInterval.\n * The implementation provides helpers to handle weeks but only days are saved.\n * Weeks are calculated based on the total days of the current instance.\n *\n * @property int $years Total years of the current interval.\n * @property int $months Total months of the current interval.\n * @property int $weeks Total weeks of the current interval calculated from the days.\n * @property int $dayz Total days of the current interval (weeks * 7 + days).\n * @property int $hours Total hours of the current interval.\n * @property int $minutes Total minutes of the current interval.\n * @property int $seconds Total seconds of the current interval.\n * @property int $microseconds Total microseconds of the current interval.\n * @property int $milliseconds Total milliseconds of the current interval.\n * @property int $microExcludeMilli Remaining microseconds without the milliseconds.\n * @property int $dayzExcludeWeeks Total days remaining in the final week of the current instance (days % 7).\n * @property int $daysExcludeWeeks alias of dayzExcludeWeeks\n * @property-read float $totalYears Number of years equivalent to the interval.\n * @property-read float $totalMonths Number of months equivalent to the interval.\n * @property-read float $totalWeeks Number of weeks equivalent to the interval.\n * @property-read float $totalDays Number of days equivalent to the interval.\n * @property-read float $totalDayz Alias for totalDays.\n * @property-read float $totalHours Number of hours equivalent to the interval.\n * @property-read float $totalMinutes Number of minutes equivalent to the interval.\n * @property-read float $totalSeconds Number of seconds equivalent to the interval.\n * @property-read float $totalMilliseconds Number of milliseconds equivalent to the interval.\n * @property-read float $totalMicroseconds Number of microseconds equivalent to the interval.\n * @property-read string $locale locale of the current instance\n *\n * @method static CarbonInterval years($years = 1) Create instance specifying a number of years or modify the number of years if called on an instance.\n * @method static CarbonInterval year($years = 1) Alias for years()\n * @method static CarbonInterval months($months = 1) Create instance specifying a number of months or modify the number of months if called on an instance.\n * @method static CarbonInterval month($months = 1) Alias for months()\n * @method static CarbonInterval weeks($weeks = 1) Create instance specifying a number of weeks or modify the number of weeks if called on an instance.\n * @method static CarbonInterval week($weeks = 1) Alias for weeks()\n * @method static CarbonInterval days($days = 1) Create instance specifying a number of days or modify the number of days if called on an instance.\n * @method static CarbonInterval dayz($days = 1) Alias for days()\n * @method static CarbonInterval daysExcludeWeeks($days = 1) Create instance specifying a number of days or modify the number of days (keeping the current number of weeks) if called on an instance.\n * @method static CarbonInterval dayzExcludeWeeks($days = 1) Alias for daysExcludeWeeks()\n * @method static CarbonInterval day($days = 1) Alias for days()\n * @method static CarbonInterval hours($hours = 1) Create instance specifying a number of hours or modify the number of hours if called on an instance.\n * @method static CarbonInterval hour($hours = 1) Alias for hours()\n * @method static CarbonInterval minutes($minutes = 1) Create instance specifying a number of minutes or modify the number of minutes if called on an instance.\n * @method static CarbonInterval minute($minutes = 1) Alias for minutes()\n * @method static CarbonInterval seconds($seconds = 1) Create instance specifying a number of seconds or modify the number of seconds if called on an instance.\n * @method static CarbonInterval second($seconds = 1) Alias for seconds()\n * @method static CarbonInterval milliseconds($milliseconds = 1) Create instance specifying a number of milliseconds or modify the number of milliseconds if called on an instance.\n * @method static CarbonInterval millisecond($milliseconds = 1) Alias for milliseconds()\n * @method static CarbonInterval microseconds($microseconds = 1) Create instance specifying a number of microseconds or modify the number of microseconds if called on an instance.\n * @method static CarbonInterval microsecond($microseconds = 1) Alias for microseconds()\n * @method $this addYears(int $years) Add given number of years to the current interval\n * @method $this subYears(int $years) Subtract given number of years to the current interval\n * @method $this addMonths(int $months) Add given number of months to the current interval\n * @method $this subMonths(int $months) Subtract given number of months to the current interval\n * @method $this addWeeks(int|float $weeks) Add given number of weeks to the current interval\n * @method $this subWeeks(int|float $weeks) Subtract given number of weeks to the current interval\n * @method $this addDays(int|float $days) Add given number of days to the current interval\n * @method $this subDays(int|float $days) Subtract given number of days to the current interval\n * @method $this addHours(int|float $hours) Add given number of hours to the current interval\n * @method $this subHours(int|float $hours) Subtract given number of hours to the current interval\n * @method $this addMinutes(int|float $minutes) Add given number of minutes to the current interval\n * @method $this subMinutes(int|float $minutes) Subtract given number of minutes to the current interval\n * @method $this addSeconds(int|float $seconds) Add given number of seconds to the current interval\n * @method $this subSeconds(int|float $seconds) Subtract given number of seconds to the current interval\n * @method $this addMilliseconds(int|float $milliseconds) Add given number of milliseconds to the current interval\n * @method $this subMilliseconds(int|float $milliseconds) Subtract given number of milliseconds to the current interval\n * @method $this addMicroseconds(int|float $microseconds) Add given number of microseconds to the current interval\n * @method $this subMicroseconds(int|float $microseconds) Subtract given number of microseconds to the current interval\n * @method $this roundYear(int|float $precision = 1, string $function = \"round\") Round the current instance year with given precision using the given function.\n * @method $this roundYears(int|float $precision = 1, string $function = \"round\") Round the current instance year with given precision using the given function.\n * @method $this floorYear(int|float $precision = 1) Truncate the current instance year with given precision.\n * @method $this floorYears(int|float $precision = 1) Truncate the current instance year with given precision.\n * @method $this ceilYear(int|float $precision = 1) Ceil the current instance year with given precision.\n * @method $this ceilYears(int|float $precision = 1) Ceil the current instance year with given precision.\n * @method $this roundMonth(int|float $precision = 1, string $function = \"round\") Round the current instance month with given precision using the given function.\n * @method $this roundMonths(int|float $precision = 1, string $function = \"round\") Round the current instance month with given precision using the given function.\n * @method $this floorMonth(int|float $precision = 1) Truncate the current instance month with given precision.\n * @method $this floorMonths(int|float $precision = 1) Truncate the current instance month with given precision.\n * @method $this ceilMonth(int|float $precision = 1) Ceil the current instance month with given precision.\n * @method $this ceilMonths(int|float $precision = 1) Ceil the current instance month with given precision.\n * @method $this roundWeek(int|float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this roundWeeks(int|float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this floorWeek(int|float $precision = 1) Truncate the current instance day with given precision.\n * @method $this floorWeeks(int|float $precision = 1) Truncate the current instance day with given precision.\n * @method $this ceilWeek(int|float $precision = 1) Ceil the current instance day with given precision.\n * @method $this ceilWeeks(int|float $precision = 1) Ceil the current instance day with given precision.\n * @method $this roundDay(int|float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this roundDays(int|float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this floorDay(int|float $precision = 1) Truncate the current instance day with given precision.\n * @method $this floorDays(int|float $precision = 1) Truncate the current instance day with given precision.\n * @method $this ceilDay(int|float $precision = 1) Ceil the current instance day with given precision.\n * @method $this ceilDays(int|float $precision = 1) Ceil the current instance day with given precision.\n * @method $this roundHour(int|float $precision = 1, string $function = \"round\") Round the current instance hour with given precision using the given function.\n * @method $this roundHours(int|float $precision = 1, string $function = \"round\") Round the current instance hour with given precision using the given function.\n * @method $this floorHour(int|float $precision = 1) Truncate the current instance hour with given precision.\n * @method $this floorHours(int|float $precision = 1) Truncate the current instance hour with given precision.\n * @method $this ceilHour(int|float $precision = 1) Ceil the current instance hour with given precision.\n * @method $this ceilHours(int|float $precision = 1) Ceil the current instance hour with given precision.\n * @method $this roundMinute(int|float $precision = 1, string $function = \"round\") Round the current instance minute with given precision using the given function.\n * @method $this roundMinutes(int|float $precision = 1, string $function = \"round\") Round the current instance minute with given precision using the given function.\n * @method $this floorMinute(int|float $precision = 1) Truncate the current instance minute with given precision.\n * @method $this floorMinutes(int|float $precision = 1) Truncate the current instance minute with given precision.\n * @method $this ceilMinute(int|float $precision = 1) Ceil the current instance minute with given precision.\n * @method $this ceilMinutes(int|float $precision = 1) Ceil the current instance minute with given precision.\n * @method $this roundSecond(int|float $precision = 1, string $function = \"round\") Round the current instance second with given precision using the given function.\n * @method $this roundSeconds(int|float $precision = 1, string $function = \"round\") Round the current instance second with given precision using the given function.\n * @method $this floorSecond(int|float $precision = 1) Truncate the current instance second with given precision.\n * @method $this floorSeconds(int|float $precision = 1) Truncate the current instance second with given precision.\n * @method $this ceilSecond(int|float $precision = 1) Ceil the current instance second with given precision.\n * @method $this ceilSeconds(int|float $precision = 1) Ceil the current instance second with given precision.\n * @method $this roundMillennium(int|float $precision = 1, string $function = \"round\") Round the current instance millennium with given precision using the given function.\n * @method $this roundMillennia(int|float $precision = 1, string $function = \"round\") Round the current instance millennium with given precision using the given function.\n * @method $this floorMillennium(int|float $precision = 1) Truncate the current instance millennium with given precision.\n * @method $this floorMillennia(int|float $precision = 1) Truncate the current instance millennium with given precision.\n * @method $this ceilMillennium(int|float $precision = 1) Ceil the current instance millennium with given precision.\n * @method $this ceilMillennia(int|float $precision = 1) Ceil the current instance millennium with given precision.\n * @method $this roundCentury(int|float $precision = 1, string $function = \"round\") Round the current instance century with given precision using the given function.\n * @method $this roundCenturies(int|float $precision = 1, string $function = \"round\") Round the current instance century with given precision using the given function.\n * @method $this floorCentury(int|float $precision = 1) Truncate the current instance century with given precision.\n * @method $this floorCenturies(int|float $precision = 1) Truncate the current instance century with given precision.\n * @method $this ceilCentury(int|float $precision = 1) Ceil the current instance century with given precision.\n * @method $this ceilCenturies(int|float $precision = 1) Ceil the current instance century with given precision.\n * @method $this roundDecade(int|float $precision = 1, string $function = \"round\") Round the current instance decade with given precision using the given function.\n * @method $this roundDecades(int|float $precision = 1, string $function = \"round\") Round the current instance decade with given precision using the given function.\n * @method $this floorDecade(int|float $precision = 1) Truncate the current instance decade with given precision.\n * @method $this floorDecades(int|float $precision = 1) Truncate the current instance decade with given precision.\n * @method $this ceilDecade(int|float $precision = 1) Ceil the current instance decade with given precision.\n * @method $this ceilDecades(int|float $precision = 1) Ceil the current instance decade with given precision.\n * @method $this roundQuarter(int|float $precision = 1, string $function = \"round\") Round the current instance quarter with given precision using the given function.\n * @method $this roundQuarters(int|float $precision = 1, string $function = \"round\") Round the current instance quarter with given precision using the given function.\n * @method $this floorQuarter(int|float $precision = 1) Truncate the current instance quarter with given precision.\n * @method $this floorQuarters(int|float $precision = 1) Truncate the current instance quarter with given precision.\n * @method $this ceilQuarter(int|float $precision = 1) Ceil the current instance quarter with given precision.\n * @method $this ceilQuarters(int|float $precision = 1) Ceil the current instance quarter with given precision.\n * @method $this roundMillisecond(int|float $precision = 1, string $function = \"round\") Round the current instance millisecond with given precision using the given function.\n * @method $this roundMilliseconds(int|float $precision = 1, string $function = \"round\") Round the current instance millisecond with given precision using the given function.\n * @method $this floorMillisecond(int|float $precision = 1) Truncate the current instance millisecond with given precision.\n * @method $this floorMilliseconds(int|float $precision = 1) Truncate the current instance millisecond with given precision.\n * @method $this ceilMillisecond(int|float $precision = 1) Ceil the current instance millisecond with given precision.\n * @method $this ceilMilliseconds(int|float $precision = 1) Ceil the current instance millisecond with given precision.\n * @method $this roundMicrosecond(int|float $precision = 1, string $function = \"round\") Round the current instance microsecond with given precision using the given function.\n * @method $this roundMicroseconds(int|float $precision = 1, string $function = \"round\") Round the current instance microsecond with given precision using the given function.\n * @method $this floorMicrosecond(int|float $precision = 1) Truncate the current instance microsecond with given precision.\n * @method $this floorMicroseconds(int|float $precision = 1) Truncate the current instance microsecond with given precision.\n * @method $this ceilMicrosecond(int|float $precision = 1) Ceil the current instance microsecond with given precision.\n * @method $this ceilMicroseconds(int|float $precision = 1) Ceil the current instance microsecond with given precision.\n */\nclass CarbonInterval extends DateInterval implements CarbonConverterInterface\n{\n    use IntervalRounding;\n    use IntervalStep;\n    use MagicParameter;\n    use Mixin {\n        Mixin::mixin as baseMixin;\n    }\n    use Options;\n    use ToStringFormat;\n\n    /**\n     * Interval spec period designators\n     */\n    public const PERIOD_PREFIX = 'P';\n    public const PERIOD_YEARS = 'Y';\n    public const PERIOD_MONTHS = 'M';\n    public const PERIOD_DAYS = 'D';\n    public const PERIOD_TIME_PREFIX = 'T';\n    public const PERIOD_HOURS = 'H';\n    public const PERIOD_MINUTES = 'M';\n    public const PERIOD_SECONDS = 'S';\n\n    /**\n     * A translator to ... er ... translate stuff\n     *\n     * @var \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    protected static $translator;\n\n    /**\n     * @var array|null\n     */\n    protected static $cascadeFactors;\n\n    /**\n     * @var array\n     */\n    protected static $formats = [\n        'y' => 'y',\n        'Y' => 'y',\n        'o' => 'y',\n        'm' => 'm',\n        'n' => 'm',\n        'W' => 'weeks',\n        'd' => 'd',\n        'j' => 'd',\n        'z' => 'd',\n        'h' => 'h',\n        'g' => 'h',\n        'H' => 'h',\n        'G' => 'h',\n        'i' => 'i',\n        's' => 's',\n        'u' => 'micro',\n        'v' => 'milli',\n    ];\n\n    /**\n     * @var array|null\n     */\n    private static $flipCascadeFactors;\n\n    /**\n     * @var bool\n     */\n    private static $floatSettersEnabled = false;\n\n    /**\n     * The registered macros.\n     *\n     * @var array\n     */\n    protected static $macros = [];\n\n    /**\n     * Timezone handler for settings() method.\n     *\n     * @var mixed\n     */\n    protected $tzName;\n\n    /**\n     * Set the instance's timezone from a string or object.\n     *\n     * @param \\DateTimeZone|string $tzName\n     *\n     * @return static\n     */\n    public function setTimezone($tzName)\n    {\n        $this->tzName = $tzName;\n\n        return $this;\n    }\n\n    /**\n     * @internal\n     *\n     * Set the instance's timezone from a string or object and add/subtract the offset difference.\n     *\n     * @param \\DateTimeZone|string $tzName\n     *\n     * @return static\n     */\n    public function shiftTimezone($tzName)\n    {\n        $this->tzName = $tzName;\n\n        return $this;\n    }\n\n    /**\n     * Mapping of units and factors for cascading.\n     *\n     * Should only be modified by changing the factors or referenced constants.\n     *\n     * @return array\n     */\n    public static function getCascadeFactors()\n    {\n        return static::$cascadeFactors ?: static::getDefaultCascadeFactors();\n    }\n\n    protected static function getDefaultCascadeFactors(): array\n    {\n        return [\n            'milliseconds' => [Carbon::MICROSECONDS_PER_MILLISECOND, 'microseconds'],\n            'seconds' => [Carbon::MILLISECONDS_PER_SECOND, 'milliseconds'],\n            'minutes' => [Carbon::SECONDS_PER_MINUTE, 'seconds'],\n            'hours' => [Carbon::MINUTES_PER_HOUR, 'minutes'],\n            'dayz' => [Carbon::HOURS_PER_DAY, 'hours'],\n            'weeks' => [Carbon::DAYS_PER_WEEK, 'dayz'],\n            'months' => [Carbon::WEEKS_PER_MONTH, 'weeks'],\n            'years' => [Carbon::MONTHS_PER_YEAR, 'months'],\n        ];\n    }\n\n    private static function standardizeUnit($unit)\n    {\n        $unit = rtrim($unit, 'sz').'s';\n\n        return $unit === 'days' ? 'dayz' : $unit;\n    }\n\n    private static function getFlipCascadeFactors()\n    {\n        if (!self::$flipCascadeFactors) {\n            self::$flipCascadeFactors = [];\n\n            foreach (static::getCascadeFactors() as $to => [$factor, $from]) {\n                self::$flipCascadeFactors[self::standardizeUnit($from)] = [self::standardizeUnit($to), $factor];\n            }\n        }\n\n        return self::$flipCascadeFactors;\n    }\n\n    /**\n     * Set default cascading factors for ->cascade() method.\n     *\n     * @param array $cascadeFactors\n     */\n    public static function setCascadeFactors(array $cascadeFactors)\n    {\n        self::$flipCascadeFactors = null;\n        static::$cascadeFactors = $cascadeFactors;\n    }\n\n    /**\n     * This option allow you to opt-in for the Carbon 3 behavior where float\n     * values will no longer be cast to integer (so truncated).\n     *\n     * ⚠️ This settings will be applied globally, which mean your whole application\n     * code including the third-party dependencies that also may use Carbon will\n     * adopt the new behavior.\n     */\n    public static function enableFloatSetters(bool $floatSettersEnabled = true): void\n    {\n        self::$floatSettersEnabled = $floatSettersEnabled;\n    }\n\n    ///////////////////////////////////////////////////////////////////\n    //////////////////////////// CONSTRUCTORS /////////////////////////\n    ///////////////////////////////////////////////////////////////////\n\n    /**\n     * Create a new CarbonInterval instance.\n     *\n     * @param Closure|DateInterval|string|int|null $years\n     * @param int|float|null                       $months\n     * @param int|float|null                       $weeks\n     * @param int|float|null                       $days\n     * @param int|float|null                       $hours\n     * @param int|float|null                       $minutes\n     * @param int|float|null                       $seconds\n     * @param int|float|null                       $microseconds\n     *\n     * @throws Exception when the interval_spec (passed as $years) cannot be parsed as an interval.\n     */\n    public function __construct($years = 1, $months = null, $weeks = null, $days = null, $hours = null, $minutes = null, $seconds = null, $microseconds = null)\n    {\n        if ($years instanceof Closure) {\n            $this->step = $years;\n            $years = null;\n        }\n\n        if ($years instanceof DateInterval) {\n            parent::__construct(static::getDateIntervalSpec($years));\n            $this->f = $years->f;\n            self::copyNegativeUnits($years, $this);\n\n            return;\n        }\n\n        $spec = $years;\n        $isStringSpec = (\\is_string($spec) && !preg_match('/^[\\d.]/', $spec));\n\n        if (!$isStringSpec || (float) $years) {\n            $spec = static::PERIOD_PREFIX;\n\n            $spec .= $years > 0 ? $years.static::PERIOD_YEARS : '';\n            $spec .= $months > 0 ? $months.static::PERIOD_MONTHS : '';\n\n            $specDays = 0;\n            $specDays += $weeks > 0 ? $weeks * static::getDaysPerWeek() : 0;\n            $specDays += $days > 0 ? $days : 0;\n\n            $spec .= $specDays > 0 ? $specDays.static::PERIOD_DAYS : '';\n\n            if ($hours > 0 || $minutes > 0 || $seconds > 0) {\n                $spec .= static::PERIOD_TIME_PREFIX;\n                $spec .= $hours > 0 ? $hours.static::PERIOD_HOURS : '';\n                $spec .= $minutes > 0 ? $minutes.static::PERIOD_MINUTES : '';\n                $spec .= $seconds > 0 ? $seconds.static::PERIOD_SECONDS : '';\n            }\n\n            if ($spec === static::PERIOD_PREFIX) {\n                // Allow the zero interval.\n                $spec .= '0'.static::PERIOD_YEARS;\n            }\n        }\n\n        try {\n            parent::__construct($spec);\n        } catch (Throwable $exception) {\n            try {\n                parent::__construct('PT0S');\n\n                if ($isStringSpec) {\n                    if (!preg_match('/^P\n                        (?:(?<year>[+-]?\\d*(?:\\.\\d+)?)Y)?\n                        (?:(?<month>[+-]?\\d*(?:\\.\\d+)?)M)?\n                        (?:(?<week>[+-]?\\d*(?:\\.\\d+)?)W)?\n                        (?:(?<day>[+-]?\\d*(?:\\.\\d+)?)D)?\n                        (?:T\n                            (?:(?<hour>[+-]?\\d*(?:\\.\\d+)?)H)?\n                            (?:(?<minute>[+-]?\\d*(?:\\.\\d+)?)M)?\n                            (?:(?<second>[+-]?\\d*(?:\\.\\d+)?)S)?\n                        )?\n                    $/x', $spec, $match)) {\n                        throw new InvalidArgumentException(\"Invalid duration: $spec\");\n                    }\n\n                    $years = (float) ($match['year'] ?? 0);\n                    $this->assertSafeForInteger('year', $years);\n                    $months = (float) ($match['month'] ?? 0);\n                    $this->assertSafeForInteger('month', $months);\n                    $weeks = (float) ($match['week'] ?? 0);\n                    $this->assertSafeForInteger('week', $weeks);\n                    $days = (float) ($match['day'] ?? 0);\n                    $this->assertSafeForInteger('day', $days);\n                    $hours = (float) ($match['hour'] ?? 0);\n                    $this->assertSafeForInteger('hour', $hours);\n                    $minutes = (float) ($match['minute'] ?? 0);\n                    $this->assertSafeForInteger('minute', $minutes);\n                    $seconds = (float) ($match['second'] ?? 0);\n                    $this->assertSafeForInteger('second', $seconds);\n                }\n\n                $totalDays = (($weeks * static::getDaysPerWeek()) + $days);\n                $this->assertSafeForInteger('days total (including weeks)', $totalDays);\n\n                $this->y = (int) $years;\n                $this->m = (int) $months;\n                $this->d = (int) $totalDays;\n                $this->h = (int) $hours;\n                $this->i = (int) $minutes;\n                $this->s = (int) $seconds;\n\n                if (\n                    ((float) $this->y) !== $years ||\n                    ((float) $this->m) !== $months ||\n                    ((float) $this->d) !== $totalDays ||\n                    ((float) $this->h) !== $hours ||\n                    ((float) $this->i) !== $minutes ||\n                    ((float) $this->s) !== $seconds\n                ) {\n                    $this->add(static::fromString(\n                        ($years - $this->y).' years '.\n                        ($months - $this->m).' months '.\n                        ($totalDays - $this->d).' days '.\n                        ($hours - $this->h).' hours '.\n                        ($minutes - $this->i).' minutes '.\n                        ($seconds - $this->s).' seconds '\n                    ));\n                }\n            } catch (Throwable $secondException) {\n                throw $secondException instanceof OutOfRangeException ? $secondException : $exception;\n            }\n        }\n\n        if ($microseconds !== null) {\n            $this->f = $microseconds / Carbon::MICROSECONDS_PER_SECOND;\n        }\n    }\n\n    /**\n     * Returns the factor for a given source-to-target couple.\n     *\n     * @param string $source\n     * @param string $target\n     *\n     * @return int|float|null\n     */\n    public static function getFactor($source, $target)\n    {\n        $source = self::standardizeUnit($source);\n        $target = self::standardizeUnit($target);\n        $factors = self::getFlipCascadeFactors();\n\n        if (isset($factors[$source])) {\n            [$to, $factor] = $factors[$source];\n\n            if ($to === $target) {\n                return $factor;\n            }\n\n            return $factor * static::getFactor($to, $target);\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns the factor for a given source-to-target couple if set,\n     * else try to find the appropriate constant as the factor, such as Carbon::DAYS_PER_WEEK.\n     *\n     * @param string $source\n     * @param string $target\n     *\n     * @return int|float|null\n     */\n    public static function getFactorWithDefault($source, $target)\n    {\n        $factor = self::getFactor($source, $target);\n\n        if ($factor) {\n            return $factor;\n        }\n\n        static $defaults = [\n            'month' => ['year' => Carbon::MONTHS_PER_YEAR],\n            'week' => ['month' => Carbon::WEEKS_PER_MONTH],\n            'day' => ['week' => Carbon::DAYS_PER_WEEK],\n            'hour' => ['day' => Carbon::HOURS_PER_DAY],\n            'minute' => ['hour' => Carbon::MINUTES_PER_HOUR],\n            'second' => ['minute' => Carbon::SECONDS_PER_MINUTE],\n            'millisecond' => ['second' => Carbon::MILLISECONDS_PER_SECOND],\n            'microsecond' => ['millisecond' => Carbon::MICROSECONDS_PER_MILLISECOND],\n        ];\n\n        return $defaults[$source][$target] ?? null;\n    }\n\n    /**\n     * Returns current config for days per week.\n     *\n     * @return int|float\n     */\n    public static function getDaysPerWeek()\n    {\n        return static::getFactor('dayz', 'weeks') ?: Carbon::DAYS_PER_WEEK;\n    }\n\n    /**\n     * Returns current config for hours per day.\n     *\n     * @return int|float\n     */\n    public static function getHoursPerDay()\n    {\n        return static::getFactor('hours', 'dayz') ?: Carbon::HOURS_PER_DAY;\n    }\n\n    /**\n     * Returns current config for minutes per hour.\n     *\n     * @return int|float\n     */\n    public static function getMinutesPerHour()\n    {\n        return static::getFactor('minutes', 'hours') ?: Carbon::MINUTES_PER_HOUR;\n    }\n\n    /**\n     * Returns current config for seconds per minute.\n     *\n     * @return int|float\n     */\n    public static function getSecondsPerMinute()\n    {\n        return static::getFactor('seconds', 'minutes') ?: Carbon::SECONDS_PER_MINUTE;\n    }\n\n    /**\n     * Returns current config for microseconds per second.\n     *\n     * @return int|float\n     */\n    public static function getMillisecondsPerSecond()\n    {\n        return static::getFactor('milliseconds', 'seconds') ?: Carbon::MILLISECONDS_PER_SECOND;\n    }\n\n    /**\n     * Returns current config for microseconds per second.\n     *\n     * @return int|float\n     */\n    public static function getMicrosecondsPerMillisecond()\n    {\n        return static::getFactor('microseconds', 'milliseconds') ?: Carbon::MICROSECONDS_PER_MILLISECOND;\n    }\n\n    /**\n     * Create a new CarbonInterval instance from specific values.\n     * This is an alias for the constructor that allows better fluent\n     * syntax as it allows you to do CarbonInterval::create(1)->fn() rather than\n     * (new CarbonInterval(1))->fn().\n     *\n     * @param int $years\n     * @param int $months\n     * @param int $weeks\n     * @param int $days\n     * @param int $hours\n     * @param int $minutes\n     * @param int $seconds\n     * @param int $microseconds\n     *\n     * @throws Exception when the interval_spec (passed as $years) cannot be parsed as an interval.\n     *\n     * @return static\n     */\n    public static function create($years = 1, $months = null, $weeks = null, $days = null, $hours = null, $minutes = null, $seconds = null, $microseconds = null)\n    {\n        return new static($years, $months, $weeks, $days, $hours, $minutes, $seconds, $microseconds);\n    }\n\n    /**\n     * Parse a string into a new CarbonInterval object according to the specified format.\n     *\n     * @example\n     * ```\n     * echo Carboninterval::createFromFormat('H:i', '1:30');\n     * ```\n     *\n     * @param string      $format   Format of the $interval input string\n     * @param string|null $interval Input string to convert into an interval\n     *\n     * @throws \\Carbon\\Exceptions\\ParseErrorException when the $interval cannot be parsed as an interval.\n     *\n     * @return static\n     */\n    public static function createFromFormat(string $format, ?string $interval)\n    {\n        $instance = new static(0);\n        $length = mb_strlen($format);\n\n        if (preg_match('/s([,.])([uv])$/', $format, $match)) {\n            $interval = explode($match[1], $interval);\n            $index = \\count($interval) - 1;\n            $interval[$index] = str_pad($interval[$index], $match[2] === 'v' ? 3 : 6, '0');\n            $interval = implode($match[1], $interval);\n        }\n\n        $interval = $interval ?? '';\n\n        for ($index = 0; $index < $length; $index++) {\n            $expected = mb_substr($format, $index, 1);\n            $nextCharacter = mb_substr($interval, 0, 1);\n            $unit = static::$formats[$expected] ?? null;\n\n            if ($unit) {\n                if (!preg_match('/^-?\\d+/', $interval, $match)) {\n                    throw new ParseErrorException('number', $nextCharacter);\n                }\n\n                $interval = mb_substr($interval, mb_strlen($match[0]));\n                $instance->$unit += (int) ($match[0]);\n\n                continue;\n            }\n\n            if ($nextCharacter !== $expected) {\n                throw new ParseErrorException(\n                    \"'$expected'\",\n                    $nextCharacter,\n                    'Allowed substitutes for interval formats are '.implode(', ', array_keys(static::$formats)).\"\\n\".\n                    'See https://php.net/manual/en/function.date.php for their meaning'\n                );\n            }\n\n            $interval = mb_substr($interval, 1);\n        }\n\n        if ($interval !== '') {\n            throw new ParseErrorException(\n                'end of string',\n                $interval\n            );\n        }\n\n        return $instance;\n    }\n\n    /**\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function copy()\n    {\n        $date = new static(0);\n        $date->copyProperties($this);\n        $date->step = $this->step;\n\n        return $date;\n    }\n\n    /**\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function clone()\n    {\n        return $this->copy();\n    }\n\n    /**\n     * Provide static helpers to create instances.  Allows CarbonInterval::years(3).\n     *\n     * Note: This is done using the magic method to allow static and instance methods to\n     *       have the same names.\n     *\n     * @param string $method     magic method name called\n     * @param array  $parameters parameters list\n     *\n     * @return static|null\n     */\n    public static function __callStatic($method, $parameters)\n    {\n        try {\n            $interval = new static(0);\n            $localStrictModeEnabled = $interval->localStrictModeEnabled;\n            $interval->localStrictModeEnabled = true;\n\n            $result = static::hasMacro($method)\n                ? static::bindMacroContext(null, function () use (&$method, &$parameters, &$interval) {\n                    return $interval->callMacro($method, $parameters);\n                })\n                : $interval->$method(...$parameters);\n\n            $interval->localStrictModeEnabled = $localStrictModeEnabled;\n\n            return $result;\n        } catch (BadFluentSetterException $exception) {\n            if (Carbon::isStrictModeEnabled()) {\n                throw new BadFluentConstructorException($method, 0, $exception);\n            }\n\n            return null;\n        }\n    }\n\n    /**\n     * Evaluate the PHP generated by var_export() and recreate the exported CarbonInterval instance.\n     *\n     * @param array $dump data as exported by var_export()\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public static function __set_state($dump)\n    {\n        /** @noinspection PhpVoidFunctionResultUsedInspection */\n        /** @var DateInterval $dateInterval */\n        $dateInterval = parent::__set_state($dump);\n\n        return static::instance($dateInterval);\n    }\n\n    /**\n     * Return the current context from inside a macro callee or a new one if static.\n     *\n     * @return static\n     */\n    protected static function this()\n    {\n        return end(static::$macroContextStack) ?: new static(0);\n    }\n\n    /**\n     * Creates a CarbonInterval from string.\n     *\n     * Format:\n     *\n     * Suffix | Unit    | Example | DateInterval expression\n     * -------|---------|---------|------------------------\n     * y      | years   |   1y    | P1Y\n     * mo     | months  |   3mo   | P3M\n     * w      | weeks   |   2w    | P2W\n     * d      | days    |  28d    | P28D\n     * h      | hours   |   4h    | PT4H\n     * m      | minutes |  12m    | PT12M\n     * s      | seconds |  59s    | PT59S\n     *\n     * e. g. `1w 3d 4h 32m 23s` is converted to 10 days 4 hours 32 minutes and 23 seconds.\n     *\n     * Special cases:\n     *  - An empty string will return a zero interval\n     *  - Fractions are allowed for weeks, days, hours and minutes and will be converted\n     *    and rounded to the next smaller value (caution: 0.5w = 4d)\n     *\n     * @param string $intervalDefinition\n     *\n     * @return static\n     */\n    public static function fromString($intervalDefinition)\n    {\n        if (empty($intervalDefinition)) {\n            return new static(0);\n        }\n\n        $years = 0;\n        $months = 0;\n        $weeks = 0;\n        $days = 0;\n        $hours = 0;\n        $minutes = 0;\n        $seconds = 0;\n        $milliseconds = 0;\n        $microseconds = 0;\n\n        $pattern = '/(\\d+(?:\\.\\d+)?)\\h*([^\\d\\h]*)/i';\n        preg_match_all($pattern, $intervalDefinition, $parts, PREG_SET_ORDER);\n\n        while ([$part, $value, $unit] = array_shift($parts)) {\n            $intValue = (int) $value;\n            $fraction = (float) $value - $intValue;\n\n            // Fix calculation precision\n            switch (round($fraction, 6)) {\n                case 1:\n                    $fraction = 0;\n                    $intValue++;\n\n                    break;\n                case 0:\n                    $fraction = 0;\n\n                    break;\n            }\n\n            switch ($unit === 'µs' ? 'µs' : strtolower($unit)) {\n                case 'millennia':\n                case 'millennium':\n                    $years += $intValue * CarbonInterface::YEARS_PER_MILLENNIUM;\n\n                    break;\n\n                case 'century':\n                case 'centuries':\n                    $years += $intValue * CarbonInterface::YEARS_PER_CENTURY;\n\n                    break;\n\n                case 'decade':\n                case 'decades':\n                    $years += $intValue * CarbonInterface::YEARS_PER_DECADE;\n\n                    break;\n\n                case 'year':\n                case 'years':\n                case 'y':\n                case 'yr':\n                case 'yrs':\n                    $years += $intValue;\n\n                    break;\n\n                case 'quarter':\n                case 'quarters':\n                    $months += $intValue * CarbonInterface::MONTHS_PER_QUARTER;\n\n                    break;\n\n                case 'month':\n                case 'months':\n                case 'mo':\n                case 'mos':\n                    $months += $intValue;\n\n                    break;\n\n                case 'week':\n                case 'weeks':\n                case 'w':\n                    $weeks += $intValue;\n\n                    if ($fraction) {\n                        $parts[] = [null, $fraction * static::getDaysPerWeek(), 'd'];\n                    }\n\n                    break;\n\n                case 'day':\n                case 'days':\n                case 'd':\n                    $days += $intValue;\n\n                    if ($fraction) {\n                        $parts[] = [null, $fraction * static::getHoursPerDay(), 'h'];\n                    }\n\n                    break;\n\n                case 'hour':\n                case 'hours':\n                case 'h':\n                    $hours += $intValue;\n\n                    if ($fraction) {\n                        $parts[] = [null, $fraction * static::getMinutesPerHour(), 'm'];\n                    }\n\n                    break;\n\n                case 'minute':\n                case 'minutes':\n                case 'm':\n                    $minutes += $intValue;\n\n                    if ($fraction) {\n                        $parts[] = [null, $fraction * static::getSecondsPerMinute(), 's'];\n                    }\n\n                    break;\n\n                case 'second':\n                case 'seconds':\n                case 's':\n                    $seconds += $intValue;\n\n                    if ($fraction) {\n                        $parts[] = [null, $fraction * static::getMillisecondsPerSecond(), 'ms'];\n                    }\n\n                    break;\n\n                case 'millisecond':\n                case 'milliseconds':\n                case 'milli':\n                case 'ms':\n                    $milliseconds += $intValue;\n\n                    if ($fraction) {\n                        $microseconds += round($fraction * static::getMicrosecondsPerMillisecond());\n                    }\n\n                    break;\n\n                case 'microsecond':\n                case 'microseconds':\n                case 'micro':\n                case 'µs':\n                    $microseconds += $intValue;\n\n                    break;\n\n                default:\n                    throw new InvalidIntervalException(\n                        sprintf('Invalid part %s in definition %s', $part, $intervalDefinition)\n                    );\n            }\n        }\n\n        return new static($years, $months, $weeks, $days, $hours, $minutes, $seconds, $milliseconds * Carbon::MICROSECONDS_PER_MILLISECOND + $microseconds);\n    }\n\n    /**\n     * Creates a CarbonInterval from string using a different locale.\n     *\n     * @param string      $interval interval string in the given language (may also contain English).\n     * @param string|null $locale   if locale is null or not specified, current global locale will be used instead.\n     *\n     * @return static\n     */\n    public static function parseFromLocale($interval, $locale = null)\n    {\n        return static::fromString(Carbon::translateTimeString($interval, $locale ?: static::getLocale(), 'en'));\n    }\n\n    private static function castIntervalToClass(DateInterval $interval, string $className, array $skip = [])\n    {\n        $mainClass = DateInterval::class;\n\n        if (!is_a($className, $mainClass, true)) {\n            throw new InvalidCastException(\"$className is not a sub-class of $mainClass.\");\n        }\n\n        $microseconds = $interval->f;\n        $instance = new $className(static::getDateIntervalSpec($interval, false, $skip));\n\n        if ($microseconds) {\n            $instance->f = $microseconds;\n        }\n\n        if ($interval instanceof self && is_a($className, self::class, true)) {\n            self::copyStep($interval, $instance);\n        }\n\n        self::copyNegativeUnits($interval, $instance);\n\n        return $instance;\n    }\n\n    private static function copyNegativeUnits(DateInterval $from, DateInterval $to): void\n    {\n        $to->invert = $from->invert;\n\n        foreach (['y', 'm', 'd', 'h', 'i', 's'] as $unit) {\n            if ($from->$unit < 0) {\n                $to->$unit *= -1;\n            }\n        }\n    }\n\n    private static function copyStep(self $from, self $to): void\n    {\n        $to->setStep($from->getStep());\n    }\n\n    /**\n     * Cast the current instance into the given class.\n     *\n     * @param string $className The $className::instance() method will be called to cast the current object.\n     *\n     * @return DateInterval\n     */\n    public function cast(string $className)\n    {\n        return self::castIntervalToClass($this, $className);\n    }\n\n    /**\n     * Create a CarbonInterval instance from a DateInterval one.  Can not instance\n     * DateInterval objects created from DateTime::diff() as you can't externally\n     * set the $days field.\n     *\n     * @param DateInterval $interval\n     * @param bool         $skipCopy set to true to return the passed object\n     *                               (without copying it) if it's already of the\n     *                               current class\n     *\n     * @return static\n     */\n    public static function instance(DateInterval $interval, array $skip = [], bool $skipCopy = false)\n    {\n        if ($skipCopy && $interval instanceof static) {\n            return $interval;\n        }\n\n        return self::castIntervalToClass($interval, static::class, $skip);\n    }\n\n    /**\n     * Make a CarbonInterval instance from given variable if possible.\n     *\n     * Always return a new instance. Parse only strings and only these likely to be intervals (skip dates\n     * and recurrences). Throw an exception for invalid format, but otherwise return null.\n     *\n     * @param mixed|int|DateInterval|string|Closure|null $interval interval or number of the given $unit\n     * @param string|null                                $unit     if specified, $interval must be an integer\n     * @param bool                                       $skipCopy set to true to return the passed object\n     *                                                             (without copying it) if it's already of the\n     *                                                             current class\n     *\n     * @return static|null\n     */\n    public static function make($interval, $unit = null, bool $skipCopy = false)\n    {\n        if ($unit) {\n            $interval = \"$interval \".Carbon::pluralUnit($unit);\n        }\n\n        if ($interval instanceof DateInterval) {\n            return static::instance($interval, [], $skipCopy);\n        }\n\n        if ($interval instanceof Closure) {\n            return new static($interval);\n        }\n\n        if (!\\is_string($interval)) {\n            return null;\n        }\n\n        return static::makeFromString($interval);\n    }\n\n    protected static function makeFromString(string $interval)\n    {\n        $interval = preg_replace('/\\s+/', ' ', trim($interval));\n\n        if (preg_match('/^P[T\\d]/', $interval)) {\n            return new static($interval);\n        }\n\n        if (preg_match('/^(?:\\h*\\d+(?:\\.\\d+)?\\h*[a-z]+)+$/i', $interval)) {\n            return static::fromString($interval);\n        }\n\n        // @codeCoverageIgnoreStart\n        try {\n            /** @var static $interval */\n            $interval = static::createFromDateString($interval);\n        } catch (DateMalformedIntervalStringException $e) {\n            return null;\n        }\n        // @codeCoverageIgnoreEnd\n\n        return !$interval || $interval->isEmpty() ? null : $interval;\n    }\n\n    protected function resolveInterval($interval)\n    {\n        if (!($interval instanceof self)) {\n            return self::make($interval);\n        }\n\n        return $interval;\n    }\n\n    /**\n     * Sets up a DateInterval from the relative parts of the string.\n     *\n     * @param string $time\n     *\n     * @return static\n     *\n     * @link https://php.net/manual/en/dateinterval.createfromdatestring.php\n     */\n    #[ReturnTypeWillChange]\n    public static function createFromDateString($time)\n    {\n        $interval = @parent::createFromDateString(strtr($time, [\n            ',' => ' ',\n            ' and ' => ' ',\n        ]));\n\n        if ($interval instanceof DateInterval) {\n            $interval = static::instance($interval);\n        }\n\n        return $interval;\n    }\n\n    ///////////////////////////////////////////////////////////////////\n    ///////////////////////// GETTERS AND SETTERS /////////////////////\n    ///////////////////////////////////////////////////////////////////\n\n    /**\n     * Get a part of the CarbonInterval object.\n     *\n     * @param string $name\n     *\n     * @throws UnknownGetterException\n     *\n     * @return int|float|string\n     */\n    public function get($name)\n    {\n        if (str_starts_with($name, 'total')) {\n            return $this->total(substr($name, 5));\n        }\n\n        switch ($name) {\n            case 'years':\n                return $this->y;\n\n            case 'months':\n                return $this->m;\n\n            case 'dayz':\n                return $this->d;\n\n            case 'hours':\n                return $this->h;\n\n            case 'minutes':\n                return $this->i;\n\n            case 'seconds':\n                return $this->s;\n\n            case 'milli':\n            case 'milliseconds':\n                return (int) (round($this->f * Carbon::MICROSECONDS_PER_SECOND) / Carbon::MICROSECONDS_PER_MILLISECOND);\n\n            case 'micro':\n            case 'microseconds':\n                return (int) round($this->f * Carbon::MICROSECONDS_PER_SECOND);\n\n            case 'microExcludeMilli':\n                return (int) round($this->f * Carbon::MICROSECONDS_PER_SECOND) % Carbon::MICROSECONDS_PER_MILLISECOND;\n\n            case 'weeks':\n                return (int) ($this->d / (int) static::getDaysPerWeek());\n\n            case 'daysExcludeWeeks':\n            case 'dayzExcludeWeeks':\n                return $this->d % (int) static::getDaysPerWeek();\n\n            case 'locale':\n                return $this->getTranslatorLocale();\n\n            default:\n                throw new UnknownGetterException($name);\n        }\n    }\n\n    /**\n     * Get a part of the CarbonInterval object.\n     *\n     * @param string $name\n     *\n     * @throws UnknownGetterException\n     *\n     * @return int|float|string\n     */\n    public function __get($name)\n    {\n        return $this->get($name);\n    }\n\n    /**\n     * Set a part of the CarbonInterval object.\n     *\n     * @param string|array $name\n     * @param int          $value\n     *\n     * @throws UnknownSetterException\n     *\n     * @return $this\n     */\n    public function set($name, $value = null)\n    {\n        $properties = \\is_array($name) ? $name : [$name => $value];\n\n        foreach ($properties as $key => $value) {\n            switch (Carbon::singularUnit(rtrim($key, 'z'))) {\n                case 'year':\n                    $this->checkIntegerValue($key, $value);\n                    $this->y = $value;\n                    $this->handleDecimalPart('year', $value, $this->y);\n\n                    break;\n\n                case 'month':\n                    $this->checkIntegerValue($key, $value);\n                    $this->m = $value;\n                    $this->handleDecimalPart('month', $value, $this->m);\n\n                    break;\n\n                case 'week':\n                    $this->checkIntegerValue($key, $value);\n                    $days = $value * (int) static::getDaysPerWeek();\n                    $this->assertSafeForInteger('days total (including weeks)', $days);\n                    $this->d = $days;\n                    $this->handleDecimalPart('day', $days, $this->d);\n\n                    break;\n\n                case 'day':\n                    $this->checkIntegerValue($key, $value);\n                    $this->d = $value;\n                    $this->handleDecimalPart('day', $value, $this->d);\n\n                    break;\n\n                case 'daysexcludeweek':\n                case 'dayzexcludeweek':\n                    $this->checkIntegerValue($key, $value);\n                    $days = $this->weeks * (int) static::getDaysPerWeek() + $value;\n                    $this->assertSafeForInteger('days total (including weeks)', $days);\n                    $this->d = $days;\n                    $this->handleDecimalPart('day', $days, $this->d);\n\n                    break;\n\n                case 'hour':\n                    $this->checkIntegerValue($key, $value);\n                    $this->h = $value;\n                    $this->handleDecimalPart('hour', $value, $this->h);\n\n                    break;\n\n                case 'minute':\n                    $this->checkIntegerValue($key, $value);\n                    $this->i = $value;\n                    $this->handleDecimalPart('minute', $value, $this->i);\n\n                    break;\n\n                case 'second':\n                    $this->checkIntegerValue($key, $value);\n                    $this->s = $value;\n                    $this->handleDecimalPart('second', $value, $this->s);\n\n                    break;\n\n                case 'milli':\n                case 'millisecond':\n                    $this->microseconds = $value * Carbon::MICROSECONDS_PER_MILLISECOND + $this->microseconds % Carbon::MICROSECONDS_PER_MILLISECOND;\n\n                    break;\n\n                case 'micro':\n                case 'microsecond':\n                    $this->f = $value / Carbon::MICROSECONDS_PER_SECOND;\n\n                    break;\n\n                default:\n                    if ($this->localStrictModeEnabled ?? Carbon::isStrictModeEnabled()) {\n                        throw new UnknownSetterException($key);\n                    }\n\n                    $this->$key = $value;\n            }\n        }\n\n        return $this;\n    }\n\n    /**\n     * Set a part of the CarbonInterval object.\n     *\n     * @param string $name\n     * @param int    $value\n     *\n     * @throws UnknownSetterException\n     */\n    public function __set($name, $value)\n    {\n        $this->set($name, $value);\n    }\n\n    /**\n     * Allow setting of weeks and days to be cumulative.\n     *\n     * @param int $weeks Number of weeks to set\n     * @param int $days  Number of days to set\n     *\n     * @return static\n     */\n    public function weeksAndDays($weeks, $days)\n    {\n        $this->dayz = ($weeks * static::getDaysPerWeek()) + $days;\n\n        return $this;\n    }\n\n    /**\n     * Returns true if the interval is empty for each unit.\n     *\n     * @return bool\n     */\n    public function isEmpty()\n    {\n        return $this->years === 0 &&\n            $this->months === 0 &&\n            $this->dayz === 0 &&\n            !$this->days &&\n            $this->hours === 0 &&\n            $this->minutes === 0 &&\n            $this->seconds === 0 &&\n            $this->microseconds === 0;\n    }\n\n    /**\n     * Register a custom macro.\n     *\n     * @example\n     * ```\n     * CarbonInterval::macro('twice', function () {\n     *   return $this->times(2);\n     * });\n     * echo CarbonInterval::hours(2)->twice();\n     * ```\n     *\n     * @param string          $name\n     * @param object|callable $macro\n     *\n     * @return void\n     */\n    public static function macro($name, $macro)\n    {\n        static::$macros[$name] = $macro;\n    }\n\n    /**\n     * Register macros from a mixin object.\n     *\n     * @example\n     * ```\n     * CarbonInterval::mixin(new class {\n     *   public function daysToHours() {\n     *     return function () {\n     *       $this->hours += $this->days;\n     *       $this->days = 0;\n     *\n     *       return $this;\n     *     };\n     *   }\n     *   public function hoursToDays() {\n     *     return function () {\n     *       $this->days += $this->hours;\n     *       $this->hours = 0;\n     *\n     *       return $this;\n     *     };\n     *   }\n     * });\n     * echo CarbonInterval::hours(5)->hoursToDays() . \"\\n\";\n     * echo CarbonInterval::days(5)->daysToHours() . \"\\n\";\n     * ```\n     *\n     * @param object|string $mixin\n     *\n     * @throws ReflectionException\n     *\n     * @return void\n     */\n    public static function mixin($mixin)\n    {\n        static::baseMixin($mixin);\n    }\n\n    /**\n     * Check if macro is registered.\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public static function hasMacro($name)\n    {\n        return isset(static::$macros[$name]);\n    }\n\n    /**\n     * Call given macro.\n     *\n     * @param string $name\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    protected function callMacro($name, $parameters)\n    {\n        $macro = static::$macros[$name];\n\n        if ($macro instanceof Closure) {\n            $boundMacro = @$macro->bindTo($this, static::class) ?: @$macro->bindTo(null, static::class);\n\n            return ($boundMacro ?: $macro)(...$parameters);\n        }\n\n        return $macro(...$parameters);\n    }\n\n    /**\n     * Allow fluent calls on the setters... CarbonInterval::years(3)->months(5)->day().\n     *\n     * Note: This is done using the magic method to allow static and instance methods to\n     *       have the same names.\n     *\n     * @param string $method     magic method name called\n     * @param array  $parameters parameters list\n     *\n     * @throws BadFluentSetterException|Throwable\n     *\n     * @return static\n     */\n    public function __call($method, $parameters)\n    {\n        if (static::hasMacro($method)) {\n            return static::bindMacroContext($this, function () use (&$method, &$parameters) {\n                return $this->callMacro($method, $parameters);\n            });\n        }\n\n        $roundedValue = $this->callRoundMethod($method, $parameters);\n\n        if ($roundedValue !== null) {\n            return $roundedValue;\n        }\n\n        if (preg_match('/^(?<method>add|sub)(?<unit>[A-Z].*)$/', $method, $match)) {\n            $value = $this->getMagicParameter($parameters, 0, Carbon::pluralUnit($match['unit']), 0);\n\n            return $this->{$match['method']}($value, $match['unit']);\n        }\n\n        $value = $this->getMagicParameter($parameters, 0, Carbon::pluralUnit($method), 1);\n\n        try {\n            $this->set($method, $value);\n        } catch (UnknownSetterException $exception) {\n            if ($this->localStrictModeEnabled ?? Carbon::isStrictModeEnabled()) {\n                throw new BadFluentSetterException($method, 0, $exception);\n            }\n        }\n\n        return $this;\n    }\n\n    protected function getForHumansInitialVariables($syntax, $short)\n    {\n        if (\\is_array($syntax)) {\n            return $syntax;\n        }\n\n        if (\\is_int($short)) {\n            return [\n                'parts' => $short,\n                'short' => false,\n            ];\n        }\n\n        if (\\is_bool($syntax)) {\n            return [\n                'short' => $syntax,\n                'syntax' => CarbonInterface::DIFF_ABSOLUTE,\n            ];\n        }\n\n        return [];\n    }\n\n    /**\n     * @param mixed $syntax\n     * @param mixed $short\n     * @param mixed $parts\n     * @param mixed $options\n     *\n     * @return array\n     */\n    protected function getForHumansParameters($syntax = null, $short = false, $parts = -1, $options = null)\n    {\n        $optionalSpace = ' ';\n        $default = $this->getTranslationMessage('list.0') ?? $this->getTranslationMessage('list') ?? ' ';\n        $join = $default === '' ? '' : ' ';\n        $altNumbers = false;\n        $aUnit = false;\n        $minimumUnit = 's';\n        $skip = [];\n        extract($this->getForHumansInitialVariables($syntax, $short));\n        $skip = array_map('strtolower', array_filter((array) $skip, static function ($value) {\n            return \\is_string($value) && $value !== '';\n        }));\n\n        if ($syntax === null) {\n            $syntax = CarbonInterface::DIFF_ABSOLUTE;\n        }\n\n        if ($parts === -1) {\n            $parts = INF;\n        }\n\n        if ($options === null) {\n            $options = static::getHumanDiffOptions();\n        }\n\n        if ($join === false) {\n            $join = ' ';\n        } elseif ($join === true) {\n            $join = [\n                $default,\n                $this->getTranslationMessage('list.1') ?? $default,\n            ];\n        }\n\n        if ($altNumbers && $altNumbers !== true) {\n            $language = new Language($this->locale);\n            $altNumbers = \\in_array($language->getCode(), (array) $altNumbers, true);\n        }\n\n        if (\\is_array($join)) {\n            [$default, $last] = $join;\n\n            if ($default !== ' ') {\n                $optionalSpace = '';\n            }\n\n            $join = function ($list) use ($default, $last) {\n                if (\\count($list) < 2) {\n                    return implode('', $list);\n                }\n\n                $end = array_pop($list);\n\n                return implode($default, $list).$last.$end;\n            };\n        }\n\n        if (\\is_string($join)) {\n            if ($join !== ' ') {\n                $optionalSpace = '';\n            }\n\n            $glue = $join;\n            $join = function ($list) use ($glue) {\n                return implode($glue, $list);\n            };\n        }\n\n        $interpolations = [\n            ':optional-space' => $optionalSpace,\n        ];\n\n        return [$syntax, $short, $parts, $options, $join, $aUnit, $altNumbers, $interpolations, $minimumUnit, $skip];\n    }\n\n    protected static function getRoundingMethodFromOptions(int $options): ?string\n    {\n        if ($options & CarbonInterface::ROUND) {\n            return 'round';\n        }\n\n        if ($options & CarbonInterface::CEIL) {\n            return 'ceil';\n        }\n\n        if ($options & CarbonInterface::FLOOR) {\n            return 'floor';\n        }\n\n        return null;\n    }\n\n    /**\n     * Returns interval values as an array where key are the unit names and values the counts.\n     *\n     * @return int[]\n     */\n    public function toArray()\n    {\n        return [\n            'years' => $this->years,\n            'months' => $this->months,\n            'weeks' => $this->weeks,\n            'days' => $this->daysExcludeWeeks,\n            'hours' => $this->hours,\n            'minutes' => $this->minutes,\n            'seconds' => $this->seconds,\n            'microseconds' => $this->microseconds,\n        ];\n    }\n\n    /**\n     * Returns interval non-zero values as an array where key are the unit names and values the counts.\n     *\n     * @return int[]\n     */\n    public function getNonZeroValues()\n    {\n        return array_filter($this->toArray(), 'intval');\n    }\n\n    /**\n     * Returns interval values as an array where key are the unit names and values the counts\n     * from the biggest non-zero one the the smallest non-zero one.\n     *\n     * @return int[]\n     */\n    public function getValuesSequence()\n    {\n        $nonZeroValues = $this->getNonZeroValues();\n\n        if ($nonZeroValues === []) {\n            return [];\n        }\n\n        $keys = array_keys($nonZeroValues);\n        $firstKey = $keys[0];\n        $lastKey = $keys[\\count($keys) - 1];\n        $values = [];\n        $record = false;\n\n        foreach ($this->toArray() as $unit => $count) {\n            if ($unit === $firstKey) {\n                $record = true;\n            }\n\n            if ($record) {\n                $values[$unit] = $count;\n            }\n\n            if ($unit === $lastKey) {\n                $record = false;\n            }\n        }\n\n        return $values;\n    }\n\n    /**\n     * Get the current interval in a human readable format in the current locale.\n     *\n     * @example\n     * ```\n     * echo CarbonInterval::fromString('4d 3h 40m')->forHumans() . \"\\n\";\n     * echo CarbonInterval::fromString('4d 3h 40m')->forHumans(['parts' => 2]) . \"\\n\";\n     * echo CarbonInterval::fromString('4d 3h 40m')->forHumans(['parts' => 3, 'join' => true]) . \"\\n\";\n     * echo CarbonInterval::fromString('4d 3h 40m')->forHumans(['short' => true]) . \"\\n\";\n     * echo CarbonInterval::fromString('1d 24h')->forHumans(['join' => ' or ']) . \"\\n\";\n     * echo CarbonInterval::fromString('1d 24h')->forHumans(['minimumUnit' => 'hour']) . \"\\n\";\n     * ```\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'skip' entry, list of units to skip (array of strings or a single string,\n     *                           ` it can be the unit name (singular or plural) or its shortcut\n     *                           ` (y, m, w, d, h, min, s, ms, µs).\n     *                           - 'aUnit' entry, prefer \"an hour\" over \"1 hour\" if true\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           - 'minimumUnit' entry determines the smallest unit of time to display can be long or\n     *                           `  short form of the units, e.g. 'hour' or 'h' (default value: s)\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: -1: no limits)\n     * @param int       $options human diff options\n     *\n     * @throws Exception\n     *\n     * @return string\n     */\n    public function forHumans($syntax = null, $short = false, $parts = -1, $options = null)\n    {\n        [$syntax, $short, $parts, $options, $join, $aUnit, $altNumbers, $interpolations, $minimumUnit, $skip] = $this\n            ->getForHumansParameters($syntax, $short, $parts, $options);\n\n        $interval = [];\n\n        $syntax = (int) ($syntax ?? CarbonInterface::DIFF_ABSOLUTE);\n        $absolute = $syntax === CarbonInterface::DIFF_ABSOLUTE;\n        $relativeToNow = $syntax === CarbonInterface::DIFF_RELATIVE_TO_NOW;\n        $count = 1;\n        $unit = $short ? 's' : 'second';\n        $isFuture = $this->invert === 1;\n        $transId = $relativeToNow ? ($isFuture ? 'from_now' : 'ago') : ($isFuture ? 'after' : 'before');\n        $declensionMode = null;\n\n        /** @var \\Symfony\\Component\\Translation\\Translator $translator */\n        $translator = $this->getLocalTranslator();\n\n        $handleDeclensions = function ($unit, $count, $index = 0, $parts = 1) use ($interpolations, $transId, $translator, $altNumbers, $absolute, &$declensionMode) {\n            if (!$absolute) {\n                $declensionMode = $declensionMode ?? $this->translate($transId.'_mode');\n\n                if ($this->needsDeclension($declensionMode, $index, $parts)) {\n                    // Some languages have special pluralization for past and future tense.\n                    $key = $unit.'_'.$transId;\n                    $result = $this->translate($key, $interpolations, $count, $translator, $altNumbers);\n\n                    if ($result !== $key) {\n                        return $result;\n                    }\n                }\n            }\n\n            $result = $this->translate($unit, $interpolations, $count, $translator, $altNumbers);\n\n            if ($result !== $unit) {\n                return $result;\n            }\n\n            return null;\n        };\n\n        $intervalValues = $this;\n        $method = static::getRoundingMethodFromOptions($options);\n\n        if ($method) {\n            $previousCount = INF;\n\n            while (\n                \\count($intervalValues->getNonZeroValues()) > $parts &&\n                ($count = \\count($keys = array_keys($intervalValues->getValuesSequence()))) > 1\n            ) {\n                $index = min($count, $previousCount - 1) - 2;\n\n                if ($index < 0) {\n                    break;\n                }\n\n                $intervalValues = $this->copy()->roundUnit(\n                    $keys[$index],\n                    1,\n                    $method\n                );\n                $previousCount = $count;\n            }\n        }\n\n        $diffIntervalArray = [\n            ['value' => $intervalValues->years,             'unit' => 'year',        'unitShort' => 'y'],\n            ['value' => $intervalValues->months,            'unit' => 'month',       'unitShort' => 'm'],\n            ['value' => $intervalValues->weeks,             'unit' => 'week',        'unitShort' => 'w'],\n            ['value' => $intervalValues->daysExcludeWeeks,  'unit' => 'day',         'unitShort' => 'd'],\n            ['value' => $intervalValues->hours,             'unit' => 'hour',        'unitShort' => 'h'],\n            ['value' => $intervalValues->minutes,           'unit' => 'minute',      'unitShort' => 'min'],\n            ['value' => $intervalValues->seconds,           'unit' => 'second',      'unitShort' => 's'],\n            ['value' => $intervalValues->milliseconds,      'unit' => 'millisecond', 'unitShort' => 'ms'],\n            ['value' => $intervalValues->microExcludeMilli, 'unit' => 'microsecond', 'unitShort' => 'µs'],\n        ];\n\n        if (!empty($skip)) {\n            foreach ($diffIntervalArray as $index => &$unitData) {\n                $nextIndex = $index + 1;\n\n                if ($unitData['value'] &&\n                    isset($diffIntervalArray[$nextIndex]) &&\n                    \\count(array_intersect([$unitData['unit'], $unitData['unit'].'s', $unitData['unitShort']], $skip))\n                ) {\n                    $diffIntervalArray[$nextIndex]['value'] += $unitData['value'] *\n                        self::getFactorWithDefault($diffIntervalArray[$nextIndex]['unit'], $unitData['unit']);\n                    $unitData['value'] = 0;\n                }\n            }\n        }\n\n        $transChoice = function ($short, $unitData, $index, $parts) use ($absolute, $handleDeclensions, $translator, $aUnit, $altNumbers, $interpolations) {\n            $count = $unitData['value'];\n\n            if ($short) {\n                $result = $handleDeclensions($unitData['unitShort'], $count, $index, $parts);\n\n                if ($result !== null) {\n                    return $result;\n                }\n            } elseif ($aUnit) {\n                $result = $handleDeclensions('a_'.$unitData['unit'], $count, $index, $parts);\n\n                if ($result !== null) {\n                    return $result;\n                }\n            }\n\n            if (!$absolute) {\n                return $handleDeclensions($unitData['unit'], $count, $index, $parts);\n            }\n\n            return $this->translate($unitData['unit'], $interpolations, $count, $translator, $altNumbers);\n        };\n\n        $fallbackUnit = ['second', 's'];\n\n        foreach ($diffIntervalArray as $diffIntervalData) {\n            if ($diffIntervalData['value'] > 0) {\n                $unit = $short ? $diffIntervalData['unitShort'] : $diffIntervalData['unit'];\n                $count = $diffIntervalData['value'];\n                $interval[] = [$short, $diffIntervalData];\n            } elseif ($options & CarbonInterface::SEQUENTIAL_PARTS_ONLY && \\count($interval) > 0) {\n                break;\n            }\n\n            // break the loop after we get the required number of parts in array\n            if (\\count($interval) >= $parts) {\n                break;\n            }\n\n            // break the loop after we have reached the minimum unit\n            if (\\in_array($minimumUnit, [$diffIntervalData['unit'], $diffIntervalData['unitShort']], true)) {\n                $fallbackUnit = [$diffIntervalData['unit'], $diffIntervalData['unitShort']];\n\n                break;\n            }\n        }\n\n        $actualParts = \\count($interval);\n\n        foreach ($interval as $index => &$item) {\n            $item = $transChoice($item[0], $item[1], $index, $actualParts);\n        }\n\n        if (\\count($interval) === 0) {\n            if ($relativeToNow && $options & CarbonInterface::JUST_NOW) {\n                $key = 'diff_now';\n                $translation = $this->translate($key, $interpolations, null, $translator);\n\n                if ($translation !== $key) {\n                    return $translation;\n                }\n            }\n\n            $count = $options & CarbonInterface::NO_ZERO_DIFF ? 1 : 0;\n            $unit = $fallbackUnit[$short ? 1 : 0];\n            $interval[] = $this->translate($unit, $interpolations, $count, $translator, $altNumbers);\n        }\n\n        // join the interval parts by a space\n        $time = $join($interval);\n\n        unset($diffIntervalArray, $interval);\n\n        if ($absolute) {\n            return $time;\n        }\n\n        $isFuture = $this->invert === 1;\n\n        $transId = $relativeToNow ? ($isFuture ? 'from_now' : 'ago') : ($isFuture ? 'after' : 'before');\n\n        if ($parts === 1) {\n            if ($relativeToNow && $unit === 'day') {\n                if ($count === 1 && $options & CarbonInterface::ONE_DAY_WORDS) {\n                    $key = $isFuture ? 'diff_tomorrow' : 'diff_yesterday';\n                    $translation = $this->translate($key, $interpolations, null, $translator);\n\n                    if ($translation !== $key) {\n                        return $translation;\n                    }\n                }\n\n                if ($count === 2 && $options & CarbonInterface::TWO_DAY_WORDS) {\n                    $key = $isFuture ? 'diff_after_tomorrow' : 'diff_before_yesterday';\n                    $translation = $this->translate($key, $interpolations, null, $translator);\n\n                    if ($translation !== $key) {\n                        return $translation;\n                    }\n                }\n            }\n\n            $aTime = $aUnit ? $handleDeclensions('a_'.$unit, $count) : null;\n\n            $time = $aTime ?: $handleDeclensions($unit, $count) ?: $time;\n        }\n\n        $time = [':time' => $time];\n\n        return $this->translate($transId, array_merge($time, $interpolations, $time), null, $translator);\n    }\n\n    /**\n     * Format the instance as a string using the forHumans() function.\n     *\n     * @throws Exception\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        $format = $this->localToStringFormat ?? static::$toStringFormat;\n\n        if (!$format) {\n            return $this->forHumans();\n        }\n\n        if ($format instanceof Closure) {\n            return $format($this);\n        }\n\n        return $this->format($format);\n    }\n\n    /**\n     * Return native DateInterval PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(CarbonInterval::hours(2)->toDateInterval());\n     * ```\n     *\n     * @return DateInterval\n     */\n    public function toDateInterval()\n    {\n        return self::castIntervalToClass($this, DateInterval::class);\n    }\n\n    /**\n     * Convert the interval to a CarbonPeriod.\n     *\n     * @param DateTimeInterface|string|int ...$params Start date, [end date or recurrences] and optional settings.\n     *\n     * @return CarbonPeriod\n     */\n    public function toPeriod(...$params)\n    {\n        if ($this->tzName) {\n            $tz = \\is_string($this->tzName) ? new DateTimeZone($this->tzName) : $this->tzName;\n\n            if ($tz instanceof DateTimeZone) {\n                array_unshift($params, $tz);\n            }\n        }\n\n        return CarbonPeriod::create($this, ...$params);\n    }\n\n    /**\n     * Invert the interval.\n     *\n     * @param bool|int $inverted if a parameter is passed, the passed value cast as 1 or 0 is used\n     *                           as the new value of the ->invert property.\n     *\n     * @return $this\n     */\n    public function invert($inverted = null)\n    {\n        $this->invert = (\\func_num_args() === 0 ? !$this->invert : $inverted) ? 1 : 0;\n\n        return $this;\n    }\n\n    protected function solveNegativeInterval()\n    {\n        if (!$this->isEmpty() && $this->years <= 0 && $this->months <= 0 && $this->dayz <= 0 && $this->hours <= 0 && $this->minutes <= 0 && $this->seconds <= 0 && $this->microseconds <= 0) {\n            $this->years *= -1;\n            $this->months *= -1;\n            $this->dayz *= -1;\n            $this->hours *= -1;\n            $this->minutes *= -1;\n            $this->seconds *= -1;\n            $this->microseconds *= -1;\n            $this->invert();\n        }\n\n        return $this;\n    }\n\n    /**\n     * Add the passed interval to the current instance.\n     *\n     * @param string|DateInterval $unit\n     * @param int|float           $value\n     *\n     * @return $this\n     */\n    public function add($unit, $value = 1)\n    {\n        if (is_numeric($unit)) {\n            [$value, $unit] = [$unit, $value];\n        }\n\n        if (\\is_string($unit) && !preg_match('/^\\s*\\d/', $unit)) {\n            $unit = \"$value $unit\";\n            $value = 1;\n        }\n\n        $interval = static::make($unit);\n\n        if (!$interval) {\n            throw new InvalidIntervalException('This type of data cannot be added/subtracted.');\n        }\n\n        if ($value !== 1) {\n            $interval->times($value);\n        }\n\n        $sign = ($this->invert === 1) !== ($interval->invert === 1) ? -1 : 1;\n        $this->years += $interval->y * $sign;\n        $this->months += $interval->m * $sign;\n        $this->dayz += ($interval->days === false ? $interval->d : $interval->days) * $sign;\n        $this->hours += $interval->h * $sign;\n        $this->minutes += $interval->i * $sign;\n        $this->seconds += $interval->s * $sign;\n        $this->microseconds += $interval->microseconds * $sign;\n\n        $this->solveNegativeInterval();\n\n        return $this;\n    }\n\n    /**\n     * Subtract the passed interval to the current instance.\n     *\n     * @param string|DateInterval $unit\n     * @param int|float           $value\n     *\n     * @return $this\n     */\n    public function sub($unit, $value = 1)\n    {\n        if (is_numeric($unit)) {\n            [$value, $unit] = [$unit, $value];\n        }\n\n        return $this->add($unit, -(float) $value);\n    }\n\n    /**\n     * Subtract the passed interval to the current instance.\n     *\n     * @param string|DateInterval $unit\n     * @param int|float           $value\n     *\n     * @return $this\n     */\n    public function subtract($unit, $value = 1)\n    {\n        return $this->sub($unit, $value);\n    }\n\n    /**\n     * Add given parameters to the current interval.\n     *\n     * @param int       $years\n     * @param int       $months\n     * @param int|float $weeks\n     * @param int|float $days\n     * @param int|float $hours\n     * @param int|float $minutes\n     * @param int|float $seconds\n     * @param int|float $microseconds\n     *\n     * @return $this\n     */\n    public function plus(\n        $years = 0,\n        $months = 0,\n        $weeks = 0,\n        $days = 0,\n        $hours = 0,\n        $minutes = 0,\n        $seconds = 0,\n        $microseconds = 0\n    ): self {\n        return $this->add(\"\n            $years years $months months $weeks weeks $days days\n            $hours hours $minutes minutes $seconds seconds $microseconds microseconds\n        \");\n    }\n\n    /**\n     * Add given parameters to the current interval.\n     *\n     * @param int       $years\n     * @param int       $months\n     * @param int|float $weeks\n     * @param int|float $days\n     * @param int|float $hours\n     * @param int|float $minutes\n     * @param int|float $seconds\n     * @param int|float $microseconds\n     *\n     * @return $this\n     */\n    public function minus(\n        $years = 0,\n        $months = 0,\n        $weeks = 0,\n        $days = 0,\n        $hours = 0,\n        $minutes = 0,\n        $seconds = 0,\n        $microseconds = 0\n    ): self {\n        return $this->sub(\"\n            $years years $months months $weeks weeks $days days\n            $hours hours $minutes minutes $seconds seconds $microseconds microseconds\n        \");\n    }\n\n    /**\n     * Multiply current instance given number of times. times() is naive, it multiplies each unit\n     * (so day can be greater than 31, hour can be greater than 23, etc.) and the result is rounded\n     * separately for each unit.\n     *\n     * Use times() when you want a fast and approximated calculation that does not cascade units.\n     *\n     * For a precise and cascaded calculation,\n     *\n     * @see multiply()\n     *\n     * @param float|int $factor\n     *\n     * @return $this\n     */\n    public function times($factor)\n    {\n        if ($factor < 0) {\n            $this->invert = $this->invert ? 0 : 1;\n            $factor = -$factor;\n        }\n\n        $this->years = (int) round($this->years * $factor);\n        $this->months = (int) round($this->months * $factor);\n        $this->dayz = (int) round($this->dayz * $factor);\n        $this->hours = (int) round($this->hours * $factor);\n        $this->minutes = (int) round($this->minutes * $factor);\n        $this->seconds = (int) round($this->seconds * $factor);\n        $this->microseconds = (int) round($this->microseconds * $factor);\n\n        return $this;\n    }\n\n    /**\n     * Divide current instance by a given divider. shares() is naive, it divides each unit separately\n     * and the result is rounded for each unit. So 5 hours and 20 minutes shared by 3 becomes 2 hours\n     * and 7 minutes.\n     *\n     * Use shares() when you want a fast and approximated calculation that does not cascade units.\n     *\n     * For a precise and cascaded calculation,\n     *\n     * @see divide()\n     *\n     * @param float|int $divider\n     *\n     * @return $this\n     */\n    public function shares($divider)\n    {\n        return $this->times(1 / $divider);\n    }\n\n    protected function copyProperties(self $interval, $ignoreSign = false)\n    {\n        $this->years = $interval->years;\n        $this->months = $interval->months;\n        $this->dayz = $interval->dayz;\n        $this->hours = $interval->hours;\n        $this->minutes = $interval->minutes;\n        $this->seconds = $interval->seconds;\n        $this->microseconds = $interval->microseconds;\n\n        if (!$ignoreSign) {\n            $this->invert = $interval->invert;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Multiply and cascade current instance by a given factor.\n     *\n     * @param float|int $factor\n     *\n     * @return $this\n     */\n    public function multiply($factor)\n    {\n        if ($factor < 0) {\n            $this->invert = $this->invert ? 0 : 1;\n            $factor = -$factor;\n        }\n\n        $yearPart = (int) floor($this->years * $factor); // Split calculation to prevent imprecision\n\n        if ($yearPart) {\n            $this->years -= $yearPart / $factor;\n        }\n\n        return $this->copyProperties(\n            static::create($yearPart)\n                ->microseconds(abs($this->totalMicroseconds) * $factor)\n                ->cascade(),\n            true\n        );\n    }\n\n    /**\n     * Divide and cascade current instance by a given divider.\n     *\n     * @param float|int $divider\n     *\n     * @return $this\n     */\n    public function divide($divider)\n    {\n        return $this->multiply(1 / $divider);\n    }\n\n    /**\n     * Get the interval_spec string of a date interval.\n     *\n     * @param DateInterval $interval\n     *\n     * @return string\n     */\n    public static function getDateIntervalSpec(DateInterval $interval, bool $microseconds = false, array $skip = [])\n    {\n        $date = array_filter([\n            static::PERIOD_YEARS => abs($interval->y),\n            static::PERIOD_MONTHS => abs($interval->m),\n            static::PERIOD_DAYS => abs($interval->d),\n        ]);\n\n        if (\n            $interval->days >= CarbonInterface::DAYS_PER_WEEK * CarbonInterface::WEEKS_PER_MONTH &&\n            (!isset($date[static::PERIOD_YEARS]) || \\count(array_intersect(['y', 'year', 'years'], $skip))) &&\n            (!isset($date[static::PERIOD_MONTHS]) || \\count(array_intersect(['m', 'month', 'months'], $skip)))\n        ) {\n            $date = [\n                static::PERIOD_DAYS => abs($interval->days),\n            ];\n        }\n\n        $seconds = abs($interval->s);\n        if ($microseconds && $interval->f > 0) {\n            $seconds = sprintf('%d.%06d', $seconds, abs($interval->f) * 1000000);\n        }\n\n        $time = array_filter([\n            static::PERIOD_HOURS => abs($interval->h),\n            static::PERIOD_MINUTES => abs($interval->i),\n            static::PERIOD_SECONDS => $seconds,\n        ]);\n\n        $specString = static::PERIOD_PREFIX;\n\n        foreach ($date as $key => $value) {\n            $specString .= $value.$key;\n        }\n\n        if (\\count($time) > 0) {\n            $specString .= static::PERIOD_TIME_PREFIX;\n            foreach ($time as $key => $value) {\n                $specString .= $value.$key;\n            }\n        }\n\n        return $specString === static::PERIOD_PREFIX ? 'PT0S' : $specString;\n    }\n\n    /**\n     * Get the interval_spec string.\n     *\n     * @return string\n     */\n    public function spec(bool $microseconds = false)\n    {\n        return static::getDateIntervalSpec($this, $microseconds);\n    }\n\n    /**\n     * Comparing 2 date intervals.\n     *\n     * @param DateInterval $first\n     * @param DateInterval $second\n     *\n     * @return int\n     */\n    public static function compareDateIntervals(DateInterval $first, DateInterval $second)\n    {\n        $current = Carbon::now();\n        $passed = $current->avoidMutation()->add($second);\n        $current->add($first);\n\n        if ($current < $passed) {\n            return -1;\n        }\n        if ($current > $passed) {\n            return 1;\n        }\n\n        return 0;\n    }\n\n    /**\n     * Comparing with passed interval.\n     *\n     * @param DateInterval $interval\n     *\n     * @return int\n     */\n    public function compare(DateInterval $interval)\n    {\n        return static::compareDateIntervals($this, $interval);\n    }\n\n    private function invertCascade(array $values)\n    {\n        return $this->set(array_map(function ($value) {\n            return -$value;\n        }, $values))->doCascade(true)->invert();\n    }\n\n    private function doCascade(bool $deep)\n    {\n        $originalData = $this->toArray();\n        $originalData['milliseconds'] = (int) ($originalData['microseconds'] / static::getMicrosecondsPerMillisecond());\n        $originalData['microseconds'] = $originalData['microseconds'] % static::getMicrosecondsPerMillisecond();\n        $originalData['weeks'] = (int) ($this->d / static::getDaysPerWeek());\n        $originalData['daysExcludeWeeks'] = fmod($this->d, static::getDaysPerWeek());\n        unset($originalData['days']);\n        $newData = $originalData;\n        $previous = [];\n\n        foreach (self::getFlipCascadeFactors() as $source => [$target, $factor]) {\n            foreach (['source', 'target'] as $key) {\n                if ($$key === 'dayz') {\n                    $$key = 'daysExcludeWeeks';\n                }\n            }\n\n            $value = $newData[$source];\n            $modulo = fmod($factor + fmod($value, $factor), $factor);\n            $newData[$source] = $modulo;\n            $newData[$target] += ($value - $modulo) / $factor;\n\n            $decimalPart = fmod($newData[$source], 1);\n\n            if ($decimalPart !== 0.0) {\n                $unit = $source;\n\n                foreach ($previous as [$subUnit, $subFactor]) {\n                    $newData[$unit] -= $decimalPart;\n                    $newData[$subUnit] += $decimalPart * $subFactor;\n                    $decimalPart = fmod($newData[$subUnit], 1);\n\n                    if ($decimalPart === 0.0) {\n                        break;\n                    }\n\n                    $unit = $subUnit;\n                }\n            }\n\n            array_unshift($previous, [$source, $factor]);\n        }\n\n        $positive = null;\n\n        if (!$deep) {\n            foreach ($newData as $value) {\n                if ($value) {\n                    if ($positive === null) {\n                        $positive = ($value > 0);\n\n                        continue;\n                    }\n\n                    if (($value > 0) !== $positive) {\n                        return $this->invertCascade($originalData)\n                            ->solveNegativeInterval();\n                    }\n                }\n            }\n        }\n\n        return $this->set($newData)\n            ->solveNegativeInterval();\n    }\n\n    /**\n     * Convert overflowed values into bigger units.\n     *\n     * @return $this\n     */\n    public function cascade()\n    {\n        return $this->doCascade(false);\n    }\n\n    public function hasNegativeValues(): bool\n    {\n        foreach ($this->toArray() as $value) {\n            if ($value < 0) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    public function hasPositiveValues(): bool\n    {\n        foreach ($this->toArray() as $value) {\n            if ($value > 0) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get amount of given unit equivalent to the interval.\n     *\n     * @param string $unit\n     *\n     * @throws UnknownUnitException|UnitNotConfiguredException\n     *\n     * @return float\n     */\n    public function total($unit)\n    {\n        $realUnit = $unit = strtolower($unit);\n\n        if (\\in_array($unit, ['days', 'weeks'])) {\n            $realUnit = 'dayz';\n        } elseif (!\\in_array($unit, ['microseconds', 'milliseconds', 'seconds', 'minutes', 'hours', 'dayz', 'months', 'years'])) {\n            throw new UnknownUnitException($unit);\n        }\n\n        $result = 0;\n        $cumulativeFactor = 0;\n        $unitFound = false;\n        $factors = self::getFlipCascadeFactors();\n        $daysPerWeek = (int) static::getDaysPerWeek();\n\n        $values = [\n            'years' => $this->years,\n            'months' => $this->months,\n            'weeks' => (int) ($this->d / $daysPerWeek),\n            'dayz' => fmod($this->d, $daysPerWeek),\n            'hours' => $this->hours,\n            'minutes' => $this->minutes,\n            'seconds' => $this->seconds,\n            'milliseconds' => (int) ($this->microseconds / Carbon::MICROSECONDS_PER_MILLISECOND),\n            'microseconds' => $this->microseconds % Carbon::MICROSECONDS_PER_MILLISECOND,\n        ];\n\n        if (isset($factors['dayz']) && $factors['dayz'][0] !== 'weeks') {\n            $values['dayz'] += $values['weeks'] * $daysPerWeek;\n            $values['weeks'] = 0;\n        }\n\n        foreach ($factors as $source => [$target, $factor]) {\n            if ($source === $realUnit) {\n                $unitFound = true;\n                $value = $values[$source];\n                $result += $value;\n                $cumulativeFactor = 1;\n            }\n\n            if ($factor === false) {\n                if ($unitFound) {\n                    break;\n                }\n\n                $result = 0;\n                $cumulativeFactor = 0;\n\n                continue;\n            }\n\n            if ($target === $realUnit) {\n                $unitFound = true;\n            }\n\n            if ($cumulativeFactor) {\n                $cumulativeFactor *= $factor;\n                $result += $values[$target] * $cumulativeFactor;\n\n                continue;\n            }\n\n            $value = $values[$source];\n\n            $result = ($result + $value) / $factor;\n        }\n\n        if (isset($target) && !$cumulativeFactor) {\n            $result += $values[$target];\n        }\n\n        if (!$unitFound) {\n            throw new UnitNotConfiguredException($unit);\n        }\n\n        if ($this->invert) {\n            $result *= -1;\n        }\n\n        if ($unit === 'weeks') {\n            $result /= $daysPerWeek;\n        }\n\n        // Cast as int numbers with no decimal part\n        return fmod($result, 1) === 0.0 ? (int) $result : $result;\n    }\n\n    /**\n     * Determines if the instance is equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @see equalTo()\n     *\n     * @return bool\n     */\n    public function eq($interval): bool\n    {\n        return $this->equalTo($interval);\n    }\n\n    /**\n     * Determines if the instance is equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @return bool\n     */\n    public function equalTo($interval): bool\n    {\n        $interval = $this->resolveInterval($interval);\n\n        return $interval !== null && $this->totalMicroseconds === $interval->totalMicroseconds;\n    }\n\n    /**\n     * Determines if the instance is not equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @see notEqualTo()\n     *\n     * @return bool\n     */\n    public function ne($interval): bool\n    {\n        return $this->notEqualTo($interval);\n    }\n\n    /**\n     * Determines if the instance is not equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @return bool\n     */\n    public function notEqualTo($interval): bool\n    {\n        return !$this->eq($interval);\n    }\n\n    /**\n     * Determines if the instance is greater (longer) than another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @see greaterThan()\n     *\n     * @return bool\n     */\n    public function gt($interval): bool\n    {\n        return $this->greaterThan($interval);\n    }\n\n    /**\n     * Determines if the instance is greater (longer) than another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @return bool\n     */\n    public function greaterThan($interval): bool\n    {\n        $interval = $this->resolveInterval($interval);\n\n        return $interval === null || $this->totalMicroseconds > $interval->totalMicroseconds;\n    }\n\n    /**\n     * Determines if the instance is greater (longer) than or equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @see greaterThanOrEqualTo()\n     *\n     * @return bool\n     */\n    public function gte($interval): bool\n    {\n        return $this->greaterThanOrEqualTo($interval);\n    }\n\n    /**\n     * Determines if the instance is greater (longer) than or equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @return bool\n     */\n    public function greaterThanOrEqualTo($interval): bool\n    {\n        return $this->greaterThan($interval) || $this->equalTo($interval);\n    }\n\n    /**\n     * Determines if the instance is less (shorter) than another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @see lessThan()\n     *\n     * @return bool\n     */\n    public function lt($interval): bool\n    {\n        return $this->lessThan($interval);\n    }\n\n    /**\n     * Determines if the instance is less (shorter) than another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @return bool\n     */\n    public function lessThan($interval): bool\n    {\n        $interval = $this->resolveInterval($interval);\n\n        return $interval !== null && $this->totalMicroseconds < $interval->totalMicroseconds;\n    }\n\n    /**\n     * Determines if the instance is less (shorter) than or equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @see lessThanOrEqualTo()\n     *\n     * @return bool\n     */\n    public function lte($interval): bool\n    {\n        return $this->lessThanOrEqualTo($interval);\n    }\n\n    /**\n     * Determines if the instance is less (shorter) than or equal to another\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval\n     *\n     * @return bool\n     */\n    public function lessThanOrEqualTo($interval): bool\n    {\n        return $this->lessThan($interval) || $this->equalTo($interval);\n    }\n\n    /**\n     * Determines if the instance is between two others.\n     *\n     * The third argument allow you to specify if bounds are included or not (true by default)\n     * but for when you including/excluding bounds may produce different results in your application,\n     * we recommend to use the explicit methods ->betweenIncluded() or ->betweenExcluded() instead.\n     *\n     * @example\n     * ```\n     * CarbonInterval::hours(48)->between(CarbonInterval::day(), CarbonInterval::days(3)); // true\n     * CarbonInterval::hours(48)->between(CarbonInterval::day(), CarbonInterval::hours(36)); // false\n     * CarbonInterval::hours(48)->between(CarbonInterval::day(), CarbonInterval::days(2)); // true\n     * CarbonInterval::hours(48)->between(CarbonInterval::day(), CarbonInterval::days(2), false); // false\n     * ```\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval1\n     * @param CarbonInterval|DateInterval|mixed $interval2\n     * @param bool                              $equal     Indicates if an equal to comparison should be done\n     *\n     * @return bool\n     */\n    public function between($interval1, $interval2, $equal = true): bool\n    {\n        return $equal\n            ? $this->greaterThanOrEqualTo($interval1) && $this->lessThanOrEqualTo($interval2)\n            : $this->greaterThan($interval1) && $this->lessThan($interval2);\n    }\n\n    /**\n     * Determines if the instance is between two others, bounds excluded.\n     *\n     * @example\n     * ```\n     * CarbonInterval::hours(48)->betweenExcluded(CarbonInterval::day(), CarbonInterval::days(3)); // true\n     * CarbonInterval::hours(48)->betweenExcluded(CarbonInterval::day(), CarbonInterval::hours(36)); // false\n     * CarbonInterval::hours(48)->betweenExcluded(CarbonInterval::day(), CarbonInterval::days(2)); // true\n     * ```\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval1\n     * @param CarbonInterval|DateInterval|mixed $interval2\n     *\n     * @return bool\n     */\n    public function betweenIncluded($interval1, $interval2): bool\n    {\n        return $this->between($interval1, $interval2, true);\n    }\n\n    /**\n     * Determines if the instance is between two others, bounds excluded.\n     *\n     * @example\n     * ```\n     * CarbonInterval::hours(48)->betweenExcluded(CarbonInterval::day(), CarbonInterval::days(3)); // true\n     * CarbonInterval::hours(48)->betweenExcluded(CarbonInterval::day(), CarbonInterval::hours(36)); // false\n     * CarbonInterval::hours(48)->betweenExcluded(CarbonInterval::day(), CarbonInterval::days(2)); // false\n     * ```\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval1\n     * @param CarbonInterval|DateInterval|mixed $interval2\n     *\n     * @return bool\n     */\n    public function betweenExcluded($interval1, $interval2): bool\n    {\n        return $this->between($interval1, $interval2, false);\n    }\n\n    /**\n     * Determines if the instance is between two others\n     *\n     * @example\n     * ```\n     * CarbonInterval::hours(48)->isBetween(CarbonInterval::day(), CarbonInterval::days(3)); // true\n     * CarbonInterval::hours(48)->isBetween(CarbonInterval::day(), CarbonInterval::hours(36)); // false\n     * CarbonInterval::hours(48)->isBetween(CarbonInterval::day(), CarbonInterval::days(2)); // true\n     * CarbonInterval::hours(48)->isBetween(CarbonInterval::day(), CarbonInterval::days(2), false); // false\n     * ```\n     *\n     * @param CarbonInterval|DateInterval|mixed $interval1\n     * @param CarbonInterval|DateInterval|mixed $interval2\n     * @param bool                              $equal     Indicates if an equal to comparison should be done\n     *\n     * @return bool\n     */\n    public function isBetween($interval1, $interval2, $equal = true): bool\n    {\n        return $this->between($interval1, $interval2, $equal);\n    }\n\n    /**\n     * Round the current instance at the given unit with given precision if specified and the given function.\n     *\n     * @param string                             $unit\n     * @param float|int|string|DateInterval|null $precision\n     * @param string                             $function\n     *\n     * @throws Exception\n     *\n     * @return $this\n     */\n    public function roundUnit($unit, $precision = 1, $function = 'round')\n    {\n        if (static::getCascadeFactors() !== static::getDefaultCascadeFactors()) {\n            $value = $function($this->total($unit) / $precision) * $precision;\n            $inverted = $value < 0;\n\n            return $this->copyProperties(self::fromString(\n                number_format(abs($value), 12, '.', '').' '.$unit\n            )->invert($inverted)->cascade());\n        }\n\n        $base = CarbonImmutable::parse('2000-01-01 00:00:00', 'UTC')\n            ->roundUnit($unit, $precision, $function);\n        $next = $base->add($this);\n        $inverted = $next < $base;\n\n        if ($inverted) {\n            $next = $base->sub($this);\n        }\n\n        $this->copyProperties(\n            $next\n                ->roundUnit($unit, $precision, $function)\n                ->diffAsCarbonInterval($base)\n        );\n\n        return $this->invert($inverted);\n    }\n\n    /**\n     * Truncate the current instance at the given unit with given precision if specified.\n     *\n     * @param string                             $unit\n     * @param float|int|string|DateInterval|null $precision\n     *\n     * @throws Exception\n     *\n     * @return $this\n     */\n    public function floorUnit($unit, $precision = 1)\n    {\n        return $this->roundUnit($unit, $precision, 'floor');\n    }\n\n    /**\n     * Ceil the current instance at the given unit with given precision if specified.\n     *\n     * @param string                             $unit\n     * @param float|int|string|DateInterval|null $precision\n     *\n     * @throws Exception\n     *\n     * @return $this\n     */\n    public function ceilUnit($unit, $precision = 1)\n    {\n        return $this->roundUnit($unit, $precision, 'ceil');\n    }\n\n    /**\n     * Round the current instance second with given precision if specified.\n     *\n     * @param float|int|string|DateInterval|null $precision\n     * @param string                             $function\n     *\n     * @throws Exception\n     *\n     * @return $this\n     */\n    public function round($precision = 1, $function = 'round')\n    {\n        return $this->roundWith($precision, $function);\n    }\n\n    /**\n     * Round the current instance second with given precision if specified.\n     *\n     * @param float|int|string|DateInterval|null $precision\n     *\n     * @throws Exception\n     *\n     * @return $this\n     */\n    public function floor($precision = 1)\n    {\n        return $this->round($precision, 'floor');\n    }\n\n    /**\n     * Ceil the current instance second with given precision if specified.\n     *\n     * @param float|int|string|DateInterval|null $precision\n     *\n     * @throws Exception\n     *\n     * @return $this\n     */\n    public function ceil($precision = 1)\n    {\n        return $this->round($precision, 'ceil');\n    }\n\n    private function needsDeclension(string $mode, int $index, int $parts): bool\n    {\n        switch ($mode) {\n            case 'last':\n                return $index === $parts - 1;\n            default:\n                return true;\n        }\n    }\n\n    private function checkIntegerValue(string $name, $value)\n    {\n        if (\\is_int($value)) {\n            return;\n        }\n\n        $this->assertSafeForInteger($name, $value);\n\n        if (\\is_float($value) && (((float) (int) $value) === $value)) {\n            return;\n        }\n\n        if (!self::$floatSettersEnabled) {\n            $type = \\gettype($value);\n            @trigger_error(\n                \"Since 2.70.0, it's deprecated to pass $type value for $name.\\n\".\n                \"It's truncated when stored as an integer interval unit.\\n\".\n                \"From 3.0.0, decimal part will no longer be truncated and will be cascaded to smaller units.\\n\".\n                \"- To maintain the current behavior, use explicit cast: $name((int) \\$value)\\n\".\n                \"- To adopt the new behavior globally, call CarbonInterval::enableFloatSetters()\\n\",\n                \\E_USER_DEPRECATED\n            );\n        }\n    }\n\n    /**\n     * Throw an exception if precision loss when storing the given value as an integer would be >= 1.0.\n     */\n    private function assertSafeForInteger(string $name, $value)\n    {\n        if ($value && !\\is_int($value) && ($value >= 0x7fffffffffffffff || $value <= -0x7fffffffffffffff)) {\n            throw new OutOfRangeException($name, -0x7fffffffffffffff, 0x7fffffffffffffff, $value);\n        }\n    }\n\n    private function handleDecimalPart(string $unit, $value, $integerValue)\n    {\n        if (self::$floatSettersEnabled) {\n            $floatValue = (float) $value;\n            $base = (float) $integerValue;\n\n            if ($floatValue === $base) {\n                return;\n            }\n\n            $units = [\n                'y' => 'year',\n                'm' => 'month',\n                'd' => 'day',\n                'h' => 'hour',\n                'i' => 'minute',\n                's' => 'second',\n            ];\n            $upper = true;\n\n            foreach ($units as $property => $name) {\n                if ($name === $unit) {\n                    $upper = false;\n\n                    continue;\n                }\n\n                if (!$upper && $this->$property !== 0) {\n                    throw new RuntimeException(\n                        \"You cannot set $unit to a float value as $name would be overridden, \".\n                        'set it first to 0 explicitly if you really want to erase its value'\n                    );\n                }\n            }\n\n            $this->add($unit, $floatValue - $base);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\Exceptions\\EndLessPeriodException;\nuse Carbon\\Exceptions\\InvalidCastException;\nuse Carbon\\Exceptions\\InvalidIntervalException;\nuse Carbon\\Exceptions\\InvalidPeriodDateException;\nuse Carbon\\Exceptions\\InvalidPeriodParameterException;\nuse Carbon\\Exceptions\\NotACarbonClassException;\nuse Carbon\\Exceptions\\NotAPeriodException;\nuse Carbon\\Exceptions\\UnknownGetterException;\nuse Carbon\\Exceptions\\UnknownMethodException;\nuse Carbon\\Exceptions\\UnreachableException;\nuse Carbon\\Traits\\IntervalRounding;\nuse Carbon\\Traits\\Mixin;\nuse Carbon\\Traits\\Options;\nuse Carbon\\Traits\\ToStringFormat;\nuse Closure;\nuse Countable;\nuse DateInterval;\nuse DatePeriod;\nuse DateTime;\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse DateTimeZone;\nuse InvalidArgumentException;\nuse Iterator;\nuse JsonSerializable;\nuse ReflectionException;\nuse ReturnTypeWillChange;\nuse RuntimeException;\n\n/**\n * Substitution of DatePeriod with some modifications and many more features.\n *\n * @property-read int|float $recurrences number of recurrences (if end not set).\n * @property-read bool $include_start_date rather the start date is included in the iteration.\n * @property-read bool $include_end_date rather the end date is included in the iteration (if recurrences not set).\n * @property-read CarbonInterface $start Period start date.\n * @property-read CarbonInterface $current Current date from the iteration.\n * @property-read CarbonInterface $end Period end date.\n * @property-read CarbonInterval $interval Underlying date interval instance. Always present, one day by default.\n *\n * @method static static start($date, $inclusive = null) Create instance specifying start date or modify the start date if called on an instance.\n * @method static static since($date, $inclusive = null) Alias for start().\n * @method static static sinceNow($inclusive = null) Create instance with start date set to now or set the start date to now if called on an instance.\n * @method static static end($date = null, $inclusive = null) Create instance specifying end date or modify the end date if called on an instance.\n * @method static static until($date = null, $inclusive = null) Alias for end().\n * @method static static untilNow($inclusive = null) Create instance with end date set to now or set the end date to now if called on an instance.\n * @method static static dates($start, $end = null) Create instance with start and end dates or modify the start and end dates if called on an instance.\n * @method static static between($start, $end = null) Create instance with start and end dates or modify the start and end dates if called on an instance.\n * @method static static recurrences($recurrences = null) Create instance with maximum number of recurrences or modify the number of recurrences if called on an instance.\n * @method static static times($recurrences = null) Alias for recurrences().\n * @method static static options($options = null) Create instance with options or modify the options if called on an instance.\n * @method static static toggle($options, $state = null) Create instance with options toggled on or off, or toggle options if called on an instance.\n * @method static static filter($callback, $name = null) Create instance with filter added to the stack or append a filter if called on an instance.\n * @method static static push($callback, $name = null) Alias for filter().\n * @method static static prepend($callback, $name = null) Create instance with filter prepended to the stack or prepend a filter if called on an instance.\n * @method static static filters(array $filters = []) Create instance with filters stack or replace the whole filters stack if called on an instance.\n * @method static static interval($interval) Create instance with given date interval or modify the interval if called on an instance.\n * @method static static each($interval) Create instance with given date interval or modify the interval if called on an instance.\n * @method static static every($interval) Create instance with given date interval or modify the interval if called on an instance.\n * @method static static step($interval) Create instance with given date interval or modify the interval if called on an instance.\n * @method static static stepBy($interval) Create instance with given date interval or modify the interval if called on an instance.\n * @method static static invert() Create instance with inverted date interval or invert the interval if called on an instance.\n * @method static static years($years = 1) Create instance specifying a number of years for date interval or replace the interval by the given a number of years if called on an instance.\n * @method static static year($years = 1) Alias for years().\n * @method static static months($months = 1) Create instance specifying a number of months for date interval or replace the interval by the given a number of months if called on an instance.\n * @method static static month($months = 1) Alias for months().\n * @method static static weeks($weeks = 1) Create instance specifying a number of weeks for date interval or replace the interval by the given a number of weeks if called on an instance.\n * @method static static week($weeks = 1) Alias for weeks().\n * @method static static days($days = 1) Create instance specifying a number of days for date interval or replace the interval by the given a number of days if called on an instance.\n * @method static static dayz($days = 1) Alias for days().\n * @method static static day($days = 1) Alias for days().\n * @method static static hours($hours = 1) Create instance specifying a number of hours for date interval or replace the interval by the given a number of hours if called on an instance.\n * @method static static hour($hours = 1) Alias for hours().\n * @method static static minutes($minutes = 1) Create instance specifying a number of minutes for date interval or replace the interval by the given a number of minutes if called on an instance.\n * @method static static minute($minutes = 1) Alias for minutes().\n * @method static static seconds($seconds = 1) Create instance specifying a number of seconds for date interval or replace the interval by the given a number of seconds if called on an instance.\n * @method static static second($seconds = 1) Alias for seconds().\n * @method static static milliseconds($milliseconds = 1) Create instance specifying a number of milliseconds for date interval or replace the interval by the given a number of milliseconds if called on an instance.\n * @method static static millisecond($milliseconds = 1) Alias for milliseconds().\n * @method static static microseconds($microseconds = 1) Create instance specifying a number of microseconds for date interval or replace the interval by the given a number of microseconds if called on an instance.\n * @method static static microsecond($microseconds = 1) Alias for microseconds().\n * @method $this roundYear(float $precision = 1, string $function = \"round\") Round the current instance year with given precision using the given function.\n * @method $this roundYears(float $precision = 1, string $function = \"round\") Round the current instance year with given precision using the given function.\n * @method $this floorYear(float $precision = 1) Truncate the current instance year with given precision.\n * @method $this floorYears(float $precision = 1) Truncate the current instance year with given precision.\n * @method $this ceilYear(float $precision = 1) Ceil the current instance year with given precision.\n * @method $this ceilYears(float $precision = 1) Ceil the current instance year with given precision.\n * @method $this roundMonth(float $precision = 1, string $function = \"round\") Round the current instance month with given precision using the given function.\n * @method $this roundMonths(float $precision = 1, string $function = \"round\") Round the current instance month with given precision using the given function.\n * @method $this floorMonth(float $precision = 1) Truncate the current instance month with given precision.\n * @method $this floorMonths(float $precision = 1) Truncate the current instance month with given precision.\n * @method $this ceilMonth(float $precision = 1) Ceil the current instance month with given precision.\n * @method $this ceilMonths(float $precision = 1) Ceil the current instance month with given precision.\n * @method $this roundWeek(float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this roundWeeks(float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this floorWeek(float $precision = 1) Truncate the current instance day with given precision.\n * @method $this floorWeeks(float $precision = 1) Truncate the current instance day with given precision.\n * @method $this ceilWeek(float $precision = 1) Ceil the current instance day with given precision.\n * @method $this ceilWeeks(float $precision = 1) Ceil the current instance day with given precision.\n * @method $this roundDay(float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this roundDays(float $precision = 1, string $function = \"round\") Round the current instance day with given precision using the given function.\n * @method $this floorDay(float $precision = 1) Truncate the current instance day with given precision.\n * @method $this floorDays(float $precision = 1) Truncate the current instance day with given precision.\n * @method $this ceilDay(float $precision = 1) Ceil the current instance day with given precision.\n * @method $this ceilDays(float $precision = 1) Ceil the current instance day with given precision.\n * @method $this roundHour(float $precision = 1, string $function = \"round\") Round the current instance hour with given precision using the given function.\n * @method $this roundHours(float $precision = 1, string $function = \"round\") Round the current instance hour with given precision using the given function.\n * @method $this floorHour(float $precision = 1) Truncate the current instance hour with given precision.\n * @method $this floorHours(float $precision = 1) Truncate the current instance hour with given precision.\n * @method $this ceilHour(float $precision = 1) Ceil the current instance hour with given precision.\n * @method $this ceilHours(float $precision = 1) Ceil the current instance hour with given precision.\n * @method $this roundMinute(float $precision = 1, string $function = \"round\") Round the current instance minute with given precision using the given function.\n * @method $this roundMinutes(float $precision = 1, string $function = \"round\") Round the current instance minute with given precision using the given function.\n * @method $this floorMinute(float $precision = 1) Truncate the current instance minute with given precision.\n * @method $this floorMinutes(float $precision = 1) Truncate the current instance minute with given precision.\n * @method $this ceilMinute(float $precision = 1) Ceil the current instance minute with given precision.\n * @method $this ceilMinutes(float $precision = 1) Ceil the current instance minute with given precision.\n * @method $this roundSecond(float $precision = 1, string $function = \"round\") Round the current instance second with given precision using the given function.\n * @method $this roundSeconds(float $precision = 1, string $function = \"round\") Round the current instance second with given precision using the given function.\n * @method $this floorSecond(float $precision = 1) Truncate the current instance second with given precision.\n * @method $this floorSeconds(float $precision = 1) Truncate the current instance second with given precision.\n * @method $this ceilSecond(float $precision = 1) Ceil the current instance second with given precision.\n * @method $this ceilSeconds(float $precision = 1) Ceil the current instance second with given precision.\n * @method $this roundMillennium(float $precision = 1, string $function = \"round\") Round the current instance millennium with given precision using the given function.\n * @method $this roundMillennia(float $precision = 1, string $function = \"round\") Round the current instance millennium with given precision using the given function.\n * @method $this floorMillennium(float $precision = 1) Truncate the current instance millennium with given precision.\n * @method $this floorMillennia(float $precision = 1) Truncate the current instance millennium with given precision.\n * @method $this ceilMillennium(float $precision = 1) Ceil the current instance millennium with given precision.\n * @method $this ceilMillennia(float $precision = 1) Ceil the current instance millennium with given precision.\n * @method $this roundCentury(float $precision = 1, string $function = \"round\") Round the current instance century with given precision using the given function.\n * @method $this roundCenturies(float $precision = 1, string $function = \"round\") Round the current instance century with given precision using the given function.\n * @method $this floorCentury(float $precision = 1) Truncate the current instance century with given precision.\n * @method $this floorCenturies(float $precision = 1) Truncate the current instance century with given precision.\n * @method $this ceilCentury(float $precision = 1) Ceil the current instance century with given precision.\n * @method $this ceilCenturies(float $precision = 1) Ceil the current instance century with given precision.\n * @method $this roundDecade(float $precision = 1, string $function = \"round\") Round the current instance decade with given precision using the given function.\n * @method $this roundDecades(float $precision = 1, string $function = \"round\") Round the current instance decade with given precision using the given function.\n * @method $this floorDecade(float $precision = 1) Truncate the current instance decade with given precision.\n * @method $this floorDecades(float $precision = 1) Truncate the current instance decade with given precision.\n * @method $this ceilDecade(float $precision = 1) Ceil the current instance decade with given precision.\n * @method $this ceilDecades(float $precision = 1) Ceil the current instance decade with given precision.\n * @method $this roundQuarter(float $precision = 1, string $function = \"round\") Round the current instance quarter with given precision using the given function.\n * @method $this roundQuarters(float $precision = 1, string $function = \"round\") Round the current instance quarter with given precision using the given function.\n * @method $this floorQuarter(float $precision = 1) Truncate the current instance quarter with given precision.\n * @method $this floorQuarters(float $precision = 1) Truncate the current instance quarter with given precision.\n * @method $this ceilQuarter(float $precision = 1) Ceil the current instance quarter with given precision.\n * @method $this ceilQuarters(float $precision = 1) Ceil the current instance quarter with given precision.\n * @method $this roundMillisecond(float $precision = 1, string $function = \"round\") Round the current instance millisecond with given precision using the given function.\n * @method $this roundMilliseconds(float $precision = 1, string $function = \"round\") Round the current instance millisecond with given precision using the given function.\n * @method $this floorMillisecond(float $precision = 1) Truncate the current instance millisecond with given precision.\n * @method $this floorMilliseconds(float $precision = 1) Truncate the current instance millisecond with given precision.\n * @method $this ceilMillisecond(float $precision = 1) Ceil the current instance millisecond with given precision.\n * @method $this ceilMilliseconds(float $precision = 1) Ceil the current instance millisecond with given precision.\n * @method $this roundMicrosecond(float $precision = 1, string $function = \"round\") Round the current instance microsecond with given precision using the given function.\n * @method $this roundMicroseconds(float $precision = 1, string $function = \"round\") Round the current instance microsecond with given precision using the given function.\n * @method $this floorMicrosecond(float $precision = 1) Truncate the current instance microsecond with given precision.\n * @method $this floorMicroseconds(float $precision = 1) Truncate the current instance microsecond with given precision.\n * @method $this ceilMicrosecond(float $precision = 1) Ceil the current instance microsecond with given precision.\n * @method $this ceilMicroseconds(float $precision = 1) Ceil the current instance microsecond with given precision.\n *\n * @SuppressWarnings(PHPMD.CouplingBetweenObjects)\n */\nclass CarbonPeriod implements Iterator, Countable, JsonSerializable\n{\n    use IntervalRounding;\n    use Mixin {\n        Mixin::mixin as baseMixin;\n    }\n    use Options;\n    use ToStringFormat;\n\n    /**\n     * Built-in filter for limit by recurrences.\n     *\n     * @var callable\n     */\n    public const RECURRENCES_FILTER = [self::class, 'filterRecurrences'];\n\n    /**\n     * Built-in filter for limit to an end.\n     *\n     * @var callable\n     */\n    public const END_DATE_FILTER = [self::class, 'filterEndDate'];\n\n    /**\n     * Special value which can be returned by filters to end iteration. Also a filter.\n     *\n     * @var callable\n     */\n    public const END_ITERATION = [self::class, 'endIteration'];\n\n    /**\n     * Exclude start date from iteration.\n     *\n     * @var int\n     */\n    public const EXCLUDE_START_DATE = 1;\n\n    /**\n     * Exclude end date from iteration.\n     *\n     * @var int\n     */\n    public const EXCLUDE_END_DATE = 2;\n\n    /**\n     * Yield CarbonImmutable instances.\n     *\n     * @var int\n     */\n    public const IMMUTABLE = 4;\n\n    /**\n     * Number of maximum attempts before giving up on finding next valid date.\n     *\n     * @var int\n     */\n    public const NEXT_MAX_ATTEMPTS = 1000;\n\n    /**\n     * Number of maximum attempts before giving up on finding end date.\n     *\n     * @var int\n     */\n    public const END_MAX_ATTEMPTS = 10000;\n\n    /**\n     * Default date class of iteration items.\n     *\n     * @var string\n     */\n    protected const DEFAULT_DATE_CLASS = Carbon::class;\n\n    /**\n     * The registered macros.\n     *\n     * @var array\n     */\n    protected static $macros = [];\n\n    /**\n     * Date class of iteration items.\n     *\n     * @var string\n     */\n    protected $dateClass = Carbon::class;\n\n    /**\n     * Underlying date interval instance. Always present, one day by default.\n     *\n     * @var CarbonInterval\n     */\n    protected $dateInterval;\n\n    /**\n     * True once __construct is finished.\n     *\n     * @var bool\n     */\n    protected $constructed = false;\n\n    /**\n     * Whether current date interval was set by default.\n     *\n     * @var bool\n     */\n    protected $isDefaultInterval;\n\n    /**\n     * The filters stack.\n     *\n     * @var array\n     */\n    protected $filters = [];\n\n    /**\n     * Period start date. Applied on rewind. Always present, now by default.\n     *\n     * @var CarbonInterface\n     */\n    protected $startDate;\n\n    /**\n     * Period end date. For inverted interval should be before the start date. Applied via a filter.\n     *\n     * @var CarbonInterface|null\n     */\n    protected $endDate;\n\n    /**\n     * Limit for number of recurrences. Applied via a filter.\n     *\n     * @var int|null\n     */\n    protected $recurrences;\n\n    /**\n     * Iteration options.\n     *\n     * @var int\n     */\n    protected $options;\n\n    /**\n     * Index of current date. Always sequential, even if some dates are skipped by filters.\n     * Equal to null only before the first iteration.\n     *\n     * @var int\n     */\n    protected $key;\n\n    /**\n     * Current date. May temporarily hold unaccepted value when looking for a next valid date.\n     * Equal to null only before the first iteration.\n     *\n     * @var CarbonInterface\n     */\n    protected $current;\n\n    /**\n     * Timezone of current date. Taken from the start date.\n     *\n     * @var \\DateTimeZone|null\n     */\n    protected $timezone;\n\n    /**\n     * The cached validation result for current date.\n     *\n     * @var bool|string|null\n     */\n    protected $validationResult;\n\n    /**\n     * Timezone handler for settings() method.\n     *\n     * @var mixed\n     */\n    protected $tzName;\n\n    /**\n     * Make a CarbonPeriod instance from given variable if possible.\n     *\n     * @param mixed $var\n     *\n     * @return static|null\n     */\n    public static function make($var)\n    {\n        try {\n            return static::instance($var);\n        } catch (NotAPeriodException $e) {\n            return static::create($var);\n        }\n    }\n\n    /**\n     * Create a new instance from a DatePeriod or CarbonPeriod object.\n     *\n     * @param CarbonPeriod|DatePeriod $period\n     *\n     * @return static\n     */\n    public static function instance($period)\n    {\n        if ($period instanceof static) {\n            return $period->copy();\n        }\n\n        if ($period instanceof self) {\n            return new static(\n                $period->getStartDate(),\n                $period->getEndDate() ?: $period->getRecurrences(),\n                $period->getDateInterval(),\n                $period->getOptions()\n            );\n        }\n\n        if ($period instanceof DatePeriod) {\n            return new static(\n                $period->start,\n                $period->end ?: ($period->recurrences - 1),\n                $period->interval,\n                $period->include_start_date ? 0 : static::EXCLUDE_START_DATE\n            );\n        }\n\n        $class = static::class;\n        $type = \\gettype($period);\n\n        throw new NotAPeriodException(\n            'Argument 1 passed to '.$class.'::'.__METHOD__.'() '.\n            'must be an instance of DatePeriod or '.$class.', '.\n            ($type === 'object' ? 'instance of '.\\get_class($period) : $type).' given.'\n        );\n    }\n\n    /**\n     * Create a new instance.\n     *\n     * @return static\n     */\n    public static function create(...$params)\n    {\n        return static::createFromArray($params);\n    }\n\n    /**\n     * Create a new instance from an array of parameters.\n     *\n     * @param array $params\n     *\n     * @return static\n     */\n    public static function createFromArray(array $params)\n    {\n        return new static(...$params);\n    }\n\n    /**\n     * Create CarbonPeriod from ISO 8601 string.\n     *\n     * @param string   $iso\n     * @param int|null $options\n     *\n     * @return static\n     */\n    public static function createFromIso($iso, $options = null)\n    {\n        $params = static::parseIso8601($iso);\n\n        $instance = static::createFromArray($params);\n\n        if ($options !== null) {\n            $instance->setOptions($options);\n        }\n\n        return $instance;\n    }\n\n    /**\n     * Return whether given interval contains non zero value of any time unit.\n     *\n     * @param \\DateInterval $interval\n     *\n     * @return bool\n     */\n    protected static function intervalHasTime(DateInterval $interval)\n    {\n        return $interval->h || $interval->i || $interval->s || $interval->f;\n    }\n\n    /**\n     * Return whether given variable is an ISO 8601 specification.\n     *\n     * Note: Check is very basic, as actual validation will be done later when parsing.\n     * We just want to ensure that variable is not any other type of a valid parameter.\n     *\n     * @param mixed $var\n     *\n     * @return bool\n     */\n    protected static function isIso8601($var)\n    {\n        if (!\\is_string($var)) {\n            return false;\n        }\n\n        // Match slash but not within a timezone name.\n        $part = '[a-z]+(?:[_-][a-z]+)*';\n\n        preg_match(\"#\\b$part/$part\\b|(/)#i\", $var, $match);\n\n        return isset($match[1]);\n    }\n\n    /**\n     * Parse given ISO 8601 string into an array of arguments.\n     *\n     * @SuppressWarnings(PHPMD.ElseExpression)\n     *\n     * @param string $iso\n     *\n     * @return array\n     */\n    protected static function parseIso8601($iso)\n    {\n        $result = [];\n\n        $interval = null;\n        $start = null;\n        $end = null;\n        $dateClass = static::DEFAULT_DATE_CLASS;\n\n        foreach (explode('/', $iso) as $key => $part) {\n            if ($key === 0 && preg_match('/^R(\\d*|INF)$/', $part, $match)) {\n                $parsed = \\strlen($match[1]) ? (($match[1] !== 'INF') ? (int) $match[1] : INF) : null;\n            } elseif ($interval === null && $parsed = CarbonInterval::make($part)) {\n                $interval = $part;\n            } elseif ($start === null && $parsed = $dateClass::make($part)) {\n                $start = $part;\n            } elseif ($end === null && $parsed = $dateClass::make(static::addMissingParts($start ?? '', $part))) {\n                $end = $part;\n            } else {\n                throw new InvalidPeriodParameterException(\"Invalid ISO 8601 specification: $iso.\");\n            }\n\n            $result[] = $parsed;\n        }\n\n        return $result;\n    }\n\n    /**\n     * Add missing parts of the target date from the source date.\n     *\n     * @param string $source\n     * @param string $target\n     *\n     * @return string\n     */\n    protected static function addMissingParts($source, $target)\n    {\n        $pattern = '/'.preg_replace('/\\d+/', '[0-9]+', preg_quote($target, '/')).'$/';\n\n        $result = preg_replace($pattern, $target, $source, 1, $count);\n\n        return $count ? $result : $target;\n    }\n\n    /**\n     * Register a custom macro.\n     *\n     * @example\n     * ```\n     * CarbonPeriod::macro('middle', function () {\n     *   return $this->getStartDate()->average($this->getEndDate());\n     * });\n     * echo CarbonPeriod::since('2011-05-12')->until('2011-06-03')->middle();\n     * ```\n     *\n     * @param string          $name\n     * @param object|callable $macro\n     *\n     * @return void\n     */\n    public static function macro($name, $macro)\n    {\n        static::$macros[$name] = $macro;\n    }\n\n    /**\n     * Register macros from a mixin object.\n     *\n     * @example\n     * ```\n     * CarbonPeriod::mixin(new class {\n     *   public function addDays() {\n     *     return function ($count = 1) {\n     *       return $this->setStartDate(\n     *         $this->getStartDate()->addDays($count)\n     *       )->setEndDate(\n     *         $this->getEndDate()->addDays($count)\n     *       );\n     *     };\n     *   }\n     *   public function subDays() {\n     *     return function ($count = 1) {\n     *       return $this->setStartDate(\n     *         $this->getStartDate()->subDays($count)\n     *       )->setEndDate(\n     *         $this->getEndDate()->subDays($count)\n     *       );\n     *     };\n     *   }\n     * });\n     * echo CarbonPeriod::create('2000-01-01', '2000-02-01')->addDays(5)->subDays(3);\n     * ```\n     *\n     * @param object|string $mixin\n     *\n     * @throws ReflectionException\n     *\n     * @return void\n     */\n    public static function mixin($mixin)\n    {\n        static::baseMixin($mixin);\n    }\n\n    /**\n     * Check if macro is registered.\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public static function hasMacro($name)\n    {\n        return isset(static::$macros[$name]);\n    }\n\n    /**\n     * Provide static proxy for instance aliases.\n     *\n     * @param string $method\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    public static function __callStatic($method, $parameters)\n    {\n        $date = new static();\n\n        if (static::hasMacro($method)) {\n            return static::bindMacroContext(null, function () use (&$method, &$parameters, &$date) {\n                return $date->callMacro($method, $parameters);\n            });\n        }\n\n        return $date->$method(...$parameters);\n    }\n\n    /**\n     * CarbonPeriod constructor.\n     *\n     * @SuppressWarnings(PHPMD.ElseExpression)\n     *\n     * @throws InvalidArgumentException\n     */\n    public function __construct(...$arguments)\n    {\n        if (is_a($this->dateClass, DateTimeImmutable::class, true)) {\n            $this->options = static::IMMUTABLE;\n        }\n\n        // Parse and assign arguments one by one. First argument may be an ISO 8601 spec,\n        // which will be first parsed into parts and then processed the same way.\n\n        $argumentsCount = \\count($arguments);\n\n        if ($argumentsCount && static::isIso8601($iso = $arguments[0])) {\n            array_splice($arguments, 0, 1, static::parseIso8601($iso));\n        }\n\n        if ($argumentsCount === 1) {\n            if ($arguments[0] instanceof DatePeriod) {\n                $arguments = [\n                    $arguments[0]->start,\n                    $arguments[0]->end ?: ($arguments[0]->recurrences - 1),\n                    $arguments[0]->interval,\n                    $arguments[0]->include_start_date ? 0 : static::EXCLUDE_START_DATE,\n                ];\n            } elseif ($arguments[0] instanceof self) {\n                $arguments = [\n                    $arguments[0]->getStartDate(),\n                    $arguments[0]->getEndDate() ?: $arguments[0]->getRecurrences(),\n                    $arguments[0]->getDateInterval(),\n                    $arguments[0]->getOptions(),\n                ];\n            }\n        }\n\n        $optionsSet = false;\n\n        foreach ($arguments as $argument) {\n            $parsedDate = null;\n\n            if ($argument instanceof DateTimeZone) {\n                $this->setTimezone($argument);\n            } elseif ($this->dateInterval === null &&\n                (\n                    (\\is_string($argument) && preg_match(\n                        '/^(-?\\d(\\d(?![\\/-])|[^\\d\\/-]([\\/-])?)*|P[T\\d].*|(?:\\h*\\d+(?:\\.\\d+)?\\h*[a-z]+)+)$/i',\n                        $argument\n                    )) ||\n                    $argument instanceof DateInterval ||\n                    $argument instanceof Closure\n                ) &&\n                $parsedInterval = @CarbonInterval::make($argument)\n            ) {\n                $this->setDateInterval($parsedInterval);\n            } elseif ($this->startDate === null && $parsedDate = $this->makeDateTime($argument)) {\n                $this->setStartDate($parsedDate);\n            } elseif ($this->endDate === null && ($parsedDate = $parsedDate ?? $this->makeDateTime($argument))) {\n                $this->setEndDate($parsedDate);\n            } elseif ($this->recurrences === null && $this->endDate === null && is_numeric($argument)) {\n                $this->setRecurrences($argument);\n            } elseif (!$optionsSet && (\\is_int($argument) || $argument === null)) {\n                $optionsSet = true;\n                $this->setOptions(((int) $this->options) | ((int) $argument));\n            } else {\n                throw new InvalidPeriodParameterException('Invalid constructor parameters.');\n            }\n        }\n\n        if ($this->startDate === null) {\n            $dateClass = $this->dateClass;\n            $this->setStartDate($dateClass::now());\n        }\n\n        if ($this->dateInterval === null) {\n            $this->setDateInterval(CarbonInterval::day());\n\n            $this->isDefaultInterval = true;\n        }\n\n        if ($this->options === null) {\n            $this->setOptions(0);\n        }\n\n        $this->constructed = true;\n    }\n\n    /**\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function copy()\n    {\n        return clone $this;\n    }\n\n    /**\n     * Prepare the instance to be set (self if mutable to be mutated,\n     * copy if immutable to generate a new instance).\n     *\n     * @return static\n     */\n    protected function copyIfImmutable()\n    {\n        return $this;\n    }\n\n    /**\n     * Get the getter for a property allowing both `DatePeriod` snakeCase and camelCase names.\n     *\n     * @param string $name\n     *\n     * @return callable|null\n     */\n    protected function getGetter(string $name)\n    {\n        switch (strtolower(preg_replace('/[A-Z]/', '_$0', $name))) {\n            case 'start':\n            case 'start_date':\n                return [$this, 'getStartDate'];\n            case 'end':\n            case 'end_date':\n                return [$this, 'getEndDate'];\n            case 'interval':\n            case 'date_interval':\n                return [$this, 'getDateInterval'];\n            case 'recurrences':\n                return [$this, 'getRecurrences'];\n            case 'include_start_date':\n                return [$this, 'isStartIncluded'];\n            case 'include_end_date':\n                return [$this, 'isEndIncluded'];\n            case 'current':\n                return [$this, 'current'];\n            default:\n                return null;\n        }\n    }\n\n    /**\n     * Get a property allowing both `DatePeriod` snakeCase and camelCase names.\n     *\n     * @param string $name\n     *\n     * @return bool|CarbonInterface|CarbonInterval|int|null\n     */\n    public function get(string $name)\n    {\n        $getter = $this->getGetter($name);\n\n        if ($getter) {\n            return $getter();\n        }\n\n        throw new UnknownGetterException($name);\n    }\n\n    /**\n     * Get a property allowing both `DatePeriod` snakeCase and camelCase names.\n     *\n     * @param string $name\n     *\n     * @return bool|CarbonInterface|CarbonInterval|int|null\n     */\n    public function __get(string $name)\n    {\n        return $this->get($name);\n    }\n\n    /**\n     * Check if an attribute exists on the object\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public function __isset(string $name): bool\n    {\n        return $this->getGetter($name) !== null;\n    }\n\n    /**\n     * @alias copy\n     *\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function clone()\n    {\n        return clone $this;\n    }\n\n    /**\n     * Set the iteration item class.\n     *\n     * @param string $dateClass\n     *\n     * @return static\n     */\n    public function setDateClass(string $dateClass)\n    {\n        if (!is_a($dateClass, CarbonInterface::class, true)) {\n            throw new NotACarbonClassException($dateClass);\n        }\n\n        $self = $this->copyIfImmutable();\n        $self->dateClass = $dateClass;\n\n        if (is_a($dateClass, Carbon::class, true)) {\n            $self->options = $self->options & ~static::IMMUTABLE;\n        } elseif (is_a($dateClass, CarbonImmutable::class, true)) {\n            $self->options = $self->options | static::IMMUTABLE;\n        }\n\n        return $self;\n    }\n\n    /**\n     * Returns iteration item date class.\n     *\n     * @return string\n     */\n    public function getDateClass(): string\n    {\n        return $this->dateClass;\n    }\n\n    /**\n     * Change the period date interval.\n     *\n     * @param DateInterval|string $interval\n     *\n     * @throws InvalidIntervalException\n     *\n     * @return static\n     */\n    public function setDateInterval($interval)\n    {\n        if (!$interval = CarbonInterval::make($interval)) {\n            throw new InvalidIntervalException('Invalid interval.');\n        }\n\n        if ($interval->spec() === 'PT0S' && !$interval->f && !$interval->getStep()) {\n            throw new InvalidIntervalException('Empty interval is not accepted.');\n        }\n\n        $self = $this->copyIfImmutable();\n        $self->dateInterval = $interval;\n\n        $self->isDefaultInterval = false;\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Invert the period date interval.\n     *\n     * @return static\n     */\n    public function invertDateInterval()\n    {\n        return $this->setDateInterval($this->dateInterval->invert());\n    }\n\n    /**\n     * Set start and end date.\n     *\n     * @param DateTime|DateTimeInterface|string      $start\n     * @param DateTime|DateTimeInterface|string|null $end\n     *\n     * @return static\n     */\n    public function setDates($start, $end)\n    {\n        return $this->setStartDate($start)->setEndDate($end);\n    }\n\n    /**\n     * Change the period options.\n     *\n     * @param int|null $options\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return static\n     */\n    public function setOptions($options)\n    {\n        if (!\\is_int($options) && $options !== null) {\n            throw new InvalidPeriodParameterException('Invalid options.');\n        }\n\n        $self = $this->copyIfImmutable();\n        $self->options = $options ?: 0;\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Get the period options.\n     *\n     * @return int\n     */\n    public function getOptions()\n    {\n        return $this->options;\n    }\n\n    /**\n     * Toggle given options on or off.\n     *\n     * @param int       $options\n     * @param bool|null $state\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return static\n     */\n    public function toggleOptions($options, $state = null)\n    {\n        if ($state === null) {\n            $state = ($this->options & $options) !== $options;\n        }\n\n        return $this->setOptions(\n            $state ?\n            $this->options | $options :\n            $this->options & ~$options\n        );\n    }\n\n    /**\n     * Toggle EXCLUDE_START_DATE option.\n     *\n     * @param bool $state\n     *\n     * @return static\n     */\n    public function excludeStartDate($state = true)\n    {\n        return $this->toggleOptions(static::EXCLUDE_START_DATE, $state);\n    }\n\n    /**\n     * Toggle EXCLUDE_END_DATE option.\n     *\n     * @param bool $state\n     *\n     * @return static\n     */\n    public function excludeEndDate($state = true)\n    {\n        return $this->toggleOptions(static::EXCLUDE_END_DATE, $state);\n    }\n\n    /**\n     * Get the underlying date interval.\n     *\n     * @return CarbonInterval\n     */\n    public function getDateInterval()\n    {\n        return $this->dateInterval->copy();\n    }\n\n    /**\n     * Get start date of the period.\n     *\n     * @param string|null $rounding Optional rounding 'floor', 'ceil', 'round' using the period interval.\n     *\n     * @return CarbonInterface\n     */\n    public function getStartDate(string $rounding = null)\n    {\n        $date = $this->startDate->avoidMutation();\n\n        return $rounding ? $date->round($this->getDateInterval(), $rounding) : $date;\n    }\n\n    /**\n     * Get end date of the period.\n     *\n     * @param string|null $rounding Optional rounding 'floor', 'ceil', 'round' using the period interval.\n     *\n     * @return CarbonInterface|null\n     */\n    public function getEndDate(string $rounding = null)\n    {\n        if (!$this->endDate) {\n            return null;\n        }\n\n        $date = $this->endDate->avoidMutation();\n\n        return $rounding ? $date->round($this->getDateInterval(), $rounding) : $date;\n    }\n\n    /**\n     * Get number of recurrences.\n     *\n     * @return int|float|null\n     */\n    public function getRecurrences()\n    {\n        return $this->recurrences;\n    }\n\n    /**\n     * Returns true if the start date should be excluded.\n     *\n     * @return bool\n     */\n    public function isStartExcluded()\n    {\n        return ($this->options & static::EXCLUDE_START_DATE) !== 0;\n    }\n\n    /**\n     * Returns true if the end date should be excluded.\n     *\n     * @return bool\n     */\n    public function isEndExcluded()\n    {\n        return ($this->options & static::EXCLUDE_END_DATE) !== 0;\n    }\n\n    /**\n     * Returns true if the start date should be included.\n     *\n     * @return bool\n     */\n    public function isStartIncluded()\n    {\n        return !$this->isStartExcluded();\n    }\n\n    /**\n     * Returns true if the end date should be included.\n     *\n     * @return bool\n     */\n    public function isEndIncluded()\n    {\n        return !$this->isEndExcluded();\n    }\n\n    /**\n     * Return the start if it's included by option, else return the start + 1 period interval.\n     *\n     * @return CarbonInterface\n     */\n    public function getIncludedStartDate()\n    {\n        $start = $this->getStartDate();\n\n        if ($this->isStartExcluded()) {\n            return $start->add($this->getDateInterval());\n        }\n\n        return $start;\n    }\n\n    /**\n     * Return the end if it's included by option, else return the end - 1 period interval.\n     * Warning: if the period has no fixed end, this method will iterate the period to calculate it.\n     *\n     * @return CarbonInterface\n     */\n    public function getIncludedEndDate()\n    {\n        $end = $this->getEndDate();\n\n        if (!$end) {\n            return $this->calculateEnd();\n        }\n\n        if ($this->isEndExcluded()) {\n            return $end->sub($this->getDateInterval());\n        }\n\n        return $end;\n    }\n\n    /**\n     * Add a filter to the stack.\n     *\n     * @SuppressWarnings(PHPMD.UnusedFormalParameter)\n     *\n     * @param callable $callback\n     * @param string   $name\n     *\n     * @return static\n     */\n    public function addFilter($callback, $name = null)\n    {\n        $self = $this->copyIfImmutable();\n        $tuple = $self->createFilterTuple(\\func_get_args());\n\n        $self->filters[] = $tuple;\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Prepend a filter to the stack.\n     *\n     * @SuppressWarnings(PHPMD.UnusedFormalParameter)\n     *\n     * @param callable $callback\n     * @param string   $name\n     *\n     * @return static\n     */\n    public function prependFilter($callback, $name = null)\n    {\n        $self = $this->copyIfImmutable();\n        $tuple = $self->createFilterTuple(\\func_get_args());\n\n        array_unshift($self->filters, $tuple);\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Remove a filter by instance or name.\n     *\n     * @param callable|string $filter\n     *\n     * @return static\n     */\n    public function removeFilter($filter)\n    {\n        $self = $this->copyIfImmutable();\n        $key = \\is_callable($filter) ? 0 : 1;\n\n        $self->filters = array_values(array_filter(\n            $this->filters,\n            function ($tuple) use ($key, $filter) {\n                return $tuple[$key] !== $filter;\n            }\n        ));\n\n        $self->updateInternalState();\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Return whether given instance or name is in the filter stack.\n     *\n     * @param callable|string $filter\n     *\n     * @return bool\n     */\n    public function hasFilter($filter)\n    {\n        $key = \\is_callable($filter) ? 0 : 1;\n\n        foreach ($this->filters as $tuple) {\n            if ($tuple[$key] === $filter) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Get filters stack.\n     *\n     * @return array\n     */\n    public function getFilters()\n    {\n        return $this->filters;\n    }\n\n    /**\n     * Set filters stack.\n     *\n     * @param array $filters\n     *\n     * @return static\n     */\n    public function setFilters(array $filters)\n    {\n        $self = $this->copyIfImmutable();\n        $self->filters = $filters;\n\n        $self->updateInternalState();\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Reset filters stack.\n     *\n     * @return static\n     */\n    public function resetFilters()\n    {\n        $self = $this->copyIfImmutable();\n        $self->filters = [];\n\n        if ($self->endDate !== null) {\n            $self->filters[] = [static::END_DATE_FILTER, null];\n        }\n\n        if ($self->recurrences !== null) {\n            $self->filters[] = [static::RECURRENCES_FILTER, null];\n        }\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Add a recurrences filter (set maximum number of recurrences).\n     *\n     * @param int|float|null $recurrences\n     *\n     * @throws InvalidArgumentException\n     *\n     * @return static\n     */\n    public function setRecurrences($recurrences)\n    {\n        if ((!is_numeric($recurrences) && $recurrences !== null) || $recurrences < 0) {\n            throw new InvalidPeriodParameterException('Invalid number of recurrences.');\n        }\n\n        if ($recurrences === null) {\n            return $this->removeFilter(static::RECURRENCES_FILTER);\n        }\n\n        /** @var self $self */\n        $self = $this->copyIfImmutable();\n        $self->recurrences = $recurrences === INF ? INF : (int) $recurrences;\n\n        if (!$self->hasFilter(static::RECURRENCES_FILTER)) {\n            return $self->addFilter(static::RECURRENCES_FILTER);\n        }\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Change the period start date.\n     *\n     * @param DateTime|DateTimeInterface|string $date\n     * @param bool|null                         $inclusive\n     *\n     * @throws InvalidPeriodDateException\n     *\n     * @return static\n     */\n    public function setStartDate($date, $inclusive = null)\n    {\n        if (!$this->isInfiniteDate($date) && !($date = ([$this->dateClass, 'make'])($date))) {\n            throw new InvalidPeriodDateException('Invalid start date.');\n        }\n\n        $self = $this->copyIfImmutable();\n        $self->startDate = $date;\n\n        if ($inclusive !== null) {\n            $self = $self->toggleOptions(static::EXCLUDE_START_DATE, !$inclusive);\n        }\n\n        return $self;\n    }\n\n    /**\n     * Change the period end date.\n     *\n     * @param DateTime|DateTimeInterface|string|null $date\n     * @param bool|null                              $inclusive\n     *\n     * @throws \\InvalidArgumentException\n     *\n     * @return static\n     */\n    public function setEndDate($date, $inclusive = null)\n    {\n        if ($date !== null && !$this->isInfiniteDate($date) && !$date = ([$this->dateClass, 'make'])($date)) {\n            throw new InvalidPeriodDateException('Invalid end date.');\n        }\n\n        if (!$date) {\n            return $this->removeFilter(static::END_DATE_FILTER);\n        }\n\n        $self = $this->copyIfImmutable();\n        $self->endDate = $date;\n\n        if ($inclusive !== null) {\n            $self = $self->toggleOptions(static::EXCLUDE_END_DATE, !$inclusive);\n        }\n\n        if (!$self->hasFilter(static::END_DATE_FILTER)) {\n            return $self->addFilter(static::END_DATE_FILTER);\n        }\n\n        $self->handleChangedParameters();\n\n        return $self;\n    }\n\n    /**\n     * Check if the current position is valid.\n     *\n     * @return bool\n     */\n    #[ReturnTypeWillChange]\n    public function valid()\n    {\n        return $this->validateCurrentDate() === true;\n    }\n\n    /**\n     * Return the current key.\n     *\n     * @return int|null\n     */\n    #[ReturnTypeWillChange]\n    public function key()\n    {\n        return $this->valid()\n            ? $this->key\n            : null;\n    }\n\n    /**\n     * Return the current date.\n     *\n     * @return CarbonInterface|null\n     */\n    #[ReturnTypeWillChange]\n    public function current()\n    {\n        return $this->valid()\n            ? $this->prepareForReturn($this->current)\n            : null;\n    }\n\n    /**\n     * Move forward to the next date.\n     *\n     * @throws RuntimeException\n     *\n     * @return void\n     */\n    #[ReturnTypeWillChange]\n    public function next()\n    {\n        if ($this->current === null) {\n            $this->rewind();\n        }\n\n        if ($this->validationResult !== static::END_ITERATION) {\n            $this->key++;\n\n            $this->incrementCurrentDateUntilValid();\n        }\n    }\n\n    /**\n     * Rewind to the start date.\n     *\n     * Iterating over a date in the UTC timezone avoids bug during backward DST change.\n     *\n     * @see https://bugs.php.net/bug.php?id=72255\n     * @see https://bugs.php.net/bug.php?id=74274\n     * @see https://wiki.php.net/rfc/datetime_and_daylight_saving_time\n     *\n     * @throws RuntimeException\n     *\n     * @return void\n     */\n    #[ReturnTypeWillChange]\n    public function rewind()\n    {\n        $this->key = 0;\n        $this->current = ([$this->dateClass, 'make'])($this->startDate);\n        $settings = $this->getSettings();\n\n        if ($this->hasLocalTranslator()) {\n            $settings['locale'] = $this->getTranslatorLocale();\n        }\n\n        $this->current->settings($settings);\n        $this->timezone = static::intervalHasTime($this->dateInterval) ? $this->current->getTimezone() : null;\n\n        if ($this->timezone) {\n            $this->current = $this->current->utc();\n        }\n\n        $this->validationResult = null;\n\n        if ($this->isStartExcluded() || $this->validateCurrentDate() === false) {\n            $this->incrementCurrentDateUntilValid();\n        }\n    }\n\n    /**\n     * Skip iterations and returns iteration state (false if ended, true if still valid).\n     *\n     * @param int $count steps number to skip (1 by default)\n     *\n     * @return bool\n     */\n    public function skip($count = 1)\n    {\n        for ($i = $count; $this->valid() && $i > 0; $i--) {\n            $this->next();\n        }\n\n        return $this->valid();\n    }\n\n    /**\n     * Format the date period as ISO 8601.\n     *\n     * @return string\n     */\n    public function toIso8601String()\n    {\n        $parts = [];\n\n        if ($this->recurrences !== null) {\n            $parts[] = 'R'.$this->recurrences;\n        }\n\n        $parts[] = $this->startDate->toIso8601String();\n\n        $parts[] = $this->dateInterval->spec();\n\n        if ($this->endDate !== null) {\n            $parts[] = $this->endDate->toIso8601String();\n        }\n\n        return implode('/', $parts);\n    }\n\n    /**\n     * Convert the date period into a string.\n     *\n     * @return string\n     */\n    public function toString()\n    {\n        $format = $this->localToStringFormat ?? static::$toStringFormat;\n\n        if ($format instanceof Closure) {\n            return $format($this);\n        }\n\n        $translator = ([$this->dateClass, 'getTranslator'])();\n\n        $parts = [];\n\n        $format = $format ?? (\n            !$this->startDate->isStartOfDay() || ($this->endDate && !$this->endDate->isStartOfDay())\n                ? 'Y-m-d H:i:s'\n                : 'Y-m-d'\n        );\n\n        if ($this->recurrences !== null) {\n            $parts[] = $this->translate('period_recurrences', [], $this->recurrences, $translator);\n        }\n\n        $parts[] = $this->translate('period_interval', [':interval' => $this->dateInterval->forHumans([\n            'join' => true,\n        ])], null, $translator);\n\n        $parts[] = $this->translate('period_start_date', [':date' => $this->startDate->rawFormat($format)], null, $translator);\n\n        if ($this->endDate !== null) {\n            $parts[] = $this->translate('period_end_date', [':date' => $this->endDate->rawFormat($format)], null, $translator);\n        }\n\n        $result = implode(' ', $parts);\n\n        return mb_strtoupper(mb_substr($result, 0, 1)).mb_substr($result, 1);\n    }\n\n    /**\n     * Format the date period as ISO 8601.\n     *\n     * @return string\n     */\n    public function spec()\n    {\n        return $this->toIso8601String();\n    }\n\n    /**\n     * Cast the current instance into the given class.\n     *\n     * @param string $className The $className::instance() method will be called to cast the current object.\n     *\n     * @return DatePeriod\n     */\n    public function cast(string $className)\n    {\n        if (!method_exists($className, 'instance')) {\n            if (is_a($className, DatePeriod::class, true)) {\n                return new $className(\n                    $this->rawDate($this->getStartDate()),\n                    $this->getDateInterval(),\n                    $this->getEndDate() ? $this->rawDate($this->getIncludedEndDate()) : $this->getRecurrences(),\n                    $this->isStartExcluded() ? DatePeriod::EXCLUDE_START_DATE : 0\n                );\n            }\n\n            throw new InvalidCastException(\"$className has not the instance() method needed to cast the date.\");\n        }\n\n        return $className::instance($this);\n    }\n\n    /**\n     * Return native DatePeriod PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(CarbonPeriod::create('2021-01-05', '2021-02-15')->toDatePeriod());\n     * ```\n     *\n     * @return DatePeriod\n     */\n    public function toDatePeriod()\n    {\n        return $this->cast(DatePeriod::class);\n    }\n\n    /**\n     * Return `true` if the period has no custom filter and is guaranteed to be endless.\n     *\n     * Note that we can't check if a period is endless as soon as it has custom filters\n     * because filters can emit `CarbonPeriod::END_ITERATION` to stop the iteration in\n     * a way we can't predict without actually iterating the period.\n     */\n    public function isUnfilteredAndEndLess(): bool\n    {\n        foreach ($this->filters as $filter) {\n            switch ($filter) {\n                case [static::RECURRENCES_FILTER, null]:\n                    if ($this->recurrences !== null && is_finite($this->recurrences)) {\n                        return false;\n                    }\n\n                    break;\n\n                case [static::END_DATE_FILTER, null]:\n                    if ($this->endDate !== null && !$this->endDate->isEndOfTime()) {\n                        return false;\n                    }\n\n                    break;\n\n                default:\n                    return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Convert the date period into an array without changing current iteration state.\n     *\n     * @return CarbonInterface[]\n     */\n    public function toArray()\n    {\n        if ($this->isUnfilteredAndEndLess()) {\n            throw new EndLessPeriodException(\"Endless period can't be converted to array nor counted.\");\n        }\n\n        $state = [\n            $this->key,\n            $this->current ? $this->current->avoidMutation() : null,\n            $this->validationResult,\n        ];\n\n        $result = iterator_to_array($this);\n\n        [$this->key, $this->current, $this->validationResult] = $state;\n\n        return $result;\n    }\n\n    /**\n     * Count dates in the date period.\n     *\n     * @return int\n     */\n    #[ReturnTypeWillChange]\n    public function count()\n    {\n        return \\count($this->toArray());\n    }\n\n    /**\n     * Return the first date in the date period.\n     *\n     * @return CarbonInterface|null\n     */\n    public function first()\n    {\n        if ($this->isUnfilteredAndEndLess()) {\n            foreach ($this as $date) {\n                $this->rewind();\n\n                return $date;\n            }\n\n            return null;\n        }\n\n        return ($this->toArray() ?: [])[0] ?? null;\n    }\n\n    /**\n     * Return the last date in the date period.\n     *\n     * @return CarbonInterface|null\n     */\n    public function last()\n    {\n        $array = $this->toArray();\n\n        return $array ? $array[\\count($array) - 1] : null;\n    }\n\n    /**\n     * Convert the date period into a string.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->toString();\n    }\n\n    /**\n     * Add aliases for setters.\n     *\n     * CarbonPeriod::days(3)->hours(5)->invert()\n     *     ->sinceNow()->until('2010-01-10')\n     *     ->filter(...)\n     *     ->count()\n     *\n     * Note: We use magic method to let static and instance aliases with the same names.\n     *\n     * @param string $method\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        if (static::hasMacro($method)) {\n            return static::bindMacroContext($this, function () use (&$method, &$parameters) {\n                return $this->callMacro($method, $parameters);\n            });\n        }\n\n        $roundedValue = $this->callRoundMethod($method, $parameters);\n\n        if ($roundedValue !== null) {\n            return $roundedValue;\n        }\n\n        switch ($method) {\n            case 'start':\n            case 'since':\n                self::setDefaultParameters($parameters, [\n                    [0, 'date', null],\n                ]);\n\n                return $this->setStartDate(...$parameters);\n\n            case 'sinceNow':\n                return $this->setStartDate(new Carbon(), ...$parameters);\n\n            case 'end':\n            case 'until':\n                self::setDefaultParameters($parameters, [\n                    [0, 'date', null],\n                ]);\n\n                return $this->setEndDate(...$parameters);\n\n            case 'untilNow':\n                return $this->setEndDate(new Carbon(), ...$parameters);\n\n            case 'dates':\n            case 'between':\n                self::setDefaultParameters($parameters, [\n                    [0, 'start', null],\n                    [1, 'end', null],\n                ]);\n\n                return $this->setDates(...$parameters);\n\n            case 'recurrences':\n            case 'times':\n                self::setDefaultParameters($parameters, [\n                    [0, 'recurrences', null],\n                ]);\n\n                return $this->setRecurrences(...$parameters);\n\n            case 'options':\n                self::setDefaultParameters($parameters, [\n                    [0, 'options', null],\n                ]);\n\n                return $this->setOptions(...$parameters);\n\n            case 'toggle':\n                self::setDefaultParameters($parameters, [\n                    [0, 'options', null],\n                ]);\n\n                return $this->toggleOptions(...$parameters);\n\n            case 'filter':\n            case 'push':\n                return $this->addFilter(...$parameters);\n\n            case 'prepend':\n                return $this->prependFilter(...$parameters);\n\n            case 'filters':\n                self::setDefaultParameters($parameters, [\n                    [0, 'filters', []],\n                ]);\n\n                return $this->setFilters(...$parameters);\n\n            case 'interval':\n            case 'each':\n            case 'every':\n            case 'step':\n            case 'stepBy':\n                return $this->setDateInterval(...$parameters);\n\n            case 'invert':\n                return $this->invertDateInterval();\n\n            case 'years':\n            case 'year':\n            case 'months':\n            case 'month':\n            case 'weeks':\n            case 'week':\n            case 'days':\n            case 'dayz':\n            case 'day':\n            case 'hours':\n            case 'hour':\n            case 'minutes':\n            case 'minute':\n            case 'seconds':\n            case 'second':\n            case 'milliseconds':\n            case 'millisecond':\n            case 'microseconds':\n            case 'microsecond':\n                return $this->setDateInterval((\n                    // Override default P1D when instantiating via fluent setters.\n                    [$this->isDefaultInterval ? new CarbonInterval('PT0S') : $this->dateInterval, $method]\n                )(...$parameters));\n        }\n\n        $dateClass = $this->dateClass;\n\n        if ($this->localStrictModeEnabled ?? $dateClass::isStrictModeEnabled()) {\n            throw new UnknownMethodException($method);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Set the instance's timezone from a string or object and apply it to start/end.\n     *\n     * @param \\DateTimeZone|string $timezone\n     *\n     * @return static\n     */\n    public function setTimezone($timezone)\n    {\n        $self = $this->copyIfImmutable();\n        $self->tzName = $timezone;\n        $self->timezone = $timezone;\n\n        if ($self->startDate) {\n            $self = $self->setStartDate($self->startDate->setTimezone($timezone));\n        }\n\n        if ($self->endDate) {\n            $self = $self->setEndDate($self->endDate->setTimezone($timezone));\n        }\n\n        return $self;\n    }\n\n    /**\n     * Set the instance's timezone from a string or object and add/subtract the offset difference to start/end.\n     *\n     * @param \\DateTimeZone|string $timezone\n     *\n     * @return static\n     */\n    public function shiftTimezone($timezone)\n    {\n        $self = $this->copyIfImmutable();\n        $self->tzName = $timezone;\n        $self->timezone = $timezone;\n\n        if ($self->startDate) {\n            $self = $self->setStartDate($self->startDate->shiftTimezone($timezone));\n        }\n\n        if ($self->endDate) {\n            $self = $self->setEndDate($self->endDate->shiftTimezone($timezone));\n        }\n\n        return $self;\n    }\n\n    /**\n     * Returns the end is set, else calculated from start an recurrences.\n     *\n     * @param string|null $rounding Optional rounding 'floor', 'ceil', 'round' using the period interval.\n     *\n     * @return CarbonInterface\n     */\n    public function calculateEnd(string $rounding = null)\n    {\n        if ($end = $this->getEndDate($rounding)) {\n            return $end;\n        }\n\n        if ($this->dateInterval->isEmpty()) {\n            return $this->getStartDate($rounding);\n        }\n\n        $date = $this->getEndFromRecurrences() ?? $this->iterateUntilEnd();\n\n        if ($date && $rounding) {\n            $date = $date->avoidMutation()->round($this->getDateInterval(), $rounding);\n        }\n\n        return $date;\n    }\n\n    /**\n     * @return CarbonInterface|null\n     */\n    private function getEndFromRecurrences()\n    {\n        if ($this->recurrences === null) {\n            throw new UnreachableException(\n                \"Could not calculate period end without either explicit end or recurrences.\\n\".\n                \"If you're looking for a forever-period, use ->setRecurrences(INF).\"\n            );\n        }\n\n        if ($this->recurrences === INF) {\n            $start = $this->getStartDate();\n\n            return $start < $start->avoidMutation()->add($this->getDateInterval())\n                ? CarbonImmutable::endOfTime()\n                : CarbonImmutable::startOfTime();\n        }\n\n        if ($this->filters === [[static::RECURRENCES_FILTER, null]]) {\n            return $this->getStartDate()->avoidMutation()->add(\n                $this->getDateInterval()->times(\n                    $this->recurrences - ($this->isStartExcluded() ? 0 : 1)\n                )\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * @return CarbonInterface|null\n     */\n    private function iterateUntilEnd()\n    {\n        $attempts = 0;\n        $date = null;\n\n        foreach ($this as $date) {\n            if (++$attempts > static::END_MAX_ATTEMPTS) {\n                throw new UnreachableException(\n                    'Could not calculate period end after iterating '.static::END_MAX_ATTEMPTS.' times.'\n                );\n            }\n        }\n\n        return $date;\n    }\n\n    /**\n     * Returns true if the current period overlaps the given one (if 1 parameter passed)\n     * or the period between 2 dates (if 2 parameters passed).\n     *\n     * @param CarbonPeriod|\\DateTimeInterface|Carbon|CarbonImmutable|string $rangeOrRangeStart\n     * @param \\DateTimeInterface|Carbon|CarbonImmutable|string|null         $rangeEnd\n     *\n     * @return bool\n     */\n    public function overlaps($rangeOrRangeStart, $rangeEnd = null)\n    {\n        $range = $rangeEnd ? static::create($rangeOrRangeStart, $rangeEnd) : $rangeOrRangeStart;\n\n        if (!($range instanceof self)) {\n            $range = static::create($range);\n        }\n\n        [$start, $end] = $this->orderCouple($this->getStartDate(), $this->calculateEnd());\n        [$rangeStart, $rangeEnd] = $this->orderCouple($range->getStartDate(), $range->calculateEnd());\n\n        return $end > $rangeStart && $rangeEnd > $start;\n    }\n\n    /**\n     * Execute a given function on each date of the period.\n     *\n     * @example\n     * ```\n     * Carbon::create('2020-11-29')->daysUntil('2020-12-24')->forEach(function (Carbon $date) {\n     *   echo $date->diffInDays('2020-12-25').\" days before Christmas!\\n\";\n     * });\n     * ```\n     *\n     * @param callable $callback\n     */\n    public function forEach(callable $callback)\n    {\n        foreach ($this as $date) {\n            $callback($date);\n        }\n    }\n\n    /**\n     * Execute a given function on each date of the period and yield the result of this function.\n     *\n     * @example\n     * ```\n     * $period = Carbon::create('2020-11-29')->daysUntil('2020-12-24');\n     * echo implode(\"\\n\", iterator_to_array($period->map(function (Carbon $date) {\n     *   return $date->diffInDays('2020-12-25').' days before Christmas!';\n     * })));\n     * ```\n     *\n     * @param callable $callback\n     *\n     * @return \\Generator\n     */\n    public function map(callable $callback)\n    {\n        foreach ($this as $date) {\n            yield $callback($date);\n        }\n    }\n\n    /**\n     * Determines if the instance is equal to another.\n     * Warning: if options differ, instances will never be equal.\n     *\n     * @param mixed $period\n     *\n     * @see equalTo()\n     *\n     * @return bool\n     */\n    public function eq($period): bool\n    {\n        return $this->equalTo($period);\n    }\n\n    /**\n     * Determines if the instance is equal to another.\n     * Warning: if options differ, instances will never be equal.\n     *\n     * @param mixed $period\n     *\n     * @return bool\n     */\n    public function equalTo($period): bool\n    {\n        if (!($period instanceof self)) {\n            $period = self::make($period);\n        }\n\n        $end = $this->getEndDate();\n\n        return $period !== null\n            && $this->getDateInterval()->eq($period->getDateInterval())\n            && $this->getStartDate()->eq($period->getStartDate())\n            && ($end ? $end->eq($period->getEndDate()) : $this->getRecurrences() === $period->getRecurrences())\n            && ($this->getOptions() & (~static::IMMUTABLE)) === ($period->getOptions() & (~static::IMMUTABLE));\n    }\n\n    /**\n     * Determines if the instance is not equal to another.\n     * Warning: if options differ, instances will never be equal.\n     *\n     * @param mixed $period\n     *\n     * @see notEqualTo()\n     *\n     * @return bool\n     */\n    public function ne($period): bool\n    {\n        return $this->notEqualTo($period);\n    }\n\n    /**\n     * Determines if the instance is not equal to another.\n     * Warning: if options differ, instances will never be equal.\n     *\n     * @param mixed $period\n     *\n     * @return bool\n     */\n    public function notEqualTo($period): bool\n    {\n        return !$this->eq($period);\n    }\n\n    /**\n     * Determines if the start date is before an other given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function startsBefore($date = null): bool\n    {\n        return $this->getStartDate()->lessThan($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the start date is before or the same as a given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function startsBeforeOrAt($date = null): bool\n    {\n        return $this->getStartDate()->lessThanOrEqualTo($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the start date is after an other given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function startsAfter($date = null): bool\n    {\n        return $this->getStartDate()->greaterThan($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the start date is after or the same as a given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function startsAfterOrAt($date = null): bool\n    {\n        return $this->getStartDate()->greaterThanOrEqualTo($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the start date is the same as a given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function startsAt($date = null): bool\n    {\n        return $this->getStartDate()->equalTo($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the end date is before an other given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function endsBefore($date = null): bool\n    {\n        return $this->calculateEnd()->lessThan($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the end date is before or the same as a given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function endsBeforeOrAt($date = null): bool\n    {\n        return $this->calculateEnd()->lessThanOrEqualTo($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the end date is after an other given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function endsAfter($date = null): bool\n    {\n        return $this->calculateEnd()->greaterThan($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the end date is after or the same as a given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function endsAfterOrAt($date = null): bool\n    {\n        return $this->calculateEnd()->greaterThanOrEqualTo($this->resolveCarbon($date));\n    }\n\n    /**\n     * Determines if the end date is the same as a given date.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @param mixed $date\n     *\n     * @return bool\n     */\n    public function endsAt($date = null): bool\n    {\n        return $this->calculateEnd()->equalTo($this->resolveCarbon($date));\n    }\n\n    /**\n     * Return true if start date is now or later.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @return bool\n     */\n    public function isStarted(): bool\n    {\n        return $this->startsBeforeOrAt();\n    }\n\n    /**\n     * Return true if end date is now or later.\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @return bool\n     */\n    public function isEnded(): bool\n    {\n        return $this->endsBeforeOrAt();\n    }\n\n    /**\n     * Return true if now is between start date (included) and end date (excluded).\n     * (Rather start/end are included by options is ignored.)\n     *\n     * @return bool\n     */\n    public function isInProgress(): bool\n    {\n        return $this->isStarted() && !$this->isEnded();\n    }\n\n    /**\n     * Round the current instance at the given unit with given precision if specified and the given function.\n     *\n     * @param string                              $unit\n     * @param float|int|string|\\DateInterval|null $precision\n     * @param string                              $function\n     *\n     * @return static\n     */\n    public function roundUnit($unit, $precision = 1, $function = 'round')\n    {\n        $self = $this->copyIfImmutable();\n        $self = $self->setStartDate($self->getStartDate()->roundUnit($unit, $precision, $function));\n\n        if ($self->endDate) {\n            $self = $self->setEndDate($self->getEndDate()->roundUnit($unit, $precision, $function));\n        }\n\n        return $self->setDateInterval($self->getDateInterval()->roundUnit($unit, $precision, $function));\n    }\n\n    /**\n     * Truncate the current instance at the given unit with given precision if specified.\n     *\n     * @param string                              $unit\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return static\n     */\n    public function floorUnit($unit, $precision = 1)\n    {\n        return $this->roundUnit($unit, $precision, 'floor');\n    }\n\n    /**\n     * Ceil the current instance at the given unit with given precision if specified.\n     *\n     * @param string                              $unit\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return static\n     */\n    public function ceilUnit($unit, $precision = 1)\n    {\n        return $this->roundUnit($unit, $precision, 'ceil');\n    }\n\n    /**\n     * Round the current instance second with given precision if specified (else period interval is used).\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     * @param string                              $function\n     *\n     * @return static\n     */\n    public function round($precision = null, $function = 'round')\n    {\n        return $this->roundWith(\n            $precision ?? $this->getDateInterval()->setLocalTranslator(TranslatorImmutable::get('en'))->forHumans(),\n            $function\n        );\n    }\n\n    /**\n     * Round the current instance second with given precision if specified (else period interval is used).\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return static\n     */\n    public function floor($precision = null)\n    {\n        return $this->round($precision, 'floor');\n    }\n\n    /**\n     * Ceil the current instance second with given precision if specified (else period interval is used).\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return static\n     */\n    public function ceil($precision = null)\n    {\n        return $this->round($precision, 'ceil');\n    }\n\n    /**\n     * Specify data which should be serialized to JSON.\n     *\n     * @link https://php.net/manual/en/jsonserializable.jsonserialize.php\n     *\n     * @return CarbonInterface[]\n     */\n    #[ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return $this->toArray();\n    }\n\n    /**\n     * Return true if the given date is between start and end.\n     *\n     * @param \\Carbon\\Carbon|\\Carbon\\CarbonPeriod|\\Carbon\\CarbonInterval|\\DateInterval|\\DatePeriod|\\DateTimeInterface|string|null $date\n     *\n     * @return bool\n     */\n    public function contains($date = null): bool\n    {\n        $startMethod = 'startsBefore'.($this->isStartIncluded() ? 'OrAt' : '');\n        $endMethod = 'endsAfter'.($this->isEndIncluded() ? 'OrAt' : '');\n\n        return $this->$startMethod($date) && $this->$endMethod($date);\n    }\n\n    /**\n     * Return true if the current period follows a given other period (with no overlap).\n     * For instance, [2019-08-01 -> 2019-08-12] follows [2019-07-29 -> 2019-07-31]\n     * Note than in this example, follows() would be false if 2019-08-01 or 2019-07-31 was excluded by options.\n     *\n     * @param \\Carbon\\CarbonPeriod|\\DatePeriod|string $period\n     *\n     * @return bool\n     */\n    public function follows($period, ...$arguments): bool\n    {\n        $period = $this->resolveCarbonPeriod($period, ...$arguments);\n\n        return $this->getIncludedStartDate()->equalTo($period->getIncludedEndDate()->add($period->getDateInterval()));\n    }\n\n    /**\n     * Return true if the given other period follows the current one (with no overlap).\n     * For instance, [2019-07-29 -> 2019-07-31] is followed by [2019-08-01 -> 2019-08-12]\n     * Note than in this example, isFollowedBy() would be false if 2019-08-01 or 2019-07-31 was excluded by options.\n     *\n     * @param \\Carbon\\CarbonPeriod|\\DatePeriod|string $period\n     *\n     * @return bool\n     */\n    public function isFollowedBy($period, ...$arguments): bool\n    {\n        $period = $this->resolveCarbonPeriod($period, ...$arguments);\n\n        return $period->follows($this);\n    }\n\n    /**\n     * Return true if the given period either follows or is followed by the current one.\n     *\n     * @see follows()\n     * @see isFollowedBy()\n     *\n     * @param \\Carbon\\CarbonPeriod|\\DatePeriod|string $period\n     *\n     * @return bool\n     */\n    public function isConsecutiveWith($period, ...$arguments): bool\n    {\n        return $this->follows($period, ...$arguments) || $this->isFollowedBy($period, ...$arguments);\n    }\n\n    /**\n     * Update properties after removing built-in filters.\n     *\n     * @return void\n     */\n    protected function updateInternalState()\n    {\n        if (!$this->hasFilter(static::END_DATE_FILTER)) {\n            $this->endDate = null;\n        }\n\n        if (!$this->hasFilter(static::RECURRENCES_FILTER)) {\n            $this->recurrences = null;\n        }\n    }\n\n    /**\n     * Create a filter tuple from raw parameters.\n     *\n     * Will create an automatic filter callback for one of Carbon's is* methods.\n     *\n     * @param array $parameters\n     *\n     * @return array\n     */\n    protected function createFilterTuple(array $parameters)\n    {\n        $method = array_shift($parameters);\n\n        if (!$this->isCarbonPredicateMethod($method)) {\n            return [$method, array_shift($parameters)];\n        }\n\n        return [function ($date) use ($method, $parameters) {\n            return ([$date, $method])(...$parameters);\n        }, $method];\n    }\n\n    /**\n     * Return whether given callable is a string pointing to one of Carbon's is* methods\n     * and should be automatically converted to a filter callback.\n     *\n     * @param callable $callable\n     *\n     * @return bool\n     */\n    protected function isCarbonPredicateMethod($callable)\n    {\n        return \\is_string($callable) && str_starts_with($callable, 'is') &&\n            (method_exists($this->dateClass, $callable) || ([$this->dateClass, 'hasMacro'])($callable));\n    }\n\n    /**\n     * Recurrences filter callback (limits number of recurrences).\n     *\n     * @SuppressWarnings(PHPMD.UnusedFormalParameter)\n     *\n     * @param \\Carbon\\Carbon $current\n     * @param int            $key\n     *\n     * @return bool|string\n     */\n    protected function filterRecurrences($current, $key)\n    {\n        if ($key < $this->recurrences) {\n            return true;\n        }\n\n        return static::END_ITERATION;\n    }\n\n    /**\n     * End date filter callback.\n     *\n     * @param \\Carbon\\Carbon $current\n     *\n     * @return bool|string\n     */\n    protected function filterEndDate($current)\n    {\n        if (!$this->isEndExcluded() && $current == $this->endDate) {\n            return true;\n        }\n\n        if ($this->dateInterval->invert ? $current > $this->endDate : $current < $this->endDate) {\n            return true;\n        }\n\n        return static::END_ITERATION;\n    }\n\n    /**\n     * End iteration filter callback.\n     *\n     * @return string\n     */\n    protected function endIteration()\n    {\n        return static::END_ITERATION;\n    }\n\n    /**\n     * Handle change of the parameters.\n     */\n    protected function handleChangedParameters()\n    {\n        if (($this->getOptions() & static::IMMUTABLE) && $this->dateClass === Carbon::class) {\n            $this->dateClass = CarbonImmutable::class;\n        } elseif (!($this->getOptions() & static::IMMUTABLE) && $this->dateClass === CarbonImmutable::class) {\n            $this->dateClass = Carbon::class;\n        }\n\n        $this->validationResult = null;\n    }\n\n    /**\n     * Validate current date and stop iteration when necessary.\n     *\n     * Returns true when current date is valid, false if it is not, or static::END_ITERATION\n     * when iteration should be stopped.\n     *\n     * @return bool|string\n     */\n    protected function validateCurrentDate()\n    {\n        if ($this->current === null) {\n            $this->rewind();\n        }\n\n        // Check after the first rewind to avoid repeating the initial validation.\n        return $this->validationResult ?? ($this->validationResult = $this->checkFilters());\n    }\n\n    /**\n     * Check whether current value and key pass all the filters.\n     *\n     * @return bool|string\n     */\n    protected function checkFilters()\n    {\n        $current = $this->prepareForReturn($this->current);\n\n        foreach ($this->filters as $tuple) {\n            $result = \\call_user_func(\n                $tuple[0],\n                $current->avoidMutation(),\n                $this->key,\n                $this\n            );\n\n            if ($result === static::END_ITERATION) {\n                return static::END_ITERATION;\n            }\n\n            if (!$result) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Prepare given date to be returned to the external logic.\n     *\n     * @param CarbonInterface $date\n     *\n     * @return CarbonInterface\n     */\n    protected function prepareForReturn(CarbonInterface $date)\n    {\n        $date = ([$this->dateClass, 'make'])($date);\n\n        if ($this->timezone) {\n            $date = $date->setTimezone($this->timezone);\n        }\n\n        return $date;\n    }\n\n    /**\n     * Keep incrementing the current date until a valid date is found or the iteration is ended.\n     *\n     * @throws RuntimeException\n     *\n     * @return void\n     */\n    protected function incrementCurrentDateUntilValid()\n    {\n        $attempts = 0;\n\n        do {\n            $this->current = $this->current->add($this->dateInterval);\n\n            $this->validationResult = null;\n\n            if (++$attempts > static::NEXT_MAX_ATTEMPTS) {\n                throw new UnreachableException('Could not find next valid date.');\n            }\n        } while ($this->validateCurrentDate() === false);\n    }\n\n    /**\n     * Call given macro.\n     *\n     * @param string $name\n     * @param array  $parameters\n     *\n     * @return mixed\n     */\n    protected function callMacro($name, $parameters)\n    {\n        $macro = static::$macros[$name];\n\n        if ($macro instanceof Closure) {\n            $boundMacro = @$macro->bindTo($this, static::class) ?: @$macro->bindTo(null, static::class);\n\n            return ($boundMacro ?: $macro)(...$parameters);\n        }\n\n        return $macro(...$parameters);\n    }\n\n    /**\n     * Return the Carbon instance passed through, a now instance in the same timezone\n     * if null given or parse the input if string given.\n     *\n     * @param \\Carbon\\Carbon|\\Carbon\\CarbonPeriod|\\Carbon\\CarbonInterval|\\DateInterval|\\DatePeriod|\\DateTimeInterface|string|null $date\n     *\n     * @return \\Carbon\\CarbonInterface\n     */\n    protected function resolveCarbon($date = null)\n    {\n        return $this->getStartDate()->nowWithSameTz()->carbonize($date);\n    }\n\n    /**\n     * Resolve passed arguments or DatePeriod to a CarbonPeriod object.\n     *\n     * @param mixed $period\n     * @param mixed ...$arguments\n     *\n     * @return static\n     */\n    protected function resolveCarbonPeriod($period, ...$arguments)\n    {\n        if ($period instanceof self) {\n            return $period;\n        }\n\n        return $period instanceof DatePeriod\n            ? static::instance($period)\n            : static::create($period, ...$arguments);\n    }\n\n    private function orderCouple($first, $second): array\n    {\n        return $first > $second ? [$second, $first] : [$first, $second];\n    }\n\n    private function makeDateTime($value): ?DateTimeInterface\n    {\n        if ($value instanceof DateTimeInterface) {\n            return $value;\n        }\n\n        if (\\is_string($value)) {\n            $value = trim($value);\n\n            if (!preg_match('/^P[\\dT]/', $value) &&\n                !preg_match('/^R\\d/', $value) &&\n                preg_match('/[a-z\\d]/i', $value)\n            ) {\n                $dateClass = $this->dateClass;\n\n                return $dateClass::parse($value, $this->tzName);\n            }\n        }\n\n        return null;\n    }\n\n    private function isInfiniteDate($date): bool\n    {\n        return $date instanceof CarbonInterface && ($date->isEndOfTime() || $date->isStartOfTime());\n    }\n\n    private function rawDate($date): ?DateTimeInterface\n    {\n        if ($date === false || $date === null) {\n            return null;\n        }\n\n        if ($date instanceof CarbonInterface) {\n            return $date->isMutable()\n                ? $date->toDateTime()\n                : $date->toDateTimeImmutable();\n        }\n\n        if (\\in_array(\\get_class($date), [DateTime::class, DateTimeImmutable::class], true)) {\n            return $date;\n        }\n\n        $class = $date instanceof DateTime ? DateTime::class : DateTimeImmutable::class;\n\n        return new $class($date->format('Y-m-d H:i:s.u'), $date->getTimezone());\n    }\n\n    private static function setDefaultParameters(array &$parameters, array $defaults): void\n    {\n        foreach ($defaults as [$index, $name, $value]) {\n            if (!\\array_key_exists($index, $parameters) && !\\array_key_exists($name, $parameters)) {\n                $parameters[$index] = $value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonPeriodImmutable.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nclass CarbonPeriodImmutable extends CarbonPeriod\n{\n    /**\n     * Default date class of iteration items.\n     *\n     * @var string\n     */\n    protected const DEFAULT_DATE_CLASS = CarbonImmutable::class;\n\n    /**\n     * Date class of iteration items.\n     *\n     * @var string\n     */\n    protected $dateClass = CarbonImmutable::class;\n\n    /**\n     * Prepare the instance to be set (self if mutable to be mutated,\n     * copy if immutable to generate a new instance).\n     *\n     * @return static\n     */\n    protected function copyIfImmutable()\n    {\n        return $this->constructed ? clone $this : $this;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/CarbonTimeZone.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\Exceptions\\InvalidCastException;\nuse Carbon\\Exceptions\\InvalidTimeZoneException;\nuse DateTimeInterface;\nuse DateTimeZone;\nuse Throwable;\n\nclass CarbonTimeZone extends DateTimeZone\n{\n    public function __construct($timezone = null)\n    {\n        parent::__construct(static::getDateTimeZoneNameFromMixed($timezone));\n    }\n\n    protected static function parseNumericTimezone($timezone)\n    {\n        if ($timezone <= -100 || $timezone >= 100) {\n            throw new InvalidTimeZoneException('Absolute timezone offset cannot be greater than 100.');\n        }\n\n        return ($timezone >= 0 ? '+' : '').ltrim($timezone, '+').':00';\n    }\n\n    protected static function getDateTimeZoneNameFromMixed($timezone)\n    {\n        if ($timezone === null) {\n            return date_default_timezone_get();\n        }\n\n        if (\\is_string($timezone)) {\n            $timezone = preg_replace('/^\\s*([+-]\\d+)(\\d{2})\\s*$/', '$1:$2', $timezone);\n        }\n\n        if (is_numeric($timezone)) {\n            return static::parseNumericTimezone($timezone);\n        }\n\n        return $timezone;\n    }\n\n    protected static function getDateTimeZoneFromName(&$name)\n    {\n        return @timezone_open($name = (string) static::getDateTimeZoneNameFromMixed($name));\n    }\n\n    /**\n     * Cast the current instance into the given class.\n     *\n     * @param string $className The $className::instance() method will be called to cast the current object.\n     *\n     * @return DateTimeZone\n     */\n    public function cast(string $className)\n    {\n        if (!method_exists($className, 'instance')) {\n            if (is_a($className, DateTimeZone::class, true)) {\n                return new $className($this->getName());\n            }\n\n            throw new InvalidCastException(\"$className has not the instance() method needed to cast the date.\");\n        }\n\n        return $className::instance($this);\n    }\n\n    /**\n     * Create a CarbonTimeZone from mixed input.\n     *\n     * @param DateTimeZone|string|int|null $object     original value to get CarbonTimeZone from it.\n     * @param DateTimeZone|string|int|null $objectDump dump of the object for error messages.\n     *\n     * @throws InvalidTimeZoneException\n     *\n     * @return false|static\n     */\n    public static function instance($object = null, $objectDump = null)\n    {\n        $tz = $object;\n\n        if ($tz instanceof static) {\n            return $tz;\n        }\n\n        if ($tz === null) {\n            return new static();\n        }\n\n        if (!$tz instanceof DateTimeZone) {\n            $tz = static::getDateTimeZoneFromName($object);\n        }\n\n        if ($tz !== false) {\n            return new static($tz->getName());\n        }\n\n        if (Carbon::isStrictModeEnabled()) {\n            throw new InvalidTimeZoneException('Unknown or bad timezone ('.($objectDump ?: $object).')');\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns abbreviated name of the current timezone according to DST setting.\n     *\n     * @param bool $dst\n     *\n     * @return string\n     */\n    public function getAbbreviatedName($dst = false)\n    {\n        $name = $this->getName();\n\n        foreach ($this->listAbbreviations() as $abbreviation => $zones) {\n            foreach ($zones as $zone) {\n                if ($zone['timezone_id'] === $name && $zone['dst'] == $dst) {\n                    return $abbreviation;\n                }\n            }\n        }\n\n        return 'unknown';\n    }\n\n    /**\n     * @alias getAbbreviatedName\n     *\n     * Returns abbreviated name of the current timezone according to DST setting.\n     *\n     * @param bool $dst\n     *\n     * @return string\n     */\n    public function getAbbr($dst = false)\n    {\n        return $this->getAbbreviatedName($dst);\n    }\n\n    /**\n     * Get the offset as string \"sHH:MM\" (such as \"+00:00\" or \"-12:30\").\n     *\n     * @param DateTimeInterface|null $date\n     *\n     * @return string\n     */\n    public function toOffsetName(DateTimeInterface $date = null)\n    {\n        return static::getOffsetNameFromMinuteOffset(\n            $this->getOffset($date ?: Carbon::now($this)) / 60\n        );\n    }\n\n    /**\n     * Returns a new CarbonTimeZone object using the offset string instead of region string.\n     *\n     * @param DateTimeInterface|null $date\n     *\n     * @return CarbonTimeZone\n     */\n    public function toOffsetTimeZone(DateTimeInterface $date = null)\n    {\n        return new static($this->toOffsetName($date));\n    }\n\n    /**\n     * Returns the first region string (such as \"America/Toronto\") that matches the current timezone or\n     * false if no match is found.\n     *\n     * @see timezone_name_from_abbr native PHP function.\n     *\n     * @param DateTimeInterface|null $date\n     * @param int                    $isDst\n     *\n     * @return string|false\n     */\n    public function toRegionName(DateTimeInterface $date = null, $isDst = 1)\n    {\n        $name = $this->getName();\n        $firstChar = substr($name, 0, 1);\n\n        if ($firstChar !== '+' && $firstChar !== '-') {\n            return $name;\n        }\n\n        $date = $date ?: Carbon::now($this);\n\n        // Integer construction no longer supported since PHP 8\n        // @codeCoverageIgnoreStart\n        try {\n            $offset = @$this->getOffset($date) ?: 0;\n        } catch (Throwable $e) {\n            $offset = 0;\n        }\n        // @codeCoverageIgnoreEnd\n\n        $name = @timezone_name_from_abbr('', $offset, $isDst);\n\n        if ($name) {\n            return $name;\n        }\n\n        foreach (timezone_identifiers_list() as $timezone) {\n            if (Carbon::instance($date)->tz($timezone)->getOffset() === $offset) {\n                return $timezone;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Returns a new CarbonTimeZone object using the region string instead of offset string.\n     *\n     * @param DateTimeInterface|null $date\n     *\n     * @return CarbonTimeZone|false\n     */\n    public function toRegionTimeZone(DateTimeInterface $date = null)\n    {\n        $tz = $this->toRegionName($date);\n\n        if ($tz !== false) {\n            return new static($tz);\n        }\n\n        if (Carbon::isStrictModeEnabled()) {\n            throw new InvalidTimeZoneException('Unknown timezone for offset '.$this->getOffset($date ?: Carbon::now($this)).' seconds.');\n        }\n\n        return false;\n    }\n\n    /**\n     * Cast to string (get timezone name).\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->getName();\n    }\n\n    /**\n     * Return the type number:\n     *\n     * Type 1; A UTC offset, such as -0300\n     * Type 2; A timezone abbreviation, such as GMT\n     * Type 3: A timezone identifier, such as Europe/London\n     */\n    public function getType(): int\n    {\n        return preg_match('/\"timezone_type\";i:(\\d)/', serialize($this), $match) ? (int) $match[1] : 3;\n    }\n\n    /**\n     * Create a CarbonTimeZone from mixed input.\n     *\n     * @param DateTimeZone|string|int|null $object\n     *\n     * @return false|static\n     */\n    public static function create($object = null)\n    {\n        return static::instance($object);\n    }\n\n    /**\n     * Create a CarbonTimeZone from int/float hour offset.\n     *\n     * @param float $hourOffset number of hour of the timezone shift (can be decimal).\n     *\n     * @return false|static\n     */\n    public static function createFromHourOffset(float $hourOffset)\n    {\n        return static::createFromMinuteOffset($hourOffset * Carbon::MINUTES_PER_HOUR);\n    }\n\n    /**\n     * Create a CarbonTimeZone from int/float minute offset.\n     *\n     * @param float $minuteOffset number of total minutes of the timezone shift.\n     *\n     * @return false|static\n     */\n    public static function createFromMinuteOffset(float $minuteOffset)\n    {\n        return static::instance(static::getOffsetNameFromMinuteOffset($minuteOffset));\n    }\n\n    /**\n     * Convert a total minutes offset into a standardized timezone offset string.\n     *\n     * @param float $minutes number of total minutes of the timezone shift.\n     *\n     * @return string\n     */\n    public static function getOffsetNameFromMinuteOffset(float $minutes): string\n    {\n        $minutes = round($minutes);\n        $unsignedMinutes = abs($minutes);\n\n        return ($minutes < 0 ? '-' : '+').\n            str_pad((string) floor($unsignedMinutes / 60), 2, '0', STR_PAD_LEFT).\n            ':'.\n            str_pad((string) ($unsignedMinutes % 60), 2, '0', STR_PAD_LEFT);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Cli/Invoker.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Cli;\n\nclass Invoker\n{\n    public const CLI_CLASS_NAME = 'Carbon\\\\Cli';\n\n    protected function runWithCli(string $className, array $parameters): bool\n    {\n        $cli = new $className();\n\n        return $cli(...$parameters);\n    }\n\n    public function __invoke(...$parameters): bool\n    {\n        if (class_exists(self::CLI_CLASS_NAME)) {\n            return $this->runWithCli(self::CLI_CLASS_NAME, $parameters);\n        }\n\n        $function = (($parameters[1] ?? '') === 'install' ? ($parameters[2] ?? null) : null) ?: 'shell_exec';\n        $function('composer require carbon-cli/carbon-cli --no-interaction');\n\n        echo 'Installation succeeded.';\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse Throwable;\n\nclass BadComparisonUnitException extends UnitException\n{\n    /**\n     * The unit.\n     *\n     * @var string\n     */\n    protected $unit;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $unit\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($unit, $code = 0, Throwable $previous = null)\n    {\n        $this->unit = $unit;\n\n        parent::__construct(\"Bad comparison unit: '$unit'\", $code, $previous);\n    }\n\n    /**\n     * Get the unit.\n     *\n     * @return string\n     */\n    public function getUnit(): string\n    {\n        return $this->unit;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse BadMethodCallException as BaseBadMethodCallException;\nuse Throwable;\n\nclass BadFluentConstructorException extends BaseBadMethodCallException implements BadMethodCallException\n{\n    /**\n     * The method.\n     *\n     * @var string\n     */\n    protected $method;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $method\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($method, $code = 0, Throwable $previous = null)\n    {\n        $this->method = $method;\n\n        parent::__construct(sprintf(\"Unknown fluent constructor '%s'.\", $method), $code, $previous);\n    }\n\n    /**\n     * Get the method.\n     *\n     * @return string\n     */\n    public function getMethod(): string\n    {\n        return $this->method;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse BadMethodCallException as BaseBadMethodCallException;\nuse Throwable;\n\nclass BadFluentSetterException extends BaseBadMethodCallException implements BadMethodCallException\n{\n    /**\n     * The setter.\n     *\n     * @var string\n     */\n    protected $setter;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $setter\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($setter, $code = 0, Throwable $previous = null)\n    {\n        $this->setter = $setter;\n\n        parent::__construct(sprintf(\"Unknown fluent setter '%s'\", $setter), $code, $previous);\n    }\n\n    /**\n     * Get the setter.\n     *\n     * @return string\n     */\n    public function getSetter(): string\n    {\n        return $this->setter;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\ninterface BadMethodCallException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/EndLessPeriodException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse RuntimeException as BaseRuntimeException;\n\nfinal class EndLessPeriodException extends BaseRuntimeException implements RuntimeException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/Exception.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\ninterface Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse RuntimeException as BaseRuntimeException;\nuse Throwable;\n\nclass ImmutableException extends BaseRuntimeException implements RuntimeException\n{\n    /**\n     * The value.\n     *\n     * @var string\n     */\n    protected $value;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $value    the immutable type/value\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($value, $code = 0, Throwable $previous = null)\n    {\n        $this->value = $value;\n        parent::__construct(\"$value is immutable.\", $code, $previous);\n    }\n\n    /**\n     * Get the value.\n     *\n     * @return string\n     */\n    public function getValue(): string\n    {\n        return $this->value;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\ninterface InvalidArgumentException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidCastException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\nclass InvalidDateException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    /**\n     * The invalid field.\n     *\n     * @var string\n     */\n    private $field;\n\n    /**\n     * The invalid value.\n     *\n     * @var mixed\n     */\n    private $value;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $field\n     * @param mixed          $value\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($field, $value, $code = 0, Throwable $previous = null)\n    {\n        $this->field = $field;\n        $this->value = $value;\n        parent::__construct($field.' : '.$value.' is not a valid value.', $code, $previous);\n    }\n\n    /**\n     * Get the invalid field.\n     *\n     * @return string\n     */\n    public function getField()\n    {\n        return $this->field;\n    }\n\n    /**\n     * Get the invalid value.\n     *\n     * @return mixed\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidFormatException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidIntervalException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidPeriodDateException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidPeriodParameterException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidTimeZoneException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass InvalidTypeException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse Carbon\\CarbonInterface;\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\nclass NotACarbonClassException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    /**\n     * The className.\n     *\n     * @var string\n     */\n    protected $className;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $className\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($className, $code = 0, Throwable $previous = null)\n    {\n        $this->className = $className;\n\n        parent::__construct(sprintf('Given class does not implement %s: %s', CarbonInterface::class, $className), $code, $previous);\n    }\n\n    /**\n     * Get the className.\n     *\n     * @return string\n     */\n    public function getClassName(): string\n    {\n        return $this->className;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass NotAPeriodException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\nclass NotLocaleAwareException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    /**\n     * Constructor.\n     *\n     * @param mixed          $object\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($object, $code = 0, Throwable $previous = null)\n    {\n        $dump = \\is_object($object) ? \\get_class($object) : \\gettype($object);\n\n        parent::__construct(\"$dump does neither implements Symfony\\Contracts\\Translation\\LocaleAwareInterface nor getLocale() method.\", $code, $previous);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\n// This will extends OutOfRangeException instead of InvalidArgumentException since 3.0.0\n// use OutOfRangeException as BaseOutOfRangeException;\n\nclass OutOfRangeException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    /**\n     * The unit or name of the value.\n     *\n     * @var string\n     */\n    private $unit;\n\n    /**\n     * The range minimum.\n     *\n     * @var mixed\n     */\n    private $min;\n\n    /**\n     * The range maximum.\n     *\n     * @var mixed\n     */\n    private $max;\n\n    /**\n     * The invalid value.\n     *\n     * @var mixed\n     */\n    private $value;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $unit\n     * @param mixed          $min\n     * @param mixed          $max\n     * @param mixed          $value\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($unit, $min, $max, $value, $code = 0, Throwable $previous = null)\n    {\n        $this->unit = $unit;\n        $this->min = $min;\n        $this->max = $max;\n        $this->value = $value;\n\n        parent::__construct(\"$unit must be between $min and $max, $value given\", $code, $previous);\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMax()\n    {\n        return $this->max;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getMin()\n    {\n        return $this->min;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getUnit()\n    {\n        return $this->unit;\n    }\n\n    /**\n     * @return mixed\n     */\n    public function getValue()\n    {\n        return $this->value;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\nclass ParseErrorException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    /**\n     * The expected.\n     *\n     * @var string\n     */\n    protected $expected;\n\n    /**\n     * The actual.\n     *\n     * @var string\n     */\n    protected $actual;\n\n    /**\n     * The help message.\n     *\n     * @var string\n     */\n    protected $help;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $expected\n     * @param string         $actual\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($expected, $actual, $help = '', $code = 0, Throwable $previous = null)\n    {\n        $this->expected = $expected;\n        $this->actual = $actual;\n        $this->help = $help;\n\n        $actual = $actual === '' ? 'data is missing' : \"get '$actual'\";\n\n        parent::__construct(trim(\"Format expected $expected but $actual\\n$help\"), $code, $previous);\n    }\n\n    /**\n     * Get the expected.\n     *\n     * @return string\n     */\n    public function getExpected(): string\n    {\n        return $this->expected;\n    }\n\n    /**\n     * Get the actual.\n     *\n     * @return string\n     */\n    public function getActual(): string\n    {\n        return $this->actual;\n    }\n\n    /**\n     * Get the help message.\n     *\n     * @return string\n     */\n    public function getHelp(): string\n    {\n        return $this->help;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\ninterface RuntimeException extends Exception\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnitException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\n\nclass UnitException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse Throwable;\n\nclass UnitNotConfiguredException extends UnitException\n{\n    /**\n     * The unit.\n     *\n     * @var string\n     */\n    protected $unit;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $unit\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($unit, $code = 0, Throwable $previous = null)\n    {\n        $this->unit = $unit;\n\n        parent::__construct(\"Unit $unit have no configuration to get total from other units.\", $code, $previous);\n    }\n\n    /**\n     * Get the unit.\n     *\n     * @return string\n     */\n    public function getUnit(): string\n    {\n        return $this->unit;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\nclass UnknownGetterException extends BaseInvalidArgumentException implements InvalidArgumentException\n{\n    /**\n     * The getter.\n     *\n     * @var string\n     */\n    protected $getter;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $getter   getter name\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($getter, $code = 0, Throwable $previous = null)\n    {\n        $this->getter = $getter;\n\n        parent::__construct(\"Unknown getter '$getter'\", $code, $previous);\n    }\n\n    /**\n     * Get the getter.\n     *\n     * @return string\n     */\n    public function getGetter(): string\n    {\n        return $this->getter;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse BadMethodCallException as BaseBadMethodCallException;\nuse Throwable;\n\nclass UnknownMethodException extends BaseBadMethodCallException implements BadMethodCallException\n{\n    /**\n     * The method.\n     *\n     * @var string\n     */\n    protected $method;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $method\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($method, $code = 0, Throwable $previous = null)\n    {\n        $this->method = $method;\n\n        parent::__construct(\"Method $method does not exist.\", $code, $previous);\n    }\n\n    /**\n     * Get the method.\n     *\n     * @return string\n     */\n    public function getMethod(): string\n    {\n        return $this->method;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse InvalidArgumentException as BaseInvalidArgumentException;\nuse Throwable;\n\nclass UnknownSetterException extends BaseInvalidArgumentException implements BadMethodCallException\n{\n    /**\n     * The setter.\n     *\n     * @var string\n     */\n    protected $setter;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $setter   setter name\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($setter, $code = 0, Throwable $previous = null)\n    {\n        $this->setter = $setter;\n\n        parent::__construct(\"Unknown setter '$setter'\", $code, $previous);\n    }\n\n    /**\n     * Get the setter.\n     *\n     * @return string\n     */\n    public function getSetter(): string\n    {\n        return $this->setter;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse Throwable;\n\nclass UnknownUnitException extends UnitException\n{\n    /**\n     * The unit.\n     *\n     * @var string\n     */\n    protected $unit;\n\n    /**\n     * Constructor.\n     *\n     * @param string         $unit\n     * @param int            $code\n     * @param Throwable|null $previous\n     */\n    public function __construct($unit, $code = 0, Throwable $previous = null)\n    {\n        $this->unit = $unit;\n\n        parent::__construct(\"Unknown unit '$unit'.\", $code, $previous);\n    }\n\n    /**\n     * Get the unit.\n     *\n     * @return string\n     */\n    public function getUnit(): string\n    {\n        return $this->unit;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Exceptions;\n\nuse RuntimeException as BaseRuntimeException;\n\nclass UnreachableException extends BaseRuntimeException implements RuntimeException\n{\n    //\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Factory.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Closure;\nuse DateTimeInterface;\nuse ReflectionMethod;\n\n/**\n * A factory to generate Carbon instances with common settings.\n *\n * <autodoc generated by `composer phpdoc`>\n *\n * @method bool                                               canBeCreatedFromFormat($date, $format)                                                                                       Checks if the (date)time string is in a given format and valid to create a\n *                                                                                                                                                                                         new instance.\n * @method Carbon|false                                       create($year = 0, $month = 1, $day = 1, $hour = 0, $minute = 0, $second = 0, $tz = null)                                     Create a new Carbon instance from a specific date and time.\n *                                                                                                                                                                                         If any of $year, $month or $day are set to null their now() values will\n *                                                                                                                                                                                         be used.\n *                                                                                                                                                                                         If $hour is null it will be set to its now() value and the default\n *                                                                                                                                                                                         values for $minute and $second will be their now() values.\n *                                                                                                                                                                                         If $hour is not null then the default values for $minute and $second\n *                                                                                                                                                                                         will be 0.\n * @method Carbon                                             createFromDate($year = null, $month = null, $day = null, $tz = null)                                                         Create a Carbon instance from just a date. The time portion is set to now.\n * @method Carbon|false                                       createFromFormat($format, $time, $tz = null)                                                                                 Create a Carbon instance from a specific format.\n * @method Carbon|false                                       createFromIsoFormat($format, $time, $tz = null, $locale = 'en', $translator = null)                                          Create a Carbon instance from a specific ISO format (same replacements as ->isoFormat()).\n * @method Carbon|false                                       createFromLocaleFormat($format, $locale, $time, $tz = null)                                                                  Create a Carbon instance from a specific format and a string in a given language.\n * @method Carbon|false                                       createFromLocaleIsoFormat($format, $locale, $time, $tz = null)                                                               Create a Carbon instance from a specific ISO format and a string in a given language.\n * @method Carbon                                             createFromTime($hour = 0, $minute = 0, $second = 0, $tz = null)                                                              Create a Carbon instance from just a time. The date portion is set to today.\n * @method Carbon                                             createFromTimeString($time, $tz = null)                                                                                      Create a Carbon instance from a time string. The date portion is set to today.\n * @method Carbon                                             createFromTimestamp($timestamp, $tz = null)                                                                                  Create a Carbon instance from a timestamp and set the timezone (use default one if not specified).\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method Carbon                                             createFromTimestampMs($timestamp, $tz = null)                                                                                Create a Carbon instance from a timestamp in milliseconds.\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method Carbon                                             createFromTimestampMsUTC($timestamp)                                                                                         Create a Carbon instance from a timestamp in milliseconds.\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method Carbon                                             createFromTimestampUTC($timestamp)                                                                                           Create a Carbon instance from an timestamp keeping the timezone to UTC.\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method Carbon                                             createMidnightDate($year = null, $month = null, $day = null, $tz = null)                                                     Create a Carbon instance from just a date. The time portion is set to midnight.\n * @method Carbon|false                                       createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null)               Create a new safe Carbon instance from a specific date and time.\n *                                                                                                                                                                                         If any of $year, $month or $day are set to null their now() values will\n *                                                                                                                                                                                         be used.\n *                                                                                                                                                                                         If $hour is null it will be set to its now() value and the default\n *                                                                                                                                                                                         values for $minute and $second will be their now() values.\n *                                                                                                                                                                                         If $hour is not null then the default values for $minute and $second\n *                                                                                                                                                                                         will be 0.\n *                                                                                                                                                                                         If one of the set values is not valid, an InvalidDateException\n *                                                                                                                                                                                         will be thrown.\n * @method CarbonInterface                                    createStrict(?int $year = 0, ?int $month = 1, ?int $day = 1, ?int $hour = 0, ?int $minute = 0, ?int $second = 0, $tz = null) Create a new Carbon instance from a specific date and time using strict validation.\n * @method Carbon                                             disableHumanDiffOption($humanDiffOption)                                                                                     @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method Carbon                                             enableHumanDiffOption($humanDiffOption)                                                                                      @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method mixed                                              executeWithLocale($locale, $func)                                                                                            Set the current locale to the given, execute the passed function, reset the locale to previous one,\n *                                                                                                                                                                                         then return the result of the closure (or null if the closure was void).\n * @method Carbon                                             fromSerialized($value)                                                                                                       Create an instance from a serialized string.\n * @method void                                               genericMacro($macro, $priority = 0)                                                                                          Register a custom macro.\n * @method array                                              getAvailableLocales()                                                                                                        Returns the list of internally available locales and already loaded custom locales.\n *                                                                                                                                                                                         (It will ignore custom translator dynamic loading.)\n * @method Language[]                                         getAvailableLocalesInfo()                                                                                                    Returns list of Language object for each available locale. This object allow you to get the ISO name, native\n *                                                                                                                                                                                         name, region and variant of the locale.\n * @method array                                              getDays()                                                                                                                    Get the days of the week\n * @method string|null                                        getFallbackLocale()                                                                                                          Get the fallback locale.\n * @method array                                              getFormatsToIsoReplacements()                                                                                                List of replacements from date() format to isoFormat().\n * @method int                                                getHumanDiffOptions()                                                                                                        Return default humanDiff() options (merged flags as integer).\n * @method array                                              getIsoUnits()                                                                                                                Returns list of locale units for ISO formatting.\n * @method array                                              getLastErrors()                                                                                                              {@inheritdoc}\n * @method string                                             getLocale()                                                                                                                  Get the current translator locale.\n * @method callable|null                                      getMacro($name)                                                                                                              Get the raw callable macro registered globally for a given name.\n * @method int                                                getMidDayAt()                                                                                                                get midday/noon hour\n * @method Closure|Carbon                                     getTestNow()                                                                                                                 Get the Carbon instance (real or mock) to be returned when a \"now\"\n *                                                                                                                                                                                         instance is created.\n * @method string                                             getTimeFormatByPrecision($unitPrecision)                                                                                     Return a format from H:i to H:i:s.u according to given unit precision.\n * @method string                                             getTranslationMessageWith($translator, string $key, ?string $locale = null, ?string $default = null)                         Returns raw translation message for a given key.\n * @method \\Symfony\\Component\\Translation\\TranslatorInterface getTranslator()                                                                                                              Get the default translator instance in use.\n * @method int                                                getWeekEndsAt()                                                                                                              Get the last day of week\n * @method int                                                getWeekStartsAt()                                                                                                            Get the first day of week\n * @method array                                              getWeekendDays()                                                                                                             Get weekend days\n * @method bool                                               hasFormat($date, $format)                                                                                                    Checks if the (date)time string is in a given format.\n * @method bool                                               hasFormatWithModifiers($date, $format)                                                                                       Checks if the (date)time string is in a given format.\n * @method bool                                               hasMacro($name)                                                                                                              Checks if macro is registered globally.\n * @method bool                                               hasRelativeKeywords($time)                                                                                                   Determine if a time string will produce a relative date.\n * @method bool                                               hasTestNow()                                                                                                                 Determine if there is a valid test instance set. A valid test instance\n *                                                                                                                                                                                         is anything that is not null.\n * @method Carbon                                             instance($date)                                                                                                              Create a Carbon instance from a DateTime one.\n * @method bool                                               isImmutable()                                                                                                                Returns true if the current class/instance is immutable.\n * @method bool                                               isModifiableUnit($unit)                                                                                                      Returns true if a property can be changed via setter.\n * @method bool                                               isMutable()                                                                                                                  Returns true if the current class/instance is mutable.\n * @method bool                                               isStrictModeEnabled()                                                                                                        Returns true if the strict mode is globally in use, false else.\n *                                                                                                                                                                                         (It can be overridden in specific instances.)\n * @method bool                                               localeHasDiffOneDayWords($locale)                                                                                            Returns true if the given locale is internally supported and has words for 1-day diff (just now, yesterday, tomorrow).\n *                                                                                                                                                                                         Support is considered enabled if the 3 words are translated in the given locale.\n * @method bool                                               localeHasDiffSyntax($locale)                                                                                                 Returns true if the given locale is internally supported and has diff syntax support (ago, from now, before, after).\n *                                                                                                                                                                                         Support is considered enabled if the 4 sentences are translated in the given locale.\n * @method bool                                               localeHasDiffTwoDayWords($locale)                                                                                            Returns true if the given locale is internally supported and has words for 2-days diff (before yesterday, after tomorrow).\n *                                                                                                                                                                                         Support is considered enabled if the 2 words are translated in the given locale.\n * @method bool                                               localeHasPeriodSyntax($locale)                                                                                               Returns true if the given locale is internally supported and has period syntax support (X times, every X, from X, to X).\n *                                                                                                                                                                                         Support is considered enabled if the 4 sentences are translated in the given locale.\n * @method bool                                               localeHasShortUnits($locale)                                                                                                 Returns true if the given locale is internally supported and has short-units support.\n *                                                                                                                                                                                         Support is considered enabled if either year, day or hour has a short variant translated.\n * @method void                                               macro($name, $macro)                                                                                                         Register a custom macro.\n * @method Carbon|null                                        make($var)                                                                                                                   Make a Carbon instance from given variable if possible.\n *                                                                                                                                                                                         Always return a new instance. Parse only strings and only these likely to be dates (skip intervals\n *                                                                                                                                                                                         and recurrences). Throw an exception for invalid format, but otherwise return null.\n * @method Carbon                                             maxValue()                                                                                                                   Create a Carbon instance for the greatest supported date.\n * @method Carbon                                             minValue()                                                                                                                   Create a Carbon instance for the lowest supported date.\n * @method void                                               mixin($mixin)                                                                                                                Mix another object into the class.\n * @method Carbon                                             now($tz = null)                                                                                                              Get a Carbon instance for the current date and time.\n * @method Carbon                                             parse($time = null, $tz = null)                                                                                              Create a carbon instance from a string.\n *                                                                                                                                                                                         This is an alias for the constructor that allows better fluent syntax\n *                                                                                                                                                                                         as it allows you to do Carbon::parse('Monday next week')->fn() rather\n *                                                                                                                                                                                         than (new Carbon('Monday next week'))->fn().\n * @method Carbon                                             parseFromLocale($time, $locale = null, $tz = null)                                                                           Create a carbon instance from a localized string (in French, Japanese, Arabic, etc.).\n * @method string                                             pluralUnit(string $unit)                                                                                                     Returns standardized plural of a given singular/plural unit name (in English).\n * @method Carbon|false                                       rawCreateFromFormat($format, $time, $tz = null)                                                                              Create a Carbon instance from a specific format.\n * @method Carbon                                             rawParse($time = null, $tz = null)                                                                                           Create a carbon instance from a string.\n *                                                                                                                                                                                         This is an alias for the constructor that allows better fluent syntax\n *                                                                                                                                                                                         as it allows you to do Carbon::parse('Monday next week')->fn() rather\n *                                                                                                                                                                                         than (new Carbon('Monday next week'))->fn().\n * @method Carbon                                             resetMacros()                                                                                                                Remove all macros and generic macros.\n * @method void                                               resetMonthsOverflow()                                                                                                        @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method void                                               resetToStringFormat()                                                                                                        Reset the format used to the default when type juggling a Carbon instance to a string\n * @method void                                               resetYearsOverflow()                                                                                                         @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method void                                               serializeUsing($callback)                                                                                                    @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather transform Carbon object before the serialization.\n *                                                                                                                                                                                         JSON serialize all Carbon instances using the given callback.\n * @method Carbon                                             setFallbackLocale($locale)                                                                                                   Set the fallback locale.\n * @method Carbon                                             setHumanDiffOptions($humanDiffOptions)                                                                                       @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method bool                                               setLocale($locale)                                                                                                           Set the current translator locale and indicate if the source locale file exists.\n *                                                                                                                                                                                         Pass 'auto' as locale to use closest language from the current LC_TIME locale.\n * @method void                                               setMidDayAt($hour)                                                                                                           @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather consider mid-day is always 12pm, then if you need to test if it's an other\n *                                                                                                                                                                                                     hour, test it explicitly:\n *                                                                                                                                                                                                         $date->format('G') == 13\n *                                                                                                                                                                                                     or to set explicitly to a given hour:\n *                                                                                                                                                                                                         $date->setTime(13, 0, 0, 0)\n *                                                                                                                                                                                         Set midday/noon hour\n * @method Carbon                                             setTestNow($testNow = null)                                                                                                  Set a Carbon instance (real or mock) to be returned when a \"now\"\n *                                                                                                                                                                                         instance is created.  The provided instance will be returned\n *                                                                                                                                                                                         specifically under the following conditions:\n *                                                                                                                                                                                           - A call to the static now() method, ex. Carbon::now()\n *                                                                                                                                                                                           - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n *                                                                                                                                                                                           - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n *                                                                                                                                                                                           - When a string containing the desired time is passed to Carbon::parse().\n *                                                                                                                                                                                         Note the timezone parameter was left out of the examples above and\n *                                                                                                                                                                                         has no affect as the mock value will be returned regardless of its value.\n *                                                                                                                                                                                         Only the moment is mocked with setTestNow(), the timezone will still be the one passed\n *                                                                                                                                                                                         as parameter of date_default_timezone_get() as a fallback (see setTestNowAndTimezone()).\n *                                                                                                                                                                                         To clear the test instance call this method using the default\n *                                                                                                                                                                                         parameter of null.\n *                                                                                                                                                                                         /!\\ Use this method for unit tests only.\n * @method Carbon                                             setTestNowAndTimezone($testNow = null, $tz = null)                                                                           Set a Carbon instance (real or mock) to be returned when a \"now\"\n *                                                                                                                                                                                         instance is created.  The provided instance will be returned\n *                                                                                                                                                                                         specifically under the following conditions:\n *                                                                                                                                                                                           - A call to the static now() method, ex. Carbon::now()\n *                                                                                                                                                                                           - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n *                                                                                                                                                                                           - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n *                                                                                                                                                                                           - When a string containing the desired time is passed to Carbon::parse().\n *                                                                                                                                                                                         It will also align default timezone (e.g. call date_default_timezone_set()) with\n *                                                                                                                                                                                         the second argument or if null, with the timezone of the given date object.\n *                                                                                                                                                                                         To clear the test instance call this method using the default\n *                                                                                                                                                                                         parameter of null.\n *                                                                                                                                                                                         /!\\ Use this method for unit tests only.\n * @method void                                               setToStringFormat($format)                                                                                                   @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather let Carbon object being cast to string with DEFAULT_TO_STRING_FORMAT, and\n *                                                                                                                                                                                                     use other method or custom format passed to format() method if you need to dump another string\n *                                                                                                                                                                                                     format.\n *                                                                                                                                                                                         Set the default format used when type juggling a Carbon instance to a string.\n * @method void                                               setTranslator(TranslatorInterface $translator)                                                                               Set the default translator instance to use.\n * @method Carbon                                             setUtf8($utf8)                                                                                                               @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use UTF-8 language packages on every machine.\n *                                                                                                                                                                                         Set if UTF8 will be used for localized date/time.\n * @method void                                               setWeekEndsAt($day)                                                                                                          @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     Use $weekStartsAt optional parameter instead when using startOfWeek, floorWeek, ceilWeek\n *                                                                                                                                                                                                     or roundWeek method. You can also use the 'first_day_of_week' locale setting to change the\n *                                                                                                                                                                                                     start of week according to current locale selected and implicitly the end of week.\n *                                                                                                                                                                                         Set the last day of week\n * @method void                                               setWeekStartsAt($day)                                                                                                        @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     Use $weekEndsAt optional parameter instead when using endOfWeek method. You can also use the\n *                                                                                                                                                                                                     'first_day_of_week' locale setting to change the start of week according to current locale\n *                                                                                                                                                                                                     selected and implicitly the end of week.\n *                                                                                                                                                                                         Set the first day of week\n * @method void                                               setWeekendDays($days)                                                                                                        @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather consider week-end is always saturday and sunday, and if you have some custom\n *                                                                                                                                                                                                     week-end days to handle, give to those days an other name and create a macro for them:\n *                                                                                                                                                                                                     ```\n *                                                                                                                                                                                                     Carbon::macro('isDayOff', function ($date) {\n *                                                                                                                                                                                                         return $date->isSunday() || $date->isMonday();\n *                                                                                                                                                                                                     });\n *                                                                                                                                                                                                     Carbon::macro('isNotDayOff', function ($date) {\n *                                                                                                                                                                                                         return !$date->isDayOff();\n *                                                                                                                                                                                                     });\n *                                                                                                                                                                                                     if ($someDate->isDayOff()) ...\n *                                                                                                                                                                                                     if ($someDate->isNotDayOff()) ...\n *                                                                                                                                                                                                     // Add 5 not-off days\n *                                                                                                                                                                                                     $count = 5;\n *                                                                                                                                                                                                     while ($someDate->isDayOff() || ($count-- > 0)) {\n *                                                                                                                                                                                                         $someDate->addDay();\n *                                                                                                                                                                                                     }\n *                                                                                                                                                                                                     ```\n *                                                                                                                                                                                         Set weekend days\n * @method bool                                               shouldOverflowMonths()                                                                                                       Get the month overflow global behavior (can be overridden in specific instances).\n * @method bool                                               shouldOverflowYears()                                                                                                        Get the month overflow global behavior (can be overridden in specific instances).\n * @method string                                             singularUnit(string $unit)                                                                                                   Returns standardized singular of a given singular/plural unit name (in English).\n * @method Carbon                                             today($tz = null)                                                                                                            Create a Carbon instance for today.\n * @method Carbon                                             tomorrow($tz = null)                                                                                                         Create a Carbon instance for tomorrow.\n * @method string                                             translateTimeString($timeString, $from = null, $to = null, $mode = CarbonInterface::TRANSLATE_ALL)                           Translate a time string from a locale to an other.\n * @method string                                             translateWith(TranslatorInterface $translator, string $key, array $parameters = [], $number = null)                          Translate using translation string or callback available.\n * @method void                                               useMonthsOverflow($monthsOverflow = true)                                                                                    @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method Carbon                                             useStrictMode($strictModeEnabled = true)                                                                                     @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method void                                               useYearsOverflow($yearsOverflow = true)                                                                                      @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method mixed                                              withTestNow($testNow, $callback)                                                                                             Temporarily sets a static date to be used within the callback.\n *                                                                                                                                                                                         Using setTestNow to set the date, executing the callback, then\n *                                                                                                                                                                                         clearing the test instance.\n *                                                                                                                                                                                         /!\\ Use this method for unit tests only.\n * @method Carbon                                             yesterday($tz = null)                                                                                                        Create a Carbon instance for yesterday.\n *\n * </autodoc>\n */\nclass Factory\n{\n    protected $className = Carbon::class;\n\n    protected $settings = [];\n\n    public function __construct(array $settings = [], ?string $className = null)\n    {\n        if ($className) {\n            $this->className = $className;\n        }\n\n        $this->settings = $settings;\n    }\n\n    public function getClassName()\n    {\n        return $this->className;\n    }\n\n    public function setClassName(string $className)\n    {\n        $this->className = $className;\n\n        return $this;\n    }\n\n    public function className(string $className = null)\n    {\n        return $className === null ? $this->getClassName() : $this->setClassName($className);\n    }\n\n    public function getSettings()\n    {\n        return $this->settings;\n    }\n\n    public function setSettings(array $settings)\n    {\n        $this->settings = $settings;\n\n        return $this;\n    }\n\n    public function settings(array $settings = null)\n    {\n        return $settings === null ? $this->getSettings() : $this->setSettings($settings);\n    }\n\n    public function mergeSettings(array $settings)\n    {\n        $this->settings = array_merge($this->settings, $settings);\n\n        return $this;\n    }\n\n    public function __call($name, $arguments)\n    {\n        $method = new ReflectionMethod($this->className, $name);\n        $settings = $this->settings;\n\n        if ($settings && isset($settings['timezone'])) {\n            $tzParameters = array_filter($method->getParameters(), function ($parameter) {\n                return \\in_array($parameter->getName(), ['tz', 'timezone'], true);\n            });\n\n            if (isset($arguments[0]) && \\in_array($name, ['instance', 'make', 'create', 'parse'], true)) {\n                if ($arguments[0] instanceof DateTimeInterface) {\n                    $settings['innerTimezone'] = $settings['timezone'];\n                } elseif (\\is_string($arguments[0]) && date_parse($arguments[0])['is_localtime']) {\n                    unset($settings['timezone'], $settings['innerTimezone']);\n                }\n            } elseif (\\count($tzParameters)) {\n                array_splice($arguments, key($tzParameters), 0, [$settings['timezone']]);\n                unset($settings['timezone']);\n            }\n        }\n\n        $result = $this->className::$name(...$arguments);\n\n        return $result instanceof CarbonInterface && !empty($settings)\n            ? $result->settings($settings)\n            : $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Closure;\nuse DateTimeImmutable;\nuse DateTimeZone;\nuse Psr\\Clock\\ClockInterface;\n\n/**\n * A factory to generate CarbonImmutable instances with common settings.\n *\n * <autodoc generated by `composer phpdoc`>\n *\n * @method bool                                               canBeCreatedFromFormat($date, $format)                                                                                       Checks if the (date)time string is in a given format and valid to create a\n *                                                                                                                                                                                         new instance.\n * @method CarbonImmutable|false                              create($year = 0, $month = 1, $day = 1, $hour = 0, $minute = 0, $second = 0, $tz = null)                                     Create a new Carbon instance from a specific date and time.\n *                                                                                                                                                                                         If any of $year, $month or $day are set to null their now() values will\n *                                                                                                                                                                                         be used.\n *                                                                                                                                                                                         If $hour is null it will be set to its now() value and the default\n *                                                                                                                                                                                         values for $minute and $second will be their now() values.\n *                                                                                                                                                                                         If $hour is not null then the default values for $minute and $second\n *                                                                                                                                                                                         will be 0.\n * @method CarbonImmutable                                    createFromDate($year = null, $month = null, $day = null, $tz = null)                                                         Create a Carbon instance from just a date. The time portion is set to now.\n * @method CarbonImmutable|false                              createFromFormat($format, $time, $tz = null)                                                                                 Create a Carbon instance from a specific format.\n * @method CarbonImmutable|false                              createFromIsoFormat($format, $time, $tz = null, $locale = 'en', $translator = null)                                          Create a Carbon instance from a specific ISO format (same replacements as ->isoFormat()).\n * @method CarbonImmutable|false                              createFromLocaleFormat($format, $locale, $time, $tz = null)                                                                  Create a Carbon instance from a specific format and a string in a given language.\n * @method CarbonImmutable|false                              createFromLocaleIsoFormat($format, $locale, $time, $tz = null)                                                               Create a Carbon instance from a specific ISO format and a string in a given language.\n * @method CarbonImmutable                                    createFromTime($hour = 0, $minute = 0, $second = 0, $tz = null)                                                              Create a Carbon instance from just a time. The date portion is set to today.\n * @method CarbonImmutable                                    createFromTimeString($time, $tz = null)                                                                                      Create a Carbon instance from a time string. The date portion is set to today.\n * @method CarbonImmutable                                    createFromTimestamp($timestamp, $tz = null)                                                                                  Create a Carbon instance from a timestamp and set the timezone (use default one if not specified).\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method CarbonImmutable                                    createFromTimestampMs($timestamp, $tz = null)                                                                                Create a Carbon instance from a timestamp in milliseconds.\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method CarbonImmutable                                    createFromTimestampMsUTC($timestamp)                                                                                         Create a Carbon instance from a timestamp in milliseconds.\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method CarbonImmutable                                    createFromTimestampUTC($timestamp)                                                                                           Create a Carbon instance from an timestamp keeping the timezone to UTC.\n *                                                                                                                                                                                         Timestamp input can be given as int, float or a string containing one or more numbers.\n * @method CarbonImmutable                                    createMidnightDate($year = null, $month = null, $day = null, $tz = null)                                                     Create a Carbon instance from just a date. The time portion is set to midnight.\n * @method CarbonImmutable|false                              createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null)               Create a new safe Carbon instance from a specific date and time.\n *                                                                                                                                                                                         If any of $year, $month or $day are set to null their now() values will\n *                                                                                                                                                                                         be used.\n *                                                                                                                                                                                         If $hour is null it will be set to its now() value and the default\n *                                                                                                                                                                                         values for $minute and $second will be their now() values.\n *                                                                                                                                                                                         If $hour is not null then the default values for $minute and $second\n *                                                                                                                                                                                         will be 0.\n *                                                                                                                                                                                         If one of the set values is not valid, an InvalidDateException\n *                                                                                                                                                                                         will be thrown.\n * @method CarbonInterface                                    createStrict(?int $year = 0, ?int $month = 1, ?int $day = 1, ?int $hour = 0, ?int $minute = 0, ?int $second = 0, $tz = null) Create a new Carbon instance from a specific date and time using strict validation.\n * @method CarbonImmutable                                    disableHumanDiffOption($humanDiffOption)                                                                                     @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method CarbonImmutable                                    enableHumanDiffOption($humanDiffOption)                                                                                      @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method mixed                                              executeWithLocale($locale, $func)                                                                                            Set the current locale to the given, execute the passed function, reset the locale to previous one,\n *                                                                                                                                                                                         then return the result of the closure (or null if the closure was void).\n * @method CarbonImmutable                                    fromSerialized($value)                                                                                                       Create an instance from a serialized string.\n * @method void                                               genericMacro($macro, $priority = 0)                                                                                          Register a custom macro.\n * @method array                                              getAvailableLocales()                                                                                                        Returns the list of internally available locales and already loaded custom locales.\n *                                                                                                                                                                                         (It will ignore custom translator dynamic loading.)\n * @method Language[]                                         getAvailableLocalesInfo()                                                                                                    Returns list of Language object for each available locale. This object allow you to get the ISO name, native\n *                                                                                                                                                                                         name, region and variant of the locale.\n * @method array                                              getDays()                                                                                                                    Get the days of the week\n * @method string|null                                        getFallbackLocale()                                                                                                          Get the fallback locale.\n * @method array                                              getFormatsToIsoReplacements()                                                                                                List of replacements from date() format to isoFormat().\n * @method int                                                getHumanDiffOptions()                                                                                                        Return default humanDiff() options (merged flags as integer).\n * @method array                                              getIsoUnits()                                                                                                                Returns list of locale units for ISO formatting.\n * @method array                                              getLastErrors()                                                                                                              {@inheritdoc}\n * @method string                                             getLocale()                                                                                                                  Get the current translator locale.\n * @method callable|null                                      getMacro($name)                                                                                                              Get the raw callable macro registered globally for a given name.\n * @method int                                                getMidDayAt()                                                                                                                get midday/noon hour\n * @method Closure|CarbonImmutable                            getTestNow()                                                                                                                 Get the Carbon instance (real or mock) to be returned when a \"now\"\n *                                                                                                                                                                                         instance is created.\n * @method string                                             getTimeFormatByPrecision($unitPrecision)                                                                                     Return a format from H:i to H:i:s.u according to given unit precision.\n * @method string                                             getTranslationMessageWith($translator, string $key, ?string $locale = null, ?string $default = null)                         Returns raw translation message for a given key.\n * @method \\Symfony\\Component\\Translation\\TranslatorInterface getTranslator()                                                                                                              Get the default translator instance in use.\n * @method int                                                getWeekEndsAt()                                                                                                              Get the last day of week\n * @method int                                                getWeekStartsAt()                                                                                                            Get the first day of week\n * @method array                                              getWeekendDays()                                                                                                             Get weekend days\n * @method bool                                               hasFormat($date, $format)                                                                                                    Checks if the (date)time string is in a given format.\n * @method bool                                               hasFormatWithModifiers($date, $format)                                                                                       Checks if the (date)time string is in a given format.\n * @method bool                                               hasMacro($name)                                                                                                              Checks if macro is registered globally.\n * @method bool                                               hasRelativeKeywords($time)                                                                                                   Determine if a time string will produce a relative date.\n * @method bool                                               hasTestNow()                                                                                                                 Determine if there is a valid test instance set. A valid test instance\n *                                                                                                                                                                                         is anything that is not null.\n * @method CarbonImmutable                                    instance($date)                                                                                                              Create a Carbon instance from a DateTime one.\n * @method bool                                               isImmutable()                                                                                                                Returns true if the current class/instance is immutable.\n * @method bool                                               isModifiableUnit($unit)                                                                                                      Returns true if a property can be changed via setter.\n * @method bool                                               isMutable()                                                                                                                  Returns true if the current class/instance is mutable.\n * @method bool                                               isStrictModeEnabled()                                                                                                        Returns true if the strict mode is globally in use, false else.\n *                                                                                                                                                                                         (It can be overridden in specific instances.)\n * @method bool                                               localeHasDiffOneDayWords($locale)                                                                                            Returns true if the given locale is internally supported and has words for 1-day diff (just now, yesterday, tomorrow).\n *                                                                                                                                                                                         Support is considered enabled if the 3 words are translated in the given locale.\n * @method bool                                               localeHasDiffSyntax($locale)                                                                                                 Returns true if the given locale is internally supported and has diff syntax support (ago, from now, before, after).\n *                                                                                                                                                                                         Support is considered enabled if the 4 sentences are translated in the given locale.\n * @method bool                                               localeHasDiffTwoDayWords($locale)                                                                                            Returns true if the given locale is internally supported and has words for 2-days diff (before yesterday, after tomorrow).\n *                                                                                                                                                                                         Support is considered enabled if the 2 words are translated in the given locale.\n * @method bool                                               localeHasPeriodSyntax($locale)                                                                                               Returns true if the given locale is internally supported and has period syntax support (X times, every X, from X, to X).\n *                                                                                                                                                                                         Support is considered enabled if the 4 sentences are translated in the given locale.\n * @method bool                                               localeHasShortUnits($locale)                                                                                                 Returns true if the given locale is internally supported and has short-units support.\n *                                                                                                                                                                                         Support is considered enabled if either year, day or hour has a short variant translated.\n * @method void                                               macro($name, $macro)                                                                                                         Register a custom macro.\n * @method CarbonImmutable|null                               make($var)                                                                                                                   Make a Carbon instance from given variable if possible.\n *                                                                                                                                                                                         Always return a new instance. Parse only strings and only these likely to be dates (skip intervals\n *                                                                                                                                                                                         and recurrences). Throw an exception for invalid format, but otherwise return null.\n * @method CarbonImmutable                                    maxValue()                                                                                                                   Create a Carbon instance for the greatest supported date.\n * @method CarbonImmutable                                    minValue()                                                                                                                   Create a Carbon instance for the lowest supported date.\n * @method void                                               mixin($mixin)                                                                                                                Mix another object into the class.\n * @method CarbonImmutable                                    parse($time = null, $tz = null)                                                                                              Create a carbon instance from a string.\n *                                                                                                                                                                                         This is an alias for the constructor that allows better fluent syntax\n *                                                                                                                                                                                         as it allows you to do Carbon::parse('Monday next week')->fn() rather\n *                                                                                                                                                                                         than (new Carbon('Monday next week'))->fn().\n * @method CarbonImmutable                                    parseFromLocale($time, $locale = null, $tz = null)                                                                           Create a carbon instance from a localized string (in French, Japanese, Arabic, etc.).\n * @method string                                             pluralUnit(string $unit)                                                                                                     Returns standardized plural of a given singular/plural unit name (in English).\n * @method CarbonImmutable|false                              rawCreateFromFormat($format, $time, $tz = null)                                                                              Create a Carbon instance from a specific format.\n * @method CarbonImmutable                                    rawParse($time = null, $tz = null)                                                                                           Create a carbon instance from a string.\n *                                                                                                                                                                                         This is an alias for the constructor that allows better fluent syntax\n *                                                                                                                                                                                         as it allows you to do Carbon::parse('Monday next week')->fn() rather\n *                                                                                                                                                                                         than (new Carbon('Monday next week'))->fn().\n * @method CarbonImmutable                                    resetMacros()                                                                                                                Remove all macros and generic macros.\n * @method void                                               resetMonthsOverflow()                                                                                                        @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method void                                               resetToStringFormat()                                                                                                        Reset the format used to the default when type juggling a Carbon instance to a string\n * @method void                                               resetYearsOverflow()                                                                                                         @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method void                                               serializeUsing($callback)                                                                                                    @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather transform Carbon object before the serialization.\n *                                                                                                                                                                                         JSON serialize all Carbon instances using the given callback.\n * @method CarbonImmutable                                    setFallbackLocale($locale)                                                                                                   Set the fallback locale.\n * @method CarbonImmutable                                    setHumanDiffOptions($humanDiffOptions)                                                                                       @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method bool                                               setLocale($locale)                                                                                                           Set the current translator locale and indicate if the source locale file exists.\n *                                                                                                                                                                                         Pass 'auto' as locale to use closest language from the current LC_TIME locale.\n * @method void                                               setMidDayAt($hour)                                                                                                           @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather consider mid-day is always 12pm, then if you need to test if it's an other\n *                                                                                                                                                                                                     hour, test it explicitly:\n *                                                                                                                                                                                                         $date->format('G') == 13\n *                                                                                                                                                                                                     or to set explicitly to a given hour:\n *                                                                                                                                                                                                         $date->setTime(13, 0, 0, 0)\n *                                                                                                                                                                                         Set midday/noon hour\n * @method CarbonImmutable                                    setTestNow($testNow = null)                                                                                                  Set a Carbon instance (real or mock) to be returned when a \"now\"\n *                                                                                                                                                                                         instance is created.  The provided instance will be returned\n *                                                                                                                                                                                         specifically under the following conditions:\n *                                                                                                                                                                                           - A call to the static now() method, ex. Carbon::now()\n *                                                                                                                                                                                           - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n *                                                                                                                                                                                           - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n *                                                                                                                                                                                           - When a string containing the desired time is passed to Carbon::parse().\n *                                                                                                                                                                                         Note the timezone parameter was left out of the examples above and\n *                                                                                                                                                                                         has no affect as the mock value will be returned regardless of its value.\n *                                                                                                                                                                                         Only the moment is mocked with setTestNow(), the timezone will still be the one passed\n *                                                                                                                                                                                         as parameter of date_default_timezone_get() as a fallback (see setTestNowAndTimezone()).\n *                                                                                                                                                                                         To clear the test instance call this method using the default\n *                                                                                                                                                                                         parameter of null.\n *                                                                                                                                                                                         /!\\ Use this method for unit tests only.\n * @method CarbonImmutable                                    setTestNowAndTimezone($testNow = null, $tz = null)                                                                           Set a Carbon instance (real or mock) to be returned when a \"now\"\n *                                                                                                                                                                                         instance is created.  The provided instance will be returned\n *                                                                                                                                                                                         specifically under the following conditions:\n *                                                                                                                                                                                           - A call to the static now() method, ex. Carbon::now()\n *                                                                                                                                                                                           - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n *                                                                                                                                                                                           - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n *                                                                                                                                                                                           - When a string containing the desired time is passed to Carbon::parse().\n *                                                                                                                                                                                         It will also align default timezone (e.g. call date_default_timezone_set()) with\n *                                                                                                                                                                                         the second argument or if null, with the timezone of the given date object.\n *                                                                                                                                                                                         To clear the test instance call this method using the default\n *                                                                                                                                                                                         parameter of null.\n *                                                                                                                                                                                         /!\\ Use this method for unit tests only.\n * @method void                                               setToStringFormat($format)                                                                                                   @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather let Carbon object being cast to string with DEFAULT_TO_STRING_FORMAT, and\n *                                                                                                                                                                                                     use other method or custom format passed to format() method if you need to dump another string\n *                                                                                                                                                                                                     format.\n *                                                                                                                                                                                         Set the default format used when type juggling a Carbon instance to a string.\n * @method void                                               setTranslator(TranslatorInterface $translator)                                                                               Set the default translator instance to use.\n * @method CarbonImmutable                                    setUtf8($utf8)                                                                                                               @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use UTF-8 language packages on every machine.\n *                                                                                                                                                                                         Set if UTF8 will be used for localized date/time.\n * @method void                                               setWeekEndsAt($day)                                                                                                          @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     Use $weekStartsAt optional parameter instead when using startOfWeek, floorWeek, ceilWeek\n *                                                                                                                                                                                                     or roundWeek method. You can also use the 'first_day_of_week' locale setting to change the\n *                                                                                                                                                                                                     start of week according to current locale selected and implicitly the end of week.\n *                                                                                                                                                                                         Set the last day of week\n * @method void                                               setWeekStartsAt($day)                                                                                                        @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     Use $weekEndsAt optional parameter instead when using endOfWeek method. You can also use the\n *                                                                                                                                                                                                     'first_day_of_week' locale setting to change the start of week according to current locale\n *                                                                                                                                                                                                     selected and implicitly the end of week.\n *                                                                                                                                                                                         Set the first day of week\n * @method void                                               setWeekendDays($days)                                                                                                        @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather consider week-end is always saturday and sunday, and if you have some custom\n *                                                                                                                                                                                                     week-end days to handle, give to those days an other name and create a macro for them:\n *                                                                                                                                                                                                     ```\n *                                                                                                                                                                                                     Carbon::macro('isDayOff', function ($date) {\n *                                                                                                                                                                                                         return $date->isSunday() || $date->isMonday();\n *                                                                                                                                                                                                     });\n *                                                                                                                                                                                                     Carbon::macro('isNotDayOff', function ($date) {\n *                                                                                                                                                                                                         return !$date->isDayOff();\n *                                                                                                                                                                                                     });\n *                                                                                                                                                                                                     if ($someDate->isDayOff()) ...\n *                                                                                                                                                                                                     if ($someDate->isNotDayOff()) ...\n *                                                                                                                                                                                                     // Add 5 not-off days\n *                                                                                                                                                                                                     $count = 5;\n *                                                                                                                                                                                                     while ($someDate->isDayOff() || ($count-- > 0)) {\n *                                                                                                                                                                                                         $someDate->addDay();\n *                                                                                                                                                                                                     }\n *                                                                                                                                                                                                     ```\n *                                                                                                                                                                                         Set weekend days\n * @method bool                                               shouldOverflowMonths()                                                                                                       Get the month overflow global behavior (can be overridden in specific instances).\n * @method bool                                               shouldOverflowYears()                                                                                                        Get the month overflow global behavior (can be overridden in specific instances).\n * @method string                                             singularUnit(string $unit)                                                                                                   Returns standardized singular of a given singular/plural unit name (in English).\n * @method CarbonImmutable                                    today($tz = null)                                                                                                            Create a Carbon instance for today.\n * @method CarbonImmutable                                    tomorrow($tz = null)                                                                                                         Create a Carbon instance for tomorrow.\n * @method string                                             translateTimeString($timeString, $from = null, $to = null, $mode = CarbonInterface::TRANSLATE_ALL)                           Translate a time string from a locale to an other.\n * @method string                                             translateWith(TranslatorInterface $translator, string $key, array $parameters = [], $number = null)                          Translate using translation string or callback available.\n * @method void                                               useMonthsOverflow($monthsOverflow = true)                                                                                    @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method CarbonImmutable                                    useStrictMode($strictModeEnabled = true)                                                                                     @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n * @method void                                               useYearsOverflow($yearsOverflow = true)                                                                                      @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n *                                                                                                                                                                                                     You should rather use the ->settings() method.\n *                                                                                                                                                                                                     Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n *                                                                                                                                                                                                     are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n * @method mixed                                              withTestNow($testNow, $callback)                                                                                             Temporarily sets a static date to be used within the callback.\n *                                                                                                                                                                                         Using setTestNow to set the date, executing the callback, then\n *                                                                                                                                                                                         clearing the test instance.\n *                                                                                                                                                                                         /!\\ Use this method for unit tests only.\n * @method CarbonImmutable                                    yesterday($tz = null)                                                                                                        Create a Carbon instance for yesterday.\n *\n * </autodoc>\n */\nclass FactoryImmutable extends Factory implements ClockInterface\n{\n    protected $className = CarbonImmutable::class;\n\n    /**\n     * Get a Carbon instance for the current date and time.\n     *\n     * @param DateTimeZone|string|int|null $tz\n     *\n     * @return CarbonImmutable\n     */\n    public function now($tz = null): DateTimeImmutable\n    {\n        $className = $this->className;\n\n        return new $className(null, $tz);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/aa.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/aa_DJ.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/aa_DJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Qunxa Garablu', 'Kudo', 'Ciggilta Kudo', 'Agda Baxisso', 'Caxah Alsa', 'Qasa Dirri', 'Qado Dirri', 'Liiqen', 'Waysu', 'Diteli', 'Ximoli', 'Kaxxa Garablu'],\n    'months_short' => ['qun', 'nah', 'cig', 'agd', 'cax', 'qas', 'qad', 'leq', 'way', 'dit', 'xim', 'kax'],\n    'weekdays' => ['Acaada', 'Etleeni', 'Talaata', 'Arbaqa', 'Kamiisi', 'Gumqata', 'Sabti'],\n    'weekdays_short' => ['aca', 'etl', 'tal', 'arb', 'kam', 'gum', 'sab'],\n    'weekdays_min' => ['aca', 'etl', 'tal', 'arb', 'kam', 'gum', 'sab'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['saaku', 'carra'],\n\n    'year' => ':count gaqambo', // less reliable\n    'y' => ':count gaqambo', // less reliable\n    'a_year' => ':count gaqambo', // less reliable\n\n    'month' => ':count àlsa',\n    'm' => ':count àlsa',\n    'a_month' => ':count àlsa',\n\n    'day' => ':count saaku', // less reliable\n    'd' => ':count saaku', // less reliable\n    'a_day' => ':count saaku', // less reliable\n\n    'hour' => ':count ayti', // less reliable\n    'h' => ':count ayti', // less reliable\n    'a_hour' => ':count ayti', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/aa_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Qunxa Garablu', 'Naharsi Kudo', 'Ciggilta Kudo', 'Agda Baxisso', 'Caxah Alsa', 'Qasa Dirri', 'Qado Dirri', 'Leqeeni', 'Waysu', 'Diteli', 'Ximoli', 'Kaxxa Garablu'],\n    'months_short' => ['Qun', 'Nah', 'Cig', 'Agd', 'Cax', 'Qas', 'Qad', 'Leq', 'Way', 'Dit', 'Xim', 'Kax'],\n    'weekdays' => ['Acaada', 'Etleeni', 'Talaata', 'Arbaqa', 'Kamiisi', 'Gumqata', 'Sabti'],\n    'weekdays_short' => ['Aca', 'Etl', 'Tal', 'Arb', 'Kam', 'Gum', 'Sab'],\n    'weekdays_min' => ['Aca', 'Etl', 'Tal', 'Arb', 'Kam', 'Gum', 'Sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['saaku', 'carra'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/aa_ER@saaho.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Qunxa Garablu', 'Naharsi Kudo', 'Ciggilta Kudo', 'Agda Baxisso', 'Caxah Alsa', 'Qasa Dirri', 'Qado Dirri', 'Leqeeni', 'Waysu', 'Diteli', 'Ximoli', 'Kaxxa Garablu'],\n    'months_short' => ['Qun', 'Nah', 'Cig', 'Agd', 'Cax', 'Qas', 'Qad', 'Leq', 'Way', 'Dit', 'Xim', 'Kax'],\n    'weekdays' => ['Naba Sambat', 'Sani', 'Salus', 'Rabuq', 'Camus', 'Jumqata', 'Qunxa Sambat'],\n    'weekdays_short' => ['Nab', 'San', 'Sal', 'Rab', 'Cam', 'Jum', 'Qun'],\n    'weekdays_min' => ['Nab', 'San', 'Sal', 'Rab', 'Cam', 'Jum', 'Qun'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['saaku', 'carra'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/aa_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Qunxa Garablu', 'Kudo', 'Ciggilta Kudo', 'Agda Baxisso', 'Caxah Alsa', 'Qasa Dirri', 'Qado Dirri', 'Liiqen', 'Waysu', 'Diteli', 'Ximoli', 'Kaxxa Garablu'],\n    'months_short' => ['Qun', 'Kud', 'Cig', 'Agd', 'Cax', 'Qas', 'Qad', 'Leq', 'Way', 'Dit', 'Xim', 'Kax'],\n    'weekdays' => ['Acaada', 'Etleeni', 'Talaata', 'Arbaqa', 'Kamiisi', 'Gumqata', 'Sabti'],\n    'weekdays_short' => ['Aca', 'Etl', 'Tal', 'Arb', 'Kam', 'Gum', 'Sab'],\n    'weekdays_min' => ['Aca', 'Etl', 'Tal', 'Arb', 'Kam', 'Gum', 'Sab'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['saaku', 'carra'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/af.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - JD Isaacks\n * - Pierre du Plessis\n */\nreturn [\n    'year' => ':count jaar',\n    'a_year' => '\\'n jaar|:count jaar',\n    'y' => ':count j.',\n    'month' => ':count maand|:count maande',\n    'a_month' => '\\'n maand|:count maande',\n    'm' => ':count maa.',\n    'week' => ':count week|:count weke',\n    'a_week' => '\\'n week|:count weke',\n    'w' => ':count w.',\n    'day' => ':count dag|:count dae',\n    'a_day' => '\\'n dag|:count dae',\n    'd' => ':count d.',\n    'hour' => ':count uur',\n    'a_hour' => '\\'n uur|:count uur',\n    'h' => ':count u.',\n    'minute' => ':count minuut|:count minute',\n    'a_minute' => '\\'n minuut|:count minute',\n    'min' => ':count min.',\n    'second' => ':count sekond|:count sekondes',\n    'a_second' => '\\'n paar sekondes|:count sekondes',\n    's' => ':count s.',\n    'ago' => ':time gelede',\n    'from_now' => 'oor :time',\n    'after' => ':time na',\n    'before' => ':time voor',\n    'diff_now' => 'Nou',\n    'diff_today' => 'Vandag',\n    'diff_today_regexp' => 'Vandag(?:\\\\s+om)?',\n    'diff_yesterday' => 'Gister',\n    'diff_yesterday_regexp' => 'Gister(?:\\\\s+om)?',\n    'diff_tomorrow' => 'Môre',\n    'diff_tomorrow_regexp' => 'Môre(?:\\\\s+om)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Vandag om] LT',\n        'nextDay' => '[Môre om] LT',\n        'nextWeek' => 'dddd [om] LT',\n        'lastDay' => '[Gister om] LT',\n        'lastWeek' => '[Laas] dddd [om] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        return $number.(($number === 1 || $number === 8 || $number >= 20) ? 'ste' : 'de');\n    },\n    'meridiem' => ['VM', 'NM'],\n    'months' => ['Januarie', 'Februarie', 'Maart', 'April', 'Mei', 'Junie', 'Julie', 'Augustus', 'September', 'Oktober', 'November', 'Desember'],\n    'months_short' => ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],\n    'weekdays_short' => ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],\n    'weekdays_min' => ['So', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' en '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/af_NA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/af.php', [\n    'meridiem' => ['v', 'n'],\n    'weekdays' => ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],\n    'weekdays_short' => ['So.', 'Ma.', 'Di.', 'Wo.', 'Do.', 'Vr.', 'Sa.'],\n    'weekdays_min' => ['So.', 'Ma.', 'Di.', 'Wo.', 'Do.', 'Vr.', 'Sa.'],\n    'months' => ['Januarie', 'Februarie', 'Maart', 'April', 'Mei', 'Junie', 'Julie', 'Augustus', 'September', 'Oktober', 'November', 'Desember'],\n    'months_short' => ['Jan.', 'Feb.', 'Mrt.', 'Apr.', 'Mei', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Des.'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'DD MMM YYYY',\n        'LLL' => 'DD MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, DD MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/af_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/af.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/agq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['a.g', 'a.k'],\n    'weekdays' => ['tsuʔntsɨ', 'tsuʔukpà', 'tsuʔughɔe', 'tsuʔutɔ̀mlò', 'tsuʔumè', 'tsuʔughɨ̂m', 'tsuʔndzɨkɔʔɔ'],\n    'weekdays_short' => ['nts', 'kpa', 'ghɔ', 'tɔm', 'ume', 'ghɨ', 'dzk'],\n    'weekdays_min' => ['nts', 'kpa', 'ghɔ', 'tɔm', 'ume', 'ghɨ', 'dzk'],\n    'months' => ['ndzɔ̀ŋɔ̀nùm', 'ndzɔ̀ŋɔ̀kƗ̀zùʔ', 'ndzɔ̀ŋɔ̀tƗ̀dʉ̀ghà', 'ndzɔ̀ŋɔ̀tǎafʉ̄ghā', 'ndzɔ̀ŋèsèe', 'ndzɔ̀ŋɔ̀nzùghò', 'ndzɔ̀ŋɔ̀dùmlo', 'ndzɔ̀ŋɔ̀kwîfɔ̀e', 'ndzɔ̀ŋɔ̀tƗ̀fʉ̀ghàdzughù', 'ndzɔ̀ŋɔ̀ghǔuwelɔ̀m', 'ndzɔ̀ŋɔ̀chwaʔàkaa wo', 'ndzɔ̀ŋèfwòo'],\n    'months_short' => ['nùm', 'kɨz', 'tɨd', 'taa', 'see', 'nzu', 'dum', 'fɔe', 'dzu', 'lɔm', 'kaa', 'fwo'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/agr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/agr_PE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/agr_PE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - somosazucar.org    libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Petsatin', 'Kupitin', 'Uyaitin', 'Tayutin', 'Kegketin', 'Tegmatin', 'Kuntutin', 'Yagkujutin', 'Daiktatin', 'Ipamtatin', 'Shinutin', 'Sakamtin'],\n    'months_short' => ['Pet', 'Kup', 'Uya', 'Tay', 'Keg', 'Teg', 'Kun', 'Yag', 'Dait', 'Ipam', 'Shin', 'Sak'],\n    'weekdays' => ['Tuntuamtin', 'Achutin', 'Kugkuktin', 'Saketin', 'Shimpitin', 'Imaptin', 'Bataetin'],\n    'weekdays_short' => ['Tun', 'Ach', 'Kug', 'Sak', 'Shim', 'Im', 'Bat'],\n    'weekdays_min' => ['Tun', 'Ach', 'Kug', 'Sak', 'Shim', 'Im', 'Bat'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 7,\n    'meridiem' => ['VM', 'NM'],\n\n    'year' => ':count yaya', // less reliable\n    'y' => ':count yaya', // less reliable\n    'a_year' => ':count yaya', // less reliable\n\n    'month' => ':count nantu', // less reliable\n    'm' => ':count nantu', // less reliable\n    'a_month' => ':count nantu', // less reliable\n\n    'day' => ':count nayaim', // less reliable\n    'd' => ':count nayaim', // less reliable\n    'a_day' => ':count nayaim', // less reliable\n\n    'hour' => ':count kuwiš', // less reliable\n    'h' => ':count kuwiš', // less reliable\n    'a_hour' => ':count kuwiš', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ak.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ak_GH.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ak_GH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Sugar Labs // OLPC sugarlabs.org libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY/MM/DD',\n    ],\n    'months' => ['Sanda-Ɔpɛpɔn', 'Kwakwar-Ɔgyefuo', 'Ebɔw-Ɔbenem', 'Ebɔbira-Oforisuo', 'Esusow Aketseaba-Kɔtɔnimba', 'Obirade-Ayɛwohomumu', 'Ayɛwoho-Kitawonsa', 'Difuu-Ɔsandaa', 'Fankwa-Ɛbɔ', 'Ɔbɛsɛ-Ahinime', 'Ɔberɛfɛw-Obubuo', 'Mumu-Ɔpɛnimba'],\n    'months_short' => ['S-Ɔ', 'K-Ɔ', 'E-Ɔ', 'E-O', 'E-K', 'O-A', 'A-K', 'D-Ɔ', 'F-Ɛ', 'Ɔ-A', 'Ɔ-O', 'M-Ɔ'],\n    'weekdays' => ['Kwesida', 'Dwowda', 'Benada', 'Wukuda', 'Yawda', 'Fida', 'Memeneda'],\n    'weekdays_short' => ['Kwe', 'Dwo', 'Ben', 'Wuk', 'Yaw', 'Fia', 'Mem'],\n    'weekdays_min' => ['Kwe', 'Dwo', 'Ben', 'Wuk', 'Yaw', 'Fia', 'Mem'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['AN', 'EW'],\n\n    'year' => ':count afe',\n    'y' => ':count afe',\n    'a_year' => ':count afe',\n\n    'month' => ':count bosume',\n    'm' => ':count bosume',\n    'a_month' => ':count bosume',\n\n    'day' => ':count ɛda',\n    'd' => ':count ɛda',\n    'a_day' => ':count ɛda',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/am.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/am_ET.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/am_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጃንዩወሪ', 'ፌብሩወሪ', 'ማርች', 'ኤፕሪል', 'ሜይ', 'ጁን', 'ጁላይ', 'ኦገስት', 'ሴፕቴምበር', 'ኦክቶበር', 'ኖቬምበር', 'ዲሴምበር'],\n    'months_short' => ['ጃንዩ', 'ፌብሩ', 'ማርች', 'ኤፕረ', 'ሜይ ', 'ጁን ', 'ጁላይ', 'ኦገስ', 'ሴፕቴ', 'ኦክተ', 'ኖቬም', 'ዲሴም'],\n    'weekdays' => ['እሑድ', 'ሰኞ', 'ማክሰኞ', 'ረቡዕ', 'ሐሙስ', 'ዓርብ', 'ቅዳሜ'],\n    'weekdays_short' => ['እሑድ', 'ሰኞ ', 'ማክሰ', 'ረቡዕ', 'ሐሙስ', 'ዓርብ', 'ቅዳሜ'],\n    'weekdays_min' => ['እሑድ', 'ሰኞ ', 'ማክሰ', 'ረቡዕ', 'ሐሙስ', 'ዓርብ', 'ቅዳሜ'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ጡዋት', 'ከሰዓት'],\n\n    'year' => ':count አመት',\n    'y' => ':count አመት',\n    'a_year' => ':count አመት',\n\n    'month' => ':count ወር',\n    'm' => ':count ወር',\n    'a_month' => ':count ወር',\n\n    'week' => ':count ሳምንት',\n    'w' => ':count ሳምንት',\n    'a_week' => ':count ሳምንት',\n\n    'day' => ':count ቀን',\n    'd' => ':count ቀን',\n    'a_day' => ':count ቀን',\n\n    'hour' => ':count ሰዓት',\n    'h' => ':count ሰዓት',\n    'a_hour' => ':count ሰዓት',\n\n    'minute' => ':count ደቂቃ',\n    'min' => ':count ደቂቃ',\n    'a_minute' => ':count ደቂቃ',\n\n    'second' => ':count ሴኮንድ',\n    's' => ':count ሴኮንድ',\n    'a_second' => ':count ሴኮንድ',\n\n    'ago' => 'ከ:time በፊት',\n    'from_now' => 'በ:time ውስጥ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/an.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/an_ES.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/an_ES.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Softaragones Jordi Mallach Pérez, Juan Pablo Martínez bug-glibc-locales@gnu.org, softaragones@softaragones.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['chinero', 'febrero', 'marzo', 'abril', 'mayo', 'chunyo', 'chuliol', 'agosto', 'setiembre', 'octubre', 'noviembre', 'aviento'],\n    'months_short' => ['chi', 'feb', 'mar', 'abr', 'may', 'chn', 'chl', 'ago', 'set', 'oct', 'nov', 'avi'],\n    'weekdays' => ['domingo', 'luns', 'martes', 'mierques', 'chueves', 'viernes', 'sabado'],\n    'weekdays_short' => ['dom', 'lun', 'mar', 'mie', 'chu', 'vie', 'sab'],\n    'weekdays_min' => ['dom', 'lun', 'mar', 'mie', 'chu', 'vie', 'sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count año',\n    'y' => ':count año',\n    'a_year' => ':count año',\n\n    'month' => ':count mes',\n    'm' => ':count mes',\n    'a_month' => ':count mes',\n\n    'week' => ':count semana',\n    'w' => ':count semana',\n    'a_week' => ':count semana',\n\n    'day' => ':count día',\n    'd' => ':count día',\n    'a_day' => ':count día',\n\n    'hour' => ':count reloch', // less reliable\n    'h' => ':count reloch', // less reliable\n    'a_hour' => ':count reloch', // less reliable\n\n    'minute' => ':count minuto',\n    'min' => ':count minuto',\n    'a_minute' => ':count minuto',\n\n    'second' => ':count segundo',\n    's' => ':count segundo',\n    'a_second' => ':count segundo',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/anp.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/anp_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/anp_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bhashaghar@googlegroups.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितंबर', 'अक्टूबर', 'नवंबर', 'दिसंबर\"'],\n    'months_short' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितंबर', 'अक्टूबर', 'नवंबर', 'दिसंबर'],\n    'weekdays' => ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'बृहस्पतिवार', 'शुक्रवार', 'शनिवार'],\n    'weekdays_short' => ['रवि', 'सोम', 'मंगल', 'बुध', 'बृहस्पति', 'शुक्र', 'शनि'],\n    'weekdays_min' => ['रवि', 'सोम', 'मंगल', 'बुध', 'बृहस्पति', 'शुक्र', 'शनि'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Atef Ben Ali (atefBB)\n * - Ibrahim AshShohail\n * - MLTDev\n * - Mohamed Sabil (mohamedsabil83)\n * - Yazan Alnugnugh (yazan-alnugnugh)\n */\n$months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'a_year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'a_month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'a_week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'a_day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'a_hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'a_minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'a_second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => ':time من الآن',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدًا(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'اث', 'ثل', 'أر', 'خم', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم عند الساعة] LT',\n        'nextDay' => '[غدًا عند الساعة] LT',\n        'nextWeek' => 'dddd [عند الساعة] LT',\n        'lastDay' => '[أمس عند الساعة] LT',\n        'lastWeek' => 'dddd [عند الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_AE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت '],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_BH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_DJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_DZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * Authors:\n * - Josh Soref\n * - Noureddine LOUAHEDJ\n * - JD Isaacks\n * - Atef Ben Ali (atefBB)\n * - Mohamed Sabil (mohamedsabil83)\n */\n$months = [\n    'جانفي',\n    'فيفري',\n    'مارس',\n    'أفريل',\n    'ماي',\n    'جوان',\n    'جويلية',\n    'أوت',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'a_year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'a_month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'a_week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'a_day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'a_hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'a_minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'a_second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => 'في :time',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدا(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['أح', 'إث', 'ثلا', 'أر', 'خم', 'جم', 'سب'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 4,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم على الساعة] LT',\n        'nextDay' => '[غدا على الساعة] LT',\n        'nextWeek' => 'dddd [على الساعة] LT',\n        'lastDay' => '[أمس على الساعة] LT',\n        'lastWeek' => 'dddd [على الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_EG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_EH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_IL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_IQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'months_short' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_JO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'months_short' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_KM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_KW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * Authors:\n * - Josh Soref\n * - Nusret Parlak\n * - JD Isaacks\n * - Atef Ben Ali (atefBB)\n * - Mohamed Sabil (mohamedsabil83)\n * - Abdullah-Alhariri\n */\n$months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'ماي',\n    'يونيو',\n    'يوليوز',\n    'غشت',\n    'شتنبر',\n    'أكتوبر',\n    'نونبر',\n    'دجنبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'a_year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'a_month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'a_week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'a_day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'a_hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'a_minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'a_second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => 'في :time',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدا(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم على الساعة] LT',\n        'nextDay' => '[غدا على الساعة] LT',\n        'nextWeek' => 'dddd [على الساعة] LT',\n        'lastDay' => '[أمس على الساعة] LT',\n        'lastWeek' => 'dddd [على الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_LB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'months_short' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_LY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Atef Ben Ali (atefBB)\n * - Ibrahim AshShohail\n * - MLTDev\n */\n\n$months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر',\n];\n\nreturn [\n    'year' => implode('|', [':count سنة', 'سنة', 'سنتين', ':count سنوات', ':count سنة']),\n    'a_year' => implode('|', [':count سنة', 'سنة', 'سنتين', ':count سنوات', ':count سنة']),\n    'month' => implode('|', [':count شهر', 'شهر', 'شهرين', ':count أشهر', ':count شهر']),\n    'a_month' => implode('|', [':count شهر', 'شهر', 'شهرين', ':count أشهر', ':count شهر']),\n    'week' => implode('|', [':count أسبوع', 'أسبوع', 'أسبوعين', ':count أسابيع', ':count أسبوع']),\n    'a_week' => implode('|', [':count أسبوع', 'أسبوع', 'أسبوعين', ':count أسابيع', ':count أسبوع']),\n    'day' => implode('|', [':count يوم', 'يوم', 'يومين', ':count أيام', ':count يوم']),\n    'a_day' => implode('|', [':count يوم', 'يوم', 'يومين', ':count أيام', ':count يوم']),\n    'hour' => implode('|', [':count ساعة', 'ساعة', 'ساعتين', ':count ساعات', ':count ساعة']),\n    'a_hour' => implode('|', [':count ساعة', 'ساعة', 'ساعتين', ':count ساعات', ':count ساعة']),\n    'minute' => implode('|', [':count دقيقة', 'دقيقة', 'دقيقتين', ':count دقائق', ':count دقيقة']),\n    'a_minute' => implode('|', [':count دقيقة', 'دقيقة', 'دقيقتين', ':count دقائق', ':count دقيقة']),\n    'second' => implode('|', [':count ثانية', 'ثانية', 'ثانيتين', ':count ثواني', ':count ثانية']),\n    'a_second' => implode('|', [':count ثانية', 'ثانية', 'ثانيتين', ':count ثواني', ':count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => ':time من الآن',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدًا(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['مرة', 'مرة', ':count مرتين', ':count مرات', ':count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'اث', 'ثل', 'أر', 'خم', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم عند الساعة] LT',\n        'nextDay' => '[غدًا عند الساعة] LT',\n        'nextWeek' => 'dddd [عند الساعة] LT',\n        'lastDay' => '[أمس عند الساعة] LT',\n        'lastWeek' => 'dddd [عند الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_MA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n * - Atef Ben Ali (atefBB)\n * - Mohamed Sabil (mohamedsabil83)\n */\n$months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'ماي',\n    'يونيو',\n    'يوليوز',\n    'غشت',\n    'شتنبر',\n    'أكتوبر',\n    'نونبر',\n    'دجنبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'a_year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'a_month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'a_week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'a_day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'a_hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'a_minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'a_second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => 'في :time',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدا(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم على الساعة] LT',\n        'nextDay' => '[غدا على الساعة] LT',\n        'nextWeek' => 'dddd [على الساعة] LT',\n        'lastDay' => '[أمس على الساعة] LT',\n        'lastWeek' => 'dddd [على الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_MR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_OM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_PS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_QA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_SA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n * - Atef Ben Ali (atefBB)\n * - Mohamed Sabil (mohamedsabil83)\n * - Abdullah-Alhariri\n */\n$months = [\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'a_year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'a_month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'a_week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'a_day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'a_hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'a_minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'a_second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => 'في :time',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدا(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم على الساعة] LT',\n        'nextDay' => '[غدا على الساعة] LT',\n        'nextWeek' => 'dddd [على الساعة] LT',\n        'lastDay' => '[أمس على الساعة] LT',\n        'lastWeek' => 'dddd [على الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_SD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_SO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_SS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_SY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'months_short' => ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'أيار', 'حزيران', 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_Shakl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Abdellah Chadidi\n * - Atef Ben Ali (atefBB)\n * - Mohamed Sabil (mohamedsabil83)\n */\n// Same for long and short\n$months = [\n    // @TODO add shakl to months\n    'يناير',\n    'فبراير',\n    'مارس',\n    'أبريل',\n    'مايو',\n    'يونيو',\n    'يوليو',\n    'أغسطس',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سَنَة', '{1}سَنَة', '{2}سَنَتَيْن', ']2,11[:count سَنَوَات', ']10,Inf[:count سَنَة']),\n    'a_year' => implode('|', ['{0}:count سَنَة', '{1}سَنَة', '{2}سَنَتَيْن', ']2,11[:count سَنَوَات', ']10,Inf[:count سَنَة']),\n    'month' => implode('|', ['{0}:count شَهْرَ', '{1}شَهْرَ', '{2}شَهْرَيْن', ']2,11[:count أَشْهُر', ']10,Inf[:count شَهْرَ']),\n    'a_month' => implode('|', ['{0}:count شَهْرَ', '{1}شَهْرَ', '{2}شَهْرَيْن', ']2,11[:count أَشْهُر', ']10,Inf[:count شَهْرَ']),\n    'week' => implode('|', ['{0}:count أُسْبُوع', '{1}أُسْبُوع', '{2}أُسْبُوعَيْن', ']2,11[:count أَسَابِيع', ']10,Inf[:count أُسْبُوع']),\n    'a_week' => implode('|', ['{0}:count أُسْبُوع', '{1}أُسْبُوع', '{2}أُسْبُوعَيْن', ']2,11[:count أَسَابِيع', ']10,Inf[:count أُسْبُوع']),\n    'day' => implode('|', ['{0}:count يَوْم', '{1}يَوْم', '{2}يَوْمَيْن', ']2,11[:count أَيَّام', ']10,Inf[:count يَوْم']),\n    'a_day' => implode('|', ['{0}:count يَوْم', '{1}يَوْم', '{2}يَوْمَيْن', ']2,11[:count أَيَّام', ']10,Inf[:count يَوْم']),\n    'hour' => implode('|', ['{0}:count سَاعَة', '{1}سَاعَة', '{2}سَاعَتَيْن', ']2,11[:count سَاعَات', ']10,Inf[:count سَاعَة']),\n    'a_hour' => implode('|', ['{0}:count سَاعَة', '{1}سَاعَة', '{2}سَاعَتَيْن', ']2,11[:count سَاعَات', ']10,Inf[:count سَاعَة']),\n    'minute' => implode('|', ['{0}:count دَقِيقَة', '{1}دَقِيقَة', '{2}دَقِيقَتَيْن', ']2,11[:count دَقَائِق', ']10,Inf[:count دَقِيقَة']),\n    'a_minute' => implode('|', ['{0}:count دَقِيقَة', '{1}دَقِيقَة', '{2}دَقِيقَتَيْن', ']2,11[:count دَقَائِق', ']10,Inf[:count دَقِيقَة']),\n    'second' => implode('|', ['{0}:count ثَانِيَة', '{1}ثَانِيَة', '{2}ثَانِيَتَيْن', ']2,11[:count ثَوَان', ']10,Inf[:count ثَانِيَة']),\n    'a_second' => implode('|', ['{0}:count ثَانِيَة', '{1}ثَانِيَة', '{2}ثَانِيَتَيْن', ']2,11[:count ثَوَان', ']10,Inf[:count ثَانِيَة']),\n    'ago' => 'مُنْذُ :time',\n    'from_now' => 'مِنَ الْآن :time',\n    'after' => 'بَعْدَ :time',\n    'before' => 'قَبْلَ :time',\n\n    // @TODO add shakl to translations below\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدًا(?:\\\\s+عند)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'اث', 'ثل', 'أر', 'خم', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم عند الساعة] LT',\n        'nextDay' => '[غدًا عند الساعة] LT',\n        'nextWeek' => 'dddd [عند الساعة] LT',\n        'lastDay' => '[أمس عند الساعة] LT',\n        'lastWeek' => 'dddd [عند الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_TD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_TN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * Authors:\n * - JD Isaacks\n * - Atef Ben Ali (atefBB)\n * - Mohamed Sabil (mohamedsabil83)\n */\n$months = [\n    'جانفي',\n    'فيفري',\n    'مارس',\n    'أفريل',\n    'ماي',\n    'جوان',\n    'جويلية',\n    'أوت',\n    'سبتمبر',\n    'أكتوبر',\n    'نوفمبر',\n    'ديسمبر',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'a_year' => implode('|', ['{0}:count سنة', '{1}سنة', '{2}سنتين', ']2,11[:count سنوات', ']10,Inf[:count سنة']),\n    'month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'a_month' => implode('|', ['{0}:count شهر', '{1}شهر', '{2}شهرين', ']2,11[:count أشهر', ']10,Inf[:count شهر']),\n    'week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'a_week' => implode('|', ['{0}:count أسبوع', '{1}أسبوع', '{2}أسبوعين', ']2,11[:count أسابيع', ']10,Inf[:count أسبوع']),\n    'day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'a_day' => implode('|', ['{0}:count يوم', '{1}يوم', '{2}يومين', ']2,11[:count أيام', ']10,Inf[:count يوم']),\n    'hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'a_hour' => implode('|', ['{0}:count ساعة', '{1}ساعة', '{2}ساعتين', ']2,11[:count ساعات', ']10,Inf[:count ساعة']),\n    'minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'a_minute' => implode('|', ['{0}:count دقيقة', '{1}دقيقة', '{2}دقيقتين', ']2,11[:count دقائق', ']10,Inf[:count دقيقة']),\n    'second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'a_second' => implode('|', ['{0}:count ثانية', '{1}ثانية', '{2}ثانيتين', ']2,11[:count ثواني', ']10,Inf[:count ثانية']),\n    'ago' => 'منذ :time',\n    'from_now' => 'في :time',\n    'after' => 'بعد :time',\n    'before' => 'قبل :time',\n    'diff_now' => 'الآن',\n    'diff_today' => 'اليوم',\n    'diff_today_regexp' => 'اليوم(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_yesterday' => 'أمس',\n    'diff_yesterday_regexp' => 'أمس(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_tomorrow' => 'غداً',\n    'diff_tomorrow_regexp' => 'غدا(?:\\\\s+على)?(?:\\\\s+الساعة)?',\n    'diff_before_yesterday' => 'قبل الأمس',\n    'diff_after_tomorrow' => 'بعد غد',\n    'period_recurrences' => implode('|', ['{0}مرة', '{1}مرة', '{2}:count مرتين', ']2,11[:count مرات', ']10,Inf[:count مرة']),\n    'period_interval' => 'كل :interval',\n    'period_start_date' => 'من :date',\n    'period_end_date' => 'إلى :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اليوم على الساعة] LT',\n        'nextDay' => '[غدا على الساعة] LT',\n        'nextWeek' => 'dddd [على الساعة] LT',\n        'lastDay' => '[أمس على الساعة] LT',\n        'lastWeek' => 'dddd [على الساعة] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ص', 'م'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ar_YE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n * - Abdullah-Alhariri\n */\nreturn array_replace_recursive(require __DIR__.'/ar.php', [\n    'formats' => [\n        'L' => 'DD MMM, YYYY',\n    ],\n    'months' => ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'],\n    'months_short' => ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'أغس', 'سبت', 'أكت', 'نوف', 'ديس'],\n    'weekdays' => ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n    'weekdays_short' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'weekdays_min' => ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰٤', '۰٥', '۰٦', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱٤', '۱٥', '۱٦', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲٤', '۲٥', '۲٦', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳٤', '۳٥', '۳٦', '۳۷', '۳۸', '۳۹', '٤۰', '٤۱', '٤۲', '٤۳', '٤٤', '٤٥', '٤٦', '٤۷', '٤۸', '٤۹', '٥۰', '٥۱', '٥۲', '٥۳', '٥٤', '٥٥', '٥٦', '٥۷', '٥۸', '٥۹', '٦۰', '٦۱', '٦۲', '٦۳', '٦٤', '٦٥', '٦٦', '٦۷', '٦۸', '٦۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷٤', '۷٥', '۷٦', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸٤', '۸٥', '۸٦', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹٤', '۹٥', '۹٦', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/as.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/as_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/as_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Amitakhya Phukan, Red Hat    bug-glibc@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D-MM-YYYY',\n    ],\n    'months' => ['জানুৱাৰী', 'ফেব্ৰুৱাৰী', 'মাৰ্চ', 'এপ্ৰিল', 'মে', 'জুন', 'জুলাই', 'আগষ্ট', 'ছেপ্তেম্বৰ', 'অক্টোবৰ', 'নৱেম্বৰ', 'ডিচেম্বৰ'],\n    'months_short' => ['জানু', 'ফেব্ৰু', 'মাৰ্চ', 'এপ্ৰিল', 'মে', 'জুন', 'জুলাই', 'আগ', 'সেপ্ট', 'অক্টো', 'নভে', 'ডিসে'],\n    'weekdays' => ['দেওবাৰ', 'সোমবাৰ', 'মঙ্গলবাৰ', 'বুধবাৰ', 'বৃহষ্পতিবাৰ', 'শুক্ৰবাৰ', 'শনিবাৰ'],\n    'weekdays_short' => ['দেও', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহষ্পতি', 'শুক্ৰ', 'শনি'],\n    'weekdays_min' => ['দেও', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহষ্পতি', 'শুক্ৰ', 'শনি'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['পূৰ্ব্বাহ্ন', 'অপৰাহ্ন'],\n\n    'year' => ':count বছৰ',\n    'y' => ':count বছৰ',\n    'a_year' => ':count বছৰ',\n\n    'month' => ':count মাহ',\n    'm' => ':count মাহ',\n    'a_month' => ':count মাহ',\n\n    'week' => ':count সপ্তাহ',\n    'w' => ':count সপ্তাহ',\n    'a_week' => ':count সপ্তাহ',\n\n    'day' => ':count বাৰ',\n    'd' => ':count বাৰ',\n    'a_day' => ':count বাৰ',\n\n    'hour' => ':count ঘণ্টা',\n    'h' => ':count ঘণ্টা',\n    'a_hour' => ':count ঘণ্টা',\n\n    'minute' => ':count মিনিট',\n    'min' => ':count মিনিট',\n    'a_minute' => ':count মিনিট',\n\n    'second' => ':count দ্বিতীয়',\n    's' => ':count দ্বিতীয়',\n    'a_second' => ':count দ্বিতীয়',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/asa.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['icheheavo', 'ichamthi'],\n    'weekdays' => ['Jumapili', 'Jumatatu', 'Jumanne', 'Jumatano', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Ijm', 'Jmo'],\n    'weekdays_min' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Ijm', 'Jmo'],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprili', 'Mei', 'Juni', 'Julai', 'Agosti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Dec'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ast.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Jordi Mallach jordi@gnu.org\n * - Adolfo Jayme-Barrientos (fitojb)\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['de xineru', 'de febreru', 'de marzu', 'd’abril', 'de mayu', 'de xunu', 'de xunetu', 'd’agostu', 'de setiembre', 'd’ochobre', 'de payares', 'd’avientu'],\n    'months_short' => ['xin', 'feb', 'mar', 'abr', 'may', 'xun', 'xnt', 'ago', 'set', 'och', 'pay', 'avi'],\n    'weekdays' => ['domingu', 'llunes', 'martes', 'miércoles', 'xueves', 'vienres', 'sábadu'],\n    'weekdays_short' => ['dom', 'llu', 'mar', 'mié', 'xue', 'vie', 'sáb'],\n    'weekdays_min' => ['dom', 'llu', 'mar', 'mié', 'xue', 'vie', 'sáb'],\n\n    'year' => ':count añu|:count años',\n    'y' => ':count añu|:count años',\n    'a_year' => 'un añu|:count años',\n\n    'month' => ':count mes',\n    'm' => ':count mes',\n    'a_month' => 'un mes|:count mes',\n\n    'week' => ':count selmana|:count selmanes',\n    'w' => ':count selmana|:count selmanes',\n    'a_week' => 'una selmana|:count selmanes',\n\n    'day' => ':count día|:count díes',\n    'd' => ':count día|:count díes',\n    'a_day' => 'un día|:count díes',\n\n    'hour' => ':count hora|:count hores',\n    'h' => ':count hora|:count hores',\n    'a_hour' => 'una hora|:count hores',\n\n    'minute' => ':count minutu|:count minutos',\n    'min' => ':count minutu|:count minutos',\n    'a_minute' => 'un minutu|:count minutos',\n\n    'second' => ':count segundu|:count segundos',\n    's' => ':count segundu|:count segundos',\n    'a_second' => 'un segundu|:count segundos',\n\n    'ago' => 'hai :time',\n    'from_now' => 'en :time',\n    'after' => ':time dempués',\n    'before' => ':time enantes',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ast_ES.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ast.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ayc.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ayc_PE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ayc_PE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - runasimipi.org    libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['inïru', 'phiwriru', 'marsu', 'awrila', 'mayu', 'junyu', 'julyu', 'awustu', 'sitimri', 'uktuwri', 'nuwimri', 'risimri'],\n    'months_short' => ['ini', 'phi', 'mar', 'awr', 'may', 'jun', 'jul', 'awu', 'sit', 'ukt', 'nuw', 'ris'],\n    'weekdays' => ['tuminku', 'lunisa', 'martisa', 'mirkulisa', 'juywisa', 'wirnisa', 'sawäru'],\n    'weekdays_short' => ['tum', 'lun', 'mar', 'mir', 'juy', 'wir', 'saw'],\n    'weekdays_min' => ['tum', 'lun', 'mar', 'mir', 'juy', 'wir', 'saw'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['VM', 'NM'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/az.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Kunal Marwaha\n * - François B\n * - JD Isaacks\n * - Orxan\n * - Şəhriyar İmanov\n * - Baran Şengül\n */\nreturn [\n    'year' => ':count il',\n    'a_year' => '{1}bir il|]1,Inf[:count il',\n    'y' => ':count il',\n    'month' => ':count ay',\n    'a_month' => '{1}bir ay|]1,Inf[:count ay',\n    'm' => ':count ay',\n    'week' => ':count həftə',\n    'a_week' => '{1}bir həftə|]1,Inf[:count həftə',\n    'w' => ':count h.',\n    'day' => ':count gün',\n    'a_day' => '{1}bir gün|]1,Inf[:count gün',\n    'd' => ':count g.',\n    'hour' => ':count saat',\n    'a_hour' => '{1}bir saat|]1,Inf[:count saat',\n    'h' => ':count saat',\n    'minute' => ':count d.',\n    'a_minute' => '{1}bir dəqiqə|]1,Inf[:count dəqiqə',\n    'min' => ':count dəqiqə',\n    'second' => ':count san.',\n    'a_second' => '{1}birneçə saniyə|]1,Inf[:count saniyə',\n    's' => ':count saniyə',\n    'ago' => ':time əvvəl',\n    'from_now' => ':time sonra',\n    'after' => ':time sonra',\n    'before' => ':time əvvəl',\n    'diff_now' => 'indi',\n    'diff_today' => 'bugün',\n    'diff_today_regexp' => 'bugün(?:\\\\s+saat)?',\n    'diff_yesterday' => 'dünən',\n    'diff_tomorrow' => 'sabah',\n    'diff_tomorrow_regexp' => 'sabah(?:\\\\s+saat)?',\n    'diff_before_yesterday' => 'srağagün',\n    'diff_after_tomorrow' => 'birisi gün',\n    'period_recurrences' => ':count dəfədən bir',\n    'period_interval' => 'hər :interval',\n    'period_start_date' => ':date tarixindən başlayaraq',\n    'period_end_date' => ':date tarixinədək',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[bugün saat] LT',\n        'nextDay' => '[sabah saat] LT',\n        'nextWeek' => '[gələn həftə] dddd [saat] LT',\n        'lastDay' => '[dünən] LT',\n        'lastWeek' => '[keçən həftə] dddd [saat] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        if ($number === 0) { // special case for zero\n            return \"$number-ıncı\";\n        }\n\n        static $suffixes = [\n            1 => '-inci',\n            5 => '-inci',\n            8 => '-inci',\n            70 => '-inci',\n            80 => '-inci',\n            2 => '-nci',\n            7 => '-nci',\n            20 => '-nci',\n            50 => '-nci',\n            3 => '-üncü',\n            4 => '-üncü',\n            100 => '-üncü',\n            6 => '-ncı',\n            9 => '-uncu',\n            10 => '-uncu',\n            30 => '-uncu',\n            60 => '-ıncı',\n            90 => '-ıncı',\n        ];\n\n        $lastDigit = $number % 10;\n\n        return $number.($suffixes[$lastDigit] ?? $suffixes[$number % 100 - $lastDigit] ?? $suffixes[$number >= 100 ? 100 : -1] ?? '');\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'gecə';\n        }\n        if ($hour < 12) {\n            return 'səhər';\n        }\n        if ($hour < 17) {\n            return 'gündüz';\n        }\n\n        return 'axşam';\n    },\n    'months' => ['yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun', 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'],\n    'months_short' => ['yan', 'fev', 'mar', 'apr', 'may', 'iyn', 'iyl', 'avq', 'sen', 'okt', 'noy', 'dek'],\n    'months_standalone' => ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr'],\n    'weekdays' => ['bazar', 'bazar ertəsi', 'çərşənbə axşamı', 'çərşənbə', 'cümə axşamı', 'cümə', 'şənbə'],\n    'weekdays_short' => ['baz', 'bze', 'çax', 'çər', 'cax', 'cüm', 'şən'],\n    'weekdays_min' => ['bz', 'be', 'ça', 'çə', 'ca', 'cü', 'şə'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' və '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/az_AZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/az.php', [\n    'months_short' => ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'İyn', 'İyl', 'Avq', 'Sen', 'Okt', 'Noy', 'Dek'],\n    'weekdays' => ['bazar günü', 'bazar ertəsi', 'çərşənbə axşamı', 'çərşənbə', 'cümə axşamı', 'cümə', 'şənbə'],\n    'weekdays_short' => ['baz', 'ber', 'çax', 'çər', 'cax', 'cüm', 'şnb'],\n    'weekdays_min' => ['baz', 'ber', 'çax', 'çər', 'cax', 'cüm', 'şnb'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/az_Cyrl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/az.php', [\n    'weekdays' => ['базар', 'базар ертәси', 'чәршәнбә ахшамы', 'чәршәнбә', 'ҹүмә ахшамы', 'ҹүмә', 'шәнбә'],\n    'weekdays_short' => ['Б.', 'Б.Е.', 'Ч.А.', 'Ч.', 'Ҹ.А.', 'Ҹ.', 'Ш.'],\n    'weekdays_min' => ['Б.', 'Б.Е.', 'Ч.А.', 'Ч.', 'Ҹ.А.', 'Ҹ.', 'Ш.'],\n    'months' => ['јанвар', 'феврал', 'март', 'апрел', 'май', 'ијун', 'ијул', 'август', 'сентјабр', 'октјабр', 'нојабр', 'декабр'],\n    'months_short' => ['јан', 'фев', 'мар', 'апр', 'май', 'ијн', 'ијл', 'авг', 'сен', 'окт', 'ној', 'дек'],\n    'months_standalone' => ['Јанвар', 'Феврал', 'Март', 'Апрел', 'Май', 'Ијун', 'Ијул', 'Август', 'Сентјабр', 'Октјабр', 'Нојабр', 'Декабр'],\n    'meridiem' => ['а', 'п'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/az_IR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Mousa Moradi mousamk@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'OY/OM/OD',\n    ],\n    'months' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مئی', 'ژوئن', 'جولای', 'آقۇست', 'سپتامبر', 'اوْکتوْبر', 'نوْوامبر', 'دسامبر'],\n    'months_short' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مئی', 'ژوئن', 'جولای', 'آقۇست', 'سپتامبر', 'اوْکتوْبر', 'نوْوامبر', 'دسامبر'],\n    'weekdays' => ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چارشنبه', 'جۆمعه آخشامی', 'جۆمعه', 'شنبه'],\n    'weekdays_short' => ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چارشنبه', 'جۆمعه آخشامی', 'جۆمعه', 'شنبه'],\n    'weekdays_min' => ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چارشنبه', 'جۆمعه آخشامی', 'جۆمعه', 'شنبه'],\n    'first_day_of_week' => 6,\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰۴', '۰۵', '۰۶', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱۴', '۱۵', '۱۶', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲۴', '۲۵', '۲۶', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳۴', '۳۵', '۳۶', '۳۷', '۳۸', '۳۹', '۴۰', '۴۱', '۴۲', '۴۳', '۴۴', '۴۵', '۴۶', '۴۷', '۴۸', '۴۹', '۵۰', '۵۱', '۵۲', '۵۳', '۵۴', '۵۵', '۵۶', '۵۷', '۵۸', '۵۹', '۶۰', '۶۱', '۶۲', '۶۳', '۶۴', '۶۵', '۶۶', '۶۷', '۶۸', '۶۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷۴', '۷۵', '۷۶', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸۴', '۸۵', '۸۶', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹۴', '۹۵', '۹۶', '۹۷', '۹۸', '۹۹'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/az_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/az.php', [\n    'meridiem' => ['a', 'p'],\n    'weekdays' => ['bazar', 'bazar ertəsi', 'çərşənbə axşamı', 'çərşənbə', 'cümə axşamı', 'cümə', 'şənbə'],\n    'weekdays_short' => ['B.', 'B.E.', 'Ç.A.', 'Ç.', 'C.A.', 'C.', 'Ş.'],\n    'weekdays_min' => ['B.', 'B.E.', 'Ç.A.', 'Ç.', 'C.A.', 'C.', 'Ş.'],\n    'months' => ['yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun', 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'],\n    'months_short' => ['yan', 'fev', 'mar', 'apr', 'may', 'iyn', 'iyl', 'avq', 'sen', 'okt', 'noy', 'dek'],\n    'months_standalone' => ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'İyun', 'İyul', 'Avqust', 'Sentyabr', 'Oktyabr', 'Noyabr', 'Dekabr'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'D MMMM YYYY, dddd HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bas.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['I bikɛ̂glà', 'I ɓugajɔp'],\n    'weekdays' => ['ŋgwà nɔ̂y', 'ŋgwà njaŋgumba', 'ŋgwà ûm', 'ŋgwà ŋgê', 'ŋgwà mbɔk', 'ŋgwà kɔɔ', 'ŋgwà jôn'],\n    'weekdays_short' => ['nɔy', 'nja', 'uum', 'ŋge', 'mbɔ', 'kɔɔ', 'jon'],\n    'weekdays_min' => ['nɔy', 'nja', 'uum', 'ŋge', 'mbɔ', 'kɔɔ', 'jon'],\n    'months' => ['Kɔndɔŋ', 'Màcɛ̂l', 'Màtùmb', 'Màtop', 'M̀puyɛ', 'Hìlòndɛ̀', 'Njèbà', 'Hìkaŋ', 'Dìpɔ̀s', 'Bìòôm', 'Màyɛsèp', 'Lìbuy li ńyèe'],\n    'months_short' => ['kɔn', 'mac', 'mat', 'mto', 'mpu', 'hil', 'nje', 'hik', 'dip', 'bio', 'may', 'liɓ'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'second' => ':count móndî', // less reliable\n    's' => ':count móndî', // less reliable\n    'a_second' => ':count móndî', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Carbon\\CarbonInterface;\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);\n    }, 'be');\n}\n// @codeCoverageIgnoreEnd\n\n/*\n * Authors:\n * - Josh Soref\n * - SobakaSlava\n * - François B\n * - Serhan Apaydın\n * - JD Isaacks\n * - AbadonnaAbbys\n * - Siomkin Alexander\n */\nreturn [\n    'year' => ':count год|:count гады|:count гадоў',\n    'a_year' => '{1}год|:count год|:count гады|:count гадоў',\n    'y' => ':count год|:count гады|:count гадоў',\n    'month' => ':count месяц|:count месяцы|:count месяцаў',\n    'a_month' => '{1}месяц|:count месяц|:count месяцы|:count месяцаў',\n    'm' => ':count месяц|:count месяцы|:count месяцаў',\n    'week' => ':count тыдзень|:count тыдні|:count тыдняў',\n    'a_week' => '{1}тыдзень|:count тыдзень|:count тыдні|:count тыдняў',\n    'w' => ':count тыдзень|:count тыдні|:count тыдняў',\n    'day' => ':count дзень|:count дні|:count дзён',\n    'a_day' => '{1}дзень|:count дзень|:count дні|:count дзён',\n    'd' => ':count дн',\n    'hour' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'a_hour' => '{1}гадзіна|:count гадзіна|:count гадзіны|:count гадзін',\n    'h' => ':count гадзіна|:count гадзіны|:count гадзін',\n    'minute' => ':count хвіліна|:count хвіліны|:count хвілін',\n    'a_minute' => '{1}хвіліна|:count хвіліна|:count хвіліны|:count хвілін',\n    'min' => ':count хв',\n    'second' => ':count секунда|:count секунды|:count секунд',\n    'a_second' => '{1}некалькі секунд|:count секунда|:count секунды|:count секунд',\n    's' => ':count сек',\n\n    'hour_ago' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'a_hour_ago' => '{1}гадзіну|:count гадзіну|:count гадзіны|:count гадзін',\n    'h_ago' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'minute_ago' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'a_minute_ago' => '{1}хвіліну|:count хвіліну|:count хвіліны|:count хвілін',\n    'min_ago' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'second_ago' => ':count секунду|:count секунды|:count секунд',\n    'a_second_ago' => '{1}некалькі секунд|:count секунду|:count секунды|:count секунд',\n    's_ago' => ':count секунду|:count секунды|:count секунд',\n\n    'hour_from_now' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'a_hour_from_now' => '{1}гадзіну|:count гадзіну|:count гадзіны|:count гадзін',\n    'h_from_now' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'minute_from_now' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'a_minute_from_now' => '{1}хвіліну|:count хвіліну|:count хвіліны|:count хвілін',\n    'min_from_now' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'second_from_now' => ':count секунду|:count секунды|:count секунд',\n    'a_second_from_now' => '{1}некалькі секунд|:count секунду|:count секунды|:count секунд',\n    's_from_now' => ':count секунду|:count секунды|:count секунд',\n\n    'hour_after' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'a_hour_after' => '{1}гадзіну|:count гадзіну|:count гадзіны|:count гадзін',\n    'h_after' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'minute_after' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'a_minute_after' => '{1}хвіліну|:count хвіліну|:count хвіліны|:count хвілін',\n    'min_after' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'second_after' => ':count секунду|:count секунды|:count секунд',\n    'a_second_after' => '{1}некалькі секунд|:count секунду|:count секунды|:count секунд',\n    's_after' => ':count секунду|:count секунды|:count секунд',\n\n    'hour_before' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'a_hour_before' => '{1}гадзіну|:count гадзіну|:count гадзіны|:count гадзін',\n    'h_before' => ':count гадзіну|:count гадзіны|:count гадзін',\n    'minute_before' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'a_minute_before' => '{1}хвіліну|:count хвіліну|:count хвіліны|:count хвілін',\n    'min_before' => ':count хвіліну|:count хвіліны|:count хвілін',\n    'second_before' => ':count секунду|:count секунды|:count секунд',\n    'a_second_before' => '{1}некалькі секунд|:count секунду|:count секунды|:count секунд',\n    's_before' => ':count секунду|:count секунды|:count секунд',\n\n    'ago' => ':time таму',\n    'from_now' => 'праз :time',\n    'after' => ':time пасля',\n    'before' => ':time да',\n    'diff_now' => 'цяпер',\n    'diff_today' => 'Сёння',\n    'diff_today_regexp' => 'Сёння(?:\\\\s+ў)?',\n    'diff_yesterday' => 'учора',\n    'diff_yesterday_regexp' => 'Учора(?:\\\\s+ў)?',\n    'diff_tomorrow' => 'заўтра',\n    'diff_tomorrow_regexp' => 'Заўтра(?:\\\\s+ў)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY г.',\n        'LLL' => 'D MMMM YYYY г., HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY г., HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Сёння ў] LT',\n        'nextDay' => '[Заўтра ў] LT',\n        'nextWeek' => '[У] dddd [ў] LT',\n        'lastDay' => '[Учора ў] LT',\n        'lastWeek' => function (CarbonInterface $current) {\n            switch ($current->dayOfWeek) {\n                case 1:\n                case 2:\n                case 4:\n                    return '[У мінулы] dddd [ў] LT';\n                default:\n                    return '[У мінулую] dddd [ў] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n            case 'w':\n            case 'W':\n                return ($number % 10 === 2 || $number % 10 === 3) && ($number % 100 !== 12 && $number % 100 !== 13) ? $number.'-і' : $number.'-ы';\n            case 'D':\n                return $number.'-га';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'ночы';\n        }\n        if ($hour < 12) {\n            return 'раніцы';\n        }\n        if ($hour < 17) {\n            return 'дня';\n        }\n\n        return 'вечара';\n    },\n    'months' => ['студзеня', 'лютага', 'сакавіка', 'красавіка', 'траўня', 'чэрвеня', 'ліпеня', 'жніўня', 'верасня', 'кастрычніка', 'лістапада', 'снежня'],\n    'months_standalone' => ['студзень', 'люты', 'сакавік', 'красавік', 'травень', 'чэрвень', 'ліпень', 'жнівень', 'верасень', 'кастрычнік', 'лістапад', 'снежань'],\n    'months_short' => ['студ', 'лют', 'сак', 'крас', 'трав', 'чэрв', 'ліп', 'жнів', 'вер', 'каст', 'ліст', 'снеж'],\n    'months_regexp' => '/(DD?o?\\.?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['нядзелю', 'панядзелак', 'аўторак', 'сераду', 'чацвер', 'пятніцу', 'суботу'],\n    'weekdays_standalone' => ['нядзеля', 'панядзелак', 'аўторак', 'серада', 'чацвер', 'пятніца', 'субота'],\n    'weekdays_short' => ['нд', 'пн', 'ат', 'ср', 'чц', 'пт', 'сб'],\n    'weekdays_min' => ['нд', 'пн', 'ат', 'ср', 'чц', 'пт', 'сб'],\n    'weekdays_regexp' => '/\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' і '],\n    'months_short_standalone' => ['сту', 'лют', 'сак', 'кра', 'май', 'чэр', 'ліп', 'жні', 'вер', 'кас', 'ліс', 'сне'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be_BY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/be.php', [\n    'months' => ['студзеня', 'лютага', 'сакавіка', 'красавіка', 'мая', 'чэрвеня', 'ліпеня', 'жніўня', 'верасня', 'кастрычніка', 'лістапада', 'снежня'],\n    'months_short' => ['сту', 'лют', 'сак', 'кра', 'мая', 'чэр', 'ліп', 'жні', 'вер', 'кас', 'ліс', 'сне'],\n    'weekdays' => ['Нядзеля', 'Панядзелак', 'Аўторак', 'Серада', 'Чацвер', 'Пятніца', 'Субота'],\n    'weekdays_short' => ['Няд', 'Пан', 'Аўт', 'Срд', 'Чцв', 'Пят', 'Суб'],\n    'weekdays_min' => ['Няд', 'Пан', 'Аўт', 'Срд', 'Чцв', 'Пят', 'Суб'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/be_BY@latin.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['studzienia', 'lutaha', 'sakavika', 'krasavika', 'maja', 'červienia', 'lipienia', 'žniŭnia', 'vieraśnia', 'kastryčnika', 'listapada', 'śniežnia'],\n    'months_short' => ['Stu', 'Lut', 'Sak', 'Kra', 'Maj', 'Čer', 'Lip', 'Žni', 'Vie', 'Kas', 'Lis', 'Śni'],\n    'weekdays' => ['Niadziela', 'Paniadziełak', 'Aŭtorak', 'Sierada', 'Čaćvier', 'Piatnica', 'Subota'],\n    'weekdays_short' => ['Nia', 'Pan', 'Aŭt', 'Sie', 'Čać', 'Pia', 'Sub'],\n    'weekdays_min' => ['Nia', 'Pan', 'Aŭt', 'Sie', 'Čać', 'Pia', 'Sub'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bem.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/bem_ZM.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bem_ZM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - ANLoc Martin Benjamin locales@africanlocalization.net\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'MM/DD/YYYY',\n    ],\n    'months' => ['Januari', 'Februari', 'Machi', 'Epreo', 'Mei', 'Juni', 'Julai', 'Ogasti', 'Septemba', 'Oktoba', 'Novemba', 'Disemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Epr', 'Mei', 'Jun', 'Jul', 'Oga', 'Sep', 'Okt', 'Nov', 'Dis'],\n    'weekdays' => ['Pa Mulungu', 'Palichimo', 'Palichibuli', 'Palichitatu', 'Palichine', 'Palichisano', 'Pachibelushi'],\n    'weekdays_short' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    'weekdays_min' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['uluchelo', 'akasuba'],\n\n    'year' => 'myaka :count',\n    'y' => 'myaka :count',\n    'a_year' => 'myaka :count',\n\n    'month' => 'myeshi :count',\n    'm' => 'myeshi :count',\n    'a_month' => 'myeshi :count',\n\n    'week' => 'umulungu :count',\n    'w' => 'umulungu :count',\n    'a_week' => 'umulungu :count',\n\n    'day' => 'inshiku :count',\n    'd' => 'inshiku :count',\n    'a_day' => 'inshiku :count',\n\n    'hour' => 'awala :count',\n    'h' => 'awala :count',\n    'a_hour' => 'awala :count',\n\n    'minute' => 'miniti :count',\n    'min' => 'miniti :count',\n    'a_minute' => 'miniti :count',\n\n    'second' => 'sekondi :count',\n    's' => 'sekondi :count',\n    'a_second' => 'sekondi :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ber.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ber_DZ.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ber_DZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun', 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'],\n    'months_short' => ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'İyn', 'İyl', 'Avq', 'Sen', 'Okt', 'Noy', 'Dek'],\n    'weekdays' => ['bazar günü', 'birinci gün', 'ikinci gün', 'üçüncü gün', 'dördüncü gün', 'beşinci gün', 'altıncı gün'],\n    'weekdays_short' => ['baz', 'bir', 'iki', 'üçü', 'dör', 'beş', 'alt'],\n    'weekdays_min' => ['baz', 'bir', 'iki', 'üçü', 'dör', 'beş', 'alt'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ber_MA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['yanvar', 'fevral', 'mart', 'aprel', 'may', 'iyun', 'iyul', 'avqust', 'sentyabr', 'oktyabr', 'noyabr', 'dekabr'],\n    'months_short' => ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'İyn', 'İyl', 'Avq', 'Sen', 'Okt', 'Noy', 'Dek'],\n    'weekdays' => ['bazar günü', 'birinci gün', 'ikinci gün', 'üçüncü gün', 'dördüncü gün', 'beşinci gün', 'altıncı gün'],\n    'weekdays_short' => ['baz', 'bir', 'iki', 'üçü', 'dör', 'beş', 'alt'],\n    'weekdays_min' => ['baz', 'bir', 'iki', 'üçü', 'dör', 'beş', 'alt'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bez.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['pamilau', 'pamunyi'],\n    'weekdays' => ['pa mulungu', 'pa shahuviluha', 'pa hivili', 'pa hidatu', 'pa hitayi', 'pa hihanu', 'pa shahulembela'],\n    'weekdays_short' => ['Mul', 'Vil', 'Hiv', 'Hid', 'Hit', 'Hih', 'Lem'],\n    'weekdays_min' => ['Mul', 'Vil', 'Hiv', 'Hid', 'Hit', 'Hih', 'Lem'],\n    'months' => ['pa mwedzi gwa hutala', 'pa mwedzi gwa wuvili', 'pa mwedzi gwa wudatu', 'pa mwedzi gwa wutai', 'pa mwedzi gwa wuhanu', 'pa mwedzi gwa sita', 'pa mwedzi gwa saba', 'pa mwedzi gwa nane', 'pa mwedzi gwa tisa', 'pa mwedzi gwa kumi', 'pa mwedzi gwa kumi na moja', 'pa mwedzi gwa kumi na mbili'],\n    'months_short' => ['Hut', 'Vil', 'Dat', 'Tai', 'Han', 'Sit', 'Sab', 'Nan', 'Tis', 'Kum', 'Kmj', 'Kmb'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - Serhan Apaydın\n * - JD Isaacks\n * - Glavić\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count година|:count години',\n    'a_year' => 'година|:count години',\n    'y' => ':count година|:count години',\n    'month' => ':count месец|:count месеца',\n    'a_month' => 'месец|:count месеца',\n    'm' => ':count месец|:count месеца',\n    'week' => ':count седмица|:count седмици',\n    'a_week' => 'седмица|:count седмици',\n    'w' => ':count седмица|:count седмици',\n    'day' => ':count ден|:count дни',\n    'a_day' => 'ден|:count дни',\n    'd' => ':count ден|:count дни',\n    'hour' => ':count час|:count часа',\n    'a_hour' => 'час|:count часа',\n    'h' => ':count час|:count часа',\n    'minute' => ':count минута|:count минути',\n    'a_minute' => 'минута|:count минути',\n    'min' => ':count минута|:count минути',\n    'second' => ':count секунда|:count секунди',\n    'a_second' => 'няколко секунди|:count секунди',\n    's' => ':count секунда|:count секунди',\n    'ago' => 'преди :time',\n    'from_now' => 'след :time',\n    'after' => 'след :time',\n    'before' => 'преди :time',\n    'diff_now' => 'сега',\n    'diff_today' => 'Днес',\n    'diff_today_regexp' => 'Днес(?:\\\\s+в)?',\n    'diff_yesterday' => 'вчера',\n    'diff_yesterday_regexp' => 'Вчера(?:\\\\s+в)?',\n    'diff_tomorrow' => 'утре',\n    'diff_tomorrow_regexp' => 'Утре(?:\\\\s+в)?',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'D.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Днес в] LT',\n        'nextDay' => '[Утре в] LT',\n        'nextWeek' => 'dddd [в] LT',\n        'lastDay' => '[Вчера в] LT',\n        'lastWeek' => function (CarbonInterface $current) {\n            switch ($current->dayOfWeek) {\n                case 0:\n                case 3:\n                case 6:\n                    return '[В изминалата] dddd [в] LT';\n                default:\n                    return '[В изминалия] dddd [в] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        $lastDigit = $number % 10;\n        $last2Digits = $number % 100;\n        if ($number === 0) {\n            return \"$number-ев\";\n        }\n        if ($last2Digits === 0) {\n            return \"$number-ен\";\n        }\n        if ($last2Digits > 10 && $last2Digits < 20) {\n            return \"$number-ти\";\n        }\n        if ($lastDigit === 1) {\n            return \"$number-ви\";\n        }\n        if ($lastDigit === 2) {\n            return \"$number-ри\";\n        }\n        if ($lastDigit === 7 || $lastDigit === 8) {\n            return \"$number-ми\";\n        }\n\n        return \"$number-ти\";\n    },\n    'months' => ['януари', 'февруари', 'март', 'април', 'май', 'юни', 'юли', 'август', 'септември', 'октомври', 'ноември', 'декември'],\n    'months_short' => ['яну', 'фев', 'мар', 'апр', 'май', 'юни', 'юли', 'авг', 'сеп', 'окт', 'ное', 'дек'],\n    'weekdays' => ['неделя', 'понеделник', 'вторник', 'сряда', 'четвъртък', 'петък', 'събота'],\n    'weekdays_short' => ['нед', 'пон', 'вто', 'сря', 'чет', 'пет', 'съб'],\n    'weekdays_min' => ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' и '],\n    'meridiem' => ['преди обяд', 'следобед'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bg_BG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/bg.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bhb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/bhb_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bhb_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Samsung Electronics Co., Ltd.    alexey.merzlyakov@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    'weekdays' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    'weekdays_short' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    'weekdays_min' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bho.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/bho_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bho_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bhashaghar@googlegroups.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर\"'],\n    'months_short' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर\"'],\n    'weekdays' => ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरुवार', 'शुक्रवार', 'शनिवार'],\n    'weekdays_short' => ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],\n    'weekdays_min' => ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरु', 'शुक्र', 'शनि'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n\n    'hour' => ':count मौसम',\n    'h' => ':count मौसम',\n    'a_hour' => ':count मौसम',\n\n    'minute' => ':count कला',\n    'min' => ':count कला',\n    'a_minute' => ':count कला',\n\n    'second' => ':count सोमार',\n    's' => ':count सोमार',\n    'a_second' => ':count सोमार',\n\n    'year' => ':count साल',\n    'y' => ':count साल',\n    'a_year' => ':count साल',\n\n    'month' => ':count महिना',\n    'm' => ':count महिना',\n    'a_month' => ':count महिना',\n\n    'week' => ':count सप्ताह',\n    'w' => ':count सप्ताह',\n    'a_week' => ':count सप्ताह',\n\n    'day' => ':count दिन',\n    'd' => ':count दिन',\n    'a_day' => ':count दिन',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/bi_VU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bi_VU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Samsung Electronics Co., Ltd.    akhilesh.k@samsung.com & maninder1.s@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'dddd DD MMM YYYY',\n    ],\n    'months' => ['jenuware', 'febwari', 'maj', 'epril', 'mei', 'jun', 'julae', 'ogis', 'septemba', 'oktoba', 'novemba', 'disemba'],\n    'months_short' => ['jen', 'feb', 'maj', 'epr', 'mei', 'jun', 'jul', 'ogi', 'sep', 'okt', 'nov', 'dis'],\n    'weekdays' => ['sande', 'mande', 'maj', 'wota', 'fraede', 'sarede'],\n    'weekdays_short' => ['san', 'man', 'maj', 'wot', 'fra', 'sar'],\n    'weekdays_min' => ['san', 'man', 'maj', 'wot', 'fra', 'sar'],\n\n    'year' => ':count seven', // less reliable\n    'y' => ':count seven', // less reliable\n    'a_year' => ':count seven', // less reliable\n\n    'month' => ':count mi', // less reliable\n    'm' => ':count mi', // less reliable\n    'a_month' => ':count mi', // less reliable\n\n    'week' => ':count sarede', // less reliable\n    'w' => ':count sarede', // less reliable\n    'a_week' => ':count sarede', // less reliable\n\n    'day' => ':count betde', // less reliable\n    'd' => ':count betde', // less reliable\n    'a_day' => ':count betde', // less reliable\n\n    'hour' => ':count klok', // less reliable\n    'h' => ':count klok', // less reliable\n    'a_hour' => ':count klok', // less reliable\n\n    'minute' => ':count smol', // less reliable\n    'min' => ':count smol', // less reliable\n    'a_minute' => ':count smol', // less reliable\n\n    'second' => ':count tu', // less reliable\n    's' => ':count tu', // less reliable\n    'a_second' => ':count tu', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bm.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Estelle Comment\n */\nreturn [\n    'year' => 'san :count',\n    'a_year' => '{1}san kelen|san :count',\n    'y' => 'san :count',\n    'month' => 'kalo :count',\n    'a_month' => '{1}kalo kelen|kalo :count',\n    'm' => 'k. :count',\n    'week' => 'dɔgɔkun :count',\n    'a_week' => 'dɔgɔkun kelen',\n    'w' => 'd. :count',\n    'day' => 'tile :count',\n    'd' => 't. :count',\n    'a_day' => '{1}tile kelen|tile :count',\n    'hour' => 'lɛrɛ :count',\n    'a_hour' => '{1}lɛrɛ kelen|lɛrɛ :count',\n    'h' => 'l. :count',\n    'minute' => 'miniti :count',\n    'a_minute' => '{1}miniti kelen|miniti :count',\n    'min' => 'm. :count',\n    'second' => 'sekondi :count',\n    'a_second' => '{1}sanga dama dama|sekondi :count',\n    's' => 'sek. :count',\n    'ago' => 'a bɛ :time bɔ',\n    'from_now' => ':time kɔnɔ',\n    'diff_today' => 'Bi',\n    'diff_yesterday' => 'Kunu',\n    'diff_yesterday_regexp' => 'Kunu(?:\\\\s+lɛrɛ)?',\n    'diff_tomorrow' => 'Sini',\n    'diff_tomorrow_regexp' => 'Sini(?:\\\\s+lɛrɛ)?',\n    'diff_today_regexp' => 'Bi(?:\\\\s+lɛrɛ)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'MMMM [tile] D [san] YYYY',\n        'LLL' => 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        'LLLL' => 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Bi lɛrɛ] LT',\n        'nextDay' => '[Sini lɛrɛ] LT',\n        'nextWeek' => 'dddd [don lɛrɛ] LT',\n        'lastDay' => '[Kunu lɛrɛ] LT',\n        'lastWeek' => 'dddd [tɛmɛnen lɛrɛ] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['Zanwuyekalo', 'Fewuruyekalo', 'Marisikalo', 'Awirilikalo', 'Mɛkalo', 'Zuwɛnkalo', 'Zuluyekalo', 'Utikalo', 'Sɛtanburukalo', 'ɔkutɔburukalo', 'Nowanburukalo', 'Desanburukalo'],\n    'months_short' => ['Zan', 'Few', 'Mar', 'Awi', 'Mɛ', 'Zuw', 'Zul', 'Uti', 'Sɛt', 'ɔku', 'Now', 'Des'],\n    'weekdays' => ['Kari', 'Ntɛnɛn', 'Tarata', 'Araba', 'Alamisa', 'Juma', 'Sibiri'],\n    'weekdays_short' => ['Kar', 'Ntɛ', 'Tar', 'Ara', 'Ala', 'Jum', 'Sib'],\n    'weekdays_min' => ['Ka', 'Nt', 'Ta', 'Ar', 'Al', 'Ju', 'Si'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' ni '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Shakib Hossain\n * - Raju\n * - Aniruddha Adhikary\n * - JD Isaacks\n * - Saiful Islam\n * - Faisal Islam\n */\nreturn [\n    'year' => ':count বছর',\n    'a_year' => 'এক বছর|:count বছর',\n    'y' => '১ বছর|:count বছর',\n    'month' => ':count মাস',\n    'a_month' => 'এক মাস|:count মাস',\n    'm' => '১ মাস|:count মাস',\n    'week' => ':count সপ্তাহ',\n    'a_week' => '১ সপ্তাহ|:count সপ্তাহ',\n    'w' => '১ সপ্তাহ|:count সপ্তাহ',\n    'day' => ':count দিন',\n    'a_day' => 'এক দিন|:count দিন',\n    'd' => '১ দিন|:count দিন',\n    'hour' => ':count ঘন্টা',\n    'a_hour' => 'এক ঘন্টা|:count ঘন্টা',\n    'h' => '১ ঘন্টা|:count ঘন্টা',\n    'minute' => ':count মিনিট',\n    'a_minute' => 'এক মিনিট|:count মিনিট',\n    'min' => '১ মিনিট|:count মিনিট',\n    'second' => ':count সেকেন্ড',\n    'a_second' => 'কয়েক সেকেন্ড|:count সেকেন্ড',\n    's' => '১ সেকেন্ড|:count সেকেন্ড',\n    'ago' => ':time আগে',\n    'from_now' => ':time পরে',\n    'after' => ':time পরে',\n    'before' => ':time আগে',\n    'diff_now' => 'এখন',\n    'diff_today' => 'আজ',\n    'diff_yesterday' => 'গতকাল',\n    'diff_tomorrow' => 'আগামীকাল',\n    'period_recurrences' => ':count বার|:count বার',\n    'period_interval' => 'প্রতি :interval',\n    'period_start_date' => ':date থেকে',\n    'period_end_date' => ':date পর্যন্ত',\n    'formats' => [\n        'LT' => 'A Oh:Om সময়',\n        'LTS' => 'A Oh:Om:Os সময়',\n        'L' => 'OD/OM/OY',\n        'LL' => 'OD MMMM OY',\n        'LLL' => 'OD MMMM OY, A Oh:Om সময়',\n        'LLLL' => 'dddd, OD MMMM OY, A Oh:Om সময়',\n    ],\n    'calendar' => [\n        'sameDay' => '[আজ] LT',\n        'nextDay' => '[আগামীকাল] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[গতকাল] LT',\n        'lastWeek' => '[গত] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'রাত';\n        }\n        if ($hour < 10) {\n            return 'সকাল';\n        }\n        if ($hour < 17) {\n            return 'দুপুর';\n        }\n        if ($hour < 20) {\n            return 'বিকাল';\n        }\n\n        return 'রাত';\n    },\n    'months' => ['জানুয়ারী', 'ফেব্রুয়ারি', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    'months_short' => ['জানু', 'ফেব', 'মার্চ', 'এপ্র', 'মে', 'জুন', 'জুল', 'আগ', 'সেপ্ট', 'অক্টো', 'নভে', 'ডিসে'],\n    'weekdays' => ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পতিবার', 'শুক্রবার', 'শনিবার'],\n    'weekdays_short' => ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহস্পতি', 'শুক্র', 'শনি'],\n    'weekdays_min' => ['রবি', 'সোম', 'মঙ্গ', 'বুধ', 'বৃহঃ', 'শুক্র', 'শনি'],\n    'list' => [', ', ' এবং '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'weekdays_standalone' => ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহষ্পতিবার', 'শুক্রবার', 'শনিবার'],\n    'weekdays_min_standalone' => ['রঃ', 'সোঃ', 'মঃ', 'বুঃ', 'বৃঃ', 'শুঃ', 'শনি'],\n    'months_short_standalone' => ['জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    'alt_numbers' => ['০', '১', '২', '৩', '৪', '৫', '৬', '৭', '৮', '৯'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn_BD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ankur Group, Taneem Ahmed, Jamil Ahmed\n */\nreturn array_replace_recursive(require __DIR__.'/bn.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    'months_short' => ['জানু', 'ফেব', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    'weekdays' => ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পতিবার', 'শুক্রবার', 'শনিবার'],\n    'weekdays_short' => ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহঃ', 'শুক্র', 'শনি'],\n    'weekdays_min' => ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহঃ', 'শুক্র', 'শনি'],\n    'first_day_of_week' => 5,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bn_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/bn.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['জানুয়ারী', 'ফেব্রুয়ারী', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    'months_short' => ['জানু', 'ফেব', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগস্ট', 'সেপ্টেম্বর', 'অক্টোবর', 'নভেম্বর', 'ডিসেম্বর'],\n    'weekdays' => ['রবিবার', 'সোমবার', 'মঙ্গলবার', 'বুধবার', 'বৃহস্পতিবার', 'শুক্রবার', 'শনিবার'],\n    'weekdays_short' => ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহস্পতি', 'শুক্র', 'শনি'],\n    'weekdays_min' => ['রবি', 'সোম', 'মঙ্গল', 'বুধ', 'বৃহস্পতি', 'শুক্র', 'শনি'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n */\nreturn [\n    'year' => '{1}ལོ་གཅིག|]1,Inf[:count ལོ',\n    'month' => '{1}ཟླ་བ་གཅིག|]1,Inf[:count ཟླ་བ',\n    'week' => ':count བདུན་ཕྲག',\n    'day' => '{1}ཉིན་གཅིག|]1,Inf[:count ཉིན་',\n    'hour' => '{1}ཆུ་ཚོད་གཅིག|]1,Inf[:count ཆུ་ཚོད',\n    'minute' => '{1}སྐར་མ་གཅིག|]1,Inf[:count སྐར་མ',\n    'second' => '{1}ལམ་སང|]1,Inf[:count སྐར་ཆ།',\n    'ago' => ':time སྔན་ལ',\n    'from_now' => ':time ལ་',\n    'diff_yesterday' => 'ཁ་སང',\n    'diff_today' => 'དི་རིང',\n    'diff_tomorrow' => 'སང་ཉིན',\n    'formats' => [\n        'LT' => 'A h:mm',\n        'LTS' => 'A h:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[དི་རིང] LT',\n        'nextDay' => '[སང་ཉིན] LT',\n        'nextWeek' => '[བདུན་ཕྲག་རྗེས་མ], LT',\n        'lastDay' => '[ཁ་སང] LT',\n        'lastWeek' => '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'མཚན་མོ';\n        }\n        if ($hour < 10) {\n            return 'ཞོགས་ཀས';\n        }\n        if ($hour < 17) {\n            return 'ཉིན་གུང';\n        }\n        if ($hour < 20) {\n            return 'དགོང་དག';\n        }\n\n        return 'མཚན་མོ';\n    },\n    'months' => ['ཟླ་བ་དང་པོ', 'ཟླ་བ་གཉིས་པ', 'ཟླ་བ་གསུམ་པ', 'ཟླ་བ་བཞི་པ', 'ཟླ་བ་ལྔ་པ', 'ཟླ་བ་དྲུག་པ', 'ཟླ་བ་བདུན་པ', 'ཟླ་བ་བརྒྱད་པ', 'ཟླ་བ་དགུ་པ', 'ཟླ་བ་བཅུ་པ', 'ཟླ་བ་བཅུ་གཅིག་པ', 'ཟླ་བ་བཅུ་གཉིས་པ'],\n    'months_short' => ['ཟླ་བ་དང་པོ', 'ཟླ་བ་གཉིས་པ', 'ཟླ་བ་གསུམ་པ', 'ཟླ་བ་བཞི་པ', 'ཟླ་བ་ལྔ་པ', 'ཟླ་བ་དྲུག་པ', 'ཟླ་བ་བདུན་པ', 'ཟླ་བ་བརྒྱད་པ', 'ཟླ་བ་དགུ་པ', 'ཟླ་བ་བཅུ་པ', 'ཟླ་བ་བཅུ་གཅིག་པ', 'ཟླ་བ་བཅུ་གཉིས་པ'],\n    'weekdays' => ['གཟའ་ཉི་མ་', 'གཟའ་ཟླ་བ་', 'གཟའ་མིག་དམར་', 'གཟའ་ལྷག་པ་', 'གཟའ་ཕུར་བུ', 'གཟའ་པ་སངས་', 'གཟའ་སྤེན་པ་'],\n    'weekdays_short' => ['ཉི་མ་', 'ཟླ་བ་', 'མིག་དམར་', 'ལྷག་པ་', 'ཕུར་བུ', 'པ་སངས་', 'སྤེན་པ་'],\n    'weekdays_min' => ['ཉི་མ་', 'ཟླ་བ་', 'མིག་དམར་', 'ལྷག་པ་', 'ཕུར་བུ', 'པ་སངས་', 'སྤེན་པ་'],\n    'list' => [', ', ' ཨནད་ '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'months_standalone' => ['ཟླ་བ་དང་པོ་', 'ཟླ་བ་གཉིས་པ་', 'ཟླ་བ་གསུམ་པ་', 'ཟླ་བ་བཞི་པ་', 'ཟླ་བ་ལྔ་པ་', 'ཟླ་བ་དྲུག་པ་', 'ཟླ་བ་བདུན་པ་', 'ཟླ་བ་བརྒྱད་པ་', 'ཟླ་བ་དགུ་པ་', 'ཟླ་བ་བཅུ་པ་', 'ཟླ་བ་བཅུ་གཅིག་པ་', 'ཟླ་བ་བཅུ་གཉིས་པ་'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bo_CN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/bo.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bo_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/bo.php', [\n    'meridiem' => ['སྔ་དྲོ་', 'ཕྱི་དྲོ་'],\n    'weekdays' => ['གཟའ་ཉི་མ་', 'གཟའ་ཟླ་བ་', 'གཟའ་མིག་དམར་', 'གཟའ་ལྷག་པ་', 'གཟའ་ཕུར་བུ་', 'གཟའ་པ་སངས་', 'གཟའ་སྤེན་པ་'],\n    'weekdays_short' => ['ཉི་མ་', 'ཟླ་བ་', 'མིག་དམར་', 'ལྷག་པ་', 'ཕུར་བུ་', 'པ་སངས་', 'སྤེན་པ་'],\n    'weekdays_min' => ['ཉི་མ་', 'ཟླ་བ་', 'མིག་དམར་', 'ལྷག་པ་', 'ཕུར་བུ་', 'པ་སངས་', 'སྤེན་པ་'],\n    'months' => ['ཟླ་བ་དང་པོ', 'ཟླ་བ་གཉིས་པ', 'ཟླ་བ་གསུམ་པ', 'ཟླ་བ་བཞི་པ', 'ཟླ་བ་ལྔ་པ', 'ཟླ་བ་དྲུག་པ', 'ཟླ་བ་བདུན་པ', 'ཟླ་བ་བརྒྱད་པ', 'ཟླ་བ་དགུ་པ', 'ཟླ་བ་བཅུ་པ', 'ཟླ་བ་བཅུ་གཅིག་པ', 'ཟླ་བ་བཅུ་གཉིས་པ'],\n    'months_short' => ['ཟླ་༡', 'ཟླ་༢', 'ཟླ་༣', 'ཟླ་༤', 'ཟླ་༥', 'ཟླ་༦', 'ཟླ་༧', 'ཟླ་༨', 'ཟླ་༩', 'ཟླ་༡༠', 'ཟླ་༡༡', 'ཟླ་༡༢'],\n    'months_standalone' => ['ཟླ་བ་དང་པོ་', 'ཟླ་བ་གཉིས་པ་', 'ཟླ་བ་གསུམ་པ་', 'ཟླ་བ་བཞི་པ་', 'ཟླ་བ་ལྔ་པ་', 'ཟླ་བ་དྲུག་པ་', 'ཟླ་བ་བདུན་པ་', 'ཟླ་བ་བརྒྱད་པ་', 'ཟླ་བ་དགུ་པ་', 'ཟླ་བ་བཅུ་པ་', 'ཟླ་བ་བཅུ་གཅིག་པ་', 'ཟླ་བ་བཅུ་གཉིས་པ་'],\n    'weekend' => [0, 0],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'YYYY ལོའི་MMMཚེས་D',\n        'LLL' => 'སྤྱི་ལོ་YYYY MMMMའི་ཚེས་D h:mm a',\n        'LLLL' => 'YYYY MMMMའི་ཚེས་D, dddd h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/br.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Serhan Apaydın\n * - JD Isaacks\n */\nreturn [\n    'year' => '{1}:count bloaz|{3,4,5,9}:count bloaz|[0,Inf[:count vloaz',\n    'a_year' => '{1}ur bloaz|{3,4,5,9}:count bloaz|[0,Inf[:count vloaz',\n    'month' => '{1}:count miz|{2}:count viz|[0,Inf[:count miz',\n    'a_month' => '{1}ur miz|{2}:count viz|[0,Inf[:count miz',\n    'week' => ':count sizhun',\n    'a_week' => '{1}ur sizhun|:count sizhun',\n    'day' => '{1}:count devezh|{2}:count zevezh|[0,Inf[:count devezh',\n    'a_day' => '{1}un devezh|{2}:count zevezh|[0,Inf[:count devezh',\n    'hour' => ':count eur',\n    'a_hour' => '{1}un eur|:count eur',\n    'minute' => '{1}:count vunutenn|{2}:count vunutenn|[0,Inf[:count munutenn',\n    'a_minute' => '{1}ur vunutenn|{2}:count vunutenn|[0,Inf[:count munutenn',\n    'second' => ':count eilenn',\n    'a_second' => '{1}un nebeud segondennoù|[0,Inf[:count eilenn',\n    'ago' => ':time \\'zo',\n    'from_now' => 'a-benn :time',\n    'diff_now' => 'bremañ',\n    'diff_today' => 'Hiziv',\n    'diff_today_regexp' => 'Hiziv(?:\\\\s+da)?',\n    'diff_yesterday' => 'decʼh',\n    'diff_yesterday_regexp' => 'Dec\\'h(?:\\\\s+da)?',\n    'diff_tomorrow' => 'warcʼhoazh',\n    'diff_tomorrow_regexp' => 'Warc\\'hoazh(?:\\\\s+da)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D [a viz] MMMM YYYY',\n        'LLL' => 'D [a viz] MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D [a viz] MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Hiziv da] LT',\n        'nextDay' => '[Warc\\'hoazh da] LT',\n        'nextWeek' => 'dddd [da] LT',\n        'lastDay' => '[Dec\\'h da] LT',\n        'lastWeek' => 'dddd [paset da] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        return $number.($number === 1 ? 'añ' : 'vet');\n    },\n    'months' => ['Genver', 'C\\'hwevrer', 'Meurzh', 'Ebrel', 'Mae', 'Mezheven', 'Gouere', 'Eost', 'Gwengolo', 'Here', 'Du', 'Kerzu'],\n    'months_short' => ['Gen', 'C\\'hwe', 'Meu', 'Ebr', 'Mae', 'Eve', 'Gou', 'Eos', 'Gwe', 'Her', 'Du', 'Ker'],\n    'weekdays' => ['Sul', 'Lun', 'Meurzh', 'Merc\\'her', 'Yaou', 'Gwener', 'Sadorn'],\n    'weekdays_short' => ['Sul', 'Lun', 'Meu', 'Mer', 'Yao', 'Gwe', 'Sad'],\n    'weekdays_min' => ['Su', 'Lu', 'Me', 'Mer', 'Ya', 'Gw', 'Sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' hag '],\n    'meridiem' => ['A.M.', 'G.M.'],\n\n    'y' => ':count bl.',\n    'd' => ':count d',\n    'h' => ':count e',\n    'min' => ':count min',\n    's' => ':count s',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/br_FR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/br.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/brx.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/brx_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/brx_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'M/D/YY',\n    ],\n    'months' => ['जानुवारी', 'फेब्रुवारी', 'मार्स', 'एफ्रिल', 'मे', 'जुन', 'जुलाइ', 'आगस्थ', 'सेबथेज्ब़र', 'अखथबर', 'नबेज्ब़र', 'दिसेज्ब़र'],\n    'months_short' => ['जानुवारी', 'फेब्रुवारी', 'मार्स', 'एप्रिल', 'मे', 'जुन', 'जुलाइ', 'आगस्थ', 'सेबथेज्ब़र', 'अखथबर', 'नबेज्ब़र', 'दिसेज्ब़र'],\n    'weekdays' => ['रबिबार', 'सोबार', 'मंगलबार', 'बुदबार', 'बिसथिबार', 'सुखुरबार', 'सुनिबार'],\n    'weekdays_short' => ['रबि', 'सम', 'मंगल', 'बुद', 'बिसथि', 'सुखुर', 'सुनि'],\n    'weekdays_min' => ['रबि', 'सम', 'मंगल', 'बुद', 'बिसथि', 'सुखुर', 'सुनि'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['फुं.', 'बेलासे.'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bs.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bokideckonja\n * - Josh Soref\n * - François B\n * - shaishavgandhi05\n * - Serhan Apaydın\n * - JD Isaacks\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count godina|:count godine|:count godina',\n    'y' => ':count godina|:count godine|:count godina',\n    'month' => ':count mjesec|:count mjeseca|:count mjeseci',\n    'm' => ':count mjesec|:count mjeseca|:count mjeseci',\n    'week' => ':count sedmice|:count sedmicu|:count sedmica',\n    'w' => ':count sedmice|:count sedmicu|:count sedmica',\n    'day' => ':count dan|:count dana|:count dana',\n    'd' => ':count dan|:count dana|:count dana',\n    'hour' => ':count sat|:count sata|:count sati',\n    'h' => ':count sat|:count sata|:count sati',\n    'minute' => ':count minut|:count minuta|:count minuta',\n    'min' => ':count minut|:count minuta|:count minuta',\n    'second' => ':count sekund|:count sekunda|:count sekundi',\n    's' => ':count sekund|:count sekunda|:count sekundi',\n    'ago' => 'prije :time',\n    'from_now' => 'za :time',\n    'after' => 'nakon :time',\n    'before' => ':time ranije',\n    'diff_now' => 'sada',\n    'diff_today' => 'danas',\n    'diff_today_regexp' => 'danas(?:\\\\s+u)?',\n    'diff_yesterday' => 'jučer',\n    'diff_yesterday_regexp' => 'jučer(?:\\\\s+u)?',\n    'diff_tomorrow' => 'sutra',\n    'diff_tomorrow_regexp' => 'sutra(?:\\\\s+u)?',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[danas u] LT',\n        'nextDay' => '[sutra u] LT',\n        'nextWeek' => function (CarbonInterface $current) {\n            switch ($current->dayOfWeek) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                default:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        'lastDay' => '[jučer u] LT',\n        'lastWeek' => function (CarbonInterface $current) {\n            switch ($current->dayOfWeek) {\n                case 0:\n                case 3:\n                    return '[prošlu] dddd [u] LT';\n                case 6:\n                    return '[prošle] [subote] [u] LT';\n                default:\n                    return '[prošli] dddd [u] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['januar', 'februar', 'mart', 'april', 'maj', 'juni', 'juli', 'august', 'septembar', 'oktobar', 'novembar', 'decembar'],\n    'months_short' => ['jan.', 'feb.', 'mar.', 'apr.', 'maj.', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'],\n    'weekdays' => ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],\n    'weekdays_short' => ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],\n    'weekdays_min' => ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' i '],\n    'meridiem' => ['prijepodne', 'popodne'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bs_BA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/bs.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bs_Cyrl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/bs.php', [\n    'meridiem' => ['пре подне', 'поподне'],\n    'weekdays' => ['недјеља', 'понедјељак', 'уторак', 'сриједа', 'четвртак', 'петак', 'субота'],\n    'weekdays_short' => ['нед', 'пон', 'уто', 'сри', 'чет', 'пет', 'суб'],\n    'weekdays_min' => ['нед', 'пон', 'уто', 'сри', 'чет', 'пет', 'суб'],\n    'months' => ['јануар', 'фебруар', 'март', 'април', 'мај', 'јуни', 'јули', 'аугуст', 'септембар', 'октобар', 'новембар', 'децембар'],\n    'months_short' => ['јан', 'феб', 'мар', 'апр', 'мај', 'јун', 'јул', 'ауг', 'сеп', 'окт', 'нов', 'дец'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D.M.YYYY.',\n        'LL' => 'DD.MM.YYYY.',\n        'LLL' => 'DD. MMMM YYYY. HH:mm',\n        'LLLL' => 'dddd, DD. MMMM YYYY. HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/bs_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/bs.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/byn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/byn_ER.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/byn_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ልደትሪ', 'ካብኽብቲ', 'ክብላ', 'ፋጅኺሪ', 'ክቢቅሪ', 'ምኪኤል ትጓ̅ኒሪ', 'ኰርኩ', 'ማርያም ትሪ', 'ያኸኒ መሳቅለሪ', 'መተሉ', 'ምኪኤል መሽወሪ', 'ተሕሳስሪ'],\n    'months_short' => ['ልደት', 'ካብኽ', 'ክብላ', 'ፋጅኺ', 'ክቢቅ', 'ም/ት', 'ኰር', 'ማርያ', 'ያኸኒ', 'መተሉ', 'ም/ም', 'ተሕሳ'],\n    'weekdays' => ['ሰንበር ቅዳዅ', 'ሰኑ', 'ሰሊጝ', 'ለጓ ወሪ ለብዋ', 'ኣምድ', 'ኣርብ', 'ሰንበር ሽጓዅ'],\n    'weekdays_short' => ['ሰ/ቅ', 'ሰኑ', 'ሰሊጝ', 'ለጓ', 'ኣምድ', 'ኣርብ', 'ሰ/ሽ'],\n    'weekdays_min' => ['ሰ/ቅ', 'ሰኑ', 'ሰሊጝ', 'ለጓ', 'ኣምድ', 'ኣርብ', 'ሰ/ሽ'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ፋዱስ ጃብ', 'ፋዱስ ደምቢ'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ca.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - mestremuten\n * - François B\n * - Marc Ordinas i Llopis\n * - Pere Orga\n * - JD Isaacks\n * - Quentí\n * - Víctor Díaz\n * - Xavi\n * - qcardona\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count any|:count anys',\n    'a_year' => 'un any|:count anys',\n    'y' => ':count any|:count anys',\n    'month' => ':count mes|:count mesos',\n    'a_month' => 'un mes|:count mesos',\n    'm' => ':count mes|:count mesos',\n    'week' => ':count setmana|:count setmanes',\n    'a_week' => 'una setmana|:count setmanes',\n    'w' => ':count setmana|:count setmanes',\n    'day' => ':count dia|:count dies',\n    'a_day' => 'un dia|:count dies',\n    'd' => ':count d',\n    'hour' => ':count hora|:count hores',\n    'a_hour' => 'una hora|:count hores',\n    'h' => ':count h',\n    'minute' => ':count minut|:count minuts',\n    'a_minute' => 'un minut|:count minuts',\n    'min' => ':count min',\n    'second' => ':count segon|:count segons',\n    'a_second' => 'uns segons|:count segons',\n    's' => ':count s',\n    'ago' => 'fa :time',\n    'from_now' => 'd\\'aquí a :time',\n    'after' => ':time després',\n    'before' => ':time abans',\n    'diff_now' => 'ara mateix',\n    'diff_today' => 'avui',\n    'diff_today_regexp' => 'avui(?:\\\\s+a)?(?:\\\\s+les)?',\n    'diff_yesterday' => 'ahir',\n    'diff_yesterday_regexp' => 'ahir(?:\\\\s+a)?(?:\\\\s+les)?',\n    'diff_tomorrow' => 'demà',\n    'diff_tomorrow_regexp' => 'demà(?:\\\\s+a)?(?:\\\\s+les)?',\n    'diff_before_yesterday' => 'abans d\\'ahir',\n    'diff_after_tomorrow' => 'demà passat',\n    'period_recurrences' => ':count cop|:count cops',\n    'period_interval' => 'cada :interval',\n    'period_start_date' => 'de :date',\n    'period_end_date' => 'fins a :date',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM [de] YYYY',\n        'LLL' => 'D MMMM [de] YYYY [a les] H:mm',\n        'LLLL' => 'dddd D MMMM [de] YYYY [a les] H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => function (CarbonInterface $current) {\n            return '[avui a '.($current->hour !== 1 ? 'les' : 'la').'] LT';\n        },\n        'nextDay' => function (CarbonInterface $current) {\n            return '[demà a '.($current->hour !== 1 ? 'les' : 'la').'] LT';\n        },\n        'nextWeek' => function (CarbonInterface $current) {\n            return 'dddd [a '.($current->hour !== 1 ? 'les' : 'la').'] LT';\n        },\n        'lastDay' => function (CarbonInterface $current) {\n            return '[ahir a '.($current->hour !== 1 ? 'les' : 'la').'] LT';\n        },\n        'lastWeek' => function (CarbonInterface $current) {\n            return '[el] dddd [passat a '.($current->hour !== 1 ? 'les' : 'la').'] LT';\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        return $number.(\n            ($period === 'w' || $period === 'W') ? 'a' : (\n                ($number === 1) ? 'r' : (\n                    ($number === 2) ? 'n' : (\n                        ($number === 3) ? 'r' : (\n                            ($number === 4) ? 't' : 'è'\n                        )\n                    )\n                )\n            )\n        );\n    },\n    'months' => ['de gener', 'de febrer', 'de març', 'd\\'abril', 'de maig', 'de juny', 'de juliol', 'd\\'agost', 'de setembre', 'd\\'octubre', 'de novembre', 'de desembre'],\n    'months_standalone' => ['gener', 'febrer', 'març', 'abril', 'maig', 'juny', 'juliol', 'agost', 'setembre', 'octubre', 'novembre', 'desembre'],\n    'months_short' => ['de gen.', 'de febr.', 'de març', 'd\\'abr.', 'de maig', 'de juny', 'de jul.', 'd\\'ag.', 'de set.', 'd\\'oct.', 'de nov.', 'de des.'],\n    'months_short_standalone' => ['gen.', 'febr.', 'març', 'abr.', 'maig', 'juny', 'jul.', 'ag.', 'set.', 'oct.', 'nov.', 'des.'],\n    'months_regexp' => '/(D[oD]?[\\s,]+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['diumenge', 'dilluns', 'dimarts', 'dimecres', 'dijous', 'divendres', 'dissabte'],\n    'weekdays_short' => ['dg.', 'dl.', 'dt.', 'dc.', 'dj.', 'dv.', 'ds.'],\n    'weekdays_min' => ['dg', 'dl', 'dt', 'dc', 'dj', 'dv', 'ds'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' i '],\n    'meridiem' => ['a. m.', 'p. m.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ca_AD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ca.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ca_ES.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ca.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ca_ES_Valencia.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'ca');\n    }, 'ca_ES_Valencia');\n}\n// @codeCoverageIgnoreEnd\n\nreturn array_replace_recursive(require __DIR__.'/ca.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ca_FR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ca.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ca_IT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ca.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ccp.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['𑄢𑄧𑄝𑄨𑄝𑄢𑄴', '𑄥𑄧𑄟𑄴𑄝𑄢𑄴', '𑄟𑄧𑄁𑄉𑄧𑄣𑄴𑄝𑄢𑄴', '𑄝𑄪𑄖𑄴𑄝𑄢𑄴', '𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴𑄝𑄢𑄴', '𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴𑄝𑄢𑄴', '𑄥𑄧𑄚𑄨𑄝𑄢𑄴'],\n    'weekdays_short' => ['𑄢𑄧𑄝𑄨', '𑄥𑄧𑄟𑄴', '𑄟𑄧𑄁𑄉𑄧𑄣𑄴', '𑄝𑄪𑄖𑄴', '𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴', '𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴', '𑄥𑄧𑄚𑄨'],\n    'weekdays_min' => ['𑄢𑄧𑄝𑄨', '𑄥𑄧𑄟𑄴', '𑄟𑄧𑄁𑄉𑄧𑄣𑄴', '𑄝𑄪𑄖𑄴', '𑄝𑄳𑄢𑄨𑄥𑄪𑄛𑄴', '𑄥𑄪𑄇𑄴𑄇𑄮𑄢𑄴', '𑄥𑄧𑄚𑄨'],\n    'months' => ['𑄎𑄚𑄪𑄠𑄢𑄨', '𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨', '𑄟𑄢𑄴𑄌𑄧', '𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴', '𑄟𑄬', '𑄎𑄪𑄚𑄴', '𑄎𑄪𑄣𑄭', '𑄃𑄉𑄧𑄌𑄴𑄑𑄴', '𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴', '𑄃𑄧𑄇𑄴𑄑𑄬𑄝𑄧𑄢𑄴', '𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴', '𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴'],\n    'months_short' => ['𑄎𑄚𑄪', '𑄜𑄬𑄛𑄴', '𑄟𑄢𑄴𑄌𑄧', '𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴', '𑄟𑄬', '𑄎𑄪𑄚𑄴', '𑄎𑄪𑄣𑄭', '𑄃𑄉𑄧𑄌𑄴𑄑𑄴', '𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴', '𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴', '𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴', '𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄢𑄴'],\n    'months_short_standalone' => ['𑄎𑄚𑄪𑄠𑄢𑄨', '𑄜𑄬𑄛𑄴𑄝𑄳𑄢𑄪𑄠𑄢𑄨', '𑄟𑄢𑄴𑄌𑄧', '𑄃𑄬𑄛𑄳𑄢𑄨𑄣𑄴', '𑄟𑄬', '𑄎𑄪𑄚𑄴', '𑄎𑄪𑄣𑄭', '𑄃𑄉𑄧𑄌𑄴𑄑𑄴', '𑄥𑄬𑄛𑄴𑄑𑄬𑄟𑄴𑄝𑄧𑄢𑄴', '𑄃𑄧𑄇𑄴𑄑𑄮𑄝𑄧𑄢𑄴', '𑄚𑄧𑄞𑄬𑄟𑄴𑄝𑄧𑄢𑄴', '𑄓𑄨𑄥𑄬𑄟𑄴𑄝𑄧𑄢𑄴'],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM, YYYY h:mm a',\n        'LLLL' => 'dddd, D MMMM, YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ccp_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ccp.php', [\n    'weekend' => [0, 0],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ce.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ce_RU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ce_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - ANCHR\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY.DD.MM',\n    ],\n    'months' => ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\n    'months_short' => ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'weekdays' => ['КӀиранан де', 'Оршотан де', 'Шинарин де', 'Кхаарин де', 'Еарин де', 'ПӀераскан де', 'Шот де'],\n    'weekdays_short' => ['КӀ', 'Ор', 'Ши', 'Кх', 'Еа', 'ПӀ', 'Шо'],\n    'weekdays_min' => ['КӀ', 'Ор', 'Ши', 'Кх', 'Еа', 'ПӀ', 'Шо'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count шо',\n    'y' => ':count шо',\n    'a_year' => ':count шо',\n\n    'month' => ':count бутт',\n    'm' => ':count бутт',\n    'a_month' => ':count бутт',\n\n    'week' => ':count кӏира',\n    'w' => ':count кӏира',\n    'a_week' => ':count кӏира',\n\n    'day' => ':count де',\n    'd' => ':count де',\n    'a_day' => ':count де',\n\n    'hour' => ':count сахьт',\n    'h' => ':count сахьт',\n    'a_hour' => ':count сахьт',\n\n    'minute' => ':count минот',\n    'min' => ':count минот',\n    'a_minute' => ':count минот',\n\n    'second' => ':count секунд',\n    's' => ':count секунд',\n    'a_second' => ':count секунд',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cgg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Sande', 'Orwokubanza', 'Orwakabiri', 'Orwakashatu', 'Orwakana', 'Orwakataano', 'Orwamukaaga'],\n    'weekdays_short' => ['SAN', 'ORK', 'OKB', 'OKS', 'OKN', 'OKT', 'OMK'],\n    'weekdays_min' => ['SAN', 'ORK', 'OKB', 'OKS', 'OKN', 'OKT', 'OMK'],\n    'months' => ['Okwokubanza', 'Okwakabiri', 'Okwakashatu', 'Okwakana', 'Okwakataana', 'Okwamukaaga', 'Okwamushanju', 'Okwamunaana', 'Okwamwenda', 'Okwaikumi', 'Okwaikumi na kumwe', 'Okwaikumi na ibiri'],\n    'months_short' => ['KBZ', 'KBR', 'KST', 'KKN', 'KTN', 'KMK', 'KMS', 'KMN', 'KMW', 'KKM', 'KNK', 'KNB'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'day' => ':count ruhanga', // less reliable\n    'd' => ':count ruhanga', // less reliable\n    'a_day' => ':count ruhanga', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/chr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/chr_US.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/chr_US.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Cherokee Nation Joseph Erb josepherb7@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'MM/DD/YYYY',\n    ],\n    'months' => ['ᎤᏃᎸᏔᏅ', 'ᎧᎦᎵ', 'ᎠᏅᏱ', 'ᎧᏬᏂ', 'ᎠᏂᏍᎬᏘ', 'ᏕᎭᎷᏱ', 'ᎫᏰᏉᏂ', 'ᎦᎶᏂ', 'ᏚᎵᏍᏗ', 'ᏚᏂᏅᏗ', 'ᏅᏓᏕᏆ', 'ᎥᏍᎩᏱ'],\n    'months_short' => ['ᎤᏃ', 'ᎧᎦ', 'ᎠᏅ', 'ᎧᏬ', 'ᎠᏂ', 'ᏕᎭ', 'ᎫᏰ', 'ᎦᎶ', 'ᏚᎵ', 'ᏚᏂ', 'ᏅᏓ', 'ᎥᏍ'],\n    'weekdays' => ['ᎤᎾᏙᏓᏆᏍᎬ', 'ᎤᎾᏙᏓᏉᏅᎯ', 'ᏔᎵᏁᎢᎦ', 'ᏦᎢᏁᎢᎦ', 'ᏅᎩᏁᎢᎦ', 'ᏧᎾᎩᎶᏍᏗ', 'ᎤᎾᏙᏓᏈᏕᎾ'],\n    'weekdays_short' => ['ᏆᏍᎬ', 'ᏉᏅᎯ', 'ᏔᎵᏁ', 'ᏦᎢᏁ', 'ᏅᎩᏁ', 'ᏧᎾᎩ', 'ᏈᏕᎾ'],\n    'weekdays_min' => ['ᏆᏍᎬ', 'ᏉᏅᎯ', 'ᏔᎵᏁ', 'ᏦᎢᏁ', 'ᏅᎩᏁ', 'ᏧᎾᎩ', 'ᏈᏕᎾ'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ᏌᎾᎴ', 'ᏒᎯᏱᎢᏗᏢ', 'ꮜꮎꮄ', 'ꮢꭿᏹꭲꮧꮲ'],\n\n    'second' => ':count ᏐᎢ', // less reliable\n    's' => ':count ᏐᎢ', // less reliable\n    'a_second' => ':count ᏐᎢ', // less reliable\n\n    'year' => ':count ᏑᏕᏘᏴᏓ',\n    'y' => ':count ᏑᏕᏘᏴᏓ',\n    'a_year' => ':count ᏑᏕᏘᏴᏓ',\n\n    'month' => ':count ᏏᏅᏙ',\n    'm' => ':count ᏏᏅᏙ',\n    'a_month' => ':count ᏏᏅᏙ',\n\n    'week' => ':count ᏑᎾᏙᏓᏆᏍᏗ',\n    'w' => ':count ᏑᎾᏙᏓᏆᏍᏗ',\n    'a_week' => ':count ᏑᎾᏙᏓᏆᏍᏗ',\n\n    'day' => ':count ᎢᎦ',\n    'd' => ':count ᎢᎦ',\n    'a_day' => ':count ᎢᎦ',\n\n    'hour' => ':count ᏑᏟᎶᏛ',\n    'h' => ':count ᏑᏟᎶᏛ',\n    'a_hour' => ':count ᏑᏟᎶᏛ',\n\n    'minute' => ':count ᎢᏯᏔᏬᏍᏔᏅ',\n    'min' => ':count ᎢᏯᏔᏬᏍᏔᏅ',\n    'a_minute' => ':count ᎢᏯᏔᏬᏍᏔᏅ',\n\n    'ago' => ':time ᏥᎨᏒ',\n    'from_now' => 'ᎾᎿ :time',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ckb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Swara Mohammed\n */\n$months = [\n    'ڕێبەندان',\n    'ڕەشەمە',\n    'نەورۆز',\n    'گوڵان',\n    'جۆزەردان',\n    'پوشپەڕ',\n    'گەلاوێژ',\n    'خەرمانان',\n    'ڕەزبەر',\n    'گەڵاڕێزان',\n    'سەرماوەرز',\n    'بەفرانبار',\n];\n\nreturn [\n    'year' => implode('|', ['{0}:count ساڵێک', '{1}ساڵێک', '{2}دوو ساڵ', ']2,11[:count ساڵ', ']10,Inf[:count ساڵ']),\n    'a_year' => implode('|', ['{0}:count ساڵێک', '{1}ساڵێک', '{2}دوو ساڵ', ']2,11[:count ساڵ', ']10,Inf[:count ساڵ']),\n    'month' => implode('|', ['{0}:count مانگێک', '{1}مانگێک', '{2}دوو مانگ', ']2,11[:count مانگ', ']10,Inf[:count مانگ']),\n    'a_month' => implode('|', ['{0}:count مانگێک', '{1}مانگێک', '{2}دوو مانگ', ']2,11[:count مانگ', ']10,Inf[:count مانگ']),\n    'week' => implode('|', ['{0}:count هەفتەیەک', '{1}هەفتەیەک', '{2}دوو هەفتە', ']2,11[:count هەفتە', ']10,Inf[:count هەفتە']),\n    'a_week' => implode('|', ['{0}:count هەفتەیەک', '{1}هەفتەیەک', '{2}دوو هەفتە', ']2,11[:count هەفتە', ']10,Inf[:count هەفتە']),\n    'day' => implode('|', ['{0}:count ڕۆژێک', '{1}ڕۆژێک', '{2}دوو ڕۆژ', ']2,11[:count ڕۆژ', ']10,Inf[:count ڕۆژ']),\n    'a_day' => implode('|', ['{0}:count ڕۆژێک', '{1}ڕۆژێک', '{2}دوو ڕۆژ', ']2,11[:count ڕۆژ', ']10,Inf[:count ڕۆژ']),\n    'hour' => implode('|', ['{0}:count کاتژمێرێک', '{1}کاتژمێرێک', '{2}دوو کاتژمێر', ']2,11[:count کاتژمێر', ']10,Inf[:count کاتژمێر']),\n    'a_hour' => implode('|', ['{0}:count کاتژمێرێک', '{1}کاتژمێرێک', '{2}دوو کاتژمێر', ']2,11[:count کاتژمێر', ']10,Inf[:count کاتژمێر']),\n    'minute' => implode('|', ['{0}:count خولەکێک', '{1}خولەکێک', '{2}دوو خولەک', ']2,11[:count خولەک', ']10,Inf[:count خولەک']),\n    'a_minute' => implode('|', ['{0}:count خولەکێک', '{1}خولەکێک', '{2}دوو خولەک', ']2,11[:count خولەک', ']10,Inf[:count خولەک']),\n    'second' => implode('|', ['{0}:count چرکەیەک', '{1}چرکەیەک', '{2}دوو چرکە', ']2,11[:count چرکە', ']10,Inf[:count چرکە']),\n    'a_second' => implode('|', ['{0}:count چرکەیەک', '{1}چرکەیەک', '{2}دوو چرکە', ']2,11[:count چرکە', ']10,Inf[:count چرکە']),\n    'ago' => 'پێش :time',\n    'from_now' => ':time لە ئێستاوە',\n    'after' => 'دوای :time',\n    'before' => 'پێش :time',\n    'diff_now' => 'ئێستا',\n    'diff_today' => 'ئەمڕۆ',\n    'diff_today_regexp' => 'ڕۆژ(?:\\\\s+لە)?(?:\\\\s+کاتژمێر)?',\n    'diff_yesterday' => 'دوێنێ',\n    'diff_yesterday_regexp' => 'دوێنێ(?:\\\\s+لە)?(?:\\\\s+کاتژمێر)?',\n    'diff_tomorrow' => 'سبەینێ',\n    'diff_tomorrow_regexp' => 'سبەینێ(?:\\\\s+لە)?(?:\\\\s+کاتژمێر)?',\n    'diff_before_yesterday' => 'پێش دوێنێ',\n    'diff_after_tomorrow' => 'دوای سبەینێ',\n    'period_recurrences' => implode('|', ['{0}جار', '{1}جار', '{2}:count دووجار', ']2,11[:count جار', ']10,Inf[:count جار']),\n    'period_interval' => 'هەموو :interval',\n    'period_start_date' => 'لە :date',\n    'period_end_date' => 'بۆ :date',\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => ['یەکشەممە', 'دووشەممە', 'سێشەممە', 'چوارشەممە', 'پێنجشەممە', 'هەینی', 'شەممە'],\n    'weekdays_short' => ['یەکشەممە', 'دووشەممە', 'سێشەممە', 'چوارشەممە', 'پێنجشەممە', 'هەینی', 'شەممە'],\n    'weekdays_min' => ['یەکشەممە', 'دووشەممە', 'سێشەممە', 'چوارشەممە', 'پێنجشەممە', 'هەینی', 'شەممە'],\n    'list' => ['، ', ' و '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ئەمڕۆ لە کاتژمێر] LT',\n        'nextDay' => '[سبەینێ لە کاتژمێر] LT',\n        'nextWeek' => 'dddd [لە کاتژمێر] LT',\n        'lastDay' => '[دوێنێ لە کاتژمێر] LT',\n        'lastWeek' => 'dddd [لە کاتژمێر] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['پ.ن', 'د.ن'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cmn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/cmn_TW.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cmn_TW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY年MM月DD號',\n    ],\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => [' 1月', ' 2月', ' 3月', ' 4月', ' 5月', ' 6月', ' 7月', ' 8月', ' 9月', '10月', '11月', '12月'],\n    'weekdays' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    'weekdays_short' => ['日', '一', '二', '三', '四', '五', '六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'meridiem' => ['上午', '下午'],\n\n    'year' => ':count 年',\n    'y' => ':count 年',\n    'a_year' => ':count 年',\n\n    'month' => ':count 月',\n    'm' => ':count 月',\n    'a_month' => ':count 月',\n\n    'week' => ':count 周',\n    'w' => ':count 周',\n    'a_week' => ':count 周',\n\n    'day' => ':count 白天',\n    'd' => ':count 白天',\n    'a_day' => ':count 白天',\n\n    'hour' => ':count 小时',\n    'h' => ':count 小时',\n    'a_hour' => ':count 小时',\n\n    'minute' => ':count 分钟',\n    'min' => ':count 分钟',\n    'a_minute' => ':count 分钟',\n\n    'second' => ':count 秒',\n    's' => ':count 秒',\n    'a_second' => ':count 秒',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/crh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/crh_UA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/crh_UA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Reşat SABIQ tilde.birlik@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'Mayıs', 'İyun', 'İyul', 'Avgust', 'Sentâbr', 'Oktâbr', 'Noyabr', 'Dekabr'],\n    'months_short' => ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'İyn', 'İyl', 'Avg', 'Sen', 'Okt', 'Noy', 'Dek'],\n    'weekdays' => ['Bazar', 'Bazarertesi', 'Salı', 'Çarşembe', 'Cumaaqşamı', 'Cuma', 'Cumaertesi'],\n    'weekdays_short' => ['Baz', 'Ber', 'Sal', 'Çar', 'Caq', 'Cum', 'Cer'],\n    'weekdays_min' => ['Baz', 'Ber', 'Sal', 'Çar', 'Caq', 'Cum', 'Cer'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ÜE', 'ÜS'],\n\n    'year' => ':count yıl',\n    'y' => ':count yıl',\n    'a_year' => ':count yıl',\n\n    'month' => ':count ay',\n    'm' => ':count ay',\n    'a_month' => ':count ay',\n\n    'week' => ':count afta',\n    'w' => ':count afta',\n    'a_week' => ':count afta',\n\n    'day' => ':count kün',\n    'd' => ':count kün',\n    'a_day' => ':count kün',\n\n    'hour' => ':count saat',\n    'h' => ':count saat',\n    'a_hour' => ':count saat',\n\n    'minute' => ':count daqqa',\n    'min' => ':count daqqa',\n    'a_minute' => ':count daqqa',\n\n    'second' => ':count ekinci',\n    's' => ':count ekinci',\n    'a_second' => ':count ekinci',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cs.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Jakub Tesinsky\n * - Martin Suja\n * - Nikos Timiopulos\n * - Bohuslav Blín\n * - Tsutomu Kuroda\n * - tjku\n * - Lukas Svoboda\n * - Max Melentiev\n * - Juanito Fatas\n * - Akira Matsuda\n * - Christopher Dell\n * - Václav Pávek\n * - CodeSkills\n * - Tlapi\n * - newman101\n * - Petr Kadlec\n * - tommaskraus\n * - Karel Sommer (calvera)\n */\n$za = function ($time) {\n    return 'za '.strtr($time, [\n        'hodina' => 'hodinu',\n        'minuta' => 'minutu',\n        'sekunda' => 'sekundu',\n    ]);\n};\n\n$pred = function ($time) {\n    $time = strtr($time, [\n        'hodina' => 'hodinou',\n        'minuta' => 'minutou',\n        'sekunda' => 'sekundou',\n    ]);\n    $time = preg_replace('/hodiny?(?!\\w)/', 'hodinami', $time);\n    $time = preg_replace('/minuty?(?!\\w)/', 'minutami', $time);\n    $time = preg_replace('/sekundy?(?!\\w)/', 'sekundami', $time);\n\n    return \"před $time\";\n};\n\nreturn [\n    'year' => ':count rok|:count roky|:count let',\n    'y' => ':count rok|:count roky|:count let',\n    'a_year' => 'rok|:count roky|:count let',\n    'month' => ':count měsíc|:count měsíce|:count měsíců',\n    'm' => ':count měs.',\n    'a_month' => 'měsíc|:count měsíce|:count měsíců',\n    'week' => ':count týden|:count týdny|:count týdnů',\n    'w' => ':count týd.',\n    'a_week' => 'týden|:count týdny|:count týdnů',\n    'day' => ':count den|:count dny|:count dní',\n    'd' => ':count den|:count dny|:count dní',\n    'a_day' => 'den|:count dny|:count dní',\n    'hour' => ':count hodina|:count hodiny|:count hodin',\n    'h' => ':count hod.',\n    'a_hour' => 'hodina|:count hodiny|:count hodin',\n    'minute' => ':count minuta|:count minuty|:count minut',\n    'min' => ':count min.',\n    'a_minute' => 'minuta|:count minuty|:count minut',\n    'second' => ':count sekunda|:count sekundy|:count sekund',\n    's' => ':count sek.',\n    'a_second' => 'pár sekund|:count sekundy|:count sekund',\n\n    'month_ago' => ':count měsícem|:count měsíci|:count měsíci',\n    'a_month_ago' => 'měsícem|:count měsíci|:count měsíci',\n    'day_ago' => ':count dnem|:count dny|:count dny',\n    'a_day_ago' => 'dnem|:count dny|:count dny',\n    'week_ago' => ':count týdnem|:count týdny|:count týdny',\n    'a_week_ago' => 'týdnem|:count týdny|:count týdny',\n    'year_ago' => ':count rokem|:count roky|:count lety',\n    'y_ago' => ':count rok.|:count rok.|:count let.',\n    'a_year_ago' => 'rokem|:count roky|:count lety',\n\n    'month_before' => ':count měsícem|:count měsíci|:count měsíci',\n    'a_month_before' => 'měsícem|:count měsíci|:count měsíci',\n    'day_before' => ':count dnem|:count dny|:count dny',\n    'a_day_before' => 'dnem|:count dny|:count dny',\n    'week_before' => ':count týdnem|:count týdny|:count týdny',\n    'a_week_before' => 'týdnem|:count týdny|:count týdny',\n    'year_before' => ':count rokem|:count roky|:count lety',\n    'y_before' => ':count rok.|:count rok.|:count let.',\n    'a_year_before' => 'rokem|:count roky|:count lety',\n\n    'ago' => $pred,\n    'from_now' => $za,\n    'before' => $pred,\n    'after' => $za,\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'months' => ['ledna', 'února', 'března', 'dubna', 'května', 'června', 'července', 'srpna', 'září', 'října', 'listopadu', 'prosince'],\n    'months_standalone' => ['leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec'],\n    'months_short' => ['led', 'úno', 'bře', 'dub', 'kvě', 'čvn', 'čvc', 'srp', 'zář', 'říj', 'lis', 'pro'],\n    'weekdays' => ['neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'],\n    'weekdays_short' => ['ned', 'pon', 'úte', 'stř', 'čtv', 'pát', 'sob'],\n    'weekdays_min' => ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],\n    'list' => [', ', ' a '],\n    'diff_now' => 'nyní',\n    'diff_yesterday' => 'včera',\n    'diff_tomorrow' => 'zítra',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD. MM. YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D. MMMM YYYY HH:mm',\n    ],\n    'meridiem' => ['dopoledne', 'odpoledne'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cs_CZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/cs.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/csb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/csb_PL.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/csb_PL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - csb_PL locale Michal Ostrowski bug-glibc-locales@gnu.org\n */\nreturn [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'MMMM DD, YYYY',\n        'LLL' => 'DD MMM HH:mm',\n        'LLLL' => 'MMMM DD, YYYY HH:mm',\n    ],\n    'months' => ['stëcznika', 'gromicznika', 'strëmiannika', 'łżëkwiata', 'maja', 'czerwińca', 'lëpińca', 'zélnika', 'séwnika', 'rujana', 'lëstopadnika', 'gòdnika'],\n    'months_short' => ['stë', 'gro', 'str', 'łżë', 'maj', 'cze', 'lëp', 'zél', 'séw', 'ruj', 'lës', 'gòd'],\n    'weekdays' => ['niedzela', 'pòniedzôłk', 'wtórk', 'strzoda', 'czwiôrtk', 'piątk', 'sobòta'],\n    'weekdays_short' => ['nie', 'pòn', 'wtó', 'str', 'czw', 'pią', 'sob'],\n    'weekdays_min' => ['nie', 'pòn', 'wtó', 'str', 'czw', 'pią', 'sob'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' a téż '],\n    'two_words_connector' => ' a téż ',\n    'year' => ':count rok',\n    'month' => ':count miesiąc',\n    'week' => ':count tidzéń',\n    'day' => ':count dzéń',\n    'hour' => ':count gòdzëna',\n    'minute' => ':count minuta',\n    'second' => ':count sekunda',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'months' => ['M01', 'M02', 'M03', 'M04', 'M05', 'M06', 'M07', 'M08', 'M09', 'M10', 'M11', 'M12'],\n    'months_short' => ['M01', 'M02', 'M03', 'M04', 'M05', 'M06', 'M07', 'M08', 'M09', 'M10', 'M11', 'M12'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'YYYY MMMM D, dddd HH:mm',\n    ],\n\n    'year' => ':count лѣто',\n    'y' => ':count лѣто',\n    'a_year' => ':count лѣто',\n\n    'month' => ':count мѣсѧць',\n    'm' => ':count мѣсѧць',\n    'a_month' => ':count мѣсѧць',\n\n    'week' => ':count сєдмица',\n    'w' => ':count сєдмица',\n    'a_week' => ':count сєдмица',\n\n    'day' => ':count дьнь',\n    'd' => ':count дьнь',\n    'a_day' => ':count дьнь',\n\n    'hour' => ':count година',\n    'h' => ':count година',\n    'a_hour' => ':count година',\n\n    'minute' => ':count малъ', // less reliable\n    'min' => ':count малъ', // less reliable\n    'a_minute' => ':count малъ', // less reliable\n\n    'second' => ':count въторъ',\n    's' => ':count въторъ',\n    'a_second' => ':count въторъ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cv.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - JD Isaacks\n */\nreturn [\n    'year' => ':count ҫул',\n    'a_year' => '{1}пӗр ҫул|:count ҫул',\n    'month' => ':count уйӑх',\n    'a_month' => '{1}пӗр уйӑх|:count уйӑх',\n    'week' => ':count эрне',\n    'a_week' => '{1}пӗр эрне|:count эрне',\n    'day' => ':count кун',\n    'a_day' => '{1}пӗр кун|:count кун',\n    'hour' => ':count сехет',\n    'a_hour' => '{1}пӗр сехет|:count сехет',\n    'minute' => ':count минут',\n    'a_minute' => '{1}пӗр минут|:count минут',\n    'second' => ':count ҫеккунт',\n    'a_second' => '{1}пӗр-ик ҫеккунт|:count ҫеккунт',\n    'ago' => ':time каялла',\n    'from_now' => function ($time) {\n        return $time.(preg_match('/сехет$/u', $time) ? 'рен' : (preg_match('/ҫул/u', $time) ? 'тан' : 'ран'));\n    },\n    'diff_yesterday' => 'Ӗнер',\n    'diff_today' => 'Паян',\n    'diff_tomorrow' => 'Ыран',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD-MM-YYYY',\n        'LL' => 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n        'LLL' => 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        'LLLL' => 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Паян] LT [сехетре]',\n        'nextDay' => '[Ыран] LT [сехетре]',\n        'nextWeek' => '[Ҫитес] dddd LT [сехетре]',\n        'lastDay' => '[Ӗнер] LT [сехетре]',\n        'lastWeek' => '[Иртнӗ] dddd LT [сехетре]',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number-мӗш',\n    'months' => ['кӑрлач', 'нарӑс', 'пуш', 'ака', 'май', 'ҫӗртме', 'утӑ', 'ҫурла', 'авӑн', 'юпа', 'чӳк', 'раштав'],\n    'months_short' => ['кӑр', 'нар', 'пуш', 'ака', 'май', 'ҫӗр', 'утӑ', 'ҫур', 'авн', 'юпа', 'чӳк', 'раш'],\n    'weekdays' => ['вырсарникун', 'тунтикун', 'ытларикун', 'юнкун', 'кӗҫнерникун', 'эрнекун', 'шӑматкун'],\n    'weekdays_short' => ['выр', 'тун', 'ытл', 'юн', 'кӗҫ', 'эрн', 'шӑм'],\n    'weekdays_min' => ['вр', 'тн', 'ыт', 'юн', 'кҫ', 'эр', 'шм'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' тата '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cv_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/cv.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cy.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - JD Isaacks\n * - Daniel Monaghan\n */\nreturn [\n    'year' => '{1}blwyddyn|]1,Inf[:count flynedd',\n    'y' => ':countbl',\n    'month' => '{1}mis|]1,Inf[:count mis',\n    'm' => ':countmi',\n    'week' => ':count wythnos',\n    'w' => ':countw',\n    'day' => '{1}diwrnod|]1,Inf[:count diwrnod',\n    'd' => ':countd',\n    'hour' => '{1}awr|]1,Inf[:count awr',\n    'h' => ':counth',\n    'minute' => '{1}munud|]1,Inf[:count munud',\n    'min' => ':countm',\n    'second' => '{1}ychydig eiliadau|]1,Inf[:count eiliad',\n    's' => ':counts',\n    'ago' => ':time yn ôl',\n    'from_now' => 'mewn :time',\n    'after' => ':time ar ôl',\n    'before' => ':time o\\'r blaen',\n    'diff_now' => 'nawr',\n    'diff_today' => 'Heddiw',\n    'diff_today_regexp' => 'Heddiw(?:\\\\s+am)?',\n    'diff_yesterday' => 'ddoe',\n    'diff_yesterday_regexp' => 'Ddoe(?:\\\\s+am)?',\n    'diff_tomorrow' => 'yfory',\n    'diff_tomorrow_regexp' => 'Yfory(?:\\\\s+am)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Heddiw am] LT',\n        'nextDay' => '[Yfory am] LT',\n        'nextWeek' => 'dddd [am] LT',\n        'lastDay' => '[Ddoe am] LT',\n        'lastWeek' => 'dddd [diwethaf am] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        return $number.(\n            $number > 20\n                ? (\\in_array((int) $number, [40, 50, 60, 80, 100], true) ? 'fed' : 'ain')\n                : ([\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed', // 11eg to 20fed\n                ])[$number] ?? ''\n        );\n    },\n    'months' => ['Ionawr', 'Chwefror', 'Mawrth', 'Ebrill', 'Mai', 'Mehefin', 'Gorffennaf', 'Awst', 'Medi', 'Hydref', 'Tachwedd', 'Rhagfyr'],\n    'months_short' => ['Ion', 'Chwe', 'Maw', 'Ebr', 'Mai', 'Meh', 'Gor', 'Aws', 'Med', 'Hyd', 'Tach', 'Rhag'],\n    'weekdays' => ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],\n    'weekdays_short' => ['Sul', 'Llun', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],\n    'weekdays_min' => ['Su', 'Ll', 'Ma', 'Me', 'Ia', 'Gw', 'Sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' a '],\n    'meridiem' => ['yb', 'yh'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/cy_GB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/cy.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/da.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Rune Mønnike\n * - François B\n * - codenhagen\n * - JD Isaacks\n * - Jens Herlevsen\n * - Ulrik McArdle (mcardle)\n * - Frederik Sauer (FrittenKeeZ)\n * - Janus Bahs Jacquet (kokoshneta)\n */\nreturn [\n    'year' => ':count år|:count år',\n    'a_year' => 'et år|:count år',\n    'y' => ':count år|:count år',\n    'month' => ':count måned|:count måneder',\n    'a_month' => 'en måned|:count måneder',\n    'm' => ':count mdr.',\n    'week' => ':count uge|:count uger',\n    'a_week' => 'en uge|:count uger',\n    'w' => ':count u.',\n    'day' => ':count dag|:count dage',\n    'a_day' => ':count dag|:count dage',\n    'd' => ':count d.',\n    'hour' => ':count time|:count timer',\n    'a_hour' => 'en time|:count timer',\n    'h' => ':count t.',\n    'minute' => ':count minut|:count minutter',\n    'a_minute' => 'et minut|:count minutter',\n    'min' => ':count min.',\n    'second' => ':count sekund|:count sekunder',\n    'a_second' => 'få sekunder|:count sekunder',\n    's' => ':count s.',\n    'ago' => 'for :time siden',\n    'from_now' => 'om :time',\n    'after' => ':time efter',\n    'before' => ':time før',\n    'diff_now' => 'nu',\n    'diff_today' => 'i dag',\n    'diff_today_regexp' => 'i dag(?:\\\\s+kl.)?',\n    'diff_yesterday' => 'i går',\n    'diff_yesterday_regexp' => 'i går(?:\\\\s+kl.)?',\n    'diff_tomorrow' => 'i morgen',\n    'diff_tomorrow_regexp' => 'i morgen(?:\\\\s+kl.)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[i dag kl.] LT',\n        'nextDay' => '[i morgen kl.] LT',\n        'nextWeek' => 'på dddd [kl.] LT',\n        'lastDay' => '[i går kl.] LT',\n        'lastWeek' => '[i] dddd[s kl.] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'],\n    'months_short' => ['jan.', 'feb.', 'mar.', 'apr.', 'maj.', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'],\n    'weekdays' => ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],\n    'weekdays_short' => ['søn.', 'man.', 'tir.', 'ons.', 'tor.', 'fre.', 'lør.'],\n    'weekdays_min' => ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' og '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/da_DK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/da.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/da_GL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/da.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D. MMM YYYY',\n        'LLL' => 'D. MMMM YYYY HH.mm',\n        'LLLL' => 'dddd [den] D. MMMM YYYY HH.mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dav.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Luma lwa K', 'luma lwa p'],\n    'weekdays' => ['Ituku ja jumwa', 'Kuramuka jimweri', 'Kuramuka kawi', 'Kuramuka kadadu', 'Kuramuka kana', 'Kuramuka kasanu', 'Kifula nguwo'],\n    'weekdays_short' => ['Jum', 'Jim', 'Kaw', 'Kad', 'Kan', 'Kas', 'Ngu'],\n    'weekdays_min' => ['Jum', 'Jim', 'Kaw', 'Kad', 'Kan', 'Kas', 'Ngu'],\n    'months' => ['Mori ghwa imbiri', 'Mori ghwa kawi', 'Mori ghwa kadadu', 'Mori ghwa kana', 'Mori ghwa kasanu', 'Mori ghwa karandadu', 'Mori ghwa mfungade', 'Mori ghwa wunyanya', 'Mori ghwa ikenda', 'Mori ghwa ikumi', 'Mori ghwa ikumi na imweri', 'Mori ghwa ikumi na iwi'],\n    'months_short' => ['Imb', 'Kaw', 'Kad', 'Kan', 'Kas', 'Kar', 'Mfu', 'Wun', 'Ike', 'Iku', 'Imw', 'Iwi'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Michael Hohl\n * - sheriffmarley\n * - dennisoderwald\n * - Timo\n * - Karag2006\n * - Pete Scopes (pdscopes)\n */\nreturn [\n    'year' => ':count Jahr|:count Jahre',\n    'a_year' => 'ein Jahr|:count Jahre',\n    'y' => ':count J.',\n    'month' => ':count Monat|:count Monate',\n    'a_month' => 'ein Monat|:count Monate',\n    'm' => ':count Mon.',\n    'week' => ':count Woche|:count Wochen',\n    'a_week' => 'eine Woche|:count Wochen',\n    'w' => ':count Wo.',\n    'day' => ':count Tag|:count Tage',\n    'a_day' => 'ein Tag|:count Tage',\n    'd' => ':count Tg.',\n    'hour' => ':count Stunde|:count Stunden',\n    'a_hour' => 'eine Stunde|:count Stunden',\n    'h' => ':count Std.',\n    'minute' => ':count Minute|:count Minuten',\n    'a_minute' => 'eine Minute|:count Minuten',\n    'min' => ':count Min.',\n    'second' => ':count Sekunde|:count Sekunden',\n    'a_second' => 'ein paar Sekunden|:count Sekunden',\n    's' => ':count Sek.',\n    'millisecond' => ':count Millisekunde|:count Millisekunden',\n    'a_millisecond' => 'eine Millisekunde|:count Millisekunden',\n    'ms' => ':countms',\n    'microsecond' => ':count Mikrosekunde|:count Mikrosekunden',\n    'a_microsecond' => 'eine Mikrosekunde|:count Mikrosekunden',\n    'µs' => ':countµs',\n    'ago' => 'vor :time',\n    'from_now' => 'in :time',\n    'after' => ':time später',\n    'before' => ':time zuvor',\n\n    'year_from_now' => ':count Jahr|:count Jahren',\n    'month_from_now' => ':count Monat|:count Monaten',\n    'week_from_now' => ':count Woche|:count Wochen',\n    'day_from_now' => ':count Tag|:count Tagen',\n    'year_ago' => ':count Jahr|:count Jahren',\n    'month_ago' => ':count Monat|:count Monaten',\n    'week_ago' => ':count Woche|:count Wochen',\n    'day_ago' => ':count Tag|:count Tagen',\n    'a_year_from_now' => 'ein Jahr|:count Jahren',\n    'a_month_from_now' => 'ein Monat|:count Monaten',\n    'a_week_from_now' => 'eine Woche|:count Wochen',\n    'a_day_from_now' => 'ein Tag|:count Tagen',\n    'a_year_ago' => 'ein Jahr|:count Jahren',\n    'a_month_ago' => 'ein Monat|:count Monaten',\n    'a_week_ago' => 'eine Woche|:count Wochen',\n    'a_day_ago' => 'ein Tag|:count Tagen',\n\n    'diff_now' => 'Gerade eben',\n    'diff_today' => 'heute',\n    'diff_today_regexp' => 'heute(?:\\\\s+um)?',\n    'diff_yesterday' => 'Gestern',\n    'diff_yesterday_regexp' => 'gestern(?:\\\\s+um)?',\n    'diff_tomorrow' => 'Morgen',\n    'diff_tomorrow_regexp' => 'morgen(?:\\\\s+um)?',\n    'diff_before_yesterday' => 'Vorgestern',\n    'diff_after_tomorrow' => 'Übermorgen',\n\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY HH:mm',\n    ],\n\n    'calendar' => [\n        'sameDay' => '[heute um] LT [Uhr]',\n        'nextDay' => '[morgen um] LT [Uhr]',\n        'nextWeek' => 'dddd [um] LT [Uhr]',\n        'lastDay' => '[gestern um] LT [Uhr]',\n        'lastWeek' => '[letzten] dddd [um] LT [Uhr]',\n        'sameElse' => 'L',\n    ],\n\n    'months' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],\n    'months_short' => ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n    'weekdays' => ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],\n    'weekdays_short' => ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],\n    'weekdays_min' => ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n    'ordinal' => ':number.',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' und '],\n    'ordinal_words' => [\n        'of' => 'im',\n        'first' => 'erster',\n        'second' => 'zweiter',\n        'third' => 'dritter',\n        'fourth' => 'vierten',\n        'fifth' => 'fünfter',\n        'last' => 'letzten',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_AT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - sheriffmarley\n * - Timo\n * - Michael Hohl\n * - Namoshek\n * - Bernhard Baumrock (BernhardBaumrock)\n */\nreturn array_replace_recursive(require __DIR__.'/de.php', [\n    'months' => [\n        0 => 'Jänner',\n    ],\n    'months_short' => [\n        0 => 'Jän',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_BE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/de.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - sheriffmarley\n * - Timo\n * - Michael Hohl\n */\nreturn array_replace_recursive(require __DIR__.'/de.php', [\n    'weekdays_short' => ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_DE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.    bug-glibc-locales@gnu.org\n */\nreturn require __DIR__.'/de.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_IT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Matthias Dieter Wallno:fer libc-locales@sourceware.org\n */\nreturn require __DIR__.'/de.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_LI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/de.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/de_LU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/de.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dje.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Subbaahi', 'Zaarikay b'],\n    'weekdays' => ['Alhadi', 'Atinni', 'Atalaata', 'Alarba', 'Alhamisi', 'Alzuma', 'Asibti'],\n    'weekdays_short' => ['Alh', 'Ati', 'Ata', 'Ala', 'Alm', 'Alz', 'Asi'],\n    'weekdays_min' => ['Alh', 'Ati', 'Ata', 'Ala', 'Alm', 'Alz', 'Asi'],\n    'months' => ['Žanwiye', 'Feewiriye', 'Marsi', 'Awiril', 'Me', 'Žuweŋ', 'Žuyye', 'Ut', 'Sektanbur', 'Oktoobur', 'Noowanbur', 'Deesanbur'],\n    'months_short' => ['Žan', 'Fee', 'Mar', 'Awi', 'Me', 'Žuw', 'Žuy', 'Ut', 'Sek', 'Okt', 'Noo', 'Dee'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count hari', // less reliable\n    'y' => ':count hari', // less reliable\n    'a_year' => ':count hari', // less reliable\n\n    'week' => ':count alzuma', // less reliable\n    'w' => ':count alzuma', // less reliable\n    'a_week' => ':count alzuma', // less reliable\n\n    'second' => ':count atinni', // less reliable\n    's' => ':count atinni', // less reliable\n    'a_second' => ':count atinni', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/doi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/doi_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/doi_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat Pune    libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फरवरी', 'मार्च', 'एप्रैल', 'मेई', 'जून', 'जूलै', 'अगस्त', 'सितंबर', 'अक्तूबर', 'नवंबर', 'दिसंबर'],\n    'months_short' => ['जनवरी', 'फरवरी', 'मार्च', 'एप्रैल', 'मेई', 'जून', 'जूलै', 'अगस्त', 'सितंबर', 'अक्तूबर', 'नवंबर', 'दिसंबर'],\n    'weekdays' => ['ऐतबार', 'सोमबार', 'मंगलबर', 'बुधबार', 'बीरबार', 'शुक्करबार', 'श्नीचरबार'],\n    'weekdays_short' => ['ऐत', 'सोम', 'मंगल', 'बुध', 'बीर', 'शुक्कर', 'श्नीचर'],\n    'weekdays_min' => ['ऐत', 'सोम', 'मंगल', 'बुध', 'बीर', 'शुक्कर', 'श्नीचर'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['सञं', 'सबेर'],\n\n    'second' => ':count सङार', // less reliable\n    's' => ':count सङार', // less reliable\n    'a_second' => ':count सङार', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dsb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/dsb_DE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dsb_DE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Information from Michael Wolf    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'DD. MMMM YYYY',\n        'LLL' => 'DD. MMMM, HH:mm [góź.]',\n        'LLLL' => 'dddd, DD. MMMM YYYY, HH:mm [góź.]',\n    ],\n    'months' => ['januara', 'februara', 'měrca', 'apryla', 'maja', 'junija', 'julija', 'awgusta', 'septembra', 'oktobra', 'nowembra', 'decembra'],\n    'months_short' => ['Jan', 'Feb', 'Měr', 'Apr', 'Maj', 'Jun', 'Jul', 'Awg', 'Sep', 'Okt', 'Now', 'Dec'],\n    'weekdays' => ['Njeźela', 'Pónjeźele', 'Wałtora', 'Srjoda', 'Stwórtk', 'Pětk', 'Sobota'],\n    'weekdays_short' => ['Nj', 'Pó', 'Wa', 'Sr', 'St', 'Pě', 'So'],\n    'weekdays_min' => ['Nj', 'Pó', 'Wa', 'Sr', 'St', 'Pě', 'So'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count lěto',\n    'y' => ':count lěto',\n    'a_year' => ':count lěto',\n\n    'month' => ':count mjasec',\n    'm' => ':count mjasec',\n    'a_month' => ':count mjasec',\n\n    'week' => ':count tyźeń',\n    'w' => ':count tyźeń',\n    'a_week' => ':count tyźeń',\n\n    'day' => ':count źeń',\n    'd' => ':count źeń',\n    'a_day' => ':count źeń',\n\n    'hour' => ':count góźina',\n    'h' => ':count góźina',\n    'a_hour' => ':count góźina',\n\n    'minute' => ':count minuta',\n    'min' => ':count minuta',\n    'a_minute' => ':count minuta',\n\n    'second' => ':count drugi',\n    's' => ':count drugi',\n    'a_second' => ':count drugi',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dua.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['idiɓa', 'ebyámu'],\n    'weekdays' => ['éti', 'mɔ́sú', 'kwasú', 'mukɔ́sú', 'ŋgisú', 'ɗónɛsú', 'esaɓasú'],\n    'weekdays_short' => ['ét', 'mɔ́s', 'kwa', 'muk', 'ŋgi', 'ɗón', 'esa'],\n    'weekdays_min' => ['ét', 'mɔ́s', 'kwa', 'muk', 'ŋgi', 'ɗón', 'esa'],\n    'months' => ['dimɔ́di', 'ŋgɔndɛ', 'sɔŋɛ', 'diɓáɓá', 'emiasele', 'esɔpɛsɔpɛ', 'madiɓɛ́díɓɛ́', 'diŋgindi', 'nyɛtɛki', 'mayésɛ́', 'tiníní', 'eláŋgɛ́'],\n    'months_short' => ['di', 'ŋgɔn', 'sɔŋ', 'diɓ', 'emi', 'esɔ', 'mad', 'diŋ', 'nyɛt', 'may', 'tin', 'elá'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count ma mbu', // less reliable\n    'y' => ':count ma mbu', // less reliable\n    'a_year' => ':count ma mbu', // less reliable\n\n    'month' => ':count myo̱di', // less reliable\n    'm' => ':count myo̱di', // less reliable\n    'a_month' => ':count myo̱di', // less reliable\n\n    'week' => ':count woki', // less reliable\n    'w' => ':count woki', // less reliable\n    'a_week' => ':count woki', // less reliable\n\n    'day' => ':count buńa', // less reliable\n    'd' => ':count buńa', // less reliable\n    'a_day' => ':count buńa', // less reliable\n\n    'hour' => ':count ma awa', // less reliable\n    'h' => ':count ma awa', // less reliable\n    'a_hour' => ':count ma awa', // less reliable\n\n    'minute' => ':count minuti', // less reliable\n    'min' => ':count minuti', // less reliable\n    'a_minute' => ':count minuti', // less reliable\n\n    'second' => ':count maba', // less reliable\n    's' => ':count maba', // less reliable\n    'a_second' => ':count maba', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dv.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n$months = [\n    'ޖެނުއަރީ',\n    'ފެބްރުއަރީ',\n    'މާރިޗު',\n    'އޭޕްރީލު',\n    'މޭ',\n    'ޖޫން',\n    'ޖުލައި',\n    'އޯގަސްޓު',\n    'ސެޕްޓެމްބަރު',\n    'އޮކްޓޯބަރު',\n    'ނޮވެމްބަރު',\n    'ޑިސެމްބަރު',\n];\n\n$weekdays = [\n    'އާދިއްތަ',\n    'ހޯމަ',\n    'އަންގާރަ',\n    'ބުދަ',\n    'ބުރާސްފަތި',\n    'ހުކުރު',\n    'ހޮނިހިރު',\n];\n\n/*\n * Authors:\n * - Josh Soref\n * - Jawish Hameed\n */\nreturn [\n    'year' => ':count '.'އަހަރު',\n    'a_year' => '{1}'.'އަހަރެއް'.'|:count '.'އަހަރު',\n    'month' => ':count '.'މަސް',\n    'a_month' => '{1}'.'މަހެއް'.'|:count '.'މަސް',\n    'week' => ':count '.'ހަފްތާ',\n    'a_week' => '{1}'.'ސިކުންތުކޮޅެއް'.'|:count '.'ހަފްތާ',\n    'day' => ':count '.'ދުވަސް',\n    'a_day' => '{1}'.'ދުވަހެއް'.'|:count '.'ދުވަސް',\n    'hour' => ':count '.'ގަޑިއިރު',\n    'a_hour' => '{1}'.'ގަޑިއިރެއް'.'|:count '.'ގަޑިއިރު',\n    'minute' => ':count '.'މިނިޓު',\n    'a_minute' => '{1}'.'މިނިޓެއް'.'|:count '.'މިނިޓު',\n    'second' => ':count '.'ސިކުންތު',\n    'a_second' => '{1}'.'ސިކުންތުކޮޅެއް'.'|:count '.'ސިކުންތު',\n    'ago' => 'ކުރިން :time',\n    'from_now' => 'ތެރޭގައި :time',\n    'after' => ':time ފަހުން',\n    'before' => ':time ކުރި',\n    'diff_yesterday' => 'އިއްޔެ',\n    'diff_today' => 'މިއަދު',\n    'diff_tomorrow' => 'މާދަމާ',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[މިއަދު] LT',\n        'nextDay' => '[މާދަމާ] LT',\n        'nextWeek' => 'dddd LT',\n        'lastDay' => '[އިއްޔެ] LT',\n        'lastWeek' => '[ފާއިތުވި] dddd LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['މކ', 'މފ'],\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => $weekdays,\n    'weekdays_short' => $weekdays,\n    'weekdays_min' => ['އާދި', 'ހޯމަ', 'އަން', 'ބުދަ', 'ބުރާ', 'ހުކު', 'ހޮނި'],\n    'list' => [', ', ' އަދި '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dv_MV.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ahmed Ali\n */\n\n$months = [\n    'ޖެނުއަރީ',\n    'ފެބްރުއަރީ',\n    'މާރިޗު',\n    'އޭޕްރީލު',\n    'މޭ',\n    'ޖޫން',\n    'ޖުލައި',\n    'އޯގަސްޓު',\n    'ސެޕްޓެމްބަރު',\n    'އޮކްޓޯބަރު',\n    'ނޮވެމްބަރު',\n    'ޑިސެމްބަރު',\n];\n\n$weekdays = [\n    'އާދިއްތަ',\n    'ހޯމަ',\n    'އަންގާރަ',\n    'ބުދަ',\n    'ބުރާސްފަތި',\n    'ހުކުރު',\n    'ހޮނިހިރު',\n];\n\nreturn [\n    'year' => '{0}އަހަރެއް|[1,Inf]:count އަހަރު',\n    'y' => '{0}އަހަރެއް|[1,Inf]:count އަހަރު',\n    'month' => '{0}މައްސަރެއް|[1,Inf]:count މަސް',\n    'm' => '{0}މައްސަރެއް|[1,Inf]:count މަސް',\n    'week' => '{0}ހަފްތާއެއް|[1,Inf]:count ހަފްތާ',\n    'w' => '{0}ހަފްތާއެއް|[1,Inf]:count ހަފްތާ',\n    'day' => '{0}ދުވަސް|[1,Inf]:count ދުވަސް',\n    'd' => '{0}ދުވަސް|[1,Inf]:count ދުވަސް',\n    'hour' => '{0}ގަޑިއިރެއް|[1,Inf]:count ގަޑި',\n    'h' => '{0}ގަޑިއިރެއް|[1,Inf]:count ގަޑި',\n    'minute' => '{0}މިނެޓެއް|[1,Inf]:count މިނެޓް',\n    'min' => '{0}މިނެޓެއް|[1,Inf]:count މިނެޓް',\n    'second' => '{0}ސިކުންތެއް|[1,Inf]:count ސިކުންތު',\n    's' => '{0}ސިކުންތެއް|[1,Inf]:count ސިކުންތު',\n    'ago' => ':time ކުރިން',\n    'from_now' => ':time ފަހުން',\n    'after' => ':time ފަހުން',\n    'before' => ':time ކުރި',\n    'diff_yesterday' => 'އިއްޔެ',\n    'diff_today' => 'މިއަދު',\n    'diff_tomorrow' => 'މާދަމާ',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[މިއަދު] LT',\n        'nextDay' => '[މާދަމާ] LT',\n        'nextWeek' => 'dddd LT',\n        'lastDay' => '[އިއްޔެ] LT',\n        'lastWeek' => '[ފާއިތުވި] dddd LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['މކ', 'މފ'],\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => $weekdays,\n    'weekdays_short' => $weekdays,\n    'weekdays_min' => ['އާދި', 'ހޯމަ', 'އަން', 'ބުދަ', 'ބުރާ', 'ހުކު', 'ހޮނި'],\n    'list' => [', ', ' އަދި '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dyo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Dimas', 'Teneŋ', 'Talata', 'Alarbay', 'Aramisay', 'Arjuma', 'Sibiti'],\n    'weekdays_short' => ['Dim', 'Ten', 'Tal', 'Ala', 'Ara', 'Arj', 'Sib'],\n    'weekdays_min' => ['Dim', 'Ten', 'Tal', 'Ala', 'Ara', 'Arj', 'Sib'],\n    'months' => ['Sanvie', 'Fébirie', 'Mars', 'Aburil', 'Mee', 'Sueŋ', 'Súuyee', 'Ut', 'Settembar', 'Oktobar', 'Novembar', 'Disambar'],\n    'months_short' => ['Sa', 'Fe', 'Ma', 'Ab', 'Me', 'Su', 'Sú', 'Ut', 'Se', 'Ok', 'No', 'De'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dz.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/dz_BT.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/dz_BT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Sherubtse College    bug-glibc@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'པསྱི་ལོYYཟལMMཚེསDD',\n    ],\n    'months' => ['ཟླ་བ་དང་པ་', 'ཟླ་བ་གཉིས་པ་', 'ཟླ་བ་གསུམ་པ་', 'ཟླ་བ་བཞི་པ་', 'ཟླ་བ་ལྔ་ཕ་', 'ཟླ་བ་དྲུག་པ་', 'ཟླ་བ་བདུནཔ་', 'ཟླ་བ་བརྒྱད་པ་', 'ཟླ་བ་དགུ་པ་', 'ཟླ་བ་བཅུ་པ་', 'ཟླ་བ་བཅུ་གཅིག་པ་', 'ཟླ་བ་བཅུ་གཉིས་པ་'],\n    'months_short' => ['ཟླ་༡', 'ཟླ་༢', 'ཟླ་༣', 'ཟླ་༤', 'ཟླ་༥', 'ཟླ་༦', 'ཟླ་༧', 'ཟླ་༨', 'ཟླ་༩', 'ཟླ་༡༠', 'ཟླ་༡༡', 'ཟླ་༡༢'],\n    'weekdays' => ['གཟའ་ཟླ་བ་', 'གཟའ་མིག་དམར་', 'གཟའ་ལྷག་ཕ་', 'གཟའ་པུར་བུ་', 'གཟའ་པ་སངས་', 'གཟའ་སྤེན་ཕ་', 'གཟའ་ཉི་མ་'],\n    'weekdays_short' => ['ཟླ་', 'མིར་', 'ལྷག་', 'པུར་', 'སངས་', 'སྤེན་', 'ཉི་'],\n    'weekdays_min' => ['ཟླ་', 'མིར་', 'ལྷག་', 'པུར་', 'སངས་', 'སྤེན་', 'ཉི་'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ངས་ཆ', 'ཕྱི་ཆ'],\n\n    'year' => ':count ཆརཔ', // less reliable\n    'y' => ':count ཆརཔ', // less reliable\n    'a_year' => ':count ཆརཔ', // less reliable\n\n    'month' => ':count ཟླ་བ', // less reliable\n    'm' => ':count ཟླ་བ', // less reliable\n    'a_month' => ':count ཟླ་བ', // less reliable\n\n    'day' => ':count ཉི', // less reliable\n    'd' => ':count ཉི', // less reliable\n    'a_day' => ':count ཉི', // less reliable\n\n    'second' => ':count ཆ', // less reliable\n    's' => ':count ཆ', // less reliable\n    'a_second' => ':count ཆ', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ebu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['KI', 'UT'],\n    'weekdays' => ['Kiumia', 'Njumatatu', 'Njumaine', 'Njumatano', 'Aramithi', 'Njumaa', 'NJumamothii'],\n    'weekdays_short' => ['Kma', 'Tat', 'Ine', 'Tan', 'Arm', 'Maa', 'NMM'],\n    'weekdays_min' => ['Kma', 'Tat', 'Ine', 'Tan', 'Arm', 'Maa', 'NMM'],\n    'months' => ['Mweri wa mbere', 'Mweri wa kaĩri', 'Mweri wa kathatũ', 'Mweri wa kana', 'Mweri wa gatano', 'Mweri wa gatantatũ', 'Mweri wa mũgwanja', 'Mweri wa kanana', 'Mweri wa kenda', 'Mweri wa ikũmi', 'Mweri wa ikũmi na ũmwe', 'Mweri wa ikũmi na Kaĩrĩ'],\n    'months_short' => ['Mbe', 'Kai', 'Kat', 'Kan', 'Gat', 'Gan', 'Mug', 'Knn', 'Ken', 'Iku', 'Imw', 'Igi'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ee.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['ŋ', 'ɣ'],\n    'weekdays' => ['kɔsiɖa', 'dzoɖa', 'blaɖa', 'kuɖa', 'yawoɖa', 'fiɖa', 'memleɖa'],\n    'weekdays_short' => ['kɔs', 'dzo', 'bla', 'kuɖ', 'yaw', 'fiɖ', 'mem'],\n    'weekdays_min' => ['kɔs', 'dzo', 'bla', 'kuɖ', 'yaw', 'fiɖ', 'mem'],\n    'months' => ['dzove', 'dzodze', 'tedoxe', 'afɔfĩe', 'dama', 'masa', 'siamlɔm', 'deasiamime', 'anyɔnyɔ', 'kele', 'adeɛmekpɔxe', 'dzome'],\n    'months_short' => ['dzv', 'dzd', 'ted', 'afɔ', 'dam', 'mas', 'sia', 'dea', 'any', 'kel', 'ade', 'dzm'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'a [ga] h:mm',\n        'LTS' => 'a [ga] h:mm:ss',\n        'L' => 'M/D/YYYY',\n        'LL' => 'MMM D [lia], YYYY',\n        'LLL' => 'a [ga] h:mm MMMM D [lia] YYYY',\n        'LLLL' => 'a [ga] h:mm dddd, MMMM D [lia] YYYY',\n    ],\n\n    'year' => 'ƒe :count',\n    'y' => 'ƒe :count',\n    'a_year' => 'ƒe :count',\n\n    'month' => 'ɣleti :count',\n    'm' => 'ɣleti :count',\n    'a_month' => 'ɣleti :count',\n\n    'week' => 'kwasiɖa :count',\n    'w' => 'kwasiɖa :count',\n    'a_week' => 'kwasiɖa :count',\n\n    'day' => 'ŋkeke :count',\n    'd' => 'ŋkeke :count',\n    'a_day' => 'ŋkeke :count',\n\n    'hour' => 'gaƒoƒo :count',\n    'h' => 'gaƒoƒo :count',\n    'a_hour' => 'gaƒoƒo :count',\n\n    'minute' => 'miniti :count', // less reliable\n    'min' => 'miniti :count', // less reliable\n    'a_minute' => 'miniti :count', // less reliable\n\n    'second' => 'sɛkɛnd :count', // less reliable\n    's' => 'sɛkɛnd :count', // less reliable\n    'a_second' => 'sɛkɛnd :count', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ee_TG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ee.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'LLL' => 'HH:mm MMMM D [lia] YYYY',\n        'LLLL' => 'HH:mm dddd, MMMM D [lia] YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/el.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Alessandro Di Felice\n * - François B\n * - Tim Fish\n * - Gabriel Monteagudo\n * - JD Isaacks\n * - yiannisdesp\n * - Ilias Kasmeridis (iliaskasm)\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count χρόνος|:count χρόνια',\n    'a_year' => 'ένας χρόνος|:count χρόνια',\n    'y' => ':count χρ.',\n    'month' => ':count μήνας|:count μήνες',\n    'a_month' => 'ένας μήνας|:count μήνες',\n    'm' => ':count μήν.',\n    'week' => ':count εβδομάδα|:count εβδομάδες',\n    'a_week' => 'μια εβδομάδα|:count εβδομάδες',\n    'w' => ':count εβδ.',\n    'day' => ':count μέρα|:count μέρες',\n    'a_day' => 'μία μέρα|:count μέρες',\n    'd' => ':count μέρ.',\n    'hour' => ':count ώρα|:count ώρες',\n    'a_hour' => 'μία ώρα|:count ώρες',\n    'h' => ':count ώρα|:count ώρες',\n    'minute' => ':count λεπτό|:count λεπτά',\n    'a_minute' => 'ένα λεπτό|:count λεπτά',\n    'min' => ':count λεπ.',\n    'second' => ':count δευτερόλεπτο|:count δευτερόλεπτα',\n    'a_second' => 'λίγα δευτερόλεπτα|:count δευτερόλεπτα',\n    's' => ':count δευ.',\n    'ago' => 'πριν :time',\n    'from_now' => 'σε :time',\n    'after' => ':time μετά',\n    'before' => ':time πριν',\n    'diff_now' => 'τώρα',\n    'diff_today' => 'Σήμερα',\n    'diff_today_regexp' => 'Σήμερα(?:\\\\s+{})?',\n    'diff_yesterday' => 'χθες',\n    'diff_yesterday_regexp' => 'Χθες(?:\\\\s+{})?',\n    'diff_tomorrow' => 'αύριο',\n    'diff_tomorrow_regexp' => 'Αύριο(?:\\\\s+{})?',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm A',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm A',\n    ],\n    'calendar' => [\n        'sameDay' => '[Σήμερα {}] LT',\n        'nextDay' => '[Αύριο {}] LT',\n        'nextWeek' => 'dddd [{}] LT',\n        'lastDay' => '[Χθες {}] LT',\n        'lastWeek' => function (CarbonInterface $current) {\n            switch ($current->dayOfWeek) {\n                case 6:\n                    return '[το προηγούμενο] dddd [{}] LT';\n                default:\n                    return '[την προηγούμενη] dddd [{}] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberη',\n    'meridiem' => ['ΠΜ', 'ΜΜ', 'πμ', 'μμ'],\n    'months' => ['Ιανουαρίου', 'Φεβρουαρίου', 'Μαρτίου', 'Απριλίου', 'Μαΐου', 'Ιουνίου', 'Ιουλίου', 'Αυγούστου', 'Σεπτεμβρίου', 'Οκτωβρίου', 'Νοεμβρίου', 'Δεκεμβρίου'],\n    'months_standalone' => ['Ιανουάριος', 'Φεβρουάριος', 'Μάρτιος', 'Απρίλιος', 'Μάιος', 'Ιούνιος', 'Ιούλιος', 'Αύγουστος', 'Σεπτέμβριος', 'Οκτώβριος', 'Νοέμβριος', 'Δεκέμβριος'],\n    'months_regexp' => '/(D[oD]?[\\s,]+MMMM|L{2,4}|l{2,4})/',\n    'months_short' => ['Ιαν', 'Φεβ', 'Μαρ', 'Απρ', 'Μαϊ', 'Ιουν', 'Ιουλ', 'Αυγ', 'Σεπ', 'Οκτ', 'Νοε', 'Δεκ'],\n    'weekdays' => ['Κυριακή', 'Δευτέρα', 'Τρίτη', 'Τετάρτη', 'Πέμπτη', 'Παρασκευή', 'Σάββατο'],\n    'weekdays_short' => ['Κυρ', 'Δευ', 'Τρι', 'Τετ', 'Πεμ', 'Παρ', 'Σαβ'],\n    'weekdays_min' => ['Κυ', 'Δε', 'Τρ', 'Τε', 'Πε', 'Πα', 'Σα'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' και '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/el_CY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Greek Debian Translation Team    bug-glibc@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/el.php', [\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/el_GR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/el.php', [\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Milos Sakovic\n * - Paul\n * - Pete Scopes (pdscopes)\n */\nreturn [\n    /*\n     * {1}, {0} and ]1,Inf[ are not needed as it's the default for English pluralization.\n     * But as some languages are using en.php as a fallback, it's better to specify it\n     * explicitly so those languages also fallback to English pluralization when a unit\n     * is missing.\n     */\n    'year' => '{1}:count year|{0}:count years|]1,Inf[:count years',\n    'a_year' => '{1}a year|{0}:count years|]1,Inf[:count years',\n    'y' => '{1}:countyr|{0}:countyrs|]1,Inf[:countyrs',\n    'month' => '{1}:count month|{0}:count months|]1,Inf[:count months',\n    'a_month' => '{1}a month|{0}:count months|]1,Inf[:count months',\n    'm' => '{1}:countmo|{0}:countmos|]1,Inf[:countmos',\n    'week' => '{1}:count week|{0}:count weeks|]1,Inf[:count weeks',\n    'a_week' => '{1}a week|{0}:count weeks|]1,Inf[:count weeks',\n    'w' => ':countw',\n    'day' => '{1}:count day|{0}:count days|]1,Inf[:count days',\n    'a_day' => '{1}a day|{0}:count days|]1,Inf[:count days',\n    'd' => ':countd',\n    'hour' => '{1}:count hour|{0}:count hours|]1,Inf[:count hours',\n    'a_hour' => '{1}an hour|{0}:count hours|]1,Inf[:count hours',\n    'h' => ':counth',\n    'minute' => '{1}:count minute|{0}:count minutes|]1,Inf[:count minutes',\n    'a_minute' => '{1}a minute|{0}:count minutes|]1,Inf[:count minutes',\n    'min' => ':countm',\n    'second' => '{1}:count second|{0}:count seconds|]1,Inf[:count seconds',\n    'a_second' => '{1}a few seconds|{0}:count seconds|]1,Inf[:count seconds',\n    's' => ':counts',\n    'millisecond' => '{1}:count millisecond|{0}:count milliseconds|]1,Inf[:count milliseconds',\n    'a_millisecond' => '{1}a millisecond|{0}:count milliseconds|]1,Inf[:count milliseconds',\n    'ms' => ':countms',\n    'microsecond' => '{1}:count microsecond|{0}:count microseconds|]1,Inf[:count microseconds',\n    'a_microsecond' => '{1}a microsecond|{0}:count microseconds|]1,Inf[:count microseconds',\n    'µs' => ':countµs',\n    'ago' => ':time ago',\n    'from_now' => ':time from now',\n    'after' => ':time after',\n    'before' => ':time before',\n    'diff_now' => 'just now',\n    'diff_today' => 'today',\n    'diff_yesterday' => 'yesterday',\n    'diff_tomorrow' => 'tomorrow',\n    'diff_before_yesterday' => 'before yesterday',\n    'diff_after_tomorrow' => 'after tomorrow',\n    'period_recurrences' => '{1}once|{0}:count times|]1,Inf[:count times',\n    'period_interval' => 'every :interval',\n    'period_start_date' => 'from :date',\n    'period_end_date' => 'to :date',\n    'months' => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    'weekdays' => ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n    'weekdays_short' => ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n    'weekdays_min' => ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n    'ordinal' => function ($number) {\n        $lastDigit = $number % 10;\n\n        return $number.(\n            ((int) ($number % 100 / 10) === 1) ? 'th' : (\n                ($lastDigit === 1) ? 'st' : (\n                    ($lastDigit === 2) ? 'nd' : (\n                        ($lastDigit === 3) ? 'rd' : 'th'\n                    )\n                )\n            )\n        );\n    },\n    'list' => [', ', ' and '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_001.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_150.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_AG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.  bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_AI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_AS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_AT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_AU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - François B\n * - Mayank Badola\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm A',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm A',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_BZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Zhan Tong Zhang\n * - Mayank Badola\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'MMMM D, YYYY',\n        'LLL' => 'MMMM D, YYYY h:mm A',\n        'LLLL' => 'dddd, MMMM D, YYYY h:mm A',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CX.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_CY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - NehaGautam\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD-MM-YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_DE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_DG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_DK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Danish Standards Association  bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_DM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_FI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_FJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_FK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_FM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Mayank Badola\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_GY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_HK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory  bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_IE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Martin McWhorter\n * - François B\n * - Chris Cartlidge\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD-MM-YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_IL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Yoav Amit\n * - François B\n * - Mayank Badola\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_IM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory  bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YY',\n        'LL' => 'MMMM DD, YYYY',\n        'LLL' => 'DD MMM HH:mm',\n        'LLLL' => 'MMMM DD, YYYY HH:mm',\n    ],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_IO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_ISO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'dddd, YYYY MMMM DD HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_JE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_JM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_KE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_KI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_KN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_KY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_LC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_LR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_LS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MP.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_MY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_NZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Mayank Badola\n * - Luke McGregor\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm A',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm A',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_PG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_PH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory  bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_PK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_PN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_PR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_PW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_RW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 6,\n    'weekend' => [5, 6],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'from_now' => 'in :time',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SX.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_SZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_TC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_TK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_TO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_TT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_TV.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_TZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_UG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_UM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_US.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_US_Posix.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_VC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_VG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_VI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_VU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_WS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YY',\n        'LL' => 'MMMM DD, YYYY',\n        'LLL' => 'DD MMM HH:mm',\n        'LLLL' => 'MMMM DD, YYYY HH:mm',\n    ],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_ZM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - ANLoc Martin Benjamin locales@africanlocalization.net\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/en_ZW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/en.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/eo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - Mia Nordentoft\n * - JD Isaacks\n */\nreturn [\n    'year' => ':count jaro|:count jaroj',\n    'a_year' => 'jaro|:count jaroj',\n    'y' => ':count j.',\n    'month' => ':count monato|:count monatoj',\n    'a_month' => 'monato|:count monatoj',\n    'm' => ':count mo.',\n    'week' => ':count semajno|:count semajnoj',\n    'a_week' => 'semajno|:count semajnoj',\n    'w' => ':count sem.',\n    'day' => ':count tago|:count tagoj',\n    'a_day' => 'tago|:count tagoj',\n    'd' => ':count t.',\n    'hour' => ':count horo|:count horoj',\n    'a_hour' => 'horo|:count horoj',\n    'h' => ':count h.',\n    'minute' => ':count minuto|:count minutoj',\n    'a_minute' => 'minuto|:count minutoj',\n    'min' => ':count min.',\n    'second' => ':count sekundo|:count sekundoj',\n    'a_second' => 'sekundoj|:count sekundoj',\n    's' => ':count sek.',\n    'ago' => 'antaŭ :time',\n    'from_now' => 'post :time',\n    'after' => ':time poste',\n    'before' => ':time antaŭe',\n    'diff_yesterday' => 'Hieraŭ',\n    'diff_yesterday_regexp' => 'Hieraŭ(?:\\\\s+je)?',\n    'diff_today' => 'Hodiaŭ',\n    'diff_today_regexp' => 'Hodiaŭ(?:\\\\s+je)?',\n    'diff_tomorrow' => 'Morgaŭ',\n    'diff_tomorrow_regexp' => 'Morgaŭ(?:\\\\s+je)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'D[-a de] MMMM, YYYY',\n        'LLL' => 'D[-a de] MMMM, YYYY HH:mm',\n        'LLLL' => 'dddd, [la] D[-a de] MMMM, YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Hodiaŭ je] LT',\n        'nextDay' => '[Morgaŭ je] LT',\n        'nextWeek' => 'dddd [je] LT',\n        'lastDay' => '[Hieraŭ je] LT',\n        'lastWeek' => '[pasinta] dddd [je] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numbera',\n    'meridiem' => ['a.t.m.', 'p.t.m.'],\n    'months' => ['januaro', 'februaro', 'marto', 'aprilo', 'majo', 'junio', 'julio', 'aŭgusto', 'septembro', 'oktobro', 'novembro', 'decembro'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aŭg', 'sep', 'okt', 'nov', 'dec'],\n    'weekdays' => ['dimanĉo', 'lundo', 'mardo', 'merkredo', 'ĵaŭdo', 'vendredo', 'sabato'],\n    'weekdays_short' => ['dim', 'lun', 'mard', 'merk', 'ĵaŭ', 'ven', 'sab'],\n    'weekdays_min' => ['di', 'lu', 'ma', 'me', 'ĵa', 've', 'sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' kaj '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - kostas\n * - François B\n * - Tim Fish\n * - Claire Coloma\n * - Steven Heinrich\n * - JD Isaacks\n * - Raphael Amorim\n * - Jorge Y. Castillo\n * - Víctor Díaz\n * - Diego\n * - Sebastian Thierer\n * - quinterocesar\n * - Daniel Commesse Liévanos (danielcommesse)\n * - Pete Scopes (pdscopes)\n * - gam04\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count año|:count años',\n    'a_year' => 'un año|:count años',\n    'y' => ':count año|:count años',\n    'month' => ':count mes|:count meses',\n    'a_month' => 'un mes|:count meses',\n    'm' => ':count mes|:count meses',\n    'week' => ':count semana|:count semanas',\n    'a_week' => 'una semana|:count semanas',\n    'w' => ':countsem',\n    'day' => ':count día|:count días',\n    'a_day' => 'un día|:count días',\n    'd' => ':countd',\n    'hour' => ':count hora|:count horas',\n    'a_hour' => 'una hora|:count horas',\n    'h' => ':counth',\n    'minute' => ':count minuto|:count minutos',\n    'a_minute' => 'un minuto|:count minutos',\n    'min' => ':countm',\n    'second' => ':count segundo|:count segundos',\n    'a_second' => 'unos segundos|:count segundos',\n    's' => ':counts',\n    'millisecond' => ':count milisegundo|:count milisegundos',\n    'a_millisecond' => 'un milisegundo|:count milisegundos',\n    'ms' => ':countms',\n    'microsecond' => ':count microsegundo|:count microsegundos',\n    'a_microsecond' => 'un microsegundo|:count microsegundos',\n    'µs' => ':countµs',\n    'ago' => 'hace :time',\n    'from_now' => 'en :time',\n    'after' => ':time después',\n    'before' => ':time antes',\n    'diff_now' => 'ahora mismo',\n    'diff_today' => 'hoy',\n    'diff_today_regexp' => 'hoy(?:\\\\s+a)?(?:\\\\s+las)?',\n    'diff_yesterday' => 'ayer',\n    'diff_yesterday_regexp' => 'ayer(?:\\\\s+a)?(?:\\\\s+las)?',\n    'diff_tomorrow' => 'mañana',\n    'diff_tomorrow_regexp' => 'mañana(?:\\\\s+a)?(?:\\\\s+las)?',\n    'diff_before_yesterday' => 'anteayer',\n    'diff_after_tomorrow' => 'pasado mañana',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D [de] MMMM [de] YYYY',\n        'LLL' => 'D [de] MMMM [de] YYYY H:mm',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => function (CarbonInterface $current) {\n            return '[hoy a la'.($current->hour !== 1 ? 's' : '').'] LT';\n        },\n        'nextDay' => function (CarbonInterface $current) {\n            return '[mañana a la'.($current->hour !== 1 ? 's' : '').'] LT';\n        },\n        'nextWeek' => function (CarbonInterface $current) {\n            return 'dddd [a la'.($current->hour !== 1 ? 's' : '').'] LT';\n        },\n        'lastDay' => function (CarbonInterface $current) {\n            return '[ayer a la'.($current->hour !== 1 ? 's' : '').'] LT';\n        },\n        'lastWeek' => function (CarbonInterface $current) {\n            return '[el] dddd [pasado a la'.($current->hour !== 1 ? 's' : '').'] LT';\n        },\n        'sameElse' => 'L',\n    ],\n    'months' => ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'],\n    'months_short' => ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n    'mmm_suffix' => '.',\n    'ordinal' => ':numberº',\n    'weekdays' => ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'],\n    'weekdays_short' => ['dom.', 'lun.', 'mar.', 'mié.', 'jue.', 'vie.', 'sáb.'],\n    'weekdays_min' => ['do', 'lu', 'ma', 'mi', 'ju', 'vi', 'sá'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' y '],\n    'meridiem' => ['a. m.', 'p. m.'],\n    'ordinal_words' => [\n        'of' => 'de',\n        'first' => 'primer',\n        'second' => 'segundo',\n        'third' => 'tercer',\n        'fourth' => 'cuarto',\n        'fifth' => 'quinto',\n        'last' => 'último',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_419.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_AR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_BO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_BR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_BZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_CL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_CO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_CR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_CU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_DO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - kostas\n * - François B\n * - Tim Fish\n * - Chiel Robben\n * - Claire Coloma\n * - Steven Heinrich\n * - JD Isaacks\n * - Raphael Amorim\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'diff_before_yesterday' => 'anteayer',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'LLL' => 'D [de] MMMM [de] YYYY h:mm A',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY h:mm A',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_EA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_EC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_ES.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn require __DIR__.'/es.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_GQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_GT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_HN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_IC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_MX.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'diff_before_yesterday' => 'antier',\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_NI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_PA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_PE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_PH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/M/yy',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D [de] MMMM [de] YYYY h:mm a',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_PR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_PY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_SV.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'months' => ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'],\n    'months_short' => ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_US.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - Josh Soref\n * - Jørn Ølmheim\n * - Craig Patik\n * - bustta\n * - François B\n * - Tim Fish\n * - Claire Coloma\n * - Steven Heinrich\n * - JD Isaacks\n * - Raphael Amorim\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'diff_before_yesterday' => 'anteayer',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'MM/DD/YYYY',\n        'LL' => 'MMMM [de] D [de] YYYY',\n        'LLL' => 'MMMM [de] D [de] YYYY h:mm A',\n        'LLLL' => 'dddd, MMMM [de] D [de] YYYY h:mm A',\n    ],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_UY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'months' => ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'setiembre', 'octubre', 'noviembre', 'diciembre'],\n    'months_short' => ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'set', 'oct', 'nov', 'dic'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/es_VE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/es.php', [\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/et.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Andres Ivanov\n * - Tsutomu Kuroda\n * - tjku\n * - Max Melentiev\n * - Juanito Fatas\n * - RM87\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Esko Lehtme\n * - Mart Karu\n * - Nicolás Hock Isaza\n * - Kevin Valdek\n * - Zahhar Kirillov\n * - João Magalhães\n * - Ingmar\n * - Illimar Tambek\n * - Mihkel\n */\nreturn [\n    'year' => ':count aasta|:count aastat',\n    'y' => ':count a',\n    'month' => ':count kuu|:count kuud',\n    'm' => ':count k',\n    'week' => ':count nädal|:count nädalat',\n    'w' => ':count näd',\n    'day' => ':count päev|:count päeva',\n    'd' => ':count p',\n    'hour' => ':count tund|:count tundi',\n    'h' => ':count t',\n    'minute' => ':count minut|:count minutit',\n    'min' => ':count min',\n    'second' => ':count sekund|:count sekundit',\n    's' => ':count s',\n    'ago' => ':time tagasi',\n    'from_now' => ':time pärast',\n    'after' => ':time pärast',\n    'before' => ':time enne',\n    'year_from_now' => ':count aasta',\n    'month_from_now' => ':count kuu',\n    'week_from_now' => ':count nädala',\n    'day_from_now' => ':count päeva',\n    'hour_from_now' => ':count tunni',\n    'minute_from_now' => ':count minuti',\n    'second_from_now' => ':count sekundi',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'diff_now' => 'nüüd',\n    'diff_today' => 'täna',\n    'diff_yesterday' => 'eile',\n    'diff_tomorrow' => 'homme',\n    'diff_before_yesterday' => 'üleeile',\n    'diff_after_tomorrow' => 'ülehomme',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[täna] LT',\n        'nextDay' => '[homme] LT',\n        'lastDay' => '[eile] LT',\n        'nextWeek' => 'dddd LT',\n        'lastWeek' => '[eelmine] dddd LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['jaanuar', 'veebruar', 'märts', 'aprill', 'mai', 'juuni', 'juuli', 'august', 'september', 'oktoober', 'november', 'detsember'],\n    'months_short' => ['jaan', 'veebr', 'märts', 'apr', 'mai', 'juuni', 'juuli', 'aug', 'sept', 'okt', 'nov', 'dets'],\n    'weekdays' => ['pühapäev', 'esmaspäev', 'teisipäev', 'kolmapäev', 'neljapäev', 'reede', 'laupäev'],\n    'weekdays_short' => ['P', 'E', 'T', 'K', 'N', 'R', 'L'],\n    'weekdays_min' => ['P', 'E', 'T', 'K', 'N', 'R', 'L'],\n    'list' => [', ', ' ja '],\n    'meridiem' => ['enne lõunat', 'pärast lõunat'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/et_EE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/et.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/eu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - JD Isaacks\n */\nreturn [\n    'year' => 'urte bat|:count urte',\n    'y' => 'Urte 1|:count urte',\n    'month' => 'hilabete bat|:count hilabete',\n    'm' => 'Hile 1|:count hile',\n    'week' => 'Aste 1|:count aste',\n    'w' => 'Aste 1|:count aste',\n    'day' => 'egun bat|:count egun',\n    'd' => 'Egun 1|:count egun',\n    'hour' => 'ordu bat|:count ordu',\n    'h' => 'Ordu 1|:count ordu',\n    'minute' => 'minutu bat|:count minutu',\n    'min' => 'Minutu 1|:count minutu',\n    'second' => 'segundo batzuk|:count segundo',\n    's' => 'Segundu 1|:count segundu',\n    'ago' => 'duela :time',\n    'from_now' => ':time barru',\n    'after' => ':time geroago',\n    'before' => ':time lehenago',\n    'diff_now' => 'orain',\n    'diff_today' => 'gaur',\n    'diff_yesterday' => 'atzo',\n    'diff_tomorrow' => 'bihar',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'YYYY[ko] MMMM[ren] D[a]',\n        'LLL' => 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n        'LLLL' => 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[gaur] LT[etan]',\n        'nextDay' => '[bihar] LT[etan]',\n        'nextWeek' => 'dddd LT[etan]',\n        'lastDay' => '[atzo] LT[etan]',\n        'lastWeek' => '[aurreko] dddd LT[etan]',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['urtarrila', 'otsaila', 'martxoa', 'apirila', 'maiatza', 'ekaina', 'uztaila', 'abuztua', 'iraila', 'urria', 'azaroa', 'abendua'],\n    'months_short' => ['urt.', 'ots.', 'mar.', 'api.', 'mai.', 'eka.', 'uzt.', 'abu.', 'ira.', 'urr.', 'aza.', 'abe.'],\n    'weekdays' => ['igandea', 'astelehena', 'asteartea', 'asteazkena', 'osteguna', 'ostirala', 'larunbata'],\n    'weekdays_short' => ['ig.', 'al.', 'ar.', 'az.', 'og.', 'ol.', 'lr.'],\n    'weekdays_min' => ['ig', 'al', 'ar', 'az', 'og', 'ol', 'lr'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' eta '],\n    'meridiem' => ['g', 'a'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/eu_ES.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/eu.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ewo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['kíkíríg', 'ngəgógəle'],\n    'weekdays' => ['sɔ́ndɔ', 'mɔ́ndi', 'sɔ́ndɔ məlú mə́bɛ̌', 'sɔ́ndɔ məlú mə́lɛ́', 'sɔ́ndɔ məlú mə́nyi', 'fúladé', 'séradé'],\n    'weekdays_short' => ['sɔ́n', 'mɔ́n', 'smb', 'sml', 'smn', 'fúl', 'sér'],\n    'weekdays_min' => ['sɔ́n', 'mɔ́n', 'smb', 'sml', 'smn', 'fúl', 'sér'],\n    'months' => ['ngɔn osú', 'ngɔn bɛ̌', 'ngɔn lála', 'ngɔn nyina', 'ngɔn tána', 'ngɔn saməna', 'ngɔn zamgbála', 'ngɔn mwom', 'ngɔn ebulú', 'ngɔn awóm', 'ngɔn awóm ai dziá', 'ngɔn awóm ai bɛ̌'],\n    'months_short' => ['ngo', 'ngb', 'ngl', 'ngn', 'ngt', 'ngs', 'ngz', 'ngm', 'nge', 'nga', 'ngad', 'ngab'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    // Too unreliable\n    /*\n    'year' => ':count mbu', // less reliable\n    'y' => ':count mbu', // less reliable\n    'a_year' => ':count mbu', // less reliable\n\n    'month' => ':count ngòn', // less reliable\n    'm' => ':count ngòn', // less reliable\n    'a_month' => ':count ngòn', // less reliable\n\n    'week' => ':count mësë', // less reliable\n    'w' => ':count mësë', // less reliable\n    'a_week' => ':count mësë', // less reliable\n\n    'day' => ':count mësë', // less reliable\n    'd' => ':count mësë', // less reliable\n    'a_day' => ':count mësë', // less reliable\n\n    'hour' => ':count awola', // less reliable\n    'h' => ':count awola', // less reliable\n    'a_hour' => ':count awola', // less reliable\n\n    'minute' => ':count awola', // less reliable\n    'min' => ':count awola', // less reliable\n    'a_minute' => ':count awola', // less reliable\n    */\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fa.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - Nasser Ghiasi\n * - JD Isaacks\n * - Hossein Jabbari\n * - nimamo\n * - hafezdivandari\n * - Hassan Pezeshk (hpez)\n */\nreturn [\n    'year' => ':count سال',\n    'a_year' => 'یک سال'.'|:count '.'سال',\n    'y' => ':count سال',\n    'month' => ':count ماه',\n    'a_month' => 'یک ماه'.'|:count '.'ماه',\n    'm' => ':count ماه',\n    'week' => ':count هفته',\n    'a_week' => 'یک هفته'.'|:count '.'هفته',\n    'w' => ':count هفته',\n    'day' => ':count روز',\n    'a_day' => 'یک روز'.'|:count '.'روز',\n    'd' => ':count روز',\n    'hour' => ':count ساعت',\n    'a_hour' => 'یک ساعت'.'|:count '.'ساعت',\n    'h' => ':count ساعت',\n    'minute' => ':count دقیقه',\n    'a_minute' => 'یک دقیقه'.'|:count '.'دقیقه',\n    'min' => ':count دقیقه',\n    'second' => ':count ثانیه',\n    's' => ':count ثانیه',\n    'ago' => ':time پیش',\n    'from_now' => ':time دیگر',\n    'after' => ':time پس از',\n    'before' => ':time پیش از',\n    'diff_now' => 'اکنون',\n    'diff_today' => 'امروز',\n    'diff_today_regexp' => 'امروز(?:\\\\s+ساعت)?',\n    'diff_yesterday' => 'دیروز',\n    'diff_yesterday_regexp' => 'دیروز(?:\\\\s+ساعت)?',\n    'diff_tomorrow' => 'فردا',\n    'diff_tomorrow_regexp' => 'فردا(?:\\\\s+ساعت)?',\n    'formats' => [\n        'LT' => 'OH:Om',\n        'LTS' => 'OH:Om:Os',\n        'L' => 'OD/OM/OY',\n        'LL' => 'OD MMMM OY',\n        'LLL' => 'OD MMMM OY OH:Om',\n        'LLLL' => 'dddd, OD MMMM OY OH:Om',\n    ],\n    'calendar' => [\n        'sameDay' => '[امروز ساعت] LT',\n        'nextDay' => '[فردا ساعت] LT',\n        'nextWeek' => 'dddd [ساعت] LT',\n        'lastDay' => '[دیروز ساعت] LT',\n        'lastWeek' => 'dddd [پیش] [ساعت] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':timeم',\n    'meridiem' => ['قبل از ظهر', 'بعد از ظهر'],\n    'months' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'],\n    'months_short' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'],\n    'weekdays' => ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'],\n    'weekdays_short' => ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'],\n    'weekdays_min' => ['ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'list' => ['، ', ' و '],\n    'alt_numbers' => ['۰۰', '۰۱', '۰۲', '۰۳', '۰۴', '۰۵', '۰۶', '۰۷', '۰۸', '۰۹', '۱۰', '۱۱', '۱۲', '۱۳', '۱۴', '۱۵', '۱۶', '۱۷', '۱۸', '۱۹', '۲۰', '۲۱', '۲۲', '۲۳', '۲۴', '۲۵', '۲۶', '۲۷', '۲۸', '۲۹', '۳۰', '۳۱', '۳۲', '۳۳', '۳۴', '۳۵', '۳۶', '۳۷', '۳۸', '۳۹', '۴۰', '۴۱', '۴۲', '۴۳', '۴۴', '۴۵', '۴۶', '۴۷', '۴۸', '۴۹', '۵۰', '۵۱', '۵۲', '۵۳', '۵۴', '۵۵', '۵۶', '۵۷', '۵۸', '۵۹', '۶۰', '۶۱', '۶۲', '۶۳', '۶۴', '۶۵', '۶۶', '۶۷', '۶۸', '۶۹', '۷۰', '۷۱', '۷۲', '۷۳', '۷۴', '۷۵', '۷۶', '۷۷', '۷۸', '۷۹', '۸۰', '۸۱', '۸۲', '۸۳', '۸۴', '۸۵', '۸۶', '۸۷', '۸۸', '۸۹', '۹۰', '۹۱', '۹۲', '۹۳', '۹۴', '۹۵', '۹۶', '۹۷', '۹۸', '۹۹'],\n    'months_short_standalone' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'],\n    'weekend' => [5, 5],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fa_AF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fa.php', [\n    'meridiem' => ['ق', 'ب'],\n    'weekend' => [4, 5],\n    'formats' => [\n        'L' => 'OY/OM/OD',\n        'LL' => 'OD MMM OY',\n        'LLL' => 'OD MMMM OY،‏ H:mm',\n        'LLLL' => 'dddd OD MMMM OY،‏ H:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fa_IR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fa.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ff.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'months' => ['siilo', 'colte', 'mbooy', 'seeɗto', 'duujal', 'korse', 'morso', 'juko', 'siilto', 'yarkomaa', 'jolal', 'bowte'],\n    'months_short' => ['sii', 'col', 'mbo', 'see', 'duu', 'kor', 'mor', 'juk', 'slt', 'yar', 'jol', 'bow'],\n    'weekdays' => ['dewo', 'aaɓnde', 'mawbaare', 'njeslaare', 'naasaande', 'mawnde', 'hoore-biir'],\n    'weekdays_short' => ['dew', 'aaɓ', 'maw', 'nje', 'naa', 'mwd', 'hbi'],\n    'weekdays_min' => ['dew', 'aaɓ', 'maw', 'nje', 'naa', 'mwd', 'hbi'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['subaka', 'kikiiɗe'],\n\n    'year' => ':count baret', // less reliable\n    'y' => ':count baret', // less reliable\n    'a_year' => ':count baret', // less reliable\n\n    'month' => ':count lewru', // less reliable\n    'm' => ':count lewru', // less reliable\n    'a_month' => ':count lewru', // less reliable\n\n    'week' => ':count naange', // less reliable\n    'w' => ':count naange', // less reliable\n    'a_week' => ':count naange', // less reliable\n\n    'day' => ':count dian', // less reliable\n    'd' => ':count dian', // less reliable\n    'a_day' => ':count dian', // less reliable\n\n    'hour' => ':count montor', // less reliable\n    'h' => ':count montor', // less reliable\n    'a_hour' => ':count montor', // less reliable\n\n    'minute' => ':count tokossuoum', // less reliable\n    'min' => ':count tokossuoum', // less reliable\n    'a_minute' => ':count tokossuoum', // less reliable\n\n    'second' => ':count tenen', // less reliable\n    's' => ':count tenen', // less reliable\n    'a_second' => ':count tenen', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ff_CM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ff.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ff_GN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ff.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ff_MR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ff.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ff_SN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Pular-Fulfulde.org Ibrahima Sarr admin@pulaar-fulfulde.org\n */\nreturn require __DIR__.'/ff.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Janne Warén\n * - digitalfrost\n * - Tsutomu Kuroda\n * - Roope Salmi\n * - tjku\n * - Max Melentiev\n * - Sami Haahtinen\n * - Teemu Leisti\n * - Artem Ignatyev\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Robert Bjarnason\n * - Aaron Patterson\n * - Nicolás Hock Isaza\n * - Tom Hughes\n * - Sven Fuchs\n * - Petri Kivikangas\n * - Nizar Jouini\n * - Marko Seppae\n * - Tomi Mynttinen (Pikseli)\n * - Petteri (powergrip)\n */\nreturn [\n    'year' => ':count vuosi|:count vuotta',\n    'y' => ':count v',\n    'month' => ':count kuukausi|:count kuukautta',\n    'm' => ':count kk',\n    'week' => ':count viikko|:count viikkoa',\n    'w' => ':count vk',\n    'day' => ':count päivä|:count päivää',\n    'd' => ':count pv',\n    'hour' => ':count tunti|:count tuntia',\n    'h' => ':count t',\n    'minute' => ':count minuutti|:count minuuttia',\n    'min' => ':count min',\n    'second' => ':count sekunti|:count sekuntia',\n    'a_second' => 'muutama sekunti|:count sekuntia',\n    's' => ':count s',\n    'ago' => ':time sitten',\n    'from_now' => ':time päästä',\n    'year_from_now' => ':count vuoden',\n    'month_from_now' => ':count kuukauden',\n    'week_from_now' => ':count viikon',\n    'day_from_now' => ':count päivän',\n    'hour_from_now' => ':count tunnin',\n    'minute_from_now' => ':count minuutin',\n    'second_from_now' => ':count sekunnin',\n    'after' => ':time sen jälkeen',\n    'before' => ':time ennen',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' ja '],\n    'diff_now' => 'nyt',\n    'diff_yesterday' => 'eilen',\n    'diff_tomorrow' => 'huomenna',\n    'formats' => [\n        'LT' => 'HH.mm',\n        'LTS' => 'HH.mm:ss',\n        'L' => 'D.M.YYYY',\n        'LL' => 'dddd D. MMMM[ta] YYYY',\n        'll' => 'ddd D. MMM YYYY',\n        'LLL' => 'D.MM. HH.mm',\n        'LLLL' => 'D. MMMM[ta] YYYY HH.mm',\n        'llll' => 'D. MMM YY HH.mm',\n    ],\n    'weekdays' => ['sunnuntai', 'maanantai', 'tiistai', 'keskiviikko', 'torstai', 'perjantai', 'lauantai'],\n    'weekdays_short' => ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'],\n    'weekdays_min' => ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'],\n    'months' => ['tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu', 'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu', 'marraskuu', 'joulukuu'],\n    'months_short' => ['tammi', 'helmi', 'maalis', 'huhti', 'touko', 'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu'],\n    'meridiem' => ['aamupäivä', 'iltapäivä'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fi_FI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fi.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fil.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/fil_PH.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fil_PH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Rene Torres Rene Torres, Pablo Saratxaga rgtorre@rocketmail.com, pablo@mandrakesoft.com\n * - Jaycee Mariano (alohajaycee)\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'MM/DD/YY',\n    ],\n    'months' => ['Enero', 'Pebrero', 'Marso', 'Abril', 'Mayo', 'Hunyo', 'Hulyo', 'Agosto', 'Setyembre', 'Oktubre', 'Nobyembre', 'Disyembre'],\n    'months_short' => ['Ene', 'Peb', 'Mar', 'Abr', 'May', 'Hun', 'Hul', 'Ago', 'Set', 'Okt', 'Nob', 'Dis'],\n    'weekdays' => ['Linggo', 'Lunes', 'Martes', 'Miyerkoles', 'Huwebes', 'Biyernes', 'Sabado'],\n    'weekdays_short' => ['Lin', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab'],\n    'weekdays_min' => ['Lin', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['N.U.', 'N.H.'],\n\n    'before' => ':time bago',\n    'after' => ':time pagkatapos',\n\n    'year' => ':count taon',\n    'y' => ':count taon',\n    'a_year' => ':count taon',\n\n    'month' => ':count buwan',\n    'm' => ':count buwan',\n    'a_month' => ':count buwan',\n\n    'week' => ':count linggo',\n    'w' => ':count linggo',\n    'a_week' => ':count linggo',\n\n    'day' => ':count araw',\n    'd' => ':count araw',\n    'a_day' => ':count araw',\n\n    'hour' => ':count oras',\n    'h' => ':count oras',\n    'a_hour' => ':count oras',\n\n    'minute' => ':count minuto',\n    'min' => ':count minuto',\n    'a_minute' => ':count minuto',\n\n    'second' => ':count segundo',\n    's' => ':count segundo',\n    'a_second' => ':count segundo',\n\n    'ago' => ':time ang nakalipas',\n    'from_now' => 'sa :time',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kristian Sakarisson\n * - François B\n * - JD Isaacks\n * - Sverri Mohr Olsen\n */\nreturn [\n    'year' => 'eitt ár|:count ár',\n    'y' => ':count ár|:count ár',\n    'month' => 'ein mánaði|:count mánaðir',\n    'm' => ':count mánaður|:count mánaðir',\n    'week' => ':count vika|:count vikur',\n    'w' => ':count vika|:count vikur',\n    'day' => 'ein dagur|:count dagar',\n    'd' => ':count dag|:count dagar',\n    'hour' => 'ein tími|:count tímar',\n    'h' => ':count tími|:count tímar',\n    'minute' => 'ein minutt|:count minuttir',\n    'min' => ':count minutt|:count minuttir',\n    'second' => 'fá sekund|:count sekundir',\n    's' => ':count sekund|:count sekundir',\n    'ago' => ':time síðani',\n    'from_now' => 'um :time',\n    'after' => ':time aftaná',\n    'before' => ':time áðrenn',\n    'diff_today' => 'Í',\n    'diff_yesterday' => 'Í',\n    'diff_yesterday_regexp' => 'Í(?:\\\\s+gjár)?(?:\\\\s+kl.)?',\n    'diff_tomorrow' => 'Í',\n    'diff_tomorrow_regexp' => 'Í(?:\\\\s+morgin)?(?:\\\\s+kl.)?',\n    'diff_today_regexp' => 'Í(?:\\\\s+dag)?(?:\\\\s+kl.)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D. MMMM, YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Í dag kl.] LT',\n        'nextDay' => '[Í morgin kl.] LT',\n        'nextWeek' => 'dddd [kl.] LT',\n        'lastDay' => '[Í gjár kl.] LT',\n        'lastWeek' => '[síðstu] dddd [kl] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['januar', 'februar', 'mars', 'apríl', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],\n    'weekdays' => ['sunnudagur', 'mánadagur', 'týsdagur', 'mikudagur', 'hósdagur', 'fríggjadagur', 'leygardagur'],\n    'weekdays_short' => ['sun', 'mán', 'týs', 'mik', 'hós', 'frí', 'ley'],\n    'weekdays_min' => ['su', 'má', 'tý', 'mi', 'hó', 'fr', 'le'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' og '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fo_DK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fo.php', [\n    'formats' => [\n        'L' => 'DD.MM.yy',\n        'LL' => 'DD.MM.YYYY',\n        'LLL' => 'D. MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY, HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fo_FO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fo.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Dieter Sting\n * - François B\n * - Maxime VALY\n * - JD Isaacks\n * - Dieter Sting\n * - François B\n * - JD Isaacks\n * - Sebastian Thierer\n * - Fastfuel\n * - Pete Scopes (pdscopes)\n */\nreturn [\n    'year' => ':count an|:count ans',\n    'a_year' => 'un an|:count ans',\n    'y' => ':count an|:count ans',\n    'month' => ':count mois|:count mois',\n    'a_month' => 'un mois|:count mois',\n    'm' => ':count mois',\n    'week' => ':count semaine|:count semaines',\n    'a_week' => 'une semaine|:count semaines',\n    'w' => ':count sem.',\n    'day' => ':count jour|:count jours',\n    'a_day' => 'un jour|:count jours',\n    'd' => ':count j',\n    'hour' => ':count heure|:count heures',\n    'a_hour' => 'une heure|:count heures',\n    'h' => ':count h',\n    'minute' => ':count minute|:count minutes',\n    'a_minute' => 'une minute|:count minutes',\n    'min' => ':count min',\n    'second' => ':count seconde|:count secondes',\n    'a_second' => 'quelques secondes|:count secondes',\n    's' => ':count s',\n    'millisecond' => ':count milliseconde|:count millisecondes',\n    'a_millisecond' => 'une milliseconde|:count millisecondes',\n    'ms' => ':countms',\n    'microsecond' => ':count microseconde|:count microsecondes',\n    'a_microsecond' => 'une microseconde|:count microsecondes',\n    'µs' => ':countµs',\n    'ago' => 'il y a :time',\n    'from_now' => 'dans :time',\n    'after' => ':time après',\n    'before' => ':time avant',\n    'diff_now' => \"à l'instant\",\n    'diff_today' => \"aujourd'hui\",\n    'diff_today_regexp' => \"aujourd'hui(?:\\s+à)?\",\n    'diff_yesterday' => 'hier',\n    'diff_yesterday_regexp' => 'hier(?:\\s+à)?',\n    'diff_tomorrow' => 'demain',\n    'diff_tomorrow_regexp' => 'demain(?:\\s+à)?',\n    'diff_before_yesterday' => 'avant-hier',\n    'diff_after_tomorrow' => 'après-demain',\n    'period_recurrences' => ':count fois',\n    'period_interval' => 'tous les :interval',\n    'period_start_date' => 'de :date',\n    'period_end_date' => 'à :date',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Aujourd’hui à] LT',\n        'nextDay' => '[Demain à] LT',\n        'nextWeek' => 'dddd [à] LT',\n        'lastDay' => '[Hier à] LT',\n        'lastWeek' => 'dddd [dernier à] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],\n    'months_short' => ['janv.', 'févr.', 'mars', 'avr.', 'mai', 'juin', 'juil.', 'août', 'sept.', 'oct.', 'nov.', 'déc.'],\n    'weekdays' => ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi'],\n    'weekdays_short' => ['dim.', 'lun.', 'mar.', 'mer.', 'jeu.', 'ven.', 'sam.'],\n    'weekdays_min' => ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            // In French, only the first has to be ordinal, other number remains cardinal\n            // @link https://fr.wikihow.com/%C3%A9crire-la-date-en-fran%C3%A7ais\n            case 'D':\n                return $number.($number === 1 ? 'er' : '');\n\n            default:\n            case 'M':\n            case 'Q':\n            case 'DDD':\n            case 'd':\n                return $number.($number === 1 ? 'er' : 'e');\n\n            // Words with feminine grammatical gender: semaine\n            case 'w':\n            case 'W':\n                return $number.($number === 1 ? 're' : 'e');\n        }\n    },\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' et '],\n    'ordinal_words' => [\n        'of' => 'de',\n        'first' => 'premier',\n        'second' => 'deuxième',\n        'third' => 'troisième',\n        'fourth' => 'quatrième',\n        'fifth' => 'cinquième',\n        'last' => 'dernier',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_BE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'months_short' => ['jan', 'fév', 'mar', 'avr', 'mai', 'jun', 'jui', 'aoû', 'sep', 'oct', 'nov', 'déc'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_BF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_BI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_BJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_BL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Dieter Sting\n * - François B\n * - Maxime VALY\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Dieter Sting\n * - François B\n * - Gaspard Bucher\n * - Maxime VALY\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_CM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'meridiem' => ['mat.', 'soir'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_DJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'first_day_of_week' => 6,\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_DZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'first_day_of_week' => 6,\n    'weekend' => [5, 6],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_FR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_GA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_GF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_GN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_GP.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_GQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_HT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_KM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_LU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months_short' => ['jan', 'fév', 'mar', 'avr', 'mai', 'jun', 'jui', 'aoû', 'sep', 'oct', 'nov', 'déc'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'first_day_of_week' => 6,\n    'weekend' => [5, 6],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_ML.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_MU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_NC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_NE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_PF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_PM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_RE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_RW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_SC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_SN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_SY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'first_day_of_week' => 6,\n    'weekend' => [5, 6],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_TD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_TG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_TN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'weekend' => [5, 6],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_VU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fr.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_WF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fr_YT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/fr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fur.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/fur_IT.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fur_IT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD. MM. YY',\n        'LL' => 'DD di MMMM dal YYYY',\n        'LLL' => 'DD di MMM HH:mm',\n        'LLLL' => 'DD di MMMM dal YYYY HH:mm',\n    ],\n    'months' => ['zenâr', 'fevrâr', 'març', 'avrîl', 'mai', 'jugn', 'lui', 'avost', 'setembar', 'otubar', 'novembar', 'dicembar'],\n    'months_short' => ['zen', 'fev', 'mar', 'avr', 'mai', 'jug', 'lui', 'avo', 'set', 'otu', 'nov', 'dic'],\n    'weekdays' => ['domenie', 'lunis', 'martars', 'miercus', 'joibe', 'vinars', 'sabide'],\n    'weekdays_short' => ['dom', 'lun', 'mar', 'mie', 'joi', 'vin', 'sab'],\n    'weekdays_min' => ['dom', 'lun', 'mar', 'mie', 'joi', 'vin', 'sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'year' => ':count an',\n    'month' => ':count mês',\n    'week' => ':count setemane',\n    'day' => ':count zornade',\n    'hour' => ':count ore',\n    'minute' => ':count minût',\n    'second' => ':count secont',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fy.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Tim Fish\n * - JD Isaacks\n */\nreturn [\n    'year' => ':count jier|:count jierren',\n    'a_year' => 'ien jier|:count jierren',\n    'y' => ':count j',\n    'month' => ':count moanne|:count moannen',\n    'a_month' => 'ien moanne|:count moannen',\n    'm' => ':count moa.',\n    'week' => ':count wike|:count wiken',\n    'a_week' => 'in wike|:count wiken',\n    'a' => ':count w.',\n    'day' => ':count dei|:count dagen',\n    'a_day' => 'ien dei|:count dagen',\n    'd' => ':count d.',\n    'hour' => ':count oere|:count oeren',\n    'a_hour' => 'ien oere|:count oeren',\n    'h' => ':count o.',\n    'minute' => ':count minút|:count minuten',\n    'a_minute' => 'ien minút|:count minuten',\n    'min' => ':count min.',\n    'second' => ':count sekonde|:count sekonden',\n    'a_second' => 'in pear sekonden|:count sekonden',\n    's' => ':count s.',\n    'ago' => ':time lyn',\n    'from_now' => 'oer :time',\n    'diff_yesterday' => 'juster',\n    'diff_yesterday_regexp' => 'juster(?:\\\\s+om)?',\n    'diff_today' => 'hjoed',\n    'diff_today_regexp' => 'hjoed(?:\\\\s+om)?',\n    'diff_tomorrow' => 'moarn',\n    'diff_tomorrow_regexp' => 'moarn(?:\\\\s+om)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD-MM-YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[hjoed om] LT',\n        'nextDay' => '[moarn om] LT',\n        'nextWeek' => 'dddd [om] LT',\n        'lastDay' => '[juster om] LT',\n        'lastWeek' => '[ôfrûne] dddd [om] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        return $number.(($number === 1 || $number === 8 || $number >= 20) ? 'ste' : 'de');\n    },\n    'months' => ['jannewaris', 'febrewaris', 'maart', 'april', 'maaie', 'juny', 'july', 'augustus', 'septimber', 'oktober', 'novimber', 'desimber'],\n    'months_short' => ['jan', 'feb', 'mrt', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],\n    'mmm_suffix' => '.',\n    'weekdays' => ['snein', 'moandei', 'tiisdei', 'woansdei', 'tongersdei', 'freed', 'sneon'],\n    'weekdays_short' => ['si.', 'mo.', 'ti.', 'wo.', 'to.', 'fr.', 'so.'],\n    'weekdays_min' => ['Si', 'Mo', 'Ti', 'Wo', 'To', 'Fr', 'So'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' en '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fy_DE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - information from Kenneth Christiansen Kenneth Christiansen, Pablo Saratxaga kenneth@gnu.org, pablo@mandriva.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Jaunuwoa', 'Februwoa', 'Moaz', 'Aprell', 'Mai', 'Juni', 'Juli', 'August', 'Septamba', 'Oktoba', 'Nowamba', 'Dezamba'],\n    'months_short' => ['Jan', 'Feb', 'Moz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Now', 'Dez'],\n    'weekdays' => ['Sinndag', 'Mondag', 'Dingsdag', 'Meddwäakj', 'Donnadag', 'Friedag', 'Sinnowend'],\n    'weekdays_short' => ['Sdg', 'Mdg', 'Dsg', 'Mwk', 'Ddg', 'Fdg', 'Swd'],\n    'weekdays_min' => ['Sdg', 'Mdg', 'Dsg', 'Mwk', 'Ddg', 'Fdg', 'Swd'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/fy_NL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/fy.php', [\n    'formats' => [\n        'L' => 'DD-MM-YY',\n    ],\n    'months' => ['Jannewaris', 'Febrewaris', 'Maart', 'April', 'Maaie', 'Juny', 'July', 'Augustus', 'Septimber', 'Oktober', 'Novimber', 'Desimber'],\n    'months_short' => ['Jan', 'Feb', 'Mrt', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Snein', 'Moandei', 'Tiisdei', 'Woansdei', 'Tongersdei', 'Freed', 'Sneon'],\n    'weekdays_short' => ['Sn', 'Mo', 'Ti', 'Wo', 'To', 'Fr', 'Sn'],\n    'weekdays_min' => ['Sn', 'Mo', 'Ti', 'Wo', 'To', 'Fr', 'Sn'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ga.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Thanks to André Silva : https://github.com/askpt\n */\n\nreturn [\n    'year' => ':count bliain',\n    'a_year' => '{1}bliain|:count bliain',\n    'y' => ':countb',\n    'month' => ':count mí',\n    'a_month' => '{1}mí|:count mí',\n    'm' => ':countm',\n    'week' => ':count sheachtain',\n    'a_week' => '{1}sheachtain|:count sheachtain',\n    'w' => ':countsh',\n    'day' => ':count lá',\n    'a_day' => '{1}lá|:count lá',\n    'd' => ':countl',\n    'hour' => ':count uair an chloig',\n    'a_hour' => '{1}uair an chloig|:count uair an chloig',\n    'h' => ':countu',\n    'minute' => ':count nóiméad',\n    'a_minute' => '{1}nóiméad|:count nóiméad',\n    'min' => ':countn',\n    'second' => ':count soicind',\n    'a_second' => '{1}cúpla soicind|:count soicind',\n    's' => ':countso',\n    'ago' => ':time ó shin',\n    'from_now' => 'i :time',\n    'after' => ':time tar éis',\n    'before' => ':time roimh',\n    'diff_now' => 'anois',\n    'diff_today' => 'Inniu',\n    'diff_today_regexp' => 'Inniu(?:\\\\s+ag)?',\n    'diff_yesterday' => 'inné',\n    'diff_yesterday_regexp' => 'Inné(?:\\\\s+aig)?',\n    'diff_tomorrow' => 'amárach',\n    'diff_tomorrow_regexp' => 'Amárach(?:\\\\s+ag)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Inniu ag] LT',\n        'nextDay' => '[Amárach ag] LT',\n        'nextWeek' => 'dddd [ag] LT',\n        'lastDay' => '[Inné aig] LT',\n        'lastWeek' => 'dddd [seo caite] [ag] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'],\n    'months_short' => ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'],\n    'weekdays' => ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'],\n    'weekdays_short' => ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'],\n    'weekdays_min' => ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'],\n    'ordinal' => function ($number) {\n        return $number.($number === 1 ? 'd' : ($number % 10 === 2 ? 'na' : 'mh'));\n    },\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' agus '],\n    'meridiem' => ['r.n.', 'i.n.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ga_IE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ga.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gd.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Jon Ashdown\n */\nreturn [\n    'year' => ':count bliadhna',\n    'a_year' => '{1}bliadhna|:count bliadhna',\n    'y' => ':count b.',\n    'month' => ':count mìosan',\n    'a_month' => '{1}mìos|:count mìosan',\n    'm' => ':count ms.',\n    'week' => ':count seachdainean',\n    'a_week' => '{1}seachdain|:count seachdainean',\n    'w' => ':count s.',\n    'day' => ':count latha',\n    'a_day' => '{1}latha|:count latha',\n    'd' => ':count l.',\n    'hour' => ':count uairean',\n    'a_hour' => '{1}uair|:count uairean',\n    'h' => ':count u.',\n    'minute' => ':count mionaidean',\n    'a_minute' => '{1}mionaid|:count mionaidean',\n    'min' => ':count md.',\n    'second' => ':count diogan',\n    'a_second' => '{1}beagan diogan|:count diogan',\n    's' => ':count d.',\n    'ago' => 'bho chionn :time',\n    'from_now' => 'ann an :time',\n    'diff_yesterday' => 'An-dè',\n    'diff_yesterday_regexp' => 'An-dè(?:\\\\s+aig)?',\n    'diff_today' => 'An-diugh',\n    'diff_today_regexp' => 'An-diugh(?:\\\\s+aig)?',\n    'diff_tomorrow' => 'A-màireach',\n    'diff_tomorrow_regexp' => 'A-màireach(?:\\\\s+aig)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[An-diugh aig] LT',\n        'nextDay' => '[A-màireach aig] LT',\n        'nextWeek' => 'dddd [aig] LT',\n        'lastDay' => '[An-dè aig] LT',\n        'lastWeek' => 'dddd [seo chaidh] [aig] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        return $number.($number === 1 ? 'd' : ($number % 10 === 2 ? 'na' : 'mh'));\n    },\n    'months' => ['Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'],\n    'months_short' => ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'],\n    'weekdays' => ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'],\n    'weekdays_short' => ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n    'weekdays_min' => ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' agus '],\n    'meridiem' => ['m', 'f'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gd_GB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/gd.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gez.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/gez_ER.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gez_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጠሐረ', 'ከተተ', 'መገበ', 'አኀዘ', 'ግንባት', 'ሠንየ', 'ሐመለ', 'ነሐሰ', 'ከረመ', 'ጠቀመ', 'ኀደረ', 'ኀሠሠ'],\n    'months_short' => ['ጠሐረ', 'ከተተ', 'መገበ', 'አኀዘ', 'ግንባ', 'ሠንየ', 'ሐመለ', 'ነሐሰ', 'ከረመ', 'ጠቀመ', 'ኀደረ', 'ኀሠሠ'],\n    'weekdays' => ['እኁድ', 'ሰኑይ', 'ሠሉስ', 'ራብዕ', 'ሐሙስ', 'ዓርበ', 'ቀዳሚት'],\n    'weekdays_short' => ['እኁድ', 'ሰኑይ', 'ሠሉስ', 'ራብዕ', 'ሐሙስ', 'ዓርበ', 'ቀዳሚ'],\n    'weekdays_min' => ['እኁድ', 'ሰኑይ', 'ሠሉስ', 'ራብዕ', 'ሐሙስ', 'ዓርበ', 'ቀዳሚ'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ጽባሕ', 'ምሴት'],\n\n    'month' => ':count ወርሕ', // less reliable\n    'm' => ':count ወርሕ', // less reliable\n    'a_month' => ':count ወርሕ', // less reliable\n\n    'week' => ':count ሰብዑ', // less reliable\n    'w' => ':count ሰብዑ', // less reliable\n    'a_week' => ':count ሰብዑ', // less reliable\n\n    'hour' => ':count አንትሙ', // less reliable\n    'h' => ':count አንትሙ', // less reliable\n    'a_hour' => ':count አንትሙ', // less reliable\n\n    'minute' => ':count ንኡስ', // less reliable\n    'min' => ':count ንኡስ', // less reliable\n    'a_minute' => ':count ንኡስ', // less reliable\n\n    'year' => ':count ዓመት',\n    'y' => ':count ዓመት',\n    'a_year' => ':count ዓመት',\n\n    'day' => ':count ዕለት',\n    'd' => ':count ዕለት',\n    'a_day' => ':count ዕለት',\n\n    'second' => ':count ካልእ',\n    's' => ':count ካልእ',\n    'a_second' => ':count ካልእ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gez_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጃንዩወሪ', 'ፌብሩወሪ', 'ማርች', 'ኤፕረል', 'ሜይ', 'ጁን', 'ጁላይ', 'ኦገስት', 'ሴፕቴምበር', 'ኦክተውበር', 'ኖቬምበር', 'ዲሴምበር'],\n    'months_short' => ['ጃንዩ', 'ፌብሩ', 'ማርች', 'ኤፕረ', 'ሜይ ', 'ጁን ', 'ጁላይ', 'ኦገስ', 'ሴፕቴ', 'ኦክተ', 'ኖቬም', 'ዲሴም'],\n    'weekdays' => ['እኁድ', 'ሰኑይ', 'ሠሉስ', 'ራብዕ', 'ሐሙስ', 'ዓርበ', 'ቀዳሚት'],\n    'weekdays_short' => ['እኁድ', 'ሰኑይ', 'ሠሉስ', 'ራብዕ', 'ሐሙስ', 'ዓርበ', 'ቀዳሚ'],\n    'weekdays_min' => ['እኁድ', 'ሰኑይ', 'ሠሉስ', 'ራብዕ', 'ሐሙስ', 'ዓርበ', 'ቀዳሚ'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ጽባሕ', 'ምሴት'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Fidel Pita\n * - JD Isaacks\n * - Diego Vilariño\n * - Sebastian Thierer\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count ano|:count anos',\n    'a_year' => 'un ano|:count anos',\n    'y' => ':count a.',\n    'month' => ':count mes|:count meses',\n    'a_month' => 'un mes|:count meses',\n    'm' => ':count mes.',\n    'week' => ':count semana|:count semanas',\n    'a_week' => 'unha semana|:count semanas',\n    'w' => ':count sem.',\n    'day' => ':count día|:count días',\n    'a_day' => 'un día|:count días',\n    'd' => ':count d.',\n    'hour' => ':count hora|:count horas',\n    'a_hour' => 'unha hora|:count horas',\n    'h' => ':count h.',\n    'minute' => ':count minuto|:count minutos',\n    'a_minute' => 'un minuto|:count minutos',\n    'min' => ':count min.',\n    'second' => ':count segundo|:count segundos',\n    'a_second' => 'uns segundos|:count segundos',\n    's' => ':count seg.',\n    'ago' => 'hai :time',\n    'from_now' => function ($time) {\n        if (str_starts_with($time, 'un')) {\n            return \"n$time\";\n        }\n\n        return \"en $time\";\n    },\n    'diff_now' => 'agora',\n    'diff_today' => 'hoxe',\n    'diff_today_regexp' => 'hoxe(?:\\\\s+ás)?',\n    'diff_yesterday' => 'onte',\n    'diff_yesterday_regexp' => 'onte(?:\\\\s+á)?',\n    'diff_tomorrow' => 'mañá',\n    'diff_tomorrow_regexp' => 'mañá(?:\\\\s+ás)?',\n    'after' => ':time despois',\n    'before' => ':time antes',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D [de] MMMM [de] YYYY',\n        'LLL' => 'D [de] MMMM [de] YYYY H:mm',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => function (CarbonInterface $current) {\n            return '[hoxe '.($current->hour !== 1 ? 'ás' : 'á').'] LT';\n        },\n        'nextDay' => function (CarbonInterface $current) {\n            return '[mañá '.($current->hour !== 1 ? 'ás' : 'á').'] LT';\n        },\n        'nextWeek' => function (CarbonInterface $current) {\n            return 'dddd ['.($current->hour !== 1 ? 'ás' : 'á').'] LT';\n        },\n        'lastDay' => function (CarbonInterface $current) {\n            return '[onte '.($current->hour !== 1 ? 'á' : 'a').'] LT';\n        },\n        'lastWeek' => function (CarbonInterface $current) {\n            return '[o] dddd [pasado '.($current->hour !== 1 ? 'ás' : 'á').'] LT';\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberº',\n    'months' => ['xaneiro', 'febreiro', 'marzo', 'abril', 'maio', 'xuño', 'xullo', 'agosto', 'setembro', 'outubro', 'novembro', 'decembro'],\n    'months_short' => ['xan.', 'feb.', 'mar.', 'abr.', 'mai.', 'xuñ.', 'xul.', 'ago.', 'set.', 'out.', 'nov.', 'dec.'],\n    'weekdays' => ['domingo', 'luns', 'martes', 'mércores', 'xoves', 'venres', 'sábado'],\n    'weekdays_short' => ['dom.', 'lun.', 'mar.', 'mér.', 'xov.', 'ven.', 'sáb.'],\n    'weekdays_min' => ['do', 'lu', 'ma', 'mé', 'xo', 've', 'sá'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' e '],\n    'meridiem' => ['a.m.', 'p.m.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gl_ES.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/gl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gom.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/gom_Latn.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gom_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn [\n    'year' => ':count voros|:count vorsam',\n    'y' => ':countv',\n    'month' => ':count mhoino|:count mhoine',\n    'm' => ':countmh',\n    'week' => ':count satolleacho|:count satolleache',\n    'w' => ':countsa|:countsa',\n    'day' => ':count dis',\n    'd' => ':countd',\n    'hour' => ':count hor|:count horam',\n    'h' => ':counth',\n    'minute' => ':count minute|:count mintam',\n    'min' => ':countm',\n    'second' => ':count second',\n    's' => ':counts',\n\n    'diff_today' => 'Aiz',\n    'diff_yesterday' => 'Kal',\n    'diff_tomorrow' => 'Faleam',\n    'formats' => [\n        'LT' => 'A h:mm [vazta]',\n        'LTS' => 'A h:mm:ss [vazta]',\n        'L' => 'DD-MM-YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY A h:mm [vazta]',\n        'LLLL' => 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n        'llll' => 'ddd, D MMM YYYY, A h:mm [vazta]',\n    ],\n\n    'calendar' => [\n        'sameDay' => '[Aiz] LT',\n        'nextDay' => '[Faleam] LT',\n        'nextWeek' => '[Ieta to] dddd[,] LT',\n        'lastDay' => '[Kal] LT',\n        'lastWeek' => '[Fatlo] dddd[,] LT',\n        'sameElse' => 'L',\n    ],\n\n    'months' => ['Janer', 'Febrer', 'Mars', 'Abril', 'Mai', 'Jun', 'Julai', 'Agost', 'Setembr', 'Otubr', 'Novembr', 'Dezembr'],\n    'months_short' => ['Jan.', 'Feb.', 'Mars', 'Abr.', 'Mai', 'Jun', 'Jul.', 'Ago.', 'Set.', 'Otu.', 'Nov.', 'Dez.'],\n    'weekdays' => ['Aitar', 'Somar', 'Mongllar', 'Budvar', 'Brestar', 'Sukrar', 'Son\\'var'],\n    'weekdays_short' => ['Ait.', 'Som.', 'Mon.', 'Bud.', 'Bre.', 'Suk.', 'Son.'],\n    'weekdays_min' => ['Ai', 'Sm', 'Mo', 'Bu', 'Br', 'Su', 'Sn'],\n\n    'ordinal' => function ($number, $period) {\n        return $number.($period === 'D' ? 'er' : '');\n    },\n\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'rati';\n        }\n        if ($hour < 12) {\n            return 'sokalli';\n        }\n        if ($hour < 16) {\n            return 'donparam';\n        }\n        if ($hour < 20) {\n            return 'sanje';\n        }\n\n        return 'rati';\n    },\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' ani '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gsw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Christopher Dell\n * - Akira Matsuda\n * - Enrique Vidal\n * - Simone Carletti\n * - Henning Kiel\n * - Aaron Patterson\n * - Florian Hanke\n */\nreturn [\n    'year' => ':count Johr',\n    'month' => ':count Monet',\n    'week' => ':count Woche',\n    'day' => ':count Tag',\n    'hour' => ':count Schtund',\n    'minute' => ':count Minute',\n    'second' => ':count Sekunde',\n    'weekdays' => ['Sunntig', 'Mäntig', 'Ziischtig', 'Mittwuch', 'Dunschtig', 'Friitig', 'Samschtig'],\n    'weekdays_short' => ['Su', 'Mä', 'Zi', 'Mi', 'Du', 'Fr', 'Sa'],\n    'weekdays_min' => ['Su', 'Mä', 'Zi', 'Mi', 'Du', 'Fr', 'Sa'],\n    'months' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'Auguscht', 'September', 'Oktober', 'November', 'Dezember'],\n    'months_short' => ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n    'meridiem' => ['am Vormittag', 'am Namittag'],\n    'ordinal' => ':number.',\n    'list' => [', ', ' und '],\n    'diff_now' => 'now',\n    'diff_yesterday' => 'geschter',\n    'diff_tomorrow' => 'moorn',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'Do MMMM YYYY',\n        'LLL' => 'Do MMMM, HH:mm [Uhr]',\n        'LLLL' => 'dddd, Do MMMM YYYY, HH:mm [Uhr]',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gsw_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/gsw.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gsw_FR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/gsw.php', [\n    'meridiem' => ['vorm.', 'nam.'],\n    'months' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'Auguscht', 'Septämber', 'Oktoober', 'Novämber', 'Dezämber'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LLL' => 'Do MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, Do MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gsw_LI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/gsw.php', [\n    'meridiem' => ['vorm.', 'nam.'],\n    'months' => ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'Auguscht', 'Septämber', 'Oktoober', 'Novämber', 'Dezämber'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LLL' => 'Do MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, Do MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Kaushik Thanki\n * - Josh Soref\n */\nreturn [\n    'year' => 'એક વર્ષ|:count વર્ષ',\n    'y' => ':countવર્ષ|:countવર્ષો',\n    'month' => 'એક મહિનો|:count મહિના',\n    'm' => ':countમહિનો|:countમહિના',\n    'week' => ':count અઠવાડિયું|:count અઠવાડિયા',\n    'w' => ':countઅઠ.|:countઅઠ.',\n    'day' => 'એક દિવસ|:count દિવસ',\n    'd' => ':countદિ.|:countદિ.',\n    'hour' => 'એક કલાક|:count કલાક',\n    'h' => ':countક.|:countક.',\n    'minute' => 'એક મિનિટ|:count મિનિટ',\n    'min' => ':countમિ.|:countમિ.',\n    'second' => 'અમુક પળો|:count સેકંડ',\n    's' => ':countસે.|:countસે.',\n    'ago' => ':time પેહલા',\n    'from_now' => ':time મા',\n    'after' => ':time પછી',\n    'before' => ':time પહેલા',\n    'diff_now' => 'હમણાં',\n    'diff_today' => 'આજ',\n    'diff_yesterday' => 'ગઇકાલે',\n    'diff_tomorrow' => 'કાલે',\n    'formats' => [\n        'LT' => 'A h:mm વાગ્યે',\n        'LTS' => 'A h:mm:ss વાગ્યે',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm વાગ્યે',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n    ],\n    'calendar' => [\n        'sameDay' => '[આજ] LT',\n        'nextDay' => '[કાલે] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[ગઇકાલે] LT',\n        'lastWeek' => '[પાછલા] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'રાત';\n        }\n        if ($hour < 10) {\n            return 'સવાર';\n        }\n        if ($hour < 17) {\n            return 'બપોર';\n        }\n        if ($hour < 20) {\n            return 'સાંજ';\n        }\n\n        return 'રાત';\n    },\n    'months' => ['જાન્યુઆરી', 'ફેબ્રુઆરી', 'માર્ચ', 'એપ્રિલ', 'મે', 'જૂન', 'જુલાઈ', 'ઑગસ્ટ', 'સપ્ટેમ્બર', 'ઑક્ટ્બર', 'નવેમ્બર', 'ડિસેમ્બર'],\n    'months_short' => ['જાન્યુ.', 'ફેબ્રુ.', 'માર્ચ', 'એપ્રિ.', 'મે', 'જૂન', 'જુલા.', 'ઑગ.', 'સપ્ટે.', 'ઑક્ટ્.', 'નવે.', 'ડિસે.'],\n    'weekdays' => ['રવિવાર', 'સોમવાર', 'મંગળવાર', 'બુધ્વાર', 'ગુરુવાર', 'શુક્રવાર', 'શનિવાર'],\n    'weekdays_short' => ['રવિ', 'સોમ', 'મંગળ', 'બુધ્', 'ગુરુ', 'શુક્ર', 'શનિ'],\n    'weekdays_min' => ['ર', 'સો', 'મં', 'બુ', 'ગુ', 'શુ', 'શ'],\n    'list' => [', ', ' અને '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gu_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/gu.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/guz.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Ma', 'Mo'],\n    'weekdays' => ['Chumapiri', 'Chumatato', 'Chumaine', 'Chumatano', 'Aramisi', 'Ichuma', 'Esabato'],\n    'weekdays_short' => ['Cpr', 'Ctt', 'Cmn', 'Cmt', 'Ars', 'Icm', 'Est'],\n    'weekdays_min' => ['Cpr', 'Ctt', 'Cmn', 'Cmt', 'Ars', 'Icm', 'Est'],\n    'months' => ['Chanuari', 'Feburari', 'Machi', 'Apiriri', 'Mei', 'Juni', 'Chulai', 'Agosti', 'Septemba', 'Okitoba', 'Nobemba', 'Disemba'],\n    'months_short' => ['Can', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Cul', 'Agt', 'Sep', 'Okt', 'Nob', 'Dis'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'month' => ':count omotunyi', // less reliable\n    'm' => ':count omotunyi', // less reliable\n    'a_month' => ':count omotunyi', // less reliable\n\n    'week' => ':count isano naibere', // less reliable\n    'w' => ':count isano naibere', // less reliable\n    'a_week' => ':count isano naibere', // less reliable\n\n    'second' => ':count ibere', // less reliable\n    's' => ':count ibere', // less reliable\n    'a_second' => ':count ibere', // less reliable\n\n    'year' => ':count omwaka',\n    'y' => ':count omwaka',\n    'a_year' => ':count omwaka',\n\n    'day' => ':count rituko',\n    'd' => ':count rituko',\n    'a_day' => ':count rituko',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gv.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/gv_GB.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/gv_GB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Alastair McKinstry    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Jerrey-geuree', 'Toshiaght-arree', 'Mayrnt', 'Averil', 'Boaldyn', 'Mean-souree', 'Jerrey-souree', 'Luanistyn', 'Mean-fouyir', 'Jerrey-fouyir', 'Mee Houney', 'Mee ny Nollick'],\n    'months_short' => ['J-guer', 'T-arree', 'Mayrnt', 'Avrril', 'Boaldyn', 'M-souree', 'J-souree', 'Luanistyn', 'M-fouyir', 'J-fouyir', 'M.Houney', 'M.Nollick'],\n    'weekdays' => ['Jedoonee', 'Jelhein', 'Jemayrt', 'Jercean', 'Jerdein', 'Jeheiney', 'Jesarn'],\n    'weekdays_short' => ['Jed', 'Jel', 'Jem', 'Jerc', 'Jerd', 'Jeh', 'Jes'],\n    'weekdays_min' => ['Jed', 'Jel', 'Jem', 'Jerc', 'Jerd', 'Jeh', 'Jes'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count blein',\n    'y' => ':count blein',\n    'a_year' => ':count blein',\n\n    'month' => ':count mee',\n    'm' => ':count mee',\n    'a_month' => ':count mee',\n\n    'week' => ':count shiaghtin',\n    'w' => ':count shiaghtin',\n    'a_week' => ':count shiaghtin',\n\n    'day' => ':count laa',\n    'd' => ':count laa',\n    'a_day' => ':count laa',\n\n    'hour' => ':count oor',\n    'h' => ':count oor',\n    'a_hour' => ':count oor',\n\n    'minute' => ':count feer veg',\n    'min' => ':count feer veg',\n    'a_minute' => ':count feer veg',\n\n    'second' => ':count derrey',\n    's' => ':count derrey',\n    'a_second' => ':count derrey',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ha.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - pablo@mandriva.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM, YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM, YYYY HH:mm',\n    ],\n    'months' => ['Janairu', 'Faburairu', 'Maris', 'Afirilu', 'Mayu', 'Yuni', 'Yuli', 'Agusta', 'Satumba', 'Oktoba', 'Nuwamba', 'Disamba'],\n    'months_short' => ['Jan', 'Fab', 'Mar', 'Afi', 'May', 'Yun', 'Yul', 'Agu', 'Sat', 'Okt', 'Nuw', 'Dis'],\n    'weekdays' => ['Lahadi', 'Litini', 'Talata', 'Laraba', 'Alhamis', 'Jumaʼa', 'Asabar'],\n    'weekdays_short' => ['Lah', 'Lit', 'Tal', 'Lar', 'Alh', 'Jum', 'Asa'],\n    'weekdays_min' => ['Lh', 'Li', 'Ta', 'Lr', 'Al', 'Ju', 'As'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => 'shekara :count',\n    'y' => 'shekara :count',\n    'a_year' => 'shekara :count',\n\n    'month' => ':count wátàa',\n    'm' => ':count wátàa',\n    'a_month' => ':count wátàa',\n\n    'week' => ':count mako',\n    'w' => ':count mako',\n    'a_week' => ':count mako',\n\n    'day' => ':count rana',\n    'd' => ':count rana',\n    'a_day' => ':count rana',\n\n    'hour' => ':count áwàa',\n    'h' => ':count áwàa',\n    'a_hour' => ':count áwàa',\n\n    'minute' => 'minti :count',\n    'min' => 'minti :count',\n    'a_minute' => 'minti :count',\n\n    'second' => ':count ná bíyú',\n    's' => ':count ná bíyú',\n    'a_second' => ':count ná bíyú',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ha_GH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ha.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ha_NE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ha.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ha_NG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ha.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hak.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/hak_TW.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hak_TW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY年MM月DD日',\n    ],\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => [' 1月', ' 2月', ' 3月', ' 4月', ' 5月', ' 6月', ' 7月', ' 8月', ' 9月', '10月', '11月', '12月'],\n    'weekdays' => ['禮拜日', '禮拜一', '禮拜二', '禮拜三', '禮拜四', '禮拜五', '禮拜六'],\n    'weekdays_short' => ['日', '一', '二', '三', '四', '五', '六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['上晝', '下晝'],\n\n    'year' => ':count ngien11',\n    'y' => ':count ngien11',\n    'a_year' => ':count ngien11',\n\n    'month' => ':count ngie̍t',\n    'm' => ':count ngie̍t',\n    'a_month' => ':count ngie̍t',\n\n    'week' => ':count lî-pai',\n    'w' => ':count lî-pai',\n    'a_week' => ':count lî-pai',\n\n    'day' => ':count ngit',\n    'd' => ':count ngit',\n    'a_day' => ':count ngit',\n\n    'hour' => ':count sṳ̀',\n    'h' => ':count sṳ̀',\n    'a_hour' => ':count sṳ̀',\n\n    'minute' => ':count fûn',\n    'min' => ':count fûn',\n    'a_minute' => ':count fûn',\n\n    'second' => ':count miéu',\n    's' => ':count miéu',\n    'a_second' => ':count miéu',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/haw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'months' => ['Ianuali', 'Pepeluali', 'Malaki', 'ʻApelila', 'Mei', 'Iune', 'Iulai', 'ʻAukake', 'Kepakemapa', 'ʻOkakopa', 'Nowemapa', 'Kekemapa'],\n    'months_short' => ['Ian.', 'Pep.', 'Mal.', 'ʻAp.', 'Mei', 'Iun.', 'Iul.', 'ʻAu.', 'Kep.', 'ʻOk.', 'Now.', 'Kek.'],\n    'weekdays' => ['Lāpule', 'Poʻakahi', 'Poʻalua', 'Poʻakolu', 'Poʻahā', 'Poʻalima', 'Poʻaono'],\n    'weekdays_short' => ['LP', 'P1', 'P2', 'P3', 'P4', 'P5', 'P6'],\n    'weekdays_min' => ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm a',\n    ],\n\n    'year' => ':count makahiki',\n    'y' => ':count makahiki',\n    'a_year' => ':count makahiki',\n\n    'month' => ':count mahina',\n    'm' => ':count mahina',\n    'a_month' => ':count mahina',\n\n    'week' => ':count pule',\n    'w' => ':count pule',\n    'a_week' => ':count pule',\n\n    'day' => ':count lā',\n    'd' => ':count lā',\n    'a_day' => ':count lā',\n\n    'hour' => ':count hola',\n    'h' => ':count hola',\n    'a_hour' => ':count hola',\n\n    'minute' => ':count minuke',\n    'min' => ':count minuke',\n    'a_minute' => ':count minuke',\n\n    'second' => ':count lua',\n    's' => ':count lua',\n    'a_second' => ':count lua',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/he.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Daniel Cohen Gindi\n * - JD Isaacks\n * - Itai Nathaniel\n * - GabMic\n * - Yaakov Dahan (yakidahan)\n */\nreturn [\n    'year' => 'שנה|{2}שנתיים|:count שנים',\n    'y' => 'שנה|:count שנ׳',\n    'month' => 'חודש|{2}חודשיים|:count חודשים',\n    'm' => 'חודש|:count חו׳',\n    'week' => 'שבוע|{2}שבועיים|:count שבועות',\n    'w' => 'שבוע|:count שב׳',\n    'day' => 'יום|{2}יומיים|:count ימים',\n    'd' => 'יום|:count ימ׳',\n    'hour' => 'שעה|{2}שעתיים|:count שעות',\n    'h' => 'שעה|:count שע׳',\n    'minute' => 'דקה|{2}שתי דקות|:count דקות',\n    'min' => 'דקה|:count דק׳',\n    'second' => 'שנייה|:count שניות',\n    'a_second' => 'כמה שניות|:count שניות',\n    's' => 'שניה|:count שנ׳',\n    'ago' => 'לפני :time',\n    'from_now' => 'בעוד :time מעכשיו',\n    'after' => 'אחרי :time',\n    'before' => 'לפני :time',\n    'diff_now' => 'עכשיו',\n    'diff_today' => 'היום',\n    'diff_today_regexp' => 'היום(?:\\\\s+ב־)?',\n    'diff_yesterday' => 'אתמול',\n    'diff_yesterday_regexp' => 'אתמול(?:\\\\s+ב־)?',\n    'diff_tomorrow' => 'מחר',\n    'diff_tomorrow_regexp' => 'מחר(?:\\\\s+ב־)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D [ב]MMMM YYYY',\n        'LLL' => 'D [ב]MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D [ב]MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[היום ב־]LT',\n        'nextDay' => '[מחר ב־]LT',\n        'nextWeek' => 'dddd [בשעה] LT',\n        'lastDay' => '[אתמול ב־]LT',\n        'lastWeek' => '[ביום] dddd [האחרון בשעה] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour, $minute, $isLower) {\n        if ($hour < 5) {\n            return 'לפנות בוקר';\n        }\n        if ($hour < 10) {\n            return 'בבוקר';\n        }\n        if ($hour < 12) {\n            return $isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n        }\n        if ($hour < 18) {\n            return $isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n        }\n\n        return 'בערב';\n    },\n    'months' => ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'],\n    'months_short' => ['ינו׳', 'פבר׳', 'מרץ', 'אפר׳', 'מאי', 'יוני', 'יולי', 'אוג׳', 'ספט׳', 'אוק׳', 'נוב׳', 'דצמ׳'],\n    'weekdays' => ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'],\n    'weekdays_short' => ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],\n    'weekdays_min' => ['א', 'ב', 'ג', 'ד', 'ה', 'ו', 'ש'],\n    'list' => [', ', ' ו -'],\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/he_IL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/he.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - abhimanyu003\n * - Josh Soref\n * - JD Isaacks\n */\nreturn [\n    'year' => 'एक वर्ष|:count वर्ष',\n    'y' => '1 वर्ष|:count वर्षों',\n    'month' => 'एक महीने|:count महीने',\n    'm' => '1 माह|:count महीने',\n    'week' => '1 सप्ताह|:count सप्ताह',\n    'w' => '1 सप्ताह|:count सप्ताह',\n    'day' => 'एक दिन|:count दिन',\n    'd' => '1 दिन|:count दिनों',\n    'hour' => 'एक घंटा|:count घंटे',\n    'h' => '1 घंटा|:count घंटे',\n    'minute' => 'एक मिनट|:count मिनट',\n    'min' => '1 मिनट|:count मिनटों',\n    'second' => 'कुछ ही क्षण|:count सेकंड',\n    's' => '1 सेकंड|:count सेकंड',\n    'ago' => ':time पहले',\n    'from_now' => ':time में',\n    'after' => ':time के बाद',\n    'before' => ':time के पहले',\n    'diff_now' => 'अब',\n    'diff_today' => 'आज',\n    'diff_yesterday' => 'कल',\n    'diff_tomorrow' => 'कल',\n    'formats' => [\n        'LT' => 'A h:mm बजे',\n        'LTS' => 'A h:mm:ss बजे',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm बजे',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm बजे',\n    ],\n    'calendar' => [\n        'sameDay' => '[आज] LT',\n        'nextDay' => '[कल] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[कल] LT',\n        'lastWeek' => '[पिछले] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'रात';\n        }\n        if ($hour < 10) {\n            return 'सुबह';\n        }\n        if ($hour < 17) {\n            return 'दोपहर';\n        }\n        if ($hour < 20) {\n            return 'शाम';\n        }\n\n        return 'रात';\n    },\n    'months' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'months_short' => ['जन.', 'फ़र.', 'मार्च', 'अप्रै.', 'मई', 'जून', 'जुल.', 'अग.', 'सित.', 'अक्टू.', 'नव.', 'दिस.'],\n    'weekdays' => ['रविवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'गुरूवार', 'शुक्रवार', 'शनिवार'],\n    'weekdays_short' => ['रवि', 'सोम', 'मंगल', 'बुध', 'गुरू', 'शुक्र', 'शनि'],\n    'weekdays_min' => ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],\n    'list' => [', ', ' और '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hi_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/hi.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hif.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/hif_FJ.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hif_FJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Samsung Electronics Co., Ltd.    akhilesh.k@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'dddd DD MMM YYYY',\n    ],\n    'months' => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    'weekdays' => ['Ravivar', 'Somvar', 'Mangalvar', 'Budhvar', 'Guruvar', 'Shukravar', 'Shanivar'],\n    'weekdays_short' => ['Ravi', 'Som', 'Mangal', 'Budh', 'Guru', 'Shukra', 'Shani'],\n    'weekdays_min' => ['Ravi', 'Som', 'Mangal', 'Budh', 'Guru', 'Shukra', 'Shani'],\n    'meridiem' => ['Purvahan', 'Aparaahna'],\n\n    'hour' => ':count minit', // less reliable\n    'h' => ':count minit', // less reliable\n    'a_hour' => ':count minit', // less reliable\n\n    'year' => ':count saal',\n    'y' => ':count saal',\n    'a_year' => ':count saal',\n\n    'month' => ':count Mahina',\n    'm' => ':count Mahina',\n    'a_month' => ':count Mahina',\n\n    'week' => ':count Hafta',\n    'w' => ':count Hafta',\n    'a_week' => ':count Hafta',\n\n    'day' => ':count Din',\n    'd' => ':count Din',\n    'a_day' => ':count Din',\n\n    'minute' => ':count Minit',\n    'min' => ':count Minit',\n    'a_minute' => ':count Minit',\n\n    'second' => ':count Second',\n    's' => ':count Second',\n    'a_second' => ':count Second',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hne.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/hne_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hne_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat, Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फरवरी', 'मार्च', 'अपरेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितमबर', 'अकटूबर', 'नवमबर', 'दिसमबर'],\n    'months_short' => ['जन', 'फर', 'मार्च', 'अप', 'मई', 'जून', 'जुला', 'अग', 'सित', 'अकटू', 'नव', 'दिस'],\n    'weekdays' => ['इतवार', 'सोमवार', 'मंगलवार', 'बुधवार', 'बिरसपत', 'सुकरवार', 'सनिवार'],\n    'weekdays_short' => ['इत', 'सोम', 'मंग', 'बुध', 'बिर', 'सुक', 'सनि'],\n    'weekdays_min' => ['इत', 'सोम', 'मंग', 'बुध', 'बिर', 'सुक', 'सनि'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['बिहिनियाँ', 'मंझनियाँ'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - Tim Fish\n * - shaishavgandhi05\n * - Serhan Apaydın\n * - JD Isaacks\n * - tomhorvat\n * - Josh Soref\n * - François B\n * - shaishavgandhi05\n * - Serhan Apaydın\n * - JD Isaacks\n * - tomhorvat\n * - Stjepan Majdak\n * - Vanja Retkovac (vr00)\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count godinu|:count godine|:count godina',\n    'y' => ':count god.|:count god.|:count god.',\n    'month' => ':count mjesec|:count mjeseca|:count mjeseci',\n    'm' => ':count mj.|:count mj.|:count mj.',\n    'week' => ':count tjedan|:count tjedna|:count tjedana',\n    'w' => ':count tj.|:count tj.|:count tj.',\n    'day' => ':count dan|:count dana|:count dana',\n    'd' => ':count d.|:count d.|:count d.',\n    'hour' => ':count sat|:count sata|:count sati',\n    'h' => ':count sat|:count sata|:count sati',\n    'minute' => ':count minutu|:count minute|:count minuta',\n    'min' => ':count min.|:count min.|:count min.',\n    'second' => ':count sekundu|:count sekunde|:count sekundi',\n    'a_second' => 'nekoliko sekundi|:count sekunde|:count sekundi',\n    's' => ':count sek.|:count sek.|:count sek.',\n    'ago' => 'prije :time',\n    'from_now' => 'za :time',\n    'after' => ':time poslije',\n    'before' => ':time prije',\n    'diff_now' => 'sad',\n    'diff_today' => 'danas',\n    'diff_today_regexp' => 'danas(?:\\\\s+u)?',\n    'diff_yesterday' => 'jučer',\n    'diff_yesterday_regexp' => 'jučer(?:\\\\s+u)?',\n    'diff_tomorrow' => 'sutra',\n    'diff_tomorrow_regexp' => 'sutra(?:\\\\s+u)?',\n    'diff_before_yesterday' => 'prekjučer',\n    'diff_after_tomorrow' => 'prekosutra',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'D. M. YYYY.',\n        'LL' => 'D. MMMM YYYY.',\n        'LLL' => 'D. MMMM YYYY. H:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY. H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[danas u] LT',\n        'nextDay' => '[sutra u] LT',\n        'nextWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[u] [nedjelju] [u] LT';\n                case 3:\n                    return '[u] [srijedu] [u] LT';\n                case 6:\n                    return '[u] [subotu] [u] LT';\n                default:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        'lastDay' => '[jučer u] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                case 3:\n                    return '[prošlu] dddd [u] LT';\n                case 6:\n                    return '[prošle] [subote] [u] LT';\n                default:\n                    return '[prošli] dddd [u] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['siječnja', 'veljače', 'ožujka', 'travnja', 'svibnja', 'lipnja', 'srpnja', 'kolovoza', 'rujna', 'listopada', 'studenoga', 'prosinca'],\n    'months_standalone' => ['siječanj', 'veljača', 'ožujak', 'travanj', 'svibanj', 'lipanj', 'srpanj', 'kolovoz', 'rujan', 'listopad', 'studeni', 'prosinac'],\n    'months_short' => ['sij.', 'velj.', 'ožu.', 'tra.', 'svi.', 'lip.', 'srp.', 'kol.', 'ruj.', 'lis.', 'stu.', 'pro.'],\n    'months_regexp' => '/(D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['nedjelju', 'ponedjeljak', 'utorak', 'srijedu', 'četvrtak', 'petak', 'subotu'],\n    'weekdays_standalone' => ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],\n    'weekdays_short' => ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],\n    'weekdays_min' => ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' i '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hr_BA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - DarkoDevelop\n */\nreturn array_replace_recursive(require __DIR__.'/hr.php', [\n    'weekdays' => ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],\n    'weekdays_short' => ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],\n    'weekdays_min' => ['ned', 'pon', 'uto', 'sri', 'čet', 'pet', 'sub'],\n    'months' => ['siječnja', 'veljače', 'ožujka', 'travnja', 'svibnja', 'lipnja', 'srpnja', 'kolovoza', 'rujna', 'listopada', 'studenoga', 'prosinca'],\n    'months_short' => ['sij', 'velj', 'ožu', 'tra', 'svi', 'lip', 'srp', 'kol', 'ruj', 'lis', 'stu', 'pro'],\n    'months_standalone' => ['siječanj', 'veljača', 'ožujak', 'travanj', 'svibanj', 'lipanj', 'srpanj', 'kolovoz', 'rujan', 'listopad', 'studeni', 'prosinac'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D. M. yy.',\n        'LL' => 'D. MMM YYYY.',\n        'LLL' => 'D. MMMM YYYY. HH:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY. HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hr_HR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/hr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hsb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/hsb_DE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hsb_DE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Information from Michael Wolf Andrzej Krzysztofowicz ankry@mif.pg.gda.pl\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'DD. MMMM YYYY',\n        'LLL' => 'DD. MMMM, HH:mm [hodź.]',\n        'LLLL' => 'dddd, DD. MMMM YYYY, HH:mm [hodź.]',\n    ],\n    'months' => ['januara', 'februara', 'měrca', 'apryla', 'meje', 'junija', 'julija', 'awgusta', 'septembra', 'oktobra', 'nowembra', 'decembra'],\n    'months_short' => ['Jan', 'Feb', 'Měr', 'Apr', 'Mej', 'Jun', 'Jul', 'Awg', 'Sep', 'Okt', 'Now', 'Dec'],\n    'weekdays' => ['Njedźela', 'Póndźela', 'Wutora', 'Srjeda', 'Štvórtk', 'Pjatk', 'Sobota'],\n    'weekdays_short' => ['Nj', 'Pó', 'Wu', 'Sr', 'Št', 'Pj', 'So'],\n    'weekdays_min' => ['Nj', 'Pó', 'Wu', 'Sr', 'Št', 'Pj', 'So'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count lěto',\n    'y' => ':count lěto',\n    'a_year' => ':count lěto',\n\n    'month' => ':count měsac',\n    'm' => ':count měsac',\n    'a_month' => ':count měsac',\n\n    'week' => ':count tydźeń',\n    'w' => ':count tydźeń',\n    'a_week' => ':count tydźeń',\n\n    'day' => ':count dźeń',\n    'd' => ':count dźeń',\n    'a_day' => ':count dźeń',\n\n    'hour' => ':count hodźina',\n    'h' => ':count hodźina',\n    'a_hour' => ':count hodźina',\n\n    'minute' => ':count chwila',\n    'min' => ':count chwila',\n    'a_minute' => ':count chwila',\n\n    'second' => ':count druhi',\n    's' => ':count druhi',\n    'a_second' => ':count druhi',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ht.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ht_HT.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ht_HT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Sugar Labs // OLPC sugarlabs.org libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['janvye', 'fevriye', 'mas', 'avril', 'me', 'jen', 'jiyè', 'out', 'septanm', 'oktòb', 'novanm', 'desanm'],\n    'months_short' => ['jan', 'fev', 'mas', 'avr', 'me', 'jen', 'jiy', 'out', 'sep', 'okt', 'nov', 'des'],\n    'weekdays' => ['dimanch', 'lendi', 'madi', 'mèkredi', 'jedi', 'vandredi', 'samdi'],\n    'weekdays_short' => ['dim', 'len', 'mad', 'mèk', 'jed', 'van', 'sam'],\n    'weekdays_min' => ['dim', 'len', 'mad', 'mèk', 'jed', 'van', 'sam'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count lane',\n    'y' => ':count lane',\n    'a_year' => ':count lane',\n\n    'month' => 'mwa :count',\n    'm' => 'mwa :count',\n    'a_month' => 'mwa :count',\n\n    'week' => 'semèn :count',\n    'w' => 'semèn :count',\n    'a_week' => 'semèn :count',\n\n    'day' => ':count jou',\n    'd' => ':count jou',\n    'a_day' => ':count jou',\n\n    'hour' => ':count lè',\n    'h' => ':count lè',\n    'a_hour' => ':count lè',\n\n    'minute' => ':count minit',\n    'min' => ':count minit',\n    'a_minute' => ':count minit',\n\n    'second' => ':count segonn',\n    's' => ':count segonn',\n    'a_second' => ':count segonn',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Adam Brunner\n * - Brett Johnson\n * - balping\n */\n\nuse Carbon\\CarbonInterface;\n\n$huWeekEndings = ['vasárnap', 'hétfőn', 'kedden', 'szerdán', 'csütörtökön', 'pénteken', 'szombaton'];\n\nreturn [\n    'year' => ':count év',\n    'y' => ':count év',\n    'month' => ':count hónap',\n    'm' => ':count hónap',\n    'week' => ':count hét',\n    'w' => ':count hét',\n    'day' => ':count nap',\n    'd' => ':count nap',\n    'hour' => ':count óra',\n    'h' => ':count óra',\n    'minute' => ':count perc',\n    'min' => ':count perc',\n    'second' => ':count másodperc',\n    's' => ':count másodperc',\n    'ago' => ':time',\n    'from_now' => ':time múlva',\n    'after' => ':time később',\n    'before' => ':time korábban',\n    'year_ago' => ':count éve',\n    'y_ago' => ':count éve',\n    'month_ago' => ':count hónapja',\n    'm_ago' => ':count hónapja',\n    'week_ago' => ':count hete',\n    'w_ago' => ':count hete',\n    'day_ago' => ':count napja',\n    'd_ago' => ':count napja',\n    'hour_ago' => ':count órája',\n    'h_ago' => ':count órája',\n    'minute_ago' => ':count perce',\n    'min_ago' => ':count perce',\n    'second_ago' => ':count másodperce',\n    's_ago' => ':count másodperce',\n    'year_after' => ':count évvel',\n    'y_after' => ':count évvel',\n    'month_after' => ':count hónappal',\n    'm_after' => ':count hónappal',\n    'week_after' => ':count héttel',\n    'w_after' => ':count héttel',\n    'day_after' => ':count nappal',\n    'd_after' => ':count nappal',\n    'hour_after' => ':count órával',\n    'h_after' => ':count órával',\n    'minute_after' => ':count perccel',\n    'min_after' => ':count perccel',\n    'second_after' => ':count másodperccel',\n    's_after' => ':count másodperccel',\n    'year_before' => ':count évvel',\n    'y_before' => ':count évvel',\n    'month_before' => ':count hónappal',\n    'm_before' => ':count hónappal',\n    'week_before' => ':count héttel',\n    'w_before' => ':count héttel',\n    'day_before' => ':count nappal',\n    'd_before' => ':count nappal',\n    'hour_before' => ':count órával',\n    'h_before' => ':count órával',\n    'minute_before' => ':count perccel',\n    'min_before' => ':count perccel',\n    'second_before' => ':count másodperccel',\n    's_before' => ':count másodperccel',\n    'months' => ['január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december'],\n    'months_short' => ['jan.', 'febr.', 'márc.', 'ápr.', 'máj.', 'jún.', 'júl.', 'aug.', 'szept.', 'okt.', 'nov.', 'dec.'],\n    'weekdays' => ['vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat'],\n    'weekdays_short' => ['vas', 'hét', 'kedd', 'sze', 'csüt', 'pén', 'szo'],\n    'weekdays_min' => ['v', 'h', 'k', 'sze', 'cs', 'p', 'sz'],\n    'ordinal' => ':number.',\n    'diff_now' => 'most',\n    'diff_today' => 'ma',\n    'diff_yesterday' => 'tegnap',\n    'diff_tomorrow' => 'holnap',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'YYYY.MM.DD.',\n        'LL' => 'YYYY. MMMM D.',\n        'LLL' => 'YYYY. MMMM D. H:mm',\n        'LLLL' => 'YYYY. MMMM D., dddd H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ma] LT[-kor]',\n        'nextDay' => '[holnap] LT[-kor]',\n        'nextWeek' => function (CarbonInterface $date) use ($huWeekEndings) {\n            return '['.$huWeekEndings[$date->dayOfWeek].'] LT[-kor]';\n        },\n        'lastDay' => '[tegnap] LT[-kor]',\n        'lastWeek' => function (CarbonInterface $date) use ($huWeekEndings) {\n            return '[múlt '.$huWeekEndings[$date->dayOfWeek].'] LT[-kor]';\n        },\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['DE', 'DU'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' és '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hu_HU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/hu.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hy.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - mhamlet\n */\nreturn [\n    'year' => ':count տարի',\n    'a_year' => 'տարի|:count տարի',\n    'y' => ':countտ',\n    'month' => ':count ամիս',\n    'a_month' => 'ամիս|:count ամիս',\n    'm' => ':countամ',\n    'week' => ':count շաբաթ',\n    'a_week' => 'շաբաթ|:count շաբաթ',\n    'w' => ':countշ',\n    'day' => ':count օր',\n    'a_day' => 'օր|:count օր',\n    'd' => ':countօր',\n    'hour' => ':count ժամ',\n    'a_hour' => 'ժամ|:count ժամ',\n    'h' => ':countժ',\n    'minute' => ':count րոպե',\n    'a_minute' => 'րոպե|:count րոպե',\n    'min' => ':countր',\n    'second' => ':count վայրկյան',\n    'a_second' => 'մի քանի վայրկյան|:count վայրկյան',\n    's' => ':countվրկ',\n    'ago' => ':time առաջ',\n    'from_now' => ':timeից',\n    'after' => ':time հետո',\n    'before' => ':time առաջ',\n    'diff_now' => 'հիմա',\n    'diff_today' => 'այսօր',\n    'diff_yesterday' => 'երեկ',\n    'diff_tomorrow' => 'վաղը',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY թ.',\n        'LLL' => 'D MMMM YYYY թ., HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY թ., HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[այսօր] LT',\n        'nextDay' => '[վաղը] LT',\n        'nextWeek' => 'dddd [օրը ժամը] LT',\n        'lastDay' => '[երեկ] LT',\n        'lastWeek' => '[անցած] dddd [օրը ժամը] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'DDD':\n            case 'w':\n            case 'W':\n            case 'DDDo':\n                return $number.($number === 1 ? '-ին' : '-րդ');\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'գիշերվա';\n        }\n        if ($hour < 12) {\n            return 'առավոտվա';\n        }\n        if ($hour < 17) {\n            return 'ցերեկվա';\n        }\n\n        return 'երեկոյան';\n    },\n    'months' => ['հունվարի', 'փետրվարի', 'մարտի', 'ապրիլի', 'մայիսի', 'հունիսի', 'հուլիսի', 'օգոստոսի', 'սեպտեմբերի', 'հոկտեմբերի', 'նոյեմբերի', 'դեկտեմբերի'],\n    'months_standalone' => ['հունվար', 'փետրվար', 'մարտ', 'ապրիլ', 'մայիս', 'հունիս', 'հուլիս', 'օգոստոս', 'սեպտեմբեր', 'հոկտեմբեր', 'նոյեմբեր', 'դեկտեմբեր'],\n    'months_short' => ['հնվ', 'փտր', 'մրտ', 'ապր', 'մյս', 'հնս', 'հլս', 'օգս', 'սպտ', 'հկտ', 'նմբ', 'դկտ'],\n    'months_regexp' => '/(D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['կիրակի', 'երկուշաբթի', 'երեքշաբթի', 'չորեքշաբթի', 'հինգշաբթի', 'ուրբաթ', 'շաբաթ'],\n    'weekdays_short' => ['կրկ', 'երկ', 'երք', 'չրք', 'հնգ', 'ուրբ', 'շբթ'],\n    'weekdays_min' => ['կրկ', 'երկ', 'երք', 'չրք', 'հնգ', 'ուրբ', 'շբթ'],\n    'list' => [', ', ' եւ '],\n    'first_day_of_week' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/hy_AM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - Tim Fish\n * - Serhan Apaydın\n * - JD Isaacks\n */\nreturn array_replace_recursive(require __DIR__.'/hy.php', [\n    'from_now' => ':time հետո',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/i18n.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n    'months' => ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n    'months_short' => ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],\n    'weekdays' => ['1', '2', '3', '4', '5', '6', '7'],\n    'weekdays_short' => ['1', '2', '3', '4', '5', '6', '7'],\n    'weekdays_min' => ['1', '2', '3', '4', '5', '6', '7'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ia.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ia_FR.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ia_FR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Fedora Project Nik Kalach nikka@fedoraproject.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['januario', 'februario', 'martio', 'april', 'maio', 'junio', 'julio', 'augusto', 'septembre', 'octobre', 'novembre', 'decembre'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],\n    'weekdays' => ['dominica', 'lunedi', 'martedi', 'mercuridi', 'jovedi', 'venerdi', 'sabbato'],\n    'weekdays_short' => ['dom', 'lun', 'mar', 'mer', 'jov', 'ven', 'sab'],\n    'weekdays_min' => ['dom', 'lun', 'mar', 'mer', 'jov', 'ven', 'sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => 'anno :count',\n    'y' => 'anno :count',\n    'a_year' => 'anno :count',\n\n    'month' => ':count mense',\n    'm' => ':count mense',\n    'a_month' => ':count mense',\n\n    'week' => ':count septimana',\n    'w' => ':count septimana',\n    'a_week' => ':count septimana',\n\n    'day' => ':count die',\n    'd' => ':count die',\n    'a_day' => ':count die',\n\n    'hour' => ':count hora',\n    'h' => ':count hora',\n    'a_hour' => ':count hora',\n\n    'minute' => ':count minuscule',\n    'min' => ':count minuscule',\n    'a_minute' => ':count minuscule',\n\n    'second' => ':count secunda',\n    's' => ':count secunda',\n    'a_second' => ':count secunda',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/id.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - du\n * - JD Isaacks\n * - Nafies Luthfi\n * - Raymundus Jati Primanda (mundusjp)\n * - diankur313\n * - a-wip0\n */\nreturn [\n    'year' => ':count tahun',\n    'a_year' => '{1}setahun|]1,Inf[:count tahun',\n    'y' => ':countthn',\n    'month' => ':count bulan',\n    'a_month' => '{1}sebulan|]1,Inf[:count bulan',\n    'm' => ':countbln',\n    'week' => ':count minggu',\n    'a_week' => '{1}seminggu|]1,Inf[:count minggu',\n    'w' => ':countmgg',\n    'day' => ':count hari',\n    'a_day' => '{1}sehari|]1,Inf[:count hari',\n    'd' => ':counthr',\n    'hour' => ':count jam',\n    'a_hour' => '{1}sejam|]1,Inf[:count jam',\n    'h' => ':countj',\n    'minute' => ':count menit',\n    'a_minute' => '{1}semenit|]1,Inf[:count menit',\n    'min' => ':countmnt',\n    'second' => ':count detik',\n    'a_second' => '{1}beberapa detik|]1,Inf[:count detik',\n    's' => ':countdt',\n    'ago' => ':time yang lalu',\n    'from_now' => ':time dari sekarang',\n    'after' => ':time setelahnya',\n    'before' => ':time sebelumnya',\n    'diff_now' => 'sekarang',\n    'diff_today' => 'Hari',\n    'diff_today_regexp' => 'Hari(?:\\\\s+ini)?(?:\\\\s+pukul)?',\n    'diff_yesterday' => 'kemarin',\n    'diff_yesterday_regexp' => 'Kemarin(?:\\\\s+pukul)?',\n    'diff_tomorrow' => 'besok',\n    'diff_tomorrow_regexp' => 'Besok(?:\\\\s+pukul)?',\n    'formats' => [\n        'LT' => 'HH.mm',\n        'LTS' => 'HH.mm.ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY [pukul] HH.mm',\n        'LLLL' => 'dddd, D MMMM YYYY [pukul] HH.mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Hari ini pukul] LT',\n        'nextDay' => '[Besok pukul] LT',\n        'nextWeek' => 'dddd [pukul] LT',\n        'lastDay' => '[Kemarin pukul] LT',\n        'lastWeek' => 'dddd [lalu pukul] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 11) {\n            return 'pagi';\n        }\n        if ($hour < 15) {\n            return 'siang';\n        }\n        if ($hour < 19) {\n            return 'sore';\n        }\n\n        return 'malam';\n    },\n    'months' => ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Agt', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Minggu', 'Senin', 'Selasa', 'Rabu', 'Kamis', 'Jumat', 'Sabtu'],\n    'weekdays_short' => ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab'],\n    'weekdays_min' => ['Mg', 'Sn', 'Sl', 'Rb', 'Km', 'Jm', 'Sb'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' dan '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/id_ID.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/id.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ig.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ig_NG.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ig_NG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - pablo@mandriva.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Jenụwarị', 'Febrụwarị', 'Maachị', 'Eprel', 'Mee', 'Juun', 'Julaị', 'Ọgọọst', 'Septemba', 'Ọktoba', 'Novemba', 'Disemba'],\n    'months_short' => ['Jen', 'Feb', 'Maa', 'Epr', 'Mee', 'Juu', 'Jul', 'Ọgọ', 'Sep', 'Ọkt', 'Nov', 'Dis'],\n    'weekdays' => ['sọnde', 'mọnde', 'tuzde', 'wenzde', 'tọsde', 'fraịde', 'satọde'],\n    'weekdays_short' => ['sọn', 'mọn', 'tuz', 'wen', 'tọs', 'fra', 'sat'],\n    'weekdays_min' => ['sọn', 'mọn', 'tuz', 'wen', 'tọs', 'fra', 'sat'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => 'afo :count',\n    'y' => 'afo :count',\n    'a_year' => 'afo :count',\n\n    'month' => 'önwa :count',\n    'm' => 'önwa :count',\n    'a_month' => 'önwa :count',\n\n    'week' => 'izu :count',\n    'w' => 'izu :count',\n    'a_week' => 'izu :count',\n\n    'day' => 'ụbọchị :count',\n    'd' => 'ụbọchị :count',\n    'a_day' => 'ụbọchị :count',\n\n    'hour' => 'awa :count',\n    'h' => 'awa :count',\n    'a_hour' => 'awa :count',\n\n    'minute' => 'minit :count',\n    'min' => 'minit :count',\n    'a_minute' => 'minit :count',\n\n    'second' => 'sekọnd :count',\n    's' => 'sekọnd :count',\n    'a_second' => 'sekọnd :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ii.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['ꎸꄑ', 'ꁯꋒ'],\n    'weekdays' => ['ꑭꆏꑍ', 'ꆏꊂꋍ', 'ꆏꊂꑍ', 'ꆏꊂꌕ', 'ꆏꊂꇖ', 'ꆏꊂꉬ', 'ꆏꊂꃘ'],\n    'weekdays_short' => ['ꑭꆏ', 'ꆏꋍ', 'ꆏꑍ', 'ꆏꌕ', 'ꆏꇖ', 'ꆏꉬ', 'ꆏꃘ'],\n    'weekdays_min' => ['ꑭꆏ', 'ꆏꋍ', 'ꆏꑍ', 'ꆏꌕ', 'ꆏꇖ', 'ꆏꉬ', 'ꆏꃘ'],\n    'months' => null,\n    'months_short' => ['ꋍꆪ', 'ꑍꆪ', 'ꌕꆪ', 'ꇖꆪ', 'ꉬꆪ', 'ꃘꆪ', 'ꏃꆪ', 'ꉆꆪ', 'ꈬꆪ', 'ꊰꆪ', 'ꊰꊪꆪ', 'ꊰꑋꆪ'],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D h:mm a',\n        'LLLL' => 'YYYY MMMM D, dddd h:mm a',\n    ],\n\n    'year' => ':count ꒉ', // less reliable\n    'y' => ':count ꒉ', // less reliable\n    'a_year' => ':count ꒉ', // less reliable\n\n    'month' => ':count ꆪ',\n    'm' => ':count ꆪ',\n    'a_month' => ':count ꆪ',\n\n    'week' => ':count ꏃ', // less reliable\n    'w' => ':count ꏃ', // less reliable\n    'a_week' => ':count ꏃ', // less reliable\n\n    'day' => ':count ꏜ', // less reliable\n    'd' => ':count ꏜ', // less reliable\n    'a_day' => ':count ꏜ', // less reliable\n\n    'hour' => ':count ꄮꈉ',\n    'h' => ':count ꄮꈉ',\n    'a_hour' => ':count ꄮꈉ',\n\n    'minute' => ':count ꀄꊭ', // less reliable\n    'min' => ':count ꀄꊭ', // less reliable\n    'a_minute' => ':count ꀄꊭ', // less reliable\n\n    'second' => ':count ꇅ', // less reliable\n    's' => ':count ꇅ', // less reliable\n    'a_second' => ':count ꇅ', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ik.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ik_CA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ik_CA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - pablo@mandriva.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Siqiññaatchiaq', 'Siqiññaasrugruk', 'Paniqsiqsiivik', 'Qilġich Tatqiat', 'Suppivik', 'Iġñivik', 'Itchavik', 'Tiññivik', 'Amiġaiqsivik', 'Sikkuvik', 'Nippivik', 'Siqiñġiḷaq'],\n    'months_short' => ['Sñt', 'Sñs', 'Pan', 'Qil', 'Sup', 'Iġñ', 'Itc', 'Tiñ', 'Ami', 'Sik', 'Nip', 'Siq'],\n    'weekdays' => ['Minġuiqsioiq', 'Savałłiq', 'Ilaqtchiioiq', 'Qitchiioiq', 'Sisamiioiq', 'Tallimmiioiq', 'Maqinġuoiq'],\n    'weekdays_short' => ['Min', 'Sav', 'Ila', 'Qit', 'Sis', 'Tal', 'Maq'],\n    'weekdays_min' => ['Min', 'Sav', 'Ila', 'Qit', 'Sis', 'Tal', 'Maq'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count ukiuq',\n    'y' => ':count ukiuq',\n    'a_year' => ':count ukiuq',\n\n    'month' => ':count Tatqiat',\n    'm' => ':count Tatqiat',\n    'a_month' => ':count Tatqiat',\n\n    'week' => ':count tatqiat', // less reliable\n    'w' => ':count tatqiat', // less reliable\n    'a_week' => ':count tatqiat', // less reliable\n\n    'day' => ':count siqiñiq', // less reliable\n    'd' => ':count siqiñiq', // less reliable\n    'a_day' => ':count siqiñiq', // less reliable\n\n    'hour' => ':count Siḷa', // less reliable\n    'h' => ':count Siḷa', // less reliable\n    'a_hour' => ':count Siḷa', // less reliable\n\n    'second' => ':count iġñiq', // less reliable\n    's' => ':count iġñiq', // less reliable\n    'a_second' => ':count iġñiq', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/in.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/id.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/is.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kristján Ingi Geirsson\n */\nreturn [\n    'year' => '1 ár|:count ár',\n    'y' => '1 ár|:count ár',\n    'month' => '1 mánuður|:count mánuðir',\n    'm' => '1 mánuður|:count mánuðir',\n    'week' => '1 vika|:count vikur',\n    'w' => '1 vika|:count vikur',\n    'day' => '1 dagur|:count dagar',\n    'd' => '1 dagur|:count dagar',\n    'hour' => '1 klukkutími|:count klukkutímar',\n    'h' => '1 klukkutími|:count klukkutímar',\n    'minute' => '1 mínúta|:count mínútur',\n    'min' => '1 mínúta|:count mínútur',\n    'second' => '1 sekúnda|:count sekúndur',\n    's' => '1 sekúnda|:count sekúndur',\n    'ago' => ':time síðan',\n    'from_now' => ':time síðan',\n    'after' => ':time eftir',\n    'before' => ':time fyrir',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' og '],\n    'meridiem' => ['fh', 'eh'],\n    'diff_now' => 'núna',\n    'diff_yesterday' => 'í gær',\n    'diff_tomorrow' => 'á morgun',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM [kl.] HH:mm',\n        'LLLL' => 'dddd D. MMMM YYYY [kl.] HH:mm',\n    ],\n    'weekdays' => ['sunnudaginn', 'mánudaginn', 'þriðjudaginn', 'miðvikudaginn', 'fimmtudaginn', 'föstudaginn', 'laugardaginn'],\n    'weekdays_short' => ['sun', 'mán', 'þri', 'mið', 'fim', 'fös', 'lau'],\n    'weekdays_min' => ['sun', 'mán', 'þri', 'mið', 'fim', 'fös', 'lau'],\n    'months' => ['janúar', 'febrúar', 'mars', 'apríl', 'maí', 'júní', 'júlí', 'ágúst', 'september', 'október', 'nóvember', 'desember'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'maí', 'jún', 'júl', 'ágú', 'sep', 'okt', 'nóv', 'des'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/is_IS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/is.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/it.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ash\n * - François B\n * - Marco Perrando\n * - Massimiliano Caniparoli\n * - JD Isaacks\n * - Andrea Martini\n * - Francesco Marasco\n * - Tizianoz93\n * - Davide Casiraghi (davide-casiraghi)\n * - Pete Scopes (pdscopes)\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count anno|:count anni',\n    'a_year' => 'un anno|:count anni',\n    'y' => ':count anno|:count anni',\n    'month' => ':count mese|:count mesi',\n    'a_month' => 'un mese|:count mesi',\n    'm' => ':count mese|:count mesi',\n    'week' => ':count settimana|:count settimane',\n    'a_week' => 'una settimana|:count settimane',\n    'w' => ':count set.',\n    'day' => ':count giorno|:count giorni',\n    'a_day' => 'un giorno|:count giorni',\n    'd' => ':count g|:count gg',\n    'hour' => ':count ora|:count ore',\n    'a_hour' => 'un\\'ora|:count ore',\n    'h' => ':count h',\n    'minute' => ':count minuto|:count minuti',\n    'a_minute' => 'un minuto|:count minuti',\n    'min' => ':count min.',\n    'second' => ':count secondo|:count secondi',\n    'a_second' => 'alcuni secondi|:count secondi',\n    's' => ':count sec.',\n    'millisecond' => ':count millisecondo|:count millisecondi',\n    'a_millisecond' => 'un millisecondo|:count millisecondi',\n    'ms' => ':countms',\n    'microsecond' => ':count microsecondo|:count microsecondi',\n    'a_microsecond' => 'un microsecondo|:count microsecondi',\n    'µs' => ':countµs',\n    'ago' => ':time fa',\n    'from_now' => function ($time) {\n        return (preg_match('/^\\d.+$/', $time) ? 'tra' : 'in').\" $time\";\n    },\n    'after' => ':time dopo',\n    'before' => ':time prima',\n    'diff_now' => 'proprio ora',\n    'diff_today' => 'Oggi',\n    'diff_today_regexp' => 'Oggi(?:\\\\s+alle)?',\n    'diff_yesterday' => 'ieri',\n    'diff_yesterday_regexp' => 'Ieri(?:\\\\s+alle)?',\n    'diff_tomorrow' => 'domani',\n    'diff_tomorrow_regexp' => 'Domani(?:\\\\s+alle)?',\n    'diff_before_yesterday' => 'l\\'altro ieri',\n    'diff_after_tomorrow' => 'dopodomani',\n    'period_interval' => 'ogni :interval',\n    'period_start_date' => 'dal :date',\n    'period_end_date' => 'al :date',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Oggi alle] LT',\n        'nextDay' => '[Domani alle] LT',\n        'nextWeek' => 'dddd [alle] LT',\n        'lastDay' => '[Ieri alle] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[la scorsa] dddd [alle] LT';\n                default:\n                    return '[lo scorso] dddd [alle] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberº',\n    'months' => ['gennaio', 'febbraio', 'marzo', 'aprile', 'maggio', 'giugno', 'luglio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dicembre'],\n    'months_short' => ['gen', 'feb', 'mar', 'apr', 'mag', 'giu', 'lug', 'ago', 'set', 'ott', 'nov', 'dic'],\n    'weekdays' => ['domenica', 'lunedì', 'martedì', 'mercoledì', 'giovedì', 'venerdì', 'sabato'],\n    'weekdays_short' => ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],\n    'weekdays_min' => ['do', 'lu', 'ma', 'me', 'gi', 've', 'sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' e '],\n    'ordinal_words' => [\n        'of' => 'di',\n        'first' => 'primo',\n        'second' => 'secondo',\n        'third' => 'terzo',\n        'fourth' => 'quarto',\n        'fifth' => 'quinto',\n        'last' => 'ultimo',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/it_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Propaganistas\n */\nreturn array_replace_recursive(require __DIR__.'/it.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/it_IT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn require __DIR__.'/it.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/it_SM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/it.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/it_VA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/it.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/iu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/iu_CA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/iu_CA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Pablo Saratxaga pablo@mandriva.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'MM/DD/YY',\n    ],\n    'months' => ['ᔮᓄᐊᓕ', 'ᕕᕗᐊᓕ', 'ᒪᔅᓯ', 'ᐃᐳᓗ', 'ᒪᐃ', 'ᔪᓂ', 'ᔪᓚᐃ', 'ᐊᒋᓯ', 'ᓯᑎᕙ', 'ᐊᑦᑐᕙ', 'ᓄᕕᕙ', 'ᑎᓯᕝᕙ'],\n    'months_short' => ['ᔮᓄ', 'ᕕᕗ', 'ᒪᔅ', 'ᐃᐳ', 'ᒪᐃ', 'ᔪᓂ', 'ᔪᓚ', 'ᐊᒋ', 'ᓯᑎ', 'ᐊᑦ', 'ᓄᕕ', 'ᑎᓯ'],\n    'weekdays' => ['ᓈᑦᑎᖑᔭᕐᕕᒃ', 'ᓇᒡᒐᔾᔭᐅ', 'ᓇᒡᒐᔾᔭᐅᓕᖅᑭᑦ', 'ᐱᖓᓲᓕᖅᓯᐅᑦ', 'ᕿᑎᖅᑰᑦ', 'ᐅᓪᓗᕈᓘᑐᐃᓇᖅ', 'ᓯᕙᑖᕕᒃ'],\n    'weekdays_short' => ['ᓈ', 'ᓇ', 'ᓕ', 'ᐱ', 'ᕿ', 'ᐅ', 'ᓯ'],\n    'weekdays_min' => ['ᓈ', 'ᓇ', 'ᓕ', 'ᐱ', 'ᕿ', 'ᐅ', 'ᓯ'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count ᐅᑭᐅᖅ',\n    'y' => ':count ᐅᑭᐅᖅ',\n    'a_year' => ':count ᐅᑭᐅᖅ',\n\n    'month' => ':count qaammat',\n    'm' => ':count qaammat',\n    'a_month' => ':count qaammat',\n\n    'week' => ':count sapaatip akunnera',\n    'w' => ':count sapaatip akunnera',\n    'a_week' => ':count sapaatip akunnera',\n\n    'day' => ':count ulloq',\n    'd' => ':count ulloq',\n    'a_day' => ':count ulloq',\n\n    'hour' => ':count ikarraq',\n    'h' => ':count ikarraq',\n    'a_hour' => ':count ikarraq',\n\n    'minute' => ':count titiqqaralaaq', // less reliable\n    'min' => ':count titiqqaralaaq', // less reliable\n    'a_minute' => ':count titiqqaralaaq', // less reliable\n\n    'second' => ':count marluk', // less reliable\n    's' => ':count marluk', // less reliable\n    'a_second' => ':count marluk', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/iw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'months' => ['ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'],\n    'months_short' => ['ינו׳', 'פבר׳', 'מרץ', 'אפר׳', 'מאי', 'יוני', 'יולי', 'אוג׳', 'ספט׳', 'אוק׳', 'נוב׳', 'דצמ׳'],\n    'weekdays' => ['יום ראשון', 'יום שני', 'יום שלישי', 'יום רביעי', 'יום חמישי', 'יום שישי', 'יום שבת'],\n    'weekdays_short' => ['יום א׳', 'יום ב׳', 'יום ג׳', 'יום ד׳', 'יום ה׳', 'יום ו׳', 'שבת'],\n    'weekdays_min' => ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],\n    'meridiem' => ['לפנה״צ', 'אחה״צ'],\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'D.M.YYYY',\n        'LL' => 'D בMMM YYYY',\n        'LLL' => 'D בMMMM YYYY H:mm',\n        'LLLL' => 'dddd, D בMMMM YYYY H:mm',\n    ],\n\n    'year' => ':count שנה',\n    'y' => ':count שנה',\n    'a_year' => ':count שנה',\n\n    'month' => ':count חודש',\n    'm' => ':count חודש',\n    'a_month' => ':count חודש',\n\n    'week' => ':count שבוע',\n    'w' => ':count שבוע',\n    'a_week' => ':count שבוע',\n\n    'day' => ':count יום',\n    'd' => ':count יום',\n    'a_day' => ':count יום',\n\n    'hour' => ':count שעה',\n    'h' => ':count שעה',\n    'a_hour' => ':count שעה',\n\n    'minute' => ':count דקה',\n    'min' => ':count דקה',\n    'a_minute' => ':count דקה',\n\n    'second' => ':count שניה',\n    's' => ':count שניה',\n    'a_second' => ':count שניה',\n\n    'ago' => 'לפני :time',\n    'from_now' => 'בעוד :time',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ja.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Takuya Sawada\n * - Atsushi Tanaka\n * - François B\n * - Jason Katz-Brown\n * - Serhan Apaydın\n * - XueWei\n * - JD Isaacks\n * - toyama satoshi\n * - atakigawa\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count年',\n    'y' => ':count年',\n    'month' => ':countヶ月',\n    'm' => ':countヶ月',\n    'week' => ':count週間',\n    'w' => ':count週間',\n    'day' => ':count日',\n    'd' => ':count日',\n    'hour' => ':count時間',\n    'h' => ':count時間',\n    'minute' => ':count分',\n    'min' => ':count分',\n    'second' => ':count秒',\n    'a_second' => '{1}数秒|]1,Inf[:count秒',\n    's' => ':count秒',\n    'ago' => ':time前',\n    'from_now' => ':time後',\n    'after' => ':time後',\n    'before' => ':time前',\n    'diff_now' => '今',\n    'diff_today' => '今日',\n    'diff_yesterday' => '昨日',\n    'diff_tomorrow' => '明日',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY/MM/DD',\n        'LL' => 'YYYY年M月D日',\n        'LLL' => 'YYYY年M月D日 HH:mm',\n        'LLLL' => 'YYYY年M月D日 dddd HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[今日] LT',\n        'nextDay' => '[明日] LT',\n        'nextWeek' => function (CarbonInterface $current, CarbonInterface $other) {\n            if ($other->week !== $current->week) {\n                return '[来週]dddd LT';\n            }\n\n            return 'dddd LT';\n        },\n        'lastDay' => '[昨日] LT',\n        'lastWeek' => function (CarbonInterface $current, CarbonInterface $other) {\n            if ($other->week !== $current->week) {\n                return '[先週]dddd LT';\n            }\n\n            return 'dddd LT';\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return $number.'日';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => ['午前', '午後'],\n    'months' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n    'months_short' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n    'weekdays' => ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],\n    'weekdays_short' => ['日', '月', '火', '水', '木', '金', '土'],\n    'weekdays_min' => ['日', '月', '火', '水', '木', '金', '土'],\n    'list' => '、',\n    'alt_numbers' => ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '二十', '二十一', '二十二', '二十三', '二十四', '二十五', '二十六', '二十七', '二十八', '二十九', '三十', '三十一', '三十二', '三十三', '三十四', '三十五', '三十六', '三十七', '三十八', '三十九', '四十', '四十一', '四十二', '四十三', '四十四', '四十五', '四十六', '四十七', '四十八', '四十九', '五十', '五十一', '五十二', '五十三', '五十四', '五十五', '五十六', '五十七', '五十八', '五十九', '六十', '六十一', '六十二', '六十三', '六十四', '六十五', '六十六', '六十七', '六十八', '六十九', '七十', '七十一', '七十二', '七十三', '七十四', '七十五', '七十六', '七十七', '七十八', '七十九', '八十', '八十一', '八十二', '八十三', '八十四', '八十五', '八十六', '八十七', '八十八', '八十九', '九十', '九十一', '九十二', '九十三', '九十四', '九十五', '九十六', '九十七', '九十八', '九十九'],\n    'alt_numbers_pow' => [\n        10000 => '万',\n        1000 => '千',\n        100 => '百',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ja_JP.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ja.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/jgo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/jmc.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['utuko', 'kyiukonyi'],\n    'weekdays' => ['Jumapilyi', 'Jumatatuu', 'Jumanne', 'Jumatanu', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprilyi', 'Mei', 'Junyi', 'Julyai', 'Agusti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/jv.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - tgfjt\n * - JD Isaacks\n */\nreturn [\n    'year' => '{1}setaun|]1,Inf[:count taun',\n    'month' => '{1}sewulan|]1,Inf[:count wulan',\n    'week' => '{1}sakminggu|]1,Inf[:count minggu',\n    'day' => '{1}sedinten|]1,Inf[:count dinten',\n    'hour' => '{1}setunggal jam|]1,Inf[:count jam',\n    'minute' => '{1}setunggal menit|]1,Inf[:count menit',\n    'second' => '{1}sawetawis detik|]1,Inf[:count detik',\n    'ago' => ':time ingkang kepengker',\n    'from_now' => 'wonten ing :time',\n    'diff_today' => 'Dinten',\n    'diff_yesterday' => 'Kala',\n    'diff_yesterday_regexp' => 'Kala(?:\\\\s+wingi)?(?:\\\\s+pukul)?',\n    'diff_tomorrow' => 'Mbenjang',\n    'diff_tomorrow_regexp' => 'Mbenjang(?:\\\\s+pukul)?',\n    'diff_today_regexp' => 'Dinten(?:\\\\s+puniko)?(?:\\\\s+pukul)?',\n    'formats' => [\n        'LT' => 'HH.mm',\n        'LTS' => 'HH.mm.ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY [pukul] HH.mm',\n        'LLLL' => 'dddd, D MMMM YYYY [pukul] HH.mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Dinten puniko pukul] LT',\n        'nextDay' => '[Mbenjang pukul] LT',\n        'nextWeek' => 'dddd [pukul] LT',\n        'lastDay' => '[Kala wingi pukul] LT',\n        'lastWeek' => 'dddd [kepengker pukul] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 11) {\n            return 'enjing';\n        }\n        if ($hour < 15) {\n            return 'siyang';\n        }\n        if ($hour < 19) {\n            return 'sonten';\n        }\n\n        return 'ndalu';\n    },\n    'months' => ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni', 'Juli', 'Agustus', 'September', 'Oktober', 'Nopember', 'Desember'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Ags', 'Sep', 'Okt', 'Nop', 'Des'],\n    'weekdays' => ['Minggu', 'Senen', 'Seloso', 'Rebu', 'Kemis', 'Jemuwah', 'Septu'],\n    'weekdays_short' => ['Min', 'Sen', 'Sel', 'Reb', 'Kem', 'Jem', 'Sep'],\n    'weekdays_min' => ['Mg', 'Sn', 'Sl', 'Rb', 'Km', 'Jm', 'Sp'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' lan '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ka.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Tornike Razmadze\n * - François B\n * - Lasha Dolidze\n * - Tim Fish\n * - JD Isaacks\n * - Tornike Razmadze\n * - François B\n * - Lasha Dolidze\n * - JD Isaacks\n * - LONGMAN\n * - Avtandil Kikabidze (akalongman)\n * - Levan Velijanashvili (Stichoza)\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count წელი',\n    'y' => ':count წელი',\n    'a_year' => '{1}წელი|]1,Inf[:count წელი',\n    'month' => ':count თვე',\n    'm' => ':count თვე',\n    'a_month' => '{1}თვე|]1,Inf[:count თვე',\n    'week' => ':count კვირა',\n    'w' => ':count კვირა',\n    'a_week' => '{1}კვირა|]1,Inf[:count კვირა',\n    'day' => ':count დღე',\n    'd' => ':count დღე',\n    'a_day' => '{1}დღე|]1,Inf[:count დღე',\n    'hour' => ':count საათი',\n    'h' => ':count საათი',\n    'a_hour' => '{1}საათი|]1,Inf[:count საათი',\n    'minute' => ':count წუთი',\n    'min' => ':count წუთი',\n    'a_minute' => '{1}წუთი|]1,Inf[:count წუთი',\n    'second' => ':count წამი',\n    's' => ':count წამი',\n    'a_second' => '{1}რამდენიმე წამი|]1,Inf[:count წამი',\n    'ago' => function ($time) {\n        $replacements = [\n            // year\n            'წელი' => 'წლის',\n            // month\n            'თვე' => 'თვის',\n            // week\n            'კვირა' => 'კვირის',\n            // day\n            'დღე' => 'დღის',\n            // hour\n            'საათი' => 'საათის',\n            // minute\n            'წუთი' => 'წუთის',\n            // second\n            'წამი' => 'წამის',\n        ];\n        $time = strtr($time, array_flip($replacements));\n        $time = strtr($time, $replacements);\n\n        return \"$time წინ\";\n    },\n    'from_now' => function ($time) {\n        $replacements = [\n            // year\n            'წელი' => 'წელიწადში',\n            // week\n            'კვირა' => 'კვირაში',\n            // day\n            'დღე' => 'დღეში',\n            // month\n            'თვე' => 'თვეში',\n            // hour\n            'საათი' => 'საათში',\n            // minute\n            'წუთი' => 'წუთში',\n            // second\n            'წამი' => 'წამში',\n        ];\n        $time = strtr($time, array_flip($replacements));\n        $time = strtr($time, $replacements);\n\n        return $time;\n    },\n    'after' => function ($time) {\n        $replacements = [\n            // year\n            'წელი' => 'წლის',\n            // month\n            'თვე' => 'თვის',\n            // week\n            'კვირა' => 'კვირის',\n            // day\n            'დღე' => 'დღის',\n            // hour\n            'საათი' => 'საათის',\n            // minute\n            'წუთი' => 'წუთის',\n            // second\n            'წამი' => 'წამის',\n        ];\n        $time = strtr($time, array_flip($replacements));\n        $time = strtr($time, $replacements);\n\n        return \"$time შემდეგ\";\n    },\n    'before' => function ($time) {\n        $replacements = [\n            // year\n            'წელი' => 'წლით',\n            // month\n            'თვე' => 'თვით',\n            // week\n            'კვირა' => 'კვირით',\n            // day\n            'დღე' => 'დღით',\n            // hour\n            'საათი' => 'საათით',\n            // minute\n            'წუთი' => 'წუთით',\n            // second\n            'წამი' => 'წამით',\n        ];\n        $time = strtr($time, array_flip($replacements));\n        $time = strtr($time, $replacements);\n\n        return \"$time ადრე\";\n    },\n    'diff_now' => 'ახლა',\n    'diff_today' => 'დღეს',\n    'diff_yesterday' => 'გუშინ',\n    'diff_tomorrow' => 'ხვალ',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[დღეს], LT[-ზე]',\n        'nextDay' => '[ხვალ], LT[-ზე]',\n        'nextWeek' => function (CarbonInterface $current, CarbonInterface $other) {\n            return ($current->isSameWeek($other) ? '' : '[შემდეგ] ').'dddd, LT[-ზე]';\n        },\n        'lastDay' => '[გუშინ], LT[-ზე]',\n        'lastWeek' => '[წინა] dddd, LT-ზე',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        if ($number === 0) {\n            return $number;\n        }\n        if ($number === 1) {\n            return $number.'-ლი';\n        }\n        if (($number < 20) || ($number <= 100 && ($number % 20 === 0)) || ($number % 100 === 0)) {\n            return 'მე-'.$number;\n        }\n\n        return $number.'-ე';\n    },\n    'months' => ['იანვარი', 'თებერვალი', 'მარტი', 'აპრილი', 'მაისი', 'ივნისი', 'ივლისი', 'აგვისტო', 'სექტემბერი', 'ოქტომბერი', 'ნოემბერი', 'დეკემბერი'],\n    'months_standalone' => ['იანვარს', 'თებერვალს', 'მარტს', 'აპრილს', 'მაისს', 'ივნისს', 'ივლისს', 'აგვისტოს', 'სექტემბერს', 'ოქტომბერს', 'ნოემბერს', 'დეკემბერს'],\n    'months_short' => ['იან', 'თებ', 'მარ', 'აპრ', 'მაი', 'ივნ', 'ივლ', 'აგვ', 'სექ', 'ოქტ', 'ნოე', 'დეკ'],\n    'months_regexp' => '/(D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['კვირას', 'ორშაბათს', 'სამშაბათს', 'ოთხშაბათს', 'ხუთშაბათს', 'პარასკევს', 'შაბათს'],\n    'weekdays_standalone' => ['კვირა', 'ორშაბათი', 'სამშაბათი', 'ოთხშაბათი', 'ხუთშაბათი', 'პარასკევი', 'შაბათი'],\n    'weekdays_short' => ['კვი', 'ორშ', 'სამ', 'ოთხ', 'ხუთ', 'პარ', 'შაბ'],\n    'weekdays_min' => ['კვ', 'ორ', 'სა', 'ოთ', 'ხუ', 'პა', 'შა'],\n    'weekdays_regexp' => '/^([^d].*|.*[^d])$/',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' და '],\n    'meridiem' => function ($hour) {\n        if ($hour >= 4) {\n            if ($hour < 11) {\n                return 'დილის';\n            }\n\n            if ($hour < 16) {\n                return 'შუადღის';\n            }\n\n            if ($hour < 22) {\n                return 'საღამოს';\n            }\n        }\n\n        return 'ღამის';\n    },\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ka_GE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ka.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kab.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/kab_DZ.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kab_DZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - belkacem77@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Yennayer', 'Fuṛar', 'Meɣres', 'Yebrir', 'Mayyu', 'Yunyu', 'Yulyu', 'ɣuct', 'Ctembeṛ', 'Tubeṛ', 'Wambeṛ', 'Dujembeṛ'],\n    'months_short' => ['Yen', 'Fur', 'Meɣ', 'Yeb', 'May', 'Yun', 'Yul', 'ɣuc', 'Cte', 'Tub', 'Wam', 'Duj'],\n    'weekdays' => ['Acer', 'Arim', 'Aram', 'Ahad', 'Amhad', 'Sem', 'Sed'],\n    'weekdays_short' => ['Ace', 'Ari', 'Ara', 'Aha', 'Amh', 'Sem', 'Sed'],\n    'weekdays_min' => ['Ace', 'Ari', 'Ara', 'Aha', 'Amh', 'Sem', 'Sed'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['FT', 'MD'],\n\n    'year' => ':count n yiseggasen',\n    'y' => ':count n yiseggasen',\n    'a_year' => ':count n yiseggasen',\n\n    'month' => ':count n wayyuren',\n    'm' => ':count n wayyuren',\n    'a_month' => ':count n wayyuren',\n\n    'week' => ':count n ledwaṛ', // less reliable\n    'w' => ':count n ledwaṛ', // less reliable\n    'a_week' => ':count n ledwaṛ', // less reliable\n\n    'day' => ':count n wussan',\n    'd' => ':count n wussan',\n    'a_day' => ':count n wussan',\n\n    'hour' => ':count n tsaɛtin',\n    'h' => ':count n tsaɛtin',\n    'a_hour' => ':count n tsaɛtin',\n\n    'minute' => ':count n tedqiqin',\n    'min' => ':count n tedqiqin',\n    'a_minute' => ':count n tedqiqin',\n\n    'second' => ':count tasdidt', // less reliable\n    's' => ':count tasdidt', // less reliable\n    'a_second' => ':count tasdidt', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kam.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Ĩyakwakya', 'Ĩyawĩoo'],\n    'weekdays' => ['Wa kyumwa', 'Wa kwambĩlĩlya', 'Wa kelĩ', 'Wa katatũ', 'Wa kana', 'Wa katano', 'Wa thanthatũ'],\n    'weekdays_short' => ['Wky', 'Wkw', 'Wkl', 'Wtũ', 'Wkn', 'Wtn', 'Wth'],\n    'weekdays_min' => ['Wky', 'Wkw', 'Wkl', 'Wtũ', 'Wkn', 'Wtn', 'Wth'],\n    'months' => ['Mwai wa mbee', 'Mwai wa kelĩ', 'Mwai wa katatũ', 'Mwai wa kana', 'Mwai wa katano', 'Mwai wa thanthatũ', 'Mwai wa muonza', 'Mwai wa nyaanya', 'Mwai wa kenda', 'Mwai wa ĩkumi', 'Mwai wa ĩkumi na ĩmwe', 'Mwai wa ĩkumi na ilĩ'],\n    'months_short' => ['Mbe', 'Kel', 'Ktũ', 'Kan', 'Ktn', 'Tha', 'Moo', 'Nya', 'Knd', 'Ĩku', 'Ĩkm', 'Ĩkl'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    // Too unreliable\n    /*\n    'year' => ':count mbua', // less reliable\n    'y' => ':count mbua', // less reliable\n    'a_year' => ':count mbua', // less reliable\n\n    'month' => ':count ndakitali', // less reliable\n    'm' => ':count ndakitali', // less reliable\n    'a_month' => ':count ndakitali', // less reliable\n\n    'day' => ':count wia', // less reliable\n    'd' => ':count wia', // less reliable\n    'a_day' => ':count wia', // less reliable\n\n    'hour' => ':count orasan', // less reliable\n    'h' => ':count orasan', // less reliable\n    'a_hour' => ':count orasan', // less reliable\n\n    'minute' => ':count orasan', // less reliable\n    'min' => ':count orasan', // less reliable\n    'a_minute' => ':count orasan', // less reliable\n    */\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kde.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Muhi', 'Chilo'],\n    'weekdays' => ['Liduva lyapili', 'Liduva lyatatu', 'Liduva lyanchechi', 'Liduva lyannyano', 'Liduva lyannyano na linji', 'Liduva lyannyano na mavili', 'Liduva litandi'],\n    'weekdays_short' => ['Ll2', 'Ll3', 'Ll4', 'Ll5', 'Ll6', 'Ll7', 'Ll1'],\n    'weekdays_min' => ['Ll2', 'Ll3', 'Ll4', 'Ll5', 'Ll6', 'Ll7', 'Ll1'],\n    'months' => ['Mwedi Ntandi', 'Mwedi wa Pili', 'Mwedi wa Tatu', 'Mwedi wa Nchechi', 'Mwedi wa Nnyano', 'Mwedi wa Nnyano na Umo', 'Mwedi wa Nnyano na Mivili', 'Mwedi wa Nnyano na Mitatu', 'Mwedi wa Nnyano na Nchechi', 'Mwedi wa Nnyano na Nnyano', 'Mwedi wa Nnyano na Nnyano na U', 'Mwedi wa Nnyano na Nnyano na M'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kea.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['a', 'p'],\n    'weekdays' => ['dumingu', 'sigunda-fera', 'tersa-fera', 'kuarta-fera', 'kinta-fera', 'sesta-fera', 'sabadu'],\n    'weekdays_short' => ['dum', 'sig', 'ter', 'kua', 'kin', 'ses', 'sab'],\n    'weekdays_min' => ['du', 'si', 'te', 'ku', 'ki', 'se', 'sa'],\n    'weekdays_standalone' => ['dumingu', 'sigunda-fera', 'tersa-fera', 'kuarta-fera', 'kinta-fera', 'sesta-fera', 'sábadu'],\n    'months' => ['Janeru', 'Febreru', 'Marsu', 'Abril', 'Maiu', 'Junhu', 'Julhu', 'Agostu', 'Setenbru', 'Otubru', 'Nuvenbru', 'Dizenbru'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Otu', 'Nuv', 'Diz'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D [di] MMMM [di] YYYY HH:mm',\n        'LLLL' => 'dddd, D [di] MMMM [di] YYYY HH:mm',\n    ],\n\n    'year' => ':count otunu', // less reliable\n    'y' => ':count otunu', // less reliable\n    'a_year' => ':count otunu', // less reliable\n\n    'week' => ':count día dumingu', // less reliable\n    'w' => ':count día dumingu', // less reliable\n    'a_week' => ':count día dumingu', // less reliable\n\n    'day' => ':count diâ', // less reliable\n    'd' => ':count diâ', // less reliable\n    'a_day' => ':count diâ', // less reliable\n\n    'minute' => ':count sugundu', // less reliable\n    'min' => ':count sugundu', // less reliable\n    'a_minute' => ':count sugundu', // less reliable\n\n    'second' => ':count dós', // less reliable\n    's' => ':count dós', // less reliable\n    'a_second' => ':count dós', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/khq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Adduha', 'Aluula'],\n    'weekdays' => ['Alhadi', 'Atini', 'Atalata', 'Alarba', 'Alhamiisa', 'Aljuma', 'Assabdu'],\n    'weekdays_short' => ['Alh', 'Ati', 'Ata', 'Ala', 'Alm', 'Alj', 'Ass'],\n    'weekdays_min' => ['Alh', 'Ati', 'Ata', 'Ala', 'Alm', 'Alj', 'Ass'],\n    'months' => ['Žanwiye', 'Feewiriye', 'Marsi', 'Awiril', 'Me', 'Žuweŋ', 'Žuyye', 'Ut', 'Sektanbur', 'Oktoobur', 'Noowanbur', 'Deesanbur'],\n    'months_short' => ['Žan', 'Fee', 'Mar', 'Awi', 'Me', 'Žuw', 'Žuy', 'Ut', 'Sek', 'Okt', 'Noo', 'Dee'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ki.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Kiroko', 'Hwaĩ-inĩ'],\n    'weekdays' => ['Kiumia', 'Njumatatũ', 'Njumaine', 'Njumatana', 'Aramithi', 'Njumaa', 'Njumamothi'],\n    'weekdays_short' => ['KMA', 'NTT', 'NMN', 'NMT', 'ART', 'NMA', 'NMM'],\n    'weekdays_min' => ['KMA', 'NTT', 'NMN', 'NMT', 'ART', 'NMA', 'NMM'],\n    'months' => ['Njenuarĩ', 'Mwere wa kerĩ', 'Mwere wa gatatũ', 'Mwere wa kana', 'Mwere wa gatano', 'Mwere wa gatandatũ', 'Mwere wa mũgwanja', 'Mwere wa kanana', 'Mwere wa kenda', 'Mwere wa ikũmi', 'Mwere wa ikũmi na ũmwe', 'Ndithemba'],\n    'months_short' => ['JEN', 'WKR', 'WGT', 'WKN', 'WTN', 'WTD', 'WMJ', 'WNN', 'WKD', 'WIK', 'WMW', 'DIT'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count mĩaka', // less reliable\n    'y' => ':count mĩaka', // less reliable\n    'a_year' => ':count mĩaka', // less reliable\n\n    'month' => ':count mweri', // less reliable\n    'm' => ':count mweri', // less reliable\n    'a_month' => ':count mweri', // less reliable\n\n    'week' => ':count kiumia', // less reliable\n    'w' => ':count kiumia', // less reliable\n    'a_week' => ':count kiumia', // less reliable\n\n    'day' => ':count mũthenya', // less reliable\n    'd' => ':count mũthenya', // less reliable\n    'a_day' => ':count mũthenya', // less reliable\n\n    'hour' => ':count thaa', // less reliable\n    'h' => ':count thaa', // less reliable\n    'a_hour' => ':count thaa', // less reliable\n\n    'minute' => ':count mundu', // less reliable\n    'min' => ':count mundu', // less reliable\n    'a_minute' => ':count mundu', // less reliable\n\n    'second' => ':count igego', // less reliable\n    's' => ':count igego', // less reliable\n    'a_second' => ':count igego', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kk.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - Talat Uspanov\n * - Нурлан Рахимжанов\n * - Toleugazy Kali\n */\nreturn [\n    'year' => ':count жыл',\n    'a_year' => '{1}бір жыл|:count жыл',\n    'y' => ':count ж.',\n    'month' => ':count ай',\n    'a_month' => '{1}бір ай|:count ай',\n    'm' => ':count ай',\n    'week' => ':count апта',\n    'a_week' => '{1}бір апта',\n    'w' => ':count ап.',\n    'day' => ':count күн',\n    'a_day' => '{1}бір күн|:count күн',\n    'd' => ':count к.',\n    'hour' => ':count сағат',\n    'a_hour' => '{1}бір сағат|:count сағат',\n    'h' => ':count са.',\n    'minute' => ':count минут',\n    'a_minute' => '{1}бір минут|:count минут',\n    'min' => ':count м.',\n    'second' => ':count секунд',\n    'a_second' => '{1}бірнеше секунд|:count секунд',\n    's' => ':count се.',\n    'ago' => ':time бұрын',\n    'from_now' => ':time ішінде',\n    'after' => ':time кейін',\n    'before' => ':time бұрын',\n    'diff_now' => 'қазір',\n    'diff_today' => 'Бүгін',\n    'diff_today_regexp' => 'Бүгін(?:\\\\s+сағат)?',\n    'diff_yesterday' => 'кеше',\n    'diff_yesterday_regexp' => 'Кеше(?:\\\\s+сағат)?',\n    'diff_tomorrow' => 'ертең',\n    'diff_tomorrow_regexp' => 'Ертең(?:\\\\s+сағат)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Бүгін сағат] LT',\n        'nextDay' => '[Ертең сағат] LT',\n        'nextWeek' => 'dddd [сағат] LT',\n        'lastDay' => '[Кеше сағат] LT',\n        'lastWeek' => '[Өткен аптаның] dddd [сағат] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        static $suffixes = [\n            0 => '-ші',\n            1 => '-ші',\n            2 => '-ші',\n            3 => '-ші',\n            4 => '-ші',\n            5 => '-ші',\n            6 => '-шы',\n            7 => '-ші',\n            8 => '-ші',\n            9 => '-шы',\n            10 => '-шы',\n            20 => '-шы',\n            30 => '-шы',\n            40 => '-шы',\n            50 => '-ші',\n            60 => '-шы',\n            70 => '-ші',\n            80 => '-ші',\n            90 => '-шы',\n            100 => '-ші',\n        ];\n\n        return $number.($suffixes[$number] ?? $suffixes[$number % 10] ?? $suffixes[$number >= 100 ? 100 : -1] ?? '');\n    },\n    'months' => ['қаңтар', 'ақпан', 'наурыз', 'сәуір', 'мамыр', 'маусым', 'шілде', 'тамыз', 'қыркүйек', 'қазан', 'қараша', 'желтоқсан'],\n    'months_short' => ['қаң', 'ақп', 'нау', 'сәу', 'мам', 'мау', 'шіл', 'там', 'қыр', 'қаз', 'қар', 'жел'],\n    'weekdays' => ['жексенбі', 'дүйсенбі', 'сейсенбі', 'сәрсенбі', 'бейсенбі', 'жұма', 'сенбі'],\n    'weekdays_short' => ['жек', 'дүй', 'сей', 'сәр', 'бей', 'жұм', 'сен'],\n    'weekdays_min' => ['жк', 'дй', 'сй', 'ср', 'бй', 'жм', 'сн'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' және '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kk_KZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/kk.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kkj.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/kl_GL.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kl_GL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Danish Standards Association    bug-glibc-locales@gnu.org\n * - John Eyðstein Johannesen (mashema)\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n    ],\n    'months' => ['januaarip', 'februaarip', 'marsip', 'apriilip', 'maajip', 'juunip', 'juulip', 'aggustip', 'septembarip', 'oktobarip', 'novembarip', 'decembarip'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n    'weekdays' => ['sapaat', 'ataasinngorneq', 'marlunngorneq', 'pingasunngorneq', 'sisamanngorneq', 'tallimanngorneq', 'arfininngorneq'],\n    'weekdays_short' => ['sap', 'ata', 'mar', 'pin', 'sis', 'tal', 'arf'],\n    'weekdays_min' => ['sap', 'ata', 'mar', 'pin', 'sis', 'tal', 'arf'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => '{1}ukioq :count|{0}:count ukiut|]1,Inf[ukiut :count',\n    'a_year' => '{1}ukioq|{0}:count ukiut|]1,Inf[ukiut :count',\n    'y' => '{1}:countyr|{0}:countyrs|]1,Inf[:countyrs',\n\n    'month' => '{1}qaammat :count|{0}:count qaammatit|]1,Inf[qaammatit :count',\n    'a_month' => '{1}qaammat|{0}:count qaammatit|]1,Inf[qaammatit :count',\n    'm' => '{1}:countmo|{0}:countmos|]1,Inf[:countmos',\n\n    'week' => '{1}:count sap. ak.|{0}:count sap. ak.|]1,Inf[:count sap. ak.',\n    'a_week' => '{1}a sap. ak.|{0}:count sap. ak.|]1,Inf[:count sap. ak.',\n    'w' => ':countw',\n\n    'day' => '{1}:count ulloq|{0}:count ullut|]1,Inf[:count ullut',\n    'a_day' => '{1}a ulloq|{0}:count ullut|]1,Inf[:count ullut',\n    'd' => ':countd',\n\n    'hour' => '{1}:count tiimi|{0}:count tiimit|]1,Inf[:count tiimit',\n    'a_hour' => '{1}tiimi|{0}:count tiimit|]1,Inf[:count tiimit',\n    'h' => ':counth',\n\n    'minute' => '{1}:count minutsi|{0}:count minutsit|]1,Inf[:count minutsit',\n    'a_minute' => '{1}a minutsi|{0}:count minutsit|]1,Inf[:count minutsit',\n    'min' => ':countm',\n\n    'second' => '{1}:count sikunti|{0}:count sikuntit|]1,Inf[:count sikuntit',\n    'a_second' => '{1}sikunti|{0}:count sikuntit|]1,Inf[:count sikuntit',\n    's' => ':counts',\n\n    'ago' => ':time matuma siorna',\n\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kln.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['krn', 'koosk'],\n    'weekdays' => ['Kotisap', 'Kotaai', 'Koaeng’', 'Kosomok', 'Koang’wan', 'Komuut', 'Kolo'],\n    'weekdays_short' => ['Kts', 'Kot', 'Koo', 'Kos', 'Koa', 'Kom', 'Kol'],\n    'weekdays_min' => ['Kts', 'Kot', 'Koo', 'Kos', 'Koa', 'Kom', 'Kol'],\n    'months' => ['Mulgul', 'Ng’atyaato', 'Kiptaamo', 'Iwootkuut', 'Mamuut', 'Paagi', 'Ng’eiyeet', 'Rooptui', 'Bureet', 'Epeeso', 'Kipsuunde ne taai', 'Kipsuunde nebo aeng’'],\n    'months_short' => ['Mul', 'Ngat', 'Taa', 'Iwo', 'Mam', 'Paa', 'Nge', 'Roo', 'Bur', 'Epe', 'Kpt', 'Kpa'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count maghatiat', // less reliable\n    'y' => ':count maghatiat', // less reliable\n    'a_year' => ':count maghatiat', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/km.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kruy Vanna\n * - Sereysethy Touch\n * - JD Isaacks\n * - Sovichet Tep\n */\nreturn [\n    'year' => '{1}មួយឆ្នាំ|]1,Inf[:count ឆ្នាំ',\n    'y' => ':count ឆ្នាំ',\n    'month' => '{1}មួយខែ|]1,Inf[:count ខែ',\n    'm' => ':count ខែ',\n    'week' => ':count សប្ដាហ៍',\n    'w' => ':count សប្ដាហ៍',\n    'day' => '{1}មួយថ្ងៃ|]1,Inf[:count ថ្ងៃ',\n    'd' => ':count ថ្ងៃ',\n    'hour' => '{1}មួយម៉ោង|]1,Inf[:count ម៉ោង',\n    'h' => ':count ម៉ោង',\n    'minute' => '{1}មួយនាទី|]1,Inf[:count នាទី',\n    'min' => ':count នាទី',\n    'second' => '{1}ប៉ុន្មានវិនាទី|]1,Inf[:count វិនាទី',\n    's' => ':count វិនាទី',\n    'ago' => ':timeមុន',\n    'from_now' => ':timeទៀត',\n    'after' => 'នៅ​ក្រោយ :time',\n    'before' => 'នៅ​មុន :time',\n    'diff_now' => 'ឥឡូវ',\n    'diff_today' => 'ថ្ងៃនេះ',\n    'diff_today_regexp' => 'ថ្ងៃនេះ(?:\\\\s+ម៉ោង)?',\n    'diff_yesterday' => 'ម្សិលមិញ',\n    'diff_yesterday_regexp' => 'ម្សិលមិញ(?:\\\\s+ម៉ោង)?',\n    'diff_tomorrow' => 'ថ្ងៃ​ស្អែក',\n    'diff_tomorrow_regexp' => 'ស្អែក(?:\\\\s+ម៉ោង)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ថ្ងៃនេះ ម៉ោង] LT',\n        'nextDay' => '[ស្អែក ម៉ោង] LT',\n        'nextWeek' => 'dddd [ម៉ោង] LT',\n        'lastDay' => '[ម្សិលមិញ ម៉ោង] LT',\n        'lastWeek' => 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => 'ទី:number',\n    'meridiem' => ['ព្រឹក', 'ល្ងាច'],\n    'months' => ['មករា', 'កុម្ភៈ', 'មីនា', 'មេសា', 'ឧសភា', 'មិថុនា', 'កក្កដា', 'សីហា', 'កញ្ញា', 'តុលា', 'វិច្ឆិកា', 'ធ្នូ'],\n    'months_short' => ['មករា', 'កុម្ភៈ', 'មីនា', 'មេសា', 'ឧសភា', 'មិថុនា', 'កក្កដា', 'សីហា', 'កញ្ញា', 'តុលា', 'វិច្ឆិកា', 'ធ្នូ'],\n    'weekdays' => ['អាទិត្យ', 'ច័ន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បតិ៍', 'សុក្រ', 'សៅរ៍'],\n    'weekdays_short' => ['អា', 'ច', 'អ', 'ព', 'ព្រ', 'សុ', 'ស'],\n    'weekdays_min' => ['អា', 'ច', 'អ', 'ព', 'ព្រ', 'សុ', 'ស'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', 'និង '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/km_KH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/km.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - MOHAN M U\n * - François B\n * - rajeevnaikte\n */\nreturn [\n    'year' => '{1}ಒಂದು ವರ್ಷ|]1,Inf[:count ವರ್ಷ',\n    'month' => '{1}ಒಂದು ತಿಂಗಳು|]1,Inf[:count ತಿಂಗಳು',\n    'week' => '{1}ಒಂದು ವಾರ|]1,Inf[:count ವಾರಗಳು',\n    'day' => '{1}ಒಂದು ದಿನ|]1,Inf[:count ದಿನ',\n    'hour' => '{1}ಒಂದು ಗಂಟೆ|]1,Inf[:count ಗಂಟೆ',\n    'minute' => '{1}ಒಂದು ನಿಮಿಷ|]1,Inf[:count ನಿಮಿಷ',\n    'second' => '{1}ಕೆಲವು ಕ್ಷಣಗಳು|]1,Inf[:count ಸೆಕೆಂಡುಗಳು',\n    'ago' => ':time ಹಿಂದೆ',\n    'from_now' => ':time ನಂತರ',\n    'diff_now' => 'ಈಗ',\n    'diff_today' => 'ಇಂದು',\n    'diff_yesterday' => 'ನಿನ್ನೆ',\n    'diff_tomorrow' => 'ನಾಳೆ',\n    'formats' => [\n        'LT' => 'A h:mm',\n        'LTS' => 'A h:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ಇಂದು] LT',\n        'nextDay' => '[ನಾಳೆ] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[ನಿನ್ನೆ] LT',\n        'lastWeek' => '[ಕೊನೆಯ] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberನೇ',\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'ರಾತ್ರಿ';\n        }\n        if ($hour < 10) {\n            return 'ಬೆಳಿಗ್ಗೆ';\n        }\n        if ($hour < 17) {\n            return 'ಮಧ್ಯಾಹ್ನ';\n        }\n        if ($hour < 20) {\n            return 'ಸಂಜೆ';\n        }\n\n        return 'ರಾತ್ರಿ';\n    },\n    'months' => ['ಜನವರಿ', 'ಫೆಬ್ರವರಿ', 'ಮಾರ್ಚ್', 'ಏಪ್ರಿಲ್', 'ಮೇ', 'ಜೂನ್', 'ಜುಲೈ', 'ಆಗಸ್ಟ್', 'ಸೆಪ್ಟೆಂಬರ್', 'ಅಕ್ಟೋಬರ್', 'ನವೆಂಬರ್', 'ಡಿಸೆಂಬರ್'],\n    'months_short' => ['ಜನ', 'ಫೆಬ್ರ', 'ಮಾರ್ಚ್', 'ಏಪ್ರಿಲ್', 'ಮೇ', 'ಜೂನ್', 'ಜುಲೈ', 'ಆಗಸ್ಟ್', 'ಸೆಪ್ಟೆಂ', 'ಅಕ್ಟೋ', 'ನವೆಂ', 'ಡಿಸೆಂ'],\n    'weekdays' => ['ಭಾನುವಾರ', 'ಸೋಮವಾರ', 'ಮಂಗಳವಾರ', 'ಬುಧವಾರ', 'ಗುರುವಾರ', 'ಶುಕ್ರವಾರ', 'ಶನಿವಾರ'],\n    'weekdays_short' => ['ಭಾನು', 'ಸೋಮ', 'ಮಂಗಳ', 'ಬುಧ', 'ಗುರು', 'ಶುಕ್ರ', 'ಶನಿ'],\n    'weekdays_min' => ['ಭಾ', 'ಸೋ', 'ಮಂ', 'ಬು', 'ಗು', 'ಶು', 'ಶ'],\n    'list' => ', ',\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kn_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/kn.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ko.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - FourwingsY\n * - François B\n * - Jason Katz-Brown\n * - Seokjun Kim\n * - Junho Kim\n * - JD Isaacks\n * - Juwon Kim\n */\nreturn [\n    'year' => ':count년',\n    'a_year' => '{1}일년|]1,Inf[:count년',\n    'y' => ':count년',\n    'month' => ':count개월',\n    'a_month' => '{1}한달|]1,Inf[:count개월',\n    'm' => ':count개월',\n    'week' => ':count주',\n    'a_week' => '{1}일주일|]1,Inf[:count 주',\n    'w' => ':count주일',\n    'day' => ':count일',\n    'a_day' => '{1}하루|]1,Inf[:count일',\n    'd' => ':count일',\n    'hour' => ':count시간',\n    'a_hour' => '{1}한시간|]1,Inf[:count시간',\n    'h' => ':count시간',\n    'minute' => ':count분',\n    'a_minute' => '{1}일분|]1,Inf[:count분',\n    'min' => ':count분',\n    'second' => ':count초',\n    'a_second' => '{1}몇초|]1,Inf[:count초',\n    's' => ':count초',\n    'ago' => ':time 전',\n    'from_now' => ':time 후',\n    'after' => ':time 후',\n    'before' => ':time 전',\n    'diff_now' => '지금',\n    'diff_today' => '오늘',\n    'diff_yesterday' => '어제',\n    'diff_tomorrow' => '내일',\n    'formats' => [\n        'LT' => 'A h:mm',\n        'LTS' => 'A h:mm:ss',\n        'L' => 'YYYY.MM.DD.',\n        'LL' => 'YYYY년 MMMM D일',\n        'LLL' => 'YYYY년 MMMM D일 A h:mm',\n        'LLLL' => 'YYYY년 MMMM D일 dddd A h:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '오늘 LT',\n        'nextDay' => '내일 LT',\n        'nextWeek' => 'dddd LT',\n        'lastDay' => '어제 LT',\n        'lastWeek' => '지난주 dddd LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return $number.'일';\n            case 'M':\n                return $number.'월';\n            case 'w':\n            case 'W':\n                return $number.'주';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => ['오전', '오후'],\n    'months' => ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\n    'months_short' => ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\n    'weekdays' => ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],\n    'weekdays_short' => ['일', '월', '화', '수', '목', '금', '토'],\n    'weekdays_min' => ['일', '월', '화', '수', '목', '금', '토'],\n    'list' => ' ',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ko_KP.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ko.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ko_KR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ko.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kok.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/kok_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kok_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat, Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D-M-YY',\n    ],\n    'months' => ['जानेवारी', 'फेब्रुवारी', 'मार्च', 'एप्रिल', 'मे', 'जून', 'जुलै', 'ओगस्ट', 'सेप्टेंबर', 'ओक्टोबर', 'नोव्हेंबर', 'डिसेंबर'],\n    'months_short' => ['जानेवारी', 'फेब्रुवारी', 'मार्च', 'एप्रिल', 'मे', 'जून', 'जुलै', 'ओगस्ट', 'सेप्टेंबर', 'ओक्टोबर', 'नोव्हेंबर', 'डिसेंबर'],\n    'weekdays' => ['आयतार', 'सोमार', 'मंगळवार', 'बुधवार', 'बेरेसतार', 'शुकरार', 'शेनवार'],\n    'weekdays_short' => ['आयतार', 'सोमार', 'मंगळवार', 'बुधवार', 'बेरेसतार', 'शुकरार', 'शेनवार'],\n    'weekdays_min' => ['आयतार', 'सोमार', 'मंगळवार', 'बुधवार', 'बेरेसतार', 'शुकरार', 'शेनवार'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['म.पू.', 'म.नं.'],\n\n    'year' => ':count वैशाकु', // less reliable\n    'y' => ':count वैशाकु', // less reliable\n    'a_year' => ':count वैशाकु', // less reliable\n\n    'week' => ':count आदित्यवार', // less reliable\n    'w' => ':count आदित्यवार', // less reliable\n    'a_week' => ':count आदित्यवार', // less reliable\n\n    'minute' => ':count नोंद', // less reliable\n    'min' => ':count नोंद', // less reliable\n    'a_minute' => ':count नोंद', // less reliable\n\n    'second' => ':count तेंको', // less reliable\n    's' => ':count तेंको', // less reliable\n    'a_second' => ':count तेंको', // less reliable\n\n    'month' => ':count मैनो',\n    'm' => ':count मैनो',\n    'a_month' => ':count मैनो',\n\n    'day' => ':count दिवसु',\n    'd' => ':count दिवसु',\n    'a_day' => ':count दिवसु',\n\n    'hour' => ':count घंते',\n    'h' => ':count घंते',\n    'a_hour' => ':count घंते',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ks.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ks_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ks_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat, Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'M/D/YY',\n    ],\n    'months' => ['جنؤری', 'فرؤری', 'مارٕچ', 'اپریل', 'میٔ', 'جوٗن', 'جوٗلایی', 'اگست', 'ستمبر', 'اکتوٗبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنؤری', 'فرؤری', 'مارٕچ', 'اپریل', 'میٔ', 'جوٗن', 'جوٗلایی', 'اگست', 'ستمبر', 'اکتوٗبر', 'نومبر', 'دسمبر'],\n    'weekdays' => ['آتهوار', 'ژءندروار', 'بوءںوار', 'بودهوار', 'برىسوار', 'جمع', 'بٹوار'],\n    'weekdays_short' => ['آتهوار', 'ژءنتروار', 'بوءںوار', 'بودهوار', 'برىسوار', 'جمع', 'بٹوار'],\n    'weekdays_min' => ['آتهوار', 'ژءنتروار', 'بوءںوار', 'بودهوار', 'برىسوار', 'جمع', 'بٹوار'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['دوپھربرونھ', 'دوپھرپتھ'],\n\n    'year' => ':count آب', // less reliable\n    'y' => ':count آب', // less reliable\n    'a_year' => ':count آب', // less reliable\n\n    'month' => ':count रान्', // less reliable\n    'm' => ':count रान्', // less reliable\n    'a_month' => ':count रान्', // less reliable\n\n    'week' => ':count آتھٕوار', // less reliable\n    'w' => ':count آتھٕوار', // less reliable\n    'a_week' => ':count آتھٕوار', // less reliable\n\n    'hour' => ':count سۄن', // less reliable\n    'h' => ':count سۄن', // less reliable\n    'a_hour' => ':count سۄن', // less reliable\n\n    'minute' => ':count فَن', // less reliable\n    'min' => ':count فَن', // less reliable\n    'a_minute' => ':count فَن', // less reliable\n\n    'second' => ':count दोʼयुम', // less reliable\n    's' => ':count दोʼयुम', // less reliable\n    'a_second' => ':count दोʼयुम', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ks_IN@devanagari.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - ks-gnome-trans-commits@lists.code.indlinux.net\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'M/D/YY',\n    ],\n    'months' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'months_short' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'weekdays' => ['आथवार', 'चॅ़दुरवार', 'बोमवार', 'ब्वदवार', 'ब्रसवार', 'शोकुरवार', 'बटुवार'],\n    'weekdays_short' => ['आथ ', 'चॅ़दुर', 'बोम', 'ब्वद', 'ब्रस', 'शोकुर', 'बटु'],\n    'weekdays_min' => ['आथ ', 'चॅ़दुर', 'बोम', 'ब्वद', 'ब्रस', 'शोकुर', 'बटु'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ksb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['makeo', 'nyiaghuo'],\n    'weekdays' => ['Jumaapii', 'Jumaatatu', 'Jumaane', 'Jumaatano', 'Alhamisi', 'Ijumaa', 'Jumaamosi'],\n    'weekdays_short' => ['Jpi', 'Jtt', 'Jmn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Jpi', 'Jtt', 'Jmn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'months' => ['Januali', 'Febluali', 'Machi', 'Aplili', 'Mei', 'Juni', 'Julai', 'Agosti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ksf.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['sárúwá', 'cɛɛ́nko'],\n    'weekdays' => ['sɔ́ndǝ', 'lǝndí', 'maadí', 'mɛkrɛdí', 'jǝǝdí', 'júmbá', 'samdí'],\n    'weekdays_short' => ['sɔ́n', 'lǝn', 'maa', 'mɛk', 'jǝǝ', 'júm', 'sam'],\n    'weekdays_min' => ['sɔ́n', 'lǝn', 'maa', 'mɛk', 'jǝǝ', 'júm', 'sam'],\n    'months' => ['ŋwíí a ntɔ́ntɔ', 'ŋwíí akǝ bɛ́ɛ', 'ŋwíí akǝ ráá', 'ŋwíí akǝ nin', 'ŋwíí akǝ táan', 'ŋwíí akǝ táafɔk', 'ŋwíí akǝ táabɛɛ', 'ŋwíí akǝ táaraa', 'ŋwíí akǝ táanin', 'ŋwíí akǝ ntɛk', 'ŋwíí akǝ ntɛk di bɔ́k', 'ŋwíí akǝ ntɛk di bɛ́ɛ'],\n    'months_short' => ['ŋ1', 'ŋ2', 'ŋ3', 'ŋ4', 'ŋ5', 'ŋ6', 'ŋ7', 'ŋ8', 'ŋ9', 'ŋ10', 'ŋ11', 'ŋ12'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ksh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['v.M.', 'n.M.'],\n    'weekdays' => ['Sunndaach', 'Mohndaach', 'Dinnsdaach', 'Metwoch', 'Dunnersdaach', 'Friidaach', 'Samsdaach'],\n    'weekdays_short' => ['Su.', 'Mo.', 'Di.', 'Me.', 'Du.', 'Fr.', 'Sa.'],\n    'weekdays_min' => ['Su', 'Mo', 'Di', 'Me', 'Du', 'Fr', 'Sa'],\n    'months' => ['Jannewa', 'Fäbrowa', 'Määz', 'Aprell', 'Mai', 'Juuni', 'Juuli', 'Oujoß', 'Septämber', 'Oktohber', 'Novämber', 'Dezämber'],\n    'months_short' => ['Jan', 'Fäb', 'Mäz', 'Apr', 'Mai', 'Jun', 'Jul', 'Ouj', 'Säp', 'Okt', 'Nov', 'Dez'],\n    'months_short_standalone' => ['Jan.', 'Fäb.', 'Mäz.', 'Apr.', 'Mai', 'Jun.', 'Jul.', 'Ouj.', 'Säp.', 'Okt.', 'Nov.', 'Dez.'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D. M. YYYY',\n        'LL' => 'D. MMM. YYYY',\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, [dä] D. MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count Johr',\n    'y' => ':count Johr',\n    'a_year' => ':count Johr',\n\n    'month' => ':count Moohnd',\n    'm' => ':count Moohnd',\n    'a_month' => ':count Moohnd',\n\n    'week' => ':count woch',\n    'w' => ':count woch',\n    'a_week' => ':count woch',\n\n    'day' => ':count Daach',\n    'd' => ':count Daach',\n    'a_day' => ':count Daach',\n\n    'hour' => ':count Uhr',\n    'h' => ':count Uhr',\n    'a_hour' => ':count Uhr',\n\n    'minute' => ':count Menutt',\n    'min' => ':count Menutt',\n    'a_minute' => ':count Menutt',\n\n    'second' => ':count Sekůndt',\n    's' => ':count Sekůndt',\n    'a_second' => ':count Sekůndt',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ku.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Unicode, Inc.\n */\n\nreturn [\n    'ago' => 'berî :time',\n    'from_now' => 'di :time de',\n    'after' => ':time piştî',\n    'before' => ':time berê',\n    'year' => ':count sal',\n    'year_ago' => ':count salê|:count salan',\n    'year_from_now' => 'salekê|:count salan',\n    'month' => ':count meh',\n    'week' => ':count hefte',\n    'day' => ':count roj',\n    'hour' => ':count saet',\n    'minute' => ':count deqîqe',\n    'second' => ':count saniye',\n    'months' => ['rêbendanê', 'reşemiyê', 'adarê', 'avrêlê', 'gulanê', 'pûşperê', 'tîrmehê', 'gelawêjê', 'rezberê', 'kewçêrê', 'sermawezê', 'berfanbarê'],\n    'months_standalone' => ['rêbendan', 'reşemî', 'adar', 'avrêl', 'gulan', 'pûşper', 'tîrmeh', 'gelawêj', 'rezber', 'kewçêr', 'sermawez', 'berfanbar'],\n    'months_short' => ['rêb', 'reş', 'ada', 'avr', 'gul', 'pûş', 'tîr', 'gel', 'rez', 'kew', 'ser', 'ber'],\n    'weekdays' => ['yekşem', 'duşem', 'sêşem', 'çarşem', 'pêncşem', 'în', 'şemî'],\n    'weekdays_short' => ['yş', 'dş', 'sş', 'çş', 'pş', 'în', 'ş'],\n    'weekdays_min' => ['Y', 'D', 'S', 'Ç', 'P', 'Î', 'Ş'],\n    'list' => [', ', ' û '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ku_TR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ku.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/kw_GB.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/kw_GB.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Alastair McKinstry    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['mis Genver', 'mis Hwevrer', 'mis Meurth', 'mis Ebrel', 'mis Me', 'mis Metheven', 'mis Gortheren', 'mis Est', 'mis Gwynngala', 'mis Hedra', 'mis Du', 'mis Kevardhu'],\n    'months_short' => ['Gen', 'Hwe', 'Meu', 'Ebr', 'Me', 'Met', 'Gor', 'Est', 'Gwn', 'Hed', 'Du', 'Kev'],\n    'weekdays' => ['De Sul', 'De Lun', 'De Merth', 'De Merher', 'De Yow', 'De Gwener', 'De Sadorn'],\n    'weekdays_short' => ['Sul', 'Lun', 'Mth', 'Mhr', 'Yow', 'Gwe', 'Sad'],\n    'weekdays_min' => ['Sul', 'Lun', 'Mth', 'Mhr', 'Yow', 'Gwe', 'Sad'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count bledhen',\n    'y' => ':count bledhen',\n    'a_year' => ':count bledhen',\n\n    'month' => ':count mis',\n    'm' => ':count mis',\n    'a_month' => ':count mis',\n\n    'week' => ':count seythen',\n    'w' => ':count seythen',\n    'a_week' => ':count seythen',\n\n    'day' => ':count dydh',\n    'd' => ':count dydh',\n    'a_day' => ':count dydh',\n\n    'hour' => ':count eur',\n    'h' => ':count eur',\n    'a_hour' => ':count eur',\n\n    'minute' => ':count mynysen',\n    'min' => ':count mynysen',\n    'a_minute' => ':count mynysen',\n\n    'second' => ':count pryjwyth',\n    's' => ':count pryjwyth',\n    'a_second' => ':count pryjwyth',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ky.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - acutexyz\n * - Josh Soref\n * - François B\n * - Chyngyz Arystan uulu\n * - Chyngyz\n * - acutexyz\n * - Josh Soref\n * - François B\n * - Chyngyz Arystan uulu\n */\nreturn [\n    'year' => ':count жыл',\n    'a_year' => '{1}бир жыл|:count жыл',\n    'y' => ':count жыл',\n    'month' => ':count ай',\n    'a_month' => '{1}бир ай|:count ай',\n    'm' => ':count ай',\n    'week' => ':count апта',\n    'a_week' => '{1}бир апта|:count апта',\n    'w' => ':count апт.',\n    'day' => ':count күн',\n    'a_day' => '{1}бир күн|:count күн',\n    'd' => ':count күн',\n    'hour' => ':count саат',\n    'a_hour' => '{1}бир саат|:count саат',\n    'h' => ':count саат.',\n    'minute' => ':count мүнөт',\n    'a_minute' => '{1}бир мүнөт|:count мүнөт',\n    'min' => ':count мүн.',\n    'second' => ':count секунд',\n    'a_second' => '{1}бирнече секунд|:count секунд',\n    's' => ':count сек.',\n    'ago' => ':time мурун',\n    'from_now' => ':time ичинде',\n    'diff_now' => 'азыр',\n    'diff_today' => 'Бүгүн',\n    'diff_today_regexp' => 'Бүгүн(?:\\\\s+саат)?',\n    'diff_yesterday' => 'кечээ',\n    'diff_yesterday_regexp' => 'Кече(?:\\\\s+саат)?',\n    'diff_tomorrow' => 'эртең',\n    'diff_tomorrow_regexp' => 'Эртең(?:\\\\s+саат)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Бүгүн саат] LT',\n        'nextDay' => '[Эртең саат] LT',\n        'nextWeek' => 'dddd [саат] LT',\n        'lastDay' => '[Кече саат] LT',\n        'lastWeek' => '[Өткен аптанын] dddd [күнү] [саат] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        static $suffixes = [\n            0 => '-чү',\n            1 => '-чи',\n            2 => '-чи',\n            3 => '-чү',\n            4 => '-чү',\n            5 => '-чи',\n            6 => '-чы',\n            7 => '-чи',\n            8 => '-чи',\n            9 => '-чу',\n            10 => '-чу',\n            20 => '-чы',\n            30 => '-чу',\n            40 => '-чы',\n            50 => '-чү',\n            60 => '-чы',\n            70 => '-чи',\n            80 => '-чи',\n            90 => '-чу',\n            100 => '-чү',\n        ];\n\n        return $number.($suffixes[$number] ?? $suffixes[$number % 10] ?? $suffixes[$number >= 100 ? 100 : -1] ?? '');\n    },\n    'months' => ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'],\n    'months_short' => ['янв', 'фев', 'март', 'апр', 'май', 'июнь', 'июль', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'weekdays' => ['Жекшемби', 'Дүйшөмбү', 'Шейшемби', 'Шаршемби', 'Бейшемби', 'Жума', 'Ишемби'],\n    'weekdays_short' => ['Жек', 'Дүй', 'Шей', 'Шар', 'Бей', 'Жум', 'Ише'],\n    'weekdays_min' => ['Жк', 'Дй', 'Шй', 'Шр', 'Бй', 'Жм', 'Иш'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => ' ',\n    'meridiem' => ['таңкы', 'түштөн кийинки'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ky_KG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ky.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lag.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['TOO', 'MUU'],\n    'weekdays' => ['Jumapíiri', 'Jumatátu', 'Jumaíne', 'Jumatáano', 'Alamíisi', 'Ijumáa', 'Jumamóosi'],\n    'weekdays_short' => ['Píili', 'Táatu', 'Íne', 'Táano', 'Alh', 'Ijm', 'Móosi'],\n    'weekdays_min' => ['Píili', 'Táatu', 'Íne', 'Táano', 'Alh', 'Ijm', 'Móosi'],\n    'months' => ['Kʉfúngatɨ', 'Kʉnaanɨ', 'Kʉkeenda', 'Kwiikumi', 'Kwiinyambála', 'Kwiidwaata', 'Kʉmʉʉnchɨ', 'Kʉvɨɨrɨ', 'Kʉsaatʉ', 'Kwiinyi', 'Kʉsaano', 'Kʉsasatʉ'],\n    'months_short' => ['Fúngatɨ', 'Naanɨ', 'Keenda', 'Ikúmi', 'Inyambala', 'Idwaata', 'Mʉʉnchɨ', 'Vɨɨrɨ', 'Saatʉ', 'Inyi', 'Saano', 'Sasatʉ'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - dan-nl\n * - Simon Lelorrain (slelorrain)\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count Joer',\n    'y' => ':countJ',\n    'month' => ':count Mount|:count Méint',\n    'm' => ':countMo',\n    'week' => ':count Woch|:count Wochen',\n    'w' => ':countWo|:countWo',\n    'day' => ':count Dag|:count Deeg',\n    'd' => ':countD',\n    'hour' => ':count Stonn|:count Stonnen',\n    'h' => ':countSto',\n    'minute' => ':count Minutt|:count Minutten',\n    'min' => ':countM',\n    'second' => ':count Sekonn|:count Sekonnen',\n    's' => ':countSek',\n\n    'ago' => 'virun :time',\n    'from_now' => 'an :time',\n    'before' => ':time virdrun',\n    'after' => ':time duerno',\n\n    'diff_today' => 'Haut',\n    'diff_yesterday' => 'Gëschter',\n    'diff_yesterday_regexp' => 'Gëschter(?:\\\\s+um)?',\n    'diff_tomorrow' => 'Muer',\n    'diff_tomorrow_regexp' => 'Muer(?:\\\\s+um)?',\n    'diff_today_regexp' => 'Haut(?:\\\\s+um)?',\n    'formats' => [\n        'LT' => 'H:mm [Auer]',\n        'LTS' => 'H:mm:ss [Auer]',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY H:mm [Auer]',\n        'LLLL' => 'dddd, D. MMMM YYYY H:mm [Auer]',\n    ],\n\n    'calendar' => [\n        'sameDay' => '[Haut um] LT',\n        'nextDay' => '[Muer um] LT',\n        'nextWeek' => 'dddd [um] LT',\n        'lastDay' => '[Gëschter um] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n            switch ($date->dayOfWeek) {\n                case 2:\n                case 4:\n                    return '[Leschten] dddd [um] LT';\n                default:\n                    return '[Leschte] dddd [um] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n\n    'months' => ['Januar', 'Februar', 'Mäerz', 'Abrëll', 'Mee', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],\n    'months_short' => ['Jan.', 'Febr.', 'Mrz.', 'Abr.', 'Mee', 'Jun.', 'Jul.', 'Aug.', 'Sept.', 'Okt.', 'Nov.', 'Dez.'],\n    'weekdays' => ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],\n    'weekdays_short' => ['So.', 'Mé.', 'Dë.', 'Më.', 'Do.', 'Fr.', 'Sa.'],\n    'weekdays_min' => ['So', 'Mé', 'Dë', 'Më', 'Do', 'Fr', 'Sa'],\n    'ordinal' => ':number.',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' an '],\n    'meridiem' => ['moies', 'mëttes'],\n    'weekdays_short_standalone' => ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],\n    'months_short_standalone' => ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lb_LU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/lb.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/lg_UG.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lg_UG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Akademe ya Luganda Kizito Birabwa kompyuta@kizito.uklinux.net\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Janwaliyo', 'Febwaliyo', 'Marisi', 'Apuli', 'Maayi', 'Juuni', 'Julaayi', 'Agusito', 'Sebuttemba', 'Okitobba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apu', 'Maa', 'Juu', 'Jul', 'Agu', 'Seb', 'Oki', 'Nov', 'Des'],\n    'weekdays' => ['Sabiiti', 'Balaza', 'Lwakubiri', 'Lwakusatu', 'Lwakuna', 'Lwakutaano', 'Lwamukaaga'],\n    'weekdays_short' => ['Sab', 'Bal', 'Lw2', 'Lw3', 'Lw4', 'Lw5', 'Lw6'],\n    'weekdays_min' => ['Sab', 'Bal', 'Lw2', 'Lw3', 'Lw4', 'Lw5', 'Lw6'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'month' => ':count njuba', // less reliable\n    'm' => ':count njuba', // less reliable\n    'a_month' => ':count njuba', // less reliable\n\n    'year' => ':count mwaaka',\n    'y' => ':count mwaaka',\n    'a_year' => ':count mwaaka',\n\n    'week' => ':count sabbiiti',\n    'w' => ':count sabbiiti',\n    'a_week' => ':count sabbiiti',\n\n    'day' => ':count lunaku',\n    'd' => ':count lunaku',\n    'a_day' => ':count lunaku',\n\n    'hour' => 'saawa :count',\n    'h' => 'saawa :count',\n    'a_hour' => 'saawa :count',\n\n    'minute' => 'ddakiika :count',\n    'min' => 'ddakiika :count',\n    'a_minute' => 'ddakiika :count',\n\n    'second' => ':count kyʼokubiri',\n    's' => ':count kyʼokubiri',\n    'a_second' => ':count kyʼokubiri',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/li.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/li_NL.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/li_NL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - information from Kenneth Christiansen Kenneth Christiansen, Pablo Saratxaga kenneth@gnu.org, pablo@mandriva.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['jannewarie', 'fibberwarie', 'miert', 'eprèl', 'meij', 'junie', 'julie', 'augustus', 'september', 'oktober', 'november', 'desember'],\n    'months_short' => ['jan', 'fib', 'mie', 'epr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],\n    'weekdays' => ['zóndig', 'maondig', 'daensdig', 'goonsdig', 'dónderdig', 'vriedig', 'zaoterdig'],\n    'weekdays_short' => ['zón', 'mao', 'dae', 'goo', 'dón', 'vri', 'zao'],\n    'weekdays_min' => ['zón', 'mao', 'dae', 'goo', 'dón', 'vri', 'zao'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'minute' => ':count momênt', // less reliable\n    'min' => ':count momênt', // less reliable\n    'a_minute' => ':count momênt', // less reliable\n\n    'year' => ':count jaor',\n    'y' => ':count jaor',\n    'a_year' => ':count jaor',\n\n    'month' => ':count maond',\n    'm' => ':count maond',\n    'a_month' => ':count maond',\n\n    'week' => ':count waek',\n    'w' => ':count waek',\n    'a_week' => ':count waek',\n\n    'day' => ':count daag',\n    'd' => ':count daag',\n    'a_day' => ':count daag',\n\n    'hour' => ':count oer',\n    'h' => ':count oer',\n    'a_hour' => ':count oer',\n\n    'second' => ':count Secónd',\n    's' => ':count Secónd',\n    'a_second' => ':count Secónd',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lij.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/lij_IT.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lij_IT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Gastaldi    alessio.gastaldi@libero.it\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['zenâ', 'fevrâ', 'marzo', 'avrî', 'mazzo', 'zûgno', 'lûggio', 'agosto', 'settembre', 'ottobre', 'novembre', 'dixembre'],\n    'months_short' => ['zen', 'fev', 'mar', 'arv', 'maz', 'zûg', 'lûg', 'ago', 'set', 'ött', 'nov', 'dix'],\n    'weekdays' => ['domenega', 'lûnedì', 'martedì', 'mercUrdì', 'zêggia', 'venardì', 'sabbo'],\n    'weekdays_short' => ['dom', 'lûn', 'mar', 'mer', 'zêu', 'ven', 'sab'],\n    'weekdays_min' => ['dom', 'lûn', 'mar', 'mer', 'zêu', 'ven', 'sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count etæ', // less reliable\n    'y' => ':count etæ', // less reliable\n    'a_year' => ':count etæ', // less reliable\n\n    'month' => ':count meize',\n    'm' => ':count meize',\n    'a_month' => ':count meize',\n\n    'week' => ':count settemannha',\n    'w' => ':count settemannha',\n    'a_week' => ':count settemannha',\n\n    'day' => ':count giorno',\n    'd' => ':count giorno',\n    'a_day' => ':count giorno',\n\n    'hour' => ':count reléuio', // less reliable\n    'h' => ':count reléuio', // less reliable\n    'a_hour' => ':count reléuio', // less reliable\n\n    'minute' => ':count menûo',\n    'min' => ':count menûo',\n    'a_minute' => ':count menûo',\n\n    'second' => ':count segondo',\n    's' => ':count segondo',\n    'a_second' => ':count segondo',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lkt.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n\n    'month' => ':count haŋwí', // less reliable\n    'm' => ':count haŋwí', // less reliable\n    'a_month' => ':count haŋwí', // less reliable\n\n    'week' => ':count šakówiŋ', // less reliable\n    'w' => ':count šakówiŋ', // less reliable\n    'a_week' => ':count šakówiŋ', // less reliable\n\n    'hour' => ':count maza škaŋškaŋ', // less reliable\n    'h' => ':count maza škaŋškaŋ', // less reliable\n    'a_hour' => ':count maza škaŋškaŋ', // less reliable\n\n    'minute' => ':count číkʼala', // less reliable\n    'min' => ':count číkʼala', // less reliable\n    'a_minute' => ':count číkʼala', // less reliable\n\n    'year' => ':count waníyetu',\n    'y' => ':count waníyetu',\n    'a_year' => ':count waníyetu',\n\n    'day' => ':count aŋpétu',\n    'd' => ':count aŋpétu',\n    'a_day' => ':count aŋpétu',\n\n    'second' => ':count icinuŋpa',\n    's' => ':count icinuŋpa',\n    'a_second' => ':count icinuŋpa',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ln.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ubuntu René Manassé GALEKWA renemanasse@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'months' => ['sánzá ya yambo', 'sánzá ya míbalé', 'sánzá ya mísáto', 'sánzá ya mínei', 'sánzá ya mítáno', 'sánzá ya motóbá', 'sánzá ya nsambo', 'sánzá ya mwambe', 'sánzá ya libwa', 'sánzá ya zómi', 'sánzá ya zómi na mɔ̌kɔ́', 'sánzá ya zómi na míbalé'],\n    'months_short' => ['yan', 'fbl', 'msi', 'apl', 'mai', 'yun', 'yul', 'agt', 'stb', 'ɔtb', 'nvb', 'dsb'],\n    'weekdays' => ['Lomíngo', 'Mosálá mɔ̌kɔ́', 'Misálá míbalé', 'Misálá mísáto', 'Misálá mínei', 'Misálá mítáno', 'Mpɔ́sɔ'],\n    'weekdays_short' => ['m1.', 'm2.', 'm3.', 'm4.', 'm5.', 'm6.', 'm7.'],\n    'weekdays_min' => ['m1.', 'm2.', 'm3.', 'm4.', 'm5.', 'm6.', 'm7.'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => 'mbula :count',\n    'y' => 'mbula :count',\n    'a_year' => 'mbula :count',\n\n    'month' => 'sánzá :count',\n    'm' => 'sánzá :count',\n    'a_month' => 'sánzá :count',\n\n    'week' => 'mpɔ́sɔ :count',\n    'w' => 'mpɔ́sɔ :count',\n    'a_week' => 'mpɔ́sɔ :count',\n\n    'day' => 'mokɔlɔ :count',\n    'd' => 'mokɔlɔ :count',\n    'a_day' => 'mokɔlɔ :count',\n\n    'hour' => 'ngonga :count',\n    'h' => 'ngonga :count',\n    'a_hour' => 'ngonga :count',\n\n    'minute' => 'miniti :count',\n    'min' => 'miniti :count',\n    'a_minute' => 'miniti :count',\n\n    'second' => 'segɔnde :count',\n    's' => 'segɔnde :count',\n    'a_second' => 'segɔnde :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ln_AO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ln.php', [\n    'weekdays' => ['eyenga', 'mokɔlɔ mwa yambo', 'mokɔlɔ mwa míbalé', 'mokɔlɔ mwa mísáto', 'mokɔlɔ ya mínéi', 'mokɔlɔ ya mítáno', 'mpɔ́sɔ'],\n    'weekdays_short' => ['eye', 'ybo', 'mbl', 'mst', 'min', 'mtn', 'mps'],\n    'weekdays_min' => ['eye', 'ybo', 'mbl', 'mst', 'min', 'mtn', 'mps'],\n    'meridiem' => ['ntɔ́ngɔ́', 'mpókwa'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ln_CD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ubuntu René Manassé GALEKWA renemanasse@gmail.com\n */\nreturn require __DIR__.'/ln.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ln_CF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ln.php', [\n    'weekdays' => ['eyenga', 'mokɔlɔ mwa yambo', 'mokɔlɔ mwa míbalé', 'mokɔlɔ mwa mísáto', 'mokɔlɔ ya mínéi', 'mokɔlɔ ya mítáno', 'mpɔ́sɔ'],\n    'weekdays_short' => ['eye', 'ybo', 'mbl', 'mst', 'min', 'mtn', 'mps'],\n    'weekdays_min' => ['eye', 'ybo', 'mbl', 'mst', 'min', 'mtn', 'mps'],\n    'meridiem' => ['ntɔ́ngɔ́', 'mpókwa'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ln_CG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ln.php', [\n    'weekdays' => ['eyenga', 'mokɔlɔ mwa yambo', 'mokɔlɔ mwa míbalé', 'mokɔlɔ mwa mísáto', 'mokɔlɔ ya mínéi', 'mokɔlɔ ya mítáno', 'mpɔ́sɔ'],\n    'weekdays_short' => ['eye', 'ybo', 'mbl', 'mst', 'min', 'mtn', 'mps'],\n    'weekdays_min' => ['eye', 'ybo', 'mbl', 'mst', 'min', 'mtn', 'mps'],\n    'meridiem' => ['ntɔ́ngɔ́', 'mpókwa'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - ryanhart2\n */\nreturn [\n    'year' => ':count ປີ',\n    'y' => ':count ປີ',\n    'month' => ':count ເດືອນ',\n    'm' => ':count ດ. ',\n    'week' => ':count ອາທິດ',\n    'w' => ':count ອທ. ',\n    'day' => ':count ມື້',\n    'd' => ':count ມື້',\n    'hour' => ':count ຊົ່ວໂມງ',\n    'h' => ':count ຊມ. ',\n    'minute' => ':count ນາທີ',\n    'min' => ':count ນທ. ',\n    'second' => '{1}ບໍ່ເທົ່າໃດວິນາທີ|]1,Inf[:count ວິນາທີ',\n    's' => ':count ວິ. ',\n    'ago' => ':timeຜ່ານມາ',\n    'from_now' => 'ອີກ :time',\n    'diff_now' => 'ຕອນນີ້',\n    'diff_today' => 'ມື້ນີ້ເວລາ',\n    'diff_yesterday' => 'ມື້ວານນີ້ເວລາ',\n    'diff_tomorrow' => 'ມື້ອື່ນເວລາ',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'ວັນdddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ມື້ນີ້ເວລາ] LT',\n        'nextDay' => '[ມື້ອື່ນເວລາ] LT',\n        'nextWeek' => '[ວັນ]dddd[ໜ້າເວລາ] LT',\n        'lastDay' => '[ມື້ວານນີ້ເວລາ] LT',\n        'lastWeek' => '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => 'ທີ່:number',\n    'meridiem' => ['ຕອນເຊົ້າ', 'ຕອນແລງ'],\n    'months' => ['ມັງກອນ', 'ກຸມພາ', 'ມີນາ', 'ເມສາ', 'ພຶດສະພາ', 'ມິຖຸນາ', 'ກໍລະກົດ', 'ສິງຫາ', 'ກັນຍາ', 'ຕຸລາ', 'ພະຈິກ', 'ທັນວາ'],\n    'months_short' => ['ມັງກອນ', 'ກຸມພາ', 'ມີນາ', 'ເມສາ', 'ພຶດສະພາ', 'ມິຖຸນາ', 'ກໍລະກົດ', 'ສິງຫາ', 'ກັນຍາ', 'ຕຸລາ', 'ພະຈິກ', 'ທັນວາ'],\n    'weekdays' => ['ອາທິດ', 'ຈັນ', 'ອັງຄານ', 'ພຸດ', 'ພະຫັດ', 'ສຸກ', 'ເສົາ'],\n    'weekdays_short' => ['ທິດ', 'ຈັນ', 'ອັງຄານ', 'ພຸດ', 'ພະຫັດ', 'ສຸກ', 'ເສົາ'],\n    'weekdays_min' => ['ທ', 'ຈ', 'ອຄ', 'ພ', 'ພຫ', 'ສກ', 'ສ'],\n    'list' => [', ', 'ແລະ '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lo_LA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/lo.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lrc.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n\n    'minute' => ':count هنر', // less reliable\n    'min' => ':count هنر', // less reliable\n    'a_minute' => ':count هنر', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lrc_IQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/lrc.php', [\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lt.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - tjku\n * - valdas406\n * - Justas Palumickas\n * - Max Melentiev\n * - Andrius Janauskas\n * - Juanito Fatas\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Nicolás Hock Isaza\n * - Laurynas Butkus\n * - Sven Fuchs\n * - Dominykas Tijūnaitis\n * - Justinas Bolys\n * - Ričardas\n * - Kirill Chalkin\n * - Rolandas\n * - Justinas (Gamesh)\n */\nreturn [\n    'year' => ':count metai|:count metai|:count metų',\n    'y' => ':count m.',\n    'month' => ':count mėnuo|:count mėnesiai|:count mėnesį',\n    'm' => ':count mėn.',\n    'week' => ':count savaitė|:count savaitės|:count savaitę',\n    'w' => ':count sav.',\n    'day' => ':count diena|:count dienos|:count dienų',\n    'd' => ':count d.',\n    'hour' => ':count valanda|:count valandos|:count valandų',\n    'h' => ':count val.',\n    'minute' => ':count minutė|:count minutės|:count minutę',\n    'min' => ':count min.',\n    'second' => ':count sekundė|:count sekundės|:count sekundžių',\n    's' => ':count sek.',\n\n    'year_ago' => ':count metus|:count metus|:count metų',\n    'month_ago' => ':count mėnesį|:count mėnesius|:count mėnesių',\n    'week_ago' => ':count savaitę|:count savaites|:count savaičių',\n    'day_ago' => ':count dieną|:count dienas|:count dienų',\n    'hour_ago' => ':count valandą|:count valandas|:count valandų',\n    'minute_ago' => ':count minutę|:count minutes|:count minučių',\n    'second_ago' => ':count sekundę|:count sekundes|:count sekundžių',\n\n    'year_from_now' => ':count metų',\n    'month_from_now' => ':count mėnesio|:count mėnesių|:count mėnesių',\n    'week_from_now' => ':count savaitės|:count savaičių|:count savaičių',\n    'day_from_now' => ':count dienos|:count dienų|:count dienų',\n    'hour_from_now' => ':count valandos|:count valandų|:count valandų',\n    'minute_from_now' => ':count minutės|:count minučių|:count minučių',\n    'second_from_now' => ':count sekundės|:count sekundžių|:count sekundžių',\n\n    'year_after' => ':count metų',\n    'month_after' => ':count mėnesio|:count mėnesių|:count mėnesių',\n    'week_after' => ':count savaitės|:count savaičių|:count savaičių',\n    'day_after' => ':count dienos|:count dienų|:count dienų',\n    'hour_after' => ':count valandos|:count valandų|:count valandų',\n    'minute_after' => ':count minutės|:count minučių|:count minučių',\n    'second_after' => ':count sekundės|:count sekundžių|:count sekundžių',\n\n    'ago' => 'prieš :time',\n    'from_now' => ':time nuo dabar',\n    'after' => 'po :time',\n    'before' => 'už :time',\n\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'diff_now' => 'ką tik',\n    'diff_today' => 'Šiandien',\n    'diff_yesterday' => 'vakar',\n    'diff_yesterday_regexp' => 'Vakar',\n    'diff_tomorrow' => 'rytoj',\n    'diff_tomorrow_regexp' => 'Rytoj',\n    'diff_before_yesterday' => 'užvakar',\n    'diff_after_tomorrow' => 'poryt',\n\n    'period_recurrences' => 'kartą|:count kartų',\n    'period_interval' => 'kiekvieną :interval',\n    'period_start_date' => 'nuo :date',\n    'period_end_date' => 'iki :date',\n\n    'months' => ['sausio', 'vasario', 'kovo', 'balandžio', 'gegužės', 'birželio', 'liepos', 'rugpjūčio', 'rugsėjo', 'spalio', 'lapkričio', 'gruodžio'],\n    'months_standalone' => ['sausis', 'vasaris', 'kovas', 'balandis', 'gegužė', 'birželis', 'liepa', 'rugpjūtis', 'rugsėjis', 'spalis', 'lapkritis', 'gruodis'],\n    'months_regexp' => '/(L{2,4}|D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?)/',\n    'months_short' => ['sau', 'vas', 'kov', 'bal', 'geg', 'bir', 'lie', 'rgp', 'rgs', 'spa', 'lap', 'gru'],\n    'weekdays' => ['sekmadienį', 'pirmadienį', 'antradienį', 'trečiadienį', 'ketvirtadienį', 'penktadienį', 'šeštadienį'],\n    'weekdays_standalone' => ['sekmadienis', 'pirmadienis', 'antradienis', 'trečiadienis', 'ketvirtadienis', 'penktadienis', 'šeštadienis'],\n    'weekdays_short' => ['sek', 'pir', 'ant', 'tre', 'ket', 'pen', 'šeš'],\n    'weekdays_min' => ['se', 'pi', 'an', 'tr', 'ke', 'pe', 'še'],\n    'list' => [', ', ' ir '],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'MMMM DD, YYYY',\n        'LLL' => 'DD MMM HH:mm',\n        'LLLL' => 'MMMM DD, YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Šiandien] LT',\n        'nextDay' => '[Rytoj] LT',\n        'nextWeek' => 'dddd LT',\n        'lastDay' => '[Vakar] LT',\n        'lastWeek' => '[Paskutinį] dddd LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        switch ($number) {\n            case 0:\n                return '0-is';\n            case 3:\n                return '3-ias';\n            default:\n                return \"$number-as\";\n        }\n    },\n    'meridiem' => ['priešpiet', 'popiet'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lt_LT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/lt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Dinda', 'Dilolo'],\n    'weekdays' => ['Lumingu', 'Nkodya', 'Ndàayà', 'Ndangù', 'Njòwa', 'Ngòvya', 'Lubingu'],\n    'weekdays_short' => ['Lum', 'Nko', 'Ndy', 'Ndg', 'Njw', 'Ngv', 'Lub'],\n    'weekdays_min' => ['Lum', 'Nko', 'Ndy', 'Ndg', 'Njw', 'Ngv', 'Lub'],\n    'months' => ['Ciongo', 'Lùishi', 'Lusòlo', 'Mùuyà', 'Lumùngùlù', 'Lufuimi', 'Kabàlàshìpù', 'Lùshìkà', 'Lutongolo', 'Lungùdi', 'Kaswèkèsè', 'Ciswà'],\n    'months_short' => ['Cio', 'Lui', 'Lus', 'Muu', 'Lum', 'Luf', 'Kab', 'Lush', 'Lut', 'Lun', 'Kas', 'Cis'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/luo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['OD', 'OT'],\n    'weekdays' => ['Jumapil', 'Wuok Tich', 'Tich Ariyo', 'Tich Adek', 'Tich Ang’wen', 'Tich Abich', 'Ngeso'],\n    'weekdays_short' => ['JMP', 'WUT', 'TAR', 'TAD', 'TAN', 'TAB', 'NGS'],\n    'weekdays_min' => ['JMP', 'WUT', 'TAR', 'TAD', 'TAN', 'TAB', 'NGS'],\n    'months' => ['Dwe mar Achiel', 'Dwe mar Ariyo', 'Dwe mar Adek', 'Dwe mar Ang’wen', 'Dwe mar Abich', 'Dwe mar Auchiel', 'Dwe mar Abiriyo', 'Dwe mar Aboro', 'Dwe mar Ochiko', 'Dwe mar Apar', 'Dwe mar gi achiel', 'Dwe mar Apar gi ariyo'],\n    'months_short' => ['DAC', 'DAR', 'DAD', 'DAN', 'DAH', 'DAU', 'DAO', 'DAB', 'DOC', 'DAP', 'DGI', 'DAG'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'year' => 'higni :count',\n    'y' => 'higni :count',\n    'a_year' => ':higni :count',\n\n    'month' => 'dweche :count',\n    'm' => 'dweche :count',\n    'a_month' => 'dweche :count',\n\n    'week' => 'jumbe :count',\n    'w' => 'jumbe :count',\n    'a_week' => 'jumbe :count',\n\n    'day' => 'ndalo :count',\n    'd' => 'ndalo :count',\n    'a_day' => 'ndalo :count',\n\n    'hour' => 'seche :count',\n    'h' => 'seche :count',\n    'a_hour' => 'seche :count',\n\n    'minute' => 'dakika :count',\n    'min' => 'dakika :count',\n    'a_minute' => 'dakika :count',\n\n    'second' => 'nus dakika :count',\n    's' => 'nus dakika :count',\n    'a_second' => 'nus dakika :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/luy.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Jumapiri', 'Jumatatu', 'Jumanne', 'Jumatano', 'Murwa wa Kanne', 'Murwa wa Katano', 'Jumamosi'],\n    'weekdays_short' => ['J2', 'J3', 'J4', 'J5', 'Al', 'Ij', 'J1'],\n    'weekdays_min' => ['J2', 'J3', 'J4', 'J5', 'Al', 'Ij', 'J1'],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprili', 'Mei', 'Juni', 'Julai', 'Agosti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    // Too unreliable\n    /*\n    'year' => ':count liliino', // less reliable\n    'y' => ':count liliino', // less reliable\n    'a_year' => ':count liliino', // less reliable\n\n    'month' => ':count kumwesi', // less reliable\n    'm' => ':count kumwesi', // less reliable\n    'a_month' => ':count kumwesi', // less reliable\n\n    'week' => ':count olutambi', // less reliable\n    'w' => ':count olutambi', // less reliable\n    'a_week' => ':count olutambi', // less reliable\n\n    'day' => ':count luno', // less reliable\n    'd' => ':count luno', // less reliable\n    'a_day' => ':count luno', // less reliable\n\n    'hour' => ':count ekengele', // less reliable\n    'h' => ':count ekengele', // less reliable\n    'a_hour' => ':count ekengele', // less reliable\n\n    'minute' => ':count omundu', // less reliable\n    'min' => ':count omundu', // less reliable\n    'a_minute' => ':count omundu', // less reliable\n\n    'second' => ':count liliino', // less reliable\n    's' => ':count liliino', // less reliable\n    'a_second' => ':count liliino', // less reliable\n    */\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lv.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Carbon\\CarbonInterface;\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - pirminis\n * - Tsutomu Kuroda\n * - tjku\n * - Andris Zāģeris\n * - Max Melentiev\n * - Edgars Beigarts\n * - Juanito Fatas\n * - Vitauts Stočka\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Kaspars Bankovskis\n * - Nicolás Hock Isaza\n * - Viesturs Kavacs (Kavacky)\n * - zakse\n * - Janis Eglitis (janiseglitis)\n * - Guntars\n * - Juris Sudmalis\n */\n$daysOfWeek = ['svētdiena', 'pirmdiena', 'otrdiena', 'trešdiena', 'ceturtdiena', 'piektdiena', 'sestdiena'];\n$daysOfWeekLocativum = ['svētdien', 'pirmdien', 'otrdien', 'trešdien', 'ceturtdien', 'piektdien', 'sestdien'];\n\n$transformDiff = function ($input) {\n    return strtr($input, [\n        // Nominative => \"pirms/pēc\" Dative\n        'gads' => 'gada',\n        'gadi' => 'gadiem',\n        'gadu' => 'gadiem',\n        'mēnesis' => 'mēneša',\n        'mēneši' => 'mēnešiem',\n        'mēnešu' => 'mēnešiem',\n        'nedēļa' => 'nedēļas',\n        'nedēļas' => 'nedēļām',\n        'nedēļu' => 'nedēļām',\n        'diena' => 'dienas',\n        'dienas' => 'dienām',\n        'dienu' => 'dienām',\n        'stunda' => 'stundas',\n        'stundas' => 'stundām',\n        'stundu' => 'stundām',\n        'minūte' => 'minūtes',\n        'minūtes' => 'minūtēm',\n        'minūšu' => 'minūtēm',\n        'sekunde' => 'sekundes',\n        'sekundes' => 'sekundēm',\n        'sekunžu' => 'sekundēm',\n    ]);\n};\n\nreturn [\n    'ago' => function ($time) use ($transformDiff) {\n        return 'pirms '.$transformDiff($time);\n    },\n    'from_now' => function ($time) use ($transformDiff) {\n        return 'pēc '.$transformDiff($time);\n    },\n\n    'year' => '0 gadu|:count gads|:count gadi',\n    'y' => ':count g.',\n    'a_year' => '{1}gads|0 gadu|:count gads|:count gadi',\n    'month' => '0 mēnešu|:count mēnesis|:count mēneši',\n    'm' => ':count mēn.',\n    'a_month' => '{1}mēnesis|0 mēnešu|:count mēnesis|:count mēneši',\n    'week' => '0 nedēļu|:count nedēļa|:count nedēļas',\n    'w' => ':count ned.',\n    'a_week' => '{1}nedēļa|0 nedēļu|:count nedēļa|:count nedēļas',\n    'day' => '0 dienu|:count diena|:count dienas',\n    'd' => ':count d.',\n    'a_day' => '{1}diena|0 dienu|:count diena|:count dienas',\n    'hour' => '0 stundu|:count stunda|:count stundas',\n    'h' => ':count st.',\n    'a_hour' => '{1}stunda|0 stundu|:count stunda|:count stundas',\n    'minute' => '0 minūšu|:count minūte|:count minūtes',\n    'min' => ':count min.',\n    'a_minute' => '{1}minūte|0 minūšu|:count minūte|:count minūtes',\n    'second' => '0 sekunžu|:count sekunde|:count sekundes',\n    's' => ':count sek.',\n    'a_second' => '{1}sekunde|0 sekunžu|:count sekunde|:count sekundes',\n\n    'after' => ':time vēlāk',\n    'year_after' => '0 gadus|:count gadu|:count gadus',\n    'a_year_after' => '{1}gadu|0 gadus|:count gadu|:count gadus',\n    'month_after' => '0 mēnešus|:count mēnesi|:count mēnešus',\n    'a_month_after' => '{1}mēnesi|0 mēnešus|:count mēnesi|:count mēnešus',\n    'week_after' => '0 nedēļas|:count nedēļu|:count nedēļas',\n    'a_week_after' => '{1}nedēļu|0 nedēļas|:count nedēļu|:count nedēļas',\n    'day_after' => '0 dienas|:count dienu|:count dienas',\n    'a_day_after' => '{1}dienu|0 dienas|:count dienu|:count dienas',\n    'hour_after' => '0 stundas|:count stundu|:count stundas',\n    'a_hour_after' => '{1}stundu|0 stundas|:count stundu|:count stundas',\n    'minute_after' => '0 minūtes|:count minūti|:count minūtes',\n    'a_minute_after' => '{1}minūti|0 minūtes|:count minūti|:count minūtes',\n    'second_after' => '0 sekundes|:count sekundi|:count sekundes',\n    'a_second_after' => '{1}sekundi|0 sekundes|:count sekundi|:count sekundes',\n\n    'before' => ':time agrāk',\n    'year_before' => '0 gadus|:count gadu|:count gadus',\n    'a_year_before' => '{1}gadu|0 gadus|:count gadu|:count gadus',\n    'month_before' => '0 mēnešus|:count mēnesi|:count mēnešus',\n    'a_month_before' => '{1}mēnesi|0 mēnešus|:count mēnesi|:count mēnešus',\n    'week_before' => '0 nedēļas|:count nedēļu|:count nedēļas',\n    'a_week_before' => '{1}nedēļu|0 nedēļas|:count nedēļu|:count nedēļas',\n    'day_before' => '0 dienas|:count dienu|:count dienas',\n    'a_day_before' => '{1}dienu|0 dienas|:count dienu|:count dienas',\n    'hour_before' => '0 stundas|:count stundu|:count stundas',\n    'a_hour_before' => '{1}stundu|0 stundas|:count stundu|:count stundas',\n    'minute_before' => '0 minūtes|:count minūti|:count minūtes',\n    'a_minute_before' => '{1}minūti|0 minūtes|:count minūti|:count minūtes',\n    'second_before' => '0 sekundes|:count sekundi|:count sekundes',\n    'a_second_before' => '{1}sekundi|0 sekundes|:count sekundi|:count sekundes',\n\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' un '],\n\n    'diff_now' => 'tagad',\n    'diff_today' => 'šodien',\n    'diff_yesterday' => 'vakar',\n    'diff_before_yesterday' => 'aizvakar',\n    'diff_tomorrow' => 'rīt',\n    'diff_after_tomorrow' => 'parīt',\n\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY.',\n        'LL' => 'YYYY. [gada] D. MMMM',\n        'LLL' => 'DD.MM.YYYY., HH:mm',\n        'LLLL' => 'YYYY. [gada] D. MMMM, HH:mm',\n    ],\n\n    'calendar' => [\n        'sameDay' => '[šodien] [plkst.] LT',\n        'nextDay' => '[rīt] [plkst.] LT',\n        'nextWeek' => function (CarbonInterface $current, CarbonInterface $other) use ($daysOfWeekLocativum) {\n            if ($current->week !== $other->week) {\n                return '[nākošo] ['.$daysOfWeekLocativum[$current->dayOfWeek].'] [plkst.] LT';\n            }\n\n            return '['.$daysOfWeekLocativum[$current->dayOfWeek].'] [plkst.] LT';\n        },\n        'lastDay' => '[vakar] [plkst.] LT',\n        'lastWeek' => function (CarbonInterface $current) use ($daysOfWeekLocativum) {\n            return '[pagājušo] ['.$daysOfWeekLocativum[$current->dayOfWeek].'] [plkst.] LT';\n        },\n        'sameElse' => 'L',\n    ],\n\n    'weekdays' => $daysOfWeek,\n    'weekdays_short' => ['Sv.', 'P.', 'O.', 'T.', 'C.', 'Pk.', 'S.'],\n    'weekdays_min' => ['Sv.', 'P.', 'O.', 'T.', 'C.', 'Pk.', 'S.'],\n    'months' => ['janvāris', 'februāris', 'marts', 'aprīlis', 'maijs', 'jūnijs', 'jūlijs', 'augusts', 'septembris', 'oktobris', 'novembris', 'decembris'],\n    'months_standalone' => ['janvārī', 'februārī', 'martā', 'aprīlī', 'maijā', 'jūnijā', 'jūlijā', 'augustā', 'septembrī', 'oktobrī', 'novembrī', 'decembrī'],\n    'months_short' => ['janv.', 'febr.', 'martā', 'apr.', 'maijā', 'jūn.', 'jūl.', 'aug.', 'sept.', 'okt.', 'nov.', 'dec.'],\n    'meridiem' => ['priekšpusdiena', 'pēcpusdiena'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lv_LV.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/lv.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lzh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/lzh_TW.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/lzh_TW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'OY[年]MMMMOD[日]',\n    ],\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => [' 一 ', ' 二 ', ' 三 ', ' 四 ', ' 五 ', ' 六 ', ' 七 ', ' 八 ', ' 九 ', ' 十 ', '十一', '十二'],\n    'weekdays' => ['週日', '週一', '週二', '週三', '週四', '週五', '週六'],\n    'weekdays_short' => ['日', '一', '二', '三', '四', '五', '六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十', '十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九', '廿', '廿一', '廿二', '廿三', '廿四', '廿五', '廿六', '廿七', '廿八', '廿九', '卅', '卅一'],\n    'meridiem' => ['朝', '暮'],\n\n    'year' => ':count 夏', // less reliable\n    'y' => ':count 夏', // less reliable\n    'a_year' => ':count 夏', // less reliable\n\n    'month' => ':count 月', // less reliable\n    'm' => ':count 月', // less reliable\n    'a_month' => ':count 月', // less reliable\n\n    'hour' => ':count 氧', // less reliable\n    'h' => ':count 氧', // less reliable\n    'a_hour' => ':count 氧', // less reliable\n\n    'minute' => ':count 點', // less reliable\n    'min' => ':count 點', // less reliable\n    'a_minute' => ':count 點', // less reliable\n\n    'second' => ':count 楚', // less reliable\n    's' => ':count 楚', // less reliable\n    'a_second' => ':count 楚', // less reliable\n\n    'week' => ':count 星期',\n    'w' => ':count 星期',\n    'a_week' => ':count 星期',\n\n    'day' => ':count 日(曆法)',\n    'd' => ':count 日(曆法)',\n    'a_day' => ':count 日(曆法)',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mag.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mag_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mag_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bhashaghar@googlegroups.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'months_short' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'weekdays' => ['एतवार', 'सोमार', 'मंगर', 'बुध', 'बिफे', 'सूक', 'सनिचर'],\n    'weekdays_short' => ['एतवार', 'सोमार', 'मंगर', 'बुध', 'बिफे', 'सूक', 'सनिचर'],\n    'weekdays_min' => ['एतवार', 'सोमार', 'मंगर', 'बुध', 'बिफे', 'सूक', 'सनिचर'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mai.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mai_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mai_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Maithili Computing Research Center, Pune, India    rajeshkajha@yahoo.com,akhilesh.k@samusng.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['बैसाख', 'जेठ', 'अषाढ़', 'सावोन', 'भादो', 'आसिन', 'कातिक', 'अगहन', 'पूस', 'माघ', 'फागुन', 'चैति'],\n    'months_short' => ['बैसाख', 'जेठ', 'अषाढ़', 'सावोन', 'भादो', 'आसिन', 'कातिक', 'अगहन', 'पूस', 'माघ', 'फागुन', 'चैति'],\n    'weekdays' => ['रविदिन', 'सोमदिन', 'मंगलदिन', 'बुधदिन', 'बृहस्पतीदिन', 'शुक्रदिन', 'शनीदिन'],\n    'weekdays_short' => ['रवि', 'सोम', 'मंगल', 'बुध', 'बृहस्पती', 'शुक्र', 'शनी'],\n    'weekdays_min' => ['रवि', 'सोम', 'मंगल', 'बुध', 'बृहस्पती', 'शुक्र', 'शनी'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n\n    'year' => ':count ऋतु', // less reliable\n    'y' => ':count ऋतु', // less reliable\n    'a_year' => ':count ऋतु', // less reliable\n\n    'month' => ':count महिना',\n    'm' => ':count महिना',\n    'a_month' => ':count महिना',\n\n    'week' => ':count श्रेणी:क्यालेन्डर', // less reliable\n    'w' => ':count श्रेणी:क्यालेन्डर', // less reliable\n    'a_week' => ':count श्रेणी:क्यालेन्डर', // less reliable\n\n    'day' => ':count दिन',\n    'd' => ':count दिन',\n    'a_day' => ':count दिन',\n\n    'hour' => ':count घण्टा',\n    'h' => ':count घण्टा',\n    'a_hour' => ':count घण्टा',\n\n    'minute' => ':count समय', // less reliable\n    'min' => ':count समय', // less reliable\n    'a_minute' => ':count समय', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mas.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Ɛnkakɛnyá', 'Ɛndámâ'],\n    'weekdays' => ['Jumapílí', 'Jumatátu', 'Jumane', 'Jumatánɔ', 'Alaámisi', 'Jumáa', 'Jumamósi'],\n    'weekdays_short' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'months' => ['Oladalʉ́', 'Arát', 'Ɔɛnɨ́ɔɨŋɔk', 'Olodoyíóríê inkókúâ', 'Oloilépūnyīē inkókúâ', 'Kújúɔrɔk', 'Mórusásin', 'Ɔlɔ́ɨ́bɔ́rárɛ', 'Kúshîn', 'Olgísan', 'Pʉshʉ́ka', 'Ntʉ́ŋʉ́s'],\n    'months_short' => ['Dal', 'Ará', 'Ɔɛn', 'Doy', 'Lép', 'Rok', 'Sás', 'Bɔ́r', 'Kús', 'Gís', 'Shʉ́', 'Ntʉ́'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count olameyu', // less reliable\n    'y' => ':count olameyu', // less reliable\n    'a_year' => ':count olameyu', // less reliable\n\n    'week' => ':count engolongeare orwiki', // less reliable\n    'w' => ':count engolongeare orwiki', // less reliable\n    'a_week' => ':count engolongeare orwiki', // less reliable\n\n    'hour' => ':count esahabu', // less reliable\n    'h' => ':count esahabu', // less reliable\n    'a_hour' => ':count esahabu', // less reliable\n\n    'second' => ':count are', // less reliable\n    's' => ':count are', // less reliable\n    'a_second' => ':count are', // less reliable\n\n    'month' => ':count olapa',\n    'm' => ':count olapa',\n    'a_month' => ':count olapa',\n\n    'day' => ':count enkolongʼ',\n    'd' => ':count enkolongʼ',\n    'a_day' => ':count enkolongʼ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mas_TZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/mas.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mer.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['RŨ', 'ŨG'],\n    'weekdays' => ['Kiumia', 'Muramuko', 'Wairi', 'Wethatu', 'Wena', 'Wetano', 'Jumamosi'],\n    'weekdays_short' => ['KIU', 'MRA', 'WAI', 'WET', 'WEN', 'WTN', 'JUM'],\n    'weekdays_min' => ['KIU', 'MRA', 'WAI', 'WET', 'WEN', 'WTN', 'JUM'],\n    'months' => ['Januarĩ', 'Feburuarĩ', 'Machi', 'Ĩpurũ', 'Mĩĩ', 'Njuni', 'Njuraĩ', 'Agasti', 'Septemba', 'Oktũba', 'Novemba', 'Dicemba'],\n    'months_short' => ['JAN', 'FEB', 'MAC', 'ĨPU', 'MĨĨ', 'NJU', 'NJR', 'AGA', 'SPT', 'OKT', 'NOV', 'DEC'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count murume', // less reliable\n    'y' => ':count murume', // less reliable\n    'a_year' => ':count murume', // less reliable\n\n    'month' => ':count muchaara', // less reliable\n    'm' => ':count muchaara', // less reliable\n    'a_month' => ':count muchaara', // less reliable\n\n    'minute' => ':count monto', // less reliable\n    'min' => ':count monto', // less reliable\n    'a_minute' => ':count monto', // less reliable\n\n    'second' => ':count gikeno', // less reliable\n    's' => ':count gikeno', // less reliable\n    'a_second' => ':count gikeno', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mfe.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mfe_MU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mfe_MU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Samsung Electronics Co., Ltd.    akhilesh.k@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['zanvie', 'fevriye', 'mars', 'avril', 'me', 'zin', 'zilye', 'out', 'septam', 'oktob', 'novam', 'desam'],\n    'months_short' => ['zan', 'fev', 'mar', 'avr', 'me', 'zin', 'zil', 'out', 'sep', 'okt', 'nov', 'des'],\n    'weekdays' => ['dimans', 'lindi', 'mardi', 'merkredi', 'zedi', 'vandredi', 'samdi'],\n    'weekdays_short' => ['dim', 'lin', 'mar', 'mer', 'ze', 'van', 'sam'],\n    'weekdays_min' => ['dim', 'lin', 'mar', 'mer', 'ze', 'van', 'sam'],\n\n    'year' => ':count banané',\n    'y' => ':count banané',\n    'a_year' => ':count banané',\n\n    'month' => ':count mwa',\n    'm' => ':count mwa',\n    'a_month' => ':count mwa',\n\n    'week' => ':count sémenn',\n    'w' => ':count sémenn',\n    'a_week' => ':count sémenn',\n\n    'day' => ':count zour',\n    'd' => ':count zour',\n    'a_day' => ':count zour',\n\n    'hour' => ':count -er-tan',\n    'h' => ':count -er-tan',\n    'a_hour' => ':count -er-tan',\n\n    'minute' => ':count minitt',\n    'min' => ':count minitt',\n    'a_minute' => ':count minitt',\n\n    'second' => ':count déziém',\n    's' => ':count déziém',\n    'a_second' => ':count déziém',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mg_MG.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mg_MG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - The Debian Project modified by GNU//Linux Malagasy Rado Ramarotafika,Do-Risika RAFIEFERANTSIARONJY rado@linuxmg.org,dourix@free.fr\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Janoary', 'Febroary', 'Martsa', 'Aprily', 'Mey', 'Jona', 'Jolay', 'Aogositra', 'Septambra', 'Oktobra', 'Novambra', 'Desambra'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Mey', 'Jon', 'Jol', 'Aog', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['alahady', 'alatsinainy', 'talata', 'alarobia', 'alakamisy', 'zoma', 'sabotsy'],\n    'weekdays_short' => ['lhd', 'lts', 'tlt', 'lrb', 'lkm', 'zom', 'sab'],\n    'weekdays_min' => ['lhd', 'lts', 'tlt', 'lrb', 'lkm', 'zom', 'sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'minute' => ':count minitra', // less reliable\n    'min' => ':count minitra', // less reliable\n    'a_minute' => ':count minitra', // less reliable\n\n    'year' => ':count taona',\n    'y' => ':count taona',\n    'a_year' => ':count taona',\n\n    'month' => ':count volana',\n    'm' => ':count volana',\n    'a_month' => ':count volana',\n\n    'week' => ':count herinandro',\n    'w' => ':count herinandro',\n    'a_week' => ':count herinandro',\n\n    'day' => ':count andro',\n    'd' => ':count andro',\n    'a_day' => ':count andro',\n\n    'hour' => ':count ora',\n    'h' => ':count ora',\n    'a_hour' => ':count ora',\n\n    'second' => ':count segondra',\n    's' => ':count segondra',\n    'a_second' => ':count segondra',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mgh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['wichishu', 'mchochil’l'],\n    'weekdays' => ['Sabato', 'Jumatatu', 'Jumanne', 'Jumatano', 'Arahamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Sab', 'Jtt', 'Jnn', 'Jtn', 'Ara', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Sab', 'Jtt', 'Jnn', 'Jtn', 'Ara', 'Iju', 'Jmo'],\n    'months' => ['Mweri wo kwanza', 'Mweri wo unayeli', 'Mweri wo uneraru', 'Mweri wo unecheshe', 'Mweri wo unethanu', 'Mweri wo thanu na mocha', 'Mweri wo saba', 'Mweri wo nane', 'Mweri wo tisa', 'Mweri wo kumi', 'Mweri wo kumi na moja', 'Mweri wo kumi na yel’li'],\n    'months_short' => ['Kwa', 'Una', 'Rar', 'Che', 'Tha', 'Moc', 'Sab', 'Nan', 'Tis', 'Kum', 'Moj', 'Yel'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mgo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Aneg 1', 'Aneg 2', 'Aneg 3', 'Aneg 4', 'Aneg 5', 'Aneg 6', 'Aneg 7'],\n    'weekdays_short' => ['Aneg 1', 'Aneg 2', 'Aneg 3', 'Aneg 4', 'Aneg 5', 'Aneg 6', 'Aneg 7'],\n    'weekdays_min' => ['1', '2', '3', '4', '5', '6', '7'],\n    'months' => ['iməg mbegtug', 'imeg àbùbì', 'imeg mbəŋchubi', 'iməg ngwə̀t', 'iməg fog', 'iməg ichiibɔd', 'iməg àdùmbə̀ŋ', 'iməg ichika', 'iməg kud', 'iməg tèsiʼe', 'iməg zò', 'iməg krizmed'],\n    'months_short' => ['mbegtug', 'imeg àbùbì', 'imeg mbəŋchubi', 'iməg ngwə̀t', 'iməg fog', 'iməg ichiibɔd', 'iməg àdùmbə̀ŋ', 'iməg ichika', 'iməg kud', 'iməg tèsiʼe', 'iməg zò', 'iməg krizmed'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'dddd, YYYY MMMM DD HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mhr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mhr_RU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mhr_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - PeshSajSoft Ltd. Vyacheslav Kileev slavakileev@yandex.ru\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY.MM.DD',\n    ],\n    'months' => ['Шорыкйол', 'Пургыж', 'Ӱярня', 'Вӱдшор', 'Ага', 'Пеледыш', 'Сӱрем', 'Сорла', 'Идым', 'Шыжа', 'Кылме', 'Теле'],\n    'months_short' => ['Шрк', 'Пгж', 'Ӱрн', 'Вшр', 'Ага', 'Пдш', 'Срм', 'Срл', 'Идм', 'Шыж', 'Клм', 'Тел'],\n    'weekdays' => ['Рушарня', 'Шочмо', 'Кушкыжмо', 'Вӱргече', 'Изарня', 'Кугарня', 'Шуматкече'],\n    'weekdays_short' => ['Ршр', 'Шчм', 'Кжм', 'Вгч', 'Изр', 'Кгр', 'Шмт'],\n    'weekdays_min' => ['Ршр', 'Шчм', 'Кжм', 'Вгч', 'Изр', 'Кгр', 'Шмт'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count идалык',\n    'y' => ':count идалык',\n    'a_year' => ':count идалык',\n\n    'month' => ':count Тылзе',\n    'm' => ':count Тылзе',\n    'a_month' => ':count Тылзе',\n\n    'week' => ':count арня',\n    'w' => ':count арня',\n    'a_week' => ':count арня',\n\n    'day' => ':count кече',\n    'd' => ':count кече',\n    'a_day' => ':count кече',\n\n    'hour' => ':count час',\n    'h' => ':count час',\n    'a_hour' => ':count час',\n\n    'minute' => ':count минут',\n    'min' => ':count минут',\n    'a_minute' => ':count минут',\n\n    'second' => ':count кокымшан',\n    's' => ':count кокымшан',\n    'a_second' => ':count кокымшан',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - John Corrigan\n * - François B\n */\nreturn [\n    'year' => ':count tau',\n    'a_year' => '{1}he tau|:count tau',\n    'month' => ':count marama',\n    'a_month' => '{1}he marama|:count marama',\n    'week' => ':count wiki',\n    'a_week' => '{1}he wiki|:count wiki',\n    'day' => ':count ra',\n    'a_day' => '{1}he ra|:count ra',\n    'hour' => ':count haora',\n    'a_hour' => '{1}te haora|:count haora',\n    'minute' => ':count meneti',\n    'a_minute' => '{1}he meneti|:count meneti',\n    'second' => ':count hēkona',\n    'a_second' => '{1}te hēkona ruarua|:count hēkona',\n    'ago' => ':time i mua',\n    'from_now' => 'i roto i :time',\n    'diff_yesterday' => 'inanahi',\n    'diff_yesterday_regexp' => 'inanahi(?:\\\\s+i)?',\n    'diff_today' => 'i teie',\n    'diff_today_regexp' => 'i teie(?:\\\\s+mahana,)?(?:\\\\s+i)?',\n    'diff_tomorrow' => 'apopo',\n    'diff_tomorrow_regexp' => 'apopo(?:\\\\s+i)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY [i] HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY [i] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[i teie mahana, i] LT',\n        'nextDay' => '[apopo i] LT',\n        'nextWeek' => 'dddd [i] LT',\n        'lastDay' => '[inanahi i] LT',\n        'lastWeek' => 'dddd [whakamutunga i] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberº',\n    'months' => ['Kohi-tāte', 'Hui-tanguru', 'Poutū-te-rangi', 'Paenga-whāwhā', 'Haratua', 'Pipiri', 'Hōngoingoi', 'Here-turi-kōkā', 'Mahuru', 'Whiringa-ā-nuku', 'Whiringa-ā-rangi', 'Hakihea'],\n    'months_short' => ['Kohi', 'Hui', 'Pou', 'Pae', 'Hara', 'Pipi', 'Hōngoi', 'Here', 'Mahu', 'Whi-nu', 'Whi-ra', 'Haki'],\n    'weekdays' => ['Rātapu', 'Mane', 'Tūrei', 'Wenerei', 'Tāite', 'Paraire', 'Hātarei'],\n    'weekdays_short' => ['Ta', 'Ma', 'Tū', 'We', 'Tāi', 'Pa', 'Hā'],\n    'weekdays_min' => ['Ta', 'Ma', 'Tū', 'We', 'Tāi', 'Pa', 'Hā'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' me te '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mi_NZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/mi.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/miq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/miq_NI.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/miq_NI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['siakwa kati', 'kuswa kati', 'kakamuk kati', 'lî wainhka kati', 'lih mairin kati', 'lî kati', 'pastara kati', 'sikla kati', 'wîs kati', 'waupasa kati', 'yahbra kati', 'trisu kati'],\n    'months_short' => ['siakwa kati', 'kuswa kati', 'kakamuk kati', 'lî wainhka kati', 'lih mairin kati', 'lî kati', 'pastara kati', 'sikla kati', 'wîs kati', 'waupasa kati', 'yahbra kati', 'trisu kati'],\n    'weekdays' => ['sandi', 'mundi', 'tiusdi', 'wensde', 'tausde', 'praidi', 'satadi'],\n    'weekdays_short' => ['san', 'mun', 'tius', 'wens', 'taus', 'prai', 'sat'],\n    'weekdays_min' => ['san', 'mun', 'tius', 'wens', 'taus', 'prai', 'sat'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 7,\n    'meridiem' => ['VM', 'NM'],\n\n    'month' => ':count kati', // less reliable\n    'm' => ':count kati', // less reliable\n    'a_month' => ':count kati', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mjw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mjw_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mjw_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Jor Teron    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['Arkoi', 'Thangthang', 'There', 'Jangmi', 'Aru', 'Vosik', 'Jakhong', 'Paipai', 'Chiti', 'Phere', 'Phaikuni', 'Matijong'],\n    'months_short' => ['Ark', 'Thang', 'The', 'Jang', 'Aru', 'Vos', 'Jak', 'Pai', 'Chi', 'Phe', 'Phai', 'Mati'],\n    'weekdays' => ['Bhomkuru', 'Urmi', 'Durmi', 'Thelang', 'Theman', 'Bhomta', 'Bhomti'],\n    'weekdays_short' => ['Bhom', 'Ur', 'Dur', 'Tkel', 'Tkem', 'Bhta', 'Bhti'],\n    'weekdays_min' => ['Bhom', 'Ur', 'Dur', 'Tkel', 'Tkem', 'Bhta', 'Bhti'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mk.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Sashko Todorov\n * - Josh Soref\n * - François B\n * - Serhan Apaydın\n * - Borislav Mickov\n * - JD Isaacks\n * - Tomi Atanasoski\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count година|:count години',\n    'a_year' => 'година|:count години',\n    'y' => ':count год.',\n    'month' => ':count месец|:count месеци',\n    'a_month' => 'месец|:count месеци',\n    'm' => ':count месец|:count месеци',\n    'week' => ':count седмица|:count седмици',\n    'a_week' => 'седмица|:count седмици',\n    'w' => ':count седмица|:count седмици',\n    'day' => ':count ден|:count дена',\n    'a_day' => 'ден|:count дена',\n    'd' => ':count ден|:count дена',\n    'hour' => ':count час|:count часа',\n    'a_hour' => 'час|:count часа',\n    'h' => ':count час|:count часа',\n    'minute' => ':count минута|:count минути',\n    'a_minute' => 'минута|:count минути',\n    'min' => ':count мин.',\n    'second' => ':count секунда|:count секунди',\n    'a_second' => 'неколку секунди|:count секунди',\n    's' => ':count сек.',\n    'ago' => 'пред :time',\n    'from_now' => 'после :time',\n    'after' => 'по :time',\n    'before' => 'пред :time',\n    'diff_now' => 'сега',\n    'diff_today' => 'Денес',\n    'diff_today_regexp' => 'Денес(?:\\\\s+во)?',\n    'diff_yesterday' => 'вчера',\n    'diff_yesterday_regexp' => 'Вчера(?:\\\\s+во)?',\n    'diff_tomorrow' => 'утре',\n    'diff_tomorrow_regexp' => 'Утре(?:\\\\s+во)?',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'D.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Денес во] LT',\n        'nextDay' => '[Утре во] LT',\n        'nextWeek' => '[Во] dddd [во] LT',\n        'lastDay' => '[Вчера во] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                case 3:\n                case 6:\n                    return '[Изминатата] dddd [во] LT';\n                default:\n                    return '[Изминатиот] dddd [во] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        $lastDigit = $number % 10;\n        $last2Digits = $number % 100;\n        if ($number === 0) {\n            return $number.'-ев';\n        }\n        if ($last2Digits === 0) {\n            return $number.'-ен';\n        }\n        if ($last2Digits > 10 && $last2Digits < 20) {\n            return $number.'-ти';\n        }\n        if ($lastDigit === 1) {\n            return $number.'-ви';\n        }\n        if ($lastDigit === 2) {\n            return $number.'-ри';\n        }\n        if ($lastDigit === 7 || $lastDigit === 8) {\n            return $number.'-ми';\n        }\n\n        return $number.'-ти';\n    },\n    'months' => ['јануари', 'февруари', 'март', 'април', 'мај', 'јуни', 'јули', 'август', 'септември', 'октомври', 'ноември', 'декември'],\n    'months_short' => ['јан', 'фев', 'мар', 'апр', 'мај', 'јун', 'јул', 'авг', 'сеп', 'окт', 'ное', 'дек'],\n    'weekdays' => ['недела', 'понеделник', 'вторник', 'среда', 'четврток', 'петок', 'сабота'],\n    'weekdays_short' => ['нед', 'пон', 'вто', 'сре', 'чет', 'пет', 'саб'],\n    'weekdays_min' => ['нe', 'пo', 'вт', 'ср', 'че', 'пе', 'сa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' и '],\n    'meridiem' => ['АМ', 'ПМ'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mk_MK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/mk.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ml.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - JD Isaacks\n */\nreturn [\n    'year' => ':count വർഷം',\n    'a_year' => 'ഒരു വർഷം|:count വർഷം',\n    'month' => ':count മാസം',\n    'a_month' => 'ഒരു മാസം|:count മാസം',\n    'week' => ':count ആഴ്ച',\n    'a_week' => 'ഒരാഴ്ച|:count ആഴ്ച',\n    'day' => ':count ദിവസം',\n    'a_day' => 'ഒരു ദിവസം|:count ദിവസം',\n    'hour' => ':count മണിക്കൂർ',\n    'a_hour' => 'ഒരു മണിക്കൂർ|:count മണിക്കൂർ',\n    'minute' => ':count മിനിറ്റ്',\n    'a_minute' => 'ഒരു മിനിറ്റ്|:count മിനിറ്റ്',\n    'second' => ':count സെക്കൻഡ്',\n    'a_second' => 'അൽപ നിമിഷങ്ങൾ|:count സെക്കൻഡ്',\n    'ago' => ':time മുൻപ്',\n    'from_now' => ':time കഴിഞ്ഞ്',\n    'diff_now' => 'ഇപ്പോൾ',\n    'diff_today' => 'ഇന്ന്',\n    'diff_yesterday' => 'ഇന്നലെ',\n    'diff_tomorrow' => 'നാളെ',\n    'formats' => [\n        'LT' => 'A h:mm -നു',\n        'LTS' => 'A h:mm:ss -നു',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm -നു',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm -നു',\n    ],\n    'calendar' => [\n        'sameDay' => '[ഇന്ന്] LT',\n        'nextDay' => '[നാളെ] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[ഇന്നലെ] LT',\n        'lastWeek' => '[കഴിഞ്ഞ] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'രാത്രി';\n        }\n        if ($hour < 12) {\n            return 'രാവിലെ';\n        }\n        if ($hour < 17) {\n            return 'ഉച്ച കഴിഞ്ഞ്';\n        }\n        if ($hour < 20) {\n            return 'വൈകുന്നേരം';\n        }\n\n        return 'രാത്രി';\n    },\n    'months' => ['ജനുവരി', 'ഫെബ്രുവരി', 'മാർച്ച്', 'ഏപ്രിൽ', 'മേയ്', 'ജൂൺ', 'ജൂലൈ', 'ഓഗസ്റ്റ്', 'സെപ്റ്റംബർ', 'ഒക്ടോബർ', 'നവംബർ', 'ഡിസംബർ'],\n    'months_short' => ['ജനു.', 'ഫെബ്രു.', 'മാർ.', 'ഏപ്രി.', 'മേയ്', 'ജൂൺ', 'ജൂലൈ.', 'ഓഗ.', 'സെപ്റ്റ.', 'ഒക്ടോ.', 'നവം.', 'ഡിസം.'],\n    'weekdays' => ['ഞായറാഴ്ച', 'തിങ്കളാഴ്ച', 'ചൊവ്വാഴ്ച', 'ബുധനാഴ്ച', 'വ്യാഴാഴ്ച', 'വെള്ളിയാഴ്ച', 'ശനിയാഴ്ച'],\n    'weekdays_short' => ['ഞായർ', 'തിങ്കൾ', 'ചൊവ്വ', 'ബുധൻ', 'വ്യാഴം', 'വെള്ളി', 'ശനി'],\n    'weekdays_min' => ['ഞാ', 'തി', 'ചൊ', 'ബു', 'വ്യാ', 'വെ', 'ശ'],\n    'list' => ', ',\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ml_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ml.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - tjku\n * - Max Melentiev\n * - Zolzaya Erdenebaatar\n * - Tom Hughes\n * - Akira Matsuda\n * - Christopher Dell\n * - Michael Kessler\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Nicolás Hock Isaza\n * - Ochirkhuyag\n * - Batmandakh\n * - lucifer-crybaby\n */\nreturn [\n    'year' => ':count жил',\n    'y' => ':count жил',\n    'month' => ':count сар',\n    'm' => ':count сар',\n    'week' => ':count долоо хоног',\n    'w' => ':count долоо хоног',\n    'day' => ':count өдөр',\n    'd' => ':count өдөр',\n    'hour' => ':count цаг',\n    'h' => ':countц',\n    'minute' => ':count минут',\n    'min' => ':countм',\n    'second' => ':count секунд',\n    's' => ':countс',\n\n    'ago_mode' => 'last',\n    'ago' => ':time өмнө',\n    'year_ago' => ':count жилийн',\n    'y_ago' => ':count жилийн',\n    'month_ago' => ':count сарын',\n    'm_ago' => ':count сарын',\n    'day_ago' => ':count хоногийн',\n    'd_ago' => ':count хоногийн',\n    'week_ago' => ':count долоо хоногийн',\n    'w_ago' => ':count долоо хоногийн',\n    'hour_ago' => ':count цагийн',\n    'minute_ago' => ':count минутын',\n    'second_ago' => ':count секундын',\n\n    'from_now_mode' => 'last',\n    'from_now' => 'одоогоос :time',\n    'year_from_now' => ':count жилийн дараа',\n    'y_from_now' => ':count жилийн дараа',\n    'month_from_now' => ':count сарын дараа',\n    'm_from_now' => ':count сарын дараа',\n    'day_from_now' => ':count хоногийн дараа',\n    'd_from_now' => ':count хоногийн дараа',\n    'hour_from_now' => ':count цагийн дараа',\n    'minute_from_now' => ':count минутын дараа',\n    'second_from_now' => ':count секундын дараа',\n\n    'after_mode' => 'last',\n    'after' => ':time дараа',\n    'year_after' => ':count жилийн',\n    'y_after' => ':count жилийн',\n    'month_after' => ':count сарын',\n    'm_after' => ':count сарын',\n    'day_after' => ':count хоногийн',\n    'd_after' => ':count хоногийн',\n    'hour_after' => ':count цагийн',\n    'minute_after' => ':count минутын',\n    'second_after' => ':count секундын',\n\n    'before_mode' => 'last',\n    'before' => ':time өмнө',\n    'year_before' => ':count жилийн',\n    'y_before' => ':count жилийн',\n    'month_before' => ':count сарын',\n    'm_before' => ':count сарын',\n    'day_before' => ':count хоногийн',\n    'd_before' => ':count хоногийн',\n    'hour_before' => ':count цагийн',\n    'minute_before' => ':count минутын',\n    'second_before' => ':count секундын',\n\n    'list' => ', ',\n    'diff_now' => 'одоо',\n    'diff_yesterday' => 'өчигдөр',\n    'diff_tomorrow' => 'маргааш',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'YYYY MMMM DD',\n        'LLL' => 'YY-MM-DD, HH:mm',\n        'LLLL' => 'YYYY MMMM DD, HH:mm',\n    ],\n    'weekdays' => ['Ням', 'Даваа', 'Мягмар', 'Лхагва', 'Пүрэв', 'Баасан', 'Бямба'],\n    'weekdays_short' => ['Ня', 'Да', 'Мя', 'Лх', 'Пү', 'Ба', 'Бя'],\n    'weekdays_min' => ['Ня', 'Да', 'Мя', 'Лх', 'Пү', 'Ба', 'Бя'],\n    'months' => ['1 сар', '2 сар', '3 сар', '4 сар', '5 сар', '6 сар', '7 сар', '8 сар', '9 сар', '10 сар', '11 сар', '12 сар'],\n    'months_short' => ['1 сар', '2 сар', '3 сар', '4 сар', '5 сар', '6 сар', '7 сар', '8 сар', '9 сар', '10 сар', '11 сар', '12 сар'],\n    'meridiem' => ['өглөө', 'орой'],\n    'first_day_of_week' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mn_MN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/mn.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mni.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/mni_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mni_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat Pune    libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['জানুৱারি', 'ফেব্রুৱারি', 'মার্চ', 'এপ্রিল', 'মে', 'জুন', 'জুলাই', 'আগষ্ট', 'সেপ্তেম্বর', 'ওক্তোবর', 'নবেম্বর', 'ডিসেম্বর'],\n    'months_short' => ['জান', 'ফেব', 'মার', 'এপ্রি', 'মে', 'জুন', 'জুল', 'আগ', 'সেপ', 'ওক্ত', 'নবে', 'ডিস'],\n    'weekdays' => ['নোংমাইজিং', 'নিংথৌকাবা', 'লৈবাকপোকপা', 'য়ুমশকৈশা', 'শগোলশেন', 'ইরাই', 'থাংজ'],\n    'weekdays_short' => ['নোং', 'নিং', 'লৈবাক', 'য়ুম', 'শগোল', 'ইরা', 'থাং'],\n    'weekdays_min' => ['নোং', 'নিং', 'লৈবাক', 'য়ুম', 'শগোল', 'ইরা', 'থাং'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['এ.ম.', 'প.ম.'],\n\n    'year' => ':count ইসিং', // less reliable\n    'y' => ':count ইসিং', // less reliable\n    'a_year' => ':count ইসিং', // less reliable\n\n    'second' => ':count ꯅꯤꯡꯊꯧꯀꯥꯕ', // less reliable\n    's' => ':count ꯅꯤꯡꯊꯧꯀꯥꯕ', // less reliable\n    'a_second' => ':count ꯅꯤꯡꯊꯧꯀꯥꯕ', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ro.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Vikram-enyota\n */\nreturn [\n    'year' => ':count वर्ष',\n    'y' => ':count वर्ष',\n    'month' => ':count महिना|:count महिने',\n    'm' => ':count महिना|:count महिने',\n    'week' => ':count आठवडा|:count आठवडे',\n    'w' => ':count आठवडा|:count आठवडे',\n    'day' => ':count दिवस',\n    'd' => ':count दिवस',\n    'hour' => ':count तास',\n    'h' => ':count तास',\n    'minute' => ':count मिनिटे',\n    'min' => ':count मिनिटे',\n    'second' => ':count सेकंद',\n    's' => ':count सेकंद',\n\n    'ago' => ':timeपूर्वी',\n    'from_now' => ':timeमध्ये',\n    'before' => ':timeपूर्वी',\n    'after' => ':timeनंतर',\n\n    'diff_now' => 'आत्ता',\n    'diff_today' => 'आज',\n    'diff_yesterday' => 'काल',\n    'diff_tomorrow' => 'उद्या',\n\n    'formats' => [\n        'LT' => 'A h:mm वाजता',\n        'LTS' => 'A h:mm:ss वाजता',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm वाजता',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm वाजता',\n    ],\n\n    'calendar' => [\n        'sameDay' => '[आज] LT',\n        'nextDay' => '[उद्या] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[काल] LT',\n        'lastWeek' => '[मागील] dddd, LT',\n        'sameElse' => 'L',\n    ],\n\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'रात्री';\n        }\n        if ($hour < 10) {\n            return 'सकाळी';\n        }\n        if ($hour < 17) {\n            return 'दुपारी';\n        }\n        if ($hour < 20) {\n            return 'सायंकाळी';\n        }\n\n        return 'रात्री';\n    },\n\n    'months' => ['जानेवारी', 'फेब्रुवारी', 'मार्च', 'एप्रिल', 'मे', 'जून', 'जुलै', 'ऑगस्ट', 'सप्टेंबर', 'ऑक्टोबर', 'नोव्हेंबर', 'डिसेंबर'],\n    'months_short' => ['जाने.', 'फेब्रु.', 'मार्च.', 'एप्रि.', 'मे.', 'जून.', 'जुलै.', 'ऑग.', 'सप्टें.', 'ऑक्टो.', 'नोव्हें.', 'डिसें.'],\n    'weekdays' => ['रविवार', 'सोमवार', 'मंगळवार', 'बुधवार', 'गुरूवार', 'शुक्रवार', 'शनिवार'],\n    'weekdays_short' => ['रवि', 'सोम', 'मंगळ', 'बुध', 'गुरू', 'शुक्र', 'शनि'],\n    'weekdays_min' => ['र', 'सो', 'मं', 'बु', 'गु', 'शु', 'श'],\n    'list' => [', ', ' आणि '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mr_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/mr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ms.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Azri Jamil\n * - JD Isaacks\n * - Josh Soref\n * - Azri Jamil\n * - Hariadi Hinta\n * - Ashraf Kamarudin\n */\nreturn [\n    'year' => ':count tahun',\n    'a_year' => '{1}setahun|]1,Inf[:count tahun',\n    'y' => ':count tahun',\n    'month' => ':count bulan',\n    'a_month' => '{1}sebulan|]1,Inf[:count bulan',\n    'm' => ':count bulan',\n    'week' => ':count minggu',\n    'a_week' => '{1}seminggu|]1,Inf[:count minggu',\n    'w' => ':count minggu',\n    'day' => ':count hari',\n    'a_day' => '{1}sehari|]1,Inf[:count hari',\n    'd' => ':count hari',\n    'hour' => ':count jam',\n    'a_hour' => '{1}sejam|]1,Inf[:count jam',\n    'h' => ':count jam',\n    'minute' => ':count minit',\n    'a_minute' => '{1}seminit|]1,Inf[:count minit',\n    'min' => ':count minit',\n    'second' => ':count saat',\n    'a_second' => '{1}beberapa saat|]1,Inf[:count saat',\n    'millisecond' => ':count milisaat',\n    'a_millisecond' => '{1}semilisaat|]1,Inf[:count milliseconds',\n    'microsecond' => ':count mikrodetik',\n    'a_microsecond' => '{1}semikrodetik|]1,Inf[:count mikrodetik',\n    's' => ':count saat',\n    'ago' => ':time yang lepas',\n    'from_now' => ':time dari sekarang',\n    'after' => ':time kemudian',\n    'before' => ':time sebelum',\n    'diff_now' => 'sekarang',\n    'diff_today' => 'Hari',\n    'diff_today_regexp' => 'Hari(?:\\\\s+ini)?(?:\\\\s+pukul)?',\n    'diff_yesterday' => 'semalam',\n    'diff_yesterday_regexp' => 'Semalam(?:\\\\s+pukul)?',\n    'diff_tomorrow' => 'esok',\n    'diff_tomorrow_regexp' => 'Esok(?:\\\\s+pukul)?',\n    'diff_before_yesterday' => 'kelmarin',\n    'diff_after_tomorrow' => 'lusa',\n    'formats' => [\n        'LT' => 'HH.mm',\n        'LTS' => 'HH.mm.ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY [pukul] HH.mm',\n        'LLLL' => 'dddd, D MMMM YYYY [pukul] HH.mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Hari ini pukul] LT',\n        'nextDay' => '[Esok pukul] LT',\n        'nextWeek' => 'dddd [pukul] LT',\n        'lastDay' => '[Kelmarin pukul] LT',\n        'lastWeek' => 'dddd [lepas pukul] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 1) {\n            return 'tengah malam';\n        }\n\n        if ($hour < 12) {\n            return 'pagi';\n        }\n\n        if ($hour < 13) {\n            return 'tengah hari';\n        }\n\n        if ($hour < 19) {\n            return 'petang';\n        }\n\n        return 'malam';\n    },\n    'months' => ['Januari', 'Februari', 'Mac', 'April', 'Mei', 'Jun', 'Julai', 'Ogos', 'September', 'Oktober', 'November', 'Disember'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ogs', 'Sep', 'Okt', 'Nov', 'Dis'],\n    'weekdays' => ['Ahad', 'Isnin', 'Selasa', 'Rabu', 'Khamis', 'Jumaat', 'Sabtu'],\n    'weekdays_short' => ['Ahd', 'Isn', 'Sel', 'Rab', 'Kha', 'Jum', 'Sab'],\n    'weekdays_min' => ['Ah', 'Is', 'Sl', 'Rb', 'Km', 'Jm', 'Sb'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' dan '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ms_BN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ms.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/MM/yy',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY, h:mm a',\n        'LLLL' => 'dd MMMM YYYY, h:mm a',\n    ],\n    'meridiem' => ['a', 'p'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ms_MY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Azri Jamil\n * - JD Isaacks\n */\nreturn require __DIR__.'/ms.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ms_SG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ms.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/MM/yy',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY, h:mm a',\n        'LLLL' => 'dddd, D MMMM YYYY, h:mm a',\n    ],\n    'meridiem' => ['a', 'p'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mt.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Alessandro Maruccia\n */\nreturn [\n    'year' => 'sena|:count sni|:count sni|:count sni',\n    'y' => 'sa sena|:count snin|:count snin|:count snin',\n    'month' => 'xahar|:count xhur|:count xhur|:count xhur',\n    'm' => ':count xahar|:count xhur|:count xhur|:count xhur',\n    'week' => 'gimgħa|:count ġimgħat|:count ġimgħat|:count ġimgħat',\n    'w' => 'ġimgħa|:count ġimgħat|:count ġimgħat|:count ġimgħat',\n    'day' => 'ġurnata|:count ġranet|:count ġranet|:count ġranet',\n    'd' => 'ġurnata|:count ġranet|:count ġranet|:count ġranet',\n    'hour' => 'siegħa|:count siegħat|:count siegħat|:count siegħat',\n    'h' => 'siegħa|:count sigħat|:count sigħat|:count sigħat',\n    'minute' => 'minuta|:count minuti|:count minuti|:count minuti',\n    'min' => 'min.|:count min.|:count min.|:count min.',\n    'second' => 'ftit sekondi|:count sekondi|:count sekondi|:count sekondi',\n    's' => 'sek.|:count sek.|:count sek.|:count sek.',\n    'ago' => ':time ilu',\n    'from_now' => 'f’ :time',\n    'diff_now' => 'issa',\n    'diff_today' => 'Illum',\n    'diff_today_regexp' => 'Illum(?:\\\\s+fil-)?',\n    'diff_yesterday' => 'lbieraħ',\n    'diff_yesterday_regexp' => 'Il-bieraħ(?:\\\\s+fil-)?',\n    'diff_tomorrow' => 'għada',\n    'diff_tomorrow_regexp' => 'Għada(?:\\\\s+fil-)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Illum fil-]LT',\n        'nextDay' => '[Għada fil-]LT',\n        'nextWeek' => 'dddd [fil-]LT',\n        'lastDay' => '[Il-bieraħ fil-]LT',\n        'lastWeek' => 'dddd [li għadda] [fil-]LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberº',\n    'months' => ['Jannar', 'Frar', 'Marzu', 'April', 'Mejju', 'Ġunju', 'Lulju', 'Awwissu', 'Settembru', 'Ottubru', 'Novembru', 'Diċembru'],\n    'months_short' => ['Jan', 'Fra', 'Mar', 'Apr', 'Mej', 'Ġun', 'Lul', 'Aww', 'Set', 'Ott', 'Nov', 'Diċ'],\n    'weekdays' => ['Il-Ħadd', 'It-Tnejn', 'It-Tlieta', 'L-Erbgħa', 'Il-Ħamis', 'Il-Ġimgħa', 'Is-Sibt'],\n    'weekdays_short' => ['Ħad', 'Tne', 'Tli', 'Erb', 'Ħam', 'Ġim', 'Sib'],\n    'weekdays_min' => ['Ħa', 'Tn', 'Tl', 'Er', 'Ħa', 'Ġi', 'Si'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' u '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mt_MT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/mt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mua.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['comme', 'lilli'],\n    'weekdays' => ['Com’yakke', 'Comlaaɗii', 'Comzyiiɗii', 'Comkolle', 'Comkaldǝɓlii', 'Comgaisuu', 'Comzyeɓsuu'],\n    'weekdays_short' => ['Cya', 'Cla', 'Czi', 'Cko', 'Cka', 'Cga', 'Cze'],\n    'weekdays_min' => ['Cya', 'Cla', 'Czi', 'Cko', 'Cka', 'Cga', 'Cze'],\n    'months' => ['Fĩi Loo', 'Cokcwaklaŋne', 'Cokcwaklii', 'Fĩi Marfoo', 'Madǝǝuutǝbijaŋ', 'Mamǝŋgwãafahbii', 'Mamǝŋgwãalii', 'Madǝmbii', 'Fĩi Dǝɓlii', 'Fĩi Mundaŋ', 'Fĩi Gwahlle', 'Fĩi Yuru'],\n    'months_short' => ['FLO', 'CLA', 'CKI', 'FMF', 'MAD', 'MBI', 'MLI', 'MAM', 'FDE', 'FMU', 'FGW', 'FYU'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/my.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n * - Nay Lin Aung\n */\nreturn [\n    'year' => '{1}တစ်နှစ်|]1,Inf[:count နှစ်',\n    'y' => ':count နှစ်',\n    'month' => '{1}တစ်လ|]1,Inf[:count လ',\n    'm' => ':count လ',\n    'week' => ':count ပတ်',\n    'w' => ':count ပတ်',\n    'day' => '{1}တစ်ရက်|]1,Inf[:count ရက်',\n    'd' => ':count ရက်',\n    'hour' => '{1}တစ်နာရီ|]1,Inf[:count နာရီ',\n    'h' => ':count နာရီ',\n    'minute' => '{1}တစ်မိနစ်|]1,Inf[:count မိနစ်',\n    'min' => ':count မိနစ်',\n    'second' => '{1}စက္ကန်.အနည်းငယ်|]1,Inf[:count စက္ကန့်',\n    's' => ':count စက္ကန့်',\n    'ago' => 'လွန်ခဲ့သော :time က',\n    'from_now' => 'လာမည့် :time မှာ',\n    'after' => ':time ကြာပြီးနောက်',\n    'before' => ':time မတိုင်ခင်',\n    'diff_now' => 'အခုလေးတင်',\n    'diff_today' => 'ယနေ.',\n    'diff_yesterday' => 'မနေ့က',\n    'diff_yesterday_regexp' => 'မနေ.က',\n    'diff_tomorrow' => 'မနက်ဖြန်',\n    'diff_before_yesterday' => 'တမြန်နေ့က',\n    'diff_after_tomorrow' => 'တဘက်ခါ',\n    'period_recurrences' => ':count ကြိမ်',\n    'formats' => [\n        'LT' => 'Oh:Om A',\n        'LTS' => 'Oh:Om:Os A',\n        'L' => 'OD/OM/OY',\n        'LL' => 'OD MMMM OY',\n        'LLL' => 'OD MMMM OY Oh:Om A',\n        'LLLL' => 'dddd OD MMMM OY Oh:Om A',\n    ],\n    'calendar' => [\n        'sameDay' => '[ယနေ.] LT [မှာ]',\n        'nextDay' => '[မနက်ဖြန်] LT [မှာ]',\n        'nextWeek' => 'dddd LT [မှာ]',\n        'lastDay' => '[မနေ.က] LT [မှာ]',\n        'lastWeek' => '[ပြီးခဲ့သော] dddd LT [မှာ]',\n        'sameElse' => 'L',\n    ],\n    'months' => ['ဇန်နဝါရီ', 'ဖေဖော်ဝါရီ', 'မတ်', 'ဧပြီ', 'မေ', 'ဇွန်', 'ဇူလိုင်', 'သြဂုတ်', 'စက်တင်ဘာ', 'အောက်တိုဘာ', 'နိုဝင်ဘာ', 'ဒီဇင်ဘာ'],\n    'months_short' => ['ဇန်', 'ဖေ', 'မတ်', 'ပြီ', 'မေ', 'ဇွန်', 'လိုင်', 'သြ', 'စက်', 'အောက်', 'နို', 'ဒီ'],\n    'weekdays' => ['တနင်္ဂနွေ', 'တနင်္လာ', 'အင်္ဂါ', 'ဗုဒ္ဓဟူး', 'ကြာသပတေး', 'သောကြာ', 'စနေ'],\n    'weekdays_short' => ['နွေ', 'လာ', 'ဂါ', 'ဟူး', 'ကြာ', 'သော', 'နေ'],\n    'weekdays_min' => ['နွေ', 'လာ', 'ဂါ', 'ဟူး', 'ကြာ', 'သော', 'နေ'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'alt_numbers' => ['၀၀', '၀၁', '၀၂', '၀၃', '၀၄', '၀၅', '၀၆', '၀၇', '၀၈', '၀၉', '၁၀', '၁၁', '၁၂', '၁၃', '၁၄', '၁၅', '၁၆', '၁၇', '၁၈', '၁၉', '၂၀', '၂၁', '၂၂', '၂၃', '၂၄', '၂၅', '၂၆', '၂၇', '၂၈', '၂၉', '၃၀', '၃၁', '၃၂', '၃၃', '၃၄', '၃၅', '၃၆', '၃၇', '၃၈', '၃၉', '၄၀', '၄၁', '၄၂', '၄၃', '၄၄', '၄၅', '၄၆', '၄၇', '၄၈', '၄၉', '၅၀', '၅၁', '၅၂', '၅၃', '၅၄', '၅၅', '၅၆', '၅၇', '၅၈', '၅၉', '၆၀', '၆၁', '၆၂', '၆၃', '၆၄', '၆၅', '၆၆', '၆၇', '၆၈', '၆၉', '၇၀', '၇၁', '၇၂', '၇၃', '၇၄', '၇၅', '၇၆', '၇၇', '၇၈', '၇၉', '၈၀', '၈၁', '၈၂', '၈၃', '၈၄', '၈၅', '၈၆', '၈၇', '၈၈', '၈၉', '၉၀', '၉၁', '၉၂', '၉၃', '၉၄', '၉၅', '၉၆', '၉၇', '၉၈', '၉၉'],\n    'meridiem' => ['နံနက်', 'ညနေ'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/my_MM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/my.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/mzn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fa.php', [\n    'months' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'],\n    'months_short' => ['ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'],\n    'first_day_of_week' => 6,\n    'weekend' => [5, 5],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'YYYY MMMM D, dddd HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nan.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/nan_TW.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nan_TW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY年MM月DD日',\n    ],\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => [' 1月', ' 2月', ' 3月', ' 4月', ' 5月', ' 6月', ' 7月', ' 8月', ' 9月', '10月', '11月', '12月'],\n    'weekdays' => ['禮拜日', '禮拜一', '禮拜二', '禮拜三', '禮拜四', '禮拜五', '禮拜六'],\n    'weekdays_short' => ['日', '一', '二', '三', '四', '五', '六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['頂晡', '下晡'],\n\n    'year' => ':count 年',\n    'y' => ':count 年',\n    'a_year' => ':count 年',\n\n    'month' => ':count goe̍h',\n    'm' => ':count goe̍h',\n    'a_month' => ':count goe̍h',\n\n    'week' => ':count lé-pài',\n    'w' => ':count lé-pài',\n    'a_week' => ':count lé-pài',\n\n    'day' => ':count 日',\n    'd' => ':count 日',\n    'a_day' => ':count 日',\n\n    'hour' => ':count tiám-cheng',\n    'h' => ':count tiám-cheng',\n    'a_hour' => ':count tiám-cheng',\n\n    'minute' => ':count Hun-cheng',\n    'min' => ':count Hun-cheng',\n    'a_minute' => ':count Hun-cheng',\n\n    'second' => ':count Bió',\n    's' => ':count Bió',\n    'a_second' => ':count Bió',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nan_TW@latin.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Arne Goetje arne@canonical.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n    'months' => ['1goe̍h', '2goe̍h', '3goe̍h', '4goe̍h', '5goe̍h', '6goe̍h', '7goe̍h', '8goe̍h', '9goe̍h', '10goe̍h', '11goe̍h', '12goe̍h'],\n    'months_short' => ['1g', '2g', '3g', '4g', '5g', '6g', '7g', '8g', '9g', '10g', '11g', '12g'],\n    'weekdays' => ['lé-pài-ji̍t', 'pài-it', 'pài-jī', 'pài-saⁿ', 'pài-sì', 'pài-gō͘', 'pài-la̍k'],\n    'weekdays_short' => ['lp', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6'],\n    'weekdays_min' => ['lp', 'p1', 'p2', 'p3', 'p4', 'p5', 'p6'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['téng-po͘', 'ē-po͘'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/naq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['ǁgoagas', 'ǃuias'],\n    'weekdays' => ['Sontaxtsees', 'Mantaxtsees', 'Denstaxtsees', 'Wunstaxtsees', 'Dondertaxtsees', 'Fraitaxtsees', 'Satertaxtsees'],\n    'weekdays_short' => ['Son', 'Ma', 'De', 'Wu', 'Do', 'Fr', 'Sat'],\n    'weekdays_min' => ['Son', 'Ma', 'De', 'Wu', 'Do', 'Fr', 'Sat'],\n    'months' => ['ǃKhanni', 'ǃKhanǀgôab', 'ǀKhuuǁkhâb', 'ǃHôaǂkhaib', 'ǃKhaitsâb', 'Gamaǀaeb', 'ǂKhoesaob', 'Aoǁkhuumûǁkhâb', 'Taraǀkhuumûǁkhâb', 'ǂNûǁnâiseb', 'ǀHooǂgaeb', 'Hôasoreǁkhâb'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm a',\n    ],\n\n    'year' => ':count kurigu',\n    'y' => ':count kurigu',\n    'a_year' => ':count kurigu',\n\n    'month' => ':count ǁaub', // less reliable\n    'm' => ':count ǁaub', // less reliable\n    'a_month' => ':count ǁaub', // less reliable\n\n    'week' => ':count hû', // less reliable\n    'w' => ':count hû', // less reliable\n    'a_week' => ':count hû', // less reliable\n\n    'day' => ':count ǀhobas', // less reliable\n    'd' => ':count ǀhobas', // less reliable\n    'a_day' => ':count ǀhobas', // less reliable\n\n    'hour' => ':count ǂgaes', // less reliable\n    'h' => ':count ǂgaes', // less reliable\n    'a_hour' => ':count ǂgaes', // less reliable\n\n    'minute' => ':count minutga', // less reliable\n    'min' => ':count minutga', // less reliable\n    'a_minute' => ':count minutga', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nb.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Alexander Tømmerås\n * - Sigurd Gartmann\n * - JD Isaacks\n */\nreturn [\n    'year' => ':count år|:count år',\n    'a_year' => 'ett år|:count år',\n    'y' => ':count år|:count år',\n    'month' => ':count måned|:count måneder',\n    'a_month' => 'en måned|:count måneder',\n    'm' => ':count md.',\n    'week' => ':count uke|:count uker',\n    'a_week' => 'en uke|:count uker',\n    'w' => ':count u.',\n    'day' => ':count dag|:count dager',\n    'a_day' => 'en dag|:count dager',\n    'd' => ':count d.',\n    'hour' => ':count time|:count timer',\n    'a_hour' => 'en time|:count timer',\n    'h' => ':count t',\n    'minute' => ':count minutt|:count minutter',\n    'a_minute' => 'ett minutt|:count minutter',\n    'min' => ':count min',\n    'second' => ':count sekund|:count sekunder',\n    'a_second' => 'noen sekunder|:count sekunder',\n    's' => ':count sek',\n    'ago' => ':time siden',\n    'from_now' => 'om :time',\n    'after' => ':time etter',\n    'before' => ':time før',\n    'diff_now' => 'akkurat nå',\n    'diff_today' => 'i dag',\n    'diff_today_regexp' => 'i dag(?:\\\\s+kl.)?',\n    'diff_yesterday' => 'i går',\n    'diff_yesterday_regexp' => 'i går(?:\\\\s+kl.)?',\n    'diff_tomorrow' => 'i morgen',\n    'diff_tomorrow_regexp' => 'i morgen(?:\\\\s+kl.)?',\n    'diff_before_yesterday' => 'i forgårs',\n    'diff_after_tomorrow' => 'i overmorgen',\n    'period_recurrences' => 'en gang|:count ganger',\n    'period_interval' => 'hver :interval',\n    'period_start_date' => 'fra :date',\n    'period_end_date' => 'til :date',\n    'months' => ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],\n    'weekdays' => ['søndag', 'mandag', 'tirsdag', 'onsdag', 'torsdag', 'fredag', 'lørdag'],\n    'weekdays_short' => ['søn', 'man', 'tir', 'ons', 'tor', 'fre', 'lør'],\n    'weekdays_min' => ['sø', 'ma', 'ti', 'on', 'to', 'fr', 'lø'],\n    'ordinal' => ':number.',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY [kl.] HH:mm',\n        'LLLL' => 'dddd D. MMMM YYYY [kl.] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[i dag kl.] LT',\n        'nextDay' => '[i morgen kl.] LT',\n        'nextWeek' => 'dddd [kl.] LT',\n        'lastDay' => '[i går kl.] LT',\n        'lastWeek' => '[forrige] dddd [kl.] LT',\n        'sameElse' => 'L',\n    ],\n    'list' => [', ', ' og '],\n    'meridiem' => ['a.m.', 'p.m.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nb_NO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/nb.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nb_SJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/nb.php', [\n    'formats' => [\n        'LL' => 'D. MMM YYYY',\n        'LLL' => 'D. MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd D. MMMM YYYY, HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nd.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Sonto', 'Mvulo', 'Sibili', 'Sithathu', 'Sine', 'Sihlanu', 'Mgqibelo'],\n    'weekdays_short' => ['Son', 'Mvu', 'Sib', 'Sit', 'Sin', 'Sih', 'Mgq'],\n    'weekdays_min' => ['Son', 'Mvu', 'Sib', 'Sit', 'Sin', 'Sih', 'Mgq'],\n    'months' => ['Zibandlela', 'Nhlolanja', 'Mbimbitho', 'Mabasa', 'Nkwenkwezi', 'Nhlangula', 'Ntulikazi', 'Ncwabakazi', 'Mpandula', 'Mfumfu', 'Lwezi', 'Mpalakazi'],\n    'months_short' => ['Zib', 'Nhlo', 'Mbi', 'Mab', 'Nkw', 'Nhla', 'Ntu', 'Ncw', 'Mpan', 'Mfu', 'Lwe', 'Mpal'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n\n    'year' => 'okweminyaka engu-:count', // less reliable\n    'y' => 'okweminyaka engu-:count', // less reliable\n    'a_year' => 'okweminyaka engu-:count', // less reliable\n\n    'month' => 'inyanga ezingu-:count',\n    'm' => 'inyanga ezingu-:count',\n    'a_month' => 'inyanga ezingu-:count',\n\n    'week' => 'amaviki angu-:count',\n    'w' => 'amaviki angu-:count',\n    'a_week' => 'amaviki angu-:count',\n\n    'day' => 'kwamalanga angu-:count',\n    'd' => 'kwamalanga angu-:count',\n    'a_day' => 'kwamalanga angu-:count',\n\n    'hour' => 'amahola angu-:count',\n    'h' => 'amahola angu-:count',\n    'a_hour' => 'amahola angu-:count',\n\n    'minute' => 'imizuzu engu-:count',\n    'min' => 'imizuzu engu-:count',\n    'a_minute' => 'imizuzu engu-:count',\n\n    'second' => 'imizuzwana engu-:count',\n    's' => 'imizuzwana engu-:count',\n    'a_second' => 'imizuzwana engu-:count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nds.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/nds_DE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nds_DE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - information from Kenneth Christiansen Kenneth Christiansen, Pablo Saratxaga kenneth@gnu.org, pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Jannuaar', 'Feberwaar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],\n    'months_short' => ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\n    'weekdays' => ['Sünndag', 'Maandag', 'Dingsdag', 'Middeweek', 'Dunnersdag', 'Freedag', 'Sünnavend'],\n    'weekdays_short' => ['Sdag', 'Maan', 'Ding', 'Midd', 'Dunn', 'Free', 'Svd.'],\n    'weekdays_min' => ['Sd', 'Ma', 'Di', 'Mi', 'Du', 'Fr', 'Sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count Johr',\n    'y' => ':countJ',\n    'a_year' => '{1}een Johr|:count Johr',\n\n    'month' => ':count Maand',\n    'm' => ':countM',\n    'a_month' => '{1}een Maand|:count Maand',\n\n    'week' => ':count Week|:count Weken',\n    'w' => ':countW',\n    'a_week' => '{1}een Week|:count Week|:count Weken',\n\n    'day' => ':count Dag|:count Daag',\n    'd' => ':countD',\n    'a_day' => '{1}een Dag|:count Dag|:count Daag',\n\n    'hour' => ':count Stünn|:count Stünnen',\n    'h' => ':countSt',\n    'a_hour' => '{1}een Stünn|:count Stünn|:count Stünnen',\n\n    'minute' => ':count Minuut|:count Minuten',\n    'min' => ':countm',\n    'a_minute' => '{1}een Minuut|:count Minuut|:count Minuten',\n\n    'second' => ':count Sekunn|:count Sekunnen',\n    's' => ':counts',\n    'a_second' => 'en poor Sekunnen|:count Sekunn|:count Sekunnen',\n\n    'ago' => 'vör :time',\n    'from_now' => 'in :time',\n    'before' => ':time vörher',\n    'after' => ':time later',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nds_NL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - information from Kenneth Christiansen Kenneth Christiansen, Pablo Saratxaga kenneth@gnu.org, pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Jaunuwoa', 'Februwoa', 'Moaz', 'Aprell', 'Mai', 'Juni', 'Juli', 'August', 'Septamba', 'Oktoba', 'Nowamba', 'Dezamba'],\n    'months_short' => ['Jan', 'Feb', 'Moz', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Now', 'Dez'],\n    'weekdays' => ['Sinndag', 'Mondag', 'Dingsdag', 'Meddwäakj', 'Donnadag', 'Friedag', 'Sinnowend'],\n    'weekdays_short' => ['Sdg', 'Mdg', 'Dsg', 'Mwk', 'Ddg', 'Fdg', 'Swd'],\n    'weekdays_min' => ['Sdg', 'Mdg', 'Dsg', 'Mwk', 'Ddg', 'Fdg', 'Swd'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ne.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - nootanghimire\n * - Josh Soref\n * - Nj Subedi\n * - JD Isaacks\n */\nreturn [\n    'year' => 'एक बर्ष|:count बर्ष',\n    'y' => ':count वर्ष',\n    'month' => 'एक महिना|:count महिना',\n    'm' => ':count महिना',\n    'week' => ':count हप्ता',\n    'w' => ':count हप्ता',\n    'day' => 'एक दिन|:count दिन',\n    'd' => ':count दिन',\n    'hour' => 'एक घण्टा|:count घण्टा',\n    'h' => ':count घण्टा',\n    'minute' => 'एक मिनेट|:count मिनेट',\n    'min' => ':count मिनेट',\n    'second' => 'केही क्षण|:count सेकेण्ड',\n    's' => ':count सेकेण्ड',\n    'ago' => ':time अगाडि',\n    'from_now' => ':timeमा',\n    'after' => ':time पछि',\n    'before' => ':time अघि',\n    'diff_now' => 'अहिले',\n    'diff_today' => 'आज',\n    'diff_yesterday' => 'हिजो',\n    'diff_tomorrow' => 'भोलि',\n    'formats' => [\n        'LT' => 'Aको h:mm बजे',\n        'LTS' => 'Aको h:mm:ss बजे',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, Aको h:mm बजे',\n        'LLLL' => 'dddd, D MMMM YYYY, Aको h:mm बजे',\n    ],\n    'calendar' => [\n        'sameDay' => '[आज] LT',\n        'nextDay' => '[भोलि] LT',\n        'nextWeek' => '[आउँदो] dddd[,] LT',\n        'lastDay' => '[हिजो] LT',\n        'lastWeek' => '[गएको] dddd[,] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 3) {\n            return 'राति';\n        }\n        if ($hour < 12) {\n            return 'बिहान';\n        }\n        if ($hour < 16) {\n            return 'दिउँसो';\n        }\n        if ($hour < 20) {\n            return 'साँझ';\n        }\n\n        return 'राति';\n    },\n    'months' => ['जनवरी', 'फेब्रुवरी', 'मार्च', 'अप्रिल', 'मई', 'जुन', 'जुलाई', 'अगष्ट', 'सेप्टेम्बर', 'अक्टोबर', 'नोभेम्बर', 'डिसेम्बर'],\n    'months_short' => ['जन.', 'फेब्रु.', 'मार्च', 'अप्रि.', 'मई', 'जुन', 'जुलाई.', 'अग.', 'सेप्ट.', 'अक्टो.', 'नोभे.', 'डिसे.'],\n    'weekdays' => ['आइतबार', 'सोमबार', 'मङ्गलबार', 'बुधबार', 'बिहिबार', 'शुक्रबार', 'शनिबार'],\n    'weekdays_short' => ['आइत.', 'सोम.', 'मङ्गल.', 'बुध.', 'बिहि.', 'शुक्र.', 'शनि.'],\n    'weekdays_min' => ['आ.', 'सो.', 'मं.', 'बु.', 'बि.', 'शु.', 'श.'],\n    'list' => [', ', ' र '],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ne_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ne.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'yy/M/d',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D, h:mm a',\n        'LLLL' => 'YYYY MMMM D, dddd, h:mm a',\n    ],\n    'months' => ['जनवरी', 'फेब्रुअरी', 'मार्च', 'अप्रिल', 'मे', 'जुन', 'जुलाई', 'अगस्ट', 'सेप्टेम्बर', 'अक्टोबर', 'नोभेम्बर', 'डिसेम्बर'],\n    'months_short' => ['जनवरी', 'फेब्रुअरी', 'मार्च', 'अप्रिल', 'मे', 'जुन', 'जुलाई', 'अगस्ट', 'सेप्टेम्बर', 'अक्टोबर', 'नोभेम्बर', 'डिसेम्बर'],\n    'weekend' => [0, 0],\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ne_NP.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ne.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nhn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/nhn_MX.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nhn_MX.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'],\n    'months_short' => ['ene', 'feb', 'mar', 'abr', 'may', 'jun', 'jul', 'ago', 'sep', 'oct', 'nov', 'dic'],\n    'weekdays' => ['teoilhuitl', 'ceilhuitl', 'omeilhuitl', 'yeilhuitl', 'nahuilhuitl', 'macuililhuitl', 'chicuaceilhuitl'],\n    'weekdays_short' => ['teo', 'cei', 'ome', 'yei', 'nau', 'mac', 'chi'],\n    'weekdays_min' => ['teo', 'cei', 'ome', 'yei', 'nau', 'mac', 'chi'],\n    'day_of_first_week_of_year' => 1,\n\n    'month' => ':count metztli', // less reliable\n    'm' => ':count metztli', // less reliable\n    'a_month' => ':count metztli', // less reliable\n\n    'week' => ':count tonalli', // less reliable\n    'w' => ':count tonalli', // less reliable\n    'a_week' => ':count tonalli', // less reliable\n\n    'day' => ':count tonatih', // less reliable\n    'd' => ':count tonatih', // less reliable\n    'a_day' => ':count tonatih', // less reliable\n\n    'minute' => ':count toltecayotl', // less reliable\n    'min' => ':count toltecayotl', // less reliable\n    'a_minute' => ':count toltecayotl', // less reliable\n\n    'second' => ':count ome', // less reliable\n    's' => ':count ome', // less reliable\n    'a_second' => ':count ome', // less reliable\n\n    'year' => ':count xihuitl',\n    'y' => ':count xihuitl',\n    'a_year' => ':count xihuitl',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/niu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/niu_NU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/niu_NU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RockET Systems Emani Fakaotimanava-Lui emani@niue.nu\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Ianuali', 'Fepuali', 'Masi', 'Apelila', 'Me', 'Iuni', 'Iulai', 'Aokuso', 'Sepetema', 'Oketopa', 'Novema', 'Tesemo'],\n    'months_short' => ['Ian', 'Fep', 'Mas', 'Ape', 'Me', 'Iun', 'Iul', 'Aok', 'Sep', 'Oke', 'Nov', 'Tes'],\n    'weekdays' => ['Aho Tapu', 'Aho Gofua', 'Aho Ua', 'Aho Lotu', 'Aho Tuloto', 'Aho Falaile', 'Aho Faiumu'],\n    'weekdays_short' => ['Tapu', 'Gofua', 'Ua', 'Lotu', 'Tuloto', 'Falaile', 'Faiumu'],\n    'weekdays_min' => ['Tapu', 'Gofua', 'Ua', 'Lotu', 'Tuloto', 'Falaile', 'Faiumu'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count tau',\n    'y' => ':count tau',\n    'a_year' => ':count tau',\n\n    'month' => ':count mahina',\n    'm' => ':count mahina',\n    'a_month' => ':count mahina',\n\n    'week' => ':count faahi tapu',\n    'w' => ':count faahi tapu',\n    'a_week' => ':count faahi tapu',\n\n    'day' => ':count aho',\n    'd' => ':count aho',\n    'a_day' => ':count aho',\n\n    'hour' => ':count e tulā',\n    'h' => ':count e tulā',\n    'a_hour' => ':count e tulā',\n\n    'minute' => ':count minuti',\n    'min' => ':count minuti',\n    'a_minute' => ':count minuti',\n\n    'second' => ':count sekone',\n    's' => ':count sekone',\n    'a_second' => ':count sekone',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Roy\n * - Stephan\n * - François B\n * - Tim Fish\n * - Kevin Huang\n * - Jacob Middag\n * - JD Isaacks\n * - Roy\n * - Stephan\n * - François B\n * - Tim Fish\n * - Jacob Middag\n * - JD Isaacks\n * - Propaganistas\n * - MegaXLR\n * - adriaanzon\n * - MonkeyPhysics\n * - JeroenG\n * - RikSomers\n * - proclame\n * - Rik de Groot (hwdegroot)\n */\nreturn [\n    'year' => ':count jaar|:count jaar',\n    'a_year' => 'een jaar|:count jaar',\n    'y' => ':countj',\n    'month' => ':count maand|:count maanden',\n    'a_month' => 'een maand|:count maanden',\n    'm' => ':countmnd',\n    'week' => ':count week|:count weken',\n    'a_week' => 'een week|:count weken',\n    'w' => ':countw',\n    'day' => ':count dag|:count dagen',\n    'a_day' => 'een dag|:count dagen',\n    'd' => ':countd',\n    'hour' => ':count uur|:count uur',\n    'a_hour' => 'een uur|:count uur',\n    'h' => ':countu',\n    'minute' => ':count minuut|:count minuten',\n    'a_minute' => 'een minuut|:count minuten',\n    'min' => ':countmin',\n    'second' => ':count seconde|:count seconden',\n    'a_second' => 'een paar seconden|:count seconden',\n    's' => ':counts',\n    'ago' => ':time geleden',\n    'from_now' => 'over :time',\n    'after' => ':time later',\n    'before' => ':time eerder',\n    'diff_now' => 'nu',\n    'diff_today' => 'vandaag',\n    'diff_today_regexp' => 'vandaag(?:\\\\s+om)?',\n    'diff_yesterday' => 'gisteren',\n    'diff_yesterday_regexp' => 'gisteren(?:\\\\s+om)?',\n    'diff_tomorrow' => 'morgen',\n    'diff_tomorrow_regexp' => 'morgen(?:\\\\s+om)?',\n    'diff_after_tomorrow' => 'overmorgen',\n    'diff_before_yesterday' => 'eergisteren',\n    'period_recurrences' => ':count keer',\n    'period_interval' => function (string $interval = '') {\n        /** @var string $output */\n        $output = preg_replace('/^(een|één|1)\\s+/u', '', $interval);\n\n        if (preg_match('/^(een|één|1)( jaar|j| uur|u)/u', $interval)) {\n            return \"elk $output\";\n        }\n\n        return \"elke $output\";\n    },\n    'period_start_date' => 'van :date',\n    'period_end_date' => 'tot :date',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD-MM-YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[vandaag om] LT',\n        'nextDay' => '[morgen om] LT',\n        'nextWeek' => 'dddd [om] LT',\n        'lastDay' => '[gisteren om] LT',\n        'lastWeek' => '[afgelopen] dddd [om] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        return $number.(($number === 1 || $number === 8 || $number >= 20) ? 'ste' : 'de');\n    },\n    'months' => ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],\n    'months_short' => ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n    'mmm_suffix' => '.',\n    'weekdays' => ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],\n    'weekdays_short' => ['zo.', 'ma.', 'di.', 'wo.', 'do.', 'vr.', 'za.'],\n    'weekdays_min' => ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' en '],\n    'meridiem' => ['\\'s ochtends', '\\'s middags'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_AW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Free Software Foundation, Inc.    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/nl.php', [\n    'formats' => [\n        'L' => 'DD-MM-YY',\n    ],\n    'months' => ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],\n    'months_short' => ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n    'weekdays' => ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],\n    'weekdays_short' => ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n    'weekdays_min' => ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_BE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Roy\n * - Stephan\n * - François B\n * - Tim Fish\n * - Kevin Huang\n * - Jacob Middag\n * - JD Isaacks\n * - Propaganistas\n */\nreturn array_replace_recursive(require __DIR__.'/nl.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_BQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/nl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_CW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/nl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_NL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/nl.php', [\n    'months' => ['januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],\n    'months_short' => ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n    'weekdays' => ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],\n    'weekdays_short' => ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n    'weekdays_min' => ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_SR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/nl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nl_SX.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/nl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nmg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['maná', 'kugú'],\n    'weekdays' => ['sɔ́ndɔ', 'mɔ́ndɔ', 'sɔ́ndɔ mafú mába', 'sɔ́ndɔ mafú málal', 'sɔ́ndɔ mafú mána', 'mabágá má sukul', 'sásadi'],\n    'weekdays_short' => ['sɔ́n', 'mɔ́n', 'smb', 'sml', 'smn', 'mbs', 'sas'],\n    'weekdays_min' => ['sɔ́n', 'mɔ́n', 'smb', 'sml', 'smn', 'mbs', 'sas'],\n    'months' => ['ngwɛn matáhra', 'ngwɛn ńmba', 'ngwɛn ńlal', 'ngwɛn ńna', 'ngwɛn ńtan', 'ngwɛn ńtuó', 'ngwɛn hɛmbuɛrí', 'ngwɛn lɔmbi', 'ngwɛn rɛbvuâ', 'ngwɛn wum', 'ngwɛn wum navǔr', 'krísimin'],\n    'months_short' => ['ng1', 'ng2', 'ng3', 'ng4', 'ng5', 'ng6', 'ng7', 'ng8', 'ng9', 'ng10', 'ng11', 'kris'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Alexander Tømmerås\n * - Øystein\n * - JD Isaacks\n * - Gaute Hvoslef Kvalnes (gaute)\n */\nreturn [\n    'year' => ':count år',\n    'a_year' => 'eit år|:count år',\n    'y' => ':count år',\n    'month' => ':count månad|:count månader',\n    'a_month' => 'ein månad|:count månader',\n    'm' => ':count md',\n    'week' => ':count veke|:count veker',\n    'a_week' => 'ei veke|:count veker',\n    'w' => ':countv',\n    'day' => ':count dag|:count dagar',\n    'a_day' => 'ein dag|:count dagar',\n    'd' => ':countd',\n    'hour' => ':count time|:count timar',\n    'a_hour' => 'ein time|:count timar',\n    'h' => ':countt',\n    'minute' => ':count minutt',\n    'a_minute' => 'eit minutt|:count minutt',\n    'min' => ':countm',\n    'second' => ':count sekund',\n    'a_second' => 'nokre sekund|:count sekund',\n    's' => ':counts',\n    'ago' => ':time sidan',\n    'from_now' => 'om :time',\n    'after' => ':time etter',\n    'before' => ':time før',\n    'diff_today' => 'I dag',\n    'diff_yesterday' => 'I går',\n    'diff_yesterday_regexp' => 'I går(?:\\\\s+klokka)?',\n    'diff_tomorrow' => 'I morgon',\n    'diff_tomorrow_regexp' => 'I morgon(?:\\\\s+klokka)?',\n    'diff_today_regexp' => 'I dag(?:\\\\s+klokka)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY [kl.] H:mm',\n        'LLLL' => 'dddd D. MMMM YYYY [kl.] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[I dag klokka] LT',\n        'nextDay' => '[I morgon klokka] LT',\n        'nextWeek' => 'dddd [klokka] LT',\n        'lastDay' => '[I går klokka] LT',\n        'lastWeek' => '[Føregåande] dddd [klokka] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'mai', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'des'],\n    'weekdays' => ['sundag', 'måndag', 'tysdag', 'onsdag', 'torsdag', 'fredag', 'laurdag'],\n    'weekdays_short' => ['sun', 'mån', 'tys', 'ons', 'tor', 'fre', 'lau'],\n    'weekdays_min' => ['su', 'må', 'ty', 'on', 'to', 'fr', 'la'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' og '],\n    'meridiem' => ['f.m.', 'e.m.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nn_NO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/nn.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nnh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['mbaʼámbaʼ', 'ncwònzém'],\n    'weekdays' => null,\n    'weekdays_short' => ['lyɛʼɛ́ sẅíŋtè', 'mvfò lyɛ̌ʼ', 'mbɔ́ɔntè mvfò lyɛ̌ʼ', 'tsètsɛ̀ɛ lyɛ̌ʼ', 'mbɔ́ɔntè tsetsɛ̀ɛ lyɛ̌ʼ', 'mvfò màga lyɛ̌ʼ', 'màga lyɛ̌ʼ'],\n    'weekdays_min' => null,\n    'months' => null,\n    'months_short' => ['saŋ tsetsɛ̀ɛ lùm', 'saŋ kàg ngwóŋ', 'saŋ lepyè shúm', 'saŋ cÿó', 'saŋ tsɛ̀ɛ cÿó', 'saŋ njÿoláʼ', 'saŋ tyɛ̀b tyɛ̀b mbʉ̀ŋ', 'saŋ mbʉ̀ŋ', 'saŋ ngwɔ̀ʼ mbÿɛ', 'saŋ tàŋa tsetsáʼ', 'saŋ mejwoŋó', 'saŋ lùm'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/yy',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => '[lyɛ]̌ʼ d [na] MMMM, YYYY HH:mm',\n        'LLLL' => 'dddd , [lyɛ]̌ʼ d [na] MMMM, YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/no.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Daniel S. Billing\n * - Paul\n * - Jimmie Johansson\n * - Jens Herlevsen\n */\nreturn array_replace_recursive(require __DIR__.'/nb.php', [\n    'formats' => [\n        'LLL' => 'D. MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY [kl.] HH:mm',\n    ],\n    'calendar' => [\n        'nextWeek' => 'på dddd [kl.] LT',\n        'lastWeek' => '[i] dddd[s kl.] LT',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/nr_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nr_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Janabari', 'uFeberbari', 'uMatjhi', 'u-Apreli', 'Meyi', 'Juni', 'Julayi', 'Arhostosi', 'Septemba', 'Oktoba', 'Usinyikhaba', 'Disemba'],\n    'months_short' => ['Jan', 'Feb', 'Mat', 'Apr', 'Mey', 'Jun', 'Jul', 'Arh', 'Sep', 'Okt', 'Usi', 'Dis'],\n    'weekdays' => ['uSonto', 'uMvulo', 'uLesibili', 'lesithathu', 'uLesine', 'ngoLesihlanu', 'umGqibelo'],\n    'weekdays_short' => ['Son', 'Mvu', 'Bil', 'Tha', 'Ne', 'Hla', 'Gqi'],\n    'weekdays_min' => ['Son', 'Mvu', 'Bil', 'Tha', 'Ne', 'Hla', 'Gqi'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nso.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/nso_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nso_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Janaware', 'Febereware', 'Matšhe', 'Aprele', 'Mei', 'June', 'Julae', 'Agostose', 'Setemere', 'Oktobere', 'Nofemere', 'Disemere'],\n    'months_short' => ['Jan', 'Feb', 'Mat', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Set', 'Okt', 'Nof', 'Dis'],\n    'weekdays' => ['LaMorena', 'Mošupologo', 'Labobedi', 'Laboraro', 'Labone', 'Labohlano', 'Mokibelo'],\n    'weekdays_short' => ['Son', 'Moš', 'Bed', 'Rar', 'Ne', 'Hla', 'Mok'],\n    'weekdays_min' => ['Son', 'Moš', 'Bed', 'Rar', 'Ne', 'Hla', 'Mok'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count ngwaga',\n    'y' => ':count ngwaga',\n    'a_year' => ':count ngwaga',\n\n    'month' => ':count Kgwedi',\n    'm' => ':count Kgwedi',\n    'a_month' => ':count Kgwedi',\n\n    'week' => ':count Beke',\n    'w' => ':count Beke',\n    'a_week' => ':count Beke',\n\n    'day' => ':count Letšatši',\n    'd' => ':count Letšatši',\n    'a_day' => ':count Letšatši',\n\n    'hour' => ':count Iri',\n    'h' => ':count Iri',\n    'a_hour' => ':count Iri',\n\n    'minute' => ':count Motsotso',\n    'min' => ':count Motsotso',\n    'a_minute' => ':count Motsotso',\n\n    'second' => ':count motsotswana',\n    's' => ':count motsotswana',\n    'a_second' => ':count motsotswana',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nus.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['RW', 'TŊ'],\n    'weekdays' => ['Cäŋ kuɔth', 'Jiec la̱t', 'Rɛw lätni', 'Diɔ̱k lätni', 'Ŋuaan lätni', 'Dhieec lätni', 'Bäkɛl lätni'],\n    'weekdays_short' => ['Cäŋ', 'Jiec', 'Rɛw', 'Diɔ̱k', 'Ŋuaan', 'Dhieec', 'Bäkɛl'],\n    'weekdays_min' => ['Cäŋ', 'Jiec', 'Rɛw', 'Diɔ̱k', 'Ŋuaan', 'Dhieec', 'Bäkɛl'],\n    'months' => ['Tiop thar pɛt', 'Pɛt', 'Duɔ̱ɔ̱ŋ', 'Guak', 'Duät', 'Kornyoot', 'Pay yie̱tni', 'Tho̱o̱r', 'Tɛɛr', 'Laath', 'Kur', 'Tio̱p in di̱i̱t'],\n    'months_short' => ['Tiop', 'Pɛt', 'Duɔ̱ɔ̱', 'Guak', 'Duä', 'Kor', 'Pay', 'Thoo', 'Tɛɛ', 'Laa', 'Kur', 'Tid'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd D MMMM YYYY h:mm a',\n    ],\n\n    'year' => ':count jiök', // less reliable\n    'y' => ':count jiök', // less reliable\n    'a_year' => ':count jiök', // less reliable\n\n    'month' => ':count pay', // less reliable\n    'm' => ':count pay', // less reliable\n    'a_month' => ':count pay', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/nyn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Sande', 'Orwokubanza', 'Orwakabiri', 'Orwakashatu', 'Orwakana', 'Orwakataano', 'Orwamukaaga'],\n    'weekdays_short' => ['SAN', 'ORK', 'OKB', 'OKS', 'OKN', 'OKT', 'OMK'],\n    'weekdays_min' => ['SAN', 'ORK', 'OKB', 'OKS', 'OKN', 'OKT', 'OMK'],\n    'months' => ['Okwokubanza', 'Okwakabiri', 'Okwakashatu', 'Okwakana', 'Okwakataana', 'Okwamukaaga', 'Okwamushanju', 'Okwamunaana', 'Okwamwenda', 'Okwaikumi', 'Okwaikumi na kumwe', 'Okwaikumi na ibiri'],\n    'months_short' => ['KBZ', 'KBR', 'KST', 'KKN', 'KTN', 'KMK', 'KMS', 'KMN', 'KMW', 'KKM', 'KNK', 'KNB'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/oc.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Quentí\n */\n// @codeCoverageIgnoreStart\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\nif (class_exists('Symfony\\\\Component\\\\Translation\\\\PluralizationRules')) {\n    PluralizationRules::set(static function ($number) {\n        return $number == 1 ? 0 : 1;\n    }, 'oc');\n}\n// @codeCoverageIgnoreEnd\n\nreturn [\n    'year' => ':count an|:count ans',\n    'a_year' => 'un an|:count ans',\n    'y' => ':count an|:count ans',\n    'month' => ':count mes|:count meses',\n    'a_month' => 'un mes|:count meses',\n    'm' => ':count mes|:count meses',\n    'week' => ':count setmana|:count setmanas',\n    'a_week' => 'una setmana|:count setmanas',\n    'w' => ':count setmana|:count setmanas',\n    'day' => ':count jorn|:count jorns',\n    'a_day' => 'un jorn|:count jorns',\n    'd' => ':count jorn|:count jorns',\n    'hour' => ':count ora|:count oras',\n    'a_hour' => 'una ora|:count oras',\n    'h' => ':count ora|:count oras',\n    'minute' => ':count minuta|:count minutas',\n    'a_minute' => 'una minuta|:count minutas',\n    'min' => ':count minuta|:count minutas',\n    'second' => ':count segonda|:count segondas',\n    'a_second' => 'una segonda|:count segondas',\n    's' => ':count segonda|:count segondas',\n    'ago' => 'fa :time',\n    'from_now' => 'd\\'aquí :time',\n    'after' => ':time aprèp',\n    'before' => ':time abans',\n    'diff_now' => 'ara meteis',\n    'diff_today' => 'Uèi',\n    'diff_today_regexp' => 'Uèi(?:\\\\s+a)?',\n    'diff_yesterday' => 'ièr',\n    'diff_yesterday_regexp' => 'Ièr(?:\\\\s+a)?',\n    'diff_tomorrow' => 'deman',\n    'diff_tomorrow_regexp' => 'Deman(?:\\\\s+a)?',\n    'diff_before_yesterday' => 'ièr delà',\n    'diff_after_tomorrow' => 'deman passat',\n    'period_recurrences' => ':count còp|:count còps',\n    'period_interval' => 'cada :interval',\n    'period_start_date' => 'de :date',\n    'period_end_date' => 'fins a :date',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM [de] YYYY',\n        'LLL' => 'D MMMM [de] YYYY [a] H:mm',\n        'LLLL' => 'dddd D MMMM [de] YYYY [a] H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Uèi a] LT',\n        'nextDay' => '[Deman a] LT',\n        'nextWeek' => 'dddd [a] LT',\n        'lastDay' => '[Ièr a] LT',\n        'lastWeek' => 'dddd [passat a] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['de genièr', 'de febrièr', 'de març', 'd\\'abrial', 'de mai', 'de junh', 'de julhet', 'd\\'agost', 'de setembre', 'd’octòbre', 'de novembre', 'de decembre'],\n    'months_standalone' => ['genièr', 'febrièr', 'març', 'abrial', 'mai', 'junh', 'julh', 'agost', 'setembre', 'octòbre', 'novembre', 'decembre'],\n    'months_short' => ['gen.', 'feb.', 'març', 'abr.', 'mai', 'junh', 'julh', 'ago.', 'sep.', 'oct.', 'nov.', 'dec.'],\n    'weekdays' => ['dimenge', 'diluns', 'dimars', 'dimècres', 'dijòus', 'divendres', 'dissabte'],\n    'weekdays_short' => ['dg', 'dl', 'dm', 'dc', 'dj', 'dv', 'ds'],\n    'weekdays_min' => ['dg', 'dl', 'dm', 'dc', 'dj', 'dv', 'ds'],\n    'ordinal' => function ($number, string $period = '') {\n        $ordinal = [1 => 'èr', 2 => 'nd'][(int) $number] ?? 'en';\n\n        // feminine for year, week, hour, minute, second\n        if (preg_match('/^[yYwWhHgGis]$/', $period)) {\n            $ordinal .= 'a';\n        }\n\n        return $number.$ordinal;\n    },\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' e '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/oc_FR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/oc.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/om.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation & Sagalee Oromoo Publishing Co. Inc.    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'dd-MMM-YYYY',\n        'LLL' => 'dd MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, MMMM D, YYYY HH:mm',\n    ],\n    'months' => ['Amajjii', 'Guraandhala', 'Bitooteessa', 'Elba', 'Caamsa', 'Waxabajjii', 'Adooleessa', 'Hagayya', 'Fuulbana', 'Onkololeessa', 'Sadaasa', 'Muddee'],\n    'months_short' => ['Ama', 'Gur', 'Bit', 'Elb', 'Cam', 'Wax', 'Ado', 'Hag', 'Ful', 'Onk', 'Sad', 'Mud'],\n    'weekdays' => ['Dilbata', 'Wiixata', 'Qibxata', 'Roobii', 'Kamiisa', 'Jimaata', 'Sanbata'],\n    'weekdays_short' => ['Dil', 'Wix', 'Qib', 'Rob', 'Kam', 'Jim', 'San'],\n    'weekdays_min' => ['Dil', 'Wix', 'Qib', 'Rob', 'Kam', 'Jim', 'San'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['WD', 'WB'],\n\n    'year' => 'wggoota :count',\n    'y' => 'wggoota :count',\n    'a_year' => 'wggoota :count',\n\n    'month' => 'ji’a :count',\n    'm' => 'ji’a :count',\n    'a_month' => 'ji’a :count',\n\n    'week' => 'torban :count',\n    'w' => 'torban :count',\n    'a_week' => 'torban :count',\n\n    'day' => 'guyyaa :count',\n    'd' => 'guyyaa :count',\n    'a_day' => 'guyyaa :count',\n\n    'hour' => 'saʼaatii :count',\n    'h' => 'saʼaatii :count',\n    'a_hour' => 'saʼaatii :count',\n\n    'minute' => 'daqiiqaa :count',\n    'min' => 'daqiiqaa :count',\n    'a_minute' => 'daqiiqaa :count',\n\n    'second' => 'sekoondii :count',\n    's' => 'sekoondii :count',\n    'a_second' => 'sekoondii :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/om_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/om.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/om_KE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/om.php', [\n    'day_of_first_week_of_year' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/or.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/or_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/or_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM AP Linux Technology Center, Yamato Software Laboratory    bug-glibc@gnu.org\n */\nreturn [\n    'diff_now' => 'ବର୍ତ୍ତମାନ',\n    'diff_yesterday' => 'ଗତକାଲି',\n    'diff_tomorrow' => 'ଆସନ୍ତାକାଲି',\n    'formats' => [\n        'LT' => 'Oh:Om A',\n        'LTS' => 'Oh:Om:Os A',\n        'L' => 'OD-OM-OY',\n        'LL' => 'OD MMMM OY',\n        'LLL' => 'OD MMMM OY Oh:Om A',\n        'LLLL' => 'dddd OD MMMM OY Oh:Om A',\n    ],\n    'months' => ['ଜାନୁଆରୀ', 'ଫେବୃଆରୀ', 'ମାର୍ଚ୍ଚ', 'ଅପ୍ରେଲ', 'ମଇ', 'ଜୁନ', 'ଜୁଲାଇ', 'ଅଗଷ୍ଟ', 'ସେପ୍ଟେମ୍ବର', 'ଅକ୍ଟୋବର', 'ନଭେମ୍ବର', 'ଡିସେମ୍ବର'],\n    'months_short' => ['ଜାନୁଆରୀ', 'ଫେବୃଆରୀ', 'ମାର୍ଚ୍ଚ', 'ଅପ୍ରେଲ', 'ମଇ', 'ଜୁନ', 'ଜୁଲାଇ', 'ଅଗଷ୍ଟ', 'ସେପ୍ଟେମ୍ବର', 'ଅକ୍ଟୋବର', 'ନଭେମ୍ବର', 'ଡିସେମ୍ବର'],\n    'weekdays' => ['ରବିବାର', 'ସୋମବାର', 'ମଙ୍ଗଳବାର', 'ବୁଧବାର', 'ଗୁରୁବାର', 'ଶୁକ୍ରବାର', 'ଶନିବାର'],\n    'weekdays_short' => ['ରବି', 'ସୋମ', 'ମଙ୍ଗଳ', 'ବୁଧ', 'ଗୁରୁ', 'ଶୁକ୍ର', 'ଶନି'],\n    'weekdays_min' => ['ରବି', 'ସୋମ', 'ମଙ୍ଗଳ', 'ବୁଧ', 'ଗୁରୁ', 'ଶୁକ୍ର', 'ଶନି'],\n    'day_of_first_week_of_year' => 1,\n    'alt_numbers' => ['୦', '୧', '୨', '୩', '୪', '୫', '୬', '୭', '୮', '୯', '୧୦', '୧୧', '୧୨', '୧୩', '୧୪', '୧୫', '୧୬', '୧୭', '୧୮', '୧୯', '୨୦', '୨୧', '୨୨', '୨୩', '୨୪', '୨୫', '୨୬', '୨୭', '୨୮', '୨୯', '୩୦', '୩୧', '୩୨', '୩୩', '୩୪', '୩୫', '୩୬', '୩୭', '୩୮', '୩୯', '୪୦', '୪୧', '୪୨', '୪୩', '୪୪', '୪୫', '୪୬', '୪୭', '୪୮', '୪୯', '୫୦', '୫୧', '୫୨', '୫୩', '୫୪', '୫୫', '୫୬', '୫୭', '୫୮', '୫୯', '୬୦', '୬୧', '୬୨', '୬୩', '୬୪', '୬୫', '୬୬', '୬୭', '୬୮', '୬୯', '୭୦', '୭୧', '୭୨', '୭୩', '୭୪', '୭୫', '୭୬', '୭୭', '୭୮', '୭୯', '୮୦', '୮୧', '୮୨', '୮୩', '୮୪', '୮୫', '୮୬', '୮୭', '୮୮', '୮୯', '୯୦', '୯୧', '୯୨', '୯୩', '୯୪', '୯୫', '୯୬', '୯୭', '୯୮', '୯୯'],\n    'year' => ':count ବର୍ଷ',\n    'y' => ':count ବ.',\n    'month' => ':count ମାସ',\n    'm' => ':count ମା.',\n    'week' => ':count ସପ୍ତାହ',\n    'w' => ':count ସପ୍ତା.',\n    'day' => ':count ଦିନ',\n    'd' => ':count ଦିନ',\n    'hour' => ':count ଘଣ୍ତ',\n    'h' => ':count ଘ.',\n    'minute' => ':count ମିନଟ',\n    'min' => ':count ମି.',\n    'second' => ':count ସେକଣ୍ଢ',\n    's' => ':count ସେ.',\n    'ago' => ':time ପୂର୍ବେ',\n    'from_now' => ':timeରେ',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/os.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/os_RU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/os_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['январы', 'февралы', 'мартъийы', 'апрелы', 'майы', 'июны', 'июлы', 'августы', 'сентябры', 'октябры', 'ноябры', 'декабры'],\n    'months_short' => ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],\n    'weekdays' => ['Хуыцаубон', 'Къуырисæр', 'Дыццæг', 'Æртыццæг', 'Цыппæрæм', 'Майрæмбон', 'Сабат'],\n    'weekdays_short' => ['Хцб', 'Крс', 'Дцг', 'Æрт', 'Цпр', 'Мрб', 'Сбт'],\n    'weekdays_min' => ['Хцб', 'Крс', 'Дцг', 'Æрт', 'Цпр', 'Мрб', 'Сбт'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'minute' => ':count гыццыл', // less reliable\n    'min' => ':count гыццыл', // less reliable\n    'a_minute' => ':count гыццыл', // less reliable\n\n    'second' => ':count æндæр', // less reliable\n    's' => ':count æндæр', // less reliable\n    'a_second' => ':count æндæр', // less reliable\n\n    'year' => ':count аз',\n    'y' => ':count аз',\n    'a_year' => ':count аз',\n\n    'month' => ':count мӕй',\n    'm' => ':count мӕй',\n    'a_month' => ':count мӕй',\n\n    'week' => ':count къуыри',\n    'w' => ':count къуыри',\n    'a_week' => ':count къуыри',\n\n    'day' => ':count бон',\n    'd' => ':count бон',\n    'a_day' => ':count бон',\n\n    'hour' => ':count сахат',\n    'h' => ':count сахат',\n    'a_hour' => ':count сахат',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pa.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - Punjab\n */\nreturn [\n    'year' => 'ਇੱਕ ਸਾਲ|:count ਸਾਲ',\n    'month' => 'ਇੱਕ ਮਹੀਨਾ|:count ਮਹੀਨੇ',\n    'week' => 'ਹਫਤਾ|:count ਹਫ਼ਤੇ',\n    'day' => 'ਇੱਕ ਦਿਨ|:count ਦਿਨ',\n    'hour' => 'ਇੱਕ ਘੰਟਾ|:count ਘੰਟੇ',\n    'minute' => 'ਇਕ ਮਿੰਟ|:count ਮਿੰਟ',\n    'second' => 'ਕੁਝ ਸਕਿੰਟ|:count ਸਕਿੰਟ',\n    'ago' => ':time ਪਹਿਲਾਂ',\n    'from_now' => ':time ਵਿੱਚ',\n    'before' => ':time ਤੋਂ ਪਹਿਲਾਂ',\n    'after' => ':time ਤੋਂ ਬਾਅਦ',\n    'diff_now' => 'ਹੁਣ',\n    'diff_today' => 'ਅਜ',\n    'diff_yesterday' => 'ਕਲ',\n    'diff_tomorrow' => 'ਕਲ',\n    'formats' => [\n        'LT' => 'A h:mm ਵਜੇ',\n        'LTS' => 'A h:mm:ss ਵਜੇ',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm ਵਜੇ',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n    ],\n    'calendar' => [\n        'sameDay' => '[ਅਜ] LT',\n        'nextDay' => '[ਕਲ] LT',\n        'nextWeek' => '[ਅਗਲਾ] dddd, LT',\n        'lastDay' => '[ਕਲ] LT',\n        'lastWeek' => '[ਪਿਛਲੇ] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'ਰਾਤ';\n        }\n        if ($hour < 10) {\n            return 'ਸਵੇਰ';\n        }\n        if ($hour < 17) {\n            return 'ਦੁਪਹਿਰ';\n        }\n        if ($hour < 20) {\n            return 'ਸ਼ਾਮ';\n        }\n\n        return 'ਰਾਤ';\n    },\n    'months' => ['ਜਨਵਰੀ', 'ਫ਼ਰਵਰੀ', 'ਮਾਰਚ', 'ਅਪ੍ਰੈਲ', 'ਮਈ', 'ਜੂਨ', 'ਜੁਲਾਈ', 'ਅਗਸਤ', 'ਸਤੰਬਰ', 'ਅਕਤੂਬਰ', 'ਨਵੰਬਰ', 'ਦਸੰਬਰ'],\n    'months_short' => ['ਜਨਵਰੀ', 'ਫ਼ਰਵਰੀ', 'ਮਾਰਚ', 'ਅਪ੍ਰੈਲ', 'ਮਈ', 'ਜੂਨ', 'ਜੁਲਾਈ', 'ਅਗਸਤ', 'ਸਤੰਬਰ', 'ਅਕਤੂਬਰ', 'ਨਵੰਬਰ', 'ਦਸੰਬਰ'],\n    'weekdays' => ['ਐਤਵਾਰ', 'ਸੋਮਵਾਰ', 'ਮੰਗਲਵਾਰ', 'ਬੁਧਵਾਰ', 'ਵੀਰਵਾਰ', 'ਸ਼ੁੱਕਰਵਾਰ', 'ਸ਼ਨੀਚਰਵਾਰ'],\n    'weekdays_short' => ['ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', 'ਬੁਧ', 'ਵੀਰ', 'ਸ਼ੁਕਰ', 'ਸ਼ਨੀ'],\n    'weekdays_min' => ['ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', 'ਬੁਧ', 'ਵੀਰ', 'ਸ਼ੁਕਰ', 'ਸ਼ਨੀ'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' ਅਤੇ '],\n    'weekend' => [0, 0],\n    'alt_numbers' => ['੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pa_Arab.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ur.php', [\n    'weekdays' => ['اتوار', 'پیر', 'منگل', 'بُدھ', 'جمعرات', 'جمعہ', 'ہفتہ'],\n    'weekdays_short' => ['اتوار', 'پیر', 'منگل', 'بُدھ', 'جمعرات', 'جمعہ', 'ہفتہ'],\n    'weekdays_min' => ['اتوار', 'پیر', 'منگل', 'بُدھ', 'جمعرات', 'جمعہ', 'ہفتہ'],\n    'months' => ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئ', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئ', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd, DD MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pa_Guru.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/pa.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D/M/yy',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY, h:mm a',\n        'LLLL' => 'dddd, D MMMM YYYY, h:mm a',\n    ],\n    'months' => ['ਜਨਵਰੀ', 'ਫ਼ਰਵਰੀ', 'ਮਾਰਚ', 'ਅਪ੍ਰੈਲ', 'ਮਈ', 'ਜੂਨ', 'ਜੁਲਾਈ', 'ਅਗਸਤ', 'ਸਤੰਬਰ', 'ਅਕਤੂਬਰ', 'ਨਵੰਬਰ', 'ਦਸੰਬਰ'],\n    'months_short' => ['ਜਨ', 'ਫ਼ਰ', 'ਮਾਰਚ', 'ਅਪ੍ਰੈ', 'ਮਈ', 'ਜੂਨ', 'ਜੁਲਾ', 'ਅਗ', 'ਸਤੰ', 'ਅਕਤੂ', 'ਨਵੰ', 'ਦਸੰ'],\n    'weekdays' => ['ਐਤਵਾਰ', 'ਸੋਮਵਾਰ', 'ਮੰਗਲਵਾਰ', 'ਬੁੱਧਵਾਰ', 'ਵੀਰਵਾਰ', 'ਸ਼ੁੱਕਰਵਾਰ', 'ਸ਼ਨਿੱਚਰਵਾਰ'],\n    'weekdays_short' => ['ਐਤ', 'ਸੋਮ', 'ਮੰਗਲ', 'ਬੁੱਧ', 'ਵੀਰ', 'ਸ਼ੁੱਕਰ', 'ਸ਼ਨਿੱਚਰ'],\n    'weekdays_min' => ['ਐਤ', 'ਸੋਮ', 'ਮੰਗ', 'ਬੁੱਧ', 'ਵੀਰ', 'ਸ਼ੁੱਕ', 'ਸ਼ਨਿੱ'],\n    'weekend' => [0, 0],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pa_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Guo Xiang Tan\n * - Josh Soref\n * - Ash\n * - harpreetkhalsagtbit\n */\nreturn require __DIR__.'/pa.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pa_PK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['جنوري', 'فروري', 'مارچ', 'اپريل', 'مٓی', 'جون', 'جولاي', 'اگست', 'ستمبر', 'اكتوبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنوري', 'فروري', 'مارچ', 'اپريل', 'مٓی', 'جون', 'جولاي', 'اگست', 'ستمبر', 'اكتوبر', 'نومبر', 'دسمبر'],\n    'weekdays' => ['اتوار', 'پير', 'منگل', 'بدھ', 'جمعرات', 'جمعه', 'هفته'],\n    'weekdays_short' => ['اتوار', 'پير', 'منگل', 'بدھ', 'جمعرات', 'جمعه', 'هفته'],\n    'weekdays_min' => ['اتوار', 'پير', 'منگل', 'بدھ', 'جمعرات', 'جمعه', 'هفته'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ص', 'ش'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pap.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn [\n    'formats' => [\n        'LT' => 'HH.mm',\n        'LTS' => 'HH.mm:ss',\n        'L' => 'DD-MM-YY',\n        'LL' => 'MMMM [di] DD, YYYY',\n        'LLL' => 'DD MMM HH.mm',\n        'LLLL' => 'MMMM DD, YYYY HH.mm',\n    ],\n    'months' => ['yanüari', 'febrüari', 'mart', 'aprel', 'mei', 'yüni', 'yüli', 'ougùstùs', 'sèptèmber', 'oktober', 'novèmber', 'desèmber'],\n    'months_short' => ['yan', 'feb', 'mar', 'apr', 'mei', 'yün', 'yül', 'oug', 'sèp', 'okt', 'nov', 'des'],\n    'weekdays' => ['djadomingo', 'djaluna', 'djamars', 'djawebs', 'djarason', 'djabierne', 'djasabra'],\n    'weekdays_short' => ['do', 'lu', 'ma', 'we', 'ra', 'bi', 'sa'],\n    'weekdays_min' => ['do', 'lu', 'ma', 'we', 'ra', 'bi', 'sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'year' => ':count aña',\n    'month' => ':count luna',\n    'week' => ':count siman',\n    'day' => ':count dia',\n    'hour' => ':count ora',\n    'minute' => ':count minüt',\n    'second' => ':count sekònde',\n    'list' => [', ', ' i '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pap_AW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - information from native speaker Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn require __DIR__.'/pap.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pap_CW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - information from native speaker Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn require __DIR__.'/pap.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Wacław Jacek\n * - François B\n * - Tim Fish\n * - Serhan Apaydın\n * - Massimiliano Caniparoli\n * - JD Isaacks\n * - Jakub Szwacz\n * - Jan\n * - Paul\n * - damlys\n * - Marek (marast78)\n * - Peter (UnrulyNatives)\n * - Qrzysio\n * - Jan (aso824)\n * - diverpl\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count rok|:count lata|:count lat',\n    'a_year' => 'rok|:count lata|:count lat',\n    'y' => ':count r|:count l|:count l',\n    'month' => ':count miesiąc|:count miesiące|:count miesięcy',\n    'a_month' => 'miesiąc|:count miesiące|:count miesięcy',\n    'm' => ':count mies.',\n    'week' => ':count tydzień|:count tygodnie|:count tygodni',\n    'a_week' => 'tydzień|:count tygodnie|:count tygodni',\n    'w' => ':count tyg.',\n    'day' => ':count dzień|:count dni|:count dni',\n    'a_day' => 'dzień|:count dni|:count dni',\n    'd' => ':count d',\n    'hour' => ':count godzina|:count godziny|:count godzin',\n    'a_hour' => 'godzina|:count godziny|:count godzin',\n    'h' => ':count godz.',\n    'minute' => ':count minuta|:count minuty|:count minut',\n    'a_minute' => 'minuta|:count minuty|:count minut',\n    'min' => ':count min',\n    'second' => ':count sekunda|:count sekundy|:count sekund',\n    'a_second' => '{1}kilka sekund|:count sekunda|:count sekundy|:count sekund',\n    's' => ':count sek.',\n    'ago' => ':time temu',\n    'from_now' => static function ($time) {\n        return 'za '.strtr($time, [\n            'godzina' => 'godzinę',\n            'minuta' => 'minutę',\n            'sekunda' => 'sekundę',\n        ]);\n    },\n    'after' => ':time po',\n    'before' => ':time przed',\n    'diff_now' => 'teraz',\n    'diff_today' => 'Dziś',\n    'diff_today_regexp' => 'Dziś(?:\\\\s+o)?',\n    'diff_yesterday' => 'wczoraj',\n    'diff_yesterday_regexp' => 'Wczoraj(?:\\\\s+o)?',\n    'diff_tomorrow' => 'jutro',\n    'diff_tomorrow_regexp' => 'Jutro(?:\\\\s+o)?',\n    'diff_before_yesterday' => 'przedwczoraj',\n    'diff_after_tomorrow' => 'pojutrze',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Dziś o] LT',\n        'nextDay' => '[Jutro o] LT',\n        'nextWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[W niedzielę o] LT';\n                case 2:\n                    return '[We wtorek o] LT';\n                case 3:\n                    return '[W środę o] LT';\n                case 6:\n                    return '[W sobotę o] LT';\n                default:\n                    return '[W] dddd [o] LT';\n            }\n        },\n        'lastDay' => '[Wczoraj o] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[W zeszłą niedzielę o] LT';\n                case 3:\n                    return '[W zeszłą środę o] LT';\n                case 6:\n                    return '[W zeszłą sobotę o] LT';\n                default:\n                    return '[W zeszły] dddd [o] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca', 'lipca', 'sierpnia', 'września', 'października', 'listopada', 'grudnia'],\n    'months_standalone' => ['styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec', 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień'],\n    'months_short' => ['sty', 'lut', 'mar', 'kwi', 'maj', 'cze', 'lip', 'sie', 'wrz', 'paź', 'lis', 'gru'],\n    'months_regexp' => '/(DD?o?\\.?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota'],\n    'weekdays_short' => ['ndz', 'pon', 'wt', 'śr', 'czw', 'pt', 'sob'],\n    'weekdays_min' => ['Nd', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' i '],\n    'meridiem' => ['przed południem', 'po południu'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pl_PL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/prg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'months' => ['M01', 'M02', 'M03', 'M04', 'M05', 'M06', 'M07', 'M08', 'M09', 'M10', 'M11', 'M12'],\n    'months_short' => ['M01', 'M02', 'M03', 'M04', 'M05', 'M06', 'M07', 'M08', 'M09', 'M10', 'M11', 'M12'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'YYYY MMMM D, dddd HH:mm',\n    ],\n\n    'year' => ':count meta',\n    'y' => ':count meta',\n    'a_year' => ':count meta',\n\n    'month' => ':count mēniks', // less reliable\n    'm' => ':count mēniks', // less reliable\n    'a_month' => ':count mēniks', // less reliable\n\n    'week' => ':count sawaītin', // less reliable\n    'w' => ':count sawaītin', // less reliable\n    'a_week' => ':count sawaītin', // less reliable\n\n    'day' => ':count di',\n    'd' => ':count di',\n    'a_day' => ':count di',\n\n    'hour' => ':count bruktēt', // less reliable\n    'h' => ':count bruktēt', // less reliable\n    'a_hour' => ':count bruktēt', // less reliable\n\n    'minute' => ':count līkuts', // less reliable\n    'min' => ':count līkuts', // less reliable\n    'a_minute' => ':count līkuts', // less reliable\n\n    'second' => ':count kitan', // less reliable\n    's' => ':count kitan', // less reliable\n    'a_second' => ':count kitan', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ps.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Muhammad Nasir Rahimi\n * - Nassim Nasibullah (spinzar)\n */\nreturn [\n    'year' => ':count کال|:count کاله',\n    'y' => ':countکال|:countکاله',\n    'month' => ':count مياشت|:count مياشتي',\n    'm' => ':countمياشت|:countمياشتي',\n    'week' => ':count اونۍ|:count اونۍ',\n    'w' => ':countاونۍ|:countاونۍ',\n    'day' => ':count ورځ|:count ورځي',\n    'd' => ':countورځ|:countورځي',\n    'hour' => ':count ساعت|:count ساعته',\n    'h' => ':countساعت|:countساعته',\n    'minute' => ':count دقيقه|:count دقيقې',\n    'min' => ':countدقيقه|:countدقيقې',\n    'second' => ':count ثانيه|:count ثانيې',\n    's' => ':countثانيه|:countثانيې',\n    'ago' => ':time دمخه',\n    'from_now' => ':time له اوس څخه',\n    'after' => ':time وروسته',\n    'before' => ':time دمخه',\n    'list' => ['، ', ' او '],\n    'meridiem' => ['غ.م.', 'غ.و.'],\n    'weekdays' => ['اتوار', 'ګل', 'نهه', 'شورو', 'زيارت', 'جمعه', 'خالي'],\n    'weekdays_short' => ['ا', 'ګ', 'ن', 'ش', 'ز', 'ج', 'خ'],\n    'weekdays_min' => ['ا', 'ګ', 'ن', 'ش', 'ز', 'ج', 'خ'],\n    'months' => ['جنوري', 'فبروري', 'مارچ', 'اپریل', 'مۍ', 'جون', 'جولای', 'اگست', 'سېپتمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنوري', 'فبروري', 'مارچ', 'اپریل', 'مۍ', 'جون', 'جولای', 'اگست', 'سېپتمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_standalone' => ['جنوري', 'فېبروري', 'مارچ', 'اپریل', 'مۍ', 'جون', 'جولای', 'اگست', 'سپتمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_short_standalone' => ['جنوري', 'فبروري', 'مارچ', 'اپریل', 'مۍ', 'جون', 'جولای', 'اگست', 'سپتمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'first_day_of_week' => 6,\n    'weekend' => [4, 5],\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'YYYY/M/d',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'د YYYY د MMMM D H:mm',\n        'LLLL' => 'dddd د YYYY د MMMM D H:mm',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ps_AF.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ps.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Cassiano Montanari\n * - Matt Pope\n * - François B\n * - Prodis\n * - JD Isaacks\n * - Raphael Amorim\n * - João Magalhães\n * - victortobias\n * - Paulo Freitas\n * - Sebastian Thierer\n * - Claudson Martins (claudsonm)\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count ano|:count anos',\n    'a_year' => 'um ano|:count anos',\n    'y' => ':counta',\n    'month' => ':count mês|:count meses',\n    'a_month' => 'um mês|:count meses',\n    'm' => ':countm',\n    'week' => ':count semana|:count semanas',\n    'a_week' => 'uma semana|:count semanas',\n    'w' => ':countsem',\n    'day' => ':count dia|:count dias',\n    'a_day' => 'um dia|:count dias',\n    'd' => ':countd',\n    'hour' => ':count hora|:count horas',\n    'a_hour' => 'uma hora|:count horas',\n    'h' => ':counth',\n    'minute' => ':count minuto|:count minutos',\n    'a_minute' => 'um minuto|:count minutos',\n    'min' => ':countmin',\n    'second' => ':count segundo|:count segundos',\n    'a_second' => 'alguns segundos|:count segundos',\n    's' => ':counts',\n    'millisecond' => ':count milissegundo|:count milissegundos',\n    'a_millisecond' => 'um milissegundo|:count milissegundos',\n    'ms' => ':countms',\n    'microsecond' => ':count microssegundo|:count microssegundos',\n    'a_microsecond' => 'um microssegundo|:count microssegundos',\n    'µs' => ':countµs',\n    'ago' => 'há :time',\n    'from_now' => 'em :time',\n    'after' => ':time depois',\n    'before' => ':time antes',\n    'diff_now' => 'agora',\n    'diff_today' => 'Hoje',\n    'diff_today_regexp' => 'Hoje(?:\\\\s+às)?',\n    'diff_yesterday' => 'ontem',\n    'diff_yesterday_regexp' => 'Ontem(?:\\\\s+às)?',\n    'diff_tomorrow' => 'amanhã',\n    'diff_tomorrow_regexp' => 'Amanhã(?:\\\\s+às)?',\n    'diff_before_yesterday' => 'anteontem',\n    'diff_after_tomorrow' => 'depois de amanhã',\n    'period_recurrences' => 'uma vez|:count vezes',\n    'period_interval' => 'cada :interval',\n    'period_start_date' => 'de :date',\n    'period_end_date' => 'até :date',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D [de] MMMM [de] YYYY',\n        'LLL' => 'D [de] MMMM [de] YYYY HH:mm',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Hoje às] LT',\n        'nextDay' => '[Amanhã às] LT',\n        'nextWeek' => 'dddd [às] LT',\n        'lastDay' => '[Ontem às] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                case 6:\n                    return '[Último] dddd [às] LT';\n                default:\n                    return '[Última] dddd [às] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberº',\n    'months' => ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'],\n    'months_short' => ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'],\n    'weekdays' => ['domingo', 'segunda-feira', 'terça-feira', 'quarta-feira', 'quinta-feira', 'sexta-feira', 'sábado'],\n    'weekdays_short' => ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n    'weekdays_min' => ['Do', '2ª', '3ª', '4ª', '5ª', '6ª', 'Sá'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' e '],\n    'ordinal_words' => [\n        'of' => 'de',\n        'first' => 'primeira',\n        'second' => 'segunda',\n        'third' => 'terceira',\n        'fourth' => 'quarta',\n        'fifth' => 'quinta',\n        'last' => 'última',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_AO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_BR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Cassiano Montanari\n * - Eduardo Dalla Vecchia\n * - David Rodrigues\n * - Matt Pope\n * - François B\n * - Prodis\n * - Marlon Maxwel\n * - JD Isaacks\n * - Raphael Amorim\n * - Rafael Raupp\n * - felipeleite1\n * - swalker\n * - Lucas Macedo\n * - Paulo Freitas\n * - Sebastian Thierer\n */\nreturn array_replace_recursive(require __DIR__.'/pt.php', [\n    'period_recurrences' => 'uma|:count vez',\n    'period_interval' => 'toda :interval',\n    'formats' => [\n        'LLL' => 'D [de] MMMM [de] YYYY [às] HH:mm',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n    ],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_CV.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_GQ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_GW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_LU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_MO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/pt.php', [\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'LLL' => 'D [de] MMMM [de] YYYY, h:mm a',\n        'LLLL' => 'dddd, D [de] MMMM [de] YYYY, h:mm a',\n    ],\n    'first_day_of_week' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_MZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/pt.php', [\n    'first_day_of_week' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_PT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RAP    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/pt.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['janeiro', 'fevereiro', 'março', 'abril', 'maio', 'junho', 'julho', 'agosto', 'setembro', 'outubro', 'novembro', 'dezembro'],\n    'months_short' => ['jan', 'fev', 'mar', 'abr', 'mai', 'jun', 'jul', 'ago', 'set', 'out', 'nov', 'dez'],\n    'weekdays' => ['domingo', 'segunda', 'terça', 'quarta', 'quinta', 'sexta', 'sábado'],\n    'weekdays_short' => ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n    'weekdays_min' => ['dom', 'seg', 'ter', 'qua', 'qui', 'sex', 'sáb'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_ST.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/pt_TL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/pt.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/qu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/es_UY.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM, YYYY HH:mm',\n    ],\n    'first_day_of_week' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/qu_BO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/qu.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/qu_EC.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/qu.php', [\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/quz.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/quz_PE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/quz_PE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Sugar Labs // OLPC sugarlabs.org libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['iniru', 'phiwriru', 'marsu', 'awril', 'mayu', 'huniyu', 'huliyu', 'agustu', 'siptiyimri', 'uktuwri', 'nuwiyimri', 'tisiyimri'],\n    'months_short' => ['ini', 'phi', 'mar', 'awr', 'may', 'hun', 'hul', 'agu', 'sip', 'ukt', 'nuw', 'tis'],\n    'weekdays' => ['tuminku', 'lunis', 'martis', 'miyirkulis', 'juywis', 'wiyirnis', 'sawatu'],\n    'weekdays_short' => ['tum', 'lun', 'mar', 'miy', 'juy', 'wiy', 'saw'],\n    'weekdays_min' => ['tum', 'lun', 'mar', 'miy', 'juy', 'wiy', 'saw'],\n    'day_of_first_week_of_year' => 1,\n\n    'minute' => ':count uchuy', // less reliable\n    'min' => ':count uchuy', // less reliable\n    'a_minute' => ':count uchuy', // less reliable\n\n    'year' => ':count wata',\n    'y' => ':count wata',\n    'a_year' => ':count wata',\n\n    'month' => ':count killa',\n    'm' => ':count killa',\n    'a_month' => ':count killa',\n\n    'week' => ':count simana',\n    'w' => ':count simana',\n    'a_week' => ':count simana',\n\n    'day' => ':count pʼunchaw',\n    'd' => ':count pʼunchaw',\n    'a_day' => ':count pʼunchaw',\n\n    'hour' => ':count ura',\n    'h' => ':count ura',\n    'a_hour' => ':count ura',\n\n    'second' => ':count iskay ñiqin',\n    's' => ':count iskay ñiqin',\n    'a_second' => ':count iskay ñiqin',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/raj.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/raj_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/raj_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - meghrajsuthar03@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रैल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितंबर', 'अक्टूबर', 'नवंबर', 'दिसंबर'],\n    'months_short' => ['जन', 'फर', 'मार्च', 'अप्रै', 'मई', 'जून', 'जुल', 'अग', 'सित', 'अक्टू', 'नव', 'दिस'],\n    'weekdays' => ['रविवार', 'सोमवार', 'मंगल्लवार', 'बुधवार', 'बृहस्पतिवार', 'शुक्रवार', 'शनिवार'],\n    'weekdays_short' => ['रवि', 'सोम', 'मंगल', 'बुध', 'बृहस्पति', 'शुक्र', 'शनि'],\n    'weekdays_min' => ['रवि', 'सोम', 'मंगल', 'बुध', 'बृहस्पति', 'शुक्र', 'शनि'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n\n    'year' => ':count आंहू', // less reliable\n    'y' => ':count आंहू', // less reliable\n    'a_year' => ':count आंहू', // less reliable\n\n    'month' => ':count सूरज', // less reliable\n    'm' => ':count सूरज', // less reliable\n    'a_month' => ':count सूरज', // less reliable\n\n    'week' => ':count निवाज', // less reliable\n    'w' => ':count निवाज', // less reliable\n    'a_week' => ':count निवाज', // less reliable\n\n    'day' => ':count अेक', // less reliable\n    'd' => ':count अेक', // less reliable\n    'a_day' => ':count अेक', // less reliable\n\n    'hour' => ':count दुनियांण', // less reliable\n    'h' => ':count दुनियांण', // less reliable\n    'a_hour' => ':count दुनियांण', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/rm.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - tjku\n * - Max Melentiev\n * - Juanito Fatas\n * - Tsutomu Kuroda\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Nicolás Hock Isaza\n * - sebastian de castelberg\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'Do MMMM YYYY',\n        'LLL' => 'Do MMMM, HH:mm [Uhr]',\n        'LLLL' => 'dddd, Do MMMM YYYY, HH:mm [Uhr]',\n    ],\n    'year' => ':count onn|:count onns',\n    'month' => ':count mais',\n    'week' => ':count emna|:count emnas',\n    'day' => ':count di|:count dis',\n    'hour' => ':count oura|:count ouras',\n    'minute' => ':count minuta|:count minutas',\n    'second' => ':count secunda|:count secundas',\n    'weekdays' => ['dumengia', 'glindesdi', 'mardi', 'mesemna', 'gievgia', 'venderdi', 'sonda'],\n    'weekdays_short' => ['du', 'gli', 'ma', 'me', 'gie', 've', 'so'],\n    'weekdays_min' => ['du', 'gli', 'ma', 'me', 'gie', 've', 'so'],\n    'months' => ['schaner', 'favrer', 'mars', 'avrigl', 'matg', 'zercladur', 'fanadur', 'avust', 'settember', 'october', 'november', 'december'],\n    'months_short' => ['schan', 'favr', 'mars', 'avr', 'matg', 'zercl', 'fan', 'avust', 'sett', 'oct', 'nov', 'dec'],\n    'meridiem' => ['avantmezdi', 'suentermezdi'],\n    'list' => [', ', ' e '],\n    'first_day_of_week' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/rn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Z.MU.', 'Z.MW.'],\n    'weekdays' => ['Ku w’indwi', 'Ku wa mbere', 'Ku wa kabiri', 'Ku wa gatatu', 'Ku wa kane', 'Ku wa gatanu', 'Ku wa gatandatu'],\n    'weekdays_short' => ['cu.', 'mbe.', 'kab.', 'gtu.', 'kan.', 'gnu.', 'gnd.'],\n    'weekdays_min' => ['cu.', 'mbe.', 'kab.', 'gtu.', 'kan.', 'gnu.', 'gnd.'],\n    'months' => ['Nzero', 'Ruhuhuma', 'Ntwarante', 'Ndamukiza', 'Rusama', 'Ruheshi', 'Mukakaro', 'Nyandagaro', 'Nyakanga', 'Gitugutu', 'Munyonyo', 'Kigarama'],\n    'months_short' => ['Mut.', 'Gas.', 'Wer.', 'Mat.', 'Gic.', 'Kam.', 'Nya.', 'Kan.', 'Nze.', 'Ukw.', 'Ugu.', 'Uku.'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'year' => 'imyaka :count',\n    'y' => 'imyaka :count',\n    'a_year' => 'imyaka :count',\n\n    'month' => 'amezi :count',\n    'm' => 'amezi :count',\n    'a_month' => 'amezi :count',\n\n    'week' => 'indwi :count',\n    'w' => 'indwi :count',\n    'a_week' => 'indwi :count',\n\n    'day' => 'imisi :count',\n    'd' => 'imisi :count',\n    'a_day' => 'imisi :count',\n\n    'hour' => 'amasaha :count',\n    'h' => 'amasaha :count',\n    'a_hour' => 'amasaha :count',\n\n    'minute' => 'iminuta :count',\n    'min' => 'iminuta :count',\n    'a_minute' => 'iminuta :count',\n\n    'second' => 'inguvu :count', // less reliable\n    's' => 'inguvu :count', // less reliable\n    'a_second' => 'inguvu :count', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ro.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n * - Cătălin Georgescu\n * - Valentin Ivaşcu (oriceon)\n */\nreturn [\n    'year' => ':count an|:count ani|:count ani',\n    'a_year' => 'un an|:count ani|:count ani',\n    'y' => ':count a.',\n    'month' => ':count lună|:count luni|:count luni',\n    'a_month' => 'o lună|:count luni|:count luni',\n    'm' => ':count l.',\n    'week' => ':count săptămână|:count săptămâni|:count săptămâni',\n    'a_week' => 'o săptămână|:count săptămâni|:count săptămâni',\n    'w' => ':count săp.',\n    'day' => ':count zi|:count zile|:count zile',\n    'a_day' => 'o zi|:count zile|:count zile',\n    'd' => ':count z.',\n    'hour' => ':count oră|:count ore|:count ore',\n    'a_hour' => 'o oră|:count ore|:count ore',\n    'h' => ':count o.',\n    'minute' => ':count minut|:count minute|:count minute',\n    'a_minute' => 'un minut|:count minute|:count minute',\n    'min' => ':count m.',\n    'second' => ':count secundă|:count secunde|:count secunde',\n    'a_second' => 'câteva secunde|:count secunde|:count secunde',\n    's' => ':count sec.',\n    'ago' => ':time în urmă',\n    'from_now' => 'peste :time',\n    'after' => 'peste :time',\n    'before' => 'acum :time',\n    'diff_now' => 'acum',\n    'diff_today' => 'azi',\n    'diff_today_regexp' => 'azi(?:\\\\s+la)?',\n    'diff_yesterday' => 'ieri',\n    'diff_yesterday_regexp' => 'ieri(?:\\\\s+la)?',\n    'diff_tomorrow' => 'mâine',\n    'diff_tomorrow_regexp' => 'mâine(?:\\\\s+la)?',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[azi la] LT',\n        'nextDay' => '[mâine la] LT',\n        'nextWeek' => 'dddd [la] LT',\n        'lastDay' => '[ieri la] LT',\n        'lastWeek' => '[fosta] dddd [la] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie', 'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie'],\n    'months_short' => ['ian.', 'feb.', 'mar.', 'apr.', 'mai', 'iun.', 'iul.', 'aug.', 'sept.', 'oct.', 'nov.', 'dec.'],\n    'weekdays' => ['duminică', 'luni', 'marți', 'miercuri', 'joi', 'vineri', 'sâmbătă'],\n    'weekdays_short' => ['dum', 'lun', 'mar', 'mie', 'joi', 'vin', 'sâm'],\n    'weekdays_min' => ['du', 'lu', 'ma', 'mi', 'jo', 'vi', 'sâ'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' și '],\n    'meridiem' => ['a.m.', 'p.m.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ro_MD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ro.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ro_RO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ro.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/rof.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['kang’ama', 'kingoto'],\n    'weekdays' => ['Ijumapili', 'Ijumatatu', 'Ijumanne', 'Ijumatano', 'Alhamisi', 'Ijumaa', 'Ijumamosi'],\n    'weekdays_short' => ['Ijp', 'Ijt', 'Ijn', 'Ijtn', 'Alh', 'Iju', 'Ijm'],\n    'weekdays_min' => ['Ijp', 'Ijt', 'Ijn', 'Ijtn', 'Alh', 'Iju', 'Ijm'],\n    'months' => ['Mweri wa kwanza', 'Mweri wa kaili', 'Mweri wa katatu', 'Mweri wa kaana', 'Mweri wa tanu', 'Mweri wa sita', 'Mweri wa saba', 'Mweri wa nane', 'Mweri wa tisa', 'Mweri wa ikumi', 'Mweri wa ikumi na moja', 'Mweri wa ikumi na mbili'],\n    'months_short' => ['M1', 'M2', 'M3', 'M4', 'M5', 'M6', 'M7', 'M8', 'M9', 'M10', 'M11', 'M12'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Bari Badamshin\n * - Jørn Ølmheim\n * - François B\n * - Tim Fish\n * - Коренберг Марк (imac)\n * - Serhan Apaydın\n * - RomeroMsk\n * - vsn4ik\n * - JD Isaacks\n * - Bari Badamshin\n * - Jørn Ølmheim\n * - François B\n * - Коренберг Марк (imac)\n * - Serhan Apaydın\n * - RomeroMsk\n * - vsn4ik\n * - JD Isaacks\n * - Fellzo\n * - andrey-helldar\n * - Pavel Skripkin (psxx)\n * - AlexWalkerson\n * - Vladislav UnsealedOne\n * - dima-bzz\n */\n\nuse Carbon\\CarbonInterface;\n\n$transformDiff = function ($input) {\n    return strtr($input, [\n        'неделя' => 'неделю',\n        'секунда' => 'секунду',\n        'минута' => 'минуту',\n    ]);\n};\n\nreturn [\n    'year' => ':count год|:count года|:count лет',\n    'y' => ':count г.|:count г.|:count л.',\n    'a_year' => '{1}год|:count год|:count года|:count лет',\n    'month' => ':count месяц|:count месяца|:count месяцев',\n    'm' => ':count мес.',\n    'a_month' => '{1}месяц|:count месяц|:count месяца|:count месяцев',\n    'week' => ':count неделя|:count недели|:count недель',\n    'w' => ':count нед.',\n    'a_week' => '{1}неделя|:count неделю|:count недели|:count недель',\n    'day' => ':count день|:count дня|:count дней',\n    'd' => ':count д.',\n    'a_day' => '{1}день|:count день|:count дня|:count дней',\n    'hour' => ':count час|:count часа|:count часов',\n    'h' => ':count ч.',\n    'a_hour' => '{1}час|:count час|:count часа|:count часов',\n    'minute' => ':count минута|:count минуты|:count минут',\n    'min' => ':count мин.',\n    'a_minute' => '{1}минута|:count минута|:count минуты|:count минут',\n    'second' => ':count секунда|:count секунды|:count секунд',\n    's' => ':count сек.',\n    'a_second' => '{1}несколько секунд|:count секунду|:count секунды|:count секунд',\n    'ago' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' назад';\n    },\n    'from_now' => function ($time) use ($transformDiff) {\n        return 'через '.$transformDiff($time);\n    },\n    'after' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' после';\n    },\n    'before' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' до';\n    },\n    'diff_now' => 'только что',\n    'diff_today' => 'Сегодня,',\n    'diff_today_regexp' => 'Сегодня,?(?:\\\\s+в)?',\n    'diff_yesterday' => 'вчера',\n    'diff_yesterday_regexp' => 'Вчера,?(?:\\\\s+в)?',\n    'diff_tomorrow' => 'завтра',\n    'diff_tomorrow_regexp' => 'Завтра,?(?:\\\\s+в)?',\n    'diff_before_yesterday' => 'позавчера',\n    'diff_after_tomorrow' => 'послезавтра',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY г.',\n        'LLL' => 'D MMMM YYYY г., H:mm',\n        'LLLL' => 'dddd, D MMMM YYYY г., H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Сегодня, в] LT',\n        'nextDay' => '[Завтра, в] LT',\n        'nextWeek' => function (CarbonInterface $current, CarbonInterface $other) {\n            if ($current->week !== $other->week) {\n                switch ($current->dayOfWeek) {\n                    case 0:\n                        return '[В следующее] dddd, [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[В следующий] dddd, [в] LT';\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[В следующую] dddd, [в] LT';\n                }\n            }\n\n            if ($current->dayOfWeek === 2) {\n                return '[Во] dddd, [в] LT';\n            }\n\n            return '[В] dddd, [в] LT';\n        },\n        'lastDay' => '[Вчера, в] LT',\n        'lastWeek' => function (CarbonInterface $current, CarbonInterface $other) {\n            if ($current->week !== $other->week) {\n                switch ($current->dayOfWeek) {\n                    case 0:\n                        return '[В прошлое] dddd, [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[В прошлый] dddd, [в] LT';\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[В прошлую] dddd, [в] LT';\n                }\n            }\n\n            if ($current->dayOfWeek === 2) {\n                return '[Во] dddd, [в] LT';\n            }\n\n            return '[В] dddd, [в] LT';\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n                return $number.'-й';\n            case 'D':\n                return $number.'-го';\n            case 'w':\n            case 'W':\n                return $number.'-я';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'ночи';\n        }\n        if ($hour < 12) {\n            return 'утра';\n        }\n        if ($hour < 17) {\n            return 'дня';\n        }\n\n        return 'вечера';\n    },\n    'months' => ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'],\n    'months_standalone' => ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'],\n    'months_short' => ['янв', 'фев', 'мар', 'апр', 'мая', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'months_short_standalone' => ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'months_regexp' => '/(DD?o?\\.?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => ['воскресенье', 'понедельник', 'вторник', 'среду', 'четверг', 'пятницу', 'субботу'],\n    'weekdays_standalone' => ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'],\n    'weekdays_short' => ['вск', 'пнд', 'втр', 'срд', 'чтв', 'птн', 'сбт'],\n    'weekdays_min' => ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n    'weekdays_regexp' => '/\\[\\s*(В|в)\\s*((?:прошлую|следующую|эту)\\s*)?\\]\\s*dddd/',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' и '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru_BY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ru.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru_KG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ru.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru_KZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ru.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru_MD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ru.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ru.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ru_UA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - RFC 2319    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/ru.php', [\n    'weekdays' => ['воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота'],\n    'weekdays_short' => ['вск', 'пнд', 'вто', 'срд', 'чтв', 'птн', 'суб'],\n    'weekdays_min' => ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'су'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/rw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/rw_RW.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/rw_RW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Rwanda Steve Murphy murf@e-tools.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Mutarama', 'Gashyantare', 'Werurwe', 'Mata', 'Gicuransi', 'Kamena', 'Nyakanga', 'Kanama', 'Nzeli', 'Ukwakira', 'Ugushyingo', 'Ukuboza'],\n    'months_short' => ['Mut', 'Gas', 'Wer', 'Mat', 'Gic', 'Kam', 'Nya', 'Kan', 'Nze', 'Ukw', 'Ugu', 'Uku'],\n    'weekdays' => ['Ku cyumweru', 'Kuwa mbere', 'Kuwa kabiri', 'Kuwa gatatu', 'Kuwa kane', 'Kuwa gatanu', 'Kuwa gatandatu'],\n    'weekdays_short' => ['Mwe', 'Mbe', 'Kab', 'Gtu', 'Kan', 'Gnu', 'Gnd'],\n    'weekdays_min' => ['Mwe', 'Mbe', 'Kab', 'Gtu', 'Kan', 'Gnu', 'Gnd'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'second' => ':count vuna', // less reliable\n    's' => ':count vuna', // less reliable\n    'a_second' => ':count vuna', // less reliable\n\n    'year' => 'aka :count',\n    'y' => 'aka :count',\n    'a_year' => 'aka :count',\n\n    'month' => 'ezi :count',\n    'm' => 'ezi :count',\n    'a_month' => 'ezi :count',\n\n    'week' => ':count icyumweru',\n    'w' => ':count icyumweru',\n    'a_week' => ':count icyumweru',\n\n    'day' => ':count nsi',\n    'd' => ':count nsi',\n    'a_day' => ':count nsi',\n\n    'hour' => 'saha :count',\n    'h' => 'saha :count',\n    'a_hour' => 'saha :count',\n\n    'minute' => ':count -nzinya',\n    'min' => ':count -nzinya',\n    'a_minute' => ':count -nzinya',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/rwk.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['utuko', 'kyiukonyi'],\n    'weekdays' => ['Jumapilyi', 'Jumatatuu', 'Jumanne', 'Jumatanu', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprilyi', 'Mei', 'Junyi', 'Julyai', 'Agusti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sa.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sa_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sa_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - The Debian project Christian Perrier bubulle@debian.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D-MM-YY',\n    ],\n    'months' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'months_short' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'weekdays' => ['रविवासर:', 'सोमवासर:', 'मंगलवासर:', 'बुधवासर:', 'बृहस्पतिवासरः', 'शुक्रवासर', 'शनिवासर:'],\n    'weekdays_short' => ['रविः', 'सोम:', 'मंगल:', 'बुध:', 'बृहस्पतिः', 'शुक्र', 'शनि:'],\n    'weekdays_min' => ['रविः', 'सोम:', 'मंगल:', 'बुध:', 'बृहस्पतिः', 'शुक्र', 'शनि:'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n\n    'minute' => ':count होरा', // less reliable\n    'min' => ':count होरा', // less reliable\n    'a_minute' => ':count होरा', // less reliable\n\n    'year' => ':count वर्ष',\n    'y' => ':count वर्ष',\n    'a_year' => ':count वर्ष',\n\n    'month' => ':count मास',\n    'm' => ':count मास',\n    'a_month' => ':count मास',\n\n    'week' => ':count सप्ताहः saptahaĥ',\n    'w' => ':count सप्ताहः saptahaĥ',\n    'a_week' => ':count सप्ताहः saptahaĥ',\n\n    'day' => ':count दिन',\n    'd' => ':count दिन',\n    'a_day' => ':count दिन',\n\n    'hour' => ':count घण्टा',\n    'h' => ':count घण्टा',\n    'a_hour' => ':count घण्टा',\n\n    'second' => ':count द्वितीयः',\n    's' => ':count द्वितीयः',\n    'a_second' => ':count द्वितीयः',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sah.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sah_RU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sah_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Valery Timiriliyev Valery Timiriliyev timiriliyev@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/ru.php', [\n    'formats' => [\n        'L' => 'YYYY.MM.DD',\n    ],\n    'months' => ['тохсунньу', 'олунньу', 'кулун тутар', 'муус устар', 'ыам ыйын', 'бэс ыйын', 'от ыйын', 'атырдьах ыйын', 'балаҕан ыйын', 'алтынньы', 'сэтинньи', 'ахсынньы'],\n    'months_short' => ['тохс', 'олун', 'кул', 'муус', 'ыам', 'бэс', 'от', 'атыр', 'бал', 'алт', 'сэт', 'ахс'],\n    'weekdays' => ['баскыһыанньа', 'бэнидиэнньик', 'оптуорунньук', 'сэрэдэ', 'чэппиэр', 'бээтинсэ', 'субуота'],\n    'weekdays_short' => ['бс', 'бн', 'оп', 'ср', 'чп', 'бт', 'сб'],\n    'weekdays_min' => ['бс', 'бн', 'оп', 'ср', 'чп', 'бт', 'сб'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/saq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Tesiran', 'Teipa'],\n    'weekdays' => ['Mderot ee are', 'Mderot ee kuni', 'Mderot ee ong’wan', 'Mderot ee inet', 'Mderot ee ile', 'Mderot ee sapa', 'Mderot ee kwe'],\n    'weekdays_short' => ['Are', 'Kun', 'Ong', 'Ine', 'Ile', 'Sap', 'Kwe'],\n    'weekdays_min' => ['Are', 'Kun', 'Ong', 'Ine', 'Ile', 'Sap', 'Kwe'],\n    'months' => ['Lapa le obo', 'Lapa le waare', 'Lapa le okuni', 'Lapa le ong’wan', 'Lapa le imet', 'Lapa le ile', 'Lapa le sapa', 'Lapa le isiet', 'Lapa le saal', 'Lapa le tomon', 'Lapa le tomon obo', 'Lapa le tomon waare'],\n    'months_short' => ['Obo', 'Waa', 'Oku', 'Ong', 'Ime', 'Ile', 'Sap', 'Isi', 'Saa', 'Tom', 'Tob', 'Tow'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sat.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sat_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sat_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat Pune    libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रेल', 'मई', 'जुन', 'जुलाई', 'अगस्त', 'सितम्बर', 'अखथबर', 'नवम्बर', 'दिसम्बर'],\n    'months_short' => ['जनवरी', 'फरवरी', 'मार्च', 'अप्रेल', 'मई', 'जुन', 'जुलाई', 'अगस्त', 'सितम्बर', 'अखथबर', 'नवम्बर', 'दिसम्बर'],\n    'weekdays' => ['सिंगेमाँहाँ', 'ओतेमाँहाँ', 'बालेमाँहाँ', 'सागुनमाँहाँ', 'सारदीमाँहाँ', 'जारुममाँहाँ', 'ञुहुममाँहाँ'],\n    'weekdays_short' => ['सिंगे', 'ओते', 'बाले', 'सागुन', 'सारदी', 'जारुम', 'ञुहुम'],\n    'weekdays_min' => ['सिंगे', 'ओते', 'बाले', 'सागुन', 'सारदी', 'जारुम', 'ञुहुम'],\n    'day_of_first_week_of_year' => 1,\n\n    'month' => ':count ńindạ cando', // less reliable\n    'm' => ':count ńindạ cando', // less reliable\n    'a_month' => ':count ńindạ cando', // less reliable\n\n    'week' => ':count mãhã', // less reliable\n    'w' => ':count mãhã', // less reliable\n    'a_week' => ':count mãhã', // less reliable\n\n    'hour' => ':count ᱥᱳᱱᱚ', // less reliable\n    'h' => ':count ᱥᱳᱱᱚ', // less reliable\n    'a_hour' => ':count ᱥᱳᱱᱚ', // less reliable\n\n    'minute' => ':count ᱯᱤᱞᱪᱩ', // less reliable\n    'min' => ':count ᱯᱤᱞᱪᱩ', // less reliable\n    'a_minute' => ':count ᱯᱤᱞᱪᱩ', // less reliable\n\n    'second' => ':count ar', // less reliable\n    's' => ':count ar', // less reliable\n    'a_second' => ':count ar', // less reliable\n\n    'year' => ':count ne̲s',\n    'y' => ':count ne̲s',\n    'a_year' => ':count ne̲s',\n\n    'day' => ':count ᱫᱤᱱ',\n    'd' => ':count ᱫᱤᱱ',\n    'a_day' => ':count ᱫᱤᱱ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sbp.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Lwamilawu', 'Pashamihe'],\n    'weekdays' => ['Mulungu', 'Jumatatu', 'Jumanne', 'Jumatano', 'Alahamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Mul', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Mul', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'months' => ['Mupalangulwa', 'Mwitope', 'Mushende', 'Munyi', 'Mushende Magali', 'Mujimbi', 'Mushipepo', 'Mupuguto', 'Munyense', 'Mokhu', 'Musongandembwe', 'Muhaano'],\n    'months_short' => ['Mup', 'Mwi', 'Msh', 'Mun', 'Mag', 'Muj', 'Msp', 'Mpg', 'Mye', 'Mok', 'Mus', 'Muh'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sc.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sc_IT.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sc_IT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Sardinian Translators Team Massimeddu Cireddu massimeddu@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD. MM. YY',\n    ],\n    'months' => ['Ghennàrgiu', 'Freàrgiu', 'Martzu', 'Abrile', 'Maju', 'Làmpadas', 'Argiolas//Trìulas', 'Austu', 'Cabudanni', 'Santugaine//Ladàmine', 'Onniasantu//Santandria', 'Nadale//Idas'],\n    'months_short' => ['Ghe', 'Fre', 'Mar', 'Abr', 'Maj', 'Làm', 'Arg', 'Aus', 'Cab', 'Lad', 'Onn', 'Nad'],\n    'weekdays' => ['Domìnigu', 'Lunis', 'Martis', 'Mèrcuris', 'Giòbia', 'Chenàbura', 'Sàbadu'],\n    'weekdays_short' => ['Dom', 'Lun', 'Mar', 'Mèr', 'Giò', 'Che', 'Sàb'],\n    'weekdays_min' => ['Dom', 'Lun', 'Mar', 'Mèr', 'Giò', 'Che', 'Sàb'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'minute' => ':count mementu', // less reliable\n    'min' => ':count mementu', // less reliable\n    'a_minute' => ':count mementu', // less reliable\n\n    'year' => ':count annu',\n    'y' => ':count annu',\n    'a_year' => ':count annu',\n\n    'month' => ':count mese',\n    'm' => ':count mese',\n    'a_month' => ':count mese',\n\n    'week' => ':count chida',\n    'w' => ':count chida',\n    'a_week' => ':count chida',\n\n    'day' => ':count dí',\n    'd' => ':count dí',\n    'a_day' => ':count dí',\n\n    'hour' => ':count ora',\n    'h' => ':count ora',\n    'a_hour' => ':count ora',\n\n    'second' => ':count secundu',\n    's' => ':count secundu',\n    'a_second' => ':count secundu',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sd.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n$months = [\n    'جنوري',\n    'فيبروري',\n    'مارچ',\n    'اپريل',\n    'مئي',\n    'جون',\n    'جولاءِ',\n    'آگسٽ',\n    'سيپٽمبر',\n    'آڪٽوبر',\n    'نومبر',\n    'ڊسمبر',\n];\n\n$weekdays = [\n    'آچر',\n    'سومر',\n    'اڱارو',\n    'اربع',\n    'خميس',\n    'جمع',\n    'ڇنڇر',\n];\n\n/*\n * Authors:\n * - Narain Sagar\n * - Sawood Alam\n * - Narain Sagar\n */\nreturn [\n    'year' => '{1}'.'هڪ سال'.'|:count '.'سال',\n    'month' => '{1}'.'هڪ مهينو'.'|:count '.'مهينا',\n    'week' => '{1}'.'ھڪ ھفتو'.'|:count '.'هفتا',\n    'day' => '{1}'.'هڪ ڏينهن'.'|:count '.'ڏينهن',\n    'hour' => '{1}'.'هڪ ڪلاڪ'.'|:count '.'ڪلاڪ',\n    'minute' => '{1}'.'هڪ منٽ'.'|:count '.'منٽ',\n    'second' => '{1}'.'چند سيڪنڊ'.'|:count '.'سيڪنڊ',\n    'ago' => ':time اڳ',\n    'from_now' => ':time پوء',\n    'diff_yesterday' => 'ڪالهه',\n    'diff_today' => 'اڄ',\n    'diff_tomorrow' => 'سڀاڻي',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd، D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[اڄ] LT',\n        'nextDay' => '[سڀاڻي] LT',\n        'nextWeek' => 'dddd [اڳين هفتي تي] LT',\n        'lastDay' => '[ڪالهه] LT',\n        'lastWeek' => '[گزريل هفتي] dddd [تي] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['صبح', 'شام'],\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => $weekdays,\n    'weekdays_short' => $weekdays,\n    'weekdays_min' => $weekdays,\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => ['، ', ' ۽ '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sd_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat, Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/sd.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['جنوري', 'فبروري', 'مارچ', 'اپريل', 'مي', 'جون', 'جولاءِ', 'آگسٽ', 'سيپٽيمبر', 'آڪٽوبر', 'نومبر', 'ڊسمبر'],\n    'months_short' => ['جنوري', 'فبروري', 'مارچ', 'اپريل', 'مي', 'جون', 'جولاءِ', 'آگسٽ', 'سيپٽيمبر', 'آڪٽوبر', 'نومبر', 'ڊسمبر'],\n    'weekdays' => ['آرتوارُ', 'سومرُ', 'منگلُ', 'ٻُڌرُ', 'وسپت', 'جُمو', 'ڇنڇر'],\n    'weekdays_short' => ['آرتوارُ', 'سومرُ', 'منگلُ', 'ٻُڌرُ', 'وسپت', 'جُمو', 'ڇنڇر'],\n    'weekdays_min' => ['آرتوارُ', 'سومرُ', 'منگلُ', 'ٻُڌرُ', 'وسپت', 'جُمو', 'ڇنڇر'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sd_IN@devanagari.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat, Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/sd.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['जनवरी', 'फबरवरी', 'मार्चि', 'अप्रेल', 'मे', 'जूनि', 'जूलाइ', 'आगस्टु', 'सेप्टेंबरू', 'आक्टूबरू', 'नवंबरू', 'ॾिसंबरू'],\n    'months_short' => ['जनवरी', 'फबरवरी', 'मार्चि', 'अप्रेल', 'मे', 'जूनि', 'जूलाइ', 'आगस्टु', 'सेप्टेंबरू', 'आक्टूबरू', 'नवंबरू', 'ॾिसंबरू'],\n    'weekdays' => ['आर्तवारू', 'सूमरू', 'मंगलू', 'ॿुधरू', 'विस्पति', 'जुमो', 'छंछस'],\n    'weekdays_short' => ['आर्तवारू', 'सूमरू', 'मंगलू', 'ॿुधरू', 'विस्पति', 'जुमो', 'छंछस'],\n    'weekdays_min' => ['आर्तवारू', 'सूमरू', 'मंगलू', 'ॿुधरू', 'विस्पति', 'जुमो', 'छंछस'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['म.पू.', 'म.नं.'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/se.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Karamell\n */\nreturn [\n    'year' => '{1}:count jahki|:count jagit',\n    'a_year' => '{1}okta jahki|:count jagit',\n    'y' => ':count j.',\n    'month' => '{1}:count mánnu|:count mánut',\n    'a_month' => '{1}okta mánnu|:count mánut',\n    'm' => ':count mán.',\n    'week' => '{1}:count vahkku|:count vahkku',\n    'a_week' => '{1}okta vahkku|:count vahkku',\n    'w' => ':count v.',\n    'day' => '{1}:count beaivi|:count beaivvit',\n    'a_day' => '{1}okta beaivi|:count beaivvit',\n    'd' => ':count b.',\n    'hour' => '{1}:count diimmu|:count diimmut',\n    'a_hour' => '{1}okta diimmu|:count diimmut',\n    'h' => ':count d.',\n    'minute' => '{1}:count minuhta|:count minuhtat',\n    'a_minute' => '{1}okta minuhta|:count minuhtat',\n    'min' => ':count min.',\n    'second' => '{1}:count sekunddat|:count sekunddat',\n    'a_second' => '{1}moadde sekunddat|:count sekunddat',\n    's' => ':count s.',\n    'ago' => 'maŋit :time',\n    'from_now' => ':time geažes',\n    'diff_yesterday' => 'ikte',\n    'diff_yesterday_regexp' => 'ikte(?:\\\\s+ti)?',\n    'diff_today' => 'otne',\n    'diff_today_regexp' => 'otne(?:\\\\s+ti)?',\n    'diff_tomorrow' => 'ihttin',\n    'diff_tomorrow_regexp' => 'ihttin(?:\\\\s+ti)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'MMMM D. [b.] YYYY',\n        'LLL' => 'MMMM D. [b.] YYYY [ti.] HH:mm',\n        'LLLL' => 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[otne ti] LT',\n        'nextDay' => '[ihttin ti] LT',\n        'nextWeek' => 'dddd [ti] LT',\n        'lastDay' => '[ikte ti] LT',\n        'lastWeek' => '[ovddit] dddd [ti] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['ođđajagemánnu', 'guovvamánnu', 'njukčamánnu', 'cuoŋománnu', 'miessemánnu', 'geassemánnu', 'suoidnemánnu', 'borgemánnu', 'čakčamánnu', 'golggotmánnu', 'skábmamánnu', 'juovlamánnu'],\n    'months_short' => ['ođđj', 'guov', 'njuk', 'cuo', 'mies', 'geas', 'suoi', 'borg', 'čakč', 'golg', 'skáb', 'juov'],\n    'weekdays' => ['sotnabeaivi', 'vuossárga', 'maŋŋebárga', 'gaskavahkku', 'duorastat', 'bearjadat', 'lávvardat'],\n    'weekdays_short' => ['sotn', 'vuos', 'maŋ', 'gask', 'duor', 'bear', 'láv'],\n    'weekdays_min' => ['s', 'v', 'm', 'g', 'd', 'b', 'L'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' ja '],\n    'meridiem' => ['i.b.', 'e.b.'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/se_FI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/se.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'months' => ['ođđajagemánnu', 'guovvamánnu', 'njukčamánnu', 'cuoŋománnu', 'miessemánnu', 'geassemánnu', 'suoidnemánnu', 'borgemánnu', 'čakčamánnu', 'golggotmánnu', 'skábmamánnu', 'juovlamánnu'],\n    'months_short' => ['ođđj', 'guov', 'njuk', 'cuoŋ', 'mies', 'geas', 'suoi', 'borg', 'čakč', 'golg', 'skáb', 'juov'],\n    'weekdays' => ['sotnabeaivi', 'mánnodat', 'disdat', 'gaskavahkku', 'duorastat', 'bearjadat', 'lávvordat'],\n    'weekdays_short' => ['so', 'má', 'di', 'ga', 'du', 'be', 'lá'],\n    'weekdays_min' => ['so', 'má', 'di', 'ga', 'du', 'be', 'lá'],\n    'meridiem' => ['i', 'e'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/se_NO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/se.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/se_SE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/se.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/seh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['Dimingu', 'Chiposi', 'Chipiri', 'Chitatu', 'Chinai', 'Chishanu', 'Sabudu'],\n    'weekdays_short' => ['Dim', 'Pos', 'Pir', 'Tat', 'Nai', 'Sha', 'Sab'],\n    'weekdays_min' => ['Dim', 'Pos', 'Pir', 'Tat', 'Nai', 'Sha', 'Sab'],\n    'months' => ['Janeiro', 'Fevreiro', 'Marco', 'Abril', 'Maio', 'Junho', 'Julho', 'Augusto', 'Setembro', 'Otubro', 'Novembro', 'Decembro'],\n    'months_short' => ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Aug', 'Set', 'Otu', 'Nov', 'Dec'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'd [de] MMM [de] YYYY',\n        'LLL' => 'd [de] MMMM [de] YYYY HH:mm',\n        'LLLL' => 'dddd, d [de] MMMM [de] YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ses.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Adduha', 'Aluula'],\n    'weekdays' => ['Alhadi', 'Atinni', 'Atalaata', 'Alarba', 'Alhamiisa', 'Alzuma', 'Asibti'],\n    'weekdays_short' => ['Alh', 'Ati', 'Ata', 'Ala', 'Alm', 'Alz', 'Asi'],\n    'weekdays_min' => ['Alh', 'Ati', 'Ata', 'Ala', 'Alm', 'Alz', 'Asi'],\n    'months' => ['Žanwiye', 'Feewiriye', 'Marsi', 'Awiril', 'Me', 'Žuweŋ', 'Žuyye', 'Ut', 'Sektanbur', 'Oktoobur', 'Noowanbur', 'Deesanbur'],\n    'months_short' => ['Žan', 'Fee', 'Mar', 'Awi', 'Me', 'Žuw', 'Žuy', 'Ut', 'Sek', 'Okt', 'Noo', 'Dee'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'month' => ':count alaada', // less reliable\n    'm' => ':count alaada', // less reliable\n    'a_month' => ':count alaada', // less reliable\n\n    'hour' => ':count ɲaajin', // less reliable\n    'h' => ':count ɲaajin', // less reliable\n    'a_hour' => ':count ɲaajin', // less reliable\n\n    'minute' => ':count zarbu', // less reliable\n    'min' => ':count zarbu', // less reliable\n    'a_minute' => ':count zarbu', // less reliable\n\n    'year' => ':count jiiri',\n    'y' => ':count jiiri',\n    'a_year' => ':count jiiri',\n\n    'week' => ':count jirbiiyye',\n    'w' => ':count jirbiiyye',\n    'a_week' => ':count jirbiiyye',\n\n    'day' => ':count zaari',\n    'd' => ':count zaari',\n    'a_day' => ':count zaari',\n\n    'second' => ':count ihinkante',\n    's' => ':count ihinkante',\n    'a_second' => ':count ihinkante',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['ND', 'LK'],\n    'weekdays' => ['Bikua-ôko', 'Bïkua-ûse', 'Bïkua-ptâ', 'Bïkua-usïö', 'Bïkua-okü', 'Lâpôsö', 'Lâyenga'],\n    'weekdays_short' => ['Bk1', 'Bk2', 'Bk3', 'Bk4', 'Bk5', 'Lâp', 'Lây'],\n    'weekdays_min' => ['Bk1', 'Bk2', 'Bk3', 'Bk4', 'Bk5', 'Lâp', 'Lây'],\n    'months' => ['Nyenye', 'Fulundïgi', 'Mbängü', 'Ngubùe', 'Bêläwü', 'Föndo', 'Lengua', 'Kükürü', 'Mvuka', 'Ngberere', 'Nabändüru', 'Kakauka'],\n    'months_short' => ['Nye', 'Ful', 'Mbä', 'Ngu', 'Bêl', 'Fön', 'Len', 'Kük', 'Mvu', 'Ngb', 'Nab', 'Kak'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count dā', // less reliable\n    'y' => ':count dā', // less reliable\n    'a_year' => ':count dā', // less reliable\n\n    'week' => ':count bïkua-okü', // less reliable\n    'w' => ':count bïkua-okü', // less reliable\n    'a_week' => ':count bïkua-okü', // less reliable\n\n    'day' => ':count ziggawâ', // less reliable\n    'd' => ':count ziggawâ', // less reliable\n    'a_day' => ':count ziggawâ', // less reliable\n\n    'hour' => ':count yângâködörö', // less reliable\n    'h' => ':count yângâködörö', // less reliable\n    'a_hour' => ':count yângâködörö', // less reliable\n\n    'second' => ':count bïkua-ôko', // less reliable\n    's' => ':count bïkua-ôko', // less reliable\n    'a_second' => ':count bïkua-ôko', // less reliable\n\n    'month' => ':count Nze tî ngu',\n    'm' => ':count Nze tî ngu',\n    'a_month' => ':count Nze tî ngu',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sgs.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sgs_LT.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sgs_LT.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Arnas Udovičius bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY.MM.DD',\n    ],\n    'months' => ['sausė', 'vasarė', 'kuova', 'balondė', 'gegožės', 'bėrželė', 'lëpas', 'rogpjūtė', 'siejės', 'spalė', 'lapkrėstė', 'grůdė'],\n    'months_short' => ['Sau', 'Vas', 'Kuo', 'Bal', 'Geg', 'Bėr', 'Lëp', 'Rgp', 'Sie', 'Spa', 'Lap', 'Grd'],\n    'weekdays' => ['nedielės dëna', 'panedielis', 'oterninks', 'sereda', 'četvergs', 'petnīčė', 'sobata'],\n    'weekdays_short' => ['Nd', 'Pn', 'Ot', 'Sr', 'Čt', 'Pt', 'Sb'],\n    'weekdays_min' => ['Nd', 'Pn', 'Ot', 'Sr', 'Čt', 'Pt', 'Sb'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'minute' => ':count mažos', // less reliable\n    'min' => ':count mažos', // less reliable\n    'a_minute' => ':count mažos', // less reliable\n\n    'year' => ':count metā',\n    'y' => ':count metā',\n    'a_year' => ':count metā',\n\n    'month' => ':count mienou',\n    'm' => ':count mienou',\n    'a_month' => ':count mienou',\n\n    'week' => ':count nedielė',\n    'w' => ':count nedielė',\n    'a_week' => ':count nedielė',\n\n    'day' => ':count dīna',\n    'd' => ':count dīna',\n    'a_day' => ':count dīna',\n\n    'hour' => ':count adīna',\n    'h' => ':count adīna',\n    'a_hour' => ':count adīna',\n\n    'second' => ':count Sekondė',\n    's' => ':count Sekondė',\n    'a_second' => ':count Sekondė',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n// @codeCoverageIgnoreStart\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\nif (class_exists('Symfony\\\\Component\\\\Translation\\\\PluralizationRules')) {\n    PluralizationRules::set(static function ($number) {\n        return (($number % 10 == 1) && ($number % 100 != 11)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);\n    }, 'sh');\n}\n// @codeCoverageIgnoreEnd\n\n/*\n * Authors:\n * - Томица Кораћ\n * - Enrique Vidal\n * - Christopher Dell\n * - dmilisic\n * - danijel\n * - Miroslav Matkovic (mikki021)\n */\nreturn [\n    'diff_now' => 'sada',\n    'diff_yesterday' => 'juče',\n    'diff_tomorrow' => 'sutra',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'MMMM D, YYYY',\n        'LLL' => 'DD MMM HH:mm',\n        'LLLL' => 'MMMM DD, YYYY HH:mm',\n    ],\n    'year' => ':count godina|:count godine|:count godina',\n    'y' => ':count g.',\n    'month' => ':count mesec|:count meseca|:count meseci',\n    'm' => ':count m.',\n    'week' => ':count nedelja|:count nedelje|:count nedelja',\n    'w' => ':count n.',\n    'day' => ':count dan|:count dana|:count dana',\n    'd' => ':count d.',\n    'hour' => ':count sat|:count sata|:count sati',\n    'h' => ':count č.',\n    'minute' => ':count minut|:count minuta|:count minuta',\n    'min' => ':count min.',\n    'second' => ':count sekund|:count sekunde|:count sekundi',\n    's' => ':count s.',\n    'ago' => 'pre :time',\n    'from_now' => 'za :time',\n    'after' => 'nakon :time',\n    'before' => ':time raniјe',\n    'weekdays' => ['Nedelja', 'Ponedeljak', 'Utorak', 'Sreda', 'Četvrtak', 'Petak', 'Subota'],\n    'weekdays_short' => ['Ned', 'Pon', 'Uto', 'Sre', 'Čet', 'Pet', 'Sub'],\n    'weekdays_min' => ['Ned', 'Pon', 'Uto', 'Sre', 'Čet', 'Pet', 'Sub'],\n    'months' => ['Januar', 'Februar', 'Mart', 'April', 'Maj', 'Jun', 'Jul', 'Avgust', 'Septembar', 'Oktobar', 'Novembar', 'Decembar'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Avg', 'Sep', 'Okt', 'Nov', 'Dec'],\n    'list' => [', ', ' i '],\n    'meridiem' => ['pre podne', 'po podne'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['ⵜⵉⴼⴰⵡⵜ', 'ⵜⴰⴷⴳⴳⵯⴰⵜ'],\n    'weekdays' => ['ⴰⵙⴰⵎⴰⵙ', 'ⴰⵢⵏⴰⵙ', 'ⴰⵙⵉⵏⴰⵙ', 'ⴰⴽⵕⴰⵙ', 'ⴰⴽⵡⴰⵙ', 'ⵙⵉⵎⵡⴰⵙ', 'ⴰⵙⵉⴹⵢⴰⵙ'],\n    'weekdays_short' => ['ⴰⵙⴰ', 'ⴰⵢⵏ', 'ⴰⵙⵉ', 'ⴰⴽⵕ', 'ⴰⴽⵡ', 'ⴰⵙⵉⵎ', 'ⴰⵙⵉⴹ'],\n    'weekdays_min' => ['ⴰⵙⴰ', 'ⴰⵢⵏ', 'ⴰⵙⵉ', 'ⴰⴽⵕ', 'ⴰⴽⵡ', 'ⴰⵙⵉⵎ', 'ⴰⵙⵉⴹ'],\n    'months' => ['ⵉⵏⵏⴰⵢⵔ', 'ⴱⵕⴰⵢⵕ', 'ⵎⴰⵕⵚ', 'ⵉⴱⵔⵉⵔ', 'ⵎⴰⵢⵢⵓ', 'ⵢⵓⵏⵢⵓ', 'ⵢⵓⵍⵢⵓⵣ', 'ⵖⵓⵛⵜ', 'ⵛⵓⵜⴰⵏⴱⵉⵔ', 'ⴽⵜⵓⴱⵔ', 'ⵏⵓⵡⴰⵏⴱⵉⵔ', 'ⴷⵓⵊⴰⵏⴱⵉⵔ'],\n    'months_short' => ['ⵉⵏⵏ', 'ⴱⵕⴰ', 'ⵎⴰⵕ', 'ⵉⴱⵔ', 'ⵎⴰⵢ', 'ⵢⵓⵏ', 'ⵢⵓⵍ', 'ⵖⵓⵛ', 'ⵛⵓⵜ', 'ⴽⵜⵓ', 'ⵏⵓⵡ', 'ⴷⵓⵊ'],\n    'first_day_of_week' => 6,\n    'weekend' => [5, 6],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'year' => ':count aseggwas',\n    'y' => ':count aseggwas',\n    'a_year' => ':count aseggwas',\n\n    'month' => ':count ayyur',\n    'm' => ':count ayyur',\n    'a_month' => ':count ayyur',\n\n    'week' => ':count imalass',\n    'w' => ':count imalass',\n    'a_week' => ':count imalass',\n\n    'day' => ':count ass',\n    'd' => ':count ass',\n    'a_day' => ':count ass',\n\n    'hour' => ':count urɣ', // less reliable\n    'h' => ':count urɣ', // less reliable\n    'a_hour' => ':count urɣ', // less reliable\n\n    'minute' => ':count ⴰⵎⵥⵉ', // less reliable\n    'min' => ':count ⴰⵎⵥⵉ', // less reliable\n    'a_minute' => ':count ⴰⵎⵥⵉ', // less reliable\n\n    'second' => ':count sin', // less reliable\n    's' => ':count sin', // less reliable\n    'a_second' => ':count sin', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shi_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/shi.php', [\n    'meridiem' => ['tifawt', 'tadggʷat'],\n    'weekdays' => ['asamas', 'aynas', 'asinas', 'akṛas', 'akwas', 'asimwas', 'asiḍyas'],\n    'weekdays_short' => ['asa', 'ayn', 'asi', 'akṛ', 'akw', 'asim', 'asiḍ'],\n    'weekdays_min' => ['asa', 'ayn', 'asi', 'akṛ', 'akw', 'asim', 'asiḍ'],\n    'months' => ['innayr', 'bṛayṛ', 'maṛṣ', 'ibrir', 'mayyu', 'yunyu', 'yulyuz', 'ɣuct', 'cutanbir', 'ktubr', 'nuwanbir', 'dujanbir'],\n    'months_short' => ['inn', 'bṛa', 'maṛ', 'ibr', 'may', 'yun', 'yul', 'ɣuc', 'cut', 'ktu', 'nuw', 'duj'],\n    'first_day_of_week' => 6,\n    'weekend' => [5, 6],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n\n    'minute' => ':count agur', // less reliable\n    'min' => ':count agur', // less reliable\n    'a_minute' => ':count agur', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shi_Tfng.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/shi.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/shn_MM.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shn_MM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - ubuntu Myanmar LoCo Team https://ubuntu-mm.net Bone Pyae Sone bone.burma@mail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'OY MMM OD dddd',\n    ],\n    'months' => ['လိူၼ်ၵမ်', 'လိူၼ်သၢမ်', 'လိူၼ်သီ', 'လိူၼ်ႁႃႈ', 'လိူၼ်ႁူၵ်း', 'လိူၼ်ၸဵတ်း', 'လိူၼ်ပႅတ်ႇ', 'လိူၼ်ၵဝ်ႈ', 'လိူၼ်သိပ်း', 'လိူၼ်သိပ်းဢိတ်း', 'လိူၼ်သိပ်းဢိတ်းသွင်', 'လိူၼ်ၸဵင်'],\n    'months_short' => ['လိူၼ်ၵမ်', 'လိူၼ်သၢမ်', 'လိူၼ်သီ', 'လိူၼ်ႁႃႈ', 'လိူၼ်ႁူၵ်း', 'လိူၼ်ၸဵတ်း', 'လိူၼ်ပႅတ်ႇ', 'လိူၼ်ၵဝ်ႈ', 'လိူၼ်သိပ်း', 'လိူၼ်သိပ်းဢိတ်း', 'လိူၼ်သိပ်းဢိတ်းသွင်', 'လိူၼ်ၸဵင်'],\n    'weekdays' => ['ဝၼ်းဢႃးတိတ်ႉ', 'ဝၼ်းၸၼ်', 'ဝၼ်း​ဢၢင်း​ၵၢၼ်း', 'ဝၼ်းပူတ်ႉ', 'ဝၼ်းၽတ်း', 'ဝၼ်းသုၵ်း', 'ဝၼ်းသဝ်'],\n    'weekdays_short' => ['တိတ့်', 'ၸၼ်', 'ၵၢၼ်း', 'ပုတ့်', 'ၽတ်း', 'သုၵ်း', 'သဝ်'],\n    'weekdays_min' => ['တိတ့်', 'ၸၼ်', 'ၵၢၼ်း', 'ပုတ့်', 'ၽတ်း', 'သုၵ်း', 'သဝ်'],\n    'alt_numbers' => ['႐႐', '႐႑', '႐႒', '႐႓', '႐႔', '႐႕', '႐႖', '႐႗', '႐႘', '႐႙', '႑႐', '႑႑', '႑႒', '႑႓', '႑႔', '႑႕', '႑႖', '႑႗', '႑႘', '႑႙', '႒႐', '႒႑', '႒႒', '႒႓', '႒႔', '႒႕', '႒႖', '႒႗', '႒႘', '႒႙', '႓႐', '႓႑', '႓႒', '႓႓', '႓႔', '႓႕', '႓႖', '႓႗', '႓႘', '႓႙', '႔႐', '႔႑', '႔႒', '႔႓', '႔႔', '႔႕', '႔႖', '႔႗', '႔႘', '႔႙', '႕႐', '႕႑', '႕႒', '႕႓', '႕႔', '႕႕', '႕႖', '႕႗', '႕႘', '႕႙', '႖႐', '႖႑', '႖႒', '႖႓', '႖႔', '႖႕', '႖႖', '႖႗', '႖႘', '႖႙', '႗႐', '႗႑', '႗႒', '႗႓', '႗႔', '႗႕', '႗႖', '႗႗', '႗႘', '႗႙', '႘႐', '႘႑', '႘႒', '႘႓', '႘႔', '႘႕', '႘႖', '႘႗', '႘႘', '႘႙', '႙႐', '႙႑', '႙႒', '႙႓', '႙႔', '႙႕', '႙႖', '႙႗', '႙႘', '႙႙'],\n    'meridiem' => ['ၵၢင်ၼႂ်', 'တၢမ်းၶမ်ႈ'],\n\n    'month' => ':count လိူၼ်', // less reliable\n    'm' => ':count လိူၼ်', // less reliable\n    'a_month' => ':count လိူၼ်', // less reliable\n\n    'week' => ':count ဝၼ်း', // less reliable\n    'w' => ':count ဝၼ်း', // less reliable\n    'a_week' => ':count ဝၼ်း', // less reliable\n\n    'hour' => ':count ຕີ', // less reliable\n    'h' => ':count ຕີ', // less reliable\n    'a_hour' => ':count ຕີ', // less reliable\n\n    'minute' => ':count ເດັກ', // less reliable\n    'min' => ':count ເດັກ', // less reliable\n    'a_minute' => ':count ເດັກ', // less reliable\n\n    'second' => ':count ဢိုၼ်ႇ', // less reliable\n    's' => ':count ဢိုၼ်ႇ', // less reliable\n    'a_second' => ':count ဢိုၼ်ႇ', // less reliable\n\n    'year' => ':count ပီ',\n    'y' => ':count ပီ',\n    'a_year' => ':count ပီ',\n\n    'day' => ':count ກາງວັນ',\n    'd' => ':count ກາງວັນ',\n    'a_day' => ':count ກາງວັນ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shs.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/shs_CA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/shs_CA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Neskie Manuel    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Pellkwet̓min', 'Pelctsipwen̓ten', 'Pellsqépts', 'Peslléwten', 'Pell7ell7é7llqten', 'Pelltspéntsk', 'Pelltqwelq̓wél̓t', 'Pellct̓éxel̓cten', 'Pesqelqlélten', 'Pesllwélsten', 'Pellc7ell7é7llcwten̓', 'Pelltetétq̓em'],\n    'months_short' => ['Kwe', 'Tsi', 'Sqe', 'Éwt', 'Ell', 'Tsp', 'Tqw', 'Ct̓é', 'Qel', 'Wél', 'U7l', 'Tet'],\n    'weekdays' => ['Sxetspesq̓t', 'Spetkesq̓t', 'Selesq̓t', 'Skellesq̓t', 'Smesesq̓t', 'Stselkstesq̓t', 'Stqmekstesq̓t'],\n    'weekdays_short' => ['Sxe', 'Spe', 'Sel', 'Ske', 'Sme', 'Sts', 'Stq'],\n    'weekdays_min' => ['Sxe', 'Spe', 'Sel', 'Ske', 'Sme', 'Sts', 'Stq'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count sqlélten', // less reliable\n    'y' => ':count sqlélten', // less reliable\n    'a_year' => ':count sqlélten', // less reliable\n\n    'month' => ':count swewll', // less reliable\n    'm' => ':count swewll', // less reliable\n    'a_month' => ':count swewll', // less reliable\n\n    'hour' => ':count seqwlút', // less reliable\n    'h' => ':count seqwlút', // less reliable\n    'a_hour' => ':count seqwlút', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/si.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Serhan Apaydın\n * - JD Isaacks\n * - Malinda Weerasinghe (MalindaWMD)\n */\nreturn [\n    'year' => '{1}වසර 1|වසර :count',\n    'a_year' => '{1}වසරක්|වසර :count',\n    'month' => '{1}මාස 1|මාස :count',\n    'a_month' => '{1}මාසය|මාස :count',\n    'week' => '{1}සති 1|සති :count',\n    'a_week' => '{1}සතියක්|සති :count',\n    'day' => '{1}දින 1|දින :count',\n    'a_day' => '{1}දිනක්|දින :count',\n    'hour' => '{1}පැය 1|පැය :count',\n    'a_hour' => '{1}පැයක්|පැය :count',\n    'minute' => '{1}මිනිත්තු 1|මිනිත්තු :count',\n    'a_minute' => '{1}මිනිත්තුවක්|මිනිත්තු :count',\n    'second' => '{1}තත්පර 1|තත්පර :count',\n    'a_second' => '{1}තත්පර කිහිපයකට|තත්පර :count',\n    'ago' => ':time කට පෙර',\n    'from_now' => function ($time) {\n        if (preg_match('/දින \\d/u', $time)) {\n            return $time.' න්';\n        }\n\n        return $time.' කින්';\n    },\n    'before' => ':time කට පෙර',\n    'after' => function ($time) {\n        if (preg_match('/දින \\d/u', $time)) {\n            return $time.' න්';\n        }\n\n        return $time.' කින්';\n    },\n    'diff_now' => 'දැන්',\n    'diff_today' => 'අද',\n    'diff_yesterday' => 'ඊයේ',\n    'diff_tomorrow' => 'හෙට',\n    'formats' => [\n        'LT' => 'a h:mm',\n        'LTS' => 'a h:mm:ss',\n        'L' => 'YYYY/MM/DD',\n        'LL' => 'YYYY MMMM D',\n        'LLL' => 'YYYY MMMM D, a h:mm',\n        'LLLL' => 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n    ],\n    'calendar' => [\n        'sameDay' => '[අද] LT[ට]',\n        'nextDay' => '[හෙට] LT[ට]',\n        'nextWeek' => 'dddd LT[ට]',\n        'lastDay' => '[ඊයේ] LT[ට]',\n        'lastWeek' => '[පසුගිය] dddd LT[ට]',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number වැනි',\n    'meridiem' => ['පෙර වරු', 'පස් වරු', 'පෙ.ව.', 'ප.ව.'],\n    'months' => ['ජනවාරි', 'පෙබරවාරි', 'මාර්තු', 'අප්‍රේල්', 'මැයි', 'ජූනි', 'ජූලි', 'අගෝස්තු', 'සැප්තැම්බර්', 'ඔක්තෝබර්', 'නොවැම්බර්', 'දෙසැම්බර්'],\n    'months_short' => ['ජන', 'පෙබ', 'මාර්', 'අප්', 'මැයි', 'ජූනි', 'ජූලි', 'අගෝ', 'සැප්', 'ඔක්', 'නොවැ', 'දෙසැ'],\n    'weekdays' => ['ඉරිදා', 'සඳුදා', 'අඟහරුවාදා', 'බදාදා', 'බ්‍රහස්පතින්දා', 'සිකුරාදා', 'සෙනසුරාදා'],\n    'weekdays_short' => ['ඉරි', 'සඳු', 'අඟ', 'බදා', 'බ්‍රහ', 'සිකු', 'සෙන'],\n    'weekdays_min' => ['ඉ', 'ස', 'අ', 'බ', 'බ්‍ර', 'සි', 'සෙ'],\n    'first_day_of_week' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/si_LK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/si.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sid.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sid_ET.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sid_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n    'weekdays' => ['Sambata', 'Sanyo', 'Maakisanyo', 'Roowe', 'Hamuse', 'Arbe', 'Qidaame'],\n    'weekdays_short' => ['Sam', 'San', 'Mak', 'Row', 'Ham', 'Arb', 'Qid'],\n    'weekdays_min' => ['Sam', 'San', 'Mak', 'Row', 'Ham', 'Arb', 'Qid'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['soodo', 'hawwaro'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sk.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Martin Suja\n * - Tsutomu Kuroda\n * - tjku\n * - Max Melentiev\n * - Juanito Fatas\n * - Ivan Stana\n * - Akira Matsuda\n * - Christopher Dell\n * - James McKinney\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Jozef Fulop\n * - Nicolás Hock Isaza\n * - Tom Hughes\n * - Simon Hürlimann (CyT)\n * - jofi\n * - Jakub ADAMEC\n * - Marek Adamický\n * - AlterwebStudio\n */\n\nuse Carbon\\CarbonInterface;\n\n$fromNow = function ($time) {\n    return 'o '.strtr($time, [\n            'hodina' => 'hodinu',\n            'minúta' => 'minútu',\n            'sekunda' => 'sekundu',\n        ]);\n};\n\n$ago = function ($time) {\n    $replacements = [\n        '/\\bhodina\\b/' => 'hodinou',\n        '/\\bminúta\\b/' => 'minútou',\n        '/\\bsekunda\\b/' => 'sekundou',\n        '/\\bdeň\\b/u' => 'dňom',\n        '/\\btýždeň\\b/u' => 'týždňom',\n        '/\\bmesiac\\b/' => 'mesiacom',\n        '/\\brok\\b/' => 'rokom',\n    ];\n\n    $replacementsPlural = [\n        '/\\bhodiny\\b/' => 'hodinami',\n        '/\\bminúty\\b/' => 'minútami',\n        '/\\bsekundy\\b/' => 'sekundami',\n        '/\\bdni\\b/' => 'dňami',\n        '/\\btýždne\\b/' => 'týždňami',\n        '/\\bmesiace\\b/' => 'mesiacmi',\n        '/\\broky\\b/' => 'rokmi',\n    ];\n\n    foreach ($replacements + $replacementsPlural as $pattern => $replacement) {\n        $time = preg_replace($pattern, $replacement, $time);\n    }\n\n    return \"pred $time\";\n};\n\nreturn [\n    'year' => ':count rok|:count roky|:count rokov',\n    'a_year' => 'rok|:count roky|:count rokov',\n    'y' => ':count r',\n    'month' => ':count mesiac|:count mesiace|:count mesiacov',\n    'a_month' => 'mesiac|:count mesiace|:count mesiacov',\n    'm' => ':count m',\n    'week' => ':count týždeň|:count týždne|:count týždňov',\n    'a_week' => 'týždeň|:count týždne|:count týždňov',\n    'w' => ':count t',\n    'day' => ':count deň|:count dni|:count dní',\n    'a_day' => 'deň|:count dni|:count dní',\n    'd' => ':count d',\n    'hour' => ':count hodina|:count hodiny|:count hodín',\n    'a_hour' => 'hodina|:count hodiny|:count hodín',\n    'h' => ':count h',\n    'minute' => ':count minúta|:count minúty|:count minút',\n    'a_minute' => 'minúta|:count minúty|:count minút',\n    'min' => ':count min',\n    'second' => ':count sekunda|:count sekundy|:count sekúnd',\n    'a_second' => 'sekunda|:count sekundy|:count sekúnd',\n    's' => ':count s',\n    'millisecond' => ':count milisekunda|:count milisekundy|:count milisekúnd',\n    'a_millisecond' => 'milisekunda|:count milisekundy|:count milisekúnd',\n    'ms' => ':count ms',\n    'microsecond' => ':count mikrosekunda|:count mikrosekundy|:count mikrosekúnd',\n    'a_microsecond' => 'mikrosekunda|:count mikrosekundy|:count mikrosekúnd',\n    'µs' => ':count µs',\n\n    'ago' => $ago,\n    'from_now' => $fromNow,\n    'before' => ':time pred',\n    'after' => ':time po',\n\n    'hour_after' => ':count hodinu|:count hodiny|:count hodín',\n    'minute_after' => ':count minútu|:count minúty|:count minút',\n    'second_after' => ':count sekundu|:count sekundy|:count sekúnd',\n\n    'hour_before' => ':count hodinu|:count hodiny|:count hodín',\n    'minute_before' => ':count minútu|:count minúty|:count minút',\n    'second_before' => ':count sekundu|:count sekundy|:count sekúnd',\n\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' a '],\n    'diff_now' => 'teraz',\n    'diff_yesterday' => 'včera',\n    'diff_tomorrow' => 'zajtra',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'DD. MMMM YYYY',\n        'LLL' => 'D. M. HH:mm',\n        'LLLL' => 'dddd D. MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[dnes o] LT',\n        'nextDay' => '[zajtra o] LT',\n        'lastDay' => '[včera o] LT',\n        'nextWeek' => 'dddd [o] LT',\n        'lastWeek' => static function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 1:\n                case 2:\n                case 4:\n                case 5:\n                    return '[minulý] dddd [o] LT'; //pondelok/utorok/štvrtok/piatok\n                default:\n                    return '[minulá] dddd [o] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'weekdays' => ['nedeľa', 'pondelok', 'utorok', 'streda', 'štvrtok', 'piatok', 'sobota'],\n    'weekdays_short' => ['ned', 'pon', 'uto', 'str', 'štv', 'pia', 'sob'],\n    'weekdays_min' => ['ne', 'po', 'ut', 'st', 'št', 'pi', 'so'],\n    'months' => ['január', 'február', 'marec', 'apríl', 'máj', 'jún', 'júl', 'august', 'september', 'október', 'november', 'december'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'máj', 'jún', 'júl', 'aug', 'sep', 'okt', 'nov', 'dec'],\n    'meridiem' => ['dopoludnia', 'popoludní'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sk_SK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sk.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - tjku\n * - Max Melentiev\n * - Juanito Fatas\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Nicolás Hock Isaza\n * - Miha Rebernik\n * - Gal Jakič (morpheus7CS)\n * - Glavić\n * - Anže Časar\n * - Lovro Tramšek (Lovro1107)\n * - burut13\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count leto|:count leti|:count leta|:count let',\n    'y' => ':count leto|:count leti|:count leta|:count let',\n    'month' => ':count mesec|:count meseca|:count mesece|:count mesecev',\n    'm' => ':count mes.',\n    'week' => ':count teden|:count tedna|:count tedne|:count tednov',\n    'w' => ':count ted.',\n    'day' => ':count dan|:count dni|:count dni|:count dni',\n    'd' => ':count dan|:count dni|:count dni|:count dni',\n    'hour' => ':count ura|:count uri|:count ure|:count ur',\n    'h' => ':count h',\n    'minute' => ':count minuta|:count minuti|:count minute|:count minut',\n    'min' => ':count min.',\n    'second' => ':count sekunda|:count sekundi|:count sekunde|:count sekund',\n    'a_second' => '{1}nekaj sekund|:count sekunda|:count sekundi|:count sekunde|:count sekund',\n    's' => ':count s',\n\n    'year_ago' => ':count letom|:count letoma|:count leti|:count leti',\n    'y_ago' => ':count letom|:count letoma|:count leti|:count leti',\n    'month_ago' => ':count mesecem|:count mesecema|:count meseci|:count meseci',\n    'week_ago' => ':count tednom|:count tednoma|:count tedni|:count tedni',\n    'day_ago' => ':count dnem|:count dnevoma|:count dnevi|:count dnevi',\n    'd_ago' => ':count dnem|:count dnevoma|:count dnevi|:count dnevi',\n    'hour_ago' => ':count uro|:count urama|:count urami|:count urami',\n    'minute_ago' => ':count minuto|:count minutama|:count minutami|:count minutami',\n    'second_ago' => ':count sekundo|:count sekundama|:count sekundami|:count sekundami',\n\n    'day_from_now' => ':count dan|:count dneva|:count dni|:count dni',\n    'd_from_now' => ':count dan|:count dneva|:count dni|:count dni',\n    'hour_from_now' => ':count uro|:count uri|:count ure|:count ur',\n    'minute_from_now' => ':count minuto|:count minuti|:count minute|:count minut',\n    'second_from_now' => ':count sekundo|:count sekundi|:count sekunde|:count sekund',\n\n    'ago' => 'pred :time',\n    'from_now' => 'čez :time',\n    'after' => ':time kasneje',\n    'before' => ':time prej',\n\n    'diff_now' => 'ravnokar',\n    'diff_today' => 'danes',\n    'diff_today_regexp' => 'danes(?:\\\\s+ob)?',\n    'diff_yesterday' => 'včeraj',\n    'diff_yesterday_regexp' => 'včeraj(?:\\\\s+ob)?',\n    'diff_tomorrow' => 'jutri',\n    'diff_tomorrow_regexp' => 'jutri(?:\\\\s+ob)?',\n    'diff_before_yesterday' => 'predvčerajšnjim',\n    'diff_after_tomorrow' => 'pojutrišnjem',\n\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'period_start_date' => 'od :date',\n    'period_end_date' => 'do :date',\n\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[danes ob] LT',\n        'nextDay' => '[jutri ob] LT',\n        'nextWeek' => 'dddd [ob] LT',\n        'lastDay' => '[včeraj ob] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[preteklo] [nedeljo] [ob] LT';\n                case 1:\n                    return '[pretekli] [ponedeljek] [ob] LT';\n                case 2:\n                    return '[pretekli] [torek] [ob] LT';\n                case 3:\n                    return '[preteklo] [sredo] [ob] LT';\n                case 4:\n                    return '[pretekli] [četrtek] [ob] LT';\n                case 5:\n                    return '[pretekli] [petek] [ob] LT';\n                case 6:\n                    return '[preteklo] [soboto] [ob] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'months' => ['januar', 'februar', 'marec', 'april', 'maj', 'junij', 'julij', 'avgust', 'september', 'oktober', 'november', 'december'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'avg', 'sep', 'okt', 'nov', 'dec'],\n    'weekdays' => ['nedelja', 'ponedeljek', 'torek', 'sreda', 'četrtek', 'petek', 'sobota'],\n    'weekdays_short' => ['ned', 'pon', 'tor', 'sre', 'čet', 'pet', 'sob'],\n    'weekdays_min' => ['ne', 'po', 'to', 'sr', 'če', 'pe', 'so'],\n    'list' => [', ', ' in '],\n    'meridiem' => ['dopoldan', 'popoldan'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sl_SI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sm.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/sm_WS.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sm_WS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Samsung Electronics Co., Ltd.    akhilesh.k@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Ianuari', 'Fepuari', 'Mati', 'Aperila', 'Me', 'Iuni', 'Iulai', 'Auguso', 'Setema', 'Oketopa', 'Novema', 'Tesema'],\n    'months_short' => ['Ian', 'Fep', 'Mat', 'Ape', 'Me', 'Iun', 'Iul', 'Aug', 'Set', 'Oke', 'Nov', 'Tes'],\n    'weekdays' => ['Aso Sa', 'Aso Gafua', 'Aso Lua', 'Aso Lulu', 'Aso Tofi', 'Aso Farail', 'Aso To\\'ana\\'i'],\n    'weekdays_short' => ['Aso Sa', 'Aso Gaf', 'Aso Lua', 'Aso Lul', 'Aso Tof', 'Aso Far', 'Aso To\\''],\n    'weekdays_min' => ['Aso Sa', 'Aso Gaf', 'Aso Lua', 'Aso Lul', 'Aso Tof', 'Aso Far', 'Aso To\\''],\n\n    'hour' => ':count uati', // less reliable\n    'h' => ':count uati', // less reliable\n    'a_hour' => ':count uati', // less reliable\n\n    'minute' => ':count itiiti', // less reliable\n    'min' => ':count itiiti', // less reliable\n    'a_minute' => ':count itiiti', // less reliable\n\n    'second' => ':count lua', // less reliable\n    's' => ':count lua', // less reliable\n    'a_second' => ':count lua', // less reliable\n\n    'year' => ':count tausaga',\n    'y' => ':count tausaga',\n    'a_year' => ':count tausaga',\n\n    'month' => ':count māsina',\n    'm' => ':count māsina',\n    'a_month' => ':count māsina',\n\n    'week' => ':count vaiaso',\n    'w' => ':count vaiaso',\n    'a_week' => ':count vaiaso',\n\n    'day' => ':count aso',\n    'd' => ':count aso',\n    'a_day' => ':count aso',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/smn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['ip.', 'ep.'],\n    'weekdays' => ['pasepeeivi', 'vuossaargâ', 'majebaargâ', 'koskoho', 'tuorâstuv', 'vástuppeeivi', 'lávurduv'],\n    'weekdays_short' => ['pas', 'vuo', 'maj', 'kos', 'tuo', 'vás', 'láv'],\n    'weekdays_min' => ['pa', 'vu', 'ma', 'ko', 'tu', 'vá', 'lá'],\n    'weekdays_standalone' => ['pasepeivi', 'vuossargâ', 'majebargâ', 'koskokko', 'tuorâstâh', 'vástuppeivi', 'lávurdâh'],\n    'months' => ['uđđâivemáánu', 'kuovâmáánu', 'njuhčâmáánu', 'cuáŋuimáánu', 'vyesimáánu', 'kesimáánu', 'syeinimáánu', 'porgemáánu', 'čohčâmáánu', 'roovvâdmáánu', 'skammâmáánu', 'juovlâmáánu'],\n    'months_short' => ['uđiv', 'kuovâ', 'njuhčâ', 'cuáŋui', 'vyesi', 'kesi', 'syeini', 'porge', 'čohčâ', 'roovvâd', 'skammâ', 'juovlâ'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'H.mm',\n        'LTS' => 'H.mm.ss',\n        'L' => 'D.M.YYYY',\n        'LL' => 'MMM D. YYYY',\n        'LLL' => 'MMMM D. YYYY H.mm',\n        'LLLL' => 'dddd, MMMM D. YYYY H.mm',\n    ],\n\n    'hour' => ':count äigi', // less reliable\n    'h' => ':count äigi', // less reliable\n    'a_hour' => ':count äigi', // less reliable\n\n    'year' => ':count ihe',\n    'y' => ':count ihe',\n    'a_year' => ':count ihe',\n\n    'month' => ':count mánuppaje',\n    'm' => ':count mánuppaje',\n    'a_month' => ':count mánuppaje',\n\n    'week' => ':count okko',\n    'w' => ':count okko',\n    'a_week' => ':count okko',\n\n    'day' => ':count peivi',\n    'd' => ':count peivi',\n    'a_day' => ':count peivi',\n\n    'minute' => ':count miinut',\n    'min' => ':count miinut',\n    'a_minute' => ':count miinut',\n\n    'second' => ':count nubbe',\n    's' => ':count nubbe',\n    'a_second' => ':count nubbe',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['a', 'p'],\n    'weekdays' => ['Svondo', 'Muvhuro', 'Chipiri', 'Chitatu', 'China', 'Chishanu', 'Mugovera'],\n    'weekdays_short' => ['Svo', 'Muv', 'Chp', 'Cht', 'Chn', 'Chs', 'Mug'],\n    'weekdays_min' => ['Sv', 'Mu', 'Cp', 'Ct', 'Cn', 'Cs', 'Mg'],\n    'months' => ['Ndira', 'Kukadzi', 'Kurume', 'Kubvumbi', 'Chivabvu', 'Chikumi', 'Chikunguru', 'Nyamavhuvhu', 'Gunyana', 'Gumiguru', 'Mbudzi', 'Zvita'],\n    'months_short' => ['Ndi', 'Kuk', 'Kur', 'Kub', 'Chv', 'Chk', 'Chg', 'Nya', 'Gun', 'Gum', 'Mbu', 'Zvi'],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'YYYY MMMM D, dddd HH:mm',\n    ],\n\n    'year' => 'makore :count',\n    'y' => 'makore :count',\n    'a_year' => 'makore :count',\n\n    'month' => 'mwedzi :count',\n    'm' => 'mwedzi :count',\n    'a_month' => 'mwedzi :count',\n\n    'week' => 'vhiki :count',\n    'w' => 'vhiki :count',\n    'a_week' => 'vhiki :count',\n\n    'day' => 'mazuva :count',\n    'd' => 'mazuva :count',\n    'a_day' => 'mazuva :count',\n\n    'hour' => 'maawa :count',\n    'h' => 'maawa :count',\n    'a_hour' => 'maawa :count',\n\n    'minute' => 'minitsi :count',\n    'min' => 'minitsi :count',\n    'a_minute' => 'minitsi :count',\n\n    'second' => 'sekonzi :count',\n    's' => 'sekonzi :count',\n    'a_second' => 'sekonzi :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/so.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Author:\n * - Abdifatah Abdilahi(@abdifatahz)\n */\nreturn [\n    'year' => ':count sanad|:count sanadood',\n    'a_year' => 'sanad|:count sanadood',\n    'y' => '{1}:countsn|{0}:countsns|]1,Inf[:countsn',\n    'month' => ':count bil|:count bilood',\n    'a_month' => 'bil|:count bilood',\n    'm' => ':countbil',\n    'week' => ':count isbuuc',\n    'a_week' => 'isbuuc|:count isbuuc',\n    'w' => ':countis',\n    'day' => ':count maalin|:count maalmood',\n    'a_day' => 'maalin|:count maalmood',\n    'd' => ':countml',\n    'hour' => ':count saac',\n    'a_hour' => 'saacad|:count saac',\n    'h' => ':countsc',\n    'minute' => ':count daqiiqo',\n    'a_minute' => 'daqiiqo|:count daqiiqo',\n    'min' => ':countdq',\n    'second' => ':count ilbidhiqsi',\n    'a_second' => 'xooga ilbidhiqsiyo|:count ilbidhiqsi',\n    's' => ':countil',\n    'ago' => ':time kahor',\n    'from_now' => ':time gudahood',\n    'after' => ':time kedib',\n    'before' => ':time kahor',\n    'diff_now' => 'hada',\n    'diff_today' => 'maanta',\n    'diff_today_regexp' => 'maanta(?:\\s+markay\\s+(?:tahay|ahayd))?',\n    'diff_yesterday' => 'shalayto',\n    'diff_yesterday_regexp' => 'shalayto(?:\\s+markay\\s+ahayd)?',\n    'diff_tomorrow' => 'beri',\n    'diff_tomorrow_regexp' => 'beri(?:\\s+markay\\s+tahay)?',\n    'diff_before_yesterday' => 'doraato',\n    'diff_after_tomorrow' => 'saadanbe',\n    'period_recurrences' => 'mar|:count jeer',\n    'period_interval' => ':interval kasta',\n    'period_start_date' => 'laga bilaabo :date',\n    'period_end_date' => 'ilaa :date',\n    'months' => ['Janaayo', 'Febraayo', 'Abriil', 'Maajo', 'Juun', 'Luuliyo', 'Agoosto', 'Sebteembar', 'Oktoobar', 'Nofeembar', 'Diseembar'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Abr', 'Mjo', 'Jun', 'Lyo', 'Agt', 'Seb', 'Okt', 'Nof', 'Dis'],\n    'weekdays' => ['Axad', 'Isniin', 'Talaada', 'Arbaca', 'Khamiis', 'Jimce', 'Sabti'],\n    'weekdays_short' => ['Axd', 'Isn', 'Tal', 'Arb', 'Kha', 'Jim', 'Sbt'],\n    'weekdays_min' => ['Ax', 'Is', 'Ta', 'Ar', 'Kh', 'Ji', 'Sa'],\n    'list' => [', ', ' and '],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'calendar' => [\n        'sameDay' => '[Maanta markay tahay] LT',\n        'nextDay' => '[Beri markay tahay] LT',\n        'nextWeek' => 'dddd [markay tahay] LT',\n        'lastDay' => '[Shalay markay ahayd] LT',\n        'lastWeek' => '[Hore] dddd [Markay ahayd] LT',\n        'sameElse' => 'L',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/so_DJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/so.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/so_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn require __DIR__.'/so.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/so_KE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn require __DIR__.'/so.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/so_SO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn require __DIR__.'/so.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - JD Isaacks\n * - Fadion Dashi\n */\nreturn [\n    'year' => ':count vit|:count vjet',\n    'a_year' => 'një vit|:count vite',\n    'y' => ':count v.',\n    'month' => ':count muaj',\n    'a_month' => 'një muaj|:count muaj',\n    'm' => ':count muaj',\n    'week' => ':count javë',\n    'a_week' => ':count javë|:count javë',\n    'w' => ':count j.',\n    'day' => ':count ditë',\n    'a_day' => 'një ditë|:count ditë',\n    'd' => ':count d.',\n    'hour' => ':count orë',\n    'a_hour' => 'një orë|:count orë',\n    'h' => ':count o.',\n    'minute' => ':count minutë|:count minuta',\n    'a_minute' => 'një minutë|:count minuta',\n    'min' => ':count min.',\n    'second' => ':count sekondë|:count sekonda',\n    'a_second' => 'disa sekonda|:count sekonda',\n    's' => ':count s.',\n    'ago' => ':time më parë',\n    'from_now' => 'në :time',\n    'after' => ':time pas',\n    'before' => ':time para',\n    'diff_now' => 'tani',\n    'diff_today' => 'Sot',\n    'diff_today_regexp' => 'Sot(?:\\\\s+në)?',\n    'diff_yesterday' => 'dje',\n    'diff_yesterday_regexp' => 'Dje(?:\\\\s+në)?',\n    'diff_tomorrow' => 'nesër',\n    'diff_tomorrow_regexp' => 'Nesër(?:\\\\s+në)?',\n    'diff_before_yesterday' => 'pardje',\n    'diff_after_tomorrow' => 'pasnesër',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Sot në] LT',\n        'nextDay' => '[Nesër në] LT',\n        'nextWeek' => 'dddd [në] LT',\n        'lastDay' => '[Dje në] LT',\n        'lastWeek' => 'dddd [e kaluar në] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'meridiem' => ['PD', 'MD'],\n    'months' => ['janar', 'shkurt', 'mars', 'prill', 'maj', 'qershor', 'korrik', 'gusht', 'shtator', 'tetor', 'nëntor', 'dhjetor'],\n    'months_short' => ['jan', 'shk', 'mar', 'pri', 'maj', 'qer', 'kor', 'gus', 'sht', 'tet', 'nën', 'dhj'],\n    'weekdays' => ['e diel', 'e hënë', 'e martë', 'e mërkurë', 'e enjte', 'e premte', 'e shtunë'],\n    'weekdays_short' => ['die', 'hën', 'mar', 'mër', 'enj', 'pre', 'sht'],\n    'weekdays_min' => ['d', 'h', 'ma', 'më', 'e', 'p', 'sh'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' dhe '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sq_AL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sq.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sq_MK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/sq.php', [\n    'formats' => [\n        'L' => 'D.M.YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sq_XK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/sq.php', [\n    'formats' => [\n        'L' => 'D.M.YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - shaishavgandhi05\n * - Serhan Apaydın\n * - JD Isaacks\n * - Glavić\n * - Milos Sakovic\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count godina|:count godine|:count godina',\n    'y' => ':count g.',\n    'month' => ':count mesec|:count meseca|:count meseci',\n    'm' => ':count mj.',\n    'week' => ':count nedelja|:count nedelje|:count nedelja',\n    'w' => ':count ned.',\n    'day' => ':count dan|:count dana|:count dana',\n    'd' => ':count d.',\n    'hour' => ':count sat|:count sata|:count sati',\n    'h' => ':count č.',\n    'minute' => ':count minut|:count minuta|:count minuta',\n    'min' => ':count min.',\n    'second' => ':count sekundu|:count sekunde|:count sekundi',\n    's' => ':count sek.',\n    'ago' => 'pre :time',\n    'from_now' => 'za :time',\n    'after' => 'nakon :time',\n    'before' => 'pre :time',\n\n    'year_from_now' => ':count godinu|:count godine|:count godina',\n    'year_ago' => ':count godinu|:count godine|:count godina',\n    'week_from_now' => ':count nedelju|:count nedelje|:count nedelja',\n    'week_ago' => ':count nedelju|:count nedelje|:count nedelja',\n\n    'diff_now' => 'upravo sada',\n    'diff_today' => 'danas',\n    'diff_today_regexp' => 'danas(?:\\\\s+u)?',\n    'diff_yesterday' => 'juče',\n    'diff_yesterday_regexp' => 'juče(?:\\\\s+u)?',\n    'diff_tomorrow' => 'sutra',\n    'diff_tomorrow_regexp' => 'sutra(?:\\\\s+u)?',\n    'diff_before_yesterday' => 'prekjuče',\n    'diff_after_tomorrow' => 'preksutra',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[danas u] LT',\n        'nextDay' => '[sutra u] LT',\n        'nextWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[u nedelju u] LT';\n                case 3:\n                    return '[u sredu u] LT';\n                case 6:\n                    return '[u subotu u] LT';\n                default:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        'lastDay' => '[juče u] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[prošle nedelje u] LT';\n                case 1:\n                    return '[prošlog ponedeljka u] LT';\n                case 2:\n                    return '[prošlog utorka u] LT';\n                case 3:\n                    return '[prošle srede u] LT';\n                case 4:\n                    return '[prošlog četvrtka u] LT';\n                case 5:\n                    return '[prošlog petka u] LT';\n                default:\n                    return '[prošle subote u] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['januar', 'februar', 'mart', 'april', 'maj', 'jun', 'jul', 'avgust', 'septembar', 'oktobar', 'novembar', 'decembar'],\n    'months_short' => ['jan.', 'feb.', 'mar.', 'apr.', 'maj', 'jun', 'jul', 'avg.', 'sep.', 'okt.', 'nov.', 'dec.'],\n    'weekdays' => ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],\n    'weekdays_short' => ['ned.', 'pon.', 'uto.', 'sre.', 'čet.', 'pet.', 'sub.'],\n    'weekdays_min' => ['ne', 'po', 'ut', 'sr', 'če', 'pe', 'su'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' i '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - shaishavgandhi05\n * - Serhan Apaydın\n * - JD Isaacks\n * - Glavić\n * - Nikola Zeravcic\n * - Milos Sakovic\n */\n\nuse Carbon\\CarbonInterface;\n\nreturn [\n    'year' => ':count година|:count године|:count година',\n    'y' => ':count г.',\n    'month' => ':count месец|:count месеца|:count месеци',\n    'm' => ':count м.',\n    'week' => ':count недеља|:count недеље|:count недеља',\n    'w' => ':count нед.',\n    'day' => ':count дан|:count дана|:count дана',\n    'd' => ':count д.',\n    'hour' => ':count сат|:count сата|:count сати',\n    'h' => ':count ч.',\n    'minute' => ':count минут|:count минута|:count минута',\n    'min' => ':count мин.',\n    'second' => ':count секунд|:count секунде|:count секунди',\n    's' => ':count сек.',\n    'ago' => 'пре :time',\n    'from_now' => 'за :time',\n    'after' => ':time након',\n    'before' => ':time пре',\n    'year_from_now' => ':count годину|:count године|:count година',\n    'year_ago' => ':count годину|:count године|:count година',\n    'week_from_now' => ':count недељу|:count недеље|:count недеља',\n    'week_ago' => ':count недељу|:count недеље|:count недеља',\n    'diff_now' => 'управо сада',\n    'diff_today' => 'данас',\n    'diff_today_regexp' => 'данас(?:\\\\s+у)?',\n    'diff_yesterday' => 'јуче',\n    'diff_yesterday_regexp' => 'јуче(?:\\\\s+у)?',\n    'diff_tomorrow' => 'сутра',\n    'diff_tomorrow_regexp' => 'сутра(?:\\\\s+у)?',\n    'diff_before_yesterday' => 'прекјуче',\n    'diff_after_tomorrow' => 'прекосутра',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[данас у] LT',\n        'nextDay' => '[сутра у] LT',\n        'nextWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[у недељу у] LT';\n                case 3:\n                    return '[у среду у] LT';\n                case 6:\n                    return '[у суботу у] LT';\n                default:\n                    return '[у] dddd [у] LT';\n            }\n        },\n        'lastDay' => '[јуче у] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[прошле недеље у] LT';\n                case 1:\n                    return '[прошлог понедељка у] LT';\n                case 2:\n                    return '[прошлог уторка у] LT';\n                case 3:\n                    return '[прошле среде у] LT';\n                case 4:\n                    return '[прошлог четвртка у] LT';\n                case 5:\n                    return '[прошлог петка у] LT';\n                default:\n                    return '[прошле суботе у] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],\n    'months_short' => ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],\n    'weekdays' => ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],\n    'weekdays_short' => ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],\n    'weekdays_min' => ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' и '],\n    'meridiem' => ['АМ', 'ПМ'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_BA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'sr');\n    }, 'sr_Cyrl_BA');\n}\n// @codeCoverageIgnoreEnd\n\nreturn array_replace_recursive(require __DIR__.'/sr_Cyrl.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D.M.yy.',\n        'LL' => 'DD.MM.YYYY.',\n        'LLL' => 'DD. MMMM YYYY. HH:mm',\n        'LLLL' => 'dddd, DD. MMMM YYYY. HH:mm',\n    ],\n    'weekdays' => ['недјеља', 'понедељак', 'уторак', 'сриједа', 'четвртак', 'петак', 'субота'],\n    'weekdays_short' => ['нед.', 'пон.', 'ут.', 'ср.', 'чет.', 'пет.', 'суб.'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_ME.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Glavić\n * - Milos Sakovic\n */\n\nuse Carbon\\CarbonInterface;\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'sr');\n    }, 'sr_Cyrl_ME');\n}\n// @codeCoverageIgnoreEnd\n\nreturn [\n    'year' => ':count година|:count године|:count година',\n    'y' => ':count г.',\n    'month' => ':count мјесец|:count мјесеца|:count мјесеци',\n    'm' => ':count мј.',\n    'week' => ':count недјеља|:count недјеље|:count недјеља',\n    'w' => ':count нед.',\n    'day' => ':count дан|:count дана|:count дана',\n    'd' => ':count д.',\n    'hour' => ':count сат|:count сата|:count сати',\n    'h' => ':count ч.',\n    'minute' => ':count минут|:count минута|:count минута',\n    'min' => ':count мин.',\n    'second' => ':count секунд|:count секунде|:count секунди',\n    's' => ':count сек.',\n    'ago' => 'прије :time',\n    'from_now' => 'за :time',\n    'after' => ':time након',\n    'before' => ':time прије',\n\n    'year_from_now' => ':count годину|:count године|:count година',\n    'year_ago' => ':count годину|:count године|:count година',\n\n    'week_from_now' => ':count недјељу|:count недјеље|:count недјеља',\n    'week_ago' => ':count недјељу|:count недјеље|:count недјеља',\n\n    'diff_now' => 'управо сада',\n    'diff_today' => 'данас',\n    'diff_today_regexp' => 'данас(?:\\\\s+у)?',\n    'diff_yesterday' => 'јуче',\n    'diff_yesterday_regexp' => 'јуче(?:\\\\s+у)?',\n    'diff_tomorrow' => 'сутра',\n    'diff_tomorrow_regexp' => 'сутра(?:\\\\s+у)?',\n    'diff_before_yesterday' => 'прекјуче',\n    'diff_after_tomorrow' => 'прекосјутра',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM YYYY',\n        'LLL' => 'D. MMMM YYYY H:mm',\n        'LLLL' => 'dddd, D. MMMM YYYY H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[данас у] LT',\n        'nextDay' => '[сутра у] LT',\n        'nextWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[у недељу у] LT';\n                case 3:\n                    return '[у среду у] LT';\n                case 6:\n                    return '[у суботу у] LT';\n                default:\n                    return '[у] dddd [у] LT';\n            }\n        },\n        'lastDay' => '[јуче у] LT',\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[прошле недеље у] LT';\n                case 1:\n                    return '[прошлог понедељка у] LT';\n                case 2:\n                    return '[прошлог уторка у] LT';\n                case 3:\n                    return '[прошле среде у] LT';\n                case 4:\n                    return '[прошлог четвртка у] LT';\n                case 5:\n                    return '[прошлог петка у] LT';\n                default:\n                    return '[прошле суботе у] LT';\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],\n    'months_short' => ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],\n    'weekdays' => ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],\n    'weekdays_short' => ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],\n    'weekdays_min' => ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' и '],\n    'meridiem' => ['АМ', 'ПМ'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Cyrl_XK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'sr');\n    }, 'sr_Cyrl_XK');\n}\n// @codeCoverageIgnoreEnd\n\nreturn array_replace_recursive(require __DIR__.'/sr_Cyrl_BA.php', [\n    'weekdays' => ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_BA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'sr');\n    }, 'sr_Latn_BA');\n}\n// @codeCoverageIgnoreEnd\n\nreturn array_replace_recursive(require __DIR__.'/sr_Latn.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D.M.yy.',\n        'LL' => 'DD.MM.YYYY.',\n        'LLL' => 'DD. MMMM YYYY. HH:mm',\n        'LLLL' => 'dddd, DD. MMMM YYYY. HH:mm',\n    ],\n    'weekdays' => ['nedjelja', 'ponedeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],\n    'weekdays_short' => ['ned.', 'pon.', 'ut.', 'sr.', 'čet.', 'pet.', 'sub.'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_ME.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Glavić\n * - Milos Sakovic\n */\n\nuse Carbon\\CarbonInterface;\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'sr');\n    }, 'sr_Latn_ME');\n}\n// @codeCoverageIgnoreEnd\n\nreturn array_replace_recursive(require __DIR__.'/sr.php', [\n    'month' => ':count mjesec|:count mjeseca|:count mjeseci',\n    'week' => ':count nedjelja|:count nedjelje|:count nedjelja',\n    'second' => ':count sekund|:count sekunde|:count sekundi',\n    'ago' => 'prije :time',\n    'from_now' => 'za :time',\n    'after' => ':time nakon',\n    'before' => ':time prije',\n    'week_from_now' => ':count nedjelju|:count nedjelje|:count nedjelja',\n    'week_ago' => ':count nedjelju|:count nedjelje|:count nedjelja',\n    'second_ago' => ':count sekund|:count sekunde|:count sekundi',\n    'diff_tomorrow' => 'sjutra',\n    'calendar' => [\n        'nextDay' => '[sjutra u] LT',\n        'nextWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[u nedjelju u] LT';\n                case 3:\n                    return '[u srijedu u] LT';\n                case 6:\n                    return '[u subotu u] LT';\n                default:\n                    return '[u] dddd [u] LT';\n            }\n        },\n        'lastWeek' => function (CarbonInterface $date) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                    return '[prošle nedjelje u] LT';\n                case 1:\n                    return '[prošle nedjelje u] LT';\n                case 2:\n                    return '[prošlog utorka u] LT';\n                case 3:\n                    return '[prošle srijede u] LT';\n                case 4:\n                    return '[prošlog četvrtka u] LT';\n                case 5:\n                    return '[prošlog petka u] LT';\n                default:\n                    return '[prošle subote u] LT';\n            }\n        },\n    ],\n    'weekdays' => ['nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'četvrtak', 'petak', 'subota'],\n    'weekdays_short' => ['ned.', 'pon.', 'uto.', 'sri.', 'čet.', 'pet.', 'sub.'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_Latn_XK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Component\\Translation\\PluralizationRules;\n\n// @codeCoverageIgnoreStart\nif (class_exists(PluralizationRules::class)) {\n    PluralizationRules::set(static function ($number) {\n        return PluralizationRules::get($number, 'sr');\n    }, 'sr_Latn_XK');\n}\n// @codeCoverageIgnoreEnd\n\nreturn array_replace_recursive(require __DIR__.'/sr_Latn_BA.php', [\n    'weekdays' => ['nedelja', 'ponedeljak', 'utorak', 'sreda', 'četvrtak', 'petak', 'subota'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_ME.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sr_Latn_ME.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_RS.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - sr_YU, sr_CS locale Danilo Segan bug-glibc-locales@gnu.org\n */\nreturn require __DIR__.'/sr_Cyrl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sr_RS@latin.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ss.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Nicolai Davies\n */\nreturn [\n    'year' => '{1}umnyaka|:count iminyaka',\n    'month' => '{1}inyanga|:count tinyanga',\n    'week' => '{1}:count liviki|:count emaviki',\n    'day' => '{1}lilanga|:count emalanga',\n    'hour' => '{1}lihora|:count emahora',\n    'minute' => '{1}umzuzu|:count emizuzu',\n    'second' => '{1}emizuzwana lomcane|:count mzuzwana',\n    'ago' => 'wenteka nga :time',\n    'from_now' => 'nga :time',\n    'diff_yesterday' => 'Itolo',\n    'diff_yesterday_regexp' => 'Itolo(?:\\\\s+nga)?',\n    'diff_today' => 'Namuhla',\n    'diff_today_regexp' => 'Namuhla(?:\\\\s+nga)?',\n    'diff_tomorrow' => 'Kusasa',\n    'diff_tomorrow_regexp' => 'Kusasa(?:\\\\s+nga)?',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm A',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm A',\n    ],\n    'calendar' => [\n        'sameDay' => '[Namuhla nga] LT',\n        'nextDay' => '[Kusasa nga] LT',\n        'nextWeek' => 'dddd [nga] LT',\n        'lastDay' => '[Itolo nga] LT',\n        'lastWeek' => 'dddd [leliphelile] [nga] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        $lastDigit = $number % 10;\n\n        return $number.(\n            ((int) ($number % 100 / 10) === 1) ? 'e' : (\n                ($lastDigit === 1 || $lastDigit === 2) ? 'a' : 'e'\n            )\n        );\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 11) {\n            return 'ekuseni';\n        }\n        if ($hour < 15) {\n            return 'emini';\n        }\n        if ($hour < 19) {\n            return 'entsambama';\n        }\n\n        return 'ebusuku';\n    },\n    'months' => ['Bhimbidvwane', 'Indlovana', 'Indlov\\'lenkhulu', 'Mabasa', 'Inkhwekhweti', 'Inhlaba', 'Kholwane', 'Ingci', 'Inyoni', 'Imphala', 'Lweti', 'Ingongoni'],\n    'months_short' => ['Bhi', 'Ina', 'Inu', 'Mab', 'Ink', 'Inh', 'Kho', 'Igc', 'Iny', 'Imp', 'Lwe', 'Igo'],\n    'weekdays' => ['Lisontfo', 'Umsombuluko', 'Lesibili', 'Lesitsatfu', 'Lesine', 'Lesihlanu', 'Umgcibelo'],\n    'weekdays_short' => ['Lis', 'Umb', 'Lsb', 'Les', 'Lsi', 'Lsh', 'Umg'],\n    'weekdays_min' => ['Li', 'Us', 'Lb', 'Lt', 'Ls', 'Lh', 'Ug'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ss_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/ss.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/st.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/st_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/st_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Pherekgong', 'Hlakola', 'Tlhakubele', 'Mmese', 'Motsheanong', 'Phupjane', 'Phupu', 'Phato', 'Leotse', 'Mphalane', 'Pudungwana', 'Tshitwe'],\n    'months_short' => ['Phe', 'Hla', 'TlH', 'Mme', 'Mot', 'Jan', 'Upu', 'Pha', 'Leo', 'Mph', 'Pud', 'Tsh'],\n    'weekdays' => ['Sontaha', 'Mantaha', 'Labobedi', 'Laboraro', 'Labone', 'Labohlano', 'Moqebelo'],\n    'weekdays_short' => ['Son', 'Mma', 'Bed', 'Rar', 'Ne', 'Hla', 'Moq'],\n    'weekdays_min' => ['Son', 'Mma', 'Bed', 'Rar', 'Ne', 'Hla', 'Moq'],\n    'day_of_first_week_of_year' => 1,\n\n    'week' => ':count Sontaha', // less reliable\n    'w' => ':count Sontaha', // less reliable\n    'a_week' => ':count Sontaha', // less reliable\n\n    'day' => ':count letsatsi', // less reliable\n    'd' => ':count letsatsi', // less reliable\n    'a_day' => ':count letsatsi', // less reliable\n\n    'hour' => ':count sešupanako', // less reliable\n    'h' => ':count sešupanako', // less reliable\n    'a_hour' => ':count sešupanako', // less reliable\n\n    'minute' => ':count menyane', // less reliable\n    'min' => ':count menyane', // less reliable\n    'a_minute' => ':count menyane', // less reliable\n\n    'second' => ':count thusa', // less reliable\n    's' => ':count thusa', // less reliable\n    'a_second' => ':count thusa', // less reliable\n\n    'year' => ':count selemo',\n    'y' => ':count selemo',\n    'a_year' => ':count selemo',\n\n    'month' => ':count kgwedi',\n    'm' => ':count kgwedi',\n    'a_month' => ':count kgwedi',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sv.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Kristoffer Snabb\n * - JD Isaacks\n * - Jens Herlevsen\n * - Nightpine\n * - Anders Nygren (litemerafrukt)\n */\nreturn [\n    'year' => ':count år',\n    'a_year' => 'ett år|:count år',\n    'y' => ':count år',\n    'month' => ':count månad|:count månader',\n    'a_month' => 'en månad|:count månader',\n    'm' => ':count mån',\n    'week' => ':count vecka|:count veckor',\n    'a_week' => 'en vecka|:count veckor',\n    'w' => ':count v',\n    'day' => ':count dag|:count dagar',\n    'a_day' => 'en dag|:count dagar',\n    'd' => ':count dgr',\n    'hour' => ':count timme|:count timmar',\n    'a_hour' => 'en timme|:count timmar',\n    'h' => ':count tim',\n    'minute' => ':count minut|:count minuter',\n    'a_minute' => 'en minut|:count minuter',\n    'min' => ':count min',\n    'second' => ':count sekund|:count sekunder',\n    'a_second' => 'några sekunder|:count sekunder',\n    's' => ':count s',\n    'ago' => 'för :time sedan',\n    'from_now' => 'om :time',\n    'after' => ':time efter',\n    'before' => ':time före',\n    'diff_now' => 'nu',\n    'diff_today' => 'I dag',\n    'diff_yesterday' => 'i går',\n    'diff_yesterday_regexp' => 'I går',\n    'diff_tomorrow' => 'i morgon',\n    'diff_tomorrow_regexp' => 'I morgon',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY [kl.] HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY [kl.] HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[I dag] LT',\n        'nextDay' => '[I morgon] LT',\n        'nextWeek' => '[På] dddd LT',\n        'lastDay' => '[I går] LT',\n        'lastWeek' => '[I] dddd[s] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        $lastDigit = $number % 10;\n\n        return $number.(\n            ((int) ($number % 100 / 10) === 1) ? 'e' : (\n                ($lastDigit === 1 || $lastDigit === 2) ? 'a' : 'e'\n            )\n        );\n    },\n    'months' => ['januari', 'februari', 'mars', 'april', 'maj', 'juni', 'juli', 'augusti', 'september', 'oktober', 'november', 'december'],\n    'months_short' => ['jan', 'feb', 'mar', 'apr', 'maj', 'jun', 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],\n    'weekdays' => ['söndag', 'måndag', 'tisdag', 'onsdag', 'torsdag', 'fredag', 'lördag'],\n    'weekdays_short' => ['sön', 'mån', 'tis', 'ons', 'tors', 'fre', 'lör'],\n    'weekdays_min' => ['sö', 'må', 'ti', 'on', 'to', 'fr', 'lö'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' och '],\n    'meridiem' => ['fm', 'em'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sv_AX.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/sv.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sv_FI.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sv.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sv_SE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/sv.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - leyluj\n * - Josh Soref\n * - ryanhart2\n */\nreturn [\n    'year' => 'mwaka :count|miaka :count',\n    'a_year' => 'mwaka mmoja|miaka :count',\n    'y' => 'mwaka :count|miaka :count',\n    'month' => 'mwezi :count|miezi :count',\n    'a_month' => 'mwezi mmoja|miezi :count',\n    'm' => 'mwezi :count|miezi :count',\n    'week' => 'wiki :count',\n    'a_week' => 'wiki mmoja|wiki :count',\n    'w' => 'w. :count',\n    'day' => 'siku :count',\n    'a_day' => 'siku moja|masiku :count',\n    'd' => 'si. :count',\n    'hour' => 'saa :count|masaa :count',\n    'a_hour' => 'saa limoja|masaa :count',\n    'h' => 'saa :count|masaa :count',\n    'minute' => 'dakika :count',\n    'a_minute' => 'dakika moja|dakika :count',\n    'min' => 'd. :count',\n    'second' => 'sekunde :count',\n    'a_second' => 'hivi punde|sekunde :count',\n    's' => 'se. :count',\n    'ago' => 'tokea :time',\n    'from_now' => ':time baadaye',\n    'after' => ':time baada',\n    'before' => ':time kabla',\n    'diff_now' => 'sasa hivi',\n    'diff_today' => 'leo',\n    'diff_today_regexp' => 'leo(?:\\\\s+saa)?',\n    'diff_yesterday' => 'jana',\n    'diff_tomorrow' => 'kesho',\n    'diff_tomorrow_regexp' => 'kesho(?:\\\\s+saa)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[leo saa] LT',\n        'nextDay' => '[kesho saa] LT',\n        'nextWeek' => '[wiki ijayo] dddd [saat] LT',\n        'lastDay' => '[jana] LT',\n        'lastWeek' => '[wiki iliyopita] dddd [saat] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprili', 'Mei', 'Juni', 'Julai', 'Agosti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Jumapili', 'Jumatatu', 'Jumanne', 'Jumatano', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Jpl', 'Jtat', 'Jnne', 'Jtan', 'Alh', 'Ijm', 'Jmos'],\n    'weekdays_min' => ['J2', 'J3', 'J4', 'J5', 'Al', 'Ij', 'J1'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' na '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sw_CD.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/sw.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sw_KE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kamusi Project Martin Benjamin locales@kamusi.org\n */\nreturn array_replace_recursive(require __DIR__.'/sw.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprili', 'Mei', 'Juni', 'Julai', 'Agosti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Jumapili', 'Jumatatu', 'Jumanne', 'Jumatano', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['J2', 'J3', 'J4', 'J5', 'Alh', 'Ij', 'J1'],\n    'weekdays_min' => ['J2', 'J3', 'J4', 'J5', 'Alh', 'Ij', 'J1'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['asubuhi', 'alasiri'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sw_TZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kamusi Project Martin Benjamin locales@kamusi.org\n */\nreturn array_replace_recursive(require __DIR__.'/sw.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprili', 'Mei', 'Juni', 'Julai', 'Agosti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Jumapili', 'Jumatatu', 'Jumanne', 'Jumatano', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['J2', 'J3', 'J4', 'J5', 'Alh', 'Ij', 'J1'],\n    'weekdays_min' => ['J2', 'J3', 'J4', 'J5', 'Alh', 'Ij', 'J1'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['asubuhi', 'alasiri'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/sw_UG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/sw.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/szl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/szl_PL.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/szl_PL.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - szl_PL locale Przemyslaw Buczkowski libc-alpha@sourceware.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['styczyń', 'luty', 'merc', 'kwjeciyń', 'moj', 'czyrwjyń', 'lipjyń', 'siyrpjyń', 'wrzesiyń', 'październik', 'listopad', 'grudziyń'],\n    'months_short' => ['sty', 'lut', 'mer', 'kwj', 'moj', 'czy', 'lip', 'siy', 'wrz', 'paź', 'lis', 'gru'],\n    'weekdays' => ['niydziela', 'pyńdziŏek', 'wtŏrek', 'strzŏda', 'sztwortek', 'pjōntek', 'sobŏta'],\n    'weekdays_short' => ['niy', 'pyń', 'wtŏ', 'str', 'szt', 'pjō', 'sob'],\n    'weekdays_min' => ['niy', 'pyń', 'wtŏ', 'str', 'szt', 'pjō', 'sob'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count rok',\n    'y' => ':count rok',\n    'a_year' => ':count rok',\n\n    'month' => ':count mjeśůnc',\n    'm' => ':count mjeśůnc',\n    'a_month' => ':count mjeśůnc',\n\n    'week' => ':count tydźyń',\n    'w' => ':count tydźyń',\n    'a_week' => ':count tydźyń',\n\n    'day' => ':count dźyń',\n    'd' => ':count dźyń',\n    'a_day' => ':count dźyń',\n\n    'hour' => ':count godzina',\n    'h' => ':count godzina',\n    'a_hour' => ':count godzina',\n\n    'minute' => ':count minuta',\n    'min' => ':count minuta',\n    'a_minute' => ':count minuta',\n\n    'second' => ':count sekůnda',\n    's' => ':count sekůnda',\n    'a_second' => ':count sekůnda',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ta.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - François B\n * - JD Isaacks\n * - Satheez\n */\nreturn [\n    'year' => ':count வருடம்|:count ஆண்டுகள்',\n    'a_year' => 'ஒரு வருடம்|:count ஆண்டுகள்',\n    'y' => ':count வருட.|:count ஆண்.',\n    'month' => ':count மாதம்|:count மாதங்கள்',\n    'a_month' => 'ஒரு மாதம்|:count மாதங்கள்',\n    'm' => ':count மாத.',\n    'week' => ':count வாரம்|:count வாரங்கள்',\n    'a_week' => 'ஒரு வாரம்|:count வாரங்கள்',\n    'w' => ':count வார.',\n    'day' => ':count நாள்|:count நாட்கள்',\n    'a_day' => 'ஒரு நாள்|:count நாட்கள்',\n    'd' => ':count நாள்|:count நாட்.',\n    'hour' => ':count மணி நேரம்|:count மணி நேரம்',\n    'a_hour' => 'ஒரு மணி நேரம்|:count மணி நேரம்',\n    'h' => ':count மணி.',\n    'minute' => ':count நிமிடம்|:count நிமிடங்கள்',\n    'a_minute' => 'ஒரு நிமிடம்|:count நிமிடங்கள்',\n    'min' => ':count நிமி.',\n    'second' => ':count சில விநாடிகள்|:count விநாடிகள்',\n    'a_second' => 'ஒரு சில விநாடிகள்|:count விநாடிகள்',\n    's' => ':count விநா.',\n    'ago' => ':time முன்',\n    'from_now' => ':time இல்',\n    'before' => ':time முன்',\n    'after' => ':time பின்',\n    'diff_now' => 'இப்போது',\n    'diff_today' => 'இன்று',\n    'diff_yesterday' => 'நேற்று',\n    'diff_tomorrow' => 'நாளை',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[இன்று] LT',\n        'nextDay' => '[நாளை] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[நேற்று] LT',\n        'lastWeek' => '[கடந்த வாரம்] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberவது',\n    'meridiem' => function ($hour) {\n        if ($hour < 2) {\n            return ' யாமம்';\n        }\n        if ($hour < 6) {\n            return ' வைகறை';\n        }\n        if ($hour < 10) {\n            return ' காலை';\n        }\n        if ($hour < 14) {\n            return ' நண்பகல்';\n        }\n        if ($hour < 18) {\n            return ' எற்பாடு';\n        }\n        if ($hour < 22) {\n            return ' மாலை';\n        }\n\n        return ' யாமம்';\n    },\n    'months' => ['ஜனவரி', 'பிப்ரவரி', 'மார்ச்', 'ஏப்ரல்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆகஸ்ட்', 'செப்டெம்பர்', 'அக்டோபர்', 'நவம்பர்', 'டிசம்பர்'],\n    'months_short' => ['ஜனவரி', 'பிப்ரவரி', 'மார்ச்', 'ஏப்ரல்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆகஸ்ட்', 'செப்டெம்பர்', 'அக்டோபர்', 'நவம்பர்', 'டிசம்பர்'],\n    'weekdays' => ['ஞாயிற்றுக்கிழமை', 'திங்கட்கிழமை', 'செவ்வாய்கிழமை', 'புதன்கிழமை', 'வியாழக்கிழமை', 'வெள்ளிக்கிழமை', 'சனிக்கிழமை'],\n    'weekdays_short' => ['ஞாயிறு', 'திங்கள்', 'செவ்வாய்', 'புதன்', 'வியாழன்', 'வெள்ளி', 'சனி'],\n    'weekdays_min' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' மற்றும் '],\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ta_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/ta.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['ஜனவரி', 'பிப்ரவரி', 'மார்ச்', 'ஏப்ரல்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆகஸ்ட்', 'செப்டம்பர்', 'அக்டோபர்', 'நவம்பர்', 'டிசம்பர்'],\n    'months_short' => ['ஜன.', 'பிப்.', 'மார்.', 'ஏப்.', 'மே', 'ஜூன்', 'ஜூலை', 'ஆக.', 'செப்.', 'அக்.', 'நவ.', 'டிச.'],\n    'weekdays' => ['ஞாயிறு', 'திங்கள்', 'செவ்வாய்', 'புதன்', 'வியாழன்', 'வெள்ளி', 'சனி'],\n    'weekdays_short' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'weekdays_min' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['காலை', 'மாலை'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ta_LK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - J.Yogaraj 94-777-315206 yogaraj.ubuntu@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/ta.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['ஜனவரி', 'பிப்ரவரி', 'மார்ச்', 'ஏப்ரல்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆகஸ்ட்', 'செப்டம்பர்', 'அக்டோபர்', 'நவம்பர்', 'டிசம்பர்'],\n    'months_short' => ['ஜன', 'பிப்', 'மார்', 'ஏப்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆக', 'செப்', 'அக்', 'நவ', 'டிச'],\n    'weekdays' => ['ஞாயிறு', 'திங்கள்', 'செவ்வாய்', 'புதன்', 'வியாழன்', 'வெள்ளி', 'சனி'],\n    'weekdays_short' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'weekdays_min' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['காலை', 'மாலை'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ta_MY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ta.php', [\n    'formats' => [\n        'LT' => 'a h:mm',\n        'LTS' => 'a h:mm:ss',\n        'L' => 'D/M/yy',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM, YYYY, a h:mm',\n        'LLLL' => 'dddd, D MMMM, YYYY, a h:mm',\n    ],\n    'months' => ['ஜனவரி', 'பிப்ரவரி', 'மார்ச்', 'ஏப்ரல்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆகஸ்ட்', 'செப்டம்பர்', 'அக்டோபர்', 'நவம்பர்', 'டிசம்பர்'],\n    'months_short' => ['ஜன.', 'பிப்.', 'மார்.', 'ஏப்.', 'மே', 'ஜூன்', 'ஜூலை', 'ஆக.', 'செப்.', 'அக்.', 'நவ.', 'டிச.'],\n    'weekdays' => ['ஞாயிறு', 'திங்கள்', 'செவ்வாய்', 'புதன்', 'வியாழன்', 'வெள்ளி', 'சனி'],\n    'weekdays_short' => ['ஞாயி.', 'திங்.', 'செவ்.', 'புத.', 'வியா.', 'வெள்.', 'சனி'],\n    'weekdays_min' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'first_day_of_week' => 1,\n    'meridiem' => ['மு.ப', 'பி.ப'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ta_SG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ta.php', [\n    'formats' => [\n        'LT' => 'a h:mm',\n        'LTS' => 'a h:mm:ss',\n        'L' => 'D/M/yy',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM, YYYY, a h:mm',\n        'LLLL' => 'dddd, D MMMM, YYYY, a h:mm',\n    ],\n    'months' => ['ஜனவரி', 'பிப்ரவரி', 'மார்ச்', 'ஏப்ரல்', 'மே', 'ஜூன்', 'ஜூலை', 'ஆகஸ்ட்', 'செப்டம்பர்', 'அக்டோபர்', 'நவம்பர்', 'டிசம்பர்'],\n    'months_short' => ['ஜன.', 'பிப்.', 'மார்.', 'ஏப்.', 'மே', 'ஜூன்', 'ஜூலை', 'ஆக.', 'செப்.', 'அக்.', 'நவ.', 'டிச.'],\n    'weekdays' => ['ஞாயிறு', 'திங்கள்', 'செவ்வாய்', 'புதன்', 'வியாழன்', 'வெள்ளி', 'சனி'],\n    'weekdays_short' => ['ஞாயி.', 'திங்.', 'செவ்.', 'புத.', 'வியா.', 'வெள்.', 'சனி'],\n    'weekdays_min' => ['ஞா', 'தி', 'செ', 'பு', 'வி', 'வெ', 'ச'],\n    'meridiem' => ['மு.ப', 'பி.ப'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tcy.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/tcy_IN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tcy_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IndLinux.org, Samsung Electronics Co., Ltd.    alexey.merzlyakov@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['ಜನವರಿ', 'ಫೆಬ್ರುವರಿ', 'ಮಾರ್ಚ್', 'ಏಪ್ರಿಲ್‌‌', 'ಮೇ', 'ಜೂನ್', 'ಜುಲೈ', 'ಆಗಸ್ಟ್', 'ಸೆಪ್ಟೆಂಬರ್‌', 'ಅಕ್ಟೋಬರ್', 'ನವೆಂಬರ್', 'ಡಿಸೆಂಬರ್'],\n    'months_short' => ['ಜ', 'ಫೆ', 'ಮಾ', 'ಏ', 'ಮೇ', 'ಜೂ', 'ಜು', 'ಆ', 'ಸೆ', 'ಅ', 'ನ', 'ಡಿ'],\n    'weekdays' => ['ಐಥಾರ', 'ಸೋಮಾರ', 'ಅಂಗರೆ', 'ಬುಧಾರ', 'ಗುರುವಾರ', 'ಶುಕ್ರರ', 'ಶನಿವಾರ'],\n    'weekdays_short' => ['ಐ', 'ಸೋ', 'ಅಂ', 'ಬು', 'ಗು', 'ಶು', 'ಶ'],\n    'weekdays_min' => ['ಐ', 'ಸೋ', 'ಅಂ', 'ಬು', 'ಗು', 'ಶು', 'ಶ'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ಕಾಂಡೆ', 'ಬಯ್ಯ'],\n\n    'year' => ':count ನೀರ್', // less reliable\n    'y' => ':count ನೀರ್', // less reliable\n    'a_year' => ':count ನೀರ್', // less reliable\n\n    'month' => ':count ಮೀನ್', // less reliable\n    'm' => ':count ಮೀನ್', // less reliable\n    'a_month' => ':count ಮೀನ್', // less reliable\n\n    'day' => ':count ಸುಗ್ಗಿ', // less reliable\n    'd' => ':count ಸುಗ್ಗಿ', // less reliable\n    'a_day' => ':count ಸುಗ್ಗಿ', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/te.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - Josh Soref\n * - François B\n * - kc\n */\nreturn [\n    'year' => ':count సంవత్సరం|:count సంవత్సరాలు',\n    'a_year' => 'ఒక సంవత్సరం|:count సంవత్సరాలు',\n    'y' => ':count సం.',\n    'month' => ':count నెల|:count నెలలు',\n    'a_month' => 'ఒక నెల|:count నెలలు',\n    'm' => ':count నెల|:count నెల.',\n    'week' => ':count వారం|:count వారాలు',\n    'a_week' => 'ఒక వారం|:count వారాలు',\n    'w' => ':count వార.|:count వారా.',\n    'day' => ':count రోజు|:count రోజులు',\n    'a_day' => 'ఒక రోజు|:count రోజులు',\n    'd' => ':count రోజు|:count రోజు.',\n    'hour' => ':count గంట|:count గంటలు',\n    'a_hour' => 'ఒక గంట|:count గంటలు',\n    'h' => ':count గం.',\n    'minute' => ':count నిమిషం|:count నిమిషాలు',\n    'a_minute' => 'ఒక నిమిషం|:count నిమిషాలు',\n    'min' => ':count నిమి.',\n    'second' => ':count సెకను|:count సెకన్లు',\n    'a_second' => 'కొన్ని క్షణాలు|:count సెకన్లు',\n    's' => ':count సెక.',\n    'ago' => ':time క్రితం',\n    'from_now' => ':time లో',\n    'diff_now' => 'ప్రస్తుతం',\n    'diff_today' => 'నేడు',\n    'diff_yesterday' => 'నిన్న',\n    'diff_tomorrow' => 'రేపు',\n    'formats' => [\n        'LT' => 'A h:mm',\n        'LTS' => 'A h:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, A h:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, A h:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[నేడు] LT',\n        'nextDay' => '[రేపు] LT',\n        'nextWeek' => 'dddd, LT',\n        'lastDay' => '[నిన్న] LT',\n        'lastWeek' => '[గత] dddd, LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberవ',\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'రాత్రి';\n        }\n        if ($hour < 10) {\n            return 'ఉదయం';\n        }\n        if ($hour < 17) {\n            return 'మధ్యాహ్నం';\n        }\n        if ($hour < 20) {\n            return 'సాయంత్రం';\n        }\n\n        return ' రాత్రి';\n    },\n    'months' => ['జనవరి', 'ఫిబ్రవరి', 'మార్చి', 'ఏప్రిల్', 'మే', 'జూన్', 'జూలై', 'ఆగస్టు', 'సెప్టెంబర్', 'అక్టోబర్', 'నవంబర్', 'డిసెంబర్'],\n    'months_short' => ['జన.', 'ఫిబ్ర.', 'మార్చి', 'ఏప్రి.', 'మే', 'జూన్', 'జూలై', 'ఆగ.', 'సెప్.', 'అక్టో.', 'నవ.', 'డిసె.'],\n    'weekdays' => ['ఆదివారం', 'సోమవారం', 'మంగళవారం', 'బుధవారం', 'గురువారం', 'శుక్రవారం', 'శనివారం'],\n    'weekdays_short' => ['ఆది', 'సోమ', 'మంగళ', 'బుధ', 'గురు', 'శుక్ర', 'శని'],\n    'weekdays_min' => ['ఆ', 'సో', 'మం', 'బు', 'గు', 'శు', 'శ'],\n    'list' => ', ',\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'weekend' => [0, 0],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/te_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/te.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/teo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ta.php', [\n    'meridiem' => ['Taparachu', 'Ebongi'],\n    'weekdays' => ['Nakaejuma', 'Nakaebarasa', 'Nakaare', 'Nakauni', 'Nakaung’on', 'Nakakany', 'Nakasabiti'],\n    'weekdays_short' => ['Jum', 'Bar', 'Aar', 'Uni', 'Ung', 'Kan', 'Sab'],\n    'weekdays_min' => ['Jum', 'Bar', 'Aar', 'Uni', 'Ung', 'Kan', 'Sab'],\n    'months' => ['Orara', 'Omuk', 'Okwamg’', 'Odung’el', 'Omaruk', 'Omodok’king’ol', 'Ojola', 'Opedel', 'Osokosokoma', 'Otibar', 'Olabor', 'Opoo'],\n    'months_short' => ['Rar', 'Muk', 'Kwa', 'Dun', 'Mar', 'Mod', 'Jol', 'Ped', 'Sok', 'Tib', 'Lab', 'Poo'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/teo_KE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/teo.php', [\n    'first_day_of_week' => 0,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tet.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Joshua Brooks\n * - François B\n */\nreturn [\n    'year' => 'tinan :count',\n    'a_year' => '{1}tinan ida|tinan :count',\n    'month' => 'fulan :count',\n    'a_month' => '{1}fulan ida|fulan :count',\n    'week' => 'semana :count',\n    'a_week' => '{1}semana ida|semana :count',\n    'day' => 'loron :count',\n    'a_day' => '{1}loron ida|loron :count',\n    'hour' => 'oras :count',\n    'a_hour' => '{1}oras ida|oras :count',\n    'minute' => 'minutu :count',\n    'a_minute' => '{1}minutu ida|minutu :count',\n    'second' => 'segundu :count',\n    'a_second' => '{1}segundu balun|segundu :count',\n    'ago' => ':time liuba',\n    'from_now' => 'iha :time',\n    'diff_yesterday' => 'Horiseik',\n    'diff_yesterday_regexp' => 'Horiseik(?:\\\\s+iha)?',\n    'diff_today' => 'Ohin',\n    'diff_today_regexp' => 'Ohin(?:\\\\s+iha)?',\n    'diff_tomorrow' => 'Aban',\n    'diff_tomorrow_regexp' => 'Aban(?:\\\\s+iha)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Ohin iha] LT',\n        'nextDay' => '[Aban iha] LT',\n        'nextWeek' => 'dddd [iha] LT',\n        'lastDay' => '[Horiseik iha] LT',\n        'lastWeek' => 'dddd [semana kotuk] [iha] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':numberº',\n    'months' => ['Janeiru', 'Fevereiru', 'Marsu', 'Abril', 'Maiu', 'Juñu', 'Jullu', 'Agustu', 'Setembru', 'Outubru', 'Novembru', 'Dezembru'],\n    'months_short' => ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\n    'weekdays' => ['Domingu', 'Segunda', 'Tersa', 'Kuarta', 'Kinta', 'Sesta', 'Sabadu'],\n    'weekdays_short' => ['Dom', 'Seg', 'Ters', 'Kua', 'Kint', 'Sest', 'Sab'],\n    'weekdays_min' => ['Do', 'Seg', 'Te', 'Ku', 'Ki', 'Ses', 'Sa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tg.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Orif N. Jr\n */\nreturn [\n    'year' => '{1}як сол|:count сол',\n    'month' => '{1}як моҳ|:count моҳ',\n    'week' => '{1}як ҳафта|:count ҳафта',\n    'day' => '{1}як рӯз|:count рӯз',\n    'hour' => '{1}як соат|:count соат',\n    'minute' => '{1}як дақиқа|:count дақиқа',\n    'second' => '{1}якчанд сония|:count сония',\n    'ago' => ':time пеш',\n    'from_now' => 'баъди :time',\n    'diff_today' => 'Имрӯз',\n    'diff_yesterday' => 'Дирӯз',\n    'diff_yesterday_regexp' => 'Дирӯз(?:\\\\s+соати)?',\n    'diff_tomorrow' => 'Пагоҳ',\n    'diff_tomorrow_regexp' => 'Пагоҳ(?:\\\\s+соати)?',\n    'diff_today_regexp' => 'Имрӯз(?:\\\\s+соати)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Имрӯз соати] LT',\n        'nextDay' => '[Пагоҳ соати] LT',\n        'nextWeek' => 'dddd[и] [ҳафтаи оянда соати] LT',\n        'lastDay' => '[Дирӯз соати] LT',\n        'lastWeek' => 'dddd[и] [ҳафтаи гузашта соати] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number) {\n        if ($number === 0) { // special case for zero\n            return \"$number-ıncı\";\n        }\n\n        static $suffixes = [\n            0 => '-ум',\n            1 => '-ум',\n            2 => '-юм',\n            3 => '-юм',\n            4 => '-ум',\n            5 => '-ум',\n            6 => '-ум',\n            7 => '-ум',\n            8 => '-ум',\n            9 => '-ум',\n            10 => '-ум',\n            12 => '-ум',\n            13 => '-ум',\n            20 => '-ум',\n            30 => '-юм',\n            40 => '-ум',\n            50 => '-ум',\n            60 => '-ум',\n            70 => '-ум',\n            80 => '-ум',\n            90 => '-ум',\n            100 => '-ум',\n        ];\n\n        return $number.($suffixes[$number] ?? $suffixes[$number % 10] ?? $suffixes[$number >= 100 ? 100 : -1] ?? '');\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'шаб';\n        }\n        if ($hour < 11) {\n            return 'субҳ';\n        }\n        if ($hour < 16) {\n            return 'рӯз';\n        }\n        if ($hour < 19) {\n            return 'бегоҳ';\n        }\n\n        return 'шаб';\n    },\n    'months' => ['январ', 'феврал', 'март', 'апрел', 'май', 'июн', 'июл', 'август', 'сентябр', 'октябр', 'ноябр', 'декабр'],\n    'months_short' => ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'weekdays' => ['якшанбе', 'душанбе', 'сешанбе', 'чоршанбе', 'панҷшанбе', 'ҷумъа', 'шанбе'],\n    'weekdays_short' => ['яшб', 'дшб', 'сшб', 'чшб', 'пшб', 'ҷум', 'шнб'],\n    'weekdays_min' => ['яш', 'дш', 'сш', 'чш', 'пш', 'ҷм', 'шб'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' ва '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tg_TJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/tg.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/th.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Nate Whittaker\n * - John MacAslan\n * - Chanintorn Asavavichairoj\n * - JD Isaacks\n * - ROKAISAKKON\n * - RO'KAISAKKON\n * - Andreas Möller\n * - nithisa\n */\nreturn [\n    'year' => ':count ปี',\n    'y' => ':count ปี',\n    'month' => ':count เดือน',\n    'm' => ':count เดือน',\n    'week' => ':count สัปดาห์',\n    'w' => ':count สัปดาห์',\n    'day' => ':count วัน',\n    'd' => ':count วัน',\n    'hour' => ':count ชั่วโมง',\n    'h' => ':count ชั่วโมง',\n    'minute' => ':count นาที',\n    'min' => ':count นาที',\n    'second' => ':count วินาที',\n    'a_second' => '{1}ไม่กี่วินาที|]1,Inf[:count วินาที',\n    's' => ':count วินาที',\n    'ago' => ':timeที่แล้ว',\n    'from_now' => 'อีก :time',\n    'after' => ':timeหลังจากนี้',\n    'before' => ':timeก่อน',\n    'diff_now' => 'ขณะนี้',\n    'diff_today' => 'วันนี้',\n    'diff_today_regexp' => 'วันนี้(?:\\\\s+เวลา)?',\n    'diff_yesterday' => 'เมื่อวาน',\n    'diff_yesterday_regexp' => 'เมื่อวานนี้(?:\\\\s+เวลา)?',\n    'diff_tomorrow' => 'พรุ่งนี้',\n    'diff_tomorrow_regexp' => 'พรุ่งนี้(?:\\\\s+เวลา)?',\n    'formats' => [\n        'LT' => 'H:mm',\n        'LTS' => 'H:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY เวลา H:mm',\n        'LLLL' => 'วันddddที่ D MMMM YYYY เวลา H:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[วันนี้ เวลา] LT',\n        'nextDay' => '[พรุ่งนี้ เวลา] LT',\n        'nextWeek' => 'dddd[หน้า เวลา] LT',\n        'lastDay' => '[เมื่อวานนี้ เวลา] LT',\n        'lastWeek' => '[วัน]dddd[ที่แล้ว เวลา] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ก่อนเที่ยง', 'หลังเที่ยง'],\n    'months' => ['มกราคม', 'กุมภาพันธ์', 'มีนาคม', 'เมษายน', 'พฤษภาคม', 'มิถุนายน', 'กรกฎาคม', 'สิงหาคม', 'กันยายน', 'ตุลาคม', 'พฤศจิกายน', 'ธันวาคม'],\n    'months_short' => ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.'],\n    'weekdays' => ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์'],\n    'weekdays_short' => ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัส', 'ศุกร์', 'เสาร์'],\n    'weekdays_min' => ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],\n    'list' => [', ', ' และ '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/th_TH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/th.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/the.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/the_NP.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/the_NP.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Chitwanix OS Development    info@chitwanix.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'dddd DD MMM YYYY',\n    ],\n    'months' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'months_short' => ['जनवरी', 'फ़रवरी', 'मार्च', 'अप्रेल', 'मई', 'जून', 'जुलाई', 'अगस्त', 'सितम्बर', 'अक्टूबर', 'नवम्बर', 'दिसम्बर'],\n    'weekdays' => ['आइतबार', 'सोमबार', 'मंगलबार', 'बुधबार', 'बिहिबार', 'शुक्रबार', 'शनिबार'],\n    'weekdays_short' => ['आइत', 'सोम', 'मंगल', 'बुध', 'बिहि', 'शुक्र', 'शनि'],\n    'weekdays_min' => ['आइत', 'सोम', 'मंगल', 'बुध', 'बिहि', 'शुक्र', 'शनि'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['पूर्वाह्न', 'अपराह्न'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ti.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ti_ER.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ti_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጥሪ', 'ለካቲት', 'መጋቢት', 'ሚያዝያ', 'ግንቦት', 'ሰነ', 'ሓምለ', 'ነሓሰ', 'መስከረም', 'ጥቅምቲ', 'ሕዳር', 'ታሕሳስ'],\n    'months_short' => ['ጥሪ ', 'ለካቲ', 'መጋቢ', 'ሚያዝ', 'ግንቦ', 'ሰነ ', 'ሓምለ', 'ነሓሰ', 'መስከ', 'ጥቅም', 'ሕዳር', 'ታሕሳ'],\n    'weekdays' => ['ሰንበት', 'ሰኑይ', 'ሰሉስ', 'ረቡዕ', 'ሓሙስ', 'ዓርቢ', 'ቀዳም'],\n    'weekdays_short' => ['ሰንበ', 'ሰኑይ', 'ሰሉስ', 'ረቡዕ', 'ሓሙስ', 'ዓርቢ', 'ቀዳም'],\n    'weekdays_min' => ['ሰንበ', 'ሰኑይ', 'ሰሉስ', 'ረቡዕ', 'ሓሙስ', 'ዓርቢ', 'ቀዳም'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ንጉሆ ሰዓተ', 'ድሕር ሰዓት'],\n\n    'year' => ':count ዓመት',\n    'y' => ':count ዓመት',\n    'a_year' => ':count ዓመት',\n\n    'month' => 'ወርሒ :count',\n    'm' => 'ወርሒ :count',\n    'a_month' => 'ወርሒ :count',\n\n    'week' => ':count ሰሙን',\n    'w' => ':count ሰሙን',\n    'a_week' => ':count ሰሙን',\n\n    'day' => ':count መዓልቲ',\n    'd' => ':count መዓልቲ',\n    'a_day' => ':count መዓልቲ',\n\n    'hour' => ':count ሰዓት',\n    'h' => ':count ሰዓት',\n    'a_hour' => ':count ሰዓት',\n\n    'minute' => ':count ደቒቕ',\n    'min' => ':count ደቒቕ',\n    'a_minute' => ':count ደቒቕ',\n\n    'second' => ':count ሰከንድ',\n    's' => ':count ሰከንድ',\n    'a_second' => ':count ሰከንድ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ti_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጃንዩወሪ', 'ፌብሩወሪ', 'ማርች', 'ኤፕረል', 'ሜይ', 'ጁን', 'ጁላይ', 'ኦገስት', 'ሴፕቴምበር', 'ኦክተውበር', 'ኖቬምበር', 'ዲሴምበር'],\n    'months_short' => ['ጃንዩ', 'ፌብሩ', 'ማርች', 'ኤፕረ', 'ሜይ ', 'ጁን ', 'ጁላይ', 'ኦገስ', 'ሴፕቴ', 'ኦክተ', 'ኖቬም', 'ዲሴም'],\n    'weekdays' => ['ሰንበት', 'ሰኑይ', 'ሰሉስ', 'ረቡዕ', 'ሓሙስ', 'ዓርቢ', 'ቀዳም'],\n    'weekdays_short' => ['ሰንበ', 'ሰኑይ', 'ሰሉስ', 'ረቡዕ', 'ሓሙስ', 'ዓርቢ', 'ቀዳም'],\n    'weekdays_min' => ['ሰንበ', 'ሰኑይ', 'ሰሉስ', 'ረቡዕ', 'ሓሙስ', 'ዓርቢ', 'ቀዳም'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ንጉሆ ሰዓተ', 'ድሕር ሰዓት'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tig.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/tig_ER.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tig_ER.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጥሪ', 'ለካቲት', 'መጋቢት', 'ሚያዝያ', 'ግንቦት', 'ሰነ', 'ሓምለ', 'ነሓሰ', 'መስከረም', 'ጥቅምቲ', 'ሕዳር', 'ታሕሳስ'],\n    'months_short' => ['ጥሪ ', 'ለካቲ', 'መጋቢ', 'ሚያዝ', 'ግንቦ', 'ሰነ ', 'ሓምለ', 'ነሓሰ', 'መስከ', 'ጥቅም', 'ሕዳር', 'ታሕሳ'],\n    'weekdays' => ['ሰንበት ዓባይ', 'ሰኖ', 'ታላሸኖ', 'ኣረርባዓ', 'ከሚሽ', 'ጅምዓት', 'ሰንበት ንኢሽ'],\n    'weekdays_short' => ['ሰ//ዓ', 'ሰኖ ', 'ታላሸ', 'ኣረር', 'ከሚሽ', 'ጅምዓ', 'ሰ//ን'],\n    'weekdays_min' => ['ሰ//ዓ', 'ሰኖ ', 'ታላሸ', 'ኣረር', 'ከሚሽ', 'ጅምዓ', 'ሰ//ን'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ቀደም ሰር ምዕል', 'ሓቆ ሰር ምዕል'],\n\n    'year' => ':count ማይ', // less reliable\n    'y' => ':count ማይ', // less reliable\n    'a_year' => ':count ማይ', // less reliable\n\n    'month' => ':count ሸምሽ', // less reliable\n    'm' => ':count ሸምሽ', // less reliable\n    'a_month' => ':count ሸምሽ', // less reliable\n\n    'week' => ':count ሰቡዕ', // less reliable\n    'w' => ':count ሰቡዕ', // less reliable\n    'a_week' => ':count ሰቡዕ', // less reliable\n\n    'day' => ':count ዎሮ', // less reliable\n    'd' => ':count ዎሮ', // less reliable\n    'a_day' => ':count ዎሮ', // less reliable\n\n    'hour' => ':count ሰዓት', // less reliable\n    'h' => ':count ሰዓት', // less reliable\n    'a_hour' => ':count ሰዓት', // less reliable\n\n    'minute' => ':count ካልኣይት', // less reliable\n    'min' => ':count ካልኣይት', // less reliable\n    'a_minute' => ':count ካልኣይት', // less reliable\n\n    'second' => ':count ካልኣይ',\n    's' => ':count ካልኣይ',\n    'a_second' => ':count ካልኣይ',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tk.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/tk_TM.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tk_TM.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/**\n * Authors:\n * - Ghorban M. Tavakoly Pablo Saratxaga & Ghorban M. Tavakoly pablo@walon.org & gmt314@yahoo.com\n * - SuperManPHP\n * - Maksat Meredow (isadma)\n */\n$transformDiff = function ($input) {\n    return strtr($input, [\n        'sekunt' => 'sekunt',\n        'hepde' => 'hepde',\n    ]);\n};\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Ýanwar', 'Fewral', 'Mart', 'Aprel', 'Maý', 'Iýun', 'Iýul', 'Awgust', 'Sentýabr', 'Oktýabr', 'Noýabr', 'Dekabr'],\n    'months_short' => ['Ýan', 'Few', 'Mar', 'Apr', 'Maý', 'Iýn', 'Iýl', 'Awg', 'Sen', 'Okt', 'Noý', 'Dek'],\n    'weekdays' => ['Duşenbe', 'Sişenbe', 'Çarşenbe', 'Penşenbe', 'Anna', 'Şenbe', 'Ýekşenbe'],\n    'weekdays_short' => ['Duş', 'Siş', 'Çar', 'Pen', 'Ann', 'Şen', 'Ýek'],\n    'weekdays_min' => ['Du', 'Si', 'Ça', 'Pe', 'An', 'Şe', 'Ýe'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count ýyl',\n    'y' => ':count ýyl',\n    'a_year' => ':count ýyl',\n\n    'month' => ':count aý',\n    'm' => ':count aý',\n    'a_month' => ':count aý',\n\n    'week' => ':count hepde',\n    'w' => ':count hepde',\n    'a_week' => ':count hepde',\n\n    'day' => ':count gün',\n    'd' => ':count gün',\n    'a_day' => ':count gün',\n\n    'hour' => ':count sagat',\n    'h' => ':count sagat',\n    'a_hour' => ':count sagat',\n\n    'minute' => ':count minut',\n    'min' => ':count minut',\n    'a_minute' => ':count minut',\n\n    'second' => ':count sekunt',\n    's' => ':count sekunt',\n    'a_second' => ':count sekunt',\n\n    'ago' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' ozal';\n    },\n    'from_now' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' soňra';\n    },\n    'after' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' soň';\n    },\n    'before' => function ($time) use ($transformDiff) {\n        return $transformDiff($time).' öň';\n    },\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn [\n    'year' => ':count taon',\n    'a_year' => '{1}isang taon|:count taon',\n    'month' => ':count buwan',\n    'a_month' => '{1}isang buwan|:count buwan',\n    'week' => ':count linggo',\n    'a_week' => '{1}isang linggo|:count linggo',\n    'day' => ':count araw',\n    'a_day' => '{1}isang araw|:count araw',\n    'hour' => ':count oras',\n    'a_hour' => '{1}isang oras|:count oras',\n    'minute' => ':count minuto',\n    'a_minute' => '{1}isang minuto|:count minuto',\n    'min' => ':count min.',\n    'second' => ':count segundo',\n    'a_second' => '{1}ilang segundo|:count segundo',\n    's' => ':count seg.',\n    'ago' => ':time ang nakalipas',\n    'from_now' => 'sa loob ng :time',\n    'diff_now' => 'ngayon',\n    'diff_today' => 'ngayong',\n    'diff_today_regexp' => 'ngayong(?:\\\\s+araw)?',\n    'diff_yesterday' => 'kahapon',\n    'diff_tomorrow' => 'bukas',\n    'diff_tomorrow_regexp' => 'Bukas(?:\\\\s+ng)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'MM/D/YYYY',\n        'LL' => 'MMMM D, YYYY',\n        'LLL' => 'MMMM D, YYYY HH:mm',\n        'LLLL' => 'dddd, MMMM DD, YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => 'LT [ngayong araw]',\n        'nextDay' => '[Bukas ng] LT',\n        'nextWeek' => 'LT [sa susunod na] dddd',\n        'lastDay' => 'LT [kahapon]',\n        'lastWeek' => 'LT [noong nakaraang] dddd',\n        'sameElse' => 'L',\n    ],\n    'months' => ['Enero', 'Pebrero', 'Marso', 'Abril', 'Mayo', 'Hunyo', 'Hulyo', 'Agosto', 'Setyembre', 'Oktubre', 'Nobyembre', 'Disyembre'],\n    'months_short' => ['Ene', 'Peb', 'Mar', 'Abr', 'May', 'Hun', 'Hul', 'Ago', 'Set', 'Okt', 'Nob', 'Dis'],\n    'weekdays' => ['Linggo', 'Lunes', 'Martes', 'Miyerkules', 'Huwebes', 'Biyernes', 'Sabado'],\n    'weekdays_short' => ['Lin', 'Lun', 'Mar', 'Miy', 'Huw', 'Biy', 'Sab'],\n    'weekdays_min' => ['Li', 'Lu', 'Ma', 'Mi', 'Hu', 'Bi', 'Sab'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' at '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tl_PH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Ian De La Cruz\n * - JD Isaacks\n */\nreturn require __DIR__.'/tl.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tlh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Serhan Apaydın\n * - Dominika\n */\nreturn [\n    'year' => '{1}wa’ DIS|:count DIS',\n    'month' => '{1}wa’ jar|:count jar',\n    'week' => '{1}wa’ hogh|:count hogh',\n    'day' => '{1}wa’ jaj|:count jaj',\n    'hour' => '{1}wa’ rep|:count rep',\n    'minute' => '{1}wa’ tup|:count tup',\n    'second' => '{1}puS lup|:count lup',\n    'ago' => function ($time) {\n        $output = strtr($time, [\n            'jaj' => 'Hu’',\n            'jar' => 'wen',\n            'DIS' => 'ben',\n        ]);\n\n        return $output === $time ? \"$time ret\" : $output;\n    },\n    'from_now' => function ($time) {\n        $output = strtr($time, [\n            'jaj' => 'leS',\n            'jar' => 'waQ',\n            'DIS' => 'nem',\n        ]);\n\n        return $output === $time ? \"$time pIq\" : $output;\n    },\n    'diff_yesterday' => 'wa’Hu’',\n    'diff_today' => 'DaHjaj',\n    'diff_tomorrow' => 'wa’leS',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[DaHjaj] LT',\n        'nextDay' => '[wa’leS] LT',\n        'nextWeek' => 'LLL',\n        'lastDay' => '[wa’Hu’] LT',\n        'lastWeek' => 'LLL',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => ':number.',\n    'months' => ['tera’ jar wa’', 'tera’ jar cha’', 'tera’ jar wej', 'tera’ jar loS', 'tera’ jar vagh', 'tera’ jar jav', 'tera’ jar Soch', 'tera’ jar chorgh', 'tera’ jar Hut', 'tera’ jar wa’maH', 'tera’ jar wa’maH wa’', 'tera’ jar wa’maH cha’'],\n    'months_short' => ['jar wa’', 'jar cha’', 'jar wej', 'jar loS', 'jar vagh', 'jar jav', 'jar Soch', 'jar chorgh', 'jar Hut', 'jar wa’maH', 'jar wa’maH wa’', 'jar wa’maH cha’'],\n    'weekdays' => ['lojmItjaj', 'DaSjaj', 'povjaj', 'ghItlhjaj', 'loghjaj', 'buqjaj', 'ghInjaj'],\n    'weekdays_short' => ['lojmItjaj', 'DaSjaj', 'povjaj', 'ghItlhjaj', 'loghjaj', 'buqjaj', 'ghInjaj'],\n    'weekdays_min' => ['lojmItjaj', 'DaSjaj', 'povjaj', 'ghItlhjaj', 'loghjaj', 'buqjaj', 'ghInjaj'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' ’ej '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/tn_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tn_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Ferikgong', 'Tlhakole', 'Mopitlwe', 'Moranang', 'Motsheganong', 'Seetebosigo', 'Phukwi', 'Phatwe', 'Lwetse', 'Diphalane', 'Ngwanatsele', 'Sedimonthole'],\n    'months_short' => ['Fer', 'Tlh', 'Mop', 'Mor', 'Mot', 'See', 'Phu', 'Pha', 'Lwe', 'Dip', 'Ngw', 'Sed'],\n    'weekdays' => ['laTshipi', 'Mosupologo', 'Labobedi', 'Laboraro', 'Labone', 'Labotlhano', 'Lamatlhatso'],\n    'weekdays_short' => ['Tsh', 'Mos', 'Bed', 'Rar', 'Ne', 'Tlh', 'Mat'],\n    'weekdays_min' => ['Tsh', 'Mos', 'Bed', 'Rar', 'Ne', 'Tlh', 'Mat'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => 'dingwaga di le :count',\n    'y' => 'dingwaga di le :count',\n    'a_year' => 'dingwaga di le :count',\n\n    'month' => 'dikgwedi di le :count',\n    'm' => 'dikgwedi di le :count',\n    'a_month' => 'dikgwedi di le :count',\n\n    'week' => 'dibeke di le :count',\n    'w' => 'dibeke di le :count',\n    'a_week' => 'dibeke di le :count',\n\n    'day' => 'malatsi :count',\n    'd' => 'malatsi :count',\n    'a_day' => 'malatsi :count',\n\n    'hour' => 'diura di le :count',\n    'h' => 'diura di le :count',\n    'a_hour' => 'diura di le :count',\n\n    'minute' => 'metsotso e le :count',\n    'min' => 'metsotso e le :count',\n    'a_minute' => 'metsotso e le :count',\n\n    'second' => 'metsotswana e le :count',\n    's' => 'metsotswana e le :count',\n    'a_second' => 'metsotswana e le :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/to.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/to_TO.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/to_TO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - International Components for Unicode    akhilesh.k@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'dddd DD MMM YYYY',\n    ],\n    'months' => ['Sānuali', 'Fēpueli', 'Maʻasi', 'ʻEpeleli', 'Mē', 'Sune', 'Siulai', 'ʻAokosi', 'Sepitema', 'ʻOkatopa', 'Nōvema', 'Tīsema'],\n    'months_short' => ['Sān', 'Fēp', 'Maʻa', 'ʻEpe', 'Mē', 'Sun', 'Siu', 'ʻAok', 'Sep', 'ʻOka', 'Nōv', 'Tīs'],\n    'weekdays' => ['Sāpate', 'Mōnite', 'Tūsite', 'Pulelulu', 'Tuʻapulelulu', 'Falaite', 'Tokonaki'],\n    'weekdays_short' => ['Sāp', 'Mōn', 'Tūs', 'Pul', 'Tuʻa', 'Fal', 'Tok'],\n    'weekdays_min' => ['Sāp', 'Mōn', 'Tūs', 'Pul', 'Tuʻa', 'Fal', 'Tok'],\n    'meridiem' => ['hengihengi', 'efiafi'],\n\n    'year' => ':count fitu', // less reliable\n    'y' => ':count fitu', // less reliable\n    'a_year' => ':count fitu', // less reliable\n\n    'month' => ':count mahina', // less reliable\n    'm' => ':count mahina', // less reliable\n    'a_month' => ':count mahina', // less reliable\n\n    'week' => ':count Sapate', // less reliable\n    'w' => ':count Sapate', // less reliable\n    'a_week' => ':count Sapate', // less reliable\n\n    'day' => ':count ʻaho', // less reliable\n    'd' => ':count ʻaho', // less reliable\n    'a_day' => ':count ʻaho', // less reliable\n\n    'hour' => ':count houa',\n    'h' => ':count houa',\n    'a_hour' => ':count houa',\n\n    'minute' => ':count miniti',\n    'min' => ':count miniti',\n    'a_minute' => ':count miniti',\n\n    'second' => ':count sekoni',\n    's' => ':count sekoni',\n    'a_second' => ':count sekoni',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tpi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/tpi_PG.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tpi_PG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Samsung Electronics Co., Ltd.    akhilesh.k@samsung.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Janueri', 'Februeri', 'Mas', 'Epril', 'Me', 'Jun', 'Julai', 'Ogas', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mas', 'Epr', 'Me', 'Jun', 'Jul', 'Oga', 'Sep', 'Okt', 'Nov', 'Des'],\n    'weekdays' => ['Sande', 'Mande', 'Tunde', 'Trinde', 'Fonde', 'Fraide', 'Sarere'],\n    'weekdays_short' => ['San', 'Man', 'Tun', 'Tri', 'Fon', 'Fra', 'Sar'],\n    'weekdays_min' => ['San', 'Man', 'Tun', 'Tri', 'Fon', 'Fra', 'Sar'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['biknait', 'apinun'],\n\n    'year' => 'yia :count',\n    'y' => 'yia :count',\n    'a_year' => 'yia :count',\n\n    'month' => ':count mun',\n    'm' => ':count mun',\n    'a_month' => ':count mun',\n\n    'week' => ':count wik',\n    'w' => ':count wik',\n    'a_week' => ':count wik',\n\n    'day' => ':count de',\n    'd' => ':count de',\n    'a_day' => ':count de',\n\n    'hour' => ':count aua',\n    'h' => ':count aua',\n    'a_hour' => ':count aua',\n\n    'minute' => ':count minit',\n    'min' => ':count minit',\n    'a_minute' => ':count minit',\n\n    'second' => ':count namba tu',\n    's' => ':count namba tu',\n    'a_second' => ':count namba tu',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tr.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Alan Agius\n * - Erhan Gundogan\n * - François B\n * - JD Isaacks\n * - Murat Yüksel\n * - Baran Şengül\n * - Selami (selamialtin)\n * - TeomanBey\n */\nreturn [\n    'year' => ':count yıl',\n    'a_year' => '{1}bir yıl|]1,Inf[:count yıl',\n    'y' => ':county',\n    'month' => ':count ay',\n    'a_month' => '{1}bir ay|]1,Inf[:count ay',\n    'm' => ':countay',\n    'week' => ':count hafta',\n    'a_week' => '{1}bir hafta|]1,Inf[:count hafta',\n    'w' => ':counth',\n    'day' => ':count gün',\n    'a_day' => '{1}bir gün|]1,Inf[:count gün',\n    'd' => ':countg',\n    'hour' => ':count saat',\n    'a_hour' => '{1}bir saat|]1,Inf[:count saat',\n    'h' => ':countsa',\n    'minute' => ':count dakika',\n    'a_minute' => '{1}bir dakika|]1,Inf[:count dakika',\n    'min' => ':countdk',\n    'second' => ':count saniye',\n    'a_second' => '{1}birkaç saniye|]1,Inf[:count saniye',\n    's' => ':countsn',\n    'ago' => ':time önce',\n    'from_now' => ':time sonra',\n    'after' => ':time sonra',\n    'before' => ':time önce',\n    'diff_now' => 'şimdi',\n    'diff_today' => 'bugün',\n    'diff_today_regexp' => 'bugün(?:\\\\s+saat)?',\n    'diff_yesterday' => 'dün',\n    'diff_tomorrow' => 'yarın',\n    'diff_tomorrow_regexp' => 'yarın(?:\\\\s+saat)?',\n    'diff_before_yesterday' => 'evvelsi gün',\n    'diff_after_tomorrow' => 'öbür gün',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[bugün saat] LT',\n        'nextDay' => '[yarın saat] LT',\n        'nextWeek' => '[gelecek] dddd [saat] LT',\n        'lastDay' => '[dün] LT',\n        'lastWeek' => '[geçen] dddd [saat] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'd':\n            case 'D':\n            case 'Do':\n            case 'DD':\n                return $number;\n            default:\n                if ($number === 0) {  // special case for zero\n                    return \"$number'ıncı\";\n                }\n\n                static $suffixes = [\n                    1 => '\\'inci',\n                    5 => '\\'inci',\n                    8 => '\\'inci',\n                    70 => '\\'inci',\n                    80 => '\\'inci',\n                    2 => '\\'nci',\n                    7 => '\\'nci',\n                    20 => '\\'nci',\n                    50 => '\\'nci',\n                    3 => '\\'üncü',\n                    4 => '\\'üncü',\n                    100 => '\\'üncü',\n                    6 => '\\'ncı',\n                    9 => '\\'uncu',\n                    10 => '\\'uncu',\n                    30 => '\\'uncu',\n                    60 => '\\'ıncı',\n                    90 => '\\'ıncı',\n                ];\n\n                $lastDigit = $number % 10;\n\n                return $number.($suffixes[$lastDigit] ?? $suffixes[$number % 100 - $lastDigit] ?? $suffixes[$number >= 100 ? 100 : -1] ?? '');\n        }\n    },\n    'meridiem' => ['ÖÖ', 'ÖS', 'öö', 'ös'],\n    'months' => ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık'],\n    'months_short' => ['Oca', 'Şub', 'Mar', 'Nis', 'May', 'Haz', 'Tem', 'Ağu', 'Eyl', 'Eki', 'Kas', 'Ara'],\n    'weekdays' => ['Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'],\n    'weekdays_short' => ['Paz', 'Pts', 'Sal', 'Çar', 'Per', 'Cum', 'Cts'],\n    'weekdays_min' => ['Pz', 'Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' ve '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tr_CY.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/tr.php', [\n    'weekdays_short' => ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cmt'],\n    'weekdays_min' => ['Pa', 'Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct'],\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'D.MM.YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'D MMMM YYYY dddd h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tr_TR.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/tr.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ts.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ts_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ts_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Sunguti', 'Nyenyenyani', 'Nyenyankulu', 'Dzivamisoko', 'Mudyaxihi', 'Khotavuxika', 'Mawuwani', 'Mhawuri', 'Ndzhati', 'Nhlangula', 'Hukuri', 'N\\'wendzamhala'],\n    'months_short' => ['Sun', 'Yan', 'Kul', 'Dzi', 'Mud', 'Kho', 'Maw', 'Mha', 'Ndz', 'Nhl', 'Huk', 'N\\'w'],\n    'weekdays' => ['Sonto', 'Musumbhunuku', 'Ravumbirhi', 'Ravunharhu', 'Ravumune', 'Ravuntlhanu', 'Mugqivela'],\n    'weekdays_short' => ['Son', 'Mus', 'Bir', 'Har', 'Ne', 'Tlh', 'Mug'],\n    'weekdays_min' => ['Son', 'Mus', 'Bir', 'Har', 'Ne', 'Tlh', 'Mug'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => 'malembe ya :count',\n    'y' => 'malembe ya :count',\n    'a_year' => 'malembe ya :count',\n\n    'month' => 'tin’hweti ta :count',\n    'm' => 'tin’hweti ta :count',\n    'a_month' => 'tin’hweti ta :count',\n\n    'week' => 'mavhiki ya :count',\n    'w' => 'mavhiki ya :count',\n    'a_week' => 'mavhiki ya :count',\n\n    'day' => 'masiku :count',\n    'd' => 'masiku :count',\n    'a_day' => 'masiku :count',\n\n    'hour' => 'tiawara ta :count',\n    'h' => 'tiawara ta :count',\n    'a_hour' => 'tiawara ta :count',\n\n    'minute' => 'timinete ta :count',\n    'min' => 'timinete ta :count',\n    'a_minute' => 'timinete ta :count',\n\n    'second' => 'tisekoni ta :count',\n    's' => 'tisekoni ta :count',\n    'a_second' => 'tisekoni ta :count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tt.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/tt_RU.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tt_RU.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Rinat Norkin Pablo Saratxaga, Rinat Norkin pablo@mandrakesoft.com, rinat@taif.ru\n */\nreturn [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'DD MMM, HH:mm',\n        'LLLL' => 'DD MMMM YYYY, HH:mm',\n    ],\n    'months' => ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'],\n    'months_short' => ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'weekdays' => ['якшәмбе', 'дышәмбе', 'сишәмбе', 'чәршәәмбе', 'пәнҗешмбе', 'җомга', 'шимбә'],\n    'weekdays_short' => ['якш', 'дыш', 'сиш', 'чәрш', 'пәнҗ', 'җом', 'шим'],\n    'weekdays_min' => ['якш', 'дыш', 'сиш', 'чәрш', 'пәнҗ', 'җом', 'шим'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'year' => ':count ел',\n    'month' => ':count ай',\n    'week' => ':count атна',\n    'day' => ':count көн',\n    'hour' => ':count сәгать',\n    'minute' => ':count минут',\n    'second' => ':count секунд',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tt_RU@iqtelif.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Reshat Sabiq tatar.iqtelif.i18n@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD.MM.YYYY',\n    ],\n    'months' => ['Ğınwar', 'Fiwral\\'', 'Mart', 'April', 'May', 'Yün', 'Yül', 'Awgust', 'Sintebír', 'Üktebír', 'Noyebír', 'Dikebír'],\n    'months_short' => ['Ğın', 'Fiw', 'Mar', 'Apr', 'May', 'Yün', 'Yül', 'Awg', 'Sin', 'Ükt', 'Noy', 'Dik'],\n    'weekdays' => ['Yekşembí', 'Düşembí', 'Sişembí', 'Çerşembí', 'Pencíşembí', 'Comğa', 'Şimbe'],\n    'weekdays_short' => ['Yek', 'Düş', 'Siş', 'Çer', 'Pen', 'Com', 'Şim'],\n    'weekdays_min' => ['Yek', 'Düş', 'Siş', 'Çer', 'Pen', 'Com', 'Şim'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ÖA', 'ÖS'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/twq.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/ses.php', [\n    'meridiem' => ['Subbaahi', 'Zaarikay b'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tzl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn [\n    'year' => '[0,1]:count ar|:count ars',\n    'y' => '[0,1]:count ar|:count ars',\n    'month' => '[0,1]:count mes|:count mesen',\n    'm' => '[0,1]:count mes|:count mesen',\n    'week' => '[0,1]:count seifetziua|:count seifetziuas',\n    'w' => '[0,1]:count seifetziua|:count seifetziuas',\n    'day' => '[0,1]:count ziua|:count ziuas',\n    'd' => '[0,1]:count ziua|:count ziuas',\n    'hour' => '[0,1]:count þora|:count þoras',\n    'h' => '[0,1]:count þora|:count þoras',\n    'minute' => '[0,1]:count míut|:count míuts',\n    'min' => '[0,1]:count míut|:count míuts',\n    'second' => ':count secunds',\n    's' => ':count secunds',\n\n    'ago' => 'ja :time',\n    'from_now' => 'osprei :time',\n\n    'diff_yesterday' => 'ieiri',\n    'diff_yesterday_regexp' => 'ieiri(?:\\\\s+à)?',\n    'diff_today' => 'oxhi',\n    'diff_today_regexp' => 'oxhi(?:\\\\s+à)?',\n    'diff_tomorrow' => 'demà',\n    'diff_tomorrow_regexp' => 'demà(?:\\\\s+à)?',\n\n    'formats' => [\n        'LT' => 'HH.mm',\n        'LTS' => 'HH.mm.ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D. MMMM [dallas] YYYY',\n        'LLL' => 'D. MMMM [dallas] YYYY HH.mm',\n        'LLLL' => 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n    ],\n\n    'calendar' => [\n        'sameDay' => '[oxhi à] LT',\n        'nextDay' => '[demà à] LT',\n        'nextWeek' => 'dddd [à] LT',\n        'lastDay' => '[ieiri à] LT',\n        'lastWeek' => '[sür el] dddd [lasteu à] LT',\n        'sameElse' => 'L',\n    ],\n\n    'meridiem' => [\"D'A\", \"D'O\"],\n    'months' => ['Januar', 'Fevraglh', 'Març', 'Avrïu', 'Mai', 'Gün', 'Julia', 'Guscht', 'Setemvar', 'Listopäts', 'Noemvar', 'Zecemvar'],\n    'months_short' => ['Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Gün', 'Jul', 'Gus', 'Set', 'Lis', 'Noe', 'Zec'],\n    'weekdays' => ['Súladi', 'Lúneçi', 'Maitzi', 'Márcuri', 'Xhúadi', 'Viénerçi', 'Sáturi'],\n    'weekdays_short' => ['Súl', 'Lún', 'Mai', 'Már', 'Xhú', 'Vié', 'Sát'],\n    'weekdays_min' => ['Sú', 'Lú', 'Ma', 'Má', 'Xh', 'Vi', 'Sá'],\n    'ordinal' => ':number.',\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tzm.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n */\nreturn [\n    'year' => '{1}ⴰⵙⴳⴰⵙ|:count ⵉⵙⴳⴰⵙⵏ',\n    'month' => '{1}ⴰⵢoⵓⵔ|:count ⵉⵢⵢⵉⵔⵏ',\n    'week' => ':count ⵉⵎⴰⵍⴰⵙⵙ',\n    'day' => '{1}ⴰⵙⵙ|:count oⵙⵙⴰⵏ',\n    'hour' => '{1}ⵙⴰⵄⴰ|:count ⵜⴰⵙⵙⴰⵄⵉⵏ',\n    'minute' => '{1}ⵎⵉⵏⵓⴺ|:count ⵎⵉⵏⵓⴺ',\n    'second' => '{1}ⵉⵎⵉⴽ|:count ⵉⵎⵉⴽ',\n    'ago' => 'ⵢⴰⵏ :time',\n    'from_now' => 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ :time',\n    'diff_today' => 'ⴰⵙⴷⵅ',\n    'diff_yesterday' => 'ⴰⵚⴰⵏⵜ',\n    'diff_yesterday_regexp' => 'ⴰⵚⴰⵏⵜ(?:\\\\s+ⴴ)?',\n    'diff_tomorrow' => 'ⴰⵙⴽⴰ',\n    'diff_tomorrow_regexp' => 'ⴰⵙⴽⴰ(?:\\\\s+ⴴ)?',\n    'diff_today_regexp' => 'ⴰⵙⴷⵅ(?:\\\\s+ⴴ)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ⴰⵙⴷⵅ ⴴ] LT',\n        'nextDay' => '[ⴰⵙⴽⴰ ⴴ] LT',\n        'nextWeek' => 'dddd [ⴴ] LT',\n        'lastDay' => '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n        'lastWeek' => 'dddd [ⴴ] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['ⵉⵏⵏⴰⵢⵔ', 'ⴱⵕⴰⵢⵕ', 'ⵎⴰⵕⵚ', 'ⵉⴱⵔⵉⵔ', 'ⵎⴰⵢⵢⵓ', 'ⵢⵓⵏⵢⵓ', 'ⵢⵓⵍⵢⵓⵣ', 'ⵖⵓⵛⵜ', 'ⵛⵓⵜⴰⵏⴱⵉⵔ', 'ⴽⵟⵓⴱⵕ', 'ⵏⵓⵡⴰⵏⴱⵉⵔ', 'ⴷⵓⵊⵏⴱⵉⵔ'],\n    'months_short' => ['ⵉⵏⵏⴰⵢⵔ', 'ⴱⵕⴰⵢⵕ', 'ⵎⴰⵕⵚ', 'ⵉⴱⵔⵉⵔ', 'ⵎⴰⵢⵢⵓ', 'ⵢⵓⵏⵢⵓ', 'ⵢⵓⵍⵢⵓⵣ', 'ⵖⵓⵛⵜ', 'ⵛⵓⵜⴰⵏⴱⵉⵔ', 'ⴽⵟⵓⴱⵕ', 'ⵏⵓⵡⴰⵏⴱⵉⵔ', 'ⴷⵓⵊⵏⴱⵉⵔ'],\n    'weekdays' => ['ⴰⵙⴰⵎⴰⵙ', 'ⴰⵢⵏⴰⵙ', 'ⴰⵙⵉⵏⴰⵙ', 'ⴰⴽⵔⴰⵙ', 'ⴰⴽⵡⴰⵙ', 'ⴰⵙⵉⵎⵡⴰⵙ', 'ⴰⵙⵉⴹⵢⴰⵙ'],\n    'weekdays_short' => ['ⴰⵙⴰⵎⴰⵙ', 'ⴰⵢⵏⴰⵙ', 'ⴰⵙⵉⵏⴰⵙ', 'ⴰⴽⵔⴰⵙ', 'ⴰⴽⵡⴰⵙ', 'ⴰⵙⵉⵎⵡⴰⵙ', 'ⴰⵙⵉⴹⵢⴰⵙ'],\n    'weekdays_min' => ['ⴰⵙⴰⵎⴰⵙ', 'ⴰⵢⵏⴰⵙ', 'ⴰⵙⵉⵏⴰⵙ', 'ⴰⴽⵔⴰⵙ', 'ⴰⴽⵡⴰⵙ', 'ⴰⵙⵉⵎⵡⴰⵙ', 'ⴰⵙⵉⴹⵢⴰⵙ'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n    'weekend' => [5, 6],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/tzm_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - JD Isaacks\n */\nreturn [\n    'year' => '{1}:count asgas|:count isgasn',\n    'a_year' => 'asgas|:count isgasn',\n    'month' => '{1}:count ayowr|:count iyyirn',\n    'a_month' => 'ayowr|:count iyyirn',\n    'week' => ':count imalass',\n    'a_week' => ':imalass',\n    'day' => '{1}:count ass|:count ossan',\n    'a_day' => 'ass|:count ossan',\n    'hour' => '{1}:count saɛa|:count tassaɛin',\n    'a_hour' => '{1}saɛa|:count tassaɛin',\n    'minute' => ':count minuḍ',\n    'a_minute' => '{1}minuḍ|:count minuḍ',\n    'second' => ':count imik',\n    'a_second' => '{1}imik|:count imik',\n    'ago' => 'yan :time',\n    'from_now' => 'dadkh s yan :time',\n    'diff_yesterday' => 'assant',\n    'diff_yesterday_regexp' => 'assant(?:\\\\s+g)?',\n    'diff_today' => 'asdkh',\n    'diff_today_regexp' => 'asdkh(?:\\\\s+g)?',\n    'diff_tomorrow' => 'aska',\n    'diff_tomorrow_regexp' => 'aska(?:\\\\s+g)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[asdkh g] LT',\n        'nextDay' => '[aska g] LT',\n        'nextWeek' => 'dddd [g] LT',\n        'lastDay' => '[assant g] LT',\n        'lastWeek' => 'dddd [g] LT',\n        'sameElse' => 'L',\n    ],\n    'months' => ['innayr', 'brˤayrˤ', 'marˤsˤ', 'ibrir', 'mayyw', 'ywnyw', 'ywlywz', 'ɣwšt', 'šwtanbir', 'ktˤwbrˤ', 'nwwanbir', 'dwjnbir'],\n    'months_short' => ['innayr', 'brˤayrˤ', 'marˤsˤ', 'ibrir', 'mayyw', 'ywnyw', 'ywlywz', 'ɣwšt', 'šwtanbir', 'ktˤwbrˤ', 'nwwanbir', 'dwjnbir'],\n    'weekdays' => ['asamas', 'aynas', 'asinas', 'akras', 'akwas', 'asimwas', 'asiḍyas'],\n    'weekdays_short' => ['asamas', 'aynas', 'asinas', 'akras', 'akwas', 'asimwas', 'asiḍyas'],\n    'weekdays_min' => ['asamas', 'aynas', 'asinas', 'akras', 'akwas', 'asimwas', 'asiḍyas'],\n    'meridiem' => ['Zdat azal', 'Ḍeffir aza'],\n    'first_day_of_week' => 6,\n    'day_of_first_week_of_year' => 1,\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ug.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - yasinn\n */\nreturn [\n    'year' => '{1}'.'بىر يىل'.'|:count '.'يىل',\n    'month' => '{1}'.'بىر ئاي'.'|:count '.'ئاي',\n    'week' => '{1}'.'بىر ھەپتە'.'|:count '.'ھەپتە',\n    'day' => '{1}'.'بىر كۈن'.'|:count '.'كۈن',\n    'hour' => '{1}'.'بىر سائەت'.'|:count '.'سائەت',\n    'minute' => '{1}'.'بىر مىنۇت'.'|:count '.'مىنۇت',\n    'second' => '{1}'.'نەچچە سېكونت'.'|:count '.'سېكونت',\n    'ago' => ':time بۇرۇن',\n    'from_now' => ':time كېيىن',\n    'diff_today' => 'بۈگۈن',\n    'diff_yesterday' => 'تۆنۈگۈن',\n    'diff_tomorrow' => 'ئەتە',\n    'diff_tomorrow_regexp' => 'ئەتە(?:\\\\s+سائەت)?',\n    'diff_today_regexp' => 'بۈگۈن(?:\\\\s+سائەت)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-DD',\n        'LL' => 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n        'LLL' => 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        'LLLL' => 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[بۈگۈن سائەت] LT',\n        'nextDay' => '[ئەتە سائەت] LT',\n        'nextWeek' => '[كېلەركى] dddd [سائەت] LT',\n        'lastDay' => '[تۆنۈگۈن] LT',\n        'lastWeek' => '[ئالدىنقى] dddd [سائەت] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return $number.'-كۈنى';\n            case 'w':\n            case 'W':\n                return $number.'-ھەپتە';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour, $minute) {\n        $time = $hour * 100 + $minute;\n        if ($time < 600) {\n            return 'يېرىم كېچە';\n        }\n        if ($time < 900) {\n            return 'سەھەر';\n        }\n        if ($time < 1130) {\n            return 'چۈشتىن بۇرۇن';\n        }\n        if ($time < 1230) {\n            return 'چۈش';\n        }\n        if ($time < 1800) {\n            return 'چۈشتىن كېيىن';\n        }\n\n        return 'كەچ';\n    },\n    'months' => ['يانۋار', 'فېۋرال', 'مارت', 'ئاپرېل', 'ماي', 'ئىيۇن', 'ئىيۇل', 'ئاۋغۇست', 'سېنتەبىر', 'ئۆكتەبىر', 'نويابىر', 'دېكابىر'],\n    'months_short' => ['يانۋار', 'فېۋرال', 'مارت', 'ئاپرېل', 'ماي', 'ئىيۇن', 'ئىيۇل', 'ئاۋغۇست', 'سېنتەبىر', 'ئۆكتەبىر', 'نويابىر', 'دېكابىر'],\n    'weekdays' => ['يەكشەنبە', 'دۈشەنبە', 'سەيشەنبە', 'چارشەنبە', 'پەيشەنبە', 'جۈمە', 'شەنبە'],\n    'weekdays_short' => ['يە', 'دۈ', 'سە', 'چا', 'پە', 'جۈ', 'شە'],\n    'weekdays_min' => ['يە', 'دۈ', 'سە', 'چا', 'پە', 'جۈ', 'شە'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' ۋە '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ug_CN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - Alim Boyaq\n */\nreturn require __DIR__.'/ug.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uk.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Carbon\\CarbonInterface;\n\n$processHoursFunction = function (CarbonInterface $date, string $format) {\n    return $format.'о'.($date->hour === 11 ? 'б' : '').'] LT';\n};\n\n/*\n * Authors:\n * - Kunal Marwaha\n * - Josh Soref\n * - François B\n * - Tim Fish\n * - Serhan Apaydın\n * - Max Mykhailenko\n * - JD Isaacks\n * - Max Kovpak\n * - AucT\n * - Philippe Vaucher\n * - Ilya Shaplyko\n * - Vadym Ievsieiev\n * - Denys Kurets\n * - Igor Kasyanchuk\n * - Tsutomu Kuroda\n * - tjku\n * - Max Melentiev\n * - Oleh\n * - epaminond\n * - Juanito Fatas\n * - Vitalii Khustochka\n * - Akira Matsuda\n * - Christopher Dell\n * - Enrique Vidal\n * - Simone Carletti\n * - Aaron Patterson\n * - Andriy Tyurnikov\n * - Nicolás Hock Isaza\n * - Iwakura Taro\n * - Andrii Ponomarov\n * - alecrabbit\n * - vystepanenko\n * - AlexWalkerson\n * - Andre Havryliuk (Andrend)\n * - Max Datsenko (datsenko-md)\n */\nreturn [\n    'year' => ':count рік|:count роки|:count років',\n    'y' => ':countр|:countрр|:countрр',\n    'a_year' => '{1}рік|:count рік|:count роки|:count років',\n    'month' => ':count місяць|:count місяці|:count місяців',\n    'm' => ':countм',\n    'a_month' => '{1}місяць|:count місяць|:count місяці|:count місяців',\n    'week' => ':count тиждень|:count тижні|:count тижнів',\n    'w' => ':countт',\n    'a_week' => '{1}тиждень|:count тиждень|:count тижні|:count тижнів',\n    'day' => ':count день|:count дні|:count днів',\n    'd' => ':countд',\n    'a_day' => '{1}день|:count день|:count дні|:count днів',\n    'hour' => ':count година|:count години|:count годин',\n    'h' => ':countг',\n    'a_hour' => '{1}година|:count година|:count години|:count годин',\n    'minute' => ':count хвилина|:count хвилини|:count хвилин',\n    'min' => ':countхв',\n    'a_minute' => '{1}хвилина|:count хвилина|:count хвилини|:count хвилин',\n    'second' => ':count секунда|:count секунди|:count секунд',\n    's' => ':countсек',\n    'a_second' => '{1}декілька секунд|:count секунда|:count секунди|:count секунд',\n\n    'hour_ago' => ':count годину|:count години|:count годин',\n    'a_hour_ago' => '{1}годину|:count годину|:count години|:count годин',\n    'minute_ago' => ':count хвилину|:count хвилини|:count хвилин',\n    'a_minute_ago' => '{1}хвилину|:count хвилину|:count хвилини|:count хвилин',\n    'second_ago' => ':count секунду|:count секунди|:count секунд',\n    'a_second_ago' => '{1}декілька секунд|:count секунду|:count секунди|:count секунд',\n\n    'hour_from_now' => ':count годину|:count години|:count годин',\n    'a_hour_from_now' => '{1}годину|:count годину|:count години|:count годин',\n    'minute_from_now' => ':count хвилину|:count хвилини|:count хвилин',\n    'a_minute_from_now' => '{1}хвилину|:count хвилину|:count хвилини|:count хвилин',\n    'second_from_now' => ':count секунду|:count секунди|:count секунд',\n    'a_second_from_now' => '{1}декілька секунд|:count секунду|:count секунди|:count секунд',\n\n    'hour_after' => ':count годину|:count години|:count годин',\n    'a_hour_after' => '{1}годину|:count годину|:count години|:count годин',\n    'minute_after' => ':count хвилину|:count хвилини|:count хвилин',\n    'a_minute_after' => '{1}хвилину|:count хвилину|:count хвилини|:count хвилин',\n    'second_after' => ':count секунду|:count секунди|:count секунд',\n    'a_second_after' => '{1}декілька секунд|:count секунду|:count секунди|:count секунд',\n\n    'hour_before' => ':count годину|:count години|:count годин',\n    'a_hour_before' => '{1}годину|:count годину|:count години|:count годин',\n    'minute_before' => ':count хвилину|:count хвилини|:count хвилин',\n    'a_minute_before' => '{1}хвилину|:count хвилину|:count хвилини|:count хвилин',\n    'second_before' => ':count секунду|:count секунди|:count секунд',\n    'a_second_before' => '{1}декілька секунд|:count секунду|:count секунди|:count секунд',\n\n    'ago' => ':time тому',\n    'from_now' => 'за :time',\n    'after' => ':time після',\n    'before' => ':time до',\n    'diff_now' => 'щойно',\n    'diff_today' => 'Сьогодні',\n    'diff_today_regexp' => 'Сьогодні(?:\\\\s+о)?',\n    'diff_yesterday' => 'вчора',\n    'diff_yesterday_regexp' => 'Вчора(?:\\\\s+о)?',\n    'diff_tomorrow' => 'завтра',\n    'diff_tomorrow_regexp' => 'Завтра(?:\\\\s+о)?',\n    'diff_before_yesterday' => 'позавчора',\n    'diff_after_tomorrow' => 'післязавтра',\n    'period_recurrences' => 'один раз|:count рази|:count разів',\n    'period_interval' => 'кожні :interval',\n    'period_start_date' => 'з :date',\n    'period_end_date' => 'до :date',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY, HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY, HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => function (CarbonInterface $date) use ($processHoursFunction) {\n            return $processHoursFunction($date, '[Сьогодні ');\n        },\n        'nextDay' => function (CarbonInterface $date) use ($processHoursFunction) {\n            return $processHoursFunction($date, '[Завтра ');\n        },\n        'nextWeek' => function (CarbonInterface $date) use ($processHoursFunction) {\n            return $processHoursFunction($date, '[У] dddd [');\n        },\n        'lastDay' => function (CarbonInterface $date) use ($processHoursFunction) {\n            return $processHoursFunction($date, '[Вчора ');\n        },\n        'lastWeek' => function (CarbonInterface $date) use ($processHoursFunction) {\n            switch ($date->dayOfWeek) {\n                case 0:\n                case 3:\n                case 5:\n                case 6:\n                    return $processHoursFunction($date, '[Минулої] dddd [');\n                default:\n                    return $processHoursFunction($date, '[Минулого] dddd [');\n            }\n        },\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'M':\n            case 'd':\n            case 'DDD':\n            case 'w':\n            case 'W':\n                return $number.'-й';\n            case 'D':\n                return $number.'-го';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour) {\n        if ($hour < 4) {\n            return 'ночі';\n        }\n        if ($hour < 12) {\n            return 'ранку';\n        }\n        if ($hour < 17) {\n            return 'дня';\n        }\n\n        return 'вечора';\n    },\n    'months' => ['січня', 'лютого', 'березня', 'квітня', 'травня', 'червня', 'липня', 'серпня', 'вересня', 'жовтня', 'листопада', 'грудня'],\n    'months_standalone' => ['січень', 'лютий', 'березень', 'квітень', 'травень', 'червень', 'липень', 'серпень', 'вересень', 'жовтень', 'листопад', 'грудень'],\n    'months_short' => ['січ', 'лют', 'бер', 'кві', 'тра', 'чер', 'лип', 'сер', 'вер', 'жов', 'лис', 'гру'],\n    'months_regexp' => '/(D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|L{2,4}|l{2,4})/',\n    'weekdays' => function (CarbonInterface $date, $format, $index) {\n        static $words = [\n            'nominative' => ['неділя', 'понеділок', 'вівторок', 'середа', 'четвер', 'п’ятниця', 'субота'],\n            'accusative' => ['неділю', 'понеділок', 'вівторок', 'середу', 'четвер', 'п’ятницю', 'суботу'],\n            'genitive' => ['неділі', 'понеділка', 'вівторка', 'середи', 'четверга', 'п’ятниці', 'суботи'],\n        ];\n\n        $format = $format ?? '';\n        $nounCase = preg_match('/(\\[(В|в|У|у)\\])\\s+dddd/u', $format)\n            ? 'accusative'\n            : (\n                preg_match('/\\[?(?:минулої|наступної)?\\s*\\]\\s+dddd/u', $format)\n                    ? 'genitive'\n                    : 'nominative'\n            );\n\n        return $words[$nounCase][$index] ?? null;\n    },\n    'weekdays_short' => ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n    'weekdays_min' => ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' i '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uk_UA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/uk.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/unm.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/unm_US.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/unm_US.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['enikwsi', 'chkwali', 'xamokhwite', 'kwetayoxe', 'tainipen', 'kichinipen', 'lainipen', 'winaminke', 'kichitahkok', 'puksit', 'wini', 'muxkotae'],\n    'months_short' => ['eni', 'chk', 'xam', 'kwe', 'tai', 'nip', 'lai', 'win', 'tah', 'puk', 'kun', 'mux'],\n    'weekdays' => ['kentuwei', 'manteke', 'tusteke', 'lelai', 'tasteke', 'pelaiteke', 'sateteke'],\n    'weekdays_short' => ['ken', 'man', 'tus', 'lel', 'tas', 'pel', 'sat'],\n    'weekdays_min' => ['ken', 'man', 'tus', 'lel', 'tas', 'pel', 'sat'],\n    'day_of_first_week_of_year' => 1,\n\n    // Too unreliable\n    /*\n    'year' => ':count kaxtëne',\n    'y' => ':count kaxtëne',\n    'a_year' => ':count kaxtëne',\n\n    'month' => ':count piskewëni kishux', // less reliable\n    'm' => ':count piskewëni kishux', // less reliable\n    'a_month' => ':count piskewëni kishux', // less reliable\n\n    'week' => ':count kishku', // less reliable\n    'w' => ':count kishku', // less reliable\n    'a_week' => ':count kishku', // less reliable\n\n    'day' => ':count kishku',\n    'd' => ':count kishku',\n    'a_day' => ':count kishku',\n\n    'hour' => ':count xkuk', // less reliable\n    'h' => ':count xkuk', // less reliable\n    'a_hour' => ':count xkuk', // less reliable\n\n    'minute' => ':count txituwàk', // less reliable\n    'min' => ':count txituwàk', // less reliable\n    'a_minute' => ':count txituwàk', // less reliable\n\n    'second' => ':count nisha', // less reliable\n    's' => ':count nisha', // less reliable\n    'a_second' => ':count nisha', // less reliable\n    */\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ur.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n$months = [\n    'جنوری',\n    'فروری',\n    'مارچ',\n    'اپریل',\n    'مئی',\n    'جون',\n    'جولائی',\n    'اگست',\n    'ستمبر',\n    'اکتوبر',\n    'نومبر',\n    'دسمبر',\n];\n\n$weekdays = [\n    'اتوار',\n    'پیر',\n    'منگل',\n    'بدھ',\n    'جمعرات',\n    'جمعہ',\n    'ہفتہ',\n];\n\n/*\n * Authors:\n * - Sawood Alam\n * - Mehshan\n * - Philippe Vaucher\n * - Tsutomu Kuroda\n * - tjku\n * - Zaid Akram\n * - Max Melentiev\n * - hafezdivandari\n * - Hossein Jabbari\n * - nimamo\n */\nreturn [\n    'year' => 'ایک سال|:count سال',\n    'month' => 'ایک ماہ|:count ماہ',\n    'week' => ':count ہفتے',\n    'day' => 'ایک دن|:count دن',\n    'hour' => 'ایک گھنٹہ|:count گھنٹے',\n    'minute' => 'ایک منٹ|:count منٹ',\n    'second' => 'چند سیکنڈ|:count سیکنڈ',\n    'ago' => ':time قبل',\n    'from_now' => ':time بعد',\n    'after' => ':time بعد',\n    'before' => ':time پہلے',\n    'diff_now' => 'اب',\n    'diff_today' => 'آج',\n    'diff_today_regexp' => 'آج(?:\\\\s+بوقت)?',\n    'diff_yesterday' => 'گزشتہ کل',\n    'diff_yesterday_regexp' => 'گذشتہ(?:\\\\s+روز)?(?:\\\\s+بوقت)?',\n    'diff_tomorrow' => 'آئندہ کل',\n    'diff_tomorrow_regexp' => 'کل(?:\\\\s+بوقت)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd، D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[آج بوقت] LT',\n        'nextDay' => '[کل بوقت] LT',\n        'nextWeek' => 'dddd [بوقت] LT',\n        'lastDay' => '[گذشتہ روز بوقت] LT',\n        'lastWeek' => '[گذشتہ] dddd [بوقت] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['صبح', 'شام'],\n    'months' => $months,\n    'months_short' => $months,\n    'weekdays' => $weekdays,\n    'weekdays_short' => $weekdays,\n    'weekdays_min' => $weekdays,\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => ['، ', ' اور '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ur_IN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Red Hat, Pune    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/ur.php', [\n    'formats' => [\n        'L' => 'D/M/YY',\n    ],\n    'months' => ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'weekdays' => ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'سنیچر'],\n    'weekdays_short' => ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'سنیچر'],\n    'weekdays_min' => ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'سنیچر'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ur_PK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/ur.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'weekdays' => ['اتوار', 'پير', 'منگل', 'بدھ', 'جمعرات', 'جمعه', 'هفته'],\n    'weekdays_short' => ['اتوار', 'پير', 'منگل', 'بدھ', 'جمعرات', 'جمعه', 'هفته'],\n    'weekdays_min' => ['اتوار', 'پير', 'منگل', 'بدھ', 'جمعرات', 'جمعه', 'هفته'],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ص', 'ش'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uz.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Dmitriy Shabanov\n * - JD Isaacks\n * - Inoyatulloh\n * - Jamshid\n * - aarkhipov\n * - Philippe Vaucher\n * - felixthemagnificent\n * - Tsutomu Kuroda\n * - tjku\n * - Max Melentiev\n * - Juanito Fatas\n * - Alisher Ulugbekov\n * - Ergashev Adizbek\n */\nreturn [\n    'year' => ':count йил',\n    'a_year' => '{1}бир йил|:count йил',\n    'y' => ':count й',\n    'month' => ':count ой',\n    'a_month' => '{1}бир ой|:count ой',\n    'm' => ':count о',\n    'week' => ':count ҳафта',\n    'a_week' => '{1}бир ҳафта|:count ҳафта',\n    'w' => ':count ҳ',\n    'day' => ':count кун',\n    'a_day' => '{1}бир кун|:count кун',\n    'd' => ':count к',\n    'hour' => ':count соат',\n    'a_hour' => '{1}бир соат|:count соат',\n    'h' => ':count с',\n    'minute' => ':count дақиқа',\n    'a_minute' => '{1}бир дақиқа|:count дақиқа',\n    'min' => ':count д',\n    'second' => ':count сония',\n    'a_second' => '{1}сония|:count сония',\n    's' => ':count с',\n    'ago' => ':time аввал',\n    'from_now' => 'Якин :time ичида',\n    'after' => ':timeдан кейин',\n    'before' => ':time олдин',\n    'diff_now' => 'ҳозир',\n    'diff_today' => 'Бугун',\n    'diff_today_regexp' => 'Бугун(?:\\\\s+соат)?',\n    'diff_yesterday' => 'Кеча',\n    'diff_yesterday_regexp' => 'Кеча(?:\\\\s+соат)?',\n    'diff_tomorrow' => 'Эртага',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'D MMMM YYYY, dddd HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Бугун соат] LT [да]',\n        'nextDay' => '[Эртага] LT [да]',\n        'nextWeek' => 'dddd [куни соат] LT [да]',\n        'lastDay' => '[Кеча соат] LT [да]',\n        'lastWeek' => '[Утган] dddd [куни соат] LT [да]',\n        'sameElse' => 'L',\n    ],\n    'months' => ['январ', 'феврал', 'март', 'апрел', 'май', 'июн', 'июл', 'август', 'сентябр', 'октябр', 'ноябр', 'декабр'],\n    'months_short' => ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'],\n    'weekdays' => ['якшанба', 'душанба', 'сешанба', 'чоршанба', 'пайшанба', 'жума', 'шанба'],\n    'weekdays_short' => ['якш', 'душ', 'сеш', 'чор', 'пай', 'жум', 'шан'],\n    'weekdays_min' => ['як', 'ду', 'се', 'чо', 'па', 'жу', 'ша'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['эрталаб', 'кечаси'],\n    'list' => [', ', ' ва '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uz_Arab.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/fa.php', [\n    'weekdays' => ['یکشنبه', 'دوشنبه', 'سه‌شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه'],\n    'weekdays_short' => ['ی.', 'د.', 'س.', 'چ.', 'پ.', 'ج.', 'ش.'],\n    'weekdays_min' => ['ی.', 'د.', 'س.', 'چ.', 'پ.', 'ج.', 'ش.'],\n    'months' => ['جنوری', 'فبروری', 'مارچ', 'اپریل', 'می', 'جون', 'جولای', 'اگست', 'سپتمبر', 'اکتوبر', 'نومبر', 'دسمبر'],\n    'months_short' => ['جنو', 'فبر', 'مار', 'اپر', 'می', 'جون', 'جول', 'اگس', 'سپت', 'اکت', 'نوم', 'دسم'],\n    'first_day_of_week' => 6,\n    'weekend' => [4, 5],\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'YYYY MMMM D, dddd HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uz_Cyrl.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/uz.php', [\n    'formats' => [\n        'L' => 'DD/MM/yy',\n        'LL' => 'D MMM, YYYY',\n        'LLL' => 'D MMMM, YYYY HH:mm',\n        'LLLL' => 'dddd, DD MMMM, YYYY HH:mm',\n    ],\n    'meridiem' => ['ТО', 'ТК'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uz_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Josh Soref\n * - Rasulbek\n * - Ilyosjon Kamoldinov (ilyosjon09)\n */\nreturn [\n    'year' => ':count yil',\n    'a_year' => '{1}bir yil|:count yil',\n    'y' => ':count y',\n    'month' => ':count oy',\n    'a_month' => '{1}bir oy|:count oy',\n    'm' => ':count o',\n    'week' => ':count hafta',\n    'a_week' => '{1}bir hafta|:count hafta',\n    'w' => ':count h',\n    'day' => ':count kun',\n    'a_day' => '{1}bir kun|:count kun',\n    'd' => ':count k',\n    'hour' => ':count soat',\n    'a_hour' => '{1}bir soat|:count soat',\n    'h' => ':count soat',\n    'minute' => ':count daqiqa',\n    'a_minute' => '{1}bir daqiqa|:count daqiqa',\n    'min' => ':count d',\n    'second' => ':count soniya',\n    'a_second' => '{1}soniya|:count soniya',\n    's' => ':count son.',\n    'ago' => ':time avval',\n    'from_now' => 'Yaqin :time ichida',\n    'after' => ':timedan keyin',\n    'before' => ':time oldin',\n    'diff_yesterday' => 'Kecha',\n    'diff_yesterday_regexp' => 'Kecha(?:\\\\s+soat)?',\n    'diff_today' => 'Bugun',\n    'diff_today_regexp' => 'Bugun(?:\\\\s+soat)?',\n    'diff_tomorrow' => 'Ertaga',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'D MMMM YYYY, dddd HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Bugun soat] LT [da]',\n        'nextDay' => '[Ertaga] LT [da]',\n        'nextWeek' => 'dddd [kuni soat] LT [da]',\n        'lastDay' => '[Kecha soat] LT [da]',\n        'lastWeek' => '[O\\'tgan] dddd [kuni soat] LT [da]',\n        'sameElse' => 'L',\n    ],\n    'months' => ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'Iyun', 'Iyul', 'Avgust', 'Sentabr', 'Oktabr', 'Noyabr', 'Dekabr'],\n    'months_short' => ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'Iyun', 'Iyul', 'Avg', 'Sen', 'Okt', 'Noy', 'Dek'],\n    'weekdays' => ['Yakshanba', 'Dushanba', 'Seshanba', 'Chorshanba', 'Payshanba', 'Juma', 'Shanba'],\n    'weekdays_short' => ['Yak', 'Dush', 'Sesh', 'Chor', 'Pay', 'Jum', 'Shan'],\n    'weekdays_min' => ['Ya', 'Du', 'Se', 'Cho', 'Pa', 'Ju', 'Sha'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' va '],\n    'meridiem' => ['TO', 'TK'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uz_UZ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Bobir Ismailov Bobir Ismailov, Pablo Saratxaga, Mashrab Kuvatov bobir_is@yahoo.com, pablo@mandrakesoft.com, kmashrab@uni-bremen.de\n */\nreturn array_replace_recursive(require __DIR__.'/uz_Latn.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Yanvar', 'Fevral', 'Mart', 'Aprel', 'May', 'Iyun', 'Iyul', 'Avgust', 'Sentabr', 'Oktabr', 'Noyabr', 'Dekabr'],\n    'months_short' => ['Yan', 'Fev', 'Mar', 'Apr', 'May', 'Iyn', 'Iyl', 'Avg', 'Sen', 'Okt', 'Noy', 'Dek'],\n    'weekdays' => ['Yakshanba', 'Dushanba', 'Seshanba', 'Chorshanba', 'Payshanba', 'Juma', 'Shanba'],\n    'weekdays_short' => ['Yak', 'Du', 'Se', 'Cho', 'Pay', 'Ju', 'Sha'],\n    'weekdays_min' => ['Yak', 'Du', 'Se', 'Cho', 'Pay', 'Ju', 'Sha'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/uz_UZ@cyrillic.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Mashrab Kuvatov Mashrab Kuvatov, Pablo Saratxaga kmashrab@uni-bremen.de, pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/uz.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['Январ', 'Феврал', 'Март', 'Апрел', 'Май', 'Июн', 'Июл', 'Август', 'Сентябр', 'Октябр', 'Ноябр', 'Декабр'],\n    'months_short' => ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],\n    'weekdays' => ['Якшанба', 'Душанба', 'Сешанба', 'Чоршанба', 'Пайшанба', 'Жума', 'Шанба'],\n    'weekdays_short' => ['Якш', 'Душ', 'Сеш', 'Чор', 'Пай', 'Жум', 'Шан'],\n    'weekdays_min' => ['Якш', 'Душ', 'Сеш', 'Чор', 'Пай', 'Жум', 'Шан'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vai.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['ꕞꕌꔵ', 'ꗳꗡꘉ', 'ꕚꕞꕚ', 'ꕉꕞꕒ', 'ꕉꔤꕆꕢ', 'ꕉꔤꕀꕮ', 'ꔻꔬꔳ'],\n    'weekdays_short' => ['ꕞꕌꔵ', 'ꗳꗡꘉ', 'ꕚꕞꕚ', 'ꕉꕞꕒ', 'ꕉꔤꕆꕢ', 'ꕉꔤꕀꕮ', 'ꔻꔬꔳ'],\n    'weekdays_min' => ['ꕞꕌꔵ', 'ꗳꗡꘉ', 'ꕚꕞꕚ', 'ꕉꕞꕒ', 'ꕉꔤꕆꕢ', 'ꕉꔤꕀꕮ', 'ꔻꔬꔳ'],\n    'months' => ['ꖨꖕ ꕪꕴ ꔞꔀꕮꕊ', 'ꕒꕡꖝꖕ', 'ꕾꖺ', 'ꖢꖕ', 'ꖑꕱ', 'ꖱꘋ', 'ꖱꕞꔤ', 'ꗛꔕ', 'ꕢꕌ', 'ꕭꖃ', 'ꔞꘋꕔꕿ ꕸꖃꗏ', 'ꖨꖕ ꕪꕴ ꗏꖺꕮꕊ'],\n    'months_short' => ['ꖨꖕꔞ', 'ꕒꕡ', 'ꕾꖺ', 'ꖢꖕ', 'ꖑꕱ', 'ꖱꘋ', 'ꖱꕞ', 'ꗛꔕ', 'ꕢꕌ', 'ꕭꖃ', 'ꔞꘋ', 'ꖨꖕꗏ'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm a',\n    ],\n\n    'year' => ':count ꕀ', // less reliable\n    'y' => ':count ꕀ', // less reliable\n    'a_year' => ':count ꕀ', // less reliable\n\n    'second' => ':count ꗱꕞꕯꕊ', // less reliable\n    's' => ':count ꗱꕞꕯꕊ', // less reliable\n    'a_second' => ':count ꗱꕞꕯꕊ', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vai_Latn.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'weekdays' => ['lahadi', 'tɛɛnɛɛ', 'talata', 'alaba', 'aimisa', 'aijima', 'siɓiti'],\n    'weekdays_short' => ['lahadi', 'tɛɛnɛɛ', 'talata', 'alaba', 'aimisa', 'aijima', 'siɓiti'],\n    'weekdays_min' => ['lahadi', 'tɛɛnɛɛ', 'talata', 'alaba', 'aimisa', 'aijima', 'siɓiti'],\n    'months' => ['luukao kemã', 'ɓandaɓu', 'vɔɔ', 'fulu', 'goo', '6', '7', 'kɔnde', 'saah', 'galo', 'kenpkato ɓololɔ', 'luukao lɔma'],\n    'months_short' => ['luukao kemã', 'ɓandaɓu', 'vɔɔ', 'fulu', 'goo', '6', '7', 'kɔnde', 'saah', 'galo', 'kenpkato ɓololɔ', 'luukao lɔma'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'h:mm a',\n        'LTS' => 'h:mm:ss a',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm a',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm a',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vai_Vaii.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/vai.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ve.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/ve_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/ve_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Phando', 'Luhuhi', 'Ṱhafamuhwe', 'Lambamai', 'Shundunthule', 'Fulwi', 'Fulwana', 'Ṱhangule', 'Khubvumedzi', 'Tshimedzi', 'Ḽara', 'Nyendavhusiku'],\n    'months_short' => ['Pha', 'Luh', 'Fam', 'Lam', 'Shu', 'Lwi', 'Lwa', 'Ngu', 'Khu', 'Tsh', 'Ḽar', 'Nye'],\n    'weekdays' => ['Swondaha', 'Musumbuluwo', 'Ḽavhuvhili', 'Ḽavhuraru', 'Ḽavhuṋa', 'Ḽavhuṱanu', 'Mugivhela'],\n    'weekdays_short' => ['Swo', 'Mus', 'Vhi', 'Rar', 'ṋa', 'Ṱan', 'Mug'],\n    'weekdays_min' => ['Swo', 'Mus', 'Vhi', 'Rar', 'ṋa', 'Ṱan', 'Mug'],\n    'day_of_first_week_of_year' => 1,\n\n    // Too unreliable\n    /*\n    'day' => ':count vhege', // less reliable\n    'd' => ':count vhege', // less reliable\n    'a_day' => ':count vhege', // less reliable\n\n    'hour' => ':count watshi', // less reliable\n    'h' => ':count watshi', // less reliable\n    'a_hour' => ':count watshi', // less reliable\n\n    'minute' => ':count watshi', // less reliable\n    'min' => ':count watshi', // less reliable\n    'a_minute' => ':count watshi', // less reliable\n\n    'second' => ':count Mu', // less reliable\n    's' => ':count Mu', // less reliable\n    'a_second' => ':count Mu', // less reliable\n\n    'week' => ':count vhege',\n    'w' => ':count vhege',\n    'a_week' => ':count vhege',\n    */\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Andre Polykanine A.K.A. Menelion Elensúlë\n * - JD Isaacks\n */\nreturn [\n    'year' => ':count năm',\n    'a_year' => '{1}một năm|]1, Inf[:count năm',\n    'y' => ':count năm',\n    'month' => ':count tháng',\n    'a_month' => '{1}một tháng|]1, Inf[:count tháng',\n    'm' => ':count tháng',\n    'week' => ':count tuần',\n    'a_week' => '{1}một tuần|]1, Inf[:count tuần',\n    'w' => ':count tuần',\n    'day' => ':count ngày',\n    'a_day' => '{1}một ngày|]1, Inf[:count ngày',\n    'd' => ':count ngày',\n    'hour' => ':count giờ',\n    'a_hour' => '{1}một giờ|]1, Inf[:count giờ',\n    'h' => ':count giờ',\n    'minute' => ':count phút',\n    'a_minute' => '{1}một phút|]1, Inf[:count phút',\n    'min' => ':count phút',\n    'second' => ':count giây',\n    'a_second' => '{1}vài giây|]1, Inf[:count giây',\n    's' => ':count giây',\n    'ago' => ':time trước',\n    'from_now' => ':time tới',\n    'after' => ':time sau',\n    'before' => ':time trước',\n    'diff_now' => 'bây giờ',\n    'diff_today' => 'Hôm',\n    'diff_today_regexp' => 'Hôm(?:\\\\s+nay)?(?:\\\\s+lúc)?',\n    'diff_yesterday' => 'Hôm qua',\n    'diff_yesterday_regexp' => 'Hôm(?:\\\\s+qua)?(?:\\\\s+lúc)?',\n    'diff_tomorrow' => 'Ngày mai',\n    'diff_tomorrow_regexp' => 'Ngày(?:\\\\s+mai)?(?:\\\\s+lúc)?',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM [năm] YYYY',\n        'LLL' => 'D MMMM [năm] YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM [năm] YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[Hôm nay lúc] LT',\n        'nextDay' => '[Ngày mai lúc] LT',\n        'nextWeek' => 'dddd [tuần tới lúc] LT',\n        'lastDay' => '[Hôm qua lúc] LT',\n        'lastWeek' => 'dddd [tuần trước lúc] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['SA', 'CH'],\n    'months' => ['tháng 1', 'tháng 2', 'tháng 3', 'tháng 4', 'tháng 5', 'tháng 6', 'tháng 7', 'tháng 8', 'tháng 9', 'tháng 10', 'tháng 11', 'tháng 12'],\n    'months_short' => ['Th01', 'Th02', 'Th03', 'Th04', 'Th05', 'Th06', 'Th07', 'Th08', 'Th09', 'Th10', 'Th11', 'Th12'],\n    'weekdays' => ['chủ nhật', 'thứ hai', 'thứ ba', 'thứ tư', 'thứ năm', 'thứ sáu', 'thứ bảy'],\n    'weekdays_short' => ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],\n    'weekdays_min' => ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => [', ', ' và '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vi_VN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/vi.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'months' => ['M01', 'M02', 'M03', 'M04', 'M05', 'M06', 'M07', 'M08', 'M09', 'M10', 'M11', 'M12'],\n    'months_short' => ['M01', 'M02', 'M03', 'M04', 'M05', 'M06', 'M07', 'M08', 'M09', 'M10', 'M11', 'M12'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY-MM-dd',\n        'LL' => 'YYYY MMM D',\n        'LLL' => 'YYYY MMMM D HH:mm',\n        'LLLL' => 'YYYY MMMM D, dddd HH:mm',\n    ],\n\n    'year' => ':count yel',\n    'y' => ':count yel',\n    'a_year' => ':count yel',\n\n    'month' => ':count mul',\n    'm' => ':count mul',\n    'a_month' => ':count mul',\n\n    'week' => ':count vig',\n    'w' => ':count vig',\n    'a_week' => ':count vig',\n\n    'day' => ':count del',\n    'd' => ':count del',\n    'a_day' => ':count del',\n\n    'hour' => ':count düp',\n    'h' => ':count düp',\n    'a_hour' => ':count düp',\n\n    'minute' => ':count minut',\n    'min' => ':count minut',\n    'a_minute' => ':count minut',\n\n    'second' => ':count sekun',\n    's' => ':count sekun',\n    'a_second' => ':count sekun',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/vun.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['utuko', 'kyiukonyi'],\n    'weekdays' => ['Jumapilyi', 'Jumatatuu', 'Jumanne', 'Jumatanu', 'Alhamisi', 'Ijumaa', 'Jumamosi'],\n    'weekdays_short' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'weekdays_min' => ['Jpi', 'Jtt', 'Jnn', 'Jtn', 'Alh', 'Iju', 'Jmo'],\n    'months' => ['Januari', 'Februari', 'Machi', 'Aprilyi', 'Mei', 'Junyi', 'Julyai', 'Agusti', 'Septemba', 'Oktoba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mac', 'Apr', 'Mei', 'Jun', 'Jul', 'Ago', 'Sep', 'Okt', 'Nov', 'Des'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wa.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/wa_BE.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wa_BE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Djan SACRE Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['di djanvî', 'di fevrî', 'di måss', 'd’ avri', 'di may', 'di djun', 'di djulete', 'd’ awousse', 'di setimbe', 'd’ octôbe', 'di nôvimbe', 'di decimbe'],\n    'months_short' => ['dja', 'fev', 'mås', 'avr', 'may', 'djn', 'djl', 'awo', 'set', 'oct', 'nôv', 'dec'],\n    'weekdays' => ['dimegne', 'londi', 'mårdi', 'mierkidi', 'djudi', 'vénrdi', 'semdi'],\n    'weekdays_short' => ['dim', 'lon', 'mår', 'mie', 'dju', 'vén', 'sem'],\n    'weekdays_min' => ['dim', 'lon', 'mår', 'mie', 'dju', 'vén', 'sem'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'year' => ':count anêye',\n    'y' => ':count anêye',\n    'a_year' => ':count anêye',\n\n    'month' => ':count meûs',\n    'm' => ':count meûs',\n    'a_month' => ':count meûs',\n\n    'week' => ':count samwinne',\n    'w' => ':count samwinne',\n    'a_week' => ':count samwinne',\n\n    'day' => ':count djoû',\n    'd' => ':count djoû',\n    'a_day' => ':count djoû',\n\n    'hour' => ':count eure',\n    'h' => ':count eure',\n    'a_hour' => ':count eure',\n\n    'minute' => ':count munute',\n    'min' => ':count munute',\n    'a_minute' => ':count munute',\n\n    'second' => ':count Sigonde',\n    's' => ':count Sigonde',\n    'a_second' => ':count Sigonde',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wae.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/wae_CH.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wae_CH.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Walser Translation Team ml@translate-wae.ch\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n    'months' => ['Jenner', 'Hornig', 'Märze', 'Abrille', 'Meije', 'Bráčet', 'Heiwet', 'Öigšte', 'Herbštmánet', 'Wímánet', 'Wintermánet', 'Chrištmánet'],\n    'months_short' => ['Jen', 'Hor', 'Mär', 'Abr', 'Mei', 'Brá', 'Hei', 'Öig', 'Her', 'Wím', 'Win', 'Chr'],\n    'weekdays' => ['Suntag', 'Mäntag', 'Zischtag', 'Mittwuch', 'Frontag', 'Fritag', 'Samschtag'],\n    'weekdays_short' => ['Sun', 'Män', 'Zis', 'Mit', 'Fro', 'Fri', 'Sam'],\n    'weekdays_min' => ['Sun', 'Män', 'Zis', 'Mit', 'Fro', 'Fri', 'Sam'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n\n    'month' => ':count Maano', // less reliable\n    'm' => ':count Maano', // less reliable\n    'a_month' => ':count Maano', // less reliable\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wal.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/wal_ET.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wal_ET.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Ge'ez Frontier Foundation    locales@geez.org\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['ጃንዩወሪ', 'ፌብሩወሪ', 'ማርች', 'ኤፕረል', 'ሜይ', 'ጁን', 'ጁላይ', 'ኦገስት', 'ሴፕቴምበር', 'ኦክተውበር', 'ኖቬምበር', 'ዲሴምበር'],\n    'months_short' => ['ጃንዩ', 'ፌብሩ', 'ማርች', 'ኤፕረ', 'ሜይ ', 'ጁን ', 'ጁላይ', 'ኦገስ', 'ሴፕቴ', 'ኦክተ', 'ኖቬም', 'ዲሴም'],\n    'weekdays' => ['ወጋ', 'ሳይኖ', 'ማቆሳኛ', 'አሩዋ', 'ሃሙሳ', 'አርባ', 'ቄራ'],\n    'weekdays_short' => ['ወጋ ', 'ሳይኖ', 'ማቆሳ', 'አሩዋ', 'ሃሙሳ', 'አርባ', 'ቄራ '],\n    'weekdays_min' => ['ወጋ ', 'ሳይኖ', 'ማቆሳ', 'አሩዋ', 'ሃሙሳ', 'አርባ', 'ቄራ '],\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['ማለዶ', 'ቃማ'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/wo_SN.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/wo_SN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - The Debian Project Christian Perrier bubulle@debian.org\n */\nreturn [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD.MM.YYYY',\n        'LL' => 'MMMM DD, YYYY',\n        'LLL' => 'DD MMM HH:mm',\n        'LLLL' => 'MMMM DD, YYYY HH:mm',\n    ],\n    'months' => ['sanwiy\\'e', 'feebriy\\'e', 'mars', 'awril', 'me', 'suwen', 'sulet', 'uut', 'septaambar', 'oktoobar', 'nowaambar', 'desaambar'],\n    'months_short' => ['san', 'fee', 'mar', 'awr', 'me ', 'suw', 'sul', 'uut', 'sep', 'okt', 'now', 'des'],\n    'weekdays' => ['dib\\'eer', 'altine', 'talaata', 'allarba', 'alxames', 'ajjuma', 'gaawu'],\n    'weekdays_short' => ['dib', 'alt', 'tal', 'all', 'alx', 'ajj', 'gaa'],\n    'weekdays_min' => ['dib', 'alt', 'tal', 'all', 'alx', 'ajj', 'gaa'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'year' => ':count at',\n    'month' => ':count wèr',\n    'week' => ':count ayubés',\n    'day' => ':count bés',\n    'hour' => ':count waxtu',\n    'minute' => ':count simili',\n    'second' => ':count saa',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/xh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/xh_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/xh_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['eyoMqungu', 'eyoMdumba', 'eyoKwindla', 'uTshazimpuzi', 'uCanzibe', 'eyeSilimela', 'eyeKhala', 'eyeThupa', 'eyoMsintsi', 'eyeDwarha', 'eyeNkanga', 'eyoMnga'],\n    'months_short' => ['Mqu', 'Mdu', 'Kwi', 'Tsh', 'Can', 'Sil', 'Kha', 'Thu', 'Msi', 'Dwa', 'Nka', 'Mng'],\n    'weekdays' => ['iCawa', 'uMvulo', 'lwesiBini', 'lwesiThathu', 'ulweSine', 'lwesiHlanu', 'uMgqibelo'],\n    'weekdays_short' => ['Caw', 'Mvu', 'Bin', 'Tha', 'Sin', 'Hla', 'Mgq'],\n    'weekdays_min' => ['Caw', 'Mvu', 'Bin', 'Tha', 'Sin', 'Hla', 'Mgq'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count ihlobo', // less reliable\n    'y' => ':count ihlobo', // less reliable\n    'a_year' => ':count ihlobo', // less reliable\n\n    'hour' => ':count iwotshi', // less reliable\n    'h' => ':count iwotshi', // less reliable\n    'a_hour' => ':count iwotshi', // less reliable\n\n    'minute' => ':count ingqalelo', // less reliable\n    'min' => ':count ingqalelo', // less reliable\n    'a_minute' => ':count ingqalelo', // less reliable\n\n    'second' => ':count nceda', // less reliable\n    's' => ':count nceda', // less reliable\n    'a_second' => ':count nceda', // less reliable\n\n    'month' => ':count inyanga',\n    'm' => ':count inyanga',\n    'a_month' => ':count inyanga',\n\n    'week' => ':count veki',\n    'w' => ':count veki',\n    'a_week' => ':count veki',\n\n    'day' => ':count imini',\n    'd' => ':count imini',\n    'a_day' => ':count imini',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/xog.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['Munkyo', 'Eigulo'],\n    'weekdays' => ['Sabiiti', 'Balaza', 'Owokubili', 'Owokusatu', 'Olokuna', 'Olokutaanu', 'Olomukaaga'],\n    'weekdays_short' => ['Sabi', 'Bala', 'Kubi', 'Kusa', 'Kuna', 'Kuta', 'Muka'],\n    'weekdays_min' => ['Sabi', 'Bala', 'Kubi', 'Kusa', 'Kuna', 'Kuta', 'Muka'],\n    'months' => ['Janwaliyo', 'Febwaliyo', 'Marisi', 'Apuli', 'Maayi', 'Juuni', 'Julaayi', 'Agusito', 'Sebuttemba', 'Okitobba', 'Novemba', 'Desemba'],\n    'months_short' => ['Jan', 'Feb', 'Mar', 'Apu', 'Maa', 'Juu', 'Jul', 'Agu', 'Seb', 'Oki', 'Nov', 'Des'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yav.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'meridiem' => ['kiɛmɛ́ɛm', 'kisɛ́ndɛ'],\n    'weekdays' => ['sɔ́ndiɛ', 'móndie', 'muányáŋmóndie', 'metúkpíápɛ', 'kúpélimetúkpiapɛ', 'feléte', 'séselé'],\n    'weekdays_short' => ['sd', 'md', 'mw', 'et', 'kl', 'fl', 'ss'],\n    'weekdays_min' => ['sd', 'md', 'mw', 'et', 'kl', 'fl', 'ss'],\n    'months' => ['pikítíkítie, oólí ú kutúan', 'siɛyɛ́, oóli ú kándíɛ', 'ɔnsúmbɔl, oóli ú kátátúɛ', 'mesiŋ, oóli ú kénie', 'ensil, oóli ú kátánuɛ', 'ɔsɔn', 'efute', 'pisuyú', 'imɛŋ i puɔs', 'imɛŋ i putúk,oóli ú kátíɛ', 'makandikɛ', 'pilɔndɔ́'],\n    'months_short' => ['o.1', 'o.2', 'o.3', 'o.4', 'o.5', 'o.6', 'o.7', 'o.8', 'o.9', 'o.10', 'o.11', 'o.12'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'D/M/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yi.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/yi_US.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yi_US.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - http://www.uyip.org/ Pablo Saratxaga pablo@mandrakesoft.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['יאַנואַר', 'פֿעברואַר', 'מערץ', 'אַפּריל', 'מיי', 'יוני', 'יולי', 'אויגוסט', 'סעפּטעמבער', 'אקטאבער', 'נאוועמבער', 'דעצעמבער'],\n    'months_short' => ['יאַנ', 'פֿעב', 'מאַר', 'אַפּר', 'מײַ ', 'יונ', 'יול', 'אױג', 'סעפּ', 'אָקט', 'נאָװ', 'דעצ'],\n    'weekdays' => ['זונטיק', 'מאָנטיק', 'דינסטיק', 'מיטװאָך', 'דאָנערשטיק', 'פֿרײַטיק', 'שבת'],\n    'weekdays_short' => ['זונ\\'', 'מאָנ\\'', 'דינ\\'', 'מיט\\'', 'דאָנ\\'', 'פֿרײַ\\'', 'שבת'],\n    'weekdays_min' => ['זונ\\'', 'מאָנ\\'', 'דינ\\'', 'מיט\\'', 'דאָנ\\'', 'פֿרײַ\\'', 'שבת'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => ':count יאר',\n    'y' => ':count יאר',\n    'a_year' => ':count יאר',\n\n    'month' => ':count חודש',\n    'm' => ':count חודש',\n    'a_month' => ':count חודש',\n\n    'week' => ':count וואָך',\n    'w' => ':count וואָך',\n    'a_week' => ':count וואָך',\n\n    'day' => ':count טאָג',\n    'd' => ':count טאָג',\n    'a_day' => ':count טאָג',\n\n    'hour' => ':count שעה',\n    'h' => ':count שעה',\n    'a_hour' => ':count שעה',\n\n    'minute' => ':count מינוט',\n    'min' => ':count מינוט',\n    'a_minute' => ':count מינוט',\n\n    'second' => ':count סעקונדע',\n    's' => ':count סעקונדע',\n    'a_second' => ':count סעקונדע',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yo.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - François B\n * - Atolagbe Abisoye\n */\nreturn [\n    'year' => 'ọdún :count',\n    'a_year' => '{1}ọdún kan|ọdún :count',\n    'month' => 'osù :count',\n    'a_month' => '{1}osù kan|osù :count',\n    'week' => 'ọsẹ :count',\n    'a_week' => '{1}ọsẹ kan|ọsẹ :count',\n    'day' => 'ọjọ́ :count',\n    'a_day' => '{1}ọjọ́ kan|ọjọ́ :count',\n    'hour' => 'wákati :count',\n    'a_hour' => '{1}wákati kan|wákati :count',\n    'minute' => 'ìsẹjú :count',\n    'a_minute' => '{1}ìsẹjú kan|ìsẹjú :count',\n    'second' => 'iaayá :count',\n    'a_second' => '{1}ìsẹjú aayá die|aayá :count',\n    'ago' => ':time kọjá',\n    'from_now' => 'ní :time',\n    'diff_yesterday' => 'Àna',\n    'diff_yesterday_regexp' => 'Àna(?:\\\\s+ni)?',\n    'diff_today' => 'Ònì',\n    'diff_today_regexp' => 'Ònì(?:\\\\s+ni)?',\n    'diff_tomorrow' => 'Ọ̀la',\n    'diff_tomorrow_regexp' => 'Ọ̀la(?:\\\\s+ni)?',\n    'formats' => [\n        'LT' => 'h:mm A',\n        'LTS' => 'h:mm:ss A',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY h:mm A',\n        'LLLL' => 'dddd, D MMMM YYYY h:mm A',\n    ],\n    'calendar' => [\n        'sameDay' => '[Ònì ni] LT',\n        'nextDay' => '[Ọ̀la ni] LT',\n        'nextWeek' => 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n        'lastDay' => '[Àna ni] LT',\n        'lastWeek' => 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => 'ọjọ́ :number',\n    'months' => ['Sẹ́rẹ́', 'Èrèlè', 'Ẹrẹ̀nà', 'Ìgbé', 'Èbibi', 'Òkùdu', 'Agẹmo', 'Ògún', 'Owewe', 'Ọ̀wàrà', 'Bélú', 'Ọ̀pẹ̀̀'],\n    'months_short' => ['Sẹ́r', 'Èrl', 'Ẹrn', 'Ìgb', 'Èbi', 'Òkù', 'Agẹ', 'Ògú', 'Owe', 'Ọ̀wà', 'Bél', 'Ọ̀pẹ̀̀'],\n    'weekdays' => ['Àìkú', 'Ajé', 'Ìsẹ́gun', 'Ọjọ́rú', 'Ọjọ́bọ', 'Ẹtì', 'Àbámẹ́ta'],\n    'weekdays_short' => ['Àìk', 'Ajé', 'Ìsẹ́', 'Ọjr', 'Ọjb', 'Ẹtì', 'Àbá'],\n    'weekdays_min' => ['Àì', 'Aj', 'Ìs', 'Ọr', 'Ọb', 'Ẹt', 'Àb'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'meridiem' => ['Àárọ̀', 'Ọ̀sán'],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yo_BJ.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn array_replace_recursive(require __DIR__.'/yo.php', [\n    'meridiem' => ['Àárɔ̀', 'Ɔ̀sán'],\n    'weekdays' => ['Ɔjɔ́ Àìkú', 'Ɔjɔ́ Ajé', 'Ɔjɔ́ Ìsɛ́gun', 'Ɔjɔ́rú', 'Ɔjɔ́bɔ', 'Ɔjɔ́ Ɛtì', 'Ɔjɔ́ Àbámɛ́ta'],\n    'weekdays_short' => ['Àìkú', 'Ajé', 'Ìsɛ́gun', 'Ɔjɔ́rú', 'Ɔjɔ́bɔ', 'Ɛtì', 'Àbámɛ́ta'],\n    'weekdays_min' => ['Àìkú', 'Ajé', 'Ìsɛ́gun', 'Ɔjɔ́rú', 'Ɔjɔ́bɔ', 'Ɛtì', 'Àbámɛ́ta'],\n    'months' => ['Oshù Shɛ́rɛ́', 'Oshù Èrèlè', 'Oshù Ɛrɛ̀nà', 'Oshù Ìgbé', 'Oshù Ɛ̀bibi', 'Oshù Òkúdu', 'Oshù Agɛmɔ', 'Oshù Ògún', 'Oshù Owewe', 'Oshù Ɔ̀wàrà', 'Oshù Bélú', 'Oshù Ɔ̀pɛ̀'],\n    'months_short' => ['Shɛ́rɛ́', 'Èrèlè', 'Ɛrɛ̀nà', 'Ìgbé', 'Ɛ̀bibi', 'Òkúdu', 'Agɛmɔ', 'Ògún', 'Owewe', 'Ɔ̀wàrà', 'Bélú', 'Ɔ̀pɛ̀'],\n    'first_day_of_week' => 1,\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd, D MMMM YYYY HH:mm',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yo_NG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/yo.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yue.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/yue_HK.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yue_HK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/zh_HK.php', [\n    'formats' => [\n        'L' => 'YYYY年MM月DD日 dddd',\n    ],\n    'months' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n    'months_short' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n    'weekdays' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    'weekdays_short' => ['日', '一', '二', '三', '四', '五', '六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'first_day_of_week' => 0,\n    'day_of_first_week_of_year' => 1,\n    'meridiem' => ['上午', '下午'],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yue_Hans.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hans.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yue_Hant.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hant.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yuw.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/yuw_PG.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/yuw_PG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Information from native speakers Hannah Sarvasy nungon.localization@gmail.com\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YY',\n    ],\n    'months' => ['jenuari', 'febuari', 'mas', 'epril', 'mei', 'jun', 'julai', 'ögus', 'septemba', 'öktoba', 'nöwemba', 'diksemba'],\n    'months_short' => ['jen', 'feb', 'mas', 'epr', 'mei', 'jun', 'jul', 'ögu', 'sep', 'ökt', 'nöw', 'dis'],\n    'weekdays' => ['sönda', 'mönda', 'sinda', 'mitiwö', 'sogipbono', 'nenggo', 'söndanggie'],\n    'weekdays_short' => ['sön', 'mön', 'sin', 'mit', 'soi', 'nen', 'sab'],\n    'weekdays_min' => ['sön', 'mön', 'sin', 'mit', 'soi', 'nen', 'sab'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zgh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - BAKTETE Miloud\n */\nreturn [\n    'year' => ':count ⵓⵙⴳⴳⵯⴰⵙ|:count ⵉⵙⴳⴳⵓⵙⴰ',\n    'a_year' => 'ⵓⵙⴳⴳⵯⴰⵙ|:count ⵉⵙⴳⴳⵓⵙⴰ',\n    'y' => ':count ⵓⵙⴳⴳⵯⴰⵙ|:count ⵉⵙⴳⴳⵓⵙⴰ',\n    'month' => ':count ⵡⴰⵢⵢⵓⵔ|:count ⴰⵢⵢⵓⵔⵏ',\n    'a_month' => 'ⵉⴷⵊ ⵡⴰⵢⵢⵓⵔ|:count ⴰⵢⵢⵓⵔⵏ',\n    'm' => ':count ⴰⵢⵢⵓⵔⵏ',\n    'week' => ':count ⵉⵎⴰⵍⴰⵙⵙ|:count ⵉⵎⴰⵍⴰⵙⵙⵏ',\n    'a_week' => 'ⵉⵛⵜ ⵉⵎⴰⵍⴰⵙⵙ|:count ⵉⵎⴰⵍⴰⵙⵙⵏ',\n    'w' => ':count ⵉⵎⴰⵍⴰⵙⵙ.',\n    'day' => ':count ⵡⴰⵙⵙ|:count ⵓⵙⵙⴰⵏ',\n    'a_day' => 'ⵉⴷⵊ ⵡⴰⵙⵙ|:count ⵓⵙⵙⴰⵏ',\n    'd' => ':count ⵓ',\n    'hour' => ':count ⵜⵙⵔⴰⴳⵜ|:count ⵜⵉⵙⵔⴰⴳⵉⵏ',\n    'a_hour' => 'ⵉⵛⵜ ⵜⵙⵔⴰⴳⵜ|:count ⵜⵉⵙⵔⴰⴳⵉⵏ',\n    'h' => ':count ⵜ',\n    'minute' => ':count ⵜⵓⵙⴷⵉⴷⵜ|:count ⵜⵓⵙⴷⵉⴷⵉⵏ',\n    'a_minute' => 'ⵉⵛⵜ ⵜⵓⵙⴷⵉⴷⵜ|:count ⵜⵓⵙⴷⵉⴷⵉⵏ',\n    'min' => ':count ⵜⵓⵙ',\n    'second' => ':count ⵜⵙⵉⵏⵜ|:count ⵜⵉⵙⵉⵏⴰ',\n    'a_second' => 'ⴽⵔⴰ ⵜⵉⵙⵉⵏⴰ|:count ⵜⵉⵙⵉⵏⴰ',\n    's' => ':count ⵜ',\n    'ago' => 'ⵣⴳ :time',\n    'from_now' => 'ⴷⴳ :time',\n    'after' => ':time ⴰⵡⴰⵔ',\n    'before' => ':time ⴷⴰⵜ',\n    'diff_now' => 'ⴰⴷⵡⴰⵍⵉ',\n    'diff_today' => 'ⴰⵙⵙ',\n    'diff_today_regexp' => 'ⴰⵙⵙ(?:\\\\s+ⴰ/ⴰⴷ)?(?:\\\\s+ⴳ)?',\n    'diff_yesterday' => 'ⴰⵙⵙⵏⵏⴰⵟ',\n    'diff_yesterday_regexp' => 'ⴰⵙⵙⵏⵏⴰⵟ(?:\\\\s+ⴳ)?',\n    'diff_tomorrow' => 'ⴰⵙⴽⴽⴰ',\n    'diff_tomorrow_regexp' => 'ⴰⵙⴽⴽⴰ(?:\\\\s+ⴳ)?',\n    'diff_before_yesterday' => 'ⴼⵔ ⵉⴹⵏⵏⴰⵟ',\n    'diff_after_tomorrow' => 'ⵏⴰⴼ ⵓⵙⴽⴽⴰ',\n    'period_recurrences' => ':count ⵜⵉⴽⴽⴰⵍ',\n    'period_interval' => 'ⴽⵓ :interval',\n    'period_start_date' => 'ⴳ :date',\n    'period_end_date' => 'ⵉ :date',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'DD/MM/YYYY',\n        'LL' => 'D MMMM YYYY',\n        'LLL' => 'D MMMM YYYY HH:mm',\n        'LLLL' => 'dddd D MMMM YYYY HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[ⴰⵙⵙ ⴰ/ⴰⴷ ⴳ] LT',\n        'nextDay' => '[ⴰⵙⴽⴽⴰ ⴳ] LT',\n        'nextWeek' => 'dddd [ⴳ] LT',\n        'lastDay' => '[ⴰⵙⵙⵏⵏⴰⵟ ⴳ] LT',\n        'lastWeek' => 'dddd [ⴰⵎⴳⴳⴰⵔⵓ ⴳ] LT',\n        'sameElse' => 'L',\n    ],\n    'meridiem' => ['ⵜⵉⴼⴰⵡⵜ', 'ⵜⴰⴷⴳⴳⵯⴰⵜ'],\n    'months' => ['ⵉⵏⵏⴰⵢⵔ', 'ⴱⵕⴰⵢⵕ', 'ⵎⴰⵕⵚ', 'ⵉⴱⵔⵉⵔ', 'ⵎⴰⵢⵢⵓ', 'ⵢⵓⵏⵢⵓ', 'ⵢⵓⵍⵢⵓⵣ', 'ⵖⵓⵛⵜ', 'ⵛⵓⵜⴰⵏⴱⵉⵔ', 'ⴽⵟⵓⴱⵕ', 'ⵏⵓⵡⴰⵏⴱⵉⵔ', 'ⴷⵓⵊⴰⵏⴱⵉⵔ'],\n    'months_short' => ['ⵉⵏⵏ', 'ⴱⵕⴰ', 'ⵎⴰⵕ', 'ⵉⴱⵔ', 'ⵎⴰⵢ', 'ⵢⵓⵏ', 'ⵢⵓⵍ', 'ⵖⵓⵛ', 'ⵛⵓⵜ', 'ⴽⵟⵓ', 'ⵏⵓⵡ', 'ⴷⵓⵊ'],\n    'weekdays' => ['ⵓⵙⴰⵎⴰⵙ', 'ⵡⴰⵢⵏⴰⵙ', 'ⵓⵙⵉⵏⴰⵙ', 'ⵡⴰⴽⵕⴰⵙ', 'ⵓⴽⵡⴰⵙ', 'ⵓⵙⵉⵎⵡⴰⵙ', 'ⵓⵙⵉⴹⵢⴰⵙ'],\n    'weekdays_short' => ['ⵓⵙⴰ', 'ⵡⴰⵢ', 'ⵓⵙⵉ', 'ⵡⴰⴽ', 'ⵓⴽⵡ', 'ⵓⵙⵉⵎ', 'ⵓⵙⵉⴹ'],\n    'weekdays_min' => ['ⵓⵙⴰ', 'ⵡⴰⵢ', 'ⵓⵙⵉ', 'ⵡⴰⴽ', 'ⵓⴽⵡ', 'ⵓⵙⵉⵎ', 'ⵓⵙⵉⴹ'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 1,\n    'list' => [', ', ' ⴷ '],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - xuri\n * - sycuato\n * - bokideckonja\n * - Luo Ning\n * - William Yang (williamyang233)\n */\nreturn array_merge(require __DIR__.'/zh_Hans.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY/MM/DD',\n        'LL' => 'YYYY年M月D日',\n        'LLL' => 'YYYY年M月D日 A h点mm分',\n        'LLLL' => 'YYYY年M月D日dddd A h点mm分',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_CN.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - monkeycon\n * - François B\n * - Jason Katz-Brown\n * - Serhan Apaydın\n * - Matt Johnson\n * - JD Isaacks\n * - Zeno Zeng\n * - Chris Hemp\n * - shankesgk2\n */\nreturn array_merge(require __DIR__.'/zh.php', [\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY/MM/DD',\n        'LL' => 'YYYY年M月D日',\n        'LLL' => 'YYYY年M月D日Ah点mm分',\n        'LLLL' => 'YYYY年M月D日ddddAh点mm分',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_HK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hant_HK.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - monkeycon\n * - François B\n * - Jason Katz-Brown\n * - Konstantin Konev\n * - Chris Lam\n * - Serhan Apaydın\n * - Gary Lo\n * - JD Isaacks\n * - Chris Hemp\n * - shankesgk2\n * - Daniel Cheung (danvim)\n */\nreturn [\n    'year' => ':count:optional-space年',\n    'y' => ':count:optional-space年',\n    'month' => ':count:optional-space个月',\n    'm' => ':count:optional-space个月',\n    'week' => ':count:optional-space周',\n    'w' => ':count:optional-space周',\n    'day' => ':count:optional-space天',\n    'd' => ':count:optional-space天',\n    'hour' => ':count:optional-space小时',\n    'h' => ':count:optional-space小时',\n    'minute' => ':count:optional-space分钟',\n    'min' => ':count:optional-space分钟',\n    'second' => ':count:optional-space秒',\n    'a_second' => '{1}几秒|]1,Inf[:count:optional-space秒',\n    's' => ':count:optional-space秒',\n    'ago' => ':time前',\n    'from_now' => ':time后',\n    'after' => ':time后',\n    'before' => ':time前',\n    'diff_now' => '现在',\n    'diff_today' => '今天',\n    'diff_yesterday' => '昨天',\n    'diff_tomorrow' => '明天',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY/MM/DD',\n        'LL' => 'YYYY年M月D日',\n        'LLL' => 'YYYY年M月D日 HH:mm',\n        'LLLL' => 'YYYY年M月D日dddd HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[今天]LT',\n        'nextDay' => '[明天]LT',\n        'nextWeek' => '[下]ddddLT',\n        'lastDay' => '[昨天]LT',\n        'lastWeek' => '[上]ddddLT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return $number.'日';\n            case 'M':\n                return $number.'月';\n            case 'w':\n            case 'W':\n                return $number.'周';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour, $minute) {\n        $time = $hour * 100 + $minute;\n        if ($time < 600) {\n            return '凌晨';\n        }\n        if ($time < 900) {\n            return '早上';\n        }\n        if ($time < 1130) {\n            return '上午';\n        }\n        if ($time < 1230) {\n            return '中午';\n        }\n        if ($time < 1800) {\n            return '下午';\n        }\n\n        return '晚上';\n    },\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n    'weekdays' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    'weekdays_short' => ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => '',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_HK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hans.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_MO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hans.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hans_SG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hans.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Adam\n * - monkeycon\n * - François B\n * - Jason Katz-Brown\n * - Chris Lam\n * - Serhan Apaydın\n * - Gary Lo\n * - JD Isaacks\n * - Chris Hemp\n * - Eddie\n * - KID\n * - shankesgk2\n * - Daniel Cheung (danvim)\n */\nreturn [\n    'year' => ':count:optional-space年',\n    'y' => ':count:optional-space年',\n    'month' => ':count:optional-space個月',\n    'm' => ':count:optional-space月',\n    'week' => ':count:optional-space週',\n    'w' => ':count:optional-space週',\n    'day' => ':count:optional-space天',\n    'd' => ':count:optional-space天',\n    'hour' => ':count:optional-space小時',\n    'h' => ':count:optional-space小時',\n    'minute' => ':count:optional-space分鐘',\n    'min' => ':count:optional-space分鐘',\n    'second' => ':count:optional-space秒',\n    'a_second' => '{1}幾秒|]1,Inf[:count:optional-space秒',\n    's' => ':count:optional-space秒',\n    'ago' => ':time前',\n    'from_now' => ':time後',\n    'after' => ':time後',\n    'before' => ':time前',\n    'diff_now' => '現在',\n    'diff_today' => '今天',\n    'diff_yesterday' => '昨天',\n    'diff_tomorrow' => '明天',\n    'formats' => [\n        'LT' => 'HH:mm',\n        'LTS' => 'HH:mm:ss',\n        'L' => 'YYYY/MM/DD',\n        'LL' => 'YYYY年M月D日',\n        'LLL' => 'YYYY年M月D日 HH:mm',\n        'LLLL' => 'YYYY年M月D日dddd HH:mm',\n    ],\n    'calendar' => [\n        'sameDay' => '[今天] LT',\n        'nextDay' => '[明天] LT',\n        'nextWeek' => '[下]dddd LT',\n        'lastDay' => '[昨天] LT',\n        'lastWeek' => '[上]dddd LT',\n        'sameElse' => 'L',\n    ],\n    'ordinal' => function ($number, $period) {\n        switch ($period) {\n            case 'd':\n            case 'D':\n            case 'DDD':\n                return $number.'日';\n            case 'M':\n                return $number.'月';\n            case 'w':\n            case 'W':\n                return $number.'周';\n            default:\n                return $number;\n        }\n    },\n    'meridiem' => function ($hour, $minute) {\n        $time = $hour * 100 + $minute;\n        if ($time < 600) {\n            return '凌晨';\n        }\n        if ($time < 900) {\n            return '早上';\n        }\n        if ($time < 1130) {\n            return '上午';\n        }\n        if ($time < 1230) {\n            return '中午';\n        }\n        if ($time < 1800) {\n            return '下午';\n        }\n\n        return '晚上';\n    },\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n    'weekdays' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    'weekdays_short' => ['週日', '週一', '週二', '週三', '週四', '週五', '週六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'first_day_of_week' => 1,\n    'day_of_first_week_of_year' => 4,\n    'list' => '',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_HK.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hant.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_MO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hant.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_Hant_TW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hant.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_MO.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - tarunvelli\n * - Eddie\n * - KID\n * - shankesgk2\n */\nreturn array_replace_recursive(require __DIR__.'/zh_Hant.php', [\n    'after' => ':time后',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_SG.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/zh.php', [\n    'formats' => [\n        'L' => 'YYYY年MM月DD日',\n    ],\n    'months' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'months_short' => ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n    'weekdays' => ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n    'weekdays_short' => ['日', '一', '二', '三', '四', '五', '六'],\n    'weekdays_min' => ['日', '一', '二', '三', '四', '五', '六'],\n    'day_of_first_week_of_year' => 1,\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_TW.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn require __DIR__.'/zh_Hant_TW.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zh_YUE.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - IBM Globalization Center of Competency, Yamato Software Laboratory    bug-glibc-locales@gnu.org\n */\nreturn array_replace_recursive(require __DIR__.'/zh.php', [\n    'formats' => [\n        'L' => 'YYYY-MM-DD',\n    ],\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zu.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Unknown default region, use the first alphabetically.\n */\nreturn require __DIR__.'/zu_ZA.php';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Lang/zu_ZA.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * Authors:\n * - Zuza Software Foundation (Translate.org.za) Dwayne Bailey dwayne@translate.org.za\n */\nreturn array_replace_recursive(require __DIR__.'/en.php', [\n    'formats' => [\n        'L' => 'DD/MM/YYYY',\n    ],\n    'months' => ['Januwari', 'Februwari', 'Mashi', 'Ephreli', 'Meyi', 'Juni', 'Julayi', 'Agasti', 'Septhemba', 'Okthoba', 'Novemba', 'Disemba'],\n    'months_short' => ['Jan', 'Feb', 'Mas', 'Eph', 'Mey', 'Jun', 'Jul', 'Aga', 'Sep', 'Okt', 'Nov', 'Dis'],\n    'weekdays' => ['iSonto', 'uMsombuluko', 'uLwesibili', 'uLwesithathu', 'uLwesine', 'uLwesihlanu', 'uMgqibelo'],\n    'weekdays_short' => ['Son', 'Mso', 'Bil', 'Tha', 'Sin', 'Hla', 'Mgq'],\n    'weekdays_min' => ['Son', 'Mso', 'Bil', 'Tha', 'Sin', 'Hla', 'Mgq'],\n    'day_of_first_week_of_year' => 1,\n\n    'year' => 'kweminyaka engu-:count',\n    'y' => 'kweminyaka engu-:count',\n    'a_year' => 'kweminyaka engu-:count',\n\n    'month' => 'izinyanga ezingu-:count',\n    'm' => 'izinyanga ezingu-:count',\n    'a_month' => 'izinyanga ezingu-:count',\n\n    'week' => 'lwamasonto angu-:count',\n    'w' => 'lwamasonto angu-:count',\n    'a_week' => 'lwamasonto angu-:count',\n\n    'day' => 'ezingaba ngu-:count',\n    'd' => 'ezingaba ngu-:count',\n    'a_day' => 'ezingaba ngu-:count',\n\n    'hour' => 'amahora angu-:count',\n    'h' => 'amahora angu-:count',\n    'a_hour' => 'amahora angu-:count',\n\n    'minute' => 'ngemizuzu engu-:count',\n    'min' => 'ngemizuzu engu-:count',\n    'a_minute' => 'ngemizuzu engu-:count',\n\n    'second' => 'imizuzwana engu-:count',\n    's' => 'imizuzwana engu-:count',\n    'a_second' => 'imizuzwana engu-:count',\n]);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Language.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse JsonSerializable;\nuse ReturnTypeWillChange;\n\nclass Language implements JsonSerializable\n{\n    /**\n     * @var array\n     */\n    protected static $languagesNames;\n\n    /**\n     * @var array\n     */\n    protected static $regionsNames;\n\n    /**\n     * @var string\n     */\n    protected $id;\n\n    /**\n     * @var string\n     */\n    protected $code;\n\n    /**\n     * @var string|null\n     */\n    protected $variant;\n\n    /**\n     * @var string|null\n     */\n    protected $region;\n\n    /**\n     * @var array\n     */\n    protected $names;\n\n    /**\n     * @var string\n     */\n    protected $isoName;\n\n    /**\n     * @var string\n     */\n    protected $nativeName;\n\n    public function __construct(string $id)\n    {\n        $this->id = str_replace('-', '_', $id);\n        $parts = explode('_', $this->id);\n        $this->code = $parts[0];\n\n        if (isset($parts[1])) {\n            if (!preg_match('/^[A-Z]+$/', $parts[1])) {\n                $this->variant = $parts[1];\n                $parts[1] = $parts[2] ?? null;\n            }\n            if ($parts[1]) {\n                $this->region = $parts[1];\n            }\n        }\n    }\n\n    /**\n     * Get the list of the known languages.\n     *\n     * @return array\n     */\n    public static function all()\n    {\n        if (!static::$languagesNames) {\n            static::$languagesNames = require __DIR__.'/List/languages.php';\n        }\n\n        return static::$languagesNames;\n    }\n\n    /**\n     * Get the list of the known regions.\n     *\n     * @return array\n     */\n    public static function regions()\n    {\n        if (!static::$regionsNames) {\n            static::$regionsNames = require __DIR__.'/List/regions.php';\n        }\n\n        return static::$regionsNames;\n    }\n\n    /**\n     * Get both isoName and nativeName as an array.\n     *\n     * @return array\n     */\n    public function getNames(): array\n    {\n        if (!$this->names) {\n            $this->names = static::all()[$this->code] ?? [\n                'isoName' => $this->code,\n                'nativeName' => $this->code,\n            ];\n        }\n\n        return $this->names;\n    }\n\n    /**\n     * Returns the original locale ID.\n     *\n     * @return string\n     */\n    public function getId(): string\n    {\n        return $this->id;\n    }\n\n    /**\n     * Returns the code of the locale \"en\"/\"fr\".\n     *\n     * @return string\n     */\n    public function getCode(): string\n    {\n        return $this->code;\n    }\n\n    /**\n     * Returns the variant code such as cyrl/latn.\n     *\n     * @return string|null\n     */\n    public function getVariant(): ?string\n    {\n        return $this->variant;\n    }\n\n    /**\n     * Returns the variant such as Cyrillic/Latin.\n     *\n     * @return string|null\n     */\n    public function getVariantName(): ?string\n    {\n        if ($this->variant === 'Latn') {\n            return 'Latin';\n        }\n\n        if ($this->variant === 'Cyrl') {\n            return 'Cyrillic';\n        }\n\n        return $this->variant;\n    }\n\n    /**\n     * Returns the region part of the locale.\n     *\n     * @return string|null\n     */\n    public function getRegion(): ?string\n    {\n        return $this->region;\n    }\n\n    /**\n     * Returns the region name for the current language.\n     *\n     * @return string|null\n     */\n    public function getRegionName(): ?string\n    {\n        return $this->region ? (static::regions()[$this->region] ?? $this->region) : null;\n    }\n\n    /**\n     * Returns the long ISO language name.\n     *\n     * @return string\n     */\n    public function getFullIsoName(): string\n    {\n        if (!$this->isoName) {\n            $this->isoName = $this->getNames()['isoName'];\n        }\n\n        return $this->isoName;\n    }\n\n    /**\n     * Set the ISO language name.\n     *\n     * @param string $isoName\n     */\n    public function setIsoName(string $isoName): self\n    {\n        $this->isoName = $isoName;\n\n        return $this;\n    }\n\n    /**\n     * Return the full name of the language in this language.\n     *\n     * @return string\n     */\n    public function getFullNativeName(): string\n    {\n        if (!$this->nativeName) {\n            $this->nativeName = $this->getNames()['nativeName'];\n        }\n\n        return $this->nativeName;\n    }\n\n    /**\n     * Set the name of the language in this language.\n     *\n     * @param string $nativeName\n     */\n    public function setNativeName(string $nativeName): self\n    {\n        $this->nativeName = $nativeName;\n\n        return $this;\n    }\n\n    /**\n     * Returns the short ISO language name.\n     *\n     * @return string\n     */\n    public function getIsoName(): string\n    {\n        $name = $this->getFullIsoName();\n\n        return trim(strstr($name, ',', true) ?: $name);\n    }\n\n    /**\n     * Get the short name of the language in this language.\n     *\n     * @return string\n     */\n    public function getNativeName(): string\n    {\n        $name = $this->getFullNativeName();\n\n        return trim(strstr($name, ',', true) ?: $name);\n    }\n\n    /**\n     * Get a string with short ISO name, region in parentheses if applicable, variant in parentheses if applicable.\n     *\n     * @return string\n     */\n    public function getIsoDescription()\n    {\n        $region = $this->getRegionName();\n        $variant = $this->getVariantName();\n\n        return $this->getIsoName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : '');\n    }\n\n    /**\n     * Get a string with short native name, region in parentheses if applicable, variant in parentheses if applicable.\n     *\n     * @return string\n     */\n    public function getNativeDescription()\n    {\n        $region = $this->getRegionName();\n        $variant = $this->getVariantName();\n\n        return $this->getNativeName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : '');\n    }\n\n    /**\n     * Get a string with long ISO name, region in parentheses if applicable, variant in parentheses if applicable.\n     *\n     * @return string\n     */\n    public function getFullIsoDescription()\n    {\n        $region = $this->getRegionName();\n        $variant = $this->getVariantName();\n\n        return $this->getFullIsoName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : '');\n    }\n\n    /**\n     * Get a string with long native name, region in parentheses if applicable, variant in parentheses if applicable.\n     *\n     * @return string\n     */\n    public function getFullNativeDescription()\n    {\n        $region = $this->getRegionName();\n        $variant = $this->getVariantName();\n\n        return $this->getFullNativeName().($region ? ' ('.$region.')' : '').($variant ? ' ('.$variant.')' : '');\n    }\n\n    /**\n     * Returns the original locale ID.\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        return $this->getId();\n    }\n\n    /**\n     * Get a string with short ISO name, region in parentheses if applicable, variant in parentheses if applicable.\n     *\n     * @return string\n     */\n    #[ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return $this->getIsoDescription();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Laravel;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Carbon\\CarbonInterval;\nuse Carbon\\CarbonPeriod;\nuse Illuminate\\Contracts\\Events\\Dispatcher as DispatcherContract;\nuse Illuminate\\Events\\Dispatcher;\nuse Illuminate\\Events\\EventDispatcher;\nuse Illuminate\\Support\\Carbon as IlluminateCarbon;\nuse Illuminate\\Support\\Facades\\Date;\nuse Throwable;\n\nclass ServiceProvider extends \\Illuminate\\Support\\ServiceProvider\n{\n    /** @var callable|null */\n    protected $appGetter = null;\n\n    /** @var callable|null */\n    protected $localeGetter = null;\n\n    public function setAppGetter(?callable $appGetter): void\n    {\n        $this->appGetter = $appGetter;\n    }\n\n    public function setLocaleGetter(?callable $localeGetter): void\n    {\n        $this->localeGetter = $localeGetter;\n    }\n\n    public function boot()\n    {\n        $this->updateLocale();\n\n        if (!$this->app->bound('events')) {\n            return;\n        }\n\n        $service = $this;\n        $events = $this->app['events'];\n\n        if ($this->isEventDispatcher($events)) {\n            $events->listen(class_exists('Illuminate\\Foundation\\Events\\LocaleUpdated') ? 'Illuminate\\Foundation\\Events\\LocaleUpdated' : 'locale.changed', function () use ($service) {\n                $service->updateLocale();\n            });\n        }\n    }\n\n    public function updateLocale()\n    {\n        $locale = $this->getLocale();\n\n        if ($locale === null) {\n            return;\n        }\n\n        Carbon::setLocale($locale);\n        CarbonImmutable::setLocale($locale);\n        CarbonPeriod::setLocale($locale);\n        CarbonInterval::setLocale($locale);\n\n        if (class_exists(IlluminateCarbon::class)) {\n            IlluminateCarbon::setLocale($locale);\n        }\n\n        if (class_exists(Date::class)) {\n            try {\n                $root = Date::getFacadeRoot();\n                $root->setLocale($locale);\n            } catch (Throwable $e) {\n                // Non Carbon class in use in Date facade\n            }\n        }\n    }\n\n    public function register()\n    {\n        // Needed for Laravel < 5.3 compatibility\n    }\n\n    protected function getLocale()\n    {\n        if ($this->localeGetter) {\n            return ($this->localeGetter)();\n        }\n\n        $app = $this->getApp();\n        $app = $app && method_exists($app, 'getLocale')\n            ? $app\n            : $this->getGlobalApp('translator');\n\n        return $app ? $app->getLocale() : null;\n    }\n\n    protected function getApp()\n    {\n        if ($this->appGetter) {\n            return ($this->appGetter)();\n        }\n\n        return $this->app ?? $this->getGlobalApp();\n    }\n\n    protected function getGlobalApp(...$args)\n    {\n        return \\function_exists('app') ? \\app(...$args) : null;\n    }\n\n    protected function isEventDispatcher($instance)\n    {\n        return $instance instanceof EventDispatcher\n            || $instance instanceof Dispatcher\n            || $instance instanceof DispatcherContract;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/List/languages.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nreturn [\n    /*\n     * ISO 639-2\n     */\n    'ab' => [\n        'isoName' => 'Abkhazian',\n        'nativeName' => 'аҧсуа бызшәа, аҧсшәа',\n    ],\n    'aa' => [\n        'isoName' => 'Afar',\n        'nativeName' => 'Afaraf',\n    ],\n    'af' => [\n        'isoName' => 'Afrikaans',\n        'nativeName' => 'Afrikaans',\n    ],\n    'ak' => [\n        'isoName' => 'Akan',\n        'nativeName' => 'Akan',\n    ],\n    'sq' => [\n        'isoName' => 'Albanian',\n        'nativeName' => 'Shqip',\n    ],\n    'am' => [\n        'isoName' => 'Amharic',\n        'nativeName' => 'አማርኛ',\n    ],\n    'ar' => [\n        'isoName' => 'Arabic',\n        'nativeName' => 'العربية',\n    ],\n    'an' => [\n        'isoName' => 'Aragonese',\n        'nativeName' => 'aragonés',\n    ],\n    'hy' => [\n        'isoName' => 'Armenian',\n        'nativeName' => 'Հայերեն',\n    ],\n    'as' => [\n        'isoName' => 'Assamese',\n        'nativeName' => 'অসমীয়া',\n    ],\n    'av' => [\n        'isoName' => 'Avaric',\n        'nativeName' => 'авар мацӀ, магӀарул мацӀ',\n    ],\n    'ae' => [\n        'isoName' => 'Avestan',\n        'nativeName' => 'avesta',\n    ],\n    'ay' => [\n        'isoName' => 'Aymara',\n        'nativeName' => 'aymar aru',\n    ],\n    'az' => [\n        'isoName' => 'Azerbaijani',\n        'nativeName' => 'azərbaycan dili',\n    ],\n    'bm' => [\n        'isoName' => 'Bambara',\n        'nativeName' => 'bamanankan',\n    ],\n    'ba' => [\n        'isoName' => 'Bashkir',\n        'nativeName' => 'башҡорт теле',\n    ],\n    'eu' => [\n        'isoName' => 'Basque',\n        'nativeName' => 'euskara, euskera',\n    ],\n    'be' => [\n        'isoName' => 'Belarusian',\n        'nativeName' => 'беларуская мова',\n    ],\n    'bn' => [\n        'isoName' => 'Bengali',\n        'nativeName' => 'বাংলা',\n    ],\n    'bh' => [\n        'isoName' => 'Bihari languages',\n        'nativeName' => 'भोजपुरी',\n    ],\n    'bi' => [\n        'isoName' => 'Bislama',\n        'nativeName' => 'Bislama',\n    ],\n    'bs' => [\n        'isoName' => 'Bosnian',\n        'nativeName' => 'bosanski jezik',\n    ],\n    'br' => [\n        'isoName' => 'Breton',\n        'nativeName' => 'brezhoneg',\n    ],\n    'bg' => [\n        'isoName' => 'Bulgarian',\n        'nativeName' => 'български език',\n    ],\n    'my' => [\n        'isoName' => 'Burmese',\n        'nativeName' => 'ဗမာစာ',\n    ],\n    'ca' => [\n        'isoName' => 'Catalan, Valencian',\n        'nativeName' => 'català, valencià',\n    ],\n    'ch' => [\n        'isoName' => 'Chamorro',\n        'nativeName' => 'Chamoru',\n    ],\n    'ce' => [\n        'isoName' => 'Chechen',\n        'nativeName' => 'нохчийн мотт',\n    ],\n    'ny' => [\n        'isoName' => 'Chichewa, Chewa, Nyanja',\n        'nativeName' => 'chiCheŵa, chinyanja',\n    ],\n    'zh' => [\n        'isoName' => 'Chinese',\n        'nativeName' => '中文 (Zhōngwén), 汉语, 漢語',\n    ],\n    'cv' => [\n        'isoName' => 'Chuvash',\n        'nativeName' => 'чӑваш чӗлхи',\n    ],\n    'kw' => [\n        'isoName' => 'Cornish',\n        'nativeName' => 'Kernewek',\n    ],\n    'co' => [\n        'isoName' => 'Corsican',\n        'nativeName' => 'corsu, lingua corsa',\n    ],\n    'cr' => [\n        'isoName' => 'Cree',\n        'nativeName' => 'ᓀᐦᐃᔭᐍᐏᐣ',\n    ],\n    'hr' => [\n        'isoName' => 'Croatian',\n        'nativeName' => 'hrvatski jezik',\n    ],\n    'cs' => [\n        'isoName' => 'Czech',\n        'nativeName' => 'čeština, český jazyk',\n    ],\n    'da' => [\n        'isoName' => 'Danish',\n        'nativeName' => 'dansk',\n    ],\n    'dv' => [\n        'isoName' => 'Divehi, Dhivehi, Maldivian',\n        'nativeName' => 'ދިވެހި',\n    ],\n    'nl' => [\n        'isoName' => 'Dutch, Flemish',\n        'nativeName' => 'Nederlands, Vlaams',\n    ],\n    'dz' => [\n        'isoName' => 'Dzongkha',\n        'nativeName' => 'རྫོང་ཁ',\n    ],\n    'en' => [\n        'isoName' => 'English',\n        'nativeName' => 'English',\n    ],\n    'eo' => [\n        'isoName' => 'Esperanto',\n        'nativeName' => 'Esperanto',\n    ],\n    'et' => [\n        'isoName' => 'Estonian',\n        'nativeName' => 'eesti, eesti keel',\n    ],\n    'ee' => [\n        'isoName' => 'Ewe',\n        'nativeName' => 'Eʋegbe',\n    ],\n    'fo' => [\n        'isoName' => 'Faroese',\n        'nativeName' => 'føroyskt',\n    ],\n    'fj' => [\n        'isoName' => 'Fijian',\n        'nativeName' => 'vosa Vakaviti',\n    ],\n    'fi' => [\n        'isoName' => 'Finnish',\n        'nativeName' => 'suomi, suomen kieli',\n    ],\n    'fr' => [\n        'isoName' => 'French',\n        'nativeName' => 'français',\n    ],\n    'ff' => [\n        'isoName' => 'Fulah',\n        'nativeName' => 'Fulfulde, Pulaar, Pular',\n    ],\n    'gl' => [\n        'isoName' => 'Galician',\n        'nativeName' => 'Galego',\n    ],\n    'ka' => [\n        'isoName' => 'Georgian',\n        'nativeName' => 'ქართული',\n    ],\n    'de' => [\n        'isoName' => 'German',\n        'nativeName' => 'Deutsch',\n    ],\n    'el' => [\n        'isoName' => 'Greek (modern)',\n        'nativeName' => 'ελληνικά',\n    ],\n    'gn' => [\n        'isoName' => 'Guaraní',\n        'nativeName' => 'Avañe\\'ẽ',\n    ],\n    'gu' => [\n        'isoName' => 'Gujarati',\n        'nativeName' => 'ગુજરાતી',\n    ],\n    'ht' => [\n        'isoName' => 'Haitian, Haitian Creole',\n        'nativeName' => 'Kreyòl ayisyen',\n    ],\n    'ha' => [\n        'isoName' => 'Hausa',\n        'nativeName' => '(Hausa) هَوُسَ',\n    ],\n    'he' => [\n        'isoName' => 'Hebrew (modern)',\n        'nativeName' => 'עברית',\n    ],\n    'hz' => [\n        'isoName' => 'Herero',\n        'nativeName' => 'Otjiherero',\n    ],\n    'hi' => [\n        'isoName' => 'Hindi',\n        'nativeName' => 'हिन्दी, हिंदी',\n    ],\n    'ho' => [\n        'isoName' => 'Hiri Motu',\n        'nativeName' => 'Hiri Motu',\n    ],\n    'hu' => [\n        'isoName' => 'Hungarian',\n        'nativeName' => 'magyar',\n    ],\n    'ia' => [\n        'isoName' => 'Interlingua',\n        'nativeName' => 'Interlingua',\n    ],\n    'id' => [\n        'isoName' => 'Indonesian',\n        'nativeName' => 'Bahasa Indonesia',\n    ],\n    'ie' => [\n        'isoName' => 'Interlingue',\n        'nativeName' => 'Originally called Occidental; then Interlingue after WWII',\n    ],\n    'ga' => [\n        'isoName' => 'Irish',\n        'nativeName' => 'Gaeilge',\n    ],\n    'ig' => [\n        'isoName' => 'Igbo',\n        'nativeName' => 'Asụsụ Igbo',\n    ],\n    'ik' => [\n        'isoName' => 'Inupiaq',\n        'nativeName' => 'Iñupiaq, Iñupiatun',\n    ],\n    'io' => [\n        'isoName' => 'Ido',\n        'nativeName' => 'Ido',\n    ],\n    'is' => [\n        'isoName' => 'Icelandic',\n        'nativeName' => 'Íslenska',\n    ],\n    'it' => [\n        'isoName' => 'Italian',\n        'nativeName' => 'Italiano',\n    ],\n    'iu' => [\n        'isoName' => 'Inuktitut',\n        'nativeName' => 'ᐃᓄᒃᑎᑐᑦ',\n    ],\n    'ja' => [\n        'isoName' => 'Japanese',\n        'nativeName' => '日本語 (にほんご)',\n    ],\n    'jv' => [\n        'isoName' => 'Javanese',\n        'nativeName' => 'ꦧꦱꦗꦮ, Basa Jawa',\n    ],\n    'kl' => [\n        'isoName' => 'Kalaallisut, Greenlandic',\n        'nativeName' => 'kalaallisut, kalaallit oqaasii',\n    ],\n    'kn' => [\n        'isoName' => 'Kannada',\n        'nativeName' => 'ಕನ್ನಡ',\n    ],\n    'kr' => [\n        'isoName' => 'Kanuri',\n        'nativeName' => 'Kanuri',\n    ],\n    'ks' => [\n        'isoName' => 'Kashmiri',\n        'nativeName' => 'कश्मीरी, كشميري‎',\n    ],\n    'kk' => [\n        'isoName' => 'Kazakh',\n        'nativeName' => 'қазақ тілі',\n    ],\n    'km' => [\n        'isoName' => 'Central Khmer',\n        'nativeName' => 'ខ្មែរ, ខេមរភាសា, ភាសាខ្មែរ',\n    ],\n    'ki' => [\n        'isoName' => 'Kikuyu, Gikuyu',\n        'nativeName' => 'Gĩkũyũ',\n    ],\n    'rw' => [\n        'isoName' => 'Kinyarwanda',\n        'nativeName' => 'Ikinyarwanda',\n    ],\n    'ky' => [\n        'isoName' => 'Kirghiz, Kyrgyz',\n        'nativeName' => 'Кыргызча, Кыргыз тили',\n    ],\n    'kv' => [\n        'isoName' => 'Komi',\n        'nativeName' => 'коми кыв',\n    ],\n    'kg' => [\n        'isoName' => 'Kongo',\n        'nativeName' => 'Kikongo',\n    ],\n    'ko' => [\n        'isoName' => 'Korean',\n        'nativeName' => '한국어',\n    ],\n    'ku' => [\n        'isoName' => 'Kurdish',\n        'nativeName' => 'Kurdî, کوردی‎',\n    ],\n    'kj' => [\n        'isoName' => 'Kuanyama, Kwanyama',\n        'nativeName' => 'Kuanyama',\n    ],\n    'la' => [\n        'isoName' => 'Latin',\n        'nativeName' => 'latine, lingua latina',\n    ],\n    'lb' => [\n        'isoName' => 'Luxembourgish, Letzeburgesch',\n        'nativeName' => 'Lëtzebuergesch',\n    ],\n    'lg' => [\n        'isoName' => 'Ganda',\n        'nativeName' => 'Luganda',\n    ],\n    'li' => [\n        'isoName' => 'Limburgan, Limburger, Limburgish',\n        'nativeName' => 'Limburgs',\n    ],\n    'ln' => [\n        'isoName' => 'Lingala',\n        'nativeName' => 'Lingála',\n    ],\n    'lo' => [\n        'isoName' => 'Lao',\n        'nativeName' => 'ພາສາລາວ',\n    ],\n    'lt' => [\n        'isoName' => 'Lithuanian',\n        'nativeName' => 'lietuvių kalba',\n    ],\n    'lu' => [\n        'isoName' => 'Luba-Katanga',\n        'nativeName' => 'Kiluba',\n    ],\n    'lv' => [\n        'isoName' => 'Latvian',\n        'nativeName' => 'latviešu valoda',\n    ],\n    'gv' => [\n        'isoName' => 'Manx',\n        'nativeName' => 'Gaelg, Gailck',\n    ],\n    'mk' => [\n        'isoName' => 'Macedonian',\n        'nativeName' => 'македонски јазик',\n    ],\n    'mg' => [\n        'isoName' => 'Malagasy',\n        'nativeName' => 'fiteny malagasy',\n    ],\n    'ms' => [\n        'isoName' => 'Malay',\n        'nativeName' => 'Bahasa Melayu, بهاس ملايو‎',\n    ],\n    'ml' => [\n        'isoName' => 'Malayalam',\n        'nativeName' => 'മലയാളം',\n    ],\n    'mt' => [\n        'isoName' => 'Maltese',\n        'nativeName' => 'Malti',\n    ],\n    'mi' => [\n        'isoName' => 'Maori',\n        'nativeName' => 'te reo Māori',\n    ],\n    'mr' => [\n        'isoName' => 'Marathi',\n        'nativeName' => 'मराठी',\n    ],\n    'mh' => [\n        'isoName' => 'Marshallese',\n        'nativeName' => 'Kajin M̧ajeļ',\n    ],\n    'mn' => [\n        'isoName' => 'Mongolian',\n        'nativeName' => 'Монгол хэл',\n    ],\n    'na' => [\n        'isoName' => 'Nauru',\n        'nativeName' => 'Dorerin Naoero',\n    ],\n    'nv' => [\n        'isoName' => 'Navajo, Navaho',\n        'nativeName' => 'Diné bizaad',\n    ],\n    'nd' => [\n        'isoName' => 'North Ndebele',\n        'nativeName' => 'isiNdebele',\n    ],\n    'ne' => [\n        'isoName' => 'Nepali',\n        'nativeName' => 'नेपाली',\n    ],\n    'ng' => [\n        'isoName' => 'Ndonga',\n        'nativeName' => 'Owambo',\n    ],\n    'nb' => [\n        'isoName' => 'Norwegian Bokmål',\n        'nativeName' => 'Norsk Bokmål',\n    ],\n    'nn' => [\n        'isoName' => 'Norwegian Nynorsk',\n        'nativeName' => 'Norsk Nynorsk',\n    ],\n    'no' => [\n        'isoName' => 'Norwegian',\n        'nativeName' => 'Norsk',\n    ],\n    'ii' => [\n        'isoName' => 'Sichuan Yi, Nuosu',\n        'nativeName' => 'ꆈꌠ꒿ Nuosuhxop',\n    ],\n    'nr' => [\n        'isoName' => 'South Ndebele',\n        'nativeName' => 'isiNdebele',\n    ],\n    'oc' => [\n        'isoName' => 'Occitan',\n        'nativeName' => 'occitan, lenga d\\'òc',\n    ],\n    'oj' => [\n        'isoName' => 'Ojibwa',\n        'nativeName' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ',\n    ],\n    'cu' => [\n        'isoName' => 'Church Slavic, Church Slavonic, Old Church Slavonic, Old Slavonic, Old Bulgarian',\n        'nativeName' => 'ѩзыкъ словѣньскъ',\n    ],\n    'om' => [\n        'isoName' => 'Oromo',\n        'nativeName' => 'Afaan Oromoo',\n    ],\n    'or' => [\n        'isoName' => 'Oriya',\n        'nativeName' => 'ଓଡ଼ିଆ',\n    ],\n    'os' => [\n        'isoName' => 'Ossetian, Ossetic',\n        'nativeName' => 'ирон æвзаг',\n    ],\n    'pa' => [\n        'isoName' => 'Panjabi, Punjabi',\n        'nativeName' => 'ਪੰਜਾਬੀ',\n    ],\n    'pi' => [\n        'isoName' => 'Pali',\n        'nativeName' => 'पाऴि',\n    ],\n    'fa' => [\n        'isoName' => 'Persian',\n        'nativeName' => 'فارسی',\n    ],\n    'pl' => [\n        'isoName' => 'Polish',\n        'nativeName' => 'język polski, polszczyzna',\n    ],\n    'ps' => [\n        'isoName' => 'Pashto, Pushto',\n        'nativeName' => 'پښتو',\n    ],\n    'pt' => [\n        'isoName' => 'Portuguese',\n        'nativeName' => 'Português',\n    ],\n    'qu' => [\n        'isoName' => 'Quechua',\n        'nativeName' => 'Runa Simi, Kichwa',\n    ],\n    'rm' => [\n        'isoName' => 'Romansh',\n        'nativeName' => 'Rumantsch Grischun',\n    ],\n    'rn' => [\n        'isoName' => 'Rundi',\n        'nativeName' => 'Ikirundi',\n    ],\n    'ro' => [\n        'isoName' => 'Romanian, Moldavian, Moldovan',\n        'nativeName' => 'Română',\n    ],\n    'ru' => [\n        'isoName' => 'Russian',\n        'nativeName' => 'русский',\n    ],\n    'sa' => [\n        'isoName' => 'Sanskrit',\n        'nativeName' => 'संस्कृतम्',\n    ],\n    'sc' => [\n        'isoName' => 'Sardinian',\n        'nativeName' => 'sardu',\n    ],\n    'sd' => [\n        'isoName' => 'Sindhi',\n        'nativeName' => 'सिन्धी, سنڌي، سندھی‎',\n    ],\n    'se' => [\n        'isoName' => 'Northern Sami',\n        'nativeName' => 'Davvisámegiella',\n    ],\n    'sm' => [\n        'isoName' => 'Samoan',\n        'nativeName' => 'gagana fa\\'a Samoa',\n    ],\n    'sg' => [\n        'isoName' => 'Sango',\n        'nativeName' => 'yângâ tî sängö',\n    ],\n    'sr' => [\n        'isoName' => 'Serbian',\n        'nativeName' => 'српски језик',\n    ],\n    'gd' => [\n        'isoName' => 'Gaelic, Scottish Gaelic',\n        'nativeName' => 'Gàidhlig',\n    ],\n    'sn' => [\n        'isoName' => 'Shona',\n        'nativeName' => 'chiShona',\n    ],\n    'si' => [\n        'isoName' => 'Sinhala, Sinhalese',\n        'nativeName' => 'සිංහල',\n    ],\n    'sk' => [\n        'isoName' => 'Slovak',\n        'nativeName' => 'Slovenčina, Slovenský Jazyk',\n    ],\n    'sl' => [\n        'isoName' => 'Slovene',\n        'nativeName' => 'Slovenski Jezik, Slovenščina',\n    ],\n    'so' => [\n        'isoName' => 'Somali',\n        'nativeName' => 'Soomaaliga, af Soomaali',\n    ],\n    'st' => [\n        'isoName' => 'Southern Sotho',\n        'nativeName' => 'Sesotho',\n    ],\n    'es' => [\n        'isoName' => 'Spanish, Castilian',\n        'nativeName' => 'Español',\n    ],\n    'su' => [\n        'isoName' => 'Sundanese',\n        'nativeName' => 'Basa Sunda',\n    ],\n    'sw' => [\n        'isoName' => 'Swahili',\n        'nativeName' => 'Kiswahili',\n    ],\n    'ss' => [\n        'isoName' => 'Swati',\n        'nativeName' => 'SiSwati',\n    ],\n    'sv' => [\n        'isoName' => 'Swedish',\n        'nativeName' => 'Svenska',\n    ],\n    'ta' => [\n        'isoName' => 'Tamil',\n        'nativeName' => 'தமிழ்',\n    ],\n    'te' => [\n        'isoName' => 'Telugu',\n        'nativeName' => 'తెలుగు',\n    ],\n    'tg' => [\n        'isoName' => 'Tajik',\n        'nativeName' => 'тоҷикӣ, toçikī, تاجیکی‎',\n    ],\n    'th' => [\n        'isoName' => 'Thai',\n        'nativeName' => 'ไทย',\n    ],\n    'ti' => [\n        'isoName' => 'Tigrinya',\n        'nativeName' => 'ትግርኛ',\n    ],\n    'bo' => [\n        'isoName' => 'Tibetan',\n        'nativeName' => 'བོད་ཡིག',\n    ],\n    'tk' => [\n        'isoName' => 'Turkmen',\n        'nativeName' => 'Türkmen, Түркмен',\n    ],\n    'tl' => [\n        'isoName' => 'Tagalog',\n        'nativeName' => 'Wikang Tagalog',\n    ],\n    'tn' => [\n        'isoName' => 'Tswana',\n        'nativeName' => 'Setswana',\n    ],\n    'to' => [\n        'isoName' => 'Tongan (Tonga Islands)',\n        'nativeName' => 'Faka Tonga',\n    ],\n    'tr' => [\n        'isoName' => 'Turkish',\n        'nativeName' => 'Türkçe',\n    ],\n    'ts' => [\n        'isoName' => 'Tsonga',\n        'nativeName' => 'Xitsonga',\n    ],\n    'tt' => [\n        'isoName' => 'Tatar',\n        'nativeName' => 'татар теле, tatar tele',\n    ],\n    'tw' => [\n        'isoName' => 'Twi',\n        'nativeName' => 'Twi',\n    ],\n    'ty' => [\n        'isoName' => 'Tahitian',\n        'nativeName' => 'Reo Tahiti',\n    ],\n    'ug' => [\n        'isoName' => 'Uighur, Uyghur',\n        'nativeName' => 'Uyƣurqə, ‫ئۇيغۇرچ',\n    ],\n    'uk' => [\n        'isoName' => 'Ukrainian',\n        'nativeName' => 'Українська',\n    ],\n    'ur' => [\n        'isoName' => 'Urdu',\n        'nativeName' => 'اردو',\n    ],\n    'uz' => [\n        'isoName' => 'Uzbek',\n        'nativeName' => 'Oʻzbek, Ўзбек, أۇزبېك‎',\n    ],\n    've' => [\n        'isoName' => 'Venda',\n        'nativeName' => 'Tshivenḓa',\n    ],\n    'vi' => [\n        'isoName' => 'Vietnamese',\n        'nativeName' => 'Tiếng Việt',\n    ],\n    'vo' => [\n        'isoName' => 'Volapük',\n        'nativeName' => 'Volapük',\n    ],\n    'wa' => [\n        'isoName' => 'Walloon',\n        'nativeName' => 'Walon',\n    ],\n    'cy' => [\n        'isoName' => 'Welsh',\n        'nativeName' => 'Cymraeg',\n    ],\n    'wo' => [\n        'isoName' => 'Wolof',\n        'nativeName' => 'Wollof',\n    ],\n    'fy' => [\n        'isoName' => 'Western Frisian',\n        'nativeName' => 'Frysk',\n    ],\n    'xh' => [\n        'isoName' => 'Xhosa',\n        'nativeName' => 'isiXhosa',\n    ],\n    'yi' => [\n        'isoName' => 'Yiddish',\n        'nativeName' => 'ייִדיש',\n    ],\n    'yo' => [\n        'isoName' => 'Yoruba',\n        'nativeName' => 'Yorùbá',\n    ],\n    'za' => [\n        'isoName' => 'Zhuang, Chuang',\n        'nativeName' => 'Saɯ cueŋƅ, Saw cuengh',\n    ],\n    'zu' => [\n        'isoName' => 'Zulu',\n        'nativeName' => 'isiZulu',\n    ],\n    /*\n     * Add ISO 639-3 languages available in Carbon\n     */\n    'agq' => [\n        'isoName' => 'Aghem',\n        'nativeName' => 'Aghem',\n    ],\n    'agr' => [\n        'isoName' => 'Aguaruna',\n        'nativeName' => 'Aguaruna',\n    ],\n    'anp' => [\n        'isoName' => 'Angika',\n        'nativeName' => 'Angika',\n    ],\n    'asa' => [\n        'isoName' => 'Asu',\n        'nativeName' => 'Asu',\n    ],\n    'ast' => [\n        'isoName' => 'Asturian',\n        'nativeName' => 'Asturian',\n    ],\n    'ayc' => [\n        'isoName' => 'Southern Aymara',\n        'nativeName' => 'Southern Aymara',\n    ],\n    'bas' => [\n        'isoName' => 'Basaa',\n        'nativeName' => 'Basaa',\n    ],\n    'bem' => [\n        'isoName' => 'Bemba',\n        'nativeName' => 'Bemba',\n    ],\n    'bez' => [\n        'isoName' => 'Bena',\n        'nativeName' => 'Bena',\n    ],\n    'bhb' => [\n        'isoName' => 'Bhili',\n        'nativeName' => 'Bhili',\n    ],\n    'bho' => [\n        'isoName' => 'Bhojpuri',\n        'nativeName' => 'Bhojpuri',\n    ],\n    'brx' => [\n        'isoName' => 'Bodo',\n        'nativeName' => 'Bodo',\n    ],\n    'byn' => [\n        'isoName' => 'Bilin',\n        'nativeName' => 'Bilin',\n    ],\n    'ccp' => [\n        'isoName' => 'Chakma',\n        'nativeName' => 'Chakma',\n    ],\n    'cgg' => [\n        'isoName' => 'Chiga',\n        'nativeName' => 'Chiga',\n    ],\n    'chr' => [\n        'isoName' => 'Cherokee',\n        'nativeName' => 'Cherokee',\n    ],\n    'cmn' => [\n        'isoName' => 'Chinese',\n        'nativeName' => 'Chinese',\n    ],\n    'crh' => [\n        'isoName' => 'Crimean Turkish',\n        'nativeName' => 'Crimean Turkish',\n    ],\n    'csb' => [\n        'isoName' => 'Kashubian',\n        'nativeName' => 'Kashubian',\n    ],\n    'dav' => [\n        'isoName' => 'Taita',\n        'nativeName' => 'Taita',\n    ],\n    'dje' => [\n        'isoName' => 'Zarma',\n        'nativeName' => 'Zarma',\n    ],\n    'doi' => [\n        'isoName' => 'Dogri (macrolanguage)',\n        'nativeName' => 'Dogri (macrolanguage)',\n    ],\n    'dsb' => [\n        'isoName' => 'Lower Sorbian',\n        'nativeName' => 'Lower Sorbian',\n    ],\n    'dua' => [\n        'isoName' => 'Duala',\n        'nativeName' => 'Duala',\n    ],\n    'dyo' => [\n        'isoName' => 'Jola-Fonyi',\n        'nativeName' => 'Jola-Fonyi',\n    ],\n    'ebu' => [\n        'isoName' => 'Embu',\n        'nativeName' => 'Embu',\n    ],\n    'ewo' => [\n        'isoName' => 'Ewondo',\n        'nativeName' => 'Ewondo',\n    ],\n    'fil' => [\n        'isoName' => 'Filipino',\n        'nativeName' => 'Filipino',\n    ],\n    'fur' => [\n        'isoName' => 'Friulian',\n        'nativeName' => 'Friulian',\n    ],\n    'gez' => [\n        'isoName' => 'Geez',\n        'nativeName' => 'Geez',\n    ],\n    'gom' => [\n        'isoName' => 'Konkani, Goan',\n        'nativeName' => 'ಕೊಂಕಣಿ',\n    ],\n    'gsw' => [\n        'isoName' => 'Swiss German',\n        'nativeName' => 'Swiss German',\n    ],\n    'guz' => [\n        'isoName' => 'Gusii',\n        'nativeName' => 'Gusii',\n    ],\n    'hak' => [\n        'isoName' => 'Hakka Chinese',\n        'nativeName' => 'Hakka Chinese',\n    ],\n    'haw' => [\n        'isoName' => 'Hawaiian',\n        'nativeName' => 'Hawaiian',\n    ],\n    'hif' => [\n        'isoName' => 'Fiji Hindi',\n        'nativeName' => 'Fiji Hindi',\n    ],\n    'hne' => [\n        'isoName' => 'Chhattisgarhi',\n        'nativeName' => 'Chhattisgarhi',\n    ],\n    'hsb' => [\n        'isoName' => 'Upper Sorbian',\n        'nativeName' => 'Upper Sorbian',\n    ],\n    'jgo' => [\n        'isoName' => 'Ngomba',\n        'nativeName' => 'Ngomba',\n    ],\n    'jmc' => [\n        'isoName' => 'Machame',\n        'nativeName' => 'Machame',\n    ],\n    'kab' => [\n        'isoName' => 'Kabyle',\n        'nativeName' => 'Kabyle',\n    ],\n    'kam' => [\n        'isoName' => 'Kamba',\n        'nativeName' => 'Kamba',\n    ],\n    'kde' => [\n        'isoName' => 'Makonde',\n        'nativeName' => 'Makonde',\n    ],\n    'kea' => [\n        'isoName' => 'Kabuverdianu',\n        'nativeName' => 'Kabuverdianu',\n    ],\n    'khq' => [\n        'isoName' => 'Koyra Chiini',\n        'nativeName' => 'Koyra Chiini',\n    ],\n    'kkj' => [\n        'isoName' => 'Kako',\n        'nativeName' => 'Kako',\n    ],\n    'kln' => [\n        'isoName' => 'Kalenjin',\n        'nativeName' => 'Kalenjin',\n    ],\n    'kok' => [\n        'isoName' => 'Konkani',\n        'nativeName' => 'Konkani',\n    ],\n    'ksb' => [\n        'isoName' => 'Shambala',\n        'nativeName' => 'Shambala',\n    ],\n    'ksf' => [\n        'isoName' => 'Bafia',\n        'nativeName' => 'Bafia',\n    ],\n    'ksh' => [\n        'isoName' => 'Colognian',\n        'nativeName' => 'Colognian',\n    ],\n    'lag' => [\n        'isoName' => 'Langi',\n        'nativeName' => 'Langi',\n    ],\n    'lij' => [\n        'isoName' => 'Ligurian',\n        'nativeName' => 'Ligurian',\n    ],\n    'lkt' => [\n        'isoName' => 'Lakota',\n        'nativeName' => 'Lakota',\n    ],\n    'lrc' => [\n        'isoName' => 'Northern Luri',\n        'nativeName' => 'Northern Luri',\n    ],\n    'luo' => [\n        'isoName' => 'Luo',\n        'nativeName' => 'Luo',\n    ],\n    'luy' => [\n        'isoName' => 'Luyia',\n        'nativeName' => 'Luyia',\n    ],\n    'lzh' => [\n        'isoName' => 'Literary Chinese',\n        'nativeName' => 'Literary Chinese',\n    ],\n    'mag' => [\n        'isoName' => 'Magahi',\n        'nativeName' => 'Magahi',\n    ],\n    'mai' => [\n        'isoName' => 'Maithili',\n        'nativeName' => 'Maithili',\n    ],\n    'mas' => [\n        'isoName' => 'Masai',\n        'nativeName' => 'Masai',\n    ],\n    'mer' => [\n        'isoName' => 'Meru',\n        'nativeName' => 'Meru',\n    ],\n    'mfe' => [\n        'isoName' => 'Morisyen',\n        'nativeName' => 'Morisyen',\n    ],\n    'mgh' => [\n        'isoName' => 'Makhuwa-Meetto',\n        'nativeName' => 'Makhuwa-Meetto',\n    ],\n    'mgo' => [\n        'isoName' => 'Metaʼ',\n        'nativeName' => 'Metaʼ',\n    ],\n    'mhr' => [\n        'isoName' => 'Eastern Mari',\n        'nativeName' => 'Eastern Mari',\n    ],\n    'miq' => [\n        'isoName' => 'Mískito',\n        'nativeName' => 'Mískito',\n    ],\n    'mjw' => [\n        'isoName' => 'Karbi',\n        'nativeName' => 'Karbi',\n    ],\n    'mni' => [\n        'isoName' => 'Manipuri',\n        'nativeName' => 'Manipuri',\n    ],\n    'mua' => [\n        'isoName' => 'Mundang',\n        'nativeName' => 'Mundang',\n    ],\n    'mzn' => [\n        'isoName' => 'Mazanderani',\n        'nativeName' => 'Mazanderani',\n    ],\n    'nan' => [\n        'isoName' => 'Min Nan Chinese',\n        'nativeName' => 'Min Nan Chinese',\n    ],\n    'naq' => [\n        'isoName' => 'Nama',\n        'nativeName' => 'Nama',\n    ],\n    'nds' => [\n        'isoName' => 'Low German',\n        'nativeName' => 'Low German',\n    ],\n    'nhn' => [\n        'isoName' => 'Central Nahuatl',\n        'nativeName' => 'Central Nahuatl',\n    ],\n    'niu' => [\n        'isoName' => 'Niuean',\n        'nativeName' => 'Niuean',\n    ],\n    'nmg' => [\n        'isoName' => 'Kwasio',\n        'nativeName' => 'Kwasio',\n    ],\n    'nnh' => [\n        'isoName' => 'Ngiemboon',\n        'nativeName' => 'Ngiemboon',\n    ],\n    'nso' => [\n        'isoName' => 'Northern Sotho',\n        'nativeName' => 'Northern Sotho',\n    ],\n    'nus' => [\n        'isoName' => 'Nuer',\n        'nativeName' => 'Nuer',\n    ],\n    'nyn' => [\n        'isoName' => 'Nyankole',\n        'nativeName' => 'Nyankole',\n    ],\n    'pap' => [\n        'isoName' => 'Papiamento',\n        'nativeName' => 'Papiamento',\n    ],\n    'prg' => [\n        'isoName' => 'Prussian',\n        'nativeName' => 'Prussian',\n    ],\n    'quz' => [\n        'isoName' => 'Cusco Quechua',\n        'nativeName' => 'Cusco Quechua',\n    ],\n    'raj' => [\n        'isoName' => 'Rajasthani',\n        'nativeName' => 'Rajasthani',\n    ],\n    'rof' => [\n        'isoName' => 'Rombo',\n        'nativeName' => 'Rombo',\n    ],\n    'rwk' => [\n        'isoName' => 'Rwa',\n        'nativeName' => 'Rwa',\n    ],\n    'sah' => [\n        'isoName' => 'Sakha',\n        'nativeName' => 'Sakha',\n    ],\n    'saq' => [\n        'isoName' => 'Samburu',\n        'nativeName' => 'Samburu',\n    ],\n    'sat' => [\n        'isoName' => 'Santali',\n        'nativeName' => 'Santali',\n    ],\n    'sbp' => [\n        'isoName' => 'Sangu',\n        'nativeName' => 'Sangu',\n    ],\n    'scr' => [\n        'isoName' => 'Serbo Croatian',\n        'nativeName' => 'Serbo Croatian',\n    ],\n    'seh' => [\n        'isoName' => 'Sena',\n        'nativeName' => 'Sena',\n    ],\n    'ses' => [\n        'isoName' => 'Koyraboro Senni',\n        'nativeName' => 'Koyraboro Senni',\n    ],\n    'sgs' => [\n        'isoName' => 'Samogitian',\n        'nativeName' => 'Samogitian',\n    ],\n    'shi' => [\n        'isoName' => 'Tachelhit',\n        'nativeName' => 'Tachelhit',\n    ],\n    'shn' => [\n        'isoName' => 'Shan',\n        'nativeName' => 'Shan',\n    ],\n    'shs' => [\n        'isoName' => 'Shuswap',\n        'nativeName' => 'Shuswap',\n    ],\n    'sid' => [\n        'isoName' => 'Sidamo',\n        'nativeName' => 'Sidamo',\n    ],\n    'smn' => [\n        'isoName' => 'Inari Sami',\n        'nativeName' => 'Inari Sami',\n    ],\n    'szl' => [\n        'isoName' => 'Silesian',\n        'nativeName' => 'Silesian',\n    ],\n    'tcy' => [\n        'isoName' => 'Tulu',\n        'nativeName' => 'Tulu',\n    ],\n    'teo' => [\n        'isoName' => 'Teso',\n        'nativeName' => 'Teso',\n    ],\n    'tet' => [\n        'isoName' => 'Tetum',\n        'nativeName' => 'Tetum',\n    ],\n    'the' => [\n        'isoName' => 'Chitwania Tharu',\n        'nativeName' => 'Chitwania Tharu',\n    ],\n    'tig' => [\n        'isoName' => 'Tigre',\n        'nativeName' => 'Tigre',\n    ],\n    'tlh' => [\n        'isoName' => 'Klingon',\n        'nativeName' => 'tlhIngan Hol',\n    ],\n    'tpi' => [\n        'isoName' => 'Tok Pisin',\n        'nativeName' => 'Tok Pisin',\n    ],\n    'twq' => [\n        'isoName' => 'Tasawaq',\n        'nativeName' => 'Tasawaq',\n    ],\n    'tzl' => [\n        'isoName' => 'Talossan',\n        'nativeName' => 'Talossan',\n    ],\n    'tzm' => [\n        'isoName' => 'Tamazight, Central Atlas',\n        'nativeName' => 'ⵜⵎⴰⵣⵉⵖⵜ',\n    ],\n    'unm' => [\n        'isoName' => 'Unami',\n        'nativeName' => 'Unami',\n    ],\n    'vai' => [\n        'isoName' => 'Vai',\n        'nativeName' => 'Vai',\n    ],\n    'vun' => [\n        'isoName' => 'Vunjo',\n        'nativeName' => 'Vunjo',\n    ],\n    'wae' => [\n        'isoName' => 'Walser',\n        'nativeName' => 'Walser',\n    ],\n    'wal' => [\n        'isoName' => 'Wolaytta',\n        'nativeName' => 'Wolaytta',\n    ],\n    'xog' => [\n        'isoName' => 'Soga',\n        'nativeName' => 'Soga',\n    ],\n    'yav' => [\n        'isoName' => 'Yangben',\n        'nativeName' => 'Yangben',\n    ],\n    'yue' => [\n        'isoName' => 'Cantonese',\n        'nativeName' => 'Cantonese',\n    ],\n    'yuw' => [\n        'isoName' => 'Yau (Morobe Province)',\n        'nativeName' => 'Yau (Morobe Province)',\n    ],\n    'zgh' => [\n        'isoName' => 'Standard Moroccan Tamazight',\n        'nativeName' => 'Standard Moroccan Tamazight',\n    ],\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/List/regions.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n/*\n * ISO 3166-2\n */\nreturn [\n    'AD' => 'Andorra',\n    'AE' => 'United Arab Emirates',\n    'AF' => 'Afghanistan',\n    'AG' => 'Antigua and Barbuda',\n    'AI' => 'Anguilla',\n    'AL' => 'Albania',\n    'AM' => 'Armenia',\n    'AO' => 'Angola',\n    'AQ' => 'Antarctica',\n    'AR' => 'Argentina',\n    'AS' => 'American Samoa',\n    'AT' => 'Austria',\n    'AU' => 'Australia',\n    'AW' => 'Aruba',\n    'AX' => 'Åland Islands',\n    'AZ' => 'Azerbaijan',\n    'BA' => 'Bosnia and Herzegovina',\n    'BB' => 'Barbados',\n    'BD' => 'Bangladesh',\n    'BE' => 'Belgium',\n    'BF' => 'Burkina Faso',\n    'BG' => 'Bulgaria',\n    'BH' => 'Bahrain',\n    'BI' => 'Burundi',\n    'BJ' => 'Benin',\n    'BL' => 'Saint Barthélemy',\n    'BM' => 'Bermuda',\n    'BN' => 'Brunei Darussalam',\n    'BO' => 'Bolivia (Plurinational State of)',\n    'BQ' => 'Bonaire, Sint Eustatius and Saba',\n    'BR' => 'Brazil',\n    'BS' => 'Bahamas',\n    'BT' => 'Bhutan',\n    'BV' => 'Bouvet Island',\n    'BW' => 'Botswana',\n    'BY' => 'Belarus',\n    'BZ' => 'Belize',\n    'CA' => 'Canada',\n    'CC' => 'Cocos (Keeling) Islands',\n    'CD' => 'Congo, Democratic Republic of the',\n    'CF' => 'Central African Republic',\n    'CG' => 'Congo',\n    'CH' => 'Switzerland',\n    'CI' => 'Côte d\\'Ivoire',\n    'CK' => 'Cook Islands',\n    'CL' => 'Chile',\n    'CM' => 'Cameroon',\n    'CN' => 'China',\n    'CO' => 'Colombia',\n    'CR' => 'Costa Rica',\n    'CU' => 'Cuba',\n    'CV' => 'Cabo Verde',\n    'CW' => 'Curaçao',\n    'CX' => 'Christmas Island',\n    'CY' => 'Cyprus',\n    'CZ' => 'Czechia',\n    'DE' => 'Germany',\n    'DJ' => 'Djibouti',\n    'DK' => 'Denmark',\n    'DM' => 'Dominica',\n    'DO' => 'Dominican Republic',\n    'DZ' => 'Algeria',\n    'EC' => 'Ecuador',\n    'EE' => 'Estonia',\n    'EG' => 'Egypt',\n    'EH' => 'Western Sahara',\n    'ER' => 'Eritrea',\n    'ES' => 'Spain',\n    'ET' => 'Ethiopia',\n    'FI' => 'Finland',\n    'FJ' => 'Fiji',\n    'FK' => 'Falkland Islands (Malvinas)',\n    'FM' => 'Micronesia (Federated States of)',\n    'FO' => 'Faroe Islands',\n    'FR' => 'France',\n    'GA' => 'Gabon',\n    'GB' => 'United Kingdom of Great Britain and Northern Ireland',\n    'GD' => 'Grenada',\n    'GE' => 'Georgia',\n    'GF' => 'French Guiana',\n    'GG' => 'Guernsey',\n    'GH' => 'Ghana',\n    'GI' => 'Gibraltar',\n    'GL' => 'Greenland',\n    'GM' => 'Gambia',\n    'GN' => 'Guinea',\n    'GP' => 'Guadeloupe',\n    'GQ' => 'Equatorial Guinea',\n    'GR' => 'Greece',\n    'GS' => 'South Georgia and the South Sandwich Islands',\n    'GT' => 'Guatemala',\n    'GU' => 'Guam',\n    'GW' => 'Guinea-Bissau',\n    'GY' => 'Guyana',\n    'HK' => 'Hong Kong',\n    'HM' => 'Heard Island and McDonald Islands',\n    'HN' => 'Honduras',\n    'HR' => 'Croatia',\n    'HT' => 'Haiti',\n    'HU' => 'Hungary',\n    'ID' => 'Indonesia',\n    'IE' => 'Ireland',\n    'IL' => 'Israel',\n    'IM' => 'Isle of Man',\n    'IN' => 'India',\n    'IO' => 'British Indian Ocean Territory',\n    'IQ' => 'Iraq',\n    'IR' => 'Iran (Islamic Republic of)',\n    'IS' => 'Iceland',\n    'IT' => 'Italy',\n    'JE' => 'Jersey',\n    'JM' => 'Jamaica',\n    'JO' => 'Jordan',\n    'JP' => 'Japan',\n    'KE' => 'Kenya',\n    'KG' => 'Kyrgyzstan',\n    'KH' => 'Cambodia',\n    'KI' => 'Kiribati',\n    'KM' => 'Comoros',\n    'KN' => 'Saint Kitts and Nevis',\n    'KP' => 'Korea (Democratic People\\'s Republic of)',\n    'KR' => 'Korea, Republic of',\n    'KW' => 'Kuwait',\n    'KY' => 'Cayman Islands',\n    'KZ' => 'Kazakhstan',\n    'LA' => 'Lao People\\'s Democratic Republic',\n    'LB' => 'Lebanon',\n    'LC' => 'Saint Lucia',\n    'LI' => 'Liechtenstein',\n    'LK' => 'Sri Lanka',\n    'LR' => 'Liberia',\n    'LS' => 'Lesotho',\n    'LT' => 'Lithuania',\n    'LU' => 'Luxembourg',\n    'LV' => 'Latvia',\n    'LY' => 'Libya',\n    'MA' => 'Morocco',\n    'MC' => 'Monaco',\n    'MD' => 'Moldova, Republic of',\n    'ME' => 'Montenegro',\n    'MF' => 'Saint Martin (French part)',\n    'MG' => 'Madagascar',\n    'MH' => 'Marshall Islands',\n    'MK' => 'Macedonia, the former Yugoslav Republic of',\n    'ML' => 'Mali',\n    'MM' => 'Myanmar',\n    'MN' => 'Mongolia',\n    'MO' => 'Macao',\n    'MP' => 'Northern Mariana Islands',\n    'MQ' => 'Martinique',\n    'MR' => 'Mauritania',\n    'MS' => 'Montserrat',\n    'MT' => 'Malta',\n    'MU' => 'Mauritius',\n    'MV' => 'Maldives',\n    'MW' => 'Malawi',\n    'MX' => 'Mexico',\n    'MY' => 'Malaysia',\n    'MZ' => 'Mozambique',\n    'NA' => 'Namibia',\n    'NC' => 'New Caledonia',\n    'NE' => 'Niger',\n    'NF' => 'Norfolk Island',\n    'NG' => 'Nigeria',\n    'NI' => 'Nicaragua',\n    'NL' => 'Netherlands',\n    'NO' => 'Norway',\n    'NP' => 'Nepal',\n    'NR' => 'Nauru',\n    'NU' => 'Niue',\n    'NZ' => 'New Zealand',\n    'OM' => 'Oman',\n    'PA' => 'Panama',\n    'PE' => 'Peru',\n    'PF' => 'French Polynesia',\n    'PG' => 'Papua New Guinea',\n    'PH' => 'Philippines',\n    'PK' => 'Pakistan',\n    'PL' => 'Poland',\n    'PM' => 'Saint Pierre and Miquelon',\n    'PN' => 'Pitcairn',\n    'PR' => 'Puerto Rico',\n    'PS' => 'Palestine, State of',\n    'PT' => 'Portugal',\n    'PW' => 'Palau',\n    'PY' => 'Paraguay',\n    'QA' => 'Qatar',\n    'RE' => 'Réunion',\n    'RO' => 'Romania',\n    'RS' => 'Serbia',\n    'RU' => 'Russian Federation',\n    'RW' => 'Rwanda',\n    'SA' => 'Saudi Arabia',\n    'SB' => 'Solomon Islands',\n    'SC' => 'Seychelles',\n    'SD' => 'Sudan',\n    'SE' => 'Sweden',\n    'SG' => 'Singapore',\n    'SH' => 'Saint Helena, Ascension and Tristan da Cunha',\n    'SI' => 'Slovenia',\n    'SJ' => 'Svalbard and Jan Mayen',\n    'SK' => 'Slovakia',\n    'SL' => 'Sierra Leone',\n    'SM' => 'San Marino',\n    'SN' => 'Senegal',\n    'SO' => 'Somalia',\n    'SR' => 'Suriname',\n    'SS' => 'South Sudan',\n    'ST' => 'Sao Tome and Principe',\n    'SV' => 'El Salvador',\n    'SX' => 'Sint Maarten (Dutch part)',\n    'SY' => 'Syrian Arab Republic',\n    'SZ' => 'Eswatini',\n    'TC' => 'Turks and Caicos Islands',\n    'TD' => 'Chad',\n    'TF' => 'French Southern Territories',\n    'TG' => 'Togo',\n    'TH' => 'Thailand',\n    'TJ' => 'Tajikistan',\n    'TK' => 'Tokelau',\n    'TL' => 'Timor-Leste',\n    'TM' => 'Turkmenistan',\n    'TN' => 'Tunisia',\n    'TO' => 'Tonga',\n    'TR' => 'Turkey',\n    'TT' => 'Trinidad and Tobago',\n    'TV' => 'Tuvalu',\n    'TW' => 'Taiwan, Province of China',\n    'TZ' => 'Tanzania, United Republic of',\n    'UA' => 'Ukraine',\n    'UG' => 'Uganda',\n    'UM' => 'United States Minor Outlying Islands',\n    'US' => 'United States of America',\n    'UY' => 'Uruguay',\n    'UZ' => 'Uzbekistan',\n    'VA' => 'Holy See',\n    'VC' => 'Saint Vincent and the Grenadines',\n    'VE' => 'Venezuela (Bolivarian Republic of)',\n    'VG' => 'Virgin Islands (British)',\n    'VI' => 'Virgin Islands (U.S.)',\n    'VN' => 'Viet Nam',\n    'VU' => 'Vanuatu',\n    'WF' => 'Wallis and Futuna',\n    'WS' => 'Samoa',\n    'YE' => 'Yemen',\n    'YT' => 'Mayotte',\n    'ZA' => 'South Africa',\n    'ZM' => 'Zambia',\n    'ZW' => 'Zimbabwe',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/MessageFormatter/MessageFormatterMapper.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\MessageFormatter;\n\nuse ReflectionMethod;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatter;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface;\n\n// @codeCoverageIgnoreStart\n$transMethod = new ReflectionMethod(MessageFormatterInterface::class, 'format');\n\nrequire $transMethod->getParameters()[0]->hasType()\n    ? __DIR__.'/../../../lazy/Carbon/MessageFormatter/MessageFormatterMapperStrongType.php'\n    : __DIR__.'/../../../lazy/Carbon/MessageFormatter/MessageFormatterMapperWeakType.php';\n// @codeCoverageIgnoreEnd\n\nfinal class MessageFormatterMapper extends LazyMessageFormatter\n{\n    /**\n     * Wrapped formatter.\n     *\n     * @var MessageFormatterInterface\n     */\n    protected $formatter;\n\n    public function __construct(?MessageFormatterInterface $formatter = null)\n    {\n        $this->formatter = $formatter ?? new MessageFormatter();\n    }\n\n    protected function transformLocale(?string $locale): ?string\n    {\n        return $locale ? preg_replace('/[_@][A-Za-z][a-z]{2,}/', '', $locale) : $locale;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/PHPStan/AbstractMacro.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nuse Closure;\nuse InvalidArgumentException;\nuse PHPStan\\BetterReflection\\Reflection\\Adapter\\ReflectionParameter as AdapterReflectionParameter;\nuse PHPStan\\BetterReflection\\Reflection\\Adapter\\ReflectionType as AdapterReflectionType;\nuse PHPStan\\BetterReflection\\Reflection\\ReflectionClass as BetterReflectionClass;\nuse PHPStan\\BetterReflection\\Reflection\\ReflectionFunction as BetterReflectionFunction;\nuse PHPStan\\BetterReflection\\Reflection\\ReflectionParameter as BetterReflectionParameter;\nuse PHPStan\\Reflection\\Php\\BuiltinMethodReflection;\nuse PHPStan\\TrinaryLogic;\nuse ReflectionClass;\nuse ReflectionFunction;\nuse ReflectionMethod;\nuse ReflectionParameter;\nuse ReflectionType;\nuse stdClass;\nuse Throwable;\n\nabstract class AbstractMacro implements BuiltinMethodReflection\n{\n    /**\n     * The reflection function/method.\n     *\n     * @var ReflectionFunction|ReflectionMethod\n     */\n    protected $reflectionFunction;\n\n    /**\n     * The class name.\n     *\n     * @var class-string\n     */\n    private $className;\n\n    /**\n     * The method name.\n     *\n     * @var string\n     */\n    private $methodName;\n\n    /**\n     * The parameters.\n     *\n     * @var ReflectionParameter[]\n     */\n    private $parameters;\n\n    /**\n     * The is static.\n     *\n     * @var bool\n     */\n    private $static = false;\n\n    /**\n     * Macro constructor.\n     *\n     * @param class-string $className\n     * @param string       $methodName\n     * @param callable     $macro\n     */\n    public function __construct(string $className, string $methodName, $macro)\n    {\n        $this->className = $className;\n        $this->methodName = $methodName;\n        $rawReflectionFunction = \\is_array($macro)\n            ? new ReflectionMethod($macro[0], $macro[1])\n            : new ReflectionFunction($macro);\n        $this->reflectionFunction = self::hasModernParser()\n            ? $this->getReflectionFunction($macro)\n            : $rawReflectionFunction; // @codeCoverageIgnore\n        $this->parameters = array_map(\n            function ($parameter) {\n                if ($parameter instanceof BetterReflectionParameter) {\n                    return new AdapterReflectionParameter($parameter);\n                }\n\n                return $parameter; // @codeCoverageIgnore\n            },\n            $this->reflectionFunction->getParameters()\n        );\n\n        if ($rawReflectionFunction->isClosure()) {\n            try {\n                $closure = $rawReflectionFunction->getClosure();\n                $boundClosure = Closure::bind($closure, new stdClass());\n                $this->static = (!$boundClosure || (new ReflectionFunction($boundClosure))->getClosureThis() === null);\n            } catch (Throwable $e) {\n                $this->static = true;\n            }\n        }\n    }\n\n    private function getReflectionFunction($spec)\n    {\n        if (\\is_array($spec) && \\count($spec) === 2 && \\is_string($spec[1])) {\n            \\assert($spec[1] !== '');\n\n            if (\\is_object($spec[0])) {\n                return BetterReflectionClass::createFromInstance($spec[0])\n                    ->getMethod($spec[1]);\n            }\n\n            return BetterReflectionClass::createFromName($spec[0])\n                ->getMethod($spec[1]);\n        }\n\n        if (\\is_string($spec)) {\n            return BetterReflectionFunction::createFromName($spec);\n        }\n\n        if ($spec instanceof Closure) {\n            return BetterReflectionFunction::createFromClosure($spec);\n        }\n\n        throw new InvalidArgumentException('Could not create reflection from the spec given'); // @codeCoverageIgnore\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getDeclaringClass(): ReflectionClass\n    {\n        return new ReflectionClass($this->className);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isPrivate(): bool\n    {\n        return false;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isPublic(): bool\n    {\n        return true;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isFinal(): bool\n    {\n        return false;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isInternal(): bool\n    {\n        return false;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isAbstract(): bool\n    {\n        return false;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isStatic(): bool\n    {\n        return $this->static;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getDocComment(): ?string\n    {\n        return $this->reflectionFunction->getDocComment() ?: null;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getName(): string\n    {\n        return $this->methodName;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getParameters(): array\n    {\n        return $this->parameters;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getReturnType(): ?ReflectionType\n    {\n        $type = $this->reflectionFunction->getReturnType();\n\n        if ($type instanceof ReflectionType) {\n            return $type; // @codeCoverageIgnore\n        }\n\n        return self::adaptType($type);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isDeprecated(): TrinaryLogic\n    {\n        return TrinaryLogic::createFromBoolean(\n            $this->reflectionFunction->isDeprecated() ||\n            preg_match('/@deprecated/i', $this->getDocComment() ?: '')\n        );\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isVariadic(): bool\n    {\n        return $this->reflectionFunction->isVariadic();\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getPrototype(): BuiltinMethodReflection\n    {\n        return $this;\n    }\n\n    public function getTentativeReturnType(): ?ReflectionType\n    {\n        return null;\n    }\n\n    public function returnsByReference(): TrinaryLogic\n    {\n        return TrinaryLogic::createNo();\n    }\n\n    private static function adaptType($type)\n    {\n        $method = method_exists(AdapterReflectionType::class, 'fromTypeOrNull')\n            ? 'fromTypeOrNull'\n            : 'fromReturnTypeOrNull'; // @codeCoverageIgnore\n\n        return AdapterReflectionType::$method($type);\n    }\n\n    private static function hasModernParser(): bool\n    {\n        static $modernParser = null;\n\n        if ($modernParser !== null) {\n            return $modernParser;\n        }\n\n        $modernParser = method_exists(AdapterReflectionType::class, 'fromTypeOrNull');\n\n        return $modernParser;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/PHPStan/Macro.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nuse PHPStan\\BetterReflection\\Reflection\\Adapter;\nuse PHPStan\\Reflection\\Php\\BuiltinMethodReflection;\nuse ReflectionMethod;\n\n$method = new ReflectionMethod(BuiltinMethodReflection::class, 'getReflection');\n\nrequire $method->hasReturnType() && $method->getReturnType()->getName() === Adapter\\ReflectionMethod::class\n    ? __DIR__.'/../../../lazy/Carbon/PHPStan/AbstractMacroStatic.php'\n    : __DIR__.'/../../../lazy/Carbon/PHPStan/AbstractMacroBuiltin.php';\n\n$method = new ReflectionMethod(BuiltinMethodReflection::class, 'getFileName');\n\nrequire $method->hasReturnType()\n    ? __DIR__.'/../../../lazy/Carbon/PHPStan/MacroStrongType.php'\n    : __DIR__.'/../../../lazy/Carbon/PHPStan/MacroWeakType.php';\n\nfinal class Macro extends LazyMacro\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/PHPStan/MacroExtension.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nuse PHPStan\\Reflection\\Assertions;\nuse PHPStan\\Reflection\\ClassReflection;\nuse PHPStan\\Reflection\\MethodReflection;\nuse PHPStan\\Reflection\\MethodsClassReflectionExtension;\nuse PHPStan\\Reflection\\Php\\PhpMethodReflectionFactory;\nuse PHPStan\\Reflection\\ReflectionProvider;\nuse PHPStan\\Type\\TypehintHelper;\n\n/**\n * Class MacroExtension.\n *\n * @codeCoverageIgnore Pure PHPStan wrapper.\n */\nfinal class MacroExtension implements MethodsClassReflectionExtension\n{\n    /**\n     * @var PhpMethodReflectionFactory\n     */\n    protected $methodReflectionFactory;\n\n    /**\n     * @var MacroScanner\n     */\n    protected $scanner;\n\n    /**\n     * Extension constructor.\n     *\n     * @param PhpMethodReflectionFactory $methodReflectionFactory\n     * @param ReflectionProvider         $reflectionProvider\n     */\n    public function __construct(\n        PhpMethodReflectionFactory $methodReflectionFactory,\n        ReflectionProvider $reflectionProvider\n    ) {\n        $this->scanner = new MacroScanner($reflectionProvider);\n        $this->methodReflectionFactory = $methodReflectionFactory;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function hasMethod(ClassReflection $classReflection, string $methodName): bool\n    {\n        return $this->scanner->hasMethod($classReflection->getName(), $methodName);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMethod(ClassReflection $classReflection, string $methodName): MethodReflection\n    {\n        $builtinMacro = $this->scanner->getMethod($classReflection->getName(), $methodName);\n        $supportAssertions = class_exists(Assertions::class);\n\n        return $this->methodReflectionFactory->create(\n            $classReflection,\n            null,\n            $builtinMacro,\n            $classReflection->getActiveTemplateTypeMap(),\n            [],\n            TypehintHelper::decideTypeFromReflection($builtinMacro->getReturnType()),\n            null,\n            null,\n            $builtinMacro->isDeprecated()->yes(),\n            $builtinMacro->isInternal(),\n            $builtinMacro->isFinal(),\n            $supportAssertions ? null : $builtinMacro->getDocComment(),\n            $supportAssertions ? Assertions::createEmpty() : null,\n            null,\n            $builtinMacro->getDocComment(),\n            []\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/PHPStan/MacroScanner.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\PHPStan;\n\nuse Carbon\\CarbonInterface;\nuse PHPStan\\Reflection\\ReflectionProvider;\nuse ReflectionClass;\nuse ReflectionException;\n\nfinal class MacroScanner\n{\n    /**\n     * @var \\PHPStan\\Reflection\\ReflectionProvider\n     */\n    private $reflectionProvider;\n\n    /**\n     * MacroScanner constructor.\n     *\n     * @param \\PHPStan\\Reflection\\ReflectionProvider $reflectionProvider\n     */\n    public function __construct(ReflectionProvider $reflectionProvider)\n    {\n        $this->reflectionProvider = $reflectionProvider;\n    }\n\n    /**\n     * Return true if the given pair class-method is a Carbon macro.\n     *\n     * @param class-string $className\n     * @param string       $methodName\n     *\n     * @return bool\n     */\n    public function hasMethod(string $className, string $methodName): bool\n    {\n        $classReflection = $this->reflectionProvider->getClass($className);\n\n        if (\n            $classReflection->getName() !== CarbonInterface::class &&\n            !$classReflection->isSubclassOf(CarbonInterface::class)\n        ) {\n            return false;\n        }\n\n        return \\is_callable([$className, 'hasMacro']) &&\n            $className::hasMacro($methodName);\n    }\n\n    /**\n     * Return the Macro for a given pair class-method.\n     *\n     * @param class-string $className\n     * @param string       $methodName\n     *\n     * @throws ReflectionException\n     *\n     * @return Macro\n     */\n    public function getMethod(string $className, string $methodName): Macro\n    {\n        $reflectionClass = new ReflectionClass($className);\n        $property = $reflectionClass->getProperty('globalMacros');\n\n        $property->setAccessible(true);\n        $macro = $property->getValue()[$methodName];\n\n        return new Macro(\n            $className,\n            $methodName,\n            $macro\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Boundaries.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Exceptions\\UnknownUnitException;\n\n/**\n * Trait Boundaries.\n *\n * startOf, endOf and derived method for each unit.\n *\n * Depends on the following properties:\n *\n * @property int $year\n * @property int $month\n * @property int $daysInMonth\n * @property int $quarter\n *\n * Depends on the following methods:\n *\n * @method $this setTime(int $hour, int $minute, int $second = 0, int $microseconds = 0)\n * @method $this setDate(int $year, int $month, int $day)\n * @method $this addMonths(int $value = 1)\n */\ntrait Boundaries\n{\n    /**\n     * Resets the time to 00:00:00 start of day\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfDay();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfDay()\n    {\n        return $this->setTime(0, 0, 0, 0);\n    }\n\n    /**\n     * Resets the time to 23:59:59.999999 end of day\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfDay();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfDay()\n    {\n        return $this->setTime(static::HOURS_PER_DAY - 1, static::MINUTES_PER_HOUR - 1, static::SECONDS_PER_MINUTE - 1, static::MICROSECONDS_PER_SECOND - 1);\n    }\n\n    /**\n     * Resets the date to the first day of the month and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfMonth();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfMonth()\n    {\n        return $this->setDate($this->year, $this->month, 1)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of the month and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfMonth();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfMonth()\n    {\n        return $this->setDate($this->year, $this->month, $this->daysInMonth)->endOfDay();\n    }\n\n    /**\n     * Resets the date to the first day of the quarter and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfQuarter();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfQuarter()\n    {\n        $month = ($this->quarter - 1) * static::MONTHS_PER_QUARTER + 1;\n\n        return $this->setDate($this->year, $month, 1)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of the quarter and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfQuarter();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfQuarter()\n    {\n        return $this->startOfQuarter()->addMonths(static::MONTHS_PER_QUARTER - 1)->endOfMonth();\n    }\n\n    /**\n     * Resets the date to the first day of the year and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfYear();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfYear()\n    {\n        return $this->setDate($this->year, 1, 1)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of the year and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfYear();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfYear()\n    {\n        return $this->setDate($this->year, 12, 31)->endOfDay();\n    }\n\n    /**\n     * Resets the date to the first day of the decade and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfDecade();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfDecade()\n    {\n        $year = $this->year - $this->year % static::YEARS_PER_DECADE;\n\n        return $this->setDate($year, 1, 1)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of the decade and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfDecade();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfDecade()\n    {\n        $year = $this->year - $this->year % static::YEARS_PER_DECADE + static::YEARS_PER_DECADE - 1;\n\n        return $this->setDate($year, 12, 31)->endOfDay();\n    }\n\n    /**\n     * Resets the date to the first day of the century and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfCentury();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfCentury()\n    {\n        $year = $this->year - ($this->year - 1) % static::YEARS_PER_CENTURY;\n\n        return $this->setDate($year, 1, 1)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of the century and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfCentury();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfCentury()\n    {\n        $year = $this->year - 1 - ($this->year - 1) % static::YEARS_PER_CENTURY + static::YEARS_PER_CENTURY;\n\n        return $this->setDate($year, 12, 31)->endOfDay();\n    }\n\n    /**\n     * Resets the date to the first day of the millennium and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfMillennium();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfMillennium()\n    {\n        $year = $this->year - ($this->year - 1) % static::YEARS_PER_MILLENNIUM;\n\n        return $this->setDate($year, 1, 1)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of the millennium and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfMillennium();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfMillennium()\n    {\n        $year = $this->year - 1 - ($this->year - 1) % static::YEARS_PER_MILLENNIUM + static::YEARS_PER_MILLENNIUM;\n\n        return $this->setDate($year, 12, 31)->endOfDay();\n    }\n\n    /**\n     * Resets the date to the first day of week (defined in $weekStartsAt) and the time to 00:00:00\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->locale('ar')->startOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfWeek(Carbon::SUNDAY) . \"\\n\";\n     * ```\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return static\n     */\n    public function startOfWeek($weekStartsAt = null)\n    {\n        return $this->subDays((7 + $this->dayOfWeek - ($weekStartsAt ?? $this->firstWeekDay)) % 7)->startOfDay();\n    }\n\n    /**\n     * Resets the date to end of week (defined in $weekEndsAt) and time to 23:59:59.999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->locale('ar')->endOfWeek() . \"\\n\";\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfWeek(Carbon::SATURDAY) . \"\\n\";\n     * ```\n     *\n     * @param int $weekEndsAt optional start allow you to specify the day of week to use to end the week\n     *\n     * @return static\n     */\n    public function endOfWeek($weekEndsAt = null)\n    {\n        return $this->addDays((7 - $this->dayOfWeek + ($weekEndsAt ?? $this->lastWeekDay)) % 7)->endOfDay();\n    }\n\n    /**\n     * Modify to start of current hour, minutes and seconds become 0\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfHour();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfHour()\n    {\n        return $this->setTime($this->hour, 0, 0, 0);\n    }\n\n    /**\n     * Modify to end of current hour, minutes and seconds become 59\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfHour();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfHour()\n    {\n        return $this->setTime($this->hour, static::MINUTES_PER_HOUR - 1, static::SECONDS_PER_MINUTE - 1, static::MICROSECONDS_PER_SECOND - 1);\n    }\n\n    /**\n     * Modify to start of current minute, seconds become 0\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->startOfMinute();\n     * ```\n     *\n     * @return static\n     */\n    public function startOfMinute()\n    {\n        return $this->setTime($this->hour, $this->minute, 0, 0);\n    }\n\n    /**\n     * Modify to end of current minute, seconds become 59\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16')->endOfMinute();\n     * ```\n     *\n     * @return static\n     */\n    public function endOfMinute()\n    {\n        return $this->setTime($this->hour, $this->minute, static::SECONDS_PER_MINUTE - 1, static::MICROSECONDS_PER_SECOND - 1);\n    }\n\n    /**\n     * Modify to start of current second, microseconds become 0\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->startOfSecond()\n     *   ->format('H:i:s.u');\n     * ```\n     *\n     * @return static\n     */\n    public function startOfSecond()\n    {\n        return $this->setTime($this->hour, $this->minute, $this->second, 0);\n    }\n\n    /**\n     * Modify to end of current second, microseconds become 999999\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->endOfSecond()\n     *   ->format('H:i:s.u');\n     * ```\n     *\n     * @return static\n     */\n    public function endOfSecond()\n    {\n        return $this->setTime($this->hour, $this->minute, $this->second, static::MICROSECONDS_PER_SECOND - 1);\n    }\n\n    /**\n     * Modify to start of current given unit.\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->startOf('month')\n     *   ->endOf('week', Carbon::FRIDAY);\n     * ```\n     *\n     * @param string            $unit\n     * @param array<int, mixed> $params\n     *\n     * @return static\n     */\n    public function startOf($unit, ...$params)\n    {\n        $ucfUnit = ucfirst(static::singularUnit($unit));\n        $method = \"startOf$ucfUnit\";\n        if (!method_exists($this, $method)) {\n            throw new UnknownUnitException($unit);\n        }\n\n        return $this->$method(...$params);\n    }\n\n    /**\n     * Modify to end of current given unit.\n     *\n     * @example\n     * ```\n     * echo Carbon::parse('2018-07-25 12:45:16.334455')\n     *   ->startOf('month')\n     *   ->endOf('week', Carbon::FRIDAY);\n     * ```\n     *\n     * @param string            $unit\n     * @param array<int, mixed> $params\n     *\n     * @return static\n     */\n    public function endOf($unit, ...$params)\n    {\n        $ucfUnit = ucfirst(static::singularUnit($unit));\n        $method = \"endOf$ucfUnit\";\n        if (!method_exists($this, $method)) {\n            throw new UnknownUnitException($unit);\n        }\n\n        return $this->$method(...$params);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Cast.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Exceptions\\InvalidCastException;\nuse DateTimeInterface;\n\n/**\n * Trait Cast.\n *\n * Utils to cast into an other class.\n */\ntrait Cast\n{\n    /**\n     * Cast the current instance into the given class.\n     *\n     * @param string $className The $className::instance() method will be called to cast the current object.\n     *\n     * @return DateTimeInterface\n     */\n    public function cast(string $className)\n    {\n        if (!method_exists($className, 'instance')) {\n            if (is_a($className, DateTimeInterface::class, true)) {\n                return new $className($this->rawFormat('Y-m-d H:i:s.u'), $this->getTimezone());\n            }\n\n            throw new InvalidCastException(\"$className has not the instance() method needed to cast the date.\");\n        }\n\n        return $className::instance($this);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Comparison.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse BadMethodCallException;\nuse Carbon\\CarbonInterface;\nuse Carbon\\Exceptions\\BadComparisonUnitException;\nuse InvalidArgumentException;\n\n/**\n * Trait Comparison.\n *\n * Comparison utils and testers. All the following methods return booleans.\n * nowWithSameTz\n *\n * Depends on the following methods:\n *\n * @method static        resolveCarbon($date)\n * @method static        copy()\n * @method static        nowWithSameTz()\n * @method static static yesterday($timezone = null)\n * @method static static tomorrow($timezone = null)\n */\ntrait Comparison\n{\n    /** @var bool */\n    protected $endOfTime = false;\n\n    /** @var bool */\n    protected $startOfTime = false;\n\n    /**\n     * Determines if the instance is equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->eq('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->eq(Carbon::parse('2018-07-25 12:45:16')); // true\n     * Carbon::parse('2018-07-25 12:45:16')->eq('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see equalTo()\n     *\n     * @return bool\n     */\n    public function eq($date): bool\n    {\n        return $this->equalTo($date);\n    }\n\n    /**\n     * Determines if the instance is equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->equalTo('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->equalTo(Carbon::parse('2018-07-25 12:45:16')); // true\n     * Carbon::parse('2018-07-25 12:45:16')->equalTo('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function equalTo($date): bool\n    {\n        $this->discourageNull($date);\n        $this->discourageBoolean($date);\n\n        return $this == $this->resolveCarbon($date);\n    }\n\n    /**\n     * Determines if the instance is not equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->ne('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->ne(Carbon::parse('2018-07-25 12:45:16')); // false\n     * Carbon::parse('2018-07-25 12:45:16')->ne('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see notEqualTo()\n     *\n     * @return bool\n     */\n    public function ne($date): bool\n    {\n        return $this->notEqualTo($date);\n    }\n\n    /**\n     * Determines if the instance is not equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->notEqualTo('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->notEqualTo(Carbon::parse('2018-07-25 12:45:16')); // false\n     * Carbon::parse('2018-07-25 12:45:16')->notEqualTo('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function notEqualTo($date): bool\n    {\n        return !$this->equalTo($date);\n    }\n\n    /**\n     * Determines if the instance is greater (after) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->gt('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->gt('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->gt('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see greaterThan()\n     *\n     * @return bool\n     */\n    public function gt($date): bool\n    {\n        return $this->greaterThan($date);\n    }\n\n    /**\n     * Determines if the instance is greater (after) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThan('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThan('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThan('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function greaterThan($date): bool\n    {\n        $this->discourageNull($date);\n        $this->discourageBoolean($date);\n\n        return $this > $this->resolveCarbon($date);\n    }\n\n    /**\n     * Determines if the instance is greater (after) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->isAfter('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->isAfter('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->isAfter('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see greaterThan()\n     *\n     * @return bool\n     */\n    public function isAfter($date): bool\n    {\n        return $this->greaterThan($date);\n    }\n\n    /**\n     * Determines if the instance is greater (after) than or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->gte('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->gte('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->gte('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see greaterThanOrEqualTo()\n     *\n     * @return bool\n     */\n    public function gte($date): bool\n    {\n        return $this->greaterThanOrEqualTo($date);\n    }\n\n    /**\n     * Determines if the instance is greater (after) than or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThanOrEqualTo('2018-07-25 12:45:15'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThanOrEqualTo('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->greaterThanOrEqualTo('2018-07-25 12:45:17'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function greaterThanOrEqualTo($date): bool\n    {\n        $this->discourageNull($date);\n        $this->discourageBoolean($date);\n\n        return $this >= $this->resolveCarbon($date);\n    }\n\n    /**\n     * Determines if the instance is less (before) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lt('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lt('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lt('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see lessThan()\n     *\n     * @return bool\n     */\n    public function lt($date): bool\n    {\n        return $this->lessThan($date);\n    }\n\n    /**\n     * Determines if the instance is less (before) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lessThan('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lessThan('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lessThan('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function lessThan($date): bool\n    {\n        $this->discourageNull($date);\n        $this->discourageBoolean($date);\n\n        return $this < $this->resolveCarbon($date);\n    }\n\n    /**\n     * Determines if the instance is less (before) than another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->isBefore('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->isBefore('2018-07-25 12:45:16'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->isBefore('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see lessThan()\n     *\n     * @return bool\n     */\n    public function isBefore($date): bool\n    {\n        return $this->lessThan($date);\n    }\n\n    /**\n     * Determines if the instance is less (before) or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lte('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lte('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->lte('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see lessThanOrEqualTo()\n     *\n     * @return bool\n     */\n    public function lte($date): bool\n    {\n        return $this->lessThanOrEqualTo($date);\n    }\n\n    /**\n     * Determines if the instance is less (before) or equal to another\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25 12:45:16')->lessThanOrEqualTo('2018-07-25 12:45:15'); // false\n     * Carbon::parse('2018-07-25 12:45:16')->lessThanOrEqualTo('2018-07-25 12:45:16'); // true\n     * Carbon::parse('2018-07-25 12:45:16')->lessThanOrEqualTo('2018-07-25 12:45:17'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return bool\n     */\n    public function lessThanOrEqualTo($date): bool\n    {\n        $this->discourageNull($date);\n        $this->discourageBoolean($date);\n\n        return $this <= $this->resolveCarbon($date);\n    }\n\n    /**\n     * Determines if the instance is between two others.\n     *\n     * The third argument allow you to specify if bounds are included or not (true by default)\n     * but for when you including/excluding bounds may produce different results in your application,\n     * we recommend to use the explicit methods ->betweenIncluded() or ->betweenExcluded() instead.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->between('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->between('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->between('2018-07-25', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->between('2018-07-25', '2018-08-01', false); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     * @param bool                                    $equal Indicates if an equal to comparison should be done\n     *\n     * @return bool\n     */\n    public function between($date1, $date2, $equal = true): bool\n    {\n        $date1 = $this->resolveCarbon($date1);\n        $date2 = $this->resolveCarbon($date2);\n\n        if ($date1->greaterThan($date2)) {\n            [$date1, $date2] = [$date2, $date1];\n        }\n\n        if ($equal) {\n            return $this >= $date1 && $this <= $date2;\n        }\n\n        return $this > $date1 && $this < $date2;\n    }\n\n    /**\n     * Determines if the instance is between two others, bounds included.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->betweenIncluded('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->betweenIncluded('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->betweenIncluded('2018-07-25', '2018-08-01'); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return bool\n     */\n    public function betweenIncluded($date1, $date2): bool\n    {\n        return $this->between($date1, $date2, true);\n    }\n\n    /**\n     * Determines if the instance is between two others, bounds excluded.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->betweenExcluded('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->betweenExcluded('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->betweenExcluded('2018-07-25', '2018-08-01'); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return bool\n     */\n    public function betweenExcluded($date1, $date2): bool\n    {\n        return $this->between($date1, $date2, false);\n    }\n\n    /**\n     * Determines if the instance is between two others\n     *\n     * @example\n     * ```\n     * Carbon::parse('2018-07-25')->isBetween('2018-07-14', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->isBetween('2018-08-01', '2018-08-20'); // false\n     * Carbon::parse('2018-07-25')->isBetween('2018-07-25', '2018-08-01'); // true\n     * Carbon::parse('2018-07-25')->isBetween('2018-07-25', '2018-08-01', false); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     * @param bool                                    $equal Indicates if an equal to comparison should be done\n     *\n     * @return bool\n     */\n    public function isBetween($date1, $date2, $equal = true): bool\n    {\n        return $this->between($date1, $date2, $equal);\n    }\n\n    /**\n     * Determines if the instance is a weekday.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-07-14')->isWeekday(); // false\n     * Carbon::parse('2019-07-15')->isWeekday(); // true\n     * ```\n     *\n     * @return bool\n     */\n    public function isWeekday()\n    {\n        return !$this->isWeekend();\n    }\n\n    /**\n     * Determines if the instance is a weekend day.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-07-14')->isWeekend(); // true\n     * Carbon::parse('2019-07-15')->isWeekend(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isWeekend()\n    {\n        return \\in_array($this->dayOfWeek, static::$weekendDays, true);\n    }\n\n    /**\n     * Determines if the instance is yesterday.\n     *\n     * @example\n     * ```\n     * Carbon::yesterday()->isYesterday(); // true\n     * Carbon::tomorrow()->isYesterday(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isYesterday()\n    {\n        return $this->toDateString() === static::yesterday($this->getTimezone())->toDateString();\n    }\n\n    /**\n     * Determines if the instance is today.\n     *\n     * @example\n     * ```\n     * Carbon::today()->isToday(); // true\n     * Carbon::tomorrow()->isToday(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isToday()\n    {\n        return $this->toDateString() === $this->nowWithSameTz()->toDateString();\n    }\n\n    /**\n     * Determines if the instance is tomorrow.\n     *\n     * @example\n     * ```\n     * Carbon::tomorrow()->isTomorrow(); // true\n     * Carbon::yesterday()->isTomorrow(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isTomorrow()\n    {\n        return $this->toDateString() === static::tomorrow($this->getTimezone())->toDateString();\n    }\n\n    /**\n     * Determines if the instance is in the future, ie. greater (after) than now.\n     *\n     * @example\n     * ```\n     * Carbon::now()->addHours(5)->isFuture(); // true\n     * Carbon::now()->subHours(5)->isFuture(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isFuture()\n    {\n        return $this->greaterThan($this->nowWithSameTz());\n    }\n\n    /**\n     * Determines if the instance is in the past, ie. less (before) than now.\n     *\n     * @example\n     * ```\n     * Carbon::now()->subHours(5)->isPast(); // true\n     * Carbon::now()->addHours(5)->isPast(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isPast()\n    {\n        return $this->lessThan($this->nowWithSameTz());\n    }\n\n    /**\n     * Determines if the instance is a leap year.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2020-01-01')->isLeapYear(); // true\n     * Carbon::parse('2019-01-01')->isLeapYear(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isLeapYear()\n    {\n        return $this->rawFormat('L') === '1';\n    }\n\n    /**\n     * Determines if the instance is a long year (using calendar year).\n     *\n     * ⚠️ This method completely ignores month and day to use the numeric year number,\n     * it's not correct if the exact date matters. For instance as `2019-12-30` is already\n     * in the first week of the 2020 year, if you want to know from this date if ISO week\n     * year 2020 is a long year, use `isLongIsoYear` instead.\n     *\n     * @example\n     * ```\n     * Carbon::create(2015)->isLongYear(); // true\n     * Carbon::create(2016)->isLongYear(); // false\n     * ```\n     *\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Week_dates\n     *\n     * @return bool\n     */\n    public function isLongYear()\n    {\n        return static::create($this->year, 12, 28, 0, 0, 0, $this->tz)->weekOfYear === 53;\n    }\n\n    /**\n     * Determines if the instance is a long year (using ISO 8601 year).\n     *\n     * @example\n     * ```\n     * Carbon::parse('2015-01-01')->isLongIsoYear(); // true\n     * Carbon::parse('2016-01-01')->isLongIsoYear(); // true\n     * Carbon::parse('2016-01-03')->isLongIsoYear(); // false\n     * Carbon::parse('2019-12-29')->isLongIsoYear(); // false\n     * Carbon::parse('2019-12-30')->isLongIsoYear(); // true\n     * ```\n     *\n     * @see https://en.wikipedia.org/wiki/ISO_8601#Week_dates\n     *\n     * @return bool\n     */\n    public function isLongIsoYear()\n    {\n        return static::create($this->isoWeekYear, 12, 28, 0, 0, 0, $this->tz)->weekOfYear === 53;\n    }\n\n    /**\n     * Compares the formatted values of the two dates.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-06-13')->isSameAs('Y-d', Carbon::parse('2019-12-13')); // true\n     * Carbon::parse('2019-06-13')->isSameAs('Y-d', Carbon::parse('2019-06-14')); // false\n     * ```\n     *\n     * @param string                                        $format date formats to compare.\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|string|null $date   instance to compare with or null to use current day.\n     *\n     * @return bool\n     */\n    public function isSameAs($format, $date = null)\n    {\n        return $this->rawFormat($format) === $this->resolveCarbon($date)->rawFormat($format);\n    }\n\n    /**\n     * Determines if the instance is in the current unit given.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-01-13')->isSameUnit('year', Carbon::parse('2019-12-25')); // true\n     * Carbon::parse('2018-12-13')->isSameUnit('year', Carbon::parse('2019-12-25')); // false\n     * ```\n     *\n     * @param string                                 $unit singular unit string\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date instance to compare with or null to use current day.\n     *\n     * @throws BadComparisonUnitException\n     *\n     * @return bool\n     */\n    public function isSameUnit($unit, $date = null)\n    {\n        $units = [\n            // @call isSameUnit\n            'year' => 'Y',\n            // @call isSameUnit\n            'week' => 'o-W',\n            // @call isSameUnit\n            'day' => 'Y-m-d',\n            // @call isSameUnit\n            'hour' => 'Y-m-d H',\n            // @call isSameUnit\n            'minute' => 'Y-m-d H:i',\n            // @call isSameUnit\n            'second' => 'Y-m-d H:i:s',\n            // @call isSameUnit\n            'micro' => 'Y-m-d H:i:s.u',\n            // @call isSameUnit\n            'microsecond' => 'Y-m-d H:i:s.u',\n        ];\n\n        if (isset($units[$unit])) {\n            return $this->isSameAs($units[$unit], $date);\n        }\n\n        if (isset($this->$unit)) {\n            return $this->resolveCarbon($date)->$unit === $this->$unit;\n        }\n\n        if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) {\n            throw new BadComparisonUnitException($unit);\n        }\n\n        return false;\n    }\n\n    /**\n     * Determines if the instance is in the current unit given.\n     *\n     * @example\n     * ```\n     * Carbon::now()->isCurrentUnit('hour'); // true\n     * Carbon::now()->subHours(2)->isCurrentUnit('hour'); // false\n     * ```\n     *\n     * @param string $unit The unit to test.\n     *\n     * @throws BadMethodCallException\n     *\n     * @return bool\n     */\n    public function isCurrentUnit($unit)\n    {\n        return $this->{'isSame'.ucfirst($unit)}();\n    }\n\n    /**\n     * Checks if the passed in date is in the same quarter as the instance quarter (and year if needed).\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2019-03-01')); // true\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2019-04-01')); // false\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2018-03-01')); // false\n     * Carbon::parse('2019-01-12')->isSameQuarter(Carbon::parse('2018-03-01'), false); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|string|null $date       The instance to compare with or null to use current day.\n     * @param bool                                          $ofSameYear Check if it is the same month in the same year.\n     *\n     * @return bool\n     */\n    public function isSameQuarter($date = null, $ofSameYear = true)\n    {\n        $date = $this->resolveCarbon($date);\n\n        return $this->quarter === $date->quarter && (!$ofSameYear || $this->isSameYear($date));\n    }\n\n    /**\n     * Checks if the passed in date is in the same month as the instance´s month.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2019-01-01')); // true\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2019-02-01')); // false\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2018-01-01')); // false\n     * Carbon::parse('2019-01-12')->isSameMonth(Carbon::parse('2018-01-01'), false); // true\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date       The instance to compare with or null to use the current date.\n     * @param bool                                   $ofSameYear Check if it is the same month in the same year.\n     *\n     * @return bool\n     */\n    public function isSameMonth($date = null, $ofSameYear = true)\n    {\n        return $this->isSameAs($ofSameYear ? 'Y-m' : 'm', $date);\n    }\n\n    /**\n     * Checks if this day is a specific day of the week.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-07-17')->isDayOfWeek(Carbon::WEDNESDAY); // true\n     * Carbon::parse('2019-07-17')->isDayOfWeek(Carbon::FRIDAY); // false\n     * Carbon::parse('2019-07-17')->isDayOfWeek('Wednesday'); // true\n     * Carbon::parse('2019-07-17')->isDayOfWeek('Friday'); // false\n     * ```\n     *\n     * @param int $dayOfWeek\n     *\n     * @return bool\n     */\n    public function isDayOfWeek($dayOfWeek)\n    {\n        if (\\is_string($dayOfWeek) && \\defined($constant = static::class.'::'.strtoupper($dayOfWeek))) {\n            $dayOfWeek = \\constant($constant);\n        }\n\n        return $this->dayOfWeek === $dayOfWeek;\n    }\n\n    /**\n     * Check if its the birthday. Compares the date/month values of the two dates.\n     *\n     * @example\n     * ```\n     * Carbon::now()->subYears(5)->isBirthday(); // true\n     * Carbon::now()->subYears(5)->subDay()->isBirthday(); // false\n     * Carbon::parse('2019-06-05')->isBirthday(Carbon::parse('2001-06-05')); // true\n     * Carbon::parse('2019-06-05')->isBirthday(Carbon::parse('2001-06-06')); // false\n     * ```\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date The instance to compare with or null to use current day.\n     *\n     * @return bool\n     */\n    public function isBirthday($date = null)\n    {\n        return $this->isSameAs('md', $date);\n    }\n\n    /**\n     * Check if today is the last day of the Month\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28')->isLastOfMonth(); // true\n     * Carbon::parse('2019-03-28')->isLastOfMonth(); // false\n     * Carbon::parse('2019-03-30')->isLastOfMonth(); // false\n     * Carbon::parse('2019-03-31')->isLastOfMonth(); // true\n     * Carbon::parse('2019-04-30')->isLastOfMonth(); // true\n     * ```\n     *\n     * @return bool\n     */\n    public function isLastOfMonth()\n    {\n        return $this->day === $this->daysInMonth;\n    }\n\n    /**\n     * Check if the instance is start of day / midnight.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 00:00:00')->isStartOfDay(); // true\n     * Carbon::parse('2019-02-28 00:00:00.999999')->isStartOfDay(); // true\n     * Carbon::parse('2019-02-28 00:00:01')->isStartOfDay(); // false\n     * Carbon::parse('2019-02-28 00:00:00.000000')->isStartOfDay(true); // true\n     * Carbon::parse('2019-02-28 00:00:00.000012')->isStartOfDay(true); // false\n     * ```\n     *\n     * @param bool $checkMicroseconds check time at microseconds precision\n     *\n     * @return bool\n     */\n    public function isStartOfDay($checkMicroseconds = false)\n    {\n        /* @var CarbonInterface $this */\n        return $checkMicroseconds\n            ? $this->rawFormat('H:i:s.u') === '00:00:00.000000'\n            : $this->rawFormat('H:i:s') === '00:00:00';\n    }\n\n    /**\n     * Check if the instance is end of day.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 23:59:59.999999')->isEndOfDay(); // true\n     * Carbon::parse('2019-02-28 23:59:59.123456')->isEndOfDay(); // true\n     * Carbon::parse('2019-02-28 23:59:59')->isEndOfDay(); // true\n     * Carbon::parse('2019-02-28 23:59:58.999999')->isEndOfDay(); // false\n     * Carbon::parse('2019-02-28 23:59:59.999999')->isEndOfDay(true); // true\n     * Carbon::parse('2019-02-28 23:59:59.123456')->isEndOfDay(true); // false\n     * Carbon::parse('2019-02-28 23:59:59')->isEndOfDay(true); // false\n     * ```\n     *\n     * @param bool $checkMicroseconds check time at microseconds precision\n     *\n     * @return bool\n     */\n    public function isEndOfDay($checkMicroseconds = false)\n    {\n        /* @var CarbonInterface $this */\n        return $checkMicroseconds\n            ? $this->rawFormat('H:i:s.u') === '23:59:59.999999'\n            : $this->rawFormat('H:i:s') === '23:59:59';\n    }\n\n    /**\n     * Check if the instance is start of day / midnight.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 00:00:00')->isMidnight(); // true\n     * Carbon::parse('2019-02-28 00:00:00.999999')->isMidnight(); // true\n     * Carbon::parse('2019-02-28 00:00:01')->isMidnight(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isMidnight()\n    {\n        return $this->isStartOfDay();\n    }\n\n    /**\n     * Check if the instance is midday.\n     *\n     * @example\n     * ```\n     * Carbon::parse('2019-02-28 11:59:59.999999')->isMidday(); // false\n     * Carbon::parse('2019-02-28 12:00:00')->isMidday(); // true\n     * Carbon::parse('2019-02-28 12:00:00.999999')->isMidday(); // true\n     * Carbon::parse('2019-02-28 12:00:01')->isMidday(); // false\n     * ```\n     *\n     * @return bool\n     */\n    public function isMidday()\n    {\n        /* @var CarbonInterface $this */\n        return $this->rawFormat('G:i:s') === static::$midDayAt.':00:00';\n    }\n\n    /**\n     * Checks if the (date)time string is in a given format.\n     *\n     * @example\n     * ```\n     * Carbon::hasFormat('11:12:45', 'h:i:s'); // true\n     * Carbon::hasFormat('13:12:45', 'h:i:s'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     *\n     * @return bool\n     */\n    public static function hasFormat($date, $format)\n    {\n        // createFromFormat() is known to handle edge cases silently.\n        // E.g. \"1975-5-1\" (Y-n-j) will still be parsed correctly when \"Y-m-d\" is supplied as the format.\n        // To ensure we're really testing against our desired format, perform an additional regex validation.\n\n        return self::matchFormatPattern((string) $date, preg_quote((string) $format, '/'), static::$regexFormats);\n    }\n\n    /**\n     * Checks if the (date)time string is in a given format.\n     *\n     * @example\n     * ```\n     * Carbon::hasFormatWithModifiers('31/08/2015', 'd#m#Y'); // true\n     * Carbon::hasFormatWithModifiers('31/08/2015', 'm#d#Y'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     *\n     * @return bool\n     */\n    public static function hasFormatWithModifiers($date, $format): bool\n    {\n        return self::matchFormatPattern((string) $date, (string) $format, array_merge(static::$regexFormats, static::$regexFormatModifiers));\n    }\n\n    /**\n     * Checks if the (date)time string is in a given format and valid to create a\n     * new instance.\n     *\n     * @example\n     * ```\n     * Carbon::canBeCreatedFromFormat('11:12:45', 'h:i:s'); // true\n     * Carbon::canBeCreatedFromFormat('13:12:45', 'h:i:s'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     *\n     * @return bool\n     */\n    public static function canBeCreatedFromFormat($date, $format)\n    {\n        try {\n            // Try to create a DateTime object. Throws an InvalidArgumentException if the provided time string\n            // doesn't match the format in any way.\n            if (!static::rawCreateFromFormat($format, $date)) {\n                return false;\n            }\n        } catch (InvalidArgumentException $e) {\n            return false;\n        }\n\n        return static::hasFormatWithModifiers($date, $format);\n    }\n\n    /**\n     * Returns true if the current date matches the given string.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2019')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2018')); // false\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2019-06')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('06-02')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('2019-06-02')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('Sunday')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('June')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12:23')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12:23:45')); // true\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12:23:00')); // false\n     * var_dump(Carbon::parse('2019-06-02 12:23:45')->is('12h')); // true\n     * var_dump(Carbon::parse('2019-06-02 15:23:45')->is('3pm')); // true\n     * var_dump(Carbon::parse('2019-06-02 15:23:45')->is('3am')); // false\n     * ```\n     *\n     * @param string $tester day name, month name, hour, date, etc. as string\n     *\n     * @return bool\n     */\n    public function is(string $tester)\n    {\n        $tester = trim($tester);\n\n        if (preg_match('/^\\d+$/', $tester)) {\n            return $this->year === (int) $tester;\n        }\n\n        if (preg_match('/^\\d{3,}-\\d{1,2}$/', $tester)) {\n            return $this->isSameMonth(static::parse($tester));\n        }\n\n        if (preg_match('/^\\d{1,2}-\\d{1,2}$/', $tester)) {\n            return $this->isSameDay(static::parse($this->year.'-'.$tester));\n        }\n\n        $modifier = preg_replace('/(\\d)h$/i', '$1:00', $tester);\n\n        /* @var CarbonInterface $max */\n        $median = static::parse('5555-06-15 12:30:30.555555')->modify($modifier);\n        $current = $this->avoidMutation();\n        /* @var CarbonInterface $other */\n        $other = $this->avoidMutation()->modify($modifier);\n\n        if ($current->eq($other)) {\n            return true;\n        }\n\n        if (preg_match('/\\d:\\d{1,2}:\\d{1,2}$/', $tester)) {\n            return $current->startOfSecond()->eq($other);\n        }\n\n        if (preg_match('/\\d:\\d{1,2}$/', $tester)) {\n            return $current->startOfMinute()->eq($other);\n        }\n\n        if (preg_match('/\\d(?:h|am|pm)$/', $tester)) {\n            return $current->startOfHour()->eq($other);\n        }\n\n        if (preg_match(\n            '/^(?:january|february|march|april|may|june|july|august|september|october|november|december)(?:\\s+\\d+)?$/i',\n            $tester\n        )) {\n            return $current->startOfMonth()->eq($other->startOfMonth());\n        }\n\n        $units = [\n            'month' => [1, 'year'],\n            'day' => [1, 'month'],\n            'hour' => [0, 'day'],\n            'minute' => [0, 'hour'],\n            'second' => [0, 'minute'],\n            'microsecond' => [0, 'second'],\n        ];\n\n        foreach ($units as $unit => [$minimum, $startUnit]) {\n            if ($minimum === $median->$unit) {\n                $current = $current->startOf($startUnit);\n\n                break;\n            }\n        }\n\n        return $current->eq($other);\n    }\n\n    /**\n     * Checks if the (date)time string is in a given format with\n     * given list of pattern replacements.\n     *\n     * @example\n     * ```\n     * Carbon::hasFormat('11:12:45', 'h:i:s'); // true\n     * Carbon::hasFormat('13:12:45', 'h:i:s'); // false\n     * ```\n     *\n     * @param string $date\n     * @param string $format\n     * @param array  $replacements\n     *\n     * @return bool\n     */\n    private static function matchFormatPattern(string $date, string $format, array $replacements): bool\n    {\n        // Preg quote, but remove escaped backslashes since we'll deal with escaped characters in the format string.\n        $regex = str_replace('\\\\\\\\', '\\\\', $format);\n        // Replace not-escaped letters\n        $regex = preg_replace_callback(\n            '/(?<!\\\\\\\\)((?:\\\\\\\\{2})*)(['.implode('', array_keys($replacements)).'])/',\n            function ($match) use ($replacements) {\n                return $match[1].strtr($match[2], $replacements);\n            },\n            $regex\n        );\n        // Replace escaped letters by the letter itself\n        $regex = preg_replace('/(?<!\\\\\\\\)((?:\\\\\\\\{2})*)\\\\\\\\(\\w)/', '$1$2', $regex);\n        // Escape not escaped slashes\n        $regex = preg_replace('#(?<!\\\\\\\\)((?:\\\\\\\\{2})*)/#', '$1\\\\/', $regex);\n\n        return (bool) @preg_match('/^'.$regex.'$/', $date);\n    }\n\n    /**\n     * Returns true if the date was created using CarbonImmutable::startOfTime()\n     *\n     * @return bool\n     */\n    public function isStartOfTime(): bool\n    {\n        return $this->startOfTime ?? false;\n    }\n\n    /**\n     * Returns true if the date was created using CarbonImmutable::endOfTime()\n     *\n     * @return bool\n     */\n    public function isEndOfTime(): bool\n    {\n        return $this->endOfTime ?? false;\n    }\n\n    private function discourageNull($value): void\n    {\n        if ($value === null) {\n            @trigger_error(\"Since 2.61.0, it's deprecated to compare a date to null, meaning of such comparison is ambiguous and will no longer be possible in 3.0.0, you should explicitly pass 'now' or make an other check to eliminate null values.\", \\E_USER_DEPRECATED);\n        }\n    }\n\n    private function discourageBoolean($value): void\n    {\n        if (\\is_bool($value)) {\n            @trigger_error(\"Since 2.61.0, it's deprecated to compare a date to true or false, meaning of such comparison is ambiguous and will no longer be possible in 3.0.0, you should explicitly pass 'now' or make an other check to eliminate boolean values.\", \\E_USER_DEPRECATED);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Converter.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Carbon\\CarbonInterface;\nuse Carbon\\CarbonInterval;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\CarbonPeriodImmutable;\nuse Carbon\\Exceptions\\UnitException;\nuse Closure;\nuse DateTime;\nuse DateTimeImmutable;\nuse ReturnTypeWillChange;\n\n/**\n * Trait Converter.\n *\n * Change date into different string formats and types and\n * handle the string cast.\n *\n * Depends on the following methods:\n *\n * @method static copy()\n */\ntrait Converter\n{\n    use ToStringFormat;\n\n    /**\n     * Returns the formatted date string on success or FALSE on failure.\n     *\n     * @see https://php.net/manual/en/datetime.format.php\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    #[ReturnTypeWillChange]\n    public function format($format)\n    {\n        $function = $this->localFormatFunction ?: static::$formatFunction;\n\n        if (!$function) {\n            return $this->rawFormat($format);\n        }\n\n        if (\\is_string($function) && method_exists($this, $function)) {\n            $function = [$this, $function];\n        }\n\n        return $function(...\\func_get_args());\n    }\n\n    /**\n     * @see https://php.net/manual/en/datetime.format.php\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    public function rawFormat($format)\n    {\n        return parent::format($format);\n    }\n\n    /**\n     * Format the instance as a string using the set format\n     *\n     * @example\n     * ```\n     * echo Carbon::now(); // Carbon instances can be cast to string\n     * ```\n     *\n     * @return string\n     */\n    public function __toString()\n    {\n        $format = $this->localToStringFormat ?? static::$toStringFormat;\n\n        return $format instanceof Closure\n            ? $format($this)\n            : $this->rawFormat($format ?: (\n                \\defined('static::DEFAULT_TO_STRING_FORMAT')\n                    ? static::DEFAULT_TO_STRING_FORMAT\n                    : CarbonInterface::DEFAULT_TO_STRING_FORMAT\n            ));\n    }\n\n    /**\n     * Format the instance as date\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDateString();\n     * ```\n     *\n     * @return string\n     */\n    public function toDateString()\n    {\n        return $this->rawFormat('Y-m-d');\n    }\n\n    /**\n     * Format the instance as a readable date\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toFormattedDateString();\n     * ```\n     *\n     * @return string\n     */\n    public function toFormattedDateString()\n    {\n        return $this->rawFormat('M j, Y');\n    }\n\n    /**\n     * Format the instance with the day, and a readable date\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toFormattedDayDateString();\n     * ```\n     *\n     * @return string\n     */\n    public function toFormattedDayDateString(): string\n    {\n        return $this->rawFormat('D, M j, Y');\n    }\n\n    /**\n     * Format the instance as time\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toTimeString();\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toTimeString($unitPrecision = 'second')\n    {\n        return $this->rawFormat(static::getTimeFormatByPrecision($unitPrecision));\n    }\n\n    /**\n     * Format the instance as date and time\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDateTimeString();\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toDateTimeString($unitPrecision = 'second')\n    {\n        return $this->rawFormat('Y-m-d '.static::getTimeFormatByPrecision($unitPrecision));\n    }\n\n    /**\n     * Return a format from H:i to H:i:s.u according to given unit precision.\n     *\n     * @param string $unitPrecision \"minute\", \"second\", \"millisecond\" or \"microsecond\"\n     *\n     * @return string\n     */\n    public static function getTimeFormatByPrecision($unitPrecision)\n    {\n        switch (static::singularUnit($unitPrecision)) {\n            case 'minute':\n                return 'H:i';\n            case 'second':\n                return 'H:i:s';\n            case 'm':\n            case 'millisecond':\n                return 'H:i:s.v';\n            case 'µ':\n            case 'microsecond':\n                return 'H:i:s.u';\n        }\n\n        throw new UnitException('Precision unit expected among: minute, second, millisecond and microsecond.');\n    }\n\n    /**\n     * Format the instance as date and time T-separated with no timezone\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDateTimeLocalString();\n     * echo \"\\n\";\n     * echo Carbon::now()->toDateTimeLocalString('minute'); // You can specify precision among: minute, second, millisecond and microsecond\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toDateTimeLocalString($unitPrecision = 'second')\n    {\n        return $this->rawFormat('Y-m-d\\T'.static::getTimeFormatByPrecision($unitPrecision));\n    }\n\n    /**\n     * Format the instance with day, date and time\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toDayDateTimeString();\n     * ```\n     *\n     * @return string\n     */\n    public function toDayDateTimeString()\n    {\n        return $this->rawFormat('D, M j, Y g:i A');\n    }\n\n    /**\n     * Format the instance as ATOM\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toAtomString();\n     * ```\n     *\n     * @return string\n     */\n    public function toAtomString()\n    {\n        return $this->rawFormat(DateTime::ATOM);\n    }\n\n    /**\n     * Format the instance as COOKIE\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toCookieString();\n     * ```\n     *\n     * @return string\n     */\n    public function toCookieString()\n    {\n        return $this->rawFormat(DateTime::COOKIE);\n    }\n\n    /**\n     * Format the instance as ISO8601\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toIso8601String();\n     * ```\n     *\n     * @return string\n     */\n    public function toIso8601String()\n    {\n        return $this->toAtomString();\n    }\n\n    /**\n     * Format the instance as RFC822\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc822String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc822String()\n    {\n        return $this->rawFormat(DateTime::RFC822);\n    }\n\n    /**\n     * Convert the instance to UTC and return as Zulu ISO8601\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toIso8601ZuluString();\n     * ```\n     *\n     * @param string $unitPrecision\n     *\n     * @return string\n     */\n    public function toIso8601ZuluString($unitPrecision = 'second')\n    {\n        return $this->avoidMutation()\n            ->utc()\n            ->rawFormat('Y-m-d\\T'.static::getTimeFormatByPrecision($unitPrecision).'\\Z');\n    }\n\n    /**\n     * Format the instance as RFC850\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc850String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc850String()\n    {\n        return $this->rawFormat(DateTime::RFC850);\n    }\n\n    /**\n     * Format the instance as RFC1036\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc1036String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc1036String()\n    {\n        return $this->rawFormat(DateTime::RFC1036);\n    }\n\n    /**\n     * Format the instance as RFC1123\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc1123String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc1123String()\n    {\n        return $this->rawFormat(DateTime::RFC1123);\n    }\n\n    /**\n     * Format the instance as RFC2822\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc2822String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc2822String()\n    {\n        return $this->rawFormat(DateTime::RFC2822);\n    }\n\n    /**\n     * Format the instance as RFC3339\n     *\n     * @param bool $extended\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc3339String() . \"\\n\";\n     * echo Carbon::now()->toRfc3339String(true) . \"\\n\";\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc3339String($extended = false)\n    {\n        $format = DateTime::RFC3339;\n        if ($extended) {\n            $format = DateTime::RFC3339_EXTENDED;\n        }\n\n        return $this->rawFormat($format);\n    }\n\n    /**\n     * Format the instance as RSS\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRssString();\n     * ```\n     *\n     * @return string\n     */\n    public function toRssString()\n    {\n        return $this->rawFormat(DateTime::RSS);\n    }\n\n    /**\n     * Format the instance as W3C\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toW3cString();\n     * ```\n     *\n     * @return string\n     */\n    public function toW3cString()\n    {\n        return $this->rawFormat(DateTime::W3C);\n    }\n\n    /**\n     * Format the instance as RFC7231\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toRfc7231String();\n     * ```\n     *\n     * @return string\n     */\n    public function toRfc7231String()\n    {\n        return $this->avoidMutation()\n            ->setTimezone('GMT')\n            ->rawFormat(\\defined('static::RFC7231_FORMAT') ? static::RFC7231_FORMAT : CarbonInterface::RFC7231_FORMAT);\n    }\n\n    /**\n     * Get default array representation.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toArray());\n     * ```\n     *\n     * @return array\n     */\n    public function toArray()\n    {\n        return [\n            'year' => $this->year,\n            'month' => $this->month,\n            'day' => $this->day,\n            'dayOfWeek' => $this->dayOfWeek,\n            'dayOfYear' => $this->dayOfYear,\n            'hour' => $this->hour,\n            'minute' => $this->minute,\n            'second' => $this->second,\n            'micro' => $this->micro,\n            'timestamp' => $this->timestamp,\n            'formatted' => $this->rawFormat(\\defined('static::DEFAULT_TO_STRING_FORMAT') ? static::DEFAULT_TO_STRING_FORMAT : CarbonInterface::DEFAULT_TO_STRING_FORMAT),\n            'timezone' => $this->timezone,\n        ];\n    }\n\n    /**\n     * Get default object representation.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toObject());\n     * ```\n     *\n     * @return object\n     */\n    public function toObject()\n    {\n        return (object) $this->toArray();\n    }\n\n    /**\n     * Returns english human readable complete date string.\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->toString();\n     * ```\n     *\n     * @return string\n     */\n    public function toString()\n    {\n        return $this->avoidMutation()->locale('en')->isoFormat('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    /**\n     * Return the ISO-8601 string (ex: 1977-04-22T06:00:00Z, if $keepOffset truthy, offset will be kept:\n     * 1977-04-22T01:00:00-05:00).\n     *\n     * @example\n     * ```\n     * echo Carbon::now('America/Toronto')->toISOString() . \"\\n\";\n     * echo Carbon::now('America/Toronto')->toISOString(true) . \"\\n\";\n     * ```\n     *\n     * @param bool $keepOffset Pass true to keep the date offset. Else forced to UTC.\n     *\n     * @return null|string\n     */\n    public function toISOString($keepOffset = false)\n    {\n        if (!$this->isValid()) {\n            return null;\n        }\n\n        $yearFormat = $this->year < 0 || $this->year > 9999 ? 'YYYYYY' : 'YYYY';\n        $tzFormat = $keepOffset ? 'Z' : '[Z]';\n        $date = $keepOffset ? $this : $this->avoidMutation()->utc();\n\n        return $date->isoFormat(\"$yearFormat-MM-DD[T]HH:mm:ss.SSSSSS$tzFormat\");\n    }\n\n    /**\n     * Return the ISO-8601 string (ex: 1977-04-22T06:00:00Z) with UTC timezone.\n     *\n     * @example\n     * ```\n     * echo Carbon::now('America/Toronto')->toJSON();\n     * ```\n     *\n     * @return null|string\n     */\n    public function toJSON()\n    {\n        return $this->toISOString();\n    }\n\n    /**\n     * Return native DateTime PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toDateTime());\n     * ```\n     *\n     * @return DateTime\n     */\n    public function toDateTime()\n    {\n        return new DateTime($this->rawFormat('Y-m-d H:i:s.u'), $this->getTimezone());\n    }\n\n    /**\n     * Return native toDateTimeImmutable PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toDateTimeImmutable());\n     * ```\n     *\n     * @return DateTimeImmutable\n     */\n    public function toDateTimeImmutable()\n    {\n        return new DateTimeImmutable($this->rawFormat('Y-m-d H:i:s.u'), $this->getTimezone());\n    }\n\n    /**\n     * @alias toDateTime\n     *\n     * Return native DateTime PHP object matching the current instance.\n     *\n     * @example\n     * ```\n     * var_dump(Carbon::now()->toDate());\n     * ```\n     *\n     * @return DateTime\n     */\n    public function toDate()\n    {\n        return $this->toDateTime();\n    }\n\n    /**\n     * Create a iterable CarbonPeriod object from current date to a given end date (and optional interval).\n     *\n     * @param \\DateTimeInterface|Carbon|CarbonImmutable|int|null $end      period end date or recurrences count if int\n     * @param int|\\DateInterval|string|null                      $interval period default interval or number of the given $unit\n     * @param string|null                                        $unit     if specified, $interval must be an integer\n     *\n     * @return CarbonPeriod\n     */\n    public function toPeriod($end = null, $interval = null, $unit = null)\n    {\n        if ($unit) {\n            $interval = CarbonInterval::make(\"$interval \".static::pluralUnit($unit));\n        }\n\n        $period = ($this->isMutable() ? new CarbonPeriod() : new CarbonPeriodImmutable())\n            ->setDateClass(static::class)\n            ->setStartDate($this);\n\n        if ($interval) {\n            $period = $period->setDateInterval($interval);\n        }\n\n        if (\\is_int($end) || (\\is_string($end) && ctype_digit($end))) {\n            $period = $period->setRecurrences($end);\n        } elseif ($end) {\n            $period = $period->setEndDate($end);\n        }\n\n        return $period;\n    }\n\n    /**\n     * Create a iterable CarbonPeriod object from current date to a given end date (and optional interval).\n     *\n     * @param \\DateTimeInterface|Carbon|CarbonImmutable|null $end      period end date\n     * @param int|\\DateInterval|string|null                  $interval period default interval or number of the given $unit\n     * @param string|null                                    $unit     if specified, $interval must be an integer\n     *\n     * @return CarbonPeriod\n     */\n    public function range($end = null, $interval = null, $unit = null)\n    {\n        return $this->toPeriod($end, $interval, $unit);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Carbon\\CarbonInterface;\nuse Carbon\\Exceptions\\InvalidDateException;\nuse Carbon\\Exceptions\\InvalidFormatException;\nuse Carbon\\Exceptions\\OutOfRangeException;\nuse Carbon\\Translator;\nuse Closure;\nuse DateMalformedStringException;\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse DateTimeZone;\nuse Exception;\nuse ReturnTypeWillChange;\n\n/**\n * Trait Creator.\n *\n * Static creators.\n *\n * Depends on the following methods:\n *\n * @method static Carbon|CarbonImmutable getTestNow()\n */\ntrait Creator\n{\n    use ObjectInitialisation;\n\n    /**\n     * The errors that can occur.\n     *\n     * @var array\n     */\n    protected static $lastErrors;\n\n    /**\n     * Create a new Carbon instance.\n     *\n     * Please see the testing aids section (specifically static::setTestNow())\n     * for more on the possibility of this constructor returning a test instance.\n     *\n     * @param DateTimeInterface|string|null $time\n     * @param DateTimeZone|string|null      $tz\n     *\n     * @throws InvalidFormatException\n     */\n    public function __construct($time = null, $tz = null)\n    {\n        if ($time instanceof DateTimeInterface) {\n            $time = $this->constructTimezoneFromDateTime($time, $tz)->format('Y-m-d H:i:s.u');\n        }\n\n        if (is_numeric($time) && (!\\is_string($time) || !preg_match('/^\\d{1,14}$/', $time))) {\n            $time = static::createFromTimestampUTC($time)->format('Y-m-d\\TH:i:s.uP');\n        }\n\n        // If the class has a test now set and we are trying to create a now()\n        // instance then override as required\n        $isNow = empty($time) || $time === 'now';\n\n        if (method_exists(static::class, 'hasTestNow') &&\n            method_exists(static::class, 'getTestNow') &&\n            static::hasTestNow() &&\n            ($isNow || static::hasRelativeKeywords($time))\n        ) {\n            static::mockConstructorParameters($time, $tz);\n        }\n\n        // Work-around for PHP bug https://bugs.php.net/bug.php?id=67127\n        if (!str_contains((string) .1, '.')) {\n            $locale = setlocale(LC_NUMERIC, '0'); // @codeCoverageIgnore\n            setlocale(LC_NUMERIC, 'C'); // @codeCoverageIgnore\n        }\n\n        try {\n            parent::__construct($time ?: 'now', static::safeCreateDateTimeZone($tz) ?: null);\n        } catch (Exception $exception) {\n            throw new InvalidFormatException($exception->getMessage(), 0, $exception);\n        }\n\n        $this->constructedObjectId = spl_object_hash($this);\n\n        if (isset($locale)) {\n            setlocale(LC_NUMERIC, $locale); // @codeCoverageIgnore\n        }\n\n        self::setLastErrors(parent::getLastErrors());\n    }\n\n    /**\n     * Get timezone from a datetime instance.\n     *\n     * @param DateTimeInterface        $date\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return DateTimeInterface\n     */\n    private function constructTimezoneFromDateTime(DateTimeInterface $date, &$tz)\n    {\n        if ($tz !== null) {\n            $safeTz = static::safeCreateDateTimeZone($tz);\n\n            if ($safeTz) {\n                return ($date instanceof DateTimeImmutable ? $date : clone $date)->setTimezone($safeTz);\n            }\n\n            return $date;\n        }\n\n        $tz = $date->getTimezone();\n\n        return $date;\n    }\n\n    /**\n     * Update constructedObjectId on cloned.\n     */\n    public function __clone()\n    {\n        $this->constructedObjectId = spl_object_hash($this);\n    }\n\n    /**\n     * Create a Carbon instance from a DateTime one.\n     *\n     * @param DateTimeInterface $date\n     *\n     * @return static\n     */\n    public static function instance($date)\n    {\n        if ($date instanceof static) {\n            return clone $date;\n        }\n\n        static::expectDateTime($date);\n\n        $instance = new static($date->format('Y-m-d H:i:s.u'), $date->getTimezone());\n\n        if ($date instanceof CarbonInterface) {\n            $settings = $date->getSettings();\n\n            if (!$date->hasLocalTranslator()) {\n                unset($settings['locale']);\n            }\n\n            $instance->settings($settings);\n        }\n\n        return $instance;\n    }\n\n    /**\n     * Create a carbon instance from a string.\n     *\n     * This is an alias for the constructor that allows better fluent syntax\n     * as it allows you to do Carbon::parse('Monday next week')->fn() rather\n     * than (new Carbon('Monday next week'))->fn().\n     *\n     * @param string|DateTimeInterface|null $time\n     * @param DateTimeZone|string|null      $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function rawParse($time = null, $tz = null)\n    {\n        if ($time instanceof DateTimeInterface) {\n            return static::instance($time);\n        }\n\n        try {\n            return new static($time, $tz);\n        } catch (Exception $exception) {\n            // @codeCoverageIgnoreStart\n            try {\n                $date = @static::now($tz)->change($time);\n            } catch (DateMalformedStringException $ignoredException) {\n                $date = null;\n            }\n            // @codeCoverageIgnoreEnd\n\n            if (!$date) {\n                throw new InvalidFormatException(\"Could not parse '$time': \".$exception->getMessage(), 0, $exception);\n            }\n\n            return $date;\n        }\n    }\n\n    /**\n     * Create a carbon instance from a string.\n     *\n     * This is an alias for the constructor that allows better fluent syntax\n     * as it allows you to do Carbon::parse('Monday next week')->fn() rather\n     * than (new Carbon('Monday next week'))->fn().\n     *\n     * @param string|DateTimeInterface|null $time\n     * @param DateTimeZone|string|null      $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function parse($time = null, $tz = null)\n    {\n        $function = static::$parseFunction;\n\n        if (!$function) {\n            return static::rawParse($time, $tz);\n        }\n\n        if (\\is_string($function) && method_exists(static::class, $function)) {\n            $function = [static::class, $function];\n        }\n\n        return $function(...\\func_get_args());\n    }\n\n    /**\n     * Create a carbon instance from a localized string (in French, Japanese, Arabic, etc.).\n     *\n     * @param string                   $time   date/time string in the given language (may also contain English).\n     * @param string|null              $locale if locale is null or not specified, current global locale will be\n     *                                         used instead.\n     * @param DateTimeZone|string|null $tz     optional timezone for the new instance.\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function parseFromLocale($time, $locale = null, $tz = null)\n    {\n        return static::rawParse(static::translateTimeString($time, $locale, 'en'), $tz);\n    }\n\n    /**\n     * Get a Carbon instance for the current date and time.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function now($tz = null)\n    {\n        return new static(null, $tz);\n    }\n\n    /**\n     * Create a Carbon instance for today.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function today($tz = null)\n    {\n        return static::rawParse('today', $tz);\n    }\n\n    /**\n     * Create a Carbon instance for tomorrow.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function tomorrow($tz = null)\n    {\n        return static::rawParse('tomorrow', $tz);\n    }\n\n    /**\n     * Create a Carbon instance for yesterday.\n     *\n     * @param DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function yesterday($tz = null)\n    {\n        return static::rawParse('yesterday', $tz);\n    }\n\n    /**\n     * Create a Carbon instance for the greatest supported date.\n     *\n     * @return static\n     */\n    public static function maxValue()\n    {\n        if (self::$PHPIntSize === 4) {\n            // 32 bit\n            return static::createFromTimestamp(PHP_INT_MAX); // @codeCoverageIgnore\n        }\n\n        // 64 bit\n        return static::create(9999, 12, 31, 23, 59, 59);\n    }\n\n    /**\n     * Create a Carbon instance for the lowest supported date.\n     *\n     * @return static\n     */\n    public static function minValue()\n    {\n        if (self::$PHPIntSize === 4) {\n            // 32 bit\n            return static::createFromTimestamp(~PHP_INT_MAX); // @codeCoverageIgnore\n        }\n\n        // 64 bit\n        return static::create(1, 1, 1, 0, 0, 0);\n    }\n\n    private static function assertBetween($unit, $value, $min, $max)\n    {\n        if (static::isStrictModeEnabled() && ($value < $min || $value > $max)) {\n            throw new OutOfRangeException($unit, $min, $max, $value);\n        }\n    }\n\n    private static function createNowInstance($tz)\n    {\n        if (!static::hasTestNow()) {\n            return static::now($tz);\n        }\n\n        $now = static::getTestNow();\n\n        if ($now instanceof Closure) {\n            return $now(static::now($tz));\n        }\n\n        return $now->avoidMutation()->tz($tz);\n    }\n\n    /**\n     * Create a new Carbon instance from a specific date and time.\n     *\n     * If any of $year, $month or $day are set to null their now() values will\n     * be used.\n     *\n     * If $hour is null it will be set to its now() value and the default\n     * values for $minute and $second will be their now() values.\n     *\n     * If $hour is not null then the default values for $minute and $second\n     * will be 0.\n     *\n     * @param DateTimeInterface|int|null $year\n     * @param int|null                   $month\n     * @param int|null                   $day\n     * @param int|null                   $hour\n     * @param int|null                   $minute\n     * @param int|null                   $second\n     * @param DateTimeZone|string|null   $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function create($year = 0, $month = 1, $day = 1, $hour = 0, $minute = 0, $second = 0, $tz = null)\n    {\n        if ((\\is_string($year) && !is_numeric($year)) || $year instanceof DateTimeInterface) {\n            return static::parse($year, $tz ?: (\\is_string($month) || $month instanceof DateTimeZone ? $month : null));\n        }\n\n        $defaults = null;\n        $getDefault = function ($unit) use ($tz, &$defaults) {\n            if ($defaults === null) {\n                $now = self::createNowInstance($tz);\n\n                $defaults = array_combine([\n                    'year',\n                    'month',\n                    'day',\n                    'hour',\n                    'minute',\n                    'second',\n                ], explode('-', $now->rawFormat('Y-n-j-G-i-s.u')));\n            }\n\n            return $defaults[$unit];\n        };\n\n        $year = $year ?? $getDefault('year');\n        $month = $month ?? $getDefault('month');\n        $day = $day ?? $getDefault('day');\n        $hour = $hour ?? $getDefault('hour');\n        $minute = $minute ?? $getDefault('minute');\n        $second = (float) ($second ?? $getDefault('second'));\n\n        self::assertBetween('month', $month, 0, 99);\n        self::assertBetween('day', $day, 0, 99);\n        self::assertBetween('hour', $hour, 0, 99);\n        self::assertBetween('minute', $minute, 0, 99);\n        self::assertBetween('second', $second, 0, 99);\n\n        $fixYear = null;\n\n        if ($year < 0) {\n            $fixYear = $year;\n            $year = 0;\n        } elseif ($year > 9999) {\n            $fixYear = $year - 9999;\n            $year = 9999;\n        }\n\n        $second = ($second < 10 ? '0' : '').number_format($second, 6);\n        $instance = static::rawCreateFromFormat('!Y-n-j G:i:s.u', sprintf('%s-%s-%s %s:%02s:%02s', $year, $month, $day, $hour, $minute, $second), $tz);\n\n        if ($fixYear !== null) {\n            $instance = $instance->addYears($fixYear);\n        }\n\n        return $instance;\n    }\n\n    /**\n     * Create a new safe Carbon instance from a specific date and time.\n     *\n     * If any of $year, $month or $day are set to null their now() values will\n     * be used.\n     *\n     * If $hour is null it will be set to its now() value and the default\n     * values for $minute and $second will be their now() values.\n     *\n     * If $hour is not null then the default values for $minute and $second\n     * will be 0.\n     *\n     * If one of the set values is not valid, an InvalidDateException\n     * will be thrown.\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param int|null                 $hour\n     * @param int|null                 $minute\n     * @param int|null                 $second\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidDateException\n     *\n     * @return static|false\n     */\n    public static function createSafe($year = null, $month = null, $day = null, $hour = null, $minute = null, $second = null, $tz = null)\n    {\n        $fields = static::getRangesByUnit();\n\n        foreach ($fields as $field => $range) {\n            if ($$field !== null && (!\\is_int($$field) || $$field < $range[0] || $$field > $range[1])) {\n                if (static::isStrictModeEnabled()) {\n                    throw new InvalidDateException($field, $$field);\n                }\n\n                return false;\n            }\n        }\n\n        $instance = static::create($year, $month, $day, $hour, $minute, $second, $tz);\n\n        foreach (array_reverse($fields) as $field => $range) {\n            if ($$field !== null && (!\\is_int($$field) || $$field !== $instance->$field)) {\n                if (static::isStrictModeEnabled()) {\n                    throw new InvalidDateException($field, $$field);\n                }\n\n                return false;\n            }\n        }\n\n        return $instance;\n    }\n\n    /**\n     * Create a new Carbon instance from a specific date and time using strict validation.\n     *\n     * @see create()\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param int|null                 $hour\n     * @param int|null                 $minute\n     * @param int|null                 $second\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createStrict(?int $year = 0, ?int $month = 1, ?int $day = 1, ?int $hour = 0, ?int $minute = 0, ?int $second = 0, $tz = null): self\n    {\n        $initialStrictMode = static::isStrictModeEnabled();\n        static::useStrictMode(true);\n\n        try {\n            $date = static::create($year, $month, $day, $hour, $minute, $second, $tz);\n        } finally {\n            static::useStrictMode($initialStrictMode);\n        }\n\n        return $date;\n    }\n\n    /**\n     * Create a Carbon instance from just a date. The time portion is set to now.\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createFromDate($year = null, $month = null, $day = null, $tz = null)\n    {\n        return static::create($year, $month, $day, null, null, null, $tz);\n    }\n\n    /**\n     * Create a Carbon instance from just a date. The time portion is set to midnight.\n     *\n     * @param int|null                 $year\n     * @param int|null                 $month\n     * @param int|null                 $day\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createMidnightDate($year = null, $month = null, $day = null, $tz = null)\n    {\n        return static::create($year, $month, $day, 0, 0, 0, $tz);\n    }\n\n    /**\n     * Create a Carbon instance from just a time. The date portion is set to today.\n     *\n     * @param int|null                 $hour\n     * @param int|null                 $minute\n     * @param int|null                 $second\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createFromTime($hour = 0, $minute = 0, $second = 0, $tz = null)\n    {\n        return static::create(null, null, null, $hour, $minute, $second, $tz);\n    }\n\n    /**\n     * Create a Carbon instance from a time string. The date portion is set to today.\n     *\n     * @param string                   $time\n     * @param DateTimeZone|string|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function createFromTimeString($time, $tz = null)\n    {\n        return static::today($tz)->setTimeFromTimeString($time);\n    }\n\n    /**\n     * @param string                         $format     Datetime format\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $originalTz\n     *\n     * @return DateTimeInterface|false\n     */\n    private static function createFromFormatAndTimezone($format, $time, $originalTz)\n    {\n        // Work-around for https://bugs.php.net/bug.php?id=75577\n        // @codeCoverageIgnoreStart\n        if (version_compare(PHP_VERSION, '7.3.0-dev', '<')) {\n            $format = str_replace('.v', '.u', $format);\n        }\n        // @codeCoverageIgnoreEnd\n\n        if ($originalTz === null) {\n            return parent::createFromFormat($format, (string) $time);\n        }\n\n        $tz = \\is_int($originalTz)\n            ? @timezone_name_from_abbr('', (int) ($originalTz * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE), 1)\n            : $originalTz;\n\n        $tz = static::safeCreateDateTimeZone($tz, $originalTz);\n\n        if ($tz === false) {\n            return false;\n        }\n\n        return parent::createFromFormat($format, (string) $time, $tz);\n    }\n\n    /**\n     * Create a Carbon instance from a specific format.\n     *\n     * @param string                         $format Datetime format\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function rawCreateFromFormat($format, $time, $tz = null)\n    {\n        // Work-around for https://bugs.php.net/bug.php?id=80141\n        $format = preg_replace('/(?<!\\\\\\\\)((?:\\\\\\\\{2})*)c/', '$1Y-m-d\\TH:i:sP', $format);\n\n        if (preg_match('/(?<!\\\\\\\\)(?:\\\\\\\\{2})*(a|A)/', $format, $aMatches, PREG_OFFSET_CAPTURE) &&\n            preg_match('/(?<!\\\\\\\\)(?:\\\\\\\\{2})*(h|g|H|G)/', $format, $hMatches, PREG_OFFSET_CAPTURE) &&\n            $aMatches[1][1] < $hMatches[1][1] &&\n            preg_match('/(am|pm|AM|PM)/', $time)\n        ) {\n            $format = preg_replace('/^(.*)(?<!\\\\\\\\)((?:\\\\\\\\{2})*)(a|A)(.*)$/U', '$1$2$4 $3', $format);\n            $time = preg_replace('/^(.*)(am|pm|AM|PM)(.*)$/U', '$1$3 $2', $time);\n        }\n\n        if ($tz === false) {\n            $tz = null;\n        }\n\n        // First attempt to create an instance, so that error messages are based on the unmodified format.\n        $date = self::createFromFormatAndTimezone($format, $time, $tz);\n        $lastErrors = parent::getLastErrors();\n        /** @var \\Carbon\\CarbonImmutable|\\Carbon\\Carbon|null $mock */\n        $mock = static::getMockedTestNow($tz);\n\n        if ($mock && $date instanceof DateTimeInterface) {\n            // Set timezone from mock if custom timezone was neither given directly nor as a part of format.\n            // First let's skip the part that will be ignored by the parser.\n            $nonEscaped = '(?<!\\\\\\\\)(\\\\\\\\{2})*';\n\n            $nonIgnored = preg_replace(\"/^.*{$nonEscaped}!/s\", '', $format);\n\n            if ($tz === null && !preg_match(\"/{$nonEscaped}[eOPT]/\", $nonIgnored)) {\n                $tz = clone $mock->getTimezone();\n            }\n\n            $mock = $mock->copy();\n\n            // Prepend mock datetime only if the format does not contain non escaped unix epoch reset flag.\n            if (!preg_match(\"/{$nonEscaped}[!|]/\", $format)) {\n                if (preg_match('/[HhGgisvuB]/', $format)) {\n                    $mock = $mock->setTime(0, 0);\n                }\n\n                $format = static::MOCK_DATETIME_FORMAT.' '.$format;\n                $time = ($mock instanceof self ? $mock->rawFormat(static::MOCK_DATETIME_FORMAT) : $mock->format(static::MOCK_DATETIME_FORMAT)).' '.$time;\n            }\n\n            // Regenerate date from the modified format to base result on the mocked instance instead of now.\n            $date = self::createFromFormatAndTimezone($format, $time, $tz);\n        }\n\n        if ($date instanceof DateTimeInterface) {\n            $instance = static::instance($date);\n            $instance::setLastErrors($lastErrors);\n\n            return $instance;\n        }\n\n        if (static::isStrictModeEnabled()) {\n            throw new InvalidFormatException(implode(PHP_EOL, $lastErrors['errors']));\n        }\n\n        return false;\n    }\n\n    /**\n     * Create a Carbon instance from a specific format.\n     *\n     * @param string                         $format Datetime format\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    #[ReturnTypeWillChange]\n    public static function createFromFormat($format, $time, $tz = null)\n    {\n        $function = static::$createFromFormatFunction;\n\n        if (!$function) {\n            return static::rawCreateFromFormat($format, $time, $tz);\n        }\n\n        if (\\is_string($function) && method_exists(static::class, $function)) {\n            $function = [static::class, $function];\n        }\n\n        return $function(...\\func_get_args());\n    }\n\n    /**\n     * Create a Carbon instance from a specific ISO format (same replacements as ->isoFormat()).\n     *\n     * @param string                                             $format     Datetime format\n     * @param string                                             $time\n     * @param DateTimeZone|string|false|null                     $tz         optional timezone\n     * @param string|null                                        $locale     locale to be used for LTS, LT, LL, LLL, etc. macro-formats (en by fault, unneeded if no such macro-format in use)\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator optional custom translator to use for macro-formats\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function createFromIsoFormat($format, $time, $tz = null, $locale = 'en', $translator = null)\n    {\n        $format = preg_replace_callback('/(?<!\\\\\\\\)(\\\\\\\\{2})*(LTS|LT|[Ll]{1,4})/', function ($match) use ($locale, $translator) {\n            [$code] = $match;\n\n            static $formats = null;\n\n            if ($formats === null) {\n                $translator = $translator ?: Translator::get($locale);\n\n                $formats = [\n                    'LT' => static::getTranslationMessageWith($translator, 'formats.LT', $locale, 'h:mm A'),\n                    'LTS' => static::getTranslationMessageWith($translator, 'formats.LTS', $locale, 'h:mm:ss A'),\n                    'L' => static::getTranslationMessageWith($translator, 'formats.L', $locale, 'MM/DD/YYYY'),\n                    'LL' => static::getTranslationMessageWith($translator, 'formats.LL', $locale, 'MMMM D, YYYY'),\n                    'LLL' => static::getTranslationMessageWith($translator, 'formats.LLL', $locale, 'MMMM D, YYYY h:mm A'),\n                    'LLLL' => static::getTranslationMessageWith($translator, 'formats.LLLL', $locale, 'dddd, MMMM D, YYYY h:mm A'),\n                ];\n            }\n\n            return $formats[$code] ?? preg_replace_callback(\n                '/MMMM|MM|DD|dddd/',\n                function ($code) {\n                    return mb_substr($code[0], 1);\n                },\n                $formats[strtoupper($code)] ?? ''\n            );\n        }, $format);\n\n        $format = preg_replace_callback('/(?<!\\\\\\\\)(\\\\\\\\{2})*('.CarbonInterface::ISO_FORMAT_REGEXP.'|[A-Za-z])/', function ($match) {\n            [$code] = $match;\n\n            static $replacements = null;\n\n            if ($replacements === null) {\n                $replacements = [\n                    'OD' => 'd',\n                    'OM' => 'M',\n                    'OY' => 'Y',\n                    'OH' => 'G',\n                    'Oh' => 'g',\n                    'Om' => 'i',\n                    'Os' => 's',\n                    'D' => 'd',\n                    'DD' => 'd',\n                    'Do' => 'd',\n                    'd' => '!',\n                    'dd' => '!',\n                    'ddd' => 'D',\n                    'dddd' => 'D',\n                    'DDD' => 'z',\n                    'DDDD' => 'z',\n                    'DDDo' => 'z',\n                    'e' => '!',\n                    'E' => '!',\n                    'H' => 'G',\n                    'HH' => 'H',\n                    'h' => 'g',\n                    'hh' => 'h',\n                    'k' => 'G',\n                    'kk' => 'G',\n                    'hmm' => 'gi',\n                    'hmmss' => 'gis',\n                    'Hmm' => 'Gi',\n                    'Hmmss' => 'Gis',\n                    'm' => 'i',\n                    'mm' => 'i',\n                    'a' => 'a',\n                    'A' => 'a',\n                    's' => 's',\n                    'ss' => 's',\n                    'S' => '*',\n                    'SS' => '*',\n                    'SSS' => '*',\n                    'SSSS' => '*',\n                    'SSSSS' => '*',\n                    'SSSSSS' => 'u',\n                    'SSSSSSS' => 'u*',\n                    'SSSSSSSS' => 'u*',\n                    'SSSSSSSSS' => 'u*',\n                    'M' => 'm',\n                    'MM' => 'm',\n                    'MMM' => 'M',\n                    'MMMM' => 'M',\n                    'Mo' => 'm',\n                    'Q' => '!',\n                    'Qo' => '!',\n                    'G' => '!',\n                    'GG' => '!',\n                    'GGG' => '!',\n                    'GGGG' => '!',\n                    'GGGGG' => '!',\n                    'g' => '!',\n                    'gg' => '!',\n                    'ggg' => '!',\n                    'gggg' => '!',\n                    'ggggg' => '!',\n                    'W' => '!',\n                    'WW' => '!',\n                    'Wo' => '!',\n                    'w' => '!',\n                    'ww' => '!',\n                    'wo' => '!',\n                    'x' => 'U???',\n                    'X' => 'U',\n                    'Y' => 'Y',\n                    'YY' => 'y',\n                    'YYYY' => 'Y',\n                    'YYYYY' => 'Y',\n                    'YYYYYY' => 'Y',\n                    'z' => 'e',\n                    'zz' => 'e',\n                    'Z' => 'e',\n                    'ZZ' => 'e',\n                ];\n            }\n\n            $format = $replacements[$code] ?? '?';\n\n            if ($format === '!') {\n                throw new InvalidFormatException(\"Format $code not supported for creation.\");\n            }\n\n            return $format;\n        }, $format);\n\n        return static::rawCreateFromFormat($format, $time, $tz);\n    }\n\n    /**\n     * Create a Carbon instance from a specific format and a string in a given language.\n     *\n     * @param string                         $format Datetime format\n     * @param string                         $locale\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function createFromLocaleFormat($format, $locale, $time, $tz = null)\n    {\n        $format = preg_replace_callback(\n            '/(?:\\\\\\\\[a-zA-Z]|[bfkqCEJKQRV]){2,}/',\n            static function (array $match) use ($locale): string {\n                $word = str_replace('\\\\', '', $match[0]);\n                $translatedWord = static::translateTimeString($word, $locale, 'en');\n\n                return $word === $translatedWord\n                    ? $match[0]\n                    : preg_replace('/[a-zA-Z]/', '\\\\\\\\$0', $translatedWord);\n            },\n            $format\n        );\n\n        return static::rawCreateFromFormat($format, static::translateTimeString($time, $locale, 'en'), $tz);\n    }\n\n    /**\n     * Create a Carbon instance from a specific ISO format and a string in a given language.\n     *\n     * @param string                         $format Datetime ISO format\n     * @param string                         $locale\n     * @param string                         $time\n     * @param DateTimeZone|string|false|null $tz\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|false\n     */\n    public static function createFromLocaleIsoFormat($format, $locale, $time, $tz = null)\n    {\n        $time = static::translateTimeString($time, $locale, 'en', CarbonInterface::TRANSLATE_MONTHS | CarbonInterface::TRANSLATE_DAYS | CarbonInterface::TRANSLATE_MERIDIEM);\n\n        return static::createFromIsoFormat($format, $time, $tz, $locale);\n    }\n\n    /**\n     * Make a Carbon instance from given variable if possible.\n     *\n     * Always return a new instance. Parse only strings and only these likely to be dates (skip intervals\n     * and recurrences). Throw an exception for invalid format, but otherwise return null.\n     *\n     * @param mixed $var\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static|null\n     */\n    public static function make($var)\n    {\n        if ($var instanceof DateTimeInterface) {\n            return static::instance($var);\n        }\n\n        $date = null;\n\n        if (\\is_string($var)) {\n            $var = trim($var);\n\n            if (!preg_match('/^P[\\dT]/', $var) &&\n                !preg_match('/^R\\d/', $var) &&\n                preg_match('/[a-z\\d]/i', $var)\n            ) {\n                $date = static::parse($var);\n            }\n        }\n\n        return $date;\n    }\n\n    /**\n     * Set last errors.\n     *\n     * @param array|bool $lastErrors\n     *\n     * @return void\n     */\n    private static function setLastErrors($lastErrors)\n    {\n        if (\\is_array($lastErrors) || $lastErrors === false) {\n            static::$lastErrors = \\is_array($lastErrors) ? $lastErrors : [\n                'warning_count' => 0,\n                'warnings' => [],\n                'error_count' => 0,\n                'errors' => [],\n            ];\n        }\n    }\n\n    /**\n     * {@inheritdoc}\n     *\n     * @return array\n     */\n    #[ReturnTypeWillChange]\n    public static function getLastErrors()\n    {\n        return static::$lastErrors;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Date.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse BadMethodCallException;\nuse Carbon\\Carbon;\nuse Carbon\\CarbonInterface;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\CarbonTimeZone;\nuse Carbon\\Exceptions\\BadComparisonUnitException;\nuse Carbon\\Exceptions\\ImmutableException;\nuse Carbon\\Exceptions\\InvalidTimeZoneException;\nuse Carbon\\Exceptions\\InvalidTypeException;\nuse Carbon\\Exceptions\\UnknownGetterException;\nuse Carbon\\Exceptions\\UnknownMethodException;\nuse Carbon\\Exceptions\\UnknownSetterException;\nuse Carbon\\Exceptions\\UnknownUnitException;\nuse Closure;\nuse DateInterval;\nuse DatePeriod;\nuse DateTime;\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse DateTimeZone;\nuse InvalidArgumentException;\nuse ReflectionException;\nuse ReturnTypeWillChange;\nuse Throwable;\n\n/**\n * A simple API extension for DateTime.\n *\n * @mixin DeprecatedProperties\n *\n * <autodoc generated by `composer phpdoc`>\n *\n * @property      int              $year\n * @property      int              $yearIso\n * @property      int              $month\n * @property      int              $day\n * @property      int              $hour\n * @property      int              $minute\n * @property      int              $second\n * @property      int              $micro\n * @property      int              $microsecond\n * @property      int|float|string $timestamp                                                                         seconds since the Unix Epoch\n * @property      string           $englishDayOfWeek                                                                  the day of week in English\n * @property      string           $shortEnglishDayOfWeek                                                             the abbreviated day of week in English\n * @property      string           $englishMonth                                                                      the month in English\n * @property      string           $shortEnglishMonth                                                                 the abbreviated month in English\n * @property      int              $milliseconds\n * @property      int              $millisecond\n * @property      int              $milli\n * @property      int              $week                                                                              1 through 53\n * @property      int              $isoWeek                                                                           1 through 53\n * @property      int              $weekYear                                                                          year according to week format\n * @property      int              $isoWeekYear                                                                       year according to ISO week format\n * @property      int              $dayOfYear                                                                         1 through 366\n * @property      int              $age                                                                               does a diffInYears() with default parameters\n * @property      int              $offset                                                                            the timezone offset in seconds from UTC\n * @property      int              $offsetMinutes                                                                     the timezone offset in minutes from UTC\n * @property      int              $offsetHours                                                                       the timezone offset in hours from UTC\n * @property      CarbonTimeZone   $timezone                                                                          the current timezone\n * @property      CarbonTimeZone   $tz                                                                                alias of $timezone\n * @property-read int              $dayOfWeek                                                                         0 (for Sunday) through 6 (for Saturday)\n * @property-read int              $dayOfWeekIso                                                                      1 (for Monday) through 7 (for Sunday)\n * @property-read int              $weekOfYear                                                                        ISO-8601 week number of year, weeks starting on Monday\n * @property-read int              $daysInMonth                                                                       number of days in the given month\n * @property-read string           $latinMeridiem                                                                     \"am\"/\"pm\" (Ante meridiem or Post meridiem latin lowercase mark)\n * @property-read string           $latinUpperMeridiem                                                                \"AM\"/\"PM\" (Ante meridiem or Post meridiem latin uppercase mark)\n * @property-read string           $timezoneAbbreviatedName                                                           the current timezone abbreviated name\n * @property-read string           $tzAbbrName                                                                        alias of $timezoneAbbreviatedName\n * @property-read string           $dayName                                                                           long name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $shortDayName                                                                      short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $minDayName                                                                        very short name of weekday translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $monthName                                                                         long name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $shortMonthName                                                                    short name of month translated according to Carbon locale, in english if no translation available for current language\n * @property-read string           $meridiem                                                                          lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read string           $upperMeridiem                                                                     uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n * @property-read int              $noZeroHour                                                                        current hour from 1 to 24\n * @property-read int              $weeksInYear                                                                       51 through 53\n * @property-read int              $isoWeeksInYear                                                                    51 through 53\n * @property-read int              $weekOfMonth                                                                       1 through 5\n * @property-read int              $weekNumberInMonth                                                                 1 through 5\n * @property-read int              $firstWeekDay                                                                      0 through 6\n * @property-read int              $lastWeekDay                                                                       0 through 6\n * @property-read int              $daysInYear                                                                        365 or 366\n * @property-read int              $quarter                                                                           the quarter of this instance, 1 - 4\n * @property-read int              $decade                                                                            the decade of this instance\n * @property-read int              $century                                                                           the century of this instance\n * @property-read int              $millennium                                                                        the millennium of this instance\n * @property-read bool             $dst                                                                               daylight savings time indicator, true if DST, false otherwise\n * @property-read bool             $local                                                                             checks if the timezone is local, true if local, false otherwise\n * @property-read bool             $utc                                                                               checks if the timezone is UTC, true if UTC, false otherwise\n * @property-read string           $timezoneName                                                                      the current timezone name\n * @property-read string           $tzName                                                                            alias of $timezoneName\n * @property-read string           $locale                                                                            locale of the current instance\n *\n * @method        bool             isUtc()                                                                            Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)\n * @method        bool             isLocal()                                                                          Check if the current instance has non-UTC timezone.\n * @method        bool             isValid()                                                                          Check if the current instance is a valid date.\n * @method        bool             isDST()                                                                            Check if the current instance is in a daylight saving time.\n * @method        bool             isSunday()                                                                         Checks if the instance day is sunday.\n * @method        bool             isMonday()                                                                         Checks if the instance day is monday.\n * @method        bool             isTuesday()                                                                        Checks if the instance day is tuesday.\n * @method        bool             isWednesday()                                                                      Checks if the instance day is wednesday.\n * @method        bool             isThursday()                                                                       Checks if the instance day is thursday.\n * @method        bool             isFriday()                                                                         Checks if the instance day is friday.\n * @method        bool             isSaturday()                                                                       Checks if the instance day is saturday.\n * @method        bool             isSameYear(Carbon|DateTimeInterface|string|null $date = null)                      Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentYear()                                                                    Checks if the instance is in the same year as the current moment.\n * @method        bool             isNextYear()                                                                       Checks if the instance is in the same year as the current moment next year.\n * @method        bool             isLastYear()                                                                       Checks if the instance is in the same year as the current moment last year.\n * @method        bool             isSameWeek(Carbon|DateTimeInterface|string|null $date = null)                      Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentWeek()                                                                    Checks if the instance is in the same week as the current moment.\n * @method        bool             isNextWeek()                                                                       Checks if the instance is in the same week as the current moment next week.\n * @method        bool             isLastWeek()                                                                       Checks if the instance is in the same week as the current moment last week.\n * @method        bool             isSameDay(Carbon|DateTimeInterface|string|null $date = null)                       Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentDay()                                                                     Checks if the instance is in the same day as the current moment.\n * @method        bool             isNextDay()                                                                        Checks if the instance is in the same day as the current moment next day.\n * @method        bool             isLastDay()                                                                        Checks if the instance is in the same day as the current moment last day.\n * @method        bool             isSameHour(Carbon|DateTimeInterface|string|null $date = null)                      Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentHour()                                                                    Checks if the instance is in the same hour as the current moment.\n * @method        bool             isNextHour()                                                                       Checks if the instance is in the same hour as the current moment next hour.\n * @method        bool             isLastHour()                                                                       Checks if the instance is in the same hour as the current moment last hour.\n * @method        bool             isSameMinute(Carbon|DateTimeInterface|string|null $date = null)                    Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMinute()                                                                  Checks if the instance is in the same minute as the current moment.\n * @method        bool             isNextMinute()                                                                     Checks if the instance is in the same minute as the current moment next minute.\n * @method        bool             isLastMinute()                                                                     Checks if the instance is in the same minute as the current moment last minute.\n * @method        bool             isSameSecond(Carbon|DateTimeInterface|string|null $date = null)                    Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentSecond()                                                                  Checks if the instance is in the same second as the current moment.\n * @method        bool             isNextSecond()                                                                     Checks if the instance is in the same second as the current moment next second.\n * @method        bool             isLastSecond()                                                                     Checks if the instance is in the same second as the current moment last second.\n * @method        bool             isSameMicro(Carbon|DateTimeInterface|string|null $date = null)                     Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMicro()                                                                   Checks if the instance is in the same microsecond as the current moment.\n * @method        bool             isNextMicro()                                                                      Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool             isLastMicro()                                                                      Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool             isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null)               Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMicrosecond()                                                             Checks if the instance is in the same microsecond as the current moment.\n * @method        bool             isNextMicrosecond()                                                                Checks if the instance is in the same microsecond as the current moment next microsecond.\n * @method        bool             isLastMicrosecond()                                                                Checks if the instance is in the same microsecond as the current moment last microsecond.\n * @method        bool             isCurrentMonth()                                                                   Checks if the instance is in the same month as the current moment.\n * @method        bool             isNextMonth()                                                                      Checks if the instance is in the same month as the current moment next month.\n * @method        bool             isLastMonth()                                                                      Checks if the instance is in the same month as the current moment last month.\n * @method        bool             isCurrentQuarter()                                                                 Checks if the instance is in the same quarter as the current moment.\n * @method        bool             isNextQuarter()                                                                    Checks if the instance is in the same quarter as the current moment next quarter.\n * @method        bool             isLastQuarter()                                                                    Checks if the instance is in the same quarter as the current moment last quarter.\n * @method        bool             isSameDecade(Carbon|DateTimeInterface|string|null $date = null)                    Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentDecade()                                                                  Checks if the instance is in the same decade as the current moment.\n * @method        bool             isNextDecade()                                                                     Checks if the instance is in the same decade as the current moment next decade.\n * @method        bool             isLastDecade()                                                                     Checks if the instance is in the same decade as the current moment last decade.\n * @method        bool             isSameCentury(Carbon|DateTimeInterface|string|null $date = null)                   Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentCentury()                                                                 Checks if the instance is in the same century as the current moment.\n * @method        bool             isNextCentury()                                                                    Checks if the instance is in the same century as the current moment next century.\n * @method        bool             isLastCentury()                                                                    Checks if the instance is in the same century as the current moment last century.\n * @method        bool             isSameMillennium(Carbon|DateTimeInterface|string|null $date = null)                Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone).\n * @method        bool             isCurrentMillennium()                                                              Checks if the instance is in the same millennium as the current moment.\n * @method        bool             isNextMillennium()                                                                 Checks if the instance is in the same millennium as the current moment next millennium.\n * @method        bool             isLastMillennium()                                                                 Checks if the instance is in the same millennium as the current moment last millennium.\n * @method        CarbonInterface  years(int $value)                                                                  Set current instance year to the given value.\n * @method        CarbonInterface  year(int $value)                                                                   Set current instance year to the given value.\n * @method        CarbonInterface  setYears(int $value)                                                               Set current instance year to the given value.\n * @method        CarbonInterface  setYear(int $value)                                                                Set current instance year to the given value.\n * @method        CarbonInterface  months(int $value)                                                                 Set current instance month to the given value.\n * @method        CarbonInterface  month(int $value)                                                                  Set current instance month to the given value.\n * @method        CarbonInterface  setMonths(int $value)                                                              Set current instance month to the given value.\n * @method        CarbonInterface  setMonth(int $value)                                                               Set current instance month to the given value.\n * @method        CarbonInterface  days(int $value)                                                                   Set current instance day to the given value.\n * @method        CarbonInterface  day(int $value)                                                                    Set current instance day to the given value.\n * @method        CarbonInterface  setDays(int $value)                                                                Set current instance day to the given value.\n * @method        CarbonInterface  setDay(int $value)                                                                 Set current instance day to the given value.\n * @method        CarbonInterface  hours(int $value)                                                                  Set current instance hour to the given value.\n * @method        CarbonInterface  hour(int $value)                                                                   Set current instance hour to the given value.\n * @method        CarbonInterface  setHours(int $value)                                                               Set current instance hour to the given value.\n * @method        CarbonInterface  setHour(int $value)                                                                Set current instance hour to the given value.\n * @method        CarbonInterface  minutes(int $value)                                                                Set current instance minute to the given value.\n * @method        CarbonInterface  minute(int $value)                                                                 Set current instance minute to the given value.\n * @method        CarbonInterface  setMinutes(int $value)                                                             Set current instance minute to the given value.\n * @method        CarbonInterface  setMinute(int $value)                                                              Set current instance minute to the given value.\n * @method        CarbonInterface  seconds(int $value)                                                                Set current instance second to the given value.\n * @method        CarbonInterface  second(int $value)                                                                 Set current instance second to the given value.\n * @method        CarbonInterface  setSeconds(int $value)                                                             Set current instance second to the given value.\n * @method        CarbonInterface  setSecond(int $value)                                                              Set current instance second to the given value.\n * @method        CarbonInterface  millis(int $value)                                                                 Set current instance millisecond to the given value.\n * @method        CarbonInterface  milli(int $value)                                                                  Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMillis(int $value)                                                              Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMilli(int $value)                                                               Set current instance millisecond to the given value.\n * @method        CarbonInterface  milliseconds(int $value)                                                           Set current instance millisecond to the given value.\n * @method        CarbonInterface  millisecond(int $value)                                                            Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMilliseconds(int $value)                                                        Set current instance millisecond to the given value.\n * @method        CarbonInterface  setMillisecond(int $value)                                                         Set current instance millisecond to the given value.\n * @method        CarbonInterface  micros(int $value)                                                                 Set current instance microsecond to the given value.\n * @method        CarbonInterface  micro(int $value)                                                                  Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicros(int $value)                                                              Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicro(int $value)                                                               Set current instance microsecond to the given value.\n * @method        CarbonInterface  microseconds(int $value)                                                           Set current instance microsecond to the given value.\n * @method        CarbonInterface  microsecond(int $value)                                                            Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicroseconds(int $value)                                                        Set current instance microsecond to the given value.\n * @method        CarbonInterface  setMicrosecond(int $value)                                                         Set current instance microsecond to the given value.\n * @method        CarbonInterface  addYears(int $value = 1)                                                           Add years (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addYear()                                                                          Add one year to the instance (using date interval).\n * @method        CarbonInterface  subYears(int $value = 1)                                                           Sub years (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subYear()                                                                          Sub one year to the instance (using date interval).\n * @method        CarbonInterface  addYearsWithOverflow(int $value = 1)                                               Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addYearWithOverflow()                                                              Add one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subYearsWithOverflow(int $value = 1)                                               Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subYearWithOverflow()                                                              Sub one year to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addYearsWithoutOverflow(int $value = 1)                                            Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearWithoutOverflow()                                                           Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearsWithoutOverflow(int $value = 1)                                            Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearWithoutOverflow()                                                           Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearsWithNoOverflow(int $value = 1)                                             Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearWithNoOverflow()                                                            Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearsWithNoOverflow(int $value = 1)                                             Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearWithNoOverflow()                                                            Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearsNoOverflow(int $value = 1)                                                 Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addYearNoOverflow()                                                                Add one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearsNoOverflow(int $value = 1)                                                 Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subYearNoOverflow()                                                                Sub one year to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonths(int $value = 1)                                                          Add months (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMonth()                                                                         Add one month to the instance (using date interval).\n * @method        CarbonInterface  subMonths(int $value = 1)                                                          Sub months (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMonth()                                                                         Sub one month to the instance (using date interval).\n * @method        CarbonInterface  addMonthsWithOverflow(int $value = 1)                                              Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMonthWithOverflow()                                                             Add one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMonthsWithOverflow(int $value = 1)                                              Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMonthWithOverflow()                                                             Sub one month to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMonthsWithoutOverflow(int $value = 1)                                           Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthWithoutOverflow()                                                          Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthsWithoutOverflow(int $value = 1)                                           Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthWithoutOverflow()                                                          Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthsWithNoOverflow(int $value = 1)                                            Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthWithNoOverflow()                                                           Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthsWithNoOverflow(int $value = 1)                                            Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthWithNoOverflow()                                                           Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthsNoOverflow(int $value = 1)                                                Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMonthNoOverflow()                                                               Add one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthsNoOverflow(int $value = 1)                                                Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMonthNoOverflow()                                                               Sub one month to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDays(int $value = 1)                                                            Add days (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addDay()                                                                           Add one day to the instance (using date interval).\n * @method        CarbonInterface  subDays(int $value = 1)                                                            Sub days (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subDay()                                                                           Sub one day to the instance (using date interval).\n * @method        CarbonInterface  addHours(int $value = 1)                                                           Add hours (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addHour()                                                                          Add one hour to the instance (using date interval).\n * @method        CarbonInterface  subHours(int $value = 1)                                                           Sub hours (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subHour()                                                                          Sub one hour to the instance (using date interval).\n * @method        CarbonInterface  addMinutes(int $value = 1)                                                         Add minutes (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMinute()                                                                        Add one minute to the instance (using date interval).\n * @method        CarbonInterface  subMinutes(int $value = 1)                                                         Sub minutes (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMinute()                                                                        Sub one minute to the instance (using date interval).\n * @method        CarbonInterface  addSeconds(int $value = 1)                                                         Add seconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addSecond()                                                                        Add one second to the instance (using date interval).\n * @method        CarbonInterface  subSeconds(int $value = 1)                                                         Sub seconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subSecond()                                                                        Sub one second to the instance (using date interval).\n * @method        CarbonInterface  addMillis(int $value = 1)                                                          Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMilli()                                                                         Add one millisecond to the instance (using date interval).\n * @method        CarbonInterface  subMillis(int $value = 1)                                                          Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMilli()                                                                         Sub one millisecond to the instance (using date interval).\n * @method        CarbonInterface  addMilliseconds(int $value = 1)                                                    Add milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMillisecond()                                                                   Add one millisecond to the instance (using date interval).\n * @method        CarbonInterface  subMilliseconds(int $value = 1)                                                    Sub milliseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMillisecond()                                                                   Sub one millisecond to the instance (using date interval).\n * @method        CarbonInterface  addMicros(int $value = 1)                                                          Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMicro()                                                                         Add one microsecond to the instance (using date interval).\n * @method        CarbonInterface  subMicros(int $value = 1)                                                          Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMicro()                                                                         Sub one microsecond to the instance (using date interval).\n * @method        CarbonInterface  addMicroseconds(int $value = 1)                                                    Add microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMicrosecond()                                                                   Add one microsecond to the instance (using date interval).\n * @method        CarbonInterface  subMicroseconds(int $value = 1)                                                    Sub microseconds (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMicrosecond()                                                                   Sub one microsecond to the instance (using date interval).\n * @method        CarbonInterface  addMillennia(int $value = 1)                                                       Add millennia (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addMillennium()                                                                    Add one millennium to the instance (using date interval).\n * @method        CarbonInterface  subMillennia(int $value = 1)                                                       Sub millennia (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subMillennium()                                                                    Sub one millennium to the instance (using date interval).\n * @method        CarbonInterface  addMillenniaWithOverflow(int $value = 1)                                           Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMillenniumWithOverflow()                                                        Add one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMillenniaWithOverflow(int $value = 1)                                           Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subMillenniumWithOverflow()                                                        Sub one millennium to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addMillenniaWithoutOverflow(int $value = 1)                                        Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniumWithoutOverflow()                                                     Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniaWithoutOverflow(int $value = 1)                                        Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniumWithoutOverflow()                                                     Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniaWithNoOverflow(int $value = 1)                                         Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniumWithNoOverflow()                                                      Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniaWithNoOverflow(int $value = 1)                                         Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniumWithNoOverflow()                                                      Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniaNoOverflow(int $value = 1)                                             Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addMillenniumNoOverflow()                                                          Add one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniaNoOverflow(int $value = 1)                                             Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subMillenniumNoOverflow()                                                          Sub one millennium to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturies(int $value = 1)                                                       Add centuries (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addCentury()                                                                       Add one century to the instance (using date interval).\n * @method        CarbonInterface  subCenturies(int $value = 1)                                                       Sub centuries (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subCentury()                                                                       Sub one century to the instance (using date interval).\n * @method        CarbonInterface  addCenturiesWithOverflow(int $value = 1)                                           Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addCenturyWithOverflow()                                                           Add one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subCenturiesWithOverflow(int $value = 1)                                           Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subCenturyWithOverflow()                                                           Sub one century to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addCenturiesWithoutOverflow(int $value = 1)                                        Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturyWithoutOverflow()                                                        Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturiesWithoutOverflow(int $value = 1)                                        Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturyWithoutOverflow()                                                        Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturiesWithNoOverflow(int $value = 1)                                         Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturyWithNoOverflow()                                                         Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturiesWithNoOverflow(int $value = 1)                                         Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturyWithNoOverflow()                                                         Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturiesNoOverflow(int $value = 1)                                             Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addCenturyNoOverflow()                                                             Add one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturiesNoOverflow(int $value = 1)                                             Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subCenturyNoOverflow()                                                             Sub one century to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecades(int $value = 1)                                                         Add decades (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addDecade()                                                                        Add one decade to the instance (using date interval).\n * @method        CarbonInterface  subDecades(int $value = 1)                                                         Sub decades (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subDecade()                                                                        Sub one decade to the instance (using date interval).\n * @method        CarbonInterface  addDecadesWithOverflow(int $value = 1)                                             Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addDecadeWithOverflow()                                                            Add one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subDecadesWithOverflow(int $value = 1)                                             Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subDecadeWithOverflow()                                                            Sub one decade to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addDecadesWithoutOverflow(int $value = 1)                                          Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadeWithoutOverflow()                                                         Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadesWithoutOverflow(int $value = 1)                                          Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadeWithoutOverflow()                                                         Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadesWithNoOverflow(int $value = 1)                                           Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadeWithNoOverflow()                                                          Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadesWithNoOverflow(int $value = 1)                                           Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadeWithNoOverflow()                                                          Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadesNoOverflow(int $value = 1)                                               Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addDecadeNoOverflow()                                                              Add one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadesNoOverflow(int $value = 1)                                               Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subDecadeNoOverflow()                                                              Sub one decade to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarters(int $value = 1)                                                        Add quarters (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addQuarter()                                                                       Add one quarter to the instance (using date interval).\n * @method        CarbonInterface  subQuarters(int $value = 1)                                                        Sub quarters (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subQuarter()                                                                       Sub one quarter to the instance (using date interval).\n * @method        CarbonInterface  addQuartersWithOverflow(int $value = 1)                                            Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addQuarterWithOverflow()                                                           Add one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subQuartersWithOverflow(int $value = 1)                                            Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  subQuarterWithOverflow()                                                           Sub one quarter to the instance (using date interval) with overflow explicitly allowed.\n * @method        CarbonInterface  addQuartersWithoutOverflow(int $value = 1)                                         Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarterWithoutOverflow()                                                        Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuartersWithoutOverflow(int $value = 1)                                         Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuarterWithoutOverflow()                                                        Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuartersWithNoOverflow(int $value = 1)                                          Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarterWithNoOverflow()                                                         Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuartersWithNoOverflow(int $value = 1)                                          Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuarterWithNoOverflow()                                                         Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuartersNoOverflow(int $value = 1)                                              Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addQuarterNoOverflow()                                                             Add one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuartersNoOverflow(int $value = 1)                                              Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  subQuarterNoOverflow()                                                             Sub one quarter to the instance (using date interval) with overflow explicitly forbidden.\n * @method        CarbonInterface  addWeeks(int $value = 1)                                                           Add weeks (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addWeek()                                                                          Add one week to the instance (using date interval).\n * @method        CarbonInterface  subWeeks(int $value = 1)                                                           Sub weeks (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subWeek()                                                                          Sub one week to the instance (using date interval).\n * @method        CarbonInterface  addWeekdays(int $value = 1)                                                        Add weekdays (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  addWeekday()                                                                       Add one weekday to the instance (using date interval).\n * @method        CarbonInterface  subWeekdays(int $value = 1)                                                        Sub weekdays (the $value count passed in) to the instance (using date interval).\n * @method        CarbonInterface  subWeekday()                                                                       Sub one weekday to the instance (using date interval).\n * @method        CarbonInterface  addRealMicros(int $value = 1)                                                      Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMicro()                                                                     Add one microsecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicros(int $value = 1)                                                      Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicro()                                                                     Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod     microsUntil($endDate = null, int $factor = 1)                                      Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        CarbonInterface  addRealMicroseconds(int $value = 1)                                                Add microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMicrosecond()                                                               Add one microsecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicroseconds(int $value = 1)                                                Sub microseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMicrosecond()                                                               Sub one microsecond to the instance (using timestamp).\n * @method        CarbonPeriod     microsecondsUntil($endDate = null, int $factor = 1)                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given.\n * @method        CarbonInterface  addRealMillis(int $value = 1)                                                      Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMilli()                                                                     Add one millisecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillis(int $value = 1)                                                      Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMilli()                                                                     Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod     millisUntil($endDate = null, int $factor = 1)                                      Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        CarbonInterface  addRealMilliseconds(int $value = 1)                                                Add milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMillisecond()                                                               Add one millisecond to the instance (using timestamp).\n * @method        CarbonInterface  subRealMilliseconds(int $value = 1)                                                Sub milliseconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillisecond()                                                               Sub one millisecond to the instance (using timestamp).\n * @method        CarbonPeriod     millisecondsUntil($endDate = null, int $factor = 1)                                Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given.\n * @method        CarbonInterface  addRealSeconds(int $value = 1)                                                     Add seconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealSecond()                                                                    Add one second to the instance (using timestamp).\n * @method        CarbonInterface  subRealSeconds(int $value = 1)                                                     Sub seconds (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealSecond()                                                                    Sub one second to the instance (using timestamp).\n * @method        CarbonPeriod     secondsUntil($endDate = null, int $factor = 1)                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given.\n * @method        CarbonInterface  addRealMinutes(int $value = 1)                                                     Add minutes (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMinute()                                                                    Add one minute to the instance (using timestamp).\n * @method        CarbonInterface  subRealMinutes(int $value = 1)                                                     Sub minutes (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMinute()                                                                    Sub one minute to the instance (using timestamp).\n * @method        CarbonPeriod     minutesUntil($endDate = null, int $factor = 1)                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given.\n * @method        CarbonInterface  addRealHours(int $value = 1)                                                       Add hours (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealHour()                                                                      Add one hour to the instance (using timestamp).\n * @method        CarbonInterface  subRealHours(int $value = 1)                                                       Sub hours (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealHour()                                                                      Sub one hour to the instance (using timestamp).\n * @method        CarbonPeriod     hoursUntil($endDate = null, int $factor = 1)                                       Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given.\n * @method        CarbonInterface  addRealDays(int $value = 1)                                                        Add days (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealDay()                                                                       Add one day to the instance (using timestamp).\n * @method        CarbonInterface  subRealDays(int $value = 1)                                                        Sub days (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealDay()                                                                       Sub one day to the instance (using timestamp).\n * @method        CarbonPeriod     daysUntil($endDate = null, int $factor = 1)                                        Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given.\n * @method        CarbonInterface  addRealWeeks(int $value = 1)                                                       Add weeks (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealWeek()                                                                      Add one week to the instance (using timestamp).\n * @method        CarbonInterface  subRealWeeks(int $value = 1)                                                       Sub weeks (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealWeek()                                                                      Sub one week to the instance (using timestamp).\n * @method        CarbonPeriod     weeksUntil($endDate = null, int $factor = 1)                                       Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given.\n * @method        CarbonInterface  addRealMonths(int $value = 1)                                                      Add months (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMonth()                                                                     Add one month to the instance (using timestamp).\n * @method        CarbonInterface  subRealMonths(int $value = 1)                                                      Sub months (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMonth()                                                                     Sub one month to the instance (using timestamp).\n * @method        CarbonPeriod     monthsUntil($endDate = null, int $factor = 1)                                      Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given.\n * @method        CarbonInterface  addRealQuarters(int $value = 1)                                                    Add quarters (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealQuarter()                                                                   Add one quarter to the instance (using timestamp).\n * @method        CarbonInterface  subRealQuarters(int $value = 1)                                                    Sub quarters (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealQuarter()                                                                   Sub one quarter to the instance (using timestamp).\n * @method        CarbonPeriod     quartersUntil($endDate = null, int $factor = 1)                                    Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given.\n * @method        CarbonInterface  addRealYears(int $value = 1)                                                       Add years (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealYear()                                                                      Add one year to the instance (using timestamp).\n * @method        CarbonInterface  subRealYears(int $value = 1)                                                       Sub years (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealYear()                                                                      Sub one year to the instance (using timestamp).\n * @method        CarbonPeriod     yearsUntil($endDate = null, int $factor = 1)                                       Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given.\n * @method        CarbonInterface  addRealDecades(int $value = 1)                                                     Add decades (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealDecade()                                                                    Add one decade to the instance (using timestamp).\n * @method        CarbonInterface  subRealDecades(int $value = 1)                                                     Sub decades (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealDecade()                                                                    Sub one decade to the instance (using timestamp).\n * @method        CarbonPeriod     decadesUntil($endDate = null, int $factor = 1)                                     Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given.\n * @method        CarbonInterface  addRealCenturies(int $value = 1)                                                   Add centuries (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealCentury()                                                                   Add one century to the instance (using timestamp).\n * @method        CarbonInterface  subRealCenturies(int $value = 1)                                                   Sub centuries (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealCentury()                                                                   Sub one century to the instance (using timestamp).\n * @method        CarbonPeriod     centuriesUntil($endDate = null, int $factor = 1)                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given.\n * @method        CarbonInterface  addRealMillennia(int $value = 1)                                                   Add millennia (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  addRealMillennium()                                                                Add one millennium to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillennia(int $value = 1)                                                   Sub millennia (the $value count passed in) to the instance (using timestamp).\n * @method        CarbonInterface  subRealMillennium()                                                                Sub one millennium to the instance (using timestamp).\n * @method        CarbonPeriod     millenniaUntil($endDate = null, int $factor = 1)                                   Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given.\n * @method        CarbonInterface  roundYear(float $precision = 1, string $function = \"round\")                        Round the current instance year with given precision using the given function.\n * @method        CarbonInterface  roundYears(float $precision = 1, string $function = \"round\")                       Round the current instance year with given precision using the given function.\n * @method        CarbonInterface  floorYear(float $precision = 1)                                                    Truncate the current instance year with given precision.\n * @method        CarbonInterface  floorYears(float $precision = 1)                                                   Truncate the current instance year with given precision.\n * @method        CarbonInterface  ceilYear(float $precision = 1)                                                     Ceil the current instance year with given precision.\n * @method        CarbonInterface  ceilYears(float $precision = 1)                                                    Ceil the current instance year with given precision.\n * @method        CarbonInterface  roundMonth(float $precision = 1, string $function = \"round\")                       Round the current instance month with given precision using the given function.\n * @method        CarbonInterface  roundMonths(float $precision = 1, string $function = \"round\")                      Round the current instance month with given precision using the given function.\n * @method        CarbonInterface  floorMonth(float $precision = 1)                                                   Truncate the current instance month with given precision.\n * @method        CarbonInterface  floorMonths(float $precision = 1)                                                  Truncate the current instance month with given precision.\n * @method        CarbonInterface  ceilMonth(float $precision = 1)                                                    Ceil the current instance month with given precision.\n * @method        CarbonInterface  ceilMonths(float $precision = 1)                                                   Ceil the current instance month with given precision.\n * @method        CarbonInterface  roundDay(float $precision = 1, string $function = \"round\")                         Round the current instance day with given precision using the given function.\n * @method        CarbonInterface  roundDays(float $precision = 1, string $function = \"round\")                        Round the current instance day with given precision using the given function.\n * @method        CarbonInterface  floorDay(float $precision = 1)                                                     Truncate the current instance day with given precision.\n * @method        CarbonInterface  floorDays(float $precision = 1)                                                    Truncate the current instance day with given precision.\n * @method        CarbonInterface  ceilDay(float $precision = 1)                                                      Ceil the current instance day with given precision.\n * @method        CarbonInterface  ceilDays(float $precision = 1)                                                     Ceil the current instance day with given precision.\n * @method        CarbonInterface  roundHour(float $precision = 1, string $function = \"round\")                        Round the current instance hour with given precision using the given function.\n * @method        CarbonInterface  roundHours(float $precision = 1, string $function = \"round\")                       Round the current instance hour with given precision using the given function.\n * @method        CarbonInterface  floorHour(float $precision = 1)                                                    Truncate the current instance hour with given precision.\n * @method        CarbonInterface  floorHours(float $precision = 1)                                                   Truncate the current instance hour with given precision.\n * @method        CarbonInterface  ceilHour(float $precision = 1)                                                     Ceil the current instance hour with given precision.\n * @method        CarbonInterface  ceilHours(float $precision = 1)                                                    Ceil the current instance hour with given precision.\n * @method        CarbonInterface  roundMinute(float $precision = 1, string $function = \"round\")                      Round the current instance minute with given precision using the given function.\n * @method        CarbonInterface  roundMinutes(float $precision = 1, string $function = \"round\")                     Round the current instance minute with given precision using the given function.\n * @method        CarbonInterface  floorMinute(float $precision = 1)                                                  Truncate the current instance minute with given precision.\n * @method        CarbonInterface  floorMinutes(float $precision = 1)                                                 Truncate the current instance minute with given precision.\n * @method        CarbonInterface  ceilMinute(float $precision = 1)                                                   Ceil the current instance minute with given precision.\n * @method        CarbonInterface  ceilMinutes(float $precision = 1)                                                  Ceil the current instance minute with given precision.\n * @method        CarbonInterface  roundSecond(float $precision = 1, string $function = \"round\")                      Round the current instance second with given precision using the given function.\n * @method        CarbonInterface  roundSeconds(float $precision = 1, string $function = \"round\")                     Round the current instance second with given precision using the given function.\n * @method        CarbonInterface  floorSecond(float $precision = 1)                                                  Truncate the current instance second with given precision.\n * @method        CarbonInterface  floorSeconds(float $precision = 1)                                                 Truncate the current instance second with given precision.\n * @method        CarbonInterface  ceilSecond(float $precision = 1)                                                   Ceil the current instance second with given precision.\n * @method        CarbonInterface  ceilSeconds(float $precision = 1)                                                  Ceil the current instance second with given precision.\n * @method        CarbonInterface  roundMillennium(float $precision = 1, string $function = \"round\")                  Round the current instance millennium with given precision using the given function.\n * @method        CarbonInterface  roundMillennia(float $precision = 1, string $function = \"round\")                   Round the current instance millennium with given precision using the given function.\n * @method        CarbonInterface  floorMillennium(float $precision = 1)                                              Truncate the current instance millennium with given precision.\n * @method        CarbonInterface  floorMillennia(float $precision = 1)                                               Truncate the current instance millennium with given precision.\n * @method        CarbonInterface  ceilMillennium(float $precision = 1)                                               Ceil the current instance millennium with given precision.\n * @method        CarbonInterface  ceilMillennia(float $precision = 1)                                                Ceil the current instance millennium with given precision.\n * @method        CarbonInterface  roundCentury(float $precision = 1, string $function = \"round\")                     Round the current instance century with given precision using the given function.\n * @method        CarbonInterface  roundCenturies(float $precision = 1, string $function = \"round\")                   Round the current instance century with given precision using the given function.\n * @method        CarbonInterface  floorCentury(float $precision = 1)                                                 Truncate the current instance century with given precision.\n * @method        CarbonInterface  floorCenturies(float $precision = 1)                                               Truncate the current instance century with given precision.\n * @method        CarbonInterface  ceilCentury(float $precision = 1)                                                  Ceil the current instance century with given precision.\n * @method        CarbonInterface  ceilCenturies(float $precision = 1)                                                Ceil the current instance century with given precision.\n * @method        CarbonInterface  roundDecade(float $precision = 1, string $function = \"round\")                      Round the current instance decade with given precision using the given function.\n * @method        CarbonInterface  roundDecades(float $precision = 1, string $function = \"round\")                     Round the current instance decade with given precision using the given function.\n * @method        CarbonInterface  floorDecade(float $precision = 1)                                                  Truncate the current instance decade with given precision.\n * @method        CarbonInterface  floorDecades(float $precision = 1)                                                 Truncate the current instance decade with given precision.\n * @method        CarbonInterface  ceilDecade(float $precision = 1)                                                   Ceil the current instance decade with given precision.\n * @method        CarbonInterface  ceilDecades(float $precision = 1)                                                  Ceil the current instance decade with given precision.\n * @method        CarbonInterface  roundQuarter(float $precision = 1, string $function = \"round\")                     Round the current instance quarter with given precision using the given function.\n * @method        CarbonInterface  roundQuarters(float $precision = 1, string $function = \"round\")                    Round the current instance quarter with given precision using the given function.\n * @method        CarbonInterface  floorQuarter(float $precision = 1)                                                 Truncate the current instance quarter with given precision.\n * @method        CarbonInterface  floorQuarters(float $precision = 1)                                                Truncate the current instance quarter with given precision.\n * @method        CarbonInterface  ceilQuarter(float $precision = 1)                                                  Ceil the current instance quarter with given precision.\n * @method        CarbonInterface  ceilQuarters(float $precision = 1)                                                 Ceil the current instance quarter with given precision.\n * @method        CarbonInterface  roundMillisecond(float $precision = 1, string $function = \"round\")                 Round the current instance millisecond with given precision using the given function.\n * @method        CarbonInterface  roundMilliseconds(float $precision = 1, string $function = \"round\")                Round the current instance millisecond with given precision using the given function.\n * @method        CarbonInterface  floorMillisecond(float $precision = 1)                                             Truncate the current instance millisecond with given precision.\n * @method        CarbonInterface  floorMilliseconds(float $precision = 1)                                            Truncate the current instance millisecond with given precision.\n * @method        CarbonInterface  ceilMillisecond(float $precision = 1)                                              Ceil the current instance millisecond with given precision.\n * @method        CarbonInterface  ceilMilliseconds(float $precision = 1)                                             Ceil the current instance millisecond with given precision.\n * @method        CarbonInterface  roundMicrosecond(float $precision = 1, string $function = \"round\")                 Round the current instance microsecond with given precision using the given function.\n * @method        CarbonInterface  roundMicroseconds(float $precision = 1, string $function = \"round\")                Round the current instance microsecond with given precision using the given function.\n * @method        CarbonInterface  floorMicrosecond(float $precision = 1)                                             Truncate the current instance microsecond with given precision.\n * @method        CarbonInterface  floorMicroseconds(float $precision = 1)                                            Truncate the current instance microsecond with given precision.\n * @method        CarbonInterface  ceilMicrosecond(float $precision = 1)                                              Ceil the current instance microsecond with given precision.\n * @method        CarbonInterface  ceilMicroseconds(float $precision = 1)                                             Ceil the current instance microsecond with given precision.\n * @method        string           shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)        Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1)         Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)        Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1)         Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)   Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1)    Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n * @method        string           longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1)  Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.)\n *\n * </autodoc>\n */\ntrait Date\n{\n    use Boundaries;\n    use Comparison;\n    use Converter;\n    use Creator;\n    use Difference;\n    use Macro;\n    use MagicParameter;\n    use Modifiers;\n    use Mutability;\n    use ObjectInitialisation;\n    use Options;\n    use Rounding;\n    use Serialization;\n    use Test;\n    use Timestamp;\n    use Units;\n    use Week;\n\n    /**\n     * Names of days of the week.\n     *\n     * @var array\n     */\n    protected static $days = [\n        // @call isDayOfWeek\n        CarbonInterface::SUNDAY => 'Sunday',\n        // @call isDayOfWeek\n        CarbonInterface::MONDAY => 'Monday',\n        // @call isDayOfWeek\n        CarbonInterface::TUESDAY => 'Tuesday',\n        // @call isDayOfWeek\n        CarbonInterface::WEDNESDAY => 'Wednesday',\n        // @call isDayOfWeek\n        CarbonInterface::THURSDAY => 'Thursday',\n        // @call isDayOfWeek\n        CarbonInterface::FRIDAY => 'Friday',\n        // @call isDayOfWeek\n        CarbonInterface::SATURDAY => 'Saturday',\n    ];\n\n    /**\n     * Will UTF8 encoding be used to print localized date/time ?\n     *\n     * @var bool\n     */\n    protected static $utf8 = false;\n\n    /**\n     * List of unit and magic methods associated as doc-comments.\n     *\n     * @var array\n     */\n    protected static $units = [\n        // @call setUnit\n        // @call addUnit\n        'year',\n        // @call setUnit\n        // @call addUnit\n        'month',\n        // @call setUnit\n        // @call addUnit\n        'day',\n        // @call setUnit\n        // @call addUnit\n        'hour',\n        // @call setUnit\n        // @call addUnit\n        'minute',\n        // @call setUnit\n        // @call addUnit\n        'second',\n        // @call setUnit\n        // @call addUnit\n        'milli',\n        // @call setUnit\n        // @call addUnit\n        'millisecond',\n        // @call setUnit\n        // @call addUnit\n        'micro',\n        // @call setUnit\n        // @call addUnit\n        'microsecond',\n    ];\n\n    /**\n     * Creates a DateTimeZone from a string, DateTimeZone or integer offset.\n     *\n     * @param DateTimeZone|string|int|null $object     original value to get CarbonTimeZone from it.\n     * @param DateTimeZone|string|int|null $objectDump dump of the object for error messages.\n     *\n     * @throws InvalidTimeZoneException\n     *\n     * @return CarbonTimeZone|false\n     */\n    protected static function safeCreateDateTimeZone($object, $objectDump = null)\n    {\n        return CarbonTimeZone::instance($object, $objectDump);\n    }\n\n    /**\n     * Get the TimeZone associated with the Carbon instance (as CarbonTimeZone).\n     *\n     * @return CarbonTimeZone\n     *\n     * @link https://php.net/manual/en/datetime.gettimezone.php\n     */\n    #[ReturnTypeWillChange]\n    public function getTimezone()\n    {\n        return CarbonTimeZone::instance(parent::getTimezone());\n    }\n\n    /**\n     * List of minimum and maximums for each unit.\n     *\n     * @param int $daysInMonth\n     *\n     * @return array\n     */\n    protected static function getRangesByUnit(int $daysInMonth = 31): array\n    {\n        return [\n            // @call roundUnit\n            'year' => [1, 9999],\n            // @call roundUnit\n            'month' => [1, static::MONTHS_PER_YEAR],\n            // @call roundUnit\n            'day' => [1, $daysInMonth],\n            // @call roundUnit\n            'hour' => [0, static::HOURS_PER_DAY - 1],\n            // @call roundUnit\n            'minute' => [0, static::MINUTES_PER_HOUR - 1],\n            // @call roundUnit\n            'second' => [0, static::SECONDS_PER_MINUTE - 1],\n        ];\n    }\n\n    /**\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function copy()\n    {\n        return clone $this;\n    }\n\n    /**\n     * @alias copy\n     *\n     * Get a copy of the instance.\n     *\n     * @return static\n     */\n    public function clone()\n    {\n        return clone $this;\n    }\n\n    /**\n     * Clone the current instance if it's mutable.\n     *\n     * This method is convenient to ensure you don't mutate the initial object\n     * but avoid to make a useless copy of it if it's already immutable.\n     *\n     * @return static\n     */\n    public function avoidMutation(): self\n    {\n        if ($this instanceof DateTimeImmutable) {\n            return $this;\n        }\n\n        return clone $this;\n    }\n\n    /**\n     * Returns a present instance in the same timezone.\n     *\n     * @return static\n     */\n    public function nowWithSameTz()\n    {\n        return static::now($this->getTimezone());\n    }\n\n    /**\n     * Throws an exception if the given object is not a DateTime and does not implement DateTimeInterface.\n     *\n     * @param mixed        $date\n     * @param string|array $other\n     *\n     * @throws InvalidTypeException\n     */\n    protected static function expectDateTime($date, $other = [])\n    {\n        $message = 'Expected ';\n        foreach ((array) $other as $expect) {\n            $message .= \"$expect, \";\n        }\n\n        if (!$date instanceof DateTime && !$date instanceof DateTimeInterface) {\n            throw new InvalidTypeException(\n                $message.'DateTime or DateTimeInterface, '.\n                (\\is_object($date) ? \\get_class($date) : \\gettype($date)).' given'\n            );\n        }\n    }\n\n    /**\n     * Return the Carbon instance passed through, a now instance in the same timezone\n     * if null given or parse the input if string given.\n     *\n     * @param Carbon|DateTimeInterface|string|null $date\n     *\n     * @return static\n     */\n    protected function resolveCarbon($date = null)\n    {\n        if (!$date) {\n            return $this->nowWithSameTz();\n        }\n\n        if (\\is_string($date)) {\n            return static::parse($date, $this->getTimezone());\n        }\n\n        static::expectDateTime($date, ['null', 'string']);\n\n        return $date instanceof self ? $date : static::instance($date);\n    }\n\n    /**\n     * Return the Carbon instance passed through, a now instance in UTC\n     * if null given or parse the input if string given (using current timezone\n     * then switching to UTC).\n     *\n     * @param Carbon|DateTimeInterface|string|null $date\n     *\n     * @return static\n     */\n    protected function resolveUTC($date = null): self\n    {\n        if (!$date) {\n            return static::now('UTC');\n        }\n\n        if (\\is_string($date)) {\n            return static::parse($date, $this->getTimezone())->utc();\n        }\n\n        static::expectDateTime($date, ['null', 'string']);\n\n        return $date instanceof self ? $date : static::instance($date)->utc();\n    }\n\n    /**\n     * Return the Carbon instance passed through, a now instance in the same timezone\n     * if null given or parse the input if string given.\n     *\n     * @param Carbon|\\Carbon\\CarbonPeriod|\\Carbon\\CarbonInterval|\\DateInterval|\\DatePeriod|DateTimeInterface|string|null $date\n     *\n     * @return static\n     */\n    public function carbonize($date = null)\n    {\n        if ($date instanceof DateInterval) {\n            return $this->avoidMutation()->add($date);\n        }\n\n        if ($date instanceof DatePeriod || $date instanceof CarbonPeriod) {\n            $date = $date->getStartDate();\n        }\n\n        return $this->resolveCarbon($date);\n    }\n\n    ///////////////////////////////////////////////////////////////////\n    ///////////////////////// GETTERS AND SETTERS /////////////////////\n    ///////////////////////////////////////////////////////////////////\n\n    /**\n     * Get a part of the Carbon object\n     *\n     * @param string $name\n     *\n     * @throws UnknownGetterException\n     *\n     * @return string|int|bool|DateTimeZone|null\n     */\n    public function __get($name)\n    {\n        return $this->get($name);\n    }\n\n    /**\n     * Get a part of the Carbon object\n     *\n     * @param string $name\n     *\n     * @throws UnknownGetterException\n     *\n     * @return string|int|bool|DateTimeZone|null\n     */\n    public function get($name)\n    {\n        static $formats = [\n            // @property int\n            'year' => 'Y',\n            // @property int\n            'yearIso' => 'o',\n            // @property int\n            // @call isSameUnit\n            'month' => 'n',\n            // @property int\n            'day' => 'j',\n            // @property int\n            'hour' => 'G',\n            // @property int\n            'minute' => 'i',\n            // @property int\n            'second' => 's',\n            // @property int\n            'micro' => 'u',\n            // @property int\n            'microsecond' => 'u',\n            // @property-read int 0 (for Sunday) through 6 (for Saturday)\n            'dayOfWeek' => 'w',\n            // @property-read int 1 (for Monday) through 7 (for Sunday)\n            'dayOfWeekIso' => 'N',\n            // @property-read int ISO-8601 week number of year, weeks starting on Monday\n            'weekOfYear' => 'W',\n            // @property-read int number of days in the given month\n            'daysInMonth' => 't',\n            // @property int|float|string seconds since the Unix Epoch\n            'timestamp' => 'U',\n            // @property-read string \"am\"/\"pm\" (Ante meridiem or Post meridiem latin lowercase mark)\n            'latinMeridiem' => 'a',\n            // @property-read string \"AM\"/\"PM\" (Ante meridiem or Post meridiem latin uppercase mark)\n            'latinUpperMeridiem' => 'A',\n            // @property string the day of week in English\n            'englishDayOfWeek' => 'l',\n            // @property string the abbreviated day of week in English\n            'shortEnglishDayOfWeek' => 'D',\n            // @property string the month in English\n            'englishMonth' => 'F',\n            // @property string the abbreviated month in English\n            'shortEnglishMonth' => 'M',\n            // @property string the day of week in current locale LC_TIME\n            // @deprecated\n            //   reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.\n            //   replacement: Use ->isoFormat('MMM') instead.\n            //   since: 2.55.0\n            'localeDayOfWeek' => '%A',\n            // @property string the abbreviated day of week in current locale LC_TIME\n            // @deprecated\n            //   reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.\n            //   replacement: Use ->isoFormat('dddd') instead.\n            //   since: 2.55.0\n            'shortLocaleDayOfWeek' => '%a',\n            // @property string the month in current locale LC_TIME\n            // @deprecated\n            //   reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.\n            //   replacement: Use ->isoFormat('ddd') instead.\n            //   since: 2.55.0\n            'localeMonth' => '%B',\n            // @property string the abbreviated month in current locale LC_TIME\n            // @deprecated\n            //   reason: It uses OS language package and strftime() which is deprecated since PHP 8.1.\n            //   replacement: Use ->isoFormat('MMMM') instead.\n            //   since: 2.55.0\n            'shortLocaleMonth' => '%b',\n            // @property-read string $timezoneAbbreviatedName the current timezone abbreviated name\n            'timezoneAbbreviatedName' => 'T',\n            // @property-read string $tzAbbrName alias of $timezoneAbbreviatedName\n            'tzAbbrName' => 'T',\n        ];\n\n        switch (true) {\n            case isset($formats[$name]):\n                $format = $formats[$name];\n                $method = str_starts_with($format, '%') ? 'formatLocalized' : 'rawFormat';\n                $value = $this->$method($format);\n\n                return is_numeric($value) ? (int) $value : $value;\n\n            // @property-read string long name of weekday translated according to Carbon locale, in english if no translation available for current language\n            case $name === 'dayName':\n                return $this->getTranslatedDayName();\n            // @property-read string short name of weekday translated according to Carbon locale, in english if no translation available for current language\n            case $name === 'shortDayName':\n                return $this->getTranslatedShortDayName();\n            // @property-read string very short name of weekday translated according to Carbon locale, in english if no translation available for current language\n            case $name === 'minDayName':\n                return $this->getTranslatedMinDayName();\n            // @property-read string long name of month translated according to Carbon locale, in english if no translation available for current language\n            case $name === 'monthName':\n                return $this->getTranslatedMonthName();\n            // @property-read string short name of month translated according to Carbon locale, in english if no translation available for current language\n            case $name === 'shortMonthName':\n                return $this->getTranslatedShortMonthName();\n            // @property-read string lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n            case $name === 'meridiem':\n                return $this->meridiem(true);\n            // @property-read string uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language\n            case $name === 'upperMeridiem':\n                return $this->meridiem();\n            // @property-read int current hour from 1 to 24\n            case $name === 'noZeroHour':\n                return $this->hour ?: 24;\n            // @property int\n            case $name === 'milliseconds':\n                // @property int\n            case $name === 'millisecond':\n            // @property int\n            case $name === 'milli':\n                return (int) floor(((int) $this->rawFormat('u')) / 1000);\n\n            // @property int 1 through 53\n            case $name === 'week':\n                return (int) $this->week();\n\n            // @property int 1 through 53\n            case $name === 'isoWeek':\n                return (int) $this->isoWeek();\n\n            // @property int year according to week format\n            case $name === 'weekYear':\n                return (int) $this->weekYear();\n\n            // @property int year according to ISO week format\n            case $name === 'isoWeekYear':\n                return (int) $this->isoWeekYear();\n\n            // @property-read int 51 through 53\n            case $name === 'weeksInYear':\n                return $this->weeksInYear();\n\n            // @property-read int 51 through 53\n            case $name === 'isoWeeksInYear':\n                return $this->isoWeeksInYear();\n\n            // @property-read int 1 through 5\n            case $name === 'weekOfMonth':\n                return (int) ceil($this->day / static::DAYS_PER_WEEK);\n\n            // @property-read int 1 through 5\n            case $name === 'weekNumberInMonth':\n                return (int) ceil(($this->day + $this->avoidMutation()->startOfMonth()->dayOfWeekIso - 1) / static::DAYS_PER_WEEK);\n\n            // @property-read int 0 through 6\n            case $name === 'firstWeekDay':\n                return $this->localTranslator ? ($this->getTranslationMessage('first_day_of_week') ?? 0) : static::getWeekStartsAt();\n\n            // @property-read int 0 through 6\n            case $name === 'lastWeekDay':\n                return $this->localTranslator ? (($this->getTranslationMessage('first_day_of_week') ?? 0) + static::DAYS_PER_WEEK - 1) % static::DAYS_PER_WEEK : static::getWeekEndsAt();\n\n            // @property int 1 through 366\n            case $name === 'dayOfYear':\n                return 1 + (int) ($this->rawFormat('z'));\n\n            // @property-read int 365 or 366\n            case $name === 'daysInYear':\n                return $this->isLeapYear() ? 366 : 365;\n\n            // @property int does a diffInYears() with default parameters\n            case $name === 'age':\n                return $this->diffInYears();\n\n            // @property-read int the quarter of this instance, 1 - 4\n            // @call isSameUnit\n            case $name === 'quarter':\n                return (int) ceil($this->month / static::MONTHS_PER_QUARTER);\n\n            // @property-read int the decade of this instance\n            // @call isSameUnit\n            case $name === 'decade':\n                return (int) ceil($this->year / static::YEARS_PER_DECADE);\n\n            // @property-read int the century of this instance\n            // @call isSameUnit\n            case $name === 'century':\n                $factor = 1;\n                $year = $this->year;\n                if ($year < 0) {\n                    $year = -$year;\n                    $factor = -1;\n                }\n\n                return (int) ($factor * ceil($year / static::YEARS_PER_CENTURY));\n\n            // @property-read int the millennium of this instance\n            // @call isSameUnit\n            case $name === 'millennium':\n                $factor = 1;\n                $year = $this->year;\n                if ($year < 0) {\n                    $year = -$year;\n                    $factor = -1;\n                }\n\n                return (int) ($factor * ceil($year / static::YEARS_PER_MILLENNIUM));\n\n            // @property int the timezone offset in seconds from UTC\n            case $name === 'offset':\n                return $this->getOffset();\n\n            // @property int the timezone offset in minutes from UTC\n            case $name === 'offsetMinutes':\n                return $this->getOffset() / static::SECONDS_PER_MINUTE;\n\n            // @property int the timezone offset in hours from UTC\n            case $name === 'offsetHours':\n                return $this->getOffset() / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR;\n\n            // @property-read bool daylight savings time indicator, true if DST, false otherwise\n            case $name === 'dst':\n                return $this->rawFormat('I') === '1';\n\n            // @property-read bool checks if the timezone is local, true if local, false otherwise\n            case $name === 'local':\n                return $this->getOffset() === $this->avoidMutation()->setTimezone(date_default_timezone_get())->getOffset();\n\n            // @property-read bool checks if the timezone is UTC, true if UTC, false otherwise\n            case $name === 'utc':\n                return $this->getOffset() === 0;\n\n            // @property CarbonTimeZone $timezone the current timezone\n            // @property CarbonTimeZone $tz alias of $timezone\n            case $name === 'timezone' || $name === 'tz':\n                return CarbonTimeZone::instance($this->getTimezone());\n\n            // @property-read string $timezoneName the current timezone name\n            // @property-read string $tzName alias of $timezoneName\n            case $name === 'timezoneName' || $name === 'tzName':\n                return $this->getTimezone()->getName();\n\n            // @property-read string locale of the current instance\n            case $name === 'locale':\n                return $this->getTranslatorLocale();\n\n            default:\n                $macro = $this->getLocalMacro('get'.ucfirst($name));\n\n                if ($macro) {\n                    return $this->executeCallableWithContext($macro);\n                }\n\n                throw new UnknownGetterException($name);\n        }\n    }\n\n    /**\n     * Check if an attribute exists on the object\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public function __isset($name)\n    {\n        try {\n            $this->__get($name);\n        } catch (UnknownGetterException | ReflectionException $e) {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Set a part of the Carbon object\n     *\n     * @param string                  $name\n     * @param string|int|DateTimeZone $value\n     *\n     * @throws UnknownSetterException|ReflectionException\n     *\n     * @return void\n     */\n    public function __set($name, $value)\n    {\n        if ($this->constructedObjectId === spl_object_hash($this)) {\n            $this->set($name, $value);\n\n            return;\n        }\n\n        $this->$name = $value;\n    }\n\n    /**\n     * Set a part of the Carbon object\n     *\n     * @param string|array            $name\n     * @param string|int|DateTimeZone $value\n     *\n     * @throws ImmutableException|UnknownSetterException\n     *\n     * @return $this\n     */\n    public function set($name, $value = null)\n    {\n        if ($this->isImmutable()) {\n            throw new ImmutableException(sprintf('%s class', static::class));\n        }\n\n        if (\\is_array($name)) {\n            foreach ($name as $key => $value) {\n                $this->set($key, $value);\n            }\n\n            return $this;\n        }\n\n        switch ($name) {\n            case 'milliseconds':\n            case 'millisecond':\n            case 'milli':\n            case 'microseconds':\n            case 'microsecond':\n            case 'micro':\n                if (str_starts_with($name, 'milli')) {\n                    $value *= 1000;\n                }\n\n                while ($value < 0) {\n                    $this->subSecond();\n                    $value += static::MICROSECONDS_PER_SECOND;\n                }\n\n                while ($value >= static::MICROSECONDS_PER_SECOND) {\n                    $this->addSecond();\n                    $value -= static::MICROSECONDS_PER_SECOND;\n                }\n\n                $this->modify($this->rawFormat('H:i:s.').str_pad((string) round($value), 6, '0', STR_PAD_LEFT));\n\n                break;\n\n            case 'year':\n            case 'month':\n            case 'day':\n            case 'hour':\n            case 'minute':\n            case 'second':\n                [$year, $month, $day, $hour, $minute, $second] = array_map('intval', explode('-', $this->rawFormat('Y-n-j-G-i-s')));\n                $$name = $value;\n                $this->setDateTime($year, $month, $day, $hour, $minute, $second);\n\n                break;\n\n            case 'week':\n                $this->week($value);\n\n                break;\n\n            case 'isoWeek':\n                $this->isoWeek($value);\n\n                break;\n\n            case 'weekYear':\n                $this->weekYear($value);\n\n                break;\n\n            case 'isoWeekYear':\n                $this->isoWeekYear($value);\n\n                break;\n\n            case 'dayOfYear':\n                $this->addDays($value - $this->dayOfYear);\n\n                break;\n\n            case 'timestamp':\n                $this->setTimestamp($value);\n\n                break;\n\n            case 'offset':\n                $this->setTimezone(static::safeCreateDateTimeZone($value / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR));\n\n                break;\n\n            case 'offsetMinutes':\n                $this->setTimezone(static::safeCreateDateTimeZone($value / static::MINUTES_PER_HOUR));\n\n                break;\n\n            case 'offsetHours':\n                $this->setTimezone(static::safeCreateDateTimeZone($value));\n\n                break;\n\n            case 'timezone':\n            case 'tz':\n                $this->setTimezone($value);\n\n                break;\n\n            default:\n                $macro = $this->getLocalMacro('set'.ucfirst($name));\n\n                if ($macro) {\n                    $this->executeCallableWithContext($macro, $value);\n\n                    break;\n                }\n\n                if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) {\n                    throw new UnknownSetterException($name);\n                }\n\n                $this->$name = $value;\n        }\n\n        return $this;\n    }\n\n    protected function getTranslatedFormByRegExp($baseKey, $keySuffix, $context, $subKey, $defaultValue)\n    {\n        $key = $baseKey.$keySuffix;\n        $standaloneKey = \"{$key}_standalone\";\n        $baseTranslation = $this->getTranslationMessage($key);\n\n        if ($baseTranslation instanceof Closure) {\n            return $baseTranslation($this, $context, $subKey) ?: $defaultValue;\n        }\n\n        if (\n            $this->getTranslationMessage(\"$standaloneKey.$subKey\") &&\n            (!$context || (($regExp = $this->getTranslationMessage(\"{$baseKey}_regexp\")) && !preg_match($regExp, $context)))\n        ) {\n            $key = $standaloneKey;\n        }\n\n        return $this->getTranslationMessage(\"$key.$subKey\", null, $defaultValue);\n    }\n\n    /**\n     * Get the translation of the current week day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context      whole format string\n     * @param string      $keySuffix    \"\", \"_short\" or \"_min\"\n     * @param string|null $defaultValue default value if translation missing\n     *\n     * @return string\n     */\n    public function getTranslatedDayName($context = null, $keySuffix = '', $defaultValue = null)\n    {\n        return $this->getTranslatedFormByRegExp('weekdays', $keySuffix, $context, $this->dayOfWeek, $defaultValue ?: $this->englishDayOfWeek);\n    }\n\n    /**\n     * Get the translation of the current short week day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context whole format string\n     *\n     * @return string\n     */\n    public function getTranslatedShortDayName($context = null)\n    {\n        return $this->getTranslatedDayName($context, '_short', $this->shortEnglishDayOfWeek);\n    }\n\n    /**\n     * Get the translation of the current abbreviated week day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context whole format string\n     *\n     * @return string\n     */\n    public function getTranslatedMinDayName($context = null)\n    {\n        return $this->getTranslatedDayName($context, '_min', $this->shortEnglishDayOfWeek);\n    }\n\n    /**\n     * Get the translation of the current month day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context      whole format string\n     * @param string      $keySuffix    \"\" or \"_short\"\n     * @param string|null $defaultValue default value if translation missing\n     *\n     * @return string\n     */\n    public function getTranslatedMonthName($context = null, $keySuffix = '', $defaultValue = null)\n    {\n        return $this->getTranslatedFormByRegExp('months', $keySuffix, $context, $this->month - 1, $defaultValue ?: $this->englishMonth);\n    }\n\n    /**\n     * Get the translation of the current short month day name (with context for languages with multiple forms).\n     *\n     * @param string|null $context whole format string\n     *\n     * @return string\n     */\n    public function getTranslatedShortMonthName($context = null)\n    {\n        return $this->getTranslatedMonthName($context, '_short', $this->shortEnglishMonth);\n    }\n\n    /**\n     * Get/set the day of year.\n     *\n     * @param int|null $value new value for day of year if using as setter.\n     *\n     * @return static|int\n     */\n    public function dayOfYear($value = null)\n    {\n        $dayOfYear = $this->dayOfYear;\n\n        return $value === null ? $dayOfYear : $this->addDays($value - $dayOfYear);\n    }\n\n    /**\n     * Get/set the weekday from 0 (Sunday) to 6 (Saturday).\n     *\n     * @param int|null $value new value for weekday if using as setter.\n     *\n     * @return static|int\n     */\n    public function weekday($value = null)\n    {\n        if ($value === null) {\n            return $this->dayOfWeek;\n        }\n\n        $firstDay = (int) ($this->getTranslationMessage('first_day_of_week') ?? 0);\n        $dayOfWeek = ($this->dayOfWeek + 7 - $firstDay) % 7;\n\n        return $this->addDays((($value + 7 - $firstDay) % 7) - $dayOfWeek);\n    }\n\n    /**\n     * Get/set the ISO weekday from 1 (Monday) to 7 (Sunday).\n     *\n     * @param int|null $value new value for weekday if using as setter.\n     *\n     * @return static|int\n     */\n    public function isoWeekday($value = null)\n    {\n        $dayOfWeekIso = $this->dayOfWeekIso;\n\n        return $value === null ? $dayOfWeekIso : $this->addDays($value - $dayOfWeekIso);\n    }\n\n    /**\n     * Return the number of days since the start of the week (using the current locale or the first parameter\n     * if explicitly given).\n     *\n     * @param int|null $weekStartsAt optional start allow you to specify the day of week to use to start the week,\n     *                               if not provided, start of week is inferred from the locale\n     *                               (Sunday for en_US, Monday for de_DE, etc.)\n     *\n     * @return int\n     */\n    public function getDaysFromStartOfWeek(int $weekStartsAt = null): int\n    {\n        $firstDay = (int) ($weekStartsAt ?? $this->getTranslationMessage('first_day_of_week') ?? 0);\n\n        return ($this->dayOfWeek + 7 - $firstDay) % 7;\n    }\n\n    /**\n     * Set the day (keeping the current time) to the start of the week + the number of days passed as the first\n     * parameter. First day of week is driven by the locale unless explicitly set with the second parameter.\n     *\n     * @param int      $numberOfDays number of days to add after the start of the current week\n     * @param int|null $weekStartsAt optional start allow you to specify the day of week to use to start the week,\n     *                               if not provided, start of week is inferred from the locale\n     *                               (Sunday for en_US, Monday for de_DE, etc.)\n     *\n     * @return static\n     */\n    public function setDaysFromStartOfWeek(int $numberOfDays, int $weekStartsAt = null)\n    {\n        return $this->addDays($numberOfDays - $this->getDaysFromStartOfWeek($weekStartsAt));\n    }\n\n    /**\n     * Set any unit to a new value without overflowing current other unit given.\n     *\n     * @param string $valueUnit    unit name to modify\n     * @param int    $value        new value for the input unit\n     * @param string $overflowUnit unit name to not overflow\n     *\n     * @return static\n     */\n    public function setUnitNoOverflow($valueUnit, $value, $overflowUnit)\n    {\n        try {\n            $original = $this->avoidMutation();\n            /** @var static $date */\n            $date = $this->$valueUnit($value);\n            $end = $original->avoidMutation()->endOf($overflowUnit);\n            $start = $original->avoidMutation()->startOf($overflowUnit);\n            if ($date < $start) {\n                $date = $date->setDateTimeFrom($start);\n            } elseif ($date > $end) {\n                $date = $date->setDateTimeFrom($end);\n            }\n\n            return $date;\n        } catch (BadMethodCallException | ReflectionException $exception) {\n            throw new UnknownUnitException($valueUnit, 0, $exception);\n        }\n    }\n\n    /**\n     * Add any unit to a new value without overflowing current other unit given.\n     *\n     * @param string $valueUnit    unit name to modify\n     * @param int    $value        amount to add to the input unit\n     * @param string $overflowUnit unit name to not overflow\n     *\n     * @return static\n     */\n    public function addUnitNoOverflow($valueUnit, $value, $overflowUnit)\n    {\n        return $this->setUnitNoOverflow($valueUnit, $this->$valueUnit + $value, $overflowUnit);\n    }\n\n    /**\n     * Subtract any unit to a new value without overflowing current other unit given.\n     *\n     * @param string $valueUnit    unit name to modify\n     * @param int    $value        amount to subtract to the input unit\n     * @param string $overflowUnit unit name to not overflow\n     *\n     * @return static\n     */\n    public function subUnitNoOverflow($valueUnit, $value, $overflowUnit)\n    {\n        return $this->setUnitNoOverflow($valueUnit, $this->$valueUnit - $value, $overflowUnit);\n    }\n\n    /**\n     * Returns the minutes offset to UTC if no arguments passed, else set the timezone with given minutes shift passed.\n     *\n     * @param int|null $minuteOffset\n     *\n     * @return int|static\n     */\n    public function utcOffset(int $minuteOffset = null)\n    {\n        if (\\func_num_args() < 1) {\n            return $this->offsetMinutes;\n        }\n\n        return $this->setTimezone(CarbonTimeZone::createFromMinuteOffset($minuteOffset));\n    }\n\n    /**\n     * Set the date with gregorian year, month and day numbers.\n     *\n     * @see https://php.net/manual/en/datetime.setdate.php\n     *\n     * @param int $year\n     * @param int $month\n     * @param int $day\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setDate($year, $month, $day)\n    {\n        return parent::setDate((int) $year, (int) $month, (int) $day);\n    }\n\n    /**\n     * Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates.\n     *\n     * @see https://php.net/manual/en/datetime.setisodate.php\n     *\n     * @param int $year\n     * @param int $week\n     * @param int $day\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setISODate($year, $week, $day = 1)\n    {\n        return parent::setISODate((int) $year, (int) $week, (int) $day);\n    }\n\n    /**\n     * Set the date and time all together.\n     *\n     * @param int $year\n     * @param int $month\n     * @param int $day\n     * @param int $hour\n     * @param int $minute\n     * @param int $second\n     * @param int $microseconds\n     *\n     * @return static\n     */\n    public function setDateTime($year, $month, $day, $hour, $minute, $second = 0, $microseconds = 0)\n    {\n        return $this->setDate($year, $month, $day)->setTime((int) $hour, (int) $minute, (int) $second, (int) $microseconds);\n    }\n\n    /**\n     * Resets the current time of the DateTime object to a different time.\n     *\n     * @see https://php.net/manual/en/datetime.settime.php\n     *\n     * @param int $hour\n     * @param int $minute\n     * @param int $second\n     * @param int $microseconds\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setTime($hour, $minute, $second = 0, $microseconds = 0)\n    {\n        return parent::setTime((int) $hour, (int) $minute, (int) $second, (int) $microseconds);\n    }\n\n    /**\n     * Set the instance's timestamp.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $unixTimestamp\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setTimestamp($unixTimestamp)\n    {\n        [$timestamp, $microseconds] = self::getIntegerAndDecimalParts($unixTimestamp);\n\n        return parent::setTimestamp((int) $timestamp)->setMicroseconds((int) $microseconds);\n    }\n\n    /**\n     * Set the time by time string.\n     *\n     * @param string $time\n     *\n     * @return static\n     */\n    public function setTimeFromTimeString($time)\n    {\n        if (!str_contains($time, ':')) {\n            $time .= ':0';\n        }\n\n        return $this->modify($time);\n    }\n\n    /**\n     * @alias setTimezone\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static\n     */\n    public function timezone($value)\n    {\n        return $this->setTimezone($value);\n    }\n\n    /**\n     * Set the timezone or returns the timezone name if no arguments passed.\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static|string\n     */\n    public function tz($value = null)\n    {\n        if (\\func_num_args() < 1) {\n            return $this->tzName;\n        }\n\n        return $this->setTimezone($value);\n    }\n\n    /**\n     * Set the instance's timezone from a string or object.\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function setTimezone($value)\n    {\n        $tz = static::safeCreateDateTimeZone($value);\n\n        if ($tz === false && !self::isStrictModeEnabled()) {\n            $tz = new CarbonTimeZone();\n        }\n\n        return parent::setTimezone($tz);\n    }\n\n    /**\n     * Set the instance's timezone from a string or object and add/subtract the offset difference.\n     *\n     * @param DateTimeZone|string $value\n     *\n     * @return static\n     */\n    public function shiftTimezone($value)\n    {\n        $dateTimeString = $this->format('Y-m-d H:i:s.u');\n\n        return $this\n            ->setTimezone($value)\n            ->modify($dateTimeString);\n    }\n\n    /**\n     * Set the instance's timezone to UTC.\n     *\n     * @return static\n     */\n    public function utc()\n    {\n        return $this->setTimezone('UTC');\n    }\n\n    /**\n     * Set the year, month, and date for this instance to that of the passed instance.\n     *\n     * @param Carbon|DateTimeInterface $date now if null\n     *\n     * @return static\n     */\n    public function setDateFrom($date = null)\n    {\n        $date = $this->resolveCarbon($date);\n\n        return $this->setDate($date->year, $date->month, $date->day);\n    }\n\n    /**\n     * Set the hour, minute, second and microseconds for this instance to that of the passed instance.\n     *\n     * @param Carbon|DateTimeInterface $date now if null\n     *\n     * @return static\n     */\n    public function setTimeFrom($date = null)\n    {\n        $date = $this->resolveCarbon($date);\n\n        return $this->setTime($date->hour, $date->minute, $date->second, $date->microsecond);\n    }\n\n    /**\n     * Set the date and time for this instance to that of the passed instance.\n     *\n     * @param Carbon|DateTimeInterface $date\n     *\n     * @return static\n     */\n    public function setDateTimeFrom($date = null)\n    {\n        $date = $this->resolveCarbon($date);\n\n        return $this->modify($date->rawFormat('Y-m-d H:i:s.u'));\n    }\n\n    /**\n     * Get the days of the week\n     *\n     * @return array\n     */\n    public static function getDays()\n    {\n        return static::$days;\n    }\n\n    ///////////////////////////////////////////////////////////////////\n    /////////////////////// WEEK SPECIAL DAYS /////////////////////////\n    ///////////////////////////////////////////////////////////////////\n\n    private static function getFirstDayOfWeek(): int\n    {\n        return (int) static::getTranslationMessageWith(\n            static::getTranslator(),\n            'first_day_of_week'\n        );\n    }\n\n    /**\n     * Get the first day of week\n     *\n     * @return int\n     */\n    public static function getWeekStartsAt()\n    {\n        if (static::$weekStartsAt === static::WEEK_DAY_AUTO) {\n            return self::getFirstDayOfWeek();\n        }\n\n        return static::$weekStartsAt;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             Use $weekEndsAt optional parameter instead when using endOfWeek method. You can also use the\n     *             'first_day_of_week' locale setting to change the start of week according to current locale\n     *             selected and implicitly the end of week.\n     *\n     * Set the first day of week\n     *\n     * @param int|string $day week start day (or 'auto' to get the first day of week from Carbon::getLocale() culture).\n     *\n     * @return void\n     */\n    public static function setWeekStartsAt($day)\n    {\n        static::$weekStartsAt = $day === static::WEEK_DAY_AUTO ? $day : max(0, (7 + $day) % 7);\n    }\n\n    /**\n     * Get the last day of week\n     *\n     * @return int\n     */\n    public static function getWeekEndsAt()\n    {\n        if (static::$weekStartsAt === static::WEEK_DAY_AUTO) {\n            return (int) (static::DAYS_PER_WEEK - 1 + self::getFirstDayOfWeek()) % static::DAYS_PER_WEEK;\n        }\n\n        return static::$weekEndsAt;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             Use $weekStartsAt optional parameter instead when using startOfWeek, floorWeek, ceilWeek\n     *             or roundWeek method. You can also use the 'first_day_of_week' locale setting to change the\n     *             start of week according to current locale selected and implicitly the end of week.\n     *\n     * Set the last day of week\n     *\n     * @param int|string $day week end day (or 'auto' to get the day before the first day of week\n     *                        from Carbon::getLocale() culture).\n     *\n     * @return void\n     */\n    public static function setWeekEndsAt($day)\n    {\n        static::$weekEndsAt = $day === static::WEEK_DAY_AUTO ? $day : max(0, (7 + $day) % 7);\n    }\n\n    /**\n     * Get weekend days\n     *\n     * @return array\n     */\n    public static function getWeekendDays()\n    {\n        return static::$weekendDays;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather consider week-end is always saturday and sunday, and if you have some custom\n     *             week-end days to handle, give to those days an other name and create a macro for them:\n     *\n     *             ```\n     *             Carbon::macro('isDayOff', function ($date) {\n     *                 return $date->isSunday() || $date->isMonday();\n     *             });\n     *             Carbon::macro('isNotDayOff', function ($date) {\n     *                 return !$date->isDayOff();\n     *             });\n     *             if ($someDate->isDayOff()) ...\n     *             if ($someDate->isNotDayOff()) ...\n     *             // Add 5 not-off days\n     *             $count = 5;\n     *             while ($someDate->isDayOff() || ($count-- > 0)) {\n     *                 $someDate->addDay();\n     *             }\n     *             ```\n     *\n     * Set weekend days\n     *\n     * @param array $days\n     *\n     * @return void\n     */\n    public static function setWeekendDays($days)\n    {\n        static::$weekendDays = $days;\n    }\n\n    /**\n     * Determine if a time string will produce a relative date.\n     *\n     * @param string $time\n     *\n     * @return bool true if time match a relative date, false if absolute or invalid time string\n     */\n    public static function hasRelativeKeywords($time)\n    {\n        if (!$time || strtotime($time) === false) {\n            return false;\n        }\n\n        $date1 = new DateTime('2000-01-01T00:00:00Z');\n        $date1->modify($time);\n        $date2 = new DateTime('2001-12-25T00:00:00Z');\n        $date2->modify($time);\n\n        return $date1 != $date2;\n    }\n\n    ///////////////////////////////////////////////////////////////////\n    /////////////////////// STRING FORMATTING /////////////////////////\n    ///////////////////////////////////////////////////////////////////\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use UTF-8 language packages on every machine.\n     *\n     * Set if UTF8 will be used for localized date/time.\n     *\n     * @param bool $utf8\n     */\n    public static function setUtf8($utf8)\n    {\n        static::$utf8 = $utf8;\n    }\n\n    /**\n     * Format the instance with the current locale.  You can set the current\n     * locale using setlocale() https://php.net/setlocale.\n     *\n     * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.\n     *             Use ->isoFormat() instead.\n     *             Deprecated since 2.55.0\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    public function formatLocalized($format)\n    {\n        // Check for Windows to find and replace the %e modifier correctly.\n        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {\n            $format = preg_replace('#(?<!%)((?:%%)*)%e#', '\\1%#d', $format); // @codeCoverageIgnore\n        }\n\n        $time = strtotime($this->toDateTimeString());\n        $formatted = ($this->localStrictModeEnabled ?? static::isStrictModeEnabled())\n            ? strftime($format, $time)\n            : @strftime($format, $time);\n\n        return static::$utf8\n            ? (\n                \\function_exists('mb_convert_encoding')\n                ? mb_convert_encoding($formatted, 'UTF-8', mb_list_encodings())\n                : utf8_encode($formatted)\n            )\n            : $formatted;\n    }\n\n    /**\n     * Returns list of locale formats for ISO formatting.\n     *\n     * @param string|null $locale current locale used if null\n     *\n     * @return array\n     */\n    public function getIsoFormats($locale = null)\n    {\n        return [\n            'LT' => $this->getTranslationMessage('formats.LT', $locale, 'h:mm A'),\n            'LTS' => $this->getTranslationMessage('formats.LTS', $locale, 'h:mm:ss A'),\n            'L' => $this->getTranslationMessage('formats.L', $locale, 'MM/DD/YYYY'),\n            'LL' => $this->getTranslationMessage('formats.LL', $locale, 'MMMM D, YYYY'),\n            'LLL' => $this->getTranslationMessage('formats.LLL', $locale, 'MMMM D, YYYY h:mm A'),\n            'LLLL' => $this->getTranslationMessage('formats.LLLL', $locale, 'dddd, MMMM D, YYYY h:mm A'),\n            'l' => $this->getTranslationMessage('formats.l', $locale),\n            'll' => $this->getTranslationMessage('formats.ll', $locale),\n            'lll' => $this->getTranslationMessage('formats.lll', $locale),\n            'llll' => $this->getTranslationMessage('formats.llll', $locale),\n        ];\n    }\n\n    /**\n     * Returns list of calendar formats for ISO formatting.\n     *\n     * @param string|null $locale current locale used if null\n     *\n     * @return array\n     */\n    public function getCalendarFormats($locale = null)\n    {\n        return [\n            'sameDay' => $this->getTranslationMessage('calendar.sameDay', $locale, '[Today at] LT'),\n            'nextDay' => $this->getTranslationMessage('calendar.nextDay', $locale, '[Tomorrow at] LT'),\n            'nextWeek' => $this->getTranslationMessage('calendar.nextWeek', $locale, 'dddd [at] LT'),\n            'lastDay' => $this->getTranslationMessage('calendar.lastDay', $locale, '[Yesterday at] LT'),\n            'lastWeek' => $this->getTranslationMessage('calendar.lastWeek', $locale, '[Last] dddd [at] LT'),\n            'sameElse' => $this->getTranslationMessage('calendar.sameElse', $locale, 'L'),\n        ];\n    }\n\n    /**\n     * Returns list of locale units for ISO formatting.\n     *\n     * @return array\n     */\n    public static function getIsoUnits()\n    {\n        static $units = null;\n\n        if ($units === null) {\n            $units = [\n                'OD' => ['getAltNumber', ['day']],\n                'OM' => ['getAltNumber', ['month']],\n                'OY' => ['getAltNumber', ['year']],\n                'OH' => ['getAltNumber', ['hour']],\n                'Oh' => ['getAltNumber', ['h']],\n                'Om' => ['getAltNumber', ['minute']],\n                'Os' => ['getAltNumber', ['second']],\n                'D' => 'day',\n                'DD' => ['rawFormat', ['d']],\n                'Do' => ['ordinal', ['day', 'D']],\n                'd' => 'dayOfWeek',\n                'dd' => function (CarbonInterface $date, $originalFormat = null) {\n                    return $date->getTranslatedMinDayName($originalFormat);\n                },\n                'ddd' => function (CarbonInterface $date, $originalFormat = null) {\n                    return $date->getTranslatedShortDayName($originalFormat);\n                },\n                'dddd' => function (CarbonInterface $date, $originalFormat = null) {\n                    return $date->getTranslatedDayName($originalFormat);\n                },\n                'DDD' => 'dayOfYear',\n                'DDDD' => ['getPaddedUnit', ['dayOfYear', 3]],\n                'DDDo' => ['ordinal', ['dayOfYear', 'DDD']],\n                'e' => ['weekday', []],\n                'E' => 'dayOfWeekIso',\n                'H' => ['rawFormat', ['G']],\n                'HH' => ['rawFormat', ['H']],\n                'h' => ['rawFormat', ['g']],\n                'hh' => ['rawFormat', ['h']],\n                'k' => 'noZeroHour',\n                'kk' => ['getPaddedUnit', ['noZeroHour']],\n                'hmm' => ['rawFormat', ['gi']],\n                'hmmss' => ['rawFormat', ['gis']],\n                'Hmm' => ['rawFormat', ['Gi']],\n                'Hmmss' => ['rawFormat', ['Gis']],\n                'm' => 'minute',\n                'mm' => ['rawFormat', ['i']],\n                'a' => 'meridiem',\n                'A' => 'upperMeridiem',\n                's' => 'second',\n                'ss' => ['getPaddedUnit', ['second']],\n                'S' => function (CarbonInterface $date) {\n                    return (string) floor($date->micro / 100000);\n                },\n                'SS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro / 10000), 2, '0', STR_PAD_LEFT);\n                },\n                'SSS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro / 1000), 3, '0', STR_PAD_LEFT);\n                },\n                'SSSS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro / 100), 4, '0', STR_PAD_LEFT);\n                },\n                'SSSSS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro / 10), 5, '0', STR_PAD_LEFT);\n                },\n                'SSSSSS' => ['getPaddedUnit', ['micro', 6]],\n                'SSSSSSS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro * 10), 7, '0', STR_PAD_LEFT);\n                },\n                'SSSSSSSS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro * 100), 8, '0', STR_PAD_LEFT);\n                },\n                'SSSSSSSSS' => function (CarbonInterface $date) {\n                    return str_pad((string) floor($date->micro * 1000), 9, '0', STR_PAD_LEFT);\n                },\n                'M' => 'month',\n                'MM' => ['rawFormat', ['m']],\n                'MMM' => function (CarbonInterface $date, $originalFormat = null) {\n                    $month = $date->getTranslatedShortMonthName($originalFormat);\n                    $suffix = $date->getTranslationMessage('mmm_suffix');\n                    if ($suffix && $month !== $date->monthName) {\n                        $month .= $suffix;\n                    }\n\n                    return $month;\n                },\n                'MMMM' => function (CarbonInterface $date, $originalFormat = null) {\n                    return $date->getTranslatedMonthName($originalFormat);\n                },\n                'Mo' => ['ordinal', ['month', 'M']],\n                'Q' => 'quarter',\n                'Qo' => ['ordinal', ['quarter', 'M']],\n                'G' => 'isoWeekYear',\n                'GG' => ['getPaddedUnit', ['isoWeekYear']],\n                'GGG' => ['getPaddedUnit', ['isoWeekYear', 3]],\n                'GGGG' => ['getPaddedUnit', ['isoWeekYear', 4]],\n                'GGGGG' => ['getPaddedUnit', ['isoWeekYear', 5]],\n                'g' => 'weekYear',\n                'gg' => ['getPaddedUnit', ['weekYear']],\n                'ggg' => ['getPaddedUnit', ['weekYear', 3]],\n                'gggg' => ['getPaddedUnit', ['weekYear', 4]],\n                'ggggg' => ['getPaddedUnit', ['weekYear', 5]],\n                'W' => 'isoWeek',\n                'WW' => ['getPaddedUnit', ['isoWeek']],\n                'Wo' => ['ordinal', ['isoWeek', 'W']],\n                'w' => 'week',\n                'ww' => ['getPaddedUnit', ['week']],\n                'wo' => ['ordinal', ['week', 'w']],\n                'x' => ['valueOf', []],\n                'X' => 'timestamp',\n                'Y' => 'year',\n                'YY' => ['rawFormat', ['y']],\n                'YYYY' => ['getPaddedUnit', ['year', 4]],\n                'YYYYY' => ['getPaddedUnit', ['year', 5]],\n                'YYYYYY' => function (CarbonInterface $date) {\n                    return ($date->year < 0 ? '' : '+').$date->getPaddedUnit('year', 6);\n                },\n                'z' => ['rawFormat', ['T']],\n                'zz' => 'tzName',\n                'Z' => ['getOffsetString', []],\n                'ZZ' => ['getOffsetString', ['']],\n            ];\n        }\n\n        return $units;\n    }\n\n    /**\n     * Returns a unit of the instance padded with 0 by default or any other string if specified.\n     *\n     * @param string $unit      Carbon unit name\n     * @param int    $length    Length of the output (2 by default)\n     * @param string $padString String to use for padding (\"0\" by default)\n     * @param int    $padType   Side(s) to pad (STR_PAD_LEFT by default)\n     *\n     * @return string\n     */\n    public function getPaddedUnit($unit, $length = 2, $padString = '0', $padType = STR_PAD_LEFT)\n    {\n        return ($this->$unit < 0 ? '-' : '').str_pad((string) abs($this->$unit), $length, $padString, $padType);\n    }\n\n    /**\n     * Return a property with its ordinal.\n     *\n     * @param string      $key\n     * @param string|null $period\n     *\n     * @return string\n     */\n    public function ordinal(string $key, ?string $period = null): string\n    {\n        $number = $this->$key;\n        $result = $this->translate('ordinal', [\n            ':number' => $number,\n            ':period' => (string) $period,\n        ]);\n\n        return (string) ($result === 'ordinal' ? $number : $result);\n    }\n\n    /**\n     * Return the meridiem of the current time in the current locale.\n     *\n     * @param bool $isLower if true, returns lowercase variant if available in the current locale.\n     *\n     * @return string\n     */\n    public function meridiem(bool $isLower = false): string\n    {\n        $hour = $this->hour;\n        $index = $hour < 12 ? 0 : 1;\n\n        if ($isLower) {\n            $key = 'meridiem.'.($index + 2);\n            $result = $this->translate($key);\n\n            if ($result !== $key) {\n                return $result;\n            }\n        }\n\n        $key = \"meridiem.$index\";\n        $result = $this->translate($key);\n        if ($result === $key) {\n            $result = $this->translate('meridiem', [\n                ':hour' => $this->hour,\n                ':minute' => $this->minute,\n                ':isLower' => $isLower,\n            ]);\n\n            if ($result === 'meridiem') {\n                return $isLower ? $this->latinMeridiem : $this->latinUpperMeridiem;\n            }\n        } elseif ($isLower) {\n            $result = mb_strtolower($result);\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns the alternative number for a given date property if available in the current locale.\n     *\n     * @param string $key date property\n     *\n     * @return string\n     */\n    public function getAltNumber(string $key): string\n    {\n        return $this->translateNumber(\\strlen($key) > 1 ? $this->$key : $this->rawFormat('h'));\n    }\n\n    /**\n     * Format in the current language using ISO replacement patterns.\n     *\n     * @param string      $format\n     * @param string|null $originalFormat provide context if a chunk has been passed alone\n     *\n     * @return string\n     */\n    public function isoFormat(string $format, ?string $originalFormat = null): string\n    {\n        $result = '';\n        $length = mb_strlen($format);\n        $originalFormat = $originalFormat ?: $format;\n        $inEscaped = false;\n        $formats = null;\n        $units = null;\n\n        for ($i = 0; $i < $length; $i++) {\n            $char = mb_substr($format, $i, 1);\n\n            if ($char === '\\\\') {\n                $result .= mb_substr($format, ++$i, 1);\n\n                continue;\n            }\n\n            if ($char === '[' && !$inEscaped) {\n                $inEscaped = true;\n\n                continue;\n            }\n\n            if ($char === ']' && $inEscaped) {\n                $inEscaped = false;\n\n                continue;\n            }\n\n            if ($inEscaped) {\n                $result .= $char;\n\n                continue;\n            }\n\n            $input = mb_substr($format, $i);\n\n            if (preg_match('/^(LTS|LT|l{1,4}|L{1,4})/', $input, $match)) {\n                if ($formats === null) {\n                    $formats = $this->getIsoFormats();\n                }\n\n                $code = $match[0];\n                $sequence = $formats[$code] ?? preg_replace_callback(\n                    '/MMMM|MM|DD|dddd/',\n                    function ($code) {\n                        return mb_substr($code[0], 1);\n                    },\n                    $formats[strtoupper($code)] ?? ''\n                );\n                $rest = mb_substr($format, $i + mb_strlen($code));\n                $format = mb_substr($format, 0, $i).$sequence.$rest;\n                $length = mb_strlen($format);\n                $input = $sequence.$rest;\n            }\n\n            if (preg_match('/^'.CarbonInterface::ISO_FORMAT_REGEXP.'/', $input, $match)) {\n                $code = $match[0];\n\n                if ($units === null) {\n                    $units = static::getIsoUnits();\n                }\n\n                $sequence = $units[$code] ?? '';\n\n                if ($sequence instanceof Closure) {\n                    $sequence = $sequence($this, $originalFormat);\n                } elseif (\\is_array($sequence)) {\n                    try {\n                        $sequence = $this->{$sequence[0]}(...$sequence[1]);\n                    } catch (ReflectionException | InvalidArgumentException | BadMethodCallException $e) {\n                        $sequence = '';\n                    }\n                } elseif (\\is_string($sequence)) {\n                    $sequence = $this->$sequence ?? $code;\n                }\n\n                $format = mb_substr($format, 0, $i).$sequence.mb_substr($format, $i + mb_strlen($code));\n                $i += mb_strlen((string) $sequence) - 1;\n                $length = mb_strlen($format);\n                $char = $sequence;\n            }\n\n            $result .= $char;\n        }\n\n        return $result;\n    }\n\n    /**\n     * List of replacements from date() format to isoFormat().\n     *\n     * @return array\n     */\n    public static function getFormatsToIsoReplacements()\n    {\n        static $replacements = null;\n\n        if ($replacements === null) {\n            $replacements = [\n                'd' => true,\n                'D' => 'ddd',\n                'j' => true,\n                'l' => 'dddd',\n                'N' => true,\n                'S' => function ($date) {\n                    $day = $date->rawFormat('j');\n\n                    return str_replace((string) $day, '', $date->isoFormat('Do'));\n                },\n                'w' => true,\n                'z' => true,\n                'W' => true,\n                'F' => 'MMMM',\n                'm' => true,\n                'M' => 'MMM',\n                'n' => true,\n                't' => true,\n                'L' => true,\n                'o' => true,\n                'Y' => true,\n                'y' => true,\n                'a' => 'a',\n                'A' => 'A',\n                'B' => true,\n                'g' => true,\n                'G' => true,\n                'h' => true,\n                'H' => true,\n                'i' => true,\n                's' => true,\n                'u' => true,\n                'v' => true,\n                'E' => true,\n                'I' => true,\n                'O' => true,\n                'P' => true,\n                'Z' => true,\n                'c' => true,\n                'r' => true,\n                'U' => true,\n                'T' => true,\n            ];\n        }\n\n        return $replacements;\n    }\n\n    /**\n     * Format as ->format() do (using date replacements patterns from https://php.net/manual/en/function.date.php)\n     * but translate words whenever possible (months, day names, etc.) using the current locale.\n     *\n     * @param string $format\n     *\n     * @return string\n     */\n    public function translatedFormat(string $format): string\n    {\n        $replacements = static::getFormatsToIsoReplacements();\n        $context = '';\n        $isoFormat = '';\n        $length = mb_strlen($format);\n\n        for ($i = 0; $i < $length; $i++) {\n            $char = mb_substr($format, $i, 1);\n\n            if ($char === '\\\\') {\n                $replacement = mb_substr($format, $i, 2);\n                $isoFormat .= $replacement;\n                $i++;\n\n                continue;\n            }\n\n            if (!isset($replacements[$char])) {\n                $replacement = preg_match('/^[A-Za-z]$/', $char) ? \"\\\\$char\" : $char;\n                $isoFormat .= $replacement;\n                $context .= $replacement;\n\n                continue;\n            }\n\n            $replacement = $replacements[$char];\n\n            if ($replacement === true) {\n                static $contextReplacements = null;\n\n                if ($contextReplacements === null) {\n                    $contextReplacements = [\n                        'm' => 'MM',\n                        'd' => 'DD',\n                        't' => 'D',\n                        'j' => 'D',\n                        'N' => 'e',\n                        'w' => 'e',\n                        'n' => 'M',\n                        'o' => 'YYYY',\n                        'Y' => 'YYYY',\n                        'y' => 'YY',\n                        'g' => 'h',\n                        'G' => 'H',\n                        'h' => 'hh',\n                        'H' => 'HH',\n                        'i' => 'mm',\n                        's' => 'ss',\n                    ];\n                }\n\n                $isoFormat .= '['.$this->rawFormat($char).']';\n                $context .= $contextReplacements[$char] ?? ' ';\n\n                continue;\n            }\n\n            if ($replacement instanceof Closure) {\n                $replacement = '['.$replacement($this).']';\n                $isoFormat .= $replacement;\n                $context .= $replacement;\n\n                continue;\n            }\n\n            $isoFormat .= $replacement;\n            $context .= $replacement;\n        }\n\n        return $this->isoFormat($isoFormat, $context);\n    }\n\n    /**\n     * Returns the offset hour and minute formatted with +/- and a given separator (\":\" by default).\n     * For example, if the time zone is 9 hours 30 minutes, you'll get \"+09:30\", with \"@@\" as first\n     * argument, \"+09@@30\", with \"\" as first argument, \"+0930\". Negative offset will return something\n     * like \"-12:00\".\n     *\n     * @param string $separator string to place between hours and minutes (\":\" by default)\n     *\n     * @return string\n     */\n    public function getOffsetString($separator = ':')\n    {\n        $second = $this->getOffset();\n        $symbol = $second < 0 ? '-' : '+';\n        $minute = abs($second) / static::SECONDS_PER_MINUTE;\n        $hour = str_pad((string) floor($minute / static::MINUTES_PER_HOUR), 2, '0', STR_PAD_LEFT);\n        $minute = str_pad((string) (((int) $minute) % static::MINUTES_PER_HOUR), 2, '0', STR_PAD_LEFT);\n\n        return \"$symbol$hour$separator$minute\";\n    }\n\n    protected static function executeStaticCallable($macro, ...$parameters)\n    {\n        return static::bindMacroContext(null, function () use (&$macro, &$parameters) {\n            if ($macro instanceof Closure) {\n                $boundMacro = @Closure::bind($macro, null, static::class);\n\n                return ($boundMacro ?: $macro)(...$parameters);\n            }\n\n            return $macro(...$parameters);\n        });\n    }\n\n    /**\n     * Dynamically handle calls to the class.\n     *\n     * @param string $method     magic method name called\n     * @param array  $parameters parameters list\n     *\n     * @throws BadMethodCallException\n     *\n     * @return mixed\n     */\n    public static function __callStatic($method, $parameters)\n    {\n        if (!static::hasMacro($method)) {\n            foreach (static::getGenericMacros() as $callback) {\n                try {\n                    return static::executeStaticCallable($callback, $method, ...$parameters);\n                } catch (BadMethodCallException $exception) {\n                    continue;\n                }\n            }\n            if (static::isStrictModeEnabled()) {\n                throw new UnknownMethodException(sprintf('%s::%s', static::class, $method));\n            }\n\n            return null;\n        }\n\n        return static::executeStaticCallable(static::$globalMacros[$method], ...$parameters);\n    }\n\n    /**\n     * Set specified unit to new given value.\n     *\n     * @param string $unit  year, month, day, hour, minute, second or microsecond\n     * @param int    $value new value for given unit\n     *\n     * @return static\n     */\n    public function setUnit($unit, $value = null)\n    {\n        $unit = static::singularUnit($unit);\n        $dateUnits = ['year', 'month', 'day'];\n        if (\\in_array($unit, $dateUnits)) {\n            return $this->setDate(...array_map(function ($name) use ($unit, $value) {\n                return (int) ($name === $unit ? $value : $this->$name);\n            }, $dateUnits));\n        }\n\n        $units = ['hour', 'minute', 'second', 'micro'];\n        if ($unit === 'millisecond' || $unit === 'milli') {\n            $value *= 1000;\n            $unit = 'micro';\n        } elseif ($unit === 'microsecond') {\n            $unit = 'micro';\n        }\n\n        return $this->setTime(...array_map(function ($name) use ($unit, $value) {\n            return (int) ($name === $unit ? $value : $this->$name);\n        }, $units));\n    }\n\n    /**\n     * Returns standardized singular of a given singular/plural unit name (in English).\n     *\n     * @param string $unit\n     *\n     * @return string\n     */\n    public static function singularUnit(string $unit): string\n    {\n        $unit = rtrim(mb_strtolower($unit), 's');\n\n        if ($unit === 'centurie') {\n            return 'century';\n        }\n\n        if ($unit === 'millennia') {\n            return 'millennium';\n        }\n\n        return $unit;\n    }\n\n    /**\n     * Returns standardized plural of a given singular/plural unit name (in English).\n     *\n     * @param string $unit\n     *\n     * @return string\n     */\n    public static function pluralUnit(string $unit): string\n    {\n        $unit = rtrim(strtolower($unit), 's');\n\n        if ($unit === 'century') {\n            return 'centuries';\n        }\n\n        if ($unit === 'millennium' || $unit === 'millennia') {\n            return 'millennia';\n        }\n\n        return \"{$unit}s\";\n    }\n\n    protected function executeCallable($macro, ...$parameters)\n    {\n        if ($macro instanceof Closure) {\n            $boundMacro = @$macro->bindTo($this, static::class) ?: @$macro->bindTo(null, static::class);\n\n            return ($boundMacro ?: $macro)(...$parameters);\n        }\n\n        return $macro(...$parameters);\n    }\n\n    protected function executeCallableWithContext($macro, ...$parameters)\n    {\n        return static::bindMacroContext($this, function () use (&$macro, &$parameters) {\n            return $this->executeCallable($macro, ...$parameters);\n        });\n    }\n\n    protected static function getGenericMacros()\n    {\n        foreach (static::$globalGenericMacros as $list) {\n            foreach ($list as $macro) {\n                yield $macro;\n            }\n        }\n    }\n\n    /**\n     * Dynamically handle calls to the class.\n     *\n     * @param string $method     magic method name called\n     * @param array  $parameters parameters list\n     *\n     * @throws UnknownMethodException|BadMethodCallException|ReflectionException|Throwable\n     *\n     * @return mixed\n     */\n    public function __call($method, $parameters)\n    {\n        $diffSizes = [\n            // @mode diffForHumans\n            'short' => true,\n            // @mode diffForHumans\n            'long' => false,\n        ];\n        $diffSyntaxModes = [\n            // @call diffForHumans\n            'Absolute' => CarbonInterface::DIFF_ABSOLUTE,\n            // @call diffForHumans\n            'Relative' => CarbonInterface::DIFF_RELATIVE_AUTO,\n            // @call diffForHumans\n            'RelativeToNow' => CarbonInterface::DIFF_RELATIVE_TO_NOW,\n            // @call diffForHumans\n            'RelativeToOther' => CarbonInterface::DIFF_RELATIVE_TO_OTHER,\n        ];\n        $sizePattern = implode('|', array_keys($diffSizes));\n        $syntaxPattern = implode('|', array_keys($diffSyntaxModes));\n\n        if (preg_match(\"/^(?<size>$sizePattern)(?<syntax>$syntaxPattern)DiffForHumans$/\", $method, $match)) {\n            $dates = array_filter($parameters, function ($parameter) {\n                return $parameter instanceof DateTimeInterface;\n            });\n            $other = null;\n\n            if (\\count($dates)) {\n                $key = key($dates);\n                $other = current($dates);\n                array_splice($parameters, $key, 1);\n            }\n\n            return $this->diffForHumans($other, $diffSyntaxModes[$match['syntax']], $diffSizes[$match['size']], ...$parameters);\n        }\n\n        $roundedValue = $this->callRoundMethod($method, $parameters);\n\n        if ($roundedValue !== null) {\n            return $roundedValue;\n        }\n\n        $unit = rtrim($method, 's');\n\n        if (str_starts_with($unit, 'is')) {\n            $word = substr($unit, 2);\n\n            if (\\in_array($word, static::$days, true)) {\n                return $this->isDayOfWeek($word);\n            }\n\n            switch ($word) {\n                // @call is Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.)\n                case 'Utc':\n                case 'UTC':\n                    return $this->utc;\n                // @call is Check if the current instance has non-UTC timezone.\n                case 'Local':\n                    return $this->local;\n                // @call is Check if the current instance is a valid date.\n                case 'Valid':\n                    return $this->year !== 0;\n                // @call is Check if the current instance is in a daylight saving time.\n                case 'DST':\n                    return $this->dst;\n            }\n        }\n\n        $action = substr($unit, 0, 3);\n        $overflow = null;\n\n        if ($action === 'set') {\n            $unit = strtolower(substr($unit, 3));\n        }\n\n        if (\\in_array($unit, static::$units, true)) {\n            return $this->setUnit($unit, ...$parameters);\n        }\n\n        if ($action === 'add' || $action === 'sub') {\n            $unit = substr($unit, 3);\n\n            if (str_starts_with($unit, 'Real')) {\n                $unit = static::singularUnit(substr($unit, 4));\n\n                return $this->{\"{$action}RealUnit\"}($unit, ...$parameters);\n            }\n\n            if (preg_match('/^(Month|Quarter|Year|Decade|Century|Centurie|Millennium|Millennia)s?(No|With|Without|WithNo)Overflow$/', $unit, $match)) {\n                $unit = $match[1];\n                $overflow = $match[2] === 'With';\n            }\n\n            $unit = static::singularUnit($unit);\n        }\n\n        if (static::isModifiableUnit($unit)) {\n            return $this->{\"{$action}Unit\"}($unit, $this->getMagicParameter($parameters, 0, 'value', 1), $overflow);\n        }\n\n        $sixFirstLetters = substr($unit, 0, 6);\n        $factor = -1;\n\n        if ($sixFirstLetters === 'isLast') {\n            $sixFirstLetters = 'isNext';\n            $factor = 1;\n        }\n\n        if ($sixFirstLetters === 'isNext') {\n            $lowerUnit = strtolower(substr($unit, 6));\n\n            if (static::isModifiableUnit($lowerUnit)) {\n                return $this->copy()->addUnit($lowerUnit, $factor, false)->isSameUnit($lowerUnit, ...$parameters);\n            }\n        }\n\n        if ($sixFirstLetters === 'isSame') {\n            try {\n                return $this->isSameUnit(strtolower(substr($unit, 6)), ...$parameters);\n            } catch (BadComparisonUnitException $exception) {\n                // Try next\n            }\n        }\n\n        if (str_starts_with($unit, 'isCurrent')) {\n            try {\n                return $this->isCurrentUnit(strtolower(substr($unit, 9)));\n            } catch (BadComparisonUnitException | BadMethodCallException $exception) {\n                // Try next\n            }\n        }\n\n        if (str_ends_with($method, 'Until')) {\n            try {\n                $unit = static::singularUnit(substr($method, 0, -5));\n\n                return $this->range(\n                    $this->getMagicParameter($parameters, 0, 'endDate', $this),\n                    $this->getMagicParameter($parameters, 1, 'factor', 1),\n                    $unit\n                );\n            } catch (InvalidArgumentException $exception) {\n                // Try macros\n            }\n        }\n\n        return static::bindMacroContext($this, function () use (&$method, &$parameters) {\n            $macro = $this->getLocalMacro($method);\n\n            if (!$macro) {\n                foreach ([$this->localGenericMacros ?: [], static::getGenericMacros()] as $list) {\n                    foreach ($list as $callback) {\n                        try {\n                            return $this->executeCallable($callback, $method, ...$parameters);\n                        } catch (BadMethodCallException $exception) {\n                            continue;\n                        }\n                    }\n                }\n\n                if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) {\n                    throw new UnknownMethodException($method);\n                }\n\n                return null;\n            }\n\n            return $this->executeCallable($macro, ...$parameters);\n        });\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/DeprecatedProperties.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\ntrait DeprecatedProperties\n{\n    /**\n     * the day of week in current locale LC_TIME\n     *\n     * @var string\n     *\n     * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.\n     *             Use ->isoFormat('MMM') instead.\n     *             Deprecated since 2.55.0\n     */\n    public $localeDayOfWeek;\n\n    /**\n     * the abbreviated day of week in current locale LC_TIME\n     *\n     * @var string\n     *\n     * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.\n     *             Use ->isoFormat('dddd') instead.\n     *             Deprecated since 2.55.0\n     */\n    public $shortLocaleDayOfWeek;\n\n    /**\n     * the month in current locale LC_TIME\n     *\n     * @var string\n     *\n     * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.\n     *             Use ->isoFormat('ddd') instead.\n     *             Deprecated since 2.55.0\n     */\n    public $localeMonth;\n\n    /**\n     * the abbreviated month in current locale LC_TIME\n     *\n     * @var string\n     *\n     * @deprecated It uses OS language package and strftime() which is deprecated since PHP 8.1.\n     *             Use ->isoFormat('MMMM') instead.\n     *             Deprecated since 2.55.0\n     */\n    public $shortLocaleMonth;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Carbon\\CarbonInterface;\nuse Carbon\\CarbonInterval;\nuse Carbon\\CarbonPeriod;\nuse Carbon\\Translator;\nuse Closure;\nuse DateInterval;\nuse DateTimeInterface;\nuse ReturnTypeWillChange;\n\n/**\n * Trait Difference.\n *\n * Depends on the following methods:\n *\n * @method bool lessThan($date)\n * @method static copy()\n * @method static resolveCarbon($date = null)\n * @method static Translator translator()\n */\ntrait Difference\n{\n    /**\n     * @codeCoverageIgnore\n     *\n     * @param CarbonInterval $diff\n     */\n    protected static function fixNegativeMicroseconds(CarbonInterval $diff)\n    {\n        if ($diff->s !== 0 || $diff->i !== 0 || $diff->h !== 0 || $diff->d !== 0 || $diff->m !== 0 || $diff->y !== 0) {\n            $diff->f = (round($diff->f * 1000000) + 1000000) / 1000000;\n            $diff->s--;\n\n            if ($diff->s < 0) {\n                $diff->s += 60;\n                $diff->i--;\n\n                if ($diff->i < 0) {\n                    $diff->i += 60;\n                    $diff->h--;\n\n                    if ($diff->h < 0) {\n                        $diff->h += 24;\n                        $diff->d--;\n\n                        if ($diff->d < 0) {\n                            $diff->d += 30;\n                            $diff->m--;\n\n                            if ($diff->m < 0) {\n                                $diff->m += 12;\n                                $diff->y--;\n                            }\n                        }\n                    }\n                }\n            }\n\n            return;\n        }\n\n        $diff->f *= -1;\n        $diff->invert();\n    }\n\n    /**\n     * @param DateInterval $diff\n     * @param bool         $absolute\n     *\n     * @return CarbonInterval\n     */\n    protected static function fixDiffInterval(DateInterval $diff, $absolute, array $skip = [])\n    {\n        $diff = CarbonInterval::instance($diff, $skip);\n\n        // Work-around for https://bugs.php.net/bug.php?id=77145\n        // @codeCoverageIgnoreStart\n        if ($diff->f > 0 && $diff->y === -1 && $diff->m === 11 && $diff->d >= 27 && $diff->h === 23 && $diff->i === 59 && $diff->s === 59) {\n            $diff->y = 0;\n            $diff->m = 0;\n            $diff->d = 0;\n            $diff->h = 0;\n            $diff->i = 0;\n            $diff->s = 0;\n            $diff->f = (1000000 - round($diff->f * 1000000)) / 1000000;\n            $diff->invert();\n        } elseif ($diff->f < 0) {\n            static::fixNegativeMicroseconds($diff);\n        }\n        // @codeCoverageIgnoreEnd\n\n        if ($absolute && $diff->invert) {\n            $diff->invert();\n        }\n\n        return $diff;\n    }\n\n    /**\n     * Get the difference as a DateInterval instance.\n     * Return relative interval (negative if $absolute flag is not set to true and the given date is before\n     * current one).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return DateInterval\n     */\n    #[ReturnTypeWillChange]\n    public function diff($date = null, $absolute = false)\n    {\n        $other = $this->resolveCarbon($date);\n\n        // Work-around for https://bugs.php.net/bug.php?id=81458\n        // It was initially introduced for https://bugs.php.net/bug.php?id=80998\n        // The very specific case of 80998 was fixed in PHP 8.1beta3, but it introduced 81458\n        // So we still need to keep this for now\n        // @codeCoverageIgnoreStart\n        if (version_compare(PHP_VERSION, '8.1.0-dev', '>=') && $other->tz !== $this->tz) {\n            $other = $other->avoidMutation()->tz($this->tz);\n        }\n        // @codeCoverageIgnoreEnd\n\n        return parent::diff($other, (bool) $absolute);\n    }\n\n    /**\n     * Get the difference as a CarbonInterval instance.\n     * Return relative interval (negative if $absolute flag is not set to true and the given date is before\n     * current one).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return CarbonInterval\n     */\n    public function diffAsCarbonInterval($date = null, $absolute = true, array $skip = [])\n    {\n        return static::fixDiffInterval($this->diff($this->resolveCarbon($date), $absolute), $absolute, $skip);\n    }\n\n    /**\n     * Get the difference in years\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInYears($date = null, $absolute = true)\n    {\n        return (int) $this->diff($this->resolveCarbon($date), $absolute)->format('%r%y');\n    }\n\n    /**\n     * Get the difference in quarters rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInQuarters($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInMonths($date, $absolute) / static::MONTHS_PER_QUARTER);\n    }\n\n    /**\n     * Get the difference in months rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMonths($date = null, $absolute = true)\n    {\n        $date = $this->resolveCarbon($date)->avoidMutation()->tz($this->tz);\n\n        [$yearStart, $monthStart, $dayStart] = explode('-', $this->format('Y-m-dHisu'));\n        [$yearEnd, $monthEnd, $dayEnd] = explode('-', $date->format('Y-m-dHisu'));\n\n        $diff = (((int) $yearEnd) - ((int) $yearStart)) * static::MONTHS_PER_YEAR +\n            ((int) $monthEnd) - ((int) $monthStart);\n\n        if ($diff > 0) {\n            $diff -= ($dayStart > $dayEnd ? 1 : 0);\n        } elseif ($diff < 0) {\n            $diff += ($dayStart < $dayEnd ? 1 : 0);\n        }\n\n        return $absolute ? abs($diff) : $diff;\n    }\n\n    /**\n     * Get the difference in weeks rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInWeeks($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInDays($date, $absolute) / static::DAYS_PER_WEEK);\n    }\n\n    /**\n     * Get the difference in days rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInDays($date = null, $absolute = true)\n    {\n        return $this->getIntervalDayDiff($this->diff($this->resolveCarbon($date), $absolute));\n    }\n\n    /**\n     * Get the difference in days using a filter closure rounded down.\n     *\n     * @param Closure                                                $callback\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInDaysFiltered(Closure $callback, $date = null, $absolute = true)\n    {\n        return $this->diffFiltered(CarbonInterval::day(), $callback, $date, $absolute);\n    }\n\n    /**\n     * Get the difference in hours using a filter closure rounded down.\n     *\n     * @param Closure                                                $callback\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInHoursFiltered(Closure $callback, $date = null, $absolute = true)\n    {\n        return $this->diffFiltered(CarbonInterval::hour(), $callback, $date, $absolute);\n    }\n\n    /**\n     * Get the difference by the given interval using a filter closure.\n     *\n     * @param CarbonInterval                                         $ci       An interval to traverse by\n     * @param Closure                                                $callback\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffFiltered(CarbonInterval $ci, Closure $callback, $date = null, $absolute = true)\n    {\n        $start = $this;\n        $end = $this->resolveCarbon($date);\n        $inverse = false;\n\n        if ($end < $start) {\n            $start = $end;\n            $end = $this;\n            $inverse = true;\n        }\n\n        $options = CarbonPeriod::EXCLUDE_END_DATE | ($this->isMutable() ? 0 : CarbonPeriod::IMMUTABLE);\n        $diff = $ci->toPeriod($start, $end, $options)->filter($callback)->count();\n\n        return $inverse && !$absolute ? -$diff : $diff;\n    }\n\n    /**\n     * Get the difference in weekdays rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInWeekdays($date = null, $absolute = true)\n    {\n        return $this->diffInDaysFiltered(static function (CarbonInterface $date) {\n            return $date->isWeekday();\n        }, $this->resolveCarbon($date)->avoidMutation()->modify($this->format('H:i:s.u')), $absolute);\n    }\n\n    /**\n     * Get the difference in weekend days using a filter rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInWeekendDays($date = null, $absolute = true)\n    {\n        return $this->diffInDaysFiltered(static function (CarbonInterface $date) {\n            return $date->isWeekend();\n        }, $this->resolveCarbon($date)->avoidMutation()->modify($this->format('H:i:s.u')), $absolute);\n    }\n\n    /**\n     * Get the difference in hours rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInHours($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInSeconds($date, $absolute) / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR);\n    }\n\n    /**\n     * Get the difference in hours rounded down using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealHours($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInRealSeconds($date, $absolute) / static::SECONDS_PER_MINUTE / static::MINUTES_PER_HOUR);\n    }\n\n    /**\n     * Get the difference in minutes rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMinutes($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInSeconds($date, $absolute) / static::SECONDS_PER_MINUTE);\n    }\n\n    /**\n     * Get the difference in minutes rounded down using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealMinutes($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInRealSeconds($date, $absolute) / static::SECONDS_PER_MINUTE);\n    }\n\n    /**\n     * Get the difference in seconds rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInSeconds($date = null, $absolute = true)\n    {\n        $diff = $this->diff($date);\n\n        if ($diff->days === 0) {\n            $diff = static::fixDiffInterval($diff, $absolute);\n        }\n\n        $value = (((($diff->m || $diff->y ? $diff->days : $diff->d) * static::HOURS_PER_DAY) +\n            $diff->h) * static::MINUTES_PER_HOUR +\n            $diff->i) * static::SECONDS_PER_MINUTE +\n            $diff->s;\n\n        return $absolute || !$diff->invert ? $value : -$value;\n    }\n\n    /**\n     * Get the difference in microseconds.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMicroseconds($date = null, $absolute = true)\n    {\n        $diff = $this->diff($date);\n        $value = (int) round(((((($diff->m || $diff->y ? $diff->days : $diff->d) * static::HOURS_PER_DAY) +\n            $diff->h) * static::MINUTES_PER_HOUR +\n            $diff->i) * static::SECONDS_PER_MINUTE +\n            ($diff->f + $diff->s)) * static::MICROSECONDS_PER_SECOND);\n\n        return $absolute || !$diff->invert ? $value : -$value;\n    }\n\n    /**\n     * Get the difference in milliseconds rounded down.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInMilliseconds($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInMicroseconds($date, $absolute) / static::MICROSECONDS_PER_MILLISECOND);\n    }\n\n    /**\n     * Get the difference in seconds using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealSeconds($date = null, $absolute = true)\n    {\n        /** @var CarbonInterface $date */\n        $date = $this->resolveCarbon($date);\n        $value = $date->getTimestamp() - $this->getTimestamp();\n\n        return $absolute ? abs($value) : $value;\n    }\n\n    /**\n     * Get the difference in microseconds using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealMicroseconds($date = null, $absolute = true)\n    {\n        /** @var CarbonInterface $date */\n        $date = $this->resolveCarbon($date);\n        $value = ($date->timestamp - $this->timestamp) * static::MICROSECONDS_PER_SECOND +\n            $date->micro - $this->micro;\n\n        return $absolute ? abs($value) : $value;\n    }\n\n    /**\n     * Get the difference in milliseconds rounded down using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return int\n     */\n    public function diffInRealMilliseconds($date = null, $absolute = true)\n    {\n        return (int) ($this->diffInRealMicroseconds($date, $absolute) / static::MICROSECONDS_PER_MILLISECOND);\n    }\n\n    /**\n     * Get the difference in seconds as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInSeconds($date = null, $absolute = true)\n    {\n        return (float) ($this->diffInMicroseconds($date, $absolute) / static::MICROSECONDS_PER_SECOND);\n    }\n\n    /**\n     * Get the difference in minutes as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInMinutes($date = null, $absolute = true)\n    {\n        return $this->floatDiffInSeconds($date, $absolute) / static::SECONDS_PER_MINUTE;\n    }\n\n    /**\n     * Get the difference in hours as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInHours($date = null, $absolute = true)\n    {\n        return $this->floatDiffInMinutes($date, $absolute) / static::MINUTES_PER_HOUR;\n    }\n\n    /**\n     * Get the difference in days as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInDays($date = null, $absolute = true)\n    {\n        $hoursDiff = $this->floatDiffInHours($date, $absolute);\n        $interval = $this->diff($date, $absolute);\n\n        if ($interval->y === 0 && $interval->m === 0 && $interval->d === 0) {\n            return $hoursDiff / static::HOURS_PER_DAY;\n        }\n\n        $daysDiff = $this->getIntervalDayDiff($interval);\n\n        return $daysDiff + fmod($hoursDiff, static::HOURS_PER_DAY) / static::HOURS_PER_DAY;\n    }\n\n    /**\n     * Get the difference in weeks as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInWeeks($date = null, $absolute = true)\n    {\n        return $this->floatDiffInDays($date, $absolute) / static::DAYS_PER_WEEK;\n    }\n\n    /**\n     * Get the difference in months as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInMonths($date = null, $absolute = true)\n    {\n        $start = $this;\n        $end = $this->resolveCarbon($date);\n        $ascending = ($start <= $end);\n        $sign = $absolute || $ascending ? 1 : -1;\n        if (!$ascending) {\n            [$start, $end] = [$end, $start];\n        }\n        $monthsDiff = $start->diffInMonths($end);\n        /** @var Carbon|CarbonImmutable $floorEnd */\n        $floorEnd = $start->avoidMutation()->addMonths($monthsDiff);\n\n        if ($floorEnd >= $end) {\n            return $sign * $monthsDiff;\n        }\n\n        /** @var Carbon|CarbonImmutable $startOfMonthAfterFloorEnd */\n        $startOfMonthAfterFloorEnd = $floorEnd->avoidMutation()->addMonth()->startOfMonth();\n\n        if ($startOfMonthAfterFloorEnd > $end) {\n            return $sign * ($monthsDiff + $floorEnd->floatDiffInDays($end) / $floorEnd->daysInMonth);\n        }\n\n        return $sign * ($monthsDiff + $floorEnd->floatDiffInDays($startOfMonthAfterFloorEnd) / $floorEnd->daysInMonth + $startOfMonthAfterFloorEnd->floatDiffInDays($end) / $end->daysInMonth);\n    }\n\n    /**\n     * Get the difference in year as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInYears($date = null, $absolute = true)\n    {\n        $start = $this;\n        $end = $this->resolveCarbon($date);\n        $ascending = ($start <= $end);\n        $sign = $absolute || $ascending ? 1 : -1;\n        if (!$ascending) {\n            [$start, $end] = [$end, $start];\n        }\n        $yearsDiff = $start->diffInYears($end);\n        /** @var Carbon|CarbonImmutable $floorEnd */\n        $floorEnd = $start->avoidMutation()->addYears($yearsDiff);\n\n        if ($floorEnd >= $end) {\n            return $sign * $yearsDiff;\n        }\n\n        /** @var Carbon|CarbonImmutable $startOfYearAfterFloorEnd */\n        $startOfYearAfterFloorEnd = $floorEnd->avoidMutation()->addYear()->startOfYear();\n\n        if ($startOfYearAfterFloorEnd > $end) {\n            return $sign * ($yearsDiff + $floorEnd->floatDiffInDays($end) / $floorEnd->daysInYear);\n        }\n\n        return $sign * ($yearsDiff + $floorEnd->floatDiffInDays($startOfYearAfterFloorEnd) / $floorEnd->daysInYear + $startOfYearAfterFloorEnd->floatDiffInDays($end) / $end->daysInYear);\n    }\n\n    /**\n     * Get the difference in seconds as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealSeconds($date = null, $absolute = true)\n    {\n        return $this->diffInRealMicroseconds($date, $absolute) / static::MICROSECONDS_PER_SECOND;\n    }\n\n    /**\n     * Get the difference in minutes as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealMinutes($date = null, $absolute = true)\n    {\n        return $this->floatDiffInRealSeconds($date, $absolute) / static::SECONDS_PER_MINUTE;\n    }\n\n    /**\n     * Get the difference in hours as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealHours($date = null, $absolute = true)\n    {\n        return $this->floatDiffInRealMinutes($date, $absolute) / static::MINUTES_PER_HOUR;\n    }\n\n    /**\n     * Get the difference in days as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealDays($date = null, $absolute = true)\n    {\n        $date = $this->resolveUTC($date);\n        $utc = $this->avoidMutation()->utc();\n        $hoursDiff = $utc->floatDiffInRealHours($date, $absolute);\n\n        return ($hoursDiff < 0 ? -1 : 1) * $utc->diffInDays($date) + fmod($hoursDiff, static::HOURS_PER_DAY) / static::HOURS_PER_DAY;\n    }\n\n    /**\n     * Get the difference in weeks as float (microsecond-precision).\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealWeeks($date = null, $absolute = true)\n    {\n        return $this->floatDiffInRealDays($date, $absolute) / static::DAYS_PER_WEEK;\n    }\n\n    /**\n     * Get the difference in months as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealMonths($date = null, $absolute = true)\n    {\n        $start = $this;\n        $end = $this->resolveCarbon($date);\n        $ascending = ($start <= $end);\n        $sign = $absolute || $ascending ? 1 : -1;\n        if (!$ascending) {\n            [$start, $end] = [$end, $start];\n        }\n        $monthsDiff = $start->diffInMonths($end);\n        /** @var Carbon|CarbonImmutable $floorEnd */\n        $floorEnd = $start->avoidMutation()->addMonths($monthsDiff);\n\n        if ($floorEnd >= $end) {\n            return $sign * $monthsDiff;\n        }\n\n        /** @var Carbon|CarbonImmutable $startOfMonthAfterFloorEnd */\n        $startOfMonthAfterFloorEnd = $floorEnd->avoidMutation()->addMonth()->startOfMonth();\n\n        if ($startOfMonthAfterFloorEnd > $end) {\n            return $sign * ($monthsDiff + $floorEnd->floatDiffInRealDays($end) / $floorEnd->daysInMonth);\n        }\n\n        return $sign * ($monthsDiff + $floorEnd->floatDiffInRealDays($startOfMonthAfterFloorEnd) / $floorEnd->daysInMonth + $startOfMonthAfterFloorEnd->floatDiffInRealDays($end) / $end->daysInMonth);\n    }\n\n    /**\n     * Get the difference in year as float (microsecond-precision) using timestamps.\n     *\n     * @param \\Carbon\\CarbonInterface|\\DateTimeInterface|string|null $date\n     * @param bool                                                   $absolute Get the absolute of the difference\n     *\n     * @return float\n     */\n    public function floatDiffInRealYears($date = null, $absolute = true)\n    {\n        $start = $this;\n        $end = $this->resolveCarbon($date);\n        $ascending = ($start <= $end);\n        $sign = $absolute || $ascending ? 1 : -1;\n        if (!$ascending) {\n            [$start, $end] = [$end, $start];\n        }\n        $yearsDiff = $start->diffInYears($end);\n        /** @var Carbon|CarbonImmutable $floorEnd */\n        $floorEnd = $start->avoidMutation()->addYears($yearsDiff);\n\n        if ($floorEnd >= $end) {\n            return $sign * $yearsDiff;\n        }\n\n        /** @var Carbon|CarbonImmutable $startOfYearAfterFloorEnd */\n        $startOfYearAfterFloorEnd = $floorEnd->avoidMutation()->addYear()->startOfYear();\n\n        if ($startOfYearAfterFloorEnd > $end) {\n            return $sign * ($yearsDiff + $floorEnd->floatDiffInRealDays($end) / $floorEnd->daysInYear);\n        }\n\n        return $sign * ($yearsDiff + $floorEnd->floatDiffInRealDays($startOfYearAfterFloorEnd) / $floorEnd->daysInYear + $startOfYearAfterFloorEnd->floatDiffInRealDays($end) / $end->daysInYear);\n    }\n\n    /**\n     * The number of seconds since midnight.\n     *\n     * @return int\n     */\n    public function secondsSinceMidnight()\n    {\n        return $this->diffInSeconds($this->avoidMutation()->startOfDay());\n    }\n\n    /**\n     * The number of seconds until 23:59:59.\n     *\n     * @return int\n     */\n    public function secondsUntilEndOfDay()\n    {\n        return $this->diffInSeconds($this->avoidMutation()->endOfDay());\n    }\n\n    /**\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     *\n     * @example\n     * ```\n     * echo Carbon::tomorrow()->diffForHumans() . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(['parts' => 2]) . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(['parts' => 3, 'join' => true]) . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(Carbon::yesterday()) . \"\\n\";\n     * echo Carbon::tomorrow()->diffForHumans(Carbon::yesterday(), ['short' => true]) . \"\\n\";\n     * ```\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'skip' entry, list of units to skip (array of strings or a single string,\n     *                                                             ` it can be the unit name (singular or plural) or its shortcut\n     *                                                             ` (y, m, w, d, h, min, s, ms, µs).\n     *                                                             - 'aUnit' entry, prefer \"an hour\" over \"1 hour\" if true\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             - 'minimumUnit' entry determines the smallest unit of time to display can be long or\n     *                                                             `  short form of the units, e.g. 'hour' or 'h' (default value: s)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function diffForHumans($other = null, $syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        /* @var CarbonInterface $this */\n        if (\\is_array($other)) {\n            $other['syntax'] = \\array_key_exists('syntax', $other) ? $other['syntax'] : $syntax;\n            $syntax = $other;\n            $other = $syntax['other'] ?? null;\n        }\n\n        $intSyntax = &$syntax;\n        if (\\is_array($syntax)) {\n            $syntax['syntax'] = $syntax['syntax'] ?? null;\n            $intSyntax = &$syntax['syntax'];\n        }\n        $intSyntax = (int) ($intSyntax ?? static::DIFF_RELATIVE_AUTO);\n        $intSyntax = $intSyntax === static::DIFF_RELATIVE_AUTO && $other === null ? static::DIFF_RELATIVE_TO_NOW : $intSyntax;\n\n        $parts = min(7, max(1, (int) $parts));\n        $skip = \\is_array($syntax) ? ($syntax['skip'] ?? []) : [];\n\n        return $this->diffAsCarbonInterval($other, false, (array) $skip)\n            ->setLocalTranslator($this->getLocalTranslator())\n            ->forHumans($syntax, (bool) $short, $parts, $options ?? $this->localHumanDiffOptions ?? static::getHumanDiffOptions());\n    }\n\n    /**\n     * @alias diffForHumans\n     *\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function from($other = null, $syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        return $this->diffForHumans($other, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * @alias diffForHumans\n     *\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     */\n    public function since($other = null, $syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        return $this->diffForHumans($other, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given (or now if null given) to current instance.\n     *\n     * When comparing a value in the past to default now:\n     * 1 hour from now\n     * 5 months from now\n     *\n     * When comparing a value in the future to default now:\n     * 1 hour ago\n     * 5 months ago\n     *\n     * When comparing a value in the past to another value:\n     * 1 hour after\n     * 5 months after\n     *\n     * When comparing a value in the future to another value:\n     * 1 hour before\n     * 5 months before\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function to($other = null, $syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        if (!$syntax && !$other) {\n            $syntax = CarbonInterface::DIFF_RELATIVE_TO_NOW;\n        }\n\n        return $this->resolveCarbon($other)->diffForHumans($this, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * @alias to\n     *\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given (or now if null given) to current instance.\n     *\n     * @param Carbon|\\DateTimeInterface|string|array|null $other   if array passed, will be used as parameters array, see $syntax below;\n     *                                                             if null passed, now will be used as comparison reference;\n     *                                                             if any other type, it will be converted to date and used as reference.\n     * @param int|array                                   $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                                                             - 'syntax' entry (see below)\n     *                                                             - 'short' entry (see below)\n     *                                                             - 'parts' entry (see below)\n     *                                                             - 'options' entry (see below)\n     *                                                             - 'join' entry determines how to join multiple parts of the string\n     *                                                             `  - if $join is a string, it's used as a joiner glue\n     *                                                             `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                                                             `  - if $join is an array, the first item will be the default glue, and the second item\n     *                                                             `    will be used instead of the glue for the last item\n     *                                                             `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                                                             `  - if $join is missing, a space will be used as glue\n     *                                                             - 'other' entry (see above)\n     *                                                             if int passed, it add modifiers:\n     *                                                             Possible values:\n     *                                                             - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                                                             - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                                                             Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool                                        $short   displays short format of time units\n     * @param int                                         $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int                                         $options human diff options\n     *\n     * @return string\n     */\n    public function until($other = null, $syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        return $this->to($other, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * Get the difference in a human readable format in the current locale from current\n     * instance to now.\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: 1: single unit)\n     * @param int       $options human diff options\n     *\n     * @return string\n     */\n    public function fromNow($syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        $other = null;\n\n        if ($syntax instanceof DateTimeInterface) {\n            [$other, $syntax, $short, $parts, $options] = array_pad(\\func_get_args(), 5, null);\n        }\n\n        return $this->from($other, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given to now\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: 1: single part)\n     * @param int       $options human diff options\n     *\n     * @return string\n     */\n    public function toNow($syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        return $this->to(null, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * Get the difference in a human readable format in the current locale from an other\n     * instance given to now\n     *\n     * @param int|array $syntax  if array passed, parameters will be extracted from it, the array may contains:\n     *                           - 'syntax' entry (see below)\n     *                           - 'short' entry (see below)\n     *                           - 'parts' entry (see below)\n     *                           - 'options' entry (see below)\n     *                           - 'join' entry determines how to join multiple parts of the string\n     *                           `  - if $join is a string, it's used as a joiner glue\n     *                           `  - if $join is a callable/closure, it get the list of string and should return a string\n     *                           `  - if $join is an array, the first item will be the default glue, and the second item\n     *                           `    will be used instead of the glue for the last item\n     *                           `  - if $join is true, it will be guessed from the locale ('list' translation file entry)\n     *                           `  - if $join is missing, a space will be used as glue\n     *                           if int passed, it add modifiers:\n     *                           Possible values:\n     *                           - CarbonInterface::DIFF_ABSOLUTE          no modifiers\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_NOW   add ago/from now modifier\n     *                           - CarbonInterface::DIFF_RELATIVE_TO_OTHER add before/after modifier\n     *                           Default value: CarbonInterface::DIFF_ABSOLUTE\n     * @param bool      $short   displays short format of time units\n     * @param int       $parts   maximum number of parts to display (default value: 1: single part)\n     * @param int       $options human diff options\n     *\n     * @return string\n     */\n    public function ago($syntax = null, $short = false, $parts = 1, $options = null)\n    {\n        $other = null;\n\n        if ($syntax instanceof DateTimeInterface) {\n            [$other, $syntax, $short, $parts, $options] = array_pad(\\func_get_args(), 5, null);\n        }\n\n        return $this->from($other, $syntax, $short, $parts, $options);\n    }\n\n    /**\n     * Get the difference in a human readable format in the current locale from current instance to an other\n     * instance given (or now if null given).\n     *\n     * @return string\n     */\n    public function timespan($other = null, $timezone = null)\n    {\n        if (!$other instanceof DateTimeInterface) {\n            $other = static::parse($other, $timezone);\n        }\n\n        return $this->diffForHumans($other, [\n            'join' => ', ',\n            'syntax' => CarbonInterface::DIFF_ABSOLUTE,\n            'options' => CarbonInterface::NO_ZERO_DIFF,\n            'parts' => -1,\n        ]);\n    }\n\n    /**\n     * Returns either day of week + time (e.g. \"Last Friday at 3:30 PM\") if reference time is within 7 days,\n     * or a calendar date (e.g. \"10/29/2017\") otherwise.\n     *\n     * Language, date and time formats will change according to the current locale.\n     *\n     * @param Carbon|\\DateTimeInterface|string|null $referenceTime\n     * @param array                                 $formats\n     *\n     * @return string\n     */\n    public function calendar($referenceTime = null, array $formats = [])\n    {\n        /** @var CarbonInterface $current */\n        $current = $this->avoidMutation()->startOfDay();\n        /** @var CarbonInterface $other */\n        $other = $this->resolveCarbon($referenceTime)->avoidMutation()->setTimezone($this->getTimezone())->startOfDay();\n        $diff = $other->diffInDays($current, false);\n        $format = $diff < -6 ? 'sameElse' : (\n            $diff < -1 ? 'lastWeek' : (\n                $diff < 0 ? 'lastDay' : (\n                    $diff < 1 ? 'sameDay' : (\n                        $diff < 2 ? 'nextDay' : (\n                            $diff < 7 ? 'nextWeek' : 'sameElse'\n                        )\n                    )\n                )\n            )\n        );\n        $format = array_merge($this->getCalendarFormats(), $formats)[$format];\n        if ($format instanceof Closure) {\n            $format = $format($current, $other) ?? '';\n        }\n\n        return $this->isoFormat((string) $format);\n    }\n\n    private function getIntervalDayDiff(DateInterval $interval): int\n    {\n        $daysDiff = (int) $interval->format('%a');\n        $sign = $interval->format('%r') === '-' ? -1 : 1;\n\n        if (\\is_int($interval->days) &&\n            $interval->y === 0 &&\n            $interval->m === 0 &&\n            version_compare(PHP_VERSION, '8.1.0-dev', '<') &&\n            abs($interval->d - $daysDiff) === 1\n        ) {\n            $daysDiff = abs($interval->d); // @codeCoverageIgnore\n        }\n\n        return $daysDiff * $sign;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterval;\nuse Carbon\\Exceptions\\InvalidIntervalException;\nuse DateInterval;\n\n/**\n * Trait to call rounding methods to interval or the interval of a period.\n */\ntrait IntervalRounding\n{\n    protected function callRoundMethod(string $method, array $parameters)\n    {\n        $action = substr($method, 0, 4);\n\n        if ($action !== 'ceil') {\n            $action = substr($method, 0, 5);\n        }\n\n        if (\\in_array($action, ['round', 'floor', 'ceil'])) {\n            return $this->{$action.'Unit'}(substr($method, \\strlen($action)), ...$parameters);\n        }\n\n        return null;\n    }\n\n    protected function roundWith($precision, $function)\n    {\n        $unit = 'second';\n\n        if ($precision instanceof DateInterval) {\n            $precision = (string) CarbonInterval::instance($precision, [], true);\n        }\n\n        if (\\is_string($precision) && preg_match('/^\\s*(?<precision>\\d+)?\\s*(?<unit>\\w+)(?<other>\\W.*)?$/', $precision, $match)) {\n            if (trim($match['other'] ?? '') !== '') {\n                throw new InvalidIntervalException('Rounding is only possible with single unit intervals.');\n            }\n\n            $precision = (int) ($match['precision'] ?: 1);\n            $unit = $match['unit'];\n        }\n\n        return $this->roundUnit($unit, $precision, $function);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/IntervalStep.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\nuse Carbon\\CarbonInterface;\nuse Closure;\nuse DateTimeImmutable;\nuse DateTimeInterface;\n\ntrait IntervalStep\n{\n    /**\n     * Step to apply instead of a fixed interval to get the new date.\n     *\n     * @var Closure|null\n     */\n    protected $step;\n\n    /**\n     * Get the dynamic step in use.\n     *\n     * @return Closure\n     */\n    public function getStep(): ?Closure\n    {\n        return $this->step;\n    }\n\n    /**\n     * Set a step to apply instead of a fixed interval to get the new date.\n     *\n     * Or pass null to switch to fixed interval.\n     *\n     * @param Closure|null $step\n     */\n    public function setStep(?Closure $step): void\n    {\n        $this->step = $step;\n    }\n\n    /**\n     * Take a date and apply either the step if set, or the current interval else.\n     *\n     * The interval/step is applied negatively (typically subtraction instead of addition) if $negated is true.\n     *\n     * @param DateTimeInterface $dateTime\n     * @param bool              $negated\n     *\n     * @return CarbonInterface\n     */\n    public function convertDate(DateTimeInterface $dateTime, bool $negated = false): CarbonInterface\n    {\n        /** @var CarbonInterface $carbonDate */\n        $carbonDate = $dateTime instanceof CarbonInterface ? $dateTime : $this->resolveCarbon($dateTime);\n\n        if ($this->step) {\n            return $carbonDate->setDateTimeFrom(($this->step)($carbonDate->avoidMutation(), $negated));\n        }\n\n        if ($negated) {\n            return $carbonDate->rawSub($this);\n        }\n\n        return $carbonDate->rawAdd($this);\n    }\n\n    /**\n     * Convert DateTimeImmutable instance to CarbonImmutable instance and DateTime instance to Carbon instance.\n     *\n     * @param DateTimeInterface $dateTime\n     *\n     * @return Carbon|CarbonImmutable\n     */\n    private function resolveCarbon(DateTimeInterface $dateTime)\n    {\n        if ($dateTime instanceof DateTimeImmutable) {\n            return CarbonImmutable::instance($dateTime);\n        }\n\n        return Carbon::instance($dateTime);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Localization.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterface;\nuse Carbon\\Exceptions\\InvalidTypeException;\nuse Carbon\\Exceptions\\NotLocaleAwareException;\nuse Carbon\\Language;\nuse Carbon\\Translator;\nuse Carbon\\TranslatorStrongTypeInterface;\nuse Closure;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\nuse Symfony\\Component\\Translation\\TranslatorInterface;\nuse Symfony\\Contracts\\Translation\\LocaleAwareInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface as ContractsTranslatorInterface;\n\n// @codeCoverageIgnoreStart\nif (interface_exists('Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface') &&\n    !interface_exists('Symfony\\\\Component\\\\Translation\\\\TranslatorInterface')\n) {\n    class_alias(\n        'Symfony\\\\Contracts\\\\Translation\\\\TranslatorInterface',\n        'Symfony\\\\Component\\\\Translation\\\\TranslatorInterface'\n    );\n}\n// @codeCoverageIgnoreEnd\n\n/**\n * Trait Localization.\n *\n * Embed default and locale translators and translation base methods.\n */\ntrait Localization\n{\n    /**\n     * Default translator.\n     *\n     * @var \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    protected static $translator;\n\n    /**\n     * Specific translator of the current instance.\n     *\n     * @var \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    protected $localTranslator;\n\n    /**\n     * Options for diffForHumans().\n     *\n     * @var int\n     */\n    protected static $humanDiffOptions = CarbonInterface::NO_ZERO_DIFF;\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * @param int $humanDiffOptions\n     */\n    public static function setHumanDiffOptions($humanDiffOptions)\n    {\n        static::$humanDiffOptions = $humanDiffOptions;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * @param int $humanDiffOption\n     */\n    public static function enableHumanDiffOption($humanDiffOption)\n    {\n        static::$humanDiffOptions = static::getHumanDiffOptions() | $humanDiffOption;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * @param int $humanDiffOption\n     */\n    public static function disableHumanDiffOption($humanDiffOption)\n    {\n        static::$humanDiffOptions = static::getHumanDiffOptions() & ~$humanDiffOption;\n    }\n\n    /**\n     * Return default humanDiff() options (merged flags as integer).\n     *\n     * @return int\n     */\n    public static function getHumanDiffOptions()\n    {\n        return static::$humanDiffOptions;\n    }\n\n    /**\n     * Get the default translator instance in use.\n     *\n     * @return \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    public static function getTranslator()\n    {\n        return static::translator();\n    }\n\n    /**\n     * Set the default translator instance to use.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator\n     *\n     * @return void\n     */\n    public static function setTranslator(TranslatorInterface $translator)\n    {\n        static::$translator = $translator;\n    }\n\n    /**\n     * Return true if the current instance has its own translator.\n     *\n     * @return bool\n     */\n    public function hasLocalTranslator()\n    {\n        return isset($this->localTranslator);\n    }\n\n    /**\n     * Get the translator of the current instance or the default if none set.\n     *\n     * @return \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    public function getLocalTranslator()\n    {\n        return $this->localTranslator ?: static::translator();\n    }\n\n    /**\n     * Set the translator for the current instance.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator\n     *\n     * @return $this\n     */\n    public function setLocalTranslator(TranslatorInterface $translator)\n    {\n        $this->localTranslator = $translator;\n\n        return $this;\n    }\n\n    /**\n     * Returns raw translation message for a given key.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator the translator to use\n     * @param string                                             $key        key to find\n     * @param string|null                                        $locale     current locale used if null\n     * @param string|null                                        $default    default value if translation returns the key\n     *\n     * @return string\n     */\n    public static function getTranslationMessageWith($translator, string $key, ?string $locale = null, ?string $default = null)\n    {\n        if (!($translator instanceof TranslatorBagInterface && $translator instanceof TranslatorInterface)) {\n            throw new InvalidTypeException(\n                'Translator does not implement '.TranslatorInterface::class.' and '.TranslatorBagInterface::class.'. '.\n                (\\is_object($translator) ? \\get_class($translator) : \\gettype($translator)).' has been given.'\n            );\n        }\n\n        if (!$locale && $translator instanceof LocaleAwareInterface) {\n            $locale = $translator->getLocale();\n        }\n\n        $result = self::getFromCatalogue($translator, $translator->getCatalogue($locale), $key);\n\n        return $result === $key ? $default : $result;\n    }\n\n    /**\n     * Returns raw translation message for a given key.\n     *\n     * @param string                                             $key        key to find\n     * @param string|null                                        $locale     current locale used if null\n     * @param string|null                                        $default    default value if translation returns the key\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator an optional translator to use\n     *\n     * @return string\n     */\n    public function getTranslationMessage(string $key, ?string $locale = null, ?string $default = null, $translator = null)\n    {\n        return static::getTranslationMessageWith($translator ?: $this->getLocalTranslator(), $key, $locale, $default);\n    }\n\n    /**\n     * Translate using translation string or callback available.\n     *\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface $translator\n     * @param string                                             $key\n     * @param array                                              $parameters\n     * @param null                                               $number\n     *\n     * @return string\n     */\n    public static function translateWith(TranslatorInterface $translator, string $key, array $parameters = [], $number = null): string\n    {\n        $message = static::getTranslationMessageWith($translator, $key, null, $key);\n        if ($message instanceof Closure) {\n            return (string) $message(...array_values($parameters));\n        }\n\n        if ($number !== null) {\n            $parameters['%count%'] = $number;\n        }\n        if (isset($parameters['%count%'])) {\n            $parameters[':count'] = $parameters['%count%'];\n        }\n\n        // @codeCoverageIgnoreStart\n        $choice = $translator instanceof ContractsTranslatorInterface\n            ? $translator->trans($key, $parameters)\n            : $translator->transChoice($key, $number, $parameters);\n        // @codeCoverageIgnoreEnd\n\n        return (string) $choice;\n    }\n\n    /**\n     * Translate using translation string or callback available.\n     *\n     * @param string                                                  $key\n     * @param array                                                   $parameters\n     * @param string|int|float|null                                   $number\n     * @param \\Symfony\\Component\\Translation\\TranslatorInterface|null $translator\n     * @param bool                                                    $altNumbers\n     *\n     * @return string\n     */\n    public function translate(string $key, array $parameters = [], $number = null, ?TranslatorInterface $translator = null, bool $altNumbers = false): string\n    {\n        $translation = static::translateWith($translator ?: $this->getLocalTranslator(), $key, $parameters, $number);\n\n        if ($number !== null && $altNumbers) {\n            return str_replace($number, $this->translateNumber($number), $translation);\n        }\n\n        return $translation;\n    }\n\n    /**\n     * Returns the alternative number for a given integer if available in the current locale.\n     *\n     * @param int $number\n     *\n     * @return string\n     */\n    public function translateNumber(int $number): string\n    {\n        $translateKey = \"alt_numbers.$number\";\n        $symbol = $this->translate($translateKey);\n\n        if ($symbol !== $translateKey) {\n            return $symbol;\n        }\n\n        if ($number > 99 && $this->translate('alt_numbers.99') !== 'alt_numbers.99') {\n            $start = '';\n            foreach ([10000, 1000, 100] as $exp) {\n                $key = \"alt_numbers_pow.$exp\";\n                if ($number >= $exp && $number < $exp * 10 && ($pow = $this->translate($key)) !== $key) {\n                    $unit = floor($number / $exp);\n                    $number -= $unit * $exp;\n                    $start .= ($unit > 1 ? $this->translate(\"alt_numbers.$unit\") : '').$pow;\n                }\n            }\n            $result = '';\n            while ($number) {\n                $chunk = $number % 100;\n                $result = $this->translate(\"alt_numbers.$chunk\").$result;\n                $number = floor($number / 100);\n            }\n\n            return \"$start$result\";\n        }\n\n        if ($number > 9 && $this->translate('alt_numbers.9') !== 'alt_numbers.9') {\n            $result = '';\n            while ($number) {\n                $chunk = $number % 10;\n                $result = $this->translate(\"alt_numbers.$chunk\").$result;\n                $number = floor($number / 10);\n            }\n\n            return $result;\n        }\n\n        return (string) $number;\n    }\n\n    /**\n     * Translate a time string from a locale to an other.\n     *\n     * @param string      $timeString date/time/duration string to translate (may also contain English)\n     * @param string|null $from       input locale of the $timeString parameter (`Carbon::getLocale()` by default)\n     * @param string|null $to         output locale of the result returned (`\"en\"` by default)\n     * @param int         $mode       specify what to translate with options:\n     *                                - CarbonInterface::TRANSLATE_ALL (default)\n     *                                - CarbonInterface::TRANSLATE_MONTHS\n     *                                - CarbonInterface::TRANSLATE_DAYS\n     *                                - CarbonInterface::TRANSLATE_UNITS\n     *                                - CarbonInterface::TRANSLATE_MERIDIEM\n     *                                You can use pipe to group: CarbonInterface::TRANSLATE_MONTHS | CarbonInterface::TRANSLATE_DAYS\n     *\n     * @return string\n     */\n    public static function translateTimeString($timeString, $from = null, $to = null, $mode = CarbonInterface::TRANSLATE_ALL)\n    {\n        // Fallback source and destination locales\n        $from = $from ?: static::getLocale();\n        $to = $to ?: 'en';\n\n        if ($from === $to) {\n            return $timeString;\n        }\n\n        // Standardize apostrophe\n        $timeString = strtr($timeString, ['’' => \"'\"]);\n\n        $fromTranslations = [];\n        $toTranslations = [];\n\n        foreach (['from', 'to'] as $key) {\n            $language = $$key;\n            $translator = Translator::get($language);\n            $translations = $translator->getMessages();\n\n            if (!isset($translations[$language])) {\n                return $timeString;\n            }\n\n            $translationKey = $key.'Translations';\n            $messages = $translations[$language];\n            $months = $messages['months'] ?? [];\n            $weekdays = $messages['weekdays'] ?? [];\n            $meridiem = $messages['meridiem'] ?? ['AM', 'PM'];\n\n            if (isset($messages['ordinal_words'])) {\n                $timeString = self::replaceOrdinalWords(\n                    $timeString,\n                    $key === 'from' ? array_flip($messages['ordinal_words']) : $messages['ordinal_words']\n                );\n            }\n\n            if ($key === 'from') {\n                foreach (['months', 'weekdays'] as $variable) {\n                    $list = $messages[$variable.'_standalone'] ?? null;\n\n                    if ($list) {\n                        foreach ($$variable as $index => &$name) {\n                            $name .= '|'.$messages[$variable.'_standalone'][$index];\n                        }\n                    }\n                }\n            }\n\n            $$translationKey = array_merge(\n                $mode & CarbonInterface::TRANSLATE_MONTHS ? static::getTranslationArray($months, 12, $timeString) : [],\n                $mode & CarbonInterface::TRANSLATE_MONTHS ? static::getTranslationArray($messages['months_short'] ?? [], 12, $timeString) : [],\n                $mode & CarbonInterface::TRANSLATE_DAYS ? static::getTranslationArray($weekdays, 7, $timeString) : [],\n                $mode & CarbonInterface::TRANSLATE_DAYS ? static::getTranslationArray($messages['weekdays_short'] ?? [], 7, $timeString) : [],\n                $mode & CarbonInterface::TRANSLATE_DIFF ? static::translateWordsByKeys([\n                    'diff_now',\n                    'diff_today',\n                    'diff_yesterday',\n                    'diff_tomorrow',\n                    'diff_before_yesterday',\n                    'diff_after_tomorrow',\n                ], $messages, $key) : [],\n                $mode & CarbonInterface::TRANSLATE_UNITS ? static::translateWordsByKeys([\n                    'year',\n                    'month',\n                    'week',\n                    'day',\n                    'hour',\n                    'minute',\n                    'second',\n                ], $messages, $key) : [],\n                $mode & CarbonInterface::TRANSLATE_MERIDIEM ? array_map(function ($hour) use ($meridiem) {\n                    if (\\is_array($meridiem)) {\n                        return $meridiem[$hour < 12 ? 0 : 1];\n                    }\n\n                    return $meridiem($hour, 0, false);\n                }, range(0, 23)) : []\n            );\n        }\n\n        return substr(preg_replace_callback('/(?<=[\\d\\s+.\\/,_-])('.implode('|', $fromTranslations).')(?=[\\d\\s+.\\/,_-])/iu', function ($match) use ($fromTranslations, $toTranslations) {\n            [$chunk] = $match;\n\n            foreach ($fromTranslations as $index => $word) {\n                if (preg_match(\"/^$word\\$/iu\", $chunk)) {\n                    return $toTranslations[$index] ?? '';\n                }\n            }\n\n            return $chunk; // @codeCoverageIgnore\n        }, \" $timeString \"), 1, -1);\n    }\n\n    /**\n     * Translate a time string from the current locale (`$date->locale()`) to an other.\n     *\n     * @param string      $timeString time string to translate\n     * @param string|null $to         output locale of the result returned (\"en\" by default)\n     *\n     * @return string\n     */\n    public function translateTimeStringTo($timeString, $to = null)\n    {\n        return static::translateTimeString($timeString, $this->getTranslatorLocale(), $to);\n    }\n\n    /**\n     * Get/set the locale for the current instance.\n     *\n     * @param string|null $locale\n     * @param string      ...$fallbackLocales\n     *\n     * @return $this|string\n     */\n    public function locale(string $locale = null, ...$fallbackLocales)\n    {\n        if ($locale === null) {\n            return $this->getTranslatorLocale();\n        }\n\n        if (!$this->localTranslator || $this->getTranslatorLocale($this->localTranslator) !== $locale) {\n            $translator = Translator::get($locale);\n\n            if (!empty($fallbackLocales)) {\n                $translator->setFallbackLocales($fallbackLocales);\n\n                foreach ($fallbackLocales as $fallbackLocale) {\n                    $messages = Translator::get($fallbackLocale)->getMessages();\n\n                    if (isset($messages[$fallbackLocale])) {\n                        $translator->setMessages($fallbackLocale, $messages[$fallbackLocale]);\n                    }\n                }\n            }\n\n            $this->localTranslator = $translator;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Get the current translator locale.\n     *\n     * @return string\n     */\n    public static function getLocale()\n    {\n        return static::getLocaleAwareTranslator()->getLocale();\n    }\n\n    /**\n     * Set the current translator locale and indicate if the source locale file exists.\n     * Pass 'auto' as locale to use closest language from the current LC_TIME locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function setLocale($locale)\n    {\n        return static::getLocaleAwareTranslator()->setLocale($locale) !== false;\n    }\n\n    /**\n     * Set the fallback locale.\n     *\n     * @see https://symfony.com/doc/current/components/translation.html#fallback-locales\n     *\n     * @param string $locale\n     */\n    public static function setFallbackLocale($locale)\n    {\n        $translator = static::getTranslator();\n\n        if (method_exists($translator, 'setFallbackLocales')) {\n            $translator->setFallbackLocales([$locale]);\n\n            if ($translator instanceof Translator) {\n                $preferredLocale = $translator->getLocale();\n                $translator->setMessages($preferredLocale, array_replace_recursive(\n                    $translator->getMessages()[$locale] ?? [],\n                    Translator::get($locale)->getMessages()[$locale] ?? [],\n                    $translator->getMessages($preferredLocale)\n                ));\n            }\n        }\n    }\n\n    /**\n     * Get the fallback locale.\n     *\n     * @see https://symfony.com/doc/current/components/translation.html#fallback-locales\n     *\n     * @return string|null\n     */\n    public static function getFallbackLocale()\n    {\n        $translator = static::getTranslator();\n\n        if (method_exists($translator, 'getFallbackLocales')) {\n            return $translator->getFallbackLocales()[0] ?? null;\n        }\n\n        return null;\n    }\n\n    /**\n     * Set the current locale to the given, execute the passed function, reset the locale to previous one,\n     * then return the result of the closure (or null if the closure was void).\n     *\n     * @param string   $locale locale ex. en\n     * @param callable $func\n     *\n     * @return mixed\n     */\n    public static function executeWithLocale($locale, $func)\n    {\n        $currentLocale = static::getLocale();\n        $result = $func(static::setLocale($locale) ? static::getLocale() : false, static::translator());\n        static::setLocale($currentLocale);\n\n        return $result;\n    }\n\n    /**\n     * Returns true if the given locale is internally supported and has short-units support.\n     * Support is considered enabled if either year, day or hour has a short variant translated.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasShortUnits($locale)\n    {\n        return static::executeWithLocale($locale, function ($newLocale, TranslatorInterface $translator) {\n            return ($newLocale && (($y = static::translateWith($translator, 'y')) !== 'y' && $y !== static::translateWith($translator, 'year'))) || (\n                ($y = static::translateWith($translator, 'd')) !== 'd' &&\n                    $y !== static::translateWith($translator, 'day')\n            ) || (\n                ($y = static::translateWith($translator, 'h')) !== 'h' &&\n                    $y !== static::translateWith($translator, 'hour')\n            );\n        });\n    }\n\n    /**\n     * Returns true if the given locale is internally supported and has diff syntax support (ago, from now, before, after).\n     * Support is considered enabled if the 4 sentences are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasDiffSyntax($locale)\n    {\n        return static::executeWithLocale($locale, function ($newLocale, TranslatorInterface $translator) {\n            if (!$newLocale) {\n                return false;\n            }\n\n            foreach (['ago', 'from_now', 'before', 'after'] as $key) {\n                if ($translator instanceof TranslatorBagInterface &&\n                    self::getFromCatalogue($translator, $translator->getCatalogue($newLocale), $key) instanceof Closure\n                ) {\n                    continue;\n                }\n\n                if ($translator->trans($key) === $key) {\n                    return false;\n                }\n            }\n\n            return true;\n        });\n    }\n\n    /**\n     * Returns true if the given locale is internally supported and has words for 1-day diff (just now, yesterday, tomorrow).\n     * Support is considered enabled if the 3 words are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasDiffOneDayWords($locale)\n    {\n        return static::executeWithLocale($locale, function ($newLocale, TranslatorInterface $translator) {\n            return $newLocale &&\n                $translator->trans('diff_now') !== 'diff_now' &&\n                $translator->trans('diff_yesterday') !== 'diff_yesterday' &&\n                $translator->trans('diff_tomorrow') !== 'diff_tomorrow';\n        });\n    }\n\n    /**\n     * Returns true if the given locale is internally supported and has words for 2-days diff (before yesterday, after tomorrow).\n     * Support is considered enabled if the 2 words are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasDiffTwoDayWords($locale)\n    {\n        return static::executeWithLocale($locale, function ($newLocale, TranslatorInterface $translator) {\n            return $newLocale &&\n                $translator->trans('diff_before_yesterday') !== 'diff_before_yesterday' &&\n                $translator->trans('diff_after_tomorrow') !== 'diff_after_tomorrow';\n        });\n    }\n\n    /**\n     * Returns true if the given locale is internally supported and has period syntax support (X times, every X, from X, to X).\n     * Support is considered enabled if the 4 sentences are translated in the given locale.\n     *\n     * @param string $locale locale ex. en\n     *\n     * @return bool\n     */\n    public static function localeHasPeriodSyntax($locale)\n    {\n        return static::executeWithLocale($locale, function ($newLocale, TranslatorInterface $translator) {\n            return $newLocale &&\n                $translator->trans('period_recurrences') !== 'period_recurrences' &&\n                $translator->trans('period_interval') !== 'period_interval' &&\n                $translator->trans('period_start_date') !== 'period_start_date' &&\n                $translator->trans('period_end_date') !== 'period_end_date';\n        });\n    }\n\n    /**\n     * Returns the list of internally available locales and already loaded custom locales.\n     * (It will ignore custom translator dynamic loading.)\n     *\n     * @return array\n     */\n    public static function getAvailableLocales()\n    {\n        $translator = static::getLocaleAwareTranslator();\n\n        return $translator instanceof Translator\n            ? $translator->getAvailableLocales()\n            : [$translator->getLocale()];\n    }\n\n    /**\n     * Returns list of Language object for each available locale. This object allow you to get the ISO name, native\n     * name, region and variant of the locale.\n     *\n     * @return Language[]\n     */\n    public static function getAvailableLocalesInfo()\n    {\n        $languages = [];\n        foreach (static::getAvailableLocales() as $id) {\n            $languages[$id] = new Language($id);\n        }\n\n        return $languages;\n    }\n\n    /**\n     * Initialize the default translator instance if necessary.\n     *\n     * @return \\Symfony\\Component\\Translation\\TranslatorInterface\n     */\n    protected static function translator()\n    {\n        if (static::$translator === null) {\n            static::$translator = Translator::get();\n        }\n\n        return static::$translator;\n    }\n\n    /**\n     * Get the locale of a given translator.\n     *\n     * If null or omitted, current local translator is used.\n     * If no local translator is in use, current global translator is used.\n     *\n     * @param null $translator\n     *\n     * @return string|null\n     */\n    protected function getTranslatorLocale($translator = null): ?string\n    {\n        if (\\func_num_args() === 0) {\n            $translator = $this->getLocalTranslator();\n        }\n\n        $translator = static::getLocaleAwareTranslator($translator);\n\n        return $translator ? $translator->getLocale() : null;\n    }\n\n    /**\n     * Throw an error if passed object is not LocaleAwareInterface.\n     *\n     * @param LocaleAwareInterface|null $translator\n     *\n     * @return LocaleAwareInterface|null\n     */\n    protected static function getLocaleAwareTranslator($translator = null)\n    {\n        if (\\func_num_args() === 0) {\n            $translator = static::translator();\n        }\n\n        if ($translator && !($translator instanceof LocaleAwareInterface || method_exists($translator, 'getLocale'))) {\n            throw new NotLocaleAwareException($translator); // @codeCoverageIgnore\n        }\n\n        return $translator;\n    }\n\n    /**\n     * @param mixed                                                    $translator\n     * @param \\Symfony\\Component\\Translation\\MessageCatalogueInterface $catalogue\n     *\n     * @return mixed\n     */\n    private static function getFromCatalogue($translator, $catalogue, string $id, string $domain = 'messages')\n    {\n        return $translator instanceof TranslatorStrongTypeInterface\n            ? $translator->getFromCatalogue($catalogue, $id, $domain) // @codeCoverageIgnore\n            : $catalogue->get($id, $domain);\n    }\n\n    /**\n     * Return the word cleaned from its translation codes.\n     *\n     * @param string $word\n     *\n     * @return string\n     */\n    private static function cleanWordFromTranslationString($word)\n    {\n        $word = str_replace([':count', '%count', ':time'], '', $word);\n        $word = strtr($word, ['’' => \"'\"]);\n        $word = preg_replace('/({\\d+(,(\\d+|Inf))?}|[\\[\\]]\\d+(,(\\d+|Inf))?[\\[\\]])/', '', $word);\n\n        return trim($word);\n    }\n\n    /**\n     * Translate a list of words.\n     *\n     * @param string[] $keys     keys to translate.\n     * @param string[] $messages messages bag handling translations.\n     * @param string   $key      'to' (to get the translation) or 'from' (to get the detection RegExp pattern).\n     *\n     * @return string[]\n     */\n    private static function translateWordsByKeys($keys, $messages, $key): array\n    {\n        return array_map(function ($wordKey) use ($messages, $key) {\n            $message = $key === 'from' && isset($messages[$wordKey.'_regexp'])\n                ? $messages[$wordKey.'_regexp']\n                : ($messages[$wordKey] ?? null);\n\n            if (!$message) {\n                return '>>DO NOT REPLACE<<';\n            }\n\n            $parts = explode('|', $message);\n\n            return $key === 'to'\n                ? self::cleanWordFromTranslationString(end($parts))\n                : '(?:'.implode('|', array_map([static::class, 'cleanWordFromTranslationString'], $parts)).')';\n        }, $keys);\n    }\n\n    /**\n     * Get an array of translations based on the current date.\n     *\n     * @param callable $translation\n     * @param int      $length\n     * @param string   $timeString\n     *\n     * @return string[]\n     */\n    private static function getTranslationArray($translation, $length, $timeString): array\n    {\n        $filler = '>>DO NOT REPLACE<<';\n\n        if (\\is_array($translation)) {\n            return array_pad($translation, $length, $filler);\n        }\n\n        $list = [];\n        $date = static::now();\n\n        for ($i = 0; $i < $length; $i++) {\n            $list[] = $translation($date, $timeString, $i) ?? $filler;\n        }\n\n        return $list;\n    }\n\n    private static function replaceOrdinalWords(string $timeString, array $ordinalWords): string\n    {\n        return preg_replace_callback('/(?<![a-z])[a-z]+(?![a-z])/i', function (array $match) use ($ordinalWords) {\n            return $ordinalWords[mb_strtolower($match[0])] ?? $match[0];\n        }, $timeString);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Macro.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\n/**\n * Trait Macros.\n *\n * Allows users to register macros within the Carbon class.\n */\ntrait Macro\n{\n    use Mixin;\n\n    /**\n     * The registered macros.\n     *\n     * @var array\n     */\n    protected static $globalMacros = [];\n\n    /**\n     * The registered generic macros.\n     *\n     * @var array\n     */\n    protected static $globalGenericMacros = [];\n\n    /**\n     * Register a custom macro.\n     *\n     * @example\n     * ```\n     * $userSettings = [\n     *   'locale' => 'pt',\n     *   'timezone' => 'America/Sao_Paulo',\n     * ];\n     * Carbon::macro('userFormat', function () use ($userSettings) {\n     *   return $this->copy()->locale($userSettings['locale'])->tz($userSettings['timezone'])->calendar();\n     * });\n     * echo Carbon::yesterday()->hours(11)->userFormat();\n     * ```\n     *\n     * @param string          $name\n     * @param object|callable $macro\n     *\n     * @return void\n     */\n    public static function macro($name, $macro)\n    {\n        static::$globalMacros[$name] = $macro;\n    }\n\n    /**\n     * Remove all macros and generic macros.\n     */\n    public static function resetMacros()\n    {\n        static::$globalMacros = [];\n        static::$globalGenericMacros = [];\n    }\n\n    /**\n     * Register a custom macro.\n     *\n     * @param object|callable $macro\n     * @param int             $priority marco with higher priority is tried first\n     *\n     * @return void\n     */\n    public static function genericMacro($macro, $priority = 0)\n    {\n        if (!isset(static::$globalGenericMacros[$priority])) {\n            static::$globalGenericMacros[$priority] = [];\n            krsort(static::$globalGenericMacros, SORT_NUMERIC);\n        }\n\n        static::$globalGenericMacros[$priority][] = $macro;\n    }\n\n    /**\n     * Checks if macro is registered globally.\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public static function hasMacro($name)\n    {\n        return isset(static::$globalMacros[$name]);\n    }\n\n    /**\n     * Get the raw callable macro registered globally for a given name.\n     *\n     * @param string $name\n     *\n     * @return callable|null\n     */\n    public static function getMacro($name)\n    {\n        return static::$globalMacros[$name] ?? null;\n    }\n\n    /**\n     * Checks if macro is registered globally or locally.\n     *\n     * @param string $name\n     *\n     * @return bool\n     */\n    public function hasLocalMacro($name)\n    {\n        return ($this->localMacros && isset($this->localMacros[$name])) || static::hasMacro($name);\n    }\n\n    /**\n     * Get the raw callable macro registered globally or locally for a given name.\n     *\n     * @param string $name\n     *\n     * @return callable|null\n     */\n    public function getLocalMacro($name)\n    {\n        return ($this->localMacros ?? [])[$name] ?? static::getMacro($name);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/MagicParameter.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\n/**\n * Trait MagicParameter.\n *\n * Allows to retrieve parameter in magic calls by index or name.\n */\ntrait MagicParameter\n{\n    private function getMagicParameter(array $parameters, int $index, string $key, $default)\n    {\n        if (\\array_key_exists($index, $parameters)) {\n            return $parameters[$index];\n        }\n\n        if (\\array_key_exists($key, $parameters)) {\n            return $parameters[$key];\n        }\n\n        return $default;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterface;\nuse Carbon\\CarbonInterval;\nuse Carbon\\CarbonPeriod;\nuse Closure;\nuse Generator;\nuse ReflectionClass;\nuse ReflectionException;\nuse ReflectionMethod;\nuse Throwable;\n\n/**\n * Trait Mixin.\n *\n * Allows mixing in entire classes with multiple macros.\n */\ntrait Mixin\n{\n    /**\n     * Stack of macro instance contexts.\n     *\n     * @var array\n     */\n    protected static $macroContextStack = [];\n\n    /**\n     * Mix another object into the class.\n     *\n     * @example\n     * ```\n     * Carbon::mixin(new class {\n     *   public function addMoon() {\n     *     return function () {\n     *       return $this->addDays(30);\n     *     };\n     *   }\n     *   public function subMoon() {\n     *     return function () {\n     *       return $this->subDays(30);\n     *     };\n     *   }\n     * });\n     * $fullMoon = Carbon::create('2018-12-22');\n     * $nextFullMoon = $fullMoon->addMoon();\n     * $blackMoon = Carbon::create('2019-01-06');\n     * $previousBlackMoon = $blackMoon->subMoon();\n     * echo \"$nextFullMoon\\n\";\n     * echo \"$previousBlackMoon\\n\";\n     * ```\n     *\n     * @param object|string $mixin\n     *\n     * @throws ReflectionException\n     *\n     * @return void\n     */\n    public static function mixin($mixin)\n    {\n        \\is_string($mixin) && trait_exists($mixin)\n            ? self::loadMixinTrait($mixin)\n            : self::loadMixinClass($mixin);\n    }\n\n    /**\n     * @param object|string $mixin\n     *\n     * @throws ReflectionException\n     */\n    private static function loadMixinClass($mixin)\n    {\n        $methods = (new ReflectionClass($mixin))->getMethods(\n            ReflectionMethod::IS_PUBLIC | ReflectionMethod::IS_PROTECTED\n        );\n\n        foreach ($methods as $method) {\n            if ($method->isConstructor() || $method->isDestructor()) {\n                continue;\n            }\n\n            $method->setAccessible(true);\n\n            static::macro($method->name, $method->invoke($mixin));\n        }\n    }\n\n    /**\n     * @param string $trait\n     */\n    private static function loadMixinTrait($trait)\n    {\n        $context = eval(self::getAnonymousClassCodeForTrait($trait));\n        $className = \\get_class($context);\n        $baseClass = static::class;\n\n        foreach (self::getMixableMethods($context) as $name) {\n            $closureBase = Closure::fromCallable([$context, $name]);\n\n            static::macro($name, function (...$parameters) use ($closureBase, $className, $baseClass) {\n                $downContext = isset($this) ? ($this) : new $baseClass();\n                $context = isset($this) ? $this->cast($className) : new $className();\n\n                try {\n                    // @ is required to handle error if not converted into exceptions\n                    $closure = @$closureBase->bindTo($context);\n                } catch (Throwable $throwable) { // @codeCoverageIgnore\n                    $closure = $closureBase; // @codeCoverageIgnore\n                }\n\n                // in case of errors not converted into exceptions\n                $closure = $closure ?: $closureBase;\n\n                $result = $closure(...$parameters);\n\n                if (!($result instanceof $className)) {\n                    return $result;\n                }\n\n                if ($downContext instanceof CarbonInterface && $result instanceof CarbonInterface) {\n                    if ($context !== $result) {\n                        $downContext = $downContext->copy();\n                    }\n\n                    return $downContext\n                        ->setTimezone($result->getTimezone())\n                        ->modify($result->format('Y-m-d H:i:s.u'))\n                        ->settings($result->getSettings());\n                }\n\n                if ($downContext instanceof CarbonInterval && $result instanceof CarbonInterval) {\n                    if ($context !== $result) {\n                        $downContext = $downContext->copy();\n                    }\n\n                    $downContext->copyProperties($result);\n                    self::copyStep($downContext, $result);\n                    self::copyNegativeUnits($downContext, $result);\n\n                    return $downContext->settings($result->getSettings());\n                }\n\n                if ($downContext instanceof CarbonPeriod && $result instanceof CarbonPeriod) {\n                    if ($context !== $result) {\n                        $downContext = $downContext->copy();\n                    }\n\n                    return $downContext\n                        ->setDates($result->getStartDate(), $result->getEndDate())\n                        ->setRecurrences($result->getRecurrences())\n                        ->setOptions($result->getOptions())\n                        ->settings($result->getSettings());\n                }\n\n                return $result;\n            });\n        }\n    }\n\n    private static function getAnonymousClassCodeForTrait(string $trait)\n    {\n        return 'return new class() extends '.static::class.' {use '.$trait.';};';\n    }\n\n    private static function getMixableMethods(self $context): Generator\n    {\n        foreach (get_class_methods($context) as $name) {\n            if (method_exists(static::class, $name)) {\n                continue;\n            }\n\n            yield $name;\n        }\n    }\n\n    /**\n     * Stack a Carbon context from inside calls of self::this() and execute a given action.\n     *\n     * @param static|null $context\n     * @param callable    $callable\n     *\n     * @throws Throwable\n     *\n     * @return mixed\n     */\n    protected static function bindMacroContext($context, callable $callable)\n    {\n        static::$macroContextStack[] = $context;\n\n        try {\n            return $callable();\n        } finally {\n            array_pop(static::$macroContextStack);\n        }\n    }\n\n    /**\n     * Return the current context from inside a macro callee or a null if static.\n     *\n     * @return static|null\n     */\n    protected static function context()\n    {\n        return end(static::$macroContextStack) ?: null;\n    }\n\n    /**\n     * Return the current context from inside a macro callee or a new one if static.\n     *\n     * @return static\n     */\n    protected static function this()\n    {\n        return end(static::$macroContextStack) ?: new static();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Modifiers.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterface;\nuse ReturnTypeWillChange;\n\n/**\n * Trait Modifiers.\n *\n * Returns dates relative to current date using modifier short-hand.\n */\ntrait Modifiers\n{\n    /**\n     * Midday/noon hour.\n     *\n     * @var int\n     */\n    protected static $midDayAt = 12;\n\n    /**\n     * get midday/noon hour\n     *\n     * @return int\n     */\n    public static function getMidDayAt()\n    {\n        return static::$midDayAt;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather consider mid-day is always 12pm, then if you need to test if it's an other\n     *             hour, test it explicitly:\n     *                 $date->format('G') == 13\n     *             or to set explicitly to a given hour:\n     *                 $date->setTime(13, 0, 0, 0)\n     *\n     * Set midday/noon hour\n     *\n     * @param int $hour midday hour\n     *\n     * @return void\n     */\n    public static function setMidDayAt($hour)\n    {\n        static::$midDayAt = $hour;\n    }\n\n    /**\n     * Modify to midday, default to self::$midDayAt\n     *\n     * @return static\n     */\n    public function midDay()\n    {\n        return $this->setTime(static::$midDayAt, 0, 0, 0);\n    }\n\n    /**\n     * Modify to the next occurrence of a given modifier such as a day of\n     * the week. If no modifier is provided, modify to the next occurrence\n     * of the current day of the week. Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param string|int|null $modifier\n     *\n     * @return static|false\n     */\n    public function next($modifier = null)\n    {\n        if ($modifier === null) {\n            $modifier = $this->dayOfWeek;\n        }\n\n        return $this->change(\n            'next '.(\\is_string($modifier) ? $modifier : static::$days[$modifier])\n        );\n    }\n\n    /**\n     * Go forward or backward to the next week- or weekend-day.\n     *\n     * @param bool $weekday\n     * @param bool $forward\n     *\n     * @return static\n     */\n    private function nextOrPreviousDay($weekday = true, $forward = true)\n    {\n        /** @var CarbonInterface $date */\n        $date = $this;\n        $step = $forward ? 1 : -1;\n\n        do {\n            $date = $date->addDays($step);\n        } while ($weekday ? $date->isWeekend() : $date->isWeekday());\n\n        return $date;\n    }\n\n    /**\n     * Go forward to the next weekday.\n     *\n     * @return static\n     */\n    public function nextWeekday()\n    {\n        return $this->nextOrPreviousDay();\n    }\n\n    /**\n     * Go backward to the previous weekday.\n     *\n     * @return static\n     */\n    public function previousWeekday()\n    {\n        return $this->nextOrPreviousDay(true, false);\n    }\n\n    /**\n     * Go forward to the next weekend day.\n     *\n     * @return static\n     */\n    public function nextWeekendDay()\n    {\n        return $this->nextOrPreviousDay(false);\n    }\n\n    /**\n     * Go backward to the previous weekend day.\n     *\n     * @return static\n     */\n    public function previousWeekendDay()\n    {\n        return $this->nextOrPreviousDay(false, false);\n    }\n\n    /**\n     * Modify to the previous occurrence of a given modifier such as a day of\n     * the week. If no dayOfWeek is provided, modify to the previous occurrence\n     * of the current day of the week. Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param string|int|null $modifier\n     *\n     * @return static|false\n     */\n    public function previous($modifier = null)\n    {\n        if ($modifier === null) {\n            $modifier = $this->dayOfWeek;\n        }\n\n        return $this->change(\n            'last '.(\\is_string($modifier) ? $modifier : static::$days[$modifier])\n        );\n    }\n\n    /**\n     * Modify to the first occurrence of a given day of the week\n     * in the current month. If no dayOfWeek is provided, modify to the\n     * first day of the current month.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek\n     *\n     * @return static\n     */\n    public function firstOfMonth($dayOfWeek = null)\n    {\n        $date = $this->startOfDay();\n\n        if ($dayOfWeek === null) {\n            return $date->day(1);\n        }\n\n        return $date->modify('first '.static::$days[$dayOfWeek].' of '.$date->rawFormat('F').' '.$date->year);\n    }\n\n    /**\n     * Modify to the last occurrence of a given day of the week\n     * in the current month. If no dayOfWeek is provided, modify to the\n     * last day of the current month.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek\n     *\n     * @return static\n     */\n    public function lastOfMonth($dayOfWeek = null)\n    {\n        $date = $this->startOfDay();\n\n        if ($dayOfWeek === null) {\n            return $date->day($date->daysInMonth);\n        }\n\n        return $date->modify('last '.static::$days[$dayOfWeek].' of '.$date->rawFormat('F').' '.$date->year);\n    }\n\n    /**\n     * Modify to the given occurrence of a given day of the week\n     * in the current month. If the calculated occurrence is outside the scope\n     * of the current month, then return false and no modifications are made.\n     * Use the supplied constants to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int $nth\n     * @param int $dayOfWeek\n     *\n     * @return mixed\n     */\n    public function nthOfMonth($nth, $dayOfWeek)\n    {\n        $date = $this->avoidMutation()->firstOfMonth();\n        $check = $date->rawFormat('Y-m');\n        $date = $date->modify('+'.$nth.' '.static::$days[$dayOfWeek]);\n\n        return $date->rawFormat('Y-m') === $check ? $this->modify((string) $date) : false;\n    }\n\n    /**\n     * Modify to the first occurrence of a given day of the week\n     * in the current quarter. If no dayOfWeek is provided, modify to the\n     * first day of the current quarter.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function firstOfQuarter($dayOfWeek = null)\n    {\n        return $this->setDate($this->year, $this->quarter * static::MONTHS_PER_QUARTER - 2, 1)->firstOfMonth($dayOfWeek);\n    }\n\n    /**\n     * Modify to the last occurrence of a given day of the week\n     * in the current quarter. If no dayOfWeek is provided, modify to the\n     * last day of the current quarter.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function lastOfQuarter($dayOfWeek = null)\n    {\n        return $this->setDate($this->year, $this->quarter * static::MONTHS_PER_QUARTER, 1)->lastOfMonth($dayOfWeek);\n    }\n\n    /**\n     * Modify to the given occurrence of a given day of the week\n     * in the current quarter. If the calculated occurrence is outside the scope\n     * of the current quarter, then return false and no modifications are made.\n     * Use the supplied constants to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int $nth\n     * @param int $dayOfWeek\n     *\n     * @return mixed\n     */\n    public function nthOfQuarter($nth, $dayOfWeek)\n    {\n        $date = $this->avoidMutation()->day(1)->month($this->quarter * static::MONTHS_PER_QUARTER);\n        $lastMonth = $date->month;\n        $year = $date->year;\n        $date = $date->firstOfQuarter()->modify('+'.$nth.' '.static::$days[$dayOfWeek]);\n\n        return ($lastMonth < $date->month || $year !== $date->year) ? false : $this->modify((string) $date);\n    }\n\n    /**\n     * Modify to the first occurrence of a given day of the week\n     * in the current year. If no dayOfWeek is provided, modify to the\n     * first day of the current year.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function firstOfYear($dayOfWeek = null)\n    {\n        return $this->month(1)->firstOfMonth($dayOfWeek);\n    }\n\n    /**\n     * Modify to the last occurrence of a given day of the week\n     * in the current year. If no dayOfWeek is provided, modify to the\n     * last day of the current year.  Use the supplied constants\n     * to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int|null $dayOfWeek day of the week default null\n     *\n     * @return static\n     */\n    public function lastOfYear($dayOfWeek = null)\n    {\n        return $this->month(static::MONTHS_PER_YEAR)->lastOfMonth($dayOfWeek);\n    }\n\n    /**\n     * Modify to the given occurrence of a given day of the week\n     * in the current year. If the calculated occurrence is outside the scope\n     * of the current year, then return false and no modifications are made.\n     * Use the supplied constants to indicate the desired dayOfWeek, ex. static::MONDAY.\n     *\n     * @param int $nth\n     * @param int $dayOfWeek\n     *\n     * @return mixed\n     */\n    public function nthOfYear($nth, $dayOfWeek)\n    {\n        $date = $this->avoidMutation()->firstOfYear()->modify('+'.$nth.' '.static::$days[$dayOfWeek]);\n\n        return $this->year === $date->year ? $this->modify((string) $date) : false;\n    }\n\n    /**\n     * Modify the current instance to the average of a given instance (default now) and the current instance\n     * (second-precision).\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|null $date\n     *\n     * @return static\n     */\n    public function average($date = null)\n    {\n        return $this->addRealMicroseconds((int) ($this->diffInRealMicroseconds($this->resolveCarbon($date), false) / 2));\n    }\n\n    /**\n     * Get the closest date from the instance (second-precision).\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return static\n     */\n    public function closest($date1, $date2)\n    {\n        return $this->diffInRealMicroseconds($date1) < $this->diffInRealMicroseconds($date2) ? $date1 : $date2;\n    }\n\n    /**\n     * Get the farthest date from the instance (second-precision).\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date1\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date2\n     *\n     * @return static\n     */\n    public function farthest($date1, $date2)\n    {\n        return $this->diffInRealMicroseconds($date1) > $this->diffInRealMicroseconds($date2) ? $date1 : $date2;\n    }\n\n    /**\n     * Get the minimum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return static\n     */\n    public function min($date = null)\n    {\n        $date = $this->resolveCarbon($date);\n\n        return $this->lt($date) ? $this : $date;\n    }\n\n    /**\n     * Get the minimum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see min()\n     *\n     * @return static\n     */\n    public function minimum($date = null)\n    {\n        return $this->min($date);\n    }\n\n    /**\n     * Get the maximum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @return static\n     */\n    public function max($date = null)\n    {\n        $date = $this->resolveCarbon($date);\n\n        return $this->gt($date) ? $this : $date;\n    }\n\n    /**\n     * Get the maximum instance between a given instance (default now) and the current instance.\n     *\n     * @param \\Carbon\\Carbon|\\DateTimeInterface|mixed $date\n     *\n     * @see max()\n     *\n     * @return static\n     */\n    public function maximum($date = null)\n    {\n        return $this->max($date);\n    }\n\n    /**\n     * Calls \\DateTime::modify if mutable or \\DateTimeImmutable::modify else.\n     *\n     * @see https://php.net/manual/en/datetime.modify.php\n     *\n     * @return static|false\n     */\n    #[ReturnTypeWillChange]\n    public function modify($modify)\n    {\n        return parent::modify((string) $modify);\n    }\n\n    /**\n     * Similar to native modify() method of DateTime but can handle more grammars.\n     *\n     * @example\n     * ```\n     * echo Carbon::now()->change('next 2pm');\n     * ```\n     *\n     * @link https://php.net/manual/en/datetime.modify.php\n     *\n     * @param string $modifier\n     *\n     * @return static|false\n     */\n    public function change($modifier)\n    {\n        return $this->modify(preg_replace_callback('/^(next|previous|last)\\s+(\\d{1,2}(h|am|pm|:\\d{1,2}(:\\d{1,2})?))$/i', function ($match) {\n            $match[2] = str_replace('h', ':00', $match[2]);\n            $test = $this->avoidMutation()->modify($match[2]);\n            $method = $match[1] === 'next' ? 'lt' : 'gt';\n            $match[1] = $test->$method($this) ? $match[1].' day' : 'today';\n\n            return $match[1].' '.$match[2];\n        }, strtr(trim($modifier), [\n            ' at ' => ' ',\n            'just now' => 'now',\n            'after tomorrow' => 'tomorrow +1 day',\n            'before yesterday' => 'yesterday -1 day',\n        ])));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Mutability.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Carbon;\nuse Carbon\\CarbonImmutable;\n\n/**\n * Trait Mutability.\n *\n * Utils to know if the current object is mutable or immutable and convert it.\n */\ntrait Mutability\n{\n    use Cast;\n\n    /**\n     * Returns true if the current class/instance is mutable.\n     *\n     * @return bool\n     */\n    public static function isMutable()\n    {\n        return false;\n    }\n\n    /**\n     * Returns true if the current class/instance is immutable.\n     *\n     * @return bool\n     */\n    public static function isImmutable()\n    {\n        return !static::isMutable();\n    }\n\n    /**\n     * Return a mutable copy of the instance.\n     *\n     * @return Carbon\n     */\n    public function toMutable()\n    {\n        /** @var Carbon $date */\n        $date = $this->cast(Carbon::class);\n\n        return $date;\n    }\n\n    /**\n     * Return a immutable copy of the instance.\n     *\n     * @return CarbonImmutable\n     */\n    public function toImmutable()\n    {\n        /** @var CarbonImmutable $date */\n        $date = $this->cast(CarbonImmutable::class);\n\n        return $date;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\ntrait ObjectInitialisation\n{\n    /**\n     * True when parent::__construct has been called.\n     *\n     * @var string\n     */\n    protected $constructedObjectId;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Options.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterface;\nuse DateTimeInterface;\nuse Throwable;\n\n/**\n * Trait Options.\n *\n * Embed base methods to change settings of Carbon classes.\n *\n * Depends on the following methods:\n *\n * @method static shiftTimezone($timezone) Set the timezone\n */\ntrait Options\n{\n    use Localization;\n\n    /**\n     * Customizable PHP_INT_SIZE override.\n     *\n     * @var int\n     */\n    public static $PHPIntSize = PHP_INT_SIZE;\n\n    /**\n     * First day of week.\n     *\n     * @var int|string\n     */\n    protected static $weekStartsAt = CarbonInterface::MONDAY;\n\n    /**\n     * Last day of week.\n     *\n     * @var int|string\n     */\n    protected static $weekEndsAt = CarbonInterface::SUNDAY;\n\n    /**\n     * Days of weekend.\n     *\n     * @var array\n     */\n    protected static $weekendDays = [\n        CarbonInterface::SATURDAY,\n        CarbonInterface::SUNDAY,\n    ];\n\n    /**\n     * Format regex patterns.\n     *\n     * @var array<string, string>\n     */\n    protected static $regexFormats = [\n        'd' => '(3[01]|[12][0-9]|0[1-9])',\n        'D' => '(Sun|Mon|Tue|Wed|Thu|Fri|Sat)',\n        'j' => '([123][0-9]|[1-9])',\n        'l' => '([a-zA-Z]{2,})',\n        'N' => '([1-7])',\n        'S' => '(st|nd|rd|th)',\n        'w' => '([0-6])',\n        'z' => '(36[0-5]|3[0-5][0-9]|[12][0-9]{2}|[1-9]?[0-9])',\n        'W' => '(5[012]|[1-4][0-9]|0?[1-9])',\n        'F' => '([a-zA-Z]{2,})',\n        'm' => '(1[012]|0[1-9])',\n        'M' => '([a-zA-Z]{3})',\n        'n' => '(1[012]|[1-9])',\n        't' => '(2[89]|3[01])',\n        'L' => '(0|1)',\n        'o' => '([1-9][0-9]{0,4})',\n        'Y' => '([1-9]?[0-9]{4})',\n        'y' => '([0-9]{2})',\n        'a' => '(am|pm)',\n        'A' => '(AM|PM)',\n        'B' => '([0-9]{3})',\n        'g' => '(1[012]|[1-9])',\n        'G' => '(2[0-3]|1?[0-9])',\n        'h' => '(1[012]|0[1-9])',\n        'H' => '(2[0-3]|[01][0-9])',\n        'i' => '([0-5][0-9])',\n        's' => '([0-5][0-9])',\n        'u' => '([0-9]{1,6})',\n        'v' => '([0-9]{1,3})',\n        'e' => '([a-zA-Z]{1,5})|([a-zA-Z]*\\\\/[a-zA-Z]*)',\n        'I' => '(0|1)',\n        'O' => '([+-](1[012]|0[0-9])[0134][05])',\n        'P' => '([+-](1[012]|0[0-9]):[0134][05])',\n        'p' => '(Z|[+-](1[012]|0[0-9]):[0134][05])',\n        'T' => '([a-zA-Z]{1,5})',\n        'Z' => '(-?[1-5]?[0-9]{1,4})',\n        'U' => '([0-9]*)',\n\n        // The formats below are combinations of the above formats.\n        'c' => '(([1-9]?[0-9]{4})-(1[012]|0[1-9])-(3[01]|[12][0-9]|0[1-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])[+-](1[012]|0[0-9]):([0134][05]))', // Y-m-dTH:i:sP\n        'r' => '(([a-zA-Z]{3}), ([123][0-9]|0[1-9]) ([a-zA-Z]{3}) ([1-9]?[0-9]{4}) (2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9]) [+-](1[012]|0[0-9])([0134][05]))', // D, d M Y H:i:s O\n    ];\n\n    /**\n     * Format modifiers (such as available in createFromFormat) regex patterns.\n     *\n     * @var array\n     */\n    protected static $regexFormatModifiers = [\n        '*' => '.+',\n        ' ' => '[   ]',\n        '#' => '[;:\\\\/.,()-]',\n        '?' => '([^a]|[a])',\n        '!' => '',\n        '|' => '',\n        '+' => '',\n    ];\n\n    /**\n     * Indicates if months should be calculated with overflow.\n     * Global setting.\n     *\n     * @var bool\n     */\n    protected static $monthsOverflow = true;\n\n    /**\n     * Indicates if years should be calculated with overflow.\n     * Global setting.\n     *\n     * @var bool\n     */\n    protected static $yearsOverflow = true;\n\n    /**\n     * Indicates if the strict mode is in use.\n     * Global setting.\n     *\n     * @var bool\n     */\n    protected static $strictModeEnabled = true;\n\n    /**\n     * Function to call instead of format.\n     *\n     * @var string|callable|null\n     */\n    protected static $formatFunction;\n\n    /**\n     * Function to call instead of createFromFormat.\n     *\n     * @var string|callable|null\n     */\n    protected static $createFromFormatFunction;\n\n    /**\n     * Function to call instead of parse.\n     *\n     * @var string|callable|null\n     */\n    protected static $parseFunction;\n\n    /**\n     * Indicates if months should be calculated with overflow.\n     * Specific setting.\n     *\n     * @var bool|null\n     */\n    protected $localMonthsOverflow;\n\n    /**\n     * Indicates if years should be calculated with overflow.\n     * Specific setting.\n     *\n     * @var bool|null\n     */\n    protected $localYearsOverflow;\n\n    /**\n     * Indicates if the strict mode is in use.\n     * Specific setting.\n     *\n     * @var bool|null\n     */\n    protected $localStrictModeEnabled;\n\n    /**\n     * Options for diffForHumans and forHumans methods.\n     *\n     * @var bool|null\n     */\n    protected $localHumanDiffOptions;\n\n    /**\n     * Format to use on string cast.\n     *\n     * @var string|null\n     */\n    protected $localToStringFormat;\n\n    /**\n     * Format to use on JSON serialization.\n     *\n     * @var string|null\n     */\n    protected $localSerializer;\n\n    /**\n     * Instance-specific macros.\n     *\n     * @var array|null\n     */\n    protected $localMacros;\n\n    /**\n     * Instance-specific generic macros.\n     *\n     * @var array|null\n     */\n    protected $localGenericMacros;\n\n    /**\n     * Function to call instead of format.\n     *\n     * @var string|callable|null\n     */\n    protected $localFormatFunction;\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     * @see settings\n     *\n     * Enable the strict mode (or disable with passing false).\n     *\n     * @param bool $strictModeEnabled\n     */\n    public static function useStrictMode($strictModeEnabled = true)\n    {\n        static::$strictModeEnabled = $strictModeEnabled;\n    }\n\n    /**\n     * Returns true if the strict mode is globally in use, false else.\n     * (It can be overridden in specific instances.)\n     *\n     * @return bool\n     */\n    public static function isStrictModeEnabled()\n    {\n        return static::$strictModeEnabled;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Indicates if months should be calculated with overflow.\n     *\n     * @param bool $monthsOverflow\n     *\n     * @return void\n     */\n    public static function useMonthsOverflow($monthsOverflow = true)\n    {\n        static::$monthsOverflow = $monthsOverflow;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addMonthsWithOverflow/addMonthsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Reset the month overflow behavior.\n     *\n     * @return void\n     */\n    public static function resetMonthsOverflow()\n    {\n        static::$monthsOverflow = true;\n    }\n\n    /**\n     * Get the month overflow global behavior (can be overridden in specific instances).\n     *\n     * @return bool\n     */\n    public static function shouldOverflowMonths()\n    {\n        return static::$monthsOverflow;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Indicates if years should be calculated with overflow.\n     *\n     * @param bool $yearsOverflow\n     *\n     * @return void\n     */\n    public static function useYearsOverflow($yearsOverflow = true)\n    {\n        static::$yearsOverflow = $yearsOverflow;\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather use the ->settings() method.\n     *             Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants\n     *             are available for quarters, years, decade, centuries, millennia (singular and plural forms).\n     * @see settings\n     *\n     * Reset the month overflow behavior.\n     *\n     * @return void\n     */\n    public static function resetYearsOverflow()\n    {\n        static::$yearsOverflow = true;\n    }\n\n    /**\n     * Get the month overflow global behavior (can be overridden in specific instances).\n     *\n     * @return bool\n     */\n    public static function shouldOverflowYears()\n    {\n        return static::$yearsOverflow;\n    }\n\n    /**\n     * Set specific options.\n     *  - strictMode: true|false|null\n     *  - monthOverflow: true|false|null\n     *  - yearOverflow: true|false|null\n     *  - humanDiffOptions: int|null\n     *  - toStringFormat: string|Closure|null\n     *  - toJsonFormat: string|Closure|null\n     *  - locale: string|null\n     *  - timezone: \\DateTimeZone|string|int|null\n     *  - macros: array|null\n     *  - genericMacros: array|null\n     *\n     * @param array $settings\n     *\n     * @return $this|static\n     */\n    public function settings(array $settings)\n    {\n        $this->localStrictModeEnabled = $settings['strictMode'] ?? null;\n        $this->localMonthsOverflow = $settings['monthOverflow'] ?? null;\n        $this->localYearsOverflow = $settings['yearOverflow'] ?? null;\n        $this->localHumanDiffOptions = $settings['humanDiffOptions'] ?? null;\n        $this->localToStringFormat = $settings['toStringFormat'] ?? null;\n        $this->localSerializer = $settings['toJsonFormat'] ?? null;\n        $this->localMacros = $settings['macros'] ?? null;\n        $this->localGenericMacros = $settings['genericMacros'] ?? null;\n        $this->localFormatFunction = $settings['formatFunction'] ?? null;\n\n        if (isset($settings['locale'])) {\n            $locales = $settings['locale'];\n\n            if (!\\is_array($locales)) {\n                $locales = [$locales];\n            }\n\n            $this->locale(...$locales);\n        }\n\n        if (isset($settings['innerTimezone'])) {\n            return $this->setTimezone($settings['innerTimezone']);\n        }\n\n        if (isset($settings['timezone'])) {\n            return $this->shiftTimezone($settings['timezone']);\n        }\n\n        return $this;\n    }\n\n    /**\n     * Returns current local settings.\n     *\n     * @return array\n     */\n    public function getSettings()\n    {\n        $settings = [];\n        $map = [\n            'localStrictModeEnabled' => 'strictMode',\n            'localMonthsOverflow' => 'monthOverflow',\n            'localYearsOverflow' => 'yearOverflow',\n            'localHumanDiffOptions' => 'humanDiffOptions',\n            'localToStringFormat' => 'toStringFormat',\n            'localSerializer' => 'toJsonFormat',\n            'localMacros' => 'macros',\n            'localGenericMacros' => 'genericMacros',\n            'locale' => 'locale',\n            'tzName' => 'timezone',\n            'localFormatFunction' => 'formatFunction',\n        ];\n\n        foreach ($map as $property => $key) {\n            $value = $this->$property ?? null;\n\n            if ($value !== null && ($key !== 'locale' || $value !== 'en' || $this->localTranslator)) {\n                $settings[$key] = $value;\n            }\n        }\n\n        return $settings;\n    }\n\n    /**\n     * Show truthy properties on var_dump().\n     *\n     * @return array\n     */\n    public function __debugInfo()\n    {\n        $infos = array_filter(get_object_vars($this), static function ($var) {\n            return $var;\n        });\n\n        foreach (['dumpProperties', 'constructedObjectId', 'constructed'] as $property) {\n            if (isset($infos[$property])) {\n                unset($infos[$property]);\n            }\n        }\n\n        $this->addExtraDebugInfos($infos);\n\n        return $infos;\n    }\n\n    protected function addExtraDebugInfos(&$infos): void\n    {\n        if ($this instanceof DateTimeInterface) {\n            try {\n                if (!isset($infos['date'])) {\n                    $infos['date'] = $this->format(CarbonInterface::MOCK_DATETIME_FORMAT);\n                }\n\n                if (!isset($infos['timezone'])) {\n                    $infos['timezone'] = $this->tzName;\n                }\n            } catch (Throwable $exception) {\n                // noop\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Rounding.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterface;\nuse Carbon\\Exceptions\\UnknownUnitException;\n\n/**\n * Trait Rounding.\n *\n * Round, ceil, floor units.\n *\n * Depends on the following methods:\n *\n * @method static copy()\n * @method static startOfWeek(int $weekStartsAt = null)\n */\ntrait Rounding\n{\n    use IntervalRounding;\n\n    /**\n     * Round the current instance at the given unit with given precision if specified and the given function.\n     *\n     * @param string    $unit\n     * @param float|int $precision\n     * @param string    $function\n     *\n     * @return CarbonInterface\n     */\n    public function roundUnit($unit, $precision = 1, $function = 'round')\n    {\n        $metaUnits = [\n            // @call roundUnit\n            'millennium' => [static::YEARS_PER_MILLENNIUM, 'year'],\n            // @call roundUnit\n            'century' => [static::YEARS_PER_CENTURY, 'year'],\n            // @call roundUnit\n            'decade' => [static::YEARS_PER_DECADE, 'year'],\n            // @call roundUnit\n            'quarter' => [static::MONTHS_PER_QUARTER, 'month'],\n            // @call roundUnit\n            'millisecond' => [1000, 'microsecond'],\n        ];\n        $normalizedUnit = static::singularUnit($unit);\n        $ranges = array_merge(static::getRangesByUnit($this->daysInMonth), [\n            // @call roundUnit\n            'microsecond' => [0, 999999],\n        ]);\n        $factor = 1;\n\n        if ($normalizedUnit === 'week') {\n            $normalizedUnit = 'day';\n            $precision *= static::DAYS_PER_WEEK;\n        }\n\n        if (isset($metaUnits[$normalizedUnit])) {\n            [$factor, $normalizedUnit] = $metaUnits[$normalizedUnit];\n        }\n\n        $precision *= $factor;\n\n        if (!isset($ranges[$normalizedUnit])) {\n            throw new UnknownUnitException($unit);\n        }\n\n        $found = false;\n        $fraction = 0;\n        $arguments = null;\n        $initialValue = null;\n        $factor = $this->year < 0 ? -1 : 1;\n        $changes = [];\n        $minimumInc = null;\n\n        foreach ($ranges as $unit => [$minimum, $maximum]) {\n            if ($normalizedUnit === $unit) {\n                $arguments = [$this->$unit, $minimum];\n                $initialValue = $this->$unit;\n                $fraction = $precision - floor($precision);\n                $found = true;\n\n                continue;\n            }\n\n            if ($found) {\n                $delta = $maximum + 1 - $minimum;\n                $factor /= $delta;\n                $fraction *= $delta;\n                $inc = ($this->$unit - $minimum) * $factor;\n\n                if ($inc !== 0.0) {\n                    $minimumInc = $minimumInc ?? ($arguments[0] / pow(2, 52));\n\n                    // If value is still the same when adding a non-zero increment/decrement,\n                    // it means precision got lost in the addition\n                    if (abs($inc) < $minimumInc) {\n                        $inc = $minimumInc * ($inc < 0 ? -1 : 1);\n                    }\n\n                    // If greater than $precision, assume precision loss caused an overflow\n                    if ($function !== 'floor' || abs($arguments[0] + $inc - $initialValue) >= $precision) {\n                        $arguments[0] += $inc;\n                    }\n                }\n\n                $changes[$unit] = round(\n                    $minimum + ($fraction ? $fraction * $function(($this->$unit - $minimum) / $fraction) : 0)\n                );\n\n                // Cannot use modulo as it lose double precision\n                while ($changes[$unit] >= $delta) {\n                    $changes[$unit] -= $delta;\n                }\n\n                $fraction -= floor($fraction);\n            }\n        }\n\n        [$value, $minimum] = $arguments;\n        $normalizedValue = floor($function(($value - $minimum) / $precision) * $precision + $minimum);\n\n        /** @var CarbonInterface $result */\n        $result = $this;\n\n        foreach ($changes as $unit => $value) {\n            $result = $result->$unit($value);\n        }\n\n        return $result->$normalizedUnit($normalizedValue);\n    }\n\n    /**\n     * Truncate the current instance at the given unit with given precision if specified.\n     *\n     * @param string    $unit\n     * @param float|int $precision\n     *\n     * @return CarbonInterface\n     */\n    public function floorUnit($unit, $precision = 1)\n    {\n        return $this->roundUnit($unit, $precision, 'floor');\n    }\n\n    /**\n     * Ceil the current instance at the given unit with given precision if specified.\n     *\n     * @param string    $unit\n     * @param float|int $precision\n     *\n     * @return CarbonInterface\n     */\n    public function ceilUnit($unit, $precision = 1)\n    {\n        return $this->roundUnit($unit, $precision, 'ceil');\n    }\n\n    /**\n     * Round the current instance second with given precision if specified.\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     * @param string                              $function\n     *\n     * @return CarbonInterface\n     */\n    public function round($precision = 1, $function = 'round')\n    {\n        return $this->roundWith($precision, $function);\n    }\n\n    /**\n     * Round the current instance second with given precision if specified.\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return CarbonInterface\n     */\n    public function floor($precision = 1)\n    {\n        return $this->round($precision, 'floor');\n    }\n\n    /**\n     * Ceil the current instance second with given precision if specified.\n     *\n     * @param float|int|string|\\DateInterval|null $precision\n     *\n     * @return CarbonInterface\n     */\n    public function ceil($precision = 1)\n    {\n        return $this->round($precision, 'ceil');\n    }\n\n    /**\n     * Round the current instance week.\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return CarbonInterface\n     */\n    public function roundWeek($weekStartsAt = null)\n    {\n        return $this->closest(\n            $this->avoidMutation()->floorWeek($weekStartsAt),\n            $this->avoidMutation()->ceilWeek($weekStartsAt)\n        );\n    }\n\n    /**\n     * Truncate the current instance week.\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return CarbonInterface\n     */\n    public function floorWeek($weekStartsAt = null)\n    {\n        return $this->startOfWeek($weekStartsAt);\n    }\n\n    /**\n     * Ceil the current instance week.\n     *\n     * @param int $weekStartsAt optional start allow you to specify the day of week to use to start the week\n     *\n     * @return CarbonInterface\n     */\n    public function ceilWeek($weekStartsAt = null)\n    {\n        if ($this->isMutable()) {\n            $startOfWeek = $this->avoidMutation()->startOfWeek($weekStartsAt);\n\n            return $startOfWeek != $this ?\n                $this->startOfWeek($weekStartsAt)->addWeek() :\n                $this;\n        }\n\n        $startOfWeek = $this->startOfWeek($weekStartsAt);\n\n        return $startOfWeek != $this ?\n            $startOfWeek->addWeek() :\n            $this->avoidMutation();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Serialization.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\Exceptions\\InvalidFormatException;\nuse ReturnTypeWillChange;\nuse Throwable;\n\n/**\n * Trait Serialization.\n *\n * Serialization and JSON stuff.\n *\n * Depends on the following properties:\n *\n * @property int $year\n * @property int $month\n * @property int $daysInMonth\n * @property int $quarter\n *\n * Depends on the following methods:\n *\n * @method string|static locale(string $locale = null, string ...$fallbackLocales)\n * @method string        toJSON()\n */\ntrait Serialization\n{\n    use ObjectInitialisation;\n\n    /**\n     * The custom Carbon JSON serializer.\n     *\n     * @var callable|null\n     */\n    protected static $serializer;\n\n    /**\n     * List of key to use for dump/serialization.\n     *\n     * @var string[]\n     */\n    protected $dumpProperties = ['date', 'timezone_type', 'timezone'];\n\n    /**\n     * Locale to dump comes here before serialization.\n     *\n     * @var string|null\n     */\n    protected $dumpLocale;\n\n    /**\n     * Embed date properties to dump in a dedicated variables so it won't overlap native\n     * DateTime ones.\n     *\n     * @var array|null\n     */\n    protected $dumpDateProperties;\n\n    /**\n     * Return a serialized string of the instance.\n     *\n     * @return string\n     */\n    public function serialize()\n    {\n        return serialize($this);\n    }\n\n    /**\n     * Create an instance from a serialized string.\n     *\n     * @param string $value\n     *\n     * @throws InvalidFormatException\n     *\n     * @return static\n     */\n    public static function fromSerialized($value)\n    {\n        $instance = @unserialize((string) $value);\n\n        if (!$instance instanceof static) {\n            throw new InvalidFormatException(\"Invalid serialized value: $value\");\n        }\n\n        return $instance;\n    }\n\n    /**\n     * The __set_state handler.\n     *\n     * @param string|array $dump\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public static function __set_state($dump)\n    {\n        if (\\is_string($dump)) {\n            return static::parse($dump);\n        }\n\n        /** @var \\DateTimeInterface $date */\n        $date = get_parent_class(static::class) && method_exists(parent::class, '__set_state')\n            ? parent::__set_state((array) $dump)\n            : (object) $dump;\n\n        return static::instance($date);\n    }\n\n    /**\n     * Returns the list of properties to dump on serialize() called on.\n     *\n     * Only used by PHP < 7.4.\n     *\n     * @return array\n     */\n    public function __sleep()\n    {\n        $properties = $this->getSleepProperties();\n\n        if ($this->localTranslator ?? null) {\n            $properties[] = 'dumpLocale';\n            $this->dumpLocale = $this->locale ?? null;\n        }\n\n        return $properties;\n    }\n\n    /**\n     * Returns the values to dump on serialize() called on.\n     *\n     * Only used by PHP >= 7.4.\n     *\n     * @return array\n     */\n    public function __serialize(): array\n    {\n        // @codeCoverageIgnoreStart\n        if (isset($this->timezone_type, $this->timezone, $this->date)) {\n            return [\n                'date' => $this->date ?? null,\n                'timezone_type' => $this->timezone_type,\n                'timezone' => $this->timezone ?? null,\n            ];\n        }\n        // @codeCoverageIgnoreEnd\n\n        $timezone = $this->getTimezone();\n        $export = [\n            'date' => $this->format('Y-m-d H:i:s.u'),\n            'timezone_type' => $timezone->getType(),\n            'timezone' => $timezone->getName(),\n        ];\n\n        // @codeCoverageIgnoreStart\n        if (\\extension_loaded('msgpack') && isset($this->constructedObjectId)) {\n            $export['dumpDateProperties'] = [\n                'date' => $this->format('Y-m-d H:i:s.u'),\n                'timezone' => serialize($this->timezone ?? null),\n            ];\n        }\n        // @codeCoverageIgnoreEnd\n\n        if ($this->localTranslator ?? null) {\n            $export['dumpLocale'] = $this->locale ?? null;\n        }\n\n        return $export;\n    }\n\n    /**\n     * Set locale if specified on unserialize() called.\n     *\n     * Only used by PHP < 7.4.\n     *\n     * @return void\n     */\n    #[ReturnTypeWillChange]\n    public function __wakeup()\n    {\n        if (parent::class && method_exists(parent::class, '__wakeup')) {\n            // @codeCoverageIgnoreStart\n            try {\n                parent::__wakeup();\n            } catch (Throwable $exception) {\n                try {\n                    // FatalError occurs when calling msgpack_unpack() in PHP 7.4 or later.\n                    ['date' => $date, 'timezone' => $timezone] = $this->dumpDateProperties;\n                    parent::__construct($date, unserialize($timezone));\n                } catch (Throwable $ignoredException) {\n                    throw $exception;\n                }\n            }\n            // @codeCoverageIgnoreEnd\n        }\n\n        $this->constructedObjectId = spl_object_hash($this);\n\n        if (isset($this->dumpLocale)) {\n            $this->locale($this->dumpLocale);\n            $this->dumpLocale = null;\n        }\n\n        $this->cleanupDumpProperties();\n    }\n\n    /**\n     * Set locale if specified on unserialize() called.\n     *\n     * Only used by PHP >= 7.4.\n     *\n     * @return void\n     */\n    public function __unserialize(array $data): void\n    {\n        // @codeCoverageIgnoreStart\n        try {\n            $this->__construct($data['date'] ?? null, $data['timezone'] ?? null);\n        } catch (Throwable $exception) {\n            if (!isset($data['dumpDateProperties']['date'], $data['dumpDateProperties']['timezone'])) {\n                throw $exception;\n            }\n\n            try {\n                // FatalError occurs when calling msgpack_unpack() in PHP 7.4 or later.\n                ['date' => $date, 'timezone' => $timezone] = $data['dumpDateProperties'];\n                $this->__construct($date, unserialize($timezone));\n            } catch (Throwable $ignoredException) {\n                throw $exception;\n            }\n        }\n        // @codeCoverageIgnoreEnd\n\n        if (isset($data['dumpLocale'])) {\n            $this->locale($data['dumpLocale']);\n        }\n    }\n\n    /**\n     * Prepare the object for JSON serialization.\n     *\n     * @return array|string\n     */\n    #[ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        $serializer = $this->localSerializer ?? static::$serializer;\n\n        if ($serializer) {\n            return \\is_string($serializer)\n                ? $this->rawFormat($serializer)\n                : $serializer($this);\n        }\n\n        return $this->toJSON();\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather transform Carbon object before the serialization.\n     *\n     * JSON serialize all Carbon instances using the given callback.\n     *\n     * @param callable $callback\n     *\n     * @return void\n     */\n    public static function serializeUsing($callback)\n    {\n        static::$serializer = $callback;\n    }\n\n    /**\n     * Cleanup properties attached to the public scope of DateTime when a dump of the date is requested.\n     * foreach ($date as $_) {}\n     * serializer($date)\n     * var_export($date)\n     * get_object_vars($date)\n     */\n    public function cleanupDumpProperties()\n    {\n        // @codeCoverageIgnoreStart\n        if (PHP_VERSION < 8.2) {\n            foreach ($this->dumpProperties as $property) {\n                if (isset($this->$property)) {\n                    unset($this->$property);\n                }\n            }\n        }\n        // @codeCoverageIgnoreEnd\n\n        return $this;\n    }\n\n    private function getSleepProperties(): array\n    {\n        $properties = $this->dumpProperties;\n\n        // @codeCoverageIgnoreStart\n        if (!\\extension_loaded('msgpack')) {\n            return $properties;\n        }\n\n        if (isset($this->constructedObjectId)) {\n            $this->dumpDateProperties = [\n                'date' => $this->format('Y-m-d H:i:s.u'),\n                'timezone' => serialize($this->timezone ?? null),\n            ];\n\n            $properties[] = 'dumpDateProperties';\n        }\n\n        return $properties;\n        // @codeCoverageIgnoreEnd\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Test.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonInterface;\nuse Carbon\\CarbonTimeZone;\nuse Closure;\nuse DateTimeImmutable;\nuse DateTimeInterface;\nuse InvalidArgumentException;\nuse Throwable;\n\ntrait Test\n{\n    ///////////////////////////////////////////////////////////////////\n    ///////////////////////// TESTING AIDS ////////////////////////////\n    ///////////////////////////////////////////////////////////////////\n\n    /**\n     * A test Carbon instance to be returned when now instances are created.\n     *\n     * @var Closure|static|null\n     */\n    protected static $testNow;\n\n    /**\n     * The timezone to resto to when clearing the time mock.\n     *\n     * @var string|null\n     */\n    protected static $testDefaultTimezone;\n\n    /**\n     * Set a Carbon instance (real or mock) to be returned when a \"now\"\n     * instance is created.  The provided instance will be returned\n     * specifically under the following conditions:\n     *   - A call to the static now() method, ex. Carbon::now()\n     *   - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n     *   - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n     *   - When a string containing the desired time is passed to Carbon::parse().\n     *\n     * Note the timezone parameter was left out of the examples above and\n     * has no affect as the mock value will be returned regardless of its value.\n     *\n     * Only the moment is mocked with setTestNow(), the timezone will still be the one passed\n     * as parameter of date_default_timezone_get() as a fallback (see setTestNowAndTimezone()).\n     *\n     * To clear the test instance call this method using the default\n     * parameter of null.\n     *\n     * /!\\ Use this method for unit tests only.\n     *\n     * @param DateTimeInterface|Closure|static|string|false|null $testNow real or mock Carbon instance\n     */\n    public static function setTestNow($testNow = null)\n    {\n        static::$testNow = $testNow instanceof self || $testNow instanceof Closure\n            ? $testNow\n            : static::make($testNow);\n    }\n\n    /**\n     * Set a Carbon instance (real or mock) to be returned when a \"now\"\n     * instance is created.  The provided instance will be returned\n     * specifically under the following conditions:\n     *   - A call to the static now() method, ex. Carbon::now()\n     *   - When a null (or blank string) is passed to the constructor or parse(), ex. new Carbon(null)\n     *   - When the string \"now\" is passed to the constructor or parse(), ex. new Carbon('now')\n     *   - When a string containing the desired time is passed to Carbon::parse().\n     *\n     * It will also align default timezone (e.g. call date_default_timezone_set()) with\n     * the second argument or if null, with the timezone of the given date object.\n     *\n     * To clear the test instance call this method using the default\n     * parameter of null.\n     *\n     * /!\\ Use this method for unit tests only.\n     *\n     * @param DateTimeInterface|Closure|static|string|false|null $testNow real or mock Carbon instance\n     */\n    public static function setTestNowAndTimezone($testNow = null, $tz = null)\n    {\n        if ($testNow) {\n            self::$testDefaultTimezone = self::$testDefaultTimezone ?? date_default_timezone_get();\n        }\n\n        $useDateInstanceTimezone = $testNow instanceof DateTimeInterface;\n\n        if ($useDateInstanceTimezone) {\n            self::setDefaultTimezone($testNow->getTimezone()->getName(), $testNow);\n        }\n\n        static::setTestNow($testNow);\n\n        if (!$useDateInstanceTimezone) {\n            $now = static::getMockedTestNow(\\func_num_args() === 1 ? null : $tz);\n            $tzName = $now ? $now->tzName : null;\n            self::setDefaultTimezone($tzName ?? self::$testDefaultTimezone ?? 'UTC', $now);\n        }\n\n        if (!$testNow) {\n            self::$testDefaultTimezone = null;\n        }\n    }\n\n    /**\n     * Temporarily sets a static date to be used within the callback.\n     * Using setTestNow to set the date, executing the callback, then\n     * clearing the test instance.\n     *\n     * /!\\ Use this method for unit tests only.\n     *\n     * @template T\n     *\n     * @param DateTimeInterface|Closure|static|string|false|null $testNow  real or mock Carbon instance\n     * @param Closure(): T                                       $callback\n     *\n     * @return T\n     */\n    public static function withTestNow($testNow, $callback)\n    {\n        static::setTestNow($testNow);\n\n        try {\n            $result = $callback();\n        } finally {\n            static::setTestNow();\n        }\n\n        return $result;\n    }\n\n    /**\n     * Get the Carbon instance (real or mock) to be returned when a \"now\"\n     * instance is created.\n     *\n     * @return Closure|static the current instance used for testing\n     */\n    public static function getTestNow()\n    {\n        return static::$testNow;\n    }\n\n    /**\n     * Determine if there is a valid test instance set. A valid test instance\n     * is anything that is not null.\n     *\n     * @return bool true if there is a test instance, otherwise false\n     */\n    public static function hasTestNow()\n    {\n        return static::getTestNow() !== null;\n    }\n\n    /**\n     * Get the mocked date passed in setTestNow() and if it's a Closure, execute it.\n     *\n     * @param string|\\DateTimeZone $tz\n     *\n     * @return \\Carbon\\CarbonImmutable|\\Carbon\\Carbon|null\n     */\n    protected static function getMockedTestNow($tz)\n    {\n        $testNow = static::getTestNow();\n\n        if ($testNow instanceof Closure) {\n            $realNow = new DateTimeImmutable('now');\n            $testNow = $testNow(static::parse(\n                $realNow->format('Y-m-d H:i:s.u'),\n                $tz ?: $realNow->getTimezone()\n            ));\n        }\n        /* @var \\Carbon\\CarbonImmutable|\\Carbon\\Carbon|null $testNow */\n\n        return $testNow instanceof CarbonInterface\n            ? $testNow->avoidMutation()->tz($tz)\n            : $testNow;\n    }\n\n    protected static function mockConstructorParameters(&$time, $tz)\n    {\n        /** @var \\Carbon\\CarbonImmutable|\\Carbon\\Carbon $testInstance */\n        $testInstance = clone static::getMockedTestNow($tz);\n\n        if (static::hasRelativeKeywords($time)) {\n            $testInstance = $testInstance->modify($time);\n        }\n\n        $time = $testInstance instanceof self\n            ? $testInstance->rawFormat(static::MOCK_DATETIME_FORMAT)\n            : $testInstance->format(static::MOCK_DATETIME_FORMAT);\n    }\n\n    private static function setDefaultTimezone($timezone, DateTimeInterface $date = null)\n    {\n        $previous = null;\n        $success = false;\n\n        try {\n            $success = date_default_timezone_set($timezone);\n        } catch (Throwable $exception) {\n            $previous = $exception;\n        }\n\n        if (!$success) {\n            $suggestion = @CarbonTimeZone::create($timezone)->toRegionName($date);\n\n            throw new InvalidArgumentException(\n                \"Timezone ID '$timezone' is invalid\".\n                ($suggestion && $suggestion !== $timezone ? \", did you mean '$suggestion'?\" : '.').\"\\n\".\n                \"It must be one of the IDs from DateTimeZone::listIdentifiers(),\\n\".\n                'For the record, hours/minutes offset are relevant only for a particular moment, '.\n                'but not as a default timezone.',\n                0,\n                $previous\n            );\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Timestamp.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\n/**\n * Trait Timestamp.\n */\ntrait Timestamp\n{\n    /**\n     * Create a Carbon instance from a timestamp and set the timezone (use default one if not specified).\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string          $timestamp\n     * @param \\DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function createFromTimestamp($timestamp, $tz = null)\n    {\n        return static::createFromTimestampUTC($timestamp)->setTimezone($tz);\n    }\n\n    /**\n     * Create a Carbon instance from an timestamp keeping the timezone to UTC.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $timestamp\n     *\n     * @return static\n     */\n    public static function createFromTimestampUTC($timestamp)\n    {\n        [$integer, $decimal] = self::getIntegerAndDecimalParts($timestamp);\n        $delta = floor($decimal / static::MICROSECONDS_PER_SECOND);\n        $integer += $delta;\n        $decimal -= $delta * static::MICROSECONDS_PER_SECOND;\n        $decimal = str_pad((string) $decimal, 6, '0', STR_PAD_LEFT);\n\n        return static::rawCreateFromFormat('U u', \"$integer $decimal\");\n    }\n\n    /**\n     * Create a Carbon instance from a timestamp in milliseconds.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $timestamp\n     *\n     * @return static\n     */\n    public static function createFromTimestampMsUTC($timestamp)\n    {\n        [$milliseconds, $microseconds] = self::getIntegerAndDecimalParts($timestamp, 3);\n        $sign = $milliseconds < 0 || ($milliseconds === 0.0 && $microseconds < 0) ? -1 : 1;\n        $milliseconds = abs($milliseconds);\n        $microseconds = $sign * abs($microseconds) + static::MICROSECONDS_PER_MILLISECOND * ($milliseconds % static::MILLISECONDS_PER_SECOND);\n        $seconds = $sign * floor($milliseconds / static::MILLISECONDS_PER_SECOND);\n        $delta = floor($microseconds / static::MICROSECONDS_PER_SECOND);\n        $seconds += $delta;\n        $microseconds -= $delta * static::MICROSECONDS_PER_SECOND;\n        $microseconds = str_pad($microseconds, 6, '0', STR_PAD_LEFT);\n\n        return static::rawCreateFromFormat('U u', \"$seconds $microseconds\");\n    }\n\n    /**\n     * Create a Carbon instance from a timestamp in milliseconds.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string          $timestamp\n     * @param \\DateTimeZone|string|null $tz\n     *\n     * @return static\n     */\n    public static function createFromTimestampMs($timestamp, $tz = null)\n    {\n        return static::createFromTimestampMsUTC($timestamp)\n            ->setTimezone($tz);\n    }\n\n    /**\n     * Set the instance's timestamp.\n     *\n     * Timestamp input can be given as int, float or a string containing one or more numbers.\n     *\n     * @param float|int|string $unixTimestamp\n     *\n     * @return static\n     */\n    public function timestamp($unixTimestamp)\n    {\n        return $this->setTimestamp($unixTimestamp);\n    }\n\n    /**\n     * Returns a timestamp rounded with the given precision (6 by default).\n     *\n     * @example getPreciseTimestamp()   1532087464437474 (microsecond maximum precision)\n     * @example getPreciseTimestamp(6)  1532087464437474\n     * @example getPreciseTimestamp(5)  153208746443747  (1/100000 second precision)\n     * @example getPreciseTimestamp(4)  15320874644375   (1/10000 second precision)\n     * @example getPreciseTimestamp(3)  1532087464437    (millisecond precision)\n     * @example getPreciseTimestamp(2)  153208746444     (1/100 second precision)\n     * @example getPreciseTimestamp(1)  15320874644      (1/10 second precision)\n     * @example getPreciseTimestamp(0)  1532087464       (second precision)\n     * @example getPreciseTimestamp(-1) 153208746        (10 second precision)\n     * @example getPreciseTimestamp(-2) 15320875         (100 second precision)\n     *\n     * @param int $precision\n     *\n     * @return float\n     */\n    public function getPreciseTimestamp($precision = 6)\n    {\n        return round(((float) $this->rawFormat('Uu')) / pow(10, 6 - $precision));\n    }\n\n    /**\n     * Returns the milliseconds timestamps used amongst other by Date javascript objects.\n     *\n     * @return float\n     */\n    public function valueOf()\n    {\n        return $this->getPreciseTimestamp(3);\n    }\n\n    /**\n     * Returns the timestamp with millisecond precision.\n     *\n     * @return int\n     */\n    public function getTimestampMs()\n    {\n        return (int) $this->getPreciseTimestamp(3);\n    }\n\n    /**\n     * @alias getTimestamp\n     *\n     * Returns the UNIX timestamp for the current date.\n     *\n     * @return int\n     */\n    public function unix()\n    {\n        return $this->getTimestamp();\n    }\n\n    /**\n     * Return an array with integer part digits and decimals digits split from one or more positive numbers\n     * (such as timestamps) as string with the given number of decimals (6 by default).\n     *\n     * By splitting integer and decimal, this method obtain a better precision than\n     * number_format when the input is a string.\n     *\n     * @param float|int|string $numbers  one or more numbers\n     * @param int              $decimals number of decimals precision (6 by default)\n     *\n     * @return array 0-index is integer part, 1-index is decimal part digits\n     */\n    private static function getIntegerAndDecimalParts($numbers, $decimals = 6)\n    {\n        if (\\is_int($numbers) || \\is_float($numbers)) {\n            $numbers = number_format($numbers, $decimals, '.', '');\n        }\n\n        $sign = str_starts_with($numbers, '-') ? -1 : 1;\n        $integer = 0;\n        $decimal = 0;\n\n        foreach (preg_split('`[^\\d.]+`', $numbers) as $chunk) {\n            [$integerPart, $decimalPart] = explode('.', \"$chunk.\");\n\n            $integer += (int) $integerPart;\n            $decimal += (float) (\"0.$decimalPart\");\n        }\n\n        $overflow = floor($decimal);\n        $integer += $overflow;\n        $decimal -= $overflow;\n\n        return [$sign * $integer, $decimal === 0.0 ? 0.0 : $sign * round($decimal * pow(10, $decimals))];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/ToStringFormat.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Closure;\n\n/**\n * Trait ToStringFormat.\n *\n * Handle global format customization for string cast of the object.\n */\ntrait ToStringFormat\n{\n    /**\n     * Format to use for __toString method when type juggling occurs.\n     *\n     * @var string|Closure|null\n     */\n    protected static $toStringFormat;\n\n    /**\n     * Reset the format used to the default when type juggling a Carbon instance to a string\n     *\n     * @return void\n     */\n    public static function resetToStringFormat()\n    {\n        static::setToStringFormat(null);\n    }\n\n    /**\n     * @deprecated To avoid conflict between different third-party libraries, static setters should not be used.\n     *             You should rather let Carbon object being cast to string with DEFAULT_TO_STRING_FORMAT, and\n     *             use other method or custom format passed to format() method if you need to dump another string\n     *             format.\n     *\n     * Set the default format used when type juggling a Carbon instance to a string.\n     *\n     * @param string|Closure|null $format\n     *\n     * @return void\n     */\n    public static function setToStringFormat($format)\n    {\n        static::$toStringFormat = $format;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Units.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\nuse Carbon\\CarbonConverterInterface;\nuse Carbon\\CarbonInterface;\nuse Carbon\\CarbonInterval;\nuse Carbon\\Exceptions\\UnitException;\nuse Closure;\nuse DateInterval;\nuse DateMalformedStringException;\nuse ReturnTypeWillChange;\n\n/**\n * Trait Units.\n *\n * Add, subtract and set units.\n */\ntrait Units\n{\n    /**\n     * Add seconds to the instance using timestamp. Positive $value travels\n     * forward while negative $value travels into the past.\n     *\n     * @param string $unit\n     * @param int    $value\n     *\n     * @return static\n     */\n    public function addRealUnit($unit, $value = 1)\n    {\n        switch ($unit) {\n            // @call addRealUnit\n            case 'micro':\n\n            // @call addRealUnit\n            case 'microsecond':\n                /* @var CarbonInterface $this */\n                $diff = $this->microsecond + $value;\n                $time = $this->getTimestamp();\n                $seconds = (int) floor($diff / static::MICROSECONDS_PER_SECOND);\n                $time += $seconds;\n                $diff -= $seconds * static::MICROSECONDS_PER_SECOND;\n                $microtime = str_pad((string) $diff, 6, '0', STR_PAD_LEFT);\n                $tz = $this->tz;\n\n                return $this->tz('UTC')->modify(\"@$time.$microtime\")->tz($tz);\n\n            // @call addRealUnit\n            case 'milli':\n            // @call addRealUnit\n            case 'millisecond':\n                return $this->addRealUnit('microsecond', $value * static::MICROSECONDS_PER_MILLISECOND);\n\n            // @call addRealUnit\n            case 'second':\n                break;\n\n            // @call addRealUnit\n            case 'minute':\n                $value *= static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'hour':\n                $value *= static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'day':\n                $value *= static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'week':\n                $value *= static::DAYS_PER_WEEK * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'month':\n                $value *= 30 * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'quarter':\n                $value *= static::MONTHS_PER_QUARTER * 30 * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'year':\n                $value *= 365 * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'decade':\n                $value *= static::YEARS_PER_DECADE * 365 * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'century':\n                $value *= static::YEARS_PER_CENTURY * 365 * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            // @call addRealUnit\n            case 'millennium':\n                $value *= static::YEARS_PER_MILLENNIUM * 365 * static::HOURS_PER_DAY * static::MINUTES_PER_HOUR * static::SECONDS_PER_MINUTE;\n\n                break;\n\n            default:\n                if ($this->localStrictModeEnabled ?? static::isStrictModeEnabled()) {\n                    throw new UnitException(\"Invalid unit for real timestamp add/sub: '$unit'\");\n                }\n\n                return $this;\n        }\n\n        /* @var CarbonInterface $this */\n        return $this->setTimestamp((int) ($this->getTimestamp() + $value));\n    }\n\n    public function subRealUnit($unit, $value = 1)\n    {\n        return $this->addRealUnit($unit, -$value);\n    }\n\n    /**\n     * Returns true if a property can be changed via setter.\n     *\n     * @param string $unit\n     *\n     * @return bool\n     */\n    public static function isModifiableUnit($unit)\n    {\n        static $modifiableUnits = [\n            // @call addUnit\n            'millennium',\n            // @call addUnit\n            'century',\n            // @call addUnit\n            'decade',\n            // @call addUnit\n            'quarter',\n            // @call addUnit\n            'week',\n            // @call addUnit\n            'weekday',\n        ];\n\n        return \\in_array($unit, $modifiableUnits, true) || \\in_array($unit, static::$units, true);\n    }\n\n    /**\n     * Call native PHP DateTime/DateTimeImmutable add() method.\n     *\n     * @param DateInterval $interval\n     *\n     * @return static\n     */\n    public function rawAdd(DateInterval $interval)\n    {\n        return parent::add($interval);\n    }\n\n    /**\n     * Add given units or interval to the current instance.\n     *\n     * @example $date->add('hour', 3)\n     * @example $date->add(15, 'days')\n     * @example $date->add(CarbonInterval::days(4))\n     *\n     * @param string|DateInterval|Closure|CarbonConverterInterface $unit\n     * @param int                                                  $value\n     * @param bool|null                                            $overflow\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function add($unit, $value = 1, $overflow = null)\n    {\n        if (\\is_string($unit) && \\func_num_args() === 1) {\n            $unit = CarbonInterval::make($unit, [], true);\n        }\n\n        if ($unit instanceof CarbonConverterInterface) {\n            return $this->resolveCarbon($unit->convertDate($this, false));\n        }\n\n        if ($unit instanceof Closure) {\n            return $this->resolveCarbon($unit($this, false));\n        }\n\n        if ($unit instanceof DateInterval) {\n            return parent::add($unit);\n        }\n\n        if (is_numeric($unit)) {\n            [$value, $unit] = [$unit, $value];\n        }\n\n        return $this->addUnit($unit, $value, $overflow);\n    }\n\n    /**\n     * Add given units to the current instance.\n     *\n     * @param string    $unit\n     * @param int       $value\n     * @param bool|null $overflow\n     *\n     * @return static\n     */\n    public function addUnit($unit, $value = 1, $overflow = null)\n    {\n        $originalArgs = \\func_get_args();\n\n        $date = $this;\n\n        if (!is_numeric($value) || !(float) $value) {\n            return $date->isMutable() ? $date : $date->avoidMutation();\n        }\n\n        $unit = self::singularUnit($unit);\n        $metaUnits = [\n            'millennium' => [static::YEARS_PER_MILLENNIUM, 'year'],\n            'century' => [static::YEARS_PER_CENTURY, 'year'],\n            'decade' => [static::YEARS_PER_DECADE, 'year'],\n            'quarter' => [static::MONTHS_PER_QUARTER, 'month'],\n        ];\n\n        if (isset($metaUnits[$unit])) {\n            [$factor, $unit] = $metaUnits[$unit];\n            $value *= $factor;\n        }\n\n        if ($unit === 'weekday') {\n            $weekendDays = static::getWeekendDays();\n\n            if ($weekendDays !== [static::SATURDAY, static::SUNDAY]) {\n                $absoluteValue = abs($value);\n                $sign = $value / max(1, $absoluteValue);\n                $weekDaysCount = 7 - min(6, \\count(array_unique($weekendDays)));\n                $weeks = floor($absoluteValue / $weekDaysCount);\n\n                for ($diff = $absoluteValue % $weekDaysCount; $diff; $diff--) {\n                    /** @var static $date */\n                    $date = $date->addDays($sign);\n\n                    while (\\in_array($date->dayOfWeek, $weekendDays, true)) {\n                        $date = $date->addDays($sign);\n                    }\n                }\n\n                $value = $weeks * $sign;\n                $unit = 'week';\n            }\n\n            $timeString = $date->toTimeString();\n        } elseif ($canOverflow = (\\in_array($unit, [\n                'month',\n                'year',\n            ]) && ($overflow === false || (\n                $overflow === null &&\n                ($ucUnit = ucfirst($unit).'s') &&\n                !($this->{'local'.$ucUnit.'Overflow'} ?? static::{'shouldOverflow'.$ucUnit}())\n            )))) {\n            $day = $date->day;\n        }\n\n        $value = (int) $value;\n\n        if ($unit === 'milli' || $unit === 'millisecond') {\n            $unit = 'microsecond';\n            $value *= static::MICROSECONDS_PER_MILLISECOND;\n        }\n\n        // Work-around for bug https://bugs.php.net/bug.php?id=75642\n        if ($unit === 'micro' || $unit === 'microsecond') {\n            $microseconds = $this->micro + $value;\n            $second = (int) floor($microseconds / static::MICROSECONDS_PER_SECOND);\n            $microseconds %= static::MICROSECONDS_PER_SECOND;\n            if ($microseconds < 0) {\n                $microseconds += static::MICROSECONDS_PER_SECOND;\n            }\n            $date = $date->microseconds($microseconds);\n            $unit = 'second';\n            $value = $second;\n        }\n\n        try {\n            $date = $date->modify(\"$value $unit\");\n\n            if (isset($timeString)) {\n                $date = $date->setTimeFromTimeString($timeString);\n            } elseif (isset($canOverflow, $day) && $canOverflow && $day !== $date->day) {\n                $date = $date->modify('last day of previous month');\n            }\n        } catch (DateMalformedStringException $ignoredException) { // @codeCoverageIgnore\n            $date = null; // @codeCoverageIgnore\n        }\n\n        if (!$date) {\n            throw new UnitException('Unable to add unit '.var_export($originalArgs, true));\n        }\n\n        return $date;\n    }\n\n    /**\n     * Subtract given units to the current instance.\n     *\n     * @param string    $unit\n     * @param int       $value\n     * @param bool|null $overflow\n     *\n     * @return static\n     */\n    public function subUnit($unit, $value = 1, $overflow = null)\n    {\n        return $this->addUnit($unit, -$value, $overflow);\n    }\n\n    /**\n     * Call native PHP DateTime/DateTimeImmutable sub() method.\n     *\n     * @param DateInterval $interval\n     *\n     * @return static\n     */\n    public function rawSub(DateInterval $interval)\n    {\n        return parent::sub($interval);\n    }\n\n    /**\n     * Subtract given units or interval to the current instance.\n     *\n     * @example $date->sub('hour', 3)\n     * @example $date->sub(15, 'days')\n     * @example $date->sub(CarbonInterval::days(4))\n     *\n     * @param string|DateInterval|Closure|CarbonConverterInterface $unit\n     * @param int                                                  $value\n     * @param bool|null                                            $overflow\n     *\n     * @return static\n     */\n    #[ReturnTypeWillChange]\n    public function sub($unit, $value = 1, $overflow = null)\n    {\n        if (\\is_string($unit) && \\func_num_args() === 1) {\n            $unit = CarbonInterval::make($unit, [], true);\n        }\n\n        if ($unit instanceof CarbonConverterInterface) {\n            return $this->resolveCarbon($unit->convertDate($this, true));\n        }\n\n        if ($unit instanceof Closure) {\n            return $this->resolveCarbon($unit($this, true));\n        }\n\n        if ($unit instanceof DateInterval) {\n            return parent::sub($unit);\n        }\n\n        if (is_numeric($unit)) {\n            [$value, $unit] = [$unit, $value];\n        }\n\n        return $this->addUnit($unit, -(float) $value, $overflow);\n    }\n\n    /**\n     * Subtract given units or interval to the current instance.\n     *\n     * @see sub()\n     *\n     * @param string|DateInterval $unit\n     * @param int                 $value\n     * @param bool|null           $overflow\n     *\n     * @return static\n     */\n    public function subtract($unit, $value = 1, $overflow = null)\n    {\n        if (\\is_string($unit) && \\func_num_args() === 1) {\n            $unit = CarbonInterval::make($unit, [], true);\n        }\n\n        return $this->sub($unit, $value, $overflow);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Traits/Week.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon\\Traits;\n\n/**\n * Trait Week.\n *\n * week and ISO week number, year and count in year.\n *\n * Depends on the following properties:\n *\n * @property int $daysInYear\n * @property int $dayOfWeek\n * @property int $dayOfYear\n * @property int $year\n *\n * Depends on the following methods:\n *\n * @method static addWeeks(int $weeks = 1)\n * @method static copy()\n * @method static dayOfYear(int $dayOfYear)\n * @method string getTranslationMessage(string $key, ?string $locale = null, ?string $default = null, $translator = null)\n * @method static next(int|string $day = null)\n * @method static startOfWeek(int $day = 1)\n * @method static subWeeks(int $weeks = 1)\n * @method static year(int $year = null)\n */\ntrait Week\n{\n    /**\n     * Set/get the week number of year using given first day of week and first\n     * day of year included in the first week. Or use ISO format if no settings\n     * given.\n     *\n     * @param int|null $year      if null, act as a getter, if not null, set the year and return current instance.\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int|static\n     */\n    public function isoWeekYear($year = null, $dayOfWeek = null, $dayOfYear = null)\n    {\n        return $this->weekYear(\n            $year,\n            $dayOfWeek ?? 1,\n            $dayOfYear ?? 4\n        );\n    }\n\n    /**\n     * Set/get the week number of year using given first day of week and first\n     * day of year included in the first week. Or use US format if no settings\n     * given (Sunday / Jan 6).\n     *\n     * @param int|null $year      if null, act as a getter, if not null, set the year and return current instance.\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int|static\n     */\n    public function weekYear($year = null, $dayOfWeek = null, $dayOfYear = null)\n    {\n        $dayOfWeek = $dayOfWeek ?? $this->getTranslationMessage('first_day_of_week') ?? 0;\n        $dayOfYear = $dayOfYear ?? $this->getTranslationMessage('day_of_first_week_of_year') ?? 1;\n\n        if ($year !== null) {\n            $year = (int) round($year);\n\n            if ($this->weekYear(null, $dayOfWeek, $dayOfYear) === $year) {\n                return $this->avoidMutation();\n            }\n\n            $week = $this->week(null, $dayOfWeek, $dayOfYear);\n            $day = $this->dayOfWeek;\n            $date = $this->year($year);\n            switch ($date->weekYear(null, $dayOfWeek, $dayOfYear) - $year) {\n                case 1:\n                    $date = $date->subWeeks(26);\n\n                    break;\n                case -1:\n                    $date = $date->addWeeks(26);\n\n                    break;\n            }\n\n            $date = $date->addWeeks($week - $date->week(null, $dayOfWeek, $dayOfYear))->startOfWeek($dayOfWeek);\n\n            if ($date->dayOfWeek === $day) {\n                return $date;\n            }\n\n            return $date->next($day);\n        }\n\n        $year = $this->year;\n        $day = $this->dayOfYear;\n        $date = $this->avoidMutation()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek);\n\n        if ($date->year === $year && $day < $date->dayOfYear) {\n            return $year - 1;\n        }\n\n        $date = $this->avoidMutation()->addYear()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek);\n\n        if ($date->year === $year && $day >= $date->dayOfYear) {\n            return $year + 1;\n        }\n\n        return $year;\n    }\n\n    /**\n     * Get the number of weeks of the current week-year using given first day of week and first\n     * day of year included in the first week. Or use ISO format if no settings\n     * given.\n     *\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int\n     */\n    public function isoWeeksInYear($dayOfWeek = null, $dayOfYear = null)\n    {\n        return $this->weeksInYear(\n            $dayOfWeek ?? 1,\n            $dayOfYear ?? 4\n        );\n    }\n\n    /**\n     * Get the number of weeks of the current week-year using given first day of week and first\n     * day of year included in the first week. Or use US format if no settings\n     * given (Sunday / Jan 6).\n     *\n     * @param int|null $dayOfWeek first date of week from 0 (Sunday) to 6 (Saturday)\n     * @param int|null $dayOfYear first day of year included in the week #1\n     *\n     * @return int\n     */\n    public function weeksInYear($dayOfWeek = null, $dayOfYear = null)\n    {\n        $dayOfWeek = $dayOfWeek ?? $this->getTranslationMessage('first_day_of_week') ?? 0;\n        $dayOfYear = $dayOfYear ?? $this->getTranslationMessage('day_of_first_week_of_year') ?? 1;\n        $year = $this->year;\n        $start = $this->avoidMutation()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek);\n        $startDay = $start->dayOfYear;\n        if ($start->year !== $year) {\n            $startDay -= $start->daysInYear;\n        }\n        $end = $this->avoidMutation()->addYear()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek);\n        $endDay = $end->dayOfYear;\n        if ($end->year !== $year) {\n            $endDay += $this->daysInYear;\n        }\n\n        return (int) round(($endDay - $startDay) / 7);\n    }\n\n    /**\n     * Get/set the week number using given first day of week and first\n     * day of year included in the first week. Or use US format if no settings\n     * given (Sunday / Jan 6).\n     *\n     * @param int|null $week\n     * @param int|null $dayOfWeek\n     * @param int|null $dayOfYear\n     *\n     * @return int|static\n     */\n    public function week($week = null, $dayOfWeek = null, $dayOfYear = null)\n    {\n        $date = $this;\n        $dayOfWeek = $dayOfWeek ?? $this->getTranslationMessage('first_day_of_week') ?? 0;\n        $dayOfYear = $dayOfYear ?? $this->getTranslationMessage('day_of_first_week_of_year') ?? 1;\n\n        if ($week !== null) {\n            return $date->addWeeks(round($week) - $this->week(null, $dayOfWeek, $dayOfYear));\n        }\n\n        $start = $date->avoidMutation()->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek);\n        $end = $date->avoidMutation()->startOfWeek($dayOfWeek);\n        if ($start > $end) {\n            $start = $start->subWeeks(26)->dayOfYear($dayOfYear)->startOfWeek($dayOfWeek);\n        }\n        $week = (int) ($start->diffInDays($end) / 7 + 1);\n\n        return $week > $end->weeksInYear($dayOfWeek, $dayOfYear) ? 1 : $week;\n    }\n\n    /**\n     * Get/set the week number using given first day of week and first\n     * day of year included in the first week. Or use ISO format if no settings\n     * given.\n     *\n     * @param int|null $week\n     * @param int|null $dayOfWeek\n     * @param int|null $dayOfYear\n     *\n     * @return int|static\n     */\n    public function isoWeek($week = null, $dayOfWeek = null, $dayOfYear = null)\n    {\n        return $this->week(\n            $week,\n            $dayOfWeek ?? 1,\n            $dayOfYear ?? 4\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/Translator.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse ReflectionMethod;\nuse Symfony\\Component\\Translation;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n$transMethod = new ReflectionMethod(\n    class_exists(TranslatorInterface::class)\n        ? TranslatorInterface::class\n        : Translation\\Translator::class,\n    'trans'\n);\n\nrequire $transMethod->hasReturnType()\n    ? __DIR__.'/../../lazy/Carbon/TranslatorStrongType.php'\n    : __DIR__.'/../../lazy/Carbon/TranslatorWeakType.php';\n\nclass Translator extends LazyTranslator\n{\n    // Proxy dynamically loaded LazyTranslator in a static way\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/TranslatorImmutable.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Carbon\\Exceptions\\ImmutableException;\nuse Symfony\\Component\\Config\\ConfigCacheFactoryInterface;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface;\n\nclass TranslatorImmutable extends Translator\n{\n    /** @var bool */\n    private $constructed = false;\n\n    public function __construct($locale, MessageFormatterInterface $formatter = null, $cacheDir = null, $debug = false)\n    {\n        parent::__construct($locale, $formatter, $cacheDir, $debug);\n        $this->constructed = true;\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    public function setDirectories(array $directories)\n    {\n        $this->disallowMutation(__METHOD__);\n\n        return parent::setDirectories($directories);\n    }\n\n    public function setLocale($locale)\n    {\n        $this->disallowMutation(__METHOD__);\n\n        return parent::setLocale($locale);\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    public function setMessages($locale, $messages)\n    {\n        $this->disallowMutation(__METHOD__);\n\n        return parent::setMessages($locale, $messages);\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    public function setTranslations($messages)\n    {\n        $this->disallowMutation(__METHOD__);\n\n        return parent::setTranslations($messages);\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory): void\n    {\n        $this->disallowMutation(__METHOD__);\n\n        parent::setConfigCacheFactory($configCacheFactory);\n    }\n\n    public function resetMessages($locale = null)\n    {\n        $this->disallowMutation(__METHOD__);\n\n        return parent::resetMessages($locale);\n    }\n\n    /**\n     * @codeCoverageIgnore\n     */\n    public function setFallbackLocales(array $locales)\n    {\n        $this->disallowMutation(__METHOD__);\n\n        parent::setFallbackLocales($locales);\n    }\n\n    private function disallowMutation($method)\n    {\n        if ($this->constructed) {\n            throw new ImmutableException($method.' not allowed on '.static::class);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/nesbot/carbon/src/Carbon/TranslatorStrongTypeInterface.php",
    "content": "<?php\n\n/**\n * This file is part of the Carbon package.\n *\n * (c) Brian Nesbitt <brian@nesbot.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Carbon;\n\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\n\n/**\n * Mark translator using strong type from symfony/translation >= 6.\n */\ninterface TranslatorStrongTypeInterface\n{\n    public function getFromCatalogue(MessageCatalogueInterface $catalogue, string $id, string $domain = 'messages');\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Paragon Initiative Enterprises\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/build-phar.sh",
    "content": "#!/usr/bin/env bash\n\nbasedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )\n\nphp -dphar.readonly=0 \"$basedir/other/build_phar.php\" $*"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/composer.json",
    "content": "{\n  \"name\":         \"paragonie/random_compat\",\n  \"description\":  \"PHP 5.x polyfill for random_bytes() and random_int() from PHP 7\",\n  \"keywords\": [\n    \"csprng\",\n    \"random\",\n    \"polyfill\",\n    \"pseudorandom\"\n  ],\n  \"license\":      \"MIT\",\n  \"type\":         \"library\",\n  \"authors\": [\n    {\n      \"name\":     \"Paragon Initiative Enterprises\",\n      \"email\":    \"security@paragonie.com\",\n      \"homepage\": \"https://paragonie.com\"\n    }\n  ],\n  \"support\": {\n    \"issues\":     \"https://github.com/paragonie/random_compat/issues\",\n    \"email\":      \"info@paragonie.com\",\n    \"source\":     \"https://github.com/paragonie/random_compat\"\n  },\n  \"require\": {\n    \"php\": \">= 7\"\n  },\n  \"require-dev\": {\n    \"vimeo/psalm\": \"^1\",\n    \"phpunit/phpunit\": \"4.*|5.*\"\n  },\n  \"suggest\": {\n    \"ext-libsodium\": \"Provides a modern crypto API that can be used to generate random bytes.\"\n  }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey",
    "content": "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm\npui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p\n+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc",
    "content": "-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v2.0.22 (MingW32)\n\niQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip\nQwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg\n1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW\nNDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA\nNNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV\nJHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74=\n=B6+8\n-----END PGP SIGNATURE-----\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/lib/random.php",
    "content": "<?php\n/**\n * Random_* Compatibility Library\n * for using the new PHP 7 random_* API in PHP 5 projects\n *\n * @version 2.99.99\n * @released 2018-06-06\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n// NOP\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/other/build_phar.php",
    "content": "<?php\n$dist = dirname(__DIR__).'/dist';\nif (!is_dir($dist)) {\n    mkdir($dist, 0755);\n}\nif (file_exists($dist.'/random_compat.phar')) {\n    unlink($dist.'/random_compat.phar');\n}\n$phar = new Phar(\n    $dist.'/random_compat.phar',\n    FilesystemIterator::CURRENT_AS_FILEINFO | \\FilesystemIterator::KEY_AS_FILENAME,\n    'random_compat.phar'\n);\nrename(\n    dirname(__DIR__).'/lib/random.php', \n    dirname(__DIR__).'/lib/index.php'\n);\n$phar->buildFromDirectory(dirname(__DIR__).'/lib');\nrename(\n    dirname(__DIR__).'/lib/index.php', \n    dirname(__DIR__).'/lib/random.php'\n);\n\n/**\n * If we pass an (optional) path to a private key as a second argument, we will\n * sign the Phar with OpenSSL.\n * \n * If you leave this out, it will produce an unsigned .phar!\n */\nif ($argc > 1) {\n    if (!@is_readable($argv[1])) {\n        echo 'Could not read the private key file:', $argv[1], \"\\n\";\n        exit(255);\n    }\n    $pkeyFile = file_get_contents($argv[1]);\n    \n    $private = openssl_get_privatekey($pkeyFile);\n    if ($private !== false) {\n        $pkey = '';\n        openssl_pkey_export($private, $pkey);\n        $phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey);\n        \n        /**\n         * Save the corresponding public key to the file\n         */\n        if (!@is_readable($dist.'/random_compat.phar.pubkey')) {\n            $details = openssl_pkey_get_details($private);\n            file_put_contents(\n                $dist.'/random_compat.phar.pubkey',\n                $details['key']\n            );\n        }\n    } else {\n        echo 'An error occurred reading the private key from OpenSSL.', \"\\n\";\n        exit(255);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/psalm-autoload.php",
    "content": "<?php\n\nrequire_once 'lib/byte_safe_strings.php';\nrequire_once 'lib/cast_to_int.php';\nrequire_once 'lib/error_polyfill.php';\nrequire_once 'other/ide_stubs/libsodium.php';\nrequire_once 'lib/random.php';\n\n$int = random_int(0, 65536);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/paragonie/random_compat/psalm.xml",
    "content": "<?xml version=\"1.0\"?>\n<psalm\n    autoloader=\"psalm-autoload.php\"\n    stopOnFirstError=\"false\"\n    useDocblockTypes=\"true\"\n>\n    <projectFiles>\n        <directory name=\"lib\" />\n    </projectFiles>\n    <issueHandlers>\n        <RedundantConditionGivenDocblockType errorLevel=\"info\" />\n        <UnresolvableInclude errorLevel=\"info\" />\n        <DuplicateClass errorLevel=\"info\" />\n        <InvalidOperand errorLevel=\"info\" />\n        <UndefinedConstant errorLevel=\"info\" />\n        <MissingReturnType errorLevel=\"info\" />\n        <InvalidReturnType errorLevel=\"info\" />\n    </issueHandlers>\n</psalm>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/.github/workflows/main.yml",
    "content": "name: CI\n\non: [push]\n\njobs:\n\n  tests:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        php: [7.2, 7.3, 7.4, 8.0]\n        dependency-version: [prefer-lowest, prefer-stable]\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: ${{ matrix.php }}\n          extensions: mailparse\n          coverage: none\n\n      - name: Install dependencies\n        run: composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest --no-progress\n\n      - name: Execute tests\n        run: vendor/bin/phpunit\n\n  php-cs:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Install dependencies\n        run: composer update --no-progress --ignore-platform-reqs\n\n      - name: Execute phpcs\n        run: vendor/bin/phpcs src tests --standard=psr2\n\n  coverage:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n\n      - name: Setup PHP\n        uses: shivammathur/setup-php@v2\n        with:\n          php-version: 7.4\n          extensions: mailparse\n\n      - name: Install dependencies\n        run: composer update --prefer-dist --no-interaction --no-suggest --no-progress\n\n      - name: Execute code coverage\n        run: |\n          vendor/bin/phpunit --coverage-clover=coverage.xml --whitelist src\n          bash <(curl -s https://codecov.io/bash) -t ${{ secrets.COVERALLS_REPO_TOKEN }}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2016 Vincent Dauce\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/README.md",
    "content": "# php-mime-mail-parser\n\nA fully tested email parser for PHP 7.2+ (mailparse extension wrapper).\n\nIt's the most effective php email parser around in terms of performance, foreign character encoding, attachment handling, and ease of use.\nInternet Message Format RFC [822](https://tools.ietf.org/html/rfc822), [2822](https://tools.ietf.org/html/rfc2822), [5322](https://tools.ietf.org/html/rfc5322).\n\n[![Latest Version](https://img.shields.io/packagist/v/php-mime-mail-parser/php-mime-mail-parser.svg?style=flat-square)](https://github.com/php-mime-mail-parser/php-mime-mail-parser/releases)\n[![Total Downloads](https://img.shields.io/packagist/dt/php-mime-mail-parser/php-mime-mail-parser.svg?style=flat-square)](https://packagist.org/packages/php-mime-mail-parser/php-mime-mail-parser)\n[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE)\n\n## Why?\n\nThis extension can be used to...\n * Parse and read email from Postfix\n * For reading messages (Filename extension: eml)\n * Create webmail \n * Store email information such a subject, HTML body, attachments, and etc. into a database\n\n## Is it reliable?\n\nYes. All known issues have been reproduced, fixed and tested.\n\nWe use GitHub Actions, Codecov, Codacy to help ensure code quality. You can see real-time statistics below:\n\n[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fphp-mime-mail-parser%2Fphp-mime-mail-parser%2Fbadge%3Fref%3Dmaster&style=flat-square)](https://actions-badge.atrox.dev/php-mime-mail-parser/php-mime-mail-parser/goto?ref=master)\n[![Coverage](https://img.shields.io/codecov/c/gh/php-mime-mail-parser/php-mime-mail-parser?style=flat-square)](https://codecov.io/gh/php-mime-mail-parser/php-mime-mail-parser)\n[![Code Quality](https://img.shields.io/codacy/grade/4e0e44fee21147ddbdd18ff976251875?style=flat-square)](https://app.codacy.com/app/php-mime-mail-parser/php-mime-mail-parser)\n\n\n## How do I install it?\n\nThe easiest way is via [Composer](https://getcomposer.org/).\n\nTo install the latest version of PHP MIME Mail Parser, run the command below:\n\n\tcomposer require php-mime-mail-parser/php-mime-mail-parser\n\n## Requirements\n\nThe following versions of PHP are supported:\n\n* PHP 7.2\n* PHP 7.3\n* PHP 7.4\n\nPrevious Versions:\n\n| PHP Compatibility  | Version |\n| ------------- | ------------- |\n| HHVM  | php-mime-mail-parser 2.11.1    |\n| PHP 5.4  | php-mime-mail-parser 2.11.1 |\n| PHP 5.5  | php-mime-mail-parser 2.11.1 |\n| PHP 5.6  | php-mime-mail-parser 3.0.4  |\n| PHP 7.0  | php-mime-mail-parser 3.0.4  |\n| PHP 7.1  | php-mime-mail-parser 5.0.5  |\n\nMake sure you have the mailparse extension (http://php.net/manual/en/book.mailparse.php) properly installed. The command line `php -m | grep mailparse` need to return \"mailparse\".\n\n\n### Install mailparse extension\n\n#### Ubuntu, Debian & derivatives\n```\nsudo apt install php-cli php-mailparse\n```\n\n#### Others platforms\n```\nsudo apt install php-cli php-pear php-dev php-mbstring\npecl install mailparse\n```\n\n#### From source\n\nAAAAMMDD should be `php-config --extension-dir`\n```\ngit clone https://github.com/php/pecl-mail-mailparse.git\ncd pecl-mail-mailparse\nphpize\n./configure\nsed -i 's/#if\\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c\nmake\nsudo mv modules/mailparse.so /usr/lib/php/AAAAMMDD/\necho \"extension=mailparse.so\" | sudo tee /etc/php/7.1/mods-available/mailparse.ini\nsudo phpenmod mailparse\n```\n\n#### Windows\nYou need to download mailparse DLL from http://pecl.php.net/package/mailparse and add the line \"extension=php_mailparse.dll\" to php.ini accordingly.\n\n## How do I use it?\n\n### Loading an email\n\nYou can load an email with 4 differents ways. You only need to use one of the following four.\n\n```php\nrequire_once __DIR__.'/vendor/autoload.php';\n\n$path = 'path/to/email.eml';\n$parser = new PhpMimeMailParser\\Parser();\n\n// 1. Specify a file path (string)\n$parser->setPath($path); \n\n// 2. Specify the raw mime mail text (string)\n$parser->setText(file_get_contents($path));\n\n// 3. Specify a php file resource (stream)\n$parser->setStream(fopen($path, \"r\"));\n\n// 4.  Specify a stream to work with mail server (stream)\n$parser->setStream(fopen(\"php://stdin\", \"r\"));\n```\n\n### Get the metadata of the message\n\nGet the sender and the receiver:\n\n```php\n$rawHeaderTo = $parser->getHeader('to');\n// return \"test\" <test@example.com>, \"test2\" <test2@example.com>\n\n$arrayHeaderTo = $parser->getAddresses('to');\n// return [[\"display\"=>\"test\", \"address\"=>\"test@example.com\", false]]\n\n$rawHeaderFrom = $parser->getHeader('from');\n// return \"test\" <test@example.com>\n\n$arrayHeaderFrom = $parser->getAddresses('from');\n// return [[\"display\"=>\"test\", \"address\"=>\"test@example.com\", \"is_group\"=>false]]\n```\n\nGet the subject:\n\n```php\n$subject = $parser->getHeader('subject');\n```\n\nGet other headers:\n\n```php\n$stringHeaders = $parser->getHeadersRaw();\n// return all headers as a string, no charset conversion\n\n$arrayHeaders = $parser->getHeaders();\n// return all headers as an array, with charset conversion\n```\n\n### Get the body of the message\n\n```php\n$text = $parser->getMessageBody('text');\n// return the text version\n\n$html = $parser->getMessageBody('html');\n// return the html version\n\n$htmlEmbedded = $parser->getMessageBody('htmlEmbedded');\n// return the html version with the embedded contents like images\n\n```\n\n### Get attachments\n\nSave all attachments in a directory\n\n```php\n$parser->saveAttachments('/path/to/save/attachments/');\n// return all attachments saved in the directory (include inline attachments)\n\n$parser->saveAttachments('/path/to/save/attachments/', false);\n// return all attachments saved in the directory (exclude inline attachments)\n\n// Save all attachments with the strategy ATTACHMENT_DUPLICATE_SUFFIX (default)\n$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_SUFFIX);\n// return all attachments saved in the directory: logo.jpg, logo_1.jpg, ..., logo_100.jpg, YY34UFHBJ.jpg\n\n// Save all attachments with the strategy ATTACHMENT_RANDOM_FILENAME\n$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_RANDOM_FILENAME);\n// return all attachments saved in the directory: YY34UFHBJ.jpg and F98DBZ9FZF.jpg\n\n// Save all attachments with the strategy ATTACHMENT_DUPLICATE_THROW\n$parser->saveAttachments('/path/to/save/attachments/', false, Parser::ATTACHMENT_DUPLICATE_THROW);\n// return an exception when there is attachments duplicate.\n\n```\n\nGet all attachments\n\n```php\n$attachments = $parser->getAttachments();\n// return an array of all attachments (include inline attachments)\n\n$attachments = $parser->getAttachments(false);\n// return an array of all attachments (exclude inline attachments)\n```\n\n\nLoop through all the Attachments\n```php\nforeach ($attachments as $attachment) {\n    echo 'Filename : '.$attachment->getFilename().'<br />';\n    // return logo.jpg\n    \n    echo 'Filesize : '.filesize($attach_dir.$attachment->getFilename()).'<br />';\n    // return 1000\n    \n    echo 'Filetype : '.$attachment->getContentType().'<br />';\n    // return image/jpeg\n    \n    echo 'MIME part string : '.$attachment->getMimePartStr().'<br />';\n    // return the whole MIME part of the attachment\n\n    $attachment->save('/path/to/save/myattachment/', Parser::ATTACHMENT_DUPLICATE_SUFFIX);\n    // return the path and the filename saved (same strategy available than saveAttachments)\n}\n```\n\n## Postfix configuration to manage email from a mail server\n\nNext you need to forward emails to this script above. For that I'm using [Postfix](http://www.postfix.org/) like a mail server, you need to configure /etc/postfix/master.cf\n\nAdd this line at the end of the file (specify myhook to send all emails to the script test.php)\n```\nmyhook unix - n n - - pipe\n  \t\t\t\tflags=F user=www-data argv=php -c /etc/php5/apache2/php.ini -f /var/www/test.php ${sender} ${size} ${recipient}\n```\n\nEdit this line (register myhook)\n```\nsmtp      inet  n       -       -       -       -       smtpd\n        \t\t\t-o content_filter=myhook:dummy\n```\n\nThe php script must use the fourth method to work with this configuration.\n\nAnd finally the easiest way is to use my SaaS https://mailcare.io\n\n\n## Can I contribute?\n\nFeel free to contribute!\n\n\tgit clone https://github.com/php-mime-mail-parser/php-mime-mail-parser\n\tcd php-mime-mail-parser\n\tcomposer install\n\t./vendor/bin/phpunit\n\nIf you report an issue, please provide the raw email that triggered it. This helps us reproduce the issue and fix it more quickly.\n\n## License\n\nThe php-mime-mail-parser/php-mime-mail-parser is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/compile_mailparse.sh",
    "content": "#!/bin/sh\n\ngit clone https://github.com/php/pecl-mail-mailparse.git\ncd pecl-mail-mailparse\nphpize\n./configure\nsed -i 's/#if\\s!HAVE_MBSTRING/#ifndef MBFL_MBFILTER_H/' ./mailparse.c\nmake\nsudo mv modules/mailparse.so /home/travis/.phpenv/versions/7.3.2/lib/php/extensions/no-debug-zts-20180731/\necho 'extension=mailparse.so' >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/composer.json",
    "content": "{\n    \"name\": \"php-mime-mail-parser/php-mime-mail-parser\",\n    \"type\": \"library\",\n    \"description\": \"A fully tested email parser for PHP 7.2+ (mailparse extension wrapper).\",\n    \"keywords\": [\"mime\", \"mail\", \"mailparse\", \"MimeMailParser\", \"parser\", \"php\"],\n    \"homepage\": \"https://github.com/php-mime-mail-parser/php-mime-mail-parser\",\n    \"license\": \"MIT\",\n    \"authors\": [      \n        {\n            \"name\":\"eXorus\",\n            \"email\":\"exorus.spam@gmail.com\",\n            \"homepage\":\"https://github.com/eXorus/\",\n            \"role\":\"Developer\"\n        },\n        {\n            \"name\":\"M.Valinskis\",\n            \"email\":\"M.Valins@gmail.com\",\n            \"homepage\":\"https://code.google.com/p/php-mime-mail-parser\",\n            \"role\":\"Developer\"\n        },\n        {\n            \"name\":\"eugene.emmett.wood\",\n            \"email\":\"gene_w@cementhorizon.com\",\n            \"homepage\":\"https://code.google.com/p/php-mime-mail-parser\",\n            \"role\":\"Developer\"\n        },\n        {\n            \"name\":\"alknetso\",\n            \"email\":\"alkne@gmail.com\",\n            \"homepage\":\"https://code.google.com/p/php-mime-mail-parser\",\n            \"role\":\"Developer\"\n        },\n        {\n            \"name\":\"bucabay\",\n            \"email\":\"gabe@fijiwebdesign.com\",\n            \"homepage\":\"http://www.fijiwebdesign.com\",\n            \"role\":\"Developer\"\n        }\n    ],\n    \"repository\":{\n        \"type\":\"git\",\n        \"url\":\"https://github.com/php-mime-mail-parser/php-mime-mail-parser.git\"\n    },\n    \"require\": {\n        \"php\":           \"^7.2|^8.0\",\n        \"ext-mailparse\": \"*\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\":              \"^8.0\",\n        \"php-coveralls/php-coveralls\":  \"^2.2\",\n        \"squizlabs/php_codesniffer\":    \"^3.5\"\n    },\n    \"replace\": {\n        \"exorus/php-mime-mail-parser\":   \"*\",\n        \"messaged/php-mime-mail-parser\": \"*\"\n    },\n    \"autoload\": {\n        \"psr-4\": { \"PhpMimeMailParser\\\\\": \"src/\" }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/mailparse-stubs.php",
    "content": "<?php\n/**\n * @link http://php.net/manual/en/mailparse.constants.php\n */\ndefine('MAILPARSE_EXTRACT_OUTPUT', 0);\n\n/**\n * @link http://php.net/manual/en/mailparse.constants.php\n */\ndefine('MAILPARSE_EXTRACT_STREAM', 1);\n\n/**\n * @link http://php.net/manual/en/mailparse.constants.php\n */\ndefine('MAILPARSE_EXTRACT_RETURN', 2);\n\n/**\n * Parses a file. This is the optimal way of parsing a mail file that you have on\n * disk.\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-parse-file.php\n *\n * @param string $filename Path to the file holding the message. The file is opened\n *                         and streamed through the parser\n *\n * @return resource Returns a MIME resource representing the structure, or false on error\n */\nfunction mailparse_msg_parse_file($filename)\n{\n}\n\n/**\n * .\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-get-part.php\n *\n * @param resource $mimemail A valid MIME resource\n * @param string   $mimesection\n *\n * @return resource\n */\nfunction mailparse_msg_get_part($mimemail, $mimesection)\n{\n}\n\n/**\n * .\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-get-structure.php\n *\n * @param resource $mimemail A valid MIME resource\n *\n * @return array\n */\nfunction mailparse_msg_get_structure($mimemail)\n{\n}\n\n/**\n * .\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-get-part-data.php\n *\n * @param resource $mimemail A valid MIME resource\n *\n * @return array\n */\nfunction mailparse_msg_get_part_data($mimemail)\n{\n}\n\n/**\n * .\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-extract-part.php\n *\n * @param resource $mimemail A valid MIME resource\n * @param string   $msgbody\n * @param callable $callbackfunc\n *\n * @return void\n */\nfunction mailparse_msg_extract_part($mimemail, $msgbody, $callbackfunc)\n{\n}\n\n/**\n * Extracts/decodes a message section from the supplied filename.\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-extract-part-file.php\n *\n * @param resource $mimemail     A valid MIME resource, created with\n *                               mailparse_msg_create\n * @param mixed    $filename     Can be a file name or a valid stream resource\n * @param callable $callbackfunc If set, this must be either a valid callback that\n *                               will be passed the extracted section, or null to make this function return the\n *                               extracted section\n *\n * @return string If $callbackfunc is not null returns true on success\n */\nfunction mailparse_msg_extract_part_file($mimemail, $filename, $callbackfunc = false)\n{\n}\n\n/**\n * .\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-extract-whole-part-file.php\n *\n * @param resource $mimemail A valid MIME resource\n * @param string   $filename\n * @param callable $callbackfunc\n *\n * @return string\n */\nfunction mailparse_msg_extract_whole_part_file($mimemail, $filename, $callbackfunc)\n{\n}\n\n/**\n * Create a MIME mail resource.\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-create.php\n * @return resource Returns a handle that can be used to parse a message\n */\nfunction mailparse_msg_create()\n{\n}\n\n/**\n * Frees a MIME resource.\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-free.php\n *\n * @param resource $mimemail A valid MIME resource allocated by\n *                           mailparse_msg_create or mailparse_msg_parse_file\n *\n * @return boolean|null\n */\nfunction mailparse_msg_free($mimemail)\n{\n}\n\n/**\n * Incrementally parse data into the supplied mime mail resource.\n *\n * @link http://php.net/manual/en/functions.mailparse-msg-parse.php\n *\n * @param resource $mimemail A valid MIME resource\n * @param string   $data\n *\n * @return boolean|null\n */\nfunction mailparse_msg_parse($mimemail, $data)\n{\n}\n\n/**\n * Parses a RFC 822 compliant recipient list, such as that found in the To: header.\n *\n * @link http://php.net/manual/en/functions.mailparse-rfc822-parse-addresses.php\n *\n * @param string $addresses A string containing addresses, like in: Wez Furlong\n *                          wez@example.com, doe@example.com\n *\n * @return array Returns an array of associative arrays with the following keys for each\n *         recipient: display The recipient name, for display purpose. If this part is not\n *         set for a recipient, this key will hold the same value as address. address The\n *         email address is_group true if the recipient is a newsgroup, false otherwise\n */\nfunction mailparse_rfc822_parse_addresses($addresses)\n{\n}\n\n/**\n * Figures out the best way of encoding the content read from the given file\n * pointer.\n *\n * @link http://php.net/manual/en/functions.mailparse-determine-best-xfer-encoding.php\n *\n * @param resource $fp A valid file pointer, which must be seek-able\n *\n * @return string Returns one of the character encodings supported by the mbstring module\n */\nfunction mailparse_determine_best_xfer_encoding($fp)\n{\n}\n\n/**\n * Streams data from the source file pointer, apply $encoding and write to the\n * destination file pointer.\n *\n * @link http://php.net/manual/en/functions.mailparse-stream-encode.php\n *\n * @param resource $sourcefp A valid file handle. The file is streamed through the\n *                           parser\n * @param resource $destfp   The destination file handle in which the encoded data\n *                           will be written\n * @param string   $encoding One of the character encodings supported by the mbstring\n *                           module\n *\n * @return boolean|null\n */\nfunction mailparse_stream_encode($sourcefp, $destfp, $encoding)\n{\n}\n\n/**\n * Scans the data from the given file pointer and extract each embedded uuencoded\n * file into a temporary file.\n *\n * @link http://php.net/manual/en/functions.mailparse-uudecode-all.php\n *\n * @param resource $fp A valid file pointer\n *\n * @return array Returns an array of associative arrays listing filename information.\n *         filename Path to the temporary file name created origfilename The original\n *         filename, for uuencoded parts only The first filename entry is the message body.\n *         The next entries are the decoded uuencoded files\n */\nfunction mailparse_uudecode_all($fp)\n{\n}\n\n/**\n * @return\n */\nfunction mailparse_test()\n{\n}\n\nclass mimemessage\n{\n    /**\n     * @return\n     */\n    public function mimemessage()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function get_child()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function get_child_count()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function get_parent()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function extract_headers()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function extract_body()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function enum_uue()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function extract_uue()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function remove()\n    {\n    }\n\n    /**\n     * @return\n     */\n    public function add_child()\n    {\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/phpunit.xml.dist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit colors=\"true\" bootstrap=\"vendor/autoload.php\">\n    <testsuite name=\"eXorus PhpMimeMailParser Test Suite\">\n        <directory suffix=\"Test.php\">tests</directory>\n    </testsuite>\n</phpunit>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Attachment.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser;\n\nuse function var_dump;\n\n/**\n * Attachment of php-mime-mail-parser\n *\n * Fully Tested Mailparse Extension Wrapper for PHP 5.4+\n *\n */\nclass Attachment\n{\n    /**\n     * @var string $filename Filename\n     */\n    protected $filename;\n\n    /**\n     * @var string $contentType Mime Type\n     */\n    protected $contentType;\n\n    /**\n     * @var string $content File Content\n     */\n    protected $content;\n\n    /**\n     * @var string $contentDisposition Content-Disposition (attachment or inline)\n     */\n    protected $contentDisposition;\n\n    /**\n     * @var string $contentId Content-ID\n     */\n    protected $contentId;\n\n    /**\n     * @var array $headers An Array of the attachment headers\n     */\n    protected $headers;\n\n    /**\n     * @var resource $stream\n     */\n    protected $stream;\n\n    /**\n     * @var string $mimePartStr\n     */\n    protected $mimePartStr;\n\n    /**\n     * @var integer $maxDuplicateNumber\n     */\n    public $maxDuplicateNumber = 100;\n\n    /**\n     * Attachment constructor.\n     *\n     * @param string   $filename\n     * @param string   $contentType\n     * @param resource $stream\n     * @param string   $contentDisposition\n     * @param string   $contentId\n     * @param array    $headers\n     * @param string   $mimePartStr\n     */\n    public function __construct(\n        $filename,\n        $contentType,\n        $stream,\n        $contentDisposition = 'attachment',\n        $contentId = '',\n        $headers = [],\n        $mimePartStr = ''\n    ) {\n        $this->filename = $filename;\n        $this->contentType = $contentType;\n        $this->stream = $stream;\n        $this->content = null;\n        $this->contentDisposition = $contentDisposition;\n        $this->contentId = $contentId;\n        $this->headers = $headers;\n        $this->mimePartStr = $mimePartStr;\n    }\n\n    /**\n     * retrieve the attachment filename\n     *\n     * @return string\n     */\n    public function getFilename()\n    {\n        return $this->filename;\n    }\n\n    /**\n     * Retrieve the Attachment Content-Type\n     *\n     * @return string\n     */\n    public function getContentType()\n    {\n        return $this->contentType;\n    }\n\n    /**\n     * Retrieve the Attachment Content-Disposition\n     *\n     * @return string\n     */\n    public function getContentDisposition()\n    {\n        return $this->contentDisposition;\n    }\n\n    /**\n     * Retrieve the Attachment Content-ID\n     *\n     * @return string\n     */\n    public function getContentID()\n    {\n        return $this->contentId;\n    }\n\n    /**\n     * Retrieve the Attachment Headers\n     *\n     * @return array\n     */\n    public function getHeaders()\n    {\n        return $this->headers;\n    }\n\n    /**\n     * Get a handle to the stream\n     *\n     * @return resource\n     */\n    public function getStream()\n    {\n        return $this->stream;\n    }\n\n    /**\n     * Rename a file if it already exists at its destination.\n     * Renaming is done by adding a duplicate number to the file name. E.g. existingFileName_1.ext.\n     * After a max duplicate number, renaming the file will switch over to generating a random suffix.\n     *\n     * @param string $fileName  Complete path to the file.\n     * @return string           The suffixed file name.\n     */\n    protected function suffixFileName(string $fileName): string\n    {\n        $pathInfo = pathinfo($fileName);\n        $dirname = $pathInfo['dirname'].DIRECTORY_SEPARATOR;\n        $filename = $pathInfo['filename'];\n        $extension  = empty($pathInfo['extension']) ? '' : '.'.$pathInfo['extension'];\n\n        $i = 0;\n        do {\n            $i++;\n\n            if ($i > $this->maxDuplicateNumber) {\n                $duplicateExtension = uniqid();\n            } else {\n                $duplicateExtension = $i;\n            }\n\n            $resultName = $dirname.$filename.\"_$duplicateExtension\".$extension;\n        } while (file_exists($resultName));\n\n        return $resultName;\n    }\n\n    /**\n     * Read the contents a few bytes at a time until completed\n     * Once read to completion, it always returns false\n     *\n     * @param int $bytes (default: 2082)\n     *\n     * @return string|bool\n     */\n    public function read($bytes = 2082)\n    {\n        return feof($this->stream) ? false : fread($this->stream, $bytes);\n    }\n\n    /**\n     * Retrieve the file content in one go\n     * Once you retrieve the content you cannot use MimeMailParser_attachment::read()\n     *\n     * @return string\n     */\n    public function getContent()\n    {\n        if ($this->content === null) {\n            fseek($this->stream, 0);\n            while (($buf = $this->read()) !== false) {\n                $this->content .= $buf;\n            }\n        }\n\n        return $this->content;\n    }\n\n    /**\n     * Get mime part string for this attachment\n     *\n     * @return string\n     */\n    public function getMimePartStr()\n    {\n        return $this->mimePartStr;\n    }\n\n    /**\n     * Save the attachment individually\n     *\n     * @param string $attach_dir\n     * @param string $filenameStrategy\n     *\n     * @return string\n     */\n    public function save(\n        $attach_dir,\n        $filenameStrategy = Parser::ATTACHMENT_DUPLICATE_SUFFIX\n    ) {\n        $attach_dir = rtrim($attach_dir, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR;\n        if (!is_dir($attach_dir)) {\n            mkdir($attach_dir);\n        }\n\n        // Determine filename\n        switch ($filenameStrategy) {\n            case Parser::ATTACHMENT_RANDOM_FILENAME:\n                $fileInfo = pathinfo($this->getFilename());\n                $extension  = empty($fileInfo['extension']) ? '' : '.'.$fileInfo['extension'];\n                $attachment_path = $attach_dir.uniqid().$extension;\n                break;\n            case Parser::ATTACHMENT_DUPLICATE_THROW:\n            case Parser::ATTACHMENT_DUPLICATE_SUFFIX:\n                $attachment_path = $attach_dir.$this->getFilename();\n                break;\n            default:\n                throw new Exception('Invalid filename strategy argument provided.');\n        }\n\n        // Handle duplicate filename\n        if (file_exists($attachment_path)) {\n            switch ($filenameStrategy) {\n                case Parser::ATTACHMENT_DUPLICATE_THROW:\n                    throw new Exception('Could not create file for attachment: duplicate filename.');\n                case Parser::ATTACHMENT_DUPLICATE_SUFFIX:\n                    $attachment_path = $this->suffixFileName($attachment_path);\n                    break;\n            }\n        }\n\n        /** @var resource $fp */\n        if ($fp = fopen($attachment_path, 'w')) {\n            while ($bytes = $this->read()) {\n                fwrite($fp, $bytes);\n            }\n            fclose($fp);\n            return realpath($attachment_path);\n        } else {\n            throw new Exception('Could not write attachments. Your directory may be unwritable by PHP.');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Charset.php",
    "content": "<?php namespace PhpMimeMailParser;\n\nuse PhpMimeMailParser\\Contracts\\CharsetManager;\n\nclass Charset implements CharsetManager\n{\n    /**\n     * Charset Aliases\n     */\n    private $charsetAlias = [\n        'ascii'                    => 'us-ascii',\n        'us-ascii'                 => 'us-ascii',\n        'ansi_x3.4-1968'           => 'us-ascii',\n        '646'                      => 'us-ascii',\n        'iso-8859-1'               => 'iso-8859-1',\n        'iso-8859-2'               => 'iso-8859-2',\n        'iso-8859-3'               => 'iso-8859-3',\n        'iso-8859-4'               => 'iso-8859-4',\n        'iso-8859-5'               => 'iso-8859-5',\n        'iso-8859-6'               => 'iso-8859-6',\n        'iso-8859-6-i'             => 'iso-8859-6-i',\n        'iso-8859-6-e'             => 'iso-8859-6-e',\n        'iso-8859-7'               => 'iso-8859-7',\n        'iso-8859-8'               => 'iso-8859-8',\n        'iso-8859-8-i'             => 'iso-8859-8',\n        'iso-8859-8-e'             => 'iso-8859-8-e',\n        'iso-8859-9'               => 'iso-8859-9',\n        'iso-8859-10'              => 'iso-8859-10',\n        'iso-8859-11'              => 'iso-8859-11',\n        'iso-8859-13'              => 'iso-8859-13',\n        'iso-8859-14'              => 'iso-8859-14',\n        'iso-8859-15'              => 'iso-8859-15',\n        'iso-8859-16'              => 'iso-8859-16',\n        'iso-ir-111'               => 'iso-ir-111',\n        'iso-2022-cn'              => 'iso-2022-cn',\n        'iso-2022-cn-ext'          => 'iso-2022-cn',\n        'iso-2022-kr'              => 'iso-2022-kr',\n        'iso-2022-jp'              => 'iso-2022-jp',\n        'utf-16be'                 => 'utf-16be',\n        'utf-16le'                 => 'utf-16le',\n        'utf-16'                   => 'utf-16',\n        'windows-1250'             => 'windows-1250',\n        'windows-1251'             => 'windows-1251',\n        'windows-1252'             => 'windows-1252',\n        'windows-1253'             => 'windows-1253',\n        'windows-1254'             => 'windows-1254',\n        'windows-1255'             => 'windows-1255',\n        'windows-1256'             => 'windows-1256',\n        'windows-1257'             => 'windows-1257',\n        'windows-1258'             => 'windows-1258',\n        'ibm866'                   => 'ibm866',\n        'ibm850'                   => 'ibm850',\n        'ibm852'                   => 'ibm852',\n        'ibm855'                   => 'ibm855',\n        'ibm857'                   => 'ibm857',\n        'ibm862'                   => 'ibm862',\n        'ibm864'                   => 'ibm864',\n        'utf-8'                    => 'utf-8',\n        'utf-7'                    => 'utf-7',\n        'shift_jis'                => 'shift_jis',\n        'big5'                     => 'big5',\n        'euc-jp'                   => 'euc-jp',\n        'euc-kr'                   => 'euc-kr',\n        'gb2312'                   => 'gb2312',\n        'gb18030'                  => 'gb18030',\n        'viscii'                   => 'viscii',\n        'koi8-r'                   => 'koi8-r',\n        'koi8_r'                   => 'koi8-r',\n        'cskoi8r'                  => 'koi8-r',\n        'koi'                      => 'koi8-r',\n        'koi8'                     => 'koi8-r',\n        'koi8-u'                   => 'koi8-u',\n        'tis-620'                  => 'tis-620',\n        't.61-8bit'                => 't.61-8bit',\n        'hz-gb-2312'               => 'hz-gb-2312',\n        'big5-hkscs'               => 'big5-hkscs',\n        'gbk'                      => 'gbk',\n        'cns11643'                 => 'x-euc-tw',\n        'x-imap4-modified-utf7'    => 'x-imap4-modified-utf7',\n        'x-euc-tw'                 => 'x-euc-tw',\n        'x-mac-ce'                 => 'macce',\n        'x-mac-turkish'            => 'macturkish',\n        'x-mac-greek'              => 'macgreek',\n        'x-mac-icelandic'          => 'macicelandic',\n        'x-mac-croatian'           => 'maccroatian',\n        'x-mac-romanian'           => 'macromanian',\n        'x-mac-cyrillic'           => 'maccyrillic',\n        'x-mac-ukrainian'          => 'macukrainian',\n        'x-mac-hebrew'             => 'machebrew',\n        'x-mac-arabic'             => 'macarabic',\n        'x-mac-farsi'              => 'macfarsi',\n        'x-mac-devanagari'         => 'macdevanagari',\n        'x-mac-gujarati'           => 'macgujarati',\n        'x-mac-gurmukhi'           => 'macgurmukhi',\n        'armscii-8'                => 'armscii-8',\n        'x-viet-tcvn5712'          => 'x-viet-tcvn5712',\n        'x-viet-vps'               => 'x-viet-vps',\n        'iso-10646-ucs-2'          => 'utf-16be',\n        'x-iso-10646-ucs-2-be'     => 'utf-16be',\n        'x-iso-10646-ucs-2-le'     => 'utf-16le',\n        'x-user-defined'           => 'x-user-defined',\n        'x-johab'                  => 'x-johab',\n        'latin1'                   => 'iso-8859-1',\n        'iso_8859-1'               => 'iso-8859-1',\n        'iso8859-1'                => 'iso-8859-1',\n        'iso8859-2'                => 'iso-8859-2',\n        'iso8859-3'                => 'iso-8859-3',\n        'iso8859-4'                => 'iso-8859-4',\n        'iso8859-5'                => 'iso-8859-5',\n        'iso8859-6'                => 'iso-8859-6',\n        'iso8859-7'                => 'iso-8859-7',\n        'iso8859-8'                => 'iso-8859-8',\n        'iso8859-9'                => 'iso-8859-9',\n        'iso8859-10'               => 'iso-8859-10',\n        'iso8859-11'               => 'iso-8859-11',\n        'iso8859-13'               => 'iso-8859-13',\n        'iso8859-14'               => 'iso-8859-14',\n        'iso8859-15'               => 'iso-8859-15',\n        'iso_8859-1:1987'          => 'iso-8859-1',\n        'iso-ir-100'               => 'iso-8859-1',\n        'l1'                       => 'iso-8859-1',\n        'ibm819'                   => 'iso-8859-1',\n        'cp819'                    => 'iso-8859-1',\n        'csisolatin1'              => 'iso-8859-1',\n        'latin2'                   => 'iso-8859-2',\n        'iso_8859-2'               => 'iso-8859-2',\n        'iso_8859-2:1987'          => 'iso-8859-2',\n        'iso-ir-101'               => 'iso-8859-2',\n        'l2'                       => 'iso-8859-2',\n        'csisolatin2'              => 'iso-8859-2',\n        'latin3'                   => 'iso-8859-3',\n        'iso_8859-3'               => 'iso-8859-3',\n        'iso_8859-3:1988'          => 'iso-8859-3',\n        'iso-ir-109'               => 'iso-8859-3',\n        'l3'                       => 'iso-8859-3',\n        'csisolatin3'              => 'iso-8859-3',\n        'latin4'                   => 'iso-8859-4',\n        'iso_8859-4'               => 'iso-8859-4',\n        'iso_8859-4:1988'          => 'iso-8859-4',\n        'iso-ir-110'               => 'iso-8859-4',\n        'l4'                       => 'iso-8859-4',\n        'csisolatin4'              => 'iso-8859-4',\n        'cyrillic'                 => 'iso-8859-5',\n        'iso_8859-5'               => 'iso-8859-5',\n        'iso_8859-5:1988'          => 'iso-8859-5',\n        'iso-ir-144'               => 'iso-8859-5',\n        'csisolatincyrillic'       => 'iso-8859-5',\n        'arabic'                   => 'iso-8859-6',\n        'iso_8859-6'               => 'iso-8859-6',\n        'iso_8859-6:1987'          => 'iso-8859-6',\n        'iso-ir-127'               => 'iso-8859-6',\n        'ecma-114'                 => 'iso-8859-6',\n        'asmo-708'                 => 'iso-8859-6',\n        'csisolatinarabic'         => 'iso-8859-6',\n        'csiso88596i'              => 'iso-8859-6-i',\n        'csiso88596e'              => 'iso-8859-6-e',\n        'greek'                    => 'iso-8859-7',\n        'greek8'                   => 'iso-8859-7',\n        'sun_eu_greek'             => 'iso-8859-7',\n        'iso_8859-7'               => 'iso-8859-7',\n        'iso_8859-7:1987'          => 'iso-8859-7',\n        'iso-ir-126'               => 'iso-8859-7',\n        'elot_928'                 => 'iso-8859-7',\n        'ecma-118'                 => 'iso-8859-7',\n        'csisolatingreek'          => 'iso-8859-7',\n        'hebrew'                   => 'iso-8859-8',\n        'iso_8859-8'               => 'iso-8859-8',\n        'visual'                   => 'iso-8859-8',\n        'iso_8859-8:1988'          => 'iso-8859-8',\n        'iso-ir-138'               => 'iso-8859-8',\n        'csisolatinhebrew'         => 'iso-8859-8',\n        'csiso88598i'              => 'iso-8859-8',\n        'iso-8859-8i'              => 'iso-8859-8',\n        'logical'                  => 'iso-8859-8',\n        'csiso88598e'              => 'iso-8859-8-e',\n        'latin5'                   => 'iso-8859-9',\n        'iso_8859-9'               => 'iso-8859-9',\n        'iso_8859-9:1989'          => 'iso-8859-9',\n        'iso-ir-148'               => 'iso-8859-9',\n        'l5'                       => 'iso-8859-9',\n        'csisolatin5'              => 'iso-8859-9',\n        'unicode-1-1-utf-8'        => 'utf-8',\n        'utf8'                     => 'utf-8',\n        'x-sjis'                   => 'shift_jis',\n        'shift-jis'                => 'shift_jis',\n        'ms_kanji'                 => 'shift_jis',\n        'csshiftjis'               => 'shift_jis',\n        'windows-31j'              => 'shift_jis',\n        'cp932'                    => 'shift_jis',\n        'sjis'                     => 'shift_jis',\n        'cseucpkdfmtjapanese'      => 'euc-jp',\n        'x-euc-jp'                 => 'euc-jp',\n        'csiso2022jp'              => 'iso-2022-jp',\n        'iso-2022-jp-2'            => 'iso-2022-jp',\n        'csiso2022jp2'             => 'iso-2022-jp',\n        'csbig5'                   => 'big5',\n        'cn-big5'                  => 'big5',\n        'x-x-big5'                 => 'big5',\n        'zh_tw-big5'               => 'big5',\n        'cseuckr'                  => 'euc-kr',\n        'ks_c_5601-1987'           => 'euc-kr',\n        'iso-ir-149'               => 'euc-kr',\n        'ks_c_5601-1989'           => 'euc-kr',\n        'ksc_5601'                 => 'euc-kr',\n        'ksc5601'                  => 'euc-kr',\n        'korean'                   => 'euc-kr',\n        'csksc56011987'            => 'euc-kr',\n        '5601'                     => 'euc-kr',\n        'windows-949'              => 'euc-kr',\n        'gb_2312-80'               => 'gb2312',\n        'iso-ir-58'                => 'gb2312',\n        'chinese'                  => 'gb2312',\n        'csiso58gb231280'          => 'gb2312',\n        'csgb2312'                 => 'gb2312',\n        'zh_cn.euc'                => 'gb2312',\n        'gb_2312'                  => 'gb2312',\n        'x-cp1250'                 => 'windows-1250',\n        'x-cp1251'                 => 'windows-1251',\n        'x-cp1252'                 => 'windows-1252',\n        'x-cp1253'                 => 'windows-1253',\n        'x-cp1254'                 => 'windows-1254',\n        'x-cp1255'                 => 'windows-1255',\n        'x-cp1256'                 => 'windows-1256',\n        'x-cp1257'                 => 'windows-1257',\n        'x-cp1258'                 => 'windows-1258',\n        'windows-874'              => 'windows-874',\n        'ibm874'                   => 'windows-874',\n        'dos-874'                  => 'windows-874',\n        'macintosh'                => 'macintosh',\n        'x-mac-roman'              => 'macintosh',\n        'mac'                      => 'macintosh',\n        'csmacintosh'              => 'macintosh',\n        'cp866'                    => 'ibm866',\n        'cp-866'                   => 'ibm866',\n        '866'                      => 'ibm866',\n        'csibm866'                 => 'ibm866',\n        'cp850'                    => 'ibm850',\n        '850'                      => 'ibm850',\n        'csibm850'                 => 'ibm850',\n        'cp852'                    => 'ibm852',\n        '852'                      => 'ibm852',\n        'csibm852'                 => 'ibm852',\n        'cp855'                    => 'ibm855',\n        '855'                      => 'ibm855',\n        'csibm855'                 => 'ibm855',\n        'cp857'                    => 'ibm857',\n        '857'                      => 'ibm857',\n        'csibm857'                 => 'ibm857',\n        'cp862'                    => 'ibm862',\n        '862'                      => 'ibm862',\n        'csibm862'                 => 'ibm862',\n        'cp864'                    => 'ibm864',\n        '864'                      => 'ibm864',\n        'csibm864'                 => 'ibm864',\n        'ibm-864'                  => 'ibm864',\n        't.61'                     => 't.61-8bit',\n        'iso-ir-103'               => 't.61-8bit',\n        'csiso103t618bit'          => 't.61-8bit',\n        'x-unicode-2-0-utf-7'      => 'utf-7',\n        'unicode-2-0-utf-7'        => 'utf-7',\n        'unicode-1-1-utf-7'        => 'utf-7',\n        'csunicode11utf7'          => 'utf-7',\n        'csunicode'                => 'utf-16be',\n        'csunicode11'              => 'utf-16be',\n        'iso-10646-ucs-basic'      => 'utf-16be',\n        'csunicodeascii'           => 'utf-16be',\n        'iso-10646-unicode-latin1' => 'utf-16be',\n        'csunicodelatin1'          => 'utf-16be',\n        'iso-10646'                => 'utf-16be',\n        'iso-10646-j-1'            => 'utf-16be',\n        'latin6'                   => 'iso-8859-10',\n        'iso-ir-157'               => 'iso-8859-10',\n        'l6'                       => 'iso-8859-10',\n        'csisolatin6'              => 'iso-8859-10',\n        'iso_8859-15'              => 'iso-8859-15',\n        'csisolatin9'              => 'iso-8859-15',\n        'l9'                       => 'iso-8859-15',\n        'ecma-cyrillic'            => 'iso-ir-111',\n        'csiso111ecmacyrillic'     => 'iso-ir-111',\n        'csiso2022kr'              => 'iso-2022-kr',\n        'csviscii'                 => 'viscii',\n        'zh_tw-euc'                => 'x-euc-tw',\n        'iso88591'                 => 'iso-8859-1',\n        'iso88592'                 => 'iso-8859-2',\n        'iso88593'                 => 'iso-8859-3',\n        'iso88594'                 => 'iso-8859-4',\n        'iso88595'                 => 'iso-8859-5',\n        'iso88596'                 => 'iso-8859-6',\n        'iso88597'                 => 'iso-8859-7',\n        'iso88598'                 => 'iso-8859-8',\n        'iso88599'                 => 'iso-8859-9',\n        'iso885910'                => 'iso-8859-10',\n        'iso885911'                => 'iso-8859-11',\n        'iso885912'                => 'iso-8859-12',\n        'iso885913'                => 'iso-8859-13',\n        'iso885914'                => 'iso-8859-14',\n        'iso885915'                => 'iso-8859-15',\n        'tis620'                   => 'tis-620',\n        'cp1250'                   => 'windows-1250',\n        'cp1251'                   => 'windows-1251',\n        'cp1252'                   => 'windows-1252',\n        'cp1253'                   => 'windows-1253',\n        'cp1254'                   => 'windows-1254',\n        'cp1255'                   => 'windows-1255',\n        'cp1256'                   => 'windows-1256',\n        'cp1257'                   => 'windows-1257',\n        'cp1258'                   => 'windows-1258',\n        'x-gbk'                    => 'gbk',\n        'windows-936'              => 'gbk',\n        'ansi-1251'                => 'windows-1251',\n    ];\n\n    /**\n     * {@inheritdoc}\n     */\n    public function decodeCharset($encodedString, $charset)\n    {\n        $charset = $this->getCharsetAlias($charset);\n\n        if ($charset == 'utf-8' || $charset == 'us-ascii') {\n            return $encodedString;\n        }\n\n        if (function_exists('mb_convert_encoding')) {\n            if ($charset == 'iso-2022-jp') {\n                return mb_convert_encoding($encodedString, 'utf-8', 'iso-2022-jp-ms');\n            }\n\n            if (array_search($charset, $this->getSupportedEncodings())) {\n                return mb_convert_encoding($encodedString, 'utf-8', $charset);\n            }\n        }\n\n        return iconv($charset, 'utf-8//translit//ignore', $encodedString);\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getCharsetAlias($charset)\n    {\n        $charset = strtolower($charset);\n\n        if (array_key_exists($charset, $this->charsetAlias)) {\n            return $this->charsetAlias[$charset];\n        }\n        \n        return 'us-ascii';\n    }\n\n    private function getSupportedEncodings()\n    {\n        return\n        array_map(\n            'strtolower',\n            array_unique(\n                array_merge(\n                    $enc = mb_list_encodings(),\n                    call_user_func_array(\n                        'array_merge',\n                        array_map(\n                            \"mb_encoding_aliases\",\n                            $enc\n                        )\n                    )\n                )\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/CharsetManager.php",
    "content": "<?php namespace PhpMimeMailParser\\Contracts;\n\ninterface CharsetManager\n{\n\n    /**\n     * Decode the string from Charset\n     *\n     * @param string $encodedString The string in its original encoded state\n     * @param string $charset       The Charset header of the part.\n     *\n     * @return string The decoded string\n     */\n    public function decodeCharset($encodedString, $charset);\n\n    /**\n     * Get charset alias\n     *\n     * @param string $charset .\n     *\n     * @return string The charset alias\n     */\n    public function getCharsetAlias($charset);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Contracts/Middleware.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser\\Contracts;\n\nuse PhpMimeMailParser\\MimePart;\nuse PhpMimeMailParser\\MiddlewareStack;\n\n/**\n * Process Mime parts by either:\n *  processing the part or calling the $next MiddlewareStack\n */\ninterface Middleware\n{\n    /**\n     *  Process a mime part, optionally delegating parsing to the $next MiddlewareStack\n     *\n     * @param MimePart $part\n     * @param MiddlewareStack $next\n     *\n     * @return MimePart\n     */\n    public function parse(MimePart $part, MiddlewareStack $next);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Exception.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser;\n\nclass Exception extends \\RuntimeException\n{\n\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Middleware.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser;\n\n/**\n * Wraps a callable as a Middleware\n */\nclass Middleware implements Contracts\\Middleware\n{\n    protected $parser;\n\n    /**\n     * Create a middleware using a callable $fn\n     *\n     * @param callable $fn\n     */\n    public function __construct(callable $fn)\n    {\n        $this->parser = $fn;\n    }\n\n    /**\n     * Process a mime part, optionally delegating parsing to the $next MiddlewareStack\n     */\n    public function parse(MimePart $part, MiddlewareStack $next)\n    {\n        return call_user_func($this->parser, $part, $next);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MiddlewareStack.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser;\n\nuse PhpMimeMailParser\\Contracts\\MiddleWare as MiddleWareContracts;\n\n/**\n * A stack of middleware chained together by (MiddlewareStack $next)\n */\nclass MiddlewareStack\n{\n    /**\n     * Next MiddlewareStack in chain\n     *\n     * @var MiddlewareStack\n     */\n    protected $next;\n\n    /**\n     * Middleware in this MiddlewareStack\n     *\n     * @var Middleware\n     */\n    protected $middleware;\n\n    /**\n     * Construct the first middleware in this MiddlewareStack\n     * The next middleware is chained through $MiddlewareStack->add($Middleware)\n     *\n     * @param Middleware $middleware\n     */\n    public function __construct(MiddleWareContracts $middleware = null)\n    {\n        $this->middleware = $middleware;\n    }\n\n    /**\n     * Creates a chained middleware in MiddlewareStack\n     *\n     * @param Middleware $middleware\n     * @return MiddlewareStack Immutable MiddlewareStack\n     */\n    public function add(MiddleWareContracts $middleware)\n    {\n        $stack = new static($middleware);\n        $stack->next = $this;\n        return $stack;\n    }\n\n    /**\n     * Parses the MimePart by passing it through the Middleware\n     * @param MimePart $part\n     * @return MimePart\n     */\n    public function parse(MimePart $part)\n    {\n        if (!$this->middleware) {\n            return $part;\n        }\n        $part = call_user_func(array($this->middleware, 'parse'), $part, $this->next);\n        return $part;\n    }\n\n    /**\n     * Creates a MiddlewareStack based on an array of middleware\n     *\n     * @param Middleware[] $middlewares\n     * @return MiddlewareStack\n     */\n    public static function factory(array $middlewares = array())\n    {\n        $stack = new static;\n        foreach ($middlewares as $middleware) {\n            $stack = $stack->add($middleware);\n        }\n        return $stack;\n    }\n\n    /**\n     * Allow calling MiddlewareStack instance directly to invoke parse()\n     *\n     * @param MimePart $part\n     * @return MimePart\n     */\n    public function __invoke(MimePart $part)\n    {\n        return $this->parse($part);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/MimePart.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser;\n\n/**\n * Mime Part\n * Represents the results of mailparse_msg_get_part_data()\n *\n * Note ArrayAccess::offsetSet() cannot modify deeply nestated arrays.\n * When modifying use getPart() and setPart() for deep nested data modification\n *\n * @example\n *\n *     $MimePart['headers']['from'] = 'modified@example.com' // fails\n *\n *     // correct\n *     $part = $MimePart->getPart();\n *     $part['headers']['from'] = 'modified@example.com';\n *     $MimePart->setPart($part);\n */\nclass MimePart implements \\ArrayAccess\n{\n    /**\n     * Internal mime part\n     *\n     * @var array\n     */\n    protected $part = array();\n\n    /**\n     * Immutable Part Id\n     *\n     * @var string\n     */\n    private $id;\n\n    /**\n     * Create a mime part\n     *\n     * @param array $part\n     * @param string $id\n     */\n    public function __construct($id, array $part)\n    {\n        $this->part = $part;\n        $this->id = $id;\n    }\n\n    /**\n     * Retrieve the part Id\n     *\n     * @return string\n     */\n    public function getId()\n    {\n        return $this->id;\n    }\n\n    /**\n     * Retrieve the part data\n     *\n     * @return array\n     */\n    public function getPart()\n    {\n        return $this->part;\n    }\n\n    /**\n     * Set the mime part data\n     *\n     * @param array $part\n     * @return void\n     */\n    public function setPart(array $part)\n    {\n        $this->part = $part;\n    }\n\n    /**\n     * ArrayAccess\n     */\n    public function offsetSet($offset, $value)\n    {\n        if (is_null($offset)) {\n            $this->part[] = $value;\n            return;\n        }\n        $this->part[$offset] = $value;\n    }\n\n    /**\n     * ArrayAccess\n     */\n    public function offsetExists($offset)\n    {\n        return isset($this->part[$offset]);\n    }\n\n    /**\n     * ArrayAccess\n     */\n    public function offsetUnset($offset)\n    {\n        unset($this->part[$offset]);\n    }\n\n    /**\n     * ArrayAccess\n     */\n    public function offsetGet($offset)\n    {\n        return isset($this->part[$offset]) ? $this->part[$offset] : null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/php-mime-mail-parser/php-mime-mail-parser/src/Parser.php",
    "content": "<?php\n\nnamespace PhpMimeMailParser;\n\nuse PhpMimeMailParser\\Contracts\\CharsetManager;\n\n/**\n * Parser of php-mime-mail-parser\n *\n * Fully Tested Mailparse Extension Wrapper for PHP 5.4+\n *\n */\nclass Parser\n{\n    /**\n     * Attachment filename argument option for ->saveAttachments().\n     */\n    const ATTACHMENT_DUPLICATE_THROW  = 'DuplicateThrow';\n    const ATTACHMENT_DUPLICATE_SUFFIX = 'DuplicateSuffix';\n    const ATTACHMENT_RANDOM_FILENAME  = 'RandomFilename';\n\n    /**\n     * PHP MimeParser Resource ID\n     *\n     * @var resource $resource\n     */\n    protected $resource;\n\n    /**\n     * A file pointer to email\n     *\n     * @var resource $stream\n     */\n    protected $stream;\n\n    /**\n     * A text of an email\n     *\n     * @var string $data\n     */\n    protected $data;\n\n    /**\n     * Parts of an email\n     *\n     * @var array $parts\n     */\n    protected $parts;\n\n    /**\n     * @var CharsetManager object\n     */\n    protected $charset;\n\n    /**\n     * Valid stream modes for reading\n     *\n     * @var array\n     */\n    protected static $readableModes = [\n        'r', 'r+', 'w+', 'a+', 'x+', 'c+', 'rb', 'r+b', 'w+b', 'a+b',\n        'x+b', 'c+b', 'rt', 'r+t', 'w+t', 'a+t', 'x+t', 'c+t'\n    ];\n\n    /**\n     * Stack of middleware registered to process data\n     *\n     * @var MiddlewareStack\n     */\n    protected $middlewareStack;\n\n    /**\n     * Parser constructor.\n     *\n     * @param CharsetManager|null $charset\n     */\n    public function __construct(CharsetManager $charset = null)\n    {\n        if ($charset == null) {\n            $charset = new Charset();\n        }\n\n        $this->charset = $charset;\n        $this->middlewareStack = new MiddlewareStack();\n    }\n\n    /**\n     * Free the held resources\n     *\n     * @return void\n     */\n    public function __destruct()\n    {\n        // clear the email file resource\n        if (is_resource($this->stream)) {\n            fclose($this->stream);\n        }\n        // clear the MailParse resource\n        if (is_resource($this->resource)) {\n            mailparse_msg_free($this->resource);\n        }\n    }\n\n    /**\n     * Set the file path we use to get the email text\n     *\n     * @param string $path File path to the MIME mail\n     *\n     * @return Parser MimeMailParser Instance\n     */\n    public function setPath($path)\n    {\n        if (is_writable($path)) {\n            $file = fopen($path, 'a+');\n            fseek($file, -1, SEEK_END);\n            if (fread($file, 1) != \"\\n\") {\n                fwrite($file, PHP_EOL);\n            }\n            fclose($file);\n        }\n\n        // should parse message incrementally from file\n        $this->resource = mailparse_msg_parse_file($path);\n        $this->stream = fopen($path, 'r');\n        $this->parse();\n\n        return $this;\n    }\n\n    /**\n     * Set the Stream resource we use to get the email text\n     *\n     * @param resource $stream\n     *\n     * @return Parser MimeMailParser Instance\n     * @throws Exception\n     */\n    public function setStream($stream)\n    {\n        // streams have to be cached to file first\n        $meta = @stream_get_meta_data($stream);\n        if (!$meta || !$meta['mode'] || !in_array($meta['mode'], self::$readableModes, true) || $meta['eof']) {\n            throw new Exception(\n                'setStream() expects parameter stream to be readable stream resource.'\n            );\n        }\n\n        /** @var resource $tmp_fp */\n        $tmp_fp = tmpfile();\n        if ($tmp_fp) {\n            while (!feof($stream)) {\n                fwrite($tmp_fp, fread($stream, 2028));\n            }\n\n            if (fread($tmp_fp, 1) != \"\\n\") {\n                fwrite($tmp_fp, PHP_EOL);\n            }\n\n            fseek($tmp_fp, 0);\n            $this->stream = &$tmp_fp;\n        } else {\n            throw new Exception(\n                'Could not create temporary files for attachments. Your tmp directory may be unwritable by PHP.'\n            );\n        }\n        fclose($stream);\n\n        $this->resource = mailparse_msg_create();\n        // parses the message incrementally (low memory usage but slower)\n        while (!feof($this->stream)) {\n            mailparse_msg_parse($this->resource, fread($this->stream, 2082));\n        }\n        $this->parse();\n\n        return $this;\n    }\n\n    /**\n     * Set the email text\n     *\n     * @param string $data\n     *\n     * @return Parser MimeMailParser Instance\n     */\n    public function setText($data)\n    {\n        if (empty($data)) {\n            throw new Exception('You must not call MimeMailParser::setText with an empty string parameter');\n        }\n\n        if (substr($data, -1) != \"\\n\") {\n            $data = $data.PHP_EOL;\n        }\n\n        $this->resource = mailparse_msg_create();\n        // does not parse incrementally, fast memory hog might explode\n        mailparse_msg_parse($this->resource, $data);\n        $this->data = $data;\n        $this->parse();\n\n        return $this;\n    }\n\n    /**\n     * Parse the Message into parts\n     *\n     * @return void\n     */\n    protected function parse()\n    {\n        $structure = mailparse_msg_get_structure($this->resource);\n        $this->parts = [];\n        foreach ($structure as $part_id) {\n            $part = mailparse_msg_get_part($this->resource, $part_id);\n            $part_data = mailparse_msg_get_part_data($part);\n            $mimePart = new MimePart($part_id, $part_data);\n            // let each middleware parse the part before saving\n            $this->parts[$part_id] = $this->middlewareStack->parse($mimePart)->getPart();\n        }\n    }\n\n    /**\n     * Retrieve a specific Email Header, without charset conversion.\n     *\n     * @param string $name Header name (case-insensitive)\n     *\n     * @return string|bool\n     * @throws Exception\n     */\n    public function getRawHeader($name)\n    {\n        $name = strtolower($name);\n        if (isset($this->parts[1])) {\n            $headers = $this->getPart('headers', $this->parts[1]);\n\n            return isset($headers[$name]) ? $headers[$name] : false;\n        } else {\n            throw new Exception(\n                'setPath() or setText() or setStream() must be called before retrieving email headers.'\n            );\n        }\n    }\n\n    /**\n     * Retrieve a specific Email Header\n     *\n     * @param string $name Header name (case-insensitive)\n     *\n     * @return string|bool\n     */\n    public function getHeader($name)\n    {\n        $rawHeader = $this->getRawHeader($name);\n        if ($rawHeader === false) {\n            return false;\n        }\n\n        return $this->decodeHeader($rawHeader);\n    }\n\n    /**\n     * Retrieve all mail headers\n     *\n     * @return array\n     * @throws Exception\n     */\n    public function getHeaders()\n    {\n        if (isset($this->parts[1])) {\n            $headers = $this->getPart('headers', $this->parts[1]);\n            foreach ($headers as &$value) {\n                if (is_array($value)) {\n                    foreach ($value as &$v) {\n                        $v = $this->decodeSingleHeader($v);\n                    }\n                } else {\n                    $value = $this->decodeSingleHeader($value);\n                }\n            }\n\n            return $headers;\n        } else {\n            throw new Exception(\n                'setPath() or setText() or setStream() must be called before retrieving email headers.'\n            );\n        }\n    }\n\n    /**\n     * Retrieve the raw mail headers as a string\n     *\n     * @return string\n     * @throws Exception\n     */\n    public function getHeadersRaw()\n    {\n        if (isset($this->parts[1])) {\n            return $this->getPartHeader($this->parts[1]);\n        } else {\n            throw new Exception(\n                'setPath() or setText() or setStream() must be called before retrieving email headers.'\n            );\n        }\n    }\n\n    /**\n     * Retrieve the raw Header of a MIME part\n     *\n     * @return String\n     * @param $part Object\n     * @throws Exception\n     */\n    protected function getPartHeader(&$part)\n    {\n        $header = '';\n        if ($this->stream) {\n            $header = $this->getPartHeaderFromFile($part);\n        } elseif ($this->data) {\n            $header = $this->getPartHeaderFromText($part);\n        }\n        return $header;\n    }\n\n    /**\n     * Retrieve the Header from a MIME part from file\n     *\n     * @return String Mime Header Part\n     * @param $part Array\n     */\n    protected function getPartHeaderFromFile(&$part)\n    {\n        $start = $part['starting-pos'];\n        $end = $part['starting-pos-body'];\n        fseek($this->stream, $start, SEEK_SET);\n        $header = fread($this->stream, $end - $start);\n        return $header;\n    }\n\n    /**\n     * Retrieve the Header from a MIME part from text\n     *\n     * @return String Mime Header Part\n     * @param $part Array\n     */\n    protected function getPartHeaderFromText(&$part)\n    {\n        $start = $part['starting-pos'];\n        $end = $part['starting-pos-body'];\n        $header = substr($this->data, $start, $end - $start);\n        return $header;\n    }\n\n    /**\n     * Checks whether a given part ID is a child of another part\n     * eg. an RFC822 attachment may have one or more text parts\n     *\n     * @param string $partId\n     * @param string $parentPartId\n     * @return bool\n     */\n    protected function partIdIsChildOfPart($partId, $parentPartId)\n    {\n        $parentPartId = $parentPartId.'.';\n        return substr($partId, 0, strlen($parentPartId)) == $parentPartId;\n    }\n\n    /**\n     * Whether the given part ID is a child of any attachment part in the message.\n     *\n     * @param string $checkPartId\n     * @return bool\n     */\n    protected function partIdIsChildOfAnAttachment($checkPartId)\n    {\n        foreach ($this->parts as $partId => $part) {\n            if ($this->getPart('content-disposition', $part) == 'attachment') {\n                if ($this->partIdIsChildOfPart($checkPartId, $partId)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    /**\n     * Returns the email message body in the specified format\n     *\n     * @param string $type text, html or htmlEmbedded\n     *\n     * @return string Body\n     * @throws Exception\n     */\n    public function getMessageBody($type = 'text')\n    {\n        $mime_types = [\n            'text'         => 'text/plain',\n            'html'         => 'text/html',\n            'htmlEmbedded' => 'text/html',\n        ];\n\n        if (in_array($type, array_keys($mime_types))) {\n            $part_type = $type === 'htmlEmbedded' ? 'html' : $type;\n            $inline_parts = $this->getInlineParts($part_type);\n            $body = empty($inline_parts) ? '' : $inline_parts[0];\n        } else {\n            throw new Exception(\n                'Invalid type specified for getMessageBody(). Expected: text, html or htmlEmbeded.'\n            );\n        }\n\n        if ($type == 'htmlEmbedded') {\n            $attachments = $this->getAttachments();\n            foreach ($attachments as $attachment) {\n                if ($attachment->getContentID() != '') {\n                    $body = str_replace(\n                        '\"cid:'.$attachment->getContentID().'\"',\n                        '\"'.$this->getEmbeddedData($attachment->getContentID()).'\"',\n                        $body\n                    );\n                }\n            }\n        }\n\n        return $body;\n    }\n\n    /**\n     * Returns the embedded data structure\n     *\n     * @param string $contentId Content-Id\n     *\n     * @return string\n     */\n    protected function getEmbeddedData($contentId)\n    {\n        foreach ($this->parts as $part) {\n            if ($this->getPart('content-id', $part) == $contentId) {\n                $embeddedData = 'data:';\n                $embeddedData .= $this->getPart('content-type', $part);\n                $embeddedData .= ';'.$this->getPart('transfer-encoding', $part);\n                $embeddedData .= ','.$this->getPartBody($part);\n                return $embeddedData;\n            }\n        }\n        return '';\n    }\n\n    /**\n     * Return an array with the following keys display, address, is_group\n     *\n     * @param string $name Header name (case-insensitive)\n     *\n     * @return array\n     */\n    public function getAddresses($name)\n    {\n        $value = $this->getRawHeader($name);\n        $value = (is_array($value)) ? $value[0] : $value;\n        $addresses = mailparse_rfc822_parse_addresses($value);\n        foreach ($addresses as $i => $item) {\n            $addresses[$i]['display'] = $this->decodeHeader($item['display']);\n        }\n        return $addresses;\n    }\n\n    /**\n     * Returns the attachments contents in order of appearance\n     *\n     * @return Attachment[]\n     */\n    public function getInlineParts($type = 'text')\n    {\n        $inline_parts = [];\n        $mime_types = [\n            'text'         => 'text/plain',\n            'html'         => 'text/html',\n        ];\n\n        if (!in_array($type, array_keys($mime_types))) {\n            throw new Exception('Invalid type specified for getInlineParts(). \"type\" can either be text or html.');\n        }\n\n        foreach ($this->parts as $partId => $part) {\n            if ($this->getPart('content-type', $part) == $mime_types[$type]\n                && $this->getPart('content-disposition', $part) != 'attachment'\n                && !$this->partIdIsChildOfAnAttachment($partId)\n            ) {\n                $headers = $this->getPart('headers', $part);\n                $encodingType = array_key_exists('content-transfer-encoding', $headers) ?\n                    $headers['content-transfer-encoding'] : '';\n                $undecoded_body = $this->decodeContentTransfer($this->getPartBody($part), $encodingType);\n                $inline_parts[] = $this->charset->decodeCharset($undecoded_body, $this->getPartCharset($part));\n            }\n        }\n\n        return $inline_parts;\n    }\n\n    /**\n     * Returns the attachments contents in order of appearance\n     *\n     * @return Attachment[]\n     */\n    public function getAttachments($include_inline = true)\n    {\n        $attachments = [];\n        $dispositions = $include_inline ? ['attachment', 'inline'] : ['attachment'];\n        $non_attachment_types = ['text/plain', 'text/html'];\n        $nonameIter = 0;\n\n        foreach ($this->parts as $part) {\n            $disposition = $this->getPart('content-disposition', $part);\n            $filename = 'noname';\n\n            if (isset($part['disposition-filename'])) {\n                $filename = $this->decodeHeader($part['disposition-filename']);\n            } elseif (isset($part['content-name'])) {\n                // if we have no disposition but we have a content-name, it's a valid attachment.\n                // we simulate the presence of an attachment disposition with a disposition filename\n                $filename = $this->decodeHeader($part['content-name']);\n                $disposition = 'attachment';\n            } elseif (in_array($part['content-type'], $non_attachment_types, true)\n                && $disposition !== 'attachment') {\n                // it is a message body, no attachment\n                continue;\n            } elseif (substr($part['content-type'], 0, 10) !== 'multipart/'\n                && $part['content-type'] !== 'text/plain; (error)') {\n                // if we cannot get it by getMessageBody(), we assume it is an attachment\n                $disposition = 'attachment';\n            }\n            if (in_array($disposition, ['attachment', 'inline']) === false && !empty($disposition)) {\n                $disposition = 'attachment';\n            }\n\n            if (in_array($disposition, $dispositions) === true) {\n                if ($filename == 'noname') {\n                    $nonameIter++;\n                    $filename = 'noname'.$nonameIter;\n                } else {\n                    // Escape all potentially unsafe characters from the filename\n                    $filename = preg_replace('((^\\.)|\\/|[\\n|\\r|\\n\\r]|(\\.$))', '_', $filename);\n                }\n\n                $headersAttachments = $this->getPart('headers', $part);\n                $contentidAttachments = $this->getPart('content-id', $part);\n\n                $attachmentStream = $this->getAttachmentStream($part);\n                $mimePartStr = $this->getPartComplete($part);\n\n                $attachments[] = new Attachment(\n                    $filename,\n                    $this->getPart('content-type', $part),\n                    $attachmentStream,\n                    $disposition,\n                    $contentidAttachments,\n                    $headersAttachments,\n                    $mimePartStr\n                );\n            }\n        }\n\n        return $attachments;\n    }\n\n    /**\n     * Save attachments in a folder\n     *\n     * @param string $attach_dir directory\n     * @param bool $include_inline\n     * @param string $filenameStrategy How to generate attachment filenames\n     *\n     * @return array Saved attachments paths\n     * @throws Exception\n     */\n    public function saveAttachments(\n        $attach_dir,\n        $include_inline = true,\n        $filenameStrategy = self::ATTACHMENT_DUPLICATE_SUFFIX\n    ) {\n        $attachments = $this->getAttachments($include_inline);\n\n        $attachments_paths = [];\n        foreach ($attachments as $attachment) {\n            $attachments_paths[] = $attachment->save($attach_dir, $filenameStrategy);\n        }\n\n        return $attachments_paths;\n    }\n\n    /**\n     * Read the attachment Body and save temporary file resource\n     *\n     * @param array $part\n     *\n     * @return resource Mime Body Part\n     * @throws Exception\n     */\n    protected function getAttachmentStream(&$part)\n    {\n        /** @var resource $temp_fp */\n        $temp_fp = tmpfile();\n\n        $headers = $this->getPart('headers', $part);\n        $encodingType = array_key_exists('content-transfer-encoding', $headers) ?\n            $headers['content-transfer-encoding'] : '';\n\n        if ($temp_fp) {\n            if ($this->stream) {\n                $start = $part['starting-pos-body'];\n                $end = $part['ending-pos-body'];\n                fseek($this->stream, $start, SEEK_SET);\n                $len = $end - $start;\n                $written = 0;\n                while ($written < $len) {\n                    $write = $len;\n                    $data = fread($this->stream, $write);\n                    fwrite($temp_fp, $this->decodeContentTransfer($data, $encodingType));\n                    $written += $write;\n                }\n            } elseif ($this->data) {\n                $attachment = $this->decodeContentTransfer($this->getPartBodyFromText($part), $encodingType);\n                fwrite($temp_fp, $attachment, strlen($attachment));\n            }\n            fseek($temp_fp, 0, SEEK_SET);\n        } else {\n            throw new Exception(\n                'Could not create temporary files for attachments. Your tmp directory may be unwritable by PHP.'\n            );\n        }\n\n        return $temp_fp;\n    }\n\n    /**\n     * Decode the string from Content-Transfer-Encoding\n     *\n     * @param string $encodedString The string in its original encoded state\n     * @param string $encodingType  The encoding type from the Content-Transfer-Encoding header of the part.\n     *\n     * @return string The decoded string\n     */\n    protected function decodeContentTransfer($encodedString, $encodingType)\n    {\n        if (is_array($encodingType)) {\n            $encodingType = $encodingType[0];\n        }\n\n        $encodingType = strtolower($encodingType);\n        if ($encodingType == 'base64') {\n            return base64_decode($encodedString);\n        } elseif ($encodingType == 'quoted-printable') {\n            return quoted_printable_decode($encodedString);\n        } else {\n            return $encodedString;\n        }\n    }\n\n    /**\n     * $input can be a string or array\n     *\n     * @param string|array $input\n     *\n     * @return string\n     */\n    protected function decodeHeader($input)\n    {\n        //Sometimes we have 2 label From so we take only the first\n        if (is_array($input)) {\n            return $this->decodeSingleHeader($input[0]);\n        }\n\n        return $this->decodeSingleHeader($input);\n    }\n\n    /**\n     * Decodes a single header (= string)\n     *\n     * @param string $input\n     *\n     * @return string\n     */\n    protected function decodeSingleHeader($input)\n    {\n        // For each encoded-word...\n        while (preg_match('/(=\\?([^?]+)\\?(q|b)\\?([^?]*)\\?=)((\\s+)=\\?)?/i', $input, $matches)) {\n            $encoded = $matches[1];\n            $charset = $matches[2];\n            $encoding = $matches[3];\n            $text = $matches[4];\n            $space = isset($matches[6]) ? $matches[6] : '';\n\n            switch (strtolower($encoding)) {\n                case 'b':\n                    $text = $this->decodeContentTransfer($text, 'base64');\n                    break;\n\n                case 'q':\n                    $text = str_replace('_', ' ', $text);\n                    preg_match_all('/=([a-f0-9]{2})/i', $text, $matches);\n                    foreach ($matches[1] as $value) {\n                        $text = str_replace('='.$value, chr(hexdec($value)), $text);\n                    }\n                    break;\n            }\n\n            $text = $this->charset->decodeCharset($text, $this->charset->getCharsetAlias($charset));\n            $input = str_replace($encoded.$space, $text, $input);\n        }\n\n        return $input;\n    }\n\n    /**\n     * Return the charset of the MIME part\n     *\n     * @param array $part\n     *\n     * @return string\n     */\n    protected function getPartCharset($part)\n    {\n        if (isset($part['charset'])) {\n            return $this->charset->getCharsetAlias($part['charset']);\n        } else {\n            return 'us-ascii';\n        }\n    }\n\n    /**\n     * Retrieve a specified MIME part\n     *\n     * @param string $type\n     * @param array  $parts\n     *\n     * @return string|array\n     */\n    protected function getPart($type, $parts)\n    {\n        return (isset($parts[$type])) ? $parts[$type] : false;\n    }\n\n    /**\n     * Retrieve the Body of a MIME part\n     *\n     * @param array $part\n     *\n     * @return string\n     */\n    protected function getPartBody(&$part)\n    {\n        $body = '';\n        if ($this->stream) {\n            $body = $this->getPartBodyFromFile($part);\n        } elseif ($this->data) {\n            $body = $this->getPartBodyFromText($part);\n        }\n\n        return $body;\n    }\n\n    /**\n     * Retrieve the Body from a MIME part from file\n     *\n     * @param array $part\n     *\n     * @return string Mime Body Part\n     */\n    protected function getPartBodyFromFile(&$part)\n    {\n        $start = $part['starting-pos-body'];\n        $end = $part['ending-pos-body'];\n        $body = '';\n        if ($end - $start > 0) {\n            fseek($this->stream, $start, SEEK_SET);\n            $body = fread($this->stream, $end - $start);\n        }\n\n        return $body;\n    }\n\n    /**\n     * Retrieve the Body from a MIME part from text\n     *\n     * @param array $part\n     *\n     * @return string Mime Body Part\n     */\n    protected function getPartBodyFromText(&$part)\n    {\n        $start = $part['starting-pos-body'];\n        $end = $part['ending-pos-body'];\n\n        return substr($this->data, $start, $end - $start);\n    }\n\n    /**\n     * Retrieve the content of a MIME part\n     *\n     * @param array $part\n     *\n     * @return string\n     */\n    protected function getPartComplete(&$part)\n    {\n        $body = '';\n        if ($this->stream) {\n            $body = $this->getPartFromFile($part);\n        } elseif ($this->data) {\n            $body = $this->getPartFromText($part);\n        }\n\n        return $body;\n    }\n\n    /**\n     * Retrieve the content from a MIME part from file\n     *\n     * @param array $part\n     *\n     * @return string Mime Content\n     */\n    protected function getPartFromFile(&$part)\n    {\n        $start = $part['starting-pos'];\n        $end = $part['ending-pos'];\n        $body = '';\n        if ($end - $start > 0) {\n            fseek($this->stream, $start, SEEK_SET);\n            $body = fread($this->stream, $end - $start);\n        }\n\n        return $body;\n    }\n\n    /**\n     * Retrieve the content from a MIME part from text\n     *\n     * @param array $part\n     *\n     * @return string Mime Content\n     */\n    protected function getPartFromText(&$part)\n    {\n        $start = $part['starting-pos'];\n        $end = $part['ending-pos'];\n\n        return substr($this->data, $start, $end - $start);\n    }\n\n    /**\n     * Retrieve the resource\n     *\n     * @return resource resource\n     */\n    public function getResource()\n    {\n        return $this->resource;\n    }\n\n    /**\n     * Retrieve the file pointer to email\n     *\n     * @return resource stream\n     */\n    public function getStream()\n    {\n        return $this->stream;\n    }\n\n    /**\n     * Retrieve the text of an email\n     *\n     * @return string data\n     */\n    public function getData()\n    {\n        return $this->data;\n    }\n\n    /**\n     * Retrieve the parts of an email\n     *\n     * @return array parts\n     */\n    public function getParts()\n    {\n        return $this->parts;\n    }\n\n    /**\n     * Retrieve the charset manager object\n     *\n     * @return CharsetManager charset\n     */\n    public function getCharset()\n    {\n        return $this->charset;\n    }\n\n    /**\n     * Add a middleware to the parser MiddlewareStack\n     * Each middleware is invoked when:\n     *   a MimePart is retrieved by mailparse_msg_get_part_data() during $this->parse()\n     * The middleware will receive MimePart $part and the next MiddlewareStack $next\n     *\n     * Eg:\n     *\n     * $Parser->addMiddleware(function(MimePart $part, MiddlewareStack $next) {\n     *      // do something with the $part\n     *      return $next($part);\n     * });\n     *\n     * @param callable $middleware Plain Function or Middleware Instance to execute\n     * @return void\n     */\n    public function addMiddleware(callable $middleware)\n    {\n        if (!$middleware instanceof Middleware) {\n            $middleware = new Middleware($middleware);\n        }\n        $this->middlewareStack = $this->middlewareStack->add($middleware);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/COMMITMENT",
    "content": "GPL Cooperation Commitment\nVersion 1.0\n\nBefore filing or continuing to prosecute any legal proceeding or claim\n(other than a Defensive Action) arising from termination of a Covered\nLicense, we commit to extend to the person or entity ('you') accused\nof violating the Covered License the following provisions regarding\ncure and reinstatement, taken from GPL version 3. As used here, the\nterm 'this License' refers to the specific Covered License being\nenforced.\n\n    However, if you cease all violation of this License, then your\n    license from a particular copyright holder is reinstated (a)\n    provisionally, unless and until the copyright holder explicitly\n    and finally terminates your license, and (b) permanently, if the\n    copyright holder fails to notify you of the violation by some\n    reasonable means prior to 60 days after the cessation.\n\n    Moreover, your license from a particular copyright holder is\n    reinstated permanently if the copyright holder notifies you of the\n    violation by some reasonable means, this is the first time you\n    have received notice of violation of this License (for any work)\n    from that copyright holder, and you cure the violation prior to 30\n    days after your receipt of the notice.\n\nWe intend this Commitment to be irrevocable, and binding and\nenforceable against us and assignees of or successors to our\ncopyrights.\n\nDefinitions\n\n'Covered License' means the GNU General Public License, version 2\n(GPLv2), the GNU Lesser General Public License, version 2.1\n(LGPLv2.1), or the GNU Library General Public License, version 2\n(LGPLv2), all as published by the Free Software Foundation.\n\n'Defensive Action' means a legal proceeding or claim that We bring\nagainst you in response to a prior proceeding or claim initiated by\nyou or your affiliate.\n\n'We' means each contributor to this repository as of the date of\ninclusion of this file, including subsidiaries of a corporate\ncontributor.\n\nThis work is available under a Creative Commons Attribution-ShareAlike\n4.0 International license (https://creativecommons.org/licenses/by-sa/4.0/).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/LICENSE",
    "content": "                  GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 2.1, February 1999\n\n Copyright (C) 1991, 1999 Free Software Foundation, Inc.\n 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n[This is the first released version of the Lesser GPL.  It also counts\n as the successor of the GNU Library Public License, version 2, hence\n the version number 2.1.]\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicenses are intended to guarantee your freedom to share and change\nfree software--to make sure the software is free for all its users.\n\n  This license, the Lesser General Public License, applies to some\nspecially designated software packages--typically libraries--of the\nFree Software Foundation and other authors who decide to use it.  You\ncan use it too, but we suggest you first think carefully about whether\nthis license or the ordinary General Public License is the better\nstrategy to use in any particular case, based on the explanations below.\n\n  When we speak of free software, we are referring to freedom of use,\nnot price.  Our General Public Licenses are designed to make sure that\nyou have the freedom to distribute copies of free software (and charge\nfor this service if you wish); that you receive source code or can get\nit if you want it; that you can change the software and use pieces of\nit in new free programs; and that you are informed that you can do\nthese things.\n\n  To protect your rights, we need to make restrictions that forbid\ndistributors to deny you these rights or to ask you to surrender these\nrights.  These restrictions translate to certain responsibilities for\nyou if you distribute copies of the library or if you modify it.\n\n  For example, if you distribute copies of the library, whether gratis\nor for a fee, you must give the recipients all the rights that we gave\nyou.  You must make sure that they, too, receive or can get the source\ncode.  If you link other code with the library, you must provide\ncomplete object files to the recipients, so that they can relink them\nwith the library after making changes to the library and recompiling\nit.  And you must show them these terms so they know their rights.\n\n  We protect your rights with a two-step method: (1) we copyright the\nlibrary, and (2) we offer you this license, which gives you legal\npermission to copy, distribute and/or modify the library.\n\n  To protect each distributor, we want to make it very clear that\nthere is no warranty for the free library.  Also, if the library is\nmodified by someone else and passed on, the recipients should know\nthat what they have is not the original version, so that the original\nauthor's reputation will not be affected by problems that might be\nintroduced by others.\n\f\n  Finally, software patents pose a constant threat to the existence of\nany free program.  We wish to make sure that a company cannot\neffectively restrict the users of a free program by obtaining a\nrestrictive license from a patent holder.  Therefore, we insist that\nany patent license obtained for a version of the library must be\nconsistent with the full freedom of use specified in this license.\n\n  Most GNU software, including some libraries, is covered by the\nordinary GNU General Public License.  This license, the GNU Lesser\nGeneral Public License, applies to certain designated libraries, and\nis quite different from the ordinary General Public License.  We use\nthis license for certain libraries in order to permit linking those\nlibraries into non-free programs.\n\n  When a program is linked with a library, whether statically or using\na shared library, the combination of the two is legally speaking a\ncombined work, a derivative of the original library.  The ordinary\nGeneral Public License therefore permits such linking only if the\nentire combination fits its criteria of freedom.  The Lesser General\nPublic License permits more lax criteria for linking other code with\nthe library.\n\n  We call this license the \"Lesser\" General Public License because it\ndoes Less to protect the user's freedom than the ordinary General\nPublic License.  It also provides other free software developers Less\nof an advantage over competing non-free programs.  These disadvantages\nare the reason we use the ordinary General Public License for many\nlibraries.  However, the Lesser license provides advantages in certain\nspecial circumstances.\n\n  For example, on rare occasions, there may be a special need to\nencourage the widest possible use of a certain library, so that it becomes\na de-facto standard.  To achieve this, non-free programs must be\nallowed to use the library.  A more frequent case is that a free\nlibrary does the same job as widely used non-free libraries.  In this\ncase, there is little to gain by limiting the free library to free\nsoftware only, so we use the Lesser General Public License.\n\n  In other cases, permission to use a particular library in non-free\nprograms enables a greater number of people to use a large body of\nfree software.  For example, permission to use the GNU C Library in\nnon-free programs enables many more people to use the whole GNU\noperating system, as well as its variant, the GNU/Linux operating\nsystem.\n\n  Although the Lesser General Public License is Less protective of the\nusers' freedom, it does ensure that the user of a program that is\nlinked with the Library has the freedom and the wherewithal to run\nthat program using a modified version of the Library.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.  Pay close attention to the difference between a\n\"work based on the library\" and a \"work that uses the library\".  The\nformer contains code derived from the library, whereas the latter must\nbe combined with the library in order to run.\n\f\n                  GNU LESSER GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License Agreement applies to any software library or other\nprogram which contains a notice placed by the copyright holder or\nother authorized party saying it may be distributed under the terms of\nthis Lesser General Public License (also called \"this License\").\nEach licensee is addressed as \"you\".\n\n  A \"library\" means a collection of software functions and/or data\nprepared so as to be conveniently linked with application programs\n(which use some of those functions and data) to form executables.\n\n  The \"Library\", below, refers to any such software library or work\nwhich has been distributed under these terms.  A \"work based on the\nLibrary\" means either the Library or any derivative work under\ncopyright law: that is to say, a work containing the Library or a\nportion of it, either verbatim or with modifications and/or translated\nstraightforwardly into another language.  (Hereinafter, translation is\nincluded without limitation in the term \"modification\".)\n\n  \"Source code\" for a work means the preferred form of the work for\nmaking modifications to it.  For a library, complete source code means\nall the source code for all modules it contains, plus any associated\ninterface definition files, plus the scripts used to control compilation\nand installation of the library.\n\n  Activities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning a program using the Library is not restricted, and output from\nsuch a program is covered only if its contents constitute a work based\non the Library (independent of the use of the Library in a tool for\nwriting it).  Whether that is true depends on what the Library does\nand what the program that uses the Library does.\n\n  1. You may copy and distribute verbatim copies of the Library's\ncomplete source code as you receive it, in any medium, provided that\nyou conspicuously and appropriately publish on each copy an\nappropriate copyright notice and disclaimer of warranty; keep intact\nall the notices that refer to this License and to the absence of any\nwarranty; and distribute a copy of this License along with the\nLibrary.\n\n  You may charge a fee for the physical act of transferring a copy,\nand you may at your option offer warranty protection in exchange for a\nfee.\n\f\n  2. You may modify your copy or copies of the Library or any portion\nof it, thus forming a work based on the Library, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) The modified work must itself be a software library.\n\n    b) You must cause the files modified to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    c) You must cause the whole of the work to be licensed at no\n    charge to all third parties under the terms of this License.\n\n    d) If a facility in the modified Library refers to a function or a\n    table of data to be supplied by an application program that uses\n    the facility, other than as an argument passed when the facility\n    is invoked, then you must make a good faith effort to ensure that,\n    in the event an application does not supply such function or\n    table, the facility still operates, and performs whatever part of\n    its purpose remains meaningful.\n\n    (For example, a function in a library to compute square roots has\n    a purpose that is entirely well-defined independent of the\n    application.  Therefore, Subsection 2d requires that any\n    application-supplied function or table used by this function must\n    be optional: if the application does not supply it, the square\n    root function must still compute square roots.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Library,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Library, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote\nit.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Library.\n\nIn addition, mere aggregation of another work not based on the Library\nwith the Library (or with a work based on the Library) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may opt to apply the terms of the ordinary GNU General Public\nLicense instead of this License to a given copy of the Library.  To do\nthis, you must alter all the notices that refer to this License, so\nthat they refer to the ordinary GNU General Public License, version 2,\ninstead of to this License.  (If a newer version than version 2 of the\nordinary GNU General Public License has appeared, then you can specify\nthat version instead if you wish.)  Do not make any other change in\nthese notices.\n\f\n  Once this change is made in a given copy, it is irreversible for\nthat copy, so the ordinary GNU General Public License applies to all\nsubsequent copies and derivative works made from that copy.\n\n  This option is useful when you wish to copy part of the code of\nthe Library into a program that is not a library.\n\n  4. You may copy and distribute the Library (or a portion or\nderivative of it, under Section 2) in object code or executable form\nunder the terms of Sections 1 and 2 above provided that you accompany\nit with the complete corresponding machine-readable source code, which\nmust be distributed under the terms of Sections 1 and 2 above on a\nmedium customarily used for software interchange.\n\n  If distribution of object code is made by offering access to copy\nfrom a designated place, then offering equivalent access to copy the\nsource code from the same place satisfies the requirement to\ndistribute the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  5. A program that contains no derivative of any portion of the\nLibrary, but is designed to work with the Library by being compiled or\nlinked with it, is called a \"work that uses the Library\".  Such a\nwork, in isolation, is not a derivative work of the Library, and\ntherefore falls outside the scope of this License.\n\n  However, linking a \"work that uses the Library\" with the Library\ncreates an executable that is a derivative of the Library (because it\ncontains portions of the Library), rather than a \"work that uses the\nlibrary\".  The executable is therefore covered by this License.\nSection 6 states terms for distribution of such executables.\n\n  When a \"work that uses the Library\" uses material from a header file\nthat is part of the Library, the object code for the work may be a\nderivative work of the Library even though the source code is not.\nWhether this is true is especially significant if the work can be\nlinked without the Library, or if the work is itself a library.  The\nthreshold for this to be true is not precisely defined by law.\n\n  If such an object file uses only numerical parameters, data\nstructure layouts and accessors, and small macros and small inline\nfunctions (ten lines or less in length), then the use of the object\nfile is unrestricted, regardless of whether it is legally a derivative\nwork.  (Executables containing this object code plus portions of the\nLibrary will still fall under Section 6.)\n\n  Otherwise, if the work is a derivative of the Library, you may\ndistribute the object code for the work under the terms of Section 6.\nAny executables containing that work also fall under Section 6,\nwhether or not they are linked directly with the Library itself.\n\f\n  6. As an exception to the Sections above, you may also combine or\nlink a \"work that uses the Library\" with the Library to produce a\nwork containing portions of the Library, and distribute that work\nunder terms of your choice, provided that the terms permit\nmodification of the work for the customer's own use and reverse\nengineering for debugging such modifications.\n\n  You must give prominent notice with each copy of the work that the\nLibrary is used in it and that the Library and its use are covered by\nthis License.  You must supply a copy of this License.  If the work\nduring execution displays copyright notices, you must include the\ncopyright notice for the Library among them, as well as a reference\ndirecting the user to the copy of this License.  Also, you must do one\nof these things:\n\n    a) Accompany the work with the complete corresponding\n    machine-readable source code for the Library including whatever\n    changes were used in the work (which must be distributed under\n    Sections 1 and 2 above); and, if the work is an executable linked\n    with the Library, with the complete machine-readable \"work that\n    uses the Library\", as object code and/or source code, so that the\n    user can modify the Library and then relink to produce a modified\n    executable containing the modified Library.  (It is understood\n    that the user who changes the contents of definitions files in the\n    Library will not necessarily be able to recompile the application\n    to use the modified definitions.)\n\n    b) Use a suitable shared library mechanism for linking with the\n    Library.  A suitable mechanism is one that (1) uses at run time a\n    copy of the library already present on the user's computer system,\n    rather than copying library functions into the executable, and (2)\n    will operate properly with a modified version of the library, if\n    the user installs one, as long as the modified version is\n    interface-compatible with the version that the work was made with.\n\n    c) Accompany the work with a written offer, valid for at\n    least three years, to give the same user the materials\n    specified in Subsection 6a, above, for a charge no more\n    than the cost of performing this distribution.\n\n    d) If distribution of the work is made by offering access to copy\n    from a designated place, offer equivalent access to copy the above\n    specified materials from the same place.\n\n    e) Verify that the user has already received a copy of these\n    materials or that you have already sent this user a copy.\n\n  For an executable, the required form of the \"work that uses the\nLibrary\" must include any data and utility programs needed for\nreproducing the executable from it.  However, as a special exception,\nthe materials to be distributed need not include anything that is\nnormally distributed (in either source or binary form) with the major\ncomponents (compiler, kernel, and so on) of the operating system on\nwhich the executable runs, unless that component itself accompanies\nthe executable.\n\n  It may happen that this requirement contradicts the license\nrestrictions of other proprietary libraries that do not normally\naccompany the operating system.  Such a contradiction means you cannot\nuse both them and the Library together in an executable that you\ndistribute.\n\f\n  7. You may place library facilities that are a work based on the\nLibrary side-by-side in a single library together with other library\nfacilities not covered by this License, and distribute such a combined\nlibrary, provided that the separate distribution of the work based on\nthe Library and of the other library facilities is otherwise\npermitted, and provided that you do these two things:\n\n    a) Accompany the combined library with a copy of the same work\n    based on the Library, uncombined with any other library\n    facilities.  This must be distributed under the terms of the\n    Sections above.\n\n    b) Give prominent notice with the combined library of the fact\n    that part of it is a work based on the Library, and explaining\n    where to find the accompanying uncombined form of the same work.\n\n  8. You may not copy, modify, sublicense, link with, or distribute\nthe Library except as expressly provided under this License.  Any\nattempt otherwise to copy, modify, sublicense, link with, or\ndistribute the Library is void, and will automatically terminate your\nrights under this License.  However, parties who have received copies,\nor rights, from you under this License will not have their licenses\nterminated so long as such parties remain in full compliance.\n\n  9. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Library or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Library (or any work based on the\nLibrary), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Library or works based on it.\n\n  10. Each time you redistribute the Library (or any work based on the\nLibrary), the recipient automatically receives a license from the\noriginal licensor to copy, distribute, link with or modify the Library\nsubject to these terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties with\nthis License.\n\f\n  11. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Library at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Library by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Library.\n\nIf any portion of this section is held invalid or unenforceable under any\nparticular circumstance, the balance of the section is intended to apply,\nand the section as a whole is intended to apply in other circumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  12. If the distribution and/or use of the Library is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Library under this License may add\nan explicit geographical distribution limitation excluding those countries,\nso that distribution is permitted only in or among countries not thus\nexcluded.  In such case, this License incorporates the limitation as if\nwritten in the body of this License.\n\n  13. The Free Software Foundation may publish revised and/or new\nversions of the Lesser General Public License from time to time.\nSuch new versions will be similar in spirit to the present version,\nbut may differ in detail to address new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Library\nspecifies a version number of this License which applies to it and\n\"any later version\", you have the option of following the terms and\nconditions either of that version or of any later version published by\nthe Free Software Foundation.  If the Library does not specify a\nlicense version number, you may choose any version ever published by\nthe Free Software Foundation.\n\f\n  14. If you wish to incorporate parts of the Library into other free\nprograms whose distribution conditions are incompatible with these,\nwrite to the author to ask for permission.  For software which is\ncopyrighted by the Free Software Foundation, write to the Free\nSoftware Foundation; we sometimes make exceptions for this.  Our\ndecision will be guided by the two goals of preserving the free status\nof all derivatives of our free software and of promoting the sharing\nand reuse of software generally.\n\n                            NO WARRANTY\n\n  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\nWARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\nEXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\nOTHER PARTIES PROVIDE THE LIBRARY \"AS IS\" WITHOUT WARRANTY OF ANY\nKIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\nLIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\nTHE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\nWRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\nFOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\nCONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\nLIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\nRENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\nFAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\f\n           How to Apply These Terms to Your New Libraries\n\n  If you develop a new library, and you want it to be of the greatest\npossible use to the public, we recommend making it free software that\neveryone can redistribute and change.  You can do so by permitting\nredistribution under these terms (or, alternatively, under the terms of the\nordinary General Public License).\n\n  To apply these terms, attach the following notices to the library.  It is\nsafest to attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least the\n\"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the library's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This library is free software; you can redistribute it and/or\n    modify it under the terms of the GNU Lesser General Public\n    License as published by the Free Software Foundation; either\n    version 2.1 of the License, or (at your option) any later version.\n\n    This library is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n    Lesser General Public License for more details.\n\n    You should have received a copy of the GNU Lesser General Public\n    License along with this library; if not, write to the Free Software\n    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nAlso add information on how to contact you by electronic and paper mail.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the library, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the\n  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\n\n  <signature of Ty Coon>, 1 April 1990\n  Ty Coon, President of Vice\n\nThat's all there is to it!"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/README.md",
    "content": "![PHPMailer](https://raw.github.com/PHPMailer/PHPMailer/master/examples/images/phpmailer.png)\n\n# PHPMailer – A full-featured email creation and transfer class for PHP\n\n[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions)\n[![codecov.io](https://codecov.io/gh/PHPMailer/PHPMailer/branch/master/graph/badge.svg?token=iORZpwmYmM)](https://codecov.io/gh/PHPMailer/PHPMailer)\n[![Latest Stable Version](https://poser.pugx.org/phpmailer/phpmailer/v/stable.svg)](https://packagist.org/packages/phpmailer/phpmailer)\n[![Total Downloads](https://poser.pugx.org/phpmailer/phpmailer/downloads)](https://packagist.org/packages/phpmailer/phpmailer)\n[![License](https://poser.pugx.org/phpmailer/phpmailer/license.svg)](https://packagist.org/packages/phpmailer/phpmailer)\n[![API Docs](https://github.com/phpmailer/phpmailer/workflows/Docs/badge.svg)](https://phpmailer.github.io/PHPMailer/)\n\n## Features\n- Probably the world's most popular code for sending email from PHP!\n- Used by many open-source projects: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! and many more\n- Integrated SMTP support – send without a local mail server\n- Send emails with multiple To, CC, BCC and Reply-to addresses\n- Multipart/alternative emails for mail clients that do not read HTML email\n- Add attachments, including inline\n- Support for UTF-8 content and 8bit, base64, binary, and quoted-printable encodings\n- SMTP authentication with LOGIN, PLAIN, CRAM-MD5, and XOAUTH2 mechanisms over SMTPS and SMTP+STARTTLS transports\n- Validates email addresses automatically\n- Protects against header injection attacks\n- Error messages in over 50 languages!\n- DKIM and S/MIME signing support\n- Compatible with PHP 5.5 and later, including PHP 8.1\n- Namespaced to prevent name clashes\n- Much more!\n\n## Why you might need it\nMany PHP developers need to send email from their code. The only PHP function that supports this directly is [`mail()`](https://www.php.net/manual/en/function.mail.php). However, it does not provide any assistance for making use of popular features such as encryption, authentication, HTML messages, and attachments.\n\nFormatting email correctly is surprisingly difficult. There are myriad overlapping (and conflicting) standards, requiring tight adherence to horribly complicated formatting and encoding rules – the vast majority of code that you'll find online that uses the `mail()` function directly is just plain wrong, if not unsafe!\n\nThe PHP `mail()` function usually sends via a local mail server, typically fronted by a `sendmail` binary on Linux, BSD, and macOS platforms, however, Windows usually doesn't include a local mail server; PHPMailer's integrated SMTP client allows email sending on all platforms without needing a local mail server. Be aware though, that the `mail()` function should be avoided when possible; it's both faster and [safer](https://exploitbox.io/paper/Pwning-PHP-Mail-Function-For-Fun-And-RCE.html) to use SMTP to localhost.\n\n*Please* don't be tempted to do it yourself – if you don't use PHPMailer, there are many other excellent libraries that\nyou should look at before rolling your own. Try [SwiftMailer](https://swiftmailer.symfony.com/)\n, [Laminas/Mail](https://docs.laminas.dev/laminas-mail/), [ZetaComponents](https://github.com/zetacomponents/Mail) etc.\n\n## License\nThis software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lgpl-2.1.html) license, along with the [GPL Cooperation Commitment](https://gplcc.github.io/gplcc/). Please read [LICENSE](https://github.com/PHPMailer/PHPMailer/blob/master/LICENSE) for information on the software availability and distribution.\n\n## Installation & loading\nPHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file:\n\n```json\n\"phpmailer/phpmailer\": \"^6.5\"\n```\n\nor run\n\n```sh\ncomposer require phpmailer/phpmailer\n```\n\nNote that the `vendor` folder and the `vendor/autoload.php` script are generated by Composer; they are not part of PHPMailer.\n\nIf you want to use the Gmail XOAUTH2 authentication class, you will also need to add a dependency on the `league/oauth2-client` package in your `composer.json`.\n\nAlternatively, if you're not using Composer, you\ncan [download PHPMailer as a zip file](https://github.com/PHPMailer/PHPMailer/archive/master.zip), (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the `include_path` directories specified in your PHP configuration and load each class file manually:\n\n```php\n<?php\nuse PHPMailer\\PHPMailer\\PHPMailer;\nuse PHPMailer\\PHPMailer\\Exception;\n\nrequire 'path/to/PHPMailer/src/Exception.php';\nrequire 'path/to/PHPMailer/src/PHPMailer.php';\nrequire 'path/to/PHPMailer/src/SMTP.php';\n```\n\nIf you're not using the `SMTP` class explicitly (you're probably not), you don't need a `use` line for the SMTP class. Even if you're not using exceptions, you do still need to load the `Exception` class as it is used internally.\n\n## Legacy versions\nPHPMailer 5.2 (which is compatible with PHP 5.0 — 7.0) is no longer supported, even for security updates. You will find the latest version of 5.2 in the [5.2-stable branch](https://github.com/PHPMailer/PHPMailer/tree/5.2-stable). If you're using PHP 5.5 or later (which you should be), switch to the 6.x releases.\n\n### Upgrading from 5.2\nThe biggest changes are that source files are now in the `src/` folder, and PHPMailer now declares the namespace `PHPMailer\\PHPMailer`. This has several important effects – [read the upgrade guide](https://github.com/PHPMailer/PHPMailer/tree/master/UPGRADING.md) for more details.\n\n### Minimal installation\nWhile installing the entire package manually or with Composer is simple, convenient, and reliable, you may want to include only vital files in your project. At the very least you will need [src/PHPMailer.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/PHPMailer.php). If you're using SMTP, you'll need [src/SMTP.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/SMTP.php), and if you're using POP-before SMTP (*very* unlikely!), you'll need [src/POP3.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/POP3.php). You can skip the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder if you're not showing errors to users and can make do with English-only errors. If you're using XOAUTH2 you will need [src/OAuth.php](https://github.com/PHPMailer/PHPMailer/tree/master/src/OAuth.php) as well as the Composer dependencies for the services you wish to authenticate with. Really, it's much easier to use Composer!\n\n## A Simple Example\n\n```php\n<?php\n//Import PHPMailer classes into the global namespace\n//These must be at the top of your script, not inside a function\nuse PHPMailer\\PHPMailer\\PHPMailer;\nuse PHPMailer\\PHPMailer\\SMTP;\nuse PHPMailer\\PHPMailer\\Exception;\n\n//Load Composer's autoloader\nrequire 'vendor/autoload.php';\n\n//Create an instance; passing `true` enables exceptions\n$mail = new PHPMailer(true);\n\ntry {\n    //Server settings\n    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      //Enable verbose debug output\n    $mail->isSMTP();                                            //Send using SMTP\n    $mail->Host       = 'smtp.example.com';                     //Set the SMTP server to send through\n    $mail->SMTPAuth   = true;                                   //Enable SMTP authentication\n    $mail->Username   = 'user@example.com';                     //SMTP username\n    $mail->Password   = 'secret';                               //SMTP password\n    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Enable implicit TLS encryption\n    $mail->Port       = 465;                                    //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`\n\n    //Recipients\n    $mail->setFrom('from@example.com', 'Mailer');\n    $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient\n    $mail->addAddress('ellen@example.com');               //Name is optional\n    $mail->addReplyTo('info@example.com', 'Information');\n    $mail->addCC('cc@example.com');\n    $mail->addBCC('bcc@example.com');\n\n    //Attachments\n    $mail->addAttachment('/var/tmp/file.tar.gz');         //Add attachments\n    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name\n\n    //Content\n    $mail->isHTML(true);                                  //Set email format to HTML\n    $mail->Subject = 'Here is the subject';\n    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';\n    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';\n\n    $mail->send();\n    echo 'Message has been sent';\n} catch (Exception $e) {\n    echo \"Message could not be sent. Mailer Error: {$mail->ErrorInfo}\";\n}\n```\n\nYou'll find plenty to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder, which covers many common scenarios including sending through gmail, building contact forms, sending to mailing lists, and more.\n\nIf you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance.\n\nThat's it. You should now be ready to use PHPMailer!\n\n## Localization\nPHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this:\n\n```php\n//To load the French version\n$mail->setLanguage('fr', '/optional/path/to/language/directory/');\n```\n\nWe welcome corrections and new languages – if you're looking for corrections, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations.\n\n## Documentation\nStart reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated.\n\nExamples of how to use PHPMailer for common scenarios can be found in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. If you're looking for a good starting point, we recommend you start with [the Gmail example](https://github.com/PHPMailer/PHPMailer/tree/master/examples/gmail.phps).\n\nTo reduce PHPMailer's deployed code footprint, examples are not included if you load PHPMailer via Composer or via [GitHub's zip file download](https://github.com/PHPMailer/PHPMailer/archive/master.zip), so you'll need to either clone the git repository or use the above links to get to the examples directly.\n\nComplete generated API documentation is [available online](https://phpmailer.github.io/PHPMailer/).\n\nYou can generate complete API-level documentation by running `phpdoc` in the top-level folder, and documentation will appear in the `docs` folder, though you'll need to have [PHPDocumentor](http://www.phpdoc.org) installed. You may find [the unit tests](https://github.com/PHPMailer/PHPMailer/blob/master/test/PHPMailerTest.php) a good reference for how to do various operations such as encryption.\n\nIf the documentation doesn't cover what you need, search the [many questions on Stack Overflow](http://stackoverflow.com/questions/tagged/phpmailer), and before you ask a question about \"SMTP Error: Could not connect to SMTP host.\", [read the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting).\n\n## Tests\n[PHPMailer tests](https://github.com/PHPMailer/PHPMailer/tree/master/test/) use PHPUnit 9, with [a polyfill](https://github.com/Yoast/PHPUnit-Polyfills) to let 9-style tests run on older PHPUnit and PHP versions.\n\n[![Test status](https://github.com/PHPMailer/PHPMailer/workflows/Tests/badge.svg)](https://github.com/PHPMailer/PHPMailer/actions)\n\nIf this isn't passing, is there something you can do to help?\n\n## Security\nPlease disclose any vulnerabilities found responsibly – report security issues to the maintainers privately.\n\nSee [SECURITY](https://github.com/PHPMailer/PHPMailer/tree/master/SECURITY.md) and [PHPMailer's security advisories on GitHub](https://github.com/PHPMailer/PHPMailer/security). \n\n## Contributing\nPlease submit bug reports, suggestions and pull requests to the [GitHub issue tracker](https://github.com/PHPMailer/PHPMailer/issues).\n\nWe're particularly interested in fixing edge-cases, expanding test coverage and updating translations.\n\nIf you found a mistake in the docs, or want to add something, go ahead and amend the wiki – anyone can edit it.\n\nIf you have git clones from prior to the move to the PHPMailer GitHub organisation, you'll need to update any remote URLs referencing the old GitHub location with a command like this from within your clone:\n\n```sh\ngit remote set-url upstream https://github.com/PHPMailer/PHPMailer.git\n```\n\nPlease *don't* use the SourceForge or Google Code projects any more; they are obsolete and no longer maintained.\n\n## Sponsorship\nDevelopment time and resources for PHPMailer are provided by [Smartmessages.net](https://info.smartmessages.net/), the world's only privacy-first email marketing system.\n\n<a href=\"https://info.smartmessages.net/\"><img src=\"https://www.smartmessages.net/img/smartmessages-logo.svg\" width=\"550\" alt=\"Smartmessages.net privacy-first email marketing logo\"></a>\n\nDonations are very welcome, whether in beer 🍺, T-shirts 👕, or cold, hard cash 💰. Sponsorship through GitHub is a simple and convenient way to say \"thank you\" to PHPMailer's maintainers and contributors – just click the \"Sponsor\" button [on the project page](https://github.com/PHPMailer/PHPMailer). If your company uses PHPMailer, consider taking part in Tidelift's enterprise support programme.\n\n## PHPMailer For Enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of PHPMailer and thousands of other packages are working with Tidelift to deliver commercial\nsupport and maintenance for the open source packages you use to build your applications. Save time, reduce risk, and\nimprove code health, while paying the maintainers of the exact packages you\nuse. [Learn more.](https://tidelift.com/subscription/pkg/packagist-phpmailer-phpmailer?utm_source=packagist-phpmailer-phpmailer&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)\n\n## Changelog\nSee [changelog](changelog.md).\n\n## History\n- PHPMailer was originally written in 2001 by Brent R. Matzelle as a [SourceForge project](http://sourceforge.net/projects/phpmailer/).\n- [Marcus Bointon](https://github.com/Synchro) (`coolbru` on SF) and Andy Prevost (`codeworxtech`) took over the project in 2004.\n- Became an Apache incubator project on Google Code in 2010, managed by Jim Jagielski.\n- Marcus created [his fork on GitHub](https://github.com/Synchro/PHPMailer) in 2008.\n- Jim and Marcus decide to join forces and use GitHub as the canonical and official repo for PHPMailer in 2013.\n- PHPMailer moves to [the PHPMailer organisation](https://github.com/PHPMailer) on GitHub in 2013.\n\n### What's changed since moving from SourceForge?\n- Official successor to the SourceForge and Google Code projects.\n- Test suite.\n- Continuous integration with Github Actions.\n- Composer support.\n- Public development.\n- Additional languages and language strings.\n- CRAM-MD5 authentication support.\n- Preserves full repo history of authors, commits and branches from the original SourceForge project.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/SECURITY.md",
    "content": "# Security notices relating to PHPMailer\n\nPlease disclose any security issues or vulnerabilities found through [Tidelift's coordinated disclosure system](https://tidelift.com/security) or to the maintainers privately.\n\nPHPMailer 6.4.1 and earlier contain a vulnerability that can result in untrusted code being called (if such code is injected into the host project's scope by other means). If the `$patternselect` parameter to `validateAddress()` is set to `'php'` (the default, defined by `PHPMailer::$validator`), and the global namespace contains a function called `php`, it will be called in preference to the built-in validator of the same name. Mitigated in PHPMailer 6.5.0 by denying the use of simple strings as validator function names. Recorded as [CVE-2021-3603](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-3603). Reported by [Vikrant Singh Chauhan](mailto:vi@hackberry.xyz) via [huntr.dev](https://www.huntr.dev/).\n\nPHPMailer versions 6.4.1 and earlier contain a possible remote code execution vulnerability through the `$lang_path` parameter of the `setLanguage()` method. If the `$lang_path` parameter is passed unfiltered from user input, it can be set to [a UNC path](https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats#unc-paths), and if an attacker is also able to persuade the server to load a file from that UNC path, a script file under their control may be executed. This vulnerability only applies to systems that resolve UNC paths, typically only Microsoft Windows.\nPHPMailer 6.5.0 mitigates this by no longer treating translation files as PHP code, but by parsing their text content directly. This approach avoids the possibility of executing unknown code while retaining backward compatibility. This isn't ideal, so the current translation format is deprecated and will be replaced in the next major release. Recorded as [CVE-2021-34551](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2021-34551). Reported by [Jilin Diting Information Technology Co., Ltd](https://listensec.com) via Tidelift.\n\nPHPMailer versions between 6.1.8 and 6.4.0 contain a regression of the earlier CVE-2018-19296 object injection vulnerability as a result of [a fix for Windows UNC paths in 6.1.8](https://github.com/PHPMailer/PHPMailer/commit/e2e07a355ee8ff36aba21d0242c5950c56e4c6f9). Recorded as [CVE-2020-36326](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-36326). Reported by Fariskhi Vidyan via Tidelift. 6.4.1 fixes this issue, and also enforces stricter checks for URL schemes in local path contexts.\n\nPHPMailer versions 6.1.5 and earlier contain an output escaping bug that occurs in `Content-Type` and `Content-Disposition` when filenames passed into `addAttachment` and other methods that accept attachment names contain double quote characters, in contravention of RFC822 3.4.1. No specific vulnerability has been found relating to this, but it could allow file attachments to bypass attachment filters that are based on matching filename extensions. Recorded as [CVE-2020-13625](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2020-13625). Reported by Elar Lang of Clarified Security.\n\nPHPMailer versions prior to 6.0.6 and 5.2.27 are vulnerable to an object injection attack by passing `phar://` paths into `addAttachment()` and other functions that may receive unfiltered local paths, possibly leading to RCE. Recorded as [CVE-2018-19296](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2018-19296). See [this article](https://knasmueller.net/5-answers-about-php-phar-exploitation) for more info on this type of vulnerability. Mitigated by blocking the use of paths containing URL-protocol style prefixes such as `phar://`. Reported by Sehun Oh of cyberone.kr.\n\nPHPMailer versions prior to 5.2.24 (released July 26th 2017) have an XSS vulnerability in one of the code examples, [CVE-2017-11503](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-11503). The `code_generator.phps` example did not filter user input prior to output. This file is distributed with a `.phps` extension, so it it not normally executable unless it is explicitly renamed, and the file is not included when PHPMailer is loaded through composer, so it is safe by default. There was also an undisclosed potential XSS vulnerability in the default exception handler (unused by default). Patches for both issues kindly provided by Patrick Monnerat of the Fedora Project.\n\nPHPMailer versions prior to 5.2.22 (released January 9th 2017) have a local file disclosure vulnerability, [CVE-2017-5223](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2017-5223). If content passed into `msgHTML()` is sourced from unfiltered user input, relative paths can map to absolute local file paths and added as attachments. Also note that `addAttachment` (just like `file_get_contents`, `passthru`, `unlink`, etc) should not be passed user-sourced params either! Reported by Yongxiang Li of Asiasecurity.\n\nPHPMailer versions prior to 5.2.20 (released December 28th 2016) are vulnerable to [CVE-2016-10045](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10045) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](https://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10045-Vuln-Patch-Bypass.html), and patched by Paul Buonopane (@Zenexer).\n\nPHPMailer versions prior to 5.2.18 (released December 2016) are vulnerable to [CVE-2016-10033](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-10033) a remote code execution vulnerability, responsibly reported by [Dawid Golunski](http://legalhackers.com/advisories/PHPMailer-Exploit-Remote-Code-Exec-CVE-2016-10033-Vuln.html).\n\nPHPMailer versions prior to 5.2.14 (released November 2015) are vulnerable to [CVE-2015-8476](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8476) an SMTP CRLF injection bug permitting arbitrary message sending.\n\nPHPMailer versions prior to 5.2.10 (released May 2015) are vulnerable to [CVE-2008-5619](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2008-5619), a remote code execution vulnerability in the bundled html2text library. This file was removed in 5.2.10, so if you are using a version prior to that and make use of the html2text function, it's vitally important that you upgrade and remove this file.\n\nPHPMailer versions prior to 2.0.7 and 2.2.1 are vulnerable to [CVE-2012-0796](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-0796), an email header injection attack.\n\nJoomla 1.6.0 uses PHPMailer in an unsafe way, allowing it to reveal local file paths, reported in [CVE-2011-3747](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-3747).\n\nPHPMailer didn't sanitise the `$lang_path` parameter in `SetLanguage`. This wasn't a problem in itself, but some apps (PHPClassifieds, ATutor) also failed to sanitise user-provided parameters passed to it, permitting semi-arbitrary local file inclusion, reported in [CVE-2010-4914](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-4914), [CVE-2007-2021](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-2021) and [CVE-2006-5734](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2006-5734).\n\nPHPMailer 1.7.2 and earlier contained a possible DDoS vulnerability reported in [CVE-2005-1807](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-1807).\n\nPHPMailer 1.7 and earlier (June 2003) have a possible vulnerability in the `SendmailSend` method where shell commands may not be sanitised. Reported in [CVE-2007-3215](https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-3215).\n\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/VERSION",
    "content": "6.6.0"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/composer.json",
    "content": "{\n    \"name\": \"phpmailer/phpmailer\",\n    \"type\": \"library\",\n    \"description\": \"PHPMailer is a full-featured email creation and transfer class for PHP\",\n    \"authors\": [\n        {\n            \"name\": \"Marcus Bointon\",\n            \"email\": \"phpmailer@synchromedia.co.uk\"\n        },\n        {\n            \"name\": \"Jim Jagielski\",\n            \"email\": \"jimjag@gmail.com\"\n        },\n        {\n            \"name\": \"Andy Prevost\",\n            \"email\": \"codeworxtech@users.sourceforge.net\"\n        },\n        {\n            \"name\": \"Brent R. Matzelle\"\n        }\n    ],\n    \"funding\": [\n        {\n            \"url\": \"https://github.com/Synchro\",\n            \"type\": \"github\"\n        }\n    ],\n    \"config\": {\n        \"allow-plugins\": {\n            \"dealerdirect/phpcodesniffer-composer-installer\": true\n        }\n    },\n    \"require\": {\n        \"php\": \">=5.5.0\",\n        \"ext-ctype\": \"*\",\n        \"ext-filter\": \"*\",\n        \"ext-hash\": \"*\"\n    },\n    \"require-dev\": {\n        \"dealerdirect/phpcodesniffer-composer-installer\": \"^0.7.0\",\n        \"doctrine/annotations\": \"^1.2\",\n        \"php-parallel-lint/php-console-highlighter\": \"^0.5.0\",\n        \"php-parallel-lint/php-parallel-lint\": \"^1.3.1\",\n        \"phpcompatibility/php-compatibility\": \"^9.3.5\",\n        \"roave/security-advisories\": \"dev-latest\",\n        \"squizlabs/php_codesniffer\": \"^3.6.2\",\n        \"yoast/phpunit-polyfills\": \"^1.0.0\"\n    },\n    \"suggest\": {\n        \"ext-mbstring\": \"Needed to send email in multibyte encoding charset or decode encoded addresses\",\n        \"hayageek/oauth2-yahoo\": \"Needed for Yahoo XOAUTH2 authentication\",\n        \"league/oauth2-google\": \"Needed for Google XOAUTH2 authentication\",\n        \"psr/log\": \"For optional PSR-3 debug logging\",\n        \"stevenmaguire/oauth2-microsoft\": \"Needed for Microsoft XOAUTH2 authentication\",\n        \"symfony/polyfill-mbstring\": \"To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"PHPMailer\\\\PHPMailer\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"PHPMailer\\\\Test\\\\\": \"test/\"\n        }\n    },\n    \"license\": \"LGPL-2.1-only\",\n    \"scripts\": {\n        \"check\": \"./vendor/bin/phpcs\",\n        \"test\": \"./vendor/bin/phpunit --no-coverage\",\n        \"coverage\": \"./vendor/bin/phpunit\",\n        \"lint\": [\n            \"@php ./vendor/php-parallel-lint/php-parallel-lint/parallel-lint . -e php,phps --exclude vendor --exclude .git --exclude build\"\n        ]\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/get_oauth_token.php",
    "content": "<?php\n\n/**\n * PHPMailer - PHP email creation and transport class.\n * PHP Version 5.5\n * @package PHPMailer\n * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\n/**\n * Get an OAuth2 token from an OAuth2 provider.\n * * Install this script on your server so that it's accessible\n * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php\n * e.g.: http://localhost/phpmailer/get_oauth_token.php\n * * Ensure dependencies are installed with 'composer install'\n * * Set up an app in your Google/Yahoo/Microsoft account\n * * Set the script address as the app's redirect URL\n * If no refresh token is obtained when running this file,\n * revoke access to your app and run the script again.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\n/**\n * Aliases for League Provider Classes\n * Make sure you have added these to your composer.json and run `composer install`\n * Plenty to choose from here:\n * @see http://oauth2-client.thephpleague.com/providers/thirdparty/\n */\n//@see https://github.com/thephpleague/oauth2-google\nuse League\\OAuth2\\Client\\Provider\\Google;\n//@see https://packagist.org/packages/hayageek/oauth2-yahoo\nuse Hayageek\\OAuth2\\Client\\Provider\\Yahoo;\n//@see https://github.com/stevenmaguire/oauth2-microsoft\nuse Stevenmaguire\\OAuth2\\Client\\Provider\\Microsoft;\n\nif (!isset($_GET['code']) && !isset($_GET['provider'])) {\n    ?>\n<html>\n<body>Select Provider:<br>\n<a href='?provider=Google'>Google</a><br>\n<a href='?provider=Yahoo'>Yahoo</a><br>\n<a href='?provider=Microsoft'>Microsoft/Outlook/Hotmail/Live/Office365</a><br>\n</body>\n</html>\n    <?php\n    exit;\n}\n\nrequire 'vendor/autoload.php';\n\nsession_start();\n\n$providerName = '';\n\nif (array_key_exists('provider', $_GET)) {\n    $providerName = $_GET['provider'];\n    $_SESSION['provider'] = $providerName;\n} elseif (array_key_exists('provider', $_SESSION)) {\n    $providerName = $_SESSION['provider'];\n}\nif (!in_array($providerName, ['Google', 'Microsoft', 'Yahoo'])) {\n    exit('Only Google, Microsoft and Yahoo OAuth2 providers are currently supported in this script.');\n}\n\n//These details are obtained by setting up an app in the Google developer console,\n//or whichever provider you're using.\n$clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';\n$clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';\n\n//If this automatic URL doesn't work, set it yourself manually to the URL of this script\n$redirectUri = (isset($_SERVER['HTTPS']) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];\n//$redirectUri = 'http://localhost/PHPMailer/redirect';\n\n$params = [\n    'clientId' => $clientId,\n    'clientSecret' => $clientSecret,\n    'redirectUri' => $redirectUri,\n    'accessType' => 'offline'\n];\n\n$options = [];\n$provider = null;\n\nswitch ($providerName) {\n    case 'Google':\n        $provider = new Google($params);\n        $options = [\n            'scope' => [\n                'https://mail.google.com/'\n            ]\n        ];\n        break;\n    case 'Yahoo':\n        $provider = new Yahoo($params);\n        break;\n    case 'Microsoft':\n        $provider = new Microsoft($params);\n        $options = [\n            'scope' => [\n                'wl.imap',\n                'wl.offline_access'\n            ]\n        ];\n        break;\n}\n\nif (null === $provider) {\n    exit('Provider missing');\n}\n\nif (!isset($_GET['code'])) {\n    //If we don't have an authorization code then get one\n    $authUrl = $provider->getAuthorizationUrl($options);\n    $_SESSION['oauth2state'] = $provider->getState();\n    header('Location: ' . $authUrl);\n    exit;\n    //Check given state against previously stored one to mitigate CSRF attack\n} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n    unset($_SESSION['oauth2state']);\n    unset($_SESSION['provider']);\n    exit('Invalid state');\n} else {\n    unset($_SESSION['provider']);\n    //Try to get an access token (using the authorization code grant)\n    $token = $provider->getAccessToken(\n        'authorization_code',\n        [\n            'code' => $_GET['code']\n        ]\n    );\n    //Use this to interact with an API on the users behalf\n    //Use this to get a new access token if the old one expires\n    echo 'Refresh Token: ', $token->getRefreshToken();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php",
    "content": "<?php\n\n/**\n * Afrikaans PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP-fout: kon nie geverifieer word nie.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP-fout: kon nie aan SMTP-verbind nie.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-fout: data nie aanvaar nie.';\n$PHPMAILER_LANG['empty_message']        = 'Boodskapliggaam leeg.';\n$PHPMAILER_LANG['encoding']             = 'Onbekende kodering: ';\n$PHPMAILER_LANG['execute']              = 'Kon nie uitvoer nie: ';\n$PHPMAILER_LANG['file_access']          = 'Kon nie lêer oopmaak nie: ';\n$PHPMAILER_LANG['file_open']            = 'Lêerfout: Kon nie lêer oopmaak nie: ';\n$PHPMAILER_LANG['from_failed']          = 'Die volgende Van adres misluk: ';\n$PHPMAILER_LANG['instantiate']          = 'Kon nie posfunksie instansieer nie.';\n$PHPMAILER_LANG['invalid_address']      = 'Ongeldige adres: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer word nie ondersteun nie.';\n$PHPMAILER_LANG['provide_address']      = 'U moet ten minste een ontvanger e-pos adres verskaf.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP-fout: Die volgende ontvangers het misluk: ';\n$PHPMAILER_LANG['signing']              = 'Ondertekening Fout: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP-verbinding () misluk.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP-bediener fout: ';\n$PHPMAILER_LANG['variable_set']         = 'Kan nie veranderlike instel of herstel nie: ';\n$PHPMAILER_LANG['extension_missing']    = 'Uitbreiding ontbreek: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ar.php",
    "content": "<?php\n\n/**\n * Arabic PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author bahjat al mostafa <bahjat983@hotmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'خطأ SMTP : لا يمكن تأكيد الهوية.';\n$PHPMAILER_LANG['connect_host']         = 'خطأ SMTP: لا يمكن الاتصال بالخادم SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'خطأ SMTP: لم يتم قبول المعلومات .';\n$PHPMAILER_LANG['empty_message']        = 'نص الرسالة فارغ';\n$PHPMAILER_LANG['encoding']             = 'ترميز غير معروف: ';\n$PHPMAILER_LANG['execute']              = 'لا يمكن تنفيذ : ';\n$PHPMAILER_LANG['file_access']          = 'لا يمكن الوصول للملف: ';\n$PHPMAILER_LANG['file_open']            = 'خطأ في الملف: لا يمكن فتحه: ';\n$PHPMAILER_LANG['from_failed']          = 'خطأ على مستوى عنوان المرسل : ';\n$PHPMAILER_LANG['instantiate']          = 'لا يمكن توفير خدمة البريد.';\n$PHPMAILER_LANG['invalid_address']      = 'الإرسال غير ممكن لأن عنوان البريد الإلكتروني غير صالح: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' برنامج الإرسال غير مدعوم.';\n$PHPMAILER_LANG['provide_address']      = 'يجب توفير عنوان البريد الإلكتروني لمستلم واحد على الأقل.';\n$PHPMAILER_LANG['recipients_failed']    = 'خطأ SMTP: الأخطاء التالية فشل في الارسال لكل من : ';\n$PHPMAILER_LANG['signing']              = 'خطأ في التوقيع: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() غير ممكن.';\n$PHPMAILER_LANG['smtp_error']           = 'خطأ على مستوى الخادم SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'لا يمكن تعيين أو إعادة تعيين متغير: ';\n$PHPMAILER_LANG['extension_missing']    = 'الإضافة غير موجودة: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-az.php",
    "content": "<?php\n\n/**\n * Azerbaijani PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author @mirjalal\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP xətası: Giriş uğursuz oldu.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP xətası: SMTP serverinə qoşulma uğursuz oldu.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP xətası: Verilənlər qəbul edilməyib.';\n$PHPMAILER_LANG['empty_message']        = 'Boş mesaj göndərilə bilməz.';\n$PHPMAILER_LANG['encoding']             = 'Qeyri-müəyyən kodlaşdırma: ';\n$PHPMAILER_LANG['execute']              = 'Əmr yerinə yetirilmədi: ';\n$PHPMAILER_LANG['file_access']          = 'Fayla giriş yoxdur: ';\n$PHPMAILER_LANG['file_open']            = 'Fayl xətası: Fayl açıla bilmədi: ';\n$PHPMAILER_LANG['from_failed']          = 'Göstərilən poçtlara göndərmə uğursuz oldu: ';\n$PHPMAILER_LANG['instantiate']          = 'Mail funksiyası işə salına bilmədi.';\n$PHPMAILER_LANG['invalid_address']      = 'Düzgün olmayan e-mail adresi: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' - e-mail kitabxanası dəstəklənmir.';\n$PHPMAILER_LANG['provide_address']      = 'Ən azı bir e-mail adresi daxil edilməlidir.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP xətası: Aşağıdakı ünvanlar üzrə alıcılara göndərmə uğursuzdur: ';\n$PHPMAILER_LANG['signing']              = 'İmzalama xətası: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP serverinə qoşulma uğursuz oldu.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri xətası: ';\n$PHPMAILER_LANG['variable_set']         = 'Dəyişənin quraşdırılması uğursuz oldu: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ba.php",
    "content": "<?php\n\n/**\n * Bosnian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Ermin Islamagić <ermin@islamagic.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela prijava.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Nije moguće spojiti se sa SMTP serverom.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';\n$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';\n$PHPMAILER_LANG['encoding']             = 'Nepoznata kriptografija: ';\n$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';\n$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';\n$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';\n$PHPMAILER_LANG['from_failed']          = 'SMTP Greška: Slanje sa navedenih e-mail adresa nije uspjelo: ';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Greška: Slanje na navedene e-mail adrese nije uspjelo: ';\n$PHPMAILER_LANG['instantiate']          = 'Ne mogu pokrenuti mail funkcionalnost.';\n$PHPMAILER_LANG['invalid_address']      = 'E-mail nije poslan. Neispravna e-mail adresa: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';\n$PHPMAILER_LANG['provide_address']      = 'Definišite barem jednu adresu primaoca.';\n$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Spajanje na SMTP server nije uspjelo.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP greška: ';\n$PHPMAILER_LANG['variable_set']         = 'Nije moguće postaviti varijablu ili je vratiti nazad: ';\n$PHPMAILER_LANG['extension_missing']    = 'Nedostaje ekstenzija: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-be.php",
    "content": "<?php\n\n/**\n * Belarusian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Aleksander Maksymiuk <info@setpro.pl>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Памылка SMTP: памылка ідэнтыфікацыі.';\n$PHPMAILER_LANG['connect_host']         = 'Памылка SMTP: нельга ўстанавіць сувязь з SMTP-серверам.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Памылка SMTP: звесткі непрынятыя.';\n$PHPMAILER_LANG['empty_message']        = 'Пустое паведамленне.';\n$PHPMAILER_LANG['encoding']             = 'Невядомая кадыроўка тэксту: ';\n$PHPMAILER_LANG['execute']              = 'Нельга выканаць каманду: ';\n$PHPMAILER_LANG['file_access']          = 'Няма доступу да файла: ';\n$PHPMAILER_LANG['file_open']            = 'Нельга адкрыць файл: ';\n$PHPMAILER_LANG['from_failed']          = 'Няправільны адрас адпраўніка: ';\n$PHPMAILER_LANG['instantiate']          = 'Нельга прымяніць функцыю mail().';\n$PHPMAILER_LANG['invalid_address']      = 'Нельга даслаць паведамленне, няправільны email атрымальніка: ';\n$PHPMAILER_LANG['provide_address']      = 'Запоўніце, калі ласка, правільны email атрымальніка.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' - паштовы сервер не падтрымліваецца.';\n$PHPMAILER_LANG['recipients_failed']    = 'Памылка SMTP: няправільныя атрымальнікі: ';\n$PHPMAILER_LANG['signing']              = 'Памылка подпісу паведамлення: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Памылка сувязі з SMTP-серверам.';\n$PHPMAILER_LANG['smtp_error']           = 'Памылка SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Нельга ўстанавіць або перамяніць значэнне пераменнай: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-bg.php",
    "content": "<?php\n\n/**\n * Bulgarian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Mikhail Kyosev <mialygk@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: Не може да се удостовери пред сървъра.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: Не може да се свърже с SMTP хоста.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: данните не са приети.';\n$PHPMAILER_LANG['empty_message']        = 'Съдържанието на съобщението е празно';\n$PHPMAILER_LANG['encoding']             = 'Неизвестно кодиране: ';\n$PHPMAILER_LANG['execute']              = 'Не може да се изпълни: ';\n$PHPMAILER_LANG['file_access']          = 'Няма достъп до файл: ';\n$PHPMAILER_LANG['file_open']            = 'Файлова грешка: Не може да се отвори файл: ';\n$PHPMAILER_LANG['from_failed']          = 'Следните адреси за подател са невалидни: ';\n$PHPMAILER_LANG['instantiate']          = 'Не може да се инстанцира функцията mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Невалиден адрес: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' - пощенски сървър не се поддържа.';\n$PHPMAILER_LANG['provide_address']      = 'Трябва да предоставите поне един email адрес за получател.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: Следните адреси за Получател са невалидни: ';\n$PHPMAILER_LANG['signing']              = 'Грешка при подписване: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP провален connect().';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP сървърна грешка: ';\n$PHPMAILER_LANG['variable_set']         = 'Не може да се установи или възстанови променлива: ';\n$PHPMAILER_LANG['extension_missing']    = 'Липсва разширение: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ca.php",
    "content": "<?php\n\n/**\n * Catalan PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Ivan <web AT microstudi DOT com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Error SMTP: No s’ha pogut autenticar.';\n$PHPMAILER_LANG['connect_host']         = 'Error SMTP: No es pot connectar al servidor SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Dades no acceptades.';\n$PHPMAILER_LANG['empty_message']        = 'El cos del missatge està buit.';\n$PHPMAILER_LANG['encoding']             = 'Codificació desconeguda: ';\n$PHPMAILER_LANG['execute']              = 'No es pot executar: ';\n$PHPMAILER_LANG['file_access']          = 'No es pot accedir a l’arxiu: ';\n$PHPMAILER_LANG['file_open']            = 'Error d’Arxiu: No es pot obrir l’arxiu: ';\n$PHPMAILER_LANG['from_failed']          = 'La(s) següent(s) adreces de remitent han fallat: ';\n$PHPMAILER_LANG['instantiate']          = 'No s’ha pogut crear una instància de la funció Mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Adreça d’email invalida: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat';\n$PHPMAILER_LANG['provide_address']      = 'S’ha de proveir almenys una adreça d’email com a destinatari.';\n$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Els següents destinataris han fallat: ';\n$PHPMAILER_LANG['signing']              = 'Error al signar: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Ha fallat el SMTP Connect().';\n$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'No s’ha pogut establir o restablir la variable: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ch.php",
    "content": "<?php\n\n/**\n * Chinese PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author LiuXin <http://www.80x86.cn/blog/>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP 错误：身份验证失败。';\n$PHPMAILER_LANG['connect_host']         = 'SMTP 错误: 不能连接SMTP主机。';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误: 数据不可接受。';\n//$PHPMAILER_LANG['empty_message']        = 'Message body empty';\n$PHPMAILER_LANG['encoding']             = '未知编码：';\n$PHPMAILER_LANG['execute']              = '不能执行: ';\n$PHPMAILER_LANG['file_access']          = '不能访问文件：';\n$PHPMAILER_LANG['file_open']            = '文件错误：不能打开文件：';\n$PHPMAILER_LANG['from_failed']          = '下面的发送地址邮件发送失败了： ';\n$PHPMAILER_LANG['instantiate']          = '不能实现mail方法。';\n//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';\n$PHPMAILER_LANG['provide_address']      = '您必须提供至少一个 收信人的email地址。';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误： 下面的 收件人失败了： ';\n//$PHPMAILER_LANG['signing']              = 'Signing Error: ';\n//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';\n//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';\n//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-cs.php",
    "content": "<?php\n\n/**\n * Czech PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Chyba SMTP: Autentizace selhala.';\n$PHPMAILER_LANG['connect_host']         = 'Chyba SMTP: Nelze navázat spojení se SMTP serverem.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Chyba SMTP: Data nebyla přijata.';\n$PHPMAILER_LANG['empty_message']        = 'Prázdné tělo zprávy';\n$PHPMAILER_LANG['encoding']             = 'Neznámé kódování: ';\n$PHPMAILER_LANG['execute']              = 'Nelze provést: ';\n$PHPMAILER_LANG['file_access']          = 'Nelze získat přístup k souboru: ';\n$PHPMAILER_LANG['file_open']            = 'Chyba souboru: Nelze otevřít soubor pro čtení: ';\n$PHPMAILER_LANG['from_failed']          = 'Následující adresa odesílatele je nesprávná: ';\n$PHPMAILER_LANG['instantiate']          = 'Nelze vytvořit instanci emailové funkce.';\n$PHPMAILER_LANG['invalid_address']      = 'Neplatná adresa: ';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Záznam hostitele je nesprávný: ';\n$PHPMAILER_LANG['invalid_host']         = 'Hostitel je nesprávný: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer není podporován.';\n$PHPMAILER_LANG['provide_address']      = 'Musíte zadat alespoň jednu emailovou adresu příjemce.';\n$PHPMAILER_LANG['recipients_failed']    = 'Chyba SMTP: Následující adresy příjemců nejsou správně: ';\n$PHPMAILER_LANG['signing']              = 'Chyba přihlašování: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() selhal.';\n$PHPMAILER_LANG['smtp_error']           = 'Chyba SMTP serveru: ';\n$PHPMAILER_LANG['variable_set']         = 'Nelze nastavit nebo změnit proměnnou: ';\n$PHPMAILER_LANG['extension_missing']    = 'Chybí rozšíření: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-da.php",
    "content": "<?php\n\n/**\n * Danish PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author John Sebastian <jms@iwb.dk>\n * Rewrite and extension of the work by Mikael Stokkebro <info@stokkebro.dk>\n *\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP fejl: Login mislykkedes.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP fejl: Forbindelse til SMTP serveren kunne ikke oprettes.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fejl: Data blev ikke accepteret.';\n$PHPMAILER_LANG['empty_message']        = 'Meddelelsen er uden indhold';\n$PHPMAILER_LANG['encoding']             = 'Ukendt encode-format: ';\n$PHPMAILER_LANG['execute']              = 'Kunne ikke afvikle: ';\n$PHPMAILER_LANG['file_access']          = 'Kunne ikke tilgå filen: ';\n$PHPMAILER_LANG['file_open']            = 'Fil fejl: Kunne ikke åbne filen: ';\n$PHPMAILER_LANG['from_failed']          = 'Følgende afsenderadresse er forkert: ';\n$PHPMAILER_LANG['instantiate']          = 'Email funktionen kunne ikke initialiseres.';\n$PHPMAILER_LANG['invalid_address']      = 'Udgyldig adresse: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';\n$PHPMAILER_LANG['provide_address']      = 'Indtast mindst en modtagers email adresse.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP fejl: Følgende modtagere er forkerte: ';\n$PHPMAILER_LANG['signing']              = 'Signeringsfejl: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fejlede.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP server fejl: ';\n$PHPMAILER_LANG['variable_set']         = 'Kunne ikke definere eller nulstille variablen: ';\n$PHPMAILER_LANG['extension_missing']    = 'Udvidelse mangler: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-de.php",
    "content": "<?php\n\n/**\n * German PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP-Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-Fehler: Daten werden nicht akzeptiert.';\n$PHPMAILER_LANG['empty_message']        = 'E-Mail-Inhalt ist leer.';\n$PHPMAILER_LANG['encoding']             = 'Unbekannte Kodierung: ';\n$PHPMAILER_LANG['execute']              = 'Konnte folgenden Befehl nicht ausführen: ';\n$PHPMAILER_LANG['file_access']          = 'Zugriff auf folgende Datei fehlgeschlagen: ';\n$PHPMAILER_LANG['file_open']            = 'Dateifehler: Konnte folgende Datei nicht öffnen: ';\n$PHPMAILER_LANG['from_failed']          = 'Die folgende Absenderadresse ist nicht korrekt: ';\n$PHPMAILER_LANG['instantiate']          = 'Mail-Funktion konnte nicht initialisiert werden.';\n$PHPMAILER_LANG['invalid_address']      = 'Die Adresse ist ungültig: ';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Ungültiger Hosteintrag: ';\n$PHPMAILER_LANG['invalid_host']         = 'Ungültiger Host: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';\n$PHPMAILER_LANG['provide_address']      = 'Bitte geben Sie mindestens eine Empfängeradresse an.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP-Fehler: Die folgenden Empfänger sind nicht korrekt: ';\n$PHPMAILER_LANG['signing']              = 'Fehler beim Signieren: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Verbindung zum SMTP-Server fehlgeschlagen.';\n$PHPMAILER_LANG['smtp_error']           = 'Fehler vom SMTP-Server: ';\n$PHPMAILER_LANG['variable_set']         = 'Kann Variable nicht setzen oder zurücksetzen: ';\n$PHPMAILER_LANG['extension_missing']    = 'Fehlende Erweiterung: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-el.php",
    "content": "<?php\n\n/**\n * Greek PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Σφάλμα: Αδυναμία πιστοποίησης (authentication).';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Σφάλμα: Αδυναμία σύνδεσης στον SMTP-Host.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Σφάλμα: Τα δεδομένα δεν έγιναν αποδεκτά.';\n$PHPMAILER_LANG['empty_message']        = 'Το E-Mail δεν έχει περιεχόμενο .';\n$PHPMAILER_LANG['encoding']             = 'Αγνωστο Encoding-Format: ';\n$PHPMAILER_LANG['execute']              = 'Αδυναμία εκτέλεσης ακόλουθης εντολής: ';\n$PHPMAILER_LANG['file_access']          = 'Αδυναμία προσπέλασης του αρχείου: ';\n$PHPMAILER_LANG['file_open']            = 'Σφάλμα Αρχείου: Δεν είναι δυνατό το άνοιγμα του ακόλουθου αρχείου: ';\n$PHPMAILER_LANG['from_failed']          = 'Η παρακάτω διεύθυνση αποστολέα δεν είναι σωστή: ';\n$PHPMAILER_LANG['instantiate']          = 'Αδυναμία εκκίνησης Mail function.';\n$PHPMAILER_LANG['invalid_address']      = 'Το μήνυμα δεν εστάλη, η διεύθυνση δεν είναι έγκυρη: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer δεν υποστηρίζεται.';\n$PHPMAILER_LANG['provide_address']      = 'Παρακαλούμε δώστε τουλάχιστον μια e-mail διεύθυνση παραλήπτη.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Σφάλμα: Οι παρακάτω διευθύνσεις παραλήπτη δεν είναι έγκυρες: ';\n$PHPMAILER_LANG['signing']              = 'Σφάλμα υπογραφής: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Αποτυχία σύνδεσης στον SMTP Server.';\n$PHPMAILER_LANG['smtp_error']           = 'Σφάλμα από τον SMTP Server: ';\n$PHPMAILER_LANG['variable_set']         = 'Αδυναμία ορισμού ή αρχικοποίησης μεταβλητής: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-eo.php",
    "content": "<?php\n\n/**\n * Esperanto PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Eraro de servilo SMTP : aŭtentigo malsukcesis.';\n$PHPMAILER_LANG['connect_host']         = 'Eraro de servilo SMTP : konektado al servilo malsukcesis.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Eraro de servilo SMTP : neĝustaj datumoj.';\n$PHPMAILER_LANG['empty_message']        = 'Teksto de mesaĝo mankas.';\n$PHPMAILER_LANG['encoding']             = 'Nekonata kodoprezento: ';\n$PHPMAILER_LANG['execute']              = 'Lanĉi rulumadon ne eblis: ';\n$PHPMAILER_LANG['file_access']          = 'Aliro al dosiero ne sukcesis: ';\n$PHPMAILER_LANG['file_open']            = 'Eraro de dosiero: malfermo neeblas: ';\n$PHPMAILER_LANG['from_failed']          = 'Jena adreso de sendinto malsukcesis: ';\n$PHPMAILER_LANG['instantiate']          = 'Genero de retmesaĝa funkcio neeblis.';\n$PHPMAILER_LANG['invalid_address']      = 'Retadreso ne validas: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mesaĝilo ne subtenata.';\n$PHPMAILER_LANG['provide_address']      = 'Vi devas tajpi almenaŭ unu recevontan retadreson.';\n$PHPMAILER_LANG['recipients_failed']    = 'Eraro de servilo SMTP : la jenaj poŝtrecivuloj kaŭzis eraron: ';\n$PHPMAILER_LANG['signing']              = 'Eraro de subskribo: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP konektado malsukcesis.';\n$PHPMAILER_LANG['smtp_error']           = 'Eraro de servilo SMTP : ';\n$PHPMAILER_LANG['variable_set']         = 'Variablo ne pravalorizeblas aŭ ne repravalorizeblas: ';\n$PHPMAILER_LANG['extension_missing']    = 'Mankas etendo: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-es.php",
    "content": "<?php\n\n/**\n * Spanish PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Matt Sturdy <matt.sturdy@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Error SMTP: Imposible autentificar.';\n$PHPMAILER_LANG['connect_host']         = 'Error SMTP: Imposible conectar al servidor SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Datos no aceptados.';\n$PHPMAILER_LANG['empty_message']        = 'El cuerpo del mensaje está vacío.';\n$PHPMAILER_LANG['encoding']             = 'Codificación desconocida: ';\n$PHPMAILER_LANG['execute']              = 'Imposible ejecutar: ';\n$PHPMAILER_LANG['file_access']          = 'Imposible acceder al archivo: ';\n$PHPMAILER_LANG['file_open']            = 'Error de Archivo: Imposible abrir el archivo: ';\n$PHPMAILER_LANG['from_failed']          = 'La(s) siguiente(s) direcciones de remitente fallaron: ';\n$PHPMAILER_LANG['instantiate']          = 'Imposible crear una instancia de la función Mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Imposible enviar: dirección de email inválido: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.';\n$PHPMAILER_LANG['provide_address']      = 'Debe proporcionar al menos una dirección de email de destino.';\n$PHPMAILER_LANG['recipients_failed']    = 'Error SMTP: Los siguientes destinos fallaron: ';\n$PHPMAILER_LANG['signing']              = 'Error al firmar: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falló.';\n$PHPMAILER_LANG['smtp_error']           = 'Error del servidor SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'No se pudo configurar la variable: ';\n$PHPMAILER_LANG['extension_missing']    = 'Extensión faltante: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-et.php",
    "content": "<?php\n\n/**\n * Estonian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Indrek Päri\n * @author Elan Ruusamäe <glen@delfi.ee>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Viga: Autoriseerimise viga.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Viga: Vigased andmed.';\n$PHPMAILER_LANG['empty_message']        = 'Tühi kirja sisu';\n$PHPMAILER_LANG[\"encoding\"]             = 'Tundmatu kodeering: ';\n$PHPMAILER_LANG['execute']              = 'Tegevus ebaõnnestus: ';\n$PHPMAILER_LANG['file_access']          = 'Pole piisavalt õiguseid järgneva faili avamiseks: ';\n$PHPMAILER_LANG['file_open']            = 'Faili Viga: Faili avamine ebaõnnestus: ';\n$PHPMAILER_LANG['from_failed']          = 'Järgnev saatja e-posti aadress on vigane: ';\n$PHPMAILER_LANG['instantiate']          = 'mail funktiooni käivitamine ebaõnnestus.';\n$PHPMAILER_LANG['invalid_address']      = 'Saatmine peatatud, e-posti address vigane: ';\n$PHPMAILER_LANG['provide_address']      = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: ';\n$PHPMAILER_LANG[\"signing\"]              = 'Viga allkirjastamisel: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() ebaõnnestus.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP serveri viga: ';\n$PHPMAILER_LANG['variable_set']         = 'Ei õnnestunud määrata või lähtestada muutujat: ';\n$PHPMAILER_LANG['extension_missing']    = 'Nõutud laiendus on puudu: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fa.php",
    "content": "<?php\n\n/**\n * Persian/Farsi PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Ali Jazayeri <jaza.ali@gmail.com>\n * @author Mohammad Hossein Mojtahedi <mhm5000@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'خطای SMTP: احراز هویت با شکست مواجه شد.';\n$PHPMAILER_LANG['connect_host']         = 'خطای SMTP: اتصال به سرور SMTP برقرار نشد.';\n$PHPMAILER_LANG['data_not_accepted']    = 'خطای SMTP: داده‌ها نا‌درست هستند.';\n$PHPMAILER_LANG['empty_message']        = 'بخش متن پیام خالی است.';\n$PHPMAILER_LANG['encoding']             = 'کد‌گذاری نا‌شناخته: ';\n$PHPMAILER_LANG['execute']              = 'امکان اجرا وجود ندارد: ';\n$PHPMAILER_LANG['file_access']          = 'امکان دسترسی به فایل وجود ندارد: ';\n$PHPMAILER_LANG['file_open']            = 'خطای File: امکان بازکردن فایل وجود ندارد: ';\n$PHPMAILER_LANG['from_failed']          = 'آدرس فرستنده اشتباه است: ';\n$PHPMAILER_LANG['instantiate']          = 'امکان معرفی تابع ایمیل وجود ندارد.';\n$PHPMAILER_LANG['invalid_address']      = 'آدرس ایمیل معتبر نیست: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer پشتیبانی نمی‌شود.';\n$PHPMAILER_LANG['provide_address']      = 'باید حداقل یک آدرس گیرنده وارد کنید.';\n$PHPMAILER_LANG['recipients_failed']    = 'خطای SMTP: ارسال به آدرس گیرنده با خطا مواجه شد: ';\n$PHPMAILER_LANG['signing']              = 'خطا در امضا: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'خطا در اتصال به SMTP.';\n$PHPMAILER_LANG['smtp_error']           = 'خطا در SMTP Server: ';\n$PHPMAILER_LANG['variable_set']         = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: ';\n$PHPMAILER_LANG['extension_missing']    = 'افزونه موجود نیست: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php",
    "content": "<?php\n\n/**\n * Finnish PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Jyry Kuukanen\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP-virhe: käyttäjätunnistus epäonnistui.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP-virhe: yhteys palvelimeen ei onnistu.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-virhe: data on virheellinen.';\n//$PHPMAILER_LANG['empty_message']        = 'Message body empty';\n$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';\n$PHPMAILER_LANG['execute']              = 'Suoritus epäonnistui: ';\n$PHPMAILER_LANG['file_access']          = 'Seuraavaan tiedostoon ei ole oikeuksia: ';\n$PHPMAILER_LANG['file_open']            = 'Tiedostovirhe: Ei voida avata tiedostoa: ';\n$PHPMAILER_LANG['from_failed']          = 'Seuraava lähettäjän osoite on virheellinen: ';\n$PHPMAILER_LANG['instantiate']          = 'mail-funktion luonti epäonnistui.';\n//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';\n$PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.';\n$PHPMAILER_LANG['provide_address']      = 'Aseta vähintään yksi vastaanottajan sähk&ouml;postiosoite.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.';\n$PHPMAILER_LANG['encoding']             = 'Tuntematon koodaustyyppi: ';\n//$PHPMAILER_LANG['signing']              = 'Signing Error: ';\n//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';\n//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';\n//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fo.php",
    "content": "<?php\n\n/**\n * Faroese PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Dávur Sørensen <http://www.profo-webdesign.dk>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP feilur: Kundi ikki góðkenna.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP feilur: Data ikki góðkent.';\n//$PHPMAILER_LANG['empty_message']        = 'Message body empty';\n$PHPMAILER_LANG['encoding']             = 'Ókend encoding: ';\n$PHPMAILER_LANG['execute']              = 'Kundi ikki útføra: ';\n$PHPMAILER_LANG['file_access']          = 'Kundi ikki tilganga fílu: ';\n$PHPMAILER_LANG['file_open']            = 'Fílu feilur: Kundi ikki opna fílu: ';\n$PHPMAILER_LANG['from_failed']          = 'fylgjandi Frá/From adressa miseydnaðist: ';\n$PHPMAILER_LANG['instantiate']          = 'Kuni ikki instantiera mail funktión.';\n//$PHPMAILER_LANG['invalid_address']      = 'Invalid address: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.';\n$PHPMAILER_LANG['provide_address']      = 'Tú skal uppgeva minst móttakara-emailadressu(r).';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: ';\n//$PHPMAILER_LANG['signing']              = 'Signing Error: ';\n//$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';\n//$PHPMAILER_LANG['smtp_error']           = 'SMTP server error: ';\n//$PHPMAILER_LANG['variable_set']         = 'Cannot set or reset variable: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php",
    "content": "<?php\n\n/**\n * French PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * Some French punctuation requires a thin non-breaking space (U+202F) character before it,\n * for example before a colon or exclamation mark.\n * There is one of these characters between these quotes: \" \"\n * @see http://unicode.org/udhr/n/notes_fra.html\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Erreur SMTP : échec de l’authentification.';\n$PHPMAILER_LANG['buggy_php']            = 'Votre version de PHP est affectée par un bug qui peut entraîner des messages corrompus. Pour résoudre ce problème, passez à l’envoi par SMTP, désactivez l’option mail.add_x_header dans le fichier php.ini, passez à MacOS ou Linux, ou passez PHP à la version 7.0.17+ ou 7.1.3+.';\n$PHPMAILER_LANG['connect_host']         = 'Erreur SMTP : impossible de se connecter au serveur SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Erreur SMTP : données incorrectes.';\n$PHPMAILER_LANG['empty_message']        = 'Corps du message vide.';\n$PHPMAILER_LANG['encoding']             = 'Encodage inconnu : ';\n$PHPMAILER_LANG['execute']              = 'Impossible de lancer l’exécution : ';\n$PHPMAILER_LANG['extension_missing']    = 'Extension manquante : ';\n$PHPMAILER_LANG['file_access']          = 'Impossible d’accéder au fichier : ';\n$PHPMAILER_LANG['file_open']            = 'Ouverture du fichier impossible : ';\n$PHPMAILER_LANG['from_failed']          = 'L’adresse d’expéditeur suivante a échoué : ';\n$PHPMAILER_LANG['instantiate']          = 'Impossible d’instancier la fonction mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Adresse courriel non valide : ';\n$PHPMAILER_LANG['invalid_header']       = 'Nom ou valeur de l’en-tête non valide';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Entrée d’hôte non valide : ';\n$PHPMAILER_LANG['invalid_host']         = 'Hôte non valide : ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';\n$PHPMAILER_LANG['provide_address']      = 'Vous devez fournir au moins une adresse de destinataire.';\n$PHPMAILER_LANG['recipients_failed']    = 'Erreur SMTP : les destinataires suivants ont échoué : ';\n$PHPMAILER_LANG['signing']              = 'Erreur de signature : ';\n$PHPMAILER_LANG['smtp_code']            = 'Code SMTP : ';\n$PHPMAILER_LANG['smtp_code_ex']         = 'Informations supplémentaires SMTP : ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'La fonction SMTP connect() a échouée.';\n$PHPMAILER_LANG['smtp_detail']          = 'Détails : ';\n$PHPMAILER_LANG['smtp_error']           = 'Erreur du serveur SMTP : ';\n$PHPMAILER_LANG['variable_set']         = 'Impossible d’initialiser ou de réinitialiser une variable : ';\n$PHPMAILER_LANG['extension_missing']    = 'Extension manquante : ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-gl.php",
    "content": "<?php\n\n/**\n * Galician PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author by Donato Rouco <donatorouco@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Erro SMTP: Non puido ser autentificado.';\n$PHPMAILER_LANG['connect_host']         = 'Erro SMTP: Non puido conectar co servidor SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Erro SMTP: Datos non aceptados.';\n$PHPMAILER_LANG['empty_message']        = 'Corpo da mensaxe vacía';\n$PHPMAILER_LANG['encoding']             = 'Codificación descoñecida: ';\n$PHPMAILER_LANG['execute']              = 'Non puido ser executado: ';\n$PHPMAILER_LANG['file_access']          = 'Nob puido acceder ó arquivo: ';\n$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: No puido abrir o arquivo: ';\n$PHPMAILER_LANG['from_failed']          = 'A(s) seguinte(s) dirección(s) de remitente(s) deron erro: ';\n$PHPMAILER_LANG['instantiate']          = 'Non puido crear unha instancia da función Mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Non puido envia-lo correo: dirección de email inválida: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer non está soportado.';\n$PHPMAILER_LANG['provide_address']      = 'Debe engadir polo menos unha dirección de email coma destino.';\n$PHPMAILER_LANG['recipients_failed']    = 'Erro SMTP: Os seguintes destinos fallaron: ';\n$PHPMAILER_LANG['signing']              = 'Erro ó firmar: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallou.';\n$PHPMAILER_LANG['smtp_error']           = 'Erro do servidor SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Non puidemos axustar ou reaxustar a variábel: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-he.php",
    "content": "<?php\n\n/**\n * Hebrew PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Ronny Sherer <ronny@hoojima.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'שגיאת SMTP: פעולת האימות נכשלה.';\n$PHPMAILER_LANG['connect_host']         = 'שגיאת SMTP: לא הצלחתי להתחבר לשרת SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'שגיאת SMTP: מידע לא התקבל.';\n$PHPMAILER_LANG['empty_message']        = 'גוף ההודעה ריק';\n$PHPMAILER_LANG['invalid_address']      = 'כתובת שגויה: ';\n$PHPMAILER_LANG['encoding']             = 'קידוד לא מוכר: ';\n$PHPMAILER_LANG['execute']              = 'לא הצלחתי להפעיל את: ';\n$PHPMAILER_LANG['file_access']          = 'לא ניתן לגשת לקובץ: ';\n$PHPMAILER_LANG['file_open']            = 'שגיאת קובץ: לא ניתן לגשת לקובץ: ';\n$PHPMAILER_LANG['from_failed']          = 'כתובות הנמענים הבאות נכשלו: ';\n$PHPMAILER_LANG['instantiate']          = 'לא הצלחתי להפעיל את פונקציית המייל.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' אינה נתמכת.';\n$PHPMAILER_LANG['provide_address']      = 'חובה לספק לפחות כתובת אחת של מקבל המייל.';\n$PHPMAILER_LANG['recipients_failed']    = 'שגיאת SMTP: הנמענים הבאים נכשלו: ';\n$PHPMAILER_LANG['signing']              = 'שגיאת חתימה: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() failed.';\n$PHPMAILER_LANG['smtp_error']           = 'שגיאת שרת SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'לא ניתן לקבוע או לשנות את המשתנה: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hi.php",
    "content": "<?php\n\n/**\n * Hindi PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Yash Karanke <mr.karanke@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP त्रुटि: प्रामाणिकता की जांच नहीं हो सका। ';\n$PHPMAILER_LANG['connect_host']         = 'SMTP त्रुटि: SMTP सर्वर से कनेक्ट नहीं हो सका। ';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP त्रुटि: डेटा स्वीकार नहीं किया जाता है। ';\n$PHPMAILER_LANG['empty_message']        = 'संदेश खाली है। ';\n$PHPMAILER_LANG['encoding']             = 'अज्ञात एन्कोडिंग प्रकार। ';\n$PHPMAILER_LANG['execute']              = 'आदेश को निष्पादित करने में विफल। ';\n$PHPMAILER_LANG['file_access']          = 'फ़ाइल उपलब्ध नहीं है। ';\n$PHPMAILER_LANG['file_open']            = 'फ़ाइल त्रुटि: फाइल को खोला नहीं जा सका। ';\n$PHPMAILER_LANG['from_failed']          = 'प्रेषक का पता गलत है। ';\n$PHPMAILER_LANG['instantiate']          = 'मेल फ़ंक्शन कॉल नहीं कर सकता है।';\n$PHPMAILER_LANG['invalid_address']      = 'पता गलत है। ';\n$PHPMAILER_LANG['mailer_not_supported'] = 'मेल सर्वर के साथ काम नहीं करता है। ';\n$PHPMAILER_LANG['provide_address']      = 'आपको कम से कम एक प्राप्तकर्ता का ई-मेल पता प्रदान करना होगा।';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP त्रुटि: निम्न प्राप्तकर्ताओं को पते भेजने में विफल। ';\n$PHPMAILER_LANG['signing']              = 'साइनअप त्रुटि:। ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP का connect () फ़ंक्शन विफल हुआ। ';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP सर्वर त्रुटि। ';\n$PHPMAILER_LANG['variable_set']         = 'चर को बना या संशोधित नहीं किया जा सकता। ';\n$PHPMAILER_LANG['extension_missing']    = 'एक्सटेन्षन गायब है: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hr.php",
    "content": "<?php\n\n/**\n * Croatian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Hrvoj3e <hrvoj3e@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela autentikacija.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Ne mogu se spojiti na SMTP poslužitelj.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';\n$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';\n$PHPMAILER_LANG['encoding']             = 'Nepoznati encoding: ';\n$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';\n$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';\n$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';\n$PHPMAILER_LANG['from_failed']          = 'SMTP Greška: Slanje s navedenih e-mail adresa nije uspjelo: ';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Greška: Slanje na navedenih e-mail adresa nije uspjelo: ';\n$PHPMAILER_LANG['instantiate']          = 'Ne mogu pokrenuti mail funkcionalnost.';\n$PHPMAILER_LANG['invalid_address']      = 'E-mail nije poslan. Neispravna e-mail adresa: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nije podržan.';\n$PHPMAILER_LANG['provide_address']      = 'Definirajte barem jednu adresu primatelja.';\n$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Spajanje na SMTP poslužitelj nije uspjelo.';\n$PHPMAILER_LANG['smtp_error']           = 'Greška SMTP poslužitelja: ';\n$PHPMAILER_LANG['variable_set']         = 'Ne mogu postaviti varijablu niti ju vratiti nazad: ';\n$PHPMAILER_LANG['extension_missing']    = 'Nedostaje proširenje: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hu.php",
    "content": "<?php\n\n/**\n * Hungarian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author @dominicus-75\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP hiba: az azonosítás sikertelen.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP hiba: nem lehet kapcsolódni az SMTP-szerverhez.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP hiba: adatok visszautasítva.';\n$PHPMAILER_LANG['empty_message']        = 'Üres az üzenettörzs.';\n$PHPMAILER_LANG['encoding']             = 'Ismeretlen kódolás: ';\n$PHPMAILER_LANG['execute']              = 'Nem lehet végrehajtani: ';\n$PHPMAILER_LANG['file_access']          = 'A következő fájl nem elérhető: ';\n$PHPMAILER_LANG['file_open']            = 'Fájl hiba: a következő fájlt nem lehet megnyitni: ';\n$PHPMAILER_LANG['from_failed']          = 'A feladóként megadott következő cím hibás: ';\n$PHPMAILER_LANG['instantiate']          = 'A PHP mail() függvényt nem sikerült végrehajtani.';\n$PHPMAILER_LANG['invalid_address']      = 'Érvénytelen cím: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' a mailer-osztály nem támogatott.';\n$PHPMAILER_LANG['provide_address']      = 'Legalább egy címzettet fel kell tüntetni.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP hiba: a címzettként megadott következő címek hibásak: ';\n$PHPMAILER_LANG['signing']              = 'Hibás aláírás: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Hiba az SMTP-kapcsolatban.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP-szerver hiba: ';\n$PHPMAILER_LANG['variable_set']         = 'A következő változók beállítása nem sikerült: ';\n$PHPMAILER_LANG['extension_missing']    = 'Bővítmény hiányzik: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-hy.php",
    "content": "<?php\n\n/**\n * Armenian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Hrayr Grigoryan <hrayr@bits.am>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP -ի սխալ: չհաջողվեց ստուգել իսկությունը.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP -ի սխալ: չհաջողվեց կապ հաստատել SMTP սերվերի հետ.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP -ի սխալ: տվյալները ընդունված չեն.';\n$PHPMAILER_LANG['empty_message']        = 'Հաղորդագրությունը դատարկ է';\n$PHPMAILER_LANG['encoding']             = 'Կոդավորման անհայտ տեսակ: ';\n$PHPMAILER_LANG['execute']              = 'Չհաջողվեց իրականացնել հրամանը: ';\n$PHPMAILER_LANG['file_access']          = 'Ֆայլը հասանելի չէ: ';\n$PHPMAILER_LANG['file_open']            = 'Ֆայլի սխալ: ֆայլը չհաջողվեց բացել: ';\n$PHPMAILER_LANG['from_failed']          = 'Ուղարկողի հետևյալ հասցեն սխալ է: ';\n$PHPMAILER_LANG['instantiate']          = 'Հնարավոր չէ կանչել mail ֆունկցիան.';\n$PHPMAILER_LANG['invalid_address']      = 'Հասցեն սխալ է: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' փոստային սերվերի հետ չի աշխատում.';\n$PHPMAILER_LANG['provide_address']      = 'Անհրաժեշտ է տրամադրել գոնե մեկ ստացողի e-mail հասցե.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP -ի սխալ: չի հաջողվել ուղարկել հետևյալ ստացողների հասցեներին: ';\n$PHPMAILER_LANG['signing']              = 'Ստորագրման սխալ: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP -ի connect() ֆունկցիան չի հաջողվել';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP սերվերի սխալ: ';\n$PHPMAILER_LANG['variable_set']         = 'Չի հաջողվում ստեղծել կամ վերափոխել փոփոխականը: ';\n$PHPMAILER_LANG['extension_missing']    = 'Հավելվածը բացակայում է: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-id.php",
    "content": "<?php\n\n/**\n * Indonesian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Cecep Prawiro <cecep.prawiro@gmail.com>\n * @author @januridp\n * @author Ian Mustafa <mail@ianmustafa.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Kesalahan SMTP: Tidak dapat mengotentikasi.';\n$PHPMAILER_LANG['connect_host']         = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Kesalahan SMTP: Data tidak diterima.';\n$PHPMAILER_LANG['empty_message']        = 'Isi pesan kosong';\n$PHPMAILER_LANG['encoding']             = 'Pengkodean karakter tidak dikenali: ';\n$PHPMAILER_LANG['execute']              = 'Tidak dapat menjalankan proses: ';\n$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses berkas: ';\n$PHPMAILER_LANG['file_open']            = 'Kesalahan Berkas: Berkas tidak dapat dibuka: ';\n$PHPMAILER_LANG['from_failed']          = 'Alamat pengirim berikut mengakibatkan kesalahan: ';\n$PHPMAILER_LANG['instantiate']          = 'Tidak dapat menginisialisasi fungsi surel.';\n$PHPMAILER_LANG['invalid_address']      = 'Gagal terkirim, alamat surel tidak sesuai: ';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Gagal terkirim, entri host tidak sesuai: ';\n$PHPMAILER_LANG['invalid_host']         = 'Gagal terkirim, host tidak sesuai: ';\n$PHPMAILER_LANG['provide_address']      = 'Harus tersedia minimal satu alamat tujuan';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung';\n$PHPMAILER_LANG['recipients_failed']    = 'Kesalahan SMTP: Alamat tujuan berikut menyebabkan kesalahan: ';\n$PHPMAILER_LANG['signing']              = 'Kesalahan dalam penandatangan SSL: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() gagal.';\n$PHPMAILER_LANG['smtp_error']           = 'Kesalahan pada pelayan SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Tidak dapat mengatur atau mengatur ulang variabel: ';\n$PHPMAILER_LANG['extension_missing']    = 'Ekstensi PHP tidak tersedia: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-it.php",
    "content": "<?php\n\n/**\n * Italian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Ilias Bartolini <brain79@inwind.it>\n * @author Stefano Sabatini <sabas88@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Impossibile autenticarsi.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Impossibile connettersi all\\'host SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dati non accettati dal server.';\n$PHPMAILER_LANG['empty_message']        = 'Il corpo del messaggio è vuoto';\n$PHPMAILER_LANG['encoding']             = 'Codifica dei caratteri sconosciuta: ';\n$PHPMAILER_LANG['execute']              = 'Impossibile eseguire l\\'operazione: ';\n$PHPMAILER_LANG['file_access']          = 'Impossibile accedere al file: ';\n$PHPMAILER_LANG['file_open']            = 'File Error: Impossibile aprire il file: ';\n$PHPMAILER_LANG['from_failed']          = 'I seguenti indirizzi mittenti hanno generato errore: ';\n$PHPMAILER_LANG['instantiate']          = 'Impossibile istanziare la funzione mail';\n$PHPMAILER_LANG['invalid_address']      = 'Impossibile inviare, l\\'indirizzo email non è valido: ';\n$PHPMAILER_LANG['provide_address']      = 'Deve essere fornito almeno un indirizzo ricevente';\n$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: I seguenti indirizzi destinatari hanno generato un errore: ';\n$PHPMAILER_LANG['signing']              = 'Errore nella firma: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() fallita.';\n$PHPMAILER_LANG['smtp_error']           = 'Errore del server SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Impossibile impostare o resettare la variabile: ';\n$PHPMAILER_LANG['extension_missing']    = 'Estensione mancante: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ja.php",
    "content": "<?php\n\n/**\n * Japanese PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Mitsuhiro Yoshida <http://mitstek.com/>\n * @author Yoshi Sakai <http://bluemooninc.jp/>\n * @author Arisophy <https://github.com/arisophy/>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTPエラー: 認証できませんでした。';\n$PHPMAILER_LANG['connect_host']         = 'SMTPエラー: SMTPホストに接続できませんでした。';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTPエラー: データが受け付けられませんでした。';\n$PHPMAILER_LANG['empty_message']        = 'メール本文が空です。';\n$PHPMAILER_LANG['encoding']             = '不明なエンコーディング: ';\n$PHPMAILER_LANG['execute']              = '実行できませんでした: ';\n$PHPMAILER_LANG['file_access']          = 'ファイルにアクセスできません: ';\n$PHPMAILER_LANG['file_open']            = 'ファイルエラー: ファイルを開けません: ';\n$PHPMAILER_LANG['from_failed']          = 'Fromアドレスを登録する際にエラーが発生しました: ';\n$PHPMAILER_LANG['instantiate']          = 'メール関数が正常に動作しませんでした。';\n$PHPMAILER_LANG['invalid_address']      = '不正なメールアドレス: ';\n$PHPMAILER_LANG['provide_address']      = '少なくとも1つメールアドレスを 指定する必要があります。';\n$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: ';\n$PHPMAILER_LANG['signing']              = '署名エラー: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP接続に失敗しました。';\n$PHPMAILER_LANG['smtp_error']           = 'SMTPサーバーエラー: ';\n$PHPMAILER_LANG['variable_set']         = '変数が存在しません: ';\n$PHPMAILER_LANG['extension_missing']    = '拡張機能が見つかりません: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ka.php",
    "content": "<?php\n\n/**\n * Georgian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Avtandil Kikabidze aka LONGMAN <akalongman@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP შეცდომა: ავტორიზაცია შეუძლებელია.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP შეცდომა: SMTP სერვერთან დაკავშირება შეუძლებელია.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP შეცდომა: მონაცემები არ იქნა მიღებული.';\n$PHPMAILER_LANG['encoding']             = 'კოდირების უცნობი ტიპი: ';\n$PHPMAILER_LANG['execute']              = 'შეუძლებელია შემდეგი ბრძანების შესრულება: ';\n$PHPMAILER_LANG['file_access']          = 'შეუძლებელია წვდომა ფაილთან: ';\n$PHPMAILER_LANG['file_open']            = 'ფაილური სისტემის შეცდომა: არ იხსნება ფაილი: ';\n$PHPMAILER_LANG['from_failed']          = 'გამგზავნის არასწორი მისამართი: ';\n$PHPMAILER_LANG['instantiate']          = 'mail ფუნქციის გაშვება ვერ ხერხდება.';\n$PHPMAILER_LANG['provide_address']      = 'გთხოვთ მიუთითოთ ერთი ადრესატის e-mail მისამართი მაინც.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' - საფოსტო სერვერის მხარდაჭერა არ არის.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP შეცდომა: შემდეგ მისამართებზე გაგზავნა ვერ მოხერხდა: ';\n$PHPMAILER_LANG['empty_message']        = 'შეტყობინება ცარიელია';\n$PHPMAILER_LANG['invalid_address']      = 'არ გაიგზავნა, e-mail მისამართის არასწორი ფორმატი: ';\n$PHPMAILER_LANG['signing']              = 'ხელმოწერის შეცდომა: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'შეცდომა SMTP სერვერთან დაკავშირებისას';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP სერვერის შეცდომა: ';\n$PHPMAILER_LANG['variable_set']         = 'შეუძლებელია შემდეგი ცვლადის შექმნა ან შეცვლა: ';\n$PHPMAILER_LANG['extension_missing']    = 'ბიბლიოთეკა არ არსებობს: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ko.php",
    "content": "<?php\n\n/**\n * Korean PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author ChalkPE <amato0617@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP 오류: 인증할 수 없습니다.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP 오류: SMTP 호스트에 접속할 수 없습니다.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 오류: 데이터가 받아들여지지 않았습니다.';\n$PHPMAILER_LANG['empty_message']        = '메세지 내용이 없습니다';\n$PHPMAILER_LANG['encoding']             = '알 수 없는 인코딩: ';\n$PHPMAILER_LANG['execute']              = '실행 불가: ';\n$PHPMAILER_LANG['file_access']          = '파일 접근 불가: ';\n$PHPMAILER_LANG['file_open']            = '파일 오류: 파일을 열 수 없습니다: ';\n$PHPMAILER_LANG['from_failed']          = '다음 From 주소에서 오류가 발생했습니다: ';\n$PHPMAILER_LANG['instantiate']          = 'mail 함수를 인스턴스화할 수 없습니다';\n$PHPMAILER_LANG['invalid_address']      = '잘못된 주소: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' 메일러는 지원되지 않습니다.';\n$PHPMAILER_LANG['provide_address']      = '적어도 한 개 이상의 수신자 메일 주소를 제공해야 합니다.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP 오류: 다음 수신자에서 오류가 발생했습니다: ';\n$PHPMAILER_LANG['signing']              = '서명 오류: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 연결을 실패하였습니다.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP 서버 오류: ';\n$PHPMAILER_LANG['variable_set']         = '변수 설정 및 초기화 불가: ';\n$PHPMAILER_LANG['extension_missing']    = '확장자 없음: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lt.php",
    "content": "<?php\n\n/**\n * Lithuanian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Dainius Kaupaitis <dk@sum.lt>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP klaida: autentifikacija nepavyko.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP klaida: nepavyksta prisijungti prie SMTP stoties.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP klaida: duomenys nepriimti.';\n$PHPMAILER_LANG['empty_message']        = 'Laiško turinys tuščias';\n$PHPMAILER_LANG['encoding']             = 'Neatpažinta koduotė: ';\n$PHPMAILER_LANG['execute']              = 'Nepavyko įvykdyti komandos: ';\n$PHPMAILER_LANG['file_access']          = 'Byla nepasiekiama: ';\n$PHPMAILER_LANG['file_open']            = 'Bylos klaida: Nepavyksta atidaryti: ';\n$PHPMAILER_LANG['from_failed']          = 'Neteisingas siuntėjo adresas: ';\n$PHPMAILER_LANG['instantiate']          = 'Nepavyko paleisti mail funkcijos.';\n$PHPMAILER_LANG['invalid_address']      = 'Neteisingas adresas: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' pašto stotis nepalaikoma.';\n$PHPMAILER_LANG['provide_address']      = 'Nurodykite bent vieną gavėjo adresą.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP klaida: nepavyko išsiųsti šiems gavėjams: ';\n$PHPMAILER_LANG['signing']              = 'Prisijungimo klaida: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP susijungimo klaida';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP stoties klaida: ';\n$PHPMAILER_LANG['variable_set']         = 'Nepavyko priskirti reikšmės kintamajam: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-lv.php",
    "content": "<?php\n\n/**\n * Latvian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Eduards M. <e@npd.lv>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP kļūda: Autorizācija neizdevās.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Kļūda: Nevar izveidot savienojumu ar SMTP serveri.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Kļūda: Nepieņem informāciju.';\n$PHPMAILER_LANG['empty_message']        = 'Ziņojuma teksts ir tukšs';\n$PHPMAILER_LANG['encoding']             = 'Neatpazīts kodējums: ';\n$PHPMAILER_LANG['execute']              = 'Neizdevās izpildīt komandu: ';\n$PHPMAILER_LANG['file_access']          = 'Fails nav pieejams: ';\n$PHPMAILER_LANG['file_open']            = 'Faila kļūda: Nevar atvērt failu: ';\n$PHPMAILER_LANG['from_failed']          = 'Nepareiza sūtītāja adrese: ';\n$PHPMAILER_LANG['instantiate']          = 'Nevar palaist sūtīšanas funkciju.';\n$PHPMAILER_LANG['invalid_address']      = 'Nepareiza adrese: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' sūtītājs netiek atbalstīts.';\n$PHPMAILER_LANG['provide_address']      = 'Lūdzu, norādiet vismaz vienu adresātu.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP kļūda: neizdevās nosūtīt šādiem saņēmējiem: ';\n$PHPMAILER_LANG['signing']              = 'Autorizācijas kļūda: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP savienojuma kļūda';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP servera kļūda: ';\n$PHPMAILER_LANG['variable_set']         = 'Nevar piešķirt mainīgā vērtību: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-mg.php",
    "content": "<?php\n\n/**\n * Malagasy PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Hackinet <piyushjha8164@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Hadisoana SMTP: Tsy nahomby ny fanamarinana.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Tsy afaka mampifandray amin\\'ny mpampiantrano SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP diso: tsy voarakitra ny angona.';\n$PHPMAILER_LANG['empty_message']        = 'Tsy misy ny votoaty mailaka.';\n$PHPMAILER_LANG['encoding']             = 'Tsy fantatra encoding: ';\n$PHPMAILER_LANG['execute']              = 'Tsy afaka manatanteraka ity baiko manaraka ity: ';\n$PHPMAILER_LANG['file_access']          = 'Tsy nahomby ny fidirana amin\\'ity rakitra ity: ';\n$PHPMAILER_LANG['file_open']            = 'Hadisoana diso: Tsy afaka nanokatra ity file manaraka ity: ';\n$PHPMAILER_LANG['from_failed']          = 'Ny adiresy iraka manaraka dia diso: ';\n$PHPMAILER_LANG['instantiate']          = 'Tsy afaka nanomboka ny hetsika mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Tsy mety ny adiresy: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tsy manohana.';\n$PHPMAILER_LANG['provide_address']      = 'Alefaso azafady iray adiresy iray farafahakeliny.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Tsy mety ireo mpanaraka ireto: ';\n$PHPMAILER_LANG['signing']              = 'Error nandritra ny sonia:';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Tsy nahomby ny fifandraisana tamin\\'ny server SMTP.';\n$PHPMAILER_LANG['smtp_error']           = 'Fahadisoana tamin\\'ny server SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Tsy azo atao ny mametraka na mamerina ny variable: ';\n$PHPMAILER_LANG['extension_missing']    = 'Tsy hita ny ampahany: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ms.php",
    "content": "<?php\n\n/**\n * Malaysian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Nawawi Jamili <nawawi@rutweb.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Ralat SMTP: Tidak dapat pengesahan.';\n$PHPMAILER_LANG['connect_host']         = 'Ralat SMTP: Tidak dapat menghubungi hos pelayan SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Ralat SMTP: Data tidak diterima oleh pelayan.';\n$PHPMAILER_LANG['empty_message']        = 'Tiada isi untuk mesej';\n$PHPMAILER_LANG['encoding']             = 'Pengekodan tidak diketahui: ';\n$PHPMAILER_LANG['execute']              = 'Tidak dapat melaksanakan: ';\n$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses fail: ';\n$PHPMAILER_LANG['file_open']            = 'Ralat Fail: Tidak dapat membuka fail: ';\n$PHPMAILER_LANG['from_failed']          = 'Berikut merupakan ralat dari alamat e-mel: ';\n$PHPMAILER_LANG['instantiate']          = 'Tidak dapat memberi contoh fungsi e-mel.';\n$PHPMAILER_LANG['invalid_address']      = 'Alamat emel tidak sah: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' jenis penghantar emel tidak disokong.';\n$PHPMAILER_LANG['provide_address']      = 'Anda perlu menyediakan sekurang-kurangnya satu alamat e-mel penerima.';\n$PHPMAILER_LANG['recipients_failed']    = 'Ralat SMTP: Penerima e-mel berikut telah gagal: ';\n$PHPMAILER_LANG['signing']              = 'Ralat pada tanda tangan: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() telah gagal.';\n$PHPMAILER_LANG['smtp_error']           = 'Ralat pada pelayan SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: ';\n$PHPMAILER_LANG['extension_missing']    = 'Sambungan hilang: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php",
    "content": "<?php\n\n/**\n * Norwegian Bokmål PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Feil: Kunne ikke autentisere.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Feil: Kunne ikke koble til SMTP tjener.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Feil: Datainnhold ikke akseptert.';\n$PHPMAILER_LANG['empty_message']        = 'Meldingsinnhold mangler';\n$PHPMAILER_LANG['encoding']             = 'Ukjent koding: ';\n$PHPMAILER_LANG['execute']              = 'Kunne ikke utføre: ';\n$PHPMAILER_LANG['file_access']          = 'Får ikke tilgang til filen: ';\n$PHPMAILER_LANG['file_open']            = 'Fil Feil: Kunne ikke åpne filen: ';\n$PHPMAILER_LANG['from_failed']          = 'Følgende Frå adresse feilet: ';\n$PHPMAILER_LANG['instantiate']          = 'Kunne ikke initialisere post funksjon.';\n$PHPMAILER_LANG['invalid_address']      = 'Ugyldig adresse: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' sender er ikke støttet.';\n$PHPMAILER_LANG['provide_address']      = 'Du må opppgi minst en mottakeradresse.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Feil: Følgende mottakeradresse feilet: ';\n$PHPMAILER_LANG['signing']              = 'Signering Feil: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP connect() feilet.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP server feil: ';\n$PHPMAILER_LANG['variable_set']         = 'Kan ikke skrive eller omskrive variabel: ';\n$PHPMAILER_LANG['extension_missing']    = 'Utvidelse mangler: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-nl.php",
    "content": "<?php\n\n/**\n * Dutch PHPMailer language file: refer to PHPMailer.php for definitive list.\n * @package PHPMailer\n * @author Tuxion <team@tuxion.nl>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP-fout: authenticatie mislukt.';\n$PHPMAILER_LANG['buggy_php']            = 'PHP versie gededecteerd die onderhavig is aan een bug die kan resulteren in gecorrumpeerde berichten. Om dit te voorkomen, gebruik SMTP voor het verzenden van berichten, zet de mail.add_x_header optie in uw php.ini file uit, gebruik MacOS of Linux, of pas de gebruikte PHP versie aan naar versie 7.0.17+ or 7.1.3+.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP-fout: kon niet verbinden met SMTP-host.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP-fout: data niet geaccepteerd.';\n$PHPMAILER_LANG['empty_message']        = 'Berichttekst is leeg';\n$PHPMAILER_LANG['encoding']             = 'Onbekende codering: ';\n$PHPMAILER_LANG['execute']              = 'Kon niet uitvoeren: ';\n$PHPMAILER_LANG['extension_missing']    = 'Extensie afwezig: ';\n$PHPMAILER_LANG['file_access']          = 'Kreeg geen toegang tot bestand: ';\n$PHPMAILER_LANG['file_open']            = 'Bestandsfout: kon bestand niet openen: ';\n$PHPMAILER_LANG['from_failed']          = 'Het volgende afzendersadres is mislukt: ';\n$PHPMAILER_LANG['instantiate']          = 'Kon mailfunctie niet initialiseren.';\n$PHPMAILER_LANG['invalid_address']      = 'Ongeldig adres: ';\n$PHPMAILER_LANG['invalid_header']       = 'Ongeldige header naam of waarde';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Ongeldige hostentry: ';\n$PHPMAILER_LANG['invalid_host']         = 'Ongeldige host: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';\n$PHPMAILER_LANG['provide_address']      = 'Er moet minstens één ontvanger worden opgegeven.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP-fout: de volgende ontvangers zijn mislukt: ';\n$PHPMAILER_LANG['signing']              = 'Signeerfout: ';\n$PHPMAILER_LANG['smtp_code']            = 'SMTP code: ';\n$PHPMAILER_LANG['smtp_code_ex']         = 'Aanvullende SMTP informatie: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Verbinding mislukt.';\n$PHPMAILER_LANG['smtp_detail']          = 'Detail: ';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfout: ';\n$PHPMAILER_LANG['variable_set']         = 'Kan de volgende variabele niet instellen of resetten: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pl.php",
    "content": "<?php\n\n/**\n * Polish PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Błąd SMTP: Nie można przeprowadzić uwierzytelnienia.';\n$PHPMAILER_LANG['connect_host']         = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Błąd SMTP: Dane nie zostały przyjęte.';\n$PHPMAILER_LANG['empty_message']        = 'Wiadomość jest pusta.';\n$PHPMAILER_LANG['encoding']             = 'Nieznany sposób kodowania znaków: ';\n$PHPMAILER_LANG['execute']              = 'Nie można uruchomić: ';\n$PHPMAILER_LANG['file_access']          = 'Brak dostępu do pliku: ';\n$PHPMAILER_LANG['file_open']            = 'Nie można otworzyć pliku: ';\n$PHPMAILER_LANG['from_failed']          = 'Następujący adres Nadawcy jest nieprawidłowy: ';\n$PHPMAILER_LANG['instantiate']          = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';\n$PHPMAILER_LANG['invalid_address']      = 'Nie można wysłać wiadomości, ' .\n    'następujący adres Odbiorcy jest nieprawidłowy: ';\n$PHPMAILER_LANG['provide_address']      = 'Należy podać prawidłowy adres email Odbiorcy.';\n$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';\n$PHPMAILER_LANG['recipients_failed']    = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ';\n$PHPMAILER_LANG['signing']              = 'Błąd podpisywania wiadomości: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zakończone niepowodzeniem.';\n$PHPMAILER_LANG['smtp_error']           = 'Błąd SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Nie można ustawić lub zmodyfikować zmiennej: ';\n$PHPMAILER_LANG['extension_missing']    = 'Brakujące rozszerzenie: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt.php",
    "content": "<?php\n\n/**\n * Portuguese (European) PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Jonadabe <jonadabe@hotmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Erro do SMTP: Não foi possível realizar a autenticação.';\n$PHPMAILER_LANG['connect_host']         = 'Erro do SMTP: Não foi possível realizar ligação com o servidor SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Erro do SMTP: Os dados foram rejeitados.';\n$PHPMAILER_LANG['empty_message']        = 'A mensagem no e-mail está vazia.';\n$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';\n$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';\n$PHPMAILER_LANG['file_access']          = 'Não foi possível aceder o ficheiro: ';\n$PHPMAILER_LANG['file_open']            = 'Abertura do ficheiro: Não foi possível abrir o ficheiro: ';\n$PHPMAILER_LANG['from_failed']          = 'Ocorreram falhas nos endereços dos seguintes remententes: ';\n$PHPMAILER_LANG['instantiate']          = 'Não foi possível iniciar uma instância da função mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Não foi enviado nenhum e-mail para o endereço de e-mail inválido: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';\n$PHPMAILER_LANG['provide_address']      = 'Tem de fornecer pelo menos um endereço como destinatário do e-mail.';\n$PHPMAILER_LANG['recipients_failed']    = 'Erro do SMTP: O endereço do seguinte destinatário falhou: ';\n$PHPMAILER_LANG['signing']              = 'Erro ao assinar: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';\n$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';\n$PHPMAILER_LANG['extension_missing']    = 'Extensão em falta: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-pt_br.php",
    "content": "<?php\n\n/**\n * Brazilian Portuguese PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Paulo Henrique Garcia <paulo@controllerweb.com.br>\n * @author Lucas Guimarães <lucas@lucasguimaraes.com>\n * @author Phelipe Alves <phelipealvesdesouza@gmail.com>\n * @author Fabio Beneditto <fabiobeneditto@gmail.com>\n * @author Geidson Benício Coelho <geidsonc@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Erro de SMTP: Não foi possível autenticar.';\n$PHPMAILER_LANG['buggy_php']            = 'Sua versão do PHP é afetada por um bug que por resultar em messagens corrompidas. Para corrigir, mude para enviar usando SMTP, desative a opção mail.add_x_header em seu php.ini, mude para MacOS ou Linux, ou atualize seu PHP para versão 7.0.17+ ou 7.1.3+ ';\n$PHPMAILER_LANG['connect_host']         = 'Erro de SMTP: Não foi possível conectar ao servidor SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Erro de SMTP: Dados rejeitados.';\n$PHPMAILER_LANG['empty_message']        = 'Mensagem vazia';\n$PHPMAILER_LANG['encoding']             = 'Codificação desconhecida: ';\n$PHPMAILER_LANG['execute']              = 'Não foi possível executar: ';\n$PHPMAILER_LANG['extension_missing']    = 'Extensão não existe: ';\n$PHPMAILER_LANG['file_access']          = 'Não foi possível acessar o arquivo: ';\n$PHPMAILER_LANG['file_open']            = 'Erro de Arquivo: Não foi possível abrir o arquivo: ';\n$PHPMAILER_LANG['from_failed']          = 'Os seguintes remetentes falharam: ';\n$PHPMAILER_LANG['instantiate']          = 'Não foi possível instanciar a função mail.';\n$PHPMAILER_LANG['invalid_address']      = 'Endereço de e-mail inválido: ';\n$PHPMAILER_LANG['invalid_header']       = 'Nome ou valor de cabeçalho inválido';\n$PHPMAILER_LANG['invalid_hostentry']    = 'hostentry inválido: ';\n$PHPMAILER_LANG['invalid_host']         = 'host inválido: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não é suportado.';\n$PHPMAILER_LANG['provide_address']      = 'Você deve informar pelo menos um destinatário.';\n$PHPMAILER_LANG['recipients_failed']    = 'Erro de SMTP: Os seguintes destinatários falharam: ';\n$PHPMAILER_LANG['signing']              = 'Erro de Assinatura: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() falhou.';\n$PHPMAILER_LANG['smtp_code']            = 'Código do servidor SMTP: ';\n$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';\n$PHPMAILER_LANG['smtp_code_ex']         = 'Informações adicionais do servidor SMTP: ';\n$PHPMAILER_LANG['smtp_detail']          = 'Detalhes do servidor SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ro.php",
    "content": "<?php\n\n/**\n * Romanian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Eroare SMTP: Autentificarea a eșuat.';\n$PHPMAILER_LANG['buggy_php']            = 'Versiunea instalată de PHP este afectată de o problemă care poate duce la coruperea mesajelor Pentru a preveni această problemă, folosiți SMTP, dezactivați opțiunea mail.add_x_header din php.ini, folosiți MacOS/Linux sau actualizați versiunea de PHP la 7.0.17+ sau 7.1.3+.';\n$PHPMAILER_LANG['connect_host']         = 'Eroare SMTP: Conectarea la serverul SMTP a eșuat.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Eroare SMTP: Datele nu au fost acceptate.';\n$PHPMAILER_LANG['empty_message']        = 'Mesajul este gol.';\n$PHPMAILER_LANG['encoding']             = 'Encodare necunoscută: ';\n$PHPMAILER_LANG['execute']              = 'Nu se poate executa următoarea comandă:  ';\n$PHPMAILER_LANG['extension_missing']    = 'Lipsește extensia: ';\n$PHPMAILER_LANG['file_access']          = 'Nu se poate accesa următorul fișier: ';\n$PHPMAILER_LANG['file_open']            = 'Eroare fișier: Nu se poate deschide următorul fișier: ';\n$PHPMAILER_LANG['from_failed']          = 'Următoarele adrese From au dat eroare: ';\n$PHPMAILER_LANG['instantiate']          = 'Funcția mail nu a putut fi inițializată.';\n$PHPMAILER_LANG['invalid_address']      = 'Adresa de email nu este validă: ';\n$PHPMAILER_LANG['invalid_header']       = 'Numele sau valoarea header-ului nu este validă: ';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Hostentry invalid: ';\n$PHPMAILER_LANG['invalid_host']         = 'Host invalid: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.';\n$PHPMAILER_LANG['provide_address']      = 'Trebuie să adăugați cel puțin o adresă de email.';\n$PHPMAILER_LANG['recipients_failed']    = 'Eroare SMTP: Următoarele adrese de email au eșuat: ';\n$PHPMAILER_LANG['signing']              = 'A aparut o problemă la semnarea emailului. ';\n$PHPMAILER_LANG['smtp_code']            = 'Cod SMTP: ';\n$PHPMAILER_LANG['smtp_code_ex']         = 'Informații SMTP adiționale: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Conectarea la serverul SMTP a eșuat.';\n$PHPMAILER_LANG['smtp_detail']          = 'Detalii SMTP: ';\n$PHPMAILER_LANG['smtp_error']           = 'Eroare server SMTP: ';\n$PHPMAILER_LANG['variable_set']         = 'Nu se poate seta/reseta variabila. ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-ru.php",
    "content": "<?php\n\n/**\n * Russian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Alexey Chumakov <alex@chumakov.ru>\n * @author Foster Snowhill <i18n@forstwoof.ru>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Ошибка SMTP: ошибка авторизации.';\n$PHPMAILER_LANG['connect_host']         = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Ошибка SMTP: данные не приняты.';\n$PHPMAILER_LANG['encoding']             = 'Неизвестная кодировка: ';\n$PHPMAILER_LANG['execute']              = 'Невозможно выполнить команду: ';\n$PHPMAILER_LANG['file_access']          = 'Нет доступа к файлу: ';\n$PHPMAILER_LANG['file_open']            = 'Файловая ошибка: не удаётся открыть файл: ';\n$PHPMAILER_LANG['from_failed']          = 'Неверный адрес отправителя: ';\n$PHPMAILER_LANG['instantiate']          = 'Невозможно запустить функцию mail().';\n$PHPMAILER_LANG['provide_address']      = 'Пожалуйста, введите хотя бы один email-адрес получателя.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';\n$PHPMAILER_LANG['recipients_failed']    = 'Ошибка SMTP: не удалась отправка таким адресатам: ';\n$PHPMAILER_LANG['empty_message']        = 'Пустое сообщение';\n$PHPMAILER_LANG['invalid_address']      = 'Не отправлено из-за неправильного формата email-адреса: ';\n$PHPMAILER_LANG['signing']              = 'Ошибка подписи: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Ошибка соединения с SMTP-сервером';\n$PHPMAILER_LANG['smtp_error']           = 'Ошибка SMTP-сервера: ';\n$PHPMAILER_LANG['variable_set']         = 'Невозможно установить или сбросить переменную: ';\n$PHPMAILER_LANG['extension_missing']    = 'Расширение отсутствует: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sk.php",
    "content": "<?php\n\n/**\n * Slovak PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Michal Tinka <michaltinka@gmail.com>\n * @author Peter Orlický <pcmanik91@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Chyba autentifikácie.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Nebolo možné nadviazať spojenie so SMTP serverom.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Dáta neboli prijaté';\n$PHPMAILER_LANG['empty_message']        = 'Prázdne telo správy.';\n$PHPMAILER_LANG['encoding']             = 'Neznáme kódovanie: ';\n$PHPMAILER_LANG['execute']              = 'Nedá sa vykonať: ';\n$PHPMAILER_LANG['file_access']          = 'Súbor nebol nájdený: ';\n$PHPMAILER_LANG['file_open']            = 'File Error: Súbor sa otvoriť pre čítanie: ';\n$PHPMAILER_LANG['from_failed']          = 'Následujúca adresa From je nesprávna: ';\n$PHPMAILER_LANG['instantiate']          = 'Nedá sa vytvoriť inštancia emailovej funkcie.';\n$PHPMAILER_LANG['invalid_address']      = 'Neodoslané, emailová adresa je nesprávna: ';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Záznam hostiteľa je nesprávny: ';\n$PHPMAILER_LANG['invalid_host']         = 'Hostiteľ je nesprávny: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' emailový klient nieje podporovaný.';\n$PHPMAILER_LANG['provide_address']      = 'Musíte zadať aspoň jednu emailovú adresu príjemcu.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Adresy príjemcov niesu správne ';\n$PHPMAILER_LANG['signing']              = 'Chyba prihlasovania: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() zlyhalo.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP chyba serveru: ';\n$PHPMAILER_LANG['variable_set']         = 'Nemožno nastaviť alebo resetovať premennú: ';\n$PHPMAILER_LANG['extension_missing']    = 'Chýba rozšírenie: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sl.php",
    "content": "<?php\n\n/**\n * Slovene PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Klemen Tušar <techouse@gmail.com>\n * @author Filip Š <projects@filips.si>\n * @author Blaž Oražem <blaz@orazem.si>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP napaka: Avtentikacija ni uspela.';\n$PHPMAILER_LANG['buggy_php']            = 'Na vašo PHP različico vpliva napaka, ki lahko povzroči poškodovana sporočila. Če želite težavo odpraviti, preklopite na pošiljanje prek SMTP, onemogočite možnost mail.add_x_header v vaši php.ini datoteki, preklopite na MacOS ali Linux, ali nadgradite vašo PHP zaličico na 7.0.17+ ali 7.1.3+.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP napaka: Strežnik zavrača podatke.';\n$PHPMAILER_LANG['empty_message']        = 'E-poštno sporočilo nima vsebine.';\n$PHPMAILER_LANG['encoding']             = 'Nepoznan tip kodiranja: ';\n$PHPMAILER_LANG['execute']              = 'Operacija ni uspela: ';\n$PHPMAILER_LANG['extension_missing']    = 'Manjkajoča razširitev: ';\n$PHPMAILER_LANG['file_access']          = 'Nimam dostopa do datoteke: ';\n$PHPMAILER_LANG['file_open']            = 'Ne morem odpreti datoteke: ';\n$PHPMAILER_LANG['from_failed']          = 'Neveljaven e-naslov pošiljatelja: ';\n$PHPMAILER_LANG['instantiate']          = 'Ne morem inicializirati mail funkcije.';\n$PHPMAILER_LANG['invalid_address']      = 'E-poštno sporočilo ni bilo poslano. E-naslov je neveljaven: ';\n$PHPMAILER_LANG['invalid_header']       = 'Neveljavno ime ali vrednost glave';\n$PHPMAILER_LANG['invalid_hostentry']    = 'Neveljaven vnos gostitelja: ';\n$PHPMAILER_LANG['invalid_host']         = 'Neveljaven gostitelj: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer ni podprt.';\n$PHPMAILER_LANG['provide_address']      = 'Prosimo, vnesite vsaj enega naslovnika.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP napaka: Sledeči naslovniki so neveljavni: ';\n$PHPMAILER_LANG['signing']              = 'Napaka pri podpisovanju: ';\n$PHPMAILER_LANG['smtp_code']            = 'SMTP koda: ';\n$PHPMAILER_LANG['smtp_code_ex']         = 'Dodatne informacije o SMTP: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Ne morem vzpostaviti povezave s SMTP strežnikom.';\n$PHPMAILER_LANG['smtp_detail']          = 'Podrobnosti: ';\n$PHPMAILER_LANG['smtp_error']           = 'Napaka SMTP strežnika: ';\n$PHPMAILER_LANG['variable_set']         = 'Ne morem nastaviti oz. ponastaviti spremenljivke: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr.php",
    "content": "<?php\n\n/**\n * Serbian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Александар Јевремовић <ajevremovic@gmail.com>\n * @author Miloš Milanović <mmilanovic016@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: аутентификација није успела.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: повезивање са SMTP сервером није успело.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: подаци нису прихваћени.';\n$PHPMAILER_LANG['empty_message']        = 'Садржај поруке је празан.';\n$PHPMAILER_LANG['encoding']             = 'Непознато кодирање: ';\n$PHPMAILER_LANG['execute']              = 'Није могуће извршити наредбу: ';\n$PHPMAILER_LANG['file_access']          = 'Није могуће приступити датотеци: ';\n$PHPMAILER_LANG['file_open']            = 'Није могуће отворити датотеку: ';\n$PHPMAILER_LANG['from_failed']          = 'SMTP грешка: слање са следећих адреса није успело: ';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: слање на следеће адресе није успело: ';\n$PHPMAILER_LANG['instantiate']          = 'Није могуће покренути mail функцију.';\n$PHPMAILER_LANG['invalid_address']      = 'Порука није послата. Неисправна адреса: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.';\n$PHPMAILER_LANG['provide_address']      = 'Дефинишите бар једну адресу примаоца.';\n$PHPMAILER_LANG['signing']              = 'Грешка приликом пријаве: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Повезивање са SMTP сервером није успело.';\n$PHPMAILER_LANG['smtp_error']           = 'Грешка SMTP сервера: ';\n$PHPMAILER_LANG['variable_set']         = 'Није могуће задати нити ресетовати променљиву: ';\n$PHPMAILER_LANG['extension_missing']    = 'Недостаје проширење: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sr_latn.php",
    "content": "<?php\n\n/**\n * Serbian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Александар Јевремовић <ajevremovic@gmail.com>\n * @author Miloš Milanović <mmilanovic016@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP greška: autentifikacija nije uspela.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP greška: povezivanje sa SMTP serverom nije uspelo.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP greška: podaci nisu prihvaćeni.';\n$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';\n$PHPMAILER_LANG['encoding']             = 'Nepoznato kodiranje: ';\n$PHPMAILER_LANG['execute']              = 'Nije moguće izvršiti naredbu: ';\n$PHPMAILER_LANG['file_access']          = 'Nije moguće pristupiti datoteci: ';\n$PHPMAILER_LANG['file_open']            = 'Nije moguće otvoriti datoteku: ';\n$PHPMAILER_LANG['from_failed']          = 'SMTP greška: slanje sa sledećih adresa nije uspelo: ';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP greška: slanje na sledeće adrese nije uspelo: ';\n$PHPMAILER_LANG['instantiate']          = 'Nije moguće pokrenuti mail funkciju.';\n$PHPMAILER_LANG['invalid_address']      = 'Poruka nije poslata. Neispravna adresa: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' majler nije podržan.';\n$PHPMAILER_LANG['provide_address']      = 'Definišite bar jednu adresu primaoca.';\n$PHPMAILER_LANG['signing']              = 'Greška prilikom prijave: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Povezivanje sa SMTP serverom nije uspelo.';\n$PHPMAILER_LANG['smtp_error']           = 'Greška SMTP servera: ';\n$PHPMAILER_LANG['variable_set']         = 'Nije moguće zadati niti resetovati promenljivu: ';\n$PHPMAILER_LANG['extension_missing']    = 'Nedostaje proširenje: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-sv.php",
    "content": "<?php\n\n/**\n * Swedish PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Johan Linnér <johan@linner.biz>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP fel: Kunde inte autentisera.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP fel: Kunde inte ansluta till SMTP-server.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP fel: Data accepterades inte.';\n//$PHPMAILER_LANG['empty_message']        = 'Message body empty';\n$PHPMAILER_LANG['encoding']             = 'Okänt encode-format: ';\n$PHPMAILER_LANG['execute']              = 'Kunde inte köra: ';\n$PHPMAILER_LANG['file_access']          = 'Ingen åtkomst till fil: ';\n$PHPMAILER_LANG['file_open']            = 'Fil fel: Kunde inte öppna fil: ';\n$PHPMAILER_LANG['from_failed']          = 'Följande avsändaradress är felaktig: ';\n$PHPMAILER_LANG['instantiate']          = 'Kunde inte initiera e-postfunktion.';\n$PHPMAILER_LANG['invalid_address']      = 'Felaktig adress: ';\n$PHPMAILER_LANG['provide_address']      = 'Du måste ange minst en mottagares e-postadress.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP fel: Följande mottagare är felaktig: ';\n$PHPMAILER_LANG['signing']              = 'Signeringsfel: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() misslyckades.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP serverfel: ';\n$PHPMAILER_LANG['variable_set']         = 'Kunde inte definiera eller återställa variabel: ';\n$PHPMAILER_LANG['extension_missing']    = 'Tillägg ej tillgängligt: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tl.php",
    "content": "<?php\n\n/**\n * Tagalog PHPMailer language file: refer to English translation for definitive list\n *\n *   @package PHPMailer\n *   @author Adriane Justine Tan <eidoriantan@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Error: Hindi mapatotohanan.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Error: Hindi makakonekta sa SMTP host.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Error: Ang datos ay hindi naitanggap.';\n$PHPMAILER_LANG['empty_message']        = 'Walang laman ang mensahe';\n$PHPMAILER_LANG['encoding']             = 'Hindi alam ang encoding: ';\n$PHPMAILER_LANG['execute']              = 'Hindi maisasagawa: ';\n$PHPMAILER_LANG['file_access']          = 'Hindi ma-access ang file: ';\n$PHPMAILER_LANG['file_open']            = 'File Error: Hindi mabuksan ang file: ';\n$PHPMAILER_LANG['from_failed']          = 'Ang sumusunod na address ay nabigo: ';\n$PHPMAILER_LANG['instantiate']          = 'Hindi maisimulan ang instance ng mail function.';\n$PHPMAILER_LANG['invalid_address']      = 'Hindi wasto ang address na naibigay: ';\n$PHPMAILER_LANG['mailer_not_supported'] = 'Ang mailer ay hindi suportado.';\n$PHPMAILER_LANG['provide_address']      = 'Kailangan mong magbigay ng kahit isang email address na tatanggap.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Error: Ang mga sumusunod na tatanggap ay nabigo: ';\n$PHPMAILER_LANG['signing']              = 'Hindi ma-sign: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Ang SMTP connect() ay nabigo.';\n$PHPMAILER_LANG['smtp_error']           = 'Ang server ng SMTP ay nabigo: ';\n$PHPMAILER_LANG['variable_set']         = 'Hindi matatakda o ma-reset ang mga variables: ';\n$PHPMAILER_LANG['extension_missing']    = 'Nawawala ang extension: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-tr.php",
    "content": "<?php\n\n/**\n * Turkish PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Elçin Özel\n * @author Can Yılmaz\n * @author Mehmet Benlioğlu\n * @author @yasinaydin\n * @author Ogün Karakuş\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP Hatası: Oturum açılamadı.';\n$PHPMAILER_LANG['connect_host']         = 'SMTP Hatası: SMTP sunucusuna bağlanılamadı.';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Hatası: Veri kabul edilmedi.';\n$PHPMAILER_LANG['empty_message']        = 'Mesajın içeriği boş';\n$PHPMAILER_LANG['encoding']             = 'Bilinmeyen karakter kodlama: ';\n$PHPMAILER_LANG['execute']              = 'Çalıştırılamadı: ';\n$PHPMAILER_LANG['file_access']          = 'Dosyaya erişilemedi: ';\n$PHPMAILER_LANG['file_open']            = 'Dosya Hatası: Dosya açılamadı: ';\n$PHPMAILER_LANG['from_failed']          = 'Belirtilen adreslere gönderme başarısız: ';\n$PHPMAILER_LANG['instantiate']          = 'Örnek e-posta fonksiyonu oluşturulamadı.';\n$PHPMAILER_LANG['invalid_address']      = 'Geçersiz e-posta adresi: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' e-posta kütüphanesi desteklenmiyor.';\n$PHPMAILER_LANG['provide_address']      = 'En az bir alıcı e-posta adresi belirtmelisiniz.';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP Hatası: Belirtilen alıcılara ulaşılamadı: ';\n$PHPMAILER_LANG['signing']              = 'İmzalama hatası: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP connect() fonksiyonu başarısız.';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP sunucu hatası: ';\n$PHPMAILER_LANG['variable_set']         = 'Değişken ayarlanamadı ya da sıfırlanamadı: ';\n$PHPMAILER_LANG['extension_missing']    = 'Eklenti bulunamadı: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-uk.php",
    "content": "<?php\n\n/**\n * Ukrainian PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author Yuriy Rudyy <yrudyy@prs.net.ua>\n * @fixed by Boris Yurchenko <boris@yurchenko.pp.ua>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Помилка SMTP: помилка авторизації.';\n$PHPMAILER_LANG['connect_host']         = 'Помилка SMTP: не вдається під\\'єднатися до SMTP-серверу.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Помилка SMTP: дані не прийнято.';\n$PHPMAILER_LANG['encoding']             = 'Невідоме кодування: ';\n$PHPMAILER_LANG['execute']              = 'Неможливо виконати команду: ';\n$PHPMAILER_LANG['file_access']          = 'Немає доступу до файлу: ';\n$PHPMAILER_LANG['file_open']            = 'Помилка файлової системи: не вдається відкрити файл: ';\n$PHPMAILER_LANG['from_failed']          = 'Невірна адреса відправника: ';\n$PHPMAILER_LANG['instantiate']          = 'Неможливо запустити функцію mail().';\n$PHPMAILER_LANG['provide_address']      = 'Будь ласка, введіть хоча б одну email-адресу отримувача.';\n$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';\n$PHPMAILER_LANG['recipients_failed']    = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: ';\n$PHPMAILER_LANG['empty_message']        = 'Пусте повідомлення';\n$PHPMAILER_LANG['invalid_address']      = 'Не відправлено через неправильний формат email-адреси: ';\n$PHPMAILER_LANG['signing']              = 'Помилка підпису: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Помилка з\\'єднання з SMTP-сервером';\n$PHPMAILER_LANG['smtp_error']           = 'Помилка SMTP-сервера: ';\n$PHPMAILER_LANG['variable_set']         = 'Неможливо встановити або скинути змінну: ';\n$PHPMAILER_LANG['extension_missing']    = 'Розширення відсутнє: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-vi.php",
    "content": "<?php\n\n/**\n * Vietnamese (Tiếng Việt) PHPMailer language file: refer to English translation for definitive list.\n * @package PHPMailer\n * @author VINADES.,JSC <contact@vinades.vn>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'Lỗi SMTP: Không thể xác thực.';\n$PHPMAILER_LANG['connect_host']         = 'Lỗi SMTP: Không thể kết nối máy chủ SMTP.';\n$PHPMAILER_LANG['data_not_accepted']    = 'Lỗi SMTP: Dữ liệu không được chấp nhận.';\n$PHPMAILER_LANG['empty_message']        = 'Không có nội dung';\n$PHPMAILER_LANG['encoding']             = 'Mã hóa không xác định: ';\n$PHPMAILER_LANG['execute']              = 'Không thực hiện được: ';\n$PHPMAILER_LANG['file_access']          = 'Không thể truy cập tệp tin ';\n$PHPMAILER_LANG['file_open']            = 'Lỗi Tập tin: Không thể mở tệp tin: ';\n$PHPMAILER_LANG['from_failed']          = 'Lỗi địa chỉ gửi đi: ';\n$PHPMAILER_LANG['instantiate']          = 'Không dùng được các hàm gửi thư.';\n$PHPMAILER_LANG['invalid_address']      = 'Đại chỉ emai không đúng: ';\n$PHPMAILER_LANG['mailer_not_supported'] = ' trình gửi thư không được hỗ trợ.';\n$PHPMAILER_LANG['provide_address']      = 'Bạn phải cung cấp ít nhất một địa chỉ người nhận.';\n$PHPMAILER_LANG['recipients_failed']    = 'Lỗi SMTP: lỗi địa chỉ người nhận: ';\n$PHPMAILER_LANG['signing']              = 'Lỗi đăng nhập: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'Lỗi kết nối với SMTP';\n$PHPMAILER_LANG['smtp_error']           = 'Lỗi máy chủ smtp ';\n$PHPMAILER_LANG['variable_set']         = 'Không thể thiết lập hoặc thiết lập lại biến: ';\n//$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh.php",
    "content": "<?php\n\n/**\n * Traditional Chinese PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author liqwei <liqwei@liqwei.com>\n * @author Peter Dave Hello <@PeterDaveHello/>\n * @author Jason Chiang <xcojad@gmail.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP 錯誤：登入失敗。';\n$PHPMAILER_LANG['connect_host']         = 'SMTP 錯誤：無法連線到 SMTP 主機。';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 錯誤：無法接受的資料。';\n$PHPMAILER_LANG['empty_message']        = '郵件內容為空';\n$PHPMAILER_LANG['encoding']             = '未知編碼: ';\n$PHPMAILER_LANG['execute']              = '無法執行：';\n$PHPMAILER_LANG['file_access']          = '無法存取檔案：';\n$PHPMAILER_LANG['file_open']            = '檔案錯誤：無法開啟檔案：';\n$PHPMAILER_LANG['from_failed']          = '發送地址錯誤：';\n$PHPMAILER_LANG['instantiate']          = '未知函數呼叫。';\n$PHPMAILER_LANG['invalid_address']      = '因為電子郵件地址無效，無法傳送: ';\n$PHPMAILER_LANG['mailer_not_supported'] = '不支援的發信客戶端。';\n$PHPMAILER_LANG['provide_address']      = '必須提供至少一個收件人地址。';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP 錯誤：以下收件人地址錯誤：';\n$PHPMAILER_LANG['signing']              = '電子簽章錯誤: ';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP 連線失敗';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP 伺服器錯誤: ';\n$PHPMAILER_LANG['variable_set']         = '無法設定或重設變數: ';\n$PHPMAILER_LANG['extension_missing']    = '遺失模組 Extension: ';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php",
    "content": "<?php\n\n/**\n * Simplified Chinese PHPMailer language file: refer to English translation for definitive list\n * @package PHPMailer\n * @author liqwei <liqwei@liqwei.com>\n * @author young <masxy@foxmail.com>\n * @author Teddysun <i@teddysun.com>\n */\n\n$PHPMAILER_LANG['authenticate']         = 'SMTP 错误：登录失败。';\n$PHPMAILER_LANG['connect_host']         = 'SMTP 错误：无法连接到 SMTP 主机。';\n$PHPMAILER_LANG['data_not_accepted']    = 'SMTP 错误：数据不被接受。';\n$PHPMAILER_LANG['empty_message']        = '邮件正文为空。';\n$PHPMAILER_LANG['encoding']             = '未知编码：';\n$PHPMAILER_LANG['execute']              = '无法执行：';\n$PHPMAILER_LANG['file_access']          = '无法访问文件：';\n$PHPMAILER_LANG['file_open']            = '文件错误：无法打开文件：';\n$PHPMAILER_LANG['from_failed']          = '发送地址错误：';\n$PHPMAILER_LANG['instantiate']          = '未知函数调用。';\n$PHPMAILER_LANG['invalid_address']      = '发送失败，电子邮箱地址是无效的：';\n$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。';\n$PHPMAILER_LANG['provide_address']      = '必须提供至少一个收件人地址。';\n$PHPMAILER_LANG['recipients_failed']    = 'SMTP 错误：收件人地址错误：';\n$PHPMAILER_LANG['signing']              = '登录失败：';\n$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP服务器连接失败。';\n$PHPMAILER_LANG['smtp_error']           = 'SMTP服务器出错：';\n$PHPMAILER_LANG['variable_set']         = '无法设置或重置变量：';\n$PHPMAILER_LANG['extension_missing']    = '丢失模块 Extension：';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/src/Exception.php",
    "content": "<?php\n\n/**\n * PHPMailer Exception class.\n * PHP Version 5.5.\n *\n * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n *\n * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author    Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note      This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\n/**\n * PHPMailer exception handler.\n *\n * @author Marcus Bointon <phpmailer@synchromedia.co.uk>\n */\nclass Exception extends \\Exception\n{\n    /**\n     * Prettify error message output.\n     *\n     * @return string\n     */\n    public function errorMessage()\n    {\n        return '<strong>' . htmlspecialchars($this->getMessage(), ENT_COMPAT | ENT_HTML401) . \"</strong><br />\\n\";\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/src/OAuth.php",
    "content": "<?php\n\n/**\n * PHPMailer - PHP email creation and transport class.\n * PHP Version 5.5.\n *\n * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n *\n * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author    Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note      This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\nuse League\\OAuth2\\Client\\Grant\\RefreshToken;\nuse League\\OAuth2\\Client\\Provider\\AbstractProvider;\nuse League\\OAuth2\\Client\\Token\\AccessToken;\n\n/**\n * OAuth - OAuth2 authentication wrapper class.\n * Uses the oauth2-client package from the League of Extraordinary Packages.\n *\n * @see     http://oauth2-client.thephpleague.com\n *\n * @author  Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n */\nclass OAuth implements OAuthTokenProvider\n{\n    /**\n     * An instance of the League OAuth Client Provider.\n     *\n     * @var AbstractProvider\n     */\n    protected $provider;\n\n    /**\n     * The current OAuth access token.\n     *\n     * @var AccessToken\n     */\n    protected $oauthToken;\n\n    /**\n     * The user's email address, usually used as the login ID\n     * and also the from address when sending email.\n     *\n     * @var string\n     */\n    protected $oauthUserEmail = '';\n\n    /**\n     * The client secret, generated in the app definition of the service you're connecting to.\n     *\n     * @var string\n     */\n    protected $oauthClientSecret = '';\n\n    /**\n     * The client ID, generated in the app definition of the service you're connecting to.\n     *\n     * @var string\n     */\n    protected $oauthClientId = '';\n\n    /**\n     * The refresh token, used to obtain new AccessTokens.\n     *\n     * @var string\n     */\n    protected $oauthRefreshToken = '';\n\n    /**\n     * OAuth constructor.\n     *\n     * @param array $options Associative array containing\n     *                       `provider`, `userName`, `clientSecret`, `clientId` and `refreshToken` elements\n     */\n    public function __construct($options)\n    {\n        $this->provider = $options['provider'];\n        $this->oauthUserEmail = $options['userName'];\n        $this->oauthClientSecret = $options['clientSecret'];\n        $this->oauthClientId = $options['clientId'];\n        $this->oauthRefreshToken = $options['refreshToken'];\n    }\n\n    /**\n     * Get a new RefreshToken.\n     *\n     * @return RefreshToken\n     */\n    protected function getGrant()\n    {\n        return new RefreshToken();\n    }\n\n    /**\n     * Get a new AccessToken.\n     *\n     * @return AccessToken\n     */\n    protected function getToken()\n    {\n        return $this->provider->getAccessToken(\n            $this->getGrant(),\n            ['refresh_token' => $this->oauthRefreshToken]\n        );\n    }\n\n    /**\n     * Generate a base64-encoded OAuth token.\n     *\n     * @return string\n     */\n    public function getOauth64()\n    {\n        //Get a new token if it's not available or has expired\n        if (null === $this->oauthToken || $this->oauthToken->hasExpired()) {\n            $this->oauthToken = $this->getToken();\n        }\n\n        return base64_encode(\n            'user=' .\n            $this->oauthUserEmail .\n            \"\\001auth=Bearer \" .\n            $this->oauthToken .\n            \"\\001\\001\"\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/src/OAuthTokenProvider.php",
    "content": "<?php\n\n/**\n * PHPMailer - PHP email creation and transport class.\n * PHP Version 5.5.\n *\n * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n *\n * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author    Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note      This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\n/**\n * OAuthTokenProvider - OAuth2 token provider interface.\n * Provides base64 encoded OAuth2 auth strings for SMTP authentication.\n *\n * @see     OAuth\n * @see     SMTP::authenticate()\n *\n * @author  Peter Scopes (pdscopes)\n * @author  Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n */\ninterface OAuthTokenProvider\n{\n    /**\n     * Generate a base64-encoded OAuth token ensuring that the access token has not expired.\n     * The string to be base 64 encoded should be in the form:\n     * \"user=<user_email_address>\\001auth=Bearer <access_token>\\001\\001\"\n     *\n     * @return string\n     */\n    public function getOauth64();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/src/PHPMailer.php",
    "content": "<?php\n\n/**\n * PHPMailer - PHP email creation and transport class.\n * PHP Version 5.5.\n *\n * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n *\n * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author    Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note      This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\n/**\n * PHPMailer - PHP email creation and transport class.\n *\n * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author Brent R. Matzelle (original founder)\n */\nclass PHPMailer\n{\n    const CHARSET_ASCII = 'us-ascii';\n    const CHARSET_ISO88591 = 'iso-8859-1';\n    const CHARSET_UTF8 = 'utf-8';\n\n    const CONTENT_TYPE_PLAINTEXT = 'text/plain';\n    const CONTENT_TYPE_TEXT_CALENDAR = 'text/calendar';\n    const CONTENT_TYPE_TEXT_HTML = 'text/html';\n    const CONTENT_TYPE_MULTIPART_ALTERNATIVE = 'multipart/alternative';\n    const CONTENT_TYPE_MULTIPART_MIXED = 'multipart/mixed';\n    const CONTENT_TYPE_MULTIPART_RELATED = 'multipart/related';\n\n    const ENCODING_7BIT = '7bit';\n    const ENCODING_8BIT = '8bit';\n    const ENCODING_BASE64 = 'base64';\n    const ENCODING_BINARY = 'binary';\n    const ENCODING_QUOTED_PRINTABLE = 'quoted-printable';\n\n    const ENCRYPTION_STARTTLS = 'tls';\n    const ENCRYPTION_SMTPS = 'ssl';\n\n    const ICAL_METHOD_REQUEST = 'REQUEST';\n    const ICAL_METHOD_PUBLISH = 'PUBLISH';\n    const ICAL_METHOD_REPLY = 'REPLY';\n    const ICAL_METHOD_ADD = 'ADD';\n    const ICAL_METHOD_CANCEL = 'CANCEL';\n    const ICAL_METHOD_REFRESH = 'REFRESH';\n    const ICAL_METHOD_COUNTER = 'COUNTER';\n    const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER';\n\n    /**\n     * Email priority.\n     * Options: null (default), 1 = High, 3 = Normal, 5 = low.\n     * When null, the header is not set at all.\n     *\n     * @var int|null\n     */\n    public $Priority;\n\n    /**\n     * The character set of the message.\n     *\n     * @var string\n     */\n    public $CharSet = self::CHARSET_ISO88591;\n\n    /**\n     * The MIME Content-type of the message.\n     *\n     * @var string\n     */\n    public $ContentType = self::CONTENT_TYPE_PLAINTEXT;\n\n    /**\n     * The message encoding.\n     * Options: \"8bit\", \"7bit\", \"binary\", \"base64\", and \"quoted-printable\".\n     *\n     * @var string\n     */\n    public $Encoding = self::ENCODING_8BIT;\n\n    /**\n     * Holds the most recent mailer error message.\n     *\n     * @var string\n     */\n    public $ErrorInfo = '';\n\n    /**\n     * The From email address for the message.\n     *\n     * @var string\n     */\n    public $From = '';\n\n    /**\n     * The From name of the message.\n     *\n     * @var string\n     */\n    public $FromName = '';\n\n    /**\n     * The envelope sender of the message.\n     * This will usually be turned into a Return-Path header by the receiver,\n     * and is the address that bounces will be sent to.\n     * If not empty, will be passed via `-f` to sendmail or as the 'MAIL FROM' value over SMTP.\n     *\n     * @var string\n     */\n    public $Sender = '';\n\n    /**\n     * The Subject of the message.\n     *\n     * @var string\n     */\n    public $Subject = '';\n\n    /**\n     * An HTML or plain text message body.\n     * If HTML then call isHTML(true).\n     *\n     * @var string\n     */\n    public $Body = '';\n\n    /**\n     * The plain-text message body.\n     * This body can be read by mail clients that do not have HTML email\n     * capability such as mutt & Eudora.\n     * Clients that can read HTML will view the normal Body.\n     *\n     * @var string\n     */\n    public $AltBody = '';\n\n    /**\n     * An iCal message part body.\n     * Only supported in simple alt or alt_inline message types\n     * To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator.\n     *\n     * @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/\n     * @see http://kigkonsult.se/iCalcreator/\n     *\n     * @var string\n     */\n    public $Ical = '';\n\n    /**\n     * Value-array of \"method\" in Contenttype header \"text/calendar\"\n     *\n     * @var string[]\n     */\n    protected static $IcalMethods = [\n        self::ICAL_METHOD_REQUEST,\n        self::ICAL_METHOD_PUBLISH,\n        self::ICAL_METHOD_REPLY,\n        self::ICAL_METHOD_ADD,\n        self::ICAL_METHOD_CANCEL,\n        self::ICAL_METHOD_REFRESH,\n        self::ICAL_METHOD_COUNTER,\n        self::ICAL_METHOD_DECLINECOUNTER,\n    ];\n\n    /**\n     * The complete compiled MIME message body.\n     *\n     * @var string\n     */\n    protected $MIMEBody = '';\n\n    /**\n     * The complete compiled MIME message headers.\n     *\n     * @var string\n     */\n    protected $MIMEHeader = '';\n\n    /**\n     * Extra headers that createHeader() doesn't fold in.\n     *\n     * @var string\n     */\n    protected $mailHeader = '';\n\n    /**\n     * Word-wrap the message body to this number of chars.\n     * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.\n     *\n     * @see static::STD_LINE_LENGTH\n     *\n     * @var int\n     */\n    public $WordWrap = 0;\n\n    /**\n     * Which method to use to send mail.\n     * Options: \"mail\", \"sendmail\", or \"smtp\".\n     *\n     * @var string\n     */\n    public $Mailer = 'mail';\n\n    /**\n     * The path to the sendmail program.\n     *\n     * @var string\n     */\n    public $Sendmail = '/usr/sbin/sendmail';\n\n    /**\n     * Whether mail() uses a fully sendmail-compatible MTA.\n     * One which supports sendmail's \"-oi -f\" options.\n     *\n     * @var bool\n     */\n    public $UseSendmailOptions = true;\n\n    /**\n     * The email address that a reading confirmation should be sent to, also known as read receipt.\n     *\n     * @var string\n     */\n    public $ConfirmReadingTo = '';\n\n    /**\n     * The hostname to use in the Message-ID header and as default HELO string.\n     * If empty, PHPMailer attempts to find one with, in order,\n     * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value\n     * 'localhost.localdomain'.\n     *\n     * @see PHPMailer::$Helo\n     *\n     * @var string\n     */\n    public $Hostname = '';\n\n    /**\n     * An ID to be used in the Message-ID header.\n     * If empty, a unique id will be generated.\n     * You can set your own, but it must be in the format \"<id@domain>\",\n     * as defined in RFC5322 section 3.6.4 or it will be ignored.\n     *\n     * @see https://tools.ietf.org/html/rfc5322#section-3.6.4\n     *\n     * @var string\n     */\n    public $MessageID = '';\n\n    /**\n     * The message Date to be used in the Date header.\n     * If empty, the current date will be added.\n     *\n     * @var string\n     */\n    public $MessageDate = '';\n\n    /**\n     * SMTP hosts.\n     * Either a single hostname or multiple semicolon-delimited hostnames.\n     * You can also specify a different port\n     * for each host by using this format: [hostname:port]\n     * (e.g. \"smtp1.example.com:25;smtp2.example.com\").\n     * You can also specify encryption type, for example:\n     * (e.g. \"tls://smtp1.example.com:587;ssl://smtp2.example.com:465\").\n     * Hosts will be tried in order.\n     *\n     * @var string\n     */\n    public $Host = 'localhost';\n\n    /**\n     * The default SMTP server port.\n     *\n     * @var int\n     */\n    public $Port = 25;\n\n    /**\n     * The SMTP HELO/EHLO name used for the SMTP connection.\n     * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find\n     * one with the same method described above for $Hostname.\n     *\n     * @see PHPMailer::$Hostname\n     *\n     * @var string\n     */\n    public $Helo = '';\n\n    /**\n     * What kind of encryption to use on the SMTP connection.\n     * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS.\n     *\n     * @var string\n     */\n    public $SMTPSecure = '';\n\n    /**\n     * Whether to enable TLS encryption automatically if a server supports it,\n     * even if `SMTPSecure` is not set to 'tls'.\n     * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.\n     *\n     * @var bool\n     */\n    public $SMTPAutoTLS = true;\n\n    /**\n     * Whether to use SMTP authentication.\n     * Uses the Username and Password properties.\n     *\n     * @see PHPMailer::$Username\n     * @see PHPMailer::$Password\n     *\n     * @var bool\n     */\n    public $SMTPAuth = false;\n\n    /**\n     * Options array passed to stream_context_create when connecting via SMTP.\n     *\n     * @var array\n     */\n    public $SMTPOptions = [];\n\n    /**\n     * SMTP username.\n     *\n     * @var string\n     */\n    public $Username = '';\n\n    /**\n     * SMTP password.\n     *\n     * @var string\n     */\n    public $Password = '';\n\n    /**\n     * SMTP auth type.\n     * Options are CRAM-MD5, LOGIN, PLAIN, XOAUTH2, attempted in that order if not specified.\n     *\n     * @var string\n     */\n    public $AuthType = '';\n\n    /**\n     * An implementation of the PHPMailer OAuthTokenProvider interface.\n     *\n     * @var OAuthTokenProvider\n     */\n    protected $oauth;\n\n    /**\n     * The SMTP server timeout in seconds.\n     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.\n     *\n     * @var int\n     */\n    public $Timeout = 300;\n\n    /**\n     * Comma separated list of DSN notifications\n     * 'NEVER' under no circumstances a DSN must be returned to the sender.\n     *         If you use NEVER all other notifications will be ignored.\n     * 'SUCCESS' will notify you when your mail has arrived at its destination.\n     * 'FAILURE' will arrive if an error occurred during delivery.\n     * 'DELAY'   will notify you if there is an unusual delay in delivery, but the actual\n     *           delivery's outcome (success or failure) is not yet decided.\n     *\n     * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY\n     */\n    public $dsn = '';\n\n    /**\n     * SMTP class debug output mode.\n     * Debug output level.\n     * Options:\n     * @see SMTP::DEBUG_OFF: No output\n     * @see SMTP::DEBUG_CLIENT: Client messages\n     * @see SMTP::DEBUG_SERVER: Client and server messages\n     * @see SMTP::DEBUG_CONNECTION: As SERVER plus connection status\n     * @see SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed\n     *\n     * @see SMTP::$do_debug\n     *\n     * @var int\n     */\n    public $SMTPDebug = 0;\n\n    /**\n     * How to handle debug output.\n     * Options:\n     * * `echo` Output plain-text as-is, appropriate for CLI\n     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output\n     * * `error_log` Output to error log as configured in php.ini\n     * By default PHPMailer will use `echo` if run from a `cli` or `cli-server` SAPI, `html` otherwise.\n     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:\n     *\n     * ```php\n     * $mail->Debugoutput = function($str, $level) {echo \"debug level $level; message: $str\";};\n     * ```\n     *\n     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`\n     * level output is used:\n     *\n     * ```php\n     * $mail->Debugoutput = new myPsr3Logger;\n     * ```\n     *\n     * @see SMTP::$Debugoutput\n     *\n     * @var string|callable|\\Psr\\Log\\LoggerInterface\n     */\n    public $Debugoutput = 'echo';\n\n    /**\n     * Whether to keep the SMTP connection open after each message.\n     * If this is set to true then the connection will remain open after a send,\n     * and closing the connection will require an explicit call to smtpClose().\n     * It's a good idea to use this if you are sending multiple messages as it reduces overhead.\n     * See the mailing list example for how to use it.\n     *\n     * @var bool\n     */\n    public $SMTPKeepAlive = false;\n\n    /**\n     * Whether to split multiple to addresses into multiple messages\n     * or send them all in one message.\n     * Only supported in `mail` and `sendmail` transports, not in SMTP.\n     *\n     * @var bool\n     *\n     * @deprecated 6.0.0 PHPMailer isn't a mailing list manager!\n     */\n    public $SingleTo = false;\n\n    /**\n     * Storage for addresses when SingleTo is enabled.\n     *\n     * @var array\n     */\n    protected $SingleToArray = [];\n\n    /**\n     * Whether to generate VERP addresses on send.\n     * Only applicable when sending via SMTP.\n     *\n     * @see https://en.wikipedia.org/wiki/Variable_envelope_return_path\n     * @see http://www.postfix.org/VERP_README.html Postfix VERP info\n     *\n     * @var bool\n     */\n    public $do_verp = false;\n\n    /**\n     * Whether to allow sending messages with an empty body.\n     *\n     * @var bool\n     */\n    public $AllowEmpty = false;\n\n    /**\n     * DKIM selector.\n     *\n     * @var string\n     */\n    public $DKIM_selector = '';\n\n    /**\n     * DKIM Identity.\n     * Usually the email address used as the source of the email.\n     *\n     * @var string\n     */\n    public $DKIM_identity = '';\n\n    /**\n     * DKIM passphrase.\n     * Used if your key is encrypted.\n     *\n     * @var string\n     */\n    public $DKIM_passphrase = '';\n\n    /**\n     * DKIM signing domain name.\n     *\n     * @example 'example.com'\n     *\n     * @var string\n     */\n    public $DKIM_domain = '';\n\n    /**\n     * DKIM Copy header field values for diagnostic use.\n     *\n     * @var bool\n     */\n    public $DKIM_copyHeaderFields = true;\n\n    /**\n     * DKIM Extra signing headers.\n     *\n     * @example ['List-Unsubscribe', 'List-Help']\n     *\n     * @var array\n     */\n    public $DKIM_extraHeaders = [];\n\n    /**\n     * DKIM private key file path.\n     *\n     * @var string\n     */\n    public $DKIM_private = '';\n\n    /**\n     * DKIM private key string.\n     *\n     * If set, takes precedence over `$DKIM_private`.\n     *\n     * @var string\n     */\n    public $DKIM_private_string = '';\n\n    /**\n     * Callback Action function name.\n     *\n     * The function that handles the result of the send email action.\n     * It is called out by send() for each email sent.\n     *\n     * Value can be any php callable: http://www.php.net/is_callable\n     *\n     * Parameters:\n     *   bool $result        result of the send action\n     *   array   $to            email addresses of the recipients\n     *   array   $cc            cc email addresses\n     *   array   $bcc           bcc email addresses\n     *   string  $subject       the subject\n     *   string  $body          the email body\n     *   string  $from          email address of sender\n     *   string  $extra         extra information of possible use\n     *                          \"smtp_transaction_id' => last smtp transaction id\n     *\n     * @var string\n     */\n    public $action_function = '';\n\n    /**\n     * What to put in the X-Mailer header.\n     * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use.\n     *\n     * @var string|null\n     */\n    public $XMailer = '';\n\n    /**\n     * Which validator to use by default when validating email addresses.\n     * May be a callable to inject your own validator, but there are several built-in validators.\n     * The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option.\n     *\n     * @see PHPMailer::validateAddress()\n     *\n     * @var string|callable\n     */\n    public static $validator = 'php';\n\n    /**\n     * An instance of the SMTP sender class.\n     *\n     * @var SMTP\n     */\n    protected $smtp;\n\n    /**\n     * The array of 'to' names and addresses.\n     *\n     * @var array\n     */\n    protected $to = [];\n\n    /**\n     * The array of 'cc' names and addresses.\n     *\n     * @var array\n     */\n    protected $cc = [];\n\n    /**\n     * The array of 'bcc' names and addresses.\n     *\n     * @var array\n     */\n    protected $bcc = [];\n\n    /**\n     * The array of reply-to names and addresses.\n     *\n     * @var array\n     */\n    protected $ReplyTo = [];\n\n    /**\n     * An array of all kinds of addresses.\n     * Includes all of $to, $cc, $bcc.\n     *\n     * @see PHPMailer::$to\n     * @see PHPMailer::$cc\n     * @see PHPMailer::$bcc\n     *\n     * @var array\n     */\n    protected $all_recipients = [];\n\n    /**\n     * An array of names and addresses queued for validation.\n     * In send(), valid and non duplicate entries are moved to $all_recipients\n     * and one of $to, $cc, or $bcc.\n     * This array is used only for addresses with IDN.\n     *\n     * @see PHPMailer::$to\n     * @see PHPMailer::$cc\n     * @see PHPMailer::$bcc\n     * @see PHPMailer::$all_recipients\n     *\n     * @var array\n     */\n    protected $RecipientsQueue = [];\n\n    /**\n     * An array of reply-to names and addresses queued for validation.\n     * In send(), valid and non duplicate entries are moved to $ReplyTo.\n     * This array is used only for addresses with IDN.\n     *\n     * @see PHPMailer::$ReplyTo\n     *\n     * @var array\n     */\n    protected $ReplyToQueue = [];\n\n    /**\n     * The array of attachments.\n     *\n     * @var array\n     */\n    protected $attachment = [];\n\n    /**\n     * The array of custom headers.\n     *\n     * @var array\n     */\n    protected $CustomHeader = [];\n\n    /**\n     * The most recent Message-ID (including angular brackets).\n     *\n     * @var string\n     */\n    protected $lastMessageID = '';\n\n    /**\n     * The message's MIME type.\n     *\n     * @var string\n     */\n    protected $message_type = '';\n\n    /**\n     * The array of MIME boundary strings.\n     *\n     * @var array\n     */\n    protected $boundary = [];\n\n    /**\n     * The array of available text strings for the current language.\n     *\n     * @var array\n     */\n    protected $language = [];\n\n    /**\n     * The number of errors encountered.\n     *\n     * @var int\n     */\n    protected $error_count = 0;\n\n    /**\n     * The S/MIME certificate file path.\n     *\n     * @var string\n     */\n    protected $sign_cert_file = '';\n\n    /**\n     * The S/MIME key file path.\n     *\n     * @var string\n     */\n    protected $sign_key_file = '';\n\n    /**\n     * The optional S/MIME extra certificates (\"CA Chain\") file path.\n     *\n     * @var string\n     */\n    protected $sign_extracerts_file = '';\n\n    /**\n     * The S/MIME password for the key.\n     * Used only if the key is encrypted.\n     *\n     * @var string\n     */\n    protected $sign_key_pass = '';\n\n    /**\n     * Whether to throw exceptions for errors.\n     *\n     * @var bool\n     */\n    protected $exceptions = false;\n\n    /**\n     * Unique ID used for message ID and boundaries.\n     *\n     * @var string\n     */\n    protected $uniqueid = '';\n\n    /**\n     * The PHPMailer Version number.\n     *\n     * @var string\n     */\n    const VERSION = '6.6.0';\n\n    /**\n     * Error severity: message only, continue processing.\n     *\n     * @var int\n     */\n    const STOP_MESSAGE = 0;\n\n    /**\n     * Error severity: message, likely ok to continue processing.\n     *\n     * @var int\n     */\n    const STOP_CONTINUE = 1;\n\n    /**\n     * Error severity: message, plus full stop, critical error reached.\n     *\n     * @var int\n     */\n    const STOP_CRITICAL = 2;\n\n    /**\n     * The SMTP standard CRLF line break.\n     * If you want to change line break format, change static::$LE, not this.\n     */\n    const CRLF = \"\\r\\n\";\n\n    /**\n     * \"Folding White Space\" a white space string used for line folding.\n     */\n    const FWS = ' ';\n\n    /**\n     * SMTP RFC standard line ending; Carriage Return, Line Feed.\n     *\n     * @var string\n     */\n    protected static $LE = self::CRLF;\n\n    /**\n     * The maximum line length supported by mail().\n     *\n     * Background: mail() will sometimes corrupt messages\n     * with headers headers longer than 65 chars, see #818.\n     *\n     * @var int\n     */\n    const MAIL_MAX_LINE_LENGTH = 63;\n\n    /**\n     * The maximum line length allowed by RFC 2822 section 2.1.1.\n     *\n     * @var int\n     */\n    const MAX_LINE_LENGTH = 998;\n\n    /**\n     * The lower maximum line length allowed by RFC 2822 section 2.1.1.\n     * This length does NOT include the line break\n     * 76 means that lines will be 77 or 78 chars depending on whether\n     * the line break format is LF or CRLF; both are valid.\n     *\n     * @var int\n     */\n    const STD_LINE_LENGTH = 76;\n\n    /**\n     * Constructor.\n     *\n     * @param bool $exceptions Should we throw external exceptions?\n     */\n    public function __construct($exceptions = null)\n    {\n        if (null !== $exceptions) {\n            $this->exceptions = (bool) $exceptions;\n        }\n        //Pick an appropriate debug output format automatically\n        $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html');\n    }\n\n    /**\n     * Destructor.\n     */\n    public function __destruct()\n    {\n        //Close any open SMTP connection nicely\n        $this->smtpClose();\n    }\n\n    /**\n     * Call mail() in a safe_mode-aware fashion.\n     * Also, unless sendmail_path points to sendmail (or something that\n     * claims to be sendmail), don't pass params (not a perfect fix,\n     * but it will do).\n     *\n     * @param string      $to      To\n     * @param string      $subject Subject\n     * @param string      $body    Message Body\n     * @param string      $header  Additional Header(s)\n     * @param string|null $params  Params\n     *\n     * @return bool\n     */\n    private function mailPassthru($to, $subject, $body, $header, $params)\n    {\n        //Check overloading of mail function to avoid double-encoding\n        if (ini_get('mbstring.func_overload') & 1) {\n            $subject = $this->secureHeader($subject);\n        } else {\n            $subject = $this->encodeHeader($this->secureHeader($subject));\n        }\n        //Calling mail() with null params breaks\n        $this->edebug('Sending with mail()');\n        $this->edebug('Sendmail path: ' . ini_get('sendmail_path'));\n        $this->edebug(\"Envelope sender: {$this->Sender}\");\n        $this->edebug(\"To: {$to}\");\n        $this->edebug(\"Subject: {$subject}\");\n        $this->edebug(\"Headers: {$header}\");\n        if (!$this->UseSendmailOptions || null === $params) {\n            $result = @mail($to, $subject, $body, $header);\n        } else {\n            $this->edebug(\"Additional params: {$params}\");\n            $result = @mail($to, $subject, $body, $header, $params);\n        }\n        $this->edebug('Result: ' . ($result ? 'true' : 'false'));\n        return $result;\n    }\n\n    /**\n     * Output debugging info via a user-defined method.\n     * Only generates output if debug output is enabled.\n     *\n     * @see PHPMailer::$Debugoutput\n     * @see PHPMailer::$SMTPDebug\n     *\n     * @param string $str\n     */\n    protected function edebug($str)\n    {\n        if ($this->SMTPDebug <= 0) {\n            return;\n        }\n        //Is this a PSR-3 logger?\n        if ($this->Debugoutput instanceof \\Psr\\Log\\LoggerInterface) {\n            $this->Debugoutput->debug($str);\n\n            return;\n        }\n        //Avoid clash with built-in function names\n        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {\n            call_user_func($this->Debugoutput, $str, $this->SMTPDebug);\n\n            return;\n        }\n        switch ($this->Debugoutput) {\n            case 'error_log':\n                //Don't output, just log\n                /** @noinspection ForgottenDebugOutputInspection */\n                error_log($str);\n                break;\n            case 'html':\n                //Cleans up output a bit for a better looking, HTML-safe output\n                echo htmlentities(\n                    preg_replace('/[\\r\\n]+/', '', $str),\n                    ENT_QUOTES,\n                    'UTF-8'\n                ), \"<br>\\n\";\n                break;\n            case 'echo':\n            default:\n                //Normalize line breaks\n                $str = preg_replace('/\\r\\n|\\r/m', \"\\n\", $str);\n                echo gmdate('Y-m-d H:i:s'),\n                \"\\t\",\n                    //Trim trailing space\n                trim(\n                    //Indent for readability, except for trailing break\n                    str_replace(\n                        \"\\n\",\n                        \"\\n                   \\t                  \",\n                        trim($str)\n                    )\n                ),\n                \"\\n\";\n        }\n    }\n\n    /**\n     * Sets message type to HTML or plain.\n     *\n     * @param bool $isHtml True for HTML mode\n     */\n    public function isHTML($isHtml = true)\n    {\n        if ($isHtml) {\n            $this->ContentType = static::CONTENT_TYPE_TEXT_HTML;\n        } else {\n            $this->ContentType = static::CONTENT_TYPE_PLAINTEXT;\n        }\n    }\n\n    /**\n     * Send messages using SMTP.\n     */\n    public function isSMTP()\n    {\n        $this->Mailer = 'smtp';\n    }\n\n    /**\n     * Send messages using PHP's mail() function.\n     */\n    public function isMail()\n    {\n        $this->Mailer = 'mail';\n    }\n\n    /**\n     * Send messages using $Sendmail.\n     */\n    public function isSendmail()\n    {\n        $ini_sendmail_path = ini_get('sendmail_path');\n\n        if (false === stripos($ini_sendmail_path, 'sendmail')) {\n            $this->Sendmail = '/usr/sbin/sendmail';\n        } else {\n            $this->Sendmail = $ini_sendmail_path;\n        }\n        $this->Mailer = 'sendmail';\n    }\n\n    /**\n     * Send messages using qmail.\n     */\n    public function isQmail()\n    {\n        $ini_sendmail_path = ini_get('sendmail_path');\n\n        if (false === stripos($ini_sendmail_path, 'qmail')) {\n            $this->Sendmail = '/var/qmail/bin/qmail-inject';\n        } else {\n            $this->Sendmail = $ini_sendmail_path;\n        }\n        $this->Mailer = 'qmail';\n    }\n\n    /**\n     * Add a \"To\" address.\n     *\n     * @param string $address The email address to send to\n     * @param string $name\n     *\n     * @throws Exception\n     *\n     * @return bool true on success, false if address already used or invalid in some way\n     */\n    public function addAddress($address, $name = '')\n    {\n        return $this->addOrEnqueueAnAddress('to', $address, $name);\n    }\n\n    /**\n     * Add a \"CC\" address.\n     *\n     * @param string $address The email address to send to\n     * @param string $name\n     *\n     * @throws Exception\n     *\n     * @return bool true on success, false if address already used or invalid in some way\n     */\n    public function addCC($address, $name = '')\n    {\n        return $this->addOrEnqueueAnAddress('cc', $address, $name);\n    }\n\n    /**\n     * Add a \"BCC\" address.\n     *\n     * @param string $address The email address to send to\n     * @param string $name\n     *\n     * @throws Exception\n     *\n     * @return bool true on success, false if address already used or invalid in some way\n     */\n    public function addBCC($address, $name = '')\n    {\n        return $this->addOrEnqueueAnAddress('bcc', $address, $name);\n    }\n\n    /**\n     * Add a \"Reply-To\" address.\n     *\n     * @param string $address The email address to reply to\n     * @param string $name\n     *\n     * @throws Exception\n     *\n     * @return bool true on success, false if address already used or invalid in some way\n     */\n    public function addReplyTo($address, $name = '')\n    {\n        return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);\n    }\n\n    /**\n     * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer\n     * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still\n     * be modified after calling this function), addition of such addresses is delayed until send().\n     * Addresses that have been added already return false, but do not throw exceptions.\n     *\n     * @param string $kind    One of 'to', 'cc', 'bcc', or 'ReplyTo'\n     * @param string $address The email address to send, resp. to reply to\n     * @param string $name\n     *\n     * @throws Exception\n     *\n     * @return bool true on success, false if address already used or invalid in some way\n     */\n    protected function addOrEnqueueAnAddress($kind, $address, $name)\n    {\n        $address = trim($address);\n        $name = trim(preg_replace('/[\\r\\n]+/', '', $name)); //Strip breaks and trim\n        $pos = strrpos($address, '@');\n        if (false === $pos) {\n            //At-sign is missing.\n            $error_message = sprintf(\n                '%s (%s): %s',\n                $this->lang('invalid_address'),\n                $kind,\n                $address\n            );\n            $this->setError($error_message);\n            $this->edebug($error_message);\n            if ($this->exceptions) {\n                throw new Exception($error_message);\n            }\n\n            return false;\n        }\n        $params = [$kind, $address, $name];\n        //Enqueue addresses with IDN until we know the PHPMailer::$CharSet.\n        if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) {\n            if ('Reply-To' !== $kind) {\n                if (!array_key_exists($address, $this->RecipientsQueue)) {\n                    $this->RecipientsQueue[$address] = $params;\n\n                    return true;\n                }\n            } elseif (!array_key_exists($address, $this->ReplyToQueue)) {\n                $this->ReplyToQueue[$address] = $params;\n\n                return true;\n            }\n\n            return false;\n        }\n\n        //Immediately add standard addresses without IDN.\n        return call_user_func_array([$this, 'addAnAddress'], $params);\n    }\n\n    /**\n     * Add an address to one of the recipient arrays or to the ReplyTo array.\n     * Addresses that have been added already return false, but do not throw exceptions.\n     *\n     * @param string $kind    One of 'to', 'cc', 'bcc', or 'ReplyTo'\n     * @param string $address The email address to send, resp. to reply to\n     * @param string $name\n     *\n     * @throws Exception\n     *\n     * @return bool true on success, false if address already used or invalid in some way\n     */\n    protected function addAnAddress($kind, $address, $name = '')\n    {\n        if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) {\n            $error_message = sprintf(\n                '%s: %s',\n                $this->lang('Invalid recipient kind'),\n                $kind\n            );\n            $this->setError($error_message);\n            $this->edebug($error_message);\n            if ($this->exceptions) {\n                throw new Exception($error_message);\n            }\n\n            return false;\n        }\n        if (!static::validateAddress($address)) {\n            $error_message = sprintf(\n                '%s (%s): %s',\n                $this->lang('invalid_address'),\n                $kind,\n                $address\n            );\n            $this->setError($error_message);\n            $this->edebug($error_message);\n            if ($this->exceptions) {\n                throw new Exception($error_message);\n            }\n\n            return false;\n        }\n        if ('Reply-To' !== $kind) {\n            if (!array_key_exists(strtolower($address), $this->all_recipients)) {\n                $this->{$kind}[] = [$address, $name];\n                $this->all_recipients[strtolower($address)] = true;\n\n                return true;\n            }\n        } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) {\n            $this->ReplyTo[strtolower($address)] = [$address, $name];\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Parse and validate a string containing one or more RFC822-style comma-separated email addresses\n     * of the form \"display name <address>\" into an array of name/address pairs.\n     * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.\n     * Note that quotes in the name part are removed.\n     *\n     * @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation\n     *\n     * @param string $addrstr The address list string\n     * @param bool   $useimap Whether to use the IMAP extension to parse the list\n     * @param string $charset The charset to use when decoding the address list string.\n     *\n     * @return array\n     */\n    public static function parseAddresses($addrstr, $useimap = true, $charset = self::CHARSET_ISO88591)\n    {\n        $addresses = [];\n        if ($useimap && function_exists('imap_rfc822_parse_adrlist')) {\n            //Use this built-in parser if it's available\n            $list = imap_rfc822_parse_adrlist($addrstr, '');\n            // Clear any potential IMAP errors to get rid of notices being thrown at end of script.\n            imap_errors();\n            foreach ($list as $address) {\n                if (\n                    '.SYNTAX-ERROR.' !== $address->host &&\n                    static::validateAddress($address->mailbox . '@' . $address->host)\n                ) {\n                    //Decode the name part if it's present and encoded\n                    if (\n                        property_exists($address, 'personal') &&\n                        //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled\n                        defined('MB_CASE_UPPER') &&\n                        preg_match('/^=\\?.*\\?=$/s', $address->personal)\n                    ) {\n                        $origCharset = mb_internal_encoding();\n                        mb_internal_encoding($charset);\n                        //Undo any RFC2047-encoded spaces-as-underscores\n                        $address->personal = str_replace('_', '=20', $address->personal);\n                        //Decode the name\n                        $address->personal = mb_decode_mimeheader($address->personal);\n                        mb_internal_encoding($origCharset);\n                    }\n\n                    $addresses[] = [\n                        'name' => (property_exists($address, 'personal') ? $address->personal : ''),\n                        'address' => $address->mailbox . '@' . $address->host,\n                    ];\n                }\n            }\n        } else {\n            //Use this simpler parser\n            $list = explode(',', $addrstr);\n            foreach ($list as $address) {\n                $address = trim($address);\n                //Is there a separate name part?\n                if (strpos($address, '<') === false) {\n                    //No separate name, just use the whole thing\n                    if (static::validateAddress($address)) {\n                        $addresses[] = [\n                            'name' => '',\n                            'address' => $address,\n                        ];\n                    }\n                } else {\n                    list($name, $email) = explode('<', $address);\n                    $email = trim(str_replace('>', '', $email));\n                    $name = trim($name);\n                    if (static::validateAddress($email)) {\n                        //Check for a Mbstring constant rather than using extension_loaded, which is sometimes disabled\n                        //If this name is encoded, decode it\n                        if (defined('MB_CASE_UPPER') && preg_match('/^=\\?.*\\?=$/s', $name)) {\n                            $origCharset = mb_internal_encoding();\n                            mb_internal_encoding($charset);\n                            //Undo any RFC2047-encoded spaces-as-underscores\n                            $name = str_replace('_', '=20', $name);\n                            //Decode the name\n                            $name = mb_decode_mimeheader($name);\n                            mb_internal_encoding($origCharset);\n                        }\n                        $addresses[] = [\n                            //Remove any surrounding quotes and spaces from the name\n                            'name' => trim($name, '\\'\" '),\n                            'address' => $email,\n                        ];\n                    }\n                }\n            }\n        }\n\n        return $addresses;\n    }\n\n    /**\n     * Set the From and FromName properties.\n     *\n     * @param string $address\n     * @param string $name\n     * @param bool   $auto    Whether to also set the Sender address, defaults to true\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    public function setFrom($address, $name = '', $auto = true)\n    {\n        $address = trim($address);\n        $name = trim(preg_replace('/[\\r\\n]+/', '', $name)); //Strip breaks and trim\n        //Don't validate now addresses with IDN. Will be done in send().\n        $pos = strrpos($address, '@');\n        if (\n            (false === $pos)\n            || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported())\n            && !static::validateAddress($address))\n        ) {\n            $error_message = sprintf(\n                '%s (From): %s',\n                $this->lang('invalid_address'),\n                $address\n            );\n            $this->setError($error_message);\n            $this->edebug($error_message);\n            if ($this->exceptions) {\n                throw new Exception($error_message);\n            }\n\n            return false;\n        }\n        $this->From = $address;\n        $this->FromName = $name;\n        if ($auto && empty($this->Sender)) {\n            $this->Sender = $address;\n        }\n\n        return true;\n    }\n\n    /**\n     * Return the Message-ID header of the last email.\n     * Technically this is the value from the last time the headers were created,\n     * but it's also the message ID of the last sent message except in\n     * pathological cases.\n     *\n     * @return string\n     */\n    public function getLastMessageID()\n    {\n        return $this->lastMessageID;\n    }\n\n    /**\n     * Check that a string looks like an email address.\n     * Validation patterns supported:\n     * * `auto` Pick best pattern automatically;\n     * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0;\n     * * `pcre` Use old PCRE implementation;\n     * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;\n     * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.\n     * * `noregex` Don't use a regex: super fast, really dumb.\n     * Alternatively you may pass in a callable to inject your own validator, for example:\n     *\n     * ```php\n     * PHPMailer::validateAddress('user@example.com', function($address) {\n     *     return (strpos($address, '@') !== false);\n     * });\n     * ```\n     *\n     * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.\n     *\n     * @param string          $address       The email address to check\n     * @param string|callable $patternselect Which pattern to use\n     *\n     * @return bool\n     */\n    public static function validateAddress($address, $patternselect = null)\n    {\n        if (null === $patternselect) {\n            $patternselect = static::$validator;\n        }\n        //Don't allow strings as callables, see SECURITY.md and CVE-2021-3603\n        if (is_callable($patternselect) && !is_string($patternselect)) {\n            return call_user_func($patternselect, $address);\n        }\n        //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321\n        if (strpos($address, \"\\n\") !== false || strpos($address, \"\\r\") !== false) {\n            return false;\n        }\n        switch ($patternselect) {\n            case 'pcre': //Kept for BC\n            case 'pcre8':\n                /*\n                 * A more complex and more permissive version of the RFC5322 regex on which FILTER_VALIDATE_EMAIL\n                 * is based.\n                 * In addition to the addresses allowed by filter_var, also permits:\n                 *  * dotless domains: `a@b`\n                 *  * comments: `1234 @ local(blah) .machine .example`\n                 *  * quoted elements: `'\"test blah\"@example.org'`\n                 *  * numeric TLDs: `a@b.123`\n                 *  * unbracketed IPv4 literals: `a@192.168.0.1`\n                 *  * IPv6 literals: 'first.last@[IPv6:a1::]'\n                 * Not all of these will necessarily work for sending!\n                 *\n                 * @see       http://squiloople.com/2009/12/20/email-address-validation/\n                 * @copyright 2009-2010 Michael Rushton\n                 * Feel free to use and redistribute this code. But please keep this copyright notice.\n                 */\n                return (bool) preg_match(\n                    '/^(?!(?>(?1)\"?(?>\\\\\\[ -~]|[^\"])\"?(?1)){255,})(?!(?>(?1)\"?(?>\\\\\\[ -~]|[^\"])\"?(?1)){65,}@)' .\n                    '((?>(?>(?>((?>(?>(?>\\x0D\\x0A)?[\\t ])+|(?>[\\t ]*\\x0D\\x0A)?[\\t ]+)?)(\\((?>(?2)' .\n                    '(?>[\\x01-\\x08\\x0B\\x0C\\x0E-\\'*-\\[\\]-\\x7F]|\\\\\\[\\x00-\\x7F]|(?3)))*(?2)\\)))+(?2))|(?2))?)' .\n                    '([!#-\\'*+\\/-9=?^-~-]+|\"(?>(?2)(?>[\\x01-\\x08\\x0B\\x0C\\x0E-!#-\\[\\]-\\x7F]|\\\\\\[\\x00-\\x7F]))*' .\n                    '(?2)\")(?>(?1)\\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .\n                    '(?>(?1)\\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .\n                    '|(?!(?:.*[a-f0-9][:\\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .\n                    '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .\n                    '|[1-9]?[0-9])(?>\\.(?9)){3}))\\])(?1)$/isD',\n                    $address\n                );\n            case 'html5':\n                /*\n                 * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.\n                 *\n                 * @see https://html.spec.whatwg.org/#e-mail-state-(type=email)\n                 */\n                return (bool) preg_match(\n                    '/^[a-zA-Z0-9.!#$%&\\'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .\n                    '[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',\n                    $address\n                );\n            case 'php':\n            default:\n                return filter_var($address, FILTER_VALIDATE_EMAIL) !== false;\n        }\n    }\n\n    /**\n     * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the\n     * `intl` and `mbstring` PHP extensions.\n     *\n     * @return bool `true` if required functions for IDN support are present\n     */\n    public static function idnSupported()\n    {\n        return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding');\n    }\n\n    /**\n     * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.\n     * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.\n     * This function silently returns unmodified address if:\n     * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)\n     * - Conversion to punycode is impossible (e.g. required PHP functions are not available)\n     *   or fails for any reason (e.g. domain contains characters not allowed in an IDN).\n     *\n     * @see PHPMailer::$CharSet\n     *\n     * @param string $address The email address to convert\n     *\n     * @return string The encoded address in ASCII form\n     */\n    public function punyencodeAddress($address)\n    {\n        //Verify we have required functions, CharSet, and at-sign.\n        $pos = strrpos($address, '@');\n        if (\n            !empty($this->CharSet) &&\n            false !== $pos &&\n            static::idnSupported()\n        ) {\n            $domain = substr($address, ++$pos);\n            //Verify CharSet string is a valid one, and domain properly encoded in this CharSet.\n            if ($this->has8bitChars($domain) && @mb_check_encoding($domain, $this->CharSet)) {\n                //Convert the domain from whatever charset it's in to UTF-8\n                $domain = mb_convert_encoding($domain, self::CHARSET_UTF8, $this->CharSet);\n                //Ignore IDE complaints about this line - method signature changed in PHP 5.4\n                $errorcode = 0;\n                if (defined('INTL_IDNA_VARIANT_UTS46')) {\n                    //Use the current punycode standard (appeared in PHP 7.2)\n                    $punycode = idn_to_ascii(\n                        $domain,\n                        \\IDNA_DEFAULT | \\IDNA_USE_STD3_RULES | \\IDNA_CHECK_BIDI |\n                            \\IDNA_CHECK_CONTEXTJ | \\IDNA_NONTRANSITIONAL_TO_ASCII,\n                        \\INTL_IDNA_VARIANT_UTS46\n                    );\n                } elseif (defined('INTL_IDNA_VARIANT_2003')) {\n                    //Fall back to this old, deprecated/removed encoding\n                    $punycode = idn_to_ascii($domain, $errorcode, \\INTL_IDNA_VARIANT_2003);\n                } else {\n                    //Fall back to a default we don't know about\n                    $punycode = idn_to_ascii($domain, $errorcode);\n                }\n                if (false !== $punycode) {\n                    return substr($address, 0, $pos) . $punycode;\n                }\n            }\n        }\n\n        return $address;\n    }\n\n    /**\n     * Create a message and send it.\n     * Uses the sending method specified by $Mailer.\n     *\n     * @throws Exception\n     *\n     * @return bool false on error - See the ErrorInfo property for details of the error\n     */\n    public function send()\n    {\n        try {\n            if (!$this->preSend()) {\n                return false;\n            }\n\n            return $this->postSend();\n        } catch (Exception $exc) {\n            $this->mailHeader = '';\n            $this->setError($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return false;\n        }\n    }\n\n    /**\n     * Prepare a message for sending.\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    public function preSend()\n    {\n        if (\n            'smtp' === $this->Mailer\n            || ('mail' === $this->Mailer && (\\PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0))\n        ) {\n            //SMTP mandates RFC-compliant line endings\n            //and it's also used with mail() on Windows\n            static::setLE(self::CRLF);\n        } else {\n            //Maintain backward compatibility with legacy Linux command line mailers\n            static::setLE(PHP_EOL);\n        }\n        //Check for buggy PHP versions that add a header with an incorrect line break\n        if (\n            'mail' === $this->Mailer\n            && ((\\PHP_VERSION_ID >= 70000 && \\PHP_VERSION_ID < 70017)\n                || (\\PHP_VERSION_ID >= 70100 && \\PHP_VERSION_ID < 70103))\n            && ini_get('mail.add_x_header') === '1'\n            && stripos(PHP_OS, 'WIN') === 0\n        ) {\n            trigger_error($this->lang('buggy_php'), E_USER_WARNING);\n        }\n\n        try {\n            $this->error_count = 0; //Reset errors\n            $this->mailHeader = '';\n\n            //Dequeue recipient and Reply-To addresses with IDN\n            foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {\n                $params[1] = $this->punyencodeAddress($params[1]);\n                call_user_func_array([$this, 'addAnAddress'], $params);\n            }\n            if (count($this->to) + count($this->cc) + count($this->bcc) < 1) {\n                throw new Exception($this->lang('provide_address'), self::STOP_CRITICAL);\n            }\n\n            //Validate From, Sender, and ConfirmReadingTo addresses\n            foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {\n                $this->$address_kind = trim($this->$address_kind);\n                if (empty($this->$address_kind)) {\n                    continue;\n                }\n                $this->$address_kind = $this->punyencodeAddress($this->$address_kind);\n                if (!static::validateAddress($this->$address_kind)) {\n                    $error_message = sprintf(\n                        '%s (%s): %s',\n                        $this->lang('invalid_address'),\n                        $address_kind,\n                        $this->$address_kind\n                    );\n                    $this->setError($error_message);\n                    $this->edebug($error_message);\n                    if ($this->exceptions) {\n                        throw new Exception($error_message);\n                    }\n\n                    return false;\n                }\n            }\n\n            //Set whether the message is multipart/alternative\n            if ($this->alternativeExists()) {\n                $this->ContentType = static::CONTENT_TYPE_MULTIPART_ALTERNATIVE;\n            }\n\n            $this->setMessageType();\n            //Refuse to send an empty message unless we are specifically allowing it\n            if (!$this->AllowEmpty && empty($this->Body)) {\n                throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);\n            }\n\n            //Trim subject consistently\n            $this->Subject = trim($this->Subject);\n            //Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)\n            $this->MIMEHeader = '';\n            $this->MIMEBody = $this->createBody();\n            //createBody may have added some headers, so retain them\n            $tempheaders = $this->MIMEHeader;\n            $this->MIMEHeader = $this->createHeader();\n            $this->MIMEHeader .= $tempheaders;\n\n            //To capture the complete message when using mail(), create\n            //an extra header list which createHeader() doesn't fold in\n            if ('mail' === $this->Mailer) {\n                if (count($this->to) > 0) {\n                    $this->mailHeader .= $this->addrAppend('To', $this->to);\n                } else {\n                    $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');\n                }\n                $this->mailHeader .= $this->headerLine(\n                    'Subject',\n                    $this->encodeHeader($this->secureHeader($this->Subject))\n                );\n            }\n\n            //Sign with DKIM if enabled\n            if (\n                !empty($this->DKIM_domain)\n                && !empty($this->DKIM_selector)\n                && (!empty($this->DKIM_private_string)\n                    || (!empty($this->DKIM_private)\n                        && static::isPermittedPath($this->DKIM_private)\n                        && file_exists($this->DKIM_private)\n                    )\n                )\n            ) {\n                $header_dkim = $this->DKIM_Add(\n                    $this->MIMEHeader . $this->mailHeader,\n                    $this->encodeHeader($this->secureHeader($this->Subject)),\n                    $this->MIMEBody\n                );\n                $this->MIMEHeader = static::stripTrailingWSP($this->MIMEHeader) . static::$LE .\n                    static::normalizeBreaks($header_dkim) . static::$LE;\n            }\n\n            return true;\n        } catch (Exception $exc) {\n            $this->setError($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return false;\n        }\n    }\n\n    /**\n     * Actually send a message via the selected mechanism.\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    public function postSend()\n    {\n        try {\n            //Choose the mailer and send through it\n            switch ($this->Mailer) {\n                case 'sendmail':\n                case 'qmail':\n                    return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);\n                case 'smtp':\n                    return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);\n                case 'mail':\n                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);\n                default:\n                    $sendMethod = $this->Mailer . 'Send';\n                    if (method_exists($this, $sendMethod)) {\n                        return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody);\n                    }\n\n                    return $this->mailSend($this->MIMEHeader, $this->MIMEBody);\n            }\n        } catch (Exception $exc) {\n            if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) {\n                $this->smtp->reset();\n            }\n            $this->setError($exc->getMessage());\n            $this->edebug($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Send mail using the $Sendmail program.\n     *\n     * @see PHPMailer::$Sendmail\n     *\n     * @param string $header The message headers\n     * @param string $body   The message body\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    protected function sendmailSend($header, $body)\n    {\n        if ($this->Mailer === 'qmail') {\n            $this->edebug('Sending with qmail');\n        } else {\n            $this->edebug('Sending with sendmail');\n        }\n        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;\n        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver\n        //A space after `-f` is optional, but there is a long history of its presence\n        //causing problems, so we don't use one\n        //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html\n        //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html\n        //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html\n        //Example problem: https://www.drupal.org/node/1057954\n\n        //PHP 5.6 workaround\n        $sendmail_from_value = ini_get('sendmail_from');\n        if (empty($this->Sender) && !empty($sendmail_from_value)) {\n            //PHP config has a sender address we can use\n            $this->Sender = ini_get('sendmail_from');\n        }\n        //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.\n        if (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) {\n            if ($this->Mailer === 'qmail') {\n                $sendmailFmt = '%s -f%s';\n            } else {\n                $sendmailFmt = '%s -oi -f%s -t';\n            }\n        } else {\n            //allow sendmail to choose a default envelope sender. It may\n            //seem preferable to force it to use the From header as with\n            //SMTP, but that introduces new problems (see\n            //<https://github.com/PHPMailer/PHPMailer/issues/2298>), and\n            //it has historically worked this way.\n            $sendmailFmt = '%s -oi -t';\n        }\n\n        $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender);\n        $this->edebug('Sendmail path: ' . $this->Sendmail);\n        $this->edebug('Sendmail command: ' . $sendmail);\n        $this->edebug('Envelope sender: ' . $this->Sender);\n        $this->edebug(\"Headers: {$header}\");\n\n        if ($this->SingleTo) {\n            foreach ($this->SingleToArray as $toAddr) {\n                $mail = @popen($sendmail, 'w');\n                if (!$mail) {\n                    throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);\n                }\n                $this->edebug(\"To: {$toAddr}\");\n                fwrite($mail, 'To: ' . $toAddr . \"\\n\");\n                fwrite($mail, $header);\n                fwrite($mail, $body);\n                $result = pclose($mail);\n                $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet);\n                $this->doCallback(\n                    ($result === 0),\n                    [[$addrinfo['address'], $addrinfo['name']]],\n                    $this->cc,\n                    $this->bcc,\n                    $this->Subject,\n                    $body,\n                    $this->From,\n                    []\n                );\n                $this->edebug(\"Result: \" . ($result === 0 ? 'true' : 'false'));\n                if (0 !== $result) {\n                    throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);\n                }\n            }\n        } else {\n            $mail = @popen($sendmail, 'w');\n            if (!$mail) {\n                throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);\n            }\n            fwrite($mail, $header);\n            fwrite($mail, $body);\n            $result = pclose($mail);\n            $this->doCallback(\n                ($result === 0),\n                $this->to,\n                $this->cc,\n                $this->bcc,\n                $this->Subject,\n                $body,\n                $this->From,\n                []\n            );\n            $this->edebug(\"Result: \" . ($result === 0 ? 'true' : 'false'));\n            if (0 !== $result) {\n                throw new Exception($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Fix CVE-2016-10033 and CVE-2016-10045 by disallowing potentially unsafe shell characters.\n     * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows.\n     *\n     * @see https://github.com/PHPMailer/PHPMailer/issues/924 CVE-2016-10045 bug report\n     *\n     * @param string $string The string to be validated\n     *\n     * @return bool\n     */\n    protected static function isShellSafe($string)\n    {\n        //It's not possible to use shell commands safely (which includes the mail() function) without escapeshellarg,\n        //but some hosting providers disable it, creating a security problem that we don't want to have to deal with,\n        //so we don't.\n        if (!function_exists('escapeshellarg') || !function_exists('escapeshellcmd')) {\n            return false;\n        }\n\n        if (\n            escapeshellcmd($string) !== $string\n            || !in_array(escapeshellarg($string), [\"'$string'\", \"\\\"$string\\\"\"])\n        ) {\n            return false;\n        }\n\n        $length = strlen($string);\n\n        for ($i = 0; $i < $length; ++$i) {\n            $c = $string[$i];\n\n            //All other characters have a special meaning in at least one common shell, including = and +.\n            //Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here.\n            //Note that this does permit non-Latin alphanumeric characters based on the current locale.\n            if (!ctype_alnum($c) && strpos('@_-.', $c) === false) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * Check whether a file path is of a permitted type.\n     * Used to reject URLs and phar files from functions that access local file paths,\n     * such as addAttachment.\n     *\n     * @param string $path A relative or absolute path to a file\n     *\n     * @return bool\n     */\n    protected static function isPermittedPath($path)\n    {\n        //Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1\n        return !preg_match('#^[a-z][a-z\\d+.-]*://#i', $path);\n    }\n\n    /**\n     * Check whether a file path is safe, accessible, and readable.\n     *\n     * @param string $path A relative or absolute path to a file\n     *\n     * @return bool\n     */\n    protected static function fileIsAccessible($path)\n    {\n        if (!static::isPermittedPath($path)) {\n            return false;\n        }\n        $readable = file_exists($path);\n        //If not a UNC path (expected to start with \\\\), check read permission, see #2069\n        if (strpos($path, '\\\\\\\\') !== 0) {\n            $readable = $readable && is_readable($path);\n        }\n        return  $readable;\n    }\n\n    /**\n     * Send mail using the PHP mail() function.\n     *\n     * @see http://www.php.net/manual/en/book.mail.php\n     *\n     * @param string $header The message headers\n     * @param string $body   The message body\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    protected function mailSend($header, $body)\n    {\n        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;\n\n        $toArr = [];\n        foreach ($this->to as $toaddr) {\n            $toArr[] = $this->addrFormat($toaddr);\n        }\n        $to = implode(', ', $toArr);\n\n        $params = null;\n        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver\n        //A space after `-f` is optional, but there is a long history of its presence\n        //causing problems, so we don't use one\n        //Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html\n        //Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html\n        //Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html\n        //Example problem: https://www.drupal.org/node/1057954\n        //CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.\n\n        //PHP 5.6 workaround\n        $sendmail_from_value = ini_get('sendmail_from');\n        if (empty($this->Sender) && !empty($sendmail_from_value)) {\n            //PHP config has a sender address we can use\n            $this->Sender = ini_get('sendmail_from');\n        }\n        if (!empty($this->Sender) && static::validateAddress($this->Sender)) {\n            if (self::isShellSafe($this->Sender)) {\n                $params = sprintf('-f%s', $this->Sender);\n            }\n            $old_from = ini_get('sendmail_from');\n            ini_set('sendmail_from', $this->Sender);\n        }\n        $result = false;\n        if ($this->SingleTo && count($toArr) > 1) {\n            foreach ($toArr as $toAddr) {\n                $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);\n                $addrinfo = static::parseAddresses($toAddr, true, $this->CharSet);\n                $this->doCallback(\n                    $result,\n                    [[$addrinfo['address'], $addrinfo['name']]],\n                    $this->cc,\n                    $this->bcc,\n                    $this->Subject,\n                    $body,\n                    $this->From,\n                    []\n                );\n            }\n        } else {\n            $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);\n            $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From, []);\n        }\n        if (isset($old_from)) {\n            ini_set('sendmail_from', $old_from);\n        }\n        if (!$result) {\n            throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);\n        }\n\n        return true;\n    }\n\n    /**\n     * Get an instance to use for SMTP operations.\n     * Override this function to load your own SMTP implementation,\n     * or set one with setSMTPInstance.\n     *\n     * @return SMTP\n     */\n    public function getSMTPInstance()\n    {\n        if (!is_object($this->smtp)) {\n            $this->smtp = new SMTP();\n        }\n\n        return $this->smtp;\n    }\n\n    /**\n     * Provide an instance to use for SMTP operations.\n     *\n     * @return SMTP\n     */\n    public function setSMTPInstance(SMTP $smtp)\n    {\n        $this->smtp = $smtp;\n\n        return $this->smtp;\n    }\n\n    /**\n     * Send mail via SMTP.\n     * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.\n     *\n     * @see PHPMailer::setSMTPInstance() to use a different class.\n     *\n     * @uses \\PHPMailer\\PHPMailer\\SMTP\n     *\n     * @param string $header The message headers\n     * @param string $body   The message body\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    protected function smtpSend($header, $body)\n    {\n        $header = static::stripTrailingWSP($header) . static::$LE . static::$LE;\n        $bad_rcpt = [];\n        if (!$this->smtpConnect($this->SMTPOptions)) {\n            throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);\n        }\n        //Sender already validated in preSend()\n        if ('' === $this->Sender) {\n            $smtp_from = $this->From;\n        } else {\n            $smtp_from = $this->Sender;\n        }\n        if (!$this->smtp->mail($smtp_from)) {\n            $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));\n            throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);\n        }\n\n        $callbacks = [];\n        //Attempt to send to all recipients\n        foreach ([$this->to, $this->cc, $this->bcc] as $togroup) {\n            foreach ($togroup as $to) {\n                if (!$this->smtp->recipient($to[0], $this->dsn)) {\n                    $error = $this->smtp->getError();\n                    $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']];\n                    $isSent = false;\n                } else {\n                    $isSent = true;\n                }\n\n                $callbacks[] = ['issent' => $isSent, 'to' => $to[0], 'name' => $to[1]];\n            }\n        }\n\n        //Only send the DATA command if we have viable recipients\n        if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) {\n            throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL);\n        }\n\n        $smtp_transaction_id = $this->smtp->getLastTransactionID();\n\n        if ($this->SMTPKeepAlive) {\n            $this->smtp->reset();\n        } else {\n            $this->smtp->quit();\n            $this->smtp->close();\n        }\n\n        foreach ($callbacks as $cb) {\n            $this->doCallback(\n                $cb['issent'],\n                [[$cb['to'], $cb['name']]],\n                [],\n                [],\n                $this->Subject,\n                $body,\n                $this->From,\n                ['smtp_transaction_id' => $smtp_transaction_id]\n            );\n        }\n\n        //Create error message for any bad addresses\n        if (count($bad_rcpt) > 0) {\n            $errstr = '';\n            foreach ($bad_rcpt as $bad) {\n                $errstr .= $bad['to'] . ': ' . $bad['error'];\n            }\n            throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE);\n        }\n\n        return true;\n    }\n\n    /**\n     * Initiate a connection to an SMTP server.\n     * Returns false if the operation failed.\n     *\n     * @param array $options An array of options compatible with stream_context_create()\n     *\n     * @throws Exception\n     *\n     * @uses \\PHPMailer\\PHPMailer\\SMTP\n     *\n     * @return bool\n     */\n    public function smtpConnect($options = null)\n    {\n        if (null === $this->smtp) {\n            $this->smtp = $this->getSMTPInstance();\n        }\n\n        //If no options are provided, use whatever is set in the instance\n        if (null === $options) {\n            $options = $this->SMTPOptions;\n        }\n\n        //Already connected?\n        if ($this->smtp->connected()) {\n            return true;\n        }\n\n        $this->smtp->setTimeout($this->Timeout);\n        $this->smtp->setDebugLevel($this->SMTPDebug);\n        $this->smtp->setDebugOutput($this->Debugoutput);\n        $this->smtp->setVerp($this->do_verp);\n        $hosts = explode(';', $this->Host);\n        $lastexception = null;\n\n        foreach ($hosts as $hostentry) {\n            $hostinfo = [];\n            if (\n                !preg_match(\n                    '/^(?:(ssl|tls):\\/\\/)?(.+?)(?::(\\d+))?$/',\n                    trim($hostentry),\n                    $hostinfo\n                )\n            ) {\n                $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry));\n                //Not a valid host entry\n                continue;\n            }\n            //$hostinfo[1]: optional ssl or tls prefix\n            //$hostinfo[2]: the hostname\n            //$hostinfo[3]: optional port number\n            //The host string prefix can temporarily override the current setting for SMTPSecure\n            //If it's not specified, the default value is used\n\n            //Check the host name is a valid name or IP address before trying to use it\n            if (!static::isValidHost($hostinfo[2])) {\n                $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]);\n                continue;\n            }\n            $prefix = '';\n            $secure = $this->SMTPSecure;\n            $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure);\n            if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) {\n                $prefix = 'ssl://';\n                $tls = false; //Can't have SSL and TLS at the same time\n                $secure = static::ENCRYPTION_SMTPS;\n            } elseif ('tls' === $hostinfo[1]) {\n                $tls = true;\n                //TLS doesn't use a prefix\n                $secure = static::ENCRYPTION_STARTTLS;\n            }\n            //Do we need the OpenSSL extension?\n            $sslext = defined('OPENSSL_ALGO_SHA256');\n            if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $secure) {\n                //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled\n                if (!$sslext) {\n                    throw new Exception($this->lang('extension_missing') . 'openssl', self::STOP_CRITICAL);\n                }\n            }\n            $host = $hostinfo[2];\n            $port = $this->Port;\n            if (\n                array_key_exists(3, $hostinfo) &&\n                is_numeric($hostinfo[3]) &&\n                $hostinfo[3] > 0 &&\n                $hostinfo[3] < 65536\n            ) {\n                $port = (int) $hostinfo[3];\n            }\n            if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {\n                try {\n                    if ($this->Helo) {\n                        $hello = $this->Helo;\n                    } else {\n                        $hello = $this->serverHostname();\n                    }\n                    $this->smtp->hello($hello);\n                    //Automatically enable TLS encryption if:\n                    //* it's not disabled\n                    //* we have openssl extension\n                    //* we are not already using SSL\n                    //* the server offers STARTTLS\n                    if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) {\n                        $tls = true;\n                    }\n                    if ($tls) {\n                        if (!$this->smtp->startTLS()) {\n                            $message = $this->getSmtpErrorMessage('connect_host');\n                            throw new Exception($message);\n                        }\n                        //We must resend EHLO after TLS negotiation\n                        $this->smtp->hello($hello);\n                    }\n                    if (\n                        $this->SMTPAuth && !$this->smtp->authenticate(\n                            $this->Username,\n                            $this->Password,\n                            $this->AuthType,\n                            $this->oauth\n                        )\n                    ) {\n                        throw new Exception($this->lang('authenticate'));\n                    }\n\n                    return true;\n                } catch (Exception $exc) {\n                    $lastexception = $exc;\n                    $this->edebug($exc->getMessage());\n                    //We must have connected, but then failed TLS or Auth, so close connection nicely\n                    $this->smtp->quit();\n                }\n            }\n        }\n        //If we get here, all connection attempts have failed, so close connection hard\n        $this->smtp->close();\n        //As we've caught all exceptions, just report whatever the last one was\n        if ($this->exceptions && null !== $lastexception) {\n            throw $lastexception;\n        } elseif ($this->exceptions) {\n            // no exception was thrown, likely $this->smtp->connect() failed\n            $message = $this->getSmtpErrorMessage('connect_host');\n            throw new Exception($message);\n        }\n\n        return false;\n    }\n\n    /**\n     * Close the active SMTP session if one exists.\n     */\n    public function smtpClose()\n    {\n        if ((null !== $this->smtp) && $this->smtp->connected()) {\n            $this->smtp->quit();\n            $this->smtp->close();\n        }\n    }\n\n    /**\n     * Set the language for error messages.\n     * The default language is English.\n     *\n     * @param string $langcode  ISO 639-1 2-character language code (e.g. French is \"fr\")\n     *                          Optionally, the language code can be enhanced with a 4-character\n     *                          script annotation and/or a 2-character country annotation.\n     * @param string $lang_path Path to the language file directory, with trailing separator (slash)\n     *                          Do not set this from user input!\n     *\n     * @return bool Returns true if the requested language was loaded, false otherwise.\n     */\n    public function setLanguage($langcode = 'en', $lang_path = '')\n    {\n        //Backwards compatibility for renamed language codes\n        $renamed_langcodes = [\n            'br' => 'pt_br',\n            'cz' => 'cs',\n            'dk' => 'da',\n            'no' => 'nb',\n            'se' => 'sv',\n            'rs' => 'sr',\n            'tg' => 'tl',\n            'am' => 'hy',\n        ];\n\n        if (array_key_exists($langcode, $renamed_langcodes)) {\n            $langcode = $renamed_langcodes[$langcode];\n        }\n\n        //Define full set of translatable strings in English\n        $PHPMAILER_LANG = [\n            'authenticate' => 'SMTP Error: Could not authenticate.',\n            'buggy_php' => 'Your version of PHP is affected by a bug that may result in corrupted messages.' .\n                ' To fix it, switch to sending using SMTP, disable the mail.add_x_header option in' .\n                ' your php.ini, switch to MacOS or Linux, or upgrade your PHP to version 7.0.17+ or 7.1.3+.',\n            'connect_host' => 'SMTP Error: Could not connect to SMTP host.',\n            'data_not_accepted' => 'SMTP Error: data not accepted.',\n            'empty_message' => 'Message body empty',\n            'encoding' => 'Unknown encoding: ',\n            'execute' => 'Could not execute: ',\n            'extension_missing' => 'Extension missing: ',\n            'file_access' => 'Could not access file: ',\n            'file_open' => 'File Error: Could not open file: ',\n            'from_failed' => 'The following From address failed: ',\n            'instantiate' => 'Could not instantiate mail function.',\n            'invalid_address' => 'Invalid address: ',\n            'invalid_header' => 'Invalid header name or value',\n            'invalid_hostentry' => 'Invalid hostentry: ',\n            'invalid_host' => 'Invalid host: ',\n            'mailer_not_supported' => ' mailer is not supported.',\n            'provide_address' => 'You must provide at least one recipient email address.',\n            'recipients_failed' => 'SMTP Error: The following recipients failed: ',\n            'signing' => 'Signing Error: ',\n            'smtp_code' => 'SMTP code: ',\n            'smtp_code_ex' => 'Additional SMTP info: ',\n            'smtp_connect_failed' => 'SMTP connect() failed.',\n            'smtp_detail' => 'Detail: ',\n            'smtp_error' => 'SMTP server error: ',\n            'variable_set' => 'Cannot set or reset variable: ',\n        ];\n        if (empty($lang_path)) {\n            //Calculate an absolute path so it can work if CWD is not here\n            $lang_path = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'language' . DIRECTORY_SEPARATOR;\n        }\n\n        //Validate $langcode\n        $foundlang = true;\n        $langcode  = strtolower($langcode);\n        if (\n            !preg_match('/^(?P<lang>[a-z]{2})(?P<script>_[a-z]{4})?(?P<country>_[a-z]{2})?$/', $langcode, $matches)\n            && $langcode !== 'en'\n        ) {\n            $foundlang = false;\n            $langcode = 'en';\n        }\n\n        //There is no English translation file\n        if ('en' !== $langcode) {\n            $langcodes = [];\n            if (!empty($matches['script']) && !empty($matches['country'])) {\n                $langcodes[] = $matches['lang'] . $matches['script'] . $matches['country'];\n            }\n            if (!empty($matches['country'])) {\n                $langcodes[] = $matches['lang'] . $matches['country'];\n            }\n            if (!empty($matches['script'])) {\n                $langcodes[] = $matches['lang'] . $matches['script'];\n            }\n            $langcodes[] = $matches['lang'];\n\n            //Try and find a readable language file for the requested language.\n            $foundFile = false;\n            foreach ($langcodes as $code) {\n                $lang_file = $lang_path . 'phpmailer.lang-' . $code . '.php';\n                if (static::fileIsAccessible($lang_file)) {\n                    $foundFile = true;\n                    break;\n                }\n            }\n\n            if ($foundFile === false) {\n                $foundlang = false;\n            } else {\n                $lines = file($lang_file);\n                foreach ($lines as $line) {\n                    //Translation file lines look like this:\n                    //$PHPMAILER_LANG['authenticate'] = 'SMTP-Fehler: Authentifizierung fehlgeschlagen.';\n                    //These files are parsed as text and not PHP so as to avoid the possibility of code injection\n                    //See https://blog.stevenlevithan.com/archives/match-quoted-string\n                    $matches = [];\n                    if (\n                        preg_match(\n                            '/^\\$PHPMAILER_LANG\\[\\'([a-z\\d_]+)\\'\\]\\s*=\\s*([\"\\'])(.+)*?\\2;/',\n                            $line,\n                            $matches\n                        ) &&\n                        //Ignore unknown translation keys\n                        array_key_exists($matches[1], $PHPMAILER_LANG)\n                    ) {\n                        //Overwrite language-specific strings so we'll never have missing translation keys.\n                        $PHPMAILER_LANG[$matches[1]] = (string)$matches[3];\n                    }\n                }\n            }\n        }\n        $this->language = $PHPMAILER_LANG;\n\n        return $foundlang; //Returns false if language not found\n    }\n\n    /**\n     * Get the array of strings for the current language.\n     *\n     * @return array\n     */\n    public function getTranslations()\n    {\n        if (empty($this->language)) {\n            $this->setLanguage(); // Set the default language.\n        }\n\n        return $this->language;\n    }\n\n    /**\n     * Create recipient headers.\n     *\n     * @param string $type\n     * @param array  $addr An array of recipients,\n     *                     where each recipient is a 2-element indexed array with element 0 containing an address\n     *                     and element 1 containing a name, like:\n     *                     [['joe@example.com', 'Joe User'], ['zoe@example.com', 'Zoe User']]\n     *\n     * @return string\n     */\n    public function addrAppend($type, $addr)\n    {\n        $addresses = [];\n        foreach ($addr as $address) {\n            $addresses[] = $this->addrFormat($address);\n        }\n\n        return $type . ': ' . implode(', ', $addresses) . static::$LE;\n    }\n\n    /**\n     * Format an address for use in a message header.\n     *\n     * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name like\n     *                    ['joe@example.com', 'Joe User']\n     *\n     * @return string\n     */\n    public function addrFormat($addr)\n    {\n        if (empty($addr[1])) { //No name provided\n            return $this->secureHeader($addr[0]);\n        }\n\n        return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') .\n            ' <' . $this->secureHeader($addr[0]) . '>';\n    }\n\n    /**\n     * Word-wrap message.\n     * For use with mailers that do not automatically perform wrapping\n     * and for quoted-printable encoded messages.\n     * Original written by philippe.\n     *\n     * @param string $message The message to wrap\n     * @param int    $length  The line length to wrap to\n     * @param bool   $qp_mode Whether to run in Quoted-Printable mode\n     *\n     * @return string\n     */\n    public function wrapText($message, $length, $qp_mode = false)\n    {\n        if ($qp_mode) {\n            $soft_break = sprintf(' =%s', static::$LE);\n        } else {\n            $soft_break = static::$LE;\n        }\n        //If utf-8 encoding is used, we will need to make sure we don't\n        //split multibyte characters when we wrap\n        $is_utf8 = static::CHARSET_UTF8 === strtolower($this->CharSet);\n        $lelen = strlen(static::$LE);\n        $crlflen = strlen(static::$LE);\n\n        $message = static::normalizeBreaks($message);\n        //Remove a trailing line break\n        if (substr($message, -$lelen) === static::$LE) {\n            $message = substr($message, 0, -$lelen);\n        }\n\n        //Split message into lines\n        $lines = explode(static::$LE, $message);\n        //Message will be rebuilt in here\n        $message = '';\n        foreach ($lines as $line) {\n            $words = explode(' ', $line);\n            $buf = '';\n            $firstword = true;\n            foreach ($words as $word) {\n                if ($qp_mode && (strlen($word) > $length)) {\n                    $space_left = $length - strlen($buf) - $crlflen;\n                    if (!$firstword) {\n                        if ($space_left > 20) {\n                            $len = $space_left;\n                            if ($is_utf8) {\n                                $len = $this->utf8CharBoundary($word, $len);\n                            } elseif ('=' === substr($word, $len - 1, 1)) {\n                                --$len;\n                            } elseif ('=' === substr($word, $len - 2, 1)) {\n                                $len -= 2;\n                            }\n                            $part = substr($word, 0, $len);\n                            $word = substr($word, $len);\n                            $buf .= ' ' . $part;\n                            $message .= $buf . sprintf('=%s', static::$LE);\n                        } else {\n                            $message .= $buf . $soft_break;\n                        }\n                        $buf = '';\n                    }\n                    while ($word !== '') {\n                        if ($length <= 0) {\n                            break;\n                        }\n                        $len = $length;\n                        if ($is_utf8) {\n                            $len = $this->utf8CharBoundary($word, $len);\n                        } elseif ('=' === substr($word, $len - 1, 1)) {\n                            --$len;\n                        } elseif ('=' === substr($word, $len - 2, 1)) {\n                            $len -= 2;\n                        }\n                        $part = substr($word, 0, $len);\n                        $word = (string) substr($word, $len);\n\n                        if ($word !== '') {\n                            $message .= $part . sprintf('=%s', static::$LE);\n                        } else {\n                            $buf = $part;\n                        }\n                    }\n                } else {\n                    $buf_o = $buf;\n                    if (!$firstword) {\n                        $buf .= ' ';\n                    }\n                    $buf .= $word;\n\n                    if ('' !== $buf_o && strlen($buf) > $length) {\n                        $message .= $buf_o . $soft_break;\n                        $buf = $word;\n                    }\n                }\n                $firstword = false;\n            }\n            $message .= $buf . static::$LE;\n        }\n\n        return $message;\n    }\n\n    /**\n     * Find the last character boundary prior to $maxLength in a utf-8\n     * quoted-printable encoded string.\n     * Original written by Colin Brown.\n     *\n     * @param string $encodedText utf-8 QP text\n     * @param int    $maxLength   Find the last character boundary prior to this length\n     *\n     * @return int\n     */\n    public function utf8CharBoundary($encodedText, $maxLength)\n    {\n        $foundSplitPos = false;\n        $lookBack = 3;\n        while (!$foundSplitPos) {\n            $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);\n            $encodedCharPos = strpos($lastChunk, '=');\n            if (false !== $encodedCharPos) {\n                //Found start of encoded character byte within $lookBack block.\n                //Check the encoded byte value (the 2 chars after the '=')\n                $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);\n                $dec = hexdec($hex);\n                if ($dec < 128) {\n                    //Single byte character.\n                    //If the encoded char was found at pos 0, it will fit\n                    //otherwise reduce maxLength to start of the encoded char\n                    if ($encodedCharPos > 0) {\n                        $maxLength -= $lookBack - $encodedCharPos;\n                    }\n                    $foundSplitPos = true;\n                } elseif ($dec >= 192) {\n                    //First byte of a multi byte character\n                    //Reduce maxLength to split at start of character\n                    $maxLength -= $lookBack - $encodedCharPos;\n                    $foundSplitPos = true;\n                } elseif ($dec < 192) {\n                    //Middle byte of a multi byte character, look further back\n                    $lookBack += 3;\n                }\n            } else {\n                //No encoded character found\n                $foundSplitPos = true;\n            }\n        }\n\n        return $maxLength;\n    }\n\n    /**\n     * Apply word wrapping to the message body.\n     * Wraps the message body to the number of chars set in the WordWrap property.\n     * You should only do this to plain-text bodies as wrapping HTML tags may break them.\n     * This is called automatically by createBody(), so you don't need to call it yourself.\n     */\n    public function setWordWrap()\n    {\n        if ($this->WordWrap < 1) {\n            return;\n        }\n\n        switch ($this->message_type) {\n            case 'alt':\n            case 'alt_inline':\n            case 'alt_attach':\n            case 'alt_inline_attach':\n                $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);\n                break;\n            default:\n                $this->Body = $this->wrapText($this->Body, $this->WordWrap);\n                break;\n        }\n    }\n\n    /**\n     * Assemble message headers.\n     *\n     * @return string The assembled headers\n     */\n    public function createHeader()\n    {\n        $result = '';\n\n        $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate);\n\n        //The To header is created automatically by mail(), so needs to be omitted here\n        if ('mail' !== $this->Mailer) {\n            if ($this->SingleTo) {\n                foreach ($this->to as $toaddr) {\n                    $this->SingleToArray[] = $this->addrFormat($toaddr);\n                }\n            } elseif (count($this->to) > 0) {\n                $result .= $this->addrAppend('To', $this->to);\n            } elseif (count($this->cc) === 0) {\n                $result .= $this->headerLine('To', 'undisclosed-recipients:;');\n            }\n        }\n        $result .= $this->addrAppend('From', [[trim($this->From), $this->FromName]]);\n\n        //sendmail and mail() extract Cc from the header before sending\n        if (count($this->cc) > 0) {\n            $result .= $this->addrAppend('Cc', $this->cc);\n        }\n\n        //sendmail and mail() extract Bcc from the header before sending\n        if (\n            (\n                'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer\n            )\n            && count($this->bcc) > 0\n        ) {\n            $result .= $this->addrAppend('Bcc', $this->bcc);\n        }\n\n        if (count($this->ReplyTo) > 0) {\n            $result .= $this->addrAppend('Reply-To', $this->ReplyTo);\n        }\n\n        //mail() sets the subject itself\n        if ('mail' !== $this->Mailer) {\n            $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));\n        }\n\n        //Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4\n        //https://tools.ietf.org/html/rfc5322#section-3.6.4\n        if (\n            '' !== $this->MessageID &&\n            preg_match(\n                '/^<((([a-z\\d!#$%&\\'*+\\/=?^_`{|}~-]+(\\.[a-z\\d!#$%&\\'*+\\/=?^_`{|}~-]+)*)' .\n                '|(\"(([\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]|[\\x21\\x23-\\x5B\\x5D-\\x7E])' .\n                '|(\\\\[\\x01-\\x09\\x0B\\x0C\\x0E-\\x7F]))*\"))@(([a-z\\d!#$%&\\'*+\\/=?^_`{|}~-]+' .\n                '(\\.[a-z\\d!#$%&\\'*+\\/=?^_`{|}~-]+)*)|(\\[(([\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]' .\n                '|[\\x21-\\x5A\\x5E-\\x7E])|(\\\\[\\x01-\\x09\\x0B\\x0C\\x0E-\\x7F]))*\\])))>$/Di',\n                $this->MessageID\n            )\n        ) {\n            $this->lastMessageID = $this->MessageID;\n        } else {\n            $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());\n        }\n        $result .= $this->headerLine('Message-ID', $this->lastMessageID);\n        if (null !== $this->Priority) {\n            $result .= $this->headerLine('X-Priority', $this->Priority);\n        }\n        if ('' === $this->XMailer) {\n            //Empty string for default X-Mailer header\n            $result .= $this->headerLine(\n                'X-Mailer',\n                'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)'\n            );\n        } elseif (is_string($this->XMailer) && trim($this->XMailer) !== '') {\n            //Some string\n            $result .= $this->headerLine('X-Mailer', trim($this->XMailer));\n        } //Other values result in no X-Mailer header\n\n        if ('' !== $this->ConfirmReadingTo) {\n            $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');\n        }\n\n        //Add custom headers\n        foreach ($this->CustomHeader as $header) {\n            $result .= $this->headerLine(\n                trim($header[0]),\n                $this->encodeHeader(trim($header[1]))\n            );\n        }\n        if (!$this->sign_key_file) {\n            $result .= $this->headerLine('MIME-Version', '1.0');\n            $result .= $this->getMailMIME();\n        }\n\n        return $result;\n    }\n\n    /**\n     * Get the message MIME type headers.\n     *\n     * @return string\n     */\n    public function getMailMIME()\n    {\n        $result = '';\n        $ismultipart = true;\n        switch ($this->message_type) {\n            case 'inline':\n                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');\n                $result .= $this->textLine(' boundary=\"' . $this->boundary[1] . '\"');\n                break;\n            case 'attach':\n            case 'inline_attach':\n            case 'alt_attach':\n            case 'alt_inline_attach':\n                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_MIXED . ';');\n                $result .= $this->textLine(' boundary=\"' . $this->boundary[1] . '\"');\n                break;\n            case 'alt':\n            case 'alt_inline':\n                $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');\n                $result .= $this->textLine(' boundary=\"' . $this->boundary[1] . '\"');\n                break;\n            default:\n                //Catches case 'plain': and case '':\n                $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);\n                $ismultipart = false;\n                break;\n        }\n        //RFC1341 part 5 says 7bit is assumed if not specified\n        if (static::ENCODING_7BIT !== $this->Encoding) {\n            //RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE\n            if ($ismultipart) {\n                if (static::ENCODING_8BIT === $this->Encoding) {\n                    $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT);\n                }\n                //The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible\n            } else {\n                $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns the whole MIME message.\n     * Includes complete headers and body.\n     * Only valid post preSend().\n     *\n     * @see PHPMailer::preSend()\n     *\n     * @return string\n     */\n    public function getSentMIMEMessage()\n    {\n        return static::stripTrailingWSP($this->MIMEHeader . $this->mailHeader) .\n            static::$LE . static::$LE . $this->MIMEBody;\n    }\n\n    /**\n     * Create a unique ID to use for boundaries.\n     *\n     * @return string\n     */\n    protected function generateId()\n    {\n        $len = 32; //32 bytes = 256 bits\n        $bytes = '';\n        if (function_exists('random_bytes')) {\n            try {\n                $bytes = random_bytes($len);\n            } catch (\\Exception $e) {\n                //Do nothing\n            }\n        } elseif (function_exists('openssl_random_pseudo_bytes')) {\n            /** @noinspection CryptographicallySecureRandomnessInspection */\n            $bytes = openssl_random_pseudo_bytes($len);\n        }\n        if ($bytes === '') {\n            //We failed to produce a proper random string, so make do.\n            //Use a hash to force the length to the same as the other methods\n            $bytes = hash('sha256', uniqid((string) mt_rand(), true), true);\n        }\n\n        //We don't care about messing up base64 format here, just want a random string\n        return str_replace(['=', '+', '/'], '', base64_encode(hash('sha256', $bytes, true)));\n    }\n\n    /**\n     * Assemble the message body.\n     * Returns an empty string on failure.\n     *\n     * @throws Exception\n     *\n     * @return string The assembled message body\n     */\n    public function createBody()\n    {\n        $body = '';\n        //Create unique IDs and preset boundaries\n        $this->uniqueid = $this->generateId();\n        $this->boundary[1] = 'b1_' . $this->uniqueid;\n        $this->boundary[2] = 'b2_' . $this->uniqueid;\n        $this->boundary[3] = 'b3_' . $this->uniqueid;\n\n        if ($this->sign_key_file) {\n            $body .= $this->getMailMIME() . static::$LE;\n        }\n\n        $this->setWordWrap();\n\n        $bodyEncoding = $this->Encoding;\n        $bodyCharSet = $this->CharSet;\n        //Can we do a 7-bit downgrade?\n        if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) {\n            $bodyEncoding = static::ENCODING_7BIT;\n            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit\n            $bodyCharSet = static::CHARSET_ASCII;\n        }\n        //If lines are too long, and we're not already using an encoding that will shorten them,\n        //change to quoted-printable transfer encoding for the body part only\n        if (static::ENCODING_BASE64 !== $this->Encoding && static::hasLineLongerThanMax($this->Body)) {\n            $bodyEncoding = static::ENCODING_QUOTED_PRINTABLE;\n        }\n\n        $altBodyEncoding = $this->Encoding;\n        $altBodyCharSet = $this->CharSet;\n        //Can we do a 7-bit downgrade?\n        if (static::ENCODING_8BIT === $altBodyEncoding && !$this->has8bitChars($this->AltBody)) {\n            $altBodyEncoding = static::ENCODING_7BIT;\n            //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit\n            $altBodyCharSet = static::CHARSET_ASCII;\n        }\n        //If lines are too long, and we're not already using an encoding that will shorten them,\n        //change to quoted-printable transfer encoding for the alt body part only\n        if (static::ENCODING_BASE64 !== $altBodyEncoding && static::hasLineLongerThanMax($this->AltBody)) {\n            $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE;\n        }\n        //Use this as a preamble in all multipart message types\n        $mimepre = 'This is a multi-part message in MIME format.' . static::$LE . static::$LE;\n        switch ($this->message_type) {\n            case 'inline':\n                $body .= $mimepre;\n                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->attachAll('inline', $this->boundary[1]);\n                break;\n            case 'attach':\n                $body .= $mimepre;\n                $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->attachAll('attachment', $this->boundary[1]);\n                break;\n            case 'inline_attach':\n                $body .= $mimepre;\n                $body .= $this->textLine('--' . $this->boundary[1]);\n                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');\n                $body .= $this->textLine(' boundary=\"' . $this->boundary[2] . '\";');\n                $body .= $this->textLine(' type=\"' . static::CONTENT_TYPE_TEXT_HTML . '\"');\n                $body .= static::$LE;\n                $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->attachAll('inline', $this->boundary[2]);\n                $body .= static::$LE;\n                $body .= $this->attachAll('attachment', $this->boundary[1]);\n                break;\n            case 'alt':\n                $body .= $mimepre;\n                $body .= $this->getBoundary(\n                    $this->boundary[1],\n                    $altBodyCharSet,\n                    static::CONTENT_TYPE_PLAINTEXT,\n                    $altBodyEncoding\n                );\n                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->getBoundary(\n                    $this->boundary[1],\n                    $bodyCharSet,\n                    static::CONTENT_TYPE_TEXT_HTML,\n                    $bodyEncoding\n                );\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                if (!empty($this->Ical)) {\n                    $method = static::ICAL_METHOD_REQUEST;\n                    foreach (static::$IcalMethods as $imethod) {\n                        if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {\n                            $method = $imethod;\n                            break;\n                        }\n                    }\n                    $body .= $this->getBoundary(\n                        $this->boundary[1],\n                        '',\n                        static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,\n                        ''\n                    );\n                    $body .= $this->encodeString($this->Ical, $this->Encoding);\n                    $body .= static::$LE;\n                }\n                $body .= $this->endBoundary($this->boundary[1]);\n                break;\n            case 'alt_inline':\n                $body .= $mimepre;\n                $body .= $this->getBoundary(\n                    $this->boundary[1],\n                    $altBodyCharSet,\n                    static::CONTENT_TYPE_PLAINTEXT,\n                    $altBodyEncoding\n                );\n                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->textLine('--' . $this->boundary[1]);\n                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');\n                $body .= $this->textLine(' boundary=\"' . $this->boundary[2] . '\";');\n                $body .= $this->textLine(' type=\"' . static::CONTENT_TYPE_TEXT_HTML . '\"');\n                $body .= static::$LE;\n                $body .= $this->getBoundary(\n                    $this->boundary[2],\n                    $bodyCharSet,\n                    static::CONTENT_TYPE_TEXT_HTML,\n                    $bodyEncoding\n                );\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->attachAll('inline', $this->boundary[2]);\n                $body .= static::$LE;\n                $body .= $this->endBoundary($this->boundary[1]);\n                break;\n            case 'alt_attach':\n                $body .= $mimepre;\n                $body .= $this->textLine('--' . $this->boundary[1]);\n                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');\n                $body .= $this->textLine(' boundary=\"' . $this->boundary[2] . '\"');\n                $body .= static::$LE;\n                $body .= $this->getBoundary(\n                    $this->boundary[2],\n                    $altBodyCharSet,\n                    static::CONTENT_TYPE_PLAINTEXT,\n                    $altBodyEncoding\n                );\n                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->getBoundary(\n                    $this->boundary[2],\n                    $bodyCharSet,\n                    static::CONTENT_TYPE_TEXT_HTML,\n                    $bodyEncoding\n                );\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                if (!empty($this->Ical)) {\n                    $method = static::ICAL_METHOD_REQUEST;\n                    foreach (static::$IcalMethods as $imethod) {\n                        if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) {\n                            $method = $imethod;\n                            break;\n                        }\n                    }\n                    $body .= $this->getBoundary(\n                        $this->boundary[2],\n                        '',\n                        static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method,\n                        ''\n                    );\n                    $body .= $this->encodeString($this->Ical, $this->Encoding);\n                }\n                $body .= $this->endBoundary($this->boundary[2]);\n                $body .= static::$LE;\n                $body .= $this->attachAll('attachment', $this->boundary[1]);\n                break;\n            case 'alt_inline_attach':\n                $body .= $mimepre;\n                $body .= $this->textLine('--' . $this->boundary[1]);\n                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';');\n                $body .= $this->textLine(' boundary=\"' . $this->boundary[2] . '\"');\n                $body .= static::$LE;\n                $body .= $this->getBoundary(\n                    $this->boundary[2],\n                    $altBodyCharSet,\n                    static::CONTENT_TYPE_PLAINTEXT,\n                    $altBodyEncoding\n                );\n                $body .= $this->encodeString($this->AltBody, $altBodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->textLine('--' . $this->boundary[2]);\n                $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';');\n                $body .= $this->textLine(' boundary=\"' . $this->boundary[3] . '\";');\n                $body .= $this->textLine(' type=\"' . static::CONTENT_TYPE_TEXT_HTML . '\"');\n                $body .= static::$LE;\n                $body .= $this->getBoundary(\n                    $this->boundary[3],\n                    $bodyCharSet,\n                    static::CONTENT_TYPE_TEXT_HTML,\n                    $bodyEncoding\n                );\n                $body .= $this->encodeString($this->Body, $bodyEncoding);\n                $body .= static::$LE;\n                $body .= $this->attachAll('inline', $this->boundary[3]);\n                $body .= static::$LE;\n                $body .= $this->endBoundary($this->boundary[2]);\n                $body .= static::$LE;\n                $body .= $this->attachAll('attachment', $this->boundary[1]);\n                break;\n            default:\n                //Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types\n                //Reset the `Encoding` property in case we changed it for line length reasons\n                $this->Encoding = $bodyEncoding;\n                $body .= $this->encodeString($this->Body, $this->Encoding);\n                break;\n        }\n\n        if ($this->isError()) {\n            $body = '';\n            if ($this->exceptions) {\n                throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL);\n            }\n        } elseif ($this->sign_key_file) {\n            try {\n                if (!defined('PKCS7_TEXT')) {\n                    throw new Exception($this->lang('extension_missing') . 'openssl');\n                }\n\n                $file = tempnam(sys_get_temp_dir(), 'srcsign');\n                $signed = tempnam(sys_get_temp_dir(), 'mailsign');\n                file_put_contents($file, $body);\n\n                //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197\n                if (empty($this->sign_extracerts_file)) {\n                    $sign = @openssl_pkcs7_sign(\n                        $file,\n                        $signed,\n                        'file://' . realpath($this->sign_cert_file),\n                        ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],\n                        []\n                    );\n                } else {\n                    $sign = @openssl_pkcs7_sign(\n                        $file,\n                        $signed,\n                        'file://' . realpath($this->sign_cert_file),\n                        ['file://' . realpath($this->sign_key_file), $this->sign_key_pass],\n                        [],\n                        PKCS7_DETACHED,\n                        $this->sign_extracerts_file\n                    );\n                }\n\n                @unlink($file);\n                if ($sign) {\n                    $body = file_get_contents($signed);\n                    @unlink($signed);\n                    //The message returned by openssl contains both headers and body, so need to split them up\n                    $parts = explode(\"\\n\\n\", $body, 2);\n                    $this->MIMEHeader .= $parts[0] . static::$LE . static::$LE;\n                    $body = $parts[1];\n                } else {\n                    @unlink($signed);\n                    throw new Exception($this->lang('signing') . openssl_error_string());\n                }\n            } catch (Exception $exc) {\n                $body = '';\n                if ($this->exceptions) {\n                    throw $exc;\n                }\n            }\n        }\n\n        return $body;\n    }\n\n    /**\n     * Return the start of a message boundary.\n     *\n     * @param string $boundary\n     * @param string $charSet\n     * @param string $contentType\n     * @param string $encoding\n     *\n     * @return string\n     */\n    protected function getBoundary($boundary, $charSet, $contentType, $encoding)\n    {\n        $result = '';\n        if ('' === $charSet) {\n            $charSet = $this->CharSet;\n        }\n        if ('' === $contentType) {\n            $contentType = $this->ContentType;\n        }\n        if ('' === $encoding) {\n            $encoding = $this->Encoding;\n        }\n        $result .= $this->textLine('--' . $boundary);\n        $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);\n        $result .= static::$LE;\n        //RFC1341 part 5 says 7bit is assumed if not specified\n        if (static::ENCODING_7BIT !== $encoding) {\n            $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);\n        }\n        $result .= static::$LE;\n\n        return $result;\n    }\n\n    /**\n     * Return the end of a message boundary.\n     *\n     * @param string $boundary\n     *\n     * @return string\n     */\n    protected function endBoundary($boundary)\n    {\n        return static::$LE . '--' . $boundary . '--' . static::$LE;\n    }\n\n    /**\n     * Set the message type.\n     * PHPMailer only supports some preset message types, not arbitrary MIME structures.\n     */\n    protected function setMessageType()\n    {\n        $type = [];\n        if ($this->alternativeExists()) {\n            $type[] = 'alt';\n        }\n        if ($this->inlineImageExists()) {\n            $type[] = 'inline';\n        }\n        if ($this->attachmentExists()) {\n            $type[] = 'attach';\n        }\n        $this->message_type = implode('_', $type);\n        if ('' === $this->message_type) {\n            //The 'plain' message_type refers to the message having a single body element, not that it is plain-text\n            $this->message_type = 'plain';\n        }\n    }\n\n    /**\n     * Format a header line.\n     *\n     * @param string     $name\n     * @param string|int $value\n     *\n     * @return string\n     */\n    public function headerLine($name, $value)\n    {\n        return $name . ': ' . $value . static::$LE;\n    }\n\n    /**\n     * Return a formatted mail line.\n     *\n     * @param string $value\n     *\n     * @return string\n     */\n    public function textLine($value)\n    {\n        return $value . static::$LE;\n    }\n\n    /**\n     * Add an attachment from a path on the filesystem.\n     * Never use a user-supplied path to a file!\n     * Returns false if the file could not be found or read.\n     * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client.\n     * If you need to do that, fetch the resource yourself and pass it in via a local file or string.\n     *\n     * @param string $path        Path to the attachment\n     * @param string $name        Overrides the attachment name\n     * @param string $encoding    File encoding (see $Encoding)\n     * @param string $type        MIME type, e.g. `image/jpeg`; determined automatically from $path if not specified\n     * @param string $disposition Disposition to use\n     *\n     * @throws Exception\n     *\n     * @return bool\n     */\n    public function addAttachment(\n        $path,\n        $name = '',\n        $encoding = self::ENCODING_BASE64,\n        $type = '',\n        $disposition = 'attachment'\n    ) {\n        try {\n            if (!static::fileIsAccessible($path)) {\n                throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);\n            }\n\n            //If a MIME type is not specified, try to work it out from the file name\n            if ('' === $type) {\n                $type = static::filenameToType($path);\n            }\n\n            $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);\n            if ('' === $name) {\n                $name = $filename;\n            }\n            if (!$this->validateEncoding($encoding)) {\n                throw new Exception($this->lang('encoding') . $encoding);\n            }\n\n            $this->attachment[] = [\n                0 => $path,\n                1 => $filename,\n                2 => $name,\n                3 => $encoding,\n                4 => $type,\n                5 => false, //isStringAttachment\n                6 => $disposition,\n                7 => $name,\n            ];\n        } catch (Exception $exc) {\n            $this->setError($exc->getMessage());\n            $this->edebug($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Return the array of attachments.\n     *\n     * @return array\n     */\n    public function getAttachments()\n    {\n        return $this->attachment;\n    }\n\n    /**\n     * Attach all file, string, and binary attachments to the message.\n     * Returns an empty string on failure.\n     *\n     * @param string $disposition_type\n     * @param string $boundary\n     *\n     * @throws Exception\n     *\n     * @return string\n     */\n    protected function attachAll($disposition_type, $boundary)\n    {\n        //Return text of body\n        $mime = [];\n        $cidUniq = [];\n        $incl = [];\n\n        //Add all attachments\n        foreach ($this->attachment as $attachment) {\n            //Check if it is a valid disposition_filter\n            if ($attachment[6] === $disposition_type) {\n                //Check for string attachment\n                $string = '';\n                $path = '';\n                $bString = $attachment[5];\n                if ($bString) {\n                    $string = $attachment[0];\n                } else {\n                    $path = $attachment[0];\n                }\n\n                $inclhash = hash('sha256', serialize($attachment));\n                if (in_array($inclhash, $incl, true)) {\n                    continue;\n                }\n                $incl[] = $inclhash;\n                $name = $attachment[2];\n                $encoding = $attachment[3];\n                $type = $attachment[4];\n                $disposition = $attachment[6];\n                $cid = $attachment[7];\n                if ('inline' === $disposition && array_key_exists($cid, $cidUniq)) {\n                    continue;\n                }\n                $cidUniq[$cid] = true;\n\n                $mime[] = sprintf('--%s%s', $boundary, static::$LE);\n                //Only include a filename property if we have one\n                if (!empty($name)) {\n                    $mime[] = sprintf(\n                        'Content-Type: %s; name=%s%s',\n                        $type,\n                        static::quotedString($this->encodeHeader($this->secureHeader($name))),\n                        static::$LE\n                    );\n                } else {\n                    $mime[] = sprintf(\n                        'Content-Type: %s%s',\n                        $type,\n                        static::$LE\n                    );\n                }\n                //RFC1341 part 5 says 7bit is assumed if not specified\n                if (static::ENCODING_7BIT !== $encoding) {\n                    $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE);\n                }\n\n                //Only set Content-IDs on inline attachments\n                if ((string) $cid !== '' && $disposition === 'inline') {\n                    $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($cid)) . '>' . static::$LE;\n                }\n\n                //Allow for bypassing the Content-Disposition header\n                if (!empty($disposition)) {\n                    $encoded_name = $this->encodeHeader($this->secureHeader($name));\n                    if (!empty($encoded_name)) {\n                        $mime[] = sprintf(\n                            'Content-Disposition: %s; filename=%s%s',\n                            $disposition,\n                            static::quotedString($encoded_name),\n                            static::$LE . static::$LE\n                        );\n                    } else {\n                        $mime[] = sprintf(\n                            'Content-Disposition: %s%s',\n                            $disposition,\n                            static::$LE . static::$LE\n                        );\n                    }\n                } else {\n                    $mime[] = static::$LE;\n                }\n\n                //Encode as string attachment\n                if ($bString) {\n                    $mime[] = $this->encodeString($string, $encoding);\n                } else {\n                    $mime[] = $this->encodeFile($path, $encoding);\n                }\n                if ($this->isError()) {\n                    return '';\n                }\n                $mime[] = static::$LE;\n            }\n        }\n\n        $mime[] = sprintf('--%s--%s', $boundary, static::$LE);\n\n        return implode('', $mime);\n    }\n\n    /**\n     * Encode a file attachment in requested format.\n     * Returns an empty string on failure.\n     *\n     * @param string $path     The full path to the file\n     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\n     *\n     * @return string\n     */\n    protected function encodeFile($path, $encoding = self::ENCODING_BASE64)\n    {\n        try {\n            if (!static::fileIsAccessible($path)) {\n                throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);\n            }\n            $file_buffer = file_get_contents($path);\n            if (false === $file_buffer) {\n                throw new Exception($this->lang('file_open') . $path, self::STOP_CONTINUE);\n            }\n            $file_buffer = $this->encodeString($file_buffer, $encoding);\n\n            return $file_buffer;\n        } catch (Exception $exc) {\n            $this->setError($exc->getMessage());\n            $this->edebug($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return '';\n        }\n    }\n\n    /**\n     * Encode a string in requested format.\n     * Returns an empty string on failure.\n     *\n     * @param string $str      The text to encode\n     * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'\n     *\n     * @throws Exception\n     *\n     * @return string\n     */\n    public function encodeString($str, $encoding = self::ENCODING_BASE64)\n    {\n        $encoded = '';\n        switch (strtolower($encoding)) {\n            case static::ENCODING_BASE64:\n                $encoded = chunk_split(\n                    base64_encode($str),\n                    static::STD_LINE_LENGTH,\n                    static::$LE\n                );\n                break;\n            case static::ENCODING_7BIT:\n            case static::ENCODING_8BIT:\n                $encoded = static::normalizeBreaks($str);\n                //Make sure it ends with a line break\n                if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) {\n                    $encoded .= static::$LE;\n                }\n                break;\n            case static::ENCODING_BINARY:\n                $encoded = $str;\n                break;\n            case static::ENCODING_QUOTED_PRINTABLE:\n                $encoded = $this->encodeQP($str);\n                break;\n            default:\n                $this->setError($this->lang('encoding') . $encoding);\n                if ($this->exceptions) {\n                    throw new Exception($this->lang('encoding') . $encoding);\n                }\n                break;\n        }\n\n        return $encoded;\n    }\n\n    /**\n     * Encode a header value (not including its label) optimally.\n     * Picks shortest of Q, B, or none. Result includes folding if needed.\n     * See RFC822 definitions for phrase, comment and text positions.\n     *\n     * @param string $str      The header value to encode\n     * @param string $position What context the string will be used in\n     *\n     * @return string\n     */\n    public function encodeHeader($str, $position = 'text')\n    {\n        $matchcount = 0;\n        switch (strtolower($position)) {\n            case 'phrase':\n                if (!preg_match('/[\\200-\\377]/', $str)) {\n                    //Can't use addslashes as we don't know the value of magic_quotes_sybase\n                    $encoded = addcslashes($str, \"\\0..\\37\\177\\\\\\\"\");\n                    if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\\'*+\\/=?^_`{|}~ -]/', $str)) {\n                        return $encoded;\n                    }\n\n                    return \"\\\"$encoded\\\"\";\n                }\n                $matchcount = preg_match_all('/[^\\040\\041\\043-\\133\\135-\\176]/', $str, $matches);\n                break;\n            /* @noinspection PhpMissingBreakStatementInspection */\n            case 'comment':\n                $matchcount = preg_match_all('/[()\"]/', $str, $matches);\n            //fallthrough\n            case 'text':\n            default:\n                $matchcount += preg_match_all('/[\\000-\\010\\013\\014\\016-\\037\\177-\\377]/', $str, $matches);\n                break;\n        }\n\n        if ($this->has8bitChars($str)) {\n            $charset = $this->CharSet;\n        } else {\n            $charset = static::CHARSET_ASCII;\n        }\n\n        //Q/B encoding adds 8 chars and the charset (\"` =?<charset>?[QB]?<content>?=`\").\n        $overhead = 8 + strlen($charset);\n\n        if ('mail' === $this->Mailer) {\n            $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead;\n        } else {\n            $maxlen = static::MAX_LINE_LENGTH - $overhead;\n        }\n\n        //Select the encoding that produces the shortest output and/or prevents corruption.\n        if ($matchcount > strlen($str) / 3) {\n            //More than 1/3 of the content needs encoding, use B-encode.\n            $encoding = 'B';\n        } elseif ($matchcount > 0) {\n            //Less than 1/3 of the content needs encoding, use Q-encode.\n            $encoding = 'Q';\n        } elseif (strlen($str) > $maxlen) {\n            //No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption.\n            $encoding = 'Q';\n        } else {\n            //No reformatting needed\n            $encoding = false;\n        }\n\n        switch ($encoding) {\n            case 'B':\n                if ($this->hasMultiBytes($str)) {\n                    //Use a custom function which correctly encodes and wraps long\n                    //multibyte strings without breaking lines within a character\n                    $encoded = $this->base64EncodeWrapMB($str, \"\\n\");\n                } else {\n                    $encoded = base64_encode($str);\n                    $maxlen -= $maxlen % 4;\n                    $encoded = trim(chunk_split($encoded, $maxlen, \"\\n\"));\n                }\n                $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . \"?$encoding?\\\\1?=\", $encoded);\n                break;\n            case 'Q':\n                $encoded = $this->encodeQ($str, $position);\n                $encoded = $this->wrapText($encoded, $maxlen, true);\n                $encoded = str_replace('=' . static::$LE, \"\\n\", trim($encoded));\n                $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . \"?$encoding?\\\\1?=\", $encoded);\n                break;\n            default:\n                return $str;\n        }\n\n        return trim(static::normalizeBreaks($encoded));\n    }\n\n    /**\n     * Check if a string contains multi-byte characters.\n     *\n     * @param string $str multi-byte text to wrap encode\n     *\n     * @return bool\n     */\n    public function hasMultiBytes($str)\n    {\n        if (function_exists('mb_strlen')) {\n            return strlen($str) > mb_strlen($str, $this->CharSet);\n        }\n\n        //Assume no multibytes (we can't handle without mbstring functions anyway)\n        return false;\n    }\n\n    /**\n     * Does a string contain any 8-bit chars (in any charset)?\n     *\n     * @param string $text\n     *\n     * @return bool\n     */\n    public function has8bitChars($text)\n    {\n        return (bool) preg_match('/[\\x80-\\xFF]/', $text);\n    }\n\n    /**\n     * Encode and wrap long multibyte strings for mail headers\n     * without breaking lines within a character.\n     * Adapted from a function by paravoid.\n     *\n     * @see http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283\n     *\n     * @param string $str       multi-byte text to wrap encode\n     * @param string $linebreak string to use as linefeed/end-of-line\n     *\n     * @return string\n     */\n    public function base64EncodeWrapMB($str, $linebreak = null)\n    {\n        $start = '=?' . $this->CharSet . '?B?';\n        $end = '?=';\n        $encoded = '';\n        if (null === $linebreak) {\n            $linebreak = static::$LE;\n        }\n\n        $mb_length = mb_strlen($str, $this->CharSet);\n        //Each line must have length <= 75, including $start and $end\n        $length = 75 - strlen($start) - strlen($end);\n        //Average multi-byte ratio\n        $ratio = $mb_length / strlen($str);\n        //Base64 has a 4:3 ratio\n        $avgLength = floor($length * $ratio * .75);\n\n        $offset = 0;\n        for ($i = 0; $i < $mb_length; $i += $offset) {\n            $lookBack = 0;\n            do {\n                $offset = $avgLength - $lookBack;\n                $chunk = mb_substr($str, $i, $offset, $this->CharSet);\n                $chunk = base64_encode($chunk);\n                ++$lookBack;\n            } while (strlen($chunk) > $length);\n            $encoded .= $chunk . $linebreak;\n        }\n\n        //Chomp the last linefeed\n        return substr($encoded, 0, -strlen($linebreak));\n    }\n\n    /**\n     * Encode a string in quoted-printable format.\n     * According to RFC2045 section 6.7.\n     *\n     * @param string $string The text to encode\n     *\n     * @return string\n     */\n    public function encodeQP($string)\n    {\n        return static::normalizeBreaks(quoted_printable_encode($string));\n    }\n\n    /**\n     * Encode a string using Q encoding.\n     *\n     * @see http://tools.ietf.org/html/rfc2047#section-4.2\n     *\n     * @param string $str      the text to encode\n     * @param string $position Where the text is going to be used, see the RFC for what that means\n     *\n     * @return string\n     */\n    public function encodeQ($str, $position = 'text')\n    {\n        //There should not be any EOL in the string\n        $pattern = '';\n        $encoded = str_replace([\"\\r\", \"\\n\"], '', $str);\n        switch (strtolower($position)) {\n            case 'phrase':\n                //RFC 2047 section 5.3\n                $pattern = '^A-Za-z0-9!*+\\/ -';\n                break;\n            /*\n             * RFC 2047 section 5.2.\n             * Build $pattern without including delimiters and []\n             */\n            /* @noinspection PhpMissingBreakStatementInspection */\n            case 'comment':\n                $pattern = '\\(\\)\"';\n            /* Intentional fall through */\n            case 'text':\n            default:\n                //RFC 2047 section 5.1\n                //Replace every high ascii, control, =, ? and _ characters\n                $pattern = '\\000-\\011\\013\\014\\016-\\037\\075\\077\\137\\177-\\377' . $pattern;\n                break;\n        }\n        $matches = [];\n        if (preg_match_all(\"/[{$pattern}]/\", $encoded, $matches)) {\n            //If the string contains an '=', make sure it's the first thing we replace\n            //so as to avoid double-encoding\n            $eqkey = array_search('=', $matches[0], true);\n            if (false !== $eqkey) {\n                unset($matches[0][$eqkey]);\n                array_unshift($matches[0], '=');\n            }\n            foreach (array_unique($matches[0]) as $char) {\n                $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);\n            }\n        }\n        //Replace spaces with _ (more readable than =20)\n        //RFC 2047 section 4.2(2)\n        return str_replace(' ', '_', $encoded);\n    }\n\n    /**\n     * Add a string or binary attachment (non-filesystem).\n     * This method can be used to attach ascii or binary data,\n     * such as a BLOB record from a database.\n     *\n     * @param string $string      String attachment data\n     * @param string $filename    Name of the attachment\n     * @param string $encoding    File encoding (see $Encoding)\n     * @param string $type        File extension (MIME) type\n     * @param string $disposition Disposition to use\n     *\n     * @throws Exception\n     *\n     * @return bool True on successfully adding an attachment\n     */\n    public function addStringAttachment(\n        $string,\n        $filename,\n        $encoding = self::ENCODING_BASE64,\n        $type = '',\n        $disposition = 'attachment'\n    ) {\n        try {\n            //If a MIME type is not specified, try to work it out from the file name\n            if ('' === $type) {\n                $type = static::filenameToType($filename);\n            }\n\n            if (!$this->validateEncoding($encoding)) {\n                throw new Exception($this->lang('encoding') . $encoding);\n            }\n\n            //Append to $attachment array\n            $this->attachment[] = [\n                0 => $string,\n                1 => $filename,\n                2 => static::mb_pathinfo($filename, PATHINFO_BASENAME),\n                3 => $encoding,\n                4 => $type,\n                5 => true, //isStringAttachment\n                6 => $disposition,\n                7 => 0,\n            ];\n        } catch (Exception $exc) {\n            $this->setError($exc->getMessage());\n            $this->edebug($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Add an embedded (inline) attachment from a file.\n     * This can include images, sounds, and just about any other document type.\n     * These differ from 'regular' attachments in that they are intended to be\n     * displayed inline with the message, not just attached for download.\n     * This is used in HTML messages that embed the images\n     * the HTML refers to using the $cid value.\n     * Never use a user-supplied path to a file!\n     *\n     * @param string $path        Path to the attachment\n     * @param string $cid         Content ID of the attachment; Use this to reference\n     *                            the content when using an embedded image in HTML\n     * @param string $name        Overrides the attachment name\n     * @param string $encoding    File encoding (see $Encoding)\n     * @param string $type        File MIME type\n     * @param string $disposition Disposition to use\n     *\n     * @throws Exception\n     *\n     * @return bool True on successfully adding an attachment\n     */\n    public function addEmbeddedImage(\n        $path,\n        $cid,\n        $name = '',\n        $encoding = self::ENCODING_BASE64,\n        $type = '',\n        $disposition = 'inline'\n    ) {\n        try {\n            if (!static::fileIsAccessible($path)) {\n                throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE);\n            }\n\n            //If a MIME type is not specified, try to work it out from the file name\n            if ('' === $type) {\n                $type = static::filenameToType($path);\n            }\n\n            if (!$this->validateEncoding($encoding)) {\n                throw new Exception($this->lang('encoding') . $encoding);\n            }\n\n            $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME);\n            if ('' === $name) {\n                $name = $filename;\n            }\n\n            //Append to $attachment array\n            $this->attachment[] = [\n                0 => $path,\n                1 => $filename,\n                2 => $name,\n                3 => $encoding,\n                4 => $type,\n                5 => false, //isStringAttachment\n                6 => $disposition,\n                7 => $cid,\n            ];\n        } catch (Exception $exc) {\n            $this->setError($exc->getMessage());\n            $this->edebug($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Add an embedded stringified attachment.\n     * This can include images, sounds, and just about any other document type.\n     * If your filename doesn't contain an extension, be sure to set the $type to an appropriate MIME type.\n     *\n     * @param string $string      The attachment binary data\n     * @param string $cid         Content ID of the attachment; Use this to reference\n     *                            the content when using an embedded image in HTML\n     * @param string $name        A filename for the attachment. If this contains an extension,\n     *                            PHPMailer will attempt to set a MIME type for the attachment.\n     *                            For example 'file.jpg' would get an 'image/jpeg' MIME type.\n     * @param string $encoding    File encoding (see $Encoding), defaults to 'base64'\n     * @param string $type        MIME type - will be used in preference to any automatically derived type\n     * @param string $disposition Disposition to use\n     *\n     * @throws Exception\n     *\n     * @return bool True on successfully adding an attachment\n     */\n    public function addStringEmbeddedImage(\n        $string,\n        $cid,\n        $name = '',\n        $encoding = self::ENCODING_BASE64,\n        $type = '',\n        $disposition = 'inline'\n    ) {\n        try {\n            //If a MIME type is not specified, try to work it out from the name\n            if ('' === $type && !empty($name)) {\n                $type = static::filenameToType($name);\n            }\n\n            if (!$this->validateEncoding($encoding)) {\n                throw new Exception($this->lang('encoding') . $encoding);\n            }\n\n            //Append to $attachment array\n            $this->attachment[] = [\n                0 => $string,\n                1 => $name,\n                2 => $name,\n                3 => $encoding,\n                4 => $type,\n                5 => true, //isStringAttachment\n                6 => $disposition,\n                7 => $cid,\n            ];\n        } catch (Exception $exc) {\n            $this->setError($exc->getMessage());\n            $this->edebug($exc->getMessage());\n            if ($this->exceptions) {\n                throw $exc;\n            }\n\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Validate encodings.\n     *\n     * @param string $encoding\n     *\n     * @return bool\n     */\n    protected function validateEncoding($encoding)\n    {\n        return in_array(\n            $encoding,\n            [\n                self::ENCODING_7BIT,\n                self::ENCODING_QUOTED_PRINTABLE,\n                self::ENCODING_BASE64,\n                self::ENCODING_8BIT,\n                self::ENCODING_BINARY,\n            ],\n            true\n        );\n    }\n\n    /**\n     * Check if an embedded attachment is present with this cid.\n     *\n     * @param string $cid\n     *\n     * @return bool\n     */\n    protected function cidExists($cid)\n    {\n        foreach ($this->attachment as $attachment) {\n            if ('inline' === $attachment[6] && $cid === $attachment[7]) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Check if an inline attachment is present.\n     *\n     * @return bool\n     */\n    public function inlineImageExists()\n    {\n        foreach ($this->attachment as $attachment) {\n            if ('inline' === $attachment[6]) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Check if an attachment (non-inline) is present.\n     *\n     * @return bool\n     */\n    public function attachmentExists()\n    {\n        foreach ($this->attachment as $attachment) {\n            if ('attachment' === $attachment[6]) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Check if this message has an alternative body set.\n     *\n     * @return bool\n     */\n    public function alternativeExists()\n    {\n        return !empty($this->AltBody);\n    }\n\n    /**\n     * Clear queued addresses of given kind.\n     *\n     * @param string $kind 'to', 'cc', or 'bcc'\n     */\n    public function clearQueuedAddresses($kind)\n    {\n        $this->RecipientsQueue = array_filter(\n            $this->RecipientsQueue,\n            static function ($params) use ($kind) {\n                return $params[0] !== $kind;\n            }\n        );\n    }\n\n    /**\n     * Clear all To recipients.\n     */\n    public function clearAddresses()\n    {\n        foreach ($this->to as $to) {\n            unset($this->all_recipients[strtolower($to[0])]);\n        }\n        $this->to = [];\n        $this->clearQueuedAddresses('to');\n    }\n\n    /**\n     * Clear all CC recipients.\n     */\n    public function clearCCs()\n    {\n        foreach ($this->cc as $cc) {\n            unset($this->all_recipients[strtolower($cc[0])]);\n        }\n        $this->cc = [];\n        $this->clearQueuedAddresses('cc');\n    }\n\n    /**\n     * Clear all BCC recipients.\n     */\n    public function clearBCCs()\n    {\n        foreach ($this->bcc as $bcc) {\n            unset($this->all_recipients[strtolower($bcc[0])]);\n        }\n        $this->bcc = [];\n        $this->clearQueuedAddresses('bcc');\n    }\n\n    /**\n     * Clear all ReplyTo recipients.\n     */\n    public function clearReplyTos()\n    {\n        $this->ReplyTo = [];\n        $this->ReplyToQueue = [];\n    }\n\n    /**\n     * Clear all recipient types.\n     */\n    public function clearAllRecipients()\n    {\n        $this->to = [];\n        $this->cc = [];\n        $this->bcc = [];\n        $this->all_recipients = [];\n        $this->RecipientsQueue = [];\n    }\n\n    /**\n     * Clear all filesystem, string, and binary attachments.\n     */\n    public function clearAttachments()\n    {\n        $this->attachment = [];\n    }\n\n    /**\n     * Clear all custom headers.\n     */\n    public function clearCustomHeaders()\n    {\n        $this->CustomHeader = [];\n    }\n\n    /**\n     * Add an error message to the error container.\n     *\n     * @param string $msg\n     */\n    protected function setError($msg)\n    {\n        ++$this->error_count;\n        if ('smtp' === $this->Mailer && null !== $this->smtp) {\n            $lasterror = $this->smtp->getError();\n            if (!empty($lasterror['error'])) {\n                $msg .= $this->lang('smtp_error') . $lasterror['error'];\n                if (!empty($lasterror['detail'])) {\n                    $msg .= ' ' . $this->lang('smtp_detail') . $lasterror['detail'];\n                }\n                if (!empty($lasterror['smtp_code'])) {\n                    $msg .= ' ' . $this->lang('smtp_code') . $lasterror['smtp_code'];\n                }\n                if (!empty($lasterror['smtp_code_ex'])) {\n                    $msg .= ' ' . $this->lang('smtp_code_ex') . $lasterror['smtp_code_ex'];\n                }\n            }\n        }\n        $this->ErrorInfo = $msg;\n    }\n\n    /**\n     * Return an RFC 822 formatted date.\n     *\n     * @return string\n     */\n    public static function rfcDate()\n    {\n        //Set the time zone to whatever the default is to avoid 500 errors\n        //Will default to UTC if it's not set properly in php.ini\n        date_default_timezone_set(@date_default_timezone_get());\n\n        return date('D, j M Y H:i:s O');\n    }\n\n    /**\n     * Get the server hostname.\n     * Returns 'localhost.localdomain' if unknown.\n     *\n     * @return string\n     */\n    protected function serverHostname()\n    {\n        $result = '';\n        if (!empty($this->Hostname)) {\n            $result = $this->Hostname;\n        } elseif (isset($_SERVER) && array_key_exists('SERVER_NAME', $_SERVER)) {\n            $result = $_SERVER['SERVER_NAME'];\n        } elseif (function_exists('gethostname') && gethostname() !== false) {\n            $result = gethostname();\n        } elseif (php_uname('n') !== false) {\n            $result = php_uname('n');\n        }\n        if (!static::isValidHost($result)) {\n            return 'localhost.localdomain';\n        }\n\n        return $result;\n    }\n\n    /**\n     * Validate whether a string contains a valid value to use as a hostname or IP address.\n     * IPv6 addresses must include [], e.g. `[::1]`, not just `::1`.\n     *\n     * @param string $host The host name or IP address to check\n     *\n     * @return bool\n     */\n    public static function isValidHost($host)\n    {\n        //Simple syntax limits\n        if (\n            empty($host)\n            || !is_string($host)\n            || strlen($host) > 256\n            || !preg_match('/^([a-zA-Z\\d.-]*|\\[[a-fA-F\\d:]+\\])$/', $host)\n        ) {\n            return false;\n        }\n        //Looks like a bracketed IPv6 address\n        if (strlen($host) > 2 && substr($host, 0, 1) === '[' && substr($host, -1, 1) === ']') {\n            return filter_var(substr($host, 1, -1), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false;\n        }\n        //If removing all the dots results in a numeric string, it must be an IPv4 address.\n        //Need to check this first because otherwise things like `999.0.0.0` are considered valid host names\n        if (is_numeric(str_replace('.', '', $host))) {\n            //Is it a valid IPv4 address?\n            return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false;\n        }\n        if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false) {\n            //Is it a syntactically valid hostname?\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Get an error message in the current language.\n     *\n     * @param string $key\n     *\n     * @return string\n     */\n    protected function lang($key)\n    {\n        if (count($this->language) < 1) {\n            $this->setLanguage(); //Set the default language\n        }\n\n        if (array_key_exists($key, $this->language)) {\n            if ('smtp_connect_failed' === $key) {\n                //Include a link to troubleshooting docs on SMTP connection failure.\n                //This is by far the biggest cause of support questions\n                //but it's usually not PHPMailer's fault.\n                return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';\n            }\n\n            return $this->language[$key];\n        }\n\n        //Return the key as a fallback\n        return $key;\n    }\n\n    /**\n     * Build an error message starting with a generic one and adding details if possible.\n     *\n     * @param string $base_key\n     * @return string\n     */\n    private function getSmtpErrorMessage($base_key)\n    {\n        $message = $this->lang($base_key);\n        $error = $this->smtp->getError();\n        if (!empty($error['error'])) {\n            $message .= ' ' . $error['error'];\n            if (!empty($error['detail'])) {\n                $message .= ' ' . $error['detail'];\n            }\n        }\n\n        return $message;\n    }\n\n    /**\n     * Check if an error occurred.\n     *\n     * @return bool True if an error did occur\n     */\n    public function isError()\n    {\n        return $this->error_count > 0;\n    }\n\n    /**\n     * Add a custom header.\n     * $name value can be overloaded to contain\n     * both header name and value (name:value).\n     *\n     * @param string      $name  Custom header name\n     * @param string|null $value Header value\n     *\n     * @throws Exception\n     */\n    public function addCustomHeader($name, $value = null)\n    {\n        if (null === $value && strpos($name, ':') !== false) {\n            //Value passed in as name:value\n            list($name, $value) = explode(':', $name, 2);\n        }\n        $name = trim($name);\n        $value = (null === $value) ? '' : trim($value);\n        //Ensure name is not empty, and that neither name nor value contain line breaks\n        if (empty($name) || strpbrk($name . $value, \"\\r\\n\") !== false) {\n            if ($this->exceptions) {\n                throw new Exception($this->lang('invalid_header'));\n            }\n\n            return false;\n        }\n        $this->CustomHeader[] = [$name, $value];\n\n        return true;\n    }\n\n    /**\n     * Returns all custom headers.\n     *\n     * @return array\n     */\n    public function getCustomHeaders()\n    {\n        return $this->CustomHeader;\n    }\n\n    /**\n     * Create a message body from an HTML string.\n     * Automatically inlines images and creates a plain-text version by converting the HTML,\n     * overwriting any existing values in Body and AltBody.\n     * Do not source $message content from user input!\n     * $basedir is prepended when handling relative URLs, e.g. <img src=\"/images/a.png\"> and must not be empty\n     * will look for an image file in $basedir/images/a.png and convert it to inline.\n     * If you don't provide a $basedir, relative paths will be left untouched (and thus probably break in email)\n     * Converts data-uri images into embedded attachments.\n     * If you don't want to apply these transformations to your HTML, just set Body and AltBody directly.\n     *\n     * @param string        $message  HTML message string\n     * @param string        $basedir  Absolute path to a base directory to prepend to relative paths to images\n     * @param bool|callable $advanced Whether to use the internal HTML to text converter\n     *                                or your own custom converter\n     * @return string The transformed message body\n     *\n     * @throws Exception\n     *\n     * @see PHPMailer::html2text()\n     */\n    public function msgHTML($message, $basedir = '', $advanced = false)\n    {\n        preg_match_all('/(?<!-)(src|background)=[\"\\'](.*)[\"\\']/Ui', $message, $images);\n        if (array_key_exists(2, $images)) {\n            if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {\n                //Ensure $basedir has a trailing /\n                $basedir .= '/';\n            }\n            foreach ($images[2] as $imgindex => $url) {\n                //Convert data URIs into embedded images\n                //e.g. \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"\n                $match = [];\n                if (preg_match('#^data:(image/(?:jpe?g|gif|png));?(base64)?,(.+)#', $url, $match)) {\n                    if (count($match) === 4 && static::ENCODING_BASE64 === $match[2]) {\n                        $data = base64_decode($match[3]);\n                    } elseif ('' === $match[2]) {\n                        $data = rawurldecode($match[3]);\n                    } else {\n                        //Not recognised so leave it alone\n                        continue;\n                    }\n                    //Hash the decoded data, not the URL, so that the same data-URI image used in multiple places\n                    //will only be embedded once, even if it used a different encoding\n                    $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; //RFC2392 S 2\n\n                    if (!$this->cidExists($cid)) {\n                        $this->addStringEmbeddedImage(\n                            $data,\n                            $cid,\n                            'embed' . $imgindex,\n                            static::ENCODING_BASE64,\n                            $match[1]\n                        );\n                    }\n                    $message = str_replace(\n                        $images[0][$imgindex],\n                        $images[1][$imgindex] . '=\"cid:' . $cid . '\"',\n                        $message\n                    );\n                    continue;\n                }\n                if (\n                    //Only process relative URLs if a basedir is provided (i.e. no absolute local paths)\n                    !empty($basedir)\n                    //Ignore URLs containing parent dir traversal (..)\n                    && (strpos($url, '..') === false)\n                    //Do not change urls that are already inline images\n                    && 0 !== strpos($url, 'cid:')\n                    //Do not change absolute URLs, including anonymous protocol\n                    && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url)\n                ) {\n                    $filename = static::mb_pathinfo($url, PATHINFO_BASENAME);\n                    $directory = dirname($url);\n                    if ('.' === $directory) {\n                        $directory = '';\n                    }\n                    //RFC2392 S 2\n                    $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0';\n                    if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) {\n                        $basedir .= '/';\n                    }\n                    if (strlen($directory) > 1 && '/' !== substr($directory, -1)) {\n                        $directory .= '/';\n                    }\n                    if (\n                        $this->addEmbeddedImage(\n                            $basedir . $directory . $filename,\n                            $cid,\n                            $filename,\n                            static::ENCODING_BASE64,\n                            static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION))\n                        )\n                    ) {\n                        $message = preg_replace(\n                            '/' . $images[1][$imgindex] . '=[\"\\']' . preg_quote($url, '/') . '[\"\\']/Ui',\n                            $images[1][$imgindex] . '=\"cid:' . $cid . '\"',\n                            $message\n                        );\n                    }\n                }\n            }\n        }\n        $this->isHTML();\n        //Convert all message body line breaks to LE, makes quoted-printable encoding work much better\n        $this->Body = static::normalizeBreaks($message);\n        $this->AltBody = static::normalizeBreaks($this->html2text($message, $advanced));\n        if (!$this->alternativeExists()) {\n            $this->AltBody = 'This is an HTML-only message. To view it, activate HTML in your email application.'\n                . static::$LE;\n        }\n\n        return $this->Body;\n    }\n\n    /**\n     * Convert an HTML string into plain text.\n     * This is used by msgHTML().\n     * Note - older versions of this function used a bundled advanced converter\n     * which was removed for license reasons in #232.\n     * Example usage:\n     *\n     * ```php\n     * //Use default conversion\n     * $plain = $mail->html2text($html);\n     * //Use your own custom converter\n     * $plain = $mail->html2text($html, function($html) {\n     *     $converter = new MyHtml2text($html);\n     *     return $converter->get_text();\n     * });\n     * ```\n     *\n     * @param string        $html     The HTML text to convert\n     * @param bool|callable $advanced Any boolean value to use the internal converter,\n     *                                or provide your own callable for custom conversion.\n     *                                *Never* pass user-supplied data into this parameter\n     *\n     * @return string\n     */\n    public function html2text($html, $advanced = false)\n    {\n        if (is_callable($advanced)) {\n            return call_user_func($advanced, $html);\n        }\n\n        return html_entity_decode(\n            trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\\/\\\\1>/si', '', $html))),\n            ENT_QUOTES,\n            $this->CharSet\n        );\n    }\n\n    /**\n     * Get the MIME type for a file extension.\n     *\n     * @param string $ext File extension\n     *\n     * @return string MIME type of file\n     */\n    public static function _mime_types($ext = '')\n    {\n        $mimes = [\n            'xl' => 'application/excel',\n            'js' => 'application/javascript',\n            'hqx' => 'application/mac-binhex40',\n            'cpt' => 'application/mac-compactpro',\n            'bin' => 'application/macbinary',\n            'doc' => 'application/msword',\n            'word' => 'application/msword',\n            'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n            'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n            'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',\n            'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',\n            'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n            'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',\n            'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n            'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n            'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',\n            'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',\n            'class' => 'application/octet-stream',\n            'dll' => 'application/octet-stream',\n            'dms' => 'application/octet-stream',\n            'exe' => 'application/octet-stream',\n            'lha' => 'application/octet-stream',\n            'lzh' => 'application/octet-stream',\n            'psd' => 'application/octet-stream',\n            'sea' => 'application/octet-stream',\n            'so' => 'application/octet-stream',\n            'oda' => 'application/oda',\n            'pdf' => 'application/pdf',\n            'ai' => 'application/postscript',\n            'eps' => 'application/postscript',\n            'ps' => 'application/postscript',\n            'smi' => 'application/smil',\n            'smil' => 'application/smil',\n            'mif' => 'application/vnd.mif',\n            'xls' => 'application/vnd.ms-excel',\n            'ppt' => 'application/vnd.ms-powerpoint',\n            'wbxml' => 'application/vnd.wap.wbxml',\n            'wmlc' => 'application/vnd.wap.wmlc',\n            'dcr' => 'application/x-director',\n            'dir' => 'application/x-director',\n            'dxr' => 'application/x-director',\n            'dvi' => 'application/x-dvi',\n            'gtar' => 'application/x-gtar',\n            'php3' => 'application/x-httpd-php',\n            'php4' => 'application/x-httpd-php',\n            'php' => 'application/x-httpd-php',\n            'phtml' => 'application/x-httpd-php',\n            'phps' => 'application/x-httpd-php-source',\n            'swf' => 'application/x-shockwave-flash',\n            'sit' => 'application/x-stuffit',\n            'tar' => 'application/x-tar',\n            'tgz' => 'application/x-tar',\n            'xht' => 'application/xhtml+xml',\n            'xhtml' => 'application/xhtml+xml',\n            'zip' => 'application/zip',\n            'mid' => 'audio/midi',\n            'midi' => 'audio/midi',\n            'mp2' => 'audio/mpeg',\n            'mp3' => 'audio/mpeg',\n            'm4a' => 'audio/mp4',\n            'mpga' => 'audio/mpeg',\n            'aif' => 'audio/x-aiff',\n            'aifc' => 'audio/x-aiff',\n            'aiff' => 'audio/x-aiff',\n            'ram' => 'audio/x-pn-realaudio',\n            'rm' => 'audio/x-pn-realaudio',\n            'rpm' => 'audio/x-pn-realaudio-plugin',\n            'ra' => 'audio/x-realaudio',\n            'wav' => 'audio/x-wav',\n            'mka' => 'audio/x-matroska',\n            'bmp' => 'image/bmp',\n            'gif' => 'image/gif',\n            'jpeg' => 'image/jpeg',\n            'jpe' => 'image/jpeg',\n            'jpg' => 'image/jpeg',\n            'png' => 'image/png',\n            'tiff' => 'image/tiff',\n            'tif' => 'image/tiff',\n            'webp' => 'image/webp',\n            'avif' => 'image/avif',\n            'heif' => 'image/heif',\n            'heifs' => 'image/heif-sequence',\n            'heic' => 'image/heic',\n            'heics' => 'image/heic-sequence',\n            'eml' => 'message/rfc822',\n            'css' => 'text/css',\n            'html' => 'text/html',\n            'htm' => 'text/html',\n            'shtml' => 'text/html',\n            'log' => 'text/plain',\n            'text' => 'text/plain',\n            'txt' => 'text/plain',\n            'rtx' => 'text/richtext',\n            'rtf' => 'text/rtf',\n            'vcf' => 'text/vcard',\n            'vcard' => 'text/vcard',\n            'ics' => 'text/calendar',\n            'xml' => 'text/xml',\n            'xsl' => 'text/xml',\n            'wmv' => 'video/x-ms-wmv',\n            'mpeg' => 'video/mpeg',\n            'mpe' => 'video/mpeg',\n            'mpg' => 'video/mpeg',\n            'mp4' => 'video/mp4',\n            'm4v' => 'video/mp4',\n            'mov' => 'video/quicktime',\n            'qt' => 'video/quicktime',\n            'rv' => 'video/vnd.rn-realvideo',\n            'avi' => 'video/x-msvideo',\n            'movie' => 'video/x-sgi-movie',\n            'webm' => 'video/webm',\n            'mkv' => 'video/x-matroska',\n        ];\n        $ext = strtolower($ext);\n        if (array_key_exists($ext, $mimes)) {\n            return $mimes[$ext];\n        }\n\n        return 'application/octet-stream';\n    }\n\n    /**\n     * Map a file name to a MIME type.\n     * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.\n     *\n     * @param string $filename A file name or full path, does not need to exist as a file\n     *\n     * @return string\n     */\n    public static function filenameToType($filename)\n    {\n        //In case the path is a URL, strip any query string before getting extension\n        $qpos = strpos($filename, '?');\n        if (false !== $qpos) {\n            $filename = substr($filename, 0, $qpos);\n        }\n        $ext = static::mb_pathinfo($filename, PATHINFO_EXTENSION);\n\n        return static::_mime_types($ext);\n    }\n\n    /**\n     * Multi-byte-safe pathinfo replacement.\n     * Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe.\n     *\n     * @see http://www.php.net/manual/en/function.pathinfo.php#107461\n     *\n     * @param string     $path    A filename or path, does not need to exist as a file\n     * @param int|string $options Either a PATHINFO_* constant,\n     *                            or a string name to return only the specified piece\n     *\n     * @return string|array\n     */\n    public static function mb_pathinfo($path, $options = null)\n    {\n        $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => ''];\n        $pathinfo = [];\n        if (preg_match('#^(.*?)[\\\\\\\\/]*(([^/\\\\\\\\]*?)(\\.([^.\\\\\\\\/]+?)|))[\\\\\\\\/.]*$#m', $path, $pathinfo)) {\n            if (array_key_exists(1, $pathinfo)) {\n                $ret['dirname'] = $pathinfo[1];\n            }\n            if (array_key_exists(2, $pathinfo)) {\n                $ret['basename'] = $pathinfo[2];\n            }\n            if (array_key_exists(5, $pathinfo)) {\n                $ret['extension'] = $pathinfo[5];\n            }\n            if (array_key_exists(3, $pathinfo)) {\n                $ret['filename'] = $pathinfo[3];\n            }\n        }\n        switch ($options) {\n            case PATHINFO_DIRNAME:\n            case 'dirname':\n                return $ret['dirname'];\n            case PATHINFO_BASENAME:\n            case 'basename':\n                return $ret['basename'];\n            case PATHINFO_EXTENSION:\n            case 'extension':\n                return $ret['extension'];\n            case PATHINFO_FILENAME:\n            case 'filename':\n                return $ret['filename'];\n            default:\n                return $ret;\n        }\n    }\n\n    /**\n     * Set or reset instance properties.\n     * You should avoid this function - it's more verbose, less efficient, more error-prone and\n     * harder to debug than setting properties directly.\n     * Usage Example:\n     * `$mail->set('SMTPSecure', static::ENCRYPTION_STARTTLS);`\n     *   is the same as:\n     * `$mail->SMTPSecure = static::ENCRYPTION_STARTTLS;`.\n     *\n     * @param string $name  The property name to set\n     * @param mixed  $value The value to set the property to\n     *\n     * @return bool\n     */\n    public function set($name, $value = '')\n    {\n        if (property_exists($this, $name)) {\n            $this->$name = $value;\n\n            return true;\n        }\n        $this->setError($this->lang('variable_set') . $name);\n\n        return false;\n    }\n\n    /**\n     * Strip newlines to prevent header injection.\n     *\n     * @param string $str\n     *\n     * @return string\n     */\n    public function secureHeader($str)\n    {\n        return trim(str_replace([\"\\r\", \"\\n\"], '', $str));\n    }\n\n    /**\n     * Normalize line breaks in a string.\n     * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.\n     * Defaults to CRLF (for message bodies) and preserves consecutive breaks.\n     *\n     * @param string $text\n     * @param string $breaktype What kind of line break to use; defaults to static::$LE\n     *\n     * @return string\n     */\n    public static function normalizeBreaks($text, $breaktype = null)\n    {\n        if (null === $breaktype) {\n            $breaktype = static::$LE;\n        }\n        //Normalise to \\n\n        $text = str_replace([self::CRLF, \"\\r\"], \"\\n\", $text);\n        //Now convert LE as needed\n        if (\"\\n\" !== $breaktype) {\n            $text = str_replace(\"\\n\", $breaktype, $text);\n        }\n\n        return $text;\n    }\n\n    /**\n     * Remove trailing breaks from a string.\n     *\n     * @param string $text\n     *\n     * @return string The text to remove breaks from\n     */\n    public static function stripTrailingWSP($text)\n    {\n        return rtrim($text, \" \\r\\n\\t\");\n    }\n\n    /**\n     * Return the current line break format string.\n     *\n     * @return string\n     */\n    public static function getLE()\n    {\n        return static::$LE;\n    }\n\n    /**\n     * Set the line break format string, e.g. \"\\r\\n\".\n     *\n     * @param string $le\n     */\n    protected static function setLE($le)\n    {\n        static::$LE = $le;\n    }\n\n    /**\n     * Set the public and private key files and password for S/MIME signing.\n     *\n     * @param string $cert_filename\n     * @param string $key_filename\n     * @param string $key_pass            Password for private key\n     * @param string $extracerts_filename Optional path to chain certificate\n     */\n    public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')\n    {\n        $this->sign_cert_file = $cert_filename;\n        $this->sign_key_file = $key_filename;\n        $this->sign_key_pass = $key_pass;\n        $this->sign_extracerts_file = $extracerts_filename;\n    }\n\n    /**\n     * Quoted-Printable-encode a DKIM header.\n     *\n     * @param string $txt\n     *\n     * @return string\n     */\n    public function DKIM_QP($txt)\n    {\n        $line = '';\n        $len = strlen($txt);\n        for ($i = 0; $i < $len; ++$i) {\n            $ord = ord($txt[$i]);\n            if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord === 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {\n                $line .= $txt[$i];\n            } else {\n                $line .= '=' . sprintf('%02X', $ord);\n            }\n        }\n\n        return $line;\n    }\n\n    /**\n     * Generate a DKIM signature.\n     *\n     * @param string $signHeader\n     *\n     * @throws Exception\n     *\n     * @return string The DKIM signature value\n     */\n    public function DKIM_Sign($signHeader)\n    {\n        if (!defined('PKCS7_TEXT')) {\n            if ($this->exceptions) {\n                throw new Exception($this->lang('extension_missing') . 'openssl');\n            }\n\n            return '';\n        }\n        $privKeyStr = !empty($this->DKIM_private_string) ?\n            $this->DKIM_private_string :\n            file_get_contents($this->DKIM_private);\n        if ('' !== $this->DKIM_passphrase) {\n            $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);\n        } else {\n            $privKey = openssl_pkey_get_private($privKeyStr);\n        }\n        if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {\n            if (\\PHP_MAJOR_VERSION < 8) {\n                openssl_pkey_free($privKey);\n            }\n\n            return base64_encode($signature);\n        }\n        if (\\PHP_MAJOR_VERSION < 8) {\n            openssl_pkey_free($privKey);\n        }\n\n        return '';\n    }\n\n    /**\n     * Generate a DKIM canonicalization header.\n     * Uses the 'relaxed' algorithm from RFC6376 section 3.4.2.\n     * Canonicalized headers should *always* use CRLF, regardless of mailer setting.\n     *\n     * @see https://tools.ietf.org/html/rfc6376#section-3.4.2\n     *\n     * @param string $signHeader Header\n     *\n     * @return string\n     */\n    public function DKIM_HeaderC($signHeader)\n    {\n        //Normalize breaks to CRLF (regardless of the mailer)\n        $signHeader = static::normalizeBreaks($signHeader, self::CRLF);\n        //Unfold header lines\n        //Note PCRE \\s is too broad a definition of whitespace; RFC5322 defines it as `[ \\t]`\n        //@see https://tools.ietf.org/html/rfc5322#section-2.2\n        //That means this may break if you do something daft like put vertical tabs in your headers.\n        $signHeader = preg_replace('/\\r\\n[ \\t]+/', ' ', $signHeader);\n        //Break headers out into an array\n        $lines = explode(self::CRLF, $signHeader);\n        foreach ($lines as $key => $line) {\n            //If the header is missing a :, skip it as it's invalid\n            //This is likely to happen because the explode() above will also split\n            //on the trailing LE, leaving an empty line\n            if (strpos($line, ':') === false) {\n                continue;\n            }\n            list($heading, $value) = explode(':', $line, 2);\n            //Lower-case header name\n            $heading = strtolower($heading);\n            //Collapse white space within the value, also convert WSP to space\n            $value = preg_replace('/[ \\t]+/', ' ', $value);\n            //RFC6376 is slightly unclear here - it says to delete space at the *end* of each value\n            //But then says to delete space before and after the colon.\n            //Net result is the same as trimming both ends of the value.\n            //By elimination, the same applies to the field name\n            $lines[$key] = trim($heading, \" \\t\") . ':' . trim($value, \" \\t\");\n        }\n\n        return implode(self::CRLF, $lines);\n    }\n\n    /**\n     * Generate a DKIM canonicalization body.\n     * Uses the 'simple' algorithm from RFC6376 section 3.4.3.\n     * Canonicalized bodies should *always* use CRLF, regardless of mailer setting.\n     *\n     * @see https://tools.ietf.org/html/rfc6376#section-3.4.3\n     *\n     * @param string $body Message Body\n     *\n     * @return string\n     */\n    public function DKIM_BodyC($body)\n    {\n        if (empty($body)) {\n            return self::CRLF;\n        }\n        //Normalize line endings to CRLF\n        $body = static::normalizeBreaks($body, self::CRLF);\n\n        //Reduce multiple trailing line breaks to a single one\n        return static::stripTrailingWSP($body) . self::CRLF;\n    }\n\n    /**\n     * Create the DKIM header and body in a new message header.\n     *\n     * @param string $headers_line Header lines\n     * @param string $subject      Subject\n     * @param string $body         Body\n     *\n     * @throws Exception\n     *\n     * @return string\n     */\n    public function DKIM_Add($headers_line, $subject, $body)\n    {\n        $DKIMsignatureType = 'rsa-sha256'; //Signature & hash algorithms\n        $DKIMcanonicalization = 'relaxed/simple'; //Canonicalization methods of header & body\n        $DKIMquery = 'dns/txt'; //Query method\n        $DKIMtime = time();\n        //Always sign these headers without being asked\n        //Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1\n        $autoSignHeaders = [\n            'from',\n            'to',\n            'cc',\n            'date',\n            'subject',\n            'reply-to',\n            'message-id',\n            'content-type',\n            'mime-version',\n            'x-mailer',\n        ];\n        if (stripos($headers_line, 'Subject') === false) {\n            $headers_line .= 'Subject: ' . $subject . static::$LE;\n        }\n        $headerLines = explode(static::$LE, $headers_line);\n        $currentHeaderLabel = '';\n        $currentHeaderValue = '';\n        $parsedHeaders = [];\n        $headerLineIndex = 0;\n        $headerLineCount = count($headerLines);\n        foreach ($headerLines as $headerLine) {\n            $matches = [];\n            if (preg_match('/^([^ \\t]*?)(?::[ \\t]*)(.*)$/', $headerLine, $matches)) {\n                if ($currentHeaderLabel !== '') {\n                    //We were previously in another header; This is the start of a new header, so save the previous one\n                    $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];\n                }\n                $currentHeaderLabel = $matches[1];\n                $currentHeaderValue = $matches[2];\n            } elseif (preg_match('/^[ \\t]+(.*)$/', $headerLine, $matches)) {\n                //This is a folded continuation of the current header, so unfold it\n                $currentHeaderValue .= ' ' . $matches[1];\n            }\n            ++$headerLineIndex;\n            if ($headerLineIndex >= $headerLineCount) {\n                //This was the last line, so finish off this header\n                $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue];\n            }\n        }\n        $copiedHeaders = [];\n        $headersToSignKeys = [];\n        $headersToSign = [];\n        foreach ($parsedHeaders as $header) {\n            //Is this header one that must be included in the DKIM signature?\n            if (in_array(strtolower($header['label']), $autoSignHeaders, true)) {\n                $headersToSignKeys[] = $header['label'];\n                $headersToSign[] = $header['label'] . ': ' . $header['value'];\n                if ($this->DKIM_copyHeaderFields) {\n                    $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC\n                        str_replace('|', '=7C', $this->DKIM_QP($header['value']));\n                }\n                continue;\n            }\n            //Is this an extra custom header we've been asked to sign?\n            if (in_array($header['label'], $this->DKIM_extraHeaders, true)) {\n                //Find its value in custom headers\n                foreach ($this->CustomHeader as $customHeader) {\n                    if ($customHeader[0] === $header['label']) {\n                        $headersToSignKeys[] = $header['label'];\n                        $headersToSign[] = $header['label'] . ': ' . $header['value'];\n                        if ($this->DKIM_copyHeaderFields) {\n                            $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC\n                                str_replace('|', '=7C', $this->DKIM_QP($header['value']));\n                        }\n                        //Skip straight to the next header\n                        continue 2;\n                    }\n                }\n            }\n        }\n        $copiedHeaderFields = '';\n        if ($this->DKIM_copyHeaderFields && count($copiedHeaders) > 0) {\n            //Assemble a DKIM 'z' tag\n            $copiedHeaderFields = ' z=';\n            $first = true;\n            foreach ($copiedHeaders as $copiedHeader) {\n                if (!$first) {\n                    $copiedHeaderFields .= static::$LE . ' |';\n                }\n                //Fold long values\n                if (strlen($copiedHeader) > self::STD_LINE_LENGTH - 3) {\n                    $copiedHeaderFields .= substr(\n                        chunk_split($copiedHeader, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS),\n                        0,\n                        -strlen(static::$LE . self::FWS)\n                    );\n                } else {\n                    $copiedHeaderFields .= $copiedHeader;\n                }\n                $first = false;\n            }\n            $copiedHeaderFields .= ';' . static::$LE;\n        }\n        $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE;\n        $headerValues = implode(static::$LE, $headersToSign);\n        $body = $this->DKIM_BodyC($body);\n        //Base64 of packed binary SHA-256 hash of body\n        $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body)));\n        $ident = '';\n        if ('' !== $this->DKIM_identity) {\n            $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE;\n        }\n        //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag\n        //which is appended after calculating the signature\n        //https://tools.ietf.org/html/rfc6376#section-3.5\n        $dkimSignatureHeader = 'DKIM-Signature: v=1;' .\n            ' d=' . $this->DKIM_domain . ';' .\n            ' s=' . $this->DKIM_selector . ';' . static::$LE .\n            ' a=' . $DKIMsignatureType . ';' .\n            ' q=' . $DKIMquery . ';' .\n            ' t=' . $DKIMtime . ';' .\n            ' c=' . $DKIMcanonicalization . ';' . static::$LE .\n            $headerKeys .\n            $ident .\n            $copiedHeaderFields .\n            ' bh=' . $DKIMb64 . ';' . static::$LE .\n            ' b=';\n        //Canonicalize the set of headers\n        $canonicalizedHeaders = $this->DKIM_HeaderC(\n            $headerValues . static::$LE . $dkimSignatureHeader\n        );\n        $signature = $this->DKIM_Sign($canonicalizedHeaders);\n        $signature = trim(chunk_split($signature, self::STD_LINE_LENGTH - 3, static::$LE . self::FWS));\n\n        return static::normalizeBreaks($dkimSignatureHeader . $signature);\n    }\n\n    /**\n     * Detect if a string contains a line longer than the maximum line length\n     * allowed by RFC 2822 section 2.1.1.\n     *\n     * @param string $str\n     *\n     * @return bool\n     */\n    public static function hasLineLongerThanMax($str)\n    {\n        return (bool) preg_match('/^(.{' . (self::MAX_LINE_LENGTH + strlen(static::$LE)) . ',})/m', $str);\n    }\n\n    /**\n     * If a string contains any \"special\" characters, double-quote the name,\n     * and escape any double quotes with a backslash.\n     *\n     * @param string $str\n     *\n     * @return string\n     *\n     * @see RFC822 3.4.1\n     */\n    public static function quotedString($str)\n    {\n        if (preg_match('/[ ()<>@,;:\"\\/\\[\\]?=]/', $str)) {\n            //If the string contains any of these chars, it must be double-quoted\n            //and any double quotes must be escaped with a backslash\n            return '\"' . str_replace('\"', '\\\\\"', $str) . '\"';\n        }\n\n        //Return the string untouched, it doesn't need quoting\n        return $str;\n    }\n\n    /**\n     * Allows for public read access to 'to' property.\n     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.\n     *\n     * @return array\n     */\n    public function getToAddresses()\n    {\n        return $this->to;\n    }\n\n    /**\n     * Allows for public read access to 'cc' property.\n     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.\n     *\n     * @return array\n     */\n    public function getCcAddresses()\n    {\n        return $this->cc;\n    }\n\n    /**\n     * Allows for public read access to 'bcc' property.\n     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.\n     *\n     * @return array\n     */\n    public function getBccAddresses()\n    {\n        return $this->bcc;\n    }\n\n    /**\n     * Allows for public read access to 'ReplyTo' property.\n     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.\n     *\n     * @return array\n     */\n    public function getReplyToAddresses()\n    {\n        return $this->ReplyTo;\n    }\n\n    /**\n     * Allows for public read access to 'all_recipients' property.\n     * Before the send() call, queued addresses (i.e. with IDN) are not yet included.\n     *\n     * @return array\n     */\n    public function getAllRecipientAddresses()\n    {\n        return $this->all_recipients;\n    }\n\n    /**\n     * Perform a callback.\n     *\n     * @param bool   $isSent\n     * @param array  $to\n     * @param array  $cc\n     * @param array  $bcc\n     * @param string $subject\n     * @param string $body\n     * @param string $from\n     * @param array  $extra\n     */\n    protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra)\n    {\n        if (!empty($this->action_function) && is_callable($this->action_function)) {\n            call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra);\n        }\n    }\n\n    /**\n     * Get the OAuthTokenProvider instance.\n     *\n     * @return OAuthTokenProvider\n     */\n    public function getOAuth()\n    {\n        return $this->oauth;\n    }\n\n    /**\n     * Set an OAuthTokenProvider instance.\n     */\n    public function setOAuth(OAuthTokenProvider $oauth)\n    {\n        $this->oauth = $oauth;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/src/POP3.php",
    "content": "<?php\n\n/**\n * PHPMailer POP-Before-SMTP Authentication Class.\n * PHP Version 5.5.\n *\n * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n *\n * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author    Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note      This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\n/**\n * PHPMailer POP-Before-SMTP Authentication Class.\n * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.\n * 1) This class does not support APOP authentication.\n * 2) Opening and closing lots of POP3 connections can be quite slow. If you need\n *   to send a batch of emails then just perform the authentication once at the start,\n *   and then loop through your mail sending script. Providing this process doesn't\n *   take longer than the verification period lasts on your POP3 server, you should be fine.\n * 3) This is really ancient technology; you should only need to use it to talk to very old systems.\n * 4) This POP3 class is deliberately lightweight and incomplete, implementing just\n *   enough to do authentication.\n *   If you want a more complete class there are other POP3 classes for PHP available.\n *\n * @author Richard Davey (original author) <rich@corephp.co.uk>\n * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n */\nclass POP3\n{\n    /**\n     * The POP3 PHPMailer Version number.\n     *\n     * @var string\n     */\n    const VERSION = '6.6.0';\n\n    /**\n     * Default POP3 port number.\n     *\n     * @var int\n     */\n    const DEFAULT_PORT = 110;\n\n    /**\n     * Default timeout in seconds.\n     *\n     * @var int\n     */\n    const DEFAULT_TIMEOUT = 30;\n\n    /**\n     * POP3 class debug output mode.\n     * Debug output level.\n     * Options:\n     * @see POP3::DEBUG_OFF: No output\n     * @see POP3::DEBUG_SERVER: Server messages, connection/server errors\n     * @see POP3::DEBUG_CLIENT: Client and Server messages, connection/server errors\n     *\n     * @var int\n     */\n    public $do_debug = self::DEBUG_OFF;\n\n    /**\n     * POP3 mail server hostname.\n     *\n     * @var string\n     */\n    public $host;\n\n    /**\n     * POP3 port number.\n     *\n     * @var int\n     */\n    public $port;\n\n    /**\n     * POP3 Timeout Value in seconds.\n     *\n     * @var int\n     */\n    public $tval;\n\n    /**\n     * POP3 username.\n     *\n     * @var string\n     */\n    public $username;\n\n    /**\n     * POP3 password.\n     *\n     * @var string\n     */\n    public $password;\n\n    /**\n     * Resource handle for the POP3 connection socket.\n     *\n     * @var resource\n     */\n    protected $pop_conn;\n\n    /**\n     * Are we connected?\n     *\n     * @var bool\n     */\n    protected $connected = false;\n\n    /**\n     * Error container.\n     *\n     * @var array\n     */\n    protected $errors = [];\n\n    /**\n     * Line break constant.\n     */\n    const LE = \"\\r\\n\";\n\n    /**\n     * Debug level for no output.\n     *\n     * @var int\n     */\n    const DEBUG_OFF = 0;\n\n    /**\n     * Debug level to show server -> client messages\n     * also shows clients connection errors or errors from server\n     *\n     * @var int\n     */\n    const DEBUG_SERVER = 1;\n\n    /**\n     * Debug level to show client -> server and server -> client messages.\n     *\n     * @var int\n     */\n    const DEBUG_CLIENT = 2;\n\n    /**\n     * Simple static wrapper for all-in-one POP before SMTP.\n     *\n     * @param string   $host        The hostname to connect to\n     * @param int|bool $port        The port number to connect to\n     * @param int|bool $timeout     The timeout value\n     * @param string   $username\n     * @param string   $password\n     * @param int      $debug_level\n     *\n     * @return bool\n     */\n    public static function popBeforeSmtp(\n        $host,\n        $port = false,\n        $timeout = false,\n        $username = '',\n        $password = '',\n        $debug_level = 0\n    ) {\n        $pop = new self();\n\n        return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);\n    }\n\n    /**\n     * Authenticate with a POP3 server.\n     * A connect, login, disconnect sequence\n     * appropriate for POP-before SMTP authorisation.\n     *\n     * @param string   $host        The hostname to connect to\n     * @param int|bool $port        The port number to connect to\n     * @param int|bool $timeout     The timeout value\n     * @param string   $username\n     * @param string   $password\n     * @param int      $debug_level\n     *\n     * @return bool\n     */\n    public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)\n    {\n        $this->host = $host;\n        //If no port value provided, use default\n        if (false === $port) {\n            $this->port = static::DEFAULT_PORT;\n        } else {\n            $this->port = (int) $port;\n        }\n        //If no timeout value provided, use default\n        if (false === $timeout) {\n            $this->tval = static::DEFAULT_TIMEOUT;\n        } else {\n            $this->tval = (int) $timeout;\n        }\n        $this->do_debug = $debug_level;\n        $this->username = $username;\n        $this->password = $password;\n        //Reset the error log\n        $this->errors = [];\n        //Connect\n        $result = $this->connect($this->host, $this->port, $this->tval);\n        if ($result) {\n            $login_result = $this->login($this->username, $this->password);\n            if ($login_result) {\n                $this->disconnect();\n\n                return true;\n            }\n        }\n        //We need to disconnect regardless of whether the login succeeded\n        $this->disconnect();\n\n        return false;\n    }\n\n    /**\n     * Connect to a POP3 server.\n     *\n     * @param string   $host\n     * @param int|bool $port\n     * @param int      $tval\n     *\n     * @return bool\n     */\n    public function connect($host, $port = false, $tval = 30)\n    {\n        //Are we already connected?\n        if ($this->connected) {\n            return true;\n        }\n\n        //On Windows this will raise a PHP Warning error if the hostname doesn't exist.\n        //Rather than suppress it with @fsockopen, capture it cleanly instead\n        set_error_handler([$this, 'catchWarning']);\n\n        if (false === $port) {\n            $port = static::DEFAULT_PORT;\n        }\n\n        //Connect to the POP3 server\n        $errno = 0;\n        $errstr = '';\n        $this->pop_conn = fsockopen(\n            $host, //POP3 Host\n            $port, //Port #\n            $errno, //Error Number\n            $errstr, //Error Message\n            $tval\n        ); //Timeout (seconds)\n        //Restore the error handler\n        restore_error_handler();\n\n        //Did we connect?\n        if (false === $this->pop_conn) {\n            //It would appear not...\n            $this->setError(\n                \"Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr\"\n            );\n\n            return false;\n        }\n\n        //Increase the stream time-out\n        stream_set_timeout($this->pop_conn, $tval, 0);\n\n        //Get the POP3 server response\n        $pop3_response = $this->getResponse();\n        //Check for the +OK\n        if ($this->checkResponse($pop3_response)) {\n            //The connection is established and the POP3 server is talking\n            $this->connected = true;\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Log in to the POP3 server.\n     * Does not support APOP (RFC 2828, 4949).\n     *\n     * @param string $username\n     * @param string $password\n     *\n     * @return bool\n     */\n    public function login($username = '', $password = '')\n    {\n        if (!$this->connected) {\n            $this->setError('Not connected to POP3 server');\n            return false;\n        }\n        if (empty($username)) {\n            $username = $this->username;\n        }\n        if (empty($password)) {\n            $password = $this->password;\n        }\n\n        //Send the Username\n        $this->sendString(\"USER $username\" . static::LE);\n        $pop3_response = $this->getResponse();\n        if ($this->checkResponse($pop3_response)) {\n            //Send the Password\n            $this->sendString(\"PASS $password\" . static::LE);\n            $pop3_response = $this->getResponse();\n            if ($this->checkResponse($pop3_response)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Disconnect from the POP3 server.\n     */\n    public function disconnect()\n    {\n        $this->sendString('QUIT');\n\n        // RFC 1939 shows POP3 server sending a +OK response to the QUIT command.\n        // Try to get it.  Ignore any failures here.\n        try {\n            $this->getResponse();\n        } catch (Exception $e) {\n            //Do nothing\n        }\n\n        //The QUIT command may cause the daemon to exit, which will kill our connection\n        //So ignore errors here\n        try {\n            @fclose($this->pop_conn);\n        } catch (Exception $e) {\n            //Do nothing\n        }\n\n        // Clean up attributes.\n        $this->connected = false;\n        $this->pop_conn  = false;\n    }\n\n    /**\n     * Get a response from the POP3 server.\n     *\n     * @param int $size The maximum number of bytes to retrieve\n     *\n     * @return string\n     */\n    protected function getResponse($size = 128)\n    {\n        $response = fgets($this->pop_conn, $size);\n        if ($this->do_debug >= self::DEBUG_SERVER) {\n            echo 'Server -> Client: ', $response;\n        }\n\n        return $response;\n    }\n\n    /**\n     * Send raw data to the POP3 server.\n     *\n     * @param string $string\n     *\n     * @return int\n     */\n    protected function sendString($string)\n    {\n        if ($this->pop_conn) {\n            if ($this->do_debug >= self::DEBUG_CLIENT) { //Show client messages when debug >= 2\n                echo 'Client -> Server: ', $string;\n            }\n\n            return fwrite($this->pop_conn, $string, strlen($string));\n        }\n\n        return 0;\n    }\n\n    /**\n     * Checks the POP3 server response.\n     * Looks for for +OK or -ERR.\n     *\n     * @param string $string\n     *\n     * @return bool\n     */\n    protected function checkResponse($string)\n    {\n        if (strpos($string, '+OK') !== 0) {\n            $this->setError(\"Server reported an error: $string\");\n\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Add an error to the internal error store.\n     * Also display debug output if it's enabled.\n     *\n     * @param string $error\n     */\n    protected function setError($error)\n    {\n        $this->errors[] = $error;\n        if ($this->do_debug >= self::DEBUG_SERVER) {\n            echo '<pre>';\n            foreach ($this->errors as $e) {\n                print_r($e);\n            }\n            echo '</pre>';\n        }\n    }\n\n    /**\n     * Get an array of error messages, if any.\n     *\n     * @return array\n     */\n    public function getErrors()\n    {\n        return $this->errors;\n    }\n\n    /**\n     * POP3 connection error handler.\n     *\n     * @param int    $errno\n     * @param string $errstr\n     * @param string $errfile\n     * @param int    $errline\n     */\n    protected function catchWarning($errno, $errstr, $errfile, $errline)\n    {\n        $this->setError(\n            'Connecting to the POP3 server raised a PHP warning:' .\n            \"errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline\"\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/phpmailer/phpmailer/src/SMTP.php",
    "content": "<?php\n\n/**\n * PHPMailer RFC821 SMTP email transport class.\n * PHP Version 5.5.\n *\n * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project\n *\n * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>\n * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>\n * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>\n * @author    Brent R. Matzelle (original founder)\n * @copyright 2012 - 2020 Marcus Bointon\n * @copyright 2010 - 2012 Jim Jagielski\n * @copyright 2004 - 2009 Andy Prevost\n * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License\n * @note      This program is distributed in the hope that it will be useful - WITHOUT\n * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or\n * FITNESS FOR A PARTICULAR PURPOSE.\n */\n\nnamespace PHPMailer\\PHPMailer;\n\n/**\n * PHPMailer RFC821 SMTP email transport class.\n * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.\n *\n * @author Chris Ryan\n * @author Marcus Bointon <phpmailer@synchromedia.co.uk>\n */\nclass SMTP\n{\n    /**\n     * The PHPMailer SMTP version number.\n     *\n     * @var string\n     */\n    const VERSION = '6.6.0';\n\n    /**\n     * SMTP line break constant.\n     *\n     * @var string\n     */\n    const LE = \"\\r\\n\";\n\n    /**\n     * The SMTP port to use if one is not specified.\n     *\n     * @var int\n     */\n    const DEFAULT_PORT = 25;\n\n    /**\n     * The maximum line length allowed by RFC 5321 section 4.5.3.1.6,\n     * *excluding* a trailing CRLF break.\n     *\n     * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6\n     *\n     * @var int\n     */\n    const MAX_LINE_LENGTH = 998;\n\n    /**\n     * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,\n     * *including* a trailing CRLF line break.\n     *\n     * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5\n     *\n     * @var int\n     */\n    const MAX_REPLY_LENGTH = 512;\n\n    /**\n     * Debug level for no output.\n     *\n     * @var int\n     */\n    const DEBUG_OFF = 0;\n\n    /**\n     * Debug level to show client -> server messages.\n     *\n     * @var int\n     */\n    const DEBUG_CLIENT = 1;\n\n    /**\n     * Debug level to show client -> server and server -> client messages.\n     *\n     * @var int\n     */\n    const DEBUG_SERVER = 2;\n\n    /**\n     * Debug level to show connection status, client -> server and server -> client messages.\n     *\n     * @var int\n     */\n    const DEBUG_CONNECTION = 3;\n\n    /**\n     * Debug level to show all messages.\n     *\n     * @var int\n     */\n    const DEBUG_LOWLEVEL = 4;\n\n    /**\n     * Debug output level.\n     * Options:\n     * * self::DEBUG_OFF (`0`) No debug output, default\n     * * self::DEBUG_CLIENT (`1`) Client commands\n     * * self::DEBUG_SERVER (`2`) Client commands and server responses\n     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status\n     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.\n     *\n     * @var int\n     */\n    public $do_debug = self::DEBUG_OFF;\n\n    /**\n     * How to handle debug output.\n     * Options:\n     * * `echo` Output plain-text as-is, appropriate for CLI\n     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output\n     * * `error_log` Output to error log as configured in php.ini\n     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:\n     *\n     * ```php\n     * $smtp->Debugoutput = function($str, $level) {echo \"debug level $level; message: $str\";};\n     * ```\n     *\n     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`\n     * level output is used:\n     *\n     * ```php\n     * $mail->Debugoutput = new myPsr3Logger;\n     * ```\n     *\n     * @var string|callable|\\Psr\\Log\\LoggerInterface\n     */\n    public $Debugoutput = 'echo';\n\n    /**\n     * Whether to use VERP.\n     *\n     * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path\n     * @see http://www.postfix.org/VERP_README.html Info on VERP\n     *\n     * @var bool\n     */\n    public $do_verp = false;\n\n    /**\n     * The timeout value for connection, in seconds.\n     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.\n     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.\n     *\n     * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2\n     *\n     * @var int\n     */\n    public $Timeout = 300;\n\n    /**\n     * How long to wait for commands to complete, in seconds.\n     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.\n     *\n     * @var int\n     */\n    public $Timelimit = 300;\n\n    /**\n     * Patterns to extract an SMTP transaction id from reply to a DATA command.\n     * The first capture group in each regex will be used as the ID.\n     * MS ESMTP returns the message ID, which may not be correct for internal tracking.\n     *\n     * @var string[]\n     */\n    protected $smtp_transaction_id_patterns = [\n        'exim' => '/[\\d]{3} OK id=(.*)/',\n        'sendmail' => '/[\\d]{3} 2.0.0 (.*) Message/',\n        'postfix' => '/[\\d]{3} 2.0.0 Ok: queued as (.*)/',\n        'Microsoft_ESMTP' => '/[0-9]{3} 2.[\\d].0 (.*)@(?:.*) Queued mail for delivery/',\n        'Amazon_SES' => '/[\\d]{3} Ok (.*)/',\n        'SendGrid' => '/[\\d]{3} Ok: queued as (.*)/',\n        'CampaignMonitor' => '/[\\d]{3} 2.0.0 OK:([a-zA-Z\\d]{48})/',\n        'Haraka' => '/[\\d]{3} Message Queued \\((.*)\\)/',\n        'Mailjet' => '/[\\d]{3} OK queued as (.*)/',\n    ];\n\n    /**\n     * The last transaction ID issued in response to a DATA command,\n     * if one was detected.\n     *\n     * @var string|bool|null\n     */\n    protected $last_smtp_transaction_id;\n\n    /**\n     * The socket for the server connection.\n     *\n     * @var ?resource\n     */\n    protected $smtp_conn;\n\n    /**\n     * Error information, if any, for the last SMTP command.\n     *\n     * @var array\n     */\n    protected $error = [\n        'error' => '',\n        'detail' => '',\n        'smtp_code' => '',\n        'smtp_code_ex' => '',\n    ];\n\n    /**\n     * The reply the server sent to us for HELO.\n     * If null, no HELO string has yet been received.\n     *\n     * @var string|null\n     */\n    protected $helo_rply;\n\n    /**\n     * The set of SMTP extensions sent in reply to EHLO command.\n     * Indexes of the array are extension names.\n     * Value at index 'HELO' or 'EHLO' (according to command that was sent)\n     * represents the server name. In case of HELO it is the only element of the array.\n     * Other values can be boolean TRUE or an array containing extension options.\n     * If null, no HELO/EHLO string has yet been received.\n     *\n     * @var array|null\n     */\n    protected $server_caps;\n\n    /**\n     * The most recent reply received from the server.\n     *\n     * @var string\n     */\n    protected $last_reply = '';\n\n    /**\n     * Output debugging info via a user-selected method.\n     *\n     * @param string $str   Debug string to output\n     * @param int    $level The debug level of this message; see DEBUG_* constants\n     *\n     * @see SMTP::$Debugoutput\n     * @see SMTP::$do_debug\n     */\n    protected function edebug($str, $level = 0)\n    {\n        if ($level > $this->do_debug) {\n            return;\n        }\n        //Is this a PSR-3 logger?\n        if ($this->Debugoutput instanceof \\Psr\\Log\\LoggerInterface) {\n            $this->Debugoutput->debug($str);\n\n            return;\n        }\n        //Avoid clash with built-in function names\n        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {\n            call_user_func($this->Debugoutput, $str, $level);\n\n            return;\n        }\n        switch ($this->Debugoutput) {\n            case 'error_log':\n                //Don't output, just log\n                error_log($str);\n                break;\n            case 'html':\n                //Cleans up output a bit for a better looking, HTML-safe output\n                echo gmdate('Y-m-d H:i:s'), ' ', htmlentities(\n                    preg_replace('/[\\r\\n]+/', '', $str),\n                    ENT_QUOTES,\n                    'UTF-8'\n                ), \"<br>\\n\";\n                break;\n            case 'echo':\n            default:\n                //Normalize line breaks\n                $str = preg_replace('/\\r\\n|\\r/m', \"\\n\", $str);\n                echo gmdate('Y-m-d H:i:s'),\n                \"\\t\",\n                    //Trim trailing space\n                trim(\n                    //Indent for readability, except for trailing break\n                    str_replace(\n                        \"\\n\",\n                        \"\\n                   \\t                  \",\n                        trim($str)\n                    )\n                ),\n                \"\\n\";\n        }\n    }\n\n    /**\n     * Connect to an SMTP server.\n     *\n     * @param string $host    SMTP server IP or host name\n     * @param int    $port    The port number to connect to\n     * @param int    $timeout How long to wait for the connection to open\n     * @param array  $options An array of options for stream_context_create()\n     *\n     * @return bool\n     */\n    public function connect($host, $port = null, $timeout = 30, $options = [])\n    {\n        //Clear errors to avoid confusion\n        $this->setError('');\n        //Make sure we are __not__ connected\n        if ($this->connected()) {\n            //Already connected, generate error\n            $this->setError('Already connected to a server');\n\n            return false;\n        }\n        if (empty($port)) {\n            $port = self::DEFAULT_PORT;\n        }\n        //Connect to the SMTP server\n        $this->edebug(\n            \"Connection: opening to $host:$port, timeout=$timeout, options=\" .\n            (count($options) > 0 ? var_export($options, true) : 'array()'),\n            self::DEBUG_CONNECTION\n        );\n\n        $this->smtp_conn = $this->getSMTPConnection($host, $port, $timeout, $options);\n\n        if ($this->smtp_conn === false) {\n            //Error info already set inside `getSMTPConnection()`\n            return false;\n        }\n\n        $this->edebug('Connection: opened', self::DEBUG_CONNECTION);\n\n        //Get any announcement\n        $this->last_reply = $this->get_lines();\n        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);\n        $responseCode = (int)substr($this->last_reply, 0, 3);\n        if ($responseCode === 220) {\n            return true;\n        }\n        //Anything other than a 220 response means something went wrong\n        //RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error\n        //https://tools.ietf.org/html/rfc5321#section-3.1\n        if ($responseCode === 554) {\n            $this->quit();\n        }\n        //This will handle 421 responses which may not wait for a QUIT (e.g. if the server is being shut down)\n        $this->edebug('Connection: closing due to error', self::DEBUG_CONNECTION);\n        $this->close();\n        return false;\n    }\n\n    /**\n     * Create connection to the SMTP server.\n     *\n     * @param string $host    SMTP server IP or host name\n     * @param int    $port    The port number to connect to\n     * @param int    $timeout How long to wait for the connection to open\n     * @param array  $options An array of options for stream_context_create()\n     *\n     * @return false|resource\n     */\n    protected function getSMTPConnection($host, $port = null, $timeout = 30, $options = [])\n    {\n        static $streamok;\n        //This is enabled by default since 5.0.0 but some providers disable it\n        //Check this once and cache the result\n        if (null === $streamok) {\n            $streamok = function_exists('stream_socket_client');\n        }\n\n        $errno = 0;\n        $errstr = '';\n        if ($streamok) {\n            $socket_context = stream_context_create($options);\n            set_error_handler([$this, 'errorHandler']);\n            $connection = stream_socket_client(\n                $host . ':' . $port,\n                $errno,\n                $errstr,\n                $timeout,\n                STREAM_CLIENT_CONNECT,\n                $socket_context\n            );\n        } else {\n            //Fall back to fsockopen which should work in more places, but is missing some features\n            $this->edebug(\n                'Connection: stream_socket_client not available, falling back to fsockopen',\n                self::DEBUG_CONNECTION\n            );\n            set_error_handler([$this, 'errorHandler']);\n            $connection = fsockopen(\n                $host,\n                $port,\n                $errno,\n                $errstr,\n                $timeout\n            );\n        }\n        restore_error_handler();\n\n        //Verify we connected properly\n        if (!is_resource($connection)) {\n            $this->setError(\n                'Failed to connect to server',\n                '',\n                (string) $errno,\n                $errstr\n            );\n            $this->edebug(\n                'SMTP ERROR: ' . $this->error['error']\n                . \": $errstr ($errno)\",\n                self::DEBUG_CLIENT\n            );\n\n            return false;\n        }\n\n        //SMTP server can take longer to respond, give longer timeout for first read\n        //Windows does not have support for this timeout function\n        if (strpos(PHP_OS, 'WIN') !== 0) {\n            $max = (int)ini_get('max_execution_time');\n            //Don't bother if unlimited, or if set_time_limit is disabled\n            if (0 !== $max && $timeout > $max && strpos(ini_get('disable_functions'), 'set_time_limit') === false) {\n                @set_time_limit($timeout);\n            }\n            stream_set_timeout($connection, $timeout, 0);\n        }\n\n        return $connection;\n    }\n\n    /**\n     * Initiate a TLS (encrypted) session.\n     *\n     * @return bool\n     */\n    public function startTLS()\n    {\n        if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {\n            return false;\n        }\n\n        //Allow the best TLS version(s) we can\n        $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;\n\n        //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT\n        //so add them back in manually if we can\n        if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {\n            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;\n            $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;\n        }\n\n        //Begin encrypted connection\n        set_error_handler([$this, 'errorHandler']);\n        $crypto_ok = stream_socket_enable_crypto(\n            $this->smtp_conn,\n            true,\n            $crypto_method\n        );\n        restore_error_handler();\n\n        return (bool) $crypto_ok;\n    }\n\n    /**\n     * Perform SMTP authentication.\n     * Must be run after hello().\n     *\n     * @see    hello()\n     *\n     * @param string $username The user name\n     * @param string $password The password\n     * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2)\n     * @param OAuthTokenProvider $OAuth An optional OAuthTokenProvider instance for XOAUTH2 authentication\n     *\n     * @return bool True if successfully authenticated\n     */\n    public function authenticate(\n        $username,\n        $password,\n        $authtype = null,\n        $OAuth = null\n    ) {\n        if (!$this->server_caps) {\n            $this->setError('Authentication is not allowed before HELO/EHLO');\n\n            return false;\n        }\n\n        if (array_key_exists('EHLO', $this->server_caps)) {\n            //SMTP extensions are available; try to find a proper authentication method\n            if (!array_key_exists('AUTH', $this->server_caps)) {\n                $this->setError('Authentication is not allowed at this stage');\n                //'at this stage' means that auth may be allowed after the stage changes\n                //e.g. after STARTTLS\n\n                return false;\n            }\n\n            $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);\n            $this->edebug(\n                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),\n                self::DEBUG_LOWLEVEL\n            );\n\n            //If we have requested a specific auth type, check the server supports it before trying others\n            if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {\n                $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);\n                $authtype = null;\n            }\n\n            if (empty($authtype)) {\n                //If no auth mechanism is specified, attempt to use these, in this order\n                //Try CRAM-MD5 first as it's more secure than the others\n                foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {\n                    if (in_array($method, $this->server_caps['AUTH'], true)) {\n                        $authtype = $method;\n                        break;\n                    }\n                }\n                if (empty($authtype)) {\n                    $this->setError('No supported authentication methods found');\n\n                    return false;\n                }\n                $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);\n            }\n\n            if (!in_array($authtype, $this->server_caps['AUTH'], true)) {\n                $this->setError(\"The requested authentication method \\\"$authtype\\\" is not supported by the server\");\n\n                return false;\n            }\n        } elseif (empty($authtype)) {\n            $authtype = 'LOGIN';\n        }\n        switch ($authtype) {\n            case 'PLAIN':\n                //Start authentication\n                if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {\n                    return false;\n                }\n                //Send encoded username and password\n                if (\n                    //Format from https://tools.ietf.org/html/rfc4616#section-2\n                    //We skip the first field (it's forgery), so the string starts with a null byte\n                    !$this->sendCommand(\n                        'User & Password',\n                        base64_encode(\"\\0\" . $username . \"\\0\" . $password),\n                        235\n                    )\n                ) {\n                    return false;\n                }\n                break;\n            case 'LOGIN':\n                //Start authentication\n                if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {\n                    return false;\n                }\n                if (!$this->sendCommand('Username', base64_encode($username), 334)) {\n                    return false;\n                }\n                if (!$this->sendCommand('Password', base64_encode($password), 235)) {\n                    return false;\n                }\n                break;\n            case 'CRAM-MD5':\n                //Start authentication\n                if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {\n                    return false;\n                }\n                //Get the challenge\n                $challenge = base64_decode(substr($this->last_reply, 4));\n\n                //Build the response\n                $response = $username . ' ' . $this->hmac($challenge, $password);\n\n                //send encoded credentials\n                return $this->sendCommand('Username', base64_encode($response), 235);\n            case 'XOAUTH2':\n                //The OAuth instance must be set up prior to requesting auth.\n                if (null === $OAuth) {\n                    return false;\n                }\n                $oauth = $OAuth->getOauth64();\n\n                //Start authentication\n                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {\n                    return false;\n                }\n                break;\n            default:\n                $this->setError(\"Authentication method \\\"$authtype\\\" is not supported\");\n\n                return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Calculate an MD5 HMAC hash.\n     * Works like hash_hmac('md5', $data, $key)\n     * in case that function is not available.\n     *\n     * @param string $data The data to hash\n     * @param string $key  The key to hash with\n     *\n     * @return string\n     */\n    protected function hmac($data, $key)\n    {\n        if (function_exists('hash_hmac')) {\n            return hash_hmac('md5', $data, $key);\n        }\n\n        //The following borrowed from\n        //http://php.net/manual/en/function.mhash.php#27225\n\n        //RFC 2104 HMAC implementation for php.\n        //Creates an md5 HMAC.\n        //Eliminates the need to install mhash to compute a HMAC\n        //by Lance Rushing\n\n        $bytelen = 64; //byte length for md5\n        if (strlen($key) > $bytelen) {\n            $key = pack('H*', md5($key));\n        }\n        $key = str_pad($key, $bytelen, chr(0x00));\n        $ipad = str_pad('', $bytelen, chr(0x36));\n        $opad = str_pad('', $bytelen, chr(0x5c));\n        $k_ipad = $key ^ $ipad;\n        $k_opad = $key ^ $opad;\n\n        return md5($k_opad . pack('H*', md5($k_ipad . $data)));\n    }\n\n    /**\n     * Check connection state.\n     *\n     * @return bool True if connected\n     */\n    public function connected()\n    {\n        if (is_resource($this->smtp_conn)) {\n            $sock_status = stream_get_meta_data($this->smtp_conn);\n            if ($sock_status['eof']) {\n                //The socket is valid but we are not connected\n                $this->edebug(\n                    'SMTP NOTICE: EOF caught while checking if connected',\n                    self::DEBUG_CLIENT\n                );\n                $this->close();\n\n                return false;\n            }\n\n            return true; //everything looks good\n        }\n\n        return false;\n    }\n\n    /**\n     * Close the socket and clean up the state of the class.\n     * Don't use this function without first trying to use QUIT.\n     *\n     * @see quit()\n     */\n    public function close()\n    {\n        $this->setError('');\n        $this->server_caps = null;\n        $this->helo_rply = null;\n        if (is_resource($this->smtp_conn)) {\n            //Close the connection and cleanup\n            fclose($this->smtp_conn);\n            $this->smtp_conn = null; //Makes for cleaner serialization\n            $this->edebug('Connection: closed', self::DEBUG_CONNECTION);\n        }\n    }\n\n    /**\n     * Send an SMTP DATA command.\n     * Issues a data command and sends the msg_data to the server,\n     * finalizing the mail transaction. $msg_data is the message\n     * that is to be send with the headers. Each header needs to be\n     * on a single line followed by a <CRLF> with the message headers\n     * and the message body being separated by an additional <CRLF>.\n     * Implements RFC 821: DATA <CRLF>.\n     *\n     * @param string $msg_data Message data to send\n     *\n     * @return bool\n     */\n    public function data($msg_data)\n    {\n        //This will use the standard timelimit\n        if (!$this->sendCommand('DATA', 'DATA', 354)) {\n            return false;\n        }\n\n        /* The server is ready to accept data!\n         * According to rfc821 we should not send more than 1000 characters on a single line (including the LE)\n         * so we will break the data up into lines by \\r and/or \\n then if needed we will break each of those into\n         * smaller lines to fit within the limit.\n         * We will also look for lines that start with a '.' and prepend an additional '.'.\n         * NOTE: this does not count towards line-length limit.\n         */\n\n        //Normalize line breaks before exploding\n        $lines = explode(\"\\n\", str_replace([\"\\r\\n\", \"\\r\"], \"\\n\", $msg_data));\n\n        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field\n         * of the first line (':' separated) does not contain a space then it _should_ be a header and we will\n         * process all lines before a blank line as headers.\n         */\n\n        $field = substr($lines[0], 0, strpos($lines[0], ':'));\n        $in_headers = false;\n        if (!empty($field) && strpos($field, ' ') === false) {\n            $in_headers = true;\n        }\n\n        foreach ($lines as $line) {\n            $lines_out = [];\n            if ($in_headers && $line === '') {\n                $in_headers = false;\n            }\n            //Break this line up into several smaller lines if it's too long\n            //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),\n            while (isset($line[self::MAX_LINE_LENGTH])) {\n                //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on\n                //so as to avoid breaking in the middle of a word\n                $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');\n                //Deliberately matches both false and 0\n                if (!$pos) {\n                    //No nice break found, add a hard break\n                    $pos = self::MAX_LINE_LENGTH - 1;\n                    $lines_out[] = substr($line, 0, $pos);\n                    $line = substr($line, $pos);\n                } else {\n                    //Break at the found point\n                    $lines_out[] = substr($line, 0, $pos);\n                    //Move along by the amount we dealt with\n                    $line = substr($line, $pos + 1);\n                }\n                //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1\n                if ($in_headers) {\n                    $line = \"\\t\" . $line;\n                }\n            }\n            $lines_out[] = $line;\n\n            //Send the lines to the server\n            foreach ($lines_out as $line_out) {\n                //Dot-stuffing as per RFC5321 section 4.5.2\n                //https://tools.ietf.org/html/rfc5321#section-4.5.2\n                if (!empty($line_out) && $line_out[0] === '.') {\n                    $line_out = '.' . $line_out;\n                }\n                $this->client_send($line_out . static::LE, 'DATA');\n            }\n        }\n\n        //Message data has been sent, complete the command\n        //Increase timelimit for end of DATA command\n        $savetimelimit = $this->Timelimit;\n        $this->Timelimit *= 2;\n        $result = $this->sendCommand('DATA END', '.', 250);\n        $this->recordLastTransactionID();\n        //Restore timelimit\n        $this->Timelimit = $savetimelimit;\n\n        return $result;\n    }\n\n    /**\n     * Send an SMTP HELO or EHLO command.\n     * Used to identify the sending server to the receiving server.\n     * This makes sure that client and server are in a known state.\n     * Implements RFC 821: HELO <SP> <domain> <CRLF>\n     * and RFC 2821 EHLO.\n     *\n     * @param string $host The host name or IP to connect to\n     *\n     * @return bool\n     */\n    public function hello($host = '')\n    {\n        //Try extended hello first (RFC 2821)\n        if ($this->sendHello('EHLO', $host)) {\n            return true;\n        }\n\n        //Some servers shut down the SMTP service here (RFC 5321)\n        if (substr($this->helo_rply, 0, 3) == '421') {\n            return false;\n        }\n\n        return $this->sendHello('HELO', $host);\n    }\n\n    /**\n     * Send an SMTP HELO or EHLO command.\n     * Low-level implementation used by hello().\n     *\n     * @param string $hello The HELO string\n     * @param string $host  The hostname to say we are\n     *\n     * @return bool\n     *\n     * @see hello()\n     */\n    protected function sendHello($hello, $host)\n    {\n        $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);\n        $this->helo_rply = $this->last_reply;\n        if ($noerror) {\n            $this->parseHelloFields($hello);\n        } else {\n            $this->server_caps = null;\n        }\n\n        return $noerror;\n    }\n\n    /**\n     * Parse a reply to HELO/EHLO command to discover server extensions.\n     * In case of HELO, the only parameter that can be discovered is a server name.\n     *\n     * @param string $type `HELO` or `EHLO`\n     */\n    protected function parseHelloFields($type)\n    {\n        $this->server_caps = [];\n        $lines = explode(\"\\n\", $this->helo_rply);\n\n        foreach ($lines as $n => $s) {\n            //First 4 chars contain response code followed by - or space\n            $s = trim(substr($s, 4));\n            if (empty($s)) {\n                continue;\n            }\n            $fields = explode(' ', $s);\n            if (!empty($fields)) {\n                if (!$n) {\n                    $name = $type;\n                    $fields = $fields[0];\n                } else {\n                    $name = array_shift($fields);\n                    switch ($name) {\n                        case 'SIZE':\n                            $fields = ($fields ? $fields[0] : 0);\n                            break;\n                        case 'AUTH':\n                            if (!is_array($fields)) {\n                                $fields = [];\n                            }\n                            break;\n                        default:\n                            $fields = true;\n                    }\n                }\n                $this->server_caps[$name] = $fields;\n            }\n        }\n    }\n\n    /**\n     * Send an SMTP MAIL command.\n     * Starts a mail transaction from the email address specified in\n     * $from. Returns true if successful or false otherwise. If True\n     * the mail transaction is started and then one or more recipient\n     * commands may be called followed by a data command.\n     * Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.\n     *\n     * @param string $from Source address of this message\n     *\n     * @return bool\n     */\n    public function mail($from)\n    {\n        $useVerp = ($this->do_verp ? ' XVERP' : '');\n\n        return $this->sendCommand(\n            'MAIL FROM',\n            'MAIL FROM:<' . $from . '>' . $useVerp,\n            250\n        );\n    }\n\n    /**\n     * Send an SMTP QUIT command.\n     * Closes the socket if there is no error or the $close_on_error argument is true.\n     * Implements from RFC 821: QUIT <CRLF>.\n     *\n     * @param bool $close_on_error Should the connection close if an error occurs?\n     *\n     * @return bool\n     */\n    public function quit($close_on_error = true)\n    {\n        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);\n        $err = $this->error; //Save any error\n        if ($noerror || $close_on_error) {\n            $this->close();\n            $this->error = $err; //Restore any error from the quit command\n        }\n\n        return $noerror;\n    }\n\n    /**\n     * Send an SMTP RCPT command.\n     * Sets the TO argument to $toaddr.\n     * Returns true if the recipient was accepted false if it was rejected.\n     * Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.\n     *\n     * @param string $address The address the message is being sent to\n     * @param string $dsn     Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE\n     *                        or DELAY. If you specify NEVER all other notifications are ignored.\n     *\n     * @return bool\n     */\n    public function recipient($address, $dsn = '')\n    {\n        if (empty($dsn)) {\n            $rcpt = 'RCPT TO:<' . $address . '>';\n        } else {\n            $dsn = strtoupper($dsn);\n            $notify = [];\n\n            if (strpos($dsn, 'NEVER') !== false) {\n                $notify[] = 'NEVER';\n            } else {\n                foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {\n                    if (strpos($dsn, $value) !== false) {\n                        $notify[] = $value;\n                    }\n                }\n            }\n\n            $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);\n        }\n\n        return $this->sendCommand(\n            'RCPT TO',\n            $rcpt,\n            [250, 251]\n        );\n    }\n\n    /**\n     * Send an SMTP RSET command.\n     * Abort any transaction that is currently in progress.\n     * Implements RFC 821: RSET <CRLF>.\n     *\n     * @return bool True on success\n     */\n    public function reset()\n    {\n        return $this->sendCommand('RSET', 'RSET', 250);\n    }\n\n    /**\n     * Send a command to an SMTP server and check its return code.\n     *\n     * @param string    $command       The command name - not sent to the server\n     * @param string    $commandstring The actual command to send\n     * @param int|array $expect        One or more expected integer success codes\n     *\n     * @return bool True on success\n     */\n    protected function sendCommand($command, $commandstring, $expect)\n    {\n        if (!$this->connected()) {\n            $this->setError(\"Called $command without being connected\");\n\n            return false;\n        }\n        //Reject line breaks in all commands\n        if ((strpos($commandstring, \"\\n\") !== false) || (strpos($commandstring, \"\\r\") !== false)) {\n            $this->setError(\"Command '$command' contained line breaks\");\n\n            return false;\n        }\n        $this->client_send($commandstring . static::LE, $command);\n\n        $this->last_reply = $this->get_lines();\n        //Fetch SMTP code and possible error code explanation\n        $matches = [];\n        if (preg_match('/^([\\d]{3})[ -](?:([\\d]\\\\.[\\d]\\\\.[\\d]{1,2}) )?/', $this->last_reply, $matches)) {\n            $code = (int) $matches[1];\n            $code_ex = (count($matches) > 2 ? $matches[2] : null);\n            //Cut off error code from each response line\n            $detail = preg_replace(\n                \"/{$code}[ -]\" .\n                ($code_ex ? str_replace('.', '\\\\.', $code_ex) . ' ' : '') . '/m',\n                '',\n                $this->last_reply\n            );\n        } else {\n            //Fall back to simple parsing if regex fails\n            $code = (int) substr($this->last_reply, 0, 3);\n            $code_ex = null;\n            $detail = substr($this->last_reply, 4);\n        }\n\n        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);\n\n        if (!in_array($code, (array) $expect, true)) {\n            $this->setError(\n                \"$command command failed\",\n                $detail,\n                $code,\n                $code_ex\n            );\n            $this->edebug(\n                'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,\n                self::DEBUG_CLIENT\n            );\n\n            return false;\n        }\n\n        $this->setError('');\n\n        return true;\n    }\n\n    /**\n     * Send an SMTP SAML command.\n     * Starts a mail transaction from the email address specified in $from.\n     * Returns true if successful or false otherwise. If True\n     * the mail transaction is started and then one or more recipient\n     * commands may be called followed by a data command. This command\n     * will send the message to the users terminal if they are logged\n     * in and send them an email.\n     * Implements RFC 821: SAML <SP> FROM:<reverse-path> <CRLF>.\n     *\n     * @param string $from The address the message is from\n     *\n     * @return bool\n     */\n    public function sendAndMail($from)\n    {\n        return $this->sendCommand('SAML', \"SAML FROM:$from\", 250);\n    }\n\n    /**\n     * Send an SMTP VRFY command.\n     *\n     * @param string $name The name to verify\n     *\n     * @return bool\n     */\n    public function verify($name)\n    {\n        return $this->sendCommand('VRFY', \"VRFY $name\", [250, 251]);\n    }\n\n    /**\n     * Send an SMTP NOOP command.\n     * Used to keep keep-alives alive, doesn't actually do anything.\n     *\n     * @return bool\n     */\n    public function noop()\n    {\n        return $this->sendCommand('NOOP', 'NOOP', 250);\n    }\n\n    /**\n     * Send an SMTP TURN command.\n     * This is an optional command for SMTP that this class does not support.\n     * This method is here to make the RFC821 Definition complete for this class\n     * and _may_ be implemented in future.\n     * Implements from RFC 821: TURN <CRLF>.\n     *\n     * @return bool\n     */\n    public function turn()\n    {\n        $this->setError('The SMTP TURN command is not implemented');\n        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);\n\n        return false;\n    }\n\n    /**\n     * Send raw data to the server.\n     *\n     * @param string $data    The data to send\n     * @param string $command Optionally, the command this is part of, used only for controlling debug output\n     *\n     * @return int|bool The number of bytes sent to the server or false on error\n     */\n    public function client_send($data, $command = '')\n    {\n        //If SMTP transcripts are left enabled, or debug output is posted online\n        //it can leak credentials, so hide credentials in all but lowest level\n        if (\n            self::DEBUG_LOWLEVEL > $this->do_debug &&\n            in_array($command, ['User & Password', 'Username', 'Password'], true)\n        ) {\n            $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);\n        } else {\n            $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);\n        }\n        set_error_handler([$this, 'errorHandler']);\n        $result = fwrite($this->smtp_conn, $data);\n        restore_error_handler();\n\n        return $result;\n    }\n\n    /**\n     * Get the latest error.\n     *\n     * @return array\n     */\n    public function getError()\n    {\n        return $this->error;\n    }\n\n    /**\n     * Get SMTP extensions available on the server.\n     *\n     * @return array|null\n     */\n    public function getServerExtList()\n    {\n        return $this->server_caps;\n    }\n\n    /**\n     * Get metadata about the SMTP server from its HELO/EHLO response.\n     * The method works in three ways, dependent on argument value and current state:\n     *   1. HELO/EHLO has not been sent - returns null and populates $this->error.\n     *   2. HELO has been sent -\n     *     $name == 'HELO': returns server name\n     *     $name == 'EHLO': returns boolean false\n     *     $name == any other string: returns null and populates $this->error\n     *   3. EHLO has been sent -\n     *     $name == 'HELO'|'EHLO': returns the server name\n     *     $name == any other string: if extension $name exists, returns True\n     *       or its options (e.g. AUTH mechanisms supported). Otherwise returns False.\n     *\n     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'\n     *\n     * @return string|bool|null\n     */\n    public function getServerExt($name)\n    {\n        if (!$this->server_caps) {\n            $this->setError('No HELO/EHLO was sent');\n\n            return null;\n        }\n\n        if (!array_key_exists($name, $this->server_caps)) {\n            if ('HELO' === $name) {\n                return $this->server_caps['EHLO'];\n            }\n            if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {\n                return false;\n            }\n            $this->setError('HELO handshake was used; No information about server extensions available');\n\n            return null;\n        }\n\n        return $this->server_caps[$name];\n    }\n\n    /**\n     * Get the last reply from the server.\n     *\n     * @return string\n     */\n    public function getLastReply()\n    {\n        return $this->last_reply;\n    }\n\n    /**\n     * Read the SMTP server's response.\n     * Either before eof or socket timeout occurs on the operation.\n     * With SMTP we can tell if we have more lines to read if the\n     * 4th character is '-' symbol. If it is a space then we don't\n     * need to read anything else.\n     *\n     * @return string\n     */\n    protected function get_lines()\n    {\n        //If the connection is bad, give up straight away\n        if (!is_resource($this->smtp_conn)) {\n            return '';\n        }\n        $data = '';\n        $endtime = 0;\n        stream_set_timeout($this->smtp_conn, $this->Timeout);\n        if ($this->Timelimit > 0) {\n            $endtime = time() + $this->Timelimit;\n        }\n        $selR = [$this->smtp_conn];\n        $selW = null;\n        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {\n            //Must pass vars in here as params are by reference\n            //solution for signals inspired by https://github.com/symfony/symfony/pull/6540\n            set_error_handler([$this, 'errorHandler']);\n            $n = stream_select($selR, $selW, $selW, $this->Timelimit);\n            restore_error_handler();\n\n            if ($n === false) {\n                $message = $this->getError()['detail'];\n\n                $this->edebug(\n                    'SMTP -> get_lines(): select failed (' . $message . ')',\n                    self::DEBUG_LOWLEVEL\n                );\n\n                //stream_select returns false when the `select` system call is interrupted\n                //by an incoming signal, try the select again\n                if (stripos($message, 'interrupted system call') !== false) {\n                    $this->edebug(\n                        'SMTP -> get_lines(): retrying stream_select',\n                        self::DEBUG_LOWLEVEL\n                    );\n                    $this->setError('');\n                    continue;\n                }\n\n                break;\n            }\n\n            if (!$n) {\n                $this->edebug(\n                    'SMTP -> get_lines(): select timed-out in (' . $this->Timelimit . ' sec)',\n                    self::DEBUG_LOWLEVEL\n                );\n                break;\n            }\n\n            //Deliberate noise suppression - errors are handled afterwards\n            $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);\n            $this->edebug('SMTP INBOUND: \"' . trim($str) . '\"', self::DEBUG_LOWLEVEL);\n            $data .= $str;\n            //If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),\n            //or 4th character is a space or a line break char, we are done reading, break the loop.\n            //String array access is a significant micro-optimisation over strlen\n            if (!isset($str[3]) || $str[3] === ' ' || $str[3] === \"\\r\" || $str[3] === \"\\n\") {\n                break;\n            }\n            //Timed-out? Log and break\n            $info = stream_get_meta_data($this->smtp_conn);\n            if ($info['timed_out']) {\n                $this->edebug(\n                    'SMTP -> get_lines(): stream timed-out (' . $this->Timeout . ' sec)',\n                    self::DEBUG_LOWLEVEL\n                );\n                break;\n            }\n            //Now check if reads took too long\n            if ($endtime && time() > $endtime) {\n                $this->edebug(\n                    'SMTP -> get_lines(): timelimit reached (' .\n                    $this->Timelimit . ' sec)',\n                    self::DEBUG_LOWLEVEL\n                );\n                break;\n            }\n        }\n\n        return $data;\n    }\n\n    /**\n     * Enable or disable VERP address generation.\n     *\n     * @param bool $enabled\n     */\n    public function setVerp($enabled = false)\n    {\n        $this->do_verp = $enabled;\n    }\n\n    /**\n     * Get VERP address generation mode.\n     *\n     * @return bool\n     */\n    public function getVerp()\n    {\n        return $this->do_verp;\n    }\n\n    /**\n     * Set error messages and codes.\n     *\n     * @param string $message      The error message\n     * @param string $detail       Further detail on the error\n     * @param string $smtp_code    An associated SMTP error code\n     * @param string $smtp_code_ex Extended SMTP code\n     */\n    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')\n    {\n        $this->error = [\n            'error' => $message,\n            'detail' => $detail,\n            'smtp_code' => $smtp_code,\n            'smtp_code_ex' => $smtp_code_ex,\n        ];\n    }\n\n    /**\n     * Set debug output method.\n     *\n     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it\n     */\n    public function setDebugOutput($method = 'echo')\n    {\n        $this->Debugoutput = $method;\n    }\n\n    /**\n     * Get debug output method.\n     *\n     * @return string\n     */\n    public function getDebugOutput()\n    {\n        return $this->Debugoutput;\n    }\n\n    /**\n     * Set debug output level.\n     *\n     * @param int $level\n     */\n    public function setDebugLevel($level = 0)\n    {\n        $this->do_debug = $level;\n    }\n\n    /**\n     * Get debug output level.\n     *\n     * @return int\n     */\n    public function getDebugLevel()\n    {\n        return $this->do_debug;\n    }\n\n    /**\n     * Set SMTP timeout.\n     *\n     * @param int $timeout The timeout duration in seconds\n     */\n    public function setTimeout($timeout = 0)\n    {\n        $this->Timeout = $timeout;\n    }\n\n    /**\n     * Get SMTP timeout.\n     *\n     * @return int\n     */\n    public function getTimeout()\n    {\n        return $this->Timeout;\n    }\n\n    /**\n     * Reports an error number and string.\n     *\n     * @param int    $errno   The error number returned by PHP\n     * @param string $errmsg  The error message returned by PHP\n     * @param string $errfile The file the error occurred in\n     * @param int    $errline The line number the error occurred on\n     */\n    protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)\n    {\n        $notice = 'Connection failed.';\n        $this->setError(\n            $notice,\n            $errmsg,\n            (string) $errno\n        );\n        $this->edebug(\n            \"$notice Error #$errno: $errmsg [$errfile line $errline]\",\n            self::DEBUG_CONNECTION\n        );\n    }\n\n    /**\n     * Extract and return the ID of the last SMTP transaction based on\n     * a list of patterns provided in SMTP::$smtp_transaction_id_patterns.\n     * Relies on the host providing the ID in response to a DATA command.\n     * If no reply has been received yet, it will return null.\n     * If no pattern was matched, it will return false.\n     *\n     * @return bool|string|null\n     */\n    protected function recordLastTransactionID()\n    {\n        $reply = $this->getLastReply();\n\n        if (empty($reply)) {\n            $this->last_smtp_transaction_id = null;\n        } else {\n            $this->last_smtp_transaction_id = false;\n            foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {\n                $matches = [];\n                if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {\n                    $this->last_smtp_transaction_id = trim($matches[1]);\n                    break;\n                }\n            }\n        }\n\n        return $this->last_smtp_transaction_id;\n    }\n\n    /**\n     * Get the queue/transaction ID of the last SMTP transaction\n     * If no reply has been received yet, it will return null.\n     * If no pattern was matched, it will return false.\n     *\n     * @return bool|string|null\n     *\n     * @see recordLastTransactionID()\n     */\n    public function getLastTransactionID()\n    {\n        return $this->last_smtp_transaction_id;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/clock/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file, in reverse chronological order by release.\n\n## 1.0.0\n\nFirst stable release after PSR-20 acceptance\n\n## 0.1.0\n\nFirst release\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/clock/LICENSE",
    "content": "Copyright (c) 2017 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/clock/README.md",
    "content": "# PSR Clock\n\nThis repository holds the interface for [PSR-20][psr-url].\n\nNote that this is not a clock of its own. It is merely an interface that\ndescribes a clock. See the specification for more details.\n\n## Installation\n\n```bash\ncomposer require psr/clock\n```\n\n## Usage\n\nIf you need a clock, you can use the interface like this:\n\n```php\n<?php\n\nuse Psr\\Clock\\ClockInterface;\n\nclass Foo\n{\n    private ClockInterface $clock;\n\n    public function __construct(ClockInterface $clock)\n    {\n        $this->clock = $clock;\n    }\n\n    public function doSomething()\n    {\n        /** @var DateTimeImmutable $currentDateAndTime */\n        $currentDateAndTime = $this->clock->now();\n        // do something useful with that information\n    }\n}\n```\n\nYou can then pick one of the [implementations][implementation-url] of the interface to get a clock.\n\nIf you want to implement the interface, you can require this package and\nimplement `Psr\\Clock\\ClockInterface` in your code. \n\nDon't forget to add `psr/clock-implementation` to your `composer.json`s `provides`-section like this:\n\n```json\n{\n  \"provides\": {\n    \"psr/clock-implementation\": \"1.0\"\n  }\n}\n```\n\nAnd please read the [specification text][specification-url] for details on the interface.\n\n[psr-url]: https://www.php-fig.org/psr/psr-20\n[package-url]: https://packagist.org/packages/psr/clock\n[implementation-url]: https://packagist.org/providers/psr/clock-implementation\n[specification-url]: https://github.com/php-fig/fig-standards/blob/master/proposed/clock.md\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/clock/composer.json",
    "content": "{\n  \"name\": \"psr/clock\",\n  \"description\": \"Common interface for reading the clock.\",\n  \"keywords\": [\"psr\", \"psr-20\", \"time\", \"clock\", \"now\"],\n  \"homepage\": \"https://github.com/php-fig/clock\",\n  \"license\": \"MIT\",\n  \"authors\": [\n    {\n      \"name\": \"PHP-FIG\",\n      \"homepage\": \"https://www.php-fig.org/\"\n    }\n  ],\n  \"require\": {\n    \"php\": \"^7.0 || ^8.0\"\n  },\n  \"autoload\": {\n    \"psr-4\": {\n      \"Psr\\\\Clock\\\\\": \"src/\"\n    }\n  }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/clock/src/ClockInterface.php",
    "content": "<?php\n\nnamespace Psr\\Clock;\n\nuse DateTimeImmutable;\n\ninterface ClockInterface\n{\n    /**\n     * Returns the current time as a DateTimeImmutable Object\n     */\n    public function now(): DateTimeImmutable;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/.gitignore",
    "content": "composer.lock\ncomposer.phar\n/vendor/\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013-2016 container-interop\nCopyright (c) 2016 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/README.md",
    "content": "Container interface\n==============\n\nThis repository holds all interfaces related to [PSR-11 (Container Interface)][psr-url].\n\nNote that this is not a Container implementation of its own. It is merely abstractions that describe the components of a Dependency Injection Container.\n\nThe installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.\n\n[psr-url]: https://www.php-fig.org/psr/psr-11/\n[package-url]: https://packagist.org/packages/psr/container\n[implementation-url]: https://packagist.org/providers/psr/container-implementation\n\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/composer.json",
    "content": "{\n    \"name\": \"psr/container\",\n    \"type\": \"library\",\n    \"description\": \"Common Container Interface (PHP FIG PSR-11)\",\n    \"keywords\": [\"psr\", \"psr-11\", \"container\", \"container-interop\", \"container-interface\"],\n    \"homepage\": \"https://github.com/php-fig/container\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.4.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Container\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"2.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/src/ContainerExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Container;\n\nuse Throwable;\n\n/**\n * Base interface representing a generic exception in a container.\n */\ninterface ContainerExceptionInterface extends Throwable\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/src/ContainerInterface.php",
    "content": "<?php\n\ndeclare(strict_types=1);\n\nnamespace Psr\\Container;\n\n/**\n * Describes the interface of a container that exposes methods to read its entries.\n */\ninterface ContainerInterface\n{\n    /**\n     * Finds an entry of the container by its identifier and returns it.\n     *\n     * @param string $id Identifier of the entry to look for.\n     *\n     * @throws NotFoundExceptionInterface  No entry was found for **this** identifier.\n     * @throws ContainerExceptionInterface Error while retrieving the entry.\n     *\n     * @return mixed Entry.\n     */\n    public function get(string $id);\n\n    /**\n     * Returns true if the container can return an entry for the given identifier.\n     * Returns false otherwise.\n     *\n     * `has($id)` returning true does not mean that `get($id)` will not throw an exception.\n     * It does however mean that `get($id)` will not throw a `NotFoundExceptionInterface`.\n     *\n     * @param string $id Identifier of the entry to look for.\n     *\n     * @return bool\n     */\n    public function has(string $id): bool;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/container/src/NotFoundExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Container;\n\n/**\n * No entry was found in the container.\n */\ninterface NotFoundExceptionInterface extends ContainerExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file, in reverse chronological order by release.\n\n## 1.0.1\n\nAllow installation with PHP 8. No code changes.\n\n## 1.0.0\n\nFirst stable release. No changes since 0.3.0.\n\n## 0.3.0\n\nAdded Interface suffix on exceptions\n \n## 0.2.0 \n\nAll exceptions are in `Psr\\Http\\Client` namespace\n\n## 0.1.0\n\nFirst release\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/LICENSE",
    "content": "Copyright (c) 2017 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in \nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/README.md",
    "content": "HTTP Client\n===========\n\nThis repository holds all the common code related to [PSR-18 (HTTP Client)][psr-url].\n\nNote that this is not a HTTP Client implementation of its own. It is merely abstractions that describe the components of a HTTP Client.\n\nThe installable [package][package-url] and [implementations][implementation-url] are listed on Packagist.\n\n[psr-url]: http://www.php-fig.org/psr/psr-18\n[package-url]: https://packagist.org/packages/psr/http-client\n[implementation-url]: https://packagist.org/providers/psr/http-client-implementation\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/composer.json",
    "content": "{\n    \"name\": \"psr/http-client\",\n    \"description\": \"Common interface for HTTP clients\",\n    \"keywords\": [\"psr\", \"psr-18\", \"http\", \"http-client\"],\n    \"homepage\": \"https://github.com/php-fig/http-client\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"http://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \"^7.0 || ^8.0\",\n        \"psr/http-message\": \"^1.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Http\\\\Client\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/src/ClientExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\n/**\n * Every HTTP client related exception MUST implement this interface.\n */\ninterface ClientExceptionInterface extends \\Throwable\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/src/ClientInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\nuse Psr\\Http\\Message\\RequestInterface;\nuse Psr\\Http\\Message\\ResponseInterface;\n\ninterface ClientInterface\n{\n    /**\n     * Sends a PSR-7 request and returns a PSR-7 response.\n     *\n     * @param RequestInterface $request\n     *\n     * @return ResponseInterface\n     *\n     * @throws \\Psr\\Http\\Client\\ClientExceptionInterface If an error happens while processing the request.\n     */\n    public function sendRequest(RequestInterface $request): ResponseInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/src/NetworkExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Thrown when the request cannot be completed because of network issues.\n *\n * There is no response object as this exception is thrown when no response has been received.\n *\n * Example: the target host name can not be resolved or the connection failed.\n */\ninterface NetworkExceptionInterface extends ClientExceptionInterface\n{\n    /**\n     * Returns the request.\n     *\n     * The request object MAY be a different object from the one passed to ClientInterface::sendRequest()\n     *\n     * @return RequestInterface\n     */\n    public function getRequest(): RequestInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-client/src/RequestExceptionInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Client;\n\nuse Psr\\Http\\Message\\RequestInterface;\n\n/**\n * Exception for when a request failed.\n *\n * Examples:\n *      - Request is invalid (e.g. method is missing)\n *      - Runtime request errors (e.g. the body stream is not seekable)\n */\ninterface RequestExceptionInterface extends ClientExceptionInterface\n{\n    /**\n     * Returns the request.\n     *\n     * The request object MAY be a different object from the one passed to ClientInterface::sendRequest()\n     *\n     * @return RequestInterface\n     */\n    public function getRequest(): RequestInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file, in reverse chronological order by release.\n\n## 1.0.1 - 2016-08-06\n\n### Added\n\n- Nothing.\n\n### Deprecated\n\n- Nothing.\n\n### Removed\n\n- Nothing.\n\n### Fixed\n\n- Updated all `@return self` annotation references in interfaces to use\n  `@return static`, which more closelly follows the semantics of the\n  specification.\n- Updated the `MessageInterface::getHeaders()` return annotation to use the\n  value `string[][]`, indicating the format is a nested array of strings.\n- Updated the `@link` annotation for `RequestInterface::withRequestTarget()`\n  to point to the correct section of RFC 7230.\n- Updated the `ServerRequestInterface::withUploadedFiles()` parameter annotation\n  to add the parameter name (`$uploadedFiles`).\n- Updated a `@throws` annotation for the `UploadedFileInterface::moveTo()`\n  method to correctly reference the method parameter (it was referencing an\n  incorrect parameter name previously).\n\n## 1.0.0 - 2016-05-18\n\nInitial stable release; reflects accepted PSR-7 specification.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/LICENSE",
    "content": "Copyright (c) 2014 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in \nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/README.md",
    "content": "PSR Http Message\n================\n\nThis repository holds all interfaces/classes/traits related to\n[PSR-7](http://www.php-fig.org/psr/psr-7/).\n\nNote that this is not a HTTP message implementation of its own. It is merely an\ninterface that describes a HTTP message. See the specification for more details.\n\nUsage\n-----\n\nWe'll certainly need some stuff in here."
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/composer.json",
    "content": "{\n    \"name\": \"psr/http-message\",\n    \"description\": \"Common interface for HTTP messages\",\n    \"keywords\": [\"psr\", \"psr-7\", \"http\", \"http-message\", \"request\", \"response\"],\n    \"homepage\": \"https://github.com/php-fig/http-message\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"http://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=5.3.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Http\\\\Message\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/MessageInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * HTTP messages consist of requests from a client to a server and responses\n * from a server to a client. This interface defines the methods common to\n * each.\n *\n * Messages are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n *\n * @link http://www.ietf.org/rfc/rfc7230.txt\n * @link http://www.ietf.org/rfc/rfc7231.txt\n */\ninterface MessageInterface\n{\n    /**\n     * Retrieves the HTTP protocol version as a string.\n     *\n     * The string MUST contain only the HTTP version number (e.g., \"1.1\", \"1.0\").\n     *\n     * @return string HTTP protocol version.\n     */\n    public function getProtocolVersion();\n\n    /**\n     * Return an instance with the specified HTTP protocol version.\n     *\n     * The version string MUST contain only the HTTP version number (e.g.,\n     * \"1.1\", \"1.0\").\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new protocol version.\n     *\n     * @param string $version HTTP protocol version\n     * @return static\n     */\n    public function withProtocolVersion($version);\n\n    /**\n     * Retrieves all message header values.\n     *\n     * The keys represent the header name as it will be sent over the wire, and\n     * each value is an array of strings associated with the header.\n     *\n     *     // Represent the headers as a string\n     *     foreach ($message->getHeaders() as $name => $values) {\n     *         echo $name . \": \" . implode(\", \", $values);\n     *     }\n     *\n     *     // Emit headers iteratively:\n     *     foreach ($message->getHeaders() as $name => $values) {\n     *         foreach ($values as $value) {\n     *             header(sprintf('%s: %s', $name, $value), false);\n     *         }\n     *     }\n     *\n     * While header names are not case-sensitive, getHeaders() will preserve the\n     * exact case in which headers were originally specified.\n     *\n     * @return string[][] Returns an associative array of the message's headers. Each\n     *     key MUST be a header name, and each value MUST be an array of strings\n     *     for that header.\n     */\n    public function getHeaders();\n\n    /**\n     * Checks if a header exists by the given case-insensitive name.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @return bool Returns true if any header names match the given header\n     *     name using a case-insensitive string comparison. Returns false if\n     *     no matching header name is found in the message.\n     */\n    public function hasHeader($name);\n\n    /**\n     * Retrieves a message header value by the given case-insensitive name.\n     *\n     * This method returns an array of all the header values of the given\n     * case-insensitive header name.\n     *\n     * If the header does not appear in the message, this method MUST return an\n     * empty array.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @return string[] An array of string values as provided for the given\n     *    header. If the header does not appear in the message, this method MUST\n     *    return an empty array.\n     */\n    public function getHeader($name);\n\n    /**\n     * Retrieves a comma-separated string of the values for a single header.\n     *\n     * This method returns all of the header values of the given\n     * case-insensitive header name as a string concatenated together using\n     * a comma.\n     *\n     * NOTE: Not all header values may be appropriately represented using\n     * comma concatenation. For such headers, use getHeader() instead\n     * and supply your own delimiter when concatenating.\n     *\n     * If the header does not appear in the message, this method MUST return\n     * an empty string.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @return string A string of values as provided for the given header\n     *    concatenated together using a comma. If the header does not appear in\n     *    the message, this method MUST return an empty string.\n     */\n    public function getHeaderLine($name);\n\n    /**\n     * Return an instance with the provided value replacing the specified header.\n     *\n     * While header names are case-insensitive, the casing of the header will\n     * be preserved by this function, and returned from getHeaders().\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new and/or updated header and value.\n     *\n     * @param string $name Case-insensitive header field name.\n     * @param string|string[] $value Header value(s).\n     * @return static\n     * @throws \\InvalidArgumentException for invalid header names or values.\n     */\n    public function withHeader($name, $value);\n\n    /**\n     * Return an instance with the specified header appended with the given value.\n     *\n     * Existing values for the specified header will be maintained. The new\n     * value(s) will be appended to the existing list. If the header did not\n     * exist previously, it will be added.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new header and/or value.\n     *\n     * @param string $name Case-insensitive header field name to add.\n     * @param string|string[] $value Header value(s).\n     * @return static\n     * @throws \\InvalidArgumentException for invalid header names or values.\n     */\n    public function withAddedHeader($name, $value);\n\n    /**\n     * Return an instance without the specified header.\n     *\n     * Header resolution MUST be done without case-sensitivity.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that removes\n     * the named header.\n     *\n     * @param string $name Case-insensitive header field name to remove.\n     * @return static\n     */\n    public function withoutHeader($name);\n\n    /**\n     * Gets the body of the message.\n     *\n     * @return StreamInterface Returns the body as a stream.\n     */\n    public function getBody();\n\n    /**\n     * Return an instance with the specified message body.\n     *\n     * The body MUST be a StreamInterface object.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return a new instance that has the\n     * new body stream.\n     *\n     * @param StreamInterface $body Body.\n     * @return static\n     * @throws \\InvalidArgumentException When the body is not valid.\n     */\n    public function withBody(StreamInterface $body);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/RequestInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Representation of an outgoing, client-side request.\n *\n * Per the HTTP specification, this interface includes properties for\n * each of the following:\n *\n * - Protocol version\n * - HTTP method\n * - URI\n * - Headers\n * - Message body\n *\n * During construction, implementations MUST attempt to set the Host header from\n * a provided URI if no Host header is provided.\n *\n * Requests are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n */\ninterface RequestInterface extends MessageInterface\n{\n    /**\n     * Retrieves the message's request target.\n     *\n     * Retrieves the message's request-target either as it will appear (for\n     * clients), as it appeared at request (for servers), or as it was\n     * specified for the instance (see withRequestTarget()).\n     *\n     * In most cases, this will be the origin-form of the composed URI,\n     * unless a value was provided to the concrete implementation (see\n     * withRequestTarget() below).\n     *\n     * If no URI is available, and no request-target has been specifically\n     * provided, this method MUST return the string \"/\".\n     *\n     * @return string\n     */\n    public function getRequestTarget();\n\n    /**\n     * Return an instance with the specific request-target.\n     *\n     * If the request needs a non-origin-form request-target — e.g., for\n     * specifying an absolute-form, authority-form, or asterisk-form —\n     * this method may be used to create an instance with the specified\n     * request-target, verbatim.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * changed request target.\n     *\n     * @link http://tools.ietf.org/html/rfc7230#section-5.3 (for the various\n     *     request-target forms allowed in request messages)\n     * @param mixed $requestTarget\n     * @return static\n     */\n    public function withRequestTarget($requestTarget);\n\n    /**\n     * Retrieves the HTTP method of the request.\n     *\n     * @return string Returns the request method.\n     */\n    public function getMethod();\n\n    /**\n     * Return an instance with the provided HTTP method.\n     *\n     * While HTTP method names are typically all uppercase characters, HTTP\n     * method names are case-sensitive and thus implementations SHOULD NOT\n     * modify the given string.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * changed request method.\n     *\n     * @param string $method Case-sensitive method.\n     * @return static\n     * @throws \\InvalidArgumentException for invalid HTTP methods.\n     */\n    public function withMethod($method);\n\n    /**\n     * Retrieves the URI instance.\n     *\n     * This method MUST return a UriInterface instance.\n     *\n     * @link http://tools.ietf.org/html/rfc3986#section-4.3\n     * @return UriInterface Returns a UriInterface instance\n     *     representing the URI of the request.\n     */\n    public function getUri();\n\n    /**\n     * Returns an instance with the provided URI.\n     *\n     * This method MUST update the Host header of the returned request by\n     * default if the URI contains a host component. If the URI does not\n     * contain a host component, any pre-existing Host header MUST be carried\n     * over to the returned request.\n     *\n     * You can opt-in to preserving the original state of the Host header by\n     * setting `$preserveHost` to `true`. When `$preserveHost` is set to\n     * `true`, this method interacts with the Host header in the following ways:\n     *\n     * - If the Host header is missing or empty, and the new URI contains\n     *   a host component, this method MUST update the Host header in the returned\n     *   request.\n     * - If the Host header is missing or empty, and the new URI does not contain a\n     *   host component, this method MUST NOT update the Host header in the returned\n     *   request.\n     * - If a Host header is present and non-empty, this method MUST NOT update\n     *   the Host header in the returned request.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * new UriInterface instance.\n     *\n     * @link http://tools.ietf.org/html/rfc3986#section-4.3\n     * @param UriInterface $uri New request URI to use.\n     * @param bool $preserveHost Preserve the original state of the Host header.\n     * @return static\n     */\n    public function withUri(UriInterface $uri, $preserveHost = false);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/ResponseInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Representation of an outgoing, server-side response.\n *\n * Per the HTTP specification, this interface includes properties for\n * each of the following:\n *\n * - Protocol version\n * - Status code and reason phrase\n * - Headers\n * - Message body\n *\n * Responses are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n */\ninterface ResponseInterface extends MessageInterface\n{\n    /**\n     * Gets the response status code.\n     *\n     * The status code is a 3-digit integer result code of the server's attempt\n     * to understand and satisfy the request.\n     *\n     * @return int Status code.\n     */\n    public function getStatusCode();\n\n    /**\n     * Return an instance with the specified status code and, optionally, reason phrase.\n     *\n     * If no reason phrase is specified, implementations MAY choose to default\n     * to the RFC 7231 or IANA recommended reason phrase for the response's\n     * status code.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated status and reason phrase.\n     *\n     * @link http://tools.ietf.org/html/rfc7231#section-6\n     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n     * @param int $code The 3-digit integer result code to set.\n     * @param string $reasonPhrase The reason phrase to use with the\n     *     provided status code; if none is provided, implementations MAY\n     *     use the defaults as suggested in the HTTP specification.\n     * @return static\n     * @throws \\InvalidArgumentException For invalid status code arguments.\n     */\n    public function withStatus($code, $reasonPhrase = '');\n\n    /**\n     * Gets the response reason phrase associated with the status code.\n     *\n     * Because a reason phrase is not a required element in a response\n     * status line, the reason phrase value MAY be null. Implementations MAY\n     * choose to return the default RFC 7231 recommended reason phrase (or those\n     * listed in the IANA HTTP Status Code Registry) for the response's\n     * status code.\n     *\n     * @link http://tools.ietf.org/html/rfc7231#section-6\n     * @link http://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\n     * @return string Reason phrase; must return an empty string if none present.\n     */\n    public function getReasonPhrase();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/ServerRequestInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Representation of an incoming, server-side HTTP request.\n *\n * Per the HTTP specification, this interface includes properties for\n * each of the following:\n *\n * - Protocol version\n * - HTTP method\n * - URI\n * - Headers\n * - Message body\n *\n * Additionally, it encapsulates all data as it has arrived to the\n * application from the CGI and/or PHP environment, including:\n *\n * - The values represented in $_SERVER.\n * - Any cookies provided (generally via $_COOKIE)\n * - Query string arguments (generally via $_GET, or as parsed via parse_str())\n * - Upload files, if any (as represented by $_FILES)\n * - Deserialized body parameters (generally from $_POST)\n *\n * $_SERVER values MUST be treated as immutable, as they represent application\n * state at the time of request; as such, no methods are provided to allow\n * modification of those values. The other values provide such methods, as they\n * can be restored from $_SERVER or the request body, and may need treatment\n * during the application (e.g., body parameters may be deserialized based on\n * content type).\n *\n * Additionally, this interface recognizes the utility of introspecting a\n * request to derive and match additional parameters (e.g., via URI path\n * matching, decrypting cookie values, deserializing non-form-encoded body\n * content, matching authorization headers to users, etc). These parameters\n * are stored in an \"attributes\" property.\n *\n * Requests are considered immutable; all methods that might change state MUST\n * be implemented such that they retain the internal state of the current\n * message and return an instance that contains the changed state.\n */\ninterface ServerRequestInterface extends RequestInterface\n{\n    /**\n     * Retrieve server parameters.\n     *\n     * Retrieves data related to the incoming request environment,\n     * typically derived from PHP's $_SERVER superglobal. The data IS NOT\n     * REQUIRED to originate from $_SERVER.\n     *\n     * @return array\n     */\n    public function getServerParams();\n\n    /**\n     * Retrieve cookies.\n     *\n     * Retrieves cookies sent by the client to the server.\n     *\n     * The data MUST be compatible with the structure of the $_COOKIE\n     * superglobal.\n     *\n     * @return array\n     */\n    public function getCookieParams();\n\n    /**\n     * Return an instance with the specified cookies.\n     *\n     * The data IS NOT REQUIRED to come from the $_COOKIE superglobal, but MUST\n     * be compatible with the structure of $_COOKIE. Typically, this data will\n     * be injected at instantiation.\n     *\n     * This method MUST NOT update the related Cookie header of the request\n     * instance, nor related values in the server params.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated cookie values.\n     *\n     * @param array $cookies Array of key/value pairs representing cookies.\n     * @return static\n     */\n    public function withCookieParams(array $cookies);\n\n    /**\n     * Retrieve query string arguments.\n     *\n     * Retrieves the deserialized query string arguments, if any.\n     *\n     * Note: the query params might not be in sync with the URI or server\n     * params. If you need to ensure you are only getting the original\n     * values, you may need to parse the query string from `getUri()->getQuery()`\n     * or from the `QUERY_STRING` server param.\n     *\n     * @return array\n     */\n    public function getQueryParams();\n\n    /**\n     * Return an instance with the specified query string arguments.\n     *\n     * These values SHOULD remain immutable over the course of the incoming\n     * request. They MAY be injected during instantiation, such as from PHP's\n     * $_GET superglobal, or MAY be derived from some other value such as the\n     * URI. In cases where the arguments are parsed from the URI, the data\n     * MUST be compatible with what PHP's parse_str() would return for\n     * purposes of how duplicate query parameters are handled, and how nested\n     * sets are handled.\n     *\n     * Setting query string arguments MUST NOT change the URI stored by the\n     * request, nor the values in the server params.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated query string arguments.\n     *\n     * @param array $query Array of query string arguments, typically from\n     *     $_GET.\n     * @return static\n     */\n    public function withQueryParams(array $query);\n\n    /**\n     * Retrieve normalized file upload data.\n     *\n     * This method returns upload metadata in a normalized tree, with each leaf\n     * an instance of Psr\\Http\\Message\\UploadedFileInterface.\n     *\n     * These values MAY be prepared from $_FILES or the message body during\n     * instantiation, or MAY be injected via withUploadedFiles().\n     *\n     * @return array An array tree of UploadedFileInterface instances; an empty\n     *     array MUST be returned if no data is present.\n     */\n    public function getUploadedFiles();\n\n    /**\n     * Create a new instance with the specified uploaded files.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated body parameters.\n     *\n     * @param array $uploadedFiles An array tree of UploadedFileInterface instances.\n     * @return static\n     * @throws \\InvalidArgumentException if an invalid structure is provided.\n     */\n    public function withUploadedFiles(array $uploadedFiles);\n\n    /**\n     * Retrieve any parameters provided in the request body.\n     *\n     * If the request Content-Type is either application/x-www-form-urlencoded\n     * or multipart/form-data, and the request method is POST, this method MUST\n     * return the contents of $_POST.\n     *\n     * Otherwise, this method may return any results of deserializing\n     * the request body content; as parsing returns structured content, the\n     * potential types MUST be arrays or objects only. A null value indicates\n     * the absence of body content.\n     *\n     * @return null|array|object The deserialized body parameters, if any.\n     *     These will typically be an array or object.\n     */\n    public function getParsedBody();\n\n    /**\n     * Return an instance with the specified body parameters.\n     *\n     * These MAY be injected during instantiation.\n     *\n     * If the request Content-Type is either application/x-www-form-urlencoded\n     * or multipart/form-data, and the request method is POST, use this method\n     * ONLY to inject the contents of $_POST.\n     *\n     * The data IS NOT REQUIRED to come from $_POST, but MUST be the results of\n     * deserializing the request body content. Deserialization/parsing returns\n     * structured data, and, as such, this method ONLY accepts arrays or objects,\n     * or a null value if nothing was available to parse.\n     *\n     * As an example, if content negotiation determines that the request data\n     * is a JSON payload, this method could be used to create a request\n     * instance with the deserialized parameters.\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated body parameters.\n     *\n     * @param null|array|object $data The deserialized body data. This will\n     *     typically be in an array or object.\n     * @return static\n     * @throws \\InvalidArgumentException if an unsupported argument type is\n     *     provided.\n     */\n    public function withParsedBody($data);\n\n    /**\n     * Retrieve attributes derived from the request.\n     *\n     * The request \"attributes\" may be used to allow injection of any\n     * parameters derived from the request: e.g., the results of path\n     * match operations; the results of decrypting cookies; the results of\n     * deserializing non-form-encoded message bodies; etc. Attributes\n     * will be application and request specific, and CAN be mutable.\n     *\n     * @return array Attributes derived from the request.\n     */\n    public function getAttributes();\n\n    /**\n     * Retrieve a single derived request attribute.\n     *\n     * Retrieves a single derived request attribute as described in\n     * getAttributes(). If the attribute has not been previously set, returns\n     * the default value as provided.\n     *\n     * This method obviates the need for a hasAttribute() method, as it allows\n     * specifying a default value to return if the attribute is not found.\n     *\n     * @see getAttributes()\n     * @param string $name The attribute name.\n     * @param mixed $default Default value to return if the attribute does not exist.\n     * @return mixed\n     */\n    public function getAttribute($name, $default = null);\n\n    /**\n     * Return an instance with the specified derived request attribute.\n     *\n     * This method allows setting a single derived request attribute as\n     * described in getAttributes().\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that has the\n     * updated attribute.\n     *\n     * @see getAttributes()\n     * @param string $name The attribute name.\n     * @param mixed $value The value of the attribute.\n     * @return static\n     */\n    public function withAttribute($name, $value);\n\n    /**\n     * Return an instance that removes the specified derived request attribute.\n     *\n     * This method allows removing a single derived request attribute as\n     * described in getAttributes().\n     *\n     * This method MUST be implemented in such a way as to retain the\n     * immutability of the message, and MUST return an instance that removes\n     * the attribute.\n     *\n     * @see getAttributes()\n     * @param string $name The attribute name.\n     * @return static\n     */\n    public function withoutAttribute($name);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/StreamInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Describes a data stream.\n *\n * Typically, an instance will wrap a PHP stream; this interface provides\n * a wrapper around the most common operations, including serialization of\n * the entire stream to a string.\n */\ninterface StreamInterface\n{\n    /**\n     * Reads all data from the stream into a string, from the beginning to end.\n     *\n     * This method MUST attempt to seek to the beginning of the stream before\n     * reading data and read the stream until the end is reached.\n     *\n     * Warning: This could attempt to load a large amount of data into memory.\n     *\n     * This method MUST NOT raise an exception in order to conform with PHP's\n     * string casting operations.\n     *\n     * @see http://php.net/manual/en/language.oop5.magic.php#object.tostring\n     * @return string\n     */\n    public function __toString();\n\n    /**\n     * Closes the stream and any underlying resources.\n     *\n     * @return void\n     */\n    public function close();\n\n    /**\n     * Separates any underlying resources from the stream.\n     *\n     * After the stream has been detached, the stream is in an unusable state.\n     *\n     * @return resource|null Underlying PHP stream, if any\n     */\n    public function detach();\n\n    /**\n     * Get the size of the stream if known.\n     *\n     * @return int|null Returns the size in bytes if known, or null if unknown.\n     */\n    public function getSize();\n\n    /**\n     * Returns the current position of the file read/write pointer\n     *\n     * @return int Position of the file pointer\n     * @throws \\RuntimeException on error.\n     */\n    public function tell();\n\n    /**\n     * Returns true if the stream is at the end of the stream.\n     *\n     * @return bool\n     */\n    public function eof();\n\n    /**\n     * Returns whether or not the stream is seekable.\n     *\n     * @return bool\n     */\n    public function isSeekable();\n\n    /**\n     * Seek to a position in the stream.\n     *\n     * @link http://www.php.net/manual/en/function.fseek.php\n     * @param int $offset Stream offset\n     * @param int $whence Specifies how the cursor position will be calculated\n     *     based on the seek offset. Valid values are identical to the built-in\n     *     PHP $whence values for `fseek()`.  SEEK_SET: Set position equal to\n     *     offset bytes SEEK_CUR: Set position to current location plus offset\n     *     SEEK_END: Set position to end-of-stream plus offset.\n     * @throws \\RuntimeException on failure.\n     */\n    public function seek($offset, $whence = SEEK_SET);\n\n    /**\n     * Seek to the beginning of the stream.\n     *\n     * If the stream is not seekable, this method will raise an exception;\n     * otherwise, it will perform a seek(0).\n     *\n     * @see seek()\n     * @link http://www.php.net/manual/en/function.fseek.php\n     * @throws \\RuntimeException on failure.\n     */\n    public function rewind();\n\n    /**\n     * Returns whether or not the stream is writable.\n     *\n     * @return bool\n     */\n    public function isWritable();\n\n    /**\n     * Write data to the stream.\n     *\n     * @param string $string The string that is to be written.\n     * @return int Returns the number of bytes written to the stream.\n     * @throws \\RuntimeException on failure.\n     */\n    public function write($string);\n\n    /**\n     * Returns whether or not the stream is readable.\n     *\n     * @return bool\n     */\n    public function isReadable();\n\n    /**\n     * Read data from the stream.\n     *\n     * @param int $length Read up to $length bytes from the object and return\n     *     them. Fewer than $length bytes may be returned if underlying stream\n     *     call returns fewer bytes.\n     * @return string Returns the data read from the stream, or an empty string\n     *     if no bytes are available.\n     * @throws \\RuntimeException if an error occurs.\n     */\n    public function read($length);\n\n    /**\n     * Returns the remaining contents in a string\n     *\n     * @return string\n     * @throws \\RuntimeException if unable to read or an error occurs while\n     *     reading.\n     */\n    public function getContents();\n\n    /**\n     * Get stream metadata as an associative array or retrieve a specific key.\n     *\n     * The keys returned are identical to the keys returned from PHP's\n     * stream_get_meta_data() function.\n     *\n     * @link http://php.net/manual/en/function.stream-get-meta-data.php\n     * @param string $key Specific metadata to retrieve.\n     * @return array|mixed|null Returns an associative array if no key is\n     *     provided. Returns a specific key value if a key is provided and the\n     *     value is found, or null if the key is not found.\n     */\n    public function getMetadata($key = null);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/UploadedFileInterface.php",
    "content": "<?php\n\nnamespace Psr\\Http\\Message;\n\n/**\n * Value object representing a file uploaded through an HTTP request.\n *\n * Instances of this interface are considered immutable; all methods that\n * might change state MUST be implemented such that they retain the internal\n * state of the current instance and return an instance that contains the\n * changed state.\n */\ninterface UploadedFileInterface\n{\n    /**\n     * Retrieve a stream representing the uploaded file.\n     *\n     * This method MUST return a StreamInterface instance, representing the\n     * uploaded file. The purpose of this method is to allow utilizing native PHP\n     * stream functionality to manipulate the file upload, such as\n     * stream_copy_to_stream() (though the result will need to be decorated in a\n     * native PHP stream wrapper to work with such functions).\n     *\n     * If the moveTo() method has been called previously, this method MUST raise\n     * an exception.\n     *\n     * @return StreamInterface Stream representation of the uploaded file.\n     * @throws \\RuntimeException in cases when no stream is available or can be\n     *     created.\n     */\n    public function getStream();\n\n    /**\n     * Move the uploaded file to a new location.\n     *\n     * Use this method as an alternative to move_uploaded_file(). This method is\n     * guaranteed to work in both SAPI and non-SAPI environments.\n     * Implementations must determine which environment they are in, and use the\n     * appropriate method (move_uploaded_file(), rename(), or a stream\n     * operation) to perform the operation.\n     *\n     * $targetPath may be an absolute path, or a relative path. If it is a\n     * relative path, resolution should be the same as used by PHP's rename()\n     * function.\n     *\n     * The original file or stream MUST be removed on completion.\n     *\n     * If this method is called more than once, any subsequent calls MUST raise\n     * an exception.\n     *\n     * When used in an SAPI environment where $_FILES is populated, when writing\n     * files via moveTo(), is_uploaded_file() and move_uploaded_file() SHOULD be\n     * used to ensure permissions and upload status are verified correctly.\n     *\n     * If you wish to move to a stream, use getStream(), as SAPI operations\n     * cannot guarantee writing to stream destinations.\n     *\n     * @see http://php.net/is_uploaded_file\n     * @see http://php.net/move_uploaded_file\n     * @param string $targetPath Path to which to move the uploaded file.\n     * @throws \\InvalidArgumentException if the $targetPath specified is invalid.\n     * @throws \\RuntimeException on any error during the move operation, or on\n     *     the second or subsequent call to the method.\n     */\n    public function moveTo($targetPath);\n    \n    /**\n     * Retrieve the file size.\n     *\n     * Implementations SHOULD return the value stored in the \"size\" key of\n     * the file in the $_FILES array if available, as PHP calculates this based\n     * on the actual size transmitted.\n     *\n     * @return int|null The file size in bytes or null if unknown.\n     */\n    public function getSize();\n    \n    /**\n     * Retrieve the error associated with the uploaded file.\n     *\n     * The return value MUST be one of PHP's UPLOAD_ERR_XXX constants.\n     *\n     * If the file was uploaded successfully, this method MUST return\n     * UPLOAD_ERR_OK.\n     *\n     * Implementations SHOULD return the value stored in the \"error\" key of\n     * the file in the $_FILES array.\n     *\n     * @see http://php.net/manual/en/features.file-upload.errors.php\n     * @return int One of PHP's UPLOAD_ERR_XXX constants.\n     */\n    public function getError();\n    \n    /**\n     * Retrieve the filename sent by the client.\n     *\n     * Do not trust the value returned by this method. A client could send\n     * a malicious filename with the intention to corrupt or hack your\n     * application.\n     *\n     * Implementations SHOULD return the value stored in the \"name\" key of\n     * the file in the $_FILES array.\n     *\n     * @return string|null The filename sent by the client or null if none\n     *     was provided.\n     */\n    public function getClientFilename();\n    \n    /**\n     * Retrieve the media type sent by the client.\n     *\n     * Do not trust the value returned by this method. A client could send\n     * a malicious media type with the intention to corrupt or hack your\n     * application.\n     *\n     * Implementations SHOULD return the value stored in the \"type\" key of\n     * the file in the $_FILES array.\n     *\n     * @return string|null The media type sent by the client or null if none\n     *     was provided.\n     */\n    public function getClientMediaType();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/http-message/src/UriInterface.php",
    "content": "<?php\nnamespace Psr\\Http\\Message;\n\n/**\n * Value object representing a URI.\n *\n * This interface is meant to represent URIs according to RFC 3986 and to\n * provide methods for most common operations. Additional functionality for\n * working with URIs can be provided on top of the interface or externally.\n * Its primary use is for HTTP requests, but may also be used in other\n * contexts.\n *\n * Instances of this interface are considered immutable; all methods that\n * might change state MUST be implemented such that they retain the internal\n * state of the current instance and return an instance that contains the\n * changed state.\n *\n * Typically the Host header will be also be present in the request message.\n * For server-side requests, the scheme will typically be discoverable in the\n * server parameters.\n *\n * @link http://tools.ietf.org/html/rfc3986 (the URI specification)\n */\ninterface UriInterface\n{\n    /**\n     * Retrieve the scheme component of the URI.\n     *\n     * If no scheme is present, this method MUST return an empty string.\n     *\n     * The value returned MUST be normalized to lowercase, per RFC 3986\n     * Section 3.1.\n     *\n     * The trailing \":\" character is not part of the scheme and MUST NOT be\n     * added.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-3.1\n     * @return string The URI scheme.\n     */\n    public function getScheme();\n\n    /**\n     * Retrieve the authority component of the URI.\n     *\n     * If no authority information is present, this method MUST return an empty\n     * string.\n     *\n     * The authority syntax of the URI is:\n     *\n     * <pre>\n     * [user-info@]host[:port]\n     * </pre>\n     *\n     * If the port component is not set or is the standard port for the current\n     * scheme, it SHOULD NOT be included.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-3.2\n     * @return string The URI authority, in \"[user-info@]host[:port]\" format.\n     */\n    public function getAuthority();\n\n    /**\n     * Retrieve the user information component of the URI.\n     *\n     * If no user information is present, this method MUST return an empty\n     * string.\n     *\n     * If a user is present in the URI, this will return that value;\n     * additionally, if the password is also present, it will be appended to the\n     * user value, with a colon (\":\") separating the values.\n     *\n     * The trailing \"@\" character is not part of the user information and MUST\n     * NOT be added.\n     *\n     * @return string The URI user information, in \"username[:password]\" format.\n     */\n    public function getUserInfo();\n\n    /**\n     * Retrieve the host component of the URI.\n     *\n     * If no host is present, this method MUST return an empty string.\n     *\n     * The value returned MUST be normalized to lowercase, per RFC 3986\n     * Section 3.2.2.\n     *\n     * @see http://tools.ietf.org/html/rfc3986#section-3.2.2\n     * @return string The URI host.\n     */\n    public function getHost();\n\n    /**\n     * Retrieve the port component of the URI.\n     *\n     * If a port is present, and it is non-standard for the current scheme,\n     * this method MUST return it as an integer. If the port is the standard port\n     * used with the current scheme, this method SHOULD return null.\n     *\n     * If no port is present, and no scheme is present, this method MUST return\n     * a null value.\n     *\n     * If no port is present, but a scheme is present, this method MAY return\n     * the standard port for that scheme, but SHOULD return null.\n     *\n     * @return null|int The URI port.\n     */\n    public function getPort();\n\n    /**\n     * Retrieve the path component of the URI.\n     *\n     * The path can either be empty or absolute (starting with a slash) or\n     * rootless (not starting with a slash). Implementations MUST support all\n     * three syntaxes.\n     *\n     * Normally, the empty path \"\" and absolute path \"/\" are considered equal as\n     * defined in RFC 7230 Section 2.7.3. But this method MUST NOT automatically\n     * do this normalization because in contexts with a trimmed base path, e.g.\n     * the front controller, this difference becomes significant. It's the task\n     * of the user to handle both \"\" and \"/\".\n     *\n     * The value returned MUST be percent-encoded, but MUST NOT double-encode\n     * any characters. To determine what characters to encode, please refer to\n     * RFC 3986, Sections 2 and 3.3.\n     *\n     * As an example, if the value should include a slash (\"/\") not intended as\n     * delimiter between path segments, that value MUST be passed in encoded\n     * form (e.g., \"%2F\") to the instance.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-2\n     * @see https://tools.ietf.org/html/rfc3986#section-3.3\n     * @return string The URI path.\n     */\n    public function getPath();\n\n    /**\n     * Retrieve the query string of the URI.\n     *\n     * If no query string is present, this method MUST return an empty string.\n     *\n     * The leading \"?\" character is not part of the query and MUST NOT be\n     * added.\n     *\n     * The value returned MUST be percent-encoded, but MUST NOT double-encode\n     * any characters. To determine what characters to encode, please refer to\n     * RFC 3986, Sections 2 and 3.4.\n     *\n     * As an example, if a value in a key/value pair of the query string should\n     * include an ampersand (\"&\") not intended as a delimiter between values,\n     * that value MUST be passed in encoded form (e.g., \"%26\") to the instance.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-2\n     * @see https://tools.ietf.org/html/rfc3986#section-3.4\n     * @return string The URI query string.\n     */\n    public function getQuery();\n\n    /**\n     * Retrieve the fragment component of the URI.\n     *\n     * If no fragment is present, this method MUST return an empty string.\n     *\n     * The leading \"#\" character is not part of the fragment and MUST NOT be\n     * added.\n     *\n     * The value returned MUST be percent-encoded, but MUST NOT double-encode\n     * any characters. To determine what characters to encode, please refer to\n     * RFC 3986, Sections 2 and 3.5.\n     *\n     * @see https://tools.ietf.org/html/rfc3986#section-2\n     * @see https://tools.ietf.org/html/rfc3986#section-3.5\n     * @return string The URI fragment.\n     */\n    public function getFragment();\n\n    /**\n     * Return an instance with the specified scheme.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified scheme.\n     *\n     * Implementations MUST support the schemes \"http\" and \"https\" case\n     * insensitively, and MAY accommodate other schemes if required.\n     *\n     * An empty scheme is equivalent to removing the scheme.\n     *\n     * @param string $scheme The scheme to use with the new instance.\n     * @return static A new instance with the specified scheme.\n     * @throws \\InvalidArgumentException for invalid or unsupported schemes.\n     */\n    public function withScheme($scheme);\n\n    /**\n     * Return an instance with the specified user information.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified user information.\n     *\n     * Password is optional, but the user information MUST include the\n     * user; an empty string for the user is equivalent to removing user\n     * information.\n     *\n     * @param string $user The user name to use for authority.\n     * @param null|string $password The password associated with $user.\n     * @return static A new instance with the specified user information.\n     */\n    public function withUserInfo($user, $password = null);\n\n    /**\n     * Return an instance with the specified host.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified host.\n     *\n     * An empty host value is equivalent to removing the host.\n     *\n     * @param string $host The hostname to use with the new instance.\n     * @return static A new instance with the specified host.\n     * @throws \\InvalidArgumentException for invalid hostnames.\n     */\n    public function withHost($host);\n\n    /**\n     * Return an instance with the specified port.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified port.\n     *\n     * Implementations MUST raise an exception for ports outside the\n     * established TCP and UDP port ranges.\n     *\n     * A null value provided for the port is equivalent to removing the port\n     * information.\n     *\n     * @param null|int $port The port to use with the new instance; a null value\n     *     removes the port information.\n     * @return static A new instance with the specified port.\n     * @throws \\InvalidArgumentException for invalid ports.\n     */\n    public function withPort($port);\n\n    /**\n     * Return an instance with the specified path.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified path.\n     *\n     * The path can either be empty or absolute (starting with a slash) or\n     * rootless (not starting with a slash). Implementations MUST support all\n     * three syntaxes.\n     *\n     * If the path is intended to be domain-relative rather than path relative then\n     * it must begin with a slash (\"/\"). Paths not starting with a slash (\"/\")\n     * are assumed to be relative to some base path known to the application or\n     * consumer.\n     *\n     * Users can provide both encoded and decoded path characters.\n     * Implementations ensure the correct encoding as outlined in getPath().\n     *\n     * @param string $path The path to use with the new instance.\n     * @return static A new instance with the specified path.\n     * @throws \\InvalidArgumentException for invalid paths.\n     */\n    public function withPath($path);\n\n    /**\n     * Return an instance with the specified query string.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified query string.\n     *\n     * Users can provide both encoded and decoded query characters.\n     * Implementations ensure the correct encoding as outlined in getQuery().\n     *\n     * An empty query string value is equivalent to removing the query string.\n     *\n     * @param string $query The query string to use with the new instance.\n     * @return static A new instance with the specified query string.\n     * @throws \\InvalidArgumentException for invalid query strings.\n     */\n    public function withQuery($query);\n\n    /**\n     * Return an instance with the specified URI fragment.\n     *\n     * This method MUST retain the state of the current instance, and return\n     * an instance that contains the specified URI fragment.\n     *\n     * Users can provide both encoded and decoded fragment characters.\n     * Implementations ensure the correct encoding as outlined in getFragment().\n     *\n     * An empty fragment value is equivalent to removing the fragment.\n     *\n     * @param string $fragment The fragment to use with the new instance.\n     * @return static A new instance with the specified fragment.\n     */\n    public function withFragment($fragment);\n\n    /**\n     * Return the string representation as a URI reference.\n     *\n     * Depending on which components of the URI are present, the resulting\n     * string is either a full URI or relative reference according to RFC 3986,\n     * Section 4.1. The method concatenates the various components of the URI,\n     * using the appropriate delimiters:\n     *\n     * - If a scheme is present, it MUST be suffixed by \":\".\n     * - If an authority is present, it MUST be prefixed by \"//\".\n     * - The path can be concatenated without delimiters. But there are two\n     *   cases where the path has to be adjusted to make the URI reference\n     *   valid as PHP does not allow to throw an exception in __toString():\n     *     - If the path is rootless and an authority is present, the path MUST\n     *       be prefixed by \"/\".\n     *     - If the path is starting with more than one \"/\" and no authority is\n     *       present, the starting slashes MUST be reduced to one.\n     * - If a query is present, it MUST be prefixed by \"?\".\n     * - If a fragment is present, it MUST be prefixed by \"#\".\n     *\n     * @see http://tools.ietf.org/html/rfc3986#section-4.1\n     * @return string\n     */\n    public function __toString();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/LICENSE",
    "content": "Copyright (c) 2012 PHP Framework Interoperability Group\n\nPermission is hereby granted, free of charge, to any person obtaining a copy \nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights \nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell \ncopies of the Software, and to permit persons to whom the Software is \nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in \nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/README.md",
    "content": "PSR Log\n=======\n\nThis repository holds all interfaces/classes/traits related to\n[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).\n\nNote that this is not a logger of its own. It is merely an interface that\ndescribes a logger. See the specification for more details.\n\nInstallation\n------------\n\n```bash\ncomposer require psr/log\n```\n\nUsage\n-----\n\nIf you need a logger, you can use the interface like this:\n\n```php\n<?php\n\nuse Psr\\Log\\LoggerInterface;\n\nclass Foo\n{\n    private $logger;\n\n    public function __construct(LoggerInterface $logger = null)\n    {\n        $this->logger = $logger;\n    }\n\n    public function doSomething()\n    {\n        if ($this->logger) {\n            $this->logger->info('Doing work');\n        }\n           \n        try {\n            $this->doSomethingElse();\n        } catch (Exception $exception) {\n            $this->logger->error('Oh no!', array('exception' => $exception));\n        }\n\n        // do something useful\n    }\n}\n```\n\nYou can then pick one of the implementations of the interface to get a logger.\n\nIf you want to implement the interface, you can require this package and\nimplement `Psr\\Log\\LoggerInterface` in your code. Please read the\n[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)\nfor details.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/composer.json",
    "content": "{\n    \"name\": \"psr/log\",\n    \"description\": \"Common interface for logging libraries\",\n    \"keywords\": [\"psr\", \"psr-3\", \"log\"],\n    \"homepage\": \"https://github.com/php-fig/log\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.0.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\Log\\\\\": \"src\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"3.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/AbstractLogger.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * This is a simple Logger implementation that other Loggers can inherit from.\n *\n * It simply delegates all log-level-specific methods to the `log` method to\n * reduce boilerplate code that a simple Logger that does the same thing with\n * messages regardless of the error level has to implement.\n */\nabstract class AbstractLogger implements LoggerInterface\n{\n    use LoggerTrait;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/InvalidArgumentException.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\nclass InvalidArgumentException extends \\InvalidArgumentException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/LogLevel.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Describes log levels.\n */\nclass LogLevel\n{\n    const EMERGENCY = 'emergency';\n    const ALERT     = 'alert';\n    const CRITICAL  = 'critical';\n    const ERROR     = 'error';\n    const WARNING   = 'warning';\n    const NOTICE    = 'notice';\n    const INFO      = 'info';\n    const DEBUG     = 'debug';\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/LoggerAwareInterface.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Describes a logger-aware instance.\n */\ninterface LoggerAwareInterface\n{\n    /**\n     * Sets a logger instance on the object.\n     *\n     * @param LoggerInterface $logger\n     *\n     * @return void\n     */\n    public function setLogger(LoggerInterface $logger): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/LoggerAwareTrait.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Basic Implementation of LoggerAwareInterface.\n */\ntrait LoggerAwareTrait\n{\n    /**\n     * The logger instance.\n     *\n     * @var LoggerInterface|null\n     */\n    protected ?LoggerInterface $logger = null;\n\n    /**\n     * Sets a logger.\n     *\n     * @param LoggerInterface $logger\n     */\n    public function setLogger(LoggerInterface $logger): void\n    {\n        $this->logger = $logger;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/LoggerInterface.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * Describes a logger instance.\n *\n * The message MUST be a string or object implementing __toString().\n *\n * The message MAY contain placeholders in the form: {foo} where foo\n * will be replaced by the context data in key \"foo\".\n *\n * The context array can contain arbitrary data. The only assumption that\n * can be made by implementors is that if an Exception instance is given\n * to produce a stack trace, it MUST be in a key named \"exception\".\n *\n * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md\n * for the full interface specification.\n */\ninterface LoggerInterface\n{\n    /**\n     * System is unusable.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function emergency(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Action must be taken immediately.\n     *\n     * Example: Entire website down, database unavailable, etc. This should\n     * trigger the SMS alerts and wake you up.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function alert(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Critical conditions.\n     *\n     * Example: Application component unavailable, unexpected exception.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function critical(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Runtime errors that do not require immediate action but should typically\n     * be logged and monitored.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function error(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Exceptional occurrences that are not errors.\n     *\n     * Example: Use of deprecated APIs, poor use of an API, undesirable things\n     * that are not necessarily wrong.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function warning(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Normal but significant events.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function notice(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Interesting events.\n     *\n     * Example: User logs in, SQL logs.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function info(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Detailed debug information.\n     *\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     */\n    public function debug(string|\\Stringable $message, array $context = []): void;\n\n    /**\n     * Logs with an arbitrary level.\n     *\n     * @param mixed   $level\n     * @param string|\\Stringable $message\n     * @param mixed[] $context\n     *\n     * @return void\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException\n     */\n    public function log($level, string|\\Stringable $message, array $context = []): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/LoggerTrait.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * This is a simple Logger trait that classes unable to extend AbstractLogger\n * (because they extend another class, etc) can include.\n *\n * It simply delegates all log-level-specific methods to the `log` method to\n * reduce boilerplate code that a simple Logger that does the same thing with\n * messages regardless of the error level has to implement.\n */\ntrait LoggerTrait\n{\n    /**\n     * System is unusable.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function emergency(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::EMERGENCY, $message, $context);\n    }\n\n    /**\n     * Action must be taken immediately.\n     *\n     * Example: Entire website down, database unavailable, etc. This should\n     * trigger the SMS alerts and wake you up.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function alert(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::ALERT, $message, $context);\n    }\n\n    /**\n     * Critical conditions.\n     *\n     * Example: Application component unavailable, unexpected exception.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function critical(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::CRITICAL, $message, $context);\n    }\n\n    /**\n     * Runtime errors that do not require immediate action but should typically\n     * be logged and monitored.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function error(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::ERROR, $message, $context);\n    }\n\n    /**\n     * Exceptional occurrences that are not errors.\n     *\n     * Example: Use of deprecated APIs, poor use of an API, undesirable things\n     * that are not necessarily wrong.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function warning(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::WARNING, $message, $context);\n    }\n\n    /**\n     * Normal but significant events.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function notice(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::NOTICE, $message, $context);\n    }\n\n    /**\n     * Interesting events.\n     *\n     * Example: User logs in, SQL logs.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function info(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::INFO, $message, $context);\n    }\n\n    /**\n     * Detailed debug information.\n     *\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     */\n    public function debug(string|\\Stringable $message, array $context = []): void\n    {\n        $this->log(LogLevel::DEBUG, $message, $context);\n    }\n\n    /**\n     * Logs with an arbitrary level.\n     *\n     * @param mixed  $level\n     * @param string|\\Stringable $message\n     * @param array  $context\n     *\n     * @return void\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException\n     */\n    abstract public function log($level, string|\\Stringable $message, array $context = []): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/log/src/NullLogger.php",
    "content": "<?php\n\nnamespace Psr\\Log;\n\n/**\n * This Logger can be used to avoid conditional log calls.\n *\n * Logging should always be optional, and if no logger is provided to your\n * library creating a NullLogger instance to have something to throw logs at\n * is a good way to avoid littering your code with `if ($this->logger) { }`\n * blocks.\n */\nclass NullLogger extends AbstractLogger\n{\n    /**\n     * Logs with an arbitrary level.\n     *\n     * @param mixed  $level\n     * @param string|\\Stringable $message\n     * @param array $context\n     *\n     * @return void\n     *\n     * @throws \\Psr\\Log\\InvalidArgumentException\n     */\n    public function log($level, string|\\Stringable $message, array $context = []): void\n    {\n        // noop\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/.editorconfig",
    "content": "; This file is for unifying the coding style for different editors and IDEs.\n; More information at http://editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nindent_size = 4\nindent_style = space\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/LICENSE.md",
    "content": "# The MIT License (MIT)\n\nCopyright (c) 2016 PHP Framework Interoperability Group\n\n> Permission is hereby granted, free of charge, to any person obtaining a copy\n> of this software and associated documentation files (the \"Software\"), to deal\n> in the Software without restriction, including without limitation the rights\n> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n> copies of the Software, and to permit persons to whom the Software is\n> furnished to do so, subject to the following conditions:\n>\n> The above copyright notice and this permission notice shall be included in\n> all copies or substantial portions of the Software.\n>\n> THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n> THE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/README.md",
    "content": "PHP FIG Simple Cache PSR\n========================\n\nThis repository holds all interfaces related to PSR-16.\n\nNote that this is not a cache implementation of its own. It is merely an interface that describes a cache implementation. See [the specification](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-16-simple-cache.md) for more details.\n\nYou can find implementations of the specification by looking for packages providing the [psr/simple-cache-implementation](https://packagist.org/providers/psr/simple-cache-implementation) virtual package.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/composer.json",
    "content": "{\n    \"name\": \"psr/simple-cache\",\n    \"description\": \"Common interfaces for simple caching\",\n    \"keywords\": [\"psr\", \"psr-16\", \"cache\", \"simple-cache\", \"caching\"],\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"PHP-FIG\",\n            \"homepage\": \"https://www.php-fig.org/\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.0.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Psr\\\\SimpleCache\\\\\": \"src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"2.0.x-dev\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/src/CacheException.php",
    "content": "<?php\n\nnamespace Psr\\SimpleCache;\n\n/**\n * Interface used for all types of exceptions thrown by the implementing library.\n */\ninterface CacheException extends \\Throwable\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/src/CacheInterface.php",
    "content": "<?php\n\nnamespace Psr\\SimpleCache;\n\ninterface CacheInterface\n{\n    /**\n     * Fetches a value from the cache.\n     *\n     * @param string $key     The unique key of this item in the cache.\n     * @param mixed  $default Default value to return if the key does not exist.\n     *\n     * @return mixed The value of the item from the cache, or $default in case of cache miss.\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if the $key string is not a legal value.\n     */\n    public function get(string $key, mixed $default = null);\n\n    /**\n     * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time.\n     *\n     * @param string                 $key   The key of the item to store.\n     * @param mixed                  $value The value of the item to store, must be serializable.\n     * @param null|int|\\DateInterval $ttl   Optional. The TTL value of this item. If no value is sent and\n     *                                      the driver supports TTL then the library may set a default value\n     *                                      for it or let the driver take care of that.\n     *\n     * @return bool True on success and false on failure.\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if the $key string is not a legal value.\n     */\n    public function set(string $key, mixed $value, null|int|\\DateInterval $ttl = null);\n\n    /**\n     * Delete an item from the cache by its unique key.\n     *\n     * @param string $key The unique cache key of the item to delete.\n     *\n     * @return bool True if the item was successfully removed. False if there was an error.\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if the $key string is not a legal value.\n     */\n    public function delete(string $key);\n\n    /**\n     * Wipes clean the entire cache's keys.\n     *\n     * @return bool True on success and false on failure.\n     */\n    public function clear();\n\n    /**\n     * Obtains multiple cache items by their unique keys.\n     *\n     * @param iterable<string> $keys    A list of keys that can be obtained in a single operation.\n     * @param mixed            $default Default value to return for keys that do not exist.\n     *\n     * @return iterable<string, mixed> A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value.\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if $keys is neither an array nor a Traversable,\n     *   or if any of the $keys are not a legal value.\n     */\n    public function getMultiple(iterable $keys, mixed $default = null);\n\n    /**\n     * Persists a set of key => value pairs in the cache, with an optional TTL.\n     *\n     * @param iterable               $values A list of key => value pairs for a multiple-set operation.\n     * @param null|int|\\DateInterval $ttl    Optional. The TTL value of this item. If no value is sent and\n     *                                       the driver supports TTL then the library may set a default value\n     *                                       for it or let the driver take care of that.\n     *\n     * @return bool True on success and false on failure.\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if $values is neither an array nor a Traversable,\n     *   or if any of the $values are not a legal value.\n     */\n    public function setMultiple(iterable $values, null|int|\\DateInterval $ttl = null);\n\n    /**\n     * Deletes multiple cache items in a single operation.\n     *\n     * @param iterable<string> $keys A list of string-based keys to be deleted.\n     *\n     * @return bool True if the items were successfully removed. False if there was an error.\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if $keys is neither an array nor a Traversable,\n     *   or if any of the $keys are not a legal value.\n     */\n    public function deleteMultiple(iterable $keys);\n\n    /**\n     * Determines whether an item is present in the cache.\n     *\n     * NOTE: It is recommended that has() is only to be used for cache warming type purposes\n     * and not to be used within your live applications operations for get/set, as this method\n     * is subject to a race condition where your has() will return true and immediately after,\n     * another script can remove it making the state of your app out of date.\n     *\n     * @param string $key The cache item key.\n     *\n     * @return bool\n     *\n     * @throws \\Psr\\SimpleCache\\InvalidArgumentException\n     *   MUST be thrown if the $key string is not a legal value.\n     */\n    public function has(string $key);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/psr/simple-cache/src/InvalidArgumentException.php",
    "content": "<?php\n\nnamespace Psr\\SimpleCache;\n\n/**\n * Exception interface for invalid cache arguments.\n *\n * When an invalid argument is passed it must throw an exception which implements\n * this interface\n */\ninterface InvalidArgumentException extends CacheException\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ralouphie/getallheaders/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014 Ralph Khattar\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ralouphie/getallheaders/README.md",
    "content": "getallheaders\n=============\n\nPHP `getallheaders()` polyfill. Compatible with PHP >= 5.3.\n\n[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders)\n[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders)\n[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders)\n[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders)\n\n\nThis is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php).\n\n## Install\n\nFor PHP version **`>= 5.6`**:\n\n```\ncomposer require ralouphie/getallheaders\n```\n\nFor PHP version **`< 5.6`**:\n\n```\ncomposer require ralouphie/getallheaders \"^2\"\n```\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ralouphie/getallheaders/composer.json",
    "content": "{\n\t\"name\": \"ralouphie/getallheaders\",\n\t\"description\": \"A polyfill for getallheaders.\",\n\t\"license\": \"MIT\",\n\t\"authors\": [\n\t\t{\n\t\t\t\"name\": \"Ralph Khattar\",\n\t\t\t\"email\": \"ralph.khattar@gmail.com\"\n\t\t}\n\t],\n\t\"require\": {\n\t\t\"php\": \">=5.6\"\n\t},\n\t\"require-dev\": {\n\t\t\"phpunit/phpunit\": \"^5 || ^6.5\",\n\t\t\"php-coveralls/php-coveralls\": \"^2.1\"\n\t},\n\t\"autoload\": {\n\t\t\"files\": [\"src/getallheaders.php\"]\n\t},\n\t\"autoload-dev\": {\n\t\t\"psr-4\": {\n\t\t\t\"getallheaders\\\\Tests\\\\\": \"tests/\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/ralouphie/getallheaders/src/getallheaders.php",
    "content": "<?php\n\nif (!function_exists('getallheaders')) {\n\n    /**\n     * Get all HTTP header key/values as an associative array for the current request.\n     *\n     * @return string[string] The HTTP header key/value pairs.\n     */\n    function getallheaders()\n    {\n        $headers = array();\n\n        $copy_server = array(\n            'CONTENT_TYPE'   => 'Content-Type',\n            'CONTENT_LENGTH' => 'Content-Length',\n            'CONTENT_MD5'    => 'Content-Md5',\n        );\n\n        foreach ($_SERVER as $key => $value) {\n            if (substr($key, 0, 5) === 'HTTP_') {\n                $key = substr($key, 5);\n                if (!isset($copy_server[$key]) || !isset($_SERVER[$key])) {\n                    $key = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', $key))));\n                    $headers[$key] = $value;\n                }\n            } elseif (isset($copy_server[$key])) {\n                $headers[$copy_server[$key]] = $value;\n            }\n        }\n\n        if (!isset($headers['Authorization'])) {\n            if (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {\n                $headers['Authorization'] = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];\n            } elseif (isset($_SERVER['PHP_AUTH_USER'])) {\n                $basic_pass = isset($_SERVER['PHP_AUTH_PW']) ? $_SERVER['PHP_AUTH_PW'] : '';\n                $headers['Authorization'] = 'Basic ' . base64_encode($_SERVER['PHP_AUTH_USER'] . ':' . $basic_pass);\n            } elseif (isset($_SERVER['PHP_AUTH_DIGEST'])) {\n                $headers['Authorization'] = $_SERVER['PHP_AUTH_DIGEST'];\n            }\n        }\n\n        return $headers;\n    }\n\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [RobThree]\ncustom: [\"https://paypal.me/robiii\"]\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/.github/workflows/test.yml",
    "content": "name: Test\n\non:\n  push:\n  pull_request:\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        php-version: ['5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0']\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - uses: shivammathur/setup-php@v2\n      with:\n        php-version: ${{ matrix.php-version }}\n        tools: composer\n        coverage: xdebug\n\n    - uses: ramsey/composer-install@v1\n\n    - run: composer lint\n    - run: composer test\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/.gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbuild/\nbld/\n[Bb]in/\n[Oo]bj/\n\n# Roslyn cache directories\n*.ide/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n#NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding addin-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# If using the old MSBuild-Integrated Package Restore, uncomment this:\n#!**/packages/repositories.config\n\n# Windows Azure Build Output\ncsx/\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# Composer\n/vendor\ncomposer.lock\n\n# .vs\n.vs/\n\n.phpunit.result.cache\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2014-2015 Rob Janssen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/README.md",
    "content": "# ![Logo](https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/logo.png) PHP library for Two Factor Authentication\n\n[![Build status](https://img.shields.io/github/workflow/status/RobThree/TwoFactorAuth/Test/master?style=flat-square)](https://github.com/RobThree/TwoFactorAuth/actions?query=branch%3Amaster) [![Latest Stable Version](https://img.shields.io/packagist/v/robthree/twofactorauth.svg?style=flat-square)](https://packagist.org/packages/robthree/twofactorauth) [![License](https://img.shields.io/packagist/l/robthree/twofactorauth.svg?style=flat-square)](LICENSE) [![Downloads](https://img.shields.io/packagist/dt/robthree/twofactorauth.svg?style=flat-square)](https://packagist.org/packages/robthree/twofactorauth) [![Code Climate](https://img.shields.io/codeclimate/github/RobThree/TwoFactorAuth.svg?style=flat-square)](https://codeclimate.com/github/RobThree/TwoFactorAuth) [![PayPal donate button](http://img.shields.io/badge/paypal-donate-orange.svg?style=flat-square)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6MB5M2SQLP636 \"Keep me off the streets\")\n\nPHP library for [two-factor (or multi-factor) authentication](http://en.wikipedia.org/wiki/Multi-factor_authentication) using [TOTP](http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm) and [QR-codes](http://en.wikipedia.org/wiki/QR_code). Inspired by, based on but most importantly an *improvement* on '[PHPGangsta/GoogleAuthenticator](https://github.com/PHPGangsta/GoogleAuthenticator)'. There's a [.Net implementation](https://github.com/RobThree/TwoFactorAuth.Net) of this library as well.\n\n<p align=\"center\">\n<img src=\"https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/multifactorauthforeveryone.png\">\n</p>\n\n## Requirements\n\n* Tested on PHP 5.6 up to 8.0\n* [cURL](http://php.net/manual/en/book.curl.php) when using the provided `QRServerProvider` (default), `ImageChartsQRCodeProvider` or `QRicketProvider` but you can also provide your own QR-code provider.\n* [random_bytes()](http://php.net/manual/en/function.random-bytes.php), [MCrypt](http://php.net/manual/en/book.mcrypt.php), [OpenSSL](http://php.net/manual/en/book.openssl.php) or [Hash](http://php.net/manual/en/book.hash.php) depending on which built-in RNG you use (TwoFactorAuth will try to 'autodetect' and use the best available); however: feel free to provide your own (CS)RNG.\n\nOptionally, you may need:\n\n* [sockets](https://www.php.net/manual/en/book.sockets.php) if you are using `NTPTimeProvider`\n* [endroid/qr-code](https://github.com/endroid/qr-code) if using `EndroidQrCodeProvider` or `EndroidQrCodeWithLogoProvider`.\n* [bacon/bacon-qr-code](https://github.com/Bacon/BaconQrCode) if using `BaconQrCodeProvider`.\n\n## Installation\n\nThe best way of installing this library is with composer:\n\n`php composer.phar require robthree/twofactorauth`\n\n## Usage\n\nFor a quick start, have a look at the [getting started](https://robthree.github.io/TwoFactorAuth/getting-started.html) page or try out the [demo](demo/demo.php).\n\nIf you need more in-depth information about the configuration available then you can read through the rest of [documentation](https://robthree.github.io/TwoFactorAuth).\n\n## Integrations\n\n- [CakePHP 3](https://github.com/andrej-griniuk/cakephp-two-factor-auth)\n\n## License\n\nLicensed under MIT license. See [LICENSE](https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/LICENSE) for details.\n\n[Logo / icon](http://www.iconmay.com/Simple/Travel_and_Tourism_Part_2/luggage_lock_safety_baggage_keys_cylinder_lock_hotel_travel_tourism_luggage_lock_icon_465) under  CC0 1.0 Universal (CC0 1.0) Public Domain Dedication  ([Archived page](http://riii.nl/tm7ap))\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.phpproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Name>TwoFactorAuth</Name>\n    <ProjectGuid>{e569f53a-a604-4579-91ce-4e35b27da47b}</ProjectGuid>\n    <RootNamespace>TwoFactorAuth</RootNamespace>\n    <OutputType>Library</OutputType>\n    <ProjectTypeGuids>{A0786B88-2ADB-4C21-ABE8-AA2D79766269}</ProjectTypeGuids>\n    <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>\n    <Server>PHPDev</Server>\n    <PublishEvent>None</PublishEvent>\n    <PHPDevAutoPort>True</PHPDevAutoPort>\n    <PHPDevPort>41315</PHPDevPort>\n    <PHPDevHostName>localhost</PHPDevHostName>\n    <IISProjectUrl>http://localhost:41315/</IISProjectUrl>\n    <Runtime>PHP</Runtime>\n    <RuntimeVersion>7.0</RuntimeVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Debug' \">\n    <IncludeDebugInformation>true</IncludeDebugInformation>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)' == 'Release' \">\n    <IncludeDebugInformation>false</IncludeDebugInformation>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"demo\\demo.php\" />\n    <Compile Include=\"demo\\loader.php\" />\n    <Compile Include=\"lib\\Providers\\Qr\\BaseHTTPQRCodeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Qr\\ImageChartsQRCodeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Qr\\IQRCodeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Qr\\QRException.php\" />\n    <Compile Include=\"lib\\Providers\\Qr\\QRicketProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Qr\\QRServerProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Rng\\CSRNGProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Rng\\IRNGProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Rng\\MCryptRNGProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Rng\\OpenSSLRNGProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Rng\\HashRNGProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Rng\\RNGException.php\" />\n    <Compile Include=\"lib\\Providers\\Time\\HttpTimeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Time\\ITimeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Time\\LocalMachineTimeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Time\\NTPTimeProvider.php\" />\n    <Compile Include=\"lib\\Providers\\Time\\TimeException.php\" />\n    <Compile Include=\"lib\\TwoFactorAuth.php\" />\n    <Compile Include=\".gitignore\" />\n    <Compile Include=\"README.md\" />\n    <Compile Include=\"lib\\TwoFactorAuthException.php\" />\n    <Compile Include=\"tests\\TwoFactorAuthTest.php\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Folder Include=\"lib\\\" />\n    <Folder Include=\"lib\\Providers\\\" />\n    <Folder Include=\"lib\\Providers\\Time\\\" />\n    <Folder Include=\"lib\\Providers\\Qr\\\" />\n    <Folder Include=\"lib\\Providers\\Rng\\\" />\n    <Folder Include=\"demo\\\" />\n    <Folder Include=\"tests\\\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\".travis.yml\" />\n    <Content Include=\"composer.json\" />\n    <Content Include=\"composer.lock\" />\n    <Content Include=\"logo.png\" />\n    <Content Include=\"multifactorauthforeveryone.png\" />\n    <Content Include=\"LICENSE\" />\n    <Content Include=\"phpunit.xml\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/TwoFactorAuth.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30723.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{A0786B88-2ADB-4C21-ABE8-AA2D79766269}\") = \"TwoFactorAuth\", \"TwoFactorAuth.phpproj\", \"{E569F53A-A604-4579-91CE-4E35B27DA47B}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{E569F53A-A604-4579-91CE-4E35B27DA47B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{E569F53A-A604-4579-91CE-4E35B27DA47B}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{E569F53A-A604-4579-91CE-4E35B27DA47B}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{E569F53A-A604-4579-91CE-4E35B27DA47B}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/composer.json",
    "content": "{\n    \"name\": \"robthree/twofactorauth\",\n    \"description\": \"Two Factor Authentication\",\n    \"version\": \"1.8.1\",\n    \"type\": \"library\",\n    \"keywords\": [ \"Authentication\", \"Two Factor Authentication\", \"Multi Factor Authentication\", \"TFA\", \"MFA\", \"PHP\", \"Authenticator\", \"Authy\" ],\n    \"homepage\": \"https://github.com/RobThree/TwoFactorAuth\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Rob Janssen\",\n            \"homepage\": \"http://robiii.me\",\n            \"role\": \"Developer\"\n        }\n    ],\n    \"support\": {\n        \"issues\": \"https://github.com/RobThree/TwoFactorAuth/issues\",\n        \"source\": \"https://github.com/RobThree/TwoFactorAuth\"\n    },\n    \"require\": {\n        \"php\": \">=5.6.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"@stable\",\n        \"php-parallel-lint/php-parallel-lint\": \"^1.2\"\n    },\n    \"suggest\": {\n        \"bacon/bacon-qr-code\": \"Needed for BaconQrCodeProvider provider\",\n        \"endroid/qr-code\": \"Needed for EndroidQrCodeProvider\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"RobThree\\\\Auth\\\\\": \"lib\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"scripts\": {\n        \"lint\": [\n            \"parallel-lint --exclude vendor .\"\n        ],\n        \"test\": [\n            \"XDEBUG_MODE=coverage phpunit\"\n        ]\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/demo/demo.php",
    "content": "<!doctype html>\n<html>\n<head>\n    <title>Demo</title>\n</head>\n<body>\n    <ol>\n        <?php\n            // in practice you would require the composer loader if it was not already part of your framework or project\n            spl_autoload_register(function ($className) {\n                include_once str_replace(array('RobThree\\\\Auth', '\\\\'), array(__DIR__.'/../lib', '/'), $className) . '.php';\n            });\n\n            // substitute your company or app name here\n            $tfa = new RobThree\\Auth\\TwoFactorAuth('RobThree TwoFactorAuth');\n        ?>\n        <li>First create a secret and associate it with a user</li>\n        <?php\n            $secret = $tfa->createSecret();\n        ?>\n        <li>\n            Next create a QR code and let the user scan it:<br>\n            <img src=\"<?php echo $tfa->getQRCodeImageAsDataUri('Demo', $secret); ?>\"><br>\n            ...or display the secret to the user for manual entry:\n            <?php echo chunk_split($secret, 4, ' '); ?>\n        </li>\n        <?php\n            $code = $tfa->getCode($secret);\n        ?>\n        <li>Next, have the user verify the code; at this time the code displayed by a 2FA-app would be: <span style=\"color:#00c\"><?php echo $code; ?></span> (but that changes periodically)</li>\n        <li>When the code checks out, 2FA can be / is enabled; store (encrypted?) secret with user and have the user verify a code each time a new session is started.</li>\n        <li>\n            When aforementioned code (<?php echo $code; ?>) was entered, the result would be:\n            <?php if ($tfa->verifyCode($secret, $code) === true) { ?>\n                <span style=\"color:#0c0\">OK</span>\n            <?php } else { ?>\n                <span style=\"color:#c00\">FAIL</span>\n            <?php } ?>\n        </li>\n    </ol>\n    <p>Note: Make sure your server-time is <a href=\"http://en.wikipedia.org/wiki/Network_Time_Protocol\">NTP-synced</a>! Depending on the $discrepancy allowed your time cannot drift too much from the users' time!</p>\n    <?php\n        try {\n            $tfa->ensureCorrectTime();\n            echo 'Your hosts time seems to be correct / within margin';\n        } catch (RobThree\\Auth\\TwoFactorAuthException $ex) {\n            echo '<b>Warning:</b> Your hosts time seems to be off: ' . $ex->getMessage();\n        }\n    ?>\n</body>\n</html>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/_config.yml",
    "content": "theme: jekyll-theme-minimal\n\nlogo: https://raw.githubusercontent.com/RobThree/TwoFactorAuth/master/multifactorauthforeveryone.png\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/_layouts/post.html",
    "content": "---\nlayout: default\n---\n\n<a href=\"{{ site.baseurl }}\">← contents</a>\n\n<h1>{{ page.title }}</h1>\n\n{{ content }}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/assets/css/style.scss",
    "content": "---\n---\n\n@import \"{{ site.theme }}\";\n\n// undo some of the theme to allow code samples to be wider\nheader {\n\tpadding-right: 0;\n}\n@media print, screen and (min-width: 961px) {\n\theader {\n\t\tborder: 1px solid #e5e5e5;\n\t\tborder-radius: 5px;\n\t\tmargin-bottom: 30px;\n\t\tmargin-right: 30px;\n\t\tpadding-top: 20px;\n\t\tposition: static;\n\t\ttext-align: center;\n\t}\n\tsection {\n\t\tfloat: none;\n\t\twidth: auto;\n\t}\n\tfooter {\n\t\tfloat: none;\n\t\tposition: static;\n\t}\n}\n\n// ensure code samples can be really wide\n.language-php.highlighter-rouge {\n\tclear: both;\n}\n\n// add missing consistency\nheader img {\n\tmargin-bottom: 20px;\n}\n\n// quick navigation hack needs some spacing\nsection > a:first-child {\n\tdisplay: block;\n\tmargin-bottom:45px;\n}\n\n// 100% width is treated like clear which makes it look bad\ntable {\n\twidth: auto;\n}\n\n// reset document block whatever so the bullets aren't disturbed by the float\nul {\n\toverflow: hidden;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/getting-started.md",
    "content": "---\nlayout: post\ntitle: Getting Started\n---\n\n## 1. Installation\n\nThe best way of making use of this project is by installing it with [composer](https://getcomposer.org/doc/01-basic-usage.md).\n\n```\nphp composer.phar require robthree/twofactorauth\n```\n\nor if you have composer installed globally\n\n```\ncomposer require robthree/twofactorauth\n```\n\n## 2. Create an instance\n\nNow you can create an instance for use with your code\n\n```php\nuse RobThree\\Auth\\TwoFactorAuth;\n\n$tfa = new TwoFactorAuth();\n```\n\n**Note:** if you are not using a framework that uses composer, you should [include the composer loader yourself](https://getcomposer.org/doc/01-basic-usage.md#autoloading)\n\n## 3. Shared secrets\n\nWhen your user is setting up two-factor, or multi-factor, authentication in your project, you can create a secret from the instance.\n\n```php\n$secret = $tfa->createSecret();\n```\n\nOnce you have a secret, it can be communicated to the user however you wish.\n\n```php\n<p>Please enter the following code in your app: '<?php echo $secret; ?>'</p>\n```\n\n**Note:** until you have verified the user is able to use the secret properly, you should store the secret as part of the current session and not save the secret against your user record.\n\n## 4. Verifying\n\nHaving provided the user with the secret, the best practice is to verify their authenticator app can create the appropriate code.\n\n```php\n$result = $tfa->verifyCode($secret, $_POST['verification']);\n```\n\nIf `$result` is `true` then your user has been able to successfully record the `$secret` in their authenticator app and it has generated an appropriate code.\n\nYou can now save the `$secret` to your user record and use the same `verifyCode` method each time they log in.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/improved-code-verification.md",
    "content": "---\nlayout: post\ntitle: Improved Code Verification\n---\n\nWhen verifying codes that a user has entered, there are other optional arguments which can improve verification of the code.\n\n```php\n$result = $tfa->verifyCode($secret, $_POST['verification'], $discrepancy, $time, &$timeslice);\n```\n\n## Discrepancy (default 1)\n\nAs the codes that are generated and accepted are consistent within a certain time window (i.e. a timeslice, 30 seconds long by default), it is very important that the server (and the users authenticator app) have the correct time (and date).\n\nThe value of `$discrepancy` is the number of timeslices checked in **both** directions of the current one. So when the current time is `14:34:21`, the 'current timeslice' is `14:34:00` to `14:34:30`. If the default is left unchanged, we also verify the code against the timeslice of `14:33:30` to `14:34:00` and for `14:34:30` to `14:35:00`.\n\nThis should be sufficient for most cases however you can increase it if you wish. It would be unwise for this to be too high as it could allow a code to be valid for long enough that it could be used fraudulently.\n\n## Time (default null)\n\nThe second, `$time`, allows you to check a code for a specific point in time. This argument has no real practical use but can be handy for unit testing. The default value, `null`, means: use the current time.\n\n## Timeslice\n\n`$timeslice` returns a value by reference. The value returned is the timeslice that matched the code (if any) or `0`.\n\nYou can store a timeslice alongside the secret and verify that any new timeslice is greater than the existing one.\n\ni.e. if `verifyCode` returns true _and_ the returned timeslice is greater than the last used timeslice for this user/secret then this is the first time the code has been used and you should now store the higher timeslice to verify that the user.\n\nThis is an effective defense against a [replay attack](https://en.wikipedia.org/wiki/Replay_attack).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/index.md",
    "content": "---\ntitle: Contents\n---\n\n## [The Basics - Getting Started](getting-started.html)\n\n## Advanced Usage\n\n[QR Codes](qr-codes.html)\n- [QRServerProvider](qr-codes/qr-server.html)\n- [ImageChartsQRCodeProvider](qr-codes/image-charts.html)\n- [QRicketProvider](qr-codes/qrickit.html)\n- [EndroidQrCodeProvider](qr-codes/endroid.html) (and EndroidQrCodeWithLogoProvider)\n- [BaconQRCodeProvider](qr-codes/bacon.html)\n\n[Improved Code Verification](improved-code-verification.html)\n\n[Other Optional Configuration](optional-configuration.html)\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/optional-configuration.md",
    "content": "---\nlayout: post\ntitle: Optional Configuration\n---\n\n## Instance Configuration\n\nThe instance (`new TwoFactorAuth()`) can only be configured by the constructor with the following optional arguments\n\nArgument          | Default value | Use\n------------------|---------------|-----\n`$issuer`         | `null`        | Will be displayed in the users app as the default issuer name when using QR code to import the secret\n`$digits`         | `6`           | The number of digits the resulting codes will be\n`$period`         | `30`          | The number of seconds a code will be valid\n`$algorithm`      | `'sha1'`      | The algorithm used (one of `sha1`, `sha256`, `sha512`, `md5`)\n`$qrcodeprovider` | `null`        | QR-code provider\n`$rngprovider`    | `null`        | Random Number Generator provider\n`$timeprovider`   | `null`        | Time provider\n\n**Note:** the default values for `$digits`, `$period`, and `$algorithm` provide the widest variety of support amongst common authenticator apps such as Google Authenticator. If you choose to use different values for these arguments you will likely have to instruct your users to use a specific app which supports your chosen configuration.\n\n### RNG providers\n\nThis library also comes with some [Random Number Generator (RNG)](https://en.wikipedia.org/wiki/Random_number_generation) providers. The RNG provider generates a number of random bytes and returns these bytes as a string. These values are then used to create the secret. By default (no RNG provider specified) TwoFactorAuth will try to determine the best available RNG provider to use in this order.\n\n1. [CSRNGProvider](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Rng/CSRNGProvider.php) for PHP7+\n2. [MCryptRNGProvider](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Rng/MCryptRNGProvider.php) where mcrypt is available\n3. [OpenSSLRNGProvider](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Rng/OpenSSLRNGProvider.php) where openssl is available\n4. [HashRNGProvider](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Rng/HashRNGProvider.php) **non-cryptographically secure** fallback\n\nEach of these RNG providers have some constructor arguments that allow you to tweak some of the settings to use when creating the random bytes.\n\nYou can also implement your own by implementing the [`IRNGProvider` interface](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Rng/IRNGProvider.php).\n\n### Time providers\n\nThese allow the TwoFactorAuth library to ensure the servers time is correct (or at least within a margin).\n\nYou can use the `ensureCorrectTime()` method to ensure the hosts time is correct. By default this method will compare the hosts time (returned by calling `time()` on the `LocalMachineTimeProvider`) to the default `NTPTimeProvider` and `HttpTimeProvider`.\n\n**Note:** the `NTPTimeProvider` requires your PHP to have the ability to create sockets. If you do not have that ability and wish to use this function, you should pass an array with only an instance of `HttpTimeProvider`.\n\nAlternatively, you can pass an array of classes that implement the [`ITimeProvider` interface](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Time/ITimeProvider.php) to change this and specify the second argument, leniency in seconds (default: 5). An exception will be thrown if the time difference is greater than the leniency.\n\nOrdinarily, you should not need to monitor that the time on the server is correct in this way however if you choose to, we advise to call this method sparingly when relying on 3rd parties (which both the `HttpTimeProvider` and `NTPTimeProvider` do) or, if you need to ensure time is correct on a (very) regular basis to implement an `ITimeProvider` that is more efficient than the built-in ones (making use of a GPS signal for example).\n\n## Secret Configuration\n\nSecrets can be optionally configured with the following optional arguments\n\nArgument               | Default value | Use\n-----------------------|---------------|-----\n`$bits`                | `80`          | The number of bits (related to the length of the secret)\n`$requirecryptosecure` | `true`        | Whether you want to require a cryptographically secure source of random numbers\n\n**Note:** as above, these values provide the widest variety of support amongst common authenticator apps however you may choose to increase the value of `$bits` (160 or higher is recommended, see [RFC 4226 - Algorithm Requirements](https://tools.ietf.org/html/rfc4226#section-4)) as long as it is set to a multiple of 8.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/qr-codes/bacon.md",
    "content": "---\nlayout: post\ntitle: bacon/bacon-qr-code\n---\n\n## Installation\n\nIn order to use this provider, you will need to install the library at version 2 (or later) and its dependencies\n\n```\ncomposer require bacon/bacon-qr-code ^2.0\n```\n\nYou will also need the PHP imagick extension **if** you aren't using the SVG format.\n\n## Optional Configuration\n\nArgument            | Default value\n--------------------|---------------\n`$borderWidth`      | `4`\n`$backgroundColour` | `'#ffffff'`\n`$foregroundColour` | `'#000000'`\n`$format`           | `'png'`\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/qr-codes/endroid.md",
    "content": "---\nlayout: post\ntitle: endroid/qr-code\n---\n\n## Installation\n\nIn order to use this provider, you will need to install the library at version 3 and its dependencies\n\n```\ncomposer require endroid/qr-code ^3.0\n```\n\nYou will also need the PHP gd extension installing.\n\n## Optional Configuration\n\nArgument                | Default value\n------------------------|---------------\n`$bgcolor`              | `'ffffff'`\n`$color`                | `'000000'`\n`$margin`               | `0`\n`$errorcorrectionlevel` | `'H'`\n\n## Logo\n\nIf you make use of `EndroidQrCodeWithLogoProvider` then you have access to the `setLogo` function on the provider so you may add a logo to the centre of your QR code.\n\n```php\nuse RobThree\\Auth\\TwoFactorAuth\\Providers\\Qr\\EndroidQrCodeWithLogoProvider;\n\n$qrCodeProvider = new EndroidQrCodeWithLogoProvider();\n\n$qrCodeProvider->setLogo('/path/to/your/image');\n```\n\nYou can see how to also set the size of the logo in the [source code](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Qr/EndroidQrCodeWithLogoProvider.php).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/qr-codes/image-charts.md",
    "content": "---\nlayout: post\ntitle: Image-Charts\n---\n\n## Optional Configuration\n\nArgument                | Default value\n------------------------|---------------\n`$verifyssl`            | `false`\n`$errorcorrectionlevel` | `'L'`\n`$margin`               | `4`\n\n`$verifyssl` is used internally to help guarantee the security of the connection. It is possible that where you are running the code from will have problems verifying an SSL connection so if you know this is not the case, you can supply `true`.\n\nThe other parameters are passed to [Image-Charts](https://documentation.image-charts.com/qr-codes/) so you can refer to them for more detail on how the values are used.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/qr-codes/qr-server.md",
    "content": "---\nlayout: post\ntitle: QR Server\n---\n\n## Optional Configuration\n\nArgument                | Default value\n------------------------|---------------\n`$verifyssl`            | `false`\n`$errorcorrectionlevel` | `'L'`\n`$margin`               | `4`\n`$qzone`                | `1`\n`$bgcolor`              | `'ffffff'`\n`$color`                | `'000000'`\n`$format`               | `'png'`\n\n`$verifyssl` is used internally to help guarantee the security of the connection. It is possible that where you are running the code from will have problems verifying an SSL connection so if you know this is not the case, you can supply `true`.\n\nThe other parameters are passed to [goqr.me](http://goqr.me/api/doc/create-qr-code/) so you can refer to them for more detail on how the values are used.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/qr-codes/qrickit.md",
    "content": "---\nlayout: post\ntitle: QRickit\n---\n\n## Optional Configuration\n\nArgument                | Default value\n------------------------|---------------\n`$errorcorrectionlevel` | `'L'`\n`$bgcolor`              | `'ffffff'`\n`$color`                | `'000000'`\n`$format`               | `'png'`\n\nThe parameters are passed to [QRickit](http://qrickit.com/qrickit_apps/qrickit_api.php) so you can refer to them for more detail on how the values are used.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/docs/qr-codes.md",
    "content": "---\nlayout: post\ntitle: QR Codes\n---\n\nAn alternative way of communicating the secret to the user is through the use of [QR Codes](http://en.wikipedia.org/wiki/QR_code) which most if not all authenticator mobile apps can scan.\n\nThis can avoid accidental typing errors and also pre-set some text values within the users app.\n\nYou can display the QR Code as a base64 encoded image using the instance as follows, supplying the users name or other public identifier as the first argument\n\n````php\n<p>Scan the following image with your app:</p>\n<img src=\"<?php echo $tfa->getQRCodeImageAsDataUri('Bob Ross', $secret); ?>\">\n````\n\nYou can also specify a size as a third argument which is 200 by default.\n\n**Note:** by default, the QR code returned by the instance is generated from a third party across the internet. If the third party is encountering problems or is not available from where you have hosted your code, your user will likely experience a delay in seeing the QR code, if it even loads at all. This can be overcome with offline providers configured when you create the instance.\n\n## Online Providers\n\n[QRServerProvider](qr-codes/qr-server.html) (default)\n\n[ImageChartsQRCodeProvider](qr-codes/image-charts.html)\n\n[QRicketProvider](qr-codes/qrickit.html)\n\n## Offline Providers\n\n[EndroidQrCodeProvider](qr-codes/endroid.html) and EndroidQrCodeWithLogoProvider\n\n[BaconQRCodeProvider](qr-codes/bacon.html)\n\n**Note:** offline providers may have additional PHP requirements in order to function, you should study what is required before trying to make use of them.\n\n## Custom Provider\n\nIf you wish to make your own QR Code provider to reference another service or library, it must implement the [IQRCodeProvider interface](https://github.com/RobThree/TwoFactorAuth/blob/master/lib/Providers/Qr/IQRCodeProvider.php).\n\nIt is recommended to use similar constructor arguments as the included providers to avoid big shifts when trying different providers.\n\n## Using a specific provider\n\nIf you do not want to use the default QR code provider, you can specify the one you want to use when you create your instance.\n\n```php\nuse RobThree\\Auth\\TwoFactorAuth;\n\n$qrCodeProvider = new YourChosenProvider();\n\n$tfa = new TwoFactorAuth(\n\tnull,\n\t6,\n\t30,\n\t'sha1',\n\t$qrCodeProvider\n);\n```\n\nAs you create a new instance of your provider, you can supply any extra configuration there.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/BaconQrCodeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\nuse BaconQrCode\\Writer;\nuse BaconQrCode\\Renderer\\ImageRenderer;\nuse BaconQrCode\\Renderer\\RendererStyle\\RendererStyle;\nuse BaconQrCode\\Renderer\\RendererStyle\\Fill;\nuse BaconQrCode\\Renderer\\Color\\Rgb;\nuse BaconQrCode\\Renderer\\RendererStyle\\EyeFill;\n\nuse BaconQrCode\\Renderer\\Image\\EpsImageBackEnd;\nuse BaconQrCode\\Renderer\\Image\\ImageBackEndInterface;\nuse BaconQrCode\\Renderer\\Image\\ImagickImageBackEnd;\nuse BaconQrCode\\Renderer\\Image\\SvgImageBackEnd;\n\nclass BaconQrCodeProvider implements IQRCodeProvider\n{\n    private $borderWidth = 4; // default from Bacon QR Code\n    private $backgroundColour;\n    private $foregroundColour;\n    private $format;\n\n    /**\n     * Ensure we using the latest Bacon QR Code and specify default options\n     *\n     * @param int $borderWidth space around the QR code, 4 is the default from Bacon QR Code\n     * @param string $backgroundColour hex reference for the background colour\n     * @param string $foregroundColour hex reference for the foreground colour\n     * @param string $format the desired output, png or svg\n     */\n    public function __construct($borderWidth = 4, $backgroundColour = '#ffffff', $foregroundColour = '#000000', $format = 'png')\n    {\n        if (! class_exists(ImagickImageBackEnd::class)) {\n            throw new \\RuntimeException('Make sure you are using version 2 of Bacon QR Code');\n        }\n\n        $this->borderWidth = $borderWidth;\n        $this->backgroundColour = $this->handleColour($backgroundColour);\n        $this->foregroundColour = $this->handleColour($foregroundColour);\n        $this->format = strtolower($format);\n    }\n\n    /**\n     * Standard functions from IQRCodeProvider\n     */\n\n    public function getMimeType()\n    {\n        switch ($this->format) {\n            case 'png':\n                return 'image/png';\n            case 'gif':\n                return 'image/gif';\n            case 'jpg':\n            case 'jpeg':\n                return 'image/jpeg';\n            case 'svg':\n                return 'image/svg+xml';\n            case 'eps':\n                return 'application/postscript';\n        }\n\n        throw new \\RuntimeException(sprintf('Unknown MIME-type: %s', $this->format));\n    }\n\n    public function getQRCodeImage($qrText, $size)\n    {\n        switch ($this->format) {\n            case 'svg':\n                $backend = new SvgImageBackEnd;\n                break;\n            case 'eps':\n                $backend = new EpsImageBackEnd;\n                break;\n            default:\n                $backend = new ImagickImageBackEnd($this->format);\n        }\n\n        $output = $this->getQRCodeByBackend($qrText, $size, $backend);\n\n        if ($this->format == 'svg') {\n            $svg = explode(\"\\n\", $output);\n            return $svg[1];\n        }\n\n        return $output;\n    }\n\n    /**\n     * Abstract QR code generation function\n     * providing colour changing support\n     */\n    private function getQRCodeByBackend($qrText, $size, ImageBackEndInterface $backend)\n    {\n        $rendererStyleArgs = array($size, $this->borderWidth);\n\n        if (is_array($this->foregroundColour) && is_array($this->backgroundColour)) {\n            $rendererStyleArgs = array_merge($rendererStyleArgs, array(\n                null,\n                null,\n                Fill::withForegroundColor(\n                    new Rgb(...$this->backgroundColour),\n                    new Rgb(...$this->foregroundColour),\n                    new EyeFill(null, null),\n                    new EyeFill(null, null),\n                    new EyeFill(null, null)\n                )\n            ));\n        }\n\n        $writer = new Writer(new ImageRenderer(\n            new RendererStyle(...$rendererStyleArgs),\n            $backend\n        ));\n\n        return $writer->writeString($qrText);\n    }\n\n    /**\n     * Ensure colour is an array of three values but also\n     * accept a string and assume its a 3 or 6 character hex\n     */\n    private function handleColour($colour)\n    {\n        if (is_string($colour) && $colour[0] == '#') {\n            $hexToRGB = function ($input) {\n                // split the array into three chunks\n                $split = str_split(trim($input, '#'), strlen($input) / 3);\n\n                // cope with three character hex reference\n                // three characters plus a # = 4\n                if (strlen($input) == 4) {\n                    array_walk($split, function (&$character) {\n                        $character = str_repeat($character, 2);\n                    });\n                }\n\n                // convert hex to rgb\n                return array_map('hexdec', $split);\n            };\n\n            return $hexToRGB($colour);\n        }\n\n        if (is_array($colour) && count($colour) == 3) {\n            return $colour;\n        }\n\n        throw new \\RuntimeException('Invalid colour value');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/BaseHTTPQRCodeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\nabstract class BaseHTTPQRCodeProvider implements IQRCodeProvider\n{\n    /** @var bool */\n    protected $verifyssl;\n\n    /**\n     * @param string $url\n     *\n     * @return string|bool\n     */\n    protected function getContent($url)\n    {\n        $curlhandle = curl_init();\n\n        curl_setopt_array($curlhandle, array(\n            CURLOPT_URL => $url,\n            CURLOPT_RETURNTRANSFER => true,\n            CURLOPT_CONNECTTIMEOUT => 10,\n            CURLOPT_DNS_CACHE_TIMEOUT => 10,\n            CURLOPT_TIMEOUT => 10,\n            CURLOPT_SSL_VERIFYPEER => $this->verifyssl,\n            CURLOPT_USERAGENT => 'TwoFactorAuth'\n        ));\n        $data = curl_exec($curlhandle);\n\n        curl_close($curlhandle);\n        return $data;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/EndroidQrCodeProvider.php",
    "content": "<?php\nnamespace RobThree\\Auth\\Providers\\Qr;\n\nuse Endroid\\QrCode\\ErrorCorrectionLevel;\nuse Endroid\\QrCode\\QrCode;\n\nclass EndroidQrCodeProvider implements IQRCodeProvider\n{\n    public $bgcolor;\n    public $color;\n    public $margin;\n    public $errorcorrectionlevel;\n\n    public function __construct($bgcolor = 'ffffff', $color = '000000', $margin = 0, $errorcorrectionlevel = 'H')\n    {\n        $this->bgcolor = $this->handleColor($bgcolor);\n        $this->color = $this->handleColor($color);\n        $this->margin = $margin;\n        $this->errorcorrectionlevel = $this->handleErrorCorrectionLevel($errorcorrectionlevel);\n    }\n\n    public function getMimeType()\n    {\n        return 'image/png';\n    }\n\n    public function getQRCodeImage($qrtext, $size)\n    {\n        return $this->qrCodeInstance($qrtext, $size)->writeString();\n    }\n\n    protected function qrCodeInstance($qrtext, $size)\n    {\n        $qrCode = new QrCode($qrtext);\n        $qrCode->setSize($size);\n\n        $qrCode->setErrorCorrectionLevel($this->errorcorrectionlevel);\n        $qrCode->setMargin($this->margin);\n        $qrCode->setBackgroundColor($this->bgcolor);\n        $qrCode->setForegroundColor($this->color);\n\n        return $qrCode;\n    }\n\n    private function handleColor($color)\n    {\n        $split = str_split($color, 2);\n        $r = hexdec($split[0]);\n        $g = hexdec($split[1]);\n        $b = hexdec($split[2]);\n\n        return ['r' => $r, 'g' => $g, 'b' => $b, 'a' => 0];\n    }\n\n    private function handleErrorCorrectionLevel($level)\n    {\n        switch ($level) {\n            case 'L':\n                return ErrorCorrectionLevel::LOW();\n            case 'M':\n                return ErrorCorrectionLevel::MEDIUM();\n            case 'Q':\n                return ErrorCorrectionLevel::QUARTILE();\n            case 'H':\n                return ErrorCorrectionLevel::HIGH();\n            default:\n                return ErrorCorrectionLevel::HIGH();\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/EndroidQrCodeWithLogoProvider.php",
    "content": "<?php\nnamespace RobThree\\Auth\\Providers\\Qr;\n\nuse Endroid\\QrCode\\ErrorCorrectionLevel;\nuse Endroid\\QrCode\\QrCode;\n\nclass EndroidQrCodeWithLogoProvider extends EndroidQrCodeProvider\n{\n    protected $logoPath;\n    protected $logoSize;\n\n    /**\n     * Adds an image to the middle of the QR Code.\n     * @param string $path Path to an image file\n     * @param array|int $size Just the width, or [width, height]\n     */\n    public function setLogo($path, $size = null)\n    {\n        $this->logoPath = $path;\n        $this->logoSize = (array)$size;\n    }\n\n    protected function qrCodeInstance($qrtext, $size) {\n        $qrCode = parent::qrCodeInstance($qrtext, $size);\n\n        if ($this->logoPath) {\n            $qrCode->setLogoPath($this->logoPath);\n            if ($this->logoSize) {\n                $qrCode->setLogoSize($this->logoSize[0], $this->logoSize[1]);\n            }\n        }\n\n        return $qrCode;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/GoogleChartsQrCodeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\n// https://developers.google.com/chart/infographics/docs/qr_codes\nclass GoogleChartsQrCodeProvider extends BaseHTTPQRCodeProvider\n{\n    /** @var string */\n    public $errorcorrectionlevel;\n\n    /** @var int */\n    public $margin;\n\n    /** @var string */\n    public $encoding;\n\n    /**\n     * @param bool $verifyssl\n     * @param string $errorcorrectionlevel\n     * @param int $margin\n     * @param string $encoding\n     */\n    public function __construct($verifyssl = false, $errorcorrectionlevel = 'L', $margin = 4, $encoding = 'UTF-8')\n    {\n        if (!is_bool($verifyssl)) { \n            throw new QRException('VerifySSL must be bool'); \n        }\n\n        $this->verifyssl = $verifyssl;\n\n        $this->errorcorrectionlevel = $errorcorrectionlevel;\n        $this->margin = $margin;\n        $this->encoding = $encoding;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMimeType()\n    {\n        return 'image/png';\n    }\n    \n    /**\n     * {@inheritdoc}\n     */\n    public function getQRCodeImage($qrtext, $size)\n    {\n        return $this->getContent($this->getUrl($qrtext, $size));   \n    }\n\n    /**\n     * @param string $qrtext the value to encode in the QR code\n     * @param int|string $size the desired size of the QR code\n     *\n     * @return string file contents of the QR code\n     */\n    public function getUrl($qrtext, $size)\n    {\n        return 'https://chart.googleapis.com/chart'\n            . '?chs=' . $size . 'x' . $size\n            . '&chld=' . urlencode(strtoupper($this->errorcorrectionlevel) . '|' . $this->margin)\n            . '&cht=' . 'qr'\n            . '&choe=' . $this->encoding\n            . '&chl=' . rawurlencode($qrtext);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/IQRCodeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\ninterface IQRCodeProvider\n{\n    /**\n     * Generate and return the QR code to embed in a web page\n     *\n     * @param string $qrtext the value to encode in the QR code\n     * @param int $size the desired size of the QR code\n     *\n     * @return string file contents of the QR code\n     */\n    public function getQRCodeImage($qrtext, $size);\n\n    /**\n     * Returns the appropriate mime type for the QR code\n     * that will be generated\n     *\n     * @return string\n     */\n    public function getMimeType();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/ImageChartsQRCodeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\n// https://image-charts.com\nclass ImageChartsQRCodeProvider extends BaseHTTPQRCodeProvider\n{\n    /** @var string */\n    public $errorcorrectionlevel;\n\n    /** @var int */\n    public $margin;\n\n    /**\n     * @param bool $verifyssl\n     * @param string $errorcorrectionlevel\n     * @param int $margin\n     */\n    public function __construct($verifyssl = false, $errorcorrectionlevel = 'L', $margin = 1)\n    {\n        if (!is_bool($verifyssl)) {\n            throw new QRException('VerifySSL must be bool');\n        }\n\n        $this->verifyssl = $verifyssl;\n\n        $this->errorcorrectionlevel = $errorcorrectionlevel;\n        $this->margin = $margin;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMimeType()\n    {\n        return 'image/png';\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getQRCodeImage($qrtext, $size)\n    {\n        return $this->getContent($this->getUrl($qrtext, $size));\n    }\n\n    /**\n     * @param string $qrtext the value to encode in the QR code\n     * @param int $size the desired size of the QR code\n     *\n     * @return string file contents of the QR code\n     */\n    public function getUrl($qrtext, $size)\n    {\n        return 'https://image-charts.com/chart?cht=qr'\n            . '&chs=' . ceil($size / 2) . 'x' . ceil($size / 2)\n            . '&chld=' . $this->errorcorrectionlevel . '|' . $this->margin\n            . '&chl=' . rawurlencode($qrtext);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRException.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\nuse RobThree\\Auth\\TwoFactorAuthException;\n\nclass QRException extends TwoFactorAuthException {}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRServerProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\n// http://goqr.me/api/doc/create-qr-code/\nclass QRServerProvider extends BaseHTTPQRCodeProvider\n{\n    /** @var string */\n    public $errorcorrectionlevel;\n\n    /** @var int */\n    public $margin;\n\n    /** @var int */\n    public $qzone;\n\n    /** @var string */\n    public $bgcolor;\n\n    /** @var string */\n    public $color;\n\n    /** @var string */\n    public $format;\n\n    /**\n     * @param bool $verifyssl\n     * @param string $errorcorrectionlevel\n     * @param int $margin\n     * @param int $qzone\n     * @param string $bgcolor\n     * @param string $color\n     * @param string $format\n     */\n    public function __construct($verifyssl = false, $errorcorrectionlevel = 'L', $margin = 4, $qzone = 1, $bgcolor = 'ffffff', $color = '000000', $format = 'png')\n    {\n        if (!is_bool($verifyssl)) {\n            throw new QRException('VerifySSL must be bool');\n        }\n\n        $this->verifyssl = $verifyssl;\n\n        $this->errorcorrectionlevel = $errorcorrectionlevel;\n        $this->margin = $margin;\n        $this->qzone = $qzone;\n        $this->bgcolor = $bgcolor;\n        $this->color = $color;\n        $this->format = $format;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMimeType()\n    {\n        switch (strtolower($this->format)) {\n            case 'png':\n                return 'image/png';\n            case 'gif':\n                return 'image/gif';\n            case 'jpg':\n            case 'jpeg':\n                return 'image/jpeg';\n            case 'svg':\n                return 'image/svg+xml';\n            case 'eps':\n                return 'application/postscript';\n        }\n        throw new QRException(sprintf('Unknown MIME-type: %s', $this->format));\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getQRCodeImage($qrtext, $size)\n    {\n        return $this->getContent($this->getUrl($qrtext, $size));\n    }\n\n    /**\n     * @param string $value\n     *\n     * @return string\n     */\n    private function decodeColor($value)\n    {\n        return vsprintf('%d-%d-%d', sscanf($value, \"%02x%02x%02x\"));\n    }\n\n    /**\n     * @param string $qrtext the value to encode in the QR code\n     * @param int|string $size the desired size of the QR code\n     *\n     * @return string file contents of the QR code\n     */\n    public function getUrl($qrtext, $size)\n    {\n        return 'https://api.qrserver.com/v1/create-qr-code/'\n            . '?size=' . $size . 'x' . $size\n            . '&ecc=' . strtoupper($this->errorcorrectionlevel)\n            . '&margin=' . $this->margin\n            . '&qzone=' . $this->qzone\n            . '&bgcolor=' . $this->decodeColor($this->bgcolor)\n            . '&color=' . $this->decodeColor($this->color)\n            . '&format=' . strtolower($this->format)\n            . '&data=' . rawurlencode($qrtext);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Qr/QRicketProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Qr;\n\n// http://qrickit.com/qrickit_apps/qrickit_api.php\nclass QRicketProvider extends BaseHTTPQRCodeProvider\n{\n    /** @var string */\n    public $errorcorrectionlevel;\n\n    /** @var string */\n    public $bgcolor;\n\n    /** @var string */\n    public $color;\n\n    /** @var string */\n    public $format;\n\n    /**\n     * @param string $errorcorrectionlevel\n     * @param string $bgcolor\n     * @param string $color\n     * @param string $format\n     */\n    public function __construct($errorcorrectionlevel = 'L', $bgcolor = 'ffffff', $color = '000000', $format = 'p')\n    {\n        $this->verifyssl = false;\n\n        $this->errorcorrectionlevel = $errorcorrectionlevel;\n        $this->bgcolor = $bgcolor;\n        $this->color = $color;\n        $this->format = $format;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMimeType()\n    {\n        switch (strtolower($this->format)) {\n            case 'p':\n                return 'image/png';\n            case 'g':\n                return 'image/gif';\n            case 'j':\n                return 'image/jpeg';\n        }\n        throw new QRException(sprintf('Unknown MIME-type: %s', $this->format));\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getQRCodeImage($qrtext, $size)\n    {\n        return $this->getContent($this->getUrl($qrtext, $size));\n    }\n\n    /**\n     * @param string $qrtext the value to encode in the QR code\n     * @param int|string $size the desired size of the QR code\n     *\n     * @return string file contents of the QR code\n     */\n    public function getUrl($qrtext, $size)\n    {\n        return 'http://qrickit.com/api/qr'\n            . '?qrsize=' . $size\n            . '&e=' . strtolower($this->errorcorrectionlevel)\n            . '&bgdcolor=' . $this->bgcolor\n            . '&fgdcolor=' . $this->color\n            . '&t=' . strtolower($this->format)\n            . '&d=' . rawurlencode($qrtext);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/CSRNGProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Rng;\n\nclass CSRNGProvider implements IRNGProvider\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function getRandomBytes($bytecount)\n    {\n        return random_bytes($bytecount);    // PHP7+\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isCryptographicallySecure()\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/HashRNGProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Rng;\n\nclass HashRNGProvider implements IRNGProvider\n{\n    /** @var string */\n    private $algorithm;\n\n    /**\n     * @param string $algorithm\n     */\n    public function __construct($algorithm = 'sha256')\n    {\n        $algos = array_values(hash_algos());\n        if (!in_array($algorithm, $algos, true)) {\n            throw new RNGException('Unsupported algorithm specified');\n        }\n        $this->algorithm = $algorithm;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getRandomBytes($bytecount)\n    {\n        $result = '';\n        $hash = mt_rand();\n        for ($i = 0; $i < $bytecount; $i++) {\n            $hash = hash($this->algorithm, $hash . mt_rand(), true);\n            $result .= $hash[mt_rand(0, strlen($hash) - 1)];\n        }\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isCryptographicallySecure()\n    {\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/IRNGProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Rng;\n\ninterface IRNGProvider\n{\n    /**\n     * @param int $bytecount the number of bytes of randomness to return\n     *\n     * @return string the random bytes\n     */\n    public function getRandomBytes($bytecount);\n\n    /**\n     * @return bool whether this provider is cryptographically secure\n     */\n    public function isCryptographicallySecure();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/MCryptRNGProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Rng;\n\nclass MCryptRNGProvider implements IRNGProvider\n{\n    /** @var int */\n    private $source;\n\n    /**\n     * @param int $source\n     */\n    public function __construct($source = MCRYPT_DEV_URANDOM)\n    {\n        $this->source = $source;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getRandomBytes($bytecount)\n    {\n        $result = @mcrypt_create_iv($bytecount, $this->source);\n        if ($result === false) {\n            throw new RNGException('mcrypt_create_iv returned an invalid value');\n        }\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isCryptographicallySecure()\n    {\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/OpenSSLRNGProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Rng;\n\nclass OpenSSLRNGProvider implements IRNGProvider\n{\n    /** @var bool */\n    private $requirestrong;\n\n    /**\n     * @param bool $requirestrong\n     */\n    public function __construct($requirestrong = true)\n    {\n        $this->requirestrong = $requirestrong;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getRandomBytes($bytecount)\n    {\n        $result = openssl_random_pseudo_bytes($bytecount, $crypto_strong);\n        if ($this->requirestrong && ($crypto_strong === false)) {\n            throw new RNGException('openssl_random_pseudo_bytes returned non-cryptographically strong value');\n        }\n        if ($result === false) {\n            throw new RNGException('openssl_random_pseudo_bytes returned an invalid value');\n        }\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isCryptographicallySecure()\n    {\n        return $this->requirestrong;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Rng/RNGException.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Rng;\n\nuse RobThree\\Auth\\TwoFactorAuthException;\n\nclass RNGException extends TwoFactorAuthException {}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/HttpTimeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Time;\n\nuse DateTime;\n\n/**\n * Takes the time from any webserver by doing a HEAD request on the specified URL and extracting the 'Date:' header\n */\nclass HttpTimeProvider implements ITimeProvider\n{\n    /** @var string */\n    public $url;\n\n    /** @var string */\n    public $expectedtimeformat;\n\n    /** @var array */\n    public $options;\n\n    /**\n     * @param string $url\n     * @param string $expectedtimeformat\n     * @param array $options\n     */\n    public function __construct($url = 'https://google.com', $expectedtimeformat = 'D, d M Y H:i:s O+', array $options = null)\n    {\n        $this->url = $url;\n        $this->expectedtimeformat = $expectedtimeformat;\n        if ($options === null) {\n            $options = array(\n                'http' => array(\n                    'method' => 'HEAD',\n                    'follow_location' => false,\n                    'ignore_errors' => true,\n                    'max_redirects' => 0,\n                    'request_fulluri' => true,\n                    'header' => array(\n                        'Connection: close',\n                        'User-agent: TwoFactorAuth HttpTimeProvider (https://github.com/RobThree/TwoFactorAuth)',\n                        'Cache-Control: no-cache'\n                    )\n                )\n            );\n        }\n        $this->options = $options;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getTime()\n    {\n        try {\n            $context  = stream_context_create($this->options);\n            $fd = fopen($this->url, 'rb', false, $context);\n            $headers = stream_get_meta_data($fd);\n            fclose($fd);\n\n            foreach ($headers['wrapper_data'] as $h) {\n                if (strcasecmp(substr($h, 0, 5), 'Date:') === 0) {\n                    return DateTime::createFromFormat($this->expectedtimeformat, trim(substr($h, 5)))->getTimestamp();\n                }\n            }\n            throw new \\Exception('Invalid or no \"Date:\" header found');\n        } catch (\\Exception $ex) {\n            throw new TimeException(sprintf('Unable to retrieve time from %s (%s)', $this->url, $ex->getMessage()));\n        }\n\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/ITimeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Time;\n\ninterface ITimeProvider\n{\n    /**\n     * @return int the current timestamp according to this provider\n     */\n    public function getTime();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/LocalMachineTimeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Time;\n\nclass LocalMachineTimeProvider implements ITimeProvider\n{\n    public function getTime()\n    {\n        return time();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/NTPTimeProvider.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Time;\n\n/**\n * Takes the time from any NTP server\n */\nclass NTPTimeProvider implements ITimeProvider\n{\n    /** @var string */\n    public $host;\n\n    /** @var int */\n    public $port;\n\n    /** @var int */\n    public $timeout;\n\n    /**\n     * @param string $host\n     * @param int $port\n     * @param int $timeout\n     */\n    public function __construct($host = 'time.google.com', $port = 123, $timeout = 1)\n    {\n        $this->host = $host;\n\n        if (!is_int($port) || $port <= 0 || $port > 65535) {\n            throw new TimeException('Port must be 0 < port < 65535');\n        }\n        $this->port = $port;\n\n        if (!is_int($timeout) || $timeout < 0) {\n            throw new TimeException('Timeout must be >= 0');\n        }\n        $this->timeout = $timeout;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getTime()\n    {\n        try {\n            /* Create a socket and connect to NTP server */\n            $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);\n            socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO, ['sec' => $this->timeout, 'usec' => 0]);\n            socket_connect($sock, $this->host, $this->port);\n\n            /* Send request */\n            $msg = \"\\010\" . str_repeat(\"\\0\", 47);\n            socket_send($sock, $msg, strlen($msg), 0);\n\n            /* Receive response and close socket */\n            if (socket_recv($sock, $recv, 48, MSG_WAITALL) === false) {\n                throw new \\Exception(socket_strerror(socket_last_error($sock)));\n            }\n            socket_close($sock);\n\n            /* Interpret response */\n            $data = unpack('N12', $recv);\n            $timestamp = (int) sprintf('%u', $data[9]);\n\n            /* NTP is number of seconds since 0000 UT on 1 January 1900 Unix time is seconds since 0000 UT on 1 January 1970 */\n            return $timestamp - 2208988800;\n        } catch (\\Exception $ex) {\n            throw new TimeException(sprintf('Unable to retrieve time from %s (%s)', $this->host, $ex->getMessage()));\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/Providers/Time/TimeException.php",
    "content": "<?php\n\nnamespace RobThree\\Auth\\Providers\\Time;\n\nuse RobThree\\Auth\\TwoFactorAuthException;\n\nclass TimeException extends TwoFactorAuthException {}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuth.php",
    "content": "<?php\n\nnamespace RobThree\\Auth;\n\nuse RobThree\\Auth\\Providers\\Qr\\IQRCodeProvider;\nuse RobThree\\Auth\\Providers\\Qr\\QRServerProvider;\nuse RobThree\\Auth\\Providers\\Rng\\CSRNGProvider;\nuse RobThree\\Auth\\Providers\\Rng\\HashRNGProvider;\nuse RobThree\\Auth\\Providers\\Rng\\IRNGProvider;\nuse RobThree\\Auth\\Providers\\Rng\\MCryptRNGProvider;\nuse RobThree\\Auth\\Providers\\Rng\\OpenSSLRNGProvider;\nuse RobThree\\Auth\\Providers\\Time\\HttpTimeProvider;\nuse RobThree\\Auth\\Providers\\Time\\ITimeProvider;\nuse RobThree\\Auth\\Providers\\Time\\LocalMachineTimeProvider;\nuse RobThree\\Auth\\Providers\\Time\\NTPTimeProvider;\n\n// Based on / inspired by: https://github.com/PHPGangsta/GoogleAuthenticator\n// Algorithms, digits, period etc. explained: https://github.com/google/google-authenticator/wiki/Key-Uri-Format\nclass TwoFactorAuth\n{\n    /** @var string */\n    private $algorithm;\n\n    /** @var int */\n    private $period;\n\n    /** @var int */\n    private $digits;\n\n    /** @var string */\n    private $issuer;\n\n    /** @var ?IQRCodeProvider */\n    private $qrcodeprovider = null;\n\n    /** @var ?IRNGProvider */\n    private $rngprovider = null;\n\n    /** @var ?ITimeProvider */\n    private $timeprovider = null;\n\n    /** @var string */\n    private static $_base32dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=';\n\n    /** @var array */\n    private static $_base32;\n\n    /** @var array */\n    private static $_base32lookup = array();\n\n    /** @var array */\n    private static $_supportedalgos = array('sha1', 'sha256', 'sha512', 'md5');\n\n    /**\n     * @param ?string $issuer\n     * @param int $digits\n     * @param int $period\n     * @param string $algorithm\n     * @param ?IQRCodeProvider $qrcodeprovider\n     * @param ?IRNGProvider $rngprovider\n     * @param ?ITimeProvider $timeprovider\n     */\n    public function __construct($issuer = null, $digits = 6, $period = 30, $algorithm = 'sha1', IQRCodeProvider $qrcodeprovider = null, IRNGProvider $rngprovider = null, ITimeProvider $timeprovider = null)\n    {\n        $this->issuer = $issuer;\n        if (!is_int($digits) || $digits <= 0) {\n            throw new TwoFactorAuthException('Digits must be int > 0');\n        }\n        $this->digits = $digits;\n\n        if (!is_int($period) || $period <= 0) {\n            throw new TwoFactorAuthException('Period must be int > 0');\n        }\n        $this->period = $period;\n\n        $algorithm = strtolower(trim($algorithm));\n        if (!in_array($algorithm, self::$_supportedalgos)) {\n            throw new TwoFactorAuthException('Unsupported algorithm: ' . $algorithm);\n        }\n        $this->algorithm = $algorithm;\n        $this->qrcodeprovider = $qrcodeprovider;\n        $this->rngprovider = $rngprovider;\n        $this->timeprovider = $timeprovider;\n\n        self::$_base32 = str_split(self::$_base32dict);\n        self::$_base32lookup = array_flip(self::$_base32);\n    }\n\n    /**\n     * Create a new secret\n     *\n     * @param int $bits\n     * @param bool $requirecryptosecure\n     *\n     * @return string\n     */\n    public function createSecret($bits = 80, $requirecryptosecure = true)\n    {\n        $secret = '';\n        $bytes = (int) ceil($bits / 5);   //We use 5 bits of each byte (since we have a 32-character 'alphabet' / BASE32)\n        $rngprovider = $this->getRngProvider();\n        if ($requirecryptosecure && !$rngprovider->isCryptographicallySecure()) {\n            throw new TwoFactorAuthException('RNG provider is not cryptographically secure');\n        }\n        $rnd = $rngprovider->getRandomBytes($bytes);\n        for ($i = 0; $i < $bytes; $i++) {\n            $secret .= self::$_base32[ord($rnd[$i]) & 31];  //Mask out left 3 bits for 0-31 values\n        }\n        return $secret;\n    }\n\n    /**\n     * Calculate the code with given secret and point in time\n     *\n     * @param string $secret\n     * @param ?int $time\n     *\n     * @return string\n     */\n    public function getCode($secret, $time = null)\n    {\n        $secretkey = $this->base32Decode($secret);\n\n        $timestamp = \"\\0\\0\\0\\0\" . pack('N*', $this->getTimeSlice($this->getTime($time)));  // Pack time into binary string\n        $hashhmac = hash_hmac($this->algorithm, $timestamp, $secretkey, true);             // Hash it with users secret key\n        $hashpart = substr($hashhmac, ord(substr($hashhmac, -1)) & 0x0F, 4);               // Use last nibble of result as index/offset and grab 4 bytes of the result\n        $value = unpack('N', $hashpart);                                                   // Unpack binary value\n        $value = $value[1] & 0x7FFFFFFF;                                                   // Drop MSB, keep only 31 bits\n\n        return str_pad((string) ($value % pow(10, $this->digits)), $this->digits, '0', STR_PAD_LEFT);\n    }\n\n    /**\n     * Check if the code is correct. This will accept codes starting from ($discrepancy * $period) sec ago to ($discrepancy * period) sec from now\n     *\n     * @param string $secret\n     * @param string $code\n     * @param int $discrepancy\n     * @param ?int $time\n     * @param int $timeslice\n     *\n     * @return bool\n     */\n    public function verifyCode($secret, $code, $discrepancy = 1, $time = null, &$timeslice = 0)\n    {\n        $timestamp = $this->getTime($time);\n\n        $timeslice = 0;\n\n        // To keep safe from timing-attacks we iterate *all* possible codes even though we already may have\n        // verified a code is correct. We use the timeslice variable to hold either 0 (no match) or the timeslice\n        // of the match. Each iteration we either set the timeslice variable to the timeslice of the match\n        // or set the value to itself.  This is an effort to maintain constant execution time for the code.\n        for ($i = -$discrepancy; $i <= $discrepancy; $i++) {\n            $ts = $timestamp + ($i * $this->period);\n            $slice = $this->getTimeSlice($ts);\n            $timeslice = $this->codeEquals($this->getCode($secret, $ts), $code) ? $slice : $timeslice;\n        }\n\n        return $timeslice > 0;\n    }\n\n    /**\n     * Timing-attack safe comparison of 2 codes (see http://blog.ircmaxell.com/2014/11/its-all-about-time.html)\n     *\n     * @param string $safe\n     * @param string $user\n     *\n     * @return bool\n     */\n    private function codeEquals($safe, $user)\n    {\n        if (function_exists('hash_equals')) {\n            return hash_equals($safe, $user);\n        }\n        // In general, it's not possible to prevent length leaks. So it's OK to leak the length. The important part is that\n        // we don't leak information about the difference of the two strings.\n        if (strlen($safe) === strlen($user)) {\n            $result = 0;\n            for ($i = 0; $i < strlen($safe); $i++) {\n                $result |= (ord($safe[$i]) ^ ord($user[$i]));\n            }\n            return $result === 0;\n        }\n        return false;\n    }\n\n    /**\n     * Get data-uri of QRCode\n     *\n     * @param string $label\n     * @param string $secret\n     * @param mixed $size\n     *\n     * @return string\n     */\n    public function getQRCodeImageAsDataUri($label, $secret, $size = 200)\n    {\n        if (!is_int($size) || $size <= 0) {\n            throw new TwoFactorAuthException('Size must be int > 0');\n        }\n\n        $qrcodeprovider = $this->getQrCodeProvider();\n        return 'data:'\n            . $qrcodeprovider->getMimeType()\n            . ';base64,'\n            . base64_encode($qrcodeprovider->getQRCodeImage($this->getQRText($label, $secret), $size));\n    }\n\n    /**\n     * Compare default timeprovider with specified timeproviders and ensure the time is within the specified number of seconds (leniency)\n     * @param ?array $timeproviders\n     * @param int $leniency\n     *\n     * @return void\n     */\n    public function ensureCorrectTime(array $timeproviders = null, $leniency = 5)\n    {\n        if ($timeproviders === null) {\n            $timeproviders = array(\n                new NTPTimeProvider(),\n                new HttpTimeProvider()\n            );\n        }\n\n        // Get default time provider\n        $timeprovider = $this->getTimeProvider();\n\n        // Iterate specified time providers\n        foreach ($timeproviders as $t) {\n            if (!($t instanceof ITimeProvider)) {\n                throw new TwoFactorAuthException('Object does not implement ITimeProvider');\n            }\n\n            // Get time from default time provider and compare to specific time provider and throw if time difference is more than specified number of seconds leniency\n            if (abs($timeprovider->getTime() - $t->getTime()) > $leniency) {\n                throw new TwoFactorAuthException(sprintf('Time for timeprovider is off by more than %d seconds when compared to %s', $leniency, get_class($t)));\n            }\n        }\n    }\n\n    /**\n     * @param ?int $time\n     *\n     * @return int\n     */\n    private function getTime($time = null)\n    {\n        return ($time === null) ? $this->getTimeProvider()->getTime() : $time;\n    }\n\n    /**\n     * @param int $time\n     * @param int $offset\n     *\n     * @return int\n     */\n    private function getTimeSlice($time = null, $offset = 0)\n    {\n        return (int)floor($time / $this->period) + ($offset * $this->period);\n    }\n\n    /**\n     * Builds a string to be encoded in a QR code\n     *\n     * @param string $label\n     * @param string $secret\n     *\n     * @return string\n     */\n    public function getQRText($label, $secret)\n    {\n        return 'otpauth://totp/' . rawurlencode($label)\n            . '?secret=' . rawurlencode($secret)\n            . '&issuer=' . rawurlencode($this->issuer)\n            . '&period=' . intval($this->period)\n            . '&algorithm=' . rawurlencode(strtoupper($this->algorithm))\n            . '&digits=' . intval($this->digits);\n    }\n\n    /**\n     * @param string $value\n     * @return string\n     */\n    private function base32Decode($value)\n    {\n        if (strlen($value) == 0) {\n            return '';\n        }\n\n        if (preg_match('/[^' . preg_quote(self::$_base32dict) . ']/', $value) !== 0) {\n            throw new TwoFactorAuthException('Invalid base32 string');\n        }\n\n        $buffer = '';\n        foreach (str_split($value) as $char) {\n            if ($char !== '=') {\n                $buffer .= str_pad(decbin(self::$_base32lookup[$char]), 5, '0', STR_PAD_LEFT);\n            }\n        }\n        $length = strlen($buffer);\n        $blocks = trim(chunk_split(substr($buffer, 0, $length - ($length % 8)), 8, ' '));\n\n        $output = '';\n        foreach (explode(' ', $blocks) as $block) {\n            $output .= chr(bindec(str_pad($block, 8, '0', STR_PAD_RIGHT)));\n        }\n        return $output;\n    }\n\n    /**\n     * @return IQRCodeProvider\n     * @throws TwoFactorAuthException\n     */\n    public function getQrCodeProvider()\n    {\n        // Set default QR Code provider if none was specified\n        if (null === $this->qrcodeprovider) {\n            return $this->qrcodeprovider = new QRServerProvider();\n        }\n        return $this->qrcodeprovider;\n    }\n\n    /**\n     * @return IRNGProvider\n     * @throws TwoFactorAuthException\n     */\n    public function getRngProvider()\n    {\n        if (null !== $this->rngprovider) {\n            return $this->rngprovider;\n        }\n        if (function_exists('random_bytes')) {\n            return $this->rngprovider = new CSRNGProvider();\n        }\n        if (function_exists('mcrypt_create_iv')) {\n            return $this->rngprovider = new MCryptRNGProvider();\n        }\n        if (function_exists('openssl_random_pseudo_bytes')) {\n            return $this->rngprovider = new OpenSSLRNGProvider();\n        }\n        if (function_exists('hash')) {\n            return $this->rngprovider = new HashRNGProvider();\n        }\n        throw new TwoFactorAuthException('Unable to find a suited RNGProvider');\n    }\n\n    /**\n     * @return ITimeProvider\n     * @throws TwoFactorAuthException\n     */\n    public function getTimeProvider()\n    {\n        // Set default time provider if none was specified\n        if (null === $this->timeprovider) {\n            return $this->timeprovider = new LocalMachineTimeProvider();\n        }\n        return $this->timeprovider;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/lib/TwoFactorAuthException.php",
    "content": "<?php\n\nnamespace RobThree\\Auth;\n\nuse Exception;\n\nclass TwoFactorAuthException extends Exception {}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n         processIsolation=\"false\"\n         xsi:noNamespaceSchemaLocation=\"https://schema.phpunit.de/9.3/phpunit.xsd\"\n         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         stopOnFailure=\"false\">\n  <testsuites>\n    <testsuite name=\"Unit\">\n      <directory suffix=\"Test.php\">./tests</directory>\n    </testsuite>\n  </testsuites>\n  <coverage processUncoveredFiles=\"true\">\n    <include>\n      <directory suffix=\".php\">./lib</directory>\n    </include>\n    <report>\n      <html outputDirectory=\"build/coverage\"/>\n      <text outputFile=\"php://stdout\"/>\n    </report>\n  </coverage>\n</phpunit>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/MightNotMakeAssertions.php",
    "content": "<?php\n\nnamespace Tests;\n\ntrait MightNotMakeAssertions\n{\n    /**\n     * This is a shim to support PHPUnit for php 5.6 and 7.0.\n     *\n     * It has to be named something that doesn't collide with existing\n     * TestCase methods as we can't support PHP return types right now\n     *\n     * @return void\n     */\n    public function noAssertionsMade()\n    {\n        foreach (class_parents($this) as $parent) {\n            if (method_exists($parent, 'expectNotToPerformAssertions')) {\n                parent::expectNotToPerformAssertions();\n                return;\n            }\n        }\n\n        $this->assertTrue(true);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Qr/IQRCodeProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Qr;\n\nuse PHPUnit\\Framework\\TestCase;\nuse RobThree\\Auth\\TwoFactorAuth;\nuse RobThree\\Auth\\TwoFactorAuthException;\n\nclass IQRCodeProviderTest extends TestCase\n{\n    /**\n     * @param string $datauri\n     *\n     * @return null|array\n     */\n    private function DecodeDataUri($datauri)\n    {\n        if (preg_match('/data:(?P<mimetype>[\\w\\.\\-\\/]+);(?P<encoding>\\w+),(?P<data>.*)/', $datauri, $m) === 1) {\n            return array(\n                'mimetype' => $m['mimetype'],\n                'encoding' => $m['encoding'],\n                'data' => base64_decode($m['data'])\n            );\n        }\n\n        return null;\n    }\n\n    /**\n     * @return void\n     */\n    public function testTotpUriIsCorrect()\n    {\n        $qr = new TestQrProvider();\n\n        $tfa = new TwoFactorAuth('Test&Issuer', 6, 30, 'sha1', $qr);\n        $data = $this->DecodeDataUri($tfa->getQRCodeImageAsDataUri('Test&Label', 'VMR466AB62ZBOKHE'));\n        $this->assertEquals('test/test', $data['mimetype']);\n        $this->assertEquals('base64', $data['encoding']);\n        $this->assertEquals('otpauth://totp/Test%26Label?secret=VMR466AB62ZBOKHE&issuer=Test%26Issuer&period=30&algorithm=SHA1&digits=6@200', $data['data']);\n    }\n\n    /**\n     * @return void\n     */\n    public function testGetQRCodeImageAsDataUriThrowsOnInvalidSize()\n    {\n        $qr = new TestQrProvider();\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', $qr);\n\n        $this->expectException(TwoFactorAuthException::class);\n\n        $tfa->getQRCodeImageAsDataUri('Test', 'VMR466AB62ZBOKHE', 0);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Qr/TestQrProvider.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Qr;\n\nuse RobThree\\Auth\\Providers\\Qr\\IQRCodeProvider;\n\nclass TestQrProvider implements IQRCodeProvider\n{\n    /**\n     * {@inheritdoc}\n     */\n    public function getQRCodeImage($qrtext, $size)\n    {\n        return $qrtext . '@' . $size;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getMimeType()\n    {\n        return 'test/test';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/CSRNGProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Tests\\MightNotMakeAssertions;\nuse RobThree\\Auth\\Providers\\Rng\\CSRNGProvider;\n\nclass CSRNGProviderTest extends TestCase\n{\n    use NeedsRngLengths, MightNotMakeAssertions;\n\n    /**\n     * @requires function random_bytes\n     *\n     * @return void\n     */\n    public function testCSRNGProvidersReturnExpectedNumberOfBytes()\n    {\n        if (function_exists('random_bytes')) {\n            $rng = new CSRNGProvider();\n            foreach ($this->rngTestLengths as $l) {\n                $this->assertEquals($l, strlen($rng->getRandomBytes($l)));\n            }\n            $this->assertTrue($rng->isCryptographicallySecure());\n        } else {\n            $this->noAssertionsMade();\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/HashRNGProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\nuse PHPUnit\\Framework\\TestCase;\nuse RobThree\\Auth\\Providers\\Rng\\HashRNGProvider;\n\nclass HashRNGProviderTest extends TestCase\n{\n    use NeedsRngLengths;\n\n    /**\n     * @return void\n     */\n    public function testHashRNGProvidersReturnExpectedNumberOfBytes()\n    {\n        $rng = new HashRNGProvider();\n        foreach ($this->rngTestLengths as $l) {\n            $this->assertEquals($l, strlen($rng->getRandomBytes($l)));\n        }\n\n        $this->assertFalse($rng->isCryptographicallySecure());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/IRNGProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\nuse PHPUnit\\Framework\\TestCase;\nuse RobThree\\Auth\\TwoFactorAuth;\nuse RobThree\\Auth\\TwoFactorAuthException;\n\nclass IRNGProviderTest extends TestCase\n{\n    /**\n     * @return void\n     */\n    public function testCreateSecretThrowsOnInsecureRNGProvider()\n    {\n        $rng = new TestRNGProvider();\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);\n\n        $this->expectException(TwoFactorAuthException::class);\n        $tfa->createSecret();\n    }\n\n    /**\n     * @return void\n     */\n    public function testCreateSecretOverrideSecureDoesNotThrowOnInsecureRNG()\n    {\n        $rng = new TestRNGProvider();\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);\n        $this->assertEquals('ABCDEFGHIJKLMNOP', $tfa->createSecret(80, false));\n    }\n\n    /**\n     * @return void\n     */\n    public function testCreateSecretDoesNotThrowOnSecureRNGProvider()\n    {\n        $rng = new TestRNGProvider(true);\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);\n        $this->assertEquals('ABCDEFGHIJKLMNOP', $tfa->createSecret());\n    }\n\n    /**\n     * @return void\n     */\n    public function testCreateSecretGeneratesDesiredAmountOfEntropy()\n    {\n        $rng = new TestRNGProvider(true);\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, $rng);\n        $this->assertEquals('A', $tfa->createSecret(5));\n        $this->assertEquals('AB', $tfa->createSecret(6));\n        $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ', $tfa->createSecret(128));\n        $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $tfa->createSecret(160));\n        $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $tfa->createSecret(320));\n        $this->assertEquals('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567ABCDEFGHIJKLMNOPQRSTUVWXYZ234567A', $tfa->createSecret(321));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/MCryptRNGProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Tests\\MightNotMakeAssertions;\nuse RobThree\\Auth\\Providers\\Rng\\MCryptRNGProvider;\n\nclass MCryptRNGProviderTest extends TestCase\n{\n    use NeedsRngLengths, MightNotMakeAssertions;\n\n    /**\n     * @requires function mcrypt_create_iv\n     *\n     * @return void\n     */\n    public function testMCryptRNGProvidersReturnExpectedNumberOfBytes()\n    {\n        if (function_exists('mcrypt_create_iv')) {\n            $rng = new MCryptRNGProvider();\n\n            foreach ($this->rngTestLengths as $l) {\n                $this->assertEquals($l, strlen($rng->getRandomBytes($l)));\n            }\n\n            $this->assertTrue($rng->isCryptographicallySecure());\n        } else {\n            $this->noAssertionsMade();\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/NeedsRngLengths.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\ntrait NeedsRngLengths\n{\n    /** @var array */\n    protected $rngTestLengths = array(1, 16, 32, 256);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/OpenSSLRNGProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\nuse PHPUnit\\Framework\\TestCase;\nuse RobThree\\Auth\\Providers\\Rng\\OpenSSLRNGProvider;\n\nclass OpenSSLRNGProviderTest extends TestCase\n{\n    use NeedsRngLengths;\n\n    /**\n     * @return void\n     */\n    public function testStrongOpenSSLRNGProvidersReturnExpectedNumberOfBytes()\n    {\n        $rng = new OpenSSLRNGProvider(true);\n        foreach ($this->rngTestLengths as $l) {\n            $this->assertEquals($l, strlen($rng->getRandomBytes($l)));\n        }\n\n        $this->assertTrue($rng->isCryptographicallySecure());\n    }\n\n    /**\n     * @return void\n     */\n    public function testNonStrongOpenSSLRNGProvidersReturnExpectedNumberOfBytes()\n    {\n        $rng = new OpenSSLRNGProvider(false);\n        foreach ($this->rngTestLengths as $l) {\n            $this->assertEquals($l, strlen($rng->getRandomBytes($l)));\n        }\n\n        $this->assertFalse($rng->isCryptographicallySecure());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Rng/TestRNGProvider.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Rng;\n\nuse RobThree\\Auth\\Providers\\Rng\\IRNGProvider;\n\nclass TestRNGProvider implements IRNGProvider\n{\n    /** @var bool */\n    private $isSecure;\n\n    /**\n     * @param bool $isSecure whether this provider is cryptographically secure\n     */\n    function __construct($isSecure = false)\n    {\n        $this->isSecure = $isSecure;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getRandomBytes($bytecount)\n    {\n        $result = '';\n\n        for ($i = 0; $i < $bytecount; $i++) {\n            $result .= chr($i);\n        }\n\n        return $result;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function isCryptographicallySecure()\n    {\n        return $this->isSecure;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Time/ITimeProviderTest.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Time;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Tests\\MightNotMakeAssertions;\nuse RobThree\\Auth\\TwoFactorAuthException;\nuse RobThree\\Auth\\TwoFactorAuth;\n\nclass ITimeProviderTest extends TestCase\n{\n    use MightNotMakeAssertions;\n\n    /**\n     * @return void\n     */\n    public function testEnsureCorrectTimeDoesNotThrowForCorrectTime()\n    {\n        $tpr1 = new TestTimeProvider(123);\n        $tpr2 = new TestTimeProvider(128);\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, null, $tpr1);\n        $tfa->ensureCorrectTime(array($tpr2));   // 128 - 123 = 5 => within default leniency\n\n        $this->noAssertionsMade();\n    }\n\n    /**\n     * @return void\n     */\n    public function testEnsureCorrectTimeThrowsOnIncorrectTime()\n    {\n        $tpr1 = new TestTimeProvider(123);\n        $tpr2 = new TestTimeProvider(124);\n\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1', null, null, $tpr1);\n\n        $this->expectException(TwoFactorAuthException::class);\n\n        $tfa->ensureCorrectTime(array($tpr2), 0);    // We force a leniency of 0, 124-123 = 1 so this should throw\n    }\n\n    /**\n     * @return void\n     */\n    public function testEnsureDefaultTimeProviderReturnsCorrectTime()\n    {\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1');\n        $tfa->ensureCorrectTime(array(new TestTimeProvider(time())), 1);    // Use a leniency of 1, should the time change between both time() calls\n\n        $this->noAssertionsMade();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/Providers/Time/TestTimeProvider.php",
    "content": "<?php\n\nnamespace Tests\\Providers\\Time;\n\nuse RobThree\\Auth\\Providers\\Time\\ITimeProvider;\n\nclass TestTimeProvider implements ITimeProvider\n{\n    /** @var int */\n    private $time;\n\n    /**\n     * @param int $time\n     */\n    function __construct($time)\n    {\n        $this->time = $time;\n    }\n\n    /**\n     * {@inheritdoc}\n     */\n    public function getTime()\n    {\n        return $this->time;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/robthree/twofactorauth/tests/TwoFactorAuthTest.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse PHPUnit\\Framework\\TestCase;\nuse RobThree\\Auth\\TwoFactorAuthException;\nuse RobThree\\Auth\\TwoFactorAuth;\n\nclass TwoFactorAuthTest extends TestCase\n{\n    use MightNotMakeAssertions;\n\n    /**\n     * @return void\n     */\n    public function testConstructorThrowsOnInvalidDigits()\n    {\n        $this->expectException(TwoFactorAuthException::class);\n\n        new TwoFactorAuth('Test', 0);\n    }\n\n    /**\n     * @return void\n     */\n    public function testConstructorThrowsOnInvalidPeriod()\n    {\n        $this->expectException(TwoFactorAuthException::class);\n\n        new TwoFactorAuth('Test', 6, 0);\n    }\n\n    /**\n     * @return void\n     */\n    public function testConstructorThrowsOnInvalidAlgorithm()\n    {\n        $this->expectException(TwoFactorAuthException::class);\n\n        new TwoFactorAuth('Test', 6, 30, 'xxx');\n    }\n\n    /**\n     * @return void\n     */\n    public function testGetCodeReturnsCorrectResults()\n    {\n        $tfa = new TwoFactorAuth('Test');\n        $this->assertEquals('543160', $tfa->getCode('VMR466AB62ZBOKHE', 1426847216));\n        $this->assertEquals('538532', $tfa->getCode('VMR466AB62ZBOKHE', 0));\n    }\n\n    /**\n     * @return void\n     */\n    public function testEnsureAllTimeProvidersReturnCorrectTime()\n    {\n        $tfa = new TwoFactorAuth('Test', 6, 30, 'sha1');\n        $tfa->ensureCorrectTime(array(\n            new \\RobThree\\Auth\\Providers\\Time\\NTPTimeProvider(),                         // Uses pool.ntp.org by default\n            //new \\RobThree\\Auth\\Providers\\Time\\NTPTimeProvider('time.google.com'),      // Somehow time.google.com and time.windows.com make travis timeout??\n            new \\RobThree\\Auth\\Providers\\Time\\HttpTimeProvider(),                        // Uses google.com by default\n            //new \\RobThree\\Auth\\Providers\\Time\\HttpTimeProvider('https://github.com'),  // github.com will periodically report times that are off by more than 5 sec\n            new \\RobThree\\Auth\\Providers\\Time\\HttpTimeProvider('https://yahoo.com'),\n        ));\n        $this->noAssertionsMade();\n    }\n\n    /**\n     * @return void\n     */\n    public function testVerifyCodeWorksCorrectly()\n    {\n        $tfa = new TwoFactorAuth('Test', 6, 30);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847190));\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 0, 1426847190 + 29));\t//Test discrepancy\n        $this->assertFalse($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 0, 1426847190 + 30));\t//Test discrepancy\n        $this->assertFalse($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 0, 1426847190 - 1));\t//Test discrepancy\n\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 + 0));\t//Test discrepancy\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 + 35));\t//Test discrepancy\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 - 35));\t//Test discrepancy\n\n        $this->assertFalse($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 + 65));\t//Test discrepancy\n        $this->assertFalse($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 1, 1426847205 - 65));\t//Test discrepancy\n\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 2, 1426847205 + 65));\t//Test discrepancy\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 2, 1426847205 - 65));\t//Test discrepancy\n    }\n\n    /**\n     * @return void\n     */\n    public function testVerifyCorrectTimeSliceIsReturned()\n    {\n        $tfa = new TwoFactorAuth('Test', 6, 30);\n\n        // We test with discrepancy 3 (so total of 7 codes: c-3, c-2, c-1, c, c+1, c+2, c+3\n        // Ensure each corresponding timeslice is returned correctly\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '534113', 3, 1426847190, $timeslice1));\n        $this->assertEquals(47561570, $timeslice1);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '819652', 3, 1426847190, $timeslice2));\n        $this->assertEquals(47561571, $timeslice2);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '915954', 3, 1426847190, $timeslice3));\n        $this->assertEquals(47561572, $timeslice3);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '543160', 3, 1426847190, $timeslice4));\n        $this->assertEquals(47561573, $timeslice4);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '348401', 3, 1426847190, $timeslice5));\n        $this->assertEquals(47561574, $timeslice5);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '648525', 3, 1426847190, $timeslice6));\n        $this->assertEquals(47561575, $timeslice6);\n        $this->assertTrue($tfa->verifyCode('VMR466AB62ZBOKHE', '170645', 3, 1426847190, $timeslice7));\n        $this->assertEquals(47561576, $timeslice7);\n\n        // Incorrect code should return false and a 0 timeslice\n        $this->assertFalse($tfa->verifyCode('VMR466AB62ZBOKHE', '111111', 3, 1426847190, $timeslice8));\n        $this->assertEquals(0, $timeslice8);\n    }\n\n    /**\n     * @return void\n     */\n    public function testGetCodeThrowsOnInvalidBase32String1()\n    {\n        $tfa = new TwoFactorAuth('Test');\n\n        $this->expectException(TwoFactorAuthException::class);\n\n        $tfa->getCode('FOO1BAR8BAZ9');    //1, 8 & 9 are invalid chars\n    }\n\n    /**\n     * @return void\n     */\n    public function testGetCodeThrowsOnInvalidBase32String2()\n    {\n        $tfa = new TwoFactorAuth('Test');\n\n        $this->expectException(TwoFactorAuthException::class);\n\n        $tfa->getCode('mzxw6===');        //Lowercase\n    }\n\n    /**\n     * @return void\n     */\n    public function testKnownBase32DecodeTestVectors()\n    {\n        // We usually don't test internals (e.g. privates) but since we rely heavily on base32 decoding and don't want\n        // to expose this method nor do we want to give people the possibility of implementing / providing their own base32\n        // decoding/decoder (as we do with Rng/QR providers for example) we simply test the private base32Decode() method\n        // with some known testvectors **only** to ensure base32 decoding works correctly following RFC's so there won't\n        // be any bugs hiding in there. We **could** 'fool' ourselves by calling the public getCode() method (which uses\n        // base32decode internally) and then make sure getCode's output (in digits) equals expected output since that would\n        // mean the base32Decode() works as expected but that **could** hide some subtle bug(s) in decoding the base32 string.\n\n        // \"In general, you don't want to break any encapsulation for the sake of testing (or as Mom used to say, \"don't\n        // expose your privates!\"). Most of the time, you should be able to test a class by exercising its public methods.\"\n        //                                                           Dave Thomas and Andy Hunt -- \"Pragmatic Unit Testing\n        $tfa = new TwoFactorAuth('Test');\n\n        $method = new \\ReflectionMethod(TwoFactorAuth::class, 'base32Decode');\n        $method->setAccessible(true);\n\n        // Test vectors from: https://tools.ietf.org/html/rfc4648#page-12\n        $this->assertEquals('', $method->invoke($tfa, ''));\n        $this->assertEquals('f', $method->invoke($tfa, 'MY======'));\n        $this->assertEquals('fo', $method->invoke($tfa, 'MZXQ===='));\n        $this->assertEquals('foo', $method->invoke($tfa, 'MZXW6==='));\n        $this->assertEquals('foob', $method->invoke($tfa, 'MZXW6YQ='));\n        $this->assertEquals('fooba', $method->invoke($tfa, 'MZXW6YTB'));\n        $this->assertEquals('foobar', $method->invoke($tfa, 'MZXW6YTBOI======'));\n    }\n\n    /**\n     * @return void\n     */\n    public function testKnownBase32DecodeUnpaddedTestVectors()\n    {\n        // See testKnownBase32DecodeTestVectors() for the rationale behind testing the private base32Decode() method.\n        // This test ensures that strings without the padding-char ('=') are also decoded correctly.\n        // https://tools.ietf.org/html/rfc4648#page-4:\n        //   \"In some circumstances, the use of padding (\"=\") in base-encoded data is not required or used.\"\n        $tfa = new TwoFactorAuth('Test');\n\n        $method = new \\ReflectionMethod(TwoFactorAuth::class, 'base32Decode');\n        $method->setAccessible(true);\n\n        // Test vectors from: https://tools.ietf.org/html/rfc4648#page-12\n        $this->assertEquals('', $method->invoke($tfa, ''));\n        $this->assertEquals('f', $method->invoke($tfa, 'MY'));\n        $this->assertEquals('fo', $method->invoke($tfa, 'MZXQ'));\n        $this->assertEquals('foo', $method->invoke($tfa, 'MZXW6'));\n        $this->assertEquals('foob', $method->invoke($tfa, 'MZXW6YQ'));\n        $this->assertEquals('fooba', $method->invoke($tfa, 'MZXW6YTB'));\n        $this->assertEquals('foobar', $method->invoke($tfa, 'MZXW6YTBOI'));\n    }\n\n    /**\n     * @return void\n     */\n    public function testKnownTestVectors_sha1()\n    {\n        //Known test vectors for SHA1: https://tools.ietf.org/html/rfc6238#page-15\n        $secret = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ';   //== base32encode('12345678901234567890')\n        $tfa = new TwoFactorAuth('Test', 8, 30, 'sha1');\n        $this->assertEquals('94287082', $tfa->getCode($secret, 59));\n        $this->assertEquals('07081804', $tfa->getCode($secret, 1111111109));\n        $this->assertEquals('14050471', $tfa->getCode($secret, 1111111111));\n        $this->assertEquals('89005924', $tfa->getCode($secret, 1234567890));\n        $this->assertEquals('69279037', $tfa->getCode($secret, 2000000000));\n        $this->assertEquals('65353130', $tfa->getCode($secret, 20000000000));\n    }\n\n    /**\n     * @return void\n     */\n    public function testKnownTestVectors_sha256()\n    {\n        //Known test vectors for SHA256: https://tools.ietf.org/html/rfc6238#page-15\n        $secret = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZA';   //== base32encode('12345678901234567890123456789012')\n        $tfa = new TwoFactorAuth('Test', 8, 30, 'sha256');\n        $this->assertEquals('46119246', $tfa->getCode($secret, 59));\n        $this->assertEquals('68084774', $tfa->getCode($secret, 1111111109));\n        $this->assertEquals('67062674', $tfa->getCode($secret, 1111111111));\n        $this->assertEquals('91819424', $tfa->getCode($secret, 1234567890));\n        $this->assertEquals('90698825', $tfa->getCode($secret, 2000000000));\n        $this->assertEquals('77737706', $tfa->getCode($secret, 20000000000));\n    }\n\n    /**\n     * @return void\n     */\n    public function testKnownTestVectors_sha512()\n    {\n        //Known test vectors for SHA512: https://tools.ietf.org/html/rfc6238#page-15\n        $secret = 'GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQGEZDGNA';   //== base32encode('1234567890123456789012345678901234567890123456789012345678901234')\n        $tfa = new TwoFactorAuth('Test', 8, 30, 'sha512');\n        $this->assertEquals('90693936', $tfa->getCode($secret, 59));\n        $this->assertEquals('25091201', $tfa->getCode($secret, 1111111109));\n        $this->assertEquals('99943326', $tfa->getCode($secret, 1111111111));\n        $this->assertEquals('93441116', $tfa->getCode($secret, 1234567890));\n        $this->assertEquals('38618901', $tfa->getCode($secret, 2000000000));\n        $this->assertEquals('47863826', $tfa->getCode($secret, 20000000000));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/.gitignore",
    "content": "/build\n/vendor\ncomposer.phar\ncomposer.lock"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/.scrutinizer.yml",
    "content": "filter:\n    excluded_paths: [test/*]\nchecks:\n    php:\n        code_rating: true\n        remove_extra_empty_lines: true\n        remove_php_closing_tag: true\n        remove_trailing_whitespace: true\n        fix_use_statements:\n            remove_unused: true\n            preserve_multiple: false\n            preserve_blanklines: true\n            order_alphabetically: true\n        fix_php_opening_tag: true\n        fix_linefeed: true\n        fix_line_ending: true\n        fix_identation_4spaces: true\n        fix_doc_comments: true\ntools:\n    external_code_coverage:\n        timeout: 600\n        runs: 2\n    php_analyzer: true\n    php_code_coverage: false\n    php_code_sniffer:\n        config:\n            standard: PSR2\n        filter:\n            paths: ['src']\n    php_loc:\n        enabled: true\n        excluded_dirs: [examples, vendor, test]\n    php_cpd:\n        enabled: true\n        excluded_dirs: [examples, vendor, test]\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/.travis.yml",
    "content": "language: php\n\nsudo: false\n\nphp:\n  - 7.2\n  - 7.3\n  - 7.4\n  - 8.0\n  - 8.1\n  - 8.2\n\nmatrix:\n  include:\n    - php: 5.6\n      env: 'COMPOSER_FLAGS=\"--prefer-stable --prefer-lowest\"'\n\nbefore_script:\n  - travis_retry composer self-update\n  - travis_retry composer install --no-interaction --prefer-source --dev\n  - travis_retry phpenv rehash\n\nscript:\n  - ./vendor/bin/phpcs --standard=psr2 src/\n  - ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover\n\nafter_script:\n  - wget https://scrutinizer-ci.com/ocular.phar\n  - php ocular.phar code-coverage:upload --format=php-clover coverage.clover\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/CHANGELOG.md",
    "content": "# Changelog\nAll Notable changes to `oauth2-keycloak` will be documented in this file\n\n## 2.1.0 - 2018-03-12\n\n### Added\n- Introduce `getLogoutUrl` method on provider to build and return and authorized logout url - thanks @FlxPeters\n\n### Deprecated\n- Nothing\n\n### Fixed\n- Nothing\n\n### Removed\n- Nothing\n\n### Security\n- Nothing\n\n## 2.0.0 - 2017-01-25\n\n### Added\n- PHP 7.1 Support\n\n### Deprecated\n- Nothing\n\n### Fixed\n- Nothing\n\n### Removed\n- PHP 5.5 Support\n\n### Security\n- Nothing\n\n## 1.0.0 - 2017-01-25\n\nBump for base package parity\n\n## 0.2.0 - 2016-12-07\n\n### Added\n- JSON Web Token decryption support\n\n### Deprecated\n- Nothing\n\n### Fixed\n- Nothing\n\n### Removed\n- Nothing\n\n### Security\n- Nothing\n\n## 0.1.0 - 2015-08-31\n\n### Added\n- Initial release!\n\n### Deprecated\n- Nothing\n\n### Fixed\n- Nothing\n\n### Removed\n- Nothing\n\n### Security\n- Nothing\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/CONTRIBUTING.md",
    "content": "# Contributing\n\nContributions are **welcome** and will be fully **credited**.\n\nWe accept contributions via Pull Requests on [Github](https://github.com/stevenmaguire/oauth2-keycloak).\n\n\n## Pull Requests\n\n- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer).\n\n- **Add tests!** - Your patch won't be accepted if it doesn't have tests.\n\n- **Document any change in behaviour** - Make sure the README and any other relevant documentation are kept up-to-date.\n\n- **Consider our release cycle** - We try to follow SemVer. Randomly breaking public APIs is not an option.\n\n- **Create topic branches** - Don't ask us to pull from your master branch.\n\n- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.\n\n- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please squash them before submitting.\n\n- **Ensure tests pass!** - Please run the tests (see below) before submitting your pull request, and make sure they pass. We won't accept a patch until all tests pass.\n\n- **Ensure no coding standards violations** - Please run PHP Code Sniffer using the PSR-2 standard (see below) before submitting your pull request. A violation will cause the build to fail, so please make sure there are no violations. We can't accept a patch if the build fails.\n\n\n## Running Tests\n\n``` bash\n$ ./vendor/bin/phpunit\n```\n\n\n## Running PHP Code Sniffer\n\n``` bash\n$ ./vendor/bin/phpcs src --standard=psr2 -sp\n```\n\n**Happy coding**!\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Steven Maguire\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/README.md",
    "content": "# Keycloak Provider for OAuth 2.0 Client\n[![Latest Version](https://img.shields.io/github/release/stevenmaguire/oauth2-keycloak.svg?style=flat-square)](https://github.com/stevenmaguire/oauth2-keycloak/releases)\n[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)\n[![Build Status](https://img.shields.io/travis/stevenmaguire/oauth2-keycloak/master.svg?style=flat-square)](https://travis-ci.org/stevenmaguire/oauth2-keycloak)\n[![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/stevenmaguire/oauth2-keycloak.svg?style=flat-square)](https://scrutinizer-ci.com/g/stevenmaguire/oauth2-keycloak/code-structure)\n[![Quality Score](https://img.shields.io/scrutinizer/g/stevenmaguire/oauth2-keycloak.svg?style=flat-square)](https://scrutinizer-ci.com/g/stevenmaguire/oauth2-keycloak)\n[![Total Downloads](https://img.shields.io/packagist/dt/stevenmaguire/oauth2-keycloak.svg?style=flat-square)](https://packagist.org/packages/stevenmaguire/oauth2-keycloak)\n\nThis package provides Keycloak OAuth 2.0 support for the PHP League's [OAuth 2.0 Client](https://github.com/thephpleague/oauth2-client).\n\n## Installation\n\nTo install, use composer:\n\n```\ncomposer require stevenmaguire/oauth2-keycloak\n```\n\n## Usage\n\nUsage is the same as The League's OAuth client, using `\\Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak` as the provider.\n\nUse `authServerUrl` to specify the Keycloak server URL. You can lookup the correct value from the Keycloak client installer JSON under `auth-server-url`, eg. `http://localhost:8080/auth`.\n\nUse `realm` to specify the Keycloak realm name. You can lookup the correct value from the Keycloak client installer JSON under `resource`, eg. `master`.\n\n### Authorization Code Flow\n\n```php\n$provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\n    'authServerUrl'         => '{keycloak-server-url}',\n    'realm'                 => '{keycloak-realm}',\n    'clientId'              => '{keycloak-client-id}',\n    'clientSecret'          => '{keycloak-client-secret}',\n    'redirectUri'           => 'https://example.com/callback-url',\n    'encryptionAlgorithm'   => 'RS256',                             // optional\n    'encryptionKeyPath'     => '../key.pem'                         // optional\n    'encryptionKey'         => 'contents_of_key_or_certificate'     // optional\n    'version'               => '20.0.1',                            // optional\n]);\n\nif (!isset($_GET['code'])) {\n\n    // If we don't have an authorization code then get one\n    $authUrl = $provider->getAuthorizationUrl();\n    $_SESSION['oauth2state'] = $provider->getState();\n    header('Location: '.$authUrl);\n    exit;\n\n// Check given state against previously stored one to mitigate CSRF attack\n} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n\n    unset($_SESSION['oauth2state']);\n    exit('Invalid state, make sure HTTP sessions are enabled.');\n\n} else {\n\n    // Try to get an access token (using the authorization coe grant)\n    try {\n        $token = $provider->getAccessToken('authorization_code', [\n            'code' => $_GET['code']\n        ]);\n    } catch (Exception $e) {\n        exit('Failed to get access token: '.$e->getMessage());\n    }\n\n    // Optional: Now you have a token you can look up a users profile data\n    try {\n\n        // We got an access token, let's now get the user's details\n        $user = $provider->getResourceOwner($token);\n\n        // Use these details to create a new profile\n        printf('Hello %s!', $user->getName());\n\n    } catch (Exception $e) {\n        exit('Failed to get resource owner: '.$e->getMessage());\n    }\n\n    // Use this to interact with an API on the users behalf\n    echo $token->getToken();\n}\n```\n\n### Refreshing a Token\n\n```php\n$provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\n    'authServerUrl'     => '{keycloak-server-url}',\n    'realm'             => '{keycloak-realm}',\n    'clientId'          => '{keycloak-client-id}',\n    'clientSecret'      => '{keycloak-client-secret}',\n    'redirectUri'       => 'https://example.com/callback-url',\n]);\n\n$token = $provider->getAccessToken('refresh_token', ['refresh_token' => $token->getRefreshToken()]);\n```\n\n### Handling encryption\n\nIf you've configured your Keycloak instance to use encryption, there are some advanced options available to you.\n\n#### Configure the provider to use the same encryption algorithm\n\n```php\n$provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\n    // ...\n    'encryptionAlgorithm'   => 'RS256',\n]);\n```\n\nor\n\n```php\n$provider->setEncryptionAlgorithm('RS256');\n```\n\n#### Configure the provider to use the expected decryption public key or certificate\n\n##### By key value\n\n```php\n$key = \"-----BEGIN PUBLIC KEY-----\\n....\\n-----END PUBLIC KEY-----\";\n// or\n// $key = \"-----BEGIN CERTIFICATE-----\\n....\\n-----END CERTIFICATE-----\";\n\n$provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\n    // ...\n    'encryptionKey'   => $key,\n]);\n```\n\nor\n\n```php\n$provider->setEncryptionKey($key);\n```\n\n##### By key path\n\n```php\n$keyPath = '../key.pem';\n\n$provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\n    // ...\n    'encryptionKeyPath'   => $keyPath,\n]);\n```\n\nor\n\n```php\n$provider->setEncryptionKeyPath($keyPath);\n```\n\n## Testing\n\n``` bash\n$ ./vendor/bin/phpunit\n```\n\n## Contributing\n\nPlease see [CONTRIBUTING](https://github.com/stevenmaguire/oauth2-keycloak/blob/master/CONTRIBUTING.md) for details.\n\n\n## Credits\n\n- [Steven Maguire](https://github.com/stevenmaguire)\n- [Martin Stefan](https://github.com/mstefan21)\n- [All Contributors](https://github.com/stevenmaguire/oauth2-keycloak/contributors)\n\n\n## License\n\nThe MIT License (MIT). Please see [License File](https://github.com/stevenmaguire/oauth2-keycloak/blob/master/LICENSE) for more information.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/composer.json",
    "content": "{\n    \"name\": \"stevenmaguire/oauth2-keycloak\",\n    \"description\": \"Keycloak OAuth 2.0 Client Provider for The PHP League OAuth2-Client\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Steven Maguire\",\n            \"email\": \"stevenmaguire@gmail.com\",\n            \"homepage\": \"https://github.com/stevenmaguire\"\n        }\n    ],\n    \"keywords\": [\n        \"oauth\",\n        \"oauth2\",\n        \"client\",\n        \"authorization\",\n        \"authorisation\",\n        \"keycloak\"\n    ],\n    \"require\": {\n        \"php\": \"~7.2 || ~8.0\",\n        \"league/oauth2-client\": \"^2.0\",\n        \"firebase/php-jwt\": \"^4.0 || ^5.0 || ^6.0\"\n    },\n    \"require-dev\": {\n        \"phpunit/phpunit\": \"~9.6.4\",\n        \"mockery/mockery\": \"~1.5.0\",\n        \"squizlabs/php_codesniffer\": \"~3.7.0\"\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"Stevenmaguire\\\\OAuth2\\\\Client\\\\\": \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Stevenmaguire\\\\OAuth2\\\\Client\\\\Test\\\\\": \"test/src/\"\n        }\n    },\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-master\": \"1.0.x-dev\"\n        }\n    },\n    \"scripts\": {\n        \"test\": [\n            \"@putenv XDEBUG_MODE=coverage\",\n            \"phpunit --colors=always\"\n        ]\n    }\n}"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/examples/index.php",
    "content": "<?php\n\nrequire 'vendor/autoload.php';\n\nsession_start();\n\n$provider = new Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak([\n    'authServerUrl'             => '',\n    'realm'                     => '',\n    'clientId'                  => '',\n    'clientSecret'              => '',\n    'redirectUri'               => '',\n    'encryptionAlgorithm'       => null,\n    'encryptionKey'             => null,\n    'encryptionKeyPath'         => null\n]);\n\nif (!isset($_GET['code'])) {\n    // If we don't have an authorization code then get one\n    $authUrl = $provider->getAuthorizationUrl();\n    $_SESSION['oauth2state'] = $provider->getState();\n    header('Location: '.$authUrl);\n    exit;\n\n// Check given state against previously stored one to mitigate CSRF attack\n} elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n    unset($_SESSION['oauth2state']);\n    exit('Invalid state, make sure HTTP sessions are enabled.');\n} else {\n    // Try to get an access token (using the authorization coe grant)\n    try {\n        $token = $provider->getAccessToken('authorization_code', [\n            'code' => $_GET['code']\n        ]);\n    } catch (Exception $e) {\n        exit('Failed to get access token: '.$e->getMessage());\n    }\n\n    // Optional: Now you have a token you can look up a users profile data\n    try {\n\n        // We got an access token, let's now get the user's details\n        $user = $provider->getResourceOwner($token);\n        // Use these details to create a new profile\n        printf('Hello %s!\\n<br>', $user->getName());\n\n    } catch (Exception $e) {\n        exit('Failed to get resource owner: '.$e->getMessage());\n    }\n\n    // Use this to interact with an API on the users behalf\n    echo $token->getToken();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/phpunit.xml.dist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"false\"\n         failOnRisky=\"true\"\n         failOnWarning=\"true\"\n>\n    <coverage includeUncoveredFiles=\"true\"\n              pathCoverage=\"false\"\n              ignoreDeprecatedCodeUnits=\"true\"\n              disableCodeCoverageIgnore=\"true\">\n        <include>\n            <directory suffix=\".php\">src</directory>\n        </include>\n        <exclude>\n            <directory suffix=\".php\">vendor</directory>\n            <file>src/autoload.php</file>\n        </exclude>\n        <report>\n            <html outputDirectory=\"./build/coverage/html\"\n                  lowUpperBound=\"35\"\n                  highLowerBound=\"70\"/>\n            <clover outputFile=\"./build/coverage/log/coverage.xml\"/>\n        </report>\n    </coverage>\n    <testsuites>\n        <testsuite name=\"Package Test Suite\">\n            <directory suffix=\".php\">./test/</directory>\n        </testsuite>\n    </testsuites>\n</phpunit>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/src/Provider/Exception/EncryptionConfigurationException.php",
    "content": "<?php\n\nnamespace Stevenmaguire\\OAuth2\\Client\\Provider\\Exception;\n\nuse Exception;\n\nclass EncryptionConfigurationException extends Exception\n{\n    /**\n     * Returns properly formatted exception when response decryption fails.\n     *\n     * @return \\Stevenmaguire\\OAuth2\\Client\\Provider\\Exception\\EncryptionConfigurationException\n     */\n    public static function undeterminedEncryption()\n    {\n        return new static(\n            'The given response may be encrypted and sufficient '.\n            'encryption configuration has not been provided.',\n            400\n        );\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/src/Provider/Keycloak.php",
    "content": "<?php\n\nnamespace Stevenmaguire\\OAuth2\\Client\\Provider;\n\nuse Exception;\nuse Firebase\\JWT\\JWT;\nuse League\\OAuth2\\Client\\Provider\\AbstractProvider;\nuse League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException;\nuse League\\OAuth2\\Client\\Token\\AccessToken;\nuse League\\OAuth2\\Client\\Tool\\BearerAuthorizationTrait;\nuse Psr\\Http\\Message\\ResponseInterface;\nuse Stevenmaguire\\OAuth2\\Client\\Provider\\Exception\\EncryptionConfigurationException;\nuse UnexpectedValueException;\n\nclass Keycloak extends AbstractProvider\n{\n    use BearerAuthorizationTrait;\n\n    /**\n     * Keycloak URL, eg. http://localhost:8080/auth.\n     *\n     * @var string\n     */\n    public $authServerUrl = null;\n\n    /**\n     * Realm name, eg. demo.\n     *\n     * @var string\n     */\n    public $realm = null;\n\n    /**\n     * Encryption algorithm.\n     *\n     * You must specify supported algorithms for your application. See\n     * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40\n     * for a list of spec-compliant algorithms.\n     *\n     * @var string\n     */\n    public $encryptionAlgorithm = null;\n\n    /**\n     * Encryption key.\n     *\n     * @var string\n     */\n    public $encryptionKey = null;\n\n    /**\n      * Keycloak version.\n      *\n      * @var string\n      */\n    public $version = null;\n\n    /**\n     * Constructs an OAuth 2.0 service provider.\n     *\n     * @param array $options An array of options to set on this provider.\n     *     Options include `clientId`, `clientSecret`, `redirectUri`, and `state`.\n     *     Individual providers may introduce more options, as needed.\n     * @param array $collaborators An array of collaborators that may be used to\n     *     override this provider's default behavior. Collaborators include\n     *     `grantFactory`, `requestFactory`, `httpClient`, and `randomFactory`.\n     *     Individual providers may introduce more collaborators, as needed.\n     */\n    public function __construct(array $options = [], array $collaborators = [])\n    {\n        if (isset($options['encryptionKeyPath'])) {\n            $this->setEncryptionKeyPath($options['encryptionKeyPath']);\n            unset($options['encryptionKeyPath']);\n        }\n\n        if (isset($options['version'])) {\n            $this->setVersion($options['version']);\n        }\n\n        parent::__construct($options, $collaborators);\n    }\n\n    /**\n     * Attempts to decrypt the given response.\n     *\n     * @param  string|array|null $response\n     *\n     * @return string|array|null\n     */\n    public function decryptResponse($response)\n    {\n        if (!is_string($response)) {\n            return $response;\n        }\n\n        if ($this->usesEncryption()) {\n            return json_decode(\n                json_encode(\n                    JWT::decode(\n                        $response,\n                        $this->encryptionKey,\n                        array($this->encryptionAlgorithm)\n                    )\n                ),\n                true\n            );\n        }\n\n        throw EncryptionConfigurationException::undeterminedEncryption();\n    }\n\n    /**\n     * Get authorization url to begin OAuth flow\n     *\n     * @return string\n     */\n    public function getBaseAuthorizationUrl()\n    {\n        return $this->getBaseUrlWithRealm().'/protocol/openid-connect/auth';\n    }\n\n    /**\n     * Get access token url to retrieve token\n     *\n     * @param  array $params\n     *\n     * @return string\n     */\n    public function getBaseAccessTokenUrl(array $params)\n    {\n        return $this->getBaseUrlWithRealm().'/protocol/openid-connect/token';\n    }\n\n    /**\n     * Get provider url to fetch user details\n     *\n     * @param  AccessToken $token\n     *\n     * @return string\n     */\n    public function getResourceOwnerDetailsUrl(AccessToken $token)\n    {\n        return $this->getBaseUrlWithRealm().'/protocol/openid-connect/userinfo';\n    }\n\n    /**\n     * Builds the logout URL.\n     *\n     * @param array $options\n     * @return string Authorization URL\n     */\n    public function getLogoutUrl(array $options = [])\n    {\n        $base = $this->getBaseLogoutUrl();\n        $params = $this->getAuthorizationParameters($options);\n\n        // Starting with keycloak 18.0.0, the parameter redirect_uri is no longer supported on logout.\n        // As of this version the parameter is called post_logout_redirect_uri. In addition to this\n        // a parameter id_token_hint has to be provided.\n        if ($this->validateGteVersion('18.0.0')) {\n            if (isset($options['access_token']) === true) {\n                $accessToken = $options['access_token'];\n\n                $params['id_token_hint'] = $accessToken->getValues()['id_token'];\n                $params['post_logout_redirect_uri'] = $params['redirect_uri'];\n            }\n\n            unset($params['redirect_uri']);\n        }\n\n        $query = $this->getAuthorizationQuery($params);\n        return $this->appendQuery($base, $query);\n    }\n\n    /**\n     * Get logout url to logout of session token\n     *\n     * @return string\n     */\n    private function getBaseLogoutUrl()\n    {\n        return $this->getBaseUrlWithRealm() . '/protocol/openid-connect/logout';\n    }\n\n    /**\n     * Creates base url from provider configuration.\n     *\n     * @return string\n     */\n    protected function getBaseUrlWithRealm()\n    {\n        return $this->authServerUrl.'/realms/'.$this->realm;\n    }\n\n    /**\n     * Get the default scopes used by this provider.\n     *\n     * This should not be a complete list of all scopes, but the minimum\n     * required for the provider user interface!\n     *\n     * @return string[]\n     */\n    protected function getDefaultScopes()\n    {\n        $scopes = [\n            'profile',\n            'email'\n        ];\n        if ($this->validateGteVersion('20.0.0')) {\n            $scopes[] = 'openid';\n        }\n        return $scopes;\n    }\n\n    /**\n     * Returns the string that should be used to separate scopes when building\n     * the URL for requesting an access token.\n     *\n     * @return string Scope separator, defaults to ','\n     */\n    protected function getScopeSeparator()\n    {\n        return ' ';\n    }\n\n\n    /**\n     * Check a provider response for errors.\n     *\n     * @throws IdentityProviderException\n     * @param  ResponseInterface $response\n     * @param  string $data Parsed response data\n     * @return void\n     */\n    protected function checkResponse(ResponseInterface $response, $data)\n    {\n        if (!empty($data['error'])) {\n            $error = $data['error'];\n            if (isset($data['error_description'])) {\n                $error.=': '.$data['error_description'];\n            }\n            throw new IdentityProviderException($error, 0, $data);\n        }\n    }\n\n    /**\n     * Generate a user object from a successful user details request.\n     *\n     * @param array $response\n     * @param AccessToken $token\n     * @return KeycloakResourceOwner\n     */\n    protected function createResourceOwner(array $response, AccessToken $token)\n    {\n        return new KeycloakResourceOwner($response);\n    }\n\n    /**\n     * Requests and returns the resource owner of given access token.\n     *\n     * @param  AccessToken $token\n     * @return KeycloakResourceOwner\n     * @throws EncryptionConfigurationException\n     */\n    public function getResourceOwner(AccessToken $token)\n    {\n        $response = $this->fetchResourceOwnerDetails($token);\n\n        // We are always getting an array. We have to check if it is\n        // the array we created\n        if (array_key_exists('jwt', $response)) {\n            $response = $response['jwt'];\n        }\n\n        $response = $this->decryptResponse($response);\n\n        return $this->createResourceOwner($response, $token);\n    }\n\n    /**\n     * Updates expected encryption algorithm of Keycloak instance.\n     *\n     * @param string  $encryptionAlgorithm\n     *\n     * @return Keycloak\n     */\n    public function setEncryptionAlgorithm($encryptionAlgorithm)\n    {\n        $this->encryptionAlgorithm = $encryptionAlgorithm;\n\n        return $this;\n    }\n\n    /**\n     * Updates expected encryption key of Keycloak instance.\n     *\n     * @param string  $encryptionKey\n     *\n     * @return Keycloak\n     */\n    public function setEncryptionKey($encryptionKey)\n    {\n        $this->encryptionKey = $encryptionKey;\n\n        return $this;\n    }\n\n    /**\n     * Updates expected encryption key of Keycloak instance to content of given\n     * file path.\n     *\n     * @param string  $encryptionKeyPath\n     *\n     * @return Keycloak\n     */\n    public function setEncryptionKeyPath($encryptionKeyPath)\n    {\n        try {\n            $this->encryptionKey = file_get_contents($encryptionKeyPath);\n        } catch (Exception $e) {\n            // Not sure how to handle this yet.\n        }\n\n        return $this;\n    }\n\n     /**\n      * Updates the keycloak version.\n      *\n      * @param string  $version\n      *\n      * @return Keycloak\n      */\n    public function setVersion($version)\n    {\n        $this->version = $version;\n\n        return $this;\n    }\n\n    /**\n     * Checks if provider is configured to use encryption.\n     *\n     * @return bool\n     */\n    public function usesEncryption()\n    {\n        return (bool) $this->encryptionAlgorithm && $this->encryptionKey;\n    }\n\n    /**\n     * Parses the response according to its content-type header.\n     *\n     * @throws UnexpectedValueException\n     * @param  ResponseInterface $response\n     * @return array\n     */\n    protected function parseResponse(ResponseInterface $response)\n    {\n        // We have a problem with keycloak when the userinfo responses\n        // with a jwt token\n        // Because it just return a jwt as string with the header\n        // application/jwt\n        // This can't be parsed to a array\n        // Dont know why this function only allow an array as return value...\n        $content = (string) $response->getBody();\n        $type = $this->getContentType($response);\n\n        if (strpos($type, 'jwt') !== false) {\n            // Here we make the temporary array\n            return ['jwt' => $content];\n        }\n\n        return parent::parseResponse($response);\n    }\n\n    /**\n     * Validate if version is greater or equal\n     *\n     * @param string $version\n     * @return bool\n     */\n    private function validateGteVersion($version)\n    {\n        return (isset($this->version) && version_compare($this->version, $version, '>='));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/src/Provider/KeycloakResourceOwner.php",
    "content": "<?php\n\nnamespace Stevenmaguire\\OAuth2\\Client\\Provider;\n\nuse League\\OAuth2\\Client\\Provider\\ResourceOwnerInterface;\n\nclass KeycloakResourceOwner implements ResourceOwnerInterface\n{\n    /**\n     * Raw response\n     *\n     * @var array\n     */\n    protected $response;\n\n    /**\n     * Creates new resource owner.\n     *\n     * @param array  $response\n     */\n    public function __construct(array $response = array())\n    {\n        $this->response = $response;\n    }\n\n    /**\n     * Get resource owner id\n     *\n     * @return string|null\n     */\n    public function getId()\n    {\n        return \\array_key_exists('sub', $this->response) ? $this->response['sub'] : null;\n    }\n\n    /**\n     * Get resource owner email\n     *\n     * @return string|null\n     */\n    public function getEmail()\n    {\n        return \\array_key_exists('email', $this->response) ? $this->response['email'] : null;\n    }\n\n    /**\n     * Get resource owner name\n     *\n     * @return string|null\n     */\n    public function getName()\n    {\n        return \\array_key_exists('name', $this->response) ? $this->response['name'] : null;\n    }\n\n    /**\n     * Return all of the owner details available as an array.\n     *\n     * @return array\n     */\n    public function toArray()\n    {\n        return $this->response;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/stevenmaguire/oauth2-keycloak/test/src/Provider/KeycloakTest.php",
    "content": "<?php\n\nnamespace\n{\n    $mockFileGetContents = null;\n}\n\nnamespace Stevenmaguire\\OAuth2\\Client\\Provider\n{\n    function file_get_contents()\n    {\n        global $mockFileGetContents;\n        if (isset($mockFileGetContents) && ! is_null($mockFileGetContents)) {\n            if (is_a($mockFileGetContents, 'Exception')) {\n                throw $mockFileGetContents;\n            }\n            return $mockFileGetContents;\n        } else {\n            return call_user_func_array('\\file_get_contents', func_get_args());\n        }\n    }\n}\n\nnamespace Stevenmaguire\\OAuth2\\Client\\Test\\Provider\n{\n    use League\\OAuth2\\Client\\Provider\\Exception\\IdentityProviderException;\n    use League\\OAuth2\\Client\\Tool\\QueryBuilderTrait;\n    use Mockery as m;\n    use PHPUnit\\Framework\\TestCase;\n    use Stevenmaguire\\OAuth2\\Client\\Provider\\Exception\\EncryptionConfigurationException;\n    use Stevenmaguire\\OAuth2\\Client\\Provider\\Keycloak;\n\n    class KeycloakTest extends TestCase\n    {\n        use QueryBuilderTrait;\n\n        protected $provider;\n\n        protected function setUp(): void\n        {\n            $this->provider = new Keycloak([\n                'authServerUrl' => 'http://mock.url/auth',\n                'realm' => 'mock_realm',\n                'clientId' => 'mock_client_id',\n                'clientSecret' => 'mock_secret',\n                'redirectUri' => 'none',\n            ]);\n        }\n\n        public function tearDown(): void\n        {\n            m::close();\n            parent::tearDown();\n        }\n\n        public function testAuthorizationUrl()\n        {\n            $url = $this->provider->getAuthorizationUrl();\n            $uri = parse_url($url);\n            parse_str($uri['query'], $query);\n\n            $this->assertArrayHasKey('client_id', $query);\n            $this->assertArrayHasKey('redirect_uri', $query);\n            $this->assertArrayHasKey('state', $query);\n            $this->assertArrayHasKey('scope', $query);\n            $this->assertArrayHasKey('response_type', $query);\n            $this->assertArrayHasKey('approval_prompt', $query);\n            $this->assertNotNull($this->provider->getState());\n        }\n\n        public function testEncryptionAlgorithm()\n        {\n            $algorithm = uniqid();\n            $provider = new Keycloak([\n                'encryptionAlgorithm' => $algorithm,\n            ]);\n\n            $this->assertEquals($algorithm, $provider->encryptionAlgorithm);\n\n            $algorithm = uniqid();\n            $provider->setEncryptionAlgorithm($algorithm);\n\n            $this->assertEquals($algorithm, $provider->encryptionAlgorithm);\n        }\n\n        public function testEncryptionKey()\n        {\n            $key = uniqid();\n            $provider = new Keycloak([\n                'encryptionKey' => $key,\n            ]);\n\n            $this->assertEquals($key, $provider->encryptionKey);\n\n            $key = uniqid();\n            $provider->setEncryptionKey($key);\n\n            $this->assertEquals($key, $provider->encryptionKey);\n        }\n\n        public function testEncryptionKeyPath()\n        {\n            global $mockFileGetContents;\n            $path = uniqid();\n            $key = uniqid();\n            $mockFileGetContents = $key;\n\n            $provider = new Keycloak([\n                'encryptionKeyPath' => $path,\n            ]);\n\n            $this->assertEquals($key, $provider->encryptionKey);\n\n            $path = uniqid();\n            $key = uniqid();\n            $mockFileGetContents = $key;\n\n            $provider->setEncryptionKeyPath($path);\n\n            $this->assertEquals($key, $provider->encryptionKey);\n        }\n\n        public function testEncryptionKeyPathFails()\n        {\n            $this->markTestIncomplete('Need to assess the test to see what is required to be checked.');\n\n            global $mockFileGetContents;\n            $path = uniqid();\n            $key = uniqid();\n            $mockFileGetContents = new \\Exception();\n\n            $provider = new Keycloak([\n                'encryptionKeyPath' => $path,\n            ]);\n\n            $provider->setEncryptionKeyPath($path);\n        }\n\n        public function testScopes()\n        {\n            $scopeSeparator = ' ';\n            $options = ['scope' => [uniqid(), uniqid()]];\n            $query = ['scope' => implode($scopeSeparator, $options['scope'])];\n            $url = $this->provider->getAuthorizationUrl($options);\n            $encodedScope = $this->buildQueryString($query);\n            $this->assertStringContainsString($encodedScope, $url);\n        }\n\n        public function testGetAuthorizationUrl()\n        {\n            $url = $this->provider->getAuthorizationUrl();\n            $uri = parse_url($url);\n\n            $this->assertEquals('/auth/realms/mock_realm/protocol/openid-connect/auth', $uri['path']);\n        }\n\n        public function testGetLogoutUrl()\n        {\n            $url = $this->provider->getLogoutUrl();\n            $uri = parse_url($url);\n\n            $this->assertEquals('/auth/realms/mock_realm/protocol/openid-connect/logout', $uri['path']);\n        }\n\n        public function testGetBaseAccessTokenUrl()\n        {\n            $params = [];\n\n            $url = $this->provider->getBaseAccessTokenUrl($params);\n            $uri = parse_url($url);\n\n            $this->assertEquals('/auth/realms/mock_realm/protocol/openid-connect/token', $uri['path']);\n        }\n\n        public function testGetAccessToken()\n        {\n            $response = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $response->shouldReceive('getBody')\n                ->andReturn('{\"access_token\":\"mock_access_token\", \"scope\":\"email\", \"token_type\":\"bearer\"}');\n            $response->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'json']);\n\n            $client = m::mock('GuzzleHttp\\ClientInterface');\n            $client->shouldReceive('send')\n                ->times(1)\n                ->andReturn($response);\n            $this->provider->setHttpClient($client);\n\n            $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);\n\n            $this->assertEquals('mock_access_token', $token->getToken());\n            $this->assertNull($token->getExpires());\n            $this->assertNull($token->getRefreshToken());\n            $this->assertNull($token->getResourceOwnerId());\n        }\n\n        public function testUserData()\n        {\n            $userId = rand(1000, 9999);\n            $name = uniqid();\n            $nickname = uniqid();\n            $email = uniqid();\n\n            $postResponse = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $postResponse->shouldReceive('getBody')\n                ->andReturn(\n                    'access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&otherKey={1234}'\n                );\n            $postResponse->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'application/x-www-form-urlencoded']);\n\n            $userResponse = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $userResponse->shouldReceive('getBody')\n                ->andReturn('{\"sub\": '.$userId.', \"name\": \"'.$name.'\", \"email\": \"'.$email.'\"}');\n            $userResponse->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'json']);\n\n            $client = m::mock('GuzzleHttp\\ClientInterface');\n            $client->shouldReceive('send')\n                ->times(2)\n                ->andReturn($postResponse, $userResponse);\n            $this->provider->setHttpClient($client);\n\n            $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);\n            $user = $this->provider->getResourceOwner($token);\n\n            $this->assertEquals($userId, $user->getId());\n            $this->assertEquals($userId, $user->toArray()['sub']);\n            $this->assertEquals($name, $user->getName());\n            $this->assertEquals($name, $user->toArray()['name']);\n            $this->assertEquals($email, $user->getEmail());\n            $this->assertEquals($email, $user->toArray()['email']);\n        }\n\n        public function testUserDataWithEncryption()\n        {\n            $userId = rand(1000, 9999);\n            $name = uniqid();\n            $nickname = uniqid();\n            $email = uniqid();\n            $jwt = uniqid();\n            $algorithm = uniqid();\n            $key = uniqid();\n\n            $postResponse = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $postResponse->shouldReceive('getBody')\n                ->andReturn(\n                    'access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&otherKey={1234}'\n                );\n            $postResponse->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'application/x-www-form-urlencoded']);\n            $postResponse->shouldReceive('getStatusCode')\n                ->andReturn(200);\n\n            $userResponse = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $userResponse->shouldReceive('getBody')\n                ->andReturn($jwt);\n            $userResponse->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'application/jwt']);\n            $userResponse->shouldReceive('getStatusCode')\n                ->andReturn(200);\n\n            $decoder = \\Mockery::mock('overload:Firebase\\JWT\\JWT');\n            $decoder->shouldReceive('decode')\n                ->with($jwt, $key, [$algorithm])\n                ->andReturn([\n                    'sub' => $userId,\n                    'email' => $email,\n                    'name' => $name,\n                ]);\n\n            $client = m::mock('GuzzleHttp\\ClientInterface');\n            $client->shouldReceive('send')\n                ->times(2)\n                ->andReturn($postResponse, $userResponse);\n            $this->provider->setHttpClient($client);\n\n            $token = $this->provider->setEncryptionAlgorithm($algorithm)\n                ->setEncryptionKey($key)\n                ->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);\n            $user = $this->provider->getResourceOwner($token);\n\n            $this->assertEquals($userId, $user->getId());\n            $this->assertEquals($userId, $user->toArray()['sub']);\n            $this->assertEquals($name, $user->getName());\n            $this->assertEquals($name, $user->toArray()['name']);\n            $this->assertEquals($email, $user->getEmail());\n            $this->assertEquals($email, $user->toArray()['email']);\n        }\n\n        public function testUserDataFailsWhenEncryptionEncounteredAndNotConfigured()\n        {\n            $this->expectException(EncryptionConfigurationException::class);\n\n            $postResponse = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $postResponse->shouldReceive('getBody')\n                ->andReturn(\n                    'access_token=mock_access_token&expires=3600&refresh_token=mock_refresh_token&otherKey={1234}'\n                );\n            $postResponse->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'application/x-www-form-urlencoded']);\n            $postResponse->shouldReceive('getStatusCode')\n                ->andReturn(200);\n\n            $userResponse = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $userResponse->shouldReceive('getBody')\n                ->andReturn(uniqid());\n            $userResponse->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'application/jwt']);\n            $userResponse->shouldReceive('getStatusCode')\n                ->andReturn(200);\n\n            $client = m::mock('GuzzleHttp\\ClientInterface');\n            $client->shouldReceive('send')\n                ->times(2)\n                ->andReturn($postResponse, $userResponse);\n            $this->provider->setHttpClient($client);\n\n            $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);\n            $user = $this->provider->getResourceOwner($token);\n        }\n\n        public function testErrorResponse()\n        {\n            $this->expectException(IdentityProviderException::class);\n\n            $response = m::mock('Psr\\Http\\Message\\ResponseInterface');\n            $response->shouldReceive('getBody')\n                ->andReturn('{\"error\": \"invalid_grant\", \"error_description\": \"Code not found\"}');\n            $response->shouldReceive('getHeader')\n                ->andReturn(['content-type' => 'json']);\n\n            $client = m::mock('GuzzleHttp\\ClientInterface');\n            $client->shouldReceive('send')\n                ->times(1)\n                ->andReturn($response);\n            $this->provider->setHttpClient($client);\n\n            $token = $this->provider->getAccessToken('authorization_code', ['code' => 'mock_authorization_code']);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/deprecation-contracts/CHANGELOG.md",
    "content": "CHANGELOG\n=========\n\nThe changelog is maintained for all Symfony contracts at the following URL:\nhttps://github.com/symfony/contracts/blob/main/CHANGELOG.md\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/deprecation-contracts/LICENSE",
    "content": "Copyright (c) 2020-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/deprecation-contracts/README.md",
    "content": "Symfony Deprecation Contracts\n=============================\n\nA generic function and convention to trigger deprecation notices.\n\nThis package provides a single global function named `trigger_deprecation()` that triggers silenced deprecation notices.\n\nBy using a custom PHP error handler such as the one provided by the Symfony ErrorHandler component,\nthe triggered deprecations can be caught and logged for later discovery, both on dev and prod environments.\n\nThe function requires at least 3 arguments:\n - the name of the Composer package that is triggering the deprecation\n - the version of the package that introduced the deprecation\n - the message of the deprecation\n - more arguments can be provided: they will be inserted in the message using `printf()` formatting\n\nExample:\n```php\ntrigger_deprecation('symfony/blockchain', '8.9', 'Using \"%s\" is deprecated, use \"%s\" instead.', 'bitcoin', 'fabcoin');\n```\n\nThis will generate the following message:\n`Since symfony/blockchain 8.9: Using \"bitcoin\" is deprecated, use \"fabcoin\" instead.`\n\nWhile not recommended, the deprecation notices can be completely ignored by declaring an empty\n`function trigger_deprecation() {}` in your application.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/deprecation-contracts/composer.json",
    "content": "{\n    \"name\": \"symfony/deprecation-contracts\",\n    \"type\": \"library\",\n    \"description\": \"A generic function and convention to trigger deprecation notices\",\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Nicolas Grekas\",\n            \"email\": \"p@tchwork.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.1\"\n    },\n    \"autoload\": {\n        \"files\": [\n            \"function.php\"\n        ]\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-main\": \"3.5-dev\"\n        },\n        \"thanks\": {\n            \"name\": \"symfony/contracts\",\n            \"url\": \"https://github.com/symfony/contracts\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/deprecation-contracts/function.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (!function_exists('trigger_deprecation')) {\n    /**\n     * Triggers a silenced deprecation notice.\n     *\n     * @param string $package The name of the Composer package that is triggering the deprecation\n     * @param string $version The version of the package that introduced the deprecation\n     * @param string $message The message of the deprecation\n     * @param mixed  ...$args Values to insert in the message using printf() formatting\n     *\n     * @author Nicolas Grekas <p@tchwork.com>\n     */\n    function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void\n    {\n        @trigger_error(($package || $version ? \"Since $package $version: \" : '').($args ? vsprintf($message, $args) : $message), \\E_USER_DEPRECATED);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-ctype/Ctype.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Polyfill\\Ctype;\n\n/**\n * Ctype implementation through regex.\n *\n * @internal\n *\n * @author Gert de Pagter <BackEndTea@gmail.com>\n */\nfinal class Ctype\n{\n    /**\n     * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise.\n     *\n     * @see https://php.net/ctype-alnum\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_alnum($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is a letter, FALSE otherwise.\n     *\n     * @see https://php.net/ctype-alpha\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_alpha($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise.\n     *\n     * @see https://php.net/ctype-cntrl\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_cntrl($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^\\x00-\\x1f\\x7f]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.\n     *\n     * @see https://php.net/ctype-digit\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_digit($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise.\n     *\n     * @see https://php.net/ctype-graph\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_graph($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is a lowercase letter.\n     *\n     * @see https://php.net/ctype-lower\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_lower($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all.\n     *\n     * @see https://php.net/ctype-print\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_print($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise.\n     *\n     * @see https://php.net/ctype-punct\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_punct($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^!-\\/\\:-@\\[-`\\{-~]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters.\n     *\n     * @see https://php.net/ctype-space\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_space($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^\\s]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is an uppercase letter.\n     *\n     * @see https://php.net/ctype-upper\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_upper($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text);\n    }\n\n    /**\n     * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise.\n     *\n     * @see https://php.net/ctype-xdigit\n     *\n     * @param mixed $text\n     *\n     * @return bool\n     */\n    public static function ctype_xdigit($text)\n    {\n        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);\n\n        return \\is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text);\n    }\n\n    /**\n     * Converts integers to their char versions according to normal ctype behaviour, if needed.\n     *\n     * If an integer between -128 and 255 inclusive is provided,\n     * it is interpreted as the ASCII value of a single character\n     * (negative values have 256 added in order to allow characters in the Extended ASCII range).\n     * Any other integer is interpreted as a string containing the decimal digits of the integer.\n     *\n     * @param mixed  $int\n     * @param string $function\n     *\n     * @return mixed\n     */\n    private static function convert_int_to_char_for_ctype($int, $function)\n    {\n        if (!\\is_int($int)) {\n            return $int;\n        }\n\n        if ($int < -128 || $int > 255) {\n            return (string) $int;\n        }\n\n        if (\\PHP_VERSION_ID >= 80100) {\n            @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \\E_USER_DEPRECATED);\n        }\n\n        if ($int < 0) {\n            $int += 256;\n        }\n\n        return \\chr($int);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-ctype/LICENSE",
    "content": "Copyright (c) 2018-2019 Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-ctype/README.md",
    "content": "Symfony Polyfill / Ctype\n========================\n\nThis component provides `ctype_*` functions to users who run php versions without the ctype extension.\n\nMore information can be found in the\n[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).\n\nLicense\n=======\n\nThis library is released under the [MIT license](LICENSE).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-ctype/bootstrap.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Polyfill\\Ctype as p;\n\nif (\\PHP_VERSION_ID >= 80000) {\n    return require __DIR__.'/bootstrap80.php';\n}\n\nif (!function_exists('ctype_alnum')) {\n    function ctype_alnum($text) { return p\\Ctype::ctype_alnum($text); }\n}\nif (!function_exists('ctype_alpha')) {\n    function ctype_alpha($text) { return p\\Ctype::ctype_alpha($text); }\n}\nif (!function_exists('ctype_cntrl')) {\n    function ctype_cntrl($text) { return p\\Ctype::ctype_cntrl($text); }\n}\nif (!function_exists('ctype_digit')) {\n    function ctype_digit($text) { return p\\Ctype::ctype_digit($text); }\n}\nif (!function_exists('ctype_graph')) {\n    function ctype_graph($text) { return p\\Ctype::ctype_graph($text); }\n}\nif (!function_exists('ctype_lower')) {\n    function ctype_lower($text) { return p\\Ctype::ctype_lower($text); }\n}\nif (!function_exists('ctype_print')) {\n    function ctype_print($text) { return p\\Ctype::ctype_print($text); }\n}\nif (!function_exists('ctype_punct')) {\n    function ctype_punct($text) { return p\\Ctype::ctype_punct($text); }\n}\nif (!function_exists('ctype_space')) {\n    function ctype_space($text) { return p\\Ctype::ctype_space($text); }\n}\nif (!function_exists('ctype_upper')) {\n    function ctype_upper($text) { return p\\Ctype::ctype_upper($text); }\n}\nif (!function_exists('ctype_xdigit')) {\n    function ctype_xdigit($text) { return p\\Ctype::ctype_xdigit($text); }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-ctype/bootstrap80.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Polyfill\\Ctype as p;\n\nif (!function_exists('ctype_alnum')) {\n    function ctype_alnum(mixed $text): bool { return p\\Ctype::ctype_alnum($text); }\n}\nif (!function_exists('ctype_alpha')) {\n    function ctype_alpha(mixed $text): bool { return p\\Ctype::ctype_alpha($text); }\n}\nif (!function_exists('ctype_cntrl')) {\n    function ctype_cntrl(mixed $text): bool { return p\\Ctype::ctype_cntrl($text); }\n}\nif (!function_exists('ctype_digit')) {\n    function ctype_digit(mixed $text): bool { return p\\Ctype::ctype_digit($text); }\n}\nif (!function_exists('ctype_graph')) {\n    function ctype_graph(mixed $text): bool { return p\\Ctype::ctype_graph($text); }\n}\nif (!function_exists('ctype_lower')) {\n    function ctype_lower(mixed $text): bool { return p\\Ctype::ctype_lower($text); }\n}\nif (!function_exists('ctype_print')) {\n    function ctype_print(mixed $text): bool { return p\\Ctype::ctype_print($text); }\n}\nif (!function_exists('ctype_punct')) {\n    function ctype_punct(mixed $text): bool { return p\\Ctype::ctype_punct($text); }\n}\nif (!function_exists('ctype_space')) {\n    function ctype_space(mixed $text): bool { return p\\Ctype::ctype_space($text); }\n}\nif (!function_exists('ctype_upper')) {\n    function ctype_upper(mixed $text): bool { return p\\Ctype::ctype_upper($text); }\n}\nif (!function_exists('ctype_xdigit')) {\n    function ctype_xdigit(mixed $text): bool { return p\\Ctype::ctype_xdigit($text); }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-ctype/composer.json",
    "content": "{\n    \"name\": \"symfony/polyfill-ctype\",\n    \"type\": \"library\",\n    \"description\": \"Symfony polyfill for ctype functions\",\n    \"keywords\": [\"polyfill\", \"compatibility\", \"portable\", \"ctype\"],\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Gert de Pagter\",\n            \"email\": \"BackEndTea@gmail.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.1\"\n    },\n    \"provide\": {\n        \"ext-ctype\": \"*\"\n    },\n    \"autoload\": {\n        \"psr-4\": { \"Symfony\\\\Polyfill\\\\Ctype\\\\\": \"\" },\n        \"files\": [ \"bootstrap.php\" ]\n    },\n    \"suggest\": {\n        \"ext-ctype\": \"For best performance\"\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-main\": \"1.23-dev\"\n        },\n        \"thanks\": {\n            \"name\": \"symfony/polyfill\",\n            \"url\": \"https://github.com/symfony/polyfill\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/LICENSE",
    "content": "Copyright (c) 2015-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/Mbstring.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Polyfill\\Mbstring;\n\n/**\n * Partial mbstring implementation in PHP, iconv based, UTF-8 centric.\n *\n * Implemented:\n * - mb_chr                  - Returns a specific character from its Unicode code point\n * - mb_convert_encoding     - Convert character encoding\n * - mb_convert_variables    - Convert character code in variable(s)\n * - mb_decode_mimeheader    - Decode string in MIME header field\n * - mb_encode_mimeheader    - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED\n * - mb_decode_numericentity - Decode HTML numeric string reference to character\n * - mb_encode_numericentity - Encode character to HTML numeric string reference\n * - mb_convert_case         - Perform case folding on a string\n * - mb_detect_encoding      - Detect character encoding\n * - mb_get_info             - Get internal settings of mbstring\n * - mb_http_input           - Detect HTTP input character encoding\n * - mb_http_output          - Set/Get HTTP output character encoding\n * - mb_internal_encoding    - Set/Get internal character encoding\n * - mb_list_encodings       - Returns an array of all supported encodings\n * - mb_ord                  - Returns the Unicode code point of a character\n * - mb_output_handler       - Callback function converts character encoding in output buffer\n * - mb_scrub                - Replaces ill-formed byte sequences with substitute characters\n * - mb_strlen               - Get string length\n * - mb_strpos               - Find position of first occurrence of string in a string\n * - mb_strrpos              - Find position of last occurrence of a string in a string\n * - mb_str_split            - Convert a string to an array\n * - mb_strtolower           - Make a string lowercase\n * - mb_strtoupper           - Make a string uppercase\n * - mb_substitute_character - Set/Get substitution character\n * - mb_substr               - Get part of string\n * - mb_stripos              - Finds position of first occurrence of a string within another, case insensitive\n * - mb_stristr              - Finds first occurrence of a string within another, case insensitive\n * - mb_strrchr              - Finds the last occurrence of a character in a string within another\n * - mb_strrichr             - Finds the last occurrence of a character in a string within another, case insensitive\n * - mb_strripos             - Finds position of last occurrence of a string within another, case insensitive\n * - mb_strstr               - Finds first occurrence of a string within another\n * - mb_strwidth             - Return width of string\n * - mb_substr_count         - Count the number of substring occurrences\n *\n * Not implemented:\n * - mb_convert_kana         - Convert \"kana\" one from another (\"zen-kaku\", \"han-kaku\" and more)\n * - mb_ereg_*               - Regular expression with multibyte support\n * - mb_parse_str            - Parse GET/POST/COOKIE data and set global variable\n * - mb_preferred_mime_name  - Get MIME charset string\n * - mb_regex_encoding       - Returns current encoding for multibyte regex as string\n * - mb_regex_set_options    - Set/Get the default options for mbregex functions\n * - mb_send_mail            - Send encoded mail\n * - mb_split                - Split multibyte string using regular expression\n * - mb_strcut               - Get part of string\n * - mb_strimwidth           - Get truncated string with specified width\n *\n * @author Nicolas Grekas <p@tchwork.com>\n *\n * @internal\n */\nfinal class Mbstring\n{\n    public const MB_CASE_FOLD = \\PHP_INT_MAX;\n\n    private const SIMPLE_CASE_FOLD = [\n        ['µ', 'ſ', \"\\xCD\\x85\", 'ς', \"\\xCF\\x90\", \"\\xCF\\x91\", \"\\xCF\\x95\", \"\\xCF\\x96\", \"\\xCF\\xB0\", \"\\xCF\\xB1\", \"\\xCF\\xB5\", \"\\xE1\\xBA\\x9B\", \"\\xE1\\xBE\\xBE\"],\n        ['μ', 's', 'ι',        'σ', 'β',        'θ',        'φ',        'π',        'κ',        'ρ',        'ε',        \"\\xE1\\xB9\\xA1\", 'ι'],\n    ];\n\n    private static $encodingList = ['ASCII', 'UTF-8'];\n    private static $language = 'neutral';\n    private static $internalEncoding = 'UTF-8';\n\n    public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)\n    {\n        if (\\is_array($fromEncoding) || (null !== $fromEncoding && false !== strpos($fromEncoding, ','))) {\n            $fromEncoding = self::mb_detect_encoding($s, $fromEncoding);\n        } else {\n            $fromEncoding = self::getEncoding($fromEncoding);\n        }\n\n        $toEncoding = self::getEncoding($toEncoding);\n\n        if ('BASE64' === $fromEncoding) {\n            $s = base64_decode($s);\n            $fromEncoding = $toEncoding;\n        }\n\n        if ('BASE64' === $toEncoding) {\n            return base64_encode($s);\n        }\n\n        if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {\n            if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {\n                $fromEncoding = 'Windows-1252';\n            }\n            if ('UTF-8' !== $fromEncoding) {\n                $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);\n            }\n\n            return preg_replace_callback('/[\\x80-\\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s);\n        }\n\n        if ('HTML-ENTITIES' === $fromEncoding) {\n            $s = html_entity_decode($s, \\ENT_COMPAT, 'UTF-8');\n            $fromEncoding = 'UTF-8';\n        }\n\n        return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);\n    }\n\n    public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars)\n    {\n        $ok = true;\n        array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {\n            if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {\n                $ok = false;\n            }\n        });\n\n        return $ok ? $fromEncoding : false;\n    }\n\n    public static function mb_decode_mimeheader($s)\n    {\n        return iconv_mime_decode($s, 2, self::$internalEncoding);\n    }\n\n    public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)\n    {\n        trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \\E_USER_WARNING);\n    }\n\n    public static function mb_decode_numericentity($s, $convmap, $encoding = null)\n    {\n        if (null !== $s && !\\is_scalar($s) && !(\\is_object($s) && method_exists($s, '__toString'))) {\n            trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\\gettype($s).' given', \\E_USER_WARNING);\n\n            return null;\n        }\n\n        if (!\\is_array($convmap) || (80000 > \\PHP_VERSION_ID && !$convmap)) {\n            return false;\n        }\n\n        if (null !== $encoding && !\\is_scalar($encoding)) {\n            trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\\gettype($s).' given', \\E_USER_WARNING);\n\n            return '';  // Instead of null (cf. mb_encode_numericentity).\n        }\n\n        $s = (string) $s;\n        if ('' === $s) {\n            return '';\n        }\n\n        $encoding = self::getEncoding($encoding);\n\n        if ('UTF-8' === $encoding) {\n            $encoding = null;\n            if (!preg_match('//u', $s)) {\n                $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);\n            }\n        } else {\n            $s = iconv($encoding, 'UTF-8//IGNORE', $s);\n        }\n\n        $cnt = floor(\\count($convmap) / 4) * 4;\n\n        for ($i = 0; $i < $cnt; $i += 4) {\n            // collector_decode_htmlnumericentity ignores $convmap[$i + 3]\n            $convmap[$i] += $convmap[$i + 2];\n            $convmap[$i + 1] += $convmap[$i + 2];\n        }\n\n        $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {\n            $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];\n            for ($i = 0; $i < $cnt; $i += 4) {\n                if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {\n                    return self::mb_chr($c - $convmap[$i + 2]);\n                }\n            }\n\n            return $m[0];\n        }, $s);\n\n        if (null === $encoding) {\n            return $s;\n        }\n\n        return iconv('UTF-8', $encoding.'//IGNORE', $s);\n    }\n\n    public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)\n    {\n        if (null !== $s && !\\is_scalar($s) && !(\\is_object($s) && method_exists($s, '__toString'))) {\n            trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\\gettype($s).' given', \\E_USER_WARNING);\n\n            return null;\n        }\n\n        if (!\\is_array($convmap) || (80000 > \\PHP_VERSION_ID && !$convmap)) {\n            return false;\n        }\n\n        if (null !== $encoding && !\\is_scalar($encoding)) {\n            trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\\gettype($s).' given', \\E_USER_WARNING);\n\n            return null;  // Instead of '' (cf. mb_decode_numericentity).\n        }\n\n        if (null !== $is_hex && !\\is_scalar($is_hex)) {\n            trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\\gettype($s).' given', \\E_USER_WARNING);\n\n            return null;\n        }\n\n        $s = (string) $s;\n        if ('' === $s) {\n            return '';\n        }\n\n        $encoding = self::getEncoding($encoding);\n\n        if ('UTF-8' === $encoding) {\n            $encoding = null;\n            if (!preg_match('//u', $s)) {\n                $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);\n            }\n        } else {\n            $s = iconv($encoding, 'UTF-8//IGNORE', $s);\n        }\n\n        static $ulenMask = [\"\\xC0\" => 2, \"\\xD0\" => 2, \"\\xE0\" => 3, \"\\xF0\" => 4];\n\n        $cnt = floor(\\count($convmap) / 4) * 4;\n        $i = 0;\n        $len = \\strlen($s);\n        $result = '';\n\n        while ($i < $len) {\n            $ulen = $s[$i] < \"\\x80\" ? 1 : $ulenMask[$s[$i] & \"\\xF0\"];\n            $uchr = substr($s, $i, $ulen);\n            $i += $ulen;\n            $c = self::mb_ord($uchr);\n\n            for ($j = 0; $j < $cnt; $j += 4) {\n                if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {\n                    $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];\n                    $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';\n                    continue 2;\n                }\n            }\n            $result .= $uchr;\n        }\n\n        if (null === $encoding) {\n            return $result;\n        }\n\n        return iconv('UTF-8', $encoding.'//IGNORE', $result);\n    }\n\n    public static function mb_convert_case($s, $mode, $encoding = null)\n    {\n        $s = (string) $s;\n        if ('' === $s) {\n            return '';\n        }\n\n        $encoding = self::getEncoding($encoding);\n\n        if ('UTF-8' === $encoding) {\n            $encoding = null;\n            if (!preg_match('//u', $s)) {\n                $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);\n            }\n        } else {\n            $s = iconv($encoding, 'UTF-8//IGNORE', $s);\n        }\n\n        if (\\MB_CASE_TITLE == $mode) {\n            static $titleRegexp = null;\n            if (null === $titleRegexp) {\n                $titleRegexp = self::getData('titleCaseRegexp');\n            }\n            $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s);\n        } else {\n            if (\\MB_CASE_UPPER == $mode) {\n                static $upper = null;\n                if (null === $upper) {\n                    $upper = self::getData('upperCase');\n                }\n                $map = $upper;\n            } else {\n                if (self::MB_CASE_FOLD === $mode) {\n                    static $caseFolding = null;\n                    if (null === $caseFolding) {\n                        $caseFolding = self::getData('caseFolding');\n                    }\n                    $s = strtr($s, $caseFolding);\n                }\n\n                static $lower = null;\n                if (null === $lower) {\n                    $lower = self::getData('lowerCase');\n                }\n                $map = $lower;\n            }\n\n            static $ulenMask = [\"\\xC0\" => 2, \"\\xD0\" => 2, \"\\xE0\" => 3, \"\\xF0\" => 4];\n\n            $i = 0;\n            $len = \\strlen($s);\n\n            while ($i < $len) {\n                $ulen = $s[$i] < \"\\x80\" ? 1 : $ulenMask[$s[$i] & \"\\xF0\"];\n                $uchr = substr($s, $i, $ulen);\n                $i += $ulen;\n\n                if (isset($map[$uchr])) {\n                    $uchr = $map[$uchr];\n                    $nlen = \\strlen($uchr);\n\n                    if ($nlen == $ulen) {\n                        $nlen = $i;\n                        do {\n                            $s[--$nlen] = $uchr[--$ulen];\n                        } while ($ulen);\n                    } else {\n                        $s = substr_replace($s, $uchr, $i - $ulen, $ulen);\n                        $len += $nlen - $ulen;\n                        $i += $nlen - $ulen;\n                    }\n                }\n            }\n        }\n\n        if (null === $encoding) {\n            return $s;\n        }\n\n        return iconv('UTF-8', $encoding.'//IGNORE', $s);\n    }\n\n    public static function mb_internal_encoding($encoding = null)\n    {\n        if (null === $encoding) {\n            return self::$internalEncoding;\n        }\n\n        $normalizedEncoding = self::getEncoding($encoding);\n\n        if ('UTF-8' === $normalizedEncoding || false !== @iconv($normalizedEncoding, $normalizedEncoding, ' ')) {\n            self::$internalEncoding = $normalizedEncoding;\n\n            return true;\n        }\n\n        if (80000 > \\PHP_VERSION_ID) {\n            return false;\n        }\n\n        throw new \\ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, \"%s\" given', $encoding));\n    }\n\n    public static function mb_language($lang = null)\n    {\n        if (null === $lang) {\n            return self::$language;\n        }\n\n        switch ($normalizedLang = strtolower($lang)) {\n            case 'uni':\n            case 'neutral':\n                self::$language = $normalizedLang;\n\n                return true;\n        }\n\n        if (80000 > \\PHP_VERSION_ID) {\n            return false;\n        }\n\n        throw new \\ValueError(sprintf('Argument #1 ($language) must be a valid language, \"%s\" given', $lang));\n    }\n\n    public static function mb_list_encodings()\n    {\n        return ['UTF-8'];\n    }\n\n    public static function mb_encoding_aliases($encoding)\n    {\n        switch (strtoupper($encoding)) {\n            case 'UTF8':\n            case 'UTF-8':\n                return ['utf8'];\n        }\n\n        return false;\n    }\n\n    public static function mb_check_encoding($var = null, $encoding = null)\n    {\n        if (PHP_VERSION_ID < 70200 && \\is_array($var)) {\n            trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \\E_USER_WARNING);\n\n            return null;\n        }\n\n        if (null === $encoding) {\n            if (null === $var) {\n                return false;\n            }\n            $encoding = self::$internalEncoding;\n        }\n\n        if (!\\is_array($var)) {\n            return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var);\n        }\n\n        foreach ($var as $key => $value) {\n            if (!self::mb_check_encoding($key, $encoding)) {\n                return false;\n            }\n            if (!self::mb_check_encoding($value, $encoding)) {\n                return false;\n            }\n        }\n\n        return true;\n\n    }\n\n    public static function mb_detect_encoding($str, $encodingList = null, $strict = false)\n    {\n        if (null === $encodingList) {\n            $encodingList = self::$encodingList;\n        } else {\n            if (!\\is_array($encodingList)) {\n                $encodingList = array_map('trim', explode(',', $encodingList));\n            }\n            $encodingList = array_map('strtoupper', $encodingList);\n        }\n\n        foreach ($encodingList as $enc) {\n            switch ($enc) {\n                case 'ASCII':\n                    if (!preg_match('/[\\x80-\\xFF]/', $str)) {\n                        return $enc;\n                    }\n                    break;\n\n                case 'UTF8':\n                case 'UTF-8':\n                    if (preg_match('//u', $str)) {\n                        return 'UTF-8';\n                    }\n                    break;\n\n                default:\n                    if (0 === strncmp($enc, 'ISO-8859-', 9)) {\n                        return $enc;\n                    }\n            }\n        }\n\n        return false;\n    }\n\n    public static function mb_detect_order($encodingList = null)\n    {\n        if (null === $encodingList) {\n            return self::$encodingList;\n        }\n\n        if (!\\is_array($encodingList)) {\n            $encodingList = array_map('trim', explode(',', $encodingList));\n        }\n        $encodingList = array_map('strtoupper', $encodingList);\n\n        foreach ($encodingList as $enc) {\n            switch ($enc) {\n                default:\n                    if (strncmp($enc, 'ISO-8859-', 9)) {\n                        return false;\n                    }\n                    // no break\n                case 'ASCII':\n                case 'UTF8':\n                case 'UTF-8':\n            }\n        }\n\n        self::$encodingList = $encodingList;\n\n        return true;\n    }\n\n    public static function mb_strlen($s, $encoding = null)\n    {\n        $encoding = self::getEncoding($encoding);\n        if ('CP850' === $encoding || 'ASCII' === $encoding) {\n            return \\strlen($s);\n        }\n\n        return @iconv_strlen($s, $encoding);\n    }\n\n    public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)\n    {\n        $encoding = self::getEncoding($encoding);\n        if ('CP850' === $encoding || 'ASCII' === $encoding) {\n            return strpos($haystack, $needle, $offset);\n        }\n\n        $needle = (string) $needle;\n        if ('' === $needle) {\n            if (80000 > \\PHP_VERSION_ID) {\n                trigger_error(__METHOD__.': Empty delimiter', \\E_USER_WARNING);\n\n                return false;\n            }\n\n            return 0;\n        }\n\n        return iconv_strpos($haystack, $needle, $offset, $encoding);\n    }\n\n    public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)\n    {\n        $encoding = self::getEncoding($encoding);\n        if ('CP850' === $encoding || 'ASCII' === $encoding) {\n            return strrpos($haystack, $needle, $offset);\n        }\n\n        if ($offset != (int) $offset) {\n            $offset = 0;\n        } elseif ($offset = (int) $offset) {\n            if ($offset < 0) {\n                if (0 > $offset += self::mb_strlen($needle)) {\n                    $haystack = self::mb_substr($haystack, 0, $offset, $encoding);\n                }\n                $offset = 0;\n            } else {\n                $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);\n            }\n        }\n\n        $pos = '' !== $needle || 80000 > \\PHP_VERSION_ID\n            ? iconv_strrpos($haystack, $needle, $encoding)\n            : self::mb_strlen($haystack, $encoding);\n\n        return false !== $pos ? $offset + $pos : false;\n    }\n\n    public static function mb_str_split($string, $split_length = 1, $encoding = null)\n    {\n        if (null !== $string && !\\is_scalar($string) && !(\\is_object($string) && method_exists($string, '__toString'))) {\n            trigger_error('mb_str_split() expects parameter 1 to be string, '.\\gettype($string).' given', \\E_USER_WARNING);\n\n            return null;\n        }\n\n        if (1 > $split_length = (int) $split_length) {\n            if (80000 > \\PHP_VERSION_ID) {\n                trigger_error('The length of each segment must be greater than zero', \\E_USER_WARNING);\n\n                return false;\n            }\n\n            throw new \\ValueError('Argument #2 ($length) must be greater than 0');\n        }\n\n        if (null === $encoding) {\n            $encoding = mb_internal_encoding();\n        }\n\n        if ('UTF-8' === $encoding = self::getEncoding($encoding)) {\n            $rx = '/(';\n            while (65535 < $split_length) {\n                $rx .= '.{65535}';\n                $split_length -= 65535;\n            }\n            $rx .= '.{'.$split_length.'})/us';\n\n            return preg_split($rx, $string, -1, \\PREG_SPLIT_DELIM_CAPTURE | \\PREG_SPLIT_NO_EMPTY);\n        }\n\n        $result = [];\n        $length = mb_strlen($string, $encoding);\n\n        for ($i = 0; $i < $length; $i += $split_length) {\n            $result[] = mb_substr($string, $i, $split_length, $encoding);\n        }\n\n        return $result;\n    }\n\n    public static function mb_strtolower($s, $encoding = null)\n    {\n        return self::mb_convert_case($s, \\MB_CASE_LOWER, $encoding);\n    }\n\n    public static function mb_strtoupper($s, $encoding = null)\n    {\n        return self::mb_convert_case($s, \\MB_CASE_UPPER, $encoding);\n    }\n\n    public static function mb_substitute_character($c = null)\n    {\n        if (null === $c) {\n            return 'none';\n        }\n        if (0 === strcasecmp($c, 'none')) {\n            return true;\n        }\n        if (80000 > \\PHP_VERSION_ID) {\n            return false;\n        }\n        if (\\is_int($c) || 'long' === $c || 'entity' === $c) {\n            return false;\n        }\n\n        throw new \\ValueError('Argument #1 ($substitute_character) must be \"none\", \"long\", \"entity\" or a valid codepoint');\n    }\n\n    public static function mb_substr($s, $start, $length = null, $encoding = null)\n    {\n        $encoding = self::getEncoding($encoding);\n        if ('CP850' === $encoding || 'ASCII' === $encoding) {\n            return (string) substr($s, $start, null === $length ? 2147483647 : $length);\n        }\n\n        if ($start < 0) {\n            $start = iconv_strlen($s, $encoding) + $start;\n            if ($start < 0) {\n                $start = 0;\n            }\n        }\n\n        if (null === $length) {\n            $length = 2147483647;\n        } elseif ($length < 0) {\n            $length = iconv_strlen($s, $encoding) + $length - $start;\n            if ($length < 0) {\n                return '';\n            }\n        }\n\n        return (string) iconv_substr($s, $start, $length, $encoding);\n    }\n\n    public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)\n    {\n        [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [\n            self::mb_convert_case($haystack, \\MB_CASE_LOWER, $encoding),\n            self::mb_convert_case($needle, \\MB_CASE_LOWER, $encoding),\n        ]);\n\n        return self::mb_strpos($haystack, $needle, $offset, $encoding);\n    }\n\n    public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)\n    {\n        $pos = self::mb_stripos($haystack, $needle, 0, $encoding);\n\n        return self::getSubpart($pos, $part, $haystack, $encoding);\n    }\n\n    public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)\n    {\n        $encoding = self::getEncoding($encoding);\n        if ('CP850' === $encoding || 'ASCII' === $encoding) {\n            $pos = strrpos($haystack, $needle);\n        } else {\n            $needle = self::mb_substr($needle, 0, 1, $encoding);\n            $pos = iconv_strrpos($haystack, $needle, $encoding);\n        }\n\n        return self::getSubpart($pos, $part, $haystack, $encoding);\n    }\n\n    public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)\n    {\n        $needle = self::mb_substr($needle, 0, 1, $encoding);\n        $pos = self::mb_strripos($haystack, $needle, $encoding);\n\n        return self::getSubpart($pos, $part, $haystack, $encoding);\n    }\n\n    public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)\n    {\n        $haystack = self::mb_convert_case($haystack, \\MB_CASE_LOWER, $encoding);\n        $needle = self::mb_convert_case($needle, \\MB_CASE_LOWER, $encoding);\n\n        $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack);\n        $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle);\n\n        return self::mb_strrpos($haystack, $needle, $offset, $encoding);\n    }\n\n    public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)\n    {\n        $pos = strpos($haystack, $needle);\n        if (false === $pos) {\n            return false;\n        }\n        if ($part) {\n            return substr($haystack, 0, $pos);\n        }\n\n        return substr($haystack, $pos);\n    }\n\n    public static function mb_get_info($type = 'all')\n    {\n        $info = [\n            'internal_encoding' => self::$internalEncoding,\n            'http_output' => 'pass',\n            'http_output_conv_mimetypes' => '^(text/|application/xhtml\\+xml)',\n            'func_overload' => 0,\n            'func_overload_list' => 'no overload',\n            'mail_charset' => 'UTF-8',\n            'mail_header_encoding' => 'BASE64',\n            'mail_body_encoding' => 'BASE64',\n            'illegal_chars' => 0,\n            'encoding_translation' => 'Off',\n            'language' => self::$language,\n            'detect_order' => self::$encodingList,\n            'substitute_character' => 'none',\n            'strict_detection' => 'Off',\n        ];\n\n        if ('all' === $type) {\n            return $info;\n        }\n        if (isset($info[$type])) {\n            return $info[$type];\n        }\n\n        return false;\n    }\n\n    public static function mb_http_input($type = '')\n    {\n        return false;\n    }\n\n    public static function mb_http_output($encoding = null)\n    {\n        return null !== $encoding ? 'pass' === $encoding : 'pass';\n    }\n\n    public static function mb_strwidth($s, $encoding = null)\n    {\n        $encoding = self::getEncoding($encoding);\n\n        if ('UTF-8' !== $encoding) {\n            $s = iconv($encoding, 'UTF-8//IGNORE', $s);\n        }\n\n        $s = preg_replace('/[\\x{1100}-\\x{115F}\\x{2329}\\x{232A}\\x{2E80}-\\x{303E}\\x{3040}-\\x{A4CF}\\x{AC00}-\\x{D7A3}\\x{F900}-\\x{FAFF}\\x{FE10}-\\x{FE19}\\x{FE30}-\\x{FE6F}\\x{FF00}-\\x{FF60}\\x{FFE0}-\\x{FFE6}\\x{20000}-\\x{2FFFD}\\x{30000}-\\x{3FFFD}]/u', '', $s, -1, $wide);\n\n        return ($wide << 1) + iconv_strlen($s, 'UTF-8');\n    }\n\n    public static function mb_substr_count($haystack, $needle, $encoding = null)\n    {\n        return substr_count($haystack, $needle);\n    }\n\n    public static function mb_output_handler($contents, $status)\n    {\n        return $contents;\n    }\n\n    public static function mb_chr($code, $encoding = null)\n    {\n        if (0x80 > $code %= 0x200000) {\n            $s = \\chr($code);\n        } elseif (0x800 > $code) {\n            $s = \\chr(0xC0 | $code >> 6).\\chr(0x80 | $code & 0x3F);\n        } elseif (0x10000 > $code) {\n            $s = \\chr(0xE0 | $code >> 12).\\chr(0x80 | $code >> 6 & 0x3F).\\chr(0x80 | $code & 0x3F);\n        } else {\n            $s = \\chr(0xF0 | $code >> 18).\\chr(0x80 | $code >> 12 & 0x3F).\\chr(0x80 | $code >> 6 & 0x3F).\\chr(0x80 | $code & 0x3F);\n        }\n\n        if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {\n            $s = mb_convert_encoding($s, $encoding, 'UTF-8');\n        }\n\n        return $s;\n    }\n\n    public static function mb_ord($s, $encoding = null)\n    {\n        if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {\n            $s = mb_convert_encoding($s, 'UTF-8', $encoding);\n        }\n\n        if (1 === \\strlen($s)) {\n            return \\ord($s);\n        }\n\n        $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;\n        if (0xF0 <= $code) {\n            return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;\n        }\n        if (0xE0 <= $code) {\n            return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;\n        }\n        if (0xC0 <= $code) {\n            return (($code - 0xC0) << 6) + $s[2] - 0x80;\n        }\n\n        return $code;\n    }\n\n    public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \\STR_PAD_RIGHT, string $encoding = null): string\n    {\n        if (!\\in_array($pad_type, [\\STR_PAD_RIGHT, \\STR_PAD_LEFT, \\STR_PAD_BOTH], true)) {\n            throw new \\ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH');\n        }\n\n        if (null === $encoding) {\n            $encoding = self::mb_internal_encoding();\n        }\n\n        try {\n            $validEncoding = @self::mb_check_encoding('', $encoding);\n        } catch (\\ValueError $e) {\n            throw new \\ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, \"%s\" given', $encoding));\n        }\n\n        // BC for PHP 7.3 and lower\n        if (!$validEncoding) {\n            throw new \\ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, \"%s\" given', $encoding));\n        }\n\n        if (self::mb_strlen($pad_string, $encoding) <= 0) {\n            throw new \\ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string');\n        }\n\n        $paddingRequired = $length - self::mb_strlen($string, $encoding);\n\n        if ($paddingRequired < 1) {\n            return $string;\n        }\n\n        switch ($pad_type) {\n            case \\STR_PAD_LEFT:\n                return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string;\n            case \\STR_PAD_RIGHT:\n                return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding);\n            default:\n                $leftPaddingLength = floor($paddingRequired / 2);\n                $rightPaddingLength = $paddingRequired - $leftPaddingLength;\n\n                return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding);\n        }\n    }\n\n    private static function getSubpart($pos, $part, $haystack, $encoding)\n    {\n        if (false === $pos) {\n            return false;\n        }\n        if ($part) {\n            return self::mb_substr($haystack, 0, $pos, $encoding);\n        }\n\n        return self::mb_substr($haystack, $pos, null, $encoding);\n    }\n\n    private static function html_encoding_callback(array $m)\n    {\n        $i = 1;\n        $entities = '';\n        $m = unpack('C*', htmlentities($m[0], \\ENT_COMPAT, 'UTF-8'));\n\n        while (isset($m[$i])) {\n            if (0x80 > $m[$i]) {\n                $entities .= \\chr($m[$i++]);\n                continue;\n            }\n            if (0xF0 <= $m[$i]) {\n                $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;\n            } elseif (0xE0 <= $m[$i]) {\n                $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;\n            } else {\n                $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;\n            }\n\n            $entities .= '&#'.$c.';';\n        }\n\n        return $entities;\n    }\n\n    private static function title_case(array $s)\n    {\n        return self::mb_convert_case($s[1], \\MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \\MB_CASE_LOWER, 'UTF-8');\n    }\n\n    private static function getData($file)\n    {\n        if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {\n            return require $file;\n        }\n\n        return false;\n    }\n\n    private static function getEncoding($encoding)\n    {\n        if (null === $encoding) {\n            return self::$internalEncoding;\n        }\n\n        if ('UTF-8' === $encoding) {\n            return 'UTF-8';\n        }\n\n        $encoding = strtoupper($encoding);\n\n        if ('8BIT' === $encoding || 'BINARY' === $encoding) {\n            return 'CP850';\n        }\n\n        if ('UTF8' === $encoding) {\n            return 'UTF-8';\n        }\n\n        return $encoding;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/README.md",
    "content": "Symfony Polyfill / Mbstring\n===========================\n\nThis component provides a partial, native PHP implementation for the\n[Mbstring](https://php.net/mbstring) extension.\n\nMore information can be found in the\n[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).\n\nLicense\n=======\n\nThis library is released under the [MIT license](LICENSE).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php",
    "content": "<?php\n\nreturn [\n    'İ' => 'i̇',\n    'µ' => 'μ',\n    'ſ' => 's',\n    'ͅ' => 'ι',\n    'ς' => 'σ',\n    'ϐ' => 'β',\n    'ϑ' => 'θ',\n    'ϕ' => 'φ',\n    'ϖ' => 'π',\n    'ϰ' => 'κ',\n    'ϱ' => 'ρ',\n    'ϵ' => 'ε',\n    'ẛ' => 'ṡ',\n    'ι' => 'ι',\n    'ß' => 'ss',\n    'ŉ' => 'ʼn',\n    'ǰ' => 'ǰ',\n    'ΐ' => 'ΐ',\n    'ΰ' => 'ΰ',\n    'և' => 'եւ',\n    'ẖ' => 'ẖ',\n    'ẗ' => 'ẗ',\n    'ẘ' => 'ẘ',\n    'ẙ' => 'ẙ',\n    'ẚ' => 'aʾ',\n    'ẞ' => 'ss',\n    'ὐ' => 'ὐ',\n    'ὒ' => 'ὒ',\n    'ὔ' => 'ὔ',\n    'ὖ' => 'ὖ',\n    'ᾀ' => 'ἀι',\n    'ᾁ' => 'ἁι',\n    'ᾂ' => 'ἂι',\n    'ᾃ' => 'ἃι',\n    'ᾄ' => 'ἄι',\n    'ᾅ' => 'ἅι',\n    'ᾆ' => 'ἆι',\n    'ᾇ' => 'ἇι',\n    'ᾈ' => 'ἀι',\n    'ᾉ' => 'ἁι',\n    'ᾊ' => 'ἂι',\n    'ᾋ' => 'ἃι',\n    'ᾌ' => 'ἄι',\n    'ᾍ' => 'ἅι',\n    'ᾎ' => 'ἆι',\n    'ᾏ' => 'ἇι',\n    'ᾐ' => 'ἠι',\n    'ᾑ' => 'ἡι',\n    'ᾒ' => 'ἢι',\n    'ᾓ' => 'ἣι',\n    'ᾔ' => 'ἤι',\n    'ᾕ' => 'ἥι',\n    'ᾖ' => 'ἦι',\n    'ᾗ' => 'ἧι',\n    'ᾘ' => 'ἠι',\n    'ᾙ' => 'ἡι',\n    'ᾚ' => 'ἢι',\n    'ᾛ' => 'ἣι',\n    'ᾜ' => 'ἤι',\n    'ᾝ' => 'ἥι',\n    'ᾞ' => 'ἦι',\n    'ᾟ' => 'ἧι',\n    'ᾠ' => 'ὠι',\n    'ᾡ' => 'ὡι',\n    'ᾢ' => 'ὢι',\n    'ᾣ' => 'ὣι',\n    'ᾤ' => 'ὤι',\n    'ᾥ' => 'ὥι',\n    'ᾦ' => 'ὦι',\n    'ᾧ' => 'ὧι',\n    'ᾨ' => 'ὠι',\n    'ᾩ' => 'ὡι',\n    'ᾪ' => 'ὢι',\n    'ᾫ' => 'ὣι',\n    'ᾬ' => 'ὤι',\n    'ᾭ' => 'ὥι',\n    'ᾮ' => 'ὦι',\n    'ᾯ' => 'ὧι',\n    'ᾲ' => 'ὰι',\n    'ᾳ' => 'αι',\n    'ᾴ' => 'άι',\n    'ᾶ' => 'ᾶ',\n    'ᾷ' => 'ᾶι',\n    'ᾼ' => 'αι',\n    'ῂ' => 'ὴι',\n    'ῃ' => 'ηι',\n    'ῄ' => 'ήι',\n    'ῆ' => 'ῆ',\n    'ῇ' => 'ῆι',\n    'ῌ' => 'ηι',\n    'ῒ' => 'ῒ',\n    'ῖ' => 'ῖ',\n    'ῗ' => 'ῗ',\n    'ῢ' => 'ῢ',\n    'ῤ' => 'ῤ',\n    'ῦ' => 'ῦ',\n    'ῧ' => 'ῧ',\n    'ῲ' => 'ὼι',\n    'ῳ' => 'ωι',\n    'ῴ' => 'ώι',\n    'ῶ' => 'ῶ',\n    'ῷ' => 'ῶι',\n    'ῼ' => 'ωι',\n    'ﬀ' => 'ff',\n    'ﬁ' => 'fi',\n    'ﬂ' => 'fl',\n    'ﬃ' => 'ffi',\n    'ﬄ' => 'ffl',\n    'ﬅ' => 'st',\n    'ﬆ' => 'st',\n    'ﬓ' => 'մն',\n    'ﬔ' => 'մե',\n    'ﬕ' => 'մի',\n    'ﬖ' => 'վն',\n    'ﬗ' => 'մխ',\n];\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php",
    "content": "<?php\n\nreturn array (\n  'A' => 'a',\n  'B' => 'b',\n  'C' => 'c',\n  'D' => 'd',\n  'E' => 'e',\n  'F' => 'f',\n  'G' => 'g',\n  'H' => 'h',\n  'I' => 'i',\n  'J' => 'j',\n  'K' => 'k',\n  'L' => 'l',\n  'M' => 'm',\n  'N' => 'n',\n  'O' => 'o',\n  'P' => 'p',\n  'Q' => 'q',\n  'R' => 'r',\n  'S' => 's',\n  'T' => 't',\n  'U' => 'u',\n  'V' => 'v',\n  'W' => 'w',\n  'X' => 'x',\n  'Y' => 'y',\n  'Z' => 'z',\n  'À' => 'à',\n  'Á' => 'á',\n  'Â' => 'â',\n  'Ã' => 'ã',\n  'Ä' => 'ä',\n  'Å' => 'å',\n  'Æ' => 'æ',\n  'Ç' => 'ç',\n  'È' => 'è',\n  'É' => 'é',\n  'Ê' => 'ê',\n  'Ë' => 'ë',\n  'Ì' => 'ì',\n  'Í' => 'í',\n  'Î' => 'î',\n  'Ï' => 'ï',\n  'Ð' => 'ð',\n  'Ñ' => 'ñ',\n  'Ò' => 'ò',\n  'Ó' => 'ó',\n  'Ô' => 'ô',\n  'Õ' => 'õ',\n  'Ö' => 'ö',\n  'Ø' => 'ø',\n  'Ù' => 'ù',\n  'Ú' => 'ú',\n  'Û' => 'û',\n  'Ü' => 'ü',\n  'Ý' => 'ý',\n  'Þ' => 'þ',\n  'Ā' => 'ā',\n  'Ă' => 'ă',\n  'Ą' => 'ą',\n  'Ć' => 'ć',\n  'Ĉ' => 'ĉ',\n  'Ċ' => 'ċ',\n  'Č' => 'č',\n  'Ď' => 'ď',\n  'Đ' => 'đ',\n  'Ē' => 'ē',\n  'Ĕ' => 'ĕ',\n  'Ė' => 'ė',\n  'Ę' => 'ę',\n  'Ě' => 'ě',\n  'Ĝ' => 'ĝ',\n  'Ğ' => 'ğ',\n  'Ġ' => 'ġ',\n  'Ģ' => 'ģ',\n  'Ĥ' => 'ĥ',\n  'Ħ' => 'ħ',\n  'Ĩ' => 'ĩ',\n  'Ī' => 'ī',\n  'Ĭ' => 'ĭ',\n  'Į' => 'į',\n  'İ' => 'i̇',\n  'Ĳ' => 'ĳ',\n  'Ĵ' => 'ĵ',\n  'Ķ' => 'ķ',\n  'Ĺ' => 'ĺ',\n  'Ļ' => 'ļ',\n  'Ľ' => 'ľ',\n  'Ŀ' => 'ŀ',\n  'Ł' => 'ł',\n  'Ń' => 'ń',\n  'Ņ' => 'ņ',\n  'Ň' => 'ň',\n  'Ŋ' => 'ŋ',\n  'Ō' => 'ō',\n  'Ŏ' => 'ŏ',\n  'Ő' => 'ő',\n  'Œ' => 'œ',\n  'Ŕ' => 'ŕ',\n  'Ŗ' => 'ŗ',\n  'Ř' => 'ř',\n  'Ś' => 'ś',\n  'Ŝ' => 'ŝ',\n  'Ş' => 'ş',\n  'Š' => 'š',\n  'Ţ' => 'ţ',\n  'Ť' => 'ť',\n  'Ŧ' => 'ŧ',\n  'Ũ' => 'ũ',\n  'Ū' => 'ū',\n  'Ŭ' => 'ŭ',\n  'Ů' => 'ů',\n  'Ű' => 'ű',\n  'Ų' => 'ų',\n  'Ŵ' => 'ŵ',\n  'Ŷ' => 'ŷ',\n  'Ÿ' => 'ÿ',\n  'Ź' => 'ź',\n  'Ż' => 'ż',\n  'Ž' => 'ž',\n  'Ɓ' => 'ɓ',\n  'Ƃ' => 'ƃ',\n  'Ƅ' => 'ƅ',\n  'Ɔ' => 'ɔ',\n  'Ƈ' => 'ƈ',\n  'Ɖ' => 'ɖ',\n  'Ɗ' => 'ɗ',\n  'Ƌ' => 'ƌ',\n  'Ǝ' => 'ǝ',\n  'Ə' => 'ə',\n  'Ɛ' => 'ɛ',\n  'Ƒ' => 'ƒ',\n  'Ɠ' => 'ɠ',\n  'Ɣ' => 'ɣ',\n  'Ɩ' => 'ɩ',\n  'Ɨ' => 'ɨ',\n  'Ƙ' => 'ƙ',\n  'Ɯ' => 'ɯ',\n  'Ɲ' => 'ɲ',\n  'Ɵ' => 'ɵ',\n  'Ơ' => 'ơ',\n  'Ƣ' => 'ƣ',\n  'Ƥ' => 'ƥ',\n  'Ʀ' => 'ʀ',\n  'Ƨ' => 'ƨ',\n  'Ʃ' => 'ʃ',\n  'Ƭ' => 'ƭ',\n  'Ʈ' => 'ʈ',\n  'Ư' => 'ư',\n  'Ʊ' => 'ʊ',\n  'Ʋ' => 'ʋ',\n  'Ƴ' => 'ƴ',\n  'Ƶ' => 'ƶ',\n  'Ʒ' => 'ʒ',\n  'Ƹ' => 'ƹ',\n  'Ƽ' => 'ƽ',\n  'Ǆ' => 'ǆ',\n  'ǅ' => 'ǆ',\n  'Ǉ' => 'ǉ',\n  'ǈ' => 'ǉ',\n  'Ǌ' => 'ǌ',\n  'ǋ' => 'ǌ',\n  'Ǎ' => 'ǎ',\n  'Ǐ' => 'ǐ',\n  'Ǒ' => 'ǒ',\n  'Ǔ' => 'ǔ',\n  'Ǖ' => 'ǖ',\n  'Ǘ' => 'ǘ',\n  'Ǚ' => 'ǚ',\n  'Ǜ' => 'ǜ',\n  'Ǟ' => 'ǟ',\n  'Ǡ' => 'ǡ',\n  'Ǣ' => 'ǣ',\n  'Ǥ' => 'ǥ',\n  'Ǧ' => 'ǧ',\n  'Ǩ' => 'ǩ',\n  'Ǫ' => 'ǫ',\n  'Ǭ' => 'ǭ',\n  'Ǯ' => 'ǯ',\n  'Ǳ' => 'ǳ',\n  'ǲ' => 'ǳ',\n  'Ǵ' => 'ǵ',\n  'Ƕ' => 'ƕ',\n  'Ƿ' => 'ƿ',\n  'Ǹ' => 'ǹ',\n  'Ǻ' => 'ǻ',\n  'Ǽ' => 'ǽ',\n  'Ǿ' => 'ǿ',\n  'Ȁ' => 'ȁ',\n  'Ȃ' => 'ȃ',\n  'Ȅ' => 'ȅ',\n  'Ȇ' => 'ȇ',\n  'Ȉ' => 'ȉ',\n  'Ȋ' => 'ȋ',\n  'Ȍ' => 'ȍ',\n  'Ȏ' => 'ȏ',\n  'Ȑ' => 'ȑ',\n  'Ȓ' => 'ȓ',\n  'Ȕ' => 'ȕ',\n  'Ȗ' => 'ȗ',\n  'Ș' => 'ș',\n  'Ț' => 'ț',\n  'Ȝ' => 'ȝ',\n  'Ȟ' => 'ȟ',\n  'Ƞ' => 'ƞ',\n  'Ȣ' => 'ȣ',\n  'Ȥ' => 'ȥ',\n  'Ȧ' => 'ȧ',\n  'Ȩ' => 'ȩ',\n  'Ȫ' => 'ȫ',\n  'Ȭ' => 'ȭ',\n  'Ȯ' => 'ȯ',\n  'Ȱ' => 'ȱ',\n  'Ȳ' => 'ȳ',\n  'Ⱥ' => 'ⱥ',\n  'Ȼ' => 'ȼ',\n  'Ƚ' => 'ƚ',\n  'Ⱦ' => 'ⱦ',\n  'Ɂ' => 'ɂ',\n  'Ƀ' => 'ƀ',\n  'Ʉ' => 'ʉ',\n  'Ʌ' => 'ʌ',\n  'Ɇ' => 'ɇ',\n  'Ɉ' => 'ɉ',\n  'Ɋ' => 'ɋ',\n  'Ɍ' => 'ɍ',\n  'Ɏ' => 'ɏ',\n  'Ͱ' => 'ͱ',\n  'Ͳ' => 'ͳ',\n  'Ͷ' => 'ͷ',\n  'Ϳ' => 'ϳ',\n  'Ά' => 'ά',\n  'Έ' => 'έ',\n  'Ή' => 'ή',\n  'Ί' => 'ί',\n  'Ό' => 'ό',\n  'Ύ' => 'ύ',\n  'Ώ' => 'ώ',\n  'Α' => 'α',\n  'Β' => 'β',\n  'Γ' => 'γ',\n  'Δ' => 'δ',\n  'Ε' => 'ε',\n  'Ζ' => 'ζ',\n  'Η' => 'η',\n  'Θ' => 'θ',\n  'Ι' => 'ι',\n  'Κ' => 'κ',\n  'Λ' => 'λ',\n  'Μ' => 'μ',\n  'Ν' => 'ν',\n  'Ξ' => 'ξ',\n  'Ο' => 'ο',\n  'Π' => 'π',\n  'Ρ' => 'ρ',\n  'Σ' => 'σ',\n  'Τ' => 'τ',\n  'Υ' => 'υ',\n  'Φ' => 'φ',\n  'Χ' => 'χ',\n  'Ψ' => 'ψ',\n  'Ω' => 'ω',\n  'Ϊ' => 'ϊ',\n  'Ϋ' => 'ϋ',\n  'Ϗ' => 'ϗ',\n  'Ϙ' => 'ϙ',\n  'Ϛ' => 'ϛ',\n  'Ϝ' => 'ϝ',\n  'Ϟ' => 'ϟ',\n  'Ϡ' => 'ϡ',\n  'Ϣ' => 'ϣ',\n  'Ϥ' => 'ϥ',\n  'Ϧ' => 'ϧ',\n  'Ϩ' => 'ϩ',\n  'Ϫ' => 'ϫ',\n  'Ϭ' => 'ϭ',\n  'Ϯ' => 'ϯ',\n  'ϴ' => 'θ',\n  'Ϸ' => 'ϸ',\n  'Ϲ' => 'ϲ',\n  'Ϻ' => 'ϻ',\n  'Ͻ' => 'ͻ',\n  'Ͼ' => 'ͼ',\n  'Ͽ' => 'ͽ',\n  'Ѐ' => 'ѐ',\n  'Ё' => 'ё',\n  'Ђ' => 'ђ',\n  'Ѓ' => 'ѓ',\n  'Є' => 'є',\n  'Ѕ' => 'ѕ',\n  'І' => 'і',\n  'Ї' => 'ї',\n  'Ј' => 'ј',\n  'Љ' => 'љ',\n  'Њ' => 'њ',\n  'Ћ' => 'ћ',\n  'Ќ' => 'ќ',\n  'Ѝ' => 'ѝ',\n  'Ў' => 'ў',\n  'Џ' => 'џ',\n  'А' => 'а',\n  'Б' => 'б',\n  'В' => 'в',\n  'Г' => 'г',\n  'Д' => 'д',\n  'Е' => 'е',\n  'Ж' => 'ж',\n  'З' => 'з',\n  'И' => 'и',\n  'Й' => 'й',\n  'К' => 'к',\n  'Л' => 'л',\n  'М' => 'м',\n  'Н' => 'н',\n  'О' => 'о',\n  'П' => 'п',\n  'Р' => 'р',\n  'С' => 'с',\n  'Т' => 'т',\n  'У' => 'у',\n  'Ф' => 'ф',\n  'Х' => 'х',\n  'Ц' => 'ц',\n  'Ч' => 'ч',\n  'Ш' => 'ш',\n  'Щ' => 'щ',\n  'Ъ' => 'ъ',\n  'Ы' => 'ы',\n  'Ь' => 'ь',\n  'Э' => 'э',\n  'Ю' => 'ю',\n  'Я' => 'я',\n  'Ѡ' => 'ѡ',\n  'Ѣ' => 'ѣ',\n  'Ѥ' => 'ѥ',\n  'Ѧ' => 'ѧ',\n  'Ѩ' => 'ѩ',\n  'Ѫ' => 'ѫ',\n  'Ѭ' => 'ѭ',\n  'Ѯ' => 'ѯ',\n  'Ѱ' => 'ѱ',\n  'Ѳ' => 'ѳ',\n  'Ѵ' => 'ѵ',\n  'Ѷ' => 'ѷ',\n  'Ѹ' => 'ѹ',\n  'Ѻ' => 'ѻ',\n  'Ѽ' => 'ѽ',\n  'Ѿ' => 'ѿ',\n  'Ҁ' => 'ҁ',\n  'Ҋ' => 'ҋ',\n  'Ҍ' => 'ҍ',\n  'Ҏ' => 'ҏ',\n  'Ґ' => 'ґ',\n  'Ғ' => 'ғ',\n  'Ҕ' => 'ҕ',\n  'Җ' => 'җ',\n  'Ҙ' => 'ҙ',\n  'Қ' => 'қ',\n  'Ҝ' => 'ҝ',\n  'Ҟ' => 'ҟ',\n  'Ҡ' => 'ҡ',\n  'Ң' => 'ң',\n  'Ҥ' => 'ҥ',\n  'Ҧ' => 'ҧ',\n  'Ҩ' => 'ҩ',\n  'Ҫ' => 'ҫ',\n  'Ҭ' => 'ҭ',\n  'Ү' => 'ү',\n  'Ұ' => 'ұ',\n  'Ҳ' => 'ҳ',\n  'Ҵ' => 'ҵ',\n  'Ҷ' => 'ҷ',\n  'Ҹ' => 'ҹ',\n  'Һ' => 'һ',\n  'Ҽ' => 'ҽ',\n  'Ҿ' => 'ҿ',\n  'Ӏ' => 'ӏ',\n  'Ӂ' => 'ӂ',\n  'Ӄ' => 'ӄ',\n  'Ӆ' => 'ӆ',\n  'Ӈ' => 'ӈ',\n  'Ӊ' => 'ӊ',\n  'Ӌ' => 'ӌ',\n  'Ӎ' => 'ӎ',\n  'Ӑ' => 'ӑ',\n  'Ӓ' => 'ӓ',\n  'Ӕ' => 'ӕ',\n  'Ӗ' => 'ӗ',\n  'Ә' => 'ә',\n  'Ӛ' => 'ӛ',\n  'Ӝ' => 'ӝ',\n  'Ӟ' => 'ӟ',\n  'Ӡ' => 'ӡ',\n  'Ӣ' => 'ӣ',\n  'Ӥ' => 'ӥ',\n  'Ӧ' => 'ӧ',\n  'Ө' => 'ө',\n  'Ӫ' => 'ӫ',\n  'Ӭ' => 'ӭ',\n  'Ӯ' => 'ӯ',\n  'Ӱ' => 'ӱ',\n  'Ӳ' => 'ӳ',\n  'Ӵ' => 'ӵ',\n  'Ӷ' => 'ӷ',\n  'Ӹ' => 'ӹ',\n  'Ӻ' => 'ӻ',\n  'Ӽ' => 'ӽ',\n  'Ӿ' => 'ӿ',\n  'Ԁ' => 'ԁ',\n  'Ԃ' => 'ԃ',\n  'Ԅ' => 'ԅ',\n  'Ԇ' => 'ԇ',\n  'Ԉ' => 'ԉ',\n  'Ԋ' => 'ԋ',\n  'Ԍ' => 'ԍ',\n  'Ԏ' => 'ԏ',\n  'Ԑ' => 'ԑ',\n  'Ԓ' => 'ԓ',\n  'Ԕ' => 'ԕ',\n  'Ԗ' => 'ԗ',\n  'Ԙ' => 'ԙ',\n  'Ԛ' => 'ԛ',\n  'Ԝ' => 'ԝ',\n  'Ԟ' => 'ԟ',\n  'Ԡ' => 'ԡ',\n  'Ԣ' => 'ԣ',\n  'Ԥ' => 'ԥ',\n  'Ԧ' => 'ԧ',\n  'Ԩ' => 'ԩ',\n  'Ԫ' => 'ԫ',\n  'Ԭ' => 'ԭ',\n  'Ԯ' => 'ԯ',\n  'Ա' => 'ա',\n  'Բ' => 'բ',\n  'Գ' => 'գ',\n  'Դ' => 'դ',\n  'Ե' => 'ե',\n  'Զ' => 'զ',\n  'Է' => 'է',\n  'Ը' => 'ը',\n  'Թ' => 'թ',\n  'Ժ' => 'ժ',\n  'Ի' => 'ի',\n  'Լ' => 'լ',\n  'Խ' => 'խ',\n  'Ծ' => 'ծ',\n  'Կ' => 'կ',\n  'Հ' => 'հ',\n  'Ձ' => 'ձ',\n  'Ղ' => 'ղ',\n  'Ճ' => 'ճ',\n  'Մ' => 'մ',\n  'Յ' => 'յ',\n  'Ն' => 'ն',\n  'Շ' => 'շ',\n  'Ո' => 'ո',\n  'Չ' => 'չ',\n  'Պ' => 'պ',\n  'Ջ' => 'ջ',\n  'Ռ' => 'ռ',\n  'Ս' => 'ս',\n  'Վ' => 'վ',\n  'Տ' => 'տ',\n  'Ր' => 'ր',\n  'Ց' => 'ց',\n  'Ւ' => 'ւ',\n  'Փ' => 'փ',\n  'Ք' => 'ք',\n  'Օ' => 'օ',\n  'Ֆ' => 'ֆ',\n  'Ⴀ' => 'ⴀ',\n  'Ⴁ' => 'ⴁ',\n  'Ⴂ' => 'ⴂ',\n  'Ⴃ' => 'ⴃ',\n  'Ⴄ' => 'ⴄ',\n  'Ⴅ' => 'ⴅ',\n  'Ⴆ' => 'ⴆ',\n  'Ⴇ' => 'ⴇ',\n  'Ⴈ' => 'ⴈ',\n  'Ⴉ' => 'ⴉ',\n  'Ⴊ' => 'ⴊ',\n  'Ⴋ' => 'ⴋ',\n  'Ⴌ' => 'ⴌ',\n  'Ⴍ' => 'ⴍ',\n  'Ⴎ' => 'ⴎ',\n  'Ⴏ' => 'ⴏ',\n  'Ⴐ' => 'ⴐ',\n  'Ⴑ' => 'ⴑ',\n  'Ⴒ' => 'ⴒ',\n  'Ⴓ' => 'ⴓ',\n  'Ⴔ' => 'ⴔ',\n  'Ⴕ' => 'ⴕ',\n  'Ⴖ' => 'ⴖ',\n  'Ⴗ' => 'ⴗ',\n  'Ⴘ' => 'ⴘ',\n  'Ⴙ' => 'ⴙ',\n  'Ⴚ' => 'ⴚ',\n  'Ⴛ' => 'ⴛ',\n  'Ⴜ' => 'ⴜ',\n  'Ⴝ' => 'ⴝ',\n  'Ⴞ' => 'ⴞ',\n  'Ⴟ' => 'ⴟ',\n  'Ⴠ' => 'ⴠ',\n  'Ⴡ' => 'ⴡ',\n  'Ⴢ' => 'ⴢ',\n  'Ⴣ' => 'ⴣ',\n  'Ⴤ' => 'ⴤ',\n  'Ⴥ' => 'ⴥ',\n  'Ⴧ' => 'ⴧ',\n  'Ⴭ' => 'ⴭ',\n  'Ꭰ' => 'ꭰ',\n  'Ꭱ' => 'ꭱ',\n  'Ꭲ' => 'ꭲ',\n  'Ꭳ' => 'ꭳ',\n  'Ꭴ' => 'ꭴ',\n  'Ꭵ' => 'ꭵ',\n  'Ꭶ' => 'ꭶ',\n  'Ꭷ' => 'ꭷ',\n  'Ꭸ' => 'ꭸ',\n  'Ꭹ' => 'ꭹ',\n  'Ꭺ' => 'ꭺ',\n  'Ꭻ' => 'ꭻ',\n  'Ꭼ' => 'ꭼ',\n  'Ꭽ' => 'ꭽ',\n  'Ꭾ' => 'ꭾ',\n  'Ꭿ' => 'ꭿ',\n  'Ꮀ' => 'ꮀ',\n  'Ꮁ' => 'ꮁ',\n  'Ꮂ' => 'ꮂ',\n  'Ꮃ' => 'ꮃ',\n  'Ꮄ' => 'ꮄ',\n  'Ꮅ' => 'ꮅ',\n  'Ꮆ' => 'ꮆ',\n  'Ꮇ' => 'ꮇ',\n  'Ꮈ' => 'ꮈ',\n  'Ꮉ' => 'ꮉ',\n  'Ꮊ' => 'ꮊ',\n  'Ꮋ' => 'ꮋ',\n  'Ꮌ' => 'ꮌ',\n  'Ꮍ' => 'ꮍ',\n  'Ꮎ' => 'ꮎ',\n  'Ꮏ' => 'ꮏ',\n  'Ꮐ' => 'ꮐ',\n  'Ꮑ' => 'ꮑ',\n  'Ꮒ' => 'ꮒ',\n  'Ꮓ' => 'ꮓ',\n  'Ꮔ' => 'ꮔ',\n  'Ꮕ' => 'ꮕ',\n  'Ꮖ' => 'ꮖ',\n  'Ꮗ' => 'ꮗ',\n  'Ꮘ' => 'ꮘ',\n  'Ꮙ' => 'ꮙ',\n  'Ꮚ' => 'ꮚ',\n  'Ꮛ' => 'ꮛ',\n  'Ꮜ' => 'ꮜ',\n  'Ꮝ' => 'ꮝ',\n  'Ꮞ' => 'ꮞ',\n  'Ꮟ' => 'ꮟ',\n  'Ꮠ' => 'ꮠ',\n  'Ꮡ' => 'ꮡ',\n  'Ꮢ' => 'ꮢ',\n  'Ꮣ' => 'ꮣ',\n  'Ꮤ' => 'ꮤ',\n  'Ꮥ' => 'ꮥ',\n  'Ꮦ' => 'ꮦ',\n  'Ꮧ' => 'ꮧ',\n  'Ꮨ' => 'ꮨ',\n  'Ꮩ' => 'ꮩ',\n  'Ꮪ' => 'ꮪ',\n  'Ꮫ' => 'ꮫ',\n  'Ꮬ' => 'ꮬ',\n  'Ꮭ' => 'ꮭ',\n  'Ꮮ' => 'ꮮ',\n  'Ꮯ' => 'ꮯ',\n  'Ꮰ' => 'ꮰ',\n  'Ꮱ' => 'ꮱ',\n  'Ꮲ' => 'ꮲ',\n  'Ꮳ' => 'ꮳ',\n  'Ꮴ' => 'ꮴ',\n  'Ꮵ' => 'ꮵ',\n  'Ꮶ' => 'ꮶ',\n  'Ꮷ' => 'ꮷ',\n  'Ꮸ' => 'ꮸ',\n  'Ꮹ' => 'ꮹ',\n  'Ꮺ' => 'ꮺ',\n  'Ꮻ' => 'ꮻ',\n  'Ꮼ' => 'ꮼ',\n  'Ꮽ' => 'ꮽ',\n  'Ꮾ' => 'ꮾ',\n  'Ꮿ' => 'ꮿ',\n  'Ᏸ' => 'ᏸ',\n  'Ᏹ' => 'ᏹ',\n  'Ᏺ' => 'ᏺ',\n  'Ᏻ' => 'ᏻ',\n  'Ᏼ' => 'ᏼ',\n  'Ᏽ' => 'ᏽ',\n  'Ა' => 'ა',\n  'Ბ' => 'ბ',\n  'Გ' => 'გ',\n  'Დ' => 'დ',\n  'Ე' => 'ე',\n  'Ვ' => 'ვ',\n  'Ზ' => 'ზ',\n  'Თ' => 'თ',\n  'Ი' => 'ი',\n  'Კ' => 'კ',\n  'Ლ' => 'ლ',\n  'Მ' => 'მ',\n  'Ნ' => 'ნ',\n  'Ო' => 'ო',\n  'Პ' => 'პ',\n  'Ჟ' => 'ჟ',\n  'Რ' => 'რ',\n  'Ს' => 'ს',\n  'Ტ' => 'ტ',\n  'Უ' => 'უ',\n  'Ფ' => 'ფ',\n  'Ქ' => 'ქ',\n  'Ღ' => 'ღ',\n  'Ყ' => 'ყ',\n  'Შ' => 'შ',\n  'Ჩ' => 'ჩ',\n  'Ც' => 'ც',\n  'Ძ' => 'ძ',\n  'Წ' => 'წ',\n  'Ჭ' => 'ჭ',\n  'Ხ' => 'ხ',\n  'Ჯ' => 'ჯ',\n  'Ჰ' => 'ჰ',\n  'Ჱ' => 'ჱ',\n  'Ჲ' => 'ჲ',\n  'Ჳ' => 'ჳ',\n  'Ჴ' => 'ჴ',\n  'Ჵ' => 'ჵ',\n  'Ჶ' => 'ჶ',\n  'Ჷ' => 'ჷ',\n  'Ჸ' => 'ჸ',\n  'Ჹ' => 'ჹ',\n  'Ჺ' => 'ჺ',\n  'Ჽ' => 'ჽ',\n  'Ჾ' => 'ჾ',\n  'Ჿ' => 'ჿ',\n  'Ḁ' => 'ḁ',\n  'Ḃ' => 'ḃ',\n  'Ḅ' => 'ḅ',\n  'Ḇ' => 'ḇ',\n  'Ḉ' => 'ḉ',\n  'Ḋ' => 'ḋ',\n  'Ḍ' => 'ḍ',\n  'Ḏ' => 'ḏ',\n  'Ḑ' => 'ḑ',\n  'Ḓ' => 'ḓ',\n  'Ḕ' => 'ḕ',\n  'Ḗ' => 'ḗ',\n  'Ḙ' => 'ḙ',\n  'Ḛ' => 'ḛ',\n  'Ḝ' => 'ḝ',\n  'Ḟ' => 'ḟ',\n  'Ḡ' => 'ḡ',\n  'Ḣ' => 'ḣ',\n  'Ḥ' => 'ḥ',\n  'Ḧ' => 'ḧ',\n  'Ḩ' => 'ḩ',\n  'Ḫ' => 'ḫ',\n  'Ḭ' => 'ḭ',\n  'Ḯ' => 'ḯ',\n  'Ḱ' => 'ḱ',\n  'Ḳ' => 'ḳ',\n  'Ḵ' => 'ḵ',\n  'Ḷ' => 'ḷ',\n  'Ḹ' => 'ḹ',\n  'Ḻ' => 'ḻ',\n  'Ḽ' => 'ḽ',\n  'Ḿ' => 'ḿ',\n  'Ṁ' => 'ṁ',\n  'Ṃ' => 'ṃ',\n  'Ṅ' => 'ṅ',\n  'Ṇ' => 'ṇ',\n  'Ṉ' => 'ṉ',\n  'Ṋ' => 'ṋ',\n  'Ṍ' => 'ṍ',\n  'Ṏ' => 'ṏ',\n  'Ṑ' => 'ṑ',\n  'Ṓ' => 'ṓ',\n  'Ṕ' => 'ṕ',\n  'Ṗ' => 'ṗ',\n  'Ṙ' => 'ṙ',\n  'Ṛ' => 'ṛ',\n  'Ṝ' => 'ṝ',\n  'Ṟ' => 'ṟ',\n  'Ṡ' => 'ṡ',\n  'Ṣ' => 'ṣ',\n  'Ṥ' => 'ṥ',\n  'Ṧ' => 'ṧ',\n  'Ṩ' => 'ṩ',\n  'Ṫ' => 'ṫ',\n  'Ṭ' => 'ṭ',\n  'Ṯ' => 'ṯ',\n  'Ṱ' => 'ṱ',\n  'Ṳ' => 'ṳ',\n  'Ṵ' => 'ṵ',\n  'Ṷ' => 'ṷ',\n  'Ṹ' => 'ṹ',\n  'Ṻ' => 'ṻ',\n  'Ṽ' => 'ṽ',\n  'Ṿ' => 'ṿ',\n  'Ẁ' => 'ẁ',\n  'Ẃ' => 'ẃ',\n  'Ẅ' => 'ẅ',\n  'Ẇ' => 'ẇ',\n  'Ẉ' => 'ẉ',\n  'Ẋ' => 'ẋ',\n  'Ẍ' => 'ẍ',\n  'Ẏ' => 'ẏ',\n  'Ẑ' => 'ẑ',\n  'Ẓ' => 'ẓ',\n  'Ẕ' => 'ẕ',\n  'ẞ' => 'ß',\n  'Ạ' => 'ạ',\n  'Ả' => 'ả',\n  'Ấ' => 'ấ',\n  'Ầ' => 'ầ',\n  'Ẩ' => 'ẩ',\n  'Ẫ' => 'ẫ',\n  'Ậ' => 'ậ',\n  'Ắ' => 'ắ',\n  'Ằ' => 'ằ',\n  'Ẳ' => 'ẳ',\n  'Ẵ' => 'ẵ',\n  'Ặ' => 'ặ',\n  'Ẹ' => 'ẹ',\n  'Ẻ' => 'ẻ',\n  'Ẽ' => 'ẽ',\n  'Ế' => 'ế',\n  'Ề' => 'ề',\n  'Ể' => 'ể',\n  'Ễ' => 'ễ',\n  'Ệ' => 'ệ',\n  'Ỉ' => 'ỉ',\n  'Ị' => 'ị',\n  'Ọ' => 'ọ',\n  'Ỏ' => 'ỏ',\n  'Ố' => 'ố',\n  'Ồ' => 'ồ',\n  'Ổ' => 'ổ',\n  'Ỗ' => 'ỗ',\n  'Ộ' => 'ộ',\n  'Ớ' => 'ớ',\n  'Ờ' => 'ờ',\n  'Ở' => 'ở',\n  'Ỡ' => 'ỡ',\n  'Ợ' => 'ợ',\n  'Ụ' => 'ụ',\n  'Ủ' => 'ủ',\n  'Ứ' => 'ứ',\n  'Ừ' => 'ừ',\n  'Ử' => 'ử',\n  'Ữ' => 'ữ',\n  'Ự' => 'ự',\n  'Ỳ' => 'ỳ',\n  'Ỵ' => 'ỵ',\n  'Ỷ' => 'ỷ',\n  'Ỹ' => 'ỹ',\n  'Ỻ' => 'ỻ',\n  'Ỽ' => 'ỽ',\n  'Ỿ' => 'ỿ',\n  'Ἀ' => 'ἀ',\n  'Ἁ' => 'ἁ',\n  'Ἂ' => 'ἂ',\n  'Ἃ' => 'ἃ',\n  'Ἄ' => 'ἄ',\n  'Ἅ' => 'ἅ',\n  'Ἆ' => 'ἆ',\n  'Ἇ' => 'ἇ',\n  'Ἐ' => 'ἐ',\n  'Ἑ' => 'ἑ',\n  'Ἒ' => 'ἒ',\n  'Ἓ' => 'ἓ',\n  'Ἔ' => 'ἔ',\n  'Ἕ' => 'ἕ',\n  'Ἠ' => 'ἠ',\n  'Ἡ' => 'ἡ',\n  'Ἢ' => 'ἢ',\n  'Ἣ' => 'ἣ',\n  'Ἤ' => 'ἤ',\n  'Ἥ' => 'ἥ',\n  'Ἦ' => 'ἦ',\n  'Ἧ' => 'ἧ',\n  'Ἰ' => 'ἰ',\n  'Ἱ' => 'ἱ',\n  'Ἲ' => 'ἲ',\n  'Ἳ' => 'ἳ',\n  'Ἴ' => 'ἴ',\n  'Ἵ' => 'ἵ',\n  'Ἶ' => 'ἶ',\n  'Ἷ' => 'ἷ',\n  'Ὀ' => 'ὀ',\n  'Ὁ' => 'ὁ',\n  'Ὂ' => 'ὂ',\n  'Ὃ' => 'ὃ',\n  'Ὄ' => 'ὄ',\n  'Ὅ' => 'ὅ',\n  'Ὑ' => 'ὑ',\n  'Ὓ' => 'ὓ',\n  'Ὕ' => 'ὕ',\n  'Ὗ' => 'ὗ',\n  'Ὠ' => 'ὠ',\n  'Ὡ' => 'ὡ',\n  'Ὢ' => 'ὢ',\n  'Ὣ' => 'ὣ',\n  'Ὤ' => 'ὤ',\n  'Ὥ' => 'ὥ',\n  'Ὦ' => 'ὦ',\n  'Ὧ' => 'ὧ',\n  'ᾈ' => 'ᾀ',\n  'ᾉ' => 'ᾁ',\n  'ᾊ' => 'ᾂ',\n  'ᾋ' => 'ᾃ',\n  'ᾌ' => 'ᾄ',\n  'ᾍ' => 'ᾅ',\n  'ᾎ' => 'ᾆ',\n  'ᾏ' => 'ᾇ',\n  'ᾘ' => 'ᾐ',\n  'ᾙ' => 'ᾑ',\n  'ᾚ' => 'ᾒ',\n  'ᾛ' => 'ᾓ',\n  'ᾜ' => 'ᾔ',\n  'ᾝ' => 'ᾕ',\n  'ᾞ' => 'ᾖ',\n  'ᾟ' => 'ᾗ',\n  'ᾨ' => 'ᾠ',\n  'ᾩ' => 'ᾡ',\n  'ᾪ' => 'ᾢ',\n  'ᾫ' => 'ᾣ',\n  'ᾬ' => 'ᾤ',\n  'ᾭ' => 'ᾥ',\n  'ᾮ' => 'ᾦ',\n  'ᾯ' => 'ᾧ',\n  'Ᾰ' => 'ᾰ',\n  'Ᾱ' => 'ᾱ',\n  'Ὰ' => 'ὰ',\n  'Ά' => 'ά',\n  'ᾼ' => 'ᾳ',\n  'Ὲ' => 'ὲ',\n  'Έ' => 'έ',\n  'Ὴ' => 'ὴ',\n  'Ή' => 'ή',\n  'ῌ' => 'ῃ',\n  'Ῐ' => 'ῐ',\n  'Ῑ' => 'ῑ',\n  'Ὶ' => 'ὶ',\n  'Ί' => 'ί',\n  'Ῠ' => 'ῠ',\n  'Ῡ' => 'ῡ',\n  'Ὺ' => 'ὺ',\n  'Ύ' => 'ύ',\n  'Ῥ' => 'ῥ',\n  'Ὸ' => 'ὸ',\n  'Ό' => 'ό',\n  'Ὼ' => 'ὼ',\n  'Ώ' => 'ώ',\n  'ῼ' => 'ῳ',\n  'Ω' => 'ω',\n  'K' => 'k',\n  'Å' => 'å',\n  'Ⅎ' => 'ⅎ',\n  'Ⅰ' => 'ⅰ',\n  'Ⅱ' => 'ⅱ',\n  'Ⅲ' => 'ⅲ',\n  'Ⅳ' => 'ⅳ',\n  'Ⅴ' => 'ⅴ',\n  'Ⅵ' => 'ⅵ',\n  'Ⅶ' => 'ⅶ',\n  'Ⅷ' => 'ⅷ',\n  'Ⅸ' => 'ⅸ',\n  'Ⅹ' => 'ⅹ',\n  'Ⅺ' => 'ⅺ',\n  'Ⅻ' => 'ⅻ',\n  'Ⅼ' => 'ⅼ',\n  'Ⅽ' => 'ⅽ',\n  'Ⅾ' => 'ⅾ',\n  'Ⅿ' => 'ⅿ',\n  'Ↄ' => 'ↄ',\n  'Ⓐ' => 'ⓐ',\n  'Ⓑ' => 'ⓑ',\n  'Ⓒ' => 'ⓒ',\n  'Ⓓ' => 'ⓓ',\n  'Ⓔ' => 'ⓔ',\n  'Ⓕ' => 'ⓕ',\n  'Ⓖ' => 'ⓖ',\n  'Ⓗ' => 'ⓗ',\n  'Ⓘ' => 'ⓘ',\n  'Ⓙ' => 'ⓙ',\n  'Ⓚ' => 'ⓚ',\n  'Ⓛ' => 'ⓛ',\n  'Ⓜ' => 'ⓜ',\n  'Ⓝ' => 'ⓝ',\n  'Ⓞ' => 'ⓞ',\n  'Ⓟ' => 'ⓟ',\n  'Ⓠ' => 'ⓠ',\n  'Ⓡ' => 'ⓡ',\n  'Ⓢ' => 'ⓢ',\n  'Ⓣ' => 'ⓣ',\n  'Ⓤ' => 'ⓤ',\n  'Ⓥ' => 'ⓥ',\n  'Ⓦ' => 'ⓦ',\n  'Ⓧ' => 'ⓧ',\n  'Ⓨ' => 'ⓨ',\n  'Ⓩ' => 'ⓩ',\n  'Ⰰ' => 'ⰰ',\n  'Ⰱ' => 'ⰱ',\n  'Ⰲ' => 'ⰲ',\n  'Ⰳ' => 'ⰳ',\n  'Ⰴ' => 'ⰴ',\n  'Ⰵ' => 'ⰵ',\n  'Ⰶ' => 'ⰶ',\n  'Ⰷ' => 'ⰷ',\n  'Ⰸ' => 'ⰸ',\n  'Ⰹ' => 'ⰹ',\n  'Ⰺ' => 'ⰺ',\n  'Ⰻ' => 'ⰻ',\n  'Ⰼ' => 'ⰼ',\n  'Ⰽ' => 'ⰽ',\n  'Ⰾ' => 'ⰾ',\n  'Ⰿ' => 'ⰿ',\n  'Ⱀ' => 'ⱀ',\n  'Ⱁ' => 'ⱁ',\n  'Ⱂ' => 'ⱂ',\n  'Ⱃ' => 'ⱃ',\n  'Ⱄ' => 'ⱄ',\n  'Ⱅ' => 'ⱅ',\n  'Ⱆ' => 'ⱆ',\n  'Ⱇ' => 'ⱇ',\n  'Ⱈ' => 'ⱈ',\n  'Ⱉ' => 'ⱉ',\n  'Ⱊ' => 'ⱊ',\n  'Ⱋ' => 'ⱋ',\n  'Ⱌ' => 'ⱌ',\n  'Ⱍ' => 'ⱍ',\n  'Ⱎ' => 'ⱎ',\n  'Ⱏ' => 'ⱏ',\n  'Ⱐ' => 'ⱐ',\n  'Ⱑ' => 'ⱑ',\n  'Ⱒ' => 'ⱒ',\n  'Ⱓ' => 'ⱓ',\n  'Ⱔ' => 'ⱔ',\n  'Ⱕ' => 'ⱕ',\n  'Ⱖ' => 'ⱖ',\n  'Ⱗ' => 'ⱗ',\n  'Ⱘ' => 'ⱘ',\n  'Ⱙ' => 'ⱙ',\n  'Ⱚ' => 'ⱚ',\n  'Ⱛ' => 'ⱛ',\n  'Ⱜ' => 'ⱜ',\n  'Ⱝ' => 'ⱝ',\n  'Ⱞ' => 'ⱞ',\n  'Ⱡ' => 'ⱡ',\n  'Ɫ' => 'ɫ',\n  'Ᵽ' => 'ᵽ',\n  'Ɽ' => 'ɽ',\n  'Ⱨ' => 'ⱨ',\n  'Ⱪ' => 'ⱪ',\n  'Ⱬ' => 'ⱬ',\n  'Ɑ' => 'ɑ',\n  'Ɱ' => 'ɱ',\n  'Ɐ' => 'ɐ',\n  'Ɒ' => 'ɒ',\n  'Ⱳ' => 'ⱳ',\n  'Ⱶ' => 'ⱶ',\n  'Ȿ' => 'ȿ',\n  'Ɀ' => 'ɀ',\n  'Ⲁ' => 'ⲁ',\n  'Ⲃ' => 'ⲃ',\n  'Ⲅ' => 'ⲅ',\n  'Ⲇ' => 'ⲇ',\n  'Ⲉ' => 'ⲉ',\n  'Ⲋ' => 'ⲋ',\n  'Ⲍ' => 'ⲍ',\n  'Ⲏ' => 'ⲏ',\n  'Ⲑ' => 'ⲑ',\n  'Ⲓ' => 'ⲓ',\n  'Ⲕ' => 'ⲕ',\n  'Ⲗ' => 'ⲗ',\n  'Ⲙ' => 'ⲙ',\n  'Ⲛ' => 'ⲛ',\n  'Ⲝ' => 'ⲝ',\n  'Ⲟ' => 'ⲟ',\n  'Ⲡ' => 'ⲡ',\n  'Ⲣ' => 'ⲣ',\n  'Ⲥ' => 'ⲥ',\n  'Ⲧ' => 'ⲧ',\n  'Ⲩ' => 'ⲩ',\n  'Ⲫ' => 'ⲫ',\n  'Ⲭ' => 'ⲭ',\n  'Ⲯ' => 'ⲯ',\n  'Ⲱ' => 'ⲱ',\n  'Ⲳ' => 'ⲳ',\n  'Ⲵ' => 'ⲵ',\n  'Ⲷ' => 'ⲷ',\n  'Ⲹ' => 'ⲹ',\n  'Ⲻ' => 'ⲻ',\n  'Ⲽ' => 'ⲽ',\n  'Ⲿ' => 'ⲿ',\n  'Ⳁ' => 'ⳁ',\n  'Ⳃ' => 'ⳃ',\n  'Ⳅ' => 'ⳅ',\n  'Ⳇ' => 'ⳇ',\n  'Ⳉ' => 'ⳉ',\n  'Ⳋ' => 'ⳋ',\n  'Ⳍ' => 'ⳍ',\n  'Ⳏ' => 'ⳏ',\n  'Ⳑ' => 'ⳑ',\n  'Ⳓ' => 'ⳓ',\n  'Ⳕ' => 'ⳕ',\n  'Ⳗ' => 'ⳗ',\n  'Ⳙ' => 'ⳙ',\n  'Ⳛ' => 'ⳛ',\n  'Ⳝ' => 'ⳝ',\n  'Ⳟ' => 'ⳟ',\n  'Ⳡ' => 'ⳡ',\n  'Ⳣ' => 'ⳣ',\n  'Ⳬ' => 'ⳬ',\n  'Ⳮ' => 'ⳮ',\n  'Ⳳ' => 'ⳳ',\n  'Ꙁ' => 'ꙁ',\n  'Ꙃ' => 'ꙃ',\n  'Ꙅ' => 'ꙅ',\n  'Ꙇ' => 'ꙇ',\n  'Ꙉ' => 'ꙉ',\n  'Ꙋ' => 'ꙋ',\n  'Ꙍ' => 'ꙍ',\n  'Ꙏ' => 'ꙏ',\n  'Ꙑ' => 'ꙑ',\n  'Ꙓ' => 'ꙓ',\n  'Ꙕ' => 'ꙕ',\n  'Ꙗ' => 'ꙗ',\n  'Ꙙ' => 'ꙙ',\n  'Ꙛ' => 'ꙛ',\n  'Ꙝ' => 'ꙝ',\n  'Ꙟ' => 'ꙟ',\n  'Ꙡ' => 'ꙡ',\n  'Ꙣ' => 'ꙣ',\n  'Ꙥ' => 'ꙥ',\n  'Ꙧ' => 'ꙧ',\n  'Ꙩ' => 'ꙩ',\n  'Ꙫ' => 'ꙫ',\n  'Ꙭ' => 'ꙭ',\n  'Ꚁ' => 'ꚁ',\n  'Ꚃ' => 'ꚃ',\n  'Ꚅ' => 'ꚅ',\n  'Ꚇ' => 'ꚇ',\n  'Ꚉ' => 'ꚉ',\n  'Ꚋ' => 'ꚋ',\n  'Ꚍ' => 'ꚍ',\n  'Ꚏ' => 'ꚏ',\n  'Ꚑ' => 'ꚑ',\n  'Ꚓ' => 'ꚓ',\n  'Ꚕ' => 'ꚕ',\n  'Ꚗ' => 'ꚗ',\n  'Ꚙ' => 'ꚙ',\n  'Ꚛ' => 'ꚛ',\n  'Ꜣ' => 'ꜣ',\n  'Ꜥ' => 'ꜥ',\n  'Ꜧ' => 'ꜧ',\n  'Ꜩ' => 'ꜩ',\n  'Ꜫ' => 'ꜫ',\n  'Ꜭ' => 'ꜭ',\n  'Ꜯ' => 'ꜯ',\n  'Ꜳ' => 'ꜳ',\n  'Ꜵ' => 'ꜵ',\n  'Ꜷ' => 'ꜷ',\n  'Ꜹ' => 'ꜹ',\n  'Ꜻ' => 'ꜻ',\n  'Ꜽ' => 'ꜽ',\n  'Ꜿ' => 'ꜿ',\n  'Ꝁ' => 'ꝁ',\n  'Ꝃ' => 'ꝃ',\n  'Ꝅ' => 'ꝅ',\n  'Ꝇ' => 'ꝇ',\n  'Ꝉ' => 'ꝉ',\n  'Ꝋ' => 'ꝋ',\n  'Ꝍ' => 'ꝍ',\n  'Ꝏ' => 'ꝏ',\n  'Ꝑ' => 'ꝑ',\n  'Ꝓ' => 'ꝓ',\n  'Ꝕ' => 'ꝕ',\n  'Ꝗ' => 'ꝗ',\n  'Ꝙ' => 'ꝙ',\n  'Ꝛ' => 'ꝛ',\n  'Ꝝ' => 'ꝝ',\n  'Ꝟ' => 'ꝟ',\n  'Ꝡ' => 'ꝡ',\n  'Ꝣ' => 'ꝣ',\n  'Ꝥ' => 'ꝥ',\n  'Ꝧ' => 'ꝧ',\n  'Ꝩ' => 'ꝩ',\n  'Ꝫ' => 'ꝫ',\n  'Ꝭ' => 'ꝭ',\n  'Ꝯ' => 'ꝯ',\n  'Ꝺ' => 'ꝺ',\n  'Ꝼ' => 'ꝼ',\n  'Ᵹ' => 'ᵹ',\n  'Ꝿ' => 'ꝿ',\n  'Ꞁ' => 'ꞁ',\n  'Ꞃ' => 'ꞃ',\n  'Ꞅ' => 'ꞅ',\n  'Ꞇ' => 'ꞇ',\n  'Ꞌ' => 'ꞌ',\n  'Ɥ' => 'ɥ',\n  'Ꞑ' => 'ꞑ',\n  'Ꞓ' => 'ꞓ',\n  'Ꞗ' => 'ꞗ',\n  'Ꞙ' => 'ꞙ',\n  'Ꞛ' => 'ꞛ',\n  'Ꞝ' => 'ꞝ',\n  'Ꞟ' => 'ꞟ',\n  'Ꞡ' => 'ꞡ',\n  'Ꞣ' => 'ꞣ',\n  'Ꞥ' => 'ꞥ',\n  'Ꞧ' => 'ꞧ',\n  'Ꞩ' => 'ꞩ',\n  'Ɦ' => 'ɦ',\n  'Ɜ' => 'ɜ',\n  'Ɡ' => 'ɡ',\n  'Ɬ' => 'ɬ',\n  'Ɪ' => 'ɪ',\n  'Ʞ' => 'ʞ',\n  'Ʇ' => 'ʇ',\n  'Ʝ' => 'ʝ',\n  'Ꭓ' => 'ꭓ',\n  'Ꞵ' => 'ꞵ',\n  'Ꞷ' => 'ꞷ',\n  'Ꞹ' => 'ꞹ',\n  'Ꞻ' => 'ꞻ',\n  'Ꞽ' => 'ꞽ',\n  'Ꞿ' => 'ꞿ',\n  'Ꟃ' => 'ꟃ',\n  'Ꞔ' => 'ꞔ',\n  'Ʂ' => 'ʂ',\n  'Ᶎ' => 'ᶎ',\n  'Ꟈ' => 'ꟈ',\n  'Ꟊ' => 'ꟊ',\n  'Ꟶ' => 'ꟶ',\n  'Ａ' => 'ａ',\n  'Ｂ' => 'ｂ',\n  'Ｃ' => 'ｃ',\n  'Ｄ' => 'ｄ',\n  'Ｅ' => 'ｅ',\n  'Ｆ' => 'ｆ',\n  'Ｇ' => 'ｇ',\n  'Ｈ' => 'ｈ',\n  'Ｉ' => 'ｉ',\n  'Ｊ' => 'ｊ',\n  'Ｋ' => 'ｋ',\n  'Ｌ' => 'ｌ',\n  'Ｍ' => 'ｍ',\n  'Ｎ' => 'ｎ',\n  'Ｏ' => 'ｏ',\n  'Ｐ' => 'ｐ',\n  'Ｑ' => 'ｑ',\n  'Ｒ' => 'ｒ',\n  'Ｓ' => 'ｓ',\n  'Ｔ' => 'ｔ',\n  'Ｕ' => 'ｕ',\n  'Ｖ' => 'ｖ',\n  'Ｗ' => 'ｗ',\n  'Ｘ' => 'ｘ',\n  'Ｙ' => 'ｙ',\n  'Ｚ' => 'ｚ',\n  '𐐀' => '𐐨',\n  '𐐁' => '𐐩',\n  '𐐂' => '𐐪',\n  '𐐃' => '𐐫',\n  '𐐄' => '𐐬',\n  '𐐅' => '𐐭',\n  '𐐆' => '𐐮',\n  '𐐇' => '𐐯',\n  '𐐈' => '𐐰',\n  '𐐉' => '𐐱',\n  '𐐊' => '𐐲',\n  '𐐋' => '𐐳',\n  '𐐌' => '𐐴',\n  '𐐍' => '𐐵',\n  '𐐎' => '𐐶',\n  '𐐏' => '𐐷',\n  '𐐐' => '𐐸',\n  '𐐑' => '𐐹',\n  '𐐒' => '𐐺',\n  '𐐓' => '𐐻',\n  '𐐔' => '𐐼',\n  '𐐕' => '𐐽',\n  '𐐖' => '𐐾',\n  '𐐗' => '𐐿',\n  '𐐘' => '𐑀',\n  '𐐙' => '𐑁',\n  '𐐚' => '𐑂',\n  '𐐛' => '𐑃',\n  '𐐜' => '𐑄',\n  '𐐝' => '𐑅',\n  '𐐞' => '𐑆',\n  '𐐟' => '𐑇',\n  '𐐠' => '𐑈',\n  '𐐡' => '𐑉',\n  '𐐢' => '𐑊',\n  '𐐣' => '𐑋',\n  '𐐤' => '𐑌',\n  '𐐥' => '𐑍',\n  '𐐦' => '𐑎',\n  '𐐧' => '𐑏',\n  '𐒰' => '𐓘',\n  '𐒱' => '𐓙',\n  '𐒲' => '𐓚',\n  '𐒳' => '𐓛',\n  '𐒴' => '𐓜',\n  '𐒵' => '𐓝',\n  '𐒶' => '𐓞',\n  '𐒷' => '𐓟',\n  '𐒸' => '𐓠',\n  '𐒹' => '𐓡',\n  '𐒺' => '𐓢',\n  '𐒻' => '𐓣',\n  '𐒼' => '𐓤',\n  '𐒽' => '𐓥',\n  '𐒾' => '𐓦',\n  '𐒿' => '𐓧',\n  '𐓀' => '𐓨',\n  '𐓁' => '𐓩',\n  '𐓂' => '𐓪',\n  '𐓃' => '𐓫',\n  '𐓄' => '𐓬',\n  '𐓅' => '𐓭',\n  '𐓆' => '𐓮',\n  '𐓇' => '𐓯',\n  '𐓈' => '𐓰',\n  '𐓉' => '𐓱',\n  '𐓊' => '𐓲',\n  '𐓋' => '𐓳',\n  '𐓌' => '𐓴',\n  '𐓍' => '𐓵',\n  '𐓎' => '𐓶',\n  '𐓏' => '𐓷',\n  '𐓐' => '𐓸',\n  '𐓑' => '𐓹',\n  '𐓒' => '𐓺',\n  '𐓓' => '𐓻',\n  '𐲀' => '𐳀',\n  '𐲁' => '𐳁',\n  '𐲂' => '𐳂',\n  '𐲃' => '𐳃',\n  '𐲄' => '𐳄',\n  '𐲅' => '𐳅',\n  '𐲆' => '𐳆',\n  '𐲇' => '𐳇',\n  '𐲈' => '𐳈',\n  '𐲉' => '𐳉',\n  '𐲊' => '𐳊',\n  '𐲋' => '𐳋',\n  '𐲌' => '𐳌',\n  '𐲍' => '𐳍',\n  '𐲎' => '𐳎',\n  '𐲏' => '𐳏',\n  '𐲐' => '𐳐',\n  '𐲑' => '𐳑',\n  '𐲒' => '𐳒',\n  '𐲓' => '𐳓',\n  '𐲔' => '𐳔',\n  '𐲕' => '𐳕',\n  '𐲖' => '𐳖',\n  '𐲗' => '𐳗',\n  '𐲘' => '𐳘',\n  '𐲙' => '𐳙',\n  '𐲚' => '𐳚',\n  '𐲛' => '𐳛',\n  '𐲜' => '𐳜',\n  '𐲝' => '𐳝',\n  '𐲞' => '𐳞',\n  '𐲟' => '𐳟',\n  '𐲠' => '𐳠',\n  '𐲡' => '𐳡',\n  '𐲢' => '𐳢',\n  '𐲣' => '𐳣',\n  '𐲤' => '𐳤',\n  '𐲥' => '𐳥',\n  '𐲦' => '𐳦',\n  '𐲧' => '𐳧',\n  '𐲨' => '𐳨',\n  '𐲩' => '𐳩',\n  '𐲪' => '𐳪',\n  '𐲫' => '𐳫',\n  '𐲬' => '𐳬',\n  '𐲭' => '𐳭',\n  '𐲮' => '𐳮',\n  '𐲯' => '𐳯',\n  '𐲰' => '𐳰',\n  '𐲱' => '𐳱',\n  '𐲲' => '𐳲',\n  '𑢠' => '𑣀',\n  '𑢡' => '𑣁',\n  '𑢢' => '𑣂',\n  '𑢣' => '𑣃',\n  '𑢤' => '𑣄',\n  '𑢥' => '𑣅',\n  '𑢦' => '𑣆',\n  '𑢧' => '𑣇',\n  '𑢨' => '𑣈',\n  '𑢩' => '𑣉',\n  '𑢪' => '𑣊',\n  '𑢫' => '𑣋',\n  '𑢬' => '𑣌',\n  '𑢭' => '𑣍',\n  '𑢮' => '𑣎',\n  '𑢯' => '𑣏',\n  '𑢰' => '𑣐',\n  '𑢱' => '𑣑',\n  '𑢲' => '𑣒',\n  '𑢳' => '𑣓',\n  '𑢴' => '𑣔',\n  '𑢵' => '𑣕',\n  '𑢶' => '𑣖',\n  '𑢷' => '𑣗',\n  '𑢸' => '𑣘',\n  '𑢹' => '𑣙',\n  '𑢺' => '𑣚',\n  '𑢻' => '𑣛',\n  '𑢼' => '𑣜',\n  '𑢽' => '𑣝',\n  '𑢾' => '𑣞',\n  '𑢿' => '𑣟',\n  '𖹀' => '𖹠',\n  '𖹁' => '𖹡',\n  '𖹂' => '𖹢',\n  '𖹃' => '𖹣',\n  '𖹄' => '𖹤',\n  '𖹅' => '𖹥',\n  '𖹆' => '𖹦',\n  '𖹇' => '𖹧',\n  '𖹈' => '𖹨',\n  '𖹉' => '𖹩',\n  '𖹊' => '𖹪',\n  '𖹋' => '𖹫',\n  '𖹌' => '𖹬',\n  '𖹍' => '𖹭',\n  '𖹎' => '𖹮',\n  '𖹏' => '𖹯',\n  '𖹐' => '𖹰',\n  '𖹑' => '𖹱',\n  '𖹒' => '𖹲',\n  '𖹓' => '𖹳',\n  '𖹔' => '𖹴',\n  '𖹕' => '𖹵',\n  '𖹖' => '𖹶',\n  '𖹗' => '𖹷',\n  '𖹘' => '𖹸',\n  '𖹙' => '𖹹',\n  '𖹚' => '𖹺',\n  '𖹛' => '𖹻',\n  '𖹜' => '𖹼',\n  '𖹝' => '𖹽',\n  '𖹞' => '𖹾',\n  '𖹟' => '𖹿',\n  '𞤀' => '𞤢',\n  '𞤁' => '𞤣',\n  '𞤂' => '𞤤',\n  '𞤃' => '𞤥',\n  '𞤄' => '𞤦',\n  '𞤅' => '𞤧',\n  '𞤆' => '𞤨',\n  '𞤇' => '𞤩',\n  '𞤈' => '𞤪',\n  '𞤉' => '𞤫',\n  '𞤊' => '𞤬',\n  '𞤋' => '𞤭',\n  '𞤌' => '𞤮',\n  '𞤍' => '𞤯',\n  '𞤎' => '𞤰',\n  '𞤏' => '𞤱',\n  '𞤐' => '𞤲',\n  '𞤑' => '𞤳',\n  '𞤒' => '𞤴',\n  '𞤓' => '𞤵',\n  '𞤔' => '𞤶',\n  '𞤕' => '𞤷',\n  '𞤖' => '𞤸',\n  '𞤗' => '𞤹',\n  '𞤘' => '𞤺',\n  '𞤙' => '𞤻',\n  '𞤚' => '𞤼',\n  '𞤛' => '𞤽',\n  '𞤜' => '𞤾',\n  '𞤝' => '𞤿',\n  '𞤞' => '𞥀',\n  '𞤟' => '𞥁',\n  '𞤠' => '𞥂',\n  '𞤡' => '𞥃',\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php",
    "content": "<?php\n\n// from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt\n\nreturn '/(?<![\\x{0027}\\x{002E}\\x{003A}\\x{005E}\\x{0060}\\x{00A8}\\x{00AD}\\x{00AF}\\x{00B4}\\x{00B7}\\x{00B8}\\x{02B0}-\\x{02C1}\\x{02C2}-\\x{02C5}\\x{02C6}-\\x{02D1}\\x{02D2}-\\x{02DF}\\x{02E0}-\\x{02E4}\\x{02E5}-\\x{02EB}\\x{02EC}\\x{02ED}\\x{02EE}\\x{02EF}-\\x{02FF}\\x{0300}-\\x{036F}\\x{0374}\\x{0375}\\x{037A}\\x{0384}-\\x{0385}\\x{0387}\\x{0483}-\\x{0487}\\x{0488}-\\x{0489}\\x{0559}\\x{0591}-\\x{05BD}\\x{05BF}\\x{05C1}-\\x{05C2}\\x{05C4}-\\x{05C5}\\x{05C7}\\x{05F4}\\x{0600}-\\x{0605}\\x{0610}-\\x{061A}\\x{061C}\\x{0640}\\x{064B}-\\x{065F}\\x{0670}\\x{06D6}-\\x{06DC}\\x{06DD}\\x{06DF}-\\x{06E4}\\x{06E5}-\\x{06E6}\\x{06E7}-\\x{06E8}\\x{06EA}-\\x{06ED}\\x{070F}\\x{0711}\\x{0730}-\\x{074A}\\x{07A6}-\\x{07B0}\\x{07EB}-\\x{07F3}\\x{07F4}-\\x{07F5}\\x{07FA}\\x{07FD}\\x{0816}-\\x{0819}\\x{081A}\\x{081B}-\\x{0823}\\x{0824}\\x{0825}-\\x{0827}\\x{0828}\\x{0829}-\\x{082D}\\x{0859}-\\x{085B}\\x{08D3}-\\x{08E1}\\x{08E2}\\x{08E3}-\\x{0902}\\x{093A}\\x{093C}\\x{0941}-\\x{0948}\\x{094D}\\x{0951}-\\x{0957}\\x{0962}-\\x{0963}\\x{0971}\\x{0981}\\x{09BC}\\x{09C1}-\\x{09C4}\\x{09CD}\\x{09E2}-\\x{09E3}\\x{09FE}\\x{0A01}-\\x{0A02}\\x{0A3C}\\x{0A41}-\\x{0A42}\\x{0A47}-\\x{0A48}\\x{0A4B}-\\x{0A4D}\\x{0A51}\\x{0A70}-\\x{0A71}\\x{0A75}\\x{0A81}-\\x{0A82}\\x{0ABC}\\x{0AC1}-\\x{0AC5}\\x{0AC7}-\\x{0AC8}\\x{0ACD}\\x{0AE2}-\\x{0AE3}\\x{0AFA}-\\x{0AFF}\\x{0B01}\\x{0B3C}\\x{0B3F}\\x{0B41}-\\x{0B44}\\x{0B4D}\\x{0B56}\\x{0B62}-\\x{0B63}\\x{0B82}\\x{0BC0}\\x{0BCD}\\x{0C00}\\x{0C04}\\x{0C3E}-\\x{0C40}\\x{0C46}-\\x{0C48}\\x{0C4A}-\\x{0C4D}\\x{0C55}-\\x{0C56}\\x{0C62}-\\x{0C63}\\x{0C81}\\x{0CBC}\\x{0CBF}\\x{0CC6}\\x{0CCC}-\\x{0CCD}\\x{0CE2}-\\x{0CE3}\\x{0D00}-\\x{0D01}\\x{0D3B}-\\x{0D3C}\\x{0D41}-\\x{0D44}\\x{0D4D}\\x{0D62}-\\x{0D63}\\x{0DCA}\\x{0DD2}-\\x{0DD4}\\x{0DD6}\\x{0E31}\\x{0E34}-\\x{0E3A}\\x{0E46}\\x{0E47}-\\x{0E4E}\\x{0EB1}\\x{0EB4}-\\x{0EB9}\\x{0EBB}-\\x{0EBC}\\x{0EC6}\\x{0EC8}-\\x{0ECD}\\x{0F18}-\\x{0F19}\\x{0F35}\\x{0F37}\\x{0F39}\\x{0F71}-\\x{0F7E}\\x{0F80}-\\x{0F84}\\x{0F86}-\\x{0F87}\\x{0F8D}-\\x{0F97}\\x{0F99}-\\x{0FBC}\\x{0FC6}\\x{102D}-\\x{1030}\\x{1032}-\\x{1037}\\x{1039}-\\x{103A}\\x{103D}-\\x{103E}\\x{1058}-\\x{1059}\\x{105E}-\\x{1060}\\x{1071}-\\x{1074}\\x{1082}\\x{1085}-\\x{1086}\\x{108D}\\x{109D}\\x{10FC}\\x{135D}-\\x{135F}\\x{1712}-\\x{1714}\\x{1732}-\\x{1734}\\x{1752}-\\x{1753}\\x{1772}-\\x{1773}\\x{17B4}-\\x{17B5}\\x{17B7}-\\x{17BD}\\x{17C6}\\x{17C9}-\\x{17D3}\\x{17D7}\\x{17DD}\\x{180B}-\\x{180D}\\x{180E}\\x{1843}\\x{1885}-\\x{1886}\\x{18A9}\\x{1920}-\\x{1922}\\x{1927}-\\x{1928}\\x{1932}\\x{1939}-\\x{193B}\\x{1A17}-\\x{1A18}\\x{1A1B}\\x{1A56}\\x{1A58}-\\x{1A5E}\\x{1A60}\\x{1A62}\\x{1A65}-\\x{1A6C}\\x{1A73}-\\x{1A7C}\\x{1A7F}\\x{1AA7}\\x{1AB0}-\\x{1ABD}\\x{1ABE}\\x{1B00}-\\x{1B03}\\x{1B34}\\x{1B36}-\\x{1B3A}\\x{1B3C}\\x{1B42}\\x{1B6B}-\\x{1B73}\\x{1B80}-\\x{1B81}\\x{1BA2}-\\x{1BA5}\\x{1BA8}-\\x{1BA9}\\x{1BAB}-\\x{1BAD}\\x{1BE6}\\x{1BE8}-\\x{1BE9}\\x{1BED}\\x{1BEF}-\\x{1BF1}\\x{1C2C}-\\x{1C33}\\x{1C36}-\\x{1C37}\\x{1C78}-\\x{1C7D}\\x{1CD0}-\\x{1CD2}\\x{1CD4}-\\x{1CE0}\\x{1CE2}-\\x{1CE8}\\x{1CED}\\x{1CF4}\\x{1CF8}-\\x{1CF9}\\x{1D2C}-\\x{1D6A}\\x{1D78}\\x{1D9B}-\\x{1DBF}\\x{1DC0}-\\x{1DF9}\\x{1DFB}-\\x{1DFF}\\x{1FBD}\\x{1FBF}-\\x{1FC1}\\x{1FCD}-\\x{1FCF}\\x{1FDD}-\\x{1FDF}\\x{1FED}-\\x{1FEF}\\x{1FFD}-\\x{1FFE}\\x{200B}-\\x{200F}\\x{2018}\\x{2019}\\x{2024}\\x{2027}\\x{202A}-\\x{202E}\\x{2060}-\\x{2064}\\x{2066}-\\x{206F}\\x{2071}\\x{207F}\\x{2090}-\\x{209C}\\x{20D0}-\\x{20DC}\\x{20DD}-\\x{20E0}\\x{20E1}\\x{20E2}-\\x{20E4}\\x{20E5}-\\x{20F0}\\x{2C7C}-\\x{2C7D}\\x{2CEF}-\\x{2CF1}\\x{2D6F}\\x{2D7F}\\x{2DE0}-\\x{2DFF}\\x{2E2F}\\x{3005}\\x{302A}-\\x{302D}\\x{3031}-\\x{3035}\\x{303B}\\x{3099}-\\x{309A}\\x{309B}-\\x{309C}\\x{309D}-\\x{309E}\\x{30FC}-\\x{30FE}\\x{A015}\\x{A4F8}-\\x{A4FD}\\x{A60C}\\x{A66F}\\x{A670}-\\x{A672}\\x{A674}-\\x{A67D}\\x{A67F}\\x{A69C}-\\x{A69D}\\x{A69E}-\\x{A69F}\\x{A6F0}-\\x{A6F1}\\x{A700}-\\x{A716}\\x{A717}-\\x{A71F}\\x{A720}-\\x{A721}\\x{A770}\\x{A788}\\x{A789}-\\x{A78A}\\x{A7F8}-\\x{A7F9}\\x{A802}\\x{A806}\\x{A80B}\\x{A825}-\\x{A826}\\x{A8C4}-\\x{A8C5}\\x{A8E0}-\\x{A8F1}\\x{A8FF}\\x{A926}-\\x{A92D}\\x{A947}-\\x{A951}\\x{A980}-\\x{A982}\\x{A9B3}\\x{A9B6}-\\x{A9B9}\\x{A9BC}\\x{A9CF}\\x{A9E5}\\x{A9E6}\\x{AA29}-\\x{AA2E}\\x{AA31}-\\x{AA32}\\x{AA35}-\\x{AA36}\\x{AA43}\\x{AA4C}\\x{AA70}\\x{AA7C}\\x{AAB0}\\x{AAB2}-\\x{AAB4}\\x{AAB7}-\\x{AAB8}\\x{AABE}-\\x{AABF}\\x{AAC1}\\x{AADD}\\x{AAEC}-\\x{AAED}\\x{AAF3}-\\x{AAF4}\\x{AAF6}\\x{AB5B}\\x{AB5C}-\\x{AB5F}\\x{ABE5}\\x{ABE8}\\x{ABED}\\x{FB1E}\\x{FBB2}-\\x{FBC1}\\x{FE00}-\\x{FE0F}\\x{FE13}\\x{FE20}-\\x{FE2F}\\x{FE52}\\x{FE55}\\x{FEFF}\\x{FF07}\\x{FF0E}\\x{FF1A}\\x{FF3E}\\x{FF40}\\x{FF70}\\x{FF9E}-\\x{FF9F}\\x{FFE3}\\x{FFF9}-\\x{FFFB}\\x{101FD}\\x{102E0}\\x{10376}-\\x{1037A}\\x{10A01}-\\x{10A03}\\x{10A05}-\\x{10A06}\\x{10A0C}-\\x{10A0F}\\x{10A38}-\\x{10A3A}\\x{10A3F}\\x{10AE5}-\\x{10AE6}\\x{10D24}-\\x{10D27}\\x{10F46}-\\x{10F50}\\x{11001}\\x{11038}-\\x{11046}\\x{1107F}-\\x{11081}\\x{110B3}-\\x{110B6}\\x{110B9}-\\x{110BA}\\x{110BD}\\x{110CD}\\x{11100}-\\x{11102}\\x{11127}-\\x{1112B}\\x{1112D}-\\x{11134}\\x{11173}\\x{11180}-\\x{11181}\\x{111B6}-\\x{111BE}\\x{111C9}-\\x{111CC}\\x{1122F}-\\x{11231}\\x{11234}\\x{11236}-\\x{11237}\\x{1123E}\\x{112DF}\\x{112E3}-\\x{112EA}\\x{11300}-\\x{11301}\\x{1133B}-\\x{1133C}\\x{11340}\\x{11366}-\\x{1136C}\\x{11370}-\\x{11374}\\x{11438}-\\x{1143F}\\x{11442}-\\x{11444}\\x{11446}\\x{1145E}\\x{114B3}-\\x{114B8}\\x{114BA}\\x{114BF}-\\x{114C0}\\x{114C2}-\\x{114C3}\\x{115B2}-\\x{115B5}\\x{115BC}-\\x{115BD}\\x{115BF}-\\x{115C0}\\x{115DC}-\\x{115DD}\\x{11633}-\\x{1163A}\\x{1163D}\\x{1163F}-\\x{11640}\\x{116AB}\\x{116AD}\\x{116B0}-\\x{116B5}\\x{116B7}\\x{1171D}-\\x{1171F}\\x{11722}-\\x{11725}\\x{11727}-\\x{1172B}\\x{1182F}-\\x{11837}\\x{11839}-\\x{1183A}\\x{11A01}-\\x{11A0A}\\x{11A33}-\\x{11A38}\\x{11A3B}-\\x{11A3E}\\x{11A47}\\x{11A51}-\\x{11A56}\\x{11A59}-\\x{11A5B}\\x{11A8A}-\\x{11A96}\\x{11A98}-\\x{11A99}\\x{11C30}-\\x{11C36}\\x{11C38}-\\x{11C3D}\\x{11C3F}\\x{11C92}-\\x{11CA7}\\x{11CAA}-\\x{11CB0}\\x{11CB2}-\\x{11CB3}\\x{11CB5}-\\x{11CB6}\\x{11D31}-\\x{11D36}\\x{11D3A}\\x{11D3C}-\\x{11D3D}\\x{11D3F}-\\x{11D45}\\x{11D47}\\x{11D90}-\\x{11D91}\\x{11D95}\\x{11D97}\\x{11EF3}-\\x{11EF4}\\x{16AF0}-\\x{16AF4}\\x{16B30}-\\x{16B36}\\x{16B40}-\\x{16B43}\\x{16F8F}-\\x{16F92}\\x{16F93}-\\x{16F9F}\\x{16FE0}-\\x{16FE1}\\x{1BC9D}-\\x{1BC9E}\\x{1BCA0}-\\x{1BCA3}\\x{1D167}-\\x{1D169}\\x{1D173}-\\x{1D17A}\\x{1D17B}-\\x{1D182}\\x{1D185}-\\x{1D18B}\\x{1D1AA}-\\x{1D1AD}\\x{1D242}-\\x{1D244}\\x{1DA00}-\\x{1DA36}\\x{1DA3B}-\\x{1DA6C}\\x{1DA75}\\x{1DA84}\\x{1DA9B}-\\x{1DA9F}\\x{1DAA1}-\\x{1DAAF}\\x{1E000}-\\x{1E006}\\x{1E008}-\\x{1E018}\\x{1E01B}-\\x{1E021}\\x{1E023}-\\x{1E024}\\x{1E026}-\\x{1E02A}\\x{1E8D0}-\\x{1E8D6}\\x{1E944}-\\x{1E94A}\\x{1F3FB}-\\x{1F3FF}\\x{E0001}\\x{E0020}-\\x{E007F}\\x{E0100}-\\x{E01EF}])(\\pL)(\\pL*+)/u';\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php",
    "content": "<?php\n\nreturn array (\n  'a' => 'A',\n  'b' => 'B',\n  'c' => 'C',\n  'd' => 'D',\n  'e' => 'E',\n  'f' => 'F',\n  'g' => 'G',\n  'h' => 'H',\n  'i' => 'I',\n  'j' => 'J',\n  'k' => 'K',\n  'l' => 'L',\n  'm' => 'M',\n  'n' => 'N',\n  'o' => 'O',\n  'p' => 'P',\n  'q' => 'Q',\n  'r' => 'R',\n  's' => 'S',\n  't' => 'T',\n  'u' => 'U',\n  'v' => 'V',\n  'w' => 'W',\n  'x' => 'X',\n  'y' => 'Y',\n  'z' => 'Z',\n  'µ' => 'Μ',\n  'à' => 'À',\n  'á' => 'Á',\n  'â' => 'Â',\n  'ã' => 'Ã',\n  'ä' => 'Ä',\n  'å' => 'Å',\n  'æ' => 'Æ',\n  'ç' => 'Ç',\n  'è' => 'È',\n  'é' => 'É',\n  'ê' => 'Ê',\n  'ë' => 'Ë',\n  'ì' => 'Ì',\n  'í' => 'Í',\n  'î' => 'Î',\n  'ï' => 'Ï',\n  'ð' => 'Ð',\n  'ñ' => 'Ñ',\n  'ò' => 'Ò',\n  'ó' => 'Ó',\n  'ô' => 'Ô',\n  'õ' => 'Õ',\n  'ö' => 'Ö',\n  'ø' => 'Ø',\n  'ù' => 'Ù',\n  'ú' => 'Ú',\n  'û' => 'Û',\n  'ü' => 'Ü',\n  'ý' => 'Ý',\n  'þ' => 'Þ',\n  'ÿ' => 'Ÿ',\n  'ā' => 'Ā',\n  'ă' => 'Ă',\n  'ą' => 'Ą',\n  'ć' => 'Ć',\n  'ĉ' => 'Ĉ',\n  'ċ' => 'Ċ',\n  'č' => 'Č',\n  'ď' => 'Ď',\n  'đ' => 'Đ',\n  'ē' => 'Ē',\n  'ĕ' => 'Ĕ',\n  'ė' => 'Ė',\n  'ę' => 'Ę',\n  'ě' => 'Ě',\n  'ĝ' => 'Ĝ',\n  'ğ' => 'Ğ',\n  'ġ' => 'Ġ',\n  'ģ' => 'Ģ',\n  'ĥ' => 'Ĥ',\n  'ħ' => 'Ħ',\n  'ĩ' => 'Ĩ',\n  'ī' => 'Ī',\n  'ĭ' => 'Ĭ',\n  'į' => 'Į',\n  'ı' => 'I',\n  'ĳ' => 'Ĳ',\n  'ĵ' => 'Ĵ',\n  'ķ' => 'Ķ',\n  'ĺ' => 'Ĺ',\n  'ļ' => 'Ļ',\n  'ľ' => 'Ľ',\n  'ŀ' => 'Ŀ',\n  'ł' => 'Ł',\n  'ń' => 'Ń',\n  'ņ' => 'Ņ',\n  'ň' => 'Ň',\n  'ŋ' => 'Ŋ',\n  'ō' => 'Ō',\n  'ŏ' => 'Ŏ',\n  'ő' => 'Ő',\n  'œ' => 'Œ',\n  'ŕ' => 'Ŕ',\n  'ŗ' => 'Ŗ',\n  'ř' => 'Ř',\n  'ś' => 'Ś',\n  'ŝ' => 'Ŝ',\n  'ş' => 'Ş',\n  'š' => 'Š',\n  'ţ' => 'Ţ',\n  'ť' => 'Ť',\n  'ŧ' => 'Ŧ',\n  'ũ' => 'Ũ',\n  'ū' => 'Ū',\n  'ŭ' => 'Ŭ',\n  'ů' => 'Ů',\n  'ű' => 'Ű',\n  'ų' => 'Ų',\n  'ŵ' => 'Ŵ',\n  'ŷ' => 'Ŷ',\n  'ź' => 'Ź',\n  'ż' => 'Ż',\n  'ž' => 'Ž',\n  'ſ' => 'S',\n  'ƀ' => 'Ƀ',\n  'ƃ' => 'Ƃ',\n  'ƅ' => 'Ƅ',\n  'ƈ' => 'Ƈ',\n  'ƌ' => 'Ƌ',\n  'ƒ' => 'Ƒ',\n  'ƕ' => 'Ƕ',\n  'ƙ' => 'Ƙ',\n  'ƚ' => 'Ƚ',\n  'ƞ' => 'Ƞ',\n  'ơ' => 'Ơ',\n  'ƣ' => 'Ƣ',\n  'ƥ' => 'Ƥ',\n  'ƨ' => 'Ƨ',\n  'ƭ' => 'Ƭ',\n  'ư' => 'Ư',\n  'ƴ' => 'Ƴ',\n  'ƶ' => 'Ƶ',\n  'ƹ' => 'Ƹ',\n  'ƽ' => 'Ƽ',\n  'ƿ' => 'Ƿ',\n  'ǅ' => 'Ǆ',\n  'ǆ' => 'Ǆ',\n  'ǈ' => 'Ǉ',\n  'ǉ' => 'Ǉ',\n  'ǋ' => 'Ǌ',\n  'ǌ' => 'Ǌ',\n  'ǎ' => 'Ǎ',\n  'ǐ' => 'Ǐ',\n  'ǒ' => 'Ǒ',\n  'ǔ' => 'Ǔ',\n  'ǖ' => 'Ǖ',\n  'ǘ' => 'Ǘ',\n  'ǚ' => 'Ǚ',\n  'ǜ' => 'Ǜ',\n  'ǝ' => 'Ǝ',\n  'ǟ' => 'Ǟ',\n  'ǡ' => 'Ǡ',\n  'ǣ' => 'Ǣ',\n  'ǥ' => 'Ǥ',\n  'ǧ' => 'Ǧ',\n  'ǩ' => 'Ǩ',\n  'ǫ' => 'Ǫ',\n  'ǭ' => 'Ǭ',\n  'ǯ' => 'Ǯ',\n  'ǲ' => 'Ǳ',\n  'ǳ' => 'Ǳ',\n  'ǵ' => 'Ǵ',\n  'ǹ' => 'Ǹ',\n  'ǻ' => 'Ǻ',\n  'ǽ' => 'Ǽ',\n  'ǿ' => 'Ǿ',\n  'ȁ' => 'Ȁ',\n  'ȃ' => 'Ȃ',\n  'ȅ' => 'Ȅ',\n  'ȇ' => 'Ȇ',\n  'ȉ' => 'Ȉ',\n  'ȋ' => 'Ȋ',\n  'ȍ' => 'Ȍ',\n  'ȏ' => 'Ȏ',\n  'ȑ' => 'Ȑ',\n  'ȓ' => 'Ȓ',\n  'ȕ' => 'Ȕ',\n  'ȗ' => 'Ȗ',\n  'ș' => 'Ș',\n  'ț' => 'Ț',\n  'ȝ' => 'Ȝ',\n  'ȟ' => 'Ȟ',\n  'ȣ' => 'Ȣ',\n  'ȥ' => 'Ȥ',\n  'ȧ' => 'Ȧ',\n  'ȩ' => 'Ȩ',\n  'ȫ' => 'Ȫ',\n  'ȭ' => 'Ȭ',\n  'ȯ' => 'Ȯ',\n  'ȱ' => 'Ȱ',\n  'ȳ' => 'Ȳ',\n  'ȼ' => 'Ȼ',\n  'ȿ' => 'Ȿ',\n  'ɀ' => 'Ɀ',\n  'ɂ' => 'Ɂ',\n  'ɇ' => 'Ɇ',\n  'ɉ' => 'Ɉ',\n  'ɋ' => 'Ɋ',\n  'ɍ' => 'Ɍ',\n  'ɏ' => 'Ɏ',\n  'ɐ' => 'Ɐ',\n  'ɑ' => 'Ɑ',\n  'ɒ' => 'Ɒ',\n  'ɓ' => 'Ɓ',\n  'ɔ' => 'Ɔ',\n  'ɖ' => 'Ɖ',\n  'ɗ' => 'Ɗ',\n  'ə' => 'Ə',\n  'ɛ' => 'Ɛ',\n  'ɜ' => 'Ɜ',\n  'ɠ' => 'Ɠ',\n  'ɡ' => 'Ɡ',\n  'ɣ' => 'Ɣ',\n  'ɥ' => 'Ɥ',\n  'ɦ' => 'Ɦ',\n  'ɨ' => 'Ɨ',\n  'ɩ' => 'Ɩ',\n  'ɪ' => 'Ɪ',\n  'ɫ' => 'Ɫ',\n  'ɬ' => 'Ɬ',\n  'ɯ' => 'Ɯ',\n  'ɱ' => 'Ɱ',\n  'ɲ' => 'Ɲ',\n  'ɵ' => 'Ɵ',\n  'ɽ' => 'Ɽ',\n  'ʀ' => 'Ʀ',\n  'ʂ' => 'Ʂ',\n  'ʃ' => 'Ʃ',\n  'ʇ' => 'Ʇ',\n  'ʈ' => 'Ʈ',\n  'ʉ' => 'Ʉ',\n  'ʊ' => 'Ʊ',\n  'ʋ' => 'Ʋ',\n  'ʌ' => 'Ʌ',\n  'ʒ' => 'Ʒ',\n  'ʝ' => 'Ʝ',\n  'ʞ' => 'Ʞ',\n  'ͅ' => 'Ι',\n  'ͱ' => 'Ͱ',\n  'ͳ' => 'Ͳ',\n  'ͷ' => 'Ͷ',\n  'ͻ' => 'Ͻ',\n  'ͼ' => 'Ͼ',\n  'ͽ' => 'Ͽ',\n  'ά' => 'Ά',\n  'έ' => 'Έ',\n  'ή' => 'Ή',\n  'ί' => 'Ί',\n  'α' => 'Α',\n  'β' => 'Β',\n  'γ' => 'Γ',\n  'δ' => 'Δ',\n  'ε' => 'Ε',\n  'ζ' => 'Ζ',\n  'η' => 'Η',\n  'θ' => 'Θ',\n  'ι' => 'Ι',\n  'κ' => 'Κ',\n  'λ' => 'Λ',\n  'μ' => 'Μ',\n  'ν' => 'Ν',\n  'ξ' => 'Ξ',\n  'ο' => 'Ο',\n  'π' => 'Π',\n  'ρ' => 'Ρ',\n  'ς' => 'Σ',\n  'σ' => 'Σ',\n  'τ' => 'Τ',\n  'υ' => 'Υ',\n  'φ' => 'Φ',\n  'χ' => 'Χ',\n  'ψ' => 'Ψ',\n  'ω' => 'Ω',\n  'ϊ' => 'Ϊ',\n  'ϋ' => 'Ϋ',\n  'ό' => 'Ό',\n  'ύ' => 'Ύ',\n  'ώ' => 'Ώ',\n  'ϐ' => 'Β',\n  'ϑ' => 'Θ',\n  'ϕ' => 'Φ',\n  'ϖ' => 'Π',\n  'ϗ' => 'Ϗ',\n  'ϙ' => 'Ϙ',\n  'ϛ' => 'Ϛ',\n  'ϝ' => 'Ϝ',\n  'ϟ' => 'Ϟ',\n  'ϡ' => 'Ϡ',\n  'ϣ' => 'Ϣ',\n  'ϥ' => 'Ϥ',\n  'ϧ' => 'Ϧ',\n  'ϩ' => 'Ϩ',\n  'ϫ' => 'Ϫ',\n  'ϭ' => 'Ϭ',\n  'ϯ' => 'Ϯ',\n  'ϰ' => 'Κ',\n  'ϱ' => 'Ρ',\n  'ϲ' => 'Ϲ',\n  'ϳ' => 'Ϳ',\n  'ϵ' => 'Ε',\n  'ϸ' => 'Ϸ',\n  'ϻ' => 'Ϻ',\n  'а' => 'А',\n  'б' => 'Б',\n  'в' => 'В',\n  'г' => 'Г',\n  'д' => 'Д',\n  'е' => 'Е',\n  'ж' => 'Ж',\n  'з' => 'З',\n  'и' => 'И',\n  'й' => 'Й',\n  'к' => 'К',\n  'л' => 'Л',\n  'м' => 'М',\n  'н' => 'Н',\n  'о' => 'О',\n  'п' => 'П',\n  'р' => 'Р',\n  'с' => 'С',\n  'т' => 'Т',\n  'у' => 'У',\n  'ф' => 'Ф',\n  'х' => 'Х',\n  'ц' => 'Ц',\n  'ч' => 'Ч',\n  'ш' => 'Ш',\n  'щ' => 'Щ',\n  'ъ' => 'Ъ',\n  'ы' => 'Ы',\n  'ь' => 'Ь',\n  'э' => 'Э',\n  'ю' => 'Ю',\n  'я' => 'Я',\n  'ѐ' => 'Ѐ',\n  'ё' => 'Ё',\n  'ђ' => 'Ђ',\n  'ѓ' => 'Ѓ',\n  'є' => 'Є',\n  'ѕ' => 'Ѕ',\n  'і' => 'І',\n  'ї' => 'Ї',\n  'ј' => 'Ј',\n  'љ' => 'Љ',\n  'њ' => 'Њ',\n  'ћ' => 'Ћ',\n  'ќ' => 'Ќ',\n  'ѝ' => 'Ѝ',\n  'ў' => 'Ў',\n  'џ' => 'Џ',\n  'ѡ' => 'Ѡ',\n  'ѣ' => 'Ѣ',\n  'ѥ' => 'Ѥ',\n  'ѧ' => 'Ѧ',\n  'ѩ' => 'Ѩ',\n  'ѫ' => 'Ѫ',\n  'ѭ' => 'Ѭ',\n  'ѯ' => 'Ѯ',\n  'ѱ' => 'Ѱ',\n  'ѳ' => 'Ѳ',\n  'ѵ' => 'Ѵ',\n  'ѷ' => 'Ѷ',\n  'ѹ' => 'Ѹ',\n  'ѻ' => 'Ѻ',\n  'ѽ' => 'Ѽ',\n  'ѿ' => 'Ѿ',\n  'ҁ' => 'Ҁ',\n  'ҋ' => 'Ҋ',\n  'ҍ' => 'Ҍ',\n  'ҏ' => 'Ҏ',\n  'ґ' => 'Ґ',\n  'ғ' => 'Ғ',\n  'ҕ' => 'Ҕ',\n  'җ' => 'Җ',\n  'ҙ' => 'Ҙ',\n  'қ' => 'Қ',\n  'ҝ' => 'Ҝ',\n  'ҟ' => 'Ҟ',\n  'ҡ' => 'Ҡ',\n  'ң' => 'Ң',\n  'ҥ' => 'Ҥ',\n  'ҧ' => 'Ҧ',\n  'ҩ' => 'Ҩ',\n  'ҫ' => 'Ҫ',\n  'ҭ' => 'Ҭ',\n  'ү' => 'Ү',\n  'ұ' => 'Ұ',\n  'ҳ' => 'Ҳ',\n  'ҵ' => 'Ҵ',\n  'ҷ' => 'Ҷ',\n  'ҹ' => 'Ҹ',\n  'һ' => 'Һ',\n  'ҽ' => 'Ҽ',\n  'ҿ' => 'Ҿ',\n  'ӂ' => 'Ӂ',\n  'ӄ' => 'Ӄ',\n  'ӆ' => 'Ӆ',\n  'ӈ' => 'Ӈ',\n  'ӊ' => 'Ӊ',\n  'ӌ' => 'Ӌ',\n  'ӎ' => 'Ӎ',\n  'ӏ' => 'Ӏ',\n  'ӑ' => 'Ӑ',\n  'ӓ' => 'Ӓ',\n  'ӕ' => 'Ӕ',\n  'ӗ' => 'Ӗ',\n  'ә' => 'Ә',\n  'ӛ' => 'Ӛ',\n  'ӝ' => 'Ӝ',\n  'ӟ' => 'Ӟ',\n  'ӡ' => 'Ӡ',\n  'ӣ' => 'Ӣ',\n  'ӥ' => 'Ӥ',\n  'ӧ' => 'Ӧ',\n  'ө' => 'Ө',\n  'ӫ' => 'Ӫ',\n  'ӭ' => 'Ӭ',\n  'ӯ' => 'Ӯ',\n  'ӱ' => 'Ӱ',\n  'ӳ' => 'Ӳ',\n  'ӵ' => 'Ӵ',\n  'ӷ' => 'Ӷ',\n  'ӹ' => 'Ӹ',\n  'ӻ' => 'Ӻ',\n  'ӽ' => 'Ӽ',\n  'ӿ' => 'Ӿ',\n  'ԁ' => 'Ԁ',\n  'ԃ' => 'Ԃ',\n  'ԅ' => 'Ԅ',\n  'ԇ' => 'Ԇ',\n  'ԉ' => 'Ԉ',\n  'ԋ' => 'Ԋ',\n  'ԍ' => 'Ԍ',\n  'ԏ' => 'Ԏ',\n  'ԑ' => 'Ԑ',\n  'ԓ' => 'Ԓ',\n  'ԕ' => 'Ԕ',\n  'ԗ' => 'Ԗ',\n  'ԙ' => 'Ԙ',\n  'ԛ' => 'Ԛ',\n  'ԝ' => 'Ԝ',\n  'ԟ' => 'Ԟ',\n  'ԡ' => 'Ԡ',\n  'ԣ' => 'Ԣ',\n  'ԥ' => 'Ԥ',\n  'ԧ' => 'Ԧ',\n  'ԩ' => 'Ԩ',\n  'ԫ' => 'Ԫ',\n  'ԭ' => 'Ԭ',\n  'ԯ' => 'Ԯ',\n  'ա' => 'Ա',\n  'բ' => 'Բ',\n  'գ' => 'Գ',\n  'դ' => 'Դ',\n  'ե' => 'Ե',\n  'զ' => 'Զ',\n  'է' => 'Է',\n  'ը' => 'Ը',\n  'թ' => 'Թ',\n  'ժ' => 'Ժ',\n  'ի' => 'Ի',\n  'լ' => 'Լ',\n  'խ' => 'Խ',\n  'ծ' => 'Ծ',\n  'կ' => 'Կ',\n  'հ' => 'Հ',\n  'ձ' => 'Ձ',\n  'ղ' => 'Ղ',\n  'ճ' => 'Ճ',\n  'մ' => 'Մ',\n  'յ' => 'Յ',\n  'ն' => 'Ն',\n  'շ' => 'Շ',\n  'ո' => 'Ո',\n  'չ' => 'Չ',\n  'պ' => 'Պ',\n  'ջ' => 'Ջ',\n  'ռ' => 'Ռ',\n  'ս' => 'Ս',\n  'վ' => 'Վ',\n  'տ' => 'Տ',\n  'ր' => 'Ր',\n  'ց' => 'Ց',\n  'ւ' => 'Ւ',\n  'փ' => 'Փ',\n  'ք' => 'Ք',\n  'օ' => 'Օ',\n  'ֆ' => 'Ֆ',\n  'ა' => 'Ა',\n  'ბ' => 'Ბ',\n  'გ' => 'Გ',\n  'დ' => 'Დ',\n  'ე' => 'Ე',\n  'ვ' => 'Ვ',\n  'ზ' => 'Ზ',\n  'თ' => 'Თ',\n  'ი' => 'Ი',\n  'კ' => 'Კ',\n  'ლ' => 'Ლ',\n  'მ' => 'Მ',\n  'ნ' => 'Ნ',\n  'ო' => 'Ო',\n  'პ' => 'Პ',\n  'ჟ' => 'Ჟ',\n  'რ' => 'Რ',\n  'ს' => 'Ს',\n  'ტ' => 'Ტ',\n  'უ' => 'Უ',\n  'ფ' => 'Ფ',\n  'ქ' => 'Ქ',\n  'ღ' => 'Ღ',\n  'ყ' => 'Ყ',\n  'შ' => 'Შ',\n  'ჩ' => 'Ჩ',\n  'ც' => 'Ც',\n  'ძ' => 'Ძ',\n  'წ' => 'Წ',\n  'ჭ' => 'Ჭ',\n  'ხ' => 'Ხ',\n  'ჯ' => 'Ჯ',\n  'ჰ' => 'Ჰ',\n  'ჱ' => 'Ჱ',\n  'ჲ' => 'Ჲ',\n  'ჳ' => 'Ჳ',\n  'ჴ' => 'Ჴ',\n  'ჵ' => 'Ჵ',\n  'ჶ' => 'Ჶ',\n  'ჷ' => 'Ჷ',\n  'ჸ' => 'Ჸ',\n  'ჹ' => 'Ჹ',\n  'ჺ' => 'Ჺ',\n  'ჽ' => 'Ჽ',\n  'ჾ' => 'Ჾ',\n  'ჿ' => 'Ჿ',\n  'ᏸ' => 'Ᏸ',\n  'ᏹ' => 'Ᏹ',\n  'ᏺ' => 'Ᏺ',\n  'ᏻ' => 'Ᏻ',\n  'ᏼ' => 'Ᏼ',\n  'ᏽ' => 'Ᏽ',\n  'ᲀ' => 'В',\n  'ᲁ' => 'Д',\n  'ᲂ' => 'О',\n  'ᲃ' => 'С',\n  'ᲄ' => 'Т',\n  'ᲅ' => 'Т',\n  'ᲆ' => 'Ъ',\n  'ᲇ' => 'Ѣ',\n  'ᲈ' => 'Ꙋ',\n  'ᵹ' => 'Ᵹ',\n  'ᵽ' => 'Ᵽ',\n  'ᶎ' => 'Ᶎ',\n  'ḁ' => 'Ḁ',\n  'ḃ' => 'Ḃ',\n  'ḅ' => 'Ḅ',\n  'ḇ' => 'Ḇ',\n  'ḉ' => 'Ḉ',\n  'ḋ' => 'Ḋ',\n  'ḍ' => 'Ḍ',\n  'ḏ' => 'Ḏ',\n  'ḑ' => 'Ḑ',\n  'ḓ' => 'Ḓ',\n  'ḕ' => 'Ḕ',\n  'ḗ' => 'Ḗ',\n  'ḙ' => 'Ḙ',\n  'ḛ' => 'Ḛ',\n  'ḝ' => 'Ḝ',\n  'ḟ' => 'Ḟ',\n  'ḡ' => 'Ḡ',\n  'ḣ' => 'Ḣ',\n  'ḥ' => 'Ḥ',\n  'ḧ' => 'Ḧ',\n  'ḩ' => 'Ḩ',\n  'ḫ' => 'Ḫ',\n  'ḭ' => 'Ḭ',\n  'ḯ' => 'Ḯ',\n  'ḱ' => 'Ḱ',\n  'ḳ' => 'Ḳ',\n  'ḵ' => 'Ḵ',\n  'ḷ' => 'Ḷ',\n  'ḹ' => 'Ḹ',\n  'ḻ' => 'Ḻ',\n  'ḽ' => 'Ḽ',\n  'ḿ' => 'Ḿ',\n  'ṁ' => 'Ṁ',\n  'ṃ' => 'Ṃ',\n  'ṅ' => 'Ṅ',\n  'ṇ' => 'Ṇ',\n  'ṉ' => 'Ṉ',\n  'ṋ' => 'Ṋ',\n  'ṍ' => 'Ṍ',\n  'ṏ' => 'Ṏ',\n  'ṑ' => 'Ṑ',\n  'ṓ' => 'Ṓ',\n  'ṕ' => 'Ṕ',\n  'ṗ' => 'Ṗ',\n  'ṙ' => 'Ṙ',\n  'ṛ' => 'Ṛ',\n  'ṝ' => 'Ṝ',\n  'ṟ' => 'Ṟ',\n  'ṡ' => 'Ṡ',\n  'ṣ' => 'Ṣ',\n  'ṥ' => 'Ṥ',\n  'ṧ' => 'Ṧ',\n  'ṩ' => 'Ṩ',\n  'ṫ' => 'Ṫ',\n  'ṭ' => 'Ṭ',\n  'ṯ' => 'Ṯ',\n  'ṱ' => 'Ṱ',\n  'ṳ' => 'Ṳ',\n  'ṵ' => 'Ṵ',\n  'ṷ' => 'Ṷ',\n  'ṹ' => 'Ṹ',\n  'ṻ' => 'Ṻ',\n  'ṽ' => 'Ṽ',\n  'ṿ' => 'Ṿ',\n  'ẁ' => 'Ẁ',\n  'ẃ' => 'Ẃ',\n  'ẅ' => 'Ẅ',\n  'ẇ' => 'Ẇ',\n  'ẉ' => 'Ẉ',\n  'ẋ' => 'Ẋ',\n  'ẍ' => 'Ẍ',\n  'ẏ' => 'Ẏ',\n  'ẑ' => 'Ẑ',\n  'ẓ' => 'Ẓ',\n  'ẕ' => 'Ẕ',\n  'ẛ' => 'Ṡ',\n  'ạ' => 'Ạ',\n  'ả' => 'Ả',\n  'ấ' => 'Ấ',\n  'ầ' => 'Ầ',\n  'ẩ' => 'Ẩ',\n  'ẫ' => 'Ẫ',\n  'ậ' => 'Ậ',\n  'ắ' => 'Ắ',\n  'ằ' => 'Ằ',\n  'ẳ' => 'Ẳ',\n  'ẵ' => 'Ẵ',\n  'ặ' => 'Ặ',\n  'ẹ' => 'Ẹ',\n  'ẻ' => 'Ẻ',\n  'ẽ' => 'Ẽ',\n  'ế' => 'Ế',\n  'ề' => 'Ề',\n  'ể' => 'Ể',\n  'ễ' => 'Ễ',\n  'ệ' => 'Ệ',\n  'ỉ' => 'Ỉ',\n  'ị' => 'Ị',\n  'ọ' => 'Ọ',\n  'ỏ' => 'Ỏ',\n  'ố' => 'Ố',\n  'ồ' => 'Ồ',\n  'ổ' => 'Ổ',\n  'ỗ' => 'Ỗ',\n  'ộ' => 'Ộ',\n  'ớ' => 'Ớ',\n  'ờ' => 'Ờ',\n  'ở' => 'Ở',\n  'ỡ' => 'Ỡ',\n  'ợ' => 'Ợ',\n  'ụ' => 'Ụ',\n  'ủ' => 'Ủ',\n  'ứ' => 'Ứ',\n  'ừ' => 'Ừ',\n  'ử' => 'Ử',\n  'ữ' => 'Ữ',\n  'ự' => 'Ự',\n  'ỳ' => 'Ỳ',\n  'ỵ' => 'Ỵ',\n  'ỷ' => 'Ỷ',\n  'ỹ' => 'Ỹ',\n  'ỻ' => 'Ỻ',\n  'ỽ' => 'Ỽ',\n  'ỿ' => 'Ỿ',\n  'ἀ' => 'Ἀ',\n  'ἁ' => 'Ἁ',\n  'ἂ' => 'Ἂ',\n  'ἃ' => 'Ἃ',\n  'ἄ' => 'Ἄ',\n  'ἅ' => 'Ἅ',\n  'ἆ' => 'Ἆ',\n  'ἇ' => 'Ἇ',\n  'ἐ' => 'Ἐ',\n  'ἑ' => 'Ἑ',\n  'ἒ' => 'Ἒ',\n  'ἓ' => 'Ἓ',\n  'ἔ' => 'Ἔ',\n  'ἕ' => 'Ἕ',\n  'ἠ' => 'Ἠ',\n  'ἡ' => 'Ἡ',\n  'ἢ' => 'Ἢ',\n  'ἣ' => 'Ἣ',\n  'ἤ' => 'Ἤ',\n  'ἥ' => 'Ἥ',\n  'ἦ' => 'Ἦ',\n  'ἧ' => 'Ἧ',\n  'ἰ' => 'Ἰ',\n  'ἱ' => 'Ἱ',\n  'ἲ' => 'Ἲ',\n  'ἳ' => 'Ἳ',\n  'ἴ' => 'Ἴ',\n  'ἵ' => 'Ἵ',\n  'ἶ' => 'Ἶ',\n  'ἷ' => 'Ἷ',\n  'ὀ' => 'Ὀ',\n  'ὁ' => 'Ὁ',\n  'ὂ' => 'Ὂ',\n  'ὃ' => 'Ὃ',\n  'ὄ' => 'Ὄ',\n  'ὅ' => 'Ὅ',\n  'ὑ' => 'Ὑ',\n  'ὓ' => 'Ὓ',\n  'ὕ' => 'Ὕ',\n  'ὗ' => 'Ὗ',\n  'ὠ' => 'Ὠ',\n  'ὡ' => 'Ὡ',\n  'ὢ' => 'Ὢ',\n  'ὣ' => 'Ὣ',\n  'ὤ' => 'Ὤ',\n  'ὥ' => 'Ὥ',\n  'ὦ' => 'Ὦ',\n  'ὧ' => 'Ὧ',\n  'ὰ' => 'Ὰ',\n  'ά' => 'Ά',\n  'ὲ' => 'Ὲ',\n  'έ' => 'Έ',\n  'ὴ' => 'Ὴ',\n  'ή' => 'Ή',\n  'ὶ' => 'Ὶ',\n  'ί' => 'Ί',\n  'ὸ' => 'Ὸ',\n  'ό' => 'Ό',\n  'ὺ' => 'Ὺ',\n  'ύ' => 'Ύ',\n  'ὼ' => 'Ὼ',\n  'ώ' => 'Ώ',\n  'ᾀ' => 'ἈΙ',\n  'ᾁ' => 'ἉΙ',\n  'ᾂ' => 'ἊΙ',\n  'ᾃ' => 'ἋΙ',\n  'ᾄ' => 'ἌΙ',\n  'ᾅ' => 'ἍΙ',\n  'ᾆ' => 'ἎΙ',\n  'ᾇ' => 'ἏΙ',\n  'ᾐ' => 'ἨΙ',\n  'ᾑ' => 'ἩΙ',\n  'ᾒ' => 'ἪΙ',\n  'ᾓ' => 'ἫΙ',\n  'ᾔ' => 'ἬΙ',\n  'ᾕ' => 'ἭΙ',\n  'ᾖ' => 'ἮΙ',\n  'ᾗ' => 'ἯΙ',\n  'ᾠ' => 'ὨΙ',\n  'ᾡ' => 'ὩΙ',\n  'ᾢ' => 'ὪΙ',\n  'ᾣ' => 'ὫΙ',\n  'ᾤ' => 'ὬΙ',\n  'ᾥ' => 'ὭΙ',\n  'ᾦ' => 'ὮΙ',\n  'ᾧ' => 'ὯΙ',\n  'ᾰ' => 'Ᾰ',\n  'ᾱ' => 'Ᾱ',\n  'ᾳ' => 'ΑΙ',\n  'ι' => 'Ι',\n  'ῃ' => 'ΗΙ',\n  'ῐ' => 'Ῐ',\n  'ῑ' => 'Ῑ',\n  'ῠ' => 'Ῠ',\n  'ῡ' => 'Ῡ',\n  'ῥ' => 'Ῥ',\n  'ῳ' => 'ΩΙ',\n  'ⅎ' => 'Ⅎ',\n  'ⅰ' => 'Ⅰ',\n  'ⅱ' => 'Ⅱ',\n  'ⅲ' => 'Ⅲ',\n  'ⅳ' => 'Ⅳ',\n  'ⅴ' => 'Ⅴ',\n  'ⅵ' => 'Ⅵ',\n  'ⅶ' => 'Ⅶ',\n  'ⅷ' => 'Ⅷ',\n  'ⅸ' => 'Ⅸ',\n  'ⅹ' => 'Ⅹ',\n  'ⅺ' => 'Ⅺ',\n  'ⅻ' => 'Ⅻ',\n  'ⅼ' => 'Ⅼ',\n  'ⅽ' => 'Ⅽ',\n  'ⅾ' => 'Ⅾ',\n  'ⅿ' => 'Ⅿ',\n  'ↄ' => 'Ↄ',\n  'ⓐ' => 'Ⓐ',\n  'ⓑ' => 'Ⓑ',\n  'ⓒ' => 'Ⓒ',\n  'ⓓ' => 'Ⓓ',\n  'ⓔ' => 'Ⓔ',\n  'ⓕ' => 'Ⓕ',\n  'ⓖ' => 'Ⓖ',\n  'ⓗ' => 'Ⓗ',\n  'ⓘ' => 'Ⓘ',\n  'ⓙ' => 'Ⓙ',\n  'ⓚ' => 'Ⓚ',\n  'ⓛ' => 'Ⓛ',\n  'ⓜ' => 'Ⓜ',\n  'ⓝ' => 'Ⓝ',\n  'ⓞ' => 'Ⓞ',\n  'ⓟ' => 'Ⓟ',\n  'ⓠ' => 'Ⓠ',\n  'ⓡ' => 'Ⓡ',\n  'ⓢ' => 'Ⓢ',\n  'ⓣ' => 'Ⓣ',\n  'ⓤ' => 'Ⓤ',\n  'ⓥ' => 'Ⓥ',\n  'ⓦ' => 'Ⓦ',\n  'ⓧ' => 'Ⓧ',\n  'ⓨ' => 'Ⓨ',\n  'ⓩ' => 'Ⓩ',\n  'ⰰ' => 'Ⰰ',\n  'ⰱ' => 'Ⰱ',\n  'ⰲ' => 'Ⰲ',\n  'ⰳ' => 'Ⰳ',\n  'ⰴ' => 'Ⰴ',\n  'ⰵ' => 'Ⰵ',\n  'ⰶ' => 'Ⰶ',\n  'ⰷ' => 'Ⰷ',\n  'ⰸ' => 'Ⰸ',\n  'ⰹ' => 'Ⰹ',\n  'ⰺ' => 'Ⰺ',\n  'ⰻ' => 'Ⰻ',\n  'ⰼ' => 'Ⰼ',\n  'ⰽ' => 'Ⰽ',\n  'ⰾ' => 'Ⰾ',\n  'ⰿ' => 'Ⰿ',\n  'ⱀ' => 'Ⱀ',\n  'ⱁ' => 'Ⱁ',\n  'ⱂ' => 'Ⱂ',\n  'ⱃ' => 'Ⱃ',\n  'ⱄ' => 'Ⱄ',\n  'ⱅ' => 'Ⱅ',\n  'ⱆ' => 'Ⱆ',\n  'ⱇ' => 'Ⱇ',\n  'ⱈ' => 'Ⱈ',\n  'ⱉ' => 'Ⱉ',\n  'ⱊ' => 'Ⱊ',\n  'ⱋ' => 'Ⱋ',\n  'ⱌ' => 'Ⱌ',\n  'ⱍ' => 'Ⱍ',\n  'ⱎ' => 'Ⱎ',\n  'ⱏ' => 'Ⱏ',\n  'ⱐ' => 'Ⱐ',\n  'ⱑ' => 'Ⱑ',\n  'ⱒ' => 'Ⱒ',\n  'ⱓ' => 'Ⱓ',\n  'ⱔ' => 'Ⱔ',\n  'ⱕ' => 'Ⱕ',\n  'ⱖ' => 'Ⱖ',\n  'ⱗ' => 'Ⱗ',\n  'ⱘ' => 'Ⱘ',\n  'ⱙ' => 'Ⱙ',\n  'ⱚ' => 'Ⱚ',\n  'ⱛ' => 'Ⱛ',\n  'ⱜ' => 'Ⱜ',\n  'ⱝ' => 'Ⱝ',\n  'ⱞ' => 'Ⱞ',\n  'ⱡ' => 'Ⱡ',\n  'ⱥ' => 'Ⱥ',\n  'ⱦ' => 'Ⱦ',\n  'ⱨ' => 'Ⱨ',\n  'ⱪ' => 'Ⱪ',\n  'ⱬ' => 'Ⱬ',\n  'ⱳ' => 'Ⱳ',\n  'ⱶ' => 'Ⱶ',\n  'ⲁ' => 'Ⲁ',\n  'ⲃ' => 'Ⲃ',\n  'ⲅ' => 'Ⲅ',\n  'ⲇ' => 'Ⲇ',\n  'ⲉ' => 'Ⲉ',\n  'ⲋ' => 'Ⲋ',\n  'ⲍ' => 'Ⲍ',\n  'ⲏ' => 'Ⲏ',\n  'ⲑ' => 'Ⲑ',\n  'ⲓ' => 'Ⲓ',\n  'ⲕ' => 'Ⲕ',\n  'ⲗ' => 'Ⲗ',\n  'ⲙ' => 'Ⲙ',\n  'ⲛ' => 'Ⲛ',\n  'ⲝ' => 'Ⲝ',\n  'ⲟ' => 'Ⲟ',\n  'ⲡ' => 'Ⲡ',\n  'ⲣ' => 'Ⲣ',\n  'ⲥ' => 'Ⲥ',\n  'ⲧ' => 'Ⲧ',\n  'ⲩ' => 'Ⲩ',\n  'ⲫ' => 'Ⲫ',\n  'ⲭ' => 'Ⲭ',\n  'ⲯ' => 'Ⲯ',\n  'ⲱ' => 'Ⲱ',\n  'ⲳ' => 'Ⲳ',\n  'ⲵ' => 'Ⲵ',\n  'ⲷ' => 'Ⲷ',\n  'ⲹ' => 'Ⲹ',\n  'ⲻ' => 'Ⲻ',\n  'ⲽ' => 'Ⲽ',\n  'ⲿ' => 'Ⲿ',\n  'ⳁ' => 'Ⳁ',\n  'ⳃ' => 'Ⳃ',\n  'ⳅ' => 'Ⳅ',\n  'ⳇ' => 'Ⳇ',\n  'ⳉ' => 'Ⳉ',\n  'ⳋ' => 'Ⳋ',\n  'ⳍ' => 'Ⳍ',\n  'ⳏ' => 'Ⳏ',\n  'ⳑ' => 'Ⳑ',\n  'ⳓ' => 'Ⳓ',\n  'ⳕ' => 'Ⳕ',\n  'ⳗ' => 'Ⳗ',\n  'ⳙ' => 'Ⳙ',\n  'ⳛ' => 'Ⳛ',\n  'ⳝ' => 'Ⳝ',\n  'ⳟ' => 'Ⳟ',\n  'ⳡ' => 'Ⳡ',\n  'ⳣ' => 'Ⳣ',\n  'ⳬ' => 'Ⳬ',\n  'ⳮ' => 'Ⳮ',\n  'ⳳ' => 'Ⳳ',\n  'ⴀ' => 'Ⴀ',\n  'ⴁ' => 'Ⴁ',\n  'ⴂ' => 'Ⴂ',\n  'ⴃ' => 'Ⴃ',\n  'ⴄ' => 'Ⴄ',\n  'ⴅ' => 'Ⴅ',\n  'ⴆ' => 'Ⴆ',\n  'ⴇ' => 'Ⴇ',\n  'ⴈ' => 'Ⴈ',\n  'ⴉ' => 'Ⴉ',\n  'ⴊ' => 'Ⴊ',\n  'ⴋ' => 'Ⴋ',\n  'ⴌ' => 'Ⴌ',\n  'ⴍ' => 'Ⴍ',\n  'ⴎ' => 'Ⴎ',\n  'ⴏ' => 'Ⴏ',\n  'ⴐ' => 'Ⴐ',\n  'ⴑ' => 'Ⴑ',\n  'ⴒ' => 'Ⴒ',\n  'ⴓ' => 'Ⴓ',\n  'ⴔ' => 'Ⴔ',\n  'ⴕ' => 'Ⴕ',\n  'ⴖ' => 'Ⴖ',\n  'ⴗ' => 'Ⴗ',\n  'ⴘ' => 'Ⴘ',\n  'ⴙ' => 'Ⴙ',\n  'ⴚ' => 'Ⴚ',\n  'ⴛ' => 'Ⴛ',\n  'ⴜ' => 'Ⴜ',\n  'ⴝ' => 'Ⴝ',\n  'ⴞ' => 'Ⴞ',\n  'ⴟ' => 'Ⴟ',\n  'ⴠ' => 'Ⴠ',\n  'ⴡ' => 'Ⴡ',\n  'ⴢ' => 'Ⴢ',\n  'ⴣ' => 'Ⴣ',\n  'ⴤ' => 'Ⴤ',\n  'ⴥ' => 'Ⴥ',\n  'ⴧ' => 'Ⴧ',\n  'ⴭ' => 'Ⴭ',\n  'ꙁ' => 'Ꙁ',\n  'ꙃ' => 'Ꙃ',\n  'ꙅ' => 'Ꙅ',\n  'ꙇ' => 'Ꙇ',\n  'ꙉ' => 'Ꙉ',\n  'ꙋ' => 'Ꙋ',\n  'ꙍ' => 'Ꙍ',\n  'ꙏ' => 'Ꙏ',\n  'ꙑ' => 'Ꙑ',\n  'ꙓ' => 'Ꙓ',\n  'ꙕ' => 'Ꙕ',\n  'ꙗ' => 'Ꙗ',\n  'ꙙ' => 'Ꙙ',\n  'ꙛ' => 'Ꙛ',\n  'ꙝ' => 'Ꙝ',\n  'ꙟ' => 'Ꙟ',\n  'ꙡ' => 'Ꙡ',\n  'ꙣ' => 'Ꙣ',\n  'ꙥ' => 'Ꙥ',\n  'ꙧ' => 'Ꙧ',\n  'ꙩ' => 'Ꙩ',\n  'ꙫ' => 'Ꙫ',\n  'ꙭ' => 'Ꙭ',\n  'ꚁ' => 'Ꚁ',\n  'ꚃ' => 'Ꚃ',\n  'ꚅ' => 'Ꚅ',\n  'ꚇ' => 'Ꚇ',\n  'ꚉ' => 'Ꚉ',\n  'ꚋ' => 'Ꚋ',\n  'ꚍ' => 'Ꚍ',\n  'ꚏ' => 'Ꚏ',\n  'ꚑ' => 'Ꚑ',\n  'ꚓ' => 'Ꚓ',\n  'ꚕ' => 'Ꚕ',\n  'ꚗ' => 'Ꚗ',\n  'ꚙ' => 'Ꚙ',\n  'ꚛ' => 'Ꚛ',\n  'ꜣ' => 'Ꜣ',\n  'ꜥ' => 'Ꜥ',\n  'ꜧ' => 'Ꜧ',\n  'ꜩ' => 'Ꜩ',\n  'ꜫ' => 'Ꜫ',\n  'ꜭ' => 'Ꜭ',\n  'ꜯ' => 'Ꜯ',\n  'ꜳ' => 'Ꜳ',\n  'ꜵ' => 'Ꜵ',\n  'ꜷ' => 'Ꜷ',\n  'ꜹ' => 'Ꜹ',\n  'ꜻ' => 'Ꜻ',\n  'ꜽ' => 'Ꜽ',\n  'ꜿ' => 'Ꜿ',\n  'ꝁ' => 'Ꝁ',\n  'ꝃ' => 'Ꝃ',\n  'ꝅ' => 'Ꝅ',\n  'ꝇ' => 'Ꝇ',\n  'ꝉ' => 'Ꝉ',\n  'ꝋ' => 'Ꝋ',\n  'ꝍ' => 'Ꝍ',\n  'ꝏ' => 'Ꝏ',\n  'ꝑ' => 'Ꝑ',\n  'ꝓ' => 'Ꝓ',\n  'ꝕ' => 'Ꝕ',\n  'ꝗ' => 'Ꝗ',\n  'ꝙ' => 'Ꝙ',\n  'ꝛ' => 'Ꝛ',\n  'ꝝ' => 'Ꝝ',\n  'ꝟ' => 'Ꝟ',\n  'ꝡ' => 'Ꝡ',\n  'ꝣ' => 'Ꝣ',\n  'ꝥ' => 'Ꝥ',\n  'ꝧ' => 'Ꝧ',\n  'ꝩ' => 'Ꝩ',\n  'ꝫ' => 'Ꝫ',\n  'ꝭ' => 'Ꝭ',\n  'ꝯ' => 'Ꝯ',\n  'ꝺ' => 'Ꝺ',\n  'ꝼ' => 'Ꝼ',\n  'ꝿ' => 'Ꝿ',\n  'ꞁ' => 'Ꞁ',\n  'ꞃ' => 'Ꞃ',\n  'ꞅ' => 'Ꞅ',\n  'ꞇ' => 'Ꞇ',\n  'ꞌ' => 'Ꞌ',\n  'ꞑ' => 'Ꞑ',\n  'ꞓ' => 'Ꞓ',\n  'ꞔ' => 'Ꞔ',\n  'ꞗ' => 'Ꞗ',\n  'ꞙ' => 'Ꞙ',\n  'ꞛ' => 'Ꞛ',\n  'ꞝ' => 'Ꞝ',\n  'ꞟ' => 'Ꞟ',\n  'ꞡ' => 'Ꞡ',\n  'ꞣ' => 'Ꞣ',\n  'ꞥ' => 'Ꞥ',\n  'ꞧ' => 'Ꞧ',\n  'ꞩ' => 'Ꞩ',\n  'ꞵ' => 'Ꞵ',\n  'ꞷ' => 'Ꞷ',\n  'ꞹ' => 'Ꞹ',\n  'ꞻ' => 'Ꞻ',\n  'ꞽ' => 'Ꞽ',\n  'ꞿ' => 'Ꞿ',\n  'ꟃ' => 'Ꟃ',\n  'ꟈ' => 'Ꟈ',\n  'ꟊ' => 'Ꟊ',\n  'ꟶ' => 'Ꟶ',\n  'ꭓ' => 'Ꭓ',\n  'ꭰ' => 'Ꭰ',\n  'ꭱ' => 'Ꭱ',\n  'ꭲ' => 'Ꭲ',\n  'ꭳ' => 'Ꭳ',\n  'ꭴ' => 'Ꭴ',\n  'ꭵ' => 'Ꭵ',\n  'ꭶ' => 'Ꭶ',\n  'ꭷ' => 'Ꭷ',\n  'ꭸ' => 'Ꭸ',\n  'ꭹ' => 'Ꭹ',\n  'ꭺ' => 'Ꭺ',\n  'ꭻ' => 'Ꭻ',\n  'ꭼ' => 'Ꭼ',\n  'ꭽ' => 'Ꭽ',\n  'ꭾ' => 'Ꭾ',\n  'ꭿ' => 'Ꭿ',\n  'ꮀ' => 'Ꮀ',\n  'ꮁ' => 'Ꮁ',\n  'ꮂ' => 'Ꮂ',\n  'ꮃ' => 'Ꮃ',\n  'ꮄ' => 'Ꮄ',\n  'ꮅ' => 'Ꮅ',\n  'ꮆ' => 'Ꮆ',\n  'ꮇ' => 'Ꮇ',\n  'ꮈ' => 'Ꮈ',\n  'ꮉ' => 'Ꮉ',\n  'ꮊ' => 'Ꮊ',\n  'ꮋ' => 'Ꮋ',\n  'ꮌ' => 'Ꮌ',\n  'ꮍ' => 'Ꮍ',\n  'ꮎ' => 'Ꮎ',\n  'ꮏ' => 'Ꮏ',\n  'ꮐ' => 'Ꮐ',\n  'ꮑ' => 'Ꮑ',\n  'ꮒ' => 'Ꮒ',\n  'ꮓ' => 'Ꮓ',\n  'ꮔ' => 'Ꮔ',\n  'ꮕ' => 'Ꮕ',\n  'ꮖ' => 'Ꮖ',\n  'ꮗ' => 'Ꮗ',\n  'ꮘ' => 'Ꮘ',\n  'ꮙ' => 'Ꮙ',\n  'ꮚ' => 'Ꮚ',\n  'ꮛ' => 'Ꮛ',\n  'ꮜ' => 'Ꮜ',\n  'ꮝ' => 'Ꮝ',\n  'ꮞ' => 'Ꮞ',\n  'ꮟ' => 'Ꮟ',\n  'ꮠ' => 'Ꮠ',\n  'ꮡ' => 'Ꮡ',\n  'ꮢ' => 'Ꮢ',\n  'ꮣ' => 'Ꮣ',\n  'ꮤ' => 'Ꮤ',\n  'ꮥ' => 'Ꮥ',\n  'ꮦ' => 'Ꮦ',\n  'ꮧ' => 'Ꮧ',\n  'ꮨ' => 'Ꮨ',\n  'ꮩ' => 'Ꮩ',\n  'ꮪ' => 'Ꮪ',\n  'ꮫ' => 'Ꮫ',\n  'ꮬ' => 'Ꮬ',\n  'ꮭ' => 'Ꮭ',\n  'ꮮ' => 'Ꮮ',\n  'ꮯ' => 'Ꮯ',\n  'ꮰ' => 'Ꮰ',\n  'ꮱ' => 'Ꮱ',\n  'ꮲ' => 'Ꮲ',\n  'ꮳ' => 'Ꮳ',\n  'ꮴ' => 'Ꮴ',\n  'ꮵ' => 'Ꮵ',\n  'ꮶ' => 'Ꮶ',\n  'ꮷ' => 'Ꮷ',\n  'ꮸ' => 'Ꮸ',\n  'ꮹ' => 'Ꮹ',\n  'ꮺ' => 'Ꮺ',\n  'ꮻ' => 'Ꮻ',\n  'ꮼ' => 'Ꮼ',\n  'ꮽ' => 'Ꮽ',\n  'ꮾ' => 'Ꮾ',\n  'ꮿ' => 'Ꮿ',\n  'ａ' => 'Ａ',\n  'ｂ' => 'Ｂ',\n  'ｃ' => 'Ｃ',\n  'ｄ' => 'Ｄ',\n  'ｅ' => 'Ｅ',\n  'ｆ' => 'Ｆ',\n  'ｇ' => 'Ｇ',\n  'ｈ' => 'Ｈ',\n  'ｉ' => 'Ｉ',\n  'ｊ' => 'Ｊ',\n  'ｋ' => 'Ｋ',\n  'ｌ' => 'Ｌ',\n  'ｍ' => 'Ｍ',\n  'ｎ' => 'Ｎ',\n  'ｏ' => 'Ｏ',\n  'ｐ' => 'Ｐ',\n  'ｑ' => 'Ｑ',\n  'ｒ' => 'Ｒ',\n  'ｓ' => 'Ｓ',\n  'ｔ' => 'Ｔ',\n  'ｕ' => 'Ｕ',\n  'ｖ' => 'Ｖ',\n  'ｗ' => 'Ｗ',\n  'ｘ' => 'Ｘ',\n  'ｙ' => 'Ｙ',\n  'ｚ' => 'Ｚ',\n  '𐐨' => '𐐀',\n  '𐐩' => '𐐁',\n  '𐐪' => '𐐂',\n  '𐐫' => '𐐃',\n  '𐐬' => '𐐄',\n  '𐐭' => '𐐅',\n  '𐐮' => '𐐆',\n  '𐐯' => '𐐇',\n  '𐐰' => '𐐈',\n  '𐐱' => '𐐉',\n  '𐐲' => '𐐊',\n  '𐐳' => '𐐋',\n  '𐐴' => '𐐌',\n  '𐐵' => '𐐍',\n  '𐐶' => '𐐎',\n  '𐐷' => '𐐏',\n  '𐐸' => '𐐐',\n  '𐐹' => '𐐑',\n  '𐐺' => '𐐒',\n  '𐐻' => '𐐓',\n  '𐐼' => '𐐔',\n  '𐐽' => '𐐕',\n  '𐐾' => '𐐖',\n  '𐐿' => '𐐗',\n  '𐑀' => '𐐘',\n  '𐑁' => '𐐙',\n  '𐑂' => '𐐚',\n  '𐑃' => '𐐛',\n  '𐑄' => '𐐜',\n  '𐑅' => '𐐝',\n  '𐑆' => '𐐞',\n  '𐑇' => '𐐟',\n  '𐑈' => '𐐠',\n  '𐑉' => '𐐡',\n  '𐑊' => '𐐢',\n  '𐑋' => '𐐣',\n  '𐑌' => '𐐤',\n  '𐑍' => '𐐥',\n  '𐑎' => '𐐦',\n  '𐑏' => '𐐧',\n  '𐓘' => '𐒰',\n  '𐓙' => '𐒱',\n  '𐓚' => '𐒲',\n  '𐓛' => '𐒳',\n  '𐓜' => '𐒴',\n  '𐓝' => '𐒵',\n  '𐓞' => '𐒶',\n  '𐓟' => '𐒷',\n  '𐓠' => '𐒸',\n  '𐓡' => '𐒹',\n  '𐓢' => '𐒺',\n  '𐓣' => '𐒻',\n  '𐓤' => '𐒼',\n  '𐓥' => '𐒽',\n  '𐓦' => '𐒾',\n  '𐓧' => '𐒿',\n  '𐓨' => '𐓀',\n  '𐓩' => '𐓁',\n  '𐓪' => '𐓂',\n  '𐓫' => '𐓃',\n  '𐓬' => '𐓄',\n  '𐓭' => '𐓅',\n  '𐓮' => '𐓆',\n  '𐓯' => '𐓇',\n  '𐓰' => '𐓈',\n  '𐓱' => '𐓉',\n  '𐓲' => '𐓊',\n  '𐓳' => '𐓋',\n  '𐓴' => '𐓌',\n  '𐓵' => '𐓍',\n  '𐓶' => '𐓎',\n  '𐓷' => '𐓏',\n  '𐓸' => '𐓐',\n  '𐓹' => '𐓑',\n  '𐓺' => '𐓒',\n  '𐓻' => '𐓓',\n  '𐳀' => '𐲀',\n  '𐳁' => '𐲁',\n  '𐳂' => '𐲂',\n  '𐳃' => '𐲃',\n  '𐳄' => '𐲄',\n  '𐳅' => '𐲅',\n  '𐳆' => '𐲆',\n  '𐳇' => '𐲇',\n  '𐳈' => '𐲈',\n  '𐳉' => '𐲉',\n  '𐳊' => '𐲊',\n  '𐳋' => '𐲋',\n  '𐳌' => '𐲌',\n  '𐳍' => '𐲍',\n  '𐳎' => '𐲎',\n  '𐳏' => '𐲏',\n  '𐳐' => '𐲐',\n  '𐳑' => '𐲑',\n  '𐳒' => '𐲒',\n  '𐳓' => '𐲓',\n  '𐳔' => '𐲔',\n  '𐳕' => '𐲕',\n  '𐳖' => '𐲖',\n  '𐳗' => '𐲗',\n  '𐳘' => '𐲘',\n  '𐳙' => '𐲙',\n  '𐳚' => '𐲚',\n  '𐳛' => '𐲛',\n  '𐳜' => '𐲜',\n  '𐳝' => '𐲝',\n  '𐳞' => '𐲞',\n  '𐳟' => '𐲟',\n  '𐳠' => '𐲠',\n  '𐳡' => '𐲡',\n  '𐳢' => '𐲢',\n  '𐳣' => '𐲣',\n  '𐳤' => '𐲤',\n  '𐳥' => '𐲥',\n  '𐳦' => '𐲦',\n  '𐳧' => '𐲧',\n  '𐳨' => '𐲨',\n  '𐳩' => '𐲩',\n  '𐳪' => '𐲪',\n  '𐳫' => '𐲫',\n  '𐳬' => '𐲬',\n  '𐳭' => '𐲭',\n  '𐳮' => '𐲮',\n  '𐳯' => '𐲯',\n  '𐳰' => '𐲰',\n  '𐳱' => '𐲱',\n  '𐳲' => '𐲲',\n  '𑣀' => '𑢠',\n  '𑣁' => '𑢡',\n  '𑣂' => '𑢢',\n  '𑣃' => '𑢣',\n  '𑣄' => '𑢤',\n  '𑣅' => '𑢥',\n  '𑣆' => '𑢦',\n  '𑣇' => '𑢧',\n  '𑣈' => '𑢨',\n  '𑣉' => '𑢩',\n  '𑣊' => '𑢪',\n  '𑣋' => '𑢫',\n  '𑣌' => '𑢬',\n  '𑣍' => '𑢭',\n  '𑣎' => '𑢮',\n  '𑣏' => '𑢯',\n  '𑣐' => '𑢰',\n  '𑣑' => '𑢱',\n  '𑣒' => '𑢲',\n  '𑣓' => '𑢳',\n  '𑣔' => '𑢴',\n  '𑣕' => '𑢵',\n  '𑣖' => '𑢶',\n  '𑣗' => '𑢷',\n  '𑣘' => '𑢸',\n  '𑣙' => '𑢹',\n  '𑣚' => '𑢺',\n  '𑣛' => '𑢻',\n  '𑣜' => '𑢼',\n  '𑣝' => '𑢽',\n  '𑣞' => '𑢾',\n  '𑣟' => '𑢿',\n  '𖹠' => '𖹀',\n  '𖹡' => '𖹁',\n  '𖹢' => '𖹂',\n  '𖹣' => '𖹃',\n  '𖹤' => '𖹄',\n  '𖹥' => '𖹅',\n  '𖹦' => '𖹆',\n  '𖹧' => '𖹇',\n  '𖹨' => '𖹈',\n  '𖹩' => '𖹉',\n  '𖹪' => '𖹊',\n  '𖹫' => '𖹋',\n  '𖹬' => '𖹌',\n  '𖹭' => '𖹍',\n  '𖹮' => '𖹎',\n  '𖹯' => '𖹏',\n  '𖹰' => '𖹐',\n  '𖹱' => '𖹑',\n  '𖹲' => '𖹒',\n  '𖹳' => '𖹓',\n  '𖹴' => '𖹔',\n  '𖹵' => '𖹕',\n  '𖹶' => '𖹖',\n  '𖹷' => '𖹗',\n  '𖹸' => '𖹘',\n  '𖹹' => '𖹙',\n  '𖹺' => '𖹚',\n  '𖹻' => '𖹛',\n  '𖹼' => '𖹜',\n  '𖹽' => '𖹝',\n  '𖹾' => '𖹞',\n  '𖹿' => '𖹟',\n  '𞤢' => '𞤀',\n  '𞤣' => '𞤁',\n  '𞤤' => '𞤂',\n  '𞤥' => '𞤃',\n  '𞤦' => '𞤄',\n  '𞤧' => '𞤅',\n  '𞤨' => '𞤆',\n  '𞤩' => '𞤇',\n  '𞤪' => '𞤈',\n  '𞤫' => '𞤉',\n  '𞤬' => '𞤊',\n  '𞤭' => '𞤋',\n  '𞤮' => '𞤌',\n  '𞤯' => '𞤍',\n  '𞤰' => '𞤎',\n  '𞤱' => '𞤏',\n  '𞤲' => '𞤐',\n  '𞤳' => '𞤑',\n  '𞤴' => '𞤒',\n  '𞤵' => '𞤓',\n  '𞤶' => '𞤔',\n  '𞤷' => '𞤕',\n  '𞤸' => '𞤖',\n  '𞤹' => '𞤗',\n  '𞤺' => '𞤘',\n  '𞤻' => '𞤙',\n  '𞤼' => '𞤚',\n  '𞤽' => '𞤛',\n  '𞤾' => '𞤜',\n  '𞤿' => '𞤝',\n  '𞥀' => '𞤞',\n  '𞥁' => '𞤟',\n  '𞥂' => '𞤠',\n  '𞥃' => '𞤡',\n  'ß' => 'SS',\n  'ﬀ' => 'FF',\n  'ﬁ' => 'FI',\n  'ﬂ' => 'FL',\n  'ﬃ' => 'FFI',\n  'ﬄ' => 'FFL',\n  'ﬅ' => 'ST',\n  'ﬆ' => 'ST',\n  'և' => 'ԵՒ',\n  'ﬓ' => 'ՄՆ',\n  'ﬔ' => 'ՄԵ',\n  'ﬕ' => 'ՄԻ',\n  'ﬖ' => 'ՎՆ',\n  'ﬗ' => 'ՄԽ',\n  'ŉ' => 'ʼN',\n  'ΐ' => 'Ϊ́',\n  'ΰ' => 'Ϋ́',\n  'ǰ' => 'J̌',\n  'ẖ' => 'H̱',\n  'ẗ' => 'T̈',\n  'ẘ' => 'W̊',\n  'ẙ' => 'Y̊',\n  'ẚ' => 'Aʾ',\n  'ὐ' => 'Υ̓',\n  'ὒ' => 'Υ̓̀',\n  'ὔ' => 'Υ̓́',\n  'ὖ' => 'Υ̓͂',\n  'ᾶ' => 'Α͂',\n  'ῆ' => 'Η͂',\n  'ῒ' => 'Ϊ̀',\n  'ΐ' => 'Ϊ́',\n  'ῖ' => 'Ι͂',\n  'ῗ' => 'Ϊ͂',\n  'ῢ' => 'Ϋ̀',\n  'ΰ' => 'Ϋ́',\n  'ῤ' => 'Ρ̓',\n  'ῦ' => 'Υ͂',\n  'ῧ' => 'Ϋ͂',\n  'ῶ' => 'Ω͂',\n  'ᾈ' => 'ἈΙ',\n  'ᾉ' => 'ἉΙ',\n  'ᾊ' => 'ἊΙ',\n  'ᾋ' => 'ἋΙ',\n  'ᾌ' => 'ἌΙ',\n  'ᾍ' => 'ἍΙ',\n  'ᾎ' => 'ἎΙ',\n  'ᾏ' => 'ἏΙ',\n  'ᾘ' => 'ἨΙ',\n  'ᾙ' => 'ἩΙ',\n  'ᾚ' => 'ἪΙ',\n  'ᾛ' => 'ἫΙ',\n  'ᾜ' => 'ἬΙ',\n  'ᾝ' => 'ἭΙ',\n  'ᾞ' => 'ἮΙ',\n  'ᾟ' => 'ἯΙ',\n  'ᾨ' => 'ὨΙ',\n  'ᾩ' => 'ὩΙ',\n  'ᾪ' => 'ὪΙ',\n  'ᾫ' => 'ὫΙ',\n  'ᾬ' => 'ὬΙ',\n  'ᾭ' => 'ὭΙ',\n  'ᾮ' => 'ὮΙ',\n  'ᾯ' => 'ὯΙ',\n  'ᾼ' => 'ΑΙ',\n  'ῌ' => 'ΗΙ',\n  'ῼ' => 'ΩΙ',\n  'ᾲ' => 'ᾺΙ',\n  'ᾴ' => 'ΆΙ',\n  'ῂ' => 'ῊΙ',\n  'ῄ' => 'ΉΙ',\n  'ῲ' => 'ῺΙ',\n  'ῴ' => 'ΏΙ',\n  'ᾷ' => 'Α͂Ι',\n  'ῇ' => 'Η͂Ι',\n  'ῷ' => 'Ω͂Ι',\n);\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/bootstrap.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Polyfill\\Mbstring as p;\n\nif (\\PHP_VERSION_ID >= 80000) {\n    return require __DIR__.'/bootstrap80.php';\n}\n\nif (!function_exists('mb_convert_encoding')) {\n    function mb_convert_encoding($string, $to_encoding, $from_encoding = null) { return p\\Mbstring::mb_convert_encoding($string, $to_encoding, $from_encoding); }\n}\nif (!function_exists('mb_decode_mimeheader')) {\n    function mb_decode_mimeheader($string) { return p\\Mbstring::mb_decode_mimeheader($string); }\n}\nif (!function_exists('mb_encode_mimeheader')) {\n    function mb_encode_mimeheader($string, $charset = null, $transfer_encoding = null, $newline = \"\\r\\n\", $indent = 0) { return p\\Mbstring::mb_encode_mimeheader($string, $charset, $transfer_encoding, $newline, $indent); }\n}\nif (!function_exists('mb_decode_numericentity')) {\n    function mb_decode_numericentity($string, $map, $encoding = null) { return p\\Mbstring::mb_decode_numericentity($string, $map, $encoding); }\n}\nif (!function_exists('mb_encode_numericentity')) {\n    function mb_encode_numericentity($string, $map, $encoding = null, $hex = false) { return p\\Mbstring::mb_encode_numericentity($string, $map, $encoding, $hex); }\n}\nif (!function_exists('mb_convert_case')) {\n    function mb_convert_case($string, $mode, $encoding = null) { return p\\Mbstring::mb_convert_case($string, $mode, $encoding); }\n}\nif (!function_exists('mb_internal_encoding')) {\n    function mb_internal_encoding($encoding = null) { return p\\Mbstring::mb_internal_encoding($encoding); }\n}\nif (!function_exists('mb_language')) {\n    function mb_language($language = null) { return p\\Mbstring::mb_language($language); }\n}\nif (!function_exists('mb_list_encodings')) {\n    function mb_list_encodings() { return p\\Mbstring::mb_list_encodings(); }\n}\nif (!function_exists('mb_encoding_aliases')) {\n    function mb_encoding_aliases($encoding) { return p\\Mbstring::mb_encoding_aliases($encoding); }\n}\nif (!function_exists('mb_check_encoding')) {\n    function mb_check_encoding($value = null, $encoding = null) { return p\\Mbstring::mb_check_encoding($value, $encoding); }\n}\nif (!function_exists('mb_detect_encoding')) {\n    function mb_detect_encoding($string, $encodings = null, $strict = false) { return p\\Mbstring::mb_detect_encoding($string, $encodings, $strict); }\n}\nif (!function_exists('mb_detect_order')) {\n    function mb_detect_order($encoding = null) { return p\\Mbstring::mb_detect_order($encoding); }\n}\nif (!function_exists('mb_parse_str')) {\n    function mb_parse_str($string, &$result = []) { parse_str($string, $result); return (bool) $result; }\n}\nif (!function_exists('mb_strlen')) {\n    function mb_strlen($string, $encoding = null) { return p\\Mbstring::mb_strlen($string, $encoding); }\n}\nif (!function_exists('mb_strpos')) {\n    function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) { return p\\Mbstring::mb_strpos($haystack, $needle, $offset, $encoding); }\n}\nif (!function_exists('mb_strtolower')) {\n    function mb_strtolower($string, $encoding = null) { return p\\Mbstring::mb_strtolower($string, $encoding); }\n}\nif (!function_exists('mb_strtoupper')) {\n    function mb_strtoupper($string, $encoding = null) { return p\\Mbstring::mb_strtoupper($string, $encoding); }\n}\nif (!function_exists('mb_substitute_character')) {\n    function mb_substitute_character($substitute_character = null) { return p\\Mbstring::mb_substitute_character($substitute_character); }\n}\nif (!function_exists('mb_substr')) {\n    function mb_substr($string, $start, $length = 2147483647, $encoding = null) { return p\\Mbstring::mb_substr($string, $start, $length, $encoding); }\n}\nif (!function_exists('mb_stripos')) {\n    function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { return p\\Mbstring::mb_stripos($haystack, $needle, $offset, $encoding); }\n}\nif (!function_exists('mb_stristr')) {\n    function mb_stristr($haystack, $needle, $before_needle = false, $encoding = null) { return p\\Mbstring::mb_stristr($haystack, $needle, $before_needle, $encoding); }\n}\nif (!function_exists('mb_strrchr')) {\n    function mb_strrchr($haystack, $needle, $before_needle = false, $encoding = null) { return p\\Mbstring::mb_strrchr($haystack, $needle, $before_needle, $encoding); }\n}\nif (!function_exists('mb_strrichr')) {\n    function mb_strrichr($haystack, $needle, $before_needle = false, $encoding = null) { return p\\Mbstring::mb_strrichr($haystack, $needle, $before_needle, $encoding); }\n}\nif (!function_exists('mb_strripos')) {\n    function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { return p\\Mbstring::mb_strripos($haystack, $needle, $offset, $encoding); }\n}\nif (!function_exists('mb_strrpos')) {\n    function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) { return p\\Mbstring::mb_strrpos($haystack, $needle, $offset, $encoding); }\n}\nif (!function_exists('mb_strstr')) {\n    function mb_strstr($haystack, $needle, $before_needle = false, $encoding = null) { return p\\Mbstring::mb_strstr($haystack, $needle, $before_needle, $encoding); }\n}\nif (!function_exists('mb_get_info')) {\n    function mb_get_info($type = 'all') { return p\\Mbstring::mb_get_info($type); }\n}\nif (!function_exists('mb_http_output')) {\n    function mb_http_output($encoding = null) { return p\\Mbstring::mb_http_output($encoding); }\n}\nif (!function_exists('mb_strwidth')) {\n    function mb_strwidth($string, $encoding = null) { return p\\Mbstring::mb_strwidth($string, $encoding); }\n}\nif (!function_exists('mb_substr_count')) {\n    function mb_substr_count($haystack, $needle, $encoding = null) { return p\\Mbstring::mb_substr_count($haystack, $needle, $encoding); }\n}\nif (!function_exists('mb_output_handler')) {\n    function mb_output_handler($string, $status) { return p\\Mbstring::mb_output_handler($string, $status); }\n}\nif (!function_exists('mb_http_input')) {\n    function mb_http_input($type = null) { return p\\Mbstring::mb_http_input($type); }\n}\n\nif (!function_exists('mb_convert_variables')) {\n    function mb_convert_variables($to_encoding, $from_encoding, &...$vars) { return p\\Mbstring::mb_convert_variables($to_encoding, $from_encoding, ...$vars); }\n}\n\nif (!function_exists('mb_ord')) {\n    function mb_ord($string, $encoding = null) { return p\\Mbstring::mb_ord($string, $encoding); }\n}\nif (!function_exists('mb_chr')) {\n    function mb_chr($codepoint, $encoding = null) { return p\\Mbstring::mb_chr($codepoint, $encoding); }\n}\nif (!function_exists('mb_scrub')) {\n    function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? mb_internal_encoding() : $encoding; return mb_convert_encoding($string, $encoding, $encoding); }\n}\nif (!function_exists('mb_str_split')) {\n    function mb_str_split($string, $length = 1, $encoding = null) { return p\\Mbstring::mb_str_split($string, $length, $encoding); }\n}\n\nif (!function_exists('mb_str_pad')) {\n    function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }\n}\n\nif (extension_loaded('mbstring')) {\n    return;\n}\n\nif (!defined('MB_CASE_UPPER')) {\n    define('MB_CASE_UPPER', 0);\n}\nif (!defined('MB_CASE_LOWER')) {\n    define('MB_CASE_LOWER', 1);\n}\nif (!defined('MB_CASE_TITLE')) {\n    define('MB_CASE_TITLE', 2);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/bootstrap80.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Polyfill\\Mbstring as p;\n\nif (!function_exists('mb_convert_encoding')) {\n    function mb_convert_encoding(array|string|null $string, ?string $to_encoding, array|string|null $from_encoding = null): array|string|false { return p\\Mbstring::mb_convert_encoding($string ?? '', (string) $to_encoding, $from_encoding); }\n}\nif (!function_exists('mb_decode_mimeheader')) {\n    function mb_decode_mimeheader(?string $string): string { return p\\Mbstring::mb_decode_mimeheader((string) $string); }\n}\nif (!function_exists('mb_encode_mimeheader')) {\n    function mb_encode_mimeheader(?string $string, ?string $charset = null, ?string $transfer_encoding = null, ?string $newline = \"\\r\\n\", ?int $indent = 0): string { return p\\Mbstring::mb_encode_mimeheader((string) $string, $charset, $transfer_encoding, (string) $newline, (int) $indent); }\n}\nif (!function_exists('mb_decode_numericentity')) {\n    function mb_decode_numericentity(?string $string, array $map, ?string $encoding = null): string { return p\\Mbstring::mb_decode_numericentity((string) $string, $map, $encoding); }\n}\nif (!function_exists('mb_encode_numericentity')) {\n    function mb_encode_numericentity(?string $string, array $map, ?string $encoding = null, ?bool $hex = false): string { return p\\Mbstring::mb_encode_numericentity((string) $string, $map, $encoding, (bool) $hex); }\n}\nif (!function_exists('mb_convert_case')) {\n    function mb_convert_case(?string $string, ?int $mode, ?string $encoding = null): string { return p\\Mbstring::mb_convert_case((string) $string, (int) $mode, $encoding); }\n}\nif (!function_exists('mb_internal_encoding')) {\n    function mb_internal_encoding(?string $encoding = null): string|bool { return p\\Mbstring::mb_internal_encoding($encoding); }\n}\nif (!function_exists('mb_language')) {\n    function mb_language(?string $language = null): string|bool { return p\\Mbstring::mb_language($language); }\n}\nif (!function_exists('mb_list_encodings')) {\n    function mb_list_encodings(): array { return p\\Mbstring::mb_list_encodings(); }\n}\nif (!function_exists('mb_encoding_aliases')) {\n    function mb_encoding_aliases(?string $encoding): array { return p\\Mbstring::mb_encoding_aliases((string) $encoding); }\n}\nif (!function_exists('mb_check_encoding')) {\n    function mb_check_encoding(array|string|null $value = null, ?string $encoding = null): bool { return p\\Mbstring::mb_check_encoding($value, $encoding); }\n}\nif (!function_exists('mb_detect_encoding')) {\n    function mb_detect_encoding(?string $string, array|string|null $encodings = null, ?bool $strict = false): string|false { return p\\Mbstring::mb_detect_encoding((string) $string, $encodings, (bool) $strict); }\n}\nif (!function_exists('mb_detect_order')) {\n    function mb_detect_order(array|string|null $encoding = null): array|bool { return p\\Mbstring::mb_detect_order($encoding); }\n}\nif (!function_exists('mb_parse_str')) {\n    function mb_parse_str(?string $string, &$result = []): bool { parse_str((string) $string, $result); return (bool) $result; }\n}\nif (!function_exists('mb_strlen')) {\n    function mb_strlen(?string $string, ?string $encoding = null): int { return p\\Mbstring::mb_strlen((string) $string, $encoding); }\n}\nif (!function_exists('mb_strpos')) {\n    function mb_strpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\\Mbstring::mb_strpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }\n}\nif (!function_exists('mb_strtolower')) {\n    function mb_strtolower(?string $string, ?string $encoding = null): string { return p\\Mbstring::mb_strtolower((string) $string, $encoding); }\n}\nif (!function_exists('mb_strtoupper')) {\n    function mb_strtoupper(?string $string, ?string $encoding = null): string { return p\\Mbstring::mb_strtoupper((string) $string, $encoding); }\n}\nif (!function_exists('mb_substitute_character')) {\n    function mb_substitute_character(string|int|null $substitute_character = null): string|int|bool { return p\\Mbstring::mb_substitute_character($substitute_character); }\n}\nif (!function_exists('mb_substr')) {\n    function mb_substr(?string $string, ?int $start, ?int $length = null, ?string $encoding = null): string { return p\\Mbstring::mb_substr((string) $string, (int) $start, $length, $encoding); }\n}\nif (!function_exists('mb_stripos')) {\n    function mb_stripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\\Mbstring::mb_stripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }\n}\nif (!function_exists('mb_stristr')) {\n    function mb_stristr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\\Mbstring::mb_stristr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }\n}\nif (!function_exists('mb_strrchr')) {\n    function mb_strrchr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\\Mbstring::mb_strrchr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }\n}\nif (!function_exists('mb_strrichr')) {\n    function mb_strrichr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\\Mbstring::mb_strrichr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }\n}\nif (!function_exists('mb_strripos')) {\n    function mb_strripos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\\Mbstring::mb_strripos((string) $haystack, (string) $needle, (int) $offset, $encoding); }\n}\nif (!function_exists('mb_strrpos')) {\n    function mb_strrpos(?string $haystack, ?string $needle, ?int $offset = 0, ?string $encoding = null): int|false { return p\\Mbstring::mb_strrpos((string) $haystack, (string) $needle, (int) $offset, $encoding); }\n}\nif (!function_exists('mb_strstr')) {\n    function mb_strstr(?string $haystack, ?string $needle, ?bool $before_needle = false, ?string $encoding = null): string|false { return p\\Mbstring::mb_strstr((string) $haystack, (string) $needle, (bool) $before_needle, $encoding); }\n}\nif (!function_exists('mb_get_info')) {\n    function mb_get_info(?string $type = 'all'): array|string|int|false { return p\\Mbstring::mb_get_info((string) $type); }\n}\nif (!function_exists('mb_http_output')) {\n    function mb_http_output(?string $encoding = null): string|bool { return p\\Mbstring::mb_http_output($encoding); }\n}\nif (!function_exists('mb_strwidth')) {\n    function mb_strwidth(?string $string, ?string $encoding = null): int { return p\\Mbstring::mb_strwidth((string) $string, $encoding); }\n}\nif (!function_exists('mb_substr_count')) {\n    function mb_substr_count(?string $haystack, ?string $needle, ?string $encoding = null): int { return p\\Mbstring::mb_substr_count((string) $haystack, (string) $needle, $encoding); }\n}\nif (!function_exists('mb_output_handler')) {\n    function mb_output_handler(?string $string, ?int $status): string { return p\\Mbstring::mb_output_handler((string) $string, (int) $status); }\n}\nif (!function_exists('mb_http_input')) {\n    function mb_http_input(?string $type = null): array|string|false { return p\\Mbstring::mb_http_input($type); }\n}\n\nif (!function_exists('mb_convert_variables')) {\n    function mb_convert_variables(?string $to_encoding, array|string|null $from_encoding, mixed &$var, mixed &...$vars): string|false { return p\\Mbstring::mb_convert_variables((string) $to_encoding, $from_encoding ?? '', $var, ...$vars); }\n}\n\nif (!function_exists('mb_ord')) {\n    function mb_ord(?string $string, ?string $encoding = null): int|false { return p\\Mbstring::mb_ord((string) $string, $encoding); }\n}\nif (!function_exists('mb_chr')) {\n    function mb_chr(?int $codepoint, ?string $encoding = null): string|false { return p\\Mbstring::mb_chr((int) $codepoint, $encoding); }\n}\nif (!function_exists('mb_scrub')) {\n    function mb_scrub(?string $string, ?string $encoding = null): string { $encoding ??= mb_internal_encoding(); return mb_convert_encoding((string) $string, $encoding, $encoding); }\n}\nif (!function_exists('mb_str_split')) {\n    function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); }\n}\n\nif (!function_exists('mb_str_pad')) {\n    function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); }\n}\n\nif (extension_loaded('mbstring')) {\n    return;\n}\n\nif (!defined('MB_CASE_UPPER')) {\n    define('MB_CASE_UPPER', 0);\n}\nif (!defined('MB_CASE_LOWER')) {\n    define('MB_CASE_LOWER', 1);\n}\nif (!defined('MB_CASE_TITLE')) {\n    define('MB_CASE_TITLE', 2);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-mbstring/composer.json",
    "content": "{\n    \"name\": \"symfony/polyfill-mbstring\",\n    \"type\": \"library\",\n    \"description\": \"Symfony polyfill for the Mbstring extension\",\n    \"keywords\": [\"polyfill\", \"shim\", \"compatibility\", \"portable\", \"mbstring\"],\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Nicolas Grekas\",\n            \"email\": \"p@tchwork.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.1\"\n    },\n    \"provide\": {\n        \"ext-mbstring\": \"*\"\n    },\n    \"autoload\": {\n        \"psr-4\": { \"Symfony\\\\Polyfill\\\\Mbstring\\\\\": \"\" },\n        \"files\": [ \"bootstrap.php\" ]\n    },\n    \"suggest\": {\n        \"ext-mbstring\": \"For best performance\"\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"thanks\": {\n            \"name\": \"symfony/polyfill\",\n            \"url\": \"https://github.com/symfony/polyfill\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/LICENSE",
    "content": "Copyright (c) 2020-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/Php80.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Polyfill\\Php80;\n\n/**\n * @author Ion Bazan <ion.bazan@gmail.com>\n * @author Nico Oelgart <nicoswd@gmail.com>\n * @author Nicolas Grekas <p@tchwork.com>\n *\n * @internal\n */\nfinal class Php80\n{\n    public static function fdiv(float $dividend, float $divisor): float\n    {\n        return @($dividend / $divisor);\n    }\n\n    public static function get_debug_type($value): string\n    {\n        switch (true) {\n            case null === $value: return 'null';\n            case \\is_bool($value): return 'bool';\n            case \\is_string($value): return 'string';\n            case \\is_array($value): return 'array';\n            case \\is_int($value): return 'int';\n            case \\is_float($value): return 'float';\n            case \\is_object($value): break;\n            case $value instanceof \\__PHP_Incomplete_Class: return '__PHP_Incomplete_Class';\n            default:\n                if (null === $type = @get_resource_type($value)) {\n                    return 'unknown';\n                }\n\n                if ('Unknown' === $type) {\n                    $type = 'closed';\n                }\n\n                return \"resource ($type)\";\n        }\n\n        $class = \\get_class($value);\n\n        if (false === strpos($class, '@')) {\n            return $class;\n        }\n\n        return (get_parent_class($class) ?: key(class_implements($class)) ?: 'class').'@anonymous';\n    }\n\n    public static function get_resource_id($res): int\n    {\n        if (!\\is_resource($res) && null === @get_resource_type($res)) {\n            throw new \\TypeError(sprintf('Argument 1 passed to get_resource_id() must be of the type resource, %s given', get_debug_type($res)));\n        }\n\n        return (int) $res;\n    }\n\n    public static function preg_last_error_msg(): string\n    {\n        switch (preg_last_error()) {\n            case \\PREG_INTERNAL_ERROR:\n                return 'Internal error';\n            case \\PREG_BAD_UTF8_ERROR:\n                return 'Malformed UTF-8 characters, possibly incorrectly encoded';\n            case \\PREG_BAD_UTF8_OFFSET_ERROR:\n                return 'The offset did not correspond to the beginning of a valid UTF-8 code point';\n            case \\PREG_BACKTRACK_LIMIT_ERROR:\n                return 'Backtrack limit exhausted';\n            case \\PREG_RECURSION_LIMIT_ERROR:\n                return 'Recursion limit exhausted';\n            case \\PREG_JIT_STACKLIMIT_ERROR:\n                return 'JIT stack limit exhausted';\n            case \\PREG_NO_ERROR:\n                return 'No error';\n            default:\n                return 'Unknown error';\n        }\n    }\n\n    public static function str_contains(string $haystack, string $needle): bool\n    {\n        return '' === $needle || false !== strpos($haystack, $needle);\n    }\n\n    public static function str_starts_with(string $haystack, string $needle): bool\n    {\n        return 0 === strncmp($haystack, $needle, \\strlen($needle));\n    }\n\n    public static function str_ends_with(string $haystack, string $needle): bool\n    {\n        if ('' === $needle || $needle === $haystack) {\n            return true;\n        }\n\n        if ('' === $haystack) {\n            return false;\n        }\n\n        $needleLength = \\strlen($needle);\n\n        return $needleLength <= \\strlen($haystack) && 0 === substr_compare($haystack, $needle, -$needleLength);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/PhpToken.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Polyfill\\Php80;\n\n/**\n * @author Fedonyuk Anton <info@ensostudio.ru>\n *\n * @internal\n */\nclass PhpToken implements \\Stringable\n{\n    /**\n     * @var int\n     */\n    public $id;\n\n    /**\n     * @var string\n     */\n    public $text;\n\n    /**\n     * @var int\n     */\n    public $line;\n\n    /**\n     * @var int\n     */\n    public $pos;\n\n    public function __construct(int $id, string $text, int $line = -1, int $position = -1)\n    {\n        $this->id = $id;\n        $this->text = $text;\n        $this->line = $line;\n        $this->pos = $position;\n    }\n\n    public function getTokenName(): ?string\n    {\n        if ('UNKNOWN' === $name = token_name($this->id)) {\n            $name = \\strlen($this->text) > 1 || \\ord($this->text) < 32 ? null : $this->text;\n        }\n\n        return $name;\n    }\n\n    /**\n     * @param int|string|array $kind\n     */\n    public function is($kind): bool\n    {\n        foreach ((array) $kind as $value) {\n            if (\\in_array($value, [$this->id, $this->text], true)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    public function isIgnorable(): bool\n    {\n        return \\in_array($this->id, [\\T_WHITESPACE, \\T_COMMENT, \\T_DOC_COMMENT, \\T_OPEN_TAG], true);\n    }\n\n    public function __toString(): string\n    {\n        return (string) $this->text;\n    }\n\n    /**\n     * @return static[]\n     */\n    public static function tokenize(string $code, int $flags = 0): array\n    {\n        $line = 1;\n        $position = 0;\n        $tokens = token_get_all($code, $flags);\n        foreach ($tokens as $index => $token) {\n            if (\\is_string($token)) {\n                $id = \\ord($token);\n                $text = $token;\n            } else {\n                [$id, $text, $line] = $token;\n            }\n            $tokens[$index] = new static($id, $text, $line, $position);\n            $position += \\strlen($text);\n        }\n\n        return $tokens;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/README.md",
    "content": "Symfony Polyfill / Php80\n========================\n\nThis component provides features added to PHP 8.0 core:\n\n- [`Stringable`](https://php.net/stringable) interface\n- [`fdiv`](https://php.net/fdiv)\n- [`ValueError`](https://php.net/valueerror) class\n- [`UnhandledMatchError`](https://php.net/unhandledmatcherror) class\n- `FILTER_VALIDATE_BOOL` constant\n- [`get_debug_type`](https://php.net/get_debug_type)\n- [`PhpToken`](https://php.net/phptoken) class\n- [`preg_last_error_msg`](https://php.net/preg_last_error_msg)\n- [`str_contains`](https://php.net/str_contains)\n- [`str_starts_with`](https://php.net/str_starts_with)\n- [`str_ends_with`](https://php.net/str_ends_with)\n- [`get_resource_id`](https://php.net/get_resource_id)\n\nMore information can be found in the\n[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).\n\nLicense\n=======\n\nThis library is released under the [MIT license](LICENSE).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\n#[Attribute(Attribute::TARGET_CLASS)]\nfinal class Attribute\n{\n    public const TARGET_CLASS = 1;\n    public const TARGET_FUNCTION = 2;\n    public const TARGET_METHOD = 4;\n    public const TARGET_PROPERTY = 8;\n    public const TARGET_CLASS_CONSTANT = 16;\n    public const TARGET_PARAMETER = 32;\n    public const TARGET_ALL = 63;\n    public const IS_REPEATABLE = 64;\n\n    /** @var int */\n    public $flags;\n\n    public function __construct(int $flags = self::TARGET_ALL)\n    {\n        $this->flags = $flags;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (\\PHP_VERSION_ID < 80000 && extension_loaded('tokenizer')) {\n    class PhpToken extends Symfony\\Polyfill\\Php80\\PhpToken\n    {\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (\\PHP_VERSION_ID < 80000) {\n    interface Stringable\n    {\n        /**\n         * @return string\n         */\n        public function __toString();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (\\PHP_VERSION_ID < 80000) {\n    class UnhandledMatchError extends Error\n    {\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (\\PHP_VERSION_ID < 80000) {\n    class ValueError extends Error\n    {\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/bootstrap.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Polyfill\\Php80 as p;\n\nif (\\PHP_VERSION_ID >= 80000) {\n    return;\n}\n\nif (!defined('FILTER_VALIDATE_BOOL') && defined('FILTER_VALIDATE_BOOLEAN')) {\n    define('FILTER_VALIDATE_BOOL', \\FILTER_VALIDATE_BOOLEAN);\n}\n\nif (!function_exists('fdiv')) {\n    function fdiv(float $num1, float $num2): float { return p\\Php80::fdiv($num1, $num2); }\n}\nif (!function_exists('preg_last_error_msg')) {\n    function preg_last_error_msg(): string { return p\\Php80::preg_last_error_msg(); }\n}\nif (!function_exists('str_contains')) {\n    function str_contains(?string $haystack, ?string $needle): bool { return p\\Php80::str_contains($haystack ?? '', $needle ?? ''); }\n}\nif (!function_exists('str_starts_with')) {\n    function str_starts_with(?string $haystack, ?string $needle): bool { return p\\Php80::str_starts_with($haystack ?? '', $needle ?? ''); }\n}\nif (!function_exists('str_ends_with')) {\n    function str_ends_with(?string $haystack, ?string $needle): bool { return p\\Php80::str_ends_with($haystack ?? '', $needle ?? ''); }\n}\nif (!function_exists('get_debug_type')) {\n    function get_debug_type($value): string { return p\\Php80::get_debug_type($value); }\n}\nif (!function_exists('get_resource_id')) {\n    function get_resource_id($resource): int { return p\\Php80::get_resource_id($resource); }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php80/composer.json",
    "content": "{\n    \"name\": \"symfony/polyfill-php80\",\n    \"type\": \"library\",\n    \"description\": \"Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions\",\n    \"keywords\": [\"polyfill\", \"shim\", \"compatibility\", \"portable\"],\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Ion Bazan\",\n            \"email\": \"ion.bazan@gmail.com\"\n        },\n        {\n            \"name\": \"Nicolas Grekas\",\n            \"email\": \"p@tchwork.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.1\"\n    },\n    \"autoload\": {\n        \"psr-4\": { \"Symfony\\\\Polyfill\\\\Php80\\\\\": \"\" },\n        \"files\": [ \"bootstrap.php\" ],\n        \"classmap\": [ \"Resources/stubs\" ]\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"thanks\": {\n            \"name\": \"symfony/polyfill\",\n            \"url\": \"https://github.com/symfony/polyfill\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/LICENSE",
    "content": "Copyright (c) 2021-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/Php81.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Polyfill\\Php81;\n\n/**\n * @author Nicolas Grekas <p@tchwork.com>\n *\n * @internal\n */\nfinal class Php81\n{\n    public static function array_is_list(array $array): bool\n    {\n        if ([] === $array || $array === array_values($array)) {\n            return true;\n        }\n\n        $nextKey = -1;\n\n        foreach ($array as $k => $v) {\n            if ($k !== ++$nextKey) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/README.md",
    "content": "Symfony Polyfill / Php81\n========================\n\nThis component provides features added to PHP 8.1 core:\n\n- [`array_is_list`](https://php.net/array_is_list)\n- [`enum_exists`](https://php.net/enum-exists)\n- [`MYSQLI_REFRESH_REPLICA`](https://php.net/mysqli.constants#constantmysqli-refresh-replica) constant\n- [`ReturnTypeWillChange`](https://wiki.php.net/rfc/internal_method_return_types)\n- [`CURLStringFile`](https://php.net/CURLStringFile) (but only if PHP >= 7.4 is used)\n\nMore information can be found in the\n[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).\n\nLicense\n=======\n\nThis library is released under the [MIT license](LICENSE).\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (\\PHP_VERSION_ID >= 70400 && extension_loaded('curl')) {\n    /**\n     * @property string $data\n     */\n    class CURLStringFile extends CURLFile\n    {\n        private $data;\n\n        public function __construct(string $data, string $postname, string $mime = 'application/octet-stream')\n        {\n            $this->data = $data;\n            parent::__construct('data://application/octet-stream;base64,'.base64_encode($data), $mime, $postname);\n        }\n\n        public function __set(string $name, $value): void\n        {\n            if ('data' !== $name) {\n                $this->$name = $value;\n\n                return;\n            }\n\n            if (is_object($value) ? !method_exists($value, '__toString') : !is_scalar($value)) {\n                throw new TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string');\n            }\n\n            $this->name = 'data://application/octet-stream;base64,'.base64_encode($value);\n        }\n\n        public function __isset(string $name): bool\n        {\n            return isset($this->$name);\n        }\n\n        public function &__get(string $name)\n        {\n            return $this->$name;\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/Resources/stubs/ReturnTypeWillChange.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif (\\PHP_VERSION_ID < 80100) {\n    #[Attribute(Attribute::TARGET_METHOD)]\n    final class ReturnTypeWillChange\n    {\n        public function __construct()\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/bootstrap.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nuse Symfony\\Polyfill\\Php81 as p;\n\nif (\\PHP_VERSION_ID >= 80100) {\n    return;\n}\n\nif (defined('MYSQLI_REFRESH_SLAVE') && !defined('MYSQLI_REFRESH_REPLICA')) {\n    define('MYSQLI_REFRESH_REPLICA', 64);\n}\n\nif (!function_exists('array_is_list')) {\n    function array_is_list(array $array): bool { return p\\Php81::array_is_list($array); }\n}\n\nif (!function_exists('enum_exists')) {\n    function enum_exists(string $enum, bool $autoload = true): bool { return $autoload && class_exists($enum) && false; }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/polyfill-php81/composer.json",
    "content": "{\n    \"name\": \"symfony/polyfill-php81\",\n    \"type\": \"library\",\n    \"description\": \"Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions\",\n    \"keywords\": [\"polyfill\", \"shim\", \"compatibility\", \"portable\"],\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Nicolas Grekas\",\n            \"email\": \"p@tchwork.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=7.2\"\n    },\n    \"autoload\": {\n        \"psr-4\": { \"Symfony\\\\Polyfill\\\\Php81\\\\\": \"\" },\n        \"files\": [ \"bootstrap.php\" ],\n        \"classmap\": [ \"Resources/stubs\" ]\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"thanks\": {\n            \"name\": \"symfony/polyfill\",\n            \"url\": \"https://github.com/symfony/polyfill\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/CHANGELOG.md",
    "content": "CHANGELOG\n=========\n\n6.4\n---\n\n * Give current locale to `LocaleSwitcher::runWithLocale()`'s callback\n * Add `--as-tree` option to `translation:pull` command to write YAML messages as a tree-like structure\n * [BC BREAK] Add argument `$buildDir` to `DataCollectorTranslator::warmUp()`\n * Add `DataCollectorTranslatorPass` and `LoggingTranslatorPass`  (moved from `FrameworkBundle`)\n * Add `PhraseTranslationProvider`\n\n6.2.7\n-----\n\n * [BC BREAK] The following data providers for `ProviderFactoryTestCase` are now static:\n   `supportsProvider()`, `createProvider()`, `unsupportedSchemeProvider()`and `incompleteDsnProvider()`\n * [BC BREAK] `ProviderTestCase::toStringProvider()` is now static\n\n6.2\n---\n\n * Deprecate `PhpStringTokenParser`\n * Deprecate `PhpExtractor` in favor of `PhpAstExtractor`\n * Add `PhpAstExtractor` (requires [nikic/php-parser](https://github.com/nikic/php-parser) to be installed)\n\n6.1\n---\n\n * Parameters implementing `TranslatableInterface` are processed\n * Add the file extension to the `XliffFileDumper` constructor\n\n5.4\n---\n\n * Add `github` format & autodetection to render errors as annotations when\n   running the XLIFF linter command in a Github Actions environment.\n * Translation providers are not experimental anymore\n\n5.3\n---\n\n * Add `translation:pull` and `translation:push` commands to manage translations with third-party providers\n * Add `TranslatorBagInterface::getCatalogues` method\n * Add support to load XLIFF string in `XliffFileLoader`\n\n5.2.0\n-----\n\n * added support for calling `trans` with ICU formatted messages\n * added `PseudoLocalizationTranslator`\n * added `TranslatableMessage` objects that represent a message that can be translated\n * added the `t()` function to easily create `TranslatableMessage` objects\n * Added support for extracting messages from `TranslatableMessage` objects\n\n5.1.0\n-----\n\n * added support for `name` attribute on `unit` element from xliff2 to be used as a translation key instead of always the `source` element\n\n5.0.0\n-----\n\n * removed support for using `null` as the locale in `Translator`\n * removed `TranslatorInterface`\n * removed `MessageSelector`\n * removed `ChoiceMessageFormatterInterface`\n * removed `PluralizationRule`\n * removed `Interval`\n * removed `transChoice()` methods, use the trans() method instead with a %count% parameter\n * removed `FileDumper::setBackup()` and `TranslationWriter::disableBackup()`\n * removed `MessageFormatter::choiceFormat()`\n * added argument `$filename` to `PhpExtractor::parseTokens()`\n * removed support for implicit STDIN usage in the `lint:xliff` command, use `lint:xliff -` (append a dash) instead to make it explicit.\n\n4.4.0\n-----\n\n * deprecated support for using `null` as the locale in `Translator`\n * deprecated accepting STDIN implicitly when using the `lint:xliff` command, use `lint:xliff -` (append a dash) instead to make it explicit.\n * Marked the `TranslationDataCollector` class as `@final`.\n\n4.3.0\n-----\n\n * Improved Xliff 1.2 loader to load the original file's metadata\n * Added `TranslatorPathsPass`\n\n4.2.0\n-----\n\n * Started using ICU parent locales as fallback locales.\n * allow using the ICU message format using domains with the \"+intl-icu\" suffix\n * deprecated `Translator::transChoice()` in favor of using `Translator::trans()` with a `%count%` parameter\n * deprecated `TranslatorInterface` in favor of `Symfony\\Contracts\\Translation\\TranslatorInterface`\n * deprecated `MessageSelector`, `Interval` and `PluralizationRules`; use `IdentityTranslator` instead\n * Added `IntlFormatter` and `IntlFormatterInterface`\n * added support for multiple files and directories in `XliffLintCommand`\n * Marked `Translator::getFallbackLocales()` and `TranslationDataCollector::getFallbackLocales()` as internal\n\n4.1.0\n-----\n\n * The `FileDumper::setBackup()` method is deprecated.\n * The `TranslationWriter::disableBackup()` method is deprecated.\n * The `XliffFileDumper` will write \"name\" on the \"unit\" node when dumping XLIFF 2.0.\n\n4.0.0\n-----\n\n * removed the backup feature of the `FileDumper` class\n * removed `TranslationWriter::writeTranslations()` method\n * removed support for passing `MessageSelector` instances to the constructor of the `Translator` class\n\n3.4.0\n-----\n\n * Added `TranslationDumperPass`\n * Added `TranslationExtractorPass`\n * Added `TranslatorPass`\n * Added `TranslationReader` and `TranslationReaderInterface`\n * Added `<notes>` section to the Xliff 2.0 dumper.\n * Improved Xliff 2.0 loader to load `<notes>` section.\n * Added `TranslationWriterInterface`\n * Deprecated `TranslationWriter::writeTranslations` in favor of `TranslationWriter::write`\n * added support for adding custom message formatter and decoupling the default one.\n * Added `PhpExtractor`\n * Added `PhpStringTokenParser`\n\n3.2.0\n-----\n\n * Added support for escaping `|` in plural translations with double pipe.\n\n3.1.0\n-----\n\n * Deprecated the backup feature of the file dumper classes.\n\n3.0.0\n-----\n\n * removed `FileDumper::format()` method.\n * Changed the visibility of the locale property in `Translator` from protected to private.\n\n2.8.0\n-----\n\n * deprecated FileDumper::format(), overwrite FileDumper::formatCatalogue() instead.\n * deprecated Translator::getMessages(), rely on TranslatorBagInterface::getCatalogue() instead.\n * added `FileDumper::formatCatalogue` which allows format the catalogue without dumping it into file.\n * added option `json_encoding` to JsonFileDumper\n * added options `as_tree`, `inline` to YamlFileDumper\n * added support for XLIFF 2.0.\n * added support for XLIFF target and tool attributes.\n * added message parameters to DataCollectorTranslator.\n * [DEPRECATION] The `DiffOperation` class has been deprecated and\n   will be removed in Symfony 3.0, since its operation has nothing to do with 'diff',\n   so the class name is misleading. The `TargetOperation` class should be used for\n   this use-case instead.\n\n2.7.0\n-----\n\n * added DataCollectorTranslator for collecting the translated messages.\n\n2.6.0\n-----\n\n * added possibility to cache catalogues\n * added TranslatorBagInterface\n * added LoggingTranslator\n * added Translator::getMessages() for retrieving the message catalogue as an array\n\n2.5.0\n-----\n\n * added relative file path template to the file dumpers\n * added optional backup to the file dumpers\n * changed IcuResFileDumper to extend FileDumper\n\n2.3.0\n-----\n\n * added classes to make operations on catalogues (like making a diff or a merge on 2 catalogues)\n * added Translator::getFallbackLocales()\n * deprecated Translator::setFallbackLocale() in favor of the new Translator::setFallbackLocales() method\n\n2.2.0\n-----\n\n * QtTranslationsLoader class renamed to QtFileLoader. QtTranslationsLoader is deprecated and will be removed in 2.3.\n * [BC BREAK] uniformized the exception thrown by the load() method when an error occurs. The load() method now\n   throws Symfony\\Component\\Translation\\Exception\\NotFoundResourceException when a resource cannot be found\n   and Symfony\\Component\\Translation\\Exception\\InvalidResourceException when a resource is invalid.\n * changed the exception class thrown by some load() methods from \\RuntimeException to \\InvalidArgumentException\n   (IcuDatFileLoader, IcuResFileLoader and QtFileLoader)\n\n2.1.0\n-----\n\n * added support for more than one fallback locale\n * added support for extracting translation messages from templates (Twig and PHP)\n * added dumpers for translation catalogs\n * added support for QT, gettext, and ResourceBundles\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Catalogue/AbstractOperation.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Catalogue;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\LogicException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\n\n/**\n * Base catalogues binary operation class.\n *\n * A catalogue binary operation performs operation on\n * source (the left argument) and target (the right argument) catalogues.\n *\n * @author Jean-François Simon <contact@jfsimon.fr>\n */\nabstract class AbstractOperation implements OperationInterface\n{\n    public const OBSOLETE_BATCH = 'obsolete';\n    public const NEW_BATCH = 'new';\n    public const ALL_BATCH = 'all';\n\n    protected $source;\n    protected $target;\n    protected $result;\n\n    /**\n     * This array stores 'all', 'new' and 'obsolete' messages for all valid domains.\n     *\n     * The data structure of this array is as follows:\n     *\n     *     [\n     *         'domain 1' => [\n     *             'all' => [...],\n     *             'new' => [...],\n     *             'obsolete' => [...]\n     *         ],\n     *         'domain 2' => [\n     *             'all' => [...],\n     *             'new' => [...],\n     *             'obsolete' => [...]\n     *         ],\n     *         ...\n     *     ]\n     *\n     * @var array The array that stores 'all', 'new' and 'obsolete' messages\n     */\n    protected $messages;\n\n    private array $domains;\n\n    /**\n     * @throws LogicException\n     */\n    public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)\n    {\n        if ($source->getLocale() !== $target->getLocale()) {\n            throw new LogicException('Operated catalogues must belong to the same locale.');\n        }\n\n        $this->source = $source;\n        $this->target = $target;\n        $this->result = new MessageCatalogue($source->getLocale());\n        $this->messages = [];\n    }\n\n    public function getDomains(): array\n    {\n        if (!isset($this->domains)) {\n            $domains = [];\n            foreach ([$this->source, $this->target] as $catalogue) {\n                foreach ($catalogue->getDomains() as $domain) {\n                    $domains[$domain] = $domain;\n\n                    if ($catalogue->all($domainIcu = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX)) {\n                        $domains[$domainIcu] = $domainIcu;\n                    }\n                }\n            }\n\n            $this->domains = array_values($domains);\n        }\n\n        return $this->domains;\n    }\n\n    public function getMessages(string $domain): array\n    {\n        if (!\\in_array($domain, $this->getDomains())) {\n            throw new InvalidArgumentException(sprintf('Invalid domain: \"%s\".', $domain));\n        }\n\n        if (!isset($this->messages[$domain][self::ALL_BATCH])) {\n            $this->processDomain($domain);\n        }\n\n        return $this->messages[$domain][self::ALL_BATCH];\n    }\n\n    public function getNewMessages(string $domain): array\n    {\n        if (!\\in_array($domain, $this->getDomains())) {\n            throw new InvalidArgumentException(sprintf('Invalid domain: \"%s\".', $domain));\n        }\n\n        if (!isset($this->messages[$domain][self::NEW_BATCH])) {\n            $this->processDomain($domain);\n        }\n\n        return $this->messages[$domain][self::NEW_BATCH];\n    }\n\n    public function getObsoleteMessages(string $domain): array\n    {\n        if (!\\in_array($domain, $this->getDomains())) {\n            throw new InvalidArgumentException(sprintf('Invalid domain: \"%s\".', $domain));\n        }\n\n        if (!isset($this->messages[$domain][self::OBSOLETE_BATCH])) {\n            $this->processDomain($domain);\n        }\n\n        return $this->messages[$domain][self::OBSOLETE_BATCH];\n    }\n\n    public function getResult(): MessageCatalogueInterface\n    {\n        foreach ($this->getDomains() as $domain) {\n            if (!isset($this->messages[$domain])) {\n                $this->processDomain($domain);\n            }\n        }\n\n        return $this->result;\n    }\n\n    /**\n     * @param self::*_BATCH $batch\n     */\n    public function moveMessagesToIntlDomainsIfPossible(string $batch = self::ALL_BATCH): void\n    {\n        // If MessageFormatter class does not exists, intl domains are not supported.\n        if (!class_exists(\\MessageFormatter::class)) {\n            return;\n        }\n\n        foreach ($this->getDomains() as $domain) {\n            $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;\n            $messages = match ($batch) {\n                self::OBSOLETE_BATCH => $this->getObsoleteMessages($domain),\n                self::NEW_BATCH => $this->getNewMessages($domain),\n                self::ALL_BATCH => $this->getMessages($domain),\n                default => throw new \\InvalidArgumentException(sprintf('$batch argument must be one of [\"%s\", \"%s\", \"%s\"].', self::ALL_BATCH, self::NEW_BATCH, self::OBSOLETE_BATCH)),\n            };\n\n            if (!$messages || (!$this->source->all($intlDomain) && $this->source->all($domain))) {\n                continue;\n            }\n\n            $result = $this->getResult();\n            $allIntlMessages = $result->all($intlDomain);\n            $currentMessages = array_diff_key($messages, $result->all($domain));\n            $result->replace($currentMessages, $domain);\n            $result->replace($allIntlMessages + $messages, $intlDomain);\n        }\n    }\n\n    /**\n     * Performs operation on source and target catalogues for the given domain and\n     * stores the results.\n     *\n     * @param string $domain The domain which the operation will be performed for\n     *\n     * @return void\n     */\n    abstract protected function processDomain(string $domain);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Catalogue/MergeOperation.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Catalogue;\n\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\n\n/**\n * Merge operation between two catalogues as follows:\n * all = source ∪ target = {x: x ∈ source ∨ x ∈ target}\n * new = all ∖ source = {x: x ∈ target ∧ x ∉ source}\n * obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ source ∧ x ∉ target} = ∅\n * Basically, the result contains messages from both catalogues.\n *\n * @author Jean-François Simon <contact@jfsimon.fr>\n */\nclass MergeOperation extends AbstractOperation\n{\n    /**\n     * @return void\n     */\n    protected function processDomain(string $domain)\n    {\n        $this->messages[$domain] = [\n            'all' => [],\n            'new' => [],\n            'obsolete' => [],\n        ];\n        $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;\n\n        foreach ($this->target->getCatalogueMetadata('', $domain) ?? [] as $key => $value) {\n            if (null === $this->result->getCatalogueMetadata($key, $domain)) {\n                $this->result->setCatalogueMetadata($key, $value, $domain);\n            }\n        }\n\n        foreach ($this->target->getCatalogueMetadata('', $intlDomain) ?? [] as $key => $value) {\n            if (null === $this->result->getCatalogueMetadata($key, $intlDomain)) {\n                $this->result->setCatalogueMetadata($key, $value, $intlDomain);\n            }\n        }\n\n        foreach ($this->source->all($domain) as $id => $message) {\n            $this->messages[$domain]['all'][$id] = $message;\n            $d = $this->source->defines($id, $intlDomain) ? $intlDomain : $domain;\n            $this->result->add([$id => $message], $d);\n            if (null !== $keyMetadata = $this->source->getMetadata($id, $d)) {\n                $this->result->setMetadata($id, $keyMetadata, $d);\n            }\n        }\n\n        foreach ($this->target->all($domain) as $id => $message) {\n            if (!$this->source->has($id, $domain)) {\n                $this->messages[$domain]['all'][$id] = $message;\n                $this->messages[$domain]['new'][$id] = $message;\n                $d = $this->target->defines($id, $intlDomain) ? $intlDomain : $domain;\n                $this->result->add([$id => $message], $d);\n                if (null !== $keyMetadata = $this->target->getMetadata($id, $d)) {\n                    $this->result->setMetadata($id, $keyMetadata, $d);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Catalogue/OperationInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Catalogue;\n\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\n\n/**\n * Represents an operation on catalogue(s).\n *\n * An instance of this interface performs an operation on one or more catalogues and\n * stores intermediate and final results of the operation.\n *\n * The first catalogue in its argument(s) is called the 'source catalogue' or 'source' and\n * the following results are stored:\n *\n * Messages: also called 'all', are valid messages for the given domain after the operation is performed.\n *\n * New Messages: also called 'new' (new = all ∖ source = {x: x ∈ all ∧ x ∉ source}).\n *\n * Obsolete Messages: also called 'obsolete' (obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ all}).\n *\n * Result: also called 'result', is the resulting catalogue for the given domain that holds the same messages as 'all'.\n *\n * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>\n */\ninterface OperationInterface\n{\n    /**\n     * Returns domains affected by operation.\n     */\n    public function getDomains(): array;\n\n    /**\n     * Returns all valid messages ('all') after operation.\n     */\n    public function getMessages(string $domain): array;\n\n    /**\n     * Returns new messages ('new') after operation.\n     */\n    public function getNewMessages(string $domain): array;\n\n    /**\n     * Returns obsolete messages ('obsolete') after operation.\n     */\n    public function getObsoleteMessages(string $domain): array;\n\n    /**\n     * Returns resulting catalogue ('result').\n     */\n    public function getResult(): MessageCatalogueInterface;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Catalogue/TargetOperation.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Catalogue;\n\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\n\n/**\n * Target operation between two catalogues:\n * intersection = source ∩ target = {x: x ∈ source ∧ x ∈ target}\n * all = intersection ∪ (target ∖ intersection) = target\n * new = all ∖ source = {x: x ∈ target ∧ x ∉ source}\n * obsolete = source ∖ all = source ∖ target = {x: x ∈ source ∧ x ∉ target}\n * Basically, the result contains messages from the target catalogue.\n *\n * @author Michael Lee <michael.lee@zerustech.com>\n */\nclass TargetOperation extends AbstractOperation\n{\n    /**\n     * @return void\n     */\n    protected function processDomain(string $domain)\n    {\n        $this->messages[$domain] = [\n            'all' => [],\n            'new' => [],\n            'obsolete' => [],\n        ];\n        $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;\n\n        foreach ($this->target->getCatalogueMetadata('', $domain) ?? [] as $key => $value) {\n            if (null === $this->result->getCatalogueMetadata($key, $domain)) {\n                $this->result->setCatalogueMetadata($key, $value, $domain);\n            }\n        }\n\n        foreach ($this->target->getCatalogueMetadata('', $intlDomain) ?? [] as $key => $value) {\n            if (null === $this->result->getCatalogueMetadata($key, $intlDomain)) {\n                $this->result->setCatalogueMetadata($key, $value, $intlDomain);\n            }\n        }\n\n        // For 'all' messages, the code can't be simplified as ``$this->messages[$domain]['all'] = $target->all($domain);``,\n        // because doing so will drop messages like {x: x ∈ source ∧ x ∉ target.all ∧ x ∈ target.fallback}\n        //\n        // For 'new' messages, the code can't be simplified as ``array_diff_assoc($this->target->all($domain), $this->source->all($domain));``\n        // because doing so will not exclude messages like {x: x ∈ target ∧ x ∉ source.all ∧ x ∈ source.fallback}\n        //\n        // For 'obsolete' messages, the code can't be simplified as ``array_diff_assoc($this->source->all($domain), $this->target->all($domain))``\n        // because doing so will not exclude messages like {x: x ∈ source ∧ x ∉ target.all ∧ x ∈ target.fallback}\n\n        foreach ($this->source->all($domain) as $id => $message) {\n            if ($this->target->has($id, $domain)) {\n                $this->messages[$domain]['all'][$id] = $message;\n                $d = $this->source->defines($id, $intlDomain) ? $intlDomain : $domain;\n                $this->result->add([$id => $message], $d);\n                if (null !== $keyMetadata = $this->source->getMetadata($id, $d)) {\n                    $this->result->setMetadata($id, $keyMetadata, $d);\n                }\n            } else {\n                $this->messages[$domain]['obsolete'][$id] = $message;\n            }\n        }\n\n        foreach ($this->target->all($domain) as $id => $message) {\n            if (!$this->source->has($id, $domain)) {\n                $this->messages[$domain]['all'][$id] = $message;\n                $this->messages[$domain]['new'][$id] = $message;\n                $d = $this->target->defines($id, $intlDomain) ? $intlDomain : $domain;\n                $this->result->add([$id => $message], $d);\n                if (null !== $keyMetadata = $this->target->getMetadata($id, $d)) {\n                    $this->result->setMetadata($id, $keyMetadata, $d);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/CatalogueMetadataAwareInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\n/**\n * This interface is used to get, set, and delete metadata about the Catalogue.\n *\n * @author Hugo Alliaume <hugo@alliau.me>\n */\ninterface CatalogueMetadataAwareInterface\n{\n    /**\n     * Gets catalogue metadata for the given domain and key.\n     *\n     * Passing an empty domain will return an array with all catalogue metadata indexed by\n     * domain and then by key. Passing an empty key will return an array with all\n     * catalogue metadata for the given domain.\n     *\n     * @return mixed The value that was set or an array with the domains/keys or null\n     */\n    public function getCatalogueMetadata(string $key = '', string $domain = 'messages'): mixed;\n\n    /**\n     * Adds catalogue metadata to a message domain.\n     *\n     * @return void\n     */\n    public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages');\n\n    /**\n     * Deletes catalogue metadata for the given key and domain.\n     *\n     * Passing an empty domain will delete all catalogue metadata. Passing an empty key will\n     * delete all metadata for the given domain.\n     *\n     * @return void\n     */\n    public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages');\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Command/TranslationPullCommand.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Command;\n\nuse Symfony\\Component\\Console\\Attribute\\AsCommand;\nuse Symfony\\Component\\Console\\Command\\Command;\nuse Symfony\\Component\\Console\\Completion\\CompletionInput;\nuse Symfony\\Component\\Console\\Completion\\CompletionSuggestions;\nuse Symfony\\Component\\Console\\Input\\InputArgument;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\nuse Symfony\\Component\\Console\\Style\\SymfonyStyle;\nuse Symfony\\Component\\Translation\\Catalogue\\TargetOperation;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\nuse Symfony\\Component\\Translation\\Provider\\TranslationProviderCollection;\nuse Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface;\nuse Symfony\\Component\\Translation\\Writer\\TranslationWriterInterface;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\n#[AsCommand(name: 'translation:pull', description: 'Pull translations from a given provider.')]\nfinal class TranslationPullCommand extends Command\n{\n    use TranslationTrait;\n\n    private TranslationProviderCollection $providerCollection;\n    private TranslationWriterInterface $writer;\n    private TranslationReaderInterface $reader;\n    private string $defaultLocale;\n    private array $transPaths;\n    private array $enabledLocales;\n\n    public function __construct(TranslationProviderCollection $providerCollection, TranslationWriterInterface $writer, TranslationReaderInterface $reader, string $defaultLocale, array $transPaths = [], array $enabledLocales = [])\n    {\n        $this->providerCollection = $providerCollection;\n        $this->writer = $writer;\n        $this->reader = $reader;\n        $this->defaultLocale = $defaultLocale;\n        $this->transPaths = $transPaths;\n        $this->enabledLocales = $enabledLocales;\n\n        parent::__construct();\n    }\n\n    public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void\n    {\n        if ($input->mustSuggestArgumentValuesFor('provider')) {\n            $suggestions->suggestValues($this->providerCollection->keys());\n\n            return;\n        }\n\n        if ($input->mustSuggestOptionValuesFor('domains')) {\n            $provider = $this->providerCollection->get($input->getArgument('provider'));\n\n            if (method_exists($provider, 'getDomains')) {\n                $suggestions->suggestValues($provider->getDomains());\n            }\n\n            return;\n        }\n\n        if ($input->mustSuggestOptionValuesFor('locales')) {\n            $suggestions->suggestValues($this->enabledLocales);\n\n            return;\n        }\n\n        if ($input->mustSuggestOptionValuesFor('format')) {\n            $suggestions->suggestValues(['php', 'xlf', 'xlf12', 'xlf20', 'po', 'mo', 'yml', 'yaml', 'ts', 'csv', 'json', 'ini', 'res']);\n        }\n    }\n\n    protected function configure(): void\n    {\n        $keys = $this->providerCollection->keys();\n        $defaultProvider = 1 === \\count($keys) ? $keys[0] : null;\n\n        $this\n            ->setDefinition([\n                new InputArgument('provider', null !== $defaultProvider ? InputArgument::OPTIONAL : InputArgument::REQUIRED, 'The provider to pull translations from.', $defaultProvider),\n                new InputOption('force', null, InputOption::VALUE_NONE, 'Override existing translations with provider ones (it will delete not synchronized messages).'),\n                new InputOption('intl-icu', null, InputOption::VALUE_NONE, 'Associated to --force option, it will write messages in \"%domain%+intl-icu.%locale%.xlf\" files.'),\n                new InputOption('domains', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'Specify the domains to pull.'),\n                new InputOption('locales', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'Specify the locales to pull.'),\n                new InputOption('format', null, InputOption::VALUE_OPTIONAL, 'Override the default output format.', 'xlf12'),\n                new InputOption('as-tree', null, InputOption::VALUE_OPTIONAL, 'Write messages as a tree-like structure. Needs --format=yaml. The given value defines the level where to switch to inline YAML'),\n            ])\n            ->setHelp(<<<'EOF'\nThe <info>%command.name%</> command pulls translations from the given provider. Only\nnew translations are pulled, existing ones are not overwritten.\n\nYou can overwrite existing translations (and remove the missing ones on local side) by using the <comment>--force</> flag:\n\n  <info>php %command.full_name% --force provider</>\n\nFull example:\n\n  <info>php %command.full_name% provider --force --domains=messages --domains=validators --locales=en</>\n\nThis command pulls all translations associated with the <comment>messages</> and <comment>validators</> domains for the <comment>en</> locale.\nLocal translations for the specified domains and locale are deleted if they're not present on the provider and overwritten if it's the case.\nLocal translations for others domains and locales are ignored.\nEOF\n            )\n        ;\n    }\n\n    protected function execute(InputInterface $input, OutputInterface $output): int\n    {\n        $io = new SymfonyStyle($input, $output);\n\n        $provider = $this->providerCollection->get($input->getArgument('provider'));\n        $force = $input->getOption('force');\n        $intlIcu = $input->getOption('intl-icu');\n        $locales = $input->getOption('locales') ?: $this->enabledLocales;\n        $domains = $input->getOption('domains');\n        $format = $input->getOption('format');\n        $asTree = (int) $input->getOption('as-tree');\n        $xliffVersion = '1.2';\n\n        if ($intlIcu && !$force) {\n            $io->note('--intl-icu option only has an effect when used with --force. Here, it will be ignored.');\n        }\n\n        switch ($format) {\n            case 'xlf20': $xliffVersion = '2.0';\n                // no break\n            case 'xlf12': $format = 'xlf';\n        }\n\n        $writeOptions = [\n            'path' => end($this->transPaths),\n            'xliff_version' => $xliffVersion,\n            'default_locale' => $this->defaultLocale,\n            'as_tree' => (bool) $asTree,\n            'inline' => $asTree,\n        ];\n\n        if (!$domains) {\n            $domains = $provider->getDomains();\n        }\n\n        $providerTranslations = $provider->read($domains, $locales);\n\n        if ($force) {\n            foreach ($providerTranslations->getCatalogues() as $catalogue) {\n                $operation = new TargetOperation(new MessageCatalogue($catalogue->getLocale()), $catalogue);\n                if ($intlIcu) {\n                    $operation->moveMessagesToIntlDomainsIfPossible();\n                }\n                $this->writer->write($operation->getResult(), $format, $writeOptions);\n            }\n\n            $io->success(sprintf('Local translations has been updated from \"%s\" (for \"%s\" locale(s), and \"%s\" domain(s)).', parse_url($provider, \\PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains)));\n\n            return 0;\n        }\n\n        $localTranslations = $this->readLocalTranslations($locales, $domains, $this->transPaths);\n\n        // Append pulled translations to local ones.\n        $localTranslations->addBag($providerTranslations->diff($localTranslations));\n\n        foreach ($localTranslations->getCatalogues() as $catalogue) {\n            $this->writer->write($catalogue, $format, $writeOptions);\n        }\n\n        $io->success(sprintf('New translations from \"%s\" has been written locally (for \"%s\" locale(s), and \"%s\" domain(s)).', parse_url($provider, \\PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains)));\n\n        return 0;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Command/TranslationPushCommand.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Command;\n\nuse Symfony\\Component\\Console\\Attribute\\AsCommand;\nuse Symfony\\Component\\Console\\Command\\Command;\nuse Symfony\\Component\\Console\\Completion\\CompletionInput;\nuse Symfony\\Component\\Console\\Completion\\CompletionSuggestions;\nuse Symfony\\Component\\Console\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Console\\Input\\InputArgument;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\nuse Symfony\\Component\\Console\\Style\\SymfonyStyle;\nuse Symfony\\Component\\Translation\\Provider\\FilteringProvider;\nuse Symfony\\Component\\Translation\\Provider\\TranslationProviderCollection;\nuse Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface;\nuse Symfony\\Component\\Translation\\TranslatorBag;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\n#[AsCommand(name: 'translation:push', description: 'Push translations to a given provider.')]\nfinal class TranslationPushCommand extends Command\n{\n    use TranslationTrait;\n\n    private TranslationProviderCollection $providers;\n    private TranslationReaderInterface $reader;\n    private array $transPaths;\n    private array $enabledLocales;\n\n    public function __construct(TranslationProviderCollection $providers, TranslationReaderInterface $reader, array $transPaths = [], array $enabledLocales = [])\n    {\n        $this->providers = $providers;\n        $this->reader = $reader;\n        $this->transPaths = $transPaths;\n        $this->enabledLocales = $enabledLocales;\n\n        parent::__construct();\n    }\n\n    public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void\n    {\n        if ($input->mustSuggestArgumentValuesFor('provider')) {\n            $suggestions->suggestValues($this->providers->keys());\n\n            return;\n        }\n\n        if ($input->mustSuggestOptionValuesFor('domains')) {\n            $provider = $this->providers->get($input->getArgument('provider'));\n\n            if ($provider && method_exists($provider, 'getDomains')) {\n                $domains = $provider->getDomains();\n                $suggestions->suggestValues($domains);\n            }\n\n            return;\n        }\n\n        if ($input->mustSuggestOptionValuesFor('locales')) {\n            $suggestions->suggestValues($this->enabledLocales);\n        }\n    }\n\n    protected function configure(): void\n    {\n        $keys = $this->providers->keys();\n        $defaultProvider = 1 === \\count($keys) ? $keys[0] : null;\n\n        $this\n            ->setDefinition([\n                new InputArgument('provider', null !== $defaultProvider ? InputArgument::OPTIONAL : InputArgument::REQUIRED, 'The provider to push translations to.', $defaultProvider),\n                new InputOption('force', null, InputOption::VALUE_NONE, 'Override existing translations with local ones (it will delete not synchronized messages).'),\n                new InputOption('delete-missing', null, InputOption::VALUE_NONE, 'Delete translations available on provider but not locally.'),\n                new InputOption('domains', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'Specify the domains to push.'),\n                new InputOption('locales', null, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, 'Specify the locales to push.', $this->enabledLocales),\n            ])\n            ->setHelp(<<<'EOF'\nThe <info>%command.name%</> command pushes translations to the given provider. Only new\ntranslations are pushed, existing ones are not overwritten.\n\nYou can overwrite existing translations by using the <comment>--force</> flag:\n\n  <info>php %command.full_name% --force provider</>\n\nYou can delete provider translations which are not present locally by using the <comment>--delete-missing</> flag:\n\n  <info>php %command.full_name% --delete-missing provider</>\n\nFull example:\n\n  <info>php %command.full_name% provider --force --delete-missing --domains=messages --domains=validators --locales=en</>\n\nThis command pushes all translations associated with the <comment>messages</> and <comment>validators</> domains for the <comment>en</> locale.\nProvider translations for the specified domains and locale are deleted if they're not present locally and overwritten if it's the case.\nProvider translations for others domains and locales are ignored.\nEOF\n            )\n        ;\n    }\n\n    protected function execute(InputInterface $input, OutputInterface $output): int\n    {\n        $provider = $this->providers->get($input->getArgument('provider'));\n\n        if (!$this->enabledLocales) {\n            throw new InvalidArgumentException(sprintf('You must define \"framework.enabled_locales\" or \"framework.translator.providers.%s.locales\" config key in order to work with translation providers.', parse_url($provider, \\PHP_URL_SCHEME)));\n        }\n\n        $io = new SymfonyStyle($input, $output);\n        $domains = $input->getOption('domains');\n        $locales = $input->getOption('locales');\n        $force = $input->getOption('force');\n        $deleteMissing = $input->getOption('delete-missing');\n\n        if (!$domains && $provider instanceof FilteringProvider) {\n            $domains = $provider->getDomains();\n        }\n\n        // Reading local translations must be done after retrieving the domains from the provider\n        // in order to manage only translations from configured domains\n        $localTranslations = $this->readLocalTranslations($locales, $domains, $this->transPaths);\n\n        if (!$domains) {\n            $domains = $this->getDomainsFromTranslatorBag($localTranslations);\n        }\n\n        if (!$deleteMissing && $force) {\n            $provider->write($localTranslations);\n\n            $io->success(sprintf('All local translations has been sent to \"%s\" (for \"%s\" locale(s), and \"%s\" domain(s)).', parse_url($provider, \\PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains)));\n\n            return 0;\n        }\n\n        $providerTranslations = $provider->read($domains, $locales);\n\n        if ($deleteMissing) {\n            $provider->delete($providerTranslations->diff($localTranslations));\n\n            $io->success(sprintf('Missing translations on \"%s\" has been deleted (for \"%s\" locale(s), and \"%s\" domain(s)).', parse_url($provider, \\PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains)));\n\n            // Read provider translations again, after missing translations deletion,\n            // to avoid push freshly deleted translations.\n            $providerTranslations = $provider->read($domains, $locales);\n        }\n\n        $translationsToWrite = $localTranslations->diff($providerTranslations);\n\n        if ($force) {\n            $translationsToWrite->addBag($localTranslations->intersect($providerTranslations));\n        }\n\n        $provider->write($translationsToWrite);\n\n        $io->success(sprintf('%s local translations has been sent to \"%s\" (for \"%s\" locale(s), and \"%s\" domain(s)).', $force ? 'All' : 'New', parse_url($provider, \\PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains)));\n\n        return 0;\n    }\n\n    private function getDomainsFromTranslatorBag(TranslatorBag $translatorBag): array\n    {\n        $domains = [];\n\n        foreach ($translatorBag->getCatalogues() as $catalogue) {\n            $domains += $catalogue->getDomains();\n        }\n\n        return array_unique($domains);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Command/TranslationTrait.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Command;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\nuse Symfony\\Component\\Translation\\MessageCatalogueInterface;\nuse Symfony\\Component\\Translation\\TranslatorBag;\n\n/**\n * @internal\n */\ntrait TranslationTrait\n{\n    private function readLocalTranslations(array $locales, array $domains, array $transPaths): TranslatorBag\n    {\n        $bag = new TranslatorBag();\n\n        foreach ($locales as $locale) {\n            $catalogue = new MessageCatalogue($locale);\n            foreach ($transPaths as $path) {\n                $this->reader->read($path, $catalogue);\n            }\n\n            if ($domains) {\n                foreach ($domains as $domain) {\n                    $bag->addCatalogue($this->filterCatalogue($catalogue, $domain));\n                }\n            } else {\n                $bag->addCatalogue($catalogue);\n            }\n        }\n\n        return $bag;\n    }\n\n    private function filterCatalogue(MessageCatalogue $catalogue, string $domain): MessageCatalogue\n    {\n        $filteredCatalogue = new MessageCatalogue($catalogue->getLocale());\n\n        // extract intl-icu messages only\n        $intlDomain = $domain.MessageCatalogueInterface::INTL_DOMAIN_SUFFIX;\n        if ($intlMessages = $catalogue->all($intlDomain)) {\n            $filteredCatalogue->add($intlMessages, $intlDomain);\n        }\n\n        // extract all messages and subtract intl-icu messages\n        if ($messages = array_diff($catalogue->all($domain), $intlMessages)) {\n            $filteredCatalogue->add($messages, $domain);\n        }\n        foreach ($catalogue->getResources() as $resource) {\n            $filteredCatalogue->addResource($resource);\n        }\n\n        if ($metadata = $catalogue->getMetadata('', $intlDomain)) {\n            foreach ($metadata as $k => $v) {\n                $filteredCatalogue->setMetadata($k, $v, $intlDomain);\n            }\n        }\n\n        if ($metadata = $catalogue->getMetadata('', $domain)) {\n            foreach ($metadata as $k => $v) {\n                $filteredCatalogue->setMetadata($k, $v, $domain);\n            }\n        }\n\n        return $filteredCatalogue;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Command/XliffLintCommand.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Command;\n\nuse Symfony\\Component\\Console\\Attribute\\AsCommand;\nuse Symfony\\Component\\Console\\CI\\GithubActionReporter;\nuse Symfony\\Component\\Console\\Command\\Command;\nuse Symfony\\Component\\Console\\Completion\\CompletionInput;\nuse Symfony\\Component\\Console\\Completion\\CompletionSuggestions;\nuse Symfony\\Component\\Console\\Exception\\RuntimeException;\nuse Symfony\\Component\\Console\\Input\\InputArgument;\nuse Symfony\\Component\\Console\\Input\\InputInterface;\nuse Symfony\\Component\\Console\\Input\\InputOption;\nuse Symfony\\Component\\Console\\Output\\OutputInterface;\nuse Symfony\\Component\\Console\\Style\\SymfonyStyle;\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Util\\XliffUtils;\n\n/**\n * Validates XLIFF files syntax and outputs encountered errors.\n *\n * @author Grégoire Pineau <lyrixx@lyrixx.info>\n * @author Robin Chalas <robin.chalas@gmail.com>\n * @author Javier Eguiluz <javier.eguiluz@gmail.com>\n */\n#[AsCommand(name: 'lint:xliff', description: 'Lint an XLIFF file and outputs encountered errors')]\nclass XliffLintCommand extends Command\n{\n    private string $format;\n    private bool $displayCorrectFiles;\n    private ?\\Closure $directoryIteratorProvider;\n    private ?\\Closure $isReadableProvider;\n    private bool $requireStrictFileNames;\n\n    public function __construct(?string $name = null, ?callable $directoryIteratorProvider = null, ?callable $isReadableProvider = null, bool $requireStrictFileNames = true)\n    {\n        parent::__construct($name);\n\n        $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...);\n        $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...);\n        $this->requireStrictFileNames = $requireStrictFileNames;\n    }\n\n    /**\n     * @return void\n     */\n    protected function configure()\n    {\n        $this\n            ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or \"-\" for reading from STDIN')\n            ->addOption('format', null, InputOption::VALUE_REQUIRED, sprintf('The output format (\"%s\")', implode('\", \"', $this->getAvailableFormatOptions())))\n            ->setHelp(<<<EOF\nThe <info>%command.name%</info> command lints an XLIFF file and outputs to STDOUT\nthe first encountered syntax error.\n\nYou can validates XLIFF contents passed from STDIN:\n\n  <info>cat filename | php %command.full_name% -</info>\n\nYou can also validate the syntax of a file:\n\n  <info>php %command.full_name% filename</info>\n\nOr of a whole directory:\n\n  <info>php %command.full_name% dirname</info>\n  <info>php %command.full_name% dirname --format=json</info>\n\nEOF\n            )\n        ;\n    }\n\n    protected function execute(InputInterface $input, OutputInterface $output): int\n    {\n        $io = new SymfonyStyle($input, $output);\n        $filenames = (array) $input->getArgument('filename');\n        $this->format = $input->getOption('format') ?? (GithubActionReporter::isGithubActionEnvironment() ? 'github' : 'txt');\n        $this->displayCorrectFiles = $output->isVerbose();\n\n        if (['-'] === $filenames) {\n            return $this->display($io, [$this->validate(file_get_contents('php://stdin'))]);\n        }\n\n        if (!$filenames) {\n            throw new RuntimeException('Please provide a filename or pipe file content to STDIN.');\n        }\n\n        $filesInfo = [];\n        foreach ($filenames as $filename) {\n            if (!$this->isReadable($filename)) {\n                throw new RuntimeException(sprintf('File or directory \"%s\" is not readable.', $filename));\n            }\n\n            foreach ($this->getFiles($filename) as $file) {\n                $filesInfo[] = $this->validate(file_get_contents($file), $file);\n            }\n        }\n\n        return $this->display($io, $filesInfo);\n    }\n\n    private function validate(string $content, ?string $file = null): array\n    {\n        $errors = [];\n\n        // Avoid: Warning DOMDocument::loadXML(): Empty string supplied as input\n        if ('' === trim($content)) {\n            return ['file' => $file, 'valid' => true];\n        }\n\n        $internal = libxml_use_internal_errors(true);\n\n        $document = new \\DOMDocument();\n        $document->loadXML($content);\n\n        if (null !== $targetLanguage = $this->getTargetLanguageFromFile($document)) {\n            $normalizedLocalePattern = sprintf('(%s|%s)', preg_quote($targetLanguage, '/'), preg_quote(str_replace('-', '_', $targetLanguage), '/'));\n            // strict file names require translation files to be named '____.locale.xlf'\n            // otherwise, both '____.locale.xlf' and 'locale.____.xlf' are allowed\n            // also, the regexp matching must be case-insensitive, as defined for 'target-language' values\n            // http://docs.oasis-open.org/xliff/v1.2/os/xliff-core.html#target-language\n            $expectedFilenamePattern = $this->requireStrictFileNames ? sprintf('/^.*\\.(?i:%s)\\.(?:xlf|xliff)/', $normalizedLocalePattern) : sprintf('/^(?:.*\\.(?i:%s)|(?i:%s)\\..*)\\.(?:xlf|xliff)/', $normalizedLocalePattern, $normalizedLocalePattern);\n\n            if (0 === preg_match($expectedFilenamePattern, basename($file))) {\n                $errors[] = [\n                    'line' => -1,\n                    'column' => -1,\n                    'message' => sprintf('There is a mismatch between the language included in the file name (\"%s\") and the \"%s\" value used in the \"target-language\" attribute of the file.', basename($file), $targetLanguage),\n                ];\n            }\n        }\n\n        foreach (XliffUtils::validateSchema($document) as $xmlError) {\n            $errors[] = [\n                'line' => $xmlError['line'],\n                'column' => $xmlError['column'],\n                'message' => $xmlError['message'],\n            ];\n        }\n\n        libxml_clear_errors();\n        libxml_use_internal_errors($internal);\n\n        return ['file' => $file, 'valid' => 0 === \\count($errors), 'messages' => $errors];\n    }\n\n    private function display(SymfonyStyle $io, array $files): int\n    {\n        return match ($this->format) {\n            'txt' => $this->displayTxt($io, $files),\n            'json' => $this->displayJson($io, $files),\n            'github' => $this->displayTxt($io, $files, true),\n            default => throw new InvalidArgumentException(sprintf('Supported formats are \"%s\".', implode('\", \"', $this->getAvailableFormatOptions()))),\n        };\n    }\n\n    private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGithubAnnotations = false): int\n    {\n        $countFiles = \\count($filesInfo);\n        $erroredFiles = 0;\n        $githubReporter = $errorAsGithubAnnotations ? new GithubActionReporter($io) : null;\n\n        foreach ($filesInfo as $info) {\n            if ($info['valid'] && $this->displayCorrectFiles) {\n                $io->comment('<info>OK</info>'.($info['file'] ? sprintf(' in %s', $info['file']) : ''));\n            } elseif (!$info['valid']) {\n                ++$erroredFiles;\n                $io->text('<error> ERROR </error>'.($info['file'] ? sprintf(' in %s', $info['file']) : ''));\n                $io->listing(array_map(function ($error) use ($info, $githubReporter) {\n                    // general document errors have a '-1' line number\n                    $line = -1 === $error['line'] ? null : $error['line'];\n\n                    $githubReporter?->error($error['message'], $info['file'], $line, null !== $line ? $error['column'] : null);\n\n                    return null === $line ? $error['message'] : sprintf('Line %d, Column %d: %s', $line, $error['column'], $error['message']);\n                }, $info['messages']));\n            }\n        }\n\n        if (0 === $erroredFiles) {\n            $io->success(sprintf('All %d XLIFF files contain valid syntax.', $countFiles));\n        } else {\n            $io->warning(sprintf('%d XLIFF files have valid syntax and %d contain errors.', $countFiles - $erroredFiles, $erroredFiles));\n        }\n\n        return min($erroredFiles, 1);\n    }\n\n    private function displayJson(SymfonyStyle $io, array $filesInfo): int\n    {\n        $errors = 0;\n\n        array_walk($filesInfo, function (&$v) use (&$errors) {\n            $v['file'] = (string) $v['file'];\n            if (!$v['valid']) {\n                ++$errors;\n            }\n        });\n\n        $io->writeln(json_encode($filesInfo, \\JSON_PRETTY_PRINT | \\JSON_UNESCAPED_SLASHES));\n\n        return min($errors, 1);\n    }\n\n    /**\n     * @return iterable<\\SplFileInfo>\n     */\n    private function getFiles(string $fileOrDirectory): iterable\n    {\n        if (is_file($fileOrDirectory)) {\n            yield new \\SplFileInfo($fileOrDirectory);\n\n            return;\n        }\n\n        foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) {\n            if (!\\in_array($file->getExtension(), ['xlf', 'xliff'])) {\n                continue;\n            }\n\n            yield $file;\n        }\n    }\n\n    /**\n     * @return iterable<\\SplFileInfo>\n     */\n    private function getDirectoryIterator(string $directory): iterable\n    {\n        $default = fn ($directory) => new \\RecursiveIteratorIterator(\n            new \\RecursiveDirectoryIterator($directory, \\FilesystemIterator::SKIP_DOTS | \\FilesystemIterator::FOLLOW_SYMLINKS),\n            \\RecursiveIteratorIterator::LEAVES_ONLY\n        );\n\n        if (null !== $this->directoryIteratorProvider) {\n            return ($this->directoryIteratorProvider)($directory, $default);\n        }\n\n        return $default($directory);\n    }\n\n    private function isReadable(string $fileOrDirectory): bool\n    {\n        $default = fn ($fileOrDirectory) => is_readable($fileOrDirectory);\n\n        if (null !== $this->isReadableProvider) {\n            return ($this->isReadableProvider)($fileOrDirectory, $default);\n        }\n\n        return $default($fileOrDirectory);\n    }\n\n    private function getTargetLanguageFromFile(\\DOMDocument $xliffContents): ?string\n    {\n        foreach ($xliffContents->getElementsByTagName('file')[0]->attributes ?? [] as $attribute) {\n            if ('target-language' === $attribute->nodeName) {\n                return $attribute->nodeValue;\n            }\n        }\n\n        return null;\n    }\n\n    public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void\n    {\n        if ($input->mustSuggestOptionValuesFor('format')) {\n            $suggestions->suggestValues($this->getAvailableFormatOptions());\n        }\n    }\n\n    private function getAvailableFormatOptions(): array\n    {\n        return ['txt', 'json', 'github'];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DataCollector/TranslationDataCollector.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DataCollector;\n\nuse Symfony\\Component\\HttpFoundation\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\nuse Symfony\\Component\\HttpKernel\\DataCollector\\DataCollector;\nuse Symfony\\Component\\HttpKernel\\DataCollector\\LateDataCollectorInterface;\nuse Symfony\\Component\\Translation\\DataCollectorTranslator;\nuse Symfony\\Component\\VarDumper\\Cloner\\Data;\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n *\n * @final\n */\nclass TranslationDataCollector extends DataCollector implements LateDataCollectorInterface\n{\n    private DataCollectorTranslator $translator;\n\n    public function __construct(DataCollectorTranslator $translator)\n    {\n        $this->translator = $translator;\n    }\n\n    public function lateCollect(): void\n    {\n        $messages = $this->sanitizeCollectedMessages($this->translator->getCollectedMessages());\n\n        $this->data += $this->computeCount($messages);\n        $this->data['messages'] = $messages;\n\n        $this->data = $this->cloneVar($this->data);\n    }\n\n    public function collect(Request $request, Response $response, ?\\Throwable $exception = null): void\n    {\n        $this->data['locale'] = $this->translator->getLocale();\n        $this->data['fallback_locales'] = $this->translator->getFallbackLocales();\n    }\n\n    public function reset(): void\n    {\n        $this->data = [];\n    }\n\n    public function getMessages(): array|Data\n    {\n        return $this->data['messages'] ?? [];\n    }\n\n    public function getCountMissings(): int\n    {\n        return $this->data[DataCollectorTranslator::MESSAGE_MISSING] ?? 0;\n    }\n\n    public function getCountFallbacks(): int\n    {\n        return $this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK] ?? 0;\n    }\n\n    public function getCountDefines(): int\n    {\n        return $this->data[DataCollectorTranslator::MESSAGE_DEFINED] ?? 0;\n    }\n\n    public function getLocale(): ?string\n    {\n        return !empty($this->data['locale']) ? $this->data['locale'] : null;\n    }\n\n    /**\n     * @internal\n     */\n    public function getFallbackLocales(): Data|array\n    {\n        return (isset($this->data['fallback_locales']) && \\count($this->data['fallback_locales']) > 0) ? $this->data['fallback_locales'] : [];\n    }\n\n    public function getName(): string\n    {\n        return 'translation';\n    }\n\n    private function sanitizeCollectedMessages(array $messages): array\n    {\n        $result = [];\n        foreach ($messages as $key => $message) {\n            $messageId = $message['locale'].$message['domain'].$message['id'];\n\n            if (!isset($result[$messageId])) {\n                $message['count'] = 1;\n                $message['parameters'] = !empty($message['parameters']) ? [$message['parameters']] : [];\n                $messages[$key]['translation'] = $this->sanitizeString($message['translation']);\n                $result[$messageId] = $message;\n            } else {\n                if (!empty($message['parameters'])) {\n                    $result[$messageId]['parameters'][] = $message['parameters'];\n                }\n\n                ++$result[$messageId]['count'];\n            }\n\n            unset($messages[$key]);\n        }\n\n        return $result;\n    }\n\n    private function computeCount(array $messages): array\n    {\n        $count = [\n            DataCollectorTranslator::MESSAGE_DEFINED => 0,\n            DataCollectorTranslator::MESSAGE_MISSING => 0,\n            DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK => 0,\n        ];\n\n        foreach ($messages as $message) {\n            ++$count[$message['state']];\n        }\n\n        return $count;\n    }\n\n    private function sanitizeString(string $string, int $length = 80): string\n    {\n        $string = trim(preg_replace('/\\s+/', ' ', $string));\n\n        if (false !== $encoding = mb_detect_encoding($string, null, true)) {\n            if (mb_strlen($string, $encoding) > $length) {\n                return mb_substr($string, 0, $length - 3, $encoding).'...';\n            }\n        } elseif (\\strlen($string) > $length) {\n            return substr($string, 0, $length - 3).'...';\n        }\n\n        return $string;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DataCollectorTranslator.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\HttpKernel\\CacheWarmer\\WarmableInterface;\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Contracts\\Translation\\LocaleAwareInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface, WarmableInterface\n{\n    public const MESSAGE_DEFINED = 0;\n    public const MESSAGE_MISSING = 1;\n    public const MESSAGE_EQUALS_FALLBACK = 2;\n\n    private TranslatorInterface $translator;\n    private array $messages = [];\n\n    /**\n     * @param TranslatorInterface&TranslatorBagInterface&LocaleAwareInterface $translator\n     */\n    public function __construct(TranslatorInterface $translator)\n    {\n        if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) {\n            throw new InvalidArgumentException(sprintf('The Translator \"%s\" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', get_debug_type($translator)));\n        }\n\n        $this->translator = $translator;\n    }\n\n    public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string\n    {\n        $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale);\n        $this->collectMessage($locale, $domain, $id, $trans, $parameters);\n\n        return $trans;\n    }\n\n    /**\n     * @return void\n     */\n    public function setLocale(string $locale)\n    {\n        $this->translator->setLocale($locale);\n    }\n\n    public function getLocale(): string\n    {\n        return $this->translator->getLocale();\n    }\n\n    public function getCatalogue(?string $locale = null): MessageCatalogueInterface\n    {\n        return $this->translator->getCatalogue($locale);\n    }\n\n    public function getCatalogues(): array\n    {\n        return $this->translator->getCatalogues();\n    }\n\n    public function warmUp(string $cacheDir, ?string $buildDir = null): array\n    {\n        if ($this->translator instanceof WarmableInterface) {\n            return (array) $this->translator->warmUp($cacheDir, $buildDir);\n        }\n\n        return [];\n    }\n\n    /**\n     * Gets the fallback locales.\n     */\n    public function getFallbackLocales(): array\n    {\n        if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) {\n            return $this->translator->getFallbackLocales();\n        }\n\n        return [];\n    }\n\n    /**\n     * @return mixed\n     */\n    public function __call(string $method, array $args)\n    {\n        return $this->translator->{$method}(...$args);\n    }\n\n    public function getCollectedMessages(): array\n    {\n        return $this->messages;\n    }\n\n    private function collectMessage(?string $locale, ?string $domain, string $id, string $translation, ?array $parameters = []): void\n    {\n        $domain ??= 'messages';\n\n        $catalogue = $this->translator->getCatalogue($locale);\n        $locale = $catalogue->getLocale();\n        $fallbackLocale = null;\n        if ($catalogue->defines($id, $domain)) {\n            $state = self::MESSAGE_DEFINED;\n        } elseif ($catalogue->has($id, $domain)) {\n            $state = self::MESSAGE_EQUALS_FALLBACK;\n\n            $fallbackCatalogue = $catalogue->getFallbackCatalogue();\n            while ($fallbackCatalogue) {\n                if ($fallbackCatalogue->defines($id, $domain)) {\n                    $fallbackLocale = $fallbackCatalogue->getLocale();\n                    break;\n                }\n                $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();\n            }\n        } else {\n            $state = self::MESSAGE_MISSING;\n        }\n\n        $this->messages[] = [\n            'locale' => $locale,\n            'fallbackLocale' => $fallbackLocale,\n            'domain' => $domain,\n            'id' => $id,\n            'translation' => $translation,\n            'parameters' => $parameters,\n            'state' => $state,\n            'transChoiceNumber' => isset($parameters['%count%']) && is_numeric($parameters['%count%']) ? $parameters['%count%'] : null,\n        ];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DependencyInjection/DataCollectorTranslatorPass.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DependencyInjection;\n\nuse Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface;\nuse Symfony\\Component\\DependencyInjection\\ContainerBuilder;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\n\n/**\n * @author Christian Flothmann <christian.flothmann@sensiolabs.de>\n */\nclass DataCollectorTranslatorPass implements CompilerPassInterface\n{\n    public function process(ContainerBuilder $container): void\n    {\n        if (!$container->has('translator')) {\n            return;\n        }\n\n        $translatorClass = $container->getParameterBag()->resolveValue($container->findDefinition('translator')->getClass());\n\n        if (!is_subclass_of($translatorClass, TranslatorBagInterface::class)) {\n            $container->removeDefinition('translator.data_collector');\n            $container->removeDefinition('data_collector.translation');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DependencyInjection;\n\nuse Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface;\nuse Symfony\\Component\\DependencyInjection\\ContainerBuilder;\nuse Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass LoggingTranslatorPass implements CompilerPassInterface\n{\n    public function process(ContainerBuilder $container): void\n    {\n        if (!$container->hasAlias('logger') || !$container->hasAlias('translator')) {\n            return;\n        }\n\n        if (!$container->hasParameter('translator.logging') || !$container->getParameter('translator.logging')) {\n            return;\n        }\n\n        $translatorAlias = $container->getAlias('translator');\n        $definition = $container->getDefinition((string) $translatorAlias);\n        $class = $container->getParameterBag()->resolveValue($definition->getClass());\n\n        if (!$r = $container->getReflectionClass($class)) {\n            throw new InvalidArgumentException(sprintf('Class \"%s\" used for service \"%s\" cannot be found.', $class, $translatorAlias));\n        }\n\n        if (!$r->isSubclassOf(TranslatorInterface::class) || !$r->isSubclassOf(TranslatorBagInterface::class)) {\n            return;\n        }\n\n        $container->getDefinition('translator.logging')->setDecoratedService('translator');\n        $warmer = $container->getDefinition('translation.warmer');\n        $subscriberAttributes = $warmer->getTag('container.service_subscriber');\n        $warmer->clearTag('container.service_subscriber');\n\n        foreach ($subscriberAttributes as $k => $v) {\n            if ((!isset($v['id']) || 'translator' !== $v['id']) && (!isset($v['key']) || 'translator' !== $v['key'])) {\n                $warmer->addTag('container.service_subscriber', $v);\n            }\n        }\n        $warmer->addTag('container.service_subscriber', ['key' => 'translator', 'id' => 'translator.logging.inner']);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DependencyInjection;\n\nuse Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface;\nuse Symfony\\Component\\DependencyInjection\\ContainerBuilder;\nuse Symfony\\Component\\DependencyInjection\\Reference;\n\n/**\n * Adds tagged translation.formatter services to translation writer.\n */\nclass TranslationDumperPass implements CompilerPassInterface\n{\n    /**\n     * @return void\n     */\n    public function process(ContainerBuilder $container)\n    {\n        if (!$container->hasDefinition('translation.writer')) {\n            return;\n        }\n\n        $definition = $container->getDefinition('translation.writer');\n\n        foreach ($container->findTaggedServiceIds('translation.dumper', true) as $id => $attributes) {\n            $definition->addMethodCall('addDumper', [$attributes[0]['alias'], new Reference($id)]);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DependencyInjection;\n\nuse Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface;\nuse Symfony\\Component\\DependencyInjection\\ContainerBuilder;\nuse Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException;\nuse Symfony\\Component\\DependencyInjection\\Reference;\n\n/**\n * Adds tagged translation.extractor services to translation extractor.\n */\nclass TranslationExtractorPass implements CompilerPassInterface\n{\n    /**\n     * @return void\n     */\n    public function process(ContainerBuilder $container)\n    {\n        if (!$container->hasDefinition('translation.extractor')) {\n            return;\n        }\n\n        $definition = $container->getDefinition('translation.extractor');\n\n        foreach ($container->findTaggedServiceIds('translation.extractor', true) as $id => $attributes) {\n            if (!isset($attributes[0]['alias'])) {\n                throw new RuntimeException(sprintf('The alias for the tag \"translation.extractor\" of service \"%s\" must be set.', $id));\n            }\n\n            $definition->addMethodCall('addExtractor', [$attributes[0]['alias'], new Reference($id)]);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslatorPass.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DependencyInjection;\n\nuse Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface;\nuse Symfony\\Component\\DependencyInjection\\Compiler\\ServiceLocatorTagPass;\nuse Symfony\\Component\\DependencyInjection\\ContainerBuilder;\nuse Symfony\\Component\\DependencyInjection\\Reference;\n\nclass TranslatorPass implements CompilerPassInterface\n{\n    /**\n     * @return void\n     */\n    public function process(ContainerBuilder $container)\n    {\n        if (!$container->hasDefinition('translator.default')) {\n            return;\n        }\n\n        $loaders = [];\n        $loaderRefs = [];\n        foreach ($container->findTaggedServiceIds('translation.loader', true) as $id => $attributes) {\n            $loaderRefs[$id] = new Reference($id);\n            $loaders[$id][] = $attributes[0]['alias'];\n            if (isset($attributes[0]['legacy-alias'])) {\n                $loaders[$id][] = $attributes[0]['legacy-alias'];\n            }\n        }\n\n        if ($container->hasDefinition('translation.reader')) {\n            $definition = $container->getDefinition('translation.reader');\n            foreach ($loaders as $id => $formats) {\n                foreach ($formats as $format) {\n                    $definition->addMethodCall('addLoader', [$format, $loaderRefs[$id]]);\n                }\n            }\n        }\n\n        $container\n            ->findDefinition('translator.default')\n            ->replaceArgument(0, ServiceLocatorTagPass::register($container, $loaderRefs))\n            ->replaceArgument(3, $loaders)\n        ;\n\n        if ($container->hasDefinition('validator') && $container->hasDefinition('translation.extractor.visitor.constraint')) {\n            $constraintVisitorDefinition = $container->getDefinition('translation.extractor.visitor.constraint');\n            $constraintClassNames = [];\n\n            foreach ($container->getDefinitions() as $definition) {\n                if (!$definition->hasTag('validator.constraint_validator')) {\n                    continue;\n                }\n                // Resolve constraint validator FQCN even if defined as %foo.validator.class% parameter\n                $className = $container->getParameterBag()->resolveValue($definition->getClass());\n                // Extraction of the constraint class name from the Constraint Validator FQCN\n                $constraintClassNames[] = str_replace('Validator', '', substr(strrchr($className, '\\\\'), 1));\n            }\n\n            $constraintVisitorDefinition->setArgument(0, $constraintClassNames);\n        }\n\n        if (!$container->hasParameter('twig.default_path')) {\n            return;\n        }\n\n        $paths = array_keys($container->getDefinition('twig.template_iterator')->getArgument(1));\n        if ($container->hasDefinition('console.command.translation_debug')) {\n            $definition = $container->getDefinition('console.command.translation_debug');\n            $definition->replaceArgument(4, $container->getParameter('twig.default_path'));\n\n            if (\\count($definition->getArguments()) > 6) {\n                $definition->replaceArgument(6, $paths);\n            }\n        }\n        if ($container->hasDefinition('console.command.translation_extract')) {\n            $definition = $container->getDefinition('console.command.translation_extract');\n            $definition->replaceArgument(5, $container->getParameter('twig.default_path'));\n\n            if (\\count($definition->getArguments()) > 7) {\n                $definition->replaceArgument(7, $paths);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\DependencyInjection;\n\nuse Symfony\\Component\\DependencyInjection\\Compiler\\AbstractRecursivePass;\nuse Symfony\\Component\\DependencyInjection\\ContainerBuilder;\nuse Symfony\\Component\\DependencyInjection\\Definition;\nuse Symfony\\Component\\DependencyInjection\\Reference;\nuse Symfony\\Component\\DependencyInjection\\ServiceLocator;\nuse Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\TraceableValueResolver;\n\n/**\n * @author Yonel Ceruto <yonelceruto@gmail.com>\n */\nclass TranslatorPathsPass extends AbstractRecursivePass\n{\n    protected bool $skipScalars = true;\n\n    private int $level = 0;\n\n    /**\n     * @var array<string, bool>\n     */\n    private array $paths = [];\n\n    /**\n     * @var array<int, Definition>\n     */\n    private array $definitions = [];\n\n    /**\n     * @var array<string, array<string, bool>>\n     */\n    private array $controllers = [];\n\n    /**\n     * @return void\n     */\n    public function process(ContainerBuilder $container)\n    {\n        if (!$container->hasDefinition('translator')) {\n            return;\n        }\n\n        foreach ($this->findControllerArguments($container) as $controller => $argument) {\n            $id = substr($controller, 0, strpos($controller, ':') ?: \\strlen($controller));\n            if ($container->hasDefinition($id)) {\n                [$locatorRef] = $argument->getValues();\n                $this->controllers[(string) $locatorRef][$container->getDefinition($id)->getClass()] = true;\n            }\n        }\n\n        try {\n            parent::process($container);\n\n            $paths = [];\n            foreach ($this->paths as $class => $_) {\n                if (($r = $container->getReflectionClass($class)) && !$r->isInterface()) {\n                    $paths[] = $r->getFileName();\n                    foreach ($r->getTraits() as $trait) {\n                        $paths[] = $trait->getFileName();\n                    }\n                }\n            }\n            if ($paths) {\n                if ($container->hasDefinition('console.command.translation_debug')) {\n                    $definition = $container->getDefinition('console.command.translation_debug');\n                    $definition->replaceArgument(6, array_merge($definition->getArgument(6), $paths));\n                }\n                if ($container->hasDefinition('console.command.translation_extract')) {\n                    $definition = $container->getDefinition('console.command.translation_extract');\n                    $definition->replaceArgument(7, array_merge($definition->getArgument(7), $paths));\n                }\n            }\n        } finally {\n            $this->level = 0;\n            $this->paths = [];\n            $this->definitions = [];\n        }\n    }\n\n    protected function processValue(mixed $value, bool $isRoot = false): mixed\n    {\n        if ($value instanceof Reference) {\n            if ('translator' === (string) $value) {\n                for ($i = $this->level - 1; $i >= 0; --$i) {\n                    $class = $this->definitions[$i]->getClass();\n\n                    if (ServiceLocator::class === $class) {\n                        if (!isset($this->controllers[$this->currentId])) {\n                            continue;\n                        }\n                        foreach ($this->controllers[$this->currentId] as $class => $_) {\n                            $this->paths[$class] = true;\n                        }\n                    } else {\n                        $this->paths[$class] = true;\n                    }\n\n                    break;\n                }\n            }\n\n            return $value;\n        }\n\n        if ($value instanceof Definition) {\n            $this->definitions[$this->level++] = $value;\n            $value = parent::processValue($value, $isRoot);\n            unset($this->definitions[--$this->level]);\n\n            return $value;\n        }\n\n        return parent::processValue($value, $isRoot);\n    }\n\n    private function findControllerArguments(ContainerBuilder $container): array\n    {\n        if (!$container->has('argument_resolver.service')) {\n            return [];\n        }\n        $resolverDef = $container->findDefinition('argument_resolver.service');\n\n        if (TraceableValueResolver::class === $resolverDef->getClass()) {\n            $resolverDef = $container->getDefinition($resolverDef->getArgument(0));\n        }\n\n        $argument = $resolverDef->getArgument(0);\n        if ($argument instanceof Reference) {\n            $argument = $container->getDefinition($argument);\n        }\n\n        return $argument->getArgument(0);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/CsvFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * CsvFileDumper generates a csv formatted string representation of a message catalogue.\n *\n * @author Stealth35\n */\nclass CsvFileDumper extends FileDumper\n{\n    private string $delimiter = ';';\n    private string $enclosure = '\"';\n\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $handle = fopen('php://memory', 'r+');\n\n        foreach ($messages->all($domain) as $source => $target) {\n            fputcsv($handle, [$source, $target], $this->delimiter, $this->enclosure);\n        }\n\n        rewind($handle);\n        $output = stream_get_contents($handle);\n        fclose($handle);\n\n        return $output;\n    }\n\n    /**\n     * Sets the delimiter and escape character for CSV.\n     *\n     * @return void\n     */\n    public function setCsvControl(string $delimiter = ';', string $enclosure = '\"')\n    {\n        $this->delimiter = $delimiter;\n        $this->enclosure = $enclosure;\n    }\n\n    protected function getExtension(): string\n    {\n        return 'csv';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/DumperInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * DumperInterface is the interface implemented by all translation dumpers.\n * There is no common option.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\ninterface DumperInterface\n{\n    /**\n     * Dumps the message catalogue.\n     *\n     * @param array $options Options that are used by the dumper\n     *\n     * @return void\n     */\n    public function dump(MessageCatalogue $messages, array $options = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/FileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\RuntimeException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * FileDumper is an implementation of DumperInterface that dump a message catalogue to file(s).\n *\n * Options:\n * - path (mandatory): the directory where the files should be saved\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nabstract class FileDumper implements DumperInterface\n{\n    /**\n     * A template for the relative paths to files.\n     *\n     * @var string\n     */\n    protected $relativePathTemplate = '%domain%.%locale%.%extension%';\n\n    /**\n     * Sets the template for the relative paths to files.\n     *\n     * @return void\n     */\n    public function setRelativePathTemplate(string $relativePathTemplate)\n    {\n        $this->relativePathTemplate = $relativePathTemplate;\n    }\n\n    /**\n     * @return void\n     */\n    public function dump(MessageCatalogue $messages, array $options = [])\n    {\n        if (!\\array_key_exists('path', $options)) {\n            throw new InvalidArgumentException('The file dumper needs a path option.');\n        }\n\n        // save a file for each domain\n        foreach ($messages->getDomains() as $domain) {\n            $fullpath = $options['path'].'/'.$this->getRelativePath($domain, $messages->getLocale());\n            if (!file_exists($fullpath)) {\n                $directory = \\dirname($fullpath);\n                if (!file_exists($directory) && !@mkdir($directory, 0777, true)) {\n                    throw new RuntimeException(sprintf('Unable to create directory \"%s\".', $directory));\n                }\n            }\n\n            $intlDomain = $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX;\n            $intlMessages = $messages->all($intlDomain);\n\n            if ($intlMessages) {\n                $intlPath = $options['path'].'/'.$this->getRelativePath($intlDomain, $messages->getLocale());\n                file_put_contents($intlPath, $this->formatCatalogue($messages, $intlDomain, $options));\n\n                $messages->replace([], $intlDomain);\n\n                try {\n                    if ($messages->all($domain)) {\n                        file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options));\n                    }\n                    continue;\n                } finally {\n                    $messages->replace($intlMessages, $intlDomain);\n                }\n            }\n\n            file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options));\n        }\n    }\n\n    /**\n     * Transforms a domain of a message catalogue to its string representation.\n     */\n    abstract public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string;\n\n    /**\n     * Gets the file extension of the dumper.\n     */\n    abstract protected function getExtension(): string;\n\n    /**\n     * Gets the relative file path using the template.\n     */\n    private function getRelativePath(string $domain, string $locale): string\n    {\n        return strtr($this->relativePathTemplate, [\n            '%domain%' => $domain,\n            '%locale%' => $locale,\n            '%extension%' => $this->getExtension(),\n        ]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/IcuResFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * IcuResDumper generates an ICU ResourceBundle formatted string representation of a message catalogue.\n *\n * @author Stealth35\n */\nclass IcuResFileDumper extends FileDumper\n{\n    protected $relativePathTemplate = '%domain%/%locale%.%extension%';\n\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $data = $indexes = $resources = '';\n\n        foreach ($messages->all($domain) as $source => $target) {\n            $indexes .= pack('v', \\strlen($data) + 28);\n            $data .= $source.\"\\0\";\n        }\n\n        $data .= $this->writePadding($data);\n\n        $keyTop = $this->getPosition($data);\n\n        foreach ($messages->all($domain) as $source => $target) {\n            $resources .= pack('V', $this->getPosition($data));\n\n            $data .= pack('V', \\strlen($target))\n                .mb_convert_encoding($target.\"\\0\", 'UTF-16LE', 'UTF-8')\n                .$this->writePadding($data)\n            ;\n        }\n\n        $resOffset = $this->getPosition($data);\n\n        $data .= pack('v', \\count($messages->all($domain)))\n            .$indexes\n            .$this->writePadding($data)\n            .$resources\n        ;\n\n        $bundleTop = $this->getPosition($data);\n\n        $root = pack('V7',\n            $resOffset + (2 << 28), // Resource Offset + Resource Type\n            6,                      // Index length\n            $keyTop,                        // Index keys top\n            $bundleTop,                     // Index resources top\n            $bundleTop,                     // Index bundle top\n            \\count($messages->all($domain)), // Index max table length\n            0                               // Index attributes\n        );\n\n        $header = pack('vC2v4C12@32',\n            32,                     // Header size\n            0xDA, 0x27,             // Magic number 1 and 2\n            20, 0, 0, 2,            // Rest of the header, ..., Size of a char\n            0x52, 0x65, 0x73, 0x42, // Data format identifier\n            1, 2, 0, 0,             // Data version\n            1, 4, 0, 0              // Unicode version\n        );\n\n        return $header.$root.$data;\n    }\n\n    private function writePadding(string $data): ?string\n    {\n        $padding = \\strlen($data) % 4;\n\n        return $padding ? str_repeat(\"\\xAA\", 4 - $padding) : null;\n    }\n\n    private function getPosition(string $data): float|int\n    {\n        return (\\strlen($data) + 28) / 4;\n    }\n\n    protected function getExtension(): string\n    {\n        return 'res';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/IniFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * IniFileDumper generates an ini formatted string representation of a message catalogue.\n *\n * @author Stealth35\n */\nclass IniFileDumper extends FileDumper\n{\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $output = '';\n\n        foreach ($messages->all($domain) as $source => $target) {\n            $escapeTarget = str_replace('\"', '\\\"', $target);\n            $output .= $source.'=\"'.$escapeTarget.\"\\\"\\n\";\n        }\n\n        return $output;\n    }\n\n    protected function getExtension(): string\n    {\n        return 'ini';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/JsonFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * JsonFileDumper generates an json formatted string representation of a message catalogue.\n *\n * @author singles\n */\nclass JsonFileDumper extends FileDumper\n{\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $flags = $options['json_encoding'] ?? \\JSON_PRETTY_PRINT;\n\n        return json_encode($messages->all($domain), $flags);\n    }\n\n    protected function getExtension(): string\n    {\n        return 'json';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/MoFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\Loader\\MoFileLoader;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * MoFileDumper generates a gettext formatted string representation of a message catalogue.\n *\n * @author Stealth35\n */\nclass MoFileDumper extends FileDumper\n{\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $sources = $targets = $sourceOffsets = $targetOffsets = '';\n        $offsets = [];\n        $size = 0;\n\n        foreach ($messages->all($domain) as $source => $target) {\n            $offsets[] = array_map('strlen', [$sources, $source, $targets, $target]);\n            $sources .= \"\\0\".$source;\n            $targets .= \"\\0\".$target;\n            ++$size;\n        }\n\n        $header = [\n            'magicNumber' => MoFileLoader::MO_LITTLE_ENDIAN_MAGIC,\n            'formatRevision' => 0,\n            'count' => $size,\n            'offsetId' => MoFileLoader::MO_HEADER_SIZE,\n            'offsetTranslated' => MoFileLoader::MO_HEADER_SIZE + (8 * $size),\n            'sizeHashes' => 0,\n            'offsetHashes' => MoFileLoader::MO_HEADER_SIZE + (16 * $size),\n        ];\n\n        $sourcesSize = \\strlen($sources);\n        $sourcesStart = $header['offsetHashes'] + 1;\n\n        foreach ($offsets as $offset) {\n            $sourceOffsets .= $this->writeLong($offset[1])\n                          .$this->writeLong($offset[0] + $sourcesStart);\n            $targetOffsets .= $this->writeLong($offset[3])\n                          .$this->writeLong($offset[2] + $sourcesStart + $sourcesSize);\n        }\n\n        $output = implode('', array_map($this->writeLong(...), $header))\n               .$sourceOffsets\n               .$targetOffsets\n               .$sources\n               .$targets\n        ;\n\n        return $output;\n    }\n\n    protected function getExtension(): string\n    {\n        return 'mo';\n    }\n\n    private function writeLong(mixed $str): string\n    {\n        return pack('V*', $str);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/PhpFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * PhpFileDumper generates PHP files from a message catalogue.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nclass PhpFileDumper extends FileDumper\n{\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        return \"<?php\\n\\nreturn \".var_export($messages->all($domain), true).\";\\n\";\n    }\n\n    protected function getExtension(): string\n    {\n        return 'php';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/PoFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * PoFileDumper generates a gettext formatted string representation of a message catalogue.\n *\n * @author Stealth35\n */\nclass PoFileDumper extends FileDumper\n{\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $output = 'msgid \"\"'.\"\\n\";\n        $output .= 'msgstr \"\"'.\"\\n\";\n        $output .= '\"Content-Type: text/plain; charset=UTF-8\\n\"'.\"\\n\";\n        $output .= '\"Content-Transfer-Encoding: 8bit\\n\"'.\"\\n\";\n        $output .= '\"Language: '.$messages->getLocale().'\\n\"'.\"\\n\";\n        $output .= \"\\n\";\n\n        $newLine = false;\n        foreach ($messages->all($domain) as $source => $target) {\n            if ($newLine) {\n                $output .= \"\\n\";\n            } else {\n                $newLine = true;\n            }\n            $metadata = $messages->getMetadata($source, $domain);\n\n            if (isset($metadata['comments'])) {\n                $output .= $this->formatComments($metadata['comments']);\n            }\n            if (isset($metadata['flags'])) {\n                $output .= $this->formatComments(implode(',', (array) $metadata['flags']), ',');\n            }\n            if (isset($metadata['sources'])) {\n                $output .= $this->formatComments(implode(' ', (array) $metadata['sources']), ':');\n            }\n\n            $sourceRules = $this->getStandardRules($source);\n            $targetRules = $this->getStandardRules($target);\n            if (2 == \\count($sourceRules) && [] !== $targetRules) {\n                $output .= sprintf('msgid \"%s\"'.\"\\n\", $this->escape($sourceRules[0]));\n                $output .= sprintf('msgid_plural \"%s\"'.\"\\n\", $this->escape($sourceRules[1]));\n                foreach ($targetRules as $i => $targetRule) {\n                    $output .= sprintf('msgstr[%d] \"%s\"'.\"\\n\", $i, $this->escape($targetRule));\n                }\n            } else {\n                $output .= sprintf('msgid \"%s\"'.\"\\n\", $this->escape($source));\n                $output .= sprintf('msgstr \"%s\"'.\"\\n\", $this->escape($target));\n            }\n        }\n\n        return $output;\n    }\n\n    private function getStandardRules(string $id): array\n    {\n        // Partly copied from TranslatorTrait::trans.\n        $parts = [];\n        if (preg_match('/^\\|++$/', $id)) {\n            $parts = explode('|', $id);\n        } elseif (preg_match_all('/(?:\\|\\||[^\\|])++/', $id, $matches)) {\n            $parts = $matches[0];\n        }\n\n        $intervalRegexp = <<<'EOF'\n/^(?P<interval>\n    ({\\s*\n        (\\-?\\d+(\\.\\d+)?[\\s*,\\s*\\-?\\d+(\\.\\d+)?]*)\n    \\s*})\n\n        |\n\n    (?P<left_delimiter>[\\[\\]])\n        \\s*\n        (?P<left>-Inf|\\-?\\d+(\\.\\d+)?)\n        \\s*,\\s*\n        (?P<right>\\+?Inf|\\-?\\d+(\\.\\d+)?)\n        \\s*\n    (?P<right_delimiter>[\\[\\]])\n)\\s*(?P<message>.*?)$/xs\nEOF;\n\n        $standardRules = [];\n        foreach ($parts as $part) {\n            $part = trim(str_replace('||', '|', $part));\n\n            if (preg_match($intervalRegexp, $part)) {\n                // Explicit rule is not a standard rule.\n                return [];\n            } else {\n                $standardRules[] = $part;\n            }\n        }\n\n        return $standardRules;\n    }\n\n    protected function getExtension(): string\n    {\n        return 'po';\n    }\n\n    private function escape(string $str): string\n    {\n        return addcslashes($str, \"\\0..\\37\\42\\134\");\n    }\n\n    private function formatComments(string|array $comments, string $prefix = ''): ?string\n    {\n        $output = null;\n\n        foreach ((array) $comments as $comment) {\n            $output .= sprintf('#%s %s'.\"\\n\", $prefix, $comment);\n        }\n\n        return $output;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/QtFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * QtFileDumper generates ts files from a message catalogue.\n *\n * @author Benjamin Eberlei <kontakt@beberlei.de>\n */\nclass QtFileDumper extends FileDumper\n{\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $dom = new \\DOMDocument('1.0', 'utf-8');\n        $dom->formatOutput = true;\n        $ts = $dom->appendChild($dom->createElement('TS'));\n        $context = $ts->appendChild($dom->createElement('context'));\n        $context->appendChild($dom->createElement('name', $domain));\n\n        foreach ($messages->all($domain) as $source => $target) {\n            $message = $context->appendChild($dom->createElement('message'));\n            $metadata = $messages->getMetadata($source, $domain);\n            if (isset($metadata['sources'])) {\n                foreach ((array) $metadata['sources'] as $location) {\n                    $loc = explode(':', $location, 2);\n                    $location = $message->appendChild($dom->createElement('location'));\n                    $location->setAttribute('filename', $loc[0]);\n                    if (isset($loc[1])) {\n                        $location->setAttribute('line', $loc[1]);\n                    }\n                }\n            }\n            $message->appendChild($dom->createElement('source', $source));\n            $message->appendChild($dom->createElement('translation', $target));\n        }\n\n        return $dom->saveXML();\n    }\n\n    protected function getExtension(): string\n    {\n        return 'ts';\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/XliffFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * XliffFileDumper generates xliff files from a message catalogue.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nclass XliffFileDumper extends FileDumper\n{\n    public function __construct(\n        private string $extension = 'xlf',\n    ) {\n    }\n\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        $xliffVersion = '1.2';\n        if (\\array_key_exists('xliff_version', $options)) {\n            $xliffVersion = $options['xliff_version'];\n        }\n\n        if (\\array_key_exists('default_locale', $options)) {\n            $defaultLocale = $options['default_locale'];\n        } else {\n            $defaultLocale = \\Locale::getDefault();\n        }\n\n        if ('1.2' === $xliffVersion) {\n            return $this->dumpXliff1($defaultLocale, $messages, $domain, $options);\n        }\n        if ('2.0' === $xliffVersion) {\n            return $this->dumpXliff2($defaultLocale, $messages, $domain);\n        }\n\n        throw new InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version \"%s\".', $xliffVersion));\n    }\n\n    protected function getExtension(): string\n    {\n        return $this->extension;\n    }\n\n    private function dumpXliff1(string $defaultLocale, MessageCatalogue $messages, ?string $domain, array $options = []): string\n    {\n        $toolInfo = ['tool-id' => 'symfony', 'tool-name' => 'Symfony'];\n        if (\\array_key_exists('tool_info', $options)) {\n            $toolInfo = array_merge($toolInfo, $options['tool_info']);\n        }\n\n        $dom = new \\DOMDocument('1.0', 'utf-8');\n        $dom->formatOutput = true;\n\n        $xliff = $dom->appendChild($dom->createElement('xliff'));\n        $xliff->setAttribute('version', '1.2');\n        $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2');\n\n        $xliffFile = $xliff->appendChild($dom->createElement('file'));\n        $xliffFile->setAttribute('source-language', str_replace('_', '-', $defaultLocale));\n        $xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale()));\n        $xliffFile->setAttribute('datatype', 'plaintext');\n        $xliffFile->setAttribute('original', 'file.ext');\n\n        $xliffHead = $xliffFile->appendChild($dom->createElement('header'));\n        $xliffTool = $xliffHead->appendChild($dom->createElement('tool'));\n        foreach ($toolInfo as $id => $value) {\n            $xliffTool->setAttribute($id, $value);\n        }\n\n        if ($catalogueMetadata = $messages->getCatalogueMetadata('', $domain) ?? []) {\n            $xliffPropGroup = $xliffHead->appendChild($dom->createElement('prop-group'));\n            foreach ($catalogueMetadata as $key => $value) {\n                $xliffProp = $xliffPropGroup->appendChild($dom->createElement('prop'));\n                $xliffProp->setAttribute('prop-type', $key);\n                $xliffProp->appendChild($dom->createTextNode($value));\n            }\n        }\n\n        $xliffBody = $xliffFile->appendChild($dom->createElement('body'));\n        foreach ($messages->all($domain) as $source => $target) {\n            $translation = $dom->createElement('trans-unit');\n\n            $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, true)), 0, 7), '/+', '._'));\n            $translation->setAttribute('resname', $source);\n\n            $s = $translation->appendChild($dom->createElement('source'));\n            $s->appendChild($dom->createTextNode($source));\n\n            // Does the target contain characters requiring a CDATA section?\n            $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);\n\n            $targetElement = $dom->createElement('target');\n            $metadata = $messages->getMetadata($source, $domain);\n            if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {\n                foreach ($metadata['target-attributes'] as $name => $value) {\n                    $targetElement->setAttribute($name, $value);\n                }\n            }\n            $t = $translation->appendChild($targetElement);\n            $t->appendChild($text);\n\n            if ($this->hasMetadataArrayInfo('notes', $metadata)) {\n                foreach ($metadata['notes'] as $note) {\n                    if (!isset($note['content'])) {\n                        continue;\n                    }\n\n                    $n = $translation->appendChild($dom->createElement('note'));\n                    $n->appendChild($dom->createTextNode($note['content']));\n\n                    if (isset($note['priority'])) {\n                        $n->setAttribute('priority', $note['priority']);\n                    }\n\n                    if (isset($note['from'])) {\n                        $n->setAttribute('from', $note['from']);\n                    }\n                }\n            }\n\n            $xliffBody->appendChild($translation);\n        }\n\n        return $dom->saveXML();\n    }\n\n    private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ?string $domain): string\n    {\n        $dom = new \\DOMDocument('1.0', 'utf-8');\n        $dom->formatOutput = true;\n\n        $xliff = $dom->appendChild($dom->createElement('xliff'));\n        $xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:2.0');\n        $xliff->setAttribute('version', '2.0');\n        $xliff->setAttribute('srcLang', str_replace('_', '-', $defaultLocale));\n        $xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale()));\n\n        $xliffFile = $xliff->appendChild($dom->createElement('file'));\n        if (str_ends_with($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX)) {\n            $xliffFile->setAttribute('id', substr($domain, 0, -\\strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX)).'.'.$messages->getLocale());\n        } else {\n            $xliffFile->setAttribute('id', $domain.'.'.$messages->getLocale());\n        }\n\n        if ($catalogueMetadata = $messages->getCatalogueMetadata('', $domain) ?? []) {\n            $xliff->setAttribute('xmlns:m', 'urn:oasis:names:tc:xliff:metadata:2.0');\n            $xliffMetadata = $xliffFile->appendChild($dom->createElement('m:metadata'));\n            foreach ($catalogueMetadata as $key => $value) {\n                $xliffMeta = $xliffMetadata->appendChild($dom->createElement('prop'));\n                $xliffMeta->setAttribute('type', $key);\n                $xliffMeta->appendChild($dom->createTextNode($value));\n            }\n        }\n\n        foreach ($messages->all($domain) as $source => $target) {\n            $translation = $dom->createElement('unit');\n            $translation->setAttribute('id', strtr(substr(base64_encode(hash('sha256', $source, true)), 0, 7), '/+', '._'));\n\n            if (\\strlen($source) <= 80) {\n                $translation->setAttribute('name', $source);\n            }\n\n            $metadata = $messages->getMetadata($source, $domain);\n\n            // Add notes section\n            if ($this->hasMetadataArrayInfo('notes', $metadata)) {\n                $notesElement = $dom->createElement('notes');\n                foreach ($metadata['notes'] as $note) {\n                    $n = $dom->createElement('note');\n                    $n->appendChild($dom->createTextNode($note['content'] ?? ''));\n                    unset($note['content']);\n\n                    foreach ($note as $name => $value) {\n                        $n->setAttribute($name, $value);\n                    }\n                    $notesElement->appendChild($n);\n                }\n                $translation->appendChild($notesElement);\n            }\n\n            $segment = $translation->appendChild($dom->createElement('segment'));\n\n            $s = $segment->appendChild($dom->createElement('source'));\n            $s->appendChild($dom->createTextNode($source));\n\n            // Does the target contain characters requiring a CDATA section?\n            $text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);\n\n            $targetElement = $dom->createElement('target');\n            if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {\n                foreach ($metadata['target-attributes'] as $name => $value) {\n                    $targetElement->setAttribute($name, $value);\n                }\n            }\n            $t = $segment->appendChild($targetElement);\n            $t->appendChild($text);\n\n            $xliffFile->appendChild($translation);\n        }\n\n        return $dom->saveXML();\n    }\n\n    private function hasMetadataArrayInfo(string $key, ?array $metadata = null): bool\n    {\n        return is_iterable($metadata[$key] ?? null);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Dumper/YamlFileDumper.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Dumper;\n\nuse Symfony\\Component\\Translation\\Exception\\LogicException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\nuse Symfony\\Component\\Translation\\Util\\ArrayConverter;\nuse Symfony\\Component\\Yaml\\Yaml;\n\n/**\n * YamlFileDumper generates yaml files from a message catalogue.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nclass YamlFileDumper extends FileDumper\n{\n    private string $extension;\n\n    public function __construct(string $extension = 'yml')\n    {\n        $this->extension = $extension;\n    }\n\n    public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string\n    {\n        if (!class_exists(Yaml::class)) {\n            throw new LogicException('Dumping translations in the YAML format requires the Symfony Yaml component.');\n        }\n\n        $data = $messages->all($domain);\n\n        if (isset($options['as_tree']) && $options['as_tree']) {\n            $data = ArrayConverter::expandToTree($data);\n        }\n\n        if (isset($options['inline']) && ($inline = (int) $options['inline']) > 0) {\n            return Yaml::dump($data, $inline);\n        }\n\n        return Yaml::dump($data);\n    }\n\n    protected function getExtension(): string\n    {\n        return $this->extension;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/ExceptionInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * Exception interface for all exceptions thrown by the component.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface ExceptionInterface extends \\Throwable\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/IncompleteDsnException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\nclass IncompleteDsnException extends InvalidArgumentException\n{\n    public function __construct(string $message, ?string $dsn = null, ?\\Throwable $previous = null)\n    {\n        if ($dsn) {\n            $message = sprintf('Invalid \"%s\" provider DSN: ', $dsn).$message;\n        }\n\n        parent::__construct($message, 0, $previous);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/InvalidArgumentException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * Base InvalidArgumentException for the Translation component.\n *\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass InvalidArgumentException extends \\InvalidArgumentException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/InvalidResourceException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * Thrown when a resource cannot be loaded.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass InvalidResourceException extends \\InvalidArgumentException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/LogicException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * Base LogicException for Translation component.\n *\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass LogicException extends \\LogicException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/MissingRequiredOptionException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * @author Oskar Stark <oskarstark@googlemail.com>\n */\nclass MissingRequiredOptionException extends IncompleteDsnException\n{\n    public function __construct(string $option, ?string $dsn = null, ?\\Throwable $previous = null)\n    {\n        $message = sprintf('The option \"%s\" is required but missing.', $option);\n\n        parent::__construct($message, $dsn, $previous);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/NotFoundResourceException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * Thrown when a resource does not exist.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass NotFoundResourceException extends \\InvalidArgumentException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/ProviderException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\nuse Symfony\\Contracts\\HttpClient\\ResponseInterface;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass ProviderException extends RuntimeException implements ProviderExceptionInterface\n{\n    private ResponseInterface $response;\n    private string $debug;\n\n    public function __construct(string $message, ResponseInterface $response, int $code = 0, ?\\Exception $previous = null)\n    {\n        $this->response = $response;\n        $this->debug = $response->getInfo('debug') ?? '';\n\n        parent::__construct($message, $code, $previous);\n    }\n\n    public function getResponse(): ResponseInterface\n    {\n        return $this->response;\n    }\n\n    public function getDebug(): string\n    {\n        return $this->debug;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/ProviderExceptionInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface ProviderExceptionInterface extends ExceptionInterface\n{\n    /*\n     * Returns debug info coming from the Symfony\\Contracts\\HttpClient\\ResponseInterface\n     */\n    public function getDebug(): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/RuntimeException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\n/**\n * Base RuntimeException for the Translation component.\n *\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass RuntimeException extends \\RuntimeException implements ExceptionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Exception/UnsupportedSchemeException.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Exception;\n\nuse Symfony\\Component\\Translation\\Bridge;\nuse Symfony\\Component\\Translation\\Provider\\Dsn;\n\nclass UnsupportedSchemeException extends LogicException\n{\n    private const SCHEME_TO_PACKAGE_MAP = [\n        'crowdin' => [\n            'class' => Bridge\\Crowdin\\CrowdinProviderFactory::class,\n            'package' => 'symfony/crowdin-translation-provider',\n        ],\n        'loco' => [\n            'class' => Bridge\\Loco\\LocoProviderFactory::class,\n            'package' => 'symfony/loco-translation-provider',\n        ],\n        'lokalise' => [\n            'class' => Bridge\\Lokalise\\LokaliseProviderFactory::class,\n            'package' => 'symfony/lokalise-translation-provider',\n        ],\n        'phrase' => [\n            'class' => Bridge\\Phrase\\PhraseProviderFactory::class,\n            'package' => 'symfony/phrase-translation-provider',\n        ],\n    ];\n\n    public function __construct(Dsn $dsn, ?string $name = null, array $supported = [])\n    {\n        $provider = $dsn->getScheme();\n        if (false !== $pos = strpos($provider, '+')) {\n            $provider = substr($provider, 0, $pos);\n        }\n        $package = self::SCHEME_TO_PACKAGE_MAP[$provider] ?? null;\n        if ($package && !class_exists($package['class'])) {\n            parent::__construct(sprintf('Unable to synchronize translations via \"%s\" as the provider is not installed. Try running \"composer require %s\".', $provider, $package['package']));\n\n            return;\n        }\n\n        $message = sprintf('The \"%s\" scheme is not supported', $dsn->getScheme());\n        if ($name && $supported) {\n            $message .= sprintf('; supported schemes for translation provider \"%s\" are: \"%s\"', $name, implode('\", \"', $supported));\n        }\n\n        parent::__construct($message.'.');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/AbstractFileExtractor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\n\n/**\n * Base class used by classes that extract translation messages from files.\n *\n * @author Marcos D. Sánchez <marcosdsanchez@gmail.com>\n */\nabstract class AbstractFileExtractor\n{\n    protected function extractFiles(string|iterable $resource): iterable\n    {\n        if (is_iterable($resource)) {\n            $files = [];\n            foreach ($resource as $file) {\n                if ($this->canBeExtracted($file)) {\n                    $files[] = $this->toSplFileInfo($file);\n                }\n            }\n        } elseif (is_file($resource)) {\n            $files = $this->canBeExtracted($resource) ? [$this->toSplFileInfo($resource)] : [];\n        } else {\n            $files = $this->extractFromDirectory($resource);\n        }\n\n        return $files;\n    }\n\n    private function toSplFileInfo(string $file): \\SplFileInfo\n    {\n        return new \\SplFileInfo($file);\n    }\n\n    /**\n     * @throws InvalidArgumentException\n     */\n    protected function isFile(string $file): bool\n    {\n        if (!is_file($file)) {\n            throw new InvalidArgumentException(sprintf('The \"%s\" file does not exist.', $file));\n        }\n\n        return true;\n    }\n\n    /**\n     * @return bool\n     */\n    abstract protected function canBeExtracted(string $file);\n\n    /**\n     * @return iterable\n     */\n    abstract protected function extractFromDirectory(string|array $resource);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/ChainExtractor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * ChainExtractor extracts translation messages from template files.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nclass ChainExtractor implements ExtractorInterface\n{\n    /**\n     * The extractors.\n     *\n     * @var ExtractorInterface[]\n     */\n    private array $extractors = [];\n\n    /**\n     * Adds a loader to the translation extractor.\n     *\n     * @return void\n     */\n    public function addExtractor(string $format, ExtractorInterface $extractor)\n    {\n        $this->extractors[$format] = $extractor;\n    }\n\n    /**\n     * @return void\n     */\n    public function setPrefix(string $prefix)\n    {\n        foreach ($this->extractors as $extractor) {\n            $extractor->setPrefix($prefix);\n        }\n    }\n\n    /**\n     * @return void\n     */\n    public function extract(string|iterable $directory, MessageCatalogue $catalogue)\n    {\n        foreach ($this->extractors as $extractor) {\n            $extractor->extract($directory, $catalogue);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/ExtractorInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * Extracts translation messages from a directory or files to the catalogue.\n * New found messages are injected to the catalogue using the prefix.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\ninterface ExtractorInterface\n{\n    /**\n     * Extracts translation messages from files, a file or a directory to the catalogue.\n     *\n     * @param string|iterable<string> $resource Files, a file or a directory\n     *\n     * @return void\n     */\n    public function extract(string|iterable $resource, MessageCatalogue $catalogue);\n\n    /**\n     * Sets the prefix that should be used for new found messages.\n     *\n     * @return void\n     */\n    public function setPrefix(string $prefix);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/PhpAstExtractor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor;\n\nuse PhpParser\\NodeTraverser;\nuse PhpParser\\NodeVisitor;\nuse PhpParser\\Parser;\nuse PhpParser\\ParserFactory;\nuse Symfony\\Component\\Finder\\Finder;\nuse Symfony\\Component\\Translation\\Extractor\\Visitor\\AbstractVisitor;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * PhpAstExtractor extracts translation messages from a PHP AST.\n *\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nfinal class PhpAstExtractor extends AbstractFileExtractor implements ExtractorInterface\n{\n    private Parser $parser;\n\n    public function __construct(\n        /**\n         * @param iterable<AbstractVisitor&NodeVisitor> $visitors\n         */\n        private readonly iterable $visitors,\n        private string $prefix = '',\n    ) {\n        if (!class_exists(ParserFactory::class)) {\n            throw new \\LogicException(sprintf('You cannot use \"%s\" as the \"nikic/php-parser\" package is not installed. Try running \"composer require nikic/php-parser\".', static::class));\n        }\n\n        $this->parser = (new ParserFactory())->createForHostVersion();\n    }\n\n    public function extract(iterable|string $resource, MessageCatalogue $catalogue): void\n    {\n        foreach ($this->extractFiles($resource) as $file) {\n            $traverser = new NodeTraverser();\n\n            // This is needed to resolve namespaces in class methods/constants.\n            $nameResolver = new NodeVisitor\\NameResolver();\n            $traverser->addVisitor($nameResolver);\n\n            /** @var AbstractVisitor&NodeVisitor $visitor */\n            foreach ($this->visitors as $visitor) {\n                $visitor->initialize($catalogue, $file, $this->prefix);\n                $traverser->addVisitor($visitor);\n            }\n\n            $nodes = $this->parser->parse(file_get_contents($file));\n            $traverser->traverse($nodes);\n        }\n    }\n\n    public function setPrefix(string $prefix): void\n    {\n        $this->prefix = $prefix;\n    }\n\n    protected function canBeExtracted(string $file): bool\n    {\n        return 'php' === pathinfo($file, \\PATHINFO_EXTENSION)\n            && $this->isFile($file)\n            && preg_match('/\\bt\\(|->trans\\(|TranslatableMessage|Symfony\\\\\\\\Component\\\\\\\\Validator\\\\\\\\Constraints/i', file_get_contents($file));\n    }\n\n    protected function extractFromDirectory(array|string $resource): iterable|Finder\n    {\n        if (!class_exists(Finder::class)) {\n            throw new \\LogicException(sprintf('You cannot use \"%s\" as the \"symfony/finder\" package is not installed. Try running \"composer require symfony/finder\".', static::class));\n        }\n\n        return (new Finder())->files()->name('*.php')->in($resource);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/PhpExtractor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor;\n\ntrigger_deprecation('symfony/translation', '6.2', '\"%s\" is deprecated, use \"%s\" instead.', PhpExtractor::class, PhpAstExtractor::class);\n\nuse Symfony\\Component\\Finder\\Finder;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * PhpExtractor extracts translation messages from a PHP template.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n *\n * @deprecated since Symfony 6.2, use the PhpAstExtractor instead\n */\nclass PhpExtractor extends AbstractFileExtractor implements ExtractorInterface\n{\n    public const MESSAGE_TOKEN = 300;\n    public const METHOD_ARGUMENTS_TOKEN = 1000;\n    public const DOMAIN_TOKEN = 1001;\n\n    /**\n     * Prefix for new found message.\n     */\n    private string $prefix = '';\n\n    /**\n     * The sequence that captures translation messages.\n     */\n    protected $sequences = [\n        [\n            '->',\n            'trans',\n            '(',\n            self::MESSAGE_TOKEN,\n            ',',\n            self::METHOD_ARGUMENTS_TOKEN,\n            ',',\n            self::DOMAIN_TOKEN,\n        ],\n        [\n            '->',\n            'trans',\n            '(',\n            self::MESSAGE_TOKEN,\n        ],\n        [\n            'new',\n            'TranslatableMessage',\n            '(',\n            self::MESSAGE_TOKEN,\n            ',',\n            self::METHOD_ARGUMENTS_TOKEN,\n            ',',\n            self::DOMAIN_TOKEN,\n        ],\n        [\n            'new',\n            'TranslatableMessage',\n            '(',\n            self::MESSAGE_TOKEN,\n        ],\n        [\n            'new',\n            '\\\\',\n            'Symfony',\n            '\\\\',\n            'Component',\n            '\\\\',\n            'Translation',\n            '\\\\',\n            'TranslatableMessage',\n            '(',\n            self::MESSAGE_TOKEN,\n            ',',\n            self::METHOD_ARGUMENTS_TOKEN,\n            ',',\n            self::DOMAIN_TOKEN,\n        ],\n        [\n            'new',\n            '\\Symfony\\Component\\Translation\\TranslatableMessage',\n            '(',\n            self::MESSAGE_TOKEN,\n            ',',\n            self::METHOD_ARGUMENTS_TOKEN,\n            ',',\n            self::DOMAIN_TOKEN,\n        ],\n        [\n            'new',\n            '\\\\',\n            'Symfony',\n            '\\\\',\n            'Component',\n            '\\\\',\n            'Translation',\n            '\\\\',\n            'TranslatableMessage',\n            '(',\n            self::MESSAGE_TOKEN,\n        ],\n        [\n            'new',\n            '\\Symfony\\Component\\Translation\\TranslatableMessage',\n            '(',\n            self::MESSAGE_TOKEN,\n        ],\n        [\n            't',\n            '(',\n            self::MESSAGE_TOKEN,\n            ',',\n            self::METHOD_ARGUMENTS_TOKEN,\n            ',',\n            self::DOMAIN_TOKEN,\n        ],\n        [\n            't',\n            '(',\n            self::MESSAGE_TOKEN,\n        ],\n    ];\n\n    /**\n     * @return void\n     */\n    public function extract(string|iterable $resource, MessageCatalogue $catalog)\n    {\n        $files = $this->extractFiles($resource);\n        foreach ($files as $file) {\n            $this->parseTokens(token_get_all(file_get_contents($file)), $catalog, $file);\n\n            gc_mem_caches();\n        }\n    }\n\n    /**\n     * @return void\n     */\n    public function setPrefix(string $prefix)\n    {\n        $this->prefix = $prefix;\n    }\n\n    /**\n     * Normalizes a token.\n     */\n    protected function normalizeToken(mixed $token): ?string\n    {\n        if (isset($token[1]) && 'b\"' !== $token) {\n            return $token[1];\n        }\n\n        return $token;\n    }\n\n    /**\n     * Seeks to a non-whitespace token.\n     */\n    private function seekToNextRelevantToken(\\Iterator $tokenIterator): void\n    {\n        for (; $tokenIterator->valid(); $tokenIterator->next()) {\n            $t = $tokenIterator->current();\n            if (\\T_WHITESPACE !== $t[0]) {\n                break;\n            }\n        }\n    }\n\n    private function skipMethodArgument(\\Iterator $tokenIterator): void\n    {\n        $openBraces = 0;\n\n        for (; $tokenIterator->valid(); $tokenIterator->next()) {\n            $t = $tokenIterator->current();\n\n            if ('[' === $t[0] || '(' === $t[0]) {\n                ++$openBraces;\n            }\n\n            if (']' === $t[0] || ')' === $t[0]) {\n                --$openBraces;\n            }\n\n            if ((0 === $openBraces && ',' === $t[0]) || (-1 === $openBraces && ')' === $t[0])) {\n                break;\n            }\n        }\n    }\n\n    /**\n     * Extracts the message from the iterator while the tokens\n     * match allowed message tokens.\n     */\n    private function getValue(\\Iterator $tokenIterator): string\n    {\n        $message = '';\n        $docToken = '';\n        $docPart = '';\n\n        for (; $tokenIterator->valid(); $tokenIterator->next()) {\n            $t = $tokenIterator->current();\n            if ('.' === $t) {\n                // Concatenate with next token\n                continue;\n            }\n            if (!isset($t[1])) {\n                break;\n            }\n\n            switch ($t[0]) {\n                case \\T_START_HEREDOC:\n                    $docToken = $t[1];\n                    break;\n                case \\T_ENCAPSED_AND_WHITESPACE:\n                case \\T_CONSTANT_ENCAPSED_STRING:\n                    if ('' === $docToken) {\n                        $message .= PhpStringTokenParser::parse($t[1]);\n                    } else {\n                        $docPart = $t[1];\n                    }\n                    break;\n                case \\T_END_HEREDOC:\n                    if ($indentation = strspn($t[1], ' ')) {\n                        $docPartWithLineBreaks = $docPart;\n                        $docPart = '';\n\n                        foreach (preg_split('~(\\r\\n|\\n|\\r)~', $docPartWithLineBreaks, -1, \\PREG_SPLIT_DELIM_CAPTURE) as $str) {\n                            if (\\in_array($str, [\"\\r\\n\", \"\\n\", \"\\r\"], true)) {\n                                $docPart .= $str;\n                            } else {\n                                $docPart .= substr($str, $indentation);\n                            }\n                        }\n                    }\n\n                    $message .= PhpStringTokenParser::parseDocString($docToken, $docPart);\n                    $docToken = '';\n                    $docPart = '';\n                    break;\n                case \\T_WHITESPACE:\n                    break;\n                default:\n                    break 2;\n            }\n        }\n\n        return $message;\n    }\n\n    /**\n     * Extracts trans message from PHP tokens.\n     *\n     * @return void\n     */\n    protected function parseTokens(array $tokens, MessageCatalogue $catalog, string $filename)\n    {\n        $tokenIterator = new \\ArrayIterator($tokens);\n\n        for ($key = 0; $key < $tokenIterator->count(); ++$key) {\n            foreach ($this->sequences as $sequence) {\n                $message = '';\n                $domain = 'messages';\n                $tokenIterator->seek($key);\n\n                foreach ($sequence as $sequenceKey => $item) {\n                    $this->seekToNextRelevantToken($tokenIterator);\n\n                    if ($this->normalizeToken($tokenIterator->current()) === $item) {\n                        $tokenIterator->next();\n                        continue;\n                    } elseif (self::MESSAGE_TOKEN === $item) {\n                        $message = $this->getValue($tokenIterator);\n\n                        if (\\count($sequence) === ($sequenceKey + 1)) {\n                            break;\n                        }\n                    } elseif (self::METHOD_ARGUMENTS_TOKEN === $item) {\n                        $this->skipMethodArgument($tokenIterator);\n                    } elseif (self::DOMAIN_TOKEN === $item) {\n                        $domainToken = $this->getValue($tokenIterator);\n                        if ('' !== $domainToken) {\n                            $domain = $domainToken;\n                        }\n\n                        break;\n                    } else {\n                        break;\n                    }\n                }\n\n                if ($message) {\n                    $catalog->set($message, $this->prefix.$message, $domain);\n                    $metadata = $catalog->getMetadata($message, $domain) ?? [];\n                    $normalizedFilename = preg_replace('{[\\\\\\\\/]+}', '/', $filename);\n                    $metadata['sources'][] = $normalizedFilename.':'.$tokens[$key][2];\n                    $catalog->setMetadata($message, $metadata, $domain);\n                    break;\n                }\n            }\n        }\n    }\n\n    /**\n     * @throws \\InvalidArgumentException\n     */\n    protected function canBeExtracted(string $file): bool\n    {\n        return $this->isFile($file) && 'php' === pathinfo($file, \\PATHINFO_EXTENSION);\n    }\n\n    protected function extractFromDirectory(string|array $directory): iterable\n    {\n        if (!class_exists(Finder::class)) {\n            throw new \\LogicException(sprintf('You cannot use \"%s\" as the \"symfony/finder\" package is not installed. Try running \"composer require symfony/finder\".', static::class));\n        }\n\n        $finder = new Finder();\n\n        return $finder->files()->name('*.php')->in($directory);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/PhpStringTokenParser.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor;\n\ntrigger_deprecation('symfony/translation', '6.2', '\"%s\" is deprecated.', PhpStringTokenParser::class);\n\n/*\n * The following is derived from code at http://github.com/nikic/PHP-Parser\n *\n * Copyright (c) 2011 by Nikita Popov\n *\n * Some rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *\n *     * Redistributions in binary form must reproduce the above\n *       copyright notice, this list of conditions and the following\n *       disclaimer in the documentation and/or other materials provided\n *       with the distribution.\n *\n *     * The names of the contributors may not be used to endorse or\n *       promote products derived from this software without specific\n *       prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/**\n * @deprecated since Symfony 6.2\n */\nclass PhpStringTokenParser\n{\n    protected static $replacements = [\n        '\\\\' => '\\\\',\n        '$' => '$',\n        'n' => \"\\n\",\n        'r' => \"\\r\",\n        't' => \"\\t\",\n        'f' => \"\\f\",\n        'v' => \"\\v\",\n        'e' => \"\\x1B\",\n    ];\n\n    /**\n     * Parses a string token.\n     *\n     * @param string $str String token content\n     */\n    public static function parse(string $str): string\n    {\n        $bLength = 0;\n        if ('b' === $str[0]) {\n            $bLength = 1;\n        }\n\n        if ('\\'' === $str[$bLength]) {\n            return str_replace(\n                ['\\\\\\\\', '\\\\\\''],\n                ['\\\\', '\\''],\n                substr($str, $bLength + 1, -1)\n            );\n        } else {\n            return self::parseEscapeSequences(substr($str, $bLength + 1, -1), '\"');\n        }\n    }\n\n    /**\n     * Parses escape sequences in strings (all string types apart from single quoted).\n     *\n     * @param string      $str   String without quotes\n     * @param string|null $quote Quote type\n     */\n    public static function parseEscapeSequences(string $str, ?string $quote = null): string\n    {\n        if (null !== $quote) {\n            $str = str_replace('\\\\'.$quote, $quote, $str);\n        }\n\n        return preg_replace_callback(\n            '~\\\\\\\\([\\\\\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~',\n            [__CLASS__, 'parseCallback'],\n            $str\n        );\n    }\n\n    private static function parseCallback(array $matches): string\n    {\n        $str = $matches[1];\n\n        if (isset(self::$replacements[$str])) {\n            return self::$replacements[$str];\n        } elseif ('x' === $str[0] || 'X' === $str[0]) {\n            return \\chr(hexdec($str));\n        } else {\n            return \\chr(octdec($str));\n        }\n    }\n\n    /**\n     * Parses a constant doc string.\n     *\n     * @param string $startToken Doc string start token content (<<<SMTHG)\n     * @param string $str        String token content\n     */\n    public static function parseDocString(string $startToken, string $str): string\n    {\n        // strip last newline (thanks tokenizer for sticking it into the string!)\n        $str = preg_replace('~(\\r\\n|\\n|\\r)$~', '', $str);\n\n        // nowdoc string\n        if (str_contains($startToken, '\\'')) {\n            return $str;\n        }\n\n        return self::parseEscapeSequences($str, null);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor\\Visitor;\n\nuse PhpParser\\Node;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nabstract class AbstractVisitor\n{\n    private MessageCatalogue $catalogue;\n    private \\SplFileInfo $file;\n    private string $messagePrefix;\n\n    public function initialize(MessageCatalogue $catalogue, \\SplFileInfo $file, string $messagePrefix): void\n    {\n        $this->catalogue = $catalogue;\n        $this->file = $file;\n        $this->messagePrefix = $messagePrefix;\n    }\n\n    protected function addMessageToCatalogue(string $message, ?string $domain, int $line): void\n    {\n        $domain ??= 'messages';\n        $this->catalogue->set($message, $this->messagePrefix.$message, $domain);\n        $metadata = $this->catalogue->getMetadata($message, $domain) ?? [];\n        $normalizedFilename = preg_replace('{[\\\\\\\\/]+}', '/', $this->file);\n        $metadata['sources'][] = $normalizedFilename.':'.$line;\n        $this->catalogue->setMetadata($message, $metadata, $domain);\n    }\n\n    protected function getStringArguments(Node\\Expr\\CallLike|Node\\Attribute|Node\\Expr\\New_ $node, int|string $index, bool $indexIsRegex = false): array\n    {\n        if (\\is_string($index)) {\n            return $this->getStringNamedArguments($node, $index, $indexIsRegex);\n        }\n\n        $args = $node instanceof Node\\Expr\\CallLike ? $node->getRawArgs() : $node->args;\n\n        if (!($arg = $args[$index] ?? null) instanceof Node\\Arg) {\n            return [];\n        }\n\n        return (array) $this->getStringValue($arg->value);\n    }\n\n    protected function hasNodeNamedArguments(Node\\Expr\\CallLike|Node\\Attribute|Node\\Expr\\New_ $node): bool\n    {\n        $args = $node instanceof Node\\Expr\\CallLike ? $node->getRawArgs() : $node->args;\n\n        foreach ($args as $arg) {\n            if ($arg instanceof Node\\Arg && null !== $arg->name) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    protected function nodeFirstNamedArgumentIndex(Node\\Expr\\CallLike|Node\\Attribute|Node\\Expr\\New_ $node): int\n    {\n        $args = $node instanceof Node\\Expr\\CallLike ? $node->getRawArgs() : $node->args;\n\n        foreach ($args as $i => $arg) {\n            if ($arg instanceof Node\\Arg && null !== $arg->name) {\n                return $i;\n            }\n        }\n\n        return \\PHP_INT_MAX;\n    }\n\n    private function getStringNamedArguments(Node\\Expr\\CallLike|Node\\Attribute $node, ?string $argumentName = null, bool $isArgumentNamePattern = false): array\n    {\n        $args = $node instanceof Node\\Expr\\CallLike ? $node->getArgs() : $node->args;\n        $argumentValues = [];\n\n        foreach ($args as $arg) {\n            if (!$isArgumentNamePattern && $arg->name?->toString() === $argumentName) {\n                $argumentValues[] = $this->getStringValue($arg->value);\n            } elseif ($isArgumentNamePattern && preg_match($argumentName, $arg->name?->toString() ?? '') > 0) {\n                $argumentValues[] = $this->getStringValue($arg->value);\n            }\n        }\n\n        return array_filter($argumentValues);\n    }\n\n    private function getStringValue(Node $node): ?string\n    {\n        if ($node instanceof Node\\Scalar\\String_) {\n            return $node->value;\n        }\n\n        if ($node instanceof Node\\Expr\\BinaryOp\\Concat) {\n            if (null === $left = $this->getStringValue($node->left)) {\n                return null;\n            }\n\n            if (null === $right = $this->getStringValue($node->right)) {\n                return null;\n            }\n\n            return $left.$right;\n        }\n\n        if ($node instanceof Node\\Expr\\Assign && $node->expr instanceof Node\\Scalar\\String_) {\n            return $node->expr->value;\n        }\n\n        if ($node instanceof Node\\Expr\\ClassConstFetch) {\n            try {\n                $reflection = new \\ReflectionClass($node->class->toString());\n                $constant = $reflection->getReflectionConstant($node->name->toString());\n                if (false !== $constant && \\is_string($constant->getValue())) {\n                    return $constant->getValue();\n                }\n            } catch (\\ReflectionException) {\n            }\n        }\n\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor\\Visitor;\n\nuse PhpParser\\Node;\nuse PhpParser\\NodeVisitor;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n *\n * Code mostly comes from https://github.com/php-translation/extractor/blob/master/src/Visitor/Php/Symfony/Constraint.php\n */\nfinal class ConstraintVisitor extends AbstractVisitor implements NodeVisitor\n{\n    public function __construct(\n        private readonly array $constraintClassNames = []\n    ) {\n    }\n\n    public function beforeTraverse(array $nodes): ?Node\n    {\n        return null;\n    }\n\n    public function enterNode(Node $node): ?Node\n    {\n        return null;\n    }\n\n    public function leaveNode(Node $node): ?Node\n    {\n        if (!$node instanceof Node\\Expr\\New_ && !$node instanceof Node\\Attribute) {\n            return null;\n        }\n\n        $className = $node instanceof Node\\Attribute ? $node->name : $node->class;\n        if (!$className instanceof Node\\Name) {\n            return null;\n        }\n\n        $parts = $className->getParts();\n        $isConstraintClass = false;\n\n        foreach ($parts as $part) {\n            if (\\in_array($part, $this->constraintClassNames, true)) {\n                $isConstraintClass = true;\n\n                break;\n            }\n        }\n\n        if (!$isConstraintClass) {\n            return null;\n        }\n\n        $arg = $node->args[0] ?? null;\n        if (!$arg instanceof Node\\Arg) {\n            return null;\n        }\n\n        if ($this->hasNodeNamedArguments($node)) {\n            $messages = $this->getStringArguments($node, '/message/i', true);\n        } else {\n            if (!$arg->value instanceof Node\\Expr\\Array_) {\n                // There is no way to guess which argument is a message to be translated.\n                return null;\n            }\n\n            $messages = [];\n            $options = $arg->value;\n\n            /** @var Node\\Expr\\ArrayItem $item */\n            foreach ($options->items as $item) {\n                if (!$item->key instanceof Node\\Scalar\\String_) {\n                    continue;\n                }\n\n                if (false === stripos($item->key->value ?? '', 'message')) {\n                    continue;\n                }\n\n                if (!$item->value instanceof Node\\Scalar\\String_) {\n                    continue;\n                }\n\n                $messages[] = $item->value->value;\n\n                break;\n            }\n        }\n\n        foreach ($messages as $message) {\n            $this->addMessageToCatalogue($message, 'validators', $node->getStartLine());\n        }\n\n        return null;\n    }\n\n    public function afterTraverse(array $nodes): ?Node\n    {\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor\\Visitor;\n\nuse PhpParser\\Node;\nuse PhpParser\\NodeVisitor;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nfinal class TransMethodVisitor extends AbstractVisitor implements NodeVisitor\n{\n    public function beforeTraverse(array $nodes): ?Node\n    {\n        return null;\n    }\n\n    public function enterNode(Node $node): ?Node\n    {\n        return null;\n    }\n\n    public function leaveNode(Node $node): ?Node\n    {\n        if (!$node instanceof Node\\Expr\\MethodCall && !$node instanceof Node\\Expr\\FuncCall) {\n            return null;\n        }\n\n        if (!\\is_string($node->name) && !$node->name instanceof Node\\Identifier && !$node->name instanceof Node\\Name) {\n            return null;\n        }\n\n        $name = (string) $node->name;\n\n        if ('trans' === $name || 't' === $name) {\n            $firstNamedArgumentIndex = $this->nodeFirstNamedArgumentIndex($node);\n\n            if (!$messages = $this->getStringArguments($node, 0 < $firstNamedArgumentIndex ? 0 : 'message')) {\n                return null;\n            }\n\n            $domain = $this->getStringArguments($node, 2 < $firstNamedArgumentIndex ? 2 : 'domain')[0] ?? null;\n\n            foreach ($messages as $message) {\n                $this->addMessageToCatalogue($message, $domain, $node->getStartLine());\n            }\n        }\n\n        return null;\n    }\n\n    public function afterTraverse(array $nodes): ?Node\n    {\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Extractor\\Visitor;\n\nuse PhpParser\\Node;\nuse PhpParser\\NodeVisitor;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nfinal class TranslatableMessageVisitor extends AbstractVisitor implements NodeVisitor\n{\n    public function beforeTraverse(array $nodes): ?Node\n    {\n        return null;\n    }\n\n    public function enterNode(Node $node): ?Node\n    {\n        return null;\n    }\n\n    public function leaveNode(Node $node): ?Node\n    {\n        if (!$node instanceof Node\\Expr\\New_) {\n            return null;\n        }\n\n        if (!($className = $node->class) instanceof Node\\Name) {\n            return null;\n        }\n\n        if (!\\in_array('TranslatableMessage', $className->getParts(), true)) {\n            return null;\n        }\n\n        $firstNamedArgumentIndex = $this->nodeFirstNamedArgumentIndex($node);\n\n        if (!$messages = $this->getStringArguments($node, 0 < $firstNamedArgumentIndex ? 0 : 'message')) {\n            return null;\n        }\n\n        $domain = $this->getStringArguments($node, 2 < $firstNamedArgumentIndex ? 2 : 'domain')[0] ?? null;\n\n        foreach ($messages as $message) {\n            $this->addMessageToCatalogue($message, $domain, $node->getStartLine());\n        }\n\n        return null;\n    }\n\n    public function afterTraverse(array $nodes): ?Node\n    {\n        return null;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Formatter/IntlFormatter.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Formatter;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\LogicException;\n\n/**\n * @author Guilherme Blanco <guilhermeblanco@hotmail.com>\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass IntlFormatter implements IntlFormatterInterface\n{\n    private bool $hasMessageFormatter;\n    private array $cache = [];\n\n    public function formatIntl(string $message, string $locale, array $parameters = []): string\n    {\n        // MessageFormatter constructor throws an exception if the message is empty\n        if ('' === $message) {\n            return '';\n        }\n\n        if (!$formatter = $this->cache[$locale][$message] ?? null) {\n            if (!$this->hasMessageFormatter ??= class_exists(\\MessageFormatter::class)) {\n                throw new LogicException('Cannot parse message translation: please install the \"intl\" PHP extension or the \"symfony/polyfill-intl-messageformatter\" package.');\n            }\n            try {\n                $this->cache[$locale][$message] = $formatter = new \\MessageFormatter($locale, $message);\n            } catch (\\IntlException $e) {\n                throw new InvalidArgumentException(sprintf('Invalid message format (error #%d): ', intl_get_error_code()).intl_get_error_message(), 0, $e);\n            }\n        }\n\n        foreach ($parameters as $key => $value) {\n            if (\\in_array($key[0] ?? null, ['%', '{'], true)) {\n                unset($parameters[$key]);\n                $parameters[trim($key, '%{ }')] = $value;\n            }\n        }\n\n        if (false === $message = $formatter->format($parameters)) {\n            throw new InvalidArgumentException(sprintf('Unable to format message (error #%s): ', $formatter->getErrorCode()).$formatter->getErrorMessage());\n        }\n\n        return $message;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Formatter/IntlFormatterInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Formatter;\n\n/**\n * Formats ICU message patterns.\n *\n * @author Nicolas Grekas <p@tchwork.com>\n */\ninterface IntlFormatterInterface\n{\n    /**\n     * Formats a localized message using rules defined by ICU MessageFormat.\n     *\n     * @see http://icu-project.org/apiref/icu4c/classMessageFormat.html#details\n     */\n    public function formatIntl(string $message, string $locale, array $parameters = []): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Formatter/MessageFormatter.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Formatter;\n\nuse Symfony\\Component\\Translation\\IdentityTranslator;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n// Help opcache.preload discover always-needed symbols\nclass_exists(IntlFormatter::class);\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass MessageFormatter implements MessageFormatterInterface, IntlFormatterInterface\n{\n    private TranslatorInterface $translator;\n    private IntlFormatterInterface $intlFormatter;\n\n    /**\n     * @param TranslatorInterface|null $translator An identity translator to use as selector for pluralization\n     */\n    public function __construct(?TranslatorInterface $translator = null, ?IntlFormatterInterface $intlFormatter = null)\n    {\n        $this->translator = $translator ?? new IdentityTranslator();\n        $this->intlFormatter = $intlFormatter ?? new IntlFormatter();\n    }\n\n    public function format(string $message, string $locale, array $parameters = []): string\n    {\n        return $this->translator->trans($message, $parameters, null, $locale);\n    }\n\n    public function formatIntl(string $message, string $locale, array $parameters = []): string\n    {\n        return $this->intlFormatter->formatIntl($message, $locale, $parameters);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Formatter/MessageFormatterInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Formatter;\n\n/**\n * @author Guilherme Blanco <guilhermeblanco@hotmail.com>\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\ninterface MessageFormatterInterface\n{\n    /**\n     * Formats a localized message pattern with given arguments.\n     *\n     * @param string $message    The message (may also be an object that can be cast to string)\n     * @param string $locale     The message locale\n     * @param array  $parameters An array of parameters for the message\n     */\n    public function format(string $message, string $locale, array $parameters = []): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/IdentityTranslator.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Contracts\\Translation\\LocaleAwareInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorTrait;\n\n/**\n * IdentityTranslator does not translate anything.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass IdentityTranslator implements TranslatorInterface, LocaleAwareInterface\n{\n    use TranslatorTrait;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/LICENSE",
    "content": "Copyright (c) 2004-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/ArrayLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * ArrayLoader loads translations from a PHP array.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass ArrayLoader implements LoaderInterface\n{\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue\n    {\n        $resource = $this->flatten($resource);\n        $catalogue = new MessageCatalogue($locale);\n        $catalogue->add($resource, $domain);\n\n        return $catalogue;\n    }\n\n    /**\n     * Flattens an nested array of translations.\n     *\n     * The scheme used is:\n     *   'key' => ['key2' => ['key3' => 'value']]\n     * Becomes:\n     *   'key.key2.key3' => 'value'\n     */\n    private function flatten(array $messages): array\n    {\n        $result = [];\n        foreach ($messages as $key => $value) {\n            if (\\is_array($value)) {\n                foreach ($this->flatten($value) as $k => $v) {\n                    if (null !== $v) {\n                        $result[$key.'.'.$k] = $v;\n                    }\n                }\n            } elseif (null !== $value) {\n                $result[$key] = $value;\n            }\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/CsvFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\n\n/**\n * CsvFileLoader loads translations from CSV files.\n *\n * @author Saša Stamenković <umpirsky@gmail.com>\n */\nclass CsvFileLoader extends FileLoader\n{\n    private string $delimiter = ';';\n    private string $enclosure = '\"';\n    private string $escape = '\\\\';\n\n    protected function loadResource(string $resource): array\n    {\n        $messages = [];\n\n        try {\n            $file = new \\SplFileObject($resource, 'rb');\n        } catch (\\RuntimeException $e) {\n            throw new NotFoundResourceException(sprintf('Error opening file \"%s\".', $resource), 0, $e);\n        }\n\n        $file->setFlags(\\SplFileObject::READ_CSV | \\SplFileObject::SKIP_EMPTY);\n        $file->setCsvControl($this->delimiter, $this->enclosure, $this->escape);\n\n        foreach ($file as $data) {\n            if (false === $data) {\n                continue;\n            }\n\n            if (!str_starts_with($data[0], '#') && isset($data[1]) && 2 === \\count($data)) {\n                $messages[$data[0]] = $data[1];\n            }\n        }\n\n        return $messages;\n    }\n\n    /**\n     * Sets the delimiter, enclosure, and escape character for CSV.\n     *\n     * @return void\n     */\n    public function setCsvControl(string $delimiter = ';', string $enclosure = '\"', string $escape = '\\\\')\n    {\n        $this->delimiter = $delimiter;\n        $this->enclosure = $enclosure;\n        $this->escape = $escape;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/FileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Config\\Resource\\FileResource;\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nabstract class FileLoader extends ArrayLoader\n{\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue\n    {\n        if (!stream_is_local($resource)) {\n            throw new InvalidResourceException(sprintf('This is not a local file \"%s\".', $resource));\n        }\n\n        if (!file_exists($resource)) {\n            throw new NotFoundResourceException(sprintf('File \"%s\" not found.', $resource));\n        }\n\n        $messages = $this->loadResource($resource);\n\n        // empty resource\n        $messages ??= [];\n\n        // not an array\n        if (!\\is_array($messages)) {\n            throw new InvalidResourceException(sprintf('Unable to load file \"%s\".', $resource));\n        }\n\n        $catalogue = parent::load($messages, $locale, $domain);\n\n        if (class_exists(FileResource::class)) {\n            $catalogue->addResource(new FileResource($resource));\n        }\n\n        return $catalogue;\n    }\n\n    /**\n     * @throws InvalidResourceException if stream content has an invalid format\n     */\n    abstract protected function loadResource(string $resource): array;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/IcuDatFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Config\\Resource\\FileResource;\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * IcuResFileLoader loads translations from a resource bundle.\n *\n * @author stealth35\n */\nclass IcuDatFileLoader extends IcuResFileLoader\n{\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue\n    {\n        if (!stream_is_local($resource.'.dat')) {\n            throw new InvalidResourceException(sprintf('This is not a local file \"%s\".', $resource));\n        }\n\n        if (!file_exists($resource.'.dat')) {\n            throw new NotFoundResourceException(sprintf('File \"%s\" not found.', $resource));\n        }\n\n        try {\n            $rb = new \\ResourceBundle($locale, $resource);\n        } catch (\\Exception) {\n            $rb = null;\n        }\n\n        if (!$rb) {\n            throw new InvalidResourceException(sprintf('Cannot load resource \"%s\".', $resource));\n        } elseif (intl_is_failure($rb->getErrorCode())) {\n            throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode());\n        }\n\n        $messages = $this->flatten($rb);\n        $catalogue = new MessageCatalogue($locale);\n        $catalogue->add($messages, $domain);\n\n        if (class_exists(FileResource::class)) {\n            $catalogue->addResource(new FileResource($resource.'.dat'));\n        }\n\n        return $catalogue;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/IcuResFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Config\\Resource\\DirectoryResource;\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * IcuResFileLoader loads translations from a resource bundle.\n *\n * @author stealth35\n */\nclass IcuResFileLoader implements LoaderInterface\n{\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue\n    {\n        if (!stream_is_local($resource)) {\n            throw new InvalidResourceException(sprintf('This is not a local file \"%s\".', $resource));\n        }\n\n        if (!is_dir($resource)) {\n            throw new NotFoundResourceException(sprintf('File \"%s\" not found.', $resource));\n        }\n\n        try {\n            $rb = new \\ResourceBundle($locale, $resource);\n        } catch (\\Exception) {\n            $rb = null;\n        }\n\n        if (!$rb) {\n            throw new InvalidResourceException(sprintf('Cannot load resource \"%s\".', $resource));\n        } elseif (intl_is_failure($rb->getErrorCode())) {\n            throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode());\n        }\n\n        $messages = $this->flatten($rb);\n        $catalogue = new MessageCatalogue($locale);\n        $catalogue->add($messages, $domain);\n\n        if (class_exists(DirectoryResource::class)) {\n            $catalogue->addResource(new DirectoryResource($resource));\n        }\n\n        return $catalogue;\n    }\n\n    /**\n     * Flattens an ResourceBundle.\n     *\n     * The scheme used is:\n     *   key { key2 { key3 { \"value\" } } }\n     * Becomes:\n     *   'key.key2.key3' => 'value'\n     *\n     * This function takes an array by reference and will modify it\n     *\n     * @param \\ResourceBundle $rb       The ResourceBundle that will be flattened\n     * @param array           $messages Used internally for recursive calls\n     * @param string|null     $path     Current path being parsed, used internally for recursive calls\n     */\n    protected function flatten(\\ResourceBundle $rb, array &$messages = [], ?string $path = null): array\n    {\n        foreach ($rb as $key => $value) {\n            $nodePath = $path ? $path.'.'.$key : $key;\n            if ($value instanceof \\ResourceBundle) {\n                $this->flatten($value, $messages, $nodePath);\n            } else {\n                $messages[$nodePath] = $value;\n            }\n        }\n\n        return $messages;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/IniFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\n/**\n * IniFileLoader loads translations from an ini file.\n *\n * @author stealth35\n */\nclass IniFileLoader extends FileLoader\n{\n    protected function loadResource(string $resource): array\n    {\n        return parse_ini_file($resource, true);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/JsonFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\n\n/**\n * JsonFileLoader loads translations from an json file.\n *\n * @author singles\n */\nclass JsonFileLoader extends FileLoader\n{\n    protected function loadResource(string $resource): array\n    {\n        $messages = [];\n        if ($data = file_get_contents($resource)) {\n            $messages = json_decode($data, true);\n\n            if (0 < $errorCode = json_last_error()) {\n                throw new InvalidResourceException('Error parsing JSON: '.$this->getJSONErrorMessage($errorCode));\n            }\n        }\n\n        return $messages;\n    }\n\n    /**\n     * Translates JSON_ERROR_* constant into meaningful message.\n     */\n    private function getJSONErrorMessage(int $errorCode): string\n    {\n        return match ($errorCode) {\n            \\JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',\n            \\JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch',\n            \\JSON_ERROR_CTRL_CHAR => 'Unexpected control character found',\n            \\JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',\n            \\JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',\n            default => 'Unknown error',\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/LoaderInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * LoaderInterface is the interface implemented by all translation loaders.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface LoaderInterface\n{\n    /**\n     * Loads a locale.\n     *\n     * @throws NotFoundResourceException when the resource cannot be found\n     * @throws InvalidResourceException  when the resource cannot be loaded\n     */\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/MoFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\n\n/**\n * @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)\n */\nclass MoFileLoader extends FileLoader\n{\n    /**\n     * Magic used for validating the format of an MO file as well as\n     * detecting if the machine used to create that file was little endian.\n     */\n    public const MO_LITTLE_ENDIAN_MAGIC = 0x950412DE;\n\n    /**\n     * Magic used for validating the format of an MO file as well as\n     * detecting if the machine used to create that file was big endian.\n     */\n    public const MO_BIG_ENDIAN_MAGIC = 0xDE120495;\n\n    /**\n     * The size of the header of an MO file in bytes.\n     */\n    public const MO_HEADER_SIZE = 28;\n\n    /**\n     * Parses machine object (MO) format, independent of the machine's endian it\n     * was created on. Both 32bit and 64bit systems are supported.\n     */\n    protected function loadResource(string $resource): array\n    {\n        $stream = fopen($resource, 'r');\n\n        $stat = fstat($stream);\n\n        if ($stat['size'] < self::MO_HEADER_SIZE) {\n            throw new InvalidResourceException('MO stream content has an invalid format.');\n        }\n        $magic = unpack('V1', fread($stream, 4));\n        $magic = hexdec(substr(dechex(current($magic)), -8));\n\n        if (self::MO_LITTLE_ENDIAN_MAGIC == $magic) {\n            $isBigEndian = false;\n        } elseif (self::MO_BIG_ENDIAN_MAGIC == $magic) {\n            $isBigEndian = true;\n        } else {\n            throw new InvalidResourceException('MO stream content has an invalid format.');\n        }\n\n        // formatRevision\n        $this->readLong($stream, $isBigEndian);\n        $count = $this->readLong($stream, $isBigEndian);\n        $offsetId = $this->readLong($stream, $isBigEndian);\n        $offsetTranslated = $this->readLong($stream, $isBigEndian);\n        // sizeHashes\n        $this->readLong($stream, $isBigEndian);\n        // offsetHashes\n        $this->readLong($stream, $isBigEndian);\n\n        $messages = [];\n\n        for ($i = 0; $i < $count; ++$i) {\n            $pluralId = null;\n            $translated = null;\n\n            fseek($stream, $offsetId + $i * 8);\n\n            $length = $this->readLong($stream, $isBigEndian);\n            $offset = $this->readLong($stream, $isBigEndian);\n\n            if ($length < 1) {\n                continue;\n            }\n\n            fseek($stream, $offset);\n            $singularId = fread($stream, $length);\n\n            if (str_contains($singularId, \"\\000\")) {\n                [$singularId, $pluralId] = explode(\"\\000\", $singularId);\n            }\n\n            fseek($stream, $offsetTranslated + $i * 8);\n            $length = $this->readLong($stream, $isBigEndian);\n            $offset = $this->readLong($stream, $isBigEndian);\n\n            if ($length < 1) {\n                continue;\n            }\n\n            fseek($stream, $offset);\n            $translated = fread($stream, $length);\n\n            if (str_contains($translated, \"\\000\")) {\n                $translated = explode(\"\\000\", $translated);\n            }\n\n            $ids = ['singular' => $singularId, 'plural' => $pluralId];\n            $item = compact('ids', 'translated');\n\n            if (!empty($item['ids']['singular'])) {\n                $id = $item['ids']['singular'];\n                if (isset($item['ids']['plural'])) {\n                    $id .= '|'.$item['ids']['plural'];\n                }\n                $messages[$id] = stripcslashes(implode('|', (array) $item['translated']));\n            }\n        }\n\n        fclose($stream);\n\n        return array_filter($messages);\n    }\n\n    /**\n     * Reads an unsigned long from stream respecting endianness.\n     *\n     * @param resource $stream\n     */\n    private function readLong($stream, bool $isBigEndian): int\n    {\n        $result = unpack($isBigEndian ? 'N1' : 'V1', fread($stream, 4));\n        $result = current($result);\n\n        return (int) substr($result, -8);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/PhpFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\n/**\n * PhpFileLoader loads translations from PHP files returning an array of translations.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass PhpFileLoader extends FileLoader\n{\n    private static ?array $cache = [];\n\n    protected function loadResource(string $resource): array\n    {\n        if ([] === self::$cache && \\function_exists('opcache_invalidate') && filter_var(\\ini_get('opcache.enable'), \\FILTER_VALIDATE_BOOL) && (!\\in_array(\\PHP_SAPI, ['cli', 'phpdbg', 'embed'], true) || filter_var(\\ini_get('opcache.enable_cli'), \\FILTER_VALIDATE_BOOL))) {\n            self::$cache = null;\n        }\n\n        if (null === self::$cache) {\n            return require $resource;\n        }\n\n        return self::$cache[$resource] ??= require $resource;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/PoFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\n/**\n * @copyright Copyright (c) 2010, Union of RAD https://github.com/UnionOfRAD/lithium\n * @copyright Copyright (c) 2012, Clemens Tolboom\n */\nclass PoFileLoader extends FileLoader\n{\n    /**\n     * Parses portable object (PO) format.\n     *\n     * From https://www.gnu.org/software/gettext/manual/gettext.html#PO-Files\n     * we should be able to parse files having:\n     *\n     * white-space\n     * #  translator-comments\n     * #. extracted-comments\n     * #: reference...\n     * #, flag...\n     * #| msgid previous-untranslated-string\n     * msgid untranslated-string\n     * msgstr translated-string\n     *\n     * extra or different lines are:\n     *\n     * #| msgctxt previous-context\n     * #| msgid previous-untranslated-string\n     * msgctxt context\n     *\n     * #| msgid previous-untranslated-string-singular\n     * #| msgid_plural previous-untranslated-string-plural\n     * msgid untranslated-string-singular\n     * msgid_plural untranslated-string-plural\n     * msgstr[0] translated-string-case-0\n     * ...\n     * msgstr[N] translated-string-case-n\n     *\n     * The definition states:\n     * - white-space and comments are optional.\n     * - msgid \"\" that an empty singleline defines a header.\n     *\n     * This parser sacrifices some features of the reference implementation the\n     * differences to that implementation are as follows.\n     * - No support for comments spanning multiple lines.\n     * - Translator and extracted comments are treated as being the same type.\n     * - Message IDs are allowed to have other encodings as just US-ASCII.\n     *\n     * Items with an empty id are ignored.\n     */\n    protected function loadResource(string $resource): array\n    {\n        $stream = fopen($resource, 'r');\n\n        $defaults = [\n            'ids' => [],\n            'translated' => null,\n        ];\n\n        $messages = [];\n        $item = $defaults;\n        $flags = [];\n\n        while ($line = fgets($stream)) {\n            $line = trim($line);\n\n            if ('' === $line) {\n                // Whitespace indicated current item is done\n                if (!\\in_array('fuzzy', $flags)) {\n                    $this->addMessage($messages, $item);\n                }\n                $item = $defaults;\n                $flags = [];\n            } elseif (str_starts_with($line, '#,')) {\n                $flags = array_map('trim', explode(',', substr($line, 2)));\n            } elseif (str_starts_with($line, 'msgid \"')) {\n                // We start a new msg so save previous\n                // TODO: this fails when comments or contexts are added\n                $this->addMessage($messages, $item);\n                $item = $defaults;\n                $item['ids']['singular'] = substr($line, 7, -1);\n            } elseif (str_starts_with($line, 'msgstr \"')) {\n                $item['translated'] = substr($line, 8, -1);\n            } elseif ('\"' === $line[0]) {\n                $continues = isset($item['translated']) ? 'translated' : 'ids';\n\n                if (\\is_array($item[$continues])) {\n                    end($item[$continues]);\n                    $item[$continues][key($item[$continues])] .= substr($line, 1, -1);\n                } else {\n                    $item[$continues] .= substr($line, 1, -1);\n                }\n            } elseif (str_starts_with($line, 'msgid_plural \"')) {\n                $item['ids']['plural'] = substr($line, 14, -1);\n            } elseif (str_starts_with($line, 'msgstr[')) {\n                $size = strpos($line, ']');\n                $item['translated'][(int) substr($line, 7, 1)] = substr($line, $size + 3, -1);\n            }\n        }\n        // save last item\n        if (!\\in_array('fuzzy', $flags)) {\n            $this->addMessage($messages, $item);\n        }\n        fclose($stream);\n\n        return $messages;\n    }\n\n    /**\n     * Save a translation item to the messages.\n     *\n     * A .po file could contain by error missing plural indexes. We need to\n     * fix these before saving them.\n     */\n    private function addMessage(array &$messages, array $item): void\n    {\n        if (!empty($item['ids']['singular'])) {\n            $id = stripcslashes($item['ids']['singular']);\n            if (isset($item['ids']['plural'])) {\n                $id .= '|'.stripcslashes($item['ids']['plural']);\n            }\n\n            $translated = (array) $item['translated'];\n            // PO are by definition indexed so sort by index.\n            ksort($translated);\n            // Make sure every index is filled.\n            end($translated);\n            $count = key($translated);\n            // Fill missing spots with '-'.\n            $empties = array_fill(0, $count + 1, '-');\n            $translated += $empties;\n            ksort($translated);\n\n            $messages[$id] = stripcslashes(implode('|', $translated));\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/QtFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Config\\Resource\\FileResource;\nuse Symfony\\Component\\Config\\Util\\XmlUtils;\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\Exception\\RuntimeException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * QtFileLoader loads translations from QT Translations XML files.\n *\n * @author Benjamin Eberlei <kontakt@beberlei.de>\n */\nclass QtFileLoader implements LoaderInterface\n{\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue\n    {\n        if (!class_exists(XmlUtils::class)) {\n            throw new RuntimeException('Loading translations from the QT format requires the Symfony Config component.');\n        }\n\n        if (!stream_is_local($resource)) {\n            throw new InvalidResourceException(sprintf('This is not a local file \"%s\".', $resource));\n        }\n\n        if (!file_exists($resource)) {\n            throw new NotFoundResourceException(sprintf('File \"%s\" not found.', $resource));\n        }\n\n        try {\n            $dom = XmlUtils::loadFile($resource);\n        } catch (\\InvalidArgumentException $e) {\n            throw new InvalidResourceException(sprintf('Unable to load \"%s\".', $resource), $e->getCode(), $e);\n        }\n\n        $internalErrors = libxml_use_internal_errors(true);\n        libxml_clear_errors();\n\n        $xpath = new \\DOMXPath($dom);\n        $nodes = $xpath->evaluate('//TS/context/name[text()=\"'.$domain.'\"]');\n\n        $catalogue = new MessageCatalogue($locale);\n        if (1 == $nodes->length) {\n            $translations = $nodes->item(0)->nextSibling->parentNode->parentNode->getElementsByTagName('message');\n            foreach ($translations as $translation) {\n                $translationValue = (string) $translation->getElementsByTagName('translation')->item(0)->nodeValue;\n\n                if (!empty($translationValue)) {\n                    $catalogue->set(\n                        (string) $translation->getElementsByTagName('source')->item(0)->nodeValue,\n                        $translationValue,\n                        $domain\n                    );\n                }\n            }\n\n            if (class_exists(FileResource::class)) {\n                $catalogue->addResource(new FileResource($resource));\n            }\n        }\n\n        libxml_use_internal_errors($internalErrors);\n\n        return $catalogue;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/XliffFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Config\\Resource\\FileResource;\nuse Symfony\\Component\\Config\\Util\\Exception\\InvalidXmlException;\nuse Symfony\\Component\\Config\\Util\\Exception\\XmlParsingException;\nuse Symfony\\Component\\Config\\Util\\XmlUtils;\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\Exception\\RuntimeException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\nuse Symfony\\Component\\Translation\\Util\\XliffUtils;\n\n/**\n * XliffFileLoader loads translations from XLIFF files.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass XliffFileLoader implements LoaderInterface\n{\n    public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue\n    {\n        if (!class_exists(XmlUtils::class)) {\n            throw new RuntimeException('Loading translations from the Xliff format requires the Symfony Config component.');\n        }\n\n        if (!$this->isXmlString($resource)) {\n            if (!stream_is_local($resource)) {\n                throw new InvalidResourceException(sprintf('This is not a local file \"%s\".', $resource));\n            }\n\n            if (!file_exists($resource)) {\n                throw new NotFoundResourceException(sprintf('File \"%s\" not found.', $resource));\n            }\n\n            if (!is_file($resource)) {\n                throw new InvalidResourceException(sprintf('This is neither a file nor an XLIFF string \"%s\".', $resource));\n            }\n        }\n\n        try {\n            if ($this->isXmlString($resource)) {\n                $dom = XmlUtils::parse($resource);\n            } else {\n                $dom = XmlUtils::loadFile($resource);\n            }\n        } catch (\\InvalidArgumentException|XmlParsingException|InvalidXmlException $e) {\n            throw new InvalidResourceException(sprintf('Unable to load \"%s\": ', $resource).$e->getMessage(), $e->getCode(), $e);\n        }\n\n        if ($errors = XliffUtils::validateSchema($dom)) {\n            throw new InvalidResourceException(sprintf('Invalid resource provided: \"%s\"; Errors: ', $resource).XliffUtils::getErrorsAsString($errors));\n        }\n\n        $catalogue = new MessageCatalogue($locale);\n        $this->extract($dom, $catalogue, $domain);\n\n        if (is_file($resource) && class_exists(FileResource::class)) {\n            $catalogue->addResource(new FileResource($resource));\n        }\n\n        return $catalogue;\n    }\n\n    private function extract(\\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void\n    {\n        $xliffVersion = XliffUtils::getVersionNumber($dom);\n\n        if ('1.2' === $xliffVersion) {\n            $this->extractXliff1($dom, $catalogue, $domain);\n        }\n\n        if ('2.0' === $xliffVersion) {\n            $this->extractXliff2($dom, $catalogue, $domain);\n        }\n    }\n\n    /**\n     * Extract messages and metadata from DOMDocument into a MessageCatalogue.\n     */\n    private function extractXliff1(\\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void\n    {\n        $xml = simplexml_import_dom($dom);\n        $encoding = $dom->encoding ? strtoupper($dom->encoding) : null;\n\n        $namespace = 'urn:oasis:names:tc:xliff:document:1.2';\n        $xml->registerXPathNamespace('xliff', $namespace);\n\n        foreach ($xml->xpath('//xliff:file') as $file) {\n            $fileAttributes = $file->attributes();\n\n            $file->registerXPathNamespace('xliff', $namespace);\n\n            foreach ($file->xpath('.//xliff:prop') as $prop) {\n                $catalogue->setCatalogueMetadata($prop->attributes()['prop-type'], (string) $prop, $domain);\n            }\n\n            foreach ($file->xpath('.//xliff:trans-unit') as $translation) {\n                $attributes = $translation->attributes();\n\n                if (!(isset($attributes['resname']) || isset($translation->source))) {\n                    continue;\n                }\n\n                if (isset($translation->target) && 'needs-translation' === (string) $translation->target->attributes()['state']) {\n                    continue;\n                }\n\n                $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source;\n                // If the xlf file has another encoding specified, try to convert it because\n                // simple_xml will always return utf-8 encoded values\n                $target = $this->utf8ToCharset((string) ($translation->target ?? $translation->source), $encoding);\n\n                $catalogue->set((string) $source, $target, $domain);\n\n                $metadata = [\n                    'source' => (string) $translation->source,\n                    'file' => [\n                        'original' => (string) $fileAttributes['original'],\n                    ],\n                ];\n                if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) {\n                    $metadata['notes'] = $notes;\n                }\n\n                if (isset($translation->target) && $translation->target->attributes()) {\n                    $metadata['target-attributes'] = [];\n                    foreach ($translation->target->attributes() as $key => $value) {\n                        $metadata['target-attributes'][$key] = (string) $value;\n                    }\n                }\n\n                if (isset($attributes['id'])) {\n                    $metadata['id'] = (string) $attributes['id'];\n                }\n\n                $catalogue->setMetadata((string) $source, $metadata, $domain);\n            }\n        }\n    }\n\n    private function extractXliff2(\\DOMDocument $dom, MessageCatalogue $catalogue, string $domain): void\n    {\n        $xml = simplexml_import_dom($dom);\n        $encoding = $dom->encoding ? strtoupper($dom->encoding) : null;\n\n        $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0');\n\n        foreach ($xml->xpath('//xliff:unit') as $unit) {\n            foreach ($unit->segment as $segment) {\n                $attributes = $unit->attributes();\n                $source = $attributes['name'] ?? $segment->source;\n\n                // If the xlf file has another encoding specified, try to convert it because\n                // simple_xml will always return utf-8 encoded values\n                $target = $this->utf8ToCharset((string) ($segment->target ?? $segment->source), $encoding);\n\n                $catalogue->set((string) $source, $target, $domain);\n\n                $metadata = [];\n                if (isset($segment->target) && $segment->target->attributes()) {\n                    $metadata['target-attributes'] = [];\n                    foreach ($segment->target->attributes() as $key => $value) {\n                        $metadata['target-attributes'][$key] = (string) $value;\n                    }\n                }\n\n                if (isset($unit->notes)) {\n                    $metadata['notes'] = [];\n                    foreach ($unit->notes->note as $noteNode) {\n                        $note = [];\n                        foreach ($noteNode->attributes() as $key => $value) {\n                            $note[$key] = (string) $value;\n                        }\n                        $note['content'] = (string) $noteNode;\n                        $metadata['notes'][] = $note;\n                    }\n                }\n\n                $catalogue->setMetadata((string) $source, $metadata, $domain);\n            }\n        }\n    }\n\n    /**\n     * Convert a UTF8 string to the specified encoding.\n     */\n    private function utf8ToCharset(string $content, ?string $encoding = null): string\n    {\n        if ('UTF-8' !== $encoding && !empty($encoding)) {\n            return mb_convert_encoding($content, $encoding, 'UTF-8');\n        }\n\n        return $content;\n    }\n\n    private function parseNotesMetadata(?\\SimpleXMLElement $noteElement = null, ?string $encoding = null): array\n    {\n        $notes = [];\n\n        if (null === $noteElement) {\n            return $notes;\n        }\n\n        /** @var \\SimpleXMLElement $xmlNote */\n        foreach ($noteElement as $xmlNote) {\n            $noteAttributes = $xmlNote->attributes();\n            $note = ['content' => $this->utf8ToCharset((string) $xmlNote, $encoding)];\n            if (isset($noteAttributes['priority'])) {\n                $note['priority'] = (int) $noteAttributes['priority'];\n            }\n\n            if (isset($noteAttributes['from'])) {\n                $note['from'] = (string) $noteAttributes['from'];\n            }\n\n            $notes[] = $note;\n        }\n\n        return $notes;\n    }\n\n    private function isXmlString(string $resource): bool\n    {\n        return str_starts_with($resource, '<?xml');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Loader/YamlFileLoader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Loader;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\nuse Symfony\\Component\\Translation\\Exception\\LogicException;\nuse Symfony\\Component\\Yaml\\Exception\\ParseException;\nuse Symfony\\Component\\Yaml\\Parser as YamlParser;\nuse Symfony\\Component\\Yaml\\Yaml;\n\n/**\n * YamlFileLoader loads translations from Yaml files.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass YamlFileLoader extends FileLoader\n{\n    private YamlParser $yamlParser;\n\n    protected function loadResource(string $resource): array\n    {\n        if (!isset($this->yamlParser)) {\n            if (!class_exists(\\Symfony\\Component\\Yaml\\Parser::class)) {\n                throw new LogicException('Loading translations from the YAML format requires the Symfony Yaml component.');\n            }\n\n            $this->yamlParser = new YamlParser();\n        }\n\n        try {\n            $messages = $this->yamlParser->parseFile($resource, Yaml::PARSE_CONSTANT);\n        } catch (ParseException $e) {\n            throw new InvalidResourceException(sprintf('The file \"%s\" does not contain valid YAML: ', $resource).$e->getMessage(), 0, $e);\n        }\n\n        if (null !== $messages && !\\is_array($messages)) {\n            throw new InvalidResourceException(sprintf('Unable to load file \"%s\".', $resource));\n        }\n\n        return $messages ?: [];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/LocaleSwitcher.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\Routing\\RequestContext;\nuse Symfony\\Contracts\\Translation\\LocaleAwareInterface;\n\n/**\n * @author Kevin Bond <kevinbond@gmail.com>\n */\nclass LocaleSwitcher implements LocaleAwareInterface\n{\n    private string $defaultLocale;\n\n    /**\n     * @param LocaleAwareInterface[] $localeAwareServices\n     */\n    public function __construct(\n        private string $locale,\n        private iterable $localeAwareServices,\n        private ?RequestContext $requestContext = null,\n    ) {\n        $this->defaultLocale = $locale;\n    }\n\n    public function setLocale(string $locale): void\n    {\n        if (class_exists(\\Locale::class)) {\n            \\Locale::setDefault($locale);\n        }\n        $this->locale = $locale;\n        $this->requestContext?->setParameter('_locale', $locale);\n\n        foreach ($this->localeAwareServices as $service) {\n            $service->setLocale($locale);\n        }\n    }\n\n    public function getLocale(): string\n    {\n        return $this->locale;\n    }\n\n    /**\n     * Switch to a new locale, execute a callback, then switch back to the original.\n     *\n     * @template T\n     *\n     * @param callable(string $locale):T $callback\n     *\n     * @return T\n     */\n    public function runWithLocale(string $locale, callable $callback): mixed\n    {\n        $original = $this->getLocale();\n        $this->setLocale($locale);\n\n        try {\n            return $callback($locale);\n        } finally {\n            $this->setLocale($original);\n        }\n    }\n\n    public function reset(): void\n    {\n        $this->setLocale($this->defaultLocale);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/LoggingTranslator.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Contracts\\Translation\\LocaleAwareInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\nclass LoggingTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface\n{\n    private TranslatorInterface $translator;\n    private LoggerInterface $logger;\n\n    /**\n     * @param TranslatorInterface&TranslatorBagInterface&LocaleAwareInterface $translator The translator must implement TranslatorBagInterface\n     */\n    public function __construct(TranslatorInterface $translator, LoggerInterface $logger)\n    {\n        if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) {\n            throw new InvalidArgumentException(sprintf('The Translator \"%s\" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', get_debug_type($translator)));\n        }\n\n        $this->translator = $translator;\n        $this->logger = $logger;\n    }\n\n    public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string\n    {\n        $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale);\n        $this->log($id, $domain, $locale);\n\n        return $trans;\n    }\n\n    /**\n     * @return void\n     */\n    public function setLocale(string $locale)\n    {\n        $prev = $this->translator->getLocale();\n        $this->translator->setLocale($locale);\n        if ($prev === $locale) {\n            return;\n        }\n\n        $this->logger->debug(sprintf('The locale of the translator has changed from \"%s\" to \"%s\".', $prev, $locale));\n    }\n\n    public function getLocale(): string\n    {\n        return $this->translator->getLocale();\n    }\n\n    public function getCatalogue(?string $locale = null): MessageCatalogueInterface\n    {\n        return $this->translator->getCatalogue($locale);\n    }\n\n    public function getCatalogues(): array\n    {\n        return $this->translator->getCatalogues();\n    }\n\n    /**\n     * Gets the fallback locales.\n     */\n    public function getFallbackLocales(): array\n    {\n        if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) {\n            return $this->translator->getFallbackLocales();\n        }\n\n        return [];\n    }\n\n    /**\n     * @return mixed\n     */\n    public function __call(string $method, array $args)\n    {\n        return $this->translator->{$method}(...$args);\n    }\n\n    /**\n     * Logs for missing translations.\n     */\n    private function log(string $id, ?string $domain, ?string $locale): void\n    {\n        $domain ??= 'messages';\n\n        $catalogue = $this->translator->getCatalogue($locale);\n        if ($catalogue->defines($id, $domain)) {\n            return;\n        }\n\n        if ($catalogue->has($id, $domain)) {\n            $this->logger->debug('Translation use fallback catalogue.', ['id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()]);\n        } else {\n            $this->logger->warning('Translation not found.', ['id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()]);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/MessageCatalogue.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\Config\\Resource\\ResourceInterface;\nuse Symfony\\Component\\Translation\\Exception\\LogicException;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface, CatalogueMetadataAwareInterface\n{\n    private array $messages = [];\n    private array $metadata = [];\n    private array $catalogueMetadata = [];\n    private array $resources = [];\n    private string $locale;\n    private ?MessageCatalogueInterface $fallbackCatalogue = null;\n    private ?self $parent = null;\n\n    /**\n     * @param array $messages An array of messages classified by domain\n     */\n    public function __construct(string $locale, array $messages = [])\n    {\n        $this->locale = $locale;\n        $this->messages = $messages;\n    }\n\n    public function getLocale(): string\n    {\n        return $this->locale;\n    }\n\n    public function getDomains(): array\n    {\n        $domains = [];\n\n        foreach ($this->messages as $domain => $messages) {\n            if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {\n                $domain = substr($domain, 0, -\\strlen(self::INTL_DOMAIN_SUFFIX));\n            }\n            $domains[$domain] = $domain;\n        }\n\n        return array_values($domains);\n    }\n\n    public function all(?string $domain = null): array\n    {\n        if (null !== $domain) {\n            // skip messages merge if intl-icu requested explicitly\n            if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {\n                return $this->messages[$domain] ?? [];\n            }\n\n            return ($this->messages[$domain.self::INTL_DOMAIN_SUFFIX] ?? []) + ($this->messages[$domain] ?? []);\n        }\n\n        $allMessages = [];\n\n        foreach ($this->messages as $domain => $messages) {\n            if (str_ends_with($domain, self::INTL_DOMAIN_SUFFIX)) {\n                $domain = substr($domain, 0, -\\strlen(self::INTL_DOMAIN_SUFFIX));\n                $allMessages[$domain] = $messages + ($allMessages[$domain] ?? []);\n            } else {\n                $allMessages[$domain] = ($allMessages[$domain] ?? []) + $messages;\n            }\n        }\n\n        return $allMessages;\n    }\n\n    /**\n     * @return void\n     */\n    public function set(string $id, string $translation, string $domain = 'messages')\n    {\n        $this->add([$id => $translation], $domain);\n    }\n\n    public function has(string $id, string $domain = 'messages'): bool\n    {\n        if (isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) {\n            return true;\n        }\n\n        if (null !== $this->fallbackCatalogue) {\n            return $this->fallbackCatalogue->has($id, $domain);\n        }\n\n        return false;\n    }\n\n    public function defines(string $id, string $domain = 'messages'): bool\n    {\n        return isset($this->messages[$domain][$id]) || isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id]);\n    }\n\n    public function get(string $id, string $domain = 'messages'): string\n    {\n        if (isset($this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id])) {\n            return $this->messages[$domain.self::INTL_DOMAIN_SUFFIX][$id];\n        }\n\n        if (isset($this->messages[$domain][$id])) {\n            return $this->messages[$domain][$id];\n        }\n\n        if (null !== $this->fallbackCatalogue) {\n            return $this->fallbackCatalogue->get($id, $domain);\n        }\n\n        return $id;\n    }\n\n    /**\n     * @return void\n     */\n    public function replace(array $messages, string $domain = 'messages')\n    {\n        unset($this->messages[$domain], $this->messages[$domain.self::INTL_DOMAIN_SUFFIX]);\n\n        $this->add($messages, $domain);\n    }\n\n    /**\n     * @return void\n     */\n    public function add(array $messages, string $domain = 'messages')\n    {\n        $altDomain = str_ends_with($domain, self::INTL_DOMAIN_SUFFIX) ? substr($domain, 0, -\\strlen(self::INTL_DOMAIN_SUFFIX)) : $domain.self::INTL_DOMAIN_SUFFIX;\n        foreach ($messages as $id => $message) {\n            unset($this->messages[$altDomain][$id]);\n            $this->messages[$domain][$id] = $message;\n        }\n\n        if ([] === ($this->messages[$altDomain] ?? null)) {\n            unset($this->messages[$altDomain]);\n        }\n    }\n\n    /**\n     * @return void\n     */\n    public function addCatalogue(MessageCatalogueInterface $catalogue)\n    {\n        if ($catalogue->getLocale() !== $this->locale) {\n            throw new LogicException(sprintf('Cannot add a catalogue for locale \"%s\" as the current locale for this catalogue is \"%s\".', $catalogue->getLocale(), $this->locale));\n        }\n\n        foreach ($catalogue->all() as $domain => $messages) {\n            if ($intlMessages = $catalogue->all($domain.self::INTL_DOMAIN_SUFFIX)) {\n                $this->add($intlMessages, $domain.self::INTL_DOMAIN_SUFFIX);\n                $messages = array_diff_key($messages, $intlMessages);\n            }\n            $this->add($messages, $domain);\n        }\n\n        foreach ($catalogue->getResources() as $resource) {\n            $this->addResource($resource);\n        }\n\n        if ($catalogue instanceof MetadataAwareInterface) {\n            $metadata = $catalogue->getMetadata('', '');\n            $this->addMetadata($metadata);\n        }\n\n        if ($catalogue instanceof CatalogueMetadataAwareInterface) {\n            $catalogueMetadata = $catalogue->getCatalogueMetadata('', '');\n            $this->addCatalogueMetadata($catalogueMetadata);\n        }\n    }\n\n    /**\n     * @return void\n     */\n    public function addFallbackCatalogue(MessageCatalogueInterface $catalogue)\n    {\n        // detect circular references\n        $c = $catalogue;\n        while ($c = $c->getFallbackCatalogue()) {\n            if ($c->getLocale() === $this->getLocale()) {\n                throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale \"%s\".', $catalogue->getLocale()));\n            }\n        }\n\n        $c = $this;\n        do {\n            if ($c->getLocale() === $catalogue->getLocale()) {\n                throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale \"%s\".', $catalogue->getLocale()));\n            }\n\n            foreach ($catalogue->getResources() as $resource) {\n                $c->addResource($resource);\n            }\n        } while ($c = $c->parent);\n\n        $catalogue->parent = $this;\n        $this->fallbackCatalogue = $catalogue;\n\n        foreach ($catalogue->getResources() as $resource) {\n            $this->addResource($resource);\n        }\n    }\n\n    public function getFallbackCatalogue(): ?MessageCatalogueInterface\n    {\n        return $this->fallbackCatalogue;\n    }\n\n    public function getResources(): array\n    {\n        return array_values($this->resources);\n    }\n\n    /**\n     * @return void\n     */\n    public function addResource(ResourceInterface $resource)\n    {\n        $this->resources[$resource->__toString()] = $resource;\n    }\n\n    public function getMetadata(string $key = '', string $domain = 'messages'): mixed\n    {\n        if ('' == $domain) {\n            return $this->metadata;\n        }\n\n        if (isset($this->metadata[$domain])) {\n            if ('' == $key) {\n                return $this->metadata[$domain];\n            }\n\n            if (isset($this->metadata[$domain][$key])) {\n                return $this->metadata[$domain][$key];\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @return void\n     */\n    public function setMetadata(string $key, mixed $value, string $domain = 'messages')\n    {\n        $this->metadata[$domain][$key] = $value;\n    }\n\n    /**\n     * @return void\n     */\n    public function deleteMetadata(string $key = '', string $domain = 'messages')\n    {\n        if ('' == $domain) {\n            $this->metadata = [];\n        } elseif ('' == $key) {\n            unset($this->metadata[$domain]);\n        } else {\n            unset($this->metadata[$domain][$key]);\n        }\n    }\n\n    public function getCatalogueMetadata(string $key = '', string $domain = 'messages'): mixed\n    {\n        if (!$domain) {\n            return $this->catalogueMetadata;\n        }\n\n        if (isset($this->catalogueMetadata[$domain])) {\n            if (!$key) {\n                return $this->catalogueMetadata[$domain];\n            }\n\n            if (isset($this->catalogueMetadata[$domain][$key])) {\n                return $this->catalogueMetadata[$domain][$key];\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @return void\n     */\n    public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages')\n    {\n        $this->catalogueMetadata[$domain][$key] = $value;\n    }\n\n    /**\n     * @return void\n     */\n    public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages')\n    {\n        if (!$domain) {\n            $this->catalogueMetadata = [];\n        } elseif (!$key) {\n            unset($this->catalogueMetadata[$domain]);\n        } else {\n            unset($this->catalogueMetadata[$domain][$key]);\n        }\n    }\n\n    /**\n     * Adds current values with the new values.\n     *\n     * @param array $values Values to add\n     */\n    private function addMetadata(array $values): void\n    {\n        foreach ($values as $domain => $keys) {\n            foreach ($keys as $key => $value) {\n                $this->setMetadata($key, $value, $domain);\n            }\n        }\n    }\n\n    private function addCatalogueMetadata(array $values): void\n    {\n        foreach ($values as $domain => $keys) {\n            foreach ($keys as $key => $value) {\n                $this->setCatalogueMetadata($key, $value, $domain);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/MessageCatalogueInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\Config\\Resource\\ResourceInterface;\n\n/**\n * MessageCatalogueInterface.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface MessageCatalogueInterface\n{\n    public const INTL_DOMAIN_SUFFIX = '+intl-icu';\n\n    /**\n     * Gets the catalogue locale.\n     */\n    public function getLocale(): string;\n\n    /**\n     * Gets the domains.\n     */\n    public function getDomains(): array;\n\n    /**\n     * Gets the messages within a given domain.\n     *\n     * If $domain is null, it returns all messages.\n     */\n    public function all(?string $domain = null): array;\n\n    /**\n     * Sets a message translation.\n     *\n     * @param string $id          The message id\n     * @param string $translation The messages translation\n     * @param string $domain      The domain name\n     *\n     * @return void\n     */\n    public function set(string $id, string $translation, string $domain = 'messages');\n\n    /**\n     * Checks if a message has a translation.\n     *\n     * @param string $id     The message id\n     * @param string $domain The domain name\n     */\n    public function has(string $id, string $domain = 'messages'): bool;\n\n    /**\n     * Checks if a message has a translation (it does not take into account the fallback mechanism).\n     *\n     * @param string $id     The message id\n     * @param string $domain The domain name\n     */\n    public function defines(string $id, string $domain = 'messages'): bool;\n\n    /**\n     * Gets a message translation.\n     *\n     * @param string $id     The message id\n     * @param string $domain The domain name\n     */\n    public function get(string $id, string $domain = 'messages'): string;\n\n    /**\n     * Sets translations for a given domain.\n     *\n     * @param array  $messages An array of translations\n     * @param string $domain   The domain name\n     *\n     * @return void\n     */\n    public function replace(array $messages, string $domain = 'messages');\n\n    /**\n     * Adds translations for a given domain.\n     *\n     * @param array  $messages An array of translations\n     * @param string $domain   The domain name\n     *\n     * @return void\n     */\n    public function add(array $messages, string $domain = 'messages');\n\n    /**\n     * Merges translations from the given Catalogue into the current one.\n     *\n     * The two catalogues must have the same locale.\n     *\n     * @return void\n     */\n    public function addCatalogue(self $catalogue);\n\n    /**\n     * Merges translations from the given Catalogue into the current one\n     * only when the translation does not exist.\n     *\n     * This is used to provide default translations when they do not exist for the current locale.\n     *\n     * @return void\n     */\n    public function addFallbackCatalogue(self $catalogue);\n\n    /**\n     * Gets the fallback catalogue.\n     */\n    public function getFallbackCatalogue(): ?self;\n\n    /**\n     * Returns an array of resources loaded to build this collection.\n     *\n     * @return ResourceInterface[]\n     */\n    public function getResources(): array;\n\n    /**\n     * Adds a resource for this collection.\n     *\n     * @return void\n     */\n    public function addResource(ResourceInterface $resource);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/MetadataAwareInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\n/**\n * This interface is used to get, set, and delete metadata about the translation messages.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface MetadataAwareInterface\n{\n    /**\n     * Gets metadata for the given domain and key.\n     *\n     * Passing an empty domain will return an array with all metadata indexed by\n     * domain and then by key. Passing an empty key will return an array with all\n     * metadata for the given domain.\n     *\n     * @return mixed The value that was set or an array with the domains/keys or null\n     */\n    public function getMetadata(string $key = '', string $domain = 'messages'): mixed;\n\n    /**\n     * Adds metadata to a message domain.\n     *\n     * @return void\n     */\n    public function setMetadata(string $key, mixed $value, string $domain = 'messages');\n\n    /**\n     * Deletes metadata for the given key and domain.\n     *\n     * Passing an empty domain will delete all metadata. Passing an empty key will\n     * delete all metadata for the given domain.\n     *\n     * @return void\n     */\n    public function deleteMetadata(string $key = '', string $domain = 'messages');\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/AbstractProviderFactory.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\Exception\\IncompleteDsnException;\n\nabstract class AbstractProviderFactory implements ProviderFactoryInterface\n{\n    public function supports(Dsn $dsn): bool\n    {\n        return \\in_array($dsn->getScheme(), $this->getSupportedSchemes(), true);\n    }\n\n    /**\n     * @return string[]\n     */\n    abstract protected function getSupportedSchemes(): array;\n\n    protected function getUser(Dsn $dsn): string\n    {\n        return $dsn->getUser() ?? throw new IncompleteDsnException('User is not set.', $dsn->getScheme().'://'.$dsn->getHost());\n    }\n\n    protected function getPassword(Dsn $dsn): string\n    {\n        return $dsn->getPassword() ?? throw new IncompleteDsnException('Password is not set.', $dsn->getOriginalDsn());\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/Dsn.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\MissingRequiredOptionException;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n * @author Oskar Stark <oskarstark@googlemail.com>\n */\nfinal class Dsn\n{\n    private ?string $scheme;\n    private ?string $host;\n    private ?string $user;\n    private ?string $password;\n    private ?int $port;\n    private ?string $path;\n    private array $options = [];\n    private string $originalDsn;\n\n    public function __construct(#[\\SensitiveParameter] string $dsn)\n    {\n        $this->originalDsn = $dsn;\n\n        if (false === $params = parse_url($dsn)) {\n            throw new InvalidArgumentException('The translation provider DSN is invalid.');\n        }\n\n        if (!isset($params['scheme'])) {\n            throw new InvalidArgumentException('The translation provider DSN must contain a scheme.');\n        }\n        $this->scheme = $params['scheme'];\n\n        if (!isset($params['host'])) {\n            throw new InvalidArgumentException('The translation provider DSN must contain a host (use \"default\" by default).');\n        }\n        $this->host = $params['host'];\n\n        $this->user = '' !== ($params['user'] ?? '') ? rawurldecode($params['user']) : null;\n        $this->password = '' !== ($params['pass'] ?? '') ? rawurldecode($params['pass']) : null;\n        $this->port = $params['port'] ?? null;\n        $this->path = $params['path'] ?? null;\n        parse_str($params['query'] ?? '', $this->options);\n    }\n\n    public function getScheme(): string\n    {\n        return $this->scheme;\n    }\n\n    public function getHost(): string\n    {\n        return $this->host;\n    }\n\n    public function getUser(): ?string\n    {\n        return $this->user;\n    }\n\n    public function getPassword(): ?string\n    {\n        return $this->password;\n    }\n\n    public function getPort(?int $default = null): ?int\n    {\n        return $this->port ?? $default;\n    }\n\n    public function getOption(string $key, mixed $default = null): mixed\n    {\n        return $this->options[$key] ?? $default;\n    }\n\n    public function getRequiredOption(string $key): mixed\n    {\n        if (!\\array_key_exists($key, $this->options) || '' === trim($this->options[$key])) {\n            throw new MissingRequiredOptionException($key);\n        }\n\n        return $this->options[$key];\n    }\n\n    public function getOptions(): array\n    {\n        return $this->options;\n    }\n\n    public function getPath(): ?string\n    {\n        return $this->path;\n    }\n\n    public function getOriginalDsn(): string\n    {\n        return $this->originalDsn;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/FilteringProvider.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\TranslatorBag;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\n\n/**\n * Filters domains and locales between the Translator config values and those specific to each provider.\n *\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nclass FilteringProvider implements ProviderInterface\n{\n    private ProviderInterface $provider;\n    private array $locales;\n    private array $domains;\n\n    public function __construct(ProviderInterface $provider, array $locales, array $domains = [])\n    {\n        $this->provider = $provider;\n        $this->locales = $locales;\n        $this->domains = $domains;\n    }\n\n    public function __toString(): string\n    {\n        return (string) $this->provider;\n    }\n\n    public function write(TranslatorBagInterface $translatorBag): void\n    {\n        $this->provider->write($translatorBag);\n    }\n\n    public function read(array $domains, array $locales): TranslatorBag\n    {\n        $domains = !$this->domains ? $domains : array_intersect($this->domains, $domains);\n        $locales = array_intersect($this->locales, $locales);\n\n        return $this->provider->read($domains, $locales);\n    }\n\n    public function delete(TranslatorBagInterface $translatorBag): void\n    {\n        $this->provider->delete($translatorBag);\n    }\n\n    public function getDomains(): array\n    {\n        return $this->domains;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/NullProvider.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\TranslatorBag;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nclass NullProvider implements ProviderInterface\n{\n    public function __toString(): string\n    {\n        return 'null';\n    }\n\n    public function write(TranslatorBagInterface $translatorBag, bool $override = false): void\n    {\n    }\n\n    public function read(array $domains, array $locales): TranslatorBag\n    {\n        return new TranslatorBag();\n    }\n\n    public function delete(TranslatorBagInterface $translatorBag): void\n    {\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/NullProviderFactory.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\Exception\\UnsupportedSchemeException;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nfinal class NullProviderFactory extends AbstractProviderFactory\n{\n    public function create(Dsn $dsn): ProviderInterface\n    {\n        if ('null' === $dsn->getScheme()) {\n            return new NullProvider();\n        }\n\n        throw new UnsupportedSchemeException($dsn, 'null', $this->getSupportedSchemes());\n    }\n\n    protected function getSupportedSchemes(): array\n    {\n        return ['null'];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/ProviderFactoryInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\Exception\\IncompleteDsnException;\nuse Symfony\\Component\\Translation\\Exception\\UnsupportedSchemeException;\n\ninterface ProviderFactoryInterface\n{\n    /**\n     * @throws UnsupportedSchemeException\n     * @throws IncompleteDsnException\n     */\n    public function create(Dsn $dsn): ProviderInterface;\n\n    public function supports(Dsn $dsn): bool;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/ProviderInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\TranslatorBag;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\n\ninterface ProviderInterface extends \\Stringable\n{\n    /**\n     * Translations available in the TranslatorBag only must be created.\n     * Translations available in both the TranslatorBag and on the provider\n     * must be overwritten.\n     * Translations available on the provider only must be kept.\n     */\n    public function write(TranslatorBagInterface $translatorBag): void;\n\n    public function read(array $domains, array $locales): TranslatorBag;\n\n    public function delete(TranslatorBagInterface $translatorBag): void;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/TranslationProviderCollection.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nfinal class TranslationProviderCollection\n{\n    /**\n     * @var array<string, ProviderInterface>\n     */\n    private array $providers;\n\n    /**\n     * @param array<string, ProviderInterface> $providers\n     */\n    public function __construct(iterable $providers)\n    {\n        $this->providers = \\is_array($providers) ? $providers : iterator_to_array($providers);\n    }\n\n    public function __toString(): string\n    {\n        return '['.implode(',', array_keys($this->providers)).']';\n    }\n\n    public function has(string $name): bool\n    {\n        return isset($this->providers[$name]);\n    }\n\n    public function get(string $name): ProviderInterface\n    {\n        if (!$this->has($name)) {\n            throw new InvalidArgumentException(sprintf('Provider \"%s\" not found. Available: \"%s\".', $name, (string) $this));\n        }\n\n        return $this->providers[$name];\n    }\n\n    public function keys(): array\n    {\n        return array_keys($this->providers);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Provider;\n\nuse Symfony\\Component\\Translation\\Exception\\UnsupportedSchemeException;\n\n/**\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nclass TranslationProviderCollectionFactory\n{\n    private iterable $factories;\n    private array $enabledLocales;\n\n    /**\n     * @param iterable<mixed, ProviderFactoryInterface> $factories\n     */\n    public function __construct(iterable $factories, array $enabledLocales)\n    {\n        $this->factories = $factories;\n        $this->enabledLocales = $enabledLocales;\n    }\n\n    public function fromConfig(array $config): TranslationProviderCollection\n    {\n        $providers = [];\n        foreach ($config as $name => $currentConfig) {\n            $providers[$name] = $this->fromDsnObject(\n                new Dsn($currentConfig['dsn']),\n                !$currentConfig['locales'] ? $this->enabledLocales : $currentConfig['locales'],\n                !$currentConfig['domains'] ? [] : $currentConfig['domains']\n            );\n        }\n\n        return new TranslationProviderCollection($providers);\n    }\n\n    public function fromDsnObject(Dsn $dsn, array $locales, array $domains = []): ProviderInterface\n    {\n        foreach ($this->factories as $factory) {\n            if ($factory->supports($dsn)) {\n                return new FilteringProvider($factory->create($dsn), $locales, $domains);\n            }\n        }\n\n        throw new UnsupportedSchemeException($dsn);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/PseudoLocalizationTranslator.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n/**\n * This translator should only be used in a development environment.\n */\nfinal class PseudoLocalizationTranslator implements TranslatorInterface\n{\n    private const EXPANSION_CHARACTER = '~';\n\n    private TranslatorInterface $translator;\n    private bool $accents;\n    private float $expansionFactor;\n    private bool $brackets;\n    private bool $parseHTML;\n\n    /**\n     * @var string[]\n     */\n    private array $localizableHTMLAttributes;\n\n    /**\n     * Available options:\n     *  * accents:\n     *      type: boolean\n     *      default: true\n     *      description: replace ASCII characters of the translated string with accented versions or similar characters\n     *      example: if true, \"foo\" => \"ƒöö\".\n     *\n     *  * expansion_factor:\n     *      type: float\n     *      default: 1\n     *      validation: it must be greater than or equal to 1\n     *      description: expand the translated string by the given factor with spaces and tildes\n     *      example: if 2, \"foo\" => \"~foo ~\"\n     *\n     *  * brackets:\n     *      type: boolean\n     *      default: true\n     *      description: wrap the translated string with brackets\n     *      example: if true, \"foo\" => \"[foo]\"\n     *\n     *  * parse_html:\n     *      type: boolean\n     *      default: false\n     *      description: parse the translated string as HTML - looking for HTML tags has a performance impact but allows to preserve them from alterations - it also allows to compute the visible translated string length which is useful to correctly expand ot when it contains HTML\n     *      warning: unclosed tags are unsupported, they will be fixed (closed) by the parser - eg, \"foo <div>bar\" => \"foo <div>bar</div>\"\n     *\n     *  * localizable_html_attributes:\n     *      type: string[]\n     *      default: []\n     *      description: the list of HTML attributes whose values can be altered - it is only useful when the \"parse_html\" option is set to true\n     *      example: if [\"title\"], and with the \"accents\" option set to true, \"<a href=\"#\" title=\"Go to your profile\">Profile</a>\" => \"<a href=\"#\" title=\"Ĝö ţö ýöûŕ þŕöƒîļé\">Þŕöƒîļé</a>\" - if \"title\" was not in the \"localizable_html_attributes\" list, the title attribute data would be left unchanged.\n     */\n    public function __construct(TranslatorInterface $translator, array $options = [])\n    {\n        $this->translator = $translator;\n        $this->accents = $options['accents'] ?? true;\n\n        if (1.0 > ($this->expansionFactor = $options['expansion_factor'] ?? 1.0)) {\n            throw new \\InvalidArgumentException('The expansion factor must be greater than or equal to 1.');\n        }\n\n        $this->brackets = $options['brackets'] ?? true;\n\n        $this->parseHTML = $options['parse_html'] ?? false;\n        if ($this->parseHTML && !$this->accents && 1.0 === $this->expansionFactor) {\n            $this->parseHTML = false;\n        }\n\n        $this->localizableHTMLAttributes = $options['localizable_html_attributes'] ?? [];\n    }\n\n    public function trans(string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string\n    {\n        $trans = '';\n        $visibleText = '';\n\n        foreach ($this->getParts($this->translator->trans($id, $parameters, $domain, $locale)) as [$visible, $localizable, $text]) {\n            if ($visible) {\n                $visibleText .= $text;\n            }\n\n            if (!$localizable) {\n                $trans .= $text;\n\n                continue;\n            }\n\n            $this->addAccents($trans, $text);\n        }\n\n        $this->expand($trans, $visibleText);\n\n        $this->addBrackets($trans);\n\n        return $trans;\n    }\n\n    public function getLocale(): string\n    {\n        return $this->translator->getLocale();\n    }\n\n    private function getParts(string $originalTrans): array\n    {\n        if (!$this->parseHTML) {\n            return [[true, true, $originalTrans]];\n        }\n\n        $html = mb_encode_numericentity($originalTrans, [0x80, 0x10FFFF, 0, 0x1FFFFF], mb_detect_encoding($originalTrans, null, true) ?: 'UTF-8');\n\n        $useInternalErrors = libxml_use_internal_errors(true);\n\n        $dom = new \\DOMDocument();\n        $dom->loadHTML('<trans>'.$html.'</trans>');\n\n        libxml_clear_errors();\n        libxml_use_internal_errors($useInternalErrors);\n\n        return $this->parseNode($dom->childNodes->item(1)->childNodes->item(0)->childNodes->item(0));\n    }\n\n    private function parseNode(\\DOMNode $node): array\n    {\n        $parts = [];\n\n        foreach ($node->childNodes as $childNode) {\n            if (!$childNode instanceof \\DOMElement) {\n                $parts[] = [true, true, $childNode->nodeValue];\n\n                continue;\n            }\n\n            $parts[] = [false, false, '<'.$childNode->tagName];\n\n            /** @var \\DOMAttr $attribute */\n            foreach ($childNode->attributes as $attribute) {\n                $parts[] = [false, false, ' '.$attribute->nodeName.'=\"'];\n\n                $localizableAttribute = \\in_array($attribute->nodeName, $this->localizableHTMLAttributes, true);\n                foreach (preg_split('/(&(?:amp|quot|#039|lt|gt);+)/', htmlspecialchars($attribute->nodeValue, \\ENT_QUOTES, 'UTF-8'), -1, \\PREG_SPLIT_DELIM_CAPTURE) as $i => $match) {\n                    if ('' === $match) {\n                        continue;\n                    }\n\n                    $parts[] = [false, $localizableAttribute && 0 === $i % 2, $match];\n                }\n\n                $parts[] = [false, false, '\"'];\n            }\n\n            $parts[] = [false, false, '>'];\n\n            $parts = array_merge($parts, $this->parseNode($childNode, $parts));\n\n            $parts[] = [false, false, '</'.$childNode->tagName.'>'];\n        }\n\n        return $parts;\n    }\n\n    private function addAccents(string &$trans, string $text): void\n    {\n        $trans .= $this->accents ? strtr($text, [\n            ' ' => ' ',\n            '!' => '¡',\n            '\"' => '″',\n            '#' => '♯',\n            '$' => '€',\n            '%' => '‰',\n            '&' => '⅋',\n            '\\'' => '´',\n            '(' => '{',\n            ')' => '}',\n            '*' => '⁎',\n            '+' => '⁺',\n            ',' => '،',\n            '-' => '‐',\n            '.' => '·',\n            '/' => '⁄',\n            '0' => '⓪',\n            '1' => '①',\n            '2' => '②',\n            '3' => '③',\n            '4' => '④',\n            '5' => '⑤',\n            '6' => '⑥',\n            '7' => '⑦',\n            '8' => '⑧',\n            '9' => '⑨',\n            ':' => '∶',\n            ';' => '⁏',\n            '<' => '≤',\n            '=' => '≂',\n            '>' => '≥',\n            '?' => '¿',\n            '@' => '՞',\n            'A' => 'Å',\n            'B' => 'Ɓ',\n            'C' => 'Ç',\n            'D' => 'Ð',\n            'E' => 'É',\n            'F' => 'Ƒ',\n            'G' => 'Ĝ',\n            'H' => 'Ĥ',\n            'I' => 'Î',\n            'J' => 'Ĵ',\n            'K' => 'Ķ',\n            'L' => 'Ļ',\n            'M' => 'Ṁ',\n            'N' => 'Ñ',\n            'O' => 'Ö',\n            'P' => 'Þ',\n            'Q' => 'Ǫ',\n            'R' => 'Ŕ',\n            'S' => 'Š',\n            'T' => 'Ţ',\n            'U' => 'Û',\n            'V' => 'Ṽ',\n            'W' => 'Ŵ',\n            'X' => 'Ẋ',\n            'Y' => 'Ý',\n            'Z' => 'Ž',\n            '[' => '⁅',\n            '\\\\' => '∖',\n            ']' => '⁆',\n            '^' => '˄',\n            '_' => '‿',\n            '`' => '‵',\n            'a' => 'å',\n            'b' => 'ƀ',\n            'c' => 'ç',\n            'd' => 'ð',\n            'e' => 'é',\n            'f' => 'ƒ',\n            'g' => 'ĝ',\n            'h' => 'ĥ',\n            'i' => 'î',\n            'j' => 'ĵ',\n            'k' => 'ķ',\n            'l' => 'ļ',\n            'm' => 'ɱ',\n            'n' => 'ñ',\n            'o' => 'ö',\n            'p' => 'þ',\n            'q' => 'ǫ',\n            'r' => 'ŕ',\n            's' => 'š',\n            't' => 'ţ',\n            'u' => 'û',\n            'v' => 'ṽ',\n            'w' => 'ŵ',\n            'x' => 'ẋ',\n            'y' => 'ý',\n            'z' => 'ž',\n            '{' => '(',\n            '|' => '¦',\n            '}' => ')',\n            '~' => '˞',\n        ]) : $text;\n    }\n\n    private function expand(string &$trans, string $visibleText): void\n    {\n        if (1.0 >= $this->expansionFactor) {\n            return;\n        }\n\n        $visibleLength = $this->strlen($visibleText);\n        $missingLength = (int) ceil($visibleLength * $this->expansionFactor) - $visibleLength;\n        if ($this->brackets) {\n            $missingLength -= 2;\n        }\n\n        if (0 >= $missingLength) {\n            return;\n        }\n\n        $words = [];\n        $wordsCount = 0;\n        foreach (preg_split('/ +/', $visibleText, -1, \\PREG_SPLIT_NO_EMPTY) as $word) {\n            $wordLength = $this->strlen($word);\n\n            if ($wordLength >= $missingLength) {\n                continue;\n            }\n\n            if (!isset($words[$wordLength])) {\n                $words[$wordLength] = 0;\n            }\n\n            ++$words[$wordLength];\n            ++$wordsCount;\n        }\n\n        if (!$words) {\n            $trans .= 1 === $missingLength ? self::EXPANSION_CHARACTER : ' '.str_repeat(self::EXPANSION_CHARACTER, $missingLength - 1);\n\n            return;\n        }\n\n        arsort($words, \\SORT_NUMERIC);\n\n        $longestWordLength = max(array_keys($words));\n\n        while (true) {\n            $r = mt_rand(1, $wordsCount);\n\n            foreach ($words as $length => $count) {\n                $r -= $count;\n                if ($r <= 0) {\n                    break;\n                }\n            }\n\n            $trans .= ' '.str_repeat(self::EXPANSION_CHARACTER, $length);\n\n            $missingLength -= $length + 1;\n\n            if (0 === $missingLength) {\n                return;\n            }\n\n            while ($longestWordLength >= $missingLength) {\n                $wordsCount -= $words[$longestWordLength];\n                unset($words[$longestWordLength]);\n\n                if (!$words) {\n                    $trans .= 1 === $missingLength ? self::EXPANSION_CHARACTER : ' '.str_repeat(self::EXPANSION_CHARACTER, $missingLength - 1);\n\n                    return;\n                }\n\n                $longestWordLength = max(array_keys($words));\n            }\n        }\n    }\n\n    private function addBrackets(string &$trans): void\n    {\n        if (!$this->brackets) {\n            return;\n        }\n\n        $trans = '['.$trans.']';\n    }\n\n    private function strlen(string $s): int\n    {\n        return false === ($encoding = mb_detect_encoding($s, null, true)) ? \\strlen($s) : mb_strlen($s, $encoding);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/README.md",
    "content": "Translation Component\n=====================\n\nThe Translation component provides tools to internationalize your application.\n\nGetting Started\n---------------\n\n```\n$ composer require symfony/translation\n```\n\n```php\nuse Symfony\\Component\\Translation\\Translator;\nuse Symfony\\Component\\Translation\\Loader\\ArrayLoader;\n\n$translator = new Translator('fr_FR');\n$translator->addLoader('array', new ArrayLoader());\n$translator->addResource('array', [\n    'Hello World!' => 'Bonjour !',\n], 'fr_FR');\n\necho $translator->trans('Hello World!'); // outputs « Bonjour ! »\n```\n\nSponsor\n-------\n\nHelp Symfony by [sponsoring][1] its development!\n\nResources\n---------\n\n * [Documentation](https://symfony.com/doc/current/translation.html)\n * [Contributing](https://symfony.com/doc/current/contributing/index.html)\n * [Report issues](https://github.com/symfony/symfony/issues) and\n   [send Pull Requests](https://github.com/symfony/symfony/pulls)\n   in the [main Symfony repository](https://github.com/symfony/symfony)\n\n[1]: https://symfony.com/sponsor\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Reader/TranslationReader.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Reader;\n\nuse Symfony\\Component\\Finder\\Finder;\nuse Symfony\\Component\\Translation\\Loader\\LoaderInterface;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * TranslationReader reads translation messages from translation files.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nclass TranslationReader implements TranslationReaderInterface\n{\n    /**\n     * Loaders used for import.\n     *\n     * @var array<string, LoaderInterface>\n     */\n    private array $loaders = [];\n\n    /**\n     * Adds a loader to the translation extractor.\n     *\n     * @param string $format The format of the loader\n     *\n     * @return void\n     */\n    public function addLoader(string $format, LoaderInterface $loader)\n    {\n        $this->loaders[$format] = $loader;\n    }\n\n    /**\n     * @return void\n     */\n    public function read(string $directory, MessageCatalogue $catalogue)\n    {\n        if (!is_dir($directory)) {\n            return;\n        }\n\n        foreach ($this->loaders as $format => $loader) {\n            // load any existing translation files\n            $finder = new Finder();\n            $extension = $catalogue->getLocale().'.'.$format;\n            $files = $finder->files()->name('*.'.$extension)->in($directory);\n            foreach ($files as $file) {\n                $domain = substr($file->getFilename(), 0, -1 * \\strlen($extension) - 1);\n                $catalogue->addCatalogue($loader->load($file->getPathname(), $catalogue->getLocale(), $domain));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Reader/TranslationReaderInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Reader;\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * TranslationReader reads translation messages from translation files.\n *\n * @author Tobias Nyholm <tobias.nyholm@gmail.com>\n */\ninterface TranslationReaderInterface\n{\n    /**\n     * Reads translation messages from a directory to the catalogue.\n     *\n     * @return void\n     */\n    public function read(string $directory, MessageCatalogue $catalogue);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Resources/bin/translation-status.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nif ('cli' !== \\PHP_SAPI) {\n    throw new Exception('This script must be run from the command line.');\n}\n\n$usageInstructions = <<<END\n\n  Usage instructions\n  -------------------------------------------------------------------------------\n\n  $ cd symfony-code-root-directory/\n\n  # show the translation status of all locales\n  $ php translation-status.php\n\n  # only show the translation status of incomplete or erroneous locales\n  $ php translation-status.php --incomplete\n\n  # show the translation status of all locales, all their missing translations and mismatches between trans-unit id and source\n  $ php translation-status.php -v\n\n  # show the status of a single locale\n  $ php translation-status.php fr\n\n  # show the status of a single locale, missing translations and mismatches between trans-unit id and source\n  $ php translation-status.php fr -v\n\nEND;\n\n$config = [\n    // if TRUE, the full list of missing translations is displayed\n    'verbose_output' => false,\n    // NULL = analyze all locales\n    'locale_to_analyze' => null,\n    // append --incomplete to only show incomplete languages\n    'include_completed_languages' => true,\n    // the reference files all the other translations are compared to\n    'original_files' => [\n        'src/Symfony/Component/Form/Resources/translations/validators.en.xlf',\n        'src/Symfony/Component/Security/Core/Resources/translations/security.en.xlf',\n        'src/Symfony/Component/Validator/Resources/translations/validators.en.xlf',\n    ],\n];\n\n$argc = $_SERVER['argc'];\n$argv = $_SERVER['argv'];\n\nif ($argc > 4) {\n    echo str_replace('translation-status.php', $argv[0], $usageInstructions);\n    exit(1);\n}\n\nforeach (array_slice($argv, 1) as $argumentOrOption) {\n    if ('--incomplete' === $argumentOrOption) {\n        $config['include_completed_languages'] = false;\n        continue;\n    }\n\n    if (str_starts_with($argumentOrOption, '-')) {\n        $config['verbose_output'] = true;\n    } else {\n        $config['locale_to_analyze'] = $argumentOrOption;\n    }\n}\n\nforeach ($config['original_files'] as $originalFilePath) {\n    if (!file_exists($originalFilePath)) {\n        echo sprintf('The following file does not exist. Make sure that you execute this command at the root dir of the Symfony code repository.%s  %s', \\PHP_EOL, $originalFilePath);\n        exit(1);\n    }\n}\n\n$totalMissingTranslations = 0;\n$totalTranslationMismatches = 0;\n\nforeach ($config['original_files'] as $originalFilePath) {\n    $translationFilePaths = findTranslationFiles($originalFilePath, $config['locale_to_analyze']);\n    $translationStatus = calculateTranslationStatus($originalFilePath, $translationFilePaths);\n\n    $totalMissingTranslations += array_sum(array_map(fn ($translation) => count($translation['missingKeys']), array_values($translationStatus)));\n    $totalTranslationMismatches += array_sum(array_map(fn ($translation) => count($translation['mismatches']), array_values($translationStatus)));\n\n    printTranslationStatus($originalFilePath, $translationStatus, $config['verbose_output'], $config['include_completed_languages']);\n}\n\nexit($totalTranslationMismatches > 0 ? 1 : 0);\n\nfunction findTranslationFiles($originalFilePath, $localeToAnalyze): array\n{\n    $translations = [];\n\n    $translationsDir = dirname($originalFilePath);\n    $originalFileName = basename($originalFilePath);\n    $translationFileNamePattern = str_replace('.en.', '.*.', $originalFileName);\n\n    $translationFiles = glob($translationsDir.'/'.$translationFileNamePattern, \\GLOB_NOSORT);\n    sort($translationFiles);\n    foreach ($translationFiles as $filePath) {\n        $locale = extractLocaleFromFilePath($filePath);\n\n        if (null !== $localeToAnalyze && $locale !== $localeToAnalyze) {\n            continue;\n        }\n\n        $translations[$locale] = $filePath;\n    }\n\n    return $translations;\n}\n\nfunction calculateTranslationStatus($originalFilePath, $translationFilePaths): array\n{\n    $translationStatus = [];\n    $allTranslationKeys = extractTranslationKeys($originalFilePath);\n\n    foreach ($translationFilePaths as $locale => $translationPath) {\n        $translatedKeys = extractTranslationKeys($translationPath);\n        $missingKeys = array_diff_key($allTranslationKeys, $translatedKeys);\n        $mismatches = findTransUnitMismatches($allTranslationKeys, $translatedKeys);\n\n        $translationStatus[$locale] = [\n            'total' => count($allTranslationKeys),\n            'translated' => count($translatedKeys),\n            'missingKeys' => $missingKeys,\n            'mismatches' => $mismatches,\n        ];\n        $translationStatus[$locale]['is_completed'] = isTranslationCompleted($translationStatus[$locale]);\n    }\n\n    return $translationStatus;\n}\n\nfunction isTranslationCompleted(array $translationStatus): bool\n{\n    return $translationStatus['total'] === $translationStatus['translated'] && 0 === count($translationStatus['mismatches']);\n}\n\nfunction printTranslationStatus($originalFilePath, $translationStatus, $verboseOutput, $includeCompletedLanguages)\n{\n    printTitle($originalFilePath);\n    printTable($translationStatus, $verboseOutput, $includeCompletedLanguages);\n    echo \\PHP_EOL.\\PHP_EOL;\n}\n\nfunction extractLocaleFromFilePath($filePath)\n{\n    $parts = explode('.', $filePath);\n\n    return $parts[count($parts) - 2];\n}\n\nfunction extractTranslationKeys($filePath): array\n{\n    $translationKeys = [];\n    $contents = new \\SimpleXMLElement(file_get_contents($filePath));\n\n    foreach ($contents->file->body->{'trans-unit'} as $translationKey) {\n        $translationId = (string) $translationKey['id'];\n        $translationKey = (string) $translationKey->source;\n\n        $translationKeys[$translationId] = $translationKey;\n    }\n\n    return $translationKeys;\n}\n\n/**\n * Check whether the trans-unit id and source match with the base translation.\n */\nfunction findTransUnitMismatches(array $baseTranslationKeys, array $translatedKeys): array\n{\n    $mismatches = [];\n\n    foreach ($baseTranslationKeys as $translationId => $translationKey) {\n        if (!isset($translatedKeys[$translationId])) {\n            continue;\n        }\n        if ($translatedKeys[$translationId] !== $translationKey) {\n            $mismatches[$translationId] = [\n                'found' => $translatedKeys[$translationId],\n                'expected' => $translationKey,\n            ];\n        }\n    }\n\n    return $mismatches;\n}\n\nfunction printTitle($title)\n{\n    echo $title.\\PHP_EOL;\n    echo str_repeat('=', strlen($title)).\\PHP_EOL.\\PHP_EOL;\n}\n\nfunction printTable($translations, $verboseOutput, bool $includeCompletedLanguages)\n{\n    if (0 === count($translations)) {\n        echo 'No translations found';\n\n        return;\n    }\n    $longestLocaleNameLength = max(array_map('strlen', array_keys($translations)));\n\n    foreach ($translations as $locale => $translation) {\n        if (!$includeCompletedLanguages && $translation['is_completed']) {\n            continue;\n        }\n\n        if ($translation['translated'] > $translation['total']) {\n            textColorRed();\n        } elseif (count($translation['mismatches']) > 0) {\n            textColorRed();\n        } elseif ($translation['is_completed']) {\n            textColorGreen();\n        }\n\n        echo sprintf(\n            '|  Locale: %-'.$longestLocaleNameLength.'s  |  Translated: %2d/%2d  |  Mismatches: %d  |',\n            $locale,\n            $translation['translated'],\n            $translation['total'],\n            count($translation['mismatches'])\n        ).\\PHP_EOL;\n\n        textColorNormal();\n\n        $shouldBeClosed = false;\n        if (true === $verboseOutput && count($translation['missingKeys']) > 0) {\n            echo '|    Missing Translations:'.\\PHP_EOL;\n\n            foreach ($translation['missingKeys'] as $id => $content) {\n                echo sprintf('|      (id=%s) %s', $id, $content).\\PHP_EOL;\n            }\n            $shouldBeClosed = true;\n        }\n        if (true === $verboseOutput && count($translation['mismatches']) > 0) {\n            echo '|    Mismatches between trans-unit id and source:'.\\PHP_EOL;\n\n            foreach ($translation['mismatches'] as $id => $content) {\n                echo sprintf('|      (id=%s) Expected: %s', $id, $content['expected']).\\PHP_EOL;\n                echo sprintf('|              Found:    %s', $content['found']).\\PHP_EOL;\n            }\n            $shouldBeClosed = true;\n        }\n        if ($shouldBeClosed) {\n            echo str_repeat('-', 80).\\PHP_EOL;\n        }\n    }\n}\n\nfunction textColorGreen()\n{\n    echo \"\\033[32m\";\n}\n\nfunction textColorRed()\n{\n    echo \"\\033[31m\";\n}\n\nfunction textColorNormal()\n{\n    echo \"\\033[0m\";\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Resources/data/parents.json",
    "content": "{\n    \"az_Cyrl\": \"root\",\n    \"bs_Cyrl\": \"root\",\n    \"en_150\": \"en_001\",\n    \"en_AG\": \"en_001\",\n    \"en_AI\": \"en_001\",\n    \"en_AT\": \"en_150\",\n    \"en_AU\": \"en_001\",\n    \"en_BB\": \"en_001\",\n    \"en_BE\": \"en_150\",\n    \"en_BM\": \"en_001\",\n    \"en_BS\": \"en_001\",\n    \"en_BW\": \"en_001\",\n    \"en_BZ\": \"en_001\",\n    \"en_CC\": \"en_001\",\n    \"en_CH\": \"en_150\",\n    \"en_CK\": \"en_001\",\n    \"en_CM\": \"en_001\",\n    \"en_CX\": \"en_001\",\n    \"en_CY\": \"en_001\",\n    \"en_DE\": \"en_150\",\n    \"en_DG\": \"en_001\",\n    \"en_DK\": \"en_150\",\n    \"en_DM\": \"en_001\",\n    \"en_ER\": \"en_001\",\n    \"en_FI\": \"en_150\",\n    \"en_FJ\": \"en_001\",\n    \"en_FK\": \"en_001\",\n    \"en_FM\": \"en_001\",\n    \"en_GB\": \"en_001\",\n    \"en_GD\": \"en_001\",\n    \"en_GG\": \"en_001\",\n    \"en_GH\": \"en_001\",\n    \"en_GI\": \"en_001\",\n    \"en_GM\": \"en_001\",\n    \"en_GY\": \"en_001\",\n    \"en_HK\": \"en_001\",\n    \"en_ID\": \"en_001\",\n    \"en_IE\": \"en_001\",\n    \"en_IL\": \"en_001\",\n    \"en_IM\": \"en_001\",\n    \"en_IN\": \"en_001\",\n    \"en_IO\": \"en_001\",\n    \"en_JE\": \"en_001\",\n    \"en_JM\": \"en_001\",\n    \"en_KE\": \"en_001\",\n    \"en_KI\": \"en_001\",\n    \"en_KN\": \"en_001\",\n    \"en_KY\": \"en_001\",\n    \"en_LC\": \"en_001\",\n    \"en_LR\": \"en_001\",\n    \"en_LS\": \"en_001\",\n    \"en_MG\": \"en_001\",\n    \"en_MO\": \"en_001\",\n    \"en_MS\": \"en_001\",\n    \"en_MT\": \"en_001\",\n    \"en_MU\": \"en_001\",\n    \"en_MV\": \"en_001\",\n    \"en_MW\": \"en_001\",\n    \"en_MY\": \"en_001\",\n    \"en_NA\": \"en_001\",\n    \"en_NF\": \"en_001\",\n    \"en_NG\": \"en_001\",\n    \"en_NL\": \"en_150\",\n    \"en_NR\": \"en_001\",\n    \"en_NU\": \"en_001\",\n    \"en_NZ\": \"en_001\",\n    \"en_PG\": \"en_001\",\n    \"en_PK\": \"en_001\",\n    \"en_PN\": \"en_001\",\n    \"en_PW\": \"en_001\",\n    \"en_RW\": \"en_001\",\n    \"en_SB\": \"en_001\",\n    \"en_SC\": \"en_001\",\n    \"en_SD\": \"en_001\",\n    \"en_SE\": \"en_150\",\n    \"en_SG\": \"en_001\",\n    \"en_SH\": \"en_001\",\n    \"en_SI\": \"en_150\",\n    \"en_SL\": \"en_001\",\n    \"en_SS\": \"en_001\",\n    \"en_SX\": \"en_001\",\n    \"en_SZ\": \"en_001\",\n    \"en_TC\": \"en_001\",\n    \"en_TK\": \"en_001\",\n    \"en_TO\": \"en_001\",\n    \"en_TT\": \"en_001\",\n    \"en_TV\": \"en_001\",\n    \"en_TZ\": \"en_001\",\n    \"en_UG\": \"en_001\",\n    \"en_VC\": \"en_001\",\n    \"en_VG\": \"en_001\",\n    \"en_VU\": \"en_001\",\n    \"en_WS\": \"en_001\",\n    \"en_ZA\": \"en_001\",\n    \"en_ZM\": \"en_001\",\n    \"en_ZW\": \"en_001\",\n    \"es_AR\": \"es_419\",\n    \"es_BO\": \"es_419\",\n    \"es_BR\": \"es_419\",\n    \"es_BZ\": \"es_419\",\n    \"es_CL\": \"es_419\",\n    \"es_CO\": \"es_419\",\n    \"es_CR\": \"es_419\",\n    \"es_CU\": \"es_419\",\n    \"es_DO\": \"es_419\",\n    \"es_EC\": \"es_419\",\n    \"es_GT\": \"es_419\",\n    \"es_HN\": \"es_419\",\n    \"es_MX\": \"es_419\",\n    \"es_NI\": \"es_419\",\n    \"es_PA\": \"es_419\",\n    \"es_PE\": \"es_419\",\n    \"es_PR\": \"es_419\",\n    \"es_PY\": \"es_419\",\n    \"es_SV\": \"es_419\",\n    \"es_US\": \"es_419\",\n    \"es_UY\": \"es_419\",\n    \"es_VE\": \"es_419\",\n    \"ff_Adlm\": \"root\",\n    \"hi_Latn\": \"en_IN\",\n    \"ks_Deva\": \"root\",\n    \"nb\": \"no\",\n    \"nn\": \"no\",\n    \"pa_Arab\": \"root\",\n    \"pt_AO\": \"pt_PT\",\n    \"pt_CH\": \"pt_PT\",\n    \"pt_CV\": \"pt_PT\",\n    \"pt_GQ\": \"pt_PT\",\n    \"pt_GW\": \"pt_PT\",\n    \"pt_LU\": \"pt_PT\",\n    \"pt_MO\": \"pt_PT\",\n    \"pt_MZ\": \"pt_PT\",\n    \"pt_ST\": \"pt_PT\",\n    \"pt_TL\": \"pt_PT\",\n    \"sd_Deva\": \"root\",\n    \"sr_Latn\": \"root\",\n    \"uz_Arab\": \"root\",\n    \"uz_Cyrl\": \"root\",\n    \"zh_Hant\": \"root\",\n    \"zh_Hant_MO\": \"zh_Hant_HK\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Resources/functions.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nif (!\\function_exists(t::class)) {\n    /**\n     * @author Nate Wiebe <nate@northern.co>\n     */\n    function t(string $message, array $parameters = [], ?string $domain = null): TranslatableMessage\n    {\n        return new TranslatableMessage($message, $parameters, $domain);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Resources/schemas/xliff-core-1.2-transitional.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\nMay-19-2004:\n- Changed the <choice> for ElemType_header, moving minOccurs=\"0\" maxOccurs=\"unbounded\" from its elements\nto <choice> itself.\n- Added <choice> for ElemType_trans-unit to allow \"any order\" for <context-group>, <count-group>, <prop-group>, <note>, and\n<alt-trans>.\n\nOct-2005\n- updated version info to 1.2\n- equiv-trans attribute to <trans-unit> element\n- merged-trans attribute for <group> element\n- Add the <seg-source> element as optional in the <trans-unit> and <alt-trans> content models, at the same level as <source>\n- Create a new value \"seg\" for the mtype attribute of the <mrk> element\n- Add mid as an optional attribute for the <alt-trans> element\n\nNov-14-2005\n- Changed name attribute for <context-group> from required to optional\n- Added extension point at <xliff>\n\nJan-9-2006\n- Added alttranstype type attribute to <alt-trans>, and values\n\nJan-10-2006\n- Corrected error with overwritten purposeValueList\n- Corrected name=\"AttrType_Version\",  attribute should have been \"name\"\n\n-->\n<xsd:schema xmlns:xlf=\"urn:oasis:names:tc:xliff:document:1.2\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" elementFormDefault=\"qualified\" targetNamespace=\"urn:oasis:names:tc:xliff:document:1.2\" xml:lang=\"en\">\n  <!-- Import for xml:lang and xml:space -->\n  <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" schemaLocation=\"http://www.w3.org/2001/xml.xsd\"/>\n  <!-- Attributes Lists -->\n  <xsd:simpleType name=\"XTend\">\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:pattern value=\"x-[^\\s]+\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"context-typeValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'context-type'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:enumeration value=\"database\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a database content.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"element\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the content of an element within an XML document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"elementtitle\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the name of an element within an XML document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"linenumber\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the line number from the sourcefile (see context-type=\"sourcefile\") where the &lt;source&gt; is found.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"numparams\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a the number of parameters contained within the &lt;source&gt;.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"paramnotes\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates notes pertaining to the parameters in the &lt;source&gt;.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"record\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the content of a record within a database.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"recordtitle\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the name of a record within a database.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"sourcefile\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the original source file in the case that multiple files are merged to form the original file from which the XLIFF file is created. This differs from the original &lt;file&gt; attribute in that this sourcefile is one of many that make up that file.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"count-typeValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'count-type'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"num-usages\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the count units are items that are used X times in a certain context; example: this is a reusable text unit which is used 42 times in other texts.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"repetition\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the count units are translation units existing already in the same document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"total\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a total count.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"InlineDelimitersValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'ctype' when used other elements than &lt;ph&gt; or &lt;x&gt;.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"bold\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a run of bolded text.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"italic\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a run of text in italics.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"underlined\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a run of underlined text.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"link\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a run of hyper-text.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"InlinePlaceholdersValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'ctype' when used with &lt;ph&gt; or &lt;x&gt;.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"image\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a inline image.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pb\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a page break.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"lb\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a line break.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"mime-typeValueList\">\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:pattern value=\"(text|multipart|message|application|image|audio|video|model)(/.+)*\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"datatypeValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'datatype'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"asp\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Active Server Page data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"c\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates C source file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cdf\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Channel Definition Format (CDF) data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cfm\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates ColdFusion data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cpp\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates C++ source file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"csharp\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates C-Sharp data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cstring\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates strings from C, ASM, and driver files data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"csv\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates comma-separated values data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"database\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates database data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"documentfooter\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates portions of document that follows data and contains metadata.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"documentheader\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates portions of document that precedes data and contains metadata.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"filedialog\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates data from standard UI file operations dialogs (e.g., Open, Save, Save As, Export, Import).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"form\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates standard user input screen data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"html\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates HyperText Markup Language (HTML) data - document instance.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"htmlbody\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates content within an HTML document’s &lt;body&gt; element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"ini\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Windows INI file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"interleaf\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Interleaf data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"javaclass\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Java source file data (extension '.java').</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"javapropertyresourcebundle\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Java property resource bundle data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"javalistresourcebundle\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Java list resource bundle data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"javascript\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates JavaScript source file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"jscript\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates JScript source file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"layout\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates information relating to formatting.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"lisp\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates LISP source file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"margin\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates information relating to margin formats.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"menufile\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a file containing menu.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"messagefile\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates numerically identified string table.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"mif\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Maker Interchange Format (MIF) data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"mimetype\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the datatype attribute value is a MIME Type value and is defined in the mime-type attribute.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"mo\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates GNU Machine Object data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"msglib\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Message Librarian strings created by Novell's Message Librarian Tool.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pagefooter\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates information to be displayed at the bottom of each page of a document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pageheader\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates information to be displayed at the top of each page of a document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"parameters\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a list of property values (e.g., settings within INI files or preferences dialog).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pascal\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Pascal source file data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"php\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Hypertext Preprocessor data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"plaintext\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates plain text file (no formatting other than, possibly, wrapping).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"po\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates GNU Portable Object file.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"report\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates dynamically generated user defined document. e.g. Oracle Report, Crystal Report, etc.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"resources\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Windows .NET binary resources.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"resx\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Windows .NET Resources.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rtf\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Rich Text Format (RTF) data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"sgml\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - document instance.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"sgmldtd\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - Document Type Definition (DTD).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"svg\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Scalable Vector Graphic (SVG) data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"vbscript\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates VisualBasic Script source file.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"warning\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates warning message.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"winres\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Windows (Win32) resources (i.e. resources extracted from an RC script, a message file, or a compiled file).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"xhtml\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Extensible HyperText Markup Language (XHTML) data - document instance.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"xml\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Extensible Markup Language (XML) data - document instance.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"xmldtd\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Extensible Markup Language (XML) data - Document Type Definition (DTD).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"xsl\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates Extensible Stylesheet Language (XSL) data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"xul\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates XUL elements.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"mtypeValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'mtype'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"abbrev\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the marked text is an abbreviation.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"abbreviated-form\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.8: A term resulting from the omission of any part of the full term while designating the same concept.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"abbreviation\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.8.1: An abbreviated form of a simple term resulting from the omission of some of its letters (e.g. 'adj.' for 'adjective').</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"acronym\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.8.4: An abbreviated form of a term made up of letters from the full form of a multiword term strung together into a sequence pronounced only syllabically (e.g. 'radar' for 'radio detecting and ranging').</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"appellation\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620: A proper-name term, such as the name of an agency or other proper entity.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"collocation\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.18.1: A recurrent word combination characterized by cohesion in that the components of the collocation must co-occur within an utterance or series of utterances, even though they do not necessarily have to maintain immediate proximity to one another.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"common-name\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.5: A synonym for an international scientific term that is used in general discourse in a given language.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"datetime\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the marked text is a date and/or time.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"equation\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.15: An expression used to represent a concept based on a statement that two mathematical expressions are, for instance, equal as identified by the equal sign (=), or assigned to one another by a similar sign.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"expanded-form\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.7: The complete representation of a term for which there is an abbreviated form.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"formula\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.14: Figures, symbols or the like used to express a concept briefly, such as a mathematical or chemical formula.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"head-term\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.1: The concept designation that has been chosen to head a terminological record.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"initialism\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.8.3: An abbreviated form of a term consisting of some of the initial letters of the words making up a multiword term or the term elements making up a compound term when these letters are pronounced individually (e.g. 'BSE' for 'bovine spongiform encephalopathy').</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"international-scientific-term\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.4: A term that is part of an international scientific nomenclature as adopted by an appropriate scientific body.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"internationalism\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.6: A term that has the same or nearly identical orthographic or phonemic form in many languages.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"logical-expression\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.16: An expression used to represent a concept based on mathematical or logical relations, such as statements of inequality, set relationships, Boolean operations, and the like.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"materials-management-unit\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.17: A unit to track object.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"name\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the marked text is a name.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"near-synonym\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.3: A term that represents the same or a very similar concept as another term in the same language, but for which interchangeability is limited to some contexts and inapplicable in others.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"part-number\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.17.2: A unique alphanumeric designation assigned to an object in a manufacturing system.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"phrase\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the marked text is a phrase.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"phraseological-unit\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.18: Any group of two or more words that form a unit, the meaning of which frequently cannot be deduced based on the combined sense of the words making up the phrase.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"protected\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the marked text should not be translated.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"romanized-form\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.12: A form of a term resulting from an operation whereby non-Latin writing systems are converted to the Latin alphabet.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"seg\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the marked text represents a segment.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"set-phrase\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.18.2: A fixed, lexicalized phrase.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"short-form\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.8.2: A variant of a multiword term that includes fewer words than the full form of the term (e.g. 'Group of Twenty-four' for 'Intergovernmental Group of Twenty-four on International Monetary Affairs').</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"sku\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.17.1: Stock keeping unit, an inventory item identified by a unique alphanumeric designation assigned to an object in an inventory control system.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"standard-text\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.19: A fixed chunk of recurring text.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"symbol\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.13: A designation of a concept by letters, numerals, pictograms or any combination thereof.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"synonym\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.2: Any term that represents the same or a very similar concept as the main entry term in a term entry.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"synonymous-phrase\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.18.3: Phraseological unit in a language that expresses the same semantic content as another phrase in that same language.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"term\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the marked text is a term.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"transcribed-form\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.11: A form of a term resulting from an operation whereby the characters of one writing system are represented by characters from another writing system, taking into account the pronunciation of the characters converted.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"transliterated-form\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.10: A form of a term resulting from an operation whereby the characters of an alphabetic writing system are represented by characters from another alphabetic writing system.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"truncated-term\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.8.5: An abbreviated form of a term resulting from the omission of one or more term elements or syllables (e.g. 'flu' for 'influenza').</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"variant\">\n        <xsd:annotation>\n          <xsd:documentation>ISO-12620 2.1.9: One of the alternate forms of a term.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"restypeValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'restype'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"auto3state\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC AUTO3STATE control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"autocheckbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC AUTOCHECKBOX control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"autoradiobutton\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC AUTORADIOBUTTON control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"bedit\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC BEDIT control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"bitmap\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a bitmap, for example a BITMAP resource in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"button\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a button object, for example a BUTTON control Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"caption\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a caption, such as the caption of a dialog box.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cell\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the cell in a table, for example the content of the &lt;td&gt; element in HTML.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"checkbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates check box object, for example a CHECKBOX control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"checkboxmenuitem\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a menu item with an associated checkbox.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"checkedlistbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a list box, but with a check-box for each item.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"colorchooser\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a color selection dialog.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"combobox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a combination of edit box and listbox object, for example a COMBOBOX control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"comboboxexitem\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an initialization entry of an extended combobox DLGINIT resource block. (code 0x1234).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"comboboxitem\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an initialization entry of a combobox DLGINIT resource block (code 0x0403).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"component\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a UI base class element that cannot be represented by any other element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"contextmenu\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a context menu.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"ctext\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC CTEXT control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cursor\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a cursor, for example a CURSOR resource in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"datetimepicker\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a date/time picker.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"defpushbutton\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC DEFPUSHBUTTON control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"dialog\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a dialog box.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"dlginit\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC DLGINIT resource block.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"edit\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an edit box object, for example an EDIT control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"file\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a filename.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"filechooser\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a file dialog.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"fn\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a footnote.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"font\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a font name.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"footer\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a footer.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"frame\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a frame object.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"grid\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a XUL grid element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"groupbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a groupbox object, for example a GROUPBOX control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"header\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a header item.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"heading\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a heading, such has the content of &lt;h1&gt;, &lt;h2&gt;, etc. in HTML.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"hedit\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC HEDIT control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"hscrollbar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a horizontal scrollbar.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"icon\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an icon, for example an ICON resource in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"iedit\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC IEDIT control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"keywords\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates keyword list, such as the content of the Keywords meta-data in HTML, or a K footnote in WinHelp RTF.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"label\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a label object.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"linklabel\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a label that is also a HTML link (not necessarily a URL).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"list\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a list (a group of list-items, for example an &lt;ol&gt; or &lt;ul&gt; element in HTML).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"listbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a listbox object, for example an LISTBOX control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"listitem\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an list item (an entry in a list).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"ltext\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC LTEXT control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"menu\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a menu (a group of menu-items).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"menubar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a toolbar containing one or more tope level menus.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"menuitem\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a menu item (an entry in a menu).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"menuseparator\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a XUL menuseparator element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"message\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a message, for example an entry in a MESSAGETABLE resource in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"monthcalendar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a calendar control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"numericupdown\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an edit box beside a spin control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"panel\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a catch all for rectangular areas.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"popupmenu\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a standalone menu not necessarily associated with a menubar.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pushbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a pushbox object, for example a PUSHBOX control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pushbutton\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC PUSHBUTTON control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"radio\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a radio button object.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"radiobuttonmenuitem\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a menuitem with associated radio button.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rcdata\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates raw data resources for an application.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"row\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a row in a table.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rtext\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC RTEXT control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"scrollpane\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a user navigable container used to show a portion of a document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"separator\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a generic divider object (e.g. menu group separator).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"shortcut\">\n        <xsd:annotation>\n          <xsd:documentation>Windows accelerators, shortcuts in resource or property files.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"spinner\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a UI control to indicate process activity but not progress.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"splitter\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a splitter bar.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"state3\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC STATE3 control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"statusbar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a window for providing feedback to the users, like 'read-only', etc.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"string\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a string, for example an entry in a STRINGTABLE resource in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"tabcontrol\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a layers of controls with a tab to select layers.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"table\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a display and edits regular two-dimensional tables of cells.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"textbox\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a XUL textbox element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"togglebutton\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a UI button that can be toggled to on or off state.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"toolbar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an array of controls, usually buttons.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"tooltip\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a pop up tool tip text.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"trackbar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a bar with a pointer indicating a position within a certain range.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"tree\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a control that displays a set of hierarchical data.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"uri\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a URI (URN or URL).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"userbutton\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a Windows RC USERBUTTON control.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"usercontrol\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a user-defined control like CONTROL control in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"var\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the text of a variable.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"versioninfo\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates version information about a resource like VERSIONINFO in Windows.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"vscrollbar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a vertical scrollbar.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"window\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a graphical window.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"size-unitValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'size-unit'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"byte\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in 8-bit bytes.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"char\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in Unicode characters.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"col\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in columns. Used for HTML text area.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"cm\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in centimeters.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"dlgunit\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in dialog units, as defined in Windows resources.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"em\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in 'font-size' units (as defined in CSS).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"ex\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in 'x-height' units (as defined in CSS).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"glyph\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in glyphs. A glyph is considered to be one or more combined Unicode characters that represent a single displayable text character. Sometimes referred to as a 'grapheme cluster'</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"in\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in inches.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"mm\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in millimeters.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"percent\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in percentage.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"pixel\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in pixels.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"point\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in point.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"row\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a size in rows. Used for HTML text area.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"stateValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'state'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"final\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the terminating state.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"needs-adaptation\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates only non-textual information needs adaptation.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"needs-l10n\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates both text and non-textual information needs adaptation.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"needs-review-adaptation\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates only non-textual information needs review.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"needs-review-l10n\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates both text and non-textual information needs review.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"needs-review-translation\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that only the text of the item needs to be reviewed.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"needs-translation\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item needs to be translated.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"new\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item is new. For example, translation units that were not in a previous version of the document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"signed-off\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that changes are reviewed and approved.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"translated\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item has been translated.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"state-qualifierValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'state-qualifier'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"exact-match\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates an exact match. An exact match occurs when a source text of a segment is exactly the same as the source text of a segment that was translated previously.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"fuzzy-match\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a fuzzy match. A fuzzy match occurs when a source text of a segment is very similar to the source text of a segment that was translated previously (e.g. when the difference is casing, a few changed words, white-space discripancy, etc.).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"id-match\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a match based on matching IDs (in addition to matching text).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"leveraged-glossary\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a translation derived from a glossary.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"leveraged-inherited\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a translation derived from existing translation.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"leveraged-mt\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a translation derived from machine translation.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"leveraged-repository\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a translation derived from a translation repository.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"leveraged-tm\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates a translation derived from a translation memory.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"mt-suggestion\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the translation is suggested by machine translation.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rejected-grammar\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item has been rejected because of incorrect grammar.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rejected-inaccurate\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item has been rejected because it is incorrect.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rejected-length\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item has been rejected because it is too long or too short.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rejected-spelling\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the item has been rejected because of incorrect spelling.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"tm-suggestion\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates the translation is suggested by translation memory.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"unitValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'unit'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"word\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to words.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"page\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to pages.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"trans-unit\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to &lt;trans-unit&gt; elements.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"bin-unit\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to &lt;bin-unit&gt; elements.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"glyph\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to glyphs.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"item\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to &lt;trans-unit&gt; and/or &lt;bin-unit&gt; elements.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"instance\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to the occurrences of instances defined by the count-type value.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"character\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to characters.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"line\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to lines.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"sentence\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to sentences.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"paragraph\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to paragraphs.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"segment\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to segments.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"placeable\">\n        <xsd:annotation>\n          <xsd:documentation>Refers to placeables (inline elements).</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"priorityValueList\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'priority'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:positiveInteger\">\n      <xsd:enumeration value=\"1\">\n        <xsd:annotation>\n          <xsd:documentation>Highest priority.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"2\">\n        <xsd:annotation>\n          <xsd:documentation>High priority.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"3\">\n        <xsd:annotation>\n          <xsd:documentation>High priority, but not as important as 2.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"4\">\n        <xsd:annotation>\n          <xsd:documentation>High priority, but not as important as 3.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"5\">\n        <xsd:annotation>\n          <xsd:documentation>Medium priority, but more important than 6.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"6\">\n        <xsd:annotation>\n          <xsd:documentation>Medium priority, but less important than 5.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"7\">\n        <xsd:annotation>\n          <xsd:documentation>Low priority, but more important than 8.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"8\">\n        <xsd:annotation>\n          <xsd:documentation>Low priority, but more important than 9.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"9\">\n        <xsd:annotation>\n          <xsd:documentation>Low priority.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"10\">\n        <xsd:annotation>\n          <xsd:documentation>Lowest priority.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"reformatValueYesNo\">\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:enumeration value=\"yes\">\n        <xsd:annotation>\n          <xsd:documentation>This value indicates that all properties can be reformatted. This value must be used alone.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"no\">\n        <xsd:annotation>\n          <xsd:documentation>This value indicates that no properties should be reformatted. This value must be used alone.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"reformatValueList\">\n    <xsd:list>\n      <xsd:simpleType>\n        <xsd:union memberTypes=\"xlf:XTend\">\n          <xsd:simpleType>\n            <xsd:restriction base=\"xsd:string\">\n              <xsd:enumeration value=\"coord\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that all information in the coord attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"coord-x\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the x information in the coord attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"coord-y\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the y information in the coord attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"coord-cx\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the cx information in the coord attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"coord-cy\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the cy information in the coord attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"font\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that all the information in the font attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"font-name\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the name information in the font attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"font-size\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the size information in the font attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"font-weight\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the weight information in the font attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"css-style\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the information in the css-style attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"style\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the information in the style attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n              <xsd:enumeration value=\"ex-style\">\n                <xsd:annotation>\n                  <xsd:documentation>This value indicates that the information in the exstyle attribute can be modified.</xsd:documentation>\n                </xsd:annotation>\n              </xsd:enumeration>\n            </xsd:restriction>\n          </xsd:simpleType>\n        </xsd:union>\n      </xsd:simpleType>\n    </xsd:list>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"purposeValueList\">\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:enumeration value=\"information\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the context is informational in nature, specifying for example, how a term should be translated. Thus, should be displayed to anyone editing the XLIFF document.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"location\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the context-group is used to specify where the term was found in the translatable source. Thus, it is not displayed.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"match\">\n        <xsd:annotation>\n          <xsd:documentation>Indicates that the context information should be used during translation memory lookups. Thus, it is not displayed.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"alttranstypeValueList\">\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:enumeration value=\"proposal\">\n        <xsd:annotation>\n          <xsd:documentation>Represents a translation proposal from a translation memory or other resource.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"previous-version\">\n        <xsd:annotation>\n          <xsd:documentation>Represents a previous version of the target element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"rejected\">\n        <xsd:annotation>\n          <xsd:documentation>Represents a rejected version of the target element.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"reference\">\n        <xsd:annotation>\n          <xsd:documentation>Represents a translation to be used for reference purposes only, for example from a related product or a different language.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n      <xsd:enumeration value=\"accepted\">\n        <xsd:annotation>\n          <xsd:documentation>Represents a proposed translation that was used for the translation of the trans-unit, possibly modified.</xsd:documentation>\n        </xsd:annotation>\n      </xsd:enumeration>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <!-- Other Types -->\n  <xsd:complexType name=\"ElemType_ExternalReference\">\n    <xsd:choice>\n      <xsd:element ref=\"xlf:internal-file\"/>\n      <xsd:element ref=\"xlf:external-file\"/>\n    </xsd:choice>\n  </xsd:complexType>\n  <xsd:simpleType name=\"AttrType_purpose\">\n    <xsd:list>\n      <xsd:simpleType>\n        <xsd:union memberTypes=\"xlf:purposeValueList xlf:XTend\"/>\n      </xsd:simpleType>\n    </xsd:list>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_datatype\">\n    <xsd:union memberTypes=\"xlf:datatypeValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_restype\">\n    <xsd:union memberTypes=\"xlf:restypeValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_alttranstype\">\n    <xsd:union memberTypes=\"xlf:alttranstypeValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_context-type\">\n    <xsd:union memberTypes=\"xlf:context-typeValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_state\">\n    <xsd:union memberTypes=\"xlf:stateValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_state-qualifier\">\n    <xsd:union memberTypes=\"xlf:state-qualifierValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_count-type\">\n    <xsd:union memberTypes=\"xlf:restypeValueList xlf:count-typeValueList xlf:datatypeValueList xlf:stateValueList xlf:state-qualifierValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_InlineDelimiters\">\n    <xsd:union memberTypes=\"xlf:InlineDelimitersValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_InlinePlaceholders\">\n    <xsd:union memberTypes=\"xlf:InlinePlaceholdersValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_size-unit\">\n    <xsd:union memberTypes=\"xlf:size-unitValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_mtype\">\n    <xsd:union memberTypes=\"xlf:mtypeValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_unit\">\n    <xsd:union memberTypes=\"xlf:unitValueList xlf:XTend\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_priority\">\n    <xsd:union memberTypes=\"xlf:priorityValueList\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_reformat\">\n    <xsd:union memberTypes=\"xlf:reformatValueYesNo xlf:reformatValueList\"/>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_YesNo\">\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"yes\"/>\n      <xsd:enumeration value=\"no\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_Position\">\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"open\"/>\n      <xsd:enumeration value=\"close\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_assoc\">\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"preceding\"/>\n      <xsd:enumeration value=\"following\"/>\n      <xsd:enumeration value=\"both\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_annotates\">\n    <xsd:restriction base=\"xsd:NMTOKEN\">\n      <xsd:enumeration value=\"source\"/>\n      <xsd:enumeration value=\"target\"/>\n      <xsd:enumeration value=\"general\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_Coordinates\">\n    <xsd:annotation>\n      <xsd:documentation>Values for the attribute 'coord'.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:pattern value=\"(-?\\d+|#);(-?\\d+|#);(-?\\d+|#);(-?\\d+|#)\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <xsd:simpleType name=\"AttrType_Version\">\n    <xsd:annotation>\n      <xsd:documentation>Version values: 1.0 and 1.1 are allowed for backward compatibility.</xsd:documentation>\n    </xsd:annotation>\n    <xsd:restriction base=\"xsd:string\">\n      <xsd:enumeration value=\"1.2\"/>\n      <xsd:enumeration value=\"1.1\"/>\n      <xsd:enumeration value=\"1.0\"/>\n    </xsd:restriction>\n  </xsd:simpleType>\n  <!-- Groups -->\n  <xsd:group name=\"ElemGroup_TextContent\">\n    <xsd:choice>\n      <xsd:element ref=\"xlf:g\"/>\n      <xsd:element ref=\"xlf:bpt\"/>\n      <xsd:element ref=\"xlf:ept\"/>\n      <xsd:element ref=\"xlf:ph\"/>\n      <xsd:element ref=\"xlf:it\"/>\n      <xsd:element ref=\"xlf:mrk\"/>\n      <xsd:element ref=\"xlf:x\"/>\n      <xsd:element ref=\"xlf:bx\"/>\n      <xsd:element ref=\"xlf:ex\"/>\n    </xsd:choice>\n  </xsd:group>\n  <xsd:attributeGroup name=\"AttrGroup_TextContent\">\n    <xsd:attribute name=\"id\" type=\"xsd:string\" use=\"required\"/>\n    <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n    <xsd:attribute name=\"xid\" type=\"xsd:string\" use=\"optional\"/>\n    <xsd:attribute name=\"equiv-text\" type=\"xsd:string\" use=\"optional\"/>\n    <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n  </xsd:attributeGroup>\n  <!-- XLIFF Structure -->\n  <xsd:element name=\"xliff\">\n    <xsd:complexType>\n      <xsd:sequence maxOccurs=\"unbounded\">\n        <xsd:any maxOccurs=\"unbounded\" minOccurs=\"0\" namespace=\"##other\" processContents=\"skip\"/>\n        <xsd:element ref=\"xlf:file\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"version\" type=\"xlf:AttrType_Version\" use=\"required\"/>\n      <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"file\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:header\"/>\n        <xsd:element ref=\"xlf:body\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"original\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"source-language\" type=\"xsd:language\" use=\"required\"/>\n      <xsd:attribute name=\"datatype\" type=\"xlf:AttrType_datatype\" use=\"required\"/>\n      <xsd:attribute name=\"tool-id\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute default=\"manual\" name=\"tool\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"date\" type=\"xsd:dateTime\" use=\"optional\"/>\n      <xsd:attribute ref=\"xml:space\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"category\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"target-language\" type=\"xsd:language\" use=\"optional\"/>\n      <xsd:attribute name=\"product-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"product-version\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"build-num\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:unique name=\"U_group_id\">\n      <xsd:selector xpath=\".//xlf:group\"/>\n      <xsd:field xpath=\"@id\"/>\n    </xsd:unique>\n    <xsd:key name=\"K_unit_id\">\n      <xsd:selector xpath=\".//xlf:trans-unit|.//xlf:bin-unit\"/>\n      <xsd:field xpath=\"@id\"/>\n    </xsd:key>\n    <xsd:keyref name=\"KR_unit_id\" refer=\"xlf:K_unit_id\">\n      <xsd:selector xpath=\".//bpt|.//ept|.//it|.//ph|.//g|.//x|.//bx|.//ex|.//sub\"/>\n      <xsd:field xpath=\"@xid\"/>\n    </xsd:keyref>\n    <xsd:key name=\"K_tool-id\">\n      <xsd:selector xpath=\"xlf:header/xlf:tool\"/>\n      <xsd:field xpath=\"@tool-id\"/>\n    </xsd:key>\n    <xsd:keyref name=\"KR_file_tool-id\" refer=\"xlf:K_tool-id\">\n      <xsd:selector xpath=\".\"/>\n      <xsd:field xpath=\"@tool-id\"/>\n    </xsd:keyref>\n    <xsd:keyref name=\"KR_phase_tool-id\" refer=\"xlf:K_tool-id\">\n      <xsd:selector xpath=\"xlf:header/xlf:phase-group/xlf:phase\"/>\n      <xsd:field xpath=\"@tool-id\"/>\n    </xsd:keyref>\n    <xsd:keyref name=\"KR_alt-trans_tool-id\" refer=\"xlf:K_tool-id\">\n      <xsd:selector xpath=\".//xlf:trans-unit/xlf:alt-trans\"/>\n      <xsd:field xpath=\"@tool-id\"/>\n    </xsd:keyref>\n    <xsd:key name=\"K_count-group_name\">\n      <xsd:selector xpath=\".//xlf:count-group\"/>\n      <xsd:field xpath=\"@name\"/>\n    </xsd:key>\n    <xsd:unique name=\"U_context-group_name\">\n      <xsd:selector xpath=\".//xlf:context-group\"/>\n      <xsd:field xpath=\"@name\"/>\n    </xsd:unique>\n    <xsd:key name=\"K_phase-name\">\n      <xsd:selector xpath=\"xlf:header/xlf:phase-group/xlf:phase\"/>\n      <xsd:field xpath=\"@phase-name\"/>\n    </xsd:key>\n    <xsd:keyref name=\"KR_phase-name\" refer=\"xlf:K_phase-name\">\n      <xsd:selector xpath=\".//xlf:count|.//xlf:trans-unit|.//xlf:target|.//bin-unit|.//bin-target\"/>\n      <xsd:field xpath=\"@phase-name\"/>\n    </xsd:keyref>\n    <xsd:unique name=\"U_uid\">\n      <xsd:selector xpath=\".//xlf:external-file\"/>\n      <xsd:field xpath=\"@uid\"/>\n    </xsd:unique>\n  </xsd:element>\n  <xsd:element name=\"header\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:element minOccurs=\"0\" name=\"skl\" type=\"xlf:ElemType_ExternalReference\"/>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:phase-group\"/>\n        <xsd:choice maxOccurs=\"unbounded\" minOccurs=\"0\">\n          <xsd:element name=\"glossary\" type=\"xlf:ElemType_ExternalReference\"/>\n          <xsd:element name=\"reference\" type=\"xlf:ElemType_ExternalReference\"/>\n          <xsd:element ref=\"xlf:count-group\"/>\n          <xsd:element ref=\"xlf:prop-group\"/>\n          <xsd:element ref=\"xlf:note\"/>\n          <xsd:element ref=\"xlf:tool\"/>\n        </xsd:choice>\n        <xsd:any maxOccurs=\"unbounded\" minOccurs=\"0\" namespace=\"##other\" processContents=\"skip\"/>\n      </xsd:sequence>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"internal-file\">\n    <xsd:complexType>\n      <xsd:simpleContent>\n        <xsd:extension base=\"xsd:string\">\n          <xsd:attribute name=\"form\" type=\"xsd:string\"/>\n          <xsd:attribute name=\"crc\" type=\"xsd:NMTOKEN\"/>\n        </xsd:extension>\n      </xsd:simpleContent>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"external-file\">\n    <xsd:complexType>\n      <xsd:attribute name=\"href\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:NMTOKEN\"/>\n      <xsd:attribute name=\"uid\" type=\"xsd:NMTOKEN\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"note\">\n    <xsd:complexType>\n      <xsd:simpleContent>\n        <xsd:extension base=\"xsd:string\">\n          <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n          <xsd:attribute default=\"1\" name=\"priority\" type=\"xlf:AttrType_priority\" use=\"optional\"/>\n          <xsd:attribute name=\"from\" type=\"xsd:string\" use=\"optional\"/>\n          <xsd:attribute default=\"general\" name=\"annotates\" type=\"xlf:AttrType_annotates\" use=\"optional\"/>\n        </xsd:extension>\n      </xsd:simpleContent>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"phase-group\">\n    <xsd:complexType>\n      <xsd:sequence maxOccurs=\"unbounded\">\n        <xsd:element ref=\"xlf:phase\"/>\n      </xsd:sequence>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"phase\">\n    <xsd:complexType>\n      <xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element ref=\"xlf:note\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"phase-name\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"process-name\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"company-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"tool-id\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"tool\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"date\" type=\"xsd:dateTime\" use=\"optional\"/>\n      <xsd:attribute name=\"job-id\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"contact-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"contact-email\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"contact-phone\" type=\"xsd:string\" use=\"optional\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"count-group\">\n    <xsd:complexType>\n      <xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element ref=\"xlf:count\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"count\">\n    <xsd:complexType>\n      <xsd:simpleContent>\n        <xsd:extension base=\"xsd:string\">\n          <xsd:attribute name=\"count-type\" type=\"xlf:AttrType_count-type\" use=\"optional\"/>\n          <xsd:attribute name=\"phase-name\" type=\"xsd:string\" use=\"optional\"/>\n          <xsd:attribute default=\"word\" name=\"unit\" type=\"xlf:AttrType_unit\" use=\"optional\"/>\n        </xsd:extension>\n      </xsd:simpleContent>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"context-group\">\n    <xsd:complexType>\n      <xsd:sequence maxOccurs=\"unbounded\">\n        <xsd:element ref=\"xlf:context\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"purpose\" type=\"xlf:AttrType_purpose\" use=\"optional\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"context\">\n    <xsd:complexType>\n      <xsd:simpleContent>\n        <xsd:extension base=\"xsd:string\">\n          <xsd:attribute name=\"context-type\" type=\"xlf:AttrType_context-type\" use=\"required\"/>\n          <xsd:attribute default=\"no\" name=\"match-mandatory\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n          <xsd:attribute name=\"crc\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n        </xsd:extension>\n      </xsd:simpleContent>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"prop-group\">\n    <xsd:complexType>\n      <xsd:sequence maxOccurs=\"unbounded\">\n        <xsd:element ref=\"xlf:prop\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"optional\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"prop\">\n    <xsd:complexType>\n      <xsd:simpleContent>\n        <xsd:extension base=\"xsd:string\">\n          <xsd:attribute name=\"prop-type\" type=\"xsd:string\" use=\"required\"/>\n          <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n        </xsd:extension>\n      </xsd:simpleContent>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"tool\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:sequence>\n        <xsd:any namespace=\"##any\" processContents=\"skip\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"tool-id\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"tool-name\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"tool-version\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"tool-company\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"body\">\n    <xsd:complexType>\n      <xsd:choice maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:group\"/>\n        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:trans-unit\"/>\n        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:bin-unit\"/>\n      </xsd:choice>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"group\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:sequence>\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:context-group\"/>\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:count-group\"/>\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:prop-group\"/>\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:note\"/>\n          <xsd:any maxOccurs=\"unbounded\" minOccurs=\"0\" namespace=\"##other\" processContents=\"skip\"/>\n        </xsd:sequence>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:group\"/>\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:trans-unit\"/>\n          <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:bin-unit\"/>\n        </xsd:choice>\n      </xsd:sequence>\n      <xsd:attribute name=\"id\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"datatype\" type=\"xlf:AttrType_datatype\" use=\"optional\"/>\n      <xsd:attribute default=\"default\" ref=\"xml:space\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"restype\" type=\"xlf:AttrType_restype\" use=\"optional\"/>\n      <xsd:attribute name=\"resname\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"extradata\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"extype\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"help-id\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"menu\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"menu-option\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"menu-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"coord\" type=\"xlf:AttrType_Coordinates\" use=\"optional\"/>\n      <xsd:attribute name=\"font\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"css-style\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"style\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"exstyle\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"translate\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"reformat\" type=\"xlf:AttrType_reformat\" use=\"optional\"/>\n      <xsd:attribute default=\"pixel\" name=\"size-unit\" type=\"xlf:AttrType_size-unit\" use=\"optional\"/>\n      <xsd:attribute name=\"maxwidth\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"minwidth\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"maxheight\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"minheight\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"maxbytes\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"minbytes\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"charclass\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute default=\"no\" name=\"merged-trans\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"trans-unit\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:element ref=\"xlf:source\"/>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:seg-source\"/>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:target\"/>\n        <xsd:choice maxOccurs=\"unbounded\" minOccurs=\"0\">\n          <xsd:element ref=\"xlf:context-group\"/>\n          <xsd:element ref=\"xlf:count-group\"/>\n          <xsd:element ref=\"xlf:prop-group\"/>\n          <xsd:element ref=\"xlf:note\"/>\n          <xsd:element ref=\"xlf:alt-trans\"/>\n        </xsd:choice>\n        <xsd:any maxOccurs=\"unbounded\" minOccurs=\"0\" namespace=\"##other\" processContents=\"skip\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"id\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"approved\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"translate\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"reformat\" type=\"xlf:AttrType_reformat\" use=\"optional\"/>\n      <xsd:attribute default=\"default\" ref=\"xml:space\" use=\"optional\"/>\n      <xsd:attribute name=\"datatype\" type=\"xlf:AttrType_datatype\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"phase-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"restype\" type=\"xlf:AttrType_restype\" use=\"optional\"/>\n      <xsd:attribute name=\"resname\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"extradata\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"extype\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"help-id\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"menu\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"menu-option\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"menu-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"coord\" type=\"xlf:AttrType_Coordinates\" use=\"optional\"/>\n      <xsd:attribute name=\"font\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"css-style\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"style\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"exstyle\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute default=\"pixel\" name=\"size-unit\" type=\"xlf:AttrType_size-unit\" use=\"optional\"/>\n      <xsd:attribute name=\"maxwidth\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"minwidth\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"maxheight\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"minheight\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"maxbytes\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"minbytes\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"charclass\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"merged-trans\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:unique name=\"U_tu_segsrc_mid\">\n      <xsd:selector xpath=\"./xlf:seg-source/xlf:mrk\"/>\n      <xsd:field xpath=\"@mid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_tu_segsrc_mid\" refer=\"xlf:U_tu_segsrc_mid\">\n      <xsd:selector xpath=\"./xlf:target/xlf:mrk|./xlf:alt-trans\"/>\n      <xsd:field xpath=\"@mid\"/>\n    </xsd:keyref>\n  </xsd:element>\n  <xsd:element name=\"source\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:group maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:ElemGroup_TextContent\"/>\n      <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:unique name=\"U_source_bpt_rid\">\n      <xsd:selector xpath=\".//xlf:bpt\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_source_ept_rid\" refer=\"xlf:U_source_bpt_rid\">\n      <xsd:selector xpath=\".//xlf:ept\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:keyref>\n    <xsd:unique name=\"U_source_bx_rid\">\n      <xsd:selector xpath=\".//xlf:bx\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_source_ex_rid\" refer=\"xlf:U_source_bx_rid\">\n      <xsd:selector xpath=\".//xlf:ex\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:keyref>\n  </xsd:element>\n  <xsd:element name=\"seg-source\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:group maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:ElemGroup_TextContent\"/>\n      <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:unique name=\"U_segsrc_bpt_rid\">\n      <xsd:selector xpath=\".//xlf:bpt\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_segsrc_ept_rid\" refer=\"xlf:U_segsrc_bpt_rid\">\n      <xsd:selector xpath=\".//xlf:ept\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:keyref>\n    <xsd:unique name=\"U_segsrc_bx_rid\">\n      <xsd:selector xpath=\".//xlf:bx\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_segsrc_ex_rid\" refer=\"xlf:U_segsrc_bx_rid\">\n      <xsd:selector xpath=\".//xlf:ex\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:keyref>\n  </xsd:element>\n  <xsd:element name=\"target\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:group maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:ElemGroup_TextContent\"/>\n      <xsd:attribute name=\"state\" type=\"xlf:AttrType_state\" use=\"optional\"/>\n      <xsd:attribute name=\"state-qualifier\" type=\"xlf:AttrType_state-qualifier\" use=\"optional\"/>\n      <xsd:attribute name=\"phase-name\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"restype\" type=\"xlf:AttrType_restype\" use=\"optional\"/>\n      <xsd:attribute name=\"resname\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"coord\" type=\"xlf:AttrType_Coordinates\" use=\"optional\"/>\n      <xsd:attribute name=\"font\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"css-style\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"style\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"exstyle\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"equiv-trans\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:unique name=\"U_target_bpt_rid\">\n      <xsd:selector xpath=\".//xlf:bpt\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_target_ept_rid\" refer=\"xlf:U_target_bpt_rid\">\n      <xsd:selector xpath=\".//xlf:ept\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:keyref>\n    <xsd:unique name=\"U_target_bx_rid\">\n      <xsd:selector xpath=\".//xlf:bx\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_target_ex_rid\" refer=\"xlf:U_target_bx_rid\">\n      <xsd:selector xpath=\".//xlf:ex\"/>\n      <xsd:field xpath=\"@rid\"/>\n    </xsd:keyref>\n  </xsd:element>\n  <xsd:element name=\"alt-trans\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:source\"/>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:seg-source\"/>\n        <xsd:element maxOccurs=\"unbounded\" ref=\"xlf:target\"/>\n        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:context-group\"/>\n        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:prop-group\"/>\n        <xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:note\"/>\n        <xsd:any maxOccurs=\"unbounded\" minOccurs=\"0\" namespace=\"##other\" processContents=\"skip\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"match-quality\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"tool-id\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"tool\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xsd:attribute name=\"origin\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"datatype\" type=\"xlf:AttrType_datatype\" use=\"optional\"/>\n      <xsd:attribute default=\"default\" ref=\"xml:space\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"restype\" type=\"xlf:AttrType_restype\" use=\"optional\"/>\n      <xsd:attribute name=\"resname\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"extradata\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"extype\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"help-id\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"menu\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"menu-option\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"menu-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"mid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"coord\" type=\"xlf:AttrType_Coordinates\" use=\"optional\"/>\n      <xsd:attribute name=\"font\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"css-style\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"style\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"exstyle\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"phase-name\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute default=\"proposal\" name=\"alttranstype\" type=\"xlf:AttrType_alttranstype\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n    <xsd:unique name=\"U_at_segsrc_mid\">\n      <xsd:selector xpath=\"./xlf:seg-source/xlf:mrk\"/>\n      <xsd:field xpath=\"@mid\"/>\n    </xsd:unique>\n    <xsd:keyref name=\"KR_at_segsrc_mid\" refer=\"xlf:U_at_segsrc_mid\">\n      <xsd:selector xpath=\"./xlf:target/xlf:mrk\"/>\n      <xsd:field xpath=\"@mid\"/>\n    </xsd:keyref>\n  </xsd:element>\n  <xsd:element name=\"bin-unit\">\n    <xsd:complexType>\n      <xsd:sequence>\n        <xsd:element ref=\"xlf:bin-source\"/>\n        <xsd:element minOccurs=\"0\" ref=\"xlf:bin-target\"/>\n        <xsd:choice maxOccurs=\"unbounded\" minOccurs=\"0\">\n          <xsd:element ref=\"xlf:context-group\"/>\n          <xsd:element ref=\"xlf:count-group\"/>\n          <xsd:element ref=\"xlf:prop-group\"/>\n          <xsd:element ref=\"xlf:note\"/>\n          <xsd:element ref=\"xlf:trans-unit\"/>\n        </xsd:choice>\n        <xsd:any maxOccurs=\"unbounded\" minOccurs=\"0\" namespace=\"##other\" processContents=\"skip\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"id\" type=\"xsd:string\" use=\"required\"/>\n      <xsd:attribute name=\"mime-type\" type=\"xlf:mime-typeValueList\" use=\"required\"/>\n      <xsd:attribute name=\"approved\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"translate\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"reformat\" type=\"xlf:AttrType_reformat\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"restype\" type=\"xlf:AttrType_restype\" use=\"optional\"/>\n      <xsd:attribute name=\"resname\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"phase-name\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"bin-source\">\n    <xsd:complexType>\n      <xsd:choice>\n        <xsd:element ref=\"xlf:internal-file\"/>\n        <xsd:element ref=\"xlf:external-file\"/>\n      </xsd:choice>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"bin-target\">\n    <xsd:complexType>\n      <xsd:choice>\n        <xsd:element ref=\"xlf:internal-file\"/>\n        <xsd:element ref=\"xlf:external-file\"/>\n      </xsd:choice>\n      <xsd:attribute name=\"mime-type\" type=\"xlf:mime-typeValueList\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"state\" type=\"xlf:AttrType_state\" use=\"optional\"/>\n      <xsd:attribute name=\"state-qualifier\" type=\"xlf:AttrType_state-qualifier\" use=\"optional\"/>\n      <xsd:attribute name=\"phase-name\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"restype\" type=\"xlf:AttrType_restype\" use=\"optional\"/>\n      <xsd:attribute name=\"resname\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <!-- Element for inline codes -->\n  <xsd:element name=\"g\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:group maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:ElemGroup_TextContent\"/>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlineDelimiters\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"clone\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"x\">\n    <xsd:complexType>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlinePlaceholders\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"clone\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"bx\">\n    <xsd:complexType>\n      <xsd:attribute name=\"rid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlineDelimiters\" use=\"optional\"/>\n      <xsd:attribute default=\"yes\" name=\"clone\" type=\"xlf:AttrType_YesNo\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"ex\">\n    <xsd:complexType>\n      <xsd:attribute name=\"rid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"ph\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element ref=\"xlf:sub\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlinePlaceholders\" use=\"optional\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"assoc\" type=\"xlf:AttrType_assoc\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"bpt\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element ref=\"xlf:sub\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"rid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlineDelimiters\" use=\"optional\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"ept\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element ref=\"xlf:sub\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"rid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"it\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:sequence maxOccurs=\"unbounded\" minOccurs=\"0\">\n        <xsd:element ref=\"xlf:sub\"/>\n      </xsd:sequence>\n      <xsd:attribute name=\"pos\" type=\"xlf:AttrType_Position\" use=\"required\"/>\n      <xsd:attribute name=\"rid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlineDelimiters\" use=\"optional\"/>\n      <xsd:attribute name=\"crc\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attributeGroup ref=\"xlf:AttrGroup_TextContent\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"sub\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:group maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:ElemGroup_TextContent\"/>\n      <xsd:attribute name=\"datatype\" type=\"xlf:AttrType_datatype\" use=\"optional\"/>\n      <xsd:attribute name=\"ctype\" type=\"xlf:AttrType_InlineDelimiters\" use=\"optional\"/>\n      <xsd:attribute name=\"xid\" type=\"xsd:string\" use=\"optional\"/>\n    </xsd:complexType>\n  </xsd:element>\n  <xsd:element name=\"mrk\">\n    <xsd:complexType mixed=\"true\">\n      <xsd:group maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"xlf:ElemGroup_TextContent\"/>\n      <xsd:attribute name=\"mtype\" type=\"xlf:AttrType_mtype\" use=\"required\"/>\n      <xsd:attribute name=\"mid\" type=\"xsd:NMTOKEN\" use=\"optional\"/>\n      <xsd:attribute name=\"comment\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:attribute name=\"ts\" type=\"xsd:string\" use=\"optional\"/>\n      <xsd:anyAttribute namespace=\"##any\" processContents=\"skip\"/>\n    </xsd:complexType>\n  </xsd:element>\n</xsd:schema>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    XLIFF Version 2.0\n    OASIS Standard\n    05 August 2014\n    Copyright (c) OASIS Open 2014. All rights reserved.\n    Source: http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/schemas/\n     -->\n<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n    elementFormDefault=\"qualified\"\n    xmlns:xlf=\"urn:oasis:names:tc:xliff:document:2.0\"\n    targetNamespace=\"urn:oasis:names:tc:xliff:document:2.0\">\n\n  <!-- Import -->\n\n  <xs:import namespace=\"http://www.w3.org/XML/1998/namespace\"\n      schemaLocation=\"informativeCopiesOf3rdPartySchemas/w3c/xml.xsd\"/>\n\n  <!-- Element Group -->\n\n  <xs:group name=\"inline\">\n    <xs:choice>\n      <xs:element ref=\"xlf:cp\"/>\n      <xs:element ref=\"xlf:ph\"/>\n      <xs:element ref=\"xlf:pc\"/>\n      <xs:element ref=\"xlf:sc\"/>\n      <xs:element ref=\"xlf:ec\"/>\n      <xs:element ref=\"xlf:mrk\"/>\n      <xs:element ref=\"xlf:sm\"/>\n      <xs:element ref=\"xlf:em\"/>\n    </xs:choice>\n  </xs:group>\n\n  <!-- Attribute Types -->\n\n  <xs:simpleType name=\"yesNo\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"yes\"/>\n      <xs:enumeration value=\"no\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"yesNoFirstNo\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"yes\"/>\n      <xs:enumeration value=\"firstNo\"/>\n      <xs:enumeration value=\"no\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"dirValue\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"ltr\"/>\n      <xs:enumeration value=\"rtl\"/>\n      <xs:enumeration value=\"auto\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"appliesTo\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"source\"/>\n      <xs:enumeration value=\"target\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"userDefinedValue\">\n    <xs:restriction base=\"xs:string\">\n      <xs:pattern value=\"[^\\s:]+:[^\\s:]+\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"attrType_type\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"fmt\"/>\n      <xs:enumeration value=\"ui\"/>\n      <xs:enumeration value=\"quote\"/>\n      <xs:enumeration value=\"link\"/>\n      <xs:enumeration value=\"image\"/>\n      <xs:enumeration value=\"other\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"typeForMrkValues\">\n    <xs:restriction base=\"xs:NMTOKEN\">\n      <xs:enumeration value=\"generic\"/>\n      <xs:enumeration value=\"comment\"/>\n      <xs:enumeration value=\"term\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"attrType_typeForMrk\">\n    <xs:union memberTypes=\"xlf:typeForMrkValues xlf:userDefinedValue\"/>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"priorityValue\">\n    <xs:restriction base=\"xs:positiveInteger\">\n      <xs:minInclusive value=\"1\"/>\n      <xs:maxInclusive value=\"10\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <xs:simpleType name=\"stateType\">\n    <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"initial\"/>\n      <xs:enumeration value=\"translated\"/>\n      <xs:enumeration value=\"reviewed\"/>\n      <xs:enumeration value=\"final\"/>\n    </xs:restriction>\n  </xs:simpleType>\n\n  <!-- Structural Elements -->\n\n  <xs:element name=\"xliff\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:element minOccurs=\"1\" maxOccurs=\"unbounded\" ref=\"xlf:file\"/>\n      </xs:sequence>\n      <xs:attribute name=\"version\" use=\"required\"/>\n      <xs:attribute name=\"srcLang\" use=\"required\"/>\n      <xs:attribute name=\"trgLang\" use=\"optional\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\" default=\"default\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"file\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:skeleton\"/>\n        <xs:any minOccurs=\"0\" maxOccurs=\"unbounded\" namespace=\"##other\"\n            processContents=\"lax\"/>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:notes\"/>\n        <xs:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n          <xs:element ref=\"xlf:unit\"/>\n          <xs:element ref=\"xlf:group\"/>\n        </xs:choice>\n      </xs:sequence>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"canResegment\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"original\" use=\"optional\"/>\n      <xs:attribute name=\"translate\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"srcDir\" use=\"optional\" type=\"xlf:dirValue\" default=\"auto\"/>\n      <xs:attribute name=\"trgDir\" use=\"optional\" type=\"xlf:dirValue\" default=\"auto\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"skeleton\">\n    <xs:complexType mixed=\"true\">\n      <xs:sequence>\n        <xs:any minOccurs=\"0\" maxOccurs=\"unbounded\" namespace=\"##other\"\n            processContents=\"lax\"/>\n      </xs:sequence>\n      <xs:attribute name=\"href\" use=\"optional\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"group\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:any minOccurs=\"0\" maxOccurs=\"unbounded\" namespace=\"##other\"\n            processContents=\"lax\"/>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:notes\"/>\n        <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\n          <xs:element ref=\"xlf:unit\"/>\n          <xs:element ref=\"xlf:group\"/>\n        </xs:choice>\n      </xs:sequence>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"name\" use=\"optional\"/>\n      <xs:attribute name=\"canResegment\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"translate\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"srcDir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:attribute name=\"trgDir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:userDefinedValue\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"unit\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:any minOccurs=\"0\" maxOccurs=\"unbounded\" namespace=\"##other\"\n            processContents=\"lax\"/>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:notes\"/>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:originalData\"/>\n        <xs:choice minOccurs=\"1\" maxOccurs=\"unbounded\">\n          <xs:element ref=\"xlf:segment\"/>\n          <xs:element ref=\"xlf:ignorable\"/>\n        </xs:choice>\n      </xs:sequence>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"name\" use=\"optional\"/>\n      <xs:attribute name=\"canResegment\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"translate\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"srcDir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:attribute name=\"trgDir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:userDefinedValue\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"segment\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:element minOccurs=\"1\" maxOccurs=\"1\" ref=\"xlf:source\"/>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:target\"/>\n      </xs:sequence>\n      <xs:attribute name=\"id\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"canResegment\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"state\" use=\"optional\" type=\"xlf:stateType\" default=\"initial\"/>\n      <xs:attribute name=\"subState\" use=\"optional\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"ignorable\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:element minOccurs=\"1\" maxOccurs=\"1\" ref=\"xlf:source\"/>\n        <xs:element minOccurs=\"0\" maxOccurs=\"1\" ref=\"xlf:target\"/>\n      </xs:sequence>\n      <xs:attribute name=\"id\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"notes\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:element minOccurs=\"1\" maxOccurs=\"unbounded\" ref=\"xlf:note\"/>\n      </xs:sequence>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"note\">\n    <xs:complexType mixed=\"true\">\n      <xs:attribute name=\"id\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"appliesTo\" use=\"optional\" type=\"xlf:appliesTo\"/>\n      <xs:attribute name=\"category\" use=\"optional\"/>\n      <xs:attribute name=\"priority\" use=\"optional\" type=\"xlf:priorityValue\" default=\"1\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"originalData\">\n    <xs:complexType mixed=\"false\">\n      <xs:sequence>\n        <xs:element minOccurs=\"1\" maxOccurs=\"unbounded\" ref=\"xlf:data\"/>\n      </xs:sequence>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"data\">\n    <xs:complexType mixed=\"true\">\n      <xs:sequence>\n        <xs:element minOccurs=\"0\" maxOccurs=\"unbounded\" ref=\"xlf:cp\"/>\n      </xs:sequence>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dir\" use=\"optional\" type=\"xlf:dirValue\" default=\"auto\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\" fixed=\"preserve\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"source\">\n    <xs:complexType mixed=\"true\">\n      <xs:group ref=\"xlf:inline\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n      <xs:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"target\">\n    <xs:complexType mixed=\"true\">\n      <xs:group ref=\"xlf:inline\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n      <xs:attribute ref=\"xml:lang\" use=\"optional\"/>\n      <xs:attribute ref=\"xml:space\" use=\"optional\"/>\n      <xs:attribute name=\"order\" use=\"optional\" type=\"xs:positiveInteger\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <!-- Inline Elements -->\n\n  <xs:element name=\"cp\">\n    <!-- Code Point -->\n    <xs:complexType mixed=\"false\">\n      <xs:attribute name=\"hex\" use=\"required\" type=\"xs:hexBinary\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"ph\">\n    <!-- Placeholder -->\n    <xs:complexType mixed=\"false\">\n      <xs:attribute name=\"canCopy\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canDelete\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canReorder\" use=\"optional\" type=\"xlf:yesNoFirstNo\" default=\"yes\"/>\n      <xs:attribute name=\"copyOf\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"disp\" use=\"optional\"/>\n      <xs:attribute name=\"equiv\" use=\"optional\"/>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dataRef\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"subFlows\" use=\"optional\" type=\"xs:NMTOKENS\"/>\n      <xs:attribute name=\"subType\" use=\"optional\" type=\"xlf:userDefinedValue\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:attrType_type\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"pc\">\n    <!-- Paired Code -->\n    <xs:complexType mixed=\"true\">\n      <xs:group ref=\"xlf:inline\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n      <xs:attribute name=\"canCopy\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canDelete\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canOverlap\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"canReorder\" use=\"optional\" type=\"xlf:yesNoFirstNo\" default=\"yes\"/>\n      <xs:attribute name=\"copyOf\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dispEnd\" use=\"optional\"/>\n      <xs:attribute name=\"dispStart\" use=\"optional\"/>\n      <xs:attribute name=\"equivEnd\" use=\"optional\"/>\n      <xs:attribute name=\"equivStart\" use=\"optional\"/>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dataRefEnd\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dataRefStart\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"subFlowsEnd\" use=\"optional\" type=\"xs:NMTOKENS\"/>\n      <xs:attribute name=\"subFlowsStart\" use=\"optional\" type=\"xs:NMTOKENS\"/>\n      <xs:attribute name=\"subType\" use=\"optional\" type=\"xlf:userDefinedValue\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:attrType_type\"/>\n      <xs:attribute name=\"dir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"sc\">\n    <!-- Start Code -->\n    <xs:complexType mixed=\"false\">\n      <xs:attribute name=\"canCopy\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canDelete\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canOverlap\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canReorder\" use=\"optional\" type=\"xlf:yesNoFirstNo\" default=\"yes\"/>\n      <xs:attribute name=\"copyOf\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dataRef\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:attribute name=\"disp\" use=\"optional\"/>\n      <xs:attribute name=\"equiv\" use=\"optional\"/>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"isolated\" use=\"optional\" type=\"xlf:yesNo\" default=\"no\"/>\n      <xs:attribute name=\"subFlows\" use=\"optional\" type=\"xs:NMTOKENS\"/>\n      <xs:attribute name=\"subType\" use=\"optional\" type=\"xlf:userDefinedValue\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:attrType_type\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"ec\">\n    <!-- End Code -->\n    <xs:complexType mixed=\"false\">\n      <xs:attribute name=\"canCopy\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canDelete\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canOverlap\" use=\"optional\" type=\"xlf:yesNo\" default=\"yes\"/>\n      <xs:attribute name=\"canReorder\" use=\"optional\" type=\"xlf:yesNoFirstNo\" default=\"yes\"/>\n      <xs:attribute name=\"copyOf\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dataRef\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"dir\" use=\"optional\" type=\"xlf:dirValue\"/>\n      <xs:attribute name=\"disp\" use=\"optional\"/>\n      <xs:attribute name=\"equiv\" use=\"optional\"/>\n      <xs:attribute name=\"id\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"isolated\" use=\"optional\" type=\"xlf:yesNo\" default=\"no\"/>\n      <xs:attribute name=\"startRef\" use=\"optional\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"subFlows\" use=\"optional\" type=\"xs:NMTOKENS\"/>\n      <xs:attribute name=\"subType\" use=\"optional\" type=\"xlf:userDefinedValue\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:attrType_type\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"mrk\">\n    <!-- Annotation Marker -->\n    <xs:complexType mixed=\"true\">\n      <xs:group ref=\"xlf:inline\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"translate\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:attrType_typeForMrk\"/>\n      <xs:attribute name=\"ref\" use=\"optional\" type=\"xs:anyURI\"/>\n      <xs:attribute name=\"value\" use=\"optional\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"sm\">\n    <!-- Start Annotation Marker -->\n    <xs:complexType mixed=\"false\">\n      <xs:attribute name=\"id\" use=\"required\" type=\"xs:NMTOKEN\"/>\n      <xs:attribute name=\"translate\" use=\"optional\" type=\"xlf:yesNo\"/>\n      <xs:attribute name=\"type\" use=\"optional\" type=\"xlf:attrType_typeForMrk\"/>\n      <xs:attribute name=\"ref\" use=\"optional\" type=\"xs:anyURI\"/>\n      <xs:attribute name=\"value\" use=\"optional\"/>\n      <xs:anyAttribute namespace=\"##other\" processContents=\"lax\"/>\n    </xs:complexType>\n  </xs:element>\n\n  <xs:element name=\"em\">\n    <!-- End Annotation Marker -->\n    <xs:complexType mixed=\"false\">\n      <xs:attribute name=\"startRef\" use=\"required\" type=\"xs:NMTOKEN\"/>\n    </xs:complexType>\n  </xs:element>\n\n</xs:schema>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Resources/schemas/xml.xsd",
    "content": "<?xml version='1.0'?>\n<?xml-stylesheet href=\"../2008/09/xsd.xsl\" type=\"text/xsl\"?>\n<xs:schema targetNamespace=\"http://www.w3.org/XML/1998/namespace\" \n  xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" \n  xmlns =\"http://www.w3.org/1999/xhtml\"\n  xml:lang=\"en\">\n\n <xs:annotation>\n  <xs:documentation>\n   <div>\n    <h1>About the XML namespace</h1>\n\n    <div class=\"bodytext\">\n     <p>\n\n      This schema document describes the XML namespace, in a form\n      suitable for import by other schema documents.\n     </p>\n     <p>\n      See <a href=\"http://www.w3.org/XML/1998/namespace.html\">\n      http://www.w3.org/XML/1998/namespace.html</a> and\n      <a href=\"http://www.w3.org/TR/REC-xml\">\n      http://www.w3.org/TR/REC-xml</a> for information \n      about this namespace.\n     </p>\n\n     <p>\n      Note that local names in this namespace are intended to be\n      defined only by the World Wide Web Consortium or its subgroups.\n      The names currently defined in this namespace are listed below.\n      They should not be used with conflicting semantics by any Working\n      Group, specification, or document instance.\n     </p>\n     <p>   \n      See further below in this document for more information about <a\n      href=\"#usage\">how to refer to this schema document from your own\n      XSD schema documents</a> and about <a href=\"#nsversioning\">the\n      namespace-versioning policy governing this schema document</a>.\n     </p>\n    </div>\n   </div>\n\n  </xs:documentation>\n </xs:annotation>\n\n <xs:attribute name=\"lang\">\n  <xs:annotation>\n   <xs:documentation>\n    <div>\n     \n      <h3>lang (as an attribute name)</h3>\n      <p>\n\n       denotes an attribute whose value\n       is a language code for the natural language of the content of\n       any element; its value is inherited.  This name is reserved\n       by virtue of its definition in the XML specification.</p>\n     \n    </div>\n    <div>\n     <h4>Notes</h4>\n     <p>\n      Attempting to install the relevant ISO 2- and 3-letter\n      codes as the enumerated possible values is probably never\n      going to be a realistic possibility.  \n     </p>\n     <p>\n\n      See BCP 47 at <a href=\"http://www.rfc-editor.org/rfc/bcp/bcp47.txt\">\n       http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>\n      and the IANA language subtag registry at\n      <a href=\"http://www.iana.org/assignments/language-subtag-registry\">\n       http://www.iana.org/assignments/language-subtag-registry</a>\n      for further information.\n     </p>\n     <p>\n\n      The union allows for the 'un-declaration' of xml:lang with\n      the empty string.\n     </p>\n    </div>\n   </xs:documentation>\n  </xs:annotation>\n  <xs:simpleType>\n   <xs:union memberTypes=\"xs:language\">\n    <xs:simpleType>    \n     <xs:restriction base=\"xs:string\">\n      <xs:enumeration value=\"\"/>\n\n     </xs:restriction>\n    </xs:simpleType>\n   </xs:union>\n  </xs:simpleType>\n </xs:attribute>\n\n <xs:attribute name=\"space\">\n  <xs:annotation>\n   <xs:documentation>\n\n    <div>\n     \n      <h3>space (as an attribute name)</h3>\n      <p>\n       denotes an attribute whose\n       value is a keyword indicating what whitespace processing\n       discipline is intended for the content of the element; its\n       value is inherited.  This name is reserved by virtue of its\n       definition in the XML specification.</p>\n     \n    </div>\n   </xs:documentation>\n  </xs:annotation>\n  <xs:simpleType>\n\n   <xs:restriction base=\"xs:NCName\">\n    <xs:enumeration value=\"default\"/>\n    <xs:enumeration value=\"preserve\"/>\n   </xs:restriction>\n  </xs:simpleType>\n </xs:attribute>\n \n <xs:attribute name=\"base\" type=\"xs:anyURI\"> <xs:annotation>\n   <xs:documentation>\n\n    <div>\n     \n      <h3>base (as an attribute name)</h3>\n      <p>\n       denotes an attribute whose value\n       provides a URI to be used as the base for interpreting any\n       relative URIs in the scope of the element on which it\n       appears; its value is inherited.  This name is reserved\n       by virtue of its definition in the XML Base specification.</p>\n     \n     <p>\n      See <a\n      href=\"http://www.w3.org/TR/xmlbase/\">http://www.w3.org/TR/xmlbase/</a>\n      for information about this attribute.\n     </p>\n\n    </div>\n   </xs:documentation>\n  </xs:annotation>\n </xs:attribute>\n \n <xs:attribute name=\"id\" type=\"xs:ID\">\n  <xs:annotation>\n   <xs:documentation>\n    <div>\n     \n      <h3>id (as an attribute name)</h3> \n      <p>\n\n       denotes an attribute whose value\n       should be interpreted as if declared to be of type ID.\n       This name is reserved by virtue of its definition in the\n       xml:id specification.</p>\n     \n     <p>\n      See <a\n      href=\"http://www.w3.org/TR/xml-id/\">http://www.w3.org/TR/xml-id/</a>\n      for information about this attribute.\n     </p>\n    </div>\n   </xs:documentation>\n  </xs:annotation>\n\n </xs:attribute>\n\n <xs:attributeGroup name=\"specialAttrs\">\n  <xs:attribute ref=\"xml:base\"/>\n  <xs:attribute ref=\"xml:lang\"/>\n  <xs:attribute ref=\"xml:space\"/>\n  <xs:attribute ref=\"xml:id\"/>\n </xs:attributeGroup>\n\n <xs:annotation>\n\n  <xs:documentation>\n   <div>\n   \n    <h3>Father (in any context at all)</h3> \n\n    <div class=\"bodytext\">\n     <p>\n      denotes Jon Bosak, the chair of \n      the original XML Working Group.  This name is reserved by \n      the following decision of the W3C XML Plenary and \n      XML Coordination groups:\n     </p>\n     <blockquote>\n       <p>\n\n\tIn appreciation for his vision, leadership and\n\tdedication the W3C XML Plenary on this 10th day of\n\tFebruary, 2000, reserves for Jon Bosak in perpetuity\n\tthe XML name \"xml:Father\".\n       </p>\n     </blockquote>\n    </div>\n   </div>\n  </xs:documentation>\n </xs:annotation>\n\n <xs:annotation>\n  <xs:documentation>\n\n   <div xml:id=\"usage\" id=\"usage\">\n    <h2><a name=\"usage\">About this schema document</a></h2>\n\n    <div class=\"bodytext\">\n     <p>\n      This schema defines attributes and an attribute group suitable\n      for use by schemas wishing to allow <code>xml:base</code>,\n      <code>xml:lang</code>, <code>xml:space</code> or\n      <code>xml:id</code> attributes on elements they define.\n     </p>\n\n     <p>\n      To enable this, such a schema must import this schema for\n      the XML namespace, e.g. as follows:\n     </p>\n     <pre>\n          &lt;schema.. .>\n          .. .\n           &lt;import namespace=\"http://www.w3.org/XML/1998/namespace\"\n                      schemaLocation=\"http://www.w3.org/2001/xml.xsd\"/>\n     </pre>\n     <p>\n      or\n     </p>\n     <pre>\n\n           &lt;import namespace=\"http://www.w3.org/XML/1998/namespace\"\n                      schemaLocation=\"http://www.w3.org/2009/01/xml.xsd\"/>\n     </pre>\n     <p>\n      Subsequently, qualified reference to any of the attributes or the\n      group defined below will have the desired effect, e.g.\n     </p>\n     <pre>\n          &lt;type.. .>\n          .. .\n           &lt;attributeGroup ref=\"xml:specialAttrs\"/>\n     </pre>\n     <p>\n      will define a type which will schema-validate an instance element\n      with any of those attributes.\n     </p>\n\n    </div>\n   </div>\n  </xs:documentation>\n </xs:annotation>\n\n <xs:annotation>\n  <xs:documentation>\n   <div id=\"nsversioning\" xml:id=\"nsversioning\">\n    <h2><a name=\"nsversioning\">Versioning policy for this schema document</a></h2>\n\n    <div class=\"bodytext\">\n     <p>\n      In keeping with the XML Schema WG's standard versioning\n      policy, this schema document will persist at\n      <a href=\"http://www.w3.org/2009/01/xml.xsd\">\n       http://www.w3.org/2009/01/xml.xsd</a>.\n     </p>\n     <p>\n      At the date of issue it can also be found at\n      <a href=\"http://www.w3.org/2001/xml.xsd\">\n       http://www.w3.org/2001/xml.xsd</a>.\n     </p>\n\n     <p>\n      The schema document at that URI may however change in the future,\n      in order to remain compatible with the latest version of XML\n      Schema itself, or with the XML namespace itself.  In other words,\n      if the XML Schema or XML namespaces change, the version of this\n      document at <a href=\"http://www.w3.org/2001/xml.xsd\">\n       http://www.w3.org/2001/xml.xsd \n      </a> \n      will change accordingly; the version at \n      <a href=\"http://www.w3.org/2009/01/xml.xsd\">\n       http://www.w3.org/2009/01/xml.xsd \n      </a> \n      will not change.\n     </p>\n     <p>\n\n      Previous dated (and unchanging) versions of this schema \n      document are at:\n     </p>\n     <ul>\n      <li><a href=\"http://www.w3.org/2009/01/xml.xsd\">\n\thttp://www.w3.org/2009/01/xml.xsd</a></li>\n      <li><a href=\"http://www.w3.org/2007/08/xml.xsd\">\n\thttp://www.w3.org/2007/08/xml.xsd</a></li>\n      <li><a href=\"http://www.w3.org/2004/10/xml.xsd\">\n\n\thttp://www.w3.org/2004/10/xml.xsd</a></li>\n      <li><a href=\"http://www.w3.org/2001/03/xml.xsd\">\n\thttp://www.w3.org/2001/03/xml.xsd</a></li>\n     </ul>\n    </div>\n   </div>\n  </xs:documentation>\n </xs:annotation>\n\n</xs:schema>\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Test/ProviderFactoryTestCase.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Test;\n\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Component\\HttpClient\\MockHttpClient;\nuse Symfony\\Component\\Translation\\Dumper\\XliffFileDumper;\nuse Symfony\\Component\\Translation\\Exception\\IncompleteDsnException;\nuse Symfony\\Component\\Translation\\Exception\\UnsupportedSchemeException;\nuse Symfony\\Component\\Translation\\Loader\\LoaderInterface;\nuse Symfony\\Component\\Translation\\Provider\\Dsn;\nuse Symfony\\Component\\Translation\\Provider\\ProviderFactoryInterface;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\nuse Symfony\\Contracts\\HttpClient\\HttpClientInterface;\n\n/**\n * A test case to ease testing a translation provider factory.\n *\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nabstract class ProviderFactoryTestCase extends TestCase\n{\n    protected HttpClientInterface $client;\n    protected LoggerInterface|MockObject $logger;\n    protected string $defaultLocale;\n    protected LoaderInterface|MockObject $loader;\n    protected XliffFileDumper|MockObject $xliffFileDumper;\n    protected TranslatorBagInterface|MockObject $translatorBag;\n\n    abstract public function createFactory(): ProviderFactoryInterface;\n\n    /**\n     * @return iterable<array{0: bool, 1: string}>\n     */\n    abstract public static function supportsProvider(): iterable;\n\n    /**\n     * @return iterable<array{0: string, 1: string}>\n     */\n    abstract public static function createProvider(): iterable;\n\n    /**\n     * @return iterable<array{0: string, 1: string|null}>\n     */\n    public static function unsupportedSchemeProvider(): iterable\n    {\n        return [];\n    }\n\n    /**\n     * @return iterable<array{0: string, 1: string|null}>\n     */\n    public static function incompleteDsnProvider(): iterable\n    {\n        return [];\n    }\n\n    /**\n     * @dataProvider supportsProvider\n     */\n    public function testSupports(bool $expected, string $dsn)\n    {\n        $factory = $this->createFactory();\n\n        $this->assertSame($expected, $factory->supports(new Dsn($dsn)));\n    }\n\n    /**\n     * @dataProvider createProvider\n     */\n    public function testCreate(string $expected, string $dsn)\n    {\n        $factory = $this->createFactory();\n        $provider = $factory->create(new Dsn($dsn));\n\n        $this->assertSame($expected, (string) $provider);\n    }\n\n    /**\n     * @dataProvider unsupportedSchemeProvider\n     */\n    public function testUnsupportedSchemeException(string $dsn, ?string $message = null)\n    {\n        $factory = $this->createFactory();\n\n        $dsn = new Dsn($dsn);\n\n        $this->expectException(UnsupportedSchemeException::class);\n        if (null !== $message) {\n            $this->expectExceptionMessage($message);\n        }\n\n        $factory->create($dsn);\n    }\n\n    /**\n     * @dataProvider incompleteDsnProvider\n     */\n    public function testIncompleteDsnException(string $dsn, ?string $message = null)\n    {\n        $factory = $this->createFactory();\n\n        $dsn = new Dsn($dsn);\n\n        $this->expectException(IncompleteDsnException::class);\n        if (null !== $message) {\n            $this->expectExceptionMessage($message);\n        }\n\n        $factory->create($dsn);\n    }\n\n    protected function getClient(): HttpClientInterface\n    {\n        return $this->client ??= new MockHttpClient();\n    }\n\n    protected function getLogger(): LoggerInterface\n    {\n        return $this->logger ??= $this->createMock(LoggerInterface::class);\n    }\n\n    protected function getDefaultLocale(): string\n    {\n        return $this->defaultLocale ??= 'en';\n    }\n\n    protected function getLoader(): LoaderInterface\n    {\n        return $this->loader ??= $this->createMock(LoaderInterface::class);\n    }\n\n    protected function getXliffFileDumper(): XliffFileDumper\n    {\n        return $this->xliffFileDumper ??= $this->createMock(XliffFileDumper::class);\n    }\n\n    protected function getTranslatorBag(): TranslatorBagInterface\n    {\n        return $this->translatorBag ??= $this->createMock(TranslatorBagInterface::class);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Test/ProviderTestCase.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Test;\n\nuse PHPUnit\\Framework\\MockObject\\MockObject;\nuse PHPUnit\\Framework\\TestCase;\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Component\\HttpClient\\MockHttpClient;\nuse Symfony\\Component\\Translation\\Dumper\\XliffFileDumper;\nuse Symfony\\Component\\Translation\\Loader\\LoaderInterface;\nuse Symfony\\Component\\Translation\\Provider\\ProviderInterface;\nuse Symfony\\Component\\Translation\\TranslatorBagInterface;\nuse Symfony\\Contracts\\HttpClient\\HttpClientInterface;\n\n/**\n * A test case to ease testing a translation provider.\n *\n * @author Mathieu Santostefano <msantostefano@protonmail.com>\n */\nabstract class ProviderTestCase extends TestCase\n{\n    protected HttpClientInterface $client;\n    protected LoggerInterface|MockObject $logger;\n    protected string $defaultLocale;\n    protected LoaderInterface|MockObject $loader;\n    protected XliffFileDumper|MockObject $xliffFileDumper;\n    protected TranslatorBagInterface|MockObject $translatorBag;\n\n    abstract public static function createProvider(HttpClientInterface $client, LoaderInterface $loader, LoggerInterface $logger, string $defaultLocale, string $endpoint): ProviderInterface;\n\n    /**\n     * @return iterable<array{0: ProviderInterface, 1: string}>\n     */\n    abstract public static function toStringProvider(): iterable;\n\n    /**\n     * @dataProvider toStringProvider\n     */\n    public function testToString(ProviderInterface $provider, string $expected)\n    {\n        $this->assertSame($expected, (string) $provider);\n    }\n\n    protected function getClient(): MockHttpClient\n    {\n        return $this->client ??= new MockHttpClient();\n    }\n\n    protected function getLoader(): LoaderInterface\n    {\n        return $this->loader ??= $this->createMock(LoaderInterface::class);\n    }\n\n    protected function getLogger(): LoggerInterface\n    {\n        return $this->logger ??= $this->createMock(LoggerInterface::class);\n    }\n\n    protected function getDefaultLocale(): string\n    {\n        return $this->defaultLocale ??= 'en';\n    }\n\n    protected function getXliffFileDumper(): XliffFileDumper\n    {\n        return $this->xliffFileDumper ??= $this->createMock(XliffFileDumper::class);\n    }\n\n    protected function getTranslatorBag(): TranslatorBagInterface\n    {\n        return $this->translatorBag ??= $this->createMock(TranslatorBagInterface::class);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/TranslatableMessage.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Contracts\\Translation\\TranslatableInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n/**\n * @author Nate Wiebe <nate@northern.co>\n */\nclass TranslatableMessage implements TranslatableInterface\n{\n    private string $message;\n    private array $parameters;\n    private ?string $domain;\n\n    public function __construct(string $message, array $parameters = [], ?string $domain = null)\n    {\n        $this->message = $message;\n        $this->parameters = $parameters;\n        $this->domain = $domain;\n    }\n\n    public function __toString(): string\n    {\n        return $this->getMessage();\n    }\n\n    public function getMessage(): string\n    {\n        return $this->message;\n    }\n\n    public function getParameters(): array\n    {\n        return $this->parameters;\n    }\n\n    public function getDomain(): ?string\n    {\n        return $this->domain;\n    }\n\n    public function trans(TranslatorInterface $translator, ?string $locale = null): string\n    {\n        return $translator->trans($this->getMessage(), array_map(\n            static fn ($parameter) => $parameter instanceof TranslatableInterface ? $parameter->trans($translator, $locale) : $parameter,\n            $this->getParameters()\n        ), $this->getDomain(), $locale);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Translator.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\Config\\ConfigCacheFactory;\nuse Symfony\\Component\\Config\\ConfigCacheFactoryInterface;\nuse Symfony\\Component\\Config\\ConfigCacheInterface;\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\NotFoundResourceException;\nuse Symfony\\Component\\Translation\\Exception\\RuntimeException;\nuse Symfony\\Component\\Translation\\Formatter\\IntlFormatterInterface;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatter;\nuse Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface;\nuse Symfony\\Component\\Translation\\Loader\\LoaderInterface;\nuse Symfony\\Contracts\\Translation\\LocaleAwareInterface;\nuse Symfony\\Contracts\\Translation\\TranslatableInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\n\n// Help opcache.preload discover always-needed symbols\nclass_exists(MessageCatalogue::class);\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass Translator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface\n{\n    /**\n     * @var MessageCatalogueInterface[]\n     */\n    protected $catalogues = [];\n\n    private string $locale;\n\n    /**\n     * @var string[]\n     */\n    private array $fallbackLocales = [];\n\n    /**\n     * @var LoaderInterface[]\n     */\n    private array $loaders = [];\n\n    private array $resources = [];\n\n    private MessageFormatterInterface $formatter;\n\n    private ?string $cacheDir;\n\n    private bool $debug;\n\n    private array $cacheVary;\n\n    private ?ConfigCacheFactoryInterface $configCacheFactory;\n\n    private array $parentLocales;\n\n    private bool $hasIntlFormatter;\n\n    /**\n     * @throws InvalidArgumentException If a locale contains invalid characters\n     */\n    public function __construct(string $locale, ?MessageFormatterInterface $formatter = null, ?string $cacheDir = null, bool $debug = false, array $cacheVary = [])\n    {\n        $this->setLocale($locale);\n\n        $this->formatter = $formatter ??= new MessageFormatter();\n        $this->cacheDir = $cacheDir;\n        $this->debug = $debug;\n        $this->cacheVary = $cacheVary;\n        $this->hasIntlFormatter = $formatter instanceof IntlFormatterInterface;\n    }\n\n    /**\n     * @return void\n     */\n    public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory)\n    {\n        $this->configCacheFactory = $configCacheFactory;\n    }\n\n    /**\n     * Adds a Loader.\n     *\n     * @param string $format The name of the loader (@see addResource())\n     *\n     * @return void\n     */\n    public function addLoader(string $format, LoaderInterface $loader)\n    {\n        $this->loaders[$format] = $loader;\n    }\n\n    /**\n     * Adds a Resource.\n     *\n     * @param string $format   The name of the loader (@see addLoader())\n     * @param mixed  $resource The resource name\n     *\n     * @return void\n     *\n     * @throws InvalidArgumentException If the locale contains invalid characters\n     */\n    public function addResource(string $format, mixed $resource, string $locale, ?string $domain = null)\n    {\n        $domain ??= 'messages';\n\n        $this->assertValidLocale($locale);\n        $locale ?: $locale = class_exists(\\Locale::class) ? \\Locale::getDefault() : 'en';\n\n        $this->resources[$locale][] = [$format, $resource, $domain];\n\n        if (\\in_array($locale, $this->fallbackLocales)) {\n            $this->catalogues = [];\n        } else {\n            unset($this->catalogues[$locale]);\n        }\n    }\n\n    /**\n     * @return void\n     */\n    public function setLocale(string $locale)\n    {\n        $this->assertValidLocale($locale);\n        $this->locale = $locale;\n    }\n\n    public function getLocale(): string\n    {\n        return $this->locale ?: (class_exists(\\Locale::class) ? \\Locale::getDefault() : 'en');\n    }\n\n    /**\n     * Sets the fallback locales.\n     *\n     * @param string[] $locales\n     *\n     * @return void\n     *\n     * @throws InvalidArgumentException If a locale contains invalid characters\n     */\n    public function setFallbackLocales(array $locales)\n    {\n        // needed as the fallback locales are linked to the already loaded catalogues\n        $this->catalogues = [];\n\n        foreach ($locales as $locale) {\n            $this->assertValidLocale($locale);\n        }\n\n        $this->fallbackLocales = $this->cacheVary['fallback_locales'] = $locales;\n    }\n\n    /**\n     * Gets the fallback locales.\n     *\n     * @internal\n     */\n    public function getFallbackLocales(): array\n    {\n        return $this->fallbackLocales;\n    }\n\n    public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string\n    {\n        if (null === $id || '' === $id) {\n            return '';\n        }\n\n        $domain ??= 'messages';\n\n        $catalogue = $this->getCatalogue($locale);\n        $locale = $catalogue->getLocale();\n        while (!$catalogue->defines($id, $domain)) {\n            if ($cat = $catalogue->getFallbackCatalogue()) {\n                $catalogue = $cat;\n                $locale = $catalogue->getLocale();\n            } else {\n                break;\n            }\n        }\n\n        $parameters = array_map(fn ($parameter) => $parameter instanceof TranslatableInterface ? $parameter->trans($this, $locale) : $parameter, $parameters);\n\n        $len = \\strlen(MessageCatalogue::INTL_DOMAIN_SUFFIX);\n        if ($this->hasIntlFormatter\n            && ($catalogue->defines($id, $domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)\n            || (\\strlen($domain) > $len && 0 === substr_compare($domain, MessageCatalogue::INTL_DOMAIN_SUFFIX, -$len, $len)))\n        ) {\n            return $this->formatter->formatIntl($catalogue->get($id, $domain), $locale, $parameters);\n        }\n\n        return $this->formatter->format($catalogue->get($id, $domain), $locale, $parameters);\n    }\n\n    public function getCatalogue(?string $locale = null): MessageCatalogueInterface\n    {\n        if (!$locale) {\n            $locale = $this->getLocale();\n        } else {\n            $this->assertValidLocale($locale);\n        }\n\n        if (!isset($this->catalogues[$locale])) {\n            $this->loadCatalogue($locale);\n        }\n\n        return $this->catalogues[$locale];\n    }\n\n    public function getCatalogues(): array\n    {\n        return array_values($this->catalogues);\n    }\n\n    /**\n     * Gets the loaders.\n     *\n     * @return LoaderInterface[]\n     */\n    protected function getLoaders(): array\n    {\n        return $this->loaders;\n    }\n\n    /**\n     * @return void\n     */\n    protected function loadCatalogue(string $locale)\n    {\n        if (null === $this->cacheDir) {\n            $this->initializeCatalogue($locale);\n        } else {\n            $this->initializeCacheCatalogue($locale);\n        }\n    }\n\n    /**\n     * @return void\n     */\n    protected function initializeCatalogue(string $locale)\n    {\n        $this->assertValidLocale($locale);\n\n        try {\n            $this->doLoadCatalogue($locale);\n        } catch (NotFoundResourceException $e) {\n            if (!$this->computeFallbackLocales($locale)) {\n                throw $e;\n            }\n        }\n        $this->loadFallbackCatalogues($locale);\n    }\n\n    private function initializeCacheCatalogue(string $locale): void\n    {\n        if (isset($this->catalogues[$locale])) {\n            /* Catalogue already initialized. */\n            return;\n        }\n\n        $this->assertValidLocale($locale);\n        $cache = $this->getConfigCacheFactory()->cache($this->getCatalogueCachePath($locale),\n            function (ConfigCacheInterface $cache) use ($locale) {\n                $this->dumpCatalogue($locale, $cache);\n            }\n        );\n\n        if (isset($this->catalogues[$locale])) {\n            /* Catalogue has been initialized as it was written out to cache. */\n            return;\n        }\n\n        /* Read catalogue from cache. */\n        $this->catalogues[$locale] = include $cache->getPath();\n    }\n\n    private function dumpCatalogue(string $locale, ConfigCacheInterface $cache): void\n    {\n        $this->initializeCatalogue($locale);\n        $fallbackContent = $this->getFallbackContent($this->catalogues[$locale]);\n\n        $content = sprintf(<<<EOF\n<?php\n\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n\\$catalogue = new MessageCatalogue('%s', %s);\n\n%s\nreturn \\$catalogue;\n\nEOF\n            ,\n            $locale,\n            var_export($this->getAllMessages($this->catalogues[$locale]), true),\n            $fallbackContent\n        );\n\n        $cache->write($content, $this->catalogues[$locale]->getResources());\n    }\n\n    private function getFallbackContent(MessageCatalogue $catalogue): string\n    {\n        $fallbackContent = '';\n        $current = '';\n        $replacementPattern = '/[^a-z0-9_]/i';\n        $fallbackCatalogue = $catalogue->getFallbackCatalogue();\n        while ($fallbackCatalogue) {\n            $fallback = $fallbackCatalogue->getLocale();\n            $fallbackSuffix = ucfirst(preg_replace($replacementPattern, '_', $fallback));\n            $currentSuffix = ucfirst(preg_replace($replacementPattern, '_', $current));\n\n            $fallbackContent .= sprintf(<<<'EOF'\n$catalogue%s = new MessageCatalogue('%s', %s);\n$catalogue%s->addFallbackCatalogue($catalogue%s);\n\nEOF\n                ,\n                $fallbackSuffix,\n                $fallback,\n                var_export($this->getAllMessages($fallbackCatalogue), true),\n                $currentSuffix,\n                $fallbackSuffix\n            );\n            $current = $fallbackCatalogue->getLocale();\n            $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();\n        }\n\n        return $fallbackContent;\n    }\n\n    private function getCatalogueCachePath(string $locale): string\n    {\n        return $this->cacheDir.'/catalogue.'.$locale.'.'.strtr(substr(base64_encode(hash('sha256', serialize($this->cacheVary), true)), 0, 7), '/', '_').'.php';\n    }\n\n    /**\n     * @internal\n     */\n    protected function doLoadCatalogue(string $locale): void\n    {\n        $this->catalogues[$locale] = new MessageCatalogue($locale);\n\n        if (isset($this->resources[$locale])) {\n            foreach ($this->resources[$locale] as $resource) {\n                if (!isset($this->loaders[$resource[0]])) {\n                    if (\\is_string($resource[1])) {\n                        throw new RuntimeException(sprintf('No loader is registered for the \"%s\" format when loading the \"%s\" resource.', $resource[0], $resource[1]));\n                    }\n\n                    throw new RuntimeException(sprintf('No loader is registered for the \"%s\" format.', $resource[0]));\n                }\n                $this->catalogues[$locale]->addCatalogue($this->loaders[$resource[0]]->load($resource[1], $locale, $resource[2]));\n            }\n        }\n    }\n\n    private function loadFallbackCatalogues(string $locale): void\n    {\n        $current = $this->catalogues[$locale];\n\n        foreach ($this->computeFallbackLocales($locale) as $fallback) {\n            if (!isset($this->catalogues[$fallback])) {\n                $this->initializeCatalogue($fallback);\n            }\n\n            $fallbackCatalogue = new MessageCatalogue($fallback, $this->getAllMessages($this->catalogues[$fallback]));\n            foreach ($this->catalogues[$fallback]->getResources() as $resource) {\n                $fallbackCatalogue->addResource($resource);\n            }\n            $current->addFallbackCatalogue($fallbackCatalogue);\n            $current = $fallbackCatalogue;\n        }\n    }\n\n    /**\n     * @return array\n     */\n    protected function computeFallbackLocales(string $locale)\n    {\n        $this->parentLocales ??= json_decode(file_get_contents(__DIR__.'/Resources/data/parents.json'), true);\n\n        $originLocale = $locale;\n        $locales = [];\n\n        while ($locale) {\n            $parent = $this->parentLocales[$locale] ?? null;\n\n            if ($parent) {\n                $locale = 'root' !== $parent ? $parent : null;\n            } elseif (\\function_exists('locale_parse')) {\n                $localeSubTags = locale_parse($locale);\n                $locale = null;\n                if (1 < \\count($localeSubTags)) {\n                    array_pop($localeSubTags);\n                    $locale = locale_compose($localeSubTags) ?: null;\n                }\n            } elseif ($i = strrpos($locale, '_') ?: strrpos($locale, '-')) {\n                $locale = substr($locale, 0, $i);\n            } else {\n                $locale = null;\n            }\n\n            if (null !== $locale) {\n                $locales[] = $locale;\n            }\n        }\n\n        foreach ($this->fallbackLocales as $fallback) {\n            if ($fallback === $originLocale) {\n                continue;\n            }\n\n            $locales[] = $fallback;\n        }\n\n        return array_unique($locales);\n    }\n\n    /**\n     * Asserts that the locale is valid, throws an Exception if not.\n     *\n     * @return void\n     *\n     * @throws InvalidArgumentException If the locale contains invalid characters\n     */\n    protected function assertValidLocale(string $locale)\n    {\n        if (!preg_match('/^[a-z0-9@_\\\\.\\\\-]*$/i', $locale)) {\n            throw new InvalidArgumentException(sprintf('Invalid \"%s\" locale.', $locale));\n        }\n    }\n\n    /**\n     * Provides the ConfigCache factory implementation, falling back to a\n     * default implementation if necessary.\n     */\n    private function getConfigCacheFactory(): ConfigCacheFactoryInterface\n    {\n        $this->configCacheFactory ??= new ConfigCacheFactory($this->debug);\n\n        return $this->configCacheFactory;\n    }\n\n    private function getAllMessages(MessageCatalogueInterface $catalogue): array\n    {\n        $allMessages = [];\n\n        foreach ($catalogue->all() as $domain => $messages) {\n            if ($intlMessages = $catalogue->all($domain.MessageCatalogue::INTL_DOMAIN_SUFFIX)) {\n                $allMessages[$domain.MessageCatalogue::INTL_DOMAIN_SUFFIX] = $intlMessages;\n                $messages = array_diff_key($messages, $intlMessages);\n            }\n            if ($messages) {\n                $allMessages[$domain] = $messages;\n            }\n        }\n\n        return $allMessages;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/TranslatorBag.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\Translation\\Catalogue\\AbstractOperation;\nuse Symfony\\Component\\Translation\\Catalogue\\TargetOperation;\n\nfinal class TranslatorBag implements TranslatorBagInterface\n{\n    /** @var MessageCatalogue[] */\n    private array $catalogues = [];\n\n    public function addCatalogue(MessageCatalogue $catalogue): void\n    {\n        if (null !== $existingCatalogue = $this->getCatalogue($catalogue->getLocale())) {\n            $catalogue->addCatalogue($existingCatalogue);\n        }\n\n        $this->catalogues[$catalogue->getLocale()] = $catalogue;\n    }\n\n    public function addBag(TranslatorBagInterface $bag): void\n    {\n        foreach ($bag->getCatalogues() as $catalogue) {\n            $this->addCatalogue($catalogue);\n        }\n    }\n\n    public function getCatalogue(?string $locale = null): MessageCatalogueInterface\n    {\n        if (null === $locale || !isset($this->catalogues[$locale])) {\n            $this->catalogues[$locale] = new MessageCatalogue($locale);\n        }\n\n        return $this->catalogues[$locale];\n    }\n\n    public function getCatalogues(): array\n    {\n        return array_values($this->catalogues);\n    }\n\n    public function diff(TranslatorBagInterface $diffBag): self\n    {\n        $diff = new self();\n\n        foreach ($this->catalogues as $locale => $catalogue) {\n            if (null === $diffCatalogue = $diffBag->getCatalogue($locale)) {\n                $diff->addCatalogue($catalogue);\n\n                continue;\n            }\n\n            $operation = new TargetOperation($diffCatalogue, $catalogue);\n            $operation->moveMessagesToIntlDomainsIfPossible(AbstractOperation::NEW_BATCH);\n            $newCatalogue = new MessageCatalogue($locale);\n\n            foreach ($catalogue->getDomains() as $domain) {\n                $newCatalogue->add($operation->getNewMessages($domain), $domain);\n            }\n\n            $diff->addCatalogue($newCatalogue);\n        }\n\n        return $diff;\n    }\n\n    public function intersect(TranslatorBagInterface $intersectBag): self\n    {\n        $diff = new self();\n\n        foreach ($this->catalogues as $locale => $catalogue) {\n            if (null === $intersectCatalogue = $intersectBag->getCatalogue($locale)) {\n                continue;\n            }\n\n            $operation = new TargetOperation($catalogue, $intersectCatalogue);\n            $operation->moveMessagesToIntlDomainsIfPossible(AbstractOperation::OBSOLETE_BATCH);\n            $obsoleteCatalogue = new MessageCatalogue($locale);\n\n            foreach ($operation->getDomains() as $domain) {\n                $obsoleteCatalogue->add(\n                    array_diff($operation->getMessages($domain), $operation->getNewMessages($domain)),\n                    $domain\n                );\n            }\n\n            $diff->addCatalogue($obsoleteCatalogue);\n        }\n\n        return $diff;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/TranslatorBagInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\n\n/**\n * @author Abdellatif Ait boudad <a.aitboudad@gmail.com>\n */\ninterface TranslatorBagInterface\n{\n    /**\n     * Gets the catalogue by locale.\n     *\n     * @param string|null $locale The locale or null to use the default\n     *\n     * @throws InvalidArgumentException If the locale contains invalid characters\n     */\n    public function getCatalogue(?string $locale = null): MessageCatalogueInterface;\n\n    /**\n     * Returns all catalogues of the instance.\n     *\n     * @return MessageCatalogueInterface[]\n     */\n    public function getCatalogues(): array;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Util/ArrayConverter.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Util;\n\n/**\n * ArrayConverter generates tree like structure from a message catalogue.\n * e.g. this\n *   'foo.bar1' => 'test1',\n *   'foo.bar2' => 'test2'\n * converts to follows:\n *   foo:\n *     bar1: test1\n *     bar2: test2.\n *\n * @author Gennady Telegin <gtelegin@gmail.com>\n */\nclass ArrayConverter\n{\n    /**\n     * Converts linear messages array to tree-like array.\n     * For example this array('foo.bar' => 'value') will be converted to ['foo' => ['bar' => 'value']].\n     *\n     * @param array $messages Linear messages array\n     */\n    public static function expandToTree(array $messages): array\n    {\n        $tree = [];\n\n        foreach ($messages as $id => $value) {\n            $referenceToElement = &self::getElementByPath($tree, self::getKeyParts($id));\n\n            $referenceToElement = $value;\n\n            unset($referenceToElement);\n        }\n\n        return $tree;\n    }\n\n    private static function &getElementByPath(array &$tree, array $parts): mixed\n    {\n        $elem = &$tree;\n        $parentOfElem = null;\n\n        foreach ($parts as $i => $part) {\n            if (isset($elem[$part]) && \\is_string($elem[$part])) {\n                /* Process next case:\n                 *    'foo': 'test1',\n                 *    'foo.bar': 'test2'\n                 *\n                 * $tree['foo'] was string before we found array {bar: test2}.\n                 *  Treat new element as string too, e.g. add $tree['foo.bar'] = 'test2';\n                 */\n                $elem = &$elem[implode('.', \\array_slice($parts, $i))];\n                break;\n            }\n\n            $parentOfElem = &$elem;\n            $elem = &$elem[$part];\n        }\n\n        if ($elem && \\is_array($elem) && $parentOfElem) {\n            /* Process next case:\n             *    'foo.bar': 'test1'\n             *    'foo': 'test2'\n             *\n             * $tree['foo'] was array = {bar: 'test1'} before we found string constant `foo`.\n             * Cancel treating $tree['foo'] as array and cancel back it expansion,\n             *  e.g. make it $tree['foo.bar'] = 'test1' again.\n             */\n            self::cancelExpand($parentOfElem, $part, $elem);\n        }\n\n        return $elem;\n    }\n\n    private static function cancelExpand(array &$tree, string $prefix, array $node): void\n    {\n        $prefix .= '.';\n\n        foreach ($node as $id => $value) {\n            if (\\is_string($value)) {\n                $tree[$prefix.$id] = $value;\n            } else {\n                self::cancelExpand($tree, $prefix.$id, $value);\n            }\n        }\n    }\n\n    /**\n     * @return string[]\n     */\n    private static function getKeyParts(string $key): array\n    {\n        $parts = explode('.', $key);\n        $partsCount = \\count($parts);\n\n        $result = [];\n        $buffer = '';\n\n        foreach ($parts as $index => $part) {\n            if (0 === $index && '' === $part) {\n                $buffer = '.';\n\n                continue;\n            }\n\n            if ($index === $partsCount - 1 && '' === $part) {\n                $buffer .= '.';\n                $result[] = $buffer;\n\n                continue;\n            }\n\n            if (isset($parts[$index + 1]) && '' === $parts[$index + 1]) {\n                $buffer .= $part;\n\n                continue;\n            }\n\n            if ($buffer) {\n                $result[] = $buffer.$part;\n                $buffer = '';\n\n                continue;\n            }\n\n            $result[] = $part;\n        }\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Util/XliffUtils.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Util;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\InvalidResourceException;\n\n/**\n * Provides some utility methods for XLIFF translation files, such as validating\n * their contents according to the XSD schema.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass XliffUtils\n{\n    /**\n     * Gets xliff file version based on the root \"version\" attribute.\n     *\n     * Defaults to 1.2 for backwards compatibility.\n     *\n     * @throws InvalidArgumentException\n     */\n    public static function getVersionNumber(\\DOMDocument $dom): string\n    {\n        /** @var \\DOMNode $xliff */\n        foreach ($dom->getElementsByTagName('xliff') as $xliff) {\n            $version = $xliff->attributes->getNamedItem('version');\n            if ($version) {\n                return $version->nodeValue;\n            }\n\n            $namespace = $xliff->attributes->getNamedItem('xmlns');\n            if ($namespace) {\n                if (0 !== substr_compare('urn:oasis:names:tc:xliff:document:', $namespace->nodeValue, 0, 34)) {\n                    throw new InvalidArgumentException(sprintf('Not a valid XLIFF namespace \"%s\".', $namespace));\n                }\n\n                return substr($namespace, 34);\n            }\n        }\n\n        // Falls back to v1.2\n        return '1.2';\n    }\n\n    /**\n     * Validates and parses the given file into a DOMDocument.\n     *\n     * @throws InvalidResourceException\n     */\n    public static function validateSchema(\\DOMDocument $dom): array\n    {\n        $xliffVersion = static::getVersionNumber($dom);\n        $internalErrors = libxml_use_internal_errors(true);\n        if ($shouldEnable = self::shouldEnableEntityLoader()) {\n            $disableEntities = libxml_disable_entity_loader(false);\n        }\n        try {\n            $isValid = @$dom->schemaValidateSource(self::getSchema($xliffVersion));\n            if (!$isValid) {\n                return self::getXmlErrors($internalErrors);\n            }\n        } finally {\n            if ($shouldEnable) {\n                libxml_disable_entity_loader($disableEntities);\n            }\n        }\n\n        $dom->normalizeDocument();\n\n        libxml_clear_errors();\n        libxml_use_internal_errors($internalErrors);\n\n        return [];\n    }\n\n    private static function shouldEnableEntityLoader(): bool\n    {\n        static $dom, $schema;\n        if (null === $dom) {\n            $dom = new \\DOMDocument();\n            $dom->loadXML('<?xml version=\"1.0\"?><test/>');\n\n            $tmpfile = tempnam(sys_get_temp_dir(), 'symfony');\n            register_shutdown_function(static function () use ($tmpfile) {\n                @unlink($tmpfile);\n            });\n            $schema = '<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <xsd:include schemaLocation=\"file:///'.str_replace('\\\\', '/', $tmpfile).'\" />\n</xsd:schema>';\n            file_put_contents($tmpfile, '<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <xsd:element name=\"test\" type=\"testType\" />\n  <xsd:complexType name=\"testType\"/>\n</xsd:schema>');\n        }\n\n        return !@$dom->schemaValidateSource($schema);\n    }\n\n    public static function getErrorsAsString(array $xmlErrors): string\n    {\n        $errorsAsString = '';\n\n        foreach ($xmlErrors as $error) {\n            $errorsAsString .= sprintf(\"[%s %s] %s (in %s - line %d, column %d)\\n\",\n                \\LIBXML_ERR_WARNING === $error['level'] ? 'WARNING' : 'ERROR',\n                $error['code'],\n                $error['message'],\n                $error['file'],\n                $error['line'],\n                $error['column']\n            );\n        }\n\n        return $errorsAsString;\n    }\n\n    private static function getSchema(string $xliffVersion): string\n    {\n        if ('1.2' === $xliffVersion) {\n            $schemaSource = file_get_contents(__DIR__.'/../Resources/schemas/xliff-core-1.2-transitional.xsd');\n            $xmlUri = 'http://www.w3.org/2001/xml.xsd';\n        } elseif ('2.0' === $xliffVersion) {\n            $schemaSource = file_get_contents(__DIR__.'/../Resources/schemas/xliff-core-2.0.xsd');\n            $xmlUri = 'informativeCopiesOf3rdPartySchemas/w3c/xml.xsd';\n        } else {\n            throw new InvalidArgumentException(sprintf('No support implemented for loading XLIFF version \"%s\".', $xliffVersion));\n        }\n\n        return self::fixXmlLocation($schemaSource, $xmlUri);\n    }\n\n    /**\n     * Internally changes the URI of a dependent xsd to be loaded locally.\n     */\n    private static function fixXmlLocation(string $schemaSource, string $xmlUri): string\n    {\n        $newPath = str_replace('\\\\', '/', __DIR__).'/../Resources/schemas/xml.xsd';\n        $parts = explode('/', $newPath);\n        $locationstart = 'file:///';\n        if (0 === stripos($newPath, 'phar://')) {\n            $tmpfile = tempnam(sys_get_temp_dir(), 'symfony');\n            if ($tmpfile) {\n                copy($newPath, $tmpfile);\n                $parts = explode('/', str_replace('\\\\', '/', $tmpfile));\n            } else {\n                array_shift($parts);\n                $locationstart = 'phar:///';\n            }\n        }\n\n        $drive = '\\\\' === \\DIRECTORY_SEPARATOR ? array_shift($parts).'/' : '';\n        $newPath = $locationstart.$drive.implode('/', array_map('rawurlencode', $parts));\n\n        return str_replace($xmlUri, $newPath, $schemaSource);\n    }\n\n    /**\n     * Returns the XML errors of the internal XML parser.\n     */\n    private static function getXmlErrors(bool $internalErrors): array\n    {\n        $errors = [];\n        foreach (libxml_get_errors() as $error) {\n            $errors[] = [\n                'level' => \\LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',\n                'code' => $error->code,\n                'message' => trim($error->message),\n                'file' => $error->file ?: 'n/a',\n                'line' => $error->line,\n                'column' => $error->column,\n            ];\n        }\n\n        libxml_clear_errors();\n        libxml_use_internal_errors($internalErrors);\n\n        return $errors;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Writer/TranslationWriter.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Writer;\n\nuse Symfony\\Component\\Translation\\Dumper\\DumperInterface;\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\Exception\\RuntimeException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * TranslationWriter writes translation messages.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\nclass TranslationWriter implements TranslationWriterInterface\n{\n    /**\n     * @var array<string, DumperInterface>\n     */\n    private array $dumpers = [];\n\n    /**\n     * Adds a dumper to the writer.\n     *\n     * @return void\n     */\n    public function addDumper(string $format, DumperInterface $dumper)\n    {\n        $this->dumpers[$format] = $dumper;\n    }\n\n    /**\n     * Obtains the list of supported formats.\n     */\n    public function getFormats(): array\n    {\n        return array_keys($this->dumpers);\n    }\n\n    /**\n     * Writes translation from the catalogue according to the selected format.\n     *\n     * @param string $format  The format to use to dump the messages\n     * @param array  $options Options that are passed to the dumper\n     *\n     * @return void\n     *\n     * @throws InvalidArgumentException\n     */\n    public function write(MessageCatalogue $catalogue, string $format, array $options = [])\n    {\n        if (!isset($this->dumpers[$format])) {\n            throw new InvalidArgumentException(sprintf('There is no dumper associated with format \"%s\".', $format));\n        }\n\n        // get the right dumper\n        $dumper = $this->dumpers[$format];\n\n        if (isset($options['path']) && !is_dir($options['path']) && !@mkdir($options['path'], 0777, true) && !is_dir($options['path'])) {\n            throw new RuntimeException(sprintf('Translation Writer was not able to create directory \"%s\".', $options['path']));\n        }\n\n        // save\n        $dumper->dump($catalogue, $options);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/Writer/TranslationWriterInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Component\\Translation\\Writer;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\nuse Symfony\\Component\\Translation\\MessageCatalogue;\n\n/**\n * TranslationWriter writes translation messages.\n *\n * @author Michel Salib <michelsalib@hotmail.com>\n */\ninterface TranslationWriterInterface\n{\n    /**\n     * Writes translation from the catalogue according to the selected format.\n     *\n     * @param string $format  The format to use to dump the messages\n     * @param array  $options Options that are passed to the dumper\n     *\n     * @return void\n     *\n     * @throws InvalidArgumentException\n     */\n    public function write(MessageCatalogue $catalogue, string $format, array $options = []);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation/composer.json",
    "content": "{\n    \"name\": \"symfony/translation\",\n    \"type\": \"library\",\n    \"description\": \"Provides tools to internationalize your application\",\n    \"keywords\": [],\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Fabien Potencier\",\n            \"email\": \"fabien@symfony.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.1\",\n        \"symfony/deprecation-contracts\": \"^2.5|^3\",\n        \"symfony/polyfill-mbstring\": \"~1.0\",\n        \"symfony/translation-contracts\": \"^2.5|^3.0\"\n    },\n    \"require-dev\": {\n        \"nikic/php-parser\": \"^4.18|^5.0\",\n        \"symfony/config\": \"^5.4|^6.0|^7.0\",\n        \"symfony/console\": \"^5.4|^6.0|^7.0\",\n        \"symfony/dependency-injection\": \"^5.4|^6.0|^7.0\",\n        \"symfony/http-client-contracts\": \"^2.5|^3.0\",\n        \"symfony/http-kernel\": \"^5.4|^6.0|^7.0\",\n        \"symfony/intl\": \"^5.4|^6.0|^7.0\",\n        \"symfony/polyfill-intl-icu\": \"^1.21\",\n        \"symfony/routing\": \"^5.4|^6.0|^7.0\",\n        \"symfony/service-contracts\": \"^2.5|^3\",\n        \"symfony/yaml\": \"^5.4|^6.0|^7.0\",\n        \"symfony/finder\": \"^5.4|^6.0|^7.0\",\n        \"psr/log\": \"^1|^2|^3\"\n    },\n    \"conflict\": {\n        \"symfony/config\": \"<5.4\",\n        \"symfony/dependency-injection\": \"<5.4\",\n        \"symfony/http-client-contracts\": \"<2.5\",\n        \"symfony/http-kernel\": \"<5.4\",\n        \"symfony/service-contracts\": \"<2.5\",\n        \"symfony/twig-bundle\": \"<5.4\",\n        \"symfony/yaml\": \"<5.4\",\n        \"symfony/console\": \"<5.4\"\n    },\n    \"provide\": {\n        \"symfony/translation-implementation\": \"2.3|3.0\"\n    },\n    \"autoload\": {\n        \"files\": [ \"Resources/functions.php\" ],\n        \"psr-4\": { \"Symfony\\\\Component\\\\Translation\\\\\": \"\" },\n        \"exclude-from-classmap\": [\n            \"/Tests/\"\n        ]\n    },\n    \"minimum-stability\": \"dev\"\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/CHANGELOG.md",
    "content": "CHANGELOG\n=========\n\nThe changelog is maintained for all Symfony contracts at the following URL:\nhttps://github.com/symfony/contracts/blob/main/CHANGELOG.md\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/LICENSE",
    "content": "Copyright (c) 2018-present Fabien Potencier\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/LocaleAwareInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Contracts\\Translation;\n\ninterface LocaleAwareInterface\n{\n    /**\n     * Sets the current locale.\n     *\n     * @return void\n     *\n     * @throws \\InvalidArgumentException If the locale contains invalid characters\n     */\n    public function setLocale(string $locale);\n\n    /**\n     * Returns the current locale.\n     */\n    public function getLocale(): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/README.md",
    "content": "Symfony Translation Contracts\n=============================\n\nA set of abstractions extracted out of the Symfony components.\n\nCan be used to build on semantics that the Symfony components proved useful and\nthat already have battle tested implementations.\n\nSee https://github.com/symfony/contracts/blob/main/README.md for more information.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/Test/TranslatorTest.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Contracts\\Translation\\Test;\n\nuse PHPUnit\\Framework\\TestCase;\nuse Symfony\\Contracts\\Translation\\TranslatorInterface;\nuse Symfony\\Contracts\\Translation\\TranslatorTrait;\n\n/**\n * Test should cover all languages mentioned on http://translate.sourceforge.net/wiki/l10n/pluralforms\n * and Plural forms mentioned on http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms.\n *\n * See also https://developer.mozilla.org/en/Localization_and_Plurals which mentions 15 rules having a maximum of 6 forms.\n * The mozilla code is also interesting to check for.\n *\n * As mentioned by chx http://drupal.org/node/1273968 we can cover all by testing number from 0 to 199\n *\n * The goal to cover all languages is to far fetched so this test case is smaller.\n *\n * @author Clemens Tolboom clemens@build2be.nl\n */\nclass TranslatorTest extends TestCase\n{\n    private string $defaultLocale;\n\n    protected function setUp(): void\n    {\n        $this->defaultLocale = \\Locale::getDefault();\n        \\Locale::setDefault('en');\n    }\n\n    protected function tearDown(): void\n    {\n        \\Locale::setDefault($this->defaultLocale);\n    }\n\n    public function getTranslator(): TranslatorInterface\n    {\n        return new class() implements TranslatorInterface {\n            use TranslatorTrait;\n        };\n    }\n\n    /**\n     * @dataProvider getTransTests\n     */\n    public function testTrans($expected, $id, $parameters)\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals($expected, $translator->trans($id, $parameters));\n    }\n\n    /**\n     * @dataProvider getTransChoiceTests\n     */\n    public function testTransChoiceWithExplicitLocale($expected, $id, $number)\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));\n    }\n\n    /**\n     * @requires extension intl\n     *\n     * @dataProvider getTransChoiceTests\n     */\n    public function testTransChoiceWithDefaultLocale($expected, $id, $number)\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));\n    }\n\n    /**\n     * @dataProvider getTransChoiceTests\n     */\n    public function testTransChoiceWithEnUsPosix($expected, $id, $number)\n    {\n        $translator = $this->getTranslator();\n        $translator->setLocale('en_US_POSIX');\n\n        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number]));\n    }\n\n    public function testGetSetLocale()\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals('en', $translator->getLocale());\n    }\n\n    /**\n     * @requires extension intl\n     */\n    public function testGetLocaleReturnsDefaultLocaleIfNotSet()\n    {\n        $translator = $this->getTranslator();\n\n        \\Locale::setDefault('pt_BR');\n        $this->assertEquals('pt_BR', $translator->getLocale());\n\n        \\Locale::setDefault('en');\n        $this->assertEquals('en', $translator->getLocale());\n    }\n\n    public static function getTransTests()\n    {\n        return [\n            ['Symfony is great!', 'Symfony is great!', []],\n            ['Symfony is awesome!', 'Symfony is %what%!', ['%what%' => 'awesome']],\n        ];\n    }\n\n    public static function getTransChoiceTests()\n    {\n        return [\n            ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],\n            ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1],\n            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],\n            ['There are 0 apples', 'There is 1 apple|There are %count% apples', 0],\n            ['There is 1 apple', 'There is 1 apple|There are %count% apples', 1],\n            ['There are 10 apples', 'There is 1 apple|There are %count% apples', 10],\n            // custom validation messages may be coded with a fixed value\n            ['There are 2 apples', 'There are 2 apples', 2],\n        ];\n    }\n\n    /**\n     * @dataProvider getInterval\n     */\n    public function testInterval($expected, $number, $interval)\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals($expected, $translator->trans($interval.' foo|[1,Inf[ bar', ['%count%' => $number]));\n    }\n\n    public static function getInterval()\n    {\n        return [\n            ['foo', 3, '{1,2, 3 ,4}'],\n            ['bar', 10, '{1,2, 3 ,4}'],\n            ['bar', 3, '[1,2]'],\n            ['foo', 1, '[1,2]'],\n            ['foo', 2, '[1,2]'],\n            ['bar', 1, ']1,2['],\n            ['bar', 2, ']1,2['],\n            ['foo', log(0), '[-Inf,2['],\n            ['foo', -log(0), '[-2,+Inf]'],\n        ];\n    }\n\n    /**\n     * @dataProvider getChooseTests\n     */\n    public function testChoose($expected, $id, $number, $locale = null)\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number], null, $locale));\n    }\n\n    public function testReturnMessageIfExactlyOneStandardRuleIsGiven()\n    {\n        $translator = $this->getTranslator();\n\n        $this->assertEquals('There are two apples', $translator->trans('There are two apples', ['%count%' => 2]));\n    }\n\n    /**\n     * @dataProvider getNonMatchingMessages\n     */\n    public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number)\n    {\n        $translator = $this->getTranslator();\n\n        $this->expectException(\\InvalidArgumentException::class);\n\n        $translator->trans($id, ['%count%' => $number]);\n    }\n\n    public static function getNonMatchingMessages()\n    {\n        return [\n            ['{0} There are no apples|{1} There is one apple', 2],\n            ['{1} There is one apple|]1,Inf] There are %count% apples', 0],\n            ['{1} There is one apple|]2,Inf] There are %count% apples', 2],\n            ['{0} There are no apples|There is one apple', 2],\n        ];\n    }\n\n    public static function getChooseTests()\n    {\n        return [\n            ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],\n            ['There are no apples', '{0}     There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],\n            ['There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0],\n\n            ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1],\n\n            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10],\n            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10],\n            ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]     There are %count% apples', 10],\n\n            ['There are 0 apples', 'There is one apple|There are %count% apples', 0],\n            ['There is one apple', 'There is one apple|There are %count% apples', 1],\n            ['There are 10 apples', 'There is one apple|There are %count% apples', 10],\n\n            ['There are 0 apples', 'one: There is one apple|more: There are %count% apples', 0],\n            ['There is one apple', 'one: There is one apple|more: There are %count% apples', 1],\n            ['There are 10 apples', 'one: There is one apple|more: There are %count% apples', 10],\n\n            ['There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0],\n            ['There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1],\n            ['There are 10 apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10],\n\n            ['', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0],\n            ['', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1],\n\n            // Indexed only tests which are Gettext PoFile* compatible strings.\n            ['There are 0 apples', 'There is one apple|There are %count% apples', 0],\n            ['There is one apple', 'There is one apple|There are %count% apples', 1],\n            ['There are 2 apples', 'There is one apple|There are %count% apples', 2],\n\n            // Tests for float numbers\n            ['There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7],\n            ['There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1],\n            ['There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7],\n            ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0],\n            ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0],\n            ['There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0],\n\n            // Test texts with new-lines\n            // with double-quotes and \\n in id & double-quotes and actual newlines in text\n            [\"This is a text with a\\n            new-line in it. Selector = 0.\", '{0}This is a text with a\n            new-line in it. Selector = 0.|{1}This is a text with a\n            new-line in it. Selector = 1.|[1,Inf]This is a text with a\n            new-line in it. Selector > 1.', 0],\n            // with double-quotes and \\n in id and single-quotes and actual newlines in text\n            [\"This is a text with a\\n            new-line in it. Selector = 1.\", '{0}This is a text with a\n            new-line in it. Selector = 0.|{1}This is a text with a\n            new-line in it. Selector = 1.|[1,Inf]This is a text with a\n            new-line in it. Selector > 1.', 1],\n            [\"This is a text with a\\n            new-line in it. Selector > 1.\", '{0}This is a text with a\n            new-line in it. Selector = 0.|{1}This is a text with a\n            new-line in it. Selector = 1.|[1,Inf]This is a text with a\n            new-line in it. Selector > 1.', 5],\n            // with double-quotes and id split across lines\n            ['This is a text with a\n            new-line in it. Selector = 1.', '{0}This is a text with a\n            new-line in it. Selector = 0.|{1}This is a text with a\n            new-line in it. Selector = 1.|[1,Inf]This is a text with a\n            new-line in it. Selector > 1.', 1],\n            // with single-quotes and id split across lines\n            ['This is a text with a\n            new-line in it. Selector > 1.', '{0}This is a text with a\n            new-line in it. Selector = 0.|{1}This is a text with a\n            new-line in it. Selector = 1.|[1,Inf]This is a text with a\n            new-line in it. Selector > 1.', 5],\n            // with single-quotes and \\n in text\n            ['This is a text with a\\nnew-line in it. Selector = 0.', '{0}This is a text with a\\nnew-line in it. Selector = 0.|{1}This is a text with a\\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\\nnew-line in it. Selector > 1.', 0],\n            // with double-quotes and id split across lines\n            [\"This is a text with a\\nnew-line in it. Selector = 1.\", \"{0}This is a text with a\\nnew-line in it. Selector = 0.|{1}This is a text with a\\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\\nnew-line in it. Selector > 1.\", 1],\n            // escape pipe\n            ['This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0],\n            // Empty plural set (2 plural forms) from a .PO file\n            ['', '|', 1],\n            // Empty plural set (3 plural forms) from a .PO file\n            ['', '||', 1],\n\n            // Floating values\n            ['1.5 liters', '%count% liter|%count% liters', 1.5],\n            ['1.5 litre', '%count% litre|%count% litres', 1.5, 'fr'],\n\n            // Negative values\n            ['-1 degree', '%count% degree|%count% degrees', -1],\n            ['-1 degré', '%count% degré|%count% degrés', -1],\n            ['-1.5 degrees', '%count% degree|%count% degrees', -1.5],\n            ['-1.5 degré', '%count% degré|%count% degrés', -1.5, 'fr'],\n            ['-2 degrees', '%count% degree|%count% degrees', -2],\n            ['-2 degrés', '%count% degré|%count% degrés', -2],\n        ];\n    }\n\n    /**\n     * @dataProvider failingLangcodes\n     */\n    public function testFailedLangcodes($nplural, $langCodes)\n    {\n        $matrix = $this->generateTestData($langCodes);\n        $this->validateMatrix($nplural, $matrix, false);\n    }\n\n    /**\n     * @dataProvider successLangcodes\n     */\n    public function testLangcodes($nplural, $langCodes)\n    {\n        $matrix = $this->generateTestData($langCodes);\n        $this->validateMatrix($nplural, $matrix);\n    }\n\n    /**\n     * This array should contain all currently known langcodes.\n     *\n     * As it is impossible to have this ever complete we should try as hard as possible to have it almost complete.\n     */\n    public static function successLangcodes(): array\n    {\n        return [\n            ['1', ['ay', 'bo', 'cgg', 'dz', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky']],\n            ['2', ['nl', 'fr', 'en', 'de', 'de_GE', 'hy', 'hy_AM', 'en_US_POSIX']],\n            ['3', ['be', 'bs', 'cs', 'hr']],\n            ['4', ['cy', 'mt', 'sl']],\n            ['6', ['ar']],\n        ];\n    }\n\n    /**\n     * This array should be at least empty within the near future.\n     *\n     * This both depends on a complete list trying to add above as understanding\n     * the plural rules of the current failing languages.\n     *\n     * @return array with nplural together with langcodes\n     */\n    public static function failingLangcodes(): array\n    {\n        return [\n            ['1', ['fa']],\n            ['2', ['jbo']],\n            ['3', ['cbs']],\n            ['4', ['gd', 'kw']],\n            ['5', ['ga']],\n        ];\n    }\n\n    /**\n     * We validate only on the plural coverage. Thus the real rules is not tested.\n     *\n     * @param string $nplural Plural expected\n     * @param array  $matrix  Containing langcodes and their plural index values\n     */\n    protected function validateMatrix(string $nplural, array $matrix, bool $expectSuccess = true)\n    {\n        foreach ($matrix as $langCode => $data) {\n            $indexes = array_flip($data);\n            if ($expectSuccess) {\n                $this->assertCount($nplural, $indexes, \"Langcode '$langCode' has '$nplural' plural forms.\");\n            } else {\n                $this->assertNotEquals((int) $nplural, \\count($indexes), \"Langcode '$langCode' has '$nplural' plural forms.\");\n            }\n        }\n    }\n\n    protected function generateTestData($langCodes)\n    {\n        $translator = new class() {\n            use TranslatorTrait {\n                getPluralizationRule as public;\n            }\n        };\n\n        $matrix = [];\n        foreach ($langCodes as $langCode) {\n            for ($count = 0; $count < 200; ++$count) {\n                $plural = $translator->getPluralizationRule($count, $langCode);\n                $matrix[$langCode][$count] = $plural;\n            }\n        }\n\n        return $matrix;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/TranslatableInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Contracts\\Translation;\n\n/**\n * @author Nicolas Grekas <p@tchwork.com>\n */\ninterface TranslatableInterface\n{\n    public function trans(TranslatorInterface $translator, string $locale = null): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/TranslatorInterface.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Contracts\\Translation;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface TranslatorInterface\n{\n    /**\n     * Translates the given message.\n     *\n     * When a number is provided as a parameter named \"%count%\", the message is parsed for plural\n     * forms and a translation is chosen according to this number using the following rules:\n     *\n     * Given a message with different plural translations separated by a\n     * pipe (|), this method returns the correct portion of the message based\n     * on the given number, locale and the pluralization rules in the message\n     * itself.\n     *\n     * The message supports two different types of pluralization rules:\n     *\n     * interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples\n     * indexed:  There is one apple|There are %count% apples\n     *\n     * The indexed solution can also contain labels (e.g. one: There is one apple).\n     * This is purely for making the translations more clear - it does not\n     * affect the functionality.\n     *\n     * The two methods can also be mixed:\n     *     {0} There are no apples|one: There is one apple|more: There are %count% apples\n     *\n     * An interval can represent a finite set of numbers:\n     *  {1,2,3,4}\n     *\n     * An interval can represent numbers between two numbers:\n     *  [1, +Inf]\n     *  ]-1,2[\n     *\n     * The left delimiter can be [ (inclusive) or ] (exclusive).\n     * The right delimiter can be [ (exclusive) or ] (inclusive).\n     * Beside numbers, you can use -Inf and +Inf for the infinite.\n     *\n     * @see https://en.wikipedia.org/wiki/ISO_31-11\n     *\n     * @param string      $id         The message id (may also be an object that can be cast to string)\n     * @param array       $parameters An array of parameters for the message\n     * @param string|null $domain     The domain for the message or null to use the default\n     * @param string|null $locale     The locale or null to use the default\n     *\n     * @throws \\InvalidArgumentException If the locale contains invalid characters\n     */\n    public function trans(string $id, array $parameters = [], string $domain = null, string $locale = null): string;\n\n    /**\n     * Returns the default locale.\n     */\n    public function getLocale(): string;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/TranslatorTrait.php",
    "content": "<?php\n\n/*\n * This file is part of the Symfony package.\n *\n * (c) Fabien Potencier <fabien@symfony.com>\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Symfony\\Contracts\\Translation;\n\nuse Symfony\\Component\\Translation\\Exception\\InvalidArgumentException;\n\n/**\n * A trait to help implement TranslatorInterface and LocaleAwareInterface.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ntrait TranslatorTrait\n{\n    private ?string $locale = null;\n\n    /**\n     * @return void\n     */\n    public function setLocale(string $locale)\n    {\n        $this->locale = $locale;\n    }\n\n    public function getLocale(): string\n    {\n        return $this->locale ?: (class_exists(\\Locale::class) ? \\Locale::getDefault() : 'en');\n    }\n\n    public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null): string\n    {\n        if (null === $id || '' === $id) {\n            return '';\n        }\n\n        if (!isset($parameters['%count%']) || !is_numeric($parameters['%count%'])) {\n            return strtr($id, $parameters);\n        }\n\n        $number = (float) $parameters['%count%'];\n        $locale = $locale ?: $this->getLocale();\n\n        $parts = [];\n        if (preg_match('/^\\|++$/', $id)) {\n            $parts = explode('|', $id);\n        } elseif (preg_match_all('/(?:\\|\\||[^\\|])++/', $id, $matches)) {\n            $parts = $matches[0];\n        }\n\n        $intervalRegexp = <<<'EOF'\n/^(?P<interval>\n    ({\\s*\n        (\\-?\\d+(\\.\\d+)?[\\s*,\\s*\\-?\\d+(\\.\\d+)?]*)\n    \\s*})\n\n        |\n\n    (?P<left_delimiter>[\\[\\]])\n        \\s*\n        (?P<left>-Inf|\\-?\\d+(\\.\\d+)?)\n        \\s*,\\s*\n        (?P<right>\\+?Inf|\\-?\\d+(\\.\\d+)?)\n        \\s*\n    (?P<right_delimiter>[\\[\\]])\n)\\s*(?P<message>.*?)$/xs\nEOF;\n\n        $standardRules = [];\n        foreach ($parts as $part) {\n            $part = trim(str_replace('||', '|', $part));\n\n            // try to match an explicit rule, then fallback to the standard ones\n            if (preg_match($intervalRegexp, $part, $matches)) {\n                if ($matches[2]) {\n                    foreach (explode(',', $matches[3]) as $n) {\n                        if ($number == $n) {\n                            return strtr($matches['message'], $parameters);\n                        }\n                    }\n                } else {\n                    $leftNumber = '-Inf' === $matches['left'] ? -\\INF : (float) $matches['left'];\n                    $rightNumber = is_numeric($matches['right']) ? (float) $matches['right'] : \\INF;\n\n                    if (('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber)\n                        && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)\n                    ) {\n                        return strtr($matches['message'], $parameters);\n                    }\n                }\n            } elseif (preg_match('/^\\w+\\:\\s*(.*?)$/', $part, $matches)) {\n                $standardRules[] = $matches[1];\n            } else {\n                $standardRules[] = $part;\n            }\n        }\n\n        $position = $this->getPluralizationRule($number, $locale);\n\n        if (!isset($standardRules[$position])) {\n            // when there's exactly one rule given, and that rule is a standard\n            // rule, use this rule\n            if (1 === \\count($parts) && isset($standardRules[0])) {\n                return strtr($standardRules[0], $parameters);\n            }\n\n            $message = sprintf('Unable to choose a translation for \"%s\" with locale \"%s\" for value \"%d\". Double check that this translation has the correct plural options (e.g. \"There is one apple|There are %%count%% apples\").', $id, $locale, $number);\n\n            if (class_exists(InvalidArgumentException::class)) {\n                throw new InvalidArgumentException($message);\n            }\n\n            throw new \\InvalidArgumentException($message);\n        }\n\n        return strtr($standardRules[$position], $parameters);\n    }\n\n    /**\n     * Returns the plural position to use for the given locale and number.\n     *\n     * The plural rules are derived from code of the Zend Framework (2010-09-25),\n     * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n     * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n     */\n    private function getPluralizationRule(float $number, string $locale): int\n    {\n        $number = abs($number);\n\n        return match ('pt_BR' !== $locale && 'en_US_POSIX' !== $locale && \\strlen($locale) > 3 ? substr($locale, 0, strrpos($locale, '_')) : $locale) {\n            'af',\n            'bn',\n            'bg',\n            'ca',\n            'da',\n            'de',\n            'el',\n            'en',\n            'en_US_POSIX',\n            'eo',\n            'es',\n            'et',\n            'eu',\n            'fa',\n            'fi',\n            'fo',\n            'fur',\n            'fy',\n            'gl',\n            'gu',\n            'ha',\n            'he',\n            'hu',\n            'is',\n            'it',\n            'ku',\n            'lb',\n            'ml',\n            'mn',\n            'mr',\n            'nah',\n            'nb',\n            'ne',\n            'nl',\n            'nn',\n            'no',\n            'oc',\n            'om',\n            'or',\n            'pa',\n            'pap',\n            'ps',\n            'pt',\n            'so',\n            'sq',\n            'sv',\n            'sw',\n            'ta',\n            'te',\n            'tk',\n            'ur',\n            'zu' => (1 == $number) ? 0 : 1,\n            'am',\n            'bh',\n            'fil',\n            'fr',\n            'gun',\n            'hi',\n            'hy',\n            'ln',\n            'mg',\n            'nso',\n            'pt_BR',\n            'ti',\n            'wa' => ($number < 2) ? 0 : 1,\n            'be',\n            'bs',\n            'hr',\n            'ru',\n            'sh',\n            'sr',\n            'uk' => ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2),\n            'cs',\n            'sk' => (1 == $number) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2),\n            'ga' => (1 == $number) ? 0 : ((2 == $number) ? 1 : 2),\n            'lt' => ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2),\n            'sl' => (1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3)),\n            'mk' => (1 == $number % 10) ? 0 : 1,\n            'mt' => (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3)),\n            'lv' => (0 == $number) ? 0 : (((1 == $number % 10) && (11 != $number % 100)) ? 1 : 2),\n            'pl' => (1 == $number) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2),\n            'cy' => (1 == $number) ? 0 : ((2 == $number) ? 1 : (((8 == $number) || (11 == $number)) ? 2 : 3)),\n            'ro' => (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2),\n            'ar' => (0 == $number) ? 0 : ((1 == $number) ? 1 : ((2 == $number) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5)))),\n            default => 0,\n        };\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/symfony/translation-contracts/composer.json",
    "content": "{\n    \"name\": \"symfony/translation-contracts\",\n    \"type\": \"library\",\n    \"description\": \"Generic abstractions related to translation\",\n    \"keywords\": [\"abstractions\", \"contracts\", \"decoupling\", \"interfaces\", \"interoperability\", \"standards\"],\n    \"homepage\": \"https://symfony.com\",\n    \"license\": \"MIT\",\n    \"authors\": [\n        {\n            \"name\": \"Nicolas Grekas\",\n            \"email\": \"p@tchwork.com\"\n        },\n        {\n            \"name\": \"Symfony Community\",\n            \"homepage\": \"https://symfony.com/contributors\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.1\"\n    },\n    \"autoload\": {\n        \"psr-4\": { \"Symfony\\\\Contracts\\\\Translation\\\\\": \"\" },\n        \"exclude-from-classmap\": [\n            \"/Test/\"\n        ]\n    },\n    \"minimum-stability\": \"dev\",\n    \"extra\": {\n        \"branch-alias\": {\n            \"dev-main\": \"3.4-dev\"\n        },\n        \"thanks\": {\n            \"name\": \"symfony/contracts\",\n            \"url\": \"https://github.com/symfony/contracts\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/CHANGELOG",
    "content": "# 3.14.0 (2024-09-09)\n\n * Fix a security issue when an included sandboxed template has been loaded before without the sandbox context\n * Add the possibility to reset globals via `Environment::resetGlobals()`\n * Deprecate `Environment::mergeGlobals()`\n\n# 3.13.0 (2024-09-07)\n\n * Add the `types` tag (experimental)\n * Deprecate the `Twig\\Test\\NodeTestCase::getTests()` data provider, override `provideTests()` instead.\n * Mark `Twig\\Test\\NodeTestCase::getEnvironment()` as final, override `createEnvironment()` instead.\n * Deprecate `Twig\\Test\\NodeTestCase::getVariableGetter()`, call `createVariableGetter()` instead.\n * Deprecate `Twig\\Test\\NodeTestCase::getAttributeGetter()`, call `createAttributeGetter()` instead.\n * Deprecate not overriding `Twig\\Test\\IntegrationTestCase::getFixturesDirectory()`, this method will be abstract in 4.0\n * Marked `Twig\\Test\\IntegrationTestCase::getTests()` and `getLegacyTests()` as final\n\n# 3.12.0 (2024-08-29)\n\n * Deprecate the fact that the `extends` and `use` tags are always allowed in a sandboxed template.\n   This behavior will change in 4.0 where these tags will need to be explicitly allowed like any other tag.\n * Deprecate the \"tag\" constructor argument of the \"Twig\\Node\\Node\" class as the tag is now automatically set by the Parser when needed\n * Fix precedence of two-word tests when the first word is a valid test\n * Deprecate the `spaceless` filter\n * Deprecate some internal methods from `Parser`: `getBlockStack()`, `hasBlock()`, `getBlock()`, `hasMacro()`, `hasTraits()`, `getParent()`\n * Deprecate passing `null` to `Twig\\Parser::setParent()`\n * Update `Node::__toString()` to include the node tag if set\n * Add support for integers in methods of `Twig\\Node\\Node` that take a Node name\n * Deprecate not passing a `BodyNode` instance as the body of a `ModuleNode` or `MacroNode` constructor\n * Deprecate returning \"null\" from \"TokenParserInterface::parse()\".\n * Deprecate `OptimizerNodeVisitor::OPTIMIZE_TEXT_NODES`\n * Fix performance regression when `use_yield` is `false` (which is the default)\n * Improve compatibility when `use_yield` is `false` (as extensions still using `echo` will work as is)\n * Accept colons (`:`) in addition to equals (`=`) to separate argument names and values in named arguments\n * Add the `html_cva` function (in the HTML extra package)\n * Add support for named arguments to the `block` and `attribute` functions\n * Throw a SyntaxError exception at compile time when a Twig callable has not the minimum number of required arguments\n * Add a `CallableArgumentsExtractor` class\n * Deprecate passing a name to `FunctionExpression`, `FilterExpression`, and `TestExpression`;\n   pass a `TwigFunction`, `TwigFilter`, or `TestFilter` instead\n * Deprecate all Twig callable attributes on `FunctionExpression`, `FilterExpression`, and `TestExpression`\n * Deprecate the `filter` node of `FilterExpression`\n * Add the notion of Twig callables (functions, filters, and tests)\n * Bump minimum PHP version to 8.0\n * Fix integration tests when a test has more than one data/expect section and deprecations\n * Add the `enum_cases` function\n\n# 3.11.0 (2024-08-08)\n\n * Deprecate `OptimizerNodeVisitor::OPTIMIZE_RAW_FILTER`\n * Add `Twig\\Cache\\ChainCache` and `Twig\\Cache\\ReadOnlyFilesystemCache`\n * Add the possibility to deprecate attributes and nodes on `Node`\n * Add the possibility to add a package and a version to the `deprecated` tag\n * Add the possibility to add a package for filter/function/test deprecations\n * Mark `ConstantExpression` as being `@final`\n * Add the `find` filter\n * Fix optimizer mode validation in `OptimizerNodeVisitor`\n * Add the possibility to yield from a generator in `PrintNode`\n * Add the `shuffle` filter\n * Add the `singular` and `plural` filters in `StringExtension`\n * Deprecate the second argument of `Twig\\Node\\Expression\\CallExpression::compileArguments()`\n * Deprecate `Twig\\ExpressionParser\\parseHashExpression()` in favor of\n   `Twig\\ExpressionParser::parseMappingExpression()`\n * Deprecate `Twig\\ExpressionParser\\parseArrayExpression()` in favor of\n   `Twig\\ExpressionParser::parseSequenceExpression()`\n * Add `sequence` and `mapping` tests\n * Deprecate `Twig\\Node\\Expression\\NameExpression::isSimple()` and\n    `Twig\\Node\\Expression\\NameExpression::isSpecial()`\n\n# 3.10.3 (2024-05-16)\n\n * Fix missing ; in generated code\n\n# 3.10.2 (2024-05-14)\n\n * Fix support for the deprecated escaper signature\n\n# 3.10.1 (2024-05-12)\n\n * Fix BC break on escaper extension\n * Fix constant return type\n\n# 3.10.0 (2024-05-11)\n\n * Make `CoreExtension::formatDate`, `CoreExtension::convertDate`, and\n   `CoreExtension::formatNumber` part of the public API\n * Add `needs_charset` option for filters and functions\n * Extract the escaping logic from the `EscaperExtension` class to a new\n   `EscaperRuntime` class.\n\n   The following methods from ``Twig\\\\Extension\\\\EscaperExtension`` are\n   deprecated: ``setEscaper()``, ``getEscapers()``, ``setSafeClasses``,\n   ``addSafeClasses()``. Use the same methods on the\n   ``Twig\\\\Runtime\\\\EscaperRuntime`` class instead.\n  * Fix capturing output from extensions that still use echo\n  * Fix a PHP warning in the Lexer on malformed templates\n  * Fix blocks not available under some circumstances\n  * Synchronize source context in templates when setting a Node on a Node\n\n# 3.9.3 (2024-04-18)\n\n * Add missing `twig_escape_filter_is_safe` deprecated function\n * Fix yield usage with CaptureNode\n * Add missing unwrap call when using a TemplateWrapper instance internally\n * Ensure Lexer is initialized early on\n\n# 3.9.2 (2024-04-17)\n\n * Fix usage of display_end hook\n\n# 3.9.1 (2024-04-17)\n\n * Fix missing `$blocks` variable in `CaptureNode`\n\n# 3.9.0 (2024-04-16)\n\n * Add support for PHP 8.4\n * Deprecate AbstractNodeVisitor\n * Deprecate passing Template to Environment::resolveTemplate(), Environment::load(), and Template::loadTemplate()\n * Add a new \"yield\" mode for output generation;\n   Node implementations that use \"echo\" or \"print\" should use \"yield\" instead;\n   all Node implementations should be flagged with `#[YieldReady]` once they've been made ready for \"yield\";\n   the \"use_yield\" Environment option can be turned on when all nodes have been made `#[YieldReady]`;\n   \"yield\" will be the only strategy supported in the next major version\n * Add return type for Symfony 7 compatibility\n * Fix premature loop exit in Security Policy lookup of allowed methods/properties\n * Deprecate all internal extension functions in favor of methods on the extension classes\n * Mark all extension functions as @internal\n * Add SourcePolicyInterface to selectively enable the Sandbox based on a template's Source\n * Throw a proper Twig exception when using cycle on an empty array\n\n# 3.8.0 (2023-11-21)\n\n * Catch errors thrown during template rendering\n * Fix IntlExtension::formatDateTime use of date formatter prototype\n * Fix premature loop exit in Security Policy lookup of allowed methods/properties\n * Remove NumberFormatter::TYPE_CURRENCY (deprecated in PHP 8.3)\n * Restore return type annotations\n * Allow Symfony 7 packages to be installed\n * Deprecate `twig_test_iterable` function. Use the native `is_iterable` instead.\n\n# 3.7.1 (2023-08-28)\n\n * Fix some phpdocs\n\n# 3.7.0 (2023-07-26)\n\n * Add support for the ...spread operator on arrays and hashes\n\n# 3.6.1 (2023-06-08)\n\n * Suppress some native return type deprecation messages\n\n# 3.6.0 (2023-05-03)\n\n * Allow psr/container 2.0\n * Add the new PHP 8.0 IntlDateFormatter::RELATIVE_* constants for date formatting\n * Make the Lexer initialize itself lazily\n\n# 3.5.1 (2023-02-08)\n\n * Arrow functions passed to the \"reduce\" filter now accept the current key as a third argument\n * Restores the leniency of the matches twig comparison\n * Fix error messages in sandboxed mode for \"has some\" and \"has every\"\n\n# 3.5.0 (2022-12-27)\n\n * Make Twig\\ExpressionParser non-internal\n * Add \"has some\" and \"has every\" operators\n * Add Compile::reset()\n * Throw a better runtime error when the \"matches\" regexp is not valid\n * Add \"twig *_names\" intl functions\n * Fix optimizing closures callbacks\n * Add a better exception when getting an undefined constant via `constant`\n * Fix `if` nodes when outside of a block and with an empty body\n\n# 3.4.3 (2022-09-28)\n\n * Fix a security issue on filesystem loader (possibility to load a template outside a configured directory)\n\n# 3.4.2 (2022-08-12)\n\n * Allow inherited magic method to still run with calling class\n * Fix CallExpression::reflectCallable() throwing TypeError\n * Fix typo in naming (currency_code)\n\n# 3.4.1 (2022-05-17)\n\n* Fix optimizing non-public named closures\n\n# 3.4.0 (2022-05-22)\n\n * Add support for named closures\n\n# 3.3.10 (2022-04-06)\n\n * Enable bytecode invalidation when auto_reload is enabled\n\n# 3.3.9 (2022-03-25)\n\n * Fix custom escapers when using multiple Twig environments\n * Add support for \"constant('class', object)\"\n * Do not reuse internally generated variable names during parsing\n\n# 3.3.8 (2022-02-04)\n\n * Fix a security issue when in a sandbox: the `sort` filter must require a Closure for the `arrow` parameter\n * Fix deprecation notice on `round`\n * Fix call to deprecated `convertToHtml` method\n\n# 3.3.7 (2022-01-03)\n\n* Allow more null support when Twig expects a string (for better 8.1 support)\n* Only use Commonmark extensions if markdown enabled\n\n# 3.3.6 (2022-01-03)\n\n* Only use Commonmark extensions if markdown enabled\n\n# 3.3.5 (2022-01-03)\n\n* Allow CommonMark extensions to easily be added\n* Allow null when Twig expects a string (for better 8.1 support)\n* Make some performance optimizations\n* Allow Symfony translation contract v3+\n\n# 3.3.4 (2021-11-25)\n\n * Bump minimum supported Symfony component versions\n * Fix a deprecated message\n\n# 3.3.3 (2021-09-17)\n\n * Allow Symfony 6\n * Improve compatibility with PHP 8.1\n * Explicitly specify the encoding for mb_ord in JS escaper\n\n# 3.3.2 (2021-05-16)\n\n * Revert \"Throw a proper exception when a template name is an absolute path (as it has never been supported)\"\n\n# 3.3.1 (2021-05-12)\n\n * Fix PHP 8.1 compatibility\n * Throw a proper exception when a template name is an absolute path (as it has never been supported)\n\n# 3.3.0 (2021-02-08)\n\n * Fix macro calls in a \"cache\" tag\n * Add the slug filter\n * Allow extra bundle to be compatible with Twig 2\n\n# 3.2.1 (2021-01-05)\n\n * Fix extra bundle compat with older versions of Symfony\n\n# 3.2.0 (2021-01-05)\n\n * Add the Cache extension in the \"extra\" repositories: \"cache\" tag\n * Add \"registerUndefinedTokenParserCallback\"\n * Mark built-in node visitors as @internal\n * Fix \"odd\" not working for negative numbers\n\n# 3.1.1 (2020-10-27)\n\n * Fix \"include(template_from_string())\"\n\n# 3.1.0 (2020-10-21)\n\n * Fix sandbox support when using \"include(template_from_string())\"\n * Make round brackets optional for one argument tests like \"same as\" or \"divisible by\"\n * Add support for ES2015 style object initialisation shortcut { a } is the same as { 'a': a }\n\n# 3.0.5 (2020-08-05)\n\n * Fix twig_compare w.r.t. whitespace trimming\n * Fix sandbox not disabled if syntax error occurs within {% sandbox %} tag\n * Fix a regression when not using a space before an operator\n * Restrict callables to closures in filters\n * Allow trailing commas in argument lists (in calls as well as definitions)\n\n# 3.0.4 (2020-07-05)\n\n * Fix comparison operators\n * Fix options not taken into account when using \"Michelf\\MarkdownExtra\"\n * Fix \"Twig\\Extra\\Intl\\IntlExtension::getCountryName()\" to accept \"null\" as a first argument\n * Throw exception in case non-Traversable data is passed to \"filter\"\n * Fix context optimization on PHP 7.4\n * Fix PHP 8 compatibility\n * Fix ambiguous syntax parsing\n\n# 3.0.3 (2020-02-11)\n\n * Add a check to ensure that iconv() is defined\n\n# 3.0.2 (2020-02-11)\n\n * Avoid exceptions when an intl resource is not found\n * Fix implementation of case-insensitivity for method names\n\n# 3.0.1 (2019-12-28)\n\n * fixed Symfony 5.0 support for the HTML extra extension\n\n# 3.0.0 (2019-11-15)\n\n * fixed number formatter in Intl extra extension when using a formatter prototype\n\n# 3.0.0-BETA1 (2019-11-11)\n\n * removed the \"if\" condition support on the \"for\" tag\n * made the in, <, >, <=, >=, ==, and != operators more strict when comparing strings and integers/floats\n * removed the \"filter\" tag\n * added type hints everywhere\n * changed Environment::resolveTemplate() to always return a TemplateWrapper instance\n * removed Template::__toString()\n * removed Parser::isReservedMacroName()\n * removed SanboxedPrintNode\n * removed Node::setTemplateName()\n * made classes marked as \"@final\" final\n * removed InitRuntimeInterface, ExistsLoaderInterface, and SourceContextLoaderInterface\n * removed the \"spaceless\" tag\n * removed Twig\\Environment::getBaseTemplateClass() and Twig\\Environment::setBaseTemplateClass()\n * removed the \"base_template_class\" option on Twig\\Environment\n * bumped minimum PHP version to 7.2\n * removed PSR-0 classes\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/LICENSE",
    "content": "Copyright (c) 2009-present by the Twig Team.\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n    * Redistributions of source code must retain the above copyright notice,\n      this list of conditions and the following disclaimer.\n    * Redistributions in binary form must reproduce the above copyright notice,\n      this list of conditions and the following disclaimer in the documentation\n      and/or other materials provided with the distribution.\n    * Neither the name of Twig nor the names of its contributors\n      may be used to endorse or promote products derived from this software\n      without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\nLIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\nA PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\nEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\nPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/README.rst",
    "content": "Twig, the flexible, fast, and secure template language for PHP\n==============================================================\n\nTwig is a template language for PHP.\n\nTwig uses a syntax similar to the Django and Jinja template languages which\ninspired the Twig runtime environment.\n\nSponsors\n--------\n\n.. raw:: html\n\n    <a href=\"https://docs.blackfire.io/introduction?utm_source=twig&utm_medium=github_readme&utm_campaign=logo\">\n        <img src=\"https://static.blackfire.io/assets/intemporals/logo/png/blackfire-io_secondary_horizontal_transparent.png?1\" width=\"255px\" alt=\"Blackfire.io\">\n    </a>\n\nMore Information\n----------------\n\nRead the `documentation`_ for more information.\n\n.. _documentation: https://twig.symfony.com/documentation\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/composer.json",
    "content": "{\n    \"name\": \"twig/twig\",\n    \"type\": \"library\",\n    \"description\": \"Twig, the flexible, fast, and secure template language for PHP\",\n    \"keywords\": [\"templating\"],\n    \"homepage\": \"https://twig.symfony.com\",\n    \"license\": \"BSD-3-Clause\",\n    \"minimum-stability\": \"dev\",\n    \"authors\": [\n        {\n            \"name\": \"Fabien Potencier\",\n            \"email\": \"fabien@symfony.com\",\n            \"homepage\": \"http://fabien.potencier.org\",\n            \"role\": \"Lead Developer\"\n        },\n        {\n            \"name\": \"Twig Team\",\n            \"role\": \"Contributors\"\n        },\n        {\n            \"name\": \"Armin Ronacher\",\n            \"email\": \"armin.ronacher@active-4.com\",\n            \"role\": \"Project Founder\"\n        }\n    ],\n    \"require\": {\n        \"php\": \">=8.0.2\",\n        \"symfony/deprecation-contracts\": \"^2.5|^3\",\n        \"symfony/polyfill-mbstring\": \"^1.3\",\n        \"symfony/polyfill-ctype\": \"^1.8\",\n        \"symfony/polyfill-php81\": \"^1.29\"\n    },\n    \"require-dev\": {\n        \"symfony/phpunit-bridge\": \"^5.4.9|^6.4|^7.0\",\n        \"psr/container\": \"^1.0|^2.0\"\n    },\n    \"autoload\": {\n        \"files\": [\n            \"src/Resources/core.php\",\n            \"src/Resources/debug.php\",\n            \"src/Resources/escaper.php\",\n            \"src/Resources/string_loader.php\"\n        ],\n        \"psr-4\" : {\n            \"Twig\\\\\" : \"src/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\" : {\n            \"Twig\\\\Tests\\\\\" : \"tests/\"\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/AbstractTwigCallable.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\nabstract class AbstractTwigCallable implements TwigCallableInterface\n{\n    protected $options;\n\n    private $name;\n    private $dynamicName;\n    private $callable;\n    private $arguments;\n\n    public function __construct(string $name, $callable = null, array $options = [])\n    {\n        $this->name = $this->dynamicName = $name;\n        $this->callable = $callable;\n        $this->arguments = [];\n        $this->options = array_merge([\n            'needs_environment' => false,\n            'needs_context' => false,\n            'needs_charset' => false,\n            'is_variadic' => false,\n            'deprecated' => false,\n            'deprecating_package' => '',\n            'alternative' => null,\n        ], $options);\n    }\n\n    public function __toString(): string\n    {\n        return \\sprintf('%s(%s)', static::class, $this->name);\n    }\n\n    public function getName(): string\n    {\n        return $this->name;\n    }\n\n    public function getDynamicName(): string\n    {\n        return $this->dynamicName;\n    }\n\n    public function getCallable()\n    {\n        return $this->callable;\n    }\n\n    public function getNodeClass(): string\n    {\n        return $this->options['node_class'];\n    }\n\n    public function needsCharset(): bool\n    {\n        return $this->options['needs_charset'];\n    }\n\n    public function needsEnvironment(): bool\n    {\n        return $this->options['needs_environment'];\n    }\n\n    public function needsContext(): bool\n    {\n        return $this->options['needs_context'];\n    }\n\n    public function withDynamicArguments(string $name, string $dynamicName, array $arguments): self\n    {\n        $new = clone $this;\n        $new->name = $name;\n        $new->dynamicName = $dynamicName;\n        $new->arguments = $arguments;\n\n        return $new;\n    }\n\n    /**\n     * @deprecated since Twig 3.12, use withDynamicArguments() instead\n     */\n    public function setArguments(array $arguments): void\n    {\n        trigger_deprecation('twig/twig', '3.12', 'The \"%s::setArguments()\" method is deprecated, use \"%s::withDynamicArguments()\" instead.', static::class, static::class);\n\n        $this->arguments = $arguments;\n    }\n\n    public function getArguments(): array\n    {\n        return $this->arguments;\n    }\n\n    public function isVariadic(): bool\n    {\n        return $this->options['is_variadic'];\n    }\n\n    public function isDeprecated(): bool\n    {\n        return (bool) $this->options['deprecated'];\n    }\n\n    public function getDeprecatingPackage(): string\n    {\n        return $this->options['deprecating_package'];\n    }\n\n    public function getDeprecatedVersion(): string\n    {\n        return \\is_bool($this->options['deprecated']) ? '' : $this->options['deprecated'];\n    }\n\n    public function getAlternative(): ?string\n    {\n        return $this->options['alternative'];\n    }\n\n    public function getMinimalNumberOfRequiredArguments(): int\n    {\n        return ($this->options['needs_charset'] ? 1 : 0) + ($this->options['needs_environment'] ? 1 : 0) + ($this->options['needs_context'] ? 1 : 0) + \\count($this->arguments);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Attribute/FirstClassTwigCallableReady.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Attribute;\n\n/**\n * Marks nodes that are ready to accept a TwigCallable instead of its name.\n */\n#[\\Attribute(\\Attribute::TARGET_METHOD)]\nfinal class FirstClassTwigCallableReady\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Attribute/YieldReady.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Attribute;\n\n/**\n * Marks nodes that are ready for using \"yield\" instead of \"echo\" or \"print()\" for rendering.\n */\n#[\\Attribute(\\Attribute::TARGET_CLASS)]\nfinal class YieldReady\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Cache/CacheInterface.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Cache;\n\n/**\n * Interface implemented by cache classes.\n *\n * It is highly recommended to always store templates on the filesystem to\n * benefit from the PHP opcode cache. This interface is mostly useful if you\n * need to implement a custom strategy for storing templates on the filesystem.\n *\n * @author Andrew Tch <andrew@noop.lv>\n */\ninterface CacheInterface\n{\n    /**\n     * Generates a cache key for the given template class name.\n     */\n    public function generateKey(string $name, string $className): string;\n\n    /**\n     * Writes the compiled template to cache.\n     *\n     * @param string $content The template representation as a PHP class\n     */\n    public function write(string $key, string $content): void;\n\n    /**\n     * Loads a template from the cache.\n     */\n    public function load(string $key): void;\n\n    /**\n     * Returns the modification timestamp of a key.\n     */\n    public function getTimestamp(string $key): int;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Cache/ChainCache.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Cache;\n\n/**\n * Chains several caches together.\n *\n * Cached items are fetched from the first cache having them in its data store.\n * They are saved and deleted in all adapters at once.\n *\n * @author Quentin Devos <quentin@devos.pm>\n */\nfinal class ChainCache implements CacheInterface\n{\n    /**\n     * @param iterable<CacheInterface> $caches The ordered list of caches used to store and fetch cached items\n     */\n    public function __construct(\n        private iterable $caches,\n    ) {\n    }\n\n    public function generateKey(string $name, string $className): string\n    {\n        return $className.'#'.$name;\n    }\n\n    public function write(string $key, string $content): void\n    {\n        $splitKey = $this->splitKey($key);\n\n        foreach ($this->caches as $cache) {\n            $cache->write($cache->generateKey(...$splitKey), $content);\n        }\n    }\n\n    public function load(string $key): void\n    {\n        [$name, $className] = $this->splitKey($key);\n\n        foreach ($this->caches as $cache) {\n            $cache->load($cache->generateKey($name, $className));\n\n            if (class_exists($className, false)) {\n                break;\n            }\n        }\n    }\n\n    public function getTimestamp(string $key): int\n    {\n        $splitKey = $this->splitKey($key);\n\n        foreach ($this->caches as $cache) {\n            if (0 < $timestamp = $cache->getTimestamp($cache->generateKey(...$splitKey))) {\n                return $timestamp;\n            }\n        }\n\n        return 0;\n    }\n\n    /**\n     * @return string[]\n     */\n    private function splitKey(string $key): array\n    {\n        return array_reverse(explode('#', $key, 2));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Cache/FilesystemCache.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Cache;\n\n/**\n * Implements a cache on the filesystem.\n *\n * @author Andrew Tch <andrew@noop.lv>\n */\nclass FilesystemCache implements CacheInterface\n{\n    public const FORCE_BYTECODE_INVALIDATION = 1;\n\n    private $directory;\n    private $options;\n\n    public function __construct(string $directory, int $options = 0)\n    {\n        $this->directory = rtrim($directory, '\\/').'/';\n        $this->options = $options;\n    }\n\n    public function generateKey(string $name, string $className): string\n    {\n        $hash = hash(\\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $className);\n\n        return $this->directory.$hash[0].$hash[1].'/'.$hash.'.php';\n    }\n\n    public function load(string $key): void\n    {\n        if (is_file($key)) {\n            @include_once $key;\n        }\n    }\n\n    public function write(string $key, string $content): void\n    {\n        $dir = \\dirname($key);\n        if (!is_dir($dir)) {\n            if (false === @mkdir($dir, 0777, true)) {\n                clearstatcache(true, $dir);\n                if (!is_dir($dir)) {\n                    throw new \\RuntimeException(\\sprintf('Unable to create the cache directory (%s).', $dir));\n                }\n            }\n        } elseif (!is_writable($dir)) {\n            throw new \\RuntimeException(\\sprintf('Unable to write in the cache directory (%s).', $dir));\n        }\n\n        $tmpFile = tempnam($dir, basename($key));\n        if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $key)) {\n            @chmod($key, 0666 & ~umask());\n\n            if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) {\n                // Compile cached file into bytecode cache\n                if (\\function_exists('opcache_invalidate') && filter_var(\\ini_get('opcache.enable'), \\FILTER_VALIDATE_BOOLEAN)) {\n                    @opcache_invalidate($key, true);\n                } elseif (\\function_exists('apc_compile_file')) {\n                    apc_compile_file($key);\n                }\n            }\n\n            return;\n        }\n\n        throw new \\RuntimeException(\\sprintf('Failed to write cache file \"%s\".', $key));\n    }\n\n    public function getTimestamp(string $key): int\n    {\n        if (!is_file($key)) {\n            return 0;\n        }\n\n        return (int) @filemtime($key);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Cache/NullCache.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Cache;\n\n/**\n * Implements a no-cache strategy.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nfinal class NullCache implements CacheInterface\n{\n    public function generateKey(string $name, string $className): string\n    {\n        return '';\n    }\n\n    public function write(string $key, string $content): void\n    {\n    }\n\n    public function load(string $key): void\n    {\n    }\n\n    public function getTimestamp(string $key): int\n    {\n        return 0;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Cache;\n\n/**\n * Implements a cache on the filesystem that can only be read, not written to.\n *\n * @author Quentin Devos <quentin@devos.pm>\n */\nclass ReadOnlyFilesystemCache extends FilesystemCache\n{\n    public function write(string $key, string $content): void\n    {\n        // Do nothing with the content, it's a read-only filesystem.\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Compiler.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\nuse Twig\\Node\\Node;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass Compiler\n{\n    private $lastLine;\n    private $source;\n    private $indentation;\n    private $debugInfo = [];\n    private $sourceOffset;\n    private $sourceLine;\n    private $varNameSalt = 0;\n    private $didUseEcho = false;\n    private $didUseEchoStack = [];\n\n    public function __construct(\n        private Environment $env,\n    ) {\n    }\n\n    public function getEnvironment(): Environment\n    {\n        return $this->env;\n    }\n\n    public function getSource(): string\n    {\n        return $this->source;\n    }\n\n    /**\n     * @return $this\n     */\n    public function reset(int $indentation = 0)\n    {\n        $this->lastLine = null;\n        $this->source = '';\n        $this->debugInfo = [];\n        $this->sourceOffset = 0;\n        // source code starts at 1 (as we then increment it when we encounter new lines)\n        $this->sourceLine = 1;\n        $this->indentation = $indentation;\n        $this->varNameSalt = 0;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function compile(Node $node, int $indentation = 0)\n    {\n        $this->reset($indentation);\n        $this->didUseEchoStack[] = $this->didUseEcho;\n\n        try {\n            $this->didUseEcho = false;\n            $node->compile($this);\n\n            if ($this->didUseEcho) {\n                trigger_deprecation('twig/twig', '3.9', 'Using \"%s\" is deprecated, use \"yield\" instead in \"%s\", then flag the class with #[YieldReady].', $this->didUseEcho, \\get_class($node));\n            }\n\n            return $this;\n        } finally {\n            $this->didUseEcho = array_pop($this->didUseEchoStack);\n        }\n    }\n\n    /**\n     * @return $this\n     */\n    public function subcompile(Node $node, bool $raw = true)\n    {\n        if (!$raw) {\n            $this->source .= str_repeat(' ', $this->indentation * 4);\n        }\n\n        $this->didUseEchoStack[] = $this->didUseEcho;\n\n        try {\n            $this->didUseEcho = false;\n            $node->compile($this);\n\n            if ($this->didUseEcho) {\n                trigger_deprecation('twig/twig', '3.9', 'Using \"%s\" is deprecated, use \"yield\" instead in \"%s\", then flag the class with #[YieldReady].', $this->didUseEcho, \\get_class($node));\n            }\n\n            return $this;\n        } finally {\n            $this->didUseEcho = array_pop($this->didUseEchoStack);\n        }\n    }\n\n    /**\n     * Adds a raw string to the compiled code.\n     *\n     * @return $this\n     */\n    public function raw(string $string)\n    {\n        $this->checkForEcho($string);\n        $this->source .= $string;\n\n        return $this;\n    }\n\n    /**\n     * Writes a string to the compiled code by adding indentation.\n     *\n     * @return $this\n     */\n    public function write(...$strings)\n    {\n        foreach ($strings as $string) {\n            $this->checkForEcho($string);\n            $this->source .= str_repeat(' ', $this->indentation * 4).$string;\n        }\n\n        return $this;\n    }\n\n    /**\n     * Adds a quoted string to the compiled code.\n     *\n     * @return $this\n     */\n    public function string(string $value)\n    {\n        $this->source .= \\sprintf('\"%s\"', addcslashes($value, \"\\0\\t\\\"\\$\\\\\"));\n\n        return $this;\n    }\n\n    /**\n     * Returns a PHP representation of a given value.\n     *\n     * @return $this\n     */\n    public function repr($value)\n    {\n        if (\\is_int($value) || \\is_float($value)) {\n            if (false !== $locale = setlocale(\\LC_NUMERIC, '0')) {\n                setlocale(\\LC_NUMERIC, 'C');\n            }\n\n            $this->raw(var_export($value, true));\n\n            if (false !== $locale) {\n                setlocale(\\LC_NUMERIC, $locale);\n            }\n        } elseif (null === $value) {\n            $this->raw('null');\n        } elseif (\\is_bool($value)) {\n            $this->raw($value ? 'true' : 'false');\n        } elseif (\\is_array($value)) {\n            $this->raw('array(');\n            $first = true;\n            foreach ($value as $key => $v) {\n                if (!$first) {\n                    $this->raw(', ');\n                }\n                $first = false;\n                $this->repr($key);\n                $this->raw(' => ');\n                $this->repr($v);\n            }\n            $this->raw(')');\n        } else {\n            $this->string($value);\n        }\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     */\n    public function addDebugInfo(Node $node)\n    {\n        if ($node->getTemplateLine() != $this->lastLine) {\n            $this->write(\\sprintf(\"// line %d\\n\", $node->getTemplateLine()));\n\n            $this->sourceLine += substr_count($this->source, \"\\n\", $this->sourceOffset);\n            $this->sourceOffset = \\strlen($this->source);\n            $this->debugInfo[$this->sourceLine] = $node->getTemplateLine();\n\n            $this->lastLine = $node->getTemplateLine();\n        }\n\n        return $this;\n    }\n\n    public function getDebugInfo(): array\n    {\n        ksort($this->debugInfo);\n\n        return $this->debugInfo;\n    }\n\n    /**\n     * @return $this\n     */\n    public function indent(int $step = 1)\n    {\n        $this->indentation += $step;\n\n        return $this;\n    }\n\n    /**\n     * @return $this\n     *\n     * @throws \\LogicException When trying to outdent too much so the indentation would become negative\n     */\n    public function outdent(int $step = 1)\n    {\n        // can't outdent by more steps than the current indentation level\n        if ($this->indentation < $step) {\n            throw new \\LogicException('Unable to call outdent() as the indentation would become negative.');\n        }\n\n        $this->indentation -= $step;\n\n        return $this;\n    }\n\n    public function getVarName(): string\n    {\n        return \\sprintf('__internal_compile_%d', $this->varNameSalt++);\n    }\n\n    private function checkForEcho(string $string): void\n    {\n        if ($this->didUseEcho) {\n            return;\n        }\n\n        $this->didUseEcho = preg_match('/^\\s*+(echo|print)\\b/', $string, $m) ? $m[1] : false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Environment.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\nuse Twig\\Cache\\CacheInterface;\nuse Twig\\Cache\\FilesystemCache;\nuse Twig\\Cache\\NullCache;\nuse Twig\\Error\\Error;\nuse Twig\\Error\\LoaderError;\nuse Twig\\Error\\RuntimeError;\nuse Twig\\Error\\SyntaxError;\nuse Twig\\Extension\\CoreExtension;\nuse Twig\\Extension\\EscaperExtension;\nuse Twig\\Extension\\ExtensionInterface;\nuse Twig\\Extension\\OptimizerExtension;\nuse Twig\\Extension\\YieldNotReadyExtension;\nuse Twig\\Loader\\ArrayLoader;\nuse Twig\\Loader\\ChainLoader;\nuse Twig\\Loader\\LoaderInterface;\nuse Twig\\Node\\Expression\\Binary\\AbstractBinary;\nuse Twig\\Node\\Expression\\Unary\\AbstractUnary;\nuse Twig\\Node\\ModuleNode;\nuse Twig\\Node\\Node;\nuse Twig\\NodeVisitor\\NodeVisitorInterface;\nuse Twig\\Runtime\\EscaperRuntime;\nuse Twig\\RuntimeLoader\\FactoryRuntimeLoader;\nuse Twig\\RuntimeLoader\\RuntimeLoaderInterface;\nuse Twig\\TokenParser\\TokenParserInterface;\n\n/**\n * Stores the Twig configuration and renders templates.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass Environment\n{\n    public const VERSION = '3.14.0';\n    public const VERSION_ID = 31400;\n    public const MAJOR_VERSION = 3;\n    public const MINOR_VERSION = 14;\n    public const RELEASE_VERSION = 0;\n    public const EXTRA_VERSION = '';\n\n    private $charset;\n    private $loader;\n    private $debug;\n    private $autoReload;\n    private $cache;\n    private $lexer;\n    private $parser;\n    private $compiler;\n    /** @var array<string, mixed> */\n    private $globals = [];\n    private $resolvedGlobals;\n    private $loadedTemplates;\n    private $strictVariables;\n    private $originalCache;\n    private $extensionSet;\n    private $runtimeLoaders = [];\n    private $runtimes = [];\n    private $optionsHash;\n    /** @var bool */\n    private $useYield;\n    private $defaultRuntimeLoader;\n\n    /**\n     * Constructor.\n     *\n     * Available options:\n     *\n     *  * debug: When set to true, it automatically set \"auto_reload\" to true as\n     *           well (default to false).\n     *\n     *  * charset: The charset used by the templates (default to UTF-8).\n     *\n     *  * cache: An absolute path where to store the compiled templates,\n     *           a \\Twig\\Cache\\CacheInterface implementation,\n     *           or false to disable compilation cache (default).\n     *\n     *  * auto_reload: Whether to reload the template if the original source changed.\n     *                 If you don't provide the auto_reload option, it will be\n     *                 determined automatically based on the debug value.\n     *\n     *  * strict_variables: Whether to ignore invalid variables in templates\n     *                      (default to false).\n     *\n     *  * autoescape: Whether to enable auto-escaping (default to html):\n     *                  * false: disable auto-escaping\n     *                  * html, js: set the autoescaping to one of the supported strategies\n     *                  * name: set the autoescaping strategy based on the template name extension\n     *                  * PHP callback: a PHP callback that returns an escaping strategy based on the template \"name\"\n     *\n     *  * optimizations: A flag that indicates which optimizations to apply\n     *                   (default to -1 which means that all optimizations are enabled;\n     *                   set it to 0 to disable).\n     *\n     *  * use_yield: true: forces templates to exclusively use \"yield\" instead of \"echo\" (all extensions must be yield ready)\n     *               false (default): allows templates to use a mix of \"yield\" and \"echo\" calls to allow for a progressive migration\n     *               Switch to \"true\" when possible as this will be the only supported mode in Twig 4.0\n     */\n    public function __construct(LoaderInterface $loader, array $options = [])\n    {\n        $this->setLoader($loader);\n\n        $options = array_merge([\n            'debug' => false,\n            'charset' => 'UTF-8',\n            'strict_variables' => false,\n            'autoescape' => 'html',\n            'cache' => false,\n            'auto_reload' => null,\n            'optimizations' => -1,\n            'use_yield' => false,\n        ], $options);\n\n        $this->useYield = (bool) $options['use_yield'];\n        $this->debug = (bool) $options['debug'];\n        $this->setCharset($options['charset'] ?? 'UTF-8');\n        $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload'];\n        $this->strictVariables = (bool) $options['strict_variables'];\n        $this->setCache($options['cache']);\n        $this->extensionSet = new ExtensionSet();\n        $this->defaultRuntimeLoader = new FactoryRuntimeLoader([\n            EscaperRuntime::class => function () { return new EscaperRuntime($this->charset); },\n        ]);\n\n        $this->addExtension(new CoreExtension());\n        $escaperExt = new EscaperExtension($options['autoescape']);\n        $escaperExt->setEnvironment($this, false);\n        $this->addExtension($escaperExt);\n        if (\\PHP_VERSION_ID >= 80000) {\n            $this->addExtension(new YieldNotReadyExtension($this->useYield));\n        }\n        $this->addExtension(new OptimizerExtension($options['optimizations']));\n    }\n\n    /**\n     * @internal\n     */\n    public function useYield(): bool\n    {\n        return $this->useYield;\n    }\n\n    /**\n     * Enables debugging mode.\n     */\n    public function enableDebug()\n    {\n        $this->debug = true;\n        $this->updateOptionsHash();\n    }\n\n    /**\n     * Disables debugging mode.\n     */\n    public function disableDebug()\n    {\n        $this->debug = false;\n        $this->updateOptionsHash();\n    }\n\n    /**\n     * Checks if debug mode is enabled.\n     *\n     * @return bool true if debug mode is enabled, false otherwise\n     */\n    public function isDebug()\n    {\n        return $this->debug;\n    }\n\n    /**\n     * Enables the auto_reload option.\n     */\n    public function enableAutoReload()\n    {\n        $this->autoReload = true;\n    }\n\n    /**\n     * Disables the auto_reload option.\n     */\n    public function disableAutoReload()\n    {\n        $this->autoReload = false;\n    }\n\n    /**\n     * Checks if the auto_reload option is enabled.\n     *\n     * @return bool true if auto_reload is enabled, false otherwise\n     */\n    public function isAutoReload()\n    {\n        return $this->autoReload;\n    }\n\n    /**\n     * Enables the strict_variables option.\n     */\n    public function enableStrictVariables()\n    {\n        $this->strictVariables = true;\n        $this->updateOptionsHash();\n    }\n\n    /**\n     * Disables the strict_variables option.\n     */\n    public function disableStrictVariables()\n    {\n        $this->strictVariables = false;\n        $this->updateOptionsHash();\n    }\n\n    /**\n     * Checks if the strict_variables option is enabled.\n     *\n     * @return bool true if strict_variables is enabled, false otherwise\n     */\n    public function isStrictVariables()\n    {\n        return $this->strictVariables;\n    }\n\n    /**\n     * Gets the current cache implementation.\n     *\n     * @param bool $original Whether to return the original cache option or the real cache instance\n     *\n     * @return CacheInterface|string|false A Twig\\Cache\\CacheInterface implementation,\n     *                                     an absolute path to the compiled templates,\n     *                                     or false to disable cache\n     */\n    public function getCache($original = true)\n    {\n        return $original ? $this->originalCache : $this->cache;\n    }\n\n    /**\n     * Sets the current cache implementation.\n     *\n     * @param CacheInterface|string|false $cache A Twig\\Cache\\CacheInterface implementation,\n     *                                           an absolute path to the compiled templates,\n     *                                           or false to disable cache\n     */\n    public function setCache($cache)\n    {\n        if (\\is_string($cache)) {\n            $this->originalCache = $cache;\n            $this->cache = new FilesystemCache($cache, $this->autoReload ? FilesystemCache::FORCE_BYTECODE_INVALIDATION : 0);\n        } elseif (false === $cache) {\n            $this->originalCache = $cache;\n            $this->cache = new NullCache();\n        } elseif ($cache instanceof CacheInterface) {\n            $this->originalCache = $this->cache = $cache;\n        } else {\n            throw new \\LogicException('Cache can only be a string, false, or a \\Twig\\Cache\\CacheInterface implementation.');\n        }\n    }\n\n    /**\n     * Gets the template class associated with the given string.\n     *\n     * The generated template class is based on the following parameters:\n     *\n     *  * The cache key for the given template;\n     *  * The currently enabled extensions;\n     *  * PHP version;\n     *  * Twig version;\n     *  * Options with what environment was created.\n     *\n     * @param string   $name  The name for which to calculate the template class name\n     * @param int|null $index The index if it is an embedded template\n     *\n     * @internal\n     */\n    public function getTemplateClass(string $name, ?int $index = null): string\n    {\n        $key = $this->getLoader()->getCacheKey($name).$this->optionsHash;\n\n        return '__TwigTemplate_'.hash(\\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $key).(null === $index ? '' : '___'.$index);\n    }\n\n    /**\n     * Renders a template.\n     *\n     * @param string|TemplateWrapper $name The template name\n     *\n     * @throws LoaderError  When the template cannot be found\n     * @throws SyntaxError  When an error occurred during compilation\n     * @throws RuntimeError When an error occurred during rendering\n     */\n    public function render($name, array $context = []): string\n    {\n        return $this->load($name)->render($context);\n    }\n\n    /**\n     * Displays a template.\n     *\n     * @param string|TemplateWrapper $name The template name\n     *\n     * @throws LoaderError  When the template cannot be found\n     * @throws SyntaxError  When an error occurred during compilation\n     * @throws RuntimeError When an error occurred during rendering\n     */\n    public function display($name, array $context = []): void\n    {\n        $this->load($name)->display($context);\n    }\n\n    /**\n     * Loads a template.\n     *\n     * @param string|TemplateWrapper $name The template name\n     *\n     * @throws LoaderError  When the template cannot be found\n     * @throws RuntimeError When a previously generated cache is corrupted\n     * @throws SyntaxError  When an error occurred during compilation\n     */\n    public function load($name): TemplateWrapper\n    {\n        if ($name instanceof TemplateWrapper) {\n            return $name;\n        }\n        if ($name instanceof Template) {\n            trigger_deprecation('twig/twig', '3.9', 'Passing a \"%s\" instance to \"%s\" is deprecated.', self::class, __METHOD__);\n\n            return $name;\n        }\n\n        return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name));\n    }\n\n    /**\n     * Loads a template internal representation.\n     *\n     * This method is for internal use only and should never be called\n     * directly.\n     *\n     * @param string   $name  The template name\n     * @param int|null $index The index if it is an embedded template\n     *\n     * @throws LoaderError  When the template cannot be found\n     * @throws RuntimeError When a previously generated cache is corrupted\n     * @throws SyntaxError  When an error occurred during compilation\n     *\n     * @internal\n     */\n    public function loadTemplate(string $cls, string $name, ?int $index = null): Template\n    {\n        $mainCls = $cls;\n        if (null !== $index) {\n            $cls .= '___'.$index;\n        }\n\n        if (isset($this->loadedTemplates[$cls])) {\n            return $this->loadedTemplates[$cls];\n        }\n\n        if (!class_exists($cls, false)) {\n            $key = $this->cache->generateKey($name, $mainCls);\n\n            if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) {\n                $this->cache->load($key);\n            }\n\n            if (!class_exists($cls, false)) {\n                $source = $this->getLoader()->getSourceContext($name);\n                $content = $this->compileSource($source);\n                $this->cache->write($key, $content);\n                $this->cache->load($key);\n\n                if (!class_exists($mainCls, false)) {\n                    /* Last line of defense if either $this->bcWriteCacheFile was used,\n                     * $this->cache is implemented as a no-op or we have a race condition\n                     * where the cache was cleared between the above calls to write to and load from\n                     * the cache.\n                     */\n                    eval('?>'.$content);\n                }\n\n                if (!class_exists($cls, false)) {\n                    throw new RuntimeError(\\sprintf('Failed to load Twig template \"%s\", index \"%s\": cache might be corrupted.', $name, $index), -1, $source);\n                }\n            }\n        }\n\n        $this->extensionSet->initRuntime();\n\n        return $this->loadedTemplates[$cls] = new $cls($this);\n    }\n\n    /**\n     * Creates a template from source.\n     *\n     * This method should not be used as a generic way to load templates.\n     *\n     * @param string      $template The template source\n     * @param string|null $name     An optional name of the template to be used in error messages\n     *\n     * @throws LoaderError When the template cannot be found\n     * @throws SyntaxError When an error occurred during compilation\n     */\n    public function createTemplate(string $template, ?string $name = null): TemplateWrapper\n    {\n        $hash = hash(\\PHP_VERSION_ID < 80100 ? 'sha256' : 'xxh128', $template, false);\n        if (null !== $name) {\n            $name = \\sprintf('%s (string template %s)', $name, $hash);\n        } else {\n            $name = \\sprintf('__string_template__%s', $hash);\n        }\n\n        $loader = new ChainLoader([\n            new ArrayLoader([$name => $template]),\n            $current = $this->getLoader(),\n        ]);\n\n        $this->setLoader($loader);\n        try {\n            return new TemplateWrapper($this, $this->loadTemplate($this->getTemplateClass($name), $name));\n        } finally {\n            $this->setLoader($current);\n        }\n    }\n\n    /**\n     * Returns true if the template is still fresh.\n     *\n     * Besides checking the loader for freshness information,\n     * this method also checks if the enabled extensions have\n     * not changed.\n     *\n     * @param int $time The last modification time of the cached template\n     */\n    public function isTemplateFresh(string $name, int $time): bool\n    {\n        return $this->extensionSet->getLastModified() <= $time && $this->getLoader()->isFresh($name, $time);\n    }\n\n    /**\n     * Tries to load a template consecutively from an array.\n     *\n     * Similar to load() but it also accepts instances of \\Twig\\TemplateWrapper\n     * and an array of templates where each is tried to be loaded.\n     *\n     * @param string|TemplateWrapper|array<string|TemplateWrapper> $names A template or an array of templates to try consecutively\n     *\n     * @throws LoaderError When none of the templates can be found\n     * @throws SyntaxError When an error occurred during compilation\n     */\n    public function resolveTemplate($names): TemplateWrapper\n    {\n        if (!\\is_array($names)) {\n            return $this->load($names);\n        }\n\n        $count = \\count($names);\n        foreach ($names as $name) {\n            if ($name instanceof Template) {\n                trigger_deprecation('twig/twig', '3.9', 'Passing a \"%s\" instance to \"%s\" is deprecated.', Template::class, __METHOD__);\n\n                return new TemplateWrapper($this, $name);\n            }\n            if ($name instanceof TemplateWrapper) {\n                return $name;\n            }\n\n            if (1 !== $count && !$this->getLoader()->exists($name)) {\n                continue;\n            }\n\n            return $this->load($name);\n        }\n\n        throw new LoaderError(\\sprintf('Unable to find one of the following templates: \"%s\".', implode('\", \"', $names)));\n    }\n\n    public function setLexer(Lexer $lexer)\n    {\n        $this->lexer = $lexer;\n    }\n\n    /**\n     * @throws SyntaxError When the code is syntactically wrong\n     */\n    public function tokenize(Source $source): TokenStream\n    {\n        if (null === $this->lexer) {\n            $this->lexer = new Lexer($this);\n        }\n\n        return $this->lexer->tokenize($source);\n    }\n\n    public function setParser(Parser $parser)\n    {\n        $this->parser = $parser;\n    }\n\n    /**\n     * Converts a token stream to a node tree.\n     *\n     * @throws SyntaxError When the token stream is syntactically or semantically wrong\n     */\n    public function parse(TokenStream $stream): ModuleNode\n    {\n        if (null === $this->parser) {\n            $this->parser = new Parser($this);\n        }\n\n        return $this->parser->parse($stream);\n    }\n\n    public function setCompiler(Compiler $compiler)\n    {\n        $this->compiler = $compiler;\n    }\n\n    /**\n     * Compiles a node and returns the PHP code.\n     */\n    public function compile(Node $node): string\n    {\n        if (null === $this->compiler) {\n            $this->compiler = new Compiler($this);\n        }\n\n        return $this->compiler->compile($node)->getSource();\n    }\n\n    /**\n     * Compiles a template source code.\n     *\n     * @throws SyntaxError When there was an error during tokenizing, parsing or compiling\n     */\n    public function compileSource(Source $source): string\n    {\n        try {\n            return $this->compile($this->parse($this->tokenize($source)));\n        } catch (Error $e) {\n            $e->setSourceContext($source);\n            throw $e;\n        } catch (\\Exception $e) {\n            throw new SyntaxError(\\sprintf('An exception has been thrown during the compilation of a template (\"%s\").', $e->getMessage()), -1, $source, $e);\n        }\n    }\n\n    public function setLoader(LoaderInterface $loader)\n    {\n        $this->loader = $loader;\n    }\n\n    public function getLoader(): LoaderInterface\n    {\n        return $this->loader;\n    }\n\n    public function setCharset(string $charset)\n    {\n        if ('UTF8' === $charset = strtoupper($charset ?: '')) {\n            // iconv on Windows requires \"UTF-8\" instead of \"UTF8\"\n            $charset = 'UTF-8';\n        }\n\n        $this->charset = $charset;\n    }\n\n    public function getCharset(): string\n    {\n        return $this->charset;\n    }\n\n    public function hasExtension(string $class): bool\n    {\n        return $this->extensionSet->hasExtension($class);\n    }\n\n    public function addRuntimeLoader(RuntimeLoaderInterface $loader)\n    {\n        $this->runtimeLoaders[] = $loader;\n    }\n\n    /**\n     * @template TExtension of ExtensionInterface\n     *\n     * @param class-string<TExtension> $class\n     *\n     * @return TExtension\n     */\n    public function getExtension(string $class): ExtensionInterface\n    {\n        return $this->extensionSet->getExtension($class);\n    }\n\n    /**\n     * Returns the runtime implementation of a Twig element (filter/function/tag/test).\n     *\n     * @template TRuntime of object\n     *\n     * @param class-string<TRuntime> $class A runtime class name\n     *\n     * @return TRuntime The runtime implementation\n     *\n     * @throws RuntimeError When the template cannot be found\n     */\n    public function getRuntime(string $class)\n    {\n        if (isset($this->runtimes[$class])) {\n            return $this->runtimes[$class];\n        }\n\n        foreach ($this->runtimeLoaders as $loader) {\n            if (null !== $runtime = $loader->load($class)) {\n                return $this->runtimes[$class] = $runtime;\n            }\n        }\n\n        if (null !== $runtime = $this->defaultRuntimeLoader->load($class)) {\n            return $this->runtimes[$class] = $runtime;\n        }\n\n        throw new RuntimeError(\\sprintf('Unable to load the \"%s\" runtime.', $class));\n    }\n\n    public function addExtension(ExtensionInterface $extension)\n    {\n        $this->extensionSet->addExtension($extension);\n        $this->updateOptionsHash();\n    }\n\n    /**\n     * @param ExtensionInterface[] $extensions An array of extensions\n     */\n    public function setExtensions(array $extensions)\n    {\n        $this->extensionSet->setExtensions($extensions);\n        $this->updateOptionsHash();\n    }\n\n    /**\n     * @return ExtensionInterface[] An array of extensions (keys are for internal usage only and should not be relied on)\n     */\n    public function getExtensions(): array\n    {\n        return $this->extensionSet->getExtensions();\n    }\n\n    public function addTokenParser(TokenParserInterface $parser)\n    {\n        $this->extensionSet->addTokenParser($parser);\n    }\n\n    /**\n     * @return TokenParserInterface[]\n     *\n     * @internal\n     */\n    public function getTokenParsers(): array\n    {\n        return $this->extensionSet->getTokenParsers();\n    }\n\n    /**\n     * @internal\n     */\n    public function getTokenParser(string $name): ?TokenParserInterface\n    {\n        return $this->extensionSet->getTokenParser($name);\n    }\n\n    public function registerUndefinedTokenParserCallback(callable $callable): void\n    {\n        $this->extensionSet->registerUndefinedTokenParserCallback($callable);\n    }\n\n    public function addNodeVisitor(NodeVisitorInterface $visitor)\n    {\n        $this->extensionSet->addNodeVisitor($visitor);\n    }\n\n    /**\n     * @return NodeVisitorInterface[]\n     *\n     * @internal\n     */\n    public function getNodeVisitors(): array\n    {\n        return $this->extensionSet->getNodeVisitors();\n    }\n\n    public function addFilter(TwigFilter $filter)\n    {\n        $this->extensionSet->addFilter($filter);\n    }\n\n    /**\n     * @internal\n     */\n    public function getFilter(string $name): ?TwigFilter\n    {\n        return $this->extensionSet->getFilter($name);\n    }\n\n    public function registerUndefinedFilterCallback(callable $callable): void\n    {\n        $this->extensionSet->registerUndefinedFilterCallback($callable);\n    }\n\n    /**\n     * Gets the registered Filters.\n     *\n     * Be warned that this method cannot return filters defined with registerUndefinedFilterCallback.\n     *\n     * @return TwigFilter[]\n     *\n     * @see registerUndefinedFilterCallback\n     *\n     * @internal\n     */\n    public function getFilters(): array\n    {\n        return $this->extensionSet->getFilters();\n    }\n\n    public function addTest(TwigTest $test)\n    {\n        $this->extensionSet->addTest($test);\n    }\n\n    /**\n     * @return TwigTest[]\n     *\n     * @internal\n     */\n    public function getTests(): array\n    {\n        return $this->extensionSet->getTests();\n    }\n\n    /**\n     * @internal\n     */\n    public function getTest(string $name): ?TwigTest\n    {\n        return $this->extensionSet->getTest($name);\n    }\n\n    public function addFunction(TwigFunction $function)\n    {\n        $this->extensionSet->addFunction($function);\n    }\n\n    /**\n     * @internal\n     */\n    public function getFunction(string $name): ?TwigFunction\n    {\n        return $this->extensionSet->getFunction($name);\n    }\n\n    public function registerUndefinedFunctionCallback(callable $callable): void\n    {\n        $this->extensionSet->registerUndefinedFunctionCallback($callable);\n    }\n\n    /**\n     * Gets registered functions.\n     *\n     * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback.\n     *\n     * @return TwigFunction[]\n     *\n     * @see registerUndefinedFunctionCallback\n     *\n     * @internal\n     */\n    public function getFunctions(): array\n    {\n        return $this->extensionSet->getFunctions();\n    }\n\n    /**\n     * Registers a Global.\n     *\n     * New globals can be added before compiling or rendering a template;\n     * but after, you can only update existing globals.\n     *\n     * @param mixed $value The global value\n     */\n    public function addGlobal(string $name, $value)\n    {\n        if ($this->extensionSet->isInitialized() && !\\array_key_exists($name, $this->getGlobals())) {\n            throw new \\LogicException(\\sprintf('Unable to add global \"%s\" as the runtime or the extensions have already been initialized.', $name));\n        }\n\n        if (null !== $this->resolvedGlobals) {\n            $this->resolvedGlobals[$name] = $value;\n        } else {\n            $this->globals[$name] = $value;\n        }\n    }\n\n    /**\n     * @internal\n     *\n     * @return array<string, mixed>\n     */\n    public function getGlobals(): array\n    {\n        if ($this->extensionSet->isInitialized()) {\n            if (null === $this->resolvedGlobals) {\n                $this->resolvedGlobals = array_merge($this->extensionSet->getGlobals(), $this->globals);\n            }\n\n            return $this->resolvedGlobals;\n        }\n\n        return array_merge($this->extensionSet->getGlobals(), $this->globals);\n    }\n\n    public function resetGlobals(): void\n    {\n        $this->resolvedGlobals = null;\n        $this->extensionSet->resetGlobals();\n    }\n\n    /**\n     * @deprecated since Twig 3.14\n     */\n    public function mergeGlobals(array $context): array\n    {\n        trigger_deprecation('twig/twig', '3.14', 'The \"%s\" method is deprecated.', __METHOD__);\n\n        return $context + $this->getGlobals();\n    }\n\n    /**\n     * @internal\n     *\n     * @return array<string, array{precedence: int, class: class-string<AbstractUnary>}>\n     */\n    public function getUnaryOperators(): array\n    {\n        return $this->extensionSet->getUnaryOperators();\n    }\n\n    /**\n     * @internal\n     *\n     * @return array<string, array{precedence: int, class: class-string<AbstractBinary>, associativity: ExpressionParser::OPERATOR_*}>\n     */\n    public function getBinaryOperators(): array\n    {\n        return $this->extensionSet->getBinaryOperators();\n    }\n\n    private function updateOptionsHash(): void\n    {\n        $this->optionsHash = implode(':', [\n            $this->extensionSet->getSignature(),\n            \\PHP_MAJOR_VERSION,\n            \\PHP_MINOR_VERSION,\n            self::VERSION,\n            (int) $this->debug,\n            (int) $this->strictVariables,\n            $this->useYield ? '1' : '0',\n        ]);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Error/Error.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Error;\n\nuse Twig\\Source;\nuse Twig\\Template;\n\n/**\n * Twig base exception.\n *\n * This exception class and its children must only be used when\n * an error occurs during the loading of a template, when a syntax error\n * is detected in a template, or when rendering a template. Other\n * errors must use regular PHP exception classes (like when the template\n * cache directory is not writable for instance).\n *\n * To help debugging template issues, this class tracks the original template\n * name and line where the error occurred.\n *\n * Whenever possible, you must set these information (original template name\n * and line number) yourself by passing them to the constructor. If some or all\n * these information are not available from where you throw the exception, then\n * this class will guess them automatically (when the line number is set to -1\n * and/or the name is set to null). As this is a costly operation, this\n * can be disabled by passing false for both the name and the line number\n * when creating a new instance of this class.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass Error extends \\Exception\n{\n    private $lineno;\n    private $name;\n    private $rawMessage;\n    private $sourcePath;\n    private $sourceCode;\n\n    /**\n     * Constructor.\n     *\n     * By default, automatic guessing is enabled.\n     *\n     * @param string      $message The error message\n     * @param int         $lineno  The template line where the error occurred\n     * @param Source|null $source  The source context where the error occurred\n     */\n    public function __construct(string $message, int $lineno = -1, ?Source $source = null, ?\\Throwable $previous = null)\n    {\n        parent::__construct('', 0, $previous);\n\n        if (null === $source) {\n            $name = null;\n        } else {\n            $name = $source->getName();\n            $this->sourceCode = $source->getCode();\n            $this->sourcePath = $source->getPath();\n        }\n\n        $this->lineno = $lineno;\n        $this->name = $name;\n        $this->rawMessage = $message;\n        $this->updateRepr();\n    }\n\n    public function getRawMessage(): string\n    {\n        return $this->rawMessage;\n    }\n\n    public function getTemplateLine(): int\n    {\n        return $this->lineno;\n    }\n\n    public function setTemplateLine(int $lineno): void\n    {\n        $this->lineno = $lineno;\n\n        $this->updateRepr();\n    }\n\n    public function getSourceContext(): ?Source\n    {\n        return $this->name ? new Source($this->sourceCode, $this->name, $this->sourcePath) : null;\n    }\n\n    public function setSourceContext(?Source $source = null): void\n    {\n        if (null === $source) {\n            $this->sourceCode = $this->name = $this->sourcePath = null;\n        } else {\n            $this->sourceCode = $source->getCode();\n            $this->name = $source->getName();\n            $this->sourcePath = $source->getPath();\n        }\n\n        $this->updateRepr();\n    }\n\n    public function guess(): void\n    {\n        $this->guessTemplateInfo();\n        $this->updateRepr();\n    }\n\n    public function appendMessage($rawMessage): void\n    {\n        $this->rawMessage .= $rawMessage;\n        $this->updateRepr();\n    }\n\n    private function updateRepr(): void\n    {\n        $this->message = $this->rawMessage;\n\n        if ($this->sourcePath && $this->lineno > 0) {\n            $this->file = $this->sourcePath;\n            $this->line = $this->lineno;\n\n            return;\n        }\n\n        $dot = false;\n        if (str_ends_with($this->message, '.')) {\n            $this->message = substr($this->message, 0, -1);\n            $dot = true;\n        }\n\n        $questionMark = false;\n        if (str_ends_with($this->message, '?')) {\n            $this->message = substr($this->message, 0, -1);\n            $questionMark = true;\n        }\n\n        if ($this->name) {\n            if (\\is_string($this->name) || $this->name instanceof \\Stringable) {\n                $name = \\sprintf('\"%s\"', $this->name);\n            } else {\n                $name = json_encode($this->name);\n            }\n            $this->message .= \\sprintf(' in %s', $name);\n        }\n\n        if ($this->lineno && $this->lineno >= 0) {\n            $this->message .= \\sprintf(' at line %d', $this->lineno);\n        }\n\n        if ($dot) {\n            $this->message .= '.';\n        }\n\n        if ($questionMark) {\n            $this->message .= '?';\n        }\n    }\n\n    private function guessTemplateInfo(): void\n    {\n        $template = null;\n        $templateClass = null;\n\n        $backtrace = debug_backtrace(\\DEBUG_BACKTRACE_IGNORE_ARGS | \\DEBUG_BACKTRACE_PROVIDE_OBJECT);\n        foreach ($backtrace as $trace) {\n            if (isset($trace['object']) && $trace['object'] instanceof Template) {\n                $currentClass = \\get_class($trace['object']);\n                $isEmbedContainer = null === $templateClass ? false : str_starts_with($templateClass, $currentClass);\n                if (null === $this->name || ($this->name == $trace['object']->getTemplateName() && !$isEmbedContainer)) {\n                    $template = $trace['object'];\n                    $templateClass = \\get_class($trace['object']);\n                }\n            }\n        }\n\n        // update template name\n        if (null !== $template && null === $this->name) {\n            $this->name = $template->getTemplateName();\n        }\n\n        // update template path if any\n        if (null !== $template && null === $this->sourcePath) {\n            $src = $template->getSourceContext();\n            $this->sourceCode = $src->getCode();\n            $this->sourcePath = $src->getPath();\n        }\n\n        if (null === $template || $this->lineno > -1) {\n            return;\n        }\n\n        $r = new \\ReflectionObject($template);\n        $file = $r->getFileName();\n\n        $exceptions = [$e = $this];\n        while ($e = $e->getPrevious()) {\n            $exceptions[] = $e;\n        }\n\n        while ($e = array_pop($exceptions)) {\n            $traces = $e->getTrace();\n            array_unshift($traces, ['file' => $e->getFile(), 'line' => $e->getLine()]);\n\n            while ($trace = array_shift($traces)) {\n                if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) {\n                    continue;\n                }\n\n                foreach ($template->getDebugInfo() as $codeLine => $templateLine) {\n                    if ($codeLine <= $trace['line']) {\n                        // update template line\n                        $this->lineno = $templateLine;\n\n                        return;\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Error/LoaderError.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Error;\n\n/**\n * Exception thrown when an error occurs during template loading.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass LoaderError extends Error\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Error/RuntimeError.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Error;\n\n/**\n * Exception thrown when an error occurs at runtime.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass RuntimeError extends Error\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Error/SyntaxError.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Error;\n\n/**\n * \\Exception thrown when a syntax error occurs during lexing or parsing of a template.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass SyntaxError extends Error\n{\n    /**\n     * Tweaks the error message to include suggestions.\n     *\n     * @param string $name  The original name of the item that does not exist\n     * @param array  $items An array of possible items\n     */\n    public function addSuggestions(string $name, array $items): void\n    {\n        $alternatives = [];\n        foreach ($items as $item) {\n            $lev = levenshtein($name, $item);\n            if ($lev <= \\strlen($name) / 3 || str_contains($item, $name)) {\n                $alternatives[$item] = $lev;\n            }\n        }\n\n        if (!$alternatives) {\n            return;\n        }\n\n        asort($alternatives);\n\n        $this->appendMessage(\\sprintf(' Did you mean \"%s\"?', implode('\", \"', array_keys($alternatives))));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/ExpressionParser.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\nuse Twig\\Attribute\\FirstClassTwigCallableReady;\nuse Twig\\Error\\SyntaxError;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Expression\\ArrayExpression;\nuse Twig\\Node\\Expression\\ArrowFunctionExpression;\nuse Twig\\Node\\Expression\\AssignNameExpression;\nuse Twig\\Node\\Expression\\Binary\\AbstractBinary;\nuse Twig\\Node\\Expression\\Binary\\ConcatBinary;\nuse Twig\\Node\\Expression\\ConditionalExpression;\nuse Twig\\Node\\Expression\\ConstantExpression;\nuse Twig\\Node\\Expression\\GetAttrExpression;\nuse Twig\\Node\\Expression\\MethodCallExpression;\nuse Twig\\Node\\Expression\\NameExpression;\nuse Twig\\Node\\Expression\\TestExpression;\nuse Twig\\Node\\Expression\\Unary\\AbstractUnary;\nuse Twig\\Node\\Expression\\Unary\\NegUnary;\nuse Twig\\Node\\Expression\\Unary\\NotUnary;\nuse Twig\\Node\\Expression\\Unary\\PosUnary;\nuse Twig\\Node\\Node;\n\n/**\n * Parses expressions.\n *\n * This parser implements a \"Precedence climbing\" algorithm.\n *\n * @see https://www.engr.mun.ca/~theo/Misc/exp_parsing.htm\n * @see https://en.wikipedia.org/wiki/Operator-precedence_parser\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass ExpressionParser\n{\n    public const OPERATOR_LEFT = 1;\n    public const OPERATOR_RIGHT = 2;\n\n    /** @var array<string, array{precedence: int, class: class-string<AbstractUnary>}> */\n    private $unaryOperators;\n    /** @var array<string, array{precedence: int, class: class-string<AbstractBinary>, associativity: self::OPERATOR_*}> */\n    private $binaryOperators;\n    private $readyNodes = [];\n\n    public function __construct(\n        private Parser $parser,\n        private Environment $env,\n    ) {\n        $this->unaryOperators = $env->getUnaryOperators();\n        $this->binaryOperators = $env->getBinaryOperators();\n    }\n\n    public function parseExpression($precedence = 0, $allowArrow = false)\n    {\n        if ($allowArrow && $arrow = $this->parseArrow()) {\n            return $arrow;\n        }\n\n        $expr = $this->getPrimary();\n        $token = $this->parser->getCurrentToken();\n        while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) {\n            $op = $this->binaryOperators[$token->getValue()];\n            $this->parser->getStream()->next();\n\n            if ('is not' === $token->getValue()) {\n                $expr = $this->parseNotTestExpression($expr);\n            } elseif ('is' === $token->getValue()) {\n                $expr = $this->parseTestExpression($expr);\n            } elseif (isset($op['callable'])) {\n                $expr = $op['callable']($this->parser, $expr);\n            } else {\n                $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence'], true);\n                $class = $op['class'];\n                $expr = new $class($expr, $expr1, $token->getLine());\n            }\n\n            $token = $this->parser->getCurrentToken();\n        }\n\n        if (0 === $precedence) {\n            return $this->parseConditionalExpression($expr);\n        }\n\n        return $expr;\n    }\n\n    /**\n     * @return ArrowFunctionExpression|null\n     */\n    private function parseArrow()\n    {\n        $stream = $this->parser->getStream();\n\n        // short array syntax (one argument, no parentheses)?\n        if ($stream->look(1)->test(Token::ARROW_TYPE)) {\n            $line = $stream->getCurrent()->getLine();\n            $token = $stream->expect(Token::NAME_TYPE);\n            $names = [new AssignNameExpression($token->getValue(), $token->getLine())];\n            $stream->expect(Token::ARROW_TYPE);\n\n            return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line);\n        }\n\n        // first, determine if we are parsing an arrow function by finding => (long form)\n        $i = 0;\n        if (!$stream->look($i)->test(Token::PUNCTUATION_TYPE, '(')) {\n            return null;\n        }\n        ++$i;\n        while (true) {\n            // variable name\n            ++$i;\n            if (!$stream->look($i)->test(Token::PUNCTUATION_TYPE, ',')) {\n                break;\n            }\n            ++$i;\n        }\n        if (!$stream->look($i)->test(Token::PUNCTUATION_TYPE, ')')) {\n            return null;\n        }\n        ++$i;\n        if (!$stream->look($i)->test(Token::ARROW_TYPE)) {\n            return null;\n        }\n\n        // yes, let's parse it properly\n        $token = $stream->expect(Token::PUNCTUATION_TYPE, '(');\n        $line = $token->getLine();\n\n        $names = [];\n        while (true) {\n            $token = $stream->expect(Token::NAME_TYPE);\n            $names[] = new AssignNameExpression($token->getValue(), $token->getLine());\n\n            if (!$stream->nextIf(Token::PUNCTUATION_TYPE, ',')) {\n                break;\n            }\n        }\n        $stream->expect(Token::PUNCTUATION_TYPE, ')');\n        $stream->expect(Token::ARROW_TYPE);\n\n        return new ArrowFunctionExpression($this->parseExpression(0), new Node($names), $line);\n    }\n\n    private function getPrimary(): AbstractExpression\n    {\n        $token = $this->parser->getCurrentToken();\n\n        if ($this->isUnary($token)) {\n            $operator = $this->unaryOperators[$token->getValue()];\n            $this->parser->getStream()->next();\n            $expr = $this->parseExpression($operator['precedence']);\n            $class = $operator['class'];\n\n            return $this->parsePostfixExpression(new $class($expr, $token->getLine()));\n        } elseif ($token->test(Token::PUNCTUATION_TYPE, '(')) {\n            $this->parser->getStream()->next();\n            $expr = $this->parseExpression();\n            $this->parser->getStream()->expect(Token::PUNCTUATION_TYPE, ')', 'An opened parenthesis is not properly closed');\n\n            return $this->parsePostfixExpression($expr);\n        }\n\n        return $this->parsePrimaryExpression();\n    }\n\n    private function parseConditionalExpression($expr): AbstractExpression\n    {\n        while ($this->parser->getStream()->nextIf(Token::PUNCTUATION_TYPE, '?')) {\n            if (!$this->parser->getStream()->nextIf(Token::PUNCTUATION_TYPE, ':')) {\n                $expr2 = $this->parseExpression();\n                if ($this->parser->getStream()->nextIf(Token::PUNCTUATION_TYPE, ':')) {\n                    // Ternary operator (expr ? expr2 : expr3)\n                    $expr3 = $this->parseExpression();\n                } else {\n                    // Ternary without else (expr ? expr2)\n                    $expr3 = new ConstantExpression('', $this->parser->getCurrentToken()->getLine());\n                }\n            } else {\n                // Ternary without then (expr ?: expr3)\n                $expr2 = $expr;\n                $expr3 = $this->parseExpression();\n            }\n\n            $expr = new ConditionalExpression($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine());\n        }\n\n        return $expr;\n    }\n\n    private function isUnary(Token $token): bool\n    {\n        return $token->test(Token::OPERATOR_TYPE) && isset($this->unaryOperators[$token->getValue()]);\n    }\n\n    private function isBinary(Token $token): bool\n    {\n        return $token->test(Token::OPERATOR_TYPE) && isset($this->binaryOperators[$token->getValue()]);\n    }\n\n    public function parsePrimaryExpression()\n    {\n        $token = $this->parser->getCurrentToken();\n        switch ($token->getType()) {\n            case Token::NAME_TYPE:\n                $this->parser->getStream()->next();\n                switch ($token->getValue()) {\n                    case 'true':\n                    case 'TRUE':\n                        $node = new ConstantExpression(true, $token->getLine());\n                        break;\n\n                    case 'false':\n                    case 'FALSE':\n                        $node = new ConstantExpression(false, $token->getLine());\n                        break;\n\n                    case 'none':\n                    case 'NONE':\n                    case 'null':\n                    case 'NULL':\n                        $node = new ConstantExpression(null, $token->getLine());\n                        break;\n\n                    default:\n                        if ('(' === $this->parser->getCurrentToken()->getValue()) {\n                            $node = $this->getFunctionNode($token->getValue(), $token->getLine());\n                        } else {\n                            $node = new NameExpression($token->getValue(), $token->getLine());\n                        }\n                }\n                break;\n\n            case Token::NUMBER_TYPE:\n                $this->parser->getStream()->next();\n                $node = new ConstantExpression($token->getValue(), $token->getLine());\n                break;\n\n            case Token::STRING_TYPE:\n            case Token::INTERPOLATION_START_TYPE:\n                $node = $this->parseStringExpression();\n                break;\n\n            case Token::OPERATOR_TYPE:\n                if (preg_match(Lexer::REGEX_NAME, $token->getValue(), $matches) && $matches[0] == $token->getValue()) {\n                    // in this context, string operators are variable names\n                    $this->parser->getStream()->next();\n                    $node = new NameExpression($token->getValue(), $token->getLine());\n                    break;\n                }\n\n                if (isset($this->unaryOperators[$token->getValue()])) {\n                    $class = $this->unaryOperators[$token->getValue()]['class'];\n                    if (!\\in_array($class, [NegUnary::class, PosUnary::class])) {\n                        throw new SyntaxError(\\sprintf('Unexpected unary operator \"%s\".', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext());\n                    }\n\n                    $this->parser->getStream()->next();\n                    $expr = $this->parsePrimaryExpression();\n\n                    $node = new $class($expr, $token->getLine());\n                    break;\n                }\n\n                // no break\n            default:\n                if ($token->test(Token::PUNCTUATION_TYPE, '[')) {\n                    $node = $this->parseSequenceExpression();\n                } elseif ($token->test(Token::PUNCTUATION_TYPE, '{')) {\n                    $node = $this->parseMappingExpression();\n                } elseif ($token->test(Token::OPERATOR_TYPE, '=') && ('==' === $this->parser->getStream()->look(-1)->getValue() || '!=' === $this->parser->getStream()->look(-1)->getValue())) {\n                    throw new SyntaxError(\\sprintf('Unexpected operator of value \"%s\". Did you try to use \"===\" or \"!==\" for strict comparison? Use \"is same as(value)\" instead.', $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext());\n                } else {\n                    throw new SyntaxError(\\sprintf('Unexpected token \"%s\" of value \"%s\".', Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $this->parser->getStream()->getSourceContext());\n                }\n        }\n\n        return $this->parsePostfixExpression($node);\n    }\n\n    public function parseStringExpression()\n    {\n        $stream = $this->parser->getStream();\n\n        $nodes = [];\n        // a string cannot be followed by another string in a single expression\n        $nextCanBeString = true;\n        while (true) {\n            if ($nextCanBeString && $token = $stream->nextIf(Token::STRING_TYPE)) {\n                $nodes[] = new ConstantExpression($token->getValue(), $token->getLine());\n                $nextCanBeString = false;\n            } elseif ($stream->nextIf(Token::INTERPOLATION_START_TYPE)) {\n                $nodes[] = $this->parseExpression();\n                $stream->expect(Token::INTERPOLATION_END_TYPE);\n                $nextCanBeString = true;\n            } else {\n                break;\n            }\n        }\n\n        $expr = array_shift($nodes);\n        foreach ($nodes as $node) {\n            $expr = new ConcatBinary($expr, $node, $node->getTemplateLine());\n        }\n\n        return $expr;\n    }\n\n    /**\n     * @deprecated since 3.11, use parseSequenceExpression() instead\n     */\n    public function parseArrayExpression()\n    {\n        trigger_deprecation('twig/twig', '3.11', 'Calling \"%s()\" is deprecated, use \"parseSequenceExpression()\" instead.', __METHOD__);\n\n        return $this->parseSequenceExpression();\n    }\n\n    public function parseSequenceExpression()\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(Token::PUNCTUATION_TYPE, '[', 'A sequence element was expected');\n\n        $node = new ArrayExpression([], $stream->getCurrent()->getLine());\n        $first = true;\n        while (!$stream->test(Token::PUNCTUATION_TYPE, ']')) {\n            if (!$first) {\n                $stream->expect(Token::PUNCTUATION_TYPE, ',', 'A sequence element must be followed by a comma');\n\n                // trailing ,?\n                if ($stream->test(Token::PUNCTUATION_TYPE, ']')) {\n                    break;\n                }\n            }\n            $first = false;\n\n            if ($stream->test(Token::SPREAD_TYPE)) {\n                $stream->next();\n                $expr = $this->parseExpression();\n                $expr->setAttribute('spread', true);\n                $node->addElement($expr);\n            } else {\n                $node->addElement($this->parseExpression());\n            }\n        }\n        $stream->expect(Token::PUNCTUATION_TYPE, ']', 'An opened sequence is not properly closed');\n\n        return $node;\n    }\n\n    /**\n     * @deprecated since 3.11, use parseMappingExpression() instead\n     */\n    public function parseHashExpression()\n    {\n        trigger_deprecation('twig/twig', '3.11', 'Calling \"%s()\" is deprecated, use \"parseMappingExpression()\" instead.', __METHOD__);\n\n        return $this->parseMappingExpression();\n    }\n\n    public function parseMappingExpression()\n    {\n        $stream = $this->parser->getStream();\n        $stream->expect(Token::PUNCTUATION_TYPE, '{', 'A mapping element was expected');\n\n        $node = new ArrayExpression([], $stream->getCurrent()->getLine());\n        $first = true;\n        while (!$stream->test(Token::PUNCTUATION_TYPE, '}')) {\n            if (!$first) {\n                $stream->expect(Token::PUNCTUATION_TYPE, ',', 'A mapping value must be followed by a comma');\n\n                // trailing ,?\n                if ($stream->test(Token::PUNCTUATION_TYPE, '}')) {\n                    break;\n                }\n            }\n            $first = false;\n\n            if ($stream->test(Token::SPREAD_TYPE)) {\n                $stream->next();\n                $value = $this->parseExpression();\n                $value->setAttribute('spread', true);\n                $node->addElement($value);\n                continue;\n            }\n\n            // a mapping key can be:\n            //\n            //  * a number -- 12\n            //  * a string -- 'a'\n            //  * a name, which is equivalent to a string -- a\n            //  * an expression, which must be enclosed in parentheses -- (1 + 2)\n            if ($token = $stream->nextIf(Token::NAME_TYPE)) {\n                $key = new ConstantExpression($token->getValue(), $token->getLine());\n\n                // {a} is a shortcut for {a:a}\n                if ($stream->test(Token::PUNCTUATION_TYPE, [',', '}'])) {\n                    $value = new NameExpression($key->getAttribute('value'), $key->getTemplateLine());\n                    $node->addElement($value, $key);\n                    continue;\n                }\n            } elseif (($token = $stream->nextIf(Token::STRING_TYPE)) || $token = $stream->nextIf(Token::NUMBER_TYPE)) {\n                $key = new ConstantExpression($token->getValue(), $token->getLine());\n            } elseif ($stream->test(Token::PUNCTUATION_TYPE, '(')) {\n                $key = $this->parseExpression();\n            } else {\n                $current = $stream->getCurrent();\n\n                throw new SyntaxError(\\sprintf('A mapping key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token \"%s\" of value \"%s\".', Token::typeToEnglish($current->getType()), $current->getValue()), $current->getLine(), $stream->getSourceContext());\n            }\n\n            $stream->expect(Token::PUNCTUATION_TYPE, ':', 'A mapping key must be followed by a colon (:)');\n            $value = $this->parseExpression();\n\n            $node->addElement($value, $key);\n        }\n        $stream->expect(Token::PUNCTUATION_TYPE, '}', 'An opened mapping is not properly closed');\n\n        return $node;\n    }\n\n    public function parsePostfixExpression($node)\n    {\n        while (true) {\n            $token = $this->parser->getCurrentToken();\n            if (Token::PUNCTUATION_TYPE == $token->getType()) {\n                if ('.' == $token->getValue() || '[' == $token->getValue()) {\n                    $node = $this->parseSubscriptExpression($node);\n                } elseif ('|' == $token->getValue()) {\n                    $node = $this->parseFilterExpression($node);\n                } else {\n                    break;\n                }\n            } else {\n                break;\n            }\n        }\n\n        return $node;\n    }\n\n    public function getFunctionNode($name, $line)\n    {\n        if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) {\n            $arguments = new ArrayExpression([], $line);\n            foreach ($this->parseArguments() as $n) {\n                $arguments->addElement($n);\n            }\n\n            $node = new MethodCallExpression($alias['node'], $alias['name'], $arguments, $line);\n            $node->setAttribute('safe', true);\n\n            return $node;\n        }\n\n        $args = $this->parseArguments(true);\n        $function = $this->getFunction($name, $line);\n\n        if ($function->getParserCallable()) {\n            $fakeNode = new Node(lineno: $line);\n            $fakeNode->setSourceContext($this->parser->getStream()->getSourceContext());\n\n            return ($function->getParserCallable())($this->parser, $fakeNode, $args, $line);\n        }\n\n        if (!isset($this->readyNodes[$class = $function->getNodeClass()])) {\n            $this->readyNodes[$class] = (bool) (new \\ReflectionClass($class))->getConstructor()->getAttributes(FirstClassTwigCallableReady::class);\n        }\n\n        if (!$ready = $this->readyNodes[$class]) {\n            trigger_deprecation('twig/twig', '3.12', 'Twig node \"%s\" is not marked as ready for passing a \"TwigFunction\" in the constructor instead of its name; please update your code and then add #[FirstClassTwigCallableReady] attribute to the constructor.', $class);\n        }\n\n        return new $class($ready ? $function : $function->getName(), $args, $line);\n    }\n\n    public function parseSubscriptExpression($node)\n    {\n        $stream = $this->parser->getStream();\n        $token = $stream->next();\n        $lineno = $token->getLine();\n        $arguments = new ArrayExpression([], $lineno);\n        $type = Template::ANY_CALL;\n        if ('.' == $token->getValue()) {\n            $token = $stream->next();\n            if (\n                Token::NAME_TYPE == $token->getType()\n                ||\n                Token::NUMBER_TYPE == $token->getType()\n                ||\n                (Token::OPERATOR_TYPE == $token->getType() && preg_match(Lexer::REGEX_NAME, $token->getValue()))\n            ) {\n                $arg = new ConstantExpression($token->getValue(), $lineno);\n\n                if ($stream->test(Token::PUNCTUATION_TYPE, '(')) {\n                    $type = Template::METHOD_CALL;\n                    foreach ($this->parseArguments() as $n) {\n                        $arguments->addElement($n);\n                    }\n                }\n            } else {\n                throw new SyntaxError(\\sprintf('Expected name or number, got value \"%s\" of type %s.', $token->getValue(), Token::typeToEnglish($token->getType())), $lineno, $stream->getSourceContext());\n            }\n\n            if ($node instanceof NameExpression && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) {\n                $name = $arg->getAttribute('value');\n\n                $node = new MethodCallExpression($node, 'macro_'.$name, $arguments, $lineno);\n                $node->setAttribute('safe', true);\n\n                return $node;\n            }\n        } else {\n            $type = Template::ARRAY_CALL;\n\n            // slice?\n            $slice = false;\n            if ($stream->test(Token::PUNCTUATION_TYPE, ':')) {\n                $slice = true;\n                $arg = new ConstantExpression(0, $token->getLine());\n            } else {\n                $arg = $this->parseExpression();\n            }\n\n            if ($stream->nextIf(Token::PUNCTUATION_TYPE, ':')) {\n                $slice = true;\n            }\n\n            if ($slice) {\n                if ($stream->test(Token::PUNCTUATION_TYPE, ']')) {\n                    $length = new ConstantExpression(null, $token->getLine());\n                } else {\n                    $length = $this->parseExpression();\n                }\n\n                $filter = $this->getFilter('slice', $token->getLine());\n                $arguments = new Node([$arg, $length]);\n                $filter = new ($filter->getNodeClass())($node, $filter, $arguments, $token->getLine());\n\n                $stream->expect(Token::PUNCTUATION_TYPE, ']');\n\n                return $filter;\n            }\n\n            $stream->expect(Token::PUNCTUATION_TYPE, ']');\n        }\n\n        return new GetAttrExpression($node, $arg, $arguments, $type, $lineno);\n    }\n\n    public function parseFilterExpression($node)\n    {\n        $this->parser->getStream()->next();\n\n        return $this->parseFilterExpressionRaw($node);\n    }\n\n    public function parseFilterExpressionRaw($node)\n    {\n        if (\\func_num_args() > 1) {\n            trigger_deprecation('twig/twig', '3.12', 'Passing a second argument to \"%s()\" is deprecated.', __METHOD__);\n        }\n\n        while (true) {\n            $token = $this->parser->getStream()->expect(Token::NAME_TYPE);\n\n            if (!$this->parser->getStream()->test(Token::PUNCTUATION_TYPE, '(')) {\n                $arguments = new Node();\n            } else {\n                $arguments = $this->parseArguments(true, false, true);\n            }\n\n            $filter = $this->getFilter($token->getValue(), $token->getLine());\n\n            $ready = true;\n            if (!isset($this->readyNodes[$class = $filter->getNodeClass()])) {\n                $this->readyNodes[$class] = (bool) (new \\ReflectionClass($class))->getConstructor()->getAttributes(FirstClassTwigCallableReady::class);\n            }\n\n            if (!$ready = $this->readyNodes[$class]) {\n                trigger_deprecation('twig/twig', '3.12', 'Twig node \"%s\" is not marked as ready for passing a \"TwigFilter\" in the constructor instead of its name; please update your code and then add #[FirstClassTwigCallableReady] attribute to the constructor.', $class);\n            }\n\n            $node = new $class($node, $ready ? $filter : new ConstantExpression($filter->getName(), $token->getLine()), $arguments, $token->getLine());\n\n            if (!$this->parser->getStream()->test(Token::PUNCTUATION_TYPE, '|')) {\n                break;\n            }\n\n            $this->parser->getStream()->next();\n        }\n\n        return $node;\n    }\n\n    /**\n     * Parses arguments.\n     *\n     * @param bool $namedArguments Whether to allow named arguments or not\n     * @param bool $definition     Whether we are parsing arguments for a function (or macro) definition\n     *\n     * @return Node\n     *\n     * @throws SyntaxError\n     */\n    public function parseArguments($namedArguments = false, $definition = false, $allowArrow = false)\n    {\n        $args = [];\n        $stream = $this->parser->getStream();\n\n        $stream->expect(Token::PUNCTUATION_TYPE, '(', 'A list of arguments must begin with an opening parenthesis');\n        while (!$stream->test(Token::PUNCTUATION_TYPE, ')')) {\n            if (!empty($args)) {\n                $stream->expect(Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma');\n\n                // if the comma above was a trailing comma, early exit the argument parse loop\n                if ($stream->test(Token::PUNCTUATION_TYPE, ')')) {\n                    break;\n                }\n            }\n\n            if ($definition) {\n                $token = $stream->expect(Token::NAME_TYPE, null, 'An argument must be a name');\n                $value = new NameExpression($token->getValue(), $this->parser->getCurrentToken()->getLine());\n            } else {\n                $value = $this->parseExpression(0, $allowArrow);\n            }\n\n            $name = null;\n            if ($namedArguments && (($token = $stream->nextIf(Token::OPERATOR_TYPE, '=')) || ($token = $stream->nextIf(Token::PUNCTUATION_TYPE, ':')))) {\n                if (!$value instanceof NameExpression) {\n                    throw new SyntaxError(\\sprintf('A parameter name must be a string, \"%s\" given.', \\get_class($value)), $token->getLine(), $stream->getSourceContext());\n                }\n                $name = $value->getAttribute('name');\n\n                if ($definition) {\n                    $value = $this->parsePrimaryExpression();\n\n                    if (!$this->checkConstantExpression($value)) {\n                        throw new SyntaxError('A default value for an argument must be a constant (a boolean, a string, a number, a sequence, or a mapping).', $token->getLine(), $stream->getSourceContext());\n                    }\n                } else {\n                    $value = $this->parseExpression(0, $allowArrow);\n                }\n            }\n\n            if ($definition) {\n                if (null === $name) {\n                    $name = $value->getAttribute('name');\n                    $value = new ConstantExpression(null, $this->parser->getCurrentToken()->getLine());\n                    $value->setAttribute('is_implicit', true);\n                }\n                $args[$name] = $value;\n            } else {\n                if (null === $name) {\n                    $args[] = $value;\n                } else {\n                    $args[$name] = $value;\n                }\n            }\n        }\n        $stream->expect(Token::PUNCTUATION_TYPE, ')', 'A list of arguments must be closed by a parenthesis');\n\n        return new Node($args);\n    }\n\n    public function parseAssignmentExpression()\n    {\n        $stream = $this->parser->getStream();\n        $targets = [];\n        while (true) {\n            $token = $this->parser->getCurrentToken();\n            if ($stream->test(Token::OPERATOR_TYPE) && preg_match(Lexer::REGEX_NAME, $token->getValue())) {\n                // in this context, string operators are variable names\n                $this->parser->getStream()->next();\n            } else {\n                $stream->expect(Token::NAME_TYPE, null, 'Only variables can be assigned to');\n            }\n            $value = $token->getValue();\n            if (\\in_array(strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), ['true', 'false', 'none', 'null'])) {\n                throw new SyntaxError(\\sprintf('You cannot assign a value to \"%s\".', $value), $token->getLine(), $stream->getSourceContext());\n            }\n            $targets[] = new AssignNameExpression($value, $token->getLine());\n\n            if (!$stream->nextIf(Token::PUNCTUATION_TYPE, ',')) {\n                break;\n            }\n        }\n\n        return new Node($targets);\n    }\n\n    public function parseMultitargetExpression()\n    {\n        $targets = [];\n        while (true) {\n            $targets[] = $this->parseExpression();\n            if (!$this->parser->getStream()->nextIf(Token::PUNCTUATION_TYPE, ',')) {\n                break;\n            }\n        }\n\n        return new Node($targets);\n    }\n\n    private function parseNotTestExpression(Node $node): NotUnary\n    {\n        return new NotUnary($this->parseTestExpression($node), $this->parser->getCurrentToken()->getLine());\n    }\n\n    private function parseTestExpression(Node $node): TestExpression\n    {\n        $stream = $this->parser->getStream();\n        $test = $this->getTest($node->getTemplateLine());\n\n        $arguments = null;\n        if ($stream->test(Token::PUNCTUATION_TYPE, '(')) {\n            $arguments = $this->parseArguments(true);\n        } elseif ($test->hasOneMandatoryArgument()) {\n            $arguments = new Node([0 => $this->parsePrimaryExpression()]);\n        }\n\n        if ('defined' === $test->getName() && $node instanceof NameExpression && null !== $alias = $this->parser->getImportedSymbol('function', $node->getAttribute('name'))) {\n            $node = new MethodCallExpression($alias['node'], $alias['name'], new ArrayExpression([], $node->getTemplateLine()), $node->getTemplateLine());\n            $node->setAttribute('safe', true);\n        }\n\n        $ready = $test instanceof TwigTest;\n        if (!isset($this->readyNodes[$class = $test->getNodeClass()])) {\n            $this->readyNodes[$class] = (bool) (new \\ReflectionClass($class))->getConstructor()->getAttributes(FirstClassTwigCallableReady::class);\n        }\n\n        if (!$ready = $this->readyNodes[$class]) {\n            trigger_deprecation('twig/twig', '3.12', 'Twig node \"%s\" is not marked as ready for passing a \"TwigTest\" in the constructor instead of its name; please update your code and then add #[FirstClassTwigCallableReady] attribute to the constructor.', $class);\n        }\n\n        return new $class($node, $ready ? $test : $test->getName(), $arguments, $this->parser->getCurrentToken()->getLine());\n    }\n\n    private function getTest(int $line): TwigTest\n    {\n        $stream = $this->parser->getStream();\n        $name = $stream->expect(Token::NAME_TYPE)->getValue();\n\n        if ($stream->test(Token::NAME_TYPE)) {\n            // try 2-words tests\n            $name = $name.' '.$this->parser->getCurrentToken()->getValue();\n\n            if ($test = $this->env->getTest($name)) {\n                $stream->next();\n            }\n        } else {\n            $test = $this->env->getTest($name);\n        }\n\n        if (!$test) {\n            $e = new SyntaxError(\\sprintf('Unknown \"%s\" test.', $name), $line, $stream->getSourceContext());\n            $e->addSuggestions($name, array_keys($this->env->getTests()));\n\n            throw $e;\n        }\n\n        if ($test->isDeprecated()) {\n            $stream = $this->parser->getStream();\n            $message = \\sprintf('Twig Test \"%s\" is deprecated', $test->getName());\n\n            if ($test->getAlternative()) {\n                $message .= \\sprintf('. Use \"%s\" instead', $test->getAlternative());\n            }\n            $src = $stream->getSourceContext();\n            $message .= \\sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $stream->getCurrent()->getLine());\n\n            trigger_deprecation($test->getDeprecatingPackage(), $test->getDeprecatedVersion(), $message);\n        }\n\n        return $test;\n    }\n\n    private function getFunction(string $name, int $line): TwigFunction\n    {\n        if (!$function = $this->env->getFunction($name)) {\n            $e = new SyntaxError(\\sprintf('Unknown \"%s\" function.', $name), $line, $this->parser->getStream()->getSourceContext());\n            $e->addSuggestions($name, array_keys($this->env->getFunctions()));\n\n            throw $e;\n        }\n\n        if ($function->isDeprecated()) {\n            $message = \\sprintf('Twig Function \"%s\" is deprecated', $function->getName());\n            if ($function->getAlternative()) {\n                $message .= \\sprintf('. Use \"%s\" instead', $function->getAlternative());\n            }\n            $src = $this->parser->getStream()->getSourceContext();\n            $message .= \\sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line);\n\n            trigger_deprecation($function->getDeprecatingPackage(), $function->getDeprecatedVersion(), $message);\n        }\n\n        return $function;\n    }\n\n    private function getFilter(string $name, int $line): TwigFilter\n    {\n        if (!$filter = $this->env->getFilter($name)) {\n            $e = new SyntaxError(\\sprintf('Unknown \"%s\" filter.', $name), $line, $this->parser->getStream()->getSourceContext());\n            $e->addSuggestions($name, array_keys($this->env->getFilters()));\n\n            throw $e;\n        }\n\n        if ($filter->isDeprecated()) {\n            $message = \\sprintf('Twig Filter \"%s\" is deprecated', $filter->getName());\n            if ($filter->getAlternative()) {\n                $message .= \\sprintf('. Use \"%s\" instead', $filter->getAlternative());\n            }\n            $src = $this->parser->getStream()->getSourceContext();\n            $message .= \\sprintf(' in %s at line %d.', $src->getPath() ?: $src->getName(), $line);\n\n            trigger_deprecation($filter->getDeprecatingPackage(), $filter->getDeprecatedVersion(), $message);\n        }\n\n        return $filter;\n    }\n\n    // checks that the node only contains \"constant\" elements\n    private function checkConstantExpression(Node $node): bool\n    {\n        if (!($node instanceof ConstantExpression || $node instanceof ArrayExpression\n            || $node instanceof NegUnary || $node instanceof PosUnary\n        )) {\n            return false;\n        }\n\n        foreach ($node as $n) {\n            if (!$this->checkConstantExpression($n)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/AbstractExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nabstract class AbstractExtension implements ExtensionInterface\n{\n    public function getTokenParsers()\n    {\n        return [];\n    }\n\n    public function getNodeVisitors()\n    {\n        return [];\n    }\n\n    public function getFilters()\n    {\n        return [];\n    }\n\n    public function getTests()\n    {\n        return [];\n    }\n\n    public function getFunctions()\n    {\n        return [];\n    }\n\n    public function getOperators()\n    {\n        return [[], []];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/CoreExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\Environment;\nuse Twig\\Error\\LoaderError;\nuse Twig\\Error\\RuntimeError;\nuse Twig\\Error\\SyntaxError;\nuse Twig\\ExpressionParser;\nuse Twig\\Markup;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Expression\\Binary\\AddBinary;\nuse Twig\\Node\\Expression\\Binary\\AndBinary;\nuse Twig\\Node\\Expression\\Binary\\BitwiseAndBinary;\nuse Twig\\Node\\Expression\\Binary\\BitwiseOrBinary;\nuse Twig\\Node\\Expression\\Binary\\BitwiseXorBinary;\nuse Twig\\Node\\Expression\\Binary\\ConcatBinary;\nuse Twig\\Node\\Expression\\Binary\\DivBinary;\nuse Twig\\Node\\Expression\\Binary\\EndsWithBinary;\nuse Twig\\Node\\Expression\\Binary\\EqualBinary;\nuse Twig\\Node\\Expression\\Binary\\FloorDivBinary;\nuse Twig\\Node\\Expression\\Binary\\GreaterBinary;\nuse Twig\\Node\\Expression\\Binary\\GreaterEqualBinary;\nuse Twig\\Node\\Expression\\Binary\\HasEveryBinary;\nuse Twig\\Node\\Expression\\Binary\\HasSomeBinary;\nuse Twig\\Node\\Expression\\Binary\\InBinary;\nuse Twig\\Node\\Expression\\Binary\\LessBinary;\nuse Twig\\Node\\Expression\\Binary\\LessEqualBinary;\nuse Twig\\Node\\Expression\\Binary\\MatchesBinary;\nuse Twig\\Node\\Expression\\Binary\\ModBinary;\nuse Twig\\Node\\Expression\\Binary\\MulBinary;\nuse Twig\\Node\\Expression\\Binary\\NotEqualBinary;\nuse Twig\\Node\\Expression\\Binary\\NotInBinary;\nuse Twig\\Node\\Expression\\Binary\\OrBinary;\nuse Twig\\Node\\Expression\\Binary\\PowerBinary;\nuse Twig\\Node\\Expression\\Binary\\RangeBinary;\nuse Twig\\Node\\Expression\\Binary\\SpaceshipBinary;\nuse Twig\\Node\\Expression\\Binary\\StartsWithBinary;\nuse Twig\\Node\\Expression\\Binary\\SubBinary;\nuse Twig\\Node\\Expression\\BlockReferenceExpression;\nuse Twig\\Node\\Expression\\Filter\\DefaultFilter;\nuse Twig\\Node\\Expression\\FunctionNode\\EnumCasesFunction;\nuse Twig\\Node\\Expression\\GetAttrExpression;\nuse Twig\\Node\\Expression\\NullCoalesceExpression;\nuse Twig\\Node\\Expression\\ParentExpression;\nuse Twig\\Node\\Expression\\Test\\ConstantTest;\nuse Twig\\Node\\Expression\\Test\\DefinedTest;\nuse Twig\\Node\\Expression\\Test\\DivisiblebyTest;\nuse Twig\\Node\\Expression\\Test\\EvenTest;\nuse Twig\\Node\\Expression\\Test\\NullTest;\nuse Twig\\Node\\Expression\\Test\\OddTest;\nuse Twig\\Node\\Expression\\Test\\SameasTest;\nuse Twig\\Node\\Expression\\Unary\\NegUnary;\nuse Twig\\Node\\Expression\\Unary\\NotUnary;\nuse Twig\\Node\\Expression\\Unary\\PosUnary;\nuse Twig\\Node\\Node;\nuse Twig\\NodeVisitor\\MacroAutoImportNodeVisitor;\nuse Twig\\Parser;\nuse Twig\\Source;\nuse Twig\\Template;\nuse Twig\\TemplateWrapper;\nuse Twig\\TokenParser\\ApplyTokenParser;\nuse Twig\\TokenParser\\BlockTokenParser;\nuse Twig\\TokenParser\\DeprecatedTokenParser;\nuse Twig\\TokenParser\\DoTokenParser;\nuse Twig\\TokenParser\\EmbedTokenParser;\nuse Twig\\TokenParser\\ExtendsTokenParser;\nuse Twig\\TokenParser\\FlushTokenParser;\nuse Twig\\TokenParser\\ForTokenParser;\nuse Twig\\TokenParser\\FromTokenParser;\nuse Twig\\TokenParser\\IfTokenParser;\nuse Twig\\TokenParser\\ImportTokenParser;\nuse Twig\\TokenParser\\IncludeTokenParser;\nuse Twig\\TokenParser\\MacroTokenParser;\nuse Twig\\TokenParser\\SetTokenParser;\nuse Twig\\TokenParser\\TypesTokenParser;\nuse Twig\\TokenParser\\UseTokenParser;\nuse Twig\\TokenParser\\WithTokenParser;\nuse Twig\\TwigFilter;\nuse Twig\\TwigFunction;\nuse Twig\\TwigTest;\nuse Twig\\Util\\CallableArgumentsExtractor;\n\nfinal class CoreExtension extends AbstractExtension\n{\n    private $dateFormats = ['F j, Y H:i', '%d days'];\n    private $numberFormat = [0, '.', ','];\n    private $timezone = null;\n\n    /**\n     * Sets the default format to be used by the date filter.\n     *\n     * @param string|null $format             The default date format string\n     * @param string|null $dateIntervalFormat The default date interval format string\n     */\n    public function setDateFormat($format = null, $dateIntervalFormat = null)\n    {\n        if (null !== $format) {\n            $this->dateFormats[0] = $format;\n        }\n\n        if (null !== $dateIntervalFormat) {\n            $this->dateFormats[1] = $dateIntervalFormat;\n        }\n    }\n\n    /**\n     * Gets the default format to be used by the date filter.\n     *\n     * @return array The default date format string and the default date interval format string\n     */\n    public function getDateFormat()\n    {\n        return $this->dateFormats;\n    }\n\n    /**\n     * Sets the default timezone to be used by the date filter.\n     *\n     * @param \\DateTimeZone|string $timezone The default timezone string or a \\DateTimeZone object\n     */\n    public function setTimezone($timezone)\n    {\n        $this->timezone = $timezone instanceof \\DateTimeZone ? $timezone : new \\DateTimeZone($timezone);\n    }\n\n    /**\n     * Gets the default timezone to be used by the date filter.\n     *\n     * @return \\DateTimeZone The default timezone currently in use\n     */\n    public function getTimezone()\n    {\n        if (null === $this->timezone) {\n            $this->timezone = new \\DateTimeZone(date_default_timezone_get());\n        }\n\n        return $this->timezone;\n    }\n\n    /**\n     * Sets the default format to be used by the number_format filter.\n     *\n     * @param int    $decimal      the number of decimal places to use\n     * @param string $decimalPoint the character(s) to use for the decimal point\n     * @param string $thousandSep  the character(s) to use for the thousands separator\n     */\n    public function setNumberFormat($decimal, $decimalPoint, $thousandSep)\n    {\n        $this->numberFormat = [$decimal, $decimalPoint, $thousandSep];\n    }\n\n    /**\n     * Get the default format used by the number_format filter.\n     *\n     * @return array The arguments for number_format()\n     */\n    public function getNumberFormat()\n    {\n        return $this->numberFormat;\n    }\n\n    public function getTokenParsers(): array\n    {\n        return [\n            new ApplyTokenParser(),\n            new ForTokenParser(),\n            new IfTokenParser(),\n            new ExtendsTokenParser(),\n            new IncludeTokenParser(),\n            new BlockTokenParser(),\n            new UseTokenParser(),\n            new MacroTokenParser(),\n            new ImportTokenParser(),\n            new FromTokenParser(),\n            new SetTokenParser(),\n            new TypesTokenParser(),\n            new FlushTokenParser(),\n            new DoTokenParser(),\n            new EmbedTokenParser(),\n            new WithTokenParser(),\n            new DeprecatedTokenParser(),\n        ];\n    }\n\n    public function getFilters(): array\n    {\n        return [\n            // formatting filters\n            new TwigFilter('date', [$this, 'formatDate']),\n            new TwigFilter('date_modify', [$this, 'modifyDate']),\n            new TwigFilter('format', [self::class, 'sprintf']),\n            new TwigFilter('replace', [self::class, 'replace']),\n            new TwigFilter('number_format', [$this, 'formatNumber']),\n            new TwigFilter('abs', 'abs'),\n            new TwigFilter('round', [self::class, 'round']),\n\n            // encoding\n            new TwigFilter('url_encode', [self::class, 'urlencode']),\n            new TwigFilter('json_encode', 'json_encode'),\n            new TwigFilter('convert_encoding', [self::class, 'convertEncoding']),\n\n            // string filters\n            new TwigFilter('title', [self::class, 'titleCase'], ['needs_charset' => true]),\n            new TwigFilter('capitalize', [self::class, 'capitalize'], ['needs_charset' => true]),\n            new TwigFilter('upper', [self::class, 'upper'], ['needs_charset' => true]),\n            new TwigFilter('lower', [self::class, 'lower'], ['needs_charset' => true]),\n            new TwigFilter('striptags', [self::class, 'striptags']),\n            new TwigFilter('trim', [self::class, 'trim']),\n            new TwigFilter('nl2br', [self::class, 'nl2br'], ['pre_escape' => 'html', 'is_safe' => ['html']]),\n            new TwigFilter('spaceless', [self::class, 'spaceless'], ['is_safe' => ['html'], 'deprecated' => '3.12', 'deprecating_package' => 'twig/twig']),\n\n            // array helpers\n            new TwigFilter('join', [self::class, 'join']),\n            new TwigFilter('split', [self::class, 'split'], ['needs_charset' => true]),\n            new TwigFilter('sort', [self::class, 'sort'], ['needs_environment' => true]),\n            new TwigFilter('merge', [self::class, 'merge']),\n            new TwigFilter('batch', [self::class, 'batch']),\n            new TwigFilter('column', [self::class, 'column']),\n            new TwigFilter('filter', [self::class, 'filter'], ['needs_environment' => true]),\n            new TwigFilter('map', [self::class, 'map'], ['needs_environment' => true]),\n            new TwigFilter('reduce', [self::class, 'reduce'], ['needs_environment' => true]),\n            new TwigFilter('find', [self::class, 'find'], ['needs_environment' => true]),\n\n            // string/array filters\n            new TwigFilter('reverse', [self::class, 'reverse'], ['needs_charset' => true]),\n            new TwigFilter('shuffle', [self::class, 'shuffle'], ['needs_charset' => true]),\n            new TwigFilter('length', [self::class, 'length'], ['needs_charset' => true]),\n            new TwigFilter('slice', [self::class, 'slice'], ['needs_charset' => true]),\n            new TwigFilter('first', [self::class, 'first'], ['needs_charset' => true]),\n            new TwigFilter('last', [self::class, 'last'], ['needs_charset' => true]),\n\n            // iteration and runtime\n            new TwigFilter('default', [self::class, 'default'], ['node_class' => DefaultFilter::class]),\n            new TwigFilter('keys', [self::class, 'keys']),\n        ];\n    }\n\n    public function getFunctions(): array\n    {\n        return [\n            new TwigFunction('parent', null, ['parser_callable' => [self::class, 'parseParentFunction']]),\n            new TwigFunction('block', null, ['parser_callable' => [self::class, 'parseBlockFunction']]),\n            new TwigFunction('attribute', null, ['parser_callable' => [self::class, 'parseAttributeFunction']]),\n            new TwigFunction('max', 'max'),\n            new TwigFunction('min', 'min'),\n            new TwigFunction('range', 'range'),\n            new TwigFunction('constant', [self::class, 'constant']),\n            new TwigFunction('cycle', [self::class, 'cycle']),\n            new TwigFunction('random', [self::class, 'random'], ['needs_charset' => true]),\n            new TwigFunction('date', [$this, 'convertDate']),\n            new TwigFunction('include', [self::class, 'include'], ['needs_environment' => true, 'needs_context' => true, 'is_safe' => ['all']]),\n            new TwigFunction('source', [self::class, 'source'], ['needs_environment' => true, 'is_safe' => ['all']]),\n            new TwigFunction('enum_cases', [self::class, 'enumCases'], ['node_class' => EnumCasesFunction::class]),\n        ];\n    }\n\n    public function getTests(): array\n    {\n        return [\n            new TwigTest('even', null, ['node_class' => EvenTest::class]),\n            new TwigTest('odd', null, ['node_class' => OddTest::class]),\n            new TwigTest('defined', null, ['node_class' => DefinedTest::class]),\n            new TwigTest('same as', null, ['node_class' => SameasTest::class, 'one_mandatory_argument' => true]),\n            new TwigTest('none', null, ['node_class' => NullTest::class]),\n            new TwigTest('null', null, ['node_class' => NullTest::class]),\n            new TwigTest('divisible by', null, ['node_class' => DivisiblebyTest::class, 'one_mandatory_argument' => true]),\n            new TwigTest('constant', null, ['node_class' => ConstantTest::class]),\n            new TwigTest('empty', [self::class, 'testEmpty']),\n            new TwigTest('iterable', 'is_iterable'),\n            new TwigTest('sequence', [self::class, 'testSequence']),\n            new TwigTest('mapping', [self::class, 'testMapping']),\n        ];\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return [new MacroAutoImportNodeVisitor()];\n    }\n\n    public function getOperators(): array\n    {\n        return [\n            [\n                'not' => ['precedence' => 50, 'class' => NotUnary::class],\n                '-' => ['precedence' => 500, 'class' => NegUnary::class],\n                '+' => ['precedence' => 500, 'class' => PosUnary::class],\n            ],\n            [\n                'or' => ['precedence' => 10, 'class' => OrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'and' => ['precedence' => 15, 'class' => AndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'b-or' => ['precedence' => 16, 'class' => BitwiseOrBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'b-xor' => ['precedence' => 17, 'class' => BitwiseXorBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'b-and' => ['precedence' => 18, 'class' => BitwiseAndBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '==' => ['precedence' => 20, 'class' => EqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '!=' => ['precedence' => 20, 'class' => NotEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '<=>' => ['precedence' => 20, 'class' => SpaceshipBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '<' => ['precedence' => 20, 'class' => LessBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '>' => ['precedence' => 20, 'class' => GreaterBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '>=' => ['precedence' => 20, 'class' => GreaterEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '<=' => ['precedence' => 20, 'class' => LessEqualBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'not in' => ['precedence' => 20, 'class' => NotInBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'in' => ['precedence' => 20, 'class' => InBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'matches' => ['precedence' => 20, 'class' => MatchesBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'starts with' => ['precedence' => 20, 'class' => StartsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'ends with' => ['precedence' => 20, 'class' => EndsWithBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'has some' => ['precedence' => 20, 'class' => HasSomeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'has every' => ['precedence' => 20, 'class' => HasEveryBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '..' => ['precedence' => 25, 'class' => RangeBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '+' => ['precedence' => 30, 'class' => AddBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '-' => ['precedence' => 30, 'class' => SubBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '~' => ['precedence' => 40, 'class' => ConcatBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '*' => ['precedence' => 60, 'class' => MulBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '/' => ['precedence' => 60, 'class' => DivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '//' => ['precedence' => 60, 'class' => FloorDivBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '%' => ['precedence' => 60, 'class' => ModBinary::class, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'is' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                'is not' => ['precedence' => 100, 'associativity' => ExpressionParser::OPERATOR_LEFT],\n                '**' => ['precedence' => 200, 'class' => PowerBinary::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT],\n                '??' => ['precedence' => 300, 'class' => NullCoalesceExpression::class, 'associativity' => ExpressionParser::OPERATOR_RIGHT],\n            ],\n        ];\n    }\n\n    /**\n     * Cycles over a sequence.\n     *\n     * @param array|\\ArrayAccess $values   A non-empty sequence of values\n     * @param positive-int       $position The position of the value to return in the cycle\n     *\n     * @return mixed The value at the given position in the sequence, wrapping around as needed\n     *\n     * @internal\n     */\n    public static function cycle($values, $position): mixed\n    {\n        if (!\\is_array($values)) {\n            if (!$values instanceof \\ArrayAccess) {\n                throw new RuntimeError('The \"cycle\" function expects an array or \"ArrayAccess\" as first argument.');\n            }\n\n            if (!is_countable($values)) {\n                // To be uncommented in 4.0\n                // throw new RuntimeError('The \"cycle\" function expects a countable sequence as first argument.');\n\n                trigger_deprecation('twig/twig', '3.12', 'Passing a non-countable sequence of values to \"%s()\" is deprecated.', __METHOD__);\n\n                return $values;\n            }\n\n            $values = self::toArray($values, false);\n        }\n\n        if (!$count = \\count($values)) {\n            throw new RuntimeError('The \"cycle\" function does not work on empty sequences.');\n        }\n\n        return $values[$position % $count];\n    }\n\n    /**\n     * Returns a random value depending on the supplied parameter type:\n     * - a random item from a \\Traversable or array\n     * - a random character from a string\n     * - a random integer between 0 and the integer parameter.\n     *\n     * @param \\Traversable|array|int|float|string $values The values to pick a random item from\n     * @param int|null                            $max    Maximum value used when $values is an int\n     *\n     * @return mixed A random value from the given sequence\n     *\n     * @throws RuntimeError when $values is an empty array (does not apply to an empty string which is returned as is)\n     *\n     * @internal\n     */\n    public static function random(string $charset, $values = null, $max = null)\n    {\n        if (null === $values) {\n            return null === $max ? mt_rand() : mt_rand(0, (int) $max);\n        }\n\n        if (\\is_int($values) || \\is_float($values)) {\n            if (null === $max) {\n                if ($values < 0) {\n                    $max = 0;\n                    $min = $values;\n                } else {\n                    $max = $values;\n                    $min = 0;\n                }\n            } else {\n                $min = $values;\n            }\n\n            return mt_rand((int) $min, (int) $max);\n        }\n\n        if (\\is_string($values)) {\n            if ('' === $values) {\n                return '';\n            }\n\n            if ('UTF-8' !== $charset) {\n                $values = self::convertEncoding($values, 'UTF-8', $charset);\n            }\n\n            // unicode version of str_split()\n            // split at all positions, but not after the start and not before the end\n            $values = preg_split('/(?<!^)(?!$)/u', $values);\n\n            if ('UTF-8' !== $charset) {\n                foreach ($values as $i => $value) {\n                    $values[$i] = self::convertEncoding($value, $charset, 'UTF-8');\n                }\n            }\n        }\n\n        if (!is_iterable($values)) {\n            return $values;\n        }\n\n        $values = self::toArray($values);\n\n        if (0 === \\count($values)) {\n            throw new RuntimeError('The random function cannot pick from an empty sequence/mapping.');\n        }\n\n        return $values[array_rand($values, 1)];\n    }\n\n    /**\n     * Formats a date.\n     *\n     *   {{ post.published_at|date(\"m/d/Y\") }}\n     *\n     * @param \\DateTimeInterface|\\DateInterval|string $date     A date\n     * @param string|null                             $format   The target format, null to use the default\n     * @param \\DateTimeZone|string|false|null         $timezone The target timezone, null to use the default, false to leave unchanged\n     */\n    public function formatDate($date, $format = null, $timezone = null): string\n    {\n        if (null === $format) {\n            $formats = $this->getDateFormat();\n            $format = $date instanceof \\DateInterval ? $formats[1] : $formats[0];\n        }\n\n        if ($date instanceof \\DateInterval) {\n            return $date->format($format);\n        }\n\n        return $this->convertDate($date, $timezone)->format($format);\n    }\n\n    /**\n     * Returns a new date object modified.\n     *\n     *   {{ post.published_at|date_modify(\"-1day\")|date(\"m/d/Y\") }}\n     *\n     * @param \\DateTimeInterface|string $date     A date\n     * @param string                    $modifier A modifier string\n     *\n     * @return \\DateTime|\\DateTimeImmutable\n     *\n     * @internal\n     */\n    public function modifyDate($date, $modifier)\n    {\n        return $this->convertDate($date, false)->modify($modifier);\n    }\n\n    /**\n     * Returns a formatted string.\n     *\n     * @param string|null $format\n     * @param ...$values\n     *\n     * @internal\n     */\n    public static function sprintf($format, ...$values): string\n    {\n        return \\sprintf($format ?? '', ...$values);\n    }\n\n    /**\n     * @internal\n     */\n    public static function dateConverter(Environment $env, $date, $format = null, $timezone = null): string\n    {\n        return $env->getExtension(self::class)->formatDate($date, $format, $timezone);\n    }\n\n    /**\n     * Converts an input to a \\DateTime instance.\n     *\n     *    {% if date(user.created_at) < date('+2days') %}\n     *      {# do something #}\n     *    {% endif %}\n     *\n     * @param \\DateTimeInterface|string|null  $date     A date or null to use the current time\n     * @param \\DateTimeZone|string|false|null $timezone The target timezone, null to use the default, false to leave unchanged\n     *\n     * @return \\DateTime|\\DateTimeImmutable\n     */\n    public function convertDate($date = null, $timezone = null)\n    {\n        // determine the timezone\n        if (false !== $timezone) {\n            if (null === $timezone) {\n                $timezone = $this->getTimezone();\n            } elseif (!$timezone instanceof \\DateTimeZone) {\n                $timezone = new \\DateTimeZone($timezone);\n            }\n        }\n\n        // immutable dates\n        if ($date instanceof \\DateTimeImmutable) {\n            return false !== $timezone ? $date->setTimezone($timezone) : $date;\n        }\n\n        if ($date instanceof \\DateTime) {\n            $date = clone $date;\n            if (false !== $timezone) {\n                $date->setTimezone($timezone);\n            }\n\n            return $date;\n        }\n\n        if (null === $date || 'now' === $date) {\n            if (null === $date) {\n                $date = 'now';\n            }\n\n            return new \\DateTime($date, false !== $timezone ? $timezone : $this->getTimezone());\n        }\n\n        $asString = (string) $date;\n        if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) {\n            $date = new \\DateTime('@'.$date);\n        } else {\n            $date = new \\DateTime($date, $this->getTimezone());\n        }\n\n        if (false !== $timezone) {\n            $date->setTimezone($timezone);\n        }\n\n        return $date;\n    }\n\n    /**\n     * Replaces strings within a string.\n     *\n     * @param string|null        $str  String to replace in\n     * @param array|\\Traversable $from Replace values\n     *\n     * @internal\n     */\n    public static function replace($str, $from): string\n    {\n        if (!is_iterable($from)) {\n            throw new RuntimeError(\\sprintf('The \"replace\" filter expects a sequence/mapping or \"Traversable\" as replace values, got \"%s\".', \\is_object($from) ? \\get_class($from) : \\gettype($from)));\n        }\n\n        return strtr($str ?? '', self::toArray($from));\n    }\n\n    /**\n     * Rounds a number.\n     *\n     * @param int|float|string|null $value     The value to round\n     * @param int|float             $precision The rounding precision\n     * @param string                $method    The method to use for rounding\n     *\n     * @return int|float The rounded number\n     *\n     * @internal\n     */\n    public static function round($value, $precision = 0, $method = 'common')\n    {\n        $value = (float) $value;\n\n        if ('common' === $method) {\n            return round($value, $precision);\n        }\n\n        if ('ceil' !== $method && 'floor' !== $method) {\n            throw new RuntimeError('The round filter only supports the \"common\", \"ceil\", and \"floor\" methods.');\n        }\n\n        return $method($value * 10 ** $precision) / 10 ** $precision;\n    }\n\n    /**\n     * Formats a number.\n     *\n     * All of the formatting options can be left null, in that case the defaults will\n     * be used. Supplying any of the parameters will override the defaults set in the\n     * environment object.\n     *\n     * @param mixed       $number       A float/int/string of the number to format\n     * @param int|null    $decimal      the number of decimal points to display\n     * @param string|null $decimalPoint the character(s) to use for the decimal point\n     * @param string|null $thousandSep  the character(s) to use for the thousands separator\n     */\n    public function formatNumber($number, $decimal = null, $decimalPoint = null, $thousandSep = null): string\n    {\n        $defaults = $this->getNumberFormat();\n        if (null === $decimal) {\n            $decimal = $defaults[0];\n        }\n\n        if (null === $decimalPoint) {\n            $decimalPoint = $defaults[1];\n        }\n\n        if (null === $thousandSep) {\n            $thousandSep = $defaults[2];\n        }\n\n        return number_format((float) $number, $decimal, $decimalPoint, $thousandSep);\n    }\n\n    /**\n     * URL encodes (RFC 3986) a string as a path segment or an array as a query string.\n     *\n     * @param string|array|null $url A URL or an array of query parameters\n     *\n     * @internal\n     */\n    public static function urlencode($url): string\n    {\n        if (\\is_array($url)) {\n            return http_build_query($url, '', '&', \\PHP_QUERY_RFC3986);\n        }\n\n        return rawurlencode($url ?? '');\n    }\n\n    /**\n     * Merges any number of arrays or Traversable objects.\n     *\n     *  {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %}\n     *\n     *  {% set items = items|merge({ 'peugeot': 'car' }, { 'banana': 'fruit' }) %}\n     *\n     *  {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car', 'banana': 'fruit' } #}\n     *\n     * @param array|\\Traversable ...$arrays Any number of arrays or Traversable objects to merge\n     *\n     * @internal\n     */\n    public static function merge(...$arrays): array\n    {\n        $result = [];\n\n        foreach ($arrays as $argNumber => $array) {\n            if (!is_iterable($array)) {\n                throw new RuntimeError(\\sprintf('The merge filter only works with sequences/mappings or \"Traversable\", got \"%s\" for argument %d.', \\gettype($array), $argNumber + 1));\n            }\n\n            $result = array_merge($result, self::toArray($array));\n        }\n\n        return $result;\n    }\n\n    /**\n     * Slices a variable.\n     *\n     * @param mixed $item         A variable\n     * @param int   $start        Start of the slice\n     * @param int   $length       Size of the slice\n     * @param bool  $preserveKeys Whether to preserve key or not (when the input is an array)\n     *\n     * @return mixed The sliced variable\n     *\n     * @internal\n     */\n    public static function slice(string $charset, $item, $start, $length = null, $preserveKeys = false)\n    {\n        if ($item instanceof \\Traversable) {\n            while ($item instanceof \\IteratorAggregate) {\n                $item = $item->getIterator();\n            }\n\n            if ($start >= 0 && $length >= 0 && $item instanceof \\Iterator) {\n                try {\n                    return iterator_to_array(new \\LimitIterator($item, $start, $length ?? -1), $preserveKeys);\n                } catch (\\OutOfBoundsException $e) {\n                    return [];\n                }\n            }\n\n            $item = iterator_to_array($item, $preserveKeys);\n        }\n\n        if (\\is_array($item)) {\n            return \\array_slice($item, $start, $length, $preserveKeys);\n        }\n\n        return mb_substr((string) $item, $start, $length, $charset);\n    }\n\n    /**\n     * Returns the first element of the item.\n     *\n     * @param mixed $item A variable\n     *\n     * @return mixed The first element of the item\n     *\n     * @internal\n     */\n    public static function first(string $charset, $item)\n    {\n        $elements = self::slice($charset, $item, 0, 1, false);\n\n        return \\is_string($elements) ? $elements : current($elements);\n    }\n\n    /**\n     * Returns the last element of the item.\n     *\n     * @param mixed $item A variable\n     *\n     * @return mixed The last element of the item\n     *\n     * @internal\n     */\n    public static function last(string $charset, $item)\n    {\n        $elements = self::slice($charset, $item, -1, 1, false);\n\n        return \\is_string($elements) ? $elements : current($elements);\n    }\n\n    /**\n     * Joins the values to a string.\n     *\n     * The separators between elements are empty strings per default, you can define them with the optional parameters.\n     *\n     *  {{ [1, 2, 3]|join(', ', ' and ') }}\n     *  {# returns 1, 2 and 3 #}\n     *\n     *  {{ [1, 2, 3]|join('|') }}\n     *  {# returns 1|2|3 #}\n     *\n     *  {{ [1, 2, 3]|join }}\n     *  {# returns 123 #}\n     *\n     * @param array       $value An array\n     * @param string      $glue  The separator\n     * @param string|null $and   The separator for the last pair\n     *\n     * @internal\n     */\n    public static function join($value, $glue = '', $and = null): string\n    {\n        if (!is_iterable($value)) {\n            $value = (array) $value;\n        }\n\n        $value = self::toArray($value, false);\n\n        if (0 === \\count($value)) {\n            return '';\n        }\n\n        if (null === $and || $and === $glue) {\n            return implode($glue, $value);\n        }\n\n        if (1 === \\count($value)) {\n            return $value[0];\n        }\n\n        return implode($glue, \\array_slice($value, 0, -1)).$and.$value[\\count($value) - 1];\n    }\n\n    /**\n     * Splits the string into an array.\n     *\n     *  {{ \"one,two,three\"|split(',') }}\n     *  {# returns [one, two, three] #}\n     *\n     *  {{ \"one,two,three,four,five\"|split(',', 3) }}\n     *  {# returns [one, two, \"three,four,five\"] #}\n     *\n     *  {{ \"123\"|split('') }}\n     *  {# returns [1, 2, 3] #}\n     *\n     *  {{ \"aabbcc\"|split('', 2) }}\n     *  {# returns [aa, bb, cc] #}\n     *\n     * @param string|null $value     A string\n     * @param string      $delimiter The delimiter\n     * @param int|null    $limit     The limit\n     *\n     * @internal\n     */\n    public static function split(string $charset, $value, $delimiter, $limit = null): array\n    {\n        $value = $value ?? '';\n\n        if ('' !== $delimiter) {\n            return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit);\n        }\n\n        if ($limit <= 1) {\n            return preg_split('/(?<!^)(?!$)/u', $value);\n        }\n\n        $length = mb_strlen($value, $charset);\n        if ($length < $limit) {\n            return [$value];\n        }\n\n        $r = [];\n        for ($i = 0; $i < $length; $i += $limit) {\n            $r[] = mb_substr($value, $i, $limit, $charset);\n        }\n\n        return $r;\n    }\n\n    /**\n     * @internal\n     */\n    public static function default($value, $default = '')\n    {\n        if (self::testEmpty($value)) {\n            return $default;\n        }\n\n        return $value;\n    }\n\n    /**\n     * Returns the keys for the given array.\n     *\n     * It is useful when you want to iterate over the keys of an array:\n     *\n     *  {% for key in array|keys %}\n     *      {# ... #}\n     *  {% endfor %}\n     *\n     * @internal\n     */\n    public static function keys($array): array\n    {\n        if ($array instanceof \\Traversable) {\n            while ($array instanceof \\IteratorAggregate) {\n                $array = $array->getIterator();\n            }\n\n            $keys = [];\n            if ($array instanceof \\Iterator) {\n                $array->rewind();\n                while ($array->valid()) {\n                    $keys[] = $array->key();\n                    $array->next();\n                }\n\n                return $keys;\n            }\n\n            foreach ($array as $key => $item) {\n                $keys[] = $key;\n            }\n\n            return $keys;\n        }\n\n        if (!\\is_array($array)) {\n            return [];\n        }\n\n        return array_keys($array);\n    }\n\n    /**\n     * Reverses a variable.\n     *\n     * @param array|\\Traversable|string|null $item         An array, a \\Traversable instance, or a string\n     * @param bool                           $preserveKeys Whether to preserve key or not\n     *\n     * @return mixed The reversed input\n     *\n     * @internal\n     */\n    public static function reverse(string $charset, $item, $preserveKeys = false)\n    {\n        if ($item instanceof \\Traversable) {\n            return array_reverse(iterator_to_array($item), $preserveKeys);\n        }\n\n        if (\\is_array($item)) {\n            return array_reverse($item, $preserveKeys);\n        }\n\n        $string = (string) $item;\n\n        if ('UTF-8' !== $charset) {\n            $string = self::convertEncoding($string, 'UTF-8', $charset);\n        }\n\n        preg_match_all('/./us', $string, $matches);\n\n        $string = implode('', array_reverse($matches[0]));\n\n        if ('UTF-8' !== $charset) {\n            $string = self::convertEncoding($string, $charset, 'UTF-8');\n        }\n\n        return $string;\n    }\n\n    /**\n     * Shuffles an array, a \\Traversable instance, or a string.\n     * The function does not preserve keys.\n     *\n     * @param array|\\Traversable|string|null $item\n     *\n     * @return mixed\n     *\n     * @internal\n     */\n    public static function shuffle(string $charset, $item)\n    {\n        if (\\is_string($item)) {\n            if ('UTF-8' !== $charset) {\n                $item = self::convertEncoding($item, 'UTF-8', $charset);\n            }\n\n            $item = preg_split('/(?<!^)(?!$)/u', $item, -1);\n            shuffle($item);\n            $item = implode('', $item);\n\n            if ('UTF-8' !== $charset) {\n                $item = self::convertEncoding($item, $charset, 'UTF-8');\n            }\n\n            return $item;\n        }\n\n        if (is_iterable($item)) {\n            $item = self::toArray($item, false);\n            shuffle($item);\n        }\n\n        return $item;\n    }\n\n    /**\n     * Sorts an array.\n     *\n     * @param array|\\Traversable $array\n     *\n     * @internal\n     */\n    public static function sort(Environment $env, $array, $arrow = null): array\n    {\n        if ($array instanceof \\Traversable) {\n            $array = iterator_to_array($array);\n        } elseif (!\\is_array($array)) {\n            throw new RuntimeError(\\sprintf('The sort filter only works with sequences/mappings or \"Traversable\", got \"%s\".', \\gettype($array)));\n        }\n\n        if (null !== $arrow) {\n            self::checkArrowInSandbox($env, $arrow, 'sort', 'filter');\n\n            uasort($array, $arrow);\n        } else {\n            asort($array);\n        }\n\n        return $array;\n    }\n\n    /**\n     * @internal\n     */\n    public static function inFilter($value, $compare)\n    {\n        if ($value instanceof Markup) {\n            $value = (string) $value;\n        }\n        if ($compare instanceof Markup) {\n            $compare = (string) $compare;\n        }\n\n        if (\\is_string($compare)) {\n            if (\\is_string($value) || \\is_int($value) || \\is_float($value)) {\n                return '' === $value || str_contains($compare, (string) $value);\n            }\n\n            return false;\n        }\n\n        if (!is_iterable($compare)) {\n            return false;\n        }\n\n        if (\\is_object($value) || \\is_resource($value)) {\n            if (!\\is_array($compare)) {\n                foreach ($compare as $item) {\n                    if ($item === $value) {\n                        return true;\n                    }\n                }\n\n                return false;\n            }\n\n            return \\in_array($value, $compare, true);\n        }\n\n        foreach ($compare as $item) {\n            if (0 === self::compare($value, $item)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Compares two values using a more strict version of the PHP non-strict comparison operator.\n     *\n     * @see https://wiki.php.net/rfc/string_to_number_comparison\n     * @see https://wiki.php.net/rfc/trailing_whitespace_numerics\n     *\n     * @internal\n     */\n    public static function compare($a, $b)\n    {\n        // int <=> string\n        if (\\is_int($a) && \\is_string($b)) {\n            $bTrim = trim($b, \" \\t\\n\\r\\v\\f\");\n            if (!is_numeric($bTrim)) {\n                return (string) $a <=> $b;\n            }\n            if ((int) $bTrim == $bTrim) {\n                return $a <=> (int) $bTrim;\n            } else {\n                return (float) $a <=> (float) $bTrim;\n            }\n        }\n        if (\\is_string($a) && \\is_int($b)) {\n            $aTrim = trim($a, \" \\t\\n\\r\\v\\f\");\n            if (!is_numeric($aTrim)) {\n                return $a <=> (string) $b;\n            }\n            if ((int) $aTrim == $aTrim) {\n                return (int) $aTrim <=> $b;\n            } else {\n                return (float) $aTrim <=> (float) $b;\n            }\n        }\n\n        // float <=> string\n        if (\\is_float($a) && \\is_string($b)) {\n            if (is_nan($a)) {\n                return 1;\n            }\n            $bTrim = trim($b, \" \\t\\n\\r\\v\\f\");\n            if (!is_numeric($bTrim)) {\n                return (string) $a <=> $b;\n            }\n\n            return $a <=> (float) $bTrim;\n        }\n        if (\\is_string($a) && \\is_float($b)) {\n            if (is_nan($b)) {\n                return 1;\n            }\n            $aTrim = trim($a, \" \\t\\n\\r\\v\\f\");\n            if (!is_numeric($aTrim)) {\n                return $a <=> (string) $b;\n            }\n\n            return (float) $aTrim <=> $b;\n        }\n\n        // fallback to <=>\n        return $a <=> $b;\n    }\n\n    /**\n     * @throws RuntimeError When an invalid pattern is used\n     *\n     * @internal\n     */\n    public static function matches(string $regexp, ?string $str): int\n    {\n        set_error_handler(function ($t, $m) use ($regexp) {\n            throw new RuntimeError(\\sprintf('Regexp \"%s\" passed to \"matches\" is not valid', $regexp).substr($m, 12));\n        });\n        try {\n            return preg_match($regexp, $str ?? '');\n        } finally {\n            restore_error_handler();\n        }\n    }\n\n    /**\n     * Returns a trimmed string.\n     *\n     * @param string|null $string\n     * @param string|null $characterMask\n     * @param string      $side\n     *\n     * @throws RuntimeError When an invalid trimming side is used (not a string or not 'left', 'right', or 'both')\n     *\n     * @internal\n     */\n    public static function trim($string, $characterMask = null, $side = 'both'): string\n    {\n        if (null === $characterMask) {\n            $characterMask = \" \\t\\n\\r\\0\\x0B\";\n        }\n\n        switch ($side) {\n            case 'both':\n                return trim($string ?? '', $characterMask);\n            case 'left':\n                return ltrim($string ?? '', $characterMask);\n            case 'right':\n                return rtrim($string ?? '', $characterMask);\n            default:\n                throw new RuntimeError('Trimming side must be \"left\", \"right\" or \"both\".');\n        }\n    }\n\n    /**\n     * Inserts HTML line breaks before all newlines in a string.\n     *\n     * @param string|null $string\n     *\n     * @internal\n     */\n    public static function nl2br($string): string\n    {\n        return nl2br($string ?? '');\n    }\n\n    /**\n     * Removes whitespaces between HTML tags.\n     *\n     * @param string|null $content\n     *\n     * @internal\n     */\n    public static function spaceless($content): string\n    {\n        return trim(preg_replace('/>\\s+</', '><', $content ?? ''));\n    }\n\n    /**\n     * @param string|null $string\n     * @param string      $to\n     * @param string      $from\n     *\n     * @internal\n     */\n    public static function convertEncoding($string, $to, $from): string\n    {\n        if (!\\function_exists('iconv')) {\n            throw new RuntimeError('Unable to convert encoding: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.');\n        }\n\n        return iconv($from, $to, $string ?? '');\n    }\n\n    /**\n     * Returns the length of a variable.\n     *\n     * @param mixed $thing A variable\n     *\n     * @internal\n     */\n    public static function length(string $charset, $thing): int\n    {\n        if (null === $thing) {\n            return 0;\n        }\n\n        if (\\is_scalar($thing)) {\n            return mb_strlen($thing, $charset);\n        }\n\n        if ($thing instanceof \\Countable || \\is_array($thing) || $thing instanceof \\SimpleXMLElement) {\n            return \\count($thing);\n        }\n\n        if ($thing instanceof \\Traversable) {\n            return iterator_count($thing);\n        }\n\n        if ($thing instanceof \\Stringable) {\n            return mb_strlen((string) $thing, $charset);\n        }\n\n        return 1;\n    }\n\n    /**\n     * Converts a string to uppercase.\n     *\n     * @param string|null $string A string\n     *\n     * @internal\n     */\n    public static function upper(string $charset, $string): string\n    {\n        return mb_strtoupper($string ?? '', $charset);\n    }\n\n    /**\n     * Converts a string to lowercase.\n     *\n     * @param string|null $string A string\n     *\n     * @internal\n     */\n    public static function lower(string $charset, $string): string\n    {\n        return mb_strtolower($string ?? '', $charset);\n    }\n\n    /**\n     * Strips HTML and PHP tags from a string.\n     *\n     * @param string|null          $string\n     * @param string[]|string|null $allowable_tags\n     *\n     * @internal\n     */\n    public static function striptags($string, $allowable_tags = null): string\n    {\n        return strip_tags($string ?? '', $allowable_tags);\n    }\n\n    /**\n     * Returns a titlecased string.\n     *\n     * @param string|null $string A string\n     *\n     * @internal\n     */\n    public static function titleCase(string $charset, $string): string\n    {\n        return mb_convert_case($string ?? '', \\MB_CASE_TITLE, $charset);\n    }\n\n    /**\n     * Returns a capitalized string.\n     *\n     * @param string|null $string A string\n     *\n     * @internal\n     */\n    public static function capitalize(string $charset, $string): string\n    {\n        return mb_strtoupper(mb_substr($string ?? '', 0, 1, $charset), $charset).mb_strtolower(mb_substr($string ?? '', 1, null, $charset), $charset);\n    }\n\n    /**\n     * @internal\n     */\n    public static function callMacro(Template $template, string $method, array $args, int $lineno, array $context, Source $source)\n    {\n        if (!method_exists($template, $method)) {\n            $parent = $template;\n            while ($parent = $parent->getParent($context)) {\n                if (method_exists($parent, $method)) {\n                    return $parent->$method(...$args);\n                }\n            }\n\n            throw new RuntimeError(\\sprintf('Macro \"%s\" is not defined in template \"%s\".', substr($method, \\strlen('macro_')), $template->getTemplateName()), $lineno, $source);\n        }\n\n        return $template->$method(...$args);\n    }\n\n    /**\n     * @template TSequence\n     *\n     * @param TSequence $seq\n     *\n     * @return ($seq is iterable ? TSequence : array{})\n     *\n     * @internal\n     */\n    public static function ensureTraversable($seq)\n    {\n        if (is_iterable($seq)) {\n            return $seq;\n        }\n\n        return [];\n    }\n\n    /**\n     * @internal\n     */\n    public static function toArray($seq, $preserveKeys = true)\n    {\n        if ($seq instanceof \\Traversable) {\n            return iterator_to_array($seq, $preserveKeys);\n        }\n\n        if (!\\is_array($seq)) {\n            return $seq;\n        }\n\n        return $preserveKeys ? $seq : array_values($seq);\n    }\n\n    /**\n     * Checks if a variable is empty.\n     *\n     *    {# evaluates to true if the foo variable is null, false, or the empty string #}\n     *    {% if foo is empty %}\n     *        {# ... #}\n     *    {% endif %}\n     *\n     * @param mixed $value A variable\n     *\n     * @internal\n     */\n    public static function testEmpty($value): bool\n    {\n        if ($value instanceof \\Countable) {\n            return 0 === \\count($value);\n        }\n\n        if ($value instanceof \\Traversable) {\n            return !iterator_count($value);\n        }\n\n        if ($value instanceof \\Stringable) {\n            return '' === (string) $value;\n        }\n\n        return '' === $value || false === $value || null === $value || [] === $value;\n    }\n\n    /**\n     * Checks if a variable is a sequence.\n     *\n     *    {# evaluates to true if the foo variable is a sequence #}\n     *    {% if foo is sequence %}\n     *        {# ... #}\n     *    {% endif %}\n     *\n     * @param mixed $value\n     *\n     * @internal\n     */\n    public static function testSequence($value): bool\n    {\n        if ($value instanceof \\ArrayObject) {\n            $value = $value->getArrayCopy();\n        }\n\n        if ($value instanceof \\Traversable) {\n            $value = iterator_to_array($value);\n        }\n\n        return \\is_array($value) && array_is_list($value);\n    }\n\n    /**\n     * Checks if a variable is a mapping.\n     *\n     *    {# evaluates to true if the foo variable is a mapping #}\n     *    {% if foo is mapping %}\n     *        {# ... #}\n     *    {% endif %}\n     *\n     * @param mixed $value\n     *\n     * @internal\n     */\n    public static function testMapping($value): bool\n    {\n        if ($value instanceof \\ArrayObject) {\n            $value = $value->getArrayCopy();\n        }\n\n        if ($value instanceof \\Traversable) {\n            $value = iterator_to_array($value);\n        }\n\n        return (\\is_array($value) && !array_is_list($value)) || \\is_object($value);\n    }\n\n    /**\n     * Renders a template.\n     *\n     * @param array                        $context\n     * @param string|array|TemplateWrapper $template      The template to render or an array of templates to try consecutively\n     * @param array                        $variables     The variables to pass to the template\n     * @param bool                         $withContext\n     * @param bool                         $ignoreMissing Whether to ignore missing templates or not\n     * @param bool                         $sandboxed     Whether to sandbox the template or not\n     *\n     * @internal\n     */\n    public static function include(Environment $env, $context, $template, $variables = [], $withContext = true, $ignoreMissing = false, $sandboxed = false): string\n    {\n        $alreadySandboxed = false;\n        $sandbox = null;\n        if ($withContext) {\n            $variables = array_merge($context, $variables);\n        }\n\n        if ($isSandboxed = $sandboxed && $env->hasExtension(SandboxExtension::class)) {\n            $sandbox = $env->getExtension(SandboxExtension::class);\n            if (!$alreadySandboxed = $sandbox->isSandboxed()) {\n                $sandbox->enableSandbox();\n            }\n        }\n\n        try {\n            $loaded = null;\n            try {\n                $loaded = $env->resolveTemplate($template);\n            } catch (LoaderError $e) {\n                if (!$ignoreMissing) {\n                    throw $e;\n                }\n\n                return '';\n            }\n\n            if ($isSandboxed) {\n                $loaded->unwrap()->checkSecurity();\n            }\n\n            return $loaded->render($variables);\n        } finally {\n            if ($isSandboxed && !$alreadySandboxed) {\n                $sandbox->disableSandbox();\n            }\n        }\n    }\n\n    /**\n     * Returns a template content without rendering it.\n     *\n     * @param string $name          The template name\n     * @param bool   $ignoreMissing Whether to ignore missing templates or not\n     *\n     * @internal\n     */\n    public static function source(Environment $env, $name, $ignoreMissing = false): string\n    {\n        $loader = $env->getLoader();\n        try {\n            return $loader->getSourceContext($name)->getCode();\n        } catch (LoaderError $e) {\n            if (!$ignoreMissing) {\n                throw $e;\n            }\n\n            return '';\n        }\n    }\n\n    /**\n     * Returns the list of cases of the enum.\n     *\n     * @template T of \\UnitEnum\n     *\n     * @param class-string<T> $enum\n     *\n     * @return list<T>\n     *\n     * @internal\n     */\n    public static function enumCases(string $enum): array\n    {\n        if (!enum_exists($enum)) {\n            throw new RuntimeError(\\sprintf('Enum \"%s\" does not exist.', $enum));\n        }\n\n        return $enum::cases();\n    }\n\n    /**\n     * Provides the ability to get constants from instances as well as class/global constants.\n     *\n     * @param string      $constant     The name of the constant\n     * @param object|null $object       The object to get the constant from\n     * @param bool        $checkDefined Whether to check if the constant is defined or not\n     *\n     * @return mixed Class constants can return many types like scalars, arrays, and\n     *               objects depending on the PHP version (\\BackedEnum, \\UnitEnum, etc.)\n     *               When $checkDefined is true, returns true when the constant is defined, false otherwise\n     *\n     * @internal\n     */\n    public static function constant($constant, $object = null, bool $checkDefined = false)\n    {\n        if (null !== $object) {\n            if ('class' === $constant) {\n                return $checkDefined ? true : \\get_class($object);\n            }\n\n            $constant = \\get_class($object).'::'.$constant;\n        }\n\n        if (!\\defined($constant)) {\n            if ($checkDefined) {\n                return false;\n            }\n\n            if ('::class' === strtolower(substr($constant, -7))) {\n                throw new RuntimeError(\\sprintf('You cannot use the Twig function \"constant()\" to access \"%s\". You could provide an object and call constant(\"class\", $object) or use the class name directly as a string.', $constant));\n            }\n\n            throw new RuntimeError(\\sprintf('Constant \"%s\" is undefined.', $constant));\n        }\n\n        return $checkDefined ? true : \\constant($constant);\n    }\n\n    /**\n     * Batches item.\n     *\n     * @param array $items An array of items\n     * @param int   $size  The size of the batch\n     * @param mixed $fill  A value used to fill missing items\n     *\n     * @internal\n     */\n    public static function batch($items, $size, $fill = null, $preserveKeys = true): array\n    {\n        if (!is_iterable($items)) {\n            throw new RuntimeError(\\sprintf('The \"batch\" filter expects a sequence/mapping or \"Traversable\", got \"%s\".', \\is_object($items) ? \\get_class($items) : \\gettype($items)));\n        }\n\n        $size = (int) ceil($size);\n\n        $result = array_chunk(self::toArray($items, $preserveKeys), $size, $preserveKeys);\n\n        if (null !== $fill && $result) {\n            $last = \\count($result) - 1;\n            if ($fillCount = $size - \\count($result[$last])) {\n                for ($i = 0; $i < $fillCount; ++$i) {\n                    $result[$last][] = $fill;\n                }\n            }\n        }\n\n        return $result;\n    }\n\n    /**\n     * Returns the attribute value for a given array/object.\n     *\n     * @param mixed  $object            The object or array from where to get the item\n     * @param mixed  $item              The item to get from the array or object\n     * @param array  $arguments         An array of arguments to pass if the item is an object method\n     * @param string $type              The type of attribute (@see \\Twig\\Template constants)\n     * @param bool   $isDefinedTest     Whether this is only a defined check\n     * @param bool   $ignoreStrictCheck Whether to ignore the strict attribute check or not\n     * @param int    $lineno            The template line where the attribute was called\n     *\n     * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true\n     *\n     * @throws RuntimeError if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false\n     *\n     * @internal\n     */\n    public static function getAttribute(Environment $env, Source $source, $object, $item, array $arguments = [], $type = Template::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false, $sandboxed = false, int $lineno = -1)\n    {\n        // array\n        if (Template::METHOD_CALL !== $type) {\n            $arrayItem = \\is_bool($item) || \\is_float($item) ? (int) $item : $item;\n\n            if (((\\is_array($object) || $object instanceof \\ArrayObject) && (isset($object[$arrayItem]) || \\array_key_exists($arrayItem, (array) $object)))\n                || ($object instanceof \\ArrayAccess && isset($object[$arrayItem]))\n            ) {\n                if ($isDefinedTest) {\n                    return true;\n                }\n\n                return $object[$arrayItem];\n            }\n\n            if (Template::ARRAY_CALL === $type || !\\is_object($object)) {\n                if ($isDefinedTest) {\n                    return false;\n                }\n\n                if ($ignoreStrictCheck || !$env->isStrictVariables()) {\n                    return;\n                }\n\n                if ($object instanceof \\ArrayAccess) {\n                    $message = \\sprintf('Key \"%s\" in object with ArrayAccess of class \"%s\" does not exist.', $arrayItem, \\get_class($object));\n                } elseif (\\is_object($object)) {\n                    $message = \\sprintf('Impossible to access a key \"%s\" on an object of class \"%s\" that does not implement ArrayAccess interface.', $item, \\get_class($object));\n                } elseif (\\is_array($object)) {\n                    if (empty($object)) {\n                        $message = \\sprintf('Key \"%s\" does not exist as the sequence/mapping is empty.', $arrayItem);\n                    } else {\n                        $message = \\sprintf('Key \"%s\" for sequence/mapping with keys \"%s\" does not exist.', $arrayItem, implode(', ', array_keys($object)));\n                    }\n                } elseif (Template::ARRAY_CALL === $type) {\n                    if (null === $object) {\n                        $message = \\sprintf('Impossible to access a key (\"%s\") on a null variable.', $item);\n                    } else {\n                        $message = \\sprintf('Impossible to access a key (\"%s\") on a %s variable (\"%s\").', $item, \\gettype($object), $object);\n                    }\n                } elseif (null === $object) {\n                    $message = \\sprintf('Impossible to access an attribute (\"%s\") on a null variable.', $item);\n                } else {\n                    $message = \\sprintf('Impossible to access an attribute (\"%s\") on a %s variable (\"%s\").', $item, \\gettype($object), $object);\n                }\n\n                throw new RuntimeError($message, $lineno, $source);\n            }\n        }\n\n        if (!\\is_object($object)) {\n            if ($isDefinedTest) {\n                return false;\n            }\n\n            if ($ignoreStrictCheck || !$env->isStrictVariables()) {\n                return;\n            }\n\n            if (null === $object) {\n                $message = \\sprintf('Impossible to invoke a method (\"%s\") on a null variable.', $item);\n            } elseif (\\is_array($object)) {\n                $message = \\sprintf('Impossible to invoke a method (\"%s\") on a sequence/mapping.', $item);\n            } else {\n                $message = \\sprintf('Impossible to invoke a method (\"%s\") on a %s variable (\"%s\").', $item, \\gettype($object), $object);\n            }\n\n            throw new RuntimeError($message, $lineno, $source);\n        }\n\n        if ($object instanceof Template) {\n            throw new RuntimeError('Accessing \\Twig\\Template attributes is forbidden.', $lineno, $source);\n        }\n\n        // object property\n        if (Template::METHOD_CALL !== $type) {\n            if (isset($object->$item) || \\array_key_exists((string) $item, (array) $object)) {\n                if ($isDefinedTest) {\n                    return true;\n                }\n\n                if ($sandboxed) {\n                    $env->getExtension(SandboxExtension::class)->checkPropertyAllowed($object, $item, $lineno, $source);\n                }\n\n                return $object->$item;\n            }\n        }\n\n        static $cache = [];\n\n        $class = \\get_class($object);\n\n        // object method\n        // precedence: getXxx() > isXxx() > hasXxx()\n        if (!isset($cache[$class])) {\n            $methods = get_class_methods($object);\n            sort($methods);\n            $lcMethods = array_map(function ($value) { return strtr($value, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); }, $methods);\n            $classCache = [];\n            foreach ($methods as $i => $method) {\n                $classCache[$method] = $method;\n                $classCache[$lcName = $lcMethods[$i]] = $method;\n\n                if ('g' === $lcName[0] && str_starts_with($lcName, 'get')) {\n                    $name = substr($method, 3);\n                    $lcName = substr($lcName, 3);\n                } elseif ('i' === $lcName[0] && str_starts_with($lcName, 'is')) {\n                    $name = substr($method, 2);\n                    $lcName = substr($lcName, 2);\n                } elseif ('h' === $lcName[0] && str_starts_with($lcName, 'has')) {\n                    $name = substr($method, 3);\n                    $lcName = substr($lcName, 3);\n                    if (\\in_array('is'.$lcName, $lcMethods)) {\n                        continue;\n                    }\n                } else {\n                    continue;\n                }\n\n                // skip get() and is() methods (in which case, $name is empty)\n                if ($name) {\n                    if (!isset($classCache[$name])) {\n                        $classCache[$name] = $method;\n                    }\n\n                    if (!isset($classCache[$lcName])) {\n                        $classCache[$lcName] = $method;\n                    }\n                }\n            }\n            $cache[$class] = $classCache;\n        }\n\n        $call = false;\n        if (isset($cache[$class][$item])) {\n            $method = $cache[$class][$item];\n        } elseif (isset($cache[$class][$lcItem = strtr($item, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')])) {\n            $method = $cache[$class][$lcItem];\n        } elseif (isset($cache[$class]['__call'])) {\n            $method = $item;\n            $call = true;\n        } else {\n            if ($isDefinedTest) {\n                return false;\n            }\n\n            if ($ignoreStrictCheck || !$env->isStrictVariables()) {\n                return;\n            }\n\n            throw new RuntimeError(\\sprintf('Neither the property \"%1$s\" nor one of the methods \"%1$s()\", \"get%1$s()\"/\"is%1$s()\"/\"has%1$s()\" or \"__call()\" exist and have public access in class \"%2$s\".', $item, $class), $lineno, $source);\n        }\n\n        if ($isDefinedTest) {\n            return true;\n        }\n\n        if ($sandboxed) {\n            $env->getExtension(SandboxExtension::class)->checkMethodAllowed($object, $method, $lineno, $source);\n        }\n\n        // Some objects throw exceptions when they have __call, and the method we try\n        // to call is not supported. If ignoreStrictCheck is true, we should return null.\n        try {\n            $ret = $object->$method(...$arguments);\n        } catch (\\BadMethodCallException $e) {\n            if ($call && ($ignoreStrictCheck || !$env->isStrictVariables())) {\n                return;\n            }\n            throw $e;\n        }\n\n        return $ret;\n    }\n\n    /**\n     * Returns the values from a single column in the input array.\n     *\n     * <pre>\n     *  {% set items = [{ 'fruit' : 'apple'}, {'fruit' : 'orange' }] %}\n     *\n     *  {% set fruits = items|column('fruit') %}\n     *\n     *  {# fruits now contains ['apple', 'orange'] #}\n     * </pre>\n     *\n     * @param array|\\Traversable $array An array\n     * @param int|string         $name  The column name\n     * @param int|string|null    $index The column to use as the index/keys for the returned array\n     *\n     * @return array The array of values\n     *\n     * @internal\n     */\n    public static function column($array, $name, $index = null): array\n    {\n        if ($array instanceof \\Traversable) {\n            $array = iterator_to_array($array);\n        } elseif (!\\is_array($array)) {\n            throw new RuntimeError(\\sprintf('The column filter only works with sequences/mappings or \"Traversable\", got \"%s\" as first argument.', \\gettype($array)));\n        }\n\n        return array_column($array, $name, $index);\n    }\n\n    /**\n     * @internal\n     */\n    public static function filter(Environment $env, $array, $arrow)\n    {\n        if (!is_iterable($array)) {\n            throw new RuntimeError(\\sprintf('The \"filter\" filter expects a sequence/mapping or \"Traversable\", got \"%s\".', \\is_object($array) ? \\get_class($array) : \\gettype($array)));\n        }\n\n        self::checkArrowInSandbox($env, $arrow, 'filter', 'filter');\n\n        if (\\is_array($array)) {\n            return array_filter($array, $arrow, \\ARRAY_FILTER_USE_BOTH);\n        }\n\n        // the IteratorIterator wrapping is needed as some internal PHP classes are \\Traversable but do not implement \\Iterator\n        return new \\CallbackFilterIterator(new \\IteratorIterator($array), $arrow);\n    }\n\n    /**\n     * @internal\n     */\n    public static function find(Environment $env, $array, $arrow)\n    {\n        self::checkArrowInSandbox($env, $arrow, 'find', 'filter');\n\n        foreach ($array as $k => $v) {\n            if ($arrow($v, $k)) {\n                return $v;\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @internal\n     */\n    public static function map(Environment $env, $array, $arrow)\n    {\n        if (!is_iterable($array)) {\n            throw new RuntimeError(\\sprintf('The \"map\" filter expects a sequence/mapping or \"Traversable\", got \"%s\".', get_debug_type($array)));\n        }\n\n        self::checkArrowInSandbox($env, $arrow, 'map', 'filter');\n\n        $r = [];\n        foreach ($array as $k => $v) {\n            $r[$k] = $arrow($v, $k);\n        }\n\n        return $r;\n    }\n\n    /**\n     * @internal\n     */\n    public static function reduce(Environment $env, $array, $arrow, $initial = null)\n    {\n        self::checkArrowInSandbox($env, $arrow, 'reduce', 'filter');\n\n        if (!\\is_array($array) && !$array instanceof \\Traversable) {\n            throw new RuntimeError(\\sprintf('The \"reduce\" filter only works with sequences/mappings or \"Traversable\", got \"%s\" as first argument.', \\gettype($array)));\n        }\n\n        $accumulator = $initial;\n        foreach ($array as $key => $value) {\n            $accumulator = $arrow($accumulator, $value, $key);\n        }\n\n        return $accumulator;\n    }\n\n    /**\n     * @internal\n     */\n    public static function arraySome(Environment $env, $array, $arrow)\n    {\n        self::checkArrowInSandbox($env, $arrow, 'has some', 'operator');\n\n        foreach ($array as $k => $v) {\n            if ($arrow($v, $k)) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * @internal\n     */\n    public static function arrayEvery(Environment $env, $array, $arrow)\n    {\n        self::checkArrowInSandbox($env, $arrow, 'has every', 'operator');\n\n        foreach ($array as $k => $v) {\n            if (!$arrow($v, $k)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    /**\n     * @internal\n     */\n    public static function checkArrowInSandbox(Environment $env, $arrow, $thing, $type)\n    {\n        if (!$arrow instanceof \\Closure && $env->hasExtension(SandboxExtension::class) && $env->getExtension(SandboxExtension::class)->isSandboxed()) {\n            throw new RuntimeError(\\sprintf('The callable passed to the \"%s\" %s must be a Closure in sandbox mode.', $thing, $type));\n        }\n    }\n\n    /**\n     * @internal to be removed in Twig 4\n     */\n    public static function captureOutput(iterable $body): string\n    {\n        $level = ob_get_level();\n        ob_start();\n\n        try {\n            foreach ($body as $data) {\n                echo $data;\n            }\n        } catch (\\Throwable $e) {\n            while (ob_get_level() > $level) {\n                ob_end_clean();\n            }\n\n            throw $e;\n        }\n\n        return ob_get_clean();\n    }\n\n    /**\n     * @internal\n     */\n    public static function parseParentFunction(Parser $parser, Node $fakeNode, $args, int $line): AbstractExpression\n    {\n        if (!$blockName = $parser->peekBlockStack()) {\n            throw new SyntaxError('Calling the \"parent\" function outside of a block is forbidden.', $line, $parser->getStream()->getSourceContext());\n        }\n\n        if (!$parser->hasInheritance()) {\n            throw new SyntaxError('Calling the \"parent\" function on a template that does not call \"extends\" or \"use\" is forbidden.', $line, $parser->getStream()->getSourceContext());\n        }\n\n        return new ParentExpression($blockName, $line);\n    }\n\n    /**\n     * @internal\n     */\n    public static function parseBlockFunction(Parser $parser, Node $fakeNode, $args, int $line): AbstractExpression\n    {\n        $fakeFunction = new TwigFunction('block', fn ($name, $template = null) => null);\n        $args = (new CallableArgumentsExtractor($fakeNode, $fakeFunction))->extractArguments($args);\n\n        return new BlockReferenceExpression($args[0], $args[1] ?? null, $line);\n    }\n\n    /**\n     * @internal\n     */\n    public static function parseAttributeFunction(Parser $parser, Node $fakeNode, $args, int $line): AbstractExpression\n    {\n        $fakeFunction = new TwigFunction('attribute', fn ($variable, $attribute, $arguments = null) => null);\n        $args = (new CallableArgumentsExtractor($fakeNode, $fakeFunction))->extractArguments($args);\n\n        return new GetAttrExpression($args[0], $args[1], $args[2] ?? null, Template::ANY_CALL, $line);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/DebugExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\Environment;\nuse Twig\\Template;\nuse Twig\\TemplateWrapper;\nuse Twig\\TwigFunction;\n\nfinal class DebugExtension extends AbstractExtension\n{\n    public function getFunctions(): array\n    {\n        // dump is safe if var_dump is overridden by xdebug\n        $isDumpOutputHtmlSafe = \\extension_loaded('xdebug')\n            // Xdebug overloads var_dump in develop mode when html_errors is enabled\n            && str_contains(\\ini_get('xdebug.mode'), 'develop')\n            && (false === \\ini_get('html_errors') || \\ini_get('html_errors'))\n            || 'cli' === \\PHP_SAPI\n        ;\n\n        return [\n            new TwigFunction('dump', [self::class, 'dump'], ['is_safe' => $isDumpOutputHtmlSafe ? ['html'] : [], 'needs_context' => true, 'needs_environment' => true, 'is_variadic' => true]),\n        ];\n    }\n\n    /**\n     * @internal\n     */\n    public static function dump(Environment $env, $context, ...$vars)\n    {\n        if (!$env->isDebug()) {\n            return;\n        }\n\n        ob_start();\n\n        if (!$vars) {\n            $vars = [];\n            foreach ($context as $key => $value) {\n                if (!$value instanceof Template && !$value instanceof TemplateWrapper) {\n                    $vars[$key] = $value;\n                }\n            }\n\n            var_dump($vars);\n        } else {\n            var_dump(...$vars);\n        }\n\n        return ob_get_clean();\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/EscaperExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\Environment;\nuse Twig\\FileExtensionEscapingStrategy;\nuse Twig\\Node\\Expression\\ConstantExpression;\nuse Twig\\Node\\Expression\\Filter\\RawFilter;\nuse Twig\\Node\\Node;\nuse Twig\\NodeVisitor\\EscaperNodeVisitor;\nuse Twig\\Runtime\\EscaperRuntime;\nuse Twig\\TokenParser\\AutoEscapeTokenParser;\nuse Twig\\TwigFilter;\n\nfinal class EscaperExtension extends AbstractExtension\n{\n    private $environment;\n    private $escapers = [];\n    private $escaper;\n    private $defaultStrategy;\n\n    /**\n     * @param string|false|callable $defaultStrategy An escaping strategy\n     *\n     * @see setDefaultStrategy()\n     */\n    public function __construct($defaultStrategy = 'html')\n    {\n        $this->setDefaultStrategy($defaultStrategy);\n    }\n\n    public function getTokenParsers(): array\n    {\n        return [new AutoEscapeTokenParser()];\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return [new EscaperNodeVisitor()];\n    }\n\n    public function getFilters(): array\n    {\n        return [\n            new TwigFilter('escape', [EscaperRuntime::class, 'escape'], ['is_safe_callback' => [self::class, 'escapeFilterIsSafe']]),\n            new TwigFilter('e', [EscaperRuntime::class, 'escape'], ['is_safe_callback' => [self::class, 'escapeFilterIsSafe']]),\n            new TwigFilter('raw', null, ['is_safe' => ['all'], 'node_class' => RawFilter::class]),\n        ];\n    }\n\n    /**\n     * @deprecated since Twig 3.10\n     */\n    public function setEnvironment(Environment $environment): void\n    {\n        $triggerDeprecation = \\func_num_args() > 1 ? func_get_arg(1) : true;\n        if ($triggerDeprecation) {\n            trigger_deprecation('twig/twig', '3.10', 'The \"%s()\" method is deprecated and not needed if you are using methods from \"Twig\\Runtime\\EscaperRuntime\".', __METHOD__);\n        }\n\n        $this->environment = $environment;\n        $this->escaper = $environment->getRuntime(EscaperRuntime::class);\n    }\n\n    /**\n     * @deprecated since Twig 3.10\n     */\n    public function setEscaperRuntime(EscaperRuntime $escaper)\n    {\n        trigger_deprecation('twig/twig', '3.10', 'The \"%s()\" method is deprecated and not needed if you are using methods from \"Twig\\Runtime\\EscaperRuntime\".', __METHOD__);\n\n        $this->escaper = $escaper;\n    }\n\n    /**\n     * Sets the default strategy to use when not defined by the user.\n     *\n     * The strategy can be a valid PHP callback that takes the template\n     * name as an argument and returns the strategy to use.\n     *\n     * @param string|false|callable(string $templateName): string $defaultStrategy An escaping strategy\n     */\n    public function setDefaultStrategy($defaultStrategy): void\n    {\n        if ('name' === $defaultStrategy) {\n            $defaultStrategy = [FileExtensionEscapingStrategy::class, 'guess'];\n        }\n\n        $this->defaultStrategy = $defaultStrategy;\n    }\n\n    /**\n     * Gets the default strategy to use when not defined by the user.\n     *\n     * @param string $name The template name\n     *\n     * @return string|false The default strategy to use for the template\n     */\n    public function getDefaultStrategy(string $name)\n    {\n        // disable string callables to avoid calling a function named html or js,\n        // or any other upcoming escaping strategy\n        if (!\\is_string($this->defaultStrategy) && false !== $this->defaultStrategy) {\n            return \\call_user_func($this->defaultStrategy, $name);\n        }\n\n        return $this->defaultStrategy;\n    }\n\n    /**\n     * Defines a new escaper to be used via the escape filter.\n     *\n     * @param string                                        $strategy The strategy name that should be used as a strategy in the escape call\n     * @param callable(Environment, string, string): string $callable A valid PHP callable\n     *\n     * @deprecated since Twig 3.10\n     */\n    public function setEscaper($strategy, callable $callable)\n    {\n        trigger_deprecation('twig/twig', '3.10', 'The \"%s()\" method is deprecated, use the \"Twig\\Runtime\\EscaperRuntime::setEscaper()\" method instead (be warned that Environment is not passed anymore to the callable).', __METHOD__);\n\n        if (!isset($this->environment)) {\n            throw new \\LogicException(\\sprintf('You must call \"setEnvironment()\" before calling \"%s()\".', __METHOD__));\n        }\n\n        $this->escapers[$strategy] = $callable;\n        $callable = function ($string, $charset) use ($callable) {\n            return $callable($this->environment, $string, $charset);\n        };\n\n        $this->escaper->setEscaper($strategy, $callable);\n    }\n\n    /**\n     * Gets all defined escapers.\n     *\n     * @return array<string, callable(Environment, string, string): string> An array of escapers\n     *\n     * @deprecated since Twig 3.10\n     */\n    public function getEscapers()\n    {\n        trigger_deprecation('twig/twig', '3.10', 'The \"%s()\" method is deprecated, use the \"Twig\\Runtime\\EscaperRuntime::getEscaper()\" method instead.', __METHOD__);\n\n        return $this->escapers;\n    }\n\n    /**\n     * @deprecated since Twig 3.10\n     */\n    public function setSafeClasses(array $safeClasses = [])\n    {\n        trigger_deprecation('twig/twig', '3.10', 'The \"%s()\" method is deprecated, use the \"Twig\\Runtime\\EscaperRuntime::setSafeClasses()\" method instead.', __METHOD__);\n\n        if (!isset($this->escaper)) {\n            throw new \\LogicException(\\sprintf('You must call \"setEnvironment()\" before calling \"%s()\".', __METHOD__));\n        }\n\n        $this->escaper->setSafeClasses($safeClasses);\n    }\n\n    /**\n     * @deprecated since Twig 3.10\n     */\n    public function addSafeClass(string $class, array $strategies)\n    {\n        trigger_deprecation('twig/twig', '3.10', 'The \"%s()\" method is deprecated, use the \"Twig\\Runtime\\EscaperRuntime::addSafeClass()\" method instead.', __METHOD__);\n\n        if (!isset($this->escaper)) {\n            throw new \\LogicException(\\sprintf('You must call \"setEnvironment()\" before calling \"%s()\".', __METHOD__));\n        }\n\n        $this->escaper->addSafeClass($class, $strategies);\n    }\n\n    /**\n     * @internal\n     */\n    public static function escapeFilterIsSafe(Node $filterArgs)\n    {\n        foreach ($filterArgs as $arg) {\n            if ($arg instanceof ConstantExpression) {\n                return [$arg->getAttribute('value')];\n            }\n\n            return [];\n        }\n\n        return ['html'];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/ExtensionInterface.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\ExpressionParser;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\NodeVisitor\\NodeVisitorInterface;\nuse Twig\\TokenParser\\TokenParserInterface;\nuse Twig\\TwigFilter;\nuse Twig\\TwigFunction;\nuse Twig\\TwigTest;\n\n/**\n * Interface implemented by extension classes.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface ExtensionInterface\n{\n    /**\n     * Returns the token parser instances to add to the existing list.\n     *\n     * @return TokenParserInterface[]\n     */\n    public function getTokenParsers();\n\n    /**\n     * Returns the node visitor instances to add to the existing list.\n     *\n     * @return NodeVisitorInterface[]\n     */\n    public function getNodeVisitors();\n\n    /**\n     * Returns a list of filters to add to the existing list.\n     *\n     * @return TwigFilter[]\n     */\n    public function getFilters();\n\n    /**\n     * Returns a list of tests to add to the existing list.\n     *\n     * @return TwigTest[]\n     */\n    public function getTests();\n\n    /**\n     * Returns a list of functions to add to the existing list.\n     *\n     * @return TwigFunction[]\n     */\n    public function getFunctions();\n\n    /**\n     * Returns a list of operators to add to the existing list.\n     *\n     * @return array<array> First array of unary operators, second array of binary operators\n     *\n     * @psalm-return array{\n     *     array<string, array{precedence: int, class: class-string<AbstractExpression>}>,\n     *     array<string, array{precedence: int, class?: class-string<AbstractExpression>, associativity: ExpressionParser::OPERATOR_*}>\n     * }\n     */\n    public function getOperators();\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/GlobalsInterface.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\n/**\n * Allows Twig extensions to add globals to the context.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface GlobalsInterface\n{\n    /**\n     * @return array<string, mixed>\n     */\n    public function getGlobals(): array;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/OptimizerExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\NodeVisitor\\OptimizerNodeVisitor;\n\nfinal class OptimizerExtension extends AbstractExtension\n{\n    public function __construct(\n        private int $optimizers = -1,\n    ) {\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return [new OptimizerNodeVisitor($this->optimizers)];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/ProfilerExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor;\nuse Twig\\Profiler\\Profile;\n\nclass ProfilerExtension extends AbstractExtension\n{\n    private $actives = [];\n\n    public function __construct(Profile $profile)\n    {\n        $this->actives[] = $profile;\n    }\n\n    /**\n     * @return void\n     */\n    public function enter(Profile $profile)\n    {\n        $this->actives[0]->addProfile($profile);\n        array_unshift($this->actives, $profile);\n    }\n\n    /**\n     * @return void\n     */\n    public function leave(Profile $profile)\n    {\n        $profile->leave();\n        array_shift($this->actives);\n\n        if (1 === \\count($this->actives)) {\n            $this->actives[0]->leave();\n        }\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return [new ProfilerNodeVisitor(static::class)];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\n/**\n * @author Grégoire Pineau <lyrixx@lyrixx.info>\n */\ninterface RuntimeExtensionInterface\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/SandboxExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\NodeVisitor\\SandboxNodeVisitor;\nuse Twig\\Sandbox\\SecurityNotAllowedMethodError;\nuse Twig\\Sandbox\\SecurityNotAllowedPropertyError;\nuse Twig\\Sandbox\\SecurityPolicyInterface;\nuse Twig\\Sandbox\\SourcePolicyInterface;\nuse Twig\\Source;\nuse Twig\\TokenParser\\SandboxTokenParser;\n\nfinal class SandboxExtension extends AbstractExtension\n{\n    private $sandboxedGlobally;\n    private $sandboxed;\n    private $policy;\n    private $sourcePolicy;\n\n    public function __construct(SecurityPolicyInterface $policy, $sandboxed = false, ?SourcePolicyInterface $sourcePolicy = null)\n    {\n        $this->policy = $policy;\n        $this->sandboxedGlobally = $sandboxed;\n        $this->sourcePolicy = $sourcePolicy;\n    }\n\n    public function getTokenParsers(): array\n    {\n        return [new SandboxTokenParser()];\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return [new SandboxNodeVisitor()];\n    }\n\n    public function enableSandbox(): void\n    {\n        $this->sandboxed = true;\n    }\n\n    public function disableSandbox(): void\n    {\n        $this->sandboxed = false;\n    }\n\n    public function isSandboxed(?Source $source = null): bool\n    {\n        return $this->sandboxedGlobally || $this->sandboxed || $this->isSourceSandboxed($source);\n    }\n\n    public function isSandboxedGlobally(): bool\n    {\n        return $this->sandboxedGlobally;\n    }\n\n    private function isSourceSandboxed(?Source $source): bool\n    {\n        if (null === $source || null === $this->sourcePolicy) {\n            return false;\n        }\n\n        return $this->sourcePolicy->enableSandbox($source);\n    }\n\n    public function setSecurityPolicy(SecurityPolicyInterface $policy)\n    {\n        $this->policy = $policy;\n    }\n\n    public function getSecurityPolicy(): SecurityPolicyInterface\n    {\n        return $this->policy;\n    }\n\n    public function checkSecurity($tags, $filters, $functions, ?Source $source = null): void\n    {\n        if ($this->isSandboxed($source)) {\n            $this->policy->checkSecurity($tags, $filters, $functions);\n        }\n    }\n\n    public function checkMethodAllowed($obj, $method, int $lineno = -1, ?Source $source = null): void\n    {\n        if ($this->isSandboxed($source)) {\n            try {\n                $this->policy->checkMethodAllowed($obj, $method);\n            } catch (SecurityNotAllowedMethodError $e) {\n                $e->setSourceContext($source);\n                $e->setTemplateLine($lineno);\n\n                throw $e;\n            }\n        }\n    }\n\n    public function checkPropertyAllowed($obj, $property, int $lineno = -1, ?Source $source = null): void\n    {\n        if ($this->isSandboxed($source)) {\n            try {\n                $this->policy->checkPropertyAllowed($obj, $property);\n            } catch (SecurityNotAllowedPropertyError $e) {\n                $e->setSourceContext($source);\n                $e->setTemplateLine($lineno);\n\n                throw $e;\n            }\n        }\n    }\n\n    public function ensureToStringAllowed($obj, int $lineno = -1, ?Source $source = null)\n    {\n        if ($this->isSandboxed($source) && $obj instanceof \\Stringable) {\n            try {\n                $this->policy->checkMethodAllowed($obj, '__toString');\n            } catch (SecurityNotAllowedMethodError $e) {\n                $e->setSourceContext($source);\n                $e->setTemplateLine($lineno);\n\n                throw $e;\n            }\n        }\n\n        return $obj;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/StagingExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\NodeVisitor\\NodeVisitorInterface;\nuse Twig\\TokenParser\\TokenParserInterface;\nuse Twig\\TwigFilter;\nuse Twig\\TwigFunction;\nuse Twig\\TwigTest;\n\n/**\n * Used by \\Twig\\Environment as a staging area.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n *\n * @internal\n */\nfinal class StagingExtension extends AbstractExtension\n{\n    private $functions = [];\n    private $filters = [];\n    private $visitors = [];\n    private $tokenParsers = [];\n    private $tests = [];\n\n    public function addFunction(TwigFunction $function): void\n    {\n        if (isset($this->functions[$function->getName()])) {\n            throw new \\LogicException(\\sprintf('Function \"%s\" is already registered.', $function->getName()));\n        }\n\n        $this->functions[$function->getName()] = $function;\n    }\n\n    public function getFunctions(): array\n    {\n        return $this->functions;\n    }\n\n    public function addFilter(TwigFilter $filter): void\n    {\n        if (isset($this->filters[$filter->getName()])) {\n            throw new \\LogicException(\\sprintf('Filter \"%s\" is already registered.', $filter->getName()));\n        }\n\n        $this->filters[$filter->getName()] = $filter;\n    }\n\n    public function getFilters(): array\n    {\n        return $this->filters;\n    }\n\n    public function addNodeVisitor(NodeVisitorInterface $visitor): void\n    {\n        $this->visitors[] = $visitor;\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return $this->visitors;\n    }\n\n    public function addTokenParser(TokenParserInterface $parser): void\n    {\n        if (isset($this->tokenParsers[$parser->getTag()])) {\n            throw new \\LogicException(\\sprintf('Tag \"%s\" is already registered.', $parser->getTag()));\n        }\n\n        $this->tokenParsers[$parser->getTag()] = $parser;\n    }\n\n    public function getTokenParsers(): array\n    {\n        return $this->tokenParsers;\n    }\n\n    public function addTest(TwigTest $test): void\n    {\n        if (isset($this->tests[$test->getName()])) {\n            throw new \\LogicException(\\sprintf('Test \"%s\" is already registered.', $test->getName()));\n        }\n\n        $this->tests[$test->getName()] = $test;\n    }\n\n    public function getTests(): array\n    {\n        return $this->tests;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/StringLoaderExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\Environment;\nuse Twig\\TemplateWrapper;\nuse Twig\\TwigFunction;\n\nfinal class StringLoaderExtension extends AbstractExtension\n{\n    public function getFunctions(): array\n    {\n        return [\n            new TwigFunction('template_from_string', [self::class, 'templateFromString'], ['needs_environment' => true]),\n        ];\n    }\n\n    /**\n     * Loads a template from a string.\n     *\n     *     {{ include(template_from_string(\"Hello {{ name }}\")) }}\n     *\n     * @param string|null $name An optional name of the template to be used in error messages\n     *\n     * @internal\n     */\n    public static function templateFromString(Environment $env, string|\\Stringable $template, ?string $name = null): TemplateWrapper\n    {\n        return $env->createTemplate((string) $template, $name);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Extension/YieldNotReadyExtension.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Extension;\n\nuse Twig\\NodeVisitor\\YieldNotReadyNodeVisitor;\n\n/**\n * @internal to be removed in Twig 4\n */\nfinal class YieldNotReadyExtension extends AbstractExtension\n{\n    public function __construct(\n        private bool $useYield,\n    ) {\n    }\n\n    public function getNodeVisitors(): array\n    {\n        return [new YieldNotReadyNodeVisitor($this->useYield)];\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/ExtensionSet.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\nuse Twig\\Error\\RuntimeError;\nuse Twig\\Extension\\ExtensionInterface;\nuse Twig\\Extension\\GlobalsInterface;\nuse Twig\\Extension\\StagingExtension;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Expression\\Binary\\AbstractBinary;\nuse Twig\\Node\\Expression\\Unary\\AbstractUnary;\nuse Twig\\NodeVisitor\\NodeVisitorInterface;\nuse Twig\\TokenParser\\TokenParserInterface;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n *\n * @internal\n */\nfinal class ExtensionSet\n{\n    private $extensions;\n    private $initialized = false;\n    private $runtimeInitialized = false;\n    private $staging;\n    private $parsers;\n    private $visitors;\n    /** @var array<string, TwigFilter> */\n    private $filters;\n    /** @var array<string, TwigFilter> */\n    private $dynamicFilters;\n    /** @var array<string, TwigTest> */\n    private $tests;\n    /** @var array<string, TwigTest> */\n    private $dynamicTests;\n    /** @var array<string, TwigFunction> */\n    private $functions;\n    /** @var array<string, TwigFunction> */\n    private $dynamicFunctions;\n    /** @var array<string, array{precedence: int, class: class-string<AbstractExpression>}> */\n    private $unaryOperators;\n    /** @var array<string, array{precedence: int, class?: class-string<AbstractExpression>, associativity: ExpressionParser::OPERATOR_*}> */\n    private $binaryOperators;\n    /** @var array<string, mixed> */\n    private $globals;\n    private $functionCallbacks = [];\n    private $filterCallbacks = [];\n    private $parserCallbacks = [];\n    private $lastModified = 0;\n\n    public function __construct()\n    {\n        $this->staging = new StagingExtension();\n    }\n\n    public function initRuntime()\n    {\n        $this->runtimeInitialized = true;\n    }\n\n    public function hasExtension(string $class): bool\n    {\n        return isset($this->extensions[ltrim($class, '\\\\')]);\n    }\n\n    public function getExtension(string $class): ExtensionInterface\n    {\n        $class = ltrim($class, '\\\\');\n\n        if (!isset($this->extensions[$class])) {\n            throw new RuntimeError(\\sprintf('The \"%s\" extension is not enabled.', $class));\n        }\n\n        return $this->extensions[$class];\n    }\n\n    /**\n     * @param ExtensionInterface[] $extensions\n     */\n    public function setExtensions(array $extensions): void\n    {\n        foreach ($extensions as $extension) {\n            $this->addExtension($extension);\n        }\n    }\n\n    /**\n     * @return ExtensionInterface[]\n     */\n    public function getExtensions(): array\n    {\n        return $this->extensions;\n    }\n\n    public function getSignature(): string\n    {\n        return json_encode(array_keys($this->extensions));\n    }\n\n    public function isInitialized(): bool\n    {\n        return $this->initialized || $this->runtimeInitialized;\n    }\n\n    public function getLastModified(): int\n    {\n        if (0 !== $this->lastModified) {\n            return $this->lastModified;\n        }\n\n        foreach ($this->extensions as $extension) {\n            $r = new \\ReflectionObject($extension);\n            if (is_file($r->getFileName()) && ($extensionTime = filemtime($r->getFileName())) > $this->lastModified) {\n                $this->lastModified = $extensionTime;\n            }\n        }\n\n        return $this->lastModified;\n    }\n\n    public function addExtension(ExtensionInterface $extension): void\n    {\n        $class = \\get_class($extension);\n\n        if ($this->initialized) {\n            throw new \\LogicException(\\sprintf('Unable to register extension \"%s\" as extensions have already been initialized.', $class));\n        }\n\n        if (isset($this->extensions[$class])) {\n            throw new \\LogicException(\\sprintf('Unable to register extension \"%s\" as it is already registered.', $class));\n        }\n\n        $this->extensions[$class] = $extension;\n    }\n\n    public function addFunction(TwigFunction $function): void\n    {\n        if ($this->initialized) {\n            throw new \\LogicException(\\sprintf('Unable to add function \"%s\" as extensions have already been initialized.', $function->getName()));\n        }\n\n        $this->staging->addFunction($function);\n    }\n\n    /**\n     * @return TwigFunction[]\n     */\n    public function getFunctions(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->functions;\n    }\n\n    public function getFunction(string $name): ?TwigFunction\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        if (isset($this->functions[$name])) {\n            return $this->functions[$name];\n        }\n\n        foreach ($this->dynamicFunctions as $pattern => $function) {\n            if (preg_match($pattern, $name, $matches)) {\n                array_shift($matches);\n\n                return $function->withDynamicArguments($name, $function->getName(), $matches);\n            }\n        }\n\n        foreach ($this->functionCallbacks as $callback) {\n            if (false !== $function = $callback($name)) {\n                return $function;\n            }\n        }\n\n        return null;\n    }\n\n    public function registerUndefinedFunctionCallback(callable $callable): void\n    {\n        $this->functionCallbacks[] = $callable;\n    }\n\n    public function addFilter(TwigFilter $filter): void\n    {\n        if ($this->initialized) {\n            throw new \\LogicException(\\sprintf('Unable to add filter \"%s\" as extensions have already been initialized.', $filter->getName()));\n        }\n\n        $this->staging->addFilter($filter);\n    }\n\n    /**\n     * @return TwigFilter[]\n     */\n    public function getFilters(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->filters;\n    }\n\n    public function getFilter(string $name): ?TwigFilter\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        if (isset($this->filters[$name])) {\n            return $this->filters[$name];\n        }\n\n        foreach ($this->dynamicFilters as $pattern => $filter) {\n            if (preg_match($pattern, $name, $matches)) {\n                array_shift($matches);\n\n                return $filter->withDynamicArguments($name, $filter->getName(), $matches);\n            }\n        }\n\n        foreach ($this->filterCallbacks as $callback) {\n            if (false !== $filter = $callback($name)) {\n                return $filter;\n            }\n        }\n\n        return null;\n    }\n\n    public function registerUndefinedFilterCallback(callable $callable): void\n    {\n        $this->filterCallbacks[] = $callable;\n    }\n\n    public function addNodeVisitor(NodeVisitorInterface $visitor): void\n    {\n        if ($this->initialized) {\n            throw new \\LogicException('Unable to add a node visitor as extensions have already been initialized.');\n        }\n\n        $this->staging->addNodeVisitor($visitor);\n    }\n\n    /**\n     * @return NodeVisitorInterface[]\n     */\n    public function getNodeVisitors(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->visitors;\n    }\n\n    public function addTokenParser(TokenParserInterface $parser): void\n    {\n        if ($this->initialized) {\n            throw new \\LogicException('Unable to add a token parser as extensions have already been initialized.');\n        }\n\n        $this->staging->addTokenParser($parser);\n    }\n\n    /**\n     * @return TokenParserInterface[]\n     */\n    public function getTokenParsers(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->parsers;\n    }\n\n    public function getTokenParser(string $name): ?TokenParserInterface\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        if (isset($this->parsers[$name])) {\n            return $this->parsers[$name];\n        }\n\n        foreach ($this->parserCallbacks as $callback) {\n            if (false !== $parser = $callback($name)) {\n                return $parser;\n            }\n        }\n\n        return null;\n    }\n\n    public function registerUndefinedTokenParserCallback(callable $callable): void\n    {\n        $this->parserCallbacks[] = $callable;\n    }\n\n    /**\n     * @return array<string, mixed>\n     */\n    public function getGlobals(): array\n    {\n        if (null !== $this->globals) {\n            return $this->globals;\n        }\n\n        $globals = [];\n        foreach ($this->extensions as $extension) {\n            if (!$extension instanceof GlobalsInterface) {\n                continue;\n            }\n\n            $globals = array_merge($globals, $extension->getGlobals());\n        }\n\n        if ($this->initialized) {\n            $this->globals = $globals;\n        }\n\n        return $globals;\n    }\n\n    public function resetGlobals(): void\n    {\n        $this->globals = null;\n    }\n\n    public function addTest(TwigTest $test): void\n    {\n        if ($this->initialized) {\n            throw new \\LogicException(\\sprintf('Unable to add test \"%s\" as extensions have already been initialized.', $test->getName()));\n        }\n\n        $this->staging->addTest($test);\n    }\n\n    /**\n     * @return TwigTest[]\n     */\n    public function getTests(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->tests;\n    }\n\n    public function getTest(string $name): ?TwigTest\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        if (isset($this->tests[$name])) {\n            return $this->tests[$name];\n        }\n\n        foreach ($this->dynamicTests as $pattern => $test) {\n            if (preg_match($pattern, $name, $matches)) {\n                array_shift($matches);\n\n                return $test->withDynamicArguments($name, $test->getName(), $matches);\n            }\n        }\n\n        return null;\n    }\n\n    /**\n     * @return array<string, array{precedence: int, class: class-string<AbstractExpression>}>\n     */\n    public function getUnaryOperators(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->unaryOperators;\n    }\n\n    /**\n     * @return array<string, array{precedence: int, class?: class-string<AbstractExpression>, associativity: ExpressionParser::OPERATOR_*}>\n     */\n    public function getBinaryOperators(): array\n    {\n        if (!$this->initialized) {\n            $this->initExtensions();\n        }\n\n        return $this->binaryOperators;\n    }\n\n    private function initExtensions(): void\n    {\n        $this->parsers = [];\n        $this->filters = [];\n        $this->functions = [];\n        $this->tests = [];\n        $this->dynamicFilters = [];\n        $this->dynamicFunctions = [];\n        $this->dynamicTests = [];\n        $this->visitors = [];\n        $this->unaryOperators = [];\n        $this->binaryOperators = [];\n\n        foreach ($this->extensions as $extension) {\n            $this->initExtension($extension);\n        }\n        $this->initExtension($this->staging);\n        // Done at the end only, so that an exception during initialization does not mark the environment as initialized when catching the exception\n        $this->initialized = true;\n    }\n\n    private function initExtension(ExtensionInterface $extension): void\n    {\n        // filters\n        foreach ($extension->getFilters() as $filter) {\n            $this->filters[$name = $filter->getName()] = $filter;\n            if (str_contains($name, '*')) {\n                $this->dynamicFilters['#^'.str_replace('\\\\*', '(.*?)', preg_quote($name, '#')).'$#'] = $filter;\n            }\n        }\n\n        // functions\n        foreach ($extension->getFunctions() as $function) {\n            $this->functions[$name = $function->getName()] = $function;\n            if (str_contains($name, '*')) {\n                $this->dynamicFunctions['#^'.str_replace('\\\\*', '(.*?)', preg_quote($name, '#')).'$#'] = $function;\n            }\n        }\n\n        // tests\n        foreach ($extension->getTests() as $test) {\n            $this->tests[$name = $test->getName()] = $test;\n            if (str_contains($name, '*')) {\n                $this->dynamicTests['#^'.str_replace('\\\\*', '(.*?)', preg_quote($name, '#')).'$#'] = $test;\n            }\n        }\n\n        // token parsers\n        foreach ($extension->getTokenParsers() as $parser) {\n            if (!$parser instanceof TokenParserInterface) {\n                throw new \\LogicException('getTokenParsers() must return an array of \\Twig\\TokenParser\\TokenParserInterface.');\n            }\n\n            $this->parsers[$parser->getTag()] = $parser;\n        }\n\n        // node visitors\n        foreach ($extension->getNodeVisitors() as $visitor) {\n            $this->visitors[] = $visitor;\n        }\n\n        // operators\n        if ($operators = $extension->getOperators()) {\n            if (!\\is_array($operators)) {\n                throw new \\InvalidArgumentException(\\sprintf('\"%s::getOperators()\" must return an array with operators, got \"%s\".', \\get_class($extension), \\is_object($operators) ? \\get_class($operators) : \\gettype($operators).(\\is_resource($operators) ? '' : '#'.$operators)));\n            }\n\n            if (2 !== \\count($operators)) {\n                throw new \\InvalidArgumentException(\\sprintf('\"%s::getOperators()\" must return an array of 2 elements, got %d.', \\get_class($extension), \\count($operators)));\n            }\n\n            $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]);\n            $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]);\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/FileExtensionEscapingStrategy.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\n/**\n * Default autoescaping strategy based on file names.\n *\n * This strategy sets the HTML as the default autoescaping strategy,\n * but changes it based on the template name.\n *\n * Note that there is no runtime performance impact as the\n * default autoescaping strategy is set at compilation time.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass FileExtensionEscapingStrategy\n{\n    /**\n     * Guesses the best autoescaping strategy based on the file name.\n     *\n     * @param string $name The template name\n     *\n     * @return string|false The escaping strategy name to use or false to disable\n     */\n    public static function guess(string $name)\n    {\n        if (\\in_array(substr($name, -1), ['/', '\\\\'])) {\n            return 'html'; // return html for directories\n        }\n\n        if (str_ends_with($name, '.twig')) {\n            $name = substr($name, 0, -5);\n        }\n\n        $extension = pathinfo($name, \\PATHINFO_EXTENSION);\n\n        switch ($extension) {\n            case 'js':\n                return 'js';\n\n            case 'css':\n                return 'css';\n\n            case 'txt':\n                return false;\n\n            default:\n                return 'html';\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Lexer.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\nuse Twig\\Error\\SyntaxError;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass Lexer\n{\n    private $isInitialized = false;\n\n    private $tokens;\n    private $code;\n    private $cursor;\n    private $lineno;\n    private $end;\n    private $state;\n    private $states;\n    private $brackets;\n    private $env;\n    private $source;\n    private $options;\n    private $regexes;\n    private $position;\n    private $positions;\n    private $currentVarBlockLine;\n\n    public const STATE_DATA = 0;\n    public const STATE_BLOCK = 1;\n    public const STATE_VAR = 2;\n    public const STATE_STRING = 3;\n    public const STATE_INTERPOLATION = 4;\n\n    public const REGEX_NAME = '/[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/A';\n    public const REGEX_NUMBER = '/[0-9]+(?:\\.[0-9]+)?([Ee][\\+\\-][0-9]+)?/A';\n    public const REGEX_STRING = '/\"([^#\"\\\\\\\\]*(?:\\\\\\\\.[^#\"\\\\\\\\]*)*)\"|\\'([^\\'\\\\\\\\]*(?:\\\\\\\\.[^\\'\\\\\\\\]*)*)\\'/As';\n    public const REGEX_DQ_STRING_DELIM = '/\"/A';\n    public const REGEX_DQ_STRING_PART = '/[^#\"\\\\\\\\]*(?:(?:\\\\\\\\.|#(?!\\{))[^#\"\\\\\\\\]*)*/As';\n    public const PUNCTUATION = '()[]{}?:.,|';\n\n    private const SPECIAL_CHARS = [\n        'f' => \"\\f\",\n        'n' => \"\\n\",\n        'r' => \"\\r\",\n        't' => \"\\t\",\n        'v' => \"\\v\",\n    ];\n\n    public function __construct(Environment $env, array $options = [])\n    {\n        $this->env = $env;\n\n        $this->options = array_merge([\n            'tag_comment' => ['{#', '#}'],\n            'tag_block' => ['{%', '%}'],\n            'tag_variable' => ['{{', '}}'],\n            'whitespace_trim' => '-',\n            'whitespace_line_trim' => '~',\n            'whitespace_line_chars' => ' \\t\\0\\x0B',\n            'interpolation' => ['#{', '}'],\n        ], $options);\n    }\n\n    private function initialize()\n    {\n        if ($this->isInitialized) {\n            return;\n        }\n\n        // when PHP 7.3 is the min version, we will be able to remove the '#' part in preg_quote as it's part of the default\n        $this->regexes = [\n            // }}\n            'lex_var' => '{\n                \\s*\n                (?:'.\n                    preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '#').'\\s*'. // -}}\\s*\n                    '|'.\n                    preg_quote($this->options['whitespace_line_trim'].$this->options['tag_variable'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~}}[ \\t\\0\\x0B]*\n                    '|'.\n                    preg_quote($this->options['tag_variable'][1], '#'). // }}\n                ')\n            }Ax',\n\n            // %}\n            'lex_block' => '{\n                \\s*\n                (?:'.\n                    preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\\s*\\n?'. // -%}\\s*\\n?\n                    '|'.\n                    preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \\t\\0\\x0B]*\n                    '|'.\n                    preg_quote($this->options['tag_block'][1], '#').'\\n?'. // %}\\n?\n                ')\n            }Ax',\n\n            // {% endverbatim %}\n            'lex_raw_data' => '{'.\n                preg_quote($this->options['tag_block'][0], '#'). // {%\n                '('.\n                    $this->options['whitespace_trim']. // -\n                    '|'.\n                    $this->options['whitespace_line_trim']. // ~\n                ')?\\s*endverbatim\\s*'.\n                '(?:'.\n                    preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\\s*'. // -%}\n                    '|'.\n                    preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \\t\\0\\x0B]*\n                    '|'.\n                    preg_quote($this->options['tag_block'][1], '#'). // %}\n                ')\n            }sx',\n\n            'operator' => $this->getOperatorRegex(),\n\n            // #}\n            'lex_comment' => '{\n                (?:'.\n                    preg_quote($this->options['whitespace_trim'].$this->options['tag_comment'][1], '#').'\\s*\\n?'. // -#}\\s*\\n?\n                    '|'.\n                    preg_quote($this->options['whitespace_line_trim'].$this->options['tag_comment'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~#}[ \\t\\0\\x0B]*\n                    '|'.\n                    preg_quote($this->options['tag_comment'][1], '#').'\\n?'. // #}\\n?\n                ')\n            }sx',\n\n            // verbatim %}\n            'lex_block_raw' => '{\n                \\s*verbatim\\s*\n                (?:'.\n                    preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '#').'\\s*'. // -%}\\s*\n                    '|'.\n                    preg_quote($this->options['whitespace_line_trim'].$this->options['tag_block'][1], '#').'['.$this->options['whitespace_line_chars'].']*'. // ~%}[ \\t\\0\\x0B]*\n                    '|'.\n                    preg_quote($this->options['tag_block'][1], '#'). // %}\n                ')\n            }Asx',\n\n            'lex_block_line' => '{\\s*line\\s+(\\d+)\\s*'.preg_quote($this->options['tag_block'][1], '#').'}As',\n\n            // {{ or {% or {#\n            'lex_tokens_start' => '{\n                ('.\n                    preg_quote($this->options['tag_variable'][0], '#'). // {{\n                    '|'.\n                    preg_quote($this->options['tag_block'][0], '#'). // {%\n                    '|'.\n                    preg_quote($this->options['tag_comment'][0], '#'). // {#\n                ')('.\n                    preg_quote($this->options['whitespace_trim'], '#'). // -\n                    '|'.\n                    preg_quote($this->options['whitespace_line_trim'], '#'). // ~\n                ')?\n            }sx',\n            'interpolation_start' => '{'.preg_quote($this->options['interpolation'][0], '#').'\\s*}A',\n            'interpolation_end' => '{\\s*'.preg_quote($this->options['interpolation'][1], '#').'}A',\n        ];\n\n        $this->isInitialized = true;\n    }\n\n    public function tokenize(Source $source): TokenStream\n    {\n        $this->initialize();\n\n        $this->source = $source;\n        $this->code = str_replace([\"\\r\\n\", \"\\r\"], \"\\n\", $source->getCode());\n        $this->cursor = 0;\n        $this->lineno = 1;\n        $this->end = \\strlen($this->code);\n        $this->tokens = [];\n        $this->state = self::STATE_DATA;\n        $this->states = [];\n        $this->brackets = [];\n        $this->position = -1;\n\n        // find all token starts in one go\n        preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, \\PREG_OFFSET_CAPTURE);\n        $this->positions = $matches;\n\n        while ($this->cursor < $this->end) {\n            // dispatch to the lexing functions depending\n            // on the current state\n            switch ($this->state) {\n                case self::STATE_DATA:\n                    $this->lexData();\n                    break;\n\n                case self::STATE_BLOCK:\n                    $this->lexBlock();\n                    break;\n\n                case self::STATE_VAR:\n                    $this->lexVar();\n                    break;\n\n                case self::STATE_STRING:\n                    $this->lexString();\n                    break;\n\n                case self::STATE_INTERPOLATION:\n                    $this->lexInterpolation();\n                    break;\n            }\n        }\n\n        $this->pushToken(Token::EOF_TYPE);\n\n        if (!empty($this->brackets)) {\n            [$expect, $lineno] = array_pop($this->brackets);\n            throw new SyntaxError(\\sprintf('Unclosed \"%s\".', $expect), $lineno, $this->source);\n        }\n\n        return new TokenStream($this->tokens, $this->source);\n    }\n\n    private function lexData(): void\n    {\n        // if no matches are left we return the rest of the template as simple text token\n        if ($this->position == \\count($this->positions[0]) - 1) {\n            $this->pushToken(Token::TEXT_TYPE, substr($this->code, $this->cursor));\n            $this->cursor = $this->end;\n\n            return;\n        }\n\n        // Find the first token after the current cursor\n        $position = $this->positions[0][++$this->position];\n        while ($position[1] < $this->cursor) {\n            if ($this->position == \\count($this->positions[0]) - 1) {\n                return;\n            }\n            $position = $this->positions[0][++$this->position];\n        }\n\n        // push the template text first\n        $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor);\n\n        // trim?\n        if (isset($this->positions[2][$this->position][0])) {\n            if ($this->options['whitespace_trim'] === $this->positions[2][$this->position][0]) {\n                // whitespace_trim detected ({%-, {{- or {#-)\n                $text = rtrim($text);\n            } elseif ($this->options['whitespace_line_trim'] === $this->positions[2][$this->position][0]) {\n                // whitespace_line_trim detected ({%~, {{~ or {#~)\n                // don't trim \\r and \\n\n                $text = rtrim($text, \" \\t\\0\\x0B\");\n            }\n        }\n        $this->pushToken(Token::TEXT_TYPE, $text);\n        $this->moveCursor($textContent.$position[0]);\n\n        switch ($this->positions[1][$this->position][0]) {\n            case $this->options['tag_comment'][0]:\n                $this->lexComment();\n                break;\n\n            case $this->options['tag_block'][0]:\n                // raw data?\n                if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, 0, $this->cursor)) {\n                    $this->moveCursor($match[0]);\n                    $this->lexRawData();\n                // {% line \\d+ %}\n                } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, 0, $this->cursor)) {\n                    $this->moveCursor($match[0]);\n                    $this->lineno = (int) $match[1];\n                } else {\n                    $this->pushToken(Token::BLOCK_START_TYPE);\n                    $this->pushState(self::STATE_BLOCK);\n                    $this->currentVarBlockLine = $this->lineno;\n                }\n                break;\n\n            case $this->options['tag_variable'][0]:\n                $this->pushToken(Token::VAR_START_TYPE);\n                $this->pushState(self::STATE_VAR);\n                $this->currentVarBlockLine = $this->lineno;\n                break;\n        }\n    }\n\n    private function lexBlock(): void\n    {\n        if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, 0, $this->cursor)) {\n            $this->pushToken(Token::BLOCK_END_TYPE);\n            $this->moveCursor($match[0]);\n            $this->popState();\n        } else {\n            $this->lexExpression();\n        }\n    }\n\n    private function lexVar(): void\n    {\n        if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, 0, $this->cursor)) {\n            $this->pushToken(Token::VAR_END_TYPE);\n            $this->moveCursor($match[0]);\n            $this->popState();\n        } else {\n            $this->lexExpression();\n        }\n    }\n\n    private function lexExpression(): void\n    {\n        // whitespace\n        if (preg_match('/\\s+/A', $this->code, $match, 0, $this->cursor)) {\n            $this->moveCursor($match[0]);\n\n            if ($this->cursor >= $this->end) {\n                throw new SyntaxError(\\sprintf('Unclosed \"%s\".', self::STATE_BLOCK === $this->state ? 'block' : 'variable'), $this->currentVarBlockLine, $this->source);\n            }\n        }\n\n        // spread operator\n        if ('.' === $this->code[$this->cursor] && ($this->cursor + 2 < $this->end) && '.' === $this->code[$this->cursor + 1] && '.' === $this->code[$this->cursor + 2]) {\n            $this->pushToken(Token::SPREAD_TYPE, '...');\n            $this->moveCursor('...');\n        }\n        // arrow function\n        elseif ('=' === $this->code[$this->cursor] && ($this->cursor + 1 < $this->end) && '>' === $this->code[$this->cursor + 1]) {\n            $this->pushToken(Token::ARROW_TYPE, '=>');\n            $this->moveCursor('=>');\n        }\n        // operators\n        elseif (preg_match($this->regexes['operator'], $this->code, $match, 0, $this->cursor)) {\n            $this->pushToken(Token::OPERATOR_TYPE, preg_replace('/\\s+/', ' ', $match[0]));\n            $this->moveCursor($match[0]);\n        }\n        // names\n        elseif (preg_match(self::REGEX_NAME, $this->code, $match, 0, $this->cursor)) {\n            $this->pushToken(Token::NAME_TYPE, $match[0]);\n            $this->moveCursor($match[0]);\n        }\n        // numbers\n        elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, 0, $this->cursor)) {\n            $number = (float) $match[0];  // floats\n            if (ctype_digit($match[0]) && $number <= \\PHP_INT_MAX) {\n                $number = (int) $match[0]; // integers lower than the maximum\n            }\n            $this->pushToken(Token::NUMBER_TYPE, $number);\n            $this->moveCursor($match[0]);\n        }\n        // punctuation\n        elseif (str_contains(self::PUNCTUATION, $this->code[$this->cursor])) {\n            // opening bracket\n            if (str_contains('([{', $this->code[$this->cursor])) {\n                $this->brackets[] = [$this->code[$this->cursor], $this->lineno];\n            }\n            // closing bracket\n            elseif (str_contains(')]}', $this->code[$this->cursor])) {\n                if (empty($this->brackets)) {\n                    throw new SyntaxError(\\sprintf('Unexpected \"%s\".', $this->code[$this->cursor]), $this->lineno, $this->source);\n                }\n\n                [$expect, $lineno] = array_pop($this->brackets);\n                if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) {\n                    throw new SyntaxError(\\sprintf('Unclosed \"%s\".', $expect), $lineno, $this->source);\n                }\n            }\n\n            $this->pushToken(Token::PUNCTUATION_TYPE, $this->code[$this->cursor]);\n            ++$this->cursor;\n        }\n        // strings\n        elseif (preg_match(self::REGEX_STRING, $this->code, $match, 0, $this->cursor)) {\n            $this->pushToken(Token::STRING_TYPE, $this->stripcslashes(substr($match[0], 1, -1), substr($match[0], 0, 1)));\n            $this->moveCursor($match[0]);\n        }\n        // opening double quoted string\n        elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) {\n            $this->brackets[] = ['\"', $this->lineno];\n            $this->pushState(self::STATE_STRING);\n            $this->moveCursor($match[0]);\n        }\n        // unlexable\n        else {\n            throw new SyntaxError(\\sprintf('Unexpected character \"%s\".', $this->code[$this->cursor]), $this->lineno, $this->source);\n        }\n    }\n\n    private function stripcslashes(string $str, string $quoteType): string\n    {\n        $result = '';\n        $length = \\strlen($str);\n\n        $i = 0;\n        while ($i < $length) {\n            if (false === $pos = strpos($str, '\\\\', $i)) {\n                $result .= substr($str, $i);\n                break;\n            }\n\n            $result .= substr($str, $i, $pos - $i);\n            $i = $pos + 1;\n\n            if ($i >= $length) {\n                $result .= '\\\\';\n                break;\n            }\n\n            $nextChar = $str[$i];\n\n            if (isset(self::SPECIAL_CHARS[$nextChar])) {\n                $result .= self::SPECIAL_CHARS[$nextChar];\n            } elseif ('\\\\' === $nextChar) {\n                $result .= $nextChar;\n            } elseif (\"'\" === $nextChar || '\"' === $nextChar) {\n                if ($nextChar !== $quoteType) {\n                    trigger_deprecation('twig/twig', '3.12', 'Character \"%s\" at position %d should not be escaped; the \"\\\" character is ignored in Twig v3 but will not be in v4. Please remove the extra \"\\\" character.', $nextChar, $i + 1);\n                }\n                $result .= $nextChar;\n            } elseif ('#' === $nextChar && $i + 1 < $length && '{' === $str[$i + 1]) {\n                $result .= '#{';\n                ++$i;\n            } elseif ('x' === $nextChar && $i + 1 < $length && ctype_xdigit($str[$i + 1])) {\n                $hex = $str[++$i];\n                if ($i + 1 < $length && ctype_xdigit($str[$i + 1])) {\n                    $hex .= $str[++$i];\n                }\n                $result .= \\chr(hexdec($hex));\n            } elseif (ctype_digit($nextChar) && $nextChar < '8') {\n                $octal = $nextChar;\n                while ($i + 1 < $length && ctype_digit($str[$i + 1]) && $str[$i + 1] < '8' && \\strlen($octal) < 3) {\n                    $octal .= $str[++$i];\n                }\n                $result .= \\chr(octdec($octal));\n            } else {\n                trigger_deprecation('twig/twig', '3.12', 'Character \"%s\" at position %d should not be escaped; the \"\\\" character is ignored in Twig v3 but will not be in v4. Please remove the extra \"\\\" character.', $nextChar, $i + 1);\n                $result .= $nextChar;\n            }\n\n            ++$i;\n        }\n\n        return $result;\n    }\n\n    private function lexRawData(): void\n    {\n        if (!preg_match($this->regexes['lex_raw_data'], $this->code, $match, \\PREG_OFFSET_CAPTURE, $this->cursor)) {\n            throw new SyntaxError('Unexpected end of file: Unclosed \"verbatim\" block.', $this->lineno, $this->source);\n        }\n\n        $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor);\n        $this->moveCursor($text.$match[0][0]);\n\n        // trim?\n        if (isset($match[1][0])) {\n            if ($this->options['whitespace_trim'] === $match[1][0]) {\n                // whitespace_trim detected ({%-, {{- or {#-)\n                $text = rtrim($text);\n            } else {\n                // whitespace_line_trim detected ({%~, {{~ or {#~)\n                // don't trim \\r and \\n\n                $text = rtrim($text, \" \\t\\0\\x0B\");\n            }\n        }\n\n        $this->pushToken(Token::TEXT_TYPE, $text);\n    }\n\n    private function lexComment(): void\n    {\n        if (!preg_match($this->regexes['lex_comment'], $this->code, $match, \\PREG_OFFSET_CAPTURE, $this->cursor)) {\n            throw new SyntaxError('Unclosed comment.', $this->lineno, $this->source);\n        }\n\n        $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]);\n    }\n\n    private function lexString(): void\n    {\n        if (preg_match($this->regexes['interpolation_start'], $this->code, $match, 0, $this->cursor)) {\n            $this->brackets[] = [$this->options['interpolation'][0], $this->lineno];\n            $this->pushToken(Token::INTERPOLATION_START_TYPE);\n            $this->moveCursor($match[0]);\n            $this->pushState(self::STATE_INTERPOLATION);\n        } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, 0, $this->cursor) && '' !== $match[0]) {\n            $this->pushToken(Token::STRING_TYPE, $this->stripcslashes($match[0], '\"'));\n            $this->moveCursor($match[0]);\n        } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, 0, $this->cursor)) {\n            [$expect, $lineno] = array_pop($this->brackets);\n            if ('\"' != $this->code[$this->cursor]) {\n                throw new SyntaxError(\\sprintf('Unclosed \"%s\".', $expect), $lineno, $this->source);\n            }\n\n            $this->popState();\n            ++$this->cursor;\n        } else {\n            // unlexable\n            throw new SyntaxError(\\sprintf('Unexpected character \"%s\".', $this->code[$this->cursor]), $this->lineno, $this->source);\n        }\n    }\n\n    private function lexInterpolation(): void\n    {\n        $bracket = end($this->brackets);\n        if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, 0, $this->cursor)) {\n            array_pop($this->brackets);\n            $this->pushToken(Token::INTERPOLATION_END_TYPE);\n            $this->moveCursor($match[0]);\n            $this->popState();\n        } else {\n            $this->lexExpression();\n        }\n    }\n\n    private function pushToken($type, $value = ''): void\n    {\n        // do not push empty text tokens\n        if (Token::TEXT_TYPE === $type && '' === $value) {\n            return;\n        }\n\n        $this->tokens[] = new Token($type, $value, $this->lineno);\n    }\n\n    private function moveCursor($text): void\n    {\n        $this->cursor += \\strlen($text);\n        $this->lineno += substr_count($text, \"\\n\");\n    }\n\n    private function getOperatorRegex(): string\n    {\n        $operators = array_merge(\n            ['='],\n            array_keys($this->env->getUnaryOperators()),\n            array_keys($this->env->getBinaryOperators())\n        );\n\n        $operators = array_combine($operators, array_map('strlen', $operators));\n        arsort($operators);\n\n        $regex = [];\n        foreach ($operators as $operator => $length) {\n            // an operator that ends with a character must be followed by\n            // a whitespace, a parenthesis, an opening map [ or sequence {\n            $r = preg_quote($operator, '/');\n            if (ctype_alpha($operator[$length - 1])) {\n                $r .= '(?=[\\s()\\[{])';\n            }\n\n            // an operator that begins with a character must not have a dot or pipe before\n            if (ctype_alpha($operator[0])) {\n                $r = '(?<![\\.\\|])'.$r;\n            }\n\n            // an operator with a space can be any amount of whitespaces\n            $r = preg_replace('/\\s+/', '\\s+', $r);\n\n            $regex[] = $r;\n        }\n\n        return '/'.implode('|', $regex).'/A';\n    }\n\n    private function pushState($state): void\n    {\n        $this->states[] = $this->state;\n        $this->state = $state;\n    }\n\n    private function popState(): void\n    {\n        if (0 === \\count($this->states)) {\n            throw new \\LogicException('Cannot pop state without a previous state.');\n        }\n\n        $this->state = array_pop($this->states);\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Loader/ArrayLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Loader;\n\nuse Twig\\Error\\LoaderError;\nuse Twig\\Source;\n\n/**\n * Loads a template from an array.\n *\n * When using this loader with a cache mechanism, you should know that a new cache\n * key is generated each time a template content \"changes\" (the cache key being the\n * source code of the template). If you don't want to see your cache grows out of\n * control, you need to take care of clearing the old cache file by yourself.\n *\n * This loader should only be used for unit testing.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nfinal class ArrayLoader implements LoaderInterface\n{\n    /**\n     * @param array $templates An array of templates (keys are the names, and values are the source code)\n     */\n    public function __construct(\n        private array $templates = [],\n    ) {\n    }\n\n    public function setTemplate(string $name, string $template): void\n    {\n        $this->templates[$name] = $template;\n    }\n\n    public function getSourceContext(string $name): Source\n    {\n        if (!isset($this->templates[$name])) {\n            throw new LoaderError(\\sprintf('Template \"%s\" is not defined.', $name));\n        }\n\n        return new Source($this->templates[$name], $name);\n    }\n\n    public function exists(string $name): bool\n    {\n        return isset($this->templates[$name]);\n    }\n\n    public function getCacheKey(string $name): string\n    {\n        if (!isset($this->templates[$name])) {\n            throw new LoaderError(\\sprintf('Template \"%s\" is not defined.', $name));\n        }\n\n        return $name.':'.$this->templates[$name];\n    }\n\n    public function isFresh(string $name, int $time): bool\n    {\n        if (!isset($this->templates[$name])) {\n            throw new LoaderError(\\sprintf('Template \"%s\" is not defined.', $name));\n        }\n\n        return true;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Loader/ChainLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Loader;\n\nuse Twig\\Error\\LoaderError;\nuse Twig\\Source;\n\n/**\n * Loads templates from other loaders.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nfinal class ChainLoader implements LoaderInterface\n{\n    /**\n     * @var array<string, bool>\n     */\n    private $hasSourceCache = [];\n\n    /**\n     * @param iterable<LoaderInterface> $loaders\n     */\n    public function __construct(\n        private iterable $loaders = [],\n    ) {\n    }\n\n    public function addLoader(LoaderInterface $loader): void\n    {\n        $current = $this->loaders;\n\n        $this->loaders = (static function () use ($current, $loader): \\Generator {\n            yield from $current;\n            yield $loader;\n        })();\n\n        $this->hasSourceCache = [];\n    }\n\n    /**\n     * @return LoaderInterface[]\n     */\n    public function getLoaders(): array\n    {\n        if (!\\is_array($this->loaders)) {\n            $this->loaders = iterator_to_array($this->loaders, false);\n        }\n\n        return $this->loaders;\n    }\n\n    public function getSourceContext(string $name): Source\n    {\n        $exceptions = [];\n\n        foreach ($this->getLoaders() as $loader) {\n            if (!$loader->exists($name)) {\n                continue;\n            }\n\n            try {\n                return $loader->getSourceContext($name);\n            } catch (LoaderError $e) {\n                $exceptions[] = $e->getMessage();\n            }\n        }\n\n        throw new LoaderError(\\sprintf('Template \"%s\" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));\n    }\n\n    public function exists(string $name): bool\n    {\n        if (isset($this->hasSourceCache[$name])) {\n            return $this->hasSourceCache[$name];\n        }\n\n        foreach ($this->getLoaders() as $loader) {\n            if ($loader->exists($name)) {\n                return $this->hasSourceCache[$name] = true;\n            }\n        }\n\n        return $this->hasSourceCache[$name] = false;\n    }\n\n    public function getCacheKey(string $name): string\n    {\n        $exceptions = [];\n\n        foreach ($this->getLoaders() as $loader) {\n            if (!$loader->exists($name)) {\n                continue;\n            }\n\n            try {\n                return $loader->getCacheKey($name);\n            } catch (LoaderError $e) {\n                $exceptions[] = \\get_class($loader).': '.$e->getMessage();\n            }\n        }\n\n        throw new LoaderError(\\sprintf('Template \"%s\" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));\n    }\n\n    public function isFresh(string $name, int $time): bool\n    {\n        $exceptions = [];\n\n        foreach ($this->getLoaders() as $loader) {\n            if (!$loader->exists($name)) {\n                continue;\n            }\n\n            try {\n                return $loader->isFresh($name, $time);\n            } catch (LoaderError $e) {\n                $exceptions[] = \\get_class($loader).': '.$e->getMessage();\n            }\n        }\n\n        throw new LoaderError(\\sprintf('Template \"%s\" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : ''));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Loader/FilesystemLoader.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Loader;\n\nuse Twig\\Error\\LoaderError;\nuse Twig\\Source;\n\n/**\n * Loads template from the filesystem.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass FilesystemLoader implements LoaderInterface\n{\n    /** Identifier of the main namespace. */\n    public const MAIN_NAMESPACE = '__main__';\n\n    protected $paths = [];\n    protected $cache = [];\n    protected $errorCache = [];\n\n    private $rootPath;\n\n    /**\n     * @param string|array $paths    A path or an array of paths where to look for templates\n     * @param string|null  $rootPath The root path common to all relative paths (null for getcwd())\n     */\n    public function __construct($paths = [], ?string $rootPath = null)\n    {\n        $this->rootPath = ($rootPath ?? getcwd()).\\DIRECTORY_SEPARATOR;\n        if (null !== $rootPath && false !== ($realPath = realpath($rootPath))) {\n            $this->rootPath = $realPath.\\DIRECTORY_SEPARATOR;\n        }\n\n        if ($paths) {\n            $this->setPaths($paths);\n        }\n    }\n\n    /**\n     * Returns the paths to the templates.\n     */\n    public function getPaths(string $namespace = self::MAIN_NAMESPACE): array\n    {\n        return $this->paths[$namespace] ?? [];\n    }\n\n    /**\n     * Returns the path namespaces.\n     *\n     * The main namespace is always defined.\n     */\n    public function getNamespaces(): array\n    {\n        return array_keys($this->paths);\n    }\n\n    /**\n     * @param string|array $paths A path or an array of paths where to look for templates\n     */\n    public function setPaths($paths, string $namespace = self::MAIN_NAMESPACE): void\n    {\n        if (!\\is_array($paths)) {\n            $paths = [$paths];\n        }\n\n        $this->paths[$namespace] = [];\n        foreach ($paths as $path) {\n            $this->addPath($path, $namespace);\n        }\n    }\n\n    /**\n     * @throws LoaderError\n     */\n    public function addPath(string $path, string $namespace = self::MAIN_NAMESPACE): void\n    {\n        // invalidate the cache\n        $this->cache = $this->errorCache = [];\n\n        $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path;\n        if (!is_dir($checkPath)) {\n            throw new LoaderError(\\sprintf('The \"%s\" directory does not exist (\"%s\").', $path, $checkPath));\n        }\n\n        $this->paths[$namespace][] = rtrim($path, '/\\\\');\n    }\n\n    /**\n     * @throws LoaderError\n     */\n    public function prependPath(string $path, string $namespace = self::MAIN_NAMESPACE): void\n    {\n        // invalidate the cache\n        $this->cache = $this->errorCache = [];\n\n        $checkPath = $this->isAbsolutePath($path) ? $path : $this->rootPath.$path;\n        if (!is_dir($checkPath)) {\n            throw new LoaderError(\\sprintf('The \"%s\" directory does not exist (\"%s\").', $path, $checkPath));\n        }\n\n        $path = rtrim($path, '/\\\\');\n\n        if (!isset($this->paths[$namespace])) {\n            $this->paths[$namespace][] = $path;\n        } else {\n            array_unshift($this->paths[$namespace], $path);\n        }\n    }\n\n    public function getSourceContext(string $name): Source\n    {\n        if (null === $path = $this->findTemplate($name)) {\n            return new Source('', $name, '');\n        }\n\n        return new Source(file_get_contents($path), $name, $path);\n    }\n\n    public function getCacheKey(string $name): string\n    {\n        if (null === $path = $this->findTemplate($name)) {\n            return '';\n        }\n        $len = \\strlen($this->rootPath);\n        if (0 === strncmp($this->rootPath, $path, $len)) {\n            return substr($path, $len);\n        }\n\n        return $path;\n    }\n\n    /**\n     * @return bool\n     */\n    public function exists(string $name)\n    {\n        $name = $this->normalizeName($name);\n\n        if (isset($this->cache[$name])) {\n            return true;\n        }\n\n        return null !== $this->findTemplate($name, false);\n    }\n\n    public function isFresh(string $name, int $time): bool\n    {\n        // false support to be removed in 3.0\n        if (null === $path = $this->findTemplate($name)) {\n            return false;\n        }\n\n        return filemtime($path) < $time;\n    }\n\n    /**\n     * @return string|null\n     */\n    protected function findTemplate(string $name, bool $throw = true)\n    {\n        $name = $this->normalizeName($name);\n\n        if (isset($this->cache[$name])) {\n            return $this->cache[$name];\n        }\n\n        if (isset($this->errorCache[$name])) {\n            if (!$throw) {\n                return null;\n            }\n\n            throw new LoaderError($this->errorCache[$name]);\n        }\n\n        try {\n            [$namespace, $shortname] = $this->parseName($name);\n\n            $this->validateName($shortname);\n        } catch (LoaderError $e) {\n            if (!$throw) {\n                return null;\n            }\n\n            throw $e;\n        }\n\n        if (!isset($this->paths[$namespace])) {\n            $this->errorCache[$name] = \\sprintf('There are no registered paths for namespace \"%s\".', $namespace);\n\n            if (!$throw) {\n                return null;\n            }\n\n            throw new LoaderError($this->errorCache[$name]);\n        }\n\n        foreach ($this->paths[$namespace] as $path) {\n            if (!$this->isAbsolutePath($path)) {\n                $path = $this->rootPath.$path;\n            }\n\n            if (is_file($path.'/'.$shortname)) {\n                if (false !== $realpath = realpath($path.'/'.$shortname)) {\n                    return $this->cache[$name] = $realpath;\n                }\n\n                return $this->cache[$name] = $path.'/'.$shortname;\n            }\n        }\n\n        $this->errorCache[$name] = \\sprintf('Unable to find template \"%s\" (looked into: %s).', $name, implode(', ', $this->paths[$namespace]));\n\n        if (!$throw) {\n            return null;\n        }\n\n        throw new LoaderError($this->errorCache[$name]);\n    }\n\n    private function normalizeName(string $name): string\n    {\n        return preg_replace('#/{2,}#', '/', str_replace('\\\\', '/', $name));\n    }\n\n    private function parseName(string $name, string $default = self::MAIN_NAMESPACE): array\n    {\n        if (isset($name[0]) && '@' == $name[0]) {\n            if (false === $pos = strpos($name, '/')) {\n                throw new LoaderError(\\sprintf('Malformed namespaced template name \"%s\" (expecting \"@namespace/template_name\").', $name));\n            }\n\n            $namespace = substr($name, 1, $pos - 1);\n            $shortname = substr($name, $pos + 1);\n\n            return [$namespace, $shortname];\n        }\n\n        return [$default, $name];\n    }\n\n    private function validateName(string $name): void\n    {\n        if (str_contains($name, \"\\0\")) {\n            throw new LoaderError('A template name cannot contain NUL bytes.');\n        }\n\n        $name = ltrim($name, '/');\n        $parts = explode('/', $name);\n        $level = 0;\n        foreach ($parts as $part) {\n            if ('..' === $part) {\n                --$level;\n            } elseif ('.' !== $part) {\n                ++$level;\n            }\n\n            if ($level < 0) {\n                throw new LoaderError(\\sprintf('Looks like you try to load a template outside configured directories (%s).', $name));\n            }\n        }\n    }\n\n    private function isAbsolutePath(string $file): bool\n    {\n        return strspn($file, '/\\\\', 0, 1)\n            || (\\strlen($file) > 3 && ctype_alpha($file[0])\n                && ':' === $file[1]\n                && strspn($file, '/\\\\', 2, 1)\n            )\n            || null !== parse_url($file, \\PHP_URL_SCHEME)\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Loader/LoaderInterface.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Loader;\n\nuse Twig\\Error\\LoaderError;\nuse Twig\\Source;\n\n/**\n * Interface all loaders must implement.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\ninterface LoaderInterface\n{\n    /**\n     * Returns the source context for a given template logical name.\n     *\n     * @throws LoaderError When $name is not found\n     */\n    public function getSourceContext(string $name): Source;\n\n    /**\n     * Gets the cache key to use for the cache for a given template name.\n     *\n     * @throws LoaderError When $name is not found\n     */\n    public function getCacheKey(string $name): string;\n\n    /**\n     * @param int $time Timestamp of the last modification time of the cached template\n     *\n     * @throws LoaderError When $name is not found\n     */\n    public function isFresh(string $name, int $time): bool;\n\n    /**\n     * @return bool\n     */\n    public function exists(string $name);\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Markup.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig;\n\n/**\n * Marks a content as safe.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass Markup implements \\Countable, \\JsonSerializable, \\Stringable\n{\n    private $content;\n    private ?string $charset;\n\n    public function __construct($content, $charset)\n    {\n        $this->content = (string) $content;\n        $this->charset = $charset;\n    }\n\n    public function __toString()\n    {\n        return $this->content;\n    }\n\n    /**\n     * @return int\n     */\n    #[\\ReturnTypeWillChange]\n    public function count()\n    {\n        return mb_strlen($this->content, $this->charset);\n    }\n\n    /**\n     * @return mixed\n     */\n    #[\\ReturnTypeWillChange]\n    public function jsonSerialize()\n    {\n        return $this->content;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/AutoEscapeNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\n\n/**\n * Represents an autoescape node.\n *\n * The value is the escaping strategy (can be html, js, ...)\n *\n * The true value is equivalent to html.\n *\n * If autoescaping is disabled, then the value is false.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass AutoEscapeNode extends Node\n{\n    public function __construct($value, Node $body, int $lineno)\n    {\n        parent::__construct(['body' => $body], ['value' => $value], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler->subcompile($this->getNode('body'));\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/BlockNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\n\n/**\n * Represents a block node.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass BlockNode extends Node\n{\n    public function __construct(string $name, Node $body, int $lineno)\n    {\n        parent::__construct(['body' => $body], ['name' => $name], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\"/**\\n\")\n            ->write(\" * @return iterable<null|scalar|\\Stringable>\\n\")\n            ->write(\" */\\n\")\n            ->write(\\sprintf(\"public function block_%s(array \\$context, array \\$blocks = []): iterable\\n\", $this->getAttribute('name')), \"{\\n\")\n            ->indent()\n            ->write(\"\\$macros = \\$this->macros;\\n\")\n        ;\n\n        $compiler\n            ->subcompile($this->getNode('body'))\n            ->write(\"yield from [];\\n\")\n            ->outdent()\n            ->write(\"}\\n\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/BlockReferenceNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\n\n/**\n * Represents a block call node.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass BlockReferenceNode extends Node implements NodeOutputInterface\n{\n    public function __construct(string $name, int $lineno)\n    {\n        parent::__construct([], ['name' => $name], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write(\\sprintf(\"yield from \\$this->unwrap()->yieldBlock('%s', \\$context, \\$blocks);\\n\", $this->getAttribute('name')))\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/BodyNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\n\n/**\n * Represents a body node.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass BodyNode extends Node\n{\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/CaptureNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\n\n/**\n * Represents a node for which we need to capture the output.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass CaptureNode extends Node\n{\n    public function __construct(Node $body, int $lineno)\n    {\n        parent::__construct(['body' => $body], ['raw' => false], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $useYield = $compiler->getEnvironment()->useYield();\n\n        if (!$this->getAttribute('raw')) {\n            $compiler->raw(\"('' === \\$tmp = \");\n        }\n        $compiler\n            ->raw($useYield ? \"implode('', iterator_to_array(\" : '\\\\Twig\\\\Extension\\\\CoreExtension::captureOutput(')\n            ->raw(\"(function () use (&\\$context, \\$macros, \\$blocks) {\\n\")\n            ->indent()\n            ->subcompile($this->getNode('body'))\n            ->write(\"yield from [];\\n\")\n            ->outdent()\n            ->write('})()')\n        ;\n        if ($useYield) {\n            $compiler->raw(', false))');\n        } else {\n            $compiler->raw(')');\n        }\n        if (!$this->getAttribute('raw')) {\n            $compiler->raw(\") ? '' : new Markup(\\$tmp, \\$this->env->getCharset());\");\n        } else {\n            $compiler->raw(';');\n        }\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/CheckSecurityCallNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass CheckSecurityCallNode extends Node\n{\n    public function compile(Compiler $compiler)\n    {\n        $compiler\n            ->write(\"\\$this->sandbox = \\$this->extensions[SandboxExtension::class];\\n\")\n            ->write(\"\\$this->checkSecurity();\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/CheckSecurityNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\n\n/**\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass CheckSecurityNode extends Node\n{\n    private $usedFilters;\n    private $usedTags;\n    private $usedFunctions;\n\n    /**\n     * @param array<string, int> $usedFilters\n     * @param array<string, int> $usedTags\n     * @param array<string, int> $usedFunctions\n     */\n    public function __construct(array $usedFilters, array $usedTags, array $usedFunctions)\n    {\n        $this->usedFilters = $usedFilters;\n        $this->usedTags = $usedTags;\n        $this->usedFunctions = $usedFunctions;\n\n        parent::__construct();\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->write(\"\\n\")\n            ->write(\"public function checkSecurity()\\n\")\n            ->write(\"{\\n\")\n            ->indent()\n            ->write('static $tags = ')->repr(array_filter($this->usedTags))->raw(\";\\n\")\n            ->write('static $filters = ')->repr(array_filter($this->usedFilters))->raw(\";\\n\")\n            ->write('static $functions = ')->repr(array_filter($this->usedFunctions))->raw(\";\\n\\n\")\n            ->write(\"try {\\n\")\n            ->indent()\n            ->write(\"\\$this->sandbox->checkSecurity(\\n\")\n            ->indent()\n            ->write(!$this->usedTags ? \"[],\\n\" : \"['\".implode(\"', '\", array_keys($this->usedTags)).\"'],\\n\")\n            ->write(!$this->usedFilters ? \"[],\\n\" : \"['\".implode(\"', '\", array_keys($this->usedFilters)).\"'],\\n\")\n            ->write(!$this->usedFunctions ? \"[],\\n\" : \"['\".implode(\"', '\", array_keys($this->usedFunctions)).\"'],\\n\")\n            ->write(\"\\$this->source\\n\")\n            ->outdent()\n            ->write(\");\\n\")\n            ->outdent()\n            ->write(\"} catch (SecurityError \\$e) {\\n\")\n            ->indent()\n            ->write(\"\\$e->setSourceContext(\\$this->source);\\n\\n\")\n            ->write(\"if (\\$e instanceof SecurityNotAllowedTagError && isset(\\$tags[\\$e->getTagName()])) {\\n\")\n            ->indent()\n            ->write(\"\\$e->setTemplateLine(\\$tags[\\$e->getTagName()]);\\n\")\n            ->outdent()\n            ->write(\"} elseif (\\$e instanceof SecurityNotAllowedFilterError && isset(\\$filters[\\$e->getFilterName()])) {\\n\")\n            ->indent()\n            ->write(\"\\$e->setTemplateLine(\\$filters[\\$e->getFilterName()]);\\n\")\n            ->outdent()\n            ->write(\"} elseif (\\$e instanceof SecurityNotAllowedFunctionError && isset(\\$functions[\\$e->getFunctionName()])) {\\n\")\n            ->indent()\n            ->write(\"\\$e->setTemplateLine(\\$functions[\\$e->getFunctionName()]);\\n\")\n            ->outdent()\n            ->write(\"}\\n\\n\")\n            ->write(\"throw \\$e;\\n\")\n            ->outdent()\n            ->write(\"}\\n\\n\")\n            ->outdent()\n            ->write(\"}\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/CheckToStringNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\nuse Twig\\Node\\Expression\\AbstractExpression;\n\n/**\n * Checks if casting an expression to __toString() is allowed by the sandbox.\n *\n * For instance, when there is a simple Print statement, like {{ article }},\n * and if the sandbox is enabled, we need to check that the __toString()\n * method is allowed if 'article' is an object. The same goes for {{ article|upper }}\n * or {{ random(article) }}\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass CheckToStringNode extends AbstractExpression\n{\n    public function __construct(AbstractExpression $expr)\n    {\n        parent::__construct(['expr' => $expr], [], $expr->getTemplateLine());\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $expr = $this->getNode('expr');\n        $compiler\n            ->raw('$this->sandbox->ensureToStringAllowed(')\n            ->subcompile($expr)\n            ->raw(', ')\n            ->repr($expr->getTemplateLine())\n            ->raw(', $this->source)')\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/DeprecatedNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Expression\\ConstantExpression;\n\n/**\n * Represents a deprecated node.\n *\n * @author Yonel Ceruto <yonelceruto@gmail.com>\n */\n#[YieldReady]\nclass DeprecatedNode extends Node\n{\n    public function __construct(AbstractExpression $expr, int $lineno)\n    {\n        parent::__construct(['expr' => $expr], [], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler->addDebugInfo($this);\n\n        $expr = $this->getNode('expr');\n\n        if (!$expr instanceof ConstantExpression) {\n            $varName = $compiler->getVarName();\n            $compiler\n                ->write(\\sprintf('$%s = ', $varName))\n                ->subcompile($expr)\n                ->raw(\";\\n\")\n            ;\n        }\n\n        $compiler->write('trigger_deprecation(');\n        if ($this->hasNode('package')) {\n            $compiler->subcompile($this->getNode('package'));\n        } else {\n            $compiler->raw(\"''\");\n        }\n        $compiler->raw(', ');\n        if ($this->hasNode('version')) {\n            $compiler->subcompile($this->getNode('version'));\n        } else {\n            $compiler->raw(\"''\");\n        }\n        $compiler->raw(', ');\n\n        if ($expr instanceof ConstantExpression) {\n            $compiler->subcompile($expr);\n        } else {\n            $compiler->write(\\sprintf('$%s', $varName));\n        }\n\n        $compiler\n            ->raw('.')\n            ->string(\\sprintf(' in \"%s\" at line %d.', $this->getTemplateName(), $this->getTemplateLine()))\n            ->raw(\");\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/DoNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\nuse Twig\\Node\\Expression\\AbstractExpression;\n\n/**\n * Represents a do node.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass DoNode extends Node\n{\n    public function __construct(AbstractExpression $expr, int $lineno)\n    {\n        parent::__construct(['expr' => $expr], [], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->write('')\n            ->subcompile($this->getNode('expr'))\n            ->raw(\";\\n\")\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/EmbedNode.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node;\n\nuse Twig\\Attribute\\YieldReady;\nuse Twig\\Compiler;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Expression\\ConstantExpression;\n\n/**\n * Represents an embed node.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\n#[YieldReady]\nclass EmbedNode extends IncludeNode\n{\n    // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module)\n    public function __construct(string $name, int $index, ?AbstractExpression $variables, bool $only, bool $ignoreMissing, int $lineno)\n    {\n        parent::__construct(new ConstantExpression('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno);\n\n        $this->setAttribute('name', $name);\n        $this->setAttribute('index', $index);\n    }\n\n    protected function addGetTemplate(Compiler $compiler): void\n    {\n        $compiler\n            ->write('$this->loadTemplate(')\n            ->string($this->getAttribute('name'))\n            ->raw(', ')\n            ->repr($this->getTemplateName())\n            ->raw(', ')\n            ->repr($this->getTemplateLine())\n            ->raw(', ')\n            ->string($this->getAttribute('index'))\n            ->raw(')')\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/AbstractExpression.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression;\n\nuse Twig\\Node\\Node;\n\n/**\n * Abstract class for all nodes that represents an expression.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nabstract class AbstractExpression extends Node\n{\n    public function isGenerator(): bool\n    {\n        return $this->hasAttribute('is_generator') && $this->getAttribute('is_generator');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/ArrayExpression.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression;\n\nuse Twig\\Compiler;\n\nclass ArrayExpression extends AbstractExpression\n{\n    private $index;\n\n    public function __construct(array $elements, int $lineno)\n    {\n        parent::__construct($elements, [], $lineno);\n\n        $this->index = -1;\n        foreach ($this->getKeyValuePairs() as $pair) {\n            if ($pair['key'] instanceof ConstantExpression && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) {\n                $this->index = $pair['key']->getAttribute('value');\n            }\n        }\n    }\n\n    public function getKeyValuePairs(): array\n    {\n        $pairs = [];\n        foreach (array_chunk($this->nodes, 2) as $pair) {\n            $pairs[] = [\n                'key' => $pair[0],\n                'value' => $pair[1],\n            ];\n        }\n\n        return $pairs;\n    }\n\n    public function hasElement(AbstractExpression $key): bool\n    {\n        foreach ($this->getKeyValuePairs() as $pair) {\n            // we compare the string representation of the keys\n            // to avoid comparing the line numbers which are not relevant here.\n            if ((string) $key === (string) $pair['key']) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    public function addElement(AbstractExpression $value, ?AbstractExpression $key = null): void\n    {\n        if (null === $key) {\n            $key = new ConstantExpression(++$this->index, $value->getTemplateLine());\n        }\n\n        array_push($this->nodes, $key, $value);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $keyValuePairs = $this->getKeyValuePairs();\n        $needsArrayMergeSpread = \\PHP_VERSION_ID < 80100 && $this->hasSpreadItem($keyValuePairs);\n\n        if ($needsArrayMergeSpread) {\n            $compiler->raw('CoreExtension::merge(');\n        }\n        $compiler->raw('[');\n        $first = true;\n        $reopenAfterMergeSpread = false;\n        $nextIndex = 0;\n        foreach ($keyValuePairs as $pair) {\n            if ($reopenAfterMergeSpread) {\n                $compiler->raw(', [');\n                $reopenAfterMergeSpread = false;\n            }\n\n            if ($needsArrayMergeSpread && $pair['value']->hasAttribute('spread')) {\n                $compiler->raw('], ')->subcompile($pair['value']);\n                $first = true;\n                $reopenAfterMergeSpread = true;\n                continue;\n            }\n            if (!$first) {\n                $compiler->raw(', ');\n            }\n            $first = false;\n\n            if ($pair['value']->hasAttribute('spread') && !$needsArrayMergeSpread) {\n                $compiler->raw('...')->subcompile($pair['value']);\n                ++$nextIndex;\n            } else {\n                $key = $pair['key'] instanceof ConstantExpression ? $pair['key']->getAttribute('value') : null;\n\n                if ($nextIndex !== $key) {\n                    if (\\is_int($key)) {\n                        $nextIndex = $key + 1;\n                    }\n                    $compiler\n                        ->subcompile($pair['key'])\n                        ->raw(' => ')\n                    ;\n                } else {\n                    ++$nextIndex;\n                }\n\n                $compiler->subcompile($pair['value']);\n            }\n        }\n        if (!$reopenAfterMergeSpread) {\n            $compiler->raw(']');\n        }\n        if ($needsArrayMergeSpread) {\n            $compiler->raw(')');\n        }\n    }\n\n    private function hasSpreadItem(array $pairs): bool\n    {\n        foreach ($pairs as $pair) {\n            if ($pair['value']->hasAttribute('spread')) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression;\n\nuse Twig\\Compiler;\nuse Twig\\Node\\Node;\n\n/**\n * Represents an arrow function.\n *\n * @author Fabien Potencier <fabien@symfony.com>\n */\nclass ArrowFunctionExpression extends AbstractExpression\n{\n    public function __construct(AbstractExpression $expr, Node $names, $lineno)\n    {\n        parent::__construct(['expr' => $expr, 'names' => $names], [], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->addDebugInfo($this)\n            ->raw('function (')\n        ;\n        foreach ($this->getNode('names') as $i => $name) {\n            if ($i) {\n                $compiler->raw(', ');\n            }\n\n            $compiler\n                ->raw('$__')\n                ->raw($name->getAttribute('name'))\n                ->raw('__')\n            ;\n        }\n        $compiler\n            ->raw(') use ($context, $macros) { ')\n        ;\n        foreach ($this->getNode('names') as $name) {\n            $compiler\n                ->raw('$context[\"')\n                ->raw($name->getAttribute('name'))\n                ->raw('\"] = $__')\n                ->raw($name->getAttribute('name'))\n                ->raw('__; ')\n            ;\n        }\n        $compiler\n            ->raw('return ')\n            ->subcompile($this->getNode('expr'))\n            ->raw('; }')\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/AssignNameExpression.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression;\n\nuse Twig\\Compiler;\n\nclass AssignNameExpression extends NameExpression\n{\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->raw('$context[')\n            ->string($this->getAttribute('name'))\n            ->raw(']')\n        ;\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\nuse Twig\\Node\\Expression\\AbstractExpression;\nuse Twig\\Node\\Node;\n\nabstract class AbstractBinary extends AbstractExpression\n{\n    public function __construct(Node $left, Node $right, int $lineno)\n    {\n        parent::__construct(['left' => $left, 'right' => $right], [], $lineno);\n    }\n\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->raw('(')\n            ->subcompile($this->getNode('left'))\n            ->raw(' ')\n        ;\n        $this->operator($compiler);\n        $compiler\n            ->raw(' ')\n            ->subcompile($this->getNode('right'))\n            ->raw(')')\n        ;\n    }\n\n    abstract public function operator(Compiler $compiler): Compiler;\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass AddBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('+');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass AndBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('&&');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass BitwiseAndBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('&');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass BitwiseOrBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('|');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass BitwiseXorBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('^');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass ConcatBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('.');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass DivBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('/');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass EndsWithBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        $left = $compiler->getVarName();\n        $right = $compiler->getVarName();\n        $compiler\n            ->raw(\\sprintf('(is_string($%s = ', $left))\n            ->subcompile($this->getNode('left'))\n            ->raw(\\sprintf(') && is_string($%s = ', $right))\n            ->subcompile($this->getNode('right'))\n            ->raw(\\sprintf(') && str_ends_with($%1$s, $%2$s))', $left, $right))\n        ;\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass EqualBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        if (\\PHP_VERSION_ID >= 80000) {\n            parent::compile($compiler);\n\n            return;\n        }\n\n        $compiler\n            ->raw('(0 === CoreExtension::compare(')\n            ->subcompile($this->getNode('left'))\n            ->raw(', ')\n            ->subcompile($this->getNode('right'))\n            ->raw('))')\n        ;\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('==');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass FloorDivBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        $compiler->raw('(int) floor(');\n        parent::compile($compiler);\n        $compiler->raw(')');\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('/');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass GreaterEqualBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        if (\\PHP_VERSION_ID >= 80000) {\n            parent::compile($compiler);\n\n            return;\n        }\n\n        $compiler\n            ->raw('(0 <= CoreExtension::compare(')\n            ->subcompile($this->getNode('left'))\n            ->raw(', ')\n            ->subcompile($this->getNode('right'))\n            ->raw('))')\n        ;\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('>=');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass HasEveryBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->raw('CoreExtension::arrayEvery($this->env, ')\n            ->subcompile($this->getNode('left'))\n            ->raw(', ')\n            ->subcompile($this->getNode('right'))\n            ->raw(')')\n        ;\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/InBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass InBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        $compiler\n            ->raw('CoreExtension::inFilter(')\n            ->subcompile($this->getNode('left'))\n            ->raw(', ')\n            ->subcompile($this->getNode('right'))\n            ->raw(')')\n        ;\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('in');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass LessBinary extends AbstractBinary\n{\n    public function compile(Compiler $compiler): void\n    {\n        if (\\PHP_VERSION_ID >= 80000) {\n            parent::compile($compiler);\n\n            return;\n        }\n\n        $compiler\n            ->raw('(-1 === CoreExtension::compare(')\n            ->subcompile($this->getNode('left'))\n            ->raw(', ')\n            ->subcompile($this->getNode('right'))\n            ->raw('))')\n        ;\n    }\n\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('<');\n    }\n}\n"
  },
  {
    "path": "data/web/inc/lib/vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php",
    "content": "<?php\n\n/*\n * This file is part of Twig.\n *\n * (c) Fabien Potencier\n * (c) Armin Ronacher\n *\n * For the full copyright and license information, please view the LICENSE\n * file that was distributed with this source code.\n */\n\nnamespace Twig\\Node\\Expression\\Binary;\n\nuse Twig\\Compiler;\n\nclass ModBinary extends AbstractBinary\n{\n    public function operator(Compiler $compiler): Compiler\n    {\n        return $compiler->raw('%');\n    }\n}\n"
  },
  {
    "path": "data/web/templates/cache/.gitkeep",
    "content": ""
  }
]